* [PATCH 0/2] Use submodule way to access brotli
@ 2020-03-02 3:19 Zhang, Shenglei
2020-03-02 3:19 ` [PATCH 1/2] MdeModulePkg/BrotliCustomDecompressLib: Make brotli a submodule Zhang, Shenglei
2020-03-02 3:19 ` [PATCH 2/2] BaseTools: " Zhang, Shenglei
0 siblings, 2 replies; 6+ messages in thread
From: Zhang, Shenglei @ 2020-03-02 3:19 UTC (permalink / raw)
To: devel; +Cc: Liming Gao, Jian J Wang, Hao A Wu, Bob Feng
Currently brotli is used and customized by edk2 in BaseTools
and MdeModulePkg. These two patches make brotli a submodule in
edk2.
https://bugzilla.tianocore.org/show_bug.cgi?id=2558
https://bugzilla.tianocore.org/show_bug.cgi?id=2559
Cc: Liming Gao <liming.gao@intel.com>
Cc: Jian J Wang <jian.j.wang@intel.com>
Cc: Hao A Wu <hao.a.wu@intel.com>
Cc: Bob Feng <bob.c.feng@intel.com>
Shenglei Zhang (2):
MdeModulePkg/BrotliCustomDecompressLib: Make brotli a submodule
BaseTools: Make brotli a submodule
.../C/BrotliCompress/common/dictionary.c | 5905 -----------------
.../C/BrotliCompress/common/transform.c | 235 -
.../Source/C/BrotliCompress/dec/bit_reader.c | 48 -
.../Source/C/BrotliCompress/dec/decode.c | 2497 -------
.../Source/C/BrotliCompress/dec/huffman.c | 356 -
BaseTools/Source/C/BrotliCompress/dec/state.c | 164 -
.../BrotliCompress/enc/backward_references.c | 144 -
.../enc/backward_references_hq.c | 830 ---
.../Source/C/BrotliCompress/enc/bit_cost.c | 35 -
.../C/BrotliCompress/enc/block_splitter.c | 194 -
.../C/BrotliCompress/enc/brotli_bit_stream.c | 1331 ----
.../Source/C/BrotliCompress/enc/cluster.c | 56 -
.../C/BrotliCompress/enc/compress_fragment.c | 790 ---
.../enc/compress_fragment_two_pass.c | 645 --
.../C/BrotliCompress/enc/dictionary_hash.c | 1120 ----
.../Source/C/BrotliCompress/enc/encode.c | 1864 ------
.../C/BrotliCompress/enc/encoder_dict.c | 32 -
.../C/BrotliCompress/enc/entropy_encode.c | 501 --
.../Source/C/BrotliCompress/enc/histogram.c | 100 -
.../C/BrotliCompress/enc/literal_cost.c | 175 -
.../Source/C/BrotliCompress/enc/memory.c | 170 -
.../Source/C/BrotliCompress/enc/metablock.c | 667 --
.../Source/C/BrotliCompress/enc/static_dict.c | 486 --
.../Source/C/BrotliCompress/enc/utf8_util.c | 85 -
.../Source/C/BrotliCompress/tools/brotli.c | 1143 ----
.../BrotliDecUefiSupport.c | 31 +
.../common/dictionary.c | 5905 -----------------
.../common/transform.c | 235 -
.../dec/bit_reader.c | 48 -
.../BrotliCustomDecompressLib/dec/decode.c | 2500 -------
.../BrotliCustomDecompressLib/dec/huffman.c | 356 -
.../BrotliCustomDecompressLib/dec/state.c | 164 -
.gitmodules | 6 +
BaseTools/Source/C/BrotliCompress/GNUmakefile | 54 +-
BaseTools/Source/C/BrotliCompress/LICENSE | 19 -
BaseTools/Source/C/BrotliCompress/Makefile | 52 +-
BaseTools/Source/C/BrotliCompress/README.md | 26 -
BaseTools/Source/C/BrotliCompress/ReadMe.txt | 2 -
BaseTools/Source/C/BrotliCompress/brotli | 1 +
.../C/BrotliCompress/common/constants.h | 64 -
.../Source/C/BrotliCompress/common/context.h | 261 -
.../C/BrotliCompress/common/dictionary.h | 64 -
.../Source/C/BrotliCompress/common/platform.h | 558 --
.../C/BrotliCompress/common/transform.h | 80 -
.../Source/C/BrotliCompress/common/version.h | 26 -
.../Source/C/BrotliCompress/dec/bit_reader.h | 309 -
.../Source/C/BrotliCompress/dec/huffman.h | 72 -
.../Source/C/BrotliCompress/dec/prefix.h | 750 ---
BaseTools/Source/C/BrotliCompress/dec/state.h | 258 -
.../brotli-comparison-study-2015-09-22.pdf | Bin 215208 -> 0 bytes
.../BrotliCompress/enc/backward_references.h | 38 -
.../enc/backward_references_hq.h | 93 -
.../enc/backward_references_inc.h | 153 -
.../Source/C/BrotliCompress/enc/bit_cost.h | 63 -
.../C/BrotliCompress/enc/bit_cost_inc.h | 127 -
.../C/BrotliCompress/enc/block_encoder_inc.h | 34 -
.../C/BrotliCompress/enc/block_splitter.h | 51 -
.../C/BrotliCompress/enc/block_splitter_inc.h | 431 --
.../C/BrotliCompress/enc/brotli_bit_stream.h | 84 -
.../Source/C/BrotliCompress/enc/cluster.h | 48 -
.../Source/C/BrotliCompress/enc/cluster_inc.h | 317 -
.../Source/C/BrotliCompress/enc/command.h | 190 -
.../C/BrotliCompress/enc/compress_fragment.h | 61 -
.../enc/compress_fragment_two_pass.h | 54 -
.../C/BrotliCompress/enc/dictionary_hash.h | 24 -
.../C/BrotliCompress/enc/encoder_dict.h | 41 -
.../C/BrotliCompress/enc/entropy_encode.h | 122 -
.../enc/entropy_encode_static.h | 539 --
.../Source/C/BrotliCompress/enc/fast_log.h | 147 -
.../C/BrotliCompress/enc/find_match_length.h | 80 -
BaseTools/Source/C/BrotliCompress/enc/hash.h | 497 --
.../C/BrotliCompress/enc/hash_composite_inc.h | 133 -
.../enc/hash_forgetful_chain_inc.h | 254 -
.../enc/hash_longest_match64_inc.h | 266 -
.../enc/hash_longest_match_inc.h | 258 -
.../enc/hash_longest_match_quickly_inc.h | 235 -
.../C/BrotliCompress/enc/hash_rolling_inc.h | 215 -
.../enc/hash_to_binary_tree_inc.h | 327 -
.../Source/C/BrotliCompress/enc/histogram.h | 63 -
.../C/BrotliCompress/enc/histogram_inc.h | 51 -
.../C/BrotliCompress/enc/literal_cost.h | 30 -
.../Source/C/BrotliCompress/enc/memory.h | 102 -
.../Source/C/BrotliCompress/enc/metablock.h | 105 -
.../C/BrotliCompress/enc/metablock_inc.h | 183 -
.../Source/C/BrotliCompress/enc/params.h | 44 -
.../Source/C/BrotliCompress/enc/prefix.h | 53 -
.../Source/C/BrotliCompress/enc/quality.h | 165 -
.../Source/C/BrotliCompress/enc/ringbuffer.h | 164 -
.../Source/C/BrotliCompress/enc/static_dict.h | 40 -
.../C/BrotliCompress/enc/static_dict_lut.h | 5864 ----------------
.../Source/C/BrotliCompress/enc/utf8_util.h | 32 -
.../Source/C/BrotliCompress/enc/write_bits.h | 85 -
.../C/BrotliCompress/include/brotli/decode.h | 344 -
.../C/BrotliCompress/include/brotli/encode.h | 427 --
.../C/BrotliCompress/include/brotli/port.h | 274 -
.../C/BrotliCompress/include/brotli/types.h | 83 -
.../Source/C/BrotliCompress/tools/brotli.md | 107 -
.../BrotliCustomDecompressLib.inf | 42 +-
.../BrotliDecUefiSupport.h | 43 +
.../BrotliDecompressLibInternal.h | 23 +-
.../Library/BrotliCustomDecompressLib/LICENSE | 19 -
.../BrotliCustomDecompressLib/README.md | 26 -
.../BrotliCustomDecompressLib/ReadMe.txt | 2 -
.../Library/BrotliCustomDecompressLib/brotli | 1 +
.../BrotliCustomDecompressLib/brotli/decode.h | 344 -
.../BrotliCustomDecompressLib/brotli/port.h | 274 -
.../BrotliCustomDecompressLib/brotli/types.h | 92 -
.../common/constants.h | 64 -
.../common/context.h | 261 -
.../common/dictionary.h | 64 -
.../common/platform.h | 559 --
.../common/transform.h | 80 -
.../common/version.h | 26 -
.../dec/bit_reader.h | 309 -
.../BrotliCustomDecompressLib/dec/huffman.h | 72 -
.../BrotliCustomDecompressLib/dec/prefix.h | 750 ---
.../BrotliCustomDecompressLib/dec/state.h | 258 -
.../brotli-comparison-study-2015-09-22.pdf | Bin 215208 -> 0 bytes
.../BrotliCustomDecompressLib/stddef.h | 9 +
.../BrotliCustomDecompressLib/stdint.h | 9 +
.../BrotliCustomDecompressLib/stdlib.h | 9 +
.../BrotliCustomDecompressLib/string.h | 9 +
MdeModulePkg/MdeModulePkg.dec | 2 +
Readme.md | 6 +-
124 files changed, 202 insertions(+), 47663 deletions(-)
delete mode 100644 BaseTools/Source/C/BrotliCompress/common/dictionary.c
delete mode 100644 BaseTools/Source/C/BrotliCompress/common/transform.c
delete mode 100644 BaseTools/Source/C/BrotliCompress/dec/bit_reader.c
delete mode 100644 BaseTools/Source/C/BrotliCompress/dec/decode.c
delete mode 100644 BaseTools/Source/C/BrotliCompress/dec/huffman.c
delete mode 100644 BaseTools/Source/C/BrotliCompress/dec/state.c
delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/backward_references.c
delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/backward_references_hq.c
delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/bit_cost.c
delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/block_splitter.c
delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/brotli_bit_stream.c
delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/cluster.c
delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/compress_fragment.c
delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/compress_fragment_two_pass.c
delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/dictionary_hash.c
delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/encode.c
delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/encoder_dict.c
delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/entropy_encode.c
delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/histogram.c
delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/literal_cost.c
delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/memory.c
delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/metablock.c
delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/static_dict.c
delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/utf8_util.c
delete mode 100644 BaseTools/Source/C/BrotliCompress/tools/brotli.c
create mode 100644 MdeModulePkg/Library/BrotliCustomDecompressLib/BrotliDecUefiSupport.c
delete mode 100644 MdeModulePkg/Library/BrotliCustomDecompressLib/common/dictionary.c
delete mode 100644 MdeModulePkg/Library/BrotliCustomDecompressLib/common/transform.c
delete mode 100644 MdeModulePkg/Library/BrotliCustomDecompressLib/dec/bit_reader.c
delete mode 100644 MdeModulePkg/Library/BrotliCustomDecompressLib/dec/decode.c
delete mode 100644 MdeModulePkg/Library/BrotliCustomDecompressLib/dec/huffman.c
delete mode 100644 MdeModulePkg/Library/BrotliCustomDecompressLib/dec/state.c
delete mode 100644 BaseTools/Source/C/BrotliCompress/LICENSE
delete mode 100644 BaseTools/Source/C/BrotliCompress/README.md
delete mode 100644 BaseTools/Source/C/BrotliCompress/ReadMe.txt
create mode 160000 BaseTools/Source/C/BrotliCompress/brotli
delete mode 100644 BaseTools/Source/C/BrotliCompress/common/constants.h
delete mode 100644 BaseTools/Source/C/BrotliCompress/common/context.h
delete mode 100644 BaseTools/Source/C/BrotliCompress/common/dictionary.h
delete mode 100644 BaseTools/Source/C/BrotliCompress/common/platform.h
delete mode 100644 BaseTools/Source/C/BrotliCompress/common/transform.h
delete mode 100644 BaseTools/Source/C/BrotliCompress/common/version.h
delete mode 100644 BaseTools/Source/C/BrotliCompress/dec/bit_reader.h
delete mode 100644 BaseTools/Source/C/BrotliCompress/dec/huffman.h
delete mode 100644 BaseTools/Source/C/BrotliCompress/dec/prefix.h
delete mode 100644 BaseTools/Source/C/BrotliCompress/dec/state.h
delete mode 100644 BaseTools/Source/C/BrotliCompress/docs/brotli-comparison-study-2015-09-22.pdf
delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/backward_references.h
delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/backward_references_hq.h
delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/backward_references_inc.h
delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/bit_cost.h
delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/bit_cost_inc.h
delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/block_encoder_inc.h
delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/block_splitter.h
delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/block_splitter_inc.h
delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/brotli_bit_stream.h
delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/cluster.h
delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/cluster_inc.h
delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/command.h
delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/compress_fragment.h
delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/compress_fragment_two_pass.h
delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/dictionary_hash.h
delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/encoder_dict.h
delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/entropy_encode.h
delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/entropy_encode_static.h
delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/fast_log.h
delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/find_match_length.h
delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/hash.h
delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/hash_composite_inc.h
delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/hash_forgetful_chain_inc.h
delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/hash_longest_match64_inc.h
delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/hash_longest_match_inc.h
delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/hash_longest_match_quickly_inc.h
delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/hash_rolling_inc.h
delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/hash_to_binary_tree_inc.h
delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/histogram.h
delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/histogram_inc.h
delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/literal_cost.h
delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/memory.h
delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/metablock.h
delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/metablock_inc.h
delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/params.h
delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/prefix.h
delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/quality.h
delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/ringbuffer.h
delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/static_dict.h
delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/static_dict_lut.h
delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/utf8_util.h
delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/write_bits.h
delete mode 100644 BaseTools/Source/C/BrotliCompress/include/brotli/decode.h
delete mode 100644 BaseTools/Source/C/BrotliCompress/include/brotli/encode.h
delete mode 100644 BaseTools/Source/C/BrotliCompress/include/brotli/port.h
delete mode 100644 BaseTools/Source/C/BrotliCompress/include/brotli/types.h
delete mode 100644 BaseTools/Source/C/BrotliCompress/tools/brotli.md
create mode 100644 MdeModulePkg/Library/BrotliCustomDecompressLib/BrotliDecUefiSupport.h
delete mode 100644 MdeModulePkg/Library/BrotliCustomDecompressLib/LICENSE
delete mode 100644 MdeModulePkg/Library/BrotliCustomDecompressLib/README.md
delete mode 100644 MdeModulePkg/Library/BrotliCustomDecompressLib/ReadMe.txt
create mode 160000 MdeModulePkg/Library/BrotliCustomDecompressLib/brotli
delete mode 100644 MdeModulePkg/Library/BrotliCustomDecompressLib/brotli/decode.h
delete mode 100644 MdeModulePkg/Library/BrotliCustomDecompressLib/brotli/port.h
delete mode 100644 MdeModulePkg/Library/BrotliCustomDecompressLib/brotli/types.h
delete mode 100644 MdeModulePkg/Library/BrotliCustomDecompressLib/common/constants.h
delete mode 100644 MdeModulePkg/Library/BrotliCustomDecompressLib/common/context.h
delete mode 100644 MdeModulePkg/Library/BrotliCustomDecompressLib/common/dictionary.h
delete mode 100644 MdeModulePkg/Library/BrotliCustomDecompressLib/common/platform.h
delete mode 100644 MdeModulePkg/Library/BrotliCustomDecompressLib/common/transform.h
delete mode 100644 MdeModulePkg/Library/BrotliCustomDecompressLib/common/version.h
delete mode 100644 MdeModulePkg/Library/BrotliCustomDecompressLib/dec/bit_reader.h
delete mode 100644 MdeModulePkg/Library/BrotliCustomDecompressLib/dec/huffman.h
delete mode 100644 MdeModulePkg/Library/BrotliCustomDecompressLib/dec/prefix.h
delete mode 100644 MdeModulePkg/Library/BrotliCustomDecompressLib/dec/state.h
delete mode 100644 MdeModulePkg/Library/BrotliCustomDecompressLib/docs/brotli-comparison-study-2015-09-22.pdf
create mode 100644 MdeModulePkg/Library/BrotliCustomDecompressLib/stddef.h
create mode 100644 MdeModulePkg/Library/BrotliCustomDecompressLib/stdint.h
create mode 100644 MdeModulePkg/Library/BrotliCustomDecompressLib/stdlib.h
create mode 100644 MdeModulePkg/Library/BrotliCustomDecompressLib/string.h
--
2.18.0.windows.1
^ permalink raw reply [flat|nested] 6+ messages in thread
* [PATCH 1/2] MdeModulePkg/BrotliCustomDecompressLib: Make brotli a submodule
2020-03-02 3:19 [PATCH 0/2] Use submodule way to access brotli Zhang, Shenglei
@ 2020-03-02 3:19 ` Zhang, Shenglei
2020-03-02 3:19 ` [PATCH 2/2] BaseTools: " Zhang, Shenglei
1 sibling, 0 replies; 6+ messages in thread
From: Zhang, Shenglei @ 2020-03-02 3:19 UTC (permalink / raw)
To: devel; +Cc: Liming Gao, Jian J Wang, Hao A Wu
Use submodule way to access brotli in MdeModulePkg based on
brotli version 666c3280cc11dc433c303d79a83d4ffbdd12cc8d.
The newly added BrotliDecUefiSupport.h/.c are used by directory
'brotli'.
https://bugzilla.tianocore.org/show_bug.cgi?id=2559
Cc: Liming Gao <liming.gao@intel.com>
Cc: Jian J Wang <jian.j.wang@intel.com>
Cc: Hao A Wu <hao.a.wu@intel.com>
Signed-off-by: Shenglei Zhang <shenglei.zhang@intel.com>
---
.../BrotliDecUefiSupport.c | 31 +
.../common/dictionary.c | 5905 -----------------
.../common/transform.c | 235 -
.../dec/bit_reader.c | 48 -
.../BrotliCustomDecompressLib/dec/decode.c | 2500 -------
.../BrotliCustomDecompressLib/dec/huffman.c | 356 -
.../BrotliCustomDecompressLib/dec/state.c | 164 -
.gitmodules | 3 +
.../BrotliCustomDecompressLib.inf | 42 +-
.../BrotliDecUefiSupport.h | 43 +
.../BrotliDecompressLibInternal.h | 23 +-
.../Library/BrotliCustomDecompressLib/LICENSE | 19 -
.../BrotliCustomDecompressLib/README.md | 26 -
.../BrotliCustomDecompressLib/ReadMe.txt | 2 -
.../Library/BrotliCustomDecompressLib/brotli | 1 +
.../BrotliCustomDecompressLib/brotli/decode.h | 344 -
.../BrotliCustomDecompressLib/brotli/port.h | 274 -
.../BrotliCustomDecompressLib/brotli/types.h | 92 -
.../common/constants.h | 64 -
.../common/context.h | 261 -
.../common/dictionary.h | 64 -
.../common/platform.h | 559 --
.../common/transform.h | 80 -
.../common/version.h | 26 -
.../dec/bit_reader.h | 309 -
.../BrotliCustomDecompressLib/dec/huffman.h | 72 -
.../BrotliCustomDecompressLib/dec/prefix.h | 750 ---
.../BrotliCustomDecompressLib/dec/state.h | 258 -
.../brotli-comparison-study-2015-09-22.pdf | Bin 215208 -> 0 bytes
.../BrotliCustomDecompressLib/stddef.h | 9 +
.../BrotliCustomDecompressLib/stdint.h | 9 +
.../BrotliCustomDecompressLib/stdlib.h | 9 +
.../BrotliCustomDecompressLib/string.h | 9 +
MdeModulePkg/MdeModulePkg.dec | 2 +
Readme.md | 3 +-
35 files changed, 143 insertions(+), 12449 deletions(-)
create mode 100644 MdeModulePkg/Library/BrotliCustomDecompressLib/BrotliDecUefiSupport.c
delete mode 100644 MdeModulePkg/Library/BrotliCustomDecompressLib/common/dictionary.c
delete mode 100644 MdeModulePkg/Library/BrotliCustomDecompressLib/common/transform.c
delete mode 100644 MdeModulePkg/Library/BrotliCustomDecompressLib/dec/bit_reader.c
delete mode 100644 MdeModulePkg/Library/BrotliCustomDecompressLib/dec/decode.c
delete mode 100644 MdeModulePkg/Library/BrotliCustomDecompressLib/dec/huffman.c
delete mode 100644 MdeModulePkg/Library/BrotliCustomDecompressLib/dec/state.c
create mode 100644 MdeModulePkg/Library/BrotliCustomDecompressLib/BrotliDecUefiSupport.h
delete mode 100644 MdeModulePkg/Library/BrotliCustomDecompressLib/LICENSE
delete mode 100644 MdeModulePkg/Library/BrotliCustomDecompressLib/README.md
delete mode 100644 MdeModulePkg/Library/BrotliCustomDecompressLib/ReadMe.txt
create mode 160000 MdeModulePkg/Library/BrotliCustomDecompressLib/brotli
delete mode 100644 MdeModulePkg/Library/BrotliCustomDecompressLib/brotli/decode.h
delete mode 100644 MdeModulePkg/Library/BrotliCustomDecompressLib/brotli/port.h
delete mode 100644 MdeModulePkg/Library/BrotliCustomDecompressLib/brotli/types.h
delete mode 100644 MdeModulePkg/Library/BrotliCustomDecompressLib/common/constants.h
delete mode 100644 MdeModulePkg/Library/BrotliCustomDecompressLib/common/context.h
delete mode 100644 MdeModulePkg/Library/BrotliCustomDecompressLib/common/dictionary.h
delete mode 100644 MdeModulePkg/Library/BrotliCustomDecompressLib/common/platform.h
delete mode 100644 MdeModulePkg/Library/BrotliCustomDecompressLib/common/transform.h
delete mode 100644 MdeModulePkg/Library/BrotliCustomDecompressLib/common/version.h
delete mode 100644 MdeModulePkg/Library/BrotliCustomDecompressLib/dec/bit_reader.h
delete mode 100644 MdeModulePkg/Library/BrotliCustomDecompressLib/dec/huffman.h
delete mode 100644 MdeModulePkg/Library/BrotliCustomDecompressLib/dec/prefix.h
delete mode 100644 MdeModulePkg/Library/BrotliCustomDecompressLib/dec/state.h
delete mode 100644 MdeModulePkg/Library/BrotliCustomDecompressLib/docs/brotli-comparison-study-2015-09-22.pdf
create mode 100644 MdeModulePkg/Library/BrotliCustomDecompressLib/stddef.h
create mode 100644 MdeModulePkg/Library/BrotliCustomDecompressLib/stdint.h
create mode 100644 MdeModulePkg/Library/BrotliCustomDecompressLib/stdlib.h
create mode 100644 MdeModulePkg/Library/BrotliCustomDecompressLib/string.h
diff --git a/MdeModulePkg/Library/BrotliCustomDecompressLib/BrotliDecUefiSupport.c b/MdeModulePkg/Library/BrotliCustomDecompressLib/BrotliDecUefiSupport.c
new file mode 100644
index 000000000000..102146535b4f
--- /dev/null
+++ b/MdeModulePkg/Library/BrotliCustomDecompressLib/BrotliDecUefiSupport.c
@@ -0,0 +1,31 @@
+/** @file
+ Implements for functions declared in BrotliDecUefiSupport.h
+
+ Copyright (c) 2020, Intel Corporation. All rights reserved.<BR>
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+
+**/
+#include <BrotliDecUefiSupport.h>
+
+/**
+ Dummy malloc function for compiler.
+**/
+VOID *
+BrDummyMalloc (
+ IN size_t Size
+ )
+{
+ ASSERT (FALSE);
+ return NULL;
+}
+
+/**
+ Dummy free function for compiler.
+**/
+VOID
+BrDummyFree (
+ IN VOID * Ptr
+ )
+{
+ ASSERT (FALSE);
+}
diff --git a/MdeModulePkg/Library/BrotliCustomDecompressLib/common/dictionary.c b/MdeModulePkg/Library/BrotliCustomDecompressLib/common/dictionary.c
deleted file mode 100644
index 7fd076194825..000000000000
--- a/MdeModulePkg/Library/BrotliCustomDecompressLib/common/dictionary.c
+++ /dev/null
@@ -1,5905 +0,0 @@
-/* Copyright 2013 Google Inc. All Rights Reserved.
-
- Distributed under MIT license.
- See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
-*/
-
-#include "./dictionary.h"
-
-#if defined(__cplusplus) || defined(c_plusplus)
-extern "C" {
-#endif
-
-#ifndef BROTLI_EXTERNAL_DICTIONARY_DATA
-static const uint8_t kBrotliDictionaryData[] =
-{
-116,105,109,101,100,111,119,110,108,105,102,101,108,101,102,116,98,97,99,107,99,
-111,100,101,100,97,116,97,115,104,111,119,111,110,108,121,115,105,116,101,99,105
-,116,121,111,112,101,110,106,117,115,116,108,105,107,101,102,114,101,101,119,111
-,114,107,116,101,120,116,121,101,97,114,111,118,101,114,98,111,100,121,108,111,
-118,101,102,111,114,109,98,111,111,107,112,108,97,121,108,105,118,101,108,105,
-110,101,104,101,108,112,104,111,109,101,115,105,100,101,109,111,114,101,119,111,
-114,100,108,111,110,103,116,104,101,109,118,105,101,119,102,105,110,100,112,97,
-103,101,100,97,121,115,102,117,108,108,104,101,97,100,116,101,114,109,101,97,99,
-104,97,114,101,97,102,114,111,109,116,114,117,101,109,97,114,107,97,98,108,101,
-117,112,111,110,104,105,103,104,100,97,116,101,108,97,110,100,110,101,119,115,
-101,118,101,110,110,101,120,116,99,97,115,101,98,111,116,104,112,111,115,116,117
-,115,101,100,109,97,100,101,104,97,110,100,104,101,114,101,119,104,97,116,110,97
-,109,101,76,105,110,107,98,108,111,103,115,105,122,101,98,97,115,101,104,101,108
-,100,109,97,107,101,109,97,105,110,117,115,101,114,39,41,32,43,104,111,108,100,
-101,110,100,115,119,105,116,104,78,101,119,115,114,101,97,100,119,101,114,101,
-115,105,103,110,116,97,107,101,104,97,118,101,103,97,109,101,115,101,101,110,99,
-97,108,108,112,97,116,104,119,101,108,108,112,108,117,115,109,101,110,117,102,
-105,108,109,112,97,114,116,106,111,105,110,116,104,105,115,108,105,115,116,103,
-111,111,100,110,101,101,100,119,97,121,115,119,101,115,116,106,111,98,115,109,
-105,110,100,97,108,115,111,108,111,103,111,114,105,99,104,117,115,101,115,108,97
-,115,116,116,101,97,109,97,114,109,121,102,111,111,100,107,105,110,103,119,105,
-108,108,101,97,115,116,119,97,114,100,98,101,115,116,102,105,114,101,80,97,103,
-101,107,110,111,119,97,119,97,121,46,112,110,103,109,111,118,101,116,104,97,110,
-108,111,97,100,103,105,118,101,115,101,108,102,110,111,116,101,109,117,99,104,
-102,101,101,100,109,97,110,121,114,111,99,107,105,99,111,110,111,110,99,101,108,
-111,111,107,104,105,100,101,100,105,101,100,72,111,109,101,114,117,108,101,104,
-111,115,116,97,106,97,120,105,110,102,111,99,108,117,98,108,97,119,115,108,101,
-115,115,104,97,108,102,115,111,109,101,115,117,99,104,122,111,110,101,49,48,48,
-37,111,110,101,115,99,97,114,101,84,105,109,101,114,97,99,101,98,108,117,101,102
-,111,117,114,119,101,101,107,102,97,99,101,104,111,112,101,103,97,118,101,104,97
-,114,100,108,111,115,116,119,104,101,110,112,97,114,107,107,101,112,116,112,97,
-115,115,115,104,105,112,114,111,111,109,72,84,77,76,112,108,97,110,84,121,112,
-101,100,111,110,101,115,97,118,101,107,101,101,112,102,108,97,103,108,105,110,
-107,115,111,108,100,102,105,118,101,116,111,111,107,114,97,116,101,116,111,119,
-110,106,117,109,112,116,104,117,115,100,97,114,107,99,97,114,100,102,105,108,101
-,102,101,97,114,115,116,97,121,107,105,108,108,116,104,97,116,102,97,108,108,97,
-117,116,111,101,118,101,114,46,99,111,109,116,97,108,107,115,104,111,112,118,111
-,116,101,100,101,101,112,109,111,100,101,114,101,115,116,116,117,114,110,98,111,
-114,110,98,97,110,100,102,101,108,108,114,111,115,101,117,114,108,40,115,107,105
-,110,114,111,108,101,99,111,109,101,97,99,116,115,97,103,101,115,109,101,101,116
-,103,111,108,100,46,106,112,103,105,116,101,109,118,97,114,121,102,101,108,116,
-116,104,101,110,115,101,110,100,100,114,111,112,86,105,101,119,99,111,112,121,49
-,46,48,34,60,47,97,62,115,116,111,112,101,108,115,101,108,105,101,115,116,111,
-117,114,112,97,99,107,46,103,105,102,112,97,115,116,99,115,115,63,103,114,97,121
-,109,101,97,110,38,103,116,59,114,105,100,101,115,104,111,116,108,97,116,101,115
-,97,105,100,114,111,97,100,118,97,114,32,102,101,101,108,106,111,104,110,114,105
-,99,107,112,111,114,116,102,97,115,116,39,85,65,45,100,101,97,100,60,47,98,62,
-112,111,111,114,98,105,108,108,116,121,112,101,85,46,83,46,119,111,111,100,109,
-117,115,116,50,112,120,59,73,110,102,111,114,97,110,107,119,105,100,101,119,97,
-110,116,119,97,108,108,108,101,97,100,91,48,93,59,112,97,117,108,119,97,118,101,
-115,117,114,101,36,40,39,35,119,97,105,116,109,97,115,115,97,114,109,115,103,111
-,101,115,103,97,105,110,108,97,110,103,112,97,105,100,33,45,45,32,108,111,99,107
-,117,110,105,116,114,111,111,116,119,97,108,107,102,105,114,109,119,105,102,101,
-120,109,108,34,115,111,110,103,116,101,115,116,50,48,112,120,107,105,110,100,114
-,111,119,115,116,111,111,108,102,111,110,116,109,97,105,108,115,97,102,101,115,
-116,97,114,109,97,112,115,99,111,114,101,114,97,105,110,102,108,111,119,98,97,98
-,121,115,112,97,110,115,97,121,115,52,112,120,59,54,112,120,59,97,114,116,115,
-102,111,111,116,114,101,97,108,119,105,107,105,104,101,97,116,115,116,101,112,
-116,114,105,112,111,114,103,47,108,97,107,101,119,101,97,107,116,111,108,100,70,
-111,114,109,99,97,115,116,102,97,110,115,98,97,110,107,118,101,114,121,114,117,
-110,115,106,117,108,121,116,97,115,107,49,112,120,59,103,111,97,108,103,114,101,
-119,115,108,111,119,101,100,103,101,105,100,61,34,115,101,116,115,53,112,120,59,
-46,106,115,63,52,48,112,120,105,102,32,40,115,111,111,110,115,101,97,116,110,111
-,110,101,116,117,98,101,122,101,114,111,115,101,110,116,114,101,101,100,102,97,
-99,116,105,110,116,111,103,105,102,116,104,97,114,109,49,56,112,120,99,97,109,
-101,104,105,108,108,98,111,108,100,122,111,111,109,118,111,105,100,101,97,115,
-121,114,105,110,103,102,105,108,108,112,101,97,107,105,110,105,116,99,111,115,
-116,51,112,120,59,106,97,99,107,116,97,103,115,98,105,116,115,114,111,108,108,
-101,100,105,116,107,110,101,119,110,101,97,114,60,33,45,45,103,114,111,119,74,83
-,79,78,100,117,116,121,78,97,109,101,115,97,108,101,121,111,117,32,108,111,116,
-115,112,97,105,110,106,97,122,122,99,111,108,100,101,121,101,115,102,105,115,104
-,119,119,119,46,114,105,115,107,116,97,98,115,112,114,101,118,49,48,112,120,114,
-105,115,101,50,53,112,120,66,108,117,101,100,105,110,103,51,48,48,44,98,97,108,
-108,102,111,114,100,101,97,114,110,119,105,108,100,98,111,120,46,102,97,105,114,
-108,97,99,107,118,101,114,115,112,97,105,114,106,117,110,101,116,101,99,104,105,
-102,40,33,112,105,99,107,101,118,105,108,36,40,34,35,119,97,114,109,108,111,114,
-100,100,111,101,115,112,117,108,108,44,48,48,48,105,100,101,97,100,114,97,119,
-104,117,103,101,115,112,111,116,102,117,110,100,98,117,114,110,104,114,101,102,
-99,101,108,108,107,101,121,115,116,105,99,107,104,111,117,114,108,111,115,115,
-102,117,101,108,49,50,112,120,115,117,105,116,100,101,97,108,82,83,83,34,97,103,
-101,100,103,114,101,121,71,69,84,34,101,97,115,101,97,105,109,115,103,105,114,
-108,97,105,100,115,56,112,120,59,110,97,118,121,103,114,105,100,116,105,112,115,
-35,57,57,57,119,97,114,115,108,97,100,121,99,97,114,115,41,59,32,125,112,104,112
-,63,104,101,108,108,116,97,108,108,119,104,111,109,122,104,58,229,42,47,13,10,32
-,49,48,48,104,97,108,108,46,10,10,65,55,112,120,59,112,117,115,104,99,104,97,116
-,48,112,120,59,99,114,101,119,42,47,60,47,104,97,115,104,55,53,112,120,102,108,
-97,116,114,97,114,101,32,38,38,32,116,101,108,108,99,97,109,112,111,110,116,111,
-108,97,105,100,109,105,115,115,115,107,105,112,116,101,110,116,102,105,110,101,
-109,97,108,101,103,101,116,115,112,108,111,116,52,48,48,44,13,10,13,10,99,111,
-111,108,102,101,101,116,46,112,104,112,60,98,114,62,101,114,105,99,109,111,115,
-116,103,117,105,100,98,101,108,108,100,101,115,99,104,97,105,114,109,97,116,104,
-97,116,111,109,47,105,109,103,38,35,56,50,108,117,99,107,99,101,110,116,48,48,48
-,59,116,105,110,121,103,111,110,101,104,116,109,108,115,101,108,108,100,114,117,
-103,70,82,69,69,110,111,100,101,110,105,99,107,63,105,100,61,108,111,115,101,110
-,117,108,108,118,97,115,116,119,105,110,100,82,83,83,32,119,101,97,114,114,101,
-108,121,98,101,101,110,115,97,109,101,100,117,107,101,110,97,115,97,99,97,112,
-101,119,105,115,104,103,117,108,102,84,50,51,58,104,105,116,115,115,108,111,116,
-103,97,116,101,107,105,99,107,98,108,117,114,116,104,101,121,49,53,112,120,39,39
-,41,59,41,59,34,62,109,115,105,101,119,105,110,115,98,105,114,100,115,111,114,
-116,98,101,116,97,115,101,101,107,84,49,56,58,111,114,100,115,116,114,101,101,
-109,97,108,108,54,48,112,120,102,97,114,109,226,128,153,115,98,111,121,115,91,48
-,93,46,39,41,59,34,80,79,83,84,98,101,97,114,107,105,100,115,41,59,125,125,109,
-97,114,121,116,101,110,100,40,85,75,41,113,117,97,100,122,104,58,230,45,115,105,
-122,45,45,45,45,112,114,111,112,39,41,59,13,108,105,102,116,84,49,57,58,118,105,
-99,101,97,110,100,121,100,101,98,116,62,82,83,83,112,111,111,108,110,101,99,107,
-98,108,111,119,84,49,54,58,100,111,111,114,101,118,97,108,84,49,55,58,108,101,
-116,115,102,97,105,108,111,114,97,108,112,111,108,108,110,111,118,97,99,111,108,
-115,103,101,110,101,32,226,128,148,115,111,102,116,114,111,109,101,116,105,108,
-108,114,111,115,115,60,104,51,62,112,111,117,114,102,97,100,101,112,105,110,107,
-60,116,114,62,109,105,110,105,41,124,33,40,109,105,110,101,122,104,58,232,98,97,
-114,115,104,101,97,114,48,48,41,59,109,105,108,107,32,45,45,62,105,114,111,110,
-102,114,101,100,100,105,115,107,119,101,110,116,115,111,105,108,112,117,116,115,
-47,106,115,47,104,111,108,121,84,50,50,58,73,83,66,78,84,50,48,58,97,100,97,109,
-115,101,101,115,60,104,50,62,106,115,111,110,39,44,32,39,99,111,110,116,84,50,49
-,58,32,82,83,83,108,111,111,112,97,115,105,97,109,111,111,110,60,47,112,62,115,
-111,117,108,76,73,78,69,102,111,114,116,99,97,114,116,84,49,52,58,60,104,49,62,
-56,48,112,120,33,45,45,60,57,112,120,59,84,48,52,58,109,105,107,101,58,52,54,90,
-110,105,99,101,105,110,99,104,89,111,114,107,114,105,99,101,122,104,58,228,39,41
-,41,59,112,117,114,101,109,97,103,101,112,97,114,97,116,111,110,101,98,111,110,
-100,58,51,55,90,95,111,102,95,39,93,41,59,48,48,48,44,122,104,58,231,116,97,110,
-107,121,97,114,100,98,111,119,108,98,117,115,104,58,53,54,90,74,97,118,97,51,48,
-112,120,10,124,125,10,37,67,51,37,58,51,52,90,106,101,102,102,69,88,80,73,99,97,
-115,104,118,105,115,97,103,111,108,102,115,110,111,119,122,104,58,233,113,117,
-101,114,46,99,115,115,115,105,99,107,109,101,97,116,109,105,110,46,98,105,110,
-100,100,101,108,108,104,105,114,101,112,105,99,115,114,101,110,116,58,51,54,90,
-72,84,84,80,45,50,48,49,102,111,116,111,119,111,108,102,69,78,68,32,120,98,111,
-120,58,53,52,90,66,79,68,89,100,105,99,107,59,10,125,10,101,120,105,116,58,51,53
-,90,118,97,114,115,98,101,97,116,39,125,41,59,100,105,101,116,57,57,57,59,97,110
-,110,101,125,125,60,47,91,105,93,46,76,97,110,103,107,109,194,178,119,105,114,
-101,116,111,121,115,97,100,100,115,115,101,97,108,97,108,101,120,59,10,9,125,101
-,99,104,111,110,105,110,101,46,111,114,103,48,48,53,41,116,111,110,121,106,101,
-119,115,115,97,110,100,108,101,103,115,114,111,111,102,48,48,48,41,32,50,48,48,
-119,105,110,101,103,101,97,114,100,111,103,115,98,111,111,116,103,97,114,121,99,
-117,116,115,116,121,108,101,116,101,109,112,116,105,111,110,46,120,109,108,99,
-111,99,107,103,97,110,103,36,40,39,46,53,48,112,120,80,104,46,68,109,105,115,99,
-97,108,97,110,108,111,97,110,100,101,115,107,109,105,108,101,114,121,97,110,117,
-110,105,120,100,105,115,99,41,59,125,10,100,117,115,116,99,108,105,112,41,46,10,
-10,55,48,112,120,45,50,48,48,68,86,68,115,55,93,62,60,116,97,112,101,100,101,109
-,111,105,43,43,41,119,97,103,101,101,117,114,111,112,104,105,108,111,112,116,115
-,104,111,108,101,70,65,81,115,97,115,105,110,45,50,54,84,108,97,98,115,112,101,
-116,115,85,82,76,32,98,117,108,107,99,111,111,107,59,125,13,10,72,69,65,68,91,48
-,93,41,97,98,98,114,106,117,97,110,40,49,57,56,108,101,115,104,116,119,105,110,
-60,47,105,62,115,111,110,121,103,117,121,115,102,117,99,107,112,105,112,101,124,
-45,10,33,48,48,50,41,110,100,111,119,91,49,93,59,91,93,59,10,76,111,103,32,115,
-97,108,116,13,10,9,9,98,97,110,103,116,114,105,109,98,97,116,104,41,123,13,10,48
-,48,112,120,10,125,41,59,107,111,58,236,102,101,101,115,97,100,62,13,115,58,47,
-47,32,91,93,59,116,111,108,108,112,108,117,103,40,41,123,10,123,13,10,32,46,106,
-115,39,50,48,48,112,100,117,97,108,98,111,97,116,46,74,80,71,41,59,10,125,113,
-117,111,116,41,59,10,10,39,41,59,10,13,10,125,13,50,48,49,52,50,48,49,53,50,48,
-49,54,50,48,49,55,50,48,49,56,50,48,49,57,50,48,50,48,50,48,50,49,50,48,50,50,50
-,48,50,51,50,48,50,52,50,48,50,53,50,48,50,54,50,48,50,55,50,48,50,56,50,48,50,
-57,50,48,51,48,50,48,51,49,50,48,51,50,50,48,51,51,50,48,51,52,50,48,51,53,50,48
-,51,54,50,48,51,55,50,48,49,51,50,48,49,50,50,48,49,49,50,48,49,48,50,48,48,57,
-50,48,48,56,50,48,48,55,50,48,48,54,50,48,48,53,50,48,48,52,50,48,48,51,50,48,48
-,50,50,48,48,49,50,48,48,48,49,57,57,57,49,57,57,56,49,57,57,55,49,57,57,54,49,
-57,57,53,49,57,57,52,49,57,57,51,49,57,57,50,49,57,57,49,49,57,57,48,49,57,56,57
-,49,57,56,56,49,57,56,55,49,57,56,54,49,57,56,53,49,57,56,52,49,57,56,51,49,57,
-56,50,49,57,56,49,49,57,56,48,49,57,55,57,49,57,55,56,49,57,55,55,49,57,55,54,49
-,57,55,53,49,57,55,52,49,57,55,51,49,57,55,50,49,57,55,49,49,57,55,48,49,57,54,
-57,49,57,54,56,49,57,54,55,49,57,54,54,49,57,54,53,49,57,54,52,49,57,54,51,49,57
-,54,50,49,57,54,49,49,57,54,48,49,57,53,57,49,57,53,56,49,57,53,55,49,57,53,54,
-49,57,53,53,49,57,53,52,49,57,53,51,49,57,53,50,49,57,53,49,49,57,53,48,49,48,48
-,48,49,48,50,52,49,51,57,52,48,48,48,48,57,57,57,57,99,111,109,111,109,195,161,
-115,101,115,116,101,101,115,116,97,112,101,114,111,116,111,100,111,104,97,99,101
-,99,97,100,97,97,195,177,111,98,105,101,110,100,195,173,97,97,115,195,173,118,
-105,100,97,99,97,115,111,111,116,114,111,102,111,114,111,115,111,108,111,111,116
-,114,97,99,117,97,108,100,105,106,111,115,105,100,111,103,114,97,110,116,105,112
-,111,116,101,109,97,100,101,98,101,97,108,103,111,113,117,195,169,101,115,116,
-111,110,97,100,97,116,114,101,115,112,111,99,111,99,97,115,97,98,97,106,111,116,
-111,100,97,115,105,110,111,97,103,117,97,112,117,101,115,117,110,111,115,97,110,
-116,101,100,105,99,101,108,117,105,115,101,108,108,97,109,97,121,111,122,111,110
-,97,97,109,111,114,112,105,115,111,111,98,114,97,99,108,105,99,101,108,108,111,
-100,105,111,115,104,111,114,97,99,97,115,105,208,183,208,176,208,189,208,176,208
-,190,208,188,209,128,208,176,209,128,209,131,209,130,208,176,208,189,208,181,208
-,191,208,190,208,190,209,130,208,184,208,183,208,189,208,190,208,180,208,190,209
-,130,208,190,208,182,208,181,208,190,208,189,208,184,209,133,208,157,208,176,208
-,181,208,181,208,177,209,139,208,188,209,139,208,146,209,139,209,129,208,190,208
-,178,209,139,208,178,208,190,208,157,208,190,208,190,208,177,208,159,208,190,208
-,187,208,184,208,189,208,184,208,160,208,164,208,157,208,181,208,156,209,139,209
-,130,209,139,208,158,208,189,208,184,208,188,208,180,208,176,208,151,208,176,208
-,148,208,176,208,157,209,131,208,158,208,177,209,130,208,181,208,152,208,183,208
-,181,208,185,208,189,209,131,208,188,208,188,208,162,209,139,209,131,208,182,217
-,129,217,138,216,163,217,134,217,133,216,167,217,133,216,185,217,131,217,132,216
-,163,217,136,216,177,216,175,217,138,216,167,217,129,217,137,217,135,217,136,217
-,132,217,133,217,132,217,131,216,167,217,136,217,132,217,135,216,168,216,179,216
-,167,217,132,216,165,217,134,217,135,217,138,216,163,217,138,217,130,216,175,217
-,135,217,132,216,171,217,133,216,168,217,135,217,132,217,136,217,132,217,138,216
-,168,217,132,216,167,217,138,216,168,217,131,216,180,217,138,216,167,217,133,216
-,163,217,133,217,134,216,170,216,168,217,138,217,132,217,134,216,173,216,168,217
-,135,217,133,217,133,216,180,217,136,216,180,102,105,114,115,116,118,105,100,101
-,111,108,105,103,104,116,119,111,114,108,100,109,101,100,105,97,119,104,105,116,
-101,99,108,111,115,101,98,108,97,99,107,114,105,103,104,116,115,109,97,108,108,
-98,111,111,107,115,112,108,97,99,101,109,117,115,105,99,102,105,101,108,100,111,
-114,100,101,114,112,111,105,110,116,118,97,108,117,101,108,101,118,101,108,116,
-97,98,108,101,98,111,97,114,100,104,111,117,115,101,103,114,111,117,112,119,111,
-114,107,115,121,101,97,114,115,115,116,97,116,101,116,111,100,97,121,119,97,116,
-101,114,115,116,97,114,116,115,116,121,108,101,100,101,97,116,104,112,111,119,
-101,114,112,104,111,110,101,110,105,103,104,116,101,114,114,111,114,105,110,112,
-117,116,97,98,111,117,116,116,101,114,109,115,116,105,116,108,101,116,111,111,
-108,115,101,118,101,110,116,108,111,99,97,108,116,105,109,101,115,108,97,114,103
-,101,119,111,114,100,115,103,97,109,101,115,115,104,111,114,116,115,112,97,99,
-101,102,111,99,117,115,99,108,101,97,114,109,111,100,101,108,98,108,111,99,107,
-103,117,105,100,101,114,97,100,105,111,115,104,97,114,101,119,111,109,101,110,97
-,103,97,105,110,109,111,110,101,121,105,109,97,103,101,110,97,109,101,115,121,
-111,117,110,103,108,105,110,101,115,108,97,116,101,114,99,111,108,111,114,103,
-114,101,101,110,102,114,111,110,116,38,97,109,112,59,119,97,116,99,104,102,111,
-114,99,101,112,114,105,99,101,114,117,108,101,115,98,101,103,105,110,97,102,116,
-101,114,118,105,115,105,116,105,115,115,117,101,97,114,101,97,115,98,101,108,111
-,119,105,110,100,101,120,116,111,116,97,108,104,111,117,114,115,108,97,98,101,
-108,112,114,105,110,116,112,114,101,115,115,98,117,105,108,116,108,105,110,107,
-115,115,112,101,101,100,115,116,117,100,121,116,114,97,100,101,102,111,117,110,
-100,115,101,110,115,101,117,110,100,101,114,115,104,111,119,110,102,111,114,109,
-115,114,97,110,103,101,97,100,100,101,100,115,116,105,108,108,109,111,118,101,
-100,116,97,107,101,110,97,98,111,118,101,102,108,97,115,104,102,105,120,101,100,
-111,102,116,101,110,111,116,104,101,114,118,105,101,119,115,99,104,101,99,107,
-108,101,103,97,108,114,105,118,101,114,105,116,101,109,115,113,117,105,99,107,
-115,104,97,112,101,104,117,109,97,110,101,120,105,115,116,103,111,105,110,103,
-109,111,118,105,101,116,104,105,114,100,98,97,115,105,99,112,101,97,99,101,115,
-116,97,103,101,119,105,100,116,104,108,111,103,105,110,105,100,101,97,115,119,
-114,111,116,101,112,97,103,101,115,117,115,101,114,115,100,114,105,118,101,115,
-116,111,114,101,98,114,101,97,107,115,111,117,116,104,118,111,105,99,101,115,105
-,116,101,115,109,111,110,116,104,119,104,101,114,101,98,117,105,108,100,119,104,
-105,99,104,101,97,114,116,104,102,111,114,117,109,116,104,114,101,101,115,112,
-111,114,116,112,97,114,116,121,67,108,105,99,107,108,111,119,101,114,108,105,118
-,101,115,99,108,97,115,115,108,97,121,101,114,101,110,116,114,121,115,116,111,
-114,121,117,115,97,103,101,115,111,117,110,100,99,111,117,114,116,121,111,117,
-114,32,98,105,114,116,104,112,111,112,117,112,116,121,112,101,115,97,112,112,108
-,121,73,109,97,103,101,98,101,105,110,103,117,112,112,101,114,110,111,116,101,
-115,101,118,101,114,121,115,104,111,119,115,109,101,97,110,115,101,120,116,114,
-97,109,97,116,99,104,116,114,97,99,107,107,110,111,119,110,101,97,114,108,121,98
-,101,103,97,110,115,117,112,101,114,112,97,112,101,114,110,111,114,116,104,108,
-101,97,114,110,103,105,118,101,110,110,97,109,101,100,101,110,100,101,100,84,101
-,114,109,115,112,97,114,116,115,71,114,111,117,112,98,114,97,110,100,117,115,105
-,110,103,119,111,109,97,110,102,97,108,115,101,114,101,97,100,121,97,117,100,105
-,111,116,97,107,101,115,119,104,105,108,101,46,99,111,109,47,108,105,118,101,100
-,99,97,115,101,115,100,97,105,108,121,99,104,105,108,100,103,114,101,97,116,106,
-117,100,103,101,116,104,111,115,101,117,110,105,116,115,110,101,118,101,114,98,
-114,111,97,100,99,111,97,115,116,99,111,118,101,114,97,112,112,108,101,102,105,
-108,101,115,99,121,99,108,101,115,99,101,110,101,112,108,97,110,115,99,108,105,
-99,107,119,114,105,116,101,113,117,101,101,110,112,105,101,99,101,101,109,97,105
-,108,102,114,97,109,101,111,108,100,101,114,112,104,111,116,111,108,105,109,105,
-116,99,97,99,104,101,99,105,118,105,108,115,99,97,108,101,101,110,116,101,114,
-116,104,101,109,101,116,104,101,114,101,116,111,117,99,104,98,111,117,110,100,
-114,111,121,97,108,97,115,107,101,100,119,104,111,108,101,115,105,110,99,101,115
-,116,111,99,107,32,110,97,109,101,102,97,105,116,104,104,101,97,114,116,101,109,
-112,116,121,111,102,102,101,114,115,99,111,112,101,111,119,110,101,100,109,105,
-103,104,116,97,108,98,117,109,116,104,105,110,107,98,108,111,111,100,97,114,114,
-97,121,109,97,106,111,114,116,114,117,115,116,99,97,110,111,110,117,110,105,111,
-110,99,111,117,110,116,118,97,108,105,100,115,116,111,110,101,83,116,121,108,101
-,76,111,103,105,110,104,97,112,112,121,111,99,99,117,114,108,101,102,116,58,102,
-114,101,115,104,113,117,105,116,101,102,105,108,109,115,103,114,97,100,101,110,
-101,101,100,115,117,114,98,97,110,102,105,103,104,116,98,97,115,105,115,104,111,
-118,101,114,97,117,116,111,59,114,111,117,116,101,46,104,116,109,108,109,105,120
-,101,100,102,105,110,97,108,89,111,117,114,32,115,108,105,100,101,116,111,112,
-105,99,98,114,111,119,110,97,108,111,110,101,100,114,97,119,110,115,112,108,105,
-116,114,101,97,99,104,82,105,103,104,116,100,97,116,101,115,109,97,114,99,104,
-113,117,111,116,101,103,111,111,100,115,76,105,110,107,115,100,111,117,98,116,97
-,115,121,110,99,116,104,117,109,98,97,108,108,111,119,99,104,105,101,102,121,111
-,117,116,104,110,111,118,101,108,49,48,112,120,59,115,101,114,118,101,117,110,
-116,105,108,104,97,110,100,115,67,104,101,99,107,83,112,97,99,101,113,117,101,
-114,121,106,97,109,101,115,101,113,117,97,108,116,119,105,99,101,48,44,48,48,48,
-83,116,97,114,116,112,97,110,101,108,115,111,110,103,115,114,111,117,110,100,101
-,105,103,104,116,115,104,105,102,116,119,111,114,116,104,112,111,115,116,115,108
-,101,97,100,115,119,101,101,107,115,97,118,111,105,100,116,104,101,115,101,109,
-105,108,101,115,112,108,97,110,101,115,109,97,114,116,97,108,112,104,97,112,108,
-97,110,116,109,97,114,107,115,114,97,116,101,115,112,108,97,121,115,99,108,97,
-105,109,115,97,108,101,115,116,101,120,116,115,115,116,97,114,115,119,114,111,
-110,103,60,47,104,51,62,116,104,105,110,103,46,111,114,103,47,109,117,108,116,
-105,104,101,97,114,100,80,111,119,101,114,115,116,97,110,100,116,111,107,101,110
-,115,111,108,105,100,40,116,104,105,115,98,114,105,110,103,115,104,105,112,115,
-115,116,97,102,102,116,114,105,101,100,99,97,108,108,115,102,117,108,108,121,102
-,97,99,116,115,97,103,101,110,116,84,104,105,115,32,47,47,45,45,62,97,100,109,
-105,110,101,103,121,112,116,69,118,101,110,116,49,53,112,120,59,69,109,97,105,
-108,116,114,117,101,34,99,114,111,115,115,115,112,101,110,116,98,108,111,103,115
-,98,111,120,34,62,110,111,116,101,100,108,101,97,118,101,99,104,105,110,97,115,
-105,122,101,115,103,117,101,115,116,60,47,104,52,62,114,111,98,111,116,104,101,
-97,118,121,116,114,117,101,44,115,101,118,101,110,103,114,97,110,100,99,114,105,
-109,101,115,105,103,110,115,97,119,97,114,101,100,97,110,99,101,112,104,97,115,
-101,62,60,33,45,45,101,110,95,85,83,38,35,51,57,59,50,48,48,112,120,95,110,97,
-109,101,108,97,116,105,110,101,110,106,111,121,97,106,97,120,46,97,116,105,111,
-110,115,109,105,116,104,85,46,83,46,32,104,111,108,100,115,112,101,116,101,114,
-105,110,100,105,97,110,97,118,34,62,99,104,97,105,110,115,99,111,114,101,99,111,
-109,101,115,100,111,105,110,103,112,114,105,111,114,83,104,97,114,101,49,57,57,
-48,115,114,111,109,97,110,108,105,115,116,115,106,97,112,97,110,102,97,108,108,
-115,116,114,105,97,108,111,119,110,101,114,97,103,114,101,101,60,47,104,50,62,97
-,98,117,115,101,97,108,101,114,116,111,112,101,114,97,34,45,47,47,87,99,97,114,
-100,115,104,105,108,108,115,116,101,97,109,115,80,104,111,116,111,116,114,117,
-116,104,99,108,101,97,110,46,112,104,112,63,115,97,105,110,116,109,101,116,97,
-108,108,111,117,105,115,109,101,97,110,116,112,114,111,111,102,98,114,105,101,
-102,114,111,119,34,62,103,101,110,114,101,116,114,117,99,107,108,111,111,107,115
-,86,97,108,117,101,70,114,97,109,101,46,110,101,116,47,45,45,62,10,60,116,114,
-121,32,123,10,118,97,114,32,109,97,107,101,115,99,111,115,116,115,112,108,97,105
-,110,97,100,117,108,116,113,117,101,115,116,116,114,97,105,110,108,97,98,111,114
-,104,101,108,112,115,99,97,117,115,101,109,97,103,105,99,109,111,116,111,114,116
-,104,101,105,114,50,53,48,112,120,108,101,97,115,116,115,116,101,112,115,67,111,
-117,110,116,99,111,117,108,100,103,108,97,115,115,115,105,100,101,115,102,117,
-110,100,115,104,111,116,101,108,97,119,97,114,100,109,111,117,116,104,109,111,
-118,101,115,112,97,114,105,115,103,105,118,101,115,100,117,116,99,104,116,101,
-120,97,115,102,114,117,105,116,110,117,108,108,44,124,124,91,93,59,116,111,112,
-34,62,10,60,33,45,45,80,79,83,84,34,111,99,101,97,110,60,98,114,47,62,102,108,
-111,111,114,115,112,101,97,107,100,101,112,116,104,32,115,105,122,101,98,97,110,
-107,115,99,97,116,99,104,99,104,97,114,116,50,48,112,120,59,97,108,105,103,110,
-100,101,97,108,115,119,111,117,108,100,53,48,112,120,59,117,114,108,61,34,112,97
-,114,107,115,109,111,117,115,101,77,111,115,116,32,46,46,46,60,47,97,109,111,110
-,103,98,114,97,105,110,98,111,100,121,32,110,111,110,101,59,98,97,115,101,100,99
-,97,114,114,121,100,114,97,102,116,114,101,102,101,114,112,97,103,101,95,104,111
-,109,101,46,109,101,116,101,114,100,101,108,97,121,100,114,101,97,109,112,114,
-111,118,101,106,111,105,110,116,60,47,116,114,62,100,114,117,103,115,60,33,45,45
-,32,97,112,114,105,108,105,100,101,97,108,97,108,108,101,110,101,120,97,99,116,
-102,111,114,116,104,99,111,100,101,115,108,111,103,105,99,86,105,101,119,32,115,
-101,101,109,115,98,108,97,110,107,112,111,114,116,115,32,40,50,48,48,115,97,118,
-101,100,95,108,105,110,107,103,111,97,108,115,103,114,97,110,116,103,114,101,101
-,107,104,111,109,101,115,114,105,110,103,115,114,97,116,101,100,51,48,112,120,59
-,119,104,111,115,101,112,97,114,115,101,40,41,59,34,32,66,108,111,99,107,108,105
-,110,117,120,106,111,110,101,115,112,105,120,101,108,39,41,59,34,62,41,59,105,
-102,40,45,108,101,102,116,100,97,118,105,100,104,111,114,115,101,70,111,99,117,
-115,114,97,105,115,101,98,111,120,101,115,84,114,97,99,107,101,109,101,110,116,
-60,47,101,109,62,98,97,114,34,62,46,115,114,99,61,116,111,119,101,114,97,108,116
-,61,34,99,97,98,108,101,104,101,110,114,121,50,52,112,120,59,115,101,116,117,112
-,105,116,97,108,121,115,104,97,114,112,109,105,110,111,114,116,97,115,116,101,
-119,97,110,116,115,116,104,105,115,46,114,101,115,101,116,119,104,101,101,108,
-103,105,114,108,115,47,99,115,115,47,49,48,48,37,59,99,108,117,98,115,115,116,
-117,102,102,98,105,98,108,101,118,111,116,101,115,32,49,48,48,48,107,111,114,101
-,97,125,41,59,13,10,98,97,110,100,115,113,117,101,117,101,61,32,123,125,59,56,48
-,112,120,59,99,107,105,110,103,123,13,10,9,9,97,104,101,97,100,99,108,111,99,107
-,105,114,105,115,104,108,105,107,101,32,114,97,116,105,111,115,116,97,116,115,70
-,111,114,109,34,121,97,104,111,111,41,91,48,93,59,65,98,111,117,116,102,105,110,
-100,115,60,47,104,49,62,100,101,98,117,103,116,97,115,107,115,85,82,76,32,61,99,
-101,108,108,115,125,41,40,41,59,49,50,112,120,59,112,114,105,109,101,116,101,108
-,108,115,116,117,114,110,115,48,120,54,48,48,46,106,112,103,34,115,112,97,105,
-110,98,101,97,99,104,116,97,120,101,115,109,105,99,114,111,97,110,103,101,108,45
-,45,62,60,47,103,105,102,116,115,115,116,101,118,101,45,108,105,110,107,98,111,
-100,121,46,125,41,59,10,9,109,111,117,110,116,32,40,49,57,57,70,65,81,60,47,114,
-111,103,101,114,102,114,97,110,107,67,108,97,115,115,50,56,112,120,59,102,101,
-101,100,115,60,104,49,62,60,115,99,111,116,116,116,101,115,116,115,50,50,112,120
-,59,100,114,105,110,107,41,32,124,124,32,108,101,119,105,115,115,104,97,108,108,
-35,48,51,57,59,32,102,111,114,32,108,111,118,101,100,119,97,115,116,101,48,48,
-112,120,59,106,97,58,227,130,115,105,109,111,110,60,102,111,110,116,114,101,112,
-108,121,109,101,101,116,115,117,110,116,101,114,99,104,101,97,112,116,105,103,
-104,116,66,114,97,110,100,41,32,33,61,32,100,114,101,115,115,99,108,105,112,115,
-114,111,111,109,115,111,110,107,101,121,109,111,98,105,108,109,97,105,110,46,78,
-97,109,101,32,112,108,97,116,101,102,117,110,110,121,116,114,101,101,115,99,111,
-109,47,34,49,46,106,112,103,119,109,111,100,101,112,97,114,97,109,83,84,65,82,84
-,108,101,102,116,32,105,100,100,101,110,44,32,50,48,49,41,59,10,125,10,102,111,
-114,109,46,118,105,114,117,115,99,104,97,105,114,116,114,97,110,115,119,111,114,
-115,116,80,97,103,101,115,105,116,105,111,110,112,97,116,99,104,60,33,45,45,10,
-111,45,99,97,99,102,105,114,109,115,116,111,117,114,115,44,48,48,48,32,97,115,
-105,97,110,105,43,43,41,123,97,100,111,98,101,39,41,91,48,93,105,100,61,49,48,98
-,111,116,104,59,109,101,110,117,32,46,50,46,109,105,46,112,110,103,34,107,101,
-118,105,110,99,111,97,99,104,67,104,105,108,100,98,114,117,99,101,50,46,106,112,
-103,85,82,76,41,43,46,106,112,103,124,115,117,105,116,101,115,108,105,99,101,104
-,97,114,114,121,49,50,48,34,32,115,119,101,101,116,116,114,62,13,10,110,97,109,
-101,61,100,105,101,103,111,112,97,103,101,32,115,119,105,115,115,45,45,62,10,10,
-35,102,102,102,59,34,62,76,111,103,46,99,111,109,34,116,114,101,97,116,115,104,
-101,101,116,41,32,38,38,32,49,52,112,120,59,115,108,101,101,112,110,116,101,110,
-116,102,105,108,101,100,106,97,58,227,131,105,100,61,34,99,78,97,109,101,34,119,
-111,114,115,101,115,104,111,116,115,45,98,111,120,45,100,101,108,116,97,10,38,
-108,116,59,98,101,97,114,115,58,52,56,90,60,100,97,116,97,45,114,117,114,97,108,
-60,47,97,62,32,115,112,101,110,100,98,97,107,101,114,115,104,111,112,115,61,32,
-34,34,59,112,104,112,34,62,99,116,105,111,110,49,51,112,120,59,98,114,105,97,110
-,104,101,108,108,111,115,105,122,101,61,111,61,37,50,70,32,106,111,105,110,109,
-97,121,98,101,60,105,109,103,32,105,109,103,34,62,44,32,102,106,115,105,109,103,
-34,32,34,41,91,48,93,77,84,111,112,66,84,121,112,101,34,110,101,119,108,121,68,
-97,110,115,107,99,122,101,99,104,116,114,97,105,108,107,110,111,119,115,60,47,
-104,53,62,102,97,113,34,62,122,104,45,99,110,49,48,41,59,10,45,49,34,41,59,116,
-121,112,101,61,98,108,117,101,115,116,114,117,108,121,100,97,118,105,115,46,106,
-115,39,59,62,13,10,60,33,115,116,101,101,108,32,121,111,117,32,104,50,62,13,10,
-102,111,114,109,32,106,101,115,117,115,49,48,48,37,32,109,101,110,117,46,13,10,9
-,13,10,119,97,108,101,115,114,105,115,107,115,117,109,101,110,116,100,100,105,
-110,103,98,45,108,105,107,116,101,97,99,104,103,105,102,34,32,118,101,103,97,115
-,100,97,110,115,107,101,101,115,116,105,115,104,113,105,112,115,117,111,109,105,
-115,111,98,114,101,100,101,115,100,101,101,110,116,114,101,116,111,100,111,115,
-112,117,101,100,101,97,195,177,111,115,101,115,116,195,161,116,105,101,110,101,
-104,97,115,116,97,111,116,114,111,115,112,97,114,116,101,100,111,110,100,101,110
-,117,101,118,111,104,97,99,101,114,102,111,114,109,97,109,105,115,109,111,109,
-101,106,111,114,109,117,110,100,111,97,113,117,195,173,100,195,173,97,115,115,
-195,179,108,111,97,121,117,100,97,102,101,99,104,97,116,111,100,97,115,116,97,
-110,116,111,109,101,110,111,115,100,97,116,111,115,111,116,114,97,115,115,105,
-116,105,111,109,117,99,104,111,97,104,111,114,97,108,117,103,97,114,109,97,121,
-111,114,101,115,116,111,115,104,111,114,97,115,116,101,110,101,114,97,110,116,
-101,115,102,111,116,111,115,101,115,116,97,115,112,97,195,173,115,110,117,101,
-118,97,115,97,108,117,100,102,111,114,111,115,109,101,100,105,111,113,117,105,
-101,110,109,101,115,101,115,112,111,100,101,114,99,104,105,108,101,115,101,114,
-195,161,118,101,99,101,115,100,101,99,105,114,106,111,115,195,169,101,115,116,97
-,114,118,101,110,116,97,103,114,117,112,111,104,101,99,104,111,101,108,108,111,
-115,116,101,110,103,111,97,109,105,103,111,99,111,115,97,115,110,105,118,101,108
-,103,101,110,116,101,109,105,115,109,97,97,105,114,101,115,106,117,108,105,111,
-116,101,109,97,115,104,97,99,105,97,102,97,118,111,114,106,117,110,105,111,108,
-105,98,114,101,112,117,110,116,111,98,117,101,110,111,97,117,116,111,114,97,98,
-114,105,108,98,117,101,110,97,116,101,120,116,111,109,97,114,122,111,115,97,98,
-101,114,108,105,115,116,97,108,117,101,103,111,99,195,179,109,111,101,110,101,
-114,111,106,117,101,103,111,112,101,114,195,186,104,97,98,101,114,101,115,116,
-111,121,110,117,110,99,97,109,117,106,101,114,118,97,108,111,114,102,117,101,114
-,97,108,105,98,114,111,103,117,115,116,97,105,103,117,97,108,118,111,116,111,115
-,99,97,115,111,115,103,117,195,173,97,112,117,101,100,111,115,111,109,111,115,97
-,118,105,115,111,117,115,116,101,100,100,101,98,101,110,110,111,99,104,101,98,
-117,115,99,97,102,97,108,116,97,101,117,114,111,115,115,101,114,105,101,100,105,
-99,104,111,99,117,114,115,111,99,108,97,118,101,99,97,115,97,115,108,101,195,179
-,110,112,108,97,122,111,108,97,114,103,111,111,98,114,97,115,118,105,115,116,97,
-97,112,111,121,111,106,117,110,116,111,116,114,97,116,97,118,105,115,116,111,99,
-114,101,97,114,99,97,109,112,111,104,101,109,111,115,99,105,110,99,111,99,97,114
-,103,111,112,105,115,111,115,111,114,100,101,110,104,97,99,101,110,195,161,114,
-101,97,100,105,115,99,111,112,101,100,114,111,99,101,114,99,97,112,117,101,100,
-97,112,97,112,101,108,109,101,110,111,114,195,186,116,105,108,99,108,97,114,111,
-106,111,114,103,101,99,97,108,108,101,112,111,110,101,114,116,97,114,100,101,110
-,97,100,105,101,109,97,114,99,97,115,105,103,117,101,101,108,108,97,115,115,105,
-103,108,111,99,111,99,104,101,109,111,116,111,115,109,97,100,114,101,99,108,97,
-115,101,114,101,115,116,111,110,105,195,177,111,113,117,101,100,97,112,97,115,97
-,114,98,97,110,99,111,104,105,106,111,115,118,105,97,106,101,112,97,98,108,111,
-195,169,115,116,101,118,105,101,110,101,114,101,105,110,111,100,101,106,97,114,
-102,111,110,100,111,99,97,110,97,108,110,111,114,116,101,108,101,116,114,97,99,
-97,117,115,97,116,111,109,97,114,109,97,110,111,115,108,117,110,101,115,97,117,
-116,111,115,118,105,108,108,97,118,101,110,100,111,112,101,115,97,114,116,105,
-112,111,115,116,101,110,103,97,109,97,114,99,111,108,108,101,118,97,112,97,100,
-114,101,117,110,105,100,111,118,97,109,111,115,122,111,110,97,115,97,109,98,111,
-115,98,97,110,100,97,109,97,114,105,97,97,98,117,115,111,109,117,99,104,97,115,
-117,98,105,114,114,105,111,106,97,118,105,118,105,114,103,114,97,100,111,99,104,
-105,99,97,97,108,108,195,173,106,111,118,101,110,100,105,99,104,97,101,115,116,
-97,110,116,97,108,101,115,115,97,108,105,114,115,117,101,108,111,112,101,115,111
-,115,102,105,110,101,115,108,108,97,109,97,98,117,115,99,111,195,169,115,116,97,
-108,108,101,103,97,110,101,103,114,111,112,108,97,122,97,104,117,109,111,114,112
-,97,103,97,114,106,117,110,116,97,100,111,98,108,101,105,115,108,97,115,98,111,
-108,115,97,98,97,195,177,111,104,97,98,108,97,108,117,99,104,97,195,129,114,101,
-97,100,105,99,101,110,106,117,103,97,114,110,111,116,97,115,118,97,108,108,101,
-97,108,108,195,161,99,97,114,103,97,100,111,108,111,114,97,98,97,106,111,101,115
-,116,195,169,103,117,115,116,111,109,101,110,116,101,109,97,114,105,111,102,105,
-114,109,97,99,111,115,116,111,102,105,99,104,97,112,108,97,116,97,104,111,103,97
-,114,97,114,116,101,115,108,101,121,101,115,97,113,117,101,108,109,117,115,101,
-111,98,97,115,101,115,112,111,99,111,115,109,105,116,97,100,99,105,101,108,111,
-99,104,105,99,111,109,105,101,100,111,103,97,110,97,114,115,97,110,116,111,101,
-116,97,112,97,100,101,98,101,115,112,108,97,121,97,114,101,100,101,115,115,105,
-101,116,101,99,111,114,116,101,99,111,114,101,97,100,117,100,97,115,100,101,115,
-101,111,118,105,101,106,111,100,101,115,101,97,97,103,117,97,115,38,113,117,111,
-116,59,100,111,109,97,105,110,99,111,109,109,111,110,115,116,97,116,117,115,101,
-118,101,110,116,115,109,97,115,116,101,114,115,121,115,116,101,109,97,99,116,105
-,111,110,98,97,110,110,101,114,114,101,109,111,118,101,115,99,114,111,108,108,
-117,112,100,97,116,101,103,108,111,98,97,108,109,101,100,105,117,109,102,105,108
-,116,101,114,110,117,109,98,101,114,99,104,97,110,103,101,114,101,115,117,108,
-116,112,117,98,108,105,99,115,99,114,101,101,110,99,104,111,111,115,101,110,111,
-114,109,97,108,116,114,97,118,101,108,105,115,115,117,101,115,115,111,117,114,99
-,101,116,97,114,103,101,116,115,112,114,105,110,103,109,111,100,117,108,101,109,
-111,98,105,108,101,115,119,105,116,99,104,112,104,111,116,111,115,98,111,114,100
-,101,114,114,101,103,105,111,110,105,116,115,101,108,102,115,111,99,105,97,108,
-97,99,116,105,118,101,99,111,108,117,109,110,114,101,99,111,114,100,102,111,108,
-108,111,119,116,105,116,108,101,62,101,105,116,104,101,114,108,101,110,103,116,
-104,102,97,109,105,108,121,102,114,105,101,110,100,108,97,121,111,117,116,97,117
-,116,104,111,114,99,114,101,97,116,101,114,101,118,105,101,119,115,117,109,109,
-101,114,115,101,114,118,101,114,112,108,97,121,101,100,112,108,97,121,101,114,
-101,120,112,97,110,100,112,111,108,105,99,121,102,111,114,109,97,116,100,111,117
-,98,108,101,112,111,105,110,116,115,115,101,114,105,101,115,112,101,114,115,111,
-110,108,105,118,105,110,103,100,101,115,105,103,110,109,111,110,116,104,115,102,
-111,114,99,101,115,117,110,105,113,117,101,119,101,105,103,104,116,112,101,111,
-112,108,101,101,110,101,114,103,121,110,97,116,117,114,101,115,101,97,114,99,104
-,102,105,103,117,114,101,104,97,118,105,110,103,99,117,115,116,111,109,111,102,
-102,115,101,116,108,101,116,116,101,114,119,105,110,100,111,119,115,117,98,109,
-105,116,114,101,110,100,101,114,103,114,111,117,112,115,117,112,108,111,97,100,
-104,101,97,108,116,104,109,101,116,104,111,100,118,105,100,101,111,115,115,99,
-104,111,111,108,102,117,116,117,114,101,115,104,97,100,111,119,100,101,98,97,116
-,101,118,97,108,117,101,115,79,98,106,101,99,116,111,116,104,101,114,115,114,105
-,103,104,116,115,108,101,97,103,117,101,99,104,114,111,109,101,115,105,109,112,
-108,101,110,111,116,105,99,101,115,104,97,114,101,100,101,110,100,105,110,103,
-115,101,97,115,111,110,114,101,112,111,114,116,111,110,108,105,110,101,115,113,
-117,97,114,101,98,117,116,116,111,110,105,109,97,103,101,115,101,110,97,98,108,
-101,109,111,118,105,110,103,108,97,116,101,115,116,119,105,110,116,101,114,70,
-114,97,110,99,101,112,101,114,105,111,100,115,116,114,111,110,103,114,101,112,
-101,97,116,76,111,110,100,111,110,100,101,116,97,105,108,102,111,114,109,101,100
-,100,101,109,97,110,100,115,101,99,117,114,101,112,97,115,115,101,100,116,111,
-103,103,108,101,112,108,97,99,101,115,100,101,118,105,99,101,115,116,97,116,105,
-99,99,105,116,105,101,115,115,116,114,101,97,109,121,101,108,108,111,119,97,116,
-116,97,99,107,115,116,114,101,101,116,102,108,105,103,104,116,104,105,100,100,
-101,110,105,110,102,111,34,62,111,112,101,110,101,100,117,115,101,102,117,108,
-118,97,108,108,101,121,99,97,117,115,101,115,108,101,97,100,101,114,115,101,99,
-114,101,116,115,101,99,111,110,100,100,97,109,97,103,101,115,112,111,114,116,115
-,101,120,99,101,112,116,114,97,116,105,110,103,115,105,103,110,101,100,116,104,
-105,110,103,115,101,102,102,101,99,116,102,105,101,108,100,115,115,116,97,116,
-101,115,111,102,102,105,99,101,118,105,115,117,97,108,101,100,105,116,111,114,
-118,111,108,117,109,101,82,101,112,111,114,116,109,117,115,101,117,109,109,111,
-118,105,101,115,112,97,114,101,110,116,97,99,99,101,115,115,109,111,115,116,108,
-121,109,111,116,104,101,114,34,32,105,100,61,34,109,97,114,107,101,116,103,114,
-111,117,110,100,99,104,97,110,99,101,115,117,114,118,101,121,98,101,102,111,114,
-101,115,121,109,98,111,108,109,111,109,101,110,116,115,112,101,101,99,104,109,
-111,116,105,111,110,105,110,115,105,100,101,109,97,116,116,101,114,67,101,110,
-116,101,114,111,98,106,101,99,116,101,120,105,115,116,115,109,105,100,100,108,
-101,69,117,114,111,112,101,103,114,111,119,116,104,108,101,103,97,99,121,109,97,
-110,110,101,114,101,110,111,117,103,104,99,97,114,101,101,114,97,110,115,119,101
-,114,111,114,105,103,105,110,112,111,114,116,97,108,99,108,105,101,110,116,115,
-101,108,101,99,116,114,97,110,100,111,109,99,108,111,115,101,100,116,111,112,105
-,99,115,99,111,109,105,110,103,102,97,116,104,101,114,111,112,116,105,111,110,
-115,105,109,112,108,121,114,97,105,115,101,100,101,115,99,97,112,101,99,104,111,
-115,101,110,99,104,117,114,99,104,100,101,102,105,110,101,114,101,97,115,111,110
-,99,111,114,110,101,114,111,117,116,112,117,116,109,101,109,111,114,121,105,102,
-114,97,109,101,112,111,108,105,99,101,109,111,100,101,108,115,78,117,109,98,101,
-114,100,117,114,105,110,103,111,102,102,101,114,115,115,116,121,108,101,115,107,
-105,108,108,101,100,108,105,115,116,101,100,99,97,108,108,101,100,115,105,108,
-118,101,114,109,97,114,103,105,110,100,101,108,101,116,101,98,101,116,116,101,
-114,98,114,111,119,115,101,108,105,109,105,116,115,71,108,111,98,97,108,115,105,
-110,103,108,101,119,105,100,103,101,116,99,101,110,116,101,114,98,117,100,103,
-101,116,110,111,119,114,97,112,99,114,101,100,105,116,99,108,97,105,109,115,101,
-110,103,105,110,101,115,97,102,101,116,121,99,104,111,105,99,101,115,112,105,114
-,105,116,45,115,116,121,108,101,115,112,114,101,97,100,109,97,107,105,110,103,
-110,101,101,100,101,100,114,117,115,115,105,97,112,108,101,97,115,101,101,120,
-116,101,110,116,83,99,114,105,112,116,98,114,111,107,101,110,97,108,108,111,119,
-115,99,104,97,114,103,101,100,105,118,105,100,101,102,97,99,116,111,114,109,101,
-109,98,101,114,45,98,97,115,101,100,116,104,101,111,114,121,99,111,110,102,105,
-103,97,114,111,117,110,100,119,111,114,107,101,100,104,101,108,112,101,100,67,
-104,117,114,99,104,105,109,112,97,99,116,115,104,111,117,108,100,97,108,119,97,
-121,115,108,111,103,111,34,32,98,111,116,116,111,109,108,105,115,116,34,62,41,
-123,118,97,114,32,112,114,101,102,105,120,111,114,97,110,103,101,72,101,97,100,
-101,114,46,112,117,115,104,40,99,111,117,112,108,101,103,97,114,100,101,110,98,
-114,105,100,103,101,108,97,117,110,99,104,82,101,118,105,101,119,116,97,107,105,
-110,103,118,105,115,105,111,110,108,105,116,116,108,101,100,97,116,105,110,103,
-66,117,116,116,111,110,98,101,97,117,116,121,116,104,101,109,101,115,102,111,114
-,103,111,116,83,101,97,114,99,104,97,110,99,104,111,114,97,108,109,111,115,116,
-108,111,97,100,101,100,67,104,97,110,103,101,114,101,116,117,114,110,115,116,114
-,105,110,103,114,101,108,111,97,100,77,111,98,105,108,101,105,110,99,111,109,101
-,115,117,112,112,108,121,83,111,117,114,99,101,111,114,100,101,114,115,118,105,
-101,119,101,100,38,110,98,115,112,59,99,111,117,114,115,101,65,98,111,117,116,32
-,105,115,108,97,110,100,60,104,116,109,108,32,99,111,111,107,105,101,110,97,109,
-101,61,34,97,109,97,122,111,110,109,111,100,101,114,110,97,100,118,105,99,101,
-105,110,60,47,97,62,58,32,84,104,101,32,100,105,97,108,111,103,104,111,117,115,
-101,115,66,69,71,73,78,32,77,101,120,105,99,111,115,116,97,114,116,115,99,101,
-110,116,114,101,104,101,105,103,104,116,97,100,100,105,110,103,73,115,108,97,110
-,100,97,115,115,101,116,115,69,109,112,105,114,101,83,99,104,111,111,108,101,102
-,102,111,114,116,100,105,114,101,99,116,110,101,97,114,108,121,109,97,110,117,97
-,108,83,101,108,101,99,116,46,10,10,79,110,101,106,111,105,110,101,100,109,101,
-110,117,34,62,80,104,105,108,105,112,97,119,97,114,100,115,104,97,110,100,108,
-101,105,109,112,111,114,116,79,102,102,105,99,101,114,101,103,97,114,100,115,107
-,105,108,108,115,110,97,116,105,111,110,83,112,111,114,116,115,100,101,103,114,
-101,101,119,101,101,107,108,121,32,40,101,46,103,46,98,101,104,105,110,100,100,
-111,99,116,111,114,108,111,103,103,101,100,117,110,105,116,101,100,60,47,98,62,
-60,47,98,101,103,105,110,115,112,108,97,110,116,115,97,115,115,105,115,116,97,
-114,116,105,115,116,105,115,115,117,101,100,51,48,48,112,120,124,99,97,110,97,
-100,97,97,103,101,110,99,121,115,99,104,101,109,101,114,101,109,97,105,110,66,
-114,97,122,105,108,115,97,109,112,108,101,108,111,103,111,34,62,98,101,121,111,
-110,100,45,115,99,97,108,101,97,99,99,101,112,116,115,101,114,118,101,100,109,97
-,114,105,110,101,70,111,111,116,101,114,99,97,109,101,114,97,60,47,104,49,62,10,
-95,102,111,114,109,34,108,101,97,118,101,115,115,116,114,101,115,115,34,32,47,62
-,13,10,46,103,105,102,34,32,111,110,108,111,97,100,108,111,97,100,101,114,79,120
-,102,111,114,100,115,105,115,116,101,114,115,117,114,118,105,118,108,105,115,116
-,101,110,102,101,109,97,108,101,68,101,115,105,103,110,115,105,122,101,61,34,97,
-112,112,101,97,108,116,101,120,116,34,62,108,101,118,101,108,115,116,104,97,110,
-107,115,104,105,103,104,101,114,102,111,114,99,101,100,97,110,105,109,97,108,97,
-110,121,111,110,101,65,102,114,105,99,97,97,103,114,101,101,100,114,101,99,101,
-110,116,80,101,111,112,108,101,60,98,114,32,47,62,119,111,110,100,101,114,112,
-114,105,99,101,115,116,117,114,110,101,100,124,124,32,123,125,59,109,97,105,110,
-34,62,105,110,108,105,110,101,115,117,110,100,97,121,119,114,97,112,34,62,102,97
-,105,108,101,100,99,101,110,115,117,115,109,105,110,117,116,101,98,101,97,99,111
-,110,113,117,111,116,101,115,49,53,48,112,120,124,101,115,116,97,116,101,114,101
-,109,111,116,101,101,109,97,105,108,34,108,105,110,107,101,100,114,105,103,104,
-116,59,115,105,103,110,97,108,102,111,114,109,97,108,49,46,104,116,109,108,115,
-105,103,110,117,112,112,114,105,110,99,101,102,108,111,97,116,58,46,112,110,103,
-34,32,102,111,114,117,109,46,65,99,99,101,115,115,112,97,112,101,114,115,115,111
-,117,110,100,115,101,120,116,101,110,100,72,101,105,103,104,116,115,108,105,100,
-101,114,85,84,70,45,56,34,38,97,109,112,59,32,66,101,102,111,114,101,46,32,87,
-105,116,104,115,116,117,100,105,111,111,119,110,101,114,115,109,97,110,97,103,
-101,112,114,111,102,105,116,106,81,117,101,114,121,97,110,110,117,97,108,112,97,
-114,97,109,115,98,111,117,103,104,116,102,97,109,111,117,115,103,111,111,103,108
-,101,108,111,110,103,101,114,105,43,43,41,32,123,105,115,114,97,101,108,115,97,
-121,105,110,103,100,101,99,105,100,101,104,111,109,101,34,62,104,101,97,100,101,
-114,101,110,115,117,114,101,98,114,97,110,99,104,112,105,101,99,101,115,98,108,
-111,99,107,59,115,116,97,116,101,100,116,111,112,34,62,60,114,97,99,105,110,103,
-114,101,115,105,122,101,45,45,38,103,116,59,112,97,99,105,116,121,115,101,120,
-117,97,108,98,117,114,101,97,117,46,106,112,103,34,32,49,48,44,48,48,48,111,98,
-116,97,105,110,116,105,116,108,101,115,97,109,111,117,110,116,44,32,73,110,99,46
-,99,111,109,101,100,121,109,101,110,117,34,32,108,121,114,105,99,115,116,111,100
-,97,121,46,105,110,100,101,101,100,99,111,117,110,116,121,95,108,111,103,111,46,
-70,97,109,105,108,121,108,111,111,107,101,100,77,97,114,107,101,116,108,115,101,
-32,105,102,80,108,97,121,101,114,116,117,114,107,101,121,41,59,118,97,114,32,102
-,111,114,101,115,116,103,105,118,105,110,103,101,114,114,111,114,115,68,111,109,
-97,105,110,125,101,108,115,101,123,105,110,115,101,114,116,66,108,111,103,60,47,
-102,111,111,116,101,114,108,111,103,105,110,46,102,97,115,116,101,114,97,103,101
-,110,116,115,60,98,111,100,121,32,49,48,112,120,32,48,112,114,97,103,109,97,102,
-114,105,100,97,121,106,117,110,105,111,114,100,111,108,108,97,114,112,108,97,99,
-101,100,99,111,118,101,114,115,112,108,117,103,105,110,53,44,48,48,48,32,112,97,
-103,101,34,62,98,111,115,116,111,110,46,116,101,115,116,40,97,118,97,116,97,114,
-116,101,115,116,101,100,95,99,111,117,110,116,102,111,114,117,109,115,115,99,104
-,101,109,97,105,110,100,101,120,44,102,105,108,108,101,100,115,104,97,114,101,
-115,114,101,97,100,101,114,97,108,101,114,116,40,97,112,112,101,97,114,83,117,98
-,109,105,116,108,105,110,101,34,62,98,111,100,121,34,62,10,42,32,84,104,101,84,
-104,111,117,103,104,115,101,101,105,110,103,106,101,114,115,101,121,78,101,119,
-115,60,47,118,101,114,105,102,121,101,120,112,101,114,116,105,110,106,117,114,
-121,119,105,100,116,104,61,67,111,111,107,105,101,83,84,65,82,84,32,97,99,114,
-111,115,115,95,105,109,97,103,101,116,104,114,101,97,100,110,97,116,105,118,101,
-112,111,99,107,101,116,98,111,120,34,62,10,83,121,115,116,101,109,32,68,97,118,
-105,100,99,97,110,99,101,114,116,97,98,108,101,115,112,114,111,118,101,100,65,
-112,114,105,108,32,114,101,97,108,108,121,100,114,105,118,101,114,105,116,101,
-109,34,62,109,111,114,101,34,62,98,111,97,114,100,115,99,111,108,111,114,115,99,
-97,109,112,117,115,102,105,114,115,116,32,124,124,32,91,93,59,109,101,100,105,97
-,46,103,117,105,116,97,114,102,105,110,105,115,104,119,105,100,116,104,58,115,
-104,111,119,101,100,79,116,104,101,114,32,46,112,104,112,34,32,97,115,115,117,
-109,101,108,97,121,101,114,115,119,105,108,115,111,110,115,116,111,114,101,115,
-114,101,108,105,101,102,115,119,101,100,101,110,67,117,115,116,111,109,101,97,
-115,105,108,121,32,121,111,117,114,32,83,116,114,105,110,103,10,10,87,104,105,
-108,116,97,121,108,111,114,99,108,101,97,114,58,114,101,115,111,114,116,102,114,
-101,110,99,104,116,104,111,117,103,104,34,41,32,43,32,34,60,98,111,100,121,62,98
-,117,121,105,110,103,98,114,97,110,100,115,77,101,109,98,101,114,110,97,109,101,
-34,62,111,112,112,105,110,103,115,101,99,116,111,114,53,112,120,59,34,62,118,115
-,112,97,99,101,112,111,115,116,101,114,109,97,106,111,114,32,99,111,102,102,101,
-101,109,97,114,116,105,110,109,97,116,117,114,101,104,97,112,112,101,110,60,47,
-110,97,118,62,107,97,110,115,97,115,108,105,110,107,34,62,73,109,97,103,101,115,
-61,102,97,108,115,101,119,104,105,108,101,32,104,115,112,97,99,101,48,38,97,109,
-112,59,32,10,10,73,110,32,32,112,111,119,101,114,80,111,108,115,107,105,45,99,
-111,108,111,114,106,111,114,100,97,110,66,111,116,116,111,109,83,116,97,114,116,
-32,45,99,111,117,110,116,50,46,104,116,109,108,110,101,119,115,34,62,48,49,46,
-106,112,103,79,110,108,105,110,101,45,114,105,103,104,116,109,105,108,108,101,
-114,115,101,110,105,111,114,73,83,66,78,32,48,48,44,48,48,48,32,103,117,105,100,
-101,115,118,97,108,117,101,41,101,99,116,105,111,110,114,101,112,97,105,114,46,
-120,109,108,34,32,32,114,105,103,104,116,115,46,104,116,109,108,45,98,108,111,99
-,107,114,101,103,69,120,112,58,104,111,118,101,114,119,105,116,104,105,110,118,
-105,114,103,105,110,112,104,111,110,101,115,60,47,116,114,62,13,117,115,105,110,
-103,32,10,9,118,97,114,32,62,39,41,59,10,9,60,47,116,100,62,10,60,47,116,114,62,
-10,98,97,104,97,115,97,98,114,97,115,105,108,103,97,108,101,103,111,109,97,103,
-121,97,114,112,111,108,115,107,105,115,114,112,115,107,105,216,177,216,175,217,
-136,228,184,173,230,150,135,231,174,128,228,189,147,231,185,129,233,171,148,228,
-191,161,230,129,175,228,184,173,229,155,189,230,136,145,228,187,172,228,184,128,
-228,184,170,229,133,172,229,143,184,231,174,161,231,144,134,232,174,186,229,157,
-155,229,143,175,228,187,165,230,156,141,229,138,161,230,151,182,233,151,180,228,
-184,170,228,186,186,228,186,167,229,147,129,232,135,170,229,183,177,228,188,129,
-228,184,154,230,159,165,231,156,139,229,183,165,228,189,156,232,129,148,231,179,
-187,230,178,161,230,156,137,231,189,145,231,171,153,230,137,128,230,156,137,232,
-175,132,232,174,186,228,184,173,229,191,131,230,150,135,231,171,160,231,148,168,
-230,136,183,233,166,150,233,161,181,228,189,156,232,128,133,230,138,128,230,156,
-175,233,151,174,233,162,152,231,155,184,229,133,179,228,184,139,232,189,189,230,
-144,156,231,180,162,228,189,191,231,148,168,232,189,175,228,187,182,229,156,168,
-231,186,191,228,184,187,233,162,152,232,181,132,230,150,153,232,167,134,233,162,
-145,229,155,158,229,164,141,230,179,168,229,134,140,231,189,145,231,187,156,230,
-148,182,232,151,143,229,134,133,229,174,185,230,142,168,232,141,144,229,184,130,
-229,156,186,230,182,136,230,129,175,231,169,186,233,151,180,229,143,145,229,184,
-131,228,187,128,228,185,136,229,165,189,229,143,139,231,148,159,230,180,187,229,
-155,190,231,137,135,229,143,145,229,177,149,229,166,130,230,158,156,230,137,139,
-230,156,186,230,150,176,233,151,187,230,156,128,230,150,176,230,150,185,229,188,
-143,229,140,151,228,186,172,230,143,144,228,190,155,229,133,179,228,186,142,230,
-155,180,229,164,154,232,191,153,228,184,170,231,179,187,231,187,159,231,159,165,
-233,129,147,230,184,184,230,136,143,229,185,191,229,145,138,229,133,182,228,187,
-150,229,143,145,232,161,168,229,174,137,229,133,168,231,172,172,228,184,128,228,
-188,154,229,145,152,232,191,155,232,161,140,231,130,185,229,135,187,231,137,136,
-230,157,131,231,148,181,229,173,144,228,184,150,231,149,140,232,174,190,232,174,
-161,229,133,141,232,180,185,230,149,153,232,130,178,229,138,160,229,133,165,230,
-180,187,229,138,168,228,187,150,228,187,172,229,149,134,229,147,129,229,141,154,
-229,174,162,231,142,176,229,156,168,228,184,138,230,181,183,229,166,130,228,189,
-149,229,183,178,231,187,143,231,149,153,232,168,128,232,175,166,231,187,134,231,
-164,190,229,140,186,231,153,187,229,189,149,230,156,172,231,171,153,233,156,128,
-232,166,129,228,187,183,230,160,188,230,148,175,230,140,129,229,155,189,233,153,
-133,233,147,190,230,142,165,229,155,189,229,174,182,229,187,186,232,174,190,230,
-156,139,229,143,139,233,152,133,232,175,187,230,179,149,229,190,139,228,189,141,
-231,189,174,231,187,143,230,181,142,233,128,137,230,139,169,232,191,153,230,160,
-183,229,189,147,229,137,141,229,136,134,231,177,187,230,142,146,232,161,140,229,
-155,160,228,184,186,228,186,164,230,152,147,230,156,128,229,144,142,233,159,179,
-228,185,144,228,184,141,232,131,189,233,128,154,232,191,135,232,161,140,228,184,
-154,231,167,145,230,138,128,229,143,175,232,131,189,232,174,190,229,164,135,229,
-144,136,228,189,156,229,164,167,229,174,182,231,164,190,228,188,154,231,160,148,
-231,169,182,228,184,147,228,184,154,229,133,168,233,131,168,233,161,185,231,155,
-174,232,191,153,233,135,140,232,191,152,230,152,175,229,188,128,229,167,139,230,
-131,133,229,134,181,231,148,181,232,132,145,230,150,135,228,187,182,229,147,129,
-231,137,140,229,184,174,229,138,169,230,150,135,229,140,150,232,181,132,230,186,
-144,229,164,167,229,173,166,229,173,166,228,185,160,229,156,176,229,157,128,230,
-181,143,232,167,136,230,138,149,232,181,132,229,183,165,231,168,139,232,166,129,
-230,177,130,230,128,142,228,185,136,230,151,182,229,128,153,229,138,159,232,131,
-189,228,184,187,232,166,129,231,155,174,229,137,141,232,181,132,232,174,175,229,
-159,142,229,184,130,230,150,185,230,179,149,231,148,181,229,189,177,230,139,155,
-232,129,152,229,163,176,230,152,142,228,187,187,228,189,149,229,129,165,229,186,
-183,230,149,176,230,141,174,231,190,142,229,155,189,230,177,189,232,189,166,228,
-187,139,231,187,141,228,189,134,230,152,175,228,186,164,230,181,129,231,148,159,
-228,186,167,230,137,128,228,187,165,231,148,181,232,175,157,230,152,190,231,164,
-186,228,184,128,228,186,155,229,141,149,228,189,141,228,186,186,229,145,152,229,
-136,134,230,158,144,229,156,176,229,155,190,230,151,133,230,184,184,229,183,165,
-229,133,183,229,173,166,231,148,159,231,179,187,229,136,151,231,189,145,229,143,
-139,229,184,150,229,173,144,229,175,134,231,160,129,233,162,145,233,129,147,230,
-142,167,229,136,182,229,156,176,229,140,186,229,159,186,230,156,172,229,133,168,
-229,155,189,231,189,145,228,184,138,233,135,141,232,166,129,231,172,172,228,186,
-140,229,150,156,230,172,162,232,191,155,229,133,165,229,143,139,230,131,133,232,
-191,153,228,186,155,232,128,131,232,175,149,229,143,145,231,142,176,229,159,185,
-232,174,173,228,187,165,228,184,138,230,148,191,229,186,156,230,136,144,228,184,
-186,231,142,175,229,162,131,233,166,153,230,184,175,229,144,140,230,151,182,229,
-168,177,228,185,144,229,143,145,233,128,129,228,184,128,229,174,154,229,188,128,
-229,143,145,228,189,156,229,147,129,230,160,135,229,135,134,230,172,162,232,191,
-142,232,167,163,229,134,179,229,156,176,230,150,185,228,184,128,228,184,139,228,
-187,165,229,143,138,232,180,163,228,187,187,230,136,150,232,128,133,229,174,162,
-230,136,183,228,187,163,232,161,168,231,167,175,229,136,134,229,165,179,228,186,
-186,230,149,176,231,160,129,233,148,128,229,148,174,229,135,186,231,142,176,231,
-166,187,231,186,191,229,186,148,231,148,168,229,136,151,232,161,168,228,184,141,
-229,144,140,231,188,150,232,190,145,231,187,159,232,174,161,230,159,165,232,175,
-162,228,184,141,232,166,129,230,156,137,229,133,179,230,156,186,230,158,132,229,
-190,136,229,164,154,230,146,173,230,148,190,231,187,132,231,187,135,230,148,191,
-231,173,150,231,155,180,230,142,165,232,131,189,229,138,155,230,157,165,230,186,
-144,230,153,130,233,150,147,231,156,139,229,136,176,231,131,173,233,151,168,229,
-133,179,233,148,174,228,184,147,229,140,186,233,157,158,229,184,184,232,139,177,
-232,175,173,231,153,190,229,186,166,229,184,140,230,156,155,231,190,142,229,165,
-179,230,175,148,232,190,131,231,159,165,232,175,134,232,167,132,229,174,154,229,
-187,186,232,174,174,233,131,168,233,151,168,230,132,143,232,167,129,231,178,190,
-229,189,169,230,151,165,230,156,172,230,143,144,233,171,152,229,143,145,232,168,
-128,230,150,185,233,157,162,229,159,186,233,135,145,229,164,132,231,144,134,230,
-157,131,233,153,144,229,189,177,231,137,135,233,147,182,232,161,140,232,191,152,
-230,156,137,229,136,134,228,186,171,231,137,169,229,147,129,231,187,143,232,144,
-165,230,183,187,229,138,160,228,184,147,229,174,182,232,191,153,231,167,141,232,
-175,157,233,162,152,232,181,183,230,157,165,228,184,154,229,138,161,229,133,172,
-229,145,138,232,174,176,229,189,149,231,174,128,228,187,139,232,180,168,233,135,
-143,231,148,183,228,186,186,229,189,177,229,147,141,229,188,149,231,148,168,230,
-138,165,229,145,138,233,131,168,229,136,134,229,191,171,233,128,159,229,146,168,
-232,175,162,230,151,182,229,176,154,230,179,168,230,132,143,231,148,179,232,175,
-183,229,173,166,230,160,161,229,186,148,232,175,165,229,142,134,229,143,178,229,
-143,170,230,152,175,232,191,148,229,155,158,232,180,173,228,185,176,229,144,141,
-231,167,176,228,184,186,228,186,134,230,136,144,229,138,159,232,175,180,230,152,
-142,228,190,155,229,186,148,229,173,169,229,173,144,228,184,147,233,162,152,231,
-168,139,229,186,143,228,184,128,232,136,172,230,156,131,229,147,161,229,143,170,
-230,156,137,229,133,182,229,174,131,228,191,157,230,138,164,232,128,140,228,184,
-148,228,187,138,229,164,169,231,170,151,229,143,163,229,138,168,230,128,129,231,
-138,182,230,128,129,231,137,185,229,136,171,232,174,164,228,184,186,229,191,133,
-233,161,187,230,155,180,230,150,176,229,176,143,232,175,180,230,136,145,229,128,
-145,228,189,156,228,184,186,229,170,146,228,189,147,229,140,133,230,139,172,233,
-130,163,228,185,136,228,184,128,230,160,183,229,155,189,229,134,133,230,152,175,
-229,144,166,230,160,185,230,141,174,231,148,181,232,167,134,229,173,166,233,153,
-162,229,133,183,230,156,137,232,191,135,231,168,139,231,148,177,228,186,142,228,
-186,186,230,137,141,229,135,186,230,157,165,228,184,141,232,191,135,230,173,163,
-229,156,168,230,152,142,230,152,159,230,149,133,228,186,139,229,133,179,231,179,
-187,230,160,135,233,162,152,229,149,134,229,138,161,232,190,147,229,133,165,228,
-184,128,231,155,180,229,159,186,231,161,128,230,149,153,229,173,166,228,186,134,
-232,167,163,229,187,186,231,173,145,231,187,147,230,158,156,229,133,168,231,144,
-131,233,128,154,231,159,165,232,174,161,229,136,146,229,175,185,228,186,142,232,
-137,186,230,156,175,231,155,184,229,134,140,229,143,145,231,148,159,231,156,159,
-231,154,132,229,187,186,231,171,139,231,173,137,231,186,167,231,177,187,229,158,
-139,231,187,143,233,170,140,229,174,158,231,142,176,229,136,182,228,189,156,230,
-157,165,232,135,170,230,160,135,231,173,190,228,187,165,228,184,139,229,142,159,
-229,136,155,230,151,160,230,179,149,229,133,182,228,184,173,229,128,139,228,186,
-186,228,184,128,229,136,135,230,140,135,229,141,151,229,133,179,233,151,173,233,
-155,134,229,155,162,231,172,172,228,184,137,229,133,179,230,179,168,229,155,160,
-230,173,164,231,133,167,231,137,135,230,183,177,229,156,179,229,149,134,228,184,
-154,229,185,191,229,183,158,230,151,165,230,156,159,233,171,152,231,186,167,230,
-156,128,232,191,145,231,187,188,229,144,136,232,161,168,231,164,186,228,184,147,
-232,190,145,232,161,140,228,184,186,228,186,164,233,128,154,232,175,132,228,187,
-183,232,167,137,229,190,151,231,178,190,229,141,142,229,174,182,229,186,173,229,
-174,140,230,136,144,230,132,159,232,167,137,229,174,137,232,163,133,229,190,151,
-229,136,176,233,130,174,228,187,182,229,136,182,229,186,166,233,163,159,229,147,
-129,232,153,189,231,132,182,232,189,172,232,189,189,230,138,165,228,187,183,232,
-174,176,232,128,133,230,150,185,230,161,136,232,161,140,230,148,191,228,186,186,
-230,176,145,231,148,168,229,147,129,228,184,156,232,165,191,230,143,144,229,135,
-186,233,133,146,229,186,151,231,132,182,229,144,142,228,187,152,230,172,190,231,
-131,173,231,130,185,228,187,165,229,137,141,229,174,140,229,133,168,229,143,145,
-229,184,150,232,174,190,231,189,174,233,162,134,229,175,188,229,183,165,228,184,
-154,229,140,187,233,153,162,231,156,139,231,156,139,231,187,143,229,133,184,229,
-142,159,229,155,160,229,185,179,229,143,176,229,144,132,231,167,141,229,162,158,
-229,138,160,230,157,144,230,150,153,230,150,176,229,162,158,228,185,139,229,144,
-142,232,129,140,228,184,154,230,149,136,230,158,156,228,187,138,229,185,180,232,
-174,186,230,150,135,230,136,145,229,155,189,229,145,138,232,175,137,231,137,136,
-228,184,187,228,191,174,230,148,185,229,143,130,228,184,142,230,137,147,229,141,
-176,229,191,171,228,185,144,230,156,186,230,162,176,232,167,130,231,130,185,229,
-173,152,229,156,168,231,178,190,231,165,158,232,142,183,229,190,151,229,136,169,
-231,148,168,231,187,167,231,187,173,228,189,160,228,187,172,232,191,153,228,185,
-136,230,168,161,229,188,143,232,175,173,232,168,128,232,131,189,229,164,159,233,
-155,133,232,153,142,230,147,141,228,189,156,233,163,142,230,160,188,228,184,128,
-232,181,183,231,167,145,229,173,166,228,189,147,232,130,178,231,159,173,228,191,
-161,230,157,161,228,187,182,230,178,187,231,150,151,232,191,144,229,138,168,228,
-186,167,228,184,154,228,188,154,232,174,174,229,175,188,232,136,170,229,133,136,
-231,148,159,232,129,148,231,155,159,229,143,175,230,152,175,229,149,143,233,161,
-140,231,187,147,230,158,132,228,189,156,231,148,168,232,176,131,230,159,165,232,
-179,135,230,150,153,232,135,170,229,138,168,232,180,159,232,180,163,229,134,156,
-228,184,154,232,174,191,233,151,174,229,174,158,230,150,189,230,142,165,229,143,
-151,232,174,168,232,174,186,233,130,163,228,184,170,229,143,141,233,166,136,229,
-138,160,229,188,186,229,165,179,230,128,167,232,140,131,229,155,180,230,156,141,
-229,139,153,228,188,145,233,151,178,228,187,138,230,151,165,229,174,162,230,156,
-141,232,167,128,231,156,139,229,143,130,229,138,160,231,154,132,232,175,157,228,
-184,128,231,130,185,228,191,157,232,175,129,229,155,190,228,185,166,230,156,137,
-230,149,136,230,181,139,232,175,149,231,167,187,229,138,168,230,137,141,232,131,
-189,229,134,179,229,174,154,232,130,161,231,165,168,228,184,141,230,150,173,233,
-156,128,230,177,130,228,184,141,229,190,151,229,138,158,230,179,149,228,185,139,
-233,151,180,233,135,135,231,148,168,232,144,165,233,148,128,230,138,149,232,175,
-137,231,155,174,230,160,135,231,136,177,230,131,133,230,145,132,229,189,177,230,
-156,137,228,186,155,232,164,135,232,163,189,230,150,135,229,173,166,230,156,186,
-228,188,154,230,149,176,229,173,151,232,163,133,228,191,174,232,180,173,231,137,
-169,229,134,156,230,157,145,229,133,168,233,157,162,231,178,190,229,147,129,229,
-133,182,229,174,158,228,186,139,230,131,133,230,176,180,229,185,179,230,143,144,
-231,164,186,228,184,138,229,184,130,232,176,162,232,176,162,230,153,174,233,128,
-154,230,149,153,229,184,136,228,184,138,228,188,160,231,177,187,229,136,171,230,
-173,140,230,155,178,230,139,165,230,156,137,229,136,155,230,150,176,233,133,141,
-228,187,182,229,143,170,232,166,129,230,151,182,228,187,163,232,179,135,232,168,
-138,232,190,190,229,136,176,228,186,186,231,148,159,232,174,162,233,152,133,232,
-128,129,229,184,136,229,177,149,231,164,186,229,191,131,231,144,134,232,180,180,
-229,173,144,231,182,178,231,171,153,228,184,187,233,161,140,232,135,170,231,132,
-182,231,186,167,229,136,171,231,174,128,229,141,149,230,148,185,233,157,169,233,
-130,163,228,186,155,230,157,165,232,175,180,230,137,147,229,188,128,228,187,163,
-231,160,129,229,136,160,233,153,164,232,175,129,229,136,184,232,138,130,231,155,
-174,233,135,141,231,130,185,230,172,161,230,149,184,229,164,154,229,176,145,232,
-167,132,229,136,146,232,181,132,233,135,145,230,137,190,229,136,176,228,187,165,
-229,144,142,229,164,167,229,133,168,228,184,187,233,161,181,230,156,128,228,189,
-179,229,155,158,231,173,148,229,164,169,228,184,139,228,191,157,233,154,156,231,
-142,176,228,187,163,230,163,128,230,159,165,230,138,149,231,165,168,229,176,143,
-230,151,182,230,178,146,230,156,137,230,173,163,229,184,184,231,148,154,232,135,
-179,228,187,163,231,144,134,231,155,174,229,189,149,229,133,172,229,188,128,229,
-164,141,229,136,182,233,135,145,232,158,141,229,185,184,231,166,143,231,137,136,
-230,156,172,229,189,162,230,136,144,229,135,134,229,164,135,232,161,140,230,131,
-133,229,155,158,229,136,176,230,128,157,230,131,179,230,128,142,230,160,183,229,
-141,143,232,174,174,232,174,164,232,175,129,230,156,128,229,165,189,228,186,167,
-231,148,159,230,140,137,231,133,167,230,156,141,232,163,133,229,185,191,228,184,
-156,229,138,168,230,188,171,233,135,135,232,180,173,230,150,176,230,137,139,231,
-187,132,229,155,190,233,157,162,230,157,191,229,143,130,232,128,131,230,148,191,
-230,178,187,229,174,185,230,152,147,229,164,169,229,156,176,229,138,170,229,138,
-155,228,186,186,228,187,172,229,141,135,231,186,167,233,128,159,229,186,166,228,
-186,186,231,137,169,232,176,131,230,149,180,230,181,129,232,161,140,233,128,160,
-230,136,144,230,150,135,229,173,151,233,159,169,229,155,189,232,180,184,230,152,
-147,229,188,128,229,177,149,231,155,184,233,151,156,232,161,168,231,142,176,229,
-189,177,232,167,134,229,166,130,230,173,164,231,190,142,229,174,185,229,164,167,
-229,176,143,230,138,165,233,129,147,230,157,161,230,172,190,229,191,131,230,131,
-133,232,174,184,229,164,154,230,179,149,232,167,132,229,174,182,229,177,133,228,
-185,166,229,186,151,232,191,158,230,142,165,231,171,139,229,141,179,228,184,190,
-230,138,165,230,138,128,229,183,167,229,165,165,232,191,144,231,153,187,229,133,
-165,228,187,165,230,157,165,231,144,134,232,174,186,228,186,139,228,187,182,232,
-135,170,231,148,177,228,184,173,229,141,142,229,138,158,229,133,172,229,166,136,
-229,166,136,231,156,159,230,173,163,228,184,141,233,148,153,229,133,168,230,150,
-135,229,144,136,229,144,140,228,187,183,229,128,188,229,136,171,228,186,186,231,
-155,145,231,157,163,229,133,183,228,189,147,228,184,150,231,186,170,229,155,162,
-233,152,159,229,136,155,228,184,154,230,137,191,230,139,133,229,162,158,233,149,
-191,230,156,137,228,186,186,228,191,157,230,140,129,229,149,134,229,174,182,231,
-187,180,228,191,174,229,143,176,230,185,190,229,183,166,229,143,179,232,130,161,
-228,187,189,231,173,148,230,161,136,229,174,158,233,153,133,231,148,181,228,191,
-161,231,187,143,231,144,134,231,148,159,229,145,189,229,174,163,228,188,160,228,
-187,187,229,138,161,230,173,163,229,188,143,231,137,185,232,137,178,228,184,139,
-230,157,165,229,141,143,228,188,154,229,143,170,232,131,189,229,189,147,231,132,
-182,233,135,141,230,150,176,229,133,167,229,174,185,230,140,135,229,175,188,232,
-191,144,232,161,140,230,151,165,229,191,151,232,179,163,229,174,182,232,182,133,
-232,191,135,229,156,159,229,156,176,230,181,153,230,177,159,230,148,175,228,187,
-152,230,142,168,229,135,186,231,171,153,233,149,191,230,157,173,229,183,158,230,
-137,167,232,161,140,229,136,182,233,128,160,228,185,139,228,184,128,230,142,168,
-229,185,191,231,142,176,229,156,186,230,143,143,232,191,176,229,143,152,229,140,
-150,228,188,160,231,187,159,230,173,140,230,137,139,228,191,157,233,153,169,232,
-175,190,231,168,139,229,140,187,231,150,151,231,187,143,232,191,135,232,191,135,
-229,142,187,228,185,139,229,137,141,230,148,182,229,133,165,229,185,180,229,186,
-166,230,157,130,229,191,151,231,190,142,228,184,189,230,156,128,233,171,152,231,
-153,187,233,153,134,230,156,170,230,157,165,229,138,160,229,183,165,229,133,141,
-232,180,163,230,149,153,231,168,139,231,137,136,229,157,151,232,186,171,228,189,
-147,233,135,141,229,186,134,229,135,186,229,148,174,230,136,144,230,156,172,229,
-189,162,229,188,143,229,156,159,232,177,134,229,135,186,229,131,185,228,184,156,
-230,150,185,233,130,174,231,174,177,229,141,151,228,186,172,230,177,130,232,129,
-140,229,143,150,229,190,151,232,129,140,228,189,141,231,155,184,228,191,161,233,
-161,181,233,157,162,229,136,134,233,146,159,231,189,145,233,161,181,231,161,174,
-229,174,154,229,155,190,228,190,139,231,189,145,229,157,128,231,167,175,230,158,
-129,233,148,153,232,175,175,231,155,174,231,154,132,229,174,157,232,180,157,230,
-156,186,229,133,179,233,163,142,233,153,169,230,142,136,230,157,131,231,151,133,
-230,175,146,229,174,160,231,137,169,233,153,164,228,186,134,232,169,149,232,171,
-150,231,150,190,231,151,133,229,143,138,230,151,182,230,177,130,232,180,173,231,
-171,153,231,130,185,229,132,191,231,171,165,230,175,143,229,164,169,228,184,173,
-229,164,174,232,174,164,232,175,134,230,175,143,228,184,170,229,164,169,230,180,
-165,229,173,151,228,189,147,229,143,176,231,129,163,231,187,180,230,138,164,230,
-156,172,233,161,181,228,184,170,230,128,167,229,174,152,230,150,185,229,184,184,
-232,167,129,231,155,184,230,156,186,230,136,152,231,149,165,229,186,148,229,189,
-147,229,190,139,229,184,136,230,150,185,228,190,191,230,160,161,229,155,173,232,
-130,161,229,184,130,230,136,191,229,177,139,230,160,143,231,155,174,229,145,152,
-229,183,165,229,175,188,232,135,180,231,170,129,231,132,182,233,129,147,229,133,
-183,230,156,172,231,189,145,231,187,147,229,144,136,230,161,163,230,161,136,229,
-138,179,229,138,168,229,143,166,229,164,150,231,190,142,229,133,131,229,188,149,
-232,181,183,230,148,185,229,143,152,231,172,172,229,155,155,228,188,154,232,174,
-161,232,170,170,230,152,142,233,154,144,231,167,129,229,174,157,229,174,157,232,
-167,132,232,140,131,230,182,136,232,180,185,229,133,177,229,144,140,229,191,152,
-232,174,176,228,189,147,231,179,187,229,184,166,230,157,165,229,144,141,229,173,
-151,231,153,188,232,161,168,229,188,128,230,148,190,229,138,160,231,155,159,229,
-143,151,229,136,176,228,186,140,230,137,139,229,164,167,233,135,143,230,136,144,
-228,186,186,230,149,176,233,135,143,229,133,177,228,186,171,229,140,186,229,159,
-159,229,165,179,229,173,169,229,142,159,229,136,153,230,137,128,229,156,168,231,
-187,147,230,157,159,233,128,154,228,191,161,232,182,133,231,186,167,233,133,141,
-231,189,174,229,189,147,230,151,182,228,188,152,231,167,128,230,128,167,230,132,
-159,230,136,191,228,186,167,233,129,138,230,136,178,229,135,186,229,143,163,230,
-143,144,228,186,164,229,176,177,228,184,154,228,191,157,229,129,165,231,168,139,
-229,186,166,229,143,130,230,149,176,228,186,139,228,184,154,230,149,180,228,184,
-170,229,177,177,228,184,156,230,131,133,230,132,159,231,137,185,230,174,138,229,
-136,134,233,161,158,230,144,156,229,176,139,229,177,158,228,186,142,233,151,168,
-230,136,183,232,180,162,229,138,161,229,163,176,233,159,179,229,143,138,229,133,
-182,232,180,162,231,187,143,229,157,154,230,140,129,229,185,178,233,131,168,230,
-136,144,231,171,139,229,136,169,231,155,138,232,128,131,232,153,145,230,136,144,
-233,131,189,229,140,133,232,163,133,231,148,168,230,136,182,230,175,148,232,181,
-155,230,150,135,230,152,142,230,139,155,229,149,134,229,174,140,230,149,180,231,
-156,159,230,152,175,231,156,188,231,157,155,228,188,153,228,188,180,229,168,129,
-230,156,155,233,162,134,229,159,159,229,141,171,231,148,159,228,188,152,230,131,
-160,232,171,150,229,163,135,229,133,172,229,133,177,232,137,175,229,165,189,229,
-133,133,229,136,134,231,172,166,229,144,136,233,153,132,228,187,182,231,137,185,
-231,130,185,228,184,141,229,143,175,232,139,177,230,150,135,232,181,132,228,186,
-167,230,160,185,230,156,172,230,152,142,230,152,190,229,175,134,231,162,188,229,
-133,172,228,188,151,230,176,145,230,151,143,230,155,180,229,138,160,228,186,171,
-229,143,151,229,144,140,229,173,166,229,144,175,229,138,168,233,128,130,229,144,
-136,229,142,159,230,157,165,233,151,174,231,173,148,230,156,172,230,150,135,231,
-190,142,233,163,159,231,187,191,232,137,178,231,168,179,229,174,154,231,187,136,
-228,186,142,231,148,159,231,137,169,228,190,155,230,177,130,230,144,156,231,139,
-144,229,138,155,233,135,143,228,184,165,233,135,141,230,176,184,232,191,156,229,
-134,153,231,156,159,230,156,137,233,153,144,231,171,158,228,186,137,229,175,185,
-232,177,161,232,180,185,231,148,168,228,184,141,229,165,189,231,187,157,229,175,
-185,229,141,129,229,136,134,228,191,131,232,191,155,231,130,185,232,175,132,229,
-189,177,233,159,179,228,188,152,229,138,191,228,184,141,229,176,145,230,172,163,
-232,181,143,229,185,182,228,184,148,230,156,137,231,130,185,230,150,185,229,144,
-145,229,133,168,230,150,176,228,191,161,231,148,168,232,174,190,230,150,189,229,
-189,162,232,177,161,232,181,132,230,160,188,231,170,129,231,160,180,233,154,143,
-231,157,128,233,135,141,229,164,167,228,186,142,230,152,175,230,175,149,228,184,
-154,230,153,186,232,131,189,229,140,150,229,183,165,229,174,140,231,190,142,229,
-149,134,229,159,142,231,187,159,228,184,128,229,135,186,231,137,136,230,137,147,
-233,128,160,231,148,162,229,147,129,230,166,130,229,134,181,231,148,168,228,186,
-142,228,191,157,231,149,153,229,155,160,231,180,160,228,184,173,229,156,139,229,
-173,152,229,130,168,232,180,180,229,155,190,230,156,128,230,132,155,233,149,191,
-230,156,159,229,143,163,228,187,183,231,144,134,232,180,162,229,159,186,229,156,
-176,229,174,137,230,142,146,230,173,166,230,177,137,233,135,140,233,157,162,229,
-136,155,229,187,186,229,164,169,231,169,186,233,166,150,229,133,136,229,174,140,
-229,150,132,233,169,177,229,138,168,228,184,139,233,157,162,228,184,141,229,134,
-141,232,175,154,228,191,161,230,132,143,228,185,137,233,152,179,229,133,137,232,
-139,177,229,155,189,230,188,130,228,186,174,229,134,155,228,186,139,231,142,169,
-229,174,182,231,190,164,228,188,151,229,134,156,230,176,145,229,141,179,229,143,
-175,229,144,141,231,168,177,229,174,182,229,133,183,229,138,168,231,148,187,230,
-131,179,229,136,176,230,179,168,230,152,142,229,176,143,229,173,166,230,128,167,
-232,131,189,232,128,131,231,160,148,231,161,172,228,187,182,232,167,130,231,156,
-139,230,184,133,230,165,154,230,144,158,231,172,145,233,166,150,233,160,129,233,
-187,132,233,135,145,233,128,130,231,148,168,230,177,159,232,139,143,231,156,159,
-229,174,158,228,184,187,231,174,161,233,152,182,230,174,181,232,168,187,229,134,
-138,231,191,187,232,175,145,230,157,131,229,136,169,229,129,154,229,165,189,228,
-188,188,228,185,142,233,128,154,232,174,175,230,150,189,229,183,165,231,139,128,
-230,133,139,228,185,159,232,174,184,231,142,175,228,191,157,229,159,185,229,133,
-187,230,166,130,229,191,181,229,164,167,229,158,139,230,156,186,231,165,168,231,
-144,134,232,167,163,229,140,191,229,144,141,99,117,97,110,100,111,101,110,118,
-105,97,114,109,97,100,114,105,100,98,117,115,99,97,114,105,110,105,99,105,111,
-116,105,101,109,112,111,112,111,114,113,117,101,99,117,101,110,116,97,101,115,
-116,97,100,111,112,117,101,100,101,110,106,117,101,103,111,115,99,111,110,116,
-114,97,101,115,116,195,161,110,110,111,109,98,114,101,116,105,101,110,101,110,
-112,101,114,102,105,108,109,97,110,101,114,97,97,109,105,103,111,115,99,105,117,
-100,97,100,99,101,110,116,114,111,97,117,110,113,117,101,112,117,101,100,101,115
-,100,101,110,116,114,111,112,114,105,109,101,114,112,114,101,99,105,111,115,101,
-103,195,186,110,98,117,101,110,111,115,118,111,108,118,101,114,112,117,110,116,
-111,115,115,101,109,97,110,97,104,97,98,195,173,97,97,103,111,115,116,111,110,
-117,101,118,111,115,117,110,105,100,111,115,99,97,114,108,111,115,101,113,117,
-105,112,111,110,105,195,177,111,115,109,117,99,104,111,115,97,108,103,117,110,97
-,99,111,114,114,101,111,105,109,97,103,101,110,112,97,114,116,105,114,97,114,114
-,105,98,97,109,97,114,195,173,97,104,111,109,98,114,101,101,109,112,108,101,111,
-118,101,114,100,97,100,99,97,109,98,105,111,109,117,99,104,97,115,102,117,101,
-114,111,110,112,97,115,97,100,111,108,195,173,110,101,97,112,97,114,101,99,101,
-110,117,101,118,97,115,99,117,114,115,111,115,101,115,116,97,98,97,113,117,105,
-101,114,111,108,105,98,114,111,115,99,117,97,110,116,111,97,99,99,101,115,111,
-109,105,103,117,101,108,118,97,114,105,111,115,99,117,97,116,114,111,116,105,101
-,110,101,115,103,114,117,112,111,115,115,101,114,195,161,110,101,117,114,111,112
-,97,109,101,100,105,111,115,102,114,101,110,116,101,97,99,101,114,99,97,100,101,
-109,195,161,115,111,102,101,114,116,97,99,111,99,104,101,115,109,111,100,101,108
-,111,105,116,97,108,105,97,108,101,116,114,97,115,97,108,103,195,186,110,99,111,
-109,112,114,97,99,117,97,108,101,115,101,120,105,115,116,101,99,117,101,114,112,
-111,115,105,101,110,100,111,112,114,101,110,115,97,108,108,101,103,97,114,118,
-105,97,106,101,115,100,105,110,101,114,111,109,117,114,99,105,97,112,111,100,114
-,195,161,112,117,101,115,116,111,100,105,97,114,105,111,112,117,101,98,108,111,
-113,117,105,101,114,101,109,97,110,117,101,108,112,114,111,112,105,111,99,114,
-105,115,105,115,99,105,101,114,116,111,115,101,103,117,114,111,109,117,101,114,
-116,101,102,117,101,110,116,101,99,101,114,114,97,114,103,114,97,110,100,101,101
-,102,101,99,116,111,112,97,114,116,101,115,109,101,100,105,100,97,112,114,111,
-112,105,97,111,102,114,101,99,101,116,105,101,114,114,97,101,45,109,97,105,108,
-118,97,114,105,97,115,102,111,114,109,97,115,102,117,116,117,114,111,111,98,106,
-101,116,111,115,101,103,117,105,114,114,105,101,115,103,111,110,111,114,109,97,
-115,109,105,115,109,111,115,195,186,110,105,99,111,99,97,109,105,110,111,115,105
-,116,105,111,115,114,97,122,195,179,110,100,101,98,105,100,111,112,114,117,101,
-98,97,116,111,108,101,100,111,116,101,110,195,173,97,106,101,115,195,186,115,101
-,115,112,101,114,111,99,111,99,105,110,97,111,114,105,103,101,110,116,105,101,
-110,100,97,99,105,101,110,116,111,99,195,161,100,105,122,104,97,98,108,97,114,
-115,101,114,195,173,97,108,97,116,105,110,97,102,117,101,114,122,97,101,115,116,
-105,108,111,103,117,101,114,114,97,101,110,116,114,97,114,195,169,120,105,116,
-111,108,195,179,112,101,122,97,103,101,110,100,97,118,195,173,100,101,111,101,
-118,105,116,97,114,112,97,103,105,110,97,109,101,116,114,111,115,106,97,118,105,
-101,114,112,97,100,114,101,115,102,195,161,99,105,108,99,97,98,101,122,97,195,
-161,114,101,97,115,115,97,108,105,100,97,101,110,118,195,173,111,106,97,112,195,
-179,110,97,98,117,115,111,115,98,105,101,110,101,115,116,101,120,116,111,115,108
-,108,101,118,97,114,112,117,101,100,97,110,102,117,101,114,116,101,99,111,109,
-195,186,110,99,108,97,115,101,115,104,117,109,97,110,111,116,101,110,105,100,111
-,98,105,108,98,97,111,117,110,105,100,97,100,101,115,116,195,161,115,101,100,105
-,116,97,114,99,114,101,97,100,111,208,180,208,187,209,143,209,135,209,130,208,
-190,208,186,208,176,208,186,208,184,208,187,208,184,209,141,209,130,208,190,208,
-178,209,129,208,181,208,181,208,179,208,190,208,191,209,128,208,184,209,130,208,
-176,208,186,208,181,209,137,208,181,209,131,208,182,208,181,208,154,208,176,208,
-186,208,177,208,181,208,183,208,177,209,139,208,187,208,190,208,189,208,184,208,
-146,209,129,208,181,208,191,208,190,208,180,208,173,209,130,208,190,209,130,208,
-190,208,188,209,135,208,181,208,188,208,189,208,181,209,130,208,187,208,181,209,
-130,209,128,208,176,208,183,208,190,208,189,208,176,208,179,208,180,208,181,208,
-188,208,189,208,181,208,148,208,187,209,143,208,159,209,128,208,184,208,189,208,
-176,209,129,208,189,208,184,209,133,209,130,208,181,208,188,208,186,209,130,208,
-190,208,179,208,190,208,180,208,178,208,190,209,130,209,130,208,176,208,188,208,
-161,208,168,208,144,208,188,208,176,209,143,208,167,209,130,208,190,208,178,208,
-176,209,129,208,178,208,176,208,188,208,181,208,188,209,131,208,162,208,176,208,
-186,208,180,208,178,208,176,208,189,208,176,208,188,209,141,209,130,208,184,209,
-141,209,130,209,131,208,146,208,176,208,188,209,130,208,181,209,133,208,191,209,
-128,208,190,209,130,209,131,209,130,208,189,208,176,208,180,208,180,208,189,209,
-143,208,146,208,190,209,130,209,130,209,128,208,184,208,189,208,181,208,185,208,
-146,208,176,209,129,208,189,208,184,208,188,209,129,208,176,208,188,209,130,208,
-190,209,130,209,128,209,131,208,177,208,158,208,189,208,184,208,188,208,184,209,
-128,208,189,208,181,208,181,208,158,208,158,208,158,208,187,208,184,209,134,209,
-141,209,130,208,176,208,158,208,189,208,176,208,189,208,181,208,188,208,180,208,
-190,208,188,208,188,208,190,208,185,208,180,208,178,208,181,208,190,208,189,208,
-190,209,129,209,131,208,180,224,164,149,224,165,135,224,164,185,224,165,136,224,
-164,149,224,165,128,224,164,184,224,165,135,224,164,149,224,164,190,224,164,149,
-224,165,139,224,164,148,224,164,176,224,164,170,224,164,176,224,164,168,224,165,
-135,224,164,143,224,164,149,224,164,149,224,164,191,224,164,173,224,165,128,224,
-164,135,224,164,184,224,164,149,224,164,176,224,164,164,224,165,139,224,164,185,
-224,165,139,224,164,134,224,164,170,224,164,185,224,165,128,224,164,175,224,164,
-185,224,164,175,224,164,190,224,164,164,224,164,149,224,164,165,224,164,190,106,
-97,103,114,97,110,224,164,134,224,164,156,224,164,156,224,165,139,224,164,133,
-224,164,172,224,164,166,224,165,139,224,164,151,224,164,136,224,164,156,224,164,
-190,224,164,151,224,164,143,224,164,185,224,164,174,224,164,135,224,164,168,224,
-164,181,224,164,185,224,164,175,224,165,135,224,164,165,224,165,135,224,164,165,
-224,165,128,224,164,152,224,164,176,224,164,156,224,164,172,224,164,166,224,165,
-128,224,164,149,224,164,136,224,164,156,224,165,128,224,164,181,224,165,135,224,
-164,168,224,164,136,224,164,168,224,164,143,224,164,185,224,164,176,224,164,137,
-224,164,184,224,164,174,224,165,135,224,164,149,224,164,174,224,164,181,224,165,
-139,224,164,178,224,165,135,224,164,184,224,164,172,224,164,174,224,164,136,224,
-164,166,224,165,135,224,164,147,224,164,176,224,164,134,224,164,174,224,164,172,
-224,164,184,224,164,173,224,164,176,224,164,172,224,164,168,224,164,154,224,164,
-178,224,164,174,224,164,168,224,164,134,224,164,151,224,164,184,224,165,128,224,
-164,178,224,165,128,216,185,217,132,217,137,216,165,217,132,217,137,217,135,216,
-176,216,167,216,162,216,174,216,177,216,185,216,175,216,175,216,167,217,132,217,
-137,217,135,216,176,217,135,216,181,217,136,216,177,216,186,217,138,216,177,217,
-131,216,167,217,134,217,136,217,132,216,167,216,168,217,138,217,134,216,185,216,
-177,216,182,216,176,217,132,217,131,217,135,217,134,216,167,217,138,217,136,217,
-133,217,130,216,167,217,132,216,185,217,132,217,138,216,167,217,134,216,167,217,
-132,217,131,217,134,216,173,216,170,217,137,217,130,216,168,217,132,217,136,216,
-173,216,169,216,167,216,174,216,177,217,129,217,130,216,183,216,185,216,168,216,
-175,216,177,217,131,217,134,216,165,216,176,216,167,217,131,217,133,216,167,216,
-167,216,173,216,175,216,165,217,132,216,167,217,129,217,138,217,135,216,168,216,
-185,216,182,217,131,217,138,217,129,216,168,216,173,216,171,217,136,217,133,217,
-134,217,136,217,135,217,136,216,163,217,134,216,167,216,172,216,175,216,167,217,
-132,217,135,216,167,216,179,217,132,217,133,216,185,217,134,216,175,217,132,217,
-138,216,179,216,185,216,168,216,177,216,181,217,132,217,137,217,133,217,134,216,
-176,216,168,217,135,216,167,216,163,217,134,217,135,217,133,216,171,217,132,217,
-131,217,134,216,170,216,167,217,132,216,167,216,173,217,138,216,171,217,133,216,
-181,216,177,216,180,216,177,216,173,216,173,217,136,217,132,217,136,217,129,217,
-138,216,167,216,176,216,167,217,132,217,131,217,132,217,133,216,177,216,169,216,
-167,217,134,216,170,216,167,217,132,217,129,216,163,216,168,217,136,216,174,216,
-167,216,181,216,163,217,134,216,170,216,167,217,134,217,135,216,167,217,132,217,
-138,216,185,216,182,217,136,217,136,217,130,216,175,216,167,216,168,217,134,216,
-174,217,138,216,177,216,168,217,134,216,170,217,132,217,131,217,133,216,180,216,
-167,216,161,217,136,217,135,217,138,216,167,216,168,217,136,217,130,216,181,216,
-181,217,136,217,133,216,167,216,177,217,130,217,133,216,163,216,173,216,175,217,
-134,216,173,217,134,216,185,216,175,217,133,216,177,216,163,217,138,216,167,216,
-173,216,169,217,131,216,170,216,168,216,175,217,136,217,134,217,138,216,172,216,
-168,217,133,217,134,217,135,216,170,216,173,216,170,216,172,217,135,216,169,216,
-179,217,134,216,169,217,138,216,170,217,133,217,131,216,177,216,169,216,186,216,
-178,216,169,217,134,217,129,216,179,216,168,217,138,216,170,217,132,217,132,217,
-135,217,132,217,134,216,167,216,170,217,132,217,131,217,130,217,132,216,168,217,
-132,217,133,216,167,216,185,217,134,217,135,216,163,217,136,217,132,216,180,217,
-138,216,161,217,134,217,136,216,177,216,163,217,133,216,167,217,129,217,138,217,
-131,216,168,217,131,217,132,216,176,216,167,216,170,216,177,216,170,216,168,216,
-168,216,163,217,134,217,135,217,133,216,179,216,167,217,134,217,131,216,168,217,
-138,216,185,217,129,217,130,216,175,216,173,216,179,217,134,217,132,217,135,217,
-133,216,180,216,185,216,177,216,163,217,135,217,132,216,180,217,135,216,177,217,
-130,216,183,216,177,216,183,217,132,216,168,112,114,111,102,105,108,101,115,101,
-114,118,105,99,101,100,101,102,97,117,108,116,104,105,109,115,101,108,102,100,
-101,116,97,105,108,115,99,111,110,116,101,110,116,115,117,112,112,111,114,116,
-115,116,97,114,116,101,100,109,101,115,115,97,103,101,115,117,99,99,101,115,115,
-102,97,115,104,105,111,110,60,116,105,116,108,101,62,99,111,117,110,116,114,121,
-97,99,99,111,117,110,116,99,114,101,97,116,101,100,115,116,111,114,105,101,115,
-114,101,115,117,108,116,115,114,117,110,110,105,110,103,112,114,111,99,101,115,
-115,119,114,105,116,105,110,103,111,98,106,101,99,116,115,118,105,115,105,98,108
-,101,119,101,108,99,111,109,101,97,114,116,105,99,108,101,117,110,107,110,111,
-119,110,110,101,116,119,111,114,107,99,111,109,112,97,110,121,100,121,110,97,109
-,105,99,98,114,111,119,115,101,114,112,114,105,118,97,99,121,112,114,111,98,108,
-101,109,83,101,114,118,105,99,101,114,101,115,112,101,99,116,100,105,115,112,108
-,97,121,114,101,113,117,101,115,116,114,101,115,101,114,118,101,119,101,98,115,
-105,116,101,104,105,115,116,111,114,121,102,114,105,101,110,100,115,111,112,116,
-105,111,110,115,119,111,114,107,105,110,103,118,101,114,115,105,111,110,109,105,
-108,108,105,111,110,99,104,97,110,110,101,108,119,105,110,100,111,119,46,97,100,
-100,114,101,115,115,118,105,115,105,116,101,100,119,101,97,116,104,101,114,99,
-111,114,114,101,99,116,112,114,111,100,117,99,116,101,100,105,114,101,99,116,102
-,111,114,119,97,114,100,121,111,117,32,99,97,110,114,101,109,111,118,101,100,115
-,117,98,106,101,99,116,99,111,110,116,114,111,108,97,114,99,104,105,118,101,99,
-117,114,114,101,110,116,114,101,97,100,105,110,103,108,105,98,114,97,114,121,108
-,105,109,105,116,101,100,109,97,110,97,103,101,114,102,117,114,116,104,101,114,
-115,117,109,109,97,114,121,109,97,99,104,105,110,101,109,105,110,117,116,101,115
-,112,114,105,118,97,116,101,99,111,110,116,101,120,116,112,114,111,103,114,97,
-109,115,111,99,105,101,116,121,110,117,109,98,101,114,115,119,114,105,116,116,
-101,110,101,110,97,98,108,101,100,116,114,105,103,103,101,114,115,111,117,114,99
-,101,115,108,111,97,100,105,110,103,101,108,101,109,101,110,116,112,97,114,116,
-110,101,114,102,105,110,97,108,108,121,112,101,114,102,101,99,116,109,101,97,110
-,105,110,103,115,121,115,116,101,109,115,107,101,101,112,105,110,103,99,117,108,
-116,117,114,101,38,113,117,111,116,59,44,106,111,117,114,110,97,108,112,114,111,
-106,101,99,116,115,117,114,102,97,99,101,115,38,113,117,111,116,59,101,120,112,
-105,114,101,115,114,101,118,105,101,119,115,98,97,108,97,110,99,101,69,110,103,
-108,105,115,104,67,111,110,116,101,110,116,116,104,114,111,117,103,104,80,108,
-101,97,115,101,32,111,112,105,110,105,111,110,99,111,110,116,97,99,116,97,118,
-101,114,97,103,101,112,114,105,109,97,114,121,118,105,108,108,97,103,101,83,112,
-97,110,105,115,104,103,97,108,108,101,114,121,100,101,99,108,105,110,101,109,101
-,101,116,105,110,103,109,105,115,115,105,111,110,112,111,112,117,108,97,114,113,
-117,97,108,105,116,121,109,101,97,115,117,114,101,103,101,110,101,114,97,108,115
-,112,101,99,105,101,115,115,101,115,115,105,111,110,115,101,99,116,105,111,110,
-119,114,105,116,101,114,115,99,111,117,110,116,101,114,105,110,105,116,105,97,
-108,114,101,112,111,114,116,115,102,105,103,117,114,101,115,109,101,109,98,101,
-114,115,104,111,108,100,105,110,103,100,105,115,112,117,116,101,101,97,114,108,
-105,101,114,101,120,112,114,101,115,115,100,105,103,105,116,97,108,112,105,99,
-116,117,114,101,65,110,111,116,104,101,114,109,97,114,114,105,101,100,116,114,97
-,102,102,105,99,108,101,97,100,105,110,103,99,104,97,110,103,101,100,99,101,110,
-116,114,97,108,118,105,99,116,111,114,121,105,109,97,103,101,115,47,114,101,97,
-115,111,110,115,115,116,117,100,105,101,115,102,101,97,116,117,114,101,108,105,
-115,116,105,110,103,109,117,115,116,32,98,101,115,99,104,111,111,108,115,86,101,
-114,115,105,111,110,117,115,117,97,108,108,121,101,112,105,115,111,100,101,112,
-108,97,121,105,110,103,103,114,111,119,105,110,103,111,98,118,105,111,117,115,
-111,118,101,114,108,97,121,112,114,101,115,101,110,116,97,99,116,105,111,110,115
-,60,47,117,108,62,13,10,119,114,97,112,112,101,114,97,108,114,101,97,100,121,99,
-101,114,116,97,105,110,114,101,97,108,105,116,121,115,116,111,114,97,103,101,97,
-110,111,116,104,101,114,100,101,115,107,116,111,112,111,102,102,101,114,101,100,
-112,97,116,116,101,114,110,117,110,117,115,117,97,108,68,105,103,105,116,97,108,
-99,97,112,105,116,97,108,87,101,98,115,105,116,101,102,97,105,108,117,114,101,99
-,111,110,110,101,99,116,114,101,100,117,99,101,100,65,110,100,114,111,105,100,
-100,101,99,97,100,101,115,114,101,103,117,108,97,114,32,38,97,109,112,59,32,97,
-110,105,109,97,108,115,114,101,108,101,97,115,101,65,117,116,111,109,97,116,103,
-101,116,116,105,110,103,109,101,116,104,111,100,115,110,111,116,104,105,110,103,
-80,111,112,117,108,97,114,99,97,112,116,105,111,110,108,101,116,116,101,114,115,
-99,97,112,116,117,114,101,115,99,105,101,110,99,101,108,105,99,101,110,115,101,
-99,104,97,110,103,101,115,69,110,103,108,97,110,100,61,49,38,97,109,112,59,72,
-105,115,116,111,114,121,32,61,32,110,101,119,32,67,101,110,116,114,97,108,117,
-112,100,97,116,101,100,83,112,101,99,105,97,108,78,101,116,119,111,114,107,114,
-101,113,117,105,114,101,99,111,109,109,101,110,116,119,97,114,110,105,110,103,67
-,111,108,108,101,103,101,116,111,111,108,98,97,114,114,101,109,97,105,110,115,98
-,101,99,97,117,115,101,101,108,101,99,116,101,100,68,101,117,116,115,99,104,102,
-105,110,97,110,99,101,119,111,114,107,101,114,115,113,117,105,99,107,108,121,98,
-101,116,119,101,101,110,101,120,97,99,116,108,121,115,101,116,116,105,110,103,
-100,105,115,101,97,115,101,83,111,99,105,101,116,121,119,101,97,112,111,110,115,
-101,120,104,105,98,105,116,38,108,116,59,33,45,45,67,111,110,116,114,111,108,99,
-108,97,115,115,101,115,99,111,118,101,114,101,100,111,117,116,108,105,110,101,97
-,116,116,97,99,107,115,100,101,118,105,99,101,115,40,119,105,110,100,111,119,112
-,117,114,112,111,115,101,116,105,116,108,101,61,34,77,111,98,105,108,101,32,107,
-105,108,108,105,110,103,115,104,111,119,105,110,103,73,116,97,108,105,97,110,100
-,114,111,112,112,101,100,104,101,97,118,105,108,121,101,102,102,101,99,116,115,
-45,49,39,93,41,59,10,99,111,110,102,105,114,109,67,117,114,114,101,110,116,97,
-100,118,97,110,99,101,115,104,97,114,105,110,103,111,112,101,110,105,110,103,100
-,114,97,119,105,110,103,98,105,108,108,105,111,110,111,114,100,101,114,101,100,
-71,101,114,109,97,110,121,114,101,108,97,116,101,100,60,47,102,111,114,109,62,
-105,110,99,108,117,100,101,119,104,101,116,104,101,114,100,101,102,105,110,101,
-100,83,99,105,101,110,99,101,99,97,116,97,108,111,103,65,114,116,105,99,108,101,
-98,117,116,116,111,110,115,108,97,114,103,101,115,116,117,110,105,102,111,114,
-109,106,111,117,114,110,101,121,115,105,100,101,98,97,114,67,104,105,99,97,103,
-111,104,111,108,105,100,97,121,71,101,110,101,114,97,108,112,97,115,115,97,103,
-101,44,38,113,117,111,116,59,97,110,105,109,97,116,101,102,101,101,108,105,110,
-103,97,114,114,105,118,101,100,112,97,115,115,105,110,103,110,97,116,117,114,97,
-108,114,111,117,103,104,108,121,46,10,10,84,104,101,32,98,117,116,32,110,111,116
-,100,101,110,115,105,116,121,66,114,105,116,97,105,110,67,104,105,110,101,115,
-101,108,97,99,107,32,111,102,116,114,105,98,117,116,101,73,114,101,108,97,110,
-100,34,32,100,97,116,97,45,102,97,99,116,111,114,115,114,101,99,101,105,118,101,
-116,104,97,116,32,105,115,76,105,98,114,97,114,121,104,117,115,98,97,110,100,105
-,110,32,102,97,99,116,97,102,102,97,105,114,115,67,104,97,114,108,101,115,114,97
-,100,105,99,97,108,98,114,111,117,103,104,116,102,105,110,100,105,110,103,108,97
-,110,100,105,110,103,58,108,97,110,103,61,34,114,101,116,117,114,110,32,108,101,
-97,100,101,114,115,112,108,97,110,110,101,100,112,114,101,109,105,117,109,112,97
-,99,107,97,103,101,65,109,101,114,105,99,97,69,100,105,116,105,111,110,93,38,113
-,117,111,116,59,77,101,115,115,97,103,101,110,101,101,100,32,116,111,118,97,108,
-117,101,61,34,99,111,109,112,108,101,120,108,111,111,107,105,110,103,115,116,97,
-116,105,111,110,98,101,108,105,101,118,101,115,109,97,108,108,101,114,45,109,111
-,98,105,108,101,114,101,99,111,114,100,115,119,97,110,116,32,116,111,107,105,110
-,100,32,111,102,70,105,114,101,102,111,120,121,111,117,32,97,114,101,115,105,109
-,105,108,97,114,115,116,117,100,105,101,100,109,97,120,105,109,117,109,104,101,
-97,100,105,110,103,114,97,112,105,100,108,121,99,108,105,109,97,116,101,107,105,
-110,103,100,111,109,101,109,101,114,103,101,100,97,109,111,117,110,116,115,102,
-111,117,110,100,101,100,112,105,111,110,101,101,114,102,111,114,109,117,108,97,
-100,121,110,97,115,116,121,104,111,119,32,116,111,32,83,117,112,112,111,114,116,
-114,101,118,101,110,117,101,101,99,111,110,111,109,121,82,101,115,117,108,116,
-115,98,114,111,116,104,101,114,115,111,108,100,105,101,114,108,97,114,103,101,
-108,121,99,97,108,108,105,110,103,46,38,113,117,111,116,59,65,99,99,111,117,110,
-116,69,100,119,97,114,100,32,115,101,103,109,101,110,116,82,111,98,101,114,116,
-32,101,102,102,111,114,116,115,80,97,99,105,102,105,99,108,101,97,114,110,101,
-100,117,112,32,119,105,116,104,104,101,105,103,104,116,58,119,101,32,104,97,118,
-101,65,110,103,101,108,101,115,110,97,116,105,111,110,115,95,115,101,97,114,99,
-104,97,112,112,108,105,101,100,97,99,113,117,105,114,101,109,97,115,115,105,118,
-101,103,114,97,110,116,101,100,58,32,102,97,108,115,101,116,114,101,97,116,101,
-100,98,105,103,103,101,115,116,98,101,110,101,102,105,116,100,114,105,118,105,
-110,103,83,116,117,100,105,101,115,109,105,110,105,109,117,109,112,101,114,104,
-97,112,115,109,111,114,110,105,110,103,115,101,108,108,105,110,103,105,115,32,
-117,115,101,100,114,101,118,101,114,115,101,118,97,114,105,97,110,116,32,114,111
-,108,101,61,34,109,105,115,115,105,110,103,97,99,104,105,101,118,101,112,114,111
-,109,111,116,101,115,116,117,100,101,110,116,115,111,109,101,111,110,101,101,120
-,116,114,101,109,101,114,101,115,116,111,114,101,98,111,116,116,111,109,58,101,
-118,111,108,118,101,100,97,108,108,32,116,104,101,115,105,116,101,109,97,112,101
-,110,103,108,105,115,104,119,97,121,32,116,111,32,32,65,117,103,117,115,116,115,
-121,109,98,111,108,115,67,111,109,112,97,110,121,109,97,116,116,101,114,115,109,
-117,115,105,99,97,108,97,103,97,105,110,115,116,115,101,114,118,105,110,103,125,
-41,40,41,59,13,10,112,97,121,109,101,110,116,116,114,111,117,98,108,101,99,111,
-110,99,101,112,116,99,111,109,112,97,114,101,112,97,114,101,110,116,115,112,108,
-97,121,101,114,115,114,101,103,105,111,110,115,109,111,110,105,116,111,114,32,39
-,39,84,104,101,32,119,105,110,110,105,110,103,101,120,112,108,111,114,101,97,100
-,97,112,116,101,100,71,97,108,108,101,114,121,112,114,111,100,117,99,101,97,98,
-105,108,105,116,121,101,110,104,97,110,99,101,99,97,114,101,101,114,115,41,46,32
-,84,104,101,32,99,111,108,108,101,99,116,83,101,97,114,99,104,32,97,110,99,105,
-101,110,116,101,120,105,115,116,101,100,102,111,111,116,101,114,32,104,97,110,
-100,108,101,114,112,114,105,110,116,101,100,99,111,110,115,111,108,101,69,97,115
-,116,101,114,110,101,120,112,111,114,116,115,119,105,110,100,111,119,115,67,104,
-97,110,110,101,108,105,108,108,101,103,97,108,110,101,117,116,114,97,108,115,117
-,103,103,101,115,116,95,104,101,97,100,101,114,115,105,103,110,105,110,103,46,
-104,116,109,108,34,62,115,101,116,116,108,101,100,119,101,115,116,101,114,110,99
-,97,117,115,105,110,103,45,119,101,98,107,105,116,99,108,97,105,109,101,100,74,
-117,115,116,105,99,101,99,104,97,112,116,101,114,118,105,99,116,105,109,115,84,
-104,111,109,97,115,32,109,111,122,105,108,108,97,112,114,111,109,105,115,101,112
-,97,114,116,105,101,115,101,100,105,116,105,111,110,111,117,116,115,105,100,101,
-58,102,97,108,115,101,44,104,117,110,100,114,101,100,79,108,121,109,112,105,99,
-95,98,117,116,116,111,110,97,117,116,104,111,114,115,114,101,97,99,104,101,100,
-99,104,114,111,110,105,99,100,101,109,97,110,100,115,115,101,99,111,110,100,115,
-112,114,111,116,101,99,116,97,100,111,112,116,101,100,112,114,101,112,97,114,101
-,110,101,105,116,104,101,114,103,114,101,97,116,108,121,103,114,101,97,116,101,
-114,111,118,101,114,97,108,108,105,109,112,114,111,118,101,99,111,109,109,97,110
-,100,115,112,101,99,105,97,108,115,101,97,114,99,104,46,119,111,114,115,104,105,
-112,102,117,110,100,105,110,103,116,104,111,117,103,104,116,104,105,103,104,101,
-115,116,105,110,115,116,101,97,100,117,116,105,108,105,116,121,113,117,97,114,
-116,101,114,67,117,108,116,117,114,101,116,101,115,116,105,110,103,99,108,101,97
-,114,108,121,101,120,112,111,115,101,100,66,114,111,119,115,101,114,108,105,98,
-101,114,97,108,125,32,99,97,116,99,104,80,114,111,106,101,99,116,101,120,97,109,
-112,108,101,104,105,100,101,40,41,59,70,108,111,114,105,100,97,97,110,115,119,
-101,114,115,97,108,108,111,119,101,100,69,109,112,101,114,111,114,100,101,102,
-101,110,115,101,115,101,114,105,111,117,115,102,114,101,101,100,111,109,83,101,
-118,101,114,97,108,45,98,117,116,116,111,110,70,117,114,116,104,101,114,111,117,
-116,32,111,102,32,33,61,32,110,117,108,108,116,114,97,105,110,101,100,68,101,110
-,109,97,114,107,118,111,105,100,40,48,41,47,97,108,108,46,106,115,112,114,101,
-118,101,110,116,82,101,113,117,101,115,116,83,116,101,112,104,101,110,10,10,87,
-104,101,110,32,111,98,115,101,114,118,101,60,47,104,50,62,13,10,77,111,100,101,
-114,110,32,112,114,111,118,105,100,101,34,32,97,108,116,61,34,98,111,114,100,101
-,114,115,46,10,10,70,111,114,32,10,10,77,97,110,121,32,97,114,116,105,115,116,
-115,112,111,119,101,114,101,100,112,101,114,102,111,114,109,102,105,99,116,105,
-111,110,116,121,112,101,32,111,102,109,101,100,105,99,97,108,116,105,99,107,101,
-116,115,111,112,112,111,115,101,100,67,111,117,110,99,105,108,119,105,116,110,
-101,115,115,106,117,115,116,105,99,101,71,101,111,114,103,101,32,66,101,108,103,
-105,117,109,46,46,46,60,47,97,62,116,119,105,116,116,101,114,110,111,116,97,98,
-108,121,119,97,105,116,105,110,103,119,97,114,102,97,114,101,32,79,116,104,101,
-114,32,114,97,110,107,105,110,103,112,104,114,97,115,101,115,109,101,110,116,105
-,111,110,115,117,114,118,105,118,101,115,99,104,111,108,97,114,60,47,112,62,13,
-10,32,67,111,117,110,116,114,121,105,103,110,111,114,101,100,108,111,115,115,32,
-111,102,106,117,115,116,32,97,115,71,101,111,114,103,105,97,115,116,114,97,110,
-103,101,60,104,101,97,100,62,60,115,116,111,112,112,101,100,49,39,93,41,59,13,10
-,105,115,108,97,110,100,115,110,111,116,97,98,108,101,98,111,114,100,101,114,58,
-108,105,115,116,32,111,102,99,97,114,114,105,101,100,49,48,48,44,48,48,48,60,47,
-104,51,62,10,32,115,101,118,101,114,97,108,98,101,99,111,109,101,115,115,101,108
-,101,99,116,32,119,101,100,100,105,110,103,48,48,46,104,116,109,108,109,111,110,
-97,114,99,104,111,102,102,32,116,104,101,116,101,97,99,104,101,114,104,105,103,
-104,108,121,32,98,105,111,108,111,103,121,108,105,102,101,32,111,102,111,114,32,
-101,118,101,110,114,105,115,101,32,111,102,38,114,97,113,117,111,59,112,108,117,
-115,111,110,101,104,117,110,116,105,110,103,40,116,104,111,117,103,104,68,111,
-117,103,108,97,115,106,111,105,110,105,110,103,99,105,114,99,108,101,115,70,111,
-114,32,116,104,101,65,110,99,105,101,110,116,86,105,101,116,110,97,109,118,101,
-104,105,99,108,101,115,117,99,104,32,97,115,99,114,121,115,116,97,108,118,97,108
-,117,101,32,61,87,105,110,100,111,119,115,101,110,106,111,121,101,100,97,32,115,
-109,97,108,108,97,115,115,117,109,101,100,60,97,32,105,100,61,34,102,111,114,101
-,105,103,110,32,65,108,108,32,114,105,104,111,119,32,116,104,101,68,105,115,112,
-108,97,121,114,101,116,105,114,101,100,104,111,119,101,118,101,114,104,105,100,
-100,101,110,59,98,97,116,116,108,101,115,115,101,101,107,105,110,103,99,97,98,
-105,110,101,116,119,97,115,32,110,111,116,108,111,111,107,32,97,116,99,111,110,
-100,117,99,116,103,101,116,32,116,104,101,74,97,110,117,97,114,121,104,97,112,
-112,101,110,115,116,117,114,110,105,110,103,97,58,104,111,118,101,114,79,110,108
-,105,110,101,32,70,114,101,110,99,104,32,108,97,99,107,105,110,103,116,121,112,
-105,99,97,108,101,120,116,114,97,99,116,101,110,101,109,105,101,115,101,118,101,
-110,32,105,102,103,101,110,101,114,97,116,100,101,99,105,100,101,100,97,114,101,
-32,110,111,116,47,115,101,97,114,99,104,98,101,108,105,101,102,115,45,105,109,97
-,103,101,58,108,111,99,97,116,101,100,115,116,97,116,105,99,46,108,111,103,105,
-110,34,62,99,111,110,118,101,114,116,118,105,111,108,101,110,116,101,110,116,101
-,114,101,100,102,105,114,115,116,34,62,99,105,114,99,117,105,116,70,105,110,108,
-97,110,100,99,104,101,109,105,115,116,115,104,101,32,119,97,115,49,48,112,120,59
-,34,62,97,115,32,115,117,99,104,100,105,118,105,100,101,100,60,47,115,112,97,110
-,62,119,105,108,108,32,98,101,108,105,110,101,32,111,102,97,32,103,114,101,97,
-116,109,121,115,116,101,114,121,47,105,110,100,101,120,46,102,97,108,108,105,110
-,103,100,117,101,32,116,111,32,114,97,105,108,119,97,121,99,111,108,108,101,103,
-101,109,111,110,115,116,101,114,100,101,115,99,101,110,116,105,116,32,119,105,
-116,104,110,117,99,108,101,97,114,74,101,119,105,115,104,32,112,114,111,116,101,
-115,116,66,114,105,116,105,115,104,102,108,111,119,101,114,115,112,114,101,100,
-105,99,116,114,101,102,111,114,109,115,98,117,116,116,111,110,32,119,104,111,32,
-119,97,115,108,101,99,116,117,114,101,105,110,115,116,97,110,116,115,117,105,99,
-105,100,101,103,101,110,101,114,105,99,112,101,114,105,111,100,115,109,97,114,
-107,101,116,115,83,111,99,105,97,108,32,102,105,115,104,105,110,103,99,111,109,
-98,105,110,101,103,114,97,112,104,105,99,119,105,110,110,101,114,115,60,98,114,
-32,47,62,60,98,121,32,116,104,101,32,78,97,116,117,114,97,108,80,114,105,118,97,
-99,121,99,111,111,107,105,101,115,111,117,116,99,111,109,101,114,101,115,111,108
-,118,101,83,119,101,100,105,115,104,98,114,105,101,102,108,121,80,101,114,115,
-105,97,110,115,111,32,109,117,99,104,67,101,110,116,117,114,121,100,101,112,105,
-99,116,115,99,111,108,117,109,110,115,104,111,117,115,105,110,103,115,99,114,105
-,112,116,115,110,101,120,116,32,116,111,98,101,97,114,105,110,103,109,97,112,112
-,105,110,103,114,101,118,105,115,101,100,106,81,117,101,114,121,40,45,119,105,
-100,116,104,58,116,105,116,108,101,34,62,116,111,111,108,116,105,112,83,101,99,
-116,105,111,110,100,101,115,105,103,110,115,84,117,114,107,105,115,104,121,111,
-117,110,103,101,114,46,109,97,116,99,104,40,125,41,40,41,59,10,10,98,117,114,110
-,105,110,103,111,112,101,114,97,116,101,100,101,103,114,101,101,115,115,111,117,
-114,99,101,61,82,105,99,104,97,114,100,99,108,111,115,101,108,121,112,108,97,115
-,116,105,99,101,110,116,114,105,101,115,60,47,116,114,62,13,10,99,111,108,111,
-114,58,35,117,108,32,105,100,61,34,112,111,115,115,101,115,115,114,111,108,108,
-105,110,103,112,104,121,115,105,99,115,102,97,105,108,105,110,103,101,120,101,99
-,117,116,101,99,111,110,116,101,115,116,108,105,110,107,32,116,111,68,101,102,97
-,117,108,116,60,98,114,32,47,62,10,58,32,116,114,117,101,44,99,104,97,114,116,
-101,114,116,111,117,114,105,115,109,99,108,97,115,115,105,99,112,114,111,99,101,
-101,100,101,120,112,108,97,105,110,60,47,104,49,62,13,10,111,110,108,105,110,101
-,46,63,120,109,108,32,118,101,104,101,108,112,105,110,103,100,105,97,109,111,110
-,100,117,115,101,32,116,104,101,97,105,114,108,105,110,101,101,110,100,32,45,45,
-62,41,46,97,116,116,114,40,114,101,97,100,101,114,115,104,111,115,116,105,110,
-103,35,102,102,102,102,102,102,114,101,97,108,105,122,101,86,105,110,99,101,110,
-116,115,105,103,110,97,108,115,32,115,114,99,61,34,47,80,114,111,100,117,99,116,
-100,101,115,112,105,116,101,100,105,118,101,114,115,101,116,101,108,108,105,110,
-103,80,117,98,108,105,99,32,104,101,108,100,32,105,110,74,111,115,101,112,104,32
-,116,104,101,97,116,114,101,97,102,102,101,99,116,115,60,115,116,121,108,101,62,
-97,32,108,97,114,103,101,100,111,101,115,110,39,116,108,97,116,101,114,44,32,69,
-108,101,109,101,110,116,102,97,118,105,99,111,110,99,114,101,97,116,111,114,72,
-117,110,103,97,114,121,65,105,114,112,111,114,116,115,101,101,32,116,104,101,115
-,111,32,116,104,97,116,77,105,99,104,97,101,108,83,121,115,116,101,109,115,80,
-114,111,103,114,97,109,115,44,32,97,110,100,32,32,119,105,100,116,104,61,101,38,
-113,117,111,116,59,116,114,97,100,105,110,103,108,101,102,116,34,62,10,112,101,
-114,115,111,110,115,71,111,108,100,101,110,32,65,102,102,97,105,114,115,103,114,
-97,109,109,97,114,102,111,114,109,105,110,103,100,101,115,116,114,111,121,105,
-100,101,97,32,111,102,99,97,115,101,32,111,102,111,108,100,101,115,116,32,116,
-104,105,115,32,105,115,46,115,114,99,32,61,32,99,97,114,116,111,111,110,114,101,
-103,105,115,116,114,67,111,109,109,111,110,115,77,117,115,108,105,109,115,87,104
-,97,116,32,105,115,105,110,32,109,97,110,121,109,97,114,107,105,110,103,114,101,
-118,101,97,108,115,73,110,100,101,101,100,44,101,113,117,97,108,108,121,47,115,
-104,111,119,95,97,111,117,116,100,111,111,114,101,115,99,97,112,101,40,65,117,
-115,116,114,105,97,103,101,110,101,116,105,99,115,121,115,116,101,109,44,73,110,
-32,116,104,101,32,115,105,116,116,105,110,103,72,101,32,97,108,115,111,73,115,
-108,97,110,100,115,65,99,97,100,101,109,121,10,9,9,60,33,45,45,68,97,110,105,101
-,108,32,98,105,110,100,105,110,103,98,108,111,99,107,34,62,105,109,112,111,115,
-101,100,117,116,105,108,105,122,101,65,98,114,97,104,97,109,40,101,120,99,101,
-112,116,123,119,105,100,116,104,58,112,117,116,116,105,110,103,41,46,104,116,109
-,108,40,124,124,32,91,93,59,10,68,65,84,65,91,32,42,107,105,116,99,104,101,110,
-109,111,117,110,116,101,100,97,99,116,117,97,108,32,100,105,97,108,101,99,116,
-109,97,105,110,108,121,32,95,98,108,97,110,107,39,105,110,115,116,97,108,108,101
-,120,112,101,114,116,115,105,102,40,116,121,112,101,73,116,32,97,108,115,111,38,
-99,111,112,121,59,32,34,62,84,101,114,109,115,98,111,114,110,32,105,110,79,112,
-116,105,111,110,115,101,97,115,116,101,114,110,116,97,108,107,105,110,103,99,111
-,110,99,101,114,110,103,97,105,110,101,100,32,111,110,103,111,105,110,103,106,
-117,115,116,105,102,121,99,114,105,116,105,99,115,102,97,99,116,111,114,121,105,
-116,115,32,111,119,110,97,115,115,97,117,108,116,105,110,118,105,116,101,100,108
-,97,115,116,105,110,103,104,105,115,32,111,119,110,104,114,101,102,61,34,47,34,
-32,114,101,108,61,34,100,101,118,101,108,111,112,99,111,110,99,101,114,116,100,
-105,97,103,114,97,109,100,111,108,108,97,114,115,99,108,117,115,116,101,114,112,
-104,112,63,105,100,61,97,108,99,111,104,111,108,41,59,125,41,40,41,59,117,115,
-105,110,103,32,97,62,60,115,112,97,110,62,118,101,115,115,101,108,115,114,101,
-118,105,118,97,108,65,100,100,114,101,115,115,97,109,97,116,101,117,114,97,110,
-100,114,111,105,100,97,108,108,101,103,101,100,105,108,108,110,101,115,115,119,
-97,108,107,105,110,103,99,101,110,116,101,114,115,113,117,97,108,105,102,121,109
-,97,116,99,104,101,115,117,110,105,102,105,101,100,101,120,116,105,110,99,116,68
-,101,102,101,110,115,101,100,105,101,100,32,105,110,10,9,60,33,45,45,32,99,117,
-115,116,111,109,115,108,105,110,107,105,110,103,76,105,116,116,108,101,32,66,111
-,111,107,32,111,102,101,118,101,110,105,110,103,109,105,110,46,106,115,63,97,114
-,101,32,116,104,101,107,111,110,116,97,107,116,116,111,100,97,121,39,115,46,104,
-116,109,108,34,32,116,97,114,103,101,116,61,119,101,97,114,105,110,103,65,108,
-108,32,82,105,103,59,10,125,41,40,41,59,114,97,105,115,105,110,103,32,65,108,115
-,111,44,32,99,114,117,99,105,97,108,97,98,111,117,116,34,62,100,101,99,108,97,
-114,101,45,45,62,10,60,115,99,102,105,114,101,102,111,120,97,115,32,109,117,99,
-104,97,112,112,108,105,101,115,105,110,100,101,120,44,32,115,44,32,98,117,116,32
-,116,121,112,101,32,61,32,10,13,10,60,33,45,45,116,111,119,97,114,100,115,82,101
-,99,111,114,100,115,80,114,105,118,97,116,101,70,111,114,101,105,103,110,80,114,
-101,109,105,101,114,99,104,111,105,99,101,115,86,105,114,116,117,97,108,114,101,
-116,117,114,110,115,67,111,109,109,101,110,116,80,111,119,101,114,101,100,105,
-110,108,105,110,101,59,112,111,118,101,114,116,121,99,104,97,109,98,101,114,76,
-105,118,105,110,103,32,118,111,108,117,109,101,115,65,110,116,104,111,110,121,
-108,111,103,105,110,34,32,82,101,108,97,116,101,100,69,99,111,110,111,109,121,
-114,101,97,99,104,101,115,99,117,116,116,105,110,103,103,114,97,118,105,116,121,
-108,105,102,101,32,105,110,67,104,97,112,116,101,114,45,115,104,97,100,111,119,
-78,111,116,97,98,108,101,60,47,116,100,62,13,10,32,114,101,116,117,114,110,115,
-116,97,100,105,117,109,119,105,100,103,101,116,115,118,97,114,121,105,110,103,
-116,114,97,118,101,108,115,104,101,108,100,32,98,121,119,104,111,32,97,114,101,
-119,111,114,107,32,105,110,102,97,99,117,108,116,121,97,110,103,117,108,97,114,
-119,104,111,32,104,97,100,97,105,114,112,111,114,116,116,111,119,110,32,111,102,
-10,10,83,111,109,101,32,39,99,108,105,99,107,39,99,104,97,114,103,101,115,107,
-101,121,119,111,114,100,105,116,32,119,105,108,108,99,105,116,121,32,111,102,40,
-116,104,105,115,41,59,65,110,100,114,101,119,32,117,110,105,113,117,101,32,99,
-104,101,99,107,101,100,111,114,32,109,111,114,101,51,48,48,112,120,59,32,114,101
-,116,117,114,110,59,114,115,105,111,110,61,34,112,108,117,103,105,110,115,119,
-105,116,104,105,110,32,104,101,114,115,101,108,102,83,116,97,116,105,111,110,70,
-101,100,101,114,97,108,118,101,110,116,117,114,101,112,117,98,108,105,115,104,
-115,101,110,116,32,116,111,116,101,110,115,105,111,110,97,99,116,114,101,115,115
-,99,111,109,101,32,116,111,102,105,110,103,101,114,115,68,117,107,101,32,111,102
-,112,101,111,112,108,101,44,101,120,112,108,111,105,116,119,104,97,116,32,105,
-115,104,97,114,109,111,110,121,97,32,109,97,106,111,114,34,58,34,104,116,116,112
-,105,110,32,104,105,115,32,109,101,110,117,34,62,10,109,111,110,116,104,108,121,
-111,102,102,105,99,101,114,99,111,117,110,99,105,108,103,97,105,110,105,110,103,
-101,118,101,110,32,105,110,83,117,109,109,97,114,121,100,97,116,101,32,111,102,
-108,111,121,97,108,116,121,102,105,116,110,101,115,115,97,110,100,32,119,97,115,
-101,109,112,101,114,111,114,115,117,112,114,101,109,101,83,101,99,111,110,100,32
-,104,101,97,114,105,110,103,82,117,115,115,105,97,110,108,111,110,103,101,115,
-116,65,108,98,101,114,116,97,108,97,116,101,114,97,108,115,101,116,32,111,102,32
-,115,109,97,108,108,34,62,46,97,112,112,101,110,100,100,111,32,119,105,116,104,
-102,101,100,101,114,97,108,98,97,110,107,32,111,102,98,101,110,101,97,116,104,68
-,101,115,112,105,116,101,67,97,112,105,116,97,108,103,114,111,117,110,100,115,41
-,44,32,97,110,100,32,112,101,114,99,101,110,116,105,116,32,102,114,111,109,99,
-108,111,115,105,110,103,99,111,110,116,97,105,110,73,110,115,116,101,97,100,102,
-105,102,116,101,101,110,97,115,32,119,101,108,108,46,121,97,104,111,111,46,114,
-101,115,112,111,110,100,102,105,103,104,116,101,114,111,98,115,99,117,114,101,
-114,101,102,108,101,99,116,111,114,103,97,110,105,99,61,32,77,97,116,104,46,101,
-100,105,116,105,110,103,111,110,108,105,110,101,32,112,97,100,100,105,110,103,97
-,32,119,104,111,108,101,111,110,101,114,114,111,114,121,101,97,114,32,111,102,
-101,110,100,32,111,102,32,98,97,114,114,105,101,114,119,104,101,110,32,105,116,
-104,101,97,100,101,114,32,104,111,109,101,32,111,102,114,101,115,117,109,101,100
-,114,101,110,97,109,101,100,115,116,114,111,110,103,62,104,101,97,116,105,110,
-103,114,101,116,97,105,110,115,99,108,111,117,100,102,114,119,97,121,32,111,102,
-32,77,97,114,99,104,32,49,107,110,111,119,105,110,103,105,110,32,112,97,114,116,
-66,101,116,119,101,101,110,108,101,115,115,111,110,115,99,108,111,115,101,115,
-116,118,105,114,116,117,97,108,108,105,110,107,115,34,62,99,114,111,115,115,101,
-100,69,78,68,32,45,45,62,102,97,109,111,117,115,32,97,119,97,114,100,101,100,76,
-105,99,101,110,115,101,72,101,97,108,116,104,32,102,97,105,114,108,121,32,119,
-101,97,108,116,104,121,109,105,110,105,109,97,108,65,102,114,105,99,97,110,99,
-111,109,112,101,116,101,108,97,98,101,108,34,62,115,105,110,103,105,110,103,102,
-97,114,109,101,114,115,66,114,97,115,105,108,41,100,105,115,99,117,115,115,114,
-101,112,108,97,99,101,71,114,101,103,111,114,121,102,111,110,116,32,99,111,112,
-117,114,115,117,101,100,97,112,112,101,97,114,115,109,97,107,101,32,117,112,114,
-111,117,110,100,101,100,98,111,116,104,32,111,102,98,108,111,99,107,101,100,115,
-97,119,32,116,104,101,111,102,102,105,99,101,115,99,111,108,111,117,114,115,105,
-102,40,100,111,99,117,119,104,101,110,32,104,101,101,110,102,111,114,99,101,112,
-117,115,104,40,102,117,65,117,103,117,115,116,32,85,84,70,45,56,34,62,70,97,110,
-116,97,115,121,105,110,32,109,111,115,116,105,110,106,117,114,101,100,85,115,117
-,97,108,108,121,102,97,114,109,105,110,103,99,108,111,115,117,114,101,111,98,106
-,101,99,116,32,100,101,102,101,110,99,101,117,115,101,32,111,102,32,77,101,100,
-105,99,97,108,60,98,111,100,121,62,10,101,118,105,100,101,110,116,98,101,32,117,
-115,101,100,107,101,121,67,111,100,101,115,105,120,116,101,101,110,73,115,108,97
-,109,105,99,35,48,48,48,48,48,48,101,110,116,105,114,101,32,119,105,100,101,108,
-121,32,97,99,116,105,118,101,32,40,116,121,112,101,111,102,111,110,101,32,99,97,
-110,99,111,108,111,114,32,61,115,112,101,97,107,101,114,101,120,116,101,110,100,
-115,80,104,121,115,105,99,115,116,101,114,114,97,105,110,60,116,98,111,100,121,
-62,102,117,110,101,114,97,108,118,105,101,119,105,110,103,109,105,100,100,108,
-101,32,99,114,105,99,107,101,116,112,114,111,112,104,101,116,115,104,105,102,116
-,101,100,100,111,99,116,111,114,115,82,117,115,115,101,108,108,32,116,97,114,103
-,101,116,99,111,109,112,97,99,116,97,108,103,101,98,114,97,115,111,99,105,97,108
-,45,98,117,108,107,32,111,102,109,97,110,32,97,110,100,60,47,116,100,62,10,32,
-104,101,32,108,101,102,116,41,46,118,97,108,40,41,102,97,108,115,101,41,59,108,
-111,103,105,99,97,108,98,97,110,107,105,110,103,104,111,109,101,32,116,111,110,
-97,109,105,110,103,32,65,114,105,122,111,110,97,99,114,101,100,105,116,115,41,59
-,10,125,41,59,10,102,111,117,110,100,101,114,105,110,32,116,117,114,110,67,111,
-108,108,105,110,115,98,101,102,111,114,101,32,66,117,116,32,116,104,101,99,104,
-97,114,103,101,100,84,105,116,108,101,34,62,67,97,112,116,97,105,110,115,112,101
-,108,108,101,100,103,111,100,100,101,115,115,84,97,103,32,45,45,62,65,100,100,
-105,110,103,58,98,117,116,32,119,97,115,82,101,99,101,110,116,32,112,97,116,105,
-101,110,116,98,97,99,107,32,105,110,61,102,97,108,115,101,38,76,105,110,99,111,
-108,110,119,101,32,107,110,111,119,67,111,117,110,116,101,114,74,117,100,97,105,
-115,109,115,99,114,105,112,116,32,97,108,116,101,114,101,100,39,93,41,59,10,32,
-32,104,97,115,32,116,104,101,117,110,99,108,101,97,114,69,118,101,110,116,39,44,
-98,111,116,104,32,105,110,110,111,116,32,97,108,108,10,10,60,33,45,45,32,112,108
-,97,99,105,110,103,104,97,114,100,32,116,111,32,99,101,110,116,101,114,115,111,
-114,116,32,111,102,99,108,105,101,110,116,115,115,116,114,101,101,116,115,66,101
-,114,110,97,114,100,97,115,115,101,114,116,115,116,101,110,100,32,116,111,102,97
-,110,116,97,115,121,100,111,119,110,32,105,110,104,97,114,98,111,117,114,70,114,
-101,101,100,111,109,106,101,119,101,108,114,121,47,97,98,111,117,116,46,46,115,
-101,97,114,99,104,108,101,103,101,110,100,115,105,115,32,109,97,100,101,109,111,
-100,101,114,110,32,111,110,108,121,32,111,110,111,110,108,121,32,116,111,105,109
-,97,103,101,34,32,108,105,110,101,97,114,32,112,97,105,110,116,101,114,97,110,
-100,32,110,111,116,114,97,114,101,108,121,32,97,99,114,111,110,121,109,100,101,
-108,105,118,101,114,115,104,111,114,116,101,114,48,48,38,97,109,112,59,97,115,32
-,109,97,110,121,119,105,100,116,104,61,34,47,42,32,60,33,91,67,116,105,116,108,
-101,32,61,111,102,32,116,104,101,32,108,111,119,101,115,116,32,112,105,99,107,
-101,100,32,101,115,99,97,112,101,100,117,115,101,115,32,111,102,112,101,111,112,
-108,101,115,32,80,117,98,108,105,99,77,97,116,116,104,101,119,116,97,99,116,105,
-99,115,100,97,109,97,103,101,100,119,97,121,32,102,111,114,108,97,119,115,32,111
-,102,101,97,115,121,32,116,111,32,119,105,110,100,111,119,115,116,114,111,110,
-103,32,32,115,105,109,112,108,101,125,99,97,116,99,104,40,115,101,118,101,110,
-116,104,105,110,102,111,98,111,120,119,101,110,116,32,116,111,112,97,105,110,116
-,101,100,99,105,116,105,122,101,110,73,32,100,111,110,39,116,114,101,116,114,101
-,97,116,46,32,83,111,109,101,32,119,119,46,34,41,59,10,98,111,109,98,105,110,103
-,109,97,105,108,116,111,58,109,97,100,101,32,105,110,46,32,77,97,110,121,32,99,
-97,114,114,105,101,115,124,124,123,125,59,119,105,119,111,114,107,32,111,102,115
-,121,110,111,110,121,109,100,101,102,101,97,116,115,102,97,118,111,114,101,100,
-111,112,116,105,99,97,108,112,97,103,101,84,114,97,117,110,108,101,115,115,32,
-115,101,110,100,105,110,103,108,101,102,116,34,62,60,99,111,109,83,99,111,114,65
-,108,108,32,116,104,101,106,81,117,101,114,121,46,116,111,117,114,105,115,116,67
-,108,97,115,115,105,99,102,97,108,115,101,34,32,87,105,108,104,101,108,109,115,
-117,98,117,114,98,115,103,101,110,117,105,110,101,98,105,115,104,111,112,115,46,
-115,112,108,105,116,40,103,108,111,98,97,108,32,102,111,108,108,111,119,115,98,
-111,100,121,32,111,102,110,111,109,105,110,97,108,67,111,110,116,97,99,116,115,
-101,99,117,108,97,114,108,101,102,116,32,116,111,99,104,105,101,102,108,121,45,
-104,105,100,100,101,110,45,98,97,110,110,101,114,60,47,108,105,62,10,10,46,32,87
-,104,101,110,32,105,110,32,98,111,116,104,100,105,115,109,105,115,115,69,120,112
-,108,111,114,101,97,108,119,97,121,115,32,118,105,97,32,116,104,101,115,112,97,
-195,177,111,108,119,101,108,102,97,114,101,114,117,108,105,110,103,32,97,114,114
-,97,110,103,101,99,97,112,116,97,105,110,104,105,115,32,115,111,110,114,117,108,
-101,32,111,102,104,101,32,116,111,111,107,105,116,115,101,108,102,44,61,48,38,97
-,109,112,59,40,99,97,108,108,101,100,115,97,109,112,108,101,115,116,111,32,109,
-97,107,101,99,111,109,47,112,97,103,77,97,114,116,105,110,32,75,101,110,110,101,
-100,121,97,99,99,101,112,116,115,102,117,108,108,32,111,102,104,97,110,100,108,
-101,100,66,101,115,105,100,101,115,47,47,45,45,62,60,47,97,98,108,101,32,116,111
-,116,97,114,103,101,116,115,101,115,115,101,110,99,101,104,105,109,32,116,111,32
-,105,116,115,32,98,121,32,99,111,109,109,111,110,46,109,105,110,101,114,97,108,
-116,111,32,116,97,107,101,119,97,121,115,32,116,111,115,46,111,114,103,47,108,97
-,100,118,105,115,101,100,112,101,110,97,108,116,121,115,105,109,112,108,101,58,
-105,102,32,116,104,101,121,76,101,116,116,101,114,115,97,32,115,104,111,114,116,
-72,101,114,98,101,114,116,115,116,114,105,107,101,115,32,103,114,111,117,112,115
-,46,108,101,110,103,116,104,102,108,105,103,104,116,115,111,118,101,114,108,97,
-112,115,108,111,119,108,121,32,108,101,115,115,101,114,32,115,111,99,105,97,108,
-32,60,47,112,62,10,9,9,105,116,32,105,110,116,111,114,97,110,107,101,100,32,114,
-97,116,101,32,111,102,117,108,62,13,10,32,32,97,116,116,101,109,112,116,112,97,
-105,114,32,111,102,109,97,107,101,32,105,116,75,111,110,116,97,107,116,65,110,
-116,111,110,105,111,104,97,118,105,110,103,32,114,97,116,105,110,103,115,32,97,
-99,116,105,118,101,115,116,114,101,97,109,115,116,114,97,112,112,101,100,34,41,
-46,99,115,115,40,104,111,115,116,105,108,101,108,101,97,100,32,116,111,108,105,
-116,116,108,101,32,103,114,111,117,112,115,44,80,105,99,116,117,114,101,45,45,62
-,13,10,13,10,32,114,111,119,115,61,34,32,111,98,106,101,99,116,105,110,118,101,
-114,115,101,60,102,111,111,116,101,114,67,117,115,116,111,109,86,62,60,92,47,115
-,99,114,115,111,108,118,105,110,103,67,104,97,109,98,101,114,115,108,97,118,101,
-114,121,119,111,117,110,100,101,100,119,104,101,114,101,97,115,33,61,32,39,117,
-110,100,102,111,114,32,97,108,108,112,97,114,116,108,121,32,45,114,105,103,104,
-116,58,65,114,97,98,105,97,110,98,97,99,107,101,100,32,99,101,110,116,117,114,
-121,117,110,105,116,32,111,102,109,111,98,105,108,101,45,69,117,114,111,112,101,
-44,105,115,32,104,111,109,101,114,105,115,107,32,111,102,100,101,115,105,114,101
-,100,67,108,105,110,116,111,110,99,111,115,116,32,111,102,97,103,101,32,111,102,
-32,98,101,99,111,109,101,32,110,111,110,101,32,111,102,112,38,113,117,111,116,59
-,77,105,100,100,108,101,32,101,97,100,39,41,91,48,67,114,105,116,105,99,115,115,
-116,117,100,105,111,115,62,38,99,111,112,121,59,103,114,111,117,112,34,62,97,115
-,115,101,109,98,108,109,97,107,105,110,103,32,112,114,101,115,115,101,100,119,
-105,100,103,101,116,46,112,115,58,34,32,63,32,114,101,98,117,105,108,116,98,121,
-32,115,111,109,101,70,111,114,109,101,114,32,101,100,105,116,111,114,115,100,101
-,108,97,121,101,100,67,97,110,111,110,105,99,104,97,100,32,116,104,101,112,117,
-115,104,105,110,103,99,108,97,115,115,61,34,98,117,116,32,97,114,101,112,97,114,
-116,105,97,108,66,97,98,121,108,111,110,98,111,116,116,111,109,32,99,97,114,114,
-105,101,114,67,111,109,109,97,110,100,105,116,115,32,117,115,101,65,115,32,119,
-105,116,104,99,111,117,114,115,101,115,97,32,116,104,105,114,100,100,101,110,111
-,116,101,115,97,108,115,111,32,105,110,72,111,117,115,116,111,110,50,48,112,120,
-59,34,62,97,99,99,117,115,101,100,100,111,117,98,108,101,32,103,111,97,108,32,
-111,102,70,97,109,111,117,115,32,41,46,98,105,110,100,40,112,114,105,101,115,116
-,115,32,79,110,108,105,110,101,105,110,32,74,117,108,121,115,116,32,43,32,34,103
-,99,111,110,115,117,108,116,100,101,99,105,109,97,108,104,101,108,112,102,117,
-108,114,101,118,105,118,101,100,105,115,32,118,101,114,121,114,39,43,39,105,112,
-116,108,111,115,105,110,103,32,102,101,109,97,108,101,115,105,115,32,97,108,115,
-111,115,116,114,105,110,103,115,100,97,121,115,32,111,102,97,114,114,105,118,97,
-108,102,117,116,117,114,101,32,60,111,98,106,101,99,116,102,111,114,99,105,110,
-103,83,116,114,105,110,103,40,34,32,47,62,10,9,9,104,101,114,101,32,105,115,101,
-110,99,111,100,101,100,46,32,32,84,104,101,32,98,97,108,108,111,111,110,100,111,
-110,101,32,98,121,47,99,111,109,109,111,110,98,103,99,111,108,111,114,108,97,119
-,32,111,102,32,73,110,100,105,97,110,97,97,118,111,105,100,101,100,98,117,116,32
-,116,104,101,50,112,120,32,51,112,120,106,113,117,101,114,121,46,97,102,116,101,
-114,32,97,112,111,108,105,99,121,46,109,101,110,32,97,110,100,102,111,111,116,
-101,114,45,61,32,116,114,117,101,59,102,111,114,32,117,115,101,115,99,114,101,
-101,110,46,73,110,100,105,97,110,32,105,109,97,103,101,32,61,102,97,109,105,108,
-121,44,104,116,116,112,58,47,47,32,38,110,98,115,112,59,100,114,105,118,101,114,
-115,101,116,101,114,110,97,108,115,97,109,101,32,97,115,110,111,116,105,99,101,
-100,118,105,101,119,101,114,115,125,41,40,41,59,10,32,105,115,32,109,111,114,101
-,115,101,97,115,111,110,115,102,111,114,109,101,114,32,116,104,101,32,110,101,
-119,105,115,32,106,117,115,116,99,111,110,115,101,110,116,32,83,101,97,114,99,
-104,119,97,115,32,116,104,101,119,104,121,32,116,104,101,115,104,105,112,112,101
-,100,98,114,62,60,98,114,62,119,105,100,116,104,58,32,104,101,105,103,104,116,61
-,109,97,100,101,32,111,102,99,117,105,115,105,110,101,105,115,32,116,104,97,116,
-97,32,118,101,114,121,32,65,100,109,105,114,97,108,32,102,105,120,101,100,59,110
-,111,114,109,97,108,32,77,105,115,115,105,111,110,80,114,101,115,115,44,32,111,
-110,116,97,114,105,111,99,104,97,114,115,101,116,116,114,121,32,116,111,32,105,
-110,118,97,100,101,100,61,34,116,114,117,101,34,115,112,97,99,105,110,103,105,
-115,32,109,111,115,116,97,32,109,111,114,101,32,116,111,116,97,108,108,121,102,
-97,108,108,32,111,102,125,41,59,13,10,32,32,105,109,109,101,110,115,101,116,105,
-109,101,32,105,110,115,101,116,32,111,117,116,115,97,116,105,115,102,121,116,111
-,32,102,105,110,100,100,111,119,110,32,116,111,108,111,116,32,111,102,32,80,108,
-97,121,101,114,115,105,110,32,74,117,110,101,113,117,97,110,116,117,109,110,111,
-116,32,116,104,101,116,105,109,101,32,116,111,100,105,115,116,97,110,116,70,105,
-110,110,105,115,104,115,114,99,32,61,32,40,115,105,110,103,108,101,32,104,101,
-108,112,32,111,102,71,101,114,109,97,110,32,108,97,119,32,97,110,100,108,97,98,
-101,108,101,100,102,111,114,101,115,116,115,99,111,111,107,105,110,103,115,112,
-97,99,101,34,62,104,101,97,100,101,114,45,119,101,108,108,32,97,115,83,116,97,
-110,108,101,121,98,114,105,100,103,101,115,47,103,108,111,98,97,108,67,114,111,
-97,116,105,97,32,65,98,111,117,116,32,91,48,93,59,10,32,32,105,116,44,32,97,110,
-100,103,114,111,117,112,101,100,98,101,105,110,103,32,97,41,123,116,104,114,111,
-119,104,101,32,109,97,100,101,108,105,103,104,116,101,114,101,116,104,105,99,97,
-108,70,70,70,70,70,70,34,98,111,116,116,111,109,34,108,105,107,101,32,97,32,101,
-109,112,108,111,121,115,108,105,118,101,32,105,110,97,115,32,115,101,101,110,112
-,114,105,110,116,101,114,109,111,115,116,32,111,102,117,98,45,108,105,110,107,
-114,101,106,101,99,116,115,97,110,100,32,117,115,101,105,109,97,103,101,34,62,
-115,117,99,99,101,101,100,102,101,101,100,105,110,103,78,117,99,108,101,97,114,
-105,110,102,111,114,109,97,116,111,32,104,101,108,112,87,111,109,101,110,39,115,
-78,101,105,116,104,101,114,77,101,120,105,99,97,110,112,114,111,116,101,105,110,
-60,116,97,98,108,101,32,98,121,32,109,97,110,121,104,101,97,108,116,104,121,108,
-97,119,115,117,105,116,100,101,118,105,115,101,100,46,112,117,115,104,40,123,115
-,101,108,108,101,114,115,115,105,109,112,108,121,32,84,104,114,111,117,103,104,
-46,99,111,111,107,105,101,32,73,109,97,103,101,40,111,108,100,101,114,34,62,117,
-115,46,106,115,34,62,32,83,105,110,99,101,32,117,110,105,118,101,114,115,108,97,
-114,103,101,114,32,111,112,101,110,32,116,111,33,45,45,32,101,110,100,108,105,
-101,115,32,105,110,39,93,41,59,13,10,32,32,109,97,114,107,101,116,119,104,111,32
-,105,115,32,40,34,68,79,77,67,111,109,97,110,97,103,101,100,111,110,101,32,102,
-111,114,116,121,112,101,111,102,32,75,105,110,103,100,111,109,112,114,111,102,
-105,116,115,112,114,111,112,111,115,101,116,111,32,115,104,111,119,99,101,110,
-116,101,114,59,109,97,100,101,32,105,116,100,114,101,115,115,101,100,119,101,114
-,101,32,105,110,109,105,120,116,117,114,101,112,114,101,99,105,115,101,97,114,
-105,115,105,110,103,115,114,99,32,61,32,39,109,97,107,101,32,97,32,115,101,99,
-117,114,101,100,66,97,112,116,105,115,116,118,111,116,105,110,103,32,10,9,9,118,
-97,114,32,77,97,114,99,104,32,50,103,114,101,119,32,117,112,67,108,105,109,97,
-116,101,46,114,101,109,111,118,101,115,107,105,108,108,101,100,119,97,121,32,116
-,104,101,60,47,104,101,97,100,62,102,97,99,101,32,111,102,97,99,116,105,110,103,
-32,114,105,103,104,116,34,62,116,111,32,119,111,114,107,114,101,100,117,99,101,
-115,104,97,115,32,104,97,100,101,114,101,99,116,101,100,115,104,111,119,40,41,59
-,97,99,116,105,111,110,61,98,111,111,107,32,111,102,97,110,32,97,114,101,97,61,
-61,32,34,104,116,116,60,104,101,97,100,101,114,10,60,104,116,109,108,62,99,111,
-110,102,111,114,109,102,97,99,105,110,103,32,99,111,111,107,105,101,46,114,101,
-108,121,32,111,110,104,111,115,116,101,100,32,46,99,117,115,116,111,109,104,101,
-32,119,101,110,116,98,117,116,32,102,111,114,115,112,114,101,97,100,32,70,97,109
-,105,108,121,32,97,32,109,101,97,110,115,111,117,116,32,116,104,101,102,111,114,
-117,109,115,46,102,111,111,116,97,103,101,34,62,77,111,98,105,108,67,108,101,109
-,101,110,116,115,34,32,105,100,61,34,97,115,32,104,105,103,104,105,110,116,101,
-110,115,101,45,45,62,60,33,45,45,102,101,109,97,108,101,32,105,115,32,115,101,
-101,110,105,109,112,108,105,101,100,115,101,116,32,116,104,101,97,32,115,116,97,
-116,101,97,110,100,32,104,105,115,102,97,115,116,101,115,116,98,101,115,105,100,
-101,115,98,117,116,116,111,110,95,98,111,117,110,100,101,100,34,62,60,105,109,
-103,32,73,110,102,111,98,111,120,101,118,101,110,116,115,44,97,32,121,111,117,
-110,103,97,110,100,32,97,114,101,78,97,116,105,118,101,32,99,104,101,97,112,101,
-114,84,105,109,101,111,117,116,97,110,100,32,104,97,115,101,110,103,105,110,101,
-115,119,111,110,32,116,104,101,40,109,111,115,116,108,121,114,105,103,104,116,58
-,32,102,105,110,100,32,97,32,45,98,111,116,116,111,109,80,114,105,110,99,101,32,
-97,114,101,97,32,111,102,109,111,114,101,32,111,102,115,101,97,114,99,104,95,110
-,97,116,117,114,101,44,108,101,103,97,108,108,121,112,101,114,105,111,100,44,108
-,97,110,100,32,111,102,111,114,32,119,105,116,104,105,110,100,117,99,101,100,112
-,114,111,118,105,110,103,109,105,115,115,105,108,101,108,111,99,97,108,108,121,
-65,103,97,105,110,115,116,116,104,101,32,119,97,121,107,38,113,117,111,116,59,
-112,120,59,34,62,13,10,112,117,115,104,101,100,32,97,98,97,110,100,111,110,110,
-117,109,101,114,97,108,67,101,114,116,97,105,110,73,110,32,116,104,105,115,109,
-111,114,101,32,105,110,111,114,32,115,111,109,101,110,97,109,101,32,105,115,97,
-110,100,44,32,105,110,99,114,111,119,110,101,100,73,83,66,78,32,48,45,99,114,101
-,97,116,101,115,79,99,116,111,98,101,114,109,97,121,32,110,111,116,99,101,110,
-116,101,114,32,108,97,116,101,32,105,110,68,101,102,101,110,99,101,101,110,97,99
-,116,101,100,119,105,115,104,32,116,111,98,114,111,97,100,108,121,99,111,111,108
-,105,110,103,111,110,108,111,97,100,61,105,116,46,32,84,104,101,114,101,99,111,
-118,101,114,77,101,109,98,101,114,115,104,101,105,103,104,116,32,97,115,115,117,
-109,101,115,60,104,116,109,108,62,10,112,101,111,112,108,101,46,105,110,32,111,
-110,101,32,61,119,105,110,100,111,119,102,111,111,116,101,114,95,97,32,103,111,
-111,100,32,114,101,107,108,97,109,97,111,116,104,101,114,115,44,116,111,32,116,
-104,105,115,95,99,111,111,107,105,101,112,97,110,101,108,34,62,76,111,110,100,
-111,110,44,100,101,102,105,110,101,115,99,114,117,115,104,101,100,98,97,112,116,
-105,115,109,99,111,97,115,116,97,108,115,116,97,116,117,115,32,116,105,116,108,
-101,34,32,109,111,118,101,32,116,111,108,111,115,116,32,105,110,98,101,116,116,
-101,114,32,105,109,112,108,105,101,115,114,105,118,97,108,114,121,115,101,114,
-118,101,114,115,32,83,121,115,116,101,109,80,101,114,104,97,112,115,101,115,32,
-97,110,100,32,99,111,110,116,101,110,100,102,108,111,119,105,110,103,108,97,115,
-116,101,100,32,114,105,115,101,32,105,110,71,101,110,101,115,105,115,118,105,101
-,119,32,111,102,114,105,115,105,110,103,32,115,101,101,109,32,116,111,98,117,116
-,32,105,110,32,98,97,99,107,105,110,103,104,101,32,119,105,108,108,103,105,118,
-101,110,32,97,103,105,118,105,110,103,32,99,105,116,105,101,115,46,102,108,111,
-119,32,111,102,32,76,97,116,101,114,32,97,108,108,32,98,117,116,72,105,103,104,
-119,97,121,111,110,108,121,32,98,121,115,105,103,110,32,111,102,104,101,32,100,
-111,101,115,100,105,102,102,101,114,115,98,97,116,116,101,114,121,38,97,109,112,
-59,108,97,115,105,110,103,108,101,115,116,104,114,101,97,116,115,105,110,116,101
-,103,101,114,116,97,107,101,32,111,110,114,101,102,117,115,101,100,99,97,108,108
-,101,100,32,61,85,83,38,97,109,112,83,101,101,32,116,104,101,110,97,116,105,118,
-101,115,98,121,32,116,104,105,115,115,121,115,116,101,109,46,104,101,97,100,32,
-111,102,58,104,111,118,101,114,44,108,101,115,98,105,97,110,115,117,114,110,97,
-109,101,97,110,100,32,97,108,108,99,111,109,109,111,110,47,104,101,97,100,101,
-114,95,95,112,97,114,97,109,115,72,97,114,118,97,114,100,47,112,105,120,101,108,
-46,114,101,109,111,118,97,108,115,111,32,108,111,110,103,114,111,108,101,32,111,
-102,106,111,105,110,116,108,121,115,107,121,115,99,114,97,85,110,105,99,111,100,
-101,98,114,32,47,62,13,10,65,116,108,97,110,116,97,110,117,99,108,101,117,115,67
-,111,117,110,116,121,44,112,117,114,101,108,121,32,99,111,117,110,116,34,62,101,
-97,115,105,108,121,32,98,117,105,108,100,32,97,111,110,99,108,105,99,107,97,32,
-103,105,118,101,110,112,111,105,110,116,101,114,104,38,113,117,111,116,59,101,
-118,101,110,116,115,32,101,108,115,101,32,123,10,100,105,116,105,111,110,115,110
-,111,119,32,116,104,101,44,32,119,105,116,104,32,109,97,110,32,119,104,111,111,
-114,103,47,87,101,98,111,110,101,32,97,110,100,99,97,118,97,108,114,121,72,101,
-32,100,105,101,100,115,101,97,116,116,108,101,48,48,44,48,48,48,32,123,119,105,
-110,100,111,119,104,97,118,101,32,116,111,105,102,40,119,105,110,100,97,110,100,
-32,105,116,115,115,111,108,101,108,121,32,109,38,113,117,111,116,59,114,101,110,
-101,119,101,100,68,101,116,114,111,105,116,97,109,111,110,103,115,116,101,105,
-116,104,101,114,32,116,104,101,109,32,105,110,83,101,110,97,116,111,114,85,115,
-60,47,97,62,60,75,105,110,103,32,111,102,70,114,97,110,99,105,115,45,112,114,111
-,100,117,99,104,101,32,117,115,101,100,97,114,116,32,97,110,100,104,105,109,32,
-97,110,100,117,115,101,100,32,98,121,115,99,111,114,105,110,103,97,116,32,104,
-111,109,101,116,111,32,104,97,118,101,114,101,108,97,116,101,115,105,98,105,108,
-105,116,121,102,97,99,116,105,111,110,66,117,102,102,97,108,111,108,105,110,107,
-34,62,60,119,104,97,116,32,104,101,102,114,101,101,32,116,111,67,105,116,121,32,
-111,102,99,111,109,101,32,105,110,115,101,99,116,111,114,115,99,111,117,110,116,
-101,100,111,110,101,32,100,97,121,110,101,114,118,111,117,115,115,113,117,97,114
-,101,32,125,59,105,102,40,103,111,105,110,32,119,104,97,116,105,109,103,34,32,97
-,108,105,115,32,111,110,108,121,115,101,97,114,99,104,47,116,117,101,115,100,97,
-121,108,111,111,115,101,108,121,83,111,108,111,109,111,110,115,101,120,117,97,
-108,32,45,32,60,97,32,104,114,109,101,100,105,117,109,34,68,79,32,78,79,84,32,70
-,114,97,110,99,101,44,119,105,116,104,32,97,32,119,97,114,32,97,110,100,115,101,
-99,111,110,100,32,116,97,107,101,32,97,32,62,13,10,13,10,13,10,109,97,114,107,
-101,116,46,104,105,103,104,119,97,121,100,111,110,101,32,105,110,99,116,105,118,
-105,116,121,34,108,97,115,116,34,62,111,98,108,105,103,101,100,114,105,115,101,
-32,116,111,34,117,110,100,101,102,105,109,97,100,101,32,116,111,32,69,97,114,108
-,121,32,112,114,97,105,115,101,100,105,110,32,105,116,115,32,102,111,114,32,104,
-105,115,97,116,104,108,101,116,101,74,117,112,105,116,101,114,89,97,104,111,111,
-33,32,116,101,114,109,101,100,32,115,111,32,109,97,110,121,114,101,97,108,108,
-121,32,115,46,32,84,104,101,32,97,32,119,111,109,97,110,63,118,97,108,117,101,61
-,100,105,114,101,99,116,32,114,105,103,104,116,34,32,98,105,99,121,99,108,101,97
-,99,105,110,103,61,34,100,97,121,32,97,110,100,115,116,97,116,105,110,103,82,97,
-116,104,101,114,44,104,105,103,104,101,114,32,79,102,102,105,99,101,32,97,114,
-101,32,110,111,119,116,105,109,101,115,44,32,119,104,101,110,32,97,32,112,97,121
-,32,102,111,114,111,110,32,116,104,105,115,45,108,105,110,107,34,62,59,98,111,
-114,100,101,114,97,114,111,117,110,100,32,97,110,110,117,97,108,32,116,104,101,
-32,78,101,119,112,117,116,32,116,104,101,46,99,111,109,34,32,116,97,107,105,110,
-32,116,111,97,32,98,114,105,101,102,40,105,110,32,116,104,101,103,114,111,117,
-112,115,46,59,32,119,105,100,116,104,101,110,122,121,109,101,115,115,105,109,112
-,108,101,32,105,110,32,108,97,116,101,123,114,101,116,117,114,110,116,104,101,
-114,97,112,121,97,32,112,111,105,110,116,98,97,110,110,105,110,103,105,110,107,
-115,34,62,10,40,41,59,34,32,114,101,97,32,112,108,97,99,101,92,117,48,48,51,67,
-97,97,98,111,117,116,32,97,116,114,62,13,10,9,9,99,99,111,117,110,116,32,103,105
-,118,101,115,32,97,60,83,67,82,73,80,84,82,97,105,108,119,97,121,116,104,101,109
-,101,115,47,116,111,111,108,98,111,120,66,121,73,100,40,34,120,104,117,109,97,
-110,115,44,119,97,116,99,104,101,115,105,110,32,115,111,109,101,32,105,102,32,40
-,119,105,99,111,109,105,110,103,32,102,111,114,109,97,116,115,32,85,110,100,101,
-114,32,98,117,116,32,104,97,115,104,97,110,100,101,100,32,109,97,100,101,32,98,
-121,116,104,97,110,32,105,110,102,101,97,114,32,111,102,100,101,110,111,116,101,
-100,47,105,102,114,97,109,101,108,101,102,116,32,105,110,118,111,108,116,97,103,
-101,105,110,32,101,97,99,104,97,38,113,117,111,116,59,98,97,115,101,32,111,102,
-73,110,32,109,97,110,121,117,110,100,101,114,103,111,114,101,103,105,109,101,115
-,97,99,116,105,111,110,32,60,47,112,62,13,10,60,117,115,116,111,109,86,97,59,38,
-103,116,59,60,47,105,109,112,111,114,116,115,111,114,32,116,104,97,116,109,111,
-115,116,108,121,32,38,97,109,112,59,114,101,32,115,105,122,101,61,34,60,47,97,62
-,60,47,104,97,32,99,108,97,115,115,112,97,115,115,105,118,101,72,111,115,116,32,
-61,32,87,104,101,116,104,101,114,102,101,114,116,105,108,101,86,97,114,105,111,
-117,115,61,91,93,59,40,102,117,99,97,109,101,114,97,115,47,62,60,47,116,100,62,
-97,99,116,115,32,97,115,73,110,32,115,111,109,101,62,13,10,13,10,60,33,111,114,
-103,97,110,105,115,32,60,98,114,32,47,62,66,101,105,106,105,110,103,99,97,116,97
-,108,195,160,100,101,117,116,115,99,104,101,117,114,111,112,101,117,101,117,115,
-107,97,114,97,103,97,101,105,108,103,101,115,118,101,110,115,107,97,101,115,112,
-97,195,177,97,109,101,110,115,97,106,101,117,115,117,97,114,105,111,116,114,97,
-98,97,106,111,109,195,169,120,105,99,111,112,195,161,103,105,110,97,115,105,101,
-109,112,114,101,115,105,115,116,101,109,97,111,99,116,117,98,114,101,100,117,114
-,97,110,116,101,97,195,177,97,100,105,114,101,109,112,114,101,115,97,109,111,109
-,101,110,116,111,110,117,101,115,116,114,111,112,114,105,109,101,114,97,116,114,
-97,118,195,169,115,103,114,97,99,105,97,115,110,117,101,115,116,114,97,112,114,
-111,99,101,115,111,101,115,116,97,100,111,115,99,97,108,105,100,97,100,112,101,
-114,115,111,110,97,110,195,186,109,101,114,111,97,99,117,101,114,100,111,109,195
-,186,115,105,99,97,109,105,101,109,98,114,111,111,102,101,114,116,97,115,97,108,
-103,117,110,111,115,112,97,195,173,115,101,115,101,106,101,109,112,108,111,100,
-101,114,101,99,104,111,97,100,101,109,195,161,115,112,114,105,118,97,100,111,97,
-103,114,101,103,97,114,101,110,108,97,99,101,115,112,111,115,105,98,108,101,104,
-111,116,101,108,101,115,115,101,118,105,108,108,97,112,114,105,109,101,114,111,
-195,186,108,116,105,109,111,101,118,101,110,116,111,115,97,114,99,104,105,118,
-111,99,117,108,116,117,114,97,109,117,106,101,114,101,115,101,110,116,114,97,100
-,97,97,110,117,110,99,105,111,101,109,98,97,114,103,111,109,101,114,99,97,100,
-111,103,114,97,110,100,101,115,101,115,116,117,100,105,111,109,101,106,111,114,
-101,115,102,101,98,114,101,114,111,100,105,115,101,195,177,111,116,117,114,105,
-115,109,111,99,195,179,100,105,103,111,112,111,114,116,97,100,97,101,115,112,97,
-99,105,111,102,97,109,105,108,105,97,97,110,116,111,110,105,111,112,101,114,109,
-105,116,101,103,117,97,114,100,97,114,97,108,103,117,110,97,115,112,114,101,99,
-105,111,115,97,108,103,117,105,101,110,115,101,110,116,105,100,111,118,105,115,
-105,116,97,115,116,195,173,116,117,108,111,99,111,110,111,99,101,114,115,101,103
-,117,110,100,111,99,111,110,115,101,106,111,102,114,97,110,99,105,97,109,105,110
-,117,116,111,115,115,101,103,117,110,100,97,116,101,110,101,109,111,115,101,102,
-101,99,116,111,115,109,195,161,108,97,103,97,115,101,115,105,195,179,110,114,101
-,118,105,115,116,97,103,114,97,110,97,100,97,99,111,109,112,114,97,114,105,110,
-103,114,101,115,111,103,97,114,99,195,173,97,97,99,99,105,195,179,110,101,99,117
-,97,100,111,114,113,117,105,101,110,101,115,105,110,99,108,117,115,111,100,101,
-98,101,114,195,161,109,97,116,101,114,105,97,104,111,109,98,114,101,115,109,117,
-101,115,116,114,97,112,111,100,114,195,173,97,109,97,195,177,97,110,97,195,186,
-108,116,105,109,97,101,115,116,97,109,111,115,111,102,105,99,105,97,108,116,97,
-109,98,105,101,110,110,105,110,103,195,186,110,115,97,108,117,100,111,115,112,
-111,100,101,109,111,115,109,101,106,111,114,97,114,112,111,115,105,116,105,111,
-110,98,117,115,105,110,101,115,115,104,111,109,101,112,97,103,101,115,101,99,117
-,114,105,116,121,108,97,110,103,117,97,103,101,115,116,97,110,100,97,114,100,99,
-97,109,112,97,105,103,110,102,101,97,116,117,114,101,115,99,97,116,101,103,111,
-114,121,101,120,116,101,114,110,97,108,99,104,105,108,100,114,101,110,114,101,
-115,101,114,118,101,100,114,101,115,101,97,114,99,104,101,120,99,104,97,110,103,
-101,102,97,118,111,114,105,116,101,116,101,109,112,108,97,116,101,109,105,108,
-105,116,97,114,121,105,110,100,117,115,116,114,121,115,101,114,118,105,99,101,
-115,109,97,116,101,114,105,97,108,112,114,111,100,117,99,116,115,122,45,105,110,
-100,101,120,58,99,111,109,109,101,110,116,115,115,111,102,116,119,97,114,101,99,
-111,109,112,108,101,116,101,99,97,108,101,110,100,97,114,112,108,97,116,102,111,
-114,109,97,114,116,105,99,108,101,115,114,101,113,117,105,114,101,100,109,111,
-118,101,109,101,110,116,113,117,101,115,116,105,111,110,98,117,105,108,100,105,
-110,103,112,111,108,105,116,105,99,115,112,111,115,115,105,98,108,101,114,101,
-108,105,103,105,111,110,112,104,121,115,105,99,97,108,102,101,101,100,98,97,99,
-107,114,101,103,105,115,116,101,114,112,105,99,116,117,114,101,115,100,105,115,
-97,98,108,101,100,112,114,111,116,111,99,111,108,97,117,100,105,101,110,99,101,
-115,101,116,116,105,110,103,115,97,99,116,105,118,105,116,121,101,108,101,109,
-101,110,116,115,108,101,97,114,110,105,110,103,97,110,121,116,104,105,110,103,97
-,98,115,116,114,97,99,116,112,114,111,103,114,101,115,115,111,118,101,114,118,
-105,101,119,109,97,103,97,122,105,110,101,101,99,111,110,111,109,105,99,116,114,
-97,105,110,105,110,103,112,114,101,115,115,117,114,101,118,97,114,105,111,117,
-115,32,60,115,116,114,111,110,103,62,112,114,111,112,101,114,116,121,115,104,111
-,112,112,105,110,103,116,111,103,101,116,104,101,114,97,100,118,97,110,99,101,
-100,98,101,104,97,118,105,111,114,100,111,119,110,108,111,97,100,102,101,97,116,
-117,114,101,100,102,111,111,116,98,97,108,108,115,101,108,101,99,116,101,100,76,
-97,110,103,117,97,103,101,100,105,115,116,97,110,99,101,114,101,109,101,109,98,
-101,114,116,114,97,99,107,105,110,103,112,97,115,115,119,111,114,100,109,111,100
-,105,102,105,101,100,115,116,117,100,101,110,116,115,100,105,114,101,99,116,108,
-121,102,105,103,104,116,105,110,103,110,111,114,116,104,101,114,110,100,97,116,
-97,98,97,115,101,102,101,115,116,105,118,97,108,98,114,101,97,107,105,110,103,
-108,111,99,97,116,105,111,110,105,110,116,101,114,110,101,116,100,114,111,112,
-100,111,119,110,112,114,97,99,116,105,99,101,101,118,105,100,101,110,99,101,102,
-117,110,99,116,105,111,110,109,97,114,114,105,97,103,101,114,101,115,112,111,110
-,115,101,112,114,111,98,108,101,109,115,110,101,103,97,116,105,118,101,112,114,
-111,103,114,97,109,115,97,110,97,108,121,115,105,115,114,101,108,101,97,115,101,
-100,98,97,110,110,101,114,34,62,112,117,114,99,104,97,115,101,112,111,108,105,99
-,105,101,115,114,101,103,105,111,110,97,108,99,114,101,97,116,105,118,101,97,114
-,103,117,109,101,110,116,98,111,111,107,109,97,114,107,114,101,102,101,114,114,
-101,114,99,104,101,109,105,99,97,108,100,105,118,105,115,105,111,110,99,97,108,
-108,98,97,99,107,115,101,112,97,114,97,116,101,112,114,111,106,101,99,116,115,99
-,111,110,102,108,105,99,116,104,97,114,100,119,97,114,101,105,110,116,101,114,
-101,115,116,100,101,108,105,118,101,114,121,109,111,117,110,116,97,105,110,111,
-98,116,97,105,110,101,100,61,32,102,97,108,115,101,59,102,111,114,40,118,97,114,
-32,97,99,99,101,112,116,101,100,99,97,112,97,99,105,116,121,99,111,109,112,117,
-116,101,114,105,100,101,110,116,105,116,121,97,105,114,99,114,97,102,116,101,109
-,112,108,111,121,101,100,112,114,111,112,111,115,101,100,100,111,109,101,115,116
-,105,99,105,110,99,108,117,100,101,115,112,114,111,118,105,100,101,100,104,111,
-115,112,105,116,97,108,118,101,114,116,105,99,97,108,99,111,108,108,97,112,115,
-101,97,112,112,114,111,97,99,104,112,97,114,116,110,101,114,115,108,111,103,111,
-34,62,60,97,100,97,117,103,104,116,101,114,97,117,116,104,111,114,34,32,99,117,
-108,116,117,114,97,108,102,97,109,105,108,105,101,115,47,105,109,97,103,101,115,
-47,97,115,115,101,109,98,108,121,112,111,119,101,114,102,117,108,116,101,97,99,
-104,105,110,103,102,105,110,105,115,104,101,100,100,105,115,116,114,105,99,116,
-99,114,105,116,105,99,97,108,99,103,105,45,98,105,110,47,112,117,114,112,111,115
-,101,115,114,101,113,117,105,114,101,115,101,108,101,99,116,105,111,110,98,101,
-99,111,109,105,110,103,112,114,111,118,105,100,101,115,97,99,97,100,101,109,105,
-99,101,120,101,114,99,105,115,101,97,99,116,117,97,108,108,121,109,101,100,105,
-99,105,110,101,99,111,110,115,116,97,110,116,97,99,99,105,100,101,110,116,77,97,
-103,97,122,105,110,101,100,111,99,117,109,101,110,116,115,116,97,114,116,105,110
-,103,98,111,116,116,111,109,34,62,111,98,115,101,114,118,101,100,58,32,38,113,
-117,111,116,59,101,120,116,101,110,100,101,100,112,114,101,118,105,111,117,115,
-83,111,102,116,119,97,114,101,99,117,115,116,111,109,101,114,100,101,99,105,115,
-105,111,110,115,116,114,101,110,103,116,104,100,101,116,97,105,108,101,100,115,
-108,105,103,104,116,108,121,112,108,97,110,110,105,110,103,116,101,120,116,97,
-114,101,97,99,117,114,114,101,110,99,121,101,118,101,114,121,111,110,101,115,116
-,114,97,105,103,104,116,116,114,97,110,115,102,101,114,112,111,115,105,116,105,
-118,101,112,114,111,100,117,99,101,100,104,101,114,105,116,97,103,101,115,104,
-105,112,112,105,110,103,97,98,115,111,108,117,116,101,114,101,99,101,105,118,101
-,100,114,101,108,101,118,97,110,116,98,117,116,116,111,110,34,32,118,105,111,108
-,101,110,99,101,97,110,121,119,104,101,114,101,98,101,110,101,102,105,116,115,
-108,97,117,110,99,104,101,100,114,101,99,101,110,116,108,121,97,108,108,105,97,
-110,99,101,102,111,108,108,111,119,101,100,109,117,108,116,105,112,108,101,98,
-117,108,108,101,116,105,110,105,110,99,108,117,100,101,100,111,99,99,117,114,114
-,101,100,105,110,116,101,114,110,97,108,36,40,116,104,105,115,41,46,114,101,112,
-117,98,108,105,99,62,60,116,114,62,60,116,100,99,111,110,103,114,101,115,115,114
-,101,99,111,114,100,101,100,117,108,116,105,109,97,116,101,115,111,108,117,116,
-105,111,110,60,117,108,32,105,100,61,34,100,105,115,99,111,118,101,114,72,111,
-109,101,60,47,97,62,119,101,98,115,105,116,101,115,110,101,116,119,111,114,107,
-115,97,108,116,104,111,117,103,104,101,110,116,105,114,101,108,121,109,101,109,
-111,114,105,97,108,109,101,115,115,97,103,101,115,99,111,110,116,105,110,117,101
-,97,99,116,105,118,101,34,62,115,111,109,101,119,104,97,116,118,105,99,116,111,
-114,105,97,87,101,115,116,101,114,110,32,32,116,105,116,108,101,61,34,76,111,99,
-97,116,105,111,110,99,111,110,116,114,97,99,116,118,105,115,105,116,111,114,115,
-68,111,119,110,108,111,97,100,119,105,116,104,111,117,116,32,114,105,103,104,116
-,34,62,10,109,101,97,115,117,114,101,115,119,105,100,116,104,32,61,32,118,97,114
-,105,97,98,108,101,105,110,118,111,108,118,101,100,118,105,114,103,105,110,105,
-97,110,111,114,109,97,108,108,121,104,97,112,112,101,110,101,100,97,99,99,111,
-117,110,116,115,115,116,97,110,100,105,110,103,110,97,116,105,111,110,97,108,82,
-101,103,105,115,116,101,114,112,114,101,112,97,114,101,100,99,111,110,116,114,
-111,108,115,97,99,99,117,114,97,116,101,98,105,114,116,104,100,97,121,115,116,
-114,97,116,101,103,121,111,102,102,105,99,105,97,108,103,114,97,112,104,105,99,
-115,99,114,105,109,105,110,97,108,112,111,115,115,105,98,108,121,99,111,110,115,
-117,109,101,114,80,101,114,115,111,110,97,108,115,112,101,97,107,105,110,103,118
-,97,108,105,100,97,116,101,97,99,104,105,101,118,101,100,46,106,112,103,34,32,47
-,62,109,97,99,104,105,110,101,115,60,47,104,50,62,10,32,32,107,101,121,119,111,
-114,100,115,102,114,105,101,110,100,108,121,98,114,111,116,104,101,114,115,99,
-111,109,98,105,110,101,100,111,114,105,103,105,110,97,108,99,111,109,112,111,115
-,101,100,101,120,112,101,99,116,101,100,97,100,101,113,117,97,116,101,112,97,107
-,105,115,116,97,110,102,111,108,108,111,119,34,32,118,97,108,117,97,98,108,101,
-60,47,108,97,98,101,108,62,114,101,108,97,116,105,118,101,98,114,105,110,103,105
-,110,103,105,110,99,114,101,97,115,101,103,111,118,101,114,110,111,114,112,108,
-117,103,105,110,115,47,76,105,115,116,32,111,102,32,72,101,97,100,101,114,34,62,
-34,32,110,97,109,101,61,34,32,40,38,113,117,111,116,59,103,114,97,100,117,97,116
-,101,60,47,104,101,97,100,62,10,99,111,109,109,101,114,99,101,109,97,108,97,121,
-115,105,97,100,105,114,101,99,116,111,114,109,97,105,110,116,97,105,110,59,104,
-101,105,103,104,116,58,115,99,104,101,100,117,108,101,99,104,97,110,103,105,110,
-103,98,97,99,107,32,116,111,32,99,97,116,104,111,108,105,99,112,97,116,116,101,
-114,110,115,99,111,108,111,114,58,32,35,103,114,101,97,116,101,115,116,115,117,
-112,112,108,105,101,115,114,101,108,105,97,98,108,101,60,47,117,108,62,10,9,9,60
-,115,101,108,101,99,116,32,99,105,116,105,122,101,110,115,99,108,111,116,104,105
-,110,103,119,97,116,99,104,105,110,103,60,108,105,32,105,100,61,34,115,112,101,
-99,105,102,105,99,99,97,114,114,121,105,110,103,115,101,110,116,101,110,99,101,
-60,99,101,110,116,101,114,62,99,111,110,116,114,97,115,116,116,104,105,110,107,
-105,110,103,99,97,116,99,104,40,101,41,115,111,117,116,104,101,114,110,77,105,99
-,104,97,101,108,32,109,101,114,99,104,97,110,116,99,97,114,111,117,115,101,108,
-112,97,100,100,105,110,103,58,105,110,116,101,114,105,111,114,46,115,112,108,105
-,116,40,34,108,105,122,97,116,105,111,110,79,99,116,111,98,101,114,32,41,123,114
-,101,116,117,114,110,105,109,112,114,111,118,101,100,45,45,38,103,116,59,10,10,
-99,111,118,101,114,97,103,101,99,104,97,105,114,109,97,110,46,112,110,103,34,32,
-47,62,115,117,98,106,101,99,116,115,82,105,99,104,97,114,100,32,119,104,97,116,
-101,118,101,114,112,114,111,98,97,98,108,121,114,101,99,111,118,101,114,121,98,
-97,115,101,98,97,108,108,106,117,100,103,109,101,110,116,99,111,110,110,101,99,
-116,46,46,99,115,115,34,32,47,62,32,119,101,98,115,105,116,101,114,101,112,111,
-114,116,101,100,100,101,102,97,117,108,116,34,47,62,60,47,97,62,13,10,101,108,
-101,99,116,114,105,99,115,99,111,116,108,97,110,100,99,114,101,97,116,105,111,
-110,113,117,97,110,116,105,116,121,46,32,73,83,66,78,32,48,100,105,100,32,110,
-111,116,32,105,110,115,116,97,110,99,101,45,115,101,97,114,99,104,45,34,32,108,
-97,110,103,61,34,115,112,101,97,107,101,114,115,67,111,109,112,117,116,101,114,
-99,111,110,116,97,105,110,115,97,114,99,104,105,118,101,115,109,105,110,105,115,
-116,101,114,114,101,97,99,116,105,111,110,100,105,115,99,111,117,110,116,73,116,
-97,108,105,97,110,111,99,114,105,116,101,114,105,97,115,116,114,111,110,103,108,
-121,58,32,39,104,116,116,112,58,39,115,99,114,105,112,116,39,99,111,118,101,114,
-105,110,103,111,102,102,101,114,105,110,103,97,112,112,101,97,114,101,100,66,114
-,105,116,105,115,104,32,105,100,101,110,116,105,102,121,70,97,99,101,98,111,111,
-107,110,117,109,101,114,111,117,115,118,101,104,105,99,108,101,115,99,111,110,99
-,101,114,110,115,65,109,101,114,105,99,97,110,104,97,110,100,108,105,110,103,100
-,105,118,32,105,100,61,34,87,105,108,108,105,97,109,32,112,114,111,118,105,100,
-101,114,95,99,111,110,116,101,110,116,97,99,99,117,114,97,99,121,115,101,99,116,
-105,111,110,32,97,110,100,101,114,115,111,110,102,108,101,120,105,98,108,101,67,
-97,116,101,103,111,114,121,108,97,119,114,101,110,99,101,60,115,99,114,105,112,
-116,62,108,97,121,111,117,116,61,34,97,112,112,114,111,118,101,100,32,109,97,120
-,105,109,117,109,104,101,97,100,101,114,34,62,60,47,116,97,98,108,101,62,83,101,
-114,118,105,99,101,115,104,97,109,105,108,116,111,110,99,117,114,114,101,110,116
-,32,99,97,110,97,100,105,97,110,99,104,97,110,110,101,108,115,47,116,104,101,109
-,101,115,47,47,97,114,116,105,99,108,101,111,112,116,105,111,110,97,108,112,111,
-114,116,117,103,97,108,118,97,108,117,101,61,34,34,105,110,116,101,114,118,97,
-108,119,105,114,101,108,101,115,115,101,110,116,105,116,108,101,100,97,103,101,
-110,99,105,101,115,83,101,97,114,99,104,34,32,109,101,97,115,117,114,101,100,116
-,104,111,117,115,97,110,100,115,112,101,110,100,105,110,103,38,104,101,108,108,
-105,112,59,110,101,119,32,68,97,116,101,34,32,115,105,122,101,61,34,112,97,103,
-101,78,97,109,101,109,105,100,100,108,101,34,32,34,32,47,62,60,47,97,62,104,105,
-100,100,101,110,34,62,115,101,113,117,101,110,99,101,112,101,114,115,111,110,97,
-108,111,118,101,114,102,108,111,119,111,112,105,110,105,111,110,115,105,108,108,
-105,110,111,105,115,108,105,110,107,115,34,62,10,9,60,116,105,116,108,101,62,118
-,101,114,115,105,111,110,115,115,97,116,117,114,100,97,121,116,101,114,109,105,
-110,97,108,105,116,101,109,112,114,111,112,101,110,103,105,110,101,101,114,115,
-101,99,116,105,111,110,115,100,101,115,105,103,110,101,114,112,114,111,112,111,
-115,97,108,61,34,102,97,108,115,101,34,69,115,112,97,195,177,111,108,114,101,108
-,101,97,115,101,115,115,117,98,109,105,116,34,32,101,114,38,113,117,111,116,59,
-97,100,100,105,116,105,111,110,115,121,109,112,116,111,109,115,111,114,105,101,
-110,116,101,100,114,101,115,111,117,114,99,101,114,105,103,104,116,34,62,60,112,
-108,101,97,115,117,114,101,115,116,97,116,105,111,110,115,104,105,115,116,111,
-114,121,46,108,101,97,118,105,110,103,32,32,98,111,114,100,101,114,61,99,111,110
-,116,101,110,116,115,99,101,110,116,101,114,34,62,46,10,10,83,111,109,101,32,100
-,105,114,101,99,116,101,100,115,117,105,116,97,98,108,101,98,117,108,103,97,114,
-105,97,46,115,104,111,119,40,41,59,100,101,115,105,103,110,101,100,71,101,110,
-101,114,97,108,32,99,111,110,99,101,112,116,115,69,120,97,109,112,108,101,115,
-119,105,108,108,105,97,109,115,79,114,105,103,105,110,97,108,34,62,60,115,112,97
-,110,62,115,101,97,114,99,104,34,62,111,112,101,114,97,116,111,114,114,101,113,
-117,101,115,116,115,97,32,38,113,117,111,116,59,97,108,108,111,119,105,110,103,
-68,111,99,117,109,101,110,116,114,101,118,105,115,105,111,110,46,32,10,10,84,104
-,101,32,121,111,117,114,115,101,108,102,67,111,110,116,97,99,116,32,109,105,99,
-104,105,103,97,110,69,110,103,108,105,115,104,32,99,111,108,117,109,98,105,97,
-112,114,105,111,114,105,116,121,112,114,105,110,116,105,110,103,100,114,105,110,
-107,105,110,103,102,97,99,105,108,105,116,121,114,101,116,117,114,110,101,100,67
-,111,110,116,101,110,116,32,111,102,102,105,99,101,114,115,82,117,115,115,105,97
-,110,32,103,101,110,101,114,97,116,101,45,56,56,53,57,45,49,34,105,110,100,105,
-99,97,116,101,102,97,109,105,108,105,97,114,32,113,117,97,108,105,116,121,109,97
-,114,103,105,110,58,48,32,99,111,110,116,101,110,116,118,105,101,119,112,111,114
-,116,99,111,110,116,97,99,116,115,45,116,105,116,108,101,34,62,112,111,114,116,
-97,98,108,101,46,108,101,110,103,116,104,32,101,108,105,103,105,98,108,101,105,
-110,118,111,108,118,101,115,97,116,108,97,110,116,105,99,111,110,108,111,97,100,
-61,34,100,101,102,97,117,108,116,46,115,117,112,112,108,105,101,100,112,97,121,
-109,101,110,116,115,103,108,111,115,115,97,114,121,10,10,65,102,116,101,114,32,
-103,117,105,100,97,110,99,101,60,47,116,100,62,60,116,100,101,110,99,111,100,105
-,110,103,109,105,100,100,108,101,34,62,99,97,109,101,32,116,111,32,100,105,115,
-112,108,97,121,115,115,99,111,116,116,105,115,104,106,111,110,97,116,104,97,110,
-109,97,106,111,114,105,116,121,119,105,100,103,101,116,115,46,99,108,105,110,105
-,99,97,108,116,104,97,105,108,97,110,100,116,101,97,99,104,101,114,115,60,104,
-101,97,100,62,10,9,97,102,102,101,99,116,101,100,115,117,112,112,111,114,116,115
-,112,111,105,110,116,101,114,59,116,111,83,116,114,105,110,103,60,47,115,109,97,
-108,108,62,111,107,108,97,104,111,109,97,119,105,108,108,32,98,101,32,105,110,
-118,101,115,116,111,114,48,34,32,97,108,116,61,34,104,111,108,105,100,97,121,115
-,82,101,115,111,117,114,99,101,108,105,99,101,110,115,101,100,32,40,119,104,105,
-99,104,32,46,32,65,102,116,101,114,32,99,111,110,115,105,100,101,114,118,105,115
-,105,116,105,110,103,101,120,112,108,111,114,101,114,112,114,105,109,97,114,121,
-32,115,101,97,114,99,104,34,32,97,110,100,114,111,105,100,34,113,117,105,99,107,
-108,121,32,109,101,101,116,105,110,103,115,101,115,116,105,109,97,116,101,59,114
-,101,116,117,114,110,32,59,99,111,108,111,114,58,35,32,104,101,105,103,104,116,
-61,97,112,112,114,111,118,97,108,44,32,38,113,117,111,116,59,32,99,104,101,99,
-107,101,100,46,109,105,110,46,106,115,34,109,97,103,110,101,116,105,99,62,60,47,
-97,62,60,47,104,102,111,114,101,99,97,115,116,46,32,87,104,105,108,101,32,116,
-104,117,114,115,100,97,121,100,118,101,114,116,105,115,101,38,101,97,99,117,116,
-101,59,104,97,115,67,108,97,115,115,101,118,97,108,117,97,116,101,111,114,100,
-101,114,105,110,103,101,120,105,115,116,105,110,103,112,97,116,105,101,110,116,
-115,32,79,110,108,105,110,101,32,99,111,108,111,114,97,100,111,79,112,116,105,
-111,110,115,34,99,97,109,112,98,101,108,108,60,33,45,45,32,101,110,100,60,47,115
-,112,97,110,62,60,60,98,114,32,47,62,13,10,95,112,111,112,117,112,115,124,115,99
-,105,101,110,99,101,115,44,38,113,117,111,116,59,32,113,117,97,108,105,116,121,
-32,87,105,110,100,111,119,115,32,97,115,115,105,103,110,101,100,104,101,105,103,
-104,116,58,32,60,98,32,99,108,97,115,115,108,101,38,113,117,111,116,59,32,118,97
-,108,117,101,61,34,32,67,111,109,112,97,110,121,101,120,97,109,112,108,101,115,
-60,105,102,114,97,109,101,32,98,101,108,105,101,118,101,115,112,114,101,115,101,
-110,116,115,109,97,114,115,104,97,108,108,112,97,114,116,32,111,102,32,112,114,
-111,112,101,114,108,121,41,46,10,10,84,104,101,32,116,97,120,111,110,111,109,121
-,109,117,99,104,32,111,102,32,60,47,115,112,97,110,62,10,34,32,100,97,116,97,45,
-115,114,116,117,103,117,195,170,115,115,99,114,111,108,108,84,111,32,112,114,111
-,106,101,99,116,60,104,101,97,100,62,13,10,97,116,116,111,114,110,101,121,101,
-109,112,104,97,115,105,115,115,112,111,110,115,111,114,115,102,97,110,99,121,98,
-111,120,119,111,114,108,100,39,115,32,119,105,108,100,108,105,102,101,99,104,101
-,99,107,101,100,61,115,101,115,115,105,111,110,115,112,114,111,103,114,97,109,
-109,112,120,59,102,111,110,116,45,32,80,114,111,106,101,99,116,106,111,117,114,
-110,97,108,115,98,101,108,105,101,118,101,100,118,97,99,97,116,105,111,110,116,
-104,111,109,112,115,111,110,108,105,103,104,116,105,110,103,97,110,100,32,116,
-104,101,32,115,112,101,99,105,97,108,32,98,111,114,100,101,114,61,48,99,104,101,
-99,107,105,110,103,60,47,116,98,111,100,121,62,60,98,117,116,116,111,110,32,67,
-111,109,112,108,101,116,101,99,108,101,97,114,102,105,120,10,60,104,101,97,100,
-62,10,97,114,116,105,99,108,101,32,60,115,101,99,116,105,111,110,102,105,110,100
-,105,110,103,115,114,111,108,101,32,105,110,32,112,111,112,117,108,97,114,32,32,
-79,99,116,111,98,101,114,119,101,98,115,105,116,101,32,101,120,112,111,115,117,
-114,101,117,115,101,100,32,116,111,32,32,99,104,97,110,103,101,115,111,112,101,
-114,97,116,101,100,99,108,105,99,107,105,110,103,101,110,116,101,114,105,110,103
-,99,111,109,109,97,110,100,115,105,110,102,111,114,109,101,100,32,110,117,109,98
-,101,114,115,32,32,60,47,100,105,118,62,99,114,101,97,116,105,110,103,111,110,83
-,117,98,109,105,116,109,97,114,121,108,97,110,100,99,111,108,108,101,103,101,115
-,97,110,97,108,121,116,105,99,108,105,115,116,105,110,103,115,99,111,110,116,97,
-99,116,46,108,111,103,103,101,100,73,110,97,100,118,105,115,111,114,121,115,105,
-98,108,105,110,103,115,99,111,110,116,101,110,116,34,115,38,113,117,111,116,59,
-41,115,46,32,84,104,105,115,32,112,97,99,107,97,103,101,115,99,104,101,99,107,98
-,111,120,115,117,103,103,101,115,116,115,112,114,101,103,110,97,110,116,116,111,
-109,111,114,114,111,119,115,112,97,99,105,110,103,61,105,99,111,110,46,112,110,
-103,106,97,112,97,110,101,115,101,99,111,100,101,98,97,115,101,98,117,116,116,
-111,110,34,62,103,97,109,98,108,105,110,103,115,117,99,104,32,97,115,32,44,32,
-119,104,105,108,101,32,60,47,115,112,97,110,62,32,109,105,115,115,111,117,114,
-105,115,112,111,114,116,105,110,103,116,111,112,58,49,112,120,32,46,60,47,115,
-112,97,110,62,116,101,110,115,105,111,110,115,119,105,100,116,104,61,34,50,108,
-97,122,121,108,111,97,100,110,111,118,101,109,98,101,114,117,115,101,100,32,105,
-110,32,104,101,105,103,104,116,61,34,99,114,105,112,116,34,62,10,38,110,98,115,
-112,59,60,47,60,116,114,62,60,116,100,32,104,101,105,103,104,116,58,50,47,112,
-114,111,100,117,99,116,99,111,117,110,116,114,121,32,105,110,99,108,117,100,101,
-32,102,111,111,116,101,114,34,32,38,108,116,59,33,45,45,32,116,105,116,108,101,
-34,62,60,47,106,113,117,101,114,121,46,60,47,102,111,114,109,62,10,40,231,174,
-128,228,189,147,41,40,231,185,129,233,171,148,41,104,114,118,97,116,115,107,105,
-105,116,97,108,105,97,110,111,114,111,109,195,162,110,196,131,116,195,188,114,
-107,195,167,101,216,167,216,177,216,175,217,136,116,97,109,98,105,195,169,110,
-110,111,116,105,99,105,97,115,109,101,110,115,97,106,101,115,112,101,114,115,111
-,110,97,115,100,101,114,101,99,104,111,115,110,97,99,105,111,110,97,108,115,101,
-114,118,105,99,105,111,99,111,110,116,97,99,116,111,117,115,117,97,114,105,111,
-115,112,114,111,103,114,97,109,97,103,111,98,105,101,114,110,111,101,109,112,114
-,101,115,97,115,97,110,117,110,99,105,111,115,118,97,108,101,110,99,105,97,99,
-111,108,111,109,98,105,97,100,101,115,112,117,195,169,115,100,101,112,111,114,
-116,101,115,112,114,111,121,101,99,116,111,112,114,111,100,117,99,116,111,112,
-195,186,98,108,105,99,111,110,111,115,111,116,114,111,115,104,105,115,116,111,
-114,105,97,112,114,101,115,101,110,116,101,109,105,108,108,111,110,101,115,109,
-101,100,105,97,110,116,101,112,114,101,103,117,110,116,97,97,110,116,101,114,105
-,111,114,114,101,99,117,114,115,111,115,112,114,111,98,108,101,109,97,115,97,110
-,116,105,97,103,111,110,117,101,115,116,114,111,115,111,112,105,110,105,195,179,
-110,105,109,112,114,105,109,105,114,109,105,101,110,116,114,97,115,97,109,195,
-169,114,105,99,97,118,101,110,100,101,100,111,114,115,111,99,105,101,100,97,100,
-114,101,115,112,101,99,116,111,114,101,97,108,105,122,97,114,114,101,103,105,115
-,116,114,111,112,97,108,97,98,114,97,115,105,110,116,101,114,195,169,115,101,110
-,116,111,110,99,101,115,101,115,112,101,99,105,97,108,109,105,101,109,98,114,111
-,115,114,101,97,108,105,100,97,100,99,195,179,114,100,111,98,97,122,97,114,97,
-103,111,122,97,112,195,161,103,105,110,97,115,115,111,99,105,97,108,101,115,98,
-108,111,113,117,101,97,114,103,101,115,116,105,195,179,110,97,108,113,117,105,
-108,101,114,115,105,115,116,101,109,97,115,99,105,101,110,99,105,97,115,99,111,
-109,112,108,101,116,111,118,101,114,115,105,195,179,110,99,111,109,112,108,101,
-116,97,101,115,116,117,100,105,111,115,112,195,186,98,108,105,99,97,111,98,106,
-101,116,105,118,111,97,108,105,99,97,110,116,101,98,117,115,99,97,100,111,114,99
-,97,110,116,105,100,97,100,101,110,116,114,97,100,97,115,97,99,99,105,111,110,
-101,115,97,114,99,104,105,118,111,115,115,117,112,101,114,105,111,114,109,97,121
-,111,114,195,173,97,97,108,101,109,97,110,105,97,102,117,110,99,105,195,179,110,
-195,186,108,116,105,109,111,115,104,97,99,105,101,110,100,111,97,113,117,101,108
-,108,111,115,101,100,105,99,105,195,179,110,102,101,114,110,97,110,100,111,97,
-109,98,105,101,110,116,101,102,97,99,101,98,111,111,107,110,117,101,115,116,114,
-97,115,99,108,105,101,110,116,101,115,112,114,111,99,101,115,111,115,98,97,115,
-116,97,110,116,101,112,114,101,115,101,110,116,97,114,101,112,111,114,116,97,114
-,99,111,110,103,114,101,115,111,112,117,98,108,105,99,97,114,99,111,109,101,114,
-99,105,111,99,111,110,116,114,97,116,111,106,195,179,118,101,110,101,115,100,105
-,115,116,114,105,116,111,116,195,169,99,110,105,99,97,99,111,110,106,117,110,116
-,111,101,110,101,114,103,195,173,97,116,114,97,98,97,106,97,114,97,115,116,117,
-114,105,97,115,114,101,99,105,101,110,116,101,117,116,105,108,105,122,97,114,98,
-111,108,101,116,195,173,110,115,97,108,118,97,100,111,114,99,111,114,114,101,99,
-116,97,116,114,97,98,97,106,111,115,112,114,105,109,101,114,111,115,110,101,103,
-111,99,105,111,115,108,105,98,101,114,116,97,100,100,101,116,97,108,108,101,115,
-112,97,110,116,97,108,108,97,112,114,195,179,120,105,109,111,97,108,109,101,114,
-195,173,97,97,110,105,109,97,108,101,115,113,117,105,195,169,110,101,115,99,111,
-114,97,122,195,179,110,115,101,99,99,105,195,179,110,98,117,115,99,97,110,100,
-111,111,112,99,105,111,110,101,115,101,120,116,101,114,105,111,114,99,111,110,99
-,101,112,116,111,116,111,100,97,118,195,173,97,103,97,108,101,114,195,173,97,101
-,115,99,114,105,98,105,114,109,101,100,105,99,105,110,97,108,105,99,101,110,99,
-105,97,99,111,110,115,117,108,116,97,97,115,112,101,99,116,111,115,99,114,195,
-173,116,105,99,97,100,195,179,108,97,114,101,115,106,117,115,116,105,99,105,97,
-100,101,98,101,114,195,161,110,112,101,114,195,173,111,100,111,110,101,99,101,
-115,105,116,97,109,97,110,116,101,110,101,114,112,101,113,117,101,195,177,111,
-114,101,99,105,98,105,100,97,116,114,105,98,117,110,97,108,116,101,110,101,114,
-105,102,101,99,97,110,99,105,195,179,110,99,97,110,97,114,105,97,115,100,101,115
-,99,97,114,103,97,100,105,118,101,114,115,111,115,109,97,108,108,111,114,99,97,
-114,101,113,117,105,101,114,101,116,195,169,99,110,105,99,111,100,101,98,101,114
-,195,173,97,118,105,118,105,101,110,100,97,102,105,110,97,110,122,97,115,97,100,
-101,108,97,110,116,101,102,117,110,99,105,111,110,97,99,111,110,115,101,106,111,
-115,100,105,102,195,173,99,105,108,99,105,117,100,97,100,101,115,97,110,116,105,
-103,117,97,115,97,118,97,110,122,97,100,97,116,195,169,114,109,105,110,111,117,
-110,105,100,97,100,101,115,115,195,161,110,99,104,101,122,99,97,109,112,97,195,
-177,97,115,111,102,116,111,110,105,99,114,101,118,105,115,116,97,115,99,111,110,
-116,105,101,110,101,115,101,99,116,111,114,101,115,109,111,109,101,110,116,111,
-115,102,97,99,117,108,116,97,100,99,114,195,169,100,105,116,111,100,105,118,101,
-114,115,97,115,115,117,112,117,101,115,116,111,102,97,99,116,111,114,101,115,115
-,101,103,117,110,100,111,115,112,101,113,117,101,195,177,97,208,179,208,190,208,
-180,208,176,208,181,209,129,208,187,208,184,208,181,209,129,209,130,209,140,208,
-177,209,139,208,187,208,190,208,177,209,139,209,130,209,140,209,141,209,130,208,
-190,208,188,208,149,209,129,208,187,208,184,209,130,208,190,208,179,208,190,208,
-188,208,181,208,189,209,143,208,178,209,129,208,181,209,133,209,141,209,130,208,
-190,208,185,208,180,208,176,208,182,208,181,208,177,209,139,208,187,208,184,208,
-179,208,190,208,180,209,131,208,180,208,181,208,189,209,140,209,141,209,130,208,
-190,209,130,208,177,209,139,208,187,208,176,209,129,208,181,208,177,209,143,208,
-190,208,180,208,184,208,189,209,129,208,181,208,177,208,181,208,189,208,176,208,
-180,208,190,209,129,208,176,208,185,209,130,209,132,208,190,209,130,208,190,208,
-189,208,181,208,179,208,190,209,129,208,178,208,190,208,184,209,129,208,178,208,
-190,208,185,208,184,208,179,209,128,209,139,209,130,208,190,208,182,208,181,208,
-178,209,129,208,181,208,188,209,129,208,178,208,190,209,142,208,187,208,184,209,
-136,209,140,209,141,209,130,208,184,209,133,208,191,208,190,208,186,208,176,208,
-180,208,189,208,181,208,185,208,180,208,190,208,188,208,176,208,188,208,184,209,
-128,208,176,208,187,208,184,208,177,208,190,209,130,208,181,208,188,209,131,209,
-133,208,190,209,130,209,143,208,180,208,178,209,131,209,133,209,129,208,181,209,
-130,208,184,208,187,209,142,208,180,208,184,208,180,208,181,208,187,208,190,208,
-188,208,184,209,128,208,181,209,130,208,181,208,177,209,143,209,129,208,178,208,
-190,208,181,208,178,208,184,208,180,208,181,209,135,208,181,208,179,208,190,209,
-141,209,130,208,184,208,188,209,129,209,135,208,181,209,130,209,130,208,181,208,
-188,209,139,209,134,208,181,208,189,209,139,209,129,209,130,208,176,208,187,208,
-178,208,181,208,180,209,140,209,130,208,181,208,188,208,181,208,178,208,190,208,
-180,209,139,209,130,208,181,208,177,208,181,208,178,209,139,209,136,208,181,208,
-189,208,176,208,188,208,184,209,130,208,184,208,191,208,176,209,130,208,190,208,
-188,209,131,208,191,209,128,208,176,208,178,208,187,208,184,209,134,208,176,208,
-190,208,180,208,189,208,176,208,179,208,190,208,180,209,139,208,183,208,189,208,
-176,209,142,208,188,208,190,208,179,209,131,208,180,209,128,209,131,208,179,208,
-178,209,129,208,181,208,185,208,184,208,180,208,181,209,130,208,186,208,184,208,
-189,208,190,208,190,208,180,208,189,208,190,208,180,208,181,208,187,208,176,208,
-180,208,181,208,187,208,181,209,129,209,128,208,190,208,186,208,184,209,142,208,
-189,209,143,208,178,208,181,209,129,209,140,208,149,209,129,209,130,209,140,209,
-128,208,176,208,183,208,176,208,189,208,176,209,136,208,184,216,167,217,132,217,
-132,217,135,216,167,217,132,216,170,217,138,216,172,217,133,217,138,216,185,216,
-174,216,167,216,181,216,169,216,167,217,132,216,176,217,138,216,185,217,132,217,
-138,217,135,216,172,216,175,217,138,216,175,216,167,217,132,216,162,217,134,216,
-167,217,132,216,177,216,175,216,170,216,173,217,131,217,133,216,181,217,129,216,
-173,216,169,217,131,216,167,217,134,216,170,216,167,217,132,217,132,217,138,217,
-138,217,131,217,136,217,134,216,180,216,168,217,131,216,169,217,129,217,138,217,
-135,216,167,216,168,217,134,216,167,216,170,216,173,217,136,216,167,216,161,216,
-163,217,131,216,171,216,177,216,174,217,132,216,167,217,132,216,167,217,132,216,
-173,216,168,216,175,217,132,217,138,217,132,216,175,216,177,217,136,216,179,216,
-167,216,182,216,186,216,183,216,170,217,131,217,136,217,134,217,135,217,134,216,
-167,217,131,216,179,216,167,216,173,216,169,217,134,216,167,216,175,217,138,216,
-167,217,132,216,183,216,168,216,185,217,132,217,138,217,131,216,180,217,131,216,
-177,216,167,217,138,217,133,217,131,217,134,217,133,217,134,217,135,216,167,216,
-180,216,177,217,131,216,169,216,177,216,166,217,138,216,179,217,134,216,180,217,
-138,216,183,217,133,216,167,216,176,216,167,216,167,217,132,217,129,217,134,216,
-180,216,168,216,167,216,168,216,170,216,185,216,168,216,177,216,177,216,173,217,
-133,216,169,217,131,216,167,217,129,216,169,217,138,217,130,217,136,217,132,217,
-133,216,177,217,131,216,178,217,131,217,132,217,133,216,169,216,163,216,173,217,
-133,216,175,217,130,217,132,216,168,217,138,217,138,216,185,217,134,217,138,216,
-181,217,136,216,177,216,169,216,183,216,177,217,138,217,130,216,180,216,167,216,
-177,217,131,216,172,217,136,216,167,217,132,216,163,216,174,216,177,217,137,217,
-133,216,185,217,134,216,167,216,167,216,168,216,173,216,171,216,185,216,177,217,
-136,216,182,216,168,216,180,217,131,217,132,217,133,216,179,216,172,217,132,216,
-168,217,134,216,167,217,134,216,174,216,167,217,132,216,175,217,131,216,170,216,
-167,216,168,217,131,217,132,217,138,216,169,216,168,216,175,217,136,217,134,216,
-163,217,138,216,182,216,167,217,138,217,136,216,172,216,175,217,129,216,177,217,
-138,217,130,217,131,216,170,216,168,216,170,216,163,217,129,216,182,217,132,217,
-133,216,183,216,168,216,174,216,167,217,131,216,171,216,177,216,168,216,167,216,
-177,217,131,216,167,217,129,216,182,217,132,216,167,216,173,217,132,217,137,217,
-134,217,129,216,179,217,135,216,163,217,138,216,167,217,133,216,177,216,175,217,
-136,216,175,216,163,217,134,217,135,216,167,216,175,217,138,217,134,216,167,216,
-167,217,132,216,167,217,134,217,133,216,185,216,177,216,182,216,170,216,185,217,
-132,217,133,216,175,216,167,216,174,217,132,217,133,217,133,217,131,217,134,0,0,
-0,0,0,0,0,0,1,0,1,0,1,0,1,0,2,0,2,0,2,0,2,0,4,0,4,0,4,0,4,0,0,1,2,3,4,5,6,7,7,6,
-5,4,3,2,1,0,8,9,10,11,12,13,14,15,15,14,13,12,11,10,9,8,16,17,18,19,20,21,22,23,
-23,22,21,20,19,18,17,16,24,25,26,27,28,29,30,31,31,30,29,28,27,26,25,24,255,255,
-255,255,0,0,0,0,0,0,0,0,255,255,255,255,1,0,0,0,2,0,0,0,2,0,0,0,1,0,0,0,1,0,0,0,
-3,0,0,0,255,255,0,1,0,0,0,1,0,0,255,255,0,1,0,0,0,8,0,8,0,8,0,8,0,0,0,1,0,2,0,3,
-0,4,0,5,0,6,0,7,114,101,115,111,117,114,99,101,115,99,111,117,110,116,114,105,
-101,115,113,117,101,115,116,105,111,110,115,101,113,117,105,112,109,101,110,116,
-99,111,109,109,117,110,105,116,121,97,118,97,105,108,97,98,108,101,104,105,103,
-104,108,105,103,104,116,68,84,68,47,120,104,116,109,108,109,97,114,107,101,116,
-105,110,103,107,110,111,119,108,101,100,103,101,115,111,109,101,116,104,105,110,
-103,99,111,110,116,97,105,110,101,114,100,105,114,101,99,116,105,111,110,115,117
-,98,115,99,114,105,98,101,97,100,118,101,114,116,105,115,101,99,104,97,114,97,99
-,116,101,114,34,32,118,97,108,117,101,61,34,60,47,115,101,108,101,99,116,62,65,
-117,115,116,114,97,108,105,97,34,32,99,108,97,115,115,61,34,115,105,116,117,97,
-116,105,111,110,97,117,116,104,111,114,105,116,121,102,111,108,108,111,119,105,
-110,103,112,114,105,109,97,114,105,108,121,111,112,101,114,97,116,105,111,110,99
-,104,97,108,108,101,110,103,101,100,101,118,101,108,111,112,101,100,97,110,111,
-110,121,109,111,117,115,102,117,110,99,116,105,111,110,32,102,117,110,99,116,105
-,111,110,115,99,111,109,112,97,110,105,101,115,115,116,114,117,99,116,117,114,
-101,97,103,114,101,101,109,101,110,116,34,32,116,105,116,108,101,61,34,112,111,
-116,101,110,116,105,97,108,101,100,117,99,97,116,105,111,110,97,114,103,117,109,
-101,110,116,115,115,101,99,111,110,100,97,114,121,99,111,112,121,114,105,103,104
-,116,108,97,110,103,117,97,103,101,115,101,120,99,108,117,115,105,118,101,99,111
-,110,100,105,116,105,111,110,60,47,102,111,114,109,62,13,10,115,116,97,116,101,
-109,101,110,116,97,116,116,101,110,116,105,111,110,66,105,111,103,114,97,112,104
-,121,125,32,101,108,115,101,32,123,10,115,111,108,117,116,105,111,110,115,119,
-104,101,110,32,116,104,101,32,65,110,97,108,121,116,105,99,115,116,101,109,112,
-108,97,116,101,115,100,97,110,103,101,114,111,117,115,115,97,116,101,108,108,105
-,116,101,100,111,99,117,109,101,110,116,115,112,117,98,108,105,115,104,101,114,
-105,109,112,111,114,116,97,110,116,112,114,111,116,111,116,121,112,101,105,110,
-102,108,117,101,110,99,101,38,114,97,113,117,111,59,60,47,101,102,102,101,99,116
-,105,118,101,103,101,110,101,114,97,108,108,121,116,114,97,110,115,102,111,114,
-109,98,101,97,117,116,105,102,117,108,116,114,97,110,115,112,111,114,116,111,114
-,103,97,110,105,122,101,100,112,117,98,108,105,115,104,101,100,112,114,111,109,
-105,110,101,110,116,117,110,116,105,108,32,116,104,101,116,104,117,109,98,110,97
-,105,108,78,97,116,105,111,110,97,108,32,46,102,111,99,117,115,40,41,59,111,118,
-101,114,32,116,104,101,32,109,105,103,114,97,116,105,111,110,97,110,110,111,117,
-110,99,101,100,102,111,111,116,101,114,34,62,10,101,120,99,101,112,116,105,111,
-110,108,101,115,115,32,116,104,97,110,101,120,112,101,110,115,105,118,101,102,
-111,114,109,97,116,105,111,110,102,114,97,109,101,119,111,114,107,116,101,114,
-114,105,116,111,114,121,110,100,105,99,97,116,105,111,110,99,117,114,114,101,110
-,116,108,121,99,108,97,115,115,78,97,109,101,99,114,105,116,105,99,105,115,109,
-116,114,97,100,105,116,105,111,110,101,108,115,101,119,104,101,114,101,65,108,
-101,120,97,110,100,101,114,97,112,112,111,105,110,116,101,100,109,97,116,101,114
-,105,97,108,115,98,114,111,97,100,99,97,115,116,109,101,110,116,105,111,110,101,
-100,97,102,102,105,108,105,97,116,101,60,47,111,112,116,105,111,110,62,116,114,
-101,97,116,109,101,110,116,100,105,102,102,101,114,101,110,116,47,100,101,102,97
-,117,108,116,46,80,114,101,115,105,100,101,110,116,111,110,99,108,105,99,107,61,
-34,98,105,111,103,114,97,112,104,121,111,116,104,101,114,119,105,115,101,112,101
-,114,109,97,110,101,110,116,70,114,97,110,195,167,97,105,115,72,111,108,108,121,
-119,111,111,100,101,120,112,97,110,115,105,111,110,115,116,97,110,100,97,114,100
-,115,60,47,115,116,121,108,101,62,10,114,101,100,117,99,116,105,111,110,68,101,
-99,101,109,98,101,114,32,112,114,101,102,101,114,114,101,100,67,97,109,98,114,
-105,100,103,101,111,112,112,111,110,101,110,116,115,66,117,115,105,110,101,115,
-115,32,99,111,110,102,117,115,105,111,110,62,10,60,116,105,116,108,101,62,112,
-114,101,115,101,110,116,101,100,101,120,112,108,97,105,110,101,100,100,111,101,
-115,32,110,111,116,32,119,111,114,108,100,119,105,100,101,105,110,116,101,114,
-102,97,99,101,112,111,115,105,116,105,111,110,115,110,101,119,115,112,97,112,101
-,114,60,47,116,97,98,108,101,62,10,109,111,117,110,116,97,105,110,115,108,105,
-107,101,32,116,104,101,32,101,115,115,101,110,116,105,97,108,102,105,110,97,110,
-99,105,97,108,115,101,108,101,99,116,105,111,110,97,99,116,105,111,110,61,34,47,
-97,98,97,110,100,111,110,101,100,69,100,117,99,97,116,105,111,110,112,97,114,115
-,101,73,110,116,40,115,116,97,98,105,108,105,116,121,117,110,97,98,108,101,32,
-116,111,60,47,116,105,116,108,101,62,10,114,101,108,97,116,105,111,110,115,78,
-111,116,101,32,116,104,97,116,101,102,102,105,99,105,101,110,116,112,101,114,102
-,111,114,109,101,100,116,119,111,32,121,101,97,114,115,83,105,110,99,101,32,116,
-104,101,116,104,101,114,101,102,111,114,101,119,114,97,112,112,101,114,34,62,97,
-108,116,101,114,110,97,116,101,105,110,99,114,101,97,115,101,100,66,97,116,116,
-108,101,32,111,102,112,101,114,99,101,105,118,101,100,116,114,121,105,110,103,32
-,116,111,110,101,99,101,115,115,97,114,121,112,111,114,116,114,97,121,101,100,
-101,108,101,99,116,105,111,110,115,69,108,105,122,97,98,101,116,104,60,47,105,
-102,114,97,109,101,62,100,105,115,99,111,118,101,114,121,105,110,115,117,114,97,
-110,99,101,115,46,108,101,110,103,116,104,59,108,101,103,101,110,100,97,114,121,
-71,101,111,103,114,97,112,104,121,99,97,110,100,105,100,97,116,101,99,111,114,
-112,111,114,97,116,101,115,111,109,101,116,105,109,101,115,115,101,114,118,105,
-99,101,115,46,105,110,104,101,114,105,116,101,100,60,47,115,116,114,111,110,103,
-62,67,111,109,109,117,110,105,116,121,114,101,108,105,103,105,111,117,115,108,
-111,99,97,116,105,111,110,115,67,111,109,109,105,116,116,101,101,98,117,105,108,
-100,105,110,103,115,116,104,101,32,119,111,114,108,100,110,111,32,108,111,110,
-103,101,114,98,101,103,105,110,110,105,110,103,114,101,102,101,114,101,110,99,
-101,99,97,110,110,111,116,32,98,101,102,114,101,113,117,101,110,99,121,116,121,
-112,105,99,97,108,108,121,105,110,116,111,32,116,104,101,32,114,101,108,97,116,
-105,118,101,59,114,101,99,111,114,100,105,110,103,112,114,101,115,105,100,101,
-110,116,105,110,105,116,105,97,108,108,121,116,101,99,104,110,105,113,117,101,
-116,104,101,32,111,116,104,101,114,105,116,32,99,97,110,32,98,101,101,120,105,
-115,116,101,110,99,101,117,110,100,101,114,108,105,110,101,116,104,105,115,32,
-116,105,109,101,116,101,108,101,112,104,111,110,101,105,116,101,109,115,99,111,
-112,101,112,114,97,99,116,105,99,101,115,97,100,118,97,110,116,97,103,101,41,59,
-114,101,116,117,114,110,32,70,111,114,32,111,116,104,101,114,112,114,111,118,105
-,100,105,110,103,100,101,109,111,99,114,97,99,121,98,111,116,104,32,116,104,101,
-32,101,120,116,101,110,115,105,118,101,115,117,102,102,101,114,105,110,103,115,
-117,112,112,111,114,116,101,100,99,111,109,112,117,116,101,114,115,32,102,117,
-110,99,116,105,111,110,112,114,97,99,116,105,99,97,108,115,97,105,100,32,116,104
-,97,116,105,116,32,109,97,121,32,98,101,69,110,103,108,105,115,104,60,47,102,114
-,111,109,32,116,104,101,32,115,99,104,101,100,117,108,101,100,100,111,119,110,
-108,111,97,100,115,60,47,108,97,98,101,108,62,10,115,117,115,112,101,99,116,101,
-100,109,97,114,103,105,110,58,32,48,115,112,105,114,105,116,117,97,108,60,47,104
-,101,97,100,62,10,10,109,105,99,114,111,115,111,102,116,103,114,97,100,117,97,
-108,108,121,100,105,115,99,117,115,115,101,100,104,101,32,98,101,99,97,109,101,
-101,120,101,99,117,116,105,118,101,106,113,117,101,114,121,46,106,115,104,111,
-117,115,101,104,111,108,100,99,111,110,102,105,114,109,101,100,112,117,114,99,
-104,97,115,101,100,108,105,116,101,114,97,108,108,121,100,101,115,116,114,111,
-121,101,100,117,112,32,116,111,32,116,104,101,118,97,114,105,97,116,105,111,110,
-114,101,109,97,105,110,105,110,103,105,116,32,105,115,32,110,111,116,99,101,110,
-116,117,114,105,101,115,74,97,112,97,110,101,115,101,32,97,109,111,110,103,32,
-116,104,101,99,111,109,112,108,101,116,101,100,97,108,103,111,114,105,116,104,
-109,105,110,116,101,114,101,115,116,115,114,101,98,101,108,108,105,111,110,117,
-110,100,101,102,105,110,101,100,101,110,99,111,117,114,97,103,101,114,101,115,
-105,122,97,98,108,101,105,110,118,111,108,118,105,110,103,115,101,110,115,105,
-116,105,118,101,117,110,105,118,101,114,115,97,108,112,114,111,118,105,115,105,
-111,110,40,97,108,116,104,111,117,103,104,102,101,97,116,117,114,105,110,103,99,
-111,110,100,117,99,116,101,100,41,44,32,119,104,105,99,104,32,99,111,110,116,105
-,110,117,101,100,45,104,101,97,100,101,114,34,62,70,101,98,114,117,97,114,121,32
-,110,117,109,101,114,111,117,115,32,111,118,101,114,102,108,111,119,58,99,111,
-109,112,111,110,101,110,116,102,114,97,103,109,101,110,116,115,101,120,99,101,
-108,108,101,110,116,99,111,108,115,112,97,110,61,34,116,101,99,104,110,105,99,97
-,108,110,101,97,114,32,116,104,101,32,65,100,118,97,110,99,101,100,32,115,111,
-117,114,99,101,32,111,102,101,120,112,114,101,115,115,101,100,72,111,110,103,32,
-75,111,110,103,32,70,97,99,101,98,111,111,107,109,117,108,116,105,112,108,101,32
-,109,101,99,104,97,110,105,115,109,101,108,101,118,97,116,105,111,110,111,102,
-102,101,110,115,105,118,101,60,47,102,111,114,109,62,10,9,115,112,111,110,115,
-111,114,101,100,100,111,99,117,109,101,110,116,46,111,114,32,38,113,117,111,116,
-59,116,104,101,114,101,32,97,114,101,116,104,111,115,101,32,119,104,111,109,111,
-118,101,109,101,110,116,115,112,114,111,99,101,115,115,101,115,100,105,102,102,
-105,99,117,108,116,115,117,98,109,105,116,116,101,100,114,101,99,111,109,109,101
-,110,100,99,111,110,118,105,110,99,101,100,112,114,111,109,111,116,105,110,103,
-34,32,119,105,100,116,104,61,34,46,114,101,112,108,97,99,101,40,99,108,97,115,
-115,105,99,97,108,99,111,97,108,105,116,105,111,110,104,105,115,32,102,105,114,
-115,116,100,101,99,105,115,105,111,110,115,97,115,115,105,115,116,97,110,116,105
-,110,100,105,99,97,116,101,100,101,118,111,108,117,116,105,111,110,45,119,114,97
-,112,112,101,114,34,101,110,111,117,103,104,32,116,111,97,108,111,110,103,32,116
-,104,101,100,101,108,105,118,101,114,101,100,45,45,62,13,10,60,33,45,45,65,109,
-101,114,105,99,97,110,32,112,114,111,116,101,99,116,101,100,78,111,118,101,109,
-98,101,114,32,60,47,115,116,121,108,101,62,60,102,117,114,110,105,116,117,114,
-101,73,110,116,101,114,110,101,116,32,32,111,110,98,108,117,114,61,34,115,117,
-115,112,101,110,100,101,100,114,101,99,105,112,105,101,110,116,98,97,115,101,100
-,32,111,110,32,77,111,114,101,111,118,101,114,44,97,98,111,108,105,115,104,101,
-100,99,111,108,108,101,99,116,101,100,119,101,114,101,32,109,97,100,101,101,109,
-111,116,105,111,110,97,108,101,109,101,114,103,101,110,99,121,110,97,114,114,97,
-116,105,118,101,97,100,118,111,99,97,116,101,115,112,120,59,98,111,114,100,101,
-114,99,111,109,109,105,116,116,101,100,100,105,114,61,34,108,116,114,34,101,109,
-112,108,111,121,101,101,115,114,101,115,101,97,114,99,104,46,32,115,101,108,101,
-99,116,101,100,115,117,99,99,101,115,115,111,114,99,117,115,116,111,109,101,114,
-115,100,105,115,112,108,97,121,101,100,83,101,112,116,101,109,98,101,114,97,100,
-100,67,108,97,115,115,40,70,97,99,101,98,111,111,107,32,115,117,103,103,101,115,
-116,101,100,97,110,100,32,108,97,116,101,114,111,112,101,114,97,116,105,110,103,
-101,108,97,98,111,114,97,116,101,83,111,109,101,116,105,109,101,115,73,110,115,
-116,105,116,117,116,101,99,101,114,116,97,105,110,108,121,105,110,115,116,97,108
-,108,101,100,102,111,108,108,111,119,101,114,115,74,101,114,117,115,97,108,101,
-109,116,104,101,121,32,104,97,118,101,99,111,109,112,117,116,105,110,103,103,101
-,110,101,114,97,116,101,100,112,114,111,118,105,110,99,101,115,103,117,97,114,97
-,110,116,101,101,97,114,98,105,116,114,97,114,121,114,101,99,111,103,110,105,122
-,101,119,97,110,116,101,100,32,116,111,112,120,59,119,105,100,116,104,58,116,104
-,101,111,114,121,32,111,102,98,101,104,97,118,105,111,117,114,87,104,105,108,101
-,32,116,104,101,101,115,116,105,109,97,116,101,100,98,101,103,97,110,32,116,111,
-32,105,116,32,98,101,99,97,109,101,109,97,103,110,105,116,117,100,101,109,117,
-115,116,32,104,97,118,101,109,111,114,101,32,116,104,97,110,68,105,114,101,99,
-116,111,114,121,101,120,116,101,110,115,105,111,110,115,101,99,114,101,116,97,
-114,121,110,97,116,117,114,97,108,108,121,111,99,99,117,114,114,105,110,103,118,
-97,114,105,97,98,108,101,115,103,105,118,101,110,32,116,104,101,112,108,97,116,
-102,111,114,109,46,60,47,108,97,98,101,108,62,60,102,97,105,108,101,100,32,116,
-111,99,111,109,112,111,117,110,100,115,107,105,110,100,115,32,111,102,32,115,111
-,99,105,101,116,105,101,115,97,108,111,110,103,115,105,100,101,32,45,45,38,103,
-116,59,10,10,115,111,117,116,104,119,101,115,116,116,104,101,32,114,105,103,104,
-116,114,97,100,105,97,116,105,111,110,109,97,121,32,104,97,118,101,32,117,110,
-101,115,99,97,112,101,40,115,112,111,107,101,110,32,105,110,34,32,104,114,101,
-102,61,34,47,112,114,111,103,114,97,109,109,101,111,110,108,121,32,116,104,101,
-32,99,111,109,101,32,102,114,111,109,100,105,114,101,99,116,111,114,121,98,117,
-114,105,101,100,32,105,110,97,32,115,105,109,105,108,97,114,116,104,101,121,32,
-119,101,114,101,60,47,102,111,110,116,62,60,47,78,111,114,119,101,103,105,97,110
-,115,112,101,99,105,102,105,101,100,112,114,111,100,117,99,105,110,103,112,97,
-115,115,101,110,103,101,114,40,110,101,119,32,68,97,116,101,116,101,109,112,111,
-114,97,114,121,102,105,99,116,105,111,110,97,108,65,102,116,101,114,32,116,104,
-101,101,113,117,97,116,105,111,110,115,100,111,119,110,108,111,97,100,46,114,101
-,103,117,108,97,114,108,121,100,101,118,101,108,111,112,101,114,97,98,111,118,
-101,32,116,104,101,108,105,110,107,101,100,32,116,111,112,104,101,110,111,109,
-101,110,97,112,101,114,105,111,100,32,111,102,116,111,111,108,116,105,112,34,62,
-115,117,98,115,116,97,110,99,101,97,117,116,111,109,97,116,105,99,97,115,112,101
-,99,116,32,111,102,65,109,111,110,103,32,116,104,101,99,111,110,110,101,99,116,
-101,100,101,115,116,105,109,97,116,101,115,65,105,114,32,70,111,114,99,101,115,
-121,115,116,101,109,32,111,102,111,98,106,101,99,116,105,118,101,105,109,109,101
-,100,105,97,116,101,109,97,107,105,110,103,32,105,116,112,97,105,110,116,105,110
-,103,115,99,111,110,113,117,101,114,101,100,97,114,101,32,115,116,105,108,108,
-112,114,111,99,101,100,117,114,101,103,114,111,119,116,104,32,111,102,104,101,97
-,100,101,100,32,98,121,69,117,114,111,112,101,97,110,32,100,105,118,105,115,105,
-111,110,115,109,111,108,101,99,117,108,101,115,102,114,97,110,99,104,105,115,101
-,105,110,116,101,110,116,105,111,110,97,116,116,114,97,99,116,101,100,99,104,105
-,108,100,104,111,111,100,97,108,115,111,32,117,115,101,100,100,101,100,105,99,97
-,116,101,100,115,105,110,103,97,112,111,114,101,100,101,103,114,101,101,32,111,
-102,102,97,116,104,101,114,32,111,102,99,111,110,102,108,105,99,116,115,60,47,97
-,62,60,47,112,62,10,99,97,109,101,32,102,114,111,109,119,101,114,101,32,117,115,
-101,100,110,111,116,101,32,116,104,97,116,114,101,99,101,105,118,105,110,103,69,
-120,101,99,117,116,105,118,101,101,118,101,110,32,109,111,114,101,97,99,99,101,
-115,115,32,116,111,99,111,109,109,97,110,100,101,114,80,111,108,105,116,105,99,
-97,108,109,117,115,105,99,105,97,110,115,100,101,108,105,99,105,111,117,115,112,
-114,105,115,111,110,101,114,115,97,100,118,101,110,116,32,111,102,85,84,70,45,56
-,34,32,47,62,60,33,91,67,68,65,84,65,91,34,62,67,111,110,116,97,99,116,83,111,
-117,116,104,101,114,110,32,98,103,99,111,108,111,114,61,34,115,101,114,105,101,
-115,32,111,102,46,32,73,116,32,119,97,115,32,105,110,32,69,117,114,111,112,101,
-112,101,114,109,105,116,116,101,100,118,97,108,105,100,97,116,101,46,97,112,112,
-101,97,114,105,110,103,111,102,102,105,99,105,97,108,115,115,101,114,105,111,117
-,115,108,121,45,108,97,110,103,117,97,103,101,105,110,105,116,105,97,116,101,100
-,101,120,116,101,110,100,105,110,103,108,111,110,103,45,116,101,114,109,105,110,
-102,108,97,116,105,111,110,115,117,99,104,32,116,104,97,116,103,101,116,67,111,
-111,107,105,101,109,97,114,107,101,100,32,98,121,60,47,98,117,116,116,111,110,62
-,105,109,112,108,101,109,101,110,116,98,117,116,32,105,116,32,105,115,105,110,99
-,114,101,97,115,101,115,100,111,119,110,32,116,104,101,32,114,101,113,117,105,
-114,105,110,103,100,101,112,101,110,100,101,110,116,45,45,62,10,60,33,45,45,32,
-105,110,116,101,114,118,105,101,119,87,105,116,104,32,116,104,101,32,99,111,112,
-105,101,115,32,111,102,99,111,110,115,101,110,115,117,115,119,97,115,32,98,117,
-105,108,116,86,101,110,101,122,117,101,108,97,40,102,111,114,109,101,114,108,121
-,116,104,101,32,115,116,97,116,101,112,101,114,115,111,110,110,101,108,115,116,
-114,97,116,101,103,105,99,102,97,118,111,117,114,32,111,102,105,110,118,101,110,
-116,105,111,110,87,105,107,105,112,101,100,105,97,99,111,110,116,105,110,101,110
-,116,118,105,114,116,117,97,108,108,121,119,104,105,99,104,32,119,97,115,112,114
-,105,110,99,105,112,108,101,67,111,109,112,108,101,116,101,32,105,100,101,110,
-116,105,99,97,108,115,104,111,119,32,116,104,97,116,112,114,105,109,105,116,105,
-118,101,97,119,97,121,32,102,114,111,109,109,111,108,101,99,117,108,97,114,112,
-114,101,99,105,115,101,108,121,100,105,115,115,111,108,118,101,100,85,110,100,
-101,114,32,116,104,101,118,101,114,115,105,111,110,61,34,62,38,110,98,115,112,59
-,60,47,73,116,32,105,115,32,116,104,101,32,84,104,105,115,32,105,115,32,119,105,
-108,108,32,104,97,118,101,111,114,103,97,110,105,115,109,115,115,111,109,101,32,
-116,105,109,101,70,114,105,101,100,114,105,99,104,119,97,115,32,102,105,114,115,
-116,116,104,101,32,111,110,108,121,32,102,97,99,116,32,116,104,97,116,102,111,
-114,109,32,105,100,61,34,112,114,101,99,101,100,105,110,103,84,101,99,104,110,
-105,99,97,108,112,104,121,115,105,99,105,115,116,111,99,99,117,114,115,32,105,
-110,110,97,118,105,103,97,116,111,114,115,101,99,116,105,111,110,34,62,115,112,
-97,110,32,105,100,61,34,115,111,117,103,104,116,32,116,111,98,101,108,111,119,32
-,116,104,101,115,117,114,118,105,118,105,110,103,125,60,47,115,116,121,108,101,
-62,104,105,115,32,100,101,97,116,104,97,115,32,105,110,32,116,104,101,99,97,117,
-115,101,100,32,98,121,112,97,114,116,105,97,108,108,121,101,120,105,115,116,105,
-110,103,32,117,115,105,110,103,32,116,104,101,119,97,115,32,103,105,118,101,110,
-97,32,108,105,115,116,32,111,102,108,101,118,101,108,115,32,111,102,110,111,116,
-105,111,110,32,111,102,79,102,102,105,99,105,97,108,32,100,105,115,109,105,115,
-115,101,100,115,99,105,101,110,116,105,115,116,114,101,115,101,109,98,108,101,
-115,100,117,112,108,105,99,97,116,101,101,120,112,108,111,115,105,118,101,114,
-101,99,111,118,101,114,101,100,97,108,108,32,111,116,104,101,114,103,97,108,108,
-101,114,105,101,115,123,112,97,100,100,105,110,103,58,112,101,111,112,108,101,32
-,111,102,114,101,103,105,111,110,32,111,102,97,100,100,114,101,115,115,101,115,
-97,115,115,111,99,105,97,116,101,105,109,103,32,97,108,116,61,34,105,110,32,109,
-111,100,101,114,110,115,104,111,117,108,100,32,98,101,109,101,116,104,111,100,32
-,111,102,114,101,112,111,114,116,105,110,103,116,105,109,101,115,116,97,109,112,
-110,101,101,100,101,100,32,116,111,116,104,101,32,71,114,101,97,116,114,101,103,
-97,114,100,105,110,103,115,101,101,109,101,100,32,116,111,118,105,101,119,101,
-100,32,97,115,105,109,112,97,99,116,32,111,110,105,100,101,97,32,116,104,97,116,
-116,104,101,32,87,111,114,108,100,104,101,105,103,104,116,32,111,102,101,120,112
-,97,110,100,105,110,103,84,104,101,115,101,32,97,114,101,99,117,114,114,101,110,
-116,34,62,99,97,114,101,102,117,108,108,121,109,97,105,110,116,97,105,110,115,99
-,104,97,114,103,101,32,111,102,67,108,97,115,115,105,99,97,108,97,100,100,114,
-101,115,115,101,100,112,114,101,100,105,99,116,101,100,111,119,110,101,114,115,
-104,105,112,60,100,105,118,32,105,100,61,34,114,105,103,104,116,34,62,13,10,114,
-101,115,105,100,101,110,99,101,108,101,97,118,101,32,116,104,101,99,111,110,116,
-101,110,116,34,62,97,114,101,32,111,102,116,101,110,32,32,125,41,40,41,59,13,10,
-112,114,111,98,97,98,108,121,32,80,114,111,102,101,115,115,111,114,45,98,117,116
-,116,111,110,34,32,114,101,115,112,111,110,100,101,100,115,97,121,115,32,116,104
-,97,116,104,97,100,32,116,111,32,98,101,112,108,97,99,101,100,32,105,110,72,117,
-110,103,97,114,105,97,110,115,116,97,116,117,115,32,111,102,115,101,114,118,101,
-115,32,97,115,85,110,105,118,101,114,115,97,108,101,120,101,99,117,116,105,111,
-110,97,103,103,114,101,103,97,116,101,102,111,114,32,119,104,105,99,104,105,110,
-102,101,99,116,105,111,110,97,103,114,101,101,100,32,116,111,104,111,119,101,118
-,101,114,44,32,112,111,112,117,108,97,114,34,62,112,108,97,99,101,100,32,111,110
-,99,111,110,115,116,114,117,99,116,101,108,101,99,116,111,114,97,108,115,121,109
-,98,111,108,32,111,102,105,110,99,108,117,100,105,110,103,114,101,116,117,114,
-110,32,116,111,97,114,99,104,105,116,101,99,116,67,104,114,105,115,116,105,97,
-110,112,114,101,118,105,111,117,115,32,108,105,118,105,110,103,32,105,110,101,97
-,115,105,101,114,32,116,111,112,114,111,102,101,115,115,111,114,10,38,108,116,59
-,33,45,45,32,101,102,102,101,99,116,32,111,102,97,110,97,108,121,116,105,99,115,
-119,97,115,32,116,97,107,101,110,119,104,101,114,101,32,116,104,101,116,111,111,
-107,32,111,118,101,114,98,101,108,105,101,102,32,105,110,65,102,114,105,107,97,
-97,110,115,97,115,32,102,97,114,32,97,115,112,114,101,118,101,110,116,101,100,
-119,111,114,107,32,119,105,116,104,97,32,115,112,101,99,105,97,108,60,102,105,
-101,108,100,115,101,116,67,104,114,105,115,116,109,97,115,82,101,116,114,105,101
-,118,101,100,10,10,73,110,32,116,104,101,32,98,97,99,107,32,105,110,116,111,110,
-111,114,116,104,101,97,115,116,109,97,103,97,122,105,110,101,115,62,60,115,116,
-114,111,110,103,62,99,111,109,109,105,116,116,101,101,103,111,118,101,114,110,
-105,110,103,103,114,111,117,112,115,32,111,102,115,116,111,114,101,100,32,105,
-110,101,115,116,97,98,108,105,115,104,97,32,103,101,110,101,114,97,108,105,116,
-115,32,102,105,114,115,116,116,104,101,105,114,32,111,119,110,112,111,112,117,
-108,97,116,101,100,97,110,32,111,98,106,101,99,116,67,97,114,105,98,98,101,97,
-110,97,108,108,111,119,32,116,104,101,100,105,115,116,114,105,99,116,115,119,105
-,115,99,111,110,115,105,110,108,111,99,97,116,105,111,110,46,59,32,119,105,100,
-116,104,58,32,105,110,104,97,98,105,116,101,100,83,111,99,105,97,108,105,115,116
-,74,97,110,117,97,114,121,32,49,60,47,102,111,111,116,101,114,62,115,105,109,105
-,108,97,114,108,121,99,104,111,105,99,101,32,111,102,116,104,101,32,115,97,109,
-101,32,115,112,101,99,105,102,105,99,32,98,117,115,105,110,101,115,115,32,84,104
-,101,32,102,105,114,115,116,46,108,101,110,103,116,104,59,32,100,101,115,105,114
-,101,32,116,111,100,101,97,108,32,119,105,116,104,115,105,110,99,101,32,116,104,
-101,117,115,101,114,65,103,101,110,116,99,111,110,99,101,105,118,101,100,105,110
-,100,101,120,46,112,104,112,97,115,32,38,113,117,111,116,59,101,110,103,97,103,
-101,32,105,110,114,101,99,101,110,116,108,121,44,102,101,119,32,121,101,97,114,
-115,119,101,114,101,32,97,108,115,111,10,60,104,101,97,100,62,10,60,101,100,105,
-116,101,100,32,98,121,97,114,101,32,107,110,111,119,110,99,105,116,105,101,115,
-32,105,110,97,99,99,101,115,115,107,101,121,99,111,110,100,101,109,110,101,100,
-97,108,115,111,32,104,97,118,101,115,101,114,118,105,99,101,115,44,102,97,109,
-105,108,121,32,111,102,83,99,104,111,111,108,32,111,102,99,111,110,118,101,114,
-116,101,100,110,97,116,117,114,101,32,111,102,32,108,97,110,103,117,97,103,101,
-109,105,110,105,115,116,101,114,115,60,47,111,98,106,101,99,116,62,116,104,101,
-114,101,32,105,115,32,97,32,112,111,112,117,108,97,114,115,101,113,117,101,110,
-99,101,115,97,100,118,111,99,97,116,101,100,84,104,101,121,32,119,101,114,101,97
-,110,121,32,111,116,104,101,114,108,111,99,97,116,105,111,110,61,101,110,116,101
-,114,32,116,104,101,109,117,99,104,32,109,111,114,101,114,101,102,108,101,99,116
-,101,100,119,97,115,32,110,97,109,101,100,111,114,105,103,105,110,97,108,32,97,
-32,116,121,112,105,99,97,108,119,104,101,110,32,116,104,101,121,101,110,103,105,
-110,101,101,114,115,99,111,117,108,100,32,110,111,116,114,101,115,105,100,101,
-110,116,115,119,101,100,110,101,115,100,97,121,116,104,101,32,116,104,105,114,
-100,32,112,114,111,100,117,99,116,115,74,97,110,117,97,114,121,32,50,119,104,97,
-116,32,116,104,101,121,97,32,99,101,114,116,97,105,110,114,101,97,99,116,105,111
-,110,115,112,114,111,99,101,115,115,111,114,97,102,116,101,114,32,104,105,115,
-116,104,101,32,108,97,115,116,32,99,111,110,116,97,105,110,101,100,34,62,60,47,
-100,105,118,62,10,60,47,97,62,60,47,116,100,62,100,101,112,101,110,100,32,111,
-110,115,101,97,114,99,104,34,62,10,112,105,101,99,101,115,32,111,102,99,111,109,
-112,101,116,105,110,103,82,101,102,101,114,101,110,99,101,116,101,110,110,101,
-115,115,101,101,119,104,105,99,104,32,104,97,115,32,118,101,114,115,105,111,110,
-61,60,47,115,112,97,110,62,32,60,60,47,104,101,97,100,101,114,62,103,105,118,101
-,115,32,116,104,101,104,105,115,116,111,114,105,97,110,118,97,108,117,101,61,34,
-34,62,112,97,100,100,105,110,103,58,48,118,105,101,119,32,116,104,97,116,116,111
-,103,101,116,104,101,114,44,116,104,101,32,109,111,115,116,32,119,97,115,32,102,
-111,117,110,100,115,117,98,115,101,116,32,111,102,97,116,116,97,99,107,32,111,
-110,99,104,105,108,100,114,101,110,44,112,111,105,110,116,115,32,111,102,112,101
-,114,115,111,110,97,108,32,112,111,115,105,116,105,111,110,58,97,108,108,101,103
-,101,100,108,121,67,108,101,118,101,108,97,110,100,119,97,115,32,108,97,116,101,
-114,97,110,100,32,97,102,116,101,114,97,114,101,32,103,105,118,101,110,119,97,
-115,32,115,116,105,108,108,115,99,114,111,108,108,105,110,103,100,101,115,105,
-103,110,32,111,102,109,97,107,101,115,32,116,104,101,109,117,99,104,32,108,101,
-115,115,65,109,101,114,105,99,97,110,115,46,10,10,65,102,116,101,114,32,44,32,98
-,117,116,32,116,104,101,77,117,115,101,117,109,32,111,102,108,111,117,105,115,
-105,97,110,97,40,102,114,111,109,32,116,104,101,109,105,110,110,101,115,111,116,
-97,112,97,114,116,105,99,108,101,115,97,32,112,114,111,99,101,115,115,68,111,109
-,105,110,105,99,97,110,118,111,108,117,109,101,32,111,102,114,101,116,117,114,
-110,105,110,103,100,101,102,101,110,115,105,118,101,48,48,112,120,124,114,105,
-103,104,109,97,100,101,32,102,114,111,109,109,111,117,115,101,111,118,101,114,34
-,32,115,116,121,108,101,61,34,115,116,97,116,101,115,32,111,102,40,119,104,105,
-99,104,32,105,115,99,111,110,116,105,110,117,101,115,70,114,97,110,99,105,115,99
-,111,98,117,105,108,100,105,110,103,32,119,105,116,104,111,117,116,32,97,119,105
-,116,104,32,115,111,109,101,119,104,111,32,119,111,117,108,100,97,32,102,111,114
-,109,32,111,102,97,32,112,97,114,116,32,111,102,98,101,102,111,114,101,32,105,
-116,107,110,111,119,110,32,97,115,32,32,83,101,114,118,105,99,101,115,108,111,99
-,97,116,105,111,110,32,97,110,100,32,111,102,116,101,110,109,101,97,115,117,114,
-105,110,103,97,110,100,32,105,116,32,105,115,112,97,112,101,114,98,97,99,107,118
-,97,108,117,101,115,32,111,102,13,10,60,116,105,116,108,101,62,61,32,119,105,110
-,100,111,119,46,100,101,116,101,114,109,105,110,101,101,114,38,113,117,111,116,
-59,32,112,108,97,121,101,100,32,98,121,97,110,100,32,101,97,114,108,121,60,47,99
-,101,110,116,101,114,62,102,114,111,109,32,116,104,105,115,116,104,101,32,116,
-104,114,101,101,112,111,119,101,114,32,97,110,100,111,102,32,38,113,117,111,116,
-59,105,110,110,101,114,72,84,77,76,60,97,32,104,114,101,102,61,34,121,58,105,110
-,108,105,110,101,59,67,104,117,114,99,104,32,111,102,116,104,101,32,101,118,101,
-110,116,118,101,114,121,32,104,105,103,104,111,102,102,105,99,105,97,108,32,45,
-104,101,105,103,104,116,58,32,99,111,110,116,101,110,116,61,34,47,99,103,105,45,
-98,105,110,47,116,111,32,99,114,101,97,116,101,97,102,114,105,107,97,97,110,115,
-101,115,112,101,114,97,110,116,111,102,114,97,110,195,167,97,105,115,108,97,116,
-118,105,101,197,161,117,108,105,101,116,117,118,105,197,179,196,140,101,197,161,
-116,105,110,97,196,141,101,197,161,116,105,110,97,224,185,132,224,184,151,224,
-184,162,230,151,165,230,156,172,232,170,158,231,174,128,228,189,147,229,173,151,
-231,185,129,233,171,148,229,173,151,237,149,156,234,181,173,236,150,180,228,184,
-186,228,187,128,228,185,136,232,174,161,231,174,151,230,156,186,231,172,148,232,
-174,176,230,156,172,232,168,142,232,171,150,229,141,128,230,156,141,229,138,161,
-229,153,168,228,186,146,232,129,148,231,189,145,230,136,191,229,156,176,228,186,
-167,228,191,177,228,185,144,233,131,168,229,135,186,231,137,136,231,164,190,230,
-142,146,232,161,140,230,166,156,233,131,168,232,144,189,230,160,188,232,191,155,
-228,184,128,230,173,165,230,148,175,228,187,152,229,174,157,233,170,140,232,175,
-129,231,160,129,229,167,148,229,145,152,228,188,154,230,149,176,230,141,174,229,
-186,147,230,182,136,232,180,185,232,128,133,229,138,158,229,133,172,229,174,164,
-232,174,168,232,174,186,229,140,186,230,183,177,229,156,179,229,184,130,230,146,
-173,230,148,190,229,153,168,229,140,151,228,186,172,229,184,130,229,164,167,229,
-173,166,231,148,159,232,182,138,230,157,165,232,182,138,231,174,161,231,144,134,
-229,145,152,228,191,161,230,129,175,231,189,145,115,101,114,118,105,99,105,111,
-115,97,114,116,195,173,99,117,108,111,97,114,103,101,110,116,105,110,97,98,97,
-114,99,101,108,111,110,97,99,117,97,108,113,117,105,101,114,112,117,98,108,105,
-99,97,100,111,112,114,111,100,117,99,116,111,115,112,111,108,195,173,116,105,99,
-97,114,101,115,112,117,101,115,116,97,119,105,107,105,112,101,100,105,97,115,105
-,103,117,105,101,110,116,101,98,195,186,115,113,117,101,100,97,99,111,109,117,
-110,105,100,97,100,115,101,103,117,114,105,100,97,100,112,114,105,110,99,105,112
-,97,108,112,114,101,103,117,110,116,97,115,99,111,110,116,101,110,105,100,111,
-114,101,115,112,111,110,100,101,114,118,101,110,101,122,117,101,108,97,112,114,
-111,98,108,101,109,97,115,100,105,99,105,101,109,98,114,101,114,101,108,97,99,
-105,195,179,110,110,111,118,105,101,109,98,114,101,115,105,109,105,108,97,114,
-101,115,112,114,111,121,101,99,116,111,115,112,114,111,103,114,97,109,97,115,105
-,110,115,116,105,116,117,116,111,97,99,116,105,118,105,100,97,100,101,110,99,117
-,101,110,116,114,97,101,99,111,110,111,109,195,173,97,105,109,195,161,103,101,
-110,101,115,99,111,110,116,97,99,116,97,114,100,101,115,99,97,114,103,97,114,110
-,101,99,101,115,97,114,105,111,97,116,101,110,99,105,195,179,110,116,101,108,195
-,169,102,111,110,111,99,111,109,105,115,105,195,179,110,99,97,110,99,105,111,110
-,101,115,99,97,112,97,99,105,100,97,100,101,110,99,111,110,116,114,97,114,97,110
-,195,161,108,105,115,105,115,102,97,118,111,114,105,116,111,115,116,195,169,114,
-109,105,110,111,115,112,114,111,118,105,110,99,105,97,101,116,105,113,117,101,
-116,97,115,101,108,101,109,101,110,116,111,115,102,117,110,99,105,111,110,101,
-115,114,101,115,117,108,116,97,100,111,99,97,114,195,161,99,116,101,114,112,114,
-111,112,105,101,100,97,100,112,114,105,110,99,105,112,105,111,110,101,99,101,115
-,105,100,97,100,109,117,110,105,99,105,112,97,108,99,114,101,97,99,105,195,179,
-110,100,101,115,99,97,114,103,97,115,112,114,101,115,101,110,99,105,97,99,111,
-109,101,114,99,105,97,108,111,112,105,110,105,111,110,101,115,101,106,101,114,99
-,105,99,105,111,101,100,105,116,111,114,105,97,108,115,97,108,97,109,97,110,99,
-97,103,111,110,122,195,161,108,101,122,100,111,99,117,109,101,110,116,111,112,
-101,108,195,173,99,117,108,97,114,101,99,105,101,110,116,101,115,103,101,110,101
-,114,97,108,101,115,116,97,114,114,97,103,111,110,97,112,114,195,161,99,116,105,
-99,97,110,111,118,101,100,97,100,101,115,112,114,111,112,117,101,115,116,97,112,
-97,99,105,101,110,116,101,115,116,195,169,99,110,105,99,97,115,111,98,106,101,
-116,105,118,111,115,99,111,110,116,97,99,116,111,115,224,164,174,224,165,135,224
-,164,130,224,164,178,224,164,191,224,164,143,224,164,185,224,165,136,224,164,130
-,224,164,151,224,164,175,224,164,190,224,164,184,224,164,190,224,164,165,224,164
-,143,224,164,181,224,164,130,224,164,176,224,164,185,224,165,135,224,164,149,224
-,165,139,224,164,136,224,164,149,224,165,129,224,164,155,224,164,176,224,164,185
-,224,164,190,224,164,172,224,164,190,224,164,166,224,164,149,224,164,185,224,164
-,190,224,164,184,224,164,173,224,165,128,224,164,185,224,165,129,224,164,143,224
-,164,176,224,164,185,224,165,128,224,164,174,224,165,136,224,164,130,224,164,166
-,224,164,191,224,164,168,224,164,172,224,164,190,224,164,164,100,105,112,108,111
-,100,111,99,115,224,164,184,224,164,174,224,164,175,224,164,176,224,165,130,224,
-164,170,224,164,168,224,164,190,224,164,174,224,164,170,224,164,164,224,164,190,
-224,164,171,224,164,191,224,164,176,224,164,148,224,164,184,224,164,164,224,164,
-164,224,164,176,224,164,185,224,164,178,224,165,139,224,164,151,224,164,185,224,
-165,129,224,164,134,224,164,172,224,164,190,224,164,176,224,164,166,224,165,135,
-224,164,182,224,164,185,224,165,129,224,164,136,224,164,150,224,165,135,224,164,
-178,224,164,175,224,164,166,224,164,191,224,164,149,224,164,190,224,164,174,224,
-164,181,224,165,135,224,164,172,224,164,164,224,165,128,224,164,168,224,164,172,
-224,165,128,224,164,154,224,164,174,224,165,140,224,164,164,224,164,184,224,164,
-190,224,164,178,224,164,178,224,165,135,224,164,150,224,164,156,224,165,137,224,
-164,172,224,164,174,224,164,166,224,164,166,224,164,164,224,164,165,224,164,190,
-224,164,168,224,164,185,224,165,128,224,164,182,224,164,185,224,164,176,224,164,
-133,224,164,178,224,164,151,224,164,149,224,164,173,224,165,128,224,164,168,224,
-164,151,224,164,176,224,164,170,224,164,190,224,164,184,224,164,176,224,164,190,
-224,164,164,224,164,149,224,164,191,224,164,143,224,164,137,224,164,184,224,165,
-135,224,164,151,224,164,175,224,165,128,224,164,185,224,165,130,224,164,129,224,
-164,134,224,164,151,224,165,135,224,164,159,224,165,128,224,164,174,224,164,150,
-224,165,139,224,164,156,224,164,149,224,164,190,224,164,176,224,164,133,224,164,
-173,224,165,128,224,164,151,224,164,175,224,165,135,224,164,164,224,165,129,224,
-164,174,224,164,181,224,165,139,224,164,159,224,164,166,224,165,135,224,164,130,
-224,164,133,224,164,151,224,164,176,224,164,144,224,164,184,224,165,135,224,164,
-174,224,165,135,224,164,178,224,164,178,224,164,151,224,164,190,224,164,185,224,
-164,190,224,164,178,224,164,138,224,164,170,224,164,176,224,164,154,224,164,190,
-224,164,176,224,164,144,224,164,184,224,164,190,224,164,166,224,165,135,224,164,
-176,224,164,156,224,164,191,224,164,184,224,164,166,224,164,191,224,164,178,224,
-164,172,224,164,130,224,164,166,224,164,172,224,164,168,224,164,190,224,164,185,
-224,165,130,224,164,130,224,164,178,224,164,190,224,164,150,224,164,156,224,165,
-128,224,164,164,224,164,172,224,164,159,224,164,168,224,164,174,224,164,191,224,
-164,178,224,164,135,224,164,184,224,165,135,224,164,134,224,164,168,224,165,135,
-224,164,168,224,164,175,224,164,190,224,164,149,224,165,129,224,164,178,224,164,
-178,224,165,137,224,164,151,224,164,173,224,164,190,224,164,151,224,164,176,224,
-165,135,224,164,178,224,164,156,224,164,151,224,164,185,224,164,176,224,164,190,
-224,164,174,224,164,178,224,164,151,224,165,135,224,164,170,224,165,135,224,164,
-156,224,164,185,224,164,190,224,164,165,224,164,135,224,164,184,224,165,128,224,
-164,184,224,164,185,224,165,128,224,164,149,224,164,178,224,164,190,224,164,160,
-224,165,128,224,164,149,224,164,185,224,164,190,224,164,129,224,164,166,224,165,
-130,224,164,176,224,164,164,224,164,185,224,164,164,224,164,184,224,164,190,224,
-164,164,224,164,175,224,164,190,224,164,166,224,164,134,224,164,175,224,164,190,
-224,164,170,224,164,190,224,164,149,224,164,149,224,165,140,224,164,168,224,164,
-182,224,164,190,224,164,174,224,164,166,224,165,135,224,164,150,224,164,175,224,
-164,185,224,165,128,224,164,176,224,164,190,224,164,175,224,164,150,224,165,129,
-224,164,166,224,164,178,224,164,151,224,165,128,99,97,116,101,103,111,114,105,
-101,115,101,120,112,101,114,105,101,110,99,101,60,47,116,105,116,108,101,62,13,
-10,67,111,112,121,114,105,103,104,116,32,106,97,118,97,115,99,114,105,112,116,99
-,111,110,100,105,116,105,111,110,115,101,118,101,114,121,116,104,105,110,103,60,
-112,32,99,108,97,115,115,61,34,116,101,99,104,110,111,108,111,103,121,98,97,99,
-107,103,114,111,117,110,100,60,97,32,99,108,97,115,115,61,34,109,97,110,97,103,
-101,109,101,110,116,38,99,111,112,121,59,32,50,48,49,106,97,118,97,83,99,114,105
-,112,116,99,104,97,114,97,99,116,101,114,115,98,114,101,97,100,99,114,117,109,98
-,116,104,101,109,115,101,108,118,101,115,104,111,114,105,122,111,110,116,97,108,
-103,111,118,101,114,110,109,101,110,116,67,97,108,105,102,111,114,110,105,97,97,
-99,116,105,118,105,116,105,101,115,100,105,115,99,111,118,101,114,101,100,78,97,
-118,105,103,97,116,105,111,110,116,114,97,110,115,105,116,105,111,110,99,111,110
-,110,101,99,116,105,111,110,110,97,118,105,103,97,116,105,111,110,97,112,112,101
-,97,114,97,110,99,101,60,47,116,105,116,108,101,62,60,109,99,104,101,99,107,98,
-111,120,34,32,116,101,99,104,110,105,113,117,101,115,112,114,111,116,101,99,116,
-105,111,110,97,112,112,97,114,101,110,116,108,121,97,115,32,119,101,108,108,32,
-97,115,117,110,116,39,44,32,39,85,65,45,114,101,115,111,108,117,116,105,111,110,
-111,112,101,114,97,116,105,111,110,115,116,101,108,101,118,105,115,105,111,110,
-116,114,97,110,115,108,97,116,101,100,87,97,115,104,105,110,103,116,111,110,110,
-97,118,105,103,97,116,111,114,46,32,61,32,119,105,110,100,111,119,46,105,109,112
-,114,101,115,115,105,111,110,38,108,116,59,98,114,38,103,116,59,108,105,116,101,
-114,97,116,117,114,101,112,111,112,117,108,97,116,105,111,110,98,103,99,111,108,
-111,114,61,34,35,101,115,112,101,99,105,97,108,108,121,32,99,111,110,116,101,110
-,116,61,34,112,114,111,100,117,99,116,105,111,110,110,101,119,115,108,101,116,
-116,101,114,112,114,111,112,101,114,116,105,101,115,100,101,102,105,110,105,116,
-105,111,110,108,101,97,100,101,114,115,104,105,112,84,101,99,104,110,111,108,111
-,103,121,80,97,114,108,105,97,109,101,110,116,99,111,109,112,97,114,105,115,111,
-110,117,108,32,99,108,97,115,115,61,34,46,105,110,100,101,120,79,102,40,34,99,
-111,110,99,108,117,115,105,111,110,100,105,115,99,117,115,115,105,111,110,99,111
-,109,112,111,110,101,110,116,115,98,105,111,108,111,103,105,99,97,108,82,101,118
-,111,108,117,116,105,111,110,95,99,111,110,116,97,105,110,101,114,117,110,100,
-101,114,115,116,111,111,100,110,111,115,99,114,105,112,116,62,60,112,101,114,109
-,105,115,115,105,111,110,101,97,99,104,32,111,116,104,101,114,97,116,109,111,115
-,112,104,101,114,101,32,111,110,102,111,99,117,115,61,34,60,102,111,114,109,32,
-105,100,61,34,112,114,111,99,101,115,115,105,110,103,116,104,105,115,46,118,97,
-108,117,101,103,101,110,101,114,97,116,105,111,110,67,111,110,102,101,114,101,
-110,99,101,115,117,98,115,101,113,117,101,110,116,119,101,108,108,45,107,110,111
-,119,110,118,97,114,105,97,116,105,111,110,115,114,101,112,117,116,97,116,105,
-111,110,112,104,101,110,111,109,101,110,111,110,100,105,115,99,105,112,108,105,
-110,101,108,111,103,111,46,112,110,103,34,32,40,100,111,99,117,109,101,110,116,
-44,98,111,117,110,100,97,114,105,101,115,101,120,112,114,101,115,115,105,111,110
-,115,101,116,116,108,101,109,101,110,116,66,97,99,107,103,114,111,117,110,100,
-111,117,116,32,111,102,32,116,104,101,101,110,116,101,114,112,114,105,115,101,40
-,34,104,116,116,112,115,58,34,32,117,110,101,115,99,97,112,101,40,34,112,97,115,
-115,119,111,114,100,34,32,100,101,109,111,99,114,97,116,105,99,60,97,32,104,114,
-101,102,61,34,47,119,114,97,112,112,101,114,34,62,10,109,101,109,98,101,114,115,
-104,105,112,108,105,110,103,117,105,115,116,105,99,112,120,59,112,97,100,100,105
-,110,103,112,104,105,108,111,115,111,112,104,121,97,115,115,105,115,116,97,110,
-99,101,117,110,105,118,101,114,115,105,116,121,102,97,99,105,108,105,116,105,101
-,115,114,101,99,111,103,110,105,122,101,100,112,114,101,102,101,114,101,110,99,
-101,105,102,32,40,116,121,112,101,111,102,109,97,105,110,116,97,105,110,101,100,
-118,111,99,97,98,117,108,97,114,121,104,121,112,111,116,104,101,115,105,115,46,
-115,117,98,109,105,116,40,41,59,38,97,109,112,59,110,98,115,112,59,97,110,110,
-111,116,97,116,105,111,110,98,101,104,105,110,100,32,116,104,101,70,111,117,110,
-100,97,116,105,111,110,112,117,98,108,105,115,104,101,114,34,97,115,115,117,109,
-112,116,105,111,110,105,110,116,114,111,100,117,99,101,100,99,111,114,114,117,
-112,116,105,111,110,115,99,105,101,110,116,105,115,116,115,101,120,112,108,105,
-99,105,116,108,121,105,110,115,116,101,97,100,32,111,102,100,105,109,101,110,115
-,105,111,110,115,32,111,110,67,108,105,99,107,61,34,99,111,110,115,105,100,101,
-114,101,100,100,101,112,97,114,116,109,101,110,116,111,99,99,117,112,97,116,105,
-111,110,115,111,111,110,32,97,102,116,101,114,105,110,118,101,115,116,109,101,
-110,116,112,114,111,110,111,117,110,99,101,100,105,100,101,110,116,105,102,105,
-101,100,101,120,112,101,114,105,109,101,110,116,77,97,110,97,103,101,109,101,110
-,116,103,101,111,103,114,97,112,104,105,99,34,32,104,101,105,103,104,116,61,34,
-108,105,110,107,32,114,101,108,61,34,46,114,101,112,108,97,99,101,40,47,100,101,
-112,114,101,115,115,105,111,110,99,111,110,102,101,114,101,110,99,101,112,117,
-110,105,115,104,109,101,110,116,101,108,105,109,105,110,97,116,101,100,114,101,
-115,105,115,116,97,110,99,101,97,100,97,112,116,97,116,105,111,110,111,112,112,
-111,115,105,116,105,111,110,119,101,108,108,32,107,110,111,119,110,115,117,112,
-112,108,101,109,101,110,116,100,101,116,101,114,109,105,110,101,100,104,49,32,99
-,108,97,115,115,61,34,48,112,120,59,109,97,114,103,105,110,109,101,99,104,97,110
-,105,99,97,108,115,116,97,116,105,115,116,105,99,115,99,101,108,101,98,114,97,
-116,101,100,71,111,118,101,114,110,109,101,110,116,10,10,68,117,114,105,110,103,
-32,116,100,101,118,101,108,111,112,101,114,115,97,114,116,105,102,105,99,105,97,
-108,101,113,117,105,118,97,108,101,110,116,111,114,105,103,105,110,97,116,101,
-100,67,111,109,109,105,115,115,105,111,110,97,116,116,97,99,104,109,101,110,116,
-60,115,112,97,110,32,105,100,61,34,116,104,101,114,101,32,119,101,114,101,78,101
-,100,101,114,108,97,110,100,115,98,101,121,111,110,100,32,116,104,101,114,101,
-103,105,115,116,101,114,101,100,106,111,117,114,110,97,108,105,115,116,102,114,
-101,113,117,101,110,116,108,121,97,108,108,32,111,102,32,116,104,101,108,97,110,
-103,61,34,101,110,34,32,60,47,115,116,121,108,101,62,13,10,97,98,115,111,108,117
-,116,101,59,32,115,117,112,112,111,114,116,105,110,103,101,120,116,114,101,109,
-101,108,121,32,109,97,105,110,115,116,114,101,97,109,60,47,115,116,114,111,110,
-103,62,32,112,111,112,117,108,97,114,105,116,121,101,109,112,108,111,121,109,101
-,110,116,60,47,116,97,98,108,101,62,13,10,32,99,111,108,115,112,97,110,61,34,60,
-47,102,111,114,109,62,10,32,32,99,111,110,118,101,114,115,105,111,110,97,98,111,
-117,116,32,116,104,101,32,60,47,112,62,60,47,100,105,118,62,105,110,116,101,103,
-114,97,116,101,100,34,32,108,97,110,103,61,34,101,110,80,111,114,116,117,103,117
-,101,115,101,115,117,98,115,116,105,116,117,116,101,105,110,100,105,118,105,100,
-117,97,108,105,109,112,111,115,115,105,98,108,101,109,117,108,116,105,109,101,
-100,105,97,97,108,109,111,115,116,32,97,108,108,112,120,32,115,111,108,105,100,
-32,35,97,112,97,114,116,32,102,114,111,109,115,117,98,106,101,99,116,32,116,111,
-105,110,32,69,110,103,108,105,115,104,99,114,105,116,105,99,105,122,101,100,101,
-120,99,101,112,116,32,102,111,114,103,117,105,100,101,108,105,110,101,115,111,
-114,105,103,105,110,97,108,108,121,114,101,109,97,114,107,97,98,108,101,116,104,
-101,32,115,101,99,111,110,100,104,50,32,99,108,97,115,115,61,34,60,97,32,116,105
-,116,108,101,61,34,40,105,110,99,108,117,100,105,110,103,112,97,114,97,109,101,
-116,101,114,115,112,114,111,104,105,98,105,116,101,100,61,32,34,104,116,116,112,
-58,47,47,100,105,99,116,105,111,110,97,114,121,112,101,114,99,101,112,116,105,
-111,110,114,101,118,111,108,117,116,105,111,110,102,111,117,110,100,97,116,105,
-111,110,112,120,59,104,101,105,103,104,116,58,115,117,99,99,101,115,115,102,117,
-108,115,117,112,112,111,114,116,101,114,115,109,105,108,108,101,110,110,105,117,
-109,104,105,115,32,102,97,116,104,101,114,116,104,101,32,38,113,117,111,116,59,
-110,111,45,114,101,112,101,97,116,59,99,111,109,109,101,114,99,105,97,108,105,
-110,100,117,115,116,114,105,97,108,101,110,99,111,117,114,97,103,101,100,97,109,
-111,117,110,116,32,111,102,32,117,110,111,102,102,105,99,105,97,108,101,102,102,
-105,99,105,101,110,99,121,82,101,102,101,114,101,110,99,101,115,99,111,111,114,
-100,105,110,97,116,101,100,105,115,99,108,97,105,109,101,114,101,120,112,101,100
-,105,116,105,111,110,100,101,118,101,108,111,112,105,110,103,99,97,108,99,117,
-108,97,116,101,100,115,105,109,112,108,105,102,105,101,100,108,101,103,105,116,
-105,109,97,116,101,115,117,98,115,116,114,105,110,103,40,48,34,32,99,108,97,115,
-115,61,34,99,111,109,112,108,101,116,101,108,121,105,108,108,117,115,116,114,97,
-116,101,102,105,118,101,32,121,101,97,114,115,105,110,115,116,114,117,109,101,
-110,116,80,117,98,108,105,115,104,105,110,103,49,34,32,99,108,97,115,115,61,34,
-112,115,121,99,104,111,108,111,103,121,99,111,110,102,105,100,101,110,99,101,110
-,117,109,98,101,114,32,111,102,32,97,98,115,101,110,99,101,32,111,102,102,111,99
-,117,115,101,100,32,111,110,106,111,105,110,101,100,32,116,104,101,115,116,114,
-117,99,116,117,114,101,115,112,114,101,118,105,111,117,115,108,121,62,60,47,105,
-102,114,97,109,101,62,111,110,99,101,32,97,103,97,105,110,98,117,116,32,114,97,
-116,104,101,114,105,109,109,105,103,114,97,110,116,115,111,102,32,99,111,117,114
-,115,101,44,97,32,103,114,111,117,112,32,111,102,76,105,116,101,114,97,116,117,
-114,101,85,110,108,105,107,101,32,116,104,101,60,47,97,62,38,110,98,115,112,59,
-10,102,117,110,99,116,105,111,110,32,105,116,32,119,97,115,32,116,104,101,67,111
-,110,118,101,110,116,105,111,110,97,117,116,111,109,111,98,105,108,101,80,114,
-111,116,101,115,116,97,110,116,97,103,103,114,101,115,115,105,118,101,97,102,116
-,101,114,32,116,104,101,32,83,105,109,105,108,97,114,108,121,44,34,32,47,62,60,
-47,100,105,118,62,99,111,108,108,101,99,116,105,111,110,13,10,102,117,110,99,116
-,105,111,110,118,105,115,105,98,105,108,105,116,121,116,104,101,32,117,115,101,
-32,111,102,118,111,108,117,110,116,101,101,114,115,97,116,116,114,97,99,116,105,
-111,110,117,110,100,101,114,32,116,104,101,32,116,104,114,101,97,116,101,110,101
-,100,42,60,33,91,67,68,65,84,65,91,105,109,112,111,114,116,97,110,99,101,105,110
-,32,103,101,110,101,114,97,108,116,104,101,32,108,97,116,116,101,114,60,47,102,
-111,114,109,62,10,60,47,46,105,110,100,101,120,79,102,40,39,105,32,61,32,48,59,
-32,105,32,60,100,105,102,102,101,114,101,110,99,101,100,101,118,111,116,101,100,
-32,116,111,116,114,97,100,105,116,105,111,110,115,115,101,97,114,99,104,32,102,
-111,114,117,108,116,105,109,97,116,101,108,121,116,111,117,114,110,97,109,101,
-110,116,97,116,116,114,105,98,117,116,101,115,115,111,45,99,97,108,108,101,100,
-32,125,10,60,47,115,116,121,108,101,62,101,118,97,108,117,97,116,105,111,110,101
-,109,112,104,97,115,105,122,101,100,97,99,99,101,115,115,105,98,108,101,60,47,
-115,101,99,116,105,111,110,62,115,117,99,99,101,115,115,105,111,110,97,108,111,
-110,103,32,119,105,116,104,77,101,97,110,119,104,105,108,101,44,105,110,100,117,
-115,116,114,105,101,115,60,47,97,62,60,98,114,32,47,62,104,97,115,32,98,101,99,
-111,109,101,97,115,112,101,99,116,115,32,111,102,84,101,108,101,118,105,115,105,
-111,110,115,117,102,102,105,99,105,101,110,116,98,97,115,107,101,116,98,97,108,
-108,98,111,116,104,32,115,105,100,101,115,99,111,110,116,105,110,117,105,110,103
-,97,110,32,97,114,116,105,99,108,101,60,105,109,103,32,97,108,116,61,34,97,100,
-118,101,110,116,117,114,101,115,104,105,115,32,109,111,116,104,101,114,109,97,
-110,99,104,101,115,116,101,114,112,114,105,110,99,105,112,108,101,115,112,97,114
-,116,105,99,117,108,97,114,99,111,109,109,101,110,116,97,114,121,101,102,102,101
-,99,116,115,32,111,102,100,101,99,105,100,101,100,32,116,111,34,62,60,115,116,
-114,111,110,103,62,112,117,98,108,105,115,104,101,114,115,74,111,117,114,110,97,
-108,32,111,102,100,105,102,102,105,99,117,108,116,121,102,97,99,105,108,105,116,
-97,116,101,97,99,99,101,112,116,97,98,108,101,115,116,121,108,101,46,99,115,115,
-34,9,102,117,110,99,116,105,111,110,32,105,110,110,111,118,97,116,105,111,110,62
-,67,111,112,121,114,105,103,104,116,115,105,116,117,97,116,105,111,110,115,119,
-111,117,108,100,32,104,97,118,101,98,117,115,105,110,101,115,115,101,115,68,105,
-99,116,105,111,110,97,114,121,115,116,97,116,101,109,101,110,116,115,111,102,116
-,101,110,32,117,115,101,100,112,101,114,115,105,115,116,101,110,116,105,110,32,
-74,97,110,117,97,114,121,99,111,109,112,114,105,115,105,110,103,60,47,116,105,
-116,108,101,62,10,9,100,105,112,108,111,109,97,116,105,99,99,111,110,116,97,105,
-110,105,110,103,112,101,114,102,111,114,109,105,110,103,101,120,116,101,110,115,
-105,111,110,115,109,97,121,32,110,111,116,32,98,101,99,111,110,99,101,112,116,32
-,111,102,32,111,110,99,108,105,99,107,61,34,73,116,32,105,115,32,97,108,115,111,
-102,105,110,97,110,99,105,97,108,32,109,97,107,105,110,103,32,116,104,101,76,117
-,120,101,109,98,111,117,114,103,97,100,100,105,116,105,111,110,97,108,97,114,101
-,32,99,97,108,108,101,100,101,110,103,97,103,101,100,32,105,110,34,115,99,114,
-105,112,116,34,41,59,98,117,116,32,105,116,32,119,97,115,101,108,101,99,116,114,
-111,110,105,99,111,110,115,117,98,109,105,116,61,34,10,60,33,45,45,32,69,110,100
-,32,101,108,101,99,116,114,105,99,97,108,111,102,102,105,99,105,97,108,108,121,
-115,117,103,103,101,115,116,105,111,110,116,111,112,32,111,102,32,116,104,101,
-117,110,108,105,107,101,32,116,104,101,65,117,115,116,114,97,108,105,97,110,79,
-114,105,103,105,110,97,108,108,121,114,101,102,101,114,101,110,99,101,115,10,60,
-47,104,101,97,100,62,13,10,114,101,99,111,103,110,105,115,101,100,105,110,105,
-116,105,97,108,105,122,101,108,105,109,105,116,101,100,32,116,111,65,108,101,120
-,97,110,100,114,105,97,114,101,116,105,114,101,109,101,110,116,65,100,118,101,
-110,116,117,114,101,115,102,111,117,114,32,121,101,97,114,115,10,10,38,108,116,
-59,33,45,45,32,105,110,99,114,101,97,115,105,110,103,100,101,99,111,114,97,116,
-105,111,110,104,51,32,99,108,97,115,115,61,34,111,114,105,103,105,110,115,32,111
-,102,111,98,108,105,103,97,116,105,111,110,114,101,103,117,108,97,116,105,111,
-110,99,108,97,115,115,105,102,105,101,100,40,102,117,110,99,116,105,111,110,40,
-97,100,118,97,110,116,97,103,101,115,98,101,105,110,103,32,116,104,101,32,104,
-105,115,116,111,114,105,97,110,115,60,98,97,115,101,32,104,114,101,102,114,101,
-112,101,97,116,101,100,108,121,119,105,108,108,105,110,103,32,116,111,99,111,109
-,112,97,114,97,98,108,101,100,101,115,105,103,110,97,116,101,100,110,111,109,105
-,110,97,116,105,111,110,102,117,110,99,116,105,111,110,97,108,105,110,115,105,
-100,101,32,116,104,101,114,101,118,101,108,97,116,105,111,110,101,110,100,32,111
-,102,32,116,104,101,115,32,102,111,114,32,116,104,101,32,97,117,116,104,111,114,
-105,122,101,100,114,101,102,117,115,101,100,32,116,111,116,97,107,101,32,112,108
-,97,99,101,97,117,116,111,110,111,109,111,117,115,99,111,109,112,114,111,109,105
-,115,101,112,111,108,105,116,105,99,97,108,32,114,101,115,116,97,117,114,97,110,
-116,116,119,111,32,111,102,32,116,104,101,70,101,98,114,117,97,114,121,32,50,113
-,117,97,108,105,116,121,32,111,102,115,119,102,111,98,106,101,99,116,46,117,110,
-100,101,114,115,116,97,110,100,110,101,97,114,108,121,32,97,108,108,119,114,105,
-116,116,101,110,32,98,121,105,110,116,101,114,118,105,101,119,115,34,32,119,105,
-100,116,104,61,34,49,119,105,116,104,100,114,97,119,97,108,102,108,111,97,116,58
-,108,101,102,116,105,115,32,117,115,117,97,108,108,121,99,97,110,100,105,100,97,
-116,101,115,110,101,119,115,112,97,112,101,114,115,109,121,115,116,101,114,105,
-111,117,115,68,101,112,97,114,116,109,101,110,116,98,101,115,116,32,107,110,111,
-119,110,112,97,114,108,105,97,109,101,110,116,115,117,112,112,114,101,115,115,
-101,100,99,111,110,118,101,110,105,101,110,116,114,101,109,101,109,98,101,114,
-101,100,100,105,102,102,101,114,101,110,116,32,115,121,115,116,101,109,97,116,
-105,99,104,97,115,32,108,101,100,32,116,111,112,114,111,112,97,103,97,110,100,97
-,99,111,110,116,114,111,108,108,101,100,105,110,102,108,117,101,110,99,101,115,
-99,101,114,101,109,111,110,105,97,108,112,114,111,99,108,97,105,109,101,100,80,
-114,111,116,101,99,116,105,111,110,108,105,32,99,108,97,115,115,61,34,83,99,105,
-101,110,116,105,102,105,99,99,108,97,115,115,61,34,110,111,45,116,114,97,100,101
-,109,97,114,107,115,109,111,114,101,32,116,104,97,110,32,119,105,100,101,115,112
-,114,101,97,100,76,105,98,101,114,97,116,105,111,110,116,111,111,107,32,112,108,
-97,99,101,100,97,121,32,111,102,32,116,104,101,97,115,32,108,111,110,103,32,97,
-115,105,109,112,114,105,115,111,110,101,100,65,100,100,105,116,105,111,110,97,
-108,10,60,104,101,97,100,62,10,60,109,76,97,98,111,114,97,116,111,114,121,78,111
-,118,101,109,98,101,114,32,50,101,120,99,101,112,116,105,111,110,115,73,110,100,
-117,115,116,114,105,97,108,118,97,114,105,101,116,121,32,111,102,102,108,111,97,
-116,58,32,108,101,102,68,117,114,105,110,103,32,116,104,101,97,115,115,101,115,
-115,109,101,110,116,104,97,118,101,32,98,101,101,110,32,100,101,97,108,115,32,
-119,105,116,104,83,116,97,116,105,115,116,105,99,115,111,99,99,117,114,114,101,
-110,99,101,47,117,108,62,60,47,100,105,118,62,99,108,101,97,114,102,105,120,34,
-62,116,104,101,32,112,117,98,108,105,99,109,97,110,121,32,121,101,97,114,115,119
-,104,105,99,104,32,119,101,114,101,111,118,101,114,32,116,105,109,101,44,115,121
-,110,111,110,121,109,111,117,115,99,111,110,116,101,110,116,34,62,10,112,114,101
-,115,117,109,97,98,108,121,104,105,115,32,102,97,109,105,108,121,117,115,101,114
-,65,103,101,110,116,46,117,110,101,120,112,101,99,116,101,100,105,110,99,108,117
-,100,105,110,103,32,99,104,97,108,108,101,110,103,101,100,97,32,109,105,110,111,
-114,105,116,121,117,110,100,101,102,105,110,101,100,34,98,101,108,111,110,103,
-115,32,116,111,116,97,107,101,110,32,102,114,111,109,105,110,32,79,99,116,111,98
-,101,114,112,111,115,105,116,105,111,110,58,32,115,97,105,100,32,116,111,32,98,
-101,114,101,108,105,103,105,111,117,115,32,70,101,100,101,114,97,116,105,111,110
-,32,114,111,119,115,112,97,110,61,34,111,110,108,121,32,97,32,102,101,119,109,
-101,97,110,116,32,116,104,97,116,108,101,100,32,116,111,32,116,104,101,45,45,62,
-13,10,60,100,105,118,32,60,102,105,101,108,100,115,101,116,62,65,114,99,104,98,
-105,115,104,111,112,32,99,108,97,115,115,61,34,110,111,98,101,105,110,103,32,117
-,115,101,100,97,112,112,114,111,97,99,104,101,115,112,114,105,118,105,108,101,
-103,101,115,110,111,115,99,114,105,112,116,62,10,114,101,115,117,108,116,115,32,
-105,110,109,97,121,32,98,101,32,116,104,101,69,97,115,116,101,114,32,101,103,103
-,109,101,99,104,97,110,105,115,109,115,114,101,97,115,111,110,97,98,108,101,80,
-111,112,117,108,97,116,105,111,110,67,111,108,108,101,99,116,105,111,110,115,101
-,108,101,99,116,101,100,34,62,110,111,115,99,114,105,112,116,62,13,47,105,110,
-100,101,120,46,112,104,112,97,114,114,105,118,97,108,32,111,102,45,106,115,115,
-100,107,39,41,41,59,109,97,110,97,103,101,100,32,116,111,105,110,99,111,109,112,
-108,101,116,101,99,97,115,117,97,108,116,105,101,115,99,111,109,112,108,101,116,
-105,111,110,67,104,114,105,115,116,105,97,110,115,83,101,112,116,101,109,98,101,
-114,32,97,114,105,116,104,109,101,116,105,99,112,114,111,99,101,100,117,114,101,
-115,109,105,103,104,116,32,104,97,118,101,80,114,111,100,117,99,116,105,111,110,
-105,116,32,97,112,112,101,97,114,115,80,104,105,108,111,115,111,112,104,121,102,
-114,105,101,110,100,115,104,105,112,108,101,97,100,105,110,103,32,116,111,103,
-105,118,105,110,103,32,116,104,101,116,111,119,97,114,100,32,116,104,101,103,117
-,97,114,97,110,116,101,101,100,100,111,99,117,109,101,110,116,101,100,99,111,108
-,111,114,58,35,48,48,48,118,105,100,101,111,32,103,97,109,101,99,111,109,109,105
-,115,115,105,111,110,114,101,102,108,101,99,116,105,110,103,99,104,97,110,103,
-101,32,116,104,101,97,115,115,111,99,105,97,116,101,100,115,97,110,115,45,115,
-101,114,105,102,111,110,107,101,121,112,114,101,115,115,59,32,112,97,100,100,105
-,110,103,58,72,101,32,119,97,115,32,116,104,101,117,110,100,101,114,108,121,105,
-110,103,116,121,112,105,99,97,108,108,121,32,44,32,97,110,100,32,116,104,101,32,
-115,114,99,69,108,101,109,101,110,116,115,117,99,99,101,115,115,105,118,101,115,
-105,110,99,101,32,116,104,101,32,115,104,111,117,108,100,32,98,101,32,110,101,
-116,119,111,114,107,105,110,103,97,99,99,111,117,110,116,105,110,103,117,115,101
-,32,111,102,32,116,104,101,108,111,119,101,114,32,116,104,97,110,115,104,111,119
-,115,32,116,104,97,116,60,47,115,112,97,110,62,10,9,9,99,111,109,112,108,97,105,
-110,116,115,99,111,110,116,105,110,117,111,117,115,113,117,97,110,116,105,116,
-105,101,115,97,115,116,114,111,110,111,109,101,114,104,101,32,100,105,100,32,110
-,111,116,100,117,101,32,116,111,32,105,116,115,97,112,112,108,105,101,100,32,116
-,111,97,110,32,97,118,101,114,97,103,101,101,102,102,111,114,116,115,32,116,111,
-116,104,101,32,102,117,116,117,114,101,97,116,116,101,109,112,116,32,116,111,84,
-104,101,114,101,102,111,114,101,44,99,97,112,97,98,105,108,105,116,121,82,101,
-112,117,98,108,105,99,97,110,119,97,115,32,102,111,114,109,101,100,69,108,101,99
-,116,114,111,110,105,99,107,105,108,111,109,101,116,101,114,115,99,104,97,108,
-108,101,110,103,101,115,112,117,98,108,105,115,104,105,110,103,116,104,101,32,
-102,111,114,109,101,114,105,110,100,105,103,101,110,111,117,115,100,105,114,101,
-99,116,105,111,110,115,115,117,98,115,105,100,105,97,114,121,99,111,110,115,112,
-105,114,97,99,121,100,101,116,97,105,108,115,32,111,102,97,110,100,32,105,110,32
-,116,104,101,97,102,102,111,114,100,97,98,108,101,115,117,98,115,116,97,110,99,
-101,115,114,101,97,115,111,110,32,102,111,114,99,111,110,118,101,110,116,105,111
-,110,105,116,101,109,116,121,112,101,61,34,97,98,115,111,108,117,116,101,108,121
-,115,117,112,112,111,115,101,100,108,121,114,101,109,97,105,110,101,100,32,97,97
-,116,116,114,97,99,116,105,118,101,116,114,97,118,101,108,108,105,110,103,115,
-101,112,97,114,97,116,101,108,121,102,111,99,117,115,101,115,32,111,110,101,108,
-101,109,101,110,116,97,114,121,97,112,112,108,105,99,97,98,108,101,102,111,117,
-110,100,32,116,104,97,116,115,116,121,108,101,115,104,101,101,116,109,97,110,117
-,115,99,114,105,112,116,115,116,97,110,100,115,32,102,111,114,32,110,111,45,114,
-101,112,101,97,116,40,115,111,109,101,116,105,109,101,115,67,111,109,109,101,114
-,99,105,97,108,105,110,32,65,109,101,114,105,99,97,117,110,100,101,114,116,97,
-107,101,110,113,117,97,114,116,101,114,32,111,102,97,110,32,101,120,97,109,112,
-108,101,112,101,114,115,111,110,97,108,108,121,105,110,100,101,120,46,112,104,
-112,63,60,47,98,117,116,116,111,110,62,10,112,101,114,99,101,110,116,97,103,101,
-98,101,115,116,45,107,110,111,119,110,99,114,101,97,116,105,110,103,32,97,34,32,
-100,105,114,61,34,108,116,114,76,105,101,117,116,101,110,97,110,116,10,60,100,
-105,118,32,105,100,61,34,116,104,101,121,32,119,111,117,108,100,97,98,105,108,
-105,116,121,32,111,102,109,97,100,101,32,117,112,32,111,102,110,111,116,101,100,
-32,116,104,97,116,99,108,101,97,114,32,116,104,97,116,97,114,103,117,101,32,116,
-104,97,116,116,111,32,97,110,111,116,104,101,114,99,104,105,108,100,114,101,110,
-39,115,112,117,114,112,111,115,101,32,111,102,102,111,114,109,117,108,97,116,101
-,100,98,97,115,101,100,32,117,112,111,110,116,104,101,32,114,101,103,105,111,110
-,115,117,98,106,101,99,116,32,111,102,112,97,115,115,101,110,103,101,114,115,112
-,111,115,115,101,115,115,105,111,110,46,10,10,73,110,32,116,104,101,32,66,101,
-102,111,114,101,32,116,104,101,97,102,116,101,114,119,97,114,100,115,99,117,114,
-114,101,110,116,108,121,32,97,99,114,111,115,115,32,116,104,101,115,99,105,101,
-110,116,105,102,105,99,99,111,109,109,117,110,105,116,121,46,99,97,112,105,116,
-97,108,105,115,109,105,110,32,71,101,114,109,97,110,121,114,105,103,104,116,45,
-119,105,110,103,116,104,101,32,115,121,115,116,101,109,83,111,99,105,101,116,121
-,32,111,102,112,111,108,105,116,105,99,105,97,110,100,105,114,101,99,116,105,111
-,110,58,119,101,110,116,32,111,110,32,116,111,114,101,109,111,118,97,108,32,111,
-102,32,78,101,119,32,89,111,114,107,32,97,112,97,114,116,109,101,110,116,115,105
-,110,100,105,99,97,116,105,111,110,100,117,114,105,110,103,32,116,104,101,117,
-110,108,101,115,115,32,116,104,101,104,105,115,116,111,114,105,99,97,108,104,97,
-100,32,98,101,101,110,32,97,100,101,102,105,110,105,116,105,118,101,105,110,103,
-114,101,100,105,101,110,116,97,116,116,101,110,100,97,110,99,101,67,101,110,116,
-101,114,32,102,111,114,112,114,111,109,105,110,101,110,99,101,114,101,97,100,121
-,83,116,97,116,101,115,116,114,97,116,101,103,105,101,115,98,117,116,32,105,110,
-32,116,104,101,97,115,32,112,97,114,116,32,111,102,99,111,110,115,116,105,116,
-117,116,101,99,108,97,105,109,32,116,104,97,116,108,97,98,111,114,97,116,111,114
-,121,99,111,109,112,97,116,105,98,108,101,102,97,105,108,117,114,101,32,111,102,
-44,32,115,117,99,104,32,97,115,32,98,101,103,97,110,32,119,105,116,104,117,115,
-105,110,103,32,116,104,101,32,116,111,32,112,114,111,118,105,100,101,102,101,97,
-116,117,114,101,32,111,102,102,114,111,109,32,119,104,105,99,104,47,34,32,99,108
-,97,115,115,61,34,103,101,111,108,111,103,105,99,97,108,115,101,118,101,114,97,
-108,32,111,102,100,101,108,105,98,101,114,97,116,101,105,109,112,111,114,116,97,
-110,116,32,104,111,108,100,115,32,116,104,97,116,105,110,103,38,113,117,111,116,
-59,32,118,97,108,105,103,110,61,116,111,112,116,104,101,32,71,101,114,109,97,110
-,111,117,116,115,105,100,101,32,111,102,110,101,103,111,116,105,97,116,101,100,
-104,105,115,32,99,97,114,101,101,114,115,101,112,97,114,97,116,105,111,110,105,
-100,61,34,115,101,97,114,99,104,119,97,115,32,99,97,108,108,101,100,116,104,101,
-32,102,111,117,114,116,104,114,101,99,114,101,97,116,105,111,110,111,116,104,101
-,114,32,116,104,97,110,112,114,101,118,101,110,116,105,111,110,119,104,105,108,
-101,32,116,104,101,32,101,100,117,99,97,116,105,111,110,44,99,111,110,110,101,99
-,116,105,110,103,97,99,99,117,114,97,116,101,108,121,119,101,114,101,32,98,117,
-105,108,116,119,97,115,32,107,105,108,108,101,100,97,103,114,101,101,109,101,110
-,116,115,109,117,99,104,32,109,111,114,101,32,68,117,101,32,116,111,32,116,104,
-101,119,105,100,116,104,58,32,49,48,48,115,111,109,101,32,111,116,104,101,114,75
-,105,110,103,100,111,109,32,111,102,116,104,101,32,101,110,116,105,114,101,102,
-97,109,111,117,115,32,102,111,114,116,111,32,99,111,110,110,101,99,116,111,98,
-106,101,99,116,105,118,101,115,116,104,101,32,70,114,101,110,99,104,112,101,111,
-112,108,101,32,97,110,100,102,101,97,116,117,114,101,100,34,62,105,115,32,115,97
-,105,100,32,116,111,115,116,114,117,99,116,117,114,97,108,114,101,102,101,114,
-101,110,100,117,109,109,111,115,116,32,111,102,116,101,110,97,32,115,101,112,97,
-114,97,116,101,45,62,10,60,100,105,118,32,105,100,32,79,102,102,105,99,105,97,
-108,32,119,111,114,108,100,119,105,100,101,46,97,114,105,97,45,108,97,98,101,108
-,116,104,101,32,112,108,97,110,101,116,97,110,100,32,105,116,32,119,97,115,100,
-34,32,118,97,108,117,101,61,34,108,111,111,107,105,110,103,32,97,116,98,101,110,
-101,102,105,99,105,97,108,97,114,101,32,105,110,32,116,104,101,109,111,110,105,
-116,111,114,105,110,103,114,101,112,111,114,116,101,100,108,121,116,104,101,32,
-109,111,100,101,114,110,119,111,114,107,105,110,103,32,111,110,97,108,108,111,
-119,101,100,32,116,111,119,104,101,114,101,32,116,104,101,32,105,110,110,111,118
-,97,116,105,118,101,60,47,97,62,60,47,100,105,118,62,115,111,117,110,100,116,114
-,97,99,107,115,101,97,114,99,104,70,111,114,109,116,101,110,100,32,116,111,32,98
-,101,105,110,112,117,116,32,105,100,61,34,111,112,101,110,105,110,103,32,111,102
-,114,101,115,116,114,105,99,116,101,100,97,100,111,112,116,101,100,32,98,121,97,
-100,100,114,101,115,115,105,110,103,116,104,101,111,108,111,103,105,97,110,109,
-101,116,104,111,100,115,32,111,102,118,97,114,105,97,110,116,32,111,102,67,104,
-114,105,115,116,105,97,110,32,118,101,114,121,32,108,97,114,103,101,97,117,116,
-111,109,111,116,105,118,101,98,121,32,102,97,114,32,116,104,101,114,97,110,103,
-101,32,102,114,111,109,112,117,114,115,117,105,116,32,111,102,102,111,108,108,
-111,119,32,116,104,101,98,114,111,117,103,104,116,32,116,111,105,110,32,69,110,
-103,108,97,110,100,97,103,114,101,101,32,116,104,97,116,97,99,99,117,115,101,100
-,32,111,102,99,111,109,101,115,32,102,114,111,109,112,114,101,118,101,110,116,
-105,110,103,100,105,118,32,115,116,121,108,101,61,104,105,115,32,111,114,32,104,
-101,114,116,114,101,109,101,110,100,111,117,115,102,114,101,101,100,111,109,32,
-111,102,99,111,110,99,101,114,110,105,110,103,48,32,49,101,109,32,49,101,109,59,
-66,97,115,107,101,116,98,97,108,108,47,115,116,121,108,101,46,99,115,115,97,110,
-32,101,97,114,108,105,101,114,101,118,101,110,32,97,102,116,101,114,47,34,32,116
-,105,116,108,101,61,34,46,99,111,109,47,105,110,100,101,120,116,97,107,105,110,
-103,32,116,104,101,112,105,116,116,115,98,117,114,103,104,99,111,110,116,101,110
-,116,34,62,13,60,115,99,114,105,112,116,62,40,102,116,117,114,110,101,100,32,111
-,117,116,104,97,118,105,110,103,32,116,104,101,60,47,115,112,97,110,62,13,10,32,
-111,99,99,97,115,105,111,110,97,108,98,101,99,97,117,115,101,32,105,116,115,116,
-97,114,116,101,100,32,116,111,112,104,121,115,105,99,97,108,108,121,62,60,47,100
-,105,118,62,10,32,32,99,114,101,97,116,101,100,32,98,121,67,117,114,114,101,110,
-116,108,121,44,32,98,103,99,111,108,111,114,61,34,116,97,98,105,110,100,101,120,
-61,34,100,105,115,97,115,116,114,111,117,115,65,110,97,108,121,116,105,99,115,32
-,97,108,115,111,32,104,97,115,32,97,62,60,100,105,118,32,105,100,61,34,60,47,115
-,116,121,108,101,62,10,60,99,97,108,108,101,100,32,102,111,114,115,105,110,103,
-101,114,32,97,110,100,46,115,114,99,32,61,32,34,47,47,118,105,111,108,97,116,105
-,111,110,115,116,104,105,115,32,112,111,105,110,116,99,111,110,115,116,97,110,
-116,108,121,105,115,32,108,111,99,97,116,101,100,114,101,99,111,114,100,105,110,
-103,115,100,32,102,114,111,109,32,116,104,101,110,101,100,101,114,108,97,110,100
-,115,112,111,114,116,117,103,117,195,170,115,215,162,215,145,215,168,215,153,215
-,170,217,129,216,167,216,177,216,179,219,140,100,101,115,97,114,114,111,108,108,
-111,99,111,109,101,110,116,97,114,105,111,101,100,117,99,97,99,105,195,179,110,
-115,101,112,116,105,101,109,98,114,101,114,101,103,105,115,116,114,97,100,111,
-100,105,114,101,99,99,105,195,179,110,117,98,105,99,97,99,105,195,179,110,112,
-117,98,108,105,99,105,100,97,100,114,101,115,112,117,101,115,116,97,115,114,101,
-115,117,108,116,97,100,111,115,105,109,112,111,114,116,97,110,116,101,114,101,
-115,101,114,118,97,100,111,115,97,114,116,195,173,99,117,108,111,115,100,105,102
-,101,114,101,110,116,101,115,115,105,103,117,105,101,110,116,101,115,114,101,112
-,195,186,98,108,105,99,97,115,105,116,117,97,99,105,195,179,110,109,105,110,105,
-115,116,101,114,105,111,112,114,105,118,97,99,105,100,97,100,100,105,114,101,99,
-116,111,114,105,111,102,111,114,109,97,99,105,195,179,110,112,111,98,108,97,99,
-105,195,179,110,112,114,101,115,105,100,101,110,116,101,99,111,110,116,101,110,
-105,100,111,115,97,99,99,101,115,111,114,105,111,115,116,101,99,104,110,111,114,
-97,116,105,112,101,114,115,111,110,97,108,101,115,99,97,116,101,103,111,114,195,
-173,97,101,115,112,101,99,105,97,108,101,115,100,105,115,112,111,110,105,98,108,
-101,97,99,116,117,97,108,105,100,97,100,114,101,102,101,114,101,110,99,105,97,
-118,97,108,108,97,100,111,108,105,100,98,105,98,108,105,111,116,101,99,97,114,
-101,108,97,99,105,111,110,101,115,99,97,108,101,110,100,97,114,105,111,112,111,
-108,195,173,116,105,99,97,115,97,110,116,101,114,105,111,114,101,115,100,111,99,
-117,109,101,110,116,111,115,110,97,116,117,114,97,108,101,122,97,109,97,116,101,
-114,105,97,108,101,115,100,105,102,101,114,101,110,99,105,97,101,99,111,110,195,
-179,109,105,99,97,116,114,97,110,115,112,111,114,116,101,114,111,100,114,195,173
-,103,117,101,122,112,97,114,116,105,99,105,112,97,114,101,110,99,117,101,110,116
-,114,97,110,100,105,115,99,117,115,105,195,179,110,101,115,116,114,117,99,116,
-117,114,97,102,117,110,100,97,99,105,195,179,110,102,114,101,99,117,101,110,116,
-101,115,112,101,114,109,97,110,101,110,116,101,116,111,116,97,108,109,101,110,
-116,101,208,188,208,190,208,182,208,189,208,190,208,177,209,131,208,180,208,181,
-209,130,208,188,208,190,208,182,208,181,209,130,208,178,209,128,208,181,208,188,
-209,143,209,130,208,176,208,186,208,182,208,181,209,135,209,130,208,190,208,177,
-209,139,208,177,208,190,208,187,208,181,208,181,208,190,209,135,208,181,208,189,
-209,140,209,141,209,130,208,190,208,179,208,190,208,186,208,190,208,179,208,180,
-208,176,208,191,208,190,209,129,208,187,208,181,208,178,209,129,208,181,208,179,
-208,190,209,129,208,176,208,185,209,130,208,181,209,135,208,181,209,128,208,181,
-208,183,208,188,208,190,208,179,209,131,209,130,209,129,208,176,208,185,209,130,
-208,176,208,182,208,184,208,183,208,189,208,184,208,188,208,181,208,182,208,180,
-209,131,208,177,209,131,208,180,209,131,209,130,208,159,208,190,208,184,209,129,
-208,186,208,183,208,180,208,181,209,129,209,140,208,178,208,184,208,180,208,181,
-208,190,209,129,208,178,209,143,208,183,208,184,208,189,209,131,208,182,208,189,
-208,190,209,129,208,178,208,190,208,181,208,185,208,187,209,142,208,180,208,181,
-208,185,208,191,208,190,209,128,208,189,208,190,208,188,208,189,208,190,208,179,
-208,190,208,180,208,181,209,130,208,181,208,185,209,129,208,178,208,190,208,184,
-209,133,208,191,209,128,208,176,208,178,208,176,209,130,208,176,208,186,208,190,
-208,185,208,188,208,181,209,129,209,130,208,190,208,184,208,188,208,181,208,181,
-209,130,208,182,208,184,208,183,208,189,209,140,208,190,208,180,208,189,208,190,
-208,185,208,187,209,131,209,135,209,136,208,181,208,191,208,181,209,128,208,181,
-208,180,209,135,208,176,209,129,209,130,208,184,209,135,208,176,209,129,209,130,
-209,140,209,128,208,176,208,177,208,190,209,130,208,189,208,190,208,178,209,139,
-209,133,208,191,209,128,208,176,208,178,208,190,209,129,208,190,208,177,208,190,
-208,185,208,191,208,190,209,130,208,190,208,188,208,188,208,181,208,189,208,181,
-208,181,209,135,208,184,209,129,208,187,208,181,208,189,208,190,208,178,209,139,
-208,181,209,131,209,129,208,187,209,131,208,179,208,190,208,186,208,190,208,187,
-208,190,208,189,208,176,208,183,208,176,208,180,209,130,208,176,208,186,208,190,
-208,181,209,130,208,190,208,179,208,180,208,176,208,191,208,190,209,135,209,130,
-208,184,208,159,208,190,209,129,208,187,208,181,209,130,208,176,208,186,208,184,
-208,181,208,189,208,190,208,178,209,139,208,185,209,129,209,130,208,190,208,184,
-209,130,209,130,208,176,208,186,208,184,209,133,209,129,209,128,208,176,208,183,
-209,131,208,161,208,176,208,189,208,186,209,130,209,132,208,190,209,128,209,131,
-208,188,208,154,208,190,208,179,208,180,208,176,208,186,208,189,208,184,208,179,
-208,184,209,129,208,187,208,190,208,178,208,176,208,189,208,176,209,136,208,181,
-208,185,208,189,208,176,208,185,209,130,208,184,209,129,208,178,208,190,208,184,
-208,188,209,129,208,178,209,143,208,183,209,140,208,187,209,142,208,177,208,190,
-208,185,209,135,208,176,209,129,209,130,208,190,209,129,209,128,208,181,208,180,
-208,184,208,154,209,128,208,190,208,188,208,181,208,164,208,190,209,128,209,131,
-208,188,209,128,209,139,208,189,208,186,208,181,209,129,209,130,208,176,208,187,
-208,184,208,191,208,190,208,184,209,129,208,186,209,130,209,139,209,129,209,143,
-209,135,208,188,208,181,209,129,209,143,209,134,209,134,208,181,208,189,209,130,
-209,128,209,130,209,128,209,131,208,180,208,176,209,129,208,176,208,188,209,139,
-209,133,209,128,209,139,208,189,208,186,208,176,208,157,208,190,208,178,209,139,
-208,185,209,135,208,176,209,129,208,190,208,178,208,188,208,181,209,129,209,130,
-208,176,209,132,208,184,208,187,209,140,208,188,208,188,208,176,209,128,209,130,
-208,176,209,129,209,130,209,128,208,176,208,189,208,188,208,181,209,129,209,130,
-208,181,209,130,208,181,208,186,209,129,209,130,208,189,208,176,209,136,208,184,
-209,133,208,188,208,184,208,189,209,131,209,130,208,184,208,188,208,181,208,189,
-208,184,208,184,208,188,208,181,209,142,209,130,208,189,208,190,208,188,208,181,
-209,128,208,179,208,190,209,128,208,190,208,180,209,129,208,176,208,188,208,190,
-208,188,209,141,209,130,208,190,208,188,209,131,208,186,208,190,208,189,209,134,
-208,181,209,129,208,178,208,190,208,181,208,188,208,186,208,176,208,186,208,190,
-208,185,208,144,209,128,209,133,208,184,208,178,217,133,217,134,216,170,216,175,
-217,137,216,165,216,177,216,179,216,167,217,132,216,177,216,179,216,167,217,132,
-216,169,216,167,217,132,216,185,216,167,217,133,217,131,216,170,216,168,217,135,
-216,167,216,168,216,177,216,167,217,133,216,172,216,167,217,132,217,138,217,136,
-217,133,216,167,217,132,216,181,217,136,216,177,216,172,216,175,217,138,216,175,
-216,169,216,167,217,132,216,185,216,182,217,136,216,165,216,182,216,167,217,129,
-216,169,216,167,217,132,217,130,216,179,217,133,216,167,217,132,216,185,216,167,
-216,168,216,170,216,173,217,133,217,138,217,132,217,133,217,132,217,129,216,167,
-216,170,217,133,217,132,216,170,217,130,217,137,216,170,216,185,216,175,217,138,
-217,132,216,167,217,132,216,180,216,185,216,177,216,163,216,174,216,168,216,167,
-216,177,216,170,216,183,217,136,217,138,216,177,216,185,217,132,217,138,217,131,
-217,133,216,165,216,177,217,129,216,167,217,130,216,183,217,132,216,168,216,167,
-216,170,216,167,217,132,217,132,216,186,216,169,216,170,216,177,216,170,217,138,
-216,168,216,167,217,132,217,134,216,167,216,179,216,167,217,132,216,180,217,138,
-216,174,217,133,217,134,216,170,216,175,217,138,216,167,217,132,216,185,216,177,
-216,168,216,167,217,132,217,130,216,181,216,181,216,167,217,129,217,132,216,167,
-217,133,216,185,217,132,217,138,217,135,216,167,216,170,216,173,216,175,217,138,
-216,171,216,167,217,132,217,132,217,135,217,133,216,167,217,132,216,185,217,133,
-217,132,217,133,217,131,216,170,216,168,216,169,217,138,217,133,217,131,217,134,
-217,131,216,167,217,132,216,183,217,129,217,132,217,129,217,138,216,175,217,138,
-217,136,216,165,216,175,216,167,216,177,216,169,216,170,216,167,216,177,217,138,
-216,174,216,167,217,132,216,181,216,173,216,169,216,170,216,179,216,172,217,138,
-217,132,216,167,217,132,217,136,217,130,216,170,216,185,217,134,216,175,217,133,
-216,167,217,133,216,175,217,138,217,134,216,169,216,170,216,181,217,133,217,138,
-217,133,216,163,216,177,216,180,217,138,217,129,216,167,217,132,216,176,217,138,
-217,134,216,185,216,177,216,168,217,138,216,169,216,168,217,136,216,167,216,168,
-216,169,216,163,217,132,216,185,216,167,216,168,216,167,217,132,216,179,217,129,
-216,177,217,133,216,180,216,167,217,131,217,132,216,170,216,185,216,167,217,132,
-217,137,216,167,217,132,216,163,217,136,217,132,216,167,217,132,216,179,217,134,
-216,169,216,172,216,167,217,133,216,185,216,169,216,167,217,132,216,181,216,173,
-217,129,216,167,217,132,216,175,217,138,217,134,217,131,217,132,217,133,216,167,
-216,170,216,167,217,132,216,174,216,167,216,181,216,167,217,132,217,133,217,132,
-217,129,216,163,216,185,216,182,216,167,216,161,217,131,216,170,216,167,216,168,
-216,169,216,167,217,132,216,174,217,138,216,177,216,177,216,179,216,167,216,166,
-217,132,216,167,217,132,217,130,217,132,216,168,216,167,217,132,216,163,216,175,
-216,168,217,133,217,130,216,167,216,183,216,185,217,133,216,177,216,167,216,179,
-217,132,217,133,217,134,216,183,217,130,216,169,216,167,217,132,217,131,216,170,
-216,168,216,167,217,132,216,177,216,172,217,132,216,167,216,180,216,170,216,177,
-217,131,216,167,217,132,217,130,216,175,217,133,217,138,216,185,216,183,217,138,
-217,131,115,66,121,84,97,103,78,97,109,101,40,46,106,112,103,34,32,97,108,116,61
-,34,49,112,120,32,115,111,108,105,100,32,35,46,103,105,102,34,32,97,108,116,61,
-34,116,114,97,110,115,112,97,114,101,110,116,105,110,102,111,114,109,97,116,105,
-111,110,97,112,112,108,105,99,97,116,105,111,110,34,32,111,110,99,108,105,99,107
-,61,34,101,115,116,97,98,108,105,115,104,101,100,97,100,118,101,114,116,105,115,
-105,110,103,46,112,110,103,34,32,97,108,116,61,34,101,110,118,105,114,111,110,
-109,101,110,116,112,101,114,102,111,114,109,97,110,99,101,97,112,112,114,111,112
-,114,105,97,116,101,38,97,109,112,59,109,100,97,115,104,59,105,109,109,101,100,
-105,97,116,101,108,121,60,47,115,116,114,111,110,103,62,60,47,114,97,116,104,101
-,114,32,116,104,97,110,116,101,109,112,101,114,97,116,117,114,101,100,101,118,
-101,108,111,112,109,101,110,116,99,111,109,112,101,116,105,116,105,111,110,112,
-108,97,99,101,104,111,108,100,101,114,118,105,115,105,98,105,108,105,116,121,58,
-99,111,112,121,114,105,103,104,116,34,62,48,34,32,104,101,105,103,104,116,61,34,
-101,118,101,110,32,116,104,111,117,103,104,114,101,112,108,97,99,101,109,101,110
-,116,100,101,115,116,105,110,97,116,105,111,110,67,111,114,112,111,114,97,116,
-105,111,110,60,117,108,32,99,108,97,115,115,61,34,65,115,115,111,99,105,97,116,
-105,111,110,105,110,100,105,118,105,100,117,97,108,115,112,101,114,115,112,101,
-99,116,105,118,101,115,101,116,84,105,109,101,111,117,116,40,117,114,108,40,104,
-116,116,112,58,47,47,109,97,116,104,101,109,97,116,105,99,115,109,97,114,103,105
-,110,45,116,111,112,58,101,118,101,110,116,117,97,108,108,121,32,100,101,115,99,
-114,105,112,116,105,111,110,41,32,110,111,45,114,101,112,101,97,116,99,111,108,
-108,101,99,116,105,111,110,115,46,74,80,71,124,116,104,117,109,98,124,112,97,114
-,116,105,99,105,112,97,116,101,47,104,101,97,100,62,60,98,111,100,121,102,108,
-111,97,116,58,108,101,102,116,59,60,108,105,32,99,108,97,115,115,61,34,104,117,
-110,100,114,101,100,115,32,111,102,10,10,72,111,119,101,118,101,114,44,32,99,111
-,109,112,111,115,105,116,105,111,110,99,108,101,97,114,58,98,111,116,104,59,99,
-111,111,112,101,114,97,116,105,111,110,119,105,116,104,105,110,32,116,104,101,32
-,108,97,98,101,108,32,102,111,114,61,34,98,111,114,100,101,114,45,116,111,112,58
-,78,101,119,32,90,101,97,108,97,110,100,114,101,99,111,109,109,101,110,100,101,
-100,112,104,111,116,111,103,114,97,112,104,121,105,110,116,101,114,101,115,116,
-105,110,103,38,108,116,59,115,117,112,38,103,116,59,99,111,110,116,114,111,118,
-101,114,115,121,78,101,116,104,101,114,108,97,110,100,115,97,108,116,101,114,110
-,97,116,105,118,101,109,97,120,108,101,110,103,116,104,61,34,115,119,105,116,122
-,101,114,108,97,110,100,68,101,118,101,108,111,112,109,101,110,116,101,115,115,
-101,110,116,105,97,108,108,121,10,10,65,108,116,104,111,117,103,104,32,60,47,116
-,101,120,116,97,114,101,97,62,116,104,117,110,100,101,114,98,105,114,100,114,101
-,112,114,101,115,101,110,116,101,100,38,97,109,112,59,110,100,97,115,104,59,115,
-112,101,99,117,108,97,116,105,111,110,99,111,109,109,117,110,105,116,105,101,115
-,108,101,103,105,115,108,97,116,105,111,110,101,108,101,99,116,114,111,110,105,
-99,115,10,9,60,100,105,118,32,105,100,61,34,105,108,108,117,115,116,114,97,116,
-101,100,101,110,103,105,110,101,101,114,105,110,103,116,101,114,114,105,116,111,
-114,105,101,115,97,117,116,104,111,114,105,116,105,101,115,100,105,115,116,114,
-105,98,117,116,101,100,54,34,32,104,101,105,103,104,116,61,34,115,97,110,115,45,
-115,101,114,105,102,59,99,97,112,97,98,108,101,32,111,102,32,100,105,115,97,112,
-112,101,97,114,101,100,105,110,116,101,114,97,99,116,105,118,101,108,111,111,107
-,105,110,103,32,102,111,114,105,116,32,119,111,117,108,100,32,98,101,65,102,103,
-104,97,110,105,115,116,97,110,119,97,115,32,99,114,101,97,116,101,100,77,97,116,
-104,46,102,108,111,111,114,40,115,117,114,114,111,117,110,100,105,110,103,99,97,
-110,32,97,108,115,111,32,98,101,111,98,115,101,114,118,97,116,105,111,110,109,97
-,105,110,116,101,110,97,110,99,101,101,110,99,111,117,110,116,101,114,101,100,60
-,104,50,32,99,108,97,115,115,61,34,109,111,114,101,32,114,101,99,101,110,116,105
-,116,32,104,97,115,32,98,101,101,110,105,110,118,97,115,105,111,110,32,111,102,
-41,46,103,101,116,84,105,109,101,40,41,102,117,110,100,97,109,101,110,116,97,108
-,68,101,115,112,105,116,101,32,116,104,101,34,62,60,100,105,118,32,105,100,61,34
-,105,110,115,112,105,114,97,116,105,111,110,101,120,97,109,105,110,97,116,105,
-111,110,112,114,101,112,97,114,97,116,105,111,110,101,120,112,108,97,110,97,116,
-105,111,110,60,105,110,112,117,116,32,105,100,61,34,60,47,97,62,60,47,115,112,97
-,110,62,118,101,114,115,105,111,110,115,32,111,102,105,110,115,116,114,117,109,
-101,110,116,115,98,101,102,111,114,101,32,116,104,101,32,32,61,32,39,104,116,116
-,112,58,47,47,68,101,115,99,114,105,112,116,105,111,110,114,101,108,97,116,105,
-118,101,108,121,32,46,115,117,98,115,116,114,105,110,103,40,101,97,99,104,32,111
-,102,32,116,104,101,101,120,112,101,114,105,109,101,110,116,115,105,110,102,108,
-117,101,110,116,105,97,108,105,110,116,101,103,114,97,116,105,111,110,109,97,110
-,121,32,112,101,111,112,108,101,100,117,101,32,116,111,32,116,104,101,32,99,111,
-109,98,105,110,97,116,105,111,110,100,111,32,110,111,116,32,104,97,118,101,77,
-105,100,100,108,101,32,69,97,115,116,60,110,111,115,99,114,105,112,116,62,60,99,
-111,112,121,114,105,103,104,116,34,32,112,101,114,104,97,112,115,32,116,104,101,
-105,110,115,116,105,116,117,116,105,111,110,105,110,32,68,101,99,101,109,98,101,
-114,97,114,114,97,110,103,101,109,101,110,116,109,111,115,116,32,102,97,109,111,
-117,115,112,101,114,115,111,110,97,108,105,116,121,99,114,101,97,116,105,111,110
-,32,111,102,108,105,109,105,116,97,116,105,111,110,115,101,120,99,108,117,115,
-105,118,101,108,121,115,111,118,101,114,101,105,103,110,116,121,45,99,111,110,
-116,101,110,116,34,62,10,60,116,100,32,99,108,97,115,115,61,34,117,110,100,101,
-114,103,114,111,117,110,100,112,97,114,97,108,108,101,108,32,116,111,100,111,99,
-116,114,105,110,101,32,111,102,111,99,99,117,112,105,101,100,32,98,121,116,101,
-114,109,105,110,111,108,111,103,121,82,101,110,97,105,115,115,97,110,99,101,97,
-32,110,117,109,98,101,114,32,111,102,115,117,112,112,111,114,116,32,102,111,114,
-101,120,112,108,111,114,97,116,105,111,110,114,101,99,111,103,110,105,116,105,
-111,110,112,114,101,100,101,99,101,115,115,111,114,60,105,109,103,32,115,114,99,
-61,34,47,60,104,49,32,99,108,97,115,115,61,34,112,117,98,108,105,99,97,116,105,
-111,110,109,97,121,32,97,108,115,111,32,98,101,115,112,101,99,105,97,108,105,122
-,101,100,60,47,102,105,101,108,100,115,101,116,62,112,114,111,103,114,101,115,
-115,105,118,101,109,105,108,108,105,111,110,115,32,111,102,115,116,97,116,101,
-115,32,116,104,97,116,101,110,102,111,114,99,101,109,101,110,116,97,114,111,117,
-110,100,32,116,104,101,32,111,110,101,32,97,110,111,116,104,101,114,46,112,97,
-114,101,110,116,78,111,100,101,97,103,114,105,99,117,108,116,117,114,101,65,108,
-116,101,114,110,97,116,105,118,101,114,101,115,101,97,114,99,104,101,114,115,116
-,111,119,97,114,100,115,32,116,104,101,77,111,115,116,32,111,102,32,116,104,101,
-109,97,110,121,32,111,116,104,101,114,32,40,101,115,112,101,99,105,97,108,108,
-121,60,116,100,32,119,105,100,116,104,61,34,59,119,105,100,116,104,58,49,48,48,
-37,105,110,100,101,112,101,110,100,101,110,116,60,104,51,32,99,108,97,115,115,61
-,34,32,111,110,99,104,97,110,103,101,61,34,41,46,97,100,100,67,108,97,115,115,40
-,105,110,116,101,114,97,99,116,105,111,110,79,110,101,32,111,102,32,116,104,101,
-32,100,97,117,103,104,116,101,114,32,111,102,97,99,99,101,115,115,111,114,105,
-101,115,98,114,97,110,99,104,101,115,32,111,102,13,10,60,100,105,118,32,105,100,
-61,34,116,104,101,32,108,97,114,103,101,115,116,100,101,99,108,97,114,97,116,105
-,111,110,114,101,103,117,108,97,116,105,111,110,115,73,110,102,111,114,109,97,
-116,105,111,110,116,114,97,110,115,108,97,116,105,111,110,100,111,99,117,109,101
-,110,116,97,114,121,105,110,32,111,114,100,101,114,32,116,111,34,62,10,60,104,
-101,97,100,62,10,60,34,32,104,101,105,103,104,116,61,34,49,97,99,114,111,115,115
-,32,116,104,101,32,111,114,105,101,110,116,97,116,105,111,110,41,59,60,47,115,99
-,114,105,112,116,62,105,109,112,108,101,109,101,110,116,101,100,99,97,110,32,98,
-101,32,115,101,101,110,116,104,101,114,101,32,119,97,115,32,97,100,101,109,111,
-110,115,116,114,97,116,101,99,111,110,116,97,105,110,101,114,34,62,99,111,110,
-110,101,99,116,105,111,110,115,116,104,101,32,66,114,105,116,105,115,104,119,97,
-115,32,119,114,105,116,116,101,110,33,105,109,112,111,114,116,97,110,116,59,112,
-120,59,32,109,97,114,103,105,110,45,102,111,108,108,111,119,101,100,32,98,121,97
-,98,105,108,105,116,121,32,116,111,32,99,111,109,112,108,105,99,97,116,101,100,
-100,117,114,105,110,103,32,116,104,101,32,105,109,109,105,103,114,97,116,105,111
-,110,97,108,115,111,32,99,97,108,108,101,100,60,104,52,32,99,108,97,115,115,61,
-34,100,105,115,116,105,110,99,116,105,111,110,114,101,112,108,97,99,101,100,32,
-98,121,103,111,118,101,114,110,109,101,110,116,115,108,111,99,97,116,105,111,110
-,32,111,102,105,110,32,78,111,118,101,109,98,101,114,119,104,101,116,104,101,114
-,32,116,104,101,60,47,112,62,10,60,47,100,105,118,62,97,99,113,117,105,115,105,
-116,105,111,110,99,97,108,108,101,100,32,116,104,101,32,112,101,114,115,101,99,
-117,116,105,111,110,100,101,115,105,103,110,97,116,105,111,110,123,102,111,110,
-116,45,115,105,122,101,58,97,112,112,101,97,114,101,100,32,105,110,105,110,118,
-101,115,116,105,103,97,116,101,101,120,112,101,114,105,101,110,99,101,100,109,
-111,115,116,32,108,105,107,101,108,121,119,105,100,101,108,121,32,117,115,101,
-100,100,105,115,99,117,115,115,105,111,110,115,112,114,101,115,101,110,99,101,32
-,111,102,32,40,100,111,99,117,109,101,110,116,46,101,120,116,101,110,115,105,118
-,101,108,121,73,116,32,104,97,115,32,98,101,101,110,105,116,32,100,111,101,115,
-32,110,111,116,99,111,110,116,114,97,114,121,32,116,111,105,110,104,97,98,105,
-116,97,110,116,115,105,109,112,114,111,118,101,109,101,110,116,115,99,104,111,
-108,97,114,115,104,105,112,99,111,110,115,117,109,112,116,105,111,110,105,110,
-115,116,114,117,99,116,105,111,110,102,111,114,32,101,120,97,109,112,108,101,111
-,110,101,32,111,114,32,109,111,114,101,112,120,59,32,112,97,100,100,105,110,103,
-116,104,101,32,99,117,114,114,101,110,116,97,32,115,101,114,105,101,115,32,111,
-102,97,114,101,32,117,115,117,97,108,108,121,114,111,108,101,32,105,110,32,116,
-104,101,112,114,101,118,105,111,117,115,108,121,32,100,101,114,105,118,97,116,
-105,118,101,115,101,118,105,100,101,110,99,101,32,111,102,101,120,112,101,114,
-105,101,110,99,101,115,99,111,108,111,114,115,99,104,101,109,101,115,116,97,116,
-101,100,32,116,104,97,116,99,101,114,116,105,102,105,99,97,116,101,60,47,97,62,
-60,47,100,105,118,62,10,32,115,101,108,101,99,116,101,100,61,34,104,105,103,104,
-32,115,99,104,111,111,108,114,101,115,112,111,110,115,101,32,116,111,99,111,109,
-102,111,114,116,97,98,108,101,97,100,111,112,116,105,111,110,32,111,102,116,104,
-114,101,101,32,121,101,97,114,115,116,104,101,32,99,111,117,110,116,114,121,105,
-110,32,70,101,98,114,117,97,114,121,115,111,32,116,104,97,116,32,116,104,101,112
-,101,111,112,108,101,32,119,104,111,32,112,114,111,118,105,100,101,100,32,98,121
-,60,112,97,114,97,109,32,110,97,109,101,97,102,102,101,99,116,101,100,32,98,121,
-105,110,32,116,101,114,109,115,32,111,102,97,112,112,111,105,110,116,109,101,110
-,116,73,83,79,45,56,56,53,57,45,49,34,119,97,115,32,98,111,114,110,32,105,110,
-104,105,115,116,111,114,105,99,97,108,32,114,101,103,97,114,100,101,100,32,97,
-115,109,101,97,115,117,114,101,109,101,110,116,105,115,32,98,97,115,101,100,32,
-111,110,32,97,110,100,32,111,116,104,101,114,32,58,32,102,117,110,99,116,105,111
-,110,40,115,105,103,110,105,102,105,99,97,110,116,99,101,108,101,98,114,97,116,
-105,111,110,116,114,97,110,115,109,105,116,116,101,100,47,106,115,47,106,113,117
-,101,114,121,46,105,115,32,107,110,111,119,110,32,97,115,116,104,101,111,114,101
-,116,105,99,97,108,32,116,97,98,105,110,100,101,120,61,34,105,116,32,99,111,117,
-108,100,32,98,101,60,110,111,115,99,114,105,112,116,62,10,104,97,118,105,110,103
-,32,98,101,101,110,13,10,60,104,101,97,100,62,13,10,60,32,38,113,117,111,116,59,
-84,104,101,32,99,111,109,112,105,108,97,116,105,111,110,104,101,32,104,97,100,32
-,98,101,101,110,112,114,111,100,117,99,101,100,32,98,121,112,104,105,108,111,115
-,111,112,104,101,114,99,111,110,115,116,114,117,99,116,101,100,105,110,116,101,
-110,100,101,100,32,116,111,97,109,111,110,103,32,111,116,104,101,114,99,111,109,
-112,97,114,101,100,32,116,111,116,111,32,115,97,121,32,116,104,97,116,69,110,103
-,105,110,101,101,114,105,110,103,97,32,100,105,102,102,101,114,101,110,116,114,
-101,102,101,114,114,101,100,32,116,111,100,105,102,102,101,114,101,110,99,101,
-115,98,101,108,105,101,102,32,116,104,97,116,112,104,111,116,111,103,114,97,112,
-104,115,105,100,101,110,116,105,102,121,105,110,103,72,105,115,116,111,114,121,
-32,111,102,32,82,101,112,117,98,108,105,99,32,111,102,110,101,99,101,115,115,97,
-114,105,108,121,112,114,111,98,97,98,105,108,105,116,121,116,101,99,104,110,105,
-99,97,108,108,121,108,101,97,118,105,110,103,32,116,104,101,115,112,101,99,116,
-97,99,117,108,97,114,102,114,97,99,116,105,111,110,32,111,102,101,108,101,99,116
-,114,105,99,105,116,121,104,101,97,100,32,111,102,32,116,104,101,114,101,115,116
-,97,117,114,97,110,116,115,112,97,114,116,110,101,114,115,104,105,112,101,109,
-112,104,97,115,105,115,32,111,110,109,111,115,116,32,114,101,99,101,110,116,115,
-104,97,114,101,32,119,105,116,104,32,115,97,121,105,110,103,32,116,104,97,116,
-102,105,108,108,101,100,32,119,105,116,104,100,101,115,105,103,110,101,100,32,
-116,111,105,116,32,105,115,32,111,102,116,101,110,34,62,60,47,105,102,114,97,109
-,101,62,97,115,32,102,111,108,108,111,119,115,58,109,101,114,103,101,100,32,119,
-105,116,104,116,104,114,111,117,103,104,32,116,104,101,99,111,109,109,101,114,99
-,105,97,108,32,112,111,105,110,116,101,100,32,111,117,116,111,112,112,111,114,
-116,117,110,105,116,121,118,105,101,119,32,111,102,32,116,104,101,114,101,113,
-117,105,114,101,109,101,110,116,100,105,118,105,115,105,111,110,32,111,102,112,
-114,111,103,114,97,109,109,105,110,103,104,101,32,114,101,99,101,105,118,101,100
-,115,101,116,73,110,116,101,114,118,97,108,34,62,60,47,115,112,97,110,62,60,47,
-105,110,32,78,101,119,32,89,111,114,107,97,100,100,105,116,105,111,110,97,108,32
-,99,111,109,112,114,101,115,115,105,111,110,10,10,60,100,105,118,32,105,100,61,
-34,105,110,99,111,114,112,111,114,97,116,101,59,60,47,115,99,114,105,112,116,62,
-60,97,116,116,97,99,104,69,118,101,110,116,98,101,99,97,109,101,32,116,104,101,
-32,34,32,116,97,114,103,101,116,61,34,95,99,97,114,114,105,101,100,32,111,117,
-116,83,111,109,101,32,111,102,32,116,104,101,115,99,105,101,110,99,101,32,97,110
-,100,116,104,101,32,116,105,109,101,32,111,102,67,111,110,116,97,105,110,101,114
-,34,62,109,97,105,110,116,97,105,110,105,110,103,67,104,114,105,115,116,111,112,
-104,101,114,77,117,99,104,32,111,102,32,116,104,101,119,114,105,116,105,110,103,
-115,32,111,102,34,32,104,101,105,103,104,116,61,34,50,115,105,122,101,32,111,102
-,32,116,104,101,118,101,114,115,105,111,110,32,111,102,32,109,105,120,116,117,
-114,101,32,111,102,32,98,101,116,119,101,101,110,32,116,104,101,69,120,97,109,
-112,108,101,115,32,111,102,101,100,117,99,97,116,105,111,110,97,108,99,111,109,
-112,101,116,105,116,105,118,101,32,111,110,115,117,98,109,105,116,61,34,100,105,
-114,101,99,116,111,114,32,111,102,100,105,115,116,105,110,99,116,105,118,101,47,
-68,84,68,32,88,72,84,77,76,32,114,101,108,97,116,105,110,103,32,116,111,116,101,
-110,100,101,110,99,121,32,116,111,112,114,111,118,105,110,99,101,32,111,102,119,
-104,105,99,104,32,119,111,117,108,100,100,101,115,112,105,116,101,32,116,104,101
-,115,99,105,101,110,116,105,102,105,99,32,108,101,103,105,115,108,97,116,117,114
-,101,46,105,110,110,101,114,72,84,77,76,32,97,108,108,101,103,97,116,105,111,110
-,115,65,103,114,105,99,117,108,116,117,114,101,119,97,115,32,117,115,101,100,32,
-105,110,97,112,112,114,111,97,99,104,32,116,111,105,110,116,101,108,108,105,103,
-101,110,116,121,101,97,114,115,32,108,97,116,101,114,44,115,97,110,115,45,115,
-101,114,105,102,100,101,116,101,114,109,105,110,105,110,103,80,101,114,102,111,
-114,109,97,110,99,101,97,112,112,101,97,114,97,110,99,101,115,44,32,119,104,105,
-99,104,32,105,115,32,102,111,117,110,100,97,116,105,111,110,115,97,98,98,114,101
-,118,105,97,116,101,100,104,105,103,104,101,114,32,116,104,97,110,115,32,102,114
-,111,109,32,116,104,101,32,105,110,100,105,118,105,100,117,97,108,32,99,111,109,
-112,111,115,101,100,32,111,102,115,117,112,112,111,115,101,100,32,116,111,99,108
-,97,105,109,115,32,116,104,97,116,97,116,116,114,105,98,117,116,105,111,110,102,
-111,110,116,45,115,105,122,101,58,49,101,108,101,109,101,110,116,115,32,111,102,
-72,105,115,116,111,114,105,99,97,108,32,104,105,115,32,98,114,111,116,104,101,
-114,97,116,32,116,104,101,32,116,105,109,101,97,110,110,105,118,101,114,115,97,
-114,121,103,111,118,101,114,110,101,100,32,98,121,114,101,108,97,116,101,100,32,
-116,111,32,117,108,116,105,109,97,116,101,108,121,32,105,110,110,111,118,97,116,
-105,111,110,115,105,116,32,105,115,32,115,116,105,108,108,99,97,110,32,111,110,
-108,121,32,98,101,100,101,102,105,110,105,116,105,111,110,115,116,111,71,77,84,
-83,116,114,105,110,103,65,32,110,117,109,98,101,114,32,111,102,105,109,103,32,99
-,108,97,115,115,61,34,69,118,101,110,116,117,97,108,108,121,44,119,97,115,32,99,
-104,97,110,103,101,100,111,99,99,117,114,114,101,100,32,105,110,110,101,105,103,
-104,98,111,114,105,110,103,100,105,115,116,105,110,103,117,105,115,104,119,104,
-101,110,32,104,101,32,119,97,115,105,110,116,114,111,100,117,99,105,110,103,116,
-101,114,114,101,115,116,114,105,97,108,77,97,110,121,32,111,102,32,116,104,101,
-97,114,103,117,101,115,32,116,104,97,116,97,110,32,65,109,101,114,105,99,97,110,
-99,111,110,113,117,101,115,116,32,111,102,119,105,100,101,115,112,114,101,97,100
-,32,119,101,114,101,32,107,105,108,108,101,100,115,99,114,101,101,110,32,97,110,
-100,32,73,110,32,111,114,100,101,114,32,116,111,101,120,112,101,99,116,101,100,
-32,116,111,100,101,115,99,101,110,100,97,110,116,115,97,114,101,32,108,111,99,97
-,116,101,100,108,101,103,105,115,108,97,116,105,118,101,103,101,110,101,114,97,
-116,105,111,110,115,32,98,97,99,107,103,114,111,117,110,100,109,111,115,116,32,
-112,101,111,112,108,101,121,101,97,114,115,32,97,102,116,101,114,116,104,101,114
-,101,32,105,115,32,110,111,116,104,101,32,104,105,103,104,101,115,116,102,114,
-101,113,117,101,110,116,108,121,32,116,104,101,121,32,100,111,32,110,111,116,97,
-114,103,117,101,100,32,116,104,97,116,115,104,111,119,101,100,32,116,104,97,116,
-112,114,101,100,111,109,105,110,97,110,116,116,104,101,111,108,111,103,105,99,97
-,108,98,121,32,116,104,101,32,116,105,109,101,99,111,110,115,105,100,101,114,105
-,110,103,115,104,111,114,116,45,108,105,118,101,100,60,47,115,112,97,110,62,60,
-47,97,62,99,97,110,32,98,101,32,117,115,101,100,118,101,114,121,32,108,105,116,
-116,108,101,111,110,101,32,111,102,32,116,104,101,32,104,97,100,32,97,108,114,
-101,97,100,121,105,110,116,101,114,112,114,101,116,101,100,99,111,109,109,117,
-110,105,99,97,116,101,102,101,97,116,117,114,101,115,32,111,102,103,111,118,101,
-114,110,109,101,110,116,44,60,47,110,111,115,99,114,105,112,116,62,101,110,116,
-101,114,101,100,32,116,104,101,34,32,104,101,105,103,104,116,61,34,51,73,110,100
-,101,112,101,110,100,101,110,116,112,111,112,117,108,97,116,105,111,110,115,108,
-97,114,103,101,45,115,99,97,108,101,46,32,65,108,116,104,111,117,103,104,32,117,
-115,101,100,32,105,110,32,116,104,101,100,101,115,116,114,117,99,116,105,111,110
-,112,111,115,115,105,98,105,108,105,116,121,115,116,97,114,116,105,110,103,32,
-105,110,116,119,111,32,111,114,32,109,111,114,101,101,120,112,114,101,115,115,
-105,111,110,115,115,117,98,111,114,100,105,110,97,116,101,108,97,114,103,101,114
-,32,116,104,97,110,104,105,115,116,111,114,121,32,97,110,100,60,47,111,112,116,
-105,111,110,62,13,10,67,111,110,116,105,110,101,110,116,97,108,101,108,105,109,
-105,110,97,116,105,110,103,119,105,108,108,32,110,111,116,32,98,101,112,114,97,
-99,116,105,99,101,32,111,102,105,110,32,102,114,111,110,116,32,111,102,115,105,
-116,101,32,111,102,32,116,104,101,101,110,115,117,114,101,32,116,104,97,116,116,
-111,32,99,114,101,97,116,101,32,97,109,105,115,115,105,115,115,105,112,112,105,
-112,111,116,101,110,116,105,97,108,108,121,111,117,116,115,116,97,110,100,105,
-110,103,98,101,116,116,101,114,32,116,104,97,110,119,104,97,116,32,105,115,32,
-110,111,119,115,105,116,117,97,116,101,100,32,105,110,109,101,116,97,32,110,97,
-109,101,61,34,84,114,97,100,105,116,105,111,110,97,108,115,117,103,103,101,115,
-116,105,111,110,115,84,114,97,110,115,108,97,116,105,111,110,116,104,101,32,102,
-111,114,109,32,111,102,97,116,109,111,115,112,104,101,114,105,99,105,100,101,111
-,108,111,103,105,99,97,108,101,110,116,101,114,112,114,105,115,101,115,99,97,108
-,99,117,108,97,116,105,110,103,101,97,115,116,32,111,102,32,116,104,101,114,101,
-109,110,97,110,116,115,32,111,102,112,108,117,103,105,110,115,112,97,103,101,47,
-105,110,100,101,120,46,112,104,112,63,114,101,109,97,105,110,101,100,32,105,110,
-116,114,97,110,115,102,111,114,109,101,100,72,101,32,119,97,115,32,97,108,115,
-111,119,97,115,32,97,108,114,101,97,100,121,115,116,97,116,105,115,116,105,99,97
-,108,105,110,32,102,97,118,111,114,32,111,102,77,105,110,105,115,116,114,121,32,
-111,102,109,111,118,101,109,101,110,116,32,111,102,102,111,114,109,117,108,97,
-116,105,111,110,105,115,32,114,101,113,117,105,114,101,100,60,108,105,110,107,32
-,114,101,108,61,34,84,104,105,115,32,105,115,32,116,104,101,32,60,97,32,104,114,
-101,102,61,34,47,112,111,112,117,108,97,114,105,122,101,100,105,110,118,111,108,
-118,101,100,32,105,110,97,114,101,32,117,115,101,100,32,116,111,97,110,100,32,
-115,101,118,101,114,97,108,109,97,100,101,32,98,121,32,116,104,101,115,101,101,
-109,115,32,116,111,32,98,101,108,105,107,101,108,121,32,116,104,97,116,80,97,108
-,101,115,116,105,110,105,97,110,110,97,109,101,100,32,97,102,116,101,114,105,116
-,32,104,97,100,32,98,101,101,110,109,111,115,116,32,99,111,109,109,111,110,116,
-111,32,114,101,102,101,114,32,116,111,98,117,116,32,116,104,105,115,32,105,115,
-99,111,110,115,101,99,117,116,105,118,101,116,101,109,112,111,114,97,114,105,108
-,121,73,110,32,103,101,110,101,114,97,108,44,99,111,110,118,101,110,116,105,111,
-110,115,116,97,107,101,115,32,112,108,97,99,101,115,117,98,100,105,118,105,115,
-105,111,110,116,101,114,114,105,116,111,114,105,97,108,111,112,101,114,97,116,
-105,111,110,97,108,112,101,114,109,97,110,101,110,116,108,121,119,97,115,32,108,
-97,114,103,101,108,121,111,117,116,98,114,101,97,107,32,111,102,105,110,32,116,
-104,101,32,112,97,115,116,102,111,108,108,111,119,105,110,103,32,97,32,120,109,
-108,110,115,58,111,103,61,34,62,60,97,32,99,108,97,115,115,61,34,99,108,97,115,
-115,61,34,116,101,120,116,67,111,110,118,101,114,115,105,111,110,32,109,97,121,
-32,98,101,32,117,115,101,100,109,97,110,117,102,97,99,116,117,114,101,97,102,116
-,101,114,32,98,101,105,110,103,99,108,101,97,114,102,105,120,34,62,10,113,117,
-101,115,116,105,111,110,32,111,102,119,97,115,32,101,108,101,99,116,101,100,116,
-111,32,98,101,99,111,109,101,32,97,98,101,99,97,117,115,101,32,111,102,32,115,
-111,109,101,32,112,101,111,112,108,101,105,110,115,112,105,114,101,100,32,98,121
-,115,117,99,99,101,115,115,102,117,108,32,97,32,116,105,109,101,32,119,104,101,
-110,109,111,114,101,32,99,111,109,109,111,110,97,109,111,110,103,115,116,32,116,
-104,101,97,110,32,111,102,102,105,99,105,97,108,119,105,100,116,104,58,49,48,48,
-37,59,116,101,99,104,110,111,108,111,103,121,44,119,97,115,32,97,100,111,112,116
-,101,100,116,111,32,107,101,101,112,32,116,104,101,115,101,116,116,108,101,109,
-101,110,116,115,108,105,118,101,32,98,105,114,116,104,115,105,110,100,101,120,46
-,104,116,109,108,34,67,111,110,110,101,99,116,105,99,117,116,97,115,115,105,103,
-110,101,100,32,116,111,38,97,109,112,59,116,105,109,101,115,59,97,99,99,111,117,
-110,116,32,102,111,114,97,108,105,103,110,61,114,105,103,104,116,116,104,101,32,
-99,111,109,112,97,110,121,97,108,119,97,121,115,32,98,101,101,110,114,101,116,
-117,114,110,101,100,32,116,111,105,110,118,111,108,118,101,109,101,110,116,66,
-101,99,97,117,115,101,32,116,104,101,116,104,105,115,32,112,101,114,105,111,100,
-34,32,110,97,109,101,61,34,113,34,32,99,111,110,102,105,110,101,100,32,116,111,
-97,32,114,101,115,117,108,116,32,111,102,118,97,108,117,101,61,34,34,32,47,62,
-105,115,32,97,99,116,117,97,108,108,121,69,110,118,105,114,111,110,109,101,110,
-116,13,10,60,47,104,101,97,100,62,13,10,67,111,110,118,101,114,115,101,108,121,
-44,62,10,60,100,105,118,32,105,100,61,34,48,34,32,119,105,100,116,104,61,34,49,
-105,115,32,112,114,111,98,97,98,108,121,104,97,118,101,32,98,101,99,111,109,101,
-99,111,110,116,114,111,108,108,105,110,103,116,104,101,32,112,114,111,98,108,101
-,109,99,105,116,105,122,101,110,115,32,111,102,112,111,108,105,116,105,99,105,97
-,110,115,114,101,97,99,104,101,100,32,116,104,101,97,115,32,101,97,114,108,121,
-32,97,115,58,110,111,110,101,59,32,111,118,101,114,60,116,97,98,108,101,32,99,
-101,108,108,118,97,108,105,100,105,116,121,32,111,102,100,105,114,101,99,116,108
-,121,32,116,111,111,110,109,111,117,115,101,100,111,119,110,119,104,101,114,101,
-32,105,116,32,105,115,119,104,101,110,32,105,116,32,119,97,115,109,101,109,98,
-101,114,115,32,111,102,32,114,101,108,97,116,105,111,110,32,116,111,97,99,99,111
-,109,109,111,100,97,116,101,97,108,111,110,103,32,119,105,116,104,32,73,110,32,
-116,104,101,32,108,97,116,101,116,104,101,32,69,110,103,108,105,115,104,100,101,
-108,105,99,105,111,117,115,34,62,116,104,105,115,32,105,115,32,110,111,116,116,
-104,101,32,112,114,101,115,101,110,116,105,102,32,116,104,101,121,32,97,114,101,
-97,110,100,32,102,105,110,97,108,108,121,97,32,109,97,116,116,101,114,32,111,102
-,13,10,9,60,47,100,105,118,62,13,10,13,10,60,47,115,99,114,105,112,116,62,102,97
-,115,116,101,114,32,116,104,97,110,109,97,106,111,114,105,116,121,32,111,102,97,
-102,116,101,114,32,119,104,105,99,104,99,111,109,112,97,114,97,116,105,118,101,
-116,111,32,109,97,105,110,116,97,105,110,105,109,112,114,111,118,101,32,116,104,
-101,97,119,97,114,100,101,100,32,116,104,101,101,114,34,32,99,108,97,115,115,61,
-34,102,114,97,109,101,98,111,114,100,101,114,114,101,115,116,111,114,97,116,105,
-111,110,105,110,32,116,104,101,32,115,97,109,101,97,110,97,108,121,115,105,115,
-32,111,102,116,104,101,105,114,32,102,105,114,115,116,68,117,114,105,110,103,32,
-116,104,101,32,99,111,110,116,105,110,101,110,116,97,108,115,101,113,117,101,110
-,99,101,32,111,102,102,117,110,99,116,105,111,110,40,41,123,102,111,110,116,45,
-115,105,122,101,58,32,119,111,114,107,32,111,110,32,116,104,101,60,47,115,99,114
-,105,112,116,62,10,60,98,101,103,105,110,115,32,119,105,116,104,106,97,118,97,
-115,99,114,105,112,116,58,99,111,110,115,116,105,116,117,101,110,116,119,97,115,
-32,102,111,117,110,100,101,100,101,113,117,105,108,105,98,114,105,117,109,97,115
-,115,117,109,101,32,116,104,97,116,105,115,32,103,105,118,101,110,32,98,121,110,
-101,101,100,115,32,116,111,32,98,101,99,111,111,114,100,105,110,97,116,101,115,
-116,104,101,32,118,97,114,105,111,117,115,97,114,101,32,112,97,114,116,32,111,
-102,111,110,108,121,32,105,110,32,116,104,101,115,101,99,116,105,111,110,115,32,
-111,102,105,115,32,97,32,99,111,109,109,111,110,116,104,101,111,114,105,101,115,
-32,111,102,100,105,115,99,111,118,101,114,105,101,115,97,115,115,111,99,105,97,
-116,105,111,110,101,100,103,101,32,111,102,32,116,104,101,115,116,114,101,110,
-103,116,104,32,111,102,112,111,115,105,116,105,111,110,32,105,110,112,114,101,
-115,101,110,116,45,100,97,121,117,110,105,118,101,114,115,97,108,108,121,116,111
-,32,102,111,114,109,32,116,104,101,98,117,116,32,105,110,115,116,101,97,100,99,
-111,114,112,111,114,97,116,105,111,110,97,116,116,97,99,104,101,100,32,116,111,
-105,115,32,99,111,109,109,111,110,108,121,114,101,97,115,111,110,115,32,102,111,
-114,32,38,113,117,111,116,59,116,104,101,32,99,97,110,32,98,101,32,109,97,100,
-101,119,97,115,32,97,98,108,101,32,116,111,119,104,105,99,104,32,109,101,97,110,
-115,98,117,116,32,100,105,100,32,110,111,116,111,110,77,111,117,115,101,79,118,
-101,114,97,115,32,112,111,115,115,105,98,108,101,111,112,101,114,97,116,101,100,
-32,98,121,99,111,109,105,110,103,32,102,114,111,109,116,104,101,32,112,114,105,
-109,97,114,121,97,100,100,105,116,105,111,110,32,111,102,102,111,114,32,115,101,
-118,101,114,97,108,116,114,97,110,115,102,101,114,114,101,100,97,32,112,101,114,
-105,111,100,32,111,102,97,114,101,32,97,98,108,101,32,116,111,104,111,119,101,
-118,101,114,44,32,105,116,115,104,111,117,108,100,32,104,97,118,101,109,117,99,
-104,32,108,97,114,103,101,114,10,9,60,47,115,99,114,105,112,116,62,97,100,111,
-112,116,101,100,32,116,104,101,112,114,111,112,101,114,116,121,32,111,102,100,
-105,114,101,99,116,101,100,32,98,121,101,102,102,101,99,116,105,118,101,108,121,
-119,97,115,32,98,114,111,117,103,104,116,99,104,105,108,100,114,101,110,32,111,
-102,80,114,111,103,114,97,109,109,105,110,103,108,111,110,103,101,114,32,116,104
-,97,110,109,97,110,117,115,99,114,105,112,116,115,119,97,114,32,97,103,97,105,
-110,115,116,98,121,32,109,101,97,110,115,32,111,102,97,110,100,32,109,111,115,
-116,32,111,102,115,105,109,105,108,97,114,32,116,111,32,112,114,111,112,114,105,
-101,116,97,114,121,111,114,105,103,105,110,97,116,105,110,103,112,114,101,115,
-116,105,103,105,111,117,115,103,114,97,109,109,97,116,105,99,97,108,101,120,112,
-101,114,105,101,110,99,101,46,116,111,32,109,97,107,101,32,116,104,101,73,116,32
-,119,97,115,32,97,108,115,111,105,115,32,102,111,117,110,100,32,105,110,99,111,
-109,112,101,116,105,116,111,114,115,105,110,32,116,104,101,32,85,46,83,46,114,
-101,112,108,97,99,101,32,116,104,101,98,114,111,117,103,104,116,32,116,104,101,
-99,97,108,99,117,108,97,116,105,111,110,102,97,108,108,32,111,102,32,116,104,101
-,116,104,101,32,103,101,110,101,114,97,108,112,114,97,99,116,105,99,97,108,108,
-121,105,110,32,104,111,110,111,114,32,111,102,114,101,108,101,97,115,101,100,32,
-105,110,114,101,115,105,100,101,110,116,105,97,108,97,110,100,32,115,111,109,101
-,32,111,102,107,105,110,103,32,111,102,32,116,104,101,114,101,97,99,116,105,111,
-110,32,116,111,49,115,116,32,69,97,114,108,32,111,102,99,117,108,116,117,114,101
-,32,97,110,100,112,114,105,110,99,105,112,97,108,108,121,60,47,116,105,116,108,
-101,62,10,32,32,116,104,101,121,32,99,97,110,32,98,101,98,97,99,107,32,116,111,
-32,116,104,101,115,111,109,101,32,111,102,32,104,105,115,101,120,112,111,115,117
-,114,101,32,116,111,97,114,101,32,115,105,109,105,108,97,114,102,111,114,109,32,
-111,102,32,116,104,101,97,100,100,70,97,118,111,114,105,116,101,99,105,116,105,
-122,101,110,115,104,105,112,112,97,114,116,32,105,110,32,116,104,101,112,101,111
-,112,108,101,32,119,105,116,104,105,110,32,112,114,97,99,116,105,99,101,116,111,
-32,99,111,110,116,105,110,117,101,38,97,109,112,59,109,105,110,117,115,59,97,112
-,112,114,111,118,101,100,32,98,121,32,116,104,101,32,102,105,114,115,116,32,97,
-108,108,111,119,101,100,32,116,104,101,97,110,100,32,102,111,114,32,116,104,101,
-102,117,110,99,116,105,111,110,105,110,103,112,108,97,121,105,110,103,32,116,104
-,101,115,111,108,117,116,105,111,110,32,116,111,104,101,105,103,104,116,61,34,48
-,34,32,105,110,32,104,105,115,32,98,111,111,107,109,111,114,101,32,116,104,97,
-110,32,97,102,111,108,108,111,119,115,32,116,104,101,99,114,101,97,116,101,100,
-32,116,104,101,112,114,101,115,101,110,99,101,32,105,110,38,110,98,115,112,59,60
-,47,116,100,62,110,97,116,105,111,110,97,108,105,115,116,116,104,101,32,105,100,
-101,97,32,111,102,97,32,99,104,97,114,97,99,116,101,114,119,101,114,101,32,102,
-111,114,99,101,100,32,99,108,97,115,115,61,34,98,116,110,100,97,121,115,32,111,
-102,32,116,104,101,102,101,97,116,117,114,101,100,32,105,110,115,104,111,119,105
-,110,103,32,116,104,101,105,110,116,101,114,101,115,116,32,105,110,105,110,32,
-112,108,97,99,101,32,111,102,116,117,114,110,32,111,102,32,116,104,101,116,104,
-101,32,104,101,97,100,32,111,102,76,111,114,100,32,111,102,32,116,104,101,112,
-111,108,105,116,105,99,97,108,108,121,104,97,115,32,105,116,115,32,111,119,110,
-69,100,117,99,97,116,105,111,110,97,108,97,112,112,114,111,118,97,108,32,111,102
-,115,111,109,101,32,111,102,32,116,104,101,101,97,99,104,32,111,116,104,101,114,
-44,98,101,104,97,118,105,111,114,32,111,102,97,110,100,32,98,101,99,97,117,115,
-101,97,110,100,32,97,110,111,116,104,101,114,97,112,112,101,97,114,101,100,32,
-111,110,114,101,99,111,114,100,101,100,32,105,110,98,108,97,99,107,38,113,117,
-111,116,59,109,97,121,32,105,110,99,108,117,100,101,116,104,101,32,119,111,114,
-108,100,39,115,99,97,110,32,108,101,97,100,32,116,111,114,101,102,101,114,115,32
-,116,111,32,97,98,111,114,100,101,114,61,34,48,34,32,103,111,118,101,114,110,109
-,101,110,116,32,119,105,110,110,105,110,103,32,116,104,101,114,101,115,117,108,
-116,101,100,32,105,110,32,119,104,105,108,101,32,116,104,101,32,87,97,115,104,
-105,110,103,116,111,110,44,116,104,101,32,115,117,98,106,101,99,116,99,105,116,
-121,32,105,110,32,116,104,101,62,60,47,100,105,118,62,13,10,9,9,114,101,102,108,
-101,99,116,32,116,104,101,116,111,32,99,111,109,112,108,101,116,101,98,101,99,97
-,109,101,32,109,111,114,101,114,97,100,105,111,97,99,116,105,118,101,114,101,106
-,101,99,116,101,100,32,98,121,119,105,116,104,111,117,116,32,97,110,121,104,105,
-115,32,102,97,116,104,101,114,44,119,104,105,99,104,32,99,111,117,108,100,99,111
-,112,121,32,111,102,32,116,104,101,116,111,32,105,110,100,105,99,97,116,101,97,
-32,112,111,108,105,116,105,99,97,108,97,99,99,111,117,110,116,115,32,111,102,99,
-111,110,115,116,105,116,117,116,101,115,119,111,114,107,101,100,32,119,105,116,
-104,101,114,60,47,97,62,60,47,108,105,62,111,102,32,104,105,115,32,108,105,102,
-101,97,99,99,111,109,112,97,110,105,101,100,99,108,105,101,110,116,87,105,100,
-116,104,112,114,101,118,101,110,116,32,116,104,101,76,101,103,105,115,108,97,116
-,105,118,101,100,105,102,102,101,114,101,110,116,108,121,116,111,103,101,116,104
-,101,114,32,105,110,104,97,115,32,115,101,118,101,114,97,108,102,111,114,32,97,
-110,111,116,104,101,114,116,101,120,116,32,111,102,32,116,104,101,102,111,117,
-110,100,101,100,32,116,104,101,101,32,119,105,116,104,32,116,104,101,32,105,115,
-32,117,115,101,100,32,102,111,114,99,104,97,110,103,101,100,32,116,104,101,117,
-115,117,97,108,108,121,32,116,104,101,112,108,97,99,101,32,119,104,101,114,101,
-119,104,101,114,101,97,115,32,116,104,101,62,32,60,97,32,104,114,101,102,61,34,
-34,62,60,97,32,104,114,101,102,61,34,116,104,101,109,115,101,108,118,101,115,44,
-97,108,116,104,111,117,103,104,32,104,101,116,104,97,116,32,99,97,110,32,98,101,
-116,114,97,100,105,116,105,111,110,97,108,114,111,108,101,32,111,102,32,116,104,
-101,97,115,32,97,32,114,101,115,117,108,116,114,101,109,111,118,101,67,104,105,
-108,100,100,101,115,105,103,110,101,100,32,98,121,119,101,115,116,32,111,102,32,
-116,104,101,83,111,109,101,32,112,101,111,112,108,101,112,114,111,100,117,99,116
-,105,111,110,44,115,105,100,101,32,111,102,32,116,104,101,110,101,119,115,108,
-101,116,116,101,114,115,117,115,101,100,32,98,121,32,116,104,101,100,111,119,110
-,32,116,111,32,116,104,101,97,99,99,101,112,116,101,100,32,98,121,108,105,118,
-101,32,105,110,32,116,104,101,97,116,116,101,109,112,116,115,32,116,111,111,117,
-116,115,105,100,101,32,116,104,101,102,114,101,113,117,101,110,99,105,101,115,72
-,111,119,101,118,101,114,44,32,105,110,112,114,111,103,114,97,109,109,101,114,
-115,97,116,32,108,101,97,115,116,32,105,110,97,112,112,114,111,120,105,109,97,
-116,101,97,108,116,104,111,117,103,104,32,105,116,119,97,115,32,112,97,114,116,
-32,111,102,97,110,100,32,118,97,114,105,111,117,115,71,111,118,101,114,110,111,
-114,32,111,102,116,104,101,32,97,114,116,105,99,108,101,116,117,114,110,101,100,
-32,105,110,116,111,62,60,97,32,104,114,101,102,61,34,47,116,104,101,32,101,99,
-111,110,111,109,121,105,115,32,116,104,101,32,109,111,115,116,109,111,115,116,32
-,119,105,100,101,108,121,119,111,117,108,100,32,108,97,116,101,114,97,110,100,32
-,112,101,114,104,97,112,115,114,105,115,101,32,116,111,32,116,104,101,111,99,99,
-117,114,115,32,119,104,101,110,117,110,100,101,114,32,119,104,105,99,104,99,111,
-110,100,105,116,105,111,110,115,46,116,104,101,32,119,101,115,116,101,114,110,
-116,104,101,111,114,121,32,116,104,97,116,105,115,32,112,114,111,100,117,99,101,
-100,116,104,101,32,99,105,116,121,32,111,102,105,110,32,119,104,105,99,104,32,
-104,101,115,101,101,110,32,105,110,32,116,104,101,116,104,101,32,99,101,110,116,
-114,97,108,98,117,105,108,100,105,110,103,32,111,102,109,97,110,121,32,111,102,
-32,104,105,115,97,114,101,97,32,111,102,32,116,104,101,105,115,32,116,104,101,32
-,111,110,108,121,109,111,115,116,32,111,102,32,116,104,101,109,97,110,121,32,111
-,102,32,116,104,101,116,104,101,32,87,101,115,116,101,114,110,84,104,101,114,101
-,32,105,115,32,110,111,101,120,116,101,110,100,101,100,32,116,111,83,116,97,116,
-105,115,116,105,99,97,108,99,111,108,115,112,97,110,61,50,32,124,115,104,111,114
-,116,32,115,116,111,114,121,112,111,115,115,105,98,108,101,32,116,111,116,111,
-112,111,108,111,103,105,99,97,108,99,114,105,116,105,99,97,108,32,111,102,114,
-101,112,111,114,116,101,100,32,116,111,97,32,67,104,114,105,115,116,105,97,110,
-100,101,99,105,115,105,111,110,32,116,111,105,115,32,101,113,117,97,108,32,116,
-111,112,114,111,98,108,101,109,115,32,111,102,84,104,105,115,32,99,97,110,32,98,
-101,109,101,114,99,104,97,110,100,105,115,101,102,111,114,32,109,111,115,116,32,
-111,102,110,111,32,101,118,105,100,101,110,99,101,101,100,105,116,105,111,110,
-115,32,111,102,101,108,101,109,101,110,116,115,32,105,110,38,113,117,111,116,59,
-46,32,84,104,101,99,111,109,47,105,109,97,103,101,115,47,119,104,105,99,104,32,
-109,97,107,101,115,116,104,101,32,112,114,111,99,101,115,115,114,101,109,97,105,
-110,115,32,116,104,101,108,105,116,101,114,97,116,117,114,101,44,105,115,32,97,
-32,109,101,109,98,101,114,116,104,101,32,112,111,112,117,108,97,114,116,104,101,
-32,97,110,99,105,101,110,116,112,114,111,98,108,101,109,115,32,105,110,116,105,
-109,101,32,111,102,32,116,104,101,100,101,102,101,97,116,101,100,32,98,121,98,
-111,100,121,32,111,102,32,116,104,101,97,32,102,101,119,32,121,101,97,114,115,
-109,117,99,104,32,111,102,32,116,104,101,116,104,101,32,119,111,114,107,32,111,
-102,67,97,108,105,102,111,114,110,105,97,44,115,101,114,118,101,100,32,97,115,32
-,97,103,111,118,101,114,110,109,101,110,116,46,99,111,110,99,101,112,116,115,32,
-111,102,109,111,118,101,109,101,110,116,32,105,110,9,9,60,100,105,118,32,105,100
-,61,34,105,116,34,32,118,97,108,117,101,61,34,108,97,110,103,117,97,103,101,32,
-111,102,97,115,32,116,104,101,121,32,97,114,101,112,114,111,100,117,99,101,100,
-32,105,110,105,115,32,116,104,97,116,32,116,104,101,101,120,112,108,97,105,110,
-32,116,104,101,100,105,118,62,60,47,100,105,118,62,10,72,111,119,101,118,101,114
-,32,116,104,101,108,101,97,100,32,116,111,32,116,104,101,9,60,97,32,104,114,101,
-102,61,34,47,119,97,115,32,103,114,97,110,116,101,100,112,101,111,112,108,101,32
-,104,97,118,101,99,111,110,116,105,110,117,97,108,108,121,119,97,115,32,115,101,
-101,110,32,97,115,97,110,100,32,114,101,108,97,116,101,100,116,104,101,32,114,
-111,108,101,32,111,102,112,114,111,112,111,115,101,100,32,98,121,111,102,32,116,
-104,101,32,98,101,115,116,101,97,99,104,32,111,116,104,101,114,46,67,111,110,115
-,116,97,110,116,105,110,101,112,101,111,112,108,101,32,102,114,111,109,100,105,
-97,108,101,99,116,115,32,111,102,116,111,32,114,101,118,105,115,105,111,110,119,
-97,115,32,114,101,110,97,109,101,100,97,32,115,111,117,114,99,101,32,111,102,116
-,104,101,32,105,110,105,116,105,97,108,108,97,117,110,99,104,101,100,32,105,110,
-112,114,111,118,105,100,101,32,116,104,101,116,111,32,116,104,101,32,119,101,115
-,116,119,104,101,114,101,32,116,104,101,114,101,97,110,100,32,115,105,109,105,
-108,97,114,98,101,116,119,101,101,110,32,116,119,111,105,115,32,97,108,115,111,
-32,116,104,101,69,110,103,108,105,115,104,32,97,110,100,99,111,110,100,105,116,
-105,111,110,115,44,116,104,97,116,32,105,116,32,119,97,115,101,110,116,105,116,
-108,101,100,32,116,111,116,104,101,109,115,101,108,118,101,115,46,113,117,97,110
-,116,105,116,121,32,111,102,114,97,110,115,112,97,114,101,110,99,121,116,104,101
-,32,115,97,109,101,32,97,115,116,111,32,106,111,105,110,32,116,104,101,99,111,
-117,110,116,114,121,32,97,110,100,116,104,105,115,32,105,115,32,116,104,101,84,
-104,105,115,32,108,101,100,32,116,111,97,32,115,116,97,116,101,109,101,110,116,
-99,111,110,116,114,97,115,116,32,116,111,108,97,115,116,73,110,100,101,120,79,
-102,116,104,114,111,117,103,104,32,104,105,115,105,115,32,100,101,115,105,103,
-110,101,100,116,104,101,32,116,101,114,109,32,105,115,105,115,32,112,114,111,118
-,105,100,101,100,112,114,111,116,101,99,116,32,116,104,101,110,103,60,47,97,62,
-60,47,108,105,62,84,104,101,32,99,117,114,114,101,110,116,116,104,101,32,115,105
-,116,101,32,111,102,115,117,98,115,116,97,110,116,105,97,108,101,120,112,101,114
-,105,101,110,99,101,44,105,110,32,116,104,101,32,87,101,115,116,116,104,101,121,
-32,115,104,111,117,108,100,115,108,111,118,101,110,196,141,105,110,97,99,111,109
-,101,110,116,97,114,105,111,115,117,110,105,118,101,114,115,105,100,97,100,99,
-111,110,100,105,99,105,111,110,101,115,97,99,116,105,118,105,100,97,100,101,115,
-101,120,112,101,114,105,101,110,99,105,97,116,101,99,110,111,108,111,103,195,173
-,97,112,114,111,100,117,99,99,105,195,179,110,112,117,110,116,117,97,99,105,195,
-179,110,97,112,108,105,99,97,99,105,195,179,110,99,111,110,116,114,97,115,101,
-195,177,97,99,97,116,101,103,111,114,195,173,97,115,114,101,103,105,115,116,114,
-97,114,115,101,112,114,111,102,101,115,105,111,110,97,108,116,114,97,116,97,109,
-105,101,110,116,111,114,101,103,195,173,115,116,114,97,116,101,115,101,99,114,
-101,116,97,114,195,173,97,112,114,105,110,99,105,112,97,108,101,115,112,114,111,
-116,101,99,99,105,195,179,110,105,109,112,111,114,116,97,110,116,101,115,105,109
-,112,111,114,116,97,110,99,105,97,112,111,115,105,98,105,108,105,100,97,100,105,
-110,116,101,114,101,115,97,110,116,101,99,114,101,99,105,109,105,101,110,116,111
-,110,101,99,101,115,105,100,97,100,101,115,115,117,115,99,114,105,98,105,114,115
-,101,97,115,111,99,105,97,99,105,195,179,110,100,105,115,112,111,110,105,98,108,
-101,115,101,118,97,108,117,97,99,105,195,179,110,101,115,116,117,100,105,97,110,
-116,101,115,114,101,115,112,111,110,115,97,98,108,101,114,101,115,111,108,117,99
-,105,195,179,110,103,117,97,100,97,108,97,106,97,114,97,114,101,103,105,115,116,
-114,97,100,111,115,111,112,111,114,116,117,110,105,100,97,100,99,111,109,101,114
-,99,105,97,108,101,115,102,111,116,111,103,114,97,102,195,173,97,97,117,116,111,
-114,105,100,97,100,101,115,105,110,103,101,110,105,101,114,195,173,97,116,101,
-108,101,118,105,115,105,195,179,110,99,111,109,112,101,116,101,110,99,105,97,111
-,112,101,114,97,99,105,111,110,101,115,101,115,116,97,98,108,101,99,105,100,111,
-115,105,109,112,108,101,109,101,110,116,101,97,99,116,117,97,108,109,101,110,116
-,101,110,97,118,101,103,97,99,105,195,179,110,99,111,110,102,111,114,109,105,100
-,97,100,108,105,110,101,45,104,101,105,103,104,116,58,102,111,110,116,45,102,97,
-109,105,108,121,58,34,32,58,32,34,104,116,116,112,58,47,47,97,112,112,108,105,99
-,97,116,105,111,110,115,108,105,110,107,34,32,104,114,101,102,61,34,115,112,101,
-99,105,102,105,99,97,108,108,121,47,47,60,33,91,67,68,65,84,65,91,10,79,114,103,
-97,110,105,122,97,116,105,111,110,100,105,115,116,114,105,98,117,116,105,111,110
-,48,112,120,59,32,104,101,105,103,104,116,58,114,101,108,97,116,105,111,110,115,
-104,105,112,100,101,118,105,99,101,45,119,105,100,116,104,60,100,105,118,32,99,
-108,97,115,115,61,34,60,108,97,98,101,108,32,102,111,114,61,34,114,101,103,105,
-115,116,114,97,116,105,111,110,60,47,110,111,115,99,114,105,112,116,62,10,47,105
-,110,100,101,120,46,104,116,109,108,34,119,105,110,100,111,119,46,111,112,101,
-110,40,32,33,105,109,112,111,114,116,97,110,116,59,97,112,112,108,105,99,97,116,
-105,111,110,47,105,110,100,101,112,101,110,100,101,110,99,101,47,47,119,119,119,
-46,103,111,111,103,108,101,111,114,103,97,110,105,122,97,116,105,111,110,97,117,
-116,111,99,111,109,112,108,101,116,101,114,101,113,117,105,114,101,109,101,110,
-116,115,99,111,110,115,101,114,118,97,116,105,118,101,60,102,111,114,109,32,110,
-97,109,101,61,34,105,110,116,101,108,108,101,99,116,117,97,108,109,97,114,103,
-105,110,45,108,101,102,116,58,49,56,116,104,32,99,101,110,116,117,114,121,97,110
-,32,105,109,112,111,114,116,97,110,116,105,110,115,116,105,116,117,116,105,111,
-110,115,97,98,98,114,101,118,105,97,116,105,111,110,60,105,109,103,32,99,108,97,
-115,115,61,34,111,114,103,97,110,105,115,97,116,105,111,110,99,105,118,105,108,
-105,122,97,116,105,111,110,49,57,116,104,32,99,101,110,116,117,114,121,97,114,99
-,104,105,116,101,99,116,117,114,101,105,110,99,111,114,112,111,114,97,116,101,
-100,50,48,116,104,32,99,101,110,116,117,114,121,45,99,111,110,116,97,105,110,101
-,114,34,62,109,111,115,116,32,110,111,116,97,98,108,121,47,62,60,47,97,62,60,47,
-100,105,118,62,110,111,116,105,102,105,99,97,116,105,111,110,39,117,110,100,101,
-102,105,110,101,100,39,41,70,117,114,116,104,101,114,109,111,114,101,44,98,101,
-108,105,101,118,101,32,116,104,97,116,105,110,110,101,114,72,84,77,76,32,61,32,
-112,114,105,111,114,32,116,111,32,116,104,101,100,114,97,109,97,116,105,99,97,
-108,108,121,114,101,102,101,114,114,105,110,103,32,116,111,110,101,103,111,116,
-105,97,116,105,111,110,115,104,101,97,100,113,117,97,114,116,101,114,115,83,111,
-117,116,104,32,65,102,114,105,99,97,117,110,115,117,99,99,101,115,115,102,117,
-108,80,101,110,110,115,121,108,118,97,110,105,97,65,115,32,97,32,114,101,115,117
-,108,116,44,60,104,116,109,108,32,108,97,110,103,61,34,38,108,116,59,47,115,117,
-112,38,103,116,59,100,101,97,108,105,110,103,32,119,105,116,104,112,104,105,108,
-97,100,101,108,112,104,105,97,104,105,115,116,111,114,105,99,97,108,108,121,41,
-59,60,47,115,99,114,105,112,116,62,10,112,97,100,100,105,110,103,45,116,111,112,
-58,101,120,112,101,114,105,109,101,110,116,97,108,103,101,116,65,116,116,114,105
-,98,117,116,101,105,110,115,116,114,117,99,116,105,111,110,115,116,101,99,104,
-110,111,108,111,103,105,101,115,112,97,114,116,32,111,102,32,116,104,101,32,61,
-102,117,110,99,116,105,111,110,40,41,123,115,117,98,115,99,114,105,112,116,105,
-111,110,108,46,100,116,100,34,62,13,10,60,104,116,103,101,111,103,114,97,112,104
-,105,99,97,108,67,111,110,115,116,105,116,117,116,105,111,110,39,44,32,102,117,
-110,99,116,105,111,110,40,115,117,112,112,111,114,116,101,100,32,98,121,97,103,
-114,105,99,117,108,116,117,114,97,108,99,111,110,115,116,114,117,99,116,105,111,
-110,112,117,98,108,105,99,97,116,105,111,110,115,102,111,110,116,45,115,105,122,
-101,58,32,49,97,32,118,97,114,105,101,116,121,32,111,102,60,100,105,118,32,115,
-116,121,108,101,61,34,69,110,99,121,99,108,111,112,101,100,105,97,105,102,114,97
-,109,101,32,115,114,99,61,34,100,101,109,111,110,115,116,114,97,116,101,100,97,
-99,99,111,109,112,108,105,115,104,101,100,117,110,105,118,101,114,115,105,116,
-105,101,115,68,101,109,111,103,114,97,112,104,105,99,115,41,59,60,47,115,99,114,
-105,112,116,62,60,100,101,100,105,99,97,116,101,100,32,116,111,107,110,111,119,
-108,101,100,103,101,32,111,102,115,97,116,105,115,102,97,99,116,105,111,110,112,
-97,114,116,105,99,117,108,97,114,108,121,60,47,100,105,118,62,60,47,100,105,118,
-62,69,110,103,108,105,115,104,32,40,85,83,41,97,112,112,101,110,100,67,104,105,
-108,100,40,116,114,97,110,115,109,105,115,115,105,111,110,115,46,32,72,111,119,
-101,118,101,114,44,32,105,110,116,101,108,108,105,103,101,110,99,101,34,32,116,
-97,98,105,110,100,101,120,61,34,102,108,111,97,116,58,114,105,103,104,116,59,67,
-111,109,109,111,110,119,101,97,108,116,104,114,97,110,103,105,110,103,32,102,114
-,111,109,105,110,32,119,104,105,99,104,32,116,104,101,97,116,32,108,101,97,115,
-116,32,111,110,101,114,101,112,114,111,100,117,99,116,105,111,110,101,110,99,121
-,99,108,111,112,101,100,105,97,59,102,111,110,116,45,115,105,122,101,58,49,106,
-117,114,105,115,100,105,99,116,105,111,110,97,116,32,116,104,97,116,32,116,105,
-109,101,34,62,60,97,32,99,108,97,115,115,61,34,73,110,32,97,100,100,105,116,105,
-111,110,44,100,101,115,99,114,105,112,116,105,111,110,43,99,111,110,118,101,114,
-115,97,116,105,111,110,99,111,110,116,97,99,116,32,119,105,116,104,105,115,32,
-103,101,110,101,114,97,108,108,121,114,34,32,99,111,110,116,101,110,116,61,34,
-114,101,112,114,101,115,101,110,116,105,110,103,38,108,116,59,109,97,116,104,38,
-103,116,59,112,114,101,115,101,110,116,97,116,105,111,110,111,99,99,97,115,105,
-111,110,97,108,108,121,60,105,109,103,32,119,105,100,116,104,61,34,110,97,118,
-105,103,97,116,105,111,110,34,62,99,111,109,112,101,110,115,97,116,105,111,110,
-99,104,97,109,112,105,111,110,115,104,105,112,109,101,100,105,97,61,34,97,108,
-108,34,32,118,105,111,108,97,116,105,111,110,32,111,102,114,101,102,101,114,101,
-110,99,101,32,116,111,114,101,116,117,114,110,32,116,114,117,101,59,83,116,114,
-105,99,116,47,47,69,78,34,32,116,114,97,110,115,97,99,116,105,111,110,115,105,
-110,116,101,114,118,101,110,116,105,111,110,118,101,114,105,102,105,99,97,116,
-105,111,110,73,110,102,111,114,109,97,116,105,111,110,32,100,105,102,102,105,99,
-117,108,116,105,101,115,67,104,97,109,112,105,111,110,115,104,105,112,99,97,112,
-97,98,105,108,105,116,105,101,115,60,33,91,101,110,100,105,102,93,45,45,62,125,
-10,60,47,115,99,114,105,112,116,62,10,67,104,114,105,115,116,105,97,110,105,116,
-121,102,111,114,32,101,120,97,109,112,108,101,44,80,114,111,102,101,115,115,105,
-111,110,97,108,114,101,115,116,114,105,99,116,105,111,110,115,115,117,103,103,
-101,115,116,32,116,104,97,116,119,97,115,32,114,101,108,101,97,115,101,100,40,
-115,117,99,104,32,97,115,32,116,104,101,114,101,109,111,118,101,67,108,97,115,
-115,40,117,110,101,109,112,108,111,121,109,101,110,116,116,104,101,32,65,109,101
-,114,105,99,97,110,115,116,114,117,99,116,117,114,101,32,111,102,47,105,110,100,
-101,120,46,104,116,109,108,32,112,117,98,108,105,115,104,101,100,32,105,110,115,
-112,97,110,32,99,108,97,115,115,61,34,34,62,60,97,32,104,114,101,102,61,34,47,
-105,110,116,114,111,100,117,99,116,105,111,110,98,101,108,111,110,103,105,110,
-103,32,116,111,99,108,97,105,109,101,100,32,116,104,97,116,99,111,110,115,101,
-113,117,101,110,99,101,115,60,109,101,116,97,32,110,97,109,101,61,34,71,117,105,
-100,101,32,116,111,32,116,104,101,111,118,101,114,119,104,101,108,109,105,110,
-103,97,103,97,105,110,115,116,32,116,104,101,32,99,111,110,99,101,110,116,114,97
-,116,101,100,44,10,46,110,111,110,116,111,117,99,104,32,111,98,115,101,114,118,
-97,116,105,111,110,115,60,47,97,62,10,60,47,100,105,118,62,10,102,32,40,100,111,
-99,117,109,101,110,116,46,98,111,114,100,101,114,58,32,49,112,120,32,123,102,111
-,110,116,45,115,105,122,101,58,49,116,114,101,97,116,109,101,110,116,32,111,102,
-48,34,32,104,101,105,103,104,116,61,34,49,109,111,100,105,102,105,99,97,116,105,
-111,110,73,110,100,101,112,101,110,100,101,110,99,101,100,105,118,105,100,101,
-100,32,105,110,116,111,103,114,101,97,116,101,114,32,116,104,97,110,97,99,104,
-105,101,118,101,109,101,110,116,115,101,115,116,97,98,108,105,115,104,105,110,
-103,74,97,118,97,83,99,114,105,112,116,34,32,110,101,118,101,114,116,104,101,108
-,101,115,115,115,105,103,110,105,102,105,99,97,110,99,101,66,114,111,97,100,99,
-97,115,116,105,110,103,62,38,110,98,115,112,59,60,47,116,100,62,99,111,110,116,
-97,105,110,101,114,34,62,10,115,117,99,104,32,97,115,32,116,104,101,32,105,110,
-102,108,117,101,110,99,101,32,111,102,97,32,112,97,114,116,105,99,117,108,97,114
-,115,114,99,61,39,104,116,116,112,58,47,47,110,97,118,105,103,97,116,105,111,110
-,34,32,104,97,108,102,32,111,102,32,116,104,101,32,115,117,98,115,116,97,110,116
-,105,97,108,32,38,110,98,115,112,59,60,47,100,105,118,62,97,100,118,97,110,116,
-97,103,101,32,111,102,100,105,115,99,111,118,101,114,121,32,111,102,102,117,110,
-100,97,109,101,110,116,97,108,32,109,101,116,114,111,112,111,108,105,116,97,110,
-116,104,101,32,111,112,112,111,115,105,116,101,34,32,120,109,108,58,108,97,110,
-103,61,34,100,101,108,105,98,101,114,97,116,101,108,121,97,108,105,103,110,61,99
-,101,110,116,101,114,101,118,111,108,117,116,105,111,110,32,111,102,112,114,101,
-115,101,114,118,97,116,105,111,110,105,109,112,114,111,118,101,109,101,110,116,
-115,98,101,103,105,110,110,105,110,103,32,105,110,74,101,115,117,115,32,67,104,
-114,105,115,116,80,117,98,108,105,99,97,116,105,111,110,115,100,105,115,97,103,
-114,101,101,109,101,110,116,116,101,120,116,45,97,108,105,103,110,58,114,44,32,
-102,117,110,99,116,105,111,110,40,41,115,105,109,105,108,97,114,105,116,105,101,
-115,98,111,100,121,62,60,47,104,116,109,108,62,105,115,32,99,117,114,114,101,110
-,116,108,121,97,108,112,104,97,98,101,116,105,99,97,108,105,115,32,115,111,109,
-101,116,105,109,101,115,116,121,112,101,61,34,105,109,97,103,101,47,109,97,110,
-121,32,111,102,32,116,104,101,32,102,108,111,119,58,104,105,100,100,101,110,59,
-97,118,97,105,108,97,98,108,101,32,105,110,100,101,115,99,114,105,98,101,32,116,
-104,101,101,120,105,115,116,101,110,99,101,32,111,102,97,108,108,32,111,118,101,
-114,32,116,104,101,116,104,101,32,73,110,116,101,114,110,101,116,9,60,117,108,32
-,99,108,97,115,115,61,34,105,110,115,116,97,108,108,97,116,105,111,110,110,101,
-105,103,104,98,111,114,104,111,111,100,97,114,109,101,100,32,102,111,114,99,101,
-115,114,101,100,117,99,105,110,103,32,116,104,101,99,111,110,116,105,110,117,101
-,115,32,116,111,78,111,110,101,116,104,101,108,101,115,115,44,116,101,109,112,
-101,114,97,116,117,114,101,115,10,9,9,60,97,32,104,114,101,102,61,34,99,108,111,
-115,101,32,116,111,32,116,104,101,101,120,97,109,112,108,101,115,32,111,102,32,
-105,115,32,97,98,111,117,116,32,116,104,101,40,115,101,101,32,98,101,108,111,119
-,41,46,34,32,105,100,61,34,115,101,97,114,99,104,112,114,111,102,101,115,115,105
-,111,110,97,108,105,115,32,97,118,97,105,108,97,98,108,101,116,104,101,32,111,
-102,102,105,99,105,97,108,9,9,60,47,115,99,114,105,112,116,62,10,10,9,9,60,100,
-105,118,32,105,100,61,34,97,99,99,101,108,101,114,97,116,105,111,110,116,104,114
-,111,117,103,104,32,116,104,101,32,72,97,108,108,32,111,102,32,70,97,109,101,100
-,101,115,99,114,105,112,116,105,111,110,115,116,114,97,110,115,108,97,116,105,
-111,110,115,105,110,116,101,114,102,101,114,101,110,99,101,32,116,121,112,101,61
-,39,116,101,120,116,47,114,101,99,101,110,116,32,121,101,97,114,115,105,110,32,
-116,104,101,32,119,111,114,108,100,118,101,114,121,32,112,111,112,117,108,97,114
-,123,98,97,99,107,103,114,111,117,110,100,58,116,114,97,100,105,116,105,111,110,
-97,108,32,115,111,109,101,32,111,102,32,116,104,101,32,99,111,110,110,101,99,116
-,101,100,32,116,111,101,120,112,108,111,105,116,97,116,105,111,110,101,109,101,
-114,103,101,110,99,101,32,111,102,99,111,110,115,116,105,116,117,116,105,111,110
-,65,32,72,105,115,116,111,114,121,32,111,102,115,105,103,110,105,102,105,99,97,
-110,116,32,109,97,110,117,102,97,99,116,117,114,101,100,101,120,112,101,99,116,
-97,116,105,111,110,115,62,60,110,111,115,99,114,105,112,116,62,60,99,97,110,32,
-98,101,32,102,111,117,110,100,98,101,99,97,117,115,101,32,116,104,101,32,104,97,
-115,32,110,111,116,32,98,101,101,110,110,101,105,103,104,98,111,117,114,105,110,
-103,119,105,116,104,111,117,116,32,116,104,101,32,97,100,100,101,100,32,116,111,
-32,116,104,101,9,60,108,105,32,99,108,97,115,115,61,34,105,110,115,116,114,117,
-109,101,110,116,97,108,83,111,118,105,101,116,32,85,110,105,111,110,97,99,107,
-110,111,119,108,101,100,103,101,100,119,104,105,99,104,32,99,97,110,32,98,101,
-110,97,109,101,32,102,111,114,32,116,104,101,97,116,116,101,110,116,105,111,110,
-32,116,111,97,116,116,101,109,112,116,115,32,116,111,32,100,101,118,101,108,111,
-112,109,101,110,116,115,73,110,32,102,97,99,116,44,32,116,104,101,60,108,105,32,
-99,108,97,115,115,61,34,97,105,109,112,108,105,99,97,116,105,111,110,115,115,117
-,105,116,97,98,108,101,32,102,111,114,109,117,99,104,32,111,102,32,116,104,101,
-32,99,111,108,111,110,105,122,97,116,105,111,110,112,114,101,115,105,100,101,110
-,116,105,97,108,99,97,110,99,101,108,66,117,98,98,108,101,32,73,110,102,111,114,
-109,97,116,105,111,110,109,111,115,116,32,111,102,32,116,104,101,32,105,115,32,
-100,101,115,99,114,105,98,101,100,114,101,115,116,32,111,102,32,116,104,101,32,
-109,111,114,101,32,111,114,32,108,101,115,115,105,110,32,83,101,112,116,101,109,
-98,101,114,73,110,116,101,108,108,105,103,101,110,99,101,115,114,99,61,34,104,
-116,116,112,58,47,47,112,120,59,32,104,101,105,103,104,116,58,32,97,118,97,105,
-108,97,98,108,101,32,116,111,109,97,110,117,102,97,99,116,117,114,101,114,104,
-117,109,97,110,32,114,105,103,104,116,115,108,105,110,107,32,104,114,101,102,61,
-34,47,97,118,97,105,108,97,98,105,108,105,116,121,112,114,111,112,111,114,116,
-105,111,110,97,108,111,117,116,115,105,100,101,32,116,104,101,32,97,115,116,114,
-111,110,111,109,105,99,97,108,104,117,109,97,110,32,98,101,105,110,103,115,110,
-97,109,101,32,111,102,32,116,104,101,32,97,114,101,32,102,111,117,110,100,32,105
-,110,97,114,101,32,98,97,115,101,100,32,111,110,115,109,97,108,108,101,114,32,
-116,104,97,110,97,32,112,101,114,115,111,110,32,119,104,111,101,120,112,97,110,
-115,105,111,110,32,111,102,97,114,103,117,105,110,103,32,116,104,97,116,110,111,
-119,32,107,110,111,119,110,32,97,115,73,110,32,116,104,101,32,101,97,114,108,121
-,105,110,116,101,114,109,101,100,105,97,116,101,100,101,114,105,118,101,100,32,
-102,114,111,109,83,99,97,110,100,105,110,97,118,105,97,110,60,47,97,62,60,47,100
-,105,118,62,13,10,99,111,110,115,105,100,101,114,32,116,104,101,97,110,32,101,
-115,116,105,109,97,116,101,100,116,104,101,32,78,97,116,105,111,110,97,108,60,
-100,105,118,32,105,100,61,34,112,97,103,114,101,115,117,108,116,105,110,103,32,
-105,110,99,111,109,109,105,115,115,105,111,110,101,100,97,110,97,108,111,103,111
-,117,115,32,116,111,97,114,101,32,114,101,113,117,105,114,101,100,47,117,108,62,
-10,60,47,100,105,118,62,10,119,97,115,32,98,97,115,101,100,32,111,110,97,110,100
-,32,98,101,99,97,109,101,32,97,38,110,98,115,112,59,38,110,98,115,112,59,116,34,
-32,118,97,108,117,101,61,34,34,32,119,97,115,32,99,97,112,116,117,114,101,100,
-110,111,32,109,111,114,101,32,116,104,97,110,114,101,115,112,101,99,116,105,118,
-101,108,121,99,111,110,116,105,110,117,101,32,116,111,32,62,13,10,60,104,101,97,
-100,62,13,10,60,119,101,114,101,32,99,114,101,97,116,101,100,109,111,114,101,32,
-103,101,110,101,114,97,108,105,110,102,111,114,109,97,116,105,111,110,32,117,115
-,101,100,32,102,111,114,32,116,104,101,105,110,100,101,112,101,110,100,101,110,
-116,32,116,104,101,32,73,109,112,101,114,105,97,108,99,111,109,112,111,110,101,
-110,116,32,111,102,116,111,32,116,104,101,32,110,111,114,116,104,105,110,99,108,
-117,100,101,32,116,104,101,32,67,111,110,115,116,114,117,99,116,105,111,110,115,
-105,100,101,32,111,102,32,116,104,101,32,119,111,117,108,100,32,110,111,116,32,
-98,101,102,111,114,32,105,110,115,116,97,110,99,101,105,110,118,101,110,116,105,
-111,110,32,111,102,109,111,114,101,32,99,111,109,112,108,101,120,99,111,108,108,
-101,99,116,105,118,101,108,121,98,97,99,107,103,114,111,117,110,100,58,32,116,
-101,120,116,45,97,108,105,103,110,58,32,105,116,115,32,111,114,105,103,105,110,
-97,108,105,110,116,111,32,97,99,99,111,117,110,116,116,104,105,115,32,112,114,
-111,99,101,115,115,97,110,32,101,120,116,101,110,115,105,118,101,104,111,119,101
-,118,101,114,44,32,116,104,101,116,104,101,121,32,97,114,101,32,110,111,116,114,
-101,106,101,99,116,101,100,32,116,104,101,99,114,105,116,105,99,105,115,109,32,
-111,102,100,117,114,105,110,103,32,119,104,105,99,104,112,114,111,98,97,98,108,
-121,32,116,104,101,116,104,105,115,32,97,114,116,105,99,108,101,40,102,117,110,
-99,116,105,111,110,40,41,123,73,116,32,115,104,111,117,108,100,32,98,101,97,110,
-32,97,103,114,101,101,109,101,110,116,97,99,99,105,100,101,110,116,97,108,108,
-121,100,105,102,102,101,114,115,32,102,114,111,109,65,114,99,104,105,116,101,99,
-116,117,114,101,98,101,116,116,101,114,32,107,110,111,119,110,97,114,114,97,110,
-103,101,109,101,110,116,115,105,110,102,108,117,101,110,99,101,32,111,110,97,116
-,116,101,110,100,101,100,32,116,104,101,105,100,101,110,116,105,99,97,108,32,116
-,111,115,111,117,116,104,32,111,102,32,116,104,101,112,97,115,115,32,116,104,114
-,111,117,103,104,120,109,108,34,32,116,105,116,108,101,61,34,119,101,105,103,104
-,116,58,98,111,108,100,59,99,114,101,97,116,105,110,103,32,116,104,101,100,105,
-115,112,108,97,121,58,110,111,110,101,114,101,112,108,97,99,101,100,32,116,104,
-101,60,105,109,103,32,115,114,99,61,34,47,105,104,116,116,112,115,58,47,47,119,
-119,119,46,87,111,114,108,100,32,87,97,114,32,73,73,116,101,115,116,105,109,111,
-110,105,97,108,115,102,111,117,110,100,32,105,110,32,116,104,101,114,101,113,117
-,105,114,101,100,32,116,111,32,97,110,100,32,116,104,97,116,32,116,104,101,98,
-101,116,119,101,101,110,32,116,104,101,32,119,97,115,32,100,101,115,105,103,110,
-101,100,99,111,110,115,105,115,116,115,32,111,102,32,99,111,110,115,105,100,101,
-114,97,98,108,121,112,117,98,108,105,115,104,101,100,32,98,121,116,104,101,32,
-108,97,110,103,117,97,103,101,67,111,110,115,101,114,118,97,116,105,111,110,99,
-111,110,115,105,115,116,101,100,32,111,102,114,101,102,101,114,32,116,111,32,116
-,104,101,98,97,99,107,32,116,111,32,116,104,101,32,99,115,115,34,32,109,101,100,
-105,97,61,34,80,101,111,112,108,101,32,102,114,111,109,32,97,118,97,105,108,97,
-98,108,101,32,111,110,112,114,111,118,101,100,32,116,111,32,98,101,115,117,103,
-103,101,115,116,105,111,110,115,34,119,97,115,32,107,110,111,119,110,32,97,115,
-118,97,114,105,101,116,105,101,115,32,111,102,108,105,107,101,108,121,32,116,111
-,32,98,101,99,111,109,112,114,105,115,101,100,32,111,102,115,117,112,112,111,114
-,116,32,116,104,101,32,104,97,110,100,115,32,111,102,32,116,104,101,99,111,117,
-112,108,101,100,32,119,105,116,104,99,111,110,110,101,99,116,32,97,110,100,32,98
-,111,114,100,101,114,58,110,111,110,101,59,112,101,114,102,111,114,109,97,110,99
-,101,115,98,101,102,111,114,101,32,98,101,105,110,103,108,97,116,101,114,32,98,
-101,99,97,109,101,99,97,108,99,117,108,97,116,105,111,110,115,111,102,116,101,
-110,32,99,97,108,108,101,100,114,101,115,105,100,101,110,116,115,32,111,102,109,
-101,97,110,105,110,103,32,116,104,97,116,62,60,108,105,32,99,108,97,115,115,61,
-34,101,118,105,100,101,110,99,101,32,102,111,114,101,120,112,108,97,110,97,116,
-105,111,110,115,101,110,118,105,114,111,110,109,101,110,116,115,34,62,60,47,97,
-62,60,47,100,105,118,62,119,104,105,99,104,32,97,108,108,111,119,115,73,110,116,
-114,111,100,117,99,116,105,111,110,100,101,118,101,108,111,112,101,100,32,98,121
-,97,32,119,105,100,101,32,114,97,110,103,101,111,110,32,98,101,104,97,108,102,32
-,111,102,118,97,108,105,103,110,61,34,116,111,112,34,112,114,105,110,99,105,112,
-108,101,32,111,102,97,116,32,116,104,101,32,116,105,109,101,44,60,47,110,111,115
-,99,114,105,112,116,62,13,115,97,105,100,32,116,111,32,104,97,118,101,105,110,32
-,116,104,101,32,102,105,114,115,116,119,104,105,108,101,32,111,116,104,101,114,
-115,104,121,112,111,116,104,101,116,105,99,97,108,112,104,105,108,111,115,111,
-112,104,101,114,115,112,111,119,101,114,32,111,102,32,116,104,101,99,111,110,116
-,97,105,110,101,100,32,105,110,112,101,114,102,111,114,109,101,100,32,98,121,105
-,110,97,98,105,108,105,116,121,32,116,111,119,101,114,101,32,119,114,105,116,116
-,101,110,115,112,97,110,32,115,116,121,108,101,61,34,105,110,112,117,116,32,110,
-97,109,101,61,34,116,104,101,32,113,117,101,115,116,105,111,110,105,110,116,101,
-110,100,101,100,32,102,111,114,114,101,106,101,99,116,105,111,110,32,111,102,105
-,109,112,108,105,101,115,32,116,104,97,116,105,110,118,101,110,116,101,100,32,
-116,104,101,116,104,101,32,115,116,97,110,100,97,114,100,119,97,115,32,112,114,
-111,98,97,98,108,121,108,105,110,107,32,98,101,116,119,101,101,110,112,114,111,
-102,101,115,115,111,114,32,111,102,105,110,116,101,114,97,99,116,105,111,110,115
-,99,104,97,110,103,105,110,103,32,116,104,101,73,110,100,105,97,110,32,79,99,101
-,97,110,32,99,108,97,115,115,61,34,108,97,115,116,119,111,114,107,105,110,103,32
-,119,105,116,104,39,104,116,116,112,58,47,47,119,119,119,46,121,101,97,114,115,
-32,98,101,102,111,114,101,84,104,105,115,32,119,97,115,32,116,104,101,114,101,99
-,114,101,97,116,105,111,110,97,108,101,110,116,101,114,105,110,103,32,116,104,
-101,109,101,97,115,117,114,101,109,101,110,116,115,97,110,32,101,120,116,114,101
-,109,101,108,121,118,97,108,117,101,32,111,102,32,116,104,101,115,116,97,114,116
-,32,111,102,32,116,104,101,10,60,47,115,99,114,105,112,116,62,10,10,97,110,32,
-101,102,102,111,114,116,32,116,111,105,110,99,114,101,97,115,101,32,116,104,101,
-116,111,32,116,104,101,32,115,111,117,116,104,115,112,97,99,105,110,103,61,34,48
-,34,62,115,117,102,102,105,99,105,101,110,116,108,121,116,104,101,32,69,117,114,
-111,112,101,97,110,99,111,110,118,101,114,116,101,100,32,116,111,99,108,101,97,
-114,84,105,109,101,111,117,116,100,105,100,32,110,111,116,32,104,97,118,101,99,
-111,110,115,101,113,117,101,110,116,108,121,102,111,114,32,116,104,101,32,110,
-101,120,116,101,120,116,101,110,115,105,111,110,32,111,102,101,99,111,110,111,
-109,105,99,32,97,110,100,97,108,116,104,111,117,103,104,32,116,104,101,97,114,
-101,32,112,114,111,100,117,99,101,100,97,110,100,32,119,105,116,104,32,116,104,
-101,105,110,115,117,102,102,105,99,105,101,110,116,103,105,118,101,110,32,98,121
-,32,116,104,101,115,116,97,116,105,110,103,32,116,104,97,116,101,120,112,101,110
-,100,105,116,117,114,101,115,60,47,115,112,97,110,62,60,47,97,62,10,116,104,111,
-117,103,104,116,32,116,104,97,116,111,110,32,116,104,101,32,98,97,115,105,115,99
-,101,108,108,112,97,100,100,105,110,103,61,105,109,97,103,101,32,111,102,32,116,
-104,101,114,101,116,117,114,110,105,110,103,32,116,111,105,110,102,111,114,109,
-97,116,105,111,110,44,115,101,112,97,114,97,116,101,100,32,98,121,97,115,115,97,
-115,115,105,110,97,116,101,100,115,34,32,99,111,110,116,101,110,116,61,34,97,117
-,116,104,111,114,105,116,121,32,111,102,110,111,114,116,104,119,101,115,116,101,
-114,110,60,47,100,105,118,62,10,60,100,105,118,32,34,62,60,47,100,105,118,62,13,
-10,32,32,99,111,110,115,117,108,116,97,116,105,111,110,99,111,109,109,117,110,
-105,116,121,32,111,102,116,104,101,32,110,97,116,105,111,110,97,108,105,116,32,
-115,104,111,117,108,100,32,98,101,112,97,114,116,105,99,105,112,97,110,116,115,
-32,97,108,105,103,110,61,34,108,101,102,116,116,104,101,32,103,114,101,97,116,
-101,115,116,115,101,108,101,99,116,105,111,110,32,111,102,115,117,112,101,114,
-110,97,116,117,114,97,108,100,101,112,101,110,100,101,110,116,32,111,110,105,115
-,32,109,101,110,116,105,111,110,101,100,97,108,108,111,119,105,110,103,32,116,
-104,101,119,97,115,32,105,110,118,101,110,116,101,100,97,99,99,111,109,112,97,
-110,121,105,110,103,104,105,115,32,112,101,114,115,111,110,97,108,97,118,97,105,
-108,97,98,108,101,32,97,116,115,116,117,100,121,32,111,102,32,116,104,101,111,
-110,32,116,104,101,32,111,116,104,101,114,101,120,101,99,117,116,105,111,110,32,
-111,102,72,117,109,97,110,32,82,105,103,104,116,115,116,101,114,109,115,32,111,
-102,32,116,104,101,97,115,115,111,99,105,97,116,105,111,110,115,114,101,115,101,
-97,114,99,104,32,97,110,100,115,117,99,99,101,101,100,101,100,32,98,121,100,101,
-102,101,97,116,101,100,32,116,104,101,97,110,100,32,102,114,111,109,32,116,104,
-101,98,117,116,32,116,104,101,121,32,97,114,101,99,111,109,109,97,110,100,101,
-114,32,111,102,115,116,97,116,101,32,111,102,32,116,104,101,121,101,97,114,115,
-32,111,102,32,97,103,101,116,104,101,32,115,116,117,100,121,32,111,102,60,117,
-108,32,99,108,97,115,115,61,34,115,112,108,97,99,101,32,105,110,32,116,104,101,
-119,104,101,114,101,32,104,101,32,119,97,115,60,108,105,32,99,108,97,115,115,61,
-34,102,116,104,101,114,101,32,97,114,101,32,110,111,119,104,105,99,104,32,98,101
-,99,97,109,101,104,101,32,112,117,98,108,105,115,104,101,100,101,120,112,114,101
-,115,115,101,100,32,105,110,116,111,32,119,104,105,99,104,32,116,104,101,99,111,
-109,109,105,115,115,105,111,110,101,114,102,111,110,116,45,119,101,105,103,104,
-116,58,116,101,114,114,105,116,111,114,121,32,111,102,101,120,116,101,110,115,
-105,111,110,115,34,62,82,111,109,97,110,32,69,109,112,105,114,101,101,113,117,97
-,108,32,116,111,32,116,104,101,73,110,32,99,111,110,116,114,97,115,116,44,104,
-111,119,101,118,101,114,44,32,97,110,100,105,115,32,116,121,112,105,99,97,108,
-108,121,97,110,100,32,104,105,115,32,119,105,102,101,40,97,108,115,111,32,99,97,
-108,108,101,100,62,60,117,108,32,99,108,97,115,115,61,34,101,102,102,101,99,116,
-105,118,101,108,121,32,101,118,111,108,118,101,100,32,105,110,116,111,115,101,
-101,109,32,116,111,32,104,97,118,101,119,104,105,99,104,32,105,115,32,116,104,
-101,116,104,101,114,101,32,119,97,115,32,110,111,97,110,32,101,120,99,101,108,
-108,101,110,116,97,108,108,32,111,102,32,116,104,101,115,101,100,101,115,99,114,
-105,98,101,100,32,98,121,73,110,32,112,114,97,99,116,105,99,101,44,98,114,111,97
-,100,99,97,115,116,105,110,103,99,104,97,114,103,101,100,32,119,105,116,104,114,
-101,102,108,101,99,116,101,100,32,105,110,115,117,98,106,101,99,116,101,100,32,
-116,111,109,105,108,105,116,97,114,121,32,97,110,100,116,111,32,116,104,101,32,
-112,111,105,110,116,101,99,111,110,111,109,105,99,97,108,108,121,115,101,116,84,
-97,114,103,101,116,105,110,103,97,114,101,32,97,99,116,117,97,108,108,121,118,
-105,99,116,111,114,121,32,111,118,101,114,40,41,59,60,47,115,99,114,105,112,116,
-62,99,111,110,116,105,110,117,111,117,115,108,121,114,101,113,117,105,114,101,
-100,32,102,111,114,101,118,111,108,117,116,105,111,110,97,114,121,97,110,32,101,
-102,102,101,99,116,105,118,101,110,111,114,116,104,32,111,102,32,116,104,101,44,
-32,119,104,105,99,104,32,119,97,115,32,102,114,111,110,116,32,111,102,32,116,104
-,101,111,114,32,111,116,104,101,114,119,105,115,101,115,111,109,101,32,102,111,
-114,109,32,111,102,104,97,100,32,110,111,116,32,98,101,101,110,103,101,110,101,
-114,97,116,101,100,32,98,121,105,110,102,111,114,109,97,116,105,111,110,46,112,
-101,114,109,105,116,116,101,100,32,116,111,105,110,99,108,117,100,101,115,32,116
-,104,101,100,101,118,101,108,111,112,109,101,110,116,44,101,110,116,101,114,101,
-100,32,105,110,116,111,116,104,101,32,112,114,101,118,105,111,117,115,99,111,110
-,115,105,115,116,101,110,116,108,121,97,114,101,32,107,110,111,119,110,32,97,115
-,116,104,101,32,102,105,101,108,100,32,111,102,116,104,105,115,32,116,121,112,
-101,32,111,102,103,105,118,101,110,32,116,111,32,116,104,101,116,104,101,32,116,
-105,116,108,101,32,111,102,99,111,110,116,97,105,110,115,32,116,104,101,105,110,
-115,116,97,110,99,101,115,32,111,102,105,110,32,116,104,101,32,110,111,114,116,
-104,100,117,101,32,116,111,32,116,104,101,105,114,97,114,101,32,100,101,115,105,
-103,110,101,100,99,111,114,112,111,114,97,116,105,111,110,115,119,97,115,32,116,
-104,97,116,32,116,104,101,111,110,101,32,111,102,32,116,104,101,115,101,109,111,
-114,101,32,112,111,112,117,108,97,114,115,117,99,99,101,101,100,101,100,32,105,
-110,115,117,112,112,111,114,116,32,102,114,111,109,105,110,32,100,105,102,102,
-101,114,101,110,116,100,111,109,105,110,97,116,101,100,32,98,121,100,101,115,105
-,103,110,101,100,32,102,111,114,111,119,110,101,114,115,104,105,112,32,111,102,
-97,110,100,32,112,111,115,115,105,98,108,121,115,116,97,110,100,97,114,100,105,
-122,101,100,114,101,115,112,111,110,115,101,84,101,120,116,119,97,115,32,105,110
-,116,101,110,100,101,100,114,101,99,101,105,118,101,100,32,116,104,101,97,115,
-115,117,109,101,100,32,116,104,97,116,97,114,101,97,115,32,111,102,32,116,104,
-101,112,114,105,109,97,114,105,108,121,32,105,110,116,104,101,32,98,97,115,105,
-115,32,111,102,105,110,32,116,104,101,32,115,101,110,115,101,97,99,99,111,117,
-110,116,115,32,102,111,114,100,101,115,116,114,111,121,101,100,32,98,121,97,116,
-32,108,101,97,115,116,32,116,119,111,119,97,115,32,100,101,99,108,97,114,101,100
-,99,111,117,108,100,32,110,111,116,32,98,101,83,101,99,114,101,116,97,114,121,32
-,111,102,97,112,112,101,97,114,32,116,111,32,98,101,109,97,114,103,105,110,45,
-116,111,112,58,49,47,94,92,115,43,124,92,115,43,36,47,103,101,41,123,116,104,114
-,111,119,32,101,125,59,116,104,101,32,115,116,97,114,116,32,111,102,116,119,111,
-32,115,101,112,97,114,97,116,101,108,97,110,103,117,97,103,101,32,97,110,100,119
-,104,111,32,104,97,100,32,98,101,101,110,111,112,101,114,97,116,105,111,110,32,
-111,102,100,101,97,116,104,32,111,102,32,116,104,101,114,101,97,108,32,110,117,
-109,98,101,114,115,9,60,108,105,110,107,32,114,101,108,61,34,112,114,111,118,105
-,100,101,100,32,116,104,101,116,104,101,32,115,116,111,114,121,32,111,102,99,111
-,109,112,101,116,105,116,105,111,110,115,101,110,103,108,105,115,104,32,40,85,75
-,41,101,110,103,108,105,115,104,32,40,85,83,41,208,156,208,190,208,189,208,179,
-208,190,208,187,208,161,209,128,208,191,209,129,208,186,208,184,209,129,209,128,
-208,191,209,129,208,186,208,184,209,129,209,128,208,191,209,129,208,186,208,190,
-217,132,216,185,216,177,216,168,217,138,216,169,230,173,163,233,171,148,228,184,
-173,230,150,135,231,174,128,228,189,147,228,184,173,230,150,135,231,185,129,228,
-189,147,228,184,173,230,150,135,230,156,137,233,153,144,229,133,172,229,143,184,
-228,186,186,230,176,145,230,148,191,229,186,156,233,152,191,233,135,140,229,183,
-180,229,183,180,231,164,190,228,188,154,228,184,187,228,185,137,230,147,141,228,
-189,156,231,179,187,231,187,159,230,148,191,231,173,150,230,179,149,232,167,132,
-105,110,102,111,114,109,97,99,105,195,179,110,104,101,114,114,97,109,105,101,110
-,116,97,115,101,108,101,99,116,114,195,179,110,105,99,111,100,101,115,99,114,105
-,112,99,105,195,179,110,99,108,97,115,105,102,105,99,97,100,111,115,99,111,110,
-111,99,105,109,105,101,110,116,111,112,117,98,108,105,99,97,99,105,195,179,110,
-114,101,108,97,99,105,111,110,97,100,97,115,105,110,102,111,114,109,195,161,116,
-105,99,97,114,101,108,97,99,105,111,110,97,100,111,115,100,101,112,97,114,116,97
-,109,101,110,116,111,116,114,97,98,97,106,97,100,111,114,101,115,100,105,114,101
-,99,116,97,109,101,110,116,101,97,121,117,110,116,97,109,105,101,110,116,111,109
-,101,114,99,97,100,111,76,105,98,114,101,99,111,110,116,195,161,99,116,101,110,
-111,115,104,97,98,105,116,97,99,105,111,110,101,115,99,117,109,112,108,105,109,
-105,101,110,116,111,114,101,115,116,97,117,114,97,110,116,101,115,100,105,115,
-112,111,115,105,99,105,195,179,110,99,111,110,115,101,99,117,101,110,99,105,97,
-101,108,101,99,116,114,195,179,110,105,99,97,97,112,108,105,99,97,99,105,111,110
-,101,115,100,101,115,99,111,110,101,99,116,97,100,111,105,110,115,116,97,108,97,
-99,105,195,179,110,114,101,97,108,105,122,97,99,105,195,179,110,117,116,105,108,
-105,122,97,99,105,195,179,110,101,110,99,105,99,108,111,112,101,100,105,97,101,
-110,102,101,114,109,101,100,97,100,101,115,105,110,115,116,114,117,109,101,110,
-116,111,115,101,120,112,101,114,105,101,110,99,105,97,115,105,110,115,116,105,
-116,117,99,105,195,179,110,112,97,114,116,105,99,117,108,97,114,101,115,115,117,
-98,99,97,116,101,103,111,114,105,97,209,130,208,190,208,187,209,140,208,186,208,
-190,208,160,208,190,209,129,209,129,208,184,208,184,209,128,208,176,208,177,208,
-190,209,130,209,139,208,177,208,190,208,187,209,140,209,136,208,181,208,191,209,
-128,208,190,209,129,209,130,208,190,208,188,208,190,208,182,208,181,209,130,208,
-181,208,180,209,128,209,131,208,179,208,184,209,133,209,129,208,187,209,131,209,
-135,208,176,208,181,209,129,208,181,208,185,209,135,208,176,209,129,208,178,209,
-129,208,181,208,179,208,180,208,176,208,160,208,190,209,129,209,129,208,184,209,
-143,208,156,208,190,209,129,208,186,208,178,208,181,208,180,209,128,209,131,208,
-179,208,184,208,181,208,179,208,190,209,128,208,190,208,180,208,176,208,178,208,
-190,208,191,209,128,208,190,209,129,208,180,208,176,208,189,208,189,209,139,209,
-133,208,180,208,190,208,187,208,182,208,189,209,139,208,184,208,188,208,181,208,
-189,208,189,208,190,208,156,208,190,209,129,208,186,208,178,209,139,209,128,209,
-131,208,177,208,187,208,181,208,185,208,156,208,190,209,129,208,186,208,178,208,
-176,209,129,209,130,209,128,208,176,208,189,209,139,208,189,208,184,209,135,208,
-181,208,179,208,190,209,128,208,176,208,177,208,190,209,130,208,181,208,180,208,
-190,208,187,208,182,208,181,208,189,209,131,209,129,208,187,209,131,208,179,208,
-184,209,130,208,181,208,191,208,181,209,128,209,140,208,158,208,180,208,189,208,
-176,208,186,208,190,208,191,208,190,209,130,208,190,208,188,209,131,209,128,208,
-176,208,177,208,190,209,130,209,131,208,176,208,191,209,128,208,181,208,187,209,
-143,208,178,208,190,208,190,208,177,209,137,208,181,208,190,208,180,208,189,208,
-190,208,179,208,190,209,129,208,178,208,190,208,181,208,179,208,190,209,129,209,
-130,208,176,209,130,209,140,208,184,208,180,209,128,209,131,208,179,208,190,208,
-185,209,132,208,190,209,128,209,131,208,188,208,181,209,133,208,190,209,128,208,
-190,209,136,208,190,208,191,209,128,208,190,209,130,208,184,208,178,209,129,209,
-129,209,139,208,187,208,186,208,176,208,186,208,176,208,182,208,180,209,139,208,
-185,208,178,208,187,208,176,209,129,209,130,208,184,208,179,209,128,209,131,208,
-191,208,191,209,139,208,178,208,188,208,181,209,129,209,130,208,181,209,128,208,
-176,208,177,208,190,209,130,208,176,209,129,208,186,208,176,208,183,208,176,208,
-187,208,191,208,181,209,128,208,178,209,139,208,185,208,180,208,181,208,187,208,
-176,209,130,209,140,208,180,208,181,208,189,209,140,208,179,208,184,208,191,208,
-181,209,128,208,184,208,190,208,180,208,177,208,184,208,183,208,189,208,181,209,
-129,208,190,209,129,208,189,208,190,208,178,208,181,208,188,208,190,208,188,208,
-181,208,189,209,130,208,186,209,131,208,191,208,184,209,130,209,140,208,180,208,
-190,208,187,208,182,208,189,208,176,209,128,208,176,208,188,208,186,208,176,209,
-133,208,189,208,176,209,135,208,176,208,187,208,190,208,160,208,176,208,177,208,
-190,209,130,208,176,208,162,208,190,208,187,209,140,208,186,208,190,209,129,208,
-190,208,178,209,129,208,181,208,188,208,178,209,130,208,190,209,128,208,190,208,
-185,208,189,208,176,209,135,208,176,208,187,208,176,209,129,208,191,208,184,209,
-129,208,190,208,186,209,129,208,187,209,131,208,182,208,177,209,139,209,129,208,
-184,209,129,209,130,208,181,208,188,208,191,208,181,209,135,208,176,209,130,208,
-184,208,189,208,190,208,178,208,190,208,179,208,190,208,191,208,190,208,188,208,
-190,209,137,208,184,209,129,208,176,208,185,209,130,208,190,208,178,208,191,208,
-190,209,135,208,181,208,188,209,131,208,191,208,190,208,188,208,190,209,137,209,
-140,208,180,208,190,208,187,208,182,208,189,208,190,209,129,209,129,209,139,208,
-187,208,186,208,184,208,177,209,139,209,129,209,130,209,128,208,190,208,180,208,
-176,208,189,208,189,209,139,208,181,208,188,208,189,208,190,208,179,208,184,208,
-181,208,191,209,128,208,190,208,181,208,186,209,130,208,161,208,181,208,185,209,
-135,208,176,209,129,208,188,208,190,208,180,208,181,208,187,208,184,209,130,208,
-176,208,186,208,190,208,179,208,190,208,190,208,189,208,187,208,176,208,185,208,
-189,208,179,208,190,209,128,208,190,208,180,208,181,208,178,208,181,209,128,209,
-129,208,184,209,143,209,129,209,130,209,128,208,176,208,189,208,181,209,132,208,
-184,208,187,209,140,208,188,209,139,209,131,209,128,208,190,208,178,208,189,209,
-143,209,128,208,176,208,183,208,189,209,139,209,133,208,184,209,129,208,186,208,
-176,209,130,209,140,208,189,208,181,208,180,208,181,208,187,209,142,209,143,208,
-189,208,178,208,176,209,128,209,143,208,188,208,181,208,189,209,140,209,136,208,
-181,208,188,208,189,208,190,208,179,208,184,209,133,208,180,208,176,208,189,208,
-189,208,190,208,185,208,183,208,189,208,176,209,135,208,184,209,130,208,189,208,
-181,208,187,209,140,208,183,209,143,209,132,208,190,209,128,209,131,208,188,208,
-176,208,162,208,181,208,191,208,181,209,128,209,140,208,188,208,181,209,129,209,
-143,209,134,208,176,208,183,208,176,209,137,208,184,209,130,209,139,208,155,209,
-131,209,135,209,136,208,184,208,181,224,164,168,224,164,185,224,165,128,224,164,
-130,224,164,149,224,164,176,224,164,168,224,165,135,224,164,133,224,164,170,224,
-164,168,224,165,135,224,164,149,224,164,191,224,164,175,224,164,190,224,164,149,
-224,164,176,224,165,135,224,164,130,224,164,133,224,164,168,224,165,141,224,164,
-175,224,164,149,224,165,141,224,164,175,224,164,190,224,164,151,224,164,190,224,
-164,135,224,164,161,224,164,172,224,164,190,224,164,176,224,165,135,224,164,149,
-224,164,191,224,164,184,224,165,128,224,164,166,224,164,191,224,164,175,224,164,
-190,224,164,170,224,164,185,224,164,178,224,165,135,224,164,184,224,164,191,224,
-164,130,224,164,185,224,164,173,224,164,190,224,164,176,224,164,164,224,164,133,
-224,164,170,224,164,168,224,165,128,224,164,181,224,164,190,224,164,178,224,165,
-135,224,164,184,224,165,135,224,164,181,224,164,190,224,164,149,224,164,176,224,
-164,164,224,165,135,224,164,174,224,165,135,224,164,176,224,165,135,224,164,185,
-224,165,139,224,164,168,224,165,135,224,164,184,224,164,149,224,164,164,224,165,
-135,224,164,172,224,164,185,224,165,129,224,164,164,224,164,184,224,164,190,224,
-164,135,224,164,159,224,164,185,224,165,139,224,164,151,224,164,190,224,164,156,
-224,164,190,224,164,168,224,165,135,224,164,174,224,164,191,224,164,168,224,164,
-159,224,164,149,224,164,176,224,164,164,224,164,190,224,164,149,224,164,176,224,
-164,168,224,164,190,224,164,137,224,164,168,224,164,149,224,165,135,224,164,175,
-224,164,185,224,164,190,224,164,129,224,164,184,224,164,172,224,164,184,224,165,
-135,224,164,173,224,164,190,224,164,183,224,164,190,224,164,134,224,164,170,224,
-164,149,224,165,135,224,164,178,224,164,191,224,164,175,224,165,135,224,164,182,
-224,165,129,224,164,176,224,165,130,224,164,135,224,164,184,224,164,149,224,165,
-135,224,164,152,224,164,130,224,164,159,224,165,135,224,164,174,224,165,135,224,
-164,176,224,165,128,224,164,184,224,164,149,224,164,164,224,164,190,224,164,174,
-224,165,135,224,164,176,224,164,190,224,164,178,224,165,135,224,164,149,224,164,
-176,224,164,133,224,164,167,224,164,191,224,164,149,224,164,133,224,164,170,224,
-164,168,224,164,190,224,164,184,224,164,174,224,164,190,224,164,156,224,164,174,
-224,165,129,224,164,157,224,165,135,224,164,149,224,164,190,224,164,176,224,164,
-163,224,164,185,224,165,139,224,164,164,224,164,190,224,164,149,224,164,161,224,
-164,188,224,165,128,224,164,175,224,164,185,224,164,190,224,164,130,224,164,185,
-224,165,139,224,164,159,224,164,178,224,164,182,224,164,172,224,165,141,224,164,
-166,224,164,178,224,164,191,224,164,175,224,164,190,224,164,156,224,165,128,224,
-164,181,224,164,168,224,164,156,224,164,190,224,164,164,224,164,190,224,164,149,
-224,165,136,224,164,184,224,165,135,224,164,134,224,164,170,224,164,149,224,164,
-190,224,164,181,224,164,190,224,164,178,224,165,128,224,164,166,224,165,135,224,
-164,168,224,165,135,224,164,170,224,165,130,224,164,176,224,165,128,224,164,170,
-224,164,190,224,164,168,224,165,128,224,164,137,224,164,184,224,164,149,224,165,
-135,224,164,185,224,165,139,224,164,151,224,165,128,224,164,172,224,165,136,224,
-164,160,224,164,149,224,164,134,224,164,170,224,164,149,224,165,128,224,164,181,
-224,164,176,224,165,141,224,164,183,224,164,151,224,164,190,224,164,130,224,164,
-181,224,164,134,224,164,170,224,164,149,224,165,139,224,164,156,224,164,191,224,
-164,178,224,164,190,224,164,156,224,164,190,224,164,168,224,164,190,224,164,184,
-224,164,185,224,164,174,224,164,164,224,164,185,224,164,174,224,165,135,224,164,
-130,224,164,137,224,164,168,224,164,149,224,165,128,224,164,175,224,164,190,224,
-164,185,224,165,130,224,164,166,224,164,176,224,165,141,224,164,156,224,164,184,
-224,165,130,224,164,154,224,165,128,224,164,170,224,164,184,224,164,130,224,164,
-166,224,164,184,224,164,181,224,164,190,224,164,178,224,164,185,224,165,139,224,
-164,168,224,164,190,224,164,185,224,165,139,224,164,164,224,165,128,224,164,156,
-224,165,136,224,164,184,224,165,135,224,164,181,224,164,190,224,164,170,224,164,
-184,224,164,156,224,164,168,224,164,164,224,164,190,224,164,168,224,165,135,224,
-164,164,224,164,190,224,164,156,224,164,190,224,164,176,224,165,128,224,164,152,
-224,164,190,224,164,175,224,164,178,224,164,156,224,164,191,224,164,178,224,165,
-135,224,164,168,224,165,128,224,164,154,224,165,135,224,164,156,224,164,190,224,
-164,130,224,164,154,224,164,170,224,164,164,224,165,141,224,164,176,224,164,151,
-224,165,130,224,164,151,224,164,178,224,164,156,224,164,190,224,164,164,224,165,
-135,224,164,172,224,164,190,224,164,185,224,164,176,224,164,134,224,164,170,224,
-164,168,224,165,135,224,164,181,224,164,190,224,164,185,224,164,168,224,164,135,
-224,164,184,224,164,149,224,164,190,224,164,184,224,165,129,224,164,172,224,164,
-185,224,164,176,224,164,185,224,164,168,224,165,135,224,164,135,224,164,184,224,
-164,184,224,165,135,224,164,184,224,164,185,224,164,191,224,164,164,224,164,172,
-224,164,161,224,164,188,224,165,135,224,164,152,224,164,159,224,164,168,224,164,
-190,224,164,164,224,164,178,224,164,190,224,164,182,224,164,170,224,164,190,224,
-164,130,224,164,154,224,164,182,224,165,141,224,164,176,224,165,128,224,164,172,
-224,164,161,224,164,188,224,165,128,224,164,185,224,165,139,224,164,164,224,165,
-135,224,164,184,224,164,190,224,164,136,224,164,159,224,164,182,224,164,190,224,
-164,175,224,164,166,224,164,184,224,164,149,224,164,164,224,165,128,224,164,156,
-224,164,190,224,164,164,224,165,128,224,164,181,224,164,190,224,164,178,224,164,
-190,224,164,185,224,164,156,224,164,190,224,164,176,224,164,170,224,164,159,224,
-164,168,224,164,190,224,164,176,224,164,150,224,164,168,224,165,135,224,164,184,
-224,164,161,224,164,188,224,164,149,224,164,174,224,164,191,224,164,178,224,164,
-190,224,164,137,224,164,184,224,164,149,224,165,128,224,164,149,224,165,135,224,
-164,181,224,164,178,224,164,178,224,164,151,224,164,164,224,164,190,224,164,150,
-224,164,190,224,164,168,224,164,190,224,164,133,224,164,176,224,165,141,224,164,
-165,224,164,156,224,164,185,224,164,190,224,164,130,224,164,166,224,165,135,224,
-164,150,224,164,190,224,164,170,224,164,185,224,164,178,224,165,128,224,164,168,
-224,164,191,224,164,175,224,164,174,224,164,172,224,164,191,224,164,168,224,164,
-190,224,164,172,224,165,136,224,164,130,224,164,149,224,164,149,224,164,185,224,
-165,128,224,164,130,224,164,149,224,164,185,224,164,168,224,164,190,224,164,166,
-224,165,135,224,164,164,224,164,190,224,164,185,224,164,174,224,164,178,224,165,
-135,224,164,149,224,164,190,224,164,171,224,165,128,224,164,156,224,164,172,224,
-164,149,224,164,191,224,164,164,224,165,129,224,164,176,224,164,164,224,164,174,
-224,164,190,224,164,130,224,164,151,224,164,181,224,164,185,224,165,128,224,164,
-130,224,164,176,224,165,139,224,164,156,224,164,188,224,164,174,224,164,191,224,
-164,178,224,165,128,224,164,134,224,164,176,224,165,139,224,164,170,224,164,184,
-224,165,135,224,164,168,224,164,190,224,164,175,224,164,190,224,164,166,224,164,
-181,224,164,178,224,165,135,224,164,168,224,165,135,224,164,150,224,164,190,224,
-164,164,224,164,190,224,164,149,224,164,176,224,165,128,224,164,172,224,164,137,
-224,164,168,224,164,149,224,164,190,224,164,156,224,164,181,224,164,190,224,164,
-172,224,164,170,224,165,130,224,164,176,224,164,190,224,164,172,224,164,161,224,
-164,188,224,164,190,224,164,184,224,165,140,224,164,166,224,164,190,224,164,182,
-224,165,135,224,164,175,224,164,176,224,164,149,224,164,191,224,164,175,224,165,
-135,224,164,149,224,164,185,224,164,190,224,164,130,224,164,133,224,164,149,224,
-164,184,224,164,176,224,164,172,224,164,168,224,164,190,224,164,143,224,164,181,
-224,164,185,224,164,190,224,164,130,224,164,184,224,165,141,224,164,165,224,164,
-178,224,164,174,224,164,191,224,164,178,224,165,135,224,164,178,224,165,135,224,
-164,150,224,164,149,224,164,181,224,164,191,224,164,183,224,164,175,224,164,149,
-224,165,141,224,164,176,224,164,130,224,164,184,224,164,174,224,165,130,224,164,
-185,224,164,165,224,164,190,224,164,168,224,164,190,216,170,216,179,216,170,216,
-183,217,138,216,185,217,133,216,180,216,167,216,177,217,131,216,169,216,168,217,
-136,216,167,216,179,216,183,216,169,216,167,217,132,216,181,217,129,216,173,216,
-169,217,133,217,136,216,167,216,182,217,138,216,185,216,167,217,132,216,174,216,
-167,216,181,216,169,216,167,217,132,217,133,216,178,217,138,216,175,216,167,217,
-132,216,185,216,167,217,133,216,169,216,167,217,132,217,131,216,167,216,170,216,
-168,216,167,217,132,216,177,216,175,217,136,216,175,216,168,216,177,217,134,216,
-167,217,133,216,172,216,167,217,132,216,175,217,136,217,132,216,169,216,167,217,
-132,216,185,216,167,217,132,217,133,216,167,217,132,217,133,217,136,217,130,216,
-185,216,167,217,132,216,185,216,177,216,168,217,138,216,167,217,132,216,179,216,
-177,217,138,216,185,216,167,217,132,216,172,217,136,216,167,217,132,216,167,217,
-132,216,176,217,135,216,167,216,168,216,167,217,132,216,173,217,138,216,167,216,
-169,216,167,217,132,216,173,217,130,217,136,217,130,216,167,217,132,217,131,216,
-177,217,138,217,133,216,167,217,132,216,185,216,177,216,167,217,130,217,133,216,
-173,217,129,217,136,216,184,216,169,216,167,217,132,216,171,216,167,217,134,217,
-138,217,133,216,180,216,167,217,135,216,175,216,169,216,167,217,132,217,133,216,
-177,216,163,216,169,216,167,217,132,217,130,216,177,216,162,217,134,216,167,217,
-132,216,180,216,168,216,167,216,168,216,167,217,132,216,173,217,136,216,167,216,
-177,216,167,217,132,216,172,216,175,217,138,216,175,216,167,217,132,216,163,216,
-179,216,177,216,169,216,167,217,132,216,185,217,132,217,136,217,133,217,133,216,
-172,217,133,217,136,216,185,216,169,216,167,217,132,216,177,216,173,217,133,217,
-134,216,167,217,132,217,134,217,130,216,167,216,183,217,129,217,132,216,179,216,
-183,217,138,217,134,216,167,217,132,217,131,217,136,217,138,216,170,216,167,217,
-132,216,175,217,134,217,138,216,167,216,168,216,177,217,131,216,167,216,170,217,
-135,216,167,217,132,216,177,217,138,216,167,216,182,216,170,216,173,217,138,216,
-167,216,170,217,138,216,168,216,170,217,136,217,130,217,138,216,170,216,167,217,
-132,216,163,217,136,217,132,217,137,216,167,217,132,216,168,216,177,217,138,216,
-175,216,167,217,132,217,131,217,132,216,167,217,133,216,167,217,132,216,177,216,
-167,216,168,216,183,216,167,217,132,216,180,216,174,216,181,217,138,216,179,217,
-138,216,167,216,177,216,167,216,170,216,167,217,132,216,171,216,167,217,132,216,
-171,216,167,217,132,216,181,217,132,216,167,216,169,216,167,217,132,216,173,216,
-175,217,138,216,171,216,167,217,132,216,178,217,136,216,167,216,177,216,167,217,
-132,216,174,217,132,217,138,216,172,216,167,217,132,216,172,217,133,217,138,216,
-185,216,167,217,132,216,185,216,167,217,133,217,135,216,167,217,132,216,172,217,
-133,216,167,217,132,216,167,217,132,216,179,216,167,216,185,216,169,217,133,216,
-180,216,167,217,135,216,175,217,135,216,167,217,132,216,177,216,166,217,138,216,
-179,216,167,217,132,216,175,216,174,217,136,217,132,216,167,217,132,217,129,217,
-134,217,138,216,169,216,167,217,132,217,131,216,170,216,167,216,168,216,167,217,
-132,216,175,217,136,216,177,217,138,216,167,217,132,216,175,216,177,217,136,216,
-179,216,167,216,179,216,170,216,186,216,177,217,130,216,170,216,181,216,167,217,
-133,217,138,217,133,216,167,217,132,216,168,217,134,216,167,216,170,216,167,217,
-132,216,185,216,184,217,138,217,133,101,110,116,101,114,116,97,105,110,109,101,
-110,116,117,110,100,101,114,115,116,97,110,100,105,110,103,32,61,32,102,117,110,
-99,116,105,111,110,40,41,46,106,112,103,34,32,119,105,100,116,104,61,34,99,111,
-110,102,105,103,117,114,97,116,105,111,110,46,112,110,103,34,32,119,105,100,116,
-104,61,34,60,98,111,100,121,32,99,108,97,115,115,61,34,77,97,116,104,46,114,97,
-110,100,111,109,40,41,99,111,110,116,101,109,112,111,114,97,114,121,32,85,110,
-105,116,101,100,32,83,116,97,116,101,115,99,105,114,99,117,109,115,116,97,110,99
-,101,115,46,97,112,112,101,110,100,67,104,105,108,100,40,111,114,103,97,110,105,
-122,97,116,105,111,110,115,60,115,112,97,110,32,99,108,97,115,115,61,34,34,62,60
-,105,109,103,32,115,114,99,61,34,47,100,105,115,116,105,110,103,117,105,115,104,
-101,100,116,104,111,117,115,97,110,100,115,32,111,102,32,99,111,109,109,117,110,
-105,99,97,116,105,111,110,99,108,101,97,114,34,62,60,47,100,105,118,62,105,110,
-118,101,115,116,105,103,97,116,105,111,110,102,97,118,105,99,111,110,46,105,99,
-111,34,32,109,97,114,103,105,110,45,114,105,103,104,116,58,98,97,115,101,100,32,
-111,110,32,116,104,101,32,77,97,115,115,97,99,104,117,115,101,116,116,115,116,97
-,98,108,101,32,98,111,114,100,101,114,61,105,110,116,101,114,110,97,116,105,111,
-110,97,108,97,108,115,111,32,107,110,111,119,110,32,97,115,112,114,111,110,117,
-110,99,105,97,116,105,111,110,98,97,99,107,103,114,111,117,110,100,58,35,102,112
-,97,100,100,105,110,103,45,108,101,102,116,58,70,111,114,32,101,120,97,109,112,
-108,101,44,32,109,105,115,99,101,108,108,97,110,101,111,117,115,38,108,116,59,47
-,109,97,116,104,38,103,116,59,112,115,121,99,104,111,108,111,103,105,99,97,108,
-105,110,32,112,97,114,116,105,99,117,108,97,114,101,97,114,99,104,34,32,116,121,
-112,101,61,34,102,111,114,109,32,109,101,116,104,111,100,61,34,97,115,32,111,112
-,112,111,115,101,100,32,116,111,83,117,112,114,101,109,101,32,67,111,117,114,116
-,111,99,99,97,115,105,111,110,97,108,108,121,32,65,100,100,105,116,105,111,110,
-97,108,108,121,44,78,111,114,116,104,32,65,109,101,114,105,99,97,112,120,59,98,
-97,99,107,103,114,111,117,110,100,111,112,112,111,114,116,117,110,105,116,105,
-101,115,69,110,116,101,114,116,97,105,110,109,101,110,116,46,116,111,76,111,119,
-101,114,67,97,115,101,40,109,97,110,117,102,97,99,116,117,114,105,110,103,112,
-114,111,102,101,115,115,105,111,110,97,108,32,99,111,109,98,105,110,101,100,32,
-119,105,116,104,70,111,114,32,105,110,115,116,97,110,99,101,44,99,111,110,115,
-105,115,116,105,110,103,32,111,102,34,32,109,97,120,108,101,110,103,116,104,61,
-34,114,101,116,117,114,110,32,102,97,108,115,101,59,99,111,110,115,99,105,111,
-117,115,110,101,115,115,77,101,100,105,116,101,114,114,97,110,101,97,110,101,120
-,116,114,97,111,114,100,105,110,97,114,121,97,115,115,97,115,115,105,110,97,116,
-105,111,110,115,117,98,115,101,113,117,101,110,116,108,121,32,98,117,116,116,111
-,110,32,116,121,112,101,61,34,116,104,101,32,110,117,109,98,101,114,32,111,102,
-116,104,101,32,111,114,105,103,105,110,97,108,32,99,111,109,112,114,101,104,101,
-110,115,105,118,101,114,101,102,101,114,115,32,116,111,32,116,104,101,60,47,117,
-108,62,10,60,47,100,105,118,62,10,112,104,105,108,111,115,111,112,104,105,99,97,
-108,108,111,99,97,116,105,111,110,46,104,114,101,102,119,97,115,32,112,117,98,
-108,105,115,104,101,100,83,97,110,32,70,114,97,110,99,105,115,99,111,40,102,117,
-110,99,116,105,111,110,40,41,123,10,60,100,105,118,32,105,100,61,34,109,97,105,
-110,115,111,112,104,105,115,116,105,99,97,116,101,100,109,97,116,104,101,109,97,
-116,105,99,97,108,32,47,104,101,97,100,62,13,10,60,98,111,100,121,115,117,103,
-103,101,115,116,115,32,116,104,97,116,100,111,99,117,109,101,110,116,97,116,105,
-111,110,99,111,110,99,101,110,116,114,97,116,105,111,110,114,101,108,97,116,105,
-111,110,115,104,105,112,115,109,97,121,32,104,97,118,101,32,98,101,101,110,40,
-102,111,114,32,101,120,97,109,112,108,101,44,84,104,105,115,32,97,114,116,105,99
-,108,101,32,105,110,32,115,111,109,101,32,99,97,115,101,115,112,97,114,116,115,
-32,111,102,32,116,104,101,32,100,101,102,105,110,105,116,105,111,110,32,111,102,
-71,114,101,97,116,32,66,114,105,116,97,105,110,32,99,101,108,108,112,97,100,100,
-105,110,103,61,101,113,117,105,118,97,108,101,110,116,32,116,111,112,108,97,99,
-101,104,111,108,100,101,114,61,34,59,32,102,111,110,116,45,115,105,122,101,58,32
-,106,117,115,116,105,102,105,99,97,116,105,111,110,98,101,108,105,101,118,101,
-100,32,116,104,97,116,115,117,102,102,101,114,101,100,32,102,114,111,109,97,116,
-116,101,109,112,116,101,100,32,116,111,32,108,101,97,100,101,114,32,111,102,32,
-116,104,101,99,114,105,112,116,34,32,115,114,99,61,34,47,40,102,117,110,99,116,
-105,111,110,40,41,32,123,97,114,101,32,97,118,97,105,108,97,98,108,101,10,9,60,
-108,105,110,107,32,114,101,108,61,34,32,115,114,99,61,39,104,116,116,112,58,47,
-47,105,110,116,101,114,101,115,116,101,100,32,105,110,99,111,110,118,101,110,116
-,105,111,110,97,108,32,34,32,97,108,116,61,34,34,32,47,62,60,47,97,114,101,32,
-103,101,110,101,114,97,108,108,121,104,97,115,32,97,108,115,111,32,98,101,101,
-110,109,111,115,116,32,112,111,112,117,108,97,114,32,99,111,114,114,101,115,112,
-111,110,100,105,110,103,99,114,101,100,105,116,101,100,32,119,105,116,104,116,
-121,108,101,61,34,98,111,114,100,101,114,58,60,47,97,62,60,47,115,112,97,110,62,
-60,47,46,103,105,102,34,32,119,105,100,116,104,61,34,60,105,102,114,97,109,101,
-32,115,114,99,61,34,116,97,98,108,101,32,99,108,97,115,115,61,34,105,110,108,105
-,110,101,45,98,108,111,99,107,59,97,99,99,111,114,100,105,110,103,32,116,111,32,
-116,111,103,101,116,104,101,114,32,119,105,116,104,97,112,112,114,111,120,105,
-109,97,116,101,108,121,112,97,114,108,105,97,109,101,110,116,97,114,121,109,111,
-114,101,32,97,110,100,32,109,111,114,101,100,105,115,112,108,97,121,58,110,111,
-110,101,59,116,114,97,100,105,116,105,111,110,97,108,108,121,112,114,101,100,111
-,109,105,110,97,110,116,108,121,38,110,98,115,112,59,124,38,110,98,115,112,59,38
-,110,98,115,112,59,60,47,115,112,97,110,62,32,99,101,108,108,115,112,97,99,105,
-110,103,61,60,105,110,112,117,116,32,110,97,109,101,61,34,111,114,34,32,99,111,
-110,116,101,110,116,61,34,99,111,110,116,114,111,118,101,114,115,105,97,108,112,
-114,111,112,101,114,116,121,61,34,111,103,58,47,120,45,115,104,111,99,107,119,97
-,118,101,45,100,101,109,111,110,115,116,114,97,116,105,111,110,115,117,114,114,
-111,117,110,100,101,100,32,98,121,78,101,118,101,114,116,104,101,108,101,115,115
-,44,119,97,115,32,116,104,101,32,102,105,114,115,116,99,111,110,115,105,100,101,
-114,97,98,108,101,32,65,108,116,104,111,117,103,104,32,116,104,101,32,99,111,108
-,108,97,98,111,114,97,116,105,111,110,115,104,111,117,108,100,32,110,111,116,32,
-98,101,112,114,111,112,111,114,116,105,111,110,32,111,102,60,115,112,97,110,32,
-115,116,121,108,101,61,34,107,110,111,119,110,32,97,115,32,116,104,101,32,115,
-104,111,114,116,108,121,32,97,102,116,101,114,102,111,114,32,105,110,115,116,97,
-110,99,101,44,100,101,115,99,114,105,98,101,100,32,97,115,32,47,104,101,97,100,
-62,10,60,98,111,100,121,32,115,116,97,114,116,105,110,103,32,119,105,116,104,105
-,110,99,114,101,97,115,105,110,103,108,121,32,116,104,101,32,102,97,99,116,32,
-116,104,97,116,100,105,115,99,117,115,115,105,111,110,32,111,102,109,105,100,100
-,108,101,32,111,102,32,116,104,101,97,110,32,105,110,100,105,118,105,100,117,97,
-108,100,105,102,102,105,99,117,108,116,32,116,111,32,112,111,105,110,116,32,111,
-102,32,118,105,101,119,104,111,109,111,115,101,120,117,97,108,105,116,121,97,99,
-99,101,112,116,97,110,99,101,32,111,102,60,47,115,112,97,110,62,60,47,100,105,
-118,62,109,97,110,117,102,97,99,116,117,114,101,114,115,111,114,105,103,105,110,
-32,111,102,32,116,104,101,99,111,109,109,111,110,108,121,32,117,115,101,100,105,
-109,112,111,114,116,97,110,99,101,32,111,102,100,101,110,111,109,105,110,97,116,
-105,111,110,115,98,97,99,107,103,114,111,117,110,100,58,32,35,108,101,110,103,
-116,104,32,111,102,32,116,104,101,100,101,116,101,114,109,105,110,97,116,105,111
-,110,97,32,115,105,103,110,105,102,105,99,97,110,116,34,32,98,111,114,100,101,
-114,61,34,48,34,62,114,101,118,111,108,117,116,105,111,110,97,114,121,112,114,
-105,110,99,105,112,108,101,115,32,111,102,105,115,32,99,111,110,115,105,100,101,
-114,101,100,119,97,115,32,100,101,118,101,108,111,112,101,100,73,110,100,111,45,
-69,117,114,111,112,101,97,110,118,117,108,110,101,114,97,98,108,101,32,116,111,
-112,114,111,112,111,110,101,110,116,115,32,111,102,97,114,101,32,115,111,109,101
-,116,105,109,101,115,99,108,111,115,101,114,32,116,111,32,116,104,101,78,101,119
-,32,89,111,114,107,32,67,105,116,121,32,110,97,109,101,61,34,115,101,97,114,99,
-104,97,116,116,114,105,98,117,116,101,100,32,116,111,99,111,117,114,115,101,32,
-111,102,32,116,104,101,109,97,116,104,101,109,97,116,105,99,105,97,110,98,121,32
-,116,104,101,32,101,110,100,32,111,102,97,116,32,116,104,101,32,101,110,100,32,
-111,102,34,32,98,111,114,100,101,114,61,34,48,34,32,116,101,99,104,110,111,108,
-111,103,105,99,97,108,46,114,101,109,111,118,101,67,108,97,115,115,40,98,114,97,
-110,99,104,32,111,102,32,116,104,101,101,118,105,100,101,110,99,101,32,116,104,
-97,116,33,91,101,110,100,105,102,93,45,45,62,13,10,73,110,115,116,105,116,117,
-116,101,32,111,102,32,105,110,116,111,32,97,32,115,105,110,103,108,101,114,101,
-115,112,101,99,116,105,118,101,108,121,46,97,110,100,32,116,104,101,114,101,102,
-111,114,101,112,114,111,112,101,114,116,105,101,115,32,111,102,105,115,32,108,
-111,99,97,116,101,100,32,105,110,115,111,109,101,32,111,102,32,119,104,105,99,
-104,84,104,101,114,101,32,105,115,32,97,108,115,111,99,111,110,116,105,110,117,
-101,100,32,116,111,32,97,112,112,101,97,114,97,110,99,101,32,111,102,32,38,97,
-109,112,59,110,100,97,115,104,59,32,100,101,115,99,114,105,98,101,115,32,116,104
-,101,99,111,110,115,105,100,101,114,97,116,105,111,110,97,117,116,104,111,114,32
-,111,102,32,116,104,101,105,110,100,101,112,101,110,100,101,110,116,108,121,101,
-113,117,105,112,112,101,100,32,119,105,116,104,100,111,101,115,32,110,111,116,32
-,104,97,118,101,60,47,97,62,60,97,32,104,114,101,102,61,34,99,111,110,102,117,
-115,101,100,32,119,105,116,104,60,108,105,110,107,32,104,114,101,102,61,34,47,97
-,116,32,116,104,101,32,97,103,101,32,111,102,97,112,112,101,97,114,32,105,110,32
-,116,104,101,84,104,101,115,101,32,105,110,99,108,117,100,101,114,101,103,97,114
-,100,108,101,115,115,32,111,102,99,111,117,108,100,32,98,101,32,117,115,101,100,
-32,115,116,121,108,101,61,38,113,117,111,116,59,115,101,118,101,114,97,108,32,
-116,105,109,101,115,114,101,112,114,101,115,101,110,116,32,116,104,101,98,111,
-100,121,62,10,60,47,104,116,109,108,62,116,104,111,117,103,104,116,32,116,111,32
-,98,101,112,111,112,117,108,97,116,105,111,110,32,111,102,112,111,115,115,105,98
-,105,108,105,116,105,101,115,112,101,114,99,101,110,116,97,103,101,32,111,102,97
-,99,99,101,115,115,32,116,111,32,116,104,101,97,110,32,97,116,116,101,109,112,
-116,32,116,111,112,114,111,100,117,99,116,105,111,110,32,111,102,106,113,117,101
-,114,121,47,106,113,117,101,114,121,116,119,111,32,100,105,102,102,101,114,101,
-110,116,98,101,108,111,110,103,32,116,111,32,116,104,101,101,115,116,97,98,108,
-105,115,104,109,101,110,116,114,101,112,108,97,99,105,110,103,32,116,104,101,100
-,101,115,99,114,105,112,116,105,111,110,34,32,100,101,116,101,114,109,105,110,
-101,32,116,104,101,97,118,97,105,108,97,98,108,101,32,102,111,114,65,99,99,111,
-114,100,105,110,103,32,116,111,32,119,105,100,101,32,114,97,110,103,101,32,111,
-102,9,60,100,105,118,32,99,108,97,115,115,61,34,109,111,114,101,32,99,111,109,
-109,111,110,108,121,111,114,103,97,110,105,115,97,116,105,111,110,115,102,117,
-110,99,116,105,111,110,97,108,105,116,121,119,97,115,32,99,111,109,112,108,101,
-116,101,100,32,38,97,109,112,59,109,100,97,115,104,59,32,112,97,114,116,105,99,
-105,112,97,116,105,111,110,116,104,101,32,99,104,97,114,97,99,116,101,114,97,110
-,32,97,100,100,105,116,105,111,110,97,108,97,112,112,101,97,114,115,32,116,111,
-32,98,101,102,97,99,116,32,116,104,97,116,32,116,104,101,97,110,32,101,120,97,
-109,112,108,101,32,111,102,115,105,103,110,105,102,105,99,97,110,116,108,121,111
-,110,109,111,117,115,101,111,118,101,114,61,34,98,101,99,97,117,115,101,32,116,
-104,101,121,32,97,115,121,110,99,32,61,32,116,114,117,101,59,112,114,111,98,108,
-101,109,115,32,119,105,116,104,115,101,101,109,115,32,116,111,32,104,97,118,101,
-116,104,101,32,114,101,115,117,108,116,32,111,102,32,115,114,99,61,34,104,116,
-116,112,58,47,47,102,97,109,105,108,105,97,114,32,119,105,116,104,112,111,115,
-115,101,115,115,105,111,110,32,111,102,102,117,110,99,116,105,111,110,32,40,41,
-32,123,116,111,111,107,32,112,108,97,99,101,32,105,110,97,110,100,32,115,111,109
-,101,116,105,109,101,115,115,117,98,115,116,97,110,116,105,97,108,108,121,60,115
-,112,97,110,62,60,47,115,112,97,110,62,105,115,32,111,102,116,101,110,32,117,115
-,101,100,105,110,32,97,110,32,97,116,116,101,109,112,116,103,114,101,97,116,32,
-100,101,97,108,32,111,102,69,110,118,105,114,111,110,109,101,110,116,97,108,115,
-117,99,99,101,115,115,102,117,108,108,121,32,118,105,114,116,117,97,108,108,121,
-32,97,108,108,50,48,116,104,32,99,101,110,116,117,114,121,44,112,114,111,102,101
-,115,115,105,111,110,97,108,115,110,101,99,101,115,115,97,114,121,32,116,111,32,
-100,101,116,101,114,109,105,110,101,100,32,98,121,99,111,109,112,97,116,105,98,
-105,108,105,116,121,98,101,99,97,117,115,101,32,105,116,32,105,115,68,105,99,116
-,105,111,110,97,114,121,32,111,102,109,111,100,105,102,105,99,97,116,105,111,110
-,115,84,104,101,32,102,111,108,108,111,119,105,110,103,109,97,121,32,114,101,102
-,101,114,32,116,111,58,67,111,110,115,101,113,117,101,110,116,108,121,44,73,110,
-116,101,114,110,97,116,105,111,110,97,108,97,108,116,104,111,117,103,104,32,115,
-111,109,101,116,104,97,116,32,119,111,117,108,100,32,98,101,119,111,114,108,100,
-39,115,32,102,105,114,115,116,99,108,97,115,115,105,102,105,101,100,32,97,115,98
-,111,116,116,111,109,32,111,102,32,116,104,101,40,112,97,114,116,105,99,117,108,
-97,114,108,121,97,108,105,103,110,61,34,108,101,102,116,34,32,109,111,115,116,32
-,99,111,109,109,111,110,108,121,98,97,115,105,115,32,102,111,114,32,116,104,101,
-102,111,117,110,100,97,116,105,111,110,32,111,102,99,111,110,116,114,105,98,117,
-116,105,111,110,115,112,111,112,117,108,97,114,105,116,121,32,111,102,99,101,110
-,116,101,114,32,111,102,32,116,104,101,116,111,32,114,101,100,117,99,101,32,116,
-104,101,106,117,114,105,115,100,105,99,116,105,111,110,115,97,112,112,114,111,
-120,105,109,97,116,105,111,110,32,111,110,109,111,117,115,101,111,117,116,61,34,
-78,101,119,32,84,101,115,116,97,109,101,110,116,99,111,108,108,101,99,116,105,
-111,110,32,111,102,60,47,115,112,97,110,62,60,47,97,62,60,47,105,110,32,116,104,
-101,32,85,110,105,116,101,100,102,105,108,109,32,100,105,114,101,99,116,111,114,
-45,115,116,114,105,99,116,46,100,116,100,34,62,104,97,115,32,98,101,101,110,32,
-117,115,101,100,114,101,116,117,114,110,32,116,111,32,116,104,101,97,108,116,104
-,111,117,103,104,32,116,104,105,115,99,104,97,110,103,101,32,105,110,32,116,104,
-101,115,101,118,101,114,97,108,32,111,116,104,101,114,98,117,116,32,116,104,101,
-114,101,32,97,114,101,117,110,112,114,101,99,101,100,101,110,116,101,100,105,115
-,32,115,105,109,105,108,97,114,32,116,111,101,115,112,101,99,105,97,108,108,121,
-32,105,110,119,101,105,103,104,116,58,32,98,111,108,100,59,105,115,32,99,97,108,
-108,101,100,32,116,104,101,99,111,109,112,117,116,97,116,105,111,110,97,108,105,
-110,100,105,99,97,116,101,32,116,104,97,116,114,101,115,116,114,105,99,116,101,
-100,32,116,111,9,60,109,101,116,97,32,110,97,109,101,61,34,97,114,101,32,116,121
-,112,105,99,97,108,108,121,99,111,110,102,108,105,99,116,32,119,105,116,104,72,
-111,119,101,118,101,114,44,32,116,104,101,32,65,110,32,101,120,97,109,112,108,
-101,32,111,102,99,111,109,112,97,114,101,100,32,119,105,116,104,113,117,97,110,
-116,105,116,105,101,115,32,111,102,114,97,116,104,101,114,32,116,104,97,110,32,
-97,99,111,110,115,116,101,108,108,97,116,105,111,110,110,101,99,101,115,115,97,
-114,121,32,102,111,114,114,101,112,111,114,116,101,100,32,116,104,97,116,115,112
-,101,99,105,102,105,99,97,116,105,111,110,112,111,108,105,116,105,99,97,108,32,
-97,110,100,38,110,98,115,112,59,38,110,98,115,112,59,60,114,101,102,101,114,101,
-110,99,101,115,32,116,111,116,104,101,32,115,97,109,101,32,121,101,97,114,71,111
-,118,101,114,110,109,101,110,116,32,111,102,103,101,110,101,114,97,116,105,111,
-110,32,111,102,104,97,118,101,32,110,111,116,32,98,101,101,110,115,101,118,101,
-114,97,108,32,121,101,97,114,115,99,111,109,109,105,116,109,101,110,116,32,116,
-111,9,9,60,117,108,32,99,108,97,115,115,61,34,118,105,115,117,97,108,105,122,97,
-116,105,111,110,49,57,116,104,32,99,101,110,116,117,114,121,44,112,114,97,99,116
-,105,116,105,111,110,101,114,115,116,104,97,116,32,104,101,32,119,111,117,108,
-100,97,110,100,32,99,111,110,116,105,110,117,101,100,111,99,99,117,112,97,116,
-105,111,110,32,111,102,105,115,32,100,101,102,105,110,101,100,32,97,115,99,101,
-110,116,114,101,32,111,102,32,116,104,101,116,104,101,32,97,109,111,117,110,116,
-32,111,102,62,60,100,105,118,32,115,116,121,108,101,61,34,101,113,117,105,118,97
-,108,101,110,116,32,111,102,100,105,102,102,101,114,101,110,116,105,97,116,101,
-98,114,111,117,103,104,116,32,97,98,111,117,116,109,97,114,103,105,110,45,108,
-101,102,116,58,32,97,117,116,111,109,97,116,105,99,97,108,108,121,116,104,111,
-117,103,104,116,32,111,102,32,97,115,83,111,109,101,32,111,102,32,116,104,101,
-115,101,10,60,100,105,118,32,99,108,97,115,115,61,34,105,110,112,117,116,32,99,
-108,97,115,115,61,34,114,101,112,108,97,99,101,100,32,119,105,116,104,105,115,32
-,111,110,101,32,111,102,32,116,104,101,101,100,117,99,97,116,105,111,110,32,97,
-110,100,105,110,102,108,117,101,110,99,101,100,32,98,121,114,101,112,117,116,97,
-116,105,111,110,32,97,115,10,60,109,101,116,97,32,110,97,109,101,61,34,97,99,99,
-111,109,109,111,100,97,116,105,111,110,60,47,100,105,118,62,10,60,47,100,105,118
-,62,108,97,114,103,101,32,112,97,114,116,32,111,102,73,110,115,116,105,116,117,
-116,101,32,102,111,114,116,104,101,32,115,111,45,99,97,108,108,101,100,32,97,103
-,97,105,110,115,116,32,116,104,101,32,73,110,32,116,104,105,115,32,99,97,115,101
-,44,119,97,115,32,97,112,112,111,105,110,116,101,100,99,108,97,105,109,101,100,
-32,116,111,32,98,101,72,111,119,101,118,101,114,44,32,116,104,105,115,68,101,112
-,97,114,116,109,101,110,116,32,111,102,116,104,101,32,114,101,109,97,105,110,105
-,110,103,101,102,102,101,99,116,32,111,110,32,116,104,101,112,97,114,116,105,99,
-117,108,97,114,108,121,32,100,101,97,108,32,119,105,116,104,32,116,104,101,10,60
-,100,105,118,32,115,116,121,108,101,61,34,97,108,109,111,115,116,32,97,108,119,
-97,121,115,97,114,101,32,99,117,114,114,101,110,116,108,121,101,120,112,114,101,
-115,115,105,111,110,32,111,102,112,104,105,108,111,115,111,112,104,121,32,111,
-102,102,111,114,32,109,111,114,101,32,116,104,97,110,99,105,118,105,108,105,122,
-97,116,105,111,110,115,111,110,32,116,104,101,32,105,115,108,97,110,100,115,101,
-108,101,99,116,101,100,73,110,100,101,120,99,97,110,32,114,101,115,117,108,116,
-32,105,110,34,32,118,97,108,117,101,61,34,34,32,47,62,116,104,101,32,115,116,114
-,117,99,116,117,114,101,32,47,62,60,47,97,62,60,47,100,105,118,62,77,97,110,121,
-32,111,102,32,116,104,101,115,101,99,97,117,115,101,100,32,98,121,32,116,104,101
-,111,102,32,116,104,101,32,85,110,105,116,101,100,115,112,97,110,32,99,108,97,
-115,115,61,34,109,99,97,110,32,98,101,32,116,114,97,99,101,100,105,115,32,114,
-101,108,97,116,101,100,32,116,111,98,101,99,97,109,101,32,111,110,101,32,111,102
-,105,115,32,102,114,101,113,117,101,110,116,108,121,108,105,118,105,110,103,32,
-105,110,32,116,104,101,116,104,101,111,114,101,116,105,99,97,108,108,121,70,111,
-108,108,111,119,105,110,103,32,116,104,101,82,101,118,111,108,117,116,105,111,
-110,97,114,121,103,111,118,101,114,110,109,101,110,116,32,105,110,105,115,32,100
-,101,116,101,114,109,105,110,101,100,116,104,101,32,112,111,108,105,116,105,99,
-97,108,105,110,116,114,111,100,117,99,101,100,32,105,110,115,117,102,102,105,99,
-105,101,110,116,32,116,111,100,101,115,99,114,105,112,116,105,111,110,34,62,115,
-104,111,114,116,32,115,116,111,114,105,101,115,115,101,112,97,114,97,116,105,111
-,110,32,111,102,97,115,32,116,111,32,119,104,101,116,104,101,114,107,110,111,119
-,110,32,102,111,114,32,105,116,115,119,97,115,32,105,110,105,116,105,97,108,108,
-121,100,105,115,112,108,97,121,58,98,108,111,99,107,105,115,32,97,110,32,101,120
-,97,109,112,108,101,116,104,101,32,112,114,105,110,99,105,112,97,108,99,111,110,
-115,105,115,116,115,32,111,102,32,97,114,101,99,111,103,110,105,122,101,100,32,
-97,115,47,98,111,100,121,62,60,47,104,116,109,108,62,97,32,115,117,98,115,116,97
-,110,116,105,97,108,114,101,99,111,110,115,116,114,117,99,116,101,100,104,101,97
-,100,32,111,102,32,115,116,97,116,101,114,101,115,105,115,116,97,110,99,101,32,
-116,111,117,110,100,101,114,103,114,97,100,117,97,116,101,84,104,101,114,101,32,
-97,114,101,32,116,119,111,103,114,97,118,105,116,97,116,105,111,110,97,108,97,
-114,101,32,100,101,115,99,114,105,98,101,100,105,110,116,101,110,116,105,111,110
-,97,108,108,121,115,101,114,118,101,100,32,97,115,32,116,104,101,99,108,97,115,
-115,61,34,104,101,97,100,101,114,111,112,112,111,115,105,116,105,111,110,32,116,
-111,102,117,110,100,97,109,101,110,116,97,108,108,121,100,111,109,105,110,97,116
-,101,100,32,116,104,101,97,110,100,32,116,104,101,32,111,116,104,101,114,97,108,
-108,105,97,110,99,101,32,119,105,116,104,119,97,115,32,102,111,114,99,101,100,32
-,116,111,114,101,115,112,101,99,116,105,118,101,108,121,44,97,110,100,32,112,111
-,108,105,116,105,99,97,108,105,110,32,115,117,112,112,111,114,116,32,111,102,112
-,101,111,112,108,101,32,105,110,32,116,104,101,50,48,116,104,32,99,101,110,116,
-117,114,121,46,97,110,100,32,112,117,98,108,105,115,104,101,100,108,111,97,100,
-67,104,97,114,116,98,101,97,116,116,111,32,117,110,100,101,114,115,116,97,110,
-100,109,101,109,98,101,114,32,115,116,97,116,101,115,101,110,118,105,114,111,110
-,109,101,110,116,97,108,102,105,114,115,116,32,104,97,108,102,32,111,102,99,111,
-117,110,116,114,105,101,115,32,97,110,100,97,114,99,104,105,116,101,99,116,117,
-114,97,108,98,101,32,99,111,110,115,105,100,101,114,101,100,99,104,97,114,97,99,
-116,101,114,105,122,101,100,99,108,101,97,114,73,110,116,101,114,118,97,108,97,
-117,116,104,111,114,105,116,97,116,105,118,101,70,101,100,101,114,97,116,105,111
-,110,32,111,102,119,97,115,32,115,117,99,99,101,101,100,101,100,97,110,100,32,
-116,104,101,114,101,32,97,114,101,97,32,99,111,110,115,101,113,117,101,110,99,
-101,116,104,101,32,80,114,101,115,105,100,101,110,116,97,108,115,111,32,105,110,
-99,108,117,100,101,100,102,114,101,101,32,115,111,102,116,119,97,114,101,115,117
-,99,99,101,115,115,105,111,110,32,111,102,100,101,118,101,108,111,112,101,100,32
-,116,104,101,119,97,115,32,100,101,115,116,114,111,121,101,100,97,119,97,121,32,
-102,114,111,109,32,116,104,101,59,10,60,47,115,99,114,105,112,116,62,10,60,97,
-108,116,104,111,117,103,104,32,116,104,101,121,102,111,108,108,111,119,101,100,
-32,98,121,32,97,109,111,114,101,32,112,111,119,101,114,102,117,108,114,101,115,
-117,108,116,101,100,32,105,110,32,97,85,110,105,118,101,114,115,105,116,121,32,
-111,102,72,111,119,101,118,101,114,44,32,109,97,110,121,116,104,101,32,112,114,
-101,115,105,100,101,110,116,72,111,119,101,118,101,114,44,32,115,111,109,101,105
-,115,32,116,104,111,117,103,104,116,32,116,111,117,110,116,105,108,32,116,104,
-101,32,101,110,100,119,97,115,32,97,110,110,111,117,110,99,101,100,97,114,101,32
-,105,109,112,111,114,116,97,110,116,97,108,115,111,32,105,110,99,108,117,100,101
-,115,62,60,105,110,112,117,116,32,116,121,112,101,61,116,104,101,32,99,101,110,
-116,101,114,32,111,102,32,68,79,32,78,79,84,32,65,76,84,69,82,117,115,101,100,32
-,116,111,32,114,101,102,101,114,116,104,101,109,101,115,47,63,115,111,114,116,61
-,116,104,97,116,32,104,97,100,32,98,101,101,110,116,104,101,32,98,97,115,105,115
-,32,102,111,114,104,97,115,32,100,101,118,101,108,111,112,101,100,105,110,32,116
-,104,101,32,115,117,109,109,101,114,99,111,109,112,97,114,97,116,105,118,101,108
-,121,100,101,115,99,114,105,98,101,100,32,116,104,101,115,117,99,104,32,97,115,
-32,116,104,111,115,101,116,104,101,32,114,101,115,117,108,116,105,110,103,105,
-115,32,105,109,112,111,115,115,105,98,108,101,118,97,114,105,111,117,115,32,111,
-116,104,101,114,83,111,117,116,104,32,65,102,114,105,99,97,110,104,97,118,101,32
-,116,104,101,32,115,97,109,101,101,102,102,101,99,116,105,118,101,110,101,115,
-115,105,110,32,119,104,105,99,104,32,99,97,115,101,59,32,116,101,120,116,45,97,
-108,105,103,110,58,115,116,114,117,99,116,117,114,101,32,97,110,100,59,32,98,97,
-99,107,103,114,111,117,110,100,58,114,101,103,97,114,100,105,110,103,32,116,104,
-101,115,117,112,112,111,114,116,101,100,32,116,104,101,105,115,32,97,108,115,111
-,32,107,110,111,119,110,115,116,121,108,101,61,34,109,97,114,103,105,110,105,110
-,99,108,117,100,105,110,103,32,116,104,101,98,97,104,97,115,97,32,77,101,108,97,
-121,117,110,111,114,115,107,32,98,111,107,109,195,165,108,110,111,114,115,107,32
-,110,121,110,111,114,115,107,115,108,111,118,101,110,197,161,196,141,105,110,97,
-105,110,116,101,114,110,97,99,105,111,110,97,108,99,97,108,105,102,105,99,97,99,
-105,195,179,110,99,111,109,117,110,105,99,97,99,105,195,179,110,99,111,110,115,
-116,114,117,99,99,105,195,179,110,34,62,60,100,105,118,32,99,108,97,115,115,61,
-34,100,105,115,97,109,98,105,103,117,97,116,105,111,110,68,111,109,97,105,110,78
-,97,109,101,39,44,32,39,97,100,109,105,110,105,115,116,114,97,116,105,111,110,
-115,105,109,117,108,116,97,110,101,111,117,115,108,121,116,114,97,110,115,112,
-111,114,116,97,116,105,111,110,73,110,116,101,114,110,97,116,105,111,110,97,108,
-32,109,97,114,103,105,110,45,98,111,116,116,111,109,58,114,101,115,112,111,110,
-115,105,98,105,108,105,116,121,60,33,91,101,110,100,105,102,93,45,45,62,10,60,47
-,62,60,109,101,116,97,32,110,97,109,101,61,34,105,109,112,108,101,109,101,110,
-116,97,116,105,111,110,105,110,102,114,97,115,116,114,117,99,116,117,114,101,114
-,101,112,114,101,115,101,110,116,97,116,105,111,110,98,111,114,100,101,114,45,98
-,111,116,116,111,109,58,60,47,104,101,97,100,62,10,60,98,111,100,121,62,61,104,
-116,116,112,37,51,65,37,50,70,37,50,70,60,102,111,114,109,32,109,101,116,104,111
-,100,61,34,109,101,116,104,111,100,61,34,112,111,115,116,34,32,47,102,97,118,105
-,99,111,110,46,105,99,111,34,32,125,41,59,10,60,47,115,99,114,105,112,116,62,10,
-46,115,101,116,65,116,116,114,105,98,117,116,101,40,65,100,109,105,110,105,115,
-116,114,97,116,105,111,110,61,32,110,101,119,32,65,114,114,97,121,40,41,59,60,33
-,91,101,110,100,105,102,93,45,45,62,13,10,100,105,115,112,108,97,121,58,98,108,
-111,99,107,59,85,110,102,111,114,116,117,110,97,116,101,108,121,44,34,62,38,110,
-98,115,112,59,60,47,100,105,118,62,47,102,97,118,105,99,111,110,46,105,99,111,34
-,62,61,39,115,116,121,108,101,115,104,101,101,116,39,32,105,100,101,110,116,105,
-102,105,99,97,116,105,111,110,44,32,102,111,114,32,101,120,97,109,112,108,101,44
-,60,108,105,62,60,97,32,104,114,101,102,61,34,47,97,110,32,97,108,116,101,114,
-110,97,116,105,118,101,97,115,32,97,32,114,101,115,117,108,116,32,111,102,112,
-116,34,62,60,47,115,99,114,105,112,116,62,10,116,121,112,101,61,34,115,117,98,
-109,105,116,34,32,10,40,102,117,110,99,116,105,111,110,40,41,32,123,114,101,99,
-111,109,109,101,110,100,97,116,105,111,110,102,111,114,109,32,97,99,116,105,111,
-110,61,34,47,116,114,97,110,115,102,111,114,109,97,116,105,111,110,114,101,99,
-111,110,115,116,114,117,99,116,105,111,110,46,115,116,121,108,101,46,100,105,115
-,112,108,97,121,32,65,99,99,111,114,100,105,110,103,32,116,111,32,104,105,100,
-100,101,110,34,32,110,97,109,101,61,34,97,108,111,110,103,32,119,105,116,104,32,
-116,104,101,100,111,99,117,109,101,110,116,46,98,111,100,121,46,97,112,112,114,
-111,120,105,109,97,116,101,108,121,32,67,111,109,109,117,110,105,99,97,116,105,
-111,110,115,112,111,115,116,34,32,97,99,116,105,111,110,61,34,109,101,97,110,105
-,110,103,32,38,113,117,111,116,59,45,45,60,33,91,101,110,100,105,102,93,45,45,62
-,80,114,105,109,101,32,77,105,110,105,115,116,101,114,99,104,97,114,97,99,116,
-101,114,105,115,116,105,99,60,47,97,62,32,60,97,32,99,108,97,115,115,61,116,104,
-101,32,104,105,115,116,111,114,121,32,111,102,32,111,110,109,111,117,115,101,111
-,118,101,114,61,34,116,104,101,32,103,111,118,101,114,110,109,101,110,116,104,
-114,101,102,61,34,104,116,116,112,115,58,47,47,119,97,115,32,111,114,105,103,105
-,110,97,108,108,121,119,97,115,32,105,110,116,114,111,100,117,99,101,100,99,108,
-97,115,115,105,102,105,99,97,116,105,111,110,114,101,112,114,101,115,101,110,116
-,97,116,105,118,101,97,114,101,32,99,111,110,115,105,100,101,114,101,100,60,33,
-91,101,110,100,105,102,93,45,45,62,10,10,100,101,112,101,110,100,115,32,111,110,
-32,116,104,101,85,110,105,118,101,114,115,105,116,121,32,111,102,32,105,110,32,
-99,111,110,116,114,97,115,116,32,116,111,32,112,108,97,99,101,104,111,108,100,
-101,114,61,34,105,110,32,116,104,101,32,99,97,115,101,32,111,102,105,110,116,101
-,114,110,97,116,105,111,110,97,108,32,99,111,110,115,116,105,116,117,116,105,111
-,110,97,108,115,116,121,108,101,61,34,98,111,114,100,101,114,45,58,32,102,117,
-110,99,116,105,111,110,40,41,32,123,66,101,99,97,117,115,101,32,111,102,32,116,
-104,101,45,115,116,114,105,99,116,46,100,116,100,34,62,10,60,116,97,98,108,101,
-32,99,108,97,115,115,61,34,97,99,99,111,109,112,97,110,105,101,100,32,98,121,97,
-99,99,111,117,110,116,32,111,102,32,116,104,101,60,115,99,114,105,112,116,32,115
-,114,99,61,34,47,110,97,116,117,114,101,32,111,102,32,116,104,101,32,116,104,101
-,32,112,101,111,112,108,101,32,105,110,32,105,110,32,97,100,100,105,116,105,111,
-110,32,116,111,115,41,59,32,106,115,46,105,100,32,61,32,105,100,34,32,119,105,
-100,116,104,61,34,49,48,48,37,34,114,101,103,97,114,100,105,110,103,32,116,104,
-101,32,82,111,109,97,110,32,67,97,116,104,111,108,105,99,97,110,32,105,110,100,
-101,112,101,110,100,101,110,116,102,111,108,108,111,119,105,110,103,32,116,104,
-101,32,46,103,105,102,34,32,119,105,100,116,104,61,34,49,116,104,101,32,102,111,
-108,108,111,119,105,110,103,32,100,105,115,99,114,105,109,105,110,97,116,105,111
-,110,97,114,99,104,97,101,111,108,111,103,105,99,97,108,112,114,105,109,101,32,
-109,105,110,105,115,116,101,114,46,106,115,34,62,60,47,115,99,114,105,112,116,62
-,99,111,109,98,105,110,97,116,105,111,110,32,111,102,32,109,97,114,103,105,110,
-119,105,100,116,104,61,34,99,114,101,97,116,101,69,108,101,109,101,110,116,40,
-119,46,97,116,116,97,99,104,69,118,101,110,116,40,60,47,97,62,60,47,116,100,62,
-60,47,116,114,62,115,114,99,61,34,104,116,116,112,115,58,47,47,97,73,110,32,112,
-97,114,116,105,99,117,108,97,114,44,32,97,108,105,103,110,61,34,108,101,102,116,
-34,32,67,122,101,99,104,32,82,101,112,117,98,108,105,99,85,110,105,116,101,100,
-32,75,105,110,103,100,111,109,99,111,114,114,101,115,112,111,110,100,101,110,99,
-101,99,111,110,99,108,117,100,101,100,32,116,104,97,116,46,104,116,109,108,34,32
-,116,105,116,108,101,61,34,40,102,117,110,99,116,105,111,110,32,40,41,32,123,99,
-111,109,101,115,32,102,114,111,109,32,116,104,101,97,112,112,108,105,99,97,116,
-105,111,110,32,111,102,60,115,112,97,110,32,99,108,97,115,115,61,34,115,98,101,
-108,105,101,118,101,100,32,116,111,32,98,101,101,109,101,110,116,40,39,115,99,
-114,105,112,116,39,60,47,97,62,10,60,47,108,105,62,10,60,108,105,118,101,114,121
-,32,100,105,102,102,101,114,101,110,116,62,60,115,112,97,110,32,99,108,97,115,
-115,61,34,111,112,116,105,111,110,32,118,97,108,117,101,61,34,40,97,108,115,111,
-32,107,110,111,119,110,32,97,115,9,60,108,105,62,60,97,32,104,114,101,102,61,34,
-62,60,105,110,112,117,116,32,110,97,109,101,61,34,115,101,112,97,114,97,116,101,
-100,32,102,114,111,109,114,101,102,101,114,114,101,100,32,116,111,32,97,115,32,
-118,97,108,105,103,110,61,34,116,111,112,34,62,102,111,117,110,100,101,114,32,
-111,102,32,116,104,101,97,116,116,101,109,112,116,105,110,103,32,116,111,32,99,
-97,114,98,111,110,32,100,105,111,120,105,100,101,10,10,60,100,105,118,32,99,108,
-97,115,115,61,34,99,108,97,115,115,61,34,115,101,97,114,99,104,45,47,98,111,100,
-121,62,10,60,47,104,116,109,108,62,111,112,112,111,114,116,117,110,105,116,121,
-32,116,111,99,111,109,109,117,110,105,99,97,116,105,111,110,115,60,47,104,101,97
-,100,62,13,10,60,98,111,100,121,32,115,116,121,108,101,61,34,119,105,100,116,104
-,58,84,105,225,186,191,110,103,32,86,105,225,187,135,116,99,104,97,110,103,101,
-115,32,105,110,32,116,104,101,98,111,114,100,101,114,45,99,111,108,111,114,58,35
-,48,34,32,98,111,114,100,101,114,61,34,48,34,32,60,47,115,112,97,110,62,60,47,
-100,105,118,62,60,119,97,115,32,100,105,115,99,111,118,101,114,101,100,34,32,116
-,121,112,101,61,34,116,101,120,116,34,32,41,59,10,60,47,115,99,114,105,112,116,
-62,10,10,68,101,112,97,114,116,109,101,110,116,32,111,102,32,101,99,99,108,101,
-115,105,97,115,116,105,99,97,108,116,104,101,114,101,32,104,97,115,32,98,101,101
-,110,114,101,115,117,108,116,105,110,103,32,102,114,111,109,60,47,98,111,100,121
-,62,60,47,104,116,109,108,62,104,97,115,32,110,101,118,101,114,32,98,101,101,110
-,116,104,101,32,102,105,114,115,116,32,116,105,109,101,105,110,32,114,101,115,
-112,111,110,115,101,32,116,111,97,117,116,111,109,97,116,105,99,97,108,108,121,
-32,60,47,100,105,118,62,10,10,60,100,105,118,32,105,119,97,115,32,99,111,110,115
-,105,100,101,114,101,100,112,101,114,99,101,110,116,32,111,102,32,116,104,101,34
-,32,47,62,60,47,97,62,60,47,100,105,118,62,99,111,108,108,101,99,116,105,111,110
-,32,111,102,32,100,101,115,99,101,110,100,101,100,32,102,114,111,109,115,101,99,
-116,105,111,110,32,111,102,32,116,104,101,97,99,99,101,112,116,45,99,104,97,114,
-115,101,116,116,111,32,98,101,32,99,111,110,102,117,115,101,100,109,101,109,98,
-101,114,32,111,102,32,116,104,101,32,112,97,100,100,105,110,103,45,114,105,103,
-104,116,58,116,114,97,110,115,108,97,116,105,111,110,32,111,102,105,110,116,101,
-114,112,114,101,116,97,116,105,111,110,32,104,114,101,102,61,39,104,116,116,112,
-58,47,47,119,104,101,116,104,101,114,32,111,114,32,110,111,116,84,104,101,114,
-101,32,97,114,101,32,97,108,115,111,116,104,101,114,101,32,97,114,101,32,109,97,
-110,121,97,32,115,109,97,108,108,32,110,117,109,98,101,114,111,116,104,101,114,
-32,112,97,114,116,115,32,111,102,105,109,112,111,115,115,105,98,108,101,32,116,
-111,32,32,99,108,97,115,115,61,34,98,117,116,116,111,110,108,111,99,97,116,101,
-100,32,105,110,32,116,104,101,46,32,72,111,119,101,118,101,114,44,32,116,104,101
-,97,110,100,32,101,118,101,110,116,117,97,108,108,121,65,116,32,116,104,101,32,
-101,110,100,32,111,102,32,98,101,99,97,117,115,101,32,111,102,32,105,116,115,114
-,101,112,114,101,115,101,110,116,115,32,116,104,101,60,102,111,114,109,32,97,99,
-116,105,111,110,61,34,32,109,101,116,104,111,100,61,34,112,111,115,116,34,105,
-116,32,105,115,32,112,111,115,115,105,98,108,101,109,111,114,101,32,108,105,107,
-101,108,121,32,116,111,97,110,32,105,110,99,114,101,97,115,101,32,105,110,104,97
-,118,101,32,97,108,115,111,32,98,101,101,110,99,111,114,114,101,115,112,111,110,
-100,115,32,116,111,97,110,110,111,117,110,99,101,100,32,116,104,97,116,97,108,
-105,103,110,61,34,114,105,103,104,116,34,62,109,97,110,121,32,99,111,117,110,116
-,114,105,101,115,102,111,114,32,109,97,110,121,32,121,101,97,114,115,101,97,114,
-108,105,101,115,116,32,107,110,111,119,110,98,101,99,97,117,115,101,32,105,116,
-32,119,97,115,112,116,34,62,60,47,115,99,114,105,112,116,62,13,32,118,97,108,105
-,103,110,61,34,116,111,112,34,32,105,110,104,97,98,105,116,97,110,116,115,32,111
-,102,102,111,108,108,111,119,105,110,103,32,121,101,97,114,13,10,60,100,105,118,
-32,99,108,97,115,115,61,34,109,105,108,108,105,111,110,32,112,101,111,112,108,
-101,99,111,110,116,114,111,118,101,114,115,105,97,108,32,99,111,110,99,101,114,
-110,105,110,103,32,116,104,101,97,114,103,117,101,32,116,104,97,116,32,116,104,
-101,103,111,118,101,114,110,109,101,110,116,32,97,110,100,97,32,114,101,102,101,
-114,101,110,99,101,32,116,111,116,114,97,110,115,102,101,114,114,101,100,32,116,
-111,100,101,115,99,114,105,98,105,110,103,32,116,104,101,32,115,116,121,108,101,
-61,34,99,111,108,111,114,58,97,108,116,104,111,117,103,104,32,116,104,101,114,
-101,98,101,115,116,32,107,110,111,119,110,32,102,111,114,115,117,98,109,105,116,
-34,32,110,97,109,101,61,34,109,117,108,116,105,112,108,105,99,97,116,105,111,110
-,109,111,114,101,32,116,104,97,110,32,111,110,101,32,114,101,99,111,103,110,105,
-116,105,111,110,32,111,102,67,111,117,110,99,105,108,32,111,102,32,116,104,101,
-101,100,105,116,105,111,110,32,111,102,32,116,104,101,32,32,60,109,101,116,97,32
-,110,97,109,101,61,34,69,110,116,101,114,116,97,105,110,109,101,110,116,32,97,
-119,97,121,32,102,114,111,109,32,116,104,101,32,59,109,97,114,103,105,110,45,114
-,105,103,104,116,58,97,116,32,116,104,101,32,116,105,109,101,32,111,102,105,110,
-118,101,115,116,105,103,97,116,105,111,110,115,99,111,110,110,101,99,116,101,100
-,32,119,105,116,104,97,110,100,32,109,97,110,121,32,111,116,104,101,114,97,108,
-116,104,111,117,103,104,32,105,116,32,105,115,98,101,103,105,110,110,105,110,103
-,32,119,105,116,104,32,60,115,112,97,110,32,99,108,97,115,115,61,34,100,101,115,
-99,101,110,100,97,110,116,115,32,111,102,60,115,112,97,110,32,99,108,97,115,115,
-61,34,105,32,97,108,105,103,110,61,34,114,105,103,104,116,34,60,47,104,101,97,
-100,62,10,60,98,111,100,121,32,97,115,112,101,99,116,115,32,111,102,32,116,104,
-101,104,97,115,32,115,105,110,99,101,32,98,101,101,110,69,117,114,111,112,101,97
-,110,32,85,110,105,111,110,114,101,109,105,110,105,115,99,101,110,116,32,111,102
-,109,111,114,101,32,100,105,102,102,105,99,117,108,116,86,105,99,101,32,80,114,
-101,115,105,100,101,110,116,99,111,109,112,111,115,105,116,105,111,110,32,111,
-102,112,97,115,115,101,100,32,116,104,114,111,117,103,104,109,111,114,101,32,105
-,109,112,111,114,116,97,110,116,102,111,110,116,45,115,105,122,101,58,49,49,112,
-120,101,120,112,108,97,110,97,116,105,111,110,32,111,102,116,104,101,32,99,111,
-110,99,101,112,116,32,111,102,119,114,105,116,116,101,110,32,105,110,32,116,104,
-101,9,60,115,112,97,110,32,99,108,97,115,115,61,34,105,115,32,111,110,101,32,111
-,102,32,116,104,101,32,114,101,115,101,109,98,108,97,110,99,101,32,116,111,111,
-110,32,116,104,101,32,103,114,111,117,110,100,115,119,104,105,99,104,32,99,111,
-110,116,97,105,110,115,105,110,99,108,117,100,105,110,103,32,116,104,101,32,100,
-101,102,105,110,101,100,32,98,121,32,116,104,101,112,117,98,108,105,99,97,116,
-105,111,110,32,111,102,109,101,97,110,115,32,116,104,97,116,32,116,104,101,111,
-117,116,115,105,100,101,32,111,102,32,116,104,101,115,117,112,112,111,114,116,32
-,111,102,32,116,104,101,60,105,110,112,117,116,32,99,108,97,115,115,61,34,60,115
-,112,97,110,32,99,108,97,115,115,61,34,116,40,77,97,116,104,46,114,97,110,100,
-111,109,40,41,109,111,115,116,32,112,114,111,109,105,110,101,110,116,100,101,115
-,99,114,105,112,116,105,111,110,32,111,102,67,111,110,115,116,97,110,116,105,110
-,111,112,108,101,119,101,114,101,32,112,117,98,108,105,115,104,101,100,60,100,
-105,118,32,99,108,97,115,115,61,34,115,101,97,112,112,101,97,114,115,32,105,110,
-32,116,104,101,49,34,32,104,101,105,103,104,116,61,34,49,34,32,109,111,115,116,
-32,105,109,112,111,114,116,97,110,116,119,104,105,99,104,32,105,110,99,108,117,
-100,101,115,119,104,105,99,104,32,104,97,100,32,98,101,101,110,100,101,115,116,
-114,117,99,116,105,111,110,32,111,102,116,104,101,32,112,111,112,117,108,97,116,
-105,111,110,10,9,60,100,105,118,32,99,108,97,115,115,61,34,112,111,115,115,105,
-98,105,108,105,116,121,32,111,102,115,111,109,101,116,105,109,101,115,32,117,115
-,101,100,97,112,112,101,97,114,32,116,111,32,104,97,118,101,115,117,99,99,101,
-115,115,32,111,102,32,116,104,101,105,110,116,101,110,100,101,100,32,116,111,32,
-98,101,112,114,101,115,101,110,116,32,105,110,32,116,104,101,115,116,121,108,101
-,61,34,99,108,101,97,114,58,98,13,10,60,47,115,99,114,105,112,116,62,13,10,60,
-119,97,115,32,102,111,117,110,100,101,100,32,105,110,105,110,116,101,114,118,105
-,101,119,32,119,105,116,104,95,105,100,34,32,99,111,110,116,101,110,116,61,34,99
-,97,112,105,116,97,108,32,111,102,32,116,104,101,13,10,60,108,105,110,107,32,114
-,101,108,61,34,115,114,101,108,101,97,115,101,32,111,102,32,116,104,101,112,111,
-105,110,116,32,111,117,116,32,116,104,97,116,120,77,76,72,116,116,112,82,101,113
-,117,101,115,116,97,110,100,32,115,117,98,115,101,113,117,101,110,116,115,101,99
-,111,110,100,32,108,97,114,103,101,115,116,118,101,114,121,32,105,109,112,111,
-114,116,97,110,116,115,112,101,99,105,102,105,99,97,116,105,111,110,115,115,117,
-114,102,97,99,101,32,111,102,32,116,104,101,97,112,112,108,105,101,100,32,116,
-111,32,116,104,101,102,111,114,101,105,103,110,32,112,111,108,105,99,121,95,115,
-101,116,68,111,109,97,105,110,78,97,109,101,101,115,116,97,98,108,105,115,104,
-101,100,32,105,110,105,115,32,98,101,108,105,101,118,101,100,32,116,111,73,110,
-32,97,100,100,105,116,105,111,110,32,116,111,109,101,97,110,105,110,103,32,111,
-102,32,116,104,101,105,115,32,110,97,109,101,100,32,97,102,116,101,114,116,111,
-32,112,114,111,116,101,99,116,32,116,104,101,105,115,32,114,101,112,114,101,115,
-101,110,116,101,100,68,101,99,108,97,114,97,116,105,111,110,32,111,102,109,111,
-114,101,32,101,102,102,105,99,105,101,110,116,67,108,97,115,115,105,102,105,99,
-97,116,105,111,110,111,116,104,101,114,32,102,111,114,109,115,32,111,102,104,101
-,32,114,101,116,117,114,110,101,100,32,116,111,60,115,112,97,110,32,99,108,97,
-115,115,61,34,99,112,101,114,102,111,114,109,97,110,99,101,32,111,102,40,102,117
-,110,99,116,105,111,110,40,41,32,123,13,105,102,32,97,110,100,32,111,110,108,121
-,32,105,102,114,101,103,105,111,110,115,32,111,102,32,116,104,101,108,101,97,100
-,105,110,103,32,116,111,32,116,104,101,114,101,108,97,116,105,111,110,115,32,119
-,105,116,104,85,110,105,116,101,100,32,78,97,116,105,111,110,115,115,116,121,108
-,101,61,34,104,101,105,103,104,116,58,111,116,104,101,114,32,116,104,97,110,32,
-116,104,101,121,112,101,34,32,99,111,110,116,101,110,116,61,34,65,115,115,111,99
-,105,97,116,105,111,110,32,111,102,10,60,47,104,101,97,100,62,10,60,98,111,100,
-121,108,111,99,97,116,101,100,32,111,110,32,116,104,101,105,115,32,114,101,102,
-101,114,114,101,100,32,116,111,40,105,110,99,108,117,100,105,110,103,32,116,104,
-101,99,111,110,99,101,110,116,114,97,116,105,111,110,115,116,104,101,32,105,110,
-100,105,118,105,100,117,97,108,97,109,111,110,103,32,116,104,101,32,109,111,115,
-116,116,104,97,110,32,97,110,121,32,111,116,104,101,114,47,62,10,60,108,105,110,
-107,32,114,101,108,61,34,32,114,101,116,117,114,110,32,102,97,108,115,101,59,116
-,104,101,32,112,117,114,112,111,115,101,32,111,102,116,104,101,32,97,98,105,108,
-105,116,121,32,116,111,59,99,111,108,111,114,58,35,102,102,102,125,10,46,10,60,
-115,112,97,110,32,99,108,97,115,115,61,34,116,104,101,32,115,117,98,106,101,99,
-116,32,111,102,100,101,102,105,110,105,116,105,111,110,115,32,111,102,62,13,10,
-60,108,105,110,107,32,114,101,108,61,34,99,108,97,105,109,32,116,104,97,116,32,
-116,104,101,104,97,118,101,32,100,101,118,101,108,111,112,101,100,60,116,97,98,
-108,101,32,119,105,100,116,104,61,34,99,101,108,101,98,114,97,116,105,111,110,32
-,111,102,70,111,108,108,111,119,105,110,103,32,116,104,101,32,116,111,32,100,105
-,115,116,105,110,103,117,105,115,104,60,115,112,97,110,32,99,108,97,115,115,61,
-34,98,116,97,107,101,115,32,112,108,97,99,101,32,105,110,117,110,100,101,114,32,
-116,104,101,32,110,97,109,101,110,111,116,101,100,32,116,104,97,116,32,116,104,
-101,62,60,33,91,101,110,100,105,102,93,45,45,62,10,115,116,121,108,101,61,34,109
-,97,114,103,105,110,45,105,110,115,116,101,97,100,32,111,102,32,116,104,101,105,
-110,116,114,111,100,117,99,101,100,32,116,104,101,116,104,101,32,112,114,111,99,
-101,115,115,32,111,102,105,110,99,114,101,97,115,105,110,103,32,116,104,101,100,
-105,102,102,101,114,101,110,99,101,115,32,105,110,101,115,116,105,109,97,116,101
-,100,32,116,104,97,116,101,115,112,101,99,105,97,108,108,121,32,116,104,101,47,
-100,105,118,62,60,100,105,118,32,105,100,61,34,119,97,115,32,101,118,101,110,116
-,117,97,108,108,121,116,104,114,111,117,103,104,111,117,116,32,104,105,115,116,
-104,101,32,100,105,102,102,101,114,101,110,99,101,115,111,109,101,116,104,105,
-110,103,32,116,104,97,116,115,112,97,110,62,60,47,115,112,97,110,62,60,47,115,
-105,103,110,105,102,105,99,97,110,116,108,121,32,62,60,47,115,99,114,105,112,116
-,62,13,10,13,10,101,110,118,105,114,111,110,109,101,110,116,97,108,32,116,111,32
-,112,114,101,118,101,110,116,32,116,104,101,104,97,118,101,32,98,101,101,110,32,
-117,115,101,100,101,115,112,101,99,105,97,108,108,121,32,102,111,114,117,110,100
-,101,114,115,116,97,110,100,32,116,104,101,105,115,32,101,115,115,101,110,116,
-105,97,108,108,121,119,101,114,101,32,116,104,101,32,102,105,114,115,116,105,115
-,32,116,104,101,32,108,97,114,103,101,115,116,104,97,118,101,32,98,101,101,110,
-32,109,97,100,101,34,32,115,114,99,61,34,104,116,116,112,58,47,47,105,110,116,
-101,114,112,114,101,116,101,100,32,97,115,115,101,99,111,110,100,32,104,97,108,
-102,32,111,102,99,114,111,108,108,105,110,103,61,34,110,111,34,32,105,115,32,99,
-111,109,112,111,115,101,100,32,111,102,73,73,44,32,72,111,108,121,32,82,111,109,
-97,110,105,115,32,101,120,112,101,99,116,101,100,32,116,111,104,97,118,101,32,
-116,104,101,105,114,32,111,119,110,100,101,102,105,110,101,100,32,97,115,32,116,
-104,101,116,114,97,100,105,116,105,111,110,97,108,108,121,32,104,97,118,101,32,
-100,105,102,102,101,114,101,110,116,97,114,101,32,111,102,116,101,110,32,117,115
-,101,100,116,111,32,101,110,115,117,114,101,32,116,104,97,116,97,103,114,101,101
-,109,101,110,116,32,119,105,116,104,99,111,110,116,97,105,110,105,110,103,32,116
-,104,101,97,114,101,32,102,114,101,113,117,101,110,116,108,121,105,110,102,111,
-114,109,97,116,105,111,110,32,111,110,101,120,97,109,112,108,101,32,105,115,32,
-116,104,101,114,101,115,117,108,116,105,110,103,32,105,110,32,97,60,47,97,62,60,
-47,108,105,62,60,47,117,108,62,32,99,108,97,115,115,61,34,102,111,111,116,101,
-114,97,110,100,32,101,115,112,101,99,105,97,108,108,121,116,121,112,101,61,34,98
-,117,116,116,111,110,34,32,60,47,115,112,97,110,62,60,47,115,112,97,110,62,119,
-104,105,99,104,32,105,110,99,108,117,100,101,100,62,10,60,109,101,116,97,32,110,
-97,109,101,61,34,99,111,110,115,105,100,101,114,101,100,32,116,104,101,99,97,114
-,114,105,101,100,32,111,117,116,32,98,121,72,111,119,101,118,101,114,44,32,105,
-116,32,105,115,98,101,99,97,109,101,32,112,97,114,116,32,111,102,105,110,32,114,
-101,108,97,116,105,111,110,32,116,111,112,111,112,117,108,97,114,32,105,110,32,
-116,104,101,116,104,101,32,99,97,112,105,116,97,108,32,111,102,119,97,115,32,111
-,102,102,105,99,105,97,108,108,121,119,104,105,99,104,32,104,97,115,32,98,101,
-101,110,116,104,101,32,72,105,115,116,111,114,121,32,111,102,97,108,116,101,114,
-110,97,116,105,118,101,32,116,111,100,105,102,102,101,114,101,110,116,32,102,114
-,111,109,116,111,32,115,117,112,112,111,114,116,32,116,104,101,115,117,103,103,
-101,115,116,101,100,32,116,104,97,116,105,110,32,116,104,101,32,112,114,111,99,
-101,115,115,32,32,60,100,105,118,32,99,108,97,115,115,61,34,116,104,101,32,102,
-111,117,110,100,97,116,105,111,110,98,101,99,97,117,115,101,32,111,102,32,104,
-105,115,99,111,110,99,101,114,110,101,100,32,119,105,116,104,116,104,101,32,117,
-110,105,118,101,114,115,105,116,121,111,112,112,111,115,101,100,32,116,111,32,
-116,104,101,116,104,101,32,99,111,110,116,101,120,116,32,111,102,60,115,112,97,
-110,32,99,108,97,115,115,61,34,112,116,101,120,116,34,32,110,97,109,101,61,34,
-113,34,9,9,60,100,105,118,32,99,108,97,115,115,61,34,116,104,101,32,115,99,105,
-101,110,116,105,102,105,99,114,101,112,114,101,115,101,110,116,101,100,32,98,121
-,109,97,116,104,101,109,97,116,105,99,105,97,110,115,101,108,101,99,116,101,100,
-32,98,121,32,116,104,101,116,104,97,116,32,104,97,118,101,32,98,101,101,110,62,
-60,100,105,118,32,99,108,97,115,115,61,34,99,100,105,118,32,105,100,61,34,104,
-101,97,100,101,114,105,110,32,112,97,114,116,105,99,117,108,97,114,44,99,111,110
-,118,101,114,116,101,100,32,105,110,116,111,41,59,10,60,47,115,99,114,105,112,
-116,62,10,60,112,104,105,108,111,115,111,112,104,105,99,97,108,32,115,114,112,
-115,107,111,104,114,118,97,116,115,107,105,116,105,225,186,191,110,103,32,86,105
-,225,187,135,116,208,160,209,131,209,129,209,129,208,186,208,184,208,185,209,128
-,209,131,209,129,209,129,208,186,208,184,208,185,105,110,118,101,115,116,105,103
-,97,99,105,195,179,110,112,97,114,116,105,99,105,112,97,99,105,195,179,110,208,
-186,208,190,209,130,208,190,209,128,209,139,208,181,208,190,208,177,208,187,208,
-176,209,129,209,130,208,184,208,186,208,190,209,130,208,190,209,128,209,139,208,
-185,209,135,208,181,208,187,208,190,208,178,208,181,208,186,209,129,208,184,209,
-129,209,130,208,181,208,188,209,139,208,157,208,190,208,178,208,190,209,129,209,
-130,208,184,208,186,208,190,209,130,208,190,209,128,209,139,209,133,208,190,208,
-177,208,187,208,176,209,129,209,130,209,140,208,178,209,128,208,181,208,188,208,
-181,208,189,208,184,208,186,208,190,209,130,208,190,209,128,208,176,209,143,209,
-129,208,181,208,179,208,190,208,180,208,189,209,143,209,129,208,186,208,176,209,
-135,208,176,209,130,209,140,208,189,208,190,208,178,208,190,209,129,209,130,208,
-184,208,163,208,186,209,128,208,176,208,184,208,189,209,139,208,178,208,190,208,
-191,209,128,208,190,209,129,209,139,208,186,208,190,209,130,208,190,209,128,208,
-190,208,185,209,129,208,180,208,181,208,187,208,176,209,130,209,140,208,191,208,
-190,208,188,208,190,209,137,209,140,209,142,209,129,209,128,208,181,208,180,209,
-129,209,130,208,178,208,190,208,177,209,128,208,176,208,183,208,190,208,188,209,
-129,209,130,208,190,209,128,208,190,208,189,209,139,209,131,209,135,208,176,209,
-129,209,130,208,184,208,181,209,130,208,181,209,135,208,181,208,189,208,184,208,
-181,208,147,208,187,208,176,208,178,208,189,208,176,209,143,208,184,209,129,209,
-130,208,190,209,128,208,184,208,184,209,129,208,184,209,129,209,130,208,181,208,
-188,208,176,209,128,208,181,209,136,208,181,208,189,208,184,209,143,208,161,208,
-186,208,176,209,135,208,176,209,130,209,140,208,191,208,190,209,141,209,130,208,
-190,208,188,209,131,209,129,208,187,208,181,208,180,209,131,208,181,209,130,209,
-129,208,186,208,176,208,183,208,176,209,130,209,140,209,130,208,190,208,178,208,
-176,209,128,208,190,208,178,208,186,208,190,208,189,208,181,209,135,208,189,208,
-190,209,128,208,181,209,136,208,181,208,189,208,184,208,181,208,186,208,190,209,
-130,208,190,209,128,208,190,208,181,208,190,209,128,208,179,208,176,208,189,208,
-190,208,178,208,186,208,190,209,130,208,190,209,128,208,190,208,188,208,160,208,
-181,208,186,208,187,208,176,208,188,208,176,216,167,217,132,217,133,217,134,216,
-170,216,175,217,137,217,133,217,134,216,170,216,175,217,138,216,167,216,170,216,
-167,217,132,217,133,217,136,216,182,217,136,216,185,216,167,217,132,216,168,216,
-177,216,167,217,133,216,172,216,167,217,132,217,133,217,136,216,167,217,130,216,
-185,216,167,217,132,216,177,216,179,216,167,216,166,217,132,217,133,216,180,216,
-167,216,177,217,131,216,167,216,170,216,167,217,132,216,163,216,185,216,182,216,
-167,216,161,216,167,217,132,216,177,217,138,216,167,216,182,216,169,216,167,217,
-132,216,170,216,181,217,133,217,138,217,133,216,167,217,132,216,167,216,185,216,
-182,216,167,216,161,216,167,217,132,217,134,216,170,216,167,216,166,216,172,216,
-167,217,132,216,163,217,132,216,185,216,167,216,168,216,167,217,132,216,170,216,
-179,216,172,217,138,217,132,216,167,217,132,216,163,217,130,216,179,216,167,217,
-133,216,167,217,132,216,182,216,186,216,183,216,167,216,170,216,167,217,132,217,
-129,217,138,216,175,217,138,217,136,216,167,217,132,216,170,216,177,216,173,217,
-138,216,168,216,167,217,132,216,172,216,175,217,138,216,175,216,169,216,167,217,
-132,216,170,216,185,217,132,217,138,217,133,216,167,217,132,216,163,216,174,216,
-168,216,167,216,177,216,167,217,132,216,167,217,129,217,132,216,167,217,133,216,
-167,217,132,216,163,217,129,217,132,216,167,217,133,216,167,217,132,216,170,216,
-167,216,177,217,138,216,174,216,167,217,132,216,170,217,130,217,134,217,138,216,
-169,216,167,217,132,216,167,217,132,216,185,216,167,216,168,216,167,217,132,216,
-174,217,136,216,167,216,183,216,177,216,167,217,132,217,133,216,172,216,170,217,
-133,216,185,216,167,217,132,216,175,217,138,217,131,217,136,216,177,216,167,217,
-132,216,179,217,138,216,167,216,173,216,169,216,185,216,168,216,175,216,167,217,
-132,217,132,217,135,216,167,217,132,216,170,216,177,216,168,217,138,216,169,216,
-167,217,132,216,177,217,136,216,167,216,168,216,183,216,167,217,132,216,163,216,
-175,216,168,217,138,216,169,216,167,217,132,216,167,216,174,216,168,216,167,216,
-177,216,167,217,132,217,133,216,170,216,173,216,175,216,169,216,167,217,132,216,
-167,216,186,216,167,217,134,217,138,99,117,114,115,111,114,58,112,111,105,110,
-116,101,114,59,60,47,116,105,116,108,101,62,10,60,109,101,116,97,32,34,32,104,
-114,101,102,61,34,104,116,116,112,58,47,47,34,62,60,115,112,97,110,32,99,108,97,
-115,115,61,34,109,101,109,98,101,114,115,32,111,102,32,116,104,101,32,119,105,
-110,100,111,119,46,108,111,99,97,116,105,111,110,118,101,114,116,105,99,97,108,
-45,97,108,105,103,110,58,47,97,62,32,124,32,60,97,32,104,114,101,102,61,34,60,33
-,100,111,99,116,121,112,101,32,104,116,109,108,62,109,101,100,105,97,61,34,115,
-99,114,101,101,110,34,32,60,111,112,116,105,111,110,32,118,97,108,117,101,61,34,
-102,97,118,105,99,111,110,46,105,99,111,34,32,47,62,10,9,9,60,100,105,118,32,99,
-108,97,115,115,61,34,99,104,97,114,97,99,116,101,114,105,115,116,105,99,115,34,
-32,109,101,116,104,111,100,61,34,103,101,116,34,32,47,98,111,100,121,62,10,60,47
-,104,116,109,108,62,10,115,104,111,114,116,99,117,116,32,105,99,111,110,34,32,
-100,111,99,117,109,101,110,116,46,119,114,105,116,101,40,112,97,100,100,105,110,
-103,45,98,111,116,116,111,109,58,114,101,112,114,101,115,101,110,116,97,116,105,
-118,101,115,115,117,98,109,105,116,34,32,118,97,108,117,101,61,34,97,108,105,103
-,110,61,34,99,101,110,116,101,114,34,32,116,104,114,111,117,103,104,111,117,116,
-32,116,104,101,32,115,99,105,101,110,99,101,32,102,105,99,116,105,111,110,10,32,
-32,60,100,105,118,32,99,108,97,115,115,61,34,115,117,98,109,105,116,34,32,99,108
-,97,115,115,61,34,111,110,101,32,111,102,32,116,104,101,32,109,111,115,116,32,
-118,97,108,105,103,110,61,34,116,111,112,34,62,60,119,97,115,32,101,115,116,97,
-98,108,105,115,104,101,100,41,59,13,10,60,47,115,99,114,105,112,116,62,13,10,114
-,101,116,117,114,110,32,102,97,108,115,101,59,34,62,41,46,115,116,121,108,101,46
-,100,105,115,112,108,97,121,98,101,99,97,117,115,101,32,111,102,32,116,104,101,
-32,100,111,99,117,109,101,110,116,46,99,111,111,107,105,101,60,102,111,114,109,
-32,97,99,116,105,111,110,61,34,47,125,98,111,100,121,123,109,97,114,103,105,110,
-58,48,59,69,110,99,121,99,108,111,112,101,100,105,97,32,111,102,118,101,114,115,
-105,111,110,32,111,102,32,116,104,101,32,46,99,114,101,97,116,101,69,108,101,109
-,101,110,116,40,110,97,109,101,34,32,99,111,110,116,101,110,116,61,34,60,47,100,
-105,118,62,10,60,47,100,105,118,62,10,10,97,100,109,105,110,105,115,116,114,97,
-116,105,118,101,32,60,47,98,111,100,121,62,10,60,47,104,116,109,108,62,104,105,
-115,116,111,114,121,32,111,102,32,116,104,101,32,34,62,60,105,110,112,117,116,32
-,116,121,112,101,61,34,112,111,114,116,105,111,110,32,111,102,32,116,104,101,32,
-97,115,32,112,97,114,116,32,111,102,32,116,104,101,32,38,110,98,115,112,59,60,97
-,32,104,114,101,102,61,34,111,116,104,101,114,32,99,111,117,110,116,114,105,101,
-115,34,62,10,60,100,105,118,32,99,108,97,115,115,61,34,60,47,115,112,97,110,62,
-60,47,115,112,97,110,62,60,73,110,32,111,116,104,101,114,32,119,111,114,100,115,
-44,100,105,115,112,108,97,121,58,32,98,108,111,99,107,59,99,111,110,116,114,111,
-108,32,111,102,32,116,104,101,32,105,110,116,114,111,100,117,99,116,105,111,110,
-32,111,102,47,62,10,60,109,101,116,97,32,110,97,109,101,61,34,97,115,32,119,101,
-108,108,32,97,115,32,116,104,101,32,105,110,32,114,101,99,101,110,116,32,121,101
-,97,114,115,13,10,9,60,100,105,118,32,99,108,97,115,115,61,34,60,47,100,105,118,
-62,10,9,60,47,100,105,118,62,10,105,110,115,112,105,114,101,100,32,98,121,32,116
-,104,101,116,104,101,32,101,110,100,32,111,102,32,116,104,101,32,99,111,109,112,
-97,116,105,98,108,101,32,119,105,116,104,98,101,99,97,109,101,32,107,110,111,119
-,110,32,97,115,32,115,116,121,108,101,61,34,109,97,114,103,105,110,58,46,106,115
-,34,62,60,47,115,99,114,105,112,116,62,60,32,73,110,116,101,114,110,97,116,105,
-111,110,97,108,32,116,104,101,114,101,32,104,97,118,101,32,98,101,101,110,71,101
-,114,109,97,110,32,108,97,110,103,117,97,103,101,32,115,116,121,108,101,61,34,99
-,111,108,111,114,58,35,67,111,109,109,117,110,105,115,116,32,80,97,114,116,121,
-99,111,110,115,105,115,116,101,110,116,32,119,105,116,104,98,111,114,100,101,114
-,61,34,48,34,32,99,101,108,108,32,109,97,114,103,105,110,104,101,105,103,104,116
-,61,34,116,104,101,32,109,97,106,111,114,105,116,121,32,111,102,34,32,97,108,105
-,103,110,61,34,99,101,110,116,101,114,114,101,108,97,116,101,100,32,116,111,32,
-116,104,101,32,109,97,110,121,32,100,105,102,102,101,114,101,110,116,32,79,114,
-116,104,111,100,111,120,32,67,104,117,114,99,104,115,105,109,105,108,97,114,32,
-116,111,32,116,104,101,32,47,62,10,60,108,105,110,107,32,114,101,108,61,34,115,
-119,97,115,32,111,110,101,32,111,102,32,116,104,101,32,117,110,116,105,108,32,
-104,105,115,32,100,101,97,116,104,125,41,40,41,59,10,60,47,115,99,114,105,112,
-116,62,111,116,104,101,114,32,108,97,110,103,117,97,103,101,115,99,111,109,112,
-97,114,101,100,32,116,111,32,116,104,101,112,111,114,116,105,111,110,115,32,111,
-102,32,116,104,101,116,104,101,32,78,101,116,104,101,114,108,97,110,100,115,116,
-104,101,32,109,111,115,116,32,99,111,109,109,111,110,98,97,99,107,103,114,111,
-117,110,100,58,117,114,108,40,97,114,103,117,101,100,32,116,104,97,116,32,116,
-104,101,115,99,114,111,108,108,105,110,103,61,34,110,111,34,32,105,110,99,108,
-117,100,101,100,32,105,110,32,116,104,101,78,111,114,116,104,32,65,109,101,114,
-105,99,97,110,32,116,104,101,32,110,97,109,101,32,111,102,32,116,104,101,105,110
-,116,101,114,112,114,101,116,97,116,105,111,110,115,116,104,101,32,116,114,97,
-100,105,116,105,111,110,97,108,100,101,118,101,108,111,112,109,101,110,116,32,
-111,102,32,102,114,101,113,117,101,110,116,108,121,32,117,115,101,100,97,32,99,
-111,108,108,101,99,116,105,111,110,32,111,102,118,101,114,121,32,115,105,109,105
-,108,97,114,32,116,111,115,117,114,114,111,117,110,100,105,110,103,32,116,104,
-101,101,120,97,109,112,108,101,32,111,102,32,116,104,105,115,97,108,105,103,110,
-61,34,99,101,110,116,101,114,34,62,119,111,117,108,100,32,104,97,118,101,32,98,
-101,101,110,105,109,97,103,101,95,99,97,112,116,105,111,110,32,61,97,116,116,97,
-99,104,101,100,32,116,111,32,116,104,101,115,117,103,103,101,115,116,105,110,103
-,32,116,104,97,116,105,110,32,116,104,101,32,102,111,114,109,32,111,102,32,105,
-110,118,111,108,118,101,100,32,105,110,32,116,104,101,105,115,32,100,101,114,105
-,118,101,100,32,102,114,111,109,110,97,109,101,100,32,97,102,116,101,114,32,116,
-104,101,73,110,116,114,111,100,117,99,116,105,111,110,32,116,111,114,101,115,116
-,114,105,99,116,105,111,110,115,32,111,110,32,115,116,121,108,101,61,34,119,105,
-100,116,104,58,32,99,97,110,32,98,101,32,117,115,101,100,32,116,111,32,116,104,
-101,32,99,114,101,97,116,105,111,110,32,111,102,109,111,115,116,32,105,109,112,
-111,114,116,97,110,116,32,105,110,102,111,114,109,97,116,105,111,110,32,97,110,
-100,114,101,115,117,108,116,101,100,32,105,110,32,116,104,101,99,111,108,108,97,
-112,115,101,32,111,102,32,116,104,101,84,104,105,115,32,109,101,97,110,115,32,
-116,104,97,116,101,108,101,109,101,110,116,115,32,111,102,32,116,104,101,119,97,
-115,32,114,101,112,108,97,99,101,100,32,98,121,97,110,97,108,121,115,105,115,32,
-111,102,32,116,104,101,105,110,115,112,105,114,97,116,105,111,110,32,102,111,114
-,114,101,103,97,114,100,101,100,32,97,115,32,116,104,101,109,111,115,116,32,115,
-117,99,99,101,115,115,102,117,108,107,110,111,119,110,32,97,115,32,38,113,117,
-111,116,59,97,32,99,111,109,112,114,101,104,101,110,115,105,118,101,72,105,115,
-116,111,114,121,32,111,102,32,116,104,101,32,119,101,114,101,32,99,111,110,115,
-105,100,101,114,101,100,114,101,116,117,114,110,101,100,32,116,111,32,116,104,
-101,97,114,101,32,114,101,102,101,114,114,101,100,32,116,111,85,110,115,111,117,
-114,99,101,100,32,105,109,97,103,101,62,10,9,60,100,105,118,32,99,108,97,115,115
-,61,34,99,111,110,115,105,115,116,115,32,111,102,32,116,104,101,115,116,111,112,
-80,114,111,112,97,103,97,116,105,111,110,105,110,116,101,114,101,115,116,32,105,
-110,32,116,104,101,97,118,97,105,108,97,98,105,108,105,116,121,32,111,102,97,112
-,112,101,97,114,115,32,116,111,32,104,97,118,101,101,108,101,99,116,114,111,109,
-97,103,110,101,116,105,99,101,110,97,98,108,101,83,101,114,118,105,99,101,115,40
-,102,117,110,99,116,105,111,110,32,111,102,32,116,104,101,73,116,32,105,115,32,
-105,109,112,111,114,116,97,110,116,60,47,115,99,114,105,112,116,62,60,47,100,105
-,118,62,102,117,110,99,116,105,111,110,40,41,123,118,97,114,32,114,101,108,97,
-116,105,118,101,32,116,111,32,116,104,101,97,115,32,97,32,114,101,115,117,108,
-116,32,111,102,32,116,104,101,32,112,111,115,105,116,105,111,110,32,111,102,70,
-111,114,32,101,120,97,109,112,108,101,44,32,105,110,32,109,101,116,104,111,100,
-61,34,112,111,115,116,34,32,119,97,115,32,102,111,108,108,111,119,101,100,32,98,
-121,38,97,109,112,59,109,100,97,115,104,59,32,116,104,101,116,104,101,32,97,112,
-112,108,105,99,97,116,105,111,110,106,115,34,62,60,47,115,99,114,105,112,116,62,
-13,10,117,108,62,60,47,100,105,118,62,60,47,100,105,118,62,97,102,116,101,114,32
-,116,104,101,32,100,101,97,116,104,119,105,116,104,32,114,101,115,112,101,99,116
-,32,116,111,115,116,121,108,101,61,34,112,97,100,100,105,110,103,58,105,115,32,
-112,97,114,116,105,99,117,108,97,114,108,121,100,105,115,112,108,97,121,58,105,
-110,108,105,110,101,59,32,116,121,112,101,61,34,115,117,98,109,105,116,34,32,105
-,115,32,100,105,118,105,100,101,100,32,105,110,116,111,228,184,173,230,150,135,
-32,40,231,174,128,228,189,147,41,114,101,115,112,111,110,115,97,98,105,108,105,
-100,97,100,97,100,109,105,110,105,115,116,114,97,99,105,195,179,110,105,110,116,
-101,114,110,97,99,105,111,110,97,108,101,115,99,111,114,114,101,115,112,111,110,
-100,105,101,110,116,101,224,164,137,224,164,170,224,164,175,224,165,139,224,164,
-151,224,164,170,224,165,130,224,164,176,224,165,141,224,164,181,224,164,185,224,
-164,174,224,164,190,224,164,176,224,165,135,224,164,178,224,165,139,224,164,151,
-224,165,139,224,164,130,224,164,154,224,165,129,224,164,168,224,164,190,224,164,
-181,224,164,178,224,165,135,224,164,149,224,164,191,224,164,168,224,164,184,224,
-164,176,224,164,149,224,164,190,224,164,176,224,164,170,224,165,129,224,164,178,
-224,164,191,224,164,184,224,164,150,224,165,139,224,164,156,224,165,135,224,164,
-130,224,164,154,224,164,190,224,164,185,224,164,191,224,164,143,224,164,173,224,
-165,135,224,164,156,224,165,135,224,164,130,224,164,182,224,164,190,224,164,174,
-224,164,191,224,164,178,224,164,185,224,164,174,224,164,190,224,164,176,224,165,
-128,224,164,156,224,164,190,224,164,151,224,164,176,224,164,163,224,164,172,224,
-164,168,224,164,190,224,164,168,224,165,135,224,164,149,224,165,129,224,164,174,
-224,164,190,224,164,176,224,164,172,224,165,141,224,164,178,224,165,137,224,164,
-151,224,164,174,224,164,190,224,164,178,224,164,191,224,164,149,224,164,174,224,
-164,185,224,164,191,224,164,178,224,164,190,224,164,170,224,165,131,224,164,183,
-224,165,141,224,164,160,224,164,172,224,164,162,224,164,188,224,164,164,224,165,
-135,224,164,173,224,164,190,224,164,156,224,164,170,224,164,190,224,164,149,224,
-165,141,224,164,178,224,164,191,224,164,149,224,164,159,224,165,141,224,164,176,
-224,165,135,224,164,168,224,164,150,224,164,191,224,164,178,224,164,190,224,164,
-171,224,164,166,224,165,140,224,164,176,224,164,190,224,164,168,224,164,174,224,
-164,190,224,164,174,224,164,178,224,165,135,224,164,174,224,164,164,224,164,166,
-224,164,190,224,164,168,224,164,172,224,164,190,224,164,156,224,164,190,224,164,
-176,224,164,181,224,164,191,224,164,149,224,164,190,224,164,184,224,164,149,224,
-165,141,224,164,175,224,165,139,224,164,130,224,164,154,224,164,190,224,164,185,
-224,164,164,224,165,135,224,164,170,224,164,185,224,165,129,224,164,129,224,164,
-154,224,164,172,224,164,164,224,164,190,224,164,175,224,164,190,224,164,184,224,
-164,130,224,164,181,224,164,190,224,164,166,224,164,166,224,165,135,224,164,150,
-224,164,168,224,165,135,224,164,170,224,164,191,224,164,155,224,164,178,224,165,
-135,224,164,181,224,164,191,224,164,182,224,165,135,224,164,183,224,164,176,224,
-164,190,224,164,156,224,165,141,224,164,175,224,164,137,224,164,164,224,165,141,
-224,164,164,224,164,176,224,164,174,224,165,129,224,164,130,224,164,172,224,164,
-136,224,164,166,224,165,139,224,164,168,224,165,139,224,164,130,224,164,137,224,
-164,170,224,164,149,224,164,176,224,164,163,224,164,170,224,164,162,224,164,188,
-224,165,135,224,164,130,224,164,184,224,165,141,224,164,165,224,164,191,224,164,
-164,224,164,171,224,164,191,224,164,178,224,165,141,224,164,174,224,164,174,224,
-165,129,224,164,150,224,165,141,224,164,175,224,164,133,224,164,154,224,165,141,
-224,164,155,224,164,190,224,164,155,224,165,130,224,164,159,224,164,164,224,165,
-128,224,164,184,224,164,130,224,164,151,224,165,128,224,164,164,224,164,156,224,
-164,190,224,164,143,224,164,151,224,164,190,224,164,181,224,164,191,224,164,173,
-224,164,190,224,164,151,224,164,152,224,164,163,224,165,141,224,164,159,224,165,
-135,224,164,166,224,165,130,224,164,184,224,164,176,224,165,135,224,164,166,224,
-164,191,224,164,168,224,165,139,224,164,130,224,164,185,224,164,164,224,165,141,
-224,164,175,224,164,190,224,164,184,224,165,135,224,164,149,224,165,141,224,164,
-184,224,164,151,224,164,190,224,164,130,224,164,167,224,165,128,224,164,181,224,
-164,191,224,164,182,224,165,141,224,164,181,224,164,176,224,164,190,224,164,164,
-224,165,135,224,164,130,224,164,166,224,165,136,224,164,159,224,165,141,224,164,
-184,224,164,168,224,164,149,224,165,141,224,164,182,224,164,190,224,164,184,224,
-164,190,224,164,174,224,164,168,224,165,135,224,164,133,224,164,166,224,164,190,
-224,164,178,224,164,164,224,164,172,224,164,191,224,164,156,224,164,178,224,165,
-128,224,164,170,224,165,129,224,164,176,224,165,130,224,164,183,224,164,185,224,
-164,191,224,164,130,224,164,166,224,165,128,224,164,174,224,164,191,224,164,164,
-224,165,141,224,164,176,224,164,149,224,164,181,224,164,191,224,164,164,224,164,
-190,224,164,176,224,165,129,224,164,170,224,164,175,224,165,135,224,164,184,224,
-165,141,224,164,165,224,164,190,224,164,168,224,164,149,224,164,176,224,165,139,
-224,164,161,224,164,188,224,164,174,224,165,129,224,164,149,224,165,141,224,164,
-164,224,164,175,224,165,139,224,164,156,224,164,168,224,164,190,224,164,149,224,
-165,131,224,164,170,224,164,175,224,164,190,224,164,170,224,165,139,224,164,184,
-224,165,141,224,164,159,224,164,152,224,164,176,224,165,135,224,164,178,224,165,
-130,224,164,149,224,164,190,224,164,176,224,165,141,224,164,175,224,164,181,224,
-164,191,224,164,154,224,164,190,224,164,176,224,164,184,224,165,130,224,164,154,
-224,164,168,224,164,190,224,164,174,224,165,130,224,164,178,224,165,141,224,164,
-175,224,164,166,224,165,135,224,164,150,224,165,135,224,164,130,224,164,185,224,
-164,174,224,165,135,224,164,182,224,164,190,224,164,184,224,165,141,224,164,149,
-224,165,130,224,164,178,224,164,174,224,165,136,224,164,130,224,164,168,224,165,
-135,224,164,164,224,165,136,224,164,175,224,164,190,224,164,176,224,164,156,224,
-164,191,224,164,184,224,164,149,224,165,135,114,115,115,43,120,109,108,34,32,116
-,105,116,108,101,61,34,45,116,121,112,101,34,32,99,111,110,116,101,110,116,61,34
-,116,105,116,108,101,34,32,99,111,110,116,101,110,116,61,34,97,116,32,116,104,
-101,32,115,97,109,101,32,116,105,109,101,46,106,115,34,62,60,47,115,99,114,105,
-112,116,62,10,60,34,32,109,101,116,104,111,100,61,34,112,111,115,116,34,32,60,47
-,115,112,97,110,62,60,47,97,62,60,47,108,105,62,118,101,114,116,105,99,97,108,45
-,97,108,105,103,110,58,116,47,106,113,117,101,114,121,46,109,105,110,46,106,115,
-34,62,46,99,108,105,99,107,40,102,117,110,99,116,105,111,110,40,32,115,116,121,
-108,101,61,34,112,97,100,100,105,110,103,45,125,41,40,41,59,10,60,47,115,99,114,
-105,112,116,62,10,60,47,115,112,97,110,62,60,97,32,104,114,101,102,61,34,60,97,
-32,104,114,101,102,61,34,104,116,116,112,58,47,47,41,59,32,114,101,116,117,114,
-110,32,102,97,108,115,101,59,116,101,120,116,45,100,101,99,111,114,97,116,105,
-111,110,58,32,115,99,114,111,108,108,105,110,103,61,34,110,111,34,32,98,111,114,
-100,101,114,45,99,111,108,108,97,112,115,101,58,97,115,115,111,99,105,97,116,101
-,100,32,119,105,116,104,32,66,97,104,97,115,97,32,73,110,100,111,110,101,115,105
-,97,69,110,103,108,105,115,104,32,108,97,110,103,117,97,103,101,60,116,101,120,
-116,32,120,109,108,58,115,112,97,99,101,61,46,103,105,102,34,32,98,111,114,100,
-101,114,61,34,48,34,60,47,98,111,100,121,62,10,60,47,104,116,109,108,62,10,111,
-118,101,114,102,108,111,119,58,104,105,100,100,101,110,59,105,109,103,32,115,114
-,99,61,34,104,116,116,112,58,47,47,97,100,100,69,118,101,110,116,76,105,115,116,
-101,110,101,114,114,101,115,112,111,110,115,105,98,108,101,32,102,111,114,32,115
-,46,106,115,34,62,60,47,115,99,114,105,112,116,62,10,47,102,97,118,105,99,111,
-110,46,105,99,111,34,32,47,62,111,112,101,114,97,116,105,110,103,32,115,121,115,
-116,101,109,34,32,115,116,121,108,101,61,34,119,105,100,116,104,58,49,116,97,114
-,103,101,116,61,34,95,98,108,97,110,107,34,62,83,116,97,116,101,32,85,110,105,
-118,101,114,115,105,116,121,116,101,120,116,45,97,108,105,103,110,58,108,101,102
-,116,59,10,100,111,99,117,109,101,110,116,46,119,114,105,116,101,40,44,32,105,
-110,99,108,117,100,105,110,103,32,116,104,101,32,97,114,111,117,110,100,32,116,
-104,101,32,119,111,114,108,100,41,59,13,10,60,47,115,99,114,105,112,116,62,13,10
-,60,34,32,115,116,121,108,101,61,34,104,101,105,103,104,116,58,59,111,118,101,
-114,102,108,111,119,58,104,105,100,100,101,110,109,111,114,101,32,105,110,102,
-111,114,109,97,116,105,111,110,97,110,32,105,110,116,101,114,110,97,116,105,111,
-110,97,108,97,32,109,101,109,98,101,114,32,111,102,32,116,104,101,32,111,110,101
-,32,111,102,32,116,104,101,32,102,105,114,115,116,99,97,110,32,98,101,32,102,111
-,117,110,100,32,105,110,32,60,47,100,105,118,62,10,9,9,60,47,100,105,118,62,10,
-100,105,115,112,108,97,121,58,32,110,111,110,101,59,34,62,34,32,47,62,10,60,108,
-105,110,107,32,114,101,108,61,34,10,32,32,40,102,117,110,99,116,105,111,110,40,
-41,32,123,116,104,101,32,49,53,116,104,32,99,101,110,116,117,114,121,46,112,114,
-101,118,101,110,116,68,101,102,97,117,108,116,40,108,97,114,103,101,32,110,117,
-109,98,101,114,32,111,102,32,66,121,122,97,110,116,105,110,101,32,69,109,112,105
-,114,101,46,106,112,103,124,116,104,117,109,98,124,108,101,102,116,124,118,97,
-115,116,32,109,97,106,111,114,105,116,121,32,111,102,109,97,106,111,114,105,116,
-121,32,111,102,32,116,104,101,32,32,97,108,105,103,110,61,34,99,101,110,116,101,
-114,34,62,85,110,105,118,101,114,115,105,116,121,32,80,114,101,115,115,100,111,
-109,105,110,97,116,101,100,32,98,121,32,116,104,101,83,101,99,111,110,100,32,87,
-111,114,108,100,32,87,97,114,100,105,115,116,114,105,98,117,116,105,111,110,32,
-111,102,32,115,116,121,108,101,61,34,112,111,115,105,116,105,111,110,58,116,104,
-101,32,114,101,115,116,32,111,102,32,116,104,101,32,99,104,97,114,97,99,116,101,
-114,105,122,101,100,32,98,121,32,114,101,108,61,34,110,111,102,111,108,108,111,
-119,34,62,100,101,114,105,118,101,115,32,102,114,111,109,32,116,104,101,114,97,
-116,104,101,114,32,116,104,97,110,32,116,104,101,32,97,32,99,111,109,98,105,110,
-97,116,105,111,110,32,111,102,115,116,121,108,101,61,34,119,105,100,116,104,58,
-49,48,48,69,110,103,108,105,115,104,45,115,112,101,97,107,105,110,103,99,111,109
-,112,117,116,101,114,32,115,99,105,101,110,99,101,98,111,114,100,101,114,61,34,
-48,34,32,97,108,116,61,34,116,104,101,32,101,120,105,115,116,101,110,99,101,32,
-111,102,68,101,109,111,99,114,97,116,105,99,32,80,97,114,116,121,34,32,115,116,
-121,108,101,61,34,109,97,114,103,105,110,45,70,111,114,32,116,104,105,115,32,114
-,101,97,115,111,110,44,46,106,115,34,62,60,47,115,99,114,105,112,116,62,10,9,115
-,66,121,84,97,103,78,97,109,101,40,115,41,91,48,93,106,115,34,62,60,47,115,99,
-114,105,112,116,62,13,10,60,46,106,115,34,62,60,47,115,99,114,105,112,116,62,13,
-10,108,105,110,107,32,114,101,108,61,34,105,99,111,110,34,32,39,32,97,108,116,61
-,39,39,32,99,108,97,115,115,61,39,102,111,114,109,97,116,105,111,110,32,111,102,
-32,116,104,101,118,101,114,115,105,111,110,115,32,111,102,32,116,104,101,32,60,
-47,97,62,60,47,100,105,118,62,60,47,100,105,118,62,47,112,97,103,101,62,10,32,32
-,60,112,97,103,101,62,10,60,100,105,118,32,99,108,97,115,115,61,34,99,111,110,
-116,98,101,99,97,109,101,32,116,104,101,32,102,105,114,115,116,98,97,104,97,115,
-97,32,73,110,100,111,110,101,115,105,97,101,110,103,108,105,115,104,32,40,115,
-105,109,112,108,101,41,206,149,206,187,206,187,206,183,206,189,206,185,206,186,
-206,172,209,133,209,128,208,178,208,176,209,130,209,129,208,186,208,184,208,186,
-208,190,208,188,208,191,208,176,208,189,208,184,208,184,209,143,208,178,208,187,
-209,143,208,181,209,130,209,129,209,143,208,148,208,190,208,177,208,176,208,178,
-208,184,209,130,209,140,209,135,208,181,208,187,208,190,208,178,208,181,208,186,
-208,176,209,128,208,176,208,183,208,178,208,184,209,130,208,184,209,143,208,152,
-208,189,209,130,208,181,209,128,208,189,208,181,209,130,208,158,209,130,208,178,
-208,181,209,130,208,184,209,130,209,140,208,189,208,176,208,191,209,128,208,184,
-208,188,208,181,209,128,208,184,208,189,209,130,208,181,209,128,208,189,208,181,
-209,130,208,186,208,190,209,130,208,190,209,128,208,190,208,179,208,190,209,129,
-209,130,209,128,208,176,208,189,208,184,209,134,209,139,208,186,208,176,209,135,
-208,181,209,129,209,130,208,178,208,181,209,131,209,129,208,187,208,190,208,178,
-208,184,209,143,209,133,208,191,209,128,208,190,208,177,208,187,208,181,208,188,
-209,139,208,191,208,190,208,187,209,131,209,135,208,184,209,130,209,140,209,143,
-208,178,208,187,209,143,209,142,209,130,209,129,209,143,208,189,208,176,208,184,
-208,177,208,190,208,187,208,181,208,181,208,186,208,190,208,188,208,191,208,176,
-208,189,208,184,209,143,208,178,208,189,208,184,208,188,208,176,208,189,208,184,
-208,181,209,129,209,128,208,181,208,180,209,129,209,130,208,178,208,176,216,167,
-217,132,217,133,217,136,216,167,216,182,217,138,216,185,216,167,217,132,216,177,
-216,166,217,138,216,179,217,138,216,169,216,167,217,132,216,167,217,134,216,170,
-217,130,216,167,217,132,217,133,216,180,216,167,216,177,217,131,216,167,216,170,
-217,131,216,167,217,132,216,179,217,138,216,167,216,177,216,167,216,170,216,167,
-217,132,217,133,217,131,216,170,217,136,216,168,216,169,216,167,217,132,216,179,
-216,185,217,136,216,175,217,138,216,169,216,167,216,173,216,181,216,167,216,166,
-217,138,216,167,216,170,216,167,217,132,216,185,216,167,217,132,217,133,217,138,
-216,169,216,167,217,132,216,181,217,136,216,170,217,138,216,167,216,170,216,167,
-217,132,216,167,217,134,216,170,216,177,217,134,216,170,216,167,217,132,216,170,
-216,181,216,167,217,133,217,138,217,133,216,167,217,132,216,165,216,179,217,132,
-216,167,217,133,217,138,216,167,217,132,217,133,216,180,216,167,216,177,217,131,
-216,169,216,167,217,132,217,133,216,177,216,166,217,138,216,167,216,170,114,111,
-98,111,116,115,34,32,99,111,110,116,101,110,116,61,34,60,100,105,118,32,105,100,
-61,34,102,111,111,116,101,114,34,62,116,104,101,32,85,110,105,116,101,100,32,83,
-116,97,116,101,115,60,105,109,103,32,115,114,99,61,34,104,116,116,112,58,47,47,
-46,106,112,103,124,114,105,103,104,116,124,116,104,117,109,98,124,46,106,115,34,
-62,60,47,115,99,114,105,112,116,62,13,10,60,108,111,99,97,116,105,111,110,46,112
-,114,111,116,111,99,111,108,102,114,97,109,101,98,111,114,100,101,114,61,34,48,
-34,32,115,34,32,47,62,10,60,109,101,116,97,32,110,97,109,101,61,34,60,47,97,62,
-60,47,100,105,118,62,60,47,100,105,118,62,60,102,111,110,116,45,119,101,105,103,
-104,116,58,98,111,108,100,59,38,113,117,111,116,59,32,97,110,100,32,38,113,117,
-111,116,59,100,101,112,101,110,100,105,110,103,32,111,110,32,116,104,101,32,109,
-97,114,103,105,110,58,48,59,112,97,100,100,105,110,103,58,34,32,114,101,108,61,
-34,110,111,102,111,108,108,111,119,34,32,80,114,101,115,105,100,101,110,116,32,
-111,102,32,116,104,101,32,116,119,101,110,116,105,101,116,104,32,99,101,110,116,
-117,114,121,101,118,105,115,105,111,110,62,10,32,32,60,47,112,97,103,101,73,110,
-116,101,114,110,101,116,32,69,120,112,108,111,114,101,114,97,46,97,115,121,110,
-99,32,61,32,116,114,117,101,59,13,10,105,110,102,111,114,109,97,116,105,111,110,
-32,97,98,111,117,116,60,100,105,118,32,105,100,61,34,104,101,97,100,101,114,34,
-62,34,32,97,99,116,105,111,110,61,34,104,116,116,112,58,47,47,60,97,32,104,114,
-101,102,61,34,104,116,116,112,115,58,47,47,60,100,105,118,32,105,100,61,34,99,
-111,110,116,101,110,116,34,60,47,100,105,118,62,13,10,60,47,100,105,118,62,13,10
-,60,100,101,114,105,118,101,100,32,102,114,111,109,32,116,104,101,32,60,105,109,
-103,32,115,114,99,61,39,104,116,116,112,58,47,47,97,99,99,111,114,100,105,110,
-103,32,116,111,32,116,104,101,32,10,60,47,98,111,100,121,62,10,60,47,104,116,109
-,108,62,10,115,116,121,108,101,61,34,102,111,110,116,45,115,105,122,101,58,115,
-99,114,105,112,116,32,108,97,110,103,117,97,103,101,61,34,65,114,105,97,108,44,
-32,72,101,108,118,101,116,105,99,97,44,60,47,97,62,60,115,112,97,110,32,99,108,
-97,115,115,61,34,60,47,115,99,114,105,112,116,62,60,115,99,114,105,112,116,32,
-112,111,108,105,116,105,99,97,108,32,112,97,114,116,105,101,115,116,100,62,60,47
-,116,114,62,60,47,116,97,98,108,101,62,60,104,114,101,102,61,34,104,116,116,112,
-58,47,47,119,119,119,46,105,110,116,101,114,112,114,101,116,97,116,105,111,110,
-32,111,102,114,101,108,61,34,115,116,121,108,101,115,104,101,101,116,34,32,100,
-111,99,117,109,101,110,116,46,119,114,105,116,101,40,39,60,99,104,97,114,115,101
-,116,61,34,117,116,102,45,56,34,62,10,98,101,103,105,110,110,105,110,103,32,111,
-102,32,116,104,101,32,114,101,118,101,97,108,101,100,32,116,104,97,116,32,116,
-104,101,116,101,108,101,118,105,115,105,111,110,32,115,101,114,105,101,115,34,32
-,114,101,108,61,34,110,111,102,111,108,108,111,119,34,62,32,116,97,114,103,101,
-116,61,34,95,98,108,97,110,107,34,62,99,108,97,105,109,105,110,103,32,116,104,97
-,116,32,116,104,101,104,116,116,112,37,51,65,37,50,70,37,50,70,119,119,119,46,
-109,97,110,105,102,101,115,116,97,116,105,111,110,115,32,111,102,80,114,105,109,
-101,32,77,105,110,105,115,116,101,114,32,111,102,105,110,102,108,117,101,110,99,
-101,100,32,98,121,32,116,104,101,99,108,97,115,115,61,34,99,108,101,97,114,102,
-105,120,34,62,47,100,105,118,62,13,10,60,47,100,105,118,62,13,10,13,10,116,104,
-114,101,101,45,100,105,109,101,110,115,105,111,110,97,108,67,104,117,114,99,104,
-32,111,102,32,69,110,103,108,97,110,100,111,102,32,78,111,114,116,104,32,67,97,
-114,111,108,105,110,97,115,113,117,97,114,101,32,107,105,108,111,109,101,116,114
-,101,115,46,97,100,100,69,118,101,110,116,76,105,115,116,101,110,101,114,100,105
-,115,116,105,110,99,116,32,102,114,111,109,32,116,104,101,99,111,109,109,111,110
-,108,121,32,107,110,111,119,110,32,97,115,80,104,111,110,101,116,105,99,32,65,
-108,112,104,97,98,101,116,100,101,99,108,97,114,101,100,32,116,104,97,116,32,116
-,104,101,99,111,110,116,114,111,108,108,101,100,32,98,121,32,116,104,101,66,101,
-110,106,97,109,105,110,32,70,114,97,110,107,108,105,110,114,111,108,101,45,112,
-108,97,121,105,110,103,32,103,97,109,101,116,104,101,32,85,110,105,118,101,114,
-115,105,116,121,32,111,102,105,110,32,87,101,115,116,101,114,110,32,69,117,114,
-111,112,101,112,101,114,115,111,110,97,108,32,99,111,109,112,117,116,101,114,80,
-114,111,106,101,99,116,32,71,117,116,101,110,98,101,114,103,114,101,103,97,114,
-100,108,101,115,115,32,111,102,32,116,104,101,104,97,115,32,98,101,101,110,32,
-112,114,111,112,111,115,101,100,116,111,103,101,116,104,101,114,32,119,105,116,
-104,32,116,104,101,62,60,47,108,105,62,60,108,105,32,99,108,97,115,115,61,34,105
-,110,32,115,111,109,101,32,99,111,117,110,116,114,105,101,115,109,105,110,46,106
-,115,34,62,60,47,115,99,114,105,112,116,62,111,102,32,116,104,101,32,112,111,112
-,117,108,97,116,105,111,110,111,102,102,105,99,105,97,108,32,108,97,110,103,117,
-97,103,101,60,105,109,103,32,115,114,99,61,34,105,109,97,103,101,115,47,105,100,
-101,110,116,105,102,105,101,100,32,98,121,32,116,104,101,110,97,116,117,114,97,
-108,32,114,101,115,111,117,114,99,101,115,99,108,97,115,115,105,102,105,99,97,
-116,105,111,110,32,111,102,99,97,110,32,98,101,32,99,111,110,115,105,100,101,114
-,101,100,113,117,97,110,116,117,109,32,109,101,99,104,97,110,105,99,115,78,101,
-118,101,114,116,104,101,108,101,115,115,44,32,116,104,101,109,105,108,108,105,
-111,110,32,121,101,97,114,115,32,97,103,111,60,47,98,111,100,121,62,13,10,60,47,
-104,116,109,108,62,13,206,149,206,187,206,187,206,183,206,189,206,185,206,186,
-206,172,10,116,97,107,101,32,97,100,118,97,110,116,97,103,101,32,111,102,97,110,
-100,44,32,97,99,99,111,114,100,105,110,103,32,116,111,97,116,116,114,105,98,117,
-116,101,100,32,116,111,32,116,104,101,77,105,99,114,111,115,111,102,116,32,87,
-105,110,100,111,119,115,116,104,101,32,102,105,114,115,116,32,99,101,110,116,117
-,114,121,117,110,100,101,114,32,116,104,101,32,99,111,110,116,114,111,108,100,
-105,118,32,99,108,97,115,115,61,34,104,101,97,100,101,114,115,104,111,114,116,
-108,121,32,97,102,116,101,114,32,116,104,101,110,111,116,97,98,108,101,32,101,
-120,99,101,112,116,105,111,110,116,101,110,115,32,111,102,32,116,104,111,117,115
-,97,110,100,115,115,101,118,101,114,97,108,32,100,105,102,102,101,114,101,110,
-116,97,114,111,117,110,100,32,116,104,101,32,119,111,114,108,100,46,114,101,97,
-99,104,105,110,103,32,109,105,108,105,116,97,114,121,105,115,111,108,97,116,101,
-100,32,102,114,111,109,32,116,104,101,111,112,112,111,115,105,116,105,111,110,32
-,116,111,32,116,104,101,116,104,101,32,79,108,100,32,84,101,115,116,97,109,101,
-110,116,65,102,114,105,99,97,110,32,65,109,101,114,105,99,97,110,115,105,110,115
-,101,114,116,101,100,32,105,110,116,111,32,116,104,101,115,101,112,97,114,97,116
-,101,32,102,114,111,109,32,116,104,101,109,101,116,114,111,112,111,108,105,116,
-97,110,32,97,114,101,97,109,97,107,101,115,32,105,116,32,112,111,115,115,105,98,
-108,101,97,99,107,110,111,119,108,101,100,103,101,100,32,116,104,97,116,97,114,
-103,117,97,98,108,121,32,116,104,101,32,109,111,115,116,116,121,112,101,61,34,
-116,101,120,116,47,99,115,115,34,62,10,116,104,101,32,73,110,116,101,114,110,97,
-116,105,111,110,97,108,65,99,99,111,114,100,105,110,103,32,116,111,32,116,104,
-101,32,112,101,61,34,116,101,120,116,47,99,115,115,34,32,47,62,10,99,111,105,110
-,99,105,100,101,32,119,105,116,104,32,116,104,101,116,119,111,45,116,104,105,114
-,100,115,32,111,102,32,116,104,101,68,117,114,105,110,103,32,116,104,105,115,32,
-116,105,109,101,44,100,117,114,105,110,103,32,116,104,101,32,112,101,114,105,111
-,100,97,110,110,111,117,110,99,101,100,32,116,104,97,116,32,104,101,116,104,101,
-32,105,110,116,101,114,110,97,116,105,111,110,97,108,97,110,100,32,109,111,114,
-101,32,114,101,99,101,110,116,108,121,98,101,108,105,101,118,101,100,32,116,104,
-97,116,32,116,104,101,99,111,110,115,99,105,111,117,115,110,101,115,115,32,97,
-110,100,102,111,114,109,101,114,108,121,32,107,110,111,119,110,32,97,115,115,117
-,114,114,111,117,110,100,101,100,32,98,121,32,116,104,101,102,105,114,115,116,32
-,97,112,112,101,97,114,101,100,32,105,110,111,99,99,97,115,105,111,110,97,108,
-108,121,32,117,115,101,100,112,111,115,105,116,105,111,110,58,97,98,115,111,108,
-117,116,101,59,34,32,116,97,114,103,101,116,61,34,95,98,108,97,110,107,34,32,112
-,111,115,105,116,105,111,110,58,114,101,108,97,116,105,118,101,59,116,101,120,
-116,45,97,108,105,103,110,58,99,101,110,116,101,114,59,106,97,120,47,108,105,98,
-115,47,106,113,117,101,114,121,47,49,46,98,97,99,107,103,114,111,117,110,100,45,
-99,111,108,111,114,58,35,116,121,112,101,61,34,97,112,112,108,105,99,97,116,105,
-111,110,47,97,110,103,117,97,103,101,34,32,99,111,110,116,101,110,116,61,34,60,
-109,101,116,97,32,104,116,116,112,45,101,113,117,105,118,61,34,80,114,105,118,97
-,99,121,32,80,111,108,105,99,121,60,47,97,62,101,40,34,37,51,67,115,99,114,105,
-112,116,32,115,114,99,61,39,34,32,116,97,114,103,101,116,61,34,95,98,108,97,110,
-107,34,62,79,110,32,116,104,101,32,111,116,104,101,114,32,104,97,110,100,44,46,
-106,112,103,124,116,104,117,109,98,124,114,105,103,104,116,124,50,60,47,100,105,
-118,62,60,100,105,118,32,99,108,97,115,115,61,34,60,100,105,118,32,115,116,121,
-108,101,61,34,102,108,111,97,116,58,110,105,110,101,116,101,101,110,116,104,32,
-99,101,110,116,117,114,121,60,47,98,111,100,121,62,13,10,60,47,104,116,109,108,
-62,13,10,60,105,109,103,32,115,114,99,61,34,104,116,116,112,58,47,47,115,59,116,
-101,120,116,45,97,108,105,103,110,58,99,101,110,116,101,114,102,111,110,116,45,
-119,101,105,103,104,116,58,32,98,111,108,100,59,32,65,99,99,111,114,100,105,110,
-103,32,116,111,32,116,104,101,32,100,105,102,102,101,114,101,110,99,101,32,98,
-101,116,119,101,101,110,34,32,102,114,97,109,101,98,111,114,100,101,114,61,34,48
-,34,32,34,32,115,116,121,108,101,61,34,112,111,115,105,116,105,111,110,58,108,
-105,110,107,32,104,114,101,102,61,34,104,116,116,112,58,47,47,104,116,109,108,52
-,47,108,111,111,115,101,46,100,116,100,34,62,10,100,117,114,105,110,103,32,116,
-104,105,115,32,112,101,114,105,111,100,60,47,116,100,62,60,47,116,114,62,60,47,
-116,97,98,108,101,62,99,108,111,115,101,108,121,32,114,101,108,97,116,101,100,32
-,116,111,102,111,114,32,116,104,101,32,102,105,114,115,116,32,116,105,109,101,59
-,102,111,110,116,45,119,101,105,103,104,116,58,98,111,108,100,59,105,110,112,117
-,116,32,116,121,112,101,61,34,116,101,120,116,34,32,60,115,112,97,110,32,115,116
-,121,108,101,61,34,102,111,110,116,45,111,110,114,101,97,100,121,115,116,97,116,
-101,99,104,97,110,103,101,9,60,100,105,118,32,99,108,97,115,115,61,34,99,108,101
-,97,114,100,111,99,117,109,101,110,116,46,108,111,99,97,116,105,111,110,46,32,70
-,111,114,32,101,120,97,109,112,108,101,44,32,116,104,101,32,97,32,119,105,100,
-101,32,118,97,114,105,101,116,121,32,111,102,32,60,33,68,79,67,84,89,80,69,32,
-104,116,109,108,62,13,10,60,38,110,98,115,112,59,38,110,98,115,112,59,38,110,98,
-115,112,59,34,62,60,97,32,104,114,101,102,61,34,104,116,116,112,58,47,47,115,116
-,121,108,101,61,34,102,108,111,97,116,58,108,101,102,116,59,99,111,110,99,101,
-114,110,101,100,32,119,105,116,104,32,116,104,101,61,104,116,116,112,37,51,65,37
-,50,70,37,50,70,119,119,119,46,105,110,32,112,111,112,117,108,97,114,32,99,117,
-108,116,117,114,101,116,121,112,101,61,34,116,101,120,116,47,99,115,115,34,32,47
-,62,105,116,32,105,115,32,112,111,115,115,105,98,108,101,32,116,111,32,72,97,114
-,118,97,114,100,32,85,110,105,118,101,114,115,105,116,121,116,121,108,101,115,
-104,101,101,116,34,32,104,114,101,102,61,34,47,116,104,101,32,109,97,105,110,32,
-99,104,97,114,97,99,116,101,114,79,120,102,111,114,100,32,85,110,105,118,101,114
-,115,105,116,121,32,32,110,97,109,101,61,34,107,101,121,119,111,114,100,115,34,
-32,99,115,116,121,108,101,61,34,116,101,120,116,45,97,108,105,103,110,58,116,104
-,101,32,85,110,105,116,101,100,32,75,105,110,103,100,111,109,102,101,100,101,114
-,97,108,32,103,111,118,101,114,110,109,101,110,116,60,100,105,118,32,115,116,121
-,108,101,61,34,109,97,114,103,105,110,32,100,101,112,101,110,100,105,110,103,32,
-111,110,32,116,104,101,32,100,101,115,99,114,105,112,116,105,111,110,32,111,102,
-32,116,104,101,60,100,105,118,32,99,108,97,115,115,61,34,104,101,97,100,101,114,
-46,109,105,110,46,106,115,34,62,60,47,115,99,114,105,112,116,62,100,101,115,116,
-114,117,99,116,105,111,110,32,111,102,32,116,104,101,115,108,105,103,104,116,108
-,121,32,100,105,102,102,101,114,101,110,116,105,110,32,97,99,99,111,114,100,97,
-110,99,101,32,119,105,116,104,116,101,108,101,99,111,109,109,117,110,105,99,97,
-116,105,111,110,115,105,110,100,105,99,97,116,101,115,32,116,104,97,116,32,116,
-104,101,115,104,111,114,116,108,121,32,116,104,101,114,101,97,102,116,101,114,
-101,115,112,101,99,105,97,108,108,121,32,105,110,32,116,104,101,32,69,117,114,
-111,112,101,97,110,32,99,111,117,110,116,114,105,101,115,72,111,119,101,118,101,
-114,44,32,116,104,101,114,101,32,97,114,101,115,114,99,61,34,104,116,116,112,58,
-47,47,115,116,97,116,105,99,115,117,103,103,101,115,116,101,100,32,116,104,97,
-116,32,116,104,101,34,32,115,114,99,61,34,104,116,116,112,58,47,47,119,119,119,
-46,97,32,108,97,114,103,101,32,110,117,109,98,101,114,32,111,102,32,84,101,108,
-101,99,111,109,109,117,110,105,99,97,116,105,111,110,115,34,32,114,101,108,61,34
-,110,111,102,111,108,108,111,119,34,32,116,72,111,108,121,32,82,111,109,97,110,
-32,69,109,112,101,114,111,114,97,108,109,111,115,116,32,101,120,99,108,117,115,
-105,118,101,108,121,34,32,98,111,114,100,101,114,61,34,48,34,32,97,108,116,61,34
-,83,101,99,114,101,116,97,114,121,32,111,102,32,83,116,97,116,101,99,117,108,109
-,105,110,97,116,105,110,103,32,105,110,32,116,104,101,67,73,65,32,87,111,114,108
-,100,32,70,97,99,116,98,111,111,107,116,104,101,32,109,111,115,116,32,105,109,
-112,111,114,116,97,110,116,97,110,110,105,118,101,114,115,97,114,121,32,111,102,
-32,116,104,101,115,116,121,108,101,61,34,98,97,99,107,103,114,111,117,110,100,45
-,60,108,105,62,60,101,109,62,60,97,32,104,114,101,102,61,34,47,116,104,101,32,65
-,116,108,97,110,116,105,99,32,79,99,101,97,110,115,116,114,105,99,116,108,121,32
-,115,112,101,97,107,105,110,103,44,115,104,111,114,116,108,121,32,98,101,102,111
-,114,101,32,116,104,101,100,105,102,102,101,114,101,110,116,32,116,121,112,101,
-115,32,111,102,116,104,101,32,79,116,116,111,109,97,110,32,69,109,112,105,114,
-101,62,60,105,109,103,32,115,114,99,61,34,104,116,116,112,58,47,47,65,110,32,73,
-110,116,114,111,100,117,99,116,105,111,110,32,116,111,99,111,110,115,101,113,117
-,101,110,99,101,32,111,102,32,116,104,101,100,101,112,97,114,116,117,114,101,32,
-102,114,111,109,32,116,104,101,67,111,110,102,101,100,101,114,97,116,101,32,83,
-116,97,116,101,115,105,110,100,105,103,101,110,111,117,115,32,112,101,111,112,
-108,101,115,80,114,111,99,101,101,100,105,110,103,115,32,111,102,32,116,104,101,
-105,110,102,111,114,109,97,116,105,111,110,32,111,110,32,116,104,101,116,104,101
-,111,114,105,101,115,32,104,97,118,101,32,98,101,101,110,105,110,118,111,108,118
-,101,109,101,110,116,32,105,110,32,116,104,101,100,105,118,105,100,101,100,32,
-105,110,116,111,32,116,104,114,101,101,97,100,106,97,99,101,110,116,32,99,111,
-117,110,116,114,105,101,115,105,115,32,114,101,115,112,111,110,115,105,98,108,
-101,32,102,111,114,100,105,115,115,111,108,117,116,105,111,110,32,111,102,32,116
-,104,101,99,111,108,108,97,98,111,114,97,116,105,111,110,32,119,105,116,104,119,
-105,100,101,108,121,32,114,101,103,97,114,100,101,100,32,97,115,104,105,115,32,
-99,111,110,116,101,109,112,111,114,97,114,105,101,115,102,111,117,110,100,105,
-110,103,32,109,101,109,98,101,114,32,111,102,68,111,109,105,110,105,99,97,110,32
-,82,101,112,117,98,108,105,99,103,101,110,101,114,97,108,108,121,32,97,99,99,101
-,112,116,101,100,116,104,101,32,112,111,115,115,105,98,105,108,105,116,121,32,
-111,102,97,114,101,32,97,108,115,111,32,97,118,97,105,108,97,98,108,101,117,110,
-100,101,114,32,99,111,110,115,116,114,117,99,116,105,111,110,114,101,115,116,111
-,114,97,116,105,111,110,32,111,102,32,116,104,101,116,104,101,32,103,101,110,101
-,114,97,108,32,112,117,98,108,105,99,105,115,32,97,108,109,111,115,116,32,101,
-110,116,105,114,101,108,121,112,97,115,115,101,115,32,116,104,114,111,117,103,
-104,32,116,104,101,104,97,115,32,98,101,101,110,32,115,117,103,103,101,115,116,
-101,100,99,111,109,112,117,116,101,114,32,97,110,100,32,118,105,100,101,111,71,
-101,114,109,97,110,105,99,32,108,97,110,103,117,97,103,101,115,32,97,99,99,111,
-114,100,105,110,103,32,116,111,32,116,104,101,32,100,105,102,102,101,114,101,110
-,116,32,102,114,111,109,32,116,104,101,115,104,111,114,116,108,121,32,97,102,116
-,101,114,119,97,114,100,115,104,114,101,102,61,34,104,116,116,112,115,58,47,47,
-119,119,119,46,114,101,99,101,110,116,32,100,101,118,101,108,111,112,109,101,110
-,116,66,111,97,114,100,32,111,102,32,68,105,114,101,99,116,111,114,115,60,100,
-105,118,32,99,108,97,115,115,61,34,115,101,97,114,99,104,124,32,60,97,32,104,114
-,101,102,61,34,104,116,116,112,58,47,47,73,110,32,112,97,114,116,105,99,117,108,
-97,114,44,32,116,104,101,77,117,108,116,105,112,108,101,32,102,111,111,116,110,
-111,116,101,115,111,114,32,111,116,104,101,114,32,115,117,98,115,116,97,110,99,
-101,116,104,111,117,115,97,110,100,115,32,111,102,32,121,101,97,114,115,116,114,
-97,110,115,108,97,116,105,111,110,32,111,102,32,116,104,101,60,47,100,105,118,62
-,13,10,60,47,100,105,118,62,13,10,13,10,60,97,32,104,114,101,102,61,34,105,110,
-100,101,120,46,112,104,112,119,97,115,32,101,115,116,97,98,108,105,115,104,101,
-100,32,105,110,109,105,110,46,106,115,34,62,60,47,115,99,114,105,112,116,62,10,
-112,97,114,116,105,99,105,112,97,116,101,32,105,110,32,116,104,101,97,32,115,116
-,114,111,110,103,32,105,110,102,108,117,101,110,99,101,115,116,121,108,101,61,34
-,109,97,114,103,105,110,45,116,111,112,58,114,101,112,114,101,115,101,110,116,
-101,100,32,98,121,32,116,104,101,103,114,97,100,117,97,116,101,100,32,102,114,
-111,109,32,116,104,101,84,114,97,100,105,116,105,111,110,97,108,108,121,44,32,
-116,104,101,69,108,101,109,101,110,116,40,34,115,99,114,105,112,116,34,41,59,72,
-111,119,101,118,101,114,44,32,115,105,110,99,101,32,116,104,101,47,100,105,118,
-62,10,60,47,100,105,118,62,10,60,100,105,118,32,108,101,102,116,59,32,109,97,114
-,103,105,110,45,108,101,102,116,58,112,114,111,116,101,99,116,105,111,110,32,97,
-103,97,105,110,115,116,48,59,32,118,101,114,116,105,99,97,108,45,97,108,105,103,
-110,58,85,110,102,111,114,116,117,110,97,116,101,108,121,44,32,116,104,101,116,
-121,112,101,61,34,105,109,97,103,101,47,120,45,105,99,111,110,47,100,105,118,62,
-10,60,100,105,118,32,99,108,97,115,115,61,34,32,99,108,97,115,115,61,34,99,108,
-101,97,114,102,105,120,34,62,60,100,105,118,32,99,108,97,115,115,61,34,102,111,
-111,116,101,114,9,9,60,47,100,105,118,62,10,9,9,60,47,100,105,118,62,10,116,104,
-101,32,109,111,116,105,111,110,32,112,105,99,116,117,114,101,208,145,209,138,208
-,187,208,179,208,176,209,128,209,129,208,186,208,184,208,177,209,138,208,187,208
-,179,208,176,209,128,209,129,208,186,208,184,208,164,208,181,208,180,208,181,209
-,128,208,176,209,134,208,184,208,184,208,189,208,181,209,129,208,186,208,190,208
-,187,209,140,208,186,208,190,209,129,208,190,208,190,208,177,209,137,208,181,208
-,189,208,184,208,181,209,129,208,190,208,190,208,177,209,137,208,181,208,189,208
-,184,209,143,208,191,209,128,208,190,208,179,209,128,208,176,208,188,208,188,209
-,139,208,158,209,130,208,191,209,128,208,176,208,178,208,184,209,130,209,140,208
-,177,208,181,209,129,208,191,208,187,208,176,209,130,208,189,208,190,208,188,208
-,176,209,130,208,181,209,128,208,184,208,176,208,187,209,139,208,191,208,190,208
-,183,208,178,208,190,208,187,209,143,208,181,209,130,208,191,208,190,209,129,208
-,187,208,181,208,180,208,189,208,184,208,181,209,128,208,176,208,183,208,187,208
-,184,209,135,208,189,209,139,209,133,208,191,209,128,208,190,208,180,209,131,208
-,186,209,134,208,184,208,184,208,191,209,128,208,190,208,179,209,128,208,176,208
-,188,208,188,208,176,208,191,208,190,208,187,208,189,208,190,209,129,209,130,209
-,140,209,142,208,189,208,176,209,133,208,190,208,180,208,184,209,130,209,129,209
-,143,208,184,208,183,208,177,209,128,208,176,208,189,208,189,208,190,208,181,208
-,189,208,176,209,129,208,181,208,187,208,181,208,189,208,184,209,143,208,184,208
-,183,208,188,208,181,208,189,208,181,208,189,208,184,209,143,208,186,208,176,209
-,130,208,181,208,179,208,190,209,128,208,184,208,184,208,144,208,187,208,181,208
-,186,209,129,208,176,208,189,208,180,209,128,224,164,166,224,165,141,224,164,181
-,224,164,190,224,164,176,224,164,190,224,164,174,224,165,136,224,164,168,224,165
-,129,224,164,133,224,164,178,224,164,170,224,165,141,224,164,176,224,164,166,224
-,164,190,224,164,168,224,164,173,224,164,190,224,164,176,224,164,164,224,165,128
-,224,164,175,224,164,133,224,164,168,224,165,129,224,164,166,224,165,135,224,164
-,182,224,164,185,224,164,191,224,164,168,224,165,141,224,164,166,224,165,128,224
-,164,135,224,164,130,224,164,161,224,164,191,224,164,175,224,164,190,224,164,166
-,224,164,191,224,164,178,224,165,141,224,164,178,224,165,128,224,164,133,224,164
-,167,224,164,191,224,164,149,224,164,190,224,164,176,224,164,181,224,165,128,224
-,164,161,224,164,191,224,164,175,224,165,139,224,164,154,224,164,191,224,164,159
-,224,165,141,224,164,160,224,165,135,224,164,184,224,164,174,224,164,190,224,164
-,154,224,164,190,224,164,176,224,164,156,224,164,130,224,164,149,224,165,141,224
-,164,182,224,164,168,224,164,166,224,165,129,224,164,168,224,164,191,224,164,175
-,224,164,190,224,164,170,224,165,141,224,164,176,224,164,175,224,165,139,224,164
-,151,224,164,133,224,164,168,224,165,129,224,164,184,224,164,190,224,164,176,224
-,164,145,224,164,168,224,164,178,224,164,190,224,164,135,224,164,168,224,164,170
-,224,164,190,224,164,176,224,165,141,224,164,159,224,165,128,224,164,182,224,164
-,176,224,165,141,224,164,164,224,165,139,224,164,130,224,164,178,224,165,139,224
-,164,149,224,164,184,224,164,173,224,164,190,224,164,171,224,164,188,224,165,141
-,224,164,178,224,165,136,224,164,182,224,164,182,224,164,176,224,165,141,224,164
-,164,224,165,135,224,164,130,224,164,170,224,165,141,224,164,176,224,164,166,224
-,165,135,224,164,182,224,164,170,224,165,141,224,164,178,224,165,135,224,164,175
-,224,164,176,224,164,149,224,165,135,224,164,130,224,164,166,224,165,141,224,164
-,176,224,164,184,224,165,141,224,164,165,224,164,191,224,164,164,224,164,191,224
-,164,137,224,164,164,224,165,141,224,164,170,224,164,190,224,164,166,224,164,137
-,224,164,168,224,165,141,224,164,185,224,165,135,224,164,130,224,164,154,224,164
-,191,224,164,159,224,165,141,224,164,160,224,164,190,224,164,175,224,164,190,224
-,164,164,224,165,141,224,164,176,224,164,190,224,164,156,224,165,141,224,164,175
-,224,164,190,224,164,166,224,164,190,224,164,170,224,165,129,224,164,176,224,164
-,190,224,164,168,224,165,135,224,164,156,224,165,139,224,164,161,224,164,188,224
-,165,135,224,164,130,224,164,133,224,164,168,224,165,129,224,164,181,224,164,190
-,224,164,166,224,164,182,224,165,141,224,164,176,224,165,135,224,164,163,224,165
-,128,224,164,182,224,164,191,224,164,149,224,165,141,224,164,183,224,164,190,224
-,164,184,224,164,176,224,164,149,224,164,190,224,164,176,224,165,128,224,164,184
-,224,164,130,224,164,151,224,165,141,224,164,176,224,164,185,224,164,170,224,164
-,176,224,164,191,224,164,163,224,164,190,224,164,174,224,164,172,224,165,141,224
-,164,176,224,164,190,224,164,130,224,164,161,224,164,172,224,164,154,224,165,141
-,224,164,154,224,165,139,224,164,130,224,164,137,224,164,170,224,164,178,224,164
-,172,224,165,141,224,164,167,224,164,174,224,164,130,224,164,164,224,165,141,224
-,164,176,224,165,128,224,164,184,224,164,130,224,164,170,224,164,176,224,165,141
-,224,164,149,224,164,137,224,164,174,224,165,141,224,164,174,224,165,128,224,164
-,166,224,164,174,224,164,190,224,164,167,224,165,141,224,164,175,224,164,174,224
-,164,184,224,164,185,224,164,190,224,164,175,224,164,164,224,164,190,224,164,182
-,224,164,172,224,165,141,224,164,166,224,165,139,224,164,130,224,164,174,224,165
-,128,224,164,161,224,164,191,224,164,175,224,164,190,224,164,134,224,164,136,224
-,164,170,224,165,128,224,164,143,224,164,178,224,164,174,224,165,139,224,164,172
-,224,164,190,224,164,135,224,164,178,224,164,184,224,164,130,224,164,150,224,165
-,141,224,164,175,224,164,190,224,164,134,224,164,170,224,164,176,224,165,135,224
-,164,182,224,164,168,224,164,133,224,164,168,224,165,129,224,164,172,224,164,130
-,224,164,167,224,164,172,224,164,190,224,164,156,224,164,188,224,164,190,224,164
-,176,224,164,168,224,164,181,224,165,128,224,164,168,224,164,164,224,164,174,224
-,164,170,224,165,141,224,164,176,224,164,174,224,165,129,224,164,150,224,164,170
-,224,165,141,224,164,176,224,164,182,224,165,141,224,164,168,224,164,170,224,164
-,176,224,164,191,224,164,181,224,164,190,224,164,176,224,164,168,224,165,129,224
-,164,149,224,164,184,224,164,190,224,164,168,224,164,184,224,164,174,224,164,176
-,224,165,141,224,164,165,224,164,168,224,164,134,224,164,175,224,165,139,224,164
-,156,224,164,191,224,164,164,224,164,184,224,165,139,224,164,174,224,164,181,224
-,164,190,224,164,176,216,167,217,132,217,133,216,180,216,167,216,177,217,131,216
-,167,216,170,216,167,217,132,217,133,217,134,216,170,216,175,217,138,216,167,216
-,170,216,167,217,132,217,131,217,133,216,168,217,138,217,136,216,170,216,177,216
-,167,217,132,217,133,216,180,216,167,217,135,216,175,216,167,216,170,216,185,216
-,175,216,175,216,167,217,132,216,178,217,136,216,167,216,177,216,185,216,175,216
-,175,216,167,217,132,216,177,216,175,217,136,216,175,216,167,217,132,216,165,216
-,179,217,132,216,167,217,133,217,138,216,169,216,167,217,132,217,129,217,136,216
-,170,217,136,216,180,217,136,216,168,216,167,217,132,217,133,216,179,216,167,216
-,168,217,130,216,167,216,170,216,167,217,132,217,133,216,185,217,132,217,136,217
-,133,216,167,216,170,216,167,217,132,217,133,216,179,217,132,216,179,217,132,216
-,167,216,170,216,167,217,132,216,172,216,177,216,167,217,129,217,138,217,131,216
-,179,216,167,217,132,216,167,216,179,217,132,216,167,217,133,217,138,216,169,216
-,167,217,132,216,167,216,170,216,181,216,167,217,132,216,167,216,170,107,101,121
-,119,111,114,100,115,34,32,99,111,110,116,101,110,116,61,34,119,51,46,111,114,
-103,47,49,57,57,57,47,120,104,116,109,108,34,62,60,97,32,116,97,114,103,101,116,
-61,34,95,98,108,97,110,107,34,32,116,101,120,116,47,104,116,109,108,59,32,99,104
-,97,114,115,101,116,61,34,32,116,97,114,103,101,116,61,34,95,98,108,97,110,107,
-34,62,60,116,97,98,108,101,32,99,101,108,108,112,97,100,100,105,110,103,61,34,97
-,117,116,111,99,111,109,112,108,101,116,101,61,34,111,102,102,34,32,116,101,120,
-116,45,97,108,105,103,110,58,32,99,101,110,116,101,114,59,116,111,32,108,97,115,
-116,32,118,101,114,115,105,111,110,32,98,121,32,98,97,99,107,103,114,111,117,110
-,100,45,99,111,108,111,114,58,32,35,34,32,104,114,101,102,61,34,104,116,116,112,
-58,47,47,119,119,119,46,47,100,105,118,62,60,47,100,105,118,62,60,100,105,118,32
-,105,100,61,60,97,32,104,114,101,102,61,34,35,34,32,99,108,97,115,115,61,34,34,
-62,60,105,109,103,32,115,114,99,61,34,104,116,116,112,58,47,47,99,114,105,112,
-116,34,32,115,114,99,61,34,104,116,116,112,58,47,47,10,60,115,99,114,105,112,116
-,32,108,97,110,103,117,97,103,101,61,34,47,47,69,78,34,32,34,104,116,116,112,58,
-47,47,119,119,119,46,119,101,110,99,111,100,101,85,82,73,67,111,109,112,111,110,
-101,110,116,40,34,32,104,114,101,102,61,34,106,97,118,97,115,99,114,105,112,116,
-58,60,100,105,118,32,99,108,97,115,115,61,34,99,111,110,116,101,110,116,100,111,
-99,117,109,101,110,116,46,119,114,105,116,101,40,39,60,115,99,112,111,115,105,
-116,105,111,110,58,32,97,98,115,111,108,117,116,101,59,115,99,114,105,112,116,32
-,115,114,99,61,34,104,116,116,112,58,47,47,32,115,116,121,108,101,61,34,109,97,
-114,103,105,110,45,116,111,112,58,46,109,105,110,46,106,115,34,62,60,47,115,99,
-114,105,112,116,62,10,60,47,100,105,118,62,10,60,100,105,118,32,99,108,97,115,
-115,61,34,119,51,46,111,114,103,47,49,57,57,57,47,120,104,116,109,108,34,32,10,
-13,10,60,47,98,111,100,121,62,13,10,60,47,104,116,109,108,62,100,105,115,116,105
-,110,99,116,105,111,110,32,98,101,116,119,101,101,110,47,34,32,116,97,114,103,
-101,116,61,34,95,98,108,97,110,107,34,62,60,108,105,110,107,32,104,114,101,102,
-61,34,104,116,116,112,58,47,47,101,110,99,111,100,105,110,103,61,34,117,116,102,
-45,56,34,63,62,10,119,46,97,100,100,69,118,101,110,116,76,105,115,116,101,110,
-101,114,63,97,99,116,105,111,110,61,34,104,116,116,112,58,47,47,119,119,119,46,
-105,99,111,110,34,32,104,114,101,102,61,34,104,116,116,112,58,47,47,32,115,116,
-121,108,101,61,34,98,97,99,107,103,114,111,117,110,100,58,116,121,112,101,61,34,
-116,101,120,116,47,99,115,115,34,32,47,62,10,109,101,116,97,32,112,114,111,112,
-101,114,116,121,61,34,111,103,58,116,60,105,110,112,117,116,32,116,121,112,101,
-61,34,116,101,120,116,34,32,32,115,116,121,108,101,61,34,116,101,120,116,45,97,
-108,105,103,110,58,116,104,101,32,100,101,118,101,108,111,112,109,101,110,116,32
-,111,102,32,116,121,108,101,115,104,101,101,116,34,32,116,121,112,101,61,34,116,
-101,104,116,109,108,59,32,99,104,97,114,115,101,116,61,117,116,102,45,56,105,115
-,32,99,111,110,115,105,100,101,114,101,100,32,116,111,32,98,101,116,97,98,108,
-101,32,119,105,100,116,104,61,34,49,48,48,37,34,32,73,110,32,97,100,100,105,116,
-105,111,110,32,116,111,32,116,104,101,32,99,111,110,116,114,105,98,117,116,101,
-100,32,116,111,32,116,104,101,32,100,105,102,102,101,114,101,110,99,101,115,32,
-98,101,116,119,101,101,110,100,101,118,101,108,111,112,109,101,110,116,32,111,
-102,32,116,104,101,32,73,116,32,105,115,32,105,109,112,111,114,116,97,110,116,32
-,116,111,32,60,47,115,99,114,105,112,116,62,10,10,60,115,99,114,105,112,116,32,
-32,115,116,121,108,101,61,34,102,111,110,116,45,115,105,122,101,58,49,62,60,47,
-115,112,97,110,62,60,115,112,97,110,32,105,100,61,103,98,76,105,98,114,97,114,
-121,32,111,102,32,67,111,110,103,114,101,115,115,60,105,109,103,32,115,114,99,61
-,34,104,116,116,112,58,47,47,105,109,69,110,103,108,105,115,104,32,116,114,97,
-110,115,108,97,116,105,111,110,65,99,97,100,101,109,121,32,111,102,32,83,99,105,
-101,110,99,101,115,100,105,118,32,115,116,121,108,101,61,34,100,105,115,112,108,
-97,121,58,99,111,110,115,116,114,117,99,116,105,111,110,32,111,102,32,116,104,
-101,46,103,101,116,69,108,101,109,101,110,116,66,121,73,100,40,105,100,41,105,
-110,32,99,111,110,106,117,110,99,116,105,111,110,32,119,105,116,104,69,108,101,
-109,101,110,116,40,39,115,99,114,105,112,116,39,41,59,32,60,109,101,116,97,32,
-112,114,111,112,101,114,116,121,61,34,111,103,58,208,145,209,138,208,187,208,179
-,208,176,209,128,209,129,208,186,208,184,10,32,116,121,112,101,61,34,116,101,120
-,116,34,32,110,97,109,101,61,34,62,80,114,105,118,97,99,121,32,80,111,108,105,99
-,121,60,47,97,62,97,100,109,105,110,105,115,116,101,114,101,100,32,98,121,32,116
-,104,101,101,110,97,98,108,101,83,105,110,103,108,101,82,101,113,117,101,115,116
-,115,116,121,108,101,61,38,113,117,111,116,59,109,97,114,103,105,110,58,60,47,
-100,105,118,62,60,47,100,105,118,62,60,47,100,105,118,62,60,62,60,105,109,103,32
-,115,114,99,61,34,104,116,116,112,58,47,47,105,32,115,116,121,108,101,61,38,113,
-117,111,116,59,102,108,111,97,116,58,114,101,102,101,114,114,101,100,32,116,111,
-32,97,115,32,116,104,101,32,116,111,116,97,108,32,112,111,112,117,108,97,116,105
-,111,110,32,111,102,105,110,32,87,97,115,104,105,110,103,116,111,110,44,32,68,46
-,67,46,32,115,116,121,108,101,61,34,98,97,99,107,103,114,111,117,110,100,45,97,
-109,111,110,103,32,111,116,104,101,114,32,116,104,105,110,103,115,44,111,114,103
-,97,110,105,122,97,116,105,111,110,32,111,102,32,116,104,101,112,97,114,116,105,
-99,105,112,97,116,101,100,32,105,110,32,116,104,101,116,104,101,32,105,110,116,
-114,111,100,117,99,116,105,111,110,32,111,102,105,100,101,110,116,105,102,105,
-101,100,32,119,105,116,104,32,116,104,101,102,105,99,116,105,111,110,97,108,32,
-99,104,97,114,97,99,116,101,114,32,79,120,102,111,114,100,32,85,110,105,118,101,
-114,115,105,116,121,32,109,105,115,117,110,100,101,114,115,116,97,110,100,105,
-110,103,32,111,102,84,104,101,114,101,32,97,114,101,44,32,104,111,119,101,118,
-101,114,44,115,116,121,108,101,115,104,101,101,116,34,32,104,114,101,102,61,34,
-47,67,111,108,117,109,98,105,97,32,85,110,105,118,101,114,115,105,116,121,101,
-120,112,97,110,100,101,100,32,116,111,32,105,110,99,108,117,100,101,117,115,117,
-97,108,108,121,32,114,101,102,101,114,114,101,100,32,116,111,105,110,100,105,99,
-97,116,105,110,103,32,116,104,97,116,32,116,104,101,104,97,118,101,32,115,117,
-103,103,101,115,116,101,100,32,116,104,97,116,97,102,102,105,108,105,97,116,101,
-100,32,119,105,116,104,32,116,104,101,99,111,114,114,101,108,97,116,105,111,110,
-32,98,101,116,119,101,101,110,110,117,109,98,101,114,32,111,102,32,100,105,102,
-102,101,114,101,110,116,62,60,47,116,100,62,60,47,116,114,62,60,47,116,97,98,108
-,101,62,82,101,112,117,98,108,105,99,32,111,102,32,73,114,101,108,97,110,100,10,
-60,47,115,99,114,105,112,116,62,10,60,115,99,114,105,112,116,32,117,110,100,101,
-114,32,116,104,101,32,105,110,102,108,117,101,110,99,101,99,111,110,116,114,105,
-98,117,116,105,111,110,32,116,111,32,116,104,101,79,102,102,105,99,105,97,108,32
-,119,101,98,115,105,116,101,32,111,102,104,101,97,100,113,117,97,114,116,101,114
-,115,32,111,102,32,116,104,101,99,101,110,116,101,114,101,100,32,97,114,111,117,
-110,100,32,116,104,101,105,109,112,108,105,99,97,116,105,111,110,115,32,111,102,
-32,116,104,101,104,97,118,101,32,98,101,101,110,32,100,101,118,101,108,111,112,
-101,100,70,101,100,101,114,97,108,32,82,101,112,117,98,108,105,99,32,111,102,98,
-101,99,97,109,101,32,105,110,99,114,101,97,115,105,110,103,108,121,99,111,110,
-116,105,110,117,97,116,105,111,110,32,111,102,32,116,104,101,78,111,116,101,44,
-32,104,111,119,101,118,101,114,44,32,116,104,97,116,115,105,109,105,108,97,114,
-32,116,111,32,116,104,97,116,32,111,102,32,99,97,112,97,98,105,108,105,116,105,
-101,115,32,111,102,32,116,104,101,97,99,99,111,114,100,97,110,99,101,32,119,105,
-116,104,32,116,104,101,112,97,114,116,105,99,105,112,97,110,116,115,32,105,110,
-32,116,104,101,102,117,114,116,104,101,114,32,100,101,118,101,108,111,112,109,
-101,110,116,117,110,100,101,114,32,116,104,101,32,100,105,114,101,99,116,105,111
-,110,105,115,32,111,102,116,101,110,32,99,111,110,115,105,100,101,114,101,100,
-104,105,115,32,121,111,117,110,103,101,114,32,98,114,111,116,104,101,114,60,47,
-116,100,62,60,47,116,114,62,60,47,116,97,98,108,101,62,60,97,32,104,116,116,112,
-45,101,113,117,105,118,61,34,88,45,85,65,45,112,104,121,115,105,99,97,108,32,112
-,114,111,112,101,114,116,105,101,115,111,102,32,66,114,105,116,105,115,104,32,67
-,111,108,117,109,98,105,97,104,97,115,32,98,101,101,110,32,99,114,105,116,105,99
-,105,122,101,100,40,119,105,116,104,32,116,104,101,32,101,120,99,101,112,116,105
-,111,110,113,117,101,115,116,105,111,110,115,32,97,98,111,117,116,32,116,104,101
-,112,97,115,115,105,110,103,32,116,104,114,111,117,103,104,32,116,104,101,48,34,
-32,99,101,108,108,112,97,100,100,105,110,103,61,34,48,34,32,116,104,111,117,115,
-97,110,100,115,32,111,102,32,112,101,111,112,108,101,114,101,100,105,114,101,99,
-116,115,32,104,101,114,101,46,32,70,111,114,104,97,118,101,32,99,104,105,108,100
-,114,101,110,32,117,110,100,101,114,37,51,69,37,51,67,47,115,99,114,105,112,116,
-37,51,69,34,41,41,59,60,97,32,104,114,101,102,61,34,104,116,116,112,58,47,47,119
-,119,119,46,60,108,105,62,60,97,32,104,114,101,102,61,34,104,116,116,112,58,47,
-47,115,105,116,101,95,110,97,109,101,34,32,99,111,110,116,101,110,116,61,34,116,
-101,120,116,45,100,101,99,111,114,97,116,105,111,110,58,110,111,110,101,115,116,
-121,108,101,61,34,100,105,115,112,108,97,121,58,32,110,111,110,101,60,109,101,
-116,97,32,104,116,116,112,45,101,113,117,105,118,61,34,88,45,110,101,119,32,68,
-97,116,101,40,41,46,103,101,116,84,105,109,101,40,41,32,116,121,112,101,61,34,
-105,109,97,103,101,47,120,45,105,99,111,110,34,60,47,115,112,97,110,62,60,115,
-112,97,110,32,99,108,97,115,115,61,34,108,97,110,103,117,97,103,101,61,34,106,97
-,118,97,115,99,114,105,112,116,119,105,110,100,111,119,46,108,111,99,97,116,105,
-111,110,46,104,114,101,102,60,97,32,104,114,101,102,61,34,106,97,118,97,115,99,
-114,105,112,116,58,45,45,62,13,10,60,115,99,114,105,112,116,32,116,121,112,101,
-61,34,116,60,97,32,104,114,101,102,61,39,104,116,116,112,58,47,47,119,119,119,46
-,104,111,114,116,99,117,116,32,105,99,111,110,34,32,104,114,101,102,61,34,60,47,
-100,105,118,62,13,10,60,100,105,118,32,99,108,97,115,115,61,34,60,115,99,114,105
-,112,116,32,115,114,99,61,34,104,116,116,112,58,47,47,34,32,114,101,108,61,34,
-115,116,121,108,101,115,104,101,101,116,34,32,116,60,47,100,105,118,62,10,60,115
-,99,114,105,112,116,32,116,121,112,101,61,47,97,62,32,60,97,32,104,114,101,102,
-61,34,104,116,116,112,58,47,47,32,97,108,108,111,119,84,114,97,110,115,112,97,
-114,101,110,99,121,61,34,88,45,85,65,45,67,111,109,112,97,116,105,98,108,101,34,
-32,99,111,110,114,101,108,97,116,105,111,110,115,104,105,112,32,98,101,116,119,
-101,101,110,10,60,47,115,99,114,105,112,116,62,13,10,60,115,99,114,105,112,116,
-32,60,47,97,62,60,47,108,105,62,60,47,117,108,62,60,47,100,105,118,62,97,115,115
-,111,99,105,97,116,101,100,32,119,105,116,104,32,116,104,101,32,112,114,111,103,
-114,97,109,109,105,110,103,32,108,97,110,103,117,97,103,101,60,47,97,62,60,97,32
-,104,114,101,102,61,34,104,116,116,112,58,47,47,60,47,97,62,60,47,108,105,62,60,
-108,105,32,99,108,97,115,115,61,34,102,111,114,109,32,97,99,116,105,111,110,61,
-34,104,116,116,112,58,47,47,60,100,105,118,32,115,116,121,108,101,61,34,100,105,
-115,112,108,97,121,58,116,121,112,101,61,34,116,101,120,116,34,32,110,97,109,101
-,61,34,113,34,60,116,97,98,108,101,32,119,105,100,116,104,61,34,49,48,48,37,34,
-32,98,97,99,107,103,114,111,117,110,100,45,112,111,115,105,116,105,111,110,58,34
-,32,98,111,114,100,101,114,61,34,48,34,32,119,105,100,116,104,61,34,114,101,108,
-61,34,115,104,111,114,116,99,117,116,32,105,99,111,110,34,32,104,54,62,60,117,
-108,62,60,108,105,62,60,97,32,104,114,101,102,61,34,32,32,60,109,101,116,97,32,
-104,116,116,112,45,101,113,117,105,118,61,34,99,115,115,34,32,109,101,100,105,97
-,61,34,115,99,114,101,101,110,34,32,114,101,115,112,111,110,115,105,98,108,101,
-32,102,111,114,32,116,104,101,32,34,32,116,121,112,101,61,34,97,112,112,108,105,
-99,97,116,105,111,110,47,34,32,115,116,121,108,101,61,34,98,97,99,107,103,114,
-111,117,110,100,45,104,116,109,108,59,32,99,104,97,114,115,101,116,61,117,116,
-102,45,56,34,32,97,108,108,111,119,116,114,97,110,115,112,97,114,101,110,99,121,
-61,34,115,116,121,108,101,115,104,101,101,116,34,32,116,121,112,101,61,34,116,
-101,13,10,60,109,101,116,97,32,104,116,116,112,45,101,113,117,105,118,61,34,62,
-60,47,115,112,97,110,62,60,115,112,97,110,32,99,108,97,115,115,61,34,48,34,32,99
-,101,108,108,115,112,97,99,105,110,103,61,34,48,34,62,59,10,60,47,115,99,114,105
-,112,116,62,10,60,115,99,114,105,112,116,32,115,111,109,101,116,105,109,101,115,
-32,99,97,108,108,101,100,32,116,104,101,100,111,101,115,32,110,111,116,32,110,
-101,99,101,115,115,97,114,105,108,121,70,111,114,32,109,111,114,101,32,105,110,
-102,111,114,109,97,116,105,111,110,97,116,32,116,104,101,32,98,101,103,105,110,
-110,105,110,103,32,111,102,32,60,33,68,79,67,84,89,80,69,32,104,116,109,108,62,
-60,104,116,109,108,112,97,114,116,105,99,117,108,97,114,108,121,32,105,110,32,
-116,104,101,32,116,121,112,101,61,34,104,105,100,100,101,110,34,32,110,97,109,
-101,61,34,106,97,118,97,115,99,114,105,112,116,58,118,111,105,100,40,48,41,59,34
-,101,102,102,101,99,116,105,118,101,110,101,115,115,32,111,102,32,116,104,101,32
-,97,117,116,111,99,111,109,112,108,101,116,101,61,34,111,102,102,34,32,103,101,
-110,101,114,97,108,108,121,32,99,111,110,115,105,100,101,114,101,100,62,60,105,
-110,112,117,116,32,116,121,112,101,61,34,116,101,120,116,34,32,34,62,60,47,115,
-99,114,105,112,116,62,13,10,60,115,99,114,105,112,116,116,104,114,111,117,103,
-104,111,117,116,32,116,104,101,32,119,111,114,108,100,99,111,109,109,111,110,32,
-109,105,115,99,111,110,99,101,112,116,105,111,110,97,115,115,111,99,105,97,116,
-105,111,110,32,119,105,116,104,32,116,104,101,60,47,100,105,118,62,10,60,47,100,
-105,118,62,10,60,100,105,118,32,99,100,117,114,105,110,103,32,104,105,115,32,108
-,105,102,101,116,105,109,101,44,99,111,114,114,101,115,112,111,110,100,105,110,
-103,32,116,111,32,116,104,101,116,121,112,101,61,34,105,109,97,103,101,47,120,45
-,105,99,111,110,34,32,97,110,32,105,110,99,114,101,97,115,105,110,103,32,110,117
-,109,98,101,114,100,105,112,108,111,109,97,116,105,99,32,114,101,108,97,116,105,
-111,110,115,97,114,101,32,111,102,116,101,110,32,99,111,110,115,105,100,101,114,
-101,100,109,101,116,97,32,99,104,97,114,115,101,116,61,34,117,116,102,45,56,34,
-32,60,105,110,112,117,116,32,116,121,112,101,61,34,116,101,120,116,34,32,101,120
-,97,109,112,108,101,115,32,105,110,99,108,117,100,101,32,116,104,101,34,62,60,
-105,109,103,32,115,114,99,61,34,104,116,116,112,58,47,47,105,112,97,114,116,105,
-99,105,112,97,116,105,111,110,32,105,110,32,116,104,101,116,104,101,32,101,115,
-116,97,98,108,105,115,104,109,101,110,116,32,111,102,10,60,47,100,105,118,62,10,
-60,100,105,118,32,99,108,97,115,115,61,34,38,97,109,112,59,110,98,115,112,59,38,
-97,109,112,59,110,98,115,112,59,116,111,32,100,101,116,101,114,109,105,110,101,
-32,119,104,101,116,104,101,114,113,117,105,116,101,32,100,105,102,102,101,114,
-101,110,116,32,102,114,111,109,109,97,114,107,101,100,32,116,104,101,32,98,101,
-103,105,110,110,105,110,103,100,105,115,116,97,110,99,101,32,98,101,116,119,101,
-101,110,32,116,104,101,99,111,110,116,114,105,98,117,116,105,111,110,115,32,116,
-111,32,116,104,101,99,111,110,102,108,105,99,116,32,98,101,116,119,101,101,110,
-32,116,104,101,119,105,100,101,108,121,32,99,111,110,115,105,100,101,114,101,100
-,32,116,111,119,97,115,32,111,110,101,32,111,102,32,116,104,101,32,102,105,114,
-115,116,119,105,116,104,32,118,97,114,121,105,110,103,32,100,101,103,114,101,101
-,115,104,97,118,101,32,115,112,101,99,117,108,97,116,101,100,32,116,104,97,116,
-40,100,111,99,117,109,101,110,116,46,103,101,116,69,108,101,109,101,110,116,112,
-97,114,116,105,99,105,112,97,116,105,110,103,32,105,110,32,116,104,101,111,114,
-105,103,105,110,97,108,108,121,32,100,101,118,101,108,111,112,101,100,101,116,97
-,32,99,104,97,114,115,101,116,61,34,117,116,102,45,56,34,62,32,116,121,112,101,
-61,34,116,101,120,116,47,99,115,115,34,32,47,62,10,105,110,116,101,114,99,104,97
-,110,103,101,97,98,108,121,32,119,105,116,104,109,111,114,101,32,99,108,111,115,
-101,108,121,32,114,101,108,97,116,101,100,115,111,99,105,97,108,32,97,110,100,32
-,112,111,108,105,116,105,99,97,108,116,104,97,116,32,119,111,117,108,100,32,111,
-116,104,101,114,119,105,115,101,112,101,114,112,101,110,100,105,99,117,108,97,
-114,32,116,111,32,116,104,101,115,116,121,108,101,32,116,121,112,101,61,34,116,
-101,120,116,47,99,115,115,116,121,112,101,61,34,115,117,98,109,105,116,34,32,110
-,97,109,101,61,34,102,97,109,105,108,105,101,115,32,114,101,115,105,100,105,110,
-103,32,105,110,100,101,118,101,108,111,112,105,110,103,32,99,111,117,110,116,114
-,105,101,115,99,111,109,112,117,116,101,114,32,112,114,111,103,114,97,109,109,
-105,110,103,101,99,111,110,111,109,105,99,32,100,101,118,101,108,111,112,109,101
-,110,116,100,101,116,101,114,109,105,110,97,116,105,111,110,32,111,102,32,116,
-104,101,102,111,114,32,109,111,114,101,32,105,110,102,111,114,109,97,116,105,111
-,110,111,110,32,115,101,118,101,114,97,108,32,111,99,99,97,115,105,111,110,115,
-112,111,114,116,117,103,117,195,170,115,32,40,69,117,114,111,112,101,117,41,208,
-163,208,186,209,128,208,176,209,151,208,189,209,129,209,140,208,186,208,176,209,
-131,208,186,209,128,208,176,209,151,208,189,209,129,209,140,208,186,208,176,208,
-160,208,190,209,129,209,129,208,184,208,185,209,129,208,186,208,190,208,185,208,
-188,208,176,209,130,208,181,209,128,208,184,208,176,208,187,208,190,208,178,208,
-184,208,189,209,132,208,190,209,128,208,188,208,176,209,134,208,184,208,184,209,
-131,208,191,209,128,208,176,208,178,208,187,208,181,208,189,208,184,209,143,208,
-189,208,181,208,190,208,177,209,133,208,190,208,180,208,184,208,188,208,190,208,
-184,208,189,209,132,208,190,209,128,208,188,208,176,209,134,208,184,209,143,208,
-152,208,189,209,132,208,190,209,128,208,188,208,176,209,134,208,184,209,143,208,
-160,208,181,209,129,208,191,209,131,208,177,208,187,208,184,208,186,208,184,208,
-186,208,190,208,187,208,184,209,135,208,181,209,129,209,130,208,178,208,190,208,
-184,208,189,209,132,208,190,209,128,208,188,208,176,209,134,208,184,209,142,209,
-130,208,181,209,128,209,128,208,184,209,130,208,190,209,128,208,184,208,184,208,
-180,208,190,209,129,209,130,208,176,209,130,208,190,209,135,208,189,208,190,216,
-167,217,132,217,133,216,170,217,136,216,167,216,172,216,175,217,136,217,134,216,
-167,217,132,216,167,216,180,216,170,216,177,216,167,217,131,216,167,216,170,216,
-167,217,132,216,167,217,130,216,170,216,177,216,167,216,173,216,167,216,170,104,
-116,109,108,59,32,99,104,97,114,115,101,116,61,85,84,70,45,56,34,32,115,101,116,
-84,105,109,101,111,117,116,40,102,117,110,99,116,105,111,110,40,41,100,105,115,
-112,108,97,121,58,105,110,108,105,110,101,45,98,108,111,99,107,59,60,105,110,112
-,117,116,32,116,121,112,101,61,34,115,117,98,109,105,116,34,32,116,121,112,101,
-32,61,32,39,116,101,120,116,47,106,97,118,97,115,99,114,105,60,105,109,103,32,
-115,114,99,61,34,104,116,116,112,58,47,47,119,119,119,46,34,32,34,104,116,116,
-112,58,47,47,119,119,119,46,119,51,46,111,114,103,47,115,104,111,114,116,99,117,
-116,32,105,99,111,110,34,32,104,114,101,102,61,34,34,32,97,117,116,111,99,111,
-109,112,108,101,116,101,61,34,111,102,102,34,32,60,47,97,62,60,47,100,105,118,62
-,60,100,105,118,32,99,108,97,115,115,61,60,47,97,62,60,47,108,105,62,10,60,108,
-105,32,99,108,97,115,115,61,34,99,115,115,34,32,116,121,112,101,61,34,116,101,
-120,116,47,99,115,115,34,32,60,102,111,114,109,32,97,99,116,105,111,110,61,34,
-104,116,116,112,58,47,47,120,116,47,99,115,115,34,32,104,114,101,102,61,34,104,
-116,116,112,58,47,47,108,105,110,107,32,114,101,108,61,34,97,108,116,101,114,110
-,97,116,101,34,32,13,10,60,115,99,114,105,112,116,32,116,121,112,101,61,34,116,
-101,120,116,47,32,111,110,99,108,105,99,107,61,34,106,97,118,97,115,99,114,105,
-112,116,58,40,110,101,119,32,68,97,116,101,41,46,103,101,116,84,105,109,101,40,
-41,125,104,101,105,103,104,116,61,34,49,34,32,119,105,100,116,104,61,34,49,34,32
-,80,101,111,112,108,101,39,115,32,82,101,112,117,98,108,105,99,32,111,102,32,32,
-60,97,32,104,114,101,102,61,34,104,116,116,112,58,47,47,119,119,119,46,116,101,
-120,116,45,100,101,99,111,114,97,116,105,111,110,58,117,110,100,101,114,116,104,
-101,32,98,101,103,105,110,110,105,110,103,32,111,102,32,116,104,101,32,60,47,100
-,105,118,62,10,60,47,100,105,118,62,10,60,47,100,105,118,62,10,101,115,116,97,98
-,108,105,115,104,109,101,110,116,32,111,102,32,116,104,101,32,60,47,100,105,118,
-62,60,47,100,105,118,62,60,47,100,105,118,62,60,47,100,35,118,105,101,119,112,
-111,114,116,123,109,105,110,45,104,101,105,103,104,116,58,10,60,115,99,114,105,
-112,116,32,115,114,99,61,34,104,116,116,112,58,47,47,111,112,116,105,111,110,62,
-60,111,112,116,105,111,110,32,118,97,108,117,101,61,111,102,116,101,110,32,114,
-101,102,101,114,114,101,100,32,116,111,32,97,115,32,47,111,112,116,105,111,110,
-62,10,60,111,112,116,105,111,110,32,118,97,108,117,60,33,68,79,67,84,89,80,69,32
-,104,116,109,108,62,10,60,33,45,45,91,73,110,116,101,114,110,97,116,105,111,110,
-97,108,32,65,105,114,112,111,114,116,62,10,60,97,32,104,114,101,102,61,34,104,
-116,116,112,58,47,47,119,119,119,60,47,97,62,60,97,32,104,114,101,102,61,34,104,
-116,116,112,58,47,47,119,224,184,160,224,184,178,224,184,169,224,184,178,224,185
-,132,224,184,151,224,184,162,225,131,165,225,131,144,225,131,160,225,131,151,225
-,131,163,225,131,154,225,131,152,230,173,163,233,171,148,228,184,173,230,150,135
-,32,40,231,185,129,233,171,148,41,224,164,168,224,164,191,224,164,176,224,165,
-141,224,164,166,224,165,135,224,164,182,224,164,161,224,164,190,224,164,137,224,
-164,168,224,164,178,224,165,139,224,164,161,224,164,149,224,165,141,224,164,183,
-224,165,135,224,164,164,224,165,141,224,164,176,224,164,156,224,164,190,224,164,
-168,224,164,149,224,164,190,224,164,176,224,165,128,224,164,184,224,164,130,224,
-164,172,224,164,130,224,164,167,224,164,191,224,164,164,224,164,184,224,165,141,
-224,164,165,224,164,190,224,164,170,224,164,168,224,164,190,224,164,184,224,165,
-141,224,164,181,224,165,128,224,164,149,224,164,190,224,164,176,224,164,184,224,
-164,130,224,164,184,224,165,141,224,164,149,224,164,176,224,164,163,224,164,184,
-224,164,190,224,164,174,224,164,151,224,165,141,224,164,176,224,165,128,224,164,
-154,224,164,191,224,164,159,224,165,141,224,164,160,224,165,139,224,164,130,224,
-164,181,224,164,191,224,164,156,224,165,141,224,164,158,224,164,190,224,164,168,
-224,164,133,224,164,174,224,165,135,224,164,176,224,164,191,224,164,149,224,164,
-190,224,164,181,224,164,191,224,164,173,224,164,191,224,164,168,224,165,141,224,
-164,168,224,164,151,224,164,190,224,164,161,224,164,191,224,164,175,224,164,190,
-224,164,129,224,164,149,224,165,141,224,164,175,224,165,139,224,164,130,224,164,
-149,224,164,191,224,164,184,224,165,129,224,164,176,224,164,149,224,165,141,224,
-164,183,224,164,190,224,164,170,224,164,185,224,165,129,224,164,129,224,164,154,
-224,164,164,224,165,128,224,164,170,224,165,141,224,164,176,224,164,172,224,164,
-130,224,164,167,224,164,168,224,164,159,224,164,191,224,164,170,224,165,141,224,
-164,170,224,164,163,224,165,128,224,164,149,224,165,141,224,164,176,224,164,191,
-224,164,149,224,165,135,224,164,159,224,164,170,224,165,141,224,164,176,224,164,
-190,224,164,176,224,164,130,224,164,173,224,164,170,224,165,141,224,164,176,224,
-164,190,224,164,170,224,165,141,224,164,164,224,164,174,224,164,190,224,164,178,
-224,164,191,224,164,149,224,165,139,224,164,130,224,164,176,224,164,171,224,164,
-188,224,165,141,224,164,164,224,164,190,224,164,176,224,164,168,224,164,191,224,
-164,176,224,165,141,224,164,174,224,164,190,224,164,163,224,164,178,224,164,191,
-224,164,174,224,164,191,224,164,159,224,165,135,224,164,161,100,101,115,99,114,
-105,112,116,105,111,110,34,32,99,111,110,116,101,110,116,61,34,100,111,99,117,
-109,101,110,116,46,108,111,99,97,116,105,111,110,46,112,114,111,116,46,103,101,
-116,69,108,101,109,101,110,116,115,66,121,84,97,103,78,97,109,101,40,60,33,68,79
-,67,84,89,80,69,32,104,116,109,108,62,10,60,104,116,109,108,32,60,109,101,116,97
-,32,99,104,97,114,115,101,116,61,34,117,116,102,45,56,34,62,58,117,114,108,34,32
-,99,111,110,116,101,110,116,61,34,104,116,116,112,58,47,47,46,99,115,115,34,32,
-114,101,108,61,34,115,116,121,108,101,115,104,101,101,116,34,115,116,121,108,101
-,32,116,121,112,101,61,34,116,101,120,116,47,99,115,115,34,62,116,121,112,101,61
-,34,116,101,120,116,47,99,115,115,34,32,104,114,101,102,61,34,119,51,46,111,114,
-103,47,49,57,57,57,47,120,104,116,109,108,34,32,120,109,108,116,121,112,101,61,
-34,116,101,120,116,47,106,97,118,97,115,99,114,105,112,116,34,32,109,101,116,104
-,111,100,61,34,103,101,116,34,32,97,99,116,105,111,110,61,34,108,105,110,107,32,
-114,101,108,61,34,115,116,121,108,101,115,104,101,101,116,34,32,32,61,32,100,111
-,99,117,109,101,110,116,46,103,101,116,69,108,101,109,101,110,116,116,121,112,
-101,61,34,105,109,97,103,101,47,120,45,105,99,111,110,34,32,47,62,99,101,108,108
-,112,97,100,100,105,110,103,61,34,48,34,32,99,101,108,108,115,112,46,99,115,115,
-34,32,116,121,112,101,61,34,116,101,120,116,47,99,115,115,34,32,60,47,97,62,60,
-47,108,105,62,60,108,105,62,60,97,32,104,114,101,102,61,34,34,32,119,105,100,116
-,104,61,34,49,34,32,104,101,105,103,104,116,61,34,49,34,34,62,60,97,32,104,114,
-101,102,61,34,104,116,116,112,58,47,47,119,119,119,46,115,116,121,108,101,61,34,
-100,105,115,112,108,97,121,58,110,111,110,101,59,34,62,97,108,116,101,114,110,97
-,116,101,34,32,116,121,112,101,61,34,97,112,112,108,105,45,47,47,87,51,67,47,47,
-68,84,68,32,88,72,84,77,76,32,49,46,48,32,101,108,108,115,112,97,99,105,110,103,
-61,34,48,34,32,99,101,108,108,112,97,100,32,116,121,112,101,61,34,104,105,100,
-100,101,110,34,32,118,97,108,117,101,61,34,47,97,62,38,110,98,115,112,59,60,115,
-112,97,110,32,114,111,108,101,61,34,115,10,60,105,110,112,117,116,32,116,121,112
-,101,61,34,104,105,100,100,101,110,34,32,108,97,110,103,117,97,103,101,61,34,74,
-97,118,97,83,99,114,105,112,116,34,32,32,100,111,99,117,109,101,110,116,46,103,
-101,116,69,108,101,109,101,110,116,115,66,103,61,34,48,34,32,99,101,108,108,115,
-112,97,99,105,110,103,61,34,48,34,32,121,112,101,61,34,116,101,120,116,47,99,115
-,115,34,32,109,101,100,105,97,61,34,116,121,112,101,61,39,116,101,120,116,47,106
-,97,118,97,115,99,114,105,112,116,39,119,105,116,104,32,116,104,101,32,101,120,
-99,101,112,116,105,111,110,32,111,102,32,121,112,101,61,34,116,101,120,116,47,99
-,115,115,34,32,114,101,108,61,34,115,116,32,104,101,105,103,104,116,61,34,49,34,
-32,119,105,100,116,104,61,34,49,34,32,61,39,43,101,110,99,111,100,101,85,82,73,
-67,111,109,112,111,110,101,110,116,40,60,108,105,110,107,32,114,101,108,61,34,97
-,108,116,101,114,110,97,116,101,34,32,10,98,111,100,121,44,32,116,114,44,32,105,
-110,112,117,116,44,32,116,101,120,116,109,101,116,97,32,110,97,109,101,61,34,114
-,111,98,111,116,115,34,32,99,111,110,109,101,116,104,111,100,61,34,112,111,115,
-116,34,32,97,99,116,105,111,110,61,34,62,10,60,97,32,104,114,101,102,61,34,104,
-116,116,112,58,47,47,119,119,119,46,99,115,115,34,32,114,101,108,61,34,115,116,
-121,108,101,115,104,101,101,116,34,32,60,47,100,105,118,62,60,47,100,105,118,62,
-60,100,105,118,32,99,108,97,115,115,108,97,110,103,117,97,103,101,61,34,106,97,
-118,97,115,99,114,105,112,116,34,62,97,114,105,97,45,104,105,100,100,101,110,61,
-34,116,114,117,101,34,62,194,183,60,114,105,112,116,34,32,116,121,112,101,61,34,
-116,101,120,116,47,106,97,118,97,115,108,61,48,59,125,41,40,41,59,10,40,102,117,
-110,99,116,105,111,110,40,41,123,98,97,99,107,103,114,111,117,110,100,45,105,109
-,97,103,101,58,32,117,114,108,40,47,97,62,60,47,108,105,62,60,108,105,62,60,97,
-32,104,114,101,102,61,34,104,9,9,60,108,105,62,60,97,32,104,114,101,102,61,34,
-104,116,116,112,58,47,47,97,116,111,114,34,32,97,114,105,97,45,104,105,100,100,
-101,110,61,34,116,114,117,62,32,60,97,32,104,114,101,102,61,34,104,116,116,112,
-58,47,47,119,119,119,46,108,97,110,103,117,97,103,101,61,34,106,97,118,97,115,99
-,114,105,112,116,34,32,47,111,112,116,105,111,110,62,10,60,111,112,116,105,111,
-110,32,118,97,108,117,101,47,100,105,118,62,60,47,100,105,118,62,60,100,105,118,
-32,99,108,97,115,115,61,114,97,116,111,114,34,32,97,114,105,97,45,104,105,100,
-100,101,110,61,34,116,114,101,61,40,110,101,119,32,68,97,116,101,41,46,103,101,
-116,84,105,109,101,40,41,112,111,114,116,117,103,117,195,170,115,32,40,100,111,
-32,66,114,97,115,105,108,41,208,190,209,128,208,179,208,176,208,189,208,184,208,
-183,208,176,209,134,208,184,208,184,208,178,208,190,208,183,208,188,208,190,208,
-182,208,189,208,190,209,129,209,130,209,140,208,190,208,177,209,128,208,176,208,
-183,208,190,208,178,208,176,208,189,208,184,209,143,209,128,208,181,208,179,208,
-184,209,129,209,130,209,128,208,176,209,134,208,184,208,184,208,178,208,190,208,
-183,208,188,208,190,208,182,208,189,208,190,209,129,209,130,208,184,208,190,208,
-177,209,143,208,183,208,176,209,130,208,181,208,187,209,140,208,189,208,176,60,
-33,68,79,67,84,89,80,69,32,104,116,109,108,32,80,85,66,76,73,67,32,34,110,116,45
-,84,121,112,101,34,32,99,111,110,116,101,110,116,61,34,116,101,120,116,47,60,109
-,101,116,97,32,104,116,116,112,45,101,113,117,105,118,61,34,67,111,110,116,101,
-114,97,110,115,105,116,105,111,110,97,108,47,47,69,78,34,32,34,104,116,116,112,
-58,60,104,116,109,108,32,120,109,108,110,115,61,34,104,116,116,112,58,47,47,119,
-119,119,45,47,47,87,51,67,47,47,68,84,68,32,88,72,84,77,76,32,49,46,48,32,84,68,
-84,68,47,120,104,116,109,108,49,45,116,114,97,110,115,105,116,105,111,110,97,108
-,47,47,119,119,119,46,119,51,46,111,114,103,47,84,82,47,120,104,116,109,108,49,
-47,112,101,32,61,32,39,116,101,120,116,47,106,97,118,97,115,99,114,105,112,116,
-39,59,60,109,101,116,97,32,110,97,109,101,61,34,100,101,115,99,114,105,112,116,
-105,111,110,112,97,114,101,110,116,78,111,100,101,46,105,110,115,101,114,116,66,
-101,102,111,114,101,60,105,110,112,117,116,32,116,121,112,101,61,34,104,105,100,
-100,101,110,34,32,110,97,106,115,34,32,116,121,112,101,61,34,116,101,120,116,47,
-106,97,118,97,115,99,114,105,40,100,111,99,117,109,101,110,116,41,46,114,101,97,
-100,121,40,102,117,110,99,116,105,115,99,114,105,112,116,32,116,121,112,101,61,
-34,116,101,120,116,47,106,97,118,97,115,105,109,97,103,101,34,32,99,111,110,116,
-101,110,116,61,34,104,116,116,112,58,47,47,85,65,45,67,111,109,112,97,116,105,98
-,108,101,34,32,99,111,110,116,101,110,116,61,116,109,108,59,32,99,104,97,114,115
-,101,116,61,117,116,102,45,56,34,32,47,62,10,108,105,110,107,32,114,101,108,61,
-34,115,104,111,114,116,99,117,116,32,105,99,111,110,60,108,105,110,107,32,114,
-101,108,61,34,115,116,121,108,101,115,104,101,101,116,34,32,60,47,115,99,114,105
-,112,116,62,10,60,115,99,114,105,112,116,32,116,121,112,101,61,61,32,100,111,99,
-117,109,101,110,116,46,99,114,101,97,116,101,69,108,101,109,101,110,60,97,32,116
-,97,114,103,101,116,61,34,95,98,108,97,110,107,34,32,104,114,101,102,61,32,100,
-111,99,117,109,101,110,116,46,103,101,116,69,108,101,109,101,110,116,115,66,105,
-110,112,117,116,32,116,121,112,101,61,34,116,101,120,116,34,32,110,97,109,101,61
-,97,46,116,121,112,101,32,61,32,39,116,101,120,116,47,106,97,118,97,115,99,114,
-105,110,112,117,116,32,116,121,112,101,61,34,104,105,100,100,101,110,34,32,110,
-97,109,101,104,116,109,108,59,32,99,104,97,114,115,101,116,61,117,116,102,45,56,
-34,32,47,62,100,116,100,34,62,10,60,104,116,109,108,32,120,109,108,110,115,61,34
-,104,116,116,112,45,47,47,87,51,67,47,47,68,84,68,32,72,84,77,76,32,52,46,48,49,
-32,84,101,110,116,115,66,121,84,97,103,78,97,109,101,40,39,115,99,114,105,112,
-116,39,41,105,110,112,117,116,32,116,121,112,101,61,34,104,105,100,100,101,110,
-34,32,110,97,109,60,115,99,114,105,112,116,32,116,121,112,101,61,34,116,101,120,
-116,47,106,97,118,97,115,34,32,115,116,121,108,101,61,34,100,105,115,112,108,97,
-121,58,110,111,110,101,59,34,62,100,111,99,117,109,101,110,116,46,103,101,116,69
-,108,101,109,101,110,116,66,121,73,100,40,61,100,111,99,117,109,101,110,116,46,
-99,114,101,97,116,101,69,108,101,109,101,110,116,40,39,32,116,121,112,101,61,39,
-116,101,120,116,47,106,97,118,97,115,99,114,105,112,116,39,105,110,112,117,116,
-32,116,121,112,101,61,34,116,101,120,116,34,32,110,97,109,101,61,34,100,46,103,
-101,116,69,108,101,109,101,110,116,115,66,121,84,97,103,78,97,109,101,40,115,110
-,105,99,97,108,34,32,104,114,101,102,61,34,104,116,116,112,58,47,47,119,119,119,
-46,67,47,47,68,84,68,32,72,84,77,76,32,52,46,48,49,32,84,114,97,110,115,105,116,
-60,115,116,121,108,101,32,116,121,112,101,61,34,116,101,120,116,47,99,115,115,34
-,62,10,10,60,115,116,121,108,101,32,116,121,112,101,61,34,116,101,120,116,47,99,
-115,115,34,62,105,111,110,97,108,46,100,116,100,34,62,10,60,104,116,109,108,32,
-120,109,108,110,115,61,104,116,116,112,45,101,113,117,105,118,61,34,67,111,110,
-116,101,110,116,45,84,121,112,101,100,105,110,103,61,34,48,34,32,99,101,108,108,
-115,112,97,99,105,110,103,61,34,48,34,104,116,109,108,59,32,99,104,97,114,115,
-101,116,61,117,116,102,45,56,34,32,47,62,10,32,115,116,121,108,101,61,34,100,105
-,115,112,108,97,121,58,110,111,110,101,59,34,62,60,60,108,105,62,60,97,32,104,
-114,101,102,61,34,104,116,116,112,58,47,47,119,119,119,46,32,116,121,112,101,61,
-39,116,101,120,116,47,106,97,118,97,115,99,114,105,112,116,39,62,208,180,208,181
-,209,143,209,130,208,181,208,187,209,140,208,189,208,190,209,129,209,130,208,184
-,209,129,208,190,208,190,209,130,208,178,208,181,209,130,209,129,209,130,208,178
-,208,184,208,184,208,191,209,128,208,190,208,184,208,183,208,178,208,190,208,180
-,209,129,209,130,208,178,208,176,208,177,208,181,208,183,208,190,208,191,208,176
-,209,129,208,189,208,190,209,129,209,130,208,184,224,164,170,224,165,129,224,164
-,184,224,165,141,224,164,164,224,164,191,224,164,149,224,164,190,224,164,149,224
-,164,190,224,164,130,224,164,151,224,165,141,224,164,176,224,165,135,224,164,184
-,224,164,137,224,164,168,224,165,141,224,164,185,224,165,139,224,164,130,224,164
-,168,224,165,135,224,164,181,224,164,191,224,164,167,224,164,190,224,164,168,224
-,164,184,224,164,173,224,164,190,224,164,171,224,164,191,224,164,149,224,165,141
-,224,164,184,224,164,191,224,164,130,224,164,151,224,164,184,224,165,129,224,164
-,176,224,164,149,224,165,141,224,164,183,224,164,191,224,164,164,224,164,149,224
-,165,137,224,164,170,224,165,128,224,164,176,224,164,190,224,164,135,224,164,159
-,224,164,181,224,164,191,224,164,156,224,165,141,224,164,158,224,164,190,224,164
-,170,224,164,168,224,164,149,224,164,190,224,164,176,224,165,141,224,164,176,224
-,164,181,224,164,190,224,164,136,224,164,184,224,164,149,224,165,141,224,164,176
-,224,164,191,224,164,175,224,164,164,224,164,190
-}
-;
-#endif /* !BROTLI_EXTERNAL_DICTIONARY_DATA */
-
-static BrotliDictionary kBrotliDictionary = {
- /* size_bits_by_length */
- {
- 0, 0, 0, 0, 10, 10, 11, 11,
- 10, 10, 10, 10, 10, 9, 9, 8,
- 7, 7, 8, 7, 7, 6, 6, 5,
- 5, 0, 0, 0, 0, 0, 0, 0
- },
-
- /* offsets_by_length */
- {
- 0, 0, 0, 0, 0, 4096, 9216, 21504,
- 35840, 44032, 53248, 63488, 74752, 87040, 93696, 100864,
- 104704, 106752, 108928, 113536, 115968, 118528, 119872, 121280,
- 122016, 122784, 122784, 122784, 122784, 122784, 122784, 122784
- },
-
- /* data_size == sizeof(kBrotliDictionaryData) */
- 122784,
-
- /* data */
-#if defined(BROTLI_EXTERNAL_DICTIONARY_DATA)
- NULL
-#else
- kBrotliDictionaryData
-#endif
-};
-
-const BrotliDictionary* BrotliGetDictionary() {
- return &kBrotliDictionary;
-}
-
-void BrotliSetDictionaryData(const uint8_t* data) {
- if (!!data && !kBrotliDictionary.data) {
- kBrotliDictionary.data = data;
- }
-}
-
-#if defined(__cplusplus) || defined(c_plusplus)
-} /* extern "C" */
-#endif
diff --git a/MdeModulePkg/Library/BrotliCustomDecompressLib/common/transform.c b/MdeModulePkg/Library/BrotliCustomDecompressLib/common/transform.c
deleted file mode 100644
index fbe3dde6a6b5..000000000000
--- a/MdeModulePkg/Library/BrotliCustomDecompressLib/common/transform.c
+++ /dev/null
@@ -1,235 +0,0 @@
-/* Copyright 2013 Google Inc. All Rights Reserved.
-
- Distributed under MIT license.
- See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
-*/
-
-#include "./transform.h"
-
-#if defined(__cplusplus) || defined(c_plusplus)
-extern "C" {
-#endif
-
-/* RFC 7932 transforms string data */
-static const char kPrefixSuffix[] =
- "\1 \2, \10 of the \4 of \2s \1.\5 and \4 "
-/* 0x _0 _2 __5 _E _3 _6 _8 _E */
- "in \1\"\4 to \2\">\1\n\2. \1]\5 for \3 a \6 "
-/* 2x _3_ _5 _A_ _D_ _F _2 _4 _A _E */
- "that \1\'\6 with \6 from \4 by \1(\6. T"
-/* 4x _5_ _7 _E _5 _A _C */
- "he \4 on \4 as \4 is \4ing \2\n\t\1:\3ed "
-/* 6x _3 _8 _D _2 _7_ _ _A _C */
- "\2=\"\4 at \3ly \1,\2=\'\5.com/\7. This \5"
-/* 8x _0 _ _3 _8 _C _E _ _1 _7 _F */
- " not \3er \3al \4ful \4ive \5less \4es"
-/* Ax _5 _9 _D _2 _7 _D */
- "t \4ize \2\xc2\xa0\4ous \5 the \2e \0";
-/* Cx _2 _7___ ___ _A _F _5 _8 */
-
-static const uint16_t kPrefixSuffixMap[50] = {
- 0x00, 0x02, 0x05, 0x0E, 0x13, 0x16, 0x18, 0x1E, 0x23, 0x25,
- 0x2A, 0x2D, 0x2F, 0x32, 0x34, 0x3A, 0x3E, 0x45, 0x47, 0x4E,
- 0x55, 0x5A, 0x5C, 0x63, 0x68, 0x6D, 0x72, 0x77, 0x7A, 0x7C,
- 0x80, 0x83, 0x88, 0x8C, 0x8E, 0x91, 0x97, 0x9F, 0xA5, 0xA9,
- 0xAD, 0xB2, 0xB7, 0xBD, 0xC2, 0xC7, 0xCA, 0xCF, 0xD5, 0xD8
-};
-
-/* RFC 7932 transforms */
-static const uint8_t kTransformsData[] = {
- 49, BROTLI_TRANSFORM_IDENTITY, 49,
- 49, BROTLI_TRANSFORM_IDENTITY, 0,
- 0, BROTLI_TRANSFORM_IDENTITY, 0,
- 49, BROTLI_TRANSFORM_OMIT_FIRST_1, 49,
- 49, BROTLI_TRANSFORM_UPPERCASE_FIRST, 0,
- 49, BROTLI_TRANSFORM_IDENTITY, 47,
- 0, BROTLI_TRANSFORM_IDENTITY, 49,
- 4, BROTLI_TRANSFORM_IDENTITY, 0,
- 49, BROTLI_TRANSFORM_IDENTITY, 3,
- 49, BROTLI_TRANSFORM_UPPERCASE_FIRST, 49,
- 49, BROTLI_TRANSFORM_IDENTITY, 6,
- 49, BROTLI_TRANSFORM_OMIT_FIRST_2, 49,
- 49, BROTLI_TRANSFORM_OMIT_LAST_1, 49,
- 1, BROTLI_TRANSFORM_IDENTITY, 0,
- 49, BROTLI_TRANSFORM_IDENTITY, 1,
- 0, BROTLI_TRANSFORM_UPPERCASE_FIRST, 0,
- 49, BROTLI_TRANSFORM_IDENTITY, 7,
- 49, BROTLI_TRANSFORM_IDENTITY, 9,
- 48, BROTLI_TRANSFORM_IDENTITY, 0,
- 49, BROTLI_TRANSFORM_IDENTITY, 8,
- 49, BROTLI_TRANSFORM_IDENTITY, 5,
- 49, BROTLI_TRANSFORM_IDENTITY, 10,
- 49, BROTLI_TRANSFORM_IDENTITY, 11,
- 49, BROTLI_TRANSFORM_OMIT_LAST_3, 49,
- 49, BROTLI_TRANSFORM_IDENTITY, 13,
- 49, BROTLI_TRANSFORM_IDENTITY, 14,
- 49, BROTLI_TRANSFORM_OMIT_FIRST_3, 49,
- 49, BROTLI_TRANSFORM_OMIT_LAST_2, 49,
- 49, BROTLI_TRANSFORM_IDENTITY, 15,
- 49, BROTLI_TRANSFORM_IDENTITY, 16,
- 0, BROTLI_TRANSFORM_UPPERCASE_FIRST, 49,
- 49, BROTLI_TRANSFORM_IDENTITY, 12,
- 5, BROTLI_TRANSFORM_IDENTITY, 49,
- 0, BROTLI_TRANSFORM_IDENTITY, 1,
- 49, BROTLI_TRANSFORM_OMIT_FIRST_4, 49,
- 49, BROTLI_TRANSFORM_IDENTITY, 18,
- 49, BROTLI_TRANSFORM_IDENTITY, 17,
- 49, BROTLI_TRANSFORM_IDENTITY, 19,
- 49, BROTLI_TRANSFORM_IDENTITY, 20,
- 49, BROTLI_TRANSFORM_OMIT_FIRST_5, 49,
- 49, BROTLI_TRANSFORM_OMIT_FIRST_6, 49,
- 47, BROTLI_TRANSFORM_IDENTITY, 49,
- 49, BROTLI_TRANSFORM_OMIT_LAST_4, 49,
- 49, BROTLI_TRANSFORM_IDENTITY, 22,
- 49, BROTLI_TRANSFORM_UPPERCASE_ALL, 49,
- 49, BROTLI_TRANSFORM_IDENTITY, 23,
- 49, BROTLI_TRANSFORM_IDENTITY, 24,
- 49, BROTLI_TRANSFORM_IDENTITY, 25,
- 49, BROTLI_TRANSFORM_OMIT_LAST_7, 49,
- 49, BROTLI_TRANSFORM_OMIT_LAST_1, 26,
- 49, BROTLI_TRANSFORM_IDENTITY, 27,
- 49, BROTLI_TRANSFORM_IDENTITY, 28,
- 0, BROTLI_TRANSFORM_IDENTITY, 12,
- 49, BROTLI_TRANSFORM_IDENTITY, 29,
- 49, BROTLI_TRANSFORM_OMIT_FIRST_9, 49,
- 49, BROTLI_TRANSFORM_OMIT_FIRST_7, 49,
- 49, BROTLI_TRANSFORM_OMIT_LAST_6, 49,
- 49, BROTLI_TRANSFORM_IDENTITY, 21,
- 49, BROTLI_TRANSFORM_UPPERCASE_FIRST, 1,
- 49, BROTLI_TRANSFORM_OMIT_LAST_8, 49,
- 49, BROTLI_TRANSFORM_IDENTITY, 31,
- 49, BROTLI_TRANSFORM_IDENTITY, 32,
- 47, BROTLI_TRANSFORM_IDENTITY, 3,
- 49, BROTLI_TRANSFORM_OMIT_LAST_5, 49,
- 49, BROTLI_TRANSFORM_OMIT_LAST_9, 49,
- 0, BROTLI_TRANSFORM_UPPERCASE_FIRST, 1,
- 49, BROTLI_TRANSFORM_UPPERCASE_FIRST, 8,
- 5, BROTLI_TRANSFORM_IDENTITY, 21,
- 49, BROTLI_TRANSFORM_UPPERCASE_ALL, 0,
- 49, BROTLI_TRANSFORM_UPPERCASE_FIRST, 10,
- 49, BROTLI_TRANSFORM_IDENTITY, 30,
- 0, BROTLI_TRANSFORM_IDENTITY, 5,
- 35, BROTLI_TRANSFORM_IDENTITY, 49,
- 47, BROTLI_TRANSFORM_IDENTITY, 2,
- 49, BROTLI_TRANSFORM_UPPERCASE_FIRST, 17,
- 49, BROTLI_TRANSFORM_IDENTITY, 36,
- 49, BROTLI_TRANSFORM_IDENTITY, 33,
- 5, BROTLI_TRANSFORM_IDENTITY, 0,
- 49, BROTLI_TRANSFORM_UPPERCASE_FIRST, 21,
- 49, BROTLI_TRANSFORM_UPPERCASE_FIRST, 5,
- 49, BROTLI_TRANSFORM_IDENTITY, 37,
- 0, BROTLI_TRANSFORM_IDENTITY, 30,
- 49, BROTLI_TRANSFORM_IDENTITY, 38,
- 0, BROTLI_TRANSFORM_UPPERCASE_ALL, 0,
- 49, BROTLI_TRANSFORM_IDENTITY, 39,
- 0, BROTLI_TRANSFORM_UPPERCASE_ALL, 49,
- 49, BROTLI_TRANSFORM_IDENTITY, 34,
- 49, BROTLI_TRANSFORM_UPPERCASE_ALL, 8,
- 49, BROTLI_TRANSFORM_UPPERCASE_FIRST, 12,
- 0, BROTLI_TRANSFORM_IDENTITY, 21,
- 49, BROTLI_TRANSFORM_IDENTITY, 40,
- 0, BROTLI_TRANSFORM_UPPERCASE_FIRST, 12,
- 49, BROTLI_TRANSFORM_IDENTITY, 41,
- 49, BROTLI_TRANSFORM_IDENTITY, 42,
- 49, BROTLI_TRANSFORM_UPPERCASE_ALL, 17,
- 49, BROTLI_TRANSFORM_IDENTITY, 43,
- 0, BROTLI_TRANSFORM_UPPERCASE_FIRST, 5,
- 49, BROTLI_TRANSFORM_UPPERCASE_ALL, 10,
- 0, BROTLI_TRANSFORM_IDENTITY, 34,
- 49, BROTLI_TRANSFORM_UPPERCASE_FIRST, 33,
- 49, BROTLI_TRANSFORM_IDENTITY, 44,
- 49, BROTLI_TRANSFORM_UPPERCASE_ALL, 5,
- 45, BROTLI_TRANSFORM_IDENTITY, 49,
- 0, BROTLI_TRANSFORM_IDENTITY, 33,
- 49, BROTLI_TRANSFORM_UPPERCASE_FIRST, 30,
- 49, BROTLI_TRANSFORM_UPPERCASE_ALL, 30,
- 49, BROTLI_TRANSFORM_IDENTITY, 46,
- 49, BROTLI_TRANSFORM_UPPERCASE_ALL, 1,
- 49, BROTLI_TRANSFORM_UPPERCASE_FIRST, 34,
- 0, BROTLI_TRANSFORM_UPPERCASE_FIRST, 33,
- 0, BROTLI_TRANSFORM_UPPERCASE_ALL, 30,
- 0, BROTLI_TRANSFORM_UPPERCASE_ALL, 1,
- 49, BROTLI_TRANSFORM_UPPERCASE_ALL, 33,
- 49, BROTLI_TRANSFORM_UPPERCASE_ALL, 21,
- 49, BROTLI_TRANSFORM_UPPERCASE_ALL, 12,
- 0, BROTLI_TRANSFORM_UPPERCASE_ALL, 5,
- 49, BROTLI_TRANSFORM_UPPERCASE_ALL, 34,
- 0, BROTLI_TRANSFORM_UPPERCASE_ALL, 12,
- 0, BROTLI_TRANSFORM_UPPERCASE_FIRST, 30,
- 0, BROTLI_TRANSFORM_UPPERCASE_ALL, 34,
- 0, BROTLI_TRANSFORM_UPPERCASE_FIRST, 34,
-};
-
-static BrotliTransforms kBrotliTransforms = {
- sizeof(kPrefixSuffix),
- (const uint8_t*)kPrefixSuffix,
- kPrefixSuffixMap,
- sizeof(kTransformsData) / (3 * sizeof(kTransformsData[0])),
- kTransformsData,
- {0, 12, 27, 23, 42, 63, 56, 48, 59, 64}
-};
-
-const BrotliTransforms* BrotliGetTransforms(void) {
- return &kBrotliTransforms;
-}
-
-static int ToUpperCase(uint8_t* p) {
- if (p[0] < 0xC0) {
- if (p[0] >= 'a' && p[0] <= 'z') {
- p[0] ^= 32;
- }
- return 1;
- }
- /* An overly simplified uppercasing model for UTF-8. */
- if (p[0] < 0xE0) {
- p[1] ^= 32;
- return 2;
- }
- /* An arbitrary transform for three byte characters. */
- p[2] ^= 5;
- return 3;
-}
-
-int BrotliTransformDictionaryWord(uint8_t* dst, const uint8_t* word, int len,
- const BrotliTransforms* transforms, int transfom_idx) {
- int idx = 0;
- const uint8_t* prefix = BROTLI_TRANSFORM_PREFIX(transforms, transfom_idx);
- uint8_t type = BROTLI_TRANSFORM_TYPE(transforms, transfom_idx);
- const uint8_t* suffix = BROTLI_TRANSFORM_SUFFIX(transforms, transfom_idx);
- {
- int prefix_len = *prefix++;
- while (prefix_len--) { dst[idx++] = *prefix++; }
- }
- {
- const int t = type;
- int i = 0;
- if (t <= BROTLI_TRANSFORM_OMIT_LAST_9) {
- len -= t;
- } else if (t >= BROTLI_TRANSFORM_OMIT_FIRST_1
- && t <= BROTLI_TRANSFORM_OMIT_FIRST_9) {
- int skip = t - (BROTLI_TRANSFORM_OMIT_FIRST_1 - 1);
- word += skip;
- len -= skip;
- }
- while (i < len) { dst[idx++] = word[i++]; }
- if (t == BROTLI_TRANSFORM_UPPERCASE_FIRST) {
- ToUpperCase(&dst[idx - len]);
- } else if (t == BROTLI_TRANSFORM_UPPERCASE_ALL) {
- uint8_t* uppercase = &dst[idx - len];
- while (len > 0) {
- int step = ToUpperCase(uppercase);
- uppercase += step;
- len -= step;
- }
- }
- }
- {
- int suffix_len = *suffix++;
- while (suffix_len--) { dst[idx++] = *suffix++; }
- return idx;
- }
-}
-
-#if defined(__cplusplus) || defined(c_plusplus)
-} /* extern "C" */
-#endif
diff --git a/MdeModulePkg/Library/BrotliCustomDecompressLib/dec/bit_reader.c b/MdeModulePkg/Library/BrotliCustomDecompressLib/dec/bit_reader.c
deleted file mode 100644
index a2a9978a9b62..000000000000
--- a/MdeModulePkg/Library/BrotliCustomDecompressLib/dec/bit_reader.c
+++ /dev/null
@@ -1,48 +0,0 @@
-/* Copyright 2013 Google Inc. All Rights Reserved.
-
- Distributed under MIT license.
- See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
-*/
-
-/* Bit reading helpers */
-
-#include "./bit_reader.h"
-
-#include "../common/platform.h"
-#include <brotli/types.h>
-
-#if defined(__cplusplus) || defined(c_plusplus)
-extern "C" {
-#endif
-
-void BrotliInitBitReader(BrotliBitReader* const br) {
- br->val_ = 0;
- br->bit_pos_ = sizeof(br->val_) << 3;
-}
-
-BROTLI_BOOL BrotliWarmupBitReader(BrotliBitReader* const br) {
- size_t aligned_read_mask = (sizeof(br->val_) >> 1) - 1;
- /* Fixing alignment after unaligned BrotliFillWindow would result accumulator
- overflow. If unalignment is caused by BrotliSafeReadBits, then there is
- enough space in accumulator to fix alignment. */
- if (!BROTLI_ALIGNED_READ) {
- aligned_read_mask = 0;
- }
- if (BrotliGetAvailableBits(br) == 0) {
- if (!BrotliPullByte(br)) {
- return BROTLI_FALSE;
- }
- }
-
- while ((((size_t)(*br->next_in)) & aligned_read_mask) != 0) {
- if (!BrotliPullByte(br)) {
- /* If we consumed all the input, we don't care about the alignment. */
- return BROTLI_TRUE;
- }
- }
- return BROTLI_TRUE;
-}
-
-#if defined(__cplusplus) || defined(c_plusplus)
-} /* extern "C" */
-#endif
diff --git a/MdeModulePkg/Library/BrotliCustomDecompressLib/dec/decode.c b/MdeModulePkg/Library/BrotliCustomDecompressLib/dec/decode.c
deleted file mode 100644
index f3b3cb89711b..000000000000
--- a/MdeModulePkg/Library/BrotliCustomDecompressLib/dec/decode.c
+++ /dev/null
@@ -1,2500 +0,0 @@
-/* Copyright 2013 Google Inc. All Rights Reserved.
-
- Distributed under MIT license.
- See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
-*/
-
-#include <brotli/decode.h>
-
-#if defined(__ARM_NEON__)
-#include <arm_neon.h>
-#endif
-
-//#include <stdlib.h> /* free, malloc */
-//#include <string.h> /* memcpy, memset */
-
-#include "../common/constants.h"
-#include "../common/context.h"
-#include "../common/dictionary.h"
-#include "../common/platform.h"
-#include "../common/transform.h"
-#include "../common/version.h"
-#include "./bit_reader.h"
-#include "./huffman.h"
-#include "./prefix.h"
-#include "./state.h"
-
-#if defined(__cplusplus) || defined(c_plusplus)
-extern "C" {
-#endif
-
-#define BROTLI_FAILURE(CODE) (BROTLI_DUMP(), CODE)
-
-#define BROTLI_LOG_UINT(name) \
- BROTLI_LOG(("[%s] %s = %lu\n", __func__, #name, (unsigned long)(name)))
-#define BROTLI_LOG_ARRAY_INDEX(array_name, idx) \
- BROTLI_LOG(("[%s] %s[%lu] = %lu\n", __func__, #array_name, \
- (unsigned long)(idx), (unsigned long)array_name[idx]))
-
-#define HUFFMAN_TABLE_BITS 8U
-#define HUFFMAN_TABLE_MASK 0xFF
-
-/* We need the slack region for the following reasons:
- - doing up to two 16-byte copies for fast backward copying
- - inserting transformed dictionary word (5 prefix + 24 base + 8 suffix) */
-static const uint32_t kRingBufferWriteAheadSlack = 42;
-
-static const uint8_t kCodeLengthCodeOrder[BROTLI_CODE_LENGTH_CODES] = {
- 1, 2, 3, 4, 0, 5, 17, 6, 16, 7, 8, 9, 10, 11, 12, 13, 14, 15,
-};
-
-/* Static prefix code for the complex code length code lengths. */
-static const uint8_t kCodeLengthPrefixLength[16] = {
- 2, 2, 2, 3, 2, 2, 2, 4, 2, 2, 2, 3, 2, 2, 2, 4,
-};
-
-static const uint8_t kCodeLengthPrefixValue[16] = {
- 0, 4, 3, 2, 0, 4, 3, 1, 0, 4, 3, 2, 0, 4, 3, 5,
-};
-
-BROTLI_BOOL BrotliDecoderSetParameter(
- BrotliDecoderState* state, BrotliDecoderParameter p, uint32_t value) {
- if (state->state != BROTLI_STATE_UNINITED) return BROTLI_FALSE;
- switch (p) {
- case BROTLI_DECODER_PARAM_DISABLE_RING_BUFFER_REALLOCATION:
- state->canny_ringbuffer_allocation = !!value ? 0 : 1;
- return BROTLI_TRUE;
-
- case BROTLI_DECODER_PARAM_LARGE_WINDOW:
- state->large_window = TO_BROTLI_BOOL(!!value);
- return BROTLI_TRUE;
-
- default: return BROTLI_FALSE;
- }
-}
-
-BrotliDecoderState* BrotliDecoderCreateInstance(
- brotli_alloc_func alloc_func, brotli_free_func free_func, void* opaque) {
- BrotliDecoderState* state = 0;
- if (!alloc_func && !free_func) {
- state = (BrotliDecoderState*)BrDummyMalloc(sizeof(BrotliDecoderState));
- } else if (alloc_func && free_func) {
- state = (BrotliDecoderState*)alloc_func(opaque, sizeof(BrotliDecoderState));
- }
- if (state == 0) {
- BROTLI_DUMP();
- return 0;
- }
- if (!BrotliDecoderStateInit(state, alloc_func, free_func, opaque)) {
- BROTLI_DUMP();
- if (!alloc_func && !free_func) {
- BrDummyFree(state);
- } else if (alloc_func && free_func) {
- free_func(opaque, state);
- }
- return 0;
- }
- return state;
-}
-
-/* Deinitializes and frees BrotliDecoderState instance. */
-void BrotliDecoderDestroyInstance(BrotliDecoderState* state) {
- if (!state) {
- return;
- } else {
- brotli_free_func free_func = state->free_func;
- void* opaque = state->memory_manager_opaque;
- BrotliDecoderStateCleanup(state);
- free_func(opaque, state);
- }
-}
-
-/* Saves error code and converts it to BrotliDecoderResult. */
-static BROTLI_NOINLINE BrotliDecoderResult SaveErrorCode(
- BrotliDecoderState* s, BrotliDecoderErrorCode e) {
- s->error_code = (int)e;
- switch (e) {
- case BROTLI_DECODER_SUCCESS:
- return BROTLI_DECODER_RESULT_SUCCESS;
-
- case BROTLI_DECODER_NEEDS_MORE_INPUT:
- return BROTLI_DECODER_RESULT_NEEDS_MORE_INPUT;
-
- case BROTLI_DECODER_NEEDS_MORE_OUTPUT:
- return BROTLI_DECODER_RESULT_NEEDS_MORE_OUTPUT;
-
- default:
- return BROTLI_DECODER_RESULT_ERROR;
- }
-}
-
-/* Decodes WBITS by reading 1 - 7 bits, or 0x11 for "Large Window Brotli".
- Precondition: bit-reader accumulator has at least 8 bits. */
-static BrotliDecoderErrorCode DecodeWindowBits(BrotliDecoderState* s,
- BrotliBitReader* br) {
- uint32_t n;
- BROTLI_BOOL large_window = s->large_window;
- s->large_window = BROTLI_FALSE;
- BrotliTakeBits(br, 1, &n);
- if (n == 0) {
- s->window_bits = 16;
- return BROTLI_DECODER_SUCCESS;
- }
- BrotliTakeBits(br, 3, &n);
- if (n != 0) {
- s->window_bits = 17 + n;
- return BROTLI_DECODER_SUCCESS;
- }
- BrotliTakeBits(br, 3, &n);
- if (n == 1) {
- if (large_window) {
- BrotliTakeBits(br, 1, &n);
- if (n == 1) {
- return BROTLI_FAILURE(BROTLI_DECODER_ERROR_FORMAT_WINDOW_BITS);
- }
- s->large_window = BROTLI_TRUE;
- return BROTLI_DECODER_SUCCESS;
- } else {
- return BROTLI_FAILURE(BROTLI_DECODER_ERROR_FORMAT_WINDOW_BITS);
- }
- }
- if (n != 0) {
- s->window_bits = 8 + n;
- return BROTLI_DECODER_SUCCESS;
- }
- s->window_bits = 17;
- return BROTLI_DECODER_SUCCESS;
-}
-
-static BROTLI_INLINE void memmove16(uint8_t* dst, uint8_t* src) {
-#if defined(__ARM_NEON__)
- vst1q_u8(dst, vld1q_u8(src));
-#else
- uint32_t buffer[4];
- memcpy(buffer, src, 16);
- memcpy(dst, buffer, 16);
-#endif
-}
-
-/* Decodes a number in the range [0..255], by reading 1 - 11 bits. */
-static BROTLI_NOINLINE BrotliDecoderErrorCode DecodeVarLenUint8(
- BrotliDecoderState* s, BrotliBitReader* br, uint32_t* value) {
- uint32_t bits;
- switch (s->substate_decode_uint8) {
- case BROTLI_STATE_DECODE_UINT8_NONE:
- if (BROTLI_PREDICT_FALSE(!BrotliSafeReadBits(br, 1, &bits))) {
- return BROTLI_DECODER_NEEDS_MORE_INPUT;
- }
- if (bits == 0) {
- *value = 0;
- return BROTLI_DECODER_SUCCESS;
- }
- /* Fall through. */
-
- case BROTLI_STATE_DECODE_UINT8_SHORT:
- if (BROTLI_PREDICT_FALSE(!BrotliSafeReadBits(br, 3, &bits))) {
- s->substate_decode_uint8 = BROTLI_STATE_DECODE_UINT8_SHORT;
- return BROTLI_DECODER_NEEDS_MORE_INPUT;
- }
- if (bits == 0) {
- *value = 1;
- s->substate_decode_uint8 = BROTLI_STATE_DECODE_UINT8_NONE;
- return BROTLI_DECODER_SUCCESS;
- }
- /* Use output value as a temporary storage. It MUST be persisted. */
- *value = bits;
- /* Fall through. */
-
- case BROTLI_STATE_DECODE_UINT8_LONG:
- if (BROTLI_PREDICT_FALSE(!BrotliSafeReadBits(br, *value, &bits))) {
- s->substate_decode_uint8 = BROTLI_STATE_DECODE_UINT8_LONG;
- return BROTLI_DECODER_NEEDS_MORE_INPUT;
- }
- *value = (1U << *value) + bits;
- s->substate_decode_uint8 = BROTLI_STATE_DECODE_UINT8_NONE;
- return BROTLI_DECODER_SUCCESS;
-
- default:
- return
- BROTLI_FAILURE(BROTLI_DECODER_ERROR_UNREACHABLE);
- }
-}
-
-/* Decodes a metablock length and flags by reading 2 - 31 bits. */
-static BrotliDecoderErrorCode BROTLI_NOINLINE DecodeMetaBlockLength(
- BrotliDecoderState* s, BrotliBitReader* br) {
- uint32_t bits;
- unsigned int i;
- for (;;) {
- switch (s->substate_metablock_header) {
- case BROTLI_STATE_METABLOCK_HEADER_NONE:
- if (!BrotliSafeReadBits(br, 1, &bits)) {
- return BROTLI_DECODER_NEEDS_MORE_INPUT;
- }
- s->is_last_metablock = bits ? 1 : 0;
- s->meta_block_remaining_len = 0;
- s->is_uncompressed = 0;
- s->is_metadata = 0;
- if (!s->is_last_metablock) {
- s->substate_metablock_header = BROTLI_STATE_METABLOCK_HEADER_NIBBLES;
- break;
- }
- s->substate_metablock_header = BROTLI_STATE_METABLOCK_HEADER_EMPTY;
- /* Fall through. */
-
- case BROTLI_STATE_METABLOCK_HEADER_EMPTY:
- if (!BrotliSafeReadBits(br, 1, &bits)) {
- return BROTLI_DECODER_NEEDS_MORE_INPUT;
- }
- if (bits) {
- s->substate_metablock_header = BROTLI_STATE_METABLOCK_HEADER_NONE;
- return BROTLI_DECODER_SUCCESS;
- }
- s->substate_metablock_header = BROTLI_STATE_METABLOCK_HEADER_NIBBLES;
- /* Fall through. */
-
- case BROTLI_STATE_METABLOCK_HEADER_NIBBLES:
- if (!BrotliSafeReadBits(br, 2, &bits)) {
- return BROTLI_DECODER_NEEDS_MORE_INPUT;
- }
- s->size_nibbles = (uint8_t)(bits + 4);
- s->loop_counter = 0;
- if (bits == 3) {
- s->is_metadata = 1;
- s->substate_metablock_header = BROTLI_STATE_METABLOCK_HEADER_RESERVED;
- break;
- }
- s->substate_metablock_header = BROTLI_STATE_METABLOCK_HEADER_SIZE;
- /* Fall through. */
-
- case BROTLI_STATE_METABLOCK_HEADER_SIZE:
- i = s->loop_counter;
- for (; i < (int)s->size_nibbles; ++i) {
- if (!BrotliSafeReadBits(br, 4, &bits)) {
- s->loop_counter = i;
- return BROTLI_DECODER_NEEDS_MORE_INPUT;
- }
- if (i + 1 == s->size_nibbles && s->size_nibbles > 4 && bits == 0) {
- return BROTLI_FAILURE(BROTLI_DECODER_ERROR_FORMAT_EXUBERANT_NIBBLE);
- }
- s->meta_block_remaining_len |= (int)(bits << (i * 4));
- }
- s->substate_metablock_header =
- BROTLI_STATE_METABLOCK_HEADER_UNCOMPRESSED;
- /* Fall through. */
-
- case BROTLI_STATE_METABLOCK_HEADER_UNCOMPRESSED:
- if (!s->is_last_metablock) {
- if (!BrotliSafeReadBits(br, 1, &bits)) {
- return BROTLI_DECODER_NEEDS_MORE_INPUT;
- }
- s->is_uncompressed = bits ? 1 : 0;
- }
- ++s->meta_block_remaining_len;
- s->substate_metablock_header = BROTLI_STATE_METABLOCK_HEADER_NONE;
- return BROTLI_DECODER_SUCCESS;
-
- case BROTLI_STATE_METABLOCK_HEADER_RESERVED:
- if (!BrotliSafeReadBits(br, 1, &bits)) {
- return BROTLI_DECODER_NEEDS_MORE_INPUT;
- }
- if (bits != 0) {
- return BROTLI_FAILURE(BROTLI_DECODER_ERROR_FORMAT_RESERVED);
- }
- s->substate_metablock_header = BROTLI_STATE_METABLOCK_HEADER_BYTES;
- /* Fall through. */
-
- case BROTLI_STATE_METABLOCK_HEADER_BYTES:
- if (!BrotliSafeReadBits(br, 2, &bits)) {
- return BROTLI_DECODER_NEEDS_MORE_INPUT;
- }
- if (bits == 0) {
- s->substate_metablock_header = BROTLI_STATE_METABLOCK_HEADER_NONE;
- return BROTLI_DECODER_SUCCESS;
- }
- s->size_nibbles = (uint8_t)bits;
- s->substate_metablock_header = BROTLI_STATE_METABLOCK_HEADER_METADATA;
- /* Fall through. */
-
- case BROTLI_STATE_METABLOCK_HEADER_METADATA:
- i = s->loop_counter;
- for (; i < (int)s->size_nibbles; ++i) {
- if (!BrotliSafeReadBits(br, 8, &bits)) {
- s->loop_counter = i;
- return BROTLI_DECODER_NEEDS_MORE_INPUT;
- }
- if (i + 1 == s->size_nibbles && s->size_nibbles > 1 && bits == 0) {
- return BROTLI_FAILURE(
- BROTLI_DECODER_ERROR_FORMAT_EXUBERANT_META_NIBBLE);
- }
- s->meta_block_remaining_len |= (int)(bits << (i * 8));
- }
- ++s->meta_block_remaining_len;
- s->substate_metablock_header = BROTLI_STATE_METABLOCK_HEADER_NONE;
- return BROTLI_DECODER_SUCCESS;
-
- default:
- return
- BROTLI_FAILURE(BROTLI_DECODER_ERROR_UNREACHABLE);
- }
- }
-}
-
-/* Decodes the Huffman code.
- This method doesn't read data from the bit reader, BUT drops the amount of
- bits that correspond to the decoded symbol.
- bits MUST contain at least 15 (BROTLI_HUFFMAN_MAX_CODE_LENGTH) valid bits. */
-static BROTLI_INLINE uint32_t DecodeSymbol(uint32_t bits,
- const HuffmanCode* table,
- BrotliBitReader* br) {
- table += bits & HUFFMAN_TABLE_MASK;
- if (table->bits > HUFFMAN_TABLE_BITS) {
- uint32_t nbits = table->bits - HUFFMAN_TABLE_BITS;
- BrotliDropBits(br, HUFFMAN_TABLE_BITS);
- table += table->value;
- table += (bits >> HUFFMAN_TABLE_BITS) & BitMask(nbits);
- }
- BrotliDropBits(br, table->bits);
- return table->value;
-}
-
-/* Reads and decodes the next Huffman code from bit-stream.
- This method peeks 16 bits of input and drops 0 - 15 of them. */
-static BROTLI_INLINE uint32_t ReadSymbol(const HuffmanCode* table,
- BrotliBitReader* br) {
- return DecodeSymbol(BrotliGet16BitsUnmasked(br), table, br);
-}
-
-/* Same as DecodeSymbol, but it is known that there is less than 15 bits of
- input are currently available. */
-static BROTLI_NOINLINE BROTLI_BOOL SafeDecodeSymbol(
- const HuffmanCode* table, BrotliBitReader* br, uint32_t* result) {
- uint32_t val;
- uint32_t available_bits = BrotliGetAvailableBits(br);
- if (available_bits == 0) {
- if (table->bits == 0) {
- *result = table->value;
- return BROTLI_TRUE;
- }
- return BROTLI_FALSE; /* No valid bits at all. */
- }
- val = (uint32_t)BrotliGetBitsUnmasked(br);
- table += val & HUFFMAN_TABLE_MASK;
- if (table->bits <= HUFFMAN_TABLE_BITS) {
- if (table->bits <= available_bits) {
- BrotliDropBits(br, table->bits);
- *result = table->value;
- return BROTLI_TRUE;
- } else {
- return BROTLI_FALSE; /* Not enough bits for the first level. */
- }
- }
- if (available_bits <= HUFFMAN_TABLE_BITS) {
- return BROTLI_FALSE; /* Not enough bits to move to the second level. */
- }
-
- /* Speculatively drop HUFFMAN_TABLE_BITS. */
- val = (val & BitMask(table->bits)) >> HUFFMAN_TABLE_BITS;
- available_bits -= HUFFMAN_TABLE_BITS;
- table += table->value + val;
- if (available_bits < table->bits) {
- return BROTLI_FALSE; /* Not enough bits for the second level. */
- }
-
- BrotliDropBits(br, HUFFMAN_TABLE_BITS + table->bits);
- *result = table->value;
- return BROTLI_TRUE;
-}
-
-static BROTLI_INLINE BROTLI_BOOL SafeReadSymbol(
- const HuffmanCode* table, BrotliBitReader* br, uint32_t* result) {
- uint32_t val;
- if (BROTLI_PREDICT_TRUE(BrotliSafeGetBits(br, 15, &val))) {
- *result = DecodeSymbol(val, table, br);
- return BROTLI_TRUE;
- }
- return SafeDecodeSymbol(table, br, result);
-}
-
-/* Makes a look-up in first level Huffman table. Peeks 8 bits. */
-static BROTLI_INLINE void PreloadSymbol(int safe,
- const HuffmanCode* table,
- BrotliBitReader* br,
- uint32_t* bits,
- uint32_t* value) {
- if (safe) {
- return;
- }
- table += BrotliGetBits(br, HUFFMAN_TABLE_BITS);
- *bits = table->bits;
- *value = table->value;
-}
-
-/* Decodes the next Huffman code using data prepared by PreloadSymbol.
- Reads 0 - 15 bits. Also peeks 8 following bits. */
-static BROTLI_INLINE uint32_t ReadPreloadedSymbol(const HuffmanCode* table,
- BrotliBitReader* br,
- uint32_t* bits,
- uint32_t* value) {
- uint32_t result = *value;
- if (BROTLI_PREDICT_FALSE(*bits > HUFFMAN_TABLE_BITS)) {
- uint32_t val = BrotliGet16BitsUnmasked(br);
- const HuffmanCode* ext = table + (val & HUFFMAN_TABLE_MASK) + *value;
- uint32_t mask = BitMask((*bits - HUFFMAN_TABLE_BITS));
- BrotliDropBits(br, HUFFMAN_TABLE_BITS);
- ext += (val >> HUFFMAN_TABLE_BITS) & mask;
- BrotliDropBits(br, ext->bits);
- result = ext->value;
- } else {
- BrotliDropBits(br, *bits);
- }
- PreloadSymbol(0, table, br, bits, value);
- return result;
-}
-
-static BROTLI_INLINE uint32_t Log2Floor(uint32_t x) {
- uint32_t result = 0;
- while (x) {
- x >>= 1;
- ++result;
- }
- return result;
-}
-
-/* Reads (s->symbol + 1) symbols.
- Totally 1..4 symbols are read, 1..11 bits each.
- The list of symbols MUST NOT contain duplicates. */
-static BrotliDecoderErrorCode ReadSimpleHuffmanSymbols(
- uint32_t alphabet_size, uint32_t max_symbol, BrotliDecoderState* s) {
- /* max_bits == 1..11; symbol == 0..3; 1..44 bits will be read. */
- BrotliBitReader* br = &s->br;
- uint32_t max_bits = Log2Floor(alphabet_size - 1);
- uint32_t i = s->sub_loop_counter;
- uint32_t num_symbols = s->symbol;
- while (i <= num_symbols) {
- uint32_t v;
- if (BROTLI_PREDICT_FALSE(!BrotliSafeReadBits(br, max_bits, &v))) {
- s->sub_loop_counter = i;
- s->substate_huffman = BROTLI_STATE_HUFFMAN_SIMPLE_READ;
- return BROTLI_DECODER_NEEDS_MORE_INPUT;
- }
- if (v >= max_symbol) {
- return
- BROTLI_FAILURE(BROTLI_DECODER_ERROR_FORMAT_SIMPLE_HUFFMAN_ALPHABET);
- }
- s->symbols_lists_array[i] = (uint16_t)v;
- BROTLI_LOG_UINT(s->symbols_lists_array[i]);
- ++i;
- }
-
- for (i = 0; i < num_symbols; ++i) {
- uint32_t k = i + 1;
- for (; k <= num_symbols; ++k) {
- if (s->symbols_lists_array[i] == s->symbols_lists_array[k]) {
- return BROTLI_FAILURE(BROTLI_DECODER_ERROR_FORMAT_SIMPLE_HUFFMAN_SAME);
- }
- }
- }
-
- return BROTLI_DECODER_SUCCESS;
-}
-
-/* Process single decoded symbol code length:
- A) reset the repeat variable
- B) remember code length (if it is not 0)
- C) extend corresponding index-chain
- D) reduce the Huffman space
- E) update the histogram */
-static BROTLI_INLINE void ProcessSingleCodeLength(uint32_t code_len,
- uint32_t* symbol, uint32_t* repeat, uint32_t* space,
- uint32_t* prev_code_len, uint16_t* symbol_lists,
- uint16_t* code_length_histo, int* next_symbol) {
- *repeat = 0;
- if (code_len != 0) { /* code_len == 1..15 */
- symbol_lists[next_symbol[code_len]] = (uint16_t)(*symbol);
- next_symbol[code_len] = (int)(*symbol);
- *prev_code_len = code_len;
- *space -= 32768U >> code_len;
- code_length_histo[code_len]++;
- BROTLI_LOG(("[ReadHuffmanCode] code_length[%d] = %d\n",
- (int)*symbol, (int)code_len));
- }
- (*symbol)++;
-}
-
-/* Process repeated symbol code length.
- A) Check if it is the extension of previous repeat sequence; if the decoded
- value is not BROTLI_REPEAT_PREVIOUS_CODE_LENGTH, then it is a new
- symbol-skip
- B) Update repeat variable
- C) Check if operation is feasible (fits alphabet)
- D) For each symbol do the same operations as in ProcessSingleCodeLength
-
- PRECONDITION: code_len == BROTLI_REPEAT_PREVIOUS_CODE_LENGTH or
- code_len == BROTLI_REPEAT_ZERO_CODE_LENGTH */
-static BROTLI_INLINE void ProcessRepeatedCodeLength(uint32_t code_len,
- uint32_t repeat_delta, uint32_t alphabet_size, uint32_t* symbol,
- uint32_t* repeat, uint32_t* space, uint32_t* prev_code_len,
- uint32_t* repeat_code_len, uint16_t* symbol_lists,
- uint16_t* code_length_histo, int* next_symbol) {
- uint32_t old_repeat;
- uint32_t extra_bits = 3; /* for BROTLI_REPEAT_ZERO_CODE_LENGTH */
- uint32_t new_len = 0; /* for BROTLI_REPEAT_ZERO_CODE_LENGTH */
- if (code_len == BROTLI_REPEAT_PREVIOUS_CODE_LENGTH) {
- new_len = *prev_code_len;
- extra_bits = 2;
- }
- if (*repeat_code_len != new_len) {
- *repeat = 0;
- *repeat_code_len = new_len;
- }
- old_repeat = *repeat;
- if (*repeat > 0) {
- *repeat -= 2;
- *repeat <<= extra_bits;
- }
- *repeat += repeat_delta + 3U;
- repeat_delta = *repeat - old_repeat;
- if (*symbol + repeat_delta > alphabet_size) {
- BROTLI_DUMP();
- *symbol = alphabet_size;
- *space = 0xFFFFF;
- return;
- }
- BROTLI_LOG(("[ReadHuffmanCode] code_length[%d..%d] = %d\n",
- (int)*symbol, (int)(*symbol + repeat_delta - 1), (int)*repeat_code_len));
- if (*repeat_code_len != 0) {
- unsigned last = *symbol + repeat_delta;
- int next = next_symbol[*repeat_code_len];
- do {
- symbol_lists[next] = (uint16_t)*symbol;
- next = (int)*symbol;
- } while (++(*symbol) != last);
- next_symbol[*repeat_code_len] = next;
- *space -= repeat_delta << (15 - *repeat_code_len);
- code_length_histo[*repeat_code_len] =
- (uint16_t)(code_length_histo[*repeat_code_len] + repeat_delta);
- } else {
- *symbol += repeat_delta;
- }
-}
-
-/* Reads and decodes symbol codelengths. */
-static BrotliDecoderErrorCode ReadSymbolCodeLengths(
- uint32_t alphabet_size, BrotliDecoderState* s) {
- BrotliBitReader* br = &s->br;
- uint32_t symbol = s->symbol;
- uint32_t repeat = s->repeat;
- uint32_t space = s->space;
- uint32_t prev_code_len = s->prev_code_len;
- uint32_t repeat_code_len = s->repeat_code_len;
- uint16_t* symbol_lists = s->symbol_lists;
- uint16_t* code_length_histo = s->code_length_histo;
- int* next_symbol = s->next_symbol;
- if (!BrotliWarmupBitReader(br)) {
- return BROTLI_DECODER_NEEDS_MORE_INPUT;
- }
- while (symbol < alphabet_size && space > 0) {
- const HuffmanCode* p = s->table;
- uint32_t code_len;
- if (!BrotliCheckInputAmount(br, BROTLI_SHORT_FILL_BIT_WINDOW_READ)) {
- s->symbol = symbol;
- s->repeat = repeat;
- s->prev_code_len = prev_code_len;
- s->repeat_code_len = repeat_code_len;
- s->space = space;
- return BROTLI_DECODER_NEEDS_MORE_INPUT;
- }
- BrotliFillBitWindow16(br);
- p += BrotliGetBitsUnmasked(br) &
- BitMask(BROTLI_HUFFMAN_MAX_CODE_LENGTH_CODE_LENGTH);
- BrotliDropBits(br, p->bits); /* Use 1..5 bits. */
- code_len = p->value; /* code_len == 0..17 */
- if (code_len < BROTLI_REPEAT_PREVIOUS_CODE_LENGTH) {
- ProcessSingleCodeLength(code_len, &symbol, &repeat, &space,
- &prev_code_len, symbol_lists, code_length_histo, next_symbol);
- } else { /* code_len == 16..17, extra_bits == 2..3 */
- uint32_t extra_bits =
- (code_len == BROTLI_REPEAT_PREVIOUS_CODE_LENGTH) ? 2 : 3;
- uint32_t repeat_delta =
- (uint32_t)BrotliGetBitsUnmasked(br) & BitMask(extra_bits);
- BrotliDropBits(br, extra_bits);
- ProcessRepeatedCodeLength(code_len, repeat_delta, alphabet_size,
- &symbol, &repeat, &space, &prev_code_len, &repeat_code_len,
- symbol_lists, code_length_histo, next_symbol);
- }
- }
- s->space = space;
- return BROTLI_DECODER_SUCCESS;
-}
-
-static BrotliDecoderErrorCode SafeReadSymbolCodeLengths(
- uint32_t alphabet_size, BrotliDecoderState* s) {
- BrotliBitReader* br = &s->br;
- BROTLI_BOOL get_byte = BROTLI_FALSE;
- while (s->symbol < alphabet_size && s->space > 0) {
- const HuffmanCode* p = s->table;
- uint32_t code_len;
- uint32_t available_bits;
- uint32_t bits = 0;
- if (get_byte && !BrotliPullByte(br)) return BROTLI_DECODER_NEEDS_MORE_INPUT;
- get_byte = BROTLI_FALSE;
- available_bits = BrotliGetAvailableBits(br);
- if (available_bits != 0) {
- bits = (uint32_t)BrotliGetBitsUnmasked(br);
- }
- p += bits & BitMask(BROTLI_HUFFMAN_MAX_CODE_LENGTH_CODE_LENGTH);
- if (p->bits > available_bits) {
- get_byte = BROTLI_TRUE;
- continue;
- }
- code_len = p->value; /* code_len == 0..17 */
- if (code_len < BROTLI_REPEAT_PREVIOUS_CODE_LENGTH) {
- BrotliDropBits(br, p->bits);
- ProcessSingleCodeLength(code_len, &s->symbol, &s->repeat, &s->space,
- &s->prev_code_len, s->symbol_lists, s->code_length_histo,
- s->next_symbol);
- } else { /* code_len == 16..17, extra_bits == 2..3 */
- uint32_t extra_bits = code_len - 14U;
- uint32_t repeat_delta = (bits >> p->bits) & BitMask(extra_bits);
- if (available_bits < p->bits + extra_bits) {
- get_byte = BROTLI_TRUE;
- continue;
- }
- BrotliDropBits(br, p->bits + extra_bits);
- ProcessRepeatedCodeLength(code_len, repeat_delta, alphabet_size,
- &s->symbol, &s->repeat, &s->space, &s->prev_code_len,
- &s->repeat_code_len, s->symbol_lists, s->code_length_histo,
- s->next_symbol);
- }
- }
- return BROTLI_DECODER_SUCCESS;
-}
-
-/* Reads and decodes 15..18 codes using static prefix code.
- Each code is 2..4 bits long. In total 30..72 bits are used. */
-static BrotliDecoderErrorCode ReadCodeLengthCodeLengths(BrotliDecoderState* s) {
- BrotliBitReader* br = &s->br;
- uint32_t num_codes = s->repeat;
- unsigned space = s->space;
- uint32_t i = s->sub_loop_counter;
- for (; i < BROTLI_CODE_LENGTH_CODES; ++i) {
- const uint8_t code_len_idx = kCodeLengthCodeOrder[i];
- uint32_t ix;
- uint32_t v;
- if (BROTLI_PREDICT_FALSE(!BrotliSafeGetBits(br, 4, &ix))) {
- uint32_t available_bits = BrotliGetAvailableBits(br);
- if (available_bits != 0) {
- ix = BrotliGetBitsUnmasked(br) & 0xF;
- } else {
- ix = 0;
- }
- if (kCodeLengthPrefixLength[ix] > available_bits) {
- s->sub_loop_counter = i;
- s->repeat = num_codes;
- s->space = space;
- s->substate_huffman = BROTLI_STATE_HUFFMAN_COMPLEX;
- return BROTLI_DECODER_NEEDS_MORE_INPUT;
- }
- }
- v = kCodeLengthPrefixValue[ix];
- BrotliDropBits(br, kCodeLengthPrefixLength[ix]);
- s->code_length_code_lengths[code_len_idx] = (uint8_t)v;
- BROTLI_LOG_ARRAY_INDEX(s->code_length_code_lengths, code_len_idx);
- if (v != 0) {
- space = space - (32U >> v);
- ++num_codes;
- ++s->code_length_histo[v];
- if (space - 1U >= 32U) {
- /* space is 0 or wrapped around. */
- break;
- }
- }
- }
- if (!(num_codes == 1 || space == 0)) {
- return BROTLI_FAILURE(BROTLI_DECODER_ERROR_FORMAT_CL_SPACE);
- }
- return BROTLI_DECODER_SUCCESS;
-}
-
-/* Decodes the Huffman tables.
- There are 2 scenarios:
- A) Huffman code contains only few symbols (1..4). Those symbols are read
- directly; their code lengths are defined by the number of symbols.
- For this scenario 4 - 49 bits will be read.
-
- B) 2-phase decoding:
- B.1) Small Huffman table is decoded; it is specified with code lengths
- encoded with predefined entropy code. 32 - 74 bits are used.
- B.2) Decoded table is used to decode code lengths of symbols in resulting
- Huffman table. In worst case 3520 bits are read. */
-static BrotliDecoderErrorCode ReadHuffmanCode(uint32_t alphabet_size,
- uint32_t max_symbol,
- HuffmanCode* table,
- uint32_t* opt_table_size,
- BrotliDecoderState* s) {
- BrotliBitReader* br = &s->br;
- /* Unnecessary masking, but might be good for safety. */
- alphabet_size &= 0x7FF;
- /* State machine. */
- for (;;) {
- switch (s->substate_huffman) {
- case BROTLI_STATE_HUFFMAN_NONE:
- if (!BrotliSafeReadBits(br, 2, &s->sub_loop_counter)) {
- return BROTLI_DECODER_NEEDS_MORE_INPUT;
- }
- BROTLI_LOG_UINT(s->sub_loop_counter);
- /* The value is used as follows:
- 1 for simple code;
- 0 for no skipping, 2 skips 2 code lengths, 3 skips 3 code lengths */
- if (s->sub_loop_counter != 1) {
- s->space = 32;
- s->repeat = 0; /* num_codes */
- memset(&s->code_length_histo[0], 0, sizeof(s->code_length_histo[0]) *
- (BROTLI_HUFFMAN_MAX_CODE_LENGTH_CODE_LENGTH + 1));
- memset(&s->code_length_code_lengths[0], 0,
- sizeof(s->code_length_code_lengths));
- s->substate_huffman = BROTLI_STATE_HUFFMAN_COMPLEX;
- continue;
- }
- /* Fall through. */
-
- case BROTLI_STATE_HUFFMAN_SIMPLE_SIZE:
- /* Read symbols, codes & code lengths directly. */
- if (!BrotliSafeReadBits(br, 2, &s->symbol)) { /* num_symbols */
- s->substate_huffman = BROTLI_STATE_HUFFMAN_SIMPLE_SIZE;
- return BROTLI_DECODER_NEEDS_MORE_INPUT;
- }
- s->sub_loop_counter = 0;
- /* Fall through. */
-
- case BROTLI_STATE_HUFFMAN_SIMPLE_READ: {
- BrotliDecoderErrorCode result =
- ReadSimpleHuffmanSymbols(alphabet_size, max_symbol, s);
- if (result != BROTLI_DECODER_SUCCESS) {
- return result;
- }
- }
- /* Fall through. */
-
- case BROTLI_STATE_HUFFMAN_SIMPLE_BUILD: {
- uint32_t table_size;
- if (s->symbol == 3) {
- uint32_t bits;
- if (!BrotliSafeReadBits(br, 1, &bits)) {
- s->substate_huffman = BROTLI_STATE_HUFFMAN_SIMPLE_BUILD;
- return BROTLI_DECODER_NEEDS_MORE_INPUT;
- }
- s->symbol += bits;
- }
- BROTLI_LOG_UINT(s->symbol);
- table_size = BrotliBuildSimpleHuffmanTable(
- table, HUFFMAN_TABLE_BITS, s->symbols_lists_array, s->symbol);
- if (opt_table_size) {
- *opt_table_size = table_size;
- }
- s->substate_huffman = BROTLI_STATE_HUFFMAN_NONE;
- return BROTLI_DECODER_SUCCESS;
- }
-
- /* Decode Huffman-coded code lengths. */
- case BROTLI_STATE_HUFFMAN_COMPLEX: {
- uint32_t i;
- BrotliDecoderErrorCode result = ReadCodeLengthCodeLengths(s);
- if (result != BROTLI_DECODER_SUCCESS) {
- return result;
- }
- BrotliBuildCodeLengthsHuffmanTable(s->table,
- s->code_length_code_lengths,
- s->code_length_histo);
- memset(&s->code_length_histo[0], 0, sizeof(s->code_length_histo));
- for (i = 0; i <= BROTLI_HUFFMAN_MAX_CODE_LENGTH; ++i) {
- s->next_symbol[i] = (int)i - (BROTLI_HUFFMAN_MAX_CODE_LENGTH + 1);
- s->symbol_lists[s->next_symbol[i]] = 0xFFFF;
- }
-
- s->symbol = 0;
- s->prev_code_len = BROTLI_INITIAL_REPEATED_CODE_LENGTH;
- s->repeat = 0;
- s->repeat_code_len = 0;
- s->space = 32768;
- s->substate_huffman = BROTLI_STATE_HUFFMAN_LENGTH_SYMBOLS;
- }
- /* Fall through. */
-
- case BROTLI_STATE_HUFFMAN_LENGTH_SYMBOLS: {
- uint32_t table_size;
- BrotliDecoderErrorCode result = ReadSymbolCodeLengths(max_symbol, s);
- if (result == BROTLI_DECODER_NEEDS_MORE_INPUT) {
- result = SafeReadSymbolCodeLengths(max_symbol, s);
- }
- if (result != BROTLI_DECODER_SUCCESS) {
- return result;
- }
-
- if (s->space != 0) {
- BROTLI_LOG(("[ReadHuffmanCode] space = %d\n", (int)s->space));
- return BROTLI_FAILURE(BROTLI_DECODER_ERROR_FORMAT_HUFFMAN_SPACE);
- }
- table_size = BrotliBuildHuffmanTable(
- table, HUFFMAN_TABLE_BITS, s->symbol_lists, s->code_length_histo);
- if (opt_table_size) {
- *opt_table_size = table_size;
- }
- s->substate_huffman = BROTLI_STATE_HUFFMAN_NONE;
- return BROTLI_DECODER_SUCCESS;
- }
-
- default:
- return
- BROTLI_FAILURE(BROTLI_DECODER_ERROR_UNREACHABLE);
- }
- }
-}
-
-/* Decodes a block length by reading 3..39 bits. */
-static BROTLI_INLINE uint32_t ReadBlockLength(const HuffmanCode* table,
- BrotliBitReader* br) {
- uint32_t code;
- uint32_t nbits;
- code = ReadSymbol(table, br);
- ASSERT (code < BROTLI_NUM_BLOCK_LEN_SYMBOLS);
- nbits = kBlockLengthPrefixCode[code].nbits; /* nbits == 2..24 */
- return kBlockLengthPrefixCode[code].offset + BrotliReadBits(br, nbits);
-}
-
-/* WARNING: if state is not BROTLI_STATE_READ_BLOCK_LENGTH_NONE, then
- reading can't be continued with ReadBlockLength. */
-static BROTLI_INLINE BROTLI_BOOL SafeReadBlockLength(
- BrotliDecoderState* s, uint32_t* result, const HuffmanCode* table,
- BrotliBitReader* br) {
- uint32_t index;
- if (s->substate_read_block_length == BROTLI_STATE_READ_BLOCK_LENGTH_NONE) {
- if (!SafeReadSymbol(table, br, &index)) {
- return BROTLI_FALSE;
- }
- } else {
- index = s->block_length_index;
- }
- {
- uint32_t bits;
- uint32_t nbits = kBlockLengthPrefixCode[index].nbits; /* nbits == 2..24 */
- if (!BrotliSafeReadBits(br, nbits, &bits)) {
- s->block_length_index = index;
- s->substate_read_block_length = BROTLI_STATE_READ_BLOCK_LENGTH_SUFFIX;
- return BROTLI_FALSE;
- }
- *result = kBlockLengthPrefixCode[index].offset + bits;
- s->substate_read_block_length = BROTLI_STATE_READ_BLOCK_LENGTH_NONE;
- return BROTLI_TRUE;
- }
-}
-
-/* Transform:
- 1) initialize list L with values 0, 1,... 255
- 2) For each input element X:
- 2.1) let Y = L[X]
- 2.2) remove X-th element from L
- 2.3) prepend Y to L
- 2.4) append Y to output
-
- In most cases max(Y) <= 7, so most of L remains intact.
- To reduce the cost of initialization, we reuse L, remember the upper bound
- of Y values, and reinitialize only first elements in L.
-
- Most of input values are 0 and 1. To reduce number of branches, we replace
- inner for loop with do-while. */
-static BROTLI_NOINLINE void InverseMoveToFrontTransform(
- uint8_t* v, uint32_t v_len, BrotliDecoderState* state) {
- /* Reinitialize elements that could have been changed. */
- uint32_t i = 1;
- uint32_t upper_bound = state->mtf_upper_bound;
- uint32_t* mtf = &state->mtf[1]; /* Make mtf[-1] addressable. */
- uint8_t* mtf_u8 = (uint8_t*)mtf;
- uint8_t* mtf_u8t = mtf_u8 - 1;
- /* Load endian-aware constant. */
- const uint8_t b0123[4] = {0, 1, 2, 3};
- uint32_t pattern;
- memcpy(&pattern, &b0123, 4);
-
- /* Initialize list using 4 consequent values pattern. */
- mtf[0] = pattern;
- do {
- pattern += 0x04040404; /* Advance all 4 values by 4. */
- mtf[i] = pattern;
- i++;
- } while (i <= upper_bound);
-
- /* Transform the input. */
- upper_bound = 0;
- for (i = 0; i < v_len; ++i) {
- int index = v[i];
- uint8_t value = mtf_u8[index];
- upper_bound |= (uint32_t) v[i];
- v[i] = value;
- mtf_u8t[0] = value;
- while (index >= 0) {
- mtf_u8t[index + 1] = mtf_u8t[index];
- index--;
- }
- }
- /* Remember amount of elements to be reinitialized. */
- state->mtf_upper_bound = upper_bound >> 2;
-}
-
-/* Decodes a series of Huffman table using ReadHuffmanCode function. */
-static BrotliDecoderErrorCode HuffmanTreeGroupDecode(
- HuffmanTreeGroup* group, BrotliDecoderState* s) {
- if (s->substate_tree_group != BROTLI_STATE_TREE_GROUP_LOOP) {
- s->next = group->codes;
- s->htree_index = 0;
- s->substate_tree_group = BROTLI_STATE_TREE_GROUP_LOOP;
- }
- while (s->htree_index < group->num_htrees) {
- uint32_t table_size;
- BrotliDecoderErrorCode result =
- ReadHuffmanCode(group->alphabet_size, group->max_symbol,
- s->next, &table_size, s);
- if (result != BROTLI_DECODER_SUCCESS) return result;
- group->htrees[s->htree_index] = s->next;
- s->next += table_size;
- ++s->htree_index;
- }
- s->substate_tree_group = BROTLI_STATE_TREE_GROUP_NONE;
- return BROTLI_DECODER_SUCCESS;
-}
-
-/* Decodes a context map.
- Decoding is done in 4 phases:
- 1) Read auxiliary information (6..16 bits) and allocate memory.
- In case of trivial context map, decoding is finished at this phase.
- 2) Decode Huffman table using ReadHuffmanCode function.
- This table will be used for reading context map items.
- 3) Read context map items; "0" values could be run-length encoded.
- 4) Optionally, apply InverseMoveToFront transform to the resulting map. */
-static BrotliDecoderErrorCode DecodeContextMap(uint32_t context_map_size,
- uint32_t* num_htrees,
- uint8_t** context_map_arg,
- BrotliDecoderState* s) {
- BrotliBitReader* br = &s->br;
- BrotliDecoderErrorCode result = BROTLI_DECODER_SUCCESS;
-
- switch ((int)s->substate_context_map) {
- case BROTLI_STATE_CONTEXT_MAP_NONE:
- result = DecodeVarLenUint8(s, br, num_htrees);
- if (result != BROTLI_DECODER_SUCCESS) {
- return result;
- }
- (*num_htrees)++;
- s->context_index = 0;
- BROTLI_LOG_UINT(context_map_size);
- BROTLI_LOG_UINT(*num_htrees);
- *context_map_arg =
- (uint8_t*)BROTLI_DECODER_ALLOC(s, (size_t)context_map_size);
- if (*context_map_arg == 0) {
- return BROTLI_FAILURE(BROTLI_DECODER_ERROR_ALLOC_CONTEXT_MAP);
- }
- if (*num_htrees <= 1) {
- memset(*context_map_arg, 0, (size_t)context_map_size);
- return BROTLI_DECODER_SUCCESS;
- }
- s->substate_context_map = BROTLI_STATE_CONTEXT_MAP_READ_PREFIX;
- /* Fall through. */
-
- case BROTLI_STATE_CONTEXT_MAP_READ_PREFIX: {
- uint32_t bits;
- /* In next stage ReadHuffmanCode uses at least 4 bits, so it is safe
- to peek 4 bits ahead. */
- if (!BrotliSafeGetBits(br, 5, &bits)) {
- return BROTLI_DECODER_NEEDS_MORE_INPUT;
- }
- if ((bits & 1) != 0) { /* Use RLE for zeros. */
- s->max_run_length_prefix = (bits >> 1) + 1;
- BrotliDropBits(br, 5);
- } else {
- s->max_run_length_prefix = 0;
- BrotliDropBits(br, 1);
- }
- BROTLI_LOG_UINT(s->max_run_length_prefix);
- s->substate_context_map = BROTLI_STATE_CONTEXT_MAP_HUFFMAN;
- }
- /* Fall through. */
-
- case BROTLI_STATE_CONTEXT_MAP_HUFFMAN: {
- uint32_t alphabet_size = *num_htrees + s->max_run_length_prefix;
- result = ReadHuffmanCode(alphabet_size, alphabet_size,
- s->context_map_table, NULL, s);
- if (result != BROTLI_DECODER_SUCCESS) return result;
- s->code = 0xFFFF;
- s->substate_context_map = BROTLI_STATE_CONTEXT_MAP_DECODE;
- }
- /* Fall through. */
-
- case BROTLI_STATE_CONTEXT_MAP_DECODE: {
- uint32_t context_index = s->context_index;
- uint32_t max_run_length_prefix = s->max_run_length_prefix;
- uint8_t* context_map = *context_map_arg;
- uint32_t code = s->code;
- BROTLI_BOOL skip_preamble = (code != 0xFFFF);
- while (context_index < context_map_size || skip_preamble) {
- if (!skip_preamble) {
- if (!SafeReadSymbol(s->context_map_table, br, &code)) {
- s->code = 0xFFFF;
- s->context_index = context_index;
- return BROTLI_DECODER_NEEDS_MORE_INPUT;
- }
- BROTLI_LOG_UINT(code);
-
- if (code == 0) {
- context_map[context_index++] = 0;
- continue;
- }
- if (code > max_run_length_prefix) {
- context_map[context_index++] =
- (uint8_t)(code - max_run_length_prefix);
- continue;
- }
- } else {
- skip_preamble = BROTLI_FALSE;
- }
- /* RLE sub-stage. */
- {
- uint32_t reps;
- if (!BrotliSafeReadBits(br, code, &reps)) {
- s->code = code;
- s->context_index = context_index;
- return BROTLI_DECODER_NEEDS_MORE_INPUT;
- }
- reps += 1U << code;
- BROTLI_LOG_UINT(reps);
- if (context_index + reps > context_map_size) {
- return
- BROTLI_FAILURE(BROTLI_DECODER_ERROR_FORMAT_CONTEXT_MAP_REPEAT);
- }
- do {
- context_map[context_index++] = 0;
- } while (--reps);
- }
- }
- }
- /* Fall through. */
-
- case BROTLI_STATE_CONTEXT_MAP_TRANSFORM: {
- uint32_t bits;
- if (!BrotliSafeReadBits(br, 1, &bits)) {
- s->substate_context_map = BROTLI_STATE_CONTEXT_MAP_TRANSFORM;
- return BROTLI_DECODER_NEEDS_MORE_INPUT;
- }
- if (bits != 0) {
- InverseMoveToFrontTransform(*context_map_arg, context_map_size, s);
- }
- s->substate_context_map = BROTLI_STATE_CONTEXT_MAP_NONE;
- return BROTLI_DECODER_SUCCESS;
- }
-
- default:
- return
- BROTLI_FAILURE(BROTLI_DECODER_ERROR_UNREACHABLE);
- }
-}
-
-/* Decodes a command or literal and updates block type ring-buffer.
- Reads 3..54 bits. */
-static BROTLI_INLINE BROTLI_BOOL DecodeBlockTypeAndLength(
- int safe, BrotliDecoderState* s, int tree_type) {
- uint32_t max_block_type = s->num_block_types[tree_type];
- const HuffmanCode* type_tree = &s->block_type_trees[
- tree_type * BROTLI_HUFFMAN_MAX_SIZE_258];
- const HuffmanCode* len_tree = &s->block_len_trees[
- tree_type * BROTLI_HUFFMAN_MAX_SIZE_26];
- BrotliBitReader* br = &s->br;
- uint32_t* ringbuffer = &s->block_type_rb[tree_type * 2];
- uint32_t block_type;
- if (max_block_type <= 1) {
- return BROTLI_FALSE;
- }
-
- /* Read 0..15 + 3..39 bits. */
- if (!safe) {
- block_type = ReadSymbol(type_tree, br);
- s->block_length[tree_type] = ReadBlockLength(len_tree, br);
- } else {
- BrotliBitReaderState memento;
- BrotliBitReaderSaveState(br, &memento);
- if (!SafeReadSymbol(type_tree, br, &block_type)) return BROTLI_FALSE;
- if (!SafeReadBlockLength(s, &s->block_length[tree_type], len_tree, br)) {
- s->substate_read_block_length = BROTLI_STATE_READ_BLOCK_LENGTH_NONE;
- BrotliBitReaderRestoreState(br, &memento);
- return BROTLI_FALSE;
- }
- }
-
- if (block_type == 1) {
- block_type = ringbuffer[1] + 1;
- } else if (block_type == 0) {
- block_type = ringbuffer[0];
- } else {
- block_type -= 2;
- }
- if (block_type >= max_block_type) {
- block_type -= max_block_type;
- }
- ringbuffer[0] = ringbuffer[1];
- ringbuffer[1] = block_type;
- return BROTLI_TRUE;
-}
-
-static BROTLI_INLINE void DetectTrivialLiteralBlockTypes(
- BrotliDecoderState* s) {
- size_t i;
- for (i = 0; i < 8; ++i) s->trivial_literal_contexts[i] = 0;
- for (i = 0; i < s->num_block_types[0]; i++) {
- size_t offset = i << BROTLI_LITERAL_CONTEXT_BITS;
- size_t error = 0;
- size_t sample = s->context_map[offset];
- size_t j;
- for (j = 0; j < (1u << BROTLI_LITERAL_CONTEXT_BITS);) {
- BROTLI_REPEAT(4, error |= s->context_map[offset + j++] ^ sample;)
- }
- if (error == 0) {
- s->trivial_literal_contexts[i >> 5] |= 1u << (i & 31);
- }
- }
-}
-
-static BROTLI_INLINE void PrepareLiteralDecoding(BrotliDecoderState* s) {
- uint8_t context_mode;
- size_t trivial;
- uint32_t block_type = s->block_type_rb[1];
- uint32_t context_offset = block_type << BROTLI_LITERAL_CONTEXT_BITS;
- s->context_map_slice = s->context_map + context_offset;
- trivial = s->trivial_literal_contexts[block_type >> 5];
- s->trivial_literal_context = (trivial >> (block_type & 31)) & 1;
- s->literal_htree = s->literal_hgroup.htrees[s->context_map_slice[0]];
- context_mode = s->context_modes[block_type] & 3;
- s->context_lookup = BROTLI_CONTEXT_LUT(context_mode);
-}
-
-/* Decodes the block type and updates the state for literal context.
- Reads 3..54 bits. */
-static BROTLI_INLINE BROTLI_BOOL DecodeLiteralBlockSwitchInternal(
- int safe, BrotliDecoderState* s) {
- if (!DecodeBlockTypeAndLength(safe, s, 0)) {
- return BROTLI_FALSE;
- }
- PrepareLiteralDecoding(s);
- return BROTLI_TRUE;
-}
-
-static void BROTLI_NOINLINE DecodeLiteralBlockSwitch(BrotliDecoderState* s) {
- DecodeLiteralBlockSwitchInternal(0, s);
-}
-
-static BROTLI_BOOL BROTLI_NOINLINE SafeDecodeLiteralBlockSwitch(
- BrotliDecoderState* s) {
- return DecodeLiteralBlockSwitchInternal(1, s);
-}
-
-/* Block switch for insert/copy length.
- Reads 3..54 bits. */
-static BROTLI_INLINE BROTLI_BOOL DecodeCommandBlockSwitchInternal(
- int safe, BrotliDecoderState* s) {
- if (!DecodeBlockTypeAndLength(safe, s, 1)) {
- return BROTLI_FALSE;
- }
- s->htree_command = s->insert_copy_hgroup.htrees[s->block_type_rb[3]];
- return BROTLI_TRUE;
-}
-
-static void BROTLI_NOINLINE DecodeCommandBlockSwitch(BrotliDecoderState* s) {
- DecodeCommandBlockSwitchInternal(0, s);
-}
-
-static BROTLI_BOOL BROTLI_NOINLINE SafeDecodeCommandBlockSwitch(
- BrotliDecoderState* s) {
- return DecodeCommandBlockSwitchInternal(1, s);
-}
-
-/* Block switch for distance codes.
- Reads 3..54 bits. */
-static BROTLI_INLINE BROTLI_BOOL DecodeDistanceBlockSwitchInternal(
- int safe, BrotliDecoderState* s) {
- if (!DecodeBlockTypeAndLength(safe, s, 2)) {
- return BROTLI_FALSE;
- }
- s->dist_context_map_slice = s->dist_context_map +
- (s->block_type_rb[5] << BROTLI_DISTANCE_CONTEXT_BITS);
- s->dist_htree_index = s->dist_context_map_slice[s->distance_context];
- return BROTLI_TRUE;
-}
-
-static void BROTLI_NOINLINE DecodeDistanceBlockSwitch(BrotliDecoderState* s) {
- DecodeDistanceBlockSwitchInternal(0, s);
-}
-
-static BROTLI_BOOL BROTLI_NOINLINE SafeDecodeDistanceBlockSwitch(
- BrotliDecoderState* s) {
- return DecodeDistanceBlockSwitchInternal(1, s);
-}
-
-static size_t UnwrittenBytes(const BrotliDecoderState* s, BROTLI_BOOL wrap) {
- size_t pos = wrap && s->pos > s->ringbuffer_size ?
- (size_t)s->ringbuffer_size : (size_t)(s->pos);
- size_t partial_pos_rb = (s->rb_roundtrips * (size_t)s->ringbuffer_size) + pos;
- return partial_pos_rb - s->partial_pos_out;
-}
-
-/* Dumps output.
- Returns BROTLI_DECODER_NEEDS_MORE_OUTPUT only if there is more output to push
- and either ring-buffer is as big as window size, or |force| is true. */
-static BrotliDecoderErrorCode BROTLI_NOINLINE WriteRingBuffer(
- BrotliDecoderState* s, size_t* available_out, uint8_t** next_out,
- size_t* total_out, BROTLI_BOOL force) {
- uint8_t* start =
- s->ringbuffer + (s->partial_pos_out & (size_t)s->ringbuffer_mask);
- size_t to_write = UnwrittenBytes(s, BROTLI_TRUE);
- size_t num_written = *available_out;
- if (num_written > to_write) {
- num_written = to_write;
- }
- if (s->meta_block_remaining_len < 0) {
- return BROTLI_FAILURE(BROTLI_DECODER_ERROR_FORMAT_BLOCK_LENGTH_1);
- }
- if (next_out && !*next_out) {
- *next_out = start;
- } else {
- if (next_out) {
- memcpy(*next_out, start, num_written);
- *next_out += num_written;
- }
- }
- *available_out -= num_written;
- BROTLI_LOG_UINT(to_write);
- BROTLI_LOG_UINT(num_written);
- s->partial_pos_out += num_written;
- if (total_out) {
- *total_out = s->partial_pos_out;
- }
- if (num_written < to_write) {
- if (s->ringbuffer_size == (1 << s->window_bits) || force) {
- return BROTLI_DECODER_NEEDS_MORE_OUTPUT;
- } else {
- return BROTLI_DECODER_SUCCESS;
- }
- }
- /* Wrap ring buffer only if it has reached its maximal size. */
- if (s->ringbuffer_size == (1 << s->window_bits) &&
- s->pos >= s->ringbuffer_size) {
- s->pos -= s->ringbuffer_size;
- s->rb_roundtrips++;
- s->should_wrap_ringbuffer = (size_t)s->pos != 0 ? 1 : 0;
- }
- return BROTLI_DECODER_SUCCESS;
-}
-
-static void BROTLI_NOINLINE WrapRingBuffer(BrotliDecoderState* s) {
- if (s->should_wrap_ringbuffer) {
- memcpy(s->ringbuffer, s->ringbuffer_end, (size_t)s->pos);
- s->should_wrap_ringbuffer = 0;
- }
-}
-
-/* Allocates ring-buffer.
-
- s->ringbuffer_size MUST be updated by BrotliCalculateRingBufferSize before
- this function is called.
-
- Last two bytes of ring-buffer are initialized to 0, so context calculation
- could be done uniformly for the first two and all other positions. */
-static BROTLI_BOOL BROTLI_NOINLINE BrotliEnsureRingBuffer(
- BrotliDecoderState* s) {
- uint8_t* old_ringbuffer = s->ringbuffer;
- if (s->ringbuffer_size == s->new_ringbuffer_size) {
- return BROTLI_TRUE;
- }
-
- s->ringbuffer = (uint8_t*)BROTLI_DECODER_ALLOC(s,
- (size_t)(s->new_ringbuffer_size) + kRingBufferWriteAheadSlack);
- if (s->ringbuffer == 0) {
- /* Restore previous value. */
- s->ringbuffer = old_ringbuffer;
- return BROTLI_FALSE;
- }
- s->ringbuffer[s->new_ringbuffer_size - 2] = 0;
- s->ringbuffer[s->new_ringbuffer_size - 1] = 0;
-
- if (!!old_ringbuffer) {
- memcpy(s->ringbuffer, old_ringbuffer, (size_t)s->pos);
- BROTLI_DECODER_FREE(s, old_ringbuffer);
- }
-
- s->ringbuffer_size = s->new_ringbuffer_size;
- s->ringbuffer_mask = s->new_ringbuffer_size - 1;
- s->ringbuffer_end = s->ringbuffer + s->ringbuffer_size;
-
- return BROTLI_TRUE;
-}
-
-static BrotliDecoderErrorCode BROTLI_NOINLINE CopyUncompressedBlockToOutput(
- size_t* available_out, uint8_t** next_out, size_t* total_out,
- BrotliDecoderState* s) {
- /* TODO: avoid allocation for single uncompressed block. */
- if (!BrotliEnsureRingBuffer(s)) {
- return BROTLI_FAILURE(BROTLI_DECODER_ERROR_ALLOC_RING_BUFFER_1);
- }
-
- /* State machine */
- for (;;) {
- switch (s->substate_uncompressed) {
- case BROTLI_STATE_UNCOMPRESSED_NONE: {
- int nbytes = (int)BrotliGetRemainingBytes(&s->br);
- if (nbytes > s->meta_block_remaining_len) {
- nbytes = s->meta_block_remaining_len;
- }
- if (s->pos + nbytes > s->ringbuffer_size) {
- nbytes = s->ringbuffer_size - s->pos;
- }
- /* Copy remaining bytes from s->br.buf_ to ring-buffer. */
- BrotliCopyBytes(&s->ringbuffer[s->pos], &s->br, (size_t)nbytes);
- s->pos += nbytes;
- s->meta_block_remaining_len -= nbytes;
- if (s->pos < 1 << s->window_bits) {
- if (s->meta_block_remaining_len == 0) {
- return BROTLI_DECODER_SUCCESS;
- }
- return BROTLI_DECODER_NEEDS_MORE_INPUT;
- }
- s->substate_uncompressed = BROTLI_STATE_UNCOMPRESSED_WRITE;
- }
- /* Fall through. */
-
- case BROTLI_STATE_UNCOMPRESSED_WRITE: {
- BrotliDecoderErrorCode result;
- result = WriteRingBuffer(
- s, available_out, next_out, total_out, BROTLI_FALSE);
- if (result != BROTLI_DECODER_SUCCESS) {
- return result;
- }
- if (s->ringbuffer_size == 1 << s->window_bits) {
- s->max_distance = s->max_backward_distance;
- }
- s->substate_uncompressed = BROTLI_STATE_UNCOMPRESSED_NONE;
- break;
- }
- }
- }
- BROTLI_DCHECK(0); /* Unreachable */
-}
-
-/* Calculates the smallest feasible ring buffer.
-
- If we know the data size is small, do not allocate more ring buffer
- size than needed to reduce memory usage.
-
- When this method is called, metablock size and flags MUST be decoded. */
-static void BROTLI_NOINLINE BrotliCalculateRingBufferSize(
- BrotliDecoderState* s) {
- int window_size = 1 << s->window_bits;
- int new_ringbuffer_size = window_size;
- /* We need at least 2 bytes of ring buffer size to get the last two
- bytes for context from there */
- int min_size = s->ringbuffer_size ? s->ringbuffer_size : 1024;
- int output_size;
-
- /* If maximum is already reached, no further extension is retired. */
- if (s->ringbuffer_size == window_size) {
- return;
- }
-
- /* Metadata blocks does not touch ring buffer. */
- if (s->is_metadata) {
- return;
- }
-
- if (!s->ringbuffer) {
- output_size = 0;
- } else {
- output_size = s->pos;
- }
- output_size += s->meta_block_remaining_len;
- min_size = min_size < output_size ? output_size : min_size;
-
- if (!!s->canny_ringbuffer_allocation) {
- /* Reduce ring buffer size to save memory when server is unscrupulous.
- In worst case memory usage might be 1.5x bigger for a short period of
- ring buffer reallocation. */
- while ((new_ringbuffer_size >> 1) >= min_size) {
- new_ringbuffer_size >>= 1;
- }
- }
-
- s->new_ringbuffer_size = new_ringbuffer_size;
-}
-
-/* Reads 1..256 2-bit context modes. */
-static BrotliDecoderErrorCode ReadContextModes(BrotliDecoderState* s) {
- BrotliBitReader* br = &s->br;
- int i = s->loop_counter;
-
- while (i < (int)s->num_block_types[0]) {
- uint32_t bits;
- if (!BrotliSafeReadBits(br, 2, &bits)) {
- s->loop_counter = i;
- return BROTLI_DECODER_NEEDS_MORE_INPUT;
- }
- s->context_modes[i] = (uint8_t)bits;
- BROTLI_LOG_ARRAY_INDEX(s->context_modes, i);
- i++;
- }
- return BROTLI_DECODER_SUCCESS;
-}
-
-static BROTLI_INLINE void TakeDistanceFromRingBuffer(BrotliDecoderState* s) {
- if (s->distance_code == 0) {
- --s->dist_rb_idx;
- s->distance_code = s->dist_rb[s->dist_rb_idx & 3];
- /* Compensate double distance-ring-buffer roll for dictionary items. */
- s->distance_context = 1;
- } else {
- int distance_code = s->distance_code << 1;
- /* kDistanceShortCodeIndexOffset has 2-bit values from LSB:
- 3, 2, 1, 0, 3, 3, 3, 3, 3, 3, 2, 2, 2, 2, 2, 2 */
- const uint32_t kDistanceShortCodeIndexOffset = 0xAAAFFF1B;
- /* kDistanceShortCodeValueOffset has 2-bit values from LSB:
- -0, 0,-0, 0,-1, 1,-2, 2,-3, 3,-1, 1,-2, 2,-3, 3 */
- const uint32_t kDistanceShortCodeValueOffset = 0xFA5FA500;
- int v = (s->dist_rb_idx +
- (int)(kDistanceShortCodeIndexOffset >> distance_code)) & 0x3;
- s->distance_code = s->dist_rb[v];
- v = (int)(kDistanceShortCodeValueOffset >> distance_code) & 0x3;
- if ((distance_code & 0x3) != 0) {
- s->distance_code += v;
- } else {
- s->distance_code -= v;
- if (s->distance_code <= 0) {
- /* A huge distance will cause a BROTLI_FAILURE() soon.
- This is a little faster than failing here. */
- s->distance_code = 0x7FFFFFFF;
- }
- }
- }
-}
-
-static BROTLI_INLINE BROTLI_BOOL SafeReadBits(
- BrotliBitReader* const br, uint32_t n_bits, uint32_t* val) {
- if (n_bits != 0) {
- return BrotliSafeReadBits(br, n_bits, val);
- } else {
- *val = 0;
- return BROTLI_TRUE;
- }
-}
-
-/* Precondition: s->distance_code < 0. */
-static BROTLI_INLINE BROTLI_BOOL ReadDistanceInternal(
- int safe, BrotliDecoderState* s, BrotliBitReader* br) {
- int distval;
- BrotliBitReaderState memento;
- HuffmanCode* distance_tree = s->distance_hgroup.htrees[s->dist_htree_index];
- if (!safe) {
- s->distance_code = (int)ReadSymbol(distance_tree, br);
- } else {
- uint32_t code;
- BrotliBitReaderSaveState(br, &memento);
- if (!SafeReadSymbol(distance_tree, br, &code)) {
- return BROTLI_FALSE;
- }
- s->distance_code = (int)code;
- }
- /* Convert the distance code to the actual distance by possibly
- looking up past distances from the s->ringbuffer. */
- s->distance_context = 0;
- if ((s->distance_code & ~0xF) == 0) {
- TakeDistanceFromRingBuffer(s);
- --s->block_length[2];
- return BROTLI_TRUE;
- }
- distval = s->distance_code - (int)s->num_direct_distance_codes;
- if (distval >= 0) {
- uint32_t nbits;
- int postfix;
- int offset;
- if (!safe && (s->distance_postfix_bits == 0)) {
- nbits = ((uint32_t)distval >> 1) + 1;
- offset = ((2 + (distval & 1)) << nbits) - 4;
- s->distance_code = (int)s->num_direct_distance_codes + offset +
- (int)BrotliReadBits(br, nbits);
- } else {
- /* This branch also works well when s->distance_postfix_bits == 0. */
- uint32_t bits;
- postfix = distval & s->distance_postfix_mask;
- distval >>= s->distance_postfix_bits;
- nbits = ((uint32_t)distval >> 1) + 1;
- if (safe) {
- if (!SafeReadBits(br, nbits, &bits)) {
- s->distance_code = -1; /* Restore precondition. */
- BrotliBitReaderRestoreState(br, &memento);
- return BROTLI_FALSE;
- }
- } else {
- bits = BrotliReadBits(br, nbits);
- }
- offset = ((2 + (distval & 1)) << nbits) - 4;
- s->distance_code = (int)s->num_direct_distance_codes +
- ((offset + (int)bits) << s->distance_postfix_bits) + postfix;
- }
- }
- s->distance_code = s->distance_code - BROTLI_NUM_DISTANCE_SHORT_CODES + 1;
- --s->block_length[2];
- return BROTLI_TRUE;
-}
-
-static BROTLI_INLINE void ReadDistance(
- BrotliDecoderState* s, BrotliBitReader* br) {
- ReadDistanceInternal(0, s, br);
-}
-
-static BROTLI_INLINE BROTLI_BOOL SafeReadDistance(
- BrotliDecoderState* s, BrotliBitReader* br) {
- return ReadDistanceInternal(1, s, br);
-}
-
-static BROTLI_INLINE BROTLI_BOOL ReadCommandInternal(
- int safe, BrotliDecoderState* s, BrotliBitReader* br, int* insert_length) {
- uint32_t cmd_code;
- uint32_t insert_len_extra = 0;
- uint32_t copy_length;
- CmdLutElement v;
- BrotliBitReaderState memento;
- if (!safe) {
- cmd_code = ReadSymbol(s->htree_command, br);
- ASSERT (cmd_code < BROTLI_NUM_COMMAND_SYMBOLS);
- } else {
- BrotliBitReaderSaveState(br, &memento);
- if (!SafeReadSymbol(s->htree_command, br, &cmd_code)) {
- return BROTLI_FALSE;
- }
- }
- v = kCmdLut[cmd_code];
- s->distance_code = v.distance_code;
- s->distance_context = v.context;
- s->dist_htree_index = s->dist_context_map_slice[s->distance_context];
- *insert_length = v.insert_len_offset;
- if (!safe) {
- if (BROTLI_PREDICT_FALSE(v.insert_len_extra_bits != 0)) {
- insert_len_extra = BrotliReadBits(br, v.insert_len_extra_bits);
- }
- copy_length = BrotliReadBits(br, v.copy_len_extra_bits);
- } else {
- if (!SafeReadBits(br, v.insert_len_extra_bits, &insert_len_extra) ||
- !SafeReadBits(br, v.copy_len_extra_bits, ©_length)) {
- BrotliBitReaderRestoreState(br, &memento);
- return BROTLI_FALSE;
- }
- }
- s->copy_length = (int)copy_length + v.copy_len_offset;
- --s->block_length[1];
- *insert_length += (int)insert_len_extra;
- return BROTLI_TRUE;
-}
-
-static BROTLI_INLINE void ReadCommand(
- BrotliDecoderState* s, BrotliBitReader* br, int* insert_length) {
- ReadCommandInternal(0, s, br, insert_length);
-}
-
-static BROTLI_INLINE BROTLI_BOOL SafeReadCommand(
- BrotliDecoderState* s, BrotliBitReader* br, int* insert_length) {
- return ReadCommandInternal(1, s, br, insert_length);
-}
-
-static BROTLI_INLINE BROTLI_BOOL CheckInputAmount(
- int safe, BrotliBitReader* const br, size_t num) {
- if (safe) {
- return BROTLI_TRUE;
- }
- return BrotliCheckInputAmount(br, num);
-}
-
-#define BROTLI_SAFE(METHOD) \
- { \
- if (safe) { \
- if (!Safe##METHOD) { \
- result = BROTLI_DECODER_NEEDS_MORE_INPUT; \
- goto saveStateAndReturn; \
- } \
- } else { \
- METHOD; \
- } \
- }
-
-static BROTLI_INLINE BrotliDecoderErrorCode ProcessCommandsInternal(
- int safe, BrotliDecoderState* s) {
- int pos = s->pos;
- int i = s->loop_counter;
- BrotliDecoderErrorCode result = BROTLI_DECODER_SUCCESS;
- BrotliBitReader* br = &s->br;
-
- if (!CheckInputAmount(safe, br, 28)) {
- result = BROTLI_DECODER_NEEDS_MORE_INPUT;
- goto saveStateAndReturn;
- }
- if (!safe) {
- BROTLI_UNUSED(BrotliWarmupBitReader(br));
- }
-
- /* Jump into state machine. */
- if (s->state == BROTLI_STATE_COMMAND_BEGIN) {
- goto CommandBegin;
- } else if (s->state == BROTLI_STATE_COMMAND_INNER) {
- goto CommandInner;
- } else if (s->state == BROTLI_STATE_COMMAND_POST_DECODE_LITERALS) {
- goto CommandPostDecodeLiterals;
- } else if (s->state == BROTLI_STATE_COMMAND_POST_WRAP_COPY) {
- goto CommandPostWrapCopy;
- } else {
- return BROTLI_FAILURE(BROTLI_DECODER_ERROR_UNREACHABLE);
- }
-
-CommandBegin:
- if (safe) {
- s->state = BROTLI_STATE_COMMAND_BEGIN;
- }
- if (!CheckInputAmount(safe, br, 28)) { /* 156 bits + 7 bytes */
- s->state = BROTLI_STATE_COMMAND_BEGIN;
- result = BROTLI_DECODER_NEEDS_MORE_INPUT;
- goto saveStateAndReturn;
- }
- if (BROTLI_PREDICT_FALSE(s->block_length[1] == 0)) {
- BROTLI_SAFE(DecodeCommandBlockSwitch(s));
- goto CommandBegin;
- }
- /* Read the insert/copy length in the command. */
- BROTLI_SAFE(ReadCommand(s, br, &i));
- BROTLI_LOG(("[ProcessCommandsInternal] pos = %d insert = %d copy = %d\n",
- pos, i, s->copy_length));
- if (i == 0) {
- goto CommandPostDecodeLiterals;
- }
- s->meta_block_remaining_len -= i;
-
-CommandInner:
- if (safe) {
- s->state = BROTLI_STATE_COMMAND_INNER;
- }
- /* Read the literals in the command. */
- if (s->trivial_literal_context) {
- uint32_t bits;
- uint32_t value;
- PreloadSymbol(safe, s->literal_htree, br, &bits, &value);
- do {
- if (!CheckInputAmount(safe, br, 28)) { /* 162 bits + 7 bytes */
- s->state = BROTLI_STATE_COMMAND_INNER;
- result = BROTLI_DECODER_NEEDS_MORE_INPUT;
- goto saveStateAndReturn;
- }
- if (BROTLI_PREDICT_FALSE(s->block_length[0] == 0)) {
- BROTLI_SAFE(DecodeLiteralBlockSwitch(s));
- PreloadSymbol(safe, s->literal_htree, br, &bits, &value);
- if (!s->trivial_literal_context) goto CommandInner;
- }
- if (!safe) {
- s->ringbuffer[pos] =
- (uint8_t)ReadPreloadedSymbol(s->literal_htree, br, &bits, &value);
- } else {
- uint32_t literal;
- if (!SafeReadSymbol(s->literal_htree, br, &literal)) {
- result = BROTLI_DECODER_NEEDS_MORE_INPUT;
- goto saveStateAndReturn;
- }
- s->ringbuffer[pos] = (uint8_t)literal;
- }
- --s->block_length[0];
- BROTLI_LOG_ARRAY_INDEX(s->ringbuffer, pos);
- ++pos;
- if (BROTLI_PREDICT_FALSE(pos == s->ringbuffer_size)) {
- s->state = BROTLI_STATE_COMMAND_INNER_WRITE;
- --i;
- goto saveStateAndReturn;
- }
- } while (--i != 0);
- } else {
- uint8_t p1 = s->ringbuffer[(pos - 1) & s->ringbuffer_mask];
- uint8_t p2 = s->ringbuffer[(pos - 2) & s->ringbuffer_mask];
- do {
- const HuffmanCode* hc;
- uint8_t context;
- if (!CheckInputAmount(safe, br, 28)) { /* 162 bits + 7 bytes */
- s->state = BROTLI_STATE_COMMAND_INNER;
- result = BROTLI_DECODER_NEEDS_MORE_INPUT;
- goto saveStateAndReturn;
- }
- if (BROTLI_PREDICT_FALSE(s->block_length[0] == 0)) {
- BROTLI_SAFE(DecodeLiteralBlockSwitch(s));
- if (s->trivial_literal_context) goto CommandInner;
- }
- context = BROTLI_CONTEXT(p1, p2, s->context_lookup);
- BROTLI_LOG_UINT(context);
- hc = s->literal_hgroup.htrees[s->context_map_slice[context]];
- p2 = p1;
- if (!safe) {
- p1 = (uint8_t)ReadSymbol(hc, br);
- } else {
- uint32_t literal;
- if (!SafeReadSymbol(hc, br, &literal)) {
- result = BROTLI_DECODER_NEEDS_MORE_INPUT;
- goto saveStateAndReturn;
- }
- p1 = (uint8_t)literal;
- }
- s->ringbuffer[pos] = p1;
- --s->block_length[0];
- BROTLI_LOG_UINT(s->context_map_slice[context]);
- BROTLI_LOG_ARRAY_INDEX(s->ringbuffer, pos & s->ringbuffer_mask);
- ++pos;
- if (BROTLI_PREDICT_FALSE(pos == s->ringbuffer_size)) {
- s->state = BROTLI_STATE_COMMAND_INNER_WRITE;
- --i;
- goto saveStateAndReturn;
- }
- } while (--i != 0);
- }
- BROTLI_LOG_UINT(s->meta_block_remaining_len);
- if (BROTLI_PREDICT_FALSE(s->meta_block_remaining_len <= 0)) {
- s->state = BROTLI_STATE_METABLOCK_DONE;
- goto saveStateAndReturn;
- }
-
-CommandPostDecodeLiterals:
- if (safe) {
- s->state = BROTLI_STATE_COMMAND_POST_DECODE_LITERALS;
- }
- if (s->distance_code >= 0) {
- /* Implicit distance case. */
- s->distance_context = s->distance_code ? 0 : 1;
- --s->dist_rb_idx;
- s->distance_code = s->dist_rb[s->dist_rb_idx & 3];
- } else {
- /* Read distance code in the command, unless it was implicitly zero. */
- if (BROTLI_PREDICT_FALSE(s->block_length[2] == 0)) {
- BROTLI_SAFE(DecodeDistanceBlockSwitch(s));
- }
- BROTLI_SAFE(ReadDistance(s, br));
- }
- BROTLI_LOG(("[ProcessCommandsInternal] pos = %d distance = %d\n",
- pos, s->distance_code));
- if (s->max_distance != s->max_backward_distance) {
- s->max_distance =
- (pos < s->max_backward_distance) ? pos : s->max_backward_distance;
- }
- i = s->copy_length;
- /* Apply copy of LZ77 back-reference, or static dictionary reference if
- the distance is larger than the max LZ77 distance */
- if (s->distance_code > s->max_distance) {
- /* The maximum allowed distance is BROTLI_MAX_ALLOWED_DISTANCE = 0x7FFFFFFC.
- With this choice, no signed overflow can occur after decoding
- a special distance code (e.g., after adding 3 to the last distance). */
- if (s->distance_code > BROTLI_MAX_ALLOWED_DISTANCE) {
- BROTLI_LOG(("Invalid backward reference. pos: %d distance: %d "
- "len: %d bytes left: %d\n",
- pos, s->distance_code, i, s->meta_block_remaining_len));
- return BROTLI_FAILURE(BROTLI_DECODER_ERROR_FORMAT_DISTANCE);
- }
- if (i >= BROTLI_MIN_DICTIONARY_WORD_LENGTH &&
- i <= BROTLI_MAX_DICTIONARY_WORD_LENGTH) {
- int address = s->distance_code - s->max_distance - 1;
- const BrotliDictionary* words = s->dictionary;
- const BrotliTransforms* transforms = s->transforms;
- int offset = (int)s->dictionary->offsets_by_length[i];
- uint32_t shift = s->dictionary->size_bits_by_length[i];
-
- int mask = (int)BitMask(shift);
- int word_idx = address & mask;
- int transform_idx = address >> shift;
- /* Compensate double distance-ring-buffer roll. */
- s->dist_rb_idx += s->distance_context;
- offset += word_idx * i;
- if (BROTLI_PREDICT_FALSE(!words->data)) {
- return BROTLI_FAILURE(BROTLI_DECODER_ERROR_DICTIONARY_NOT_SET);
- }
- if (transform_idx < (int)transforms->num_transforms) {
- const uint8_t* word = &words->data[offset];
- int len = i;
- if (transform_idx == transforms->cutOffTransforms[0]) {
- memcpy(&s->ringbuffer[pos], word, (size_t)len);
- BROTLI_LOG(("[ProcessCommandsInternal] dictionary word: [%.*s]\n",
- len, word));
- } else {
- len = BrotliTransformDictionaryWord(&s->ringbuffer[pos], word, len,
- transforms, transform_idx);
- BROTLI_LOG(("[ProcessCommandsInternal] dictionary word: [%.*s],"
- " transform_idx = %d, transformed: [%.*s]\n",
- i, word, transform_idx, len, &s->ringbuffer[pos]));
- }
- pos += len;
- s->meta_block_remaining_len -= len;
- if (pos >= s->ringbuffer_size) {
- s->state = BROTLI_STATE_COMMAND_POST_WRITE_1;
- goto saveStateAndReturn;
- }
- } else {
- BROTLI_LOG(("Invalid backward reference. pos: %d distance: %d "
- "len: %d bytes left: %d\n",
- pos, s->distance_code, i, s->meta_block_remaining_len));
- return BROTLI_FAILURE(BROTLI_DECODER_ERROR_FORMAT_TRANSFORM);
- }
- } else {
- BROTLI_LOG(("Invalid backward reference. pos: %d distance: %d "
- "len: %d bytes left: %d\n",
- pos, s->distance_code, i, s->meta_block_remaining_len));
- return BROTLI_FAILURE(BROTLI_DECODER_ERROR_FORMAT_DICTIONARY);
- }
- } else {
- int src_start = (pos - s->distance_code) & s->ringbuffer_mask;
- uint8_t* copy_dst = &s->ringbuffer[pos];
- uint8_t* copy_src = &s->ringbuffer[src_start];
- int dst_end = pos + i;
- int src_end = src_start + i;
- /* Update the recent distances cache. */
- s->dist_rb[s->dist_rb_idx & 3] = s->distance_code;
- ++s->dist_rb_idx;
- s->meta_block_remaining_len -= i;
- /* There are 32+ bytes of slack in the ring-buffer allocation.
- Also, we have 16 short codes, that make these 16 bytes irrelevant
- in the ring-buffer. Let's copy over them as a first guess. */
- memmove16(copy_dst, copy_src);
- if (src_end > pos && dst_end > src_start) {
- /* Regions intersect. */
- goto CommandPostWrapCopy;
- }
- if (dst_end >= s->ringbuffer_size || src_end >= s->ringbuffer_size) {
- /* At least one region wraps. */
- goto CommandPostWrapCopy;
- }
- pos += i;
- if (i > 16) {
- if (i > 32) {
- memcpy(copy_dst + 16, copy_src + 16, (size_t)(i - 16));
- } else {
- /* This branch covers about 45% cases.
- Fixed size short copy allows more compiler optimizations. */
- memmove16(copy_dst + 16, copy_src + 16);
- }
- }
- }
- BROTLI_LOG_UINT(s->meta_block_remaining_len);
- if (s->meta_block_remaining_len <= 0) {
- /* Next metablock, if any. */
- s->state = BROTLI_STATE_METABLOCK_DONE;
- goto saveStateAndReturn;
- } else {
- goto CommandBegin;
- }
-CommandPostWrapCopy:
- {
- int wrap_guard = s->ringbuffer_size - pos;
- while (--i >= 0) {
- s->ringbuffer[pos] =
- s->ringbuffer[(pos - s->distance_code) & s->ringbuffer_mask];
- ++pos;
- if (BROTLI_PREDICT_FALSE(--wrap_guard == 0)) {
- s->state = BROTLI_STATE_COMMAND_POST_WRITE_2;
- goto saveStateAndReturn;
- }
- }
- }
- if (s->meta_block_remaining_len <= 0) {
- /* Next metablock, if any. */
- s->state = BROTLI_STATE_METABLOCK_DONE;
- goto saveStateAndReturn;
- } else {
- goto CommandBegin;
- }
-
-saveStateAndReturn:
- s->pos = pos;
- s->loop_counter = i;
- return result;
-}
-
-#undef BROTLI_SAFE
-
-static BROTLI_NOINLINE BrotliDecoderErrorCode ProcessCommands(
- BrotliDecoderState* s) {
- return ProcessCommandsInternal(0, s);
-}
-
-static BROTLI_NOINLINE BrotliDecoderErrorCode SafeProcessCommands(
- BrotliDecoderState* s) {
- return ProcessCommandsInternal(1, s);
-}
-
-/* Returns the maximum number of distance symbols which can only represent
- distances not exceeding BROTLI_MAX_ALLOWED_DISTANCE. */
-static uint32_t BrotliMaxDistanceSymbol(uint32_t ndirect, uint32_t npostfix) {
- static const uint32_t bound[BROTLI_MAX_NPOSTFIX + 1] = {0, 4, 12, 28};
- static const uint32_t diff[BROTLI_MAX_NPOSTFIX + 1] = {73, 126, 228, 424};
- uint32_t postfix = 1U << npostfix;
- if (ndirect < bound[npostfix]) {
- return ndirect + diff[npostfix] + postfix;
- } else if (ndirect > bound[npostfix] + postfix) {
- return ndirect + diff[npostfix];
- } else {
- return bound[npostfix] + diff[npostfix] + postfix;
- }
-}
-
-BrotliDecoderResult BrotliDecoderDecompress(
- size_t encoded_size, const uint8_t* encoded_buffer, size_t* decoded_size,
- uint8_t* decoded_buffer) {
- BrotliDecoderState s;
- BrotliDecoderResult result;
- size_t total_out = 0;
- size_t available_in = encoded_size;
- const uint8_t* next_in = encoded_buffer;
- size_t available_out = *decoded_size;
- uint8_t* next_out = decoded_buffer;
- if (!BrotliDecoderStateInit(&s, 0, 0, 0)) {
- return BROTLI_DECODER_RESULT_ERROR;
- }
- result = BrotliDecoderDecompressStream(
- &s, &available_in, &next_in, &available_out, &next_out, &total_out);
- *decoded_size = total_out;
- BrotliDecoderStateCleanup(&s);
- if (result != BROTLI_DECODER_RESULT_SUCCESS) {
- result = BROTLI_DECODER_RESULT_ERROR;
- }
- return result;
-}
-
-/* Invariant: input stream is never overconsumed:
- - invalid input implies that the whole stream is invalid -> any amount of
- input could be read and discarded
- - when result is "needs more input", then at least one more byte is REQUIRED
- to complete decoding; all input data MUST be consumed by decoder, so
- client could swap the input buffer
- - when result is "needs more output" decoder MUST ensure that it doesn't
- hold more than 7 bits in bit reader; this saves client from swapping input
- buffer ahead of time
- - when result is "success" decoder MUST return all unused data back to input
- buffer; this is possible because the invariant is held on enter */
-BrotliDecoderResult BrotliDecoderDecompressStream(
- BrotliDecoderState* s, size_t* available_in, const uint8_t** next_in,
- size_t* available_out, uint8_t** next_out, size_t* total_out) {
- BrotliDecoderErrorCode result = BROTLI_DECODER_SUCCESS;
- BrotliBitReader* br = &s->br;
- /* Ensure that |total_out| is set, even if no data will ever be pushed out. */
- if (total_out) {
- *total_out = s->partial_pos_out;
- }
- /* Do not try to process further in a case of unrecoverable error. */
- if ((int)s->error_code < 0) {
- return BROTLI_DECODER_RESULT_ERROR;
- }
- if (*available_out && (!next_out || !*next_out)) {
- return SaveErrorCode(
- s, BROTLI_FAILURE(BROTLI_DECODER_ERROR_INVALID_ARGUMENTS));
- }
- if (!*available_out) next_out = 0;
- if (s->buffer_length == 0) { /* Just connect bit reader to input stream. */
- br->avail_in = *available_in;
- br->next_in = *next_in;
- } else {
- /* At least one byte of input is required. More than one byte of input may
- be required to complete the transaction -> reading more data must be
- done in a loop -> do it in a main loop. */
- result = BROTLI_DECODER_NEEDS_MORE_INPUT;
- br->next_in = &s->buffer.u8[0];
- }
- /* State machine */
- for (;;) {
- if (result != BROTLI_DECODER_SUCCESS) {
- /* Error, needs more input/output. */
- if (result == BROTLI_DECODER_NEEDS_MORE_INPUT) {
- if (s->ringbuffer != 0) { /* Pro-actively push output. */
- BrotliDecoderErrorCode intermediate_result = WriteRingBuffer(s,
- available_out, next_out, total_out, BROTLI_TRUE);
- /* WriteRingBuffer checks s->meta_block_remaining_len validity. */
- if ((int)intermediate_result < 0) {
- result = intermediate_result;
- break;
- }
- }
- if (s->buffer_length != 0) { /* Used with internal buffer. */
- if (br->avail_in == 0) {
- /* Successfully finished read transaction.
- Accumulator contains less than 8 bits, because internal buffer
- is expanded byte-by-byte until it is enough to complete read. */
- s->buffer_length = 0;
- /* Switch to input stream and restart. */
- result = BROTLI_DECODER_SUCCESS;
- br->avail_in = *available_in;
- br->next_in = *next_in;
- continue;
- } else if (*available_in != 0) {
- /* Not enough data in buffer, but can take one more byte from
- input stream. */
- result = BROTLI_DECODER_SUCCESS;
- s->buffer.u8[s->buffer_length] = **next_in;
- s->buffer_length++;
- br->avail_in = s->buffer_length;
- (*next_in)++;
- (*available_in)--;
- /* Retry with more data in buffer. */
- continue;
- }
- /* Can't finish reading and no more input. */
- break;
- } else { /* Input stream doesn't contain enough input. */
- /* Copy tail to internal buffer and return. */
- *next_in = br->next_in;
- *available_in = br->avail_in;
- while (*available_in) {
- s->buffer.u8[s->buffer_length] = **next_in;
- s->buffer_length++;
- (*next_in)++;
- (*available_in)--;
- }
- break;
- }
- /* Unreachable. */
- }
-
- /* Fail or needs more output. */
-
- if (s->buffer_length != 0) {
- /* Just consumed the buffered input and produced some output. Otherwise
- it would result in "needs more input". Reset internal buffer. */
- s->buffer_length = 0;
- } else {
- /* Using input stream in last iteration. When decoder switches to input
- stream it has less than 8 bits in accumulator, so it is safe to
- return unused accumulator bits there. */
- BrotliBitReaderUnload(br);
- *available_in = br->avail_in;
- *next_in = br->next_in;
- }
- break;
- }
- switch (s->state) {
- case BROTLI_STATE_UNINITED:
- /* Prepare to the first read. */
- if (!BrotliWarmupBitReader(br)) {
- result = BROTLI_DECODER_NEEDS_MORE_INPUT;
- break;
- }
- /* Decode window size. */
- result = DecodeWindowBits(s, br); /* Reads 1..8 bits. */
- if (result != BROTLI_DECODER_SUCCESS) {
- break;
- }
- if (s->large_window) {
- s->state = BROTLI_STATE_LARGE_WINDOW_BITS;
- break;
- }
- s->state = BROTLI_STATE_INITIALIZE;
- break;
-
- case BROTLI_STATE_LARGE_WINDOW_BITS:
- if (!BrotliSafeReadBits(br, 6, &s->window_bits)) {
- result = BROTLI_DECODER_NEEDS_MORE_INPUT;
- break;
- }
- if (s->window_bits < BROTLI_LARGE_MIN_WBITS ||
- s->window_bits > BROTLI_LARGE_MAX_WBITS) {
- result = BROTLI_FAILURE(BROTLI_DECODER_ERROR_FORMAT_WINDOW_BITS);
- break;
- }
- s->state = BROTLI_STATE_INITIALIZE;
- /* Fall through. */
-
- case BROTLI_STATE_INITIALIZE:
- BROTLI_LOG_UINT(s->window_bits);
- /* Maximum distance, see section 9.1. of the spec. */
- s->max_backward_distance = (1 << s->window_bits) - BROTLI_WINDOW_GAP;
-
- /* Allocate memory for both block_type_trees and block_len_trees. */
- s->block_type_trees = (HuffmanCode*)BROTLI_DECODER_ALLOC(s,
- sizeof(HuffmanCode) * 3 *
- (BROTLI_HUFFMAN_MAX_SIZE_258 + BROTLI_HUFFMAN_MAX_SIZE_26));
- if (s->block_type_trees == 0) {
- result = BROTLI_FAILURE(BROTLI_DECODER_ERROR_ALLOC_BLOCK_TYPE_TREES);
- break;
- }
- s->block_len_trees =
- s->block_type_trees + 3 * BROTLI_HUFFMAN_MAX_SIZE_258;
-
- s->state = BROTLI_STATE_METABLOCK_BEGIN;
- /* Fall through. */
-
- case BROTLI_STATE_METABLOCK_BEGIN:
- BrotliDecoderStateMetablockBegin(s);
- BROTLI_LOG_UINT(s->pos);
- s->state = BROTLI_STATE_METABLOCK_HEADER;
- /* Fall through. */
-
- case BROTLI_STATE_METABLOCK_HEADER:
- result = DecodeMetaBlockLength(s, br); /* Reads 2 - 31 bits. */
- if (result != BROTLI_DECODER_SUCCESS) {
- break;
- }
- BROTLI_LOG_UINT(s->is_last_metablock);
- BROTLI_LOG_UINT(s->meta_block_remaining_len);
- BROTLI_LOG_UINT(s->is_metadata);
- BROTLI_LOG_UINT(s->is_uncompressed);
- if (s->is_metadata || s->is_uncompressed) {
- if (!BrotliJumpToByteBoundary(br)) {
- result = BROTLI_FAILURE(BROTLI_DECODER_ERROR_FORMAT_PADDING_1);
- break;
- }
- }
- if (s->is_metadata) {
- s->state = BROTLI_STATE_METADATA;
- break;
- }
- if (s->meta_block_remaining_len == 0) {
- s->state = BROTLI_STATE_METABLOCK_DONE;
- break;
- }
- BrotliCalculateRingBufferSize(s);
- if (s->is_uncompressed) {
- s->state = BROTLI_STATE_UNCOMPRESSED;
- break;
- }
- s->loop_counter = 0;
- s->state = BROTLI_STATE_HUFFMAN_CODE_0;
- break;
-
- case BROTLI_STATE_UNCOMPRESSED: {
- result = CopyUncompressedBlockToOutput(
- available_out, next_out, total_out, s);
- if (result != BROTLI_DECODER_SUCCESS) {
- break;
- }
- s->state = BROTLI_STATE_METABLOCK_DONE;
- break;
- }
-
- case BROTLI_STATE_METADATA:
- for (; s->meta_block_remaining_len > 0; --s->meta_block_remaining_len) {
- uint32_t bits;
- /* Read one byte and ignore it. */
- if (!BrotliSafeReadBits(br, 8, &bits)) {
- result = BROTLI_DECODER_NEEDS_MORE_INPUT;
- break;
- }
- }
- if (result == BROTLI_DECODER_SUCCESS) {
- s->state = BROTLI_STATE_METABLOCK_DONE;
- }
- break;
-
- case BROTLI_STATE_HUFFMAN_CODE_0:
- if (s->loop_counter >= 3) {
- s->state = BROTLI_STATE_METABLOCK_HEADER_2;
- break;
- }
- /* Reads 1..11 bits. */
- result = DecodeVarLenUint8(s, br, &s->num_block_types[s->loop_counter]);
- if (result != BROTLI_DECODER_SUCCESS) {
- break;
- }
- s->num_block_types[s->loop_counter]++;
- BROTLI_LOG_UINT(s->num_block_types[s->loop_counter]);
- if (s->num_block_types[s->loop_counter] < 2) {
- s->loop_counter++;
- break;
- }
- s->state = BROTLI_STATE_HUFFMAN_CODE_1;
- /* Fall through. */
-
- case BROTLI_STATE_HUFFMAN_CODE_1: {
- uint32_t alphabet_size = s->num_block_types[s->loop_counter] + 2;
- int tree_offset = s->loop_counter * BROTLI_HUFFMAN_MAX_SIZE_258;
- result = ReadHuffmanCode(alphabet_size, alphabet_size,
- &s->block_type_trees[tree_offset], NULL, s);
- if (result != BROTLI_DECODER_SUCCESS) break;
- s->state = BROTLI_STATE_HUFFMAN_CODE_2;
- }
- /* Fall through. */
-
- case BROTLI_STATE_HUFFMAN_CODE_2: {
- uint32_t alphabet_size = BROTLI_NUM_BLOCK_LEN_SYMBOLS;
- int tree_offset = s->loop_counter * BROTLI_HUFFMAN_MAX_SIZE_26;
- result = ReadHuffmanCode(alphabet_size, alphabet_size,
- &s->block_len_trees[tree_offset], NULL, s);
- if (result != BROTLI_DECODER_SUCCESS) break;
- s->state = BROTLI_STATE_HUFFMAN_CODE_3;
- }
- /* Fall through. */
-
- case BROTLI_STATE_HUFFMAN_CODE_3: {
- int tree_offset = s->loop_counter * BROTLI_HUFFMAN_MAX_SIZE_26;
- if (!SafeReadBlockLength(s, &s->block_length[s->loop_counter],
- &s->block_len_trees[tree_offset], br)) {
- result = BROTLI_DECODER_NEEDS_MORE_INPUT;
- break;
- }
- BROTLI_LOG_UINT(s->block_length[s->loop_counter]);
- s->loop_counter++;
- s->state = BROTLI_STATE_HUFFMAN_CODE_0;
- break;
- }
-
- case BROTLI_STATE_METABLOCK_HEADER_2: {
- uint32_t bits;
- if (!BrotliSafeReadBits(br, 6, &bits)) {
- result = BROTLI_DECODER_NEEDS_MORE_INPUT;
- break;
- }
- s->distance_postfix_bits = bits & BitMask(2);
- bits >>= 2;
- s->num_direct_distance_codes = BROTLI_NUM_DISTANCE_SHORT_CODES +
- (bits << s->distance_postfix_bits);
- BROTLI_LOG_UINT(s->num_direct_distance_codes);
- BROTLI_LOG_UINT(s->distance_postfix_bits);
- s->distance_postfix_mask = (int)BitMask(s->distance_postfix_bits);
- s->context_modes =
- (uint8_t*)BROTLI_DECODER_ALLOC(s, (size_t)s->num_block_types[0]);
- if (s->context_modes == 0) {
- result = BROTLI_FAILURE(BROTLI_DECODER_ERROR_ALLOC_CONTEXT_MODES);
- break;
- }
- s->loop_counter = 0;
- s->state = BROTLI_STATE_CONTEXT_MODES;
- }
- /* Fall through. */
-
- case BROTLI_STATE_CONTEXT_MODES:
- result = ReadContextModes(s);
- if (result != BROTLI_DECODER_SUCCESS) {
- break;
- }
- s->state = BROTLI_STATE_CONTEXT_MAP_1;
- /* Fall through. */
-
- case BROTLI_STATE_CONTEXT_MAP_1:
- result = DecodeContextMap(
- s->num_block_types[0] << BROTLI_LITERAL_CONTEXT_BITS,
- &s->num_literal_htrees, &s->context_map, s);
- if (result != BROTLI_DECODER_SUCCESS) {
- break;
- }
- DetectTrivialLiteralBlockTypes(s);
- s->state = BROTLI_STATE_CONTEXT_MAP_2;
- /* Fall through. */
-
- case BROTLI_STATE_CONTEXT_MAP_2: {
- uint32_t num_direct_codes =
- s->num_direct_distance_codes - BROTLI_NUM_DISTANCE_SHORT_CODES;
- uint32_t num_distance_codes = BROTLI_DISTANCE_ALPHABET_SIZE(
- s->distance_postfix_bits, num_direct_codes,
- (s->large_window ? BROTLI_LARGE_MAX_DISTANCE_BITS :
- BROTLI_MAX_DISTANCE_BITS));
- uint32_t max_distance_symbol = (s->large_window ?
- BrotliMaxDistanceSymbol(
- num_direct_codes, s->distance_postfix_bits) :
- num_distance_codes);
- BROTLI_BOOL allocation_success = BROTLI_TRUE;
- result = DecodeContextMap(
- s->num_block_types[2] << BROTLI_DISTANCE_CONTEXT_BITS,
- &s->num_dist_htrees, &s->dist_context_map, s);
- if (result != BROTLI_DECODER_SUCCESS) {
- break;
- }
- allocation_success &= BrotliDecoderHuffmanTreeGroupInit(
- s, &s->literal_hgroup, BROTLI_NUM_LITERAL_SYMBOLS,
- BROTLI_NUM_LITERAL_SYMBOLS, s->num_literal_htrees);
- allocation_success &= BrotliDecoderHuffmanTreeGroupInit(
- s, &s->insert_copy_hgroup, BROTLI_NUM_COMMAND_SYMBOLS,
- BROTLI_NUM_COMMAND_SYMBOLS, s->num_block_types[1]);
- allocation_success &= BrotliDecoderHuffmanTreeGroupInit(
- s, &s->distance_hgroup, num_distance_codes,
- max_distance_symbol, s->num_dist_htrees);
- if (!allocation_success) {
- return SaveErrorCode(s,
- BROTLI_FAILURE(BROTLI_DECODER_ERROR_ALLOC_TREE_GROUPS));
- }
- s->loop_counter = 0;
- s->state = BROTLI_STATE_TREE_GROUP;
- }
- /* Fall through. */
-
- case BROTLI_STATE_TREE_GROUP: {
- HuffmanTreeGroup* hgroup = NULL;
- switch (s->loop_counter) {
- case 0: hgroup = &s->literal_hgroup; break;
- case 1: hgroup = &s->insert_copy_hgroup; break;
- case 2: hgroup = &s->distance_hgroup; break;
- default: return SaveErrorCode(s, BROTLI_FAILURE(
- BROTLI_DECODER_ERROR_UNREACHABLE));
- }
- result = HuffmanTreeGroupDecode(hgroup, s);
- if (result != BROTLI_DECODER_SUCCESS) break;
- s->loop_counter++;
- if (s->loop_counter >= 3) {
- PrepareLiteralDecoding(s);
- s->dist_context_map_slice = s->dist_context_map;
- s->htree_command = s->insert_copy_hgroup.htrees[0];
- if (!BrotliEnsureRingBuffer(s)) {
- result = BROTLI_FAILURE(BROTLI_DECODER_ERROR_ALLOC_RING_BUFFER_2);
- break;
- }
- s->state = BROTLI_STATE_COMMAND_BEGIN;
- }
- break;
- }
-
- case BROTLI_STATE_COMMAND_BEGIN:
- /* Fall through. */
- case BROTLI_STATE_COMMAND_INNER:
- /* Fall through. */
- case BROTLI_STATE_COMMAND_POST_DECODE_LITERALS:
- /* Fall through. */
- case BROTLI_STATE_COMMAND_POST_WRAP_COPY:
- result = ProcessCommands(s);
- if (result == BROTLI_DECODER_NEEDS_MORE_INPUT) {
- result = SafeProcessCommands(s);
- }
- break;
-
- case BROTLI_STATE_COMMAND_INNER_WRITE:
- /* Fall through. */
- case BROTLI_STATE_COMMAND_POST_WRITE_1:
- /* Fall through. */
- case BROTLI_STATE_COMMAND_POST_WRITE_2:
- result = WriteRingBuffer(
- s, available_out, next_out, total_out, BROTLI_FALSE);
- if (result != BROTLI_DECODER_SUCCESS) {
- break;
- }
- WrapRingBuffer(s);
- if (s->ringbuffer_size == 1 << s->window_bits) {
- s->max_distance = s->max_backward_distance;
- }
- if (s->state == BROTLI_STATE_COMMAND_POST_WRITE_1) {
- if (s->meta_block_remaining_len == 0) {
- /* Next metablock, if any. */
- s->state = BROTLI_STATE_METABLOCK_DONE;
- } else {
- s->state = BROTLI_STATE_COMMAND_BEGIN;
- }
- break;
- } else if (s->state == BROTLI_STATE_COMMAND_POST_WRITE_2) {
- s->state = BROTLI_STATE_COMMAND_POST_WRAP_COPY;
- } else { /* BROTLI_STATE_COMMAND_INNER_WRITE */
- if (s->loop_counter == 0) {
- if (s->meta_block_remaining_len == 0) {
- s->state = BROTLI_STATE_METABLOCK_DONE;
- } else {
- s->state = BROTLI_STATE_COMMAND_POST_DECODE_LITERALS;
- }
- break;
- }
- s->state = BROTLI_STATE_COMMAND_INNER;
- }
- break;
-
- case BROTLI_STATE_METABLOCK_DONE:
- if (s->meta_block_remaining_len < 0) {
- result = BROTLI_FAILURE(BROTLI_DECODER_ERROR_FORMAT_BLOCK_LENGTH_2);
- break;
- }
- BrotliDecoderStateCleanupAfterMetablock(s);
- if (!s->is_last_metablock) {
- s->state = BROTLI_STATE_METABLOCK_BEGIN;
- break;
- }
- if (!BrotliJumpToByteBoundary(br)) {
- result = BROTLI_FAILURE(BROTLI_DECODER_ERROR_FORMAT_PADDING_2);
- break;
- }
- if (s->buffer_length == 0) {
- BrotliBitReaderUnload(br);
- *available_in = br->avail_in;
- *next_in = br->next_in;
- }
- s->state = BROTLI_STATE_DONE;
- /* Fall through. */
-
- case BROTLI_STATE_DONE:
- if (s->ringbuffer != 0) {
- result = WriteRingBuffer(
- s, available_out, next_out, total_out, BROTLI_TRUE);
- if (result != BROTLI_DECODER_SUCCESS) {
- break;
- }
- }
- return SaveErrorCode(s, result);
- }
- }
- return SaveErrorCode(s, result);
-}
-
-BROTLI_BOOL BrotliDecoderHasMoreOutput(const BrotliDecoderState* s) {
- /* After unrecoverable error remaining output is considered nonsensical. */
- if ((int)s->error_code < 0) {
- return BROTLI_FALSE;
- }
- return TO_BROTLI_BOOL(
- s->ringbuffer != 0 && UnwrittenBytes(s, BROTLI_FALSE) != 0);
-}
-
-const uint8_t* BrotliDecoderTakeOutput(BrotliDecoderState* s, size_t* size) {
- uint8_t* result = 0;
- size_t available_out = *size ? *size : 1u << 24;
- size_t requested_out = available_out;
- BrotliDecoderErrorCode status;
- if ((s->ringbuffer == 0) || ((int)s->error_code < 0)) {
- *size = 0;
- return 0;
- }
- WrapRingBuffer(s);
- status = WriteRingBuffer(s, &available_out, &result, 0, BROTLI_TRUE);
- /* Either WriteRingBuffer returns those "success" codes... */
- if (status == BROTLI_DECODER_SUCCESS ||
- status == BROTLI_DECODER_NEEDS_MORE_OUTPUT) {
- *size = requested_out - available_out;
- } else {
- /* ... or stream is broken. Normally this should be caught by
- BrotliDecoderDecompressStream, this is just a safeguard. */
- if ((int)status < 0) SaveErrorCode(s, status);
- *size = 0;
- result = 0;
- }
- return result;
-}
-
-BROTLI_BOOL BrotliDecoderIsUsed(const BrotliDecoderState* s) {
- return TO_BROTLI_BOOL(s->state != BROTLI_STATE_UNINITED ||
- BrotliGetAvailableBits(&s->br) != 0);
-}
-
-BROTLI_BOOL BrotliDecoderIsFinished(const BrotliDecoderState* s) {
- return TO_BROTLI_BOOL(s->state == BROTLI_STATE_DONE) &&
- !BrotliDecoderHasMoreOutput(s);
-}
-
-BrotliDecoderErrorCode BrotliDecoderGetErrorCode(const BrotliDecoderState* s) {
- return (BrotliDecoderErrorCode)s->error_code;
-}
-
-const char* BrotliDecoderErrorString(BrotliDecoderErrorCode c) {
- switch (c) {
-#define BROTLI_ERROR_CODE_CASE_(PREFIX, NAME, CODE) \
- case BROTLI_DECODER ## PREFIX ## NAME: return #NAME;
-#define BROTLI_NOTHING_
- BROTLI_DECODER_ERROR_CODES_LIST(BROTLI_ERROR_CODE_CASE_, BROTLI_NOTHING_)
-#undef BROTLI_ERROR_CODE_CASE_
-#undef BROTLI_NOTHING_
- default: return "INVALID";
- }
-}
-
-uint32_t BrotliDecoderVersion() {
- return BROTLI_VERSION;
-}
-
-#if defined(__cplusplus) || defined(c_plusplus)
-} /* extern "C" */
-#endif
diff --git a/MdeModulePkg/Library/BrotliCustomDecompressLib/dec/huffman.c b/MdeModulePkg/Library/BrotliCustomDecompressLib/dec/huffman.c
deleted file mode 100644
index bf20109e07d5..000000000000
--- a/MdeModulePkg/Library/BrotliCustomDecompressLib/dec/huffman.c
+++ /dev/null
@@ -1,356 +0,0 @@
-/* Copyright 2013 Google Inc. All Rights Reserved.
-
- Distributed under MIT license.
- See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
-*/
-
-/* Utilities for building Huffman decoding tables. */
-
-#include "./huffman.h"
-
-//#include <string.h> /* memcpy, memset */
-
-#include "../common/constants.h"
-#include "../common/platform.h"
-#include <brotli/types.h>
-
-#if defined(__cplusplus) || defined(c_plusplus)
-extern "C" {
-#endif
-
-#define BROTLI_REVERSE_BITS_MAX 8
-
-#if defined(BROTLI_RBIT)
-#define BROTLI_REVERSE_BITS_BASE \
- ((sizeof(brotli_reg_t) << 3) - BROTLI_REVERSE_BITS_MAX)
-#else
-#define BROTLI_REVERSE_BITS_BASE 0
-static uint8_t kReverseBits[1 << BROTLI_REVERSE_BITS_MAX] = {
- 0x00, 0x80, 0x40, 0xC0, 0x20, 0xA0, 0x60, 0xE0,
- 0x10, 0x90, 0x50, 0xD0, 0x30, 0xB0, 0x70, 0xF0,
- 0x08, 0x88, 0x48, 0xC8, 0x28, 0xA8, 0x68, 0xE8,
- 0x18, 0x98, 0x58, 0xD8, 0x38, 0xB8, 0x78, 0xF8,
- 0x04, 0x84, 0x44, 0xC4, 0x24, 0xA4, 0x64, 0xE4,
- 0x14, 0x94, 0x54, 0xD4, 0x34, 0xB4, 0x74, 0xF4,
- 0x0C, 0x8C, 0x4C, 0xCC, 0x2C, 0xAC, 0x6C, 0xEC,
- 0x1C, 0x9C, 0x5C, 0xDC, 0x3C, 0xBC, 0x7C, 0xFC,
- 0x02, 0x82, 0x42, 0xC2, 0x22, 0xA2, 0x62, 0xE2,
- 0x12, 0x92, 0x52, 0xD2, 0x32, 0xB2, 0x72, 0xF2,
- 0x0A, 0x8A, 0x4A, 0xCA, 0x2A, 0xAA, 0x6A, 0xEA,
- 0x1A, 0x9A, 0x5A, 0xDA, 0x3A, 0xBA, 0x7A, 0xFA,
- 0x06, 0x86, 0x46, 0xC6, 0x26, 0xA6, 0x66, 0xE6,
- 0x16, 0x96, 0x56, 0xD6, 0x36, 0xB6, 0x76, 0xF6,
- 0x0E, 0x8E, 0x4E, 0xCE, 0x2E, 0xAE, 0x6E, 0xEE,
- 0x1E, 0x9E, 0x5E, 0xDE, 0x3E, 0xBE, 0x7E, 0xFE,
- 0x01, 0x81, 0x41, 0xC1, 0x21, 0xA1, 0x61, 0xE1,
- 0x11, 0x91, 0x51, 0xD1, 0x31, 0xB1, 0x71, 0xF1,
- 0x09, 0x89, 0x49, 0xC9, 0x29, 0xA9, 0x69, 0xE9,
- 0x19, 0x99, 0x59, 0xD9, 0x39, 0xB9, 0x79, 0xF9,
- 0x05, 0x85, 0x45, 0xC5, 0x25, 0xA5, 0x65, 0xE5,
- 0x15, 0x95, 0x55, 0xD5, 0x35, 0xB5, 0x75, 0xF5,
- 0x0D, 0x8D, 0x4D, 0xCD, 0x2D, 0xAD, 0x6D, 0xED,
- 0x1D, 0x9D, 0x5D, 0xDD, 0x3D, 0xBD, 0x7D, 0xFD,
- 0x03, 0x83, 0x43, 0xC3, 0x23, 0xA3, 0x63, 0xE3,
- 0x13, 0x93, 0x53, 0xD3, 0x33, 0xB3, 0x73, 0xF3,
- 0x0B, 0x8B, 0x4B, 0xCB, 0x2B, 0xAB, 0x6B, 0xEB,
- 0x1B, 0x9B, 0x5B, 0xDB, 0x3B, 0xBB, 0x7B, 0xFB,
- 0x07, 0x87, 0x47, 0xC7, 0x27, 0xA7, 0x67, 0xE7,
- 0x17, 0x97, 0x57, 0xD7, 0x37, 0xB7, 0x77, 0xF7,
- 0x0F, 0x8F, 0x4F, 0xCF, 0x2F, 0xAF, 0x6F, 0xEF,
- 0x1F, 0x9F, 0x5F, 0xDF, 0x3F, 0xBF, 0x7F, 0xFF
-};
-#endif /* BROTLI_RBIT */
-
-#define BROTLI_REVERSE_BITS_LOWEST \
- ((brotli_reg_t)1 << (BROTLI_REVERSE_BITS_MAX - 1 + BROTLI_REVERSE_BITS_BASE))
-
-/* Returns reverse(num >> BROTLI_REVERSE_BITS_BASE, BROTLI_REVERSE_BITS_MAX),
- where reverse(value, len) is the bit-wise reversal of the len least
- significant bits of value. */
-static BROTLI_INLINE brotli_reg_t BrotliReverseBits(brotli_reg_t num) {
-#if defined(BROTLI_RBIT)
- return BROTLI_RBIT(num);
-#else
- return kReverseBits[num];
-#endif
-}
-
-/* Stores code in table[0], table[step], table[2*step], ..., table[end] */
-/* Assumes that end is an integer multiple of step */
-static BROTLI_INLINE void ReplicateValue(HuffmanCode* table,
- int step, int end,
- HuffmanCode code) {
- do {
- end -= step;
- table[end] = code;
- } while (end > 0);
-}
-
-/* Returns the table width of the next 2nd level table. |count| is the histogram
- of bit lengths for the remaining symbols, |len| is the code length of the
- next processed symbol. */
-static BROTLI_INLINE int NextTableBitSize(const uint16_t* const count,
- int len, int root_bits) {
- int left = 1 << (len - root_bits);
- while (len < BROTLI_HUFFMAN_MAX_CODE_LENGTH) {
- left -= count[len];
- if (left <= 0) break;
- ++len;
- left <<= 1;
- }
- return len - root_bits;
-}
-
-void BrotliBuildCodeLengthsHuffmanTable(HuffmanCode* table,
- const uint8_t* const code_lengths,
- uint16_t* count) {
- HuffmanCode code; /* current table entry */
- int symbol; /* symbol index in original or sorted table */
- brotli_reg_t key; /* prefix code */
- brotli_reg_t key_step; /* prefix code addend */
- int step; /* step size to replicate values in current table */
- int table_size; /* size of current table */
- int sorted[BROTLI_CODE_LENGTH_CODES]; /* symbols sorted by code length */
- /* offsets in sorted table for each length */
- int offset[BROTLI_HUFFMAN_MAX_CODE_LENGTH_CODE_LENGTH + 1];
- int bits;
- int bits_count;
- BROTLI_DCHECK(BROTLI_HUFFMAN_MAX_CODE_LENGTH_CODE_LENGTH <=
- BROTLI_REVERSE_BITS_MAX);
-
- /* Generate offsets into sorted symbol table by code length. */
- symbol = -1;
- bits = 1;
- BROTLI_REPEAT(BROTLI_HUFFMAN_MAX_CODE_LENGTH_CODE_LENGTH, {
- symbol += count[bits];
- offset[bits] = symbol;
- bits++;
- });
- /* Symbols with code length 0 are placed after all other symbols. */
- offset[0] = BROTLI_CODE_LENGTH_CODES - 1;
-
- /* Sort symbols by length, by symbol order within each length. */
- symbol = BROTLI_CODE_LENGTH_CODES;
- do {
- BROTLI_REPEAT(6, {
- symbol--;
- sorted[offset[code_lengths[symbol]]--] = symbol;
- });
- } while (symbol != 0);
-
- table_size = 1 << BROTLI_HUFFMAN_MAX_CODE_LENGTH_CODE_LENGTH;
-
- /* Special case: all symbols but one have 0 code length. */
- if (offset[0] == 0) {
- code.bits = 0;
- code.value = (uint16_t)sorted[0];
- for (key = 0; key < (brotli_reg_t)table_size; ++key) {
- table[key] = code;
- }
- return;
- }
-
- /* Fill in table. */
- key = 0;
- key_step = BROTLI_REVERSE_BITS_LOWEST;
- symbol = 0;
- bits = 1;
- step = 2;
- do {
- code.bits = (uint8_t)bits;
- for (bits_count = count[bits]; bits_count != 0; --bits_count) {
- code.value = (uint16_t)sorted[symbol++];
- ReplicateValue(&table[BrotliReverseBits(key)], step, table_size, code);
- key += key_step;
- }
- step <<= 1;
- key_step >>= 1;
- } while (++bits <= BROTLI_HUFFMAN_MAX_CODE_LENGTH_CODE_LENGTH);
-}
-
-uint32_t BrotliBuildHuffmanTable(HuffmanCode* root_table,
- int root_bits,
- const uint16_t* const symbol_lists,
- uint16_t* count) {
- HuffmanCode code; /* current table entry */
- HuffmanCode* table; /* next available space in table */
- int len; /* current code length */
- int symbol; /* symbol index in original or sorted table */
- brotli_reg_t key; /* prefix code */
- brotli_reg_t key_step; /* prefix code addend */
- brotli_reg_t sub_key; /* 2nd level table prefix code */
- brotli_reg_t sub_key_step; /* 2nd level table prefix code addend */
- int step; /* step size to replicate values in current table */
- int table_bits; /* key length of current table */
- int table_size; /* size of current table */
- int total_size; /* sum of root table size and 2nd level table sizes */
- int max_length = -1;
- int bits;
- int bits_count;
-
- BROTLI_DCHECK(root_bits <= BROTLI_REVERSE_BITS_MAX);
- BROTLI_DCHECK(BROTLI_HUFFMAN_MAX_CODE_LENGTH - root_bits <=
- BROTLI_REVERSE_BITS_MAX);
-
- while (symbol_lists[max_length] == 0xFFFF) max_length--;
- max_length += BROTLI_HUFFMAN_MAX_CODE_LENGTH + 1;
-
- table = root_table;
- table_bits = root_bits;
- table_size = 1 << table_bits;
- total_size = table_size;
-
- /* Fill in the root table. Reduce the table size to if possible,
- and create the repetitions by memcpy. */
- if (table_bits > max_length) {
- table_bits = max_length;
- table_size = 1 << table_bits;
- }
- key = 0;
- key_step = BROTLI_REVERSE_BITS_LOWEST;
- bits = 1;
- step = 2;
- do {
- code.bits = (uint8_t)bits;
- symbol = bits - (BROTLI_HUFFMAN_MAX_CODE_LENGTH + 1);
- for (bits_count = count[bits]; bits_count != 0; --bits_count) {
- symbol = symbol_lists[symbol];
- code.value = (uint16_t)symbol;
- ReplicateValue(&table[BrotliReverseBits(key)], step, table_size, code);
- key += key_step;
- }
- step <<= 1;
- key_step >>= 1;
- } while (++bits <= table_bits);
-
- /* If root_bits != table_bits then replicate to fill the remaining slots. */
- while (total_size != table_size) {
- memcpy(&table[table_size], &table[0],
- (size_t)table_size * sizeof(table[0]));
- table_size <<= 1;
- }
-
- /* Fill in 2nd level tables and add pointers to root table. */
- key_step = BROTLI_REVERSE_BITS_LOWEST >> (root_bits - 1);
- sub_key = (BROTLI_REVERSE_BITS_LOWEST << 1);
- sub_key_step = BROTLI_REVERSE_BITS_LOWEST;
- for (len = root_bits + 1, step = 2; len <= max_length; ++len) {
- symbol = len - (BROTLI_HUFFMAN_MAX_CODE_LENGTH + 1);
- for (; count[len] != 0; --count[len]) {
- if (sub_key == (BROTLI_REVERSE_BITS_LOWEST << 1U)) {
- table += table_size;
- table_bits = NextTableBitSize(count, len, root_bits);
- table_size = 1 << table_bits;
- total_size += table_size;
- sub_key = BrotliReverseBits(key);
- key += key_step;
- root_table[sub_key].bits = (uint8_t)(table_bits + root_bits);
- root_table[sub_key].value =
- (uint16_t)(((size_t)(table - root_table)) - sub_key);
- sub_key = 0;
- }
- code.bits = (uint8_t)(len - root_bits);
- symbol = symbol_lists[symbol];
- code.value = (uint16_t)symbol;
- ReplicateValue(
- &table[BrotliReverseBits(sub_key)], step, table_size, code);
- sub_key += sub_key_step;
- }
- step <<= 1;
- sub_key_step >>= 1;
- }
- return (uint32_t)total_size;
-}
-
-uint32_t BrotliBuildSimpleHuffmanTable(HuffmanCode* table,
- int root_bits,
- uint16_t* val,
- uint32_t num_symbols) {
- uint32_t table_size = 1;
- const uint32_t goal_size = 1U << root_bits;
- switch (num_symbols) {
- case 0:
- table[0].bits = 0;
- table[0].value = val[0];
- break;
- case 1:
- table[0].bits = 1;
- table[1].bits = 1;
- if (val[1] > val[0]) {
- table[0].value = val[0];
- table[1].value = val[1];
- } else {
- table[0].value = val[1];
- table[1].value = val[0];
- }
- table_size = 2;
- break;
- case 2:
- table[0].bits = 1;
- table[0].value = val[0];
- table[2].bits = 1;
- table[2].value = val[0];
- if (val[2] > val[1]) {
- table[1].value = val[1];
- table[3].value = val[2];
- } else {
- table[1].value = val[2];
- table[3].value = val[1];
- }
- table[1].bits = 2;
- table[3].bits = 2;
- table_size = 4;
- break;
- case 3: {
- int i, k;
- for (i = 0; i < 3; ++i) {
- for (k = i + 1; k < 4; ++k) {
- if (val[k] < val[i]) {
- uint16_t t = val[k];
- val[k] = val[i];
- val[i] = t;
- }
- }
- }
- for (i = 0; i < 4; ++i) {
- table[i].bits = 2;
- }
- table[0].value = val[0];
- table[2].value = val[1];
- table[1].value = val[2];
- table[3].value = val[3];
- table_size = 4;
- break;
- }
- case 4: {
- int i;
- if (val[3] < val[2]) {
- uint16_t t = val[3];
- val[3] = val[2];
- val[2] = t;
- }
- for (i = 0; i < 7; ++i) {
- table[i].value = val[0];
- table[i].bits = (uint8_t)(1 + (i & 1));
- }
- table[1].value = val[1];
- table[3].value = val[2];
- table[5].value = val[1];
- table[7].value = val[3];
- table[3].bits = 3;
- table[7].bits = 3;
- table_size = 8;
- break;
- }
- }
- while (table_size != goal_size) {
- memcpy(&table[table_size], &table[0],
- (size_t)table_size * sizeof(table[0]));
- table_size <<= 1;
- }
- return goal_size;
-}
-
-#if defined(__cplusplus) || defined(c_plusplus)
-} /* extern "C" */
-#endif
diff --git a/MdeModulePkg/Library/BrotliCustomDecompressLib/dec/state.c b/MdeModulePkg/Library/BrotliCustomDecompressLib/dec/state.c
deleted file mode 100644
index f4179ae9fd70..000000000000
--- a/MdeModulePkg/Library/BrotliCustomDecompressLib/dec/state.c
+++ /dev/null
@@ -1,164 +0,0 @@
-/* Copyright 2015 Google Inc. All Rights Reserved.
-
- Distributed under MIT license.
- See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
-*/
-
-#include "./state.h"
-
-//#include <stdlib.h> /* free, malloc */
-
-#include <brotli/types.h>
-#include "./huffman.h"
-
-#if defined(__cplusplus) || defined(c_plusplus)
-extern "C" {
-#endif
-
-BROTLI_BOOL BrotliDecoderStateInit(BrotliDecoderState* s,
- brotli_alloc_func alloc_func, brotli_free_func free_func, void* opaque) {
- if (!alloc_func) {
- s->alloc_func = BrotliDefaultAllocFunc;
- s->free_func = BrotliDefaultFreeFunc;
- s->memory_manager_opaque = 0;
- } else {
- s->alloc_func = alloc_func;
- s->free_func = free_func;
- s->memory_manager_opaque = opaque;
- }
-
- s->error_code = 0; /* BROTLI_DECODER_NO_ERROR */
-
- BrotliInitBitReader(&s->br);
- s->state = BROTLI_STATE_UNINITED;
- s->large_window = 0;
- s->substate_metablock_header = BROTLI_STATE_METABLOCK_HEADER_NONE;
- s->substate_tree_group = BROTLI_STATE_TREE_GROUP_NONE;
- s->substate_context_map = BROTLI_STATE_CONTEXT_MAP_NONE;
- s->substate_uncompressed = BROTLI_STATE_UNCOMPRESSED_NONE;
- s->substate_huffman = BROTLI_STATE_HUFFMAN_NONE;
- s->substate_decode_uint8 = BROTLI_STATE_DECODE_UINT8_NONE;
- s->substate_read_block_length = BROTLI_STATE_READ_BLOCK_LENGTH_NONE;
-
- s->buffer_length = 0;
- s->loop_counter = 0;
- s->pos = 0;
- s->rb_roundtrips = 0;
- s->partial_pos_out = 0;
-
- s->block_type_trees = NULL;
- s->block_len_trees = NULL;
- s->ringbuffer = NULL;
- s->ringbuffer_size = 0;
- s->new_ringbuffer_size = 0;
- s->ringbuffer_mask = 0;
-
- s->context_map = NULL;
- s->context_modes = NULL;
- s->dist_context_map = NULL;
- s->context_map_slice = NULL;
- s->dist_context_map_slice = NULL;
-
- s->sub_loop_counter = 0;
-
- s->literal_hgroup.codes = NULL;
- s->literal_hgroup.htrees = NULL;
- s->insert_copy_hgroup.codes = NULL;
- s->insert_copy_hgroup.htrees = NULL;
- s->distance_hgroup.codes = NULL;
- s->distance_hgroup.htrees = NULL;
-
- s->is_last_metablock = 0;
- s->is_uncompressed = 0;
- s->is_metadata = 0;
- s->should_wrap_ringbuffer = 0;
- s->canny_ringbuffer_allocation = 1;
-
- s->window_bits = 0;
- s->max_distance = 0;
- s->dist_rb[0] = 16;
- s->dist_rb[1] = 15;
- s->dist_rb[2] = 11;
- s->dist_rb[3] = 4;
- s->dist_rb_idx = 0;
- s->block_type_trees = NULL;
- s->block_len_trees = NULL;
-
- /* Make small negative indexes addressable. */
- s->symbol_lists = &s->symbols_lists_array[BROTLI_HUFFMAN_MAX_CODE_LENGTH + 1];
-
- s->mtf_upper_bound = 63;
-
- s->dictionary = BrotliGetDictionary();
- s->transforms = BrotliGetTransforms();
-
- return BROTLI_TRUE;
-}
-
-void BrotliDecoderStateMetablockBegin(BrotliDecoderState* s) {
- s->meta_block_remaining_len = 0;
- s->block_length[0] = 1U << 24;
- s->block_length[1] = 1U << 24;
- s->block_length[2] = 1U << 24;
- s->num_block_types[0] = 1;
- s->num_block_types[1] = 1;
- s->num_block_types[2] = 1;
- s->block_type_rb[0] = 1;
- s->block_type_rb[1] = 0;
- s->block_type_rb[2] = 1;
- s->block_type_rb[3] = 0;
- s->block_type_rb[4] = 1;
- s->block_type_rb[5] = 0;
- s->context_map = NULL;
- s->context_modes = NULL;
- s->dist_context_map = NULL;
- s->context_map_slice = NULL;
- s->literal_htree = NULL;
- s->dist_context_map_slice = NULL;
- s->dist_htree_index = 0;
- s->context_lookup = NULL;
- s->literal_hgroup.codes = NULL;
- s->literal_hgroup.htrees = NULL;
- s->insert_copy_hgroup.codes = NULL;
- s->insert_copy_hgroup.htrees = NULL;
- s->distance_hgroup.codes = NULL;
- s->distance_hgroup.htrees = NULL;
-}
-
-void BrotliDecoderStateCleanupAfterMetablock(BrotliDecoderState* s) {
- BROTLI_DECODER_FREE(s, s->context_modes);
- BROTLI_DECODER_FREE(s, s->context_map);
- BROTLI_DECODER_FREE(s, s->dist_context_map);
- BROTLI_DECODER_FREE(s, s->literal_hgroup.htrees);
- BROTLI_DECODER_FREE(s, s->insert_copy_hgroup.htrees);
- BROTLI_DECODER_FREE(s, s->distance_hgroup.htrees);
-}
-
-void BrotliDecoderStateCleanup(BrotliDecoderState* s) {
- BrotliDecoderStateCleanupAfterMetablock(s);
-
- BROTLI_DECODER_FREE(s, s->ringbuffer);
- BROTLI_DECODER_FREE(s, s->block_type_trees);
-}
-
-BROTLI_BOOL BrotliDecoderHuffmanTreeGroupInit(BrotliDecoderState* s,
- HuffmanTreeGroup* group, uint32_t alphabet_size, uint32_t max_symbol,
- uint32_t ntrees) {
- /* Pack two allocations into one */
- const size_t max_table_size = kMaxHuffmanTableSize[(alphabet_size + 31) >> 5];
- const size_t code_size = sizeof(HuffmanCode) * ntrees * max_table_size;
- const size_t htree_size = sizeof(HuffmanCode*) * ntrees;
- /* Pointer alignment is, hopefully, wider than sizeof(HuffmanCode). */
- HuffmanCode** p = (HuffmanCode**)BROTLI_DECODER_ALLOC(s,
- code_size + htree_size);
- group->alphabet_size = (uint16_t)alphabet_size;
- group->max_symbol = (uint16_t)max_symbol;
- group->num_htrees = (uint16_t)ntrees;
- group->htrees = p;
- group->codes = (HuffmanCode*)(&p[ntrees]);
- return !!p;
-}
-
-#if defined(__cplusplus) || defined(c_plusplus)
-} /* extern "C" */
-#endif
diff --git a/.gitmodules b/.gitmodules
index b30f5bf136bc..8032dceecacc 100644
--- a/.gitmodules
+++ b/.gitmodules
@@ -7,3 +7,6 @@
[submodule "UnitTestFrameworkPkg/Library/CmockaLib/cmocka"]
path = UnitTestFrameworkPkg/Library/CmockaLib/cmocka
url = https://git.cryptomilk.org/projects/cmocka.git
+[submodule "MdeModulePkg/Library/BrotliCustomDecompressLib/brotli"]
+ path = MdeModulePkg/Library/BrotliCustomDecompressLib/brotli
+ url = https://github.com/google/brotli
diff --git a/MdeModulePkg/Library/BrotliCustomDecompressLib/BrotliCustomDecompressLib.inf b/MdeModulePkg/Library/BrotliCustomDecompressLib/BrotliCustomDecompressLib.inf
index 3ba2cb9c3f7d..370a87910b50 100644
--- a/MdeModulePkg/Library/BrotliCustomDecompressLib/BrotliCustomDecompressLib.inf
+++ b/MdeModulePkg/Library/BrotliCustomDecompressLib/BrotliCustomDecompressLib.inf
@@ -4,7 +4,7 @@
# It is based on the Brotli v0.5.2.
# Brotli was released on the website https://github.com/google/brotli.
#
-# Copyright (c) 2017, Intel Corporation. All rights reserved.<BR>
+# Copyright (c) 2017 - 2020, Intel Corporation. All rights reserved.<BR>
#
# SPDX-License-Identifier: BSD-2-Clause-Patent
#
@@ -29,27 +29,29 @@ [Defines]
[Sources]
GuidedSectionExtraction.c
+ BrotliDecUefiSupport.c
+ BrotliDecUefiSupport.h
BrotliDecompress.c
BrotliDecompressLibInternal.h
- common/dictionary.c
- common/transform.c
- dec/bit_reader.c
- dec/decode.c
- dec/huffman.c
- dec/state.c
- brotli/decode.h
- brotli/port.h
- brotli/types.h
- common/constants.h
- common/context.h
- common/dictionary.h
- common/platform.h
- common/transform.h
- common/version.h
- dec/bit_reader.h
- dec/huffman.h
- dec/state.h
- dec/prefix.h
+ brotli/c/common/dictionary.c
+ brotli/c/common/transform.c
+ brotli/c/dec/bit_reader.c
+ brotli/c/dec/decode.c
+ brotli/c/dec/huffman.c
+ brotli/c/dec/state.c
+ brotli/c/include/brotli/decode.h
+ brotli/c/include/brotli/port.h
+ brotli/c/include/brotli/types.h
+ brotli/c/common/constants.h
+ brotli/c/common/context.h
+ brotli/c/common/dictionary.h
+ brotli/c/common/platform.h
+ brotli/c/common/transform.h
+ brotli/c/common/version.h
+ brotli/c/dec/bit_reader.h
+ brotli/c/dec/huffman.h
+ brotli/c/dec/state.h
+ brotli/c/dec/prefix.h
[Packages]
MdePkg/MdePkg.dec
diff --git a/MdeModulePkg/Library/BrotliCustomDecompressLib/BrotliDecUefiSupport.h b/MdeModulePkg/Library/BrotliCustomDecompressLib/BrotliDecUefiSupport.h
new file mode 100644
index 000000000000..9f84347670a5
--- /dev/null
+++ b/MdeModulePkg/Library/BrotliCustomDecompressLib/BrotliDecUefiSupport.h
@@ -0,0 +1,43 @@
+/** @file
+ BROTLI UEFI header file for definitions
+
+ Allows BROTLI code to build under UEFI (edk2) build environment
+
+ Copyright (c) 2020, Intel Corporation. All rights reserved.<BR>
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+
+**/
+
+#ifndef __BROTLI_DECOMPRESS_UEFI_SUP_H__
+#define __BROTLI_DECOMPRESS_UEFI_SUP_H__
+
+#include <Library/BaseLib.h>
+#include <Library/BaseMemoryLib.h>
+#include <Library/DebugLib.h>
+#define memcpy CopyMem
+#define memmove CopyMem
+#define memset(dest,ch,count) SetMem(dest,(UINTN)(count),(UINT8)(ch))
+#define malloc BrDummyMalloc
+#define free BrDummyFree
+
+typedef INT8 int8_t;
+typedef INT16 int16_t;
+typedef INT32 int32_t;
+typedef INT64 int64_t;
+typedef UINT8 uint8_t;
+typedef UINT16 uint16_t;
+typedef UINT32 uint32_t;
+typedef UINT64 uint64_t;
+typedef UINTN size_t;
+
+VOID *
+BrDummyMalloc (
+ IN size_t Size
+ );
+
+VOID
+BrDummyFree (
+ IN VOID * Ptr
+ );
+
+#endif
diff --git a/MdeModulePkg/Library/BrotliCustomDecompressLib/BrotliDecompressLibInternal.h b/MdeModulePkg/Library/BrotliCustomDecompressLib/BrotliDecompressLibInternal.h
index 8e581cbcae51..8f91829a0e2e 100644
--- a/MdeModulePkg/Library/BrotliCustomDecompressLib/BrotliDecompressLibInternal.h
+++ b/MdeModulePkg/Library/BrotliCustomDecompressLib/BrotliDecompressLibInternal.h
@@ -3,7 +3,7 @@
Allows BROTLI code to build under UEFI (edk2) build environment
- Copyright (c) 2017 - 2018, Intel Corporation. All rights reserved.<BR>
+ Copyright (c) 2017 - 2020, Intel Corporation. All rights reserved.<BR>
SPDX-License-Identifier: BSD-2-Clause-Patent
**/
@@ -12,12 +12,9 @@
#define __BROTLI_DECOMPRESS_INTERNAL_H__
#include <PiPei.h>
-#include <Library/BaseLib.h>
-#include <Library/BaseMemoryLib.h>
-#include <Library/DebugLib.h>
#include <Library/ExtractGuidedSectionLib.h>
-#include <brotli/types.h>
-#include <brotli/decode.h>
+#include <brotli/c/include/brotli/types.h>
+#include <brotli/c/include/brotli/decode.h>
typedef struct
{
@@ -30,20 +27,6 @@ typedef struct
#define BROTLI_DECODE_MAX 8
#define BROTLI_SCRATCH_MAX 16
-#define memcpy CopyMem
-#define memmove CopyMem
-#define memset(dest,ch,count) SetMem(dest,(UINTN)(count),(UINT8)(ch))
-
-VOID *
-BrDummyMalloc (
- IN size_t Size
- );
-
-VOID
-BrDummyFree (
- IN VOID * Ptr
- );
-
EFI_STATUS
EFIAPI
BrotliUefiDecompressGetInfo (
diff --git a/MdeModulePkg/Library/BrotliCustomDecompressLib/LICENSE b/MdeModulePkg/Library/BrotliCustomDecompressLib/LICENSE
deleted file mode 100644
index 49550fc2d06e..000000000000
--- a/MdeModulePkg/Library/BrotliCustomDecompressLib/LICENSE
+++ /dev/null
@@ -1,19 +0,0 @@
-Copyright (c) 2009, 2010, 2013-2016 by the Brotli Authors.
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-THE SOFTWARE.
diff --git a/MdeModulePkg/Library/BrotliCustomDecompressLib/README.md b/MdeModulePkg/Library/BrotliCustomDecompressLib/README.md
deleted file mode 100644
index 01848adc170a..000000000000
--- a/MdeModulePkg/Library/BrotliCustomDecompressLib/README.md
+++ /dev/null
@@ -1,26 +0,0 @@
-### Introduction
-
-Brotli is a generic-purpose lossless compression algorithm that compresses data
-using a combination of a modern variant of the LZ77 algorithm, Huffman coding
-and 2nd order context modeling, with a compression ratio comparable to the best
-currently available general-purpose compression methods. It is similar in speed
-with deflate but offers more dense compression.
-
-The specification of the Brotli Compressed Data Format is defined in [RFC 7932](https://www.ietf.org/rfc/rfc7932.txt).
-
-Brotli is open-sourced under the MIT License, see the LICENSE file.
-
-Brotli mailing list:
-https://groups.google.com/forum/#!forum/brotli
-
-[![Build Status](https://travis-ci.org/google/brotli.svg?branch=master)](https://travis-ci.org/google/brotli)
-
-### Benchmarks
-* [Squash Compression Benchmark](https://quixdb.github.io/squash-benchmark/) / [Unstable Squash Compression Benchmark](https://quixdb.github.io/squash-benchmark/unstable/)
-* [Large Text Compression Benchmark](http://mattmahoney.net/dc/text.html)
-* [Lzturbo Benchmark](https://sites.google.com/site/powturbo/home/benchmark)
-
-### Related projects
-Independent [decoder](https://github.com/madler/brotli) implementation by Mark Adler, based entirely on format specification.
-
-JavaScript port of brotli [decoder](https://github.com/devongovett/brotli.js). Could be used directly via `npm install brotli`
diff --git a/MdeModulePkg/Library/BrotliCustomDecompressLib/ReadMe.txt b/MdeModulePkg/Library/BrotliCustomDecompressLib/ReadMe.txt
deleted file mode 100644
index 399ec38d4081..000000000000
--- a/MdeModulePkg/Library/BrotliCustomDecompressLib/ReadMe.txt
+++ /dev/null
@@ -1,2 +0,0 @@
-It is based on the Brotli v1.0.6.
-Brotli was released on the website https://github.com/google/brotli.
diff --git a/MdeModulePkg/Library/BrotliCustomDecompressLib/brotli b/MdeModulePkg/Library/BrotliCustomDecompressLib/brotli
new file mode 160000
index 000000000000..666c3280cc11
--- /dev/null
+++ b/MdeModulePkg/Library/BrotliCustomDecompressLib/brotli
@@ -0,0 +1 @@
+Subproject commit 666c3280cc11dc433c303d79a83d4ffbdd12cc8d
diff --git a/MdeModulePkg/Library/BrotliCustomDecompressLib/brotli/decode.h b/MdeModulePkg/Library/BrotliCustomDecompressLib/brotli/decode.h
deleted file mode 100644
index 2cd17250d9d8..000000000000
--- a/MdeModulePkg/Library/BrotliCustomDecompressLib/brotli/decode.h
+++ /dev/null
@@ -1,344 +0,0 @@
-/* Copyright 2013 Google Inc. All Rights Reserved.
-
- Distributed under MIT license.
- See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
-*/
-
-/**
- * @file
- * API for Brotli decompression.
- */
-
-#ifndef BROTLI_DEC_DECODE_H_
-#define BROTLI_DEC_DECODE_H_
-
-#include <brotli/port.h>
-#include <brotli/types.h>
-
-#if defined(__cplusplus) || defined(c_plusplus)
-extern "C" {
-#endif
-
-/**
- * Opaque structure that holds decoder state.
- *
- * Allocated and initialized with ::BrotliDecoderCreateInstance.
- * Cleaned up and deallocated with ::BrotliDecoderDestroyInstance.
- */
-typedef struct BrotliDecoderStateStruct BrotliDecoderState;
-
-/**
- * Result type for ::BrotliDecoderDecompress and
- * ::BrotliDecoderDecompressStream functions.
- */
-typedef enum {
- /** Decoding error, e.g. corrupted input or memory allocation problem. */
- BROTLI_DECODER_RESULT_ERROR = 0,
- /** Decoding successfully completed. */
- BROTLI_DECODER_RESULT_SUCCESS = 1,
- /** Partially done; should be called again with more input. */
- BROTLI_DECODER_RESULT_NEEDS_MORE_INPUT = 2,
- /** Partially done; should be called again with more output. */
- BROTLI_DECODER_RESULT_NEEDS_MORE_OUTPUT = 3
-} BrotliDecoderResult;
-
-/**
- * Template that evaluates items of ::BrotliDecoderErrorCode.
- *
- * Example: @code {.cpp}
- * // Log Brotli error code.
- * switch (brotliDecoderErrorCode) {
- * #define CASE_(PREFIX, NAME, CODE) \
- * case BROTLI_DECODER ## PREFIX ## NAME: \
- * LOG(INFO) << "error code:" << #NAME; \
- * break;
- * #define NEWLINE_
- * BROTLI_DECODER_ERROR_CODES_LIST(CASE_, NEWLINE_)
- * #undef CASE_
- * #undef NEWLINE_
- * default: LOG(FATAL) << "unknown brotli error code";
- * }
- * @endcode
- */
-#define BROTLI_DECODER_ERROR_CODES_LIST(BROTLI_ERROR_CODE, SEPARATOR) \
- BROTLI_ERROR_CODE(_, NO_ERROR, 0) SEPARATOR \
- /* Same as BrotliDecoderResult values */ \
- BROTLI_ERROR_CODE(_, SUCCESS, 1) SEPARATOR \
- BROTLI_ERROR_CODE(_, NEEDS_MORE_INPUT, 2) SEPARATOR \
- BROTLI_ERROR_CODE(_, NEEDS_MORE_OUTPUT, 3) SEPARATOR \
- \
- /* Errors caused by invalid input */ \
- BROTLI_ERROR_CODE(_ERROR_FORMAT_, EXUBERANT_NIBBLE, -1) SEPARATOR \
- BROTLI_ERROR_CODE(_ERROR_FORMAT_, RESERVED, -2) SEPARATOR \
- BROTLI_ERROR_CODE(_ERROR_FORMAT_, EXUBERANT_META_NIBBLE, -3) SEPARATOR \
- BROTLI_ERROR_CODE(_ERROR_FORMAT_, SIMPLE_HUFFMAN_ALPHABET, -4) SEPARATOR \
- BROTLI_ERROR_CODE(_ERROR_FORMAT_, SIMPLE_HUFFMAN_SAME, -5) SEPARATOR \
- BROTLI_ERROR_CODE(_ERROR_FORMAT_, CL_SPACE, -6) SEPARATOR \
- BROTLI_ERROR_CODE(_ERROR_FORMAT_, HUFFMAN_SPACE, -7) SEPARATOR \
- BROTLI_ERROR_CODE(_ERROR_FORMAT_, CONTEXT_MAP_REPEAT, -8) SEPARATOR \
- BROTLI_ERROR_CODE(_ERROR_FORMAT_, BLOCK_LENGTH_1, -9) SEPARATOR \
- BROTLI_ERROR_CODE(_ERROR_FORMAT_, BLOCK_LENGTH_2, -10) SEPARATOR \
- BROTLI_ERROR_CODE(_ERROR_FORMAT_, TRANSFORM, -11) SEPARATOR \
- BROTLI_ERROR_CODE(_ERROR_FORMAT_, DICTIONARY, -12) SEPARATOR \
- BROTLI_ERROR_CODE(_ERROR_FORMAT_, WINDOW_BITS, -13) SEPARATOR \
- BROTLI_ERROR_CODE(_ERROR_FORMAT_, PADDING_1, -14) SEPARATOR \
- BROTLI_ERROR_CODE(_ERROR_FORMAT_, PADDING_2, -15) SEPARATOR \
- BROTLI_ERROR_CODE(_ERROR_FORMAT_, DISTANCE, -16) SEPARATOR \
- \
- /* -17..-18 codes are reserved */ \
- \
- BROTLI_ERROR_CODE(_ERROR_, DICTIONARY_NOT_SET, -19) SEPARATOR \
- BROTLI_ERROR_CODE(_ERROR_, INVALID_ARGUMENTS, -20) SEPARATOR \
- \
- /* Memory allocation problems */ \
- BROTLI_ERROR_CODE(_ERROR_ALLOC_, CONTEXT_MODES, -21) SEPARATOR \
- /* Literal, insert and distance trees together */ \
- BROTLI_ERROR_CODE(_ERROR_ALLOC_, TREE_GROUPS, -22) SEPARATOR \
- /* -23..-24 codes are reserved for distinct tree groups */ \
- BROTLI_ERROR_CODE(_ERROR_ALLOC_, CONTEXT_MAP, -25) SEPARATOR \
- BROTLI_ERROR_CODE(_ERROR_ALLOC_, RING_BUFFER_1, -26) SEPARATOR \
- BROTLI_ERROR_CODE(_ERROR_ALLOC_, RING_BUFFER_2, -27) SEPARATOR \
- /* -28..-29 codes are reserved for dynamic ring-buffer allocation */ \
- BROTLI_ERROR_CODE(_ERROR_ALLOC_, BLOCK_TYPE_TREES, -30) SEPARATOR \
- \
- /* "Impossible" states */ \
- BROTLI_ERROR_CODE(_ERROR_, UNREACHABLE, -31)
-
-/**
- * Error code for detailed logging / production debugging.
- *
- * See ::BrotliDecoderGetErrorCode and ::BROTLI_LAST_ERROR_CODE.
- */
-typedef enum {
-#define BROTLI_COMMA_ ,
-#define BROTLI_ERROR_CODE_ENUM_ITEM_(PREFIX, NAME, CODE) \
- BROTLI_DECODER ## PREFIX ## NAME = CODE
- BROTLI_DECODER_ERROR_CODES_LIST(BROTLI_ERROR_CODE_ENUM_ITEM_, BROTLI_COMMA_)
-} BrotliDecoderErrorCode;
-#undef BROTLI_ERROR_CODE_ENUM_ITEM_
-#undef BROTLI_COMMA_
-
-/**
- * The value of the last error code, negative integer.
- *
- * All other error code values are in the range from ::BROTLI_LAST_ERROR_CODE
- * to @c -1. There are also 4 other possible non-error codes @c 0 .. @c 3 in
- * ::BrotliDecoderErrorCode enumeration.
- */
-#define BROTLI_LAST_ERROR_CODE BROTLI_DECODER_ERROR_UNREACHABLE
-
-/** Options to be used with ::BrotliDecoderSetParameter. */
-typedef enum BrotliDecoderParameter {
- /**
- * Disable "canny" ring buffer allocation strategy.
- *
- * Ring buffer is allocated according to window size, despite the real size of
- * the content.
- */
- BROTLI_DECODER_PARAM_DISABLE_RING_BUFFER_REALLOCATION = 0,
- /**
- * Flag that determines if "Large Window Brotli" is used.
- */
- BROTLI_DECODER_PARAM_LARGE_WINDOW = 1
-} BrotliDecoderParameter;
-
-/**
- * Sets the specified parameter to the given decoder instance.
- *
- * @param state decoder instance
- * @param param parameter to set
- * @param value new parameter value
- * @returns ::BROTLI_FALSE if parameter is unrecognized, or value is invalid
- * @returns ::BROTLI_TRUE if value is accepted
- */
-BROTLI_DEC_API BROTLI_BOOL BrotliDecoderSetParameter(
- BrotliDecoderState* state, BrotliDecoderParameter param, uint32_t value);
-
-/**
- * Creates an instance of ::BrotliDecoderState and initializes it.
- *
- * The instance can be used once for decoding and should then be destroyed with
- * ::BrotliDecoderDestroyInstance, it cannot be reused for a new decoding
- * session.
- *
- * @p alloc_func and @p free_func @b MUST be both zero or both non-zero. In the
- * case they are both zero, default memory allocators are used. @p opaque is
- * passed to @p alloc_func and @p free_func when they are called. @p free_func
- * has to return without doing anything when asked to free a NULL pointer.
- *
- * @param alloc_func custom memory allocation function
- * @param free_func custom memory free function
- * @param opaque custom memory manager handle
- * @returns @c 0 if instance can not be allocated or initialized
- * @returns pointer to initialized ::BrotliDecoderState otherwise
- */
-BROTLI_DEC_API BrotliDecoderState* BrotliDecoderCreateInstance(
- brotli_alloc_func alloc_func, brotli_free_func free_func, void* opaque);
-
-/**
- * Deinitializes and frees ::BrotliDecoderState instance.
- *
- * @param state decoder instance to be cleaned up and deallocated
- */
-BROTLI_DEC_API void BrotliDecoderDestroyInstance(BrotliDecoderState* state);
-
-/**
- * Performs one-shot memory-to-memory decompression.
- *
- * Decompresses the data in @p encoded_buffer into @p decoded_buffer, and sets
- * @p *decoded_size to the decompressed length.
- *
- * @param encoded_size size of @p encoded_buffer
- * @param encoded_buffer compressed data buffer with at least @p encoded_size
- * addressable bytes
- * @param[in, out] decoded_size @b in: size of @p decoded_buffer; \n
- * @b out: length of decompressed data written to
- * @p decoded_buffer
- * @param decoded_buffer decompressed data destination buffer
- * @returns ::BROTLI_DECODER_RESULT_ERROR if input is corrupted, memory
- * allocation failed, or @p decoded_buffer is not large enough;
- * @returns ::BROTLI_DECODER_RESULT_SUCCESS otherwise
- */
-BROTLI_DEC_API BrotliDecoderResult BrotliDecoderDecompress(
- size_t encoded_size,
- const uint8_t encoded_buffer[BROTLI_ARRAY_PARAM(encoded_size)],
- size_t* decoded_size,
- uint8_t decoded_buffer[BROTLI_ARRAY_PARAM(*decoded_size)]);
-
-/**
- * Decompresses the input stream to the output stream.
- *
- * The values @p *available_in and @p *available_out must specify the number of
- * bytes addressable at @p *next_in and @p *next_out respectively.
- * When @p *available_out is @c 0, @p next_out is allowed to be @c NULL.
- *
- * After each call, @p *available_in will be decremented by the amount of input
- * bytes consumed, and the @p *next_in pointer will be incremented by that
- * amount. Similarly, @p *available_out will be decremented by the amount of
- * output bytes written, and the @p *next_out pointer will be incremented by
- * that amount.
- *
- * @p total_out, if it is not a null-pointer, will be set to the number
- * of bytes decompressed since the last @p state initialization.
- *
- * @note Input is never overconsumed, so @p next_in and @p available_in could be
- * passed to the next consumer after decoding is complete.
- *
- * @param state decoder instance
- * @param[in, out] available_in @b in: amount of available input; \n
- * @b out: amount of unused input
- * @param[in, out] next_in pointer to the next compressed byte
- * @param[in, out] available_out @b in: length of output buffer; \n
- * @b out: remaining size of output buffer
- * @param[in, out] next_out output buffer cursor;
- * can be @c NULL if @p available_out is @c 0
- * @param[out] total_out number of bytes decompressed so far; can be @c NULL
- * @returns ::BROTLI_DECODER_RESULT_ERROR if input is corrupted, memory
- * allocation failed, arguments were invalid, etc.;
- * use ::BrotliDecoderGetErrorCode to get detailed error code
- * @returns ::BROTLI_DECODER_RESULT_NEEDS_MORE_INPUT decoding is blocked until
- * more input data is provided
- * @returns ::BROTLI_DECODER_RESULT_NEEDS_MORE_OUTPUT decoding is blocked until
- * more output space is provided
- * @returns ::BROTLI_DECODER_RESULT_SUCCESS decoding is finished, no more
- * input might be consumed and no more output will be produced
- */
-BROTLI_DEC_API BrotliDecoderResult BrotliDecoderDecompressStream(
- BrotliDecoderState* state, size_t* available_in, const uint8_t** next_in,
- size_t* available_out, uint8_t** next_out, size_t* total_out);
-
-/**
- * Checks if decoder has more output.
- *
- * @param state decoder instance
- * @returns ::BROTLI_TRUE, if decoder has some unconsumed output
- * @returns ::BROTLI_FALSE otherwise
- */
-BROTLI_DEC_API BROTLI_BOOL BrotliDecoderHasMoreOutput(
- const BrotliDecoderState* state);
-
-/**
- * Acquires pointer to internal output buffer.
- *
- * This method is used to make language bindings easier and more efficient:
- * -# push data to ::BrotliDecoderDecompressStream,
- * until ::BROTLI_DECODER_RESULT_NEEDS_MORE_OUTPUT is reported
- * -# use ::BrotliDecoderTakeOutput to peek bytes and copy to language-specific
- * entity
- *
- * Also this could be useful if there is an output stream that is able to
- * consume all the provided data (e.g. when data is saved to file system).
- *
- * @attention After every call to ::BrotliDecoderTakeOutput @p *size bytes of
- * output are considered consumed for all consecutive calls to the
- * instance methods; returned pointer becomes invalidated as well.
- *
- * @note Decoder output is not guaranteed to be contiguous. This means that
- * after the size-unrestricted call to ::BrotliDecoderTakeOutput,
- * immediate next call to ::BrotliDecoderTakeOutput may return more data.
- *
- * @param state decoder instance
- * @param[in, out] size @b in: number of bytes caller is ready to take, @c 0 if
- * any amount could be handled; \n
- * @b out: amount of data pointed by returned pointer and
- * considered consumed; \n
- * out value is never greater than in value, unless it is @c 0
- * @returns pointer to output data
- */
-BROTLI_DEC_API const uint8_t* BrotliDecoderTakeOutput(
- BrotliDecoderState* state, size_t* size);
-
-/**
- * Checks if instance has already consumed input.
- *
- * Instance that returns ::BROTLI_FALSE is considered "fresh" and could be
- * reused.
- *
- * @param state decoder instance
- * @returns ::BROTLI_TRUE if decoder has already used some input bytes
- * @returns ::BROTLI_FALSE otherwise
- */
-BROTLI_DEC_API BROTLI_BOOL BrotliDecoderIsUsed(const BrotliDecoderState* state);
-
-/**
- * Checks if decoder instance reached the final state.
- *
- * @param state decoder instance
- * @returns ::BROTLI_TRUE if decoder is in a state where it reached the end of
- * the input and produced all of the output
- * @returns ::BROTLI_FALSE otherwise
- */
-BROTLI_DEC_API BROTLI_BOOL BrotliDecoderIsFinished(
- const BrotliDecoderState* state);
-
-/**
- * Acquires a detailed error code.
- *
- * Should be used only after ::BrotliDecoderDecompressStream returns
- * ::BROTLI_DECODER_RESULT_ERROR.
- *
- * See also ::BrotliDecoderErrorString
- *
- * @param state decoder instance
- * @returns last saved error code
- */
-BROTLI_DEC_API BrotliDecoderErrorCode BrotliDecoderGetErrorCode(
- const BrotliDecoderState* state);
-
-/**
- * Converts error code to a c-string.
- */
-BROTLI_DEC_API const char* BrotliDecoderErrorString(BrotliDecoderErrorCode c);
-
-/**
- * Gets a decoder library version.
- *
- * Look at BROTLI_VERSION for more information.
- */
-BROTLI_DEC_API uint32_t BrotliDecoderVersion(void);
-
-#if defined(__cplusplus) || defined(c_plusplus)
-} /* extern "C" */
-#endif
-
-#endif /* BROTLI_DEC_DECODE_H_ */
diff --git a/MdeModulePkg/Library/BrotliCustomDecompressLib/brotli/port.h b/MdeModulePkg/Library/BrotliCustomDecompressLib/brotli/port.h
deleted file mode 100644
index 6e439987b547..000000000000
--- a/MdeModulePkg/Library/BrotliCustomDecompressLib/brotli/port.h
+++ /dev/null
@@ -1,274 +0,0 @@
-/* Copyright 2016 Google Inc. All Rights Reserved.
-
- Distributed under MIT license.
- See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
-*/
-
-/* Macros for compiler / platform specific API declarations. */
-
-#ifndef BROTLI_COMMON_PORT_H_
-#define BROTLI_COMMON_PORT_H_
-
-/* The following macros were borrowed from https://github.com/nemequ/hedley
- * with permission of original author - Evan Nemerson <evan@nemerson.com> */
-
-/* >>> >>> >>> hedley macros */
-
-#define BROTLI_MAKE_VERSION(major, minor, revision) \
- (((major) * 1000000) + ((minor) * 1000) + (revision))
-
-#if defined(__GNUC__) && defined(__GNUC_PATCHLEVEL__)
-#define BROTLI_GNUC_VERSION \
- BROTLI_MAKE_VERSION(__GNUC__, __GNUC_MINOR__, __GNUC_PATCHLEVEL__)
-#elif defined(__GNUC__)
-#define BROTLI_GNUC_VERSION BROTLI_MAKE_VERSION(__GNUC__, __GNUC_MINOR__, 0)
-#endif
-
-#if defined(BROTLI_GNUC_VERSION)
-#define BROTLI_GNUC_VERSION_CHECK(major, minor, patch) \
- (BROTLI_GNUC_VERSION >= BROTLI_MAKE_VERSION(major, minor, patch))
-#else
-#define BROTLI_GNUC_VERSION_CHECK(major, minor, patch) (0)
-#endif
-
-#if defined(_MSC_FULL_VER) && (_MSC_FULL_VER >= 140000000)
-#define BROTLI_MSVC_VERSION \
- BROTLI_MAKE_VERSION((_MSC_FULL_VER / 10000000), \
- (_MSC_FULL_VER % 10000000) / 100000, \
- (_MSC_FULL_VER % 100000) / 100)
-#elif defined(_MSC_FULL_VER)
-#define BROTLI_MSVC_VERSION \
- BROTLI_MAKE_VERSION((_MSC_FULL_VER / 1000000), \
- (_MSC_FULL_VER % 1000000) / 10000, \
- (_MSC_FULL_VER % 10000) / 10)
-#elif defined(_MSC_VER)
-#define BROTLI_MSVC_VERSION \
- BROTLI_MAKE_VERSION(_MSC_VER / 100, _MSC_VER % 100, 0)
-#endif
-
-#if !defined(_MSC_VER)
-#define BROTLI_MSVC_VERSION_CHECK(major, minor, patch) (0)
-#elif defined(_MSC_VER) && (_MSC_VER >= 1400)
-#define BROTLI_MSVC_VERSION_CHECK(major, minor, patch) \
- (_MSC_FULL_VER >= ((major * 10000000) + (minor * 100000) + (patch)))
-#elif defined(_MSC_VER) && (_MSC_VER >= 1200)
-#define BROTLI_MSVC_VERSION_CHECK(major, minor, patch) \
- (_MSC_FULL_VER >= ((major * 1000000) + (minor * 10000) + (patch)))
-#else
-#define BROTLI_MSVC_VERSION_CHECK(major, minor, patch) \
- (_MSC_VER >= ((major * 100) + (minor)))
-#endif
-
-#if defined(__INTEL_COMPILER) && defined(__INTEL_COMPILER_UPDATE)
-#define BROTLI_INTEL_VERSION \
- BROTLI_MAKE_VERSION(__INTEL_COMPILER / 100, \
- __INTEL_COMPILER % 100, \
- __INTEL_COMPILER_UPDATE)
-#elif defined(__INTEL_COMPILER)
-#define BROTLI_INTEL_VERSION \
- BROTLI_MAKE_VERSION(__INTEL_COMPILER / 100, __INTEL_COMPILER % 100, 0)
-#endif
-
-#if defined(BROTLI_INTEL_VERSION)
-#define BROTLI_INTEL_VERSION_CHECK(major, minor, patch) \
- (BROTLI_INTEL_VERSION >= BROTLI_MAKE_VERSION(major, minor, patch))
-#else
-#define BROTLI_INTEL_VERSION_CHECK(major, minor, patch) (0)
-#endif
-
-#if defined(__PGI) && \
- defined(__PGIC__) && defined(__PGIC_MINOR__) && defined(__PGIC_PATCHLEVEL__)
-#define BROTLI_PGI_VERSION \
- BROTLI_MAKE_VERSION(__PGIC__, __PGIC_MINOR__, __PGIC_PATCHLEVEL__)
-#endif
-
-#if defined(BROTLI_PGI_VERSION)
-#define BROTLI_PGI_VERSION_CHECK(major, minor, patch) \
- (BROTLI_PGI_VERSION >= BROTLI_MAKE_VERSION(major, minor, patch))
-#else
-#define BROTLI_PGI_VERSION_CHECK(major, minor, patch) (0)
-#endif
-
-#if defined(__SUNPRO_C) && (__SUNPRO_C > 0x1000)
-#define BROTLI_SUNPRO_VERSION \
- BROTLI_MAKE_VERSION( \
- (((__SUNPRO_C >> 16) & 0xf) * 10) + ((__SUNPRO_C >> 12) & 0xf), \
- (((__SUNPRO_C >> 8) & 0xf) * 10) + ((__SUNPRO_C >> 4) & 0xf), \
- (__SUNPRO_C & 0xf) * 10)
-#elif defined(__SUNPRO_C)
-#define BROTLI_SUNPRO_VERSION \
- BROTLI_MAKE_VERSION((__SUNPRO_C >> 8) & 0xf, \
- (__SUNPRO_C >> 4) & 0xf, \
- (__SUNPRO_C) & 0xf)
-#elif defined(__SUNPRO_CC) && (__SUNPRO_CC > 0x1000)
-#define BROTLI_SUNPRO_VERSION \
- BROTLI_MAKE_VERSION( \
- (((__SUNPRO_CC >> 16) & 0xf) * 10) + ((__SUNPRO_CC >> 12) & 0xf), \
- (((__SUNPRO_CC >> 8) & 0xf) * 10) + ((__SUNPRO_CC >> 4) & 0xf), \
- (__SUNPRO_CC & 0xf) * 10)
-#elif defined(__SUNPRO_CC)
-#define BROTLI_SUNPRO_VERSION \
- BROTLI_MAKE_VERSION((__SUNPRO_CC >> 8) & 0xf, \
- (__SUNPRO_CC >> 4) & 0xf, \
- (__SUNPRO_CC) & 0xf)
-#endif
-
-#if defined(BROTLI_SUNPRO_VERSION)
-#define BROTLI_SUNPRO_VERSION_CHECK(major, minor, patch) \
- (BROTLI_SUNPRO_VERSION >= BROTLI_MAKE_VERSION(major, minor, patch))
-#else
-#define BROTLI_SUNPRO_VERSION_CHECK(major, minor, patch) (0)
-#endif
-
-#if defined(__CC_ARM) && defined(__ARMCOMPILER_VERSION)
-#define BROTLI_ARM_VERSION \
- BROTLI_MAKE_VERSION((__ARMCOMPILER_VERSION / 1000000), \
- (__ARMCOMPILER_VERSION % 1000000) / 10000, \
- (__ARMCOMPILER_VERSION % 10000) / 100)
-#elif defined(__CC_ARM) && defined(__ARMCC_VERSION)
-#define BROTLI_ARM_VERSION \
- BROTLI_MAKE_VERSION((__ARMCC_VERSION / 1000000), \
- (__ARMCC_VERSION % 1000000) / 10000, \
- (__ARMCC_VERSION % 10000) / 100)
-#endif
-
-#if defined(BROTLI_ARM_VERSION)
-#define BROTLI_ARM_VERSION_CHECK(major, minor, patch) \
- (BROTLI_ARM_VERSION >= BROTLI_MAKE_VERSION(major, minor, patch))
-#else
-#define BROTLI_ARM_VERSION_CHECK(major, minor, patch) (0)
-#endif
-
-#if defined(__ibmxl__)
-#define BROTLI_IBM_VERSION \
- BROTLI_MAKE_VERSION(__ibmxl_version__, \
- __ibmxl_release__, \
- __ibmxl_modification__)
-#elif defined(__xlC__) && defined(__xlC_ver__)
-#define BROTLI_IBM_VERSION \
- BROTLI_MAKE_VERSION(__xlC__ >> 8, __xlC__ & 0xff, (__xlC_ver__ >> 8) & 0xff)
-#elif defined(__xlC__)
-#define BROTLI_IBM_VERSION BROTLI_MAKE_VERSION(__xlC__ >> 8, __xlC__ & 0xff, 0)
-#endif
-
-#if defined(BROTLI_IBM_VERSION)
-#define BROTLI_IBM_VERSION_CHECK(major, minor, patch) \
- (BROTLI_IBM_VERSION >= BROTLI_MAKE_VERSION(major, minor, patch))
-#else
-#define BROTLI_IBM_VERSION_CHECK(major, minor, patch) (0)
-#endif
-
-#if defined(__TI_COMPILER_VERSION__)
-#define BROTLI_TI_VERSION \
- BROTLI_MAKE_VERSION((__TI_COMPILER_VERSION__ / 1000000), \
- (__TI_COMPILER_VERSION__ % 1000000) / 1000, \
- (__TI_COMPILER_VERSION__ % 1000))
-#endif
-
-#if defined(BROTLI_TI_VERSION)
-#define BROTLI_TI_VERSION_CHECK(major, minor, patch) \
- (BROTLI_TI_VERSION >= BROTLI_MAKE_VERSION(major, minor, patch))
-#else
-#define BROTLI_TI_VERSION_CHECK(major, minor, patch) (0)
-#endif
-
-#if defined(__IAR_SYSTEMS_ICC__)
-#if __VER__ > 1000
-#define BROTLI_IAR_VERSION \
- BROTLI_MAKE_VERSION((__VER__ / 1000000), \
- (__VER__ / 1000) % 1000, \
- (__VER__ % 1000))
-#else
-#define BROTLI_IAR_VERSION BROTLI_MAKE_VERSION(VER / 100, __VER__ % 100, 0)
-#endif
-#endif
-
-#if defined(BROTLI_IAR_VERSION)
-#define BROTLI_IAR_VERSION_CHECK(major, minor, patch) \
- (BROTLI_IAR_VERSION >= BROTLI_MAKE_VERSION(major, minor, patch))
-#else
-#define BROTLI_IAR_VERSION_CHECK(major, minor, patch) (0)
-#endif
-
-#if defined(__TINYC__)
-#define BROTLI_TINYC_VERSION \
- BROTLI_MAKE_VERSION(__TINYC__ / 1000, (__TINYC__ / 100) % 10, __TINYC__ % 100)
-#endif
-
-#if defined(BROTLI_TINYC_VERSION)
-#define BROTLI_TINYC_VERSION_CHECK(major, minor, patch) \
- (BROTLI_TINYC_VERSION >= BROTLI_MAKE_VERSION(major, minor, patch))
-#else
-#define BROTLI_TINYC_VERSION_CHECK(major, minor, patch) (0)
-#endif
-
-#if defined(__has_attribute)
-#define BROTLI_GNUC_HAS_ATTRIBUTE(attribute, major, minor, patch) \
- __has_attribute(attribute)
-#else
-#define BROTLI_GNUC_HAS_ATTRIBUTE(attribute, major, minor, patch) \
- BROTLI_GNUC_VERSION_CHECK(major, minor, patch)
-#endif
-
-#if defined(__has_builtin)
-#define BROTLI_GNUC_HAS_BUILTIN(builtin, major, minor, patch) \
- __has_builtin(builtin)
-#else
-#define BROTLI_GNUC_HAS_BUILTIN(builtin, major, minor, patch) \
- BROTLI_GNUC_VERSION_CHECK(major, minor, patch)
-#endif
-
-#if defined(_WIN32) || defined(__CYGWIN__)
-#define BROTLI_PUBLIC
-#elif BROTLI_GNUC_VERSION_CHECK(3, 3, 0) || \
- BROTLI_TI_VERSION_CHECK(8, 0, 0) || \
- BROTLI_INTEL_VERSION_CHECK(16, 0, 0) || \
- BROTLI_ARM_VERSION_CHECK(4, 1, 0) || \
- BROTLI_IBM_VERSION_CHECK(13, 1, 0) || \
- BROTLI_SUNPRO_VERSION_CHECK(5, 11, 0) || \
- (BROTLI_TI_VERSION_CHECK(7, 3, 0) && \
- defined(__TI_GNU_ATTRIBUTE_SUPPORT__) && defined(__TI_EABI__))
-#define BROTLI_PUBLIC __attribute__ ((visibility ("default")))
-#else
-#define BROTLI_PUBLIC
-#endif
-
-#if defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) && \
- !defined(__STDC_NO_VLA__) && !defined(__cplusplus) && \
- !defined(__PGI) && !defined(__PGIC__) && !defined(__TINYC__)
-#define BROTLI_ARRAY_PARAM(name) (name)
-#else
-#define BROTLI_ARRAY_PARAM(name)
-#endif
-
-/* <<< <<< <<< end of hedley macros. */
-
-#if defined(BROTLI_SHARED_COMPILATION)
-#if defined(_WIN32)
-#if defined(BROTLICOMMON_SHARED_COMPILATION)
-#define BROTLI_COMMON_API __declspec(dllexport)
-#else
-#define BROTLI_COMMON_API __declspec(dllimport)
-#endif /* BROTLICOMMON_SHARED_COMPILATION */
-#if defined(BROTLIDEC_SHARED_COMPILATION)
-#define BROTLI_DEC_API __declspec(dllexport)
-#else
-#define BROTLI_DEC_API __declspec(dllimport)
-#endif /* BROTLIDEC_SHARED_COMPILATION */
-#if defined(BROTLIENC_SHARED_COMPILATION)
-#define BROTLI_ENC_API __declspec(dllexport)
-#else
-#define BROTLI_ENC_API __declspec(dllimport)
-#endif /* BROTLIENC_SHARED_COMPILATION */
-#else /* _WIN32 */
-#define BROTLI_COMMON_API BROTLI_PUBLIC
-#define BROTLI_DEC_API BROTLI_PUBLIC
-#define BROTLI_ENC_API BROTLI_PUBLIC
-#endif /* _WIN32 */
-#else /* BROTLI_SHARED_COMPILATION */
-#define BROTLI_COMMON_API
-#define BROTLI_DEC_API
-#define BROTLI_ENC_API
-#endif
-
-#endif /* BROTLI_COMMON_PORT_H_ */
diff --git a/MdeModulePkg/Library/BrotliCustomDecompressLib/brotli/types.h b/MdeModulePkg/Library/BrotliCustomDecompressLib/brotli/types.h
deleted file mode 100644
index 35c95696423e..000000000000
--- a/MdeModulePkg/Library/BrotliCustomDecompressLib/brotli/types.h
+++ /dev/null
@@ -1,92 +0,0 @@
-/* Copyright 2013 Google Inc. All Rights Reserved.
-
- Distributed under MIT license.
- See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
-*/
-
-/**
- * @file
- * Common types used in decoder and encoder API.
- */
-
-#ifndef BROTLI_COMMON_TYPES_H_
-#define BROTLI_COMMON_TYPES_H_
-
-//#include <stddef.h> /* for size_t */
-typedef UINTN size_t;
-
-#if defined(_MSC_VER) && (_MSC_VER < 1600)
-typedef __int8 int8_t;
-typedef unsigned __int8 uint8_t;
-typedef __int16 int16_t;
-typedef unsigned __int16 uint16_t;
-typedef __int32 int32_t;
-typedef unsigned __int32 uint32_t;
-typedef unsigned __int64 uint64_t;
-typedef __int64 int64_t;
-#else
-//#include <stdint.h>
-typedef INT8 int8_t;
-typedef INT16 int16_t;
-typedef INT32 int32_t;
-typedef INT64 int64_t;
-typedef UINT8 uint8_t;
-typedef UINT16 uint16_t;
-typedef UINT32 uint32_t;
-typedef UINT64 uint64_t;
-#endif /* defined(_MSC_VER) && (_MSC_VER < 1600) */
-
-/**
- * A portable @c bool replacement.
- *
- * ::BROTLI_BOOL is a "documentation" type: actually it is @c int, but in API it
- * denotes a type, whose only values are ::BROTLI_TRUE and ::BROTLI_FALSE.
- *
- * ::BROTLI_BOOL values passed to Brotli should either be ::BROTLI_TRUE or
- * ::BROTLI_FALSE, or be a result of ::TO_BROTLI_BOOL macros.
- *
- * ::BROTLI_BOOL values returned by Brotli should not be tested for equality
- * with @c true, @c false, ::BROTLI_TRUE, ::BROTLI_FALSE, but rather should be
- * evaluated, for example: @code{.cpp}
- * if (SomeBrotliFunction(encoder, BROTLI_TRUE) &&
- * !OtherBrotliFunction(decoder, BROTLI_FALSE)) {
- * bool x = !!YetAnotherBrotliFunction(encoder, TO_BROLTI_BOOL(2 * 2 == 4));
- * DoSomething(x);
- * }
- * @endcode
- */
-#define BROTLI_BOOL int
-/** Portable @c true replacement. */
-#define BROTLI_TRUE 1
-/** Portable @c false replacement. */
-#define BROTLI_FALSE 0
-/** @c bool to ::BROTLI_BOOL conversion macros. */
-#define TO_BROTLI_BOOL(X) (!!(X) ? BROTLI_TRUE : BROTLI_FALSE)
-
-#define BROTLI_MAKE_UINT64_T(high, low) ((((uint64_t)(high)) << 32) | low)
-
-#define BROTLI_UINT32_MAX (~((uint32_t)0))
-#define BROTLI_SIZE_MAX (~((size_t)0))
-
-/**
- * Allocating function pointer type.
- *
- * @param opaque custom memory manager handle provided by client
- * @param size requested memory region size; can not be @c 0
- * @returns @c 0 in the case of failure
- * @returns a valid pointer to a memory region of at least @p size bytes
- * long otherwise
- */
-typedef void* (*brotli_alloc_func)(void* opaque, size_t size);
-
-/**
- * Deallocating function pointer type.
- *
- * This function @b SHOULD do nothing if @p address is @c 0.
- *
- * @param opaque custom memory manager handle provided by client
- * @param address memory region pointer returned by ::brotli_alloc_func, or @c 0
- */
-typedef void (*brotli_free_func)(void* opaque, void* address);
-
-#endif /* BROTLI_COMMON_TYPES_H_ */
diff --git a/MdeModulePkg/Library/BrotliCustomDecompressLib/common/constants.h b/MdeModulePkg/Library/BrotliCustomDecompressLib/common/constants.h
deleted file mode 100644
index 1a29f035e899..000000000000
--- a/MdeModulePkg/Library/BrotliCustomDecompressLib/common/constants.h
+++ /dev/null
@@ -1,64 +0,0 @@
-/* Copyright 2016 Google Inc. All Rights Reserved.
-
- Distributed under MIT license.
- See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
-*/
-
-#ifndef BROTLI_COMMON_CONSTANTS_H_
-#define BROTLI_COMMON_CONSTANTS_H_
-
-/* Specification: 7.3. Encoding of the context map */
-#define BROTLI_CONTEXT_MAP_MAX_RLE 16
-
-/* Specification: 2. Compressed representation overview */
-#define BROTLI_MAX_NUMBER_OF_BLOCK_TYPES 256
-
-/* Specification: 3.3. Alphabet sizes: insert-and-copy length */
-#define BROTLI_NUM_LITERAL_SYMBOLS 256
-#define BROTLI_NUM_COMMAND_SYMBOLS 704
-#define BROTLI_NUM_BLOCK_LEN_SYMBOLS 26
-#define BROTLI_MAX_CONTEXT_MAP_SYMBOLS (BROTLI_MAX_NUMBER_OF_BLOCK_TYPES + \
- BROTLI_CONTEXT_MAP_MAX_RLE)
-#define BROTLI_MAX_BLOCK_TYPE_SYMBOLS (BROTLI_MAX_NUMBER_OF_BLOCK_TYPES + 2)
-
-/* Specification: 3.5. Complex prefix codes */
-#define BROTLI_REPEAT_PREVIOUS_CODE_LENGTH 16
-#define BROTLI_REPEAT_ZERO_CODE_LENGTH 17
-#define BROTLI_CODE_LENGTH_CODES (BROTLI_REPEAT_ZERO_CODE_LENGTH + 1)
-/* "code length of 8 is repeated" */
-#define BROTLI_INITIAL_REPEATED_CODE_LENGTH 8
-
-/* "Large Window Brotli" */
-#define BROTLI_LARGE_MAX_DISTANCE_BITS 62U
-#define BROTLI_LARGE_MIN_WBITS 10
-#define BROTLI_LARGE_MAX_WBITS 30
-
-/* Specification: 4. Encoding of distances */
-#define BROTLI_NUM_DISTANCE_SHORT_CODES 16
-#define BROTLI_MAX_NPOSTFIX 3
-#define BROTLI_MAX_NDIRECT 120
-#define BROTLI_MAX_DISTANCE_BITS 24U
-#define BROTLI_DISTANCE_ALPHABET_SIZE(NPOSTFIX, NDIRECT, MAXNBITS) ( \
- BROTLI_NUM_DISTANCE_SHORT_CODES + (NDIRECT) + \
- ((MAXNBITS) << ((NPOSTFIX) + 1)))
-/* BROTLI_NUM_DISTANCE_SYMBOLS == 1128 */
-#define BROTLI_NUM_DISTANCE_SYMBOLS \
- BROTLI_DISTANCE_ALPHABET_SIZE( \
- BROTLI_MAX_NDIRECT, BROTLI_MAX_NPOSTFIX, BROTLI_LARGE_MAX_DISTANCE_BITS)
-#define BROTLI_MAX_DISTANCE 0x3FFFFFC
-#define BROTLI_MAX_ALLOWED_DISTANCE 0x7FFFFFFC
-
-/* 7.1. Context modes and context ID lookup for literals */
-/* "context IDs for literals are in the range of 0..63" */
-#define BROTLI_LITERAL_CONTEXT_BITS 6
-
-/* 7.2. Context ID for distances */
-#define BROTLI_DISTANCE_CONTEXT_BITS 2
-
-/* 9.1. Format of the Stream Header */
-/* Number of slack bytes for window size. Don't confuse
- with BROTLI_NUM_DISTANCE_SHORT_CODES. */
-#define BROTLI_WINDOW_GAP 16
-#define BROTLI_MAX_BACKWARD_LIMIT(W) (((size_t)1 << (W)) - BROTLI_WINDOW_GAP)
-
-#endif /* BROTLI_COMMON_CONSTANTS_H_ */
diff --git a/MdeModulePkg/Library/BrotliCustomDecompressLib/common/context.h b/MdeModulePkg/Library/BrotliCustomDecompressLib/common/context.h
deleted file mode 100644
index 7ffc640eafa4..000000000000
--- a/MdeModulePkg/Library/BrotliCustomDecompressLib/common/context.h
+++ /dev/null
@@ -1,261 +0,0 @@
-/* Copyright 2013 Google Inc. All Rights Reserved.
-
- Distributed under MIT license.
- See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
-*/
-
-/* Lookup table to map the previous two bytes to a context id.
-
- There are four different context modeling modes defined here:
- CONTEXT_LSB6: context id is the least significant 6 bits of the last byte,
- CONTEXT_MSB6: context id is the most significant 6 bits of the last byte,
- CONTEXT_UTF8: second-order context model tuned for UTF8-encoded text,
- CONTEXT_SIGNED: second-order context model tuned for signed integers.
-
- If |p1| and |p2| are the previous two bytes, and |mode| is current context
- mode, we calculate the context as:
-
- context = ContextLut(mode)[p1] | ContextLut(mode)[p2 + 256].
-
- For CONTEXT_UTF8 mode, if the previous two bytes are ASCII characters
- (i.e. < 128), this will be equivalent to
-
- context = 4 * context1(p1) + context2(p2),
-
- where context1 is based on the previous byte in the following way:
-
- 0 : non-ASCII control
- 1 : \t, \n, \r
- 2 : space
- 3 : other punctuation
- 4 : " '
- 5 : %
- 6 : ( < [ {
- 7 : ) > ] }
- 8 : , ; :
- 9 : .
- 10 : =
- 11 : number
- 12 : upper-case vowel
- 13 : upper-case consonant
- 14 : lower-case vowel
- 15 : lower-case consonant
-
- and context2 is based on the second last byte:
-
- 0 : control, space
- 1 : punctuation
- 2 : upper-case letter, number
- 3 : lower-case letter
-
- If the last byte is ASCII, and the second last byte is not (in a valid UTF8
- stream it will be a continuation byte, value between 128 and 191), the
- context is the same as if the second last byte was an ASCII control or space.
-
- If the last byte is a UTF8 lead byte (value >= 192), then the next byte will
- be a continuation byte and the context id is 2 or 3 depending on the LSB of
- the last byte and to a lesser extent on the second last byte if it is ASCII.
-
- If the last byte is a UTF8 continuation byte, the second last byte can be:
- - continuation byte: the next byte is probably ASCII or lead byte (assuming
- 4-byte UTF8 characters are rare) and the context id is 0 or 1.
- - lead byte (192 - 207): next byte is ASCII or lead byte, context is 0 or 1
- - lead byte (208 - 255): next byte is continuation byte, context is 2 or 3
-
- The possible value combinations of the previous two bytes, the range of
- context ids and the type of the next byte is summarized in the table below:
-
- |--------\-----------------------------------------------------------------|
- | \ Last byte |
- | Second \---------------------------------------------------------------|
- | last byte \ ASCII | cont. byte | lead byte |
- | \ (0-127) | (128-191) | (192-) |
- |=============|===================|=====================|==================|
- | ASCII | next: ASCII/lead | not valid | next: cont. |
- | (0-127) | context: 4 - 63 | | context: 2 - 3 |
- |-------------|-------------------|---------------------|------------------|
- | cont. byte | next: ASCII/lead | next: ASCII/lead | next: cont. |
- | (128-191) | context: 4 - 63 | context: 0 - 1 | context: 2 - 3 |
- |-------------|-------------------|---------------------|------------------|
- | lead byte | not valid | next: ASCII/lead | not valid |
- | (192-207) | | context: 0 - 1 | |
- |-------------|-------------------|---------------------|------------------|
- | lead byte | not valid | next: cont. | not valid |
- | (208-) | | context: 2 - 3 | |
- |-------------|-------------------|---------------------|------------------|
-*/
-
-#ifndef BROTLI_COMMON_CONTEXT_H_
-#define BROTLI_COMMON_CONTEXT_H_
-
-#include <brotli/types.h>
-
-typedef enum ContextType {
- CONTEXT_LSB6 = 0,
- CONTEXT_MSB6 = 1,
- CONTEXT_UTF8 = 2,
- CONTEXT_SIGNED = 3
-} ContextType;
-
-/* Common context lookup table for all context modes. */
-static const uint8_t kContextLookup[2048] = {
- /* CONTEXT_LSB6, last byte. */
- 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
- 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,
- 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,
- 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63,
- 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
- 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,
- 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,
- 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63,
- 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
- 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,
- 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,
- 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63,
- 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
- 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,
- 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,
- 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63,
-
- /* CONTEXT_LSB6, second last byte, */
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* CONTEXT_MSB6, last byte. */
- 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3,
- 4, 4, 4, 4, 5, 5, 5, 5, 6, 6, 6, 6, 7, 7, 7, 7,
- 8, 8, 8, 8, 9, 9, 9, 9, 10, 10, 10, 10, 11, 11, 11, 11,
- 12, 12, 12, 12, 13, 13, 13, 13, 14, 14, 14, 14, 15, 15, 15, 15,
- 16, 16, 16, 16, 17, 17, 17, 17, 18, 18, 18, 18, 19, 19, 19, 19,
- 20, 20, 20, 20, 21, 21, 21, 21, 22, 22, 22, 22, 23, 23, 23, 23,
- 24, 24, 24, 24, 25, 25, 25, 25, 26, 26, 26, 26, 27, 27, 27, 27,
- 28, 28, 28, 28, 29, 29, 29, 29, 30, 30, 30, 30, 31, 31, 31, 31,
- 32, 32, 32, 32, 33, 33, 33, 33, 34, 34, 34, 34, 35, 35, 35, 35,
- 36, 36, 36, 36, 37, 37, 37, 37, 38, 38, 38, 38, 39, 39, 39, 39,
- 40, 40, 40, 40, 41, 41, 41, 41, 42, 42, 42, 42, 43, 43, 43, 43,
- 44, 44, 44, 44, 45, 45, 45, 45, 46, 46, 46, 46, 47, 47, 47, 47,
- 48, 48, 48, 48, 49, 49, 49, 49, 50, 50, 50, 50, 51, 51, 51, 51,
- 52, 52, 52, 52, 53, 53, 53, 53, 54, 54, 54, 54, 55, 55, 55, 55,
- 56, 56, 56, 56, 57, 57, 57, 57, 58, 58, 58, 58, 59, 59, 59, 59,
- 60, 60, 60, 60, 61, 61, 61, 61, 62, 62, 62, 62, 63, 63, 63, 63,
-
- /* CONTEXT_MSB6, second last byte, */
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* CONTEXT_UTF8, last byte. */
- /* ASCII range. */
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 0, 0, 4, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 8, 12, 16, 12, 12, 20, 12, 16, 24, 28, 12, 12, 32, 12, 36, 12,
- 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 32, 32, 24, 40, 28, 12,
- 12, 48, 52, 52, 52, 48, 52, 52, 52, 48, 52, 52, 52, 52, 52, 48,
- 52, 52, 52, 52, 52, 48, 52, 52, 52, 52, 52, 24, 12, 28, 12, 12,
- 12, 56, 60, 60, 60, 56, 60, 60, 60, 56, 60, 60, 60, 60, 60, 56,
- 60, 60, 60, 60, 60, 56, 60, 60, 60, 60, 60, 24, 12, 28, 12, 0,
- /* UTF8 continuation byte range. */
- 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1,
- 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1,
- 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1,
- 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1,
- /* UTF8 lead byte range. */
- 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3,
- 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3,
- 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3,
- 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3,
-
- /* CONTEXT_UTF8 second last byte. */
- /* ASCII range. */
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1,
- 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1,
- 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
- 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 1, 1, 1, 0,
- /* UTF8 continuation byte range. */
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- /* UTF8 lead byte range. */
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
-
- /* CONTEXT_SIGNED, last byte, same as the above values shifted by 3 bits. */
- 0, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
- 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
- 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
- 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
- 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
- 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
- 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
- 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
- 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
- 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
- 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
- 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
- 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40,
- 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40,
- 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40,
- 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 56,
-
- /* CONTEXT_SIGNED, second last byte. */
- 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
- 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
- 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
- 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
- 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
- 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
- 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 7,
-};
-
-typedef const uint8_t* ContextLut;
-
-/* typeof(MODE) == ContextType; returns ContextLut */
-#define BROTLI_CONTEXT_LUT(MODE) (&kContextLookup[(MODE) << 9])
-
-/* typeof(LUT) == ContextLut */
-#define BROTLI_CONTEXT(P1, P2, LUT) ((LUT)[P1] | ((LUT) + 256)[P2])
-
-#endif /* BROTLI_COMMON_CONTEXT_H_ */
diff --git a/MdeModulePkg/Library/BrotliCustomDecompressLib/common/dictionary.h b/MdeModulePkg/Library/BrotliCustomDecompressLib/common/dictionary.h
deleted file mode 100644
index a68a1c54493e..000000000000
--- a/MdeModulePkg/Library/BrotliCustomDecompressLib/common/dictionary.h
+++ /dev/null
@@ -1,64 +0,0 @@
-/* Copyright 2013 Google Inc. All Rights Reserved.
-
- Distributed under MIT license.
- See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
-*/
-
-/* Collection of static dictionary words. */
-
-#ifndef BROTLI_COMMON_DICTIONARY_H_
-#define BROTLI_COMMON_DICTIONARY_H_
-
-#include <brotli/port.h>
-#include <brotli/types.h>
-
-#if defined(__cplusplus) || defined(c_plusplus)
-extern "C" {
-#endif
-
-typedef struct BrotliDictionary {
- /**
- * Number of bits to encode index of dictionary word in a bucket.
- *
- * Specification: Appendix A. Static Dictionary Data
- *
- * Words in a dictionary are bucketed by length.
- * @c 0 means that there are no words of a given length.
- * Dictionary consists of words with length of [4..24] bytes.
- * Values at [0..3] and [25..31] indices should not be addressed.
- */
- uint8_t size_bits_by_length[32];
-
- /* assert(offset[i + 1] == offset[i] + (bits[i] ? (i << bits[i]) : 0)) */
- uint32_t offsets_by_length[32];
-
- /* assert(data_size == offsets_by_length[31]) */
- size_t data_size;
-
- /* Data array is not bound, and should obey to size_bits_by_length values.
- Specified size matches default (RFC 7932) dictionary. Its size is
- defined by data_size */
- const uint8_t* data;
-} BrotliDictionary;
-
-BROTLI_COMMON_API const BrotliDictionary* BrotliGetDictionary(void);
-
-/**
- * Sets dictionary data.
- *
- * When dictionary data is already set / present, this method is no-op.
- *
- * Dictionary data MUST be provided before BrotliGetDictionary is invoked.
- * This method is used ONLY in multi-client environment (e.g. C + Java),
- * to reduce storage by sharing single dictionary between implementations.
- */
-BROTLI_COMMON_API void BrotliSetDictionaryData(const uint8_t* data);
-
-#define BROTLI_MIN_DICTIONARY_WORD_LENGTH 4
-#define BROTLI_MAX_DICTIONARY_WORD_LENGTH 24
-
-#if defined(__cplusplus) || defined(c_plusplus)
-} /* extern "C" */
-#endif
-
-#endif /* BROTLI_COMMON_DICTIONARY_H_ */
diff --git a/MdeModulePkg/Library/BrotliCustomDecompressLib/common/platform.h b/MdeModulePkg/Library/BrotliCustomDecompressLib/common/platform.h
deleted file mode 100644
index 0bd5c46cf083..000000000000
--- a/MdeModulePkg/Library/BrotliCustomDecompressLib/common/platform.h
+++ /dev/null
@@ -1,559 +0,0 @@
-/* Copyright 2016 Google Inc. All Rights Reserved.
-
- Distributed under MIT license.
- See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
-*/
-
-/* Macros for compiler / platform specific features and build options.
-
- Build options are:
- * BROTLI_BUILD_32_BIT disables 64-bit optimizations
- * BROTLI_BUILD_64_BIT forces to use 64-bit optimizations
- * BROTLI_BUILD_BIG_ENDIAN forces to use big-endian optimizations
- * BROTLI_BUILD_ENDIAN_NEUTRAL disables endian-aware optimizations
- * BROTLI_BUILD_LITTLE_ENDIAN forces to use little-endian optimizations
- * BROTLI_BUILD_PORTABLE disables dangerous optimizations, like unaligned
- read and overlapping memcpy; this reduces decompression speed by 5%
- * BROTLI_BUILD_NO_RBIT disables "rbit" optimization for ARM CPUs
- * BROTLI_DEBUG dumps file name and line number when decoder detects stream
- or memory error
- * BROTLI_ENABLE_LOG enables asserts and dumps various state information
-*/
-
-#ifndef BROTLI_COMMON_PLATFORM_H_
-#define BROTLI_COMMON_PLATFORM_H_
-
-//#include <string.h> /* memcpy */
-//#include <stdlib.h> /* malloc, free */
-
-#include <brotli/port.h>
-#include <brotli/types.h>
-#include <BrotliDecompressLibInternal.h>
-
-#if defined(OS_LINUX) || defined(OS_CYGWIN)
-#include <endian.h>
-#elif defined(OS_FREEBSD)
-#include <machine/endian.h>
-#elif defined(OS_MACOSX)
-#include <machine/endian.h>
-/* Let's try and follow the Linux convention */
-#define BROTLI_X_BYTE_ORDER BYTE_ORDER
-#define BROTLI_X_LITTLE_ENDIAN LITTLE_ENDIAN
-#define BROTLI_X_BIG_ENDIAN BIG_ENDIAN
-#endif
-
-#if defined(BROTLI_ENABLE_LOG) || defined(BROTLI_DEBUG)
-#include <assert.h>
-#include <stdio.h>
-#endif
-
-/* The following macros were borrowed from https://github.com/nemequ/hedley
- * with permission of original author - Evan Nemerson <evan@nemerson.com> */
-
-/* >>> >>> >>> hedley macros */
-
-/* Define "BROTLI_PREDICT_TRUE" and "BROTLI_PREDICT_FALSE" macros for capable
- compilers.
-
-To apply compiler hint, enclose the branching condition into macros, like this:
-
- if (BROTLI_PREDICT_TRUE(zero == 0)) {
- // main execution path
- } else {
- // compiler should place this code outside of main execution path
- }
-
-OR:
-
- if (BROTLI_PREDICT_FALSE(something_rare_or_unexpected_happens)) {
- // compiler should place this code outside of main execution path
- }
-
-*/
-#if BROTLI_GNUC_HAS_BUILTIN(__builtin_expect, 3, 0, 0) || \
- BROTLI_INTEL_VERSION_CHECK(16, 0, 0) || \
- BROTLI_SUNPRO_VERSION_CHECK(5, 12, 0) || \
- BROTLI_ARM_VERSION_CHECK(4, 1, 0) || \
- BROTLI_IBM_VERSION_CHECK(10, 1, 0) || \
- BROTLI_TI_VERSION_CHECK(7, 3, 0) || \
- BROTLI_TINYC_VERSION_CHECK(0, 9, 27)
-#define BROTLI_PREDICT_TRUE(x) (__builtin_expect(!!(x), 1))
-#define BROTLI_PREDICT_FALSE(x) (__builtin_expect(x, 0))
-#else
-#define BROTLI_PREDICT_FALSE(x) (x)
-#define BROTLI_PREDICT_TRUE(x) (x)
-#endif
-
-#if defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) && \
- !defined(__cplusplus)
-#define BROTLI_RESTRICT restrict
-#elif BROTLI_GNUC_VERSION_CHECK(3, 1, 0) || \
- BROTLI_MSVC_VERSION_CHECK(14, 0, 0) || \
- BROTLI_INTEL_VERSION_CHECK(16, 0, 0) || \
- BROTLI_ARM_VERSION_CHECK(4, 1, 0) || \
- BROTLI_IBM_VERSION_CHECK(10, 1, 0) || \
- BROTLI_PGI_VERSION_CHECK(17, 10, 0) || \
- BROTLI_TI_VERSION_CHECK(8, 0, 0) || \
- BROTLI_IAR_VERSION_CHECK(8, 0, 0) || \
- (BROTLI_SUNPRO_VERSION_CHECK(5, 14, 0) && defined(__cplusplus))
-#define BROTLI_RESTRICT __restrict
-#elif BROTLI_SUNPRO_VERSION_CHECK(5, 3, 0) && !defined(__cplusplus)
-#define BROTLI_RESTRICT _Restrict
-#else
-#define BROTLI_RESTRICT
-#endif
-
-#if (defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L)) || \
- (defined(__cplusplus) && (__cplusplus >= 199711L))
-#define BROTLI_MAYBE_INLINE inline
-#elif defined(__GNUC_STDC_INLINE__) || defined(__GNUC_GNU_INLINE__) || \
- BROTLI_ARM_VERSION_CHECK(6, 2, 0)
-#define BROTLI_MAYBE_INLINE __inline__
-#elif BROTLI_MSVC_VERSION_CHECK(12, 0, 0) || \
- BROTLI_ARM_VERSION_CHECK(4, 1, 0) || BROTLI_TI_VERSION_CHECK(8, 0, 0)
-#define BROTLI_MAYBE_INLINE __inline
-#else
-#define BROTLI_MAYBE_INLINE
-#endif
-
-#if BROTLI_GNUC_HAS_ATTRIBUTE(always_inline, 4, 0, 0) || \
- BROTLI_INTEL_VERSION_CHECK(16, 0, 0) || \
- BROTLI_SUNPRO_VERSION_CHECK(5, 11, 0) || \
- BROTLI_ARM_VERSION_CHECK(4, 1, 0) || \
- BROTLI_IBM_VERSION_CHECK(10, 1, 0) || \
- BROTLI_TI_VERSION_CHECK(8, 0, 0) || \
- (BROTLI_TI_VERSION_CHECK(7, 3, 0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__))
-#define BROTLI_INLINE BROTLI_MAYBE_INLINE __attribute__((__always_inline__))
-#elif BROTLI_MSVC_VERSION_CHECK(12, 0, 0)
-#define BROTLI_INLINE BROTLI_MAYBE_INLINE __forceinline
-#elif BROTLI_TI_VERSION_CHECK(7, 0, 0) && defined(__cplusplus)
-#define BROTLI_INLINE BROTLI_MAYBE_INLINE _Pragma("FUNC_ALWAYS_INLINE;")
-#elif BROTLI_IAR_VERSION_CHECK(8, 0, 0)
-#define BROTLI_INLINE BROTLI_MAYBE_INLINE _Pragma("inline=forced")
-#else
-#define BROTLI_INLINE BROTLI_MAYBE_INLINE
-#endif
-
-#if BROTLI_GNUC_HAS_ATTRIBUTE(noinline, 4, 0, 0) || \
- BROTLI_INTEL_VERSION_CHECK(16, 0, 0) || \
- BROTLI_SUNPRO_VERSION_CHECK(5, 11, 0) || \
- BROTLI_ARM_VERSION_CHECK(4, 1, 0) || \
- BROTLI_IBM_VERSION_CHECK(10, 1, 0) || \
- BROTLI_TI_VERSION_CHECK(8, 0, 0) || \
- (BROTLI_TI_VERSION_CHECK(7, 3, 0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__))
-#define BROTLI_NOINLINE __attribute__((__noinline__))
-#elif BROTLI_MSVC_VERSION_CHECK(13, 10, 0)
-#define BROTLI_NOINLINE __declspec(noinline)
-#elif BROTLI_PGI_VERSION_CHECK(10, 2, 0)
-#define BROTLI_NOINLINE _Pragma("noinline")
-#elif BROTLI_TI_VERSION_CHECK(6, 0, 0) && defined(__cplusplus)
-#define BROTLI_NOINLINE _Pragma("FUNC_CANNOT_INLINE;")
-#elif BROTLI_IAR_VERSION_CHECK(8, 0, 0)
-#define BROTLI_NOINLINE _Pragma("inline=never")
-#else
-#define BROTLI_NOINLINE
-#endif
-
-/* BROTLI_INTERNAL could be defined to override visibility, e.g. for tests. */
-#if !defined(BROTLI_INTERNAL)
-#if defined(_WIN32) || defined(__CYGWIN__)
-#define BROTLI_INTERNAL
-#elif BROTLI_GNUC_VERSION_CHECK(3, 3, 0) || \
- BROTLI_TI_VERSION_CHECK(8, 0, 0) || \
- BROTLI_INTEL_VERSION_CHECK(16, 0, 0) || \
- BROTLI_ARM_VERSION_CHECK(4, 1, 0) || \
- BROTLI_IBM_VERSION_CHECK(13, 1, 0) || \
- BROTLI_SUNPRO_VERSION_CHECK(5, 11, 0) || \
- (BROTLI_TI_VERSION_CHECK(7, 3, 0) && \
- defined(__TI_GNU_ATTRIBUTE_SUPPORT__) && defined(__TI_EABI__))
-#define BROTLI_INTERNAL __attribute__ ((visibility ("hidden")))
-#else
-#define BROTLI_INTERNAL
-#endif
-#endif
-
-/* <<< <<< <<< end of hedley macros. */
-
-#if BROTLI_GNUC_HAS_ATTRIBUTE(unused, 2, 7, 0) || \
- BROTLI_INTEL_VERSION_CHECK(16, 0, 0)
-#define BROTLI_UNUSED_FUNCTION static BROTLI_INLINE __attribute__ ((unused))
-#else
-#define BROTLI_UNUSED_FUNCTION static BROTLI_INLINE
-#endif
-
-#if (defined(__ARM_ARCH) && (__ARM_ARCH == 7)) || \
- (defined(M_ARM) && (M_ARM == 7))
-#define BROTLI_TARGET_ARMV7
-#endif /* ARMv7 */
-
-#if (defined(__ARM_ARCH) && (__ARM_ARCH == 8)) || \
- defined(__aarch64__) || defined(__ARM64_ARCH_8__)
-#define BROTLI_TARGET_ARMV8_ANY
-
-#if defined(__ARM_32BIT_STATE)
-#define BROTLI_TARGET_ARMV8_32
-#elif defined(__ARM_64BIT_STATE)
-#define BROTLI_TARGET_ARMV8_64
-#endif
-
-#endif /* ARMv8 */
-
-#if defined(__i386) || defined(_M_IX86)
-#define BROTLI_TARGET_X86
-#endif
-
-#if defined(__x86_64__) || defined(_M_X64)
-#define BROTLI_TARGET_X64
-#endif
-
-#if defined(__PPC64__)
-#define BROTLI_TARGET_POWERPC64
-#endif
-
-#if defined(__riscv) && defined(__riscv_xlen) && __riscv_xlen == 64
-#define BROTLI_TARGET_RISCV64
-#endif
-
-#if defined(BROTLI_BUILD_64_BIT)
-#define BROTLI_64_BITS 1
-#elif defined(BROTLI_BUILD_32_BIT)
-#define BROTLI_64_BITS 0
-#elif defined(BROTLI_TARGET_X64) || defined(BROTLI_TARGET_ARMV8_64) || \
- defined(BROTLI_TARGET_POWERPC64) || defined(BROTLI_TARGET_RISCV64)
-#define BROTLI_64_BITS 1
-#else
-#define BROTLI_64_BITS 0
-#endif
-
-#if (BROTLI_64_BITS)
-#define brotli_reg_t uint64_t
-#else
-#define brotli_reg_t uint32_t
-#endif
-
-#if defined(BROTLI_BUILD_BIG_ENDIAN)
-#define BROTLI_BIG_ENDIAN 1
-#elif defined(BROTLI_BUILD_LITTLE_ENDIAN)
-#define BROTLI_LITTLE_ENDIAN 1
-#elif defined(BROTLI_BUILD_ENDIAN_NEUTRAL)
-/* Just break elif chain. */
-#elif defined(__BYTE_ORDER__) && (__BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__)
-#define BROTLI_LITTLE_ENDIAN 1
-#elif defined(_WIN32) || defined(BROTLI_TARGET_X64)
-/* Win32 & x64 can currently always be assumed to be little endian */
-#define BROTLI_LITTLE_ENDIAN 1
-#elif defined(__BYTE_ORDER__) && (__BYTE_ORDER__ == __ORDER_BIG_ENDIAN__)
-#define BROTLI_BIG_ENDIAN 1
-#elif defined(BROTLI_X_BYTE_ORDER)
-#if BROTLI_X_BYTE_ORDER == BROTLI_X_LITTLE_ENDIAN
-#define BROTLI_LITTLE_ENDIAN 1
-#elif BROTLI_X_BYTE_ORDER == BROTLI_X_BIG_ENDIAN
-#define BROTLI_BIG_ENDIAN 1
-#endif
-#endif /* BROTLI_X_BYTE_ORDER */
-
-#if !defined(BROTLI_LITTLE_ENDIAN)
-#define BROTLI_LITTLE_ENDIAN 0
-#endif
-
-#if !defined(BROTLI_BIG_ENDIAN)
-#define BROTLI_BIG_ENDIAN 0
-#endif
-
-#if defined(BROTLI_X_BYTE_ORDER)
-#undef BROTLI_X_BYTE_ORDER
-#undef BROTLI_X_LITTLE_ENDIAN
-#undef BROTLI_X_BIG_ENDIAN
-#endif
-
-#if defined(BROTLI_BUILD_PORTABLE)
-#define BROTLI_ALIGNED_READ (!!1)
-#elif defined(BROTLI_TARGET_X86) || defined(BROTLI_TARGET_X64) || \
- defined(BROTLI_TARGET_ARMV7) || defined(BROTLI_TARGET_ARMV8_ANY) || \
- defined(BROTLI_TARGET_RISCV64)
-/* Allow unaligned read only for white-listed CPUs. */
-#define BROTLI_ALIGNED_READ (!!0)
-#else
-#define BROTLI_ALIGNED_READ (!!1)
-#endif
-
-#if BROTLI_ALIGNED_READ
-/* Portable unaligned memory access: read / write values via memcpy. */
-static BROTLI_INLINE uint16_t BrotliUnalignedRead16(const void* p) {
- uint16_t t;
- memcpy(&t, p, sizeof t);
- return t;
-}
-static BROTLI_INLINE uint32_t BrotliUnalignedRead32(const void* p) {
- uint32_t t;
- memcpy(&t, p, sizeof t);
- return t;
-}
-static BROTLI_INLINE uint64_t BrotliUnalignedRead64(const void* p) {
- uint64_t t;
- memcpy(&t, p, sizeof t);
- return t;
-}
-static BROTLI_INLINE void BrotliUnalignedWrite64(void* p, uint64_t v) {
- memcpy(p, &v, sizeof v);
-}
-#else /* BROTLI_ALIGNED_READ */
-/* Unaligned memory access is allowed: just cast pointer to requested type. */
-#if defined(ADDRESS_SANITIZER) || defined(THREAD_SANITIZER) || \
- defined(MEMORY_SANITIZER)
-/* Consider we have an unaligned load/store of 4 bytes from address 0x...05.
- AddressSanitizer will treat it as a 3-byte access to the range 05:07 and
- will miss a bug if 08 is the first unaddressable byte.
- ThreadSanitizer will also treat this as a 3-byte access to 05:07 and will
- miss a race between this access and some other accesses to 08.
- MemorySanitizer will correctly propagate the shadow on unaligned stores
- and correctly report bugs on unaligned loads, but it may not properly
- update and report the origin of the uninitialized memory.
- For all three tools, replacing an unaligned access with a tool-specific
- callback solves the problem. */
-#if defined(__cplusplus)
-extern "C" {
-#endif /* __cplusplus */
- uint16_t __sanitizer_unaligned_load16(const void* p);
- uint32_t __sanitizer_unaligned_load32(const void* p);
- uint64_t __sanitizer_unaligned_load64(const void* p);
- void __sanitizer_unaligned_store64(void* p, uint64_t v);
-#if defined(__cplusplus)
-} /* extern "C" */
-#endif /* __cplusplus */
-#define BrotliUnalignedRead16 __sanitizer_unaligned_load16
-#define BrotliUnalignedRead32 __sanitizer_unaligned_load32
-#define BrotliUnalignedRead64 __sanitizer_unaligned_load64
-#define BrotliUnalignedWrite64 __sanitizer_unaligned_store64
-#else
-static BROTLI_INLINE uint16_t BrotliUnalignedRead16(const void* p) {
- return *(const uint16_t*)p;
-}
-static BROTLI_INLINE uint32_t BrotliUnalignedRead32(const void* p) {
- return *(const uint32_t*)p;
-}
-#if (BROTLI_64_BITS)
-static BROTLI_INLINE uint64_t BrotliUnalignedRead64(const void* p) {
- return *(const uint64_t*)p;
-}
-static BROTLI_INLINE void BrotliUnalignedWrite64(void* p, uint64_t v) {
- *(uint64_t*)p = v;
-}
-#else /* BROTLI_64_BITS */
-/* Avoid emitting LDRD / STRD, which require properly aligned address. */
-/* If __attribute__(aligned) is available, use that. Otherwise, memcpy. */
-
-#if BROTLI_GNUC_HAS_ATTRIBUTE(aligned, 2, 7, 0)
-typedef __attribute__((aligned(1))) uint64_t brotli_unaligned_uint64_t;
-
-static BROTLI_INLINE uint64_t BrotliUnalignedRead64(const void* p) {
- return (uint64_t) ((brotli_unaligned_uint64_t*) p)[0];
-}
-static BROTLI_INLINE void BrotliUnalignedWrite64(void* p, uint64_t v) {
- brotli_unaligned_uint64_t* dwords = (brotli_unaligned_uint64_t*) p;
- dwords[0] = (brotli_unaligned_uint64_t) v;
-}
-#else /* BROTLI_GNUC_HAS_ATTRIBUTE(aligned, 2, 7, 0) */
-static BROTLI_INLINE uint64_t BrotliUnalignedRead64(const void* p) {
- uint64_t v;
- memcpy(&v, p, sizeof(uint64_t));
- return v;
-}
-
-static BROTLI_INLINE void BrotliUnalignedWrite64(void* p, uint64_t v) {
- memcpy(p, &v, sizeof(uint64_t));
-}
-#endif /* BROTLI_GNUC_HAS_ATTRIBUTE(aligned, 2, 7, 0) */
-#endif /* BROTLI_64_BITS */
-#endif /* ASAN / TSAN / MSAN */
-#endif /* BROTLI_ALIGNED_READ */
-
-#if BROTLI_LITTLE_ENDIAN
-/* Straight endianness. Just read / write values. */
-#define BROTLI_UNALIGNED_LOAD16LE BrotliUnalignedRead16
-#define BROTLI_UNALIGNED_LOAD32LE BrotliUnalignedRead32
-#define BROTLI_UNALIGNED_LOAD64LE BrotliUnalignedRead64
-#define BROTLI_UNALIGNED_STORE64LE BrotliUnalignedWrite64
-#elif BROTLI_BIG_ENDIAN /* BROTLI_LITTLE_ENDIAN */
-/* Explain compiler to byte-swap values. */
-#define BROTLI_BSWAP16_(V) ((uint16_t)( \
- (((V) & 0xFFU) << 8) | \
- (((V) >> 8) & 0xFFU)))
-static BROTLI_INLINE uint16_t BROTLI_UNALIGNED_LOAD16LE(const void* p) {
- uint16_t value = BrotliUnalignedRead16(p);
- return BROTLI_BSWAP16_(value);
-}
-#define BROTLI_BSWAP32_(V) ( \
- (((V) & 0xFFU) << 24) | (((V) & 0xFF00U) << 8) | \
- (((V) >> 8) & 0xFF00U) | (((V) >> 24) & 0xFFU))
-static BROTLI_INLINE uint32_t BROTLI_UNALIGNED_LOAD32LE(const void* p) {
- uint32_t value = BrotliUnalignedRead32(p);
- return BROTLI_BSWAP32_(value);
-}
-#define BROTLI_BSWAP64_(V) ( \
- (((V) & 0xFFU) << 56) | (((V) & 0xFF00U) << 40) | \
- (((V) & 0xFF0000U) << 24) | (((V) & 0xFF000000U) << 8) | \
- (((V) >> 8) & 0xFF000000U) | (((V) >> 24) & 0xFF0000U) | \
- (((V) >> 40) & 0xFF00U) | (((V) >> 56) & 0xFFU))
-static BROTLI_INLINE uint64_t BROTLI_UNALIGNED_LOAD64LE(const void* p) {
- uint64_t value = BrotliUnalignedRead64(p);
- return BROTLI_BSWAP64_(value);
-}
-static BROTLI_INLINE void BROTLI_UNALIGNED_STORE64LE(void* p, uint64_t v) {
- uint64_t value = BROTLI_BSWAP64_(v);
- BrotliUnalignedWrite64(p, value);
-}
-#else /* BROTLI_LITTLE_ENDIAN */
-/* Read / store values byte-wise; hopefully compiler will understand. */
-static BROTLI_INLINE uint16_t BROTLI_UNALIGNED_LOAD16LE(const void* p) {
- const uint8_t* in = (const uint8_t*)p;
- return (uint16_t)(in[0] | (in[1] << 8));
-}
-static BROTLI_INLINE uint32_t BROTLI_UNALIGNED_LOAD32LE(const void* p) {
- const uint8_t* in = (const uint8_t*)p;
- uint32_t value = (uint32_t)(in[0]);
- value |= (uint32_t)(in[1]) << 8;
- value |= (uint32_t)(in[2]) << 16;
- value |= (uint32_t)(in[3]) << 24;
- return value;
-}
-static BROTLI_INLINE uint64_t BROTLI_UNALIGNED_LOAD64LE(const void* p) {
- const uint8_t* in = (const uint8_t*)p;
- uint64_t value = (uint64_t)(in[0]);
- value |= (uint64_t)(in[1]) << 8;
- value |= (uint64_t)(in[2]) << 16;
- value |= (uint64_t)(in[3]) << 24;
- value |= (uint64_t)(in[4]) << 32;
- value |= (uint64_t)(in[5]) << 40;
- value |= (uint64_t)(in[6]) << 48;
- value |= (uint64_t)(in[7]) << 56;
- return value;
-}
-static BROTLI_INLINE void BROTLI_UNALIGNED_STORE64LE(void* p, uint64_t v) {
- uint8_t* out = (uint8_t*)p;
- out[0] = (uint8_t)v;
- out[1] = (uint8_t)(v >> 8);
- out[2] = (uint8_t)(v >> 16);
- out[3] = (uint8_t)(v >> 24);
- out[4] = (uint8_t)(v >> 32);
- out[5] = (uint8_t)(v >> 40);
- out[6] = (uint8_t)(v >> 48);
- out[7] = (uint8_t)(v >> 56);
-}
-#endif /* BROTLI_LITTLE_ENDIAN */
-
-/* BROTLI_IS_CONSTANT macros returns true for compile-time constants. */
-#if BROTLI_GNUC_HAS_BUILTIN(__builtin_constant_p, 3, 0, 1) || \
- BROTLI_INTEL_VERSION_CHECK(16, 0, 0)
-#define BROTLI_IS_CONSTANT(x) (!!__builtin_constant_p(x))
-#else
-#define BROTLI_IS_CONSTANT(x) (!!0)
-#endif
-
-#if defined(BROTLI_TARGET_ARMV7) || defined(BROTLI_TARGET_ARMV8_ANY)
-#define BROTLI_HAS_UBFX (!!1)
-#else
-#define BROTLI_HAS_UBFX (!!0)
-#endif
-
-#if defined(BROTLI_ENABLE_LOG)
-#define BROTLI_DCHECK(x) assert(x)
-#define BROTLI_LOG(x) printf x
-#else
-#define BROTLI_DCHECK(x)
-#define BROTLI_LOG(x)
-#endif
-
-#if defined(BROTLI_DEBUG) || defined(BROTLI_ENABLE_LOG)
-static BROTLI_INLINE void BrotliDump(const char* f, int l, const char* fn) {
- fprintf(stderr, "%s:%d (%s)\n", f, l, fn);
- fflush(stderr);
-}
-#define BROTLI_DUMP() BrotliDump(__FILE__, __LINE__, __FUNCTION__)
-#else
-#define BROTLI_DUMP() (void)(0)
-#endif
-
-/* TODO: add appropriate icc/sunpro/arm/ibm/ti checks. */
-#if (BROTLI_GNUC_VERSION_CHECK(3, 0, 0) || defined(__llvm__)) && \
- !defined(BROTLI_BUILD_NO_RBIT)
-#if defined(BROTLI_TARGET_ARMV7) || defined(BROTLI_TARGET_ARMV8_ANY)
-/* TODO: detect ARMv6T2 and enable this code for it. */
-static BROTLI_INLINE brotli_reg_t BrotliRBit(brotli_reg_t input) {
- brotli_reg_t output;
- __asm__("rbit %0, %1\n" : "=r"(output) : "r"(input));
- return output;
-}
-#define BROTLI_RBIT(x) BrotliRBit(x)
-#endif /* armv7 / armv8 */
-#endif /* gcc || clang */
-#if !defined(BROTLI_RBIT)
-static BROTLI_INLINE void BrotliRBit(void) { /* Should break build if used. */ }
-#endif /* BROTLI_RBIT */
-
-#define BROTLI_REPEAT(N, X) { \
- if ((N & 1) != 0) {X;} \
- if ((N & 2) != 0) {X; X;} \
- if ((N & 4) != 0) {X; X; X; X;} \
-}
-
-#define BROTLI_UNUSED(X) (void)(X)
-
-#define BROTLI_MIN_MAX(T) \
- static BROTLI_INLINE T brotli_min_ ## T (T a, T b) { return a < b ? a : b; } \
- static BROTLI_INLINE T brotli_max_ ## T (T a, T b) { return a > b ? a : b; }
-BROTLI_MIN_MAX(double) BROTLI_MIN_MAX(float) BROTLI_MIN_MAX(int)
-BROTLI_MIN_MAX(size_t) BROTLI_MIN_MAX(uint32_t) BROTLI_MIN_MAX(uint8_t)
-#undef BROTLI_MIN_MAX
-#define BROTLI_MIN(T, A, B) (brotli_min_ ## T((A), (B)))
-#define BROTLI_MAX(T, A, B) (brotli_max_ ## T((A), (B)))
-
-#define BROTLI_SWAP(T, A, I, J) { \
- T __brotli_swap_tmp = (A)[(I)]; \
- (A)[(I)] = (A)[(J)]; \
- (A)[(J)] = __brotli_swap_tmp; \
-}
-
-/* Default brotli_alloc_func */
-static void* BrotliDefaultAllocFunc(void* opaque, size_t size) {
- BROTLI_UNUSED(opaque);
- return BrDummyMalloc(size);
-}
-
-/* Default brotli_free_func */
-static void BrotliDefaultFreeFunc(void* opaque, void* address) {
- BROTLI_UNUSED(opaque);
- BrDummyFree(address);
-}
-
-BROTLI_UNUSED_FUNCTION void BrotliSuppressUnusedFunctions(void) {
- BROTLI_UNUSED(&BrotliSuppressUnusedFunctions);
- BROTLI_UNUSED(&BrotliUnalignedRead16);
- BROTLI_UNUSED(&BrotliUnalignedRead32);
- BROTLI_UNUSED(&BrotliUnalignedRead64);
- BROTLI_UNUSED(&BrotliUnalignedWrite64);
- BROTLI_UNUSED(&BROTLI_UNALIGNED_LOAD16LE);
- BROTLI_UNUSED(&BROTLI_UNALIGNED_LOAD32LE);
- BROTLI_UNUSED(&BROTLI_UNALIGNED_LOAD64LE);
- BROTLI_UNUSED(&BROTLI_UNALIGNED_STORE64LE);
- BROTLI_UNUSED(&BrotliRBit);
- BROTLI_UNUSED(&brotli_min_double);
- BROTLI_UNUSED(&brotli_max_double);
- BROTLI_UNUSED(&brotli_min_float);
- BROTLI_UNUSED(&brotli_max_float);
- BROTLI_UNUSED(&brotli_min_int);
- BROTLI_UNUSED(&brotli_max_int);
- BROTLI_UNUSED(&brotli_min_size_t);
- BROTLI_UNUSED(&brotli_max_size_t);
- BROTLI_UNUSED(&brotli_min_uint32_t);
- BROTLI_UNUSED(&brotli_max_uint32_t);
- BROTLI_UNUSED(&brotli_min_uint8_t);
- BROTLI_UNUSED(&brotli_max_uint8_t);
- BROTLI_UNUSED(&BrotliDefaultAllocFunc);
- BROTLI_UNUSED(&BrotliDefaultFreeFunc);
-#if defined(BROTLI_DEBUG) || defined(BROTLI_ENABLE_LOG)
- BROTLI_UNUSED(&BrotliDump);
-#endif
-}
-
-#endif /* BROTLI_COMMON_PLATFORM_H_ */
diff --git a/MdeModulePkg/Library/BrotliCustomDecompressLib/common/transform.h b/MdeModulePkg/Library/BrotliCustomDecompressLib/common/transform.h
deleted file mode 100644
index 8b42cd1807b0..000000000000
--- a/MdeModulePkg/Library/BrotliCustomDecompressLib/common/transform.h
+++ /dev/null
@@ -1,80 +0,0 @@
-/* transforms is a part of ABI, but not API.
-
- It means that there are some functions that are supposed to be in "common"
- library, but header itself is not placed into include/brotli. This way,
- aforementioned functions will be available only to brotli internals.
- */
-
-#ifndef BROTLI_COMMON_TRANSFORM_H_
-#define BROTLI_COMMON_TRANSFORM_H_
-
-#include <brotli/port.h>
-#include <brotli/types.h>
-
-#if defined(__cplusplus) || defined(c_plusplus)
-extern "C" {
-#endif
-
-enum BrotliWordTransformType {
- BROTLI_TRANSFORM_IDENTITY = 0,
- BROTLI_TRANSFORM_OMIT_LAST_1 = 1,
- BROTLI_TRANSFORM_OMIT_LAST_2 = 2,
- BROTLI_TRANSFORM_OMIT_LAST_3 = 3,
- BROTLI_TRANSFORM_OMIT_LAST_4 = 4,
- BROTLI_TRANSFORM_OMIT_LAST_5 = 5,
- BROTLI_TRANSFORM_OMIT_LAST_6 = 6,
- BROTLI_TRANSFORM_OMIT_LAST_7 = 7,
- BROTLI_TRANSFORM_OMIT_LAST_8 = 8,
- BROTLI_TRANSFORM_OMIT_LAST_9 = 9,
- BROTLI_TRANSFORM_UPPERCASE_FIRST = 10,
- BROTLI_TRANSFORM_UPPERCASE_ALL = 11,
- BROTLI_TRANSFORM_OMIT_FIRST_1 = 12,
- BROTLI_TRANSFORM_OMIT_FIRST_2 = 13,
- BROTLI_TRANSFORM_OMIT_FIRST_3 = 14,
- BROTLI_TRANSFORM_OMIT_FIRST_4 = 15,
- BROTLI_TRANSFORM_OMIT_FIRST_5 = 16,
- BROTLI_TRANSFORM_OMIT_FIRST_6 = 17,
- BROTLI_TRANSFORM_OMIT_FIRST_7 = 18,
- BROTLI_TRANSFORM_OMIT_FIRST_8 = 19,
- BROTLI_TRANSFORM_OMIT_FIRST_9 = 20,
- BROTLI_NUM_TRANSFORM_TYPES /* Counts transforms, not a transform itself. */
-};
-
-#define BROTLI_TRANSFORMS_MAX_CUT_OFF BROTLI_TRANSFORM_OMIT_LAST_9
-
-typedef struct BrotliTransforms {
- uint16_t prefix_suffix_size;
- /* Last character must be null, so prefix_suffix_size must be at least 1. */
- const uint8_t* prefix_suffix;
- const uint16_t* prefix_suffix_map;
- uint32_t num_transforms;
- /* Each entry is a [prefix_id, transform, suffix_id] triplet. */
- const uint8_t* transforms;
- /* Indices of transforms like ["", BROTLI_TRANSFORM_OMIT_LAST_#, ""].
- 0-th element corresponds to ["", BROTLI_TRANSFORM_IDENTITY, ""].
- -1, if cut-off transform does not exist. */
- int16_t cutOffTransforms[BROTLI_TRANSFORMS_MAX_CUT_OFF + 1];
-} BrotliTransforms;
-
-/* T is BrotliTransforms*; result is uint8_t. */
-#define BROTLI_TRANSFORM_PREFIX_ID(T, I) ((T)->transforms[((I) * 3) + 0])
-#define BROTLI_TRANSFORM_TYPE(T, I) ((T)->transforms[((I) * 3) + 1])
-#define BROTLI_TRANSFORM_SUFFIX_ID(T, I) ((T)->transforms[((I) * 3) + 2])
-
-/* T is BrotliTransforms*; result is const uint8_t*. */
-#define BROTLI_TRANSFORM_PREFIX(T, I) (&(T)->prefix_suffix[ \
- (T)->prefix_suffix_map[BROTLI_TRANSFORM_PREFIX_ID(T, I)]])
-#define BROTLI_TRANSFORM_SUFFIX(T, I) (&(T)->prefix_suffix[ \
- (T)->prefix_suffix_map[BROTLI_TRANSFORM_SUFFIX_ID(T, I)]])
-
-BROTLI_COMMON_API const BrotliTransforms* BrotliGetTransforms(void);
-
-BROTLI_COMMON_API int BrotliTransformDictionaryWord(
- uint8_t* dst, const uint8_t* word, int len,
- const BrotliTransforms* transforms, int transform_idx);
-
-#if defined(__cplusplus) || defined(c_plusplus)
-} /* extern "C" */
-#endif
-
-#endif /* BROTLI_COMMON_TRANSFORM_H_ */
diff --git a/MdeModulePkg/Library/BrotliCustomDecompressLib/common/version.h b/MdeModulePkg/Library/BrotliCustomDecompressLib/common/version.h
deleted file mode 100644
index 8e94f4ffeacd..000000000000
--- a/MdeModulePkg/Library/BrotliCustomDecompressLib/common/version.h
+++ /dev/null
@@ -1,26 +0,0 @@
-/* Copyright 2016 Google Inc. All Rights Reserved.
-
- Distributed under MIT license.
- See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
-*/
-
-/* Version definition. */
-
-#ifndef BROTLI_COMMON_VERSION_H_
-#define BROTLI_COMMON_VERSION_H_
-
-/* This macro should only be used when library is compiled together with client.
- If library is dynamically linked, use BrotliDecoderVersion and
- BrotliEncoderVersion methods. */
-
-/* Semantic version, calculated as (MAJOR << 24) | (MINOR << 12) | PATCH */
-#define BROTLI_VERSION 0x1000006
-
-/* This macro is used by build system to produce Libtool-friendly soname. See
- https://www.gnu.org/software/libtool/manual/html_node/Libtool-versioning.html
- */
-
-/* ABI version, calculated as (CURRENT << 24) | (REVISION << 12) | AGE */
-#define BROTLI_ABI_VERSION 0x1006000
-
-#endif /* BROTLI_COMMON_VERSION_H_ */
diff --git a/MdeModulePkg/Library/BrotliCustomDecompressLib/dec/bit_reader.h b/MdeModulePkg/Library/BrotliCustomDecompressLib/dec/bit_reader.h
deleted file mode 100644
index bf2b938dec8b..000000000000
--- a/MdeModulePkg/Library/BrotliCustomDecompressLib/dec/bit_reader.h
+++ /dev/null
@@ -1,309 +0,0 @@
-/* Copyright 2013 Google Inc. All Rights Reserved.
-
- Distributed under MIT license.
- See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
-*/
-
-/* Bit reading helpers */
-
-#ifndef BROTLI_DEC_BIT_READER_H_
-#define BROTLI_DEC_BIT_READER_H_
-
-//#include <string.h> /* memcpy */
-
-#include "../common/platform.h"
-#include <brotli/types.h>
-
-#if defined(__cplusplus) || defined(c_plusplus)
-extern "C" {
-#endif
-
-#define BROTLI_SHORT_FILL_BIT_WINDOW_READ (sizeof(brotli_reg_t) >> 1)
-
-static const uint32_t kBitMask[33] = { 0x00000000,
- 0x00000001, 0x00000003, 0x00000007, 0x0000000F,
- 0x0000001F, 0x0000003F, 0x0000007F, 0x000000FF,
- 0x000001FF, 0x000003FF, 0x000007FF, 0x00000FFF,
- 0x00001FFF, 0x00003FFF, 0x00007FFF, 0x0000FFFF,
- 0x0001FFFF, 0x0003FFFF, 0x0007FFFF, 0x000FFFFF,
- 0x001FFFFF, 0x003FFFFF, 0x007FFFFF, 0x00FFFFFF,
- 0x01FFFFFF, 0x03FFFFFF, 0x07FFFFFF, 0x0FFFFFFF,
- 0x1FFFFFFF, 0x3FFFFFFF, 0x7FFFFFFF, 0xFFFFFFFF
-};
-
-static BROTLI_INLINE uint32_t BitMask(uint32_t n) {
- if (BROTLI_IS_CONSTANT(n) || BROTLI_HAS_UBFX) {
- /* Masking with this expression turns to a single
- "Unsigned Bit Field Extract" UBFX instruction on ARM. */
- return ~((0xFFFFFFFFu) << n);
- } else {
- return kBitMask[n];
- }
-}
-
-typedef struct {
- brotli_reg_t val_; /* pre-fetched bits */
- uint32_t bit_pos_; /* current bit-reading position in val_ */
- const uint8_t* next_in; /* the byte we're reading from */
- size_t avail_in;
-} BrotliBitReader;
-
-typedef struct {
- brotli_reg_t val_;
- uint32_t bit_pos_;
- const uint8_t* next_in;
- size_t avail_in;
-} BrotliBitReaderState;
-
-/* Initializes the BrotliBitReader fields. */
-BROTLI_INTERNAL void BrotliInitBitReader(BrotliBitReader* const br);
-
-/* Ensures that accumulator is not empty.
- May consume up to sizeof(brotli_reg_t) - 1 bytes of input.
- Returns BROTLI_FALSE if data is required but there is no input available.
- For BROTLI_ALIGNED_READ this function also prepares bit reader for aligned
- reading. */
-BROTLI_INTERNAL BROTLI_BOOL BrotliWarmupBitReader(BrotliBitReader* const br);
-
-static BROTLI_INLINE void BrotliBitReaderSaveState(
- BrotliBitReader* const from, BrotliBitReaderState* to) {
- to->val_ = from->val_;
- to->bit_pos_ = from->bit_pos_;
- to->next_in = from->next_in;
- to->avail_in = from->avail_in;
-}
-
-static BROTLI_INLINE void BrotliBitReaderRestoreState(
- BrotliBitReader* const to, BrotliBitReaderState* from) {
- to->val_ = from->val_;
- to->bit_pos_ = from->bit_pos_;
- to->next_in = from->next_in;
- to->avail_in = from->avail_in;
-}
-
-static BROTLI_INLINE uint32_t BrotliGetAvailableBits(
- const BrotliBitReader* br) {
- return (BROTLI_64_BITS ? 64 : 32) - br->bit_pos_;
-}
-
-/* Returns amount of unread bytes the bit reader still has buffered from the
- BrotliInput, including whole bytes in br->val_. */
-static BROTLI_INLINE size_t BrotliGetRemainingBytes(BrotliBitReader* br) {
- return br->avail_in + (BrotliGetAvailableBits(br) >> 3);
-}
-
-/* Checks if there is at least |num| bytes left in the input ring-buffer
- (excluding the bits remaining in br->val_). */
-static BROTLI_INLINE BROTLI_BOOL BrotliCheckInputAmount(
- BrotliBitReader* const br, size_t num) {
- return TO_BROTLI_BOOL(br->avail_in >= num);
-}
-
-/* Guarantees that there are at least |n_bits| + 1 bits in accumulator.
- Precondition: accumulator contains at least 1 bit.
- |n_bits| should be in the range [1..24] for regular build. For portable
- non-64-bit little-endian build only 16 bits are safe to request. */
-static BROTLI_INLINE void BrotliFillBitWindow(
- BrotliBitReader* const br, uint32_t n_bits) {
-#if (BROTLI_64_BITS)
- if (!BROTLI_ALIGNED_READ && BROTLI_IS_CONSTANT(n_bits) && (n_bits <= 8)) {
- if (br->bit_pos_ >= 56) {
- br->val_ >>= 56;
- br->bit_pos_ ^= 56; /* here same as -= 56 because of the if condition */
- br->val_ |= BROTLI_UNALIGNED_LOAD64LE(br->next_in) << 8;
- br->avail_in -= 7;
- br->next_in += 7;
- }
- } else if (
- !BROTLI_ALIGNED_READ && BROTLI_IS_CONSTANT(n_bits) && (n_bits <= 16)) {
- if (br->bit_pos_ >= 48) {
- br->val_ >>= 48;
- br->bit_pos_ ^= 48; /* here same as -= 48 because of the if condition */
- br->val_ |= BROTLI_UNALIGNED_LOAD64LE(br->next_in) << 16;
- br->avail_in -= 6;
- br->next_in += 6;
- }
- } else {
- if (br->bit_pos_ >= 32) {
- br->val_ >>= 32;
- br->bit_pos_ ^= 32; /* here same as -= 32 because of the if condition */
- br->val_ |= ((uint64_t)BROTLI_UNALIGNED_LOAD32LE(br->next_in)) << 32;
- br->avail_in -= BROTLI_SHORT_FILL_BIT_WINDOW_READ;
- br->next_in += BROTLI_SHORT_FILL_BIT_WINDOW_READ;
- }
- }
-#else
- if (!BROTLI_ALIGNED_READ && BROTLI_IS_CONSTANT(n_bits) && (n_bits <= 8)) {
- if (br->bit_pos_ >= 24) {
- br->val_ >>= 24;
- br->bit_pos_ ^= 24; /* here same as -= 24 because of the if condition */
- br->val_ |= BROTLI_UNALIGNED_LOAD32LE(br->next_in) << 8;
- br->avail_in -= 3;
- br->next_in += 3;
- }
- } else {
- if (br->bit_pos_ >= 16) {
- br->val_ >>= 16;
- br->bit_pos_ ^= 16; /* here same as -= 16 because of the if condition */
- br->val_ |= ((uint32_t)BROTLI_UNALIGNED_LOAD16LE(br->next_in)) << 16;
- br->avail_in -= BROTLI_SHORT_FILL_BIT_WINDOW_READ;
- br->next_in += BROTLI_SHORT_FILL_BIT_WINDOW_READ;
- }
- }
-#endif
-}
-
-/* Mostly like BrotliFillBitWindow, but guarantees only 16 bits and reads no
- more than BROTLI_SHORT_FILL_BIT_WINDOW_READ bytes of input. */
-static BROTLI_INLINE void BrotliFillBitWindow16(BrotliBitReader* const br) {
- BrotliFillBitWindow(br, 17);
-}
-
-/* Tries to pull one byte of input to accumulator.
- Returns BROTLI_FALSE if there is no input available. */
-static BROTLI_INLINE BROTLI_BOOL BrotliPullByte(BrotliBitReader* const br) {
- if (br->avail_in == 0) {
- return BROTLI_FALSE;
- }
- br->val_ >>= 8;
-#if (BROTLI_64_BITS)
- br->val_ |= ((uint64_t)*br->next_in) << 56;
-#else
- br->val_ |= ((uint32_t)*br->next_in) << 24;
-#endif
- br->bit_pos_ -= 8;
- --br->avail_in;
- ++br->next_in;
- return BROTLI_TRUE;
-}
-
-/* Returns currently available bits.
- The number of valid bits could be calculated by BrotliGetAvailableBits. */
-static BROTLI_INLINE brotli_reg_t BrotliGetBitsUnmasked(
- BrotliBitReader* const br) {
- return br->val_ >> br->bit_pos_;
-}
-
-/* Like BrotliGetBits, but does not mask the result.
- The result contains at least 16 valid bits. */
-static BROTLI_INLINE uint32_t BrotliGet16BitsUnmasked(
- BrotliBitReader* const br) {
- BrotliFillBitWindow(br, 16);
- return (uint32_t)BrotliGetBitsUnmasked(br);
-}
-
-/* Returns the specified number of bits from |br| without advancing bit
- position. */
-static BROTLI_INLINE uint32_t BrotliGetBits(
- BrotliBitReader* const br, uint32_t n_bits) {
- BrotliFillBitWindow(br, n_bits);
- return (uint32_t)BrotliGetBitsUnmasked(br) & BitMask(n_bits);
-}
-
-/* Tries to peek the specified amount of bits. Returns BROTLI_FALSE, if there
- is not enough input. */
-static BROTLI_INLINE BROTLI_BOOL BrotliSafeGetBits(
- BrotliBitReader* const br, uint32_t n_bits, uint32_t* val) {
- while (BrotliGetAvailableBits(br) < n_bits) {
- if (!BrotliPullByte(br)) {
- return BROTLI_FALSE;
- }
- }
- *val = (uint32_t)BrotliGetBitsUnmasked(br) & BitMask(n_bits);
- return BROTLI_TRUE;
-}
-
-/* Advances the bit pos by |n_bits|. */
-static BROTLI_INLINE void BrotliDropBits(
- BrotliBitReader* const br, uint32_t n_bits) {
- br->bit_pos_ += n_bits;
-}
-
-static BROTLI_INLINE void BrotliBitReaderUnload(BrotliBitReader* br) {
- uint32_t unused_bytes = BrotliGetAvailableBits(br) >> 3;
- uint32_t unused_bits = unused_bytes << 3;
- br->avail_in += unused_bytes;
- br->next_in -= unused_bytes;
- if (unused_bits == sizeof(br->val_) << 3) {
- br->val_ = 0;
- } else {
- br->val_ <<= unused_bits;
- }
- br->bit_pos_ += unused_bits;
-}
-
-/* Reads the specified number of bits from |br| and advances the bit pos.
- Precondition: accumulator MUST contain at least |n_bits|. */
-static BROTLI_INLINE void BrotliTakeBits(
- BrotliBitReader* const br, uint32_t n_bits, uint32_t* val) {
- *val = (uint32_t)BrotliGetBitsUnmasked(br) & BitMask(n_bits);
- BROTLI_LOG(("[BrotliReadBits] %d %d %d val: %6x\n",
- (int)br->avail_in, (int)br->bit_pos_, (int)n_bits, (int)*val));
- BrotliDropBits(br, n_bits);
-}
-
-/* Reads the specified number of bits from |br| and advances the bit pos.
- Assumes that there is enough input to perform BrotliFillBitWindow. */
-static BROTLI_INLINE uint32_t BrotliReadBits(
- BrotliBitReader* const br, uint32_t n_bits) {
- if (BROTLI_64_BITS || (n_bits <= 16)) {
- uint32_t val;
- BrotliFillBitWindow(br, n_bits);
- BrotliTakeBits(br, n_bits, &val);
- return val;
- } else {
- uint32_t low_val;
- uint32_t high_val;
- BrotliFillBitWindow(br, 16);
- BrotliTakeBits(br, 16, &low_val);
- BrotliFillBitWindow(br, 8);
- BrotliTakeBits(br, n_bits - 16, &high_val);
- return low_val | (high_val << 16);
- }
-}
-
-/* Tries to read the specified amount of bits. Returns BROTLI_FALSE, if there
- is not enough input. |n_bits| MUST be positive. */
-static BROTLI_INLINE BROTLI_BOOL BrotliSafeReadBits(
- BrotliBitReader* const br, uint32_t n_bits, uint32_t* val) {
- while (BrotliGetAvailableBits(br) < n_bits) {
- if (!BrotliPullByte(br)) {
- return BROTLI_FALSE;
- }
- }
- BrotliTakeBits(br, n_bits, val);
- return BROTLI_TRUE;
-}
-
-/* Advances the bit reader position to the next byte boundary and verifies
- that any skipped bits are set to zero. */
-static BROTLI_INLINE BROTLI_BOOL BrotliJumpToByteBoundary(BrotliBitReader* br) {
- uint32_t pad_bits_count = BrotliGetAvailableBits(br) & 0x7;
- uint32_t pad_bits = 0;
- if (pad_bits_count != 0) {
- BrotliTakeBits(br, pad_bits_count, &pad_bits);
- }
- return TO_BROTLI_BOOL(pad_bits == 0);
-}
-
-/* Copies remaining input bytes stored in the bit reader to the output. Value
- |num| may not be larger than BrotliGetRemainingBytes. The bit reader must be
- warmed up again after this. */
-static BROTLI_INLINE void BrotliCopyBytes(uint8_t* dest,
- BrotliBitReader* br, size_t num) {
- while (BrotliGetAvailableBits(br) >= 8 && num > 0) {
- *dest = (uint8_t)BrotliGetBitsUnmasked(br);
- BrotliDropBits(br, 8);
- ++dest;
- --num;
- }
- memcpy(dest, br->next_in, num);
- br->avail_in -= num;
- br->next_in += num;
-}
-
-#if defined(__cplusplus) || defined(c_plusplus)
-} /* extern "C" */
-#endif
-
-#endif /* BROTLI_DEC_BIT_READER_H_ */
diff --git a/MdeModulePkg/Library/BrotliCustomDecompressLib/dec/huffman.h b/MdeModulePkg/Library/BrotliCustomDecompressLib/dec/huffman.h
deleted file mode 100644
index 5fc8c0224edc..000000000000
--- a/MdeModulePkg/Library/BrotliCustomDecompressLib/dec/huffman.h
+++ /dev/null
@@ -1,72 +0,0 @@
-/* Copyright 2013 Google Inc. All Rights Reserved.
-
- Distributed under MIT license.
- See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
-*/
-
-/* Utilities for building Huffman decoding tables. */
-
-#ifndef BROTLI_DEC_HUFFMAN_H_
-#define BROTLI_DEC_HUFFMAN_H_
-
-#include "../common/platform.h"
-#include <brotli/types.h>
-
-#if defined(__cplusplus) || defined(c_plusplus)
-extern "C" {
-#endif
-
-#define BROTLI_HUFFMAN_MAX_CODE_LENGTH 15
-
-/* Maximum possible Huffman table size for an alphabet size of (index * 32),
- max code length 15 and root table bits 8. */
-static const uint16_t kMaxHuffmanTableSize[] = {
- 256, 402, 436, 468, 500, 534, 566, 598, 630, 662, 694, 726, 758, 790, 822,
- 854, 886, 920, 952, 984, 1016, 1048, 1080, 1112, 1144, 1176, 1208, 1240, 1272,
- 1304, 1336, 1368, 1400, 1432, 1464, 1496, 1528};
-/* BROTLI_NUM_BLOCK_LEN_SYMBOLS == 26 */
-#define BROTLI_HUFFMAN_MAX_SIZE_26 396
-/* BROTLI_MAX_BLOCK_TYPE_SYMBOLS == 258 */
-#define BROTLI_HUFFMAN_MAX_SIZE_258 632
-/* BROTLI_MAX_CONTEXT_MAP_SYMBOLS == 272 */
-#define BROTLI_HUFFMAN_MAX_SIZE_272 646
-
-#define BROTLI_HUFFMAN_MAX_CODE_LENGTH_CODE_LENGTH 5
-
-typedef struct {
- uint8_t bits; /* number of bits used for this symbol */
- uint16_t value; /* symbol value or table offset */
-} HuffmanCode;
-
-/* Builds Huffman lookup table assuming code lengths are in symbol order. */
-BROTLI_INTERNAL void BrotliBuildCodeLengthsHuffmanTable(HuffmanCode* root_table,
- const uint8_t* const code_lengths, uint16_t* count);
-
-/* Builds Huffman lookup table assuming code lengths are in symbol order.
- Returns size of resulting table. */
-BROTLI_INTERNAL uint32_t BrotliBuildHuffmanTable(HuffmanCode* root_table,
- int root_bits, const uint16_t* const symbol_lists, uint16_t* count_arg);
-
-/* Builds a simple Huffman table. The |num_symbols| parameter is to be
- interpreted as follows: 0 means 1 symbol, 1 means 2 symbols,
- 2 means 3 symbols, 3 means 4 symbols with lengths [2, 2, 2, 2],
- 4 means 4 symbols with lengths [1, 2, 3, 3]. */
-BROTLI_INTERNAL uint32_t BrotliBuildSimpleHuffmanTable(HuffmanCode* table,
- int root_bits, uint16_t* symbols, uint32_t num_symbols);
-
-/* Contains a collection of Huffman trees with the same alphabet size. */
-/* max_symbol is needed due to simple codes since log2(alphabet_size) could be
- greater than log2(max_symbol). */
-typedef struct {
- HuffmanCode** htrees;
- HuffmanCode* codes;
- uint16_t alphabet_size;
- uint16_t max_symbol;
- uint16_t num_htrees;
-} HuffmanTreeGroup;
-
-#if defined(__cplusplus) || defined(c_plusplus)
-} /* extern "C" */
-#endif
-
-#endif /* BROTLI_DEC_HUFFMAN_H_ */
diff --git a/MdeModulePkg/Library/BrotliCustomDecompressLib/dec/prefix.h b/MdeModulePkg/Library/BrotliCustomDecompressLib/dec/prefix.h
deleted file mode 100644
index 39cb45920831..000000000000
--- a/MdeModulePkg/Library/BrotliCustomDecompressLib/dec/prefix.h
+++ /dev/null
@@ -1,750 +0,0 @@
-/* Copyright 2013 Google Inc. All Rights Reserved.
-
- Distributed under MIT license.
- See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
-*/
-
-/* Lookup tables to map prefix codes to value ranges. This is used during
- decoding of the block lengths, literal insertion lengths and copy lengths. */
-
-#ifndef BROTLI_DEC_PREFIX_H_
-#define BROTLI_DEC_PREFIX_H_
-
-#include "../common/constants.h"
-#include <brotli/types.h>
-
-/* Represents the range of values belonging to a prefix code:
- [offset, offset + 2^nbits) */
-struct PrefixCodeRange {
- uint16_t offset;
- uint8_t nbits;
-};
-
-static const struct PrefixCodeRange
- kBlockLengthPrefixCode[BROTLI_NUM_BLOCK_LEN_SYMBOLS] = {
- { 1, 2}, { 5, 2}, { 9, 2}, { 13, 2},
- { 17, 3}, { 25, 3}, { 33, 3}, { 41, 3},
- { 49, 4}, { 65, 4}, { 81, 4}, { 97, 4},
- { 113, 5}, { 145, 5}, { 177, 5}, { 209, 5},
- { 241, 6}, { 305, 6}, { 369, 7}, { 497, 8},
- { 753, 9}, { 1265, 10}, {2289, 11}, {4337, 12},
- {8433, 13}, {16625, 24}
-};
-
-typedef struct CmdLutElement {
- uint8_t insert_len_extra_bits;
- uint8_t copy_len_extra_bits;
- int8_t distance_code;
- uint8_t context;
- uint16_t insert_len_offset;
- uint16_t copy_len_offset;
-} CmdLutElement;
-
-static const CmdLutElement kCmdLut[BROTLI_NUM_COMMAND_SYMBOLS] = {
- { 0x00, 0x00, 0, 0x00, 0x0000, 0x0002 },
- { 0x00, 0x00, 0, 0x01, 0x0000, 0x0003 },
- { 0x00, 0x00, 0, 0x02, 0x0000, 0x0004 },
- { 0x00, 0x00, 0, 0x03, 0x0000, 0x0005 },
- { 0x00, 0x00, 0, 0x03, 0x0000, 0x0006 },
- { 0x00, 0x00, 0, 0x03, 0x0000, 0x0007 },
- { 0x00, 0x00, 0, 0x03, 0x0000, 0x0008 },
- { 0x00, 0x00, 0, 0x03, 0x0000, 0x0009 },
- { 0x00, 0x00, 0, 0x00, 0x0001, 0x0002 },
- { 0x00, 0x00, 0, 0x01, 0x0001, 0x0003 },
- { 0x00, 0x00, 0, 0x02, 0x0001, 0x0004 },
- { 0x00, 0x00, 0, 0x03, 0x0001, 0x0005 },
- { 0x00, 0x00, 0, 0x03, 0x0001, 0x0006 },
- { 0x00, 0x00, 0, 0x03, 0x0001, 0x0007 },
- { 0x00, 0x00, 0, 0x03, 0x0001, 0x0008 },
- { 0x00, 0x00, 0, 0x03, 0x0001, 0x0009 },
- { 0x00, 0x00, 0, 0x00, 0x0002, 0x0002 },
- { 0x00, 0x00, 0, 0x01, 0x0002, 0x0003 },
- { 0x00, 0x00, 0, 0x02, 0x0002, 0x0004 },
- { 0x00, 0x00, 0, 0x03, 0x0002, 0x0005 },
- { 0x00, 0x00, 0, 0x03, 0x0002, 0x0006 },
- { 0x00, 0x00, 0, 0x03, 0x0002, 0x0007 },
- { 0x00, 0x00, 0, 0x03, 0x0002, 0x0008 },
- { 0x00, 0x00, 0, 0x03, 0x0002, 0x0009 },
- { 0x00, 0x00, 0, 0x00, 0x0003, 0x0002 },
- { 0x00, 0x00, 0, 0x01, 0x0003, 0x0003 },
- { 0x00, 0x00, 0, 0x02, 0x0003, 0x0004 },
- { 0x00, 0x00, 0, 0x03, 0x0003, 0x0005 },
- { 0x00, 0x00, 0, 0x03, 0x0003, 0x0006 },
- { 0x00, 0x00, 0, 0x03, 0x0003, 0x0007 },
- { 0x00, 0x00, 0, 0x03, 0x0003, 0x0008 },
- { 0x00, 0x00, 0, 0x03, 0x0003, 0x0009 },
- { 0x00, 0x00, 0, 0x00, 0x0004, 0x0002 },
- { 0x00, 0x00, 0, 0x01, 0x0004, 0x0003 },
- { 0x00, 0x00, 0, 0x02, 0x0004, 0x0004 },
- { 0x00, 0x00, 0, 0x03, 0x0004, 0x0005 },
- { 0x00, 0x00, 0, 0x03, 0x0004, 0x0006 },
- { 0x00, 0x00, 0, 0x03, 0x0004, 0x0007 },
- { 0x00, 0x00, 0, 0x03, 0x0004, 0x0008 },
- { 0x00, 0x00, 0, 0x03, 0x0004, 0x0009 },
- { 0x00, 0x00, 0, 0x00, 0x0005, 0x0002 },
- { 0x00, 0x00, 0, 0x01, 0x0005, 0x0003 },
- { 0x00, 0x00, 0, 0x02, 0x0005, 0x0004 },
- { 0x00, 0x00, 0, 0x03, 0x0005, 0x0005 },
- { 0x00, 0x00, 0, 0x03, 0x0005, 0x0006 },
- { 0x00, 0x00, 0, 0x03, 0x0005, 0x0007 },
- { 0x00, 0x00, 0, 0x03, 0x0005, 0x0008 },
- { 0x00, 0x00, 0, 0x03, 0x0005, 0x0009 },
- { 0x01, 0x00, 0, 0x00, 0x0006, 0x0002 },
- { 0x01, 0x00, 0, 0x01, 0x0006, 0x0003 },
- { 0x01, 0x00, 0, 0x02, 0x0006, 0x0004 },
- { 0x01, 0x00, 0, 0x03, 0x0006, 0x0005 },
- { 0x01, 0x00, 0, 0x03, 0x0006, 0x0006 },
- { 0x01, 0x00, 0, 0x03, 0x0006, 0x0007 },
- { 0x01, 0x00, 0, 0x03, 0x0006, 0x0008 },
- { 0x01, 0x00, 0, 0x03, 0x0006, 0x0009 },
- { 0x01, 0x00, 0, 0x00, 0x0008, 0x0002 },
- { 0x01, 0x00, 0, 0x01, 0x0008, 0x0003 },
- { 0x01, 0x00, 0, 0x02, 0x0008, 0x0004 },
- { 0x01, 0x00, 0, 0x03, 0x0008, 0x0005 },
- { 0x01, 0x00, 0, 0x03, 0x0008, 0x0006 },
- { 0x01, 0x00, 0, 0x03, 0x0008, 0x0007 },
- { 0x01, 0x00, 0, 0x03, 0x0008, 0x0008 },
- { 0x01, 0x00, 0, 0x03, 0x0008, 0x0009 },
- { 0x00, 0x01, 0, 0x03, 0x0000, 0x000a },
- { 0x00, 0x01, 0, 0x03, 0x0000, 0x000c },
- { 0x00, 0x02, 0, 0x03, 0x0000, 0x000e },
- { 0x00, 0x02, 0, 0x03, 0x0000, 0x0012 },
- { 0x00, 0x03, 0, 0x03, 0x0000, 0x0016 },
- { 0x00, 0x03, 0, 0x03, 0x0000, 0x001e },
- { 0x00, 0x04, 0, 0x03, 0x0000, 0x0026 },
- { 0x00, 0x04, 0, 0x03, 0x0000, 0x0036 },
- { 0x00, 0x01, 0, 0x03, 0x0001, 0x000a },
- { 0x00, 0x01, 0, 0x03, 0x0001, 0x000c },
- { 0x00, 0x02, 0, 0x03, 0x0001, 0x000e },
- { 0x00, 0x02, 0, 0x03, 0x0001, 0x0012 },
- { 0x00, 0x03, 0, 0x03, 0x0001, 0x0016 },
- { 0x00, 0x03, 0, 0x03, 0x0001, 0x001e },
- { 0x00, 0x04, 0, 0x03, 0x0001, 0x0026 },
- { 0x00, 0x04, 0, 0x03, 0x0001, 0x0036 },
- { 0x00, 0x01, 0, 0x03, 0x0002, 0x000a },
- { 0x00, 0x01, 0, 0x03, 0x0002, 0x000c },
- { 0x00, 0x02, 0, 0x03, 0x0002, 0x000e },
- { 0x00, 0x02, 0, 0x03, 0x0002, 0x0012 },
- { 0x00, 0x03, 0, 0x03, 0x0002, 0x0016 },
- { 0x00, 0x03, 0, 0x03, 0x0002, 0x001e },
- { 0x00, 0x04, 0, 0x03, 0x0002, 0x0026 },
- { 0x00, 0x04, 0, 0x03, 0x0002, 0x0036 },
- { 0x00, 0x01, 0, 0x03, 0x0003, 0x000a },
- { 0x00, 0x01, 0, 0x03, 0x0003, 0x000c },
- { 0x00, 0x02, 0, 0x03, 0x0003, 0x000e },
- { 0x00, 0x02, 0, 0x03, 0x0003, 0x0012 },
- { 0x00, 0x03, 0, 0x03, 0x0003, 0x0016 },
- { 0x00, 0x03, 0, 0x03, 0x0003, 0x001e },
- { 0x00, 0x04, 0, 0x03, 0x0003, 0x0026 },
- { 0x00, 0x04, 0, 0x03, 0x0003, 0x0036 },
- { 0x00, 0x01, 0, 0x03, 0x0004, 0x000a },
- { 0x00, 0x01, 0, 0x03, 0x0004, 0x000c },
- { 0x00, 0x02, 0, 0x03, 0x0004, 0x000e },
- { 0x00, 0x02, 0, 0x03, 0x0004, 0x0012 },
- { 0x00, 0x03, 0, 0x03, 0x0004, 0x0016 },
- { 0x00, 0x03, 0, 0x03, 0x0004, 0x001e },
- { 0x00, 0x04, 0, 0x03, 0x0004, 0x0026 },
- { 0x00, 0x04, 0, 0x03, 0x0004, 0x0036 },
- { 0x00, 0x01, 0, 0x03, 0x0005, 0x000a },
- { 0x00, 0x01, 0, 0x03, 0x0005, 0x000c },
- { 0x00, 0x02, 0, 0x03, 0x0005, 0x000e },
- { 0x00, 0x02, 0, 0x03, 0x0005, 0x0012 },
- { 0x00, 0x03, 0, 0x03, 0x0005, 0x0016 },
- { 0x00, 0x03, 0, 0x03, 0x0005, 0x001e },
- { 0x00, 0x04, 0, 0x03, 0x0005, 0x0026 },
- { 0x00, 0x04, 0, 0x03, 0x0005, 0x0036 },
- { 0x01, 0x01, 0, 0x03, 0x0006, 0x000a },
- { 0x01, 0x01, 0, 0x03, 0x0006, 0x000c },
- { 0x01, 0x02, 0, 0x03, 0x0006, 0x000e },
- { 0x01, 0x02, 0, 0x03, 0x0006, 0x0012 },
- { 0x01, 0x03, 0, 0x03, 0x0006, 0x0016 },
- { 0x01, 0x03, 0, 0x03, 0x0006, 0x001e },
- { 0x01, 0x04, 0, 0x03, 0x0006, 0x0026 },
- { 0x01, 0x04, 0, 0x03, 0x0006, 0x0036 },
- { 0x01, 0x01, 0, 0x03, 0x0008, 0x000a },
- { 0x01, 0x01, 0, 0x03, 0x0008, 0x000c },
- { 0x01, 0x02, 0, 0x03, 0x0008, 0x000e },
- { 0x01, 0x02, 0, 0x03, 0x0008, 0x0012 },
- { 0x01, 0x03, 0, 0x03, 0x0008, 0x0016 },
- { 0x01, 0x03, 0, 0x03, 0x0008, 0x001e },
- { 0x01, 0x04, 0, 0x03, 0x0008, 0x0026 },
- { 0x01, 0x04, 0, 0x03, 0x0008, 0x0036 },
- { 0x00, 0x00, -1, 0x00, 0x0000, 0x0002 },
- { 0x00, 0x00, -1, 0x01, 0x0000, 0x0003 },
- { 0x00, 0x00, -1, 0x02, 0x0000, 0x0004 },
- { 0x00, 0x00, -1, 0x03, 0x0000, 0x0005 },
- { 0x00, 0x00, -1, 0x03, 0x0000, 0x0006 },
- { 0x00, 0x00, -1, 0x03, 0x0000, 0x0007 },
- { 0x00, 0x00, -1, 0x03, 0x0000, 0x0008 },
- { 0x00, 0x00, -1, 0x03, 0x0000, 0x0009 },
- { 0x00, 0x00, -1, 0x00, 0x0001, 0x0002 },
- { 0x00, 0x00, -1, 0x01, 0x0001, 0x0003 },
- { 0x00, 0x00, -1, 0x02, 0x0001, 0x0004 },
- { 0x00, 0x00, -1, 0x03, 0x0001, 0x0005 },
- { 0x00, 0x00, -1, 0x03, 0x0001, 0x0006 },
- { 0x00, 0x00, -1, 0x03, 0x0001, 0x0007 },
- { 0x00, 0x00, -1, 0x03, 0x0001, 0x0008 },
- { 0x00, 0x00, -1, 0x03, 0x0001, 0x0009 },
- { 0x00, 0x00, -1, 0x00, 0x0002, 0x0002 },
- { 0x00, 0x00, -1, 0x01, 0x0002, 0x0003 },
- { 0x00, 0x00, -1, 0x02, 0x0002, 0x0004 },
- { 0x00, 0x00, -1, 0x03, 0x0002, 0x0005 },
- { 0x00, 0x00, -1, 0x03, 0x0002, 0x0006 },
- { 0x00, 0x00, -1, 0x03, 0x0002, 0x0007 },
- { 0x00, 0x00, -1, 0x03, 0x0002, 0x0008 },
- { 0x00, 0x00, -1, 0x03, 0x0002, 0x0009 },
- { 0x00, 0x00, -1, 0x00, 0x0003, 0x0002 },
- { 0x00, 0x00, -1, 0x01, 0x0003, 0x0003 },
- { 0x00, 0x00, -1, 0x02, 0x0003, 0x0004 },
- { 0x00, 0x00, -1, 0x03, 0x0003, 0x0005 },
- { 0x00, 0x00, -1, 0x03, 0x0003, 0x0006 },
- { 0x00, 0x00, -1, 0x03, 0x0003, 0x0007 },
- { 0x00, 0x00, -1, 0x03, 0x0003, 0x0008 },
- { 0x00, 0x00, -1, 0x03, 0x0003, 0x0009 },
- { 0x00, 0x00, -1, 0x00, 0x0004, 0x0002 },
- { 0x00, 0x00, -1, 0x01, 0x0004, 0x0003 },
- { 0x00, 0x00, -1, 0x02, 0x0004, 0x0004 },
- { 0x00, 0x00, -1, 0x03, 0x0004, 0x0005 },
- { 0x00, 0x00, -1, 0x03, 0x0004, 0x0006 },
- { 0x00, 0x00, -1, 0x03, 0x0004, 0x0007 },
- { 0x00, 0x00, -1, 0x03, 0x0004, 0x0008 },
- { 0x00, 0x00, -1, 0x03, 0x0004, 0x0009 },
- { 0x00, 0x00, -1, 0x00, 0x0005, 0x0002 },
- { 0x00, 0x00, -1, 0x01, 0x0005, 0x0003 },
- { 0x00, 0x00, -1, 0x02, 0x0005, 0x0004 },
- { 0x00, 0x00, -1, 0x03, 0x0005, 0x0005 },
- { 0x00, 0x00, -1, 0x03, 0x0005, 0x0006 },
- { 0x00, 0x00, -1, 0x03, 0x0005, 0x0007 },
- { 0x00, 0x00, -1, 0x03, 0x0005, 0x0008 },
- { 0x00, 0x00, -1, 0x03, 0x0005, 0x0009 },
- { 0x01, 0x00, -1, 0x00, 0x0006, 0x0002 },
- { 0x01, 0x00, -1, 0x01, 0x0006, 0x0003 },
- { 0x01, 0x00, -1, 0x02, 0x0006, 0x0004 },
- { 0x01, 0x00, -1, 0x03, 0x0006, 0x0005 },
- { 0x01, 0x00, -1, 0x03, 0x0006, 0x0006 },
- { 0x01, 0x00, -1, 0x03, 0x0006, 0x0007 },
- { 0x01, 0x00, -1, 0x03, 0x0006, 0x0008 },
- { 0x01, 0x00, -1, 0x03, 0x0006, 0x0009 },
- { 0x01, 0x00, -1, 0x00, 0x0008, 0x0002 },
- { 0x01, 0x00, -1, 0x01, 0x0008, 0x0003 },
- { 0x01, 0x00, -1, 0x02, 0x0008, 0x0004 },
- { 0x01, 0x00, -1, 0x03, 0x0008, 0x0005 },
- { 0x01, 0x00, -1, 0x03, 0x0008, 0x0006 },
- { 0x01, 0x00, -1, 0x03, 0x0008, 0x0007 },
- { 0x01, 0x00, -1, 0x03, 0x0008, 0x0008 },
- { 0x01, 0x00, -1, 0x03, 0x0008, 0x0009 },
- { 0x00, 0x01, -1, 0x03, 0x0000, 0x000a },
- { 0x00, 0x01, -1, 0x03, 0x0000, 0x000c },
- { 0x00, 0x02, -1, 0x03, 0x0000, 0x000e },
- { 0x00, 0x02, -1, 0x03, 0x0000, 0x0012 },
- { 0x00, 0x03, -1, 0x03, 0x0000, 0x0016 },
- { 0x00, 0x03, -1, 0x03, 0x0000, 0x001e },
- { 0x00, 0x04, -1, 0x03, 0x0000, 0x0026 },
- { 0x00, 0x04, -1, 0x03, 0x0000, 0x0036 },
- { 0x00, 0x01, -1, 0x03, 0x0001, 0x000a },
- { 0x00, 0x01, -1, 0x03, 0x0001, 0x000c },
- { 0x00, 0x02, -1, 0x03, 0x0001, 0x000e },
- { 0x00, 0x02, -1, 0x03, 0x0001, 0x0012 },
- { 0x00, 0x03, -1, 0x03, 0x0001, 0x0016 },
- { 0x00, 0x03, -1, 0x03, 0x0001, 0x001e },
- { 0x00, 0x04, -1, 0x03, 0x0001, 0x0026 },
- { 0x00, 0x04, -1, 0x03, 0x0001, 0x0036 },
- { 0x00, 0x01, -1, 0x03, 0x0002, 0x000a },
- { 0x00, 0x01, -1, 0x03, 0x0002, 0x000c },
- { 0x00, 0x02, -1, 0x03, 0x0002, 0x000e },
- { 0x00, 0x02, -1, 0x03, 0x0002, 0x0012 },
- { 0x00, 0x03, -1, 0x03, 0x0002, 0x0016 },
- { 0x00, 0x03, -1, 0x03, 0x0002, 0x001e },
- { 0x00, 0x04, -1, 0x03, 0x0002, 0x0026 },
- { 0x00, 0x04, -1, 0x03, 0x0002, 0x0036 },
- { 0x00, 0x01, -1, 0x03, 0x0003, 0x000a },
- { 0x00, 0x01, -1, 0x03, 0x0003, 0x000c },
- { 0x00, 0x02, -1, 0x03, 0x0003, 0x000e },
- { 0x00, 0x02, -1, 0x03, 0x0003, 0x0012 },
- { 0x00, 0x03, -1, 0x03, 0x0003, 0x0016 },
- { 0x00, 0x03, -1, 0x03, 0x0003, 0x001e },
- { 0x00, 0x04, -1, 0x03, 0x0003, 0x0026 },
- { 0x00, 0x04, -1, 0x03, 0x0003, 0x0036 },
- { 0x00, 0x01, -1, 0x03, 0x0004, 0x000a },
- { 0x00, 0x01, -1, 0x03, 0x0004, 0x000c },
- { 0x00, 0x02, -1, 0x03, 0x0004, 0x000e },
- { 0x00, 0x02, -1, 0x03, 0x0004, 0x0012 },
- { 0x00, 0x03, -1, 0x03, 0x0004, 0x0016 },
- { 0x00, 0x03, -1, 0x03, 0x0004, 0x001e },
- { 0x00, 0x04, -1, 0x03, 0x0004, 0x0026 },
- { 0x00, 0x04, -1, 0x03, 0x0004, 0x0036 },
- { 0x00, 0x01, -1, 0x03, 0x0005, 0x000a },
- { 0x00, 0x01, -1, 0x03, 0x0005, 0x000c },
- { 0x00, 0x02, -1, 0x03, 0x0005, 0x000e },
- { 0x00, 0x02, -1, 0x03, 0x0005, 0x0012 },
- { 0x00, 0x03, -1, 0x03, 0x0005, 0x0016 },
- { 0x00, 0x03, -1, 0x03, 0x0005, 0x001e },
- { 0x00, 0x04, -1, 0x03, 0x0005, 0x0026 },
- { 0x00, 0x04, -1, 0x03, 0x0005, 0x0036 },
- { 0x01, 0x01, -1, 0x03, 0x0006, 0x000a },
- { 0x01, 0x01, -1, 0x03, 0x0006, 0x000c },
- { 0x01, 0x02, -1, 0x03, 0x0006, 0x000e },
- { 0x01, 0x02, -1, 0x03, 0x0006, 0x0012 },
- { 0x01, 0x03, -1, 0x03, 0x0006, 0x0016 },
- { 0x01, 0x03, -1, 0x03, 0x0006, 0x001e },
- { 0x01, 0x04, -1, 0x03, 0x0006, 0x0026 },
- { 0x01, 0x04, -1, 0x03, 0x0006, 0x0036 },
- { 0x01, 0x01, -1, 0x03, 0x0008, 0x000a },
- { 0x01, 0x01, -1, 0x03, 0x0008, 0x000c },
- { 0x01, 0x02, -1, 0x03, 0x0008, 0x000e },
- { 0x01, 0x02, -1, 0x03, 0x0008, 0x0012 },
- { 0x01, 0x03, -1, 0x03, 0x0008, 0x0016 },
- { 0x01, 0x03, -1, 0x03, 0x0008, 0x001e },
- { 0x01, 0x04, -1, 0x03, 0x0008, 0x0026 },
- { 0x01, 0x04, -1, 0x03, 0x0008, 0x0036 },
- { 0x02, 0x00, -1, 0x00, 0x000a, 0x0002 },
- { 0x02, 0x00, -1, 0x01, 0x000a, 0x0003 },
- { 0x02, 0x00, -1, 0x02, 0x000a, 0x0004 },
- { 0x02, 0x00, -1, 0x03, 0x000a, 0x0005 },
- { 0x02, 0x00, -1, 0x03, 0x000a, 0x0006 },
- { 0x02, 0x00, -1, 0x03, 0x000a, 0x0007 },
- { 0x02, 0x00, -1, 0x03, 0x000a, 0x0008 },
- { 0x02, 0x00, -1, 0x03, 0x000a, 0x0009 },
- { 0x02, 0x00, -1, 0x00, 0x000e, 0x0002 },
- { 0x02, 0x00, -1, 0x01, 0x000e, 0x0003 },
- { 0x02, 0x00, -1, 0x02, 0x000e, 0x0004 },
- { 0x02, 0x00, -1, 0x03, 0x000e, 0x0005 },
- { 0x02, 0x00, -1, 0x03, 0x000e, 0x0006 },
- { 0x02, 0x00, -1, 0x03, 0x000e, 0x0007 },
- { 0x02, 0x00, -1, 0x03, 0x000e, 0x0008 },
- { 0x02, 0x00, -1, 0x03, 0x000e, 0x0009 },
- { 0x03, 0x00, -1, 0x00, 0x0012, 0x0002 },
- { 0x03, 0x00, -1, 0x01, 0x0012, 0x0003 },
- { 0x03, 0x00, -1, 0x02, 0x0012, 0x0004 },
- { 0x03, 0x00, -1, 0x03, 0x0012, 0x0005 },
- { 0x03, 0x00, -1, 0x03, 0x0012, 0x0006 },
- { 0x03, 0x00, -1, 0x03, 0x0012, 0x0007 },
- { 0x03, 0x00, -1, 0x03, 0x0012, 0x0008 },
- { 0x03, 0x00, -1, 0x03, 0x0012, 0x0009 },
- { 0x03, 0x00, -1, 0x00, 0x001a, 0x0002 },
- { 0x03, 0x00, -1, 0x01, 0x001a, 0x0003 },
- { 0x03, 0x00, -1, 0x02, 0x001a, 0x0004 },
- { 0x03, 0x00, -1, 0x03, 0x001a, 0x0005 },
- { 0x03, 0x00, -1, 0x03, 0x001a, 0x0006 },
- { 0x03, 0x00, -1, 0x03, 0x001a, 0x0007 },
- { 0x03, 0x00, -1, 0x03, 0x001a, 0x0008 },
- { 0x03, 0x00, -1, 0x03, 0x001a, 0x0009 },
- { 0x04, 0x00, -1, 0x00, 0x0022, 0x0002 },
- { 0x04, 0x00, -1, 0x01, 0x0022, 0x0003 },
- { 0x04, 0x00, -1, 0x02, 0x0022, 0x0004 },
- { 0x04, 0x00, -1, 0x03, 0x0022, 0x0005 },
- { 0x04, 0x00, -1, 0x03, 0x0022, 0x0006 },
- { 0x04, 0x00, -1, 0x03, 0x0022, 0x0007 },
- { 0x04, 0x00, -1, 0x03, 0x0022, 0x0008 },
- { 0x04, 0x00, -1, 0x03, 0x0022, 0x0009 },
- { 0x04, 0x00, -1, 0x00, 0x0032, 0x0002 },
- { 0x04, 0x00, -1, 0x01, 0x0032, 0x0003 },
- { 0x04, 0x00, -1, 0x02, 0x0032, 0x0004 },
- { 0x04, 0x00, -1, 0x03, 0x0032, 0x0005 },
- { 0x04, 0x00, -1, 0x03, 0x0032, 0x0006 },
- { 0x04, 0x00, -1, 0x03, 0x0032, 0x0007 },
- { 0x04, 0x00, -1, 0x03, 0x0032, 0x0008 },
- { 0x04, 0x00, -1, 0x03, 0x0032, 0x0009 },
- { 0x05, 0x00, -1, 0x00, 0x0042, 0x0002 },
- { 0x05, 0x00, -1, 0x01, 0x0042, 0x0003 },
- { 0x05, 0x00, -1, 0x02, 0x0042, 0x0004 },
- { 0x05, 0x00, -1, 0x03, 0x0042, 0x0005 },
- { 0x05, 0x00, -1, 0x03, 0x0042, 0x0006 },
- { 0x05, 0x00, -1, 0x03, 0x0042, 0x0007 },
- { 0x05, 0x00, -1, 0x03, 0x0042, 0x0008 },
- { 0x05, 0x00, -1, 0x03, 0x0042, 0x0009 },
- { 0x05, 0x00, -1, 0x00, 0x0062, 0x0002 },
- { 0x05, 0x00, -1, 0x01, 0x0062, 0x0003 },
- { 0x05, 0x00, -1, 0x02, 0x0062, 0x0004 },
- { 0x05, 0x00, -1, 0x03, 0x0062, 0x0005 },
- { 0x05, 0x00, -1, 0x03, 0x0062, 0x0006 },
- { 0x05, 0x00, -1, 0x03, 0x0062, 0x0007 },
- { 0x05, 0x00, -1, 0x03, 0x0062, 0x0008 },
- { 0x05, 0x00, -1, 0x03, 0x0062, 0x0009 },
- { 0x02, 0x01, -1, 0x03, 0x000a, 0x000a },
- { 0x02, 0x01, -1, 0x03, 0x000a, 0x000c },
- { 0x02, 0x02, -1, 0x03, 0x000a, 0x000e },
- { 0x02, 0x02, -1, 0x03, 0x000a, 0x0012 },
- { 0x02, 0x03, -1, 0x03, 0x000a, 0x0016 },
- { 0x02, 0x03, -1, 0x03, 0x000a, 0x001e },
- { 0x02, 0x04, -1, 0x03, 0x000a, 0x0026 },
- { 0x02, 0x04, -1, 0x03, 0x000a, 0x0036 },
- { 0x02, 0x01, -1, 0x03, 0x000e, 0x000a },
- { 0x02, 0x01, -1, 0x03, 0x000e, 0x000c },
- { 0x02, 0x02, -1, 0x03, 0x000e, 0x000e },
- { 0x02, 0x02, -1, 0x03, 0x000e, 0x0012 },
- { 0x02, 0x03, -1, 0x03, 0x000e, 0x0016 },
- { 0x02, 0x03, -1, 0x03, 0x000e, 0x001e },
- { 0x02, 0x04, -1, 0x03, 0x000e, 0x0026 },
- { 0x02, 0x04, -1, 0x03, 0x000e, 0x0036 },
- { 0x03, 0x01, -1, 0x03, 0x0012, 0x000a },
- { 0x03, 0x01, -1, 0x03, 0x0012, 0x000c },
- { 0x03, 0x02, -1, 0x03, 0x0012, 0x000e },
- { 0x03, 0x02, -1, 0x03, 0x0012, 0x0012 },
- { 0x03, 0x03, -1, 0x03, 0x0012, 0x0016 },
- { 0x03, 0x03, -1, 0x03, 0x0012, 0x001e },
- { 0x03, 0x04, -1, 0x03, 0x0012, 0x0026 },
- { 0x03, 0x04, -1, 0x03, 0x0012, 0x0036 },
- { 0x03, 0x01, -1, 0x03, 0x001a, 0x000a },
- { 0x03, 0x01, -1, 0x03, 0x001a, 0x000c },
- { 0x03, 0x02, -1, 0x03, 0x001a, 0x000e },
- { 0x03, 0x02, -1, 0x03, 0x001a, 0x0012 },
- { 0x03, 0x03, -1, 0x03, 0x001a, 0x0016 },
- { 0x03, 0x03, -1, 0x03, 0x001a, 0x001e },
- { 0x03, 0x04, -1, 0x03, 0x001a, 0x0026 },
- { 0x03, 0x04, -1, 0x03, 0x001a, 0x0036 },
- { 0x04, 0x01, -1, 0x03, 0x0022, 0x000a },
- { 0x04, 0x01, -1, 0x03, 0x0022, 0x000c },
- { 0x04, 0x02, -1, 0x03, 0x0022, 0x000e },
- { 0x04, 0x02, -1, 0x03, 0x0022, 0x0012 },
- { 0x04, 0x03, -1, 0x03, 0x0022, 0x0016 },
- { 0x04, 0x03, -1, 0x03, 0x0022, 0x001e },
- { 0x04, 0x04, -1, 0x03, 0x0022, 0x0026 },
- { 0x04, 0x04, -1, 0x03, 0x0022, 0x0036 },
- { 0x04, 0x01, -1, 0x03, 0x0032, 0x000a },
- { 0x04, 0x01, -1, 0x03, 0x0032, 0x000c },
- { 0x04, 0x02, -1, 0x03, 0x0032, 0x000e },
- { 0x04, 0x02, -1, 0x03, 0x0032, 0x0012 },
- { 0x04, 0x03, -1, 0x03, 0x0032, 0x0016 },
- { 0x04, 0x03, -1, 0x03, 0x0032, 0x001e },
- { 0x04, 0x04, -1, 0x03, 0x0032, 0x0026 },
- { 0x04, 0x04, -1, 0x03, 0x0032, 0x0036 },
- { 0x05, 0x01, -1, 0x03, 0x0042, 0x000a },
- { 0x05, 0x01, -1, 0x03, 0x0042, 0x000c },
- { 0x05, 0x02, -1, 0x03, 0x0042, 0x000e },
- { 0x05, 0x02, -1, 0x03, 0x0042, 0x0012 },
- { 0x05, 0x03, -1, 0x03, 0x0042, 0x0016 },
- { 0x05, 0x03, -1, 0x03, 0x0042, 0x001e },
- { 0x05, 0x04, -1, 0x03, 0x0042, 0x0026 },
- { 0x05, 0x04, -1, 0x03, 0x0042, 0x0036 },
- { 0x05, 0x01, -1, 0x03, 0x0062, 0x000a },
- { 0x05, 0x01, -1, 0x03, 0x0062, 0x000c },
- { 0x05, 0x02, -1, 0x03, 0x0062, 0x000e },
- { 0x05, 0x02, -1, 0x03, 0x0062, 0x0012 },
- { 0x05, 0x03, -1, 0x03, 0x0062, 0x0016 },
- { 0x05, 0x03, -1, 0x03, 0x0062, 0x001e },
- { 0x05, 0x04, -1, 0x03, 0x0062, 0x0026 },
- { 0x05, 0x04, -1, 0x03, 0x0062, 0x0036 },
- { 0x00, 0x05, -1, 0x03, 0x0000, 0x0046 },
- { 0x00, 0x05, -1, 0x03, 0x0000, 0x0066 },
- { 0x00, 0x06, -1, 0x03, 0x0000, 0x0086 },
- { 0x00, 0x07, -1, 0x03, 0x0000, 0x00c6 },
- { 0x00, 0x08, -1, 0x03, 0x0000, 0x0146 },
- { 0x00, 0x09, -1, 0x03, 0x0000, 0x0246 },
- { 0x00, 0x0a, -1, 0x03, 0x0000, 0x0446 },
- { 0x00, 0x18, -1, 0x03, 0x0000, 0x0846 },
- { 0x00, 0x05, -1, 0x03, 0x0001, 0x0046 },
- { 0x00, 0x05, -1, 0x03, 0x0001, 0x0066 },
- { 0x00, 0x06, -1, 0x03, 0x0001, 0x0086 },
- { 0x00, 0x07, -1, 0x03, 0x0001, 0x00c6 },
- { 0x00, 0x08, -1, 0x03, 0x0001, 0x0146 },
- { 0x00, 0x09, -1, 0x03, 0x0001, 0x0246 },
- { 0x00, 0x0a, -1, 0x03, 0x0001, 0x0446 },
- { 0x00, 0x18, -1, 0x03, 0x0001, 0x0846 },
- { 0x00, 0x05, -1, 0x03, 0x0002, 0x0046 },
- { 0x00, 0x05, -1, 0x03, 0x0002, 0x0066 },
- { 0x00, 0x06, -1, 0x03, 0x0002, 0x0086 },
- { 0x00, 0x07, -1, 0x03, 0x0002, 0x00c6 },
- { 0x00, 0x08, -1, 0x03, 0x0002, 0x0146 },
- { 0x00, 0x09, -1, 0x03, 0x0002, 0x0246 },
- { 0x00, 0x0a, -1, 0x03, 0x0002, 0x0446 },
- { 0x00, 0x18, -1, 0x03, 0x0002, 0x0846 },
- { 0x00, 0x05, -1, 0x03, 0x0003, 0x0046 },
- { 0x00, 0x05, -1, 0x03, 0x0003, 0x0066 },
- { 0x00, 0x06, -1, 0x03, 0x0003, 0x0086 },
- { 0x00, 0x07, -1, 0x03, 0x0003, 0x00c6 },
- { 0x00, 0x08, -1, 0x03, 0x0003, 0x0146 },
- { 0x00, 0x09, -1, 0x03, 0x0003, 0x0246 },
- { 0x00, 0x0a, -1, 0x03, 0x0003, 0x0446 },
- { 0x00, 0x18, -1, 0x03, 0x0003, 0x0846 },
- { 0x00, 0x05, -1, 0x03, 0x0004, 0x0046 },
- { 0x00, 0x05, -1, 0x03, 0x0004, 0x0066 },
- { 0x00, 0x06, -1, 0x03, 0x0004, 0x0086 },
- { 0x00, 0x07, -1, 0x03, 0x0004, 0x00c6 },
- { 0x00, 0x08, -1, 0x03, 0x0004, 0x0146 },
- { 0x00, 0x09, -1, 0x03, 0x0004, 0x0246 },
- { 0x00, 0x0a, -1, 0x03, 0x0004, 0x0446 },
- { 0x00, 0x18, -1, 0x03, 0x0004, 0x0846 },
- { 0x00, 0x05, -1, 0x03, 0x0005, 0x0046 },
- { 0x00, 0x05, -1, 0x03, 0x0005, 0x0066 },
- { 0x00, 0x06, -1, 0x03, 0x0005, 0x0086 },
- { 0x00, 0x07, -1, 0x03, 0x0005, 0x00c6 },
- { 0x00, 0x08, -1, 0x03, 0x0005, 0x0146 },
- { 0x00, 0x09, -1, 0x03, 0x0005, 0x0246 },
- { 0x00, 0x0a, -1, 0x03, 0x0005, 0x0446 },
- { 0x00, 0x18, -1, 0x03, 0x0005, 0x0846 },
- { 0x01, 0x05, -1, 0x03, 0x0006, 0x0046 },
- { 0x01, 0x05, -1, 0x03, 0x0006, 0x0066 },
- { 0x01, 0x06, -1, 0x03, 0x0006, 0x0086 },
- { 0x01, 0x07, -1, 0x03, 0x0006, 0x00c6 },
- { 0x01, 0x08, -1, 0x03, 0x0006, 0x0146 },
- { 0x01, 0x09, -1, 0x03, 0x0006, 0x0246 },
- { 0x01, 0x0a, -1, 0x03, 0x0006, 0x0446 },
- { 0x01, 0x18, -1, 0x03, 0x0006, 0x0846 },
- { 0x01, 0x05, -1, 0x03, 0x0008, 0x0046 },
- { 0x01, 0x05, -1, 0x03, 0x0008, 0x0066 },
- { 0x01, 0x06, -1, 0x03, 0x0008, 0x0086 },
- { 0x01, 0x07, -1, 0x03, 0x0008, 0x00c6 },
- { 0x01, 0x08, -1, 0x03, 0x0008, 0x0146 },
- { 0x01, 0x09, -1, 0x03, 0x0008, 0x0246 },
- { 0x01, 0x0a, -1, 0x03, 0x0008, 0x0446 },
- { 0x01, 0x18, -1, 0x03, 0x0008, 0x0846 },
- { 0x06, 0x00, -1, 0x00, 0x0082, 0x0002 },
- { 0x06, 0x00, -1, 0x01, 0x0082, 0x0003 },
- { 0x06, 0x00, -1, 0x02, 0x0082, 0x0004 },
- { 0x06, 0x00, -1, 0x03, 0x0082, 0x0005 },
- { 0x06, 0x00, -1, 0x03, 0x0082, 0x0006 },
- { 0x06, 0x00, -1, 0x03, 0x0082, 0x0007 },
- { 0x06, 0x00, -1, 0x03, 0x0082, 0x0008 },
- { 0x06, 0x00, -1, 0x03, 0x0082, 0x0009 },
- { 0x07, 0x00, -1, 0x00, 0x00c2, 0x0002 },
- { 0x07, 0x00, -1, 0x01, 0x00c2, 0x0003 },
- { 0x07, 0x00, -1, 0x02, 0x00c2, 0x0004 },
- { 0x07, 0x00, -1, 0x03, 0x00c2, 0x0005 },
- { 0x07, 0x00, -1, 0x03, 0x00c2, 0x0006 },
- { 0x07, 0x00, -1, 0x03, 0x00c2, 0x0007 },
- { 0x07, 0x00, -1, 0x03, 0x00c2, 0x0008 },
- { 0x07, 0x00, -1, 0x03, 0x00c2, 0x0009 },
- { 0x08, 0x00, -1, 0x00, 0x0142, 0x0002 },
- { 0x08, 0x00, -1, 0x01, 0x0142, 0x0003 },
- { 0x08, 0x00, -1, 0x02, 0x0142, 0x0004 },
- { 0x08, 0x00, -1, 0x03, 0x0142, 0x0005 },
- { 0x08, 0x00, -1, 0x03, 0x0142, 0x0006 },
- { 0x08, 0x00, -1, 0x03, 0x0142, 0x0007 },
- { 0x08, 0x00, -1, 0x03, 0x0142, 0x0008 },
- { 0x08, 0x00, -1, 0x03, 0x0142, 0x0009 },
- { 0x09, 0x00, -1, 0x00, 0x0242, 0x0002 },
- { 0x09, 0x00, -1, 0x01, 0x0242, 0x0003 },
- { 0x09, 0x00, -1, 0x02, 0x0242, 0x0004 },
- { 0x09, 0x00, -1, 0x03, 0x0242, 0x0005 },
- { 0x09, 0x00, -1, 0x03, 0x0242, 0x0006 },
- { 0x09, 0x00, -1, 0x03, 0x0242, 0x0007 },
- { 0x09, 0x00, -1, 0x03, 0x0242, 0x0008 },
- { 0x09, 0x00, -1, 0x03, 0x0242, 0x0009 },
- { 0x0a, 0x00, -1, 0x00, 0x0442, 0x0002 },
- { 0x0a, 0x00, -1, 0x01, 0x0442, 0x0003 },
- { 0x0a, 0x00, -1, 0x02, 0x0442, 0x0004 },
- { 0x0a, 0x00, -1, 0x03, 0x0442, 0x0005 },
- { 0x0a, 0x00, -1, 0x03, 0x0442, 0x0006 },
- { 0x0a, 0x00, -1, 0x03, 0x0442, 0x0007 },
- { 0x0a, 0x00, -1, 0x03, 0x0442, 0x0008 },
- { 0x0a, 0x00, -1, 0x03, 0x0442, 0x0009 },
- { 0x0c, 0x00, -1, 0x00, 0x0842, 0x0002 },
- { 0x0c, 0x00, -1, 0x01, 0x0842, 0x0003 },
- { 0x0c, 0x00, -1, 0x02, 0x0842, 0x0004 },
- { 0x0c, 0x00, -1, 0x03, 0x0842, 0x0005 },
- { 0x0c, 0x00, -1, 0x03, 0x0842, 0x0006 },
- { 0x0c, 0x00, -1, 0x03, 0x0842, 0x0007 },
- { 0x0c, 0x00, -1, 0x03, 0x0842, 0x0008 },
- { 0x0c, 0x00, -1, 0x03, 0x0842, 0x0009 },
- { 0x0e, 0x00, -1, 0x00, 0x1842, 0x0002 },
- { 0x0e, 0x00, -1, 0x01, 0x1842, 0x0003 },
- { 0x0e, 0x00, -1, 0x02, 0x1842, 0x0004 },
- { 0x0e, 0x00, -1, 0x03, 0x1842, 0x0005 },
- { 0x0e, 0x00, -1, 0x03, 0x1842, 0x0006 },
- { 0x0e, 0x00, -1, 0x03, 0x1842, 0x0007 },
- { 0x0e, 0x00, -1, 0x03, 0x1842, 0x0008 },
- { 0x0e, 0x00, -1, 0x03, 0x1842, 0x0009 },
- { 0x18, 0x00, -1, 0x00, 0x5842, 0x0002 },
- { 0x18, 0x00, -1, 0x01, 0x5842, 0x0003 },
- { 0x18, 0x00, -1, 0x02, 0x5842, 0x0004 },
- { 0x18, 0x00, -1, 0x03, 0x5842, 0x0005 },
- { 0x18, 0x00, -1, 0x03, 0x5842, 0x0006 },
- { 0x18, 0x00, -1, 0x03, 0x5842, 0x0007 },
- { 0x18, 0x00, -1, 0x03, 0x5842, 0x0008 },
- { 0x18, 0x00, -1, 0x03, 0x5842, 0x0009 },
- { 0x02, 0x05, -1, 0x03, 0x000a, 0x0046 },
- { 0x02, 0x05, -1, 0x03, 0x000a, 0x0066 },
- { 0x02, 0x06, -1, 0x03, 0x000a, 0x0086 },
- { 0x02, 0x07, -1, 0x03, 0x000a, 0x00c6 },
- { 0x02, 0x08, -1, 0x03, 0x000a, 0x0146 },
- { 0x02, 0x09, -1, 0x03, 0x000a, 0x0246 },
- { 0x02, 0x0a, -1, 0x03, 0x000a, 0x0446 },
- { 0x02, 0x18, -1, 0x03, 0x000a, 0x0846 },
- { 0x02, 0x05, -1, 0x03, 0x000e, 0x0046 },
- { 0x02, 0x05, -1, 0x03, 0x000e, 0x0066 },
- { 0x02, 0x06, -1, 0x03, 0x000e, 0x0086 },
- { 0x02, 0x07, -1, 0x03, 0x000e, 0x00c6 },
- { 0x02, 0x08, -1, 0x03, 0x000e, 0x0146 },
- { 0x02, 0x09, -1, 0x03, 0x000e, 0x0246 },
- { 0x02, 0x0a, -1, 0x03, 0x000e, 0x0446 },
- { 0x02, 0x18, -1, 0x03, 0x000e, 0x0846 },
- { 0x03, 0x05, -1, 0x03, 0x0012, 0x0046 },
- { 0x03, 0x05, -1, 0x03, 0x0012, 0x0066 },
- { 0x03, 0x06, -1, 0x03, 0x0012, 0x0086 },
- { 0x03, 0x07, -1, 0x03, 0x0012, 0x00c6 },
- { 0x03, 0x08, -1, 0x03, 0x0012, 0x0146 },
- { 0x03, 0x09, -1, 0x03, 0x0012, 0x0246 },
- { 0x03, 0x0a, -1, 0x03, 0x0012, 0x0446 },
- { 0x03, 0x18, -1, 0x03, 0x0012, 0x0846 },
- { 0x03, 0x05, -1, 0x03, 0x001a, 0x0046 },
- { 0x03, 0x05, -1, 0x03, 0x001a, 0x0066 },
- { 0x03, 0x06, -1, 0x03, 0x001a, 0x0086 },
- { 0x03, 0x07, -1, 0x03, 0x001a, 0x00c6 },
- { 0x03, 0x08, -1, 0x03, 0x001a, 0x0146 },
- { 0x03, 0x09, -1, 0x03, 0x001a, 0x0246 },
- { 0x03, 0x0a, -1, 0x03, 0x001a, 0x0446 },
- { 0x03, 0x18, -1, 0x03, 0x001a, 0x0846 },
- { 0x04, 0x05, -1, 0x03, 0x0022, 0x0046 },
- { 0x04, 0x05, -1, 0x03, 0x0022, 0x0066 },
- { 0x04, 0x06, -1, 0x03, 0x0022, 0x0086 },
- { 0x04, 0x07, -1, 0x03, 0x0022, 0x00c6 },
- { 0x04, 0x08, -1, 0x03, 0x0022, 0x0146 },
- { 0x04, 0x09, -1, 0x03, 0x0022, 0x0246 },
- { 0x04, 0x0a, -1, 0x03, 0x0022, 0x0446 },
- { 0x04, 0x18, -1, 0x03, 0x0022, 0x0846 },
- { 0x04, 0x05, -1, 0x03, 0x0032, 0x0046 },
- { 0x04, 0x05, -1, 0x03, 0x0032, 0x0066 },
- { 0x04, 0x06, -1, 0x03, 0x0032, 0x0086 },
- { 0x04, 0x07, -1, 0x03, 0x0032, 0x00c6 },
- { 0x04, 0x08, -1, 0x03, 0x0032, 0x0146 },
- { 0x04, 0x09, -1, 0x03, 0x0032, 0x0246 },
- { 0x04, 0x0a, -1, 0x03, 0x0032, 0x0446 },
- { 0x04, 0x18, -1, 0x03, 0x0032, 0x0846 },
- { 0x05, 0x05, -1, 0x03, 0x0042, 0x0046 },
- { 0x05, 0x05, -1, 0x03, 0x0042, 0x0066 },
- { 0x05, 0x06, -1, 0x03, 0x0042, 0x0086 },
- { 0x05, 0x07, -1, 0x03, 0x0042, 0x00c6 },
- { 0x05, 0x08, -1, 0x03, 0x0042, 0x0146 },
- { 0x05, 0x09, -1, 0x03, 0x0042, 0x0246 },
- { 0x05, 0x0a, -1, 0x03, 0x0042, 0x0446 },
- { 0x05, 0x18, -1, 0x03, 0x0042, 0x0846 },
- { 0x05, 0x05, -1, 0x03, 0x0062, 0x0046 },
- { 0x05, 0x05, -1, 0x03, 0x0062, 0x0066 },
- { 0x05, 0x06, -1, 0x03, 0x0062, 0x0086 },
- { 0x05, 0x07, -1, 0x03, 0x0062, 0x00c6 },
- { 0x05, 0x08, -1, 0x03, 0x0062, 0x0146 },
- { 0x05, 0x09, -1, 0x03, 0x0062, 0x0246 },
- { 0x05, 0x0a, -1, 0x03, 0x0062, 0x0446 },
- { 0x05, 0x18, -1, 0x03, 0x0062, 0x0846 },
- { 0x06, 0x01, -1, 0x03, 0x0082, 0x000a },
- { 0x06, 0x01, -1, 0x03, 0x0082, 0x000c },
- { 0x06, 0x02, -1, 0x03, 0x0082, 0x000e },
- { 0x06, 0x02, -1, 0x03, 0x0082, 0x0012 },
- { 0x06, 0x03, -1, 0x03, 0x0082, 0x0016 },
- { 0x06, 0x03, -1, 0x03, 0x0082, 0x001e },
- { 0x06, 0x04, -1, 0x03, 0x0082, 0x0026 },
- { 0x06, 0x04, -1, 0x03, 0x0082, 0x0036 },
- { 0x07, 0x01, -1, 0x03, 0x00c2, 0x000a },
- { 0x07, 0x01, -1, 0x03, 0x00c2, 0x000c },
- { 0x07, 0x02, -1, 0x03, 0x00c2, 0x000e },
- { 0x07, 0x02, -1, 0x03, 0x00c2, 0x0012 },
- { 0x07, 0x03, -1, 0x03, 0x00c2, 0x0016 },
- { 0x07, 0x03, -1, 0x03, 0x00c2, 0x001e },
- { 0x07, 0x04, -1, 0x03, 0x00c2, 0x0026 },
- { 0x07, 0x04, -1, 0x03, 0x00c2, 0x0036 },
- { 0x08, 0x01, -1, 0x03, 0x0142, 0x000a },
- { 0x08, 0x01, -1, 0x03, 0x0142, 0x000c },
- { 0x08, 0x02, -1, 0x03, 0x0142, 0x000e },
- { 0x08, 0x02, -1, 0x03, 0x0142, 0x0012 },
- { 0x08, 0x03, -1, 0x03, 0x0142, 0x0016 },
- { 0x08, 0x03, -1, 0x03, 0x0142, 0x001e },
- { 0x08, 0x04, -1, 0x03, 0x0142, 0x0026 },
- { 0x08, 0x04, -1, 0x03, 0x0142, 0x0036 },
- { 0x09, 0x01, -1, 0x03, 0x0242, 0x000a },
- { 0x09, 0x01, -1, 0x03, 0x0242, 0x000c },
- { 0x09, 0x02, -1, 0x03, 0x0242, 0x000e },
- { 0x09, 0x02, -1, 0x03, 0x0242, 0x0012 },
- { 0x09, 0x03, -1, 0x03, 0x0242, 0x0016 },
- { 0x09, 0x03, -1, 0x03, 0x0242, 0x001e },
- { 0x09, 0x04, -1, 0x03, 0x0242, 0x0026 },
- { 0x09, 0x04, -1, 0x03, 0x0242, 0x0036 },
- { 0x0a, 0x01, -1, 0x03, 0x0442, 0x000a },
- { 0x0a, 0x01, -1, 0x03, 0x0442, 0x000c },
- { 0x0a, 0x02, -1, 0x03, 0x0442, 0x000e },
- { 0x0a, 0x02, -1, 0x03, 0x0442, 0x0012 },
- { 0x0a, 0x03, -1, 0x03, 0x0442, 0x0016 },
- { 0x0a, 0x03, -1, 0x03, 0x0442, 0x001e },
- { 0x0a, 0x04, -1, 0x03, 0x0442, 0x0026 },
- { 0x0a, 0x04, -1, 0x03, 0x0442, 0x0036 },
- { 0x0c, 0x01, -1, 0x03, 0x0842, 0x000a },
- { 0x0c, 0x01, -1, 0x03, 0x0842, 0x000c },
- { 0x0c, 0x02, -1, 0x03, 0x0842, 0x000e },
- { 0x0c, 0x02, -1, 0x03, 0x0842, 0x0012 },
- { 0x0c, 0x03, -1, 0x03, 0x0842, 0x0016 },
- { 0x0c, 0x03, -1, 0x03, 0x0842, 0x001e },
- { 0x0c, 0x04, -1, 0x03, 0x0842, 0x0026 },
- { 0x0c, 0x04, -1, 0x03, 0x0842, 0x0036 },
- { 0x0e, 0x01, -1, 0x03, 0x1842, 0x000a },
- { 0x0e, 0x01, -1, 0x03, 0x1842, 0x000c },
- { 0x0e, 0x02, -1, 0x03, 0x1842, 0x000e },
- { 0x0e, 0x02, -1, 0x03, 0x1842, 0x0012 },
- { 0x0e, 0x03, -1, 0x03, 0x1842, 0x0016 },
- { 0x0e, 0x03, -1, 0x03, 0x1842, 0x001e },
- { 0x0e, 0x04, -1, 0x03, 0x1842, 0x0026 },
- { 0x0e, 0x04, -1, 0x03, 0x1842, 0x0036 },
- { 0x18, 0x01, -1, 0x03, 0x5842, 0x000a },
- { 0x18, 0x01, -1, 0x03, 0x5842, 0x000c },
- { 0x18, 0x02, -1, 0x03, 0x5842, 0x000e },
- { 0x18, 0x02, -1, 0x03, 0x5842, 0x0012 },
- { 0x18, 0x03, -1, 0x03, 0x5842, 0x0016 },
- { 0x18, 0x03, -1, 0x03, 0x5842, 0x001e },
- { 0x18, 0x04, -1, 0x03, 0x5842, 0x0026 },
- { 0x18, 0x04, -1, 0x03, 0x5842, 0x0036 },
- { 0x06, 0x05, -1, 0x03, 0x0082, 0x0046 },
- { 0x06, 0x05, -1, 0x03, 0x0082, 0x0066 },
- { 0x06, 0x06, -1, 0x03, 0x0082, 0x0086 },
- { 0x06, 0x07, -1, 0x03, 0x0082, 0x00c6 },
- { 0x06, 0x08, -1, 0x03, 0x0082, 0x0146 },
- { 0x06, 0x09, -1, 0x03, 0x0082, 0x0246 },
- { 0x06, 0x0a, -1, 0x03, 0x0082, 0x0446 },
- { 0x06, 0x18, -1, 0x03, 0x0082, 0x0846 },
- { 0x07, 0x05, -1, 0x03, 0x00c2, 0x0046 },
- { 0x07, 0x05, -1, 0x03, 0x00c2, 0x0066 },
- { 0x07, 0x06, -1, 0x03, 0x00c2, 0x0086 },
- { 0x07, 0x07, -1, 0x03, 0x00c2, 0x00c6 },
- { 0x07, 0x08, -1, 0x03, 0x00c2, 0x0146 },
- { 0x07, 0x09, -1, 0x03, 0x00c2, 0x0246 },
- { 0x07, 0x0a, -1, 0x03, 0x00c2, 0x0446 },
- { 0x07, 0x18, -1, 0x03, 0x00c2, 0x0846 },
- { 0x08, 0x05, -1, 0x03, 0x0142, 0x0046 },
- { 0x08, 0x05, -1, 0x03, 0x0142, 0x0066 },
- { 0x08, 0x06, -1, 0x03, 0x0142, 0x0086 },
- { 0x08, 0x07, -1, 0x03, 0x0142, 0x00c6 },
- { 0x08, 0x08, -1, 0x03, 0x0142, 0x0146 },
- { 0x08, 0x09, -1, 0x03, 0x0142, 0x0246 },
- { 0x08, 0x0a, -1, 0x03, 0x0142, 0x0446 },
- { 0x08, 0x18, -1, 0x03, 0x0142, 0x0846 },
- { 0x09, 0x05, -1, 0x03, 0x0242, 0x0046 },
- { 0x09, 0x05, -1, 0x03, 0x0242, 0x0066 },
- { 0x09, 0x06, -1, 0x03, 0x0242, 0x0086 },
- { 0x09, 0x07, -1, 0x03, 0x0242, 0x00c6 },
- { 0x09, 0x08, -1, 0x03, 0x0242, 0x0146 },
- { 0x09, 0x09, -1, 0x03, 0x0242, 0x0246 },
- { 0x09, 0x0a, -1, 0x03, 0x0242, 0x0446 },
- { 0x09, 0x18, -1, 0x03, 0x0242, 0x0846 },
- { 0x0a, 0x05, -1, 0x03, 0x0442, 0x0046 },
- { 0x0a, 0x05, -1, 0x03, 0x0442, 0x0066 },
- { 0x0a, 0x06, -1, 0x03, 0x0442, 0x0086 },
- { 0x0a, 0x07, -1, 0x03, 0x0442, 0x00c6 },
- { 0x0a, 0x08, -1, 0x03, 0x0442, 0x0146 },
- { 0x0a, 0x09, -1, 0x03, 0x0442, 0x0246 },
- { 0x0a, 0x0a, -1, 0x03, 0x0442, 0x0446 },
- { 0x0a, 0x18, -1, 0x03, 0x0442, 0x0846 },
- { 0x0c, 0x05, -1, 0x03, 0x0842, 0x0046 },
- { 0x0c, 0x05, -1, 0x03, 0x0842, 0x0066 },
- { 0x0c, 0x06, -1, 0x03, 0x0842, 0x0086 },
- { 0x0c, 0x07, -1, 0x03, 0x0842, 0x00c6 },
- { 0x0c, 0x08, -1, 0x03, 0x0842, 0x0146 },
- { 0x0c, 0x09, -1, 0x03, 0x0842, 0x0246 },
- { 0x0c, 0x0a, -1, 0x03, 0x0842, 0x0446 },
- { 0x0c, 0x18, -1, 0x03, 0x0842, 0x0846 },
- { 0x0e, 0x05, -1, 0x03, 0x1842, 0x0046 },
- { 0x0e, 0x05, -1, 0x03, 0x1842, 0x0066 },
- { 0x0e, 0x06, -1, 0x03, 0x1842, 0x0086 },
- { 0x0e, 0x07, -1, 0x03, 0x1842, 0x00c6 },
- { 0x0e, 0x08, -1, 0x03, 0x1842, 0x0146 },
- { 0x0e, 0x09, -1, 0x03, 0x1842, 0x0246 },
- { 0x0e, 0x0a, -1, 0x03, 0x1842, 0x0446 },
- { 0x0e, 0x18, -1, 0x03, 0x1842, 0x0846 },
- { 0x18, 0x05, -1, 0x03, 0x5842, 0x0046 },
- { 0x18, 0x05, -1, 0x03, 0x5842, 0x0066 },
- { 0x18, 0x06, -1, 0x03, 0x5842, 0x0086 },
- { 0x18, 0x07, -1, 0x03, 0x5842, 0x00c6 },
- { 0x18, 0x08, -1, 0x03, 0x5842, 0x0146 },
- { 0x18, 0x09, -1, 0x03, 0x5842, 0x0246 },
- { 0x18, 0x0a, -1, 0x03, 0x5842, 0x0446 },
- { 0x18, 0x18, -1, 0x03, 0x5842, 0x0846 },
-};
-
-#endif /* BROTLI_DEC_PREFIX_H_ */
diff --git a/MdeModulePkg/Library/BrotliCustomDecompressLib/dec/state.h b/MdeModulePkg/Library/BrotliCustomDecompressLib/dec/state.h
deleted file mode 100644
index 814f95eee05a..000000000000
--- a/MdeModulePkg/Library/BrotliCustomDecompressLib/dec/state.h
+++ /dev/null
@@ -1,258 +0,0 @@
-/* Copyright 2015 Google Inc. All Rights Reserved.
-
- Distributed under MIT license.
- See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
-*/
-
-/* Brotli state for partial streaming decoding. */
-
-#ifndef BROTLI_DEC_STATE_H_
-#define BROTLI_DEC_STATE_H_
-
-#include "../common/constants.h"
-#include "../common/dictionary.h"
-#include "../common/platform.h"
-#include "../common/transform.h"
-#include <brotli/types.h>
-#include "./bit_reader.h"
-#include "./huffman.h"
-
-#if defined(__cplusplus) || defined(c_plusplus)
-extern "C" {
-#endif
-
-typedef enum {
- BROTLI_STATE_UNINITED,
- BROTLI_STATE_LARGE_WINDOW_BITS,
- BROTLI_STATE_INITIALIZE,
- BROTLI_STATE_METABLOCK_BEGIN,
- BROTLI_STATE_METABLOCK_HEADER,
- BROTLI_STATE_METABLOCK_HEADER_2,
- BROTLI_STATE_CONTEXT_MODES,
- BROTLI_STATE_COMMAND_BEGIN,
- BROTLI_STATE_COMMAND_INNER,
- BROTLI_STATE_COMMAND_POST_DECODE_LITERALS,
- BROTLI_STATE_COMMAND_POST_WRAP_COPY,
- BROTLI_STATE_UNCOMPRESSED,
- BROTLI_STATE_METADATA,
- BROTLI_STATE_COMMAND_INNER_WRITE,
- BROTLI_STATE_METABLOCK_DONE,
- BROTLI_STATE_COMMAND_POST_WRITE_1,
- BROTLI_STATE_COMMAND_POST_WRITE_2,
- BROTLI_STATE_HUFFMAN_CODE_0,
- BROTLI_STATE_HUFFMAN_CODE_1,
- BROTLI_STATE_HUFFMAN_CODE_2,
- BROTLI_STATE_HUFFMAN_CODE_3,
- BROTLI_STATE_CONTEXT_MAP_1,
- BROTLI_STATE_CONTEXT_MAP_2,
- BROTLI_STATE_TREE_GROUP,
- BROTLI_STATE_DONE
-} BrotliRunningState;
-
-typedef enum {
- BROTLI_STATE_METABLOCK_HEADER_NONE,
- BROTLI_STATE_METABLOCK_HEADER_EMPTY,
- BROTLI_STATE_METABLOCK_HEADER_NIBBLES,
- BROTLI_STATE_METABLOCK_HEADER_SIZE,
- BROTLI_STATE_METABLOCK_HEADER_UNCOMPRESSED,
- BROTLI_STATE_METABLOCK_HEADER_RESERVED,
- BROTLI_STATE_METABLOCK_HEADER_BYTES,
- BROTLI_STATE_METABLOCK_HEADER_METADATA
-} BrotliRunningMetablockHeaderState;
-
-typedef enum {
- BROTLI_STATE_UNCOMPRESSED_NONE,
- BROTLI_STATE_UNCOMPRESSED_WRITE
-} BrotliRunningUncompressedState;
-
-typedef enum {
- BROTLI_STATE_TREE_GROUP_NONE,
- BROTLI_STATE_TREE_GROUP_LOOP
-} BrotliRunningTreeGroupState;
-
-typedef enum {
- BROTLI_STATE_CONTEXT_MAP_NONE,
- BROTLI_STATE_CONTEXT_MAP_READ_PREFIX,
- BROTLI_STATE_CONTEXT_MAP_HUFFMAN,
- BROTLI_STATE_CONTEXT_MAP_DECODE,
- BROTLI_STATE_CONTEXT_MAP_TRANSFORM
-} BrotliRunningContextMapState;
-
-typedef enum {
- BROTLI_STATE_HUFFMAN_NONE,
- BROTLI_STATE_HUFFMAN_SIMPLE_SIZE,
- BROTLI_STATE_HUFFMAN_SIMPLE_READ,
- BROTLI_STATE_HUFFMAN_SIMPLE_BUILD,
- BROTLI_STATE_HUFFMAN_COMPLEX,
- BROTLI_STATE_HUFFMAN_LENGTH_SYMBOLS
-} BrotliRunningHuffmanState;
-
-typedef enum {
- BROTLI_STATE_DECODE_UINT8_NONE,
- BROTLI_STATE_DECODE_UINT8_SHORT,
- BROTLI_STATE_DECODE_UINT8_LONG
-} BrotliRunningDecodeUint8State;
-
-typedef enum {
- BROTLI_STATE_READ_BLOCK_LENGTH_NONE,
- BROTLI_STATE_READ_BLOCK_LENGTH_SUFFIX
-} BrotliRunningReadBlockLengthState;
-
-struct BrotliDecoderStateStruct {
- BrotliRunningState state;
-
- /* This counter is reused for several disjoint loops. */
- int loop_counter;
-
- BrotliBitReader br;
-
- brotli_alloc_func alloc_func;
- brotli_free_func free_func;
- void* memory_manager_opaque;
-
- /* Temporary storage for remaining input. */
- union {
- uint64_t u64;
- uint8_t u8[8];
- } buffer;
- uint32_t buffer_length;
-
- int pos;
- int max_backward_distance;
- int max_distance;
- int ringbuffer_size;
- int ringbuffer_mask;
- int dist_rb_idx;
- int dist_rb[4];
- int error_code;
- uint32_t sub_loop_counter;
- uint8_t* ringbuffer;
- uint8_t* ringbuffer_end;
- HuffmanCode* htree_command;
- const uint8_t* context_lookup;
- uint8_t* context_map_slice;
- uint8_t* dist_context_map_slice;
-
- /* This ring buffer holds a few past copy distances that will be used by
- some special distance codes. */
- HuffmanTreeGroup literal_hgroup;
- HuffmanTreeGroup insert_copy_hgroup;
- HuffmanTreeGroup distance_hgroup;
- HuffmanCode* block_type_trees;
- HuffmanCode* block_len_trees;
- /* This is true if the literal context map histogram type always matches the
- block type. It is then not needed to keep the context (faster decoding). */
- int trivial_literal_context;
- /* Distance context is actual after command is decoded and before distance is
- computed. After distance computation it is used as a temporary variable. */
- int distance_context;
- int meta_block_remaining_len;
- uint32_t block_length_index;
- uint32_t block_length[3];
- uint32_t num_block_types[3];
- uint32_t block_type_rb[6];
- uint32_t distance_postfix_bits;
- uint32_t num_direct_distance_codes;
- int distance_postfix_mask;
- uint32_t num_dist_htrees;
- uint8_t* dist_context_map;
- HuffmanCode* literal_htree;
- uint8_t dist_htree_index;
- uint32_t repeat_code_len;
- uint32_t prev_code_len;
-
- int copy_length;
- int distance_code;
-
- /* For partial write operations. */
- size_t rb_roundtrips; /* how many times we went around the ring-buffer */
- size_t partial_pos_out; /* how much output to the user in total */
-
- /* For ReadHuffmanCode. */
- uint32_t symbol;
- uint32_t repeat;
- uint32_t space;
-
- HuffmanCode table[32];
- /* List of heads of symbol chains. */
- uint16_t* symbol_lists;
- /* Storage from symbol_lists. */
- uint16_t symbols_lists_array[BROTLI_HUFFMAN_MAX_CODE_LENGTH + 1 +
- BROTLI_NUM_COMMAND_SYMBOLS];
- /* Tails of symbol chains. */
- int next_symbol[32];
- uint8_t code_length_code_lengths[BROTLI_CODE_LENGTH_CODES];
- /* Population counts for the code lengths. */
- uint16_t code_length_histo[16];
-
- /* For HuffmanTreeGroupDecode. */
- int htree_index;
- HuffmanCode* next;
-
- /* For DecodeContextMap. */
- uint32_t context_index;
- uint32_t max_run_length_prefix;
- uint32_t code;
- HuffmanCode context_map_table[BROTLI_HUFFMAN_MAX_SIZE_272];
-
- /* For InverseMoveToFrontTransform. */
- uint32_t mtf_upper_bound;
- uint32_t mtf[64 + 1];
-
- /* Less used attributes are at the end of this struct. */
-
- /* States inside function calls. */
- BrotliRunningMetablockHeaderState substate_metablock_header;
- BrotliRunningTreeGroupState substate_tree_group;
- BrotliRunningContextMapState substate_context_map;
- BrotliRunningUncompressedState substate_uncompressed;
- BrotliRunningHuffmanState substate_huffman;
- BrotliRunningDecodeUint8State substate_decode_uint8;
- BrotliRunningReadBlockLengthState substate_read_block_length;
-
- unsigned int is_last_metablock : 1;
- unsigned int is_uncompressed : 1;
- unsigned int is_metadata : 1;
- unsigned int should_wrap_ringbuffer : 1;
- unsigned int canny_ringbuffer_allocation : 1;
- unsigned int large_window : 1;
- unsigned int size_nibbles : 8;
- uint32_t window_bits;
-
- int new_ringbuffer_size;
-
- uint32_t num_literal_htrees;
- uint8_t* context_map;
- uint8_t* context_modes;
-
- const BrotliDictionary* dictionary;
- const BrotliTransforms* transforms;
-
- uint32_t trivial_literal_contexts[8]; /* 256 bits */
-};
-
-typedef struct BrotliDecoderStateStruct BrotliDecoderStateInternal;
-#define BrotliDecoderState BrotliDecoderStateInternal
-
-BROTLI_INTERNAL BROTLI_BOOL BrotliDecoderStateInit(BrotliDecoderState* s,
- brotli_alloc_func alloc_func, brotli_free_func free_func, void* opaque);
-BROTLI_INTERNAL void BrotliDecoderStateCleanup(BrotliDecoderState* s);
-BROTLI_INTERNAL void BrotliDecoderStateMetablockBegin(BrotliDecoderState* s);
-BROTLI_INTERNAL void BrotliDecoderStateCleanupAfterMetablock(
- BrotliDecoderState* s);
-BROTLI_INTERNAL BROTLI_BOOL BrotliDecoderHuffmanTreeGroupInit(
- BrotliDecoderState* s, HuffmanTreeGroup* group, uint32_t alphabet_size,
- uint32_t max_symbol, uint32_t ntrees);
-
-#define BROTLI_DECODER_ALLOC(S, L) S->alloc_func(S->memory_manager_opaque, L)
-
-#define BROTLI_DECODER_FREE(S, X) { \
- S->free_func(S->memory_manager_opaque, X); \
- X = NULL; \
-}
-
-#if defined(__cplusplus) || defined(c_plusplus)
-} /* extern "C" */
-#endif
-
-#endif /* BROTLI_DEC_STATE_H_ */
diff --git a/MdeModulePkg/Library/BrotliCustomDecompressLib/docs/brotli-comparison-study-2015-09-22.pdf b/MdeModulePkg/Library/BrotliCustomDecompressLib/docs/brotli-comparison-study-2015-09-22.pdf
deleted file mode 100644
index 040f179e2bce8f5f7a2f407b2d61ab86824bbe8e..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 215208
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%0A(Nmlrom%n++A{@ubAd
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
diff --git a/MdeModulePkg/Library/BrotliCustomDecompressLib/stddef.h b/MdeModulePkg/Library/BrotliCustomDecompressLib/stddef.h
new file mode 100644
index 000000000000..917a17700f70
--- /dev/null
+++ b/MdeModulePkg/Library/BrotliCustomDecompressLib/stddef.h
@@ -0,0 +1,9 @@
+/** @file
+ Include file to support building the third-party brotli.
+
+Copyright (c) 2020, Intel Corporation. All rights reserved.<BR>
+SPDX-License-Identifier: BSD-2-Clause-Patent
+
+**/
+
+#include <BrotliDecUefiSupport.h>
diff --git a/MdeModulePkg/Library/BrotliCustomDecompressLib/stdint.h b/MdeModulePkg/Library/BrotliCustomDecompressLib/stdint.h
new file mode 100644
index 000000000000..917a17700f70
--- /dev/null
+++ b/MdeModulePkg/Library/BrotliCustomDecompressLib/stdint.h
@@ -0,0 +1,9 @@
+/** @file
+ Include file to support building the third-party brotli.
+
+Copyright (c) 2020, Intel Corporation. All rights reserved.<BR>
+SPDX-License-Identifier: BSD-2-Clause-Patent
+
+**/
+
+#include <BrotliDecUefiSupport.h>
diff --git a/MdeModulePkg/Library/BrotliCustomDecompressLib/stdlib.h b/MdeModulePkg/Library/BrotliCustomDecompressLib/stdlib.h
new file mode 100644
index 000000000000..917a17700f70
--- /dev/null
+++ b/MdeModulePkg/Library/BrotliCustomDecompressLib/stdlib.h
@@ -0,0 +1,9 @@
+/** @file
+ Include file to support building the third-party brotli.
+
+Copyright (c) 2020, Intel Corporation. All rights reserved.<BR>
+SPDX-License-Identifier: BSD-2-Clause-Patent
+
+**/
+
+#include <BrotliDecUefiSupport.h>
diff --git a/MdeModulePkg/Library/BrotliCustomDecompressLib/string.h b/MdeModulePkg/Library/BrotliCustomDecompressLib/string.h
new file mode 100644
index 000000000000..917a17700f70
--- /dev/null
+++ b/MdeModulePkg/Library/BrotliCustomDecompressLib/string.h
@@ -0,0 +1,9 @@
+/** @file
+ Include file to support building the third-party brotli.
+
+Copyright (c) 2020, Intel Corporation. All rights reserved.<BR>
+SPDX-License-Identifier: BSD-2-Clause-Patent
+
+**/
+
+#include <BrotliDecUefiSupport.h>
diff --git a/MdeModulePkg/MdeModulePkg.dec b/MdeModulePkg/MdeModulePkg.dec
index 91a3c608231c..2760a0914875 100644
--- a/MdeModulePkg/MdeModulePkg.dec
+++ b/MdeModulePkg/MdeModulePkg.dec
@@ -24,6 +24,8 @@ [Defines]
[Includes]
Include
+[Includes.Common.Private]
+ Library/BrotliCustomDecompressLib/brotli/c/include
[LibraryClasses]
## @libraryclass Defines a set of methods to reset whole system.
diff --git a/Readme.md b/Readme.md
index 594f16b20756..4a4775db85fd 100644
--- a/Readme.md
+++ b/Readme.md
@@ -58,7 +58,7 @@ The majority of the content in the EDK II open source project uses a
[BSD-2-Clause Plus Patent License](License.txt). The EDK II open source project
contains the following components that are covered by additional licenses:
* [BaseTools/Source/C/BrotliCompress](BaseTools/Source/C/BrotliCompress/LICENSE)
-* [MdeModulePkg/Library/BrotliCustomDecompressLib](MdeModulePkg/Library/BrotliCustomDecompressLib/LICENSE)
+* [MdeModulePkg/Library/BrotliCustomDecompressLib/brotli](https://github.com/google/brotli/blob/master/LICENSE)
* [BaseTools/Source/C/LzmaCompress](BaseTools/Source/C/LzmaCompress/LZMA-SDK-README.txt)
* [MdeModulePkg/Library/LzmaCustomDecompressLib](MdeModulePkg/Library/LzmaCustomDecompressLib/LZMA-SDK-README.txt)
* [IntelFrameworkModulePkg/Library/LzmaCustomDecompressLib/Sdk](IntelFrameworkModulePkg/Library/LzmaCustomDecompressLib/LZMA-SDK-README.txt)
@@ -199,6 +199,7 @@ as possible as we can. Currently EDK II contains the following submodules
- CryptoPkg/Library/OpensslLib/openssl
- ArmPkg/Library/ArmSoftFloatLib/berkeley-softfloat-3
+- MdeModulePkg/Library/BrotliCustomDecompressLib/brotli
ArmSoftFloatLib is actually required by OpensslLib. It's inevitable
in openssl-1.1.1 (since stable201905) for floating point parameter
--
2.18.0.windows.1
^ permalink raw reply related [flat|nested] 6+ messages in thread
* [PATCH 2/2] BaseTools: Make brotli a submodule
2020-03-02 3:19 [PATCH 0/2] Use submodule way to access brotli Zhang, Shenglei
2020-03-02 3:19 ` [PATCH 1/2] MdeModulePkg/BrotliCustomDecompressLib: Make brotli a submodule Zhang, Shenglei
@ 2020-03-02 3:19 ` Zhang, Shenglei
2020-03-05 8:03 ` Bob Feng
[not found] ` <15F959C75C03A288.12001@groups.io>
1 sibling, 2 replies; 6+ messages in thread
From: Zhang, Shenglei @ 2020-03-02 3:19 UTC (permalink / raw)
To: devel; +Cc: Bob Feng, Liming Gao
Use submodule way to access brotli in BaseTools based on
brotli version 666c3280cc11dc433c303d79a83d4ffbdd12cc8d.
https://bugzilla.tianocore.org/show_bug.cgi?id=2558
Cc: Bob Feng <bob.c.feng@intel.com>
Cc: Liming Gao <liming.gao@intel.com>
Signed-off-by: Shenglei Zhang <shenglei.zhang@intel.com>
---
.../C/BrotliCompress/common/dictionary.c | 5905 -----------------
.../C/BrotliCompress/common/transform.c | 235 -
.../Source/C/BrotliCompress/dec/bit_reader.c | 48 -
.../Source/C/BrotliCompress/dec/decode.c | 2497 -------
.../Source/C/BrotliCompress/dec/huffman.c | 356 -
BaseTools/Source/C/BrotliCompress/dec/state.c | 164 -
.../BrotliCompress/enc/backward_references.c | 144 -
.../enc/backward_references_hq.c | 830 ---
.../Source/C/BrotliCompress/enc/bit_cost.c | 35 -
.../C/BrotliCompress/enc/block_splitter.c | 194 -
.../C/BrotliCompress/enc/brotli_bit_stream.c | 1331 ----
.../Source/C/BrotliCompress/enc/cluster.c | 56 -
.../C/BrotliCompress/enc/compress_fragment.c | 790 ---
.../enc/compress_fragment_two_pass.c | 645 --
.../C/BrotliCompress/enc/dictionary_hash.c | 1120 ----
.../Source/C/BrotliCompress/enc/encode.c | 1864 ------
.../C/BrotliCompress/enc/encoder_dict.c | 32 -
.../C/BrotliCompress/enc/entropy_encode.c | 501 --
.../Source/C/BrotliCompress/enc/histogram.c | 100 -
.../C/BrotliCompress/enc/literal_cost.c | 175 -
.../Source/C/BrotliCompress/enc/memory.c | 170 -
.../Source/C/BrotliCompress/enc/metablock.c | 667 --
.../Source/C/BrotliCompress/enc/static_dict.c | 486 --
.../Source/C/BrotliCompress/enc/utf8_util.c | 85 -
.../Source/C/BrotliCompress/tools/brotli.c | 1143 ----
.gitmodules | 3 +
BaseTools/Source/C/BrotliCompress/GNUmakefile | 54 +-
BaseTools/Source/C/BrotliCompress/LICENSE | 19 -
BaseTools/Source/C/BrotliCompress/Makefile | 52 +-
BaseTools/Source/C/BrotliCompress/README.md | 26 -
BaseTools/Source/C/BrotliCompress/ReadMe.txt | 2 -
BaseTools/Source/C/BrotliCompress/brotli | 1 +
.../C/BrotliCompress/common/constants.h | 64 -
.../Source/C/BrotliCompress/common/context.h | 261 -
.../C/BrotliCompress/common/dictionary.h | 64 -
.../Source/C/BrotliCompress/common/platform.h | 558 --
.../C/BrotliCompress/common/transform.h | 80 -
.../Source/C/BrotliCompress/common/version.h | 26 -
.../Source/C/BrotliCompress/dec/bit_reader.h | 309 -
.../Source/C/BrotliCompress/dec/huffman.h | 72 -
.../Source/C/BrotliCompress/dec/prefix.h | 750 ---
BaseTools/Source/C/BrotliCompress/dec/state.h | 258 -
.../brotli-comparison-study-2015-09-22.pdf | Bin 215208 -> 0 bytes
.../BrotliCompress/enc/backward_references.h | 38 -
.../enc/backward_references_hq.h | 93 -
.../enc/backward_references_inc.h | 153 -
.../Source/C/BrotliCompress/enc/bit_cost.h | 63 -
.../C/BrotliCompress/enc/bit_cost_inc.h | 127 -
.../C/BrotliCompress/enc/block_encoder_inc.h | 34 -
.../C/BrotliCompress/enc/block_splitter.h | 51 -
.../C/BrotliCompress/enc/block_splitter_inc.h | 431 --
.../C/BrotliCompress/enc/brotli_bit_stream.h | 84 -
.../Source/C/BrotliCompress/enc/cluster.h | 48 -
.../Source/C/BrotliCompress/enc/cluster_inc.h | 317 -
.../Source/C/BrotliCompress/enc/command.h | 190 -
.../C/BrotliCompress/enc/compress_fragment.h | 61 -
.../enc/compress_fragment_two_pass.h | 54 -
.../C/BrotliCompress/enc/dictionary_hash.h | 24 -
.../C/BrotliCompress/enc/encoder_dict.h | 41 -
.../C/BrotliCompress/enc/entropy_encode.h | 122 -
.../enc/entropy_encode_static.h | 539 --
.../Source/C/BrotliCompress/enc/fast_log.h | 147 -
.../C/BrotliCompress/enc/find_match_length.h | 80 -
BaseTools/Source/C/BrotliCompress/enc/hash.h | 497 --
.../C/BrotliCompress/enc/hash_composite_inc.h | 133 -
.../enc/hash_forgetful_chain_inc.h | 254 -
.../enc/hash_longest_match64_inc.h | 266 -
.../enc/hash_longest_match_inc.h | 258 -
.../enc/hash_longest_match_quickly_inc.h | 235 -
.../C/BrotliCompress/enc/hash_rolling_inc.h | 215 -
.../enc/hash_to_binary_tree_inc.h | 327 -
.../Source/C/BrotliCompress/enc/histogram.h | 63 -
.../C/BrotliCompress/enc/histogram_inc.h | 51 -
.../C/BrotliCompress/enc/literal_cost.h | 30 -
.../Source/C/BrotliCompress/enc/memory.h | 102 -
.../Source/C/BrotliCompress/enc/metablock.h | 105 -
.../C/BrotliCompress/enc/metablock_inc.h | 183 -
.../Source/C/BrotliCompress/enc/params.h | 44 -
.../Source/C/BrotliCompress/enc/prefix.h | 53 -
.../Source/C/BrotliCompress/enc/quality.h | 165 -
.../Source/C/BrotliCompress/enc/ringbuffer.h | 164 -
.../Source/C/BrotliCompress/enc/static_dict.h | 40 -
.../C/BrotliCompress/enc/static_dict_lut.h | 5864 ----------------
.../Source/C/BrotliCompress/enc/utf8_util.h | 32 -
.../Source/C/BrotliCompress/enc/write_bits.h | 85 -
.../C/BrotliCompress/include/brotli/decode.h | 344 -
.../C/BrotliCompress/include/brotli/encode.h | 427 --
.../C/BrotliCompress/include/brotli/port.h | 274 -
.../C/BrotliCompress/include/brotli/types.h | 83 -
.../Source/C/BrotliCompress/tools/brotli.md | 107 -
Readme.md | 3 +-
91 files changed, 59 insertions(+), 35214 deletions(-)
delete mode 100644 BaseTools/Source/C/BrotliCompress/common/dictionary.c
delete mode 100644 BaseTools/Source/C/BrotliCompress/common/transform.c
delete mode 100644 BaseTools/Source/C/BrotliCompress/dec/bit_reader.c
delete mode 100644 BaseTools/Source/C/BrotliCompress/dec/decode.c
delete mode 100644 BaseTools/Source/C/BrotliCompress/dec/huffman.c
delete mode 100644 BaseTools/Source/C/BrotliCompress/dec/state.c
delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/backward_references.c
delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/backward_references_hq.c
delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/bit_cost.c
delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/block_splitter.c
delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/brotli_bit_stream.c
delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/cluster.c
delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/compress_fragment.c
delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/compress_fragment_two_pass.c
delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/dictionary_hash.c
delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/encode.c
delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/encoder_dict.c
delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/entropy_encode.c
delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/histogram.c
delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/literal_cost.c
delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/memory.c
delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/metablock.c
delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/static_dict.c
delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/utf8_util.c
delete mode 100644 BaseTools/Source/C/BrotliCompress/tools/brotli.c
delete mode 100644 BaseTools/Source/C/BrotliCompress/LICENSE
delete mode 100644 BaseTools/Source/C/BrotliCompress/README.md
delete mode 100644 BaseTools/Source/C/BrotliCompress/ReadMe.txt
create mode 160000 BaseTools/Source/C/BrotliCompress/brotli
delete mode 100644 BaseTools/Source/C/BrotliCompress/common/constants.h
delete mode 100644 BaseTools/Source/C/BrotliCompress/common/context.h
delete mode 100644 BaseTools/Source/C/BrotliCompress/common/dictionary.h
delete mode 100644 BaseTools/Source/C/BrotliCompress/common/platform.h
delete mode 100644 BaseTools/Source/C/BrotliCompress/common/transform.h
delete mode 100644 BaseTools/Source/C/BrotliCompress/common/version.h
delete mode 100644 BaseTools/Source/C/BrotliCompress/dec/bit_reader.h
delete mode 100644 BaseTools/Source/C/BrotliCompress/dec/huffman.h
delete mode 100644 BaseTools/Source/C/BrotliCompress/dec/prefix.h
delete mode 100644 BaseTools/Source/C/BrotliCompress/dec/state.h
delete mode 100644 BaseTools/Source/C/BrotliCompress/docs/brotli-comparison-study-2015-09-22.pdf
delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/backward_references.h
delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/backward_references_hq.h
delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/backward_references_inc.h
delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/bit_cost.h
delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/bit_cost_inc.h
delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/block_encoder_inc.h
delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/block_splitter.h
delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/block_splitter_inc.h
delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/brotli_bit_stream.h
delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/cluster.h
delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/cluster_inc.h
delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/command.h
delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/compress_fragment.h
delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/compress_fragment_two_pass.h
delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/dictionary_hash.h
delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/encoder_dict.h
delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/entropy_encode.h
delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/entropy_encode_static.h
delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/fast_log.h
delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/find_match_length.h
delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/hash.h
delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/hash_composite_inc.h
delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/hash_forgetful_chain_inc.h
delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/hash_longest_match64_inc.h
delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/hash_longest_match_inc.h
delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/hash_longest_match_quickly_inc.h
delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/hash_rolling_inc.h
delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/hash_to_binary_tree_inc.h
delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/histogram.h
delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/histogram_inc.h
delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/literal_cost.h
delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/memory.h
delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/metablock.h
delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/metablock_inc.h
delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/params.h
delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/prefix.h
delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/quality.h
delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/ringbuffer.h
delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/static_dict.h
delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/static_dict_lut.h
delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/utf8_util.h
delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/write_bits.h
delete mode 100644 BaseTools/Source/C/BrotliCompress/include/brotli/decode.h
delete mode 100644 BaseTools/Source/C/BrotliCompress/include/brotli/encode.h
delete mode 100644 BaseTools/Source/C/BrotliCompress/include/brotli/port.h
delete mode 100644 BaseTools/Source/C/BrotliCompress/include/brotli/types.h
delete mode 100644 BaseTools/Source/C/BrotliCompress/tools/brotli.md
diff --git a/BaseTools/Source/C/BrotliCompress/common/dictionary.c b/BaseTools/Source/C/BrotliCompress/common/dictionary.c
deleted file mode 100644
index 7fd076194825..000000000000
--- a/BaseTools/Source/C/BrotliCompress/common/dictionary.c
+++ /dev/null
@@ -1,5905 +0,0 @@
-/* Copyright 2013 Google Inc. All Rights Reserved.
-
- Distributed under MIT license.
- See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
-*/
-
-#include "./dictionary.h"
-
-#if defined(__cplusplus) || defined(c_plusplus)
-extern "C" {
-#endif
-
-#ifndef BROTLI_EXTERNAL_DICTIONARY_DATA
-static const uint8_t kBrotliDictionaryData[] =
-{
-116,105,109,101,100,111,119,110,108,105,102,101,108,101,102,116,98,97,99,107,99,
-111,100,101,100,97,116,97,115,104,111,119,111,110,108,121,115,105,116,101,99,105
-,116,121,111,112,101,110,106,117,115,116,108,105,107,101,102,114,101,101,119,111
-,114,107,116,101,120,116,121,101,97,114,111,118,101,114,98,111,100,121,108,111,
-118,101,102,111,114,109,98,111,111,107,112,108,97,121,108,105,118,101,108,105,
-110,101,104,101,108,112,104,111,109,101,115,105,100,101,109,111,114,101,119,111,
-114,100,108,111,110,103,116,104,101,109,118,105,101,119,102,105,110,100,112,97,
-103,101,100,97,121,115,102,117,108,108,104,101,97,100,116,101,114,109,101,97,99,
-104,97,114,101,97,102,114,111,109,116,114,117,101,109,97,114,107,97,98,108,101,
-117,112,111,110,104,105,103,104,100,97,116,101,108,97,110,100,110,101,119,115,
-101,118,101,110,110,101,120,116,99,97,115,101,98,111,116,104,112,111,115,116,117
-,115,101,100,109,97,100,101,104,97,110,100,104,101,114,101,119,104,97,116,110,97
-,109,101,76,105,110,107,98,108,111,103,115,105,122,101,98,97,115,101,104,101,108
-,100,109,97,107,101,109,97,105,110,117,115,101,114,39,41,32,43,104,111,108,100,
-101,110,100,115,119,105,116,104,78,101,119,115,114,101,97,100,119,101,114,101,
-115,105,103,110,116,97,107,101,104,97,118,101,103,97,109,101,115,101,101,110,99,
-97,108,108,112,97,116,104,119,101,108,108,112,108,117,115,109,101,110,117,102,
-105,108,109,112,97,114,116,106,111,105,110,116,104,105,115,108,105,115,116,103,
-111,111,100,110,101,101,100,119,97,121,115,119,101,115,116,106,111,98,115,109,
-105,110,100,97,108,115,111,108,111,103,111,114,105,99,104,117,115,101,115,108,97
-,115,116,116,101,97,109,97,114,109,121,102,111,111,100,107,105,110,103,119,105,
-108,108,101,97,115,116,119,97,114,100,98,101,115,116,102,105,114,101,80,97,103,
-101,107,110,111,119,97,119,97,121,46,112,110,103,109,111,118,101,116,104,97,110,
-108,111,97,100,103,105,118,101,115,101,108,102,110,111,116,101,109,117,99,104,
-102,101,101,100,109,97,110,121,114,111,99,107,105,99,111,110,111,110,99,101,108,
-111,111,107,104,105,100,101,100,105,101,100,72,111,109,101,114,117,108,101,104,
-111,115,116,97,106,97,120,105,110,102,111,99,108,117,98,108,97,119,115,108,101,
-115,115,104,97,108,102,115,111,109,101,115,117,99,104,122,111,110,101,49,48,48,
-37,111,110,101,115,99,97,114,101,84,105,109,101,114,97,99,101,98,108,117,101,102
-,111,117,114,119,101,101,107,102,97,99,101,104,111,112,101,103,97,118,101,104,97
-,114,100,108,111,115,116,119,104,101,110,112,97,114,107,107,101,112,116,112,97,
-115,115,115,104,105,112,114,111,111,109,72,84,77,76,112,108,97,110,84,121,112,
-101,100,111,110,101,115,97,118,101,107,101,101,112,102,108,97,103,108,105,110,
-107,115,111,108,100,102,105,118,101,116,111,111,107,114,97,116,101,116,111,119,
-110,106,117,109,112,116,104,117,115,100,97,114,107,99,97,114,100,102,105,108,101
-,102,101,97,114,115,116,97,121,107,105,108,108,116,104,97,116,102,97,108,108,97,
-117,116,111,101,118,101,114,46,99,111,109,116,97,108,107,115,104,111,112,118,111
-,116,101,100,101,101,112,109,111,100,101,114,101,115,116,116,117,114,110,98,111,
-114,110,98,97,110,100,102,101,108,108,114,111,115,101,117,114,108,40,115,107,105
-,110,114,111,108,101,99,111,109,101,97,99,116,115,97,103,101,115,109,101,101,116
-,103,111,108,100,46,106,112,103,105,116,101,109,118,97,114,121,102,101,108,116,
-116,104,101,110,115,101,110,100,100,114,111,112,86,105,101,119,99,111,112,121,49
-,46,48,34,60,47,97,62,115,116,111,112,101,108,115,101,108,105,101,115,116,111,
-117,114,112,97,99,107,46,103,105,102,112,97,115,116,99,115,115,63,103,114,97,121
-,109,101,97,110,38,103,116,59,114,105,100,101,115,104,111,116,108,97,116,101,115
-,97,105,100,114,111,97,100,118,97,114,32,102,101,101,108,106,111,104,110,114,105
-,99,107,112,111,114,116,102,97,115,116,39,85,65,45,100,101,97,100,60,47,98,62,
-112,111,111,114,98,105,108,108,116,121,112,101,85,46,83,46,119,111,111,100,109,
-117,115,116,50,112,120,59,73,110,102,111,114,97,110,107,119,105,100,101,119,97,
-110,116,119,97,108,108,108,101,97,100,91,48,93,59,112,97,117,108,119,97,118,101,
-115,117,114,101,36,40,39,35,119,97,105,116,109,97,115,115,97,114,109,115,103,111
-,101,115,103,97,105,110,108,97,110,103,112,97,105,100,33,45,45,32,108,111,99,107
-,117,110,105,116,114,111,111,116,119,97,108,107,102,105,114,109,119,105,102,101,
-120,109,108,34,115,111,110,103,116,101,115,116,50,48,112,120,107,105,110,100,114
-,111,119,115,116,111,111,108,102,111,110,116,109,97,105,108,115,97,102,101,115,
-116,97,114,109,97,112,115,99,111,114,101,114,97,105,110,102,108,111,119,98,97,98
-,121,115,112,97,110,115,97,121,115,52,112,120,59,54,112,120,59,97,114,116,115,
-102,111,111,116,114,101,97,108,119,105,107,105,104,101,97,116,115,116,101,112,
-116,114,105,112,111,114,103,47,108,97,107,101,119,101,97,107,116,111,108,100,70,
-111,114,109,99,97,115,116,102,97,110,115,98,97,110,107,118,101,114,121,114,117,
-110,115,106,117,108,121,116,97,115,107,49,112,120,59,103,111,97,108,103,114,101,
-119,115,108,111,119,101,100,103,101,105,100,61,34,115,101,116,115,53,112,120,59,
-46,106,115,63,52,48,112,120,105,102,32,40,115,111,111,110,115,101,97,116,110,111
-,110,101,116,117,98,101,122,101,114,111,115,101,110,116,114,101,101,100,102,97,
-99,116,105,110,116,111,103,105,102,116,104,97,114,109,49,56,112,120,99,97,109,
-101,104,105,108,108,98,111,108,100,122,111,111,109,118,111,105,100,101,97,115,
-121,114,105,110,103,102,105,108,108,112,101,97,107,105,110,105,116,99,111,115,
-116,51,112,120,59,106,97,99,107,116,97,103,115,98,105,116,115,114,111,108,108,
-101,100,105,116,107,110,101,119,110,101,97,114,60,33,45,45,103,114,111,119,74,83
-,79,78,100,117,116,121,78,97,109,101,115,97,108,101,121,111,117,32,108,111,116,
-115,112,97,105,110,106,97,122,122,99,111,108,100,101,121,101,115,102,105,115,104
-,119,119,119,46,114,105,115,107,116,97,98,115,112,114,101,118,49,48,112,120,114,
-105,115,101,50,53,112,120,66,108,117,101,100,105,110,103,51,48,48,44,98,97,108,
-108,102,111,114,100,101,97,114,110,119,105,108,100,98,111,120,46,102,97,105,114,
-108,97,99,107,118,101,114,115,112,97,105,114,106,117,110,101,116,101,99,104,105,
-102,40,33,112,105,99,107,101,118,105,108,36,40,34,35,119,97,114,109,108,111,114,
-100,100,111,101,115,112,117,108,108,44,48,48,48,105,100,101,97,100,114,97,119,
-104,117,103,101,115,112,111,116,102,117,110,100,98,117,114,110,104,114,101,102,
-99,101,108,108,107,101,121,115,116,105,99,107,104,111,117,114,108,111,115,115,
-102,117,101,108,49,50,112,120,115,117,105,116,100,101,97,108,82,83,83,34,97,103,
-101,100,103,114,101,121,71,69,84,34,101,97,115,101,97,105,109,115,103,105,114,
-108,97,105,100,115,56,112,120,59,110,97,118,121,103,114,105,100,116,105,112,115,
-35,57,57,57,119,97,114,115,108,97,100,121,99,97,114,115,41,59,32,125,112,104,112
-,63,104,101,108,108,116,97,108,108,119,104,111,109,122,104,58,229,42,47,13,10,32
-,49,48,48,104,97,108,108,46,10,10,65,55,112,120,59,112,117,115,104,99,104,97,116
-,48,112,120,59,99,114,101,119,42,47,60,47,104,97,115,104,55,53,112,120,102,108,
-97,116,114,97,114,101,32,38,38,32,116,101,108,108,99,97,109,112,111,110,116,111,
-108,97,105,100,109,105,115,115,115,107,105,112,116,101,110,116,102,105,110,101,
-109,97,108,101,103,101,116,115,112,108,111,116,52,48,48,44,13,10,13,10,99,111,
-111,108,102,101,101,116,46,112,104,112,60,98,114,62,101,114,105,99,109,111,115,
-116,103,117,105,100,98,101,108,108,100,101,115,99,104,97,105,114,109,97,116,104,
-97,116,111,109,47,105,109,103,38,35,56,50,108,117,99,107,99,101,110,116,48,48,48
-,59,116,105,110,121,103,111,110,101,104,116,109,108,115,101,108,108,100,114,117,
-103,70,82,69,69,110,111,100,101,110,105,99,107,63,105,100,61,108,111,115,101,110
-,117,108,108,118,97,115,116,119,105,110,100,82,83,83,32,119,101,97,114,114,101,
-108,121,98,101,101,110,115,97,109,101,100,117,107,101,110,97,115,97,99,97,112,
-101,119,105,115,104,103,117,108,102,84,50,51,58,104,105,116,115,115,108,111,116,
-103,97,116,101,107,105,99,107,98,108,117,114,116,104,101,121,49,53,112,120,39,39
-,41,59,41,59,34,62,109,115,105,101,119,105,110,115,98,105,114,100,115,111,114,
-116,98,101,116,97,115,101,101,107,84,49,56,58,111,114,100,115,116,114,101,101,
-109,97,108,108,54,48,112,120,102,97,114,109,226,128,153,115,98,111,121,115,91,48
-,93,46,39,41,59,34,80,79,83,84,98,101,97,114,107,105,100,115,41,59,125,125,109,
-97,114,121,116,101,110,100,40,85,75,41,113,117,97,100,122,104,58,230,45,115,105,
-122,45,45,45,45,112,114,111,112,39,41,59,13,108,105,102,116,84,49,57,58,118,105,
-99,101,97,110,100,121,100,101,98,116,62,82,83,83,112,111,111,108,110,101,99,107,
-98,108,111,119,84,49,54,58,100,111,111,114,101,118,97,108,84,49,55,58,108,101,
-116,115,102,97,105,108,111,114,97,108,112,111,108,108,110,111,118,97,99,111,108,
-115,103,101,110,101,32,226,128,148,115,111,102,116,114,111,109,101,116,105,108,
-108,114,111,115,115,60,104,51,62,112,111,117,114,102,97,100,101,112,105,110,107,
-60,116,114,62,109,105,110,105,41,124,33,40,109,105,110,101,122,104,58,232,98,97,
-114,115,104,101,97,114,48,48,41,59,109,105,108,107,32,45,45,62,105,114,111,110,
-102,114,101,100,100,105,115,107,119,101,110,116,115,111,105,108,112,117,116,115,
-47,106,115,47,104,111,108,121,84,50,50,58,73,83,66,78,84,50,48,58,97,100,97,109,
-115,101,101,115,60,104,50,62,106,115,111,110,39,44,32,39,99,111,110,116,84,50,49
-,58,32,82,83,83,108,111,111,112,97,115,105,97,109,111,111,110,60,47,112,62,115,
-111,117,108,76,73,78,69,102,111,114,116,99,97,114,116,84,49,52,58,60,104,49,62,
-56,48,112,120,33,45,45,60,57,112,120,59,84,48,52,58,109,105,107,101,58,52,54,90,
-110,105,99,101,105,110,99,104,89,111,114,107,114,105,99,101,122,104,58,228,39,41
-,41,59,112,117,114,101,109,97,103,101,112,97,114,97,116,111,110,101,98,111,110,
-100,58,51,55,90,95,111,102,95,39,93,41,59,48,48,48,44,122,104,58,231,116,97,110,
-107,121,97,114,100,98,111,119,108,98,117,115,104,58,53,54,90,74,97,118,97,51,48,
-112,120,10,124,125,10,37,67,51,37,58,51,52,90,106,101,102,102,69,88,80,73,99,97,
-115,104,118,105,115,97,103,111,108,102,115,110,111,119,122,104,58,233,113,117,
-101,114,46,99,115,115,115,105,99,107,109,101,97,116,109,105,110,46,98,105,110,
-100,100,101,108,108,104,105,114,101,112,105,99,115,114,101,110,116,58,51,54,90,
-72,84,84,80,45,50,48,49,102,111,116,111,119,111,108,102,69,78,68,32,120,98,111,
-120,58,53,52,90,66,79,68,89,100,105,99,107,59,10,125,10,101,120,105,116,58,51,53
-,90,118,97,114,115,98,101,97,116,39,125,41,59,100,105,101,116,57,57,57,59,97,110
-,110,101,125,125,60,47,91,105,93,46,76,97,110,103,107,109,194,178,119,105,114,
-101,116,111,121,115,97,100,100,115,115,101,97,108,97,108,101,120,59,10,9,125,101
-,99,104,111,110,105,110,101,46,111,114,103,48,48,53,41,116,111,110,121,106,101,
-119,115,115,97,110,100,108,101,103,115,114,111,111,102,48,48,48,41,32,50,48,48,
-119,105,110,101,103,101,97,114,100,111,103,115,98,111,111,116,103,97,114,121,99,
-117,116,115,116,121,108,101,116,101,109,112,116,105,111,110,46,120,109,108,99,
-111,99,107,103,97,110,103,36,40,39,46,53,48,112,120,80,104,46,68,109,105,115,99,
-97,108,97,110,108,111,97,110,100,101,115,107,109,105,108,101,114,121,97,110,117,
-110,105,120,100,105,115,99,41,59,125,10,100,117,115,116,99,108,105,112,41,46,10,
-10,55,48,112,120,45,50,48,48,68,86,68,115,55,93,62,60,116,97,112,101,100,101,109
-,111,105,43,43,41,119,97,103,101,101,117,114,111,112,104,105,108,111,112,116,115
-,104,111,108,101,70,65,81,115,97,115,105,110,45,50,54,84,108,97,98,115,112,101,
-116,115,85,82,76,32,98,117,108,107,99,111,111,107,59,125,13,10,72,69,65,68,91,48
-,93,41,97,98,98,114,106,117,97,110,40,49,57,56,108,101,115,104,116,119,105,110,
-60,47,105,62,115,111,110,121,103,117,121,115,102,117,99,107,112,105,112,101,124,
-45,10,33,48,48,50,41,110,100,111,119,91,49,93,59,91,93,59,10,76,111,103,32,115,
-97,108,116,13,10,9,9,98,97,110,103,116,114,105,109,98,97,116,104,41,123,13,10,48
-,48,112,120,10,125,41,59,107,111,58,236,102,101,101,115,97,100,62,13,115,58,47,
-47,32,91,93,59,116,111,108,108,112,108,117,103,40,41,123,10,123,13,10,32,46,106,
-115,39,50,48,48,112,100,117,97,108,98,111,97,116,46,74,80,71,41,59,10,125,113,
-117,111,116,41,59,10,10,39,41,59,10,13,10,125,13,50,48,49,52,50,48,49,53,50,48,
-49,54,50,48,49,55,50,48,49,56,50,48,49,57,50,48,50,48,50,48,50,49,50,48,50,50,50
-,48,50,51,50,48,50,52,50,48,50,53,50,48,50,54,50,48,50,55,50,48,50,56,50,48,50,
-57,50,48,51,48,50,48,51,49,50,48,51,50,50,48,51,51,50,48,51,52,50,48,51,53,50,48
-,51,54,50,48,51,55,50,48,49,51,50,48,49,50,50,48,49,49,50,48,49,48,50,48,48,57,
-50,48,48,56,50,48,48,55,50,48,48,54,50,48,48,53,50,48,48,52,50,48,48,51,50,48,48
-,50,50,48,48,49,50,48,48,48,49,57,57,57,49,57,57,56,49,57,57,55,49,57,57,54,49,
-57,57,53,49,57,57,52,49,57,57,51,49,57,57,50,49,57,57,49,49,57,57,48,49,57,56,57
-,49,57,56,56,49,57,56,55,49,57,56,54,49,57,56,53,49,57,56,52,49,57,56,51,49,57,
-56,50,49,57,56,49,49,57,56,48,49,57,55,57,49,57,55,56,49,57,55,55,49,57,55,54,49
-,57,55,53,49,57,55,52,49,57,55,51,49,57,55,50,49,57,55,49,49,57,55,48,49,57,54,
-57,49,57,54,56,49,57,54,55,49,57,54,54,49,57,54,53,49,57,54,52,49,57,54,51,49,57
-,54,50,49,57,54,49,49,57,54,48,49,57,53,57,49,57,53,56,49,57,53,55,49,57,53,54,
-49,57,53,53,49,57,53,52,49,57,53,51,49,57,53,50,49,57,53,49,49,57,53,48,49,48,48
-,48,49,48,50,52,49,51,57,52,48,48,48,48,57,57,57,57,99,111,109,111,109,195,161,
-115,101,115,116,101,101,115,116,97,112,101,114,111,116,111,100,111,104,97,99,101
-,99,97,100,97,97,195,177,111,98,105,101,110,100,195,173,97,97,115,195,173,118,
-105,100,97,99,97,115,111,111,116,114,111,102,111,114,111,115,111,108,111,111,116
-,114,97,99,117,97,108,100,105,106,111,115,105,100,111,103,114,97,110,116,105,112
-,111,116,101,109,97,100,101,98,101,97,108,103,111,113,117,195,169,101,115,116,
-111,110,97,100,97,116,114,101,115,112,111,99,111,99,97,115,97,98,97,106,111,116,
-111,100,97,115,105,110,111,97,103,117,97,112,117,101,115,117,110,111,115,97,110,
-116,101,100,105,99,101,108,117,105,115,101,108,108,97,109,97,121,111,122,111,110
-,97,97,109,111,114,112,105,115,111,111,98,114,97,99,108,105,99,101,108,108,111,
-100,105,111,115,104,111,114,97,99,97,115,105,208,183,208,176,208,189,208,176,208
-,190,208,188,209,128,208,176,209,128,209,131,209,130,208,176,208,189,208,181,208
-,191,208,190,208,190,209,130,208,184,208,183,208,189,208,190,208,180,208,190,209
-,130,208,190,208,182,208,181,208,190,208,189,208,184,209,133,208,157,208,176,208
-,181,208,181,208,177,209,139,208,188,209,139,208,146,209,139,209,129,208,190,208
-,178,209,139,208,178,208,190,208,157,208,190,208,190,208,177,208,159,208,190,208
-,187,208,184,208,189,208,184,208,160,208,164,208,157,208,181,208,156,209,139,209
-,130,209,139,208,158,208,189,208,184,208,188,208,180,208,176,208,151,208,176,208
-,148,208,176,208,157,209,131,208,158,208,177,209,130,208,181,208,152,208,183,208
-,181,208,185,208,189,209,131,208,188,208,188,208,162,209,139,209,131,208,182,217
-,129,217,138,216,163,217,134,217,133,216,167,217,133,216,185,217,131,217,132,216
-,163,217,136,216,177,216,175,217,138,216,167,217,129,217,137,217,135,217,136,217
-,132,217,133,217,132,217,131,216,167,217,136,217,132,217,135,216,168,216,179,216
-,167,217,132,216,165,217,134,217,135,217,138,216,163,217,138,217,130,216,175,217
-,135,217,132,216,171,217,133,216,168,217,135,217,132,217,136,217,132,217,138,216
-,168,217,132,216,167,217,138,216,168,217,131,216,180,217,138,216,167,217,133,216
-,163,217,133,217,134,216,170,216,168,217,138,217,132,217,134,216,173,216,168,217
-,135,217,133,217,133,216,180,217,136,216,180,102,105,114,115,116,118,105,100,101
-,111,108,105,103,104,116,119,111,114,108,100,109,101,100,105,97,119,104,105,116,
-101,99,108,111,115,101,98,108,97,99,107,114,105,103,104,116,115,109,97,108,108,
-98,111,111,107,115,112,108,97,99,101,109,117,115,105,99,102,105,101,108,100,111,
-114,100,101,114,112,111,105,110,116,118,97,108,117,101,108,101,118,101,108,116,
-97,98,108,101,98,111,97,114,100,104,111,117,115,101,103,114,111,117,112,119,111,
-114,107,115,121,101,97,114,115,115,116,97,116,101,116,111,100,97,121,119,97,116,
-101,114,115,116,97,114,116,115,116,121,108,101,100,101,97,116,104,112,111,119,
-101,114,112,104,111,110,101,110,105,103,104,116,101,114,114,111,114,105,110,112,
-117,116,97,98,111,117,116,116,101,114,109,115,116,105,116,108,101,116,111,111,
-108,115,101,118,101,110,116,108,111,99,97,108,116,105,109,101,115,108,97,114,103
-,101,119,111,114,100,115,103,97,109,101,115,115,104,111,114,116,115,112,97,99,
-101,102,111,99,117,115,99,108,101,97,114,109,111,100,101,108,98,108,111,99,107,
-103,117,105,100,101,114,97,100,105,111,115,104,97,114,101,119,111,109,101,110,97
-,103,97,105,110,109,111,110,101,121,105,109,97,103,101,110,97,109,101,115,121,
-111,117,110,103,108,105,110,101,115,108,97,116,101,114,99,111,108,111,114,103,
-114,101,101,110,102,114,111,110,116,38,97,109,112,59,119,97,116,99,104,102,111,
-114,99,101,112,114,105,99,101,114,117,108,101,115,98,101,103,105,110,97,102,116,
-101,114,118,105,115,105,116,105,115,115,117,101,97,114,101,97,115,98,101,108,111
-,119,105,110,100,101,120,116,111,116,97,108,104,111,117,114,115,108,97,98,101,
-108,112,114,105,110,116,112,114,101,115,115,98,117,105,108,116,108,105,110,107,
-115,115,112,101,101,100,115,116,117,100,121,116,114,97,100,101,102,111,117,110,
-100,115,101,110,115,101,117,110,100,101,114,115,104,111,119,110,102,111,114,109,
-115,114,97,110,103,101,97,100,100,101,100,115,116,105,108,108,109,111,118,101,
-100,116,97,107,101,110,97,98,111,118,101,102,108,97,115,104,102,105,120,101,100,
-111,102,116,101,110,111,116,104,101,114,118,105,101,119,115,99,104,101,99,107,
-108,101,103,97,108,114,105,118,101,114,105,116,101,109,115,113,117,105,99,107,
-115,104,97,112,101,104,117,109,97,110,101,120,105,115,116,103,111,105,110,103,
-109,111,118,105,101,116,104,105,114,100,98,97,115,105,99,112,101,97,99,101,115,
-116,97,103,101,119,105,100,116,104,108,111,103,105,110,105,100,101,97,115,119,
-114,111,116,101,112,97,103,101,115,117,115,101,114,115,100,114,105,118,101,115,
-116,111,114,101,98,114,101,97,107,115,111,117,116,104,118,111,105,99,101,115,105
-,116,101,115,109,111,110,116,104,119,104,101,114,101,98,117,105,108,100,119,104,
-105,99,104,101,97,114,116,104,102,111,114,117,109,116,104,114,101,101,115,112,
-111,114,116,112,97,114,116,121,67,108,105,99,107,108,111,119,101,114,108,105,118
-,101,115,99,108,97,115,115,108,97,121,101,114,101,110,116,114,121,115,116,111,
-114,121,117,115,97,103,101,115,111,117,110,100,99,111,117,114,116,121,111,117,
-114,32,98,105,114,116,104,112,111,112,117,112,116,121,112,101,115,97,112,112,108
-,121,73,109,97,103,101,98,101,105,110,103,117,112,112,101,114,110,111,116,101,
-115,101,118,101,114,121,115,104,111,119,115,109,101,97,110,115,101,120,116,114,
-97,109,97,116,99,104,116,114,97,99,107,107,110,111,119,110,101,97,114,108,121,98
-,101,103,97,110,115,117,112,101,114,112,97,112,101,114,110,111,114,116,104,108,
-101,97,114,110,103,105,118,101,110,110,97,109,101,100,101,110,100,101,100,84,101
-,114,109,115,112,97,114,116,115,71,114,111,117,112,98,114,97,110,100,117,115,105
-,110,103,119,111,109,97,110,102,97,108,115,101,114,101,97,100,121,97,117,100,105
-,111,116,97,107,101,115,119,104,105,108,101,46,99,111,109,47,108,105,118,101,100
-,99,97,115,101,115,100,97,105,108,121,99,104,105,108,100,103,114,101,97,116,106,
-117,100,103,101,116,104,111,115,101,117,110,105,116,115,110,101,118,101,114,98,
-114,111,97,100,99,111,97,115,116,99,111,118,101,114,97,112,112,108,101,102,105,
-108,101,115,99,121,99,108,101,115,99,101,110,101,112,108,97,110,115,99,108,105,
-99,107,119,114,105,116,101,113,117,101,101,110,112,105,101,99,101,101,109,97,105
-,108,102,114,97,109,101,111,108,100,101,114,112,104,111,116,111,108,105,109,105,
-116,99,97,99,104,101,99,105,118,105,108,115,99,97,108,101,101,110,116,101,114,
-116,104,101,109,101,116,104,101,114,101,116,111,117,99,104,98,111,117,110,100,
-114,111,121,97,108,97,115,107,101,100,119,104,111,108,101,115,105,110,99,101,115
-,116,111,99,107,32,110,97,109,101,102,97,105,116,104,104,101,97,114,116,101,109,
-112,116,121,111,102,102,101,114,115,99,111,112,101,111,119,110,101,100,109,105,
-103,104,116,97,108,98,117,109,116,104,105,110,107,98,108,111,111,100,97,114,114,
-97,121,109,97,106,111,114,116,114,117,115,116,99,97,110,111,110,117,110,105,111,
-110,99,111,117,110,116,118,97,108,105,100,115,116,111,110,101,83,116,121,108,101
-,76,111,103,105,110,104,97,112,112,121,111,99,99,117,114,108,101,102,116,58,102,
-114,101,115,104,113,117,105,116,101,102,105,108,109,115,103,114,97,100,101,110,
-101,101,100,115,117,114,98,97,110,102,105,103,104,116,98,97,115,105,115,104,111,
-118,101,114,97,117,116,111,59,114,111,117,116,101,46,104,116,109,108,109,105,120
-,101,100,102,105,110,97,108,89,111,117,114,32,115,108,105,100,101,116,111,112,
-105,99,98,114,111,119,110,97,108,111,110,101,100,114,97,119,110,115,112,108,105,
-116,114,101,97,99,104,82,105,103,104,116,100,97,116,101,115,109,97,114,99,104,
-113,117,111,116,101,103,111,111,100,115,76,105,110,107,115,100,111,117,98,116,97
-,115,121,110,99,116,104,117,109,98,97,108,108,111,119,99,104,105,101,102,121,111
-,117,116,104,110,111,118,101,108,49,48,112,120,59,115,101,114,118,101,117,110,
-116,105,108,104,97,110,100,115,67,104,101,99,107,83,112,97,99,101,113,117,101,
-114,121,106,97,109,101,115,101,113,117,97,108,116,119,105,99,101,48,44,48,48,48,
-83,116,97,114,116,112,97,110,101,108,115,111,110,103,115,114,111,117,110,100,101
-,105,103,104,116,115,104,105,102,116,119,111,114,116,104,112,111,115,116,115,108
-,101,97,100,115,119,101,101,107,115,97,118,111,105,100,116,104,101,115,101,109,
-105,108,101,115,112,108,97,110,101,115,109,97,114,116,97,108,112,104,97,112,108,
-97,110,116,109,97,114,107,115,114,97,116,101,115,112,108,97,121,115,99,108,97,
-105,109,115,97,108,101,115,116,101,120,116,115,115,116,97,114,115,119,114,111,
-110,103,60,47,104,51,62,116,104,105,110,103,46,111,114,103,47,109,117,108,116,
-105,104,101,97,114,100,80,111,119,101,114,115,116,97,110,100,116,111,107,101,110
-,115,111,108,105,100,40,116,104,105,115,98,114,105,110,103,115,104,105,112,115,
-115,116,97,102,102,116,114,105,101,100,99,97,108,108,115,102,117,108,108,121,102
-,97,99,116,115,97,103,101,110,116,84,104,105,115,32,47,47,45,45,62,97,100,109,
-105,110,101,103,121,112,116,69,118,101,110,116,49,53,112,120,59,69,109,97,105,
-108,116,114,117,101,34,99,114,111,115,115,115,112,101,110,116,98,108,111,103,115
-,98,111,120,34,62,110,111,116,101,100,108,101,97,118,101,99,104,105,110,97,115,
-105,122,101,115,103,117,101,115,116,60,47,104,52,62,114,111,98,111,116,104,101,
-97,118,121,116,114,117,101,44,115,101,118,101,110,103,114,97,110,100,99,114,105,
-109,101,115,105,103,110,115,97,119,97,114,101,100,97,110,99,101,112,104,97,115,
-101,62,60,33,45,45,101,110,95,85,83,38,35,51,57,59,50,48,48,112,120,95,110,97,
-109,101,108,97,116,105,110,101,110,106,111,121,97,106,97,120,46,97,116,105,111,
-110,115,109,105,116,104,85,46,83,46,32,104,111,108,100,115,112,101,116,101,114,
-105,110,100,105,97,110,97,118,34,62,99,104,97,105,110,115,99,111,114,101,99,111,
-109,101,115,100,111,105,110,103,112,114,105,111,114,83,104,97,114,101,49,57,57,
-48,115,114,111,109,97,110,108,105,115,116,115,106,97,112,97,110,102,97,108,108,
-115,116,114,105,97,108,111,119,110,101,114,97,103,114,101,101,60,47,104,50,62,97
-,98,117,115,101,97,108,101,114,116,111,112,101,114,97,34,45,47,47,87,99,97,114,
-100,115,104,105,108,108,115,116,101,97,109,115,80,104,111,116,111,116,114,117,
-116,104,99,108,101,97,110,46,112,104,112,63,115,97,105,110,116,109,101,116,97,
-108,108,111,117,105,115,109,101,97,110,116,112,114,111,111,102,98,114,105,101,
-102,114,111,119,34,62,103,101,110,114,101,116,114,117,99,107,108,111,111,107,115
-,86,97,108,117,101,70,114,97,109,101,46,110,101,116,47,45,45,62,10,60,116,114,
-121,32,123,10,118,97,114,32,109,97,107,101,115,99,111,115,116,115,112,108,97,105
-,110,97,100,117,108,116,113,117,101,115,116,116,114,97,105,110,108,97,98,111,114
-,104,101,108,112,115,99,97,117,115,101,109,97,103,105,99,109,111,116,111,114,116
-,104,101,105,114,50,53,48,112,120,108,101,97,115,116,115,116,101,112,115,67,111,
-117,110,116,99,111,117,108,100,103,108,97,115,115,115,105,100,101,115,102,117,
-110,100,115,104,111,116,101,108,97,119,97,114,100,109,111,117,116,104,109,111,
-118,101,115,112,97,114,105,115,103,105,118,101,115,100,117,116,99,104,116,101,
-120,97,115,102,114,117,105,116,110,117,108,108,44,124,124,91,93,59,116,111,112,
-34,62,10,60,33,45,45,80,79,83,84,34,111,99,101,97,110,60,98,114,47,62,102,108,
-111,111,114,115,112,101,97,107,100,101,112,116,104,32,115,105,122,101,98,97,110,
-107,115,99,97,116,99,104,99,104,97,114,116,50,48,112,120,59,97,108,105,103,110,
-100,101,97,108,115,119,111,117,108,100,53,48,112,120,59,117,114,108,61,34,112,97
-,114,107,115,109,111,117,115,101,77,111,115,116,32,46,46,46,60,47,97,109,111,110
-,103,98,114,97,105,110,98,111,100,121,32,110,111,110,101,59,98,97,115,101,100,99
-,97,114,114,121,100,114,97,102,116,114,101,102,101,114,112,97,103,101,95,104,111
-,109,101,46,109,101,116,101,114,100,101,108,97,121,100,114,101,97,109,112,114,
-111,118,101,106,111,105,110,116,60,47,116,114,62,100,114,117,103,115,60,33,45,45
-,32,97,112,114,105,108,105,100,101,97,108,97,108,108,101,110,101,120,97,99,116,
-102,111,114,116,104,99,111,100,101,115,108,111,103,105,99,86,105,101,119,32,115,
-101,101,109,115,98,108,97,110,107,112,111,114,116,115,32,40,50,48,48,115,97,118,
-101,100,95,108,105,110,107,103,111,97,108,115,103,114,97,110,116,103,114,101,101
-,107,104,111,109,101,115,114,105,110,103,115,114,97,116,101,100,51,48,112,120,59
-,119,104,111,115,101,112,97,114,115,101,40,41,59,34,32,66,108,111,99,107,108,105
-,110,117,120,106,111,110,101,115,112,105,120,101,108,39,41,59,34,62,41,59,105,
-102,40,45,108,101,102,116,100,97,118,105,100,104,111,114,115,101,70,111,99,117,
-115,114,97,105,115,101,98,111,120,101,115,84,114,97,99,107,101,109,101,110,116,
-60,47,101,109,62,98,97,114,34,62,46,115,114,99,61,116,111,119,101,114,97,108,116
-,61,34,99,97,98,108,101,104,101,110,114,121,50,52,112,120,59,115,101,116,117,112
-,105,116,97,108,121,115,104,97,114,112,109,105,110,111,114,116,97,115,116,101,
-119,97,110,116,115,116,104,105,115,46,114,101,115,101,116,119,104,101,101,108,
-103,105,114,108,115,47,99,115,115,47,49,48,48,37,59,99,108,117,98,115,115,116,
-117,102,102,98,105,98,108,101,118,111,116,101,115,32,49,48,48,48,107,111,114,101
-,97,125,41,59,13,10,98,97,110,100,115,113,117,101,117,101,61,32,123,125,59,56,48
-,112,120,59,99,107,105,110,103,123,13,10,9,9,97,104,101,97,100,99,108,111,99,107
-,105,114,105,115,104,108,105,107,101,32,114,97,116,105,111,115,116,97,116,115,70
-,111,114,109,34,121,97,104,111,111,41,91,48,93,59,65,98,111,117,116,102,105,110,
-100,115,60,47,104,49,62,100,101,98,117,103,116,97,115,107,115,85,82,76,32,61,99,
-101,108,108,115,125,41,40,41,59,49,50,112,120,59,112,114,105,109,101,116,101,108
-,108,115,116,117,114,110,115,48,120,54,48,48,46,106,112,103,34,115,112,97,105,
-110,98,101,97,99,104,116,97,120,101,115,109,105,99,114,111,97,110,103,101,108,45
-,45,62,60,47,103,105,102,116,115,115,116,101,118,101,45,108,105,110,107,98,111,
-100,121,46,125,41,59,10,9,109,111,117,110,116,32,40,49,57,57,70,65,81,60,47,114,
-111,103,101,114,102,114,97,110,107,67,108,97,115,115,50,56,112,120,59,102,101,
-101,100,115,60,104,49,62,60,115,99,111,116,116,116,101,115,116,115,50,50,112,120
-,59,100,114,105,110,107,41,32,124,124,32,108,101,119,105,115,115,104,97,108,108,
-35,48,51,57,59,32,102,111,114,32,108,111,118,101,100,119,97,115,116,101,48,48,
-112,120,59,106,97,58,227,130,115,105,109,111,110,60,102,111,110,116,114,101,112,
-108,121,109,101,101,116,115,117,110,116,101,114,99,104,101,97,112,116,105,103,
-104,116,66,114,97,110,100,41,32,33,61,32,100,114,101,115,115,99,108,105,112,115,
-114,111,111,109,115,111,110,107,101,121,109,111,98,105,108,109,97,105,110,46,78,
-97,109,101,32,112,108,97,116,101,102,117,110,110,121,116,114,101,101,115,99,111,
-109,47,34,49,46,106,112,103,119,109,111,100,101,112,97,114,97,109,83,84,65,82,84
-,108,101,102,116,32,105,100,100,101,110,44,32,50,48,49,41,59,10,125,10,102,111,
-114,109,46,118,105,114,117,115,99,104,97,105,114,116,114,97,110,115,119,111,114,
-115,116,80,97,103,101,115,105,116,105,111,110,112,97,116,99,104,60,33,45,45,10,
-111,45,99,97,99,102,105,114,109,115,116,111,117,114,115,44,48,48,48,32,97,115,
-105,97,110,105,43,43,41,123,97,100,111,98,101,39,41,91,48,93,105,100,61,49,48,98
-,111,116,104,59,109,101,110,117,32,46,50,46,109,105,46,112,110,103,34,107,101,
-118,105,110,99,111,97,99,104,67,104,105,108,100,98,114,117,99,101,50,46,106,112,
-103,85,82,76,41,43,46,106,112,103,124,115,117,105,116,101,115,108,105,99,101,104
-,97,114,114,121,49,50,48,34,32,115,119,101,101,116,116,114,62,13,10,110,97,109,
-101,61,100,105,101,103,111,112,97,103,101,32,115,119,105,115,115,45,45,62,10,10,
-35,102,102,102,59,34,62,76,111,103,46,99,111,109,34,116,114,101,97,116,115,104,
-101,101,116,41,32,38,38,32,49,52,112,120,59,115,108,101,101,112,110,116,101,110,
-116,102,105,108,101,100,106,97,58,227,131,105,100,61,34,99,78,97,109,101,34,119,
-111,114,115,101,115,104,111,116,115,45,98,111,120,45,100,101,108,116,97,10,38,
-108,116,59,98,101,97,114,115,58,52,56,90,60,100,97,116,97,45,114,117,114,97,108,
-60,47,97,62,32,115,112,101,110,100,98,97,107,101,114,115,104,111,112,115,61,32,
-34,34,59,112,104,112,34,62,99,116,105,111,110,49,51,112,120,59,98,114,105,97,110
-,104,101,108,108,111,115,105,122,101,61,111,61,37,50,70,32,106,111,105,110,109,
-97,121,98,101,60,105,109,103,32,105,109,103,34,62,44,32,102,106,115,105,109,103,
-34,32,34,41,91,48,93,77,84,111,112,66,84,121,112,101,34,110,101,119,108,121,68,
-97,110,115,107,99,122,101,99,104,116,114,97,105,108,107,110,111,119,115,60,47,
-104,53,62,102,97,113,34,62,122,104,45,99,110,49,48,41,59,10,45,49,34,41,59,116,
-121,112,101,61,98,108,117,101,115,116,114,117,108,121,100,97,118,105,115,46,106,
-115,39,59,62,13,10,60,33,115,116,101,101,108,32,121,111,117,32,104,50,62,13,10,
-102,111,114,109,32,106,101,115,117,115,49,48,48,37,32,109,101,110,117,46,13,10,9
-,13,10,119,97,108,101,115,114,105,115,107,115,117,109,101,110,116,100,100,105,
-110,103,98,45,108,105,107,116,101,97,99,104,103,105,102,34,32,118,101,103,97,115
-,100,97,110,115,107,101,101,115,116,105,115,104,113,105,112,115,117,111,109,105,
-115,111,98,114,101,100,101,115,100,101,101,110,116,114,101,116,111,100,111,115,
-112,117,101,100,101,97,195,177,111,115,101,115,116,195,161,116,105,101,110,101,
-104,97,115,116,97,111,116,114,111,115,112,97,114,116,101,100,111,110,100,101,110
-,117,101,118,111,104,97,99,101,114,102,111,114,109,97,109,105,115,109,111,109,
-101,106,111,114,109,117,110,100,111,97,113,117,195,173,100,195,173,97,115,115,
-195,179,108,111,97,121,117,100,97,102,101,99,104,97,116,111,100,97,115,116,97,
-110,116,111,109,101,110,111,115,100,97,116,111,115,111,116,114,97,115,115,105,
-116,105,111,109,117,99,104,111,97,104,111,114,97,108,117,103,97,114,109,97,121,
-111,114,101,115,116,111,115,104,111,114,97,115,116,101,110,101,114,97,110,116,
-101,115,102,111,116,111,115,101,115,116,97,115,112,97,195,173,115,110,117,101,
-118,97,115,97,108,117,100,102,111,114,111,115,109,101,100,105,111,113,117,105,
-101,110,109,101,115,101,115,112,111,100,101,114,99,104,105,108,101,115,101,114,
-195,161,118,101,99,101,115,100,101,99,105,114,106,111,115,195,169,101,115,116,97
-,114,118,101,110,116,97,103,114,117,112,111,104,101,99,104,111,101,108,108,111,
-115,116,101,110,103,111,97,109,105,103,111,99,111,115,97,115,110,105,118,101,108
-,103,101,110,116,101,109,105,115,109,97,97,105,114,101,115,106,117,108,105,111,
-116,101,109,97,115,104,97,99,105,97,102,97,118,111,114,106,117,110,105,111,108,
-105,98,114,101,112,117,110,116,111,98,117,101,110,111,97,117,116,111,114,97,98,
-114,105,108,98,117,101,110,97,116,101,120,116,111,109,97,114,122,111,115,97,98,
-101,114,108,105,115,116,97,108,117,101,103,111,99,195,179,109,111,101,110,101,
-114,111,106,117,101,103,111,112,101,114,195,186,104,97,98,101,114,101,115,116,
-111,121,110,117,110,99,97,109,117,106,101,114,118,97,108,111,114,102,117,101,114
-,97,108,105,98,114,111,103,117,115,116,97,105,103,117,97,108,118,111,116,111,115
-,99,97,115,111,115,103,117,195,173,97,112,117,101,100,111,115,111,109,111,115,97
-,118,105,115,111,117,115,116,101,100,100,101,98,101,110,110,111,99,104,101,98,
-117,115,99,97,102,97,108,116,97,101,117,114,111,115,115,101,114,105,101,100,105,
-99,104,111,99,117,114,115,111,99,108,97,118,101,99,97,115,97,115,108,101,195,179
-,110,112,108,97,122,111,108,97,114,103,111,111,98,114,97,115,118,105,115,116,97,
-97,112,111,121,111,106,117,110,116,111,116,114,97,116,97,118,105,115,116,111,99,
-114,101,97,114,99,97,109,112,111,104,101,109,111,115,99,105,110,99,111,99,97,114
-,103,111,112,105,115,111,115,111,114,100,101,110,104,97,99,101,110,195,161,114,
-101,97,100,105,115,99,111,112,101,100,114,111,99,101,114,99,97,112,117,101,100,
-97,112,97,112,101,108,109,101,110,111,114,195,186,116,105,108,99,108,97,114,111,
-106,111,114,103,101,99,97,108,108,101,112,111,110,101,114,116,97,114,100,101,110
-,97,100,105,101,109,97,114,99,97,115,105,103,117,101,101,108,108,97,115,115,105,
-103,108,111,99,111,99,104,101,109,111,116,111,115,109,97,100,114,101,99,108,97,
-115,101,114,101,115,116,111,110,105,195,177,111,113,117,101,100,97,112,97,115,97
-,114,98,97,110,99,111,104,105,106,111,115,118,105,97,106,101,112,97,98,108,111,
-195,169,115,116,101,118,105,101,110,101,114,101,105,110,111,100,101,106,97,114,
-102,111,110,100,111,99,97,110,97,108,110,111,114,116,101,108,101,116,114,97,99,
-97,117,115,97,116,111,109,97,114,109,97,110,111,115,108,117,110,101,115,97,117,
-116,111,115,118,105,108,108,97,118,101,110,100,111,112,101,115,97,114,116,105,
-112,111,115,116,101,110,103,97,109,97,114,99,111,108,108,101,118,97,112,97,100,
-114,101,117,110,105,100,111,118,97,109,111,115,122,111,110,97,115,97,109,98,111,
-115,98,97,110,100,97,109,97,114,105,97,97,98,117,115,111,109,117,99,104,97,115,
-117,98,105,114,114,105,111,106,97,118,105,118,105,114,103,114,97,100,111,99,104,
-105,99,97,97,108,108,195,173,106,111,118,101,110,100,105,99,104,97,101,115,116,
-97,110,116,97,108,101,115,115,97,108,105,114,115,117,101,108,111,112,101,115,111
-,115,102,105,110,101,115,108,108,97,109,97,98,117,115,99,111,195,169,115,116,97,
-108,108,101,103,97,110,101,103,114,111,112,108,97,122,97,104,117,109,111,114,112
-,97,103,97,114,106,117,110,116,97,100,111,98,108,101,105,115,108,97,115,98,111,
-108,115,97,98,97,195,177,111,104,97,98,108,97,108,117,99,104,97,195,129,114,101,
-97,100,105,99,101,110,106,117,103,97,114,110,111,116,97,115,118,97,108,108,101,
-97,108,108,195,161,99,97,114,103,97,100,111,108,111,114,97,98,97,106,111,101,115
-,116,195,169,103,117,115,116,111,109,101,110,116,101,109,97,114,105,111,102,105,
-114,109,97,99,111,115,116,111,102,105,99,104,97,112,108,97,116,97,104,111,103,97
-,114,97,114,116,101,115,108,101,121,101,115,97,113,117,101,108,109,117,115,101,
-111,98,97,115,101,115,112,111,99,111,115,109,105,116,97,100,99,105,101,108,111,
-99,104,105,99,111,109,105,101,100,111,103,97,110,97,114,115,97,110,116,111,101,
-116,97,112,97,100,101,98,101,115,112,108,97,121,97,114,101,100,101,115,115,105,
-101,116,101,99,111,114,116,101,99,111,114,101,97,100,117,100,97,115,100,101,115,
-101,111,118,105,101,106,111,100,101,115,101,97,97,103,117,97,115,38,113,117,111,
-116,59,100,111,109,97,105,110,99,111,109,109,111,110,115,116,97,116,117,115,101,
-118,101,110,116,115,109,97,115,116,101,114,115,121,115,116,101,109,97,99,116,105
-,111,110,98,97,110,110,101,114,114,101,109,111,118,101,115,99,114,111,108,108,
-117,112,100,97,116,101,103,108,111,98,97,108,109,101,100,105,117,109,102,105,108
-,116,101,114,110,117,109,98,101,114,99,104,97,110,103,101,114,101,115,117,108,
-116,112,117,98,108,105,99,115,99,114,101,101,110,99,104,111,111,115,101,110,111,
-114,109,97,108,116,114,97,118,101,108,105,115,115,117,101,115,115,111,117,114,99
-,101,116,97,114,103,101,116,115,112,114,105,110,103,109,111,100,117,108,101,109,
-111,98,105,108,101,115,119,105,116,99,104,112,104,111,116,111,115,98,111,114,100
-,101,114,114,101,103,105,111,110,105,116,115,101,108,102,115,111,99,105,97,108,
-97,99,116,105,118,101,99,111,108,117,109,110,114,101,99,111,114,100,102,111,108,
-108,111,119,116,105,116,108,101,62,101,105,116,104,101,114,108,101,110,103,116,
-104,102,97,109,105,108,121,102,114,105,101,110,100,108,97,121,111,117,116,97,117
-,116,104,111,114,99,114,101,97,116,101,114,101,118,105,101,119,115,117,109,109,
-101,114,115,101,114,118,101,114,112,108,97,121,101,100,112,108,97,121,101,114,
-101,120,112,97,110,100,112,111,108,105,99,121,102,111,114,109,97,116,100,111,117
-,98,108,101,112,111,105,110,116,115,115,101,114,105,101,115,112,101,114,115,111,
-110,108,105,118,105,110,103,100,101,115,105,103,110,109,111,110,116,104,115,102,
-111,114,99,101,115,117,110,105,113,117,101,119,101,105,103,104,116,112,101,111,
-112,108,101,101,110,101,114,103,121,110,97,116,117,114,101,115,101,97,114,99,104
-,102,105,103,117,114,101,104,97,118,105,110,103,99,117,115,116,111,109,111,102,
-102,115,101,116,108,101,116,116,101,114,119,105,110,100,111,119,115,117,98,109,
-105,116,114,101,110,100,101,114,103,114,111,117,112,115,117,112,108,111,97,100,
-104,101,97,108,116,104,109,101,116,104,111,100,118,105,100,101,111,115,115,99,
-104,111,111,108,102,117,116,117,114,101,115,104,97,100,111,119,100,101,98,97,116
-,101,118,97,108,117,101,115,79,98,106,101,99,116,111,116,104,101,114,115,114,105
-,103,104,116,115,108,101,97,103,117,101,99,104,114,111,109,101,115,105,109,112,
-108,101,110,111,116,105,99,101,115,104,97,114,101,100,101,110,100,105,110,103,
-115,101,97,115,111,110,114,101,112,111,114,116,111,110,108,105,110,101,115,113,
-117,97,114,101,98,117,116,116,111,110,105,109,97,103,101,115,101,110,97,98,108,
-101,109,111,118,105,110,103,108,97,116,101,115,116,119,105,110,116,101,114,70,
-114,97,110,99,101,112,101,114,105,111,100,115,116,114,111,110,103,114,101,112,
-101,97,116,76,111,110,100,111,110,100,101,116,97,105,108,102,111,114,109,101,100
-,100,101,109,97,110,100,115,101,99,117,114,101,112,97,115,115,101,100,116,111,
-103,103,108,101,112,108,97,99,101,115,100,101,118,105,99,101,115,116,97,116,105,
-99,99,105,116,105,101,115,115,116,114,101,97,109,121,101,108,108,111,119,97,116,
-116,97,99,107,115,116,114,101,101,116,102,108,105,103,104,116,104,105,100,100,
-101,110,105,110,102,111,34,62,111,112,101,110,101,100,117,115,101,102,117,108,
-118,97,108,108,101,121,99,97,117,115,101,115,108,101,97,100,101,114,115,101,99,
-114,101,116,115,101,99,111,110,100,100,97,109,97,103,101,115,112,111,114,116,115
-,101,120,99,101,112,116,114,97,116,105,110,103,115,105,103,110,101,100,116,104,
-105,110,103,115,101,102,102,101,99,116,102,105,101,108,100,115,115,116,97,116,
-101,115,111,102,102,105,99,101,118,105,115,117,97,108,101,100,105,116,111,114,
-118,111,108,117,109,101,82,101,112,111,114,116,109,117,115,101,117,109,109,111,
-118,105,101,115,112,97,114,101,110,116,97,99,99,101,115,115,109,111,115,116,108,
-121,109,111,116,104,101,114,34,32,105,100,61,34,109,97,114,107,101,116,103,114,
-111,117,110,100,99,104,97,110,99,101,115,117,114,118,101,121,98,101,102,111,114,
-101,115,121,109,98,111,108,109,111,109,101,110,116,115,112,101,101,99,104,109,
-111,116,105,111,110,105,110,115,105,100,101,109,97,116,116,101,114,67,101,110,
-116,101,114,111,98,106,101,99,116,101,120,105,115,116,115,109,105,100,100,108,
-101,69,117,114,111,112,101,103,114,111,119,116,104,108,101,103,97,99,121,109,97,
-110,110,101,114,101,110,111,117,103,104,99,97,114,101,101,114,97,110,115,119,101
-,114,111,114,105,103,105,110,112,111,114,116,97,108,99,108,105,101,110,116,115,
-101,108,101,99,116,114,97,110,100,111,109,99,108,111,115,101,100,116,111,112,105
-,99,115,99,111,109,105,110,103,102,97,116,104,101,114,111,112,116,105,111,110,
-115,105,109,112,108,121,114,97,105,115,101,100,101,115,99,97,112,101,99,104,111,
-115,101,110,99,104,117,114,99,104,100,101,102,105,110,101,114,101,97,115,111,110
-,99,111,114,110,101,114,111,117,116,112,117,116,109,101,109,111,114,121,105,102,
-114,97,109,101,112,111,108,105,99,101,109,111,100,101,108,115,78,117,109,98,101,
-114,100,117,114,105,110,103,111,102,102,101,114,115,115,116,121,108,101,115,107,
-105,108,108,101,100,108,105,115,116,101,100,99,97,108,108,101,100,115,105,108,
-118,101,114,109,97,114,103,105,110,100,101,108,101,116,101,98,101,116,116,101,
-114,98,114,111,119,115,101,108,105,109,105,116,115,71,108,111,98,97,108,115,105,
-110,103,108,101,119,105,100,103,101,116,99,101,110,116,101,114,98,117,100,103,
-101,116,110,111,119,114,97,112,99,114,101,100,105,116,99,108,97,105,109,115,101,
-110,103,105,110,101,115,97,102,101,116,121,99,104,111,105,99,101,115,112,105,114
-,105,116,45,115,116,121,108,101,115,112,114,101,97,100,109,97,107,105,110,103,
-110,101,101,100,101,100,114,117,115,115,105,97,112,108,101,97,115,101,101,120,
-116,101,110,116,83,99,114,105,112,116,98,114,111,107,101,110,97,108,108,111,119,
-115,99,104,97,114,103,101,100,105,118,105,100,101,102,97,99,116,111,114,109,101,
-109,98,101,114,45,98,97,115,101,100,116,104,101,111,114,121,99,111,110,102,105,
-103,97,114,111,117,110,100,119,111,114,107,101,100,104,101,108,112,101,100,67,
-104,117,114,99,104,105,109,112,97,99,116,115,104,111,117,108,100,97,108,119,97,
-121,115,108,111,103,111,34,32,98,111,116,116,111,109,108,105,115,116,34,62,41,
-123,118,97,114,32,112,114,101,102,105,120,111,114,97,110,103,101,72,101,97,100,
-101,114,46,112,117,115,104,40,99,111,117,112,108,101,103,97,114,100,101,110,98,
-114,105,100,103,101,108,97,117,110,99,104,82,101,118,105,101,119,116,97,107,105,
-110,103,118,105,115,105,111,110,108,105,116,116,108,101,100,97,116,105,110,103,
-66,117,116,116,111,110,98,101,97,117,116,121,116,104,101,109,101,115,102,111,114
-,103,111,116,83,101,97,114,99,104,97,110,99,104,111,114,97,108,109,111,115,116,
-108,111,97,100,101,100,67,104,97,110,103,101,114,101,116,117,114,110,115,116,114
-,105,110,103,114,101,108,111,97,100,77,111,98,105,108,101,105,110,99,111,109,101
-,115,117,112,112,108,121,83,111,117,114,99,101,111,114,100,101,114,115,118,105,
-101,119,101,100,38,110,98,115,112,59,99,111,117,114,115,101,65,98,111,117,116,32
-,105,115,108,97,110,100,60,104,116,109,108,32,99,111,111,107,105,101,110,97,109,
-101,61,34,97,109,97,122,111,110,109,111,100,101,114,110,97,100,118,105,99,101,
-105,110,60,47,97,62,58,32,84,104,101,32,100,105,97,108,111,103,104,111,117,115,
-101,115,66,69,71,73,78,32,77,101,120,105,99,111,115,116,97,114,116,115,99,101,
-110,116,114,101,104,101,105,103,104,116,97,100,100,105,110,103,73,115,108,97,110
-,100,97,115,115,101,116,115,69,109,112,105,114,101,83,99,104,111,111,108,101,102
-,102,111,114,116,100,105,114,101,99,116,110,101,97,114,108,121,109,97,110,117,97
-,108,83,101,108,101,99,116,46,10,10,79,110,101,106,111,105,110,101,100,109,101,
-110,117,34,62,80,104,105,108,105,112,97,119,97,114,100,115,104,97,110,100,108,
-101,105,109,112,111,114,116,79,102,102,105,99,101,114,101,103,97,114,100,115,107
-,105,108,108,115,110,97,116,105,111,110,83,112,111,114,116,115,100,101,103,114,
-101,101,119,101,101,107,108,121,32,40,101,46,103,46,98,101,104,105,110,100,100,
-111,99,116,111,114,108,111,103,103,101,100,117,110,105,116,101,100,60,47,98,62,
-60,47,98,101,103,105,110,115,112,108,97,110,116,115,97,115,115,105,115,116,97,
-114,116,105,115,116,105,115,115,117,101,100,51,48,48,112,120,124,99,97,110,97,
-100,97,97,103,101,110,99,121,115,99,104,101,109,101,114,101,109,97,105,110,66,
-114,97,122,105,108,115,97,109,112,108,101,108,111,103,111,34,62,98,101,121,111,
-110,100,45,115,99,97,108,101,97,99,99,101,112,116,115,101,114,118,101,100,109,97
-,114,105,110,101,70,111,111,116,101,114,99,97,109,101,114,97,60,47,104,49,62,10,
-95,102,111,114,109,34,108,101,97,118,101,115,115,116,114,101,115,115,34,32,47,62
-,13,10,46,103,105,102,34,32,111,110,108,111,97,100,108,111,97,100,101,114,79,120
-,102,111,114,100,115,105,115,116,101,114,115,117,114,118,105,118,108,105,115,116
-,101,110,102,101,109,97,108,101,68,101,115,105,103,110,115,105,122,101,61,34,97,
-112,112,101,97,108,116,101,120,116,34,62,108,101,118,101,108,115,116,104,97,110,
-107,115,104,105,103,104,101,114,102,111,114,99,101,100,97,110,105,109,97,108,97,
-110,121,111,110,101,65,102,114,105,99,97,97,103,114,101,101,100,114,101,99,101,
-110,116,80,101,111,112,108,101,60,98,114,32,47,62,119,111,110,100,101,114,112,
-114,105,99,101,115,116,117,114,110,101,100,124,124,32,123,125,59,109,97,105,110,
-34,62,105,110,108,105,110,101,115,117,110,100,97,121,119,114,97,112,34,62,102,97
-,105,108,101,100,99,101,110,115,117,115,109,105,110,117,116,101,98,101,97,99,111
-,110,113,117,111,116,101,115,49,53,48,112,120,124,101,115,116,97,116,101,114,101
-,109,111,116,101,101,109,97,105,108,34,108,105,110,107,101,100,114,105,103,104,
-116,59,115,105,103,110,97,108,102,111,114,109,97,108,49,46,104,116,109,108,115,
-105,103,110,117,112,112,114,105,110,99,101,102,108,111,97,116,58,46,112,110,103,
-34,32,102,111,114,117,109,46,65,99,99,101,115,115,112,97,112,101,114,115,115,111
-,117,110,100,115,101,120,116,101,110,100,72,101,105,103,104,116,115,108,105,100,
-101,114,85,84,70,45,56,34,38,97,109,112,59,32,66,101,102,111,114,101,46,32,87,
-105,116,104,115,116,117,100,105,111,111,119,110,101,114,115,109,97,110,97,103,
-101,112,114,111,102,105,116,106,81,117,101,114,121,97,110,110,117,97,108,112,97,
-114,97,109,115,98,111,117,103,104,116,102,97,109,111,117,115,103,111,111,103,108
-,101,108,111,110,103,101,114,105,43,43,41,32,123,105,115,114,97,101,108,115,97,
-121,105,110,103,100,101,99,105,100,101,104,111,109,101,34,62,104,101,97,100,101,
-114,101,110,115,117,114,101,98,114,97,110,99,104,112,105,101,99,101,115,98,108,
-111,99,107,59,115,116,97,116,101,100,116,111,112,34,62,60,114,97,99,105,110,103,
-114,101,115,105,122,101,45,45,38,103,116,59,112,97,99,105,116,121,115,101,120,
-117,97,108,98,117,114,101,97,117,46,106,112,103,34,32,49,48,44,48,48,48,111,98,
-116,97,105,110,116,105,116,108,101,115,97,109,111,117,110,116,44,32,73,110,99,46
-,99,111,109,101,100,121,109,101,110,117,34,32,108,121,114,105,99,115,116,111,100
-,97,121,46,105,110,100,101,101,100,99,111,117,110,116,121,95,108,111,103,111,46,
-70,97,109,105,108,121,108,111,111,107,101,100,77,97,114,107,101,116,108,115,101,
-32,105,102,80,108,97,121,101,114,116,117,114,107,101,121,41,59,118,97,114,32,102
-,111,114,101,115,116,103,105,118,105,110,103,101,114,114,111,114,115,68,111,109,
-97,105,110,125,101,108,115,101,123,105,110,115,101,114,116,66,108,111,103,60,47,
-102,111,111,116,101,114,108,111,103,105,110,46,102,97,115,116,101,114,97,103,101
-,110,116,115,60,98,111,100,121,32,49,48,112,120,32,48,112,114,97,103,109,97,102,
-114,105,100,97,121,106,117,110,105,111,114,100,111,108,108,97,114,112,108,97,99,
-101,100,99,111,118,101,114,115,112,108,117,103,105,110,53,44,48,48,48,32,112,97,
-103,101,34,62,98,111,115,116,111,110,46,116,101,115,116,40,97,118,97,116,97,114,
-116,101,115,116,101,100,95,99,111,117,110,116,102,111,114,117,109,115,115,99,104
-,101,109,97,105,110,100,101,120,44,102,105,108,108,101,100,115,104,97,114,101,
-115,114,101,97,100,101,114,97,108,101,114,116,40,97,112,112,101,97,114,83,117,98
-,109,105,116,108,105,110,101,34,62,98,111,100,121,34,62,10,42,32,84,104,101,84,
-104,111,117,103,104,115,101,101,105,110,103,106,101,114,115,101,121,78,101,119,
-115,60,47,118,101,114,105,102,121,101,120,112,101,114,116,105,110,106,117,114,
-121,119,105,100,116,104,61,67,111,111,107,105,101,83,84,65,82,84,32,97,99,114,
-111,115,115,95,105,109,97,103,101,116,104,114,101,97,100,110,97,116,105,118,101,
-112,111,99,107,101,116,98,111,120,34,62,10,83,121,115,116,101,109,32,68,97,118,
-105,100,99,97,110,99,101,114,116,97,98,108,101,115,112,114,111,118,101,100,65,
-112,114,105,108,32,114,101,97,108,108,121,100,114,105,118,101,114,105,116,101,
-109,34,62,109,111,114,101,34,62,98,111,97,114,100,115,99,111,108,111,114,115,99,
-97,109,112,117,115,102,105,114,115,116,32,124,124,32,91,93,59,109,101,100,105,97
-,46,103,117,105,116,97,114,102,105,110,105,115,104,119,105,100,116,104,58,115,
-104,111,119,101,100,79,116,104,101,114,32,46,112,104,112,34,32,97,115,115,117,
-109,101,108,97,121,101,114,115,119,105,108,115,111,110,115,116,111,114,101,115,
-114,101,108,105,101,102,115,119,101,100,101,110,67,117,115,116,111,109,101,97,
-115,105,108,121,32,121,111,117,114,32,83,116,114,105,110,103,10,10,87,104,105,
-108,116,97,121,108,111,114,99,108,101,97,114,58,114,101,115,111,114,116,102,114,
-101,110,99,104,116,104,111,117,103,104,34,41,32,43,32,34,60,98,111,100,121,62,98
-,117,121,105,110,103,98,114,97,110,100,115,77,101,109,98,101,114,110,97,109,101,
-34,62,111,112,112,105,110,103,115,101,99,116,111,114,53,112,120,59,34,62,118,115
-,112,97,99,101,112,111,115,116,101,114,109,97,106,111,114,32,99,111,102,102,101,
-101,109,97,114,116,105,110,109,97,116,117,114,101,104,97,112,112,101,110,60,47,
-110,97,118,62,107,97,110,115,97,115,108,105,110,107,34,62,73,109,97,103,101,115,
-61,102,97,108,115,101,119,104,105,108,101,32,104,115,112,97,99,101,48,38,97,109,
-112,59,32,10,10,73,110,32,32,112,111,119,101,114,80,111,108,115,107,105,45,99,
-111,108,111,114,106,111,114,100,97,110,66,111,116,116,111,109,83,116,97,114,116,
-32,45,99,111,117,110,116,50,46,104,116,109,108,110,101,119,115,34,62,48,49,46,
-106,112,103,79,110,108,105,110,101,45,114,105,103,104,116,109,105,108,108,101,
-114,115,101,110,105,111,114,73,83,66,78,32,48,48,44,48,48,48,32,103,117,105,100,
-101,115,118,97,108,117,101,41,101,99,116,105,111,110,114,101,112,97,105,114,46,
-120,109,108,34,32,32,114,105,103,104,116,115,46,104,116,109,108,45,98,108,111,99
-,107,114,101,103,69,120,112,58,104,111,118,101,114,119,105,116,104,105,110,118,
-105,114,103,105,110,112,104,111,110,101,115,60,47,116,114,62,13,117,115,105,110,
-103,32,10,9,118,97,114,32,62,39,41,59,10,9,60,47,116,100,62,10,60,47,116,114,62,
-10,98,97,104,97,115,97,98,114,97,115,105,108,103,97,108,101,103,111,109,97,103,
-121,97,114,112,111,108,115,107,105,115,114,112,115,107,105,216,177,216,175,217,
-136,228,184,173,230,150,135,231,174,128,228,189,147,231,185,129,233,171,148,228,
-191,161,230,129,175,228,184,173,229,155,189,230,136,145,228,187,172,228,184,128,
-228,184,170,229,133,172,229,143,184,231,174,161,231,144,134,232,174,186,229,157,
-155,229,143,175,228,187,165,230,156,141,229,138,161,230,151,182,233,151,180,228,
-184,170,228,186,186,228,186,167,229,147,129,232,135,170,229,183,177,228,188,129,
-228,184,154,230,159,165,231,156,139,229,183,165,228,189,156,232,129,148,231,179,
-187,230,178,161,230,156,137,231,189,145,231,171,153,230,137,128,230,156,137,232,
-175,132,232,174,186,228,184,173,229,191,131,230,150,135,231,171,160,231,148,168,
-230,136,183,233,166,150,233,161,181,228,189,156,232,128,133,230,138,128,230,156,
-175,233,151,174,233,162,152,231,155,184,229,133,179,228,184,139,232,189,189,230,
-144,156,231,180,162,228,189,191,231,148,168,232,189,175,228,187,182,229,156,168,
-231,186,191,228,184,187,233,162,152,232,181,132,230,150,153,232,167,134,233,162,
-145,229,155,158,229,164,141,230,179,168,229,134,140,231,189,145,231,187,156,230,
-148,182,232,151,143,229,134,133,229,174,185,230,142,168,232,141,144,229,184,130,
-229,156,186,230,182,136,230,129,175,231,169,186,233,151,180,229,143,145,229,184,
-131,228,187,128,228,185,136,229,165,189,229,143,139,231,148,159,230,180,187,229,
-155,190,231,137,135,229,143,145,229,177,149,229,166,130,230,158,156,230,137,139,
-230,156,186,230,150,176,233,151,187,230,156,128,230,150,176,230,150,185,229,188,
-143,229,140,151,228,186,172,230,143,144,228,190,155,229,133,179,228,186,142,230,
-155,180,229,164,154,232,191,153,228,184,170,231,179,187,231,187,159,231,159,165,
-233,129,147,230,184,184,230,136,143,229,185,191,229,145,138,229,133,182,228,187,
-150,229,143,145,232,161,168,229,174,137,229,133,168,231,172,172,228,184,128,228,
-188,154,229,145,152,232,191,155,232,161,140,231,130,185,229,135,187,231,137,136,
-230,157,131,231,148,181,229,173,144,228,184,150,231,149,140,232,174,190,232,174,
-161,229,133,141,232,180,185,230,149,153,232,130,178,229,138,160,229,133,165,230,
-180,187,229,138,168,228,187,150,228,187,172,229,149,134,229,147,129,229,141,154,
-229,174,162,231,142,176,229,156,168,228,184,138,230,181,183,229,166,130,228,189,
-149,229,183,178,231,187,143,231,149,153,232,168,128,232,175,166,231,187,134,231,
-164,190,229,140,186,231,153,187,229,189,149,230,156,172,231,171,153,233,156,128,
-232,166,129,228,187,183,230,160,188,230,148,175,230,140,129,229,155,189,233,153,
-133,233,147,190,230,142,165,229,155,189,229,174,182,229,187,186,232,174,190,230,
-156,139,229,143,139,233,152,133,232,175,187,230,179,149,229,190,139,228,189,141,
-231,189,174,231,187,143,230,181,142,233,128,137,230,139,169,232,191,153,230,160,
-183,229,189,147,229,137,141,229,136,134,231,177,187,230,142,146,232,161,140,229,
-155,160,228,184,186,228,186,164,230,152,147,230,156,128,229,144,142,233,159,179,
-228,185,144,228,184,141,232,131,189,233,128,154,232,191,135,232,161,140,228,184,
-154,231,167,145,230,138,128,229,143,175,232,131,189,232,174,190,229,164,135,229,
-144,136,228,189,156,229,164,167,229,174,182,231,164,190,228,188,154,231,160,148,
-231,169,182,228,184,147,228,184,154,229,133,168,233,131,168,233,161,185,231,155,
-174,232,191,153,233,135,140,232,191,152,230,152,175,229,188,128,229,167,139,230,
-131,133,229,134,181,231,148,181,232,132,145,230,150,135,228,187,182,229,147,129,
-231,137,140,229,184,174,229,138,169,230,150,135,229,140,150,232,181,132,230,186,
-144,229,164,167,229,173,166,229,173,166,228,185,160,229,156,176,229,157,128,230,
-181,143,232,167,136,230,138,149,232,181,132,229,183,165,231,168,139,232,166,129,
-230,177,130,230,128,142,228,185,136,230,151,182,229,128,153,229,138,159,232,131,
-189,228,184,187,232,166,129,231,155,174,229,137,141,232,181,132,232,174,175,229,
-159,142,229,184,130,230,150,185,230,179,149,231,148,181,229,189,177,230,139,155,
-232,129,152,229,163,176,230,152,142,228,187,187,228,189,149,229,129,165,229,186,
-183,230,149,176,230,141,174,231,190,142,229,155,189,230,177,189,232,189,166,228,
-187,139,231,187,141,228,189,134,230,152,175,228,186,164,230,181,129,231,148,159,
-228,186,167,230,137,128,228,187,165,231,148,181,232,175,157,230,152,190,231,164,
-186,228,184,128,228,186,155,229,141,149,228,189,141,228,186,186,229,145,152,229,
-136,134,230,158,144,229,156,176,229,155,190,230,151,133,230,184,184,229,183,165,
-229,133,183,229,173,166,231,148,159,231,179,187,229,136,151,231,189,145,229,143,
-139,229,184,150,229,173,144,229,175,134,231,160,129,233,162,145,233,129,147,230,
-142,167,229,136,182,229,156,176,229,140,186,229,159,186,230,156,172,229,133,168,
-229,155,189,231,189,145,228,184,138,233,135,141,232,166,129,231,172,172,228,186,
-140,229,150,156,230,172,162,232,191,155,229,133,165,229,143,139,230,131,133,232,
-191,153,228,186,155,232,128,131,232,175,149,229,143,145,231,142,176,229,159,185,
-232,174,173,228,187,165,228,184,138,230,148,191,229,186,156,230,136,144,228,184,
-186,231,142,175,229,162,131,233,166,153,230,184,175,229,144,140,230,151,182,229,
-168,177,228,185,144,229,143,145,233,128,129,228,184,128,229,174,154,229,188,128,
-229,143,145,228,189,156,229,147,129,230,160,135,229,135,134,230,172,162,232,191,
-142,232,167,163,229,134,179,229,156,176,230,150,185,228,184,128,228,184,139,228,
-187,165,229,143,138,232,180,163,228,187,187,230,136,150,232,128,133,229,174,162,
-230,136,183,228,187,163,232,161,168,231,167,175,229,136,134,229,165,179,228,186,
-186,230,149,176,231,160,129,233,148,128,229,148,174,229,135,186,231,142,176,231,
-166,187,231,186,191,229,186,148,231,148,168,229,136,151,232,161,168,228,184,141,
-229,144,140,231,188,150,232,190,145,231,187,159,232,174,161,230,159,165,232,175,
-162,228,184,141,232,166,129,230,156,137,229,133,179,230,156,186,230,158,132,229,
-190,136,229,164,154,230,146,173,230,148,190,231,187,132,231,187,135,230,148,191,
-231,173,150,231,155,180,230,142,165,232,131,189,229,138,155,230,157,165,230,186,
-144,230,153,130,233,150,147,231,156,139,229,136,176,231,131,173,233,151,168,229,
-133,179,233,148,174,228,184,147,229,140,186,233,157,158,229,184,184,232,139,177,
-232,175,173,231,153,190,229,186,166,229,184,140,230,156,155,231,190,142,229,165,
-179,230,175,148,232,190,131,231,159,165,232,175,134,232,167,132,229,174,154,229,
-187,186,232,174,174,233,131,168,233,151,168,230,132,143,232,167,129,231,178,190,
-229,189,169,230,151,165,230,156,172,230,143,144,233,171,152,229,143,145,232,168,
-128,230,150,185,233,157,162,229,159,186,233,135,145,229,164,132,231,144,134,230,
-157,131,233,153,144,229,189,177,231,137,135,233,147,182,232,161,140,232,191,152,
-230,156,137,229,136,134,228,186,171,231,137,169,229,147,129,231,187,143,232,144,
-165,230,183,187,229,138,160,228,184,147,229,174,182,232,191,153,231,167,141,232,
-175,157,233,162,152,232,181,183,230,157,165,228,184,154,229,138,161,229,133,172,
-229,145,138,232,174,176,229,189,149,231,174,128,228,187,139,232,180,168,233,135,
-143,231,148,183,228,186,186,229,189,177,229,147,141,229,188,149,231,148,168,230,
-138,165,229,145,138,233,131,168,229,136,134,229,191,171,233,128,159,229,146,168,
-232,175,162,230,151,182,229,176,154,230,179,168,230,132,143,231,148,179,232,175,
-183,229,173,166,230,160,161,229,186,148,232,175,165,229,142,134,229,143,178,229,
-143,170,230,152,175,232,191,148,229,155,158,232,180,173,228,185,176,229,144,141,
-231,167,176,228,184,186,228,186,134,230,136,144,229,138,159,232,175,180,230,152,
-142,228,190,155,229,186,148,229,173,169,229,173,144,228,184,147,233,162,152,231,
-168,139,229,186,143,228,184,128,232,136,172,230,156,131,229,147,161,229,143,170,
-230,156,137,229,133,182,229,174,131,228,191,157,230,138,164,232,128,140,228,184,
-148,228,187,138,229,164,169,231,170,151,229,143,163,229,138,168,230,128,129,231,
-138,182,230,128,129,231,137,185,229,136,171,232,174,164,228,184,186,229,191,133,
-233,161,187,230,155,180,230,150,176,229,176,143,232,175,180,230,136,145,229,128,
-145,228,189,156,228,184,186,229,170,146,228,189,147,229,140,133,230,139,172,233,
-130,163,228,185,136,228,184,128,230,160,183,229,155,189,229,134,133,230,152,175,
-229,144,166,230,160,185,230,141,174,231,148,181,232,167,134,229,173,166,233,153,
-162,229,133,183,230,156,137,232,191,135,231,168,139,231,148,177,228,186,142,228,
-186,186,230,137,141,229,135,186,230,157,165,228,184,141,232,191,135,230,173,163,
-229,156,168,230,152,142,230,152,159,230,149,133,228,186,139,229,133,179,231,179,
-187,230,160,135,233,162,152,229,149,134,229,138,161,232,190,147,229,133,165,228,
-184,128,231,155,180,229,159,186,231,161,128,230,149,153,229,173,166,228,186,134,
-232,167,163,229,187,186,231,173,145,231,187,147,230,158,156,229,133,168,231,144,
-131,233,128,154,231,159,165,232,174,161,229,136,146,229,175,185,228,186,142,232,
-137,186,230,156,175,231,155,184,229,134,140,229,143,145,231,148,159,231,156,159,
-231,154,132,229,187,186,231,171,139,231,173,137,231,186,167,231,177,187,229,158,
-139,231,187,143,233,170,140,229,174,158,231,142,176,229,136,182,228,189,156,230,
-157,165,232,135,170,230,160,135,231,173,190,228,187,165,228,184,139,229,142,159,
-229,136,155,230,151,160,230,179,149,229,133,182,228,184,173,229,128,139,228,186,
-186,228,184,128,229,136,135,230,140,135,229,141,151,229,133,179,233,151,173,233,
-155,134,229,155,162,231,172,172,228,184,137,229,133,179,230,179,168,229,155,160,
-230,173,164,231,133,167,231,137,135,230,183,177,229,156,179,229,149,134,228,184,
-154,229,185,191,229,183,158,230,151,165,230,156,159,233,171,152,231,186,167,230,
-156,128,232,191,145,231,187,188,229,144,136,232,161,168,231,164,186,228,184,147,
-232,190,145,232,161,140,228,184,186,228,186,164,233,128,154,232,175,132,228,187,
-183,232,167,137,229,190,151,231,178,190,229,141,142,229,174,182,229,186,173,229,
-174,140,230,136,144,230,132,159,232,167,137,229,174,137,232,163,133,229,190,151,
-229,136,176,233,130,174,228,187,182,229,136,182,229,186,166,233,163,159,229,147,
-129,232,153,189,231,132,182,232,189,172,232,189,189,230,138,165,228,187,183,232,
-174,176,232,128,133,230,150,185,230,161,136,232,161,140,230,148,191,228,186,186,
-230,176,145,231,148,168,229,147,129,228,184,156,232,165,191,230,143,144,229,135,
-186,233,133,146,229,186,151,231,132,182,229,144,142,228,187,152,230,172,190,231,
-131,173,231,130,185,228,187,165,229,137,141,229,174,140,229,133,168,229,143,145,
-229,184,150,232,174,190,231,189,174,233,162,134,229,175,188,229,183,165,228,184,
-154,229,140,187,233,153,162,231,156,139,231,156,139,231,187,143,229,133,184,229,
-142,159,229,155,160,229,185,179,229,143,176,229,144,132,231,167,141,229,162,158,
-229,138,160,230,157,144,230,150,153,230,150,176,229,162,158,228,185,139,229,144,
-142,232,129,140,228,184,154,230,149,136,230,158,156,228,187,138,229,185,180,232,
-174,186,230,150,135,230,136,145,229,155,189,229,145,138,232,175,137,231,137,136,
-228,184,187,228,191,174,230,148,185,229,143,130,228,184,142,230,137,147,229,141,
-176,229,191,171,228,185,144,230,156,186,230,162,176,232,167,130,231,130,185,229,
-173,152,229,156,168,231,178,190,231,165,158,232,142,183,229,190,151,229,136,169,
-231,148,168,231,187,167,231,187,173,228,189,160,228,187,172,232,191,153,228,185,
-136,230,168,161,229,188,143,232,175,173,232,168,128,232,131,189,229,164,159,233,
-155,133,232,153,142,230,147,141,228,189,156,233,163,142,230,160,188,228,184,128,
-232,181,183,231,167,145,229,173,166,228,189,147,232,130,178,231,159,173,228,191,
-161,230,157,161,228,187,182,230,178,187,231,150,151,232,191,144,229,138,168,228,
-186,167,228,184,154,228,188,154,232,174,174,229,175,188,232,136,170,229,133,136,
-231,148,159,232,129,148,231,155,159,229,143,175,230,152,175,229,149,143,233,161,
-140,231,187,147,230,158,132,228,189,156,231,148,168,232,176,131,230,159,165,232,
-179,135,230,150,153,232,135,170,229,138,168,232,180,159,232,180,163,229,134,156,
-228,184,154,232,174,191,233,151,174,229,174,158,230,150,189,230,142,165,229,143,
-151,232,174,168,232,174,186,233,130,163,228,184,170,229,143,141,233,166,136,229,
-138,160,229,188,186,229,165,179,230,128,167,232,140,131,229,155,180,230,156,141,
-229,139,153,228,188,145,233,151,178,228,187,138,230,151,165,229,174,162,230,156,
-141,232,167,128,231,156,139,229,143,130,229,138,160,231,154,132,232,175,157,228,
-184,128,231,130,185,228,191,157,232,175,129,229,155,190,228,185,166,230,156,137,
-230,149,136,230,181,139,232,175,149,231,167,187,229,138,168,230,137,141,232,131,
-189,229,134,179,229,174,154,232,130,161,231,165,168,228,184,141,230,150,173,233,
-156,128,230,177,130,228,184,141,229,190,151,229,138,158,230,179,149,228,185,139,
-233,151,180,233,135,135,231,148,168,232,144,165,233,148,128,230,138,149,232,175,
-137,231,155,174,230,160,135,231,136,177,230,131,133,230,145,132,229,189,177,230,
-156,137,228,186,155,232,164,135,232,163,189,230,150,135,229,173,166,230,156,186,
-228,188,154,230,149,176,229,173,151,232,163,133,228,191,174,232,180,173,231,137,
-169,229,134,156,230,157,145,229,133,168,233,157,162,231,178,190,229,147,129,229,
-133,182,229,174,158,228,186,139,230,131,133,230,176,180,229,185,179,230,143,144,
-231,164,186,228,184,138,229,184,130,232,176,162,232,176,162,230,153,174,233,128,
-154,230,149,153,229,184,136,228,184,138,228,188,160,231,177,187,229,136,171,230,
-173,140,230,155,178,230,139,165,230,156,137,229,136,155,230,150,176,233,133,141,
-228,187,182,229,143,170,232,166,129,230,151,182,228,187,163,232,179,135,232,168,
-138,232,190,190,229,136,176,228,186,186,231,148,159,232,174,162,233,152,133,232,
-128,129,229,184,136,229,177,149,231,164,186,229,191,131,231,144,134,232,180,180,
-229,173,144,231,182,178,231,171,153,228,184,187,233,161,140,232,135,170,231,132,
-182,231,186,167,229,136,171,231,174,128,229,141,149,230,148,185,233,157,169,233,
-130,163,228,186,155,230,157,165,232,175,180,230,137,147,229,188,128,228,187,163,
-231,160,129,229,136,160,233,153,164,232,175,129,229,136,184,232,138,130,231,155,
-174,233,135,141,231,130,185,230,172,161,230,149,184,229,164,154,229,176,145,232,
-167,132,229,136,146,232,181,132,233,135,145,230,137,190,229,136,176,228,187,165,
-229,144,142,229,164,167,229,133,168,228,184,187,233,161,181,230,156,128,228,189,
-179,229,155,158,231,173,148,229,164,169,228,184,139,228,191,157,233,154,156,231,
-142,176,228,187,163,230,163,128,230,159,165,230,138,149,231,165,168,229,176,143,
-230,151,182,230,178,146,230,156,137,230,173,163,229,184,184,231,148,154,232,135,
-179,228,187,163,231,144,134,231,155,174,229,189,149,229,133,172,229,188,128,229,
-164,141,229,136,182,233,135,145,232,158,141,229,185,184,231,166,143,231,137,136,
-230,156,172,229,189,162,230,136,144,229,135,134,229,164,135,232,161,140,230,131,
-133,229,155,158,229,136,176,230,128,157,230,131,179,230,128,142,230,160,183,229,
-141,143,232,174,174,232,174,164,232,175,129,230,156,128,229,165,189,228,186,167,
-231,148,159,230,140,137,231,133,167,230,156,141,232,163,133,229,185,191,228,184,
-156,229,138,168,230,188,171,233,135,135,232,180,173,230,150,176,230,137,139,231,
-187,132,229,155,190,233,157,162,230,157,191,229,143,130,232,128,131,230,148,191,
-230,178,187,229,174,185,230,152,147,229,164,169,229,156,176,229,138,170,229,138,
-155,228,186,186,228,187,172,229,141,135,231,186,167,233,128,159,229,186,166,228,
-186,186,231,137,169,232,176,131,230,149,180,230,181,129,232,161,140,233,128,160,
-230,136,144,230,150,135,229,173,151,233,159,169,229,155,189,232,180,184,230,152,
-147,229,188,128,229,177,149,231,155,184,233,151,156,232,161,168,231,142,176,229,
-189,177,232,167,134,229,166,130,230,173,164,231,190,142,229,174,185,229,164,167,
-229,176,143,230,138,165,233,129,147,230,157,161,230,172,190,229,191,131,230,131,
-133,232,174,184,229,164,154,230,179,149,232,167,132,229,174,182,229,177,133,228,
-185,166,229,186,151,232,191,158,230,142,165,231,171,139,229,141,179,228,184,190,
-230,138,165,230,138,128,229,183,167,229,165,165,232,191,144,231,153,187,229,133,
-165,228,187,165,230,157,165,231,144,134,232,174,186,228,186,139,228,187,182,232,
-135,170,231,148,177,228,184,173,229,141,142,229,138,158,229,133,172,229,166,136,
-229,166,136,231,156,159,230,173,163,228,184,141,233,148,153,229,133,168,230,150,
-135,229,144,136,229,144,140,228,187,183,229,128,188,229,136,171,228,186,186,231,
-155,145,231,157,163,229,133,183,228,189,147,228,184,150,231,186,170,229,155,162,
-233,152,159,229,136,155,228,184,154,230,137,191,230,139,133,229,162,158,233,149,
-191,230,156,137,228,186,186,228,191,157,230,140,129,229,149,134,229,174,182,231,
-187,180,228,191,174,229,143,176,230,185,190,229,183,166,229,143,179,232,130,161,
-228,187,189,231,173,148,230,161,136,229,174,158,233,153,133,231,148,181,228,191,
-161,231,187,143,231,144,134,231,148,159,229,145,189,229,174,163,228,188,160,228,
-187,187,229,138,161,230,173,163,229,188,143,231,137,185,232,137,178,228,184,139,
-230,157,165,229,141,143,228,188,154,229,143,170,232,131,189,229,189,147,231,132,
-182,233,135,141,230,150,176,229,133,167,229,174,185,230,140,135,229,175,188,232,
-191,144,232,161,140,230,151,165,229,191,151,232,179,163,229,174,182,232,182,133,
-232,191,135,229,156,159,229,156,176,230,181,153,230,177,159,230,148,175,228,187,
-152,230,142,168,229,135,186,231,171,153,233,149,191,230,157,173,229,183,158,230,
-137,167,232,161,140,229,136,182,233,128,160,228,185,139,228,184,128,230,142,168,
-229,185,191,231,142,176,229,156,186,230,143,143,232,191,176,229,143,152,229,140,
-150,228,188,160,231,187,159,230,173,140,230,137,139,228,191,157,233,153,169,232,
-175,190,231,168,139,229,140,187,231,150,151,231,187,143,232,191,135,232,191,135,
-229,142,187,228,185,139,229,137,141,230,148,182,229,133,165,229,185,180,229,186,
-166,230,157,130,229,191,151,231,190,142,228,184,189,230,156,128,233,171,152,231,
-153,187,233,153,134,230,156,170,230,157,165,229,138,160,229,183,165,229,133,141,
-232,180,163,230,149,153,231,168,139,231,137,136,229,157,151,232,186,171,228,189,
-147,233,135,141,229,186,134,229,135,186,229,148,174,230,136,144,230,156,172,229,
-189,162,229,188,143,229,156,159,232,177,134,229,135,186,229,131,185,228,184,156,
-230,150,185,233,130,174,231,174,177,229,141,151,228,186,172,230,177,130,232,129,
-140,229,143,150,229,190,151,232,129,140,228,189,141,231,155,184,228,191,161,233,
-161,181,233,157,162,229,136,134,233,146,159,231,189,145,233,161,181,231,161,174,
-229,174,154,229,155,190,228,190,139,231,189,145,229,157,128,231,167,175,230,158,
-129,233,148,153,232,175,175,231,155,174,231,154,132,229,174,157,232,180,157,230,
-156,186,229,133,179,233,163,142,233,153,169,230,142,136,230,157,131,231,151,133,
-230,175,146,229,174,160,231,137,169,233,153,164,228,186,134,232,169,149,232,171,
-150,231,150,190,231,151,133,229,143,138,230,151,182,230,177,130,232,180,173,231,
-171,153,231,130,185,229,132,191,231,171,165,230,175,143,229,164,169,228,184,173,
-229,164,174,232,174,164,232,175,134,230,175,143,228,184,170,229,164,169,230,180,
-165,229,173,151,228,189,147,229,143,176,231,129,163,231,187,180,230,138,164,230,
-156,172,233,161,181,228,184,170,230,128,167,229,174,152,230,150,185,229,184,184,
-232,167,129,231,155,184,230,156,186,230,136,152,231,149,165,229,186,148,229,189,
-147,229,190,139,229,184,136,230,150,185,228,190,191,230,160,161,229,155,173,232,
-130,161,229,184,130,230,136,191,229,177,139,230,160,143,231,155,174,229,145,152,
-229,183,165,229,175,188,232,135,180,231,170,129,231,132,182,233,129,147,229,133,
-183,230,156,172,231,189,145,231,187,147,229,144,136,230,161,163,230,161,136,229,
-138,179,229,138,168,229,143,166,229,164,150,231,190,142,229,133,131,229,188,149,
-232,181,183,230,148,185,229,143,152,231,172,172,229,155,155,228,188,154,232,174,
-161,232,170,170,230,152,142,233,154,144,231,167,129,229,174,157,229,174,157,232,
-167,132,232,140,131,230,182,136,232,180,185,229,133,177,229,144,140,229,191,152,
-232,174,176,228,189,147,231,179,187,229,184,166,230,157,165,229,144,141,229,173,
-151,231,153,188,232,161,168,229,188,128,230,148,190,229,138,160,231,155,159,229,
-143,151,229,136,176,228,186,140,230,137,139,229,164,167,233,135,143,230,136,144,
-228,186,186,230,149,176,233,135,143,229,133,177,228,186,171,229,140,186,229,159,
-159,229,165,179,229,173,169,229,142,159,229,136,153,230,137,128,229,156,168,231,
-187,147,230,157,159,233,128,154,228,191,161,232,182,133,231,186,167,233,133,141,
-231,189,174,229,189,147,230,151,182,228,188,152,231,167,128,230,128,167,230,132,
-159,230,136,191,228,186,167,233,129,138,230,136,178,229,135,186,229,143,163,230,
-143,144,228,186,164,229,176,177,228,184,154,228,191,157,229,129,165,231,168,139,
-229,186,166,229,143,130,230,149,176,228,186,139,228,184,154,230,149,180,228,184,
-170,229,177,177,228,184,156,230,131,133,230,132,159,231,137,185,230,174,138,229,
-136,134,233,161,158,230,144,156,229,176,139,229,177,158,228,186,142,233,151,168,
-230,136,183,232,180,162,229,138,161,229,163,176,233,159,179,229,143,138,229,133,
-182,232,180,162,231,187,143,229,157,154,230,140,129,229,185,178,233,131,168,230,
-136,144,231,171,139,229,136,169,231,155,138,232,128,131,232,153,145,230,136,144,
-233,131,189,229,140,133,232,163,133,231,148,168,230,136,182,230,175,148,232,181,
-155,230,150,135,230,152,142,230,139,155,229,149,134,229,174,140,230,149,180,231,
-156,159,230,152,175,231,156,188,231,157,155,228,188,153,228,188,180,229,168,129,
-230,156,155,233,162,134,229,159,159,229,141,171,231,148,159,228,188,152,230,131,
-160,232,171,150,229,163,135,229,133,172,229,133,177,232,137,175,229,165,189,229,
-133,133,229,136,134,231,172,166,229,144,136,233,153,132,228,187,182,231,137,185,
-231,130,185,228,184,141,229,143,175,232,139,177,230,150,135,232,181,132,228,186,
-167,230,160,185,230,156,172,230,152,142,230,152,190,229,175,134,231,162,188,229,
-133,172,228,188,151,230,176,145,230,151,143,230,155,180,229,138,160,228,186,171,
-229,143,151,229,144,140,229,173,166,229,144,175,229,138,168,233,128,130,229,144,
-136,229,142,159,230,157,165,233,151,174,231,173,148,230,156,172,230,150,135,231,
-190,142,233,163,159,231,187,191,232,137,178,231,168,179,229,174,154,231,187,136,
-228,186,142,231,148,159,231,137,169,228,190,155,230,177,130,230,144,156,231,139,
-144,229,138,155,233,135,143,228,184,165,233,135,141,230,176,184,232,191,156,229,
-134,153,231,156,159,230,156,137,233,153,144,231,171,158,228,186,137,229,175,185,
-232,177,161,232,180,185,231,148,168,228,184,141,229,165,189,231,187,157,229,175,
-185,229,141,129,229,136,134,228,191,131,232,191,155,231,130,185,232,175,132,229,
-189,177,233,159,179,228,188,152,229,138,191,228,184,141,229,176,145,230,172,163,
-232,181,143,229,185,182,228,184,148,230,156,137,231,130,185,230,150,185,229,144,
-145,229,133,168,230,150,176,228,191,161,231,148,168,232,174,190,230,150,189,229,
-189,162,232,177,161,232,181,132,230,160,188,231,170,129,231,160,180,233,154,143,
-231,157,128,233,135,141,229,164,167,228,186,142,230,152,175,230,175,149,228,184,
-154,230,153,186,232,131,189,229,140,150,229,183,165,229,174,140,231,190,142,229,
-149,134,229,159,142,231,187,159,228,184,128,229,135,186,231,137,136,230,137,147,
-233,128,160,231,148,162,229,147,129,230,166,130,229,134,181,231,148,168,228,186,
-142,228,191,157,231,149,153,229,155,160,231,180,160,228,184,173,229,156,139,229,
-173,152,229,130,168,232,180,180,229,155,190,230,156,128,230,132,155,233,149,191,
-230,156,159,229,143,163,228,187,183,231,144,134,232,180,162,229,159,186,229,156,
-176,229,174,137,230,142,146,230,173,166,230,177,137,233,135,140,233,157,162,229,
-136,155,229,187,186,229,164,169,231,169,186,233,166,150,229,133,136,229,174,140,
-229,150,132,233,169,177,229,138,168,228,184,139,233,157,162,228,184,141,229,134,
-141,232,175,154,228,191,161,230,132,143,228,185,137,233,152,179,229,133,137,232,
-139,177,229,155,189,230,188,130,228,186,174,229,134,155,228,186,139,231,142,169,
-229,174,182,231,190,164,228,188,151,229,134,156,230,176,145,229,141,179,229,143,
-175,229,144,141,231,168,177,229,174,182,229,133,183,229,138,168,231,148,187,230,
-131,179,229,136,176,230,179,168,230,152,142,229,176,143,229,173,166,230,128,167,
-232,131,189,232,128,131,231,160,148,231,161,172,228,187,182,232,167,130,231,156,
-139,230,184,133,230,165,154,230,144,158,231,172,145,233,166,150,233,160,129,233,
-187,132,233,135,145,233,128,130,231,148,168,230,177,159,232,139,143,231,156,159,
-229,174,158,228,184,187,231,174,161,233,152,182,230,174,181,232,168,187,229,134,
-138,231,191,187,232,175,145,230,157,131,229,136,169,229,129,154,229,165,189,228,
-188,188,228,185,142,233,128,154,232,174,175,230,150,189,229,183,165,231,139,128,
-230,133,139,228,185,159,232,174,184,231,142,175,228,191,157,229,159,185,229,133,
-187,230,166,130,229,191,181,229,164,167,229,158,139,230,156,186,231,165,168,231,
-144,134,232,167,163,229,140,191,229,144,141,99,117,97,110,100,111,101,110,118,
-105,97,114,109,97,100,114,105,100,98,117,115,99,97,114,105,110,105,99,105,111,
-116,105,101,109,112,111,112,111,114,113,117,101,99,117,101,110,116,97,101,115,
-116,97,100,111,112,117,101,100,101,110,106,117,101,103,111,115,99,111,110,116,
-114,97,101,115,116,195,161,110,110,111,109,98,114,101,116,105,101,110,101,110,
-112,101,114,102,105,108,109,97,110,101,114,97,97,109,105,103,111,115,99,105,117,
-100,97,100,99,101,110,116,114,111,97,117,110,113,117,101,112,117,101,100,101,115
-,100,101,110,116,114,111,112,114,105,109,101,114,112,114,101,99,105,111,115,101,
-103,195,186,110,98,117,101,110,111,115,118,111,108,118,101,114,112,117,110,116,
-111,115,115,101,109,97,110,97,104,97,98,195,173,97,97,103,111,115,116,111,110,
-117,101,118,111,115,117,110,105,100,111,115,99,97,114,108,111,115,101,113,117,
-105,112,111,110,105,195,177,111,115,109,117,99,104,111,115,97,108,103,117,110,97
-,99,111,114,114,101,111,105,109,97,103,101,110,112,97,114,116,105,114,97,114,114
-,105,98,97,109,97,114,195,173,97,104,111,109,98,114,101,101,109,112,108,101,111,
-118,101,114,100,97,100,99,97,109,98,105,111,109,117,99,104,97,115,102,117,101,
-114,111,110,112,97,115,97,100,111,108,195,173,110,101,97,112,97,114,101,99,101,
-110,117,101,118,97,115,99,117,114,115,111,115,101,115,116,97,98,97,113,117,105,
-101,114,111,108,105,98,114,111,115,99,117,97,110,116,111,97,99,99,101,115,111,
-109,105,103,117,101,108,118,97,114,105,111,115,99,117,97,116,114,111,116,105,101
-,110,101,115,103,114,117,112,111,115,115,101,114,195,161,110,101,117,114,111,112
-,97,109,101,100,105,111,115,102,114,101,110,116,101,97,99,101,114,99,97,100,101,
-109,195,161,115,111,102,101,114,116,97,99,111,99,104,101,115,109,111,100,101,108
-,111,105,116,97,108,105,97,108,101,116,114,97,115,97,108,103,195,186,110,99,111,
-109,112,114,97,99,117,97,108,101,115,101,120,105,115,116,101,99,117,101,114,112,
-111,115,105,101,110,100,111,112,114,101,110,115,97,108,108,101,103,97,114,118,
-105,97,106,101,115,100,105,110,101,114,111,109,117,114,99,105,97,112,111,100,114
-,195,161,112,117,101,115,116,111,100,105,97,114,105,111,112,117,101,98,108,111,
-113,117,105,101,114,101,109,97,110,117,101,108,112,114,111,112,105,111,99,114,
-105,115,105,115,99,105,101,114,116,111,115,101,103,117,114,111,109,117,101,114,
-116,101,102,117,101,110,116,101,99,101,114,114,97,114,103,114,97,110,100,101,101
-,102,101,99,116,111,112,97,114,116,101,115,109,101,100,105,100,97,112,114,111,
-112,105,97,111,102,114,101,99,101,116,105,101,114,114,97,101,45,109,97,105,108,
-118,97,114,105,97,115,102,111,114,109,97,115,102,117,116,117,114,111,111,98,106,
-101,116,111,115,101,103,117,105,114,114,105,101,115,103,111,110,111,114,109,97,
-115,109,105,115,109,111,115,195,186,110,105,99,111,99,97,109,105,110,111,115,105
-,116,105,111,115,114,97,122,195,179,110,100,101,98,105,100,111,112,114,117,101,
-98,97,116,111,108,101,100,111,116,101,110,195,173,97,106,101,115,195,186,115,101
-,115,112,101,114,111,99,111,99,105,110,97,111,114,105,103,101,110,116,105,101,
-110,100,97,99,105,101,110,116,111,99,195,161,100,105,122,104,97,98,108,97,114,
-115,101,114,195,173,97,108,97,116,105,110,97,102,117,101,114,122,97,101,115,116,
-105,108,111,103,117,101,114,114,97,101,110,116,114,97,114,195,169,120,105,116,
-111,108,195,179,112,101,122,97,103,101,110,100,97,118,195,173,100,101,111,101,
-118,105,116,97,114,112,97,103,105,110,97,109,101,116,114,111,115,106,97,118,105,
-101,114,112,97,100,114,101,115,102,195,161,99,105,108,99,97,98,101,122,97,195,
-161,114,101,97,115,115,97,108,105,100,97,101,110,118,195,173,111,106,97,112,195,
-179,110,97,98,117,115,111,115,98,105,101,110,101,115,116,101,120,116,111,115,108
-,108,101,118,97,114,112,117,101,100,97,110,102,117,101,114,116,101,99,111,109,
-195,186,110,99,108,97,115,101,115,104,117,109,97,110,111,116,101,110,105,100,111
-,98,105,108,98,97,111,117,110,105,100,97,100,101,115,116,195,161,115,101,100,105
-,116,97,114,99,114,101,97,100,111,208,180,208,187,209,143,209,135,209,130,208,
-190,208,186,208,176,208,186,208,184,208,187,208,184,209,141,209,130,208,190,208,
-178,209,129,208,181,208,181,208,179,208,190,208,191,209,128,208,184,209,130,208,
-176,208,186,208,181,209,137,208,181,209,131,208,182,208,181,208,154,208,176,208,
-186,208,177,208,181,208,183,208,177,209,139,208,187,208,190,208,189,208,184,208,
-146,209,129,208,181,208,191,208,190,208,180,208,173,209,130,208,190,209,130,208,
-190,208,188,209,135,208,181,208,188,208,189,208,181,209,130,208,187,208,181,209,
-130,209,128,208,176,208,183,208,190,208,189,208,176,208,179,208,180,208,181,208,
-188,208,189,208,181,208,148,208,187,209,143,208,159,209,128,208,184,208,189,208,
-176,209,129,208,189,208,184,209,133,209,130,208,181,208,188,208,186,209,130,208,
-190,208,179,208,190,208,180,208,178,208,190,209,130,209,130,208,176,208,188,208,
-161,208,168,208,144,208,188,208,176,209,143,208,167,209,130,208,190,208,178,208,
-176,209,129,208,178,208,176,208,188,208,181,208,188,209,131,208,162,208,176,208,
-186,208,180,208,178,208,176,208,189,208,176,208,188,209,141,209,130,208,184,209,
-141,209,130,209,131,208,146,208,176,208,188,209,130,208,181,209,133,208,191,209,
-128,208,190,209,130,209,131,209,130,208,189,208,176,208,180,208,180,208,189,209,
-143,208,146,208,190,209,130,209,130,209,128,208,184,208,189,208,181,208,185,208,
-146,208,176,209,129,208,189,208,184,208,188,209,129,208,176,208,188,209,130,208,
-190,209,130,209,128,209,131,208,177,208,158,208,189,208,184,208,188,208,184,209,
-128,208,189,208,181,208,181,208,158,208,158,208,158,208,187,208,184,209,134,209,
-141,209,130,208,176,208,158,208,189,208,176,208,189,208,181,208,188,208,180,208,
-190,208,188,208,188,208,190,208,185,208,180,208,178,208,181,208,190,208,189,208,
-190,209,129,209,131,208,180,224,164,149,224,165,135,224,164,185,224,165,136,224,
-164,149,224,165,128,224,164,184,224,165,135,224,164,149,224,164,190,224,164,149,
-224,165,139,224,164,148,224,164,176,224,164,170,224,164,176,224,164,168,224,165,
-135,224,164,143,224,164,149,224,164,149,224,164,191,224,164,173,224,165,128,224,
-164,135,224,164,184,224,164,149,224,164,176,224,164,164,224,165,139,224,164,185,
-224,165,139,224,164,134,224,164,170,224,164,185,224,165,128,224,164,175,224,164,
-185,224,164,175,224,164,190,224,164,164,224,164,149,224,164,165,224,164,190,106,
-97,103,114,97,110,224,164,134,224,164,156,224,164,156,224,165,139,224,164,133,
-224,164,172,224,164,166,224,165,139,224,164,151,224,164,136,224,164,156,224,164,
-190,224,164,151,224,164,143,224,164,185,224,164,174,224,164,135,224,164,168,224,
-164,181,224,164,185,224,164,175,224,165,135,224,164,165,224,165,135,224,164,165,
-224,165,128,224,164,152,224,164,176,224,164,156,224,164,172,224,164,166,224,165,
-128,224,164,149,224,164,136,224,164,156,224,165,128,224,164,181,224,165,135,224,
-164,168,224,164,136,224,164,168,224,164,143,224,164,185,224,164,176,224,164,137,
-224,164,184,224,164,174,224,165,135,224,164,149,224,164,174,224,164,181,224,165,
-139,224,164,178,224,165,135,224,164,184,224,164,172,224,164,174,224,164,136,224,
-164,166,224,165,135,224,164,147,224,164,176,224,164,134,224,164,174,224,164,172,
-224,164,184,224,164,173,224,164,176,224,164,172,224,164,168,224,164,154,224,164,
-178,224,164,174,224,164,168,224,164,134,224,164,151,224,164,184,224,165,128,224,
-164,178,224,165,128,216,185,217,132,217,137,216,165,217,132,217,137,217,135,216,
-176,216,167,216,162,216,174,216,177,216,185,216,175,216,175,216,167,217,132,217,
-137,217,135,216,176,217,135,216,181,217,136,216,177,216,186,217,138,216,177,217,
-131,216,167,217,134,217,136,217,132,216,167,216,168,217,138,217,134,216,185,216,
-177,216,182,216,176,217,132,217,131,217,135,217,134,216,167,217,138,217,136,217,
-133,217,130,216,167,217,132,216,185,217,132,217,138,216,167,217,134,216,167,217,
-132,217,131,217,134,216,173,216,170,217,137,217,130,216,168,217,132,217,136,216,
-173,216,169,216,167,216,174,216,177,217,129,217,130,216,183,216,185,216,168,216,
-175,216,177,217,131,217,134,216,165,216,176,216,167,217,131,217,133,216,167,216,
-167,216,173,216,175,216,165,217,132,216,167,217,129,217,138,217,135,216,168,216,
-185,216,182,217,131,217,138,217,129,216,168,216,173,216,171,217,136,217,133,217,
-134,217,136,217,135,217,136,216,163,217,134,216,167,216,172,216,175,216,167,217,
-132,217,135,216,167,216,179,217,132,217,133,216,185,217,134,216,175,217,132,217,
-138,216,179,216,185,216,168,216,177,216,181,217,132,217,137,217,133,217,134,216,
-176,216,168,217,135,216,167,216,163,217,134,217,135,217,133,216,171,217,132,217,
-131,217,134,216,170,216,167,217,132,216,167,216,173,217,138,216,171,217,133,216,
-181,216,177,216,180,216,177,216,173,216,173,217,136,217,132,217,136,217,129,217,
-138,216,167,216,176,216,167,217,132,217,131,217,132,217,133,216,177,216,169,216,
-167,217,134,216,170,216,167,217,132,217,129,216,163,216,168,217,136,216,174,216,
-167,216,181,216,163,217,134,216,170,216,167,217,134,217,135,216,167,217,132,217,
-138,216,185,216,182,217,136,217,136,217,130,216,175,216,167,216,168,217,134,216,
-174,217,138,216,177,216,168,217,134,216,170,217,132,217,131,217,133,216,180,216,
-167,216,161,217,136,217,135,217,138,216,167,216,168,217,136,217,130,216,181,216,
-181,217,136,217,133,216,167,216,177,217,130,217,133,216,163,216,173,216,175,217,
-134,216,173,217,134,216,185,216,175,217,133,216,177,216,163,217,138,216,167,216,
-173,216,169,217,131,216,170,216,168,216,175,217,136,217,134,217,138,216,172,216,
-168,217,133,217,134,217,135,216,170,216,173,216,170,216,172,217,135,216,169,216,
-179,217,134,216,169,217,138,216,170,217,133,217,131,216,177,216,169,216,186,216,
-178,216,169,217,134,217,129,216,179,216,168,217,138,216,170,217,132,217,132,217,
-135,217,132,217,134,216,167,216,170,217,132,217,131,217,130,217,132,216,168,217,
-132,217,133,216,167,216,185,217,134,217,135,216,163,217,136,217,132,216,180,217,
-138,216,161,217,134,217,136,216,177,216,163,217,133,216,167,217,129,217,138,217,
-131,216,168,217,131,217,132,216,176,216,167,216,170,216,177,216,170,216,168,216,
-168,216,163,217,134,217,135,217,133,216,179,216,167,217,134,217,131,216,168,217,
-138,216,185,217,129,217,130,216,175,216,173,216,179,217,134,217,132,217,135,217,
-133,216,180,216,185,216,177,216,163,217,135,217,132,216,180,217,135,216,177,217,
-130,216,183,216,177,216,183,217,132,216,168,112,114,111,102,105,108,101,115,101,
-114,118,105,99,101,100,101,102,97,117,108,116,104,105,109,115,101,108,102,100,
-101,116,97,105,108,115,99,111,110,116,101,110,116,115,117,112,112,111,114,116,
-115,116,97,114,116,101,100,109,101,115,115,97,103,101,115,117,99,99,101,115,115,
-102,97,115,104,105,111,110,60,116,105,116,108,101,62,99,111,117,110,116,114,121,
-97,99,99,111,117,110,116,99,114,101,97,116,101,100,115,116,111,114,105,101,115,
-114,101,115,117,108,116,115,114,117,110,110,105,110,103,112,114,111,99,101,115,
-115,119,114,105,116,105,110,103,111,98,106,101,99,116,115,118,105,115,105,98,108
-,101,119,101,108,99,111,109,101,97,114,116,105,99,108,101,117,110,107,110,111,
-119,110,110,101,116,119,111,114,107,99,111,109,112,97,110,121,100,121,110,97,109
-,105,99,98,114,111,119,115,101,114,112,114,105,118,97,99,121,112,114,111,98,108,
-101,109,83,101,114,118,105,99,101,114,101,115,112,101,99,116,100,105,115,112,108
-,97,121,114,101,113,117,101,115,116,114,101,115,101,114,118,101,119,101,98,115,
-105,116,101,104,105,115,116,111,114,121,102,114,105,101,110,100,115,111,112,116,
-105,111,110,115,119,111,114,107,105,110,103,118,101,114,115,105,111,110,109,105,
-108,108,105,111,110,99,104,97,110,110,101,108,119,105,110,100,111,119,46,97,100,
-100,114,101,115,115,118,105,115,105,116,101,100,119,101,97,116,104,101,114,99,
-111,114,114,101,99,116,112,114,111,100,117,99,116,101,100,105,114,101,99,116,102
-,111,114,119,97,114,100,121,111,117,32,99,97,110,114,101,109,111,118,101,100,115
-,117,98,106,101,99,116,99,111,110,116,114,111,108,97,114,99,104,105,118,101,99,
-117,114,114,101,110,116,114,101,97,100,105,110,103,108,105,98,114,97,114,121,108
-,105,109,105,116,101,100,109,97,110,97,103,101,114,102,117,114,116,104,101,114,
-115,117,109,109,97,114,121,109,97,99,104,105,110,101,109,105,110,117,116,101,115
-,112,114,105,118,97,116,101,99,111,110,116,101,120,116,112,114,111,103,114,97,
-109,115,111,99,105,101,116,121,110,117,109,98,101,114,115,119,114,105,116,116,
-101,110,101,110,97,98,108,101,100,116,114,105,103,103,101,114,115,111,117,114,99
-,101,115,108,111,97,100,105,110,103,101,108,101,109,101,110,116,112,97,114,116,
-110,101,114,102,105,110,97,108,108,121,112,101,114,102,101,99,116,109,101,97,110
-,105,110,103,115,121,115,116,101,109,115,107,101,101,112,105,110,103,99,117,108,
-116,117,114,101,38,113,117,111,116,59,44,106,111,117,114,110,97,108,112,114,111,
-106,101,99,116,115,117,114,102,97,99,101,115,38,113,117,111,116,59,101,120,112,
-105,114,101,115,114,101,118,105,101,119,115,98,97,108,97,110,99,101,69,110,103,
-108,105,115,104,67,111,110,116,101,110,116,116,104,114,111,117,103,104,80,108,
-101,97,115,101,32,111,112,105,110,105,111,110,99,111,110,116,97,99,116,97,118,
-101,114,97,103,101,112,114,105,109,97,114,121,118,105,108,108,97,103,101,83,112,
-97,110,105,115,104,103,97,108,108,101,114,121,100,101,99,108,105,110,101,109,101
-,101,116,105,110,103,109,105,115,115,105,111,110,112,111,112,117,108,97,114,113,
-117,97,108,105,116,121,109,101,97,115,117,114,101,103,101,110,101,114,97,108,115
-,112,101,99,105,101,115,115,101,115,115,105,111,110,115,101,99,116,105,111,110,
-119,114,105,116,101,114,115,99,111,117,110,116,101,114,105,110,105,116,105,97,
-108,114,101,112,111,114,116,115,102,105,103,117,114,101,115,109,101,109,98,101,
-114,115,104,111,108,100,105,110,103,100,105,115,112,117,116,101,101,97,114,108,
-105,101,114,101,120,112,114,101,115,115,100,105,103,105,116,97,108,112,105,99,
-116,117,114,101,65,110,111,116,104,101,114,109,97,114,114,105,101,100,116,114,97
-,102,102,105,99,108,101,97,100,105,110,103,99,104,97,110,103,101,100,99,101,110,
-116,114,97,108,118,105,99,116,111,114,121,105,109,97,103,101,115,47,114,101,97,
-115,111,110,115,115,116,117,100,105,101,115,102,101,97,116,117,114,101,108,105,
-115,116,105,110,103,109,117,115,116,32,98,101,115,99,104,111,111,108,115,86,101,
-114,115,105,111,110,117,115,117,97,108,108,121,101,112,105,115,111,100,101,112,
-108,97,121,105,110,103,103,114,111,119,105,110,103,111,98,118,105,111,117,115,
-111,118,101,114,108,97,121,112,114,101,115,101,110,116,97,99,116,105,111,110,115
-,60,47,117,108,62,13,10,119,114,97,112,112,101,114,97,108,114,101,97,100,121,99,
-101,114,116,97,105,110,114,101,97,108,105,116,121,115,116,111,114,97,103,101,97,
-110,111,116,104,101,114,100,101,115,107,116,111,112,111,102,102,101,114,101,100,
-112,97,116,116,101,114,110,117,110,117,115,117,97,108,68,105,103,105,116,97,108,
-99,97,112,105,116,97,108,87,101,98,115,105,116,101,102,97,105,108,117,114,101,99
-,111,110,110,101,99,116,114,101,100,117,99,101,100,65,110,100,114,111,105,100,
-100,101,99,97,100,101,115,114,101,103,117,108,97,114,32,38,97,109,112,59,32,97,
-110,105,109,97,108,115,114,101,108,101,97,115,101,65,117,116,111,109,97,116,103,
-101,116,116,105,110,103,109,101,116,104,111,100,115,110,111,116,104,105,110,103,
-80,111,112,117,108,97,114,99,97,112,116,105,111,110,108,101,116,116,101,114,115,
-99,97,112,116,117,114,101,115,99,105,101,110,99,101,108,105,99,101,110,115,101,
-99,104,97,110,103,101,115,69,110,103,108,97,110,100,61,49,38,97,109,112,59,72,
-105,115,116,111,114,121,32,61,32,110,101,119,32,67,101,110,116,114,97,108,117,
-112,100,97,116,101,100,83,112,101,99,105,97,108,78,101,116,119,111,114,107,114,
-101,113,117,105,114,101,99,111,109,109,101,110,116,119,97,114,110,105,110,103,67
-,111,108,108,101,103,101,116,111,111,108,98,97,114,114,101,109,97,105,110,115,98
-,101,99,97,117,115,101,101,108,101,99,116,101,100,68,101,117,116,115,99,104,102,
-105,110,97,110,99,101,119,111,114,107,101,114,115,113,117,105,99,107,108,121,98,
-101,116,119,101,101,110,101,120,97,99,116,108,121,115,101,116,116,105,110,103,
-100,105,115,101,97,115,101,83,111,99,105,101,116,121,119,101,97,112,111,110,115,
-101,120,104,105,98,105,116,38,108,116,59,33,45,45,67,111,110,116,114,111,108,99,
-108,97,115,115,101,115,99,111,118,101,114,101,100,111,117,116,108,105,110,101,97
-,116,116,97,99,107,115,100,101,118,105,99,101,115,40,119,105,110,100,111,119,112
-,117,114,112,111,115,101,116,105,116,108,101,61,34,77,111,98,105,108,101,32,107,
-105,108,108,105,110,103,115,104,111,119,105,110,103,73,116,97,108,105,97,110,100
-,114,111,112,112,101,100,104,101,97,118,105,108,121,101,102,102,101,99,116,115,
-45,49,39,93,41,59,10,99,111,110,102,105,114,109,67,117,114,114,101,110,116,97,
-100,118,97,110,99,101,115,104,97,114,105,110,103,111,112,101,110,105,110,103,100
-,114,97,119,105,110,103,98,105,108,108,105,111,110,111,114,100,101,114,101,100,
-71,101,114,109,97,110,121,114,101,108,97,116,101,100,60,47,102,111,114,109,62,
-105,110,99,108,117,100,101,119,104,101,116,104,101,114,100,101,102,105,110,101,
-100,83,99,105,101,110,99,101,99,97,116,97,108,111,103,65,114,116,105,99,108,101,
-98,117,116,116,111,110,115,108,97,114,103,101,115,116,117,110,105,102,111,114,
-109,106,111,117,114,110,101,121,115,105,100,101,98,97,114,67,104,105,99,97,103,
-111,104,111,108,105,100,97,121,71,101,110,101,114,97,108,112,97,115,115,97,103,
-101,44,38,113,117,111,116,59,97,110,105,109,97,116,101,102,101,101,108,105,110,
-103,97,114,114,105,118,101,100,112,97,115,115,105,110,103,110,97,116,117,114,97,
-108,114,111,117,103,104,108,121,46,10,10,84,104,101,32,98,117,116,32,110,111,116
-,100,101,110,115,105,116,121,66,114,105,116,97,105,110,67,104,105,110,101,115,
-101,108,97,99,107,32,111,102,116,114,105,98,117,116,101,73,114,101,108,97,110,
-100,34,32,100,97,116,97,45,102,97,99,116,111,114,115,114,101,99,101,105,118,101,
-116,104,97,116,32,105,115,76,105,98,114,97,114,121,104,117,115,98,97,110,100,105
-,110,32,102,97,99,116,97,102,102,97,105,114,115,67,104,97,114,108,101,115,114,97
-,100,105,99,97,108,98,114,111,117,103,104,116,102,105,110,100,105,110,103,108,97
-,110,100,105,110,103,58,108,97,110,103,61,34,114,101,116,117,114,110,32,108,101,
-97,100,101,114,115,112,108,97,110,110,101,100,112,114,101,109,105,117,109,112,97
-,99,107,97,103,101,65,109,101,114,105,99,97,69,100,105,116,105,111,110,93,38,113
-,117,111,116,59,77,101,115,115,97,103,101,110,101,101,100,32,116,111,118,97,108,
-117,101,61,34,99,111,109,112,108,101,120,108,111,111,107,105,110,103,115,116,97,
-116,105,111,110,98,101,108,105,101,118,101,115,109,97,108,108,101,114,45,109,111
-,98,105,108,101,114,101,99,111,114,100,115,119,97,110,116,32,116,111,107,105,110
-,100,32,111,102,70,105,114,101,102,111,120,121,111,117,32,97,114,101,115,105,109
-,105,108,97,114,115,116,117,100,105,101,100,109,97,120,105,109,117,109,104,101,
-97,100,105,110,103,114,97,112,105,100,108,121,99,108,105,109,97,116,101,107,105,
-110,103,100,111,109,101,109,101,114,103,101,100,97,109,111,117,110,116,115,102,
-111,117,110,100,101,100,112,105,111,110,101,101,114,102,111,114,109,117,108,97,
-100,121,110,97,115,116,121,104,111,119,32,116,111,32,83,117,112,112,111,114,116,
-114,101,118,101,110,117,101,101,99,111,110,111,109,121,82,101,115,117,108,116,
-115,98,114,111,116,104,101,114,115,111,108,100,105,101,114,108,97,114,103,101,
-108,121,99,97,108,108,105,110,103,46,38,113,117,111,116,59,65,99,99,111,117,110,
-116,69,100,119,97,114,100,32,115,101,103,109,101,110,116,82,111,98,101,114,116,
-32,101,102,102,111,114,116,115,80,97,99,105,102,105,99,108,101,97,114,110,101,
-100,117,112,32,119,105,116,104,104,101,105,103,104,116,58,119,101,32,104,97,118,
-101,65,110,103,101,108,101,115,110,97,116,105,111,110,115,95,115,101,97,114,99,
-104,97,112,112,108,105,101,100,97,99,113,117,105,114,101,109,97,115,115,105,118,
-101,103,114,97,110,116,101,100,58,32,102,97,108,115,101,116,114,101,97,116,101,
-100,98,105,103,103,101,115,116,98,101,110,101,102,105,116,100,114,105,118,105,
-110,103,83,116,117,100,105,101,115,109,105,110,105,109,117,109,112,101,114,104,
-97,112,115,109,111,114,110,105,110,103,115,101,108,108,105,110,103,105,115,32,
-117,115,101,100,114,101,118,101,114,115,101,118,97,114,105,97,110,116,32,114,111
-,108,101,61,34,109,105,115,115,105,110,103,97,99,104,105,101,118,101,112,114,111
-,109,111,116,101,115,116,117,100,101,110,116,115,111,109,101,111,110,101,101,120
-,116,114,101,109,101,114,101,115,116,111,114,101,98,111,116,116,111,109,58,101,
-118,111,108,118,101,100,97,108,108,32,116,104,101,115,105,116,101,109,97,112,101
-,110,103,108,105,115,104,119,97,121,32,116,111,32,32,65,117,103,117,115,116,115,
-121,109,98,111,108,115,67,111,109,112,97,110,121,109,97,116,116,101,114,115,109,
-117,115,105,99,97,108,97,103,97,105,110,115,116,115,101,114,118,105,110,103,125,
-41,40,41,59,13,10,112,97,121,109,101,110,116,116,114,111,117,98,108,101,99,111,
-110,99,101,112,116,99,111,109,112,97,114,101,112,97,114,101,110,116,115,112,108,
-97,121,101,114,115,114,101,103,105,111,110,115,109,111,110,105,116,111,114,32,39
-,39,84,104,101,32,119,105,110,110,105,110,103,101,120,112,108,111,114,101,97,100
-,97,112,116,101,100,71,97,108,108,101,114,121,112,114,111,100,117,99,101,97,98,
-105,108,105,116,121,101,110,104,97,110,99,101,99,97,114,101,101,114,115,41,46,32
-,84,104,101,32,99,111,108,108,101,99,116,83,101,97,114,99,104,32,97,110,99,105,
-101,110,116,101,120,105,115,116,101,100,102,111,111,116,101,114,32,104,97,110,
-100,108,101,114,112,114,105,110,116,101,100,99,111,110,115,111,108,101,69,97,115
-,116,101,114,110,101,120,112,111,114,116,115,119,105,110,100,111,119,115,67,104,
-97,110,110,101,108,105,108,108,101,103,97,108,110,101,117,116,114,97,108,115,117
-,103,103,101,115,116,95,104,101,97,100,101,114,115,105,103,110,105,110,103,46,
-104,116,109,108,34,62,115,101,116,116,108,101,100,119,101,115,116,101,114,110,99
-,97,117,115,105,110,103,45,119,101,98,107,105,116,99,108,97,105,109,101,100,74,
-117,115,116,105,99,101,99,104,97,112,116,101,114,118,105,99,116,105,109,115,84,
-104,111,109,97,115,32,109,111,122,105,108,108,97,112,114,111,109,105,115,101,112
-,97,114,116,105,101,115,101,100,105,116,105,111,110,111,117,116,115,105,100,101,
-58,102,97,108,115,101,44,104,117,110,100,114,101,100,79,108,121,109,112,105,99,
-95,98,117,116,116,111,110,97,117,116,104,111,114,115,114,101,97,99,104,101,100,
-99,104,114,111,110,105,99,100,101,109,97,110,100,115,115,101,99,111,110,100,115,
-112,114,111,116,101,99,116,97,100,111,112,116,101,100,112,114,101,112,97,114,101
-,110,101,105,116,104,101,114,103,114,101,97,116,108,121,103,114,101,97,116,101,
-114,111,118,101,114,97,108,108,105,109,112,114,111,118,101,99,111,109,109,97,110
-,100,115,112,101,99,105,97,108,115,101,97,114,99,104,46,119,111,114,115,104,105,
-112,102,117,110,100,105,110,103,116,104,111,117,103,104,116,104,105,103,104,101,
-115,116,105,110,115,116,101,97,100,117,116,105,108,105,116,121,113,117,97,114,
-116,101,114,67,117,108,116,117,114,101,116,101,115,116,105,110,103,99,108,101,97
-,114,108,121,101,120,112,111,115,101,100,66,114,111,119,115,101,114,108,105,98,
-101,114,97,108,125,32,99,97,116,99,104,80,114,111,106,101,99,116,101,120,97,109,
-112,108,101,104,105,100,101,40,41,59,70,108,111,114,105,100,97,97,110,115,119,
-101,114,115,97,108,108,111,119,101,100,69,109,112,101,114,111,114,100,101,102,
-101,110,115,101,115,101,114,105,111,117,115,102,114,101,101,100,111,109,83,101,
-118,101,114,97,108,45,98,117,116,116,111,110,70,117,114,116,104,101,114,111,117,
-116,32,111,102,32,33,61,32,110,117,108,108,116,114,97,105,110,101,100,68,101,110
-,109,97,114,107,118,111,105,100,40,48,41,47,97,108,108,46,106,115,112,114,101,
-118,101,110,116,82,101,113,117,101,115,116,83,116,101,112,104,101,110,10,10,87,
-104,101,110,32,111,98,115,101,114,118,101,60,47,104,50,62,13,10,77,111,100,101,
-114,110,32,112,114,111,118,105,100,101,34,32,97,108,116,61,34,98,111,114,100,101
-,114,115,46,10,10,70,111,114,32,10,10,77,97,110,121,32,97,114,116,105,115,116,
-115,112,111,119,101,114,101,100,112,101,114,102,111,114,109,102,105,99,116,105,
-111,110,116,121,112,101,32,111,102,109,101,100,105,99,97,108,116,105,99,107,101,
-116,115,111,112,112,111,115,101,100,67,111,117,110,99,105,108,119,105,116,110,
-101,115,115,106,117,115,116,105,99,101,71,101,111,114,103,101,32,66,101,108,103,
-105,117,109,46,46,46,60,47,97,62,116,119,105,116,116,101,114,110,111,116,97,98,
-108,121,119,97,105,116,105,110,103,119,97,114,102,97,114,101,32,79,116,104,101,
-114,32,114,97,110,107,105,110,103,112,104,114,97,115,101,115,109,101,110,116,105
-,111,110,115,117,114,118,105,118,101,115,99,104,111,108,97,114,60,47,112,62,13,
-10,32,67,111,117,110,116,114,121,105,103,110,111,114,101,100,108,111,115,115,32,
-111,102,106,117,115,116,32,97,115,71,101,111,114,103,105,97,115,116,114,97,110,
-103,101,60,104,101,97,100,62,60,115,116,111,112,112,101,100,49,39,93,41,59,13,10
-,105,115,108,97,110,100,115,110,111,116,97,98,108,101,98,111,114,100,101,114,58,
-108,105,115,116,32,111,102,99,97,114,114,105,101,100,49,48,48,44,48,48,48,60,47,
-104,51,62,10,32,115,101,118,101,114,97,108,98,101,99,111,109,101,115,115,101,108
-,101,99,116,32,119,101,100,100,105,110,103,48,48,46,104,116,109,108,109,111,110,
-97,114,99,104,111,102,102,32,116,104,101,116,101,97,99,104,101,114,104,105,103,
-104,108,121,32,98,105,111,108,111,103,121,108,105,102,101,32,111,102,111,114,32,
-101,118,101,110,114,105,115,101,32,111,102,38,114,97,113,117,111,59,112,108,117,
-115,111,110,101,104,117,110,116,105,110,103,40,116,104,111,117,103,104,68,111,
-117,103,108,97,115,106,111,105,110,105,110,103,99,105,114,99,108,101,115,70,111,
-114,32,116,104,101,65,110,99,105,101,110,116,86,105,101,116,110,97,109,118,101,
-104,105,99,108,101,115,117,99,104,32,97,115,99,114,121,115,116,97,108,118,97,108
-,117,101,32,61,87,105,110,100,111,119,115,101,110,106,111,121,101,100,97,32,115,
-109,97,108,108,97,115,115,117,109,101,100,60,97,32,105,100,61,34,102,111,114,101
-,105,103,110,32,65,108,108,32,114,105,104,111,119,32,116,104,101,68,105,115,112,
-108,97,121,114,101,116,105,114,101,100,104,111,119,101,118,101,114,104,105,100,
-100,101,110,59,98,97,116,116,108,101,115,115,101,101,107,105,110,103,99,97,98,
-105,110,101,116,119,97,115,32,110,111,116,108,111,111,107,32,97,116,99,111,110,
-100,117,99,116,103,101,116,32,116,104,101,74,97,110,117,97,114,121,104,97,112,
-112,101,110,115,116,117,114,110,105,110,103,97,58,104,111,118,101,114,79,110,108
-,105,110,101,32,70,114,101,110,99,104,32,108,97,99,107,105,110,103,116,121,112,
-105,99,97,108,101,120,116,114,97,99,116,101,110,101,109,105,101,115,101,118,101,
-110,32,105,102,103,101,110,101,114,97,116,100,101,99,105,100,101,100,97,114,101,
-32,110,111,116,47,115,101,97,114,99,104,98,101,108,105,101,102,115,45,105,109,97
-,103,101,58,108,111,99,97,116,101,100,115,116,97,116,105,99,46,108,111,103,105,
-110,34,62,99,111,110,118,101,114,116,118,105,111,108,101,110,116,101,110,116,101
-,114,101,100,102,105,114,115,116,34,62,99,105,114,99,117,105,116,70,105,110,108,
-97,110,100,99,104,101,109,105,115,116,115,104,101,32,119,97,115,49,48,112,120,59
-,34,62,97,115,32,115,117,99,104,100,105,118,105,100,101,100,60,47,115,112,97,110
-,62,119,105,108,108,32,98,101,108,105,110,101,32,111,102,97,32,103,114,101,97,
-116,109,121,115,116,101,114,121,47,105,110,100,101,120,46,102,97,108,108,105,110
-,103,100,117,101,32,116,111,32,114,97,105,108,119,97,121,99,111,108,108,101,103,
-101,109,111,110,115,116,101,114,100,101,115,99,101,110,116,105,116,32,119,105,
-116,104,110,117,99,108,101,97,114,74,101,119,105,115,104,32,112,114,111,116,101,
-115,116,66,114,105,116,105,115,104,102,108,111,119,101,114,115,112,114,101,100,
-105,99,116,114,101,102,111,114,109,115,98,117,116,116,111,110,32,119,104,111,32,
-119,97,115,108,101,99,116,117,114,101,105,110,115,116,97,110,116,115,117,105,99,
-105,100,101,103,101,110,101,114,105,99,112,101,114,105,111,100,115,109,97,114,
-107,101,116,115,83,111,99,105,97,108,32,102,105,115,104,105,110,103,99,111,109,
-98,105,110,101,103,114,97,112,104,105,99,119,105,110,110,101,114,115,60,98,114,
-32,47,62,60,98,121,32,116,104,101,32,78,97,116,117,114,97,108,80,114,105,118,97,
-99,121,99,111,111,107,105,101,115,111,117,116,99,111,109,101,114,101,115,111,108
-,118,101,83,119,101,100,105,115,104,98,114,105,101,102,108,121,80,101,114,115,
-105,97,110,115,111,32,109,117,99,104,67,101,110,116,117,114,121,100,101,112,105,
-99,116,115,99,111,108,117,109,110,115,104,111,117,115,105,110,103,115,99,114,105
-,112,116,115,110,101,120,116,32,116,111,98,101,97,114,105,110,103,109,97,112,112
-,105,110,103,114,101,118,105,115,101,100,106,81,117,101,114,121,40,45,119,105,
-100,116,104,58,116,105,116,108,101,34,62,116,111,111,108,116,105,112,83,101,99,
-116,105,111,110,100,101,115,105,103,110,115,84,117,114,107,105,115,104,121,111,
-117,110,103,101,114,46,109,97,116,99,104,40,125,41,40,41,59,10,10,98,117,114,110
-,105,110,103,111,112,101,114,97,116,101,100,101,103,114,101,101,115,115,111,117,
-114,99,101,61,82,105,99,104,97,114,100,99,108,111,115,101,108,121,112,108,97,115
-,116,105,99,101,110,116,114,105,101,115,60,47,116,114,62,13,10,99,111,108,111,
-114,58,35,117,108,32,105,100,61,34,112,111,115,115,101,115,115,114,111,108,108,
-105,110,103,112,104,121,115,105,99,115,102,97,105,108,105,110,103,101,120,101,99
-,117,116,101,99,111,110,116,101,115,116,108,105,110,107,32,116,111,68,101,102,97
-,117,108,116,60,98,114,32,47,62,10,58,32,116,114,117,101,44,99,104,97,114,116,
-101,114,116,111,117,114,105,115,109,99,108,97,115,115,105,99,112,114,111,99,101,
-101,100,101,120,112,108,97,105,110,60,47,104,49,62,13,10,111,110,108,105,110,101
-,46,63,120,109,108,32,118,101,104,101,108,112,105,110,103,100,105,97,109,111,110
-,100,117,115,101,32,116,104,101,97,105,114,108,105,110,101,101,110,100,32,45,45,
-62,41,46,97,116,116,114,40,114,101,97,100,101,114,115,104,111,115,116,105,110,
-103,35,102,102,102,102,102,102,114,101,97,108,105,122,101,86,105,110,99,101,110,
-116,115,105,103,110,97,108,115,32,115,114,99,61,34,47,80,114,111,100,117,99,116,
-100,101,115,112,105,116,101,100,105,118,101,114,115,101,116,101,108,108,105,110,
-103,80,117,98,108,105,99,32,104,101,108,100,32,105,110,74,111,115,101,112,104,32
-,116,104,101,97,116,114,101,97,102,102,101,99,116,115,60,115,116,121,108,101,62,
-97,32,108,97,114,103,101,100,111,101,115,110,39,116,108,97,116,101,114,44,32,69,
-108,101,109,101,110,116,102,97,118,105,99,111,110,99,114,101,97,116,111,114,72,
-117,110,103,97,114,121,65,105,114,112,111,114,116,115,101,101,32,116,104,101,115
-,111,32,116,104,97,116,77,105,99,104,97,101,108,83,121,115,116,101,109,115,80,
-114,111,103,114,97,109,115,44,32,97,110,100,32,32,119,105,100,116,104,61,101,38,
-113,117,111,116,59,116,114,97,100,105,110,103,108,101,102,116,34,62,10,112,101,
-114,115,111,110,115,71,111,108,100,101,110,32,65,102,102,97,105,114,115,103,114,
-97,109,109,97,114,102,111,114,109,105,110,103,100,101,115,116,114,111,121,105,
-100,101,97,32,111,102,99,97,115,101,32,111,102,111,108,100,101,115,116,32,116,
-104,105,115,32,105,115,46,115,114,99,32,61,32,99,97,114,116,111,111,110,114,101,
-103,105,115,116,114,67,111,109,109,111,110,115,77,117,115,108,105,109,115,87,104
-,97,116,32,105,115,105,110,32,109,97,110,121,109,97,114,107,105,110,103,114,101,
-118,101,97,108,115,73,110,100,101,101,100,44,101,113,117,97,108,108,121,47,115,
-104,111,119,95,97,111,117,116,100,111,111,114,101,115,99,97,112,101,40,65,117,
-115,116,114,105,97,103,101,110,101,116,105,99,115,121,115,116,101,109,44,73,110,
-32,116,104,101,32,115,105,116,116,105,110,103,72,101,32,97,108,115,111,73,115,
-108,97,110,100,115,65,99,97,100,101,109,121,10,9,9,60,33,45,45,68,97,110,105,101
-,108,32,98,105,110,100,105,110,103,98,108,111,99,107,34,62,105,109,112,111,115,
-101,100,117,116,105,108,105,122,101,65,98,114,97,104,97,109,40,101,120,99,101,
-112,116,123,119,105,100,116,104,58,112,117,116,116,105,110,103,41,46,104,116,109
-,108,40,124,124,32,91,93,59,10,68,65,84,65,91,32,42,107,105,116,99,104,101,110,
-109,111,117,110,116,101,100,97,99,116,117,97,108,32,100,105,97,108,101,99,116,
-109,97,105,110,108,121,32,95,98,108,97,110,107,39,105,110,115,116,97,108,108,101
-,120,112,101,114,116,115,105,102,40,116,121,112,101,73,116,32,97,108,115,111,38,
-99,111,112,121,59,32,34,62,84,101,114,109,115,98,111,114,110,32,105,110,79,112,
-116,105,111,110,115,101,97,115,116,101,114,110,116,97,108,107,105,110,103,99,111
-,110,99,101,114,110,103,97,105,110,101,100,32,111,110,103,111,105,110,103,106,
-117,115,116,105,102,121,99,114,105,116,105,99,115,102,97,99,116,111,114,121,105,
-116,115,32,111,119,110,97,115,115,97,117,108,116,105,110,118,105,116,101,100,108
-,97,115,116,105,110,103,104,105,115,32,111,119,110,104,114,101,102,61,34,47,34,
-32,114,101,108,61,34,100,101,118,101,108,111,112,99,111,110,99,101,114,116,100,
-105,97,103,114,97,109,100,111,108,108,97,114,115,99,108,117,115,116,101,114,112,
-104,112,63,105,100,61,97,108,99,111,104,111,108,41,59,125,41,40,41,59,117,115,
-105,110,103,32,97,62,60,115,112,97,110,62,118,101,115,115,101,108,115,114,101,
-118,105,118,97,108,65,100,100,114,101,115,115,97,109,97,116,101,117,114,97,110,
-100,114,111,105,100,97,108,108,101,103,101,100,105,108,108,110,101,115,115,119,
-97,108,107,105,110,103,99,101,110,116,101,114,115,113,117,97,108,105,102,121,109
-,97,116,99,104,101,115,117,110,105,102,105,101,100,101,120,116,105,110,99,116,68
-,101,102,101,110,115,101,100,105,101,100,32,105,110,10,9,60,33,45,45,32,99,117,
-115,116,111,109,115,108,105,110,107,105,110,103,76,105,116,116,108,101,32,66,111
-,111,107,32,111,102,101,118,101,110,105,110,103,109,105,110,46,106,115,63,97,114
-,101,32,116,104,101,107,111,110,116,97,107,116,116,111,100,97,121,39,115,46,104,
-116,109,108,34,32,116,97,114,103,101,116,61,119,101,97,114,105,110,103,65,108,
-108,32,82,105,103,59,10,125,41,40,41,59,114,97,105,115,105,110,103,32,65,108,115
-,111,44,32,99,114,117,99,105,97,108,97,98,111,117,116,34,62,100,101,99,108,97,
-114,101,45,45,62,10,60,115,99,102,105,114,101,102,111,120,97,115,32,109,117,99,
-104,97,112,112,108,105,101,115,105,110,100,101,120,44,32,115,44,32,98,117,116,32
-,116,121,112,101,32,61,32,10,13,10,60,33,45,45,116,111,119,97,114,100,115,82,101
-,99,111,114,100,115,80,114,105,118,97,116,101,70,111,114,101,105,103,110,80,114,
-101,109,105,101,114,99,104,111,105,99,101,115,86,105,114,116,117,97,108,114,101,
-116,117,114,110,115,67,111,109,109,101,110,116,80,111,119,101,114,101,100,105,
-110,108,105,110,101,59,112,111,118,101,114,116,121,99,104,97,109,98,101,114,76,
-105,118,105,110,103,32,118,111,108,117,109,101,115,65,110,116,104,111,110,121,
-108,111,103,105,110,34,32,82,101,108,97,116,101,100,69,99,111,110,111,109,121,
-114,101,97,99,104,101,115,99,117,116,116,105,110,103,103,114,97,118,105,116,121,
-108,105,102,101,32,105,110,67,104,97,112,116,101,114,45,115,104,97,100,111,119,
-78,111,116,97,98,108,101,60,47,116,100,62,13,10,32,114,101,116,117,114,110,115,
-116,97,100,105,117,109,119,105,100,103,101,116,115,118,97,114,121,105,110,103,
-116,114,97,118,101,108,115,104,101,108,100,32,98,121,119,104,111,32,97,114,101,
-119,111,114,107,32,105,110,102,97,99,117,108,116,121,97,110,103,117,108,97,114,
-119,104,111,32,104,97,100,97,105,114,112,111,114,116,116,111,119,110,32,111,102,
-10,10,83,111,109,101,32,39,99,108,105,99,107,39,99,104,97,114,103,101,115,107,
-101,121,119,111,114,100,105,116,32,119,105,108,108,99,105,116,121,32,111,102,40,
-116,104,105,115,41,59,65,110,100,114,101,119,32,117,110,105,113,117,101,32,99,
-104,101,99,107,101,100,111,114,32,109,111,114,101,51,48,48,112,120,59,32,114,101
-,116,117,114,110,59,114,115,105,111,110,61,34,112,108,117,103,105,110,115,119,
-105,116,104,105,110,32,104,101,114,115,101,108,102,83,116,97,116,105,111,110,70,
-101,100,101,114,97,108,118,101,110,116,117,114,101,112,117,98,108,105,115,104,
-115,101,110,116,32,116,111,116,101,110,115,105,111,110,97,99,116,114,101,115,115
-,99,111,109,101,32,116,111,102,105,110,103,101,114,115,68,117,107,101,32,111,102
-,112,101,111,112,108,101,44,101,120,112,108,111,105,116,119,104,97,116,32,105,
-115,104,97,114,109,111,110,121,97,32,109,97,106,111,114,34,58,34,104,116,116,112
-,105,110,32,104,105,115,32,109,101,110,117,34,62,10,109,111,110,116,104,108,121,
-111,102,102,105,99,101,114,99,111,117,110,99,105,108,103,97,105,110,105,110,103,
-101,118,101,110,32,105,110,83,117,109,109,97,114,121,100,97,116,101,32,111,102,
-108,111,121,97,108,116,121,102,105,116,110,101,115,115,97,110,100,32,119,97,115,
-101,109,112,101,114,111,114,115,117,112,114,101,109,101,83,101,99,111,110,100,32
-,104,101,97,114,105,110,103,82,117,115,115,105,97,110,108,111,110,103,101,115,
-116,65,108,98,101,114,116,97,108,97,116,101,114,97,108,115,101,116,32,111,102,32
-,115,109,97,108,108,34,62,46,97,112,112,101,110,100,100,111,32,119,105,116,104,
-102,101,100,101,114,97,108,98,97,110,107,32,111,102,98,101,110,101,97,116,104,68
-,101,115,112,105,116,101,67,97,112,105,116,97,108,103,114,111,117,110,100,115,41
-,44,32,97,110,100,32,112,101,114,99,101,110,116,105,116,32,102,114,111,109,99,
-108,111,115,105,110,103,99,111,110,116,97,105,110,73,110,115,116,101,97,100,102,
-105,102,116,101,101,110,97,115,32,119,101,108,108,46,121,97,104,111,111,46,114,
-101,115,112,111,110,100,102,105,103,104,116,101,114,111,98,115,99,117,114,101,
-114,101,102,108,101,99,116,111,114,103,97,110,105,99,61,32,77,97,116,104,46,101,
-100,105,116,105,110,103,111,110,108,105,110,101,32,112,97,100,100,105,110,103,97
-,32,119,104,111,108,101,111,110,101,114,114,111,114,121,101,97,114,32,111,102,
-101,110,100,32,111,102,32,98,97,114,114,105,101,114,119,104,101,110,32,105,116,
-104,101,97,100,101,114,32,104,111,109,101,32,111,102,114,101,115,117,109,101,100
-,114,101,110,97,109,101,100,115,116,114,111,110,103,62,104,101,97,116,105,110,
-103,114,101,116,97,105,110,115,99,108,111,117,100,102,114,119,97,121,32,111,102,
-32,77,97,114,99,104,32,49,107,110,111,119,105,110,103,105,110,32,112,97,114,116,
-66,101,116,119,101,101,110,108,101,115,115,111,110,115,99,108,111,115,101,115,
-116,118,105,114,116,117,97,108,108,105,110,107,115,34,62,99,114,111,115,115,101,
-100,69,78,68,32,45,45,62,102,97,109,111,117,115,32,97,119,97,114,100,101,100,76,
-105,99,101,110,115,101,72,101,97,108,116,104,32,102,97,105,114,108,121,32,119,
-101,97,108,116,104,121,109,105,110,105,109,97,108,65,102,114,105,99,97,110,99,
-111,109,112,101,116,101,108,97,98,101,108,34,62,115,105,110,103,105,110,103,102,
-97,114,109,101,114,115,66,114,97,115,105,108,41,100,105,115,99,117,115,115,114,
-101,112,108,97,99,101,71,114,101,103,111,114,121,102,111,110,116,32,99,111,112,
-117,114,115,117,101,100,97,112,112,101,97,114,115,109,97,107,101,32,117,112,114,
-111,117,110,100,101,100,98,111,116,104,32,111,102,98,108,111,99,107,101,100,115,
-97,119,32,116,104,101,111,102,102,105,99,101,115,99,111,108,111,117,114,115,105,
-102,40,100,111,99,117,119,104,101,110,32,104,101,101,110,102,111,114,99,101,112,
-117,115,104,40,102,117,65,117,103,117,115,116,32,85,84,70,45,56,34,62,70,97,110,
-116,97,115,121,105,110,32,109,111,115,116,105,110,106,117,114,101,100,85,115,117
-,97,108,108,121,102,97,114,109,105,110,103,99,108,111,115,117,114,101,111,98,106
-,101,99,116,32,100,101,102,101,110,99,101,117,115,101,32,111,102,32,77,101,100,
-105,99,97,108,60,98,111,100,121,62,10,101,118,105,100,101,110,116,98,101,32,117,
-115,101,100,107,101,121,67,111,100,101,115,105,120,116,101,101,110,73,115,108,97
-,109,105,99,35,48,48,48,48,48,48,101,110,116,105,114,101,32,119,105,100,101,108,
-121,32,97,99,116,105,118,101,32,40,116,121,112,101,111,102,111,110,101,32,99,97,
-110,99,111,108,111,114,32,61,115,112,101,97,107,101,114,101,120,116,101,110,100,
-115,80,104,121,115,105,99,115,116,101,114,114,97,105,110,60,116,98,111,100,121,
-62,102,117,110,101,114,97,108,118,105,101,119,105,110,103,109,105,100,100,108,
-101,32,99,114,105,99,107,101,116,112,114,111,112,104,101,116,115,104,105,102,116
-,101,100,100,111,99,116,111,114,115,82,117,115,115,101,108,108,32,116,97,114,103
-,101,116,99,111,109,112,97,99,116,97,108,103,101,98,114,97,115,111,99,105,97,108
-,45,98,117,108,107,32,111,102,109,97,110,32,97,110,100,60,47,116,100,62,10,32,
-104,101,32,108,101,102,116,41,46,118,97,108,40,41,102,97,108,115,101,41,59,108,
-111,103,105,99,97,108,98,97,110,107,105,110,103,104,111,109,101,32,116,111,110,
-97,109,105,110,103,32,65,114,105,122,111,110,97,99,114,101,100,105,116,115,41,59
-,10,125,41,59,10,102,111,117,110,100,101,114,105,110,32,116,117,114,110,67,111,
-108,108,105,110,115,98,101,102,111,114,101,32,66,117,116,32,116,104,101,99,104,
-97,114,103,101,100,84,105,116,108,101,34,62,67,97,112,116,97,105,110,115,112,101
-,108,108,101,100,103,111,100,100,101,115,115,84,97,103,32,45,45,62,65,100,100,
-105,110,103,58,98,117,116,32,119,97,115,82,101,99,101,110,116,32,112,97,116,105,
-101,110,116,98,97,99,107,32,105,110,61,102,97,108,115,101,38,76,105,110,99,111,
-108,110,119,101,32,107,110,111,119,67,111,117,110,116,101,114,74,117,100,97,105,
-115,109,115,99,114,105,112,116,32,97,108,116,101,114,101,100,39,93,41,59,10,32,
-32,104,97,115,32,116,104,101,117,110,99,108,101,97,114,69,118,101,110,116,39,44,
-98,111,116,104,32,105,110,110,111,116,32,97,108,108,10,10,60,33,45,45,32,112,108
-,97,99,105,110,103,104,97,114,100,32,116,111,32,99,101,110,116,101,114,115,111,
-114,116,32,111,102,99,108,105,101,110,116,115,115,116,114,101,101,116,115,66,101
-,114,110,97,114,100,97,115,115,101,114,116,115,116,101,110,100,32,116,111,102,97
-,110,116,97,115,121,100,111,119,110,32,105,110,104,97,114,98,111,117,114,70,114,
-101,101,100,111,109,106,101,119,101,108,114,121,47,97,98,111,117,116,46,46,115,
-101,97,114,99,104,108,101,103,101,110,100,115,105,115,32,109,97,100,101,109,111,
-100,101,114,110,32,111,110,108,121,32,111,110,111,110,108,121,32,116,111,105,109
-,97,103,101,34,32,108,105,110,101,97,114,32,112,97,105,110,116,101,114,97,110,
-100,32,110,111,116,114,97,114,101,108,121,32,97,99,114,111,110,121,109,100,101,
-108,105,118,101,114,115,104,111,114,116,101,114,48,48,38,97,109,112,59,97,115,32
-,109,97,110,121,119,105,100,116,104,61,34,47,42,32,60,33,91,67,116,105,116,108,
-101,32,61,111,102,32,116,104,101,32,108,111,119,101,115,116,32,112,105,99,107,
-101,100,32,101,115,99,97,112,101,100,117,115,101,115,32,111,102,112,101,111,112,
-108,101,115,32,80,117,98,108,105,99,77,97,116,116,104,101,119,116,97,99,116,105,
-99,115,100,97,109,97,103,101,100,119,97,121,32,102,111,114,108,97,119,115,32,111
-,102,101,97,115,121,32,116,111,32,119,105,110,100,111,119,115,116,114,111,110,
-103,32,32,115,105,109,112,108,101,125,99,97,116,99,104,40,115,101,118,101,110,
-116,104,105,110,102,111,98,111,120,119,101,110,116,32,116,111,112,97,105,110,116
-,101,100,99,105,116,105,122,101,110,73,32,100,111,110,39,116,114,101,116,114,101
-,97,116,46,32,83,111,109,101,32,119,119,46,34,41,59,10,98,111,109,98,105,110,103
-,109,97,105,108,116,111,58,109,97,100,101,32,105,110,46,32,77,97,110,121,32,99,
-97,114,114,105,101,115,124,124,123,125,59,119,105,119,111,114,107,32,111,102,115
-,121,110,111,110,121,109,100,101,102,101,97,116,115,102,97,118,111,114,101,100,
-111,112,116,105,99,97,108,112,97,103,101,84,114,97,117,110,108,101,115,115,32,
-115,101,110,100,105,110,103,108,101,102,116,34,62,60,99,111,109,83,99,111,114,65
-,108,108,32,116,104,101,106,81,117,101,114,121,46,116,111,117,114,105,115,116,67
-,108,97,115,115,105,99,102,97,108,115,101,34,32,87,105,108,104,101,108,109,115,
-117,98,117,114,98,115,103,101,110,117,105,110,101,98,105,115,104,111,112,115,46,
-115,112,108,105,116,40,103,108,111,98,97,108,32,102,111,108,108,111,119,115,98,
-111,100,121,32,111,102,110,111,109,105,110,97,108,67,111,110,116,97,99,116,115,
-101,99,117,108,97,114,108,101,102,116,32,116,111,99,104,105,101,102,108,121,45,
-104,105,100,100,101,110,45,98,97,110,110,101,114,60,47,108,105,62,10,10,46,32,87
-,104,101,110,32,105,110,32,98,111,116,104,100,105,115,109,105,115,115,69,120,112
-,108,111,114,101,97,108,119,97,121,115,32,118,105,97,32,116,104,101,115,112,97,
-195,177,111,108,119,101,108,102,97,114,101,114,117,108,105,110,103,32,97,114,114
-,97,110,103,101,99,97,112,116,97,105,110,104,105,115,32,115,111,110,114,117,108,
-101,32,111,102,104,101,32,116,111,111,107,105,116,115,101,108,102,44,61,48,38,97
-,109,112,59,40,99,97,108,108,101,100,115,97,109,112,108,101,115,116,111,32,109,
-97,107,101,99,111,109,47,112,97,103,77,97,114,116,105,110,32,75,101,110,110,101,
-100,121,97,99,99,101,112,116,115,102,117,108,108,32,111,102,104,97,110,100,108,
-101,100,66,101,115,105,100,101,115,47,47,45,45,62,60,47,97,98,108,101,32,116,111
-,116,97,114,103,101,116,115,101,115,115,101,110,99,101,104,105,109,32,116,111,32
-,105,116,115,32,98,121,32,99,111,109,109,111,110,46,109,105,110,101,114,97,108,
-116,111,32,116,97,107,101,119,97,121,115,32,116,111,115,46,111,114,103,47,108,97
-,100,118,105,115,101,100,112,101,110,97,108,116,121,115,105,109,112,108,101,58,
-105,102,32,116,104,101,121,76,101,116,116,101,114,115,97,32,115,104,111,114,116,
-72,101,114,98,101,114,116,115,116,114,105,107,101,115,32,103,114,111,117,112,115
-,46,108,101,110,103,116,104,102,108,105,103,104,116,115,111,118,101,114,108,97,
-112,115,108,111,119,108,121,32,108,101,115,115,101,114,32,115,111,99,105,97,108,
-32,60,47,112,62,10,9,9,105,116,32,105,110,116,111,114,97,110,107,101,100,32,114,
-97,116,101,32,111,102,117,108,62,13,10,32,32,97,116,116,101,109,112,116,112,97,
-105,114,32,111,102,109,97,107,101,32,105,116,75,111,110,116,97,107,116,65,110,
-116,111,110,105,111,104,97,118,105,110,103,32,114,97,116,105,110,103,115,32,97,
-99,116,105,118,101,115,116,114,101,97,109,115,116,114,97,112,112,101,100,34,41,
-46,99,115,115,40,104,111,115,116,105,108,101,108,101,97,100,32,116,111,108,105,
-116,116,108,101,32,103,114,111,117,112,115,44,80,105,99,116,117,114,101,45,45,62
-,13,10,13,10,32,114,111,119,115,61,34,32,111,98,106,101,99,116,105,110,118,101,
-114,115,101,60,102,111,111,116,101,114,67,117,115,116,111,109,86,62,60,92,47,115
-,99,114,115,111,108,118,105,110,103,67,104,97,109,98,101,114,115,108,97,118,101,
-114,121,119,111,117,110,100,101,100,119,104,101,114,101,97,115,33,61,32,39,117,
-110,100,102,111,114,32,97,108,108,112,97,114,116,108,121,32,45,114,105,103,104,
-116,58,65,114,97,98,105,97,110,98,97,99,107,101,100,32,99,101,110,116,117,114,
-121,117,110,105,116,32,111,102,109,111,98,105,108,101,45,69,117,114,111,112,101,
-44,105,115,32,104,111,109,101,114,105,115,107,32,111,102,100,101,115,105,114,101
-,100,67,108,105,110,116,111,110,99,111,115,116,32,111,102,97,103,101,32,111,102,
-32,98,101,99,111,109,101,32,110,111,110,101,32,111,102,112,38,113,117,111,116,59
-,77,105,100,100,108,101,32,101,97,100,39,41,91,48,67,114,105,116,105,99,115,115,
-116,117,100,105,111,115,62,38,99,111,112,121,59,103,114,111,117,112,34,62,97,115
-,115,101,109,98,108,109,97,107,105,110,103,32,112,114,101,115,115,101,100,119,
-105,100,103,101,116,46,112,115,58,34,32,63,32,114,101,98,117,105,108,116,98,121,
-32,115,111,109,101,70,111,114,109,101,114,32,101,100,105,116,111,114,115,100,101
-,108,97,121,101,100,67,97,110,111,110,105,99,104,97,100,32,116,104,101,112,117,
-115,104,105,110,103,99,108,97,115,115,61,34,98,117,116,32,97,114,101,112,97,114,
-116,105,97,108,66,97,98,121,108,111,110,98,111,116,116,111,109,32,99,97,114,114,
-105,101,114,67,111,109,109,97,110,100,105,116,115,32,117,115,101,65,115,32,119,
-105,116,104,99,111,117,114,115,101,115,97,32,116,104,105,114,100,100,101,110,111
-,116,101,115,97,108,115,111,32,105,110,72,111,117,115,116,111,110,50,48,112,120,
-59,34,62,97,99,99,117,115,101,100,100,111,117,98,108,101,32,103,111,97,108,32,
-111,102,70,97,109,111,117,115,32,41,46,98,105,110,100,40,112,114,105,101,115,116
-,115,32,79,110,108,105,110,101,105,110,32,74,117,108,121,115,116,32,43,32,34,103
-,99,111,110,115,117,108,116,100,101,99,105,109,97,108,104,101,108,112,102,117,
-108,114,101,118,105,118,101,100,105,115,32,118,101,114,121,114,39,43,39,105,112,
-116,108,111,115,105,110,103,32,102,101,109,97,108,101,115,105,115,32,97,108,115,
-111,115,116,114,105,110,103,115,100,97,121,115,32,111,102,97,114,114,105,118,97,
-108,102,117,116,117,114,101,32,60,111,98,106,101,99,116,102,111,114,99,105,110,
-103,83,116,114,105,110,103,40,34,32,47,62,10,9,9,104,101,114,101,32,105,115,101,
-110,99,111,100,101,100,46,32,32,84,104,101,32,98,97,108,108,111,111,110,100,111,
-110,101,32,98,121,47,99,111,109,109,111,110,98,103,99,111,108,111,114,108,97,119
-,32,111,102,32,73,110,100,105,97,110,97,97,118,111,105,100,101,100,98,117,116,32
-,116,104,101,50,112,120,32,51,112,120,106,113,117,101,114,121,46,97,102,116,101,
-114,32,97,112,111,108,105,99,121,46,109,101,110,32,97,110,100,102,111,111,116,
-101,114,45,61,32,116,114,117,101,59,102,111,114,32,117,115,101,115,99,114,101,
-101,110,46,73,110,100,105,97,110,32,105,109,97,103,101,32,61,102,97,109,105,108,
-121,44,104,116,116,112,58,47,47,32,38,110,98,115,112,59,100,114,105,118,101,114,
-115,101,116,101,114,110,97,108,115,97,109,101,32,97,115,110,111,116,105,99,101,
-100,118,105,101,119,101,114,115,125,41,40,41,59,10,32,105,115,32,109,111,114,101
-,115,101,97,115,111,110,115,102,111,114,109,101,114,32,116,104,101,32,110,101,
-119,105,115,32,106,117,115,116,99,111,110,115,101,110,116,32,83,101,97,114,99,
-104,119,97,115,32,116,104,101,119,104,121,32,116,104,101,115,104,105,112,112,101
-,100,98,114,62,60,98,114,62,119,105,100,116,104,58,32,104,101,105,103,104,116,61
-,109,97,100,101,32,111,102,99,117,105,115,105,110,101,105,115,32,116,104,97,116,
-97,32,118,101,114,121,32,65,100,109,105,114,97,108,32,102,105,120,101,100,59,110
-,111,114,109,97,108,32,77,105,115,115,105,111,110,80,114,101,115,115,44,32,111,
-110,116,97,114,105,111,99,104,97,114,115,101,116,116,114,121,32,116,111,32,105,
-110,118,97,100,101,100,61,34,116,114,117,101,34,115,112,97,99,105,110,103,105,
-115,32,109,111,115,116,97,32,109,111,114,101,32,116,111,116,97,108,108,121,102,
-97,108,108,32,111,102,125,41,59,13,10,32,32,105,109,109,101,110,115,101,116,105,
-109,101,32,105,110,115,101,116,32,111,117,116,115,97,116,105,115,102,121,116,111
-,32,102,105,110,100,100,111,119,110,32,116,111,108,111,116,32,111,102,32,80,108,
-97,121,101,114,115,105,110,32,74,117,110,101,113,117,97,110,116,117,109,110,111,
-116,32,116,104,101,116,105,109,101,32,116,111,100,105,115,116,97,110,116,70,105,
-110,110,105,115,104,115,114,99,32,61,32,40,115,105,110,103,108,101,32,104,101,
-108,112,32,111,102,71,101,114,109,97,110,32,108,97,119,32,97,110,100,108,97,98,
-101,108,101,100,102,111,114,101,115,116,115,99,111,111,107,105,110,103,115,112,
-97,99,101,34,62,104,101,97,100,101,114,45,119,101,108,108,32,97,115,83,116,97,
-110,108,101,121,98,114,105,100,103,101,115,47,103,108,111,98,97,108,67,114,111,
-97,116,105,97,32,65,98,111,117,116,32,91,48,93,59,10,32,32,105,116,44,32,97,110,
-100,103,114,111,117,112,101,100,98,101,105,110,103,32,97,41,123,116,104,114,111,
-119,104,101,32,109,97,100,101,108,105,103,104,116,101,114,101,116,104,105,99,97,
-108,70,70,70,70,70,70,34,98,111,116,116,111,109,34,108,105,107,101,32,97,32,101,
-109,112,108,111,121,115,108,105,118,101,32,105,110,97,115,32,115,101,101,110,112
-,114,105,110,116,101,114,109,111,115,116,32,111,102,117,98,45,108,105,110,107,
-114,101,106,101,99,116,115,97,110,100,32,117,115,101,105,109,97,103,101,34,62,
-115,117,99,99,101,101,100,102,101,101,100,105,110,103,78,117,99,108,101,97,114,
-105,110,102,111,114,109,97,116,111,32,104,101,108,112,87,111,109,101,110,39,115,
-78,101,105,116,104,101,114,77,101,120,105,99,97,110,112,114,111,116,101,105,110,
-60,116,97,98,108,101,32,98,121,32,109,97,110,121,104,101,97,108,116,104,121,108,
-97,119,115,117,105,116,100,101,118,105,115,101,100,46,112,117,115,104,40,123,115
-,101,108,108,101,114,115,115,105,109,112,108,121,32,84,104,114,111,117,103,104,
-46,99,111,111,107,105,101,32,73,109,97,103,101,40,111,108,100,101,114,34,62,117,
-115,46,106,115,34,62,32,83,105,110,99,101,32,117,110,105,118,101,114,115,108,97,
-114,103,101,114,32,111,112,101,110,32,116,111,33,45,45,32,101,110,100,108,105,
-101,115,32,105,110,39,93,41,59,13,10,32,32,109,97,114,107,101,116,119,104,111,32
-,105,115,32,40,34,68,79,77,67,111,109,97,110,97,103,101,100,111,110,101,32,102,
-111,114,116,121,112,101,111,102,32,75,105,110,103,100,111,109,112,114,111,102,
-105,116,115,112,114,111,112,111,115,101,116,111,32,115,104,111,119,99,101,110,
-116,101,114,59,109,97,100,101,32,105,116,100,114,101,115,115,101,100,119,101,114
-,101,32,105,110,109,105,120,116,117,114,101,112,114,101,99,105,115,101,97,114,
-105,115,105,110,103,115,114,99,32,61,32,39,109,97,107,101,32,97,32,115,101,99,
-117,114,101,100,66,97,112,116,105,115,116,118,111,116,105,110,103,32,10,9,9,118,
-97,114,32,77,97,114,99,104,32,50,103,114,101,119,32,117,112,67,108,105,109,97,
-116,101,46,114,101,109,111,118,101,115,107,105,108,108,101,100,119,97,121,32,116
-,104,101,60,47,104,101,97,100,62,102,97,99,101,32,111,102,97,99,116,105,110,103,
-32,114,105,103,104,116,34,62,116,111,32,119,111,114,107,114,101,100,117,99,101,
-115,104,97,115,32,104,97,100,101,114,101,99,116,101,100,115,104,111,119,40,41,59
-,97,99,116,105,111,110,61,98,111,111,107,32,111,102,97,110,32,97,114,101,97,61,
-61,32,34,104,116,116,60,104,101,97,100,101,114,10,60,104,116,109,108,62,99,111,
-110,102,111,114,109,102,97,99,105,110,103,32,99,111,111,107,105,101,46,114,101,
-108,121,32,111,110,104,111,115,116,101,100,32,46,99,117,115,116,111,109,104,101,
-32,119,101,110,116,98,117,116,32,102,111,114,115,112,114,101,97,100,32,70,97,109
-,105,108,121,32,97,32,109,101,97,110,115,111,117,116,32,116,104,101,102,111,114,
-117,109,115,46,102,111,111,116,97,103,101,34,62,77,111,98,105,108,67,108,101,109
-,101,110,116,115,34,32,105,100,61,34,97,115,32,104,105,103,104,105,110,116,101,
-110,115,101,45,45,62,60,33,45,45,102,101,109,97,108,101,32,105,115,32,115,101,
-101,110,105,109,112,108,105,101,100,115,101,116,32,116,104,101,97,32,115,116,97,
-116,101,97,110,100,32,104,105,115,102,97,115,116,101,115,116,98,101,115,105,100,
-101,115,98,117,116,116,111,110,95,98,111,117,110,100,101,100,34,62,60,105,109,
-103,32,73,110,102,111,98,111,120,101,118,101,110,116,115,44,97,32,121,111,117,
-110,103,97,110,100,32,97,114,101,78,97,116,105,118,101,32,99,104,101,97,112,101,
-114,84,105,109,101,111,117,116,97,110,100,32,104,97,115,101,110,103,105,110,101,
-115,119,111,110,32,116,104,101,40,109,111,115,116,108,121,114,105,103,104,116,58
-,32,102,105,110,100,32,97,32,45,98,111,116,116,111,109,80,114,105,110,99,101,32,
-97,114,101,97,32,111,102,109,111,114,101,32,111,102,115,101,97,114,99,104,95,110
-,97,116,117,114,101,44,108,101,103,97,108,108,121,112,101,114,105,111,100,44,108
-,97,110,100,32,111,102,111,114,32,119,105,116,104,105,110,100,117,99,101,100,112
-,114,111,118,105,110,103,109,105,115,115,105,108,101,108,111,99,97,108,108,121,
-65,103,97,105,110,115,116,116,104,101,32,119,97,121,107,38,113,117,111,116,59,
-112,120,59,34,62,13,10,112,117,115,104,101,100,32,97,98,97,110,100,111,110,110,
-117,109,101,114,97,108,67,101,114,116,97,105,110,73,110,32,116,104,105,115,109,
-111,114,101,32,105,110,111,114,32,115,111,109,101,110,97,109,101,32,105,115,97,
-110,100,44,32,105,110,99,114,111,119,110,101,100,73,83,66,78,32,48,45,99,114,101
-,97,116,101,115,79,99,116,111,98,101,114,109,97,121,32,110,111,116,99,101,110,
-116,101,114,32,108,97,116,101,32,105,110,68,101,102,101,110,99,101,101,110,97,99
-,116,101,100,119,105,115,104,32,116,111,98,114,111,97,100,108,121,99,111,111,108
-,105,110,103,111,110,108,111,97,100,61,105,116,46,32,84,104,101,114,101,99,111,
-118,101,114,77,101,109,98,101,114,115,104,101,105,103,104,116,32,97,115,115,117,
-109,101,115,60,104,116,109,108,62,10,112,101,111,112,108,101,46,105,110,32,111,
-110,101,32,61,119,105,110,100,111,119,102,111,111,116,101,114,95,97,32,103,111,
-111,100,32,114,101,107,108,97,109,97,111,116,104,101,114,115,44,116,111,32,116,
-104,105,115,95,99,111,111,107,105,101,112,97,110,101,108,34,62,76,111,110,100,
-111,110,44,100,101,102,105,110,101,115,99,114,117,115,104,101,100,98,97,112,116,
-105,115,109,99,111,97,115,116,97,108,115,116,97,116,117,115,32,116,105,116,108,
-101,34,32,109,111,118,101,32,116,111,108,111,115,116,32,105,110,98,101,116,116,
-101,114,32,105,109,112,108,105,101,115,114,105,118,97,108,114,121,115,101,114,
-118,101,114,115,32,83,121,115,116,101,109,80,101,114,104,97,112,115,101,115,32,
-97,110,100,32,99,111,110,116,101,110,100,102,108,111,119,105,110,103,108,97,115,
-116,101,100,32,114,105,115,101,32,105,110,71,101,110,101,115,105,115,118,105,101
-,119,32,111,102,114,105,115,105,110,103,32,115,101,101,109,32,116,111,98,117,116
-,32,105,110,32,98,97,99,107,105,110,103,104,101,32,119,105,108,108,103,105,118,
-101,110,32,97,103,105,118,105,110,103,32,99,105,116,105,101,115,46,102,108,111,
-119,32,111,102,32,76,97,116,101,114,32,97,108,108,32,98,117,116,72,105,103,104,
-119,97,121,111,110,108,121,32,98,121,115,105,103,110,32,111,102,104,101,32,100,
-111,101,115,100,105,102,102,101,114,115,98,97,116,116,101,114,121,38,97,109,112,
-59,108,97,115,105,110,103,108,101,115,116,104,114,101,97,116,115,105,110,116,101
-,103,101,114,116,97,107,101,32,111,110,114,101,102,117,115,101,100,99,97,108,108
-,101,100,32,61,85,83,38,97,109,112,83,101,101,32,116,104,101,110,97,116,105,118,
-101,115,98,121,32,116,104,105,115,115,121,115,116,101,109,46,104,101,97,100,32,
-111,102,58,104,111,118,101,114,44,108,101,115,98,105,97,110,115,117,114,110,97,
-109,101,97,110,100,32,97,108,108,99,111,109,109,111,110,47,104,101,97,100,101,
-114,95,95,112,97,114,97,109,115,72,97,114,118,97,114,100,47,112,105,120,101,108,
-46,114,101,109,111,118,97,108,115,111,32,108,111,110,103,114,111,108,101,32,111,
-102,106,111,105,110,116,108,121,115,107,121,115,99,114,97,85,110,105,99,111,100,
-101,98,114,32,47,62,13,10,65,116,108,97,110,116,97,110,117,99,108,101,117,115,67
-,111,117,110,116,121,44,112,117,114,101,108,121,32,99,111,117,110,116,34,62,101,
-97,115,105,108,121,32,98,117,105,108,100,32,97,111,110,99,108,105,99,107,97,32,
-103,105,118,101,110,112,111,105,110,116,101,114,104,38,113,117,111,116,59,101,
-118,101,110,116,115,32,101,108,115,101,32,123,10,100,105,116,105,111,110,115,110
-,111,119,32,116,104,101,44,32,119,105,116,104,32,109,97,110,32,119,104,111,111,
-114,103,47,87,101,98,111,110,101,32,97,110,100,99,97,118,97,108,114,121,72,101,
-32,100,105,101,100,115,101,97,116,116,108,101,48,48,44,48,48,48,32,123,119,105,
-110,100,111,119,104,97,118,101,32,116,111,105,102,40,119,105,110,100,97,110,100,
-32,105,116,115,115,111,108,101,108,121,32,109,38,113,117,111,116,59,114,101,110,
-101,119,101,100,68,101,116,114,111,105,116,97,109,111,110,103,115,116,101,105,
-116,104,101,114,32,116,104,101,109,32,105,110,83,101,110,97,116,111,114,85,115,
-60,47,97,62,60,75,105,110,103,32,111,102,70,114,97,110,99,105,115,45,112,114,111
-,100,117,99,104,101,32,117,115,101,100,97,114,116,32,97,110,100,104,105,109,32,
-97,110,100,117,115,101,100,32,98,121,115,99,111,114,105,110,103,97,116,32,104,
-111,109,101,116,111,32,104,97,118,101,114,101,108,97,116,101,115,105,98,105,108,
-105,116,121,102,97,99,116,105,111,110,66,117,102,102,97,108,111,108,105,110,107,
-34,62,60,119,104,97,116,32,104,101,102,114,101,101,32,116,111,67,105,116,121,32,
-111,102,99,111,109,101,32,105,110,115,101,99,116,111,114,115,99,111,117,110,116,
-101,100,111,110,101,32,100,97,121,110,101,114,118,111,117,115,115,113,117,97,114
-,101,32,125,59,105,102,40,103,111,105,110,32,119,104,97,116,105,109,103,34,32,97
-,108,105,115,32,111,110,108,121,115,101,97,114,99,104,47,116,117,101,115,100,97,
-121,108,111,111,115,101,108,121,83,111,108,111,109,111,110,115,101,120,117,97,
-108,32,45,32,60,97,32,104,114,109,101,100,105,117,109,34,68,79,32,78,79,84,32,70
-,114,97,110,99,101,44,119,105,116,104,32,97,32,119,97,114,32,97,110,100,115,101,
-99,111,110,100,32,116,97,107,101,32,97,32,62,13,10,13,10,13,10,109,97,114,107,
-101,116,46,104,105,103,104,119,97,121,100,111,110,101,32,105,110,99,116,105,118,
-105,116,121,34,108,97,115,116,34,62,111,98,108,105,103,101,100,114,105,115,101,
-32,116,111,34,117,110,100,101,102,105,109,97,100,101,32,116,111,32,69,97,114,108
-,121,32,112,114,97,105,115,101,100,105,110,32,105,116,115,32,102,111,114,32,104,
-105,115,97,116,104,108,101,116,101,74,117,112,105,116,101,114,89,97,104,111,111,
-33,32,116,101,114,109,101,100,32,115,111,32,109,97,110,121,114,101,97,108,108,
-121,32,115,46,32,84,104,101,32,97,32,119,111,109,97,110,63,118,97,108,117,101,61
-,100,105,114,101,99,116,32,114,105,103,104,116,34,32,98,105,99,121,99,108,101,97
-,99,105,110,103,61,34,100,97,121,32,97,110,100,115,116,97,116,105,110,103,82,97,
-116,104,101,114,44,104,105,103,104,101,114,32,79,102,102,105,99,101,32,97,114,
-101,32,110,111,119,116,105,109,101,115,44,32,119,104,101,110,32,97,32,112,97,121
-,32,102,111,114,111,110,32,116,104,105,115,45,108,105,110,107,34,62,59,98,111,
-114,100,101,114,97,114,111,117,110,100,32,97,110,110,117,97,108,32,116,104,101,
-32,78,101,119,112,117,116,32,116,104,101,46,99,111,109,34,32,116,97,107,105,110,
-32,116,111,97,32,98,114,105,101,102,40,105,110,32,116,104,101,103,114,111,117,
-112,115,46,59,32,119,105,100,116,104,101,110,122,121,109,101,115,115,105,109,112
-,108,101,32,105,110,32,108,97,116,101,123,114,101,116,117,114,110,116,104,101,
-114,97,112,121,97,32,112,111,105,110,116,98,97,110,110,105,110,103,105,110,107,
-115,34,62,10,40,41,59,34,32,114,101,97,32,112,108,97,99,101,92,117,48,48,51,67,
-97,97,98,111,117,116,32,97,116,114,62,13,10,9,9,99,99,111,117,110,116,32,103,105
-,118,101,115,32,97,60,83,67,82,73,80,84,82,97,105,108,119,97,121,116,104,101,109
-,101,115,47,116,111,111,108,98,111,120,66,121,73,100,40,34,120,104,117,109,97,
-110,115,44,119,97,116,99,104,101,115,105,110,32,115,111,109,101,32,105,102,32,40
-,119,105,99,111,109,105,110,103,32,102,111,114,109,97,116,115,32,85,110,100,101,
-114,32,98,117,116,32,104,97,115,104,97,110,100,101,100,32,109,97,100,101,32,98,
-121,116,104,97,110,32,105,110,102,101,97,114,32,111,102,100,101,110,111,116,101,
-100,47,105,102,114,97,109,101,108,101,102,116,32,105,110,118,111,108,116,97,103,
-101,105,110,32,101,97,99,104,97,38,113,117,111,116,59,98,97,115,101,32,111,102,
-73,110,32,109,97,110,121,117,110,100,101,114,103,111,114,101,103,105,109,101,115
-,97,99,116,105,111,110,32,60,47,112,62,13,10,60,117,115,116,111,109,86,97,59,38,
-103,116,59,60,47,105,109,112,111,114,116,115,111,114,32,116,104,97,116,109,111,
-115,116,108,121,32,38,97,109,112,59,114,101,32,115,105,122,101,61,34,60,47,97,62
-,60,47,104,97,32,99,108,97,115,115,112,97,115,115,105,118,101,72,111,115,116,32,
-61,32,87,104,101,116,104,101,114,102,101,114,116,105,108,101,86,97,114,105,111,
-117,115,61,91,93,59,40,102,117,99,97,109,101,114,97,115,47,62,60,47,116,100,62,
-97,99,116,115,32,97,115,73,110,32,115,111,109,101,62,13,10,13,10,60,33,111,114,
-103,97,110,105,115,32,60,98,114,32,47,62,66,101,105,106,105,110,103,99,97,116,97
-,108,195,160,100,101,117,116,115,99,104,101,117,114,111,112,101,117,101,117,115,
-107,97,114,97,103,97,101,105,108,103,101,115,118,101,110,115,107,97,101,115,112,
-97,195,177,97,109,101,110,115,97,106,101,117,115,117,97,114,105,111,116,114,97,
-98,97,106,111,109,195,169,120,105,99,111,112,195,161,103,105,110,97,115,105,101,
-109,112,114,101,115,105,115,116,101,109,97,111,99,116,117,98,114,101,100,117,114
-,97,110,116,101,97,195,177,97,100,105,114,101,109,112,114,101,115,97,109,111,109
-,101,110,116,111,110,117,101,115,116,114,111,112,114,105,109,101,114,97,116,114,
-97,118,195,169,115,103,114,97,99,105,97,115,110,117,101,115,116,114,97,112,114,
-111,99,101,115,111,101,115,116,97,100,111,115,99,97,108,105,100,97,100,112,101,
-114,115,111,110,97,110,195,186,109,101,114,111,97,99,117,101,114,100,111,109,195
-,186,115,105,99,97,109,105,101,109,98,114,111,111,102,101,114,116,97,115,97,108,
-103,117,110,111,115,112,97,195,173,115,101,115,101,106,101,109,112,108,111,100,
-101,114,101,99,104,111,97,100,101,109,195,161,115,112,114,105,118,97,100,111,97,
-103,114,101,103,97,114,101,110,108,97,99,101,115,112,111,115,105,98,108,101,104,
-111,116,101,108,101,115,115,101,118,105,108,108,97,112,114,105,109,101,114,111,
-195,186,108,116,105,109,111,101,118,101,110,116,111,115,97,114,99,104,105,118,
-111,99,117,108,116,117,114,97,109,117,106,101,114,101,115,101,110,116,114,97,100
-,97,97,110,117,110,99,105,111,101,109,98,97,114,103,111,109,101,114,99,97,100,
-111,103,114,97,110,100,101,115,101,115,116,117,100,105,111,109,101,106,111,114,
-101,115,102,101,98,114,101,114,111,100,105,115,101,195,177,111,116,117,114,105,
-115,109,111,99,195,179,100,105,103,111,112,111,114,116,97,100,97,101,115,112,97,
-99,105,111,102,97,109,105,108,105,97,97,110,116,111,110,105,111,112,101,114,109,
-105,116,101,103,117,97,114,100,97,114,97,108,103,117,110,97,115,112,114,101,99,
-105,111,115,97,108,103,117,105,101,110,115,101,110,116,105,100,111,118,105,115,
-105,116,97,115,116,195,173,116,117,108,111,99,111,110,111,99,101,114,115,101,103
-,117,110,100,111,99,111,110,115,101,106,111,102,114,97,110,99,105,97,109,105,110
-,117,116,111,115,115,101,103,117,110,100,97,116,101,110,101,109,111,115,101,102,
-101,99,116,111,115,109,195,161,108,97,103,97,115,101,115,105,195,179,110,114,101
-,118,105,115,116,97,103,114,97,110,97,100,97,99,111,109,112,114,97,114,105,110,
-103,114,101,115,111,103,97,114,99,195,173,97,97,99,99,105,195,179,110,101,99,117
-,97,100,111,114,113,117,105,101,110,101,115,105,110,99,108,117,115,111,100,101,
-98,101,114,195,161,109,97,116,101,114,105,97,104,111,109,98,114,101,115,109,117,
-101,115,116,114,97,112,111,100,114,195,173,97,109,97,195,177,97,110,97,195,186,
-108,116,105,109,97,101,115,116,97,109,111,115,111,102,105,99,105,97,108,116,97,
-109,98,105,101,110,110,105,110,103,195,186,110,115,97,108,117,100,111,115,112,
-111,100,101,109,111,115,109,101,106,111,114,97,114,112,111,115,105,116,105,111,
-110,98,117,115,105,110,101,115,115,104,111,109,101,112,97,103,101,115,101,99,117
-,114,105,116,121,108,97,110,103,117,97,103,101,115,116,97,110,100,97,114,100,99,
-97,109,112,97,105,103,110,102,101,97,116,117,114,101,115,99,97,116,101,103,111,
-114,121,101,120,116,101,114,110,97,108,99,104,105,108,100,114,101,110,114,101,
-115,101,114,118,101,100,114,101,115,101,97,114,99,104,101,120,99,104,97,110,103,
-101,102,97,118,111,114,105,116,101,116,101,109,112,108,97,116,101,109,105,108,
-105,116,97,114,121,105,110,100,117,115,116,114,121,115,101,114,118,105,99,101,
-115,109,97,116,101,114,105,97,108,112,114,111,100,117,99,116,115,122,45,105,110,
-100,101,120,58,99,111,109,109,101,110,116,115,115,111,102,116,119,97,114,101,99,
-111,109,112,108,101,116,101,99,97,108,101,110,100,97,114,112,108,97,116,102,111,
-114,109,97,114,116,105,99,108,101,115,114,101,113,117,105,114,101,100,109,111,
-118,101,109,101,110,116,113,117,101,115,116,105,111,110,98,117,105,108,100,105,
-110,103,112,111,108,105,116,105,99,115,112,111,115,115,105,98,108,101,114,101,
-108,105,103,105,111,110,112,104,121,115,105,99,97,108,102,101,101,100,98,97,99,
-107,114,101,103,105,115,116,101,114,112,105,99,116,117,114,101,115,100,105,115,
-97,98,108,101,100,112,114,111,116,111,99,111,108,97,117,100,105,101,110,99,101,
-115,101,116,116,105,110,103,115,97,99,116,105,118,105,116,121,101,108,101,109,
-101,110,116,115,108,101,97,114,110,105,110,103,97,110,121,116,104,105,110,103,97
-,98,115,116,114,97,99,116,112,114,111,103,114,101,115,115,111,118,101,114,118,
-105,101,119,109,97,103,97,122,105,110,101,101,99,111,110,111,109,105,99,116,114,
-97,105,110,105,110,103,112,114,101,115,115,117,114,101,118,97,114,105,111,117,
-115,32,60,115,116,114,111,110,103,62,112,114,111,112,101,114,116,121,115,104,111
-,112,112,105,110,103,116,111,103,101,116,104,101,114,97,100,118,97,110,99,101,
-100,98,101,104,97,118,105,111,114,100,111,119,110,108,111,97,100,102,101,97,116,
-117,114,101,100,102,111,111,116,98,97,108,108,115,101,108,101,99,116,101,100,76,
-97,110,103,117,97,103,101,100,105,115,116,97,110,99,101,114,101,109,101,109,98,
-101,114,116,114,97,99,107,105,110,103,112,97,115,115,119,111,114,100,109,111,100
-,105,102,105,101,100,115,116,117,100,101,110,116,115,100,105,114,101,99,116,108,
-121,102,105,103,104,116,105,110,103,110,111,114,116,104,101,114,110,100,97,116,
-97,98,97,115,101,102,101,115,116,105,118,97,108,98,114,101,97,107,105,110,103,
-108,111,99,97,116,105,111,110,105,110,116,101,114,110,101,116,100,114,111,112,
-100,111,119,110,112,114,97,99,116,105,99,101,101,118,105,100,101,110,99,101,102,
-117,110,99,116,105,111,110,109,97,114,114,105,97,103,101,114,101,115,112,111,110
-,115,101,112,114,111,98,108,101,109,115,110,101,103,97,116,105,118,101,112,114,
-111,103,114,97,109,115,97,110,97,108,121,115,105,115,114,101,108,101,97,115,101,
-100,98,97,110,110,101,114,34,62,112,117,114,99,104,97,115,101,112,111,108,105,99
-,105,101,115,114,101,103,105,111,110,97,108,99,114,101,97,116,105,118,101,97,114
-,103,117,109,101,110,116,98,111,111,107,109,97,114,107,114,101,102,101,114,114,
-101,114,99,104,101,109,105,99,97,108,100,105,118,105,115,105,111,110,99,97,108,
-108,98,97,99,107,115,101,112,97,114,97,116,101,112,114,111,106,101,99,116,115,99
-,111,110,102,108,105,99,116,104,97,114,100,119,97,114,101,105,110,116,101,114,
-101,115,116,100,101,108,105,118,101,114,121,109,111,117,110,116,97,105,110,111,
-98,116,97,105,110,101,100,61,32,102,97,108,115,101,59,102,111,114,40,118,97,114,
-32,97,99,99,101,112,116,101,100,99,97,112,97,99,105,116,121,99,111,109,112,117,
-116,101,114,105,100,101,110,116,105,116,121,97,105,114,99,114,97,102,116,101,109
-,112,108,111,121,101,100,112,114,111,112,111,115,101,100,100,111,109,101,115,116
-,105,99,105,110,99,108,117,100,101,115,112,114,111,118,105,100,101,100,104,111,
-115,112,105,116,97,108,118,101,114,116,105,99,97,108,99,111,108,108,97,112,115,
-101,97,112,112,114,111,97,99,104,112,97,114,116,110,101,114,115,108,111,103,111,
-34,62,60,97,100,97,117,103,104,116,101,114,97,117,116,104,111,114,34,32,99,117,
-108,116,117,114,97,108,102,97,109,105,108,105,101,115,47,105,109,97,103,101,115,
-47,97,115,115,101,109,98,108,121,112,111,119,101,114,102,117,108,116,101,97,99,
-104,105,110,103,102,105,110,105,115,104,101,100,100,105,115,116,114,105,99,116,
-99,114,105,116,105,99,97,108,99,103,105,45,98,105,110,47,112,117,114,112,111,115
-,101,115,114,101,113,117,105,114,101,115,101,108,101,99,116,105,111,110,98,101,
-99,111,109,105,110,103,112,114,111,118,105,100,101,115,97,99,97,100,101,109,105,
-99,101,120,101,114,99,105,115,101,97,99,116,117,97,108,108,121,109,101,100,105,
-99,105,110,101,99,111,110,115,116,97,110,116,97,99,99,105,100,101,110,116,77,97,
-103,97,122,105,110,101,100,111,99,117,109,101,110,116,115,116,97,114,116,105,110
-,103,98,111,116,116,111,109,34,62,111,98,115,101,114,118,101,100,58,32,38,113,
-117,111,116,59,101,120,116,101,110,100,101,100,112,114,101,118,105,111,117,115,
-83,111,102,116,119,97,114,101,99,117,115,116,111,109,101,114,100,101,99,105,115,
-105,111,110,115,116,114,101,110,103,116,104,100,101,116,97,105,108,101,100,115,
-108,105,103,104,116,108,121,112,108,97,110,110,105,110,103,116,101,120,116,97,
-114,101,97,99,117,114,114,101,110,99,121,101,118,101,114,121,111,110,101,115,116
-,114,97,105,103,104,116,116,114,97,110,115,102,101,114,112,111,115,105,116,105,
-118,101,112,114,111,100,117,99,101,100,104,101,114,105,116,97,103,101,115,104,
-105,112,112,105,110,103,97,98,115,111,108,117,116,101,114,101,99,101,105,118,101
-,100,114,101,108,101,118,97,110,116,98,117,116,116,111,110,34,32,118,105,111,108
-,101,110,99,101,97,110,121,119,104,101,114,101,98,101,110,101,102,105,116,115,
-108,97,117,110,99,104,101,100,114,101,99,101,110,116,108,121,97,108,108,105,97,
-110,99,101,102,111,108,108,111,119,101,100,109,117,108,116,105,112,108,101,98,
-117,108,108,101,116,105,110,105,110,99,108,117,100,101,100,111,99,99,117,114,114
-,101,100,105,110,116,101,114,110,97,108,36,40,116,104,105,115,41,46,114,101,112,
-117,98,108,105,99,62,60,116,114,62,60,116,100,99,111,110,103,114,101,115,115,114
-,101,99,111,114,100,101,100,117,108,116,105,109,97,116,101,115,111,108,117,116,
-105,111,110,60,117,108,32,105,100,61,34,100,105,115,99,111,118,101,114,72,111,
-109,101,60,47,97,62,119,101,98,115,105,116,101,115,110,101,116,119,111,114,107,
-115,97,108,116,104,111,117,103,104,101,110,116,105,114,101,108,121,109,101,109,
-111,114,105,97,108,109,101,115,115,97,103,101,115,99,111,110,116,105,110,117,101
-,97,99,116,105,118,101,34,62,115,111,109,101,119,104,97,116,118,105,99,116,111,
-114,105,97,87,101,115,116,101,114,110,32,32,116,105,116,108,101,61,34,76,111,99,
-97,116,105,111,110,99,111,110,116,114,97,99,116,118,105,115,105,116,111,114,115,
-68,111,119,110,108,111,97,100,119,105,116,104,111,117,116,32,114,105,103,104,116
-,34,62,10,109,101,97,115,117,114,101,115,119,105,100,116,104,32,61,32,118,97,114
-,105,97,98,108,101,105,110,118,111,108,118,101,100,118,105,114,103,105,110,105,
-97,110,111,114,109,97,108,108,121,104,97,112,112,101,110,101,100,97,99,99,111,
-117,110,116,115,115,116,97,110,100,105,110,103,110,97,116,105,111,110,97,108,82,
-101,103,105,115,116,101,114,112,114,101,112,97,114,101,100,99,111,110,116,114,
-111,108,115,97,99,99,117,114,97,116,101,98,105,114,116,104,100,97,121,115,116,
-114,97,116,101,103,121,111,102,102,105,99,105,97,108,103,114,97,112,104,105,99,
-115,99,114,105,109,105,110,97,108,112,111,115,115,105,98,108,121,99,111,110,115,
-117,109,101,114,80,101,114,115,111,110,97,108,115,112,101,97,107,105,110,103,118
-,97,108,105,100,97,116,101,97,99,104,105,101,118,101,100,46,106,112,103,34,32,47
-,62,109,97,99,104,105,110,101,115,60,47,104,50,62,10,32,32,107,101,121,119,111,
-114,100,115,102,114,105,101,110,100,108,121,98,114,111,116,104,101,114,115,99,
-111,109,98,105,110,101,100,111,114,105,103,105,110,97,108,99,111,109,112,111,115
-,101,100,101,120,112,101,99,116,101,100,97,100,101,113,117,97,116,101,112,97,107
-,105,115,116,97,110,102,111,108,108,111,119,34,32,118,97,108,117,97,98,108,101,
-60,47,108,97,98,101,108,62,114,101,108,97,116,105,118,101,98,114,105,110,103,105
-,110,103,105,110,99,114,101,97,115,101,103,111,118,101,114,110,111,114,112,108,
-117,103,105,110,115,47,76,105,115,116,32,111,102,32,72,101,97,100,101,114,34,62,
-34,32,110,97,109,101,61,34,32,40,38,113,117,111,116,59,103,114,97,100,117,97,116
-,101,60,47,104,101,97,100,62,10,99,111,109,109,101,114,99,101,109,97,108,97,121,
-115,105,97,100,105,114,101,99,116,111,114,109,97,105,110,116,97,105,110,59,104,
-101,105,103,104,116,58,115,99,104,101,100,117,108,101,99,104,97,110,103,105,110,
-103,98,97,99,107,32,116,111,32,99,97,116,104,111,108,105,99,112,97,116,116,101,
-114,110,115,99,111,108,111,114,58,32,35,103,114,101,97,116,101,115,116,115,117,
-112,112,108,105,101,115,114,101,108,105,97,98,108,101,60,47,117,108,62,10,9,9,60
-,115,101,108,101,99,116,32,99,105,116,105,122,101,110,115,99,108,111,116,104,105
-,110,103,119,97,116,99,104,105,110,103,60,108,105,32,105,100,61,34,115,112,101,
-99,105,102,105,99,99,97,114,114,121,105,110,103,115,101,110,116,101,110,99,101,
-60,99,101,110,116,101,114,62,99,111,110,116,114,97,115,116,116,104,105,110,107,
-105,110,103,99,97,116,99,104,40,101,41,115,111,117,116,104,101,114,110,77,105,99
-,104,97,101,108,32,109,101,114,99,104,97,110,116,99,97,114,111,117,115,101,108,
-112,97,100,100,105,110,103,58,105,110,116,101,114,105,111,114,46,115,112,108,105
-,116,40,34,108,105,122,97,116,105,111,110,79,99,116,111,98,101,114,32,41,123,114
-,101,116,117,114,110,105,109,112,114,111,118,101,100,45,45,38,103,116,59,10,10,
-99,111,118,101,114,97,103,101,99,104,97,105,114,109,97,110,46,112,110,103,34,32,
-47,62,115,117,98,106,101,99,116,115,82,105,99,104,97,114,100,32,119,104,97,116,
-101,118,101,114,112,114,111,98,97,98,108,121,114,101,99,111,118,101,114,121,98,
-97,115,101,98,97,108,108,106,117,100,103,109,101,110,116,99,111,110,110,101,99,
-116,46,46,99,115,115,34,32,47,62,32,119,101,98,115,105,116,101,114,101,112,111,
-114,116,101,100,100,101,102,97,117,108,116,34,47,62,60,47,97,62,13,10,101,108,
-101,99,116,114,105,99,115,99,111,116,108,97,110,100,99,114,101,97,116,105,111,
-110,113,117,97,110,116,105,116,121,46,32,73,83,66,78,32,48,100,105,100,32,110,
-111,116,32,105,110,115,116,97,110,99,101,45,115,101,97,114,99,104,45,34,32,108,
-97,110,103,61,34,115,112,101,97,107,101,114,115,67,111,109,112,117,116,101,114,
-99,111,110,116,97,105,110,115,97,114,99,104,105,118,101,115,109,105,110,105,115,
-116,101,114,114,101,97,99,116,105,111,110,100,105,115,99,111,117,110,116,73,116,
-97,108,105,97,110,111,99,114,105,116,101,114,105,97,115,116,114,111,110,103,108,
-121,58,32,39,104,116,116,112,58,39,115,99,114,105,112,116,39,99,111,118,101,114,
-105,110,103,111,102,102,101,114,105,110,103,97,112,112,101,97,114,101,100,66,114
-,105,116,105,115,104,32,105,100,101,110,116,105,102,121,70,97,99,101,98,111,111,
-107,110,117,109,101,114,111,117,115,118,101,104,105,99,108,101,115,99,111,110,99
-,101,114,110,115,65,109,101,114,105,99,97,110,104,97,110,100,108,105,110,103,100
-,105,118,32,105,100,61,34,87,105,108,108,105,97,109,32,112,114,111,118,105,100,
-101,114,95,99,111,110,116,101,110,116,97,99,99,117,114,97,99,121,115,101,99,116,
-105,111,110,32,97,110,100,101,114,115,111,110,102,108,101,120,105,98,108,101,67,
-97,116,101,103,111,114,121,108,97,119,114,101,110,99,101,60,115,99,114,105,112,
-116,62,108,97,121,111,117,116,61,34,97,112,112,114,111,118,101,100,32,109,97,120
-,105,109,117,109,104,101,97,100,101,114,34,62,60,47,116,97,98,108,101,62,83,101,
-114,118,105,99,101,115,104,97,109,105,108,116,111,110,99,117,114,114,101,110,116
-,32,99,97,110,97,100,105,97,110,99,104,97,110,110,101,108,115,47,116,104,101,109
-,101,115,47,47,97,114,116,105,99,108,101,111,112,116,105,111,110,97,108,112,111,
-114,116,117,103,97,108,118,97,108,117,101,61,34,34,105,110,116,101,114,118,97,
-108,119,105,114,101,108,101,115,115,101,110,116,105,116,108,101,100,97,103,101,
-110,99,105,101,115,83,101,97,114,99,104,34,32,109,101,97,115,117,114,101,100,116
-,104,111,117,115,97,110,100,115,112,101,110,100,105,110,103,38,104,101,108,108,
-105,112,59,110,101,119,32,68,97,116,101,34,32,115,105,122,101,61,34,112,97,103,
-101,78,97,109,101,109,105,100,100,108,101,34,32,34,32,47,62,60,47,97,62,104,105,
-100,100,101,110,34,62,115,101,113,117,101,110,99,101,112,101,114,115,111,110,97,
-108,111,118,101,114,102,108,111,119,111,112,105,110,105,111,110,115,105,108,108,
-105,110,111,105,115,108,105,110,107,115,34,62,10,9,60,116,105,116,108,101,62,118
-,101,114,115,105,111,110,115,115,97,116,117,114,100,97,121,116,101,114,109,105,
-110,97,108,105,116,101,109,112,114,111,112,101,110,103,105,110,101,101,114,115,
-101,99,116,105,111,110,115,100,101,115,105,103,110,101,114,112,114,111,112,111,
-115,97,108,61,34,102,97,108,115,101,34,69,115,112,97,195,177,111,108,114,101,108
-,101,97,115,101,115,115,117,98,109,105,116,34,32,101,114,38,113,117,111,116,59,
-97,100,100,105,116,105,111,110,115,121,109,112,116,111,109,115,111,114,105,101,
-110,116,101,100,114,101,115,111,117,114,99,101,114,105,103,104,116,34,62,60,112,
-108,101,97,115,117,114,101,115,116,97,116,105,111,110,115,104,105,115,116,111,
-114,121,46,108,101,97,118,105,110,103,32,32,98,111,114,100,101,114,61,99,111,110
-,116,101,110,116,115,99,101,110,116,101,114,34,62,46,10,10,83,111,109,101,32,100
-,105,114,101,99,116,101,100,115,117,105,116,97,98,108,101,98,117,108,103,97,114,
-105,97,46,115,104,111,119,40,41,59,100,101,115,105,103,110,101,100,71,101,110,
-101,114,97,108,32,99,111,110,99,101,112,116,115,69,120,97,109,112,108,101,115,
-119,105,108,108,105,97,109,115,79,114,105,103,105,110,97,108,34,62,60,115,112,97
-,110,62,115,101,97,114,99,104,34,62,111,112,101,114,97,116,111,114,114,101,113,
-117,101,115,116,115,97,32,38,113,117,111,116,59,97,108,108,111,119,105,110,103,
-68,111,99,117,109,101,110,116,114,101,118,105,115,105,111,110,46,32,10,10,84,104
-,101,32,121,111,117,114,115,101,108,102,67,111,110,116,97,99,116,32,109,105,99,
-104,105,103,97,110,69,110,103,108,105,115,104,32,99,111,108,117,109,98,105,97,
-112,114,105,111,114,105,116,121,112,114,105,110,116,105,110,103,100,114,105,110,
-107,105,110,103,102,97,99,105,108,105,116,121,114,101,116,117,114,110,101,100,67
-,111,110,116,101,110,116,32,111,102,102,105,99,101,114,115,82,117,115,115,105,97
-,110,32,103,101,110,101,114,97,116,101,45,56,56,53,57,45,49,34,105,110,100,105,
-99,97,116,101,102,97,109,105,108,105,97,114,32,113,117,97,108,105,116,121,109,97
-,114,103,105,110,58,48,32,99,111,110,116,101,110,116,118,105,101,119,112,111,114
-,116,99,111,110,116,97,99,116,115,45,116,105,116,108,101,34,62,112,111,114,116,
-97,98,108,101,46,108,101,110,103,116,104,32,101,108,105,103,105,98,108,101,105,
-110,118,111,108,118,101,115,97,116,108,97,110,116,105,99,111,110,108,111,97,100,
-61,34,100,101,102,97,117,108,116,46,115,117,112,112,108,105,101,100,112,97,121,
-109,101,110,116,115,103,108,111,115,115,97,114,121,10,10,65,102,116,101,114,32,
-103,117,105,100,97,110,99,101,60,47,116,100,62,60,116,100,101,110,99,111,100,105
-,110,103,109,105,100,100,108,101,34,62,99,97,109,101,32,116,111,32,100,105,115,
-112,108,97,121,115,115,99,111,116,116,105,115,104,106,111,110,97,116,104,97,110,
-109,97,106,111,114,105,116,121,119,105,100,103,101,116,115,46,99,108,105,110,105
-,99,97,108,116,104,97,105,108,97,110,100,116,101,97,99,104,101,114,115,60,104,
-101,97,100,62,10,9,97,102,102,101,99,116,101,100,115,117,112,112,111,114,116,115
-,112,111,105,110,116,101,114,59,116,111,83,116,114,105,110,103,60,47,115,109,97,
-108,108,62,111,107,108,97,104,111,109,97,119,105,108,108,32,98,101,32,105,110,
-118,101,115,116,111,114,48,34,32,97,108,116,61,34,104,111,108,105,100,97,121,115
-,82,101,115,111,117,114,99,101,108,105,99,101,110,115,101,100,32,40,119,104,105,
-99,104,32,46,32,65,102,116,101,114,32,99,111,110,115,105,100,101,114,118,105,115
-,105,116,105,110,103,101,120,112,108,111,114,101,114,112,114,105,109,97,114,121,
-32,115,101,97,114,99,104,34,32,97,110,100,114,111,105,100,34,113,117,105,99,107,
-108,121,32,109,101,101,116,105,110,103,115,101,115,116,105,109,97,116,101,59,114
-,101,116,117,114,110,32,59,99,111,108,111,114,58,35,32,104,101,105,103,104,116,
-61,97,112,112,114,111,118,97,108,44,32,38,113,117,111,116,59,32,99,104,101,99,
-107,101,100,46,109,105,110,46,106,115,34,109,97,103,110,101,116,105,99,62,60,47,
-97,62,60,47,104,102,111,114,101,99,97,115,116,46,32,87,104,105,108,101,32,116,
-104,117,114,115,100,97,121,100,118,101,114,116,105,115,101,38,101,97,99,117,116,
-101,59,104,97,115,67,108,97,115,115,101,118,97,108,117,97,116,101,111,114,100,
-101,114,105,110,103,101,120,105,115,116,105,110,103,112,97,116,105,101,110,116,
-115,32,79,110,108,105,110,101,32,99,111,108,111,114,97,100,111,79,112,116,105,
-111,110,115,34,99,97,109,112,98,101,108,108,60,33,45,45,32,101,110,100,60,47,115
-,112,97,110,62,60,60,98,114,32,47,62,13,10,95,112,111,112,117,112,115,124,115,99
-,105,101,110,99,101,115,44,38,113,117,111,116,59,32,113,117,97,108,105,116,121,
-32,87,105,110,100,111,119,115,32,97,115,115,105,103,110,101,100,104,101,105,103,
-104,116,58,32,60,98,32,99,108,97,115,115,108,101,38,113,117,111,116,59,32,118,97
-,108,117,101,61,34,32,67,111,109,112,97,110,121,101,120,97,109,112,108,101,115,
-60,105,102,114,97,109,101,32,98,101,108,105,101,118,101,115,112,114,101,115,101,
-110,116,115,109,97,114,115,104,97,108,108,112,97,114,116,32,111,102,32,112,114,
-111,112,101,114,108,121,41,46,10,10,84,104,101,32,116,97,120,111,110,111,109,121
-,109,117,99,104,32,111,102,32,60,47,115,112,97,110,62,10,34,32,100,97,116,97,45,
-115,114,116,117,103,117,195,170,115,115,99,114,111,108,108,84,111,32,112,114,111
-,106,101,99,116,60,104,101,97,100,62,13,10,97,116,116,111,114,110,101,121,101,
-109,112,104,97,115,105,115,115,112,111,110,115,111,114,115,102,97,110,99,121,98,
-111,120,119,111,114,108,100,39,115,32,119,105,108,100,108,105,102,101,99,104,101
-,99,107,101,100,61,115,101,115,115,105,111,110,115,112,114,111,103,114,97,109,
-109,112,120,59,102,111,110,116,45,32,80,114,111,106,101,99,116,106,111,117,114,
-110,97,108,115,98,101,108,105,101,118,101,100,118,97,99,97,116,105,111,110,116,
-104,111,109,112,115,111,110,108,105,103,104,116,105,110,103,97,110,100,32,116,
-104,101,32,115,112,101,99,105,97,108,32,98,111,114,100,101,114,61,48,99,104,101,
-99,107,105,110,103,60,47,116,98,111,100,121,62,60,98,117,116,116,111,110,32,67,
-111,109,112,108,101,116,101,99,108,101,97,114,102,105,120,10,60,104,101,97,100,
-62,10,97,114,116,105,99,108,101,32,60,115,101,99,116,105,111,110,102,105,110,100
-,105,110,103,115,114,111,108,101,32,105,110,32,112,111,112,117,108,97,114,32,32,
-79,99,116,111,98,101,114,119,101,98,115,105,116,101,32,101,120,112,111,115,117,
-114,101,117,115,101,100,32,116,111,32,32,99,104,97,110,103,101,115,111,112,101,
-114,97,116,101,100,99,108,105,99,107,105,110,103,101,110,116,101,114,105,110,103
-,99,111,109,109,97,110,100,115,105,110,102,111,114,109,101,100,32,110,117,109,98
-,101,114,115,32,32,60,47,100,105,118,62,99,114,101,97,116,105,110,103,111,110,83
-,117,98,109,105,116,109,97,114,121,108,97,110,100,99,111,108,108,101,103,101,115
-,97,110,97,108,121,116,105,99,108,105,115,116,105,110,103,115,99,111,110,116,97,
-99,116,46,108,111,103,103,101,100,73,110,97,100,118,105,115,111,114,121,115,105,
-98,108,105,110,103,115,99,111,110,116,101,110,116,34,115,38,113,117,111,116,59,
-41,115,46,32,84,104,105,115,32,112,97,99,107,97,103,101,115,99,104,101,99,107,98
-,111,120,115,117,103,103,101,115,116,115,112,114,101,103,110,97,110,116,116,111,
-109,111,114,114,111,119,115,112,97,99,105,110,103,61,105,99,111,110,46,112,110,
-103,106,97,112,97,110,101,115,101,99,111,100,101,98,97,115,101,98,117,116,116,
-111,110,34,62,103,97,109,98,108,105,110,103,115,117,99,104,32,97,115,32,44,32,
-119,104,105,108,101,32,60,47,115,112,97,110,62,32,109,105,115,115,111,117,114,
-105,115,112,111,114,116,105,110,103,116,111,112,58,49,112,120,32,46,60,47,115,
-112,97,110,62,116,101,110,115,105,111,110,115,119,105,100,116,104,61,34,50,108,
-97,122,121,108,111,97,100,110,111,118,101,109,98,101,114,117,115,101,100,32,105,
-110,32,104,101,105,103,104,116,61,34,99,114,105,112,116,34,62,10,38,110,98,115,
-112,59,60,47,60,116,114,62,60,116,100,32,104,101,105,103,104,116,58,50,47,112,
-114,111,100,117,99,116,99,111,117,110,116,114,121,32,105,110,99,108,117,100,101,
-32,102,111,111,116,101,114,34,32,38,108,116,59,33,45,45,32,116,105,116,108,101,
-34,62,60,47,106,113,117,101,114,121,46,60,47,102,111,114,109,62,10,40,231,174,
-128,228,189,147,41,40,231,185,129,233,171,148,41,104,114,118,97,116,115,107,105,
-105,116,97,108,105,97,110,111,114,111,109,195,162,110,196,131,116,195,188,114,
-107,195,167,101,216,167,216,177,216,175,217,136,116,97,109,98,105,195,169,110,
-110,111,116,105,99,105,97,115,109,101,110,115,97,106,101,115,112,101,114,115,111
-,110,97,115,100,101,114,101,99,104,111,115,110,97,99,105,111,110,97,108,115,101,
-114,118,105,99,105,111,99,111,110,116,97,99,116,111,117,115,117,97,114,105,111,
-115,112,114,111,103,114,97,109,97,103,111,98,105,101,114,110,111,101,109,112,114
-,101,115,97,115,97,110,117,110,99,105,111,115,118,97,108,101,110,99,105,97,99,
-111,108,111,109,98,105,97,100,101,115,112,117,195,169,115,100,101,112,111,114,
-116,101,115,112,114,111,121,101,99,116,111,112,114,111,100,117,99,116,111,112,
-195,186,98,108,105,99,111,110,111,115,111,116,114,111,115,104,105,115,116,111,
-114,105,97,112,114,101,115,101,110,116,101,109,105,108,108,111,110,101,115,109,
-101,100,105,97,110,116,101,112,114,101,103,117,110,116,97,97,110,116,101,114,105
-,111,114,114,101,99,117,114,115,111,115,112,114,111,98,108,101,109,97,115,97,110
-,116,105,97,103,111,110,117,101,115,116,114,111,115,111,112,105,110,105,195,179,
-110,105,109,112,114,105,109,105,114,109,105,101,110,116,114,97,115,97,109,195,
-169,114,105,99,97,118,101,110,100,101,100,111,114,115,111,99,105,101,100,97,100,
-114,101,115,112,101,99,116,111,114,101,97,108,105,122,97,114,114,101,103,105,115
-,116,114,111,112,97,108,97,98,114,97,115,105,110,116,101,114,195,169,115,101,110
-,116,111,110,99,101,115,101,115,112,101,99,105,97,108,109,105,101,109,98,114,111
-,115,114,101,97,108,105,100,97,100,99,195,179,114,100,111,98,97,122,97,114,97,
-103,111,122,97,112,195,161,103,105,110,97,115,115,111,99,105,97,108,101,115,98,
-108,111,113,117,101,97,114,103,101,115,116,105,195,179,110,97,108,113,117,105,
-108,101,114,115,105,115,116,101,109,97,115,99,105,101,110,99,105,97,115,99,111,
-109,112,108,101,116,111,118,101,114,115,105,195,179,110,99,111,109,112,108,101,
-116,97,101,115,116,117,100,105,111,115,112,195,186,98,108,105,99,97,111,98,106,
-101,116,105,118,111,97,108,105,99,97,110,116,101,98,117,115,99,97,100,111,114,99
-,97,110,116,105,100,97,100,101,110,116,114,97,100,97,115,97,99,99,105,111,110,
-101,115,97,114,99,104,105,118,111,115,115,117,112,101,114,105,111,114,109,97,121
-,111,114,195,173,97,97,108,101,109,97,110,105,97,102,117,110,99,105,195,179,110,
-195,186,108,116,105,109,111,115,104,97,99,105,101,110,100,111,97,113,117,101,108
-,108,111,115,101,100,105,99,105,195,179,110,102,101,114,110,97,110,100,111,97,
-109,98,105,101,110,116,101,102,97,99,101,98,111,111,107,110,117,101,115,116,114,
-97,115,99,108,105,101,110,116,101,115,112,114,111,99,101,115,111,115,98,97,115,
-116,97,110,116,101,112,114,101,115,101,110,116,97,114,101,112,111,114,116,97,114
-,99,111,110,103,114,101,115,111,112,117,98,108,105,99,97,114,99,111,109,101,114,
-99,105,111,99,111,110,116,114,97,116,111,106,195,179,118,101,110,101,115,100,105
-,115,116,114,105,116,111,116,195,169,99,110,105,99,97,99,111,110,106,117,110,116
-,111,101,110,101,114,103,195,173,97,116,114,97,98,97,106,97,114,97,115,116,117,
-114,105,97,115,114,101,99,105,101,110,116,101,117,116,105,108,105,122,97,114,98,
-111,108,101,116,195,173,110,115,97,108,118,97,100,111,114,99,111,114,114,101,99,
-116,97,116,114,97,98,97,106,111,115,112,114,105,109,101,114,111,115,110,101,103,
-111,99,105,111,115,108,105,98,101,114,116,97,100,100,101,116,97,108,108,101,115,
-112,97,110,116,97,108,108,97,112,114,195,179,120,105,109,111,97,108,109,101,114,
-195,173,97,97,110,105,109,97,108,101,115,113,117,105,195,169,110,101,115,99,111,
-114,97,122,195,179,110,115,101,99,99,105,195,179,110,98,117,115,99,97,110,100,
-111,111,112,99,105,111,110,101,115,101,120,116,101,114,105,111,114,99,111,110,99
-,101,112,116,111,116,111,100,97,118,195,173,97,103,97,108,101,114,195,173,97,101
-,115,99,114,105,98,105,114,109,101,100,105,99,105,110,97,108,105,99,101,110,99,
-105,97,99,111,110,115,117,108,116,97,97,115,112,101,99,116,111,115,99,114,195,
-173,116,105,99,97,100,195,179,108,97,114,101,115,106,117,115,116,105,99,105,97,
-100,101,98,101,114,195,161,110,112,101,114,195,173,111,100,111,110,101,99,101,
-115,105,116,97,109,97,110,116,101,110,101,114,112,101,113,117,101,195,177,111,
-114,101,99,105,98,105,100,97,116,114,105,98,117,110,97,108,116,101,110,101,114,
-105,102,101,99,97,110,99,105,195,179,110,99,97,110,97,114,105,97,115,100,101,115
-,99,97,114,103,97,100,105,118,101,114,115,111,115,109,97,108,108,111,114,99,97,
-114,101,113,117,105,101,114,101,116,195,169,99,110,105,99,111,100,101,98,101,114
-,195,173,97,118,105,118,105,101,110,100,97,102,105,110,97,110,122,97,115,97,100,
-101,108,97,110,116,101,102,117,110,99,105,111,110,97,99,111,110,115,101,106,111,
-115,100,105,102,195,173,99,105,108,99,105,117,100,97,100,101,115,97,110,116,105,
-103,117,97,115,97,118,97,110,122,97,100,97,116,195,169,114,109,105,110,111,117,
-110,105,100,97,100,101,115,115,195,161,110,99,104,101,122,99,97,109,112,97,195,
-177,97,115,111,102,116,111,110,105,99,114,101,118,105,115,116,97,115,99,111,110,
-116,105,101,110,101,115,101,99,116,111,114,101,115,109,111,109,101,110,116,111,
-115,102,97,99,117,108,116,97,100,99,114,195,169,100,105,116,111,100,105,118,101,
-114,115,97,115,115,117,112,117,101,115,116,111,102,97,99,116,111,114,101,115,115
-,101,103,117,110,100,111,115,112,101,113,117,101,195,177,97,208,179,208,190,208,
-180,208,176,208,181,209,129,208,187,208,184,208,181,209,129,209,130,209,140,208,
-177,209,139,208,187,208,190,208,177,209,139,209,130,209,140,209,141,209,130,208,
-190,208,188,208,149,209,129,208,187,208,184,209,130,208,190,208,179,208,190,208,
-188,208,181,208,189,209,143,208,178,209,129,208,181,209,133,209,141,209,130,208,
-190,208,185,208,180,208,176,208,182,208,181,208,177,209,139,208,187,208,184,208,
-179,208,190,208,180,209,131,208,180,208,181,208,189,209,140,209,141,209,130,208,
-190,209,130,208,177,209,139,208,187,208,176,209,129,208,181,208,177,209,143,208,
-190,208,180,208,184,208,189,209,129,208,181,208,177,208,181,208,189,208,176,208,
-180,208,190,209,129,208,176,208,185,209,130,209,132,208,190,209,130,208,190,208,
-189,208,181,208,179,208,190,209,129,208,178,208,190,208,184,209,129,208,178,208,
-190,208,185,208,184,208,179,209,128,209,139,209,130,208,190,208,182,208,181,208,
-178,209,129,208,181,208,188,209,129,208,178,208,190,209,142,208,187,208,184,209,
-136,209,140,209,141,209,130,208,184,209,133,208,191,208,190,208,186,208,176,208,
-180,208,189,208,181,208,185,208,180,208,190,208,188,208,176,208,188,208,184,209,
-128,208,176,208,187,208,184,208,177,208,190,209,130,208,181,208,188,209,131,209,
-133,208,190,209,130,209,143,208,180,208,178,209,131,209,133,209,129,208,181,209,
-130,208,184,208,187,209,142,208,180,208,184,208,180,208,181,208,187,208,190,208,
-188,208,184,209,128,208,181,209,130,208,181,208,177,209,143,209,129,208,178,208,
-190,208,181,208,178,208,184,208,180,208,181,209,135,208,181,208,179,208,190,209,
-141,209,130,208,184,208,188,209,129,209,135,208,181,209,130,209,130,208,181,208,
-188,209,139,209,134,208,181,208,189,209,139,209,129,209,130,208,176,208,187,208,
-178,208,181,208,180,209,140,209,130,208,181,208,188,208,181,208,178,208,190,208,
-180,209,139,209,130,208,181,208,177,208,181,208,178,209,139,209,136,208,181,208,
-189,208,176,208,188,208,184,209,130,208,184,208,191,208,176,209,130,208,190,208,
-188,209,131,208,191,209,128,208,176,208,178,208,187,208,184,209,134,208,176,208,
-190,208,180,208,189,208,176,208,179,208,190,208,180,209,139,208,183,208,189,208,
-176,209,142,208,188,208,190,208,179,209,131,208,180,209,128,209,131,208,179,208,
-178,209,129,208,181,208,185,208,184,208,180,208,181,209,130,208,186,208,184,208,
-189,208,190,208,190,208,180,208,189,208,190,208,180,208,181,208,187,208,176,208,
-180,208,181,208,187,208,181,209,129,209,128,208,190,208,186,208,184,209,142,208,
-189,209,143,208,178,208,181,209,129,209,140,208,149,209,129,209,130,209,140,209,
-128,208,176,208,183,208,176,208,189,208,176,209,136,208,184,216,167,217,132,217,
-132,217,135,216,167,217,132,216,170,217,138,216,172,217,133,217,138,216,185,216,
-174,216,167,216,181,216,169,216,167,217,132,216,176,217,138,216,185,217,132,217,
-138,217,135,216,172,216,175,217,138,216,175,216,167,217,132,216,162,217,134,216,
-167,217,132,216,177,216,175,216,170,216,173,217,131,217,133,216,181,217,129,216,
-173,216,169,217,131,216,167,217,134,216,170,216,167,217,132,217,132,217,138,217,
-138,217,131,217,136,217,134,216,180,216,168,217,131,216,169,217,129,217,138,217,
-135,216,167,216,168,217,134,216,167,216,170,216,173,217,136,216,167,216,161,216,
-163,217,131,216,171,216,177,216,174,217,132,216,167,217,132,216,167,217,132,216,
-173,216,168,216,175,217,132,217,138,217,132,216,175,216,177,217,136,216,179,216,
-167,216,182,216,186,216,183,216,170,217,131,217,136,217,134,217,135,217,134,216,
-167,217,131,216,179,216,167,216,173,216,169,217,134,216,167,216,175,217,138,216,
-167,217,132,216,183,216,168,216,185,217,132,217,138,217,131,216,180,217,131,216,
-177,216,167,217,138,217,133,217,131,217,134,217,133,217,134,217,135,216,167,216,
-180,216,177,217,131,216,169,216,177,216,166,217,138,216,179,217,134,216,180,217,
-138,216,183,217,133,216,167,216,176,216,167,216,167,217,132,217,129,217,134,216,
-180,216,168,216,167,216,168,216,170,216,185,216,168,216,177,216,177,216,173,217,
-133,216,169,217,131,216,167,217,129,216,169,217,138,217,130,217,136,217,132,217,
-133,216,177,217,131,216,178,217,131,217,132,217,133,216,169,216,163,216,173,217,
-133,216,175,217,130,217,132,216,168,217,138,217,138,216,185,217,134,217,138,216,
-181,217,136,216,177,216,169,216,183,216,177,217,138,217,130,216,180,216,167,216,
-177,217,131,216,172,217,136,216,167,217,132,216,163,216,174,216,177,217,137,217,
-133,216,185,217,134,216,167,216,167,216,168,216,173,216,171,216,185,216,177,217,
-136,216,182,216,168,216,180,217,131,217,132,217,133,216,179,216,172,217,132,216,
-168,217,134,216,167,217,134,216,174,216,167,217,132,216,175,217,131,216,170,216,
-167,216,168,217,131,217,132,217,138,216,169,216,168,216,175,217,136,217,134,216,
-163,217,138,216,182,216,167,217,138,217,136,216,172,216,175,217,129,216,177,217,
-138,217,130,217,131,216,170,216,168,216,170,216,163,217,129,216,182,217,132,217,
-133,216,183,216,168,216,174,216,167,217,131,216,171,216,177,216,168,216,167,216,
-177,217,131,216,167,217,129,216,182,217,132,216,167,216,173,217,132,217,137,217,
-134,217,129,216,179,217,135,216,163,217,138,216,167,217,133,216,177,216,175,217,
-136,216,175,216,163,217,134,217,135,216,167,216,175,217,138,217,134,216,167,216,
-167,217,132,216,167,217,134,217,133,216,185,216,177,216,182,216,170,216,185,217,
-132,217,133,216,175,216,167,216,174,217,132,217,133,217,133,217,131,217,134,0,0,
-0,0,0,0,0,0,1,0,1,0,1,0,1,0,2,0,2,0,2,0,2,0,4,0,4,0,4,0,4,0,0,1,2,3,4,5,6,7,7,6,
-5,4,3,2,1,0,8,9,10,11,12,13,14,15,15,14,13,12,11,10,9,8,16,17,18,19,20,21,22,23,
-23,22,21,20,19,18,17,16,24,25,26,27,28,29,30,31,31,30,29,28,27,26,25,24,255,255,
-255,255,0,0,0,0,0,0,0,0,255,255,255,255,1,0,0,0,2,0,0,0,2,0,0,0,1,0,0,0,1,0,0,0,
-3,0,0,0,255,255,0,1,0,0,0,1,0,0,255,255,0,1,0,0,0,8,0,8,0,8,0,8,0,0,0,1,0,2,0,3,
-0,4,0,5,0,6,0,7,114,101,115,111,117,114,99,101,115,99,111,117,110,116,114,105,
-101,115,113,117,101,115,116,105,111,110,115,101,113,117,105,112,109,101,110,116,
-99,111,109,109,117,110,105,116,121,97,118,97,105,108,97,98,108,101,104,105,103,
-104,108,105,103,104,116,68,84,68,47,120,104,116,109,108,109,97,114,107,101,116,
-105,110,103,107,110,111,119,108,101,100,103,101,115,111,109,101,116,104,105,110,
-103,99,111,110,116,97,105,110,101,114,100,105,114,101,99,116,105,111,110,115,117
-,98,115,99,114,105,98,101,97,100,118,101,114,116,105,115,101,99,104,97,114,97,99
-,116,101,114,34,32,118,97,108,117,101,61,34,60,47,115,101,108,101,99,116,62,65,
-117,115,116,114,97,108,105,97,34,32,99,108,97,115,115,61,34,115,105,116,117,97,
-116,105,111,110,97,117,116,104,111,114,105,116,121,102,111,108,108,111,119,105,
-110,103,112,114,105,109,97,114,105,108,121,111,112,101,114,97,116,105,111,110,99
-,104,97,108,108,101,110,103,101,100,101,118,101,108,111,112,101,100,97,110,111,
-110,121,109,111,117,115,102,117,110,99,116,105,111,110,32,102,117,110,99,116,105
-,111,110,115,99,111,109,112,97,110,105,101,115,115,116,114,117,99,116,117,114,
-101,97,103,114,101,101,109,101,110,116,34,32,116,105,116,108,101,61,34,112,111,
-116,101,110,116,105,97,108,101,100,117,99,97,116,105,111,110,97,114,103,117,109,
-101,110,116,115,115,101,99,111,110,100,97,114,121,99,111,112,121,114,105,103,104
-,116,108,97,110,103,117,97,103,101,115,101,120,99,108,117,115,105,118,101,99,111
-,110,100,105,116,105,111,110,60,47,102,111,114,109,62,13,10,115,116,97,116,101,
-109,101,110,116,97,116,116,101,110,116,105,111,110,66,105,111,103,114,97,112,104
-,121,125,32,101,108,115,101,32,123,10,115,111,108,117,116,105,111,110,115,119,
-104,101,110,32,116,104,101,32,65,110,97,108,121,116,105,99,115,116,101,109,112,
-108,97,116,101,115,100,97,110,103,101,114,111,117,115,115,97,116,101,108,108,105
-,116,101,100,111,99,117,109,101,110,116,115,112,117,98,108,105,115,104,101,114,
-105,109,112,111,114,116,97,110,116,112,114,111,116,111,116,121,112,101,105,110,
-102,108,117,101,110,99,101,38,114,97,113,117,111,59,60,47,101,102,102,101,99,116
-,105,118,101,103,101,110,101,114,97,108,108,121,116,114,97,110,115,102,111,114,
-109,98,101,97,117,116,105,102,117,108,116,114,97,110,115,112,111,114,116,111,114
-,103,97,110,105,122,101,100,112,117,98,108,105,115,104,101,100,112,114,111,109,
-105,110,101,110,116,117,110,116,105,108,32,116,104,101,116,104,117,109,98,110,97
-,105,108,78,97,116,105,111,110,97,108,32,46,102,111,99,117,115,40,41,59,111,118,
-101,114,32,116,104,101,32,109,105,103,114,97,116,105,111,110,97,110,110,111,117,
-110,99,101,100,102,111,111,116,101,114,34,62,10,101,120,99,101,112,116,105,111,
-110,108,101,115,115,32,116,104,97,110,101,120,112,101,110,115,105,118,101,102,
-111,114,109,97,116,105,111,110,102,114,97,109,101,119,111,114,107,116,101,114,
-114,105,116,111,114,121,110,100,105,99,97,116,105,111,110,99,117,114,114,101,110
-,116,108,121,99,108,97,115,115,78,97,109,101,99,114,105,116,105,99,105,115,109,
-116,114,97,100,105,116,105,111,110,101,108,115,101,119,104,101,114,101,65,108,
-101,120,97,110,100,101,114,97,112,112,111,105,110,116,101,100,109,97,116,101,114
-,105,97,108,115,98,114,111,97,100,99,97,115,116,109,101,110,116,105,111,110,101,
-100,97,102,102,105,108,105,97,116,101,60,47,111,112,116,105,111,110,62,116,114,
-101,97,116,109,101,110,116,100,105,102,102,101,114,101,110,116,47,100,101,102,97
-,117,108,116,46,80,114,101,115,105,100,101,110,116,111,110,99,108,105,99,107,61,
-34,98,105,111,103,114,97,112,104,121,111,116,104,101,114,119,105,115,101,112,101
-,114,109,97,110,101,110,116,70,114,97,110,195,167,97,105,115,72,111,108,108,121,
-119,111,111,100,101,120,112,97,110,115,105,111,110,115,116,97,110,100,97,114,100
-,115,60,47,115,116,121,108,101,62,10,114,101,100,117,99,116,105,111,110,68,101,
-99,101,109,98,101,114,32,112,114,101,102,101,114,114,101,100,67,97,109,98,114,
-105,100,103,101,111,112,112,111,110,101,110,116,115,66,117,115,105,110,101,115,
-115,32,99,111,110,102,117,115,105,111,110,62,10,60,116,105,116,108,101,62,112,
-114,101,115,101,110,116,101,100,101,120,112,108,97,105,110,101,100,100,111,101,
-115,32,110,111,116,32,119,111,114,108,100,119,105,100,101,105,110,116,101,114,
-102,97,99,101,112,111,115,105,116,105,111,110,115,110,101,119,115,112,97,112,101
-,114,60,47,116,97,98,108,101,62,10,109,111,117,110,116,97,105,110,115,108,105,
-107,101,32,116,104,101,32,101,115,115,101,110,116,105,97,108,102,105,110,97,110,
-99,105,97,108,115,101,108,101,99,116,105,111,110,97,99,116,105,111,110,61,34,47,
-97,98,97,110,100,111,110,101,100,69,100,117,99,97,116,105,111,110,112,97,114,115
-,101,73,110,116,40,115,116,97,98,105,108,105,116,121,117,110,97,98,108,101,32,
-116,111,60,47,116,105,116,108,101,62,10,114,101,108,97,116,105,111,110,115,78,
-111,116,101,32,116,104,97,116,101,102,102,105,99,105,101,110,116,112,101,114,102
-,111,114,109,101,100,116,119,111,32,121,101,97,114,115,83,105,110,99,101,32,116,
-104,101,116,104,101,114,101,102,111,114,101,119,114,97,112,112,101,114,34,62,97,
-108,116,101,114,110,97,116,101,105,110,99,114,101,97,115,101,100,66,97,116,116,
-108,101,32,111,102,112,101,114,99,101,105,118,101,100,116,114,121,105,110,103,32
-,116,111,110,101,99,101,115,115,97,114,121,112,111,114,116,114,97,121,101,100,
-101,108,101,99,116,105,111,110,115,69,108,105,122,97,98,101,116,104,60,47,105,
-102,114,97,109,101,62,100,105,115,99,111,118,101,114,121,105,110,115,117,114,97,
-110,99,101,115,46,108,101,110,103,116,104,59,108,101,103,101,110,100,97,114,121,
-71,101,111,103,114,97,112,104,121,99,97,110,100,105,100,97,116,101,99,111,114,
-112,111,114,97,116,101,115,111,109,101,116,105,109,101,115,115,101,114,118,105,
-99,101,115,46,105,110,104,101,114,105,116,101,100,60,47,115,116,114,111,110,103,
-62,67,111,109,109,117,110,105,116,121,114,101,108,105,103,105,111,117,115,108,
-111,99,97,116,105,111,110,115,67,111,109,109,105,116,116,101,101,98,117,105,108,
-100,105,110,103,115,116,104,101,32,119,111,114,108,100,110,111,32,108,111,110,
-103,101,114,98,101,103,105,110,110,105,110,103,114,101,102,101,114,101,110,99,
-101,99,97,110,110,111,116,32,98,101,102,114,101,113,117,101,110,99,121,116,121,
-112,105,99,97,108,108,121,105,110,116,111,32,116,104,101,32,114,101,108,97,116,
-105,118,101,59,114,101,99,111,114,100,105,110,103,112,114,101,115,105,100,101,
-110,116,105,110,105,116,105,97,108,108,121,116,101,99,104,110,105,113,117,101,
-116,104,101,32,111,116,104,101,114,105,116,32,99,97,110,32,98,101,101,120,105,
-115,116,101,110,99,101,117,110,100,101,114,108,105,110,101,116,104,105,115,32,
-116,105,109,101,116,101,108,101,112,104,111,110,101,105,116,101,109,115,99,111,
-112,101,112,114,97,99,116,105,99,101,115,97,100,118,97,110,116,97,103,101,41,59,
-114,101,116,117,114,110,32,70,111,114,32,111,116,104,101,114,112,114,111,118,105
-,100,105,110,103,100,101,109,111,99,114,97,99,121,98,111,116,104,32,116,104,101,
-32,101,120,116,101,110,115,105,118,101,115,117,102,102,101,114,105,110,103,115,
-117,112,112,111,114,116,101,100,99,111,109,112,117,116,101,114,115,32,102,117,
-110,99,116,105,111,110,112,114,97,99,116,105,99,97,108,115,97,105,100,32,116,104
-,97,116,105,116,32,109,97,121,32,98,101,69,110,103,108,105,115,104,60,47,102,114
-,111,109,32,116,104,101,32,115,99,104,101,100,117,108,101,100,100,111,119,110,
-108,111,97,100,115,60,47,108,97,98,101,108,62,10,115,117,115,112,101,99,116,101,
-100,109,97,114,103,105,110,58,32,48,115,112,105,114,105,116,117,97,108,60,47,104
-,101,97,100,62,10,10,109,105,99,114,111,115,111,102,116,103,114,97,100,117,97,
-108,108,121,100,105,115,99,117,115,115,101,100,104,101,32,98,101,99,97,109,101,
-101,120,101,99,117,116,105,118,101,106,113,117,101,114,121,46,106,115,104,111,
-117,115,101,104,111,108,100,99,111,110,102,105,114,109,101,100,112,117,114,99,
-104,97,115,101,100,108,105,116,101,114,97,108,108,121,100,101,115,116,114,111,
-121,101,100,117,112,32,116,111,32,116,104,101,118,97,114,105,97,116,105,111,110,
-114,101,109,97,105,110,105,110,103,105,116,32,105,115,32,110,111,116,99,101,110,
-116,117,114,105,101,115,74,97,112,97,110,101,115,101,32,97,109,111,110,103,32,
-116,104,101,99,111,109,112,108,101,116,101,100,97,108,103,111,114,105,116,104,
-109,105,110,116,101,114,101,115,116,115,114,101,98,101,108,108,105,111,110,117,
-110,100,101,102,105,110,101,100,101,110,99,111,117,114,97,103,101,114,101,115,
-105,122,97,98,108,101,105,110,118,111,108,118,105,110,103,115,101,110,115,105,
-116,105,118,101,117,110,105,118,101,114,115,97,108,112,114,111,118,105,115,105,
-111,110,40,97,108,116,104,111,117,103,104,102,101,97,116,117,114,105,110,103,99,
-111,110,100,117,99,116,101,100,41,44,32,119,104,105,99,104,32,99,111,110,116,105
-,110,117,101,100,45,104,101,97,100,101,114,34,62,70,101,98,114,117,97,114,121,32
-,110,117,109,101,114,111,117,115,32,111,118,101,114,102,108,111,119,58,99,111,
-109,112,111,110,101,110,116,102,114,97,103,109,101,110,116,115,101,120,99,101,
-108,108,101,110,116,99,111,108,115,112,97,110,61,34,116,101,99,104,110,105,99,97
-,108,110,101,97,114,32,116,104,101,32,65,100,118,97,110,99,101,100,32,115,111,
-117,114,99,101,32,111,102,101,120,112,114,101,115,115,101,100,72,111,110,103,32,
-75,111,110,103,32,70,97,99,101,98,111,111,107,109,117,108,116,105,112,108,101,32
-,109,101,99,104,97,110,105,115,109,101,108,101,118,97,116,105,111,110,111,102,
-102,101,110,115,105,118,101,60,47,102,111,114,109,62,10,9,115,112,111,110,115,
-111,114,101,100,100,111,99,117,109,101,110,116,46,111,114,32,38,113,117,111,116,
-59,116,104,101,114,101,32,97,114,101,116,104,111,115,101,32,119,104,111,109,111,
-118,101,109,101,110,116,115,112,114,111,99,101,115,115,101,115,100,105,102,102,
-105,99,117,108,116,115,117,98,109,105,116,116,101,100,114,101,99,111,109,109,101
-,110,100,99,111,110,118,105,110,99,101,100,112,114,111,109,111,116,105,110,103,
-34,32,119,105,100,116,104,61,34,46,114,101,112,108,97,99,101,40,99,108,97,115,
-115,105,99,97,108,99,111,97,108,105,116,105,111,110,104,105,115,32,102,105,114,
-115,116,100,101,99,105,115,105,111,110,115,97,115,115,105,115,116,97,110,116,105
-,110,100,105,99,97,116,101,100,101,118,111,108,117,116,105,111,110,45,119,114,97
-,112,112,101,114,34,101,110,111,117,103,104,32,116,111,97,108,111,110,103,32,116
-,104,101,100,101,108,105,118,101,114,101,100,45,45,62,13,10,60,33,45,45,65,109,
-101,114,105,99,97,110,32,112,114,111,116,101,99,116,101,100,78,111,118,101,109,
-98,101,114,32,60,47,115,116,121,108,101,62,60,102,117,114,110,105,116,117,114,
-101,73,110,116,101,114,110,101,116,32,32,111,110,98,108,117,114,61,34,115,117,
-115,112,101,110,100,101,100,114,101,99,105,112,105,101,110,116,98,97,115,101,100
-,32,111,110,32,77,111,114,101,111,118,101,114,44,97,98,111,108,105,115,104,101,
-100,99,111,108,108,101,99,116,101,100,119,101,114,101,32,109,97,100,101,101,109,
-111,116,105,111,110,97,108,101,109,101,114,103,101,110,99,121,110,97,114,114,97,
-116,105,118,101,97,100,118,111,99,97,116,101,115,112,120,59,98,111,114,100,101,
-114,99,111,109,109,105,116,116,101,100,100,105,114,61,34,108,116,114,34,101,109,
-112,108,111,121,101,101,115,114,101,115,101,97,114,99,104,46,32,115,101,108,101,
-99,116,101,100,115,117,99,99,101,115,115,111,114,99,117,115,116,111,109,101,114,
-115,100,105,115,112,108,97,121,101,100,83,101,112,116,101,109,98,101,114,97,100,
-100,67,108,97,115,115,40,70,97,99,101,98,111,111,107,32,115,117,103,103,101,115,
-116,101,100,97,110,100,32,108,97,116,101,114,111,112,101,114,97,116,105,110,103,
-101,108,97,98,111,114,97,116,101,83,111,109,101,116,105,109,101,115,73,110,115,
-116,105,116,117,116,101,99,101,114,116,97,105,110,108,121,105,110,115,116,97,108
-,108,101,100,102,111,108,108,111,119,101,114,115,74,101,114,117,115,97,108,101,
-109,116,104,101,121,32,104,97,118,101,99,111,109,112,117,116,105,110,103,103,101
-,110,101,114,97,116,101,100,112,114,111,118,105,110,99,101,115,103,117,97,114,97
-,110,116,101,101,97,114,98,105,116,114,97,114,121,114,101,99,111,103,110,105,122
-,101,119,97,110,116,101,100,32,116,111,112,120,59,119,105,100,116,104,58,116,104
-,101,111,114,121,32,111,102,98,101,104,97,118,105,111,117,114,87,104,105,108,101
-,32,116,104,101,101,115,116,105,109,97,116,101,100,98,101,103,97,110,32,116,111,
-32,105,116,32,98,101,99,97,109,101,109,97,103,110,105,116,117,100,101,109,117,
-115,116,32,104,97,118,101,109,111,114,101,32,116,104,97,110,68,105,114,101,99,
-116,111,114,121,101,120,116,101,110,115,105,111,110,115,101,99,114,101,116,97,
-114,121,110,97,116,117,114,97,108,108,121,111,99,99,117,114,114,105,110,103,118,
-97,114,105,97,98,108,101,115,103,105,118,101,110,32,116,104,101,112,108,97,116,
-102,111,114,109,46,60,47,108,97,98,101,108,62,60,102,97,105,108,101,100,32,116,
-111,99,111,109,112,111,117,110,100,115,107,105,110,100,115,32,111,102,32,115,111
-,99,105,101,116,105,101,115,97,108,111,110,103,115,105,100,101,32,45,45,38,103,
-116,59,10,10,115,111,117,116,104,119,101,115,116,116,104,101,32,114,105,103,104,
-116,114,97,100,105,97,116,105,111,110,109,97,121,32,104,97,118,101,32,117,110,
-101,115,99,97,112,101,40,115,112,111,107,101,110,32,105,110,34,32,104,114,101,
-102,61,34,47,112,114,111,103,114,97,109,109,101,111,110,108,121,32,116,104,101,
-32,99,111,109,101,32,102,114,111,109,100,105,114,101,99,116,111,114,121,98,117,
-114,105,101,100,32,105,110,97,32,115,105,109,105,108,97,114,116,104,101,121,32,
-119,101,114,101,60,47,102,111,110,116,62,60,47,78,111,114,119,101,103,105,97,110
-,115,112,101,99,105,102,105,101,100,112,114,111,100,117,99,105,110,103,112,97,
-115,115,101,110,103,101,114,40,110,101,119,32,68,97,116,101,116,101,109,112,111,
-114,97,114,121,102,105,99,116,105,111,110,97,108,65,102,116,101,114,32,116,104,
-101,101,113,117,97,116,105,111,110,115,100,111,119,110,108,111,97,100,46,114,101
-,103,117,108,97,114,108,121,100,101,118,101,108,111,112,101,114,97,98,111,118,
-101,32,116,104,101,108,105,110,107,101,100,32,116,111,112,104,101,110,111,109,
-101,110,97,112,101,114,105,111,100,32,111,102,116,111,111,108,116,105,112,34,62,
-115,117,98,115,116,97,110,99,101,97,117,116,111,109,97,116,105,99,97,115,112,101
-,99,116,32,111,102,65,109,111,110,103,32,116,104,101,99,111,110,110,101,99,116,
-101,100,101,115,116,105,109,97,116,101,115,65,105,114,32,70,111,114,99,101,115,
-121,115,116,101,109,32,111,102,111,98,106,101,99,116,105,118,101,105,109,109,101
-,100,105,97,116,101,109,97,107,105,110,103,32,105,116,112,97,105,110,116,105,110
-,103,115,99,111,110,113,117,101,114,101,100,97,114,101,32,115,116,105,108,108,
-112,114,111,99,101,100,117,114,101,103,114,111,119,116,104,32,111,102,104,101,97
-,100,101,100,32,98,121,69,117,114,111,112,101,97,110,32,100,105,118,105,115,105,
-111,110,115,109,111,108,101,99,117,108,101,115,102,114,97,110,99,104,105,115,101
-,105,110,116,101,110,116,105,111,110,97,116,116,114,97,99,116,101,100,99,104,105
-,108,100,104,111,111,100,97,108,115,111,32,117,115,101,100,100,101,100,105,99,97
-,116,101,100,115,105,110,103,97,112,111,114,101,100,101,103,114,101,101,32,111,
-102,102,97,116,104,101,114,32,111,102,99,111,110,102,108,105,99,116,115,60,47,97
-,62,60,47,112,62,10,99,97,109,101,32,102,114,111,109,119,101,114,101,32,117,115,
-101,100,110,111,116,101,32,116,104,97,116,114,101,99,101,105,118,105,110,103,69,
-120,101,99,117,116,105,118,101,101,118,101,110,32,109,111,114,101,97,99,99,101,
-115,115,32,116,111,99,111,109,109,97,110,100,101,114,80,111,108,105,116,105,99,
-97,108,109,117,115,105,99,105,97,110,115,100,101,108,105,99,105,111,117,115,112,
-114,105,115,111,110,101,114,115,97,100,118,101,110,116,32,111,102,85,84,70,45,56
-,34,32,47,62,60,33,91,67,68,65,84,65,91,34,62,67,111,110,116,97,99,116,83,111,
-117,116,104,101,114,110,32,98,103,99,111,108,111,114,61,34,115,101,114,105,101,
-115,32,111,102,46,32,73,116,32,119,97,115,32,105,110,32,69,117,114,111,112,101,
-112,101,114,109,105,116,116,101,100,118,97,108,105,100,97,116,101,46,97,112,112,
-101,97,114,105,110,103,111,102,102,105,99,105,97,108,115,115,101,114,105,111,117
-,115,108,121,45,108,97,110,103,117,97,103,101,105,110,105,116,105,97,116,101,100
-,101,120,116,101,110,100,105,110,103,108,111,110,103,45,116,101,114,109,105,110,
-102,108,97,116,105,111,110,115,117,99,104,32,116,104,97,116,103,101,116,67,111,
-111,107,105,101,109,97,114,107,101,100,32,98,121,60,47,98,117,116,116,111,110,62
-,105,109,112,108,101,109,101,110,116,98,117,116,32,105,116,32,105,115,105,110,99
-,114,101,97,115,101,115,100,111,119,110,32,116,104,101,32,114,101,113,117,105,
-114,105,110,103,100,101,112,101,110,100,101,110,116,45,45,62,10,60,33,45,45,32,
-105,110,116,101,114,118,105,101,119,87,105,116,104,32,116,104,101,32,99,111,112,
-105,101,115,32,111,102,99,111,110,115,101,110,115,117,115,119,97,115,32,98,117,
-105,108,116,86,101,110,101,122,117,101,108,97,40,102,111,114,109,101,114,108,121
-,116,104,101,32,115,116,97,116,101,112,101,114,115,111,110,110,101,108,115,116,
-114,97,116,101,103,105,99,102,97,118,111,117,114,32,111,102,105,110,118,101,110,
-116,105,111,110,87,105,107,105,112,101,100,105,97,99,111,110,116,105,110,101,110
-,116,118,105,114,116,117,97,108,108,121,119,104,105,99,104,32,119,97,115,112,114
-,105,110,99,105,112,108,101,67,111,109,112,108,101,116,101,32,105,100,101,110,
-116,105,99,97,108,115,104,111,119,32,116,104,97,116,112,114,105,109,105,116,105,
-118,101,97,119,97,121,32,102,114,111,109,109,111,108,101,99,117,108,97,114,112,
-114,101,99,105,115,101,108,121,100,105,115,115,111,108,118,101,100,85,110,100,
-101,114,32,116,104,101,118,101,114,115,105,111,110,61,34,62,38,110,98,115,112,59
-,60,47,73,116,32,105,115,32,116,104,101,32,84,104,105,115,32,105,115,32,119,105,
-108,108,32,104,97,118,101,111,114,103,97,110,105,115,109,115,115,111,109,101,32,
-116,105,109,101,70,114,105,101,100,114,105,99,104,119,97,115,32,102,105,114,115,
-116,116,104,101,32,111,110,108,121,32,102,97,99,116,32,116,104,97,116,102,111,
-114,109,32,105,100,61,34,112,114,101,99,101,100,105,110,103,84,101,99,104,110,
-105,99,97,108,112,104,121,115,105,99,105,115,116,111,99,99,117,114,115,32,105,
-110,110,97,118,105,103,97,116,111,114,115,101,99,116,105,111,110,34,62,115,112,
-97,110,32,105,100,61,34,115,111,117,103,104,116,32,116,111,98,101,108,111,119,32
-,116,104,101,115,117,114,118,105,118,105,110,103,125,60,47,115,116,121,108,101,
-62,104,105,115,32,100,101,97,116,104,97,115,32,105,110,32,116,104,101,99,97,117,
-115,101,100,32,98,121,112,97,114,116,105,97,108,108,121,101,120,105,115,116,105,
-110,103,32,117,115,105,110,103,32,116,104,101,119,97,115,32,103,105,118,101,110,
-97,32,108,105,115,116,32,111,102,108,101,118,101,108,115,32,111,102,110,111,116,
-105,111,110,32,111,102,79,102,102,105,99,105,97,108,32,100,105,115,109,105,115,
-115,101,100,115,99,105,101,110,116,105,115,116,114,101,115,101,109,98,108,101,
-115,100,117,112,108,105,99,97,116,101,101,120,112,108,111,115,105,118,101,114,
-101,99,111,118,101,114,101,100,97,108,108,32,111,116,104,101,114,103,97,108,108,
-101,114,105,101,115,123,112,97,100,100,105,110,103,58,112,101,111,112,108,101,32
-,111,102,114,101,103,105,111,110,32,111,102,97,100,100,114,101,115,115,101,115,
-97,115,115,111,99,105,97,116,101,105,109,103,32,97,108,116,61,34,105,110,32,109,
-111,100,101,114,110,115,104,111,117,108,100,32,98,101,109,101,116,104,111,100,32
-,111,102,114,101,112,111,114,116,105,110,103,116,105,109,101,115,116,97,109,112,
-110,101,101,100,101,100,32,116,111,116,104,101,32,71,114,101,97,116,114,101,103,
-97,114,100,105,110,103,115,101,101,109,101,100,32,116,111,118,105,101,119,101,
-100,32,97,115,105,109,112,97,99,116,32,111,110,105,100,101,97,32,116,104,97,116,
-116,104,101,32,87,111,114,108,100,104,101,105,103,104,116,32,111,102,101,120,112
-,97,110,100,105,110,103,84,104,101,115,101,32,97,114,101,99,117,114,114,101,110,
-116,34,62,99,97,114,101,102,117,108,108,121,109,97,105,110,116,97,105,110,115,99
-,104,97,114,103,101,32,111,102,67,108,97,115,115,105,99,97,108,97,100,100,114,
-101,115,115,101,100,112,114,101,100,105,99,116,101,100,111,119,110,101,114,115,
-104,105,112,60,100,105,118,32,105,100,61,34,114,105,103,104,116,34,62,13,10,114,
-101,115,105,100,101,110,99,101,108,101,97,118,101,32,116,104,101,99,111,110,116,
-101,110,116,34,62,97,114,101,32,111,102,116,101,110,32,32,125,41,40,41,59,13,10,
-112,114,111,98,97,98,108,121,32,80,114,111,102,101,115,115,111,114,45,98,117,116
-,116,111,110,34,32,114,101,115,112,111,110,100,101,100,115,97,121,115,32,116,104
-,97,116,104,97,100,32,116,111,32,98,101,112,108,97,99,101,100,32,105,110,72,117,
-110,103,97,114,105,97,110,115,116,97,116,117,115,32,111,102,115,101,114,118,101,
-115,32,97,115,85,110,105,118,101,114,115,97,108,101,120,101,99,117,116,105,111,
-110,97,103,103,114,101,103,97,116,101,102,111,114,32,119,104,105,99,104,105,110,
-102,101,99,116,105,111,110,97,103,114,101,101,100,32,116,111,104,111,119,101,118
-,101,114,44,32,112,111,112,117,108,97,114,34,62,112,108,97,99,101,100,32,111,110
-,99,111,110,115,116,114,117,99,116,101,108,101,99,116,111,114,97,108,115,121,109
-,98,111,108,32,111,102,105,110,99,108,117,100,105,110,103,114,101,116,117,114,
-110,32,116,111,97,114,99,104,105,116,101,99,116,67,104,114,105,115,116,105,97,
-110,112,114,101,118,105,111,117,115,32,108,105,118,105,110,103,32,105,110,101,97
-,115,105,101,114,32,116,111,112,114,111,102,101,115,115,111,114,10,38,108,116,59
-,33,45,45,32,101,102,102,101,99,116,32,111,102,97,110,97,108,121,116,105,99,115,
-119,97,115,32,116,97,107,101,110,119,104,101,114,101,32,116,104,101,116,111,111,
-107,32,111,118,101,114,98,101,108,105,101,102,32,105,110,65,102,114,105,107,97,
-97,110,115,97,115,32,102,97,114,32,97,115,112,114,101,118,101,110,116,101,100,
-119,111,114,107,32,119,105,116,104,97,32,115,112,101,99,105,97,108,60,102,105,
-101,108,100,115,101,116,67,104,114,105,115,116,109,97,115,82,101,116,114,105,101
-,118,101,100,10,10,73,110,32,116,104,101,32,98,97,99,107,32,105,110,116,111,110,
-111,114,116,104,101,97,115,116,109,97,103,97,122,105,110,101,115,62,60,115,116,
-114,111,110,103,62,99,111,109,109,105,116,116,101,101,103,111,118,101,114,110,
-105,110,103,103,114,111,117,112,115,32,111,102,115,116,111,114,101,100,32,105,
-110,101,115,116,97,98,108,105,115,104,97,32,103,101,110,101,114,97,108,105,116,
-115,32,102,105,114,115,116,116,104,101,105,114,32,111,119,110,112,111,112,117,
-108,97,116,101,100,97,110,32,111,98,106,101,99,116,67,97,114,105,98,98,101,97,
-110,97,108,108,111,119,32,116,104,101,100,105,115,116,114,105,99,116,115,119,105
-,115,99,111,110,115,105,110,108,111,99,97,116,105,111,110,46,59,32,119,105,100,
-116,104,58,32,105,110,104,97,98,105,116,101,100,83,111,99,105,97,108,105,115,116
-,74,97,110,117,97,114,121,32,49,60,47,102,111,111,116,101,114,62,115,105,109,105
-,108,97,114,108,121,99,104,111,105,99,101,32,111,102,116,104,101,32,115,97,109,
-101,32,115,112,101,99,105,102,105,99,32,98,117,115,105,110,101,115,115,32,84,104
-,101,32,102,105,114,115,116,46,108,101,110,103,116,104,59,32,100,101,115,105,114
-,101,32,116,111,100,101,97,108,32,119,105,116,104,115,105,110,99,101,32,116,104,
-101,117,115,101,114,65,103,101,110,116,99,111,110,99,101,105,118,101,100,105,110
-,100,101,120,46,112,104,112,97,115,32,38,113,117,111,116,59,101,110,103,97,103,
-101,32,105,110,114,101,99,101,110,116,108,121,44,102,101,119,32,121,101,97,114,
-115,119,101,114,101,32,97,108,115,111,10,60,104,101,97,100,62,10,60,101,100,105,
-116,101,100,32,98,121,97,114,101,32,107,110,111,119,110,99,105,116,105,101,115,
-32,105,110,97,99,99,101,115,115,107,101,121,99,111,110,100,101,109,110,101,100,
-97,108,115,111,32,104,97,118,101,115,101,114,118,105,99,101,115,44,102,97,109,
-105,108,121,32,111,102,83,99,104,111,111,108,32,111,102,99,111,110,118,101,114,
-116,101,100,110,97,116,117,114,101,32,111,102,32,108,97,110,103,117,97,103,101,
-109,105,110,105,115,116,101,114,115,60,47,111,98,106,101,99,116,62,116,104,101,
-114,101,32,105,115,32,97,32,112,111,112,117,108,97,114,115,101,113,117,101,110,
-99,101,115,97,100,118,111,99,97,116,101,100,84,104,101,121,32,119,101,114,101,97
-,110,121,32,111,116,104,101,114,108,111,99,97,116,105,111,110,61,101,110,116,101
-,114,32,116,104,101,109,117,99,104,32,109,111,114,101,114,101,102,108,101,99,116
-,101,100,119,97,115,32,110,97,109,101,100,111,114,105,103,105,110,97,108,32,97,
-32,116,121,112,105,99,97,108,119,104,101,110,32,116,104,101,121,101,110,103,105,
-110,101,101,114,115,99,111,117,108,100,32,110,111,116,114,101,115,105,100,101,
-110,116,115,119,101,100,110,101,115,100,97,121,116,104,101,32,116,104,105,114,
-100,32,112,114,111,100,117,99,116,115,74,97,110,117,97,114,121,32,50,119,104,97,
-116,32,116,104,101,121,97,32,99,101,114,116,97,105,110,114,101,97,99,116,105,111
-,110,115,112,114,111,99,101,115,115,111,114,97,102,116,101,114,32,104,105,115,
-116,104,101,32,108,97,115,116,32,99,111,110,116,97,105,110,101,100,34,62,60,47,
-100,105,118,62,10,60,47,97,62,60,47,116,100,62,100,101,112,101,110,100,32,111,
-110,115,101,97,114,99,104,34,62,10,112,105,101,99,101,115,32,111,102,99,111,109,
-112,101,116,105,110,103,82,101,102,101,114,101,110,99,101,116,101,110,110,101,
-115,115,101,101,119,104,105,99,104,32,104,97,115,32,118,101,114,115,105,111,110,
-61,60,47,115,112,97,110,62,32,60,60,47,104,101,97,100,101,114,62,103,105,118,101
-,115,32,116,104,101,104,105,115,116,111,114,105,97,110,118,97,108,117,101,61,34,
-34,62,112,97,100,100,105,110,103,58,48,118,105,101,119,32,116,104,97,116,116,111
-,103,101,116,104,101,114,44,116,104,101,32,109,111,115,116,32,119,97,115,32,102,
-111,117,110,100,115,117,98,115,101,116,32,111,102,97,116,116,97,99,107,32,111,
-110,99,104,105,108,100,114,101,110,44,112,111,105,110,116,115,32,111,102,112,101
-,114,115,111,110,97,108,32,112,111,115,105,116,105,111,110,58,97,108,108,101,103
-,101,100,108,121,67,108,101,118,101,108,97,110,100,119,97,115,32,108,97,116,101,
-114,97,110,100,32,97,102,116,101,114,97,114,101,32,103,105,118,101,110,119,97,
-115,32,115,116,105,108,108,115,99,114,111,108,108,105,110,103,100,101,115,105,
-103,110,32,111,102,109,97,107,101,115,32,116,104,101,109,117,99,104,32,108,101,
-115,115,65,109,101,114,105,99,97,110,115,46,10,10,65,102,116,101,114,32,44,32,98
-,117,116,32,116,104,101,77,117,115,101,117,109,32,111,102,108,111,117,105,115,
-105,97,110,97,40,102,114,111,109,32,116,104,101,109,105,110,110,101,115,111,116,
-97,112,97,114,116,105,99,108,101,115,97,32,112,114,111,99,101,115,115,68,111,109
-,105,110,105,99,97,110,118,111,108,117,109,101,32,111,102,114,101,116,117,114,
-110,105,110,103,100,101,102,101,110,115,105,118,101,48,48,112,120,124,114,105,
-103,104,109,97,100,101,32,102,114,111,109,109,111,117,115,101,111,118,101,114,34
-,32,115,116,121,108,101,61,34,115,116,97,116,101,115,32,111,102,40,119,104,105,
-99,104,32,105,115,99,111,110,116,105,110,117,101,115,70,114,97,110,99,105,115,99
-,111,98,117,105,108,100,105,110,103,32,119,105,116,104,111,117,116,32,97,119,105
-,116,104,32,115,111,109,101,119,104,111,32,119,111,117,108,100,97,32,102,111,114
-,109,32,111,102,97,32,112,97,114,116,32,111,102,98,101,102,111,114,101,32,105,
-116,107,110,111,119,110,32,97,115,32,32,83,101,114,118,105,99,101,115,108,111,99
-,97,116,105,111,110,32,97,110,100,32,111,102,116,101,110,109,101,97,115,117,114,
-105,110,103,97,110,100,32,105,116,32,105,115,112,97,112,101,114,98,97,99,107,118
-,97,108,117,101,115,32,111,102,13,10,60,116,105,116,108,101,62,61,32,119,105,110
-,100,111,119,46,100,101,116,101,114,109,105,110,101,101,114,38,113,117,111,116,
-59,32,112,108,97,121,101,100,32,98,121,97,110,100,32,101,97,114,108,121,60,47,99
-,101,110,116,101,114,62,102,114,111,109,32,116,104,105,115,116,104,101,32,116,
-104,114,101,101,112,111,119,101,114,32,97,110,100,111,102,32,38,113,117,111,116,
-59,105,110,110,101,114,72,84,77,76,60,97,32,104,114,101,102,61,34,121,58,105,110
-,108,105,110,101,59,67,104,117,114,99,104,32,111,102,116,104,101,32,101,118,101,
-110,116,118,101,114,121,32,104,105,103,104,111,102,102,105,99,105,97,108,32,45,
-104,101,105,103,104,116,58,32,99,111,110,116,101,110,116,61,34,47,99,103,105,45,
-98,105,110,47,116,111,32,99,114,101,97,116,101,97,102,114,105,107,97,97,110,115,
-101,115,112,101,114,97,110,116,111,102,114,97,110,195,167,97,105,115,108,97,116,
-118,105,101,197,161,117,108,105,101,116,117,118,105,197,179,196,140,101,197,161,
-116,105,110,97,196,141,101,197,161,116,105,110,97,224,185,132,224,184,151,224,
-184,162,230,151,165,230,156,172,232,170,158,231,174,128,228,189,147,229,173,151,
-231,185,129,233,171,148,229,173,151,237,149,156,234,181,173,236,150,180,228,184,
-186,228,187,128,228,185,136,232,174,161,231,174,151,230,156,186,231,172,148,232,
-174,176,230,156,172,232,168,142,232,171,150,229,141,128,230,156,141,229,138,161,
-229,153,168,228,186,146,232,129,148,231,189,145,230,136,191,229,156,176,228,186,
-167,228,191,177,228,185,144,233,131,168,229,135,186,231,137,136,231,164,190,230,
-142,146,232,161,140,230,166,156,233,131,168,232,144,189,230,160,188,232,191,155,
-228,184,128,230,173,165,230,148,175,228,187,152,229,174,157,233,170,140,232,175,
-129,231,160,129,229,167,148,229,145,152,228,188,154,230,149,176,230,141,174,229,
-186,147,230,182,136,232,180,185,232,128,133,229,138,158,229,133,172,229,174,164,
-232,174,168,232,174,186,229,140,186,230,183,177,229,156,179,229,184,130,230,146,
-173,230,148,190,229,153,168,229,140,151,228,186,172,229,184,130,229,164,167,229,
-173,166,231,148,159,232,182,138,230,157,165,232,182,138,231,174,161,231,144,134,
-229,145,152,228,191,161,230,129,175,231,189,145,115,101,114,118,105,99,105,111,
-115,97,114,116,195,173,99,117,108,111,97,114,103,101,110,116,105,110,97,98,97,
-114,99,101,108,111,110,97,99,117,97,108,113,117,105,101,114,112,117,98,108,105,
-99,97,100,111,112,114,111,100,117,99,116,111,115,112,111,108,195,173,116,105,99,
-97,114,101,115,112,117,101,115,116,97,119,105,107,105,112,101,100,105,97,115,105
-,103,117,105,101,110,116,101,98,195,186,115,113,117,101,100,97,99,111,109,117,
-110,105,100,97,100,115,101,103,117,114,105,100,97,100,112,114,105,110,99,105,112
-,97,108,112,114,101,103,117,110,116,97,115,99,111,110,116,101,110,105,100,111,
-114,101,115,112,111,110,100,101,114,118,101,110,101,122,117,101,108,97,112,114,
-111,98,108,101,109,97,115,100,105,99,105,101,109,98,114,101,114,101,108,97,99,
-105,195,179,110,110,111,118,105,101,109,98,114,101,115,105,109,105,108,97,114,
-101,115,112,114,111,121,101,99,116,111,115,112,114,111,103,114,97,109,97,115,105
-,110,115,116,105,116,117,116,111,97,99,116,105,118,105,100,97,100,101,110,99,117
-,101,110,116,114,97,101,99,111,110,111,109,195,173,97,105,109,195,161,103,101,
-110,101,115,99,111,110,116,97,99,116,97,114,100,101,115,99,97,114,103,97,114,110
-,101,99,101,115,97,114,105,111,97,116,101,110,99,105,195,179,110,116,101,108,195
-,169,102,111,110,111,99,111,109,105,115,105,195,179,110,99,97,110,99,105,111,110
-,101,115,99,97,112,97,99,105,100,97,100,101,110,99,111,110,116,114,97,114,97,110
-,195,161,108,105,115,105,115,102,97,118,111,114,105,116,111,115,116,195,169,114,
-109,105,110,111,115,112,114,111,118,105,110,99,105,97,101,116,105,113,117,101,
-116,97,115,101,108,101,109,101,110,116,111,115,102,117,110,99,105,111,110,101,
-115,114,101,115,117,108,116,97,100,111,99,97,114,195,161,99,116,101,114,112,114,
-111,112,105,101,100,97,100,112,114,105,110,99,105,112,105,111,110,101,99,101,115
-,105,100,97,100,109,117,110,105,99,105,112,97,108,99,114,101,97,99,105,195,179,
-110,100,101,115,99,97,114,103,97,115,112,114,101,115,101,110,99,105,97,99,111,
-109,101,114,99,105,97,108,111,112,105,110,105,111,110,101,115,101,106,101,114,99
-,105,99,105,111,101,100,105,116,111,114,105,97,108,115,97,108,97,109,97,110,99,
-97,103,111,110,122,195,161,108,101,122,100,111,99,117,109,101,110,116,111,112,
-101,108,195,173,99,117,108,97,114,101,99,105,101,110,116,101,115,103,101,110,101
-,114,97,108,101,115,116,97,114,114,97,103,111,110,97,112,114,195,161,99,116,105,
-99,97,110,111,118,101,100,97,100,101,115,112,114,111,112,117,101,115,116,97,112,
-97,99,105,101,110,116,101,115,116,195,169,99,110,105,99,97,115,111,98,106,101,
-116,105,118,111,115,99,111,110,116,97,99,116,111,115,224,164,174,224,165,135,224
-,164,130,224,164,178,224,164,191,224,164,143,224,164,185,224,165,136,224,164,130
-,224,164,151,224,164,175,224,164,190,224,164,184,224,164,190,224,164,165,224,164
-,143,224,164,181,224,164,130,224,164,176,224,164,185,224,165,135,224,164,149,224
-,165,139,224,164,136,224,164,149,224,165,129,224,164,155,224,164,176,224,164,185
-,224,164,190,224,164,172,224,164,190,224,164,166,224,164,149,224,164,185,224,164
-,190,224,164,184,224,164,173,224,165,128,224,164,185,224,165,129,224,164,143,224
-,164,176,224,164,185,224,165,128,224,164,174,224,165,136,224,164,130,224,164,166
-,224,164,191,224,164,168,224,164,172,224,164,190,224,164,164,100,105,112,108,111
-,100,111,99,115,224,164,184,224,164,174,224,164,175,224,164,176,224,165,130,224,
-164,170,224,164,168,224,164,190,224,164,174,224,164,170,224,164,164,224,164,190,
-224,164,171,224,164,191,224,164,176,224,164,148,224,164,184,224,164,164,224,164,
-164,224,164,176,224,164,185,224,164,178,224,165,139,224,164,151,224,164,185,224,
-165,129,224,164,134,224,164,172,224,164,190,224,164,176,224,164,166,224,165,135,
-224,164,182,224,164,185,224,165,129,224,164,136,224,164,150,224,165,135,224,164,
-178,224,164,175,224,164,166,224,164,191,224,164,149,224,164,190,224,164,174,224,
-164,181,224,165,135,224,164,172,224,164,164,224,165,128,224,164,168,224,164,172,
-224,165,128,224,164,154,224,164,174,224,165,140,224,164,164,224,164,184,224,164,
-190,224,164,178,224,164,178,224,165,135,224,164,150,224,164,156,224,165,137,224,
-164,172,224,164,174,224,164,166,224,164,166,224,164,164,224,164,165,224,164,190,
-224,164,168,224,164,185,224,165,128,224,164,182,224,164,185,224,164,176,224,164,
-133,224,164,178,224,164,151,224,164,149,224,164,173,224,165,128,224,164,168,224,
-164,151,224,164,176,224,164,170,224,164,190,224,164,184,224,164,176,224,164,190,
-224,164,164,224,164,149,224,164,191,224,164,143,224,164,137,224,164,184,224,165,
-135,224,164,151,224,164,175,224,165,128,224,164,185,224,165,130,224,164,129,224,
-164,134,224,164,151,224,165,135,224,164,159,224,165,128,224,164,174,224,164,150,
-224,165,139,224,164,156,224,164,149,224,164,190,224,164,176,224,164,133,224,164,
-173,224,165,128,224,164,151,224,164,175,224,165,135,224,164,164,224,165,129,224,
-164,174,224,164,181,224,165,139,224,164,159,224,164,166,224,165,135,224,164,130,
-224,164,133,224,164,151,224,164,176,224,164,144,224,164,184,224,165,135,224,164,
-174,224,165,135,224,164,178,224,164,178,224,164,151,224,164,190,224,164,185,224,
-164,190,224,164,178,224,164,138,224,164,170,224,164,176,224,164,154,224,164,190,
-224,164,176,224,164,144,224,164,184,224,164,190,224,164,166,224,165,135,224,164,
-176,224,164,156,224,164,191,224,164,184,224,164,166,224,164,191,224,164,178,224,
-164,172,224,164,130,224,164,166,224,164,172,224,164,168,224,164,190,224,164,185,
-224,165,130,224,164,130,224,164,178,224,164,190,224,164,150,224,164,156,224,165,
-128,224,164,164,224,164,172,224,164,159,224,164,168,224,164,174,224,164,191,224,
-164,178,224,164,135,224,164,184,224,165,135,224,164,134,224,164,168,224,165,135,
-224,164,168,224,164,175,224,164,190,224,164,149,224,165,129,224,164,178,224,164,
-178,224,165,137,224,164,151,224,164,173,224,164,190,224,164,151,224,164,176,224,
-165,135,224,164,178,224,164,156,224,164,151,224,164,185,224,164,176,224,164,190,
-224,164,174,224,164,178,224,164,151,224,165,135,224,164,170,224,165,135,224,164,
-156,224,164,185,224,164,190,224,164,165,224,164,135,224,164,184,224,165,128,224,
-164,184,224,164,185,224,165,128,224,164,149,224,164,178,224,164,190,224,164,160,
-224,165,128,224,164,149,224,164,185,224,164,190,224,164,129,224,164,166,224,165,
-130,224,164,176,224,164,164,224,164,185,224,164,164,224,164,184,224,164,190,224,
-164,164,224,164,175,224,164,190,224,164,166,224,164,134,224,164,175,224,164,190,
-224,164,170,224,164,190,224,164,149,224,164,149,224,165,140,224,164,168,224,164,
-182,224,164,190,224,164,174,224,164,166,224,165,135,224,164,150,224,164,175,224,
-164,185,224,165,128,224,164,176,224,164,190,224,164,175,224,164,150,224,165,129,
-224,164,166,224,164,178,224,164,151,224,165,128,99,97,116,101,103,111,114,105,
-101,115,101,120,112,101,114,105,101,110,99,101,60,47,116,105,116,108,101,62,13,
-10,67,111,112,121,114,105,103,104,116,32,106,97,118,97,115,99,114,105,112,116,99
-,111,110,100,105,116,105,111,110,115,101,118,101,114,121,116,104,105,110,103,60,
-112,32,99,108,97,115,115,61,34,116,101,99,104,110,111,108,111,103,121,98,97,99,
-107,103,114,111,117,110,100,60,97,32,99,108,97,115,115,61,34,109,97,110,97,103,
-101,109,101,110,116,38,99,111,112,121,59,32,50,48,49,106,97,118,97,83,99,114,105
-,112,116,99,104,97,114,97,99,116,101,114,115,98,114,101,97,100,99,114,117,109,98
-,116,104,101,109,115,101,108,118,101,115,104,111,114,105,122,111,110,116,97,108,
-103,111,118,101,114,110,109,101,110,116,67,97,108,105,102,111,114,110,105,97,97,
-99,116,105,118,105,116,105,101,115,100,105,115,99,111,118,101,114,101,100,78,97,
-118,105,103,97,116,105,111,110,116,114,97,110,115,105,116,105,111,110,99,111,110
-,110,101,99,116,105,111,110,110,97,118,105,103,97,116,105,111,110,97,112,112,101
-,97,114,97,110,99,101,60,47,116,105,116,108,101,62,60,109,99,104,101,99,107,98,
-111,120,34,32,116,101,99,104,110,105,113,117,101,115,112,114,111,116,101,99,116,
-105,111,110,97,112,112,97,114,101,110,116,108,121,97,115,32,119,101,108,108,32,
-97,115,117,110,116,39,44,32,39,85,65,45,114,101,115,111,108,117,116,105,111,110,
-111,112,101,114,97,116,105,111,110,115,116,101,108,101,118,105,115,105,111,110,
-116,114,97,110,115,108,97,116,101,100,87,97,115,104,105,110,103,116,111,110,110,
-97,118,105,103,97,116,111,114,46,32,61,32,119,105,110,100,111,119,46,105,109,112
-,114,101,115,115,105,111,110,38,108,116,59,98,114,38,103,116,59,108,105,116,101,
-114,97,116,117,114,101,112,111,112,117,108,97,116,105,111,110,98,103,99,111,108,
-111,114,61,34,35,101,115,112,101,99,105,97,108,108,121,32,99,111,110,116,101,110
-,116,61,34,112,114,111,100,117,99,116,105,111,110,110,101,119,115,108,101,116,
-116,101,114,112,114,111,112,101,114,116,105,101,115,100,101,102,105,110,105,116,
-105,111,110,108,101,97,100,101,114,115,104,105,112,84,101,99,104,110,111,108,111
-,103,121,80,97,114,108,105,97,109,101,110,116,99,111,109,112,97,114,105,115,111,
-110,117,108,32,99,108,97,115,115,61,34,46,105,110,100,101,120,79,102,40,34,99,
-111,110,99,108,117,115,105,111,110,100,105,115,99,117,115,115,105,111,110,99,111
-,109,112,111,110,101,110,116,115,98,105,111,108,111,103,105,99,97,108,82,101,118
-,111,108,117,116,105,111,110,95,99,111,110,116,97,105,110,101,114,117,110,100,
-101,114,115,116,111,111,100,110,111,115,99,114,105,112,116,62,60,112,101,114,109
-,105,115,115,105,111,110,101,97,99,104,32,111,116,104,101,114,97,116,109,111,115
-,112,104,101,114,101,32,111,110,102,111,99,117,115,61,34,60,102,111,114,109,32,
-105,100,61,34,112,114,111,99,101,115,115,105,110,103,116,104,105,115,46,118,97,
-108,117,101,103,101,110,101,114,97,116,105,111,110,67,111,110,102,101,114,101,
-110,99,101,115,117,98,115,101,113,117,101,110,116,119,101,108,108,45,107,110,111
-,119,110,118,97,114,105,97,116,105,111,110,115,114,101,112,117,116,97,116,105,
-111,110,112,104,101,110,111,109,101,110,111,110,100,105,115,99,105,112,108,105,
-110,101,108,111,103,111,46,112,110,103,34,32,40,100,111,99,117,109,101,110,116,
-44,98,111,117,110,100,97,114,105,101,115,101,120,112,114,101,115,115,105,111,110
-,115,101,116,116,108,101,109,101,110,116,66,97,99,107,103,114,111,117,110,100,
-111,117,116,32,111,102,32,116,104,101,101,110,116,101,114,112,114,105,115,101,40
-,34,104,116,116,112,115,58,34,32,117,110,101,115,99,97,112,101,40,34,112,97,115,
-115,119,111,114,100,34,32,100,101,109,111,99,114,97,116,105,99,60,97,32,104,114,
-101,102,61,34,47,119,114,97,112,112,101,114,34,62,10,109,101,109,98,101,114,115,
-104,105,112,108,105,110,103,117,105,115,116,105,99,112,120,59,112,97,100,100,105
-,110,103,112,104,105,108,111,115,111,112,104,121,97,115,115,105,115,116,97,110,
-99,101,117,110,105,118,101,114,115,105,116,121,102,97,99,105,108,105,116,105,101
-,115,114,101,99,111,103,110,105,122,101,100,112,114,101,102,101,114,101,110,99,
-101,105,102,32,40,116,121,112,101,111,102,109,97,105,110,116,97,105,110,101,100,
-118,111,99,97,98,117,108,97,114,121,104,121,112,111,116,104,101,115,105,115,46,
-115,117,98,109,105,116,40,41,59,38,97,109,112,59,110,98,115,112,59,97,110,110,
-111,116,97,116,105,111,110,98,101,104,105,110,100,32,116,104,101,70,111,117,110,
-100,97,116,105,111,110,112,117,98,108,105,115,104,101,114,34,97,115,115,117,109,
-112,116,105,111,110,105,110,116,114,111,100,117,99,101,100,99,111,114,114,117,
-112,116,105,111,110,115,99,105,101,110,116,105,115,116,115,101,120,112,108,105,
-99,105,116,108,121,105,110,115,116,101,97,100,32,111,102,100,105,109,101,110,115
-,105,111,110,115,32,111,110,67,108,105,99,107,61,34,99,111,110,115,105,100,101,
-114,101,100,100,101,112,97,114,116,109,101,110,116,111,99,99,117,112,97,116,105,
-111,110,115,111,111,110,32,97,102,116,101,114,105,110,118,101,115,116,109,101,
-110,116,112,114,111,110,111,117,110,99,101,100,105,100,101,110,116,105,102,105,
-101,100,101,120,112,101,114,105,109,101,110,116,77,97,110,97,103,101,109,101,110
-,116,103,101,111,103,114,97,112,104,105,99,34,32,104,101,105,103,104,116,61,34,
-108,105,110,107,32,114,101,108,61,34,46,114,101,112,108,97,99,101,40,47,100,101,
-112,114,101,115,115,105,111,110,99,111,110,102,101,114,101,110,99,101,112,117,
-110,105,115,104,109,101,110,116,101,108,105,109,105,110,97,116,101,100,114,101,
-115,105,115,116,97,110,99,101,97,100,97,112,116,97,116,105,111,110,111,112,112,
-111,115,105,116,105,111,110,119,101,108,108,32,107,110,111,119,110,115,117,112,
-112,108,101,109,101,110,116,100,101,116,101,114,109,105,110,101,100,104,49,32,99
-,108,97,115,115,61,34,48,112,120,59,109,97,114,103,105,110,109,101,99,104,97,110
-,105,99,97,108,115,116,97,116,105,115,116,105,99,115,99,101,108,101,98,114,97,
-116,101,100,71,111,118,101,114,110,109,101,110,116,10,10,68,117,114,105,110,103,
-32,116,100,101,118,101,108,111,112,101,114,115,97,114,116,105,102,105,99,105,97,
-108,101,113,117,105,118,97,108,101,110,116,111,114,105,103,105,110,97,116,101,
-100,67,111,109,109,105,115,115,105,111,110,97,116,116,97,99,104,109,101,110,116,
-60,115,112,97,110,32,105,100,61,34,116,104,101,114,101,32,119,101,114,101,78,101
-,100,101,114,108,97,110,100,115,98,101,121,111,110,100,32,116,104,101,114,101,
-103,105,115,116,101,114,101,100,106,111,117,114,110,97,108,105,115,116,102,114,
-101,113,117,101,110,116,108,121,97,108,108,32,111,102,32,116,104,101,108,97,110,
-103,61,34,101,110,34,32,60,47,115,116,121,108,101,62,13,10,97,98,115,111,108,117
-,116,101,59,32,115,117,112,112,111,114,116,105,110,103,101,120,116,114,101,109,
-101,108,121,32,109,97,105,110,115,116,114,101,97,109,60,47,115,116,114,111,110,
-103,62,32,112,111,112,117,108,97,114,105,116,121,101,109,112,108,111,121,109,101
-,110,116,60,47,116,97,98,108,101,62,13,10,32,99,111,108,115,112,97,110,61,34,60,
-47,102,111,114,109,62,10,32,32,99,111,110,118,101,114,115,105,111,110,97,98,111,
-117,116,32,116,104,101,32,60,47,112,62,60,47,100,105,118,62,105,110,116,101,103,
-114,97,116,101,100,34,32,108,97,110,103,61,34,101,110,80,111,114,116,117,103,117
-,101,115,101,115,117,98,115,116,105,116,117,116,101,105,110,100,105,118,105,100,
-117,97,108,105,109,112,111,115,115,105,98,108,101,109,117,108,116,105,109,101,
-100,105,97,97,108,109,111,115,116,32,97,108,108,112,120,32,115,111,108,105,100,
-32,35,97,112,97,114,116,32,102,114,111,109,115,117,98,106,101,99,116,32,116,111,
-105,110,32,69,110,103,108,105,115,104,99,114,105,116,105,99,105,122,101,100,101,
-120,99,101,112,116,32,102,111,114,103,117,105,100,101,108,105,110,101,115,111,
-114,105,103,105,110,97,108,108,121,114,101,109,97,114,107,97,98,108,101,116,104,
-101,32,115,101,99,111,110,100,104,50,32,99,108,97,115,115,61,34,60,97,32,116,105
-,116,108,101,61,34,40,105,110,99,108,117,100,105,110,103,112,97,114,97,109,101,
-116,101,114,115,112,114,111,104,105,98,105,116,101,100,61,32,34,104,116,116,112,
-58,47,47,100,105,99,116,105,111,110,97,114,121,112,101,114,99,101,112,116,105,
-111,110,114,101,118,111,108,117,116,105,111,110,102,111,117,110,100,97,116,105,
-111,110,112,120,59,104,101,105,103,104,116,58,115,117,99,99,101,115,115,102,117,
-108,115,117,112,112,111,114,116,101,114,115,109,105,108,108,101,110,110,105,117,
-109,104,105,115,32,102,97,116,104,101,114,116,104,101,32,38,113,117,111,116,59,
-110,111,45,114,101,112,101,97,116,59,99,111,109,109,101,114,99,105,97,108,105,
-110,100,117,115,116,114,105,97,108,101,110,99,111,117,114,97,103,101,100,97,109,
-111,117,110,116,32,111,102,32,117,110,111,102,102,105,99,105,97,108,101,102,102,
-105,99,105,101,110,99,121,82,101,102,101,114,101,110,99,101,115,99,111,111,114,
-100,105,110,97,116,101,100,105,115,99,108,97,105,109,101,114,101,120,112,101,100
-,105,116,105,111,110,100,101,118,101,108,111,112,105,110,103,99,97,108,99,117,
-108,97,116,101,100,115,105,109,112,108,105,102,105,101,100,108,101,103,105,116,
-105,109,97,116,101,115,117,98,115,116,114,105,110,103,40,48,34,32,99,108,97,115,
-115,61,34,99,111,109,112,108,101,116,101,108,121,105,108,108,117,115,116,114,97,
-116,101,102,105,118,101,32,121,101,97,114,115,105,110,115,116,114,117,109,101,
-110,116,80,117,98,108,105,115,104,105,110,103,49,34,32,99,108,97,115,115,61,34,
-112,115,121,99,104,111,108,111,103,121,99,111,110,102,105,100,101,110,99,101,110
-,117,109,98,101,114,32,111,102,32,97,98,115,101,110,99,101,32,111,102,102,111,99
-,117,115,101,100,32,111,110,106,111,105,110,101,100,32,116,104,101,115,116,114,
-117,99,116,117,114,101,115,112,114,101,118,105,111,117,115,108,121,62,60,47,105,
-102,114,97,109,101,62,111,110,99,101,32,97,103,97,105,110,98,117,116,32,114,97,
-116,104,101,114,105,109,109,105,103,114,97,110,116,115,111,102,32,99,111,117,114
-,115,101,44,97,32,103,114,111,117,112,32,111,102,76,105,116,101,114,97,116,117,
-114,101,85,110,108,105,107,101,32,116,104,101,60,47,97,62,38,110,98,115,112,59,
-10,102,117,110,99,116,105,111,110,32,105,116,32,119,97,115,32,116,104,101,67,111
-,110,118,101,110,116,105,111,110,97,117,116,111,109,111,98,105,108,101,80,114,
-111,116,101,115,116,97,110,116,97,103,103,114,101,115,115,105,118,101,97,102,116
-,101,114,32,116,104,101,32,83,105,109,105,108,97,114,108,121,44,34,32,47,62,60,
-47,100,105,118,62,99,111,108,108,101,99,116,105,111,110,13,10,102,117,110,99,116
-,105,111,110,118,105,115,105,98,105,108,105,116,121,116,104,101,32,117,115,101,
-32,111,102,118,111,108,117,110,116,101,101,114,115,97,116,116,114,97,99,116,105,
-111,110,117,110,100,101,114,32,116,104,101,32,116,104,114,101,97,116,101,110,101
-,100,42,60,33,91,67,68,65,84,65,91,105,109,112,111,114,116,97,110,99,101,105,110
-,32,103,101,110,101,114,97,108,116,104,101,32,108,97,116,116,101,114,60,47,102,
-111,114,109,62,10,60,47,46,105,110,100,101,120,79,102,40,39,105,32,61,32,48,59,
-32,105,32,60,100,105,102,102,101,114,101,110,99,101,100,101,118,111,116,101,100,
-32,116,111,116,114,97,100,105,116,105,111,110,115,115,101,97,114,99,104,32,102,
-111,114,117,108,116,105,109,97,116,101,108,121,116,111,117,114,110,97,109,101,
-110,116,97,116,116,114,105,98,117,116,101,115,115,111,45,99,97,108,108,101,100,
-32,125,10,60,47,115,116,121,108,101,62,101,118,97,108,117,97,116,105,111,110,101
-,109,112,104,97,115,105,122,101,100,97,99,99,101,115,115,105,98,108,101,60,47,
-115,101,99,116,105,111,110,62,115,117,99,99,101,115,115,105,111,110,97,108,111,
-110,103,32,119,105,116,104,77,101,97,110,119,104,105,108,101,44,105,110,100,117,
-115,116,114,105,101,115,60,47,97,62,60,98,114,32,47,62,104,97,115,32,98,101,99,
-111,109,101,97,115,112,101,99,116,115,32,111,102,84,101,108,101,118,105,115,105,
-111,110,115,117,102,102,105,99,105,101,110,116,98,97,115,107,101,116,98,97,108,
-108,98,111,116,104,32,115,105,100,101,115,99,111,110,116,105,110,117,105,110,103
-,97,110,32,97,114,116,105,99,108,101,60,105,109,103,32,97,108,116,61,34,97,100,
-118,101,110,116,117,114,101,115,104,105,115,32,109,111,116,104,101,114,109,97,
-110,99,104,101,115,116,101,114,112,114,105,110,99,105,112,108,101,115,112,97,114
-,116,105,99,117,108,97,114,99,111,109,109,101,110,116,97,114,121,101,102,102,101
-,99,116,115,32,111,102,100,101,99,105,100,101,100,32,116,111,34,62,60,115,116,
-114,111,110,103,62,112,117,98,108,105,115,104,101,114,115,74,111,117,114,110,97,
-108,32,111,102,100,105,102,102,105,99,117,108,116,121,102,97,99,105,108,105,116,
-97,116,101,97,99,99,101,112,116,97,98,108,101,115,116,121,108,101,46,99,115,115,
-34,9,102,117,110,99,116,105,111,110,32,105,110,110,111,118,97,116,105,111,110,62
-,67,111,112,121,114,105,103,104,116,115,105,116,117,97,116,105,111,110,115,119,
-111,117,108,100,32,104,97,118,101,98,117,115,105,110,101,115,115,101,115,68,105,
-99,116,105,111,110,97,114,121,115,116,97,116,101,109,101,110,116,115,111,102,116
-,101,110,32,117,115,101,100,112,101,114,115,105,115,116,101,110,116,105,110,32,
-74,97,110,117,97,114,121,99,111,109,112,114,105,115,105,110,103,60,47,116,105,
-116,108,101,62,10,9,100,105,112,108,111,109,97,116,105,99,99,111,110,116,97,105,
-110,105,110,103,112,101,114,102,111,114,109,105,110,103,101,120,116,101,110,115,
-105,111,110,115,109,97,121,32,110,111,116,32,98,101,99,111,110,99,101,112,116,32
-,111,102,32,111,110,99,108,105,99,107,61,34,73,116,32,105,115,32,97,108,115,111,
-102,105,110,97,110,99,105,97,108,32,109,97,107,105,110,103,32,116,104,101,76,117
-,120,101,109,98,111,117,114,103,97,100,100,105,116,105,111,110,97,108,97,114,101
-,32,99,97,108,108,101,100,101,110,103,97,103,101,100,32,105,110,34,115,99,114,
-105,112,116,34,41,59,98,117,116,32,105,116,32,119,97,115,101,108,101,99,116,114,
-111,110,105,99,111,110,115,117,98,109,105,116,61,34,10,60,33,45,45,32,69,110,100
-,32,101,108,101,99,116,114,105,99,97,108,111,102,102,105,99,105,97,108,108,121,
-115,117,103,103,101,115,116,105,111,110,116,111,112,32,111,102,32,116,104,101,
-117,110,108,105,107,101,32,116,104,101,65,117,115,116,114,97,108,105,97,110,79,
-114,105,103,105,110,97,108,108,121,114,101,102,101,114,101,110,99,101,115,10,60,
-47,104,101,97,100,62,13,10,114,101,99,111,103,110,105,115,101,100,105,110,105,
-116,105,97,108,105,122,101,108,105,109,105,116,101,100,32,116,111,65,108,101,120
-,97,110,100,114,105,97,114,101,116,105,114,101,109,101,110,116,65,100,118,101,
-110,116,117,114,101,115,102,111,117,114,32,121,101,97,114,115,10,10,38,108,116,
-59,33,45,45,32,105,110,99,114,101,97,115,105,110,103,100,101,99,111,114,97,116,
-105,111,110,104,51,32,99,108,97,115,115,61,34,111,114,105,103,105,110,115,32,111
-,102,111,98,108,105,103,97,116,105,111,110,114,101,103,117,108,97,116,105,111,
-110,99,108,97,115,115,105,102,105,101,100,40,102,117,110,99,116,105,111,110,40,
-97,100,118,97,110,116,97,103,101,115,98,101,105,110,103,32,116,104,101,32,104,
-105,115,116,111,114,105,97,110,115,60,98,97,115,101,32,104,114,101,102,114,101,
-112,101,97,116,101,100,108,121,119,105,108,108,105,110,103,32,116,111,99,111,109
-,112,97,114,97,98,108,101,100,101,115,105,103,110,97,116,101,100,110,111,109,105
-,110,97,116,105,111,110,102,117,110,99,116,105,111,110,97,108,105,110,115,105,
-100,101,32,116,104,101,114,101,118,101,108,97,116,105,111,110,101,110,100,32,111
-,102,32,116,104,101,115,32,102,111,114,32,116,104,101,32,97,117,116,104,111,114,
-105,122,101,100,114,101,102,117,115,101,100,32,116,111,116,97,107,101,32,112,108
-,97,99,101,97,117,116,111,110,111,109,111,117,115,99,111,109,112,114,111,109,105
-,115,101,112,111,108,105,116,105,99,97,108,32,114,101,115,116,97,117,114,97,110,
-116,116,119,111,32,111,102,32,116,104,101,70,101,98,114,117,97,114,121,32,50,113
-,117,97,108,105,116,121,32,111,102,115,119,102,111,98,106,101,99,116,46,117,110,
-100,101,114,115,116,97,110,100,110,101,97,114,108,121,32,97,108,108,119,114,105,
-116,116,101,110,32,98,121,105,110,116,101,114,118,105,101,119,115,34,32,119,105,
-100,116,104,61,34,49,119,105,116,104,100,114,97,119,97,108,102,108,111,97,116,58
-,108,101,102,116,105,115,32,117,115,117,97,108,108,121,99,97,110,100,105,100,97,
-116,101,115,110,101,119,115,112,97,112,101,114,115,109,121,115,116,101,114,105,
-111,117,115,68,101,112,97,114,116,109,101,110,116,98,101,115,116,32,107,110,111,
-119,110,112,97,114,108,105,97,109,101,110,116,115,117,112,112,114,101,115,115,
-101,100,99,111,110,118,101,110,105,101,110,116,114,101,109,101,109,98,101,114,
-101,100,100,105,102,102,101,114,101,110,116,32,115,121,115,116,101,109,97,116,
-105,99,104,97,115,32,108,101,100,32,116,111,112,114,111,112,97,103,97,110,100,97
-,99,111,110,116,114,111,108,108,101,100,105,110,102,108,117,101,110,99,101,115,
-99,101,114,101,109,111,110,105,97,108,112,114,111,99,108,97,105,109,101,100,80,
-114,111,116,101,99,116,105,111,110,108,105,32,99,108,97,115,115,61,34,83,99,105,
-101,110,116,105,102,105,99,99,108,97,115,115,61,34,110,111,45,116,114,97,100,101
-,109,97,114,107,115,109,111,114,101,32,116,104,97,110,32,119,105,100,101,115,112
-,114,101,97,100,76,105,98,101,114,97,116,105,111,110,116,111,111,107,32,112,108,
-97,99,101,100,97,121,32,111,102,32,116,104,101,97,115,32,108,111,110,103,32,97,
-115,105,109,112,114,105,115,111,110,101,100,65,100,100,105,116,105,111,110,97,
-108,10,60,104,101,97,100,62,10,60,109,76,97,98,111,114,97,116,111,114,121,78,111
-,118,101,109,98,101,114,32,50,101,120,99,101,112,116,105,111,110,115,73,110,100,
-117,115,116,114,105,97,108,118,97,114,105,101,116,121,32,111,102,102,108,111,97,
-116,58,32,108,101,102,68,117,114,105,110,103,32,116,104,101,97,115,115,101,115,
-115,109,101,110,116,104,97,118,101,32,98,101,101,110,32,100,101,97,108,115,32,
-119,105,116,104,83,116,97,116,105,115,116,105,99,115,111,99,99,117,114,114,101,
-110,99,101,47,117,108,62,60,47,100,105,118,62,99,108,101,97,114,102,105,120,34,
-62,116,104,101,32,112,117,98,108,105,99,109,97,110,121,32,121,101,97,114,115,119
-,104,105,99,104,32,119,101,114,101,111,118,101,114,32,116,105,109,101,44,115,121
-,110,111,110,121,109,111,117,115,99,111,110,116,101,110,116,34,62,10,112,114,101
-,115,117,109,97,98,108,121,104,105,115,32,102,97,109,105,108,121,117,115,101,114
-,65,103,101,110,116,46,117,110,101,120,112,101,99,116,101,100,105,110,99,108,117
-,100,105,110,103,32,99,104,97,108,108,101,110,103,101,100,97,32,109,105,110,111,
-114,105,116,121,117,110,100,101,102,105,110,101,100,34,98,101,108,111,110,103,
-115,32,116,111,116,97,107,101,110,32,102,114,111,109,105,110,32,79,99,116,111,98
-,101,114,112,111,115,105,116,105,111,110,58,32,115,97,105,100,32,116,111,32,98,
-101,114,101,108,105,103,105,111,117,115,32,70,101,100,101,114,97,116,105,111,110
-,32,114,111,119,115,112,97,110,61,34,111,110,108,121,32,97,32,102,101,119,109,
-101,97,110,116,32,116,104,97,116,108,101,100,32,116,111,32,116,104,101,45,45,62,
-13,10,60,100,105,118,32,60,102,105,101,108,100,115,101,116,62,65,114,99,104,98,
-105,115,104,111,112,32,99,108,97,115,115,61,34,110,111,98,101,105,110,103,32,117
-,115,101,100,97,112,112,114,111,97,99,104,101,115,112,114,105,118,105,108,101,
-103,101,115,110,111,115,99,114,105,112,116,62,10,114,101,115,117,108,116,115,32,
-105,110,109,97,121,32,98,101,32,116,104,101,69,97,115,116,101,114,32,101,103,103
-,109,101,99,104,97,110,105,115,109,115,114,101,97,115,111,110,97,98,108,101,80,
-111,112,117,108,97,116,105,111,110,67,111,108,108,101,99,116,105,111,110,115,101
-,108,101,99,116,101,100,34,62,110,111,115,99,114,105,112,116,62,13,47,105,110,
-100,101,120,46,112,104,112,97,114,114,105,118,97,108,32,111,102,45,106,115,115,
-100,107,39,41,41,59,109,97,110,97,103,101,100,32,116,111,105,110,99,111,109,112,
-108,101,116,101,99,97,115,117,97,108,116,105,101,115,99,111,109,112,108,101,116,
-105,111,110,67,104,114,105,115,116,105,97,110,115,83,101,112,116,101,109,98,101,
-114,32,97,114,105,116,104,109,101,116,105,99,112,114,111,99,101,100,117,114,101,
-115,109,105,103,104,116,32,104,97,118,101,80,114,111,100,117,99,116,105,111,110,
-105,116,32,97,112,112,101,97,114,115,80,104,105,108,111,115,111,112,104,121,102,
-114,105,101,110,100,115,104,105,112,108,101,97,100,105,110,103,32,116,111,103,
-105,118,105,110,103,32,116,104,101,116,111,119,97,114,100,32,116,104,101,103,117
-,97,114,97,110,116,101,101,100,100,111,99,117,109,101,110,116,101,100,99,111,108
-,111,114,58,35,48,48,48,118,105,100,101,111,32,103,97,109,101,99,111,109,109,105
-,115,115,105,111,110,114,101,102,108,101,99,116,105,110,103,99,104,97,110,103,
-101,32,116,104,101,97,115,115,111,99,105,97,116,101,100,115,97,110,115,45,115,
-101,114,105,102,111,110,107,101,121,112,114,101,115,115,59,32,112,97,100,100,105
-,110,103,58,72,101,32,119,97,115,32,116,104,101,117,110,100,101,114,108,121,105,
-110,103,116,121,112,105,99,97,108,108,121,32,44,32,97,110,100,32,116,104,101,32,
-115,114,99,69,108,101,109,101,110,116,115,117,99,99,101,115,115,105,118,101,115,
-105,110,99,101,32,116,104,101,32,115,104,111,117,108,100,32,98,101,32,110,101,
-116,119,111,114,107,105,110,103,97,99,99,111,117,110,116,105,110,103,117,115,101
-,32,111,102,32,116,104,101,108,111,119,101,114,32,116,104,97,110,115,104,111,119
-,115,32,116,104,97,116,60,47,115,112,97,110,62,10,9,9,99,111,109,112,108,97,105,
-110,116,115,99,111,110,116,105,110,117,111,117,115,113,117,97,110,116,105,116,
-105,101,115,97,115,116,114,111,110,111,109,101,114,104,101,32,100,105,100,32,110
-,111,116,100,117,101,32,116,111,32,105,116,115,97,112,112,108,105,101,100,32,116
-,111,97,110,32,97,118,101,114,97,103,101,101,102,102,111,114,116,115,32,116,111,
-116,104,101,32,102,117,116,117,114,101,97,116,116,101,109,112,116,32,116,111,84,
-104,101,114,101,102,111,114,101,44,99,97,112,97,98,105,108,105,116,121,82,101,
-112,117,98,108,105,99,97,110,119,97,115,32,102,111,114,109,101,100,69,108,101,99
-,116,114,111,110,105,99,107,105,108,111,109,101,116,101,114,115,99,104,97,108,
-108,101,110,103,101,115,112,117,98,108,105,115,104,105,110,103,116,104,101,32,
-102,111,114,109,101,114,105,110,100,105,103,101,110,111,117,115,100,105,114,101,
-99,116,105,111,110,115,115,117,98,115,105,100,105,97,114,121,99,111,110,115,112,
-105,114,97,99,121,100,101,116,97,105,108,115,32,111,102,97,110,100,32,105,110,32
-,116,104,101,97,102,102,111,114,100,97,98,108,101,115,117,98,115,116,97,110,99,
-101,115,114,101,97,115,111,110,32,102,111,114,99,111,110,118,101,110,116,105,111
-,110,105,116,101,109,116,121,112,101,61,34,97,98,115,111,108,117,116,101,108,121
-,115,117,112,112,111,115,101,100,108,121,114,101,109,97,105,110,101,100,32,97,97
-,116,116,114,97,99,116,105,118,101,116,114,97,118,101,108,108,105,110,103,115,
-101,112,97,114,97,116,101,108,121,102,111,99,117,115,101,115,32,111,110,101,108,
-101,109,101,110,116,97,114,121,97,112,112,108,105,99,97,98,108,101,102,111,117,
-110,100,32,116,104,97,116,115,116,121,108,101,115,104,101,101,116,109,97,110,117
-,115,99,114,105,112,116,115,116,97,110,100,115,32,102,111,114,32,110,111,45,114,
-101,112,101,97,116,40,115,111,109,101,116,105,109,101,115,67,111,109,109,101,114
-,99,105,97,108,105,110,32,65,109,101,114,105,99,97,117,110,100,101,114,116,97,
-107,101,110,113,117,97,114,116,101,114,32,111,102,97,110,32,101,120,97,109,112,
-108,101,112,101,114,115,111,110,97,108,108,121,105,110,100,101,120,46,112,104,
-112,63,60,47,98,117,116,116,111,110,62,10,112,101,114,99,101,110,116,97,103,101,
-98,101,115,116,45,107,110,111,119,110,99,114,101,97,116,105,110,103,32,97,34,32,
-100,105,114,61,34,108,116,114,76,105,101,117,116,101,110,97,110,116,10,60,100,
-105,118,32,105,100,61,34,116,104,101,121,32,119,111,117,108,100,97,98,105,108,
-105,116,121,32,111,102,109,97,100,101,32,117,112,32,111,102,110,111,116,101,100,
-32,116,104,97,116,99,108,101,97,114,32,116,104,97,116,97,114,103,117,101,32,116,
-104,97,116,116,111,32,97,110,111,116,104,101,114,99,104,105,108,100,114,101,110,
-39,115,112,117,114,112,111,115,101,32,111,102,102,111,114,109,117,108,97,116,101
-,100,98,97,115,101,100,32,117,112,111,110,116,104,101,32,114,101,103,105,111,110
-,115,117,98,106,101,99,116,32,111,102,112,97,115,115,101,110,103,101,114,115,112
-,111,115,115,101,115,115,105,111,110,46,10,10,73,110,32,116,104,101,32,66,101,
-102,111,114,101,32,116,104,101,97,102,116,101,114,119,97,114,100,115,99,117,114,
-114,101,110,116,108,121,32,97,99,114,111,115,115,32,116,104,101,115,99,105,101,
-110,116,105,102,105,99,99,111,109,109,117,110,105,116,121,46,99,97,112,105,116,
-97,108,105,115,109,105,110,32,71,101,114,109,97,110,121,114,105,103,104,116,45,
-119,105,110,103,116,104,101,32,115,121,115,116,101,109,83,111,99,105,101,116,121
-,32,111,102,112,111,108,105,116,105,99,105,97,110,100,105,114,101,99,116,105,111
-,110,58,119,101,110,116,32,111,110,32,116,111,114,101,109,111,118,97,108,32,111,
-102,32,78,101,119,32,89,111,114,107,32,97,112,97,114,116,109,101,110,116,115,105
-,110,100,105,99,97,116,105,111,110,100,117,114,105,110,103,32,116,104,101,117,
-110,108,101,115,115,32,116,104,101,104,105,115,116,111,114,105,99,97,108,104,97,
-100,32,98,101,101,110,32,97,100,101,102,105,110,105,116,105,118,101,105,110,103,
-114,101,100,105,101,110,116,97,116,116,101,110,100,97,110,99,101,67,101,110,116,
-101,114,32,102,111,114,112,114,111,109,105,110,101,110,99,101,114,101,97,100,121
-,83,116,97,116,101,115,116,114,97,116,101,103,105,101,115,98,117,116,32,105,110,
-32,116,104,101,97,115,32,112,97,114,116,32,111,102,99,111,110,115,116,105,116,
-117,116,101,99,108,97,105,109,32,116,104,97,116,108,97,98,111,114,97,116,111,114
-,121,99,111,109,112,97,116,105,98,108,101,102,97,105,108,117,114,101,32,111,102,
-44,32,115,117,99,104,32,97,115,32,98,101,103,97,110,32,119,105,116,104,117,115,
-105,110,103,32,116,104,101,32,116,111,32,112,114,111,118,105,100,101,102,101,97,
-116,117,114,101,32,111,102,102,114,111,109,32,119,104,105,99,104,47,34,32,99,108
-,97,115,115,61,34,103,101,111,108,111,103,105,99,97,108,115,101,118,101,114,97,
-108,32,111,102,100,101,108,105,98,101,114,97,116,101,105,109,112,111,114,116,97,
-110,116,32,104,111,108,100,115,32,116,104,97,116,105,110,103,38,113,117,111,116,
-59,32,118,97,108,105,103,110,61,116,111,112,116,104,101,32,71,101,114,109,97,110
-,111,117,116,115,105,100,101,32,111,102,110,101,103,111,116,105,97,116,101,100,
-104,105,115,32,99,97,114,101,101,114,115,101,112,97,114,97,116,105,111,110,105,
-100,61,34,115,101,97,114,99,104,119,97,115,32,99,97,108,108,101,100,116,104,101,
-32,102,111,117,114,116,104,114,101,99,114,101,97,116,105,111,110,111,116,104,101
-,114,32,116,104,97,110,112,114,101,118,101,110,116,105,111,110,119,104,105,108,
-101,32,116,104,101,32,101,100,117,99,97,116,105,111,110,44,99,111,110,110,101,99
-,116,105,110,103,97,99,99,117,114,97,116,101,108,121,119,101,114,101,32,98,117,
-105,108,116,119,97,115,32,107,105,108,108,101,100,97,103,114,101,101,109,101,110
-,116,115,109,117,99,104,32,109,111,114,101,32,68,117,101,32,116,111,32,116,104,
-101,119,105,100,116,104,58,32,49,48,48,115,111,109,101,32,111,116,104,101,114,75
-,105,110,103,100,111,109,32,111,102,116,104,101,32,101,110,116,105,114,101,102,
-97,109,111,117,115,32,102,111,114,116,111,32,99,111,110,110,101,99,116,111,98,
-106,101,99,116,105,118,101,115,116,104,101,32,70,114,101,110,99,104,112,101,111,
-112,108,101,32,97,110,100,102,101,97,116,117,114,101,100,34,62,105,115,32,115,97
-,105,100,32,116,111,115,116,114,117,99,116,117,114,97,108,114,101,102,101,114,
-101,110,100,117,109,109,111,115,116,32,111,102,116,101,110,97,32,115,101,112,97,
-114,97,116,101,45,62,10,60,100,105,118,32,105,100,32,79,102,102,105,99,105,97,
-108,32,119,111,114,108,100,119,105,100,101,46,97,114,105,97,45,108,97,98,101,108
-,116,104,101,32,112,108,97,110,101,116,97,110,100,32,105,116,32,119,97,115,100,
-34,32,118,97,108,117,101,61,34,108,111,111,107,105,110,103,32,97,116,98,101,110,
-101,102,105,99,105,97,108,97,114,101,32,105,110,32,116,104,101,109,111,110,105,
-116,111,114,105,110,103,114,101,112,111,114,116,101,100,108,121,116,104,101,32,
-109,111,100,101,114,110,119,111,114,107,105,110,103,32,111,110,97,108,108,111,
-119,101,100,32,116,111,119,104,101,114,101,32,116,104,101,32,105,110,110,111,118
-,97,116,105,118,101,60,47,97,62,60,47,100,105,118,62,115,111,117,110,100,116,114
-,97,99,107,115,101,97,114,99,104,70,111,114,109,116,101,110,100,32,116,111,32,98
-,101,105,110,112,117,116,32,105,100,61,34,111,112,101,110,105,110,103,32,111,102
-,114,101,115,116,114,105,99,116,101,100,97,100,111,112,116,101,100,32,98,121,97,
-100,100,114,101,115,115,105,110,103,116,104,101,111,108,111,103,105,97,110,109,
-101,116,104,111,100,115,32,111,102,118,97,114,105,97,110,116,32,111,102,67,104,
-114,105,115,116,105,97,110,32,118,101,114,121,32,108,97,114,103,101,97,117,116,
-111,109,111,116,105,118,101,98,121,32,102,97,114,32,116,104,101,114,97,110,103,
-101,32,102,114,111,109,112,117,114,115,117,105,116,32,111,102,102,111,108,108,
-111,119,32,116,104,101,98,114,111,117,103,104,116,32,116,111,105,110,32,69,110,
-103,108,97,110,100,97,103,114,101,101,32,116,104,97,116,97,99,99,117,115,101,100
-,32,111,102,99,111,109,101,115,32,102,114,111,109,112,114,101,118,101,110,116,
-105,110,103,100,105,118,32,115,116,121,108,101,61,104,105,115,32,111,114,32,104,
-101,114,116,114,101,109,101,110,100,111,117,115,102,114,101,101,100,111,109,32,
-111,102,99,111,110,99,101,114,110,105,110,103,48,32,49,101,109,32,49,101,109,59,
-66,97,115,107,101,116,98,97,108,108,47,115,116,121,108,101,46,99,115,115,97,110,
-32,101,97,114,108,105,101,114,101,118,101,110,32,97,102,116,101,114,47,34,32,116
-,105,116,108,101,61,34,46,99,111,109,47,105,110,100,101,120,116,97,107,105,110,
-103,32,116,104,101,112,105,116,116,115,98,117,114,103,104,99,111,110,116,101,110
-,116,34,62,13,60,115,99,114,105,112,116,62,40,102,116,117,114,110,101,100,32,111
-,117,116,104,97,118,105,110,103,32,116,104,101,60,47,115,112,97,110,62,13,10,32,
-111,99,99,97,115,105,111,110,97,108,98,101,99,97,117,115,101,32,105,116,115,116,
-97,114,116,101,100,32,116,111,112,104,121,115,105,99,97,108,108,121,62,60,47,100
-,105,118,62,10,32,32,99,114,101,97,116,101,100,32,98,121,67,117,114,114,101,110,
-116,108,121,44,32,98,103,99,111,108,111,114,61,34,116,97,98,105,110,100,101,120,
-61,34,100,105,115,97,115,116,114,111,117,115,65,110,97,108,121,116,105,99,115,32
-,97,108,115,111,32,104,97,115,32,97,62,60,100,105,118,32,105,100,61,34,60,47,115
-,116,121,108,101,62,10,60,99,97,108,108,101,100,32,102,111,114,115,105,110,103,
-101,114,32,97,110,100,46,115,114,99,32,61,32,34,47,47,118,105,111,108,97,116,105
-,111,110,115,116,104,105,115,32,112,111,105,110,116,99,111,110,115,116,97,110,
-116,108,121,105,115,32,108,111,99,97,116,101,100,114,101,99,111,114,100,105,110,
-103,115,100,32,102,114,111,109,32,116,104,101,110,101,100,101,114,108,97,110,100
-,115,112,111,114,116,117,103,117,195,170,115,215,162,215,145,215,168,215,153,215
-,170,217,129,216,167,216,177,216,179,219,140,100,101,115,97,114,114,111,108,108,
-111,99,111,109,101,110,116,97,114,105,111,101,100,117,99,97,99,105,195,179,110,
-115,101,112,116,105,101,109,98,114,101,114,101,103,105,115,116,114,97,100,111,
-100,105,114,101,99,99,105,195,179,110,117,98,105,99,97,99,105,195,179,110,112,
-117,98,108,105,99,105,100,97,100,114,101,115,112,117,101,115,116,97,115,114,101,
-115,117,108,116,97,100,111,115,105,109,112,111,114,116,97,110,116,101,114,101,
-115,101,114,118,97,100,111,115,97,114,116,195,173,99,117,108,111,115,100,105,102
-,101,114,101,110,116,101,115,115,105,103,117,105,101,110,116,101,115,114,101,112
-,195,186,98,108,105,99,97,115,105,116,117,97,99,105,195,179,110,109,105,110,105,
-115,116,101,114,105,111,112,114,105,118,97,99,105,100,97,100,100,105,114,101,99,
-116,111,114,105,111,102,111,114,109,97,99,105,195,179,110,112,111,98,108,97,99,
-105,195,179,110,112,114,101,115,105,100,101,110,116,101,99,111,110,116,101,110,
-105,100,111,115,97,99,99,101,115,111,114,105,111,115,116,101,99,104,110,111,114,
-97,116,105,112,101,114,115,111,110,97,108,101,115,99,97,116,101,103,111,114,195,
-173,97,101,115,112,101,99,105,97,108,101,115,100,105,115,112,111,110,105,98,108,
-101,97,99,116,117,97,108,105,100,97,100,114,101,102,101,114,101,110,99,105,97,
-118,97,108,108,97,100,111,108,105,100,98,105,98,108,105,111,116,101,99,97,114,
-101,108,97,99,105,111,110,101,115,99,97,108,101,110,100,97,114,105,111,112,111,
-108,195,173,116,105,99,97,115,97,110,116,101,114,105,111,114,101,115,100,111,99,
-117,109,101,110,116,111,115,110,97,116,117,114,97,108,101,122,97,109,97,116,101,
-114,105,97,108,101,115,100,105,102,101,114,101,110,99,105,97,101,99,111,110,195,
-179,109,105,99,97,116,114,97,110,115,112,111,114,116,101,114,111,100,114,195,173
-,103,117,101,122,112,97,114,116,105,99,105,112,97,114,101,110,99,117,101,110,116
-,114,97,110,100,105,115,99,117,115,105,195,179,110,101,115,116,114,117,99,116,
-117,114,97,102,117,110,100,97,99,105,195,179,110,102,114,101,99,117,101,110,116,
-101,115,112,101,114,109,97,110,101,110,116,101,116,111,116,97,108,109,101,110,
-116,101,208,188,208,190,208,182,208,189,208,190,208,177,209,131,208,180,208,181,
-209,130,208,188,208,190,208,182,208,181,209,130,208,178,209,128,208,181,208,188,
-209,143,209,130,208,176,208,186,208,182,208,181,209,135,209,130,208,190,208,177,
-209,139,208,177,208,190,208,187,208,181,208,181,208,190,209,135,208,181,208,189,
-209,140,209,141,209,130,208,190,208,179,208,190,208,186,208,190,208,179,208,180,
-208,176,208,191,208,190,209,129,208,187,208,181,208,178,209,129,208,181,208,179,
-208,190,209,129,208,176,208,185,209,130,208,181,209,135,208,181,209,128,208,181,
-208,183,208,188,208,190,208,179,209,131,209,130,209,129,208,176,208,185,209,130,
-208,176,208,182,208,184,208,183,208,189,208,184,208,188,208,181,208,182,208,180,
-209,131,208,177,209,131,208,180,209,131,209,130,208,159,208,190,208,184,209,129,
-208,186,208,183,208,180,208,181,209,129,209,140,208,178,208,184,208,180,208,181,
-208,190,209,129,208,178,209,143,208,183,208,184,208,189,209,131,208,182,208,189,
-208,190,209,129,208,178,208,190,208,181,208,185,208,187,209,142,208,180,208,181,
-208,185,208,191,208,190,209,128,208,189,208,190,208,188,208,189,208,190,208,179,
-208,190,208,180,208,181,209,130,208,181,208,185,209,129,208,178,208,190,208,184,
-209,133,208,191,209,128,208,176,208,178,208,176,209,130,208,176,208,186,208,190,
-208,185,208,188,208,181,209,129,209,130,208,190,208,184,208,188,208,181,208,181,
-209,130,208,182,208,184,208,183,208,189,209,140,208,190,208,180,208,189,208,190,
-208,185,208,187,209,131,209,135,209,136,208,181,208,191,208,181,209,128,208,181,
-208,180,209,135,208,176,209,129,209,130,208,184,209,135,208,176,209,129,209,130,
-209,140,209,128,208,176,208,177,208,190,209,130,208,189,208,190,208,178,209,139,
-209,133,208,191,209,128,208,176,208,178,208,190,209,129,208,190,208,177,208,190,
-208,185,208,191,208,190,209,130,208,190,208,188,208,188,208,181,208,189,208,181,
-208,181,209,135,208,184,209,129,208,187,208,181,208,189,208,190,208,178,209,139,
-208,181,209,131,209,129,208,187,209,131,208,179,208,190,208,186,208,190,208,187,
-208,190,208,189,208,176,208,183,208,176,208,180,209,130,208,176,208,186,208,190,
-208,181,209,130,208,190,208,179,208,180,208,176,208,191,208,190,209,135,209,130,
-208,184,208,159,208,190,209,129,208,187,208,181,209,130,208,176,208,186,208,184,
-208,181,208,189,208,190,208,178,209,139,208,185,209,129,209,130,208,190,208,184,
-209,130,209,130,208,176,208,186,208,184,209,133,209,129,209,128,208,176,208,183,
-209,131,208,161,208,176,208,189,208,186,209,130,209,132,208,190,209,128,209,131,
-208,188,208,154,208,190,208,179,208,180,208,176,208,186,208,189,208,184,208,179,
-208,184,209,129,208,187,208,190,208,178,208,176,208,189,208,176,209,136,208,181,
-208,185,208,189,208,176,208,185,209,130,208,184,209,129,208,178,208,190,208,184,
-208,188,209,129,208,178,209,143,208,183,209,140,208,187,209,142,208,177,208,190,
-208,185,209,135,208,176,209,129,209,130,208,190,209,129,209,128,208,181,208,180,
-208,184,208,154,209,128,208,190,208,188,208,181,208,164,208,190,209,128,209,131,
-208,188,209,128,209,139,208,189,208,186,208,181,209,129,209,130,208,176,208,187,
-208,184,208,191,208,190,208,184,209,129,208,186,209,130,209,139,209,129,209,143,
-209,135,208,188,208,181,209,129,209,143,209,134,209,134,208,181,208,189,209,130,
-209,128,209,130,209,128,209,131,208,180,208,176,209,129,208,176,208,188,209,139,
-209,133,209,128,209,139,208,189,208,186,208,176,208,157,208,190,208,178,209,139,
-208,185,209,135,208,176,209,129,208,190,208,178,208,188,208,181,209,129,209,130,
-208,176,209,132,208,184,208,187,209,140,208,188,208,188,208,176,209,128,209,130,
-208,176,209,129,209,130,209,128,208,176,208,189,208,188,208,181,209,129,209,130,
-208,181,209,130,208,181,208,186,209,129,209,130,208,189,208,176,209,136,208,184,
-209,133,208,188,208,184,208,189,209,131,209,130,208,184,208,188,208,181,208,189,
-208,184,208,184,208,188,208,181,209,142,209,130,208,189,208,190,208,188,208,181,
-209,128,208,179,208,190,209,128,208,190,208,180,209,129,208,176,208,188,208,190,
-208,188,209,141,209,130,208,190,208,188,209,131,208,186,208,190,208,189,209,134,
-208,181,209,129,208,178,208,190,208,181,208,188,208,186,208,176,208,186,208,190,
-208,185,208,144,209,128,209,133,208,184,208,178,217,133,217,134,216,170,216,175,
-217,137,216,165,216,177,216,179,216,167,217,132,216,177,216,179,216,167,217,132,
-216,169,216,167,217,132,216,185,216,167,217,133,217,131,216,170,216,168,217,135,
-216,167,216,168,216,177,216,167,217,133,216,172,216,167,217,132,217,138,217,136,
-217,133,216,167,217,132,216,181,217,136,216,177,216,172,216,175,217,138,216,175,
-216,169,216,167,217,132,216,185,216,182,217,136,216,165,216,182,216,167,217,129,
-216,169,216,167,217,132,217,130,216,179,217,133,216,167,217,132,216,185,216,167,
-216,168,216,170,216,173,217,133,217,138,217,132,217,133,217,132,217,129,216,167,
-216,170,217,133,217,132,216,170,217,130,217,137,216,170,216,185,216,175,217,138,
-217,132,216,167,217,132,216,180,216,185,216,177,216,163,216,174,216,168,216,167,
-216,177,216,170,216,183,217,136,217,138,216,177,216,185,217,132,217,138,217,131,
-217,133,216,165,216,177,217,129,216,167,217,130,216,183,217,132,216,168,216,167,
-216,170,216,167,217,132,217,132,216,186,216,169,216,170,216,177,216,170,217,138,
-216,168,216,167,217,132,217,134,216,167,216,179,216,167,217,132,216,180,217,138,
-216,174,217,133,217,134,216,170,216,175,217,138,216,167,217,132,216,185,216,177,
-216,168,216,167,217,132,217,130,216,181,216,181,216,167,217,129,217,132,216,167,
-217,133,216,185,217,132,217,138,217,135,216,167,216,170,216,173,216,175,217,138,
-216,171,216,167,217,132,217,132,217,135,217,133,216,167,217,132,216,185,217,133,
-217,132,217,133,217,131,216,170,216,168,216,169,217,138,217,133,217,131,217,134,
-217,131,216,167,217,132,216,183,217,129,217,132,217,129,217,138,216,175,217,138,
-217,136,216,165,216,175,216,167,216,177,216,169,216,170,216,167,216,177,217,138,
-216,174,216,167,217,132,216,181,216,173,216,169,216,170,216,179,216,172,217,138,
-217,132,216,167,217,132,217,136,217,130,216,170,216,185,217,134,216,175,217,133,
-216,167,217,133,216,175,217,138,217,134,216,169,216,170,216,181,217,133,217,138,
-217,133,216,163,216,177,216,180,217,138,217,129,216,167,217,132,216,176,217,138,
-217,134,216,185,216,177,216,168,217,138,216,169,216,168,217,136,216,167,216,168,
-216,169,216,163,217,132,216,185,216,167,216,168,216,167,217,132,216,179,217,129,
-216,177,217,133,216,180,216,167,217,131,217,132,216,170,216,185,216,167,217,132,
-217,137,216,167,217,132,216,163,217,136,217,132,216,167,217,132,216,179,217,134,
-216,169,216,172,216,167,217,133,216,185,216,169,216,167,217,132,216,181,216,173,
-217,129,216,167,217,132,216,175,217,138,217,134,217,131,217,132,217,133,216,167,
-216,170,216,167,217,132,216,174,216,167,216,181,216,167,217,132,217,133,217,132,
-217,129,216,163,216,185,216,182,216,167,216,161,217,131,216,170,216,167,216,168,
-216,169,216,167,217,132,216,174,217,138,216,177,216,177,216,179,216,167,216,166,
-217,132,216,167,217,132,217,130,217,132,216,168,216,167,217,132,216,163,216,175,
-216,168,217,133,217,130,216,167,216,183,216,185,217,133,216,177,216,167,216,179,
-217,132,217,133,217,134,216,183,217,130,216,169,216,167,217,132,217,131,216,170,
-216,168,216,167,217,132,216,177,216,172,217,132,216,167,216,180,216,170,216,177,
-217,131,216,167,217,132,217,130,216,175,217,133,217,138,216,185,216,183,217,138,
-217,131,115,66,121,84,97,103,78,97,109,101,40,46,106,112,103,34,32,97,108,116,61
-,34,49,112,120,32,115,111,108,105,100,32,35,46,103,105,102,34,32,97,108,116,61,
-34,116,114,97,110,115,112,97,114,101,110,116,105,110,102,111,114,109,97,116,105,
-111,110,97,112,112,108,105,99,97,116,105,111,110,34,32,111,110,99,108,105,99,107
-,61,34,101,115,116,97,98,108,105,115,104,101,100,97,100,118,101,114,116,105,115,
-105,110,103,46,112,110,103,34,32,97,108,116,61,34,101,110,118,105,114,111,110,
-109,101,110,116,112,101,114,102,111,114,109,97,110,99,101,97,112,112,114,111,112
-,114,105,97,116,101,38,97,109,112,59,109,100,97,115,104,59,105,109,109,101,100,
-105,97,116,101,108,121,60,47,115,116,114,111,110,103,62,60,47,114,97,116,104,101
-,114,32,116,104,97,110,116,101,109,112,101,114,97,116,117,114,101,100,101,118,
-101,108,111,112,109,101,110,116,99,111,109,112,101,116,105,116,105,111,110,112,
-108,97,99,101,104,111,108,100,101,114,118,105,115,105,98,105,108,105,116,121,58,
-99,111,112,121,114,105,103,104,116,34,62,48,34,32,104,101,105,103,104,116,61,34,
-101,118,101,110,32,116,104,111,117,103,104,114,101,112,108,97,99,101,109,101,110
-,116,100,101,115,116,105,110,97,116,105,111,110,67,111,114,112,111,114,97,116,
-105,111,110,60,117,108,32,99,108,97,115,115,61,34,65,115,115,111,99,105,97,116,
-105,111,110,105,110,100,105,118,105,100,117,97,108,115,112,101,114,115,112,101,
-99,116,105,118,101,115,101,116,84,105,109,101,111,117,116,40,117,114,108,40,104,
-116,116,112,58,47,47,109,97,116,104,101,109,97,116,105,99,115,109,97,114,103,105
-,110,45,116,111,112,58,101,118,101,110,116,117,97,108,108,121,32,100,101,115,99,
-114,105,112,116,105,111,110,41,32,110,111,45,114,101,112,101,97,116,99,111,108,
-108,101,99,116,105,111,110,115,46,74,80,71,124,116,104,117,109,98,124,112,97,114
-,116,105,99,105,112,97,116,101,47,104,101,97,100,62,60,98,111,100,121,102,108,
-111,97,116,58,108,101,102,116,59,60,108,105,32,99,108,97,115,115,61,34,104,117,
-110,100,114,101,100,115,32,111,102,10,10,72,111,119,101,118,101,114,44,32,99,111
-,109,112,111,115,105,116,105,111,110,99,108,101,97,114,58,98,111,116,104,59,99,
-111,111,112,101,114,97,116,105,111,110,119,105,116,104,105,110,32,116,104,101,32
-,108,97,98,101,108,32,102,111,114,61,34,98,111,114,100,101,114,45,116,111,112,58
-,78,101,119,32,90,101,97,108,97,110,100,114,101,99,111,109,109,101,110,100,101,
-100,112,104,111,116,111,103,114,97,112,104,121,105,110,116,101,114,101,115,116,
-105,110,103,38,108,116,59,115,117,112,38,103,116,59,99,111,110,116,114,111,118,
-101,114,115,121,78,101,116,104,101,114,108,97,110,100,115,97,108,116,101,114,110
-,97,116,105,118,101,109,97,120,108,101,110,103,116,104,61,34,115,119,105,116,122
-,101,114,108,97,110,100,68,101,118,101,108,111,112,109,101,110,116,101,115,115,
-101,110,116,105,97,108,108,121,10,10,65,108,116,104,111,117,103,104,32,60,47,116
-,101,120,116,97,114,101,97,62,116,104,117,110,100,101,114,98,105,114,100,114,101
-,112,114,101,115,101,110,116,101,100,38,97,109,112,59,110,100,97,115,104,59,115,
-112,101,99,117,108,97,116,105,111,110,99,111,109,109,117,110,105,116,105,101,115
-,108,101,103,105,115,108,97,116,105,111,110,101,108,101,99,116,114,111,110,105,
-99,115,10,9,60,100,105,118,32,105,100,61,34,105,108,108,117,115,116,114,97,116,
-101,100,101,110,103,105,110,101,101,114,105,110,103,116,101,114,114,105,116,111,
-114,105,101,115,97,117,116,104,111,114,105,116,105,101,115,100,105,115,116,114,
-105,98,117,116,101,100,54,34,32,104,101,105,103,104,116,61,34,115,97,110,115,45,
-115,101,114,105,102,59,99,97,112,97,98,108,101,32,111,102,32,100,105,115,97,112,
-112,101,97,114,101,100,105,110,116,101,114,97,99,116,105,118,101,108,111,111,107
-,105,110,103,32,102,111,114,105,116,32,119,111,117,108,100,32,98,101,65,102,103,
-104,97,110,105,115,116,97,110,119,97,115,32,99,114,101,97,116,101,100,77,97,116,
-104,46,102,108,111,111,114,40,115,117,114,114,111,117,110,100,105,110,103,99,97,
-110,32,97,108,115,111,32,98,101,111,98,115,101,114,118,97,116,105,111,110,109,97
-,105,110,116,101,110,97,110,99,101,101,110,99,111,117,110,116,101,114,101,100,60
-,104,50,32,99,108,97,115,115,61,34,109,111,114,101,32,114,101,99,101,110,116,105
-,116,32,104,97,115,32,98,101,101,110,105,110,118,97,115,105,111,110,32,111,102,
-41,46,103,101,116,84,105,109,101,40,41,102,117,110,100,97,109,101,110,116,97,108
-,68,101,115,112,105,116,101,32,116,104,101,34,62,60,100,105,118,32,105,100,61,34
-,105,110,115,112,105,114,97,116,105,111,110,101,120,97,109,105,110,97,116,105,
-111,110,112,114,101,112,97,114,97,116,105,111,110,101,120,112,108,97,110,97,116,
-105,111,110,60,105,110,112,117,116,32,105,100,61,34,60,47,97,62,60,47,115,112,97
-,110,62,118,101,114,115,105,111,110,115,32,111,102,105,110,115,116,114,117,109,
-101,110,116,115,98,101,102,111,114,101,32,116,104,101,32,32,61,32,39,104,116,116
-,112,58,47,47,68,101,115,99,114,105,112,116,105,111,110,114,101,108,97,116,105,
-118,101,108,121,32,46,115,117,98,115,116,114,105,110,103,40,101,97,99,104,32,111
-,102,32,116,104,101,101,120,112,101,114,105,109,101,110,116,115,105,110,102,108,
-117,101,110,116,105,97,108,105,110,116,101,103,114,97,116,105,111,110,109,97,110
-,121,32,112,101,111,112,108,101,100,117,101,32,116,111,32,116,104,101,32,99,111,
-109,98,105,110,97,116,105,111,110,100,111,32,110,111,116,32,104,97,118,101,77,
-105,100,100,108,101,32,69,97,115,116,60,110,111,115,99,114,105,112,116,62,60,99,
-111,112,121,114,105,103,104,116,34,32,112,101,114,104,97,112,115,32,116,104,101,
-105,110,115,116,105,116,117,116,105,111,110,105,110,32,68,101,99,101,109,98,101,
-114,97,114,114,97,110,103,101,109,101,110,116,109,111,115,116,32,102,97,109,111,
-117,115,112,101,114,115,111,110,97,108,105,116,121,99,114,101,97,116,105,111,110
-,32,111,102,108,105,109,105,116,97,116,105,111,110,115,101,120,99,108,117,115,
-105,118,101,108,121,115,111,118,101,114,101,105,103,110,116,121,45,99,111,110,
-116,101,110,116,34,62,10,60,116,100,32,99,108,97,115,115,61,34,117,110,100,101,
-114,103,114,111,117,110,100,112,97,114,97,108,108,101,108,32,116,111,100,111,99,
-116,114,105,110,101,32,111,102,111,99,99,117,112,105,101,100,32,98,121,116,101,
-114,109,105,110,111,108,111,103,121,82,101,110,97,105,115,115,97,110,99,101,97,
-32,110,117,109,98,101,114,32,111,102,115,117,112,112,111,114,116,32,102,111,114,
-101,120,112,108,111,114,97,116,105,111,110,114,101,99,111,103,110,105,116,105,
-111,110,112,114,101,100,101,99,101,115,115,111,114,60,105,109,103,32,115,114,99,
-61,34,47,60,104,49,32,99,108,97,115,115,61,34,112,117,98,108,105,99,97,116,105,
-111,110,109,97,121,32,97,108,115,111,32,98,101,115,112,101,99,105,97,108,105,122
-,101,100,60,47,102,105,101,108,100,115,101,116,62,112,114,111,103,114,101,115,
-115,105,118,101,109,105,108,108,105,111,110,115,32,111,102,115,116,97,116,101,
-115,32,116,104,97,116,101,110,102,111,114,99,101,109,101,110,116,97,114,111,117,
-110,100,32,116,104,101,32,111,110,101,32,97,110,111,116,104,101,114,46,112,97,
-114,101,110,116,78,111,100,101,97,103,114,105,99,117,108,116,117,114,101,65,108,
-116,101,114,110,97,116,105,118,101,114,101,115,101,97,114,99,104,101,114,115,116
-,111,119,97,114,100,115,32,116,104,101,77,111,115,116,32,111,102,32,116,104,101,
-109,97,110,121,32,111,116,104,101,114,32,40,101,115,112,101,99,105,97,108,108,
-121,60,116,100,32,119,105,100,116,104,61,34,59,119,105,100,116,104,58,49,48,48,
-37,105,110,100,101,112,101,110,100,101,110,116,60,104,51,32,99,108,97,115,115,61
-,34,32,111,110,99,104,97,110,103,101,61,34,41,46,97,100,100,67,108,97,115,115,40
-,105,110,116,101,114,97,99,116,105,111,110,79,110,101,32,111,102,32,116,104,101,
-32,100,97,117,103,104,116,101,114,32,111,102,97,99,99,101,115,115,111,114,105,
-101,115,98,114,97,110,99,104,101,115,32,111,102,13,10,60,100,105,118,32,105,100,
-61,34,116,104,101,32,108,97,114,103,101,115,116,100,101,99,108,97,114,97,116,105
-,111,110,114,101,103,117,108,97,116,105,111,110,115,73,110,102,111,114,109,97,
-116,105,111,110,116,114,97,110,115,108,97,116,105,111,110,100,111,99,117,109,101
-,110,116,97,114,121,105,110,32,111,114,100,101,114,32,116,111,34,62,10,60,104,
-101,97,100,62,10,60,34,32,104,101,105,103,104,116,61,34,49,97,99,114,111,115,115
-,32,116,104,101,32,111,114,105,101,110,116,97,116,105,111,110,41,59,60,47,115,99
-,114,105,112,116,62,105,109,112,108,101,109,101,110,116,101,100,99,97,110,32,98,
-101,32,115,101,101,110,116,104,101,114,101,32,119,97,115,32,97,100,101,109,111,
-110,115,116,114,97,116,101,99,111,110,116,97,105,110,101,114,34,62,99,111,110,
-110,101,99,116,105,111,110,115,116,104,101,32,66,114,105,116,105,115,104,119,97,
-115,32,119,114,105,116,116,101,110,33,105,109,112,111,114,116,97,110,116,59,112,
-120,59,32,109,97,114,103,105,110,45,102,111,108,108,111,119,101,100,32,98,121,97
-,98,105,108,105,116,121,32,116,111,32,99,111,109,112,108,105,99,97,116,101,100,
-100,117,114,105,110,103,32,116,104,101,32,105,109,109,105,103,114,97,116,105,111
-,110,97,108,115,111,32,99,97,108,108,101,100,60,104,52,32,99,108,97,115,115,61,
-34,100,105,115,116,105,110,99,116,105,111,110,114,101,112,108,97,99,101,100,32,
-98,121,103,111,118,101,114,110,109,101,110,116,115,108,111,99,97,116,105,111,110
-,32,111,102,105,110,32,78,111,118,101,109,98,101,114,119,104,101,116,104,101,114
-,32,116,104,101,60,47,112,62,10,60,47,100,105,118,62,97,99,113,117,105,115,105,
-116,105,111,110,99,97,108,108,101,100,32,116,104,101,32,112,101,114,115,101,99,
-117,116,105,111,110,100,101,115,105,103,110,97,116,105,111,110,123,102,111,110,
-116,45,115,105,122,101,58,97,112,112,101,97,114,101,100,32,105,110,105,110,118,
-101,115,116,105,103,97,116,101,101,120,112,101,114,105,101,110,99,101,100,109,
-111,115,116,32,108,105,107,101,108,121,119,105,100,101,108,121,32,117,115,101,
-100,100,105,115,99,117,115,115,105,111,110,115,112,114,101,115,101,110,99,101,32
-,111,102,32,40,100,111,99,117,109,101,110,116,46,101,120,116,101,110,115,105,118
-,101,108,121,73,116,32,104,97,115,32,98,101,101,110,105,116,32,100,111,101,115,
-32,110,111,116,99,111,110,116,114,97,114,121,32,116,111,105,110,104,97,98,105,
-116,97,110,116,115,105,109,112,114,111,118,101,109,101,110,116,115,99,104,111,
-108,97,114,115,104,105,112,99,111,110,115,117,109,112,116,105,111,110,105,110,
-115,116,114,117,99,116,105,111,110,102,111,114,32,101,120,97,109,112,108,101,111
-,110,101,32,111,114,32,109,111,114,101,112,120,59,32,112,97,100,100,105,110,103,
-116,104,101,32,99,117,114,114,101,110,116,97,32,115,101,114,105,101,115,32,111,
-102,97,114,101,32,117,115,117,97,108,108,121,114,111,108,101,32,105,110,32,116,
-104,101,112,114,101,118,105,111,117,115,108,121,32,100,101,114,105,118,97,116,
-105,118,101,115,101,118,105,100,101,110,99,101,32,111,102,101,120,112,101,114,
-105,101,110,99,101,115,99,111,108,111,114,115,99,104,101,109,101,115,116,97,116,
-101,100,32,116,104,97,116,99,101,114,116,105,102,105,99,97,116,101,60,47,97,62,
-60,47,100,105,118,62,10,32,115,101,108,101,99,116,101,100,61,34,104,105,103,104,
-32,115,99,104,111,111,108,114,101,115,112,111,110,115,101,32,116,111,99,111,109,
-102,111,114,116,97,98,108,101,97,100,111,112,116,105,111,110,32,111,102,116,104,
-114,101,101,32,121,101,97,114,115,116,104,101,32,99,111,117,110,116,114,121,105,
-110,32,70,101,98,114,117,97,114,121,115,111,32,116,104,97,116,32,116,104,101,112
-,101,111,112,108,101,32,119,104,111,32,112,114,111,118,105,100,101,100,32,98,121
-,60,112,97,114,97,109,32,110,97,109,101,97,102,102,101,99,116,101,100,32,98,121,
-105,110,32,116,101,114,109,115,32,111,102,97,112,112,111,105,110,116,109,101,110
-,116,73,83,79,45,56,56,53,57,45,49,34,119,97,115,32,98,111,114,110,32,105,110,
-104,105,115,116,111,114,105,99,97,108,32,114,101,103,97,114,100,101,100,32,97,
-115,109,101,97,115,117,114,101,109,101,110,116,105,115,32,98,97,115,101,100,32,
-111,110,32,97,110,100,32,111,116,104,101,114,32,58,32,102,117,110,99,116,105,111
-,110,40,115,105,103,110,105,102,105,99,97,110,116,99,101,108,101,98,114,97,116,
-105,111,110,116,114,97,110,115,109,105,116,116,101,100,47,106,115,47,106,113,117
-,101,114,121,46,105,115,32,107,110,111,119,110,32,97,115,116,104,101,111,114,101
-,116,105,99,97,108,32,116,97,98,105,110,100,101,120,61,34,105,116,32,99,111,117,
-108,100,32,98,101,60,110,111,115,99,114,105,112,116,62,10,104,97,118,105,110,103
-,32,98,101,101,110,13,10,60,104,101,97,100,62,13,10,60,32,38,113,117,111,116,59,
-84,104,101,32,99,111,109,112,105,108,97,116,105,111,110,104,101,32,104,97,100,32
-,98,101,101,110,112,114,111,100,117,99,101,100,32,98,121,112,104,105,108,111,115
-,111,112,104,101,114,99,111,110,115,116,114,117,99,116,101,100,105,110,116,101,
-110,100,101,100,32,116,111,97,109,111,110,103,32,111,116,104,101,114,99,111,109,
-112,97,114,101,100,32,116,111,116,111,32,115,97,121,32,116,104,97,116,69,110,103
-,105,110,101,101,114,105,110,103,97,32,100,105,102,102,101,114,101,110,116,114,
-101,102,101,114,114,101,100,32,116,111,100,105,102,102,101,114,101,110,99,101,
-115,98,101,108,105,101,102,32,116,104,97,116,112,104,111,116,111,103,114,97,112,
-104,115,105,100,101,110,116,105,102,121,105,110,103,72,105,115,116,111,114,121,
-32,111,102,32,82,101,112,117,98,108,105,99,32,111,102,110,101,99,101,115,115,97,
-114,105,108,121,112,114,111,98,97,98,105,108,105,116,121,116,101,99,104,110,105,
-99,97,108,108,121,108,101,97,118,105,110,103,32,116,104,101,115,112,101,99,116,
-97,99,117,108,97,114,102,114,97,99,116,105,111,110,32,111,102,101,108,101,99,116
-,114,105,99,105,116,121,104,101,97,100,32,111,102,32,116,104,101,114,101,115,116
-,97,117,114,97,110,116,115,112,97,114,116,110,101,114,115,104,105,112,101,109,
-112,104,97,115,105,115,32,111,110,109,111,115,116,32,114,101,99,101,110,116,115,
-104,97,114,101,32,119,105,116,104,32,115,97,121,105,110,103,32,116,104,97,116,
-102,105,108,108,101,100,32,119,105,116,104,100,101,115,105,103,110,101,100,32,
-116,111,105,116,32,105,115,32,111,102,116,101,110,34,62,60,47,105,102,114,97,109
-,101,62,97,115,32,102,111,108,108,111,119,115,58,109,101,114,103,101,100,32,119,
-105,116,104,116,104,114,111,117,103,104,32,116,104,101,99,111,109,109,101,114,99
-,105,97,108,32,112,111,105,110,116,101,100,32,111,117,116,111,112,112,111,114,
-116,117,110,105,116,121,118,105,101,119,32,111,102,32,116,104,101,114,101,113,
-117,105,114,101,109,101,110,116,100,105,118,105,115,105,111,110,32,111,102,112,
-114,111,103,114,97,109,109,105,110,103,104,101,32,114,101,99,101,105,118,101,100
-,115,101,116,73,110,116,101,114,118,97,108,34,62,60,47,115,112,97,110,62,60,47,
-105,110,32,78,101,119,32,89,111,114,107,97,100,100,105,116,105,111,110,97,108,32
-,99,111,109,112,114,101,115,115,105,111,110,10,10,60,100,105,118,32,105,100,61,
-34,105,110,99,111,114,112,111,114,97,116,101,59,60,47,115,99,114,105,112,116,62,
-60,97,116,116,97,99,104,69,118,101,110,116,98,101,99,97,109,101,32,116,104,101,
-32,34,32,116,97,114,103,101,116,61,34,95,99,97,114,114,105,101,100,32,111,117,
-116,83,111,109,101,32,111,102,32,116,104,101,115,99,105,101,110,99,101,32,97,110
-,100,116,104,101,32,116,105,109,101,32,111,102,67,111,110,116,97,105,110,101,114
-,34,62,109,97,105,110,116,97,105,110,105,110,103,67,104,114,105,115,116,111,112,
-104,101,114,77,117,99,104,32,111,102,32,116,104,101,119,114,105,116,105,110,103,
-115,32,111,102,34,32,104,101,105,103,104,116,61,34,50,115,105,122,101,32,111,102
-,32,116,104,101,118,101,114,115,105,111,110,32,111,102,32,109,105,120,116,117,
-114,101,32,111,102,32,98,101,116,119,101,101,110,32,116,104,101,69,120,97,109,
-112,108,101,115,32,111,102,101,100,117,99,97,116,105,111,110,97,108,99,111,109,
-112,101,116,105,116,105,118,101,32,111,110,115,117,98,109,105,116,61,34,100,105,
-114,101,99,116,111,114,32,111,102,100,105,115,116,105,110,99,116,105,118,101,47,
-68,84,68,32,88,72,84,77,76,32,114,101,108,97,116,105,110,103,32,116,111,116,101,
-110,100,101,110,99,121,32,116,111,112,114,111,118,105,110,99,101,32,111,102,119,
-104,105,99,104,32,119,111,117,108,100,100,101,115,112,105,116,101,32,116,104,101
-,115,99,105,101,110,116,105,102,105,99,32,108,101,103,105,115,108,97,116,117,114
-,101,46,105,110,110,101,114,72,84,77,76,32,97,108,108,101,103,97,116,105,111,110
-,115,65,103,114,105,99,117,108,116,117,114,101,119,97,115,32,117,115,101,100,32,
-105,110,97,112,112,114,111,97,99,104,32,116,111,105,110,116,101,108,108,105,103,
-101,110,116,121,101,97,114,115,32,108,97,116,101,114,44,115,97,110,115,45,115,
-101,114,105,102,100,101,116,101,114,109,105,110,105,110,103,80,101,114,102,111,
-114,109,97,110,99,101,97,112,112,101,97,114,97,110,99,101,115,44,32,119,104,105,
-99,104,32,105,115,32,102,111,117,110,100,97,116,105,111,110,115,97,98,98,114,101
-,118,105,97,116,101,100,104,105,103,104,101,114,32,116,104,97,110,115,32,102,114
-,111,109,32,116,104,101,32,105,110,100,105,118,105,100,117,97,108,32,99,111,109,
-112,111,115,101,100,32,111,102,115,117,112,112,111,115,101,100,32,116,111,99,108
-,97,105,109,115,32,116,104,97,116,97,116,116,114,105,98,117,116,105,111,110,102,
-111,110,116,45,115,105,122,101,58,49,101,108,101,109,101,110,116,115,32,111,102,
-72,105,115,116,111,114,105,99,97,108,32,104,105,115,32,98,114,111,116,104,101,
-114,97,116,32,116,104,101,32,116,105,109,101,97,110,110,105,118,101,114,115,97,
-114,121,103,111,118,101,114,110,101,100,32,98,121,114,101,108,97,116,101,100,32,
-116,111,32,117,108,116,105,109,97,116,101,108,121,32,105,110,110,111,118,97,116,
-105,111,110,115,105,116,32,105,115,32,115,116,105,108,108,99,97,110,32,111,110,
-108,121,32,98,101,100,101,102,105,110,105,116,105,111,110,115,116,111,71,77,84,
-83,116,114,105,110,103,65,32,110,117,109,98,101,114,32,111,102,105,109,103,32,99
-,108,97,115,115,61,34,69,118,101,110,116,117,97,108,108,121,44,119,97,115,32,99,
-104,97,110,103,101,100,111,99,99,117,114,114,101,100,32,105,110,110,101,105,103,
-104,98,111,114,105,110,103,100,105,115,116,105,110,103,117,105,115,104,119,104,
-101,110,32,104,101,32,119,97,115,105,110,116,114,111,100,117,99,105,110,103,116,
-101,114,114,101,115,116,114,105,97,108,77,97,110,121,32,111,102,32,116,104,101,
-97,114,103,117,101,115,32,116,104,97,116,97,110,32,65,109,101,114,105,99,97,110,
-99,111,110,113,117,101,115,116,32,111,102,119,105,100,101,115,112,114,101,97,100
-,32,119,101,114,101,32,107,105,108,108,101,100,115,99,114,101,101,110,32,97,110,
-100,32,73,110,32,111,114,100,101,114,32,116,111,101,120,112,101,99,116,101,100,
-32,116,111,100,101,115,99,101,110,100,97,110,116,115,97,114,101,32,108,111,99,97
-,116,101,100,108,101,103,105,115,108,97,116,105,118,101,103,101,110,101,114,97,
-116,105,111,110,115,32,98,97,99,107,103,114,111,117,110,100,109,111,115,116,32,
-112,101,111,112,108,101,121,101,97,114,115,32,97,102,116,101,114,116,104,101,114
-,101,32,105,115,32,110,111,116,104,101,32,104,105,103,104,101,115,116,102,114,
-101,113,117,101,110,116,108,121,32,116,104,101,121,32,100,111,32,110,111,116,97,
-114,103,117,101,100,32,116,104,97,116,115,104,111,119,101,100,32,116,104,97,116,
-112,114,101,100,111,109,105,110,97,110,116,116,104,101,111,108,111,103,105,99,97
-,108,98,121,32,116,104,101,32,116,105,109,101,99,111,110,115,105,100,101,114,105
-,110,103,115,104,111,114,116,45,108,105,118,101,100,60,47,115,112,97,110,62,60,
-47,97,62,99,97,110,32,98,101,32,117,115,101,100,118,101,114,121,32,108,105,116,
-116,108,101,111,110,101,32,111,102,32,116,104,101,32,104,97,100,32,97,108,114,
-101,97,100,121,105,110,116,101,114,112,114,101,116,101,100,99,111,109,109,117,
-110,105,99,97,116,101,102,101,97,116,117,114,101,115,32,111,102,103,111,118,101,
-114,110,109,101,110,116,44,60,47,110,111,115,99,114,105,112,116,62,101,110,116,
-101,114,101,100,32,116,104,101,34,32,104,101,105,103,104,116,61,34,51,73,110,100
-,101,112,101,110,100,101,110,116,112,111,112,117,108,97,116,105,111,110,115,108,
-97,114,103,101,45,115,99,97,108,101,46,32,65,108,116,104,111,117,103,104,32,117,
-115,101,100,32,105,110,32,116,104,101,100,101,115,116,114,117,99,116,105,111,110
-,112,111,115,115,105,98,105,108,105,116,121,115,116,97,114,116,105,110,103,32,
-105,110,116,119,111,32,111,114,32,109,111,114,101,101,120,112,114,101,115,115,
-105,111,110,115,115,117,98,111,114,100,105,110,97,116,101,108,97,114,103,101,114
-,32,116,104,97,110,104,105,115,116,111,114,121,32,97,110,100,60,47,111,112,116,
-105,111,110,62,13,10,67,111,110,116,105,110,101,110,116,97,108,101,108,105,109,
-105,110,97,116,105,110,103,119,105,108,108,32,110,111,116,32,98,101,112,114,97,
-99,116,105,99,101,32,111,102,105,110,32,102,114,111,110,116,32,111,102,115,105,
-116,101,32,111,102,32,116,104,101,101,110,115,117,114,101,32,116,104,97,116,116,
-111,32,99,114,101,97,116,101,32,97,109,105,115,115,105,115,115,105,112,112,105,
-112,111,116,101,110,116,105,97,108,108,121,111,117,116,115,116,97,110,100,105,
-110,103,98,101,116,116,101,114,32,116,104,97,110,119,104,97,116,32,105,115,32,
-110,111,119,115,105,116,117,97,116,101,100,32,105,110,109,101,116,97,32,110,97,
-109,101,61,34,84,114,97,100,105,116,105,111,110,97,108,115,117,103,103,101,115,
-116,105,111,110,115,84,114,97,110,115,108,97,116,105,111,110,116,104,101,32,102,
-111,114,109,32,111,102,97,116,109,111,115,112,104,101,114,105,99,105,100,101,111
-,108,111,103,105,99,97,108,101,110,116,101,114,112,114,105,115,101,115,99,97,108
-,99,117,108,97,116,105,110,103,101,97,115,116,32,111,102,32,116,104,101,114,101,
-109,110,97,110,116,115,32,111,102,112,108,117,103,105,110,115,112,97,103,101,47,
-105,110,100,101,120,46,112,104,112,63,114,101,109,97,105,110,101,100,32,105,110,
-116,114,97,110,115,102,111,114,109,101,100,72,101,32,119,97,115,32,97,108,115,
-111,119,97,115,32,97,108,114,101,97,100,121,115,116,97,116,105,115,116,105,99,97
-,108,105,110,32,102,97,118,111,114,32,111,102,77,105,110,105,115,116,114,121,32,
-111,102,109,111,118,101,109,101,110,116,32,111,102,102,111,114,109,117,108,97,
-116,105,111,110,105,115,32,114,101,113,117,105,114,101,100,60,108,105,110,107,32
-,114,101,108,61,34,84,104,105,115,32,105,115,32,116,104,101,32,60,97,32,104,114,
-101,102,61,34,47,112,111,112,117,108,97,114,105,122,101,100,105,110,118,111,108,
-118,101,100,32,105,110,97,114,101,32,117,115,101,100,32,116,111,97,110,100,32,
-115,101,118,101,114,97,108,109,97,100,101,32,98,121,32,116,104,101,115,101,101,
-109,115,32,116,111,32,98,101,108,105,107,101,108,121,32,116,104,97,116,80,97,108
-,101,115,116,105,110,105,97,110,110,97,109,101,100,32,97,102,116,101,114,105,116
-,32,104,97,100,32,98,101,101,110,109,111,115,116,32,99,111,109,109,111,110,116,
-111,32,114,101,102,101,114,32,116,111,98,117,116,32,116,104,105,115,32,105,115,
-99,111,110,115,101,99,117,116,105,118,101,116,101,109,112,111,114,97,114,105,108
-,121,73,110,32,103,101,110,101,114,97,108,44,99,111,110,118,101,110,116,105,111,
-110,115,116,97,107,101,115,32,112,108,97,99,101,115,117,98,100,105,118,105,115,
-105,111,110,116,101,114,114,105,116,111,114,105,97,108,111,112,101,114,97,116,
-105,111,110,97,108,112,101,114,109,97,110,101,110,116,108,121,119,97,115,32,108,
-97,114,103,101,108,121,111,117,116,98,114,101,97,107,32,111,102,105,110,32,116,
-104,101,32,112,97,115,116,102,111,108,108,111,119,105,110,103,32,97,32,120,109,
-108,110,115,58,111,103,61,34,62,60,97,32,99,108,97,115,115,61,34,99,108,97,115,
-115,61,34,116,101,120,116,67,111,110,118,101,114,115,105,111,110,32,109,97,121,
-32,98,101,32,117,115,101,100,109,97,110,117,102,97,99,116,117,114,101,97,102,116
-,101,114,32,98,101,105,110,103,99,108,101,97,114,102,105,120,34,62,10,113,117,
-101,115,116,105,111,110,32,111,102,119,97,115,32,101,108,101,99,116,101,100,116,
-111,32,98,101,99,111,109,101,32,97,98,101,99,97,117,115,101,32,111,102,32,115,
-111,109,101,32,112,101,111,112,108,101,105,110,115,112,105,114,101,100,32,98,121
-,115,117,99,99,101,115,115,102,117,108,32,97,32,116,105,109,101,32,119,104,101,
-110,109,111,114,101,32,99,111,109,109,111,110,97,109,111,110,103,115,116,32,116,
-104,101,97,110,32,111,102,102,105,99,105,97,108,119,105,100,116,104,58,49,48,48,
-37,59,116,101,99,104,110,111,108,111,103,121,44,119,97,115,32,97,100,111,112,116
-,101,100,116,111,32,107,101,101,112,32,116,104,101,115,101,116,116,108,101,109,
-101,110,116,115,108,105,118,101,32,98,105,114,116,104,115,105,110,100,101,120,46
-,104,116,109,108,34,67,111,110,110,101,99,116,105,99,117,116,97,115,115,105,103,
-110,101,100,32,116,111,38,97,109,112,59,116,105,109,101,115,59,97,99,99,111,117,
-110,116,32,102,111,114,97,108,105,103,110,61,114,105,103,104,116,116,104,101,32,
-99,111,109,112,97,110,121,97,108,119,97,121,115,32,98,101,101,110,114,101,116,
-117,114,110,101,100,32,116,111,105,110,118,111,108,118,101,109,101,110,116,66,
-101,99,97,117,115,101,32,116,104,101,116,104,105,115,32,112,101,114,105,111,100,
-34,32,110,97,109,101,61,34,113,34,32,99,111,110,102,105,110,101,100,32,116,111,
-97,32,114,101,115,117,108,116,32,111,102,118,97,108,117,101,61,34,34,32,47,62,
-105,115,32,97,99,116,117,97,108,108,121,69,110,118,105,114,111,110,109,101,110,
-116,13,10,60,47,104,101,97,100,62,13,10,67,111,110,118,101,114,115,101,108,121,
-44,62,10,60,100,105,118,32,105,100,61,34,48,34,32,119,105,100,116,104,61,34,49,
-105,115,32,112,114,111,98,97,98,108,121,104,97,118,101,32,98,101,99,111,109,101,
-99,111,110,116,114,111,108,108,105,110,103,116,104,101,32,112,114,111,98,108,101
-,109,99,105,116,105,122,101,110,115,32,111,102,112,111,108,105,116,105,99,105,97
-,110,115,114,101,97,99,104,101,100,32,116,104,101,97,115,32,101,97,114,108,121,
-32,97,115,58,110,111,110,101,59,32,111,118,101,114,60,116,97,98,108,101,32,99,
-101,108,108,118,97,108,105,100,105,116,121,32,111,102,100,105,114,101,99,116,108
-,121,32,116,111,111,110,109,111,117,115,101,100,111,119,110,119,104,101,114,101,
-32,105,116,32,105,115,119,104,101,110,32,105,116,32,119,97,115,109,101,109,98,
-101,114,115,32,111,102,32,114,101,108,97,116,105,111,110,32,116,111,97,99,99,111
-,109,109,111,100,97,116,101,97,108,111,110,103,32,119,105,116,104,32,73,110,32,
-116,104,101,32,108,97,116,101,116,104,101,32,69,110,103,108,105,115,104,100,101,
-108,105,99,105,111,117,115,34,62,116,104,105,115,32,105,115,32,110,111,116,116,
-104,101,32,112,114,101,115,101,110,116,105,102,32,116,104,101,121,32,97,114,101,
-97,110,100,32,102,105,110,97,108,108,121,97,32,109,97,116,116,101,114,32,111,102
-,13,10,9,60,47,100,105,118,62,13,10,13,10,60,47,115,99,114,105,112,116,62,102,97
-,115,116,101,114,32,116,104,97,110,109,97,106,111,114,105,116,121,32,111,102,97,
-102,116,101,114,32,119,104,105,99,104,99,111,109,112,97,114,97,116,105,118,101,
-116,111,32,109,97,105,110,116,97,105,110,105,109,112,114,111,118,101,32,116,104,
-101,97,119,97,114,100,101,100,32,116,104,101,101,114,34,32,99,108,97,115,115,61,
-34,102,114,97,109,101,98,111,114,100,101,114,114,101,115,116,111,114,97,116,105,
-111,110,105,110,32,116,104,101,32,115,97,109,101,97,110,97,108,121,115,105,115,
-32,111,102,116,104,101,105,114,32,102,105,114,115,116,68,117,114,105,110,103,32,
-116,104,101,32,99,111,110,116,105,110,101,110,116,97,108,115,101,113,117,101,110
-,99,101,32,111,102,102,117,110,99,116,105,111,110,40,41,123,102,111,110,116,45,
-115,105,122,101,58,32,119,111,114,107,32,111,110,32,116,104,101,60,47,115,99,114
-,105,112,116,62,10,60,98,101,103,105,110,115,32,119,105,116,104,106,97,118,97,
-115,99,114,105,112,116,58,99,111,110,115,116,105,116,117,101,110,116,119,97,115,
-32,102,111,117,110,100,101,100,101,113,117,105,108,105,98,114,105,117,109,97,115
-,115,117,109,101,32,116,104,97,116,105,115,32,103,105,118,101,110,32,98,121,110,
-101,101,100,115,32,116,111,32,98,101,99,111,111,114,100,105,110,97,116,101,115,
-116,104,101,32,118,97,114,105,111,117,115,97,114,101,32,112,97,114,116,32,111,
-102,111,110,108,121,32,105,110,32,116,104,101,115,101,99,116,105,111,110,115,32,
-111,102,105,115,32,97,32,99,111,109,109,111,110,116,104,101,111,114,105,101,115,
-32,111,102,100,105,115,99,111,118,101,114,105,101,115,97,115,115,111,99,105,97,
-116,105,111,110,101,100,103,101,32,111,102,32,116,104,101,115,116,114,101,110,
-103,116,104,32,111,102,112,111,115,105,116,105,111,110,32,105,110,112,114,101,
-115,101,110,116,45,100,97,121,117,110,105,118,101,114,115,97,108,108,121,116,111
-,32,102,111,114,109,32,116,104,101,98,117,116,32,105,110,115,116,101,97,100,99,
-111,114,112,111,114,97,116,105,111,110,97,116,116,97,99,104,101,100,32,116,111,
-105,115,32,99,111,109,109,111,110,108,121,114,101,97,115,111,110,115,32,102,111,
-114,32,38,113,117,111,116,59,116,104,101,32,99,97,110,32,98,101,32,109,97,100,
-101,119,97,115,32,97,98,108,101,32,116,111,119,104,105,99,104,32,109,101,97,110,
-115,98,117,116,32,100,105,100,32,110,111,116,111,110,77,111,117,115,101,79,118,
-101,114,97,115,32,112,111,115,115,105,98,108,101,111,112,101,114,97,116,101,100,
-32,98,121,99,111,109,105,110,103,32,102,114,111,109,116,104,101,32,112,114,105,
-109,97,114,121,97,100,100,105,116,105,111,110,32,111,102,102,111,114,32,115,101,
-118,101,114,97,108,116,114,97,110,115,102,101,114,114,101,100,97,32,112,101,114,
-105,111,100,32,111,102,97,114,101,32,97,98,108,101,32,116,111,104,111,119,101,
-118,101,114,44,32,105,116,115,104,111,117,108,100,32,104,97,118,101,109,117,99,
-104,32,108,97,114,103,101,114,10,9,60,47,115,99,114,105,112,116,62,97,100,111,
-112,116,101,100,32,116,104,101,112,114,111,112,101,114,116,121,32,111,102,100,
-105,114,101,99,116,101,100,32,98,121,101,102,102,101,99,116,105,118,101,108,121,
-119,97,115,32,98,114,111,117,103,104,116,99,104,105,108,100,114,101,110,32,111,
-102,80,114,111,103,114,97,109,109,105,110,103,108,111,110,103,101,114,32,116,104
-,97,110,109,97,110,117,115,99,114,105,112,116,115,119,97,114,32,97,103,97,105,
-110,115,116,98,121,32,109,101,97,110,115,32,111,102,97,110,100,32,109,111,115,
-116,32,111,102,115,105,109,105,108,97,114,32,116,111,32,112,114,111,112,114,105,
-101,116,97,114,121,111,114,105,103,105,110,97,116,105,110,103,112,114,101,115,
-116,105,103,105,111,117,115,103,114,97,109,109,97,116,105,99,97,108,101,120,112,
-101,114,105,101,110,99,101,46,116,111,32,109,97,107,101,32,116,104,101,73,116,32
-,119,97,115,32,97,108,115,111,105,115,32,102,111,117,110,100,32,105,110,99,111,
-109,112,101,116,105,116,111,114,115,105,110,32,116,104,101,32,85,46,83,46,114,
-101,112,108,97,99,101,32,116,104,101,98,114,111,117,103,104,116,32,116,104,101,
-99,97,108,99,117,108,97,116,105,111,110,102,97,108,108,32,111,102,32,116,104,101
-,116,104,101,32,103,101,110,101,114,97,108,112,114,97,99,116,105,99,97,108,108,
-121,105,110,32,104,111,110,111,114,32,111,102,114,101,108,101,97,115,101,100,32,
-105,110,114,101,115,105,100,101,110,116,105,97,108,97,110,100,32,115,111,109,101
-,32,111,102,107,105,110,103,32,111,102,32,116,104,101,114,101,97,99,116,105,111,
-110,32,116,111,49,115,116,32,69,97,114,108,32,111,102,99,117,108,116,117,114,101
-,32,97,110,100,112,114,105,110,99,105,112,97,108,108,121,60,47,116,105,116,108,
-101,62,10,32,32,116,104,101,121,32,99,97,110,32,98,101,98,97,99,107,32,116,111,
-32,116,104,101,115,111,109,101,32,111,102,32,104,105,115,101,120,112,111,115,117
-,114,101,32,116,111,97,114,101,32,115,105,109,105,108,97,114,102,111,114,109,32,
-111,102,32,116,104,101,97,100,100,70,97,118,111,114,105,116,101,99,105,116,105,
-122,101,110,115,104,105,112,112,97,114,116,32,105,110,32,116,104,101,112,101,111
-,112,108,101,32,119,105,116,104,105,110,32,112,114,97,99,116,105,99,101,116,111,
-32,99,111,110,116,105,110,117,101,38,97,109,112,59,109,105,110,117,115,59,97,112
-,112,114,111,118,101,100,32,98,121,32,116,104,101,32,102,105,114,115,116,32,97,
-108,108,111,119,101,100,32,116,104,101,97,110,100,32,102,111,114,32,116,104,101,
-102,117,110,99,116,105,111,110,105,110,103,112,108,97,121,105,110,103,32,116,104
-,101,115,111,108,117,116,105,111,110,32,116,111,104,101,105,103,104,116,61,34,48
-,34,32,105,110,32,104,105,115,32,98,111,111,107,109,111,114,101,32,116,104,97,
-110,32,97,102,111,108,108,111,119,115,32,116,104,101,99,114,101,97,116,101,100,
-32,116,104,101,112,114,101,115,101,110,99,101,32,105,110,38,110,98,115,112,59,60
-,47,116,100,62,110,97,116,105,111,110,97,108,105,115,116,116,104,101,32,105,100,
-101,97,32,111,102,97,32,99,104,97,114,97,99,116,101,114,119,101,114,101,32,102,
-111,114,99,101,100,32,99,108,97,115,115,61,34,98,116,110,100,97,121,115,32,111,
-102,32,116,104,101,102,101,97,116,117,114,101,100,32,105,110,115,104,111,119,105
-,110,103,32,116,104,101,105,110,116,101,114,101,115,116,32,105,110,105,110,32,
-112,108,97,99,101,32,111,102,116,117,114,110,32,111,102,32,116,104,101,116,104,
-101,32,104,101,97,100,32,111,102,76,111,114,100,32,111,102,32,116,104,101,112,
-111,108,105,116,105,99,97,108,108,121,104,97,115,32,105,116,115,32,111,119,110,
-69,100,117,99,97,116,105,111,110,97,108,97,112,112,114,111,118,97,108,32,111,102
-,115,111,109,101,32,111,102,32,116,104,101,101,97,99,104,32,111,116,104,101,114,
-44,98,101,104,97,118,105,111,114,32,111,102,97,110,100,32,98,101,99,97,117,115,
-101,97,110,100,32,97,110,111,116,104,101,114,97,112,112,101,97,114,101,100,32,
-111,110,114,101,99,111,114,100,101,100,32,105,110,98,108,97,99,107,38,113,117,
-111,116,59,109,97,121,32,105,110,99,108,117,100,101,116,104,101,32,119,111,114,
-108,100,39,115,99,97,110,32,108,101,97,100,32,116,111,114,101,102,101,114,115,32
-,116,111,32,97,98,111,114,100,101,114,61,34,48,34,32,103,111,118,101,114,110,109
-,101,110,116,32,119,105,110,110,105,110,103,32,116,104,101,114,101,115,117,108,
-116,101,100,32,105,110,32,119,104,105,108,101,32,116,104,101,32,87,97,115,104,
-105,110,103,116,111,110,44,116,104,101,32,115,117,98,106,101,99,116,99,105,116,
-121,32,105,110,32,116,104,101,62,60,47,100,105,118,62,13,10,9,9,114,101,102,108,
-101,99,116,32,116,104,101,116,111,32,99,111,109,112,108,101,116,101,98,101,99,97
-,109,101,32,109,111,114,101,114,97,100,105,111,97,99,116,105,118,101,114,101,106
-,101,99,116,101,100,32,98,121,119,105,116,104,111,117,116,32,97,110,121,104,105,
-115,32,102,97,116,104,101,114,44,119,104,105,99,104,32,99,111,117,108,100,99,111
-,112,121,32,111,102,32,116,104,101,116,111,32,105,110,100,105,99,97,116,101,97,
-32,112,111,108,105,116,105,99,97,108,97,99,99,111,117,110,116,115,32,111,102,99,
-111,110,115,116,105,116,117,116,101,115,119,111,114,107,101,100,32,119,105,116,
-104,101,114,60,47,97,62,60,47,108,105,62,111,102,32,104,105,115,32,108,105,102,
-101,97,99,99,111,109,112,97,110,105,101,100,99,108,105,101,110,116,87,105,100,
-116,104,112,114,101,118,101,110,116,32,116,104,101,76,101,103,105,115,108,97,116
-,105,118,101,100,105,102,102,101,114,101,110,116,108,121,116,111,103,101,116,104
-,101,114,32,105,110,104,97,115,32,115,101,118,101,114,97,108,102,111,114,32,97,
-110,111,116,104,101,114,116,101,120,116,32,111,102,32,116,104,101,102,111,117,
-110,100,101,100,32,116,104,101,101,32,119,105,116,104,32,116,104,101,32,105,115,
-32,117,115,101,100,32,102,111,114,99,104,97,110,103,101,100,32,116,104,101,117,
-115,117,97,108,108,121,32,116,104,101,112,108,97,99,101,32,119,104,101,114,101,
-119,104,101,114,101,97,115,32,116,104,101,62,32,60,97,32,104,114,101,102,61,34,
-34,62,60,97,32,104,114,101,102,61,34,116,104,101,109,115,101,108,118,101,115,44,
-97,108,116,104,111,117,103,104,32,104,101,116,104,97,116,32,99,97,110,32,98,101,
-116,114,97,100,105,116,105,111,110,97,108,114,111,108,101,32,111,102,32,116,104,
-101,97,115,32,97,32,114,101,115,117,108,116,114,101,109,111,118,101,67,104,105,
-108,100,100,101,115,105,103,110,101,100,32,98,121,119,101,115,116,32,111,102,32,
-116,104,101,83,111,109,101,32,112,101,111,112,108,101,112,114,111,100,117,99,116
-,105,111,110,44,115,105,100,101,32,111,102,32,116,104,101,110,101,119,115,108,
-101,116,116,101,114,115,117,115,101,100,32,98,121,32,116,104,101,100,111,119,110
-,32,116,111,32,116,104,101,97,99,99,101,112,116,101,100,32,98,121,108,105,118,
-101,32,105,110,32,116,104,101,97,116,116,101,109,112,116,115,32,116,111,111,117,
-116,115,105,100,101,32,116,104,101,102,114,101,113,117,101,110,99,105,101,115,72
-,111,119,101,118,101,114,44,32,105,110,112,114,111,103,114,97,109,109,101,114,
-115,97,116,32,108,101,97,115,116,32,105,110,97,112,112,114,111,120,105,109,97,
-116,101,97,108,116,104,111,117,103,104,32,105,116,119,97,115,32,112,97,114,116,
-32,111,102,97,110,100,32,118,97,114,105,111,117,115,71,111,118,101,114,110,111,
-114,32,111,102,116,104,101,32,97,114,116,105,99,108,101,116,117,114,110,101,100,
-32,105,110,116,111,62,60,97,32,104,114,101,102,61,34,47,116,104,101,32,101,99,
-111,110,111,109,121,105,115,32,116,104,101,32,109,111,115,116,109,111,115,116,32
-,119,105,100,101,108,121,119,111,117,108,100,32,108,97,116,101,114,97,110,100,32
-,112,101,114,104,97,112,115,114,105,115,101,32,116,111,32,116,104,101,111,99,99,
-117,114,115,32,119,104,101,110,117,110,100,101,114,32,119,104,105,99,104,99,111,
-110,100,105,116,105,111,110,115,46,116,104,101,32,119,101,115,116,101,114,110,
-116,104,101,111,114,121,32,116,104,97,116,105,115,32,112,114,111,100,117,99,101,
-100,116,104,101,32,99,105,116,121,32,111,102,105,110,32,119,104,105,99,104,32,
-104,101,115,101,101,110,32,105,110,32,116,104,101,116,104,101,32,99,101,110,116,
-114,97,108,98,117,105,108,100,105,110,103,32,111,102,109,97,110,121,32,111,102,
-32,104,105,115,97,114,101,97,32,111,102,32,116,104,101,105,115,32,116,104,101,32
-,111,110,108,121,109,111,115,116,32,111,102,32,116,104,101,109,97,110,121,32,111
-,102,32,116,104,101,116,104,101,32,87,101,115,116,101,114,110,84,104,101,114,101
-,32,105,115,32,110,111,101,120,116,101,110,100,101,100,32,116,111,83,116,97,116,
-105,115,116,105,99,97,108,99,111,108,115,112,97,110,61,50,32,124,115,104,111,114
-,116,32,115,116,111,114,121,112,111,115,115,105,98,108,101,32,116,111,116,111,
-112,111,108,111,103,105,99,97,108,99,114,105,116,105,99,97,108,32,111,102,114,
-101,112,111,114,116,101,100,32,116,111,97,32,67,104,114,105,115,116,105,97,110,
-100,101,99,105,115,105,111,110,32,116,111,105,115,32,101,113,117,97,108,32,116,
-111,112,114,111,98,108,101,109,115,32,111,102,84,104,105,115,32,99,97,110,32,98,
-101,109,101,114,99,104,97,110,100,105,115,101,102,111,114,32,109,111,115,116,32,
-111,102,110,111,32,101,118,105,100,101,110,99,101,101,100,105,116,105,111,110,
-115,32,111,102,101,108,101,109,101,110,116,115,32,105,110,38,113,117,111,116,59,
-46,32,84,104,101,99,111,109,47,105,109,97,103,101,115,47,119,104,105,99,104,32,
-109,97,107,101,115,116,104,101,32,112,114,111,99,101,115,115,114,101,109,97,105,
-110,115,32,116,104,101,108,105,116,101,114,97,116,117,114,101,44,105,115,32,97,
-32,109,101,109,98,101,114,116,104,101,32,112,111,112,117,108,97,114,116,104,101,
-32,97,110,99,105,101,110,116,112,114,111,98,108,101,109,115,32,105,110,116,105,
-109,101,32,111,102,32,116,104,101,100,101,102,101,97,116,101,100,32,98,121,98,
-111,100,121,32,111,102,32,116,104,101,97,32,102,101,119,32,121,101,97,114,115,
-109,117,99,104,32,111,102,32,116,104,101,116,104,101,32,119,111,114,107,32,111,
-102,67,97,108,105,102,111,114,110,105,97,44,115,101,114,118,101,100,32,97,115,32
-,97,103,111,118,101,114,110,109,101,110,116,46,99,111,110,99,101,112,116,115,32,
-111,102,109,111,118,101,109,101,110,116,32,105,110,9,9,60,100,105,118,32,105,100
-,61,34,105,116,34,32,118,97,108,117,101,61,34,108,97,110,103,117,97,103,101,32,
-111,102,97,115,32,116,104,101,121,32,97,114,101,112,114,111,100,117,99,101,100,
-32,105,110,105,115,32,116,104,97,116,32,116,104,101,101,120,112,108,97,105,110,
-32,116,104,101,100,105,118,62,60,47,100,105,118,62,10,72,111,119,101,118,101,114
-,32,116,104,101,108,101,97,100,32,116,111,32,116,104,101,9,60,97,32,104,114,101,
-102,61,34,47,119,97,115,32,103,114,97,110,116,101,100,112,101,111,112,108,101,32
-,104,97,118,101,99,111,110,116,105,110,117,97,108,108,121,119,97,115,32,115,101,
-101,110,32,97,115,97,110,100,32,114,101,108,97,116,101,100,116,104,101,32,114,
-111,108,101,32,111,102,112,114,111,112,111,115,101,100,32,98,121,111,102,32,116,
-104,101,32,98,101,115,116,101,97,99,104,32,111,116,104,101,114,46,67,111,110,115
-,116,97,110,116,105,110,101,112,101,111,112,108,101,32,102,114,111,109,100,105,
-97,108,101,99,116,115,32,111,102,116,111,32,114,101,118,105,115,105,111,110,119,
-97,115,32,114,101,110,97,109,101,100,97,32,115,111,117,114,99,101,32,111,102,116
-,104,101,32,105,110,105,116,105,97,108,108,97,117,110,99,104,101,100,32,105,110,
-112,114,111,118,105,100,101,32,116,104,101,116,111,32,116,104,101,32,119,101,115
-,116,119,104,101,114,101,32,116,104,101,114,101,97,110,100,32,115,105,109,105,
-108,97,114,98,101,116,119,101,101,110,32,116,119,111,105,115,32,97,108,115,111,
-32,116,104,101,69,110,103,108,105,115,104,32,97,110,100,99,111,110,100,105,116,
-105,111,110,115,44,116,104,97,116,32,105,116,32,119,97,115,101,110,116,105,116,
-108,101,100,32,116,111,116,104,101,109,115,101,108,118,101,115,46,113,117,97,110
-,116,105,116,121,32,111,102,114,97,110,115,112,97,114,101,110,99,121,116,104,101
-,32,115,97,109,101,32,97,115,116,111,32,106,111,105,110,32,116,104,101,99,111,
-117,110,116,114,121,32,97,110,100,116,104,105,115,32,105,115,32,116,104,101,84,
-104,105,115,32,108,101,100,32,116,111,97,32,115,116,97,116,101,109,101,110,116,
-99,111,110,116,114,97,115,116,32,116,111,108,97,115,116,73,110,100,101,120,79,
-102,116,104,114,111,117,103,104,32,104,105,115,105,115,32,100,101,115,105,103,
-110,101,100,116,104,101,32,116,101,114,109,32,105,115,105,115,32,112,114,111,118
-,105,100,101,100,112,114,111,116,101,99,116,32,116,104,101,110,103,60,47,97,62,
-60,47,108,105,62,84,104,101,32,99,117,114,114,101,110,116,116,104,101,32,115,105
-,116,101,32,111,102,115,117,98,115,116,97,110,116,105,97,108,101,120,112,101,114
-,105,101,110,99,101,44,105,110,32,116,104,101,32,87,101,115,116,116,104,101,121,
-32,115,104,111,117,108,100,115,108,111,118,101,110,196,141,105,110,97,99,111,109
-,101,110,116,97,114,105,111,115,117,110,105,118,101,114,115,105,100,97,100,99,
-111,110,100,105,99,105,111,110,101,115,97,99,116,105,118,105,100,97,100,101,115,
-101,120,112,101,114,105,101,110,99,105,97,116,101,99,110,111,108,111,103,195,173
-,97,112,114,111,100,117,99,99,105,195,179,110,112,117,110,116,117,97,99,105,195,
-179,110,97,112,108,105,99,97,99,105,195,179,110,99,111,110,116,114,97,115,101,
-195,177,97,99,97,116,101,103,111,114,195,173,97,115,114,101,103,105,115,116,114,
-97,114,115,101,112,114,111,102,101,115,105,111,110,97,108,116,114,97,116,97,109,
-105,101,110,116,111,114,101,103,195,173,115,116,114,97,116,101,115,101,99,114,
-101,116,97,114,195,173,97,112,114,105,110,99,105,112,97,108,101,115,112,114,111,
-116,101,99,99,105,195,179,110,105,109,112,111,114,116,97,110,116,101,115,105,109
-,112,111,114,116,97,110,99,105,97,112,111,115,105,98,105,108,105,100,97,100,105,
-110,116,101,114,101,115,97,110,116,101,99,114,101,99,105,109,105,101,110,116,111
-,110,101,99,101,115,105,100,97,100,101,115,115,117,115,99,114,105,98,105,114,115
-,101,97,115,111,99,105,97,99,105,195,179,110,100,105,115,112,111,110,105,98,108,
-101,115,101,118,97,108,117,97,99,105,195,179,110,101,115,116,117,100,105,97,110,
-116,101,115,114,101,115,112,111,110,115,97,98,108,101,114,101,115,111,108,117,99
-,105,195,179,110,103,117,97,100,97,108,97,106,97,114,97,114,101,103,105,115,116,
-114,97,100,111,115,111,112,111,114,116,117,110,105,100,97,100,99,111,109,101,114
-,99,105,97,108,101,115,102,111,116,111,103,114,97,102,195,173,97,97,117,116,111,
-114,105,100,97,100,101,115,105,110,103,101,110,105,101,114,195,173,97,116,101,
-108,101,118,105,115,105,195,179,110,99,111,109,112,101,116,101,110,99,105,97,111
-,112,101,114,97,99,105,111,110,101,115,101,115,116,97,98,108,101,99,105,100,111,
-115,105,109,112,108,101,109,101,110,116,101,97,99,116,117,97,108,109,101,110,116
-,101,110,97,118,101,103,97,99,105,195,179,110,99,111,110,102,111,114,109,105,100
-,97,100,108,105,110,101,45,104,101,105,103,104,116,58,102,111,110,116,45,102,97,
-109,105,108,121,58,34,32,58,32,34,104,116,116,112,58,47,47,97,112,112,108,105,99
-,97,116,105,111,110,115,108,105,110,107,34,32,104,114,101,102,61,34,115,112,101,
-99,105,102,105,99,97,108,108,121,47,47,60,33,91,67,68,65,84,65,91,10,79,114,103,
-97,110,105,122,97,116,105,111,110,100,105,115,116,114,105,98,117,116,105,111,110
-,48,112,120,59,32,104,101,105,103,104,116,58,114,101,108,97,116,105,111,110,115,
-104,105,112,100,101,118,105,99,101,45,119,105,100,116,104,60,100,105,118,32,99,
-108,97,115,115,61,34,60,108,97,98,101,108,32,102,111,114,61,34,114,101,103,105,
-115,116,114,97,116,105,111,110,60,47,110,111,115,99,114,105,112,116,62,10,47,105
-,110,100,101,120,46,104,116,109,108,34,119,105,110,100,111,119,46,111,112,101,
-110,40,32,33,105,109,112,111,114,116,97,110,116,59,97,112,112,108,105,99,97,116,
-105,111,110,47,105,110,100,101,112,101,110,100,101,110,99,101,47,47,119,119,119,
-46,103,111,111,103,108,101,111,114,103,97,110,105,122,97,116,105,111,110,97,117,
-116,111,99,111,109,112,108,101,116,101,114,101,113,117,105,114,101,109,101,110,
-116,115,99,111,110,115,101,114,118,97,116,105,118,101,60,102,111,114,109,32,110,
-97,109,101,61,34,105,110,116,101,108,108,101,99,116,117,97,108,109,97,114,103,
-105,110,45,108,101,102,116,58,49,56,116,104,32,99,101,110,116,117,114,121,97,110
-,32,105,109,112,111,114,116,97,110,116,105,110,115,116,105,116,117,116,105,111,
-110,115,97,98,98,114,101,118,105,97,116,105,111,110,60,105,109,103,32,99,108,97,
-115,115,61,34,111,114,103,97,110,105,115,97,116,105,111,110,99,105,118,105,108,
-105,122,97,116,105,111,110,49,57,116,104,32,99,101,110,116,117,114,121,97,114,99
-,104,105,116,101,99,116,117,114,101,105,110,99,111,114,112,111,114,97,116,101,
-100,50,48,116,104,32,99,101,110,116,117,114,121,45,99,111,110,116,97,105,110,101
-,114,34,62,109,111,115,116,32,110,111,116,97,98,108,121,47,62,60,47,97,62,60,47,
-100,105,118,62,110,111,116,105,102,105,99,97,116,105,111,110,39,117,110,100,101,
-102,105,110,101,100,39,41,70,117,114,116,104,101,114,109,111,114,101,44,98,101,
-108,105,101,118,101,32,116,104,97,116,105,110,110,101,114,72,84,77,76,32,61,32,
-112,114,105,111,114,32,116,111,32,116,104,101,100,114,97,109,97,116,105,99,97,
-108,108,121,114,101,102,101,114,114,105,110,103,32,116,111,110,101,103,111,116,
-105,97,116,105,111,110,115,104,101,97,100,113,117,97,114,116,101,114,115,83,111,
-117,116,104,32,65,102,114,105,99,97,117,110,115,117,99,99,101,115,115,102,117,
-108,80,101,110,110,115,121,108,118,97,110,105,97,65,115,32,97,32,114,101,115,117
-,108,116,44,60,104,116,109,108,32,108,97,110,103,61,34,38,108,116,59,47,115,117,
-112,38,103,116,59,100,101,97,108,105,110,103,32,119,105,116,104,112,104,105,108,
-97,100,101,108,112,104,105,97,104,105,115,116,111,114,105,99,97,108,108,121,41,
-59,60,47,115,99,114,105,112,116,62,10,112,97,100,100,105,110,103,45,116,111,112,
-58,101,120,112,101,114,105,109,101,110,116,97,108,103,101,116,65,116,116,114,105
-,98,117,116,101,105,110,115,116,114,117,99,116,105,111,110,115,116,101,99,104,
-110,111,108,111,103,105,101,115,112,97,114,116,32,111,102,32,116,104,101,32,61,
-102,117,110,99,116,105,111,110,40,41,123,115,117,98,115,99,114,105,112,116,105,
-111,110,108,46,100,116,100,34,62,13,10,60,104,116,103,101,111,103,114,97,112,104
-,105,99,97,108,67,111,110,115,116,105,116,117,116,105,111,110,39,44,32,102,117,
-110,99,116,105,111,110,40,115,117,112,112,111,114,116,101,100,32,98,121,97,103,
-114,105,99,117,108,116,117,114,97,108,99,111,110,115,116,114,117,99,116,105,111,
-110,112,117,98,108,105,99,97,116,105,111,110,115,102,111,110,116,45,115,105,122,
-101,58,32,49,97,32,118,97,114,105,101,116,121,32,111,102,60,100,105,118,32,115,
-116,121,108,101,61,34,69,110,99,121,99,108,111,112,101,100,105,97,105,102,114,97
-,109,101,32,115,114,99,61,34,100,101,109,111,110,115,116,114,97,116,101,100,97,
-99,99,111,109,112,108,105,115,104,101,100,117,110,105,118,101,114,115,105,116,
-105,101,115,68,101,109,111,103,114,97,112,104,105,99,115,41,59,60,47,115,99,114,
-105,112,116,62,60,100,101,100,105,99,97,116,101,100,32,116,111,107,110,111,119,
-108,101,100,103,101,32,111,102,115,97,116,105,115,102,97,99,116,105,111,110,112,
-97,114,116,105,99,117,108,97,114,108,121,60,47,100,105,118,62,60,47,100,105,118,
-62,69,110,103,108,105,115,104,32,40,85,83,41,97,112,112,101,110,100,67,104,105,
-108,100,40,116,114,97,110,115,109,105,115,115,105,111,110,115,46,32,72,111,119,
-101,118,101,114,44,32,105,110,116,101,108,108,105,103,101,110,99,101,34,32,116,
-97,98,105,110,100,101,120,61,34,102,108,111,97,116,58,114,105,103,104,116,59,67,
-111,109,109,111,110,119,101,97,108,116,104,114,97,110,103,105,110,103,32,102,114
-,111,109,105,110,32,119,104,105,99,104,32,116,104,101,97,116,32,108,101,97,115,
-116,32,111,110,101,114,101,112,114,111,100,117,99,116,105,111,110,101,110,99,121
-,99,108,111,112,101,100,105,97,59,102,111,110,116,45,115,105,122,101,58,49,106,
-117,114,105,115,100,105,99,116,105,111,110,97,116,32,116,104,97,116,32,116,105,
-109,101,34,62,60,97,32,99,108,97,115,115,61,34,73,110,32,97,100,100,105,116,105,
-111,110,44,100,101,115,99,114,105,112,116,105,111,110,43,99,111,110,118,101,114,
-115,97,116,105,111,110,99,111,110,116,97,99,116,32,119,105,116,104,105,115,32,
-103,101,110,101,114,97,108,108,121,114,34,32,99,111,110,116,101,110,116,61,34,
-114,101,112,114,101,115,101,110,116,105,110,103,38,108,116,59,109,97,116,104,38,
-103,116,59,112,114,101,115,101,110,116,97,116,105,111,110,111,99,99,97,115,105,
-111,110,97,108,108,121,60,105,109,103,32,119,105,100,116,104,61,34,110,97,118,
-105,103,97,116,105,111,110,34,62,99,111,109,112,101,110,115,97,116,105,111,110,
-99,104,97,109,112,105,111,110,115,104,105,112,109,101,100,105,97,61,34,97,108,
-108,34,32,118,105,111,108,97,116,105,111,110,32,111,102,114,101,102,101,114,101,
-110,99,101,32,116,111,114,101,116,117,114,110,32,116,114,117,101,59,83,116,114,
-105,99,116,47,47,69,78,34,32,116,114,97,110,115,97,99,116,105,111,110,115,105,
-110,116,101,114,118,101,110,116,105,111,110,118,101,114,105,102,105,99,97,116,
-105,111,110,73,110,102,111,114,109,97,116,105,111,110,32,100,105,102,102,105,99,
-117,108,116,105,101,115,67,104,97,109,112,105,111,110,115,104,105,112,99,97,112,
-97,98,105,108,105,116,105,101,115,60,33,91,101,110,100,105,102,93,45,45,62,125,
-10,60,47,115,99,114,105,112,116,62,10,67,104,114,105,115,116,105,97,110,105,116,
-121,102,111,114,32,101,120,97,109,112,108,101,44,80,114,111,102,101,115,115,105,
-111,110,97,108,114,101,115,116,114,105,99,116,105,111,110,115,115,117,103,103,
-101,115,116,32,116,104,97,116,119,97,115,32,114,101,108,101,97,115,101,100,40,
-115,117,99,104,32,97,115,32,116,104,101,114,101,109,111,118,101,67,108,97,115,
-115,40,117,110,101,109,112,108,111,121,109,101,110,116,116,104,101,32,65,109,101
-,114,105,99,97,110,115,116,114,117,99,116,117,114,101,32,111,102,47,105,110,100,
-101,120,46,104,116,109,108,32,112,117,98,108,105,115,104,101,100,32,105,110,115,
-112,97,110,32,99,108,97,115,115,61,34,34,62,60,97,32,104,114,101,102,61,34,47,
-105,110,116,114,111,100,117,99,116,105,111,110,98,101,108,111,110,103,105,110,
-103,32,116,111,99,108,97,105,109,101,100,32,116,104,97,116,99,111,110,115,101,
-113,117,101,110,99,101,115,60,109,101,116,97,32,110,97,109,101,61,34,71,117,105,
-100,101,32,116,111,32,116,104,101,111,118,101,114,119,104,101,108,109,105,110,
-103,97,103,97,105,110,115,116,32,116,104,101,32,99,111,110,99,101,110,116,114,97
-,116,101,100,44,10,46,110,111,110,116,111,117,99,104,32,111,98,115,101,114,118,
-97,116,105,111,110,115,60,47,97,62,10,60,47,100,105,118,62,10,102,32,40,100,111,
-99,117,109,101,110,116,46,98,111,114,100,101,114,58,32,49,112,120,32,123,102,111
-,110,116,45,115,105,122,101,58,49,116,114,101,97,116,109,101,110,116,32,111,102,
-48,34,32,104,101,105,103,104,116,61,34,49,109,111,100,105,102,105,99,97,116,105,
-111,110,73,110,100,101,112,101,110,100,101,110,99,101,100,105,118,105,100,101,
-100,32,105,110,116,111,103,114,101,97,116,101,114,32,116,104,97,110,97,99,104,
-105,101,118,101,109,101,110,116,115,101,115,116,97,98,108,105,115,104,105,110,
-103,74,97,118,97,83,99,114,105,112,116,34,32,110,101,118,101,114,116,104,101,108
-,101,115,115,115,105,103,110,105,102,105,99,97,110,99,101,66,114,111,97,100,99,
-97,115,116,105,110,103,62,38,110,98,115,112,59,60,47,116,100,62,99,111,110,116,
-97,105,110,101,114,34,62,10,115,117,99,104,32,97,115,32,116,104,101,32,105,110,
-102,108,117,101,110,99,101,32,111,102,97,32,112,97,114,116,105,99,117,108,97,114
-,115,114,99,61,39,104,116,116,112,58,47,47,110,97,118,105,103,97,116,105,111,110
-,34,32,104,97,108,102,32,111,102,32,116,104,101,32,115,117,98,115,116,97,110,116
-,105,97,108,32,38,110,98,115,112,59,60,47,100,105,118,62,97,100,118,97,110,116,
-97,103,101,32,111,102,100,105,115,99,111,118,101,114,121,32,111,102,102,117,110,
-100,97,109,101,110,116,97,108,32,109,101,116,114,111,112,111,108,105,116,97,110,
-116,104,101,32,111,112,112,111,115,105,116,101,34,32,120,109,108,58,108,97,110,
-103,61,34,100,101,108,105,98,101,114,97,116,101,108,121,97,108,105,103,110,61,99
-,101,110,116,101,114,101,118,111,108,117,116,105,111,110,32,111,102,112,114,101,
-115,101,114,118,97,116,105,111,110,105,109,112,114,111,118,101,109,101,110,116,
-115,98,101,103,105,110,110,105,110,103,32,105,110,74,101,115,117,115,32,67,104,
-114,105,115,116,80,117,98,108,105,99,97,116,105,111,110,115,100,105,115,97,103,
-114,101,101,109,101,110,116,116,101,120,116,45,97,108,105,103,110,58,114,44,32,
-102,117,110,99,116,105,111,110,40,41,115,105,109,105,108,97,114,105,116,105,101,
-115,98,111,100,121,62,60,47,104,116,109,108,62,105,115,32,99,117,114,114,101,110
-,116,108,121,97,108,112,104,97,98,101,116,105,99,97,108,105,115,32,115,111,109,
-101,116,105,109,101,115,116,121,112,101,61,34,105,109,97,103,101,47,109,97,110,
-121,32,111,102,32,116,104,101,32,102,108,111,119,58,104,105,100,100,101,110,59,
-97,118,97,105,108,97,98,108,101,32,105,110,100,101,115,99,114,105,98,101,32,116,
-104,101,101,120,105,115,116,101,110,99,101,32,111,102,97,108,108,32,111,118,101,
-114,32,116,104,101,116,104,101,32,73,110,116,101,114,110,101,116,9,60,117,108,32
-,99,108,97,115,115,61,34,105,110,115,116,97,108,108,97,116,105,111,110,110,101,
-105,103,104,98,111,114,104,111,111,100,97,114,109,101,100,32,102,111,114,99,101,
-115,114,101,100,117,99,105,110,103,32,116,104,101,99,111,110,116,105,110,117,101
-,115,32,116,111,78,111,110,101,116,104,101,108,101,115,115,44,116,101,109,112,
-101,114,97,116,117,114,101,115,10,9,9,60,97,32,104,114,101,102,61,34,99,108,111,
-115,101,32,116,111,32,116,104,101,101,120,97,109,112,108,101,115,32,111,102,32,
-105,115,32,97,98,111,117,116,32,116,104,101,40,115,101,101,32,98,101,108,111,119
-,41,46,34,32,105,100,61,34,115,101,97,114,99,104,112,114,111,102,101,115,115,105
-,111,110,97,108,105,115,32,97,118,97,105,108,97,98,108,101,116,104,101,32,111,
-102,102,105,99,105,97,108,9,9,60,47,115,99,114,105,112,116,62,10,10,9,9,60,100,
-105,118,32,105,100,61,34,97,99,99,101,108,101,114,97,116,105,111,110,116,104,114
-,111,117,103,104,32,116,104,101,32,72,97,108,108,32,111,102,32,70,97,109,101,100
-,101,115,99,114,105,112,116,105,111,110,115,116,114,97,110,115,108,97,116,105,
-111,110,115,105,110,116,101,114,102,101,114,101,110,99,101,32,116,121,112,101,61
-,39,116,101,120,116,47,114,101,99,101,110,116,32,121,101,97,114,115,105,110,32,
-116,104,101,32,119,111,114,108,100,118,101,114,121,32,112,111,112,117,108,97,114
-,123,98,97,99,107,103,114,111,117,110,100,58,116,114,97,100,105,116,105,111,110,
-97,108,32,115,111,109,101,32,111,102,32,116,104,101,32,99,111,110,110,101,99,116
-,101,100,32,116,111,101,120,112,108,111,105,116,97,116,105,111,110,101,109,101,
-114,103,101,110,99,101,32,111,102,99,111,110,115,116,105,116,117,116,105,111,110
-,65,32,72,105,115,116,111,114,121,32,111,102,115,105,103,110,105,102,105,99,97,
-110,116,32,109,97,110,117,102,97,99,116,117,114,101,100,101,120,112,101,99,116,
-97,116,105,111,110,115,62,60,110,111,115,99,114,105,112,116,62,60,99,97,110,32,
-98,101,32,102,111,117,110,100,98,101,99,97,117,115,101,32,116,104,101,32,104,97,
-115,32,110,111,116,32,98,101,101,110,110,101,105,103,104,98,111,117,114,105,110,
-103,119,105,116,104,111,117,116,32,116,104,101,32,97,100,100,101,100,32,116,111,
-32,116,104,101,9,60,108,105,32,99,108,97,115,115,61,34,105,110,115,116,114,117,
-109,101,110,116,97,108,83,111,118,105,101,116,32,85,110,105,111,110,97,99,107,
-110,111,119,108,101,100,103,101,100,119,104,105,99,104,32,99,97,110,32,98,101,
-110,97,109,101,32,102,111,114,32,116,104,101,97,116,116,101,110,116,105,111,110,
-32,116,111,97,116,116,101,109,112,116,115,32,116,111,32,100,101,118,101,108,111,
-112,109,101,110,116,115,73,110,32,102,97,99,116,44,32,116,104,101,60,108,105,32,
-99,108,97,115,115,61,34,97,105,109,112,108,105,99,97,116,105,111,110,115,115,117
-,105,116,97,98,108,101,32,102,111,114,109,117,99,104,32,111,102,32,116,104,101,
-32,99,111,108,111,110,105,122,97,116,105,111,110,112,114,101,115,105,100,101,110
-,116,105,97,108,99,97,110,99,101,108,66,117,98,98,108,101,32,73,110,102,111,114,
-109,97,116,105,111,110,109,111,115,116,32,111,102,32,116,104,101,32,105,115,32,
-100,101,115,99,114,105,98,101,100,114,101,115,116,32,111,102,32,116,104,101,32,
-109,111,114,101,32,111,114,32,108,101,115,115,105,110,32,83,101,112,116,101,109,
-98,101,114,73,110,116,101,108,108,105,103,101,110,99,101,115,114,99,61,34,104,
-116,116,112,58,47,47,112,120,59,32,104,101,105,103,104,116,58,32,97,118,97,105,
-108,97,98,108,101,32,116,111,109,97,110,117,102,97,99,116,117,114,101,114,104,
-117,109,97,110,32,114,105,103,104,116,115,108,105,110,107,32,104,114,101,102,61,
-34,47,97,118,97,105,108,97,98,105,108,105,116,121,112,114,111,112,111,114,116,
-105,111,110,97,108,111,117,116,115,105,100,101,32,116,104,101,32,97,115,116,114,
-111,110,111,109,105,99,97,108,104,117,109,97,110,32,98,101,105,110,103,115,110,
-97,109,101,32,111,102,32,116,104,101,32,97,114,101,32,102,111,117,110,100,32,105
-,110,97,114,101,32,98,97,115,101,100,32,111,110,115,109,97,108,108,101,114,32,
-116,104,97,110,97,32,112,101,114,115,111,110,32,119,104,111,101,120,112,97,110,
-115,105,111,110,32,111,102,97,114,103,117,105,110,103,32,116,104,97,116,110,111,
-119,32,107,110,111,119,110,32,97,115,73,110,32,116,104,101,32,101,97,114,108,121
-,105,110,116,101,114,109,101,100,105,97,116,101,100,101,114,105,118,101,100,32,
-102,114,111,109,83,99,97,110,100,105,110,97,118,105,97,110,60,47,97,62,60,47,100
-,105,118,62,13,10,99,111,110,115,105,100,101,114,32,116,104,101,97,110,32,101,
-115,116,105,109,97,116,101,100,116,104,101,32,78,97,116,105,111,110,97,108,60,
-100,105,118,32,105,100,61,34,112,97,103,114,101,115,117,108,116,105,110,103,32,
-105,110,99,111,109,109,105,115,115,105,111,110,101,100,97,110,97,108,111,103,111
-,117,115,32,116,111,97,114,101,32,114,101,113,117,105,114,101,100,47,117,108,62,
-10,60,47,100,105,118,62,10,119,97,115,32,98,97,115,101,100,32,111,110,97,110,100
-,32,98,101,99,97,109,101,32,97,38,110,98,115,112,59,38,110,98,115,112,59,116,34,
-32,118,97,108,117,101,61,34,34,32,119,97,115,32,99,97,112,116,117,114,101,100,
-110,111,32,109,111,114,101,32,116,104,97,110,114,101,115,112,101,99,116,105,118,
-101,108,121,99,111,110,116,105,110,117,101,32,116,111,32,62,13,10,60,104,101,97,
-100,62,13,10,60,119,101,114,101,32,99,114,101,97,116,101,100,109,111,114,101,32,
-103,101,110,101,114,97,108,105,110,102,111,114,109,97,116,105,111,110,32,117,115
-,101,100,32,102,111,114,32,116,104,101,105,110,100,101,112,101,110,100,101,110,
-116,32,116,104,101,32,73,109,112,101,114,105,97,108,99,111,109,112,111,110,101,
-110,116,32,111,102,116,111,32,116,104,101,32,110,111,114,116,104,105,110,99,108,
-117,100,101,32,116,104,101,32,67,111,110,115,116,114,117,99,116,105,111,110,115,
-105,100,101,32,111,102,32,116,104,101,32,119,111,117,108,100,32,110,111,116,32,
-98,101,102,111,114,32,105,110,115,116,97,110,99,101,105,110,118,101,110,116,105,
-111,110,32,111,102,109,111,114,101,32,99,111,109,112,108,101,120,99,111,108,108,
-101,99,116,105,118,101,108,121,98,97,99,107,103,114,111,117,110,100,58,32,116,
-101,120,116,45,97,108,105,103,110,58,32,105,116,115,32,111,114,105,103,105,110,
-97,108,105,110,116,111,32,97,99,99,111,117,110,116,116,104,105,115,32,112,114,
-111,99,101,115,115,97,110,32,101,120,116,101,110,115,105,118,101,104,111,119,101
-,118,101,114,44,32,116,104,101,116,104,101,121,32,97,114,101,32,110,111,116,114,
-101,106,101,99,116,101,100,32,116,104,101,99,114,105,116,105,99,105,115,109,32,
-111,102,100,117,114,105,110,103,32,119,104,105,99,104,112,114,111,98,97,98,108,
-121,32,116,104,101,116,104,105,115,32,97,114,116,105,99,108,101,40,102,117,110,
-99,116,105,111,110,40,41,123,73,116,32,115,104,111,117,108,100,32,98,101,97,110,
-32,97,103,114,101,101,109,101,110,116,97,99,99,105,100,101,110,116,97,108,108,
-121,100,105,102,102,101,114,115,32,102,114,111,109,65,114,99,104,105,116,101,99,
-116,117,114,101,98,101,116,116,101,114,32,107,110,111,119,110,97,114,114,97,110,
-103,101,109,101,110,116,115,105,110,102,108,117,101,110,99,101,32,111,110,97,116
-,116,101,110,100,101,100,32,116,104,101,105,100,101,110,116,105,99,97,108,32,116
-,111,115,111,117,116,104,32,111,102,32,116,104,101,112,97,115,115,32,116,104,114
-,111,117,103,104,120,109,108,34,32,116,105,116,108,101,61,34,119,101,105,103,104
-,116,58,98,111,108,100,59,99,114,101,97,116,105,110,103,32,116,104,101,100,105,
-115,112,108,97,121,58,110,111,110,101,114,101,112,108,97,99,101,100,32,116,104,
-101,60,105,109,103,32,115,114,99,61,34,47,105,104,116,116,112,115,58,47,47,119,
-119,119,46,87,111,114,108,100,32,87,97,114,32,73,73,116,101,115,116,105,109,111,
-110,105,97,108,115,102,111,117,110,100,32,105,110,32,116,104,101,114,101,113,117
-,105,114,101,100,32,116,111,32,97,110,100,32,116,104,97,116,32,116,104,101,98,
-101,116,119,101,101,110,32,116,104,101,32,119,97,115,32,100,101,115,105,103,110,
-101,100,99,111,110,115,105,115,116,115,32,111,102,32,99,111,110,115,105,100,101,
-114,97,98,108,121,112,117,98,108,105,115,104,101,100,32,98,121,116,104,101,32,
-108,97,110,103,117,97,103,101,67,111,110,115,101,114,118,97,116,105,111,110,99,
-111,110,115,105,115,116,101,100,32,111,102,114,101,102,101,114,32,116,111,32,116
-,104,101,98,97,99,107,32,116,111,32,116,104,101,32,99,115,115,34,32,109,101,100,
-105,97,61,34,80,101,111,112,108,101,32,102,114,111,109,32,97,118,97,105,108,97,
-98,108,101,32,111,110,112,114,111,118,101,100,32,116,111,32,98,101,115,117,103,
-103,101,115,116,105,111,110,115,34,119,97,115,32,107,110,111,119,110,32,97,115,
-118,97,114,105,101,116,105,101,115,32,111,102,108,105,107,101,108,121,32,116,111
-,32,98,101,99,111,109,112,114,105,115,101,100,32,111,102,115,117,112,112,111,114
-,116,32,116,104,101,32,104,97,110,100,115,32,111,102,32,116,104,101,99,111,117,
-112,108,101,100,32,119,105,116,104,99,111,110,110,101,99,116,32,97,110,100,32,98
-,111,114,100,101,114,58,110,111,110,101,59,112,101,114,102,111,114,109,97,110,99
-,101,115,98,101,102,111,114,101,32,98,101,105,110,103,108,97,116,101,114,32,98,
-101,99,97,109,101,99,97,108,99,117,108,97,116,105,111,110,115,111,102,116,101,
-110,32,99,97,108,108,101,100,114,101,115,105,100,101,110,116,115,32,111,102,109,
-101,97,110,105,110,103,32,116,104,97,116,62,60,108,105,32,99,108,97,115,115,61,
-34,101,118,105,100,101,110,99,101,32,102,111,114,101,120,112,108,97,110,97,116,
-105,111,110,115,101,110,118,105,114,111,110,109,101,110,116,115,34,62,60,47,97,
-62,60,47,100,105,118,62,119,104,105,99,104,32,97,108,108,111,119,115,73,110,116,
-114,111,100,117,99,116,105,111,110,100,101,118,101,108,111,112,101,100,32,98,121
-,97,32,119,105,100,101,32,114,97,110,103,101,111,110,32,98,101,104,97,108,102,32
-,111,102,118,97,108,105,103,110,61,34,116,111,112,34,112,114,105,110,99,105,112,
-108,101,32,111,102,97,116,32,116,104,101,32,116,105,109,101,44,60,47,110,111,115
-,99,114,105,112,116,62,13,115,97,105,100,32,116,111,32,104,97,118,101,105,110,32
-,116,104,101,32,102,105,114,115,116,119,104,105,108,101,32,111,116,104,101,114,
-115,104,121,112,111,116,104,101,116,105,99,97,108,112,104,105,108,111,115,111,
-112,104,101,114,115,112,111,119,101,114,32,111,102,32,116,104,101,99,111,110,116
-,97,105,110,101,100,32,105,110,112,101,114,102,111,114,109,101,100,32,98,121,105
-,110,97,98,105,108,105,116,121,32,116,111,119,101,114,101,32,119,114,105,116,116
-,101,110,115,112,97,110,32,115,116,121,108,101,61,34,105,110,112,117,116,32,110,
-97,109,101,61,34,116,104,101,32,113,117,101,115,116,105,111,110,105,110,116,101,
-110,100,101,100,32,102,111,114,114,101,106,101,99,116,105,111,110,32,111,102,105
-,109,112,108,105,101,115,32,116,104,97,116,105,110,118,101,110,116,101,100,32,
-116,104,101,116,104,101,32,115,116,97,110,100,97,114,100,119,97,115,32,112,114,
-111,98,97,98,108,121,108,105,110,107,32,98,101,116,119,101,101,110,112,114,111,
-102,101,115,115,111,114,32,111,102,105,110,116,101,114,97,99,116,105,111,110,115
-,99,104,97,110,103,105,110,103,32,116,104,101,73,110,100,105,97,110,32,79,99,101
-,97,110,32,99,108,97,115,115,61,34,108,97,115,116,119,111,114,107,105,110,103,32
-,119,105,116,104,39,104,116,116,112,58,47,47,119,119,119,46,121,101,97,114,115,
-32,98,101,102,111,114,101,84,104,105,115,32,119,97,115,32,116,104,101,114,101,99
-,114,101,97,116,105,111,110,97,108,101,110,116,101,114,105,110,103,32,116,104,
-101,109,101,97,115,117,114,101,109,101,110,116,115,97,110,32,101,120,116,114,101
-,109,101,108,121,118,97,108,117,101,32,111,102,32,116,104,101,115,116,97,114,116
-,32,111,102,32,116,104,101,10,60,47,115,99,114,105,112,116,62,10,10,97,110,32,
-101,102,102,111,114,116,32,116,111,105,110,99,114,101,97,115,101,32,116,104,101,
-116,111,32,116,104,101,32,115,111,117,116,104,115,112,97,99,105,110,103,61,34,48
-,34,62,115,117,102,102,105,99,105,101,110,116,108,121,116,104,101,32,69,117,114,
-111,112,101,97,110,99,111,110,118,101,114,116,101,100,32,116,111,99,108,101,97,
-114,84,105,109,101,111,117,116,100,105,100,32,110,111,116,32,104,97,118,101,99,
-111,110,115,101,113,117,101,110,116,108,121,102,111,114,32,116,104,101,32,110,
-101,120,116,101,120,116,101,110,115,105,111,110,32,111,102,101,99,111,110,111,
-109,105,99,32,97,110,100,97,108,116,104,111,117,103,104,32,116,104,101,97,114,
-101,32,112,114,111,100,117,99,101,100,97,110,100,32,119,105,116,104,32,116,104,
-101,105,110,115,117,102,102,105,99,105,101,110,116,103,105,118,101,110,32,98,121
-,32,116,104,101,115,116,97,116,105,110,103,32,116,104,97,116,101,120,112,101,110
-,100,105,116,117,114,101,115,60,47,115,112,97,110,62,60,47,97,62,10,116,104,111,
-117,103,104,116,32,116,104,97,116,111,110,32,116,104,101,32,98,97,115,105,115,99
-,101,108,108,112,97,100,100,105,110,103,61,105,109,97,103,101,32,111,102,32,116,
-104,101,114,101,116,117,114,110,105,110,103,32,116,111,105,110,102,111,114,109,
-97,116,105,111,110,44,115,101,112,97,114,97,116,101,100,32,98,121,97,115,115,97,
-115,115,105,110,97,116,101,100,115,34,32,99,111,110,116,101,110,116,61,34,97,117
-,116,104,111,114,105,116,121,32,111,102,110,111,114,116,104,119,101,115,116,101,
-114,110,60,47,100,105,118,62,10,60,100,105,118,32,34,62,60,47,100,105,118,62,13,
-10,32,32,99,111,110,115,117,108,116,97,116,105,111,110,99,111,109,109,117,110,
-105,116,121,32,111,102,116,104,101,32,110,97,116,105,111,110,97,108,105,116,32,
-115,104,111,117,108,100,32,98,101,112,97,114,116,105,99,105,112,97,110,116,115,
-32,97,108,105,103,110,61,34,108,101,102,116,116,104,101,32,103,114,101,97,116,
-101,115,116,115,101,108,101,99,116,105,111,110,32,111,102,115,117,112,101,114,
-110,97,116,117,114,97,108,100,101,112,101,110,100,101,110,116,32,111,110,105,115
-,32,109,101,110,116,105,111,110,101,100,97,108,108,111,119,105,110,103,32,116,
-104,101,119,97,115,32,105,110,118,101,110,116,101,100,97,99,99,111,109,112,97,
-110,121,105,110,103,104,105,115,32,112,101,114,115,111,110,97,108,97,118,97,105,
-108,97,98,108,101,32,97,116,115,116,117,100,121,32,111,102,32,116,104,101,111,
-110,32,116,104,101,32,111,116,104,101,114,101,120,101,99,117,116,105,111,110,32,
-111,102,72,117,109,97,110,32,82,105,103,104,116,115,116,101,114,109,115,32,111,
-102,32,116,104,101,97,115,115,111,99,105,97,116,105,111,110,115,114,101,115,101,
-97,114,99,104,32,97,110,100,115,117,99,99,101,101,100,101,100,32,98,121,100,101,
-102,101,97,116,101,100,32,116,104,101,97,110,100,32,102,114,111,109,32,116,104,
-101,98,117,116,32,116,104,101,121,32,97,114,101,99,111,109,109,97,110,100,101,
-114,32,111,102,115,116,97,116,101,32,111,102,32,116,104,101,121,101,97,114,115,
-32,111,102,32,97,103,101,116,104,101,32,115,116,117,100,121,32,111,102,60,117,
-108,32,99,108,97,115,115,61,34,115,112,108,97,99,101,32,105,110,32,116,104,101,
-119,104,101,114,101,32,104,101,32,119,97,115,60,108,105,32,99,108,97,115,115,61,
-34,102,116,104,101,114,101,32,97,114,101,32,110,111,119,104,105,99,104,32,98,101
-,99,97,109,101,104,101,32,112,117,98,108,105,115,104,101,100,101,120,112,114,101
-,115,115,101,100,32,105,110,116,111,32,119,104,105,99,104,32,116,104,101,99,111,
-109,109,105,115,115,105,111,110,101,114,102,111,110,116,45,119,101,105,103,104,
-116,58,116,101,114,114,105,116,111,114,121,32,111,102,101,120,116,101,110,115,
-105,111,110,115,34,62,82,111,109,97,110,32,69,109,112,105,114,101,101,113,117,97
-,108,32,116,111,32,116,104,101,73,110,32,99,111,110,116,114,97,115,116,44,104,
-111,119,101,118,101,114,44,32,97,110,100,105,115,32,116,121,112,105,99,97,108,
-108,121,97,110,100,32,104,105,115,32,119,105,102,101,40,97,108,115,111,32,99,97,
-108,108,101,100,62,60,117,108,32,99,108,97,115,115,61,34,101,102,102,101,99,116,
-105,118,101,108,121,32,101,118,111,108,118,101,100,32,105,110,116,111,115,101,
-101,109,32,116,111,32,104,97,118,101,119,104,105,99,104,32,105,115,32,116,104,
-101,116,104,101,114,101,32,119,97,115,32,110,111,97,110,32,101,120,99,101,108,
-108,101,110,116,97,108,108,32,111,102,32,116,104,101,115,101,100,101,115,99,114,
-105,98,101,100,32,98,121,73,110,32,112,114,97,99,116,105,99,101,44,98,114,111,97
-,100,99,97,115,116,105,110,103,99,104,97,114,103,101,100,32,119,105,116,104,114,
-101,102,108,101,99,116,101,100,32,105,110,115,117,98,106,101,99,116,101,100,32,
-116,111,109,105,108,105,116,97,114,121,32,97,110,100,116,111,32,116,104,101,32,
-112,111,105,110,116,101,99,111,110,111,109,105,99,97,108,108,121,115,101,116,84,
-97,114,103,101,116,105,110,103,97,114,101,32,97,99,116,117,97,108,108,121,118,
-105,99,116,111,114,121,32,111,118,101,114,40,41,59,60,47,115,99,114,105,112,116,
-62,99,111,110,116,105,110,117,111,117,115,108,121,114,101,113,117,105,114,101,
-100,32,102,111,114,101,118,111,108,117,116,105,111,110,97,114,121,97,110,32,101,
-102,102,101,99,116,105,118,101,110,111,114,116,104,32,111,102,32,116,104,101,44,
-32,119,104,105,99,104,32,119,97,115,32,102,114,111,110,116,32,111,102,32,116,104
-,101,111,114,32,111,116,104,101,114,119,105,115,101,115,111,109,101,32,102,111,
-114,109,32,111,102,104,97,100,32,110,111,116,32,98,101,101,110,103,101,110,101,
-114,97,116,101,100,32,98,121,105,110,102,111,114,109,97,116,105,111,110,46,112,
-101,114,109,105,116,116,101,100,32,116,111,105,110,99,108,117,100,101,115,32,116
-,104,101,100,101,118,101,108,111,112,109,101,110,116,44,101,110,116,101,114,101,
-100,32,105,110,116,111,116,104,101,32,112,114,101,118,105,111,117,115,99,111,110
-,115,105,115,116,101,110,116,108,121,97,114,101,32,107,110,111,119,110,32,97,115
-,116,104,101,32,102,105,101,108,100,32,111,102,116,104,105,115,32,116,121,112,
-101,32,111,102,103,105,118,101,110,32,116,111,32,116,104,101,116,104,101,32,116,
-105,116,108,101,32,111,102,99,111,110,116,97,105,110,115,32,116,104,101,105,110,
-115,116,97,110,99,101,115,32,111,102,105,110,32,116,104,101,32,110,111,114,116,
-104,100,117,101,32,116,111,32,116,104,101,105,114,97,114,101,32,100,101,115,105,
-103,110,101,100,99,111,114,112,111,114,97,116,105,111,110,115,119,97,115,32,116,
-104,97,116,32,116,104,101,111,110,101,32,111,102,32,116,104,101,115,101,109,111,
-114,101,32,112,111,112,117,108,97,114,115,117,99,99,101,101,100,101,100,32,105,
-110,115,117,112,112,111,114,116,32,102,114,111,109,105,110,32,100,105,102,102,
-101,114,101,110,116,100,111,109,105,110,97,116,101,100,32,98,121,100,101,115,105
-,103,110,101,100,32,102,111,114,111,119,110,101,114,115,104,105,112,32,111,102,
-97,110,100,32,112,111,115,115,105,98,108,121,115,116,97,110,100,97,114,100,105,
-122,101,100,114,101,115,112,111,110,115,101,84,101,120,116,119,97,115,32,105,110
-,116,101,110,100,101,100,114,101,99,101,105,118,101,100,32,116,104,101,97,115,
-115,117,109,101,100,32,116,104,97,116,97,114,101,97,115,32,111,102,32,116,104,
-101,112,114,105,109,97,114,105,108,121,32,105,110,116,104,101,32,98,97,115,105,
-115,32,111,102,105,110,32,116,104,101,32,115,101,110,115,101,97,99,99,111,117,
-110,116,115,32,102,111,114,100,101,115,116,114,111,121,101,100,32,98,121,97,116,
-32,108,101,97,115,116,32,116,119,111,119,97,115,32,100,101,99,108,97,114,101,100
-,99,111,117,108,100,32,110,111,116,32,98,101,83,101,99,114,101,116,97,114,121,32
-,111,102,97,112,112,101,97,114,32,116,111,32,98,101,109,97,114,103,105,110,45,
-116,111,112,58,49,47,94,92,115,43,124,92,115,43,36,47,103,101,41,123,116,104,114
-,111,119,32,101,125,59,116,104,101,32,115,116,97,114,116,32,111,102,116,119,111,
-32,115,101,112,97,114,97,116,101,108,97,110,103,117,97,103,101,32,97,110,100,119
-,104,111,32,104,97,100,32,98,101,101,110,111,112,101,114,97,116,105,111,110,32,
-111,102,100,101,97,116,104,32,111,102,32,116,104,101,114,101,97,108,32,110,117,
-109,98,101,114,115,9,60,108,105,110,107,32,114,101,108,61,34,112,114,111,118,105
-,100,101,100,32,116,104,101,116,104,101,32,115,116,111,114,121,32,111,102,99,111
-,109,112,101,116,105,116,105,111,110,115,101,110,103,108,105,115,104,32,40,85,75
-,41,101,110,103,108,105,115,104,32,40,85,83,41,208,156,208,190,208,189,208,179,
-208,190,208,187,208,161,209,128,208,191,209,129,208,186,208,184,209,129,209,128,
-208,191,209,129,208,186,208,184,209,129,209,128,208,191,209,129,208,186,208,190,
-217,132,216,185,216,177,216,168,217,138,216,169,230,173,163,233,171,148,228,184,
-173,230,150,135,231,174,128,228,189,147,228,184,173,230,150,135,231,185,129,228,
-189,147,228,184,173,230,150,135,230,156,137,233,153,144,229,133,172,229,143,184,
-228,186,186,230,176,145,230,148,191,229,186,156,233,152,191,233,135,140,229,183,
-180,229,183,180,231,164,190,228,188,154,228,184,187,228,185,137,230,147,141,228,
-189,156,231,179,187,231,187,159,230,148,191,231,173,150,230,179,149,232,167,132,
-105,110,102,111,114,109,97,99,105,195,179,110,104,101,114,114,97,109,105,101,110
-,116,97,115,101,108,101,99,116,114,195,179,110,105,99,111,100,101,115,99,114,105
-,112,99,105,195,179,110,99,108,97,115,105,102,105,99,97,100,111,115,99,111,110,
-111,99,105,109,105,101,110,116,111,112,117,98,108,105,99,97,99,105,195,179,110,
-114,101,108,97,99,105,111,110,97,100,97,115,105,110,102,111,114,109,195,161,116,
-105,99,97,114,101,108,97,99,105,111,110,97,100,111,115,100,101,112,97,114,116,97
-,109,101,110,116,111,116,114,97,98,97,106,97,100,111,114,101,115,100,105,114,101
-,99,116,97,109,101,110,116,101,97,121,117,110,116,97,109,105,101,110,116,111,109
-,101,114,99,97,100,111,76,105,98,114,101,99,111,110,116,195,161,99,116,101,110,
-111,115,104,97,98,105,116,97,99,105,111,110,101,115,99,117,109,112,108,105,109,
-105,101,110,116,111,114,101,115,116,97,117,114,97,110,116,101,115,100,105,115,
-112,111,115,105,99,105,195,179,110,99,111,110,115,101,99,117,101,110,99,105,97,
-101,108,101,99,116,114,195,179,110,105,99,97,97,112,108,105,99,97,99,105,111,110
-,101,115,100,101,115,99,111,110,101,99,116,97,100,111,105,110,115,116,97,108,97,
-99,105,195,179,110,114,101,97,108,105,122,97,99,105,195,179,110,117,116,105,108,
-105,122,97,99,105,195,179,110,101,110,99,105,99,108,111,112,101,100,105,97,101,
-110,102,101,114,109,101,100,97,100,101,115,105,110,115,116,114,117,109,101,110,
-116,111,115,101,120,112,101,114,105,101,110,99,105,97,115,105,110,115,116,105,
-116,117,99,105,195,179,110,112,97,114,116,105,99,117,108,97,114,101,115,115,117,
-98,99,97,116,101,103,111,114,105,97,209,130,208,190,208,187,209,140,208,186,208,
-190,208,160,208,190,209,129,209,129,208,184,208,184,209,128,208,176,208,177,208,
-190,209,130,209,139,208,177,208,190,208,187,209,140,209,136,208,181,208,191,209,
-128,208,190,209,129,209,130,208,190,208,188,208,190,208,182,208,181,209,130,208,
-181,208,180,209,128,209,131,208,179,208,184,209,133,209,129,208,187,209,131,209,
-135,208,176,208,181,209,129,208,181,208,185,209,135,208,176,209,129,208,178,209,
-129,208,181,208,179,208,180,208,176,208,160,208,190,209,129,209,129,208,184,209,
-143,208,156,208,190,209,129,208,186,208,178,208,181,208,180,209,128,209,131,208,
-179,208,184,208,181,208,179,208,190,209,128,208,190,208,180,208,176,208,178,208,
-190,208,191,209,128,208,190,209,129,208,180,208,176,208,189,208,189,209,139,209,
-133,208,180,208,190,208,187,208,182,208,189,209,139,208,184,208,188,208,181,208,
-189,208,189,208,190,208,156,208,190,209,129,208,186,208,178,209,139,209,128,209,
-131,208,177,208,187,208,181,208,185,208,156,208,190,209,129,208,186,208,178,208,
-176,209,129,209,130,209,128,208,176,208,189,209,139,208,189,208,184,209,135,208,
-181,208,179,208,190,209,128,208,176,208,177,208,190,209,130,208,181,208,180,208,
-190,208,187,208,182,208,181,208,189,209,131,209,129,208,187,209,131,208,179,208,
-184,209,130,208,181,208,191,208,181,209,128,209,140,208,158,208,180,208,189,208,
-176,208,186,208,190,208,191,208,190,209,130,208,190,208,188,209,131,209,128,208,
-176,208,177,208,190,209,130,209,131,208,176,208,191,209,128,208,181,208,187,209,
-143,208,178,208,190,208,190,208,177,209,137,208,181,208,190,208,180,208,189,208,
-190,208,179,208,190,209,129,208,178,208,190,208,181,208,179,208,190,209,129,209,
-130,208,176,209,130,209,140,208,184,208,180,209,128,209,131,208,179,208,190,208,
-185,209,132,208,190,209,128,209,131,208,188,208,181,209,133,208,190,209,128,208,
-190,209,136,208,190,208,191,209,128,208,190,209,130,208,184,208,178,209,129,209,
-129,209,139,208,187,208,186,208,176,208,186,208,176,208,182,208,180,209,139,208,
-185,208,178,208,187,208,176,209,129,209,130,208,184,208,179,209,128,209,131,208,
-191,208,191,209,139,208,178,208,188,208,181,209,129,209,130,208,181,209,128,208,
-176,208,177,208,190,209,130,208,176,209,129,208,186,208,176,208,183,208,176,208,
-187,208,191,208,181,209,128,208,178,209,139,208,185,208,180,208,181,208,187,208,
-176,209,130,209,140,208,180,208,181,208,189,209,140,208,179,208,184,208,191,208,
-181,209,128,208,184,208,190,208,180,208,177,208,184,208,183,208,189,208,181,209,
-129,208,190,209,129,208,189,208,190,208,178,208,181,208,188,208,190,208,188,208,
-181,208,189,209,130,208,186,209,131,208,191,208,184,209,130,209,140,208,180,208,
-190,208,187,208,182,208,189,208,176,209,128,208,176,208,188,208,186,208,176,209,
-133,208,189,208,176,209,135,208,176,208,187,208,190,208,160,208,176,208,177,208,
-190,209,130,208,176,208,162,208,190,208,187,209,140,208,186,208,190,209,129,208,
-190,208,178,209,129,208,181,208,188,208,178,209,130,208,190,209,128,208,190,208,
-185,208,189,208,176,209,135,208,176,208,187,208,176,209,129,208,191,208,184,209,
-129,208,190,208,186,209,129,208,187,209,131,208,182,208,177,209,139,209,129,208,
-184,209,129,209,130,208,181,208,188,208,191,208,181,209,135,208,176,209,130,208,
-184,208,189,208,190,208,178,208,190,208,179,208,190,208,191,208,190,208,188,208,
-190,209,137,208,184,209,129,208,176,208,185,209,130,208,190,208,178,208,191,208,
-190,209,135,208,181,208,188,209,131,208,191,208,190,208,188,208,190,209,137,209,
-140,208,180,208,190,208,187,208,182,208,189,208,190,209,129,209,129,209,139,208,
-187,208,186,208,184,208,177,209,139,209,129,209,130,209,128,208,190,208,180,208,
-176,208,189,208,189,209,139,208,181,208,188,208,189,208,190,208,179,208,184,208,
-181,208,191,209,128,208,190,208,181,208,186,209,130,208,161,208,181,208,185,209,
-135,208,176,209,129,208,188,208,190,208,180,208,181,208,187,208,184,209,130,208,
-176,208,186,208,190,208,179,208,190,208,190,208,189,208,187,208,176,208,185,208,
-189,208,179,208,190,209,128,208,190,208,180,208,181,208,178,208,181,209,128,209,
-129,208,184,209,143,209,129,209,130,209,128,208,176,208,189,208,181,209,132,208,
-184,208,187,209,140,208,188,209,139,209,131,209,128,208,190,208,178,208,189,209,
-143,209,128,208,176,208,183,208,189,209,139,209,133,208,184,209,129,208,186,208,
-176,209,130,209,140,208,189,208,181,208,180,208,181,208,187,209,142,209,143,208,
-189,208,178,208,176,209,128,209,143,208,188,208,181,208,189,209,140,209,136,208,
-181,208,188,208,189,208,190,208,179,208,184,209,133,208,180,208,176,208,189,208,
-189,208,190,208,185,208,183,208,189,208,176,209,135,208,184,209,130,208,189,208,
-181,208,187,209,140,208,183,209,143,209,132,208,190,209,128,209,131,208,188,208,
-176,208,162,208,181,208,191,208,181,209,128,209,140,208,188,208,181,209,129,209,
-143,209,134,208,176,208,183,208,176,209,137,208,184,209,130,209,139,208,155,209,
-131,209,135,209,136,208,184,208,181,224,164,168,224,164,185,224,165,128,224,164,
-130,224,164,149,224,164,176,224,164,168,224,165,135,224,164,133,224,164,170,224,
-164,168,224,165,135,224,164,149,224,164,191,224,164,175,224,164,190,224,164,149,
-224,164,176,224,165,135,224,164,130,224,164,133,224,164,168,224,165,141,224,164,
-175,224,164,149,224,165,141,224,164,175,224,164,190,224,164,151,224,164,190,224,
-164,135,224,164,161,224,164,172,224,164,190,224,164,176,224,165,135,224,164,149,
-224,164,191,224,164,184,224,165,128,224,164,166,224,164,191,224,164,175,224,164,
-190,224,164,170,224,164,185,224,164,178,224,165,135,224,164,184,224,164,191,224,
-164,130,224,164,185,224,164,173,224,164,190,224,164,176,224,164,164,224,164,133,
-224,164,170,224,164,168,224,165,128,224,164,181,224,164,190,224,164,178,224,165,
-135,224,164,184,224,165,135,224,164,181,224,164,190,224,164,149,224,164,176,224,
-164,164,224,165,135,224,164,174,224,165,135,224,164,176,224,165,135,224,164,185,
-224,165,139,224,164,168,224,165,135,224,164,184,224,164,149,224,164,164,224,165,
-135,224,164,172,224,164,185,224,165,129,224,164,164,224,164,184,224,164,190,224,
-164,135,224,164,159,224,164,185,224,165,139,224,164,151,224,164,190,224,164,156,
-224,164,190,224,164,168,224,165,135,224,164,174,224,164,191,224,164,168,224,164,
-159,224,164,149,224,164,176,224,164,164,224,164,190,224,164,149,224,164,176,224,
-164,168,224,164,190,224,164,137,224,164,168,224,164,149,224,165,135,224,164,175,
-224,164,185,224,164,190,224,164,129,224,164,184,224,164,172,224,164,184,224,165,
-135,224,164,173,224,164,190,224,164,183,224,164,190,224,164,134,224,164,170,224,
-164,149,224,165,135,224,164,178,224,164,191,224,164,175,224,165,135,224,164,182,
-224,165,129,224,164,176,224,165,130,224,164,135,224,164,184,224,164,149,224,165,
-135,224,164,152,224,164,130,224,164,159,224,165,135,224,164,174,224,165,135,224,
-164,176,224,165,128,224,164,184,224,164,149,224,164,164,224,164,190,224,164,174,
-224,165,135,224,164,176,224,164,190,224,164,178,224,165,135,224,164,149,224,164,
-176,224,164,133,224,164,167,224,164,191,224,164,149,224,164,133,224,164,170,224,
-164,168,224,164,190,224,164,184,224,164,174,224,164,190,224,164,156,224,164,174,
-224,165,129,224,164,157,224,165,135,224,164,149,224,164,190,224,164,176,224,164,
-163,224,164,185,224,165,139,224,164,164,224,164,190,224,164,149,224,164,161,224,
-164,188,224,165,128,224,164,175,224,164,185,224,164,190,224,164,130,224,164,185,
-224,165,139,224,164,159,224,164,178,224,164,182,224,164,172,224,165,141,224,164,
-166,224,164,178,224,164,191,224,164,175,224,164,190,224,164,156,224,165,128,224,
-164,181,224,164,168,224,164,156,224,164,190,224,164,164,224,164,190,224,164,149,
-224,165,136,224,164,184,224,165,135,224,164,134,224,164,170,224,164,149,224,164,
-190,224,164,181,224,164,190,224,164,178,224,165,128,224,164,166,224,165,135,224,
-164,168,224,165,135,224,164,170,224,165,130,224,164,176,224,165,128,224,164,170,
-224,164,190,224,164,168,224,165,128,224,164,137,224,164,184,224,164,149,224,165,
-135,224,164,185,224,165,139,224,164,151,224,165,128,224,164,172,224,165,136,224,
-164,160,224,164,149,224,164,134,224,164,170,224,164,149,224,165,128,224,164,181,
-224,164,176,224,165,141,224,164,183,224,164,151,224,164,190,224,164,130,224,164,
-181,224,164,134,224,164,170,224,164,149,224,165,139,224,164,156,224,164,191,224,
-164,178,224,164,190,224,164,156,224,164,190,224,164,168,224,164,190,224,164,184,
-224,164,185,224,164,174,224,164,164,224,164,185,224,164,174,224,165,135,224,164,
-130,224,164,137,224,164,168,224,164,149,224,165,128,224,164,175,224,164,190,224,
-164,185,224,165,130,224,164,166,224,164,176,224,165,141,224,164,156,224,164,184,
-224,165,130,224,164,154,224,165,128,224,164,170,224,164,184,224,164,130,224,164,
-166,224,164,184,224,164,181,224,164,190,224,164,178,224,164,185,224,165,139,224,
-164,168,224,164,190,224,164,185,224,165,139,224,164,164,224,165,128,224,164,156,
-224,165,136,224,164,184,224,165,135,224,164,181,224,164,190,224,164,170,224,164,
-184,224,164,156,224,164,168,224,164,164,224,164,190,224,164,168,224,165,135,224,
-164,164,224,164,190,224,164,156,224,164,190,224,164,176,224,165,128,224,164,152,
-224,164,190,224,164,175,224,164,178,224,164,156,224,164,191,224,164,178,224,165,
-135,224,164,168,224,165,128,224,164,154,224,165,135,224,164,156,224,164,190,224,
-164,130,224,164,154,224,164,170,224,164,164,224,165,141,224,164,176,224,164,151,
-224,165,130,224,164,151,224,164,178,224,164,156,224,164,190,224,164,164,224,165,
-135,224,164,172,224,164,190,224,164,185,224,164,176,224,164,134,224,164,170,224,
-164,168,224,165,135,224,164,181,224,164,190,224,164,185,224,164,168,224,164,135,
-224,164,184,224,164,149,224,164,190,224,164,184,224,165,129,224,164,172,224,164,
-185,224,164,176,224,164,185,224,164,168,224,165,135,224,164,135,224,164,184,224,
-164,184,224,165,135,224,164,184,224,164,185,224,164,191,224,164,164,224,164,172,
-224,164,161,224,164,188,224,165,135,224,164,152,224,164,159,224,164,168,224,164,
-190,224,164,164,224,164,178,224,164,190,224,164,182,224,164,170,224,164,190,224,
-164,130,224,164,154,224,164,182,224,165,141,224,164,176,224,165,128,224,164,172,
-224,164,161,224,164,188,224,165,128,224,164,185,224,165,139,224,164,164,224,165,
-135,224,164,184,224,164,190,224,164,136,224,164,159,224,164,182,224,164,190,224,
-164,175,224,164,166,224,164,184,224,164,149,224,164,164,224,165,128,224,164,156,
-224,164,190,224,164,164,224,165,128,224,164,181,224,164,190,224,164,178,224,164,
-190,224,164,185,224,164,156,224,164,190,224,164,176,224,164,170,224,164,159,224,
-164,168,224,164,190,224,164,176,224,164,150,224,164,168,224,165,135,224,164,184,
-224,164,161,224,164,188,224,164,149,224,164,174,224,164,191,224,164,178,224,164,
-190,224,164,137,224,164,184,224,164,149,224,165,128,224,164,149,224,165,135,224,
-164,181,224,164,178,224,164,178,224,164,151,224,164,164,224,164,190,224,164,150,
-224,164,190,224,164,168,224,164,190,224,164,133,224,164,176,224,165,141,224,164,
-165,224,164,156,224,164,185,224,164,190,224,164,130,224,164,166,224,165,135,224,
-164,150,224,164,190,224,164,170,224,164,185,224,164,178,224,165,128,224,164,168,
-224,164,191,224,164,175,224,164,174,224,164,172,224,164,191,224,164,168,224,164,
-190,224,164,172,224,165,136,224,164,130,224,164,149,224,164,149,224,164,185,224,
-165,128,224,164,130,224,164,149,224,164,185,224,164,168,224,164,190,224,164,166,
-224,165,135,224,164,164,224,164,190,224,164,185,224,164,174,224,164,178,224,165,
-135,224,164,149,224,164,190,224,164,171,224,165,128,224,164,156,224,164,172,224,
-164,149,224,164,191,224,164,164,224,165,129,224,164,176,224,164,164,224,164,174,
-224,164,190,224,164,130,224,164,151,224,164,181,224,164,185,224,165,128,224,164,
-130,224,164,176,224,165,139,224,164,156,224,164,188,224,164,174,224,164,191,224,
-164,178,224,165,128,224,164,134,224,164,176,224,165,139,224,164,170,224,164,184,
-224,165,135,224,164,168,224,164,190,224,164,175,224,164,190,224,164,166,224,164,
-181,224,164,178,224,165,135,224,164,168,224,165,135,224,164,150,224,164,190,224,
-164,164,224,164,190,224,164,149,224,164,176,224,165,128,224,164,172,224,164,137,
-224,164,168,224,164,149,224,164,190,224,164,156,224,164,181,224,164,190,224,164,
-172,224,164,170,224,165,130,224,164,176,224,164,190,224,164,172,224,164,161,224,
-164,188,224,164,190,224,164,184,224,165,140,224,164,166,224,164,190,224,164,182,
-224,165,135,224,164,175,224,164,176,224,164,149,224,164,191,224,164,175,224,165,
-135,224,164,149,224,164,185,224,164,190,224,164,130,224,164,133,224,164,149,224,
-164,184,224,164,176,224,164,172,224,164,168,224,164,190,224,164,143,224,164,181,
-224,164,185,224,164,190,224,164,130,224,164,184,224,165,141,224,164,165,224,164,
-178,224,164,174,224,164,191,224,164,178,224,165,135,224,164,178,224,165,135,224,
-164,150,224,164,149,224,164,181,224,164,191,224,164,183,224,164,175,224,164,149,
-224,165,141,224,164,176,224,164,130,224,164,184,224,164,174,224,165,130,224,164,
-185,224,164,165,224,164,190,224,164,168,224,164,190,216,170,216,179,216,170,216,
-183,217,138,216,185,217,133,216,180,216,167,216,177,217,131,216,169,216,168,217,
-136,216,167,216,179,216,183,216,169,216,167,217,132,216,181,217,129,216,173,216,
-169,217,133,217,136,216,167,216,182,217,138,216,185,216,167,217,132,216,174,216,
-167,216,181,216,169,216,167,217,132,217,133,216,178,217,138,216,175,216,167,217,
-132,216,185,216,167,217,133,216,169,216,167,217,132,217,131,216,167,216,170,216,
-168,216,167,217,132,216,177,216,175,217,136,216,175,216,168,216,177,217,134,216,
-167,217,133,216,172,216,167,217,132,216,175,217,136,217,132,216,169,216,167,217,
-132,216,185,216,167,217,132,217,133,216,167,217,132,217,133,217,136,217,130,216,
-185,216,167,217,132,216,185,216,177,216,168,217,138,216,167,217,132,216,179,216,
-177,217,138,216,185,216,167,217,132,216,172,217,136,216,167,217,132,216,167,217,
-132,216,176,217,135,216,167,216,168,216,167,217,132,216,173,217,138,216,167,216,
-169,216,167,217,132,216,173,217,130,217,136,217,130,216,167,217,132,217,131,216,
-177,217,138,217,133,216,167,217,132,216,185,216,177,216,167,217,130,217,133,216,
-173,217,129,217,136,216,184,216,169,216,167,217,132,216,171,216,167,217,134,217,
-138,217,133,216,180,216,167,217,135,216,175,216,169,216,167,217,132,217,133,216,
-177,216,163,216,169,216,167,217,132,217,130,216,177,216,162,217,134,216,167,217,
-132,216,180,216,168,216,167,216,168,216,167,217,132,216,173,217,136,216,167,216,
-177,216,167,217,132,216,172,216,175,217,138,216,175,216,167,217,132,216,163,216,
-179,216,177,216,169,216,167,217,132,216,185,217,132,217,136,217,133,217,133,216,
-172,217,133,217,136,216,185,216,169,216,167,217,132,216,177,216,173,217,133,217,
-134,216,167,217,132,217,134,217,130,216,167,216,183,217,129,217,132,216,179,216,
-183,217,138,217,134,216,167,217,132,217,131,217,136,217,138,216,170,216,167,217,
-132,216,175,217,134,217,138,216,167,216,168,216,177,217,131,216,167,216,170,217,
-135,216,167,217,132,216,177,217,138,216,167,216,182,216,170,216,173,217,138,216,
-167,216,170,217,138,216,168,216,170,217,136,217,130,217,138,216,170,216,167,217,
-132,216,163,217,136,217,132,217,137,216,167,217,132,216,168,216,177,217,138,216,
-175,216,167,217,132,217,131,217,132,216,167,217,133,216,167,217,132,216,177,216,
-167,216,168,216,183,216,167,217,132,216,180,216,174,216,181,217,138,216,179,217,
-138,216,167,216,177,216,167,216,170,216,167,217,132,216,171,216,167,217,132,216,
-171,216,167,217,132,216,181,217,132,216,167,216,169,216,167,217,132,216,173,216,
-175,217,138,216,171,216,167,217,132,216,178,217,136,216,167,216,177,216,167,217,
-132,216,174,217,132,217,138,216,172,216,167,217,132,216,172,217,133,217,138,216,
-185,216,167,217,132,216,185,216,167,217,133,217,135,216,167,217,132,216,172,217,
-133,216,167,217,132,216,167,217,132,216,179,216,167,216,185,216,169,217,133,216,
-180,216,167,217,135,216,175,217,135,216,167,217,132,216,177,216,166,217,138,216,
-179,216,167,217,132,216,175,216,174,217,136,217,132,216,167,217,132,217,129,217,
-134,217,138,216,169,216,167,217,132,217,131,216,170,216,167,216,168,216,167,217,
-132,216,175,217,136,216,177,217,138,216,167,217,132,216,175,216,177,217,136,216,
-179,216,167,216,179,216,170,216,186,216,177,217,130,216,170,216,181,216,167,217,
-133,217,138,217,133,216,167,217,132,216,168,217,134,216,167,216,170,216,167,217,
-132,216,185,216,184,217,138,217,133,101,110,116,101,114,116,97,105,110,109,101,
-110,116,117,110,100,101,114,115,116,97,110,100,105,110,103,32,61,32,102,117,110,
-99,116,105,111,110,40,41,46,106,112,103,34,32,119,105,100,116,104,61,34,99,111,
-110,102,105,103,117,114,97,116,105,111,110,46,112,110,103,34,32,119,105,100,116,
-104,61,34,60,98,111,100,121,32,99,108,97,115,115,61,34,77,97,116,104,46,114,97,
-110,100,111,109,40,41,99,111,110,116,101,109,112,111,114,97,114,121,32,85,110,
-105,116,101,100,32,83,116,97,116,101,115,99,105,114,99,117,109,115,116,97,110,99
-,101,115,46,97,112,112,101,110,100,67,104,105,108,100,40,111,114,103,97,110,105,
-122,97,116,105,111,110,115,60,115,112,97,110,32,99,108,97,115,115,61,34,34,62,60
-,105,109,103,32,115,114,99,61,34,47,100,105,115,116,105,110,103,117,105,115,104,
-101,100,116,104,111,117,115,97,110,100,115,32,111,102,32,99,111,109,109,117,110,
-105,99,97,116,105,111,110,99,108,101,97,114,34,62,60,47,100,105,118,62,105,110,
-118,101,115,116,105,103,97,116,105,111,110,102,97,118,105,99,111,110,46,105,99,
-111,34,32,109,97,114,103,105,110,45,114,105,103,104,116,58,98,97,115,101,100,32,
-111,110,32,116,104,101,32,77,97,115,115,97,99,104,117,115,101,116,116,115,116,97
-,98,108,101,32,98,111,114,100,101,114,61,105,110,116,101,114,110,97,116,105,111,
-110,97,108,97,108,115,111,32,107,110,111,119,110,32,97,115,112,114,111,110,117,
-110,99,105,97,116,105,111,110,98,97,99,107,103,114,111,117,110,100,58,35,102,112
-,97,100,100,105,110,103,45,108,101,102,116,58,70,111,114,32,101,120,97,109,112,
-108,101,44,32,109,105,115,99,101,108,108,97,110,101,111,117,115,38,108,116,59,47
-,109,97,116,104,38,103,116,59,112,115,121,99,104,111,108,111,103,105,99,97,108,
-105,110,32,112,97,114,116,105,99,117,108,97,114,101,97,114,99,104,34,32,116,121,
-112,101,61,34,102,111,114,109,32,109,101,116,104,111,100,61,34,97,115,32,111,112
-,112,111,115,101,100,32,116,111,83,117,112,114,101,109,101,32,67,111,117,114,116
-,111,99,99,97,115,105,111,110,97,108,108,121,32,65,100,100,105,116,105,111,110,
-97,108,108,121,44,78,111,114,116,104,32,65,109,101,114,105,99,97,112,120,59,98,
-97,99,107,103,114,111,117,110,100,111,112,112,111,114,116,117,110,105,116,105,
-101,115,69,110,116,101,114,116,97,105,110,109,101,110,116,46,116,111,76,111,119,
-101,114,67,97,115,101,40,109,97,110,117,102,97,99,116,117,114,105,110,103,112,
-114,111,102,101,115,115,105,111,110,97,108,32,99,111,109,98,105,110,101,100,32,
-119,105,116,104,70,111,114,32,105,110,115,116,97,110,99,101,44,99,111,110,115,
-105,115,116,105,110,103,32,111,102,34,32,109,97,120,108,101,110,103,116,104,61,
-34,114,101,116,117,114,110,32,102,97,108,115,101,59,99,111,110,115,99,105,111,
-117,115,110,101,115,115,77,101,100,105,116,101,114,114,97,110,101,97,110,101,120
-,116,114,97,111,114,100,105,110,97,114,121,97,115,115,97,115,115,105,110,97,116,
-105,111,110,115,117,98,115,101,113,117,101,110,116,108,121,32,98,117,116,116,111
-,110,32,116,121,112,101,61,34,116,104,101,32,110,117,109,98,101,114,32,111,102,
-116,104,101,32,111,114,105,103,105,110,97,108,32,99,111,109,112,114,101,104,101,
-110,115,105,118,101,114,101,102,101,114,115,32,116,111,32,116,104,101,60,47,117,
-108,62,10,60,47,100,105,118,62,10,112,104,105,108,111,115,111,112,104,105,99,97,
-108,108,111,99,97,116,105,111,110,46,104,114,101,102,119,97,115,32,112,117,98,
-108,105,115,104,101,100,83,97,110,32,70,114,97,110,99,105,115,99,111,40,102,117,
-110,99,116,105,111,110,40,41,123,10,60,100,105,118,32,105,100,61,34,109,97,105,
-110,115,111,112,104,105,115,116,105,99,97,116,101,100,109,97,116,104,101,109,97,
-116,105,99,97,108,32,47,104,101,97,100,62,13,10,60,98,111,100,121,115,117,103,
-103,101,115,116,115,32,116,104,97,116,100,111,99,117,109,101,110,116,97,116,105,
-111,110,99,111,110,99,101,110,116,114,97,116,105,111,110,114,101,108,97,116,105,
-111,110,115,104,105,112,115,109,97,121,32,104,97,118,101,32,98,101,101,110,40,
-102,111,114,32,101,120,97,109,112,108,101,44,84,104,105,115,32,97,114,116,105,99
-,108,101,32,105,110,32,115,111,109,101,32,99,97,115,101,115,112,97,114,116,115,
-32,111,102,32,116,104,101,32,100,101,102,105,110,105,116,105,111,110,32,111,102,
-71,114,101,97,116,32,66,114,105,116,97,105,110,32,99,101,108,108,112,97,100,100,
-105,110,103,61,101,113,117,105,118,97,108,101,110,116,32,116,111,112,108,97,99,
-101,104,111,108,100,101,114,61,34,59,32,102,111,110,116,45,115,105,122,101,58,32
-,106,117,115,116,105,102,105,99,97,116,105,111,110,98,101,108,105,101,118,101,
-100,32,116,104,97,116,115,117,102,102,101,114,101,100,32,102,114,111,109,97,116,
-116,101,109,112,116,101,100,32,116,111,32,108,101,97,100,101,114,32,111,102,32,
-116,104,101,99,114,105,112,116,34,32,115,114,99,61,34,47,40,102,117,110,99,116,
-105,111,110,40,41,32,123,97,114,101,32,97,118,97,105,108,97,98,108,101,10,9,60,
-108,105,110,107,32,114,101,108,61,34,32,115,114,99,61,39,104,116,116,112,58,47,
-47,105,110,116,101,114,101,115,116,101,100,32,105,110,99,111,110,118,101,110,116
-,105,111,110,97,108,32,34,32,97,108,116,61,34,34,32,47,62,60,47,97,114,101,32,
-103,101,110,101,114,97,108,108,121,104,97,115,32,97,108,115,111,32,98,101,101,
-110,109,111,115,116,32,112,111,112,117,108,97,114,32,99,111,114,114,101,115,112,
-111,110,100,105,110,103,99,114,101,100,105,116,101,100,32,119,105,116,104,116,
-121,108,101,61,34,98,111,114,100,101,114,58,60,47,97,62,60,47,115,112,97,110,62,
-60,47,46,103,105,102,34,32,119,105,100,116,104,61,34,60,105,102,114,97,109,101,
-32,115,114,99,61,34,116,97,98,108,101,32,99,108,97,115,115,61,34,105,110,108,105
-,110,101,45,98,108,111,99,107,59,97,99,99,111,114,100,105,110,103,32,116,111,32,
-116,111,103,101,116,104,101,114,32,119,105,116,104,97,112,112,114,111,120,105,
-109,97,116,101,108,121,112,97,114,108,105,97,109,101,110,116,97,114,121,109,111,
-114,101,32,97,110,100,32,109,111,114,101,100,105,115,112,108,97,121,58,110,111,
-110,101,59,116,114,97,100,105,116,105,111,110,97,108,108,121,112,114,101,100,111
-,109,105,110,97,110,116,108,121,38,110,98,115,112,59,124,38,110,98,115,112,59,38
-,110,98,115,112,59,60,47,115,112,97,110,62,32,99,101,108,108,115,112,97,99,105,
-110,103,61,60,105,110,112,117,116,32,110,97,109,101,61,34,111,114,34,32,99,111,
-110,116,101,110,116,61,34,99,111,110,116,114,111,118,101,114,115,105,97,108,112,
-114,111,112,101,114,116,121,61,34,111,103,58,47,120,45,115,104,111,99,107,119,97
-,118,101,45,100,101,109,111,110,115,116,114,97,116,105,111,110,115,117,114,114,
-111,117,110,100,101,100,32,98,121,78,101,118,101,114,116,104,101,108,101,115,115
-,44,119,97,115,32,116,104,101,32,102,105,114,115,116,99,111,110,115,105,100,101,
-114,97,98,108,101,32,65,108,116,104,111,117,103,104,32,116,104,101,32,99,111,108
-,108,97,98,111,114,97,116,105,111,110,115,104,111,117,108,100,32,110,111,116,32,
-98,101,112,114,111,112,111,114,116,105,111,110,32,111,102,60,115,112,97,110,32,
-115,116,121,108,101,61,34,107,110,111,119,110,32,97,115,32,116,104,101,32,115,
-104,111,114,116,108,121,32,97,102,116,101,114,102,111,114,32,105,110,115,116,97,
-110,99,101,44,100,101,115,99,114,105,98,101,100,32,97,115,32,47,104,101,97,100,
-62,10,60,98,111,100,121,32,115,116,97,114,116,105,110,103,32,119,105,116,104,105
-,110,99,114,101,97,115,105,110,103,108,121,32,116,104,101,32,102,97,99,116,32,
-116,104,97,116,100,105,115,99,117,115,115,105,111,110,32,111,102,109,105,100,100
-,108,101,32,111,102,32,116,104,101,97,110,32,105,110,100,105,118,105,100,117,97,
-108,100,105,102,102,105,99,117,108,116,32,116,111,32,112,111,105,110,116,32,111,
-102,32,118,105,101,119,104,111,109,111,115,101,120,117,97,108,105,116,121,97,99,
-99,101,112,116,97,110,99,101,32,111,102,60,47,115,112,97,110,62,60,47,100,105,
-118,62,109,97,110,117,102,97,99,116,117,114,101,114,115,111,114,105,103,105,110,
-32,111,102,32,116,104,101,99,111,109,109,111,110,108,121,32,117,115,101,100,105,
-109,112,111,114,116,97,110,99,101,32,111,102,100,101,110,111,109,105,110,97,116,
-105,111,110,115,98,97,99,107,103,114,111,117,110,100,58,32,35,108,101,110,103,
-116,104,32,111,102,32,116,104,101,100,101,116,101,114,109,105,110,97,116,105,111
-,110,97,32,115,105,103,110,105,102,105,99,97,110,116,34,32,98,111,114,100,101,
-114,61,34,48,34,62,114,101,118,111,108,117,116,105,111,110,97,114,121,112,114,
-105,110,99,105,112,108,101,115,32,111,102,105,115,32,99,111,110,115,105,100,101,
-114,101,100,119,97,115,32,100,101,118,101,108,111,112,101,100,73,110,100,111,45,
-69,117,114,111,112,101,97,110,118,117,108,110,101,114,97,98,108,101,32,116,111,
-112,114,111,112,111,110,101,110,116,115,32,111,102,97,114,101,32,115,111,109,101
-,116,105,109,101,115,99,108,111,115,101,114,32,116,111,32,116,104,101,78,101,119
-,32,89,111,114,107,32,67,105,116,121,32,110,97,109,101,61,34,115,101,97,114,99,
-104,97,116,116,114,105,98,117,116,101,100,32,116,111,99,111,117,114,115,101,32,
-111,102,32,116,104,101,109,97,116,104,101,109,97,116,105,99,105,97,110,98,121,32
-,116,104,101,32,101,110,100,32,111,102,97,116,32,116,104,101,32,101,110,100,32,
-111,102,34,32,98,111,114,100,101,114,61,34,48,34,32,116,101,99,104,110,111,108,
-111,103,105,99,97,108,46,114,101,109,111,118,101,67,108,97,115,115,40,98,114,97,
-110,99,104,32,111,102,32,116,104,101,101,118,105,100,101,110,99,101,32,116,104,
-97,116,33,91,101,110,100,105,102,93,45,45,62,13,10,73,110,115,116,105,116,117,
-116,101,32,111,102,32,105,110,116,111,32,97,32,115,105,110,103,108,101,114,101,
-115,112,101,99,116,105,118,101,108,121,46,97,110,100,32,116,104,101,114,101,102,
-111,114,101,112,114,111,112,101,114,116,105,101,115,32,111,102,105,115,32,108,
-111,99,97,116,101,100,32,105,110,115,111,109,101,32,111,102,32,119,104,105,99,
-104,84,104,101,114,101,32,105,115,32,97,108,115,111,99,111,110,116,105,110,117,
-101,100,32,116,111,32,97,112,112,101,97,114,97,110,99,101,32,111,102,32,38,97,
-109,112,59,110,100,97,115,104,59,32,100,101,115,99,114,105,98,101,115,32,116,104
-,101,99,111,110,115,105,100,101,114,97,116,105,111,110,97,117,116,104,111,114,32
-,111,102,32,116,104,101,105,110,100,101,112,101,110,100,101,110,116,108,121,101,
-113,117,105,112,112,101,100,32,119,105,116,104,100,111,101,115,32,110,111,116,32
-,104,97,118,101,60,47,97,62,60,97,32,104,114,101,102,61,34,99,111,110,102,117,
-115,101,100,32,119,105,116,104,60,108,105,110,107,32,104,114,101,102,61,34,47,97
-,116,32,116,104,101,32,97,103,101,32,111,102,97,112,112,101,97,114,32,105,110,32
-,116,104,101,84,104,101,115,101,32,105,110,99,108,117,100,101,114,101,103,97,114
-,100,108,101,115,115,32,111,102,99,111,117,108,100,32,98,101,32,117,115,101,100,
-32,115,116,121,108,101,61,38,113,117,111,116,59,115,101,118,101,114,97,108,32,
-116,105,109,101,115,114,101,112,114,101,115,101,110,116,32,116,104,101,98,111,
-100,121,62,10,60,47,104,116,109,108,62,116,104,111,117,103,104,116,32,116,111,32
-,98,101,112,111,112,117,108,97,116,105,111,110,32,111,102,112,111,115,115,105,98
-,105,108,105,116,105,101,115,112,101,114,99,101,110,116,97,103,101,32,111,102,97
-,99,99,101,115,115,32,116,111,32,116,104,101,97,110,32,97,116,116,101,109,112,
-116,32,116,111,112,114,111,100,117,99,116,105,111,110,32,111,102,106,113,117,101
-,114,121,47,106,113,117,101,114,121,116,119,111,32,100,105,102,102,101,114,101,
-110,116,98,101,108,111,110,103,32,116,111,32,116,104,101,101,115,116,97,98,108,
-105,115,104,109,101,110,116,114,101,112,108,97,99,105,110,103,32,116,104,101,100
-,101,115,99,114,105,112,116,105,111,110,34,32,100,101,116,101,114,109,105,110,
-101,32,116,104,101,97,118,97,105,108,97,98,108,101,32,102,111,114,65,99,99,111,
-114,100,105,110,103,32,116,111,32,119,105,100,101,32,114,97,110,103,101,32,111,
-102,9,60,100,105,118,32,99,108,97,115,115,61,34,109,111,114,101,32,99,111,109,
-109,111,110,108,121,111,114,103,97,110,105,115,97,116,105,111,110,115,102,117,
-110,99,116,105,111,110,97,108,105,116,121,119,97,115,32,99,111,109,112,108,101,
-116,101,100,32,38,97,109,112,59,109,100,97,115,104,59,32,112,97,114,116,105,99,
-105,112,97,116,105,111,110,116,104,101,32,99,104,97,114,97,99,116,101,114,97,110
-,32,97,100,100,105,116,105,111,110,97,108,97,112,112,101,97,114,115,32,116,111,
-32,98,101,102,97,99,116,32,116,104,97,116,32,116,104,101,97,110,32,101,120,97,
-109,112,108,101,32,111,102,115,105,103,110,105,102,105,99,97,110,116,108,121,111
-,110,109,111,117,115,101,111,118,101,114,61,34,98,101,99,97,117,115,101,32,116,
-104,101,121,32,97,115,121,110,99,32,61,32,116,114,117,101,59,112,114,111,98,108,
-101,109,115,32,119,105,116,104,115,101,101,109,115,32,116,111,32,104,97,118,101,
-116,104,101,32,114,101,115,117,108,116,32,111,102,32,115,114,99,61,34,104,116,
-116,112,58,47,47,102,97,109,105,108,105,97,114,32,119,105,116,104,112,111,115,
-115,101,115,115,105,111,110,32,111,102,102,117,110,99,116,105,111,110,32,40,41,
-32,123,116,111,111,107,32,112,108,97,99,101,32,105,110,97,110,100,32,115,111,109
-,101,116,105,109,101,115,115,117,98,115,116,97,110,116,105,97,108,108,121,60,115
-,112,97,110,62,60,47,115,112,97,110,62,105,115,32,111,102,116,101,110,32,117,115
-,101,100,105,110,32,97,110,32,97,116,116,101,109,112,116,103,114,101,97,116,32,
-100,101,97,108,32,111,102,69,110,118,105,114,111,110,109,101,110,116,97,108,115,
-117,99,99,101,115,115,102,117,108,108,121,32,118,105,114,116,117,97,108,108,121,
-32,97,108,108,50,48,116,104,32,99,101,110,116,117,114,121,44,112,114,111,102,101
-,115,115,105,111,110,97,108,115,110,101,99,101,115,115,97,114,121,32,116,111,32,
-100,101,116,101,114,109,105,110,101,100,32,98,121,99,111,109,112,97,116,105,98,
-105,108,105,116,121,98,101,99,97,117,115,101,32,105,116,32,105,115,68,105,99,116
-,105,111,110,97,114,121,32,111,102,109,111,100,105,102,105,99,97,116,105,111,110
-,115,84,104,101,32,102,111,108,108,111,119,105,110,103,109,97,121,32,114,101,102
-,101,114,32,116,111,58,67,111,110,115,101,113,117,101,110,116,108,121,44,73,110,
-116,101,114,110,97,116,105,111,110,97,108,97,108,116,104,111,117,103,104,32,115,
-111,109,101,116,104,97,116,32,119,111,117,108,100,32,98,101,119,111,114,108,100,
-39,115,32,102,105,114,115,116,99,108,97,115,115,105,102,105,101,100,32,97,115,98
-,111,116,116,111,109,32,111,102,32,116,104,101,40,112,97,114,116,105,99,117,108,
-97,114,108,121,97,108,105,103,110,61,34,108,101,102,116,34,32,109,111,115,116,32
-,99,111,109,109,111,110,108,121,98,97,115,105,115,32,102,111,114,32,116,104,101,
-102,111,117,110,100,97,116,105,111,110,32,111,102,99,111,110,116,114,105,98,117,
-116,105,111,110,115,112,111,112,117,108,97,114,105,116,121,32,111,102,99,101,110
-,116,101,114,32,111,102,32,116,104,101,116,111,32,114,101,100,117,99,101,32,116,
-104,101,106,117,114,105,115,100,105,99,116,105,111,110,115,97,112,112,114,111,
-120,105,109,97,116,105,111,110,32,111,110,109,111,117,115,101,111,117,116,61,34,
-78,101,119,32,84,101,115,116,97,109,101,110,116,99,111,108,108,101,99,116,105,
-111,110,32,111,102,60,47,115,112,97,110,62,60,47,97,62,60,47,105,110,32,116,104,
-101,32,85,110,105,116,101,100,102,105,108,109,32,100,105,114,101,99,116,111,114,
-45,115,116,114,105,99,116,46,100,116,100,34,62,104,97,115,32,98,101,101,110,32,
-117,115,101,100,114,101,116,117,114,110,32,116,111,32,116,104,101,97,108,116,104
-,111,117,103,104,32,116,104,105,115,99,104,97,110,103,101,32,105,110,32,116,104,
-101,115,101,118,101,114,97,108,32,111,116,104,101,114,98,117,116,32,116,104,101,
-114,101,32,97,114,101,117,110,112,114,101,99,101,100,101,110,116,101,100,105,115
-,32,115,105,109,105,108,97,114,32,116,111,101,115,112,101,99,105,97,108,108,121,
-32,105,110,119,101,105,103,104,116,58,32,98,111,108,100,59,105,115,32,99,97,108,
-108,101,100,32,116,104,101,99,111,109,112,117,116,97,116,105,111,110,97,108,105,
-110,100,105,99,97,116,101,32,116,104,97,116,114,101,115,116,114,105,99,116,101,
-100,32,116,111,9,60,109,101,116,97,32,110,97,109,101,61,34,97,114,101,32,116,121
-,112,105,99,97,108,108,121,99,111,110,102,108,105,99,116,32,119,105,116,104,72,
-111,119,101,118,101,114,44,32,116,104,101,32,65,110,32,101,120,97,109,112,108,
-101,32,111,102,99,111,109,112,97,114,101,100,32,119,105,116,104,113,117,97,110,
-116,105,116,105,101,115,32,111,102,114,97,116,104,101,114,32,116,104,97,110,32,
-97,99,111,110,115,116,101,108,108,97,116,105,111,110,110,101,99,101,115,115,97,
-114,121,32,102,111,114,114,101,112,111,114,116,101,100,32,116,104,97,116,115,112
-,101,99,105,102,105,99,97,116,105,111,110,112,111,108,105,116,105,99,97,108,32,
-97,110,100,38,110,98,115,112,59,38,110,98,115,112,59,60,114,101,102,101,114,101,
-110,99,101,115,32,116,111,116,104,101,32,115,97,109,101,32,121,101,97,114,71,111
-,118,101,114,110,109,101,110,116,32,111,102,103,101,110,101,114,97,116,105,111,
-110,32,111,102,104,97,118,101,32,110,111,116,32,98,101,101,110,115,101,118,101,
-114,97,108,32,121,101,97,114,115,99,111,109,109,105,116,109,101,110,116,32,116,
-111,9,9,60,117,108,32,99,108,97,115,115,61,34,118,105,115,117,97,108,105,122,97,
-116,105,111,110,49,57,116,104,32,99,101,110,116,117,114,121,44,112,114,97,99,116
-,105,116,105,111,110,101,114,115,116,104,97,116,32,104,101,32,119,111,117,108,
-100,97,110,100,32,99,111,110,116,105,110,117,101,100,111,99,99,117,112,97,116,
-105,111,110,32,111,102,105,115,32,100,101,102,105,110,101,100,32,97,115,99,101,
-110,116,114,101,32,111,102,32,116,104,101,116,104,101,32,97,109,111,117,110,116,
-32,111,102,62,60,100,105,118,32,115,116,121,108,101,61,34,101,113,117,105,118,97
-,108,101,110,116,32,111,102,100,105,102,102,101,114,101,110,116,105,97,116,101,
-98,114,111,117,103,104,116,32,97,98,111,117,116,109,97,114,103,105,110,45,108,
-101,102,116,58,32,97,117,116,111,109,97,116,105,99,97,108,108,121,116,104,111,
-117,103,104,116,32,111,102,32,97,115,83,111,109,101,32,111,102,32,116,104,101,
-115,101,10,60,100,105,118,32,99,108,97,115,115,61,34,105,110,112,117,116,32,99,
-108,97,115,115,61,34,114,101,112,108,97,99,101,100,32,119,105,116,104,105,115,32
-,111,110,101,32,111,102,32,116,104,101,101,100,117,99,97,116,105,111,110,32,97,
-110,100,105,110,102,108,117,101,110,99,101,100,32,98,121,114,101,112,117,116,97,
-116,105,111,110,32,97,115,10,60,109,101,116,97,32,110,97,109,101,61,34,97,99,99,
-111,109,109,111,100,97,116,105,111,110,60,47,100,105,118,62,10,60,47,100,105,118
-,62,108,97,114,103,101,32,112,97,114,116,32,111,102,73,110,115,116,105,116,117,
-116,101,32,102,111,114,116,104,101,32,115,111,45,99,97,108,108,101,100,32,97,103
-,97,105,110,115,116,32,116,104,101,32,73,110,32,116,104,105,115,32,99,97,115,101
-,44,119,97,115,32,97,112,112,111,105,110,116,101,100,99,108,97,105,109,101,100,
-32,116,111,32,98,101,72,111,119,101,118,101,114,44,32,116,104,105,115,68,101,112
-,97,114,116,109,101,110,116,32,111,102,116,104,101,32,114,101,109,97,105,110,105
-,110,103,101,102,102,101,99,116,32,111,110,32,116,104,101,112,97,114,116,105,99,
-117,108,97,114,108,121,32,100,101,97,108,32,119,105,116,104,32,116,104,101,10,60
-,100,105,118,32,115,116,121,108,101,61,34,97,108,109,111,115,116,32,97,108,119,
-97,121,115,97,114,101,32,99,117,114,114,101,110,116,108,121,101,120,112,114,101,
-115,115,105,111,110,32,111,102,112,104,105,108,111,115,111,112,104,121,32,111,
-102,102,111,114,32,109,111,114,101,32,116,104,97,110,99,105,118,105,108,105,122,
-97,116,105,111,110,115,111,110,32,116,104,101,32,105,115,108,97,110,100,115,101,
-108,101,99,116,101,100,73,110,100,101,120,99,97,110,32,114,101,115,117,108,116,
-32,105,110,34,32,118,97,108,117,101,61,34,34,32,47,62,116,104,101,32,115,116,114
-,117,99,116,117,114,101,32,47,62,60,47,97,62,60,47,100,105,118,62,77,97,110,121,
-32,111,102,32,116,104,101,115,101,99,97,117,115,101,100,32,98,121,32,116,104,101
-,111,102,32,116,104,101,32,85,110,105,116,101,100,115,112,97,110,32,99,108,97,
-115,115,61,34,109,99,97,110,32,98,101,32,116,114,97,99,101,100,105,115,32,114,
-101,108,97,116,101,100,32,116,111,98,101,99,97,109,101,32,111,110,101,32,111,102
-,105,115,32,102,114,101,113,117,101,110,116,108,121,108,105,118,105,110,103,32,
-105,110,32,116,104,101,116,104,101,111,114,101,116,105,99,97,108,108,121,70,111,
-108,108,111,119,105,110,103,32,116,104,101,82,101,118,111,108,117,116,105,111,
-110,97,114,121,103,111,118,101,114,110,109,101,110,116,32,105,110,105,115,32,100
-,101,116,101,114,109,105,110,101,100,116,104,101,32,112,111,108,105,116,105,99,
-97,108,105,110,116,114,111,100,117,99,101,100,32,105,110,115,117,102,102,105,99,
-105,101,110,116,32,116,111,100,101,115,99,114,105,112,116,105,111,110,34,62,115,
-104,111,114,116,32,115,116,111,114,105,101,115,115,101,112,97,114,97,116,105,111
-,110,32,111,102,97,115,32,116,111,32,119,104,101,116,104,101,114,107,110,111,119
-,110,32,102,111,114,32,105,116,115,119,97,115,32,105,110,105,116,105,97,108,108,
-121,100,105,115,112,108,97,121,58,98,108,111,99,107,105,115,32,97,110,32,101,120
-,97,109,112,108,101,116,104,101,32,112,114,105,110,99,105,112,97,108,99,111,110,
-115,105,115,116,115,32,111,102,32,97,114,101,99,111,103,110,105,122,101,100,32,
-97,115,47,98,111,100,121,62,60,47,104,116,109,108,62,97,32,115,117,98,115,116,97
-,110,116,105,97,108,114,101,99,111,110,115,116,114,117,99,116,101,100,104,101,97
-,100,32,111,102,32,115,116,97,116,101,114,101,115,105,115,116,97,110,99,101,32,
-116,111,117,110,100,101,114,103,114,97,100,117,97,116,101,84,104,101,114,101,32,
-97,114,101,32,116,119,111,103,114,97,118,105,116,97,116,105,111,110,97,108,97,
-114,101,32,100,101,115,99,114,105,98,101,100,105,110,116,101,110,116,105,111,110
-,97,108,108,121,115,101,114,118,101,100,32,97,115,32,116,104,101,99,108,97,115,
-115,61,34,104,101,97,100,101,114,111,112,112,111,115,105,116,105,111,110,32,116,
-111,102,117,110,100,97,109,101,110,116,97,108,108,121,100,111,109,105,110,97,116
-,101,100,32,116,104,101,97,110,100,32,116,104,101,32,111,116,104,101,114,97,108,
-108,105,97,110,99,101,32,119,105,116,104,119,97,115,32,102,111,114,99,101,100,32
-,116,111,114,101,115,112,101,99,116,105,118,101,108,121,44,97,110,100,32,112,111
-,108,105,116,105,99,97,108,105,110,32,115,117,112,112,111,114,116,32,111,102,112
-,101,111,112,108,101,32,105,110,32,116,104,101,50,48,116,104,32,99,101,110,116,
-117,114,121,46,97,110,100,32,112,117,98,108,105,115,104,101,100,108,111,97,100,
-67,104,97,114,116,98,101,97,116,116,111,32,117,110,100,101,114,115,116,97,110,
-100,109,101,109,98,101,114,32,115,116,97,116,101,115,101,110,118,105,114,111,110
-,109,101,110,116,97,108,102,105,114,115,116,32,104,97,108,102,32,111,102,99,111,
-117,110,116,114,105,101,115,32,97,110,100,97,114,99,104,105,116,101,99,116,117,
-114,97,108,98,101,32,99,111,110,115,105,100,101,114,101,100,99,104,97,114,97,99,
-116,101,114,105,122,101,100,99,108,101,97,114,73,110,116,101,114,118,97,108,97,
-117,116,104,111,114,105,116,97,116,105,118,101,70,101,100,101,114,97,116,105,111
-,110,32,111,102,119,97,115,32,115,117,99,99,101,101,100,101,100,97,110,100,32,
-116,104,101,114,101,32,97,114,101,97,32,99,111,110,115,101,113,117,101,110,99,
-101,116,104,101,32,80,114,101,115,105,100,101,110,116,97,108,115,111,32,105,110,
-99,108,117,100,101,100,102,114,101,101,32,115,111,102,116,119,97,114,101,115,117
-,99,99,101,115,115,105,111,110,32,111,102,100,101,118,101,108,111,112,101,100,32
-,116,104,101,119,97,115,32,100,101,115,116,114,111,121,101,100,97,119,97,121,32,
-102,114,111,109,32,116,104,101,59,10,60,47,115,99,114,105,112,116,62,10,60,97,
-108,116,104,111,117,103,104,32,116,104,101,121,102,111,108,108,111,119,101,100,
-32,98,121,32,97,109,111,114,101,32,112,111,119,101,114,102,117,108,114,101,115,
-117,108,116,101,100,32,105,110,32,97,85,110,105,118,101,114,115,105,116,121,32,
-111,102,72,111,119,101,118,101,114,44,32,109,97,110,121,116,104,101,32,112,114,
-101,115,105,100,101,110,116,72,111,119,101,118,101,114,44,32,115,111,109,101,105
-,115,32,116,104,111,117,103,104,116,32,116,111,117,110,116,105,108,32,116,104,
-101,32,101,110,100,119,97,115,32,97,110,110,111,117,110,99,101,100,97,114,101,32
-,105,109,112,111,114,116,97,110,116,97,108,115,111,32,105,110,99,108,117,100,101
-,115,62,60,105,110,112,117,116,32,116,121,112,101,61,116,104,101,32,99,101,110,
-116,101,114,32,111,102,32,68,79,32,78,79,84,32,65,76,84,69,82,117,115,101,100,32
-,116,111,32,114,101,102,101,114,116,104,101,109,101,115,47,63,115,111,114,116,61
-,116,104,97,116,32,104,97,100,32,98,101,101,110,116,104,101,32,98,97,115,105,115
-,32,102,111,114,104,97,115,32,100,101,118,101,108,111,112,101,100,105,110,32,116
-,104,101,32,115,117,109,109,101,114,99,111,109,112,97,114,97,116,105,118,101,108
-,121,100,101,115,99,114,105,98,101,100,32,116,104,101,115,117,99,104,32,97,115,
-32,116,104,111,115,101,116,104,101,32,114,101,115,117,108,116,105,110,103,105,
-115,32,105,109,112,111,115,115,105,98,108,101,118,97,114,105,111,117,115,32,111,
-116,104,101,114,83,111,117,116,104,32,65,102,114,105,99,97,110,104,97,118,101,32
-,116,104,101,32,115,97,109,101,101,102,102,101,99,116,105,118,101,110,101,115,
-115,105,110,32,119,104,105,99,104,32,99,97,115,101,59,32,116,101,120,116,45,97,
-108,105,103,110,58,115,116,114,117,99,116,117,114,101,32,97,110,100,59,32,98,97,
-99,107,103,114,111,117,110,100,58,114,101,103,97,114,100,105,110,103,32,116,104,
-101,115,117,112,112,111,114,116,101,100,32,116,104,101,105,115,32,97,108,115,111
-,32,107,110,111,119,110,115,116,121,108,101,61,34,109,97,114,103,105,110,105,110
-,99,108,117,100,105,110,103,32,116,104,101,98,97,104,97,115,97,32,77,101,108,97,
-121,117,110,111,114,115,107,32,98,111,107,109,195,165,108,110,111,114,115,107,32
-,110,121,110,111,114,115,107,115,108,111,118,101,110,197,161,196,141,105,110,97,
-105,110,116,101,114,110,97,99,105,111,110,97,108,99,97,108,105,102,105,99,97,99,
-105,195,179,110,99,111,109,117,110,105,99,97,99,105,195,179,110,99,111,110,115,
-116,114,117,99,99,105,195,179,110,34,62,60,100,105,118,32,99,108,97,115,115,61,
-34,100,105,115,97,109,98,105,103,117,97,116,105,111,110,68,111,109,97,105,110,78
-,97,109,101,39,44,32,39,97,100,109,105,110,105,115,116,114,97,116,105,111,110,
-115,105,109,117,108,116,97,110,101,111,117,115,108,121,116,114,97,110,115,112,
-111,114,116,97,116,105,111,110,73,110,116,101,114,110,97,116,105,111,110,97,108,
-32,109,97,114,103,105,110,45,98,111,116,116,111,109,58,114,101,115,112,111,110,
-115,105,98,105,108,105,116,121,60,33,91,101,110,100,105,102,93,45,45,62,10,60,47
-,62,60,109,101,116,97,32,110,97,109,101,61,34,105,109,112,108,101,109,101,110,
-116,97,116,105,111,110,105,110,102,114,97,115,116,114,117,99,116,117,114,101,114
-,101,112,114,101,115,101,110,116,97,116,105,111,110,98,111,114,100,101,114,45,98
-,111,116,116,111,109,58,60,47,104,101,97,100,62,10,60,98,111,100,121,62,61,104,
-116,116,112,37,51,65,37,50,70,37,50,70,60,102,111,114,109,32,109,101,116,104,111
-,100,61,34,109,101,116,104,111,100,61,34,112,111,115,116,34,32,47,102,97,118,105
-,99,111,110,46,105,99,111,34,32,125,41,59,10,60,47,115,99,114,105,112,116,62,10,
-46,115,101,116,65,116,116,114,105,98,117,116,101,40,65,100,109,105,110,105,115,
-116,114,97,116,105,111,110,61,32,110,101,119,32,65,114,114,97,121,40,41,59,60,33
-,91,101,110,100,105,102,93,45,45,62,13,10,100,105,115,112,108,97,121,58,98,108,
-111,99,107,59,85,110,102,111,114,116,117,110,97,116,101,108,121,44,34,62,38,110,
-98,115,112,59,60,47,100,105,118,62,47,102,97,118,105,99,111,110,46,105,99,111,34
-,62,61,39,115,116,121,108,101,115,104,101,101,116,39,32,105,100,101,110,116,105,
-102,105,99,97,116,105,111,110,44,32,102,111,114,32,101,120,97,109,112,108,101,44
-,60,108,105,62,60,97,32,104,114,101,102,61,34,47,97,110,32,97,108,116,101,114,
-110,97,116,105,118,101,97,115,32,97,32,114,101,115,117,108,116,32,111,102,112,
-116,34,62,60,47,115,99,114,105,112,116,62,10,116,121,112,101,61,34,115,117,98,
-109,105,116,34,32,10,40,102,117,110,99,116,105,111,110,40,41,32,123,114,101,99,
-111,109,109,101,110,100,97,116,105,111,110,102,111,114,109,32,97,99,116,105,111,
-110,61,34,47,116,114,97,110,115,102,111,114,109,97,116,105,111,110,114,101,99,
-111,110,115,116,114,117,99,116,105,111,110,46,115,116,121,108,101,46,100,105,115
-,112,108,97,121,32,65,99,99,111,114,100,105,110,103,32,116,111,32,104,105,100,
-100,101,110,34,32,110,97,109,101,61,34,97,108,111,110,103,32,119,105,116,104,32,
-116,104,101,100,111,99,117,109,101,110,116,46,98,111,100,121,46,97,112,112,114,
-111,120,105,109,97,116,101,108,121,32,67,111,109,109,117,110,105,99,97,116,105,
-111,110,115,112,111,115,116,34,32,97,99,116,105,111,110,61,34,109,101,97,110,105
-,110,103,32,38,113,117,111,116,59,45,45,60,33,91,101,110,100,105,102,93,45,45,62
-,80,114,105,109,101,32,77,105,110,105,115,116,101,114,99,104,97,114,97,99,116,
-101,114,105,115,116,105,99,60,47,97,62,32,60,97,32,99,108,97,115,115,61,116,104,
-101,32,104,105,115,116,111,114,121,32,111,102,32,111,110,109,111,117,115,101,111
-,118,101,114,61,34,116,104,101,32,103,111,118,101,114,110,109,101,110,116,104,
-114,101,102,61,34,104,116,116,112,115,58,47,47,119,97,115,32,111,114,105,103,105
-,110,97,108,108,121,119,97,115,32,105,110,116,114,111,100,117,99,101,100,99,108,
-97,115,115,105,102,105,99,97,116,105,111,110,114,101,112,114,101,115,101,110,116
-,97,116,105,118,101,97,114,101,32,99,111,110,115,105,100,101,114,101,100,60,33,
-91,101,110,100,105,102,93,45,45,62,10,10,100,101,112,101,110,100,115,32,111,110,
-32,116,104,101,85,110,105,118,101,114,115,105,116,121,32,111,102,32,105,110,32,
-99,111,110,116,114,97,115,116,32,116,111,32,112,108,97,99,101,104,111,108,100,
-101,114,61,34,105,110,32,116,104,101,32,99,97,115,101,32,111,102,105,110,116,101
-,114,110,97,116,105,111,110,97,108,32,99,111,110,115,116,105,116,117,116,105,111
-,110,97,108,115,116,121,108,101,61,34,98,111,114,100,101,114,45,58,32,102,117,
-110,99,116,105,111,110,40,41,32,123,66,101,99,97,117,115,101,32,111,102,32,116,
-104,101,45,115,116,114,105,99,116,46,100,116,100,34,62,10,60,116,97,98,108,101,
-32,99,108,97,115,115,61,34,97,99,99,111,109,112,97,110,105,101,100,32,98,121,97,
-99,99,111,117,110,116,32,111,102,32,116,104,101,60,115,99,114,105,112,116,32,115
-,114,99,61,34,47,110,97,116,117,114,101,32,111,102,32,116,104,101,32,116,104,101
-,32,112,101,111,112,108,101,32,105,110,32,105,110,32,97,100,100,105,116,105,111,
-110,32,116,111,115,41,59,32,106,115,46,105,100,32,61,32,105,100,34,32,119,105,
-100,116,104,61,34,49,48,48,37,34,114,101,103,97,114,100,105,110,103,32,116,104,
-101,32,82,111,109,97,110,32,67,97,116,104,111,108,105,99,97,110,32,105,110,100,
-101,112,101,110,100,101,110,116,102,111,108,108,111,119,105,110,103,32,116,104,
-101,32,46,103,105,102,34,32,119,105,100,116,104,61,34,49,116,104,101,32,102,111,
-108,108,111,119,105,110,103,32,100,105,115,99,114,105,109,105,110,97,116,105,111
-,110,97,114,99,104,97,101,111,108,111,103,105,99,97,108,112,114,105,109,101,32,
-109,105,110,105,115,116,101,114,46,106,115,34,62,60,47,115,99,114,105,112,116,62
-,99,111,109,98,105,110,97,116,105,111,110,32,111,102,32,109,97,114,103,105,110,
-119,105,100,116,104,61,34,99,114,101,97,116,101,69,108,101,109,101,110,116,40,
-119,46,97,116,116,97,99,104,69,118,101,110,116,40,60,47,97,62,60,47,116,100,62,
-60,47,116,114,62,115,114,99,61,34,104,116,116,112,115,58,47,47,97,73,110,32,112,
-97,114,116,105,99,117,108,97,114,44,32,97,108,105,103,110,61,34,108,101,102,116,
-34,32,67,122,101,99,104,32,82,101,112,117,98,108,105,99,85,110,105,116,101,100,
-32,75,105,110,103,100,111,109,99,111,114,114,101,115,112,111,110,100,101,110,99,
-101,99,111,110,99,108,117,100,101,100,32,116,104,97,116,46,104,116,109,108,34,32
-,116,105,116,108,101,61,34,40,102,117,110,99,116,105,111,110,32,40,41,32,123,99,
-111,109,101,115,32,102,114,111,109,32,116,104,101,97,112,112,108,105,99,97,116,
-105,111,110,32,111,102,60,115,112,97,110,32,99,108,97,115,115,61,34,115,98,101,
-108,105,101,118,101,100,32,116,111,32,98,101,101,109,101,110,116,40,39,115,99,
-114,105,112,116,39,60,47,97,62,10,60,47,108,105,62,10,60,108,105,118,101,114,121
-,32,100,105,102,102,101,114,101,110,116,62,60,115,112,97,110,32,99,108,97,115,
-115,61,34,111,112,116,105,111,110,32,118,97,108,117,101,61,34,40,97,108,115,111,
-32,107,110,111,119,110,32,97,115,9,60,108,105,62,60,97,32,104,114,101,102,61,34,
-62,60,105,110,112,117,116,32,110,97,109,101,61,34,115,101,112,97,114,97,116,101,
-100,32,102,114,111,109,114,101,102,101,114,114,101,100,32,116,111,32,97,115,32,
-118,97,108,105,103,110,61,34,116,111,112,34,62,102,111,117,110,100,101,114,32,
-111,102,32,116,104,101,97,116,116,101,109,112,116,105,110,103,32,116,111,32,99,
-97,114,98,111,110,32,100,105,111,120,105,100,101,10,10,60,100,105,118,32,99,108,
-97,115,115,61,34,99,108,97,115,115,61,34,115,101,97,114,99,104,45,47,98,111,100,
-121,62,10,60,47,104,116,109,108,62,111,112,112,111,114,116,117,110,105,116,121,
-32,116,111,99,111,109,109,117,110,105,99,97,116,105,111,110,115,60,47,104,101,97
-,100,62,13,10,60,98,111,100,121,32,115,116,121,108,101,61,34,119,105,100,116,104
-,58,84,105,225,186,191,110,103,32,86,105,225,187,135,116,99,104,97,110,103,101,
-115,32,105,110,32,116,104,101,98,111,114,100,101,114,45,99,111,108,111,114,58,35
-,48,34,32,98,111,114,100,101,114,61,34,48,34,32,60,47,115,112,97,110,62,60,47,
-100,105,118,62,60,119,97,115,32,100,105,115,99,111,118,101,114,101,100,34,32,116
-,121,112,101,61,34,116,101,120,116,34,32,41,59,10,60,47,115,99,114,105,112,116,
-62,10,10,68,101,112,97,114,116,109,101,110,116,32,111,102,32,101,99,99,108,101,
-115,105,97,115,116,105,99,97,108,116,104,101,114,101,32,104,97,115,32,98,101,101
-,110,114,101,115,117,108,116,105,110,103,32,102,114,111,109,60,47,98,111,100,121
-,62,60,47,104,116,109,108,62,104,97,115,32,110,101,118,101,114,32,98,101,101,110
-,116,104,101,32,102,105,114,115,116,32,116,105,109,101,105,110,32,114,101,115,
-112,111,110,115,101,32,116,111,97,117,116,111,109,97,116,105,99,97,108,108,121,
-32,60,47,100,105,118,62,10,10,60,100,105,118,32,105,119,97,115,32,99,111,110,115
-,105,100,101,114,101,100,112,101,114,99,101,110,116,32,111,102,32,116,104,101,34
-,32,47,62,60,47,97,62,60,47,100,105,118,62,99,111,108,108,101,99,116,105,111,110
-,32,111,102,32,100,101,115,99,101,110,100,101,100,32,102,114,111,109,115,101,99,
-116,105,111,110,32,111,102,32,116,104,101,97,99,99,101,112,116,45,99,104,97,114,
-115,101,116,116,111,32,98,101,32,99,111,110,102,117,115,101,100,109,101,109,98,
-101,114,32,111,102,32,116,104,101,32,112,97,100,100,105,110,103,45,114,105,103,
-104,116,58,116,114,97,110,115,108,97,116,105,111,110,32,111,102,105,110,116,101,
-114,112,114,101,116,97,116,105,111,110,32,104,114,101,102,61,39,104,116,116,112,
-58,47,47,119,104,101,116,104,101,114,32,111,114,32,110,111,116,84,104,101,114,
-101,32,97,114,101,32,97,108,115,111,116,104,101,114,101,32,97,114,101,32,109,97,
-110,121,97,32,115,109,97,108,108,32,110,117,109,98,101,114,111,116,104,101,114,
-32,112,97,114,116,115,32,111,102,105,109,112,111,115,115,105,98,108,101,32,116,
-111,32,32,99,108,97,115,115,61,34,98,117,116,116,111,110,108,111,99,97,116,101,
-100,32,105,110,32,116,104,101,46,32,72,111,119,101,118,101,114,44,32,116,104,101
-,97,110,100,32,101,118,101,110,116,117,97,108,108,121,65,116,32,116,104,101,32,
-101,110,100,32,111,102,32,98,101,99,97,117,115,101,32,111,102,32,105,116,115,114
-,101,112,114,101,115,101,110,116,115,32,116,104,101,60,102,111,114,109,32,97,99,
-116,105,111,110,61,34,32,109,101,116,104,111,100,61,34,112,111,115,116,34,105,
-116,32,105,115,32,112,111,115,115,105,98,108,101,109,111,114,101,32,108,105,107,
-101,108,121,32,116,111,97,110,32,105,110,99,114,101,97,115,101,32,105,110,104,97
-,118,101,32,97,108,115,111,32,98,101,101,110,99,111,114,114,101,115,112,111,110,
-100,115,32,116,111,97,110,110,111,117,110,99,101,100,32,116,104,97,116,97,108,
-105,103,110,61,34,114,105,103,104,116,34,62,109,97,110,121,32,99,111,117,110,116
-,114,105,101,115,102,111,114,32,109,97,110,121,32,121,101,97,114,115,101,97,114,
-108,105,101,115,116,32,107,110,111,119,110,98,101,99,97,117,115,101,32,105,116,
-32,119,97,115,112,116,34,62,60,47,115,99,114,105,112,116,62,13,32,118,97,108,105
-,103,110,61,34,116,111,112,34,32,105,110,104,97,98,105,116,97,110,116,115,32,111
-,102,102,111,108,108,111,119,105,110,103,32,121,101,97,114,13,10,60,100,105,118,
-32,99,108,97,115,115,61,34,109,105,108,108,105,111,110,32,112,101,111,112,108,
-101,99,111,110,116,114,111,118,101,114,115,105,97,108,32,99,111,110,99,101,114,
-110,105,110,103,32,116,104,101,97,114,103,117,101,32,116,104,97,116,32,116,104,
-101,103,111,118,101,114,110,109,101,110,116,32,97,110,100,97,32,114,101,102,101,
-114,101,110,99,101,32,116,111,116,114,97,110,115,102,101,114,114,101,100,32,116,
-111,100,101,115,99,114,105,98,105,110,103,32,116,104,101,32,115,116,121,108,101,
-61,34,99,111,108,111,114,58,97,108,116,104,111,117,103,104,32,116,104,101,114,
-101,98,101,115,116,32,107,110,111,119,110,32,102,111,114,115,117,98,109,105,116,
-34,32,110,97,109,101,61,34,109,117,108,116,105,112,108,105,99,97,116,105,111,110
-,109,111,114,101,32,116,104,97,110,32,111,110,101,32,114,101,99,111,103,110,105,
-116,105,111,110,32,111,102,67,111,117,110,99,105,108,32,111,102,32,116,104,101,
-101,100,105,116,105,111,110,32,111,102,32,116,104,101,32,32,60,109,101,116,97,32
-,110,97,109,101,61,34,69,110,116,101,114,116,97,105,110,109,101,110,116,32,97,
-119,97,121,32,102,114,111,109,32,116,104,101,32,59,109,97,114,103,105,110,45,114
-,105,103,104,116,58,97,116,32,116,104,101,32,116,105,109,101,32,111,102,105,110,
-118,101,115,116,105,103,97,116,105,111,110,115,99,111,110,110,101,99,116,101,100
-,32,119,105,116,104,97,110,100,32,109,97,110,121,32,111,116,104,101,114,97,108,
-116,104,111,117,103,104,32,105,116,32,105,115,98,101,103,105,110,110,105,110,103
-,32,119,105,116,104,32,60,115,112,97,110,32,99,108,97,115,115,61,34,100,101,115,
-99,101,110,100,97,110,116,115,32,111,102,60,115,112,97,110,32,99,108,97,115,115,
-61,34,105,32,97,108,105,103,110,61,34,114,105,103,104,116,34,60,47,104,101,97,
-100,62,10,60,98,111,100,121,32,97,115,112,101,99,116,115,32,111,102,32,116,104,
-101,104,97,115,32,115,105,110,99,101,32,98,101,101,110,69,117,114,111,112,101,97
-,110,32,85,110,105,111,110,114,101,109,105,110,105,115,99,101,110,116,32,111,102
-,109,111,114,101,32,100,105,102,102,105,99,117,108,116,86,105,99,101,32,80,114,
-101,115,105,100,101,110,116,99,111,109,112,111,115,105,116,105,111,110,32,111,
-102,112,97,115,115,101,100,32,116,104,114,111,117,103,104,109,111,114,101,32,105
-,109,112,111,114,116,97,110,116,102,111,110,116,45,115,105,122,101,58,49,49,112,
-120,101,120,112,108,97,110,97,116,105,111,110,32,111,102,116,104,101,32,99,111,
-110,99,101,112,116,32,111,102,119,114,105,116,116,101,110,32,105,110,32,116,104,
-101,9,60,115,112,97,110,32,99,108,97,115,115,61,34,105,115,32,111,110,101,32,111
-,102,32,116,104,101,32,114,101,115,101,109,98,108,97,110,99,101,32,116,111,111,
-110,32,116,104,101,32,103,114,111,117,110,100,115,119,104,105,99,104,32,99,111,
-110,116,97,105,110,115,105,110,99,108,117,100,105,110,103,32,116,104,101,32,100,
-101,102,105,110,101,100,32,98,121,32,116,104,101,112,117,98,108,105,99,97,116,
-105,111,110,32,111,102,109,101,97,110,115,32,116,104,97,116,32,116,104,101,111,
-117,116,115,105,100,101,32,111,102,32,116,104,101,115,117,112,112,111,114,116,32
-,111,102,32,116,104,101,60,105,110,112,117,116,32,99,108,97,115,115,61,34,60,115
-,112,97,110,32,99,108,97,115,115,61,34,116,40,77,97,116,104,46,114,97,110,100,
-111,109,40,41,109,111,115,116,32,112,114,111,109,105,110,101,110,116,100,101,115
-,99,114,105,112,116,105,111,110,32,111,102,67,111,110,115,116,97,110,116,105,110
-,111,112,108,101,119,101,114,101,32,112,117,98,108,105,115,104,101,100,60,100,
-105,118,32,99,108,97,115,115,61,34,115,101,97,112,112,101,97,114,115,32,105,110,
-32,116,104,101,49,34,32,104,101,105,103,104,116,61,34,49,34,32,109,111,115,116,
-32,105,109,112,111,114,116,97,110,116,119,104,105,99,104,32,105,110,99,108,117,
-100,101,115,119,104,105,99,104,32,104,97,100,32,98,101,101,110,100,101,115,116,
-114,117,99,116,105,111,110,32,111,102,116,104,101,32,112,111,112,117,108,97,116,
-105,111,110,10,9,60,100,105,118,32,99,108,97,115,115,61,34,112,111,115,115,105,
-98,105,108,105,116,121,32,111,102,115,111,109,101,116,105,109,101,115,32,117,115
-,101,100,97,112,112,101,97,114,32,116,111,32,104,97,118,101,115,117,99,99,101,
-115,115,32,111,102,32,116,104,101,105,110,116,101,110,100,101,100,32,116,111,32,
-98,101,112,114,101,115,101,110,116,32,105,110,32,116,104,101,115,116,121,108,101
-,61,34,99,108,101,97,114,58,98,13,10,60,47,115,99,114,105,112,116,62,13,10,60,
-119,97,115,32,102,111,117,110,100,101,100,32,105,110,105,110,116,101,114,118,105
-,101,119,32,119,105,116,104,95,105,100,34,32,99,111,110,116,101,110,116,61,34,99
-,97,112,105,116,97,108,32,111,102,32,116,104,101,13,10,60,108,105,110,107,32,114
-,101,108,61,34,115,114,101,108,101,97,115,101,32,111,102,32,116,104,101,112,111,
-105,110,116,32,111,117,116,32,116,104,97,116,120,77,76,72,116,116,112,82,101,113
-,117,101,115,116,97,110,100,32,115,117,98,115,101,113,117,101,110,116,115,101,99
-,111,110,100,32,108,97,114,103,101,115,116,118,101,114,121,32,105,109,112,111,
-114,116,97,110,116,115,112,101,99,105,102,105,99,97,116,105,111,110,115,115,117,
-114,102,97,99,101,32,111,102,32,116,104,101,97,112,112,108,105,101,100,32,116,
-111,32,116,104,101,102,111,114,101,105,103,110,32,112,111,108,105,99,121,95,115,
-101,116,68,111,109,97,105,110,78,97,109,101,101,115,116,97,98,108,105,115,104,
-101,100,32,105,110,105,115,32,98,101,108,105,101,118,101,100,32,116,111,73,110,
-32,97,100,100,105,116,105,111,110,32,116,111,109,101,97,110,105,110,103,32,111,
-102,32,116,104,101,105,115,32,110,97,109,101,100,32,97,102,116,101,114,116,111,
-32,112,114,111,116,101,99,116,32,116,104,101,105,115,32,114,101,112,114,101,115,
-101,110,116,101,100,68,101,99,108,97,114,97,116,105,111,110,32,111,102,109,111,
-114,101,32,101,102,102,105,99,105,101,110,116,67,108,97,115,115,105,102,105,99,
-97,116,105,111,110,111,116,104,101,114,32,102,111,114,109,115,32,111,102,104,101
-,32,114,101,116,117,114,110,101,100,32,116,111,60,115,112,97,110,32,99,108,97,
-115,115,61,34,99,112,101,114,102,111,114,109,97,110,99,101,32,111,102,40,102,117
-,110,99,116,105,111,110,40,41,32,123,13,105,102,32,97,110,100,32,111,110,108,121
-,32,105,102,114,101,103,105,111,110,115,32,111,102,32,116,104,101,108,101,97,100
-,105,110,103,32,116,111,32,116,104,101,114,101,108,97,116,105,111,110,115,32,119
-,105,116,104,85,110,105,116,101,100,32,78,97,116,105,111,110,115,115,116,121,108
-,101,61,34,104,101,105,103,104,116,58,111,116,104,101,114,32,116,104,97,110,32,
-116,104,101,121,112,101,34,32,99,111,110,116,101,110,116,61,34,65,115,115,111,99
-,105,97,116,105,111,110,32,111,102,10,60,47,104,101,97,100,62,10,60,98,111,100,
-121,108,111,99,97,116,101,100,32,111,110,32,116,104,101,105,115,32,114,101,102,
-101,114,114,101,100,32,116,111,40,105,110,99,108,117,100,105,110,103,32,116,104,
-101,99,111,110,99,101,110,116,114,97,116,105,111,110,115,116,104,101,32,105,110,
-100,105,118,105,100,117,97,108,97,109,111,110,103,32,116,104,101,32,109,111,115,
-116,116,104,97,110,32,97,110,121,32,111,116,104,101,114,47,62,10,60,108,105,110,
-107,32,114,101,108,61,34,32,114,101,116,117,114,110,32,102,97,108,115,101,59,116
-,104,101,32,112,117,114,112,111,115,101,32,111,102,116,104,101,32,97,98,105,108,
-105,116,121,32,116,111,59,99,111,108,111,114,58,35,102,102,102,125,10,46,10,60,
-115,112,97,110,32,99,108,97,115,115,61,34,116,104,101,32,115,117,98,106,101,99,
-116,32,111,102,100,101,102,105,110,105,116,105,111,110,115,32,111,102,62,13,10,
-60,108,105,110,107,32,114,101,108,61,34,99,108,97,105,109,32,116,104,97,116,32,
-116,104,101,104,97,118,101,32,100,101,118,101,108,111,112,101,100,60,116,97,98,
-108,101,32,119,105,100,116,104,61,34,99,101,108,101,98,114,97,116,105,111,110,32
-,111,102,70,111,108,108,111,119,105,110,103,32,116,104,101,32,116,111,32,100,105
-,115,116,105,110,103,117,105,115,104,60,115,112,97,110,32,99,108,97,115,115,61,
-34,98,116,97,107,101,115,32,112,108,97,99,101,32,105,110,117,110,100,101,114,32,
-116,104,101,32,110,97,109,101,110,111,116,101,100,32,116,104,97,116,32,116,104,
-101,62,60,33,91,101,110,100,105,102,93,45,45,62,10,115,116,121,108,101,61,34,109
-,97,114,103,105,110,45,105,110,115,116,101,97,100,32,111,102,32,116,104,101,105,
-110,116,114,111,100,117,99,101,100,32,116,104,101,116,104,101,32,112,114,111,99,
-101,115,115,32,111,102,105,110,99,114,101,97,115,105,110,103,32,116,104,101,100,
-105,102,102,101,114,101,110,99,101,115,32,105,110,101,115,116,105,109,97,116,101
-,100,32,116,104,97,116,101,115,112,101,99,105,97,108,108,121,32,116,104,101,47,
-100,105,118,62,60,100,105,118,32,105,100,61,34,119,97,115,32,101,118,101,110,116
-,117,97,108,108,121,116,104,114,111,117,103,104,111,117,116,32,104,105,115,116,
-104,101,32,100,105,102,102,101,114,101,110,99,101,115,111,109,101,116,104,105,
-110,103,32,116,104,97,116,115,112,97,110,62,60,47,115,112,97,110,62,60,47,115,
-105,103,110,105,102,105,99,97,110,116,108,121,32,62,60,47,115,99,114,105,112,116
-,62,13,10,13,10,101,110,118,105,114,111,110,109,101,110,116,97,108,32,116,111,32
-,112,114,101,118,101,110,116,32,116,104,101,104,97,118,101,32,98,101,101,110,32,
-117,115,101,100,101,115,112,101,99,105,97,108,108,121,32,102,111,114,117,110,100
-,101,114,115,116,97,110,100,32,116,104,101,105,115,32,101,115,115,101,110,116,
-105,97,108,108,121,119,101,114,101,32,116,104,101,32,102,105,114,115,116,105,115
-,32,116,104,101,32,108,97,114,103,101,115,116,104,97,118,101,32,98,101,101,110,
-32,109,97,100,101,34,32,115,114,99,61,34,104,116,116,112,58,47,47,105,110,116,
-101,114,112,114,101,116,101,100,32,97,115,115,101,99,111,110,100,32,104,97,108,
-102,32,111,102,99,114,111,108,108,105,110,103,61,34,110,111,34,32,105,115,32,99,
-111,109,112,111,115,101,100,32,111,102,73,73,44,32,72,111,108,121,32,82,111,109,
-97,110,105,115,32,101,120,112,101,99,116,101,100,32,116,111,104,97,118,101,32,
-116,104,101,105,114,32,111,119,110,100,101,102,105,110,101,100,32,97,115,32,116,
-104,101,116,114,97,100,105,116,105,111,110,97,108,108,121,32,104,97,118,101,32,
-100,105,102,102,101,114,101,110,116,97,114,101,32,111,102,116,101,110,32,117,115
-,101,100,116,111,32,101,110,115,117,114,101,32,116,104,97,116,97,103,114,101,101
-,109,101,110,116,32,119,105,116,104,99,111,110,116,97,105,110,105,110,103,32,116
-,104,101,97,114,101,32,102,114,101,113,117,101,110,116,108,121,105,110,102,111,
-114,109,97,116,105,111,110,32,111,110,101,120,97,109,112,108,101,32,105,115,32,
-116,104,101,114,101,115,117,108,116,105,110,103,32,105,110,32,97,60,47,97,62,60,
-47,108,105,62,60,47,117,108,62,32,99,108,97,115,115,61,34,102,111,111,116,101,
-114,97,110,100,32,101,115,112,101,99,105,97,108,108,121,116,121,112,101,61,34,98
-,117,116,116,111,110,34,32,60,47,115,112,97,110,62,60,47,115,112,97,110,62,119,
-104,105,99,104,32,105,110,99,108,117,100,101,100,62,10,60,109,101,116,97,32,110,
-97,109,101,61,34,99,111,110,115,105,100,101,114,101,100,32,116,104,101,99,97,114
-,114,105,101,100,32,111,117,116,32,98,121,72,111,119,101,118,101,114,44,32,105,
-116,32,105,115,98,101,99,97,109,101,32,112,97,114,116,32,111,102,105,110,32,114,
-101,108,97,116,105,111,110,32,116,111,112,111,112,117,108,97,114,32,105,110,32,
-116,104,101,116,104,101,32,99,97,112,105,116,97,108,32,111,102,119,97,115,32,111
-,102,102,105,99,105,97,108,108,121,119,104,105,99,104,32,104,97,115,32,98,101,
-101,110,116,104,101,32,72,105,115,116,111,114,121,32,111,102,97,108,116,101,114,
-110,97,116,105,118,101,32,116,111,100,105,102,102,101,114,101,110,116,32,102,114
-,111,109,116,111,32,115,117,112,112,111,114,116,32,116,104,101,115,117,103,103,
-101,115,116,101,100,32,116,104,97,116,105,110,32,116,104,101,32,112,114,111,99,
-101,115,115,32,32,60,100,105,118,32,99,108,97,115,115,61,34,116,104,101,32,102,
-111,117,110,100,97,116,105,111,110,98,101,99,97,117,115,101,32,111,102,32,104,
-105,115,99,111,110,99,101,114,110,101,100,32,119,105,116,104,116,104,101,32,117,
-110,105,118,101,114,115,105,116,121,111,112,112,111,115,101,100,32,116,111,32,
-116,104,101,116,104,101,32,99,111,110,116,101,120,116,32,111,102,60,115,112,97,
-110,32,99,108,97,115,115,61,34,112,116,101,120,116,34,32,110,97,109,101,61,34,
-113,34,9,9,60,100,105,118,32,99,108,97,115,115,61,34,116,104,101,32,115,99,105,
-101,110,116,105,102,105,99,114,101,112,114,101,115,101,110,116,101,100,32,98,121
-,109,97,116,104,101,109,97,116,105,99,105,97,110,115,101,108,101,99,116,101,100,
-32,98,121,32,116,104,101,116,104,97,116,32,104,97,118,101,32,98,101,101,110,62,
-60,100,105,118,32,99,108,97,115,115,61,34,99,100,105,118,32,105,100,61,34,104,
-101,97,100,101,114,105,110,32,112,97,114,116,105,99,117,108,97,114,44,99,111,110
-,118,101,114,116,101,100,32,105,110,116,111,41,59,10,60,47,115,99,114,105,112,
-116,62,10,60,112,104,105,108,111,115,111,112,104,105,99,97,108,32,115,114,112,
-115,107,111,104,114,118,97,116,115,107,105,116,105,225,186,191,110,103,32,86,105
-,225,187,135,116,208,160,209,131,209,129,209,129,208,186,208,184,208,185,209,128
-,209,131,209,129,209,129,208,186,208,184,208,185,105,110,118,101,115,116,105,103
-,97,99,105,195,179,110,112,97,114,116,105,99,105,112,97,99,105,195,179,110,208,
-186,208,190,209,130,208,190,209,128,209,139,208,181,208,190,208,177,208,187,208,
-176,209,129,209,130,208,184,208,186,208,190,209,130,208,190,209,128,209,139,208,
-185,209,135,208,181,208,187,208,190,208,178,208,181,208,186,209,129,208,184,209,
-129,209,130,208,181,208,188,209,139,208,157,208,190,208,178,208,190,209,129,209,
-130,208,184,208,186,208,190,209,130,208,190,209,128,209,139,209,133,208,190,208,
-177,208,187,208,176,209,129,209,130,209,140,208,178,209,128,208,181,208,188,208,
-181,208,189,208,184,208,186,208,190,209,130,208,190,209,128,208,176,209,143,209,
-129,208,181,208,179,208,190,208,180,208,189,209,143,209,129,208,186,208,176,209,
-135,208,176,209,130,209,140,208,189,208,190,208,178,208,190,209,129,209,130,208,
-184,208,163,208,186,209,128,208,176,208,184,208,189,209,139,208,178,208,190,208,
-191,209,128,208,190,209,129,209,139,208,186,208,190,209,130,208,190,209,128,208,
-190,208,185,209,129,208,180,208,181,208,187,208,176,209,130,209,140,208,191,208,
-190,208,188,208,190,209,137,209,140,209,142,209,129,209,128,208,181,208,180,209,
-129,209,130,208,178,208,190,208,177,209,128,208,176,208,183,208,190,208,188,209,
-129,209,130,208,190,209,128,208,190,208,189,209,139,209,131,209,135,208,176,209,
-129,209,130,208,184,208,181,209,130,208,181,209,135,208,181,208,189,208,184,208,
-181,208,147,208,187,208,176,208,178,208,189,208,176,209,143,208,184,209,129,209,
-130,208,190,209,128,208,184,208,184,209,129,208,184,209,129,209,130,208,181,208,
-188,208,176,209,128,208,181,209,136,208,181,208,189,208,184,209,143,208,161,208,
-186,208,176,209,135,208,176,209,130,209,140,208,191,208,190,209,141,209,130,208,
-190,208,188,209,131,209,129,208,187,208,181,208,180,209,131,208,181,209,130,209,
-129,208,186,208,176,208,183,208,176,209,130,209,140,209,130,208,190,208,178,208,
-176,209,128,208,190,208,178,208,186,208,190,208,189,208,181,209,135,208,189,208,
-190,209,128,208,181,209,136,208,181,208,189,208,184,208,181,208,186,208,190,209,
-130,208,190,209,128,208,190,208,181,208,190,209,128,208,179,208,176,208,189,208,
-190,208,178,208,186,208,190,209,130,208,190,209,128,208,190,208,188,208,160,208,
-181,208,186,208,187,208,176,208,188,208,176,216,167,217,132,217,133,217,134,216,
-170,216,175,217,137,217,133,217,134,216,170,216,175,217,138,216,167,216,170,216,
-167,217,132,217,133,217,136,216,182,217,136,216,185,216,167,217,132,216,168,216,
-177,216,167,217,133,216,172,216,167,217,132,217,133,217,136,216,167,217,130,216,
-185,216,167,217,132,216,177,216,179,216,167,216,166,217,132,217,133,216,180,216,
-167,216,177,217,131,216,167,216,170,216,167,217,132,216,163,216,185,216,182,216,
-167,216,161,216,167,217,132,216,177,217,138,216,167,216,182,216,169,216,167,217,
-132,216,170,216,181,217,133,217,138,217,133,216,167,217,132,216,167,216,185,216,
-182,216,167,216,161,216,167,217,132,217,134,216,170,216,167,216,166,216,172,216,
-167,217,132,216,163,217,132,216,185,216,167,216,168,216,167,217,132,216,170,216,
-179,216,172,217,138,217,132,216,167,217,132,216,163,217,130,216,179,216,167,217,
-133,216,167,217,132,216,182,216,186,216,183,216,167,216,170,216,167,217,132,217,
-129,217,138,216,175,217,138,217,136,216,167,217,132,216,170,216,177,216,173,217,
-138,216,168,216,167,217,132,216,172,216,175,217,138,216,175,216,169,216,167,217,
-132,216,170,216,185,217,132,217,138,217,133,216,167,217,132,216,163,216,174,216,
-168,216,167,216,177,216,167,217,132,216,167,217,129,217,132,216,167,217,133,216,
-167,217,132,216,163,217,129,217,132,216,167,217,133,216,167,217,132,216,170,216,
-167,216,177,217,138,216,174,216,167,217,132,216,170,217,130,217,134,217,138,216,
-169,216,167,217,132,216,167,217,132,216,185,216,167,216,168,216,167,217,132,216,
-174,217,136,216,167,216,183,216,177,216,167,217,132,217,133,216,172,216,170,217,
-133,216,185,216,167,217,132,216,175,217,138,217,131,217,136,216,177,216,167,217,
-132,216,179,217,138,216,167,216,173,216,169,216,185,216,168,216,175,216,167,217,
-132,217,132,217,135,216,167,217,132,216,170,216,177,216,168,217,138,216,169,216,
-167,217,132,216,177,217,136,216,167,216,168,216,183,216,167,217,132,216,163,216,
-175,216,168,217,138,216,169,216,167,217,132,216,167,216,174,216,168,216,167,216,
-177,216,167,217,132,217,133,216,170,216,173,216,175,216,169,216,167,217,132,216,
-167,216,186,216,167,217,134,217,138,99,117,114,115,111,114,58,112,111,105,110,
-116,101,114,59,60,47,116,105,116,108,101,62,10,60,109,101,116,97,32,34,32,104,
-114,101,102,61,34,104,116,116,112,58,47,47,34,62,60,115,112,97,110,32,99,108,97,
-115,115,61,34,109,101,109,98,101,114,115,32,111,102,32,116,104,101,32,119,105,
-110,100,111,119,46,108,111,99,97,116,105,111,110,118,101,114,116,105,99,97,108,
-45,97,108,105,103,110,58,47,97,62,32,124,32,60,97,32,104,114,101,102,61,34,60,33
-,100,111,99,116,121,112,101,32,104,116,109,108,62,109,101,100,105,97,61,34,115,
-99,114,101,101,110,34,32,60,111,112,116,105,111,110,32,118,97,108,117,101,61,34,
-102,97,118,105,99,111,110,46,105,99,111,34,32,47,62,10,9,9,60,100,105,118,32,99,
-108,97,115,115,61,34,99,104,97,114,97,99,116,101,114,105,115,116,105,99,115,34,
-32,109,101,116,104,111,100,61,34,103,101,116,34,32,47,98,111,100,121,62,10,60,47
-,104,116,109,108,62,10,115,104,111,114,116,99,117,116,32,105,99,111,110,34,32,
-100,111,99,117,109,101,110,116,46,119,114,105,116,101,40,112,97,100,100,105,110,
-103,45,98,111,116,116,111,109,58,114,101,112,114,101,115,101,110,116,97,116,105,
-118,101,115,115,117,98,109,105,116,34,32,118,97,108,117,101,61,34,97,108,105,103
-,110,61,34,99,101,110,116,101,114,34,32,116,104,114,111,117,103,104,111,117,116,
-32,116,104,101,32,115,99,105,101,110,99,101,32,102,105,99,116,105,111,110,10,32,
-32,60,100,105,118,32,99,108,97,115,115,61,34,115,117,98,109,105,116,34,32,99,108
-,97,115,115,61,34,111,110,101,32,111,102,32,116,104,101,32,109,111,115,116,32,
-118,97,108,105,103,110,61,34,116,111,112,34,62,60,119,97,115,32,101,115,116,97,
-98,108,105,115,104,101,100,41,59,13,10,60,47,115,99,114,105,112,116,62,13,10,114
-,101,116,117,114,110,32,102,97,108,115,101,59,34,62,41,46,115,116,121,108,101,46
-,100,105,115,112,108,97,121,98,101,99,97,117,115,101,32,111,102,32,116,104,101,
-32,100,111,99,117,109,101,110,116,46,99,111,111,107,105,101,60,102,111,114,109,
-32,97,99,116,105,111,110,61,34,47,125,98,111,100,121,123,109,97,114,103,105,110,
-58,48,59,69,110,99,121,99,108,111,112,101,100,105,97,32,111,102,118,101,114,115,
-105,111,110,32,111,102,32,116,104,101,32,46,99,114,101,97,116,101,69,108,101,109
-,101,110,116,40,110,97,109,101,34,32,99,111,110,116,101,110,116,61,34,60,47,100,
-105,118,62,10,60,47,100,105,118,62,10,10,97,100,109,105,110,105,115,116,114,97,
-116,105,118,101,32,60,47,98,111,100,121,62,10,60,47,104,116,109,108,62,104,105,
-115,116,111,114,121,32,111,102,32,116,104,101,32,34,62,60,105,110,112,117,116,32
-,116,121,112,101,61,34,112,111,114,116,105,111,110,32,111,102,32,116,104,101,32,
-97,115,32,112,97,114,116,32,111,102,32,116,104,101,32,38,110,98,115,112,59,60,97
-,32,104,114,101,102,61,34,111,116,104,101,114,32,99,111,117,110,116,114,105,101,
-115,34,62,10,60,100,105,118,32,99,108,97,115,115,61,34,60,47,115,112,97,110,62,
-60,47,115,112,97,110,62,60,73,110,32,111,116,104,101,114,32,119,111,114,100,115,
-44,100,105,115,112,108,97,121,58,32,98,108,111,99,107,59,99,111,110,116,114,111,
-108,32,111,102,32,116,104,101,32,105,110,116,114,111,100,117,99,116,105,111,110,
-32,111,102,47,62,10,60,109,101,116,97,32,110,97,109,101,61,34,97,115,32,119,101,
-108,108,32,97,115,32,116,104,101,32,105,110,32,114,101,99,101,110,116,32,121,101
-,97,114,115,13,10,9,60,100,105,118,32,99,108,97,115,115,61,34,60,47,100,105,118,
-62,10,9,60,47,100,105,118,62,10,105,110,115,112,105,114,101,100,32,98,121,32,116
-,104,101,116,104,101,32,101,110,100,32,111,102,32,116,104,101,32,99,111,109,112,
-97,116,105,98,108,101,32,119,105,116,104,98,101,99,97,109,101,32,107,110,111,119
-,110,32,97,115,32,115,116,121,108,101,61,34,109,97,114,103,105,110,58,46,106,115
-,34,62,60,47,115,99,114,105,112,116,62,60,32,73,110,116,101,114,110,97,116,105,
-111,110,97,108,32,116,104,101,114,101,32,104,97,118,101,32,98,101,101,110,71,101
-,114,109,97,110,32,108,97,110,103,117,97,103,101,32,115,116,121,108,101,61,34,99
-,111,108,111,114,58,35,67,111,109,109,117,110,105,115,116,32,80,97,114,116,121,
-99,111,110,115,105,115,116,101,110,116,32,119,105,116,104,98,111,114,100,101,114
-,61,34,48,34,32,99,101,108,108,32,109,97,114,103,105,110,104,101,105,103,104,116
-,61,34,116,104,101,32,109,97,106,111,114,105,116,121,32,111,102,34,32,97,108,105
-,103,110,61,34,99,101,110,116,101,114,114,101,108,97,116,101,100,32,116,111,32,
-116,104,101,32,109,97,110,121,32,100,105,102,102,101,114,101,110,116,32,79,114,
-116,104,111,100,111,120,32,67,104,117,114,99,104,115,105,109,105,108,97,114,32,
-116,111,32,116,104,101,32,47,62,10,60,108,105,110,107,32,114,101,108,61,34,115,
-119,97,115,32,111,110,101,32,111,102,32,116,104,101,32,117,110,116,105,108,32,
-104,105,115,32,100,101,97,116,104,125,41,40,41,59,10,60,47,115,99,114,105,112,
-116,62,111,116,104,101,114,32,108,97,110,103,117,97,103,101,115,99,111,109,112,
-97,114,101,100,32,116,111,32,116,104,101,112,111,114,116,105,111,110,115,32,111,
-102,32,116,104,101,116,104,101,32,78,101,116,104,101,114,108,97,110,100,115,116,
-104,101,32,109,111,115,116,32,99,111,109,109,111,110,98,97,99,107,103,114,111,
-117,110,100,58,117,114,108,40,97,114,103,117,101,100,32,116,104,97,116,32,116,
-104,101,115,99,114,111,108,108,105,110,103,61,34,110,111,34,32,105,110,99,108,
-117,100,101,100,32,105,110,32,116,104,101,78,111,114,116,104,32,65,109,101,114,
-105,99,97,110,32,116,104,101,32,110,97,109,101,32,111,102,32,116,104,101,105,110
-,116,101,114,112,114,101,116,97,116,105,111,110,115,116,104,101,32,116,114,97,
-100,105,116,105,111,110,97,108,100,101,118,101,108,111,112,109,101,110,116,32,
-111,102,32,102,114,101,113,117,101,110,116,108,121,32,117,115,101,100,97,32,99,
-111,108,108,101,99,116,105,111,110,32,111,102,118,101,114,121,32,115,105,109,105
-,108,97,114,32,116,111,115,117,114,114,111,117,110,100,105,110,103,32,116,104,
-101,101,120,97,109,112,108,101,32,111,102,32,116,104,105,115,97,108,105,103,110,
-61,34,99,101,110,116,101,114,34,62,119,111,117,108,100,32,104,97,118,101,32,98,
-101,101,110,105,109,97,103,101,95,99,97,112,116,105,111,110,32,61,97,116,116,97,
-99,104,101,100,32,116,111,32,116,104,101,115,117,103,103,101,115,116,105,110,103
-,32,116,104,97,116,105,110,32,116,104,101,32,102,111,114,109,32,111,102,32,105,
-110,118,111,108,118,101,100,32,105,110,32,116,104,101,105,115,32,100,101,114,105
-,118,101,100,32,102,114,111,109,110,97,109,101,100,32,97,102,116,101,114,32,116,
-104,101,73,110,116,114,111,100,117,99,116,105,111,110,32,116,111,114,101,115,116
-,114,105,99,116,105,111,110,115,32,111,110,32,115,116,121,108,101,61,34,119,105,
-100,116,104,58,32,99,97,110,32,98,101,32,117,115,101,100,32,116,111,32,116,104,
-101,32,99,114,101,97,116,105,111,110,32,111,102,109,111,115,116,32,105,109,112,
-111,114,116,97,110,116,32,105,110,102,111,114,109,97,116,105,111,110,32,97,110,
-100,114,101,115,117,108,116,101,100,32,105,110,32,116,104,101,99,111,108,108,97,
-112,115,101,32,111,102,32,116,104,101,84,104,105,115,32,109,101,97,110,115,32,
-116,104,97,116,101,108,101,109,101,110,116,115,32,111,102,32,116,104,101,119,97,
-115,32,114,101,112,108,97,99,101,100,32,98,121,97,110,97,108,121,115,105,115,32,
-111,102,32,116,104,101,105,110,115,112,105,114,97,116,105,111,110,32,102,111,114
-,114,101,103,97,114,100,101,100,32,97,115,32,116,104,101,109,111,115,116,32,115,
-117,99,99,101,115,115,102,117,108,107,110,111,119,110,32,97,115,32,38,113,117,
-111,116,59,97,32,99,111,109,112,114,101,104,101,110,115,105,118,101,72,105,115,
-116,111,114,121,32,111,102,32,116,104,101,32,119,101,114,101,32,99,111,110,115,
-105,100,101,114,101,100,114,101,116,117,114,110,101,100,32,116,111,32,116,104,
-101,97,114,101,32,114,101,102,101,114,114,101,100,32,116,111,85,110,115,111,117,
-114,99,101,100,32,105,109,97,103,101,62,10,9,60,100,105,118,32,99,108,97,115,115
-,61,34,99,111,110,115,105,115,116,115,32,111,102,32,116,104,101,115,116,111,112,
-80,114,111,112,97,103,97,116,105,111,110,105,110,116,101,114,101,115,116,32,105,
-110,32,116,104,101,97,118,97,105,108,97,98,105,108,105,116,121,32,111,102,97,112
-,112,101,97,114,115,32,116,111,32,104,97,118,101,101,108,101,99,116,114,111,109,
-97,103,110,101,116,105,99,101,110,97,98,108,101,83,101,114,118,105,99,101,115,40
-,102,117,110,99,116,105,111,110,32,111,102,32,116,104,101,73,116,32,105,115,32,
-105,109,112,111,114,116,97,110,116,60,47,115,99,114,105,112,116,62,60,47,100,105
-,118,62,102,117,110,99,116,105,111,110,40,41,123,118,97,114,32,114,101,108,97,
-116,105,118,101,32,116,111,32,116,104,101,97,115,32,97,32,114,101,115,117,108,
-116,32,111,102,32,116,104,101,32,112,111,115,105,116,105,111,110,32,111,102,70,
-111,114,32,101,120,97,109,112,108,101,44,32,105,110,32,109,101,116,104,111,100,
-61,34,112,111,115,116,34,32,119,97,115,32,102,111,108,108,111,119,101,100,32,98,
-121,38,97,109,112,59,109,100,97,115,104,59,32,116,104,101,116,104,101,32,97,112,
-112,108,105,99,97,116,105,111,110,106,115,34,62,60,47,115,99,114,105,112,116,62,
-13,10,117,108,62,60,47,100,105,118,62,60,47,100,105,118,62,97,102,116,101,114,32
-,116,104,101,32,100,101,97,116,104,119,105,116,104,32,114,101,115,112,101,99,116
-,32,116,111,115,116,121,108,101,61,34,112,97,100,100,105,110,103,58,105,115,32,
-112,97,114,116,105,99,117,108,97,114,108,121,100,105,115,112,108,97,121,58,105,
-110,108,105,110,101,59,32,116,121,112,101,61,34,115,117,98,109,105,116,34,32,105
-,115,32,100,105,118,105,100,101,100,32,105,110,116,111,228,184,173,230,150,135,
-32,40,231,174,128,228,189,147,41,114,101,115,112,111,110,115,97,98,105,108,105,
-100,97,100,97,100,109,105,110,105,115,116,114,97,99,105,195,179,110,105,110,116,
-101,114,110,97,99,105,111,110,97,108,101,115,99,111,114,114,101,115,112,111,110,
-100,105,101,110,116,101,224,164,137,224,164,170,224,164,175,224,165,139,224,164,
-151,224,164,170,224,165,130,224,164,176,224,165,141,224,164,181,224,164,185,224,
-164,174,224,164,190,224,164,176,224,165,135,224,164,178,224,165,139,224,164,151,
-224,165,139,224,164,130,224,164,154,224,165,129,224,164,168,224,164,190,224,164,
-181,224,164,178,224,165,135,224,164,149,224,164,191,224,164,168,224,164,184,224,
-164,176,224,164,149,224,164,190,224,164,176,224,164,170,224,165,129,224,164,178,
-224,164,191,224,164,184,224,164,150,224,165,139,224,164,156,224,165,135,224,164,
-130,224,164,154,224,164,190,224,164,185,224,164,191,224,164,143,224,164,173,224,
-165,135,224,164,156,224,165,135,224,164,130,224,164,182,224,164,190,224,164,174,
-224,164,191,224,164,178,224,164,185,224,164,174,224,164,190,224,164,176,224,165,
-128,224,164,156,224,164,190,224,164,151,224,164,176,224,164,163,224,164,172,224,
-164,168,224,164,190,224,164,168,224,165,135,224,164,149,224,165,129,224,164,174,
-224,164,190,224,164,176,224,164,172,224,165,141,224,164,178,224,165,137,224,164,
-151,224,164,174,224,164,190,224,164,178,224,164,191,224,164,149,224,164,174,224,
-164,185,224,164,191,224,164,178,224,164,190,224,164,170,224,165,131,224,164,183,
-224,165,141,224,164,160,224,164,172,224,164,162,224,164,188,224,164,164,224,165,
-135,224,164,173,224,164,190,224,164,156,224,164,170,224,164,190,224,164,149,224,
-165,141,224,164,178,224,164,191,224,164,149,224,164,159,224,165,141,224,164,176,
-224,165,135,224,164,168,224,164,150,224,164,191,224,164,178,224,164,190,224,164,
-171,224,164,166,224,165,140,224,164,176,224,164,190,224,164,168,224,164,174,224,
-164,190,224,164,174,224,164,178,224,165,135,224,164,174,224,164,164,224,164,166,
-224,164,190,224,164,168,224,164,172,224,164,190,224,164,156,224,164,190,224,164,
-176,224,164,181,224,164,191,224,164,149,224,164,190,224,164,184,224,164,149,224,
-165,141,224,164,175,224,165,139,224,164,130,224,164,154,224,164,190,224,164,185,
-224,164,164,224,165,135,224,164,170,224,164,185,224,165,129,224,164,129,224,164,
-154,224,164,172,224,164,164,224,164,190,224,164,175,224,164,190,224,164,184,224,
-164,130,224,164,181,224,164,190,224,164,166,224,164,166,224,165,135,224,164,150,
-224,164,168,224,165,135,224,164,170,224,164,191,224,164,155,224,164,178,224,165,
-135,224,164,181,224,164,191,224,164,182,224,165,135,224,164,183,224,164,176,224,
-164,190,224,164,156,224,165,141,224,164,175,224,164,137,224,164,164,224,165,141,
-224,164,164,224,164,176,224,164,174,224,165,129,224,164,130,224,164,172,224,164,
-136,224,164,166,224,165,139,224,164,168,224,165,139,224,164,130,224,164,137,224,
-164,170,224,164,149,224,164,176,224,164,163,224,164,170,224,164,162,224,164,188,
-224,165,135,224,164,130,224,164,184,224,165,141,224,164,165,224,164,191,224,164,
-164,224,164,171,224,164,191,224,164,178,224,165,141,224,164,174,224,164,174,224,
-165,129,224,164,150,224,165,141,224,164,175,224,164,133,224,164,154,224,165,141,
-224,164,155,224,164,190,224,164,155,224,165,130,224,164,159,224,164,164,224,165,
-128,224,164,184,224,164,130,224,164,151,224,165,128,224,164,164,224,164,156,224,
-164,190,224,164,143,224,164,151,224,164,190,224,164,181,224,164,191,224,164,173,
-224,164,190,224,164,151,224,164,152,224,164,163,224,165,141,224,164,159,224,165,
-135,224,164,166,224,165,130,224,164,184,224,164,176,224,165,135,224,164,166,224,
-164,191,224,164,168,224,165,139,224,164,130,224,164,185,224,164,164,224,165,141,
-224,164,175,224,164,190,224,164,184,224,165,135,224,164,149,224,165,141,224,164,
-184,224,164,151,224,164,190,224,164,130,224,164,167,224,165,128,224,164,181,224,
-164,191,224,164,182,224,165,141,224,164,181,224,164,176,224,164,190,224,164,164,
-224,165,135,224,164,130,224,164,166,224,165,136,224,164,159,224,165,141,224,164,
-184,224,164,168,224,164,149,224,165,141,224,164,182,224,164,190,224,164,184,224,
-164,190,224,164,174,224,164,168,224,165,135,224,164,133,224,164,166,224,164,190,
-224,164,178,224,164,164,224,164,172,224,164,191,224,164,156,224,164,178,224,165,
-128,224,164,170,224,165,129,224,164,176,224,165,130,224,164,183,224,164,185,224,
-164,191,224,164,130,224,164,166,224,165,128,224,164,174,224,164,191,224,164,164,
-224,165,141,224,164,176,224,164,149,224,164,181,224,164,191,224,164,164,224,164,
-190,224,164,176,224,165,129,224,164,170,224,164,175,224,165,135,224,164,184,224,
-165,141,224,164,165,224,164,190,224,164,168,224,164,149,224,164,176,224,165,139,
-224,164,161,224,164,188,224,164,174,224,165,129,224,164,149,224,165,141,224,164,
-164,224,164,175,224,165,139,224,164,156,224,164,168,224,164,190,224,164,149,224,
-165,131,224,164,170,224,164,175,224,164,190,224,164,170,224,165,139,224,164,184,
-224,165,141,224,164,159,224,164,152,224,164,176,224,165,135,224,164,178,224,165,
-130,224,164,149,224,164,190,224,164,176,224,165,141,224,164,175,224,164,181,224,
-164,191,224,164,154,224,164,190,224,164,176,224,164,184,224,165,130,224,164,154,
-224,164,168,224,164,190,224,164,174,224,165,130,224,164,178,224,165,141,224,164,
-175,224,164,166,224,165,135,224,164,150,224,165,135,224,164,130,224,164,185,224,
-164,174,224,165,135,224,164,182,224,164,190,224,164,184,224,165,141,224,164,149,
-224,165,130,224,164,178,224,164,174,224,165,136,224,164,130,224,164,168,224,165,
-135,224,164,164,224,165,136,224,164,175,224,164,190,224,164,176,224,164,156,224,
-164,191,224,164,184,224,164,149,224,165,135,114,115,115,43,120,109,108,34,32,116
-,105,116,108,101,61,34,45,116,121,112,101,34,32,99,111,110,116,101,110,116,61,34
-,116,105,116,108,101,34,32,99,111,110,116,101,110,116,61,34,97,116,32,116,104,
-101,32,115,97,109,101,32,116,105,109,101,46,106,115,34,62,60,47,115,99,114,105,
-112,116,62,10,60,34,32,109,101,116,104,111,100,61,34,112,111,115,116,34,32,60,47
-,115,112,97,110,62,60,47,97,62,60,47,108,105,62,118,101,114,116,105,99,97,108,45
-,97,108,105,103,110,58,116,47,106,113,117,101,114,121,46,109,105,110,46,106,115,
-34,62,46,99,108,105,99,107,40,102,117,110,99,116,105,111,110,40,32,115,116,121,
-108,101,61,34,112,97,100,100,105,110,103,45,125,41,40,41,59,10,60,47,115,99,114,
-105,112,116,62,10,60,47,115,112,97,110,62,60,97,32,104,114,101,102,61,34,60,97,
-32,104,114,101,102,61,34,104,116,116,112,58,47,47,41,59,32,114,101,116,117,114,
-110,32,102,97,108,115,101,59,116,101,120,116,45,100,101,99,111,114,97,116,105,
-111,110,58,32,115,99,114,111,108,108,105,110,103,61,34,110,111,34,32,98,111,114,
-100,101,114,45,99,111,108,108,97,112,115,101,58,97,115,115,111,99,105,97,116,101
-,100,32,119,105,116,104,32,66,97,104,97,115,97,32,73,110,100,111,110,101,115,105
-,97,69,110,103,108,105,115,104,32,108,97,110,103,117,97,103,101,60,116,101,120,
-116,32,120,109,108,58,115,112,97,99,101,61,46,103,105,102,34,32,98,111,114,100,
-101,114,61,34,48,34,60,47,98,111,100,121,62,10,60,47,104,116,109,108,62,10,111,
-118,101,114,102,108,111,119,58,104,105,100,100,101,110,59,105,109,103,32,115,114
-,99,61,34,104,116,116,112,58,47,47,97,100,100,69,118,101,110,116,76,105,115,116,
-101,110,101,114,114,101,115,112,111,110,115,105,98,108,101,32,102,111,114,32,115
-,46,106,115,34,62,60,47,115,99,114,105,112,116,62,10,47,102,97,118,105,99,111,
-110,46,105,99,111,34,32,47,62,111,112,101,114,97,116,105,110,103,32,115,121,115,
-116,101,109,34,32,115,116,121,108,101,61,34,119,105,100,116,104,58,49,116,97,114
-,103,101,116,61,34,95,98,108,97,110,107,34,62,83,116,97,116,101,32,85,110,105,
-118,101,114,115,105,116,121,116,101,120,116,45,97,108,105,103,110,58,108,101,102
-,116,59,10,100,111,99,117,109,101,110,116,46,119,114,105,116,101,40,44,32,105,
-110,99,108,117,100,105,110,103,32,116,104,101,32,97,114,111,117,110,100,32,116,
-104,101,32,119,111,114,108,100,41,59,13,10,60,47,115,99,114,105,112,116,62,13,10
-,60,34,32,115,116,121,108,101,61,34,104,101,105,103,104,116,58,59,111,118,101,
-114,102,108,111,119,58,104,105,100,100,101,110,109,111,114,101,32,105,110,102,
-111,114,109,97,116,105,111,110,97,110,32,105,110,116,101,114,110,97,116,105,111,
-110,97,108,97,32,109,101,109,98,101,114,32,111,102,32,116,104,101,32,111,110,101
-,32,111,102,32,116,104,101,32,102,105,114,115,116,99,97,110,32,98,101,32,102,111
-,117,110,100,32,105,110,32,60,47,100,105,118,62,10,9,9,60,47,100,105,118,62,10,
-100,105,115,112,108,97,121,58,32,110,111,110,101,59,34,62,34,32,47,62,10,60,108,
-105,110,107,32,114,101,108,61,34,10,32,32,40,102,117,110,99,116,105,111,110,40,
-41,32,123,116,104,101,32,49,53,116,104,32,99,101,110,116,117,114,121,46,112,114,
-101,118,101,110,116,68,101,102,97,117,108,116,40,108,97,114,103,101,32,110,117,
-109,98,101,114,32,111,102,32,66,121,122,97,110,116,105,110,101,32,69,109,112,105
-,114,101,46,106,112,103,124,116,104,117,109,98,124,108,101,102,116,124,118,97,
-115,116,32,109,97,106,111,114,105,116,121,32,111,102,109,97,106,111,114,105,116,
-121,32,111,102,32,116,104,101,32,32,97,108,105,103,110,61,34,99,101,110,116,101,
-114,34,62,85,110,105,118,101,114,115,105,116,121,32,80,114,101,115,115,100,111,
-109,105,110,97,116,101,100,32,98,121,32,116,104,101,83,101,99,111,110,100,32,87,
-111,114,108,100,32,87,97,114,100,105,115,116,114,105,98,117,116,105,111,110,32,
-111,102,32,115,116,121,108,101,61,34,112,111,115,105,116,105,111,110,58,116,104,
-101,32,114,101,115,116,32,111,102,32,116,104,101,32,99,104,97,114,97,99,116,101,
-114,105,122,101,100,32,98,121,32,114,101,108,61,34,110,111,102,111,108,108,111,
-119,34,62,100,101,114,105,118,101,115,32,102,114,111,109,32,116,104,101,114,97,
-116,104,101,114,32,116,104,97,110,32,116,104,101,32,97,32,99,111,109,98,105,110,
-97,116,105,111,110,32,111,102,115,116,121,108,101,61,34,119,105,100,116,104,58,
-49,48,48,69,110,103,108,105,115,104,45,115,112,101,97,107,105,110,103,99,111,109
-,112,117,116,101,114,32,115,99,105,101,110,99,101,98,111,114,100,101,114,61,34,
-48,34,32,97,108,116,61,34,116,104,101,32,101,120,105,115,116,101,110,99,101,32,
-111,102,68,101,109,111,99,114,97,116,105,99,32,80,97,114,116,121,34,32,115,116,
-121,108,101,61,34,109,97,114,103,105,110,45,70,111,114,32,116,104,105,115,32,114
-,101,97,115,111,110,44,46,106,115,34,62,60,47,115,99,114,105,112,116,62,10,9,115
-,66,121,84,97,103,78,97,109,101,40,115,41,91,48,93,106,115,34,62,60,47,115,99,
-114,105,112,116,62,13,10,60,46,106,115,34,62,60,47,115,99,114,105,112,116,62,13,
-10,108,105,110,107,32,114,101,108,61,34,105,99,111,110,34,32,39,32,97,108,116,61
-,39,39,32,99,108,97,115,115,61,39,102,111,114,109,97,116,105,111,110,32,111,102,
-32,116,104,101,118,101,114,115,105,111,110,115,32,111,102,32,116,104,101,32,60,
-47,97,62,60,47,100,105,118,62,60,47,100,105,118,62,47,112,97,103,101,62,10,32,32
-,60,112,97,103,101,62,10,60,100,105,118,32,99,108,97,115,115,61,34,99,111,110,
-116,98,101,99,97,109,101,32,116,104,101,32,102,105,114,115,116,98,97,104,97,115,
-97,32,73,110,100,111,110,101,115,105,97,101,110,103,108,105,115,104,32,40,115,
-105,109,112,108,101,41,206,149,206,187,206,187,206,183,206,189,206,185,206,186,
-206,172,209,133,209,128,208,178,208,176,209,130,209,129,208,186,208,184,208,186,
-208,190,208,188,208,191,208,176,208,189,208,184,208,184,209,143,208,178,208,187,
-209,143,208,181,209,130,209,129,209,143,208,148,208,190,208,177,208,176,208,178,
-208,184,209,130,209,140,209,135,208,181,208,187,208,190,208,178,208,181,208,186,
-208,176,209,128,208,176,208,183,208,178,208,184,209,130,208,184,209,143,208,152,
-208,189,209,130,208,181,209,128,208,189,208,181,209,130,208,158,209,130,208,178,
-208,181,209,130,208,184,209,130,209,140,208,189,208,176,208,191,209,128,208,184,
-208,188,208,181,209,128,208,184,208,189,209,130,208,181,209,128,208,189,208,181,
-209,130,208,186,208,190,209,130,208,190,209,128,208,190,208,179,208,190,209,129,
-209,130,209,128,208,176,208,189,208,184,209,134,209,139,208,186,208,176,209,135,
-208,181,209,129,209,130,208,178,208,181,209,131,209,129,208,187,208,190,208,178,
-208,184,209,143,209,133,208,191,209,128,208,190,208,177,208,187,208,181,208,188,
-209,139,208,191,208,190,208,187,209,131,209,135,208,184,209,130,209,140,209,143,
-208,178,208,187,209,143,209,142,209,130,209,129,209,143,208,189,208,176,208,184,
-208,177,208,190,208,187,208,181,208,181,208,186,208,190,208,188,208,191,208,176,
-208,189,208,184,209,143,208,178,208,189,208,184,208,188,208,176,208,189,208,184,
-208,181,209,129,209,128,208,181,208,180,209,129,209,130,208,178,208,176,216,167,
-217,132,217,133,217,136,216,167,216,182,217,138,216,185,216,167,217,132,216,177,
-216,166,217,138,216,179,217,138,216,169,216,167,217,132,216,167,217,134,216,170,
-217,130,216,167,217,132,217,133,216,180,216,167,216,177,217,131,216,167,216,170,
-217,131,216,167,217,132,216,179,217,138,216,167,216,177,216,167,216,170,216,167,
-217,132,217,133,217,131,216,170,217,136,216,168,216,169,216,167,217,132,216,179,
-216,185,217,136,216,175,217,138,216,169,216,167,216,173,216,181,216,167,216,166,
-217,138,216,167,216,170,216,167,217,132,216,185,216,167,217,132,217,133,217,138,
-216,169,216,167,217,132,216,181,217,136,216,170,217,138,216,167,216,170,216,167,
-217,132,216,167,217,134,216,170,216,177,217,134,216,170,216,167,217,132,216,170,
-216,181,216,167,217,133,217,138,217,133,216,167,217,132,216,165,216,179,217,132,
-216,167,217,133,217,138,216,167,217,132,217,133,216,180,216,167,216,177,217,131,
-216,169,216,167,217,132,217,133,216,177,216,166,217,138,216,167,216,170,114,111,
-98,111,116,115,34,32,99,111,110,116,101,110,116,61,34,60,100,105,118,32,105,100,
-61,34,102,111,111,116,101,114,34,62,116,104,101,32,85,110,105,116,101,100,32,83,
-116,97,116,101,115,60,105,109,103,32,115,114,99,61,34,104,116,116,112,58,47,47,
-46,106,112,103,124,114,105,103,104,116,124,116,104,117,109,98,124,46,106,115,34,
-62,60,47,115,99,114,105,112,116,62,13,10,60,108,111,99,97,116,105,111,110,46,112
-,114,111,116,111,99,111,108,102,114,97,109,101,98,111,114,100,101,114,61,34,48,
-34,32,115,34,32,47,62,10,60,109,101,116,97,32,110,97,109,101,61,34,60,47,97,62,
-60,47,100,105,118,62,60,47,100,105,118,62,60,102,111,110,116,45,119,101,105,103,
-104,116,58,98,111,108,100,59,38,113,117,111,116,59,32,97,110,100,32,38,113,117,
-111,116,59,100,101,112,101,110,100,105,110,103,32,111,110,32,116,104,101,32,109,
-97,114,103,105,110,58,48,59,112,97,100,100,105,110,103,58,34,32,114,101,108,61,
-34,110,111,102,111,108,108,111,119,34,32,80,114,101,115,105,100,101,110,116,32,
-111,102,32,116,104,101,32,116,119,101,110,116,105,101,116,104,32,99,101,110,116,
-117,114,121,101,118,105,115,105,111,110,62,10,32,32,60,47,112,97,103,101,73,110,
-116,101,114,110,101,116,32,69,120,112,108,111,114,101,114,97,46,97,115,121,110,
-99,32,61,32,116,114,117,101,59,13,10,105,110,102,111,114,109,97,116,105,111,110,
-32,97,98,111,117,116,60,100,105,118,32,105,100,61,34,104,101,97,100,101,114,34,
-62,34,32,97,99,116,105,111,110,61,34,104,116,116,112,58,47,47,60,97,32,104,114,
-101,102,61,34,104,116,116,112,115,58,47,47,60,100,105,118,32,105,100,61,34,99,
-111,110,116,101,110,116,34,60,47,100,105,118,62,13,10,60,47,100,105,118,62,13,10
-,60,100,101,114,105,118,101,100,32,102,114,111,109,32,116,104,101,32,60,105,109,
-103,32,115,114,99,61,39,104,116,116,112,58,47,47,97,99,99,111,114,100,105,110,
-103,32,116,111,32,116,104,101,32,10,60,47,98,111,100,121,62,10,60,47,104,116,109
-,108,62,10,115,116,121,108,101,61,34,102,111,110,116,45,115,105,122,101,58,115,
-99,114,105,112,116,32,108,97,110,103,117,97,103,101,61,34,65,114,105,97,108,44,
-32,72,101,108,118,101,116,105,99,97,44,60,47,97,62,60,115,112,97,110,32,99,108,
-97,115,115,61,34,60,47,115,99,114,105,112,116,62,60,115,99,114,105,112,116,32,
-112,111,108,105,116,105,99,97,108,32,112,97,114,116,105,101,115,116,100,62,60,47
-,116,114,62,60,47,116,97,98,108,101,62,60,104,114,101,102,61,34,104,116,116,112,
-58,47,47,119,119,119,46,105,110,116,101,114,112,114,101,116,97,116,105,111,110,
-32,111,102,114,101,108,61,34,115,116,121,108,101,115,104,101,101,116,34,32,100,
-111,99,117,109,101,110,116,46,119,114,105,116,101,40,39,60,99,104,97,114,115,101
-,116,61,34,117,116,102,45,56,34,62,10,98,101,103,105,110,110,105,110,103,32,111,
-102,32,116,104,101,32,114,101,118,101,97,108,101,100,32,116,104,97,116,32,116,
-104,101,116,101,108,101,118,105,115,105,111,110,32,115,101,114,105,101,115,34,32
-,114,101,108,61,34,110,111,102,111,108,108,111,119,34,62,32,116,97,114,103,101,
-116,61,34,95,98,108,97,110,107,34,62,99,108,97,105,109,105,110,103,32,116,104,97
-,116,32,116,104,101,104,116,116,112,37,51,65,37,50,70,37,50,70,119,119,119,46,
-109,97,110,105,102,101,115,116,97,116,105,111,110,115,32,111,102,80,114,105,109,
-101,32,77,105,110,105,115,116,101,114,32,111,102,105,110,102,108,117,101,110,99,
-101,100,32,98,121,32,116,104,101,99,108,97,115,115,61,34,99,108,101,97,114,102,
-105,120,34,62,47,100,105,118,62,13,10,60,47,100,105,118,62,13,10,13,10,116,104,
-114,101,101,45,100,105,109,101,110,115,105,111,110,97,108,67,104,117,114,99,104,
-32,111,102,32,69,110,103,108,97,110,100,111,102,32,78,111,114,116,104,32,67,97,
-114,111,108,105,110,97,115,113,117,97,114,101,32,107,105,108,111,109,101,116,114
-,101,115,46,97,100,100,69,118,101,110,116,76,105,115,116,101,110,101,114,100,105
-,115,116,105,110,99,116,32,102,114,111,109,32,116,104,101,99,111,109,109,111,110
-,108,121,32,107,110,111,119,110,32,97,115,80,104,111,110,101,116,105,99,32,65,
-108,112,104,97,98,101,116,100,101,99,108,97,114,101,100,32,116,104,97,116,32,116
-,104,101,99,111,110,116,114,111,108,108,101,100,32,98,121,32,116,104,101,66,101,
-110,106,97,109,105,110,32,70,114,97,110,107,108,105,110,114,111,108,101,45,112,
-108,97,121,105,110,103,32,103,97,109,101,116,104,101,32,85,110,105,118,101,114,
-115,105,116,121,32,111,102,105,110,32,87,101,115,116,101,114,110,32,69,117,114,
-111,112,101,112,101,114,115,111,110,97,108,32,99,111,109,112,117,116,101,114,80,
-114,111,106,101,99,116,32,71,117,116,101,110,98,101,114,103,114,101,103,97,114,
-100,108,101,115,115,32,111,102,32,116,104,101,104,97,115,32,98,101,101,110,32,
-112,114,111,112,111,115,101,100,116,111,103,101,116,104,101,114,32,119,105,116,
-104,32,116,104,101,62,60,47,108,105,62,60,108,105,32,99,108,97,115,115,61,34,105
-,110,32,115,111,109,101,32,99,111,117,110,116,114,105,101,115,109,105,110,46,106
-,115,34,62,60,47,115,99,114,105,112,116,62,111,102,32,116,104,101,32,112,111,112
-,117,108,97,116,105,111,110,111,102,102,105,99,105,97,108,32,108,97,110,103,117,
-97,103,101,60,105,109,103,32,115,114,99,61,34,105,109,97,103,101,115,47,105,100,
-101,110,116,105,102,105,101,100,32,98,121,32,116,104,101,110,97,116,117,114,97,
-108,32,114,101,115,111,117,114,99,101,115,99,108,97,115,115,105,102,105,99,97,
-116,105,111,110,32,111,102,99,97,110,32,98,101,32,99,111,110,115,105,100,101,114
-,101,100,113,117,97,110,116,117,109,32,109,101,99,104,97,110,105,99,115,78,101,
-118,101,114,116,104,101,108,101,115,115,44,32,116,104,101,109,105,108,108,105,
-111,110,32,121,101,97,114,115,32,97,103,111,60,47,98,111,100,121,62,13,10,60,47,
-104,116,109,108,62,13,206,149,206,187,206,187,206,183,206,189,206,185,206,186,
-206,172,10,116,97,107,101,32,97,100,118,97,110,116,97,103,101,32,111,102,97,110,
-100,44,32,97,99,99,111,114,100,105,110,103,32,116,111,97,116,116,114,105,98,117,
-116,101,100,32,116,111,32,116,104,101,77,105,99,114,111,115,111,102,116,32,87,
-105,110,100,111,119,115,116,104,101,32,102,105,114,115,116,32,99,101,110,116,117
-,114,121,117,110,100,101,114,32,116,104,101,32,99,111,110,116,114,111,108,100,
-105,118,32,99,108,97,115,115,61,34,104,101,97,100,101,114,115,104,111,114,116,
-108,121,32,97,102,116,101,114,32,116,104,101,110,111,116,97,98,108,101,32,101,
-120,99,101,112,116,105,111,110,116,101,110,115,32,111,102,32,116,104,111,117,115
-,97,110,100,115,115,101,118,101,114,97,108,32,100,105,102,102,101,114,101,110,
-116,97,114,111,117,110,100,32,116,104,101,32,119,111,114,108,100,46,114,101,97,
-99,104,105,110,103,32,109,105,108,105,116,97,114,121,105,115,111,108,97,116,101,
-100,32,102,114,111,109,32,116,104,101,111,112,112,111,115,105,116,105,111,110,32
-,116,111,32,116,104,101,116,104,101,32,79,108,100,32,84,101,115,116,97,109,101,
-110,116,65,102,114,105,99,97,110,32,65,109,101,114,105,99,97,110,115,105,110,115
-,101,114,116,101,100,32,105,110,116,111,32,116,104,101,115,101,112,97,114,97,116
-,101,32,102,114,111,109,32,116,104,101,109,101,116,114,111,112,111,108,105,116,
-97,110,32,97,114,101,97,109,97,107,101,115,32,105,116,32,112,111,115,115,105,98,
-108,101,97,99,107,110,111,119,108,101,100,103,101,100,32,116,104,97,116,97,114,
-103,117,97,98,108,121,32,116,104,101,32,109,111,115,116,116,121,112,101,61,34,
-116,101,120,116,47,99,115,115,34,62,10,116,104,101,32,73,110,116,101,114,110,97,
-116,105,111,110,97,108,65,99,99,111,114,100,105,110,103,32,116,111,32,116,104,
-101,32,112,101,61,34,116,101,120,116,47,99,115,115,34,32,47,62,10,99,111,105,110
-,99,105,100,101,32,119,105,116,104,32,116,104,101,116,119,111,45,116,104,105,114
-,100,115,32,111,102,32,116,104,101,68,117,114,105,110,103,32,116,104,105,115,32,
-116,105,109,101,44,100,117,114,105,110,103,32,116,104,101,32,112,101,114,105,111
-,100,97,110,110,111,117,110,99,101,100,32,116,104,97,116,32,104,101,116,104,101,
-32,105,110,116,101,114,110,97,116,105,111,110,97,108,97,110,100,32,109,111,114,
-101,32,114,101,99,101,110,116,108,121,98,101,108,105,101,118,101,100,32,116,104,
-97,116,32,116,104,101,99,111,110,115,99,105,111,117,115,110,101,115,115,32,97,
-110,100,102,111,114,109,101,114,108,121,32,107,110,111,119,110,32,97,115,115,117
-,114,114,111,117,110,100,101,100,32,98,121,32,116,104,101,102,105,114,115,116,32
-,97,112,112,101,97,114,101,100,32,105,110,111,99,99,97,115,105,111,110,97,108,
-108,121,32,117,115,101,100,112,111,115,105,116,105,111,110,58,97,98,115,111,108,
-117,116,101,59,34,32,116,97,114,103,101,116,61,34,95,98,108,97,110,107,34,32,112
-,111,115,105,116,105,111,110,58,114,101,108,97,116,105,118,101,59,116,101,120,
-116,45,97,108,105,103,110,58,99,101,110,116,101,114,59,106,97,120,47,108,105,98,
-115,47,106,113,117,101,114,121,47,49,46,98,97,99,107,103,114,111,117,110,100,45,
-99,111,108,111,114,58,35,116,121,112,101,61,34,97,112,112,108,105,99,97,116,105,
-111,110,47,97,110,103,117,97,103,101,34,32,99,111,110,116,101,110,116,61,34,60,
-109,101,116,97,32,104,116,116,112,45,101,113,117,105,118,61,34,80,114,105,118,97
-,99,121,32,80,111,108,105,99,121,60,47,97,62,101,40,34,37,51,67,115,99,114,105,
-112,116,32,115,114,99,61,39,34,32,116,97,114,103,101,116,61,34,95,98,108,97,110,
-107,34,62,79,110,32,116,104,101,32,111,116,104,101,114,32,104,97,110,100,44,46,
-106,112,103,124,116,104,117,109,98,124,114,105,103,104,116,124,50,60,47,100,105,
-118,62,60,100,105,118,32,99,108,97,115,115,61,34,60,100,105,118,32,115,116,121,
-108,101,61,34,102,108,111,97,116,58,110,105,110,101,116,101,101,110,116,104,32,
-99,101,110,116,117,114,121,60,47,98,111,100,121,62,13,10,60,47,104,116,109,108,
-62,13,10,60,105,109,103,32,115,114,99,61,34,104,116,116,112,58,47,47,115,59,116,
-101,120,116,45,97,108,105,103,110,58,99,101,110,116,101,114,102,111,110,116,45,
-119,101,105,103,104,116,58,32,98,111,108,100,59,32,65,99,99,111,114,100,105,110,
-103,32,116,111,32,116,104,101,32,100,105,102,102,101,114,101,110,99,101,32,98,
-101,116,119,101,101,110,34,32,102,114,97,109,101,98,111,114,100,101,114,61,34,48
-,34,32,34,32,115,116,121,108,101,61,34,112,111,115,105,116,105,111,110,58,108,
-105,110,107,32,104,114,101,102,61,34,104,116,116,112,58,47,47,104,116,109,108,52
-,47,108,111,111,115,101,46,100,116,100,34,62,10,100,117,114,105,110,103,32,116,
-104,105,115,32,112,101,114,105,111,100,60,47,116,100,62,60,47,116,114,62,60,47,
-116,97,98,108,101,62,99,108,111,115,101,108,121,32,114,101,108,97,116,101,100,32
-,116,111,102,111,114,32,116,104,101,32,102,105,114,115,116,32,116,105,109,101,59
-,102,111,110,116,45,119,101,105,103,104,116,58,98,111,108,100,59,105,110,112,117
-,116,32,116,121,112,101,61,34,116,101,120,116,34,32,60,115,112,97,110,32,115,116
-,121,108,101,61,34,102,111,110,116,45,111,110,114,101,97,100,121,115,116,97,116,
-101,99,104,97,110,103,101,9,60,100,105,118,32,99,108,97,115,115,61,34,99,108,101
-,97,114,100,111,99,117,109,101,110,116,46,108,111,99,97,116,105,111,110,46,32,70
-,111,114,32,101,120,97,109,112,108,101,44,32,116,104,101,32,97,32,119,105,100,
-101,32,118,97,114,105,101,116,121,32,111,102,32,60,33,68,79,67,84,89,80,69,32,
-104,116,109,108,62,13,10,60,38,110,98,115,112,59,38,110,98,115,112,59,38,110,98,
-115,112,59,34,62,60,97,32,104,114,101,102,61,34,104,116,116,112,58,47,47,115,116
-,121,108,101,61,34,102,108,111,97,116,58,108,101,102,116,59,99,111,110,99,101,
-114,110,101,100,32,119,105,116,104,32,116,104,101,61,104,116,116,112,37,51,65,37
-,50,70,37,50,70,119,119,119,46,105,110,32,112,111,112,117,108,97,114,32,99,117,
-108,116,117,114,101,116,121,112,101,61,34,116,101,120,116,47,99,115,115,34,32,47
-,62,105,116,32,105,115,32,112,111,115,115,105,98,108,101,32,116,111,32,72,97,114
-,118,97,114,100,32,85,110,105,118,101,114,115,105,116,121,116,121,108,101,115,
-104,101,101,116,34,32,104,114,101,102,61,34,47,116,104,101,32,109,97,105,110,32,
-99,104,97,114,97,99,116,101,114,79,120,102,111,114,100,32,85,110,105,118,101,114
-,115,105,116,121,32,32,110,97,109,101,61,34,107,101,121,119,111,114,100,115,34,
-32,99,115,116,121,108,101,61,34,116,101,120,116,45,97,108,105,103,110,58,116,104
-,101,32,85,110,105,116,101,100,32,75,105,110,103,100,111,109,102,101,100,101,114
-,97,108,32,103,111,118,101,114,110,109,101,110,116,60,100,105,118,32,115,116,121
-,108,101,61,34,109,97,114,103,105,110,32,100,101,112,101,110,100,105,110,103,32,
-111,110,32,116,104,101,32,100,101,115,99,114,105,112,116,105,111,110,32,111,102,
-32,116,104,101,60,100,105,118,32,99,108,97,115,115,61,34,104,101,97,100,101,114,
-46,109,105,110,46,106,115,34,62,60,47,115,99,114,105,112,116,62,100,101,115,116,
-114,117,99,116,105,111,110,32,111,102,32,116,104,101,115,108,105,103,104,116,108
-,121,32,100,105,102,102,101,114,101,110,116,105,110,32,97,99,99,111,114,100,97,
-110,99,101,32,119,105,116,104,116,101,108,101,99,111,109,109,117,110,105,99,97,
-116,105,111,110,115,105,110,100,105,99,97,116,101,115,32,116,104,97,116,32,116,
-104,101,115,104,111,114,116,108,121,32,116,104,101,114,101,97,102,116,101,114,
-101,115,112,101,99,105,97,108,108,121,32,105,110,32,116,104,101,32,69,117,114,
-111,112,101,97,110,32,99,111,117,110,116,114,105,101,115,72,111,119,101,118,101,
-114,44,32,116,104,101,114,101,32,97,114,101,115,114,99,61,34,104,116,116,112,58,
-47,47,115,116,97,116,105,99,115,117,103,103,101,115,116,101,100,32,116,104,97,
-116,32,116,104,101,34,32,115,114,99,61,34,104,116,116,112,58,47,47,119,119,119,
-46,97,32,108,97,114,103,101,32,110,117,109,98,101,114,32,111,102,32,84,101,108,
-101,99,111,109,109,117,110,105,99,97,116,105,111,110,115,34,32,114,101,108,61,34
-,110,111,102,111,108,108,111,119,34,32,116,72,111,108,121,32,82,111,109,97,110,
-32,69,109,112,101,114,111,114,97,108,109,111,115,116,32,101,120,99,108,117,115,
-105,118,101,108,121,34,32,98,111,114,100,101,114,61,34,48,34,32,97,108,116,61,34
-,83,101,99,114,101,116,97,114,121,32,111,102,32,83,116,97,116,101,99,117,108,109
-,105,110,97,116,105,110,103,32,105,110,32,116,104,101,67,73,65,32,87,111,114,108
-,100,32,70,97,99,116,98,111,111,107,116,104,101,32,109,111,115,116,32,105,109,
-112,111,114,116,97,110,116,97,110,110,105,118,101,114,115,97,114,121,32,111,102,
-32,116,104,101,115,116,121,108,101,61,34,98,97,99,107,103,114,111,117,110,100,45
-,60,108,105,62,60,101,109,62,60,97,32,104,114,101,102,61,34,47,116,104,101,32,65
-,116,108,97,110,116,105,99,32,79,99,101,97,110,115,116,114,105,99,116,108,121,32
-,115,112,101,97,107,105,110,103,44,115,104,111,114,116,108,121,32,98,101,102,111
-,114,101,32,116,104,101,100,105,102,102,101,114,101,110,116,32,116,121,112,101,
-115,32,111,102,116,104,101,32,79,116,116,111,109,97,110,32,69,109,112,105,114,
-101,62,60,105,109,103,32,115,114,99,61,34,104,116,116,112,58,47,47,65,110,32,73,
-110,116,114,111,100,117,99,116,105,111,110,32,116,111,99,111,110,115,101,113,117
-,101,110,99,101,32,111,102,32,116,104,101,100,101,112,97,114,116,117,114,101,32,
-102,114,111,109,32,116,104,101,67,111,110,102,101,100,101,114,97,116,101,32,83,
-116,97,116,101,115,105,110,100,105,103,101,110,111,117,115,32,112,101,111,112,
-108,101,115,80,114,111,99,101,101,100,105,110,103,115,32,111,102,32,116,104,101,
-105,110,102,111,114,109,97,116,105,111,110,32,111,110,32,116,104,101,116,104,101
-,111,114,105,101,115,32,104,97,118,101,32,98,101,101,110,105,110,118,111,108,118
-,101,109,101,110,116,32,105,110,32,116,104,101,100,105,118,105,100,101,100,32,
-105,110,116,111,32,116,104,114,101,101,97,100,106,97,99,101,110,116,32,99,111,
-117,110,116,114,105,101,115,105,115,32,114,101,115,112,111,110,115,105,98,108,
-101,32,102,111,114,100,105,115,115,111,108,117,116,105,111,110,32,111,102,32,116
-,104,101,99,111,108,108,97,98,111,114,97,116,105,111,110,32,119,105,116,104,119,
-105,100,101,108,121,32,114,101,103,97,114,100,101,100,32,97,115,104,105,115,32,
-99,111,110,116,101,109,112,111,114,97,114,105,101,115,102,111,117,110,100,105,
-110,103,32,109,101,109,98,101,114,32,111,102,68,111,109,105,110,105,99,97,110,32
-,82,101,112,117,98,108,105,99,103,101,110,101,114,97,108,108,121,32,97,99,99,101
-,112,116,101,100,116,104,101,32,112,111,115,115,105,98,105,108,105,116,121,32,
-111,102,97,114,101,32,97,108,115,111,32,97,118,97,105,108,97,98,108,101,117,110,
-100,101,114,32,99,111,110,115,116,114,117,99,116,105,111,110,114,101,115,116,111
-,114,97,116,105,111,110,32,111,102,32,116,104,101,116,104,101,32,103,101,110,101
-,114,97,108,32,112,117,98,108,105,99,105,115,32,97,108,109,111,115,116,32,101,
-110,116,105,114,101,108,121,112,97,115,115,101,115,32,116,104,114,111,117,103,
-104,32,116,104,101,104,97,115,32,98,101,101,110,32,115,117,103,103,101,115,116,
-101,100,99,111,109,112,117,116,101,114,32,97,110,100,32,118,105,100,101,111,71,
-101,114,109,97,110,105,99,32,108,97,110,103,117,97,103,101,115,32,97,99,99,111,
-114,100,105,110,103,32,116,111,32,116,104,101,32,100,105,102,102,101,114,101,110
-,116,32,102,114,111,109,32,116,104,101,115,104,111,114,116,108,121,32,97,102,116
-,101,114,119,97,114,100,115,104,114,101,102,61,34,104,116,116,112,115,58,47,47,
-119,119,119,46,114,101,99,101,110,116,32,100,101,118,101,108,111,112,109,101,110
-,116,66,111,97,114,100,32,111,102,32,68,105,114,101,99,116,111,114,115,60,100,
-105,118,32,99,108,97,115,115,61,34,115,101,97,114,99,104,124,32,60,97,32,104,114
-,101,102,61,34,104,116,116,112,58,47,47,73,110,32,112,97,114,116,105,99,117,108,
-97,114,44,32,116,104,101,77,117,108,116,105,112,108,101,32,102,111,111,116,110,
-111,116,101,115,111,114,32,111,116,104,101,114,32,115,117,98,115,116,97,110,99,
-101,116,104,111,117,115,97,110,100,115,32,111,102,32,121,101,97,114,115,116,114,
-97,110,115,108,97,116,105,111,110,32,111,102,32,116,104,101,60,47,100,105,118,62
-,13,10,60,47,100,105,118,62,13,10,13,10,60,97,32,104,114,101,102,61,34,105,110,
-100,101,120,46,112,104,112,119,97,115,32,101,115,116,97,98,108,105,115,104,101,
-100,32,105,110,109,105,110,46,106,115,34,62,60,47,115,99,114,105,112,116,62,10,
-112,97,114,116,105,99,105,112,97,116,101,32,105,110,32,116,104,101,97,32,115,116
-,114,111,110,103,32,105,110,102,108,117,101,110,99,101,115,116,121,108,101,61,34
-,109,97,114,103,105,110,45,116,111,112,58,114,101,112,114,101,115,101,110,116,
-101,100,32,98,121,32,116,104,101,103,114,97,100,117,97,116,101,100,32,102,114,
-111,109,32,116,104,101,84,114,97,100,105,116,105,111,110,97,108,108,121,44,32,
-116,104,101,69,108,101,109,101,110,116,40,34,115,99,114,105,112,116,34,41,59,72,
-111,119,101,118,101,114,44,32,115,105,110,99,101,32,116,104,101,47,100,105,118,
-62,10,60,47,100,105,118,62,10,60,100,105,118,32,108,101,102,116,59,32,109,97,114
-,103,105,110,45,108,101,102,116,58,112,114,111,116,101,99,116,105,111,110,32,97,
-103,97,105,110,115,116,48,59,32,118,101,114,116,105,99,97,108,45,97,108,105,103,
-110,58,85,110,102,111,114,116,117,110,97,116,101,108,121,44,32,116,104,101,116,
-121,112,101,61,34,105,109,97,103,101,47,120,45,105,99,111,110,47,100,105,118,62,
-10,60,100,105,118,32,99,108,97,115,115,61,34,32,99,108,97,115,115,61,34,99,108,
-101,97,114,102,105,120,34,62,60,100,105,118,32,99,108,97,115,115,61,34,102,111,
-111,116,101,114,9,9,60,47,100,105,118,62,10,9,9,60,47,100,105,118,62,10,116,104,
-101,32,109,111,116,105,111,110,32,112,105,99,116,117,114,101,208,145,209,138,208
-,187,208,179,208,176,209,128,209,129,208,186,208,184,208,177,209,138,208,187,208
-,179,208,176,209,128,209,129,208,186,208,184,208,164,208,181,208,180,208,181,209
-,128,208,176,209,134,208,184,208,184,208,189,208,181,209,129,208,186,208,190,208
-,187,209,140,208,186,208,190,209,129,208,190,208,190,208,177,209,137,208,181,208
-,189,208,184,208,181,209,129,208,190,208,190,208,177,209,137,208,181,208,189,208
-,184,209,143,208,191,209,128,208,190,208,179,209,128,208,176,208,188,208,188,209
-,139,208,158,209,130,208,191,209,128,208,176,208,178,208,184,209,130,209,140,208
-,177,208,181,209,129,208,191,208,187,208,176,209,130,208,189,208,190,208,188,208
-,176,209,130,208,181,209,128,208,184,208,176,208,187,209,139,208,191,208,190,208
-,183,208,178,208,190,208,187,209,143,208,181,209,130,208,191,208,190,209,129,208
-,187,208,181,208,180,208,189,208,184,208,181,209,128,208,176,208,183,208,187,208
-,184,209,135,208,189,209,139,209,133,208,191,209,128,208,190,208,180,209,131,208
-,186,209,134,208,184,208,184,208,191,209,128,208,190,208,179,209,128,208,176,208
-,188,208,188,208,176,208,191,208,190,208,187,208,189,208,190,209,129,209,130,209
-,140,209,142,208,189,208,176,209,133,208,190,208,180,208,184,209,130,209,129,209
-,143,208,184,208,183,208,177,209,128,208,176,208,189,208,189,208,190,208,181,208
-,189,208,176,209,129,208,181,208,187,208,181,208,189,208,184,209,143,208,184,208
-,183,208,188,208,181,208,189,208,181,208,189,208,184,209,143,208,186,208,176,209
-,130,208,181,208,179,208,190,209,128,208,184,208,184,208,144,208,187,208,181,208
-,186,209,129,208,176,208,189,208,180,209,128,224,164,166,224,165,141,224,164,181
-,224,164,190,224,164,176,224,164,190,224,164,174,224,165,136,224,164,168,224,165
-,129,224,164,133,224,164,178,224,164,170,224,165,141,224,164,176,224,164,166,224
-,164,190,224,164,168,224,164,173,224,164,190,224,164,176,224,164,164,224,165,128
-,224,164,175,224,164,133,224,164,168,224,165,129,224,164,166,224,165,135,224,164
-,182,224,164,185,224,164,191,224,164,168,224,165,141,224,164,166,224,165,128,224
-,164,135,224,164,130,224,164,161,224,164,191,224,164,175,224,164,190,224,164,166
-,224,164,191,224,164,178,224,165,141,224,164,178,224,165,128,224,164,133,224,164
-,167,224,164,191,224,164,149,224,164,190,224,164,176,224,164,181,224,165,128,224
-,164,161,224,164,191,224,164,175,224,165,139,224,164,154,224,164,191,224,164,159
-,224,165,141,224,164,160,224,165,135,224,164,184,224,164,174,224,164,190,224,164
-,154,224,164,190,224,164,176,224,164,156,224,164,130,224,164,149,224,165,141,224
-,164,182,224,164,168,224,164,166,224,165,129,224,164,168,224,164,191,224,164,175
-,224,164,190,224,164,170,224,165,141,224,164,176,224,164,175,224,165,139,224,164
-,151,224,164,133,224,164,168,224,165,129,224,164,184,224,164,190,224,164,176,224
-,164,145,224,164,168,224,164,178,224,164,190,224,164,135,224,164,168,224,164,170
-,224,164,190,224,164,176,224,165,141,224,164,159,224,165,128,224,164,182,224,164
-,176,224,165,141,224,164,164,224,165,139,224,164,130,224,164,178,224,165,139,224
-,164,149,224,164,184,224,164,173,224,164,190,224,164,171,224,164,188,224,165,141
-,224,164,178,224,165,136,224,164,182,224,164,182,224,164,176,224,165,141,224,164
-,164,224,165,135,224,164,130,224,164,170,224,165,141,224,164,176,224,164,166,224
-,165,135,224,164,182,224,164,170,224,165,141,224,164,178,224,165,135,224,164,175
-,224,164,176,224,164,149,224,165,135,224,164,130,224,164,166,224,165,141,224,164
-,176,224,164,184,224,165,141,224,164,165,224,164,191,224,164,164,224,164,191,224
-,164,137,224,164,164,224,165,141,224,164,170,224,164,190,224,164,166,224,164,137
-,224,164,168,224,165,141,224,164,185,224,165,135,224,164,130,224,164,154,224,164
-,191,224,164,159,224,165,141,224,164,160,224,164,190,224,164,175,224,164,190,224
-,164,164,224,165,141,224,164,176,224,164,190,224,164,156,224,165,141,224,164,175
-,224,164,190,224,164,166,224,164,190,224,164,170,224,165,129,224,164,176,224,164
-,190,224,164,168,224,165,135,224,164,156,224,165,139,224,164,161,224,164,188,224
-,165,135,224,164,130,224,164,133,224,164,168,224,165,129,224,164,181,224,164,190
-,224,164,166,224,164,182,224,165,141,224,164,176,224,165,135,224,164,163,224,165
-,128,224,164,182,224,164,191,224,164,149,224,165,141,224,164,183,224,164,190,224
-,164,184,224,164,176,224,164,149,224,164,190,224,164,176,224,165,128,224,164,184
-,224,164,130,224,164,151,224,165,141,224,164,176,224,164,185,224,164,170,224,164
-,176,224,164,191,224,164,163,224,164,190,224,164,174,224,164,172,224,165,141,224
-,164,176,224,164,190,224,164,130,224,164,161,224,164,172,224,164,154,224,165,141
-,224,164,154,224,165,139,224,164,130,224,164,137,224,164,170,224,164,178,224,164
-,172,224,165,141,224,164,167,224,164,174,224,164,130,224,164,164,224,165,141,224
-,164,176,224,165,128,224,164,184,224,164,130,224,164,170,224,164,176,224,165,141
-,224,164,149,224,164,137,224,164,174,224,165,141,224,164,174,224,165,128,224,164
-,166,224,164,174,224,164,190,224,164,167,224,165,141,224,164,175,224,164,174,224
-,164,184,224,164,185,224,164,190,224,164,175,224,164,164,224,164,190,224,164,182
-,224,164,172,224,165,141,224,164,166,224,165,139,224,164,130,224,164,174,224,165
-,128,224,164,161,224,164,191,224,164,175,224,164,190,224,164,134,224,164,136,224
-,164,170,224,165,128,224,164,143,224,164,178,224,164,174,224,165,139,224,164,172
-,224,164,190,224,164,135,224,164,178,224,164,184,224,164,130,224,164,150,224,165
-,141,224,164,175,224,164,190,224,164,134,224,164,170,224,164,176,224,165,135,224
-,164,182,224,164,168,224,164,133,224,164,168,224,165,129,224,164,172,224,164,130
-,224,164,167,224,164,172,224,164,190,224,164,156,224,164,188,224,164,190,224,164
-,176,224,164,168,224,164,181,224,165,128,224,164,168,224,164,164,224,164,174,224
-,164,170,224,165,141,224,164,176,224,164,174,224,165,129,224,164,150,224,164,170
-,224,165,141,224,164,176,224,164,182,224,165,141,224,164,168,224,164,170,224,164
-,176,224,164,191,224,164,181,224,164,190,224,164,176,224,164,168,224,165,129,224
-,164,149,224,164,184,224,164,190,224,164,168,224,164,184,224,164,174,224,164,176
-,224,165,141,224,164,165,224,164,168,224,164,134,224,164,175,224,165,139,224,164
-,156,224,164,191,224,164,164,224,164,184,224,165,139,224,164,174,224,164,181,224
-,164,190,224,164,176,216,167,217,132,217,133,216,180,216,167,216,177,217,131,216
-,167,216,170,216,167,217,132,217,133,217,134,216,170,216,175,217,138,216,167,216
-,170,216,167,217,132,217,131,217,133,216,168,217,138,217,136,216,170,216,177,216
-,167,217,132,217,133,216,180,216,167,217,135,216,175,216,167,216,170,216,185,216
-,175,216,175,216,167,217,132,216,178,217,136,216,167,216,177,216,185,216,175,216
-,175,216,167,217,132,216,177,216,175,217,136,216,175,216,167,217,132,216,165,216
-,179,217,132,216,167,217,133,217,138,216,169,216,167,217,132,217,129,217,136,216
-,170,217,136,216,180,217,136,216,168,216,167,217,132,217,133,216,179,216,167,216
-,168,217,130,216,167,216,170,216,167,217,132,217,133,216,185,217,132,217,136,217
-,133,216,167,216,170,216,167,217,132,217,133,216,179,217,132,216,179,217,132,216
-,167,216,170,216,167,217,132,216,172,216,177,216,167,217,129,217,138,217,131,216
-,179,216,167,217,132,216,167,216,179,217,132,216,167,217,133,217,138,216,169,216
-,167,217,132,216,167,216,170,216,181,216,167,217,132,216,167,216,170,107,101,121
-,119,111,114,100,115,34,32,99,111,110,116,101,110,116,61,34,119,51,46,111,114,
-103,47,49,57,57,57,47,120,104,116,109,108,34,62,60,97,32,116,97,114,103,101,116,
-61,34,95,98,108,97,110,107,34,32,116,101,120,116,47,104,116,109,108,59,32,99,104
-,97,114,115,101,116,61,34,32,116,97,114,103,101,116,61,34,95,98,108,97,110,107,
-34,62,60,116,97,98,108,101,32,99,101,108,108,112,97,100,100,105,110,103,61,34,97
-,117,116,111,99,111,109,112,108,101,116,101,61,34,111,102,102,34,32,116,101,120,
-116,45,97,108,105,103,110,58,32,99,101,110,116,101,114,59,116,111,32,108,97,115,
-116,32,118,101,114,115,105,111,110,32,98,121,32,98,97,99,107,103,114,111,117,110
-,100,45,99,111,108,111,114,58,32,35,34,32,104,114,101,102,61,34,104,116,116,112,
-58,47,47,119,119,119,46,47,100,105,118,62,60,47,100,105,118,62,60,100,105,118,32
-,105,100,61,60,97,32,104,114,101,102,61,34,35,34,32,99,108,97,115,115,61,34,34,
-62,60,105,109,103,32,115,114,99,61,34,104,116,116,112,58,47,47,99,114,105,112,
-116,34,32,115,114,99,61,34,104,116,116,112,58,47,47,10,60,115,99,114,105,112,116
-,32,108,97,110,103,117,97,103,101,61,34,47,47,69,78,34,32,34,104,116,116,112,58,
-47,47,119,119,119,46,119,101,110,99,111,100,101,85,82,73,67,111,109,112,111,110,
-101,110,116,40,34,32,104,114,101,102,61,34,106,97,118,97,115,99,114,105,112,116,
-58,60,100,105,118,32,99,108,97,115,115,61,34,99,111,110,116,101,110,116,100,111,
-99,117,109,101,110,116,46,119,114,105,116,101,40,39,60,115,99,112,111,115,105,
-116,105,111,110,58,32,97,98,115,111,108,117,116,101,59,115,99,114,105,112,116,32
-,115,114,99,61,34,104,116,116,112,58,47,47,32,115,116,121,108,101,61,34,109,97,
-114,103,105,110,45,116,111,112,58,46,109,105,110,46,106,115,34,62,60,47,115,99,
-114,105,112,116,62,10,60,47,100,105,118,62,10,60,100,105,118,32,99,108,97,115,
-115,61,34,119,51,46,111,114,103,47,49,57,57,57,47,120,104,116,109,108,34,32,10,
-13,10,60,47,98,111,100,121,62,13,10,60,47,104,116,109,108,62,100,105,115,116,105
-,110,99,116,105,111,110,32,98,101,116,119,101,101,110,47,34,32,116,97,114,103,
-101,116,61,34,95,98,108,97,110,107,34,62,60,108,105,110,107,32,104,114,101,102,
-61,34,104,116,116,112,58,47,47,101,110,99,111,100,105,110,103,61,34,117,116,102,
-45,56,34,63,62,10,119,46,97,100,100,69,118,101,110,116,76,105,115,116,101,110,
-101,114,63,97,99,116,105,111,110,61,34,104,116,116,112,58,47,47,119,119,119,46,
-105,99,111,110,34,32,104,114,101,102,61,34,104,116,116,112,58,47,47,32,115,116,
-121,108,101,61,34,98,97,99,107,103,114,111,117,110,100,58,116,121,112,101,61,34,
-116,101,120,116,47,99,115,115,34,32,47,62,10,109,101,116,97,32,112,114,111,112,
-101,114,116,121,61,34,111,103,58,116,60,105,110,112,117,116,32,116,121,112,101,
-61,34,116,101,120,116,34,32,32,115,116,121,108,101,61,34,116,101,120,116,45,97,
-108,105,103,110,58,116,104,101,32,100,101,118,101,108,111,112,109,101,110,116,32
-,111,102,32,116,121,108,101,115,104,101,101,116,34,32,116,121,112,101,61,34,116,
-101,104,116,109,108,59,32,99,104,97,114,115,101,116,61,117,116,102,45,56,105,115
-,32,99,111,110,115,105,100,101,114,101,100,32,116,111,32,98,101,116,97,98,108,
-101,32,119,105,100,116,104,61,34,49,48,48,37,34,32,73,110,32,97,100,100,105,116,
-105,111,110,32,116,111,32,116,104,101,32,99,111,110,116,114,105,98,117,116,101,
-100,32,116,111,32,116,104,101,32,100,105,102,102,101,114,101,110,99,101,115,32,
-98,101,116,119,101,101,110,100,101,118,101,108,111,112,109,101,110,116,32,111,
-102,32,116,104,101,32,73,116,32,105,115,32,105,109,112,111,114,116,97,110,116,32
-,116,111,32,60,47,115,99,114,105,112,116,62,10,10,60,115,99,114,105,112,116,32,
-32,115,116,121,108,101,61,34,102,111,110,116,45,115,105,122,101,58,49,62,60,47,
-115,112,97,110,62,60,115,112,97,110,32,105,100,61,103,98,76,105,98,114,97,114,
-121,32,111,102,32,67,111,110,103,114,101,115,115,60,105,109,103,32,115,114,99,61
-,34,104,116,116,112,58,47,47,105,109,69,110,103,108,105,115,104,32,116,114,97,
-110,115,108,97,116,105,111,110,65,99,97,100,101,109,121,32,111,102,32,83,99,105,
-101,110,99,101,115,100,105,118,32,115,116,121,108,101,61,34,100,105,115,112,108,
-97,121,58,99,111,110,115,116,114,117,99,116,105,111,110,32,111,102,32,116,104,
-101,46,103,101,116,69,108,101,109,101,110,116,66,121,73,100,40,105,100,41,105,
-110,32,99,111,110,106,117,110,99,116,105,111,110,32,119,105,116,104,69,108,101,
-109,101,110,116,40,39,115,99,114,105,112,116,39,41,59,32,60,109,101,116,97,32,
-112,114,111,112,101,114,116,121,61,34,111,103,58,208,145,209,138,208,187,208,179
-,208,176,209,128,209,129,208,186,208,184,10,32,116,121,112,101,61,34,116,101,120
-,116,34,32,110,97,109,101,61,34,62,80,114,105,118,97,99,121,32,80,111,108,105,99
-,121,60,47,97,62,97,100,109,105,110,105,115,116,101,114,101,100,32,98,121,32,116
-,104,101,101,110,97,98,108,101,83,105,110,103,108,101,82,101,113,117,101,115,116
-,115,116,121,108,101,61,38,113,117,111,116,59,109,97,114,103,105,110,58,60,47,
-100,105,118,62,60,47,100,105,118,62,60,47,100,105,118,62,60,62,60,105,109,103,32
-,115,114,99,61,34,104,116,116,112,58,47,47,105,32,115,116,121,108,101,61,38,113,
-117,111,116,59,102,108,111,97,116,58,114,101,102,101,114,114,101,100,32,116,111,
-32,97,115,32,116,104,101,32,116,111,116,97,108,32,112,111,112,117,108,97,116,105
-,111,110,32,111,102,105,110,32,87,97,115,104,105,110,103,116,111,110,44,32,68,46
-,67,46,32,115,116,121,108,101,61,34,98,97,99,107,103,114,111,117,110,100,45,97,
-109,111,110,103,32,111,116,104,101,114,32,116,104,105,110,103,115,44,111,114,103
-,97,110,105,122,97,116,105,111,110,32,111,102,32,116,104,101,112,97,114,116,105,
-99,105,112,97,116,101,100,32,105,110,32,116,104,101,116,104,101,32,105,110,116,
-114,111,100,117,99,116,105,111,110,32,111,102,105,100,101,110,116,105,102,105,
-101,100,32,119,105,116,104,32,116,104,101,102,105,99,116,105,111,110,97,108,32,
-99,104,97,114,97,99,116,101,114,32,79,120,102,111,114,100,32,85,110,105,118,101,
-114,115,105,116,121,32,109,105,115,117,110,100,101,114,115,116,97,110,100,105,
-110,103,32,111,102,84,104,101,114,101,32,97,114,101,44,32,104,111,119,101,118,
-101,114,44,115,116,121,108,101,115,104,101,101,116,34,32,104,114,101,102,61,34,
-47,67,111,108,117,109,98,105,97,32,85,110,105,118,101,114,115,105,116,121,101,
-120,112,97,110,100,101,100,32,116,111,32,105,110,99,108,117,100,101,117,115,117,
-97,108,108,121,32,114,101,102,101,114,114,101,100,32,116,111,105,110,100,105,99,
-97,116,105,110,103,32,116,104,97,116,32,116,104,101,104,97,118,101,32,115,117,
-103,103,101,115,116,101,100,32,116,104,97,116,97,102,102,105,108,105,97,116,101,
-100,32,119,105,116,104,32,116,104,101,99,111,114,114,101,108,97,116,105,111,110,
-32,98,101,116,119,101,101,110,110,117,109,98,101,114,32,111,102,32,100,105,102,
-102,101,114,101,110,116,62,60,47,116,100,62,60,47,116,114,62,60,47,116,97,98,108
-,101,62,82,101,112,117,98,108,105,99,32,111,102,32,73,114,101,108,97,110,100,10,
-60,47,115,99,114,105,112,116,62,10,60,115,99,114,105,112,116,32,117,110,100,101,
-114,32,116,104,101,32,105,110,102,108,117,101,110,99,101,99,111,110,116,114,105,
-98,117,116,105,111,110,32,116,111,32,116,104,101,79,102,102,105,99,105,97,108,32
-,119,101,98,115,105,116,101,32,111,102,104,101,97,100,113,117,97,114,116,101,114
-,115,32,111,102,32,116,104,101,99,101,110,116,101,114,101,100,32,97,114,111,117,
-110,100,32,116,104,101,105,109,112,108,105,99,97,116,105,111,110,115,32,111,102,
-32,116,104,101,104,97,118,101,32,98,101,101,110,32,100,101,118,101,108,111,112,
-101,100,70,101,100,101,114,97,108,32,82,101,112,117,98,108,105,99,32,111,102,98,
-101,99,97,109,101,32,105,110,99,114,101,97,115,105,110,103,108,121,99,111,110,
-116,105,110,117,97,116,105,111,110,32,111,102,32,116,104,101,78,111,116,101,44,
-32,104,111,119,101,118,101,114,44,32,116,104,97,116,115,105,109,105,108,97,114,
-32,116,111,32,116,104,97,116,32,111,102,32,99,97,112,97,98,105,108,105,116,105,
-101,115,32,111,102,32,116,104,101,97,99,99,111,114,100,97,110,99,101,32,119,105,
-116,104,32,116,104,101,112,97,114,116,105,99,105,112,97,110,116,115,32,105,110,
-32,116,104,101,102,117,114,116,104,101,114,32,100,101,118,101,108,111,112,109,
-101,110,116,117,110,100,101,114,32,116,104,101,32,100,105,114,101,99,116,105,111
-,110,105,115,32,111,102,116,101,110,32,99,111,110,115,105,100,101,114,101,100,
-104,105,115,32,121,111,117,110,103,101,114,32,98,114,111,116,104,101,114,60,47,
-116,100,62,60,47,116,114,62,60,47,116,97,98,108,101,62,60,97,32,104,116,116,112,
-45,101,113,117,105,118,61,34,88,45,85,65,45,112,104,121,115,105,99,97,108,32,112
-,114,111,112,101,114,116,105,101,115,111,102,32,66,114,105,116,105,115,104,32,67
-,111,108,117,109,98,105,97,104,97,115,32,98,101,101,110,32,99,114,105,116,105,99
-,105,122,101,100,40,119,105,116,104,32,116,104,101,32,101,120,99,101,112,116,105
-,111,110,113,117,101,115,116,105,111,110,115,32,97,98,111,117,116,32,116,104,101
-,112,97,115,115,105,110,103,32,116,104,114,111,117,103,104,32,116,104,101,48,34,
-32,99,101,108,108,112,97,100,100,105,110,103,61,34,48,34,32,116,104,111,117,115,
-97,110,100,115,32,111,102,32,112,101,111,112,108,101,114,101,100,105,114,101,99,
-116,115,32,104,101,114,101,46,32,70,111,114,104,97,118,101,32,99,104,105,108,100
-,114,101,110,32,117,110,100,101,114,37,51,69,37,51,67,47,115,99,114,105,112,116,
-37,51,69,34,41,41,59,60,97,32,104,114,101,102,61,34,104,116,116,112,58,47,47,119
-,119,119,46,60,108,105,62,60,97,32,104,114,101,102,61,34,104,116,116,112,58,47,
-47,115,105,116,101,95,110,97,109,101,34,32,99,111,110,116,101,110,116,61,34,116,
-101,120,116,45,100,101,99,111,114,97,116,105,111,110,58,110,111,110,101,115,116,
-121,108,101,61,34,100,105,115,112,108,97,121,58,32,110,111,110,101,60,109,101,
-116,97,32,104,116,116,112,45,101,113,117,105,118,61,34,88,45,110,101,119,32,68,
-97,116,101,40,41,46,103,101,116,84,105,109,101,40,41,32,116,121,112,101,61,34,
-105,109,97,103,101,47,120,45,105,99,111,110,34,60,47,115,112,97,110,62,60,115,
-112,97,110,32,99,108,97,115,115,61,34,108,97,110,103,117,97,103,101,61,34,106,97
-,118,97,115,99,114,105,112,116,119,105,110,100,111,119,46,108,111,99,97,116,105,
-111,110,46,104,114,101,102,60,97,32,104,114,101,102,61,34,106,97,118,97,115,99,
-114,105,112,116,58,45,45,62,13,10,60,115,99,114,105,112,116,32,116,121,112,101,
-61,34,116,60,97,32,104,114,101,102,61,39,104,116,116,112,58,47,47,119,119,119,46
-,104,111,114,116,99,117,116,32,105,99,111,110,34,32,104,114,101,102,61,34,60,47,
-100,105,118,62,13,10,60,100,105,118,32,99,108,97,115,115,61,34,60,115,99,114,105
-,112,116,32,115,114,99,61,34,104,116,116,112,58,47,47,34,32,114,101,108,61,34,
-115,116,121,108,101,115,104,101,101,116,34,32,116,60,47,100,105,118,62,10,60,115
-,99,114,105,112,116,32,116,121,112,101,61,47,97,62,32,60,97,32,104,114,101,102,
-61,34,104,116,116,112,58,47,47,32,97,108,108,111,119,84,114,97,110,115,112,97,
-114,101,110,99,121,61,34,88,45,85,65,45,67,111,109,112,97,116,105,98,108,101,34,
-32,99,111,110,114,101,108,97,116,105,111,110,115,104,105,112,32,98,101,116,119,
-101,101,110,10,60,47,115,99,114,105,112,116,62,13,10,60,115,99,114,105,112,116,
-32,60,47,97,62,60,47,108,105,62,60,47,117,108,62,60,47,100,105,118,62,97,115,115
-,111,99,105,97,116,101,100,32,119,105,116,104,32,116,104,101,32,112,114,111,103,
-114,97,109,109,105,110,103,32,108,97,110,103,117,97,103,101,60,47,97,62,60,97,32
-,104,114,101,102,61,34,104,116,116,112,58,47,47,60,47,97,62,60,47,108,105,62,60,
-108,105,32,99,108,97,115,115,61,34,102,111,114,109,32,97,99,116,105,111,110,61,
-34,104,116,116,112,58,47,47,60,100,105,118,32,115,116,121,108,101,61,34,100,105,
-115,112,108,97,121,58,116,121,112,101,61,34,116,101,120,116,34,32,110,97,109,101
-,61,34,113,34,60,116,97,98,108,101,32,119,105,100,116,104,61,34,49,48,48,37,34,
-32,98,97,99,107,103,114,111,117,110,100,45,112,111,115,105,116,105,111,110,58,34
-,32,98,111,114,100,101,114,61,34,48,34,32,119,105,100,116,104,61,34,114,101,108,
-61,34,115,104,111,114,116,99,117,116,32,105,99,111,110,34,32,104,54,62,60,117,
-108,62,60,108,105,62,60,97,32,104,114,101,102,61,34,32,32,60,109,101,116,97,32,
-104,116,116,112,45,101,113,117,105,118,61,34,99,115,115,34,32,109,101,100,105,97
-,61,34,115,99,114,101,101,110,34,32,114,101,115,112,111,110,115,105,98,108,101,
-32,102,111,114,32,116,104,101,32,34,32,116,121,112,101,61,34,97,112,112,108,105,
-99,97,116,105,111,110,47,34,32,115,116,121,108,101,61,34,98,97,99,107,103,114,
-111,117,110,100,45,104,116,109,108,59,32,99,104,97,114,115,101,116,61,117,116,
-102,45,56,34,32,97,108,108,111,119,116,114,97,110,115,112,97,114,101,110,99,121,
-61,34,115,116,121,108,101,115,104,101,101,116,34,32,116,121,112,101,61,34,116,
-101,13,10,60,109,101,116,97,32,104,116,116,112,45,101,113,117,105,118,61,34,62,
-60,47,115,112,97,110,62,60,115,112,97,110,32,99,108,97,115,115,61,34,48,34,32,99
-,101,108,108,115,112,97,99,105,110,103,61,34,48,34,62,59,10,60,47,115,99,114,105
-,112,116,62,10,60,115,99,114,105,112,116,32,115,111,109,101,116,105,109,101,115,
-32,99,97,108,108,101,100,32,116,104,101,100,111,101,115,32,110,111,116,32,110,
-101,99,101,115,115,97,114,105,108,121,70,111,114,32,109,111,114,101,32,105,110,
-102,111,114,109,97,116,105,111,110,97,116,32,116,104,101,32,98,101,103,105,110,
-110,105,110,103,32,111,102,32,60,33,68,79,67,84,89,80,69,32,104,116,109,108,62,
-60,104,116,109,108,112,97,114,116,105,99,117,108,97,114,108,121,32,105,110,32,
-116,104,101,32,116,121,112,101,61,34,104,105,100,100,101,110,34,32,110,97,109,
-101,61,34,106,97,118,97,115,99,114,105,112,116,58,118,111,105,100,40,48,41,59,34
-,101,102,102,101,99,116,105,118,101,110,101,115,115,32,111,102,32,116,104,101,32
-,97,117,116,111,99,111,109,112,108,101,116,101,61,34,111,102,102,34,32,103,101,
-110,101,114,97,108,108,121,32,99,111,110,115,105,100,101,114,101,100,62,60,105,
-110,112,117,116,32,116,121,112,101,61,34,116,101,120,116,34,32,34,62,60,47,115,
-99,114,105,112,116,62,13,10,60,115,99,114,105,112,116,116,104,114,111,117,103,
-104,111,117,116,32,116,104,101,32,119,111,114,108,100,99,111,109,109,111,110,32,
-109,105,115,99,111,110,99,101,112,116,105,111,110,97,115,115,111,99,105,97,116,
-105,111,110,32,119,105,116,104,32,116,104,101,60,47,100,105,118,62,10,60,47,100,
-105,118,62,10,60,100,105,118,32,99,100,117,114,105,110,103,32,104,105,115,32,108
-,105,102,101,116,105,109,101,44,99,111,114,114,101,115,112,111,110,100,105,110,
-103,32,116,111,32,116,104,101,116,121,112,101,61,34,105,109,97,103,101,47,120,45
-,105,99,111,110,34,32,97,110,32,105,110,99,114,101,97,115,105,110,103,32,110,117
-,109,98,101,114,100,105,112,108,111,109,97,116,105,99,32,114,101,108,97,116,105,
-111,110,115,97,114,101,32,111,102,116,101,110,32,99,111,110,115,105,100,101,114,
-101,100,109,101,116,97,32,99,104,97,114,115,101,116,61,34,117,116,102,45,56,34,
-32,60,105,110,112,117,116,32,116,121,112,101,61,34,116,101,120,116,34,32,101,120
-,97,109,112,108,101,115,32,105,110,99,108,117,100,101,32,116,104,101,34,62,60,
-105,109,103,32,115,114,99,61,34,104,116,116,112,58,47,47,105,112,97,114,116,105,
-99,105,112,97,116,105,111,110,32,105,110,32,116,104,101,116,104,101,32,101,115,
-116,97,98,108,105,115,104,109,101,110,116,32,111,102,10,60,47,100,105,118,62,10,
-60,100,105,118,32,99,108,97,115,115,61,34,38,97,109,112,59,110,98,115,112,59,38,
-97,109,112,59,110,98,115,112,59,116,111,32,100,101,116,101,114,109,105,110,101,
-32,119,104,101,116,104,101,114,113,117,105,116,101,32,100,105,102,102,101,114,
-101,110,116,32,102,114,111,109,109,97,114,107,101,100,32,116,104,101,32,98,101,
-103,105,110,110,105,110,103,100,105,115,116,97,110,99,101,32,98,101,116,119,101,
-101,110,32,116,104,101,99,111,110,116,114,105,98,117,116,105,111,110,115,32,116,
-111,32,116,104,101,99,111,110,102,108,105,99,116,32,98,101,116,119,101,101,110,
-32,116,104,101,119,105,100,101,108,121,32,99,111,110,115,105,100,101,114,101,100
-,32,116,111,119,97,115,32,111,110,101,32,111,102,32,116,104,101,32,102,105,114,
-115,116,119,105,116,104,32,118,97,114,121,105,110,103,32,100,101,103,114,101,101
-,115,104,97,118,101,32,115,112,101,99,117,108,97,116,101,100,32,116,104,97,116,
-40,100,111,99,117,109,101,110,116,46,103,101,116,69,108,101,109,101,110,116,112,
-97,114,116,105,99,105,112,97,116,105,110,103,32,105,110,32,116,104,101,111,114,
-105,103,105,110,97,108,108,121,32,100,101,118,101,108,111,112,101,100,101,116,97
-,32,99,104,97,114,115,101,116,61,34,117,116,102,45,56,34,62,32,116,121,112,101,
-61,34,116,101,120,116,47,99,115,115,34,32,47,62,10,105,110,116,101,114,99,104,97
-,110,103,101,97,98,108,121,32,119,105,116,104,109,111,114,101,32,99,108,111,115,
-101,108,121,32,114,101,108,97,116,101,100,115,111,99,105,97,108,32,97,110,100,32
-,112,111,108,105,116,105,99,97,108,116,104,97,116,32,119,111,117,108,100,32,111,
-116,104,101,114,119,105,115,101,112,101,114,112,101,110,100,105,99,117,108,97,
-114,32,116,111,32,116,104,101,115,116,121,108,101,32,116,121,112,101,61,34,116,
-101,120,116,47,99,115,115,116,121,112,101,61,34,115,117,98,109,105,116,34,32,110
-,97,109,101,61,34,102,97,109,105,108,105,101,115,32,114,101,115,105,100,105,110,
-103,32,105,110,100,101,118,101,108,111,112,105,110,103,32,99,111,117,110,116,114
-,105,101,115,99,111,109,112,117,116,101,114,32,112,114,111,103,114,97,109,109,
-105,110,103,101,99,111,110,111,109,105,99,32,100,101,118,101,108,111,112,109,101
-,110,116,100,101,116,101,114,109,105,110,97,116,105,111,110,32,111,102,32,116,
-104,101,102,111,114,32,109,111,114,101,32,105,110,102,111,114,109,97,116,105,111
-,110,111,110,32,115,101,118,101,114,97,108,32,111,99,99,97,115,105,111,110,115,
-112,111,114,116,117,103,117,195,170,115,32,40,69,117,114,111,112,101,117,41,208,
-163,208,186,209,128,208,176,209,151,208,189,209,129,209,140,208,186,208,176,209,
-131,208,186,209,128,208,176,209,151,208,189,209,129,209,140,208,186,208,176,208,
-160,208,190,209,129,209,129,208,184,208,185,209,129,208,186,208,190,208,185,208,
-188,208,176,209,130,208,181,209,128,208,184,208,176,208,187,208,190,208,178,208,
-184,208,189,209,132,208,190,209,128,208,188,208,176,209,134,208,184,208,184,209,
-131,208,191,209,128,208,176,208,178,208,187,208,181,208,189,208,184,209,143,208,
-189,208,181,208,190,208,177,209,133,208,190,208,180,208,184,208,188,208,190,208,
-184,208,189,209,132,208,190,209,128,208,188,208,176,209,134,208,184,209,143,208,
-152,208,189,209,132,208,190,209,128,208,188,208,176,209,134,208,184,209,143,208,
-160,208,181,209,129,208,191,209,131,208,177,208,187,208,184,208,186,208,184,208,
-186,208,190,208,187,208,184,209,135,208,181,209,129,209,130,208,178,208,190,208,
-184,208,189,209,132,208,190,209,128,208,188,208,176,209,134,208,184,209,142,209,
-130,208,181,209,128,209,128,208,184,209,130,208,190,209,128,208,184,208,184,208,
-180,208,190,209,129,209,130,208,176,209,130,208,190,209,135,208,189,208,190,216,
-167,217,132,217,133,216,170,217,136,216,167,216,172,216,175,217,136,217,134,216,
-167,217,132,216,167,216,180,216,170,216,177,216,167,217,131,216,167,216,170,216,
-167,217,132,216,167,217,130,216,170,216,177,216,167,216,173,216,167,216,170,104,
-116,109,108,59,32,99,104,97,114,115,101,116,61,85,84,70,45,56,34,32,115,101,116,
-84,105,109,101,111,117,116,40,102,117,110,99,116,105,111,110,40,41,100,105,115,
-112,108,97,121,58,105,110,108,105,110,101,45,98,108,111,99,107,59,60,105,110,112
-,117,116,32,116,121,112,101,61,34,115,117,98,109,105,116,34,32,116,121,112,101,
-32,61,32,39,116,101,120,116,47,106,97,118,97,115,99,114,105,60,105,109,103,32,
-115,114,99,61,34,104,116,116,112,58,47,47,119,119,119,46,34,32,34,104,116,116,
-112,58,47,47,119,119,119,46,119,51,46,111,114,103,47,115,104,111,114,116,99,117,
-116,32,105,99,111,110,34,32,104,114,101,102,61,34,34,32,97,117,116,111,99,111,
-109,112,108,101,116,101,61,34,111,102,102,34,32,60,47,97,62,60,47,100,105,118,62
-,60,100,105,118,32,99,108,97,115,115,61,60,47,97,62,60,47,108,105,62,10,60,108,
-105,32,99,108,97,115,115,61,34,99,115,115,34,32,116,121,112,101,61,34,116,101,
-120,116,47,99,115,115,34,32,60,102,111,114,109,32,97,99,116,105,111,110,61,34,
-104,116,116,112,58,47,47,120,116,47,99,115,115,34,32,104,114,101,102,61,34,104,
-116,116,112,58,47,47,108,105,110,107,32,114,101,108,61,34,97,108,116,101,114,110
-,97,116,101,34,32,13,10,60,115,99,114,105,112,116,32,116,121,112,101,61,34,116,
-101,120,116,47,32,111,110,99,108,105,99,107,61,34,106,97,118,97,115,99,114,105,
-112,116,58,40,110,101,119,32,68,97,116,101,41,46,103,101,116,84,105,109,101,40,
-41,125,104,101,105,103,104,116,61,34,49,34,32,119,105,100,116,104,61,34,49,34,32
-,80,101,111,112,108,101,39,115,32,82,101,112,117,98,108,105,99,32,111,102,32,32,
-60,97,32,104,114,101,102,61,34,104,116,116,112,58,47,47,119,119,119,46,116,101,
-120,116,45,100,101,99,111,114,97,116,105,111,110,58,117,110,100,101,114,116,104,
-101,32,98,101,103,105,110,110,105,110,103,32,111,102,32,116,104,101,32,60,47,100
-,105,118,62,10,60,47,100,105,118,62,10,60,47,100,105,118,62,10,101,115,116,97,98
-,108,105,115,104,109,101,110,116,32,111,102,32,116,104,101,32,60,47,100,105,118,
-62,60,47,100,105,118,62,60,47,100,105,118,62,60,47,100,35,118,105,101,119,112,
-111,114,116,123,109,105,110,45,104,101,105,103,104,116,58,10,60,115,99,114,105,
-112,116,32,115,114,99,61,34,104,116,116,112,58,47,47,111,112,116,105,111,110,62,
-60,111,112,116,105,111,110,32,118,97,108,117,101,61,111,102,116,101,110,32,114,
-101,102,101,114,114,101,100,32,116,111,32,97,115,32,47,111,112,116,105,111,110,
-62,10,60,111,112,116,105,111,110,32,118,97,108,117,60,33,68,79,67,84,89,80,69,32
-,104,116,109,108,62,10,60,33,45,45,91,73,110,116,101,114,110,97,116,105,111,110,
-97,108,32,65,105,114,112,111,114,116,62,10,60,97,32,104,114,101,102,61,34,104,
-116,116,112,58,47,47,119,119,119,60,47,97,62,60,97,32,104,114,101,102,61,34,104,
-116,116,112,58,47,47,119,224,184,160,224,184,178,224,184,169,224,184,178,224,185
-,132,224,184,151,224,184,162,225,131,165,225,131,144,225,131,160,225,131,151,225
-,131,163,225,131,154,225,131,152,230,173,163,233,171,148,228,184,173,230,150,135
-,32,40,231,185,129,233,171,148,41,224,164,168,224,164,191,224,164,176,224,165,
-141,224,164,166,224,165,135,224,164,182,224,164,161,224,164,190,224,164,137,224,
-164,168,224,164,178,224,165,139,224,164,161,224,164,149,224,165,141,224,164,183,
-224,165,135,224,164,164,224,165,141,224,164,176,224,164,156,224,164,190,224,164,
-168,224,164,149,224,164,190,224,164,176,224,165,128,224,164,184,224,164,130,224,
-164,172,224,164,130,224,164,167,224,164,191,224,164,164,224,164,184,224,165,141,
-224,164,165,224,164,190,224,164,170,224,164,168,224,164,190,224,164,184,224,165,
-141,224,164,181,224,165,128,224,164,149,224,164,190,224,164,176,224,164,184,224,
-164,130,224,164,184,224,165,141,224,164,149,224,164,176,224,164,163,224,164,184,
-224,164,190,224,164,174,224,164,151,224,165,141,224,164,176,224,165,128,224,164,
-154,224,164,191,224,164,159,224,165,141,224,164,160,224,165,139,224,164,130,224,
-164,181,224,164,191,224,164,156,224,165,141,224,164,158,224,164,190,224,164,168,
-224,164,133,224,164,174,224,165,135,224,164,176,224,164,191,224,164,149,224,164,
-190,224,164,181,224,164,191,224,164,173,224,164,191,224,164,168,224,165,141,224,
-164,168,224,164,151,224,164,190,224,164,161,224,164,191,224,164,175,224,164,190,
-224,164,129,224,164,149,224,165,141,224,164,175,224,165,139,224,164,130,224,164,
-149,224,164,191,224,164,184,224,165,129,224,164,176,224,164,149,224,165,141,224,
-164,183,224,164,190,224,164,170,224,164,185,224,165,129,224,164,129,224,164,154,
-224,164,164,224,165,128,224,164,170,224,165,141,224,164,176,224,164,172,224,164,
-130,224,164,167,224,164,168,224,164,159,224,164,191,224,164,170,224,165,141,224,
-164,170,224,164,163,224,165,128,224,164,149,224,165,141,224,164,176,224,164,191,
-224,164,149,224,165,135,224,164,159,224,164,170,224,165,141,224,164,176,224,164,
-190,224,164,176,224,164,130,224,164,173,224,164,170,224,165,141,224,164,176,224,
-164,190,224,164,170,224,165,141,224,164,164,224,164,174,224,164,190,224,164,178,
-224,164,191,224,164,149,224,165,139,224,164,130,224,164,176,224,164,171,224,164,
-188,224,165,141,224,164,164,224,164,190,224,164,176,224,164,168,224,164,191,224,
-164,176,224,165,141,224,164,174,224,164,190,224,164,163,224,164,178,224,164,191,
-224,164,174,224,164,191,224,164,159,224,165,135,224,164,161,100,101,115,99,114,
-105,112,116,105,111,110,34,32,99,111,110,116,101,110,116,61,34,100,111,99,117,
-109,101,110,116,46,108,111,99,97,116,105,111,110,46,112,114,111,116,46,103,101,
-116,69,108,101,109,101,110,116,115,66,121,84,97,103,78,97,109,101,40,60,33,68,79
-,67,84,89,80,69,32,104,116,109,108,62,10,60,104,116,109,108,32,60,109,101,116,97
-,32,99,104,97,114,115,101,116,61,34,117,116,102,45,56,34,62,58,117,114,108,34,32
-,99,111,110,116,101,110,116,61,34,104,116,116,112,58,47,47,46,99,115,115,34,32,
-114,101,108,61,34,115,116,121,108,101,115,104,101,101,116,34,115,116,121,108,101
-,32,116,121,112,101,61,34,116,101,120,116,47,99,115,115,34,62,116,121,112,101,61
-,34,116,101,120,116,47,99,115,115,34,32,104,114,101,102,61,34,119,51,46,111,114,
-103,47,49,57,57,57,47,120,104,116,109,108,34,32,120,109,108,116,121,112,101,61,
-34,116,101,120,116,47,106,97,118,97,115,99,114,105,112,116,34,32,109,101,116,104
-,111,100,61,34,103,101,116,34,32,97,99,116,105,111,110,61,34,108,105,110,107,32,
-114,101,108,61,34,115,116,121,108,101,115,104,101,101,116,34,32,32,61,32,100,111
-,99,117,109,101,110,116,46,103,101,116,69,108,101,109,101,110,116,116,121,112,
-101,61,34,105,109,97,103,101,47,120,45,105,99,111,110,34,32,47,62,99,101,108,108
-,112,97,100,100,105,110,103,61,34,48,34,32,99,101,108,108,115,112,46,99,115,115,
-34,32,116,121,112,101,61,34,116,101,120,116,47,99,115,115,34,32,60,47,97,62,60,
-47,108,105,62,60,108,105,62,60,97,32,104,114,101,102,61,34,34,32,119,105,100,116
-,104,61,34,49,34,32,104,101,105,103,104,116,61,34,49,34,34,62,60,97,32,104,114,
-101,102,61,34,104,116,116,112,58,47,47,119,119,119,46,115,116,121,108,101,61,34,
-100,105,115,112,108,97,121,58,110,111,110,101,59,34,62,97,108,116,101,114,110,97
-,116,101,34,32,116,121,112,101,61,34,97,112,112,108,105,45,47,47,87,51,67,47,47,
-68,84,68,32,88,72,84,77,76,32,49,46,48,32,101,108,108,115,112,97,99,105,110,103,
-61,34,48,34,32,99,101,108,108,112,97,100,32,116,121,112,101,61,34,104,105,100,
-100,101,110,34,32,118,97,108,117,101,61,34,47,97,62,38,110,98,115,112,59,60,115,
-112,97,110,32,114,111,108,101,61,34,115,10,60,105,110,112,117,116,32,116,121,112
-,101,61,34,104,105,100,100,101,110,34,32,108,97,110,103,117,97,103,101,61,34,74,
-97,118,97,83,99,114,105,112,116,34,32,32,100,111,99,117,109,101,110,116,46,103,
-101,116,69,108,101,109,101,110,116,115,66,103,61,34,48,34,32,99,101,108,108,115,
-112,97,99,105,110,103,61,34,48,34,32,121,112,101,61,34,116,101,120,116,47,99,115
-,115,34,32,109,101,100,105,97,61,34,116,121,112,101,61,39,116,101,120,116,47,106
-,97,118,97,115,99,114,105,112,116,39,119,105,116,104,32,116,104,101,32,101,120,
-99,101,112,116,105,111,110,32,111,102,32,121,112,101,61,34,116,101,120,116,47,99
-,115,115,34,32,114,101,108,61,34,115,116,32,104,101,105,103,104,116,61,34,49,34,
-32,119,105,100,116,104,61,34,49,34,32,61,39,43,101,110,99,111,100,101,85,82,73,
-67,111,109,112,111,110,101,110,116,40,60,108,105,110,107,32,114,101,108,61,34,97
-,108,116,101,114,110,97,116,101,34,32,10,98,111,100,121,44,32,116,114,44,32,105,
-110,112,117,116,44,32,116,101,120,116,109,101,116,97,32,110,97,109,101,61,34,114
-,111,98,111,116,115,34,32,99,111,110,109,101,116,104,111,100,61,34,112,111,115,
-116,34,32,97,99,116,105,111,110,61,34,62,10,60,97,32,104,114,101,102,61,34,104,
-116,116,112,58,47,47,119,119,119,46,99,115,115,34,32,114,101,108,61,34,115,116,
-121,108,101,115,104,101,101,116,34,32,60,47,100,105,118,62,60,47,100,105,118,62,
-60,100,105,118,32,99,108,97,115,115,108,97,110,103,117,97,103,101,61,34,106,97,
-118,97,115,99,114,105,112,116,34,62,97,114,105,97,45,104,105,100,100,101,110,61,
-34,116,114,117,101,34,62,194,183,60,114,105,112,116,34,32,116,121,112,101,61,34,
-116,101,120,116,47,106,97,118,97,115,108,61,48,59,125,41,40,41,59,10,40,102,117,
-110,99,116,105,111,110,40,41,123,98,97,99,107,103,114,111,117,110,100,45,105,109
-,97,103,101,58,32,117,114,108,40,47,97,62,60,47,108,105,62,60,108,105,62,60,97,
-32,104,114,101,102,61,34,104,9,9,60,108,105,62,60,97,32,104,114,101,102,61,34,
-104,116,116,112,58,47,47,97,116,111,114,34,32,97,114,105,97,45,104,105,100,100,
-101,110,61,34,116,114,117,62,32,60,97,32,104,114,101,102,61,34,104,116,116,112,
-58,47,47,119,119,119,46,108,97,110,103,117,97,103,101,61,34,106,97,118,97,115,99
-,114,105,112,116,34,32,47,111,112,116,105,111,110,62,10,60,111,112,116,105,111,
-110,32,118,97,108,117,101,47,100,105,118,62,60,47,100,105,118,62,60,100,105,118,
-32,99,108,97,115,115,61,114,97,116,111,114,34,32,97,114,105,97,45,104,105,100,
-100,101,110,61,34,116,114,101,61,40,110,101,119,32,68,97,116,101,41,46,103,101,
-116,84,105,109,101,40,41,112,111,114,116,117,103,117,195,170,115,32,40,100,111,
-32,66,114,97,115,105,108,41,208,190,209,128,208,179,208,176,208,189,208,184,208,
-183,208,176,209,134,208,184,208,184,208,178,208,190,208,183,208,188,208,190,208,
-182,208,189,208,190,209,129,209,130,209,140,208,190,208,177,209,128,208,176,208,
-183,208,190,208,178,208,176,208,189,208,184,209,143,209,128,208,181,208,179,208,
-184,209,129,209,130,209,128,208,176,209,134,208,184,208,184,208,178,208,190,208,
-183,208,188,208,190,208,182,208,189,208,190,209,129,209,130,208,184,208,190,208,
-177,209,143,208,183,208,176,209,130,208,181,208,187,209,140,208,189,208,176,60,
-33,68,79,67,84,89,80,69,32,104,116,109,108,32,80,85,66,76,73,67,32,34,110,116,45
-,84,121,112,101,34,32,99,111,110,116,101,110,116,61,34,116,101,120,116,47,60,109
-,101,116,97,32,104,116,116,112,45,101,113,117,105,118,61,34,67,111,110,116,101,
-114,97,110,115,105,116,105,111,110,97,108,47,47,69,78,34,32,34,104,116,116,112,
-58,60,104,116,109,108,32,120,109,108,110,115,61,34,104,116,116,112,58,47,47,119,
-119,119,45,47,47,87,51,67,47,47,68,84,68,32,88,72,84,77,76,32,49,46,48,32,84,68,
-84,68,47,120,104,116,109,108,49,45,116,114,97,110,115,105,116,105,111,110,97,108
-,47,47,119,119,119,46,119,51,46,111,114,103,47,84,82,47,120,104,116,109,108,49,
-47,112,101,32,61,32,39,116,101,120,116,47,106,97,118,97,115,99,114,105,112,116,
-39,59,60,109,101,116,97,32,110,97,109,101,61,34,100,101,115,99,114,105,112,116,
-105,111,110,112,97,114,101,110,116,78,111,100,101,46,105,110,115,101,114,116,66,
-101,102,111,114,101,60,105,110,112,117,116,32,116,121,112,101,61,34,104,105,100,
-100,101,110,34,32,110,97,106,115,34,32,116,121,112,101,61,34,116,101,120,116,47,
-106,97,118,97,115,99,114,105,40,100,111,99,117,109,101,110,116,41,46,114,101,97,
-100,121,40,102,117,110,99,116,105,115,99,114,105,112,116,32,116,121,112,101,61,
-34,116,101,120,116,47,106,97,118,97,115,105,109,97,103,101,34,32,99,111,110,116,
-101,110,116,61,34,104,116,116,112,58,47,47,85,65,45,67,111,109,112,97,116,105,98
-,108,101,34,32,99,111,110,116,101,110,116,61,116,109,108,59,32,99,104,97,114,115
-,101,116,61,117,116,102,45,56,34,32,47,62,10,108,105,110,107,32,114,101,108,61,
-34,115,104,111,114,116,99,117,116,32,105,99,111,110,60,108,105,110,107,32,114,
-101,108,61,34,115,116,121,108,101,115,104,101,101,116,34,32,60,47,115,99,114,105
-,112,116,62,10,60,115,99,114,105,112,116,32,116,121,112,101,61,61,32,100,111,99,
-117,109,101,110,116,46,99,114,101,97,116,101,69,108,101,109,101,110,60,97,32,116
-,97,114,103,101,116,61,34,95,98,108,97,110,107,34,32,104,114,101,102,61,32,100,
-111,99,117,109,101,110,116,46,103,101,116,69,108,101,109,101,110,116,115,66,105,
-110,112,117,116,32,116,121,112,101,61,34,116,101,120,116,34,32,110,97,109,101,61
-,97,46,116,121,112,101,32,61,32,39,116,101,120,116,47,106,97,118,97,115,99,114,
-105,110,112,117,116,32,116,121,112,101,61,34,104,105,100,100,101,110,34,32,110,
-97,109,101,104,116,109,108,59,32,99,104,97,114,115,101,116,61,117,116,102,45,56,
-34,32,47,62,100,116,100,34,62,10,60,104,116,109,108,32,120,109,108,110,115,61,34
-,104,116,116,112,45,47,47,87,51,67,47,47,68,84,68,32,72,84,77,76,32,52,46,48,49,
-32,84,101,110,116,115,66,121,84,97,103,78,97,109,101,40,39,115,99,114,105,112,
-116,39,41,105,110,112,117,116,32,116,121,112,101,61,34,104,105,100,100,101,110,
-34,32,110,97,109,60,115,99,114,105,112,116,32,116,121,112,101,61,34,116,101,120,
-116,47,106,97,118,97,115,34,32,115,116,121,108,101,61,34,100,105,115,112,108,97,
-121,58,110,111,110,101,59,34,62,100,111,99,117,109,101,110,116,46,103,101,116,69
-,108,101,109,101,110,116,66,121,73,100,40,61,100,111,99,117,109,101,110,116,46,
-99,114,101,97,116,101,69,108,101,109,101,110,116,40,39,32,116,121,112,101,61,39,
-116,101,120,116,47,106,97,118,97,115,99,114,105,112,116,39,105,110,112,117,116,
-32,116,121,112,101,61,34,116,101,120,116,34,32,110,97,109,101,61,34,100,46,103,
-101,116,69,108,101,109,101,110,116,115,66,121,84,97,103,78,97,109,101,40,115,110
-,105,99,97,108,34,32,104,114,101,102,61,34,104,116,116,112,58,47,47,119,119,119,
-46,67,47,47,68,84,68,32,72,84,77,76,32,52,46,48,49,32,84,114,97,110,115,105,116,
-60,115,116,121,108,101,32,116,121,112,101,61,34,116,101,120,116,47,99,115,115,34
-,62,10,10,60,115,116,121,108,101,32,116,121,112,101,61,34,116,101,120,116,47,99,
-115,115,34,62,105,111,110,97,108,46,100,116,100,34,62,10,60,104,116,109,108,32,
-120,109,108,110,115,61,104,116,116,112,45,101,113,117,105,118,61,34,67,111,110,
-116,101,110,116,45,84,121,112,101,100,105,110,103,61,34,48,34,32,99,101,108,108,
-115,112,97,99,105,110,103,61,34,48,34,104,116,109,108,59,32,99,104,97,114,115,
-101,116,61,117,116,102,45,56,34,32,47,62,10,32,115,116,121,108,101,61,34,100,105
-,115,112,108,97,121,58,110,111,110,101,59,34,62,60,60,108,105,62,60,97,32,104,
-114,101,102,61,34,104,116,116,112,58,47,47,119,119,119,46,32,116,121,112,101,61,
-39,116,101,120,116,47,106,97,118,97,115,99,114,105,112,116,39,62,208,180,208,181
-,209,143,209,130,208,181,208,187,209,140,208,189,208,190,209,129,209,130,208,184
-,209,129,208,190,208,190,209,130,208,178,208,181,209,130,209,129,209,130,208,178
-,208,184,208,184,208,191,209,128,208,190,208,184,208,183,208,178,208,190,208,180
-,209,129,209,130,208,178,208,176,208,177,208,181,208,183,208,190,208,191,208,176
-,209,129,208,189,208,190,209,129,209,130,208,184,224,164,170,224,165,129,224,164
-,184,224,165,141,224,164,164,224,164,191,224,164,149,224,164,190,224,164,149,224
-,164,190,224,164,130,224,164,151,224,165,141,224,164,176,224,165,135,224,164,184
-,224,164,137,224,164,168,224,165,141,224,164,185,224,165,139,224,164,130,224,164
-,168,224,165,135,224,164,181,224,164,191,224,164,167,224,164,190,224,164,168,224
-,164,184,224,164,173,224,164,190,224,164,171,224,164,191,224,164,149,224,165,141
-,224,164,184,224,164,191,224,164,130,224,164,151,224,164,184,224,165,129,224,164
-,176,224,164,149,224,165,141,224,164,183,224,164,191,224,164,164,224,164,149,224
-,165,137,224,164,170,224,165,128,224,164,176,224,164,190,224,164,135,224,164,159
-,224,164,181,224,164,191,224,164,156,224,165,141,224,164,158,224,164,190,224,164
-,170,224,164,168,224,164,149,224,164,190,224,164,176,224,165,141,224,164,176,224
-,164,181,224,164,190,224,164,136,224,164,184,224,164,149,224,165,141,224,164,176
-,224,164,191,224,164,175,224,164,164,224,164,190
-}
-;
-#endif /* !BROTLI_EXTERNAL_DICTIONARY_DATA */
-
-static BrotliDictionary kBrotliDictionary = {
- /* size_bits_by_length */
- {
- 0, 0, 0, 0, 10, 10, 11, 11,
- 10, 10, 10, 10, 10, 9, 9, 8,
- 7, 7, 8, 7, 7, 6, 6, 5,
- 5, 0, 0, 0, 0, 0, 0, 0
- },
-
- /* offsets_by_length */
- {
- 0, 0, 0, 0, 0, 4096, 9216, 21504,
- 35840, 44032, 53248, 63488, 74752, 87040, 93696, 100864,
- 104704, 106752, 108928, 113536, 115968, 118528, 119872, 121280,
- 122016, 122784, 122784, 122784, 122784, 122784, 122784, 122784
- },
-
- /* data_size == sizeof(kBrotliDictionaryData) */
- 122784,
-
- /* data */
-#if defined(BROTLI_EXTERNAL_DICTIONARY_DATA)
- NULL
-#else
- kBrotliDictionaryData
-#endif
-};
-
-const BrotliDictionary* BrotliGetDictionary() {
- return &kBrotliDictionary;
-}
-
-void BrotliSetDictionaryData(const uint8_t* data) {
- if (!!data && !kBrotliDictionary.data) {
- kBrotliDictionary.data = data;
- }
-}
-
-#if defined(__cplusplus) || defined(c_plusplus)
-} /* extern "C" */
-#endif
diff --git a/BaseTools/Source/C/BrotliCompress/common/transform.c b/BaseTools/Source/C/BrotliCompress/common/transform.c
deleted file mode 100644
index aaac74b526d3..000000000000
--- a/BaseTools/Source/C/BrotliCompress/common/transform.c
+++ /dev/null
@@ -1,235 +0,0 @@
-/* Copyright 2013 Google Inc. All Rights Reserved.
-
- Distributed under MIT license.
- See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
-*/
-
-#include "./transform.h"
-
-#if defined(__cplusplus) || defined(c_plusplus)
-extern "C" {
-#endif
-
-/* RFC 7932 transforms string data */
-static const char kPrefixSuffix[217] =
- "\1 \2, \10 of the \4 of \2s \1.\5 and \4 "
-/* 0x _0 _2 __5 _E _3 _6 _8 _E */
- "in \1\"\4 to \2\">\1\n\2. \1]\5 for \3 a \6 "
-/* 2x _3_ _5 _A_ _D_ _F _2 _4 _A _E */
- "that \1\'\6 with \6 from \4 by \1(\6. T"
-/* 4x _5_ _7 _E _5 _A _C */
- "he \4 on \4 as \4 is \4ing \2\n\t\1:\3ed "
-/* 6x _3 _8 _D _2 _7_ _ _A _C */
- "\2=\"\4 at \3ly \1,\2=\'\5.com/\7. This \5"
-/* 8x _0 _ _3 _8 _C _E _ _1 _7 _F */
- " not \3er \3al \4ful \4ive \5less \4es"
-/* Ax _5 _9 _D _2 _7 _D */
- "t \4ize \2\xc2\xa0\4ous \5 the \2e \0";
-/* Cx _2 _7___ ___ _A _F _5 _8 */
-
-static const uint16_t kPrefixSuffixMap[50] = {
- 0x00, 0x02, 0x05, 0x0E, 0x13, 0x16, 0x18, 0x1E, 0x23, 0x25,
- 0x2A, 0x2D, 0x2F, 0x32, 0x34, 0x3A, 0x3E, 0x45, 0x47, 0x4E,
- 0x55, 0x5A, 0x5C, 0x63, 0x68, 0x6D, 0x72, 0x77, 0x7A, 0x7C,
- 0x80, 0x83, 0x88, 0x8C, 0x8E, 0x91, 0x97, 0x9F, 0xA5, 0xA9,
- 0xAD, 0xB2, 0xB7, 0xBD, 0xC2, 0xC7, 0xCA, 0xCF, 0xD5, 0xD8
-};
-
-/* RFC 7932 transforms */
-static const uint8_t kTransformsData[] = {
- 49, BROTLI_TRANSFORM_IDENTITY, 49,
- 49, BROTLI_TRANSFORM_IDENTITY, 0,
- 0, BROTLI_TRANSFORM_IDENTITY, 0,
- 49, BROTLI_TRANSFORM_OMIT_FIRST_1, 49,
- 49, BROTLI_TRANSFORM_UPPERCASE_FIRST, 0,
- 49, BROTLI_TRANSFORM_IDENTITY, 47,
- 0, BROTLI_TRANSFORM_IDENTITY, 49,
- 4, BROTLI_TRANSFORM_IDENTITY, 0,
- 49, BROTLI_TRANSFORM_IDENTITY, 3,
- 49, BROTLI_TRANSFORM_UPPERCASE_FIRST, 49,
- 49, BROTLI_TRANSFORM_IDENTITY, 6,
- 49, BROTLI_TRANSFORM_OMIT_FIRST_2, 49,
- 49, BROTLI_TRANSFORM_OMIT_LAST_1, 49,
- 1, BROTLI_TRANSFORM_IDENTITY, 0,
- 49, BROTLI_TRANSFORM_IDENTITY, 1,
- 0, BROTLI_TRANSFORM_UPPERCASE_FIRST, 0,
- 49, BROTLI_TRANSFORM_IDENTITY, 7,
- 49, BROTLI_TRANSFORM_IDENTITY, 9,
- 48, BROTLI_TRANSFORM_IDENTITY, 0,
- 49, BROTLI_TRANSFORM_IDENTITY, 8,
- 49, BROTLI_TRANSFORM_IDENTITY, 5,
- 49, BROTLI_TRANSFORM_IDENTITY, 10,
- 49, BROTLI_TRANSFORM_IDENTITY, 11,
- 49, BROTLI_TRANSFORM_OMIT_LAST_3, 49,
- 49, BROTLI_TRANSFORM_IDENTITY, 13,
- 49, BROTLI_TRANSFORM_IDENTITY, 14,
- 49, BROTLI_TRANSFORM_OMIT_FIRST_3, 49,
- 49, BROTLI_TRANSFORM_OMIT_LAST_2, 49,
- 49, BROTLI_TRANSFORM_IDENTITY, 15,
- 49, BROTLI_TRANSFORM_IDENTITY, 16,
- 0, BROTLI_TRANSFORM_UPPERCASE_FIRST, 49,
- 49, BROTLI_TRANSFORM_IDENTITY, 12,
- 5, BROTLI_TRANSFORM_IDENTITY, 49,
- 0, BROTLI_TRANSFORM_IDENTITY, 1,
- 49, BROTLI_TRANSFORM_OMIT_FIRST_4, 49,
- 49, BROTLI_TRANSFORM_IDENTITY, 18,
- 49, BROTLI_TRANSFORM_IDENTITY, 17,
- 49, BROTLI_TRANSFORM_IDENTITY, 19,
- 49, BROTLI_TRANSFORM_IDENTITY, 20,
- 49, BROTLI_TRANSFORM_OMIT_FIRST_5, 49,
- 49, BROTLI_TRANSFORM_OMIT_FIRST_6, 49,
- 47, BROTLI_TRANSFORM_IDENTITY, 49,
- 49, BROTLI_TRANSFORM_OMIT_LAST_4, 49,
- 49, BROTLI_TRANSFORM_IDENTITY, 22,
- 49, BROTLI_TRANSFORM_UPPERCASE_ALL, 49,
- 49, BROTLI_TRANSFORM_IDENTITY, 23,
- 49, BROTLI_TRANSFORM_IDENTITY, 24,
- 49, BROTLI_TRANSFORM_IDENTITY, 25,
- 49, BROTLI_TRANSFORM_OMIT_LAST_7, 49,
- 49, BROTLI_TRANSFORM_OMIT_LAST_1, 26,
- 49, BROTLI_TRANSFORM_IDENTITY, 27,
- 49, BROTLI_TRANSFORM_IDENTITY, 28,
- 0, BROTLI_TRANSFORM_IDENTITY, 12,
- 49, BROTLI_TRANSFORM_IDENTITY, 29,
- 49, BROTLI_TRANSFORM_OMIT_FIRST_9, 49,
- 49, BROTLI_TRANSFORM_OMIT_FIRST_7, 49,
- 49, BROTLI_TRANSFORM_OMIT_LAST_6, 49,
- 49, BROTLI_TRANSFORM_IDENTITY, 21,
- 49, BROTLI_TRANSFORM_UPPERCASE_FIRST, 1,
- 49, BROTLI_TRANSFORM_OMIT_LAST_8, 49,
- 49, BROTLI_TRANSFORM_IDENTITY, 31,
- 49, BROTLI_TRANSFORM_IDENTITY, 32,
- 47, BROTLI_TRANSFORM_IDENTITY, 3,
- 49, BROTLI_TRANSFORM_OMIT_LAST_5, 49,
- 49, BROTLI_TRANSFORM_OMIT_LAST_9, 49,
- 0, BROTLI_TRANSFORM_UPPERCASE_FIRST, 1,
- 49, BROTLI_TRANSFORM_UPPERCASE_FIRST, 8,
- 5, BROTLI_TRANSFORM_IDENTITY, 21,
- 49, BROTLI_TRANSFORM_UPPERCASE_ALL, 0,
- 49, BROTLI_TRANSFORM_UPPERCASE_FIRST, 10,
- 49, BROTLI_TRANSFORM_IDENTITY, 30,
- 0, BROTLI_TRANSFORM_IDENTITY, 5,
- 35, BROTLI_TRANSFORM_IDENTITY, 49,
- 47, BROTLI_TRANSFORM_IDENTITY, 2,
- 49, BROTLI_TRANSFORM_UPPERCASE_FIRST, 17,
- 49, BROTLI_TRANSFORM_IDENTITY, 36,
- 49, BROTLI_TRANSFORM_IDENTITY, 33,
- 5, BROTLI_TRANSFORM_IDENTITY, 0,
- 49, BROTLI_TRANSFORM_UPPERCASE_FIRST, 21,
- 49, BROTLI_TRANSFORM_UPPERCASE_FIRST, 5,
- 49, BROTLI_TRANSFORM_IDENTITY, 37,
- 0, BROTLI_TRANSFORM_IDENTITY, 30,
- 49, BROTLI_TRANSFORM_IDENTITY, 38,
- 0, BROTLI_TRANSFORM_UPPERCASE_ALL, 0,
- 49, BROTLI_TRANSFORM_IDENTITY, 39,
- 0, BROTLI_TRANSFORM_UPPERCASE_ALL, 49,
- 49, BROTLI_TRANSFORM_IDENTITY, 34,
- 49, BROTLI_TRANSFORM_UPPERCASE_ALL, 8,
- 49, BROTLI_TRANSFORM_UPPERCASE_FIRST, 12,
- 0, BROTLI_TRANSFORM_IDENTITY, 21,
- 49, BROTLI_TRANSFORM_IDENTITY, 40,
- 0, BROTLI_TRANSFORM_UPPERCASE_FIRST, 12,
- 49, BROTLI_TRANSFORM_IDENTITY, 41,
- 49, BROTLI_TRANSFORM_IDENTITY, 42,
- 49, BROTLI_TRANSFORM_UPPERCASE_ALL, 17,
- 49, BROTLI_TRANSFORM_IDENTITY, 43,
- 0, BROTLI_TRANSFORM_UPPERCASE_FIRST, 5,
- 49, BROTLI_TRANSFORM_UPPERCASE_ALL, 10,
- 0, BROTLI_TRANSFORM_IDENTITY, 34,
- 49, BROTLI_TRANSFORM_UPPERCASE_FIRST, 33,
- 49, BROTLI_TRANSFORM_IDENTITY, 44,
- 49, BROTLI_TRANSFORM_UPPERCASE_ALL, 5,
- 45, BROTLI_TRANSFORM_IDENTITY, 49,
- 0, BROTLI_TRANSFORM_IDENTITY, 33,
- 49, BROTLI_TRANSFORM_UPPERCASE_FIRST, 30,
- 49, BROTLI_TRANSFORM_UPPERCASE_ALL, 30,
- 49, BROTLI_TRANSFORM_IDENTITY, 46,
- 49, BROTLI_TRANSFORM_UPPERCASE_ALL, 1,
- 49, BROTLI_TRANSFORM_UPPERCASE_FIRST, 34,
- 0, BROTLI_TRANSFORM_UPPERCASE_FIRST, 33,
- 0, BROTLI_TRANSFORM_UPPERCASE_ALL, 30,
- 0, BROTLI_TRANSFORM_UPPERCASE_ALL, 1,
- 49, BROTLI_TRANSFORM_UPPERCASE_ALL, 33,
- 49, BROTLI_TRANSFORM_UPPERCASE_ALL, 21,
- 49, BROTLI_TRANSFORM_UPPERCASE_ALL, 12,
- 0, BROTLI_TRANSFORM_UPPERCASE_ALL, 5,
- 49, BROTLI_TRANSFORM_UPPERCASE_ALL, 34,
- 0, BROTLI_TRANSFORM_UPPERCASE_ALL, 12,
- 0, BROTLI_TRANSFORM_UPPERCASE_FIRST, 30,
- 0, BROTLI_TRANSFORM_UPPERCASE_ALL, 34,
- 0, BROTLI_TRANSFORM_UPPERCASE_FIRST, 34,
-};
-
-static BrotliTransforms kBrotliTransforms = {
- sizeof(kPrefixSuffix),
- (const uint8_t*)kPrefixSuffix,
- kPrefixSuffixMap,
- sizeof(kTransformsData) / (3 * sizeof(kTransformsData[0])),
- kTransformsData,
- {0, 12, 27, 23, 42, 63, 56, 48, 59, 64}
-};
-
-const BrotliTransforms* BrotliGetTransforms(void) {
- return &kBrotliTransforms;
-}
-
-static int ToUpperCase(uint8_t* p) {
- if (p[0] < 0xC0) {
- if (p[0] >= 'a' && p[0] <= 'z') {
- p[0] ^= 32;
- }
- return 1;
- }
- /* An overly simplified uppercasing model for UTF-8. */
- if (p[0] < 0xE0) {
- p[1] ^= 32;
- return 2;
- }
- /* An arbitrary transform for three byte characters. */
- p[2] ^= 5;
- return 3;
-}
-
-int BrotliTransformDictionaryWord(uint8_t* dst, const uint8_t* word, int len,
- const BrotliTransforms* transforms, int transfom_idx) {
- int idx = 0;
- const uint8_t* prefix = BROTLI_TRANSFORM_PREFIX(transforms, transfom_idx);
- uint8_t type = BROTLI_TRANSFORM_TYPE(transforms, transfom_idx);
- const uint8_t* suffix = BROTLI_TRANSFORM_SUFFIX(transforms, transfom_idx);
- {
- int prefix_len = *prefix++;
- while (prefix_len--) { dst[idx++] = *prefix++; }
- }
- {
- const int t = type;
- int i = 0;
- if (t <= BROTLI_TRANSFORM_OMIT_LAST_9) {
- len -= t;
- } else if (t >= BROTLI_TRANSFORM_OMIT_FIRST_1
- && t <= BROTLI_TRANSFORM_OMIT_FIRST_9) {
- int skip = t - (BROTLI_TRANSFORM_OMIT_FIRST_1 - 1);
- word += skip;
- len -= skip;
- }
- while (i < len) { dst[idx++] = word[i++]; }
- if (t == BROTLI_TRANSFORM_UPPERCASE_FIRST) {
- ToUpperCase(&dst[idx - len]);
- } else if (t == BROTLI_TRANSFORM_UPPERCASE_ALL) {
- uint8_t* uppercase = &dst[idx - len];
- while (len > 0) {
- int step = ToUpperCase(uppercase);
- uppercase += step;
- len -= step;
- }
- }
- }
- {
- int suffix_len = *suffix++;
- while (suffix_len--) { dst[idx++] = *suffix++; }
- return idx;
- }
-}
-
-#if defined(__cplusplus) || defined(c_plusplus)
-} /* extern "C" */
-#endif
diff --git a/BaseTools/Source/C/BrotliCompress/dec/bit_reader.c b/BaseTools/Source/C/BrotliCompress/dec/bit_reader.c
deleted file mode 100644
index 4d8bd8b2f619..000000000000
--- a/BaseTools/Source/C/BrotliCompress/dec/bit_reader.c
+++ /dev/null
@@ -1,48 +0,0 @@
-/* Copyright 2013 Google Inc. All Rights Reserved.
-
- Distributed under MIT license.
- See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
-*/
-
-/* Bit reading helpers */
-
-#include "./bit_reader.h"
-
-#include "../common/platform.h"
-#include <brotli/types.h>
-
-#if defined(__cplusplus) || defined(c_plusplus)
-extern "C" {
-#endif
-
-void BrotliInitBitReader(BrotliBitReader* const br) {
- br->val_ = 0;
- br->bit_pos_ = sizeof(br->val_) << 3;
-}
-
-BROTLI_BOOL BrotliWarmupBitReader(BrotliBitReader* const br) {
- size_t aligned_read_mask = (sizeof(br->val_) >> 1) - 1;
- /* Fixing alignment after unaligned BrotliFillWindow would result accumulator
- overflow. If unalignment is caused by BrotliSafeReadBits, then there is
- enough space in accumulator to fix alignment. */
- if (!BROTLI_ALIGNED_READ) {
- aligned_read_mask = 0;
- }
- if (BrotliGetAvailableBits(br) == 0) {
- if (!BrotliPullByte(br)) {
- return BROTLI_FALSE;
- }
- }
-
- while ((((size_t)br->next_in) & aligned_read_mask) != 0) {
- if (!BrotliPullByte(br)) {
- /* If we consumed all the input, we don't care about the alignment. */
- return BROTLI_TRUE;
- }
- }
- return BROTLI_TRUE;
-}
-
-#if defined(__cplusplus) || defined(c_plusplus)
-} /* extern "C" */
-#endif
diff --git a/BaseTools/Source/C/BrotliCompress/dec/decode.c b/BaseTools/Source/C/BrotliCompress/dec/decode.c
deleted file mode 100644
index eb67d8bbf86b..000000000000
--- a/BaseTools/Source/C/BrotliCompress/dec/decode.c
+++ /dev/null
@@ -1,2497 +0,0 @@
-/* Copyright 2013 Google Inc. All Rights Reserved.
-
- Distributed under MIT license.
- See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
-*/
-
-#include <brotli/decode.h>
-
-#if defined(__ARM_NEON__)
-#include <arm_neon.h>
-#endif
-
-#include <stdlib.h> /* free, malloc */
-#include <string.h> /* memcpy, memset */
-
-#include "../common/constants.h"
-#include "../common/context.h"
-#include "../common/dictionary.h"
-#include "../common/platform.h"
-#include "../common/transform.h"
-#include "../common/version.h"
-#include "./bit_reader.h"
-#include "./huffman.h"
-#include "./prefix.h"
-#include "./state.h"
-
-#if defined(__cplusplus) || defined(c_plusplus)
-extern "C" {
-#endif
-
-#define BROTLI_FAILURE(CODE) (BROTLI_DUMP(), CODE)
-
-#define BROTLI_LOG_UINT(name) \
- BROTLI_LOG(("[%s] %s = %lu\n", __func__, #name, (unsigned long)(name)))
-#define BROTLI_LOG_ARRAY_INDEX(array_name, idx) \
- BROTLI_LOG(("[%s] %s[%lu] = %lu\n", __func__, #array_name, \
- (unsigned long)(idx), (unsigned long)array_name[idx]))
-
-#define HUFFMAN_TABLE_BITS 8U
-#define HUFFMAN_TABLE_MASK 0xFF
-
-/* We need the slack region for the following reasons:
- - doing up to two 16-byte copies for fast backward copying
- - inserting transformed dictionary word (5 prefix + 24 base + 8 suffix) */
-static const uint32_t kRingBufferWriteAheadSlack = 42;
-
-static const uint8_t kCodeLengthCodeOrder[BROTLI_CODE_LENGTH_CODES] = {
- 1, 2, 3, 4, 0, 5, 17, 6, 16, 7, 8, 9, 10, 11, 12, 13, 14, 15,
-};
-
-/* Static prefix code for the complex code length code lengths. */
-static const uint8_t kCodeLengthPrefixLength[16] = {
- 2, 2, 2, 3, 2, 2, 2, 4, 2, 2, 2, 3, 2, 2, 2, 4,
-};
-
-static const uint8_t kCodeLengthPrefixValue[16] = {
- 0, 4, 3, 2, 0, 4, 3, 1, 0, 4, 3, 2, 0, 4, 3, 5,
-};
-
-BROTLI_BOOL BrotliDecoderSetParameter(
- BrotliDecoderState* state, BrotliDecoderParameter p, uint32_t value) {
- if (state->state != BROTLI_STATE_UNINITED) return BROTLI_FALSE;
- switch (p) {
- case BROTLI_DECODER_PARAM_DISABLE_RING_BUFFER_REALLOCATION:
- state->canny_ringbuffer_allocation = !!value ? 0 : 1;
- return BROTLI_TRUE;
-
- case BROTLI_DECODER_PARAM_LARGE_WINDOW:
- state->large_window = TO_BROTLI_BOOL(!!value);
- return BROTLI_TRUE;
-
- default: return BROTLI_FALSE;
- }
-}
-
-BrotliDecoderState* BrotliDecoderCreateInstance(
- brotli_alloc_func alloc_func, brotli_free_func free_func, void* opaque) {
- BrotliDecoderState* state = 0;
- if (!alloc_func && !free_func) {
- state = (BrotliDecoderState*)malloc(sizeof(BrotliDecoderState));
- } else if (alloc_func && free_func) {
- state = (BrotliDecoderState*)alloc_func(opaque, sizeof(BrotliDecoderState));
- }
- if (state == 0) {
- BROTLI_DUMP();
- return 0;
- }
- if (!BrotliDecoderStateInit(state, alloc_func, free_func, opaque)) {
- BROTLI_DUMP();
- if (!alloc_func && !free_func) {
- free(state);
- } else if (alloc_func && free_func) {
- free_func(opaque, state);
- }
- return 0;
- }
- return state;
-}
-
-/* Deinitializes and frees BrotliDecoderState instance. */
-void BrotliDecoderDestroyInstance(BrotliDecoderState* state) {
- if (!state) {
- return;
- } else {
- brotli_free_func free_func = state->free_func;
- void* opaque = state->memory_manager_opaque;
- BrotliDecoderStateCleanup(state);
- free_func(opaque, state);
- }
-}
-
-/* Saves error code and converts it to BrotliDecoderResult. */
-static BROTLI_NOINLINE BrotliDecoderResult SaveErrorCode(
- BrotliDecoderState* s, BrotliDecoderErrorCode e) {
- s->error_code = (int)e;
- switch (e) {
- case BROTLI_DECODER_SUCCESS:
- return BROTLI_DECODER_RESULT_SUCCESS;
-
- case BROTLI_DECODER_NEEDS_MORE_INPUT:
- return BROTLI_DECODER_RESULT_NEEDS_MORE_INPUT;
-
- case BROTLI_DECODER_NEEDS_MORE_OUTPUT:
- return BROTLI_DECODER_RESULT_NEEDS_MORE_OUTPUT;
-
- default:
- return BROTLI_DECODER_RESULT_ERROR;
- }
-}
-
-/* Decodes WBITS by reading 1 - 7 bits, or 0x11 for "Large Window Brotli".
- Precondition: bit-reader accumulator has at least 8 bits. */
-static BrotliDecoderErrorCode DecodeWindowBits(BrotliDecoderState* s,
- BrotliBitReader* br) {
- uint32_t n;
- BROTLI_BOOL large_window = s->large_window;
- s->large_window = BROTLI_FALSE;
- BrotliTakeBits(br, 1, &n);
- if (n == 0) {
- s->window_bits = 16;
- return BROTLI_DECODER_SUCCESS;
- }
- BrotliTakeBits(br, 3, &n);
- if (n != 0) {
- s->window_bits = 17 + n;
- return BROTLI_DECODER_SUCCESS;
- }
- BrotliTakeBits(br, 3, &n);
- if (n == 1) {
- if (large_window) {
- BrotliTakeBits(br, 1, &n);
- if (n == 1) {
- return BROTLI_FAILURE(BROTLI_DECODER_ERROR_FORMAT_WINDOW_BITS);
- }
- s->large_window = BROTLI_TRUE;
- return BROTLI_DECODER_SUCCESS;
- } else {
- return BROTLI_FAILURE(BROTLI_DECODER_ERROR_FORMAT_WINDOW_BITS);
- }
- }
- if (n != 0) {
- s->window_bits = 8 + n;
- return BROTLI_DECODER_SUCCESS;
- }
- s->window_bits = 17;
- return BROTLI_DECODER_SUCCESS;
-}
-
-static BROTLI_INLINE void memmove16(uint8_t* dst, uint8_t* src) {
-#if defined(__ARM_NEON__)
- vst1q_u8(dst, vld1q_u8(src));
-#else
- uint32_t buffer[4];
- memcpy(buffer, src, 16);
- memcpy(dst, buffer, 16);
-#endif
-}
-
-/* Decodes a number in the range [0..255], by reading 1 - 11 bits. */
-static BROTLI_NOINLINE BrotliDecoderErrorCode DecodeVarLenUint8(
- BrotliDecoderState* s, BrotliBitReader* br, uint32_t* value) {
- uint32_t bits;
- switch (s->substate_decode_uint8) {
- case BROTLI_STATE_DECODE_UINT8_NONE:
- if (BROTLI_PREDICT_FALSE(!BrotliSafeReadBits(br, 1, &bits))) {
- return BROTLI_DECODER_NEEDS_MORE_INPUT;
- }
- if (bits == 0) {
- *value = 0;
- return BROTLI_DECODER_SUCCESS;
- }
- /* Fall through. */
-
- case BROTLI_STATE_DECODE_UINT8_SHORT:
- if (BROTLI_PREDICT_FALSE(!BrotliSafeReadBits(br, 3, &bits))) {
- s->substate_decode_uint8 = BROTLI_STATE_DECODE_UINT8_SHORT;
- return BROTLI_DECODER_NEEDS_MORE_INPUT;
- }
- if (bits == 0) {
- *value = 1;
- s->substate_decode_uint8 = BROTLI_STATE_DECODE_UINT8_NONE;
- return BROTLI_DECODER_SUCCESS;
- }
- /* Use output value as a temporary storage. It MUST be persisted. */
- *value = bits;
- /* Fall through. */
-
- case BROTLI_STATE_DECODE_UINT8_LONG:
- if (BROTLI_PREDICT_FALSE(!BrotliSafeReadBits(br, *value, &bits))) {
- s->substate_decode_uint8 = BROTLI_STATE_DECODE_UINT8_LONG;
- return BROTLI_DECODER_NEEDS_MORE_INPUT;
- }
- *value = (1U << *value) + bits;
- s->substate_decode_uint8 = BROTLI_STATE_DECODE_UINT8_NONE;
- return BROTLI_DECODER_SUCCESS;
-
- default:
- return
- BROTLI_FAILURE(BROTLI_DECODER_ERROR_UNREACHABLE);
- }
-}
-
-/* Decodes a metablock length and flags by reading 2 - 31 bits. */
-static BrotliDecoderErrorCode BROTLI_NOINLINE DecodeMetaBlockLength(
- BrotliDecoderState* s, BrotliBitReader* br) {
- uint32_t bits;
- int i;
- for (;;) {
- switch (s->substate_metablock_header) {
- case BROTLI_STATE_METABLOCK_HEADER_NONE:
- if (!BrotliSafeReadBits(br, 1, &bits)) {
- return BROTLI_DECODER_NEEDS_MORE_INPUT;
- }
- s->is_last_metablock = bits ? 1 : 0;
- s->meta_block_remaining_len = 0;
- s->is_uncompressed = 0;
- s->is_metadata = 0;
- if (!s->is_last_metablock) {
- s->substate_metablock_header = BROTLI_STATE_METABLOCK_HEADER_NIBBLES;
- break;
- }
- s->substate_metablock_header = BROTLI_STATE_METABLOCK_HEADER_EMPTY;
- /* Fall through. */
-
- case BROTLI_STATE_METABLOCK_HEADER_EMPTY:
- if (!BrotliSafeReadBits(br, 1, &bits)) {
- return BROTLI_DECODER_NEEDS_MORE_INPUT;
- }
- if (bits) {
- s->substate_metablock_header = BROTLI_STATE_METABLOCK_HEADER_NONE;
- return BROTLI_DECODER_SUCCESS;
- }
- s->substate_metablock_header = BROTLI_STATE_METABLOCK_HEADER_NIBBLES;
- /* Fall through. */
-
- case BROTLI_STATE_METABLOCK_HEADER_NIBBLES:
- if (!BrotliSafeReadBits(br, 2, &bits)) {
- return BROTLI_DECODER_NEEDS_MORE_INPUT;
- }
- s->size_nibbles = (uint8_t)(bits + 4);
- s->loop_counter = 0;
- if (bits == 3) {
- s->is_metadata = 1;
- s->substate_metablock_header = BROTLI_STATE_METABLOCK_HEADER_RESERVED;
- break;
- }
- s->substate_metablock_header = BROTLI_STATE_METABLOCK_HEADER_SIZE;
- /* Fall through. */
-
- case BROTLI_STATE_METABLOCK_HEADER_SIZE:
- i = s->loop_counter;
- for (; i < (int)s->size_nibbles; ++i) {
- if (!BrotliSafeReadBits(br, 4, &bits)) {
- s->loop_counter = i;
- return BROTLI_DECODER_NEEDS_MORE_INPUT;
- }
- if (i + 1 == s->size_nibbles && s->size_nibbles > 4 && bits == 0) {
- return BROTLI_FAILURE(BROTLI_DECODER_ERROR_FORMAT_EXUBERANT_NIBBLE);
- }
- s->meta_block_remaining_len |= (int)(bits << (i * 4));
- }
- s->substate_metablock_header =
- BROTLI_STATE_METABLOCK_HEADER_UNCOMPRESSED;
- /* Fall through. */
-
- case BROTLI_STATE_METABLOCK_HEADER_UNCOMPRESSED:
- if (!s->is_last_metablock) {
- if (!BrotliSafeReadBits(br, 1, &bits)) {
- return BROTLI_DECODER_NEEDS_MORE_INPUT;
- }
- s->is_uncompressed = bits ? 1 : 0;
- }
- ++s->meta_block_remaining_len;
- s->substate_metablock_header = BROTLI_STATE_METABLOCK_HEADER_NONE;
- return BROTLI_DECODER_SUCCESS;
-
- case BROTLI_STATE_METABLOCK_HEADER_RESERVED:
- if (!BrotliSafeReadBits(br, 1, &bits)) {
- return BROTLI_DECODER_NEEDS_MORE_INPUT;
- }
- if (bits != 0) {
- return BROTLI_FAILURE(BROTLI_DECODER_ERROR_FORMAT_RESERVED);
- }
- s->substate_metablock_header = BROTLI_STATE_METABLOCK_HEADER_BYTES;
- /* Fall through. */
-
- case BROTLI_STATE_METABLOCK_HEADER_BYTES:
- if (!BrotliSafeReadBits(br, 2, &bits)) {
- return BROTLI_DECODER_NEEDS_MORE_INPUT;
- }
- if (bits == 0) {
- s->substate_metablock_header = BROTLI_STATE_METABLOCK_HEADER_NONE;
- return BROTLI_DECODER_SUCCESS;
- }
- s->size_nibbles = (uint8_t)bits;
- s->substate_metablock_header = BROTLI_STATE_METABLOCK_HEADER_METADATA;
- /* Fall through. */
-
- case BROTLI_STATE_METABLOCK_HEADER_METADATA:
- i = s->loop_counter;
- for (; i < (int)s->size_nibbles; ++i) {
- if (!BrotliSafeReadBits(br, 8, &bits)) {
- s->loop_counter = i;
- return BROTLI_DECODER_NEEDS_MORE_INPUT;
- }
- if (i + 1 == s->size_nibbles && s->size_nibbles > 1 && bits == 0) {
- return BROTLI_FAILURE(
- BROTLI_DECODER_ERROR_FORMAT_EXUBERANT_META_NIBBLE);
- }
- s->meta_block_remaining_len |= (int)(bits << (i * 8));
- }
- ++s->meta_block_remaining_len;
- s->substate_metablock_header = BROTLI_STATE_METABLOCK_HEADER_NONE;
- return BROTLI_DECODER_SUCCESS;
-
- default:
- return
- BROTLI_FAILURE(BROTLI_DECODER_ERROR_UNREACHABLE);
- }
- }
-}
-
-/* Decodes the Huffman code.
- This method doesn't read data from the bit reader, BUT drops the amount of
- bits that correspond to the decoded symbol.
- bits MUST contain at least 15 (BROTLI_HUFFMAN_MAX_CODE_LENGTH) valid bits. */
-static BROTLI_INLINE uint32_t DecodeSymbol(uint32_t bits,
- const HuffmanCode* table,
- BrotliBitReader* br) {
- table += bits & HUFFMAN_TABLE_MASK;
- if (table->bits > HUFFMAN_TABLE_BITS) {
- uint32_t nbits = table->bits - HUFFMAN_TABLE_BITS;
- BrotliDropBits(br, HUFFMAN_TABLE_BITS);
- table += table->value;
- table += (bits >> HUFFMAN_TABLE_BITS) & BitMask(nbits);
- }
- BrotliDropBits(br, table->bits);
- return table->value;
-}
-
-/* Reads and decodes the next Huffman code from bit-stream.
- This method peeks 16 bits of input and drops 0 - 15 of them. */
-static BROTLI_INLINE uint32_t ReadSymbol(const HuffmanCode* table,
- BrotliBitReader* br) {
- return DecodeSymbol(BrotliGet16BitsUnmasked(br), table, br);
-}
-
-/* Same as DecodeSymbol, but it is known that there is less than 15 bits of
- input are currently available. */
-static BROTLI_NOINLINE BROTLI_BOOL SafeDecodeSymbol(
- const HuffmanCode* table, BrotliBitReader* br, uint32_t* result) {
- uint32_t val;
- uint32_t available_bits = BrotliGetAvailableBits(br);
- if (available_bits == 0) {
- if (table->bits == 0) {
- *result = table->value;
- return BROTLI_TRUE;
- }
- return BROTLI_FALSE; /* No valid bits at all. */
- }
- val = (uint32_t)BrotliGetBitsUnmasked(br);
- table += val & HUFFMAN_TABLE_MASK;
- if (table->bits <= HUFFMAN_TABLE_BITS) {
- if (table->bits <= available_bits) {
- BrotliDropBits(br, table->bits);
- *result = table->value;
- return BROTLI_TRUE;
- } else {
- return BROTLI_FALSE; /* Not enough bits for the first level. */
- }
- }
- if (available_bits <= HUFFMAN_TABLE_BITS) {
- return BROTLI_FALSE; /* Not enough bits to move to the second level. */
- }
-
- /* Speculatively drop HUFFMAN_TABLE_BITS. */
- val = (val & BitMask(table->bits)) >> HUFFMAN_TABLE_BITS;
- available_bits -= HUFFMAN_TABLE_BITS;
- table += table->value + val;
- if (available_bits < table->bits) {
- return BROTLI_FALSE; /* Not enough bits for the second level. */
- }
-
- BrotliDropBits(br, HUFFMAN_TABLE_BITS + table->bits);
- *result = table->value;
- return BROTLI_TRUE;
-}
-
-static BROTLI_INLINE BROTLI_BOOL SafeReadSymbol(
- const HuffmanCode* table, BrotliBitReader* br, uint32_t* result) {
- uint32_t val;
- if (BROTLI_PREDICT_TRUE(BrotliSafeGetBits(br, 15, &val))) {
- *result = DecodeSymbol(val, table, br);
- return BROTLI_TRUE;
- }
- return SafeDecodeSymbol(table, br, result);
-}
-
-/* Makes a look-up in first level Huffman table. Peeks 8 bits. */
-static BROTLI_INLINE void PreloadSymbol(int safe,
- const HuffmanCode* table,
- BrotliBitReader* br,
- uint32_t* bits,
- uint32_t* value) {
- if (safe) {
- return;
- }
- table += BrotliGetBits(br, HUFFMAN_TABLE_BITS);
- *bits = table->bits;
- *value = table->value;
-}
-
-/* Decodes the next Huffman code using data prepared by PreloadSymbol.
- Reads 0 - 15 bits. Also peeks 8 following bits. */
-static BROTLI_INLINE uint32_t ReadPreloadedSymbol(const HuffmanCode* table,
- BrotliBitReader* br,
- uint32_t* bits,
- uint32_t* value) {
- uint32_t result = *value;
- if (BROTLI_PREDICT_FALSE(*bits > HUFFMAN_TABLE_BITS)) {
- uint32_t val = BrotliGet16BitsUnmasked(br);
- const HuffmanCode* ext = table + (val & HUFFMAN_TABLE_MASK) + *value;
- uint32_t mask = BitMask((*bits - HUFFMAN_TABLE_BITS));
- BrotliDropBits(br, HUFFMAN_TABLE_BITS);
- ext += (val >> HUFFMAN_TABLE_BITS) & mask;
- BrotliDropBits(br, ext->bits);
- result = ext->value;
- } else {
- BrotliDropBits(br, *bits);
- }
- PreloadSymbol(0, table, br, bits, value);
- return result;
-}
-
-static BROTLI_INLINE uint32_t Log2Floor(uint32_t x) {
- uint32_t result = 0;
- while (x) {
- x >>= 1;
- ++result;
- }
- return result;
-}
-
-/* Reads (s->symbol + 1) symbols.
- Totally 1..4 symbols are read, 1..11 bits each.
- The list of symbols MUST NOT contain duplicates. */
-static BrotliDecoderErrorCode ReadSimpleHuffmanSymbols(
- uint32_t alphabet_size, uint32_t max_symbol, BrotliDecoderState* s) {
- /* max_bits == 1..11; symbol == 0..3; 1..44 bits will be read. */
- BrotliBitReader* br = &s->br;
- uint32_t max_bits = Log2Floor(alphabet_size - 1);
- uint32_t i = s->sub_loop_counter;
- uint32_t num_symbols = s->symbol;
- while (i <= num_symbols) {
- uint32_t v;
- if (BROTLI_PREDICT_FALSE(!BrotliSafeReadBits(br, max_bits, &v))) {
- s->sub_loop_counter = i;
- s->substate_huffman = BROTLI_STATE_HUFFMAN_SIMPLE_READ;
- return BROTLI_DECODER_NEEDS_MORE_INPUT;
- }
- if (v >= max_symbol) {
- return
- BROTLI_FAILURE(BROTLI_DECODER_ERROR_FORMAT_SIMPLE_HUFFMAN_ALPHABET);
- }
- s->symbols_lists_array[i] = (uint16_t)v;
- BROTLI_LOG_UINT(s->symbols_lists_array[i]);
- ++i;
- }
-
- for (i = 0; i < num_symbols; ++i) {
- uint32_t k = i + 1;
- for (; k <= num_symbols; ++k) {
- if (s->symbols_lists_array[i] == s->symbols_lists_array[k]) {
- return BROTLI_FAILURE(BROTLI_DECODER_ERROR_FORMAT_SIMPLE_HUFFMAN_SAME);
- }
- }
- }
-
- return BROTLI_DECODER_SUCCESS;
-}
-
-/* Process single decoded symbol code length:
- A) reset the repeat variable
- B) remember code length (if it is not 0)
- C) extend corresponding index-chain
- D) reduce the Huffman space
- E) update the histogram */
-static BROTLI_INLINE void ProcessSingleCodeLength(uint32_t code_len,
- uint32_t* symbol, uint32_t* repeat, uint32_t* space,
- uint32_t* prev_code_len, uint16_t* symbol_lists,
- uint16_t* code_length_histo, int* next_symbol) {
- *repeat = 0;
- if (code_len != 0) { /* code_len == 1..15 */
- symbol_lists[next_symbol[code_len]] = (uint16_t)(*symbol);
- next_symbol[code_len] = (int)(*symbol);
- *prev_code_len = code_len;
- *space -= 32768U >> code_len;
- code_length_histo[code_len]++;
- BROTLI_LOG(("[ReadHuffmanCode] code_length[%d] = %d\n",
- (int)*symbol, (int)code_len));
- }
- (*symbol)++;
-}
-
-/* Process repeated symbol code length.
- A) Check if it is the extension of previous repeat sequence; if the decoded
- value is not BROTLI_REPEAT_PREVIOUS_CODE_LENGTH, then it is a new
- symbol-skip
- B) Update repeat variable
- C) Check if operation is feasible (fits alphabet)
- D) For each symbol do the same operations as in ProcessSingleCodeLength
-
- PRECONDITION: code_len == BROTLI_REPEAT_PREVIOUS_CODE_LENGTH or
- code_len == BROTLI_REPEAT_ZERO_CODE_LENGTH */
-static BROTLI_INLINE void ProcessRepeatedCodeLength(uint32_t code_len,
- uint32_t repeat_delta, uint32_t alphabet_size, uint32_t* symbol,
- uint32_t* repeat, uint32_t* space, uint32_t* prev_code_len,
- uint32_t* repeat_code_len, uint16_t* symbol_lists,
- uint16_t* code_length_histo, int* next_symbol) {
- uint32_t old_repeat;
- uint32_t extra_bits = 3; /* for BROTLI_REPEAT_ZERO_CODE_LENGTH */
- uint32_t new_len = 0; /* for BROTLI_REPEAT_ZERO_CODE_LENGTH */
- if (code_len == BROTLI_REPEAT_PREVIOUS_CODE_LENGTH) {
- new_len = *prev_code_len;
- extra_bits = 2;
- }
- if (*repeat_code_len != new_len) {
- *repeat = 0;
- *repeat_code_len = new_len;
- }
- old_repeat = *repeat;
- if (*repeat > 0) {
- *repeat -= 2;
- *repeat <<= extra_bits;
- }
- *repeat += repeat_delta + 3U;
- repeat_delta = *repeat - old_repeat;
- if (*symbol + repeat_delta > alphabet_size) {
- BROTLI_DUMP();
- *symbol = alphabet_size;
- *space = 0xFFFFF;
- return;
- }
- BROTLI_LOG(("[ReadHuffmanCode] code_length[%d..%d] = %d\n",
- (int)*symbol, (int)(*symbol + repeat_delta - 1), (int)*repeat_code_len));
- if (*repeat_code_len != 0) {
- unsigned last = *symbol + repeat_delta;
- int next = next_symbol[*repeat_code_len];
- do {
- symbol_lists[next] = (uint16_t)*symbol;
- next = (int)*symbol;
- } while (++(*symbol) != last);
- next_symbol[*repeat_code_len] = next;
- *space -= repeat_delta << (15 - *repeat_code_len);
- code_length_histo[*repeat_code_len] =
- (uint16_t)(code_length_histo[*repeat_code_len] + repeat_delta);
- } else {
- *symbol += repeat_delta;
- }
-}
-
-/* Reads and decodes symbol codelengths. */
-static BrotliDecoderErrorCode ReadSymbolCodeLengths(
- uint32_t alphabet_size, BrotliDecoderState* s) {
- BrotliBitReader* br = &s->br;
- uint32_t symbol = s->symbol;
- uint32_t repeat = s->repeat;
- uint32_t space = s->space;
- uint32_t prev_code_len = s->prev_code_len;
- uint32_t repeat_code_len = s->repeat_code_len;
- uint16_t* symbol_lists = s->symbol_lists;
- uint16_t* code_length_histo = s->code_length_histo;
- int* next_symbol = s->next_symbol;
- if (!BrotliWarmupBitReader(br)) {
- return BROTLI_DECODER_NEEDS_MORE_INPUT;
- }
- while (symbol < alphabet_size && space > 0) {
- const HuffmanCode* p = s->table;
- uint32_t code_len;
- if (!BrotliCheckInputAmount(br, BROTLI_SHORT_FILL_BIT_WINDOW_READ)) {
- s->symbol = symbol;
- s->repeat = repeat;
- s->prev_code_len = prev_code_len;
- s->repeat_code_len = repeat_code_len;
- s->space = space;
- return BROTLI_DECODER_NEEDS_MORE_INPUT;
- }
- BrotliFillBitWindow16(br);
- p += BrotliGetBitsUnmasked(br) &
- BitMask(BROTLI_HUFFMAN_MAX_CODE_LENGTH_CODE_LENGTH);
- BrotliDropBits(br, p->bits); /* Use 1..5 bits. */
- code_len = p->value; /* code_len == 0..17 */
- if (code_len < BROTLI_REPEAT_PREVIOUS_CODE_LENGTH) {
- ProcessSingleCodeLength(code_len, &symbol, &repeat, &space,
- &prev_code_len, symbol_lists, code_length_histo, next_symbol);
- } else { /* code_len == 16..17, extra_bits == 2..3 */
- uint32_t extra_bits =
- (code_len == BROTLI_REPEAT_PREVIOUS_CODE_LENGTH) ? 2 : 3;
- uint32_t repeat_delta =
- (uint32_t)BrotliGetBitsUnmasked(br) & BitMask(extra_bits);
- BrotliDropBits(br, extra_bits);
- ProcessRepeatedCodeLength(code_len, repeat_delta, alphabet_size,
- &symbol, &repeat, &space, &prev_code_len, &repeat_code_len,
- symbol_lists, code_length_histo, next_symbol);
- }
- }
- s->space = space;
- return BROTLI_DECODER_SUCCESS;
-}
-
-static BrotliDecoderErrorCode SafeReadSymbolCodeLengths(
- uint32_t alphabet_size, BrotliDecoderState* s) {
- BrotliBitReader* br = &s->br;
- BROTLI_BOOL get_byte = BROTLI_FALSE;
- while (s->symbol < alphabet_size && s->space > 0) {
- const HuffmanCode* p = s->table;
- uint32_t code_len;
- uint32_t available_bits;
- uint32_t bits = 0;
- if (get_byte && !BrotliPullByte(br)) return BROTLI_DECODER_NEEDS_MORE_INPUT;
- get_byte = BROTLI_FALSE;
- available_bits = BrotliGetAvailableBits(br);
- if (available_bits != 0) {
- bits = (uint32_t)BrotliGetBitsUnmasked(br);
- }
- p += bits & BitMask(BROTLI_HUFFMAN_MAX_CODE_LENGTH_CODE_LENGTH);
- if (p->bits > available_bits) {
- get_byte = BROTLI_TRUE;
- continue;
- }
- code_len = p->value; /* code_len == 0..17 */
- if (code_len < BROTLI_REPEAT_PREVIOUS_CODE_LENGTH) {
- BrotliDropBits(br, p->bits);
- ProcessSingleCodeLength(code_len, &s->symbol, &s->repeat, &s->space,
- &s->prev_code_len, s->symbol_lists, s->code_length_histo,
- s->next_symbol);
- } else { /* code_len == 16..17, extra_bits == 2..3 */
- uint32_t extra_bits = code_len - 14U;
- uint32_t repeat_delta = (bits >> p->bits) & BitMask(extra_bits);
- if (available_bits < p->bits + extra_bits) {
- get_byte = BROTLI_TRUE;
- continue;
- }
- BrotliDropBits(br, p->bits + extra_bits);
- ProcessRepeatedCodeLength(code_len, repeat_delta, alphabet_size,
- &s->symbol, &s->repeat, &s->space, &s->prev_code_len,
- &s->repeat_code_len, s->symbol_lists, s->code_length_histo,
- s->next_symbol);
- }
- }
- return BROTLI_DECODER_SUCCESS;
-}
-
-/* Reads and decodes 15..18 codes using static prefix code.
- Each code is 2..4 bits long. In total 30..72 bits are used. */
-static BrotliDecoderErrorCode ReadCodeLengthCodeLengths(BrotliDecoderState* s) {
- BrotliBitReader* br = &s->br;
- uint32_t num_codes = s->repeat;
- unsigned space = s->space;
- uint32_t i = s->sub_loop_counter;
- for (; i < BROTLI_CODE_LENGTH_CODES; ++i) {
- const uint8_t code_len_idx = kCodeLengthCodeOrder[i];
- uint32_t ix;
- uint32_t v;
- if (BROTLI_PREDICT_FALSE(!BrotliSafeGetBits(br, 4, &ix))) {
- uint32_t available_bits = BrotliGetAvailableBits(br);
- if (available_bits != 0) {
- ix = BrotliGetBitsUnmasked(br) & 0xF;
- } else {
- ix = 0;
- }
- if (kCodeLengthPrefixLength[ix] > available_bits) {
- s->sub_loop_counter = i;
- s->repeat = num_codes;
- s->space = space;
- s->substate_huffman = BROTLI_STATE_HUFFMAN_COMPLEX;
- return BROTLI_DECODER_NEEDS_MORE_INPUT;
- }
- }
- v = kCodeLengthPrefixValue[ix];
- BrotliDropBits(br, kCodeLengthPrefixLength[ix]);
- s->code_length_code_lengths[code_len_idx] = (uint8_t)v;
- BROTLI_LOG_ARRAY_INDEX(s->code_length_code_lengths, code_len_idx);
- if (v != 0) {
- space = space - (32U >> v);
- ++num_codes;
- ++s->code_length_histo[v];
- if (space - 1U >= 32U) {
- /* space is 0 or wrapped around. */
- break;
- }
- }
- }
- if (!(num_codes == 1 || space == 0)) {
- return BROTLI_FAILURE(BROTLI_DECODER_ERROR_FORMAT_CL_SPACE);
- }
- return BROTLI_DECODER_SUCCESS;
-}
-
-/* Decodes the Huffman tables.
- There are 2 scenarios:
- A) Huffman code contains only few symbols (1..4). Those symbols are read
- directly; their code lengths are defined by the number of symbols.
- For this scenario 4 - 49 bits will be read.
-
- B) 2-phase decoding:
- B.1) Small Huffman table is decoded; it is specified with code lengths
- encoded with predefined entropy code. 32 - 74 bits are used.
- B.2) Decoded table is used to decode code lengths of symbols in resulting
- Huffman table. In worst case 3520 bits are read. */
-static BrotliDecoderErrorCode ReadHuffmanCode(uint32_t alphabet_size,
- uint32_t max_symbol,
- HuffmanCode* table,
- uint32_t* opt_table_size,
- BrotliDecoderState* s) {
- BrotliBitReader* br = &s->br;
- /* Unnecessary masking, but might be good for safety. */
- alphabet_size &= 0x7FF;
- /* State machine. */
- for (;;) {
- switch (s->substate_huffman) {
- case BROTLI_STATE_HUFFMAN_NONE:
- if (!BrotliSafeReadBits(br, 2, &s->sub_loop_counter)) {
- return BROTLI_DECODER_NEEDS_MORE_INPUT;
- }
- BROTLI_LOG_UINT(s->sub_loop_counter);
- /* The value is used as follows:
- 1 for simple code;
- 0 for no skipping, 2 skips 2 code lengths, 3 skips 3 code lengths */
- if (s->sub_loop_counter != 1) {
- s->space = 32;
- s->repeat = 0; /* num_codes */
- memset(&s->code_length_histo[0], 0, sizeof(s->code_length_histo[0]) *
- (BROTLI_HUFFMAN_MAX_CODE_LENGTH_CODE_LENGTH + 1));
- memset(&s->code_length_code_lengths[0], 0,
- sizeof(s->code_length_code_lengths));
- s->substate_huffman = BROTLI_STATE_HUFFMAN_COMPLEX;
- continue;
- }
- /* Fall through. */
-
- case BROTLI_STATE_HUFFMAN_SIMPLE_SIZE:
- /* Read symbols, codes & code lengths directly. */
- if (!BrotliSafeReadBits(br, 2, &s->symbol)) { /* num_symbols */
- s->substate_huffman = BROTLI_STATE_HUFFMAN_SIMPLE_SIZE;
- return BROTLI_DECODER_NEEDS_MORE_INPUT;
- }
- s->sub_loop_counter = 0;
- /* Fall through. */
-
- case BROTLI_STATE_HUFFMAN_SIMPLE_READ: {
- BrotliDecoderErrorCode result =
- ReadSimpleHuffmanSymbols(alphabet_size, max_symbol, s);
- if (result != BROTLI_DECODER_SUCCESS) {
- return result;
- }
- }
- /* Fall through. */
-
- case BROTLI_STATE_HUFFMAN_SIMPLE_BUILD: {
- uint32_t table_size;
- if (s->symbol == 3) {
- uint32_t bits;
- if (!BrotliSafeReadBits(br, 1, &bits)) {
- s->substate_huffman = BROTLI_STATE_HUFFMAN_SIMPLE_BUILD;
- return BROTLI_DECODER_NEEDS_MORE_INPUT;
- }
- s->symbol += bits;
- }
- BROTLI_LOG_UINT(s->symbol);
- table_size = BrotliBuildSimpleHuffmanTable(
- table, HUFFMAN_TABLE_BITS, s->symbols_lists_array, s->symbol);
- if (opt_table_size) {
- *opt_table_size = table_size;
- }
- s->substate_huffman = BROTLI_STATE_HUFFMAN_NONE;
- return BROTLI_DECODER_SUCCESS;
- }
-
- /* Decode Huffman-coded code lengths. */
- case BROTLI_STATE_HUFFMAN_COMPLEX: {
- uint32_t i;
- BrotliDecoderErrorCode result = ReadCodeLengthCodeLengths(s);
- if (result != BROTLI_DECODER_SUCCESS) {
- return result;
- }
- BrotliBuildCodeLengthsHuffmanTable(s->table,
- s->code_length_code_lengths,
- s->code_length_histo);
- memset(&s->code_length_histo[0], 0, sizeof(s->code_length_histo));
- for (i = 0; i <= BROTLI_HUFFMAN_MAX_CODE_LENGTH; ++i) {
- s->next_symbol[i] = (int)i - (BROTLI_HUFFMAN_MAX_CODE_LENGTH + 1);
- s->symbol_lists[s->next_symbol[i]] = 0xFFFF;
- }
-
- s->symbol = 0;
- s->prev_code_len = BROTLI_INITIAL_REPEATED_CODE_LENGTH;
- s->repeat = 0;
- s->repeat_code_len = 0;
- s->space = 32768;
- s->substate_huffman = BROTLI_STATE_HUFFMAN_LENGTH_SYMBOLS;
- }
- /* Fall through. */
-
- case BROTLI_STATE_HUFFMAN_LENGTH_SYMBOLS: {
- uint32_t table_size;
- BrotliDecoderErrorCode result = ReadSymbolCodeLengths(max_symbol, s);
- if (result == BROTLI_DECODER_NEEDS_MORE_INPUT) {
- result = SafeReadSymbolCodeLengths(max_symbol, s);
- }
- if (result != BROTLI_DECODER_SUCCESS) {
- return result;
- }
-
- if (s->space != 0) {
- BROTLI_LOG(("[ReadHuffmanCode] space = %d\n", (int)s->space));
- return BROTLI_FAILURE(BROTLI_DECODER_ERROR_FORMAT_HUFFMAN_SPACE);
- }
- table_size = BrotliBuildHuffmanTable(
- table, HUFFMAN_TABLE_BITS, s->symbol_lists, s->code_length_histo);
- if (opt_table_size) {
- *opt_table_size = table_size;
- }
- s->substate_huffman = BROTLI_STATE_HUFFMAN_NONE;
- return BROTLI_DECODER_SUCCESS;
- }
-
- default:
- return
- BROTLI_FAILURE(BROTLI_DECODER_ERROR_UNREACHABLE);
- }
- }
-}
-
-/* Decodes a block length by reading 3..39 bits. */
-static BROTLI_INLINE uint32_t ReadBlockLength(const HuffmanCode* table,
- BrotliBitReader* br) {
- uint32_t code;
- uint32_t nbits;
- code = ReadSymbol(table, br);
- nbits = kBlockLengthPrefixCode[code].nbits; /* nbits == 2..24 */
- return kBlockLengthPrefixCode[code].offset + BrotliReadBits(br, nbits);
-}
-
-/* WARNING: if state is not BROTLI_STATE_READ_BLOCK_LENGTH_NONE, then
- reading can't be continued with ReadBlockLength. */
-static BROTLI_INLINE BROTLI_BOOL SafeReadBlockLength(
- BrotliDecoderState* s, uint32_t* result, const HuffmanCode* table,
- BrotliBitReader* br) {
- uint32_t index;
- if (s->substate_read_block_length == BROTLI_STATE_READ_BLOCK_LENGTH_NONE) {
- if (!SafeReadSymbol(table, br, &index)) {
- return BROTLI_FALSE;
- }
- } else {
- index = s->block_length_index;
- }
- {
- uint32_t bits;
- uint32_t nbits = kBlockLengthPrefixCode[index].nbits; /* nbits == 2..24 */
- if (!BrotliSafeReadBits(br, nbits, &bits)) {
- s->block_length_index = index;
- s->substate_read_block_length = BROTLI_STATE_READ_BLOCK_LENGTH_SUFFIX;
- return BROTLI_FALSE;
- }
- *result = kBlockLengthPrefixCode[index].offset + bits;
- s->substate_read_block_length = BROTLI_STATE_READ_BLOCK_LENGTH_NONE;
- return BROTLI_TRUE;
- }
-}
-
-/* Transform:
- 1) initialize list L with values 0, 1,... 255
- 2) For each input element X:
- 2.1) let Y = L[X]
- 2.2) remove X-th element from L
- 2.3) prepend Y to L
- 2.4) append Y to output
-
- In most cases max(Y) <= 7, so most of L remains intact.
- To reduce the cost of initialization, we reuse L, remember the upper bound
- of Y values, and reinitialize only first elements in L.
-
- Most of input values are 0 and 1. To reduce number of branches, we replace
- inner for loop with do-while. */
-static BROTLI_NOINLINE void InverseMoveToFrontTransform(
- uint8_t* v, uint32_t v_len, BrotliDecoderState* state) {
- /* Reinitialize elements that could have been changed. */
- uint32_t i = 1;
- uint32_t upper_bound = state->mtf_upper_bound;
- uint32_t* mtf = &state->mtf[1]; /* Make mtf[-1] addressable. */
- uint8_t* mtf_u8 = (uint8_t*)mtf;
- /* Load endian-aware constant. */
- const uint8_t b0123[4] = {0, 1, 2, 3};
- uint32_t pattern;
- memcpy(&pattern, &b0123, 4);
-
- /* Initialize list using 4 consequent values pattern. */
- mtf[0] = pattern;
- do {
- pattern += 0x04040404; /* Advance all 4 values by 4. */
- mtf[i] = pattern;
- i++;
- } while (i <= upper_bound);
-
- /* Transform the input. */
- upper_bound = 0;
- for (i = 0; i < v_len; ++i) {
- int index = v[i];
- uint8_t value = mtf_u8[index];
- upper_bound |= v[i];
- v[i] = value;
- mtf_u8[-1] = value;
- do {
- index--;
- mtf_u8[index + 1] = mtf_u8[index];
- } while (index >= 0);
- }
- /* Remember amount of elements to be reinitialized. */
- state->mtf_upper_bound = upper_bound >> 2;
-}
-
-/* Decodes a series of Huffman table using ReadHuffmanCode function. */
-static BrotliDecoderErrorCode HuffmanTreeGroupDecode(
- HuffmanTreeGroup* group, BrotliDecoderState* s) {
- if (s->substate_tree_group != BROTLI_STATE_TREE_GROUP_LOOP) {
- s->next = group->codes;
- s->htree_index = 0;
- s->substate_tree_group = BROTLI_STATE_TREE_GROUP_LOOP;
- }
- while (s->htree_index < group->num_htrees) {
- uint32_t table_size;
- BrotliDecoderErrorCode result =
- ReadHuffmanCode(group->alphabet_size, group->max_symbol,
- s->next, &table_size, s);
- if (result != BROTLI_DECODER_SUCCESS) return result;
- group->htrees[s->htree_index] = s->next;
- s->next += table_size;
- ++s->htree_index;
- }
- s->substate_tree_group = BROTLI_STATE_TREE_GROUP_NONE;
- return BROTLI_DECODER_SUCCESS;
-}
-
-/* Decodes a context map.
- Decoding is done in 4 phases:
- 1) Read auxiliary information (6..16 bits) and allocate memory.
- In case of trivial context map, decoding is finished at this phase.
- 2) Decode Huffman table using ReadHuffmanCode function.
- This table will be used for reading context map items.
- 3) Read context map items; "0" values could be run-length encoded.
- 4) Optionally, apply InverseMoveToFront transform to the resulting map. */
-static BrotliDecoderErrorCode DecodeContextMap(uint32_t context_map_size,
- uint32_t* num_htrees,
- uint8_t** context_map_arg,
- BrotliDecoderState* s) {
- BrotliBitReader* br = &s->br;
- BrotliDecoderErrorCode result = BROTLI_DECODER_SUCCESS;
-
- switch ((int)s->substate_context_map) {
- case BROTLI_STATE_CONTEXT_MAP_NONE:
- result = DecodeVarLenUint8(s, br, num_htrees);
- if (result != BROTLI_DECODER_SUCCESS) {
- return result;
- }
- (*num_htrees)++;
- s->context_index = 0;
- BROTLI_LOG_UINT(context_map_size);
- BROTLI_LOG_UINT(*num_htrees);
- *context_map_arg =
- (uint8_t*)BROTLI_DECODER_ALLOC(s, (size_t)context_map_size);
- if (*context_map_arg == 0) {
- return BROTLI_FAILURE(BROTLI_DECODER_ERROR_ALLOC_CONTEXT_MAP);
- }
- if (*num_htrees <= 1) {
- memset(*context_map_arg, 0, (size_t)context_map_size);
- return BROTLI_DECODER_SUCCESS;
- }
- s->substate_context_map = BROTLI_STATE_CONTEXT_MAP_READ_PREFIX;
- /* Fall through. */
-
- case BROTLI_STATE_CONTEXT_MAP_READ_PREFIX: {
- uint32_t bits;
- /* In next stage ReadHuffmanCode uses at least 4 bits, so it is safe
- to peek 4 bits ahead. */
- if (!BrotliSafeGetBits(br, 5, &bits)) {
- return BROTLI_DECODER_NEEDS_MORE_INPUT;
- }
- if ((bits & 1) != 0) { /* Use RLE for zeros. */
- s->max_run_length_prefix = (bits >> 1) + 1;
- BrotliDropBits(br, 5);
- } else {
- s->max_run_length_prefix = 0;
- BrotliDropBits(br, 1);
- }
- BROTLI_LOG_UINT(s->max_run_length_prefix);
- s->substate_context_map = BROTLI_STATE_CONTEXT_MAP_HUFFMAN;
- }
- /* Fall through. */
-
- case BROTLI_STATE_CONTEXT_MAP_HUFFMAN: {
- uint32_t alphabet_size = *num_htrees + s->max_run_length_prefix;
- result = ReadHuffmanCode(alphabet_size, alphabet_size,
- s->context_map_table, NULL, s);
- if (result != BROTLI_DECODER_SUCCESS) return result;
- s->code = 0xFFFF;
- s->substate_context_map = BROTLI_STATE_CONTEXT_MAP_DECODE;
- }
- /* Fall through. */
-
- case BROTLI_STATE_CONTEXT_MAP_DECODE: {
- uint32_t context_index = s->context_index;
- uint32_t max_run_length_prefix = s->max_run_length_prefix;
- uint8_t* context_map = *context_map_arg;
- uint32_t code = s->code;
- BROTLI_BOOL skip_preamble = (code != 0xFFFF);
- while (context_index < context_map_size || skip_preamble) {
- if (!skip_preamble) {
- if (!SafeReadSymbol(s->context_map_table, br, &code)) {
- s->code = 0xFFFF;
- s->context_index = context_index;
- return BROTLI_DECODER_NEEDS_MORE_INPUT;
- }
- BROTLI_LOG_UINT(code);
-
- if (code == 0) {
- context_map[context_index++] = 0;
- continue;
- }
- if (code > max_run_length_prefix) {
- context_map[context_index++] =
- (uint8_t)(code - max_run_length_prefix);
- continue;
- }
- } else {
- skip_preamble = BROTLI_FALSE;
- }
- /* RLE sub-stage. */
- {
- uint32_t reps;
- if (!BrotliSafeReadBits(br, code, &reps)) {
- s->code = code;
- s->context_index = context_index;
- return BROTLI_DECODER_NEEDS_MORE_INPUT;
- }
- reps += 1U << code;
- BROTLI_LOG_UINT(reps);
- if (context_index + reps > context_map_size) {
- return
- BROTLI_FAILURE(BROTLI_DECODER_ERROR_FORMAT_CONTEXT_MAP_REPEAT);
- }
- do {
- context_map[context_index++] = 0;
- } while (--reps);
- }
- }
- }
- /* Fall through. */
-
- case BROTLI_STATE_CONTEXT_MAP_TRANSFORM: {
- uint32_t bits;
- if (!BrotliSafeReadBits(br, 1, &bits)) {
- s->substate_context_map = BROTLI_STATE_CONTEXT_MAP_TRANSFORM;
- return BROTLI_DECODER_NEEDS_MORE_INPUT;
- }
- if (bits != 0) {
- InverseMoveToFrontTransform(*context_map_arg, context_map_size, s);
- }
- s->substate_context_map = BROTLI_STATE_CONTEXT_MAP_NONE;
- return BROTLI_DECODER_SUCCESS;
- }
-
- default:
- return
- BROTLI_FAILURE(BROTLI_DECODER_ERROR_UNREACHABLE);
- }
-}
-
-/* Decodes a command or literal and updates block type ring-buffer.
- Reads 3..54 bits. */
-static BROTLI_INLINE BROTLI_BOOL DecodeBlockTypeAndLength(
- int safe, BrotliDecoderState* s, int tree_type) {
- uint32_t max_block_type = s->num_block_types[tree_type];
- const HuffmanCode* type_tree = &s->block_type_trees[
- tree_type * BROTLI_HUFFMAN_MAX_SIZE_258];
- const HuffmanCode* len_tree = &s->block_len_trees[
- tree_type * BROTLI_HUFFMAN_MAX_SIZE_26];
- BrotliBitReader* br = &s->br;
- uint32_t* ringbuffer = &s->block_type_rb[tree_type * 2];
- uint32_t block_type;
- if (max_block_type <= 1) {
- return BROTLI_FALSE;
- }
-
- /* Read 0..15 + 3..39 bits. */
- if (!safe) {
- block_type = ReadSymbol(type_tree, br);
- s->block_length[tree_type] = ReadBlockLength(len_tree, br);
- } else {
- BrotliBitReaderState memento;
- BrotliBitReaderSaveState(br, &memento);
- if (!SafeReadSymbol(type_tree, br, &block_type)) return BROTLI_FALSE;
- if (!SafeReadBlockLength(s, &s->block_length[tree_type], len_tree, br)) {
- s->substate_read_block_length = BROTLI_STATE_READ_BLOCK_LENGTH_NONE;
- BrotliBitReaderRestoreState(br, &memento);
- return BROTLI_FALSE;
- }
- }
-
- if (block_type == 1) {
- block_type = ringbuffer[1] + 1;
- } else if (block_type == 0) {
- block_type = ringbuffer[0];
- } else {
- block_type -= 2;
- }
- if (block_type >= max_block_type) {
- block_type -= max_block_type;
- }
- ringbuffer[0] = ringbuffer[1];
- ringbuffer[1] = block_type;
- return BROTLI_TRUE;
-}
-
-static BROTLI_INLINE void DetectTrivialLiteralBlockTypes(
- BrotliDecoderState* s) {
- size_t i;
- for (i = 0; i < 8; ++i) s->trivial_literal_contexts[i] = 0;
- for (i = 0; i < s->num_block_types[0]; i++) {
- size_t offset = i << BROTLI_LITERAL_CONTEXT_BITS;
- size_t error = 0;
- size_t sample = s->context_map[offset];
- size_t j;
- for (j = 0; j < (1u << BROTLI_LITERAL_CONTEXT_BITS);) {
- BROTLI_REPEAT(4, error |= s->context_map[offset + j++] ^ sample;)
- }
- if (error == 0) {
- s->trivial_literal_contexts[i >> 5] |= 1u << (i & 31);
- }
- }
-}
-
-static BROTLI_INLINE void PrepareLiteralDecoding(BrotliDecoderState* s) {
- uint8_t context_mode;
- size_t trivial;
- uint32_t block_type = s->block_type_rb[1];
- uint32_t context_offset = block_type << BROTLI_LITERAL_CONTEXT_BITS;
- s->context_map_slice = s->context_map + context_offset;
- trivial = s->trivial_literal_contexts[block_type >> 5];
- s->trivial_literal_context = (trivial >> (block_type & 31)) & 1;
- s->literal_htree = s->literal_hgroup.htrees[s->context_map_slice[0]];
- context_mode = s->context_modes[block_type] & 3;
- s->context_lookup = BROTLI_CONTEXT_LUT(context_mode);
-}
-
-/* Decodes the block type and updates the state for literal context.
- Reads 3..54 bits. */
-static BROTLI_INLINE BROTLI_BOOL DecodeLiteralBlockSwitchInternal(
- int safe, BrotliDecoderState* s) {
- if (!DecodeBlockTypeAndLength(safe, s, 0)) {
- return BROTLI_FALSE;
- }
- PrepareLiteralDecoding(s);
- return BROTLI_TRUE;
-}
-
-static void BROTLI_NOINLINE DecodeLiteralBlockSwitch(BrotliDecoderState* s) {
- DecodeLiteralBlockSwitchInternal(0, s);
-}
-
-static BROTLI_BOOL BROTLI_NOINLINE SafeDecodeLiteralBlockSwitch(
- BrotliDecoderState* s) {
- return DecodeLiteralBlockSwitchInternal(1, s);
-}
-
-/* Block switch for insert/copy length.
- Reads 3..54 bits. */
-static BROTLI_INLINE BROTLI_BOOL DecodeCommandBlockSwitchInternal(
- int safe, BrotliDecoderState* s) {
- if (!DecodeBlockTypeAndLength(safe, s, 1)) {
- return BROTLI_FALSE;
- }
- s->htree_command = s->insert_copy_hgroup.htrees[s->block_type_rb[3]];
- return BROTLI_TRUE;
-}
-
-static void BROTLI_NOINLINE DecodeCommandBlockSwitch(BrotliDecoderState* s) {
- DecodeCommandBlockSwitchInternal(0, s);
-}
-
-static BROTLI_BOOL BROTLI_NOINLINE SafeDecodeCommandBlockSwitch(
- BrotliDecoderState* s) {
- return DecodeCommandBlockSwitchInternal(1, s);
-}
-
-/* Block switch for distance codes.
- Reads 3..54 bits. */
-static BROTLI_INLINE BROTLI_BOOL DecodeDistanceBlockSwitchInternal(
- int safe, BrotliDecoderState* s) {
- if (!DecodeBlockTypeAndLength(safe, s, 2)) {
- return BROTLI_FALSE;
- }
- s->dist_context_map_slice = s->dist_context_map +
- (s->block_type_rb[5] << BROTLI_DISTANCE_CONTEXT_BITS);
- s->dist_htree_index = s->dist_context_map_slice[s->distance_context];
- return BROTLI_TRUE;
-}
-
-static void BROTLI_NOINLINE DecodeDistanceBlockSwitch(BrotliDecoderState* s) {
- DecodeDistanceBlockSwitchInternal(0, s);
-}
-
-static BROTLI_BOOL BROTLI_NOINLINE SafeDecodeDistanceBlockSwitch(
- BrotliDecoderState* s) {
- return DecodeDistanceBlockSwitchInternal(1, s);
-}
-
-static size_t UnwrittenBytes(const BrotliDecoderState* s, BROTLI_BOOL wrap) {
- size_t pos = wrap && s->pos > s->ringbuffer_size ?
- (size_t)s->ringbuffer_size : (size_t)(s->pos);
- size_t partial_pos_rb = (s->rb_roundtrips * (size_t)s->ringbuffer_size) + pos;
- return partial_pos_rb - s->partial_pos_out;
-}
-
-/* Dumps output.
- Returns BROTLI_DECODER_NEEDS_MORE_OUTPUT only if there is more output to push
- and either ring-buffer is as big as window size, or |force| is true. */
-static BrotliDecoderErrorCode BROTLI_NOINLINE WriteRingBuffer(
- BrotliDecoderState* s, size_t* available_out, uint8_t** next_out,
- size_t* total_out, BROTLI_BOOL force) {
- uint8_t* start =
- s->ringbuffer + (s->partial_pos_out & (size_t)s->ringbuffer_mask);
- size_t to_write = UnwrittenBytes(s, BROTLI_TRUE);
- size_t num_written = *available_out;
- if (num_written > to_write) {
- num_written = to_write;
- }
- if (s->meta_block_remaining_len < 0) {
- return BROTLI_FAILURE(BROTLI_DECODER_ERROR_FORMAT_BLOCK_LENGTH_1);
- }
- if (next_out && !*next_out) {
- *next_out = start;
- } else {
- if (next_out) {
- memcpy(*next_out, start, num_written);
- *next_out += num_written;
- }
- }
- *available_out -= num_written;
- BROTLI_LOG_UINT(to_write);
- BROTLI_LOG_UINT(num_written);
- s->partial_pos_out += num_written;
- if (total_out) {
- *total_out = s->partial_pos_out;
- }
- if (num_written < to_write) {
- if (s->ringbuffer_size == (1 << s->window_bits) || force) {
- return BROTLI_DECODER_NEEDS_MORE_OUTPUT;
- } else {
- return BROTLI_DECODER_SUCCESS;
- }
- }
- /* Wrap ring buffer only if it has reached its maximal size. */
- if (s->ringbuffer_size == (1 << s->window_bits) &&
- s->pos >= s->ringbuffer_size) {
- s->pos -= s->ringbuffer_size;
- s->rb_roundtrips++;
- s->should_wrap_ringbuffer = (size_t)s->pos != 0 ? 1 : 0;
- }
- return BROTLI_DECODER_SUCCESS;
-}
-
-static void BROTLI_NOINLINE WrapRingBuffer(BrotliDecoderState* s) {
- if (s->should_wrap_ringbuffer) {
- memcpy(s->ringbuffer, s->ringbuffer_end, (size_t)s->pos);
- s->should_wrap_ringbuffer = 0;
- }
-}
-
-/* Allocates ring-buffer.
-
- s->ringbuffer_size MUST be updated by BrotliCalculateRingBufferSize before
- this function is called.
-
- Last two bytes of ring-buffer are initialized to 0, so context calculation
- could be done uniformly for the first two and all other positions. */
-static BROTLI_BOOL BROTLI_NOINLINE BrotliEnsureRingBuffer(
- BrotliDecoderState* s) {
- uint8_t* old_ringbuffer = s->ringbuffer;
- if (s->ringbuffer_size == s->new_ringbuffer_size) {
- return BROTLI_TRUE;
- }
-
- s->ringbuffer = (uint8_t*)BROTLI_DECODER_ALLOC(s,
- (size_t)(s->new_ringbuffer_size) + kRingBufferWriteAheadSlack);
- if (s->ringbuffer == 0) {
- /* Restore previous value. */
- s->ringbuffer = old_ringbuffer;
- return BROTLI_FALSE;
- }
- s->ringbuffer[s->new_ringbuffer_size - 2] = 0;
- s->ringbuffer[s->new_ringbuffer_size - 1] = 0;
-
- if (!!old_ringbuffer) {
- memcpy(s->ringbuffer, old_ringbuffer, (size_t)s->pos);
- BROTLI_DECODER_FREE(s, old_ringbuffer);
- }
-
- s->ringbuffer_size = s->new_ringbuffer_size;
- s->ringbuffer_mask = s->new_ringbuffer_size - 1;
- s->ringbuffer_end = s->ringbuffer + s->ringbuffer_size;
-
- return BROTLI_TRUE;
-}
-
-static BrotliDecoderErrorCode BROTLI_NOINLINE CopyUncompressedBlockToOutput(
- size_t* available_out, uint8_t** next_out, size_t* total_out,
- BrotliDecoderState* s) {
- /* TODO: avoid allocation for single uncompressed block. */
- if (!BrotliEnsureRingBuffer(s)) {
- return BROTLI_FAILURE(BROTLI_DECODER_ERROR_ALLOC_RING_BUFFER_1);
- }
-
- /* State machine */
- for (;;) {
- switch (s->substate_uncompressed) {
- case BROTLI_STATE_UNCOMPRESSED_NONE: {
- int nbytes = (int)BrotliGetRemainingBytes(&s->br);
- if (nbytes > s->meta_block_remaining_len) {
- nbytes = s->meta_block_remaining_len;
- }
- if (s->pos + nbytes > s->ringbuffer_size) {
- nbytes = s->ringbuffer_size - s->pos;
- }
- /* Copy remaining bytes from s->br.buf_ to ring-buffer. */
- BrotliCopyBytes(&s->ringbuffer[s->pos], &s->br, (size_t)nbytes);
- s->pos += nbytes;
- s->meta_block_remaining_len -= nbytes;
- if (s->pos < 1 << s->window_bits) {
- if (s->meta_block_remaining_len == 0) {
- return BROTLI_DECODER_SUCCESS;
- }
- return BROTLI_DECODER_NEEDS_MORE_INPUT;
- }
- s->substate_uncompressed = BROTLI_STATE_UNCOMPRESSED_WRITE;
- }
- /* Fall through. */
-
- case BROTLI_STATE_UNCOMPRESSED_WRITE: {
- BrotliDecoderErrorCode result;
- result = WriteRingBuffer(
- s, available_out, next_out, total_out, BROTLI_FALSE);
- if (result != BROTLI_DECODER_SUCCESS) {
- return result;
- }
- if (s->ringbuffer_size == 1 << s->window_bits) {
- s->max_distance = s->max_backward_distance;
- }
- s->substate_uncompressed = BROTLI_STATE_UNCOMPRESSED_NONE;
- break;
- }
- }
- }
- BROTLI_DCHECK(0); /* Unreachable */
-}
-
-/* Calculates the smallest feasible ring buffer.
-
- If we know the data size is small, do not allocate more ring buffer
- size than needed to reduce memory usage.
-
- When this method is called, metablock size and flags MUST be decoded. */
-static void BROTLI_NOINLINE BrotliCalculateRingBufferSize(
- BrotliDecoderState* s) {
- int window_size = 1 << s->window_bits;
- int new_ringbuffer_size = window_size;
- /* We need at least 2 bytes of ring buffer size to get the last two
- bytes for context from there */
- int min_size = s->ringbuffer_size ? s->ringbuffer_size : 1024;
- int output_size;
-
- /* If maximum is already reached, no further extension is retired. */
- if (s->ringbuffer_size == window_size) {
- return;
- }
-
- /* Metadata blocks does not touch ring buffer. */
- if (s->is_metadata) {
- return;
- }
-
- if (!s->ringbuffer) {
- output_size = 0;
- } else {
- output_size = s->pos;
- }
- output_size += s->meta_block_remaining_len;
- min_size = min_size < output_size ? output_size : min_size;
-
- if (!!s->canny_ringbuffer_allocation) {
- /* Reduce ring buffer size to save memory when server is unscrupulous.
- In worst case memory usage might be 1.5x bigger for a short period of
- ring buffer reallocation. */
- while ((new_ringbuffer_size >> 1) >= min_size) {
- new_ringbuffer_size >>= 1;
- }
- }
-
- s->new_ringbuffer_size = new_ringbuffer_size;
-}
-
-/* Reads 1..256 2-bit context modes. */
-static BrotliDecoderErrorCode ReadContextModes(BrotliDecoderState* s) {
- BrotliBitReader* br = &s->br;
- int i = s->loop_counter;
-
- while (i < (int)s->num_block_types[0]) {
- uint32_t bits;
- if (!BrotliSafeReadBits(br, 2, &bits)) {
- s->loop_counter = i;
- return BROTLI_DECODER_NEEDS_MORE_INPUT;
- }
- s->context_modes[i] = (uint8_t)bits;
- BROTLI_LOG_ARRAY_INDEX(s->context_modes, i);
- i++;
- }
- return BROTLI_DECODER_SUCCESS;
-}
-
-static BROTLI_INLINE void TakeDistanceFromRingBuffer(BrotliDecoderState* s) {
- if (s->distance_code == 0) {
- --s->dist_rb_idx;
- s->distance_code = s->dist_rb[s->dist_rb_idx & 3];
- /* Compensate double distance-ring-buffer roll for dictionary items. */
- s->distance_context = 1;
- } else {
- int distance_code = s->distance_code << 1;
- /* kDistanceShortCodeIndexOffset has 2-bit values from LSB:
- 3, 2, 1, 0, 3, 3, 3, 3, 3, 3, 2, 2, 2, 2, 2, 2 */
- const uint32_t kDistanceShortCodeIndexOffset = 0xAAAFFF1B;
- /* kDistanceShortCodeValueOffset has 2-bit values from LSB:
- -0, 0,-0, 0,-1, 1,-2, 2,-3, 3,-1, 1,-2, 2,-3, 3 */
- const uint32_t kDistanceShortCodeValueOffset = 0xFA5FA500;
- int v = (s->dist_rb_idx +
- (int)(kDistanceShortCodeIndexOffset >> distance_code)) & 0x3;
- s->distance_code = s->dist_rb[v];
- v = (int)(kDistanceShortCodeValueOffset >> distance_code) & 0x3;
- if ((distance_code & 0x3) != 0) {
- s->distance_code += v;
- } else {
- s->distance_code -= v;
- if (s->distance_code <= 0) {
- /* A huge distance will cause a BROTLI_FAILURE() soon.
- This is a little faster than failing here. */
- s->distance_code = 0x7FFFFFFF;
- }
- }
- }
-}
-
-static BROTLI_INLINE BROTLI_BOOL SafeReadBits(
- BrotliBitReader* const br, uint32_t n_bits, uint32_t* val) {
- if (n_bits != 0) {
- return BrotliSafeReadBits(br, n_bits, val);
- } else {
- *val = 0;
- return BROTLI_TRUE;
- }
-}
-
-/* Precondition: s->distance_code < 0. */
-static BROTLI_INLINE BROTLI_BOOL ReadDistanceInternal(
- int safe, BrotliDecoderState* s, BrotliBitReader* br) {
- int distval;
- BrotliBitReaderState memento;
- HuffmanCode* distance_tree = s->distance_hgroup.htrees[s->dist_htree_index];
- if (!safe) {
- s->distance_code = (int)ReadSymbol(distance_tree, br);
- } else {
- uint32_t code;
- BrotliBitReaderSaveState(br, &memento);
- if (!SafeReadSymbol(distance_tree, br, &code)) {
- return BROTLI_FALSE;
- }
- s->distance_code = (int)code;
- }
- /* Convert the distance code to the actual distance by possibly
- looking up past distances from the s->ringbuffer. */
- s->distance_context = 0;
- if ((s->distance_code & ~0xF) == 0) {
- TakeDistanceFromRingBuffer(s);
- --s->block_length[2];
- return BROTLI_TRUE;
- }
- distval = s->distance_code - (int)s->num_direct_distance_codes;
- if (distval >= 0) {
- uint32_t nbits;
- int postfix;
- int offset;
- if (!safe && (s->distance_postfix_bits == 0)) {
- nbits = ((uint32_t)distval >> 1) + 1;
- offset = ((2 + (distval & 1)) << nbits) - 4;
- s->distance_code = (int)s->num_direct_distance_codes + offset +
- (int)BrotliReadBits(br, nbits);
- } else {
- /* This branch also works well when s->distance_postfix_bits == 0. */
- uint32_t bits;
- postfix = distval & s->distance_postfix_mask;
- distval >>= s->distance_postfix_bits;
- nbits = ((uint32_t)distval >> 1) + 1;
- if (safe) {
- if (!SafeReadBits(br, nbits, &bits)) {
- s->distance_code = -1; /* Restore precondition. */
- BrotliBitReaderRestoreState(br, &memento);
- return BROTLI_FALSE;
- }
- } else {
- bits = BrotliReadBits(br, nbits);
- }
- offset = ((2 + (distval & 1)) << nbits) - 4;
- s->distance_code = (int)s->num_direct_distance_codes +
- ((offset + (int)bits) << s->distance_postfix_bits) + postfix;
- }
- }
- s->distance_code = s->distance_code - BROTLI_NUM_DISTANCE_SHORT_CODES + 1;
- --s->block_length[2];
- return BROTLI_TRUE;
-}
-
-static BROTLI_INLINE void ReadDistance(
- BrotliDecoderState* s, BrotliBitReader* br) {
- ReadDistanceInternal(0, s, br);
-}
-
-static BROTLI_INLINE BROTLI_BOOL SafeReadDistance(
- BrotliDecoderState* s, BrotliBitReader* br) {
- return ReadDistanceInternal(1, s, br);
-}
-
-static BROTLI_INLINE BROTLI_BOOL ReadCommandInternal(
- int safe, BrotliDecoderState* s, BrotliBitReader* br, int* insert_length) {
- uint32_t cmd_code;
- uint32_t insert_len_extra = 0;
- uint32_t copy_length;
- CmdLutElement v;
- BrotliBitReaderState memento;
- if (!safe) {
- cmd_code = ReadSymbol(s->htree_command, br);
- } else {
- BrotliBitReaderSaveState(br, &memento);
- if (!SafeReadSymbol(s->htree_command, br, &cmd_code)) {
- return BROTLI_FALSE;
- }
- }
- v = kCmdLut[cmd_code];
- s->distance_code = v.distance_code;
- s->distance_context = v.context;
- s->dist_htree_index = s->dist_context_map_slice[s->distance_context];
- *insert_length = v.insert_len_offset;
- if (!safe) {
- if (BROTLI_PREDICT_FALSE(v.insert_len_extra_bits != 0)) {
- insert_len_extra = BrotliReadBits(br, v.insert_len_extra_bits);
- }
- copy_length = BrotliReadBits(br, v.copy_len_extra_bits);
- } else {
- if (!SafeReadBits(br, v.insert_len_extra_bits, &insert_len_extra) ||
- !SafeReadBits(br, v.copy_len_extra_bits, ©_length)) {
- BrotliBitReaderRestoreState(br, &memento);
- return BROTLI_FALSE;
- }
- }
- s->copy_length = (int)copy_length + v.copy_len_offset;
- --s->block_length[1];
- *insert_length += (int)insert_len_extra;
- return BROTLI_TRUE;
-}
-
-static BROTLI_INLINE void ReadCommand(
- BrotliDecoderState* s, BrotliBitReader* br, int* insert_length) {
- ReadCommandInternal(0, s, br, insert_length);
-}
-
-static BROTLI_INLINE BROTLI_BOOL SafeReadCommand(
- BrotliDecoderState* s, BrotliBitReader* br, int* insert_length) {
- return ReadCommandInternal(1, s, br, insert_length);
-}
-
-static BROTLI_INLINE BROTLI_BOOL CheckInputAmount(
- int safe, BrotliBitReader* const br, size_t num) {
- if (safe) {
- return BROTLI_TRUE;
- }
- return BrotliCheckInputAmount(br, num);
-}
-
-#define BROTLI_SAFE(METHOD) \
- { \
- if (safe) { \
- if (!Safe##METHOD) { \
- result = BROTLI_DECODER_NEEDS_MORE_INPUT; \
- goto saveStateAndReturn; \
- } \
- } else { \
- METHOD; \
- } \
- }
-
-static BROTLI_INLINE BrotliDecoderErrorCode ProcessCommandsInternal(
- int safe, BrotliDecoderState* s) {
- int pos = s->pos;
- int i = s->loop_counter;
- BrotliDecoderErrorCode result = BROTLI_DECODER_SUCCESS;
- BrotliBitReader* br = &s->br;
-
- if (!CheckInputAmount(safe, br, 28)) {
- result = BROTLI_DECODER_NEEDS_MORE_INPUT;
- goto saveStateAndReturn;
- }
- if (!safe) {
- BROTLI_UNUSED(BrotliWarmupBitReader(br));
- }
-
- /* Jump into state machine. */
- if (s->state == BROTLI_STATE_COMMAND_BEGIN) {
- goto CommandBegin;
- } else if (s->state == BROTLI_STATE_COMMAND_INNER) {
- goto CommandInner;
- } else if (s->state == BROTLI_STATE_COMMAND_POST_DECODE_LITERALS) {
- goto CommandPostDecodeLiterals;
- } else if (s->state == BROTLI_STATE_COMMAND_POST_WRAP_COPY) {
- goto CommandPostWrapCopy;
- } else {
- return BROTLI_FAILURE(BROTLI_DECODER_ERROR_UNREACHABLE);
- }
-
-CommandBegin:
- if (safe) {
- s->state = BROTLI_STATE_COMMAND_BEGIN;
- }
- if (!CheckInputAmount(safe, br, 28)) { /* 156 bits + 7 bytes */
- s->state = BROTLI_STATE_COMMAND_BEGIN;
- result = BROTLI_DECODER_NEEDS_MORE_INPUT;
- goto saveStateAndReturn;
- }
- if (BROTLI_PREDICT_FALSE(s->block_length[1] == 0)) {
- BROTLI_SAFE(DecodeCommandBlockSwitch(s));
- goto CommandBegin;
- }
- /* Read the insert/copy length in the command. */
- BROTLI_SAFE(ReadCommand(s, br, &i));
- BROTLI_LOG(("[ProcessCommandsInternal] pos = %d insert = %d copy = %d\n",
- pos, i, s->copy_length));
- if (i == 0) {
- goto CommandPostDecodeLiterals;
- }
- s->meta_block_remaining_len -= i;
-
-CommandInner:
- if (safe) {
- s->state = BROTLI_STATE_COMMAND_INNER;
- }
- /* Read the literals in the command. */
- if (s->trivial_literal_context) {
- uint32_t bits;
- uint32_t value;
- PreloadSymbol(safe, s->literal_htree, br, &bits, &value);
- do {
- if (!CheckInputAmount(safe, br, 28)) { /* 162 bits + 7 bytes */
- s->state = BROTLI_STATE_COMMAND_INNER;
- result = BROTLI_DECODER_NEEDS_MORE_INPUT;
- goto saveStateAndReturn;
- }
- if (BROTLI_PREDICT_FALSE(s->block_length[0] == 0)) {
- BROTLI_SAFE(DecodeLiteralBlockSwitch(s));
- PreloadSymbol(safe, s->literal_htree, br, &bits, &value);
- if (!s->trivial_literal_context) goto CommandInner;
- }
- if (!safe) {
- s->ringbuffer[pos] =
- (uint8_t)ReadPreloadedSymbol(s->literal_htree, br, &bits, &value);
- } else {
- uint32_t literal;
- if (!SafeReadSymbol(s->literal_htree, br, &literal)) {
- result = BROTLI_DECODER_NEEDS_MORE_INPUT;
- goto saveStateAndReturn;
- }
- s->ringbuffer[pos] = (uint8_t)literal;
- }
- --s->block_length[0];
- BROTLI_LOG_ARRAY_INDEX(s->ringbuffer, pos);
- ++pos;
- if (BROTLI_PREDICT_FALSE(pos == s->ringbuffer_size)) {
- s->state = BROTLI_STATE_COMMAND_INNER_WRITE;
- --i;
- goto saveStateAndReturn;
- }
- } while (--i != 0);
- } else {
- uint8_t p1 = s->ringbuffer[(pos - 1) & s->ringbuffer_mask];
- uint8_t p2 = s->ringbuffer[(pos - 2) & s->ringbuffer_mask];
- do {
- const HuffmanCode* hc;
- uint8_t context;
- if (!CheckInputAmount(safe, br, 28)) { /* 162 bits + 7 bytes */
- s->state = BROTLI_STATE_COMMAND_INNER;
- result = BROTLI_DECODER_NEEDS_MORE_INPUT;
- goto saveStateAndReturn;
- }
- if (BROTLI_PREDICT_FALSE(s->block_length[0] == 0)) {
- BROTLI_SAFE(DecodeLiteralBlockSwitch(s));
- if (s->trivial_literal_context) goto CommandInner;
- }
- context = BROTLI_CONTEXT(p1, p2, s->context_lookup);
- BROTLI_LOG_UINT(context);
- hc = s->literal_hgroup.htrees[s->context_map_slice[context]];
- p2 = p1;
- if (!safe) {
- p1 = (uint8_t)ReadSymbol(hc, br);
- } else {
- uint32_t literal;
- if (!SafeReadSymbol(hc, br, &literal)) {
- result = BROTLI_DECODER_NEEDS_MORE_INPUT;
- goto saveStateAndReturn;
- }
- p1 = (uint8_t)literal;
- }
- s->ringbuffer[pos] = p1;
- --s->block_length[0];
- BROTLI_LOG_UINT(s->context_map_slice[context]);
- BROTLI_LOG_ARRAY_INDEX(s->ringbuffer, pos & s->ringbuffer_mask);
- ++pos;
- if (BROTLI_PREDICT_FALSE(pos == s->ringbuffer_size)) {
- s->state = BROTLI_STATE_COMMAND_INNER_WRITE;
- --i;
- goto saveStateAndReturn;
- }
- } while (--i != 0);
- }
- BROTLI_LOG_UINT(s->meta_block_remaining_len);
- if (BROTLI_PREDICT_FALSE(s->meta_block_remaining_len <= 0)) {
- s->state = BROTLI_STATE_METABLOCK_DONE;
- goto saveStateAndReturn;
- }
-
-CommandPostDecodeLiterals:
- if (safe) {
- s->state = BROTLI_STATE_COMMAND_POST_DECODE_LITERALS;
- }
- if (s->distance_code >= 0) {
- /* Implicit distance case. */
- s->distance_context = s->distance_code ? 0 : 1;
- --s->dist_rb_idx;
- s->distance_code = s->dist_rb[s->dist_rb_idx & 3];
- } else {
- /* Read distance code in the command, unless it was implicitly zero. */
- if (BROTLI_PREDICT_FALSE(s->block_length[2] == 0)) {
- BROTLI_SAFE(DecodeDistanceBlockSwitch(s));
- }
- BROTLI_SAFE(ReadDistance(s, br));
- }
- BROTLI_LOG(("[ProcessCommandsInternal] pos = %d distance = %d\n",
- pos, s->distance_code));
- if (s->max_distance != s->max_backward_distance) {
- s->max_distance =
- (pos < s->max_backward_distance) ? pos : s->max_backward_distance;
- }
- i = s->copy_length;
- /* Apply copy of LZ77 back-reference, or static dictionary reference if
- the distance is larger than the max LZ77 distance */
- if (s->distance_code > s->max_distance) {
- /* The maximum allowed distance is BROTLI_MAX_ALLOWED_DISTANCE = 0x7FFFFFFC.
- With this choice, no signed overflow can occur after decoding
- a special distance code (e.g., after adding 3 to the last distance). */
- if (s->distance_code > BROTLI_MAX_ALLOWED_DISTANCE) {
- BROTLI_LOG(("Invalid backward reference. pos: %d distance: %d "
- "len: %d bytes left: %d\n",
- pos, s->distance_code, i, s->meta_block_remaining_len));
- return BROTLI_FAILURE(BROTLI_DECODER_ERROR_FORMAT_DISTANCE);
- }
- if (i >= BROTLI_MIN_DICTIONARY_WORD_LENGTH &&
- i <= BROTLI_MAX_DICTIONARY_WORD_LENGTH) {
- int address = s->distance_code - s->max_distance - 1;
- const BrotliDictionary* words = s->dictionary;
- const BrotliTransforms* transforms = s->transforms;
- int offset = (int)s->dictionary->offsets_by_length[i];
- uint32_t shift = s->dictionary->size_bits_by_length[i];
-
- int mask = (int)BitMask(shift);
- int word_idx = address & mask;
- int transform_idx = address >> shift;
- /* Compensate double distance-ring-buffer roll. */
- s->dist_rb_idx += s->distance_context;
- offset += word_idx * i;
- if (BROTLI_PREDICT_FALSE(!words->data)) {
- return BROTLI_FAILURE(BROTLI_DECODER_ERROR_DICTIONARY_NOT_SET);
- }
- if (transform_idx < (int)transforms->num_transforms) {
- const uint8_t* word = &words->data[offset];
- int len = i;
- if (transform_idx == transforms->cutOffTransforms[0]) {
- memcpy(&s->ringbuffer[pos], word, (size_t)len);
- BROTLI_LOG(("[ProcessCommandsInternal] dictionary word: [%.*s]\n",
- len, word));
- } else {
- len = BrotliTransformDictionaryWord(&s->ringbuffer[pos], word, len,
- transforms, transform_idx);
- BROTLI_LOG(("[ProcessCommandsInternal] dictionary word: [%.*s],"
- " transform_idx = %d, transformed: [%.*s]\n",
- i, word, transform_idx, len, &s->ringbuffer[pos]));
- }
- pos += len;
- s->meta_block_remaining_len -= len;
- if (pos >= s->ringbuffer_size) {
- s->state = BROTLI_STATE_COMMAND_POST_WRITE_1;
- goto saveStateAndReturn;
- }
- } else {
- BROTLI_LOG(("Invalid backward reference. pos: %d distance: %d "
- "len: %d bytes left: %d\n",
- pos, s->distance_code, i, s->meta_block_remaining_len));
- return BROTLI_FAILURE(BROTLI_DECODER_ERROR_FORMAT_TRANSFORM);
- }
- } else {
- BROTLI_LOG(("Invalid backward reference. pos: %d distance: %d "
- "len: %d bytes left: %d\n",
- pos, s->distance_code, i, s->meta_block_remaining_len));
- return BROTLI_FAILURE(BROTLI_DECODER_ERROR_FORMAT_DICTIONARY);
- }
- } else {
- int src_start = (pos - s->distance_code) & s->ringbuffer_mask;
- uint8_t* copy_dst = &s->ringbuffer[pos];
- uint8_t* copy_src = &s->ringbuffer[src_start];
- int dst_end = pos + i;
- int src_end = src_start + i;
- /* Update the recent distances cache. */
- s->dist_rb[s->dist_rb_idx & 3] = s->distance_code;
- ++s->dist_rb_idx;
- s->meta_block_remaining_len -= i;
- /* There are 32+ bytes of slack in the ring-buffer allocation.
- Also, we have 16 short codes, that make these 16 bytes irrelevant
- in the ring-buffer. Let's copy over them as a first guess. */
- memmove16(copy_dst, copy_src);
- if (src_end > pos && dst_end > src_start) {
- /* Regions intersect. */
- goto CommandPostWrapCopy;
- }
- if (dst_end >= s->ringbuffer_size || src_end >= s->ringbuffer_size) {
- /* At least one region wraps. */
- goto CommandPostWrapCopy;
- }
- pos += i;
- if (i > 16) {
- if (i > 32) {
- memcpy(copy_dst + 16, copy_src + 16, (size_t)(i - 16));
- } else {
- /* This branch covers about 45% cases.
- Fixed size short copy allows more compiler optimizations. */
- memmove16(copy_dst + 16, copy_src + 16);
- }
- }
- }
- BROTLI_LOG_UINT(s->meta_block_remaining_len);
- if (s->meta_block_remaining_len <= 0) {
- /* Next metablock, if any. */
- s->state = BROTLI_STATE_METABLOCK_DONE;
- goto saveStateAndReturn;
- } else {
- goto CommandBegin;
- }
-CommandPostWrapCopy:
- {
- int wrap_guard = s->ringbuffer_size - pos;
- while (--i >= 0) {
- s->ringbuffer[pos] =
- s->ringbuffer[(pos - s->distance_code) & s->ringbuffer_mask];
- ++pos;
- if (BROTLI_PREDICT_FALSE(--wrap_guard == 0)) {
- s->state = BROTLI_STATE_COMMAND_POST_WRITE_2;
- goto saveStateAndReturn;
- }
- }
- }
- if (s->meta_block_remaining_len <= 0) {
- /* Next metablock, if any. */
- s->state = BROTLI_STATE_METABLOCK_DONE;
- goto saveStateAndReturn;
- } else {
- goto CommandBegin;
- }
-
-saveStateAndReturn:
- s->pos = pos;
- s->loop_counter = i;
- return result;
-}
-
-#undef BROTLI_SAFE
-
-static BROTLI_NOINLINE BrotliDecoderErrorCode ProcessCommands(
- BrotliDecoderState* s) {
- return ProcessCommandsInternal(0, s);
-}
-
-static BROTLI_NOINLINE BrotliDecoderErrorCode SafeProcessCommands(
- BrotliDecoderState* s) {
- return ProcessCommandsInternal(1, s);
-}
-
-/* Returns the maximum number of distance symbols which can only represent
- distances not exceeding BROTLI_MAX_ALLOWED_DISTANCE. */
-static uint32_t BrotliMaxDistanceSymbol(uint32_t ndirect, uint32_t npostfix) {
- static const uint32_t bound[BROTLI_MAX_NPOSTFIX + 1] = {0, 4, 12, 28};
- static const uint32_t diff[BROTLI_MAX_NPOSTFIX + 1] = {73, 126, 228, 424};
- uint32_t postfix = 1U << npostfix;
- if (ndirect < bound[npostfix]) {
- return ndirect + diff[npostfix] + postfix;
- } else if (ndirect > bound[npostfix] + postfix) {
- return ndirect + diff[npostfix];
- } else {
- return bound[npostfix] + diff[npostfix] + postfix;
- }
-}
-
-BrotliDecoderResult BrotliDecoderDecompress(
- size_t encoded_size, const uint8_t* encoded_buffer, size_t* decoded_size,
- uint8_t* decoded_buffer) {
- BrotliDecoderState s;
- BrotliDecoderResult result;
- size_t total_out = 0;
- size_t available_in = encoded_size;
- const uint8_t* next_in = encoded_buffer;
- size_t available_out = *decoded_size;
- uint8_t* next_out = decoded_buffer;
- if (!BrotliDecoderStateInit(&s, 0, 0, 0)) {
- return BROTLI_DECODER_RESULT_ERROR;
- }
- result = BrotliDecoderDecompressStream(
- &s, &available_in, &next_in, &available_out, &next_out, &total_out);
- *decoded_size = total_out;
- BrotliDecoderStateCleanup(&s);
- if (result != BROTLI_DECODER_RESULT_SUCCESS) {
- result = BROTLI_DECODER_RESULT_ERROR;
- }
- return result;
-}
-
-/* Invariant: input stream is never overconsumed:
- - invalid input implies that the whole stream is invalid -> any amount of
- input could be read and discarded
- - when result is "needs more input", then at least one more byte is REQUIRED
- to complete decoding; all input data MUST be consumed by decoder, so
- client could swap the input buffer
- - when result is "needs more output" decoder MUST ensure that it doesn't
- hold more than 7 bits in bit reader; this saves client from swapping input
- buffer ahead of time
- - when result is "success" decoder MUST return all unused data back to input
- buffer; this is possible because the invariant is held on enter */
-BrotliDecoderResult BrotliDecoderDecompressStream(
- BrotliDecoderState* s, size_t* available_in, const uint8_t** next_in,
- size_t* available_out, uint8_t** next_out, size_t* total_out) {
- BrotliDecoderErrorCode result = BROTLI_DECODER_SUCCESS;
- BrotliBitReader* br = &s->br;
- /* Ensure that |total_out| is set, even if no data will ever be pushed out. */
- if (total_out) {
- *total_out = s->partial_pos_out;
- }
- /* Do not try to process further in a case of unrecoverable error. */
- if ((int)s->error_code < 0) {
- return BROTLI_DECODER_RESULT_ERROR;
- }
- if (*available_out && (!next_out || !*next_out)) {
- return SaveErrorCode(
- s, BROTLI_FAILURE(BROTLI_DECODER_ERROR_INVALID_ARGUMENTS));
- }
- if (!*available_out) next_out = 0;
- if (s->buffer_length == 0) { /* Just connect bit reader to input stream. */
- br->avail_in = *available_in;
- br->next_in = *next_in;
- } else {
- /* At least one byte of input is required. More than one byte of input may
- be required to complete the transaction -> reading more data must be
- done in a loop -> do it in a main loop. */
- result = BROTLI_DECODER_NEEDS_MORE_INPUT;
- br->next_in = &s->buffer.u8[0];
- }
- /* State machine */
- for (;;) {
- if (result != BROTLI_DECODER_SUCCESS) {
- /* Error, needs more input/output. */
- if (result == BROTLI_DECODER_NEEDS_MORE_INPUT) {
- if (s->ringbuffer != 0) { /* Pro-actively push output. */
- BrotliDecoderErrorCode intermediate_result = WriteRingBuffer(s,
- available_out, next_out, total_out, BROTLI_TRUE);
- /* WriteRingBuffer checks s->meta_block_remaining_len validity. */
- if ((int)intermediate_result < 0) {
- result = intermediate_result;
- break;
- }
- }
- if (s->buffer_length != 0) { /* Used with internal buffer. */
- if (br->avail_in == 0) {
- /* Successfully finished read transaction.
- Accumulator contains less than 8 bits, because internal buffer
- is expanded byte-by-byte until it is enough to complete read. */
- s->buffer_length = 0;
- /* Switch to input stream and restart. */
- result = BROTLI_DECODER_SUCCESS;
- br->avail_in = *available_in;
- br->next_in = *next_in;
- continue;
- } else if (*available_in != 0) {
- /* Not enough data in buffer, but can take one more byte from
- input stream. */
- result = BROTLI_DECODER_SUCCESS;
- s->buffer.u8[s->buffer_length] = **next_in;
- s->buffer_length++;
- br->avail_in = s->buffer_length;
- (*next_in)++;
- (*available_in)--;
- /* Retry with more data in buffer. */
- continue;
- }
- /* Can't finish reading and no more input. */
- break;
- } else { /* Input stream doesn't contain enough input. */
- /* Copy tail to internal buffer and return. */
- *next_in = br->next_in;
- *available_in = br->avail_in;
- while (*available_in) {
- s->buffer.u8[s->buffer_length] = **next_in;
- s->buffer_length++;
- (*next_in)++;
- (*available_in)--;
- }
- break;
- }
- /* Unreachable. */
- }
-
- /* Fail or needs more output. */
-
- if (s->buffer_length != 0) {
- /* Just consumed the buffered input and produced some output. Otherwise
- it would result in "needs more input". Reset internal buffer. */
- s->buffer_length = 0;
- } else {
- /* Using input stream in last iteration. When decoder switches to input
- stream it has less than 8 bits in accumulator, so it is safe to
- return unused accumulator bits there. */
- BrotliBitReaderUnload(br);
- *available_in = br->avail_in;
- *next_in = br->next_in;
- }
- break;
- }
- switch (s->state) {
- case BROTLI_STATE_UNINITED:
- /* Prepare to the first read. */
- if (!BrotliWarmupBitReader(br)) {
- result = BROTLI_DECODER_NEEDS_MORE_INPUT;
- break;
- }
- /* Decode window size. */
- result = DecodeWindowBits(s, br); /* Reads 1..8 bits. */
- if (result != BROTLI_DECODER_SUCCESS) {
- break;
- }
- if (s->large_window) {
- s->state = BROTLI_STATE_LARGE_WINDOW_BITS;
- break;
- }
- s->state = BROTLI_STATE_INITIALIZE;
- break;
-
- case BROTLI_STATE_LARGE_WINDOW_BITS:
- if (!BrotliSafeReadBits(br, 6, &s->window_bits)) {
- result = BROTLI_DECODER_NEEDS_MORE_INPUT;
- break;
- }
- if (s->window_bits < BROTLI_LARGE_MIN_WBITS ||
- s->window_bits > BROTLI_LARGE_MAX_WBITS) {
- result = BROTLI_FAILURE(BROTLI_DECODER_ERROR_FORMAT_WINDOW_BITS);
- break;
- }
- s->state = BROTLI_STATE_INITIALIZE;
- /* Fall through. */
-
- case BROTLI_STATE_INITIALIZE:
- BROTLI_LOG_UINT(s->window_bits);
- /* Maximum distance, see section 9.1. of the spec. */
- s->max_backward_distance = (1 << s->window_bits) - BROTLI_WINDOW_GAP;
-
- /* Allocate memory for both block_type_trees and block_len_trees. */
- s->block_type_trees = (HuffmanCode*)BROTLI_DECODER_ALLOC(s,
- sizeof(HuffmanCode) * 3 *
- (BROTLI_HUFFMAN_MAX_SIZE_258 + BROTLI_HUFFMAN_MAX_SIZE_26));
- if (s->block_type_trees == 0) {
- result = BROTLI_FAILURE(BROTLI_DECODER_ERROR_ALLOC_BLOCK_TYPE_TREES);
- break;
- }
- s->block_len_trees =
- s->block_type_trees + 3 * BROTLI_HUFFMAN_MAX_SIZE_258;
-
- s->state = BROTLI_STATE_METABLOCK_BEGIN;
- /* Fall through. */
-
- case BROTLI_STATE_METABLOCK_BEGIN:
- BrotliDecoderStateMetablockBegin(s);
- BROTLI_LOG_UINT(s->pos);
- s->state = BROTLI_STATE_METABLOCK_HEADER;
- /* Fall through. */
-
- case BROTLI_STATE_METABLOCK_HEADER:
- result = DecodeMetaBlockLength(s, br); /* Reads 2 - 31 bits. */
- if (result != BROTLI_DECODER_SUCCESS) {
- break;
- }
- BROTLI_LOG_UINT(s->is_last_metablock);
- BROTLI_LOG_UINT(s->meta_block_remaining_len);
- BROTLI_LOG_UINT(s->is_metadata);
- BROTLI_LOG_UINT(s->is_uncompressed);
- if (s->is_metadata || s->is_uncompressed) {
- if (!BrotliJumpToByteBoundary(br)) {
- result = BROTLI_FAILURE(BROTLI_DECODER_ERROR_FORMAT_PADDING_1);
- break;
- }
- }
- if (s->is_metadata) {
- s->state = BROTLI_STATE_METADATA;
- break;
- }
- if (s->meta_block_remaining_len == 0) {
- s->state = BROTLI_STATE_METABLOCK_DONE;
- break;
- }
- BrotliCalculateRingBufferSize(s);
- if (s->is_uncompressed) {
- s->state = BROTLI_STATE_UNCOMPRESSED;
- break;
- }
- s->loop_counter = 0;
- s->state = BROTLI_STATE_HUFFMAN_CODE_0;
- break;
-
- case BROTLI_STATE_UNCOMPRESSED: {
- result = CopyUncompressedBlockToOutput(
- available_out, next_out, total_out, s);
- if (result != BROTLI_DECODER_SUCCESS) {
- break;
- }
- s->state = BROTLI_STATE_METABLOCK_DONE;
- break;
- }
-
- case BROTLI_STATE_METADATA:
- for (; s->meta_block_remaining_len > 0; --s->meta_block_remaining_len) {
- uint32_t bits;
- /* Read one byte and ignore it. */
- if (!BrotliSafeReadBits(br, 8, &bits)) {
- result = BROTLI_DECODER_NEEDS_MORE_INPUT;
- break;
- }
- }
- if (result == BROTLI_DECODER_SUCCESS) {
- s->state = BROTLI_STATE_METABLOCK_DONE;
- }
- break;
-
- case BROTLI_STATE_HUFFMAN_CODE_0:
- if (s->loop_counter >= 3) {
- s->state = BROTLI_STATE_METABLOCK_HEADER_2;
- break;
- }
- /* Reads 1..11 bits. */
- result = DecodeVarLenUint8(s, br, &s->num_block_types[s->loop_counter]);
- if (result != BROTLI_DECODER_SUCCESS) {
- break;
- }
- s->num_block_types[s->loop_counter]++;
- BROTLI_LOG_UINT(s->num_block_types[s->loop_counter]);
- if (s->num_block_types[s->loop_counter] < 2) {
- s->loop_counter++;
- break;
- }
- s->state = BROTLI_STATE_HUFFMAN_CODE_1;
- /* Fall through. */
-
- case BROTLI_STATE_HUFFMAN_CODE_1: {
- uint32_t alphabet_size = s->num_block_types[s->loop_counter] + 2;
- int tree_offset = s->loop_counter * BROTLI_HUFFMAN_MAX_SIZE_258;
- result = ReadHuffmanCode(alphabet_size, alphabet_size,
- &s->block_type_trees[tree_offset], NULL, s);
- if (result != BROTLI_DECODER_SUCCESS) break;
- s->state = BROTLI_STATE_HUFFMAN_CODE_2;
- }
- /* Fall through. */
-
- case BROTLI_STATE_HUFFMAN_CODE_2: {
- uint32_t alphabet_size = BROTLI_NUM_BLOCK_LEN_SYMBOLS;
- int tree_offset = s->loop_counter * BROTLI_HUFFMAN_MAX_SIZE_26;
- result = ReadHuffmanCode(alphabet_size, alphabet_size,
- &s->block_len_trees[tree_offset], NULL, s);
- if (result != BROTLI_DECODER_SUCCESS) break;
- s->state = BROTLI_STATE_HUFFMAN_CODE_3;
- }
- /* Fall through. */
-
- case BROTLI_STATE_HUFFMAN_CODE_3: {
- int tree_offset = s->loop_counter * BROTLI_HUFFMAN_MAX_SIZE_26;
- if (!SafeReadBlockLength(s, &s->block_length[s->loop_counter],
- &s->block_len_trees[tree_offset], br)) {
- result = BROTLI_DECODER_NEEDS_MORE_INPUT;
- break;
- }
- BROTLI_LOG_UINT(s->block_length[s->loop_counter]);
- s->loop_counter++;
- s->state = BROTLI_STATE_HUFFMAN_CODE_0;
- break;
- }
-
- case BROTLI_STATE_METABLOCK_HEADER_2: {
- uint32_t bits;
- if (!BrotliSafeReadBits(br, 6, &bits)) {
- result = BROTLI_DECODER_NEEDS_MORE_INPUT;
- break;
- }
- s->distance_postfix_bits = bits & BitMask(2);
- bits >>= 2;
- s->num_direct_distance_codes = BROTLI_NUM_DISTANCE_SHORT_CODES +
- (bits << s->distance_postfix_bits);
- BROTLI_LOG_UINT(s->num_direct_distance_codes);
- BROTLI_LOG_UINT(s->distance_postfix_bits);
- s->distance_postfix_mask = (int)BitMask(s->distance_postfix_bits);
- s->context_modes =
- (uint8_t*)BROTLI_DECODER_ALLOC(s, (size_t)s->num_block_types[0]);
- if (s->context_modes == 0) {
- result = BROTLI_FAILURE(BROTLI_DECODER_ERROR_ALLOC_CONTEXT_MODES);
- break;
- }
- s->loop_counter = 0;
- s->state = BROTLI_STATE_CONTEXT_MODES;
- }
- /* Fall through. */
-
- case BROTLI_STATE_CONTEXT_MODES:
- result = ReadContextModes(s);
- if (result != BROTLI_DECODER_SUCCESS) {
- break;
- }
- s->state = BROTLI_STATE_CONTEXT_MAP_1;
- /* Fall through. */
-
- case BROTLI_STATE_CONTEXT_MAP_1:
- result = DecodeContextMap(
- s->num_block_types[0] << BROTLI_LITERAL_CONTEXT_BITS,
- &s->num_literal_htrees, &s->context_map, s);
- if (result != BROTLI_DECODER_SUCCESS) {
- break;
- }
- DetectTrivialLiteralBlockTypes(s);
- s->state = BROTLI_STATE_CONTEXT_MAP_2;
- /* Fall through. */
-
- case BROTLI_STATE_CONTEXT_MAP_2: {
- uint32_t num_direct_codes =
- s->num_direct_distance_codes - BROTLI_NUM_DISTANCE_SHORT_CODES;
- uint32_t num_distance_codes = BROTLI_DISTANCE_ALPHABET_SIZE(
- s->distance_postfix_bits, num_direct_codes,
- (s->large_window ? BROTLI_LARGE_MAX_DISTANCE_BITS :
- BROTLI_MAX_DISTANCE_BITS));
- uint32_t max_distance_symbol = (s->large_window ?
- BrotliMaxDistanceSymbol(
- num_direct_codes, s->distance_postfix_bits) :
- num_distance_codes);
- BROTLI_BOOL allocation_success = BROTLI_TRUE;
- result = DecodeContextMap(
- s->num_block_types[2] << BROTLI_DISTANCE_CONTEXT_BITS,
- &s->num_dist_htrees, &s->dist_context_map, s);
- if (result != BROTLI_DECODER_SUCCESS) {
- break;
- }
- allocation_success &= BrotliDecoderHuffmanTreeGroupInit(
- s, &s->literal_hgroup, BROTLI_NUM_LITERAL_SYMBOLS,
- BROTLI_NUM_LITERAL_SYMBOLS, s->num_literal_htrees);
- allocation_success &= BrotliDecoderHuffmanTreeGroupInit(
- s, &s->insert_copy_hgroup, BROTLI_NUM_COMMAND_SYMBOLS,
- BROTLI_NUM_COMMAND_SYMBOLS, s->num_block_types[1]);
- allocation_success &= BrotliDecoderHuffmanTreeGroupInit(
- s, &s->distance_hgroup, num_distance_codes,
- max_distance_symbol, s->num_dist_htrees);
- if (!allocation_success) {
- return SaveErrorCode(s,
- BROTLI_FAILURE(BROTLI_DECODER_ERROR_ALLOC_TREE_GROUPS));
- }
- s->loop_counter = 0;
- s->state = BROTLI_STATE_TREE_GROUP;
- }
- /* Fall through. */
-
- case BROTLI_STATE_TREE_GROUP: {
- HuffmanTreeGroup* hgroup = NULL;
- switch (s->loop_counter) {
- case 0: hgroup = &s->literal_hgroup; break;
- case 1: hgroup = &s->insert_copy_hgroup; break;
- case 2: hgroup = &s->distance_hgroup; break;
- default: return SaveErrorCode(s, BROTLI_FAILURE(
- BROTLI_DECODER_ERROR_UNREACHABLE));
- }
- result = HuffmanTreeGroupDecode(hgroup, s);
- if (result != BROTLI_DECODER_SUCCESS) break;
- s->loop_counter++;
- if (s->loop_counter >= 3) {
- PrepareLiteralDecoding(s);
- s->dist_context_map_slice = s->dist_context_map;
- s->htree_command = s->insert_copy_hgroup.htrees[0];
- if (!BrotliEnsureRingBuffer(s)) {
- result = BROTLI_FAILURE(BROTLI_DECODER_ERROR_ALLOC_RING_BUFFER_2);
- break;
- }
- s->state = BROTLI_STATE_COMMAND_BEGIN;
- }
- break;
- }
-
- case BROTLI_STATE_COMMAND_BEGIN:
- /* Fall through. */
- case BROTLI_STATE_COMMAND_INNER:
- /* Fall through. */
- case BROTLI_STATE_COMMAND_POST_DECODE_LITERALS:
- /* Fall through. */
- case BROTLI_STATE_COMMAND_POST_WRAP_COPY:
- result = ProcessCommands(s);
- if (result == BROTLI_DECODER_NEEDS_MORE_INPUT) {
- result = SafeProcessCommands(s);
- }
- break;
-
- case BROTLI_STATE_COMMAND_INNER_WRITE:
- /* Fall through. */
- case BROTLI_STATE_COMMAND_POST_WRITE_1:
- /* Fall through. */
- case BROTLI_STATE_COMMAND_POST_WRITE_2:
- result = WriteRingBuffer(
- s, available_out, next_out, total_out, BROTLI_FALSE);
- if (result != BROTLI_DECODER_SUCCESS) {
- break;
- }
- WrapRingBuffer(s);
- if (s->ringbuffer_size == 1 << s->window_bits) {
- s->max_distance = s->max_backward_distance;
- }
- if (s->state == BROTLI_STATE_COMMAND_POST_WRITE_1) {
- if (s->meta_block_remaining_len == 0) {
- /* Next metablock, if any. */
- s->state = BROTLI_STATE_METABLOCK_DONE;
- } else {
- s->state = BROTLI_STATE_COMMAND_BEGIN;
- }
- break;
- } else if (s->state == BROTLI_STATE_COMMAND_POST_WRITE_2) {
- s->state = BROTLI_STATE_COMMAND_POST_WRAP_COPY;
- } else { /* BROTLI_STATE_COMMAND_INNER_WRITE */
- if (s->loop_counter == 0) {
- if (s->meta_block_remaining_len == 0) {
- s->state = BROTLI_STATE_METABLOCK_DONE;
- } else {
- s->state = BROTLI_STATE_COMMAND_POST_DECODE_LITERALS;
- }
- break;
- }
- s->state = BROTLI_STATE_COMMAND_INNER;
- }
- break;
-
- case BROTLI_STATE_METABLOCK_DONE:
- if (s->meta_block_remaining_len < 0) {
- result = BROTLI_FAILURE(BROTLI_DECODER_ERROR_FORMAT_BLOCK_LENGTH_2);
- break;
- }
- BrotliDecoderStateCleanupAfterMetablock(s);
- if (!s->is_last_metablock) {
- s->state = BROTLI_STATE_METABLOCK_BEGIN;
- break;
- }
- if (!BrotliJumpToByteBoundary(br)) {
- result = BROTLI_FAILURE(BROTLI_DECODER_ERROR_FORMAT_PADDING_2);
- break;
- }
- if (s->buffer_length == 0) {
- BrotliBitReaderUnload(br);
- *available_in = br->avail_in;
- *next_in = br->next_in;
- }
- s->state = BROTLI_STATE_DONE;
- /* Fall through. */
-
- case BROTLI_STATE_DONE:
- if (s->ringbuffer != 0) {
- result = WriteRingBuffer(
- s, available_out, next_out, total_out, BROTLI_TRUE);
- if (result != BROTLI_DECODER_SUCCESS) {
- break;
- }
- }
- return SaveErrorCode(s, result);
- }
- }
- return SaveErrorCode(s, result);
-}
-
-BROTLI_BOOL BrotliDecoderHasMoreOutput(const BrotliDecoderState* s) {
- /* After unrecoverable error remaining output is considered nonsensical. */
- if ((int)s->error_code < 0) {
- return BROTLI_FALSE;
- }
- return TO_BROTLI_BOOL(
- s->ringbuffer != 0 && UnwrittenBytes(s, BROTLI_FALSE) != 0);
-}
-
-const uint8_t* BrotliDecoderTakeOutput(BrotliDecoderState* s, size_t* size) {
- uint8_t* result = 0;
- size_t available_out = *size ? *size : 1u << 24;
- size_t requested_out = available_out;
- BrotliDecoderErrorCode status;
- if ((s->ringbuffer == 0) || ((int)s->error_code < 0)) {
- *size = 0;
- return 0;
- }
- WrapRingBuffer(s);
- status = WriteRingBuffer(s, &available_out, &result, 0, BROTLI_TRUE);
- /* Either WriteRingBuffer returns those "success" codes... */
- if (status == BROTLI_DECODER_SUCCESS ||
- status == BROTLI_DECODER_NEEDS_MORE_OUTPUT) {
- *size = requested_out - available_out;
- } else {
- /* ... or stream is broken. Normally this should be caught by
- BrotliDecoderDecompressStream, this is just a safeguard. */
- if ((int)status < 0) SaveErrorCode(s, status);
- *size = 0;
- result = 0;
- }
- return result;
-}
-
-BROTLI_BOOL BrotliDecoderIsUsed(const BrotliDecoderState* s) {
- return TO_BROTLI_BOOL(s->state != BROTLI_STATE_UNINITED ||
- BrotliGetAvailableBits(&s->br) != 0);
-}
-
-BROTLI_BOOL BrotliDecoderIsFinished(const BrotliDecoderState* s) {
- return TO_BROTLI_BOOL(s->state == BROTLI_STATE_DONE) &&
- !BrotliDecoderHasMoreOutput(s);
-}
-
-BrotliDecoderErrorCode BrotliDecoderGetErrorCode(const BrotliDecoderState* s) {
- return (BrotliDecoderErrorCode)s->error_code;
-}
-
-const char* BrotliDecoderErrorString(BrotliDecoderErrorCode c) {
- switch (c) {
-#define BROTLI_ERROR_CODE_CASE_(PREFIX, NAME, CODE) \
- case BROTLI_DECODER ## PREFIX ## NAME: return #NAME;
-#define BROTLI_NOTHING_
- BROTLI_DECODER_ERROR_CODES_LIST(BROTLI_ERROR_CODE_CASE_, BROTLI_NOTHING_)
-#undef BROTLI_ERROR_CODE_CASE_
-#undef BROTLI_NOTHING_
- default: return "INVALID";
- }
-}
-
-uint32_t BrotliDecoderVersion() {
- return BROTLI_VERSION;
-}
-
-#if defined(__cplusplus) || defined(c_plusplus)
-} /* extern "C" */
-#endif
diff --git a/BaseTools/Source/C/BrotliCompress/dec/huffman.c b/BaseTools/Source/C/BrotliCompress/dec/huffman.c
deleted file mode 100644
index 4ad0dc6bd0eb..000000000000
--- a/BaseTools/Source/C/BrotliCompress/dec/huffman.c
+++ /dev/null
@@ -1,356 +0,0 @@
-/* Copyright 2013 Google Inc. All Rights Reserved.
-
- Distributed under MIT license.
- See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
-*/
-
-/* Utilities for building Huffman decoding tables. */
-
-#include "./huffman.h"
-
-#include <string.h> /* memcpy, memset */
-
-#include "../common/constants.h"
-#include "../common/platform.h"
-#include <brotli/types.h>
-
-#if defined(__cplusplus) || defined(c_plusplus)
-extern "C" {
-#endif
-
-#define BROTLI_REVERSE_BITS_MAX 8
-
-#if defined(BROTLI_RBIT)
-#define BROTLI_REVERSE_BITS_BASE \
- ((sizeof(brotli_reg_t) << 3) - BROTLI_REVERSE_BITS_MAX)
-#else
-#define BROTLI_REVERSE_BITS_BASE 0
-static uint8_t kReverseBits[1 << BROTLI_REVERSE_BITS_MAX] = {
- 0x00, 0x80, 0x40, 0xC0, 0x20, 0xA0, 0x60, 0xE0,
- 0x10, 0x90, 0x50, 0xD0, 0x30, 0xB0, 0x70, 0xF0,
- 0x08, 0x88, 0x48, 0xC8, 0x28, 0xA8, 0x68, 0xE8,
- 0x18, 0x98, 0x58, 0xD8, 0x38, 0xB8, 0x78, 0xF8,
- 0x04, 0x84, 0x44, 0xC4, 0x24, 0xA4, 0x64, 0xE4,
- 0x14, 0x94, 0x54, 0xD4, 0x34, 0xB4, 0x74, 0xF4,
- 0x0C, 0x8C, 0x4C, 0xCC, 0x2C, 0xAC, 0x6C, 0xEC,
- 0x1C, 0x9C, 0x5C, 0xDC, 0x3C, 0xBC, 0x7C, 0xFC,
- 0x02, 0x82, 0x42, 0xC2, 0x22, 0xA2, 0x62, 0xE2,
- 0x12, 0x92, 0x52, 0xD2, 0x32, 0xB2, 0x72, 0xF2,
- 0x0A, 0x8A, 0x4A, 0xCA, 0x2A, 0xAA, 0x6A, 0xEA,
- 0x1A, 0x9A, 0x5A, 0xDA, 0x3A, 0xBA, 0x7A, 0xFA,
- 0x06, 0x86, 0x46, 0xC6, 0x26, 0xA6, 0x66, 0xE6,
- 0x16, 0x96, 0x56, 0xD6, 0x36, 0xB6, 0x76, 0xF6,
- 0x0E, 0x8E, 0x4E, 0xCE, 0x2E, 0xAE, 0x6E, 0xEE,
- 0x1E, 0x9E, 0x5E, 0xDE, 0x3E, 0xBE, 0x7E, 0xFE,
- 0x01, 0x81, 0x41, 0xC1, 0x21, 0xA1, 0x61, 0xE1,
- 0x11, 0x91, 0x51, 0xD1, 0x31, 0xB1, 0x71, 0xF1,
- 0x09, 0x89, 0x49, 0xC9, 0x29, 0xA9, 0x69, 0xE9,
- 0x19, 0x99, 0x59, 0xD9, 0x39, 0xB9, 0x79, 0xF9,
- 0x05, 0x85, 0x45, 0xC5, 0x25, 0xA5, 0x65, 0xE5,
- 0x15, 0x95, 0x55, 0xD5, 0x35, 0xB5, 0x75, 0xF5,
- 0x0D, 0x8D, 0x4D, 0xCD, 0x2D, 0xAD, 0x6D, 0xED,
- 0x1D, 0x9D, 0x5D, 0xDD, 0x3D, 0xBD, 0x7D, 0xFD,
- 0x03, 0x83, 0x43, 0xC3, 0x23, 0xA3, 0x63, 0xE3,
- 0x13, 0x93, 0x53, 0xD3, 0x33, 0xB3, 0x73, 0xF3,
- 0x0B, 0x8B, 0x4B, 0xCB, 0x2B, 0xAB, 0x6B, 0xEB,
- 0x1B, 0x9B, 0x5B, 0xDB, 0x3B, 0xBB, 0x7B, 0xFB,
- 0x07, 0x87, 0x47, 0xC7, 0x27, 0xA7, 0x67, 0xE7,
- 0x17, 0x97, 0x57, 0xD7, 0x37, 0xB7, 0x77, 0xF7,
- 0x0F, 0x8F, 0x4F, 0xCF, 0x2F, 0xAF, 0x6F, 0xEF,
- 0x1F, 0x9F, 0x5F, 0xDF, 0x3F, 0xBF, 0x7F, 0xFF
-};
-#endif /* BROTLI_RBIT */
-
-#define BROTLI_REVERSE_BITS_LOWEST \
- ((brotli_reg_t)1 << (BROTLI_REVERSE_BITS_MAX - 1 + BROTLI_REVERSE_BITS_BASE))
-
-/* Returns reverse(num >> BROTLI_REVERSE_BITS_BASE, BROTLI_REVERSE_BITS_MAX),
- where reverse(value, len) is the bit-wise reversal of the len least
- significant bits of value. */
-static BROTLI_INLINE brotli_reg_t BrotliReverseBits(brotli_reg_t num) {
-#if defined(BROTLI_RBIT)
- return BROTLI_RBIT(num);
-#else
- return kReverseBits[num];
-#endif
-}
-
-/* Stores code in table[0], table[step], table[2*step], ..., table[end] */
-/* Assumes that end is an integer multiple of step */
-static BROTLI_INLINE void ReplicateValue(HuffmanCode* table,
- int step, int end,
- HuffmanCode code) {
- do {
- end -= step;
- table[end] = code;
- } while (end > 0);
-}
-
-/* Returns the table width of the next 2nd level table. |count| is the histogram
- of bit lengths for the remaining symbols, |len| is the code length of the
- next processed symbol. */
-static BROTLI_INLINE int NextTableBitSize(const uint16_t* const count,
- int len, int root_bits) {
- int left = 1 << (len - root_bits);
- while (len < BROTLI_HUFFMAN_MAX_CODE_LENGTH) {
- left -= count[len];
- if (left <= 0) break;
- ++len;
- left <<= 1;
- }
- return len - root_bits;
-}
-
-void BrotliBuildCodeLengthsHuffmanTable(HuffmanCode* table,
- const uint8_t* const code_lengths,
- uint16_t* count) {
- HuffmanCode code; /* current table entry */
- int symbol; /* symbol index in original or sorted table */
- brotli_reg_t key; /* prefix code */
- brotli_reg_t key_step; /* prefix code addend */
- int step; /* step size to replicate values in current table */
- int table_size; /* size of current table */
- int sorted[BROTLI_CODE_LENGTH_CODES]; /* symbols sorted by code length */
- /* offsets in sorted table for each length */
- int offset[BROTLI_HUFFMAN_MAX_CODE_LENGTH_CODE_LENGTH + 1];
- int bits;
- int bits_count;
- BROTLI_DCHECK(BROTLI_HUFFMAN_MAX_CODE_LENGTH_CODE_LENGTH <=
- BROTLI_REVERSE_BITS_MAX);
-
- /* Generate offsets into sorted symbol table by code length. */
- symbol = -1;
- bits = 1;
- BROTLI_REPEAT(BROTLI_HUFFMAN_MAX_CODE_LENGTH_CODE_LENGTH, {
- symbol += count[bits];
- offset[bits] = symbol;
- bits++;
- });
- /* Symbols with code length 0 are placed after all other symbols. */
- offset[0] = BROTLI_CODE_LENGTH_CODES - 1;
-
- /* Sort symbols by length, by symbol order within each length. */
- symbol = BROTLI_CODE_LENGTH_CODES;
- do {
- BROTLI_REPEAT(6, {
- symbol--;
- sorted[offset[code_lengths[symbol]]--] = symbol;
- });
- } while (symbol != 0);
-
- table_size = 1 << BROTLI_HUFFMAN_MAX_CODE_LENGTH_CODE_LENGTH;
-
- /* Special case: all symbols but one have 0 code length. */
- if (offset[0] == 0) {
- code.bits = 0;
- code.value = (uint16_t)sorted[0];
- for (key = 0; key < (brotli_reg_t)table_size; ++key) {
- table[key] = code;
- }
- return;
- }
-
- /* Fill in table. */
- key = 0;
- key_step = BROTLI_REVERSE_BITS_LOWEST;
- symbol = 0;
- bits = 1;
- step = 2;
- do {
- code.bits = (uint8_t)bits;
- for (bits_count = count[bits]; bits_count != 0; --bits_count) {
- code.value = (uint16_t)sorted[symbol++];
- ReplicateValue(&table[BrotliReverseBits(key)], step, table_size, code);
- key += key_step;
- }
- step <<= 1;
- key_step >>= 1;
- } while (++bits <= BROTLI_HUFFMAN_MAX_CODE_LENGTH_CODE_LENGTH);
-}
-
-uint32_t BrotliBuildHuffmanTable(HuffmanCode* root_table,
- int root_bits,
- const uint16_t* const symbol_lists,
- uint16_t* count) {
- HuffmanCode code; /* current table entry */
- HuffmanCode* table; /* next available space in table */
- int len; /* current code length */
- int symbol; /* symbol index in original or sorted table */
- brotli_reg_t key; /* prefix code */
- brotli_reg_t key_step; /* prefix code addend */
- brotli_reg_t sub_key; /* 2nd level table prefix code */
- brotli_reg_t sub_key_step; /* 2nd level table prefix code addend */
- int step; /* step size to replicate values in current table */
- int table_bits; /* key length of current table */
- int table_size; /* size of current table */
- int total_size; /* sum of root table size and 2nd level table sizes */
- int max_length = -1;
- int bits;
- int bits_count;
-
- BROTLI_DCHECK(root_bits <= BROTLI_REVERSE_BITS_MAX);
- BROTLI_DCHECK(BROTLI_HUFFMAN_MAX_CODE_LENGTH - root_bits <=
- BROTLI_REVERSE_BITS_MAX);
-
- while (symbol_lists[max_length] == 0xFFFF) max_length--;
- max_length += BROTLI_HUFFMAN_MAX_CODE_LENGTH + 1;
-
- table = root_table;
- table_bits = root_bits;
- table_size = 1 << table_bits;
- total_size = table_size;
-
- /* Fill in the root table. Reduce the table size to if possible,
- and create the repetitions by memcpy. */
- if (table_bits > max_length) {
- table_bits = max_length;
- table_size = 1 << table_bits;
- }
- key = 0;
- key_step = BROTLI_REVERSE_BITS_LOWEST;
- bits = 1;
- step = 2;
- do {
- code.bits = (uint8_t)bits;
- symbol = bits - (BROTLI_HUFFMAN_MAX_CODE_LENGTH + 1);
- for (bits_count = count[bits]; bits_count != 0; --bits_count) {
- symbol = symbol_lists[symbol];
- code.value = (uint16_t)symbol;
- ReplicateValue(&table[BrotliReverseBits(key)], step, table_size, code);
- key += key_step;
- }
- step <<= 1;
- key_step >>= 1;
- } while (++bits <= table_bits);
-
- /* If root_bits != table_bits then replicate to fill the remaining slots. */
- while (total_size != table_size) {
- memcpy(&table[table_size], &table[0],
- (size_t)table_size * sizeof(table[0]));
- table_size <<= 1;
- }
-
- /* Fill in 2nd level tables and add pointers to root table. */
- key_step = BROTLI_REVERSE_BITS_LOWEST >> (root_bits - 1);
- sub_key = (BROTLI_REVERSE_BITS_LOWEST << 1);
- sub_key_step = BROTLI_REVERSE_BITS_LOWEST;
- for (len = root_bits + 1, step = 2; len <= max_length; ++len) {
- symbol = len - (BROTLI_HUFFMAN_MAX_CODE_LENGTH + 1);
- for (; count[len] != 0; --count[len]) {
- if (sub_key == (BROTLI_REVERSE_BITS_LOWEST << 1U)) {
- table += table_size;
- table_bits = NextTableBitSize(count, len, root_bits);
- table_size = 1 << table_bits;
- total_size += table_size;
- sub_key = BrotliReverseBits(key);
- key += key_step;
- root_table[sub_key].bits = (uint8_t)(table_bits + root_bits);
- root_table[sub_key].value =
- (uint16_t)(((size_t)(table - root_table)) - sub_key);
- sub_key = 0;
- }
- code.bits = (uint8_t)(len - root_bits);
- symbol = symbol_lists[symbol];
- code.value = (uint16_t)symbol;
- ReplicateValue(
- &table[BrotliReverseBits(sub_key)], step, table_size, code);
- sub_key += sub_key_step;
- }
- step <<= 1;
- sub_key_step >>= 1;
- }
- return (uint32_t)total_size;
-}
-
-uint32_t BrotliBuildSimpleHuffmanTable(HuffmanCode* table,
- int root_bits,
- uint16_t* val,
- uint32_t num_symbols) {
- uint32_t table_size = 1;
- const uint32_t goal_size = 1U << root_bits;
- switch (num_symbols) {
- case 0:
- table[0].bits = 0;
- table[0].value = val[0];
- break;
- case 1:
- table[0].bits = 1;
- table[1].bits = 1;
- if (val[1] > val[0]) {
- table[0].value = val[0];
- table[1].value = val[1];
- } else {
- table[0].value = val[1];
- table[1].value = val[0];
- }
- table_size = 2;
- break;
- case 2:
- table[0].bits = 1;
- table[0].value = val[0];
- table[2].bits = 1;
- table[2].value = val[0];
- if (val[2] > val[1]) {
- table[1].value = val[1];
- table[3].value = val[2];
- } else {
- table[1].value = val[2];
- table[3].value = val[1];
- }
- table[1].bits = 2;
- table[3].bits = 2;
- table_size = 4;
- break;
- case 3: {
- int i, k;
- for (i = 0; i < 3; ++i) {
- for (k = i + 1; k < 4; ++k) {
- if (val[k] < val[i]) {
- uint16_t t = val[k];
- val[k] = val[i];
- val[i] = t;
- }
- }
- }
- for (i = 0; i < 4; ++i) {
- table[i].bits = 2;
- }
- table[0].value = val[0];
- table[2].value = val[1];
- table[1].value = val[2];
- table[3].value = val[3];
- table_size = 4;
- break;
- }
- case 4: {
- int i;
- if (val[3] < val[2]) {
- uint16_t t = val[3];
- val[3] = val[2];
- val[2] = t;
- }
- for (i = 0; i < 7; ++i) {
- table[i].value = val[0];
- table[i].bits = (uint8_t)(1 + (i & 1));
- }
- table[1].value = val[1];
- table[3].value = val[2];
- table[5].value = val[1];
- table[7].value = val[3];
- table[3].bits = 3;
- table[7].bits = 3;
- table_size = 8;
- break;
- }
- }
- while (table_size != goal_size) {
- memcpy(&table[table_size], &table[0],
- (size_t)table_size * sizeof(table[0]));
- table_size <<= 1;
- }
- return goal_size;
-}
-
-#if defined(__cplusplus) || defined(c_plusplus)
-} /* extern "C" */
-#endif
diff --git a/BaseTools/Source/C/BrotliCompress/dec/state.c b/BaseTools/Source/C/BrotliCompress/dec/state.c
deleted file mode 100644
index 88ecfb68b684..000000000000
--- a/BaseTools/Source/C/BrotliCompress/dec/state.c
+++ /dev/null
@@ -1,164 +0,0 @@
-/* Copyright 2015 Google Inc. All Rights Reserved.
-
- Distributed under MIT license.
- See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
-*/
-
-#include "./state.h"
-
-#include <stdlib.h> /* free, malloc */
-
-#include <brotli/types.h>
-#include "./huffman.h"
-
-#if defined(__cplusplus) || defined(c_plusplus)
-extern "C" {
-#endif
-
-BROTLI_BOOL BrotliDecoderStateInit(BrotliDecoderState* s,
- brotli_alloc_func alloc_func, brotli_free_func free_func, void* opaque) {
- if (!alloc_func) {
- s->alloc_func = BrotliDefaultAllocFunc;
- s->free_func = BrotliDefaultFreeFunc;
- s->memory_manager_opaque = 0;
- } else {
- s->alloc_func = alloc_func;
- s->free_func = free_func;
- s->memory_manager_opaque = opaque;
- }
-
- s->error_code = 0; /* BROTLI_DECODER_NO_ERROR */
-
- BrotliInitBitReader(&s->br);
- s->state = BROTLI_STATE_UNINITED;
- s->large_window = 0;
- s->substate_metablock_header = BROTLI_STATE_METABLOCK_HEADER_NONE;
- s->substate_tree_group = BROTLI_STATE_TREE_GROUP_NONE;
- s->substate_context_map = BROTLI_STATE_CONTEXT_MAP_NONE;
- s->substate_uncompressed = BROTLI_STATE_UNCOMPRESSED_NONE;
- s->substate_huffman = BROTLI_STATE_HUFFMAN_NONE;
- s->substate_decode_uint8 = BROTLI_STATE_DECODE_UINT8_NONE;
- s->substate_read_block_length = BROTLI_STATE_READ_BLOCK_LENGTH_NONE;
-
- s->buffer_length = 0;
- s->loop_counter = 0;
- s->pos = 0;
- s->rb_roundtrips = 0;
- s->partial_pos_out = 0;
-
- s->block_type_trees = NULL;
- s->block_len_trees = NULL;
- s->ringbuffer = NULL;
- s->ringbuffer_size = 0;
- s->new_ringbuffer_size = 0;
- s->ringbuffer_mask = 0;
-
- s->context_map = NULL;
- s->context_modes = NULL;
- s->dist_context_map = NULL;
- s->context_map_slice = NULL;
- s->dist_context_map_slice = NULL;
-
- s->sub_loop_counter = 0;
-
- s->literal_hgroup.codes = NULL;
- s->literal_hgroup.htrees = NULL;
- s->insert_copy_hgroup.codes = NULL;
- s->insert_copy_hgroup.htrees = NULL;
- s->distance_hgroup.codes = NULL;
- s->distance_hgroup.htrees = NULL;
-
- s->is_last_metablock = 0;
- s->is_uncompressed = 0;
- s->is_metadata = 0;
- s->should_wrap_ringbuffer = 0;
- s->canny_ringbuffer_allocation = 1;
-
- s->window_bits = 0;
- s->max_distance = 0;
- s->dist_rb[0] = 16;
- s->dist_rb[1] = 15;
- s->dist_rb[2] = 11;
- s->dist_rb[3] = 4;
- s->dist_rb_idx = 0;
- s->block_type_trees = NULL;
- s->block_len_trees = NULL;
-
- /* Make small negative indexes addressable. */
- s->symbol_lists = &s->symbols_lists_array[BROTLI_HUFFMAN_MAX_CODE_LENGTH + 1];
-
- s->mtf_upper_bound = 63;
-
- s->dictionary = BrotliGetDictionary();
- s->transforms = BrotliGetTransforms();
-
- return BROTLI_TRUE;
-}
-
-void BrotliDecoderStateMetablockBegin(BrotliDecoderState* s) {
- s->meta_block_remaining_len = 0;
- s->block_length[0] = 1U << 24;
- s->block_length[1] = 1U << 24;
- s->block_length[2] = 1U << 24;
- s->num_block_types[0] = 1;
- s->num_block_types[1] = 1;
- s->num_block_types[2] = 1;
- s->block_type_rb[0] = 1;
- s->block_type_rb[1] = 0;
- s->block_type_rb[2] = 1;
- s->block_type_rb[3] = 0;
- s->block_type_rb[4] = 1;
- s->block_type_rb[5] = 0;
- s->context_map = NULL;
- s->context_modes = NULL;
- s->dist_context_map = NULL;
- s->context_map_slice = NULL;
- s->literal_htree = NULL;
- s->dist_context_map_slice = NULL;
- s->dist_htree_index = 0;
- s->context_lookup = NULL;
- s->literal_hgroup.codes = NULL;
- s->literal_hgroup.htrees = NULL;
- s->insert_copy_hgroup.codes = NULL;
- s->insert_copy_hgroup.htrees = NULL;
- s->distance_hgroup.codes = NULL;
- s->distance_hgroup.htrees = NULL;
-}
-
-void BrotliDecoderStateCleanupAfterMetablock(BrotliDecoderState* s) {
- BROTLI_DECODER_FREE(s, s->context_modes);
- BROTLI_DECODER_FREE(s, s->context_map);
- BROTLI_DECODER_FREE(s, s->dist_context_map);
- BROTLI_DECODER_FREE(s, s->literal_hgroup.htrees);
- BROTLI_DECODER_FREE(s, s->insert_copy_hgroup.htrees);
- BROTLI_DECODER_FREE(s, s->distance_hgroup.htrees);
-}
-
-void BrotliDecoderStateCleanup(BrotliDecoderState* s) {
- BrotliDecoderStateCleanupAfterMetablock(s);
-
- BROTLI_DECODER_FREE(s, s->ringbuffer);
- BROTLI_DECODER_FREE(s, s->block_type_trees);
-}
-
-BROTLI_BOOL BrotliDecoderHuffmanTreeGroupInit(BrotliDecoderState* s,
- HuffmanTreeGroup* group, uint32_t alphabet_size, uint32_t max_symbol,
- uint32_t ntrees) {
- /* Pack two allocations into one */
- const size_t max_table_size = kMaxHuffmanTableSize[(alphabet_size + 31) >> 5];
- const size_t code_size = sizeof(HuffmanCode) * ntrees * max_table_size;
- const size_t htree_size = sizeof(HuffmanCode*) * ntrees;
- /* Pointer alignment is, hopefully, wider than sizeof(HuffmanCode). */
- HuffmanCode** p = (HuffmanCode**)BROTLI_DECODER_ALLOC(s,
- code_size + htree_size);
- group->alphabet_size = (uint16_t)alphabet_size;
- group->max_symbol = (uint16_t)max_symbol;
- group->num_htrees = (uint16_t)ntrees;
- group->htrees = p;
- group->codes = (HuffmanCode*)(&p[ntrees]);
- return !!p;
-}
-
-#if defined(__cplusplus) || defined(c_plusplus)
-} /* extern "C" */
-#endif
diff --git a/BaseTools/Source/C/BrotliCompress/enc/backward_references.c b/BaseTools/Source/C/BrotliCompress/enc/backward_references.c
deleted file mode 100644
index d14679abcddc..000000000000
--- a/BaseTools/Source/C/BrotliCompress/enc/backward_references.c
+++ /dev/null
@@ -1,144 +0,0 @@
-/* Copyright 2013 Google Inc. All Rights Reserved.
-
- Distributed under MIT license.
- See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
-*/
-
-/* Function to find backward reference copies. */
-
-#include "./backward_references.h"
-
-#include "../common/constants.h"
-#include "../common/dictionary.h"
-#include "../common/platform.h"
-#include <brotli/types.h>
-#include "./command.h"
-#include "./dictionary_hash.h"
-#include "./memory.h"
-#include "./quality.h"
-
-#if defined(__cplusplus) || defined(c_plusplus)
-extern "C" {
-#endif
-
-static BROTLI_INLINE size_t ComputeDistanceCode(size_t distance,
- size_t max_distance,
- const int* dist_cache) {
- if (distance <= max_distance) {
- size_t distance_plus_3 = distance + 3;
- size_t offset0 = distance_plus_3 - (size_t)dist_cache[0];
- size_t offset1 = distance_plus_3 - (size_t)dist_cache[1];
- if (distance == (size_t)dist_cache[0]) {
- return 0;
- } else if (distance == (size_t)dist_cache[1]) {
- return 1;
- } else if (offset0 < 7) {
- return (0x9750468 >> (4 * offset0)) & 0xF;
- } else if (offset1 < 7) {
- return (0xFDB1ACE >> (4 * offset1)) & 0xF;
- } else if (distance == (size_t)dist_cache[2]) {
- return 2;
- } else if (distance == (size_t)dist_cache[3]) {
- return 3;
- }
- }
- return distance + BROTLI_NUM_DISTANCE_SHORT_CODES - 1;
-}
-
-#define EXPAND_CAT(a, b) CAT(a, b)
-#define CAT(a, b) a ## b
-#define FN(X) EXPAND_CAT(X, HASHER())
-#define EXPORT_FN(X) EXPAND_CAT(X, EXPAND_CAT(PREFIX(), HASHER()))
-
-#define PREFIX() N
-
-#define HASHER() H2
-/* NOLINTNEXTLINE(build/include) */
-#include "./backward_references_inc.h"
-#undef HASHER
-
-#define HASHER() H3
-/* NOLINTNEXTLINE(build/include) */
-#include "./backward_references_inc.h"
-#undef HASHER
-
-#define HASHER() H4
-/* NOLINTNEXTLINE(build/include) */
-#include "./backward_references_inc.h"
-#undef HASHER
-
-#define HASHER() H5
-/* NOLINTNEXTLINE(build/include) */
-#include "./backward_references_inc.h"
-#undef HASHER
-
-#define HASHER() H6
-/* NOLINTNEXTLINE(build/include) */
-#include "./backward_references_inc.h"
-#undef HASHER
-
-#define HASHER() H40
-/* NOLINTNEXTLINE(build/include) */
-#include "./backward_references_inc.h"
-#undef HASHER
-
-#define HASHER() H41
-/* NOLINTNEXTLINE(build/include) */
-#include "./backward_references_inc.h"
-#undef HASHER
-
-#define HASHER() H42
-/* NOLINTNEXTLINE(build/include) */
-#include "./backward_references_inc.h"
-#undef HASHER
-
-#define HASHER() H54
-/* NOLINTNEXTLINE(build/include) */
-#include "./backward_references_inc.h"
-#undef HASHER
-
-#define HASHER() H35
-/* NOLINTNEXTLINE(build/include) */
-#include "./backward_references_inc.h"
-#undef HASHER
-
-#define HASHER() H55
-/* NOLINTNEXTLINE(build/include) */
-#include "./backward_references_inc.h"
-#undef HASHER
-
-#define HASHER() H65
-/* NOLINTNEXTLINE(build/include) */
-#include "./backward_references_inc.h"
-#undef HASHER
-
-#undef PREFIX
-
-#undef EXPORT_FN
-#undef FN
-#undef CAT
-#undef EXPAND_CAT
-
-void BrotliCreateBackwardReferences(
- size_t num_bytes, size_t position, const uint8_t* ringbuffer,
- size_t ringbuffer_mask, const BrotliEncoderParams* params,
- HasherHandle hasher, int* dist_cache, size_t* last_insert_len,
- Command* commands, size_t* num_commands, size_t* num_literals) {
- switch (params->hasher.type) {
-#define CASE_(N) \
- case N: \
- CreateBackwardReferencesNH ## N( \
- num_bytes, position, ringbuffer, \
- ringbuffer_mask, params, hasher, dist_cache, \
- last_insert_len, commands, num_commands, num_literals); \
- return;
- FOR_GENERIC_HASHERS(CASE_)
-#undef CASE_
- default:
- break;
- }
-}
-
-#if defined(__cplusplus) || defined(c_plusplus)
-} /* extern "C" */
-#endif
diff --git a/BaseTools/Source/C/BrotliCompress/enc/backward_references_hq.c b/BaseTools/Source/C/BrotliCompress/enc/backward_references_hq.c
deleted file mode 100644
index 89320335ea32..000000000000
--- a/BaseTools/Source/C/BrotliCompress/enc/backward_references_hq.c
+++ /dev/null
@@ -1,830 +0,0 @@
-/* Copyright 2013 Google Inc. All Rights Reserved.
-
- Distributed under MIT license.
- See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
-*/
-
-/* Function to find backward reference copies. */
-
-#include "./backward_references_hq.h"
-
-#include <string.h> /* memcpy, memset */
-
-#include "../common/constants.h"
-#include "../common/platform.h"
-#include <brotli/types.h>
-#include "./command.h"
-#include "./fast_log.h"
-#include "./find_match_length.h"
-#include "./literal_cost.h"
-#include "./memory.h"
-#include "./params.h"
-#include "./prefix.h"
-#include "./quality.h"
-
-#if defined(__cplusplus) || defined(c_plusplus)
-extern "C" {
-#endif
-
-#define BROTLI_MAX_EFFECTIVE_DISTANCE_ALPHABET_SIZE 544
-
-static const float kInfinity = 1.7e38f; /* ~= 2 ^ 127 */
-
-static const uint32_t kDistanceCacheIndex[] = {
- 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1,
-};
-static const int kDistanceCacheOffset[] = {
- 0, 0, 0, 0, -1, 1, -2, 2, -3, 3, -1, 1, -2, 2, -3, 3
-};
-
-void BrotliInitZopfliNodes(ZopfliNode* array, size_t length) {
- ZopfliNode stub;
- size_t i;
- stub.length = 1;
- stub.distance = 0;
- stub.dcode_insert_length = 0;
- stub.u.cost = kInfinity;
- for (i = 0; i < length; ++i) array[i] = stub;
-}
-
-static BROTLI_INLINE uint32_t ZopfliNodeCopyLength(const ZopfliNode* self) {
- return self->length & 0x1FFFFFF;
-}
-
-static BROTLI_INLINE uint32_t ZopfliNodeLengthCode(const ZopfliNode* self) {
- const uint32_t modifier = self->length >> 25;
- return ZopfliNodeCopyLength(self) + 9u - modifier;
-}
-
-static BROTLI_INLINE uint32_t ZopfliNodeCopyDistance(const ZopfliNode* self) {
- return self->distance;
-}
-
-static BROTLI_INLINE uint32_t ZopfliNodeDistanceCode(const ZopfliNode* self) {
- const uint32_t short_code = self->dcode_insert_length >> 27;
- return short_code == 0 ?
- ZopfliNodeCopyDistance(self) + BROTLI_NUM_DISTANCE_SHORT_CODES - 1 :
- short_code - 1;
-}
-
-static BROTLI_INLINE uint32_t ZopfliNodeCommandLength(const ZopfliNode* self) {
- return ZopfliNodeCopyLength(self) + (self->dcode_insert_length & 0x7FFFFFF);
-}
-
-/* Histogram based cost model for zopflification. */
-typedef struct ZopfliCostModel {
- /* The insert and copy length symbols. */
- float cost_cmd_[BROTLI_NUM_COMMAND_SYMBOLS];
- float* cost_dist_;
- uint32_t distance_histogram_size;
- /* Cumulative costs of literals per position in the stream. */
- float* literal_costs_;
- float min_cost_cmd_;
- size_t num_bytes_;
-} ZopfliCostModel;
-
-static void InitZopfliCostModel(
- MemoryManager* m, ZopfliCostModel* self, const BrotliDistanceParams* dist,
- size_t num_bytes) {
- uint32_t distance_histogram_size = dist->alphabet_size;
- if (distance_histogram_size > BROTLI_MAX_EFFECTIVE_DISTANCE_ALPHABET_SIZE) {
- distance_histogram_size = BROTLI_MAX_EFFECTIVE_DISTANCE_ALPHABET_SIZE;
- }
- self->num_bytes_ = num_bytes;
- self->literal_costs_ = BROTLI_ALLOC(m, float, num_bytes + 2);
- self->cost_dist_ = BROTLI_ALLOC(m, float, dist->alphabet_size);
- self->distance_histogram_size = distance_histogram_size;
- if (BROTLI_IS_OOM(m)) return;
-}
-
-static void CleanupZopfliCostModel(MemoryManager* m, ZopfliCostModel* self) {
- BROTLI_FREE(m, self->literal_costs_);
- BROTLI_FREE(m, self->cost_dist_);
-}
-
-static void SetCost(const uint32_t* histogram, size_t histogram_size,
- BROTLI_BOOL literal_histogram, float* cost) {
- size_t sum = 0;
- size_t missing_symbol_sum;
- float log2sum;
- float missing_symbol_cost;
- size_t i;
- for (i = 0; i < histogram_size; i++) {
- sum += histogram[i];
- }
- log2sum = (float)FastLog2(sum);
- missing_symbol_sum = sum;
- if (!literal_histogram) {
- for (i = 0; i < histogram_size; i++) {
- if (histogram[i] == 0) missing_symbol_sum++;
- }
- }
- missing_symbol_cost = (float)FastLog2(missing_symbol_sum) + 2;
- for (i = 0; i < histogram_size; i++) {
- if (histogram[i] == 0) {
- cost[i] = missing_symbol_cost;
- continue;
- }
-
- /* Shannon bits for this symbol. */
- cost[i] = log2sum - (float)FastLog2(histogram[i]);
-
- /* Cannot be coded with less than 1 bit */
- if (cost[i] < 1) cost[i] = 1;
- }
-}
-
-static void ZopfliCostModelSetFromCommands(ZopfliCostModel* self,
- size_t position,
- const uint8_t* ringbuffer,
- size_t ringbuffer_mask,
- const Command* commands,
- size_t num_commands,
- size_t last_insert_len) {
- uint32_t histogram_literal[BROTLI_NUM_LITERAL_SYMBOLS];
- uint32_t histogram_cmd[BROTLI_NUM_COMMAND_SYMBOLS];
- uint32_t histogram_dist[BROTLI_MAX_EFFECTIVE_DISTANCE_ALPHABET_SIZE];
- float cost_literal[BROTLI_NUM_LITERAL_SYMBOLS];
- size_t pos = position - last_insert_len;
- float min_cost_cmd = kInfinity;
- size_t i;
- float* cost_cmd = self->cost_cmd_;
-
- memset(histogram_literal, 0, sizeof(histogram_literal));
- memset(histogram_cmd, 0, sizeof(histogram_cmd));
- memset(histogram_dist, 0, sizeof(histogram_dist));
-
- for (i = 0; i < num_commands; i++) {
- size_t inslength = commands[i].insert_len_;
- size_t copylength = CommandCopyLen(&commands[i]);
- size_t distcode = commands[i].dist_prefix_ & 0x3FF;
- size_t cmdcode = commands[i].cmd_prefix_;
- size_t j;
-
- histogram_cmd[cmdcode]++;
- if (cmdcode >= 128) histogram_dist[distcode]++;
-
- for (j = 0; j < inslength; j++) {
- histogram_literal[ringbuffer[(pos + j) & ringbuffer_mask]]++;
- }
-
- pos += inslength + copylength;
- }
-
- SetCost(histogram_literal, BROTLI_NUM_LITERAL_SYMBOLS, BROTLI_TRUE,
- cost_literal);
- SetCost(histogram_cmd, BROTLI_NUM_COMMAND_SYMBOLS, BROTLI_FALSE,
- cost_cmd);
- SetCost(histogram_dist, self->distance_histogram_size, BROTLI_FALSE,
- self->cost_dist_);
-
- for (i = 0; i < BROTLI_NUM_COMMAND_SYMBOLS; ++i) {
- min_cost_cmd = BROTLI_MIN(float, min_cost_cmd, cost_cmd[i]);
- }
- self->min_cost_cmd_ = min_cost_cmd;
-
- {
- float* literal_costs = self->literal_costs_;
- float literal_carry = 0.0;
- size_t num_bytes = self->num_bytes_;
- literal_costs[0] = 0.0;
- for (i = 0; i < num_bytes; ++i) {
- literal_carry +=
- cost_literal[ringbuffer[(position + i) & ringbuffer_mask]];
- literal_costs[i + 1] = literal_costs[i] + literal_carry;
- literal_carry -= literal_costs[i + 1] - literal_costs[i];
- }
- }
-}
-
-static void ZopfliCostModelSetFromLiteralCosts(ZopfliCostModel* self,
- size_t position,
- const uint8_t* ringbuffer,
- size_t ringbuffer_mask) {
- float* literal_costs = self->literal_costs_;
- float literal_carry = 0.0;
- float* cost_dist = self->cost_dist_;
- float* cost_cmd = self->cost_cmd_;
- size_t num_bytes = self->num_bytes_;
- size_t i;
- BrotliEstimateBitCostsForLiterals(position, num_bytes, ringbuffer_mask,
- ringbuffer, &literal_costs[1]);
- literal_costs[0] = 0.0;
- for (i = 0; i < num_bytes; ++i) {
- literal_carry += literal_costs[i + 1];
- literal_costs[i + 1] = literal_costs[i] + literal_carry;
- literal_carry -= literal_costs[i + 1] - literal_costs[i];
- }
- for (i = 0; i < BROTLI_NUM_COMMAND_SYMBOLS; ++i) {
- cost_cmd[i] = (float)FastLog2(11 + (uint32_t)i);
- }
- for (i = 0; i < self->distance_histogram_size; ++i) {
- cost_dist[i] = (float)FastLog2(20 + (uint32_t)i);
- }
- self->min_cost_cmd_ = (float)FastLog2(11);
-}
-
-static BROTLI_INLINE float ZopfliCostModelGetCommandCost(
- const ZopfliCostModel* self, uint16_t cmdcode) {
- return self->cost_cmd_[cmdcode];
-}
-
-static BROTLI_INLINE float ZopfliCostModelGetDistanceCost(
- const ZopfliCostModel* self, size_t distcode) {
- return self->cost_dist_[distcode];
-}
-
-static BROTLI_INLINE float ZopfliCostModelGetLiteralCosts(
- const ZopfliCostModel* self, size_t from, size_t to) {
- return self->literal_costs_[to] - self->literal_costs_[from];
-}
-
-static BROTLI_INLINE float ZopfliCostModelGetMinCostCmd(
- const ZopfliCostModel* self) {
- return self->min_cost_cmd_;
-}
-
-/* REQUIRES: len >= 2, start_pos <= pos */
-/* REQUIRES: cost < kInfinity, nodes[start_pos].cost < kInfinity */
-/* Maintains the "ZopfliNode array invariant". */
-static BROTLI_INLINE void UpdateZopfliNode(ZopfliNode* nodes, size_t pos,
- size_t start_pos, size_t len, size_t len_code, size_t dist,
- size_t short_code, float cost) {
- ZopfliNode* next = &nodes[pos + len];
- next->length = (uint32_t)(len | ((len + 9u - len_code) << 25));
- next->distance = (uint32_t)dist;
- next->dcode_insert_length = (uint32_t)(
- (short_code << 27) | (pos - start_pos));
- next->u.cost = cost;
-}
-
-typedef struct PosData {
- size_t pos;
- int distance_cache[4];
- float costdiff;
- float cost;
-} PosData;
-
-/* Maintains the smallest 8 cost difference together with their positions */
-typedef struct StartPosQueue {
- PosData q_[8];
- size_t idx_;
-} StartPosQueue;
-
-static BROTLI_INLINE void InitStartPosQueue(StartPosQueue* self) {
- self->idx_ = 0;
-}
-
-static size_t StartPosQueueSize(const StartPosQueue* self) {
- return BROTLI_MIN(size_t, self->idx_, 8);
-}
-
-static void StartPosQueuePush(StartPosQueue* self, const PosData* posdata) {
- size_t offset = ~(self->idx_++) & 7;
- size_t len = StartPosQueueSize(self);
- size_t i;
- PosData* q = self->q_;
- q[offset] = *posdata;
- /* Restore the sorted order. In the list of |len| items at most |len - 1|
- adjacent element comparisons / swaps are required. */
- for (i = 1; i < len; ++i) {
- if (q[offset & 7].costdiff > q[(offset + 1) & 7].costdiff) {
- BROTLI_SWAP(PosData, q, offset & 7, (offset + 1) & 7);
- }
- ++offset;
- }
-}
-
-static const PosData* StartPosQueueAt(const StartPosQueue* self, size_t k) {
- return &self->q_[(k - self->idx_) & 7];
-}
-
-/* Returns the minimum possible copy length that can improve the cost of any */
-/* future position. */
-static size_t ComputeMinimumCopyLength(const float start_cost,
- const ZopfliNode* nodes,
- const size_t num_bytes,
- const size_t pos) {
- /* Compute the minimum possible cost of reaching any future position. */
- float min_cost = start_cost;
- size_t len = 2;
- size_t next_len_bucket = 4;
- size_t next_len_offset = 10;
- while (pos + len <= num_bytes && nodes[pos + len].u.cost <= min_cost) {
- /* We already reached (pos + len) with no more cost than the minimum
- possible cost of reaching anything from this pos, so there is no point in
- looking for lengths <= len. */
- ++len;
- if (len == next_len_offset) {
- /* We reached the next copy length code bucket, so we add one more
- extra bit to the minimum cost. */
- min_cost += 1.0f;
- next_len_offset += next_len_bucket;
- next_len_bucket *= 2;
- }
- }
- return len;
-}
-
-/* REQUIRES: nodes[pos].cost < kInfinity
- REQUIRES: nodes[0..pos] satisfies that "ZopfliNode array invariant". */
-static uint32_t ComputeDistanceShortcut(const size_t block_start,
- const size_t pos,
- const size_t max_backward,
- const size_t gap,
- const ZopfliNode* nodes) {
- const size_t clen = ZopfliNodeCopyLength(&nodes[pos]);
- const size_t ilen = nodes[pos].dcode_insert_length & 0x7FFFFFF;
- const size_t dist = ZopfliNodeCopyDistance(&nodes[pos]);
- /* Since |block_start + pos| is the end position of the command, the copy part
- starts from |block_start + pos - clen|. Distances that are greater than
- this or greater than |max_backward| are static dictionary references, and
- do not update the last distances. Also distance code 0 (last distance)
- does not update the last distances. */
- if (pos == 0) {
- return 0;
- } else if (dist + clen <= block_start + pos + gap &&
- dist <= max_backward + gap &&
- ZopfliNodeDistanceCode(&nodes[pos]) > 0) {
- return (uint32_t)pos;
- } else {
- return nodes[pos - clen - ilen].u.shortcut;
- }
-}
-
-/* Fills in dist_cache[0..3] with the last four distances (as defined by
- Section 4. of the Spec) that would be used at (block_start + pos) if we
- used the shortest path of commands from block_start, computed from
- nodes[0..pos]. The last four distances at block_start are in
- starting_dist_cache[0..3].
- REQUIRES: nodes[pos].cost < kInfinity
- REQUIRES: nodes[0..pos] satisfies that "ZopfliNode array invariant". */
-static void ComputeDistanceCache(const size_t pos,
- const int* starting_dist_cache,
- const ZopfliNode* nodes,
- int* dist_cache) {
- int idx = 0;
- size_t p = nodes[pos].u.shortcut;
- while (idx < 4 && p > 0) {
- const size_t ilen = nodes[p].dcode_insert_length & 0x7FFFFFF;
- const size_t clen = ZopfliNodeCopyLength(&nodes[p]);
- const size_t dist = ZopfliNodeCopyDistance(&nodes[p]);
- dist_cache[idx++] = (int)dist;
- /* Because of prerequisite, p >= clen + ilen >= 2. */
- p = nodes[p - clen - ilen].u.shortcut;
- }
- for (; idx < 4; ++idx) {
- dist_cache[idx] = *starting_dist_cache++;
- }
-}
-
-/* Maintains "ZopfliNode array invariant" and pushes node to the queue, if it
- is eligible. */
-static void EvaluateNode(
- const size_t block_start, const size_t pos, const size_t max_backward_limit,
- const size_t gap, const int* starting_dist_cache,
- const ZopfliCostModel* model, StartPosQueue* queue, ZopfliNode* nodes) {
- /* Save cost, because ComputeDistanceCache invalidates it. */
- float node_cost = nodes[pos].u.cost;
- nodes[pos].u.shortcut = ComputeDistanceShortcut(
- block_start, pos, max_backward_limit, gap, nodes);
- if (node_cost <= ZopfliCostModelGetLiteralCosts(model, 0, pos)) {
- PosData posdata;
- posdata.pos = pos;
- posdata.cost = node_cost;
- posdata.costdiff = node_cost -
- ZopfliCostModelGetLiteralCosts(model, 0, pos);
- ComputeDistanceCache(
- pos, starting_dist_cache, nodes, posdata.distance_cache);
- StartPosQueuePush(queue, &posdata);
- }
-}
-
-/* Returns longest copy length. */
-static size_t UpdateNodes(
- const size_t num_bytes, const size_t block_start, const size_t pos,
- const uint8_t* ringbuffer, const size_t ringbuffer_mask,
- const BrotliEncoderParams* params, const size_t max_backward_limit,
- const int* starting_dist_cache, const size_t num_matches,
- const BackwardMatch* matches, const ZopfliCostModel* model,
- StartPosQueue* queue, ZopfliNode* nodes) {
- const size_t cur_ix = block_start + pos;
- const size_t cur_ix_masked = cur_ix & ringbuffer_mask;
- const size_t max_distance = BROTLI_MIN(size_t, cur_ix, max_backward_limit);
- const size_t max_len = num_bytes - pos;
- const size_t max_zopfli_len = MaxZopfliLen(params);
- const size_t max_iters = MaxZopfliCandidates(params);
- size_t min_len;
- size_t result = 0;
- size_t k;
- size_t gap = 0;
-
- EvaluateNode(block_start, pos, max_backward_limit, gap, starting_dist_cache,
- model, queue, nodes);
-
- {
- const PosData* posdata = StartPosQueueAt(queue, 0);
- float min_cost = (posdata->cost + ZopfliCostModelGetMinCostCmd(model) +
- ZopfliCostModelGetLiteralCosts(model, posdata->pos, pos));
- min_len = ComputeMinimumCopyLength(min_cost, nodes, num_bytes, pos);
- }
-
- /* Go over the command starting positions in order of increasing cost
- difference. */
- for (k = 0; k < max_iters && k < StartPosQueueSize(queue); ++k) {
- const PosData* posdata = StartPosQueueAt(queue, k);
- const size_t start = posdata->pos;
- const uint16_t inscode = GetInsertLengthCode(pos - start);
- const float start_costdiff = posdata->costdiff;
- const float base_cost = start_costdiff + (float)GetInsertExtra(inscode) +
- ZopfliCostModelGetLiteralCosts(model, 0, pos);
-
- /* Look for last distance matches using the distance cache from this
- starting position. */
- size_t best_len = min_len - 1;
- size_t j = 0;
- for (; j < BROTLI_NUM_DISTANCE_SHORT_CODES && best_len < max_len; ++j) {
- const size_t idx = kDistanceCacheIndex[j];
- const size_t backward =
- (size_t)(posdata->distance_cache[idx] + kDistanceCacheOffset[j]);
- size_t prev_ix = cur_ix - backward;
- size_t len = 0;
- uint8_t continuation = ringbuffer[cur_ix_masked + best_len];
- if (cur_ix_masked + best_len > ringbuffer_mask) {
- break;
- }
- if (BROTLI_PREDICT_FALSE(backward > max_distance + gap)) {
- continue;
- }
- if (backward <= max_distance) {
- if (prev_ix >= cur_ix) {
- continue;
- }
-
- prev_ix &= ringbuffer_mask;
- if (prev_ix + best_len > ringbuffer_mask ||
- continuation != ringbuffer[prev_ix + best_len]) {
- continue;
- }
- len = FindMatchLengthWithLimit(&ringbuffer[prev_ix],
- &ringbuffer[cur_ix_masked],
- max_len);
- } else {
- continue;
- }
- {
- const float dist_cost = base_cost +
- ZopfliCostModelGetDistanceCost(model, j);
- size_t l;
- for (l = best_len + 1; l <= len; ++l) {
- const uint16_t copycode = GetCopyLengthCode(l);
- const uint16_t cmdcode =
- CombineLengthCodes(inscode, copycode, j == 0);
- const float cost = (cmdcode < 128 ? base_cost : dist_cost) +
- (float)GetCopyExtra(copycode) +
- ZopfliCostModelGetCommandCost(model, cmdcode);
- if (cost < nodes[pos + l].u.cost) {
- UpdateZopfliNode(nodes, pos, start, l, l, backward, j + 1, cost);
- result = BROTLI_MAX(size_t, result, l);
- }
- best_len = l;
- }
- }
- }
-
- /* At higher iterations look only for new last distance matches, since
- looking only for new command start positions with the same distances
- does not help much. */
- if (k >= 2) continue;
-
- {
- /* Loop through all possible copy lengths at this position. */
- size_t len = min_len;
- for (j = 0; j < num_matches; ++j) {
- BackwardMatch match = matches[j];
- size_t dist = match.distance;
- BROTLI_BOOL is_dictionary_match =
- TO_BROTLI_BOOL(dist > max_distance + gap);
- /* We already tried all possible last distance matches, so we can use
- normal distance code here. */
- size_t dist_code = dist + BROTLI_NUM_DISTANCE_SHORT_CODES - 1;
- uint16_t dist_symbol;
- uint32_t distextra;
- uint32_t distnumextra;
- float dist_cost;
- size_t max_match_len;
- PrefixEncodeCopyDistance(
- dist_code, params->dist.num_direct_distance_codes,
- params->dist.distance_postfix_bits, &dist_symbol, &distextra);
- distnumextra = dist_symbol >> 10;
- dist_cost = base_cost + (float)distnumextra +
- ZopfliCostModelGetDistanceCost(model, dist_symbol & 0x3FF);
-
- /* Try all copy lengths up until the maximum copy length corresponding
- to this distance. If the distance refers to the static dictionary, or
- the maximum length is long enough, try only one maximum length. */
- max_match_len = BackwardMatchLength(&match);
- if (len < max_match_len &&
- (is_dictionary_match || max_match_len > max_zopfli_len)) {
- len = max_match_len;
- }
- for (; len <= max_match_len; ++len) {
- const size_t len_code =
- is_dictionary_match ? BackwardMatchLengthCode(&match) : len;
- const uint16_t copycode = GetCopyLengthCode(len_code);
- const uint16_t cmdcode = CombineLengthCodes(inscode, copycode, 0);
- const float cost = dist_cost + (float)GetCopyExtra(copycode) +
- ZopfliCostModelGetCommandCost(model, cmdcode);
- if (cost < nodes[pos + len].u.cost) {
- UpdateZopfliNode(nodes, pos, start, len, len_code, dist, 0, cost);
- result = BROTLI_MAX(size_t, result, len);
- }
- }
- }
- }
- }
- return result;
-}
-
-static size_t ComputeShortestPathFromNodes(size_t num_bytes,
- ZopfliNode* nodes) {
- size_t index = num_bytes;
- size_t num_commands = 0;
- while ((nodes[index].dcode_insert_length & 0x7FFFFFF) == 0 &&
- nodes[index].length == 1) --index;
- nodes[index].u.next = BROTLI_UINT32_MAX;
- while (index != 0) {
- size_t len = ZopfliNodeCommandLength(&nodes[index]);
- index -= len;
- nodes[index].u.next = (uint32_t)len;
- num_commands++;
- }
- return num_commands;
-}
-
-/* REQUIRES: nodes != NULL and len(nodes) >= num_bytes + 1 */
-void BrotliZopfliCreateCommands(const size_t num_bytes,
- const size_t block_start,
- const size_t max_backward_limit,
- const ZopfliNode* nodes,
- int* dist_cache,
- size_t* last_insert_len,
- const BrotliEncoderParams* params,
- Command* commands,
- size_t* num_literals) {
- size_t pos = 0;
- uint32_t offset = nodes[0].u.next;
- size_t i;
- size_t gap = 0;
- for (i = 0; offset != BROTLI_UINT32_MAX; i++) {
- const ZopfliNode* next = &nodes[pos + offset];
- size_t copy_length = ZopfliNodeCopyLength(next);
- size_t insert_length = next->dcode_insert_length & 0x7FFFFFF;
- pos += insert_length;
- offset = next->u.next;
- if (i == 0) {
- insert_length += *last_insert_len;
- *last_insert_len = 0;
- }
- {
- size_t distance = ZopfliNodeCopyDistance(next);
- size_t len_code = ZopfliNodeLengthCode(next);
- size_t max_distance =
- BROTLI_MIN(size_t, block_start + pos, max_backward_limit);
- BROTLI_BOOL is_dictionary = TO_BROTLI_BOOL(distance > max_distance + gap);
- size_t dist_code = ZopfliNodeDistanceCode(next);
- InitCommand(&commands[i], ¶ms->dist, insert_length,
- copy_length, (int)len_code - (int)copy_length, dist_code);
-
- if (!is_dictionary && dist_code > 0) {
- dist_cache[3] = dist_cache[2];
- dist_cache[2] = dist_cache[1];
- dist_cache[1] = dist_cache[0];
- dist_cache[0] = (int)distance;
- }
- }
-
- *num_literals += insert_length;
- pos += copy_length;
- }
- *last_insert_len += num_bytes - pos;
-}
-
-static size_t ZopfliIterate(size_t num_bytes,
- size_t position,
- const uint8_t* ringbuffer,
- size_t ringbuffer_mask,
- const BrotliEncoderParams* params,
- const size_t max_backward_limit,
- const size_t gap,
- const int* dist_cache,
- const ZopfliCostModel* model,
- const uint32_t* num_matches,
- const BackwardMatch* matches,
- ZopfliNode* nodes) {
- const size_t max_zopfli_len = MaxZopfliLen(params);
- StartPosQueue queue;
- size_t cur_match_pos = 0;
- size_t i;
- nodes[0].length = 0;
- nodes[0].u.cost = 0;
- InitStartPosQueue(&queue);
- for (i = 0; i + 3 < num_bytes; i++) {
- size_t skip = UpdateNodes(num_bytes, position, i, ringbuffer,
- ringbuffer_mask, params, max_backward_limit, dist_cache,
- num_matches[i], &matches[cur_match_pos], model, &queue, nodes);
- if (skip < BROTLI_LONG_COPY_QUICK_STEP) skip = 0;
- cur_match_pos += num_matches[i];
- if (num_matches[i] == 1 &&
- BackwardMatchLength(&matches[cur_match_pos - 1]) > max_zopfli_len) {
- skip = BROTLI_MAX(size_t,
- BackwardMatchLength(&matches[cur_match_pos - 1]), skip);
- }
- if (skip > 1) {
- skip--;
- while (skip) {
- i++;
- if (i + 3 >= num_bytes) break;
- EvaluateNode(position, i, max_backward_limit, gap, dist_cache, model,
- &queue, nodes);
- cur_match_pos += num_matches[i];
- skip--;
- }
- }
- }
- return ComputeShortestPathFromNodes(num_bytes, nodes);
-}
-
-/* REQUIRES: nodes != NULL and len(nodes) >= num_bytes + 1 */
-size_t BrotliZopfliComputeShortestPath(MemoryManager* m,
- size_t num_bytes, size_t position, const uint8_t* ringbuffer,
- size_t ringbuffer_mask, const BrotliEncoderParams* params,
- const size_t max_backward_limit, const int* dist_cache, HasherHandle hasher,
- ZopfliNode* nodes) {
- const size_t max_zopfli_len = MaxZopfliLen(params);
- ZopfliCostModel model;
- StartPosQueue queue;
- BackwardMatch matches[2 * (MAX_NUM_MATCHES_H10 + 64)];
- const size_t store_end = num_bytes >= StoreLookaheadH10() ?
- position + num_bytes - StoreLookaheadH10() + 1 : position;
- size_t i;
- size_t gap = 0;
- size_t lz_matches_offset = 0;
- nodes[0].length = 0;
- nodes[0].u.cost = 0;
- InitZopfliCostModel(m, &model, ¶ms->dist, num_bytes);
- if (BROTLI_IS_OOM(m)) return 0;
- ZopfliCostModelSetFromLiteralCosts(
- &model, position, ringbuffer, ringbuffer_mask);
- InitStartPosQueue(&queue);
- for (i = 0; i + HashTypeLengthH10() - 1 < num_bytes; i++) {
- const size_t pos = position + i;
- const size_t max_distance = BROTLI_MIN(size_t, pos, max_backward_limit);
- size_t skip;
- size_t num_matches = FindAllMatchesH10(hasher, ¶ms->dictionary,
- ringbuffer, ringbuffer_mask, pos, num_bytes - i, max_distance, gap,
- params, &matches[lz_matches_offset]);
- if (num_matches > 0 &&
- BackwardMatchLength(&matches[num_matches - 1]) > max_zopfli_len) {
- matches[0] = matches[num_matches - 1];
- num_matches = 1;
- }
- skip = UpdateNodes(num_bytes, position, i, ringbuffer, ringbuffer_mask,
- params, max_backward_limit, dist_cache, num_matches, matches, &model,
- &queue, nodes);
- if (skip < BROTLI_LONG_COPY_QUICK_STEP) skip = 0;
- if (num_matches == 1 && BackwardMatchLength(&matches[0]) > max_zopfli_len) {
- skip = BROTLI_MAX(size_t, BackwardMatchLength(&matches[0]), skip);
- }
- if (skip > 1) {
- /* Add the tail of the copy to the hasher. */
- StoreRangeH10(hasher, ringbuffer, ringbuffer_mask, pos + 1, BROTLI_MIN(
- size_t, pos + skip, store_end));
- skip--;
- while (skip) {
- i++;
- if (i + HashTypeLengthH10() - 1 >= num_bytes) break;
- EvaluateNode(position, i, max_backward_limit, gap, dist_cache, &model,
- &queue, nodes);
- skip--;
- }
- }
- }
- CleanupZopfliCostModel(m, &model);
- return ComputeShortestPathFromNodes(num_bytes, nodes);
-}
-
-void BrotliCreateZopfliBackwardReferences(MemoryManager* m,
- size_t num_bytes, size_t position, const uint8_t* ringbuffer,
- size_t ringbuffer_mask, const BrotliEncoderParams* params,
- HasherHandle hasher, int* dist_cache, size_t* last_insert_len,
- Command* commands, size_t* num_commands, size_t* num_literals) {
- const size_t max_backward_limit = BROTLI_MAX_BACKWARD_LIMIT(params->lgwin);
- ZopfliNode* nodes;
- nodes = BROTLI_ALLOC(m, ZopfliNode, num_bytes + 1);
- if (BROTLI_IS_OOM(m)) return;
- BrotliInitZopfliNodes(nodes, num_bytes + 1);
- *num_commands += BrotliZopfliComputeShortestPath(m,
- num_bytes, position, ringbuffer, ringbuffer_mask,
- params, max_backward_limit, dist_cache, hasher, nodes);
- if (BROTLI_IS_OOM(m)) return;
- BrotliZopfliCreateCommands(num_bytes, position, max_backward_limit, nodes,
- dist_cache, last_insert_len, params, commands, num_literals);
- BROTLI_FREE(m, nodes);
-}
-
-void BrotliCreateHqZopfliBackwardReferences(MemoryManager* m,
- size_t num_bytes, size_t position, const uint8_t* ringbuffer,
- size_t ringbuffer_mask, const BrotliEncoderParams* params,
- HasherHandle hasher, int* dist_cache, size_t* last_insert_len,
- Command* commands, size_t* num_commands, size_t* num_literals) {
- const size_t max_backward_limit = BROTLI_MAX_BACKWARD_LIMIT(params->lgwin);
- uint32_t* num_matches = BROTLI_ALLOC(m, uint32_t, num_bytes);
- size_t matches_size = 4 * num_bytes;
- const size_t store_end = num_bytes >= StoreLookaheadH10() ?
- position + num_bytes - StoreLookaheadH10() + 1 : position;
- size_t cur_match_pos = 0;
- size_t i;
- size_t orig_num_literals;
- size_t orig_last_insert_len;
- int orig_dist_cache[4];
- size_t orig_num_commands;
- ZopfliCostModel model;
- ZopfliNode* nodes;
- BackwardMatch* matches = BROTLI_ALLOC(m, BackwardMatch, matches_size);
- size_t gap = 0;
- size_t shadow_matches = 0;
- if (BROTLI_IS_OOM(m)) return;
- for (i = 0; i + HashTypeLengthH10() - 1 < num_bytes; ++i) {
- const size_t pos = position + i;
- size_t max_distance = BROTLI_MIN(size_t, pos, max_backward_limit);
- size_t max_length = num_bytes - i;
- size_t num_found_matches;
- size_t cur_match_end;
- size_t j;
- /* Ensure that we have enough free slots. */
- BROTLI_ENSURE_CAPACITY(m, BackwardMatch, matches, matches_size,
- cur_match_pos + MAX_NUM_MATCHES_H10 + shadow_matches);
- if (BROTLI_IS_OOM(m)) return;
- num_found_matches = FindAllMatchesH10(hasher,
- ¶ms->dictionary, ringbuffer, ringbuffer_mask, pos, max_length,
- max_distance, gap, params, &matches[cur_match_pos + shadow_matches]);
- cur_match_end = cur_match_pos + num_found_matches;
- for (j = cur_match_pos; j + 1 < cur_match_end; ++j) {
- BROTLI_DCHECK(BackwardMatchLength(&matches[j]) <=
- BackwardMatchLength(&matches[j + 1]));
- }
- num_matches[i] = (uint32_t)num_found_matches;
- if (num_found_matches > 0) {
- const size_t match_len = BackwardMatchLength(&matches[cur_match_end - 1]);
- if (match_len > MAX_ZOPFLI_LEN_QUALITY_11) {
- const size_t skip = match_len - 1;
- matches[cur_match_pos++] = matches[cur_match_end - 1];
- num_matches[i] = 1;
- /* Add the tail of the copy to the hasher. */
- StoreRangeH10(hasher, ringbuffer, ringbuffer_mask, pos + 1,
- BROTLI_MIN(size_t, pos + match_len, store_end));
- memset(&num_matches[i + 1], 0, skip * sizeof(num_matches[0]));
- i += skip;
- } else {
- cur_match_pos = cur_match_end;
- }
- }
- }
- orig_num_literals = *num_literals;
- orig_last_insert_len = *last_insert_len;
- memcpy(orig_dist_cache, dist_cache, 4 * sizeof(dist_cache[0]));
- orig_num_commands = *num_commands;
- nodes = BROTLI_ALLOC(m, ZopfliNode, num_bytes + 1);
- if (BROTLI_IS_OOM(m)) return;
- InitZopfliCostModel(m, &model, ¶ms->dist, num_bytes);
- if (BROTLI_IS_OOM(m)) return;
- for (i = 0; i < 2; i++) {
- BrotliInitZopfliNodes(nodes, num_bytes + 1);
- if (i == 0) {
- ZopfliCostModelSetFromLiteralCosts(
- &model, position, ringbuffer, ringbuffer_mask);
- } else {
- ZopfliCostModelSetFromCommands(&model, position, ringbuffer,
- ringbuffer_mask, commands, *num_commands - orig_num_commands,
- orig_last_insert_len);
- }
- *num_commands = orig_num_commands;
- *num_literals = orig_num_literals;
- *last_insert_len = orig_last_insert_len;
- memcpy(dist_cache, orig_dist_cache, 4 * sizeof(dist_cache[0]));
- *num_commands += ZopfliIterate(num_bytes, position, ringbuffer,
- ringbuffer_mask, params, max_backward_limit, gap, dist_cache,
- &model, num_matches, matches, nodes);
- BrotliZopfliCreateCommands(num_bytes, position, max_backward_limit,
- nodes, dist_cache, last_insert_len, params, commands, num_literals);
- }
- CleanupZopfliCostModel(m, &model);
- BROTLI_FREE(m, nodes);
- BROTLI_FREE(m, matches);
- BROTLI_FREE(m, num_matches);
-}
-
-#if defined(__cplusplus) || defined(c_plusplus)
-} /* extern "C" */
-#endif
diff --git a/BaseTools/Source/C/BrotliCompress/enc/bit_cost.c b/BaseTools/Source/C/BrotliCompress/enc/bit_cost.c
deleted file mode 100644
index c8ee842ce3b3..000000000000
--- a/BaseTools/Source/C/BrotliCompress/enc/bit_cost.c
+++ /dev/null
@@ -1,35 +0,0 @@
-/* Copyright 2013 Google Inc. All Rights Reserved.
-
- Distributed under MIT license.
- See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
-*/
-
-/* Functions to estimate the bit cost of Huffman trees. */
-
-#include "./bit_cost.h"
-
-#include "../common/constants.h"
-#include "../common/platform.h"
-#include <brotli/types.h>
-#include "./fast_log.h"
-#include "./histogram.h"
-
-#if defined(__cplusplus) || defined(c_plusplus)
-extern "C" {
-#endif
-
-#define FN(X) X ## Literal
-#include "./bit_cost_inc.h" /* NOLINT(build/include) */
-#undef FN
-
-#define FN(X) X ## Command
-#include "./bit_cost_inc.h" /* NOLINT(build/include) */
-#undef FN
-
-#define FN(X) X ## Distance
-#include "./bit_cost_inc.h" /* NOLINT(build/include) */
-#undef FN
-
-#if defined(__cplusplus) || defined(c_plusplus)
-} /* extern "C" */
-#endif
diff --git a/BaseTools/Source/C/BrotliCompress/enc/block_splitter.c b/BaseTools/Source/C/BrotliCompress/enc/block_splitter.c
deleted file mode 100644
index 344a629c7dce..000000000000
--- a/BaseTools/Source/C/BrotliCompress/enc/block_splitter.c
+++ /dev/null
@@ -1,194 +0,0 @@
-/* Copyright 2013 Google Inc. All Rights Reserved.
-
- Distributed under MIT license.
- See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
-*/
-
-/* Block split point selection utilities. */
-
-#include "./block_splitter.h"
-
-#include <string.h> /* memcpy, memset */
-
-#include "../common/platform.h"
-#include "./bit_cost.h"
-#include "./cluster.h"
-#include "./command.h"
-#include "./fast_log.h"
-#include "./histogram.h"
-#include "./memory.h"
-#include "./quality.h"
-
-#if defined(__cplusplus) || defined(c_plusplus)
-extern "C" {
-#endif
-
-static const size_t kMaxLiteralHistograms = 100;
-static const size_t kMaxCommandHistograms = 50;
-static const double kLiteralBlockSwitchCost = 28.1;
-static const double kCommandBlockSwitchCost = 13.5;
-static const double kDistanceBlockSwitchCost = 14.6;
-static const size_t kLiteralStrideLength = 70;
-static const size_t kCommandStrideLength = 40;
-static const size_t kSymbolsPerLiteralHistogram = 544;
-static const size_t kSymbolsPerCommandHistogram = 530;
-static const size_t kSymbolsPerDistanceHistogram = 544;
-static const size_t kMinLengthForBlockSplitting = 128;
-static const size_t kIterMulForRefining = 2;
-static const size_t kMinItersForRefining = 100;
-
-static size_t CountLiterals(const Command* cmds, const size_t num_commands) {
- /* Count how many we have. */
- size_t total_length = 0;
- size_t i;
- for (i = 0; i < num_commands; ++i) {
- total_length += cmds[i].insert_len_;
- }
- return total_length;
-}
-
-static void CopyLiteralsToByteArray(const Command* cmds,
- const size_t num_commands,
- const uint8_t* data,
- const size_t offset,
- const size_t mask,
- uint8_t* literals) {
- size_t pos = 0;
- size_t from_pos = offset & mask;
- size_t i;
- for (i = 0; i < num_commands; ++i) {
- size_t insert_len = cmds[i].insert_len_;
- if (from_pos + insert_len > mask) {
- size_t head_size = mask + 1 - from_pos;
- memcpy(literals + pos, data + from_pos, head_size);
- from_pos = 0;
- pos += head_size;
- insert_len -= head_size;
- }
- if (insert_len > 0) {
- memcpy(literals + pos, data + from_pos, insert_len);
- pos += insert_len;
- }
- from_pos = (from_pos + insert_len + CommandCopyLen(&cmds[i])) & mask;
- }
-}
-
-static BROTLI_INLINE uint32_t MyRand(uint32_t* seed) {
- /* Initial seed should be 7. In this case, loop length is (1 << 29). */
- *seed *= 16807U;
- return *seed;
-}
-
-static BROTLI_INLINE double BitCost(size_t count) {
- return count == 0 ? -2.0 : FastLog2(count);
-}
-
-#define HISTOGRAMS_PER_BATCH 64
-#define CLUSTERS_PER_BATCH 16
-
-#define FN(X) X ## Literal
-#define DataType uint8_t
-/* NOLINTNEXTLINE(build/include) */
-#include "./block_splitter_inc.h"
-#undef DataType
-#undef FN
-
-#define FN(X) X ## Command
-#define DataType uint16_t
-/* NOLINTNEXTLINE(build/include) */
-#include "./block_splitter_inc.h"
-#undef FN
-
-#define FN(X) X ## Distance
-/* NOLINTNEXTLINE(build/include) */
-#include "./block_splitter_inc.h"
-#undef DataType
-#undef FN
-
-void BrotliInitBlockSplit(BlockSplit* self) {
- self->num_types = 0;
- self->num_blocks = 0;
- self->types = 0;
- self->lengths = 0;
- self->types_alloc_size = 0;
- self->lengths_alloc_size = 0;
-}
-
-void BrotliDestroyBlockSplit(MemoryManager* m, BlockSplit* self) {
- BROTLI_FREE(m, self->types);
- BROTLI_FREE(m, self->lengths);
-}
-
-void BrotliSplitBlock(MemoryManager* m,
- const Command* cmds,
- const size_t num_commands,
- const uint8_t* data,
- const size_t pos,
- const size_t mask,
- const BrotliEncoderParams* params,
- BlockSplit* literal_split,
- BlockSplit* insert_and_copy_split,
- BlockSplit* dist_split) {
- {
- size_t literals_count = CountLiterals(cmds, num_commands);
- uint8_t* literals = BROTLI_ALLOC(m, uint8_t, literals_count);
- if (BROTLI_IS_OOM(m)) return;
- /* Create a continuous array of literals. */
- CopyLiteralsToByteArray(cmds, num_commands, data, pos, mask, literals);
- /* Create the block split on the array of literals.
- Literal histograms have alphabet size 256. */
- SplitByteVectorLiteral(
- m, literals, literals_count,
- kSymbolsPerLiteralHistogram, kMaxLiteralHistograms,
- kLiteralStrideLength, kLiteralBlockSwitchCost, params,
- literal_split);
- if (BROTLI_IS_OOM(m)) return;
- BROTLI_FREE(m, literals);
- }
-
- {
- /* Compute prefix codes for commands. */
- uint16_t* insert_and_copy_codes = BROTLI_ALLOC(m, uint16_t, num_commands);
- size_t i;
- if (BROTLI_IS_OOM(m)) return;
- for (i = 0; i < num_commands; ++i) {
- insert_and_copy_codes[i] = cmds[i].cmd_prefix_;
- }
- /* Create the block split on the array of command prefixes. */
- SplitByteVectorCommand(
- m, insert_and_copy_codes, num_commands,
- kSymbolsPerCommandHistogram, kMaxCommandHistograms,
- kCommandStrideLength, kCommandBlockSwitchCost, params,
- insert_and_copy_split);
- if (BROTLI_IS_OOM(m)) return;
- /* TODO: reuse for distances? */
- BROTLI_FREE(m, insert_and_copy_codes);
- }
-
- {
- /* Create a continuous array of distance prefixes. */
- uint16_t* distance_prefixes = BROTLI_ALLOC(m, uint16_t, num_commands);
- size_t j = 0;
- size_t i;
- if (BROTLI_IS_OOM(m)) return;
- for (i = 0; i < num_commands; ++i) {
- const Command* cmd = &cmds[i];
- if (CommandCopyLen(cmd) && cmd->cmd_prefix_ >= 128) {
- distance_prefixes[j++] = cmd->dist_prefix_ & 0x3FF;
- }
- }
- /* Create the block split on the array of distance prefixes. */
- SplitByteVectorDistance(
- m, distance_prefixes, j,
- kSymbolsPerDistanceHistogram, kMaxCommandHistograms,
- kCommandStrideLength, kDistanceBlockSwitchCost, params,
- dist_split);
- if (BROTLI_IS_OOM(m)) return;
- BROTLI_FREE(m, distance_prefixes);
- }
-}
-
-
-#if defined(__cplusplus) || defined(c_plusplus)
-} /* extern "C" */
-#endif
diff --git a/BaseTools/Source/C/BrotliCompress/enc/brotli_bit_stream.c b/BaseTools/Source/C/BrotliCompress/enc/brotli_bit_stream.c
deleted file mode 100644
index 50b10eda851b..000000000000
--- a/BaseTools/Source/C/BrotliCompress/enc/brotli_bit_stream.c
+++ /dev/null
@@ -1,1331 +0,0 @@
-/* Copyright 2014 Google Inc. All Rights Reserved.
-
- Distributed under MIT license.
- See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
-*/
-
-/* Brotli bit stream functions to support the low level format. There are no
- compression algorithms here, just the right ordering of bits to match the
- specs. */
-
-#include "./brotli_bit_stream.h"
-
-#include <string.h> /* memcpy, memset */
-
-#include "../common/constants.h"
-#include "../common/context.h"
-#include "../common/platform.h"
-#include <brotli/types.h>
-#include "./entropy_encode.h"
-#include "./entropy_encode_static.h"
-#include "./fast_log.h"
-#include "./histogram.h"
-#include "./memory.h"
-#include "./write_bits.h"
-
-#if defined(__cplusplus) || defined(c_plusplus)
-extern "C" {
-#endif
-
-#define MAX_HUFFMAN_TREE_SIZE (2 * BROTLI_NUM_COMMAND_SYMBOLS + 1)
-/* The maximum size of Huffman dictionary for distances assuming that
- NPOSTFIX = 0 and NDIRECT = 0. */
-#define MAX_SIMPLE_DISTANCE_ALPHABET_SIZE \
- BROTLI_DISTANCE_ALPHABET_SIZE(0, 0, BROTLI_LARGE_MAX_DISTANCE_BITS)
-/* MAX_SIMPLE_DISTANCE_ALPHABET_SIZE == 140 */
-
-/* Represents the range of values belonging to a prefix code:
- [offset, offset + 2^nbits) */
-typedef struct PrefixCodeRange {
- uint32_t offset;
- uint32_t nbits;
-} PrefixCodeRange;
-
-static const PrefixCodeRange
- kBlockLengthPrefixCode[BROTLI_NUM_BLOCK_LEN_SYMBOLS] = {
- { 1, 2}, { 5, 2}, { 9, 2}, {13, 2}, {17, 3}, { 25, 3}, { 33, 3},
- {41, 3}, {49, 4}, {65, 4}, {81, 4}, {97, 4}, {113, 5}, {145, 5},
- {177, 5}, { 209, 5}, { 241, 6}, { 305, 6}, { 369, 7}, { 497, 8},
- {753, 9}, {1265, 10}, {2289, 11}, {4337, 12}, {8433, 13}, {16625, 24}
-};
-
-static BROTLI_INLINE uint32_t BlockLengthPrefixCode(uint32_t len) {
- uint32_t code = (len >= 177) ? (len >= 753 ? 20 : 14) : (len >= 41 ? 7 : 0);
- while (code < (BROTLI_NUM_BLOCK_LEN_SYMBOLS - 1) &&
- len >= kBlockLengthPrefixCode[code + 1].offset) ++code;
- return code;
-}
-
-static BROTLI_INLINE void GetBlockLengthPrefixCode(uint32_t len, size_t* code,
- uint32_t* n_extra, uint32_t* extra) {
- *code = BlockLengthPrefixCode(len);
- *n_extra = kBlockLengthPrefixCode[*code].nbits;
- *extra = len - kBlockLengthPrefixCode[*code].offset;
-}
-
-typedef struct BlockTypeCodeCalculator {
- size_t last_type;
- size_t second_last_type;
-} BlockTypeCodeCalculator;
-
-static void InitBlockTypeCodeCalculator(BlockTypeCodeCalculator* self) {
- self->last_type = 1;
- self->second_last_type = 0;
-}
-
-static BROTLI_INLINE size_t NextBlockTypeCode(
- BlockTypeCodeCalculator* calculator, uint8_t type) {
- size_t type_code = (type == calculator->last_type + 1) ? 1u :
- (type == calculator->second_last_type) ? 0u : type + 2u;
- calculator->second_last_type = calculator->last_type;
- calculator->last_type = type;
- return type_code;
-}
-
-/* |nibblesbits| represents the 2 bits to encode MNIBBLES (0-3)
- REQUIRES: length > 0
- REQUIRES: length <= (1 << 24) */
-static void BrotliEncodeMlen(size_t length, uint64_t* bits,
- size_t* numbits, uint64_t* nibblesbits) {
- size_t lg = (length == 1) ? 1 : Log2FloorNonZero((uint32_t)(length - 1)) + 1;
- size_t mnibbles = (lg < 16 ? 16 : (lg + 3)) / 4;
- BROTLI_DCHECK(length > 0);
- BROTLI_DCHECK(length <= (1 << 24));
- BROTLI_DCHECK(lg <= 24);
- *nibblesbits = mnibbles - 4;
- *numbits = mnibbles * 4;
- *bits = length - 1;
-}
-
-static BROTLI_INLINE void StoreCommandExtra(
- const Command* cmd, size_t* storage_ix, uint8_t* storage) {
- uint32_t copylen_code = CommandCopyLenCode(cmd);
- uint16_t inscode = GetInsertLengthCode(cmd->insert_len_);
- uint16_t copycode = GetCopyLengthCode(copylen_code);
- uint32_t insnumextra = GetInsertExtra(inscode);
- uint64_t insextraval = cmd->insert_len_ - GetInsertBase(inscode);
- uint64_t copyextraval = copylen_code - GetCopyBase(copycode);
- uint64_t bits = (copyextraval << insnumextra) | insextraval;
- BrotliWriteBits(
- insnumextra + GetCopyExtra(copycode), bits, storage_ix, storage);
-}
-
-/* Data structure that stores almost everything that is needed to encode each
- block switch command. */
-typedef struct BlockSplitCode {
- BlockTypeCodeCalculator type_code_calculator;
- uint8_t type_depths[BROTLI_MAX_BLOCK_TYPE_SYMBOLS];
- uint16_t type_bits[BROTLI_MAX_BLOCK_TYPE_SYMBOLS];
- uint8_t length_depths[BROTLI_NUM_BLOCK_LEN_SYMBOLS];
- uint16_t length_bits[BROTLI_NUM_BLOCK_LEN_SYMBOLS];
-} BlockSplitCode;
-
-/* Stores a number between 0 and 255. */
-static void StoreVarLenUint8(size_t n, size_t* storage_ix, uint8_t* storage) {
- if (n == 0) {
- BrotliWriteBits(1, 0, storage_ix, storage);
- } else {
- size_t nbits = Log2FloorNonZero(n);
- BrotliWriteBits(1, 1, storage_ix, storage);
- BrotliWriteBits(3, nbits, storage_ix, storage);
- BrotliWriteBits(nbits, n - ((size_t)1 << nbits), storage_ix, storage);
- }
-}
-
-/* Stores the compressed meta-block header.
- REQUIRES: length > 0
- REQUIRES: length <= (1 << 24) */
-static void StoreCompressedMetaBlockHeader(BROTLI_BOOL is_final_block,
- size_t length,
- size_t* storage_ix,
- uint8_t* storage) {
- uint64_t lenbits;
- size_t nlenbits;
- uint64_t nibblesbits;
-
- /* Write ISLAST bit. */
- BrotliWriteBits(1, (uint64_t)is_final_block, storage_ix, storage);
- /* Write ISEMPTY bit. */
- if (is_final_block) {
- BrotliWriteBits(1, 0, storage_ix, storage);
- }
-
- BrotliEncodeMlen(length, &lenbits, &nlenbits, &nibblesbits);
- BrotliWriteBits(2, nibblesbits, storage_ix, storage);
- BrotliWriteBits(nlenbits, lenbits, storage_ix, storage);
-
- if (!is_final_block) {
- /* Write ISUNCOMPRESSED bit. */
- BrotliWriteBits(1, 0, storage_ix, storage);
- }
-}
-
-/* Stores the uncompressed meta-block header.
- REQUIRES: length > 0
- REQUIRES: length <= (1 << 24) */
-static void BrotliStoreUncompressedMetaBlockHeader(size_t length,
- size_t* storage_ix,
- uint8_t* storage) {
- uint64_t lenbits;
- size_t nlenbits;
- uint64_t nibblesbits;
-
- /* Write ISLAST bit.
- Uncompressed block cannot be the last one, so set to 0. */
- BrotliWriteBits(1, 0, storage_ix, storage);
- BrotliEncodeMlen(length, &lenbits, &nlenbits, &nibblesbits);
- BrotliWriteBits(2, nibblesbits, storage_ix, storage);
- BrotliWriteBits(nlenbits, lenbits, storage_ix, storage);
- /* Write ISUNCOMPRESSED bit. */
- BrotliWriteBits(1, 1, storage_ix, storage);
-}
-
-static void BrotliStoreHuffmanTreeOfHuffmanTreeToBitMask(
- const int num_codes, const uint8_t* code_length_bitdepth,
- size_t* storage_ix, uint8_t* storage) {
- static const uint8_t kStorageOrder[BROTLI_CODE_LENGTH_CODES] = {
- 1, 2, 3, 4, 0, 5, 17, 6, 16, 7, 8, 9, 10, 11, 12, 13, 14, 15
- };
- /* The bit lengths of the Huffman code over the code length alphabet
- are compressed with the following static Huffman code:
- Symbol Code
- ------ ----
- 0 00
- 1 1110
- 2 110
- 3 01
- 4 10
- 5 1111 */
- static const uint8_t kHuffmanBitLengthHuffmanCodeSymbols[6] = {
- 0, 7, 3, 2, 1, 15
- };
- static const uint8_t kHuffmanBitLengthHuffmanCodeBitLengths[6] = {
- 2, 4, 3, 2, 2, 4
- };
-
- size_t skip_some = 0; /* skips none. */
-
- /* Throw away trailing zeros: */
- size_t codes_to_store = BROTLI_CODE_LENGTH_CODES;
- if (num_codes > 1) {
- for (; codes_to_store > 0; --codes_to_store) {
- if (code_length_bitdepth[kStorageOrder[codes_to_store - 1]] != 0) {
- break;
- }
- }
- }
- if (code_length_bitdepth[kStorageOrder[0]] == 0 &&
- code_length_bitdepth[kStorageOrder[1]] == 0) {
- skip_some = 2; /* skips two. */
- if (code_length_bitdepth[kStorageOrder[2]] == 0) {
- skip_some = 3; /* skips three. */
- }
- }
- BrotliWriteBits(2, skip_some, storage_ix, storage);
- {
- size_t i;
- for (i = skip_some; i < codes_to_store; ++i) {
- size_t l = code_length_bitdepth[kStorageOrder[i]];
- BrotliWriteBits(kHuffmanBitLengthHuffmanCodeBitLengths[l],
- kHuffmanBitLengthHuffmanCodeSymbols[l], storage_ix, storage);
- }
- }
-}
-
-static void BrotliStoreHuffmanTreeToBitMask(
- const size_t huffman_tree_size, const uint8_t* huffman_tree,
- const uint8_t* huffman_tree_extra_bits, const uint8_t* code_length_bitdepth,
- const uint16_t* code_length_bitdepth_symbols,
- size_t* BROTLI_RESTRICT storage_ix, uint8_t* BROTLI_RESTRICT storage) {
- size_t i;
- for (i = 0; i < huffman_tree_size; ++i) {
- size_t ix = huffman_tree[i];
- BrotliWriteBits(code_length_bitdepth[ix], code_length_bitdepth_symbols[ix],
- storage_ix, storage);
- /* Extra bits */
- switch (ix) {
- case BROTLI_REPEAT_PREVIOUS_CODE_LENGTH:
- BrotliWriteBits(2, huffman_tree_extra_bits[i], storage_ix, storage);
- break;
- case BROTLI_REPEAT_ZERO_CODE_LENGTH:
- BrotliWriteBits(3, huffman_tree_extra_bits[i], storage_ix, storage);
- break;
- }
- }
-}
-
-static void StoreSimpleHuffmanTree(const uint8_t* depths,
- size_t symbols[4],
- size_t num_symbols,
- size_t max_bits,
- size_t* storage_ix, uint8_t* storage) {
- /* value of 1 indicates a simple Huffman code */
- BrotliWriteBits(2, 1, storage_ix, storage);
- BrotliWriteBits(2, num_symbols - 1, storage_ix, storage); /* NSYM - 1 */
-
- {
- /* Sort */
- size_t i;
- for (i = 0; i < num_symbols; i++) {
- size_t j;
- for (j = i + 1; j < num_symbols; j++) {
- if (depths[symbols[j]] < depths[symbols[i]]) {
- BROTLI_SWAP(size_t, symbols, j, i);
- }
- }
- }
- }
-
- if (num_symbols == 2) {
- BrotliWriteBits(max_bits, symbols[0], storage_ix, storage);
- BrotliWriteBits(max_bits, symbols[1], storage_ix, storage);
- } else if (num_symbols == 3) {
- BrotliWriteBits(max_bits, symbols[0], storage_ix, storage);
- BrotliWriteBits(max_bits, symbols[1], storage_ix, storage);
- BrotliWriteBits(max_bits, symbols[2], storage_ix, storage);
- } else {
- BrotliWriteBits(max_bits, symbols[0], storage_ix, storage);
- BrotliWriteBits(max_bits, symbols[1], storage_ix, storage);
- BrotliWriteBits(max_bits, symbols[2], storage_ix, storage);
- BrotliWriteBits(max_bits, symbols[3], storage_ix, storage);
- /* tree-select */
- BrotliWriteBits(1, depths[symbols[0]] == 1 ? 1 : 0, storage_ix, storage);
- }
-}
-
-/* num = alphabet size
- depths = symbol depths */
-void BrotliStoreHuffmanTree(const uint8_t* depths, size_t num,
- HuffmanTree* tree,
- size_t* storage_ix, uint8_t* storage) {
- /* Write the Huffman tree into the brotli-representation.
- The command alphabet is the largest, so this allocation will fit all
- alphabets. */
- uint8_t huffman_tree[BROTLI_NUM_COMMAND_SYMBOLS];
- uint8_t huffman_tree_extra_bits[BROTLI_NUM_COMMAND_SYMBOLS];
- size_t huffman_tree_size = 0;
- uint8_t code_length_bitdepth[BROTLI_CODE_LENGTH_CODES] = { 0 };
- uint16_t code_length_bitdepth_symbols[BROTLI_CODE_LENGTH_CODES];
- uint32_t huffman_tree_histogram[BROTLI_CODE_LENGTH_CODES] = { 0 };
- size_t i;
- int num_codes = 0;
- size_t code = 0;
-
- BROTLI_DCHECK(num <= BROTLI_NUM_COMMAND_SYMBOLS);
-
- BrotliWriteHuffmanTree(depths, num, &huffman_tree_size, huffman_tree,
- huffman_tree_extra_bits);
-
- /* Calculate the statistics of the Huffman tree in brotli-representation. */
- for (i = 0; i < huffman_tree_size; ++i) {
- ++huffman_tree_histogram[huffman_tree[i]];
- }
-
- for (i = 0; i < BROTLI_CODE_LENGTH_CODES; ++i) {
- if (huffman_tree_histogram[i]) {
- if (num_codes == 0) {
- code = i;
- num_codes = 1;
- } else if (num_codes == 1) {
- num_codes = 2;
- break;
- }
- }
- }
-
- /* Calculate another Huffman tree to use for compressing both the
- earlier Huffman tree with. */
- BrotliCreateHuffmanTree(huffman_tree_histogram, BROTLI_CODE_LENGTH_CODES,
- 5, tree, code_length_bitdepth);
- BrotliConvertBitDepthsToSymbols(code_length_bitdepth,
- BROTLI_CODE_LENGTH_CODES,
- code_length_bitdepth_symbols);
-
- /* Now, we have all the data, let's start storing it */
- BrotliStoreHuffmanTreeOfHuffmanTreeToBitMask(num_codes, code_length_bitdepth,
- storage_ix, storage);
-
- if (num_codes == 1) {
- code_length_bitdepth[code] = 0;
- }
-
- /* Store the real Huffman tree now. */
- BrotliStoreHuffmanTreeToBitMask(huffman_tree_size,
- huffman_tree,
- huffman_tree_extra_bits,
- code_length_bitdepth,
- code_length_bitdepth_symbols,
- storage_ix, storage);
-}
-
-/* Builds a Huffman tree from histogram[0:length] into depth[0:length] and
- bits[0:length] and stores the encoded tree to the bit stream. */
-static void BuildAndStoreHuffmanTree(const uint32_t* histogram,
- const size_t histogram_length,
- const size_t alphabet_size,
- HuffmanTree* tree,
- uint8_t* depth,
- uint16_t* bits,
- size_t* storage_ix,
- uint8_t* storage) {
- size_t count = 0;
- size_t s4[4] = { 0 };
- size_t i;
- size_t max_bits = 0;
- for (i = 0; i < histogram_length; i++) {
- if (histogram[i]) {
- if (count < 4) {
- s4[count] = i;
- } else if (count > 4) {
- break;
- }
- count++;
- }
- }
-
- {
- size_t max_bits_counter = alphabet_size - 1;
- while (max_bits_counter) {
- max_bits_counter >>= 1;
- ++max_bits;
- }
- }
-
- if (count <= 1) {
- BrotliWriteBits(4, 1, storage_ix, storage);
- BrotliWriteBits(max_bits, s4[0], storage_ix, storage);
- depth[s4[0]] = 0;
- bits[s4[0]] = 0;
- return;
- }
-
- memset(depth, 0, histogram_length * sizeof(depth[0]));
- BrotliCreateHuffmanTree(histogram, histogram_length, 15, tree, depth);
- BrotliConvertBitDepthsToSymbols(depth, histogram_length, bits);
-
- if (count <= 4) {
- StoreSimpleHuffmanTree(depth, s4, count, max_bits, storage_ix, storage);
- } else {
- BrotliStoreHuffmanTree(depth, histogram_length, tree, storage_ix, storage);
- }
-}
-
-static BROTLI_INLINE BROTLI_BOOL SortHuffmanTree(
- const HuffmanTree* v0, const HuffmanTree* v1) {
- return TO_BROTLI_BOOL(v0->total_count_ < v1->total_count_);
-}
-
-void BrotliBuildAndStoreHuffmanTreeFast(MemoryManager* m,
- const uint32_t* histogram,
- const size_t histogram_total,
- const size_t max_bits,
- uint8_t* depth, uint16_t* bits,
- size_t* storage_ix,
- uint8_t* storage) {
- size_t count = 0;
- size_t symbols[4] = { 0 };
- size_t length = 0;
- size_t total = histogram_total;
- while (total != 0) {
- if (histogram[length]) {
- if (count < 4) {
- symbols[count] = length;
- }
- ++count;
- total -= histogram[length];
- }
- ++length;
- }
-
- if (count <= 1) {
- BrotliWriteBits(4, 1, storage_ix, storage);
- BrotliWriteBits(max_bits, symbols[0], storage_ix, storage);
- depth[symbols[0]] = 0;
- bits[symbols[0]] = 0;
- return;
- }
-
- memset(depth, 0, length * sizeof(depth[0]));
- {
- const size_t max_tree_size = 2 * length + 1;
- HuffmanTree* tree = BROTLI_ALLOC(m, HuffmanTree, max_tree_size);
- uint32_t count_limit;
- if (BROTLI_IS_OOM(m)) return;
- for (count_limit = 1; ; count_limit *= 2) {
- HuffmanTree* node = tree;
- size_t l;
- for (l = length; l != 0;) {
- --l;
- if (histogram[l]) {
- if (BROTLI_PREDICT_TRUE(histogram[l] >= count_limit)) {
- InitHuffmanTree(node, histogram[l], -1, (int16_t)l);
- } else {
- InitHuffmanTree(node, count_limit, -1, (int16_t)l);
- }
- ++node;
- }
- }
- {
- const int n = (int)(node - tree);
- HuffmanTree sentinel;
- int i = 0; /* Points to the next leaf node. */
- int j = n + 1; /* Points to the next non-leaf node. */
- int k;
-
- SortHuffmanTreeItems(tree, (size_t)n, SortHuffmanTree);
- /* The nodes are:
- [0, n): the sorted leaf nodes that we start with.
- [n]: we add a sentinel here.
- [n + 1, 2n): new parent nodes are added here, starting from
- (n+1). These are naturally in ascending order.
- [2n]: we add a sentinel at the end as well.
- There will be (2n+1) elements at the end. */
- InitHuffmanTree(&sentinel, BROTLI_UINT32_MAX, -1, -1);
- *node++ = sentinel;
- *node++ = sentinel;
-
- for (k = n - 1; k > 0; --k) {
- int left, right;
- if (tree[i].total_count_ <= tree[j].total_count_) {
- left = i;
- ++i;
- } else {
- left = j;
- ++j;
- }
- if (tree[i].total_count_ <= tree[j].total_count_) {
- right = i;
- ++i;
- } else {
- right = j;
- ++j;
- }
- /* The sentinel node becomes the parent node. */
- node[-1].total_count_ =
- tree[left].total_count_ + tree[right].total_count_;
- node[-1].index_left_ = (int16_t)left;
- node[-1].index_right_or_value_ = (int16_t)right;
- /* Add back the last sentinel node. */
- *node++ = sentinel;
- }
- if (BrotliSetDepth(2 * n - 1, tree, depth, 14)) {
- /* We need to pack the Huffman tree in 14 bits. If this was not
- successful, add fake entities to the lowest values and retry. */
- break;
- }
- }
- }
- BROTLI_FREE(m, tree);
- }
- BrotliConvertBitDepthsToSymbols(depth, length, bits);
- if (count <= 4) {
- size_t i;
- /* value of 1 indicates a simple Huffman code */
- BrotliWriteBits(2, 1, storage_ix, storage);
- BrotliWriteBits(2, count - 1, storage_ix, storage); /* NSYM - 1 */
-
- /* Sort */
- for (i = 0; i < count; i++) {
- size_t j;
- for (j = i + 1; j < count; j++) {
- if (depth[symbols[j]] < depth[symbols[i]]) {
- BROTLI_SWAP(size_t, symbols, j, i);
- }
- }
- }
-
- if (count == 2) {
- BrotliWriteBits(max_bits, symbols[0], storage_ix, storage);
- BrotliWriteBits(max_bits, symbols[1], storage_ix, storage);
- } else if (count == 3) {
- BrotliWriteBits(max_bits, symbols[0], storage_ix, storage);
- BrotliWriteBits(max_bits, symbols[1], storage_ix, storage);
- BrotliWriteBits(max_bits, symbols[2], storage_ix, storage);
- } else {
- BrotliWriteBits(max_bits, symbols[0], storage_ix, storage);
- BrotliWriteBits(max_bits, symbols[1], storage_ix, storage);
- BrotliWriteBits(max_bits, symbols[2], storage_ix, storage);
- BrotliWriteBits(max_bits, symbols[3], storage_ix, storage);
- /* tree-select */
- BrotliWriteBits(1, depth[symbols[0]] == 1 ? 1 : 0, storage_ix, storage);
- }
- } else {
- uint8_t previous_value = 8;
- size_t i;
- /* Complex Huffman Tree */
- StoreStaticCodeLengthCode(storage_ix, storage);
-
- /* Actual RLE coding. */
- for (i = 0; i < length;) {
- const uint8_t value = depth[i];
- size_t reps = 1;
- size_t k;
- for (k = i + 1; k < length && depth[k] == value; ++k) {
- ++reps;
- }
- i += reps;
- if (value == 0) {
- BrotliWriteBits(kZeroRepsDepth[reps], kZeroRepsBits[reps],
- storage_ix, storage);
- } else {
- if (previous_value != value) {
- BrotliWriteBits(kCodeLengthDepth[value], kCodeLengthBits[value],
- storage_ix, storage);
- --reps;
- }
- if (reps < 3) {
- while (reps != 0) {
- reps--;
- BrotliWriteBits(kCodeLengthDepth[value], kCodeLengthBits[value],
- storage_ix, storage);
- }
- } else {
- reps -= 3;
- BrotliWriteBits(kNonZeroRepsDepth[reps], kNonZeroRepsBits[reps],
- storage_ix, storage);
- }
- previous_value = value;
- }
- }
- }
-}
-
-static size_t IndexOf(const uint8_t* v, size_t v_size, uint8_t value) {
- size_t i = 0;
- for (; i < v_size; ++i) {
- if (v[i] == value) return i;
- }
- return i;
-}
-
-static void MoveToFront(uint8_t* v, size_t index) {
- uint8_t value = v[index];
- size_t i;
- for (i = index; i != 0; --i) {
- v[i] = v[i - 1];
- }
- v[0] = value;
-}
-
-static void MoveToFrontTransform(const uint32_t* BROTLI_RESTRICT v_in,
- const size_t v_size,
- uint32_t* v_out) {
- size_t i;
- uint8_t mtf[256];
- uint32_t max_value;
- if (v_size == 0) {
- return;
- }
- max_value = v_in[0];
- for (i = 1; i < v_size; ++i) {
- if (v_in[i] > max_value) max_value = v_in[i];
- }
- BROTLI_DCHECK(max_value < 256u);
- for (i = 0; i <= max_value; ++i) {
- mtf[i] = (uint8_t)i;
- }
- {
- size_t mtf_size = max_value + 1;
- for (i = 0; i < v_size; ++i) {
- size_t index = IndexOf(mtf, mtf_size, (uint8_t)v_in[i]);
- BROTLI_DCHECK(index < mtf_size);
- v_out[i] = (uint32_t)index;
- MoveToFront(mtf, index);
- }
- }
-}
-
-/* Finds runs of zeros in v[0..in_size) and replaces them with a prefix code of
- the run length plus extra bits (lower 9 bits is the prefix code and the rest
- are the extra bits). Non-zero values in v[] are shifted by
- *max_length_prefix. Will not create prefix codes bigger than the initial
- value of *max_run_length_prefix. The prefix code of run length L is simply
- Log2Floor(L) and the number of extra bits is the same as the prefix code. */
-static void RunLengthCodeZeros(const size_t in_size,
- uint32_t* BROTLI_RESTRICT v, size_t* BROTLI_RESTRICT out_size,
- uint32_t* BROTLI_RESTRICT max_run_length_prefix) {
- uint32_t max_reps = 0;
- size_t i;
- uint32_t max_prefix;
- for (i = 0; i < in_size;) {
- uint32_t reps = 0;
- for (; i < in_size && v[i] != 0; ++i) ;
- for (; i < in_size && v[i] == 0; ++i) {
- ++reps;
- }
- max_reps = BROTLI_MAX(uint32_t, reps, max_reps);
- }
- max_prefix = max_reps > 0 ? Log2FloorNonZero(max_reps) : 0;
- max_prefix = BROTLI_MIN(uint32_t, max_prefix, *max_run_length_prefix);
- *max_run_length_prefix = max_prefix;
- *out_size = 0;
- for (i = 0; i < in_size;) {
- BROTLI_DCHECK(*out_size <= i);
- if (v[i] != 0) {
- v[*out_size] = v[i] + *max_run_length_prefix;
- ++i;
- ++(*out_size);
- } else {
- uint32_t reps = 1;
- size_t k;
- for (k = i + 1; k < in_size && v[k] == 0; ++k) {
- ++reps;
- }
- i += reps;
- while (reps != 0) {
- if (reps < (2u << max_prefix)) {
- uint32_t run_length_prefix = Log2FloorNonZero(reps);
- const uint32_t extra_bits = reps - (1u << run_length_prefix);
- v[*out_size] = run_length_prefix + (extra_bits << 9);
- ++(*out_size);
- break;
- } else {
- const uint32_t extra_bits = (1u << max_prefix) - 1u;
- v[*out_size] = max_prefix + (extra_bits << 9);
- reps -= (2u << max_prefix) - 1u;
- ++(*out_size);
- }
- }
- }
- }
-}
-
-#define SYMBOL_BITS 9
-
-static void EncodeContextMap(MemoryManager* m,
- const uint32_t* context_map,
- size_t context_map_size,
- size_t num_clusters,
- HuffmanTree* tree,
- size_t* storage_ix, uint8_t* storage) {
- size_t i;
- uint32_t* rle_symbols;
- uint32_t max_run_length_prefix = 6;
- size_t num_rle_symbols = 0;
- uint32_t histogram[BROTLI_MAX_CONTEXT_MAP_SYMBOLS];
- static const uint32_t kSymbolMask = (1u << SYMBOL_BITS) - 1u;
- uint8_t depths[BROTLI_MAX_CONTEXT_MAP_SYMBOLS];
- uint16_t bits[BROTLI_MAX_CONTEXT_MAP_SYMBOLS];
-
- StoreVarLenUint8(num_clusters - 1, storage_ix, storage);
-
- if (num_clusters == 1) {
- return;
- }
-
- rle_symbols = BROTLI_ALLOC(m, uint32_t, context_map_size);
- if (BROTLI_IS_OOM(m)) return;
- MoveToFrontTransform(context_map, context_map_size, rle_symbols);
- RunLengthCodeZeros(context_map_size, rle_symbols,
- &num_rle_symbols, &max_run_length_prefix);
- memset(histogram, 0, sizeof(histogram));
- for (i = 0; i < num_rle_symbols; ++i) {
- ++histogram[rle_symbols[i] & kSymbolMask];
- }
- {
- BROTLI_BOOL use_rle = TO_BROTLI_BOOL(max_run_length_prefix > 0);
- BrotliWriteBits(1, (uint64_t)use_rle, storage_ix, storage);
- if (use_rle) {
- BrotliWriteBits(4, max_run_length_prefix - 1, storage_ix, storage);
- }
- }
- BuildAndStoreHuffmanTree(histogram, num_clusters + max_run_length_prefix,
- num_clusters + max_run_length_prefix,
- tree, depths, bits, storage_ix, storage);
- for (i = 0; i < num_rle_symbols; ++i) {
- const uint32_t rle_symbol = rle_symbols[i] & kSymbolMask;
- const uint32_t extra_bits_val = rle_symbols[i] >> SYMBOL_BITS;
- BrotliWriteBits(depths[rle_symbol], bits[rle_symbol], storage_ix, storage);
- if (rle_symbol > 0 && rle_symbol <= max_run_length_prefix) {
- BrotliWriteBits(rle_symbol, extra_bits_val, storage_ix, storage);
- }
- }
- BrotliWriteBits(1, 1, storage_ix, storage); /* use move-to-front */
- BROTLI_FREE(m, rle_symbols);
-}
-
-/* Stores the block switch command with index block_ix to the bit stream. */
-static BROTLI_INLINE void StoreBlockSwitch(BlockSplitCode* code,
- const uint32_t block_len,
- const uint8_t block_type,
- BROTLI_BOOL is_first_block,
- size_t* storage_ix,
- uint8_t* storage) {
- size_t typecode = NextBlockTypeCode(&code->type_code_calculator, block_type);
- size_t lencode;
- uint32_t len_nextra;
- uint32_t len_extra;
- if (!is_first_block) {
- BrotliWriteBits(code->type_depths[typecode], code->type_bits[typecode],
- storage_ix, storage);
- }
- GetBlockLengthPrefixCode(block_len, &lencode, &len_nextra, &len_extra);
-
- BrotliWriteBits(code->length_depths[lencode], code->length_bits[lencode],
- storage_ix, storage);
- BrotliWriteBits(len_nextra, len_extra, storage_ix, storage);
-}
-
-/* Builds a BlockSplitCode data structure from the block split given by the
- vector of block types and block lengths and stores it to the bit stream. */
-static void BuildAndStoreBlockSplitCode(const uint8_t* types,
- const uint32_t* lengths,
- const size_t num_blocks,
- const size_t num_types,
- HuffmanTree* tree,
- BlockSplitCode* code,
- size_t* storage_ix,
- uint8_t* storage) {
- uint32_t type_histo[BROTLI_MAX_BLOCK_TYPE_SYMBOLS];
- uint32_t length_histo[BROTLI_NUM_BLOCK_LEN_SYMBOLS];
- size_t i;
- BlockTypeCodeCalculator type_code_calculator;
- memset(type_histo, 0, (num_types + 2) * sizeof(type_histo[0]));
- memset(length_histo, 0, sizeof(length_histo));
- InitBlockTypeCodeCalculator(&type_code_calculator);
- for (i = 0; i < num_blocks; ++i) {
- size_t type_code = NextBlockTypeCode(&type_code_calculator, types[i]);
- if (i != 0) ++type_histo[type_code];
- ++length_histo[BlockLengthPrefixCode(lengths[i])];
- }
- StoreVarLenUint8(num_types - 1, storage_ix, storage);
- if (num_types > 1) { /* TODO: else? could StoreBlockSwitch occur? */
- BuildAndStoreHuffmanTree(&type_histo[0], num_types + 2, num_types + 2, tree,
- &code->type_depths[0], &code->type_bits[0],
- storage_ix, storage);
- BuildAndStoreHuffmanTree(&length_histo[0], BROTLI_NUM_BLOCK_LEN_SYMBOLS,
- BROTLI_NUM_BLOCK_LEN_SYMBOLS,
- tree, &code->length_depths[0],
- &code->length_bits[0], storage_ix, storage);
- StoreBlockSwitch(code, lengths[0], types[0], 1, storage_ix, storage);
- }
-}
-
-/* Stores a context map where the histogram type is always the block type. */
-static void StoreTrivialContextMap(size_t num_types,
- size_t context_bits,
- HuffmanTree* tree,
- size_t* storage_ix,
- uint8_t* storage) {
- StoreVarLenUint8(num_types - 1, storage_ix, storage);
- if (num_types > 1) {
- size_t repeat_code = context_bits - 1u;
- size_t repeat_bits = (1u << repeat_code) - 1u;
- size_t alphabet_size = num_types + repeat_code;
- uint32_t histogram[BROTLI_MAX_CONTEXT_MAP_SYMBOLS];
- uint8_t depths[BROTLI_MAX_CONTEXT_MAP_SYMBOLS];
- uint16_t bits[BROTLI_MAX_CONTEXT_MAP_SYMBOLS];
- size_t i;
- memset(histogram, 0, alphabet_size * sizeof(histogram[0]));
- /* Write RLEMAX. */
- BrotliWriteBits(1, 1, storage_ix, storage);
- BrotliWriteBits(4, repeat_code - 1, storage_ix, storage);
- histogram[repeat_code] = (uint32_t)num_types;
- histogram[0] = 1;
- for (i = context_bits; i < alphabet_size; ++i) {
- histogram[i] = 1;
- }
- BuildAndStoreHuffmanTree(histogram, alphabet_size, alphabet_size,
- tree, depths, bits, storage_ix, storage);
- for (i = 0; i < num_types; ++i) {
- size_t code = (i == 0 ? 0 : i + context_bits - 1);
- BrotliWriteBits(depths[code], bits[code], storage_ix, storage);
- BrotliWriteBits(
- depths[repeat_code], bits[repeat_code], storage_ix, storage);
- BrotliWriteBits(repeat_code, repeat_bits, storage_ix, storage);
- }
- /* Write IMTF (inverse-move-to-front) bit. */
- BrotliWriteBits(1, 1, storage_ix, storage);
- }
-}
-
-/* Manages the encoding of one block category (literal, command or distance). */
-typedef struct BlockEncoder {
- size_t histogram_length_;
- size_t num_block_types_;
- const uint8_t* block_types_; /* Not owned. */
- const uint32_t* block_lengths_; /* Not owned. */
- size_t num_blocks_;
- BlockSplitCode block_split_code_;
- size_t block_ix_;
- size_t block_len_;
- size_t entropy_ix_;
- uint8_t* depths_;
- uint16_t* bits_;
-} BlockEncoder;
-
-static void InitBlockEncoder(BlockEncoder* self, size_t histogram_length,
- size_t num_block_types, const uint8_t* block_types,
- const uint32_t* block_lengths, const size_t num_blocks) {
- self->histogram_length_ = histogram_length;
- self->num_block_types_ = num_block_types;
- self->block_types_ = block_types;
- self->block_lengths_ = block_lengths;
- self->num_blocks_ = num_blocks;
- InitBlockTypeCodeCalculator(&self->block_split_code_.type_code_calculator);
- self->block_ix_ = 0;
- self->block_len_ = num_blocks == 0 ? 0 : block_lengths[0];
- self->entropy_ix_ = 0;
- self->depths_ = 0;
- self->bits_ = 0;
-}
-
-static void CleanupBlockEncoder(MemoryManager* m, BlockEncoder* self) {
- BROTLI_FREE(m, self->depths_);
- BROTLI_FREE(m, self->bits_);
-}
-
-/* Creates entropy codes of block lengths and block types and stores them
- to the bit stream. */
-static void BuildAndStoreBlockSwitchEntropyCodes(BlockEncoder* self,
- HuffmanTree* tree, size_t* storage_ix, uint8_t* storage) {
- BuildAndStoreBlockSplitCode(self->block_types_, self->block_lengths_,
- self->num_blocks_, self->num_block_types_, tree, &self->block_split_code_,
- storage_ix, storage);
-}
-
-/* Stores the next symbol with the entropy code of the current block type.
- Updates the block type and block length at block boundaries. */
-static void StoreSymbol(BlockEncoder* self, size_t symbol, size_t* storage_ix,
- uint8_t* storage) {
- if (self->block_len_ == 0) {
- size_t block_ix = ++self->block_ix_;
- uint32_t block_len = self->block_lengths_[block_ix];
- uint8_t block_type = self->block_types_[block_ix];
- self->block_len_ = block_len;
- self->entropy_ix_ = block_type * self->histogram_length_;
- StoreBlockSwitch(&self->block_split_code_, block_len, block_type, 0,
- storage_ix, storage);
- }
- --self->block_len_;
- {
- size_t ix = self->entropy_ix_ + symbol;
- BrotliWriteBits(self->depths_[ix], self->bits_[ix], storage_ix, storage);
- }
-}
-
-/* Stores the next symbol with the entropy code of the current block type and
- context value.
- Updates the block type and block length at block boundaries. */
-static void StoreSymbolWithContext(BlockEncoder* self, size_t symbol,
- size_t context, const uint32_t* context_map, size_t* storage_ix,
- uint8_t* storage, const size_t context_bits) {
- if (self->block_len_ == 0) {
- size_t block_ix = ++self->block_ix_;
- uint32_t block_len = self->block_lengths_[block_ix];
- uint8_t block_type = self->block_types_[block_ix];
- self->block_len_ = block_len;
- self->entropy_ix_ = (size_t)block_type << context_bits;
- StoreBlockSwitch(&self->block_split_code_, block_len, block_type, 0,
- storage_ix, storage);
- }
- --self->block_len_;
- {
- size_t histo_ix = context_map[self->entropy_ix_ + context];
- size_t ix = histo_ix * self->histogram_length_ + symbol;
- BrotliWriteBits(self->depths_[ix], self->bits_[ix], storage_ix, storage);
- }
-}
-
-#define FN(X) X ## Literal
-/* NOLINTNEXTLINE(build/include) */
-#include "./block_encoder_inc.h"
-#undef FN
-
-#define FN(X) X ## Command
-/* NOLINTNEXTLINE(build/include) */
-#include "./block_encoder_inc.h"
-#undef FN
-
-#define FN(X) X ## Distance
-/* NOLINTNEXTLINE(build/include) */
-#include "./block_encoder_inc.h"
-#undef FN
-
-static void JumpToByteBoundary(size_t* storage_ix, uint8_t* storage) {
- *storage_ix = (*storage_ix + 7u) & ~7u;
- storage[*storage_ix >> 3] = 0;
-}
-
-void BrotliStoreMetaBlock(MemoryManager* m,
- const uint8_t* input, size_t start_pos, size_t length, size_t mask,
- uint8_t prev_byte, uint8_t prev_byte2, BROTLI_BOOL is_last,
- const BrotliEncoderParams* params, ContextType literal_context_mode,
- const Command* commands, size_t n_commands, const MetaBlockSplit* mb,
- size_t* storage_ix, uint8_t* storage) {
-
- size_t pos = start_pos;
- size_t i;
- uint32_t num_distance_symbols = params->dist.alphabet_size;
- uint32_t num_effective_distance_symbols = num_distance_symbols;
- HuffmanTree* tree;
- ContextLut literal_context_lut = BROTLI_CONTEXT_LUT(literal_context_mode);
- BlockEncoder literal_enc;
- BlockEncoder command_enc;
- BlockEncoder distance_enc;
- const BrotliDistanceParams* dist = ¶ms->dist;
- if (params->large_window &&
- num_effective_distance_symbols > BROTLI_NUM_HISTOGRAM_DISTANCE_SYMBOLS) {
- num_effective_distance_symbols = BROTLI_NUM_HISTOGRAM_DISTANCE_SYMBOLS;
- }
-
- StoreCompressedMetaBlockHeader(is_last, length, storage_ix, storage);
-
- tree = BROTLI_ALLOC(m, HuffmanTree, MAX_HUFFMAN_TREE_SIZE);
- if (BROTLI_IS_OOM(m)) return;
- InitBlockEncoder(&literal_enc, BROTLI_NUM_LITERAL_SYMBOLS,
- mb->literal_split.num_types, mb->literal_split.types,
- mb->literal_split.lengths, mb->literal_split.num_blocks);
- InitBlockEncoder(&command_enc, BROTLI_NUM_COMMAND_SYMBOLS,
- mb->command_split.num_types, mb->command_split.types,
- mb->command_split.lengths, mb->command_split.num_blocks);
- InitBlockEncoder(&distance_enc, num_effective_distance_symbols,
- mb->distance_split.num_types, mb->distance_split.types,
- mb->distance_split.lengths, mb->distance_split.num_blocks);
-
- BuildAndStoreBlockSwitchEntropyCodes(&literal_enc, tree, storage_ix, storage);
- BuildAndStoreBlockSwitchEntropyCodes(&command_enc, tree, storage_ix, storage);
- BuildAndStoreBlockSwitchEntropyCodes(
- &distance_enc, tree, storage_ix, storage);
-
- BrotliWriteBits(2, dist->distance_postfix_bits, storage_ix, storage);
- BrotliWriteBits(
- 4, dist->num_direct_distance_codes >> dist->distance_postfix_bits,
- storage_ix, storage);
- for (i = 0; i < mb->literal_split.num_types; ++i) {
- BrotliWriteBits(2, literal_context_mode, storage_ix, storage);
- }
-
- if (mb->literal_context_map_size == 0) {
- StoreTrivialContextMap(mb->literal_histograms_size,
- BROTLI_LITERAL_CONTEXT_BITS, tree, storage_ix, storage);
- } else {
- EncodeContextMap(m,
- mb->literal_context_map, mb->literal_context_map_size,
- mb->literal_histograms_size, tree, storage_ix, storage);
- if (BROTLI_IS_OOM(m)) return;
- }
-
- if (mb->distance_context_map_size == 0) {
- StoreTrivialContextMap(mb->distance_histograms_size,
- BROTLI_DISTANCE_CONTEXT_BITS, tree, storage_ix, storage);
- } else {
- EncodeContextMap(m,
- mb->distance_context_map, mb->distance_context_map_size,
- mb->distance_histograms_size, tree, storage_ix, storage);
- if (BROTLI_IS_OOM(m)) return;
- }
-
- BuildAndStoreEntropyCodesLiteral(m, &literal_enc, mb->literal_histograms,
- mb->literal_histograms_size, BROTLI_NUM_LITERAL_SYMBOLS, tree,
- storage_ix, storage);
- if (BROTLI_IS_OOM(m)) return;
- BuildAndStoreEntropyCodesCommand(m, &command_enc, mb->command_histograms,
- mb->command_histograms_size, BROTLI_NUM_COMMAND_SYMBOLS, tree,
- storage_ix, storage);
- if (BROTLI_IS_OOM(m)) return;
- BuildAndStoreEntropyCodesDistance(m, &distance_enc, mb->distance_histograms,
- mb->distance_histograms_size, num_distance_symbols, tree,
- storage_ix, storage);
- if (BROTLI_IS_OOM(m)) return;
- BROTLI_FREE(m, tree);
-
- for (i = 0; i < n_commands; ++i) {
- const Command cmd = commands[i];
- size_t cmd_code = cmd.cmd_prefix_;
- StoreSymbol(&command_enc, cmd_code, storage_ix, storage);
- StoreCommandExtra(&cmd, storage_ix, storage);
- if (mb->literal_context_map_size == 0) {
- size_t j;
- for (j = cmd.insert_len_; j != 0; --j) {
- StoreSymbol(&literal_enc, input[pos & mask], storage_ix, storage);
- ++pos;
- }
- } else {
- size_t j;
- for (j = cmd.insert_len_; j != 0; --j) {
- size_t context =
- BROTLI_CONTEXT(prev_byte, prev_byte2, literal_context_lut);
- uint8_t literal = input[pos & mask];
- StoreSymbolWithContext(&literal_enc, literal, context,
- mb->literal_context_map, storage_ix, storage,
- BROTLI_LITERAL_CONTEXT_BITS);
- prev_byte2 = prev_byte;
- prev_byte = literal;
- ++pos;
- }
- }
- pos += CommandCopyLen(&cmd);
- if (CommandCopyLen(&cmd)) {
- prev_byte2 = input[(pos - 2) & mask];
- prev_byte = input[(pos - 1) & mask];
- if (cmd.cmd_prefix_ >= 128) {
- size_t dist_code = cmd.dist_prefix_ & 0x3FF;
- uint32_t distnumextra = cmd.dist_prefix_ >> 10;
- uint64_t distextra = cmd.dist_extra_;
- if (mb->distance_context_map_size == 0) {
- StoreSymbol(&distance_enc, dist_code, storage_ix, storage);
- } else {
- size_t context = CommandDistanceContext(&cmd);
- StoreSymbolWithContext(&distance_enc, dist_code, context,
- mb->distance_context_map, storage_ix, storage,
- BROTLI_DISTANCE_CONTEXT_BITS);
- }
- BrotliWriteBits(distnumextra, distextra, storage_ix, storage);
- }
- }
- }
- CleanupBlockEncoder(m, &distance_enc);
- CleanupBlockEncoder(m, &command_enc);
- CleanupBlockEncoder(m, &literal_enc);
- if (is_last) {
- JumpToByteBoundary(storage_ix, storage);
- }
-}
-
-static void BuildHistograms(const uint8_t* input,
- size_t start_pos,
- size_t mask,
- const Command* commands,
- size_t n_commands,
- HistogramLiteral* lit_histo,
- HistogramCommand* cmd_histo,
- HistogramDistance* dist_histo) {
- size_t pos = start_pos;
- size_t i;
- for (i = 0; i < n_commands; ++i) {
- const Command cmd = commands[i];
- size_t j;
- HistogramAddCommand(cmd_histo, cmd.cmd_prefix_);
- for (j = cmd.insert_len_; j != 0; --j) {
- HistogramAddLiteral(lit_histo, input[pos & mask]);
- ++pos;
- }
- pos += CommandCopyLen(&cmd);
- if (CommandCopyLen(&cmd) && cmd.cmd_prefix_ >= 128) {
- HistogramAddDistance(dist_histo, cmd.dist_prefix_ & 0x3FF);
- }
- }
-}
-
-static void StoreDataWithHuffmanCodes(const uint8_t* input,
- size_t start_pos,
- size_t mask,
- const Command* commands,
- size_t n_commands,
- const uint8_t* lit_depth,
- const uint16_t* lit_bits,
- const uint8_t* cmd_depth,
- const uint16_t* cmd_bits,
- const uint8_t* dist_depth,
- const uint16_t* dist_bits,
- size_t* storage_ix,
- uint8_t* storage) {
- size_t pos = start_pos;
- size_t i;
- for (i = 0; i < n_commands; ++i) {
- const Command cmd = commands[i];
- const size_t cmd_code = cmd.cmd_prefix_;
- size_t j;
- BrotliWriteBits(
- cmd_depth[cmd_code], cmd_bits[cmd_code], storage_ix, storage);
- StoreCommandExtra(&cmd, storage_ix, storage);
- for (j = cmd.insert_len_; j != 0; --j) {
- const uint8_t literal = input[pos & mask];
- BrotliWriteBits(
- lit_depth[literal], lit_bits[literal], storage_ix, storage);
- ++pos;
- }
- pos += CommandCopyLen(&cmd);
- if (CommandCopyLen(&cmd) && cmd.cmd_prefix_ >= 128) {
- const size_t dist_code = cmd.dist_prefix_ & 0x3FF;
- const uint32_t distnumextra = cmd.dist_prefix_ >> 10;
- const uint32_t distextra = cmd.dist_extra_;
- BrotliWriteBits(dist_depth[dist_code], dist_bits[dist_code],
- storage_ix, storage);
- BrotliWriteBits(distnumextra, distextra, storage_ix, storage);
- }
- }
-}
-
-void BrotliStoreMetaBlockTrivial(MemoryManager* m,
- const uint8_t* input, size_t start_pos, size_t length, size_t mask,
- BROTLI_BOOL is_last, const BrotliEncoderParams* params,
- const Command* commands, size_t n_commands,
- size_t* storage_ix, uint8_t* storage) {
- HistogramLiteral lit_histo;
- HistogramCommand cmd_histo;
- HistogramDistance dist_histo;
- uint8_t lit_depth[BROTLI_NUM_LITERAL_SYMBOLS];
- uint16_t lit_bits[BROTLI_NUM_LITERAL_SYMBOLS];
- uint8_t cmd_depth[BROTLI_NUM_COMMAND_SYMBOLS];
- uint16_t cmd_bits[BROTLI_NUM_COMMAND_SYMBOLS];
- uint8_t dist_depth[MAX_SIMPLE_DISTANCE_ALPHABET_SIZE];
- uint16_t dist_bits[MAX_SIMPLE_DISTANCE_ALPHABET_SIZE];
- HuffmanTree* tree;
- uint32_t num_distance_symbols = params->dist.alphabet_size;
-
- StoreCompressedMetaBlockHeader(is_last, length, storage_ix, storage);
-
- HistogramClearLiteral(&lit_histo);
- HistogramClearCommand(&cmd_histo);
- HistogramClearDistance(&dist_histo);
-
- BuildHistograms(input, start_pos, mask, commands, n_commands,
- &lit_histo, &cmd_histo, &dist_histo);
-
- BrotliWriteBits(13, 0, storage_ix, storage);
-
- tree = BROTLI_ALLOC(m, HuffmanTree, MAX_HUFFMAN_TREE_SIZE);
- if (BROTLI_IS_OOM(m)) return;
- BuildAndStoreHuffmanTree(lit_histo.data_, BROTLI_NUM_LITERAL_SYMBOLS,
- BROTLI_NUM_LITERAL_SYMBOLS, tree,
- lit_depth, lit_bits,
- storage_ix, storage);
- BuildAndStoreHuffmanTree(cmd_histo.data_, BROTLI_NUM_COMMAND_SYMBOLS,
- BROTLI_NUM_COMMAND_SYMBOLS, tree,
- cmd_depth, cmd_bits,
- storage_ix, storage);
- BuildAndStoreHuffmanTree(dist_histo.data_, MAX_SIMPLE_DISTANCE_ALPHABET_SIZE,
- num_distance_symbols, tree,
- dist_depth, dist_bits,
- storage_ix, storage);
- BROTLI_FREE(m, tree);
- StoreDataWithHuffmanCodes(input, start_pos, mask, commands,
- n_commands, lit_depth, lit_bits,
- cmd_depth, cmd_bits,
- dist_depth, dist_bits,
- storage_ix, storage);
- if (is_last) {
- JumpToByteBoundary(storage_ix, storage);
- }
-}
-
-void BrotliStoreMetaBlockFast(MemoryManager* m,
- const uint8_t* input, size_t start_pos, size_t length, size_t mask,
- BROTLI_BOOL is_last, const BrotliEncoderParams* params,
- const Command* commands, size_t n_commands,
- size_t* storage_ix, uint8_t* storage) {
- uint32_t num_distance_symbols = params->dist.alphabet_size;
- uint32_t distance_alphabet_bits =
- Log2FloorNonZero(num_distance_symbols - 1) + 1;
-
- StoreCompressedMetaBlockHeader(is_last, length, storage_ix, storage);
-
- BrotliWriteBits(13, 0, storage_ix, storage);
-
- if (n_commands <= 128) {
- uint32_t histogram[BROTLI_NUM_LITERAL_SYMBOLS] = { 0 };
- size_t pos = start_pos;
- size_t num_literals = 0;
- size_t i;
- uint8_t lit_depth[BROTLI_NUM_LITERAL_SYMBOLS];
- uint16_t lit_bits[BROTLI_NUM_LITERAL_SYMBOLS];
- for (i = 0; i < n_commands; ++i) {
- const Command cmd = commands[i];
- size_t j;
- for (j = cmd.insert_len_; j != 0; --j) {
- ++histogram[input[pos & mask]];
- ++pos;
- }
- num_literals += cmd.insert_len_;
- pos += CommandCopyLen(&cmd);
- }
- BrotliBuildAndStoreHuffmanTreeFast(m, histogram, num_literals,
- /* max_bits = */ 8,
- lit_depth, lit_bits,
- storage_ix, storage);
- if (BROTLI_IS_OOM(m)) return;
- StoreStaticCommandHuffmanTree(storage_ix, storage);
- StoreStaticDistanceHuffmanTree(storage_ix, storage);
- StoreDataWithHuffmanCodes(input, start_pos, mask, commands,
- n_commands, lit_depth, lit_bits,
- kStaticCommandCodeDepth,
- kStaticCommandCodeBits,
- kStaticDistanceCodeDepth,
- kStaticDistanceCodeBits,
- storage_ix, storage);
- } else {
- HistogramLiteral lit_histo;
- HistogramCommand cmd_histo;
- HistogramDistance dist_histo;
- uint8_t lit_depth[BROTLI_NUM_LITERAL_SYMBOLS];
- uint16_t lit_bits[BROTLI_NUM_LITERAL_SYMBOLS];
- uint8_t cmd_depth[BROTLI_NUM_COMMAND_SYMBOLS];
- uint16_t cmd_bits[BROTLI_NUM_COMMAND_SYMBOLS];
- uint8_t dist_depth[MAX_SIMPLE_DISTANCE_ALPHABET_SIZE];
- uint16_t dist_bits[MAX_SIMPLE_DISTANCE_ALPHABET_SIZE];
- HistogramClearLiteral(&lit_histo);
- HistogramClearCommand(&cmd_histo);
- HistogramClearDistance(&dist_histo);
- BuildHistograms(input, start_pos, mask, commands, n_commands,
- &lit_histo, &cmd_histo, &dist_histo);
- BrotliBuildAndStoreHuffmanTreeFast(m, lit_histo.data_,
- lit_histo.total_count_,
- /* max_bits = */ 8,
- lit_depth, lit_bits,
- storage_ix, storage);
- if (BROTLI_IS_OOM(m)) return;
- BrotliBuildAndStoreHuffmanTreeFast(m, cmd_histo.data_,
- cmd_histo.total_count_,
- /* max_bits = */ 10,
- cmd_depth, cmd_bits,
- storage_ix, storage);
- if (BROTLI_IS_OOM(m)) return;
- BrotliBuildAndStoreHuffmanTreeFast(m, dist_histo.data_,
- dist_histo.total_count_,
- /* max_bits = */
- distance_alphabet_bits,
- dist_depth, dist_bits,
- storage_ix, storage);
- if (BROTLI_IS_OOM(m)) return;
- StoreDataWithHuffmanCodes(input, start_pos, mask, commands,
- n_commands, lit_depth, lit_bits,
- cmd_depth, cmd_bits,
- dist_depth, dist_bits,
- storage_ix, storage);
- }
-
- if (is_last) {
- JumpToByteBoundary(storage_ix, storage);
- }
-}
-
-/* This is for storing uncompressed blocks (simple raw storage of
- bytes-as-bytes). */
-void BrotliStoreUncompressedMetaBlock(BROTLI_BOOL is_final_block,
- const uint8_t* BROTLI_RESTRICT input,
- size_t position, size_t mask,
- size_t len,
- size_t* BROTLI_RESTRICT storage_ix,
- uint8_t* BROTLI_RESTRICT storage) {
- size_t masked_pos = position & mask;
- BrotliStoreUncompressedMetaBlockHeader(len, storage_ix, storage);
- JumpToByteBoundary(storage_ix, storage);
-
- if (masked_pos + len > mask + 1) {
- size_t len1 = mask + 1 - masked_pos;
- memcpy(&storage[*storage_ix >> 3], &input[masked_pos], len1);
- *storage_ix += len1 << 3;
- len -= len1;
- masked_pos = 0;
- }
- memcpy(&storage[*storage_ix >> 3], &input[masked_pos], len);
- *storage_ix += len << 3;
-
- /* We need to clear the next 4 bytes to continue to be
- compatible with BrotliWriteBits. */
- BrotliWriteBitsPrepareStorage(*storage_ix, storage);
-
- /* Since the uncompressed block itself may not be the final block, add an
- empty one after this. */
- if (is_final_block) {
- BrotliWriteBits(1, 1, storage_ix, storage); /* islast */
- BrotliWriteBits(1, 1, storage_ix, storage); /* isempty */
- JumpToByteBoundary(storage_ix, storage);
- }
-}
-
-#if defined(__cplusplus) || defined(c_plusplus)
-} /* extern "C" */
-#endif
diff --git a/BaseTools/Source/C/BrotliCompress/enc/cluster.c b/BaseTools/Source/C/BrotliCompress/enc/cluster.c
deleted file mode 100644
index fdb4fa7d3ab2..000000000000
--- a/BaseTools/Source/C/BrotliCompress/enc/cluster.c
+++ /dev/null
@@ -1,56 +0,0 @@
-/* Copyright 2013 Google Inc. All Rights Reserved.
-
- Distributed under MIT license.
- See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
-*/
-
-/* Functions for clustering similar histograms together. */
-
-#include "./cluster.h"
-
-#include "../common/platform.h"
-#include <brotli/types.h>
-#include "./bit_cost.h" /* BrotliPopulationCost */
-#include "./fast_log.h"
-#include "./histogram.h"
-#include "./memory.h"
-
-#if defined(__cplusplus) || defined(c_plusplus)
-extern "C" {
-#endif
-
-static BROTLI_INLINE BROTLI_BOOL HistogramPairIsLess(
- const HistogramPair* p1, const HistogramPair* p2) {
- if (p1->cost_diff != p2->cost_diff) {
- return TO_BROTLI_BOOL(p1->cost_diff > p2->cost_diff);
- }
- return TO_BROTLI_BOOL((p1->idx2 - p1->idx1) > (p2->idx2 - p2->idx1));
-}
-
-/* Returns entropy reduction of the context map when we combine two clusters. */
-static BROTLI_INLINE double ClusterCostDiff(size_t size_a, size_t size_b) {
- size_t size_c = size_a + size_b;
- return (double)size_a * FastLog2(size_a) +
- (double)size_b * FastLog2(size_b) -
- (double)size_c * FastLog2(size_c);
-}
-
-#define CODE(X) X
-
-#define FN(X) X ## Literal
-#include "./cluster_inc.h" /* NOLINT(build/include) */
-#undef FN
-
-#define FN(X) X ## Command
-#include "./cluster_inc.h" /* NOLINT(build/include) */
-#undef FN
-
-#define FN(X) X ## Distance
-#include "./cluster_inc.h" /* NOLINT(build/include) */
-#undef FN
-
-#undef CODE
-
-#if defined(__cplusplus) || defined(c_plusplus)
-} /* extern "C" */
-#endif
diff --git a/BaseTools/Source/C/BrotliCompress/enc/compress_fragment.c b/BaseTools/Source/C/BrotliCompress/enc/compress_fragment.c
deleted file mode 100644
index ca61bc0a7f0d..000000000000
--- a/BaseTools/Source/C/BrotliCompress/enc/compress_fragment.c
+++ /dev/null
@@ -1,790 +0,0 @@
-/* Copyright 2015 Google Inc. All Rights Reserved.
-
- Distributed under MIT license.
- See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
-*/
-
-/* Function for fast encoding of an input fragment, independently from the input
- history. This function uses one-pass processing: when we find a backward
- match, we immediately emit the corresponding command and literal codes to
- the bit stream.
-
- Adapted from the CompressFragment() function in
- https://github.com/google/snappy/blob/master/snappy.cc */
-
-#include "./compress_fragment.h"
-
-#include <string.h> /* memcmp, memcpy, memset */
-
-#include "../common/constants.h"
-#include "../common/platform.h"
-#include <brotli/types.h>
-#include "./brotli_bit_stream.h"
-#include "./entropy_encode.h"
-#include "./fast_log.h"
-#include "./find_match_length.h"
-#include "./memory.h"
-#include "./write_bits.h"
-
-#if defined(__cplusplus) || defined(c_plusplus)
-extern "C" {
-#endif
-
-#define MAX_DISTANCE (long)BROTLI_MAX_BACKWARD_LIMIT(18)
-
-/* kHashMul32 multiplier has these properties:
- * The multiplier must be odd. Otherwise we may lose the highest bit.
- * No long streaks of ones or zeros.
- * There is no effort to ensure that it is a prime, the oddity is enough
- for this use.
- * The number has been tuned heuristically against compression benchmarks. */
-static const uint32_t kHashMul32 = 0x1E35A7BD;
-
-static BROTLI_INLINE uint32_t Hash(const uint8_t* p, size_t shift) {
- const uint64_t h = (BROTLI_UNALIGNED_LOAD64LE(p) << 24) * kHashMul32;
- return (uint32_t)(h >> shift);
-}
-
-static BROTLI_INLINE uint32_t HashBytesAtOffset(
- uint64_t v, int offset, size_t shift) {
- BROTLI_DCHECK(offset >= 0);
- BROTLI_DCHECK(offset <= 3);
- {
- const uint64_t h = ((v >> (8 * offset)) << 24) * kHashMul32;
- return (uint32_t)(h >> shift);
- }
-}
-
-static BROTLI_INLINE BROTLI_BOOL IsMatch(const uint8_t* p1, const uint8_t* p2) {
- return TO_BROTLI_BOOL(
- BrotliUnalignedRead32(p1) == BrotliUnalignedRead32(p2) &&
- p1[4] == p2[4]);
-}
-
-/* Builds a literal prefix code into "depths" and "bits" based on the statistics
- of the "input" string and stores it into the bit stream.
- Note that the prefix code here is built from the pre-LZ77 input, therefore
- we can only approximate the statistics of the actual literal stream.
- Moreover, for long inputs we build a histogram from a sample of the input
- and thus have to assign a non-zero depth for each literal.
- Returns estimated compression ratio millibytes/char for encoding given input
- with generated code. */
-static size_t BuildAndStoreLiteralPrefixCode(MemoryManager* m,
- const uint8_t* input,
- const size_t input_size,
- uint8_t depths[256],
- uint16_t bits[256],
- size_t* storage_ix,
- uint8_t* storage) {
- uint32_t histogram[256] = { 0 };
- size_t histogram_total;
- size_t i;
- if (input_size < (1 << 15)) {
- for (i = 0; i < input_size; ++i) {
- ++histogram[input[i]];
- }
- histogram_total = input_size;
- for (i = 0; i < 256; ++i) {
- /* We weigh the first 11 samples with weight 3 to account for the
- balancing effect of the LZ77 phase on the histogram. */
- const uint32_t adjust = 2 * BROTLI_MIN(uint32_t, histogram[i], 11u);
- histogram[i] += adjust;
- histogram_total += adjust;
- }
- } else {
- static const size_t kSampleRate = 29;
- for (i = 0; i < input_size; i += kSampleRate) {
- ++histogram[input[i]];
- }
- histogram_total = (input_size + kSampleRate - 1) / kSampleRate;
- for (i = 0; i < 256; ++i) {
- /* We add 1 to each population count to avoid 0 bit depths (since this is
- only a sample and we don't know if the symbol appears or not), and we
- weigh the first 11 samples with weight 3 to account for the balancing
- effect of the LZ77 phase on the histogram (more frequent symbols are
- more likely to be in backward references instead as literals). */
- const uint32_t adjust = 1 + 2 * BROTLI_MIN(uint32_t, histogram[i], 11u);
- histogram[i] += adjust;
- histogram_total += adjust;
- }
- }
- BrotliBuildAndStoreHuffmanTreeFast(m, histogram, histogram_total,
- /* max_bits = */ 8,
- depths, bits, storage_ix, storage);
- if (BROTLI_IS_OOM(m)) return 0;
- {
- size_t literal_ratio = 0;
- for (i = 0; i < 256; ++i) {
- if (histogram[i]) literal_ratio += histogram[i] * depths[i];
- }
- /* Estimated encoding ratio, millibytes per symbol. */
- return (literal_ratio * 125) / histogram_total;
- }
-}
-
-/* Builds a command and distance prefix code (each 64 symbols) into "depth" and
- "bits" based on "histogram" and stores it into the bit stream. */
-static void BuildAndStoreCommandPrefixCode(const uint32_t histogram[128],
- uint8_t depth[128], uint16_t bits[128], size_t* storage_ix,
- uint8_t* storage) {
- /* Tree size for building a tree over 64 symbols is 2 * 64 + 1. */
- HuffmanTree tree[129];
- uint8_t cmd_depth[BROTLI_NUM_COMMAND_SYMBOLS] = { 0 };
- uint16_t cmd_bits[64];
-
- BrotliCreateHuffmanTree(histogram, 64, 15, tree, depth);
- BrotliCreateHuffmanTree(&histogram[64], 64, 14, tree, &depth[64]);
- /* We have to jump through a few hoops here in order to compute
- the command bits because the symbols are in a different order than in
- the full alphabet. This looks complicated, but having the symbols
- in this order in the command bits saves a few branches in the Emit*
- functions. */
- memcpy(cmd_depth, depth, 24);
- memcpy(cmd_depth + 24, depth + 40, 8);
- memcpy(cmd_depth + 32, depth + 24, 8);
- memcpy(cmd_depth + 40, depth + 48, 8);
- memcpy(cmd_depth + 48, depth + 32, 8);
- memcpy(cmd_depth + 56, depth + 56, 8);
- BrotliConvertBitDepthsToSymbols(cmd_depth, 64, cmd_bits);
- memcpy(bits, cmd_bits, 48);
- memcpy(bits + 24, cmd_bits + 32, 16);
- memcpy(bits + 32, cmd_bits + 48, 16);
- memcpy(bits + 40, cmd_bits + 24, 16);
- memcpy(bits + 48, cmd_bits + 40, 16);
- memcpy(bits + 56, cmd_bits + 56, 16);
- BrotliConvertBitDepthsToSymbols(&depth[64], 64, &bits[64]);
- {
- /* Create the bit length array for the full command alphabet. */
- size_t i;
- memset(cmd_depth, 0, 64); /* only 64 first values were used */
- memcpy(cmd_depth, depth, 8);
- memcpy(cmd_depth + 64, depth + 8, 8);
- memcpy(cmd_depth + 128, depth + 16, 8);
- memcpy(cmd_depth + 192, depth + 24, 8);
- memcpy(cmd_depth + 384, depth + 32, 8);
- for (i = 0; i < 8; ++i) {
- cmd_depth[128 + 8 * i] = depth[40 + i];
- cmd_depth[256 + 8 * i] = depth[48 + i];
- cmd_depth[448 + 8 * i] = depth[56 + i];
- }
- BrotliStoreHuffmanTree(
- cmd_depth, BROTLI_NUM_COMMAND_SYMBOLS, tree, storage_ix, storage);
- }
- BrotliStoreHuffmanTree(&depth[64], 64, tree, storage_ix, storage);
-}
-
-/* REQUIRES: insertlen < 6210 */
-static BROTLI_INLINE void EmitInsertLen(size_t insertlen,
- const uint8_t depth[128],
- const uint16_t bits[128],
- uint32_t histo[128],
- size_t* storage_ix,
- uint8_t* storage) {
- if (insertlen < 6) {
- const size_t code = insertlen + 40;
- BrotliWriteBits(depth[code], bits[code], storage_ix, storage);
- ++histo[code];
- } else if (insertlen < 130) {
- const size_t tail = insertlen - 2;
- const uint32_t nbits = Log2FloorNonZero(tail) - 1u;
- const size_t prefix = tail >> nbits;
- const size_t inscode = (nbits << 1) + prefix + 42;
- BrotliWriteBits(depth[inscode], bits[inscode], storage_ix, storage);
- BrotliWriteBits(nbits, tail - (prefix << nbits), storage_ix, storage);
- ++histo[inscode];
- } else if (insertlen < 2114) {
- const size_t tail = insertlen - 66;
- const uint32_t nbits = Log2FloorNonZero(tail);
- const size_t code = nbits + 50;
- BrotliWriteBits(depth[code], bits[code], storage_ix, storage);
- BrotliWriteBits(nbits, tail - ((size_t)1 << nbits), storage_ix, storage);
- ++histo[code];
- } else {
- BrotliWriteBits(depth[61], bits[61], storage_ix, storage);
- BrotliWriteBits(12, insertlen - 2114, storage_ix, storage);
- ++histo[61];
- }
-}
-
-static BROTLI_INLINE void EmitLongInsertLen(size_t insertlen,
- const uint8_t depth[128],
- const uint16_t bits[128],
- uint32_t histo[128],
- size_t* storage_ix,
- uint8_t* storage) {
- if (insertlen < 22594) {
- BrotliWriteBits(depth[62], bits[62], storage_ix, storage);
- BrotliWriteBits(14, insertlen - 6210, storage_ix, storage);
- ++histo[62];
- } else {
- BrotliWriteBits(depth[63], bits[63], storage_ix, storage);
- BrotliWriteBits(24, insertlen - 22594, storage_ix, storage);
- ++histo[63];
- }
-}
-
-static BROTLI_INLINE void EmitCopyLen(size_t copylen,
- const uint8_t depth[128],
- const uint16_t bits[128],
- uint32_t histo[128],
- size_t* storage_ix,
- uint8_t* storage) {
- if (copylen < 10) {
- BrotliWriteBits(
- depth[copylen + 14], bits[copylen + 14], storage_ix, storage);
- ++histo[copylen + 14];
- } else if (copylen < 134) {
- const size_t tail = copylen - 6;
- const uint32_t nbits = Log2FloorNonZero(tail) - 1u;
- const size_t prefix = tail >> nbits;
- const size_t code = (nbits << 1) + prefix + 20;
- BrotliWriteBits(depth[code], bits[code], storage_ix, storage);
- BrotliWriteBits(nbits, tail - (prefix << nbits), storage_ix, storage);
- ++histo[code];
- } else if (copylen < 2118) {
- const size_t tail = copylen - 70;
- const uint32_t nbits = Log2FloorNonZero(tail);
- const size_t code = nbits + 28;
- BrotliWriteBits(depth[code], bits[code], storage_ix, storage);
- BrotliWriteBits(nbits, tail - ((size_t)1 << nbits), storage_ix, storage);
- ++histo[code];
- } else {
- BrotliWriteBits(depth[39], bits[39], storage_ix, storage);
- BrotliWriteBits(24, copylen - 2118, storage_ix, storage);
- ++histo[39];
- }
-}
-
-static BROTLI_INLINE void EmitCopyLenLastDistance(size_t copylen,
- const uint8_t depth[128],
- const uint16_t bits[128],
- uint32_t histo[128],
- size_t* storage_ix,
- uint8_t* storage) {
- if (copylen < 12) {
- BrotliWriteBits(depth[copylen - 4], bits[copylen - 4], storage_ix, storage);
- ++histo[copylen - 4];
- } else if (copylen < 72) {
- const size_t tail = copylen - 8;
- const uint32_t nbits = Log2FloorNonZero(tail) - 1;
- const size_t prefix = tail >> nbits;
- const size_t code = (nbits << 1) + prefix + 4;
- BrotliWriteBits(depth[code], bits[code], storage_ix, storage);
- BrotliWriteBits(nbits, tail - (prefix << nbits), storage_ix, storage);
- ++histo[code];
- } else if (copylen < 136) {
- const size_t tail = copylen - 8;
- const size_t code = (tail >> 5) + 30;
- BrotliWriteBits(depth[code], bits[code], storage_ix, storage);
- BrotliWriteBits(5, tail & 31, storage_ix, storage);
- BrotliWriteBits(depth[64], bits[64], storage_ix, storage);
- ++histo[code];
- ++histo[64];
- } else if (copylen < 2120) {
- const size_t tail = copylen - 72;
- const uint32_t nbits = Log2FloorNonZero(tail);
- const size_t code = nbits + 28;
- BrotliWriteBits(depth[code], bits[code], storage_ix, storage);
- BrotliWriteBits(nbits, tail - ((size_t)1 << nbits), storage_ix, storage);
- BrotliWriteBits(depth[64], bits[64], storage_ix, storage);
- ++histo[code];
- ++histo[64];
- } else {
- BrotliWriteBits(depth[39], bits[39], storage_ix, storage);
- BrotliWriteBits(24, copylen - 2120, storage_ix, storage);
- BrotliWriteBits(depth[64], bits[64], storage_ix, storage);
- ++histo[39];
- ++histo[64];
- }
-}
-
-static BROTLI_INLINE void EmitDistance(size_t distance,
- const uint8_t depth[128],
- const uint16_t bits[128],
- uint32_t histo[128],
- size_t* storage_ix, uint8_t* storage) {
- const size_t d = distance + 3;
- const uint32_t nbits = Log2FloorNonZero(d) - 1u;
- const size_t prefix = (d >> nbits) & 1;
- const size_t offset = (2 + prefix) << nbits;
- const size_t distcode = 2 * (nbits - 1) + prefix + 80;
- BrotliWriteBits(depth[distcode], bits[distcode], storage_ix, storage);
- BrotliWriteBits(nbits, d - offset, storage_ix, storage);
- ++histo[distcode];
-}
-
-static BROTLI_INLINE void EmitLiterals(const uint8_t* input, const size_t len,
- const uint8_t depth[256],
- const uint16_t bits[256],
- size_t* storage_ix, uint8_t* storage) {
- size_t j;
- for (j = 0; j < len; j++) {
- const uint8_t lit = input[j];
- BrotliWriteBits(depth[lit], bits[lit], storage_ix, storage);
- }
-}
-
-/* REQUIRES: len <= 1 << 24. */
-static void BrotliStoreMetaBlockHeader(
- size_t len, BROTLI_BOOL is_uncompressed, size_t* storage_ix,
- uint8_t* storage) {
- size_t nibbles = 6;
- /* ISLAST */
- BrotliWriteBits(1, 0, storage_ix, storage);
- if (len <= (1U << 16)) {
- nibbles = 4;
- } else if (len <= (1U << 20)) {
- nibbles = 5;
- }
- BrotliWriteBits(2, nibbles - 4, storage_ix, storage);
- BrotliWriteBits(nibbles * 4, len - 1, storage_ix, storage);
- /* ISUNCOMPRESSED */
- BrotliWriteBits(1, (uint64_t)is_uncompressed, storage_ix, storage);
-}
-
-static void UpdateBits(size_t n_bits, uint32_t bits, size_t pos,
- uint8_t* array) {
- while (n_bits > 0) {
- size_t byte_pos = pos >> 3;
- size_t n_unchanged_bits = pos & 7;
- size_t n_changed_bits = BROTLI_MIN(size_t, n_bits, 8 - n_unchanged_bits);
- size_t total_bits = n_unchanged_bits + n_changed_bits;
- uint32_t mask =
- (~((1u << total_bits) - 1u)) | ((1u << n_unchanged_bits) - 1u);
- uint32_t unchanged_bits = array[byte_pos] & mask;
- uint32_t changed_bits = bits & ((1u << n_changed_bits) - 1u);
- array[byte_pos] =
- (uint8_t)((changed_bits << n_unchanged_bits) | unchanged_bits);
- n_bits -= n_changed_bits;
- bits >>= n_changed_bits;
- pos += n_changed_bits;
- }
-}
-
-static void RewindBitPosition(const size_t new_storage_ix,
- size_t* storage_ix, uint8_t* storage) {
- const size_t bitpos = new_storage_ix & 7;
- const size_t mask = (1u << bitpos) - 1;
- storage[new_storage_ix >> 3] &= (uint8_t)mask;
- *storage_ix = new_storage_ix;
-}
-
-static BROTLI_BOOL ShouldMergeBlock(
- const uint8_t* data, size_t len, const uint8_t* depths) {
- size_t histo[256] = { 0 };
- static const size_t kSampleRate = 43;
- size_t i;
- for (i = 0; i < len; i += kSampleRate) {
- ++histo[data[i]];
- }
- {
- const size_t total = (len + kSampleRate - 1) / kSampleRate;
- double r = (FastLog2(total) + 0.5) * (double)total + 200;
- for (i = 0; i < 256; ++i) {
- r -= (double)histo[i] * (depths[i] + FastLog2(histo[i]));
- }
- return TO_BROTLI_BOOL(r >= 0.0);
- }
-}
-
-/* Acceptable loss for uncompressible speedup is 2% */
-#define MIN_RATIO 980
-
-static BROTLI_INLINE BROTLI_BOOL ShouldUseUncompressedMode(
- const uint8_t* metablock_start, const uint8_t* next_emit,
- const size_t insertlen, const size_t literal_ratio) {
- const size_t compressed = (size_t)(next_emit - metablock_start);
- if (compressed * 50 > insertlen) {
- return BROTLI_FALSE;
- } else {
- return TO_BROTLI_BOOL(literal_ratio > MIN_RATIO);
- }
-}
-
-static void EmitUncompressedMetaBlock(const uint8_t* begin, const uint8_t* end,
- const size_t storage_ix_start,
- size_t* storage_ix, uint8_t* storage) {
- const size_t len = (size_t)(end - begin);
- RewindBitPosition(storage_ix_start, storage_ix, storage);
- BrotliStoreMetaBlockHeader(len, 1, storage_ix, storage);
- *storage_ix = (*storage_ix + 7u) & ~7u;
- memcpy(&storage[*storage_ix >> 3], begin, len);
- *storage_ix += len << 3;
- storage[*storage_ix >> 3] = 0;
-}
-
-static uint32_t kCmdHistoSeed[128] = {
- 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 0, 0, 0, 0,
-};
-
-static BROTLI_INLINE void BrotliCompressFragmentFastImpl(
- MemoryManager* m, const uint8_t* input, size_t input_size,
- BROTLI_BOOL is_last, int* table, size_t table_bits, uint8_t cmd_depth[128],
- uint16_t cmd_bits[128], size_t* cmd_code_numbits, uint8_t* cmd_code,
- size_t* storage_ix, uint8_t* storage) {
- uint32_t cmd_histo[128];
- const uint8_t* ip_end;
-
- /* "next_emit" is a pointer to the first byte that is not covered by a
- previous copy. Bytes between "next_emit" and the start of the next copy or
- the end of the input will be emitted as literal bytes. */
- const uint8_t* next_emit = input;
- /* Save the start of the first block for position and distance computations.
- */
- const uint8_t* base_ip = input;
-
- static const size_t kFirstBlockSize = 3 << 15;
- static const size_t kMergeBlockSize = 1 << 16;
-
- const size_t kInputMarginBytes = BROTLI_WINDOW_GAP;
- const size_t kMinMatchLen = 5;
-
- const uint8_t* metablock_start = input;
- size_t block_size = BROTLI_MIN(size_t, input_size, kFirstBlockSize);
- size_t total_block_size = block_size;
- /* Save the bit position of the MLEN field of the meta-block header, so that
- we can update it later if we decide to extend this meta-block. */
- size_t mlen_storage_ix = *storage_ix + 3;
-
- uint8_t lit_depth[256];
- uint16_t lit_bits[256];
-
- size_t literal_ratio;
-
- const uint8_t* ip;
- int last_distance;
-
- const size_t shift = 64u - table_bits;
-
- BrotliStoreMetaBlockHeader(block_size, 0, storage_ix, storage);
- /* No block splits, no contexts. */
- BrotliWriteBits(13, 0, storage_ix, storage);
-
- literal_ratio = BuildAndStoreLiteralPrefixCode(
- m, input, block_size, lit_depth, lit_bits, storage_ix, storage);
- if (BROTLI_IS_OOM(m)) return;
-
- {
- /* Store the pre-compressed command and distance prefix codes. */
- size_t i;
- for (i = 0; i + 7 < *cmd_code_numbits; i += 8) {
- BrotliWriteBits(8, cmd_code[i >> 3], storage_ix, storage);
- }
- }
- BrotliWriteBits(*cmd_code_numbits & 7, cmd_code[*cmd_code_numbits >> 3],
- storage_ix, storage);
-
- emit_commands:
- /* Initialize the command and distance histograms. We will gather
- statistics of command and distance codes during the processing
- of this block and use it to update the command and distance
- prefix codes for the next block. */
- memcpy(cmd_histo, kCmdHistoSeed, sizeof(kCmdHistoSeed));
-
- /* "ip" is the input pointer. */
- ip = input;
- last_distance = -1;
- ip_end = input + block_size;
-
- if (BROTLI_PREDICT_TRUE(block_size >= kInputMarginBytes)) {
- /* For the last block, we need to keep a 16 bytes margin so that we can be
- sure that all distances are at most window size - 16.
- For all other blocks, we only need to keep a margin of 5 bytes so that
- we don't go over the block size with a copy. */
- const size_t len_limit = BROTLI_MIN(size_t, block_size - kMinMatchLen,
- input_size - kInputMarginBytes);
- const uint8_t* ip_limit = input + len_limit;
-
- uint32_t next_hash;
- for (next_hash = Hash(++ip, shift); ; ) {
- /* Step 1: Scan forward in the input looking for a 5-byte-long match.
- If we get close to exhausting the input then goto emit_remainder.
-
- Heuristic match skipping: If 32 bytes are scanned with no matches
- found, start looking only at every other byte. If 32 more bytes are
- scanned, look at every third byte, etc.. When a match is found,
- immediately go back to looking at every byte. This is a small loss
- (~5% performance, ~0.1% density) for compressible data due to more
- bookkeeping, but for non-compressible data (such as JPEG) it's a huge
- win since the compressor quickly "realizes" the data is incompressible
- and doesn't bother looking for matches everywhere.
-
- The "skip" variable keeps track of how many bytes there are since the
- last match; dividing it by 32 (i.e. right-shifting by five) gives the
- number of bytes to move ahead for each iteration. */
- uint32_t skip = 32;
-
- const uint8_t* next_ip = ip;
- const uint8_t* candidate;
- BROTLI_DCHECK(next_emit < ip);
-trawl:
- do {
- uint32_t hash = next_hash;
- uint32_t bytes_between_hash_lookups = skip++ >> 5;
- BROTLI_DCHECK(hash == Hash(next_ip, shift));
- ip = next_ip;
- next_ip = ip + bytes_between_hash_lookups;
- if (BROTLI_PREDICT_FALSE(next_ip > ip_limit)) {
- goto emit_remainder;
- }
- next_hash = Hash(next_ip, shift);
- candidate = ip - last_distance;
- if (IsMatch(ip, candidate)) {
- if (BROTLI_PREDICT_TRUE(candidate < ip)) {
- table[hash] = (int)(ip - base_ip);
- break;
- }
- }
- candidate = base_ip + table[hash];
- BROTLI_DCHECK(candidate >= base_ip);
- BROTLI_DCHECK(candidate < ip);
-
- table[hash] = (int)(ip - base_ip);
- } while (BROTLI_PREDICT_TRUE(!IsMatch(ip, candidate)));
-
- /* Check copy distance. If candidate is not feasible, continue search.
- Checking is done outside of hot loop to reduce overhead. */
- if (ip - candidate > MAX_DISTANCE) goto trawl;
-
- /* Step 2: Emit the found match together with the literal bytes from
- "next_emit" to the bit stream, and then see if we can find a next match
- immediately afterwards. Repeat until we find no match for the input
- without emitting some literal bytes. */
-
- {
- /* We have a 5-byte match at ip, and we need to emit bytes in
- [next_emit, ip). */
- const uint8_t* base = ip;
- size_t matched = 5 + FindMatchLengthWithLimit(
- candidate + 5, ip + 5, (size_t)(ip_end - ip) - 5);
- int distance = (int)(base - candidate); /* > 0 */
- size_t insert = (size_t)(base - next_emit);
- ip += matched;
- BROTLI_DCHECK(0 == memcmp(base, candidate, matched));
- if (BROTLI_PREDICT_TRUE(insert < 6210)) {
- EmitInsertLen(insert, cmd_depth, cmd_bits, cmd_histo,
- storage_ix, storage);
- } else if (ShouldUseUncompressedMode(metablock_start, next_emit, insert,
- literal_ratio)) {
- EmitUncompressedMetaBlock(metablock_start, base, mlen_storage_ix - 3,
- storage_ix, storage);
- input_size -= (size_t)(base - input);
- input = base;
- next_emit = input;
- goto next_block;
- } else {
- EmitLongInsertLen(insert, cmd_depth, cmd_bits, cmd_histo,
- storage_ix, storage);
- }
- EmitLiterals(next_emit, insert, lit_depth, lit_bits,
- storage_ix, storage);
- if (distance == last_distance) {
- BrotliWriteBits(cmd_depth[64], cmd_bits[64], storage_ix, storage);
- ++cmd_histo[64];
- } else {
- EmitDistance((size_t)distance, cmd_depth, cmd_bits,
- cmd_histo, storage_ix, storage);
- last_distance = distance;
- }
- EmitCopyLenLastDistance(matched, cmd_depth, cmd_bits, cmd_histo,
- storage_ix, storage);
-
- next_emit = ip;
- if (BROTLI_PREDICT_FALSE(ip >= ip_limit)) {
- goto emit_remainder;
- }
- /* We could immediately start working at ip now, but to improve
- compression we first update "table" with the hashes of some positions
- within the last copy. */
- {
- uint64_t input_bytes = BROTLI_UNALIGNED_LOAD64LE(ip - 3);
- uint32_t prev_hash = HashBytesAtOffset(input_bytes, 0, shift);
- uint32_t cur_hash = HashBytesAtOffset(input_bytes, 3, shift);
- table[prev_hash] = (int)(ip - base_ip - 3);
- prev_hash = HashBytesAtOffset(input_bytes, 1, shift);
- table[prev_hash] = (int)(ip - base_ip - 2);
- prev_hash = HashBytesAtOffset(input_bytes, 2, shift);
- table[prev_hash] = (int)(ip - base_ip - 1);
-
- candidate = base_ip + table[cur_hash];
- table[cur_hash] = (int)(ip - base_ip);
- }
- }
-
- while (IsMatch(ip, candidate)) {
- /* We have a 5-byte match at ip, and no need to emit any literal bytes
- prior to ip. */
- const uint8_t* base = ip;
- size_t matched = 5 + FindMatchLengthWithLimit(
- candidate + 5, ip + 5, (size_t)(ip_end - ip) - 5);
- if (ip - candidate > MAX_DISTANCE) break;
- ip += matched;
- last_distance = (int)(base - candidate); /* > 0 */
- BROTLI_DCHECK(0 == memcmp(base, candidate, matched));
- EmitCopyLen(matched, cmd_depth, cmd_bits, cmd_histo,
- storage_ix, storage);
- EmitDistance((size_t)last_distance, cmd_depth, cmd_bits,
- cmd_histo, storage_ix, storage);
-
- next_emit = ip;
- if (BROTLI_PREDICT_FALSE(ip >= ip_limit)) {
- goto emit_remainder;
- }
- /* We could immediately start working at ip now, but to improve
- compression we first update "table" with the hashes of some positions
- within the last copy. */
- {
- uint64_t input_bytes = BROTLI_UNALIGNED_LOAD64LE(ip - 3);
- uint32_t prev_hash = HashBytesAtOffset(input_bytes, 0, shift);
- uint32_t cur_hash = HashBytesAtOffset(input_bytes, 3, shift);
- table[prev_hash] = (int)(ip - base_ip - 3);
- prev_hash = HashBytesAtOffset(input_bytes, 1, shift);
- table[prev_hash] = (int)(ip - base_ip - 2);
- prev_hash = HashBytesAtOffset(input_bytes, 2, shift);
- table[prev_hash] = (int)(ip - base_ip - 1);
-
- candidate = base_ip + table[cur_hash];
- table[cur_hash] = (int)(ip - base_ip);
- }
- }
-
- next_hash = Hash(++ip, shift);
- }
- }
-
- emit_remainder:
- BROTLI_DCHECK(next_emit <= ip_end);
- input += block_size;
- input_size -= block_size;
- block_size = BROTLI_MIN(size_t, input_size, kMergeBlockSize);
-
- /* Decide if we want to continue this meta-block instead of emitting the
- last insert-only command. */
- if (input_size > 0 &&
- total_block_size + block_size <= (1 << 20) &&
- ShouldMergeBlock(input, block_size, lit_depth)) {
- BROTLI_DCHECK(total_block_size > (1 << 16));
- /* Update the size of the current meta-block and continue emitting commands.
- We can do this because the current size and the new size both have 5
- nibbles. */
- total_block_size += block_size;
- UpdateBits(20, (uint32_t)(total_block_size - 1), mlen_storage_ix, storage);
- goto emit_commands;
- }
-
- /* Emit the remaining bytes as literals. */
- if (next_emit < ip_end) {
- const size_t insert = (size_t)(ip_end - next_emit);
- if (BROTLI_PREDICT_TRUE(insert < 6210)) {
- EmitInsertLen(insert, cmd_depth, cmd_bits, cmd_histo,
- storage_ix, storage);
- EmitLiterals(next_emit, insert, lit_depth, lit_bits, storage_ix, storage);
- } else if (ShouldUseUncompressedMode(metablock_start, next_emit, insert,
- literal_ratio)) {
- EmitUncompressedMetaBlock(metablock_start, ip_end, mlen_storage_ix - 3,
- storage_ix, storage);
- } else {
- EmitLongInsertLen(insert, cmd_depth, cmd_bits, cmd_histo,
- storage_ix, storage);
- EmitLiterals(next_emit, insert, lit_depth, lit_bits,
- storage_ix, storage);
- }
- }
- next_emit = ip_end;
-
-next_block:
- /* If we have more data, write a new meta-block header and prefix codes and
- then continue emitting commands. */
- if (input_size > 0) {
- metablock_start = input;
- block_size = BROTLI_MIN(size_t, input_size, kFirstBlockSize);
- total_block_size = block_size;
- /* Save the bit position of the MLEN field of the meta-block header, so that
- we can update it later if we decide to extend this meta-block. */
- mlen_storage_ix = *storage_ix + 3;
- BrotliStoreMetaBlockHeader(block_size, 0, storage_ix, storage);
- /* No block splits, no contexts. */
- BrotliWriteBits(13, 0, storage_ix, storage);
- literal_ratio = BuildAndStoreLiteralPrefixCode(
- m, input, block_size, lit_depth, lit_bits, storage_ix, storage);
- if (BROTLI_IS_OOM(m)) return;
- BuildAndStoreCommandPrefixCode(cmd_histo, cmd_depth, cmd_bits,
- storage_ix, storage);
- goto emit_commands;
- }
-
- if (!is_last) {
- /* If this is not the last block, update the command and distance prefix
- codes for the next block and store the compressed forms. */
- cmd_code[0] = 0;
- *cmd_code_numbits = 0;
- BuildAndStoreCommandPrefixCode(cmd_histo, cmd_depth, cmd_bits,
- cmd_code_numbits, cmd_code);
- }
-}
-
-#define FOR_TABLE_BITS_(X) X(9) X(11) X(13) X(15)
-
-#define BAKE_METHOD_PARAM_(B) \
-static BROTLI_NOINLINE void BrotliCompressFragmentFastImpl ## B( \
- MemoryManager* m, const uint8_t* input, size_t input_size, \
- BROTLI_BOOL is_last, int* table, uint8_t cmd_depth[128], \
- uint16_t cmd_bits[128], size_t* cmd_code_numbits, uint8_t* cmd_code, \
- size_t* storage_ix, uint8_t* storage) { \
- BrotliCompressFragmentFastImpl(m, input, input_size, is_last, table, B, \
- cmd_depth, cmd_bits, cmd_code_numbits, cmd_code, storage_ix, storage); \
-}
-FOR_TABLE_BITS_(BAKE_METHOD_PARAM_)
-#undef BAKE_METHOD_PARAM_
-
-void BrotliCompressFragmentFast(
- MemoryManager* m, const uint8_t* input, size_t input_size,
- BROTLI_BOOL is_last, int* table, size_t table_size, uint8_t cmd_depth[128],
- uint16_t cmd_bits[128], size_t* cmd_code_numbits, uint8_t* cmd_code,
- size_t* storage_ix, uint8_t* storage) {
- const size_t initial_storage_ix = *storage_ix;
- const size_t table_bits = Log2FloorNonZero(table_size);
-
- if (input_size == 0) {
- BROTLI_DCHECK(is_last);
- BrotliWriteBits(1, 1, storage_ix, storage); /* islast */
- BrotliWriteBits(1, 1, storage_ix, storage); /* isempty */
- *storage_ix = (*storage_ix + 7u) & ~7u;
- return;
- }
-
- switch (table_bits) {
-#define CASE_(B) \
- case B: \
- BrotliCompressFragmentFastImpl ## B( \
- m, input, input_size, is_last, table, cmd_depth, cmd_bits, \
- cmd_code_numbits, cmd_code, storage_ix, storage); \
- break;
- FOR_TABLE_BITS_(CASE_)
-#undef CASE_
- default: BROTLI_DCHECK(0); break;
- }
-
- /* If output is larger than single uncompressed block, rewrite it. */
- if (*storage_ix - initial_storage_ix > 31 + (input_size << 3)) {
- EmitUncompressedMetaBlock(input, input + input_size, initial_storage_ix,
- storage_ix, storage);
- }
-
- if (is_last) {
- BrotliWriteBits(1, 1, storage_ix, storage); /* islast */
- BrotliWriteBits(1, 1, storage_ix, storage); /* isempty */
- *storage_ix = (*storage_ix + 7u) & ~7u;
- }
-}
-
-#undef FOR_TABLE_BITS_
-
-#if defined(__cplusplus) || defined(c_plusplus)
-} /* extern "C" */
-#endif
diff --git a/BaseTools/Source/C/BrotliCompress/enc/compress_fragment_two_pass.c b/BaseTools/Source/C/BrotliCompress/enc/compress_fragment_two_pass.c
deleted file mode 100644
index 0d4d3b597eb9..000000000000
--- a/BaseTools/Source/C/BrotliCompress/enc/compress_fragment_two_pass.c
+++ /dev/null
@@ -1,645 +0,0 @@
-/* Copyright 2015 Google Inc. All Rights Reserved.
-
- Distributed under MIT license.
- See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
-*/
-
-/* Function for fast encoding of an input fragment, independently from the input
- history. This function uses two-pass processing: in the first pass we save
- the found backward matches and literal bytes into a buffer, and in the
- second pass we emit them into the bit stream using prefix codes built based
- on the actual command and literal byte histograms. */
-
-#include "./compress_fragment_two_pass.h"
-
-#include <string.h> /* memcmp, memcpy, memset */
-
-#include "../common/constants.h"
-#include "../common/platform.h"
-#include <brotli/types.h>
-#include "./bit_cost.h"
-#include "./brotli_bit_stream.h"
-#include "./entropy_encode.h"
-#include "./fast_log.h"
-#include "./find_match_length.h"
-#include "./memory.h"
-#include "./write_bits.h"
-
-#if defined(__cplusplus) || defined(c_plusplus)
-extern "C" {
-#endif
-
-#define MAX_DISTANCE (long)BROTLI_MAX_BACKWARD_LIMIT(18)
-
-/* kHashMul32 multiplier has these properties:
- * The multiplier must be odd. Otherwise we may lose the highest bit.
- * No long streaks of ones or zeros.
- * There is no effort to ensure that it is a prime, the oddity is enough
- for this use.
- * The number has been tuned heuristically against compression benchmarks. */
-static const uint32_t kHashMul32 = 0x1E35A7BD;
-
-static BROTLI_INLINE uint32_t Hash(const uint8_t* p,
- size_t shift, size_t length) {
- const uint64_t h =
- (BROTLI_UNALIGNED_LOAD64LE(p) << ((8 - length) * 8)) * kHashMul32;
- return (uint32_t)(h >> shift);
-}
-
-static BROTLI_INLINE uint32_t HashBytesAtOffset(uint64_t v, size_t offset,
- size_t shift, size_t length) {
- BROTLI_DCHECK(offset <= 8 - length);
- {
- const uint64_t h = ((v >> (8 * offset)) << ((8 - length) * 8)) * kHashMul32;
- return (uint32_t)(h >> shift);
- }
-}
-
-static BROTLI_INLINE BROTLI_BOOL IsMatch(const uint8_t* p1, const uint8_t* p2,
- size_t length) {
- if (BrotliUnalignedRead32(p1) == BrotliUnalignedRead32(p2)) {
- if (length == 4) return BROTLI_TRUE;
- return TO_BROTLI_BOOL(p1[4] == p2[4] && p1[5] == p2[5]);
- }
- return BROTLI_FALSE;
-}
-
-/* Builds a command and distance prefix code (each 64 symbols) into "depth" and
- "bits" based on "histogram" and stores it into the bit stream. */
-static void BuildAndStoreCommandPrefixCode(
- const uint32_t histogram[128],
- uint8_t depth[128], uint16_t bits[128],
- size_t* storage_ix, uint8_t* storage) {
- /* Tree size for building a tree over 64 symbols is 2 * 64 + 1. */
- HuffmanTree tree[129];
- uint8_t cmd_depth[BROTLI_NUM_COMMAND_SYMBOLS] = { 0 };
- uint16_t cmd_bits[64];
- BrotliCreateHuffmanTree(histogram, 64, 15, tree, depth);
- BrotliCreateHuffmanTree(&histogram[64], 64, 14, tree, &depth[64]);
- /* We have to jump through a few hoops here in order to compute
- the command bits because the symbols are in a different order than in
- the full alphabet. This looks complicated, but having the symbols
- in this order in the command bits saves a few branches in the Emit*
- functions. */
- memcpy(cmd_depth, depth + 24, 24);
- memcpy(cmd_depth + 24, depth, 8);
- memcpy(cmd_depth + 32, depth + 48, 8);
- memcpy(cmd_depth + 40, depth + 8, 8);
- memcpy(cmd_depth + 48, depth + 56, 8);
- memcpy(cmd_depth + 56, depth + 16, 8);
- BrotliConvertBitDepthsToSymbols(cmd_depth, 64, cmd_bits);
- memcpy(bits, cmd_bits + 24, 16);
- memcpy(bits + 8, cmd_bits + 40, 16);
- memcpy(bits + 16, cmd_bits + 56, 16);
- memcpy(bits + 24, cmd_bits, 48);
- memcpy(bits + 48, cmd_bits + 32, 16);
- memcpy(bits + 56, cmd_bits + 48, 16);
- BrotliConvertBitDepthsToSymbols(&depth[64], 64, &bits[64]);
- {
- /* Create the bit length array for the full command alphabet. */
- size_t i;
- memset(cmd_depth, 0, 64); /* only 64 first values were used */
- memcpy(cmd_depth, depth + 24, 8);
- memcpy(cmd_depth + 64, depth + 32, 8);
- memcpy(cmd_depth + 128, depth + 40, 8);
- memcpy(cmd_depth + 192, depth + 48, 8);
- memcpy(cmd_depth + 384, depth + 56, 8);
- for (i = 0; i < 8; ++i) {
- cmd_depth[128 + 8 * i] = depth[i];
- cmd_depth[256 + 8 * i] = depth[8 + i];
- cmd_depth[448 + 8 * i] = depth[16 + i];
- }
- BrotliStoreHuffmanTree(
- cmd_depth, BROTLI_NUM_COMMAND_SYMBOLS, tree, storage_ix, storage);
- }
- BrotliStoreHuffmanTree(&depth[64], 64, tree, storage_ix, storage);
-}
-
-static BROTLI_INLINE void EmitInsertLen(
- uint32_t insertlen, uint32_t** commands) {
- if (insertlen < 6) {
- **commands = insertlen;
- } else if (insertlen < 130) {
- const uint32_t tail = insertlen - 2;
- const uint32_t nbits = Log2FloorNonZero(tail) - 1u;
- const uint32_t prefix = tail >> nbits;
- const uint32_t inscode = (nbits << 1) + prefix + 2;
- const uint32_t extra = tail - (prefix << nbits);
- **commands = inscode | (extra << 8);
- } else if (insertlen < 2114) {
- const uint32_t tail = insertlen - 66;
- const uint32_t nbits = Log2FloorNonZero(tail);
- const uint32_t code = nbits + 10;
- const uint32_t extra = tail - (1u << nbits);
- **commands = code | (extra << 8);
- } else if (insertlen < 6210) {
- const uint32_t extra = insertlen - 2114;
- **commands = 21 | (extra << 8);
- } else if (insertlen < 22594) {
- const uint32_t extra = insertlen - 6210;
- **commands = 22 | (extra << 8);
- } else {
- const uint32_t extra = insertlen - 22594;
- **commands = 23 | (extra << 8);
- }
- ++(*commands);
-}
-
-static BROTLI_INLINE void EmitCopyLen(size_t copylen, uint32_t** commands) {
- if (copylen < 10) {
- **commands = (uint32_t)(copylen + 38);
- } else if (copylen < 134) {
- const size_t tail = copylen - 6;
- const size_t nbits = Log2FloorNonZero(tail) - 1;
- const size_t prefix = tail >> nbits;
- const size_t code = (nbits << 1) + prefix + 44;
- const size_t extra = tail - (prefix << nbits);
- **commands = (uint32_t)(code | (extra << 8));
- } else if (copylen < 2118) {
- const size_t tail = copylen - 70;
- const size_t nbits = Log2FloorNonZero(tail);
- const size_t code = nbits + 52;
- const size_t extra = tail - ((size_t)1 << nbits);
- **commands = (uint32_t)(code | (extra << 8));
- } else {
- const size_t extra = copylen - 2118;
- **commands = (uint32_t)(63 | (extra << 8));
- }
- ++(*commands);
-}
-
-static BROTLI_INLINE void EmitCopyLenLastDistance(
- size_t copylen, uint32_t** commands) {
- if (copylen < 12) {
- **commands = (uint32_t)(copylen + 20);
- ++(*commands);
- } else if (copylen < 72) {
- const size_t tail = copylen - 8;
- const size_t nbits = Log2FloorNonZero(tail) - 1;
- const size_t prefix = tail >> nbits;
- const size_t code = (nbits << 1) + prefix + 28;
- const size_t extra = tail - (prefix << nbits);
- **commands = (uint32_t)(code | (extra << 8));
- ++(*commands);
- } else if (copylen < 136) {
- const size_t tail = copylen - 8;
- const size_t code = (tail >> 5) + 54;
- const size_t extra = tail & 31;
- **commands = (uint32_t)(code | (extra << 8));
- ++(*commands);
- **commands = 64;
- ++(*commands);
- } else if (copylen < 2120) {
- const size_t tail = copylen - 72;
- const size_t nbits = Log2FloorNonZero(tail);
- const size_t code = nbits + 52;
- const size_t extra = tail - ((size_t)1 << nbits);
- **commands = (uint32_t)(code | (extra << 8));
- ++(*commands);
- **commands = 64;
- ++(*commands);
- } else {
- const size_t extra = copylen - 2120;
- **commands = (uint32_t)(63 | (extra << 8));
- ++(*commands);
- **commands = 64;
- ++(*commands);
- }
-}
-
-static BROTLI_INLINE void EmitDistance(uint32_t distance, uint32_t** commands) {
- uint32_t d = distance + 3;
- uint32_t nbits = Log2FloorNonZero(d) - 1;
- const uint32_t prefix = (d >> nbits) & 1;
- const uint32_t offset = (2 + prefix) << nbits;
- const uint32_t distcode = 2 * (nbits - 1) + prefix + 80;
- uint32_t extra = d - offset;
- **commands = distcode | (extra << 8);
- ++(*commands);
-}
-
-/* REQUIRES: len <= 1 << 24. */
-static void BrotliStoreMetaBlockHeader(
- size_t len, BROTLI_BOOL is_uncompressed, size_t* storage_ix,
- uint8_t* storage) {
- size_t nibbles = 6;
- /* ISLAST */
- BrotliWriteBits(1, 0, storage_ix, storage);
- if (len <= (1U << 16)) {
- nibbles = 4;
- } else if (len <= (1U << 20)) {
- nibbles = 5;
- }
- BrotliWriteBits(2, nibbles - 4, storage_ix, storage);
- BrotliWriteBits(nibbles * 4, len - 1, storage_ix, storage);
- /* ISUNCOMPRESSED */
- BrotliWriteBits(1, (uint64_t)is_uncompressed, storage_ix, storage);
-}
-
-static BROTLI_INLINE void CreateCommands(const uint8_t* input,
- size_t block_size, size_t input_size, const uint8_t* base_ip, int* table,
- size_t table_bits, size_t min_match,
- uint8_t** literals, uint32_t** commands) {
- /* "ip" is the input pointer. */
- const uint8_t* ip = input;
- const size_t shift = 64u - table_bits;
- const uint8_t* ip_end = input + block_size;
- /* "next_emit" is a pointer to the first byte that is not covered by a
- previous copy. Bytes between "next_emit" and the start of the next copy or
- the end of the input will be emitted as literal bytes. */
- const uint8_t* next_emit = input;
-
- int last_distance = -1;
- const size_t kInputMarginBytes = BROTLI_WINDOW_GAP;
-
- if (BROTLI_PREDICT_TRUE(block_size >= kInputMarginBytes)) {
- /* For the last block, we need to keep a 16 bytes margin so that we can be
- sure that all distances are at most window size - 16.
- For all other blocks, we only need to keep a margin of 5 bytes so that
- we don't go over the block size with a copy. */
- const size_t len_limit = BROTLI_MIN(size_t, block_size - min_match,
- input_size - kInputMarginBytes);
- const uint8_t* ip_limit = input + len_limit;
-
- uint32_t next_hash;
- for (next_hash = Hash(++ip, shift, min_match); ; ) {
- /* Step 1: Scan forward in the input looking for a 6-byte-long match.
- If we get close to exhausting the input then goto emit_remainder.
-
- Heuristic match skipping: If 32 bytes are scanned with no matches
- found, start looking only at every other byte. If 32 more bytes are
- scanned, look at every third byte, etc.. When a match is found,
- immediately go back to looking at every byte. This is a small loss
- (~5% performance, ~0.1% density) for compressible data due to more
- bookkeeping, but for non-compressible data (such as JPEG) it's a huge
- win since the compressor quickly "realizes" the data is incompressible
- and doesn't bother looking for matches everywhere.
-
- The "skip" variable keeps track of how many bytes there are since the
- last match; dividing it by 32 (ie. right-shifting by five) gives the
- number of bytes to move ahead for each iteration. */
- uint32_t skip = 32;
-
- const uint8_t* next_ip = ip;
- const uint8_t* candidate;
-
- BROTLI_DCHECK(next_emit < ip);
-trawl:
- do {
- uint32_t hash = next_hash;
- uint32_t bytes_between_hash_lookups = skip++ >> 5;
- ip = next_ip;
- BROTLI_DCHECK(hash == Hash(ip, shift, min_match));
- next_ip = ip + bytes_between_hash_lookups;
- if (BROTLI_PREDICT_FALSE(next_ip > ip_limit)) {
- goto emit_remainder;
- }
- next_hash = Hash(next_ip, shift, min_match);
- candidate = ip - last_distance;
- if (IsMatch(ip, candidate, min_match)) {
- if (BROTLI_PREDICT_TRUE(candidate < ip)) {
- table[hash] = (int)(ip - base_ip);
- break;
- }
- }
- candidate = base_ip + table[hash];
- BROTLI_DCHECK(candidate >= base_ip);
- BROTLI_DCHECK(candidate < ip);
-
- table[hash] = (int)(ip - base_ip);
- } while (BROTLI_PREDICT_TRUE(!IsMatch(ip, candidate, min_match)));
-
- /* Check copy distance. If candidate is not feasible, continue search.
- Checking is done outside of hot loop to reduce overhead. */
- if (ip - candidate > MAX_DISTANCE) goto trawl;
-
- /* Step 2: Emit the found match together with the literal bytes from
- "next_emit", and then see if we can find a next match immediately
- afterwards. Repeat until we find no match for the input
- without emitting some literal bytes. */
-
- {
- /* We have a 6-byte match at ip, and we need to emit bytes in
- [next_emit, ip). */
- const uint8_t* base = ip;
- size_t matched = min_match + FindMatchLengthWithLimit(
- candidate + min_match, ip + min_match,
- (size_t)(ip_end - ip) - min_match);
- int distance = (int)(base - candidate); /* > 0 */
- int insert = (int)(base - next_emit);
- ip += matched;
- BROTLI_DCHECK(0 == memcmp(base, candidate, matched));
- EmitInsertLen((uint32_t)insert, commands);
- memcpy(*literals, next_emit, (size_t)insert);
- *literals += insert;
- if (distance == last_distance) {
- **commands = 64;
- ++(*commands);
- } else {
- EmitDistance((uint32_t)distance, commands);
- last_distance = distance;
- }
- EmitCopyLenLastDistance(matched, commands);
-
- next_emit = ip;
- if (BROTLI_PREDICT_FALSE(ip >= ip_limit)) {
- goto emit_remainder;
- }
- {
- /* We could immediately start working at ip now, but to improve
- compression we first update "table" with the hashes of some
- positions within the last copy. */
- uint64_t input_bytes;
- uint32_t cur_hash;
- uint32_t prev_hash;
- if (min_match == 4) {
- input_bytes = BROTLI_UNALIGNED_LOAD64LE(ip - 3);
- cur_hash = HashBytesAtOffset(input_bytes, 3, shift, min_match);
- prev_hash = HashBytesAtOffset(input_bytes, 0, shift, min_match);
- table[prev_hash] = (int)(ip - base_ip - 3);
- prev_hash = HashBytesAtOffset(input_bytes, 1, shift, min_match);
- table[prev_hash] = (int)(ip - base_ip - 2);
- prev_hash = HashBytesAtOffset(input_bytes, 0, shift, min_match);
- table[prev_hash] = (int)(ip - base_ip - 1);
- } else {
- input_bytes = BROTLI_UNALIGNED_LOAD64LE(ip - 5);
- prev_hash = HashBytesAtOffset(input_bytes, 0, shift, min_match);
- table[prev_hash] = (int)(ip - base_ip - 5);
- prev_hash = HashBytesAtOffset(input_bytes, 1, shift, min_match);
- table[prev_hash] = (int)(ip - base_ip - 4);
- prev_hash = HashBytesAtOffset(input_bytes, 2, shift, min_match);
- table[prev_hash] = (int)(ip - base_ip - 3);
- input_bytes = BROTLI_UNALIGNED_LOAD64LE(ip - 2);
- cur_hash = HashBytesAtOffset(input_bytes, 2, shift, min_match);
- prev_hash = HashBytesAtOffset(input_bytes, 0, shift, min_match);
- table[prev_hash] = (int)(ip - base_ip - 2);
- prev_hash = HashBytesAtOffset(input_bytes, 1, shift, min_match);
- table[prev_hash] = (int)(ip - base_ip - 1);
- }
-
- candidate = base_ip + table[cur_hash];
- table[cur_hash] = (int)(ip - base_ip);
- }
- }
-
- while (ip - candidate <= MAX_DISTANCE &&
- IsMatch(ip, candidate, min_match)) {
- /* We have a 6-byte match at ip, and no need to emit any
- literal bytes prior to ip. */
- const uint8_t* base = ip;
- size_t matched = min_match + FindMatchLengthWithLimit(
- candidate + min_match, ip + min_match,
- (size_t)(ip_end - ip) - min_match);
- ip += matched;
- last_distance = (int)(base - candidate); /* > 0 */
- BROTLI_DCHECK(0 == memcmp(base, candidate, matched));
- EmitCopyLen(matched, commands);
- EmitDistance((uint32_t)last_distance, commands);
-
- next_emit = ip;
- if (BROTLI_PREDICT_FALSE(ip >= ip_limit)) {
- goto emit_remainder;
- }
- {
- /* We could immediately start working at ip now, but to improve
- compression we first update "table" with the hashes of some
- positions within the last copy. */
- uint64_t input_bytes;
- uint32_t cur_hash;
- uint32_t prev_hash;
- if (min_match == 4) {
- input_bytes = BROTLI_UNALIGNED_LOAD64LE(ip - 3);
- cur_hash = HashBytesAtOffset(input_bytes, 3, shift, min_match);
- prev_hash = HashBytesAtOffset(input_bytes, 0, shift, min_match);
- table[prev_hash] = (int)(ip - base_ip - 3);
- prev_hash = HashBytesAtOffset(input_bytes, 1, shift, min_match);
- table[prev_hash] = (int)(ip - base_ip - 2);
- prev_hash = HashBytesAtOffset(input_bytes, 2, shift, min_match);
- table[prev_hash] = (int)(ip - base_ip - 1);
- } else {
- input_bytes = BROTLI_UNALIGNED_LOAD64LE(ip - 5);
- prev_hash = HashBytesAtOffset(input_bytes, 0, shift, min_match);
- table[prev_hash] = (int)(ip - base_ip - 5);
- prev_hash = HashBytesAtOffset(input_bytes, 1, shift, min_match);
- table[prev_hash] = (int)(ip - base_ip - 4);
- prev_hash = HashBytesAtOffset(input_bytes, 2, shift, min_match);
- table[prev_hash] = (int)(ip - base_ip - 3);
- input_bytes = BROTLI_UNALIGNED_LOAD64LE(ip - 2);
- cur_hash = HashBytesAtOffset(input_bytes, 2, shift, min_match);
- prev_hash = HashBytesAtOffset(input_bytes, 0, shift, min_match);
- table[prev_hash] = (int)(ip - base_ip - 2);
- prev_hash = HashBytesAtOffset(input_bytes, 1, shift, min_match);
- table[prev_hash] = (int)(ip - base_ip - 1);
- }
-
- candidate = base_ip + table[cur_hash];
- table[cur_hash] = (int)(ip - base_ip);
- }
- }
-
- next_hash = Hash(++ip, shift, min_match);
- }
- }
-
-emit_remainder:
- BROTLI_DCHECK(next_emit <= ip_end);
- /* Emit the remaining bytes as literals. */
- if (next_emit < ip_end) {
- const uint32_t insert = (uint32_t)(ip_end - next_emit);
- EmitInsertLen(insert, commands);
- memcpy(*literals, next_emit, insert);
- *literals += insert;
- }
-}
-
-static void StoreCommands(MemoryManager* m,
- const uint8_t* literals, const size_t num_literals,
- const uint32_t* commands, const size_t num_commands,
- size_t* storage_ix, uint8_t* storage) {
- static const uint32_t kNumExtraBits[128] = {
- 0, 0, 0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 7, 8, 9, 10, 12, 14, 24,
- 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4,
- 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 7, 8, 9, 10, 24,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8,
- 9, 9, 10, 10, 11, 11, 12, 12, 13, 13, 14, 14, 15, 15, 16, 16,
- 17, 17, 18, 18, 19, 19, 20, 20, 21, 21, 22, 22, 23, 23, 24, 24,
- };
- static const uint32_t kInsertOffset[24] = {
- 0, 1, 2, 3, 4, 5, 6, 8, 10, 14, 18, 26, 34, 50, 66, 98, 130, 194, 322, 578,
- 1090, 2114, 6210, 22594,
- };
-
- uint8_t lit_depths[256];
- uint16_t lit_bits[256];
- uint32_t lit_histo[256] = { 0 };
- uint8_t cmd_depths[128] = { 0 };
- uint16_t cmd_bits[128] = { 0 };
- uint32_t cmd_histo[128] = { 0 };
- size_t i;
- for (i = 0; i < num_literals; ++i) {
- ++lit_histo[literals[i]];
- }
- BrotliBuildAndStoreHuffmanTreeFast(m, lit_histo, num_literals,
- /* max_bits = */ 8,
- lit_depths, lit_bits,
- storage_ix, storage);
- if (BROTLI_IS_OOM(m)) return;
-
- for (i = 0; i < num_commands; ++i) {
- const uint32_t code = commands[i] & 0xFF;
- BROTLI_DCHECK(code < 128);
- ++cmd_histo[code];
- }
- cmd_histo[1] += 1;
- cmd_histo[2] += 1;
- cmd_histo[64] += 1;
- cmd_histo[84] += 1;
- BuildAndStoreCommandPrefixCode(cmd_histo, cmd_depths, cmd_bits,
- storage_ix, storage);
-
- for (i = 0; i < num_commands; ++i) {
- const uint32_t cmd = commands[i];
- const uint32_t code = cmd & 0xFF;
- const uint32_t extra = cmd >> 8;
- BROTLI_DCHECK(code < 128);
- BrotliWriteBits(cmd_depths[code], cmd_bits[code], storage_ix, storage);
- BrotliWriteBits(kNumExtraBits[code], extra, storage_ix, storage);
- if (code < 24) {
- const uint32_t insert = kInsertOffset[code] + extra;
- uint32_t j;
- for (j = 0; j < insert; ++j) {
- const uint8_t lit = *literals;
- BrotliWriteBits(lit_depths[lit], lit_bits[lit], storage_ix, storage);
- ++literals;
- }
- }
- }
-}
-
-/* Acceptable loss for uncompressible speedup is 2% */
-#define MIN_RATIO 0.98
-#define SAMPLE_RATE 43
-
-static BROTLI_BOOL ShouldCompress(
- const uint8_t* input, size_t input_size, size_t num_literals) {
- double corpus_size = (double)input_size;
- if (num_literals < MIN_RATIO * corpus_size) {
- return BROTLI_TRUE;
- } else {
- uint32_t literal_histo[256] = { 0 };
- const double max_total_bit_cost = corpus_size * 8 * MIN_RATIO / SAMPLE_RATE;
- size_t i;
- for (i = 0; i < input_size; i += SAMPLE_RATE) {
- ++literal_histo[input[i]];
- }
- return TO_BROTLI_BOOL(BitsEntropy(literal_histo, 256) < max_total_bit_cost);
- }
-}
-
-static void RewindBitPosition(const size_t new_storage_ix,
- size_t* storage_ix, uint8_t* storage) {
- const size_t bitpos = new_storage_ix & 7;
- const size_t mask = (1u << bitpos) - 1;
- storage[new_storage_ix >> 3] &= (uint8_t)mask;
- *storage_ix = new_storage_ix;
-}
-
-static void EmitUncompressedMetaBlock(const uint8_t* input, size_t input_size,
- size_t* storage_ix, uint8_t* storage) {
- BrotliStoreMetaBlockHeader(input_size, 1, storage_ix, storage);
- *storage_ix = (*storage_ix + 7u) & ~7u;
- memcpy(&storage[*storage_ix >> 3], input, input_size);
- *storage_ix += input_size << 3;
- storage[*storage_ix >> 3] = 0;
-}
-
-static BROTLI_INLINE void BrotliCompressFragmentTwoPassImpl(
- MemoryManager* m, const uint8_t* input, size_t input_size,
- BROTLI_BOOL is_last, uint32_t* command_buf, uint8_t* literal_buf,
- int* table, size_t table_bits, size_t min_match,
- size_t* storage_ix, uint8_t* storage) {
- /* Save the start of the first block for position and distance computations.
- */
- const uint8_t* base_ip = input;
- BROTLI_UNUSED(is_last);
-
- while (input_size > 0) {
- size_t block_size =
- BROTLI_MIN(size_t, input_size, kCompressFragmentTwoPassBlockSize);
- uint32_t* commands = command_buf;
- uint8_t* literals = literal_buf;
- size_t num_literals;
- CreateCommands(input, block_size, input_size, base_ip, table,
- table_bits, min_match, &literals, &commands);
- num_literals = (size_t)(literals - literal_buf);
- if (ShouldCompress(input, block_size, num_literals)) {
- const size_t num_commands = (size_t)(commands - command_buf);
- BrotliStoreMetaBlockHeader(block_size, 0, storage_ix, storage);
- /* No block splits, no contexts. */
- BrotliWriteBits(13, 0, storage_ix, storage);
- StoreCommands(m, literal_buf, num_literals, command_buf, num_commands,
- storage_ix, storage);
- if (BROTLI_IS_OOM(m)) return;
- } else {
- /* Since we did not find many backward references and the entropy of
- the data is close to 8 bits, we can simply emit an uncompressed block.
- This makes compression speed of uncompressible data about 3x faster. */
- EmitUncompressedMetaBlock(input, block_size, storage_ix, storage);
- }
- input += block_size;
- input_size -= block_size;
- }
-}
-
-#define FOR_TABLE_BITS_(X) \
- X(8) X(9) X(10) X(11) X(12) X(13) X(14) X(15) X(16) X(17)
-
-#define BAKE_METHOD_PARAM_(B) \
-static BROTLI_NOINLINE void BrotliCompressFragmentTwoPassImpl ## B( \
- MemoryManager* m, const uint8_t* input, size_t input_size, \
- BROTLI_BOOL is_last, uint32_t* command_buf, uint8_t* literal_buf, \
- int* table, size_t* storage_ix, uint8_t* storage) { \
- size_t min_match = (B <= 15) ? 4 : 6; \
- BrotliCompressFragmentTwoPassImpl(m, input, input_size, is_last, command_buf,\
- literal_buf, table, B, min_match, storage_ix, storage); \
-}
-FOR_TABLE_BITS_(BAKE_METHOD_PARAM_)
-#undef BAKE_METHOD_PARAM_
-
-void BrotliCompressFragmentTwoPass(
- MemoryManager* m, const uint8_t* input, size_t input_size,
- BROTLI_BOOL is_last, uint32_t* command_buf, uint8_t* literal_buf,
- int* table, size_t table_size, size_t* storage_ix, uint8_t* storage) {
- const size_t initial_storage_ix = *storage_ix;
- const size_t table_bits = Log2FloorNonZero(table_size);
- switch (table_bits) {
-#define CASE_(B) \
- case B: \
- BrotliCompressFragmentTwoPassImpl ## B( \
- m, input, input_size, is_last, command_buf, \
- literal_buf, table, storage_ix, storage); \
- break;
- FOR_TABLE_BITS_(CASE_)
-#undef CASE_
- default: BROTLI_DCHECK(0); break;
- }
-
- /* If output is larger than single uncompressed block, rewrite it. */
- if (*storage_ix - initial_storage_ix > 31 + (input_size << 3)) {
- RewindBitPosition(initial_storage_ix, storage_ix, storage);
- EmitUncompressedMetaBlock(input, input_size, storage_ix, storage);
- }
-
- if (is_last) {
- BrotliWriteBits(1, 1, storage_ix, storage); /* islast */
- BrotliWriteBits(1, 1, storage_ix, storage); /* isempty */
- *storage_ix = (*storage_ix + 7u) & ~7u;
- }
-}
-
-#undef FOR_TABLE_BITS_
-
-#if defined(__cplusplus) || defined(c_plusplus)
-} /* extern "C" */
-#endif
diff --git a/BaseTools/Source/C/BrotliCompress/enc/dictionary_hash.c b/BaseTools/Source/C/BrotliCompress/enc/dictionary_hash.c
deleted file mode 100644
index 03355c030372..000000000000
--- a/BaseTools/Source/C/BrotliCompress/enc/dictionary_hash.c
+++ /dev/null
@@ -1,1120 +0,0 @@
-/* Copyright 2015 Google Inc. All Rights Reserved.
-
- Distributed under MIT license.
- See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
-*/
-
-/* Hash table on the 4-byte prefixes of static dictionary words. */
-
-#include "../common/platform.h"
-#include "./dictionary_hash.h"
-
-#if defined(__cplusplus) || defined(c_plusplus)
-extern "C" {
-#endif
-
-BROTLI_INTERNAL const uint16_t kStaticDictionaryHash[32768] = {
-32072,0,0,0,0,0,0,0,0,21860,0,0,0,0,0,0,0,40486,0,0,0,0,0,45798,0,0,0,0,0,0,1292
-,0,0,0,0,4964,278,23717,0,19972,0,0,0,0,0,0,0,0,0,0,0,0,2126,16102,0,0,0,14437,0
-,0,0,0,0,0,0,26727,2253,0,0,17252,0,0,0,0,0,0,0,0,0,3622,0,0,0,0,22984,0,0,0,0,0
-,0,16647,0,34247,0,0,0,0,0,48486,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2511,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,19532,0,0,24004,0,0,0,9828,0
-,0,0,0,0,0,0,0,0,0,0,0,0,0,0,30853,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-,0,0,0,0,0,0,0,0,0,0,31974,0,0,0,0,0,0,0,0,20650,2404,0,20773,1677,9031,0,6404,0
-,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,51879,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6761,7206
-,0,0,21992,22983,0,0,3529,0,1864,0,0,0,0,0,0,11046,0,0,9641,0,0,0,6507,0,0,36934
-,21576,62375,0,0,0,0,0,0,0,0,0,8294,0,0,0,0,0,0,0,40807,0,0,0,39398,8136,0,0,0,0
-,0,0,0,8875,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7941,0,0,25609,0,0,0,936,
-3716,3213,15687,0,0,0,0,0,52519,0,17381,0,0,0,0,1320,5797,0,21029,0,0,6472,807,0
-,0,0,0,0,0,0,0,0,0,13545,0,0,0,3624,0,0,0,29674,30820,0,31237,0,6596,0,0,0,0,0,0
-,0,0,0,64070,0,0,0,0,0,0,0,0,0,0,0,22278,0,37446,0,0,0,0,7240,423,0,24612,21705,
-17636,0,0,0,0,0,0,1833,0,0,0,328,6021,0,0,0,19974,0,0,0,0,0,0,0,0,0,62119,4178,0
-,0,0,0,12100,8617,0,0,16900,0,36678,0,0,0,35366,0,51718,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,20998,0,62086,0,0,0,0,0,5542,0,0,0,0,0,0,0,0,0,0,0,14629,10952,25927,0,0,0
-,0,19849,0,0,0,0,0,0,0,30952,3046,14314,12998,0,0,0,15268,0,40582,30216,62118,0,
-0,0,20132,0,0,0,0,0,12005,0,0,0,52358,0,0,0,0,24778,0,44,33095,0,0,0,0,0,26372,0
-,0,0,0,0,3781,0,0,17928,9479,0,0,0,0,0,0,0,0,32297,28613,0,0,0,0,0,0,0,0,0,0,0,0
-,0,47174,11723,0,0,0,0,0,0,0,0,0,2536,55143,0,0,6410,0,0,0,0,0,0,0,0,56294,11914
-,0,529,0,30184,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8261,0,0,28808,58854,22633,
-965,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,64135,0,0,331,3684,0,1605,0,0,0,0,0,0,
-0,0,0,0,16650,37,0,23622,3144,15429,0,0,0,0,0,0,0,0,0,0,22443,69,0,0,0,0,0,0,0,0
-,17832,0,0,0,0,0,0,0,0,0,11113,0,0,0,0,18309,0,0,0,0,0,0,0,0,0,26630,0,0,25512,
-25895,0,0,0,0,0,0,0,0,0,0,0,16901,0,0,0,27558,0,0,9418,0,0,0,3508,0,0,0,0,0,0,0,
-0,37990,9289,8517,0,0,0,0,1578,1604,23944,0,0,14916,12781,0,0,0,0,0,0,0,12105,0,
-16617,0,0,0,0,0,0,0,0,0,0,0,0,21348,11240,28870,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,5772,0,0,27812,0,0,0,0,0,0,0,8324,0,0,0,0,0,0,0,0,0,0,16748,1157,0,0,18794,
-16324,25898,935,8333,0,0,0,0,0,0,0,0,18246,0,18086,0,46854,0,0,0,0,0,0,339,0,0,
-25188,12780,12166,6409,0,0,0,0,16516,0,27012,28395,0,0,0,0,0,0,0,1420,0,0,0,9768
-,52967,0,0,0,0,0,0,0,0,0,0,0,0,0,0,25163,324,0,0,0,0,0,0,0,0,0,64998,0,0,0,0,0,
-21893,0,0,0,0,0,47366,0,0,0,870,0,0,0,12646,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,26020,16360,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1809,0,0,0,6601,15878,0,0,0,0,0,
-29092,0,28516,0,0,0,0,0,0,0,0,0,21988,0,0,0,42950,0,0,0,0,0,0,0,0,0,0,5133,1318,
-0,0,0,0,0,0,0,0,0,0,0,54982,24904,0,0,0,0,0,0,0,0,0,0,51526,0,0,0,0,0,3685,0,0,0
-,0,10062,9412,0,0,0,31460,5708,6181,0,0,0,0,0,0,0,0,0,5575,0,0,0,0,0,0,0,0,0,0,
-27144,57478,0,0,0,0,0,0,7084,0,21993,53126,0,0,0,0,8397,0,0,5733,0,0,0,0,0,2116,
-0,24742,0,11271,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1133,0,4873,0,0,38310,0,0,0,0,0,
-0,0,0,0,0,0,0,17932,0,0,18053,0,0,0,25510,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,17798,0,
-26214,0,0,0,0,0,0,0,0,23016,17415,20392,164,0,0,0,0,0,0,0,0,0,0,0,3239,0,46119,0
-,0,0,28580,0,0,0,0,0,0,0,0,0,7621,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,41478,0,0,31016,
-55334,10056,1924,0,0,0,0,0,36614,0,36711,0,0,0,0,0,0,0,0,0,0,13994,59303,0,0,0,0
-,0,0,0,0,0,0,0,0,0,0,0,26501,0,5639,0,0,0,0,0,0,13897,1253,0,0,0,0,0,5095,0,0,0,
-28869,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8646,0,0,0,0,25641,17796,0,0,0,0,0,0,0,
-13316,620,6309,11819,0,0,0,0,0,0,0,0,0,904,1095,0,24229,0,0,28744,49703,0,23077,
-0,0,0,0,32392,0,0,0,0,35271,0,28740,5866,0,0,0,0,0,0,0,4361,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7917,8869,0,0,0,13924,0,0,0,0,
-0,41958,0,0,0,0,0,0,6766,13989,0,0,0,903,0,0,24010,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-,0,0,0,0,0,64390,0,22468,0,25861,0,0,0,0,23656,5317,0,0,0,0,0,0,23017,5445,16009
-,0,0,0,0,0,0,0,0,48006,10473,0,0,14404,0,0,0,42183,0,0,0,51270,0,0,10602,24132,0
-,0,0,0,0,43782,0,0,17834,0,0,0,25576,27205,0,0,0,0,0,0,0,0,29066,0,0,0,0,0,626,
-1988,14700,0,0,0,0,0,0,0,0,0,0,0,0,57670,0,0,0,0,0,0,0,0,0,44710,0,0,0,0,3848,
-7623,0,0,0,0,0,0,0,0,0,0,0,42374,0,0,0,0,0,0,0,0,19272,6436,0,0,5256,0,0,0,0,0,0
-,0,0,0,0,0,0,0,0,19685,0,0,0,0,0,0,0,0,0,0,0,0,0,39783,0,0,0,0,30984,0,0,0,0,0,0
-,28230,0,0,0,29028,10538,3205,0,0,0,0,0,0,0,0,0,0,0,5636,840,295,0,0,8488,8198,0
-,0,0,0,0,0,0,0,0,20580,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4074,19526,0,0,0,0,
-31144,64038,0,0,0,0,0,0,16716,0,0,0,0,0,0,0,0,0,0,0,17706,0,0,0,0,0,0,50630,0,
-50503,0,0,0,0,0,0,0,0,0,0,0,25446,0,0,0,13831,0,0,0,0,0,0,2696,4039,0,0,0,0,
-25288,0,12076,2054,0,48934,0,0,0,0,16969,59431,17259,35335,0,0,0,0,0,0,0,0,0,0,0
-,0,31275,0,0,0,1097,0,0,0,0,0,0,0,0,0,0,0,776,839,0,0,29386,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,5864,12134,0,0,0,0,0,0,0,25349,0,0,0,0,0,0,0,0,0,61447
-,0,0,0,0,0,0,0,0,0,24678,0,0,0,63335,0,28836,8142,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4494,0,0,0,0,0,14088,1188,0,16260,0,0,0,
-16421,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,276,0,0,17060,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,24076,29445,0,33543,0,4901,0
-,0,12522,0,0,62471,0,0,0,0,0,0,0,0,0,0,4046,0,0,0,0,20486,0,15460,2217,51719,0,0
-,0,0,0,23495,0,0,0,0,0,0,15370,0,15849,0,15113,0,0,0,0,0,0,0,0,27972,7337,0,0,0,
-0,30342,0,0,0,0,0,0,0,0,32299,23940,0,17766,0,0,0,0,0,0,6184,0,20904,0,0,0,0,0,0
-,0,0,0,0,31492,0,0,0,5509,0,0,0,0,0,0,0,0,2669,50182,0,0,12299,0,0,0,0,0,0,0,
-5257,28167,0,0,0,0,0,0,0,0,0,0,0,11750,3890,0,0,26500,0,0,0,0,0,0,0,49318,0,0,0,
-0,0,0,0,10981,0,0,0,0,0,0,0,0,17961,1831,0,0,0,0,0,0,0,29638,0,0,0,0,26473,0,
-6216,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,711,0,0,0,0,0,0,0,0,0,0,28683,39975
-,0,0,0,0,0,51654,0,0,0,27527,0,0,0,0,0,0,0,0,30859,3268,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,28772,0,18212,0,0,0,0,25448,65446,0,0,0,0,
-0,0,3337,1670,0,0,0,0,0,19332,0,0,0,0,24936,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1043,0
-,0,0,0,15814,0,21670,0,0,0,0,0,0,0,16263,0,0,0,0,0,0,0,0,0,32454,0,30630,0,0,
-20170,9926,0,0,0,18247,0,0,14376,0,2056,17191,0,0,0,0,0,0,0,7812,0,0,0,0,0,0,0,0
-,0,0,0,0,0,0,22474,52806,1588,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,10825,0,
-0,0,0,40934,0,0,0,0,0,0,0,28677,0,0,5714,0,0,0,0,0,0,0,0,0,0,0,0,0,25865,22246,0
-,0,0,0,17256,35751,0,0,0,0,0,0,0,0,8236,0,32108,0,0,0,43,14342,0,16517,0,0,30732
-,0,4012,133,0,40583,971,23942,0,0,27275,0,0,0,204,0,0,27140,7564,44327,27592,
-57958,0,0,0,0,22344,25701,0,0,0,0,0,0,0,19524,31755,0,0,28102,0,59111,0,0,0,0,0,
-0,0,12261,0,44934,0,0,0,0,31560,0,11114,0,0,0,0,0,0,0,0,0,0,0,18953,18311,0,
-45159,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2059,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-19399,0,0,0,0,0,0,0,0,0,0,0,0,0,58534,0,0,0,0,0,0,0,0,0,0,0,0,22411,23943,0,0,0,
-0,0,0,11690,0,0,4069,0,0,2668,6342,0,0,0,0,0,0,27658,1766,0,0,0,0,23240,56070,0,
-0,0,0,0,0,0,0,0,0,0,0,0,34119,0,24453,0,0,0,0,21867,0,17610,9894,0,0,27976,38790
-,0,0,0,43654,0,31559,12202,23142,0,0,0,50343,0,0,0,0,0,32806,0,0,0,0,0,0,0,0,0,0
-,0,0,0,0,0,0,0,0,0,49895,0,0,0,0,15786,4263,0,0,0,0,4746,3814,0,0,0,0,0,0,17192,
-453,17323,0,20328,4036,0,0,0,15844,0,0,0,0,27561,31940,32296,0,0,0,0,0,0,0,11499
-,11782,0,0,0,0,9738,50471,0,0,0,0,0,35430,0,0,0,0,0,29734,0,0,0,36551,0,0,0,0,
-9257,5606,0,13829,0,7015,0,0,0,0,0,25127,0,0,19051,0,0,0,0,0,0,0,0,0,0,0,0,0,
-2572,0,0,0,0,0,0,29797,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,42342,0,0,0,0,9293,
-0,17896,56038,4077,0,0,0,29899,37351,0,30823,0,8326,0,0,0,18342,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,18569,54054,0,0,0,0,0,0,0,0,0,37254,0,0,31433,
-61510,0,2022,0,0,0,0,0,25381,0,0,0,0,0,0,0,0,0,0,0,0,0,2149,25289,0,0,0,0,0,0,0,
-0,0,0,12516,14185,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8676,0,0,0,0,0
-,0,0,0,0,0,0,36486,0,0,0,0,10889,9607,0,28711,0,0,0,0,0,0,0,0,0,0,28490,0,0,0,0,
-26181,10283,1701,0,0,0,0,0,0,0,0,0,14980,0,7783,0,27846,0,0,0,56486,3892,0,0,0,
-5770,16583,0,26309,13422,20292,0,0,0,0,0,0,0,0,0,28742,0,0,0,0,14536,1158,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,25801,0,0,0,0,0,0,0,0,0,0,0,0,42438,0,3332,0,0
-,0,0,0,0,0,0,0,8327,0,0,0,0,0,0,0,0,0,0,0,0,17353,1447,0,0,8427,48518,1359,0,0,0
-,0,0,14986,0,32168,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9230,2791,0,0,0,0,0,0,0,0,
-16073,31623,4269,0,0,0,0,0,0,4519,0,0,27912,58950,0,0,0,0,0,0,0,0,8361,19812,0,0
-,0,0,6056,7877,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,21701,0,0,0,0,0,0,0,0,0,0,0
-,0,9128,1125,0,16548,0,0,0,0,0,0,0,0,0,0,17292,6854,21352,0,2380,0,0,4007,0,0,0,
-0,0,24357,4202,0,0,0,0,0,0,0,0,0,0,0,0,0,10664,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-,0,0,0,42823,3022,0,0,0,0,0,0,0,0,0,0,0,0,14373,0,20677,3304,2759,20522,64903,0,
-0,0,38,0,0,0,0,0,0,0,0,0,0,0,27814,2802,8870,3758,1255,0,0,0,0,0,0,0,0,30027,
-9510,0,0,0,0,17864,14855,0,0,0,0,0,0,0,0,0,0,23404,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-51462,0,0,0,0,0,0,0,45734,0,0,23467,32327,0,0,10826,52999,0,0,0,33222,31336,
-64326,0,0,0,0,0,0,0,32166,0,0,3891,0,0,0,7017,645,0,0,0,0,0,0,27915,46087,0,0,0,
-21863,0,34246,0,0,16715,0,0,0,0,14052,21416,0,0,0,0,0,0,0,0,39846,0,0,0,0,0,
-38982,0,0,17512,7460,0,0,0,0,0,0,0,0,0,15428,0,0,0,0,0,0,0,28356,0,0,0,0,0,0,0,0
-,0,0,0,0,0,0,0,0,0,0,0,25445,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11879,0,0,0,0,0,0
-,0,0,0,0,0,0,0,19911,0,20007,0,0,0,10855,943,0,0,10821,0,0,0,0,4170,0,0,0,0,0,0,
-0,0,0,9836,0,0,0,0,0,0,0,0,0,0,65415,0,0,0,0,0,0,0,0,9865,24646,0,0,0,0,0,40519,
-0,0,0,0,0,0,0,0,0,12804,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,22091,23655,0,0,0,0,0,0,
-0,31686,0,0,0,58599,0,0,0,0,0,0,0,0,0,0,0,0,0,19620,0,0,0,0,0,0,0,0,0,0,0,0,0,
-24421,0,28100,0,0,0,31268,0,3204,0,0,0,0,0,0,0,0,0,14822,0,0,0,0,19947,10182,0,0
-,9480,14821,4398,0,0,14532,0,0,0,48871,1873,0,0,0,0,0,0,0,589,1541,0,0,0,0,0,
-23333,0,0,0,14149,0,0,0,0,1296,14374,0,27300,0,0,0,0,0,0,7276,0,0,0,0,0,0,47718,
-0,0,0,0,0,0,0,0,0,0,5164,1765,0,14405,0,37574,1994,0,6636,0,0,0,0,0,0,0,0,27815,
-0,0,0,0,2568,6820,0,0,0,0,0,0,0,0,0,0,11336,26247,0,0,23912,0,0,0,30536,0,0,
-34342,0,17799,0,0,0,22149,0,6118,0,25732,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-,0,0,0,0,26600,5190,0,0,1142,0,0,0,0,0,0,0,0,39527,0,0,0,0,0,39494,0,0,0,0,0,0,0
-,0,0,0,3085,0,0,0,0,0,0,0,4786,0,0,0,28873,6532,0,0,26664,0,9193,11719,0,0,0,0,0
-,0,31752,64646,0,0,0,0,0,0,0,0,0,0,0,11397,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,25094,0
-,0,18153,20167,0,0,0,17254,0,0,878,0,0,0,0,0,0,0,0,0,0,24166,0,0,0,0,0,0,0,0,0,0
-,0,0,26059,0,0,0,0,0,0,0,0,0,0,0,0,0,31592,0,0,8167,24362,6212,0,34758,0,0,0,0,0
-,0,32520,0,0,44679,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,17989,8681,29222,0,0,0,
-0,0,0,0,0,10251,4902,1452,15207,0,0,0,0,0,0,0,22822,0,10469,0,0,0,0,0,0,19337,
-17670,107,11494,0,0,0,0,27305,2565,0,0,0,0,0,0,0,64518,200,28389,0,0,0,0,31208,0
-,30762,0,0,0,0,0,29321,60518,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3209,3237,
-12490,22663,0,0,0,18789,31464,16391,0,0,0,0,0,0,0,0,0,0,0,20646,0,0,0,27238,0,0,
-0,0,0,15940,4488,6951,0,0,0,46342,0,0,0,0,0,0,0,0,0,28965,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,20584,3367,0,25350,0,0,0,0,0,0,0,0,0,0,0,0,1814,0,0,0,0,0,0,0,0,0,0,17125,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,55943,0,0,0,0,0,24133,0,0,0,0,0,0,0,0,0,0,0,0,2929
-,0,0,50086,0,2918,25356,30052,115,11846,0,0,0,0,3056,0,0,0,0,17639,239,19815,0,0
-,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,36806,0,0,0,0,0,0,0,0,0,0,0,0,0,21479,0,0,0,0,0,
-28420,11786,4772,0,0,3368,36295,0,31463,0,0,14665,996,0,20582,0,0,0,9988,0,23685
-,0,0,0,52551,0,0,0,0,0,0,0,7556,0,0,0,0,0,0,0,1895,2186,0,0,0,0,0,27755,25447,0,
-0,0,0,31052,63270,0,0,0,0,0,0,0,36742,0,24804,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,31048,0,0,0,0,0,0,0,0,0,21290,2276,0,0,0,0,26475,0,0,0,0,0,0,0,0,0
-,0,15332,0,0,0,0,0,0,0,0,3176,19431,0,0,0,0,0,0,0,62726,0,0,0,25380,0,0,27883,
-1316,0,0,7724,3015,0,0,0,0,6697,0,0,47910,0,0,0,0,0,0,0,0,0,3141,0,0,0,14820,0,0
-,0,0,9326,0,0,0,0,0,0,0,0,0,0,31493,0,0,0,0,0,6566,0,0,0,0,0,0,6569,1348,0,25638
-,0,0,0,0,0,20324,0,0,17067,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11876,0,41030,0,0,0,26405
-,0,0,0,0,0,0,0,0,0,11431,28137,14950,0,10151,0,0,0,0,0,0,0,29574,0,0,0,0,27176,
-57446,0,0,0,0,28650,57574,1387,0,0,0,0,0,0,0,0,0,0,58247,0,0,0,0,0,0,0,16805,0,0
-,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3526,0,15781,0,5572,13352,0,0,0,0,0,18665
-,23463,0,0,0,0,0,0,15405,6885,0,0,0,0,15272,0,0,0,0,0,0,0,0,9861,0,0,0,0,0,0,0,0
-,9512,4037,0,0,11563,49639,0,0,0,0,0,0,27880,57830,0,0,0,0,0,41831,0,21924,0,0,0
-,0,0,0,0,25509,0,27462,0,18085,0,0,0,0,0,0,0,0,0,0,0,0,13898,8068,26441,0,0,0,0,
-0,0,25316,0,0,0,0,16298,7397,5706,19239,0,0,0,0,0,0,0,0,1392,50919,0,0,0,0,0,
-53863,0,0,0,0,1451,0,0,0,0,0,0,0,0,0,0,35847,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-,17801,15813,0,12740,0,0,0,32967,0,0,0,0,0,0,5389,0,0,0,0,0,0,0,0,0,0,31143,0,
-20548,0,0,0,0,0,0,0,0,0,51686,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-12109,19015,0,34983,0,21732,3600,0,0,0,0,47750,17288,43975,22857,47559,0,0,0,0,
-26408,48358,0,0,0,0,0,0,0,0,0,0,0,0,0,30470,0,0,23560,4581,0,22404,0,49286,0,0,0
-,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,49831,0,0,0,27525,31691,7,0,0,25835,0,0,0,0,0,
-4201,16485,0,20676,0,0,0,0,3753,23303,16264,3878,0,0,0,0,0,0,11434,0,0,0,0,0,0,
-7589,0,0,0,0,0,0,0,0,0,57095,0,0,0,0,0,0,0,0,0,0,0,22820,11146,49158,0,23623,0,0
-,0,0,0,0,0,13893,0,0,0,0,0,0,11722,60071,1258,0,0,0,0,0,0,18564,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,27945,0,0,0,0,5479,0,20006,17608,3431,10988,30180,0,0,0,0,0,0,0,
-24581,14,0,0,0,0,0,0,25572,0,0,0,28612,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,53543,0
-,0,0,0,0,0,0,0,0,0,0,33670,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8710,0,14116,0,0,116,
-292,0,0,0,37831,0,43078,0,0,0,0,0,0,0,0,21832,0,0,32134,783,0,0,30982,0,0,0,68,0
-,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5932,0,0,0,18505,
-15175,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3630,16965,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-,0,0,0,17797,0,0,0,0,0,0,520,42150,0,0,3122,0,0,0,22506,0,0,0,0,0,0,0,0,28550,0,
-0,0,50278,0,0,13641,5958,0,35238,0,0,0,0,0,0,0,0,29993,18724,0,0,0,0,0,0,0,0,0,0
-,0,0,0,0,0,0,20619,9319,0,0,0,0,23977,0,5193,0,0,12196,0,0,0,0,0,0,0,0,0,0,0,0,0
-,0,0,0,0,24390,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,20105,677,0,0,0,0
-,0,0,0,0,29419,0,0,0,0,0,0,0,0,0,20266,0,0,0,0,10631,0,0,0,0,0,0,0,0,0,47655,0,0
-,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,26628,12744,0,20648,0,0,0,432,0,0
-,0,0,0,0,0,0,0,0,646,0,25604,0,0,0,0,0,0,0,0,0,0,0,0,0,63782,0,0,0,0,24616,0,0,0
-,21291,0,0,0,0,0,0,0,0,0,0,45638,0,0,0,0,1931,0,0,0,20521,59975,0,20614,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,56231,0,0,0,0,0,29991,0,52871,0,20934,0,0,0,0,0,0,0,16871,
-0,0,0,0,0,0,0,0,0,0,0,0,0,7237,0,0,0,0,0,47558,0,0,0,0,0,0,0,0,0,0,0,10406,0,0,0
-,0,0,0,0,43046,0,0,2930,0,12936,0,0,0,0,0,0,0,0,0,0,0,0,31141,0,0,0,0,0,0,0,
-37639,0,17572,0,0,0,0,0,0,0,0,0,0,31240,0,0,0,0,0,688,0,0,0,0,0,1648,0,0,0,0,
-10055,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,146,0,0,0,0,0,0,0,0,0,6345,199,0,34982,0,0
-,0,0,0,0,0,0,0,0,0,0,0,56839,0,0,0,0,0,48902,0,13412,0,0,0,0,0,0,0,0,2441,4420,0
-,0,0,0,20428,933,0,0,0,0,0,0,0,45383,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-,0,0,0,0,0,54726,0,0,0,0,0,0,0,0,0,0,0,0,17036,741,0,0,0,0,0,0,0,27589,0,0,30282
-,18950,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2248,0,0,0,0,0,0,0,0,0,25993,0,0,0,
-2443,0,0,31622,0,14150,0,0,0,28679,0,0,0,0,0,0,15464,0,0,0,0,54694,0,0,0,0,0,0,
-3827,0,0,0,3756,0,9897,0,0,0,0,0,19082,31239,0,0,0,0,0,0,0,0,0,0,0,24580,0,0,0,0
-,0,0,0,0,0,16580,0,0,0,0,0,0,0,0,0,0,0,0,0,0,27625,0,0,0,784,4647,32652,0,0,
-63494,0,0,0,0,0,0,0,21062,0,0,0,0,0,0,0,0,0,0,3404,58470,0,32325,0,0,0,0,0,0,0,0
-,0,0,0,0,0,0,0,0,18634,2789,0,0,0,0,0,0,0,8548,0,0,0,22501,0,0,0,0,0,0,0,0,0,0,0
-,0,0,0,15881,0,0,0,0,35879,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7978,17956,0,0,0,
-0,0,0,0,24324,0,0,4937,0,0,0,8168,0,13420,10340,0,0,0,0,0,11780,0,0,0,0,0,0,0,0,
-0,0,16712,0,0,0,0,0,0,0,17640,17991,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,2953,0,0,0,0,0,0,0,9100,16806,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,30667,0,0,
-19013,0,0,0,0,0,0,205,15334,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1969,0,0,0,0,0,0,0,26248
-,52518,0,49798,0,0,0,0,0,0,0,9668,0,0,0,0,0,4742,0,0,21641,0,0,0,0,0,0,53574,0,0
-,0,0,0,0,5707,0,0,0,0,0,0,0,3018,12454,0,0,0,0,2920,262,0,0,0,0,0,0,0,0,0,0,3593
-,0,0,0,0,0,0,0,0,0,0,23910,0,0,0,0,0,0,0,55879,0,0,0,0,0,775,0,43270,5066,48967,
-0,0,22986,4165,8971,44838,0,0,0,0,0,62279,272,0,0,0,0,51430,0,0,0,0,0,0,28234,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,13349,0,0,0,51111,20265,13861,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,585,7494,0,0,0,0,0,0,0,0,21768,62407,0,0,0,0,7979,166,0,
-0,0,0,0,0,0,0,0,38918,0,56742,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16296,5767,0,0,0,0,0,0
-,0,32068,0,0,0,0,0,0,0,0,0,0,0,0,0,29796,0,0,0,0,0,0,0,0,23916,30183,0,58791,0,0
-,0,0,0,0,0,20518,0,0,0,0,8969,0,0,0,183,0,0,0,0,0,2314,17445,0,0,0,0,0,0,0,0,0,
-23748,0,0,8139,4839,27914,0,0,0,0,0,0,0,0,0,0,0,0,29478,0,0,16552,26663,0,53767,
-0,0,13960,8039,18696,0,0,0,0,0,0,0,0,0,0,0,782,16005,0,0,0,0,0,0,0,0,6258,56806,
-16456,12455,0,0,0,0,0,0,0,23780,0,0,0,0,0,0,9355,0,0,0,7273,41063,24780,57766,0,
-0,0,0,0,0,0,0,0,0,3820,2597,0,0,0,0,0,0,0,0,0,0,0,0,0,0,29225,61126,0,0,0,58439,
-15691,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,37190,22408,967,0,0,0,
-23078,26858,0,0,0,19753,0,0,0,0,0,0,0,0,0,5416,13702,0,0,0,0,0,52742,20394,38567
-,0,0,0,51079,0,0,136,8516,0,0,0,0,0,0,0,0,0,0,0,27588,0,0,0,0,0,0,0,0,0,0,531,0,
-0,0,0,0,0,0,0,0,8936,5031,12520,19334,0,0,22827,30247,28074,31140,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,27497,18148,20104,59079,0,0,0,0,0,0,0,0,0,24389,0,0,6125,0,0,0,0,
-9541,0,0,24553,29095,0,0,0,0,0,0,0,25444,0,0,9643,0,0,63047,0,0,0,0,0,0,0,0,0,
-39558,0,0,0,0,0,0,20620,11815,499,0,5128,2278,0,0,0,0,0,46310,0,0,0,0,0,0,0,0,
-23530,40166,2440,0,0,0,0,0,0,0,0,0,0,15174,0,0,0,0,0,0,0,0,0,0,26922,0,0,0,0,0,0
-,0,0,0,0,26758,0,0,0,0,0,51911,0,0,23532,0,0,0,0,51238,25737,44486,12622,0,0,0,0
-,0,0,3078,0,9253,0,0,1128,22023,0,0,0,21350,0,16420,0,0,0,0,0,0,0,65094,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,22532,0,48774,0,34503,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,9797,0,0,0,0,0,0,0,13797,0,38279,0,0,1738,0,489,46343,0,45382,0,0,0,0,0,0,
-0,0,0,29030,0,0,0,0,0,0,6220,56550,0,0,0,0,0,26885,0,28806,0,0,0,0,0,0,0,0,0,0,0
-,45958,0,0,0,0,20553,49927,0,0,0,0,0,0,3019,12358,0,0,0,0,0,0,0,0,0,0,26571,
-13319,0,0,653,23399,0,0,0,0,0,0,0,0,22316,0,0,21188,0,0,0,0,0,0,0,0,0,27556,0,0,
-0,0,0,0,0,27878,21483,27653,0,29701,237,0,10632,0,0,0,0,33766,0,0,0,0,0,0,31563,
-0,0,0,0,0,1416,2439,0,0,0,0,0,0,0,0,0,0,9611,0,0,0,0,0,0,0,5611,16581,26601,
-35462,0,0,0,26756,0,59271,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,26984,57734,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,7882,0,0,0,19528,6469,0,0,1161,0,0,0,7688,20935,425,0,
-0,0,0,0,0,0,0,12519,0,12902,0,0,0,0,0,0,0,0,0,0,2411,0,11725,26086,0,0,20201,0,0
-,0,0,0,0,0,0,11045,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,30471,0,0,0,0,0,0,0,0,0,0,0,
-21541,1141,21190,0,9188,0,0,0,0,0,0,0,0,0,0,0,0,0,0,184,1093,0,0,0,0,0,0,0,0,
-4842,0,13672,0,0,12230,0,0,0,10532,0,0,8937,0,0,0,0,0,0,0,0,0,0,28996,0,0,11720,
-26982,0,46182,0,43911,31754,0,1160,3940,0,20772,0,0,0,0,0,24549,0,32582,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,31845,0,0,0,0,0,0,0,2310,11788,0,0,43047,0,0,0,18853,0
-,0,0,0,0,0,0,0,0,63622,0,0,7048,17318,0,0,0,21957,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,1039,6279,0,0,0,0,0,0,0,0,0,0,0,0,0,12197,0,0,0,0,0,0,0,0,0,
-46470,0,0,24,19719,0,0,0,0,0,0,0,0,0,39335,0,0,0,0,0,0,0,0,0,0,21353,3846,0,0,0,
-0,0,0,0,36679,0,0,0,0,0,0,0,0,0,0,0,11268,0,0,0,0,0,9382,0,0,0,0,0,0,0,0,0,0,0,0
-,0,29926,0,33606,0,4708,2828,0,0,29543,0,0,0,0,0,29893,0,0,0,0,0,0,0,0,3663,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,10920,7111,0,0,0,0,0,0,0,0,0,0
-,9384,0,0,0,0,0,0,0,0,0,0,0,0,20388,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,37094,0,0,0,
-27110,0,0,0,0,0,0,21865,0,27753,30214,0,0,0,0,0,57895,0,0,0,0,0,0,0,0,0,0,12648,
-5446,0,0,0,0,0,0,0,0,0,0,19784,17124,0,52007,0,0,0,0,0,0,0,0,758,0,0,0,0,0,0,0,0
-,0,0,0,0,0,0,0,0,0,0,24900,0,0,0,0,0,1476,0,65031,0,0,1205,46663,0,30023,11625,
-1094,0,0,0,0,0,0,0,0,0,0,0,0,0,0,10058,0,0,0,0,0,0,28455,0,0,0,0,0,0,0,0,0,0,0,
-14788,0,0,0,0,16808,0,0,742,0,0,0,0,0,0,0,0,0,0,0,21636,0,0,0,0,0,0,0,0,0,0,0,0,
-15944,23207,0,0,0,0,247,0,0,0,0,24743,0,0,0,5252,0,0,0,0,0,0,0,0,29961,18660,
-21099,46791,0,7045,0,0,0,0,25707,0,0,17412,3828,0,0,0,0,0,0,0,0,0,0,0,5803,5637,
-0,38151,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,60103,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,853,0,0,0,0,0,0,30215,0,0,0,0,0,0,0,8741,0,0,0,0,0,27366,0,0,0,0,171,
-4070,0,0,0,0,0,0,0,0,24073,7366,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2184,5189,0,
-20932,1545,4996,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7684,0,0,0,0,0
-,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6313,0,0,0,0,0,0,0,30826,0,0,0,0,0,0,
-0,0,0,0,27463,0,0,0,0,0,0,0,0,0,0,21640,63303,0,0,3275,31111,0,0,0,0,0,0,0,11556
-,0,14756,0,0,0,15108,0,0,0,0,0,0,0,0,0,0,0,0,0,0,23914,28966,0,0,0,4965,0,0,0,0,
-0,0,0,0,0,0,10216,5223,0,0,0,0,0,0,0,0,0,27142,0,0,1173,20198,0,0,0,0,0,56614,0,
-0,0,0,0,4612,0,0,0,0,0,0,0,0,0,0,11822,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,17769,7910,
-0,0,31880,0,0,6055,0,0,0,0,0,0,0,0,0,0,8970,0,0,0,0,0,0,0,0,0,0,0,16840,23879,0,
-0,11051,0,0,0,32552,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,20842,13701,0,0,0,37191,7373,
-10471,17482,25348,0,0,0,38502,0,0,0,0,0,0,0,0,0,21509,6058,0,0,0,0,0,0,3173,0,0,
-0,9543,0,0,0,0,0,0,17768,12708,0,0,0,0,0,37030,0,0,0,0,0,0,0,0,0,0,12748,48743,0
-,11718,0,0,25194,0,0,0,9033,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5028,0,30118,0,0,0,0,0,
-42759,0,0,3720,0,0,0,0,0,0,25190,0,0,0,0,0,0,0,0,0,0,5450,5125,0,58086,0,0,0,0,0
-,27716,0,0,0,0,0,0,0,0,0,22052,0,0,0,0,26249,0,15947,3460,0,0,0,35814,0,0,0,7813
-,19500,32167,0,18597,0,0,0,0,0,28644,0,0,0,60743,0,0,0,0,0,29636,0,0,0,0,0,0,0,0
-,0,0,0,0,0,17220,15885,9414,9642,0,0,0,593,0,0,24228,0,0,0,0,0,40422,0,26244,0,
-23109,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,64902,0,0,0,0,3979,60007,0,0,0,28199
-,0,0,0,43142,0,0,0,0,0,0,0,29158,0,30532,0,0,0,0,13256,0,0,0,0,16549,0,0,0,0,0,
-26116,0,0,0,0,0,0,0,0,22825,0,0,0,0,0,0,0,1065,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-,0,0,0,0,18985,4805,0,0,0,0,0,17702,0,0,0,0,0,0,0,0,0,0,3468,0,0,0,0,13447,0,0,0
-,0,0,0,0,0,0,0,0,56871,0,0,1776,15780,0,0,2603,0,10280,31366,0,0,0,0,0,0,0,0,0,0
-,0,0,0,0,11592,3591,0,2372,0,0,0,0,0,0,0,20004,0,0,0,0,0,0,12072,518,0,0,1960,
-8999,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7178,32999,0,0,0,0,0,0,1641,0,0,0,0,0,0,0,6764,
-9893,490,4005,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,25258,5541,0,14053,306,20743,0,0,
-9422,0,0,0,0,0,0,0,11977,260,0,35175,0,0,0,0,0,0,0,18405,0,0,0,16582,0,0,0,22470
-,0,0,0,0,0,0,2792,0,0,0,14026,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14858,3909,0,0,0
-,57671,0,0,0,0,0,0,15979,0,0,0,2794,15239,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,26884,
-9070,0,0,0,0,51846,0,0,0,0,0,0,0,0,0,0,0,0,0,0,19499,37127,0,0,0,0,0,0,0,0,0,0,0
-,0,0,0,0,0,0,0,0,0,0,0,0,19205,10350,11910,0,0,0,0,15083,23108,0,0,0,0,0,0,0,0,0
-,0,0,0,0,0,0,0,169,0,0,0,0,0,0,0,0,0,0,0,15274,41735,0,56774,0,0,2825,0,14025,
-389,0,0,0,0,0,0,0,0,21482,31910,0,0,0,0,0,0,0,0,0,0,0,0,0,0,20456,710,0,0,25032,
-21797,0,0,0,0,0,0,0,0,0,0,32427,21252,0,30150,0,43174,0,0,0,0,0,0,0,0,0,0,0,0,
-11403,0,0,1029,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6892,9252,0,63206,
-3496,14406,0,0,0,0,0,0,0,0,0,0,22568,0,0,21253,0,0,0,0,0,0,0,39623,0,0,10189,0,0
-,0,0,0,0,0,0,0,0,0,0,0,30729,59910,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3305,0,0,0,0,0,0,
-0,0,0,7660,24871,0,838,0,0,0,0,0,0,0,0,0,0,0,0,12013,13252,0,551,0,0,0,43207,0,
-30567,0,0,0,0,0,0,0,0,28394,30724,0,0,0,0,0,0,0,0,0,0,22665,22725,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,29414,0,0,0,0,16074,8966,245,1445,0,0,0,0,24872,0,0,0,0,
-13124,0,35527,0,0,0,0,0,0,13259,10917,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-25191,0,0,0,13956,0,0,0,0,0,0,0,54631,19625,12070,3083,0,0,0,0,14436,0,0,0,0,0,0
-,0,0,0,0,0,0,0,21766,0,15463,29322,0,0,0,0,0,0,29990,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-,0,0,0,23653,0,0,0,0,0,0,0,0,2643,0,0,21223,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,4114,0,0,0,0,0,0,0,0,34790,0,0,0,0,0,0,0,16103,0,0,0,0,0,0,297,3620,3338,
-10372,0,14727,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,29924,22473,13895,
-15529,32455,30378,13540,0,28807,0,0,0,0,0,0,0,64582,18380,0,0,0,0,0,0,0,0,0,0,0,
-0,38598,0,0,0,0,0,0,0,0,1236,0,0,0,0,0,0,0,0,0,0,0,0,0,0,32710,0,0,0,0,4590,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,64935,0,0,0,0,0,0,0,0,0,0,0,0,16744,0,0,
-0,0,0,0,20005,0,0,13608,1191,0,0,0,62183,0,0,0,0,0,24484,0,0,0,0,0,0,0,0,0,0,
-17643,0,0,0,0,0,0,0,0,0,0,0,0,5380,0,0,32328,0,0,63814,0,0,0,2919,0,0,0,0,17034,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,60295,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,7690,486,0,0,0,39270,0,49094,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12555,0,0,0,0,0,0,0,0
-,0,0,0,0,20967,17993,12647,0,0,0,16036,32616,0,0,0,0,16294,8555,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,35174,0,0,0,0,0,0,30346,0,0,0,0,0,0,0,
-14797,3652,0,0,8268,12934,0,54950,0,0,0,0,2632,33959,0,23175,0,0,0,0,0,36262,0,0
-,0,0,0,0,32684,26918,0,32676,0,0,0,0,0,0,0,0,0,0,15625,11943,1206,0,0,0,0,18052,
-0,0,0,0,0,16422,0,0,0,26404,0,0,28777,0,0,24902,0,0,408,45351,0,35719,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,3658,17446,0,165,0,0,0,0,0,0,0,6151,0,0,24424,0,0,0,0,0,0,0,
-24170,24293,0,0,0,0,0,0,0,0,0,11847,0,39591,0,0,0,0,0,0,9549,2788,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1010,0,0,0,0,0,0,26055,31724,0,24233,
-1828,0,0,0,0,0,0,0,0,0,17284,0,0,0,0,19464,0,0,0,0,0,0,0,0,32452,0,0,0,28871,0,0
-,0,0,17704,53383,0,0,0,0,0,0,0,0,0,17892,1938,0,0,0,0,0,16362,0,0,21605,0,0,5003
-,0,0,0,0,0,0,22693,0,22342,0,0,0,55846,0,0,0,0,0,0,0,0,0,22853,0,0,0,0,0,0,0,0,
-6600,263,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,24836,0,0,0,0,0,0,0,0,0,
-40711,0,0,0,0,0,33894,0,0,0,0,0,0,13000,0,0,0,0,0,0,0,0,0,0,30308,0,0,0,0,0,0,
-5386,0,0,0,0,0,0,27844,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,17740,0,0,0,0
-,25093,29064,0,0,0,0,0,0,0,12680,11462,0,0,0,0,0,0,0,0,84,7303,0,0,0,0,0,0,0,0,0
-,0,0,27044,457,0,22924,58246,19016,0,2606,45703,0,5157,0,25028,0,0,0,0,0,0,0,0,0
-,0,0,0,0,0,0,0,0,0,0,0,2065,0,0,0,0,0,31946,0,0,0,0,0,0,0,0,0,0,0,0,33382,0,
-47878,0,0,0,0,0,0,0,0,25004,0,0,0,0,0,0,0,26153,35654,0,58055,30668,0,0,0,0,
-25988,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4456,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-,0,0,7560,20583,0,0,0,0,0,0,0,0,0,37510,0,0,0,0,0,0,0,0,0,42822,0,0,0,0,0,0,0,0,
-0,0,0,1733,0,0,0,8196,0,0,11241,0,30572,60326,0,15013,0,0,0,40646,0,23812,0,
-10022,0,0,0,0,0,0,0,0,12874,31015,0,0,0,0,0,0,1608,0,0,0,0,18308,0,0,0,0,27114,0
-,0,0,0,0,0,0,7944,1382,0,11813,0,0,0,0,0,0,0,0,0,0,0,0,0,24517,0,11621,0,0,0,0,0
-,0,0,0,0,0,0,21702,0,0,13100,8262,2644,7973,0,0,0,0,0,0,0,0,0,0,0,0,1033,12581,0
-,25221,0,0,0,40998,16301,62983,0,0,0,0,1263,9318,0,0,0,18854,0,0,1741,33895,0,0,
-0,0,0,0,26377,0,0,0,0,0,0,0,0,0,0,32165,0,51143,0,0,0,0,0,29412,0,0,0,0,0,0,0,0,
-1674,4230,0,0,0,0,0,10502,0,0,0,0,5545,0,0,0,0,0,2099,45158,0,0,0,0,0,0,0,0,0,0,
-14157,0,26955,0,0,0,0,0,0,0,0,0,17096,0,0,0,0,0,0,0,0,0,0,0,0,0,27050,6726,0,0,0
-,0,0,0,0,0,28554,0,0,7142,0,0,0,0,16936,0,0,0,25833,0,4399,6980,0,46214,0,0,0,0,
-0,10630,21164,0,0,0,0,0,0,0,2446,48551,0,0,0,0,0,0,0,0,0,0,0,13381,0,0,0,0,0,0,0
-,0,15400,12135,0,0,0,0,0,4774,586,0,0,0,0,0,0,0,0,23751,9736,4548,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,25577,29607,6250,1637,0,0,0,0,
-22024,0,0,0,0,22308,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,37414,24044,0,0,0,14474,29735,
-0,7077,0,45990,0,0,0,0,30568,40039,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-6150,0,4228,0,0,0,0,0,27687,0,0,0,0,0,0,0,24548,21513,1350,0,0,0,33607,0,0,0,0,0
-,0,0,0,11784,1414,0,0,0,0,0,0,0,18244,940,0,0,0,0,0,0,7270,0,0,0,0,0,0,0,0,0,0,0
-,0,0,0,0,16709,0,0,0,0,0,0,0,48935,0,0,0,0,0,0,23660,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-,53350,0,0,0,0,0,0,4236,16358,0,4422,6665,32644,0,0,744,18084,0,11014,0,0,0,0,0,
-29508,0,0,0,0,0,0,0,7686,0,0,13289,5478,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,12872,0,0,24134,1005,22916,0,31429,23400,0,0,0,0,0,0,0,28424,0,0,0,
-25706,27109,0,0,26345,0,0,0,0,0,0,25126,0,0,88,0,0,0,0,0,0,0,17032,0,0,21799,0,0
-,10060,0,12296,21892,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,20777,14311,0,58182,
-32232,0,10282,0,2121,11527,0,0,0,12325,0,0,0,0,0,0,0,28804,2344,8133,0,0,0,0,
-21864,62695,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2771,0,0,
-23204,0,0,0,0,0,6278,0,0,0,0,0,26597,0,0,0,0,23144,0,0,0,0,0,31816,20070,0,0,0,0
-,0,0,0,0,0,0,24456,2118,0,0,0,0,6570,1156,0,0,0,0,0,0,0,30406,0,0,0,28388,3572,0
-,0,26599,12426,5286,0,0,0,0,0,4967,0,0,0,0,0,0,0,0,0,0,0,0,0,0,24970,24167,0,0,0
-,0,28745,4678,0,0,0,0,0,0,0,1444,236,0,0,0,0,0,0,0,0,19428,0,0,0,0,0,0,2092,0,0,
-0,0,0,0,0,0,0,2827,0,0,0,0,0,19881,19204,0,11749,0,0,0,0,0,0,0,17958,0,17894,0,
-18726,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9190,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-,0,0,0,0,0,0,0,21510,5033,0,0,0,0,22855,0,0,0,0,0,14598,0,29605,0,0,0,0,0,0,0,0,
-617,0,0,0,0,47142,0,0,0,0,0,0,0,0,0,0,3627,0,0,0,0,0,0,0,0,0,0,0,0,0,2225,14823,
-0,0,2637,6182,78,15078,0,0,0,0,20264,0,0,0,0,0,0,36743,4140,44551,17352,25703,0,
-0,0,0,0,0,0,0,0,0,0,0,14024,0,0,0,0,0,0,28004,0,0,0,0,0,7588,0,0,0,0,0,0,0,2087,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,18028,0,0,0,300,14212,0,0,1386,40327,0,0,0,0
-,0,0,31082,0,0,22374,0,0,0,0,0,35718,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-26532,7756,0,0,18982,0,0,0,0,0,0,0,0,6440,1159,7180,0,0,0,0,0,0,45766,0,57798,0,
-16740,0,0,6802,60454,0,0,0,26470,0,0,0,0,0,65382,4362,7750,0,0,0,0,0,0,9096,4743
-,334,0,0,0,0,0,0,39974,0,0,0,25828,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3027,0,0,
-0,15816,0,0,0,0,0,0,0,0,48327,0,0,0,0,0,0,0,0,0,0,16168,41799,0,0,24458,8581,0,0
-,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12292,0,0,0,0,0,0,0,0,0,0
-,0,0,0,0,0,0,0,54503,0,0,0,0,5097,30852,18664,0,0,0,0,0,0,16484,0,0,27337,0,0,0,
-0,0,0,0,0,0,0,0,0,35942,0,0,0,0,0,0,0,4356,0,0,0,0,0,57030,0,0,1417,41191,0,0,0,
-0,0,23429,0,0,0,0,10024,21735,0,0,10126,0,0,0,0,19046,0,0,0,0,0,0,24105,4710,0,0
-,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4394,0,0,0,0,13253,0,56391,0,0,0,0,0,0,0,0,0,0,
-0,19174,0,0,0,0,0,0,0,0,0,55974,0,0,0,52070,0,15620,0,0,0,0,0,2660,0,0,0,0,21644
-,0,0,52455,0,0,0,0,0,0,0,0,0,8902,0,0,0,0,0,0,3116,0,464,34726,0,0,0,0,0,0,25003
-,12423,0,27172,1896,7335,0,0,0,0,0,35686,0,0,0,0,3472,0,0,0,0,22406,0,0,0,0,0,0,
-0,0,0,45254,0,0,0,0,0,0,0,0,0,0,0,0,0,21124,23594,33127,0,0,0,0,0,0,16684,22087,
-0,0,0,0,0,0,0,0,0,0,0,0,8714,0,0,0,0,0,0,0,0,0,0,55814,0,0,0,0,0,0,4109,23460,0,
-0,8874,0,0,0,0,0,0,0,0,0,147,0,0,0,0,0,0,0,0,0,0,0,0,0,29960,63398,1302,0,0,0,0,
-0,0,0,0,24806,0,0,0,0,0,0,0,0,0,9799,0,0,0,0,0,0,0,31333,0,0,0,0,0,19557,0,0,0,0
-,0,5701,0,0,0,63014,0,0,0,0,0,0,0,21254,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12484,0,0,
-0,48326,0,0,0,0,0,0,0,0,0,0,0,15783,0,0,1202,0,0,0,0,23174,0,0,0,0,0,0,0,0,0,0,0
-,0,0,0,0,0,0,0,0,0,0,0,3086,49191,0,0,5387,15141,0,0,0,3365,0,0,0,0,20076,14021,
-0,0,0,0,0,0,0,0,0,0,376,40198,0,0,0,52039,0,24932,0,0,0,0,808,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,9860,0,0,0,0,0,23719,0,21476,0,0,0,0,20776,4807,0,0,3177,16678,0,0,110
-,10853,0,0,0,17382,0,0,0,0,0,0,0,0,0,43462,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-,0,0,0,7500,4966,0,0,0,0,0,0,0,52102,0,24516,0,0,0,0,0,0,0,0,0,0,0,0,0,26535,0,0
-,0,46247,0,0,0,15557,0,0,0,0,76,52327,0,0,0,0,17866,0,0,0,0,0,0,0,0,0,0,46758,0,
-0,0,0,0,19173,0,0,0,0,0,0,0,0,0,44038,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2985,0
-,0,0,0,0,0,14310,0,0,2125,45831,0,0,0,0,0,0,9838,0,13227,19492,0,0,0,29764,0,0,0
-,0,686,30053,0,0,0,0,0,30789,139,20837,0,0,0,0,502,18533,0,0,0,0,0,19111,0,0,0,0
-,0,31396,0,0,0,17444,0,0,0,0,0,0,0,49862,0,0,0,0,0,0,0,0,0,0,0,0,0,0,25610,550,0
-,0,561,0,29034,0,0,0,3528,0,0,0,1715,14661,18,63463,0,0,0,0,0,0,0,0,0,0,14186,0,
-0,0,0,0,0,0,0,0,0,0,29578,59014,0,39430,0,0,0,0,2250,16612,0,31780,0,0,0,0,0,0,
-462,16967,0,29029,0,0,0,0,0,23462,0,0,0,0,0,0,0,0,1768,0,6025,16998,1804,0,0,
-54182,0,0,0,0,0,0,0,0,14124,0,6154,29702,0,0,0,0,0,7716,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,48807,0,8292,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16389,5933,0,
-14857,51303,0,0,0,0,0,0,0,0,0,0,0,35623,9097,23047,0,0,23112,0,0,0,0,0,438,0,0,0
-,0,0,0,0,151,9254,1390,0,0,0,0,0,0,54215,0,0,0,0,6187,0,0,0,0,13095,0,0,0,0,0,0,
-0,0,0,0,0,0,9866,0,0,59622,0,0,0,0,0,0,0,0,0,25286,0,0,23848,32069,0,0,0,0,0,0,0
-,0,0,9255,2187,15270,437,0,0,0,0,0,0,0,0,0,0,19493,0,0,0,0,0,0,0,0,0,0,0,11748,0
-,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16902,0,0,0,0,0,0,0,0,0,22212,1865,17543,0,
-0,0,0,0,0,21996,0,0,0,0,55975,0,0,0,0,0,0,0,0,32138,21156,0,0,0,0,0,0,14249,0,0,
-0,2388,0,0,0,0,6823,0,0,0,0,0,0,0,0,0,0,0,0,0,26694,0,0,6059,53511,0,0,0,0,0,0,0
-,49542,6159,0,0,0,0,0,0,0,0,0,0,0,0,0,1036,24036,0,2501,0,0,0,0,0,0,17419,51271,
-3377,15142,0,0,0,0,0,0,5007,62374,0,56935,0,0,0,0,0,0,0,0,0,0,0,24422,0,0,0,0,0,
-0,0,0,942,0,0,0,0,0,0,0,0,0,0,28263,0,0,0,0,0,0,0,15622,0,19749,0,0,1611,0,22219
-,48583,25129,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,17476,0,0,0,0,0,0,0,0,0,0,
-721,0,0,0,0,32518,0,0,0,18469,0,0,0,0,0,0,5896,29927,3657,23046,0,0,3214,0,0,0,0
-,0,0,0,0,0,112,0,0,0,0,0,3048,455,0,31012,0,0,0,0,0,0,0,23270,0,32677,0,0,0,0,0,
-38086,0,0,0,0,0,0,0,0,0,0,0,0,0,4900,0,0,0,0,0,0,0,0,0,25541,0,18788,0,0,22248,
-1351,0,61734,4524,30629,0,14887,242,29063,0,0,14408,4741,0,0,0,37318,0,0,0,0,0,0
-,0,0,0,0,0,0,8106,0,32107,0,0,0,0,0,0,0,0,0,0,0,1481,0,0,28132,0,25798,0,59783,0
-,0,0,0,0,59078,0,0,0,23366,0,0,0,0,0,0,0,30887,0,0,0,0,16200,0,0,0,335,0,0,0,714
-,0,0,0,0,0,0,0,0,0,0,0,0,0,30730,9478,0,0,0,0,0,0,0,0,0,0,0,18790,0,0,0,0,663,0,
-0,0,1034,31431,0,0,0,0,0,0,0,0,0,0,30120,0,0,0,0,13925,0,0,0,0,0,0,2280,13414,0,
-0,0,0,0,0,22028,23687,3017,11047,0,0,21738,18630,0,0,0,0,0,0,0,30246,0,0,0,0,0,0
-,0,0,0,0,0,0,17257,0,21896,63783,0,0,0,21094,0,18662,0,25700,0,22533,0,0,0,0,0,
-6341,5800,11111,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15399,
-12970,6501,0,0,3179,26438,0,0,0,0,0,0,0,15750,0,13062,0,0,0,0,0,0,0,0,0,0,142,0,
-0,0,0,21284,11177,4391,0,0,0,0,19595,40647,0,0,0,0,0,11877,0,0,0,26439,0,0,0,0,
-695,49126,27467,11972,0,0,0,0,0,0,9961,0,0,0,31722,62982,0,0,0,0,15817,52710,0,0
-,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,24614,0,0,0,0,0,20550,0,0,5034,3942,0,0,0,
-45927,0,0,0,0,0,0,0,0,0,0,2548,0,0,0,0,0,0,45606,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-,0,0,0,0,0,0,3405,12582,15563,54087,0,0,0,0,0,0,0,0,0,0,0,0,24202,5893,0,0,0,
-44230,0,0,0,5605,0,47782,0,32230,0,0,0,0,0,0,0,0,0,0,0,7014,0,0,0,0,16488,3175,0
-,27237,0,0,0,0,0,40902,0,0,0,0,0,0,0,32004,31434,0,24392,0,0,0,0,0,0,0,0,0,0,0,0
-,0,0,0,0,0,29130,58214,0,0,0,0,0,0,29002,0,0,0,0,0,0,0,0,0,0,55366,0,0,0,0,0,0,0
-,0,0,0,0,37926,0,0,0,0,0,0,0,0,1290,0,0,0,4713,0,0,0,0,0,0,0,0,0,0,0,0,0,20812,0
-,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1803,966,0,17700,0,0,654,19109,0,51655,0,0,0,0,0,
-10470,1584,0,0,0,0,0,0,0,2506,0,0,25159,4303,0,0,0,395,15879,0,0,0,0,0,0,0,0,0,0
-,1352,6535,0,19652,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4722,7909,0,0,0,0
-,30152,0,0,64742,0,0,0,0,0,0,2153,9125,0,0,279,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-,0,0,0,41894,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-,0,0,0,0,1328,17030,0,0,0,0,0,0,0,54151,0,0,0,0,1775,54535,0,0,0,0,31624,0,0,0,
-7150,0,0,0,0,0,0,0,1840,35943,0,0,0,0,0,56455,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-64486,0,0,0,51174,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4134
-,0,0,0,0,0,0,0,0,0,0,0,17092,0,0,0,0,0,0,0,0,0,0,0,0,12,16134,19883,39943,10281,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,44711,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-14125,2407,0,0,0,0,0,0,0,0,0,0,26921,0,0,0,0,0,22188,0,20810,10053,0,0,0,0,0,0,0
-,0,0,0,0,0,0,0,0,0,0,0,0,0,0,29220,0,0,0,0,0,0,0,0,0,0,0,0,0,0,28170,0,15208,0,0
-,32517,5736,19271,3562,10534,0,0,0,59655,0,0,0,0,27084,60422,0,0,24969,0,0,0,
-2636,0,0,0,0,26277,0,0,0,0,0,0,0,0,0,0,0,30596,3594,0,0,0,8362,14565,0,0,0,0,0,0
-,10793,12326,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5906,59686,0,0,23081,517,0,15556,0,0,0,
-8486,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,19877
-,0,0,0,0,0,0,0,0,7497,0,0,26085,0,0,23784,63591,6568,6310,0,0,0,0,0,0,0,0,0,
-10054,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7018,14470,18858,0,5641,10660,0,0,0,0,0,0,0,
-35526,1515,0,0,0,0,0,0,0,0,0,0,0,27656,0,0,9606,0,39590,0,0,0,0,0,0,0,0,0,0,0,
-53926,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,232,4327,12649,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-,0,0,0,0,0,0,0,0,0,0,0,0,20199,0,0,0,0,0,0,26730,0,0,0,19400,14695,0,31334,0,0,0
-,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,19589,0,0,0,0,0,0,0,0,5064,11908,0,27333,0,
-0,0,0,0,0,0,47751,0,0,0,26662,0,0,0,0,0,0,0,55655,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,6245,0,0,0,0,0,0,0,0,23368,63911,0,0,0,0,0,0,0,0,1974,0,0,0,0,0,0,0,
-8520,24037,0,0,0,0,0,0,0,26279,0,0,0,22886,0,0,0,27782,0,30694,0,0,0,0,0,0,0,0,0
-,0,0,33703,0,0,0,30405,0,34598,0,51047,0,0,0,0,1908,0,0,0,0,0,0,0,0,0,0,1511,
-21897,0,0,0,0,0,0,51398,0,24870,0,32647,0,0,0,35015,0,0,0,0,0,0,0,11204,0,0,0,0,
-0,0,7758,57991,0,0,0,30949,0,0,22,15140,9162,0,0,0,0,0,0,25540,20136,7108,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16427,10789,9805,0,0,0,0,0,0,0,0,0,4680,0,0,52679,
-0,0,0,0,0,14884,0,0,0,16804,0,0,0,0,0,0,9578,5287,0,0,0,0,0,0,0,34054,0,0,0,0,0,
-19076,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7627,55719,0,39463,14446,58374,0,0,0,0,23465,
-15845,0,0,0,0,0,38534,0,0,0,17893,10922,0,7176,678,0,0,0,0,0,0,0,0,3113,46279,0,
-0,0,0,0,0,0,23334,0,0,18088,23268,0,62342,0,0,0,16613,0,0,0,0,0,0,0,0,0,38182,0,
-0,0,0,0,0,25292,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,10344,71,6446,0,0,1893,0,0,
-1106,0,28680,30756,0,41126,0,0,1492,0,15341,0,0,0,0,17575,0,21220,0,0,0,0,0,
-25060,2088,21828,0,0,0,0,0,358,0,0,0,0,0,16708,0,0,0,1668,0,0,0,0,0,12260,0,0,0,
-0,0,0,0,0,4078,0,0,0,0,0,12713,6215,0,0,20329,0,0,0,0,0,0,0,0,0,0,31204,0,0,0,0,
-0,0,0,0,0,0,3732,0,1646,0,0,27460,0,34406,17128,14341,0,0,0,0,0,19527,0,0,0,0,0,
-0,0,0,0,0,6120,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8551,21546,10212,3020,
-2951,0,17638,0,0,6985,44999,2218,8197,0,0,30472,63366,0,26660,0,0,0,0,0,0,0,0,0,
-0,0,0,1265,0,0,0,0,0,0,0,2610,0,0,0,11278,20295,0,0,0,0,0,19780,0,0,0,0,0,0,2353
-,10852,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5421,24292,0,0,0,0,0,0,0,0,0,0,0,0,0,34407,0,
-0,0,0,0,0,15432,20774,0,0,0,0,0,0,0,0,12360,10757,0,0,0,33126,0,0,0,0,0,0,0,0,0,
-0,0,29573,0,2343,0,0,0,0,0,63079,0,0,0,0,0,0,0,0,0,43015,0,16038,0,0,0,0,0,0,0,0
-,1480,25573,0,0,0,0,0,0,0,8839,0,0,0,0,0,0,0,24645,0,0,0,0,0,0,0,0,0,0,0,0,0,
-5063,0,0,0,0,0,45830,0,0,0,0,0,0,0,0,0,0,823,0,0,64039,0,0,0,0,0,0,0,0,0,0,0,0,0
-,15300,0,0,0,0,0,0,2924,46759,6760,19268,0,0,0,0,0,0,0,0,0,34182,0,0,3977,18149,
-0,0,0,32199,0,0,0,0,0,0,0,0,0,23524,25994,0,0,10343,0,0,0,9733,0,0,0,0,0,0,0,0,0
-,4740,0,0,0,0,0,0,0,0,0,16741,0,0,4626,23367,0,0,31400,0,0,3557,0,0,4234,0,0,0,0
-,0,0,28486,0,0,0,0,0,14213,0,57191,0,0,0,0,0,0,0,0,0,0,240,0,0,0,0,65318,29832,0
-,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,29989,0,31846,0,0,8170,0,0,4421,27626,30884,0
-,0,20204,0,0,0,0,44614,534,20868,0,0,0,0,0,0,0,0,0,0,0,0,0,28710,0,10277,0,0,0,0
-,0,29511,0,19813,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,27020,0,0,0,0,0,0,53094
-,0,35207,0,0,0,37542,0,61766,8584,8037,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12488
-,22757,0,0,0,0,0,0,0,0,0,0,0,0,0,23814,0,0,0,0,0,0,0,0,0,19973,0,0,0,63943,0,0,0
-,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,36006,0,0,0,19012,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-,0,0,0,0,8580,0,0,0,0,0,0,0,18021,0,0,0,0,0,0,0,0,80,1254,0,0,0,42630,0,0,0,0,0,
-0,0,16262,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2124,25479,0,0,0,0,16873,0,0,0,0,3142,
-0,0,18443,0,0,0,0,0,3917,0,8841,1190,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-,0,20645,0,0,0,0,0,0,0,0,0,0,0,9284,0,0,24394,41351,0,0,0,42087,0,62566,0,0,0,0,
-0,0,0,0,0,0,6728,4199,0,0,0,0,25515,0,1231,0,374,15623,0,29956,0,14118,0,0,0,0,0
-,19047,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,31718,0,0,0,0,0,0,0,0,0,0,0,20900,0,16743,0
-,0,0,28902,0,0,0,0,0,0,0,0,0,0,0,0,2578,0,0,0,0,0,0,0,0,0,13838,0,0,10052,0,0,0,
-0,7432,43783,17097,0,0,0,0,0,873,0,0,0,398,0,0,0,0,0,0,0,0,0,8459,23559,0,53030,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,35750,0,4071,0,0,0,38662,0,41414,0,0,0,0,11656,0,0
-,0,0,0,4011,42695,0,0,0,0,0,0,0,0,0,0,0,0,0,0,25353,0,0,0,0,0,0,0,27177,22372,0,
-0,0,0,0,30980,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,46278,3976,12711
-,0,0,0,0,0,0,0,0,0,0,0,20517,0,0,0,0,0,0,0,0,0,0,0,0,4072,11078,0,0,16553,2405,0
-,0,0,0,0,0,0,0,2670,0,0,0,0,0,0,32998,0,0,0,0,0,0,0,47046,0,30533,0,0,11050,9734
-,13129,0,0,0,0,23494,0,0,0,0,0,58310,0,0,0,57543,0,0,0,0,0,0,0,0,0,0,0,0,0,454,0
-,0,0,0,0,0,5163,59687,2220,0,0,0,0,0,0,29510,0,0,0,0,0,0,0,0,0,0,0,17316,0,20069
-,0,0,0,0,0,0,0,0,0,5319,0,0,0,0,0,0,0,0,0,27174,0,0,0,0,0,0,0,22949,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,19208,0,0,0,0,0,0,20933,0,0,6026,8742,0,0,0,17380,0,13127,2797,0
-,0,30116,0,0,5963,8004,0,57126,0,0,0,0,0,42854,14792,30759,0,24964,0,0,0,0,0,0,0
-,0,0,0,0,0,0,0,0,0,0,16933,0,0,0,0,0,0,15176,40839,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-788,30341,0,0,0,0,21036,24102,0,0,0,0,30123,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-22597,31531,26789,0,59559,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9352,29863,0,0,0,0,0,0,0,0
-,0,24551,0,0,0,0,0,0,0,20516,0,0,0,39462,3665,0,28265,0,8778,64262,0,57414,9132,
-0,0,18276,0,0,0,0,0,0,0,0,0,0,26344,30725,524,19751,0,13796,0,0,0,0,0,0,0,0,0,0,
-18155,0,12841,0,74,24998,13579,1061,0,64199,0,0,8776,0,0,60231,0,25412,0,0,0,
-59143,0,0,0,0,0,0,14344,1510,0,0,0,38374,0,0,0,0,0,0,0,0,13353,0,0,0,0,0,0,0,0,0
-,0,9446,0,0,0,0,0,0,0,32613,0,0,0,0,0,0,0,0,0,0,0,0,0,19844,0,0,0,0,14859,0,0,0,
-0,6662,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14154,0,29770,0,0,0,0,0,
-16520,2182,0,0,0,0,0,36102,3340,0,0,0,0,0,0,0,0,25189,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,15720,0,0,0,0,0,0,22758,0,0,304,0,3243,14117,0,0,0,0,0,0,0,0,0,0,5130,
-12679,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,21733,10441,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,36103,0,0,0,0,0,23590,0,57479,0,0,0,0,0,0,0,0,0,0,0,0,10824,
-18372,0,0,0,0,0,35078,15722,12967,0,0,0,0,0,34599,0,0,0,0,0,0,0,0,0,0,0,0,0,
-53639,0,38630,0,0,0,0,0,0,31017,11333,0,0,0,0,19144,0,9513,0,0,0,0,0,0,0,0,56711
-,24042,0,1197,0,0,58502,0,0,0,0,0,0,0,0,0,8230,6121,18628,0,0,0,0,0,0,25290,0,0,
-0,0,0,1514,0,0,0,0,0,0,0,14378,9798,32363,0,0,0,0,0,9577,0,0,0,0,0,0,26788,0,0,0
-,0,0,0,330,10533,0,0,0,0,0,42246,0,0,0,0,0,0,5074,21028,0,38119,0,0,0,0,0,0,248,
-0,31176,62054,0,53287,0,0,0,0,271,0,0,0,0,0,0,0,0,0,0,0,0,0,9224,2117,0,0,0,0,
-15818,5607,0,52582,0,0,0,0,0,0,0,0,18248,24005,23018,0,0,0,0,0,0,0,0,0,0,0,0,0,
-427,0,0,39910,0,0,7080,11399,0,0,0,0,0,0,0,0,0,0,22220,57894,0,0,0,0,0,0,0,13156
-,0,1413,1007,0,0,0,0,21415,0,21543,0,0,0,0,0,0,0,0,0,41702,22538,9573,0,0,0,8806
-,0,0,6920,56359,0,0,0,0,0,0,0,0,0,0,0,42215,0,0,13708,0,0,0,0,0,0,0,0,0,0,16453,
-0,0,0,0,0,0,1582,1764,3282,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11653,0,0,0,0,12139,0,
-29482,31076,1673,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,40262,0,0,0,33862,0
-,0,0,0,0,20996,0,0,0,0,0,4615,0,0,0,0,0,0,0,0,0,0,0,43943,333,19367,0,0,0,0,0,0,
-0,26821,0,32389,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4936,11687,0,0,0,0,0,0,0,0,0,10885,0
-,0,0,0,0,25926,0,0,0,0,0,0,15851,0,0,0,0,0,0,0,0,0,8360,0,17130,7942,0,11460,0,0
-,0,0,0,0,0,0,0,0,0,0,0,0,0,18150,14248,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-22310,0,0,0,42758,0,0,0,0,0,0,0,0,29354,5574,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-,0,0,0,0,0,0,0,0,0,0,0,31109,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11236,0,0,0,0,0,0,0,0
-,0,0,0,0,0,9156,0,0,1801,14023,0,0,0,0,0,62406,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-23620,0,0,0,0,0,0,0,0,0,0,31018,65510,0,0,0,0,0,0,0,26182,0,0,0,0,0,0,0,27717,0,
-0,0,0,0,0,0,46950,0,0,0,0,0,0,0,0,0,0,0,0,0,31108,0,11366,0,0,0,3717,0,0,0,0,0,0
-,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8552,6054,3339,0,0,0,0,51622,0,
-0,0,0,0,0,0,3718,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,28358,0,2756,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,1462,0,0,27622,0,0,0,0,0,0,0,62502,14410,56743,0,0,0,0,0,0,0,0,0
-,0,0,0,0,0,0,0,0,0,0,0,0,0,12206,0,0,0,0,0,0,0,0,0,0,0,0,36550,0,38054,0,0,0,
-21221,0,0,0,0,0,0,0,27077,0,0,16906,0,12587,12101,0,0,0,0,0,0,10414,28775,21769,
-60167,0,56646,0,0,0,0,0,20740,0,0,0,0,0,0,5931,5351,0,65478,0,0,0,0,0,0,7977,
-52647,0,4868,0,0,0,55463,0,0,0,0,0,32197,0,0,0,0,0,13445,0,0,0,26631,0,0,0,0,0,
-11237,0,0,0,0,209,1285,0,0,1928,0,0,0,0,43334,23849,23172,0,0,0,0,0,0,0,0,24712,
-62439,8811,3463,20457,0,0,0,0,0,0,0,0,0,16008,56263,0,0,0,0,0,0,0,0,0,0,0,60358,
-22761,6565,0,0,30888,27686,0,0,0,17093,0,0,0,0,22121,0,0,0,7593,14182,0,28103,0,
-0,0,0,0,45126,0,0,0,0,0,0,0,0,0,0,0,0,0,31844,0,0,0,0,0,0,0,0,0,0,0,0,0,18500,0,
-0,0,0,28202,0,0,0,0,0,0,0,0,26308,0,29541,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-29572,0,0,0,21285,0,0,0,0,0,60839,0,0,0,0,0,30407,15949,2981,0,0,0,46439,0,0,0,0
-,0,23911,26505,25222,12811,5895,0,6343,0,0,0,0,0,0,0,0,0,0,0,31815,0,0,0,0,0,0,0
-,0,19688,10245,0,0,0,31301,26985,28964,0,0,0,0,0,0,0,0,27208,31172,0,0,0,0,216,0
-,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16292,0,0,0,0,0,8743,0,0,0,0,0,0,0,0,
-0,0,0,0,0,6438,0,0,0,33319,0,0,0,33286,0,0,0,0,0,0,0,0,0,22181,7499,24774,0,
-10756,0,44775,724,0,25768,25669,24873,5349,25257,0,0,54566,0,0,0,0,0,0,0,0,0,0,0
-,327,439,357,0,0,6536,8452,0,0,1802,0,0,61350,0,15045,0,0,0,0,0,0,0,0,0,0,0,
-38343,0,0,0,0,0,0,0,0,0,0,32491,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-22885,0,0,32073,0,0,0,9546,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,27748,0,0,23176,0,0,0
-,0,0,0,0,0,0,0,0,0,24583,0,0,0,0,0,34118,0,0,0,0,2158,0,5586,30340,0,0,0,0,0,0,0
-,0,0,0,0,0,0,24452,0,0,0,0,2409,4390,0,24196,0,0,0,0,0,0,32264,26948,20587,0,0,0
-,2155,0,0,0,0,0,0,0,0,0,0,0,4328,26276,0,0,0,0,0,0,0,0,23564,0,12458,11367,0,0,
-25162,0,0,0,0,0,0,65414,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,32966,0,0,0,
-34662,0,0,0,0,0,39238,0,0,0,0,11400,10214,266,12452,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,15173,0,0,0,13668,0,13222,0,23364,0,0,0,0,0,11941,0,0,0,0,0,0,0,0,0,
-25575,0,0,0,57383,0,0,0,10308,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,2865,9287,75,0,0,0,0,0,0,0,0,0,0,21508,22380,59526,0,0,0,23589,0,0,0,51590
-,0,0,0,0,0,0,0,0,0,0,0,4645,3980,28295,0,0,0,0,0,12388,0,0,0,0,0,0,0,0,0,0,0,
-21734,0,17607,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,41767,0,0,0,0,0,0,0,18436,0,0,0,0,0,
-0,0,21958,0,19430,0,0,1204,0,0,0,0,0,0,0,0,0,3240,55239,0,0,0,0,0,30660,0,0,0,
-28901,0,0,0,0,4716,0,0,0,0,0,0,0,0,0,0,0,11754,0,0,0,0,22086,0,22564,8749,0,0,
-28391,0,0,0,0,0,0,0,0,0,0,0,2886,0,0,0,0,0,0,0,29062,0,0,0,0,0,0,0,40358,0,0,
-15916,39526,0,13735,0,0,0,0,28938,0,407,4006,0,0,0,26916,0,0,0,0,0,27526,30280,0
-,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,24586,0,24649,5126,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8684,0,0,0,0,0,0,0,23019,0,22377,18599,0
-,0,0,0,0,0,0,0,0,0,27593,9735,0,20196,0,0,0,0,28168,48423,0,0,0,0,0,31399,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,13892,0,0,0,0,0,17606,0,0,15242,29767,26378,17701,0,0,
-14472,0,4840,0,0,0,0,0,0,24708,0,9349,4330,0,0,0,0,0,0,0,16137,0,0,34854,0,0,0,0
-,0,0,0,0,0,0,0,25063,0,0,0,0,0,0,6603,12583,0,0,0,0,0,0,0,0,7433,29188,0,0,0,0,0
-,31270,0,0,22920,3143,0,0,0,0,0,23461,0,0,0,0,0,0,0,0,618,0,0,0,0,21381,0,11524,
-0,0,0,0,0,0,21004,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,312,23239,0,0,0,0,0,0,0,0,0,0,0,
-0,2313,0,0,40614,0,0,14825,0,0,0,0,0,0,46535,0,41190,7853,0,31656,0,0,0,0,0,0,0,
-0,0,3433,5255,0,0,0,0,0,0,0,33958,0,0,0,0,72,15493,0,0,0,0,0,0,0,36070,0,0,0,0,0
-,0,0,14724,0,0,0,0,0,29828,0,0,0,0,0,0,0,18822,20008,0,0,0,0,2438,2952,0,0,0,0,0
-,0,0,0,0,0,0,0,0,3342,0,0,0,0,0,0,0,0,0,0,0,0,0,0,24420,0,19908,0,0,0,8101,0,
-17479,0,0,3530,0,8202,29319,0,0,1132,6789,0,0,23881,0,0,0,4810,0,0,46918,0,0,0,
-41574,0,0,0,0,0,0,0,0,0,48582,0,0,0,0,0,0,0,0,0,0,0,0,0,39334,0,0,0,26117,0,0,0,
-0,0,0,5100,0,0,0,0,0,23496,27813,4045,54918,0,0,0,0,0,0,6473,7428,0,0,0,0,6792,0
-,0,0,0,0,3560,32103,0,0,0,0,0,0,0,0,0,0,0,54790,0,0,6926,0,0,0,0,16518,0,0,0,0,0
-,20806,0,0,0,0,1841,3174,0,0,0,0,9612,18374,0,0,0,0,32744,0,0,9671,0,59879,0,
-23300,8073,0,0,14758,0,0,0,10342,0,0,0,0,0,0,24808,14759,0,0,0,0,0,0,5515,0,0,
-14852,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2354,23271,0,32740,0,0,0,0,0,0,0,0
-,0,0,18472,0,0,0,0,0,0,0,0,33190,0,0,0,0,0,0,0,0,8972,21669,0,0,0,0,0,0,0,0,0,0,
-0,25574,0,0,0,0,5096,0,14283,55367,0,0,0,0,0,0,0,0,0,12644,0,0,0,0,4651,0,0,0,0,
-0,0,0,661,0,0,13638,19466,0,0,0,0,0,31273,0,8010,0,0,0,0,0,3211,0,0,0,0,63430,0,
-0,0,0,0,15237,0,0,0,0,0,0,19018,2437,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14312,0
-,0,0,0,16836,0,0,471,35975,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-,6023,0,0,0,0,0,0,0,0,11593,9639,0,0,0,55783,0,5700,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,27908,0,26598,0,0,6667,6470,0,0,0,0,0,0,0,
-62534,0,0,0,0,16522,27911,0,0,10025,7172,0,0,779,0,360,17477,0,0,0,61991,7752,
-7717,1494,0,0,0,26569,40742,0,0,0,0,0,0,0,26406,10474,32196,0,0,0,0,0,50567,
-16521,11716,0,0,0,0,0,55558,0,0,0,0,0,0,0,0,0,0,0,61926,0,26436,0,0,0,0,4459,
-10598,0,0,0,0,0,0,0,0,0,0,0,9223,0,29318,0,0,0,0,0,60423,0,0,0,0,0,0,0,47078,0,
-50246,0,12612,0,0,0,0,0,0,0,61799,0,55015,0,21060,7309,0,0,0,0,0,11976,0,0,0,0,
-23527,0,0,0,0,0,0,10347,15942,0,34023,0,0,0,0,4969,0,0,0,0,0,0,0,0,28997,0,0,0,0
-,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,36454,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-3466,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,19716,
-28872,0,0,0,0,0,22152,0,0,0,0,0,0,26342,0,0,0,9764,0,0,0,0,0,0,0,21798,0,0,0,0,
-13,6853,32136,0,0,0,0,0,0,0,750,0,0,54502,0,0,0,0,0,0,0,0,0,46183,0,0,625,22854,
-0,0,0,0,2061,23588,0,0,11049,56262,0,0,18538,1509,0,0,17258,4453,0,0,0,0,12429,0
-,0,0,0,8102,0,0,0,0,0,0,8074,0,23852,0,0,0,0,0,0,0,0,0,0,0,16136,3428,0,27876,0,
-0,0,7332,0,0,0,0,0,28900,0,0,2284,0,0,17573,201,1508,0,0,0,0,0,0,0,0,0,31365,
-27688,22565,0,0,0,5159,0,0,0,0,4584,42599,0,0,0,44422,1068,23173,0,0,0,613,0,0,0
-,12645,0,0,0,0,0,27076,6732,0,0,0,3913,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-,0,0,0,0,0,0,0,0,0,0,0,22244,29992,15911,0,0,0,0,0,22982,0,0,0,0,0,0,0,50598,0,0
-,0,0,0,0,5161,1574,0,0,0,0,0,0,0,0,0,19108,0,0,0,35014,0,0,0,25956,29067,0,0,0,0
-,0,0,0,0,0,0,47079,0,0,0,0,0,0,0,0,0,0,1356,61927,0,0,0,64455,2122,64231,0,0,
-18763,0,0,0,0,0,0,0,0,0,907,34471,0,0,0,39078,0,0,1995,0,0,0,0,0,0,0,0,0,0,56518
-,0,0,0,0,0,0,0,0,0,0,0,0,822,0,15978,44423,0,0,3112,325,0,0,0,0,0,15397,0,0,0,0,
-0,0,0,0,0,0,1193,4294,4968,15559,0,46150,0,0,0,0,0,18917,0,0,0,0,0,0,9928,37543,
-0,0,0,0,13097,36999,0,0,0,15430,0,0,8424,29639,0,0,0,0,0,0,0,0,0,0,0,0,0,25734,0
-,0,0,0,0,0,0,0,0,0,0,0,0,40487,0,13284,0,11141,0,0,0,32388,0,0,0,0,0,0,0,0,0,0,0
-,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5298,57702,0,0,0,0,0,0,0,13060,0,0,0,0,0,0,
-8233,42278,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,36422,0,0,0,7972,0,0,0,
-18437,0,0,0,0,7406,0,0,0,9225,0,0,0,0,0,0,0,0,0,13865,47591,18220,53703,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2796,0,0,0,0,0,24940,17223,0,0,0
-,13221,0,0,0,0,0,0,0,0,0,0,15848,0,0,0,0,0,6122,1735,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-,0,0,0,0,16968,18151,0,0,0,0,0,47494,0,0,0,0,0,0,26089,19494,0,0,0,0,0,15494,0,0
-,0,0,0,0,0,0,0,0,28809,0,0,0,0,42727,0,55174,0,0,0,0,0,0,0,0,0,0,0,20485,0,0,0,0
-,0,0,0,0,0,0,0,58598,0,0,0,0,0,0,0,0,0,0,0,0,0,15172,0,0,0,0,0,0,0,0,0,35302,0,
-48135,20972,33094,0,0,0,0,0,9765,0,0,0,0,0,0,0,0,0,39559,0,0,13736,6950,0,0,0,0,
-23658,8903,0,0,0,0,0,0,0,22662,0,0,0,0,0,58886,7468,0,0,0,0,0,0,0,0,64550,0,0,0,
-0,0,47622,0,0,0,50886,0,0,0,0,0,57606,912,0,0,0,0,0,0,0,0,0,1449,0,1169,0,718,
-46151,12104,0,0,0,0,0,0,48230,0,0,0,0,0,0,0,0,0,0,1259,0,0,33734,23208,62567,0,
-65158,0,0,0,0,0,0,0,0,0,0,28684,59878,0,0,0,0,0,0,0,0,0,0,25769,0,0,0,0,65479,0,
-0,0,0,555,22789,0,19748,1769,10246,8680,0,0,0,0,0,0,0,0,0,14250,0,5899,3303,0,0,
-0,0,0,0,0,0,21097,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,21638,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,10795,0,0,0,16204,0,0,0,0,0,26986,2469,0,14660,0,0,0,0,0,45447,
-12234,3494,4555,10566,0,0,0,0,0,0,0,0,0,0,0,0,2801,0,0,0,15755,0,0,0,0,0,0,0,0,0
-,0,0,0,0,0,0,0,0,0,39654,0,0,0,0,0,0,6763,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-33574,0,10279,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,63527,0,0,3912,0,0,7492,0,0,0,35142,
-0,0,0,0,0,0,17576,8103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16713,4198,0,0,4782,0,0,0
-,0,0,0,0,0,0,0,0,0,0,0,16228,0,0,0,0,25961,20166,0,0,0,10980,0,0,0,0,0,14340,
-18922,14567,0,44199,0,0,0,0,0,0,0,18406,0,0,0,0,0,37606,0,0,0,0,0,0,0,0,0,20902,
-0,0,0,56358,0,38342,0,0,0,0,9514,36071,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,21700,0,0,
-5266,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1134,0,1453,0,0,0,0,0,3882,0,0,0,
-0,0,0,0,0,4004,0,0,0,51910,0,0,0,0,0,23076,4648,0,0,0,31051,25351,0,0,0,22884,0,
-0,0,0,0,63975,0,0,2376,16997,0,0,2096,0,0,0,3373,7046,0,0,0,0,0,0,0,30726,0,0,0,
-0,20,0,13707,614,0,0,12840,3079,0,0,0,0,0,51046,3729,0,32680,0,0,0,0,0,24008,
-62759,0,0,4745,0,0,0,0,0,0,0,0,0,0,0,0,0,2414,0,0,44262,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,24937,0,0,0,0,0,0,0,0,19140,0,13575,0,0,0,0,0,0,0,39110,0,0,0,28036,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,4261,0,0,0,0,5992,0,264,0,0,0,0,0,0,0,13739,0,21928,0,
-0,0,0,0,0,0,0,0,0,0,4232,15110,0,0,0,0,0,0,0,0,0,30022,0,0,27977,0,0,0,0,0,24776
-,0,0,0,0,0,2962,0,0,0,0,0,0,26564,22441,0,0,0,0,0,13640,11205,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,19305,1894,0,0,0,0,0,0,0,0,0,0,9389,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14119,
-5224,135,0,0,0,0,0,0,0,0,0,25796,0,0,0,0,0,0,7470,0,0,0,0,63815,0,55654,0,0,
-12584,0,1524,33223,0,0,0,9895,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11624,
-0,0,0,5614,0,0,0,0,0,0,0,21320,0,0,53607,0,51206,0,0,0,25863,0,0,0,0,0,0,0,0,0,0
-,0,8964,1740,0,0,0,0,0,0,0,0,13476,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7975,0,
-0,3306,8134,0,8389,48,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,25766,0,0,0,0,0,0,0,0,0,
-52166,0,0,0,0,0,0,0,0,0,0,0,0,0,21477,31112,31652,0,0,0,0,0,0,0,28452,0,0,0,
-44231,0,0,0,0,0,0,0,24805,0,0,0,0,0,0,0,0,0,0,12428,6471,0,0,0,0,525,17926,0,0,0
-,26919,0,0,18120,0,0,0,30024,0,0,0,0,0,0,0,0,0,0,29189,0,0,0,43559,0,0,0,0,0,0,
-19787,7557,0,59334,0,0,10184,6085,0,44039,0,0,0,0,0,0,0,11175,0,0,0,0,30440,
-63110,0,0,0,0,0,0,11017,0,0,0,0,0,0,0,0,27204,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,29126,0,0,0,0,0,0,0,0,0,0,0,0,0,0,622,0,5226,2727,0,15588,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4650,0,2675,0,0,32420,0,0,0,61511,0,0,
-5419,17829,2123,0,0,0,0,0,0,0,0,0,0,0,0,0,0,38183,2640,0,11274,14533,1842,0,0,
-42663,12681,3430,0,11845,0,0,0,0,0,0,0,0,0,6533,0,0,0,0,0,54598,0,0,0,0,0,0,0,0,
-0,0,0,0,12616,38535,0,0,0,0,0,32229,0,0,0,54279,0,48614,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,31401,0,0,0,0,34310,0,0,0,22788,0,52134,0,0,0,0,0,0,0,23302,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,40678,0,0,0,51463,535,0,0,0,0,15525,0,0,0,0,0,0,4904,869,0
-,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,63718,0,0,0,0,0,0,0,0,1678,0,692,0,0,0,
-0,0,0,0,0,0,26216,0,0,0,0,0,29355,0,0,0,0,25095,0,0,0,0,4335,0,0,0,0,0,14538,0,0
-,0,0,0,0,0,0,0,27273,55014,0,0,0,0,0,27271,0,0,0,0,0,30468,0,0,0,0,18186,0,0,0,0
-,0,14345,0,0,0,2152,0,0,0,0,0,0,0,0,0,0,0,0,0,0,58438,21034,0,23339,21318,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,21412,0,0,0,0,0,0,0,12869,0,0,4875,0,0,0,0,29191,0,0,0,0
-,0,0,1640,10247,0,14244,0,0,0,0,9867,0,0,0,0,0,12363,0,0,7653,0,0,4168,2663,0,
-4580,0,11143,0,0,0,0,0,0,0,30662,0,0,0,0,0,6724,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,13764,0,0,0,0,0,0,0,0,0,0,0,0,234,6821,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-,0,0,0,0,0,0,0,0,0,25639,0,0,0,0,0,0,0,0,0,29958,0,3461,0,0,0,0,0,0,0,0,0,28324,
-18795,7013,12746,11655,0,37287,0,0,10953,7718,9705,0,0,0,0,0,0,0,0,0,0,46534,0,0
-,0,0,0,0,0,0,0,0,8137,17988,0,25156,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,41415,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15784,6918,0,0,0,0,7019,10919,0,0,0,
-0,0,0,0,0,0,0,4171,55495,4940,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,22440,19333,0,0,
-28136,0,6249,21317,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,53414,0,0,0,57318,0,0,0
-,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,39303,0,0,0,0,0,19940,0,0,0,0,0,0,0,25543,0,0,0
-,0,0,0,0,0,0,0,0,0,2698,3911,0,0,0,26790,0,0,0,0,0,0,32424,0,0,18470,0,0,0,14726
-,29834,0,0,0,0,0,0,0,0,0,0,0,1000,4197,0,0,0,19366,0,0,0,39878,0,0,0,0,2185,8901
-,5288,9829,25000,0,0,0,0,0,0,1062,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,35622,0,
-0,23048,62503,6506,0,0,0,0,0,0,0,13609,10438,0,0,0,0,0,0,0,0,0,0,7723,42119,0,0,
-0,0,0,13317,0,0,0,41606,0,27111,0,0,21194,11461,0,0,0,0,26856,58342,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,20940,48710,0,0,0,0,0,0,5227,0,0,0,0,0,10061,31300,0,0,0,19236,0
-,0,0,0,0,30277,13896,0,0,0,12876,13159,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,428,
-46951,13134,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15462,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,21668,0,0,0,0,0,0,0,0,0,0,0,0,2249,0,0,0,0,44967,0,0,0,0
-,0,0,3465,0,0,0,0,0,0,0,0,0,0,0,0,0,0,24868,0,0,0,0,0,23909,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,2190,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16164,0,
-10437,0,0,5263,20102,20938,0,0,0,1192,1030,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-,0,21385,4870,0,0,0,0,0,0,0,0,0,0,0,18596,0,0,0,0,1422,4038,2858,0,0,0,0,0,0,0,0
-,48998,0,0,0,0,0,0,0,0,6508,37350,0,0,0,0,0,0,0,0,17001,39431,0,0,0,0,0,30182,0,
-21445,7403,28164,0,51750,0,0,0,62631,0,0,0,0,0,0,0,31206,0,0,0,0,0,0,0,0,0,0,0,
-7751,0,0,0,0,0,0,0,0,0,13477,0,0,456,26693,0,0,0,0,0,0,0,0,0,0,0,0,14890,0,0,0,0
-,0,26697,22022,13225,27364,0,0,0,18884,0,0,0,0,0,0,0,0,3659,0,0,0,0,0,0,0,0,0,0,
-0,1448,5413,0,0,0,0,0,0,0,0,0,0,0,6340,0,0,18091,18725,0,0,0,0,0,0,0,0,0,0,0,0,0
-,22118,0,0,0,18981,0,0,0,0,0,0,0,0,0,29223,3724,0,0,0,0,43526,0,0,0,25668,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,21545,9862,0,22692,32201,60646,0,7300,0,0,
-0,58887,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,19460,0,0,0,0,0,0,0,0,0,50342,0,
-65255,4360,17286,0,0,0,0,0,0,0,28708,0,0,30025,60102,0,0,0,0,0,0,0,0,0,47014,0,
-31973,0,9572,0,0,0,0,0,0,0,18501,0,0,0,0,0,14597,0,0,0,53735,5228,22183,0,0,0,0,
-0,0,1554,24164,0,0,0,0,0,0,0,0,0,0,0,0,10827,0,0,0,0,34918,0,0,0,0,22252,0,0,
-46855,0,0,0,0,0,31207,0,0,10733,0,0,63334,0,0,0,0,8616,50119,20169,12678,0,0,0,0
-,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,58087,20298,5,0,0,30920,0,0,0,0,0,0,0,296,13190,0
-,30663,0,0,18536,12228,0,6788,0,0,0,0,30890,21796,0,0,526,0,0,0,0,0,0,0,0,0,0,0,
-0,20965,0,0,0,0,2161,0,0,0,0,0,0,24038,0,0,0,0,13544,7398,0,0,32522,9605,0,0,0,0
-,3208,7590,0,0,0,43846,0,0,0,38663,0,0,0,0,0,39014,4142,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,6373,0,0,13676,0,0,0,0,30374,21288,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,22791,0,0,0,0,0,37958,0,0,0,0,0,0,0,0,0,0,9452,
-9990,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4841,0,0,0,0,18820,152,0,0,0,0,0,13260,3334,0,0
-,24234,8422,0,17957,0,0,0,10244,0,0,0,0,0,0,0,0,0,0,0,7204,0,0,0,0,1201,26151,0,
-31173,0,0,0,0,0,0,0,0,0,0,0,0,0,64838,4203,7525,521,0,18888,37031,0,0,0,0,0,0,0,
-0,7082,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4490,12487,0,0,0,0,0,0,0,36615,0,0,
-0,14854,0,0,0,0,0,0,0,0,0,0,0,0,6539,13029,9704,38983,0,0,0,0,168,10405,0,0,0,0,
-394,25607,0,57063,0,0,0,0,0,0,0,0,0,0,16141,19878,0,0,0,0,0,0,0,0,0,29446,0,
-12036,0,0,0,0,0,6982,18572,0,24584,14535,0,0,0,0,0,0,0,0,0,0,16,0,21642,0,0,0,0,
-0,0,5254,0,0,0,0,0,0,0,0,1622,0,0,0,0,0,0,0,0,0,0,0,0,0,3853,9126,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,7241,10982,0,0,0,0,0,0,0,0,0,0,0,0,0,0,950,0,0,57990,0,0,277,0
-,0,0,694,36007,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,42470,0,0,0,0,18409,
-51142,0,0,0,0,0,0,0,0,0,28646,0,0,0,30693,0,0,0,0,0,56295,5544,0,0,0,0,8518,8366
-,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,45670,0,0,
-9608,33062,0,0,0,0,0,0,0,0,0,0,0,18694,0,0,0,0,1672,23493,0,0,6955,7655,0,36134,
-0,0,0,0,0,0,0,0,23432,647,0,0,0,0,0,0,0,0,0,0,0,13382,0,0,0,19621,0,0,0,0,0,0,0,
-0,0,20228,0,0,2728,31495,0,0,0,0,29096,22213,235,35495,0,0,0,0,0,0,0,0,0,0,0,0,0
-,0,0,5348,0,0,0,0,8968,1989,0,0,1066,0,0,11492,5965,31367,0,0,0,0,0,0,0,0,0,0,0,
-18727,0,0,0,6757,0,0,10765,4646,0,36166,0,27943,0,0,26888,8420,0,0,0,0,0,0,0,0,0
-,29316,0,0,0,0,0,0,0,0,0,0,4975,0,0,0,14762,3111,0,0,0,0,0,43399,0,0,0,0,0,0,0,
-18980,0,0,0,0,0,44550,0,0,0,0,4051,0,0,0,0,37734,0,0,0,0,0,5188,0,0,0,0,0,24486,
-0,5989,0,41159,0,0,0,0,0,0,0,0,0,20326,0,0,747,6884,0,0,0,41798,0,0,3117,22919,0
-,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,21032,0,0,0,0,0,0,0,0,9574,0,0,0,0,0,0,
-4302,0,0,0,0,0,0,0,0,0,0,0,21068,34630,0,0,0,0,0,64071,0,0,0,0,0,0,26667,7943,0,
-0,0,0,0,52934,0,0,17002,0,0,0,0,0,0,20294,0,0,0,0,0,0,0,0,0,27301,18347,7974,0,0
-,0,0,0,0,0,0,16874,0,0,0,0,45414,0,0,0,0,0,0,648,1575,0,0,0,31749,0,0,0,23301,0,
-0,0,0,0,0,0,0,0,0,0,0,15912,50535,0,0,0,0,1993,8582,0,0,0,0,0,0,0,38438,0,0,0,0,
-0,0,0,0,0,0,0,0,15850,6183,0,0,0,0,3402,0,0,27494,0,0,749,0,0,0,0,0,0,0,26025,
-29606,0,0,7144,19622,30504,0,0,0,0,0,0,0,0,21316,0,0,0,0,0,0,0,0,0,21444,0,0,
-1289,6919,0,0,0,0,0,0,8299,0,0,0,14090,35655,0,0,0,0,0,0,0,0,2377,15206,0,0,6028
-,4452,0,25508,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,50310,0,0,0,0,1269,0,0,0,0,0,0,0,0,0
-,0,0,0,51014,0,0,0,0,0,0,0,9286,0,7429,0,0,28393,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-,0,0,0,16680,452,0,0,0,0,0,23718,0,0,0,31750,0,0,0,0,0,0,0,0,3568,0,0,13604,0,0,
-0,0,0,25255,0,0,0,50982,0,56582,0,0,7467,0,0,0,0,30181,0,0,0,0,0,0,0,30564,7208,
-7845,0,0,0,0,0,0,7726,0,0,0,0,62182,0,0,0,41094,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,22695,0,0,0,0,0,0,17736,0,0,0,0,0,0,0,0,50054,0,0,0,14180,0,0,0,0,
-0,0,8974,0,0,0,0,0,0,0,0,23332,0,0,0,11140,0,0,0,0,0,0,0,24262,27145,9540,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,26537,45510,6062,3879,0,0,20233,25991,0,0,17803,0,0,0,0,0,
-13962,5508,16971,27013,7437,31494,0,0,0,0,0,0,0,0,0,0,4714,0,0,0,0,0,0,0,0,17189
-,0,0,0,0,0,27492,0,0,26953,0,0,0,0,0,0,0,0,0,0,41319,0,0,0,0,0,0,0,0,0,0,0,47430
-,19596,12549,0,0,0,8390,1006,0,0,0,0,0,0,0,0,0,0,24100,17577,4,0,0,0,0,0,22277,0
-,0,0,0,0,0,0,26692,0,0,0,0,0,24676,0,0,0,0,0,0,0,0,0,0,0,0,0,29477,0,0,0,21573,0
-,0,0,0,0,0,0,0,0,0,9864,14214,0,0,0,0,0,0,25771,5766,0,0,8909,8679,0,0,6861,
-16166,0,38887,0,0,0,0,0,0,12392,8678,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-52646,1354,2950,0,14692,0,0,10572,49830,0,0,0,0,0,0,0,0,3626,582,0,0,0,55750,0,0
-,0,30885,0,0,0,0,0,0,0,0,0,0,0,0,0,5830,0,0,2090,0,0,0,0,0,0,0,0,0,0,0,0,31142,0
-,0,0,0,0,10503,0,0,18825,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-57158,0,0,30792,63526,0,0,0,9863,16267,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-,0,0,0,0,0,0,0,0,0,0,18824,0,0,0,0,0,0,19653,25388,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9292,0,0,0,0,0,0,0,0,0,0,36358,0,0,0,0,0,0,0,0,
-0,0,25480,23015,0,0,10440,6725,0,0,0,22436,24265,15109,0,0,0,62311,8906,34534,0,
-0,0,0,0,0,15913,1319,0,0,20296,1477,30760,0,25928,16772,0,0,1069,0,0,0,0,0,0,0,0
-,0,0,0,0,17029,0,31909,0,0,0,0,0,0,0,0,0,0,0,41638,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-,0,0,0,0,41542,0,21478,0,0,0,9796,0,0,0,0,0,0,0,0,0,0,22187,58343,0,0,0,24295,0,
-0,0,0,0,61831,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2833,5829,0,0,0,62855,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,16676,0,0,0,0,0,0,13577,27431,0,0,0,0,21480,10501,0,16932,
-0,0,0,0,0,22918,0,48294,2574,2150,0,0,0,0,1897,4518,0,0,0,0,0,0,25064,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,47942,0,0,0,0,10990,13767,
-25705,37863,21672,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,43430,1712,0,0,0,0,
-18886,0,0,0,0,0,0,0,0,0,0,0,0,0,10535,0,0,0,0,0,0,0,15012,0,0,0,0,0,0,0,0,0,0,
-14734,0,0,55782,0,0,30824,10886,0,0,0,0,0,51302,0,0,8012,0,0,0,0,0,20680,6981,0,
-57415,11,0,0,18277,0,14564,0,0,0,32390,0,0,0,0,0,0,0,0,0,0,0,0,19113,5158,0,
-11172,0,16774,0,0,0,0,0,0,0,0,0,0,0,0,10315,13830,0,0,0,0,0,0,10410,7141,0,0,0,0
-,0,18116,0,0,0,44615,15403,13958,0,1540,14632,19525,24201,19781,0,0,0,24165,0,
-38951,0,0,0,0,0,6308,0,0,0,0,0,0,0,0,0,0,0,0,0,0,17416,15749,3438,13255,0,0,0,0,
-0,0,0,0,0,0,0,32228,0,0,0,0,176,0,0,50566,0,0,0,0,0,0,0,0,0,0,0,0,0,21540,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,58982,0,0,0,0,0,0,0,0,0,5284,0,0,0,0,0,0,25897,28326,0,0
-,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15945,0,0,0,9804,293,0,0,0,0,0,0,0,13988,23082,4677
-,0,0,0,0,0,0,0,0,0,0,0,5670,0,0,0,0,0,0,0,44070,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,6405,0,30692,0,0,0,61702,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-,45926,0,15398,0,0,0,0,0,0,4554,2692,0,0,0,0,0,32485,0,0,0,10084,0,0,0,0,0,0,
-24297,0,0,0,0,0,0,0,0,22790,0,0,0,55110,0,0,0,0,0,0,0,0,0,0,0,0,7112,0,31530,
-45255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,40743,17226,22599,0,
-0,0,0,0,0,0,0,3695,0,0,0,0,0,0,0,0,0,0,56999,0,0,0,0,0,13799,3114,21287,1353,
-7591,0,0,0,8455,0,0,6824,0,0,0,0,0,0,0,14569,0,0,0,29000,0,0,0,0,0,0,0,0,0,0,0,0
-,0,0,0,19979,0,18376,0,0,0,0,0,0,0,0,0,0,0,0,11332,0,0,0,49863,0,0,0,0,0,0,0,0,0
-,0,0,0,0,0,2191,7527,23148,58022,0,0,0,30631,0,26565,0,0,0,0,0,0,0,0,0,0,0,0,754
-,0,0,15877,0,0,0,0,0,0,0,17510,7657,2821,0,0,0,0,0,0,0,0,0,41927,0,0,0,0,0,0,0,0
-,2569,34439,0,0,3790,0,0,0,15339,8775,0,0,0,0,0,0,0,0,0,0,0,15908,0,0,21419,8359
-,0,0,0,0,424,0,0,0,0,0,0,25318,8008,20551,0,0,0,45735,30058,30372,0,0,0,0,0,0,0,
-0,0,0,0,0,0,26180,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,31432,10567,0,0,0,0,
-17450,0,0,0,0,0,0,30310,0,38022,0,0,0,0,0,28932,0,0,0,0,0,43910,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,22180,12075,0,0,0,0,0,0,0,0,0,0,0,0,0,0,22247,0,0,22826,
-12359,0,0,0,0,4105,50407,0,0,0,0,0,0,13581,28583,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-,0,0,0,0,28936,0,0,0,0,0,17673,10310,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,905,57862,
-1580,0,0,0,0,58630,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,13479,0,0,
-14153,13286,0,0,9259,0,0,0,0,0,6606,3524,0,0,0,0,0,6567,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,631,49255,0,0,0,0,0,42886,0,38215,0,0,0,0,0,0,0,0,17580,
-0,0,0,0,0,0,0,0,55046,0,0,0,0,0,0,0,0,0,10213,0,0,0,0,3604,37767,0,0,0,0,0,0,0,0
-,0,0,0,30950,0,0,0,0,0,0,0,0,0,62087,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,23528,0
-,0,0,0,0,0,0,0,0,28715,4229,0,0,0,0,0,0,0,0,0,0,1226,26820,0,0,0,12133,6984,261,
-21130,32548,0,0,0,0,0,0,3565,12390,20713,28071,0,0,1706,25287,0,0,0,0,0,0,0,0,
-14670,0,0,0,0,0,0,30534,0,0,0,12615,0,43750,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,28228,
-0,0,0,0,0,0,0,45095,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1224,3975,10954,6375,0,0,0,0
-,0,0,0,0,0,0,23180,20100,0,0,0,0,25736,8519,0,0,0,0,0,6663,0,2534,0,0,0,0,0,0,0,
-0,23720,0,0,0,0,0,0,0,0,0,0,19398,0,47814,26281,49702,0,0,4332,12965,0,0,5704,
-3206,0,0,0,0,0,0,0,0,0,0,0,0,0,15396,0,0,0,44102,0,0,0,0,0,0,0,0,0,0,0,0,0,25317
-,1064,39271,27433,0,14952,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14308,0,0,0,0,0,0,2763
-,4100,0,0,0,0,0,0,18792,0,0,0,22154,32583,0,6244,0,0,0,0,0,0,0,49478,0,0,0,0,0,0
-,0,0,0,0,0,21894,0,0,11048,0,0,0,0,0,0,11685,0,53862,0,0,15114,0,13870,0,0,0,0,0
-,0,0,919,0,0,0,31916,0,22570,101,0,0,0,0,0,0,0,0,0,7333,0,0,0,0,3272,0,0,0,0,
-27718,32712,0,0,0,0,0,0,0,0,0,1782,0,3688,0,0,0,0,29862,0,0,0,0,0,0,0,22469,0,0,
-0,0,0,0,0,55302,850,15492,0,0,0,5927,19786,13350,0,25702,0,0,0,0,0,0,0,0,0,0,0,
-40390,0,0,0,0,0,0,0,0,0,0,0,0,0,20260,0,0,0,0,0,0,0,0,0,0,0,0,0,15335,8394,0,0,0
-,0,0,0,26566,0,0,0,0,843,2245,0,0,0,0,0,0,0,0,6959,0,20488,1638,0,0,11533,50759,
-0,0,0,0,0,20871,0,0,0,0,0,24519,0,0,0,0,9544,23591,0,0,0,0,0,0,0,0,0,0,20969,
-7109,29001,0,0,32422,31720,64294,0,0,0,0,16106,0,0,0,6930,4933,0,0,0,22917,0,
-27015,0,0,0,0,19880,8070,0,0,0,0,23945,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-3310,0,87,0,0,0,0,0,0,0,0,0,0,0,0,0,0,18439,0,0,0,20742,0,0,0,10597,0,0,0,0,0,0,
-0,0,0,0,0,0,20236,0,0,0,16584,3429,0,0,0,0,0,0,0,0,27241,0,0,0,0,16132,0,0,0,0,0
-,0,0,0,0,0,0,0,244,28261,0,0,0,0,0,0,0,29509,0,0,0,0,0,0,0,0,2921,31781,0,0,0,0,
-0,0,6408,4196,344,0,0,0,0,0,0,0,0,0,0,0,0,0,11689,45863,0,0,0,0,906,3301,0,0,
-25544,32421,0,0,0,0,0,0,0,0,1260,61607,0,27302,0,0,8682,16614,0,0,0,0,10830,0,0,
-9604,15049,13413,0,0,0,0,0,0,26761,0,0,0,0,0,0,61990,0,0,0,0,0,12580,0,0,11432,0
-,0,0,0,0,22507,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12389,0,0,0,0,0,0,
-2408,22661,14507,43239,0,9700,0,0,24714,0,0,0,0,0,0,0,0,23972,0,0,0,0,0,0,0,0,0,
-0,0,0,0,34086,0,0,22955,7238,0,0,0,0,0,28485,13806,20038,0,0,0,0,22602,0,0,0,
-1645,22340,0,0,0,0,0,0,0,0,0,0,0,26502,0,0,554,0,0,0,0,61735,0,0,0,0,0,0,0,0,0,0
-,0,0,0,0,0,0,0,2694,0,0,0,0,0,0,0,0,0,0,0,0,0,0,883,27879,15948,0,3242,57382,0,0
-,0,0,0,0,13930,0,0,0,0,0,30922,0,4137,52615,0,0,0,0,0,0,0,0,0,0,0,0,0,31911,
-16072,0,0,0,0,0,0,0,0,0,0,0,0,26340,0,61671,0,0,0,0,3145,56199,0,0,0,0,0,0,0,0,0
-,0,0,0,280,0,5131,33479,0,15751,0,0,0,0,0,0,4136,1446,0,0,0,0,0,0,11304,17863,0,
-0,0,0,0,25125,0,0,0,36646,6057,0,0,0,855,11301,0,0,0,0,0,64774,0,0,0,19397,0,0,0
-,0,0,0,0,0,0,0,0,0,0,0,0,0,1040,27367,0,0,0,0,0,0,0,0,0,0,0,0,0,64358,0,0,178,
-132,0,0,14763,24455,0,0,0,46374,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,46246,0,0,0,37382,
-0,0,0,7462,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8166,0,0,6921,0,0,0,9163,0,0,0,119,
-0,0,0,23146,17156,0,0,0,0,0,9127,0,0,0,17927,0,0,0,0,0,22084,0,0,0,0,0,39879,0,0
-,2035,0,1067,0,0,0,0,0,16652,59591,0,0,0,0,0,0,0,0,0,0,0,0,20171,0,0,0,0,17733,0
-,0,0,0,0,32037,0,0,0,0,0,14277,0,0,0,0,0,0,0,42022,0,0,26793,20358,0,0,0,0,0,0,0
-,0,0,0,0,0,0,0,0,0,8907,0,0,0,0,0,0,0,0,27780,0,0,0,0,32330,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,39399,0,9732,0,16199,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-,0,0,0,0,854,0,2984,45063,25418,26980,22539,0,9133,3653,15528,28743,4649,0,616,
-65127,0,0,0,61863,0,0,0,0,0,0,0,55303,0,0,0,0,0,0,0,0,23880,0,0,0,0,0,0,0,31848,
-62854,0,0,0,0,0,0,0,0,0,0,0,49606,0,27974,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,32580,0,0,0,26052,4043,0,0,40454,0,0,26056,30565,0,0,0,0,0,0,0,31398,0,0,0,0
-,0,0,0,0,29288,1797,0,0,3220,0,0,0,0,0,0,0,0,0,20427,0,0,0,0,23621,0,0,0,0,0,0,0
-,0,0,24261,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,35591,0,0,6862,0,0,0,4265,0,6285,
-5383,0,0,0,0,0,36870,0,39847,0,0,17224,5414,27882,58118,0,0,13224,4262,0,0,0,
-31302,0,0,1388,2982,11881,0,0,0,0,0,0,16837,809,0,24140,10724,0,0,0,0,5835,0,0,0
-,0,0,0,0,0,0,0,0,1256,19237,0,0,0,0,0,0,0,5796,11848,0,0,52870,11464,0,0,0,0,0,0
-,0,0,0,5645,9158,0,25223,0,0,0,0,0,39142,24968,8135,32104,28678,0,0,0,46311,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,23820,0,0,0,0,0,4050,0,1323,25220,0,0,0,20133,0,
-0,0,0,0,0,0,0,0,0,0,9381,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-,0,0,0,0,0,0,0,13444,1198,60806,0,0,0,0,17356,50247,30632,0,0,0,0,0,0,0,11944,
-999,0,0,0,0,4010,10404,0,0,0,0,0,0,10346,0,0,49510,0,0,0,0,0,0,0,0,0,0,0,0,0,
-38919,0,0,0,0,0,0,6351,60966,20137,487,0,0,0,0,0,0,655,2406,17387,43303,0,0,0,
-17063,0,0,213,0,0,0,0,0,0,17221,0,0,0,0,0,0,0,0,0,0,0,10820,0,0,0,0,369,6,0,0,
-9098,21093,0,31653,0,0,0,0,0,0,0,0,0,27143,0,0,16234,0,0,0,0,0,0,0,0,6020,31723,
-28293,0,0,0,0,1936,30695,0,0,0,0,0,52902,0,0,29512,10791,0,20420,0,0,16010,0,0,0
-,0,0,0,0,0,0,0,0,5324,0,0,0,0,0,0,0,0,0,0,0,0,13383,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,24328,0,0,0,0,0,0,40870,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,24648,0,0,0,0,0,0,0,7786,2852,0,0,0,0,0,0,0,0,0,44678,0,17925,0,0,105,53062,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,18762,0,0,40679,0,0,0,16165,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,20390,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,62310,1322,
-14247,0,0,0,0,0,0,0,0,1832,6052,0,0,11882,0,0,0,0,17668,0,28262,0,29542,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,28007,0,0,0,57223,
-1585,0,0,0,0,0,0,0,0,0,0,0,21162,0,0,62247,0,0,0,0,0,25414,0,0,0,0,0,0,0,0,0,0,0
-,0,0,0,0,0,0,0,0,0,0,0,0,36326,0,0,0,23845,0,0,0,0,0,0,0,2693,0,0,0,0,0,0,0,
-13125,0,31236,0,0,0,0,0,22502,0,0,0,0,0,0,5994,10309,0,0,0,7269,0,0,0,0,17929,0,
-1011,44647,0,0,0,0,0,14919,0,0,0,0,20586,5350,0,0,0,45702,0,13189,0,0,0,0,0,0,0,
-0,0,35782,17992,0,0,0,0,0,8203,0,0,0,0,0,0,56678,0,0,0,0,0,38087,4233,0,2127,0,0
-,0,0,0,0,0,0,0,0,10148,0,0,0,2021,0,0,0,0,0,0,0,47206,0,0,0,0,0,0,0,9220,0,0,0,0
-,19465,0,0,0,0,0,0,0,0,39206,0,38055,0,0,0,0,0,0,0,46982,0,0,0,0,0,22054,3850,0,
-0,0,0,0,0,0,55,0,10542,0,0,0,0,7239,0,0,0,0,0,59367,0,0,14761,0,0,0,0,43079,0,0,
-0,0,0,2726,0,0,9582,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,37478,0,
-0,0,31364,0,0,0,0,0,0,0,0,20393,8933,0,0,0,0,0,9380,0,0,0,0,16905,549,0,0,0,0,
-182,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1558,0,0,0,0,0,0,0,19242,0
-,0,0,0,0,0,24933,0,6276,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,42310,23595,
-24068,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,13191,6158,2567,0,0,268,47047,0,0,0,0,0,0,0,
-0,0,27940,0,0,0,0,0,26726,0,0,0,0,8200,1222,31562,0,0,0,0,0,0,0,0,0,2922,8231,
-8904,29157,0,0,0,0,0,0,0,0,23976,4836,0,0,0,0,0,0,0,0,0,0,0,0,31658,0,0,31685,0,
-0,2889,6213,0,0,0,0,0,13605,0,0,0,0,0,24772,0,0,0,0,0,0,0,0,0,0,20684,26468,
-24075,0,0,0,21193,0,715,679,0,0,0,0,0,0,3050,7654,0,0,0,13798,0,0,0,0,15,27973,0
-,0,8491,2086,0,0,0,43206,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,60391,0,0,0,0,0,0
-,0,25892,0,22276,0,34374,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,20165,0,0,25672,0
-,0,0,1811,24839,0,31044,0,0,25513,0,0,0,0,0,12810,0,0,62438,0,0,1325,0,364,3782,
-0,0,0,0,0,0,0,0,8042,19687,0,0,0,33415,0,0,0,0,0,0,0,0,0,0,0,7205,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,11844,0,0,0,0,3341,1543,6698,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-,0,0,0,0,0,0,0,0,0,0,0,0,29766,0,0,0,0,0,0,0,0,0,0,0,41158,0,24294,0,3844,12329,
-0,0,0,13738,0,0,0,0,0,0,0,0,26245,0,0,0,0,0,0,6378,0,343,4838,0,0,0,24358,11688,
-0,0,0,0,0,0,0,0,0,1489,34759,0,0,0,0,363,51974,1878,11013,0,0,32265,59782,0,0,0,
-28421,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,22756,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14089,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,29257,61222,0,30661,0,28327,0,0,0,0,0,0,0,0,0,0,0,0,0,
-27108,8843,0,9673,2084,0,0,0,16327,0,48455,0,0,0,0,0,0,4876,9316,0,0,0,0,0,0,0,0
-,0,0,0,0,9035,18852,0,0,0,0,0,0,0,0,0,0,0,0,0,4164,0,0,14827,1349,0,0,0,0,0,
-11909,0,0,0,0,0,0,0,0,0,21765,0,0,0,0,0,0,0,0,31272,63910,0,0,0,25924,0,0,0,0,0,
-0,0,0,0,44487,0,0,0,20612,0,0,27754,31428,0,0,0,0,0,0,0,17287,0,3943,0,0,0,63302
-,0,0,0,0,25256,19942,0,55142,0,39046,0,0,0,0,0,0,0,15367,0,0,0,0,0,0,0,0,0,0,0,
-28422,0,0,0,0,0,0,0,0,0,0,0,0,9576,63847,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-,0,0,25226,5734,0,0,0,0,0,0,13801,4997,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-,0,0,0,0,0,0,43942,1270,2566,6284,0,0,16230,0,0,0,20678,0,0,0,0,0,38855,0,0,0,0,
-29643,0,0,0,41,3655,0,0,0,0,0,14276,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,15686,0,0,0,15718,0,50694,0,0,16232,8007,0,0,0,5060,
-329,11591,51,0,0,0,0,0,0,0,0,0,13065,7302,27530,15366,0,24934,0,0,0,17828,0,0,
-4552,6311,0,0,0,0,0,0,0,0,0,0,0,47686,368,12103,10122,33830,0,0,599,18534,9579,
-49479,0,5668,0,0,0,0,0,0,0,0,0,13157,0,0,0,0,23274,14055,0,0,0,0,0,48903,0,0,0,0
-,0,0,1871,0,15434,0,0,0,16174,62470,0,0,0,0,0,0,0,0,0,0,0,7749,0,0,0,0,0,0,0,
-30501,0,0,0,0,25675,0,0,0,0,0,0,0,0,0,0,9285,0,0,25323,1669,0,0,0,0,0,0,0,0,0,0,
-0,3588,0,0,0,0,0,32902,0,0,4426,0,0,0,0,57959,0,0,0,0,0,0,29898,58278,0,0,0,0,
-11880,1220,0,0,0,41479,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,23141,0,0,0,0,0,0,0,0,0,0,0
-,0,0,42566,0,0,0,0,0,0,0,40167,9484,3493,0,0,0,0,0,21126,0,0,0,0,8649,18918,0,0,
-0,0,0,0,0,34886,2601,0,0,0,0,12518,0,0,0,0,7976,10311,0,0,0,0,0,0,0,45190,0,0,0,
-0,0,0,0,0,0,0,16842,20229,0,0,0,0,0,0,7528,4614,0,0,0,0,0,30086,0,0,0,1671,0,0,0
-,0,0,0,0,0,0,0,0,0,0,0,9896,6277,0,0,0,0,0,61191,0,41287,0,21956,0,0,20010,0,0,0
-,0,0,0,0,0,0,0,0,13195,0,0,0,0,1381,0,0,0,0,365,30951,24268,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,7044,0,0,0,0,0,0,0,0,0,0,27944,359,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-,0,0,28487,0,0,77,0,0,0,0,0,0,0,0,56775,12586,8421,0,0,0,0,0,0,26185,14599,0,0,
-8040,5702,12585,3109,0,0,0,0,0,21574,5388,0,0,0,0,0,0,0,5106,52454,0,0,0,0,0,0,0
-,0,1907,29895,0,6116,0,0,0,0,11081,5285,0,28069,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4104
-,0,0,0,0,0,0,41511,0,0,0,0,0,0,5262,0,0,0,503,4231,7720,34343,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7304,10374,1718,0,0,29127,0,0,0,0,0,0,0,0,23497,
-22567,6952,2340,0,0,0,0,0,0,0,0,20360,12453,0,45094,0,0,0,0,0,28582,0,0,0,0,680,
-0,0,0,0,0,0,0,0,0,0,0,0,0,23084,0,0,0,30696,0,0,0,0,45862,0,0,0,0,0,0,0,0,0,0,0,
-0,5580,6053,0,0,0,0,0,0,0,0,0,0,712,70,0,0,26091,11335,0,0,0,0,13612,0,13160,
-1926,435,51559,0,0,0,0,0,0,0,0,0,0,0,0,0,47302,19083,0,0,12742,0,1607,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,6155,37095,0,0,0,0,0,18948,7146,0,0,0,0,0,0,0,7848,
-2055,0,0,0,0,8910,0,19336,0,0,48070,8490,0,0,0,0,0,0,0,9932,56423,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,4133,0,0,0,0,0,0,0,0,0,43398,0,0,0,0,0,0,0,0,16173,0,0,0,0,0
-,0,0,32011,0,0,30918,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,26854,0,0,0,0,0,0,0,0,0,0,0,0
-,0,20389,0,0,0,0,0,0,0,0,0,0,0,0,0,0,18889,0,0,0,0,8965,0,0,0,44358,0,0,0,8997,0
-,34055,0,0,0,0,0,29350,0,0,501,17767,0,0,32457,60262,0,0,0,30886,0,0,3757,1063,0
-,0,0,25637,0,0,0,0,0,28068,0,26374,0,0,0,0,0,0,0,0,0,0,0,11684,0,0,0,0,0,0,24779
-,229,0,13766,0,0,7402,11525,0,0,0,0,0,0,0,0,26313,23686,0,0,29736,47527,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,27268,0,0,0,0,553,0,0,0,0,0,0,32038,0,0,0,0,1135,
-26596,0,0,12300,14631,0,0,0,43238,0,871,0,0,31496,0,8457,17669,0,12836,0,0,0,
-22726,0,38758,0,0,375,6564,0,0,0,0,0,0,0,0,0,0,0,0,170,18535,0,22948,0,0,32360,0
-,0,0,0,0,0,0,0,0,0,0,0,0,0,25764,0,0,0,0,0,0,0,0,0,0,0,15652,0,0,0,32774,0,0,0,0
-,0,0,0,0,0,28551,0,0,0,0,0,0,0,0,0,0,0,0,15145,0,0,0,21100,27654,0,0,0,0,0,0,
-4874,26215,0,1639,0,0,0,0,0,0,0,0,0,0,4169,0,0,0,0,0,7336,0,0,0,0,21572,0,0,0,0,
-0,0,0,0,0,24644,1675,2533,0,0,0,53318,0,13094,0,0,0,0,0,0,0,6246,0,22020,0,0,0,0
-,0,0,0,0,0,0,0,28453,5576,5124,0,0,0,0,0,0,0,0,0,0,0,0,0,27910,0,29382,18216,
-8583,0,0,0,39174,0,43558,0,0,0,0,0,0,0,0,0,11973,0,0,0,0,0,23397,0,0,0,0,6091,0,
-0,0,0,0,0,0,6474,16197,14217,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-,0,0,0,26728,0,567,48839,0,0,0,0,0,15271,0,0,31818,43974,2450,0,0,0,0,0,0,0,
-11368,9191,0,44454,0,0,0,0,0,0,14568,12293,0,0,0,8453,0,0,0,0,0,0,0,0,0,0,0,0,
-32040,0,0,0,0,0,0,0,0,0,0,0,0,902,0,0,0,27236,5612,11495,0,0,0,0,0,0,0,0,9194,
-23684,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,27430,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-26217,44870,0,0,0,0,0,0,5581,7173,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-52775,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,20968,18340,0,0,0,0,0,0,0,0,4107,11239
-,0,0,0,0,0,0,0,0,0,0,0,29381,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,21990,0,0,0,0
-,0,0,0,0,0,48806,0,0,0,32292,0,0,0,0,0,0,0,10884,0,0,0,0,0,0,0,0,0,0,27562,0,
-5643,0,0,0,0,0,0,0,0,0,3089,31525,0,19684,0,0,0,0,0,0,0,61415,0,0,0,0,0,36198,0,
-0,0,0,0,0,0,7908,0,0,0,0,872,743,0,0,0,0,0,0,0,0,1229,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,32484,0,0,0,0,0,34822,0,0,0,0,0,50726,0,0,0,0,7274,0,0,0,15304,
-11526,0,0,0,3047,0,0,0,0,0,0,22376,0,0,0,846,0,0,0,0,35815,0,0,0,23652,0,0,0,0,0
-,0,0,0,0,0,0,0,0,0,0,0,23721,2148,0,0,0,0,0,0,14856,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,1358,0,3082,0,0,0,848,10949,0,0,0,0,0,0,6504,0,0,14372,0,0,0,0,0,0
-,0,0,0,0,8201,9958,0,0,0,0,0,0,24266,0,0,0,0,0,0,0,0,26469,0,0,0,0,18604,2053,0,
-33511,0,0,0,0,0,9222,0,0,0,0,0,44006,0,0,0,0,0,0,0,0,0,0,0,41895,0,0,0,0,0,0,0,0
-,12044,390,0,0,0,0,0,4935,0,48646,0,56102,3052,16070,0,0,0,0,0,0,0,8612,9320,
-38311,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,500,0,0,0,0,42918,0,
-32550,0,0,0,0,0,0,0,0,27434,57926,17064,0,0,46502,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,26760,6756,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,624,0,5000,0,0,0,0,32293,0,
-0,0,0,0,0,0,0,0,0,0,0,0,26246,0,0,0,0,0,0,0,0,23,7301,0,0,0,36199,0,40838,0,0,0,
-0,0,0,0,0,0,0,0,0,27178,57350,0,0,12457,9317,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16810,0,0,0,14510,0,0,0,0,21319,0,0,0,13508,17,
-11365,0,0,0,0,5291,0,8329,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,27685,0,0,0,0,0,0,0,
-52006,0,0,0,7493,0,44263,0,0,0,0,0,0,0,0,9800,0,0,0,25676,61478,0,0,0,0,0,0,5773
-,0,0,0,0,41991,26057,0,0,0,0,0,0,0,0,0,0,22629,0,0,0,47783,362,1959,23468,0,0,0,
-10921,0,0,0,3150,0,0,0,0,0,0,0,0,0,0,0,32456,0,0,0,0,0,0,0,4559,3270,0,0,983,0,0
-,26343,0,33446,0,0,0,61767,0,48390,0,0,0,0,0,0,0,2790,0,39782,7849,0,0,0,0,0,0,0
-,1544,2183,0,0,0,0,0,0,0,0,4040,2471,20009,30020,0,0,11242,0,0,0,5578,53382,0,
-22631,0,0,0,0,0,0,0,0,0,0,0,12901,0,0,0,0,0,0,0,0,0,0,0,0,215,0,0,9030,0,0,0,0,0
-,0,265,1412,0,0,11626,3687,0,0,0,0,0,0,0,0,0,0,0,0,17449,24359,0,0,26729,40134,0
-,0,0,0,29768,61958,0,0,0,0,0,0,0,0,20908,0,0,0,0,0,11016,0,0,47462,21547,5926,0,
-0,14728,2983,24104,15301,0,0,0,0,0,32645,0,0,0,0,0,0,0,3300,0,0,0,15972,0,0,0,0,
-0,0,6634,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3076,0,30983,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,106,0,0,0,0,12775,0,0,0,0,7177,18022,0,0,0,0,0,22534,0,0,0,0,0,0,0,0,0,0,0,
-49894,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,27560,0,0,0,0,30278,10668,23877,0,
-0,0,0,0,0,0,29124,0,0,0,0,0,0,0,0,0,0,0,0,0,20870,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,44582,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,48454,0,0,0,0,6442,0,16330,22951,0,0
-,16904,0,0,0,0,644,0,0,0,40038,0,0,0,37222,0,0,0,9830,0,0,0,0,0,34919,0,0,0,0,0,
-0,0,0,0,0,0,13733,0,0,0,28196,0,0,0,0,0,19876,0,0,0,0,0,0,0,23558,0,11142,0,
-27781,0,0,0,0,13864,0,0,0,24682,47847,0,0,0,0,6890,0,0,0,0,0,3981,0,0,0,0,0,0,0,
-0,0,0,0,1772,0,0,0,0,0,0,0,3603,1991,0,27396,8652,0,18312,0,0,0,0,30054,0,0,0,0,
-0,0,0,11270,0,0,0,0,0,0,0,0,0,20708,0,0,0,0,338,0,0,0,0,0,0,0,7050,0,0,0,0,0,0,0
-,0,0,0,0,0,0,14862,0,0,3492,0,0,0,55878,0,0,0,16486,0,0,0,18119,0,0,0,0,0,0,2154
-,1284,0,0,23113,31751,0,0,29547,0,0,0,0,0,0,36647,0,0,0,0,0,0,0,0,0,0,0,18183,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,7913,0,0,0,0,20644,0,0,10508,0,0,0,0,0,0,0,0,0,0,0,0,
-43622,0,0,0,0,0,40966,0,0,0,0,0,0,0,0,0,0,246,901,11529,5191,0,0,0,0,0,0,0,0,0,0
-,0,24454,0,0,26665,27590,0,27397,0,0,0,0,0,0,23562,2949,0,0,30344,62214,0,47334,
-2026,18885,0,0,0,48678,0,0,0,22694,0,0,1972,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,15465,0,0,0,0,38822,0,0,0,0,945,32708,0,54791,0,14918,0,0,0,0,0,0,
-0,0,0,0,0,0,0,23396,0,0,0,0,0,0,5486,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7722,0,0,
-0,0,0,0,0,0,0,0,0,30856,64166,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,35206,0,0,0,30535,0,
-0,0,0,0,0,0,0,0,62663,0,0,1096,17574,31820,0,0,14375,4402,27207,0,0,21448,4676,0
-,0,0,0,16585,5094,0,0,0,0,0,0,0,0,4845,0,0,32870,0,0,0,0,0,0,0,0,0,0,31466,0,0,0
-,0,31783,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4522,16039,0,0,0,0,0,0,0,0,
-0,14469,0,0,0,0,0,0,0,0,0,0,7464,4773,0,0,0,0,0,0,0,0,18636,0,0,0,25640,0,0,0,0,
-0,0,2244,0,0,11818,0,1168,0,0,0,0,0,0,0,6540,23079,13770,7719,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,58150,528,
-34502,32682,0,0,12997,0,0,0,0,0,2214,0,0,0,0,0,58567,0,0,0,26375,0,0,0,0,0,0,0,0
-,0,26437,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,26121,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-,0,32005,22952,59047,0,13543,0,0,0,0,0,0,0,0,16328,0,0,33542,0,0,0,19782,0,0,0,
-16644,0,0,0,0,31688,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,10276,0,0,0,
-0,0,0,0,36327,0,0,29480,0,0,0,777,12709,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,27398,0,0,
-0,4455,9037,31397,0,9221,0,0,0,60487,20840,1796,0,0,0,0,0,0,0,0,8364,0,0,0,0,0,0
-,0,0,0,0,0,19752,44902,0,38566,0,0,18027,0,0,0,0,0,0,0,0,10662,0,0,0,0,0,11812,0
-,0,0,0,0,0,0,0,0,19910,0,0,0,45030,0,0,0,0,0,0,0,0,0,0,0,0,19978,5127,0,11620,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,19817,0,5579,9350,0,0,21002,19718,0,0,0,21926,0,0,0,0,0,0,0,0,0,0,0,0,0,20711,
-0,0,0,20197,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,40550,0,0,0,57510,0,0,0,53895,
-0,0,15017,0,17000,39367,2347,0,0,0,0,0,0,0,0,0,8588,0,0,0,0,0,3273,17862,3498,
-2085,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,19048,0,0,0,0,0,11978,58631,0,0,0,0
-,0,0,523,0,12969,198,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,28197,0,47846,0,0,0,0,0,0
-,0,0,0,4549,0,0,0,0,0,0,0,0,0,0,687,14917,748,8229,0,0,0,0,0,0,2476,12935,0,0,0,
-0,0,0,22792,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,27528,59142,0,0,20876,20134,0,0,0,
-0,440,12068,0,58951,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,48038,0,0,0,60999,0,0,0,0,
-0,0,0,0,0,0,0,0,0,15716,7498,5476,0,0,0,0,20202,37959,0,0,0,0,0,0,0,0,0,0,0,0,
-29801,0,5451,0,0,0,0,0,0,0,0,0,0,50790,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,24485,0
-,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,13573,0,0,22856,0,0,0,0,21927,0,0,0,0,0
-,0,9130,0,0,0,0,0,0,13732,0,0,0,0,0,0,0,0,0,0,2282,583,0,0,0,0,0,0,0,0,0,0,3726,
-26503,0,0,0,0,0,0,9258,0,0,0,0,0,0,0,0,21604,0,0,0,45574,0,0,0,0,0,20710,0,0,0,
-42694,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1163,6694,0,0,0,0,0,0,0,10948,0,0,0,29700,0,0,
-0,0,0,58823,3796,27399,20939,10180,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-19,29287,28649,14534,0,0,16428,45607,0,0,0,0,0,0,25322,0,4908,0,0,0,0,0,0,25476,
-29097,14246,11053,0,0,0,0,0,0,0,0,18502,0,0,0,44390,0,0,0,17765,0,0,0,0,0,0,
-24520,0,0,0,0,0,0,0,0,0,0,17319,0,0,0,0,0,0,0,0,0,0,0,0,0,28166,0,0,0,0,0,48198,
-0,0,31467,0,24585,0,0,0,0,18692,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,23596,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,7236,968,13637,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-3763,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14791,0,0,0,12324,0,12741,0,0,0
-,0,0,0,0,0,0,11108,0,0,0,0,4009,40295,20616,4357,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-15015,0,0,0,0,0,43751,0,0,0,0,0,0,0,0,0,0,0,23013,0,0,0,0,0,0,0,0,0,0,0,0,0,
-45542,0,0,0,0,0,0,0,0,0,23974,0,0,0,0,17480,20647,0,0,0,0,0,0,8876,0,0,40806,0,0
-,0,0,0,0,0,14502,17160,17764,0,0,31594,35431,0,0,2890,0,0,0,0,0,0,0,0,27524,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8228,0,56583,0,0,0,0,0,0,0,0,0,0,0,0,0
-,0,0,0,0,34278,0,0,0,0,0,0,0,0,0,0,0,0,0,2662,0,26724,0,0,0,0,0,0,0,64198,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,22281,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3049,
-54983,0,0,0,0,0,0,0,837,0,17604,0,0,0,0,0,28838,0,0,0,0,0,0,26312,0,0,3910,0,0,0
-,25830,0,0,0,0,0,8391,0,19845,19240,1092,0,0,5449,0,0,0,0,17188,0,0,0,0,0,0,0,0,
-0,10629,0,0,6671,61094,5832,8358,0,0,0,55078,0,0,0,0,0,29860,0,0,0,0,0,0,0,0,0,0
-,0,0,0,0,0,0,0,51494,0,28647,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,25989,0,0,30153,61318
-,0,0,0,0,0,0,0,24903,0,0,0,4388,0,42054,0,0,0,0,0,0,0,53158,0,0,0,0,0,0,0,50918,
-0,0,0,0,0,0,26251,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5929,2853,0,37126,
-7372,197,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2027,934,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,55686,0,0,5672,5447,0,62758,0,0,0,0,0,0,0,0,0,0,0,0,2923,0,556,1415,
-0,0,0,0,0,0,0,0,0,8645,0,9477,0,0,0,0,0,0,0,48742,0,0,0,0,0,0,0,0,0,0,24235,228,
-0,0,0,0,0,0,0,0,0,0,16970,18823,0,0,0,0,0,0,0,0,0,25158,0,0,0,0,0,18567,20072,
-2823,14313,1830,0,0,0,0,0,0,0,0,27048,23526,0,0,0,0,0,997,492,0,14730,16677,396,
-13574,0,0,0,41671,0,0,0,0,0,0,0,19045,0,0,0,421,17545,3110,0,0,0,0,0,0,0,0,0,0,0
-,0,0,0,0,47111,14475,56551,0,0,0,0,0,0,0,0,0,0,3697,0,0,0,0,0,0,49382,0,35559,0,
-0,0,0,40,0,11496,15621,0,8550,0,0,0,63462,0,0,0,0,0,0,0,36966,0,50406,0,46022,
-1001,0,0,12069,3249,0,0,0,0,0,0,0,0,0,0,0,0,0,15241,0,0,0,0,0,0,0,0,64743,0,0,0,
-0,0,58759,0,0,0,0,1136,26981,0,0,0,0,0,0,0,17732,0,0,0,17157,20011,6629,0,43879,
-0,0,0,13572,25128,10759,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,28676,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,875,24007,0,0,0,0,7628,0,0,0,0,0,12268,0,0,0,0,0,0,0,0,19300
-,23210,356,0,0,0,0,0,0,0,0,0,15236,0,0,0,0,0,49670,0,0,0,0,0,0,0,21764,0,0,0,0,0
-,0,0,0,0,0,0,0,0,0,0,0,13931,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,45799,0,0,436,3589,
-0,0,11402,0,0,0,0,0,0,0,0,0,0,62822,0,0,0,39814,588,0,0,0,0,0,0,27750,0,0,0,0,0,
-0,1609,22660,2346,18951,0,16068,0,0,0,0,0,0,5162,11110,0,0,0,0,15048,1060,0,7879
-,18280,326,0,14886,19656,0,7594,0,0,0,0,0,781,581,0,16198,0,0,0,0,0,0,1078,9892,
-0,0,0,0,0,0,0,0,0,0,4489,0,0,0,0,33798,0,0,0,54534,0,0,0,0,0,0,0,33158,0,0,0,0,0
-,0,0,0,0,42086,13834,2757,8456,16773,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3434,0,0,0,
-0,0,3946,29668,0,0,30634,36775,0,0,0,0,0,24901,0,16069,6280,0,0,0,0,41990,0,0,0,
-0,0,0,0,27365,0,0,0,0,0,0,0,0,0,0,1450,44807,0,0,0,32100,0,0,0,0,0,35110,0,0,0,0
-,0,0,0,0,17448,19591,0,0,0,0,0,0,0,0,0,0,0,0,1739,0,0,0,0,5511,0,0,0,32934,0,0,0
-,0,0,0,0,0,0,18180,0,0,0,23428,19754,0,0,31174,3021,31655,23464,0,0,0,0,0,0,
-57255,0,0,21292,64487,0,0,0,0,0,0,25802,9189,0,0,0,0,0,49254,0,0,0,0,0,0,0,0,0,0
-,5837,50023,0,0,0,0,0,0,0,0,0,15495,0,0,0,0,0,51942,0,0,0,0,0,0,0,0,28104,58662,
-0,50214,0,0,0,0,0,0,0,0,2988,0,22888,31812,0,0,0,0,0,2020,0,18916,0,0,0,0,0,0,0,
-23973,0,0,0,0,17516,11717,0,0,0,55911,0,0,0,0,0,0,0,2855,0,0,0,0,0,0,0,0,0,0,0,0
-,0,0,0,0,0,46822,0,24710,28586,0,0,0,1556,0,0,30117,0,0,22090,57127,3403,14087,0
-,0,0,0,0,0,0,0,0,0,1041,0,10633,6916,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,27269,0,0,13322,18055,0,29380,0,56454,0,0,120
-,0,0,8773,0,0,0,0,16040,0,0,0,0,0,0,0,27242,23781,0,1572,0,28134,0,0,1512,0,0,0,
-0,0,0,27684,0,38470,0,0,0,0,0,0,1513,8709,0,0,0,0,0,0,0,0,0,0,0,46566,0,0,0,0,
-28521,61159,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,24356,0,0,0,0,0,0,0,0,0,13028,0,
-5863,0,0,15693,0,0,0,0,0,0,0,1131,23398,0,0,0,0,0,0,0,26212,0,0,0,0,0,0,0,0,0,0,
-0,0,0,18404,0,0,0,0,1457,26183,0,0,2475,7110,0,0,0,0,27180,60166,0,0,0,20262,0,
-41862,0,0,0,0,0,0,0,0,0,0,2762,0,0,0,0,0,0,0,0,0,0,0,0,0,0,26148,0,0,0,0,0,0,0,0
-,0,28229,0,0,0,29254,0,0,0,0,0,0,0,0,0,0,27690,0,0,13636,12776,1862,0,0,0,0,0,0,
-17225,3271,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,28039,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-,0,0,0,0,0,0,0,0,0,4457,18117,0,2023,402,0,0,0,0,0,0,0,0,0,0,0,0,0,104,3654,0,0,
-0,0,0,0,0,0,18440,0,0,0,0,0,0,0,0,29861,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,22150,0,0,0,0,0,0,0,0,0,0,0,0,24074,0,0,0,0,0,0,0,0,12004,0,32358,
-0,0,3081,0,0,0,0,0,0,0,0,0,4749,0,0,0,0,0,0,0,0,0,0,0,10792,1799,21322,0,7880,
-12613,0,0,0,0,0,0,0,0,13993,0,0,0,16202,0,0,0,0,32102,0,37223,0,10500,0,0,0,0,0,
-0,0,0,32008,0,0,0,0,0,23816,3236,0,0,0,0,0,23237,0,0,5642,0,4684,294,0,0,0,0,0,0
-,0,0,0,0,0,0,0,0,0,0,0,0,0,26852,0,0,0,0,0,0,7148,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,7890,61798,939,0,0,56679,0,0,0,0,0,27078,202,5029,0,0,0,0,0,
-0,0,0,0,28005,0,0,15273,24741,5676,20452,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,55910,0,0
-,0,0,5069,27942,0,21092,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12517,0,0,0,0,0,0,
-0,0,0,0,0,0,21384,28260,0,2502,20108,0,0,0,0,0,0,0,0,0,0,0,0,46726,0,30790,0,0,0
-,0,0,14725,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1099,6372,0,0,0,12422,15182,0,8683,0,
-10665,19462,0,0,0,0,0,0,1590,0,31628,0,22632,19750,0,0,0,0,0,0,0,24198,0,0,0,0,0
-,50662,0,0,0,0,0,0,0,0,0,0,9131,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11015,0,0,0,0,0,0,0,
-0,16490,54695,0,0,0,0,0,0,0,0,12937,0,0,0,0,16004,0,0,0,0,0,0,0,0,0,2181,6923,0,
-0,0,0,0,0,0,15624,11302,0,0,5673,7559,0,0,14668,15684,0,0,0,0,0,0,24204,48134,0,
-24230,0,55527,0,0,3464,19141,0,0,0,0};
-
-#if defined(__cplusplus) || defined(c_plusplus)
-} /* extern "C" */
-#endif
diff --git a/BaseTools/Source/C/BrotliCompress/enc/encode.c b/BaseTools/Source/C/BrotliCompress/enc/encode.c
deleted file mode 100644
index 93824d620373..000000000000
--- a/BaseTools/Source/C/BrotliCompress/enc/encode.c
+++ /dev/null
@@ -1,1864 +0,0 @@
-/* Copyright 2013 Google Inc. All Rights Reserved.
-
- Distributed under MIT license.
- See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
-*/
-
-/* Implementation of Brotli compressor. */
-
-#include <brotli/encode.h>
-
-#include <stdlib.h> /* free, malloc */
-#include <string.h> /* memcpy, memset */
-
-#include "../common/constants.h"
-#include "../common/context.h"
-#include "../common/platform.h"
-#include "../common/version.h"
-#include "./backward_references.h"
-#include "./backward_references_hq.h"
-#include "./bit_cost.h"
-#include "./brotli_bit_stream.h"
-#include "./compress_fragment.h"
-#include "./compress_fragment_two_pass.h"
-#include "./encoder_dict.h"
-#include "./entropy_encode.h"
-#include "./fast_log.h"
-#include "./hash.h"
-#include "./histogram.h"
-#include "./memory.h"
-#include "./metablock.h"
-#include "./prefix.h"
-#include "./quality.h"
-#include "./ringbuffer.h"
-#include "./utf8_util.h"
-#include "./write_bits.h"
-
-#if defined(__cplusplus) || defined(c_plusplus)
-extern "C" {
-#endif
-
-#define COPY_ARRAY(dst, src) memcpy(dst, src, sizeof(src));
-
-typedef enum BrotliEncoderStreamState {
- /* Default state. */
- BROTLI_STREAM_PROCESSING = 0,
- /* Intermediate state; after next block is emitted, byte-padding should be
- performed before getting back to default state. */
- BROTLI_STREAM_FLUSH_REQUESTED = 1,
- /* Last metablock was produced; no more input is acceptable. */
- BROTLI_STREAM_FINISHED = 2,
- /* Flushing compressed block and writing meta-data block header. */
- BROTLI_STREAM_METADATA_HEAD = 3,
- /* Writing metadata block body. */
- BROTLI_STREAM_METADATA_BODY = 4
-} BrotliEncoderStreamState;
-
-typedef struct BrotliEncoderStateStruct {
- BrotliEncoderParams params;
-
- MemoryManager memory_manager_;
-
- HasherHandle hasher_;
- uint64_t input_pos_;
- RingBuffer ringbuffer_;
- size_t cmd_alloc_size_;
- Command* commands_;
- size_t num_commands_;
- size_t num_literals_;
- size_t last_insert_len_;
- uint64_t last_flush_pos_;
- uint64_t last_processed_pos_;
- int dist_cache_[BROTLI_NUM_DISTANCE_SHORT_CODES];
- int saved_dist_cache_[4];
- uint16_t last_bytes_;
- uint8_t last_bytes_bits_;
- uint8_t prev_byte_;
- uint8_t prev_byte2_;
- size_t storage_size_;
- uint8_t* storage_;
- /* Hash table for FAST_ONE_PASS_COMPRESSION_QUALITY mode. */
- int small_table_[1 << 10]; /* 4KiB */
- int* large_table_; /* Allocated only when needed */
- size_t large_table_size_;
- /* Command and distance prefix codes (each 64 symbols, stored back-to-back)
- used for the next block in FAST_ONE_PASS_COMPRESSION_QUALITY. The command
- prefix code is over a smaller alphabet with the following 64 symbols:
- 0 - 15: insert length code 0, copy length code 0 - 15, same distance
- 16 - 39: insert length code 0, copy length code 0 - 23
- 40 - 63: insert length code 0 - 23, copy length code 0
- Note that symbols 16 and 40 represent the same code in the full alphabet,
- but we do not use either of them in FAST_ONE_PASS_COMPRESSION_QUALITY. */
- uint8_t cmd_depths_[128];
- uint16_t cmd_bits_[128];
- /* The compressed form of the command and distance prefix codes for the next
- block in FAST_ONE_PASS_COMPRESSION_QUALITY. */
- uint8_t cmd_code_[512];
- size_t cmd_code_numbits_;
- /* Command and literal buffers for FAST_TWO_PASS_COMPRESSION_QUALITY. */
- uint32_t* command_buf_;
- uint8_t* literal_buf_;
-
- uint8_t* next_out_;
- size_t available_out_;
- size_t total_out_;
- /* Temporary buffer for padding flush bits or metadata block header / body. */
- union {
- uint64_t u64[2];
- uint8_t u8[16];
- } tiny_buf_;
- uint32_t remaining_metadata_bytes_;
- BrotliEncoderStreamState stream_state_;
-
- BROTLI_BOOL is_last_block_emitted_;
- BROTLI_BOOL is_initialized_;
-} BrotliEncoderStateStruct;
-
-static BROTLI_BOOL EnsureInitialized(BrotliEncoderState* s);
-
-static size_t InputBlockSize(BrotliEncoderState* s) {
- return (size_t)1 << s->params.lgblock;
-}
-
-static uint64_t UnprocessedInputSize(BrotliEncoderState* s) {
- return s->input_pos_ - s->last_processed_pos_;
-}
-
-static size_t RemainingInputBlockSize(BrotliEncoderState* s) {
- const uint64_t delta = UnprocessedInputSize(s);
- size_t block_size = InputBlockSize(s);
- if (delta >= block_size) return 0;
- return block_size - (size_t)delta;
-}
-
-BROTLI_BOOL BrotliEncoderSetParameter(
- BrotliEncoderState* state, BrotliEncoderParameter p, uint32_t value) {
- /* Changing parameters on the fly is not implemented yet. */
- if (state->is_initialized_) return BROTLI_FALSE;
- /* TODO: Validate/clamp parameters here. */
- switch (p) {
- case BROTLI_PARAM_MODE:
- state->params.mode = (BrotliEncoderMode)value;
- return BROTLI_TRUE;
-
- case BROTLI_PARAM_QUALITY:
- state->params.quality = (int)value;
- return BROTLI_TRUE;
-
- case BROTLI_PARAM_LGWIN:
- state->params.lgwin = (int)value;
- return BROTLI_TRUE;
-
- case BROTLI_PARAM_LGBLOCK:
- state->params.lgblock = (int)value;
- return BROTLI_TRUE;
-
- case BROTLI_PARAM_DISABLE_LITERAL_CONTEXT_MODELING:
- if ((value != 0) && (value != 1)) return BROTLI_FALSE;
- state->params.disable_literal_context_modeling = TO_BROTLI_BOOL(!!value);
- return BROTLI_TRUE;
-
- case BROTLI_PARAM_SIZE_HINT:
- state->params.size_hint = value;
- return BROTLI_TRUE;
-
- case BROTLI_PARAM_LARGE_WINDOW:
- state->params.large_window = TO_BROTLI_BOOL(!!value);
- return BROTLI_TRUE;
-
- case BROTLI_PARAM_NPOSTFIX:
- state->params.dist.distance_postfix_bits = value;
- return BROTLI_TRUE;
-
- case BROTLI_PARAM_NDIRECT:
- state->params.dist.num_direct_distance_codes = value;
- return BROTLI_TRUE;
-
- default: return BROTLI_FALSE;
- }
-}
-
-/* Wraps 64-bit input position to 32-bit ring-buffer position preserving
- "not-a-first-lap" feature. */
-static uint32_t WrapPosition(uint64_t position) {
- uint32_t result = (uint32_t)position;
- uint64_t gb = position >> 30;
- if (gb > 2) {
- /* Wrap every 2GiB; The first 3GB are continuous. */
- result = (result & ((1u << 30) - 1)) | ((uint32_t)((gb - 1) & 1) + 1) << 30;
- }
- return result;
-}
-
-static uint8_t* GetBrotliStorage(BrotliEncoderState* s, size_t size) {
- MemoryManager* m = &s->memory_manager_;
- if (s->storage_size_ < size) {
- BROTLI_FREE(m, s->storage_);
- s->storage_ = BROTLI_ALLOC(m, uint8_t, size);
- if (BROTLI_IS_OOM(m)) return NULL;
- s->storage_size_ = size;
- }
- return s->storage_;
-}
-
-static size_t HashTableSize(size_t max_table_size, size_t input_size) {
- size_t htsize = 256;
- while (htsize < max_table_size && htsize < input_size) {
- htsize <<= 1;
- }
- return htsize;
-}
-
-static int* GetHashTable(BrotliEncoderState* s, int quality,
- size_t input_size, size_t* table_size) {
- /* Use smaller hash table when input.size() is smaller, since we
- fill the table, incurring O(hash table size) overhead for
- compression, and if the input is short, we won't need that
- many hash table entries anyway. */
- MemoryManager* m = &s->memory_manager_;
- const size_t max_table_size = MaxHashTableSize(quality);
- size_t htsize = HashTableSize(max_table_size, input_size);
- int* table;
- BROTLI_DCHECK(max_table_size >= 256);
- if (quality == FAST_ONE_PASS_COMPRESSION_QUALITY) {
- /* Only odd shifts are supported by fast-one-pass. */
- if ((htsize & 0xAAAAA) == 0) {
- htsize <<= 1;
- }
- }
-
- if (htsize <= sizeof(s->small_table_) / sizeof(s->small_table_[0])) {
- table = s->small_table_;
- } else {
- if (htsize > s->large_table_size_) {
- s->large_table_size_ = htsize;
- BROTLI_FREE(m, s->large_table_);
- s->large_table_ = BROTLI_ALLOC(m, int, htsize);
- if (BROTLI_IS_OOM(m)) return 0;
- }
- table = s->large_table_;
- }
-
- *table_size = htsize;
- memset(table, 0, htsize * sizeof(*table));
- return table;
-}
-
-static void EncodeWindowBits(int lgwin, BROTLI_BOOL large_window,
- uint16_t* last_bytes, uint8_t* last_bytes_bits) {
- if (large_window) {
- *last_bytes = (uint16_t)(((lgwin & 0x3F) << 8) | 0x11);
- *last_bytes_bits = 14;
- } else {
- if (lgwin == 16) {
- *last_bytes = 0;
- *last_bytes_bits = 1;
- } else if (lgwin == 17) {
- *last_bytes = 1;
- *last_bytes_bits = 7;
- } else if (lgwin > 17) {
- *last_bytes = (uint16_t)(((lgwin - 17) << 1) | 0x01);
- *last_bytes_bits = 4;
- } else {
- *last_bytes = (uint16_t)(((lgwin - 8) << 4) | 0x01);
- *last_bytes_bits = 7;
- }
- }
-}
-
-/* Initializes the command and distance prefix codes for the first block. */
-static void InitCommandPrefixCodes(uint8_t cmd_depths[128],
- uint16_t cmd_bits[128],
- uint8_t cmd_code[512],
- size_t* cmd_code_numbits) {
- static const uint8_t kDefaultCommandDepths[128] = {
- 0, 4, 4, 5, 6, 6, 7, 7, 7, 7, 7, 8, 8, 8, 8, 8,
- 0, 0, 0, 4, 4, 4, 4, 4, 5, 5, 6, 6, 6, 6, 7, 7,
- 7, 7, 10, 10, 10, 10, 10, 10, 0, 4, 4, 5, 5, 5, 6, 6,
- 7, 8, 8, 9, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
- 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 6, 6, 6, 6, 6, 6, 5, 5, 5, 5, 5, 5, 4, 4, 4, 4,
- 4, 4, 4, 5, 5, 5, 5, 5, 5, 6, 6, 7, 7, 7, 8, 10,
- 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
- };
- static const uint16_t kDefaultCommandBits[128] = {
- 0, 0, 8, 9, 3, 35, 7, 71,
- 39, 103, 23, 47, 175, 111, 239, 31,
- 0, 0, 0, 4, 12, 2, 10, 6,
- 13, 29, 11, 43, 27, 59, 87, 55,
- 15, 79, 319, 831, 191, 703, 447, 959,
- 0, 14, 1, 25, 5, 21, 19, 51,
- 119, 159, 95, 223, 479, 991, 63, 575,
- 127, 639, 383, 895, 255, 767, 511, 1023,
- 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 27, 59, 7, 39, 23, 55, 30, 1, 17, 9, 25, 5, 0, 8, 4, 12,
- 2, 10, 6, 21, 13, 29, 3, 19, 11, 15, 47, 31, 95, 63, 127, 255,
- 767, 2815, 1791, 3839, 511, 2559, 1535, 3583, 1023, 3071, 2047, 4095,
- };
- static const uint8_t kDefaultCommandCode[] = {
- 0xff, 0x77, 0xd5, 0xbf, 0xe7, 0xde, 0xea, 0x9e, 0x51, 0x5d, 0xde, 0xc6,
- 0x70, 0x57, 0xbc, 0x58, 0x58, 0x58, 0xd8, 0xd8, 0x58, 0xd5, 0xcb, 0x8c,
- 0xea, 0xe0, 0xc3, 0x87, 0x1f, 0x83, 0xc1, 0x60, 0x1c, 0x67, 0xb2, 0xaa,
- 0x06, 0x83, 0xc1, 0x60, 0x30, 0x18, 0xcc, 0xa1, 0xce, 0x88, 0x54, 0x94,
- 0x46, 0xe1, 0xb0, 0xd0, 0x4e, 0xb2, 0xf7, 0x04, 0x00,
- };
- static const size_t kDefaultCommandCodeNumBits = 448;
- COPY_ARRAY(cmd_depths, kDefaultCommandDepths);
- COPY_ARRAY(cmd_bits, kDefaultCommandBits);
-
- /* Initialize the pre-compressed form of the command and distance prefix
- codes. */
- COPY_ARRAY(cmd_code, kDefaultCommandCode);
- *cmd_code_numbits = kDefaultCommandCodeNumBits;
-}
-
-/* Decide about the context map based on the ability of the prediction
- ability of the previous byte UTF8-prefix on the next byte. The
- prediction ability is calculated as Shannon entropy. Here we need
- Shannon entropy instead of 'BitsEntropy' since the prefix will be
- encoded with the remaining 6 bits of the following byte, and
- BitsEntropy will assume that symbol to be stored alone using Huffman
- coding. */
-static void ChooseContextMap(int quality,
- uint32_t* bigram_histo,
- size_t* num_literal_contexts,
- const uint32_t** literal_context_map) {
- static const uint32_t kStaticContextMapContinuation[64] = {
- 1, 1, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- };
- static const uint32_t kStaticContextMapSimpleUTF8[64] = {
- 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- };
-
- uint32_t monogram_histo[3] = { 0 };
- uint32_t two_prefix_histo[6] = { 0 };
- size_t total;
- size_t i;
- size_t dummy;
- double entropy[4];
- for (i = 0; i < 9; ++i) {
- monogram_histo[i % 3] += bigram_histo[i];
- two_prefix_histo[i % 6] += bigram_histo[i];
- }
- entropy[1] = ShannonEntropy(monogram_histo, 3, &dummy);
- entropy[2] = (ShannonEntropy(two_prefix_histo, 3, &dummy) +
- ShannonEntropy(two_prefix_histo + 3, 3, &dummy));
- entropy[3] = 0;
- for (i = 0; i < 3; ++i) {
- entropy[3] += ShannonEntropy(bigram_histo + 3 * i, 3, &dummy);
- }
-
- total = monogram_histo[0] + monogram_histo[1] + monogram_histo[2];
- BROTLI_DCHECK(total != 0);
- entropy[0] = 1.0 / (double)total;
- entropy[1] *= entropy[0];
- entropy[2] *= entropy[0];
- entropy[3] *= entropy[0];
-
- if (quality < MIN_QUALITY_FOR_HQ_CONTEXT_MODELING) {
- /* 3 context models is a bit slower, don't use it at lower qualities. */
- entropy[3] = entropy[1] * 10;
- }
- /* If expected savings by symbol are less than 0.2 bits, skip the
- context modeling -- in exchange for faster decoding speed. */
- if (entropy[1] - entropy[2] < 0.2 &&
- entropy[1] - entropy[3] < 0.2) {
- *num_literal_contexts = 1;
- } else if (entropy[2] - entropy[3] < 0.02) {
- *num_literal_contexts = 2;
- *literal_context_map = kStaticContextMapSimpleUTF8;
- } else {
- *num_literal_contexts = 3;
- *literal_context_map = kStaticContextMapContinuation;
- }
-}
-
-/* Decide if we want to use a more complex static context map containing 13
- context values, based on the entropy reduction of histograms over the
- first 5 bits of literals. */
-static BROTLI_BOOL ShouldUseComplexStaticContextMap(const uint8_t* input,
- size_t start_pos, size_t length, size_t mask, int quality, size_t size_hint,
- size_t* num_literal_contexts, const uint32_t** literal_context_map) {
- static const uint32_t kStaticContextMapComplexUTF8[64] = {
- 11, 11, 12, 12, /* 0 special */
- 0, 0, 0, 0, /* 4 lf */
- 1, 1, 9, 9, /* 8 space */
- 2, 2, 2, 2, /* !, first after space/lf and after something else. */
- 1, 1, 1, 1, /* " */
- 8, 3, 3, 3, /* % */
- 1, 1, 1, 1, /* ({[ */
- 2, 2, 2, 2, /* }]) */
- 8, 4, 4, 4, /* :; */
- 8, 7, 4, 4, /* . */
- 8, 0, 0, 0, /* > */
- 3, 3, 3, 3, /* [0..9] */
- 5, 5, 10, 5, /* [A-Z] */
- 5, 5, 10, 5,
- 6, 6, 6, 6, /* [a-z] */
- 6, 6, 6, 6,
- };
- BROTLI_UNUSED(quality);
- /* Try the more complex static context map only for long data. */
- if (size_hint < (1 << 20)) {
- return BROTLI_FALSE;
- } else {
- const size_t end_pos = start_pos + length;
- /* To make entropy calculations faster and to fit on the stack, we collect
- histograms over the 5 most significant bits of literals. One histogram
- without context and 13 additional histograms for each context value. */
- uint32_t combined_histo[32] = { 0 };
- uint32_t context_histo[13][32] = { { 0 } };
- uint32_t total = 0;
- double entropy[3];
- size_t dummy;
- size_t i;
- ContextLut utf8_lut = BROTLI_CONTEXT_LUT(CONTEXT_UTF8);
- for (; start_pos + 64 <= end_pos; start_pos += 4096) {
- const size_t stride_end_pos = start_pos + 64;
- uint8_t prev2 = input[start_pos & mask];
- uint8_t prev1 = input[(start_pos + 1) & mask];
- size_t pos;
- /* To make the analysis of the data faster we only examine 64 byte long
- strides at every 4kB intervals. */
- for (pos = start_pos + 2; pos < stride_end_pos; ++pos) {
- const uint8_t literal = input[pos & mask];
- const uint8_t context = (uint8_t)kStaticContextMapComplexUTF8[
- BROTLI_CONTEXT(prev1, prev2, utf8_lut)];
- ++total;
- ++combined_histo[literal >> 3];
- ++context_histo[context][literal >> 3];
- prev2 = prev1;
- prev1 = literal;
- }
- }
- entropy[1] = ShannonEntropy(combined_histo, 32, &dummy);
- entropy[2] = 0;
- for (i = 0; i < 13; ++i) {
- entropy[2] += ShannonEntropy(&context_histo[i][0], 32, &dummy);
- }
- entropy[0] = 1.0 / (double)total;
- entropy[1] *= entropy[0];
- entropy[2] *= entropy[0];
- /* The triggering heuristics below were tuned by compressing the individual
- files of the silesia corpus. If we skip this kind of context modeling
- for not very well compressible input (i.e. entropy using context modeling
- is 60% of maximal entropy) or if expected savings by symbol are less
- than 0.2 bits, then in every case when it triggers, the final compression
- ratio is improved. Note however that this heuristics might be too strict
- for some cases and could be tuned further. */
- if (entropy[2] > 3.0 || entropy[1] - entropy[2] < 0.2) {
- return BROTLI_FALSE;
- } else {
- *num_literal_contexts = 13;
- *literal_context_map = kStaticContextMapComplexUTF8;
- return BROTLI_TRUE;
- }
- }
-}
-
-static void DecideOverLiteralContextModeling(const uint8_t* input,
- size_t start_pos, size_t length, size_t mask, int quality, size_t size_hint,
- size_t* num_literal_contexts, const uint32_t** literal_context_map) {
- if (quality < MIN_QUALITY_FOR_CONTEXT_MODELING || length < 64) {
- return;
- } else if (ShouldUseComplexStaticContextMap(
- input, start_pos, length, mask, quality, size_hint,
- num_literal_contexts, literal_context_map)) {
- /* Context map was already set, nothing else to do. */
- } else {
- /* Gather bi-gram data of the UTF8 byte prefixes. To make the analysis of
- UTF8 data faster we only examine 64 byte long strides at every 4kB
- intervals. */
- const size_t end_pos = start_pos + length;
- uint32_t bigram_prefix_histo[9] = { 0 };
- for (; start_pos + 64 <= end_pos; start_pos += 4096) {
- static const int lut[4] = { 0, 0, 1, 2 };
- const size_t stride_end_pos = start_pos + 64;
- int prev = lut[input[start_pos & mask] >> 6] * 3;
- size_t pos;
- for (pos = start_pos + 1; pos < stride_end_pos; ++pos) {
- const uint8_t literal = input[pos & mask];
- ++bigram_prefix_histo[prev + lut[literal >> 6]];
- prev = lut[literal >> 6] * 3;
- }
- }
- ChooseContextMap(quality, &bigram_prefix_histo[0], num_literal_contexts,
- literal_context_map);
- }
-}
-
-static BROTLI_BOOL ShouldCompress(
- const uint8_t* data, const size_t mask, const uint64_t last_flush_pos,
- const size_t bytes, const size_t num_literals, const size_t num_commands) {
- if (num_commands < (bytes >> 8) + 2) {
- if (num_literals > 0.99 * (double)bytes) {
- uint32_t literal_histo[256] = { 0 };
- static const uint32_t kSampleRate = 13;
- static const double kMinEntropy = 7.92;
- const double bit_cost_threshold =
- (double)bytes * kMinEntropy / kSampleRate;
- size_t t = (bytes + kSampleRate - 1) / kSampleRate;
- uint32_t pos = (uint32_t)last_flush_pos;
- size_t i;
- for (i = 0; i < t; i++) {
- ++literal_histo[data[pos & mask]];
- pos += kSampleRate;
- }
- if (BitsEntropy(literal_histo, 256) > bit_cost_threshold) {
- return BROTLI_FALSE;
- }
- }
- }
- return BROTLI_TRUE;
-}
-
-/* Chooses the literal context mode for a metablock */
-static ContextType ChooseContextMode(const BrotliEncoderParams* params,
- const uint8_t* data, const size_t pos, const size_t mask,
- const size_t length) {
- /* We only do the computation for the option of something else than
- CONTEXT_UTF8 for the highest qualities */
- if (params->quality >= MIN_QUALITY_FOR_HQ_BLOCK_SPLITTING &&
- !BrotliIsMostlyUTF8(data, pos, mask, length, kMinUTF8Ratio)) {
- return CONTEXT_SIGNED;
- }
- return CONTEXT_UTF8;
-}
-
-static void WriteMetaBlockInternal(MemoryManager* m,
- const uint8_t* data,
- const size_t mask,
- const uint64_t last_flush_pos,
- const size_t bytes,
- const BROTLI_BOOL is_last,
- ContextType literal_context_mode,
- const BrotliEncoderParams* params,
- const uint8_t prev_byte,
- const uint8_t prev_byte2,
- const size_t num_literals,
- const size_t num_commands,
- Command* commands,
- const int* saved_dist_cache,
- int* dist_cache,
- size_t* storage_ix,
- uint8_t* storage) {
- const uint32_t wrapped_last_flush_pos = WrapPosition(last_flush_pos);
- uint16_t last_bytes;
- uint8_t last_bytes_bits;
- ContextLut literal_context_lut = BROTLI_CONTEXT_LUT(literal_context_mode);
- BrotliEncoderParams block_params = *params;
-
- if (bytes == 0) {
- /* Write the ISLAST and ISEMPTY bits. */
- BrotliWriteBits(2, 3, storage_ix, storage);
- *storage_ix = (*storage_ix + 7u) & ~7u;
- return;
- }
-
- if (!ShouldCompress(data, mask, last_flush_pos, bytes,
- num_literals, num_commands)) {
- /* Restore the distance cache, as its last update by
- CreateBackwardReferences is now unused. */
- memcpy(dist_cache, saved_dist_cache, 4 * sizeof(dist_cache[0]));
- BrotliStoreUncompressedMetaBlock(is_last, data,
- wrapped_last_flush_pos, mask, bytes,
- storage_ix, storage);
- return;
- }
-
- BROTLI_DCHECK(*storage_ix <= 14);
- last_bytes = (uint16_t)((storage[1] << 8) | storage[0]);
- last_bytes_bits = (uint8_t)(*storage_ix);
- if (params->quality <= MAX_QUALITY_FOR_STATIC_ENTROPY_CODES) {
- BrotliStoreMetaBlockFast(m, data, wrapped_last_flush_pos,
- bytes, mask, is_last, params,
- commands, num_commands,
- storage_ix, storage);
- if (BROTLI_IS_OOM(m)) return;
- } else if (params->quality < MIN_QUALITY_FOR_BLOCK_SPLIT) {
- BrotliStoreMetaBlockTrivial(m, data, wrapped_last_flush_pos,
- bytes, mask, is_last, params,
- commands, num_commands,
- storage_ix, storage);
- if (BROTLI_IS_OOM(m)) return;
- } else {
- MetaBlockSplit mb;
- InitMetaBlockSplit(&mb);
- if (params->quality < MIN_QUALITY_FOR_HQ_BLOCK_SPLITTING) {
- size_t num_literal_contexts = 1;
- const uint32_t* literal_context_map = NULL;
- if (!params->disable_literal_context_modeling) {
- DecideOverLiteralContextModeling(
- data, wrapped_last_flush_pos, bytes, mask, params->quality,
- params->size_hint, &num_literal_contexts,
- &literal_context_map);
- }
- BrotliBuildMetaBlockGreedy(m, data, wrapped_last_flush_pos, mask,
- prev_byte, prev_byte2, literal_context_lut, num_literal_contexts,
- literal_context_map, commands, num_commands, &mb);
- if (BROTLI_IS_OOM(m)) return;
- } else {
- BrotliBuildMetaBlock(m, data, wrapped_last_flush_pos, mask, &block_params,
- prev_byte, prev_byte2,
- commands, num_commands,
- literal_context_mode,
- &mb);
- if (BROTLI_IS_OOM(m)) return;
- }
- if (params->quality >= MIN_QUALITY_FOR_OPTIMIZE_HISTOGRAMS) {
- /* The number of distance symbols effectively used for distance
- histograms. It might be less than distance alphabet size
- for "Large Window Brotli" (32-bit). */
- uint32_t num_effective_dist_codes = block_params.dist.alphabet_size;
- if (num_effective_dist_codes > BROTLI_NUM_HISTOGRAM_DISTANCE_SYMBOLS) {
- num_effective_dist_codes = BROTLI_NUM_HISTOGRAM_DISTANCE_SYMBOLS;
- }
- BrotliOptimizeHistograms(num_effective_dist_codes, &mb);
- }
- BrotliStoreMetaBlock(m, data, wrapped_last_flush_pos, bytes, mask,
- prev_byte, prev_byte2,
- is_last,
- &block_params,
- literal_context_mode,
- commands, num_commands,
- &mb,
- storage_ix, storage);
- if (BROTLI_IS_OOM(m)) return;
- DestroyMetaBlockSplit(m, &mb);
- }
- if (bytes + 4 < (*storage_ix >> 3)) {
- /* Restore the distance cache and last byte. */
- memcpy(dist_cache, saved_dist_cache, 4 * sizeof(dist_cache[0]));
- storage[0] = (uint8_t)last_bytes;
- storage[1] = (uint8_t)(last_bytes >> 8);
- *storage_ix = last_bytes_bits;
- BrotliStoreUncompressedMetaBlock(is_last, data,
- wrapped_last_flush_pos, mask,
- bytes, storage_ix, storage);
- }
-}
-
-static void ChooseDistanceParams(BrotliEncoderParams* params) {
- uint32_t distance_postfix_bits = 0;
- uint32_t num_direct_distance_codes = 0;
-
- if (params->quality >= MIN_QUALITY_FOR_NONZERO_DISTANCE_PARAMS) {
- uint32_t ndirect_msb;
- if (params->mode == BROTLI_MODE_FONT) {
- distance_postfix_bits = 1;
- num_direct_distance_codes = 12;
- } else {
- distance_postfix_bits = params->dist.distance_postfix_bits;
- num_direct_distance_codes = params->dist.num_direct_distance_codes;
- }
- ndirect_msb = (num_direct_distance_codes >> distance_postfix_bits) & 0x0F;
- if (distance_postfix_bits > BROTLI_MAX_NPOSTFIX ||
- num_direct_distance_codes > BROTLI_MAX_NDIRECT ||
- (ndirect_msb << distance_postfix_bits) != num_direct_distance_codes) {
- distance_postfix_bits = 0;
- num_direct_distance_codes = 0;
- }
- }
-
- BrotliInitDistanceParams(
- params, distance_postfix_bits, num_direct_distance_codes);
-}
-
-static BROTLI_BOOL EnsureInitialized(BrotliEncoderState* s) {
- if (BROTLI_IS_OOM(&s->memory_manager_)) return BROTLI_FALSE;
- if (s->is_initialized_) return BROTLI_TRUE;
-
- SanitizeParams(&s->params);
- s->params.lgblock = ComputeLgBlock(&s->params);
- ChooseDistanceParams(&s->params);
-
- s->remaining_metadata_bytes_ = BROTLI_UINT32_MAX;
-
- RingBufferSetup(&s->params, &s->ringbuffer_);
-
- /* Initialize last byte with stream header. */
- {
- int lgwin = s->params.lgwin;
- if (s->params.quality == FAST_ONE_PASS_COMPRESSION_QUALITY ||
- s->params.quality == FAST_TWO_PASS_COMPRESSION_QUALITY) {
- lgwin = BROTLI_MAX(int, lgwin, 18);
- }
- EncodeWindowBits(lgwin, s->params.large_window,
- &s->last_bytes_, &s->last_bytes_bits_);
- }
-
- if (s->params.quality == FAST_ONE_PASS_COMPRESSION_QUALITY) {
- InitCommandPrefixCodes(s->cmd_depths_, s->cmd_bits_,
- s->cmd_code_, &s->cmd_code_numbits_);
- }
-
- s->is_initialized_ = BROTLI_TRUE;
- return BROTLI_TRUE;
-}
-
-static void BrotliEncoderInitParams(BrotliEncoderParams* params) {
- params->mode = BROTLI_DEFAULT_MODE;
- params->large_window = BROTLI_FALSE;
- params->quality = BROTLI_DEFAULT_QUALITY;
- params->lgwin = BROTLI_DEFAULT_WINDOW;
- params->lgblock = 0;
- params->size_hint = 0;
- params->disable_literal_context_modeling = BROTLI_FALSE;
- BrotliInitEncoderDictionary(¶ms->dictionary);
- params->dist.distance_postfix_bits = 0;
- params->dist.num_direct_distance_codes = 0;
- params->dist.alphabet_size =
- BROTLI_DISTANCE_ALPHABET_SIZE(0, 0, BROTLI_MAX_DISTANCE_BITS);
- params->dist.max_distance = BROTLI_MAX_DISTANCE;
-}
-
-static void BrotliEncoderInitState(BrotliEncoderState* s) {
- BrotliEncoderInitParams(&s->params);
- s->input_pos_ = 0;
- s->num_commands_ = 0;
- s->num_literals_ = 0;
- s->last_insert_len_ = 0;
- s->last_flush_pos_ = 0;
- s->last_processed_pos_ = 0;
- s->prev_byte_ = 0;
- s->prev_byte2_ = 0;
- s->storage_size_ = 0;
- s->storage_ = 0;
- s->hasher_ = NULL;
- s->large_table_ = NULL;
- s->large_table_size_ = 0;
- s->cmd_code_numbits_ = 0;
- s->command_buf_ = NULL;
- s->literal_buf_ = NULL;
- s->next_out_ = NULL;
- s->available_out_ = 0;
- s->total_out_ = 0;
- s->stream_state_ = BROTLI_STREAM_PROCESSING;
- s->is_last_block_emitted_ = BROTLI_FALSE;
- s->is_initialized_ = BROTLI_FALSE;
-
- RingBufferInit(&s->ringbuffer_);
-
- s->commands_ = 0;
- s->cmd_alloc_size_ = 0;
-
- /* Initialize distance cache. */
- s->dist_cache_[0] = 4;
- s->dist_cache_[1] = 11;
- s->dist_cache_[2] = 15;
- s->dist_cache_[3] = 16;
- /* Save the state of the distance cache in case we need to restore it for
- emitting an uncompressed block. */
- memcpy(s->saved_dist_cache_, s->dist_cache_, sizeof(s->saved_dist_cache_));
-}
-
-BrotliEncoderState* BrotliEncoderCreateInstance(
- brotli_alloc_func alloc_func, brotli_free_func free_func, void* opaque) {
- BrotliEncoderState* state = 0;
- if (!alloc_func && !free_func) {
- state = (BrotliEncoderState*)malloc(sizeof(BrotliEncoderState));
- } else if (alloc_func && free_func) {
- state = (BrotliEncoderState*)alloc_func(opaque, sizeof(BrotliEncoderState));
- }
- if (state == 0) {
- /* BROTLI_DUMP(); */
- return 0;
- }
- BrotliInitMemoryManager(
- &state->memory_manager_, alloc_func, free_func, opaque);
- BrotliEncoderInitState(state);
- return state;
-}
-
-static void BrotliEncoderCleanupState(BrotliEncoderState* s) {
- MemoryManager* m = &s->memory_manager_;
- if (BROTLI_IS_OOM(m)) {
- BrotliWipeOutMemoryManager(m);
- return;
- }
- BROTLI_FREE(m, s->storage_);
- BROTLI_FREE(m, s->commands_);
- RingBufferFree(m, &s->ringbuffer_);
- DestroyHasher(m, &s->hasher_);
- BROTLI_FREE(m, s->large_table_);
- BROTLI_FREE(m, s->command_buf_);
- BROTLI_FREE(m, s->literal_buf_);
-}
-
-/* Deinitializes and frees BrotliEncoderState instance. */
-void BrotliEncoderDestroyInstance(BrotliEncoderState* state) {
- if (!state) {
- return;
- } else {
- MemoryManager* m = &state->memory_manager_;
- brotli_free_func free_func = m->free_func;
- void* opaque = m->opaque;
- BrotliEncoderCleanupState(state);
- free_func(opaque, state);
- }
-}
-
-/*
- Copies the given input data to the internal ring buffer of the compressor.
- No processing of the data occurs at this time and this function can be
- called multiple times before calling WriteBrotliData() to process the
- accumulated input. At most input_block_size() bytes of input data can be
- copied to the ring buffer, otherwise the next WriteBrotliData() will fail.
- */
-static void CopyInputToRingBuffer(BrotliEncoderState* s,
- const size_t input_size,
- const uint8_t* input_buffer) {
- RingBuffer* ringbuffer_ = &s->ringbuffer_;
- MemoryManager* m = &s->memory_manager_;
- RingBufferWrite(m, input_buffer, input_size, ringbuffer_);
- if (BROTLI_IS_OOM(m)) return;
- s->input_pos_ += input_size;
-
- /* TL;DR: If needed, initialize 7 more bytes in the ring buffer to make the
- hashing not depend on uninitialized data. This makes compression
- deterministic and it prevents uninitialized memory warnings in Valgrind.
- Even without erasing, the output would be valid (but nondeterministic).
-
- Background information: The compressor stores short (at most 8 bytes)
- substrings of the input already read in a hash table, and detects
- repetitions by looking up such substrings in the hash table. If it
- can find a substring, it checks whether the substring is really there
- in the ring buffer (or it's just a hash collision). Should the hash
- table become corrupt, this check makes sure that the output is
- still valid, albeit the compression ratio would be bad.
-
- The compressor populates the hash table from the ring buffer as it's
- reading new bytes from the input. However, at the last few indexes of
- the ring buffer, there are not enough bytes to build full-length
- substrings from. Since the hash table always contains full-length
- substrings, we erase with dummy zeros here to make sure that those
- substrings will contain zeros at the end instead of uninitialized
- data.
-
- Please note that erasing is not necessary (because the
- memory region is already initialized since he ring buffer
- has a `tail' that holds a copy of the beginning,) so we
- skip erasing if we have already gone around at least once in
- the ring buffer.
-
- Only clear during the first round of ring-buffer writes. On
- subsequent rounds data in the ring-buffer would be affected. */
- if (ringbuffer_->pos_ <= ringbuffer_->mask_) {
- /* This is the first time when the ring buffer is being written.
- We clear 7 bytes just after the bytes that have been copied from
- the input buffer.
-
- The ring-buffer has a "tail" that holds a copy of the beginning,
- but only once the ring buffer has been fully written once, i.e.,
- pos <= mask. For the first time, we need to write values
- in this tail (where index may be larger than mask), so that
- we have exactly defined behavior and don't read uninitialized
- memory. Due to performance reasons, hashing reads data using a
- LOAD64, which can go 7 bytes beyond the bytes written in the
- ring-buffer. */
- memset(ringbuffer_->buffer_ + ringbuffer_->pos_, 0, 7);
- }
-}
-
-/* Marks all input as processed.
- Returns true if position wrapping occurs. */
-static BROTLI_BOOL UpdateLastProcessedPos(BrotliEncoderState* s) {
- uint32_t wrapped_last_processed_pos = WrapPosition(s->last_processed_pos_);
- uint32_t wrapped_input_pos = WrapPosition(s->input_pos_);
- s->last_processed_pos_ = s->input_pos_;
- return TO_BROTLI_BOOL(wrapped_input_pos < wrapped_last_processed_pos);
-}
-
-static void ExtendLastCommand(BrotliEncoderState* s, uint32_t* bytes,
- uint32_t* wrapped_last_processed_pos) {
- Command* last_command = &s->commands_[s->num_commands_ - 1];
- const uint8_t* data = s->ringbuffer_.buffer_;
- const uint32_t mask = s->ringbuffer_.mask_;
- uint64_t max_backward_distance =
- (((uint64_t)1) << s->params.lgwin) - BROTLI_WINDOW_GAP;
- uint64_t last_copy_len = last_command->copy_len_ & 0x1FFFFFF;
- uint64_t last_processed_pos = s->last_processed_pos_ - last_copy_len;
- uint64_t max_distance = last_processed_pos < max_backward_distance ?
- last_processed_pos : max_backward_distance;
- uint64_t cmd_dist = (uint64_t)s->dist_cache_[0];
- uint32_t distance_code = CommandRestoreDistanceCode(last_command,
- &s->params.dist);
- if (distance_code < BROTLI_NUM_DISTANCE_SHORT_CODES ||
- distance_code - (BROTLI_NUM_DISTANCE_SHORT_CODES - 1) == cmd_dist) {
- if (cmd_dist <= max_distance) {
- while (*bytes != 0 && data[*wrapped_last_processed_pos & mask] ==
- data[(*wrapped_last_processed_pos - cmd_dist) & mask]) {
- last_command->copy_len_++;
- (*bytes)--;
- (*wrapped_last_processed_pos)++;
- }
- }
- /* The copy length is at most the metablock size, and thus expressible. */
- GetLengthCode(last_command->insert_len_,
- (size_t)((int)(last_command->copy_len_ & 0x1FFFFFF) +
- (int)(last_command->copy_len_ >> 25)),
- TO_BROTLI_BOOL((last_command->dist_prefix_ & 0x3FF) == 0),
- &last_command->cmd_prefix_);
- }
-}
-
-/*
- Processes the accumulated input data and sets |*out_size| to the length of
- the new output meta-block, or to zero if no new output meta-block has been
- created (in this case the processed input data is buffered internally).
- If |*out_size| is positive, |*output| points to the start of the output
- data. If |is_last| or |force_flush| is BROTLI_TRUE, an output meta-block is
- always created. However, until |is_last| is BROTLI_TRUE encoder may retain up
- to 7 bits of the last byte of output. To force encoder to dump the remaining
- bits use WriteMetadata() to append an empty meta-data block.
- Returns BROTLI_FALSE if the size of the input data is larger than
- input_block_size().
- */
-static BROTLI_BOOL EncodeData(
- BrotliEncoderState* s, const BROTLI_BOOL is_last,
- const BROTLI_BOOL force_flush, size_t* out_size, uint8_t** output) {
- const uint64_t delta = UnprocessedInputSize(s);
- uint32_t bytes = (uint32_t)delta;
- uint32_t wrapped_last_processed_pos = WrapPosition(s->last_processed_pos_);
- uint8_t* data;
- uint32_t mask;
- MemoryManager* m = &s->memory_manager_;
- ContextType literal_context_mode;
-
- data = s->ringbuffer_.buffer_;
- mask = s->ringbuffer_.mask_;
-
- /* Adding more blocks after "last" block is forbidden. */
- if (s->is_last_block_emitted_) return BROTLI_FALSE;
- if (is_last) s->is_last_block_emitted_ = BROTLI_TRUE;
-
- if (delta > InputBlockSize(s)) {
- return BROTLI_FALSE;
- }
- if (s->params.quality == FAST_TWO_PASS_COMPRESSION_QUALITY &&
- !s->command_buf_) {
- s->command_buf_ =
- BROTLI_ALLOC(m, uint32_t, kCompressFragmentTwoPassBlockSize);
- s->literal_buf_ =
- BROTLI_ALLOC(m, uint8_t, kCompressFragmentTwoPassBlockSize);
- if (BROTLI_IS_OOM(m)) return BROTLI_FALSE;
- }
-
- if (s->params.quality == FAST_ONE_PASS_COMPRESSION_QUALITY ||
- s->params.quality == FAST_TWO_PASS_COMPRESSION_QUALITY) {
- uint8_t* storage;
- size_t storage_ix = s->last_bytes_bits_;
- size_t table_size;
- int* table;
-
- if (delta == 0 && !is_last) {
- /* We have no new input data and we don't have to finish the stream, so
- nothing to do. */
- *out_size = 0;
- return BROTLI_TRUE;
- }
- storage = GetBrotliStorage(s, 2 * bytes + 503);
- if (BROTLI_IS_OOM(m)) return BROTLI_FALSE;
- storage[0] = (uint8_t)s->last_bytes_;
- storage[1] = (uint8_t)(s->last_bytes_ >> 8);
- table = GetHashTable(s, s->params.quality, bytes, &table_size);
- if (BROTLI_IS_OOM(m)) return BROTLI_FALSE;
- if (s->params.quality == FAST_ONE_PASS_COMPRESSION_QUALITY) {
- BrotliCompressFragmentFast(
- m, &data[wrapped_last_processed_pos & mask],
- bytes, is_last,
- table, table_size,
- s->cmd_depths_, s->cmd_bits_,
- &s->cmd_code_numbits_, s->cmd_code_,
- &storage_ix, storage);
- if (BROTLI_IS_OOM(m)) return BROTLI_FALSE;
- } else {
- BrotliCompressFragmentTwoPass(
- m, &data[wrapped_last_processed_pos & mask],
- bytes, is_last,
- s->command_buf_, s->literal_buf_,
- table, table_size,
- &storage_ix, storage);
- if (BROTLI_IS_OOM(m)) return BROTLI_FALSE;
- }
- s->last_bytes_ = (uint16_t)(storage[storage_ix >> 3]);
- s->last_bytes_bits_ = storage_ix & 7u;
- UpdateLastProcessedPos(s);
- *output = &storage[0];
- *out_size = storage_ix >> 3;
- return BROTLI_TRUE;
- }
-
- {
- /* Theoretical max number of commands is 1 per 2 bytes. */
- size_t newsize = s->num_commands_ + bytes / 2 + 1;
- if (newsize > s->cmd_alloc_size_) {
- Command* new_commands;
- /* Reserve a bit more memory to allow merging with a next block
- without reallocation: that would impact speed. */
- newsize += (bytes / 4) + 16;
- s->cmd_alloc_size_ = newsize;
- new_commands = BROTLI_ALLOC(m, Command, newsize);
- if (BROTLI_IS_OOM(m)) return BROTLI_FALSE;
- if (s->commands_) {
- memcpy(new_commands, s->commands_, sizeof(Command) * s->num_commands_);
- BROTLI_FREE(m, s->commands_);
- }
- s->commands_ = new_commands;
- }
- }
-
- InitOrStitchToPreviousBlock(m, &s->hasher_, data, mask, &s->params,
- wrapped_last_processed_pos, bytes, is_last);
-
- literal_context_mode = ChooseContextMode(
- &s->params, data, WrapPosition(s->last_flush_pos_),
- mask, (size_t)(s->input_pos_ - s->last_flush_pos_));
-
- if (BROTLI_IS_OOM(m)) return BROTLI_FALSE;
-
- if (s->num_commands_ && s->last_insert_len_ == 0) {
- ExtendLastCommand(s, &bytes, &wrapped_last_processed_pos);
- }
-
- if (s->params.quality == ZOPFLIFICATION_QUALITY) {
- BROTLI_DCHECK(s->params.hasher.type == 10);
- BrotliCreateZopfliBackwardReferences(m,
- bytes, wrapped_last_processed_pos,
- data, mask, &s->params, s->hasher_, s->dist_cache_,
- &s->last_insert_len_, &s->commands_[s->num_commands_],
- &s->num_commands_, &s->num_literals_);
- if (BROTLI_IS_OOM(m)) return BROTLI_FALSE;
- } else if (s->params.quality == HQ_ZOPFLIFICATION_QUALITY) {
- BROTLI_DCHECK(s->params.hasher.type == 10);
- BrotliCreateHqZopfliBackwardReferences(m,
- bytes, wrapped_last_processed_pos,
- data, mask, &s->params, s->hasher_, s->dist_cache_,
- &s->last_insert_len_, &s->commands_[s->num_commands_],
- &s->num_commands_, &s->num_literals_);
- if (BROTLI_IS_OOM(m)) return BROTLI_FALSE;
- } else {
- BrotliCreateBackwardReferences(
- bytes, wrapped_last_processed_pos,
- data, mask, &s->params, s->hasher_, s->dist_cache_,
- &s->last_insert_len_, &s->commands_[s->num_commands_],
- &s->num_commands_, &s->num_literals_);
- }
-
- {
- const size_t max_length = MaxMetablockSize(&s->params);
- const size_t max_literals = max_length / 8;
- const size_t max_commands = max_length / 8;
- const size_t processed_bytes = (size_t)(s->input_pos_ - s->last_flush_pos_);
- /* If maximal possible additional block doesn't fit metablock, flush now. */
- /* TODO: Postpone decision until next block arrives? */
- const BROTLI_BOOL next_input_fits_metablock = TO_BROTLI_BOOL(
- processed_bytes + InputBlockSize(s) <= max_length);
- /* If block splitting is not used, then flush as soon as there is some
- amount of commands / literals produced. */
- const BROTLI_BOOL should_flush = TO_BROTLI_BOOL(
- s->params.quality < MIN_QUALITY_FOR_BLOCK_SPLIT &&
- s->num_literals_ + s->num_commands_ >= MAX_NUM_DELAYED_SYMBOLS);
- if (!is_last && !force_flush && !should_flush &&
- next_input_fits_metablock &&
- s->num_literals_ < max_literals &&
- s->num_commands_ < max_commands) {
- /* Merge with next input block. Everything will happen later. */
- if (UpdateLastProcessedPos(s)) {
- HasherReset(s->hasher_);
- }
- *out_size = 0;
- return BROTLI_TRUE;
- }
- }
-
- /* Create the last insert-only command. */
- if (s->last_insert_len_ > 0) {
- InitInsertCommand(&s->commands_[s->num_commands_++], s->last_insert_len_);
- s->num_literals_ += s->last_insert_len_;
- s->last_insert_len_ = 0;
- }
-
- if (!is_last && s->input_pos_ == s->last_flush_pos_) {
- /* We have no new input data and we don't have to finish the stream, so
- nothing to do. */
- *out_size = 0;
- return BROTLI_TRUE;
- }
- BROTLI_DCHECK(s->input_pos_ >= s->last_flush_pos_);
- BROTLI_DCHECK(s->input_pos_ > s->last_flush_pos_ || is_last);
- BROTLI_DCHECK(s->input_pos_ - s->last_flush_pos_ <= 1u << 24);
- {
- const uint32_t metablock_size =
- (uint32_t)(s->input_pos_ - s->last_flush_pos_);
- uint8_t* storage = GetBrotliStorage(s, 2 * metablock_size + 503);
- size_t storage_ix = s->last_bytes_bits_;
- if (BROTLI_IS_OOM(m)) return BROTLI_FALSE;
- storage[0] = (uint8_t)s->last_bytes_;
- storage[1] = (uint8_t)(s->last_bytes_ >> 8);
- WriteMetaBlockInternal(
- m, data, mask, s->last_flush_pos_, metablock_size, is_last,
- literal_context_mode, &s->params, s->prev_byte_, s->prev_byte2_,
- s->num_literals_, s->num_commands_, s->commands_, s->saved_dist_cache_,
- s->dist_cache_, &storage_ix, storage);
- if (BROTLI_IS_OOM(m)) return BROTLI_FALSE;
- s->last_bytes_ = (uint16_t)(storage[storage_ix >> 3]);
- s->last_bytes_bits_ = storage_ix & 7u;
- s->last_flush_pos_ = s->input_pos_;
- if (UpdateLastProcessedPos(s)) {
- HasherReset(s->hasher_);
- }
- if (s->last_flush_pos_ > 0) {
- s->prev_byte_ = data[((uint32_t)s->last_flush_pos_ - 1) & mask];
- }
- if (s->last_flush_pos_ > 1) {
- s->prev_byte2_ = data[(uint32_t)(s->last_flush_pos_ - 2) & mask];
- }
- s->num_commands_ = 0;
- s->num_literals_ = 0;
- /* Save the state of the distance cache in case we need to restore it for
- emitting an uncompressed block. */
- memcpy(s->saved_dist_cache_, s->dist_cache_, sizeof(s->saved_dist_cache_));
- *output = &storage[0];
- *out_size = storage_ix >> 3;
- return BROTLI_TRUE;
- }
-}
-
-/* Dumps remaining output bits and metadata header to |header|.
- Returns number of produced bytes.
- REQUIRED: |header| should be 8-byte aligned and at least 16 bytes long.
- REQUIRED: |block_size| <= (1 << 24). */
-static size_t WriteMetadataHeader(
- BrotliEncoderState* s, const size_t block_size, uint8_t* header) {
- size_t storage_ix;
- storage_ix = s->last_bytes_bits_;
- header[0] = (uint8_t)s->last_bytes_;
- header[1] = (uint8_t)(s->last_bytes_ >> 8);
- s->last_bytes_ = 0;
- s->last_bytes_bits_ = 0;
-
- BrotliWriteBits(1, 0, &storage_ix, header);
- BrotliWriteBits(2, 3, &storage_ix, header);
- BrotliWriteBits(1, 0, &storage_ix, header);
- if (block_size == 0) {
- BrotliWriteBits(2, 0, &storage_ix, header);
- } else {
- uint32_t nbits = (block_size == 1) ? 0 :
- (Log2FloorNonZero((uint32_t)block_size - 1) + 1);
- uint32_t nbytes = (nbits + 7) / 8;
- BrotliWriteBits(2, nbytes, &storage_ix, header);
- BrotliWriteBits(8 * nbytes, block_size - 1, &storage_ix, header);
- }
- return (storage_ix + 7u) >> 3;
-}
-
-static BROTLI_BOOL BrotliCompressBufferQuality10(
- int lgwin, size_t input_size, const uint8_t* input_buffer,
- size_t* encoded_size, uint8_t* encoded_buffer) {
- MemoryManager memory_manager;
- MemoryManager* m = &memory_manager;
-
- const size_t mask = BROTLI_SIZE_MAX >> 1;
- const size_t max_backward_limit = BROTLI_MAX_BACKWARD_LIMIT(lgwin);
- int dist_cache[4] = { 4, 11, 15, 16 };
- int saved_dist_cache[4] = { 4, 11, 15, 16 };
- BROTLI_BOOL ok = BROTLI_TRUE;
- const size_t max_out_size = *encoded_size;
- size_t total_out_size = 0;
- uint16_t last_bytes;
- uint8_t last_bytes_bits;
- HasherHandle hasher = NULL;
-
- const size_t hasher_eff_size =
- BROTLI_MIN(size_t, input_size, max_backward_limit + BROTLI_WINDOW_GAP);
-
- BrotliEncoderParams params;
-
- const int lgmetablock = BROTLI_MIN(int, 24, lgwin + 1);
- size_t max_block_size;
- const size_t max_metablock_size = (size_t)1 << lgmetablock;
- const size_t max_literals_per_metablock = max_metablock_size / 8;
- const size_t max_commands_per_metablock = max_metablock_size / 8;
- size_t metablock_start = 0;
- uint8_t prev_byte = 0;
- uint8_t prev_byte2 = 0;
-
- BrotliEncoderInitParams(¶ms);
- params.quality = 10;
- params.lgwin = lgwin;
- if (lgwin > BROTLI_MAX_WINDOW_BITS) {
- params.large_window = BROTLI_TRUE;
- }
- SanitizeParams(¶ms);
- params.lgblock = ComputeLgBlock(¶ms);
- ChooseDistanceParams(¶ms);
- max_block_size = (size_t)1 << params.lgblock;
-
- BrotliInitMemoryManager(m, 0, 0, 0);
-
- BROTLI_DCHECK(input_size <= mask + 1);
- EncodeWindowBits(lgwin, params.large_window, &last_bytes, &last_bytes_bits);
- InitOrStitchToPreviousBlock(m, &hasher, input_buffer, mask, ¶ms,
- 0, hasher_eff_size, BROTLI_TRUE);
- if (BROTLI_IS_OOM(m)) goto oom;
-
- while (ok && metablock_start < input_size) {
- const size_t metablock_end =
- BROTLI_MIN(size_t, input_size, metablock_start + max_metablock_size);
- const size_t expected_num_commands =
- (metablock_end - metablock_start) / 12 + 16;
- Command* commands = 0;
- size_t num_commands = 0;
- size_t last_insert_len = 0;
- size_t num_literals = 0;
- size_t metablock_size = 0;
- size_t cmd_alloc_size = 0;
- BROTLI_BOOL is_last;
- uint8_t* storage;
- size_t storage_ix;
-
- ContextType literal_context_mode = ChooseContextMode(¶ms,
- input_buffer, metablock_start, mask, metablock_end - metablock_start);
-
- size_t block_start;
- for (block_start = metablock_start; block_start < metablock_end; ) {
- size_t block_size =
- BROTLI_MIN(size_t, metablock_end - block_start, max_block_size);
- ZopfliNode* nodes = BROTLI_ALLOC(m, ZopfliNode, block_size + 1);
- size_t path_size;
- size_t new_cmd_alloc_size;
- if (BROTLI_IS_OOM(m)) goto oom;
- BrotliInitZopfliNodes(nodes, block_size + 1);
- StitchToPreviousBlockH10(hasher, block_size, block_start,
- input_buffer, mask);
- path_size = BrotliZopfliComputeShortestPath(m,
- block_size, block_start, input_buffer, mask, ¶ms,
- max_backward_limit, dist_cache, hasher, nodes);
- if (BROTLI_IS_OOM(m)) goto oom;
- /* We allocate a command buffer in the first iteration of this loop that
- will be likely big enough for the whole metablock, so that for most
- inputs we will not have to reallocate in later iterations. We do the
- allocation here and not before the loop, because if the input is small,
- this will be allocated after the Zopfli cost model is freed, so this
- will not increase peak memory usage.
- TODO: If the first allocation is too small, increase command
- buffer size exponentially. */
- new_cmd_alloc_size = BROTLI_MAX(size_t, expected_num_commands,
- num_commands + path_size + 1);
- if (cmd_alloc_size != new_cmd_alloc_size) {
- Command* new_commands = BROTLI_ALLOC(m, Command, new_cmd_alloc_size);
- if (BROTLI_IS_OOM(m)) goto oom;
- cmd_alloc_size = new_cmd_alloc_size;
- if (commands) {
- memcpy(new_commands, commands, sizeof(Command) * num_commands);
- BROTLI_FREE(m, commands);
- }
- commands = new_commands;
- }
- BrotliZopfliCreateCommands(block_size, block_start, max_backward_limit,
- &nodes[0], dist_cache, &last_insert_len,
- ¶ms, &commands[num_commands],
- &num_literals);
- num_commands += path_size;
- block_start += block_size;
- metablock_size += block_size;
- BROTLI_FREE(m, nodes);
- if (num_literals > max_literals_per_metablock ||
- num_commands > max_commands_per_metablock) {
- break;
- }
- }
-
- if (last_insert_len > 0) {
- InitInsertCommand(&commands[num_commands++], last_insert_len);
- num_literals += last_insert_len;
- }
-
- is_last = TO_BROTLI_BOOL(metablock_start + metablock_size == input_size);
- storage = NULL;
- storage_ix = last_bytes_bits;
-
- if (metablock_size == 0) {
- /* Write the ISLAST and ISEMPTY bits. */
- storage = BROTLI_ALLOC(m, uint8_t, 16);
- if (BROTLI_IS_OOM(m)) goto oom;
- storage[0] = (uint8_t)last_bytes;
- storage[1] = (uint8_t)(last_bytes >> 8);
- BrotliWriteBits(2, 3, &storage_ix, storage);
- storage_ix = (storage_ix + 7u) & ~7u;
- } else if (!ShouldCompress(input_buffer, mask, metablock_start,
- metablock_size, num_literals, num_commands)) {
- /* Restore the distance cache, as its last update by
- CreateBackwardReferences is now unused. */
- memcpy(dist_cache, saved_dist_cache, 4 * sizeof(dist_cache[0]));
- storage = BROTLI_ALLOC(m, uint8_t, metablock_size + 16);
- if (BROTLI_IS_OOM(m)) goto oom;
- storage[0] = (uint8_t)last_bytes;
- storage[1] = (uint8_t)(last_bytes >> 8);
- BrotliStoreUncompressedMetaBlock(is_last, input_buffer,
- metablock_start, mask, metablock_size,
- &storage_ix, storage);
- } else {
- MetaBlockSplit mb;
- BrotliEncoderParams block_params = params;
- InitMetaBlockSplit(&mb);
- BrotliBuildMetaBlock(m, input_buffer, metablock_start, mask,
- &block_params,
- prev_byte, prev_byte2,
- commands, num_commands,
- literal_context_mode,
- &mb);
- if (BROTLI_IS_OOM(m)) goto oom;
- {
- /* The number of distance symbols effectively used for distance
- histograms. It might be less than distance alphabet size
- for "Large Window Brotli" (32-bit). */
- uint32_t num_effective_dist_codes = block_params.dist.alphabet_size;
- if (num_effective_dist_codes > BROTLI_NUM_HISTOGRAM_DISTANCE_SYMBOLS) {
- num_effective_dist_codes = BROTLI_NUM_HISTOGRAM_DISTANCE_SYMBOLS;
- }
- BrotliOptimizeHistograms(num_effective_dist_codes, &mb);
- }
- storage = BROTLI_ALLOC(m, uint8_t, 2 * metablock_size + 503);
- if (BROTLI_IS_OOM(m)) goto oom;
- storage[0] = (uint8_t)last_bytes;
- storage[1] = (uint8_t)(last_bytes >> 8);
- BrotliStoreMetaBlock(m, input_buffer, metablock_start, metablock_size,
- mask, prev_byte, prev_byte2,
- is_last,
- &block_params,
- literal_context_mode,
- commands, num_commands,
- &mb,
- &storage_ix, storage);
- if (BROTLI_IS_OOM(m)) goto oom;
- if (metablock_size + 4 < (storage_ix >> 3)) {
- /* Restore the distance cache and last byte. */
- memcpy(dist_cache, saved_dist_cache, 4 * sizeof(dist_cache[0]));
- storage[0] = (uint8_t)last_bytes;
- storage[1] = (uint8_t)(last_bytes >> 8);
- storage_ix = last_bytes_bits;
- BrotliStoreUncompressedMetaBlock(is_last, input_buffer,
- metablock_start, mask,
- metablock_size, &storage_ix, storage);
- }
- DestroyMetaBlockSplit(m, &mb);
- }
- last_bytes = (uint16_t)(storage[storage_ix >> 3]);
- last_bytes_bits = storage_ix & 7u;
- metablock_start += metablock_size;
- if (metablock_start < input_size) {
- prev_byte = input_buffer[metablock_start - 1];
- prev_byte2 = input_buffer[metablock_start - 2];
- }
- /* Save the state of the distance cache in case we need to restore it for
- emitting an uncompressed block. */
- memcpy(saved_dist_cache, dist_cache, 4 * sizeof(dist_cache[0]));
-
- {
- const size_t out_size = storage_ix >> 3;
- total_out_size += out_size;
- if (total_out_size <= max_out_size) {
- memcpy(encoded_buffer, storage, out_size);
- encoded_buffer += out_size;
- } else {
- ok = BROTLI_FALSE;
- }
- }
- BROTLI_FREE(m, storage);
- BROTLI_FREE(m, commands);
- }
-
- *encoded_size = total_out_size;
- DestroyHasher(m, &hasher);
- return ok;
-
-oom:
- BrotliWipeOutMemoryManager(m);
- return BROTLI_FALSE;
-}
-
-size_t BrotliEncoderMaxCompressedSize(size_t input_size) {
- /* [window bits / empty metadata] + N * [uncompressed] + [last empty] */
- size_t num_large_blocks = input_size >> 14;
- size_t overhead = 2 + (4 * num_large_blocks) + 3 + 1;
- size_t result = input_size + overhead;
- if (input_size == 0) return 2;
- return (result < input_size) ? 0 : result;
-}
-
-/* Wraps data to uncompressed brotli stream with minimal window size.
- |output| should point at region with at least BrotliEncoderMaxCompressedSize
- addressable bytes.
- Returns the length of stream. */
-static size_t MakeUncompressedStream(
- const uint8_t* input, size_t input_size, uint8_t* output) {
- size_t size = input_size;
- size_t result = 0;
- size_t offset = 0;
- if (input_size == 0) {
- output[0] = 6;
- return 1;
- }
- output[result++] = 0x21; /* window bits = 10, is_last = false */
- output[result++] = 0x03; /* empty metadata, padding */
- while (size > 0) {
- uint32_t nibbles = 0;
- uint32_t chunk_size;
- uint32_t bits;
- chunk_size = (size > (1u << 24)) ? (1u << 24) : (uint32_t)size;
- if (chunk_size > (1u << 16)) nibbles = (chunk_size > (1u << 20)) ? 2 : 1;
- bits =
- (nibbles << 1) | ((chunk_size - 1) << 3) | (1u << (19 + 4 * nibbles));
- output[result++] = (uint8_t)bits;
- output[result++] = (uint8_t)(bits >> 8);
- output[result++] = (uint8_t)(bits >> 16);
- if (nibbles == 2) output[result++] = (uint8_t)(bits >> 24);
- memcpy(&output[result], &input[offset], chunk_size);
- result += chunk_size;
- offset += chunk_size;
- size -= chunk_size;
- }
- output[result++] = 3;
- return result;
-}
-
-BROTLI_BOOL BrotliEncoderCompress(
- int quality, int lgwin, BrotliEncoderMode mode, size_t input_size,
- const uint8_t* input_buffer, size_t* encoded_size,
- uint8_t* encoded_buffer) {
- BrotliEncoderState* s;
- size_t out_size = *encoded_size;
- const uint8_t* input_start = input_buffer;
- uint8_t* output_start = encoded_buffer;
- size_t max_out_size = BrotliEncoderMaxCompressedSize(input_size);
- if (out_size == 0) {
- /* Output buffer needs at least one byte. */
- return BROTLI_FALSE;
- }
- if (input_size == 0) {
- /* Handle the special case of empty input. */
- *encoded_size = 1;
- *encoded_buffer = 6;
- return BROTLI_TRUE;
- }
- if (quality == 10) {
- /* TODO: Implement this direct path for all quality levels. */
- const int lg_win = BROTLI_MIN(int, BROTLI_LARGE_MAX_WINDOW_BITS,
- BROTLI_MAX(int, 16, lgwin));
- int ok = BrotliCompressBufferQuality10(lg_win, input_size, input_buffer,
- encoded_size, encoded_buffer);
- if (!ok || (max_out_size && *encoded_size > max_out_size)) {
- goto fallback;
- }
- return BROTLI_TRUE;
- }
-
- s = BrotliEncoderCreateInstance(0, 0, 0);
- if (!s) {
- return BROTLI_FALSE;
- } else {
- size_t available_in = input_size;
- const uint8_t* next_in = input_buffer;
- size_t available_out = *encoded_size;
- uint8_t* next_out = encoded_buffer;
- size_t total_out = 0;
- BROTLI_BOOL result = BROTLI_FALSE;
- BrotliEncoderSetParameter(s, BROTLI_PARAM_QUALITY, (uint32_t)quality);
- BrotliEncoderSetParameter(s, BROTLI_PARAM_LGWIN, (uint32_t)lgwin);
- BrotliEncoderSetParameter(s, BROTLI_PARAM_MODE, (uint32_t)mode);
- BrotliEncoderSetParameter(s, BROTLI_PARAM_SIZE_HINT, (uint32_t)input_size);
- if (lgwin > BROTLI_MAX_WINDOW_BITS) {
- BrotliEncoderSetParameter(s, BROTLI_PARAM_LARGE_WINDOW, BROTLI_TRUE);
- }
- result = BrotliEncoderCompressStream(s, BROTLI_OPERATION_FINISH,
- &available_in, &next_in, &available_out, &next_out, &total_out);
- if (!BrotliEncoderIsFinished(s)) result = 0;
- *encoded_size = total_out;
- BrotliEncoderDestroyInstance(s);
- if (!result || (max_out_size && *encoded_size > max_out_size)) {
- goto fallback;
- }
- return BROTLI_TRUE;
- }
-fallback:
- *encoded_size = 0;
- if (!max_out_size) return BROTLI_FALSE;
- if (out_size >= max_out_size) {
- *encoded_size =
- MakeUncompressedStream(input_start, input_size, output_start);
- return BROTLI_TRUE;
- }
- return BROTLI_FALSE;
-}
-
-static void InjectBytePaddingBlock(BrotliEncoderState* s) {
- uint32_t seal = s->last_bytes_;
- size_t seal_bits = s->last_bytes_bits_;
- uint8_t* destination;
- s->last_bytes_ = 0;
- s->last_bytes_bits_ = 0;
- /* is_last = 0, data_nibbles = 11, reserved = 0, meta_nibbles = 00 */
- seal |= 0x6u << seal_bits;
- seal_bits += 6;
- /* If we have already created storage, then append to it.
- Storage is valid until next block is being compressed. */
- if (s->next_out_) {
- destination = s->next_out_ + s->available_out_;
- } else {
- destination = s->tiny_buf_.u8;
- s->next_out_ = destination;
- }
- destination[0] = (uint8_t)seal;
- if (seal_bits > 8) destination[1] = (uint8_t)(seal >> 8);
- if (seal_bits > 16) destination[2] = (uint8_t)(seal >> 16);
- s->available_out_ += (seal_bits + 7) >> 3;
-}
-
-/* Injects padding bits or pushes compressed data to output.
- Returns false if nothing is done. */
-static BROTLI_BOOL InjectFlushOrPushOutput(BrotliEncoderState* s,
- size_t* available_out, uint8_t** next_out, size_t* total_out) {
- if (s->stream_state_ == BROTLI_STREAM_FLUSH_REQUESTED &&
- s->last_bytes_bits_ != 0) {
- InjectBytePaddingBlock(s);
- return BROTLI_TRUE;
- }
-
- if (s->available_out_ != 0 && *available_out != 0) {
- size_t copy_output_size =
- BROTLI_MIN(size_t, s->available_out_, *available_out);
- memcpy(*next_out, s->next_out_, copy_output_size);
- *next_out += copy_output_size;
- *available_out -= copy_output_size;
- s->next_out_ += copy_output_size;
- s->available_out_ -= copy_output_size;
- s->total_out_ += copy_output_size;
- if (total_out) *total_out = s->total_out_;
- return BROTLI_TRUE;
- }
-
- return BROTLI_FALSE;
-}
-
-static void CheckFlushComplete(BrotliEncoderState* s) {
- if (s->stream_state_ == BROTLI_STREAM_FLUSH_REQUESTED &&
- s->available_out_ == 0) {
- s->stream_state_ = BROTLI_STREAM_PROCESSING;
- s->next_out_ = 0;
- }
-}
-
-static BROTLI_BOOL BrotliEncoderCompressStreamFast(
- BrotliEncoderState* s, BrotliEncoderOperation op, size_t* available_in,
- const uint8_t** next_in, size_t* available_out, uint8_t** next_out,
- size_t* total_out) {
- const size_t block_size_limit = (size_t)1 << s->params.lgwin;
- const size_t buf_size = BROTLI_MIN(size_t, kCompressFragmentTwoPassBlockSize,
- BROTLI_MIN(size_t, *available_in, block_size_limit));
- uint32_t* tmp_command_buf = NULL;
- uint32_t* command_buf = NULL;
- uint8_t* tmp_literal_buf = NULL;
- uint8_t* literal_buf = NULL;
- MemoryManager* m = &s->memory_manager_;
- if (s->params.quality != FAST_ONE_PASS_COMPRESSION_QUALITY &&
- s->params.quality != FAST_TWO_PASS_COMPRESSION_QUALITY) {
- return BROTLI_FALSE;
- }
- if (s->params.quality == FAST_TWO_PASS_COMPRESSION_QUALITY) {
- if (!s->command_buf_ && buf_size == kCompressFragmentTwoPassBlockSize) {
- s->command_buf_ =
- BROTLI_ALLOC(m, uint32_t, kCompressFragmentTwoPassBlockSize);
- s->literal_buf_ =
- BROTLI_ALLOC(m, uint8_t, kCompressFragmentTwoPassBlockSize);
- if (BROTLI_IS_OOM(m)) return BROTLI_FALSE;
- }
- if (s->command_buf_) {
- command_buf = s->command_buf_;
- literal_buf = s->literal_buf_;
- } else {
- tmp_command_buf = BROTLI_ALLOC(m, uint32_t, buf_size);
- tmp_literal_buf = BROTLI_ALLOC(m, uint8_t, buf_size);
- if (BROTLI_IS_OOM(m)) return BROTLI_FALSE;
- command_buf = tmp_command_buf;
- literal_buf = tmp_literal_buf;
- }
- }
-
- while (BROTLI_TRUE) {
- if (InjectFlushOrPushOutput(s, available_out, next_out, total_out)) {
- continue;
- }
-
- /* Compress block only when internal output buffer is empty, stream is not
- finished, there is no pending flush request, and there is either
- additional input or pending operation. */
- if (s->available_out_ == 0 &&
- s->stream_state_ == BROTLI_STREAM_PROCESSING &&
- (*available_in != 0 || op != BROTLI_OPERATION_PROCESS)) {
- size_t block_size = BROTLI_MIN(size_t, block_size_limit, *available_in);
- BROTLI_BOOL is_last =
- (*available_in == block_size) && (op == BROTLI_OPERATION_FINISH);
- BROTLI_BOOL force_flush =
- (*available_in == block_size) && (op == BROTLI_OPERATION_FLUSH);
- size_t max_out_size = 2 * block_size + 503;
- BROTLI_BOOL inplace = BROTLI_TRUE;
- uint8_t* storage = NULL;
- size_t storage_ix = s->last_bytes_bits_;
- size_t table_size;
- int* table;
-
- if (force_flush && block_size == 0) {
- s->stream_state_ = BROTLI_STREAM_FLUSH_REQUESTED;
- continue;
- }
- if (max_out_size <= *available_out) {
- storage = *next_out;
- } else {
- inplace = BROTLI_FALSE;
- storage = GetBrotliStorage(s, max_out_size);
- if (BROTLI_IS_OOM(m)) return BROTLI_FALSE;
- }
- storage[0] = (uint8_t)s->last_bytes_;
- storage[1] = (uint8_t)(s->last_bytes_ >> 8);
- table = GetHashTable(s, s->params.quality, block_size, &table_size);
- if (BROTLI_IS_OOM(m)) return BROTLI_FALSE;
-
- if (s->params.quality == FAST_ONE_PASS_COMPRESSION_QUALITY) {
- BrotliCompressFragmentFast(m, *next_in, block_size, is_last, table,
- table_size, s->cmd_depths_, s->cmd_bits_, &s->cmd_code_numbits_,
- s->cmd_code_, &storage_ix, storage);
- if (BROTLI_IS_OOM(m)) return BROTLI_FALSE;
- } else {
- BrotliCompressFragmentTwoPass(m, *next_in, block_size, is_last,
- command_buf, literal_buf, table, table_size,
- &storage_ix, storage);
- if (BROTLI_IS_OOM(m)) return BROTLI_FALSE;
- }
- *next_in += block_size;
- *available_in -= block_size;
- if (inplace) {
- size_t out_bytes = storage_ix >> 3;
- BROTLI_DCHECK(out_bytes <= *available_out);
- BROTLI_DCHECK((storage_ix & 7) == 0 || out_bytes < *available_out);
- *next_out += out_bytes;
- *available_out -= out_bytes;
- s->total_out_ += out_bytes;
- if (total_out) *total_out = s->total_out_;
- } else {
- size_t out_bytes = storage_ix >> 3;
- s->next_out_ = storage;
- s->available_out_ = out_bytes;
- }
- s->last_bytes_ = (uint16_t)(storage[storage_ix >> 3]);
- s->last_bytes_bits_ = storage_ix & 7u;
-
- if (force_flush) s->stream_state_ = BROTLI_STREAM_FLUSH_REQUESTED;
- if (is_last) s->stream_state_ = BROTLI_STREAM_FINISHED;
- continue;
- }
- break;
- }
- BROTLI_FREE(m, tmp_command_buf);
- BROTLI_FREE(m, tmp_literal_buf);
- CheckFlushComplete(s);
- return BROTLI_TRUE;
-}
-
-static BROTLI_BOOL ProcessMetadata(
- BrotliEncoderState* s, size_t* available_in, const uint8_t** next_in,
- size_t* available_out, uint8_t** next_out, size_t* total_out) {
- if (*available_in > (1u << 24)) return BROTLI_FALSE;
- /* Switch to metadata block workflow, if required. */
- if (s->stream_state_ == BROTLI_STREAM_PROCESSING) {
- s->remaining_metadata_bytes_ = (uint32_t)*available_in;
- s->stream_state_ = BROTLI_STREAM_METADATA_HEAD;
- }
- if (s->stream_state_ != BROTLI_STREAM_METADATA_HEAD &&
- s->stream_state_ != BROTLI_STREAM_METADATA_BODY) {
- return BROTLI_FALSE;
- }
-
- while (BROTLI_TRUE) {
- if (InjectFlushOrPushOutput(s, available_out, next_out, total_out)) {
- continue;
- }
- if (s->available_out_ != 0) break;
-
- if (s->input_pos_ != s->last_flush_pos_) {
- BROTLI_BOOL result = EncodeData(s, BROTLI_FALSE, BROTLI_TRUE,
- &s->available_out_, &s->next_out_);
- if (!result) return BROTLI_FALSE;
- continue;
- }
-
- if (s->stream_state_ == BROTLI_STREAM_METADATA_HEAD) {
- s->next_out_ = s->tiny_buf_.u8;
- s->available_out_ =
- WriteMetadataHeader(s, s->remaining_metadata_bytes_, s->next_out_);
- s->stream_state_ = BROTLI_STREAM_METADATA_BODY;
- continue;
- } else {
- /* Exit workflow only when there is no more input and no more output.
- Otherwise client may continue producing empty metadata blocks. */
- if (s->remaining_metadata_bytes_ == 0) {
- s->remaining_metadata_bytes_ = BROTLI_UINT32_MAX;
- s->stream_state_ = BROTLI_STREAM_PROCESSING;
- break;
- }
- if (*available_out) {
- /* Directly copy input to output. */
- uint32_t copy = (uint32_t)BROTLI_MIN(
- size_t, s->remaining_metadata_bytes_, *available_out);
- memcpy(*next_out, *next_in, copy);
- *next_in += copy;
- *available_in -= copy;
- s->remaining_metadata_bytes_ -= copy;
- *next_out += copy;
- *available_out -= copy;
- } else {
- /* This guarantees progress in "TakeOutput" workflow. */
- uint32_t copy = BROTLI_MIN(uint32_t, s->remaining_metadata_bytes_, 16);
- s->next_out_ = s->tiny_buf_.u8;
- memcpy(s->next_out_, *next_in, copy);
- *next_in += copy;
- *available_in -= copy;
- s->remaining_metadata_bytes_ -= copy;
- s->available_out_ = copy;
- }
- continue;
- }
- }
-
- return BROTLI_TRUE;
-}
-
-static void UpdateSizeHint(BrotliEncoderState* s, size_t available_in) {
- if (s->params.size_hint == 0) {
- uint64_t delta = UnprocessedInputSize(s);
- uint64_t tail = available_in;
- uint32_t limit = 1u << 30;
- uint32_t total;
- if ((delta >= limit) || (tail >= limit) || ((delta + tail) >= limit)) {
- total = limit;
- } else {
- total = (uint32_t)(delta + tail);
- }
- s->params.size_hint = total;
- }
-}
-
-BROTLI_BOOL BrotliEncoderCompressStream(
- BrotliEncoderState* s, BrotliEncoderOperation op, size_t* available_in,
- const uint8_t** next_in, size_t* available_out,uint8_t** next_out,
- size_t* total_out) {
- if (!EnsureInitialized(s)) return BROTLI_FALSE;
-
- /* Unfinished metadata block; check requirements. */
- if (s->remaining_metadata_bytes_ != BROTLI_UINT32_MAX) {
- if (*available_in != s->remaining_metadata_bytes_) return BROTLI_FALSE;
- if (op != BROTLI_OPERATION_EMIT_METADATA) return BROTLI_FALSE;
- }
-
- if (op == BROTLI_OPERATION_EMIT_METADATA) {
- UpdateSizeHint(s, 0); /* First data metablock might be emitted here. */
- return ProcessMetadata(
- s, available_in, next_in, available_out, next_out, total_out);
- }
-
- if (s->stream_state_ == BROTLI_STREAM_METADATA_HEAD ||
- s->stream_state_ == BROTLI_STREAM_METADATA_BODY) {
- return BROTLI_FALSE;
- }
-
- if (s->stream_state_ != BROTLI_STREAM_PROCESSING && *available_in != 0) {
- return BROTLI_FALSE;
- }
- if (s->params.quality == FAST_ONE_PASS_COMPRESSION_QUALITY ||
- s->params.quality == FAST_TWO_PASS_COMPRESSION_QUALITY) {
- return BrotliEncoderCompressStreamFast(s, op, available_in, next_in,
- available_out, next_out, total_out);
- }
- while (BROTLI_TRUE) {
- size_t remaining_block_size = RemainingInputBlockSize(s);
-
- if (remaining_block_size != 0 && *available_in != 0) {
- size_t copy_input_size =
- BROTLI_MIN(size_t, remaining_block_size, *available_in);
- CopyInputToRingBuffer(s, copy_input_size, *next_in);
- *next_in += copy_input_size;
- *available_in -= copy_input_size;
- continue;
- }
-
- if (InjectFlushOrPushOutput(s, available_out, next_out, total_out)) {
- continue;
- }
-
- /* Compress data only when internal output buffer is empty, stream is not
- finished and there is no pending flush request. */
- if (s->available_out_ == 0 &&
- s->stream_state_ == BROTLI_STREAM_PROCESSING) {
- if (remaining_block_size == 0 || op != BROTLI_OPERATION_PROCESS) {
- BROTLI_BOOL is_last = TO_BROTLI_BOOL(
- (*available_in == 0) && op == BROTLI_OPERATION_FINISH);
- BROTLI_BOOL force_flush = TO_BROTLI_BOOL(
- (*available_in == 0) && op == BROTLI_OPERATION_FLUSH);
- BROTLI_BOOL result;
- UpdateSizeHint(s, *available_in);
- result = EncodeData(s, is_last, force_flush,
- &s->available_out_, &s->next_out_);
- if (!result) return BROTLI_FALSE;
- if (force_flush) s->stream_state_ = BROTLI_STREAM_FLUSH_REQUESTED;
- if (is_last) s->stream_state_ = BROTLI_STREAM_FINISHED;
- continue;
- }
- }
- break;
- }
- CheckFlushComplete(s);
- return BROTLI_TRUE;
-}
-
-BROTLI_BOOL BrotliEncoderIsFinished(BrotliEncoderState* s) {
- return TO_BROTLI_BOOL(s->stream_state_ == BROTLI_STREAM_FINISHED &&
- !BrotliEncoderHasMoreOutput(s));
-}
-
-BROTLI_BOOL BrotliEncoderHasMoreOutput(BrotliEncoderState* s) {
- return TO_BROTLI_BOOL(s->available_out_ != 0);
-}
-
-const uint8_t* BrotliEncoderTakeOutput(BrotliEncoderState* s, size_t* size) {
- size_t consumed_size = s->available_out_;
- uint8_t* result = s->next_out_;
- if (*size) {
- consumed_size = BROTLI_MIN(size_t, *size, s->available_out_);
- }
- if (consumed_size) {
- s->next_out_ += consumed_size;
- s->available_out_ -= consumed_size;
- s->total_out_ += consumed_size;
- CheckFlushComplete(s);
- *size = consumed_size;
- } else {
- *size = 0;
- result = 0;
- }
- return result;
-}
-
-uint32_t BrotliEncoderVersion(void) {
- return BROTLI_VERSION;
-}
-
-#if defined(__cplusplus) || defined(c_plusplus)
-} /* extern "C" */
-#endif
diff --git a/BaseTools/Source/C/BrotliCompress/enc/encoder_dict.c b/BaseTools/Source/C/BrotliCompress/enc/encoder_dict.c
deleted file mode 100644
index 956d50c0b578..000000000000
--- a/BaseTools/Source/C/BrotliCompress/enc/encoder_dict.c
+++ /dev/null
@@ -1,32 +0,0 @@
-/* Copyright 2017 Google Inc. All Rights Reserved.
-
- Distributed under MIT license.
- See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
-*/
-
-#include "./encoder_dict.h"
-
-#include "../common/dictionary.h"
-#include "../common/transform.h"
-#include "./dictionary_hash.h"
-#include "./hash.h"
-
-#if defined(__cplusplus) || defined(c_plusplus)
-extern "C" {
-#endif
-
-void BrotliInitEncoderDictionary(BrotliEncoderDictionary* dict) {
- dict->words = BrotliGetDictionary();
-
- dict->hash_table = kStaticDictionaryHash;
- dict->buckets = kStaticDictionaryBuckets;
- dict->dict_words = kStaticDictionaryWords;
-
- dict->cutoffTransformsCount = kCutoffTransformsCount;
- dict->cutoffTransforms = kCutoffTransforms;
-
-}
-
-#if defined(__cplusplus) || defined(c_plusplus)
-} /* extern "C" */
-#endif
diff --git a/BaseTools/Source/C/BrotliCompress/enc/entropy_encode.c b/BaseTools/Source/C/BrotliCompress/enc/entropy_encode.c
deleted file mode 100644
index e3f0d2edaabe..000000000000
--- a/BaseTools/Source/C/BrotliCompress/enc/entropy_encode.c
+++ /dev/null
@@ -1,501 +0,0 @@
-/* Copyright 2010 Google Inc. All Rights Reserved.
-
- Distributed under MIT license.
- See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
-*/
-
-/* Entropy encoding (Huffman) utilities. */
-
-#include "./entropy_encode.h"
-
-#include <string.h> /* memset */
-
-#include "../common/constants.h"
-#include "../common/platform.h"
-#include <brotli/types.h>
-
-#if defined(__cplusplus) || defined(c_plusplus)
-extern "C" {
-#endif
-
-BROTLI_BOOL BrotliSetDepth(
- int p0, HuffmanTree* pool, uint8_t* depth, int max_depth) {
- int stack[16];
- int level = 0;
- int p = p0;
- BROTLI_DCHECK(max_depth <= 15);
- stack[0] = -1;
- while (BROTLI_TRUE) {
- if (pool[p].index_left_ >= 0) {
- level++;
- if (level > max_depth) return BROTLI_FALSE;
- stack[level] = pool[p].index_right_or_value_;
- p = pool[p].index_left_;
- continue;
- } else {
- depth[pool[p].index_right_or_value_] = (uint8_t)level;
- }
- while (level >= 0 && stack[level] == -1) level--;
- if (level < 0) return BROTLI_TRUE;
- p = stack[level];
- stack[level] = -1;
- }
-}
-
-/* Sort the root nodes, least popular first. */
-static BROTLI_INLINE BROTLI_BOOL SortHuffmanTree(
- const HuffmanTree* v0, const HuffmanTree* v1) {
- if (v0->total_count_ != v1->total_count_) {
- return TO_BROTLI_BOOL(v0->total_count_ < v1->total_count_);
- }
- return TO_BROTLI_BOOL(v0->index_right_or_value_ > v1->index_right_or_value_);
-}
-
-/* This function will create a Huffman tree.
-
- The catch here is that the tree cannot be arbitrarily deep.
- Brotli specifies a maximum depth of 15 bits for "code trees"
- and 7 bits for "code length code trees."
-
- count_limit is the value that is to be faked as the minimum value
- and this minimum value is raised until the tree matches the
- maximum length requirement.
-
- This algorithm is not of excellent performance for very long data blocks,
- especially when population counts are longer than 2**tree_limit, but
- we are not planning to use this with extremely long blocks.
-
- See http://en.wikipedia.org/wiki/Huffman_coding */
-void BrotliCreateHuffmanTree(const uint32_t* data,
- const size_t length,
- const int tree_limit,
- HuffmanTree* tree,
- uint8_t* depth) {
- uint32_t count_limit;
- HuffmanTree sentinel;
- InitHuffmanTree(&sentinel, BROTLI_UINT32_MAX, -1, -1);
- /* For block sizes below 64 kB, we never need to do a second iteration
- of this loop. Probably all of our block sizes will be smaller than
- that, so this loop is mostly of academic interest. If we actually
- would need this, we would be better off with the Katajainen algorithm. */
- for (count_limit = 1; ; count_limit *= 2) {
- size_t n = 0;
- size_t i;
- size_t j;
- size_t k;
- for (i = length; i != 0;) {
- --i;
- if (data[i]) {
- const uint32_t count = BROTLI_MAX(uint32_t, data[i], count_limit);
- InitHuffmanTree(&tree[n++], count, -1, (int16_t)i);
- }
- }
-
- if (n == 1) {
- depth[tree[0].index_right_or_value_] = 1; /* Only one element. */
- break;
- }
-
- SortHuffmanTreeItems(tree, n, SortHuffmanTree);
-
- /* The nodes are:
- [0, n): the sorted leaf nodes that we start with.
- [n]: we add a sentinel here.
- [n + 1, 2n): new parent nodes are added here, starting from
- (n+1). These are naturally in ascending order.
- [2n]: we add a sentinel at the end as well.
- There will be (2n+1) elements at the end. */
- tree[n] = sentinel;
- tree[n + 1] = sentinel;
-
- i = 0; /* Points to the next leaf node. */
- j = n + 1; /* Points to the next non-leaf node. */
- for (k = n - 1; k != 0; --k) {
- size_t left, right;
- if (tree[i].total_count_ <= tree[j].total_count_) {
- left = i;
- ++i;
- } else {
- left = j;
- ++j;
- }
- if (tree[i].total_count_ <= tree[j].total_count_) {
- right = i;
- ++i;
- } else {
- right = j;
- ++j;
- }
-
- {
- /* The sentinel node becomes the parent node. */
- size_t j_end = 2 * n - k;
- tree[j_end].total_count_ =
- tree[left].total_count_ + tree[right].total_count_;
- tree[j_end].index_left_ = (int16_t)left;
- tree[j_end].index_right_or_value_ = (int16_t)right;
-
- /* Add back the last sentinel node. */
- tree[j_end + 1] = sentinel;
- }
- }
- if (BrotliSetDepth((int)(2 * n - 1), &tree[0], depth, tree_limit)) {
- /* We need to pack the Huffman tree in tree_limit bits. If this was not
- successful, add fake entities to the lowest values and retry. */
- break;
- }
- }
-}
-
-static void Reverse(uint8_t* v, size_t start, size_t end) {
- --end;
- while (start < end) {
- uint8_t tmp = v[start];
- v[start] = v[end];
- v[end] = tmp;
- ++start;
- --end;
- }
-}
-
-static void BrotliWriteHuffmanTreeRepetitions(
- const uint8_t previous_value,
- const uint8_t value,
- size_t repetitions,
- size_t* tree_size,
- uint8_t* tree,
- uint8_t* extra_bits_data) {
- BROTLI_DCHECK(repetitions > 0);
- if (previous_value != value) {
- tree[*tree_size] = value;
- extra_bits_data[*tree_size] = 0;
- ++(*tree_size);
- --repetitions;
- }
- if (repetitions == 7) {
- tree[*tree_size] = value;
- extra_bits_data[*tree_size] = 0;
- ++(*tree_size);
- --repetitions;
- }
- if (repetitions < 3) {
- size_t i;
- for (i = 0; i < repetitions; ++i) {
- tree[*tree_size] = value;
- extra_bits_data[*tree_size] = 0;
- ++(*tree_size);
- }
- } else {
- size_t start = *tree_size;
- repetitions -= 3;
- while (BROTLI_TRUE) {
- tree[*tree_size] = BROTLI_REPEAT_PREVIOUS_CODE_LENGTH;
- extra_bits_data[*tree_size] = repetitions & 0x3;
- ++(*tree_size);
- repetitions >>= 2;
- if (repetitions == 0) {
- break;
- }
- --repetitions;
- }
- Reverse(tree, start, *tree_size);
- Reverse(extra_bits_data, start, *tree_size);
- }
-}
-
-static void BrotliWriteHuffmanTreeRepetitionsZeros(
- size_t repetitions,
- size_t* tree_size,
- uint8_t* tree,
- uint8_t* extra_bits_data) {
- if (repetitions == 11) {
- tree[*tree_size] = 0;
- extra_bits_data[*tree_size] = 0;
- ++(*tree_size);
- --repetitions;
- }
- if (repetitions < 3) {
- size_t i;
- for (i = 0; i < repetitions; ++i) {
- tree[*tree_size] = 0;
- extra_bits_data[*tree_size] = 0;
- ++(*tree_size);
- }
- } else {
- size_t start = *tree_size;
- repetitions -= 3;
- while (BROTLI_TRUE) {
- tree[*tree_size] = BROTLI_REPEAT_ZERO_CODE_LENGTH;
- extra_bits_data[*tree_size] = repetitions & 0x7;
- ++(*tree_size);
- repetitions >>= 3;
- if (repetitions == 0) {
- break;
- }
- --repetitions;
- }
- Reverse(tree, start, *tree_size);
- Reverse(extra_bits_data, start, *tree_size);
- }
-}
-
-void BrotliOptimizeHuffmanCountsForRle(size_t length, uint32_t* counts,
- uint8_t* good_for_rle) {
- size_t nonzero_count = 0;
- size_t stride;
- size_t limit;
- size_t sum;
- const size_t streak_limit = 1240;
- /* Let's make the Huffman code more compatible with RLE encoding. */
- size_t i;
- for (i = 0; i < length; i++) {
- if (counts[i]) {
- ++nonzero_count;
- }
- }
- if (nonzero_count < 16) {
- return;
- }
- while (length != 0 && counts[length - 1] == 0) {
- --length;
- }
- if (length == 0) {
- return; /* All zeros. */
- }
- /* Now counts[0..length - 1] does not have trailing zeros. */
- {
- size_t nonzeros = 0;
- uint32_t smallest_nonzero = 1 << 30;
- for (i = 0; i < length; ++i) {
- if (counts[i] != 0) {
- ++nonzeros;
- if (smallest_nonzero > counts[i]) {
- smallest_nonzero = counts[i];
- }
- }
- }
- if (nonzeros < 5) {
- /* Small histogram will model it well. */
- return;
- }
- if (smallest_nonzero < 4) {
- size_t zeros = length - nonzeros;
- if (zeros < 6) {
- for (i = 1; i < length - 1; ++i) {
- if (counts[i - 1] != 0 && counts[i] == 0 && counts[i + 1] != 0) {
- counts[i] = 1;
- }
- }
- }
- }
- if (nonzeros < 28) {
- return;
- }
- }
- /* 2) Let's mark all population counts that already can be encoded
- with an RLE code. */
- memset(good_for_rle, 0, length);
- {
- /* Let's not spoil any of the existing good RLE codes.
- Mark any seq of 0's that is longer as 5 as a good_for_rle.
- Mark any seq of non-0's that is longer as 7 as a good_for_rle. */
- uint32_t symbol = counts[0];
- size_t step = 0;
- for (i = 0; i <= length; ++i) {
- if (i == length || counts[i] != symbol) {
- if ((symbol == 0 && step >= 5) ||
- (symbol != 0 && step >= 7)) {
- size_t k;
- for (k = 0; k < step; ++k) {
- good_for_rle[i - k - 1] = 1;
- }
- }
- step = 1;
- if (i != length) {
- symbol = counts[i];
- }
- } else {
- ++step;
- }
- }
- }
- /* 3) Let's replace those population counts that lead to more RLE codes.
- Math here is in 24.8 fixed point representation. */
- stride = 0;
- limit = 256 * (counts[0] + counts[1] + counts[2]) / 3 + 420;
- sum = 0;
- for (i = 0; i <= length; ++i) {
- if (i == length || good_for_rle[i] ||
- (i != 0 && good_for_rle[i - 1]) ||
- (256 * counts[i] - limit + streak_limit) >= 2 * streak_limit) {
- if (stride >= 4 || (stride >= 3 && sum == 0)) {
- size_t k;
- /* The stride must end, collapse what we have, if we have enough (4). */
- size_t count = (sum + stride / 2) / stride;
- if (count == 0) {
- count = 1;
- }
- if (sum == 0) {
- /* Don't make an all zeros stride to be upgraded to ones. */
- count = 0;
- }
- for (k = 0; k < stride; ++k) {
- /* We don't want to change value at counts[i],
- that is already belonging to the next stride. Thus - 1. */
- counts[i - k - 1] = (uint32_t)count;
- }
- }
- stride = 0;
- sum = 0;
- if (i < length - 2) {
- /* All interesting strides have a count of at least 4, */
- /* at least when non-zeros. */
- limit = 256 * (counts[i] + counts[i + 1] + counts[i + 2]) / 3 + 420;
- } else if (i < length) {
- limit = 256 * counts[i];
- } else {
- limit = 0;
- }
- }
- ++stride;
- if (i != length) {
- sum += counts[i];
- if (stride >= 4) {
- limit = (256 * sum + stride / 2) / stride;
- }
- if (stride == 4) {
- limit += 120;
- }
- }
- }
-}
-
-static void DecideOverRleUse(const uint8_t* depth, const size_t length,
- BROTLI_BOOL* use_rle_for_non_zero,
- BROTLI_BOOL* use_rle_for_zero) {
- size_t total_reps_zero = 0;
- size_t total_reps_non_zero = 0;
- size_t count_reps_zero = 1;
- size_t count_reps_non_zero = 1;
- size_t i;
- for (i = 0; i < length;) {
- const uint8_t value = depth[i];
- size_t reps = 1;
- size_t k;
- for (k = i + 1; k < length && depth[k] == value; ++k) {
- ++reps;
- }
- if (reps >= 3 && value == 0) {
- total_reps_zero += reps;
- ++count_reps_zero;
- }
- if (reps >= 4 && value != 0) {
- total_reps_non_zero += reps;
- ++count_reps_non_zero;
- }
- i += reps;
- }
- *use_rle_for_non_zero =
- TO_BROTLI_BOOL(total_reps_non_zero > count_reps_non_zero * 2);
- *use_rle_for_zero = TO_BROTLI_BOOL(total_reps_zero > count_reps_zero * 2);
-}
-
-void BrotliWriteHuffmanTree(const uint8_t* depth,
- size_t length,
- size_t* tree_size,
- uint8_t* tree,
- uint8_t* extra_bits_data) {
- uint8_t previous_value = BROTLI_INITIAL_REPEATED_CODE_LENGTH;
- size_t i;
- BROTLI_BOOL use_rle_for_non_zero = BROTLI_FALSE;
- BROTLI_BOOL use_rle_for_zero = BROTLI_FALSE;
-
- /* Throw away trailing zeros. */
- size_t new_length = length;
- for (i = 0; i < length; ++i) {
- if (depth[length - i - 1] == 0) {
- --new_length;
- } else {
- break;
- }
- }
-
- /* First gather statistics on if it is a good idea to do RLE. */
- if (length > 50) {
- /* Find RLE coding for longer codes.
- Shorter codes seem not to benefit from RLE. */
- DecideOverRleUse(depth, new_length,
- &use_rle_for_non_zero, &use_rle_for_zero);
- }
-
- /* Actual RLE coding. */
- for (i = 0; i < new_length;) {
- const uint8_t value = depth[i];
- size_t reps = 1;
- if ((value != 0 && use_rle_for_non_zero) ||
- (value == 0 && use_rle_for_zero)) {
- size_t k;
- for (k = i + 1; k < new_length && depth[k] == value; ++k) {
- ++reps;
- }
- }
- if (value == 0) {
- BrotliWriteHuffmanTreeRepetitionsZeros(
- reps, tree_size, tree, extra_bits_data);
- } else {
- BrotliWriteHuffmanTreeRepetitions(previous_value,
- value, reps, tree_size,
- tree, extra_bits_data);
- previous_value = value;
- }
- i += reps;
- }
-}
-
-static uint16_t BrotliReverseBits(size_t num_bits, uint16_t bits) {
- static const size_t kLut[16] = { /* Pre-reversed 4-bit values. */
- 0x00, 0x08, 0x04, 0x0C, 0x02, 0x0A, 0x06, 0x0E,
- 0x01, 0x09, 0x05, 0x0D, 0x03, 0x0B, 0x07, 0x0F
- };
- size_t retval = kLut[bits & 0x0F];
- size_t i;
- for (i = 4; i < num_bits; i += 4) {
- retval <<= 4;
- bits = (uint16_t)(bits >> 4);
- retval |= kLut[bits & 0x0F];
- }
- retval >>= ((0 - num_bits) & 0x03);
- return (uint16_t)retval;
-}
-
-/* 0..15 are values for bits */
-#define MAX_HUFFMAN_BITS 16
-
-void BrotliConvertBitDepthsToSymbols(const uint8_t* depth,
- size_t len,
- uint16_t* bits) {
- /* In Brotli, all bit depths are [1..15]
- 0 bit depth means that the symbol does not exist. */
- uint16_t bl_count[MAX_HUFFMAN_BITS] = { 0 };
- uint16_t next_code[MAX_HUFFMAN_BITS];
- size_t i;
- int code = 0;
- for (i = 0; i < len; ++i) {
- ++bl_count[depth[i]];
- }
- bl_count[0] = 0;
- next_code[0] = 0;
- for (i = 1; i < MAX_HUFFMAN_BITS; ++i) {
- code = (code + bl_count[i - 1]) << 1;
- next_code[i] = (uint16_t)code;
- }
- for (i = 0; i < len; ++i) {
- if (depth[i]) {
- bits[i] = BrotliReverseBits(depth[i], next_code[depth[i]]++);
- }
- }
-}
-
-#if defined(__cplusplus) || defined(c_plusplus)
-} /* extern "C" */
-#endif
diff --git a/BaseTools/Source/C/BrotliCompress/enc/histogram.c b/BaseTools/Source/C/BrotliCompress/enc/histogram.c
deleted file mode 100644
index d3bfa3a79a80..000000000000
--- a/BaseTools/Source/C/BrotliCompress/enc/histogram.c
+++ /dev/null
@@ -1,100 +0,0 @@
-/* Copyright 2013 Google Inc. All Rights Reserved.
-
- Distributed under MIT license.
- See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
-*/
-
-/* Build per-context histograms of literals, commands and distance codes. */
-
-#include "./histogram.h"
-
-#include "../common/context.h"
-#include "./block_splitter.h"
-#include "./command.h"
-
-#if defined(__cplusplus) || defined(c_plusplus)
-extern "C" {
-#endif
-
-typedef struct BlockSplitIterator {
- const BlockSplit* split_; /* Not owned. */
- size_t idx_;
- size_t type_;
- size_t length_;
-} BlockSplitIterator;
-
-static void InitBlockSplitIterator(BlockSplitIterator* self,
- const BlockSplit* split) {
- self->split_ = split;
- self->idx_ = 0;
- self->type_ = 0;
- self->length_ = split->lengths ? split->lengths[0] : 0;
-}
-
-static void BlockSplitIteratorNext(BlockSplitIterator* self) {
- if (self->length_ == 0) {
- ++self->idx_;
- self->type_ = self->split_->types[self->idx_];
- self->length_ = self->split_->lengths[self->idx_];
- }
- --self->length_;
-}
-
-void BrotliBuildHistogramsWithContext(
- const Command* cmds, const size_t num_commands,
- const BlockSplit* literal_split, const BlockSplit* insert_and_copy_split,
- const BlockSplit* dist_split, const uint8_t* ringbuffer, size_t start_pos,
- size_t mask, uint8_t prev_byte, uint8_t prev_byte2,
- const ContextType* context_modes, HistogramLiteral* literal_histograms,
- HistogramCommand* insert_and_copy_histograms,
- HistogramDistance* copy_dist_histograms) {
- size_t pos = start_pos;
- BlockSplitIterator literal_it;
- BlockSplitIterator insert_and_copy_it;
- BlockSplitIterator dist_it;
- size_t i;
-
- InitBlockSplitIterator(&literal_it, literal_split);
- InitBlockSplitIterator(&insert_and_copy_it, insert_and_copy_split);
- InitBlockSplitIterator(&dist_it, dist_split);
- for (i = 0; i < num_commands; ++i) {
- const Command* cmd = &cmds[i];
- size_t j;
- BlockSplitIteratorNext(&insert_and_copy_it);
- HistogramAddCommand(&insert_and_copy_histograms[insert_and_copy_it.type_],
- cmd->cmd_prefix_);
- /* TODO: unwrap iterator blocks. */
- for (j = cmd->insert_len_; j != 0; --j) {
- size_t context;
- BlockSplitIteratorNext(&literal_it);
- context = literal_it.type_;
- if (context_modes) {
- ContextLut lut = BROTLI_CONTEXT_LUT(context_modes[context]);
- context = (context << BROTLI_LITERAL_CONTEXT_BITS) +
- BROTLI_CONTEXT(prev_byte, prev_byte2, lut);
- }
- HistogramAddLiteral(&literal_histograms[context],
- ringbuffer[pos & mask]);
- prev_byte2 = prev_byte;
- prev_byte = ringbuffer[pos & mask];
- ++pos;
- }
- pos += CommandCopyLen(cmd);
- if (CommandCopyLen(cmd)) {
- prev_byte2 = ringbuffer[(pos - 2) & mask];
- prev_byte = ringbuffer[(pos - 1) & mask];
- if (cmd->cmd_prefix_ >= 128) {
- size_t context;
- BlockSplitIteratorNext(&dist_it);
- context = (dist_it.type_ << BROTLI_DISTANCE_CONTEXT_BITS) +
- CommandDistanceContext(cmd);
- HistogramAddDistance(©_dist_histograms[context],
- cmd->dist_prefix_ & 0x3FF);
- }
- }
- }
-}
-
-#if defined(__cplusplus) || defined(c_plusplus)
-} /* extern "C" */
-#endif
diff --git a/BaseTools/Source/C/BrotliCompress/enc/literal_cost.c b/BaseTools/Source/C/BrotliCompress/enc/literal_cost.c
deleted file mode 100644
index de780dcc99b0..000000000000
--- a/BaseTools/Source/C/BrotliCompress/enc/literal_cost.c
+++ /dev/null
@@ -1,175 +0,0 @@
-/* Copyright 2013 Google Inc. All Rights Reserved.
-
- Distributed under MIT license.
- See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
-*/
-
-/* Literal cost model to allow backward reference replacement to be efficient.
-*/
-
-#include "./literal_cost.h"
-
-#include "../common/platform.h"
-#include <brotli/types.h>
-#include "./fast_log.h"
-#include "./utf8_util.h"
-
-#if defined(__cplusplus) || defined(c_plusplus)
-extern "C" {
-#endif
-
-static size_t UTF8Position(size_t last, size_t c, size_t clamp) {
- if (c < 128) {
- return 0; /* Next one is the 'Byte 1' again. */
- } else if (c >= 192) { /* Next one is the 'Byte 2' of utf-8 encoding. */
- return BROTLI_MIN(size_t, 1, clamp);
- } else {
- /* Let's decide over the last byte if this ends the sequence. */
- if (last < 0xE0) {
- return 0; /* Completed two or three byte coding. */
- } else { /* Next one is the 'Byte 3' of utf-8 encoding. */
- return BROTLI_MIN(size_t, 2, clamp);
- }
- }
-}
-
-static size_t DecideMultiByteStatsLevel(size_t pos, size_t len, size_t mask,
- const uint8_t* data) {
- size_t counts[3] = { 0 };
- size_t max_utf8 = 1; /* should be 2, but 1 compresses better. */
- size_t last_c = 0;
- size_t i;
- for (i = 0; i < len; ++i) {
- size_t c = data[(pos + i) & mask];
- ++counts[UTF8Position(last_c, c, 2)];
- last_c = c;
- }
- if (counts[2] < 500) {
- max_utf8 = 1;
- }
- if (counts[1] + counts[2] < 25) {
- max_utf8 = 0;
- }
- return max_utf8;
-}
-
-static void EstimateBitCostsForLiteralsUTF8(size_t pos, size_t len, size_t mask,
- const uint8_t* data, float* cost) {
- /* max_utf8 is 0 (normal ASCII single byte modeling),
- 1 (for 2-byte UTF-8 modeling), or 2 (for 3-byte UTF-8 modeling). */
- const size_t max_utf8 = DecideMultiByteStatsLevel(pos, len, mask, data);
- size_t histogram[3][256] = { { 0 } };
- size_t window_half = 495;
- size_t in_window = BROTLI_MIN(size_t, window_half, len);
- size_t in_window_utf8[3] = { 0 };
-
- size_t i;
- { /* Bootstrap histograms. */
- size_t last_c = 0;
- size_t utf8_pos = 0;
- for (i = 0; i < in_window; ++i) {
- size_t c = data[(pos + i) & mask];
- ++histogram[utf8_pos][c];
- ++in_window_utf8[utf8_pos];
- utf8_pos = UTF8Position(last_c, c, max_utf8);
- last_c = c;
- }
- }
-
- /* Compute bit costs with sliding window. */
- for (i = 0; i < len; ++i) {
- if (i >= window_half) {
- /* Remove a byte in the past. */
- size_t c =
- i < window_half + 1 ? 0 : data[(pos + i - window_half - 1) & mask];
- size_t last_c =
- i < window_half + 2 ? 0 : data[(pos + i - window_half - 2) & mask];
- size_t utf8_pos2 = UTF8Position(last_c, c, max_utf8);
- --histogram[utf8_pos2][data[(pos + i - window_half) & mask]];
- --in_window_utf8[utf8_pos2];
- }
- if (i + window_half < len) {
- /* Add a byte in the future. */
- size_t c = data[(pos + i + window_half - 1) & mask];
- size_t last_c = data[(pos + i + window_half - 2) & mask];
- size_t utf8_pos2 = UTF8Position(last_c, c, max_utf8);
- ++histogram[utf8_pos2][data[(pos + i + window_half) & mask]];
- ++in_window_utf8[utf8_pos2];
- }
- {
- size_t c = i < 1 ? 0 : data[(pos + i - 1) & mask];
- size_t last_c = i < 2 ? 0 : data[(pos + i - 2) & mask];
- size_t utf8_pos = UTF8Position(last_c, c, max_utf8);
- size_t masked_pos = (pos + i) & mask;
- size_t histo = histogram[utf8_pos][data[masked_pos]];
- double lit_cost;
- if (histo == 0) {
- histo = 1;
- }
- lit_cost = FastLog2(in_window_utf8[utf8_pos]) - FastLog2(histo);
- lit_cost += 0.02905;
- if (lit_cost < 1.0) {
- lit_cost *= 0.5;
- lit_cost += 0.5;
- }
- /* Make the first bytes more expensive -- seems to help, not sure why.
- Perhaps because the entropy source is changing its properties
- rapidly in the beginning of the file, perhaps because the beginning
- of the data is a statistical "anomaly". */
- if (i < 2000) {
- lit_cost += 0.7 - ((double)(2000 - i) / 2000.0 * 0.35);
- }
- cost[i] = (float)lit_cost;
- }
- }
-}
-
-void BrotliEstimateBitCostsForLiterals(size_t pos, size_t len, size_t mask,
- const uint8_t* data, float* cost) {
- if (BrotliIsMostlyUTF8(data, pos, mask, len, kMinUTF8Ratio)) {
- EstimateBitCostsForLiteralsUTF8(pos, len, mask, data, cost);
- return;
- } else {
- size_t histogram[256] = { 0 };
- size_t window_half = 2000;
- size_t in_window = BROTLI_MIN(size_t, window_half, len);
-
- /* Bootstrap histogram. */
- size_t i;
- for (i = 0; i < in_window; ++i) {
- ++histogram[data[(pos + i) & mask]];
- }
-
- /* Compute bit costs with sliding window. */
- for (i = 0; i < len; ++i) {
- size_t histo;
- if (i >= window_half) {
- /* Remove a byte in the past. */
- --histogram[data[(pos + i - window_half) & mask]];
- --in_window;
- }
- if (i + window_half < len) {
- /* Add a byte in the future. */
- ++histogram[data[(pos + i + window_half) & mask]];
- ++in_window;
- }
- histo = histogram[data[(pos + i) & mask]];
- if (histo == 0) {
- histo = 1;
- }
- {
- double lit_cost = FastLog2(in_window) - FastLog2(histo);
- lit_cost += 0.029;
- if (lit_cost < 1.0) {
- lit_cost *= 0.5;
- lit_cost += 0.5;
- }
- cost[i] = (float)lit_cost;
- }
- }
- }
-}
-
-#if defined(__cplusplus) || defined(c_plusplus)
-} /* extern "C" */
-#endif
diff --git a/BaseTools/Source/C/BrotliCompress/enc/memory.c b/BaseTools/Source/C/BrotliCompress/enc/memory.c
deleted file mode 100644
index f0b2f13f6472..000000000000
--- a/BaseTools/Source/C/BrotliCompress/enc/memory.c
+++ /dev/null
@@ -1,170 +0,0 @@
-/* Copyright 2015 Google Inc. All Rights Reserved.
-
- Distributed under MIT license.
- See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
-*/
-
-/* Algorithms for distributing the literals and commands of a metablock between
- block types and contexts. */
-
-#include "./memory.h"
-
-#include <stdlib.h> /* exit, free, malloc */
-#include <string.h> /* memcpy */
-
-#include "../common/platform.h"
-#include <brotli/types.h>
-
-#if defined(__cplusplus) || defined(c_plusplus)
-extern "C" {
-#endif
-
-#define MAX_PERM_ALLOCATED 128
-#define MAX_NEW_ALLOCATED 64
-#define MAX_NEW_FREED 64
-
-#define PERM_ALLOCATED_OFFSET 0
-#define NEW_ALLOCATED_OFFSET MAX_PERM_ALLOCATED
-#define NEW_FREED_OFFSET (MAX_PERM_ALLOCATED + MAX_NEW_ALLOCATED)
-
-void BrotliInitMemoryManager(
- MemoryManager* m, brotli_alloc_func alloc_func, brotli_free_func free_func,
- void* opaque) {
- if (!alloc_func) {
- m->alloc_func = BrotliDefaultAllocFunc;
- m->free_func = BrotliDefaultFreeFunc;
- m->opaque = 0;
- } else {
- m->alloc_func = alloc_func;
- m->free_func = free_func;
- m->opaque = opaque;
- }
-#if !defined(BROTLI_ENCODER_EXIT_ON_OOM)
- m->is_oom = BROTLI_FALSE;
- m->perm_allocated = 0;
- m->new_allocated = 0;
- m->new_freed = 0;
-#endif /* BROTLI_ENCODER_EXIT_ON_OOM */
-}
-
-#if defined(BROTLI_ENCODER_EXIT_ON_OOM)
-
-void* BrotliAllocate(MemoryManager* m, size_t n) {
- void* result = m->alloc_func(m->opaque, n);
- if (!result) exit(EXIT_FAILURE);
- return result;
-}
-
-void BrotliFree(MemoryManager* m, void* p) {
- m->free_func(m->opaque, p);
-}
-
-void BrotliWipeOutMemoryManager(MemoryManager* m) {
- BROTLI_UNUSED(m);
-}
-
-#else /* BROTLI_ENCODER_EXIT_ON_OOM */
-
-static void SortPointers(void** items, const size_t n) {
- /* Shell sort. */
- static const size_t gaps[] = {23, 10, 4, 1};
- int g = 0;
- for (; g < 4; ++g) {
- size_t gap = gaps[g];
- size_t i;
- for (i = gap; i < n; ++i) {
- size_t j = i;
- void* tmp = items[i];
- for (; j >= gap && tmp < items[j - gap]; j -= gap) {
- items[j] = items[j - gap];
- }
- items[j] = tmp;
- }
- }
-}
-
-static size_t Annihilate(void** a, size_t a_len, void** b, size_t b_len) {
- size_t a_read_index = 0;
- size_t b_read_index = 0;
- size_t a_write_index = 0;
- size_t b_write_index = 0;
- size_t annihilated = 0;
- while (a_read_index < a_len && b_read_index < b_len) {
- if (a[a_read_index] == b[b_read_index]) {
- a_read_index++;
- b_read_index++;
- annihilated++;
- } else if (a[a_read_index] < b[b_read_index]) {
- a[a_write_index++] = a[a_read_index++];
- } else {
- b[b_write_index++] = b[b_read_index++];
- }
- }
- while (a_read_index < a_len) a[a_write_index++] = a[a_read_index++];
- while (b_read_index < b_len) b[b_write_index++] = b[b_read_index++];
- return annihilated;
-}
-
-static void CollectGarbagePointers(MemoryManager* m) {
- size_t annihilated;
- SortPointers(m->pointers + NEW_ALLOCATED_OFFSET, m->new_allocated);
- SortPointers(m->pointers + NEW_FREED_OFFSET, m->new_freed);
- annihilated = Annihilate(
- m->pointers + NEW_ALLOCATED_OFFSET, m->new_allocated,
- m->pointers + NEW_FREED_OFFSET, m->new_freed);
- m->new_allocated -= annihilated;
- m->new_freed -= annihilated;
-
- if (m->new_freed != 0) {
- annihilated = Annihilate(
- m->pointers + PERM_ALLOCATED_OFFSET, m->perm_allocated,
- m->pointers + NEW_FREED_OFFSET, m->new_freed);
- m->perm_allocated -= annihilated;
- m->new_freed -= annihilated;
- BROTLI_DCHECK(m->new_freed == 0);
- }
-
- if (m->new_allocated != 0) {
- BROTLI_DCHECK(m->perm_allocated + m->new_allocated <= MAX_PERM_ALLOCATED);
- memcpy(m->pointers + PERM_ALLOCATED_OFFSET + m->perm_allocated,
- m->pointers + NEW_ALLOCATED_OFFSET,
- sizeof(void*) * m->new_allocated);
- m->perm_allocated += m->new_allocated;
- m->new_allocated = 0;
- SortPointers(m->pointers + PERM_ALLOCATED_OFFSET, m->perm_allocated);
- }
-}
-
-void* BrotliAllocate(MemoryManager* m, size_t n) {
- void* result = m->alloc_func(m->opaque, n);
- if (!result) {
- m->is_oom = BROTLI_TRUE;
- return NULL;
- }
- if (m->new_allocated == MAX_NEW_ALLOCATED) CollectGarbagePointers(m);
- m->pointers[NEW_ALLOCATED_OFFSET + (m->new_allocated++)] = result;
- return result;
-}
-
-void BrotliFree(MemoryManager* m, void* p) {
- if (!p) return;
- m->free_func(m->opaque, p);
- if (m->new_freed == MAX_NEW_FREED) CollectGarbagePointers(m);
- m->pointers[NEW_FREED_OFFSET + (m->new_freed++)] = p;
-}
-
-void BrotliWipeOutMemoryManager(MemoryManager* m) {
- size_t i;
- CollectGarbagePointers(m);
- /* Now all unfreed pointers are in perm-allocated list. */
- for (i = 0; i < m->perm_allocated; ++i) {
- m->free_func(m->opaque, m->pointers[PERM_ALLOCATED_OFFSET + i]);
- }
- m->perm_allocated = 0;
-}
-
-#endif /* BROTLI_ENCODER_EXIT_ON_OOM */
-
-#if defined(__cplusplus) || defined(c_plusplus)
-} /* extern "C" */
-#endif
diff --git a/BaseTools/Source/C/BrotliCompress/enc/metablock.c b/BaseTools/Source/C/BrotliCompress/enc/metablock.c
deleted file mode 100644
index 2fc3e28d02af..000000000000
--- a/BaseTools/Source/C/BrotliCompress/enc/metablock.c
+++ /dev/null
@@ -1,667 +0,0 @@
-/* Copyright 2015 Google Inc. All Rights Reserved.
-
- Distributed under MIT license.
- See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
-*/
-
-/* Algorithms for distributing the literals and commands of a metablock between
- block types and contexts. */
-
-#include "./metablock.h"
-
-#include "../common/constants.h"
-#include "../common/context.h"
-#include "../common/platform.h"
-#include <brotli/types.h>
-#include "./bit_cost.h"
-#include "./block_splitter.h"
-#include "./cluster.h"
-#include "./entropy_encode.h"
-#include "./histogram.h"
-#include "./memory.h"
-#include "./quality.h"
-
-#if defined(__cplusplus) || defined(c_plusplus)
-extern "C" {
-#endif
-
-void BrotliInitDistanceParams(BrotliEncoderParams* params,
- uint32_t npostfix, uint32_t ndirect) {
- BrotliDistanceParams* dist_params = ¶ms->dist;
- uint32_t alphabet_size, max_distance;
-
- dist_params->distance_postfix_bits = npostfix;
- dist_params->num_direct_distance_codes = ndirect;
-
- alphabet_size = BROTLI_DISTANCE_ALPHABET_SIZE(
- npostfix, ndirect, BROTLI_MAX_DISTANCE_BITS);
- max_distance = ndirect + (1U << (BROTLI_MAX_DISTANCE_BITS + npostfix + 2)) -
- (1U << (npostfix + 2));
-
- if (params->large_window) {
- static const uint32_t bound[BROTLI_MAX_NPOSTFIX + 1] = {0, 4, 12, 28};
- uint32_t postfix = 1U << npostfix;
- alphabet_size = BROTLI_DISTANCE_ALPHABET_SIZE(
- npostfix, ndirect, BROTLI_LARGE_MAX_DISTANCE_BITS);
- /* The maximum distance is set so that no distance symbol used can encode
- a distance larger than BROTLI_MAX_ALLOWED_DISTANCE with all
- its extra bits set. */
- if (ndirect < bound[npostfix]) {
- max_distance = BROTLI_MAX_ALLOWED_DISTANCE - (bound[npostfix] - ndirect);
- } else if (ndirect >= bound[npostfix] + postfix) {
- max_distance = (3U << 29) - 4 + (ndirect - bound[npostfix]);
- } else {
- max_distance = BROTLI_MAX_ALLOWED_DISTANCE;
- }
- }
-
- dist_params->alphabet_size = alphabet_size;
- dist_params->max_distance = max_distance;
-}
-
-static void RecomputeDistancePrefixes(Command* cmds,
- size_t num_commands,
- const BrotliDistanceParams* orig_params,
- const BrotliDistanceParams* new_params) {
- size_t i;
-
- if (orig_params->distance_postfix_bits == new_params->distance_postfix_bits &&
- orig_params->num_direct_distance_codes ==
- new_params->num_direct_distance_codes) {
- return;
- }
-
- for (i = 0; i < num_commands; ++i) {
- Command* cmd = &cmds[i];
- if (CommandCopyLen(cmd) && cmd->cmd_prefix_ >= 128) {
- PrefixEncodeCopyDistance(CommandRestoreDistanceCode(cmd, orig_params),
- new_params->num_direct_distance_codes,
- new_params->distance_postfix_bits,
- &cmd->dist_prefix_,
- &cmd->dist_extra_);
- }
- }
-}
-
-static BROTLI_BOOL ComputeDistanceCost(const Command* cmds,
- size_t num_commands,
- const BrotliDistanceParams* orig_params,
- const BrotliDistanceParams* new_params,
- double* cost) {
- size_t i;
- BROTLI_BOOL equal_params = BROTLI_FALSE;
- uint16_t dist_prefix;
- uint32_t dist_extra;
- double extra_bits = 0.0;
- HistogramDistance histo;
- HistogramClearDistance(&histo);
-
- if (orig_params->distance_postfix_bits == new_params->distance_postfix_bits &&
- orig_params->num_direct_distance_codes ==
- new_params->num_direct_distance_codes) {
- equal_params = BROTLI_TRUE;
- }
-
- for (i = 0; i < num_commands; i++) {
- const Command* cmd = &cmds[i];
- if (CommandCopyLen(cmd) && cmd->cmd_prefix_ >= 128) {
- if (equal_params) {
- dist_prefix = cmd->dist_prefix_;
- } else {
- uint32_t distance = CommandRestoreDistanceCode(cmd, orig_params);
- if (distance > new_params->max_distance) {
- return BROTLI_FALSE;
- }
- PrefixEncodeCopyDistance(distance,
- new_params->num_direct_distance_codes,
- new_params->distance_postfix_bits,
- &dist_prefix,
- &dist_extra);
- }
- HistogramAddDistance(&histo, dist_prefix & 0x3FF);
- extra_bits += dist_prefix >> 10;
- }
- }
-
- *cost = BrotliPopulationCostDistance(&histo) + extra_bits;
- return BROTLI_TRUE;
-}
-
-void BrotliBuildMetaBlock(MemoryManager* m,
- const uint8_t* ringbuffer,
- const size_t pos,
- const size_t mask,
- BrotliEncoderParams* params,
- uint8_t prev_byte,
- uint8_t prev_byte2,
- Command* cmds,
- size_t num_commands,
- ContextType literal_context_mode,
- MetaBlockSplit* mb) {
- /* Histogram ids need to fit in one byte. */
- static const size_t kMaxNumberOfHistograms = 256;
- HistogramDistance* distance_histograms;
- HistogramLiteral* literal_histograms;
- ContextType* literal_context_modes = NULL;
- size_t literal_histograms_size;
- size_t distance_histograms_size;
- size_t i;
- size_t literal_context_multiplier = 1;
- uint32_t npostfix;
- uint32_t ndirect_msb = 0;
- BROTLI_BOOL check_orig = BROTLI_TRUE;
- double best_dist_cost = 1e99;
- BrotliEncoderParams orig_params = *params;
- BrotliEncoderParams new_params = *params;
-
- for (npostfix = 0; npostfix <= BROTLI_MAX_NPOSTFIX; npostfix++) {
- for (; ndirect_msb < 16; ndirect_msb++) {
- uint32_t ndirect = ndirect_msb << npostfix;
- BROTLI_BOOL skip;
- double dist_cost;
- BrotliInitDistanceParams(&new_params, npostfix, ndirect);
- if (npostfix == orig_params.dist.distance_postfix_bits &&
- ndirect == orig_params.dist.num_direct_distance_codes) {
- check_orig = BROTLI_FALSE;
- }
- skip = !ComputeDistanceCost(
- cmds, num_commands,
- &orig_params.dist, &new_params.dist, &dist_cost);
- if (skip || (dist_cost > best_dist_cost)) {
- break;
- }
- best_dist_cost = dist_cost;
- params->dist = new_params.dist;
- }
- if (ndirect_msb > 0) ndirect_msb--;
- ndirect_msb /= 2;
- }
- if (check_orig) {
- double dist_cost;
- ComputeDistanceCost(cmds, num_commands,
- &orig_params.dist, &orig_params.dist, &dist_cost);
- if (dist_cost < best_dist_cost) {
- /* NB: currently unused; uncomment when more param tuning is added. */
- /* best_dist_cost = dist_cost; */
- params->dist = orig_params.dist;
- }
- }
- RecomputeDistancePrefixes(cmds, num_commands,
- &orig_params.dist, ¶ms->dist);
-
- BrotliSplitBlock(m, cmds, num_commands,
- ringbuffer, pos, mask, params,
- &mb->literal_split,
- &mb->command_split,
- &mb->distance_split);
- if (BROTLI_IS_OOM(m)) return;
-
- if (!params->disable_literal_context_modeling) {
- literal_context_multiplier = 1 << BROTLI_LITERAL_CONTEXT_BITS;
- literal_context_modes =
- BROTLI_ALLOC(m, ContextType, mb->literal_split.num_types);
- if (BROTLI_IS_OOM(m)) return;
- for (i = 0; i < mb->literal_split.num_types; ++i) {
- literal_context_modes[i] = literal_context_mode;
- }
- }
-
- literal_histograms_size =
- mb->literal_split.num_types * literal_context_multiplier;
- literal_histograms =
- BROTLI_ALLOC(m, HistogramLiteral, literal_histograms_size);
- if (BROTLI_IS_OOM(m)) return;
- ClearHistogramsLiteral(literal_histograms, literal_histograms_size);
-
- distance_histograms_size =
- mb->distance_split.num_types << BROTLI_DISTANCE_CONTEXT_BITS;
- distance_histograms =
- BROTLI_ALLOC(m, HistogramDistance, distance_histograms_size);
- if (BROTLI_IS_OOM(m)) return;
- ClearHistogramsDistance(distance_histograms, distance_histograms_size);
-
- BROTLI_DCHECK(mb->command_histograms == 0);
- mb->command_histograms_size = mb->command_split.num_types;
- mb->command_histograms =
- BROTLI_ALLOC(m, HistogramCommand, mb->command_histograms_size);
- if (BROTLI_IS_OOM(m)) return;
- ClearHistogramsCommand(mb->command_histograms, mb->command_histograms_size);
-
- BrotliBuildHistogramsWithContext(cmds, num_commands,
- &mb->literal_split, &mb->command_split, &mb->distance_split,
- ringbuffer, pos, mask, prev_byte, prev_byte2, literal_context_modes,
- literal_histograms, mb->command_histograms, distance_histograms);
- BROTLI_FREE(m, literal_context_modes);
-
- BROTLI_DCHECK(mb->literal_context_map == 0);
- mb->literal_context_map_size =
- mb->literal_split.num_types << BROTLI_LITERAL_CONTEXT_BITS;
- mb->literal_context_map =
- BROTLI_ALLOC(m, uint32_t, mb->literal_context_map_size);
- if (BROTLI_IS_OOM(m)) return;
-
- BROTLI_DCHECK(mb->literal_histograms == 0);
- mb->literal_histograms_size = mb->literal_context_map_size;
- mb->literal_histograms =
- BROTLI_ALLOC(m, HistogramLiteral, mb->literal_histograms_size);
- if (BROTLI_IS_OOM(m)) return;
-
- BrotliClusterHistogramsLiteral(m, literal_histograms, literal_histograms_size,
- kMaxNumberOfHistograms, mb->literal_histograms,
- &mb->literal_histograms_size, mb->literal_context_map);
- if (BROTLI_IS_OOM(m)) return;
- BROTLI_FREE(m, literal_histograms);
-
- if (params->disable_literal_context_modeling) {
- /* Distribute assignment to all contexts. */
- for (i = mb->literal_split.num_types; i != 0;) {
- size_t j = 0;
- i--;
- for (; j < (1 << BROTLI_LITERAL_CONTEXT_BITS); j++) {
- mb->literal_context_map[(i << BROTLI_LITERAL_CONTEXT_BITS) + j] =
- mb->literal_context_map[i];
- }
- }
- }
-
- BROTLI_DCHECK(mb->distance_context_map == 0);
- mb->distance_context_map_size =
- mb->distance_split.num_types << BROTLI_DISTANCE_CONTEXT_BITS;
- mb->distance_context_map =
- BROTLI_ALLOC(m, uint32_t, mb->distance_context_map_size);
- if (BROTLI_IS_OOM(m)) return;
-
- BROTLI_DCHECK(mb->distance_histograms == 0);
- mb->distance_histograms_size = mb->distance_context_map_size;
- mb->distance_histograms =
- BROTLI_ALLOC(m, HistogramDistance, mb->distance_histograms_size);
- if (BROTLI_IS_OOM(m)) return;
-
- BrotliClusterHistogramsDistance(m, distance_histograms,
- mb->distance_context_map_size,
- kMaxNumberOfHistograms,
- mb->distance_histograms,
- &mb->distance_histograms_size,
- mb->distance_context_map);
- if (BROTLI_IS_OOM(m)) return;
- BROTLI_FREE(m, distance_histograms);
-}
-
-#define FN(X) X ## Literal
-#include "./metablock_inc.h" /* NOLINT(build/include) */
-#undef FN
-
-#define FN(X) X ## Command
-#include "./metablock_inc.h" /* NOLINT(build/include) */
-#undef FN
-
-#define FN(X) X ## Distance
-#include "./metablock_inc.h" /* NOLINT(build/include) */
-#undef FN
-
-#define BROTLI_MAX_STATIC_CONTEXTS 13
-
-/* Greedy block splitter for one block category (literal, command or distance).
- Gathers histograms for all context buckets. */
-typedef struct ContextBlockSplitter {
- /* Alphabet size of particular block category. */
- size_t alphabet_size_;
- size_t num_contexts_;
- size_t max_block_types_;
- /* We collect at least this many symbols for each block. */
- size_t min_block_size_;
- /* We merge histograms A and B if
- entropy(A+B) < entropy(A) + entropy(B) + split_threshold_,
- where A is the current histogram and B is the histogram of the last or the
- second last block type. */
- double split_threshold_;
-
- size_t num_blocks_;
- BlockSplit* split_; /* not owned */
- HistogramLiteral* histograms_; /* not owned */
- size_t* histograms_size_; /* not owned */
-
- /* The number of symbols that we want to collect before deciding on whether
- or not to merge the block with a previous one or emit a new block. */
- size_t target_block_size_;
- /* The number of symbols in the current histogram. */
- size_t block_size_;
- /* Offset of the current histogram. */
- size_t curr_histogram_ix_;
- /* Offset of the histograms of the previous two block types. */
- size_t last_histogram_ix_[2];
- /* Entropy of the previous two block types. */
- double last_entropy_[2 * BROTLI_MAX_STATIC_CONTEXTS];
- /* The number of times we merged the current block with the last one. */
- size_t merge_last_count_;
-} ContextBlockSplitter;
-
-static void InitContextBlockSplitter(
- MemoryManager* m, ContextBlockSplitter* self, size_t alphabet_size,
- size_t num_contexts, size_t min_block_size, double split_threshold,
- size_t num_symbols, BlockSplit* split, HistogramLiteral** histograms,
- size_t* histograms_size) {
- size_t max_num_blocks = num_symbols / min_block_size + 1;
- size_t max_num_types;
- BROTLI_DCHECK(num_contexts <= BROTLI_MAX_STATIC_CONTEXTS);
-
- self->alphabet_size_ = alphabet_size;
- self->num_contexts_ = num_contexts;
- self->max_block_types_ = BROTLI_MAX_NUMBER_OF_BLOCK_TYPES / num_contexts;
- self->min_block_size_ = min_block_size;
- self->split_threshold_ = split_threshold;
- self->num_blocks_ = 0;
- self->split_ = split;
- self->histograms_size_ = histograms_size;
- self->target_block_size_ = min_block_size;
- self->block_size_ = 0;
- self->curr_histogram_ix_ = 0;
- self->merge_last_count_ = 0;
-
- /* We have to allocate one more histogram than the maximum number of block
- types for the current histogram when the meta-block is too big. */
- max_num_types =
- BROTLI_MIN(size_t, max_num_blocks, self->max_block_types_ + 1);
- BROTLI_ENSURE_CAPACITY(m, uint8_t,
- split->types, split->types_alloc_size, max_num_blocks);
- BROTLI_ENSURE_CAPACITY(m, uint32_t,
- split->lengths, split->lengths_alloc_size, max_num_blocks);
- if (BROTLI_IS_OOM(m)) return;
- split->num_blocks = max_num_blocks;
- if (BROTLI_IS_OOM(m)) return;
- BROTLI_DCHECK(*histograms == 0);
- *histograms_size = max_num_types * num_contexts;
- *histograms = BROTLI_ALLOC(m, HistogramLiteral, *histograms_size);
- self->histograms_ = *histograms;
- if (BROTLI_IS_OOM(m)) return;
- /* Clear only current histogram. */
- ClearHistogramsLiteral(&self->histograms_[0], num_contexts);
- self->last_histogram_ix_[0] = self->last_histogram_ix_[1] = 0;
-}
-
-/* Does either of three things:
- (1) emits the current block with a new block type;
- (2) emits the current block with the type of the second last block;
- (3) merges the current block with the last block. */
-static void ContextBlockSplitterFinishBlock(
- ContextBlockSplitter* self, MemoryManager* m, BROTLI_BOOL is_final) {
- BlockSplit* split = self->split_;
- const size_t num_contexts = self->num_contexts_;
- double* last_entropy = self->last_entropy_;
- HistogramLiteral* histograms = self->histograms_;
-
- if (self->block_size_ < self->min_block_size_) {
- self->block_size_ = self->min_block_size_;
- }
- if (self->num_blocks_ == 0) {
- size_t i;
- /* Create first block. */
- split->lengths[0] = (uint32_t)self->block_size_;
- split->types[0] = 0;
-
- for (i = 0; i < num_contexts; ++i) {
- last_entropy[i] =
- BitsEntropy(histograms[i].data_, self->alphabet_size_);
- last_entropy[num_contexts + i] = last_entropy[i];
- }
- ++self->num_blocks_;
- ++split->num_types;
- self->curr_histogram_ix_ += num_contexts;
- if (self->curr_histogram_ix_ < *self->histograms_size_) {
- ClearHistogramsLiteral(
- &self->histograms_[self->curr_histogram_ix_], self->num_contexts_);
- }
- self->block_size_ = 0;
- } else if (self->block_size_ > 0) {
- /* Try merging the set of histograms for the current block type with the
- respective set of histograms for the last and second last block types.
- Decide over the split based on the total reduction of entropy across
- all contexts. */
- double entropy[BROTLI_MAX_STATIC_CONTEXTS];
- HistogramLiteral* combined_histo =
- BROTLI_ALLOC(m, HistogramLiteral, 2 * num_contexts);
- double combined_entropy[2 * BROTLI_MAX_STATIC_CONTEXTS];
- double diff[2] = { 0.0 };
- size_t i;
- if (BROTLI_IS_OOM(m)) return;
- for (i = 0; i < num_contexts; ++i) {
- size_t curr_histo_ix = self->curr_histogram_ix_ + i;
- size_t j;
- entropy[i] = BitsEntropy(histograms[curr_histo_ix].data_,
- self->alphabet_size_);
- for (j = 0; j < 2; ++j) {
- size_t jx = j * num_contexts + i;
- size_t last_histogram_ix = self->last_histogram_ix_[j] + i;
- combined_histo[jx] = histograms[curr_histo_ix];
- HistogramAddHistogramLiteral(&combined_histo[jx],
- &histograms[last_histogram_ix]);
- combined_entropy[jx] = BitsEntropy(
- &combined_histo[jx].data_[0], self->alphabet_size_);
- diff[j] += combined_entropy[jx] - entropy[i] - last_entropy[jx];
- }
- }
-
- if (split->num_types < self->max_block_types_ &&
- diff[0] > self->split_threshold_ &&
- diff[1] > self->split_threshold_) {
- /* Create new block. */
- split->lengths[self->num_blocks_] = (uint32_t)self->block_size_;
- split->types[self->num_blocks_] = (uint8_t)split->num_types;
- self->last_histogram_ix_[1] = self->last_histogram_ix_[0];
- self->last_histogram_ix_[0] = split->num_types * num_contexts;
- for (i = 0; i < num_contexts; ++i) {
- last_entropy[num_contexts + i] = last_entropy[i];
- last_entropy[i] = entropy[i];
- }
- ++self->num_blocks_;
- ++split->num_types;
- self->curr_histogram_ix_ += num_contexts;
- if (self->curr_histogram_ix_ < *self->histograms_size_) {
- ClearHistogramsLiteral(
- &self->histograms_[self->curr_histogram_ix_], self->num_contexts_);
- }
- self->block_size_ = 0;
- self->merge_last_count_ = 0;
- self->target_block_size_ = self->min_block_size_;
- } else if (diff[1] < diff[0] - 20.0) {
- /* Combine this block with second last block. */
- split->lengths[self->num_blocks_] = (uint32_t)self->block_size_;
- split->types[self->num_blocks_] = split->types[self->num_blocks_ - 2];
- BROTLI_SWAP(size_t, self->last_histogram_ix_, 0, 1);
- for (i = 0; i < num_contexts; ++i) {
- histograms[self->last_histogram_ix_[0] + i] =
- combined_histo[num_contexts + i];
- last_entropy[num_contexts + i] = last_entropy[i];
- last_entropy[i] = combined_entropy[num_contexts + i];
- HistogramClearLiteral(&histograms[self->curr_histogram_ix_ + i]);
- }
- ++self->num_blocks_;
- self->block_size_ = 0;
- self->merge_last_count_ = 0;
- self->target_block_size_ = self->min_block_size_;
- } else {
- /* Combine this block with last block. */
- split->lengths[self->num_blocks_ - 1] += (uint32_t)self->block_size_;
- for (i = 0; i < num_contexts; ++i) {
- histograms[self->last_histogram_ix_[0] + i] = combined_histo[i];
- last_entropy[i] = combined_entropy[i];
- if (split->num_types == 1) {
- last_entropy[num_contexts + i] = last_entropy[i];
- }
- HistogramClearLiteral(&histograms[self->curr_histogram_ix_ + i]);
- }
- self->block_size_ = 0;
- if (++self->merge_last_count_ > 1) {
- self->target_block_size_ += self->min_block_size_;
- }
- }
- BROTLI_FREE(m, combined_histo);
- }
- if (is_final) {
- *self->histograms_size_ = split->num_types * num_contexts;
- split->num_blocks = self->num_blocks_;
- }
-}
-
-/* Adds the next symbol to the current block type and context. When the
- current block reaches the target size, decides on merging the block. */
-static void ContextBlockSplitterAddSymbol(
- ContextBlockSplitter* self, MemoryManager* m,
- size_t symbol, size_t context) {
- HistogramAddLiteral(&self->histograms_[self->curr_histogram_ix_ + context],
- symbol);
- ++self->block_size_;
- if (self->block_size_ == self->target_block_size_) {
- ContextBlockSplitterFinishBlock(self, m, /* is_final = */ BROTLI_FALSE);
- if (BROTLI_IS_OOM(m)) return;
- }
-}
-
-static void MapStaticContexts(MemoryManager* m,
- size_t num_contexts,
- const uint32_t* static_context_map,
- MetaBlockSplit* mb) {
- size_t i;
- BROTLI_DCHECK(mb->literal_context_map == 0);
- mb->literal_context_map_size =
- mb->literal_split.num_types << BROTLI_LITERAL_CONTEXT_BITS;
- mb->literal_context_map =
- BROTLI_ALLOC(m, uint32_t, mb->literal_context_map_size);
- if (BROTLI_IS_OOM(m)) return;
-
- for (i = 0; i < mb->literal_split.num_types; ++i) {
- uint32_t offset = (uint32_t)(i * num_contexts);
- size_t j;
- for (j = 0; j < (1u << BROTLI_LITERAL_CONTEXT_BITS); ++j) {
- mb->literal_context_map[(i << BROTLI_LITERAL_CONTEXT_BITS) + j] =
- offset + static_context_map[j];
- }
- }
-}
-
-static BROTLI_INLINE void BrotliBuildMetaBlockGreedyInternal(
- MemoryManager* m, const uint8_t* ringbuffer, size_t pos, size_t mask,
- uint8_t prev_byte, uint8_t prev_byte2, ContextLut literal_context_lut,
- const size_t num_contexts, const uint32_t* static_context_map,
- const Command* commands, size_t n_commands, MetaBlockSplit* mb) {
- union {
- BlockSplitterLiteral plain;
- ContextBlockSplitter ctx;
- } lit_blocks;
- BlockSplitterCommand cmd_blocks;
- BlockSplitterDistance dist_blocks;
- size_t num_literals = 0;
- size_t i;
- for (i = 0; i < n_commands; ++i) {
- num_literals += commands[i].insert_len_;
- }
-
- if (num_contexts == 1) {
- InitBlockSplitterLiteral(m, &lit_blocks.plain, 256, 512, 400.0,
- num_literals, &mb->literal_split, &mb->literal_histograms,
- &mb->literal_histograms_size);
- } else {
- InitContextBlockSplitter(m, &lit_blocks.ctx, 256, num_contexts, 512, 400.0,
- num_literals, &mb->literal_split, &mb->literal_histograms,
- &mb->literal_histograms_size);
- }
- if (BROTLI_IS_OOM(m)) return;
- InitBlockSplitterCommand(m, &cmd_blocks, BROTLI_NUM_COMMAND_SYMBOLS, 1024,
- 500.0, n_commands, &mb->command_split, &mb->command_histograms,
- &mb->command_histograms_size);
- if (BROTLI_IS_OOM(m)) return;
- InitBlockSplitterDistance(m, &dist_blocks, 64, 512, 100.0, n_commands,
- &mb->distance_split, &mb->distance_histograms,
- &mb->distance_histograms_size);
- if (BROTLI_IS_OOM(m)) return;
-
- for (i = 0; i < n_commands; ++i) {
- const Command cmd = commands[i];
- size_t j;
- BlockSplitterAddSymbolCommand(&cmd_blocks, cmd.cmd_prefix_);
- for (j = cmd.insert_len_; j != 0; --j) {
- uint8_t literal = ringbuffer[pos & mask];
- if (num_contexts == 1) {
- BlockSplitterAddSymbolLiteral(&lit_blocks.plain, literal);
- } else {
- size_t context =
- BROTLI_CONTEXT(prev_byte, prev_byte2, literal_context_lut);
- ContextBlockSplitterAddSymbol(&lit_blocks.ctx, m, literal,
- static_context_map[context]);
- if (BROTLI_IS_OOM(m)) return;
- }
- prev_byte2 = prev_byte;
- prev_byte = literal;
- ++pos;
- }
- pos += CommandCopyLen(&cmd);
- if (CommandCopyLen(&cmd)) {
- prev_byte2 = ringbuffer[(pos - 2) & mask];
- prev_byte = ringbuffer[(pos - 1) & mask];
- if (cmd.cmd_prefix_ >= 128) {
- BlockSplitterAddSymbolDistance(&dist_blocks, cmd.dist_prefix_ & 0x3FF);
- }
- }
- }
-
- if (num_contexts == 1) {
- BlockSplitterFinishBlockLiteral(
- &lit_blocks.plain, /* is_final = */ BROTLI_TRUE);
- } else {
- ContextBlockSplitterFinishBlock(
- &lit_blocks.ctx, m, /* is_final = */ BROTLI_TRUE);
- if (BROTLI_IS_OOM(m)) return;
- }
- BlockSplitterFinishBlockCommand(&cmd_blocks, /* is_final = */ BROTLI_TRUE);
- BlockSplitterFinishBlockDistance(&dist_blocks, /* is_final = */ BROTLI_TRUE);
-
- if (num_contexts > 1) {
- MapStaticContexts(m, num_contexts, static_context_map, mb);
- }
-}
-
-void BrotliBuildMetaBlockGreedy(MemoryManager* m,
- const uint8_t* ringbuffer,
- size_t pos,
- size_t mask,
- uint8_t prev_byte,
- uint8_t prev_byte2,
- ContextLut literal_context_lut,
- size_t num_contexts,
- const uint32_t* static_context_map,
- const Command* commands,
- size_t n_commands,
- MetaBlockSplit* mb) {
- if (num_contexts == 1) {
- BrotliBuildMetaBlockGreedyInternal(m, ringbuffer, pos, mask, prev_byte,
- prev_byte2, literal_context_lut, 1, NULL, commands, n_commands, mb);
- } else {
- BrotliBuildMetaBlockGreedyInternal(m, ringbuffer, pos, mask, prev_byte,
- prev_byte2, literal_context_lut, num_contexts, static_context_map,
- commands, n_commands, mb);
- }
-}
-
-void BrotliOptimizeHistograms(uint32_t num_distance_codes,
- MetaBlockSplit* mb) {
- uint8_t good_for_rle[BROTLI_NUM_COMMAND_SYMBOLS];
- size_t i;
- for (i = 0; i < mb->literal_histograms_size; ++i) {
- BrotliOptimizeHuffmanCountsForRle(256, mb->literal_histograms[i].data_,
- good_for_rle);
- }
- for (i = 0; i < mb->command_histograms_size; ++i) {
- BrotliOptimizeHuffmanCountsForRle(BROTLI_NUM_COMMAND_SYMBOLS,
- mb->command_histograms[i].data_,
- good_for_rle);
- }
- for (i = 0; i < mb->distance_histograms_size; ++i) {
- BrotliOptimizeHuffmanCountsForRle(num_distance_codes,
- mb->distance_histograms[i].data_,
- good_for_rle);
- }
-}
-
-#if defined(__cplusplus) || defined(c_plusplus)
-} /* extern "C" */
-#endif
diff --git a/BaseTools/Source/C/BrotliCompress/enc/static_dict.c b/BaseTools/Source/C/BrotliCompress/enc/static_dict.c
deleted file mode 100644
index bad13a7f1693..000000000000
--- a/BaseTools/Source/C/BrotliCompress/enc/static_dict.c
+++ /dev/null
@@ -1,486 +0,0 @@
-/* Copyright 2013 Google Inc. All Rights Reserved.
-
- Distributed under MIT license.
- See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
-*/
-
-#include "./static_dict.h"
-
-#include "../common/dictionary.h"
-#include "../common/platform.h"
-#include "../common/transform.h"
-#include "./encoder_dict.h"
-#include "./find_match_length.h"
-
-#if defined(__cplusplus) || defined(c_plusplus)
-extern "C" {
-#endif
-
-static BROTLI_INLINE uint32_t Hash(const uint8_t* data) {
- uint32_t h = BROTLI_UNALIGNED_LOAD32LE(data) * kDictHashMul32;
- /* The higher bits contain more mixture from the multiplication,
- so we take our results from there. */
- return h >> (32 - kDictNumBits);
-}
-
-static BROTLI_INLINE void AddMatch(size_t distance, size_t len, size_t len_code,
- uint32_t* matches) {
- uint32_t match = (uint32_t)((distance << 5) + len_code);
- matches[len] = BROTLI_MIN(uint32_t, matches[len], match);
-}
-
-static BROTLI_INLINE size_t DictMatchLength(const BrotliDictionary* dictionary,
- const uint8_t* data,
- size_t id,
- size_t len,
- size_t maxlen) {
- const size_t offset = dictionary->offsets_by_length[len] + len * id;
- return FindMatchLengthWithLimit(&dictionary->data[offset], data,
- BROTLI_MIN(size_t, len, maxlen));
-}
-
-static BROTLI_INLINE BROTLI_BOOL IsMatch(const BrotliDictionary* dictionary,
- DictWord w, const uint8_t* data, size_t max_length) {
- if (w.len > max_length) {
- return BROTLI_FALSE;
- } else {
- const size_t offset = dictionary->offsets_by_length[w.len] +
- (size_t)w.len * (size_t)w.idx;
- const uint8_t* dict = &dictionary->data[offset];
- if (w.transform == 0) {
- /* Match against base dictionary word. */
- return
- TO_BROTLI_BOOL(FindMatchLengthWithLimit(dict, data, w.len) == w.len);
- } else if (w.transform == 10) {
- /* Match against uppercase first transform.
- Note that there are only ASCII uppercase words in the lookup table. */
- return TO_BROTLI_BOOL(dict[0] >= 'a' && dict[0] <= 'z' &&
- (dict[0] ^ 32) == data[0] &&
- FindMatchLengthWithLimit(&dict[1], &data[1], w.len - 1u) ==
- w.len - 1u);
- } else {
- /* Match against uppercase all transform.
- Note that there are only ASCII uppercase words in the lookup table. */
- size_t i;
- for (i = 0; i < w.len; ++i) {
- if (dict[i] >= 'a' && dict[i] <= 'z') {
- if ((dict[i] ^ 32) != data[i]) return BROTLI_FALSE;
- } else {
- if (dict[i] != data[i]) return BROTLI_FALSE;
- }
- }
- return BROTLI_TRUE;
- }
- }
-}
-
-BROTLI_BOOL BrotliFindAllStaticDictionaryMatches(
- const BrotliEncoderDictionary* dictionary, const uint8_t* data,
- size_t min_length, size_t max_length, uint32_t* matches) {
- BROTLI_BOOL has_found_match = BROTLI_FALSE;
- {
- size_t offset = dictionary->buckets[Hash(data)];
- BROTLI_BOOL end = !offset;
- while (!end) {
- DictWord w = dictionary->dict_words[offset++];
- const size_t l = w.len & 0x1F;
- const size_t n = (size_t)1 << dictionary->words->size_bits_by_length[l];
- const size_t id = w.idx;
- end = !!(w.len & 0x80);
- w.len = (uint8_t)l;
- if (w.transform == 0) {
- const size_t matchlen =
- DictMatchLength(dictionary->words, data, id, l, max_length);
- const uint8_t* s;
- size_t minlen;
- size_t maxlen;
- size_t len;
- /* Transform "" + BROTLI_TRANSFORM_IDENTITY + "" */
- if (matchlen == l) {
- AddMatch(id, l, l, matches);
- has_found_match = BROTLI_TRUE;
- }
- /* Transforms "" + BROTLI_TRANSFORM_OMIT_LAST_1 + "" and
- "" + BROTLI_TRANSFORM_OMIT_LAST_1 + "ing " */
- if (matchlen >= l - 1) {
- AddMatch(id + 12 * n, l - 1, l, matches);
- if (l + 2 < max_length &&
- data[l - 1] == 'i' && data[l] == 'n' && data[l + 1] == 'g' &&
- data[l + 2] == ' ') {
- AddMatch(id + 49 * n, l + 3, l, matches);
- }
- has_found_match = BROTLI_TRUE;
- }
- /* Transform "" + BROTLI_TRANSFORM_OMIT_LAST_# + "" (# = 2 .. 9) */
- minlen = min_length;
- if (l > 9) minlen = BROTLI_MAX(size_t, minlen, l - 9);
- maxlen = BROTLI_MIN(size_t, matchlen, l - 2);
- for (len = minlen; len <= maxlen; ++len) {
- size_t cut = l - len;
- size_t transform_id = (cut << 2) +
- (size_t)((dictionary->cutoffTransforms >> (cut * 6)) & 0x3F);
- AddMatch(id + transform_id * n, len, l, matches);
- has_found_match = BROTLI_TRUE;
- }
- if (matchlen < l || l + 6 >= max_length) {
- continue;
- }
- s = &data[l];
- /* Transforms "" + BROTLI_TRANSFORM_IDENTITY + <suffix> */
- if (s[0] == ' ') {
- AddMatch(id + n, l + 1, l, matches);
- if (s[1] == 'a') {
- if (s[2] == ' ') {
- AddMatch(id + 28 * n, l + 3, l, matches);
- } else if (s[2] == 's') {
- if (s[3] == ' ') AddMatch(id + 46 * n, l + 4, l, matches);
- } else if (s[2] == 't') {
- if (s[3] == ' ') AddMatch(id + 60 * n, l + 4, l, matches);
- } else if (s[2] == 'n') {
- if (s[3] == 'd' && s[4] == ' ') {
- AddMatch(id + 10 * n, l + 5, l, matches);
- }
- }
- } else if (s[1] == 'b') {
- if (s[2] == 'y' && s[3] == ' ') {
- AddMatch(id + 38 * n, l + 4, l, matches);
- }
- } else if (s[1] == 'i') {
- if (s[2] == 'n') {
- if (s[3] == ' ') AddMatch(id + 16 * n, l + 4, l, matches);
- } else if (s[2] == 's') {
- if (s[3] == ' ') AddMatch(id + 47 * n, l + 4, l, matches);
- }
- } else if (s[1] == 'f') {
- if (s[2] == 'o') {
- if (s[3] == 'r' && s[4] == ' ') {
- AddMatch(id + 25 * n, l + 5, l, matches);
- }
- } else if (s[2] == 'r') {
- if (s[3] == 'o' && s[4] == 'm' && s[5] == ' ') {
- AddMatch(id + 37 * n, l + 6, l, matches);
- }
- }
- } else if (s[1] == 'o') {
- if (s[2] == 'f') {
- if (s[3] == ' ') AddMatch(id + 8 * n, l + 4, l, matches);
- } else if (s[2] == 'n') {
- if (s[3] == ' ') AddMatch(id + 45 * n, l + 4, l, matches);
- }
- } else if (s[1] == 'n') {
- if (s[2] == 'o' && s[3] == 't' && s[4] == ' ') {
- AddMatch(id + 80 * n, l + 5, l, matches);
- }
- } else if (s[1] == 't') {
- if (s[2] == 'h') {
- if (s[3] == 'e') {
- if (s[4] == ' ') AddMatch(id + 5 * n, l + 5, l, matches);
- } else if (s[3] == 'a') {
- if (s[4] == 't' && s[5] == ' ') {
- AddMatch(id + 29 * n, l + 6, l, matches);
- }
- }
- } else if (s[2] == 'o') {
- if (s[3] == ' ') AddMatch(id + 17 * n, l + 4, l, matches);
- }
- } else if (s[1] == 'w') {
- if (s[2] == 'i' && s[3] == 't' && s[4] == 'h' && s[5] == ' ') {
- AddMatch(id + 35 * n, l + 6, l, matches);
- }
- }
- } else if (s[0] == '"') {
- AddMatch(id + 19 * n, l + 1, l, matches);
- if (s[1] == '>') {
- AddMatch(id + 21 * n, l + 2, l, matches);
- }
- } else if (s[0] == '.') {
- AddMatch(id + 20 * n, l + 1, l, matches);
- if (s[1] == ' ') {
- AddMatch(id + 31 * n, l + 2, l, matches);
- if (s[2] == 'T' && s[3] == 'h') {
- if (s[4] == 'e') {
- if (s[5] == ' ') AddMatch(id + 43 * n, l + 6, l, matches);
- } else if (s[4] == 'i') {
- if (s[5] == 's' && s[6] == ' ') {
- AddMatch(id + 75 * n, l + 7, l, matches);
- }
- }
- }
- }
- } else if (s[0] == ',') {
- AddMatch(id + 76 * n, l + 1, l, matches);
- if (s[1] == ' ') {
- AddMatch(id + 14 * n, l + 2, l, matches);
- }
- } else if (s[0] == '\n') {
- AddMatch(id + 22 * n, l + 1, l, matches);
- if (s[1] == '\t') {
- AddMatch(id + 50 * n, l + 2, l, matches);
- }
- } else if (s[0] == ']') {
- AddMatch(id + 24 * n, l + 1, l, matches);
- } else if (s[0] == '\'') {
- AddMatch(id + 36 * n, l + 1, l, matches);
- } else if (s[0] == ':') {
- AddMatch(id + 51 * n, l + 1, l, matches);
- } else if (s[0] == '(') {
- AddMatch(id + 57 * n, l + 1, l, matches);
- } else if (s[0] == '=') {
- if (s[1] == '"') {
- AddMatch(id + 70 * n, l + 2, l, matches);
- } else if (s[1] == '\'') {
- AddMatch(id + 86 * n, l + 2, l, matches);
- }
- } else if (s[0] == 'a') {
- if (s[1] == 'l' && s[2] == ' ') {
- AddMatch(id + 84 * n, l + 3, l, matches);
- }
- } else if (s[0] == 'e') {
- if (s[1] == 'd') {
- if (s[2] == ' ') AddMatch(id + 53 * n, l + 3, l, matches);
- } else if (s[1] == 'r') {
- if (s[2] == ' ') AddMatch(id + 82 * n, l + 3, l, matches);
- } else if (s[1] == 's') {
- if (s[2] == 't' && s[3] == ' ') {
- AddMatch(id + 95 * n, l + 4, l, matches);
- }
- }
- } else if (s[0] == 'f') {
- if (s[1] == 'u' && s[2] == 'l' && s[3] == ' ') {
- AddMatch(id + 90 * n, l + 4, l, matches);
- }
- } else if (s[0] == 'i') {
- if (s[1] == 'v') {
- if (s[2] == 'e' && s[3] == ' ') {
- AddMatch(id + 92 * n, l + 4, l, matches);
- }
- } else if (s[1] == 'z') {
- if (s[2] == 'e' && s[3] == ' ') {
- AddMatch(id + 100 * n, l + 4, l, matches);
- }
- }
- } else if (s[0] == 'l') {
- if (s[1] == 'e') {
- if (s[2] == 's' && s[3] == 's' && s[4] == ' ') {
- AddMatch(id + 93 * n, l + 5, l, matches);
- }
- } else if (s[1] == 'y') {
- if (s[2] == ' ') AddMatch(id + 61 * n, l + 3, l, matches);
- }
- } else if (s[0] == 'o') {
- if (s[1] == 'u' && s[2] == 's' && s[3] == ' ') {
- AddMatch(id + 106 * n, l + 4, l, matches);
- }
- }
- } else {
- /* Set is_all_caps=0 for BROTLI_TRANSFORM_UPPERCASE_FIRST and
- is_all_caps=1 otherwise (BROTLI_TRANSFORM_UPPERCASE_ALL)
- transform. */
- const BROTLI_BOOL is_all_caps =
- TO_BROTLI_BOOL(w.transform != BROTLI_TRANSFORM_UPPERCASE_FIRST);
- const uint8_t* s;
- if (!IsMatch(dictionary->words, w, data, max_length)) {
- continue;
- }
- /* Transform "" + kUppercase{First,All} + "" */
- AddMatch(id + (is_all_caps ? 44 : 9) * n, l, l, matches);
- has_found_match = BROTLI_TRUE;
- if (l + 1 >= max_length) {
- continue;
- }
- /* Transforms "" + kUppercase{First,All} + <suffix> */
- s = &data[l];
- if (s[0] == ' ') {
- AddMatch(id + (is_all_caps ? 68 : 4) * n, l + 1, l, matches);
- } else if (s[0] == '"') {
- AddMatch(id + (is_all_caps ? 87 : 66) * n, l + 1, l, matches);
- if (s[1] == '>') {
- AddMatch(id + (is_all_caps ? 97 : 69) * n, l + 2, l, matches);
- }
- } else if (s[0] == '.') {
- AddMatch(id + (is_all_caps ? 101 : 79) * n, l + 1, l, matches);
- if (s[1] == ' ') {
- AddMatch(id + (is_all_caps ? 114 : 88) * n, l + 2, l, matches);
- }
- } else if (s[0] == ',') {
- AddMatch(id + (is_all_caps ? 112 : 99) * n, l + 1, l, matches);
- if (s[1] == ' ') {
- AddMatch(id + (is_all_caps ? 107 : 58) * n, l + 2, l, matches);
- }
- } else if (s[0] == '\'') {
- AddMatch(id + (is_all_caps ? 94 : 74) * n, l + 1, l, matches);
- } else if (s[0] == '(') {
- AddMatch(id + (is_all_caps ? 113 : 78) * n, l + 1, l, matches);
- } else if (s[0] == '=') {
- if (s[1] == '"') {
- AddMatch(id + (is_all_caps ? 105 : 104) * n, l + 2, l, matches);
- } else if (s[1] == '\'') {
- AddMatch(id + (is_all_caps ? 116 : 108) * n, l + 2, l, matches);
- }
- }
- }
- }
- }
- /* Transforms with prefixes " " and "." */
- if (max_length >= 5 && (data[0] == ' ' || data[0] == '.')) {
- BROTLI_BOOL is_space = TO_BROTLI_BOOL(data[0] == ' ');
- size_t offset = dictionary->buckets[Hash(&data[1])];
- BROTLI_BOOL end = !offset;
- while (!end) {
- DictWord w = dictionary->dict_words[offset++];
- const size_t l = w.len & 0x1F;
- const size_t n = (size_t)1 << dictionary->words->size_bits_by_length[l];
- const size_t id = w.idx;
- end = !!(w.len & 0x80);
- w.len = (uint8_t)l;
- if (w.transform == 0) {
- const uint8_t* s;
- if (!IsMatch(dictionary->words, w, &data[1], max_length - 1)) {
- continue;
- }
- /* Transforms " " + BROTLI_TRANSFORM_IDENTITY + "" and
- "." + BROTLI_TRANSFORM_IDENTITY + "" */
- AddMatch(id + (is_space ? 6 : 32) * n, l + 1, l, matches);
- has_found_match = BROTLI_TRUE;
- if (l + 2 >= max_length) {
- continue;
- }
- /* Transforms " " + BROTLI_TRANSFORM_IDENTITY + <suffix> and
- "." + BROTLI_TRANSFORM_IDENTITY + <suffix>
- */
- s = &data[l + 1];
- if (s[0] == ' ') {
- AddMatch(id + (is_space ? 2 : 77) * n, l + 2, l, matches);
- } else if (s[0] == '(') {
- AddMatch(id + (is_space ? 89 : 67) * n, l + 2, l, matches);
- } else if (is_space) {
- if (s[0] == ',') {
- AddMatch(id + 103 * n, l + 2, l, matches);
- if (s[1] == ' ') {
- AddMatch(id + 33 * n, l + 3, l, matches);
- }
- } else if (s[0] == '.') {
- AddMatch(id + 71 * n, l + 2, l, matches);
- if (s[1] == ' ') {
- AddMatch(id + 52 * n, l + 3, l, matches);
- }
- } else if (s[0] == '=') {
- if (s[1] == '"') {
- AddMatch(id + 81 * n, l + 3, l, matches);
- } else if (s[1] == '\'') {
- AddMatch(id + 98 * n, l + 3, l, matches);
- }
- }
- }
- } else if (is_space) {
- /* Set is_all_caps=0 for BROTLI_TRANSFORM_UPPERCASE_FIRST and
- is_all_caps=1 otherwise (BROTLI_TRANSFORM_UPPERCASE_ALL)
- transform. */
- const BROTLI_BOOL is_all_caps =
- TO_BROTLI_BOOL(w.transform != BROTLI_TRANSFORM_UPPERCASE_FIRST);
- const uint8_t* s;
- if (!IsMatch(dictionary->words, w, &data[1], max_length - 1)) {
- continue;
- }
- /* Transforms " " + kUppercase{First,All} + "" */
- AddMatch(id + (is_all_caps ? 85 : 30) * n, l + 1, l, matches);
- has_found_match = BROTLI_TRUE;
- if (l + 2 >= max_length) {
- continue;
- }
- /* Transforms " " + kUppercase{First,All} + <suffix> */
- s = &data[l + 1];
- if (s[0] == ' ') {
- AddMatch(id + (is_all_caps ? 83 : 15) * n, l + 2, l, matches);
- } else if (s[0] == ',') {
- if (!is_all_caps) {
- AddMatch(id + 109 * n, l + 2, l, matches);
- }
- if (s[1] == ' ') {
- AddMatch(id + (is_all_caps ? 111 : 65) * n, l + 3, l, matches);
- }
- } else if (s[0] == '.') {
- AddMatch(id + (is_all_caps ? 115 : 96) * n, l + 2, l, matches);
- if (s[1] == ' ') {
- AddMatch(id + (is_all_caps ? 117 : 91) * n, l + 3, l, matches);
- }
- } else if (s[0] == '=') {
- if (s[1] == '"') {
- AddMatch(id + (is_all_caps ? 110 : 118) * n, l + 3, l, matches);
- } else if (s[1] == '\'') {
- AddMatch(id + (is_all_caps ? 119 : 120) * n, l + 3, l, matches);
- }
- }
- }
- }
- }
- if (max_length >= 6) {
- /* Transforms with prefixes "e ", "s ", ", " and "\xC2\xA0" */
- if ((data[1] == ' ' &&
- (data[0] == 'e' || data[0] == 's' || data[0] == ',')) ||
- (data[0] == 0xC2 && data[1] == 0xA0)) {
- size_t offset = dictionary->buckets[Hash(&data[2])];
- BROTLI_BOOL end = !offset;
- while (!end) {
- DictWord w = dictionary->dict_words[offset++];
- const size_t l = w.len & 0x1F;
- const size_t n = (size_t)1 << dictionary->words->size_bits_by_length[l];
- const size_t id = w.idx;
- end = !!(w.len & 0x80);
- w.len = (uint8_t)l;
- if (w.transform == 0 &&
- IsMatch(dictionary->words, w, &data[2], max_length - 2)) {
- if (data[0] == 0xC2) {
- AddMatch(id + 102 * n, l + 2, l, matches);
- has_found_match = BROTLI_TRUE;
- } else if (l + 2 < max_length && data[l + 2] == ' ') {
- size_t t = data[0] == 'e' ? 18 : (data[0] == 's' ? 7 : 13);
- AddMatch(id + t * n, l + 3, l, matches);
- has_found_match = BROTLI_TRUE;
- }
- }
- }
- }
- }
- if (max_length >= 9) {
- /* Transforms with prefixes " the " and ".com/" */
- if ((data[0] == ' ' && data[1] == 't' && data[2] == 'h' &&
- data[3] == 'e' && data[4] == ' ') ||
- (data[0] == '.' && data[1] == 'c' && data[2] == 'o' &&
- data[3] == 'm' && data[4] == '/')) {
- size_t offset = dictionary->buckets[Hash(&data[5])];
- BROTLI_BOOL end = !offset;
- while (!end) {
- DictWord w = dictionary->dict_words[offset++];
- const size_t l = w.len & 0x1F;
- const size_t n = (size_t)1 << dictionary->words->size_bits_by_length[l];
- const size_t id = w.idx;
- end = !!(w.len & 0x80);
- w.len = (uint8_t)l;
- if (w.transform == 0 &&
- IsMatch(dictionary->words, w, &data[5], max_length - 5)) {
- AddMatch(id + (data[0] == ' ' ? 41 : 72) * n, l + 5, l, matches);
- has_found_match = BROTLI_TRUE;
- if (l + 5 < max_length) {
- const uint8_t* s = &data[l + 5];
- if (data[0] == ' ') {
- if (l + 8 < max_length &&
- s[0] == ' ' && s[1] == 'o' && s[2] == 'f' && s[3] == ' ') {
- AddMatch(id + 62 * n, l + 9, l, matches);
- if (l + 12 < max_length &&
- s[4] == 't' && s[5] == 'h' && s[6] == 'e' && s[7] == ' ') {
- AddMatch(id + 73 * n, l + 13, l, matches);
- }
- }
- }
- }
- }
- }
- }
- }
- return has_found_match;
-}
-
-#if defined(__cplusplus) || defined(c_plusplus)
-} /* extern "C" */
-#endif
diff --git a/BaseTools/Source/C/BrotliCompress/enc/utf8_util.c b/BaseTools/Source/C/BrotliCompress/enc/utf8_util.c
deleted file mode 100644
index 9d21aa9fa3ed..000000000000
--- a/BaseTools/Source/C/BrotliCompress/enc/utf8_util.c
+++ /dev/null
@@ -1,85 +0,0 @@
-/* Copyright 2013 Google Inc. All Rights Reserved.
-
- Distributed under MIT license.
- See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
-*/
-
-/* Heuristics for deciding about the UTF8-ness of strings. */
-
-#include "./utf8_util.h"
-
-#include <brotli/types.h>
-
-#if defined(__cplusplus) || defined(c_plusplus)
-extern "C" {
-#endif
-
-static size_t BrotliParseAsUTF8(
- int* symbol, const uint8_t* input, size_t size) {
- /* ASCII */
- if ((input[0] & 0x80) == 0) {
- *symbol = input[0];
- if (*symbol > 0) {
- return 1;
- }
- }
- /* 2-byte UTF8 */
- if (size > 1u &&
- (input[0] & 0xE0) == 0xC0 &&
- (input[1] & 0xC0) == 0x80) {
- *symbol = (((input[0] & 0x1F) << 6) |
- (input[1] & 0x3F));
- if (*symbol > 0x7F) {
- return 2;
- }
- }
- /* 3-byte UFT8 */
- if (size > 2u &&
- (input[0] & 0xF0) == 0xE0 &&
- (input[1] & 0xC0) == 0x80 &&
- (input[2] & 0xC0) == 0x80) {
- *symbol = (((input[0] & 0x0F) << 12) |
- ((input[1] & 0x3F) << 6) |
- (input[2] & 0x3F));
- if (*symbol > 0x7FF) {
- return 3;
- }
- }
- /* 4-byte UFT8 */
- if (size > 3u &&
- (input[0] & 0xF8) == 0xF0 &&
- (input[1] & 0xC0) == 0x80 &&
- (input[2] & 0xC0) == 0x80 &&
- (input[3] & 0xC0) == 0x80) {
- *symbol = (((input[0] & 0x07) << 18) |
- ((input[1] & 0x3F) << 12) |
- ((input[2] & 0x3F) << 6) |
- (input[3] & 0x3F));
- if (*symbol > 0xFFFF && *symbol <= 0x10FFFF) {
- return 4;
- }
- }
- /* Not UTF8, emit a special symbol above the UTF8-code space */
- *symbol = 0x110000 | input[0];
- return 1;
-}
-
-/* Returns 1 if at least min_fraction of the data is UTF8-encoded.*/
-BROTLI_BOOL BrotliIsMostlyUTF8(
- const uint8_t* data, const size_t pos, const size_t mask,
- const size_t length, const double min_fraction) {
- size_t size_utf8 = 0;
- size_t i = 0;
- while (i < length) {
- int symbol;
- size_t bytes_read =
- BrotliParseAsUTF8(&symbol, &data[(pos + i) & mask], length - i);
- i += bytes_read;
- if (symbol < 0x110000) size_utf8 += bytes_read;
- }
- return TO_BROTLI_BOOL(size_utf8 > min_fraction * (double)length);
-}
-
-#if defined(__cplusplus) || defined(c_plusplus)
-} /* extern "C" */
-#endif
diff --git a/BaseTools/Source/C/BrotliCompress/tools/brotli.c b/BaseTools/Source/C/BrotliCompress/tools/brotli.c
deleted file mode 100644
index b0246e1ecf86..000000000000
--- a/BaseTools/Source/C/BrotliCompress/tools/brotli.c
+++ /dev/null
@@ -1,1143 +0,0 @@
-/* Copyright 2014 Google Inc. All Rights Reserved.
-
- Distributed under MIT license.
- See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
-*/
-
-/* Command line interface for Brotli library. */
-
-#include <errno.h>
-#include <fcntl.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <sys/stat.h>
-#include <sys/types.h>
-#include <time.h>
-
-#include "../common/constants.h"
-#include "../common/version.h"
-#include <brotli/decode.h>
-#include <brotli/encode.h>
-
-#if !defined(_WIN32)
-#include <unistd.h>
-#include <utime.h>
-#define MAKE_BINARY(FILENO) (FILENO)
-#else
-#include <io.h>
-#include <share.h>
-#include <sys/utime.h>
-
-#define MAKE_BINARY(FILENO) (_setmode((FILENO), _O_BINARY), (FILENO))
-
-#if !defined(__MINGW32__)
-#define STDIN_FILENO _fileno(stdin)
-#define STDOUT_FILENO _fileno(stdout)
-#define S_IRUSR S_IREAD
-#define S_IWUSR S_IWRITE
-#endif
-
-#define fdopen _fdopen
-#define isatty _isatty
-#define unlink _unlink
-#define utimbuf _utimbuf
-#define utime _utime
-
-#define fopen ms_fopen
-#define open ms_open
-
-#define chmod(F, P) (0)
-#define chown(F, O, G) (0)
-
-#if defined(_MSC_VER) && (_MSC_VER >= 1400)
-#define fseek _fseeki64
-#define ftell _ftelli64
-#endif
-
-static FILE* ms_fopen(const char* filename, const char* mode) {
- FILE* result = 0;
- fopen_s(&result, filename, mode);
- return result;
-}
-
-static int ms_open(const char* filename, int oflag, int pmode) {
- int result = -1;
- _sopen_s(&result, filename, oflag | O_BINARY, _SH_DENYNO, pmode);
- return result;
-}
-#endif /* WIN32 */
-
-typedef enum {
- COMMAND_COMPRESS,
- COMMAND_DECOMPRESS,
- COMMAND_HELP,
- COMMAND_INVALID,
- COMMAND_TEST_INTEGRITY,
- COMMAND_NOOP,
- COMMAND_VERSION
-} Command;
-
-#define DEFAULT_LGWIN 24
-#define DEFAULT_SUFFIX ".br"
-#define MAX_OPTIONS 20
-#define DECODE_HEADER_SIZE 0x10
-#define GAP_MEM_BLOCK 0x1000
-
-typedef struct {
- /* Parameters */
- int gmem;
- int quality;
- int lgwin;
- BROTLI_BOOL force_overwrite;
- BROTLI_BOOL junk_source;
- BROTLI_BOOL copy_stat;
- BROTLI_BOOL verbose;
- BROTLI_BOOL write_to_stdout;
- BROTLI_BOOL test_integrity;
- BROTLI_BOOL decompress;
- BROTLI_BOOL large_window;
- const char* output_path;
- const char* suffix;
- int not_input_indices[MAX_OPTIONS];
- size_t longest_path_len;
- size_t input_count;
-
- /* Inner state */
- int argc;
- char** argv;
- char* modified_path; /* Storage for path with appended / cut suffix */
- int iterator;
- int ignore;
- BROTLI_BOOL iterator_error;
- uint8_t* buffer;
- uint8_t* input;
- uint8_t* output;
- const char* current_input_path;
- const char* current_output_path;
- int64_t input_file_length; /* -1, if impossible to calculate */
- FILE* fin;
- FILE* fout;
-
- /* I/O buffers */
- size_t available_in;
- const uint8_t* next_in;
- size_t available_out;
- uint8_t* next_out;
-} Context;
-
-/* Parse up to 5 decimal digits. */
-static BROTLI_BOOL ParseInt(const char* s, int low, int high, int* result) {
- int value = 0;
- int i;
- for (i = 0; i < 5; ++i) {
- char c = s[i];
- if (c == 0) break;
- if (s[i] < '0' || s[i] > '9') return BROTLI_FALSE;
- value = (10 * value) + (c - '0');
- }
- if (i == 0) return BROTLI_FALSE;
- if (i > 1 && s[0] == '0') return BROTLI_FALSE;
- if (s[i] != 0) return BROTLI_FALSE;
- if (value < low || value > high) return BROTLI_FALSE;
- *result = value;
- return BROTLI_TRUE;
-}
-
-/* Returns "base file name" or its tail, if it contains '/' or '\'. */
-static const char* FileName(const char* path) {
- const char* separator_position = strrchr(path, '/');
- if (separator_position) path = separator_position + 1;
- separator_position = strrchr(path, '\\');
- if (separator_position) path = separator_position + 1;
- return path;
-}
-
-/* Detect if the program name is a special alias that infers a command type. */
-static Command ParseAlias(const char* name) {
- /* TODO: cast name to lower case? */
- const char* unbrotli = "unbrotli";
- size_t unbrotli_len = strlen(unbrotli);
- name = FileName(name);
- /* Partial comparison. On Windows there could be ".exe" suffix. */
- if (strncmp(name, unbrotli, unbrotli_len) == 0) {
- char terminator = name[unbrotli_len];
- if (terminator == 0 || terminator == '.') return COMMAND_DECOMPRESS;
- }
- return COMMAND_COMPRESS;
-}
-
-static Command ParseParams(Context* params) {
- int argc = params->argc;
- char** argv = params->argv;
- int i;
- int next_option_index = 0;
- size_t input_count = 0;
- size_t longest_path_len = 1;
- BROTLI_BOOL command_set = BROTLI_FALSE;
- BROTLI_BOOL gmem_set = BROTLI_FALSE;
- BROTLI_BOOL quality_set = BROTLI_FALSE;
- BROTLI_BOOL output_set = BROTLI_FALSE;
- BROTLI_BOOL keep_set = BROTLI_FALSE;
- BROTLI_BOOL lgwin_set = BROTLI_FALSE;
- BROTLI_BOOL suffix_set = BROTLI_FALSE;
- BROTLI_BOOL after_dash_dash = BROTLI_FALSE;
- Command command = ParseAlias(argv[0]);
-
- for (i = 1; i < argc; ++i) {
- const char* arg = argv[i];
- /* C99 5.1.2.2.1: "members argv[0] through argv[argc-1] inclusive shall
- contain pointers to strings"; NULL and 0-length are not forbidden. */
- size_t arg_len = arg ? strlen(arg) : 0;
-
- if (arg_len == 0) {
- params->not_input_indices[next_option_index++] = i;
- continue;
- }
-
- /* Too many options. The expected longest option list is:
- "-q 0 -w 10 -o f -D d -S b -d -f -k -n -v --", i.e. 16 items in total.
- This check is an additional guard that is never triggered, but provides
- a guard for future changes. */
- if (next_option_index > (MAX_OPTIONS - 2)) {
- fprintf(stderr, "too many options passed\n");
- return COMMAND_INVALID;
- }
-
- /* Input file entry. */
- if (after_dash_dash || arg[0] != '-' || arg_len == 1) {
- input_count++;
- if (longest_path_len < arg_len) longest_path_len = arg_len;
- continue;
- }
-
- /* Not a file entry. */
- params->not_input_indices[next_option_index++] = i;
-
- /* '--' entry stop parsing arguments. */
- if (arg_len == 2 && arg[1] == '-') {
- after_dash_dash = BROTLI_TRUE;
- continue;
- }
-
- /* Simple / coalesced options. */
- if (arg[1] != '-') {
- size_t j;
- for (j = 1; j < arg_len; ++j) {
- char c = arg[j];
- if (c >= '0' && c <= '9') {
- if (quality_set) {
- fprintf(stderr, "quality already set\n");
- return COMMAND_INVALID;
- }
- quality_set = BROTLI_TRUE;
- params->quality = c - '0';
- continue;
- } else if (c == 'c') {
- if (output_set) {
- fprintf(stderr, "write to standard output already set\n");
- return COMMAND_INVALID;
- }
- output_set = BROTLI_TRUE;
- params->write_to_stdout = BROTLI_TRUE;
- continue;
- } else if (c == 'd') {
- if (command_set) {
- fprintf(stderr, "command already set when parsing -d\n");
- return COMMAND_INVALID;
- }
- command_set = BROTLI_TRUE;
- command = COMMAND_DECOMPRESS;
- continue;
- } else if (c == 'f') {
- if (params->force_overwrite) {
- fprintf(stderr, "force output overwrite already set\n");
- return COMMAND_INVALID;
- }
- params->force_overwrite = BROTLI_TRUE;
- continue;
- } else if (c == 'h') {
- /* Don't parse further. */
- return COMMAND_HELP;
- } else if (c == 'j' || c == 'k') {
- if (keep_set) {
- fprintf(stderr, "argument --rm / -j or --keep / -n already set\n");
- return COMMAND_INVALID;
- }
- keep_set = BROTLI_TRUE;
- params->junk_source = TO_BROTLI_BOOL(c == 'j');
- continue;
- } else if (c == 'n') {
- if (!params->copy_stat) {
- fprintf(stderr, "argument --no-copy-stat / -n already set\n");
- return COMMAND_INVALID;
- }
- params->copy_stat = BROTLI_FALSE;
- continue;
- } else if (c == 't') {
- if (command_set) {
- fprintf(stderr, "command already set when parsing -t\n");
- return COMMAND_INVALID;
- }
- command_set = BROTLI_TRUE;
- command = COMMAND_TEST_INTEGRITY;
- continue;
- } else if (c == 'v') {
- if (params->verbose) {
- fprintf(stderr, "argument --verbose / -v already set\n");
- return COMMAND_INVALID;
- }
- params->verbose = BROTLI_TRUE;
- continue;
- } else if (c == 'V') {
- /* Don't parse further. */
- return COMMAND_VERSION;
- } else if (c == 'Z') {
- if (quality_set) {
- fprintf(stderr, "quality already set\n");
- return COMMAND_INVALID;
- }
- quality_set = BROTLI_TRUE;
- params->quality = 11;
- continue;
- }
- /* o/q/w/D/S with parameter is expected */
- if (c != 'o' && c != 'q' && c != 'w' && c != 'D' && c != 'S') {
- fprintf(stderr, "invalid argument -%c\n", c);
- return COMMAND_INVALID;
- }
- if (j + 1 != arg_len) {
- fprintf(stderr, "expected parameter for argument -%c\n", c);
- return COMMAND_INVALID;
- }
- i++;
- if (i == argc || !argv[i] || argv[i][0] == 0) {
- fprintf(stderr, "expected parameter for argument -%c\n", c);
- return COMMAND_INVALID;
- }
- params->not_input_indices[next_option_index++] = i;
- if (c == 'o') {
- if (output_set) {
- fprintf(stderr, "write to standard output already set (-o)\n");
- return COMMAND_INVALID;
- }
- params->output_path = argv[i];
- } else if (c == 'g') {
- gmem_set = ParseInt(argv[i], 1, 0x10, ¶ms->gmem);
- if (!gmem_set) {
- fprintf(stderr, "error parsing gmem value [%s]\n", argv[i]);
- return COMMAND_INVALID;
- }
- } else if (c == 'q') {
- if (quality_set) {
- fprintf(stderr, "quality already set\n");
- return COMMAND_INVALID;
- }
- quality_set = ParseInt(argv[i], BROTLI_MIN_QUALITY,
- BROTLI_MAX_QUALITY, ¶ms->quality);
- if (!quality_set) {
- fprintf(stderr, "error parsing quality value [%s]\n", argv[i]);
- return COMMAND_INVALID;
- }
- } else if (c == 'w') {
- if (lgwin_set) {
- fprintf(stderr, "lgwin parameter already set\n");
- return COMMAND_INVALID;
- }
- lgwin_set = ParseInt(argv[i], 0,
- BROTLI_MAX_WINDOW_BITS, ¶ms->lgwin);
- if (!lgwin_set) {
- fprintf(stderr, "error parsing lgwin value [%s]\n", argv[i]);
- return COMMAND_INVALID;
- }
- if (params->lgwin != 0 && params->lgwin < BROTLI_MIN_WINDOW_BITS) {
- fprintf(stderr,
- "lgwin parameter (%d) smaller than the minimum (%d)\n",
- params->lgwin, BROTLI_MIN_WINDOW_BITS);
- return COMMAND_INVALID;
- }
- } else if (c == 'S') {
- if (suffix_set) {
- fprintf(stderr, "suffix already set\n");
- return COMMAND_INVALID;
- }
- suffix_set = BROTLI_TRUE;
- params->suffix = argv[i];
- }
- }
- } else { /* Double-dash. */
- arg = &arg[2];
- if (strcmp("best", arg) == 0) {
- if (quality_set) {
- fprintf(stderr, "quality already set\n");
- return COMMAND_INVALID;
- }
- quality_set = BROTLI_TRUE;
- params->quality = 11;
- } else if (strcmp("decompress", arg) == 0) {
- if (command_set) {
- fprintf(stderr, "command already set when parsing --decompress\n");
- return COMMAND_INVALID;
- }
- command_set = BROTLI_TRUE;
- command = COMMAND_DECOMPRESS;
- } else if (strcmp("force", arg) == 0) {
- if (params->force_overwrite) {
- fprintf(stderr, "force output overwrite already set\n");
- return COMMAND_INVALID;
- }
- params->force_overwrite = BROTLI_TRUE;
- } else if (strcmp("help", arg) == 0) {
- /* Don't parse further. */
- return COMMAND_HELP;
- } else if (strcmp("keep", arg) == 0) {
- if (keep_set) {
- fprintf(stderr, "argument --rm / -j or --keep / -n already set\n");
- return COMMAND_INVALID;
- }
- keep_set = BROTLI_TRUE;
- params->junk_source = BROTLI_FALSE;
- } else if (strcmp("no-copy-stat", arg) == 0) {
- if (!params->copy_stat) {
- fprintf(stderr, "argument --no-copy-stat / -n already set\n");
- return COMMAND_INVALID;
- }
- params->copy_stat = BROTLI_FALSE;
- } else if (strcmp("rm", arg) == 0) {
- if (keep_set) {
- fprintf(stderr, "argument --rm / -j or --keep / -n already set\n");
- return COMMAND_INVALID;
- }
- keep_set = BROTLI_TRUE;
- params->junk_source = BROTLI_TRUE;
- } else if (strcmp("stdout", arg) == 0) {
- if (output_set) {
- fprintf(stderr, "write to standard output already set\n");
- return COMMAND_INVALID;
- }
- output_set = BROTLI_TRUE;
- params->write_to_stdout = BROTLI_TRUE;
- } else if (strcmp("test", arg) == 0) {
- if (command_set) {
- fprintf(stderr, "command already set when parsing --test\n");
- return COMMAND_INVALID;
- }
- command_set = BROTLI_TRUE;
- command = COMMAND_TEST_INTEGRITY;
- } else if (strcmp("verbose", arg) == 0) {
- if (params->verbose) {
- fprintf(stderr, "argument --verbose / -v already set\n");
- return COMMAND_INVALID;
- }
- params->verbose = BROTLI_TRUE;
- } else if (strcmp("version", arg) == 0) {
- /* Don't parse further. */
- return COMMAND_VERSION;
- } else {
- /* key=value */
- const char* value = strrchr(arg, '=');
- size_t key_len;
- if (!value || value[1] == 0) {
- fprintf(stderr, "must pass the parameter as --%s=value\n", arg);
- return COMMAND_INVALID;
- }
- key_len = (size_t)(value - arg);
- value++;
- if (strncmp("lgwin", arg, key_len) == 0) {
- if (lgwin_set) {
- fprintf(stderr, "lgwin parameter already set\n");
- return COMMAND_INVALID;
- }
- lgwin_set = ParseInt(value, 0,
- BROTLI_MAX_WINDOW_BITS, ¶ms->lgwin);
- if (!lgwin_set) {
- fprintf(stderr, "error parsing lgwin value [%s]\n", value);
- return COMMAND_INVALID;
- }
- if (params->lgwin != 0 && params->lgwin < BROTLI_MIN_WINDOW_BITS) {
- fprintf(stderr,
- "lgwin parameter (%d) smaller than the minimum (%d)\n",
- params->lgwin, BROTLI_MIN_WINDOW_BITS);
- return COMMAND_INVALID;
- }
- } else if (strncmp("large_window", arg, key_len) == 0) {
- /* This option is intentionally not mentioned in help. */
- if (lgwin_set) {
- fprintf(stderr, "lgwin parameter already set\n");
- return COMMAND_INVALID;
- }
- lgwin_set = ParseInt(value, 0,
- BROTLI_LARGE_MAX_WINDOW_BITS, ¶ms->lgwin);
- if (!lgwin_set) {
- fprintf(stderr, "error parsing lgwin value [%s]\n", value);
- return COMMAND_INVALID;
- }
- if (params->lgwin != 0 && params->lgwin < BROTLI_MIN_WINDOW_BITS) {
- fprintf(stderr,
- "lgwin parameter (%d) smaller than the minimum (%d)\n",
- params->lgwin, BROTLI_MIN_WINDOW_BITS);
- return COMMAND_INVALID;
- }
- } else if (strncmp("output", arg, key_len) == 0) {
- if (output_set) {
- fprintf(stderr,
- "write to standard output already set (--output)\n");
- return COMMAND_INVALID;
- }
- params->output_path = value;
- } else if (strncmp("gap", arg, key_len) == 0) {
- gmem_set = ParseInt(value, 1, 0x10, ¶ms->gmem);
- if (!gmem_set) {
- fprintf(stderr, "error parsing gmem value [%s]\n", value);
- return COMMAND_INVALID;
- }
- } else if (strncmp("quality", arg, key_len) == 0) {
- if (quality_set) {
- fprintf(stderr, "quality already set\n");
- return COMMAND_INVALID;
- }
- quality_set = ParseInt(value, BROTLI_MIN_QUALITY,
- BROTLI_MAX_QUALITY, ¶ms->quality);
- if (!quality_set) {
- fprintf(stderr, "error parsing quality value [%s]\n", value);
- return COMMAND_INVALID;
- }
- } else if (strncmp("suffix", arg, key_len) == 0) {
- if (suffix_set) {
- fprintf(stderr, "suffix already set\n");
- return COMMAND_INVALID;
- }
- suffix_set = BROTLI_TRUE;
- params->suffix = value;
- } else {
- fprintf(stderr, "invalid parameter: [%s]\n", arg);
- return COMMAND_INVALID;
- }
- }
- }
- }
-
- params->input_count = input_count;
- params->longest_path_len = longest_path_len;
- params->decompress = (command == COMMAND_DECOMPRESS);
- params->test_integrity = (command == COMMAND_TEST_INTEGRITY);
-
- if (input_count > 1 && output_set) return COMMAND_INVALID;
- if (params->test_integrity) {
- if (params->output_path) return COMMAND_INVALID;
- if (params->write_to_stdout) return COMMAND_INVALID;
- }
- if (strchr(params->suffix, '/') || strchr(params->suffix, '\\')) {
- return COMMAND_INVALID;
- }
-
- return command;
-}
-
-static void PrintVersion(void) {
- int major = BROTLI_VERSION >> 24;
- int minor = (BROTLI_VERSION >> 12) & 0xFFF;
- int patch = BROTLI_VERSION & 0xFFF;
- fprintf(stdout, "brotli %d.%d.%d\n", major, minor, patch);
-}
-
-static void PrintHelp(const char* name, BROTLI_BOOL error) {
- FILE* media = error ? stderr : stdout;
- /* String is cut to pieces with length less than 509, to conform C90 spec. */
- fprintf(media,
-"Usage: %s [OPTION]... [FILE]...\n",
- name);
- fprintf(media,
-"Options:\n"
-" -# compression level (0-9)\n"
-" -c, --stdout write on standard output\n"
-" -d, --decompress decompress\n"
-" -f, --force force output file overwrite\n"
-" -h, --help display this help and exit\n");
- fprintf(media,
-" -j, --rm remove source file(s)\n"
-" -k, --keep keep source file(s) (default)\n"
-" -n, --no-copy-stat do not copy source file(s) attributes\n"
-" -o FILE, --output=FILE output file (only if 1 input file)\n");
- fprintf(media,
-" -g NUM, --gap=NUM scratch memory gap level (1-16)\n");
- fprintf(media,
-" -q NUM, --quality=NUM compression level (%d-%d)\n",
- BROTLI_MIN_QUALITY, BROTLI_MAX_QUALITY);
- fprintf(media,
-" -t, --test test compressed file integrity\n"
-" -v, --verbose verbose mode\n");
- fprintf(media,
-" -w NUM, --lgwin=NUM set LZ77 window size (0, %d-%d)\n",
- BROTLI_MIN_WINDOW_BITS, BROTLI_MAX_WINDOW_BITS);
- fprintf(media,
-" window size = 2**NUM - 16\n"
-" 0 lets compressor choose the optimal value\n");
- fprintf(media,
-" -S SUF, --suffix=SUF output file suffix (default:'%s')\n",
- DEFAULT_SUFFIX);
- fprintf(media,
-" -V, --version display version and exit\n"
-" -Z, --best use best compression level (11) (default)\n"
-"Simple options could be coalesced, i.e. '-9kf' is equivalent to '-9 -k -f'.\n"
-"With no FILE, or when FILE is -, read standard input.\n"
-"All arguments after '--' are treated as files.\n");
-}
-
-static const char* PrintablePath(const char* path) {
- return path ? path : "con";
-}
-
-static BROTLI_BOOL OpenInputFile(const char* input_path, FILE** f) {
- *f = NULL;
- if (!input_path) {
- *f = fdopen(MAKE_BINARY(STDIN_FILENO), "rb");
- return BROTLI_TRUE;
- }
- *f = fopen(input_path, "rb");
- if (!*f) {
- fprintf(stderr, "failed to open input file [%s]: %s\n",
- PrintablePath(input_path), strerror(errno));
- return BROTLI_FALSE;
- }
- return BROTLI_TRUE;
-}
-
-static BROTLI_BOOL OpenOutputFile(const char* output_path, FILE** f,
- BROTLI_BOOL force) {
- int fd;
- *f = NULL;
- if (!output_path) {
- *f = fdopen(MAKE_BINARY(STDOUT_FILENO), "wb");
- return BROTLI_TRUE;
- }
- fd = open(output_path, O_CREAT | (force ? 0 : O_EXCL) | O_WRONLY | O_TRUNC,
- S_IRUSR | S_IWUSR);
- if (fd < 0) {
- fd = open(output_path, (force ? 0 : O_EXCL) | O_WRONLY | O_TRUNC,
- S_IRUSR | S_IWUSR);
- if (fd < 0) {
- fprintf(stderr, "failed to open output file [%s]: %s\n",
- PrintablePath(output_path), strerror(errno));
- return BROTLI_FALSE;
- }
- }
-
- *f = fdopen(fd, "wb");
- if (!*f) {
- fprintf(stderr, "failed to open output file [%s]: %s\n",
- PrintablePath(output_path), strerror(errno));
- return BROTLI_FALSE;
- }
- return BROTLI_TRUE;
-}
-
-static int64_t FileSize(const char* path) {
- FILE* f = fopen(path, "rb");
- int64_t retval;
- if (f == NULL) {
- return -1;
- }
- if (fseek(f, 0L, SEEK_END) != 0) {
- fclose(f);
- return -1;
- }
- retval = ftell(f);
- if (fclose(f) != 0) {
- return -1;
- }
- return retval;
-}
-
-/* Copy file times and permissions.
- TODO: this is a "best effort" implementation; honest cross-platform
- fully featured implementation is way too hacky; add more hacks by request. */
-static void CopyStat(const char* input_path, const char* output_path) {
- struct stat statbuf;
- struct utimbuf times;
- int res;
- if (input_path == 0 || output_path == 0) {
- return;
- }
- if (stat(input_path, &statbuf) != 0) {
- return;
- }
- times.actime = statbuf.st_atime;
- times.modtime = statbuf.st_mtime;
- utime(output_path, ×);
- res = chmod(output_path, statbuf.st_mode & (S_IRWXU | S_IRWXG | S_IRWXO));
- if (res != 0) {
- fprintf(stderr, "setting access bits failed for [%s]: %s\n",
- PrintablePath(output_path), strerror(errno));
- }
- res = chown(output_path, (uid_t)-1, statbuf.st_gid);
- if (res != 0) {
- fprintf(stderr, "setting group failed for [%s]: %s\n",
- PrintablePath(output_path), strerror(errno));
- }
- res = chown(output_path, statbuf.st_uid, (gid_t)-1);
- if (res != 0) {
- fprintf(stderr, "setting user failed for [%s]: %s\n",
- PrintablePath(output_path), strerror(errno));
- }
-}
-
-int64_t input_file_length = 0;
-
-static BROTLI_BOOL NextFile(Context* context) {
- const char* arg;
- size_t arg_len;
-
- /* Iterator points to last used arg; increment to search for the next one. */
- context->iterator++;
-
- context->input_file_length = -1;
-
- /* No input path; read from console. */
- if (context->input_count == 0) {
- if (context->iterator > 1) return BROTLI_FALSE;
- context->current_input_path = NULL;
- /* Either write to the specified path, or to console. */
- context->current_output_path = context->output_path;
- return BROTLI_TRUE;
- }
-
- /* Skip option arguments. */
- while (context->iterator == context->not_input_indices[context->ignore]) {
- context->iterator++;
- context->ignore++;
- }
-
- /* All args are scanned already. */
- if (context->iterator >= context->argc) return BROTLI_FALSE;
-
- /* Iterator now points to the input file name. */
- arg = context->argv[context->iterator];
- arg_len = strlen(arg);
- /* Read from console. */
- if (arg_len == 1 && arg[0] == '-') {
- context->current_input_path = NULL;
- context->current_output_path = context->output_path;
- return BROTLI_TRUE;
- }
-
- if (context->current_input_path == NULL) {
- context->current_input_path = arg;
- }
- context->input_file_length = FileSize(context->current_input_path);
- context->current_output_path = context->output_path;
- if (!context->decompress) {
- input_file_length += context->input_file_length;
- }
-
- if (context->output_path) return BROTLI_TRUE;
- if (context->write_to_stdout) return BROTLI_TRUE;
-
- strcpy(context->modified_path, arg);
- context->current_output_path = context->modified_path;
- /* If output is not specified, input path suffix should match. */
- if (context->decompress) {
- size_t suffix_len = strlen(context->suffix);
- char* name = (char*)FileName(context->modified_path);
- char* name_suffix;
- size_t name_len = strlen(name);
- if (name_len < suffix_len + 1) {
- fprintf(stderr, "empty output file name for [%s] input file\n",
- PrintablePath(arg));
- context->iterator_error = BROTLI_TRUE;
- return BROTLI_FALSE;
- }
- name_suffix = name + name_len - suffix_len;
- if (strcmp(context->suffix, name_suffix) != 0) {
- fprintf(stderr, "input file [%s] suffix mismatch\n",
- PrintablePath(arg));
- context->iterator_error = BROTLI_TRUE;
- return BROTLI_FALSE;
- }
- name_suffix[0] = 0;
- return BROTLI_TRUE;
- } else {
- strcpy(context->modified_path + arg_len, context->suffix);
- return BROTLI_TRUE;
- }
-}
-
-static BROTLI_BOOL OpenFiles(Context* context) {
- BROTLI_BOOL is_ok = OpenInputFile(context->current_input_path, &context->fin);
- if (context->decompress) {
- //
- // skip the decoder data header
- //
- fseek(context->fin, DECODE_HEADER_SIZE, SEEK_SET);
- }
- if (!context->test_integrity && is_ok && context->fout == NULL) {
- is_ok = OpenOutputFile(
- context->current_output_path, &context->fout, context->force_overwrite);
- }
- if (!context->decompress) {
- //
- // append the decoder data header
- //
- fseek(context->fout, DECODE_HEADER_SIZE, SEEK_SET);
- }
- return is_ok;
-}
-
-static BROTLI_BOOL CloseFiles(Context* context, BROTLI_BOOL success) {
- BROTLI_BOOL is_ok = BROTLI_TRUE;
- if (!context->test_integrity && context->fout) {
- if (!success && context->current_output_path) {
- unlink(context->current_output_path);
- }
- if (fclose(context->fout) != 0) {
- if (success) {
- fprintf(stderr, "fclose failed [%s]: %s\n",
- PrintablePath(context->current_output_path), strerror(errno));
- }
- is_ok = BROTLI_FALSE;
- }
-
- /* TOCTOU violation, but otherwise it is impossible to set file times. */
- if (success && is_ok && context->copy_stat) {
- CopyStat(context->current_input_path, context->current_output_path);
- }
- }
-
- if (context->fin) {
- if (fclose(context->fin) != 0) {
- if (is_ok) {
- fprintf(stderr, "fclose failed [%s]: %s\n",
- PrintablePath(context->current_input_path), strerror(errno));
- }
- is_ok = BROTLI_FALSE;
- }
- }
- if (success && context->junk_source && context->current_input_path) {
- unlink(context->current_input_path);
- }
-
- context->fin = NULL;
- context->fout = NULL;
-
- return is_ok;
-}
-
-static const size_t kFileBufferSize = 1 << 16;
-
-static void InitializeBuffers(Context* context) {
- context->available_in = 0;
- context->next_in = NULL;
- context->available_out = kFileBufferSize;
- context->next_out = context->output;
-}
-
-static BROTLI_BOOL HasMoreInput(Context* context) {
- return feof(context->fin) ? BROTLI_FALSE : BROTLI_TRUE;
-}
-
-static BROTLI_BOOL ProvideInput(Context* context) {
- context->available_in =
- fread(context->input, 1, kFileBufferSize, context->fin);
- context->next_in = context->input;
- if (ferror(context->fin)) {
- fprintf(stderr, "failed to read input [%s]: %s\n",
- PrintablePath(context->current_input_path), strerror(errno));
- return BROTLI_FALSE;
- }
- return BROTLI_TRUE;
-}
-
-/* Internal: should be used only in Provide-/Flush-Output. */
-static BROTLI_BOOL WriteOutput(Context* context) {
- size_t out_size = (size_t)(context->next_out - context->output);
- if (out_size == 0) return BROTLI_TRUE;
- if (context->test_integrity) return BROTLI_TRUE;
-
- fwrite(context->output, 1, out_size, context->fout);
- if (ferror(context->fout)) {
- fprintf(stderr, "failed to write output [%s]: %s\n",
- PrintablePath(context->current_output_path), strerror(errno));
- return BROTLI_FALSE;
- }
- return BROTLI_TRUE;
-}
-
-static BROTLI_BOOL ProvideOutput(Context* context) {
- if (!WriteOutput(context)) return BROTLI_FALSE;
- context->available_out = kFileBufferSize;
- context->next_out = context->output;
- return BROTLI_TRUE;
-}
-
-static BROTLI_BOOL FlushOutput(Context* context) {
- if (!WriteOutput(context)) return BROTLI_FALSE;
- context->available_out = 0;
- return BROTLI_TRUE;
-}
-
-static BROTLI_BOOL DecompressFile(Context* context, BrotliDecoderState* s) {
- BrotliDecoderResult result = BROTLI_DECODER_RESULT_NEEDS_MORE_INPUT;
- InitializeBuffers(context);
- for (;;) {
- if (result == BROTLI_DECODER_RESULT_NEEDS_MORE_INPUT) {
- if (!HasMoreInput(context)) {
- fprintf(stderr, "corrupt input [%s]\n",
- PrintablePath(context->current_input_path));
- return BROTLI_FALSE;
- }
- if (!ProvideInput(context)) return BROTLI_FALSE;
- } else if (result == BROTLI_DECODER_RESULT_NEEDS_MORE_OUTPUT) {
- if (!ProvideOutput(context)) return BROTLI_FALSE;
- } else if (result == BROTLI_DECODER_RESULT_SUCCESS) {
- if (!FlushOutput(context)) return BROTLI_FALSE;
- if (context->available_in != 0 || HasMoreInput(context)) {
- fprintf(stderr, "corrupt input [%s]\n",
- PrintablePath(context->current_input_path));
- return BROTLI_FALSE;
- }
- return BROTLI_TRUE;
- } else {
- fprintf(stderr, "corrupt input [%s]\n",
- PrintablePath(context->current_input_path));
- return BROTLI_FALSE;
- }
-
- result = BrotliDecoderDecompressStream(s, &context->available_in,
- &context->next_in, &context->available_out, &context->next_out, 0);
- }
-}
-
-/* Default brotli_alloc_func */
-void* BrotliAllocFunc(void* opaque, size_t size) {
- *(size_t *)opaque = *(size_t *) opaque + size;
- return malloc(size);
-}
-
-/* Default brotli_free_func */
-void BrotliFreeFunc(void* opaque, void* address) {
- free(address);
-}
-
-size_t scratch_buffer_size = 0;
-
-static BROTLI_BOOL DecompressFiles(Context* context) {
- while (NextFile(context)) {
- BROTLI_BOOL is_ok = BROTLI_TRUE;
- BrotliDecoderState* s = BrotliDecoderCreateInstance(BrotliAllocFunc, BrotliFreeFunc, &scratch_buffer_size);
- if (!s) {
- fprintf(stderr, "out of memory\n");
- return BROTLI_FALSE;
- }
- /* This allows decoding "large-window" streams. Though it creates
- fragmentation (new builds decode streams that old builds don't),
- it is better from used experience perspective. */
- BrotliDecoderSetParameter(s, BROTLI_DECODER_PARAM_LARGE_WINDOW, 1u);
- is_ok = OpenFiles(context);
- if (is_ok && !context->current_input_path &&
- !context->force_overwrite && isatty(STDIN_FILENO)) {
- fprintf(stderr, "Use -h help. Use -f to force input from a terminal.\n");
- is_ok = BROTLI_FALSE;
- }
- if (is_ok) is_ok = DecompressFile(context, s);
- BrotliDecoderDestroyInstance(s);
- if (!CloseFiles(context, is_ok)) is_ok = BROTLI_FALSE;
- if (!is_ok) return BROTLI_FALSE;
- }
- return BROTLI_TRUE;
-}
-
-static BROTLI_BOOL CompressFile(Context* context, BrotliEncoderState* s) {
- BROTLI_BOOL is_eof = BROTLI_FALSE;
- InitializeBuffers(context);
- for (;;) {
- if (context->available_in == 0 && !is_eof) {
- if (!ProvideInput(context)) return BROTLI_FALSE;
- is_eof = !HasMoreInput(context);
- }
-
- if (!BrotliEncoderCompressStream(s,
- is_eof ? BROTLI_OPERATION_FINISH : BROTLI_OPERATION_PROCESS,
- &context->available_in, &context->next_in,
- &context->available_out, &context->next_out, NULL)) {
- /* Should detect OOM? */
- fprintf(stderr, "failed to compress data [%s]\n",
- PrintablePath(context->current_input_path));
- return BROTLI_FALSE;
- }
-
- if (context->available_out == 0) {
- if (!ProvideOutput(context)) return BROTLI_FALSE;
- }
-
- if (BrotliEncoderIsFinished(s)) {
- return FlushOutput(context);
- }
- }
-}
-
-static BROTLI_BOOL CompressFiles(Context* context) {
- while (NextFile(context)) {
- BROTLI_BOOL is_ok = BROTLI_TRUE;
- BrotliEncoderState* s = BrotliEncoderCreateInstance(NULL, NULL, NULL);
- if (!s) {
- fprintf(stderr, "out of memory\n");
- return BROTLI_FALSE;
- }
- BrotliEncoderSetParameter(s,
- BROTLI_PARAM_QUALITY, (uint32_t)context->quality);
- if (context->lgwin > 0) {
- /* Specified by user. */
- /* Do not enable "large-window" extension, if not required. */
- if (context->lgwin > BROTLI_MAX_WINDOW_BITS) {
- BrotliEncoderSetParameter(s, BROTLI_PARAM_LARGE_WINDOW, 1u);
- }
- BrotliEncoderSetParameter(s,
- BROTLI_PARAM_LGWIN, (uint32_t)context->lgwin);
- } else {
- /* 0, or not specified by user; could be chosen by compressor. */
- uint32_t lgwin = DEFAULT_LGWIN;
- /* Use file size to limit lgwin. */
- if (context->input_file_length >= 0) {
- int32_t size = 1 << BROTLI_MIN_WINDOW_BITS;
- lgwin = BROTLI_MIN_WINDOW_BITS;
- while (size < context->input_file_length) {
- size <<= 1;
- lgwin++;
- if (lgwin == BROTLI_MAX_WINDOW_BITS) break;
- }
- }
- BrotliEncoderSetParameter(s, BROTLI_PARAM_LGWIN, lgwin);
- }
- if (context->input_file_length > 0) {
- uint32_t size_hint = context->input_file_length < (1 << 30) ?
- (uint32_t)context->input_file_length : (1u << 30);
- BrotliEncoderSetParameter(s, BROTLI_PARAM_SIZE_HINT, size_hint);
- }
- is_ok = OpenFiles(context);
- if (is_ok && !context->current_output_path &&
- !context->force_overwrite && isatty(STDOUT_FILENO)) {
- fprintf(stderr, "Use -h help. Use -f to force output to a terminal.\n");
- is_ok = BROTLI_FALSE;
- }
- if (is_ok) is_ok = CompressFile(context, s);
- BrotliEncoderDestroyInstance(s);
- if (!CloseFiles(context, is_ok)) is_ok = BROTLI_FALSE;
- if (!is_ok) return BROTLI_FALSE;
- }
- return BROTLI_TRUE;
-}
-
-int main(int argc, char** argv) {
- Command command;
- Context context;
- Context context_dec;
- BROTLI_BOOL is_ok = BROTLI_TRUE;
- int i;
-
- context.quality = 11;
- context.lgwin = -1;
- context.gmem = 1;
- context.force_overwrite = BROTLI_FALSE;
- context.junk_source = BROTLI_FALSE;
- context.copy_stat = BROTLI_TRUE;
- context.test_integrity = BROTLI_FALSE;
- context.verbose = BROTLI_FALSE;
- context.write_to_stdout = BROTLI_FALSE;
- context.decompress = BROTLI_FALSE;
- context.large_window = BROTLI_FALSE;
- context.output_path = NULL;
- context.suffix = DEFAULT_SUFFIX;
- for (i = 0; i < MAX_OPTIONS; ++i) context.not_input_indices[i] = 0;
- context.longest_path_len = 1;
- context.input_count = 0;
-
- context.argc = argc;
- context.argv = argv;
- context.modified_path = NULL;
- context.iterator = 0;
- context.ignore = 0;
- context.iterator_error = BROTLI_FALSE;
- context.buffer = NULL;
- context.current_input_path = NULL;
- context.current_output_path = NULL;
- context.fin = NULL;
- context.fout = NULL;
-
- command = ParseParams(&context);
-
- if (command == COMMAND_COMPRESS || command == COMMAND_DECOMPRESS ||
- command == COMMAND_TEST_INTEGRITY) {
- if (is_ok) {
- size_t modified_path_len =
- context.longest_path_len + strlen(context.suffix) + 1;
- context.modified_path = (char*)malloc(modified_path_len);
- context.buffer = (uint8_t*)malloc(kFileBufferSize * 2);
- if (!context.modified_path || !context.buffer) {
- fprintf(stderr, "out of memory\n");
- is_ok = BROTLI_FALSE;
- } else {
- context.input = context.buffer;
- context.output = context.buffer + kFileBufferSize;
- }
- }
- }
-
- if (!is_ok) command = COMMAND_NOOP;
-
- switch (command) {
- case COMMAND_NOOP:
- break;
-
- case COMMAND_VERSION:
- PrintVersion();
- break;
-
- case COMMAND_COMPRESS:
- memcpy (&context_dec, &context, sizeof (context));
- is_ok = CompressFiles(&context);
- if (!is_ok) {
- break;
- }
- context_dec.decompress = BROTLI_TRUE;
- context_dec.input_count = 1;
- context_dec.current_input_path = context_dec.output_path;
- context_dec.fout = tmpfile ();
- is_ok = DecompressFiles(&context_dec);
- if (!is_ok) {
- break;
- }
- //
- // fill decoder header
- //
- context_dec.fout = fopen(context_dec.output_path, "rb+"); /* open output_path file and add in head info */
- fwrite(&input_file_length, 1, sizeof(int64_t), context_dec.fout);
- scratch_buffer_size += context.gmem * GAP_MEM_BLOCK; /* there is a memory gap between IA32 and X64 environment*/
- scratch_buffer_size += kFileBufferSize * 2;
- fwrite(&scratch_buffer_size, 1, sizeof(int64_t), context_dec.fout);
- if (fclose(context_dec.fout) != 0) {
- fprintf(stderr, "failed to update ouptut file: %s\n", context_dec.output_path);
- is_ok = 0;
- }
- break;
-
- case COMMAND_DECOMPRESS:
- case COMMAND_TEST_INTEGRITY:
- is_ok = DecompressFiles(&context);
- break;
-
- case COMMAND_HELP:
- case COMMAND_INVALID:
- default:
- is_ok = (command == COMMAND_HELP);
- PrintHelp(FileName(argv[0]), is_ok);
- break;
- }
-
- if (context.iterator_error) is_ok = BROTLI_FALSE;
-
- free(context.modified_path);
- free(context.buffer);
-
- if (!is_ok) exit(1);
- return 0;
-}
diff --git a/.gitmodules b/.gitmodules
index 8032dceecacc..1714b6c0a65e 100644
--- a/.gitmodules
+++ b/.gitmodules
@@ -10,3 +10,6 @@
[submodule "MdeModulePkg/Library/BrotliCustomDecompressLib/brotli"]
path = MdeModulePkg/Library/BrotliCustomDecompressLib/brotli
url = https://github.com/google/brotli
+[submodule "BaseTools/Source/C/BrotliCompress/brotli"]
+ path = BaseTools/Source/C/BrotliCompress/brotli
+ url = https://github.com/google/brotli
diff --git a/BaseTools/Source/C/BrotliCompress/GNUmakefile b/BaseTools/Source/C/BrotliCompress/GNUmakefile
index fdf713e8b236..9544837263ca 100644
--- a/BaseTools/Source/C/BrotliCompress/GNUmakefile
+++ b/BaseTools/Source/C/BrotliCompress/GNUmakefile
@@ -1,7 +1,7 @@
## @file
# GNU/Linux makefile for 'Brotli' module build.
#
-# Copyright (c) 2017 - 2018, Intel Corporation. All rights reserved.<BR>
+# Copyright (c) 2017 - 2020, Intel Corporation. All rights reserved.<BR>
# SPDX-License-Identifier: BSD-2-Clause-Patent
#
MAKEROOT ?= ..
@@ -9,33 +9,33 @@ MAKEROOT ?= ..
APPNAME = Brotli
OBJECTS = \
- tools/brotli.o \
- common/dictionary.o \
- common/transform.o \
- dec/bit_reader.o \
- dec/decode.o \
- dec/huffman.o \
- dec/state.o \
- enc/backward_references.o \
- enc/backward_references_hq.o \
- enc/bit_cost.o \
- enc/block_splitter.o \
- enc/brotli_bit_stream.o \
- enc/cluster.o \
- enc/compress_fragment.o \
- enc/compress_fragment_two_pass.o \
- enc/dictionary_hash.o \
- enc/encode.o \
- enc/encoder_dict.o \
- enc/entropy_encode.o \
- enc/histogram.o \
- enc/literal_cost.o \
- enc/memory.o \
- enc/metablock.o \
- enc/static_dict.o \
- enc/utf8_util.o
+ brotli/c/tools/brotli.o \
+ brotli/c/common/dictionary.o \
+ brotli/c/common/transform.o \
+ brotli/c/dec/bit_reader.o \
+ brotli/c/dec/decode.o \
+ brotli/c/dec/huffman.o \
+ brotli/c/dec/state.o \
+ brotli/c/enc/backward_references.o \
+ brotli/c/enc/backward_references_hq.o \
+ brotli/c/enc/bit_cost.o \
+ brotli/c/enc/block_splitter.o \
+ brotli/c/enc/brotli_bit_stream.o \
+ brotli/c/enc/cluster.o \
+ brotli/c/enc/compress_fragment.o \
+ brotli/c/enc/compress_fragment_two_pass.o \
+ brotli/c/enc/dictionary_hash.o \
+ brotli/c/enc/encode.o \
+ brotli/c/enc/encoder_dict.o \
+ brotli/c/enc/entropy_encode.o \
+ brotli/c/enc/histogram.o \
+ brotli/c/enc/literal_cost.o \
+ brotli/c/enc/memory.o \
+ brotli/c/enc/metablock.o \
+ brotli/c/enc/static_dict.o \
+ brotli/c/enc/utf8_util.o
include $(MAKEROOT)/Makefiles/app.makefile
-TOOL_INCLUDE = -I ./include
+TOOL_INCLUDE = -I ./brotli/c/include
LIBS += -lm
diff --git a/BaseTools/Source/C/BrotliCompress/LICENSE b/BaseTools/Source/C/BrotliCompress/LICENSE
deleted file mode 100644
index 49550fc2d06e..000000000000
--- a/BaseTools/Source/C/BrotliCompress/LICENSE
+++ /dev/null
@@ -1,19 +0,0 @@
-Copyright (c) 2009, 2010, 2013-2016 by the Brotli Authors.
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-THE SOFTWARE.
diff --git a/BaseTools/Source/C/BrotliCompress/Makefile b/BaseTools/Source/C/BrotliCompress/Makefile
index 4c03b0e6df17..b805ff1e5870 100644
--- a/BaseTools/Source/C/BrotliCompress/Makefile
+++ b/BaseTools/Source/C/BrotliCompress/Makefile
@@ -1,46 +1,46 @@
## @file
# Windows makefile for 'Brotli' module build.
#
-# Copyright (c) 2017 - 2018, Intel Corporation. All rights reserved.<BR>
+# Copyright (c) 2017 - 2020, Intel Corporation. All rights reserved.<BR>
# SPDX-License-Identifier: BSD-2-Clause-Patent
#
!INCLUDE ..\Makefiles\ms.common
-INC = -I .\include $(INC)
+INC = -I .\brotli\c\include $(INC)
CFLAGS = $(CFLAGS) /W2
APPNAME = Brotli
#LIBS = $(LIB_PATH)\Common.lib
-COMMON_OBJ = common\dictionary.obj common\transform.obj
+COMMON_OBJ = brotli\c\common\dictionary.obj brotli\c\common\transform.obj
DEC_OBJ = \
- dec\bit_reader.obj \
- dec\decode.obj \
- dec\huffman.obj \
- dec\state.obj
+ brotli\c\dec\bit_reader.obj \
+ brotli\c\dec\decode.obj \
+ brotli\c\dec\huffman.obj \
+ brotli\c\dec\state.obj
ENC_OBJ = \
- enc\backward_references.obj \
- enc\backward_references_hq.obj \
- enc\bit_cost.obj \
- enc\block_splitter.obj \
- enc\brotli_bit_stream.obj \
- enc\cluster.obj \
- enc\compress_fragment.obj \
- enc\compress_fragment_two_pass.obj \
- enc\dictionary_hash.obj \
- enc\encode.obj \
- enc\encoder_dict.obj \
- enc\entropy_encode.obj \
- enc\histogram.obj \
- enc\literal_cost.obj \
- enc\memory.obj \
- enc\metablock.obj \
- enc\static_dict.obj \
- enc\utf8_util.obj
+ brotli\c\enc\backward_references.obj \
+ brotli\c\enc\backward_references_hq.obj \
+ brotli\c\enc\bit_cost.obj \
+ brotli\c\enc\block_splitter.obj \
+ brotli\c\enc\brotli_bit_stream.obj \
+ brotli\c\enc\cluster.obj \
+ brotli\c\enc\compress_fragment.obj \
+ brotli\c\enc\compress_fragment_two_pass.obj \
+ brotli\c\enc\dictionary_hash.obj \
+ brotli\c\enc\encode.obj \
+ brotli\c\enc\encoder_dict.obj \
+ brotli\c\enc\entropy_encode.obj \
+ brotli\c\enc\histogram.obj \
+ brotli\c\enc\literal_cost.obj \
+ brotli\c\enc\memory.obj \
+ brotli\c\enc\metablock.obj \
+ brotli\c\enc\static_dict.obj \
+ brotli\c\enc\utf8_util.obj
OBJECTS = \
- tools\brotli.obj \
+ brotli\c\tools\brotli.obj \
$(COMMON_OBJ) \
$(DEC_OBJ) \
$(ENC_OBJ)
diff --git a/BaseTools/Source/C/BrotliCompress/README.md b/BaseTools/Source/C/BrotliCompress/README.md
deleted file mode 100644
index 01848adc170a..000000000000
--- a/BaseTools/Source/C/BrotliCompress/README.md
+++ /dev/null
@@ -1,26 +0,0 @@
-### Introduction
-
-Brotli is a generic-purpose lossless compression algorithm that compresses data
-using a combination of a modern variant of the LZ77 algorithm, Huffman coding
-and 2nd order context modeling, with a compression ratio comparable to the best
-currently available general-purpose compression methods. It is similar in speed
-with deflate but offers more dense compression.
-
-The specification of the Brotli Compressed Data Format is defined in [RFC 7932](https://www.ietf.org/rfc/rfc7932.txt).
-
-Brotli is open-sourced under the MIT License, see the LICENSE file.
-
-Brotli mailing list:
-https://groups.google.com/forum/#!forum/brotli
-
-[![Build Status](https://travis-ci.org/google/brotli.svg?branch=master)](https://travis-ci.org/google/brotli)
-
-### Benchmarks
-* [Squash Compression Benchmark](https://quixdb.github.io/squash-benchmark/) / [Unstable Squash Compression Benchmark](https://quixdb.github.io/squash-benchmark/unstable/)
-* [Large Text Compression Benchmark](http://mattmahoney.net/dc/text.html)
-* [Lzturbo Benchmark](https://sites.google.com/site/powturbo/home/benchmark)
-
-### Related projects
-Independent [decoder](https://github.com/madler/brotli) implementation by Mark Adler, based entirely on format specification.
-
-JavaScript port of brotli [decoder](https://github.com/devongovett/brotli.js). Could be used directly via `npm install brotli`
diff --git a/BaseTools/Source/C/BrotliCompress/ReadMe.txt b/BaseTools/Source/C/BrotliCompress/ReadMe.txt
deleted file mode 100644
index 399ec38d4081..000000000000
--- a/BaseTools/Source/C/BrotliCompress/ReadMe.txt
+++ /dev/null
@@ -1,2 +0,0 @@
-It is based on the Brotli v1.0.6.
-Brotli was released on the website https://github.com/google/brotli.
diff --git a/BaseTools/Source/C/BrotliCompress/brotli b/BaseTools/Source/C/BrotliCompress/brotli
new file mode 160000
index 000000000000..666c3280cc11
--- /dev/null
+++ b/BaseTools/Source/C/BrotliCompress/brotli
@@ -0,0 +1 @@
+Subproject commit 666c3280cc11dc433c303d79a83d4ffbdd12cc8d
diff --git a/BaseTools/Source/C/BrotliCompress/common/constants.h b/BaseTools/Source/C/BrotliCompress/common/constants.h
deleted file mode 100644
index 1a29f035e899..000000000000
--- a/BaseTools/Source/C/BrotliCompress/common/constants.h
+++ /dev/null
@@ -1,64 +0,0 @@
-/* Copyright 2016 Google Inc. All Rights Reserved.
-
- Distributed under MIT license.
- See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
-*/
-
-#ifndef BROTLI_COMMON_CONSTANTS_H_
-#define BROTLI_COMMON_CONSTANTS_H_
-
-/* Specification: 7.3. Encoding of the context map */
-#define BROTLI_CONTEXT_MAP_MAX_RLE 16
-
-/* Specification: 2. Compressed representation overview */
-#define BROTLI_MAX_NUMBER_OF_BLOCK_TYPES 256
-
-/* Specification: 3.3. Alphabet sizes: insert-and-copy length */
-#define BROTLI_NUM_LITERAL_SYMBOLS 256
-#define BROTLI_NUM_COMMAND_SYMBOLS 704
-#define BROTLI_NUM_BLOCK_LEN_SYMBOLS 26
-#define BROTLI_MAX_CONTEXT_MAP_SYMBOLS (BROTLI_MAX_NUMBER_OF_BLOCK_TYPES + \
- BROTLI_CONTEXT_MAP_MAX_RLE)
-#define BROTLI_MAX_BLOCK_TYPE_SYMBOLS (BROTLI_MAX_NUMBER_OF_BLOCK_TYPES + 2)
-
-/* Specification: 3.5. Complex prefix codes */
-#define BROTLI_REPEAT_PREVIOUS_CODE_LENGTH 16
-#define BROTLI_REPEAT_ZERO_CODE_LENGTH 17
-#define BROTLI_CODE_LENGTH_CODES (BROTLI_REPEAT_ZERO_CODE_LENGTH + 1)
-/* "code length of 8 is repeated" */
-#define BROTLI_INITIAL_REPEATED_CODE_LENGTH 8
-
-/* "Large Window Brotli" */
-#define BROTLI_LARGE_MAX_DISTANCE_BITS 62U
-#define BROTLI_LARGE_MIN_WBITS 10
-#define BROTLI_LARGE_MAX_WBITS 30
-
-/* Specification: 4. Encoding of distances */
-#define BROTLI_NUM_DISTANCE_SHORT_CODES 16
-#define BROTLI_MAX_NPOSTFIX 3
-#define BROTLI_MAX_NDIRECT 120
-#define BROTLI_MAX_DISTANCE_BITS 24U
-#define BROTLI_DISTANCE_ALPHABET_SIZE(NPOSTFIX, NDIRECT, MAXNBITS) ( \
- BROTLI_NUM_DISTANCE_SHORT_CODES + (NDIRECT) + \
- ((MAXNBITS) << ((NPOSTFIX) + 1)))
-/* BROTLI_NUM_DISTANCE_SYMBOLS == 1128 */
-#define BROTLI_NUM_DISTANCE_SYMBOLS \
- BROTLI_DISTANCE_ALPHABET_SIZE( \
- BROTLI_MAX_NDIRECT, BROTLI_MAX_NPOSTFIX, BROTLI_LARGE_MAX_DISTANCE_BITS)
-#define BROTLI_MAX_DISTANCE 0x3FFFFFC
-#define BROTLI_MAX_ALLOWED_DISTANCE 0x7FFFFFFC
-
-/* 7.1. Context modes and context ID lookup for literals */
-/* "context IDs for literals are in the range of 0..63" */
-#define BROTLI_LITERAL_CONTEXT_BITS 6
-
-/* 7.2. Context ID for distances */
-#define BROTLI_DISTANCE_CONTEXT_BITS 2
-
-/* 9.1. Format of the Stream Header */
-/* Number of slack bytes for window size. Don't confuse
- with BROTLI_NUM_DISTANCE_SHORT_CODES. */
-#define BROTLI_WINDOW_GAP 16
-#define BROTLI_MAX_BACKWARD_LIMIT(W) (((size_t)1 << (W)) - BROTLI_WINDOW_GAP)
-
-#endif /* BROTLI_COMMON_CONSTANTS_H_ */
diff --git a/BaseTools/Source/C/BrotliCompress/common/context.h b/BaseTools/Source/C/BrotliCompress/common/context.h
deleted file mode 100644
index 7ffc640eafa4..000000000000
--- a/BaseTools/Source/C/BrotliCompress/common/context.h
+++ /dev/null
@@ -1,261 +0,0 @@
-/* Copyright 2013 Google Inc. All Rights Reserved.
-
- Distributed under MIT license.
- See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
-*/
-
-/* Lookup table to map the previous two bytes to a context id.
-
- There are four different context modeling modes defined here:
- CONTEXT_LSB6: context id is the least significant 6 bits of the last byte,
- CONTEXT_MSB6: context id is the most significant 6 bits of the last byte,
- CONTEXT_UTF8: second-order context model tuned for UTF8-encoded text,
- CONTEXT_SIGNED: second-order context model tuned for signed integers.
-
- If |p1| and |p2| are the previous two bytes, and |mode| is current context
- mode, we calculate the context as:
-
- context = ContextLut(mode)[p1] | ContextLut(mode)[p2 + 256].
-
- For CONTEXT_UTF8 mode, if the previous two bytes are ASCII characters
- (i.e. < 128), this will be equivalent to
-
- context = 4 * context1(p1) + context2(p2),
-
- where context1 is based on the previous byte in the following way:
-
- 0 : non-ASCII control
- 1 : \t, \n, \r
- 2 : space
- 3 : other punctuation
- 4 : " '
- 5 : %
- 6 : ( < [ {
- 7 : ) > ] }
- 8 : , ; :
- 9 : .
- 10 : =
- 11 : number
- 12 : upper-case vowel
- 13 : upper-case consonant
- 14 : lower-case vowel
- 15 : lower-case consonant
-
- and context2 is based on the second last byte:
-
- 0 : control, space
- 1 : punctuation
- 2 : upper-case letter, number
- 3 : lower-case letter
-
- If the last byte is ASCII, and the second last byte is not (in a valid UTF8
- stream it will be a continuation byte, value between 128 and 191), the
- context is the same as if the second last byte was an ASCII control or space.
-
- If the last byte is a UTF8 lead byte (value >= 192), then the next byte will
- be a continuation byte and the context id is 2 or 3 depending on the LSB of
- the last byte and to a lesser extent on the second last byte if it is ASCII.
-
- If the last byte is a UTF8 continuation byte, the second last byte can be:
- - continuation byte: the next byte is probably ASCII or lead byte (assuming
- 4-byte UTF8 characters are rare) and the context id is 0 or 1.
- - lead byte (192 - 207): next byte is ASCII or lead byte, context is 0 or 1
- - lead byte (208 - 255): next byte is continuation byte, context is 2 or 3
-
- The possible value combinations of the previous two bytes, the range of
- context ids and the type of the next byte is summarized in the table below:
-
- |--------\-----------------------------------------------------------------|
- | \ Last byte |
- | Second \---------------------------------------------------------------|
- | last byte \ ASCII | cont. byte | lead byte |
- | \ (0-127) | (128-191) | (192-) |
- |=============|===================|=====================|==================|
- | ASCII | next: ASCII/lead | not valid | next: cont. |
- | (0-127) | context: 4 - 63 | | context: 2 - 3 |
- |-------------|-------------------|---------------------|------------------|
- | cont. byte | next: ASCII/lead | next: ASCII/lead | next: cont. |
- | (128-191) | context: 4 - 63 | context: 0 - 1 | context: 2 - 3 |
- |-------------|-------------------|---------------------|------------------|
- | lead byte | not valid | next: ASCII/lead | not valid |
- | (192-207) | | context: 0 - 1 | |
- |-------------|-------------------|---------------------|------------------|
- | lead byte | not valid | next: cont. | not valid |
- | (208-) | | context: 2 - 3 | |
- |-------------|-------------------|---------------------|------------------|
-*/
-
-#ifndef BROTLI_COMMON_CONTEXT_H_
-#define BROTLI_COMMON_CONTEXT_H_
-
-#include <brotli/types.h>
-
-typedef enum ContextType {
- CONTEXT_LSB6 = 0,
- CONTEXT_MSB6 = 1,
- CONTEXT_UTF8 = 2,
- CONTEXT_SIGNED = 3
-} ContextType;
-
-/* Common context lookup table for all context modes. */
-static const uint8_t kContextLookup[2048] = {
- /* CONTEXT_LSB6, last byte. */
- 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
- 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,
- 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,
- 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63,
- 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
- 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,
- 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,
- 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63,
- 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
- 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,
- 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,
- 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63,
- 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
- 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,
- 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,
- 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63,
-
- /* CONTEXT_LSB6, second last byte, */
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* CONTEXT_MSB6, last byte. */
- 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3,
- 4, 4, 4, 4, 5, 5, 5, 5, 6, 6, 6, 6, 7, 7, 7, 7,
- 8, 8, 8, 8, 9, 9, 9, 9, 10, 10, 10, 10, 11, 11, 11, 11,
- 12, 12, 12, 12, 13, 13, 13, 13, 14, 14, 14, 14, 15, 15, 15, 15,
- 16, 16, 16, 16, 17, 17, 17, 17, 18, 18, 18, 18, 19, 19, 19, 19,
- 20, 20, 20, 20, 21, 21, 21, 21, 22, 22, 22, 22, 23, 23, 23, 23,
- 24, 24, 24, 24, 25, 25, 25, 25, 26, 26, 26, 26, 27, 27, 27, 27,
- 28, 28, 28, 28, 29, 29, 29, 29, 30, 30, 30, 30, 31, 31, 31, 31,
- 32, 32, 32, 32, 33, 33, 33, 33, 34, 34, 34, 34, 35, 35, 35, 35,
- 36, 36, 36, 36, 37, 37, 37, 37, 38, 38, 38, 38, 39, 39, 39, 39,
- 40, 40, 40, 40, 41, 41, 41, 41, 42, 42, 42, 42, 43, 43, 43, 43,
- 44, 44, 44, 44, 45, 45, 45, 45, 46, 46, 46, 46, 47, 47, 47, 47,
- 48, 48, 48, 48, 49, 49, 49, 49, 50, 50, 50, 50, 51, 51, 51, 51,
- 52, 52, 52, 52, 53, 53, 53, 53, 54, 54, 54, 54, 55, 55, 55, 55,
- 56, 56, 56, 56, 57, 57, 57, 57, 58, 58, 58, 58, 59, 59, 59, 59,
- 60, 60, 60, 60, 61, 61, 61, 61, 62, 62, 62, 62, 63, 63, 63, 63,
-
- /* CONTEXT_MSB6, second last byte, */
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* CONTEXT_UTF8, last byte. */
- /* ASCII range. */
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 0, 0, 4, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 8, 12, 16, 12, 12, 20, 12, 16, 24, 28, 12, 12, 32, 12, 36, 12,
- 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 32, 32, 24, 40, 28, 12,
- 12, 48, 52, 52, 52, 48, 52, 52, 52, 48, 52, 52, 52, 52, 52, 48,
- 52, 52, 52, 52, 52, 48, 52, 52, 52, 52, 52, 24, 12, 28, 12, 12,
- 12, 56, 60, 60, 60, 56, 60, 60, 60, 56, 60, 60, 60, 60, 60, 56,
- 60, 60, 60, 60, 60, 56, 60, 60, 60, 60, 60, 24, 12, 28, 12, 0,
- /* UTF8 continuation byte range. */
- 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1,
- 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1,
- 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1,
- 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1,
- /* UTF8 lead byte range. */
- 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3,
- 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3,
- 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3,
- 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3,
-
- /* CONTEXT_UTF8 second last byte. */
- /* ASCII range. */
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1,
- 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1,
- 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
- 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 1, 1, 1, 0,
- /* UTF8 continuation byte range. */
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- /* UTF8 lead byte range. */
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
-
- /* CONTEXT_SIGNED, last byte, same as the above values shifted by 3 bits. */
- 0, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
- 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
- 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
- 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
- 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
- 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
- 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
- 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
- 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
- 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
- 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
- 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
- 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40,
- 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40,
- 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40,
- 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 56,
-
- /* CONTEXT_SIGNED, second last byte. */
- 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
- 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
- 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
- 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
- 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
- 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
- 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 7,
-};
-
-typedef const uint8_t* ContextLut;
-
-/* typeof(MODE) == ContextType; returns ContextLut */
-#define BROTLI_CONTEXT_LUT(MODE) (&kContextLookup[(MODE) << 9])
-
-/* typeof(LUT) == ContextLut */
-#define BROTLI_CONTEXT(P1, P2, LUT) ((LUT)[P1] | ((LUT) + 256)[P2])
-
-#endif /* BROTLI_COMMON_CONTEXT_H_ */
diff --git a/BaseTools/Source/C/BrotliCompress/common/dictionary.h b/BaseTools/Source/C/BrotliCompress/common/dictionary.h
deleted file mode 100644
index a68a1c54493e..000000000000
--- a/BaseTools/Source/C/BrotliCompress/common/dictionary.h
+++ /dev/null
@@ -1,64 +0,0 @@
-/* Copyright 2013 Google Inc. All Rights Reserved.
-
- Distributed under MIT license.
- See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
-*/
-
-/* Collection of static dictionary words. */
-
-#ifndef BROTLI_COMMON_DICTIONARY_H_
-#define BROTLI_COMMON_DICTIONARY_H_
-
-#include <brotli/port.h>
-#include <brotli/types.h>
-
-#if defined(__cplusplus) || defined(c_plusplus)
-extern "C" {
-#endif
-
-typedef struct BrotliDictionary {
- /**
- * Number of bits to encode index of dictionary word in a bucket.
- *
- * Specification: Appendix A. Static Dictionary Data
- *
- * Words in a dictionary are bucketed by length.
- * @c 0 means that there are no words of a given length.
- * Dictionary consists of words with length of [4..24] bytes.
- * Values at [0..3] and [25..31] indices should not be addressed.
- */
- uint8_t size_bits_by_length[32];
-
- /* assert(offset[i + 1] == offset[i] + (bits[i] ? (i << bits[i]) : 0)) */
- uint32_t offsets_by_length[32];
-
- /* assert(data_size == offsets_by_length[31]) */
- size_t data_size;
-
- /* Data array is not bound, and should obey to size_bits_by_length values.
- Specified size matches default (RFC 7932) dictionary. Its size is
- defined by data_size */
- const uint8_t* data;
-} BrotliDictionary;
-
-BROTLI_COMMON_API const BrotliDictionary* BrotliGetDictionary(void);
-
-/**
- * Sets dictionary data.
- *
- * When dictionary data is already set / present, this method is no-op.
- *
- * Dictionary data MUST be provided before BrotliGetDictionary is invoked.
- * This method is used ONLY in multi-client environment (e.g. C + Java),
- * to reduce storage by sharing single dictionary between implementations.
- */
-BROTLI_COMMON_API void BrotliSetDictionaryData(const uint8_t* data);
-
-#define BROTLI_MIN_DICTIONARY_WORD_LENGTH 4
-#define BROTLI_MAX_DICTIONARY_WORD_LENGTH 24
-
-#if defined(__cplusplus) || defined(c_plusplus)
-} /* extern "C" */
-#endif
-
-#endif /* BROTLI_COMMON_DICTIONARY_H_ */
diff --git a/BaseTools/Source/C/BrotliCompress/common/platform.h b/BaseTools/Source/C/BrotliCompress/common/platform.h
deleted file mode 100644
index b83ed6ca258a..000000000000
--- a/BaseTools/Source/C/BrotliCompress/common/platform.h
+++ /dev/null
@@ -1,558 +0,0 @@
-/* Copyright 2016 Google Inc. All Rights Reserved.
-
- Distributed under MIT license.
- See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
-*/
-
-/* Macros for compiler / platform specific features and build options.
-
- Build options are:
- * BROTLI_BUILD_32_BIT disables 64-bit optimizations
- * BROTLI_BUILD_64_BIT forces to use 64-bit optimizations
- * BROTLI_BUILD_BIG_ENDIAN forces to use big-endian optimizations
- * BROTLI_BUILD_ENDIAN_NEUTRAL disables endian-aware optimizations
- * BROTLI_BUILD_LITTLE_ENDIAN forces to use little-endian optimizations
- * BROTLI_BUILD_PORTABLE disables dangerous optimizations, like unaligned
- read and overlapping memcpy; this reduces decompression speed by 5%
- * BROTLI_BUILD_NO_RBIT disables "rbit" optimization for ARM CPUs
- * BROTLI_DEBUG dumps file name and line number when decoder detects stream
- or memory error
- * BROTLI_ENABLE_LOG enables asserts and dumps various state information
-*/
-
-#ifndef BROTLI_COMMON_PLATFORM_H_
-#define BROTLI_COMMON_PLATFORM_H_
-
-#include <string.h> /* memcpy */
-#include <stdlib.h> /* malloc, free */
-
-#include <brotli/port.h>
-#include <brotli/types.h>
-
-#if defined(OS_LINUX) || defined(OS_CYGWIN)
-#include <endian.h>
-#elif defined(OS_FREEBSD)
-#include <machine/endian.h>
-#elif defined(OS_MACOSX)
-#include <machine/endian.h>
-/* Let's try and follow the Linux convention */
-#define BROTLI_X_BYTE_ORDER BYTE_ORDER
-#define BROTLI_X_LITTLE_ENDIAN LITTLE_ENDIAN
-#define BROTLI_X_BIG_ENDIAN BIG_ENDIAN
-#endif
-
-#if defined(BROTLI_ENABLE_LOG) || defined(BROTLI_DEBUG)
-#include <assert.h>
-#include <stdio.h>
-#endif
-
-/* The following macros were borrowed from https://github.com/nemequ/hedley
- * with permission of original author - Evan Nemerson <evan@nemerson.com> */
-
-/* >>> >>> >>> hedley macros */
-
-/* Define "BROTLI_PREDICT_TRUE" and "BROTLI_PREDICT_FALSE" macros for capable
- compilers.
-
-To apply compiler hint, enclose the branching condition into macros, like this:
-
- if (BROTLI_PREDICT_TRUE(zero == 0)) {
- // main execution path
- } else {
- // compiler should place this code outside of main execution path
- }
-
-OR:
-
- if (BROTLI_PREDICT_FALSE(something_rare_or_unexpected_happens)) {
- // compiler should place this code outside of main execution path
- }
-
-*/
-#if BROTLI_GNUC_HAS_BUILTIN(__builtin_expect, 3, 0, 0) || \
- BROTLI_INTEL_VERSION_CHECK(16, 0, 0) || \
- BROTLI_SUNPRO_VERSION_CHECK(5, 12, 0) || \
- BROTLI_ARM_VERSION_CHECK(4, 1, 0) || \
- BROTLI_IBM_VERSION_CHECK(10, 1, 0) || \
- BROTLI_TI_VERSION_CHECK(7, 3, 0) || \
- BROTLI_TINYC_VERSION_CHECK(0, 9, 27)
-#define BROTLI_PREDICT_TRUE(x) (__builtin_expect(!!(x), 1))
-#define BROTLI_PREDICT_FALSE(x) (__builtin_expect(x, 0))
-#else
-#define BROTLI_PREDICT_FALSE(x) (x)
-#define BROTLI_PREDICT_TRUE(x) (x)
-#endif
-
-#if defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) && \
- !defined(__cplusplus)
-#define BROTLI_RESTRICT restrict
-#elif BROTLI_GNUC_VERSION_CHECK(3, 1, 0) || \
- BROTLI_MSVC_VERSION_CHECK(14, 0, 0) || \
- BROTLI_INTEL_VERSION_CHECK(16, 0, 0) || \
- BROTLI_ARM_VERSION_CHECK(4, 1, 0) || \
- BROTLI_IBM_VERSION_CHECK(10, 1, 0) || \
- BROTLI_PGI_VERSION_CHECK(17, 10, 0) || \
- BROTLI_TI_VERSION_CHECK(8, 0, 0) || \
- BROTLI_IAR_VERSION_CHECK(8, 0, 0) || \
- (BROTLI_SUNPRO_VERSION_CHECK(5, 14, 0) && defined(__cplusplus))
-#define BROTLI_RESTRICT __restrict
-#elif BROTLI_SUNPRO_VERSION_CHECK(5, 3, 0) && !defined(__cplusplus)
-#define BROTLI_RESTRICT _Restrict
-#else
-#define BROTLI_RESTRICT
-#endif
-
-#if (defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L)) || \
- (defined(__cplusplus) && (__cplusplus >= 199711L))
-#define BROTLI_MAYBE_INLINE inline
-#elif defined(__GNUC_STDC_INLINE__) || defined(__GNUC_GNU_INLINE__) || \
- BROTLI_ARM_VERSION_CHECK(6, 2, 0)
-#define BROTLI_MAYBE_INLINE __inline__
-#elif BROTLI_MSVC_VERSION_CHECK(12, 0, 0) || \
- BROTLI_ARM_VERSION_CHECK(4, 1, 0) || BROTLI_TI_VERSION_CHECK(8, 0, 0)
-#define BROTLI_MAYBE_INLINE __inline
-#else
-#define BROTLI_MAYBE_INLINE
-#endif
-
-#if BROTLI_GNUC_HAS_ATTRIBUTE(always_inline, 4, 0, 0) || \
- BROTLI_INTEL_VERSION_CHECK(16, 0, 0) || \
- BROTLI_SUNPRO_VERSION_CHECK(5, 11, 0) || \
- BROTLI_ARM_VERSION_CHECK(4, 1, 0) || \
- BROTLI_IBM_VERSION_CHECK(10, 1, 0) || \
- BROTLI_TI_VERSION_CHECK(8, 0, 0) || \
- (BROTLI_TI_VERSION_CHECK(7, 3, 0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__))
-#define BROTLI_INLINE BROTLI_MAYBE_INLINE __attribute__((__always_inline__))
-#elif BROTLI_MSVC_VERSION_CHECK(12, 0, 0)
-#define BROTLI_INLINE BROTLI_MAYBE_INLINE __forceinline
-#elif BROTLI_TI_VERSION_CHECK(7, 0, 0) && defined(__cplusplus)
-#define BROTLI_INLINE BROTLI_MAYBE_INLINE _Pragma("FUNC_ALWAYS_INLINE;")
-#elif BROTLI_IAR_VERSION_CHECK(8, 0, 0)
-#define BROTLI_INLINE BROTLI_MAYBE_INLINE _Pragma("inline=forced")
-#else
-#define BROTLI_INLINE BROTLI_MAYBE_INLINE
-#endif
-
-#if BROTLI_GNUC_HAS_ATTRIBUTE(noinline, 4, 0, 0) || \
- BROTLI_INTEL_VERSION_CHECK(16, 0, 0) || \
- BROTLI_SUNPRO_VERSION_CHECK(5, 11, 0) || \
- BROTLI_ARM_VERSION_CHECK(4, 1, 0) || \
- BROTLI_IBM_VERSION_CHECK(10, 1, 0) || \
- BROTLI_TI_VERSION_CHECK(8, 0, 0) || \
- (BROTLI_TI_VERSION_CHECK(7, 3, 0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__))
-#define BROTLI_NOINLINE __attribute__((__noinline__))
-#elif BROTLI_MSVC_VERSION_CHECK(13, 10, 0)
-#define BROTLI_NOINLINE __declspec(noinline)
-#elif BROTLI_PGI_VERSION_CHECK(10, 2, 0)
-#define BROTLI_NOINLINE _Pragma("noinline")
-#elif BROTLI_TI_VERSION_CHECK(6, 0, 0) && defined(__cplusplus)
-#define BROTLI_NOINLINE _Pragma("FUNC_CANNOT_INLINE;")
-#elif BROTLI_IAR_VERSION_CHECK(8, 0, 0)
-#define BROTLI_NOINLINE _Pragma("inline=never")
-#else
-#define BROTLI_NOINLINE
-#endif
-
-/* BROTLI_INTERNAL could be defined to override visibility, e.g. for tests. */
-#if !defined(BROTLI_INTERNAL)
-#if defined(_WIN32) || defined(__CYGWIN__)
-#define BROTLI_INTERNAL
-#elif BROTLI_GNUC_VERSION_CHECK(3, 3, 0) || \
- BROTLI_TI_VERSION_CHECK(8, 0, 0) || \
- BROTLI_INTEL_VERSION_CHECK(16, 0, 0) || \
- BROTLI_ARM_VERSION_CHECK(4, 1, 0) || \
- BROTLI_IBM_VERSION_CHECK(13, 1, 0) || \
- BROTLI_SUNPRO_VERSION_CHECK(5, 11, 0) || \
- (BROTLI_TI_VERSION_CHECK(7, 3, 0) && \
- defined(__TI_GNU_ATTRIBUTE_SUPPORT__) && defined(__TI_EABI__))
-#define BROTLI_INTERNAL __attribute__ ((visibility ("hidden")))
-#else
-#define BROTLI_INTERNAL
-#endif
-#endif
-
-/* <<< <<< <<< end of hedley macros. */
-
-#if BROTLI_GNUC_HAS_ATTRIBUTE(unused, 2, 7, 0) || \
- BROTLI_INTEL_VERSION_CHECK(16, 0, 0)
-#define BROTLI_UNUSED_FUNCTION static BROTLI_INLINE __attribute__ ((unused))
-#else
-#define BROTLI_UNUSED_FUNCTION static BROTLI_INLINE
-#endif
-
-#if (defined(__ARM_ARCH) && (__ARM_ARCH == 7)) || \
- (defined(M_ARM) && (M_ARM == 7))
-#define BROTLI_TARGET_ARMV7
-#endif /* ARMv7 */
-
-#if (defined(__ARM_ARCH) && (__ARM_ARCH == 8)) || \
- defined(__aarch64__) || defined(__ARM64_ARCH_8__)
-#define BROTLI_TARGET_ARMV8_ANY
-
-#if defined(__ARM_32BIT_STATE)
-#define BROTLI_TARGET_ARMV8_32
-#elif defined(__ARM_64BIT_STATE)
-#define BROTLI_TARGET_ARMV8_64
-#endif
-
-#endif /* ARMv8 */
-
-#if defined(__i386) || defined(_M_IX86)
-#define BROTLI_TARGET_X86
-#endif
-
-#if defined(__x86_64__) || defined(_M_X64)
-#define BROTLI_TARGET_X64
-#endif
-
-#if defined(__PPC64__)
-#define BROTLI_TARGET_POWERPC64
-#endif
-
-#if defined(__riscv) && defined(__riscv_xlen) && __riscv_xlen == 64
-#define BROTLI_TARGET_RISCV64
-#endif
-
-#if defined(BROTLI_BUILD_64_BIT)
-#define BROTLI_64_BITS 1
-#elif defined(BROTLI_BUILD_32_BIT)
-#define BROTLI_64_BITS 0
-#elif defined(BROTLI_TARGET_X64) || defined(BROTLI_TARGET_ARMV8_64) || \
- defined(BROTLI_TARGET_POWERPC64) || defined(BROTLI_TARGET_RISCV64)
-#define BROTLI_64_BITS 1
-#else
-#define BROTLI_64_BITS 0
-#endif
-
-#if (BROTLI_64_BITS)
-#define brotli_reg_t uint64_t
-#else
-#define brotli_reg_t uint32_t
-#endif
-
-#if defined(BROTLI_BUILD_BIG_ENDIAN)
-#define BROTLI_BIG_ENDIAN 1
-#elif defined(BROTLI_BUILD_LITTLE_ENDIAN)
-#define BROTLI_LITTLE_ENDIAN 1
-#elif defined(BROTLI_BUILD_ENDIAN_NEUTRAL)
-/* Just break elif chain. */
-#elif defined(__BYTE_ORDER__) && (__BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__)
-#define BROTLI_LITTLE_ENDIAN 1
-#elif defined(_WIN32) || defined(BROTLI_TARGET_X64)
-/* Win32 & x64 can currently always be assumed to be little endian */
-#define BROTLI_LITTLE_ENDIAN 1
-#elif defined(__BYTE_ORDER__) && (__BYTE_ORDER__ == __ORDER_BIG_ENDIAN__)
-#define BROTLI_BIG_ENDIAN 1
-#elif defined(BROTLI_X_BYTE_ORDER)
-#if BROTLI_X_BYTE_ORDER == BROTLI_X_LITTLE_ENDIAN
-#define BROTLI_LITTLE_ENDIAN 1
-#elif BROTLI_X_BYTE_ORDER == BROTLI_X_BIG_ENDIAN
-#define BROTLI_BIG_ENDIAN 1
-#endif
-#endif /* BROTLI_X_BYTE_ORDER */
-
-#if !defined(BROTLI_LITTLE_ENDIAN)
-#define BROTLI_LITTLE_ENDIAN 0
-#endif
-
-#if !defined(BROTLI_BIG_ENDIAN)
-#define BROTLI_BIG_ENDIAN 0
-#endif
-
-#if defined(BROTLI_X_BYTE_ORDER)
-#undef BROTLI_X_BYTE_ORDER
-#undef BROTLI_X_LITTLE_ENDIAN
-#undef BROTLI_X_BIG_ENDIAN
-#endif
-
-#if defined(BROTLI_BUILD_PORTABLE)
-#define BROTLI_ALIGNED_READ (!!1)
-#elif defined(BROTLI_TARGET_X86) || defined(BROTLI_TARGET_X64) || \
- defined(BROTLI_TARGET_ARMV7) || defined(BROTLI_TARGET_ARMV8_ANY) || \
- defined(BROTLI_TARGET_RISCV64)
-/* Allow unaligned read only for white-listed CPUs. */
-#define BROTLI_ALIGNED_READ (!!0)
-#else
-#define BROTLI_ALIGNED_READ (!!1)
-#endif
-
-#if BROTLI_ALIGNED_READ
-/* Portable unaligned memory access: read / write values via memcpy. */
-static BROTLI_INLINE uint16_t BrotliUnalignedRead16(const void* p) {
- uint16_t t;
- memcpy(&t, p, sizeof t);
- return t;
-}
-static BROTLI_INLINE uint32_t BrotliUnalignedRead32(const void* p) {
- uint32_t t;
- memcpy(&t, p, sizeof t);
- return t;
-}
-static BROTLI_INLINE uint64_t BrotliUnalignedRead64(const void* p) {
- uint64_t t;
- memcpy(&t, p, sizeof t);
- return t;
-}
-static BROTLI_INLINE void BrotliUnalignedWrite64(void* p, uint64_t v) {
- memcpy(p, &v, sizeof v);
-}
-#else /* BROTLI_ALIGNED_READ */
-/* Unaligned memory access is allowed: just cast pointer to requested type. */
-#if defined(ADDRESS_SANITIZER) || defined(THREAD_SANITIZER) || \
- defined(MEMORY_SANITIZER)
-/* Consider we have an unaligned load/store of 4 bytes from address 0x...05.
- AddressSanitizer will treat it as a 3-byte access to the range 05:07 and
- will miss a bug if 08 is the first unaddressable byte.
- ThreadSanitizer will also treat this as a 3-byte access to 05:07 and will
- miss a race between this access and some other accesses to 08.
- MemorySanitizer will correctly propagate the shadow on unaligned stores
- and correctly report bugs on unaligned loads, but it may not properly
- update and report the origin of the uninitialized memory.
- For all three tools, replacing an unaligned access with a tool-specific
- callback solves the problem. */
-#if defined(__cplusplus)
-extern "C" {
-#endif /* __cplusplus */
- uint16_t __sanitizer_unaligned_load16(const void* p);
- uint32_t __sanitizer_unaligned_load32(const void* p);
- uint64_t __sanitizer_unaligned_load64(const void* p);
- void __sanitizer_unaligned_store64(void* p, uint64_t v);
-#if defined(__cplusplus)
-} /* extern "C" */
-#endif /* __cplusplus */
-#define BrotliUnalignedRead16 __sanitizer_unaligned_load16
-#define BrotliUnalignedRead32 __sanitizer_unaligned_load32
-#define BrotliUnalignedRead64 __sanitizer_unaligned_load64
-#define BrotliUnalignedWrite64 __sanitizer_unaligned_store64
-#else
-static BROTLI_INLINE uint16_t BrotliUnalignedRead16(const void* p) {
- return *(const uint16_t*)p;
-}
-static BROTLI_INLINE uint32_t BrotliUnalignedRead32(const void* p) {
- return *(const uint32_t*)p;
-}
-#if (BROTLI_64_BITS)
-static BROTLI_INLINE uint64_t BrotliUnalignedRead64(const void* p) {
- return *(const uint64_t*)p;
-}
-static BROTLI_INLINE void BrotliUnalignedWrite64(void* p, uint64_t v) {
- *(uint64_t*)p = v;
-}
-#else /* BROTLI_64_BITS */
-/* Avoid emitting LDRD / STRD, which require properly aligned address. */
-/* If __attribute__(aligned) is available, use that. Otherwise, memcpy. */
-
-#if BROTLI_GNUC_HAS_ATTRIBUTE(aligned, 2, 7, 0)
-typedef __attribute__((aligned(1))) uint64_t brotli_unaligned_uint64_t;
-
-static BROTLI_INLINE uint64_t BrotliUnalignedRead64(const void* p) {
- return (uint64_t) ((brotli_unaligned_uint64_t*) p)[0];
-}
-static BROTLI_INLINE void BrotliUnalignedWrite64(void* p, uint64_t v) {
- brotli_unaligned_uint64_t* dwords = (brotli_unaligned_uint64_t*) p;
- dwords[0] = (brotli_unaligned_uint64_t) v;
-}
-#else /* BROTLI_GNUC_HAS_ATTRIBUTE(aligned, 2, 7, 0) */
-static BROTLI_INLINE uint64_t BrotliUnalignedRead64(const void* p) {
- uint64_t v;
- memcpy(&v, p, sizeof(uint64_t));
- return v;
-}
-
-static BROTLI_INLINE void BrotliUnalignedWrite64(void* p, uint64_t v) {
- memcpy(p, &v, sizeof(uint64_t));
-}
-#endif /* BROTLI_GNUC_HAS_ATTRIBUTE(aligned, 2, 7, 0) */
-#endif /* BROTLI_64_BITS */
-#endif /* ASAN / TSAN / MSAN */
-#endif /* BROTLI_ALIGNED_READ */
-
-#if BROTLI_LITTLE_ENDIAN
-/* Straight endianness. Just read / write values. */
-#define BROTLI_UNALIGNED_LOAD16LE BrotliUnalignedRead16
-#define BROTLI_UNALIGNED_LOAD32LE BrotliUnalignedRead32
-#define BROTLI_UNALIGNED_LOAD64LE BrotliUnalignedRead64
-#define BROTLI_UNALIGNED_STORE64LE BrotliUnalignedWrite64
-#elif BROTLI_BIG_ENDIAN /* BROTLI_LITTLE_ENDIAN */
-/* Explain compiler to byte-swap values. */
-#define BROTLI_BSWAP16_(V) ((uint16_t)( \
- (((V) & 0xFFU) << 8) | \
- (((V) >> 8) & 0xFFU)))
-static BROTLI_INLINE uint16_t BROTLI_UNALIGNED_LOAD16LE(const void* p) {
- uint16_t value = BrotliUnalignedRead16(p);
- return BROTLI_BSWAP16_(value);
-}
-#define BROTLI_BSWAP32_(V) ( \
- (((V) & 0xFFU) << 24) | (((V) & 0xFF00U) << 8) | \
- (((V) >> 8) & 0xFF00U) | (((V) >> 24) & 0xFFU))
-static BROTLI_INLINE uint32_t BROTLI_UNALIGNED_LOAD32LE(const void* p) {
- uint32_t value = BrotliUnalignedRead32(p);
- return BROTLI_BSWAP32_(value);
-}
-#define BROTLI_BSWAP64_(V) ( \
- (((V) & 0xFFU) << 56) | (((V) & 0xFF00U) << 40) | \
- (((V) & 0xFF0000U) << 24) | (((V) & 0xFF000000U) << 8) | \
- (((V) >> 8) & 0xFF000000U) | (((V) >> 24) & 0xFF0000U) | \
- (((V) >> 40) & 0xFF00U) | (((V) >> 56) & 0xFFU))
-static BROTLI_INLINE uint64_t BROTLI_UNALIGNED_LOAD64LE(const void* p) {
- uint64_t value = BrotliUnalignedRead64(p);
- return BROTLI_BSWAP64_(value);
-}
-static BROTLI_INLINE void BROTLI_UNALIGNED_STORE64LE(void* p, uint64_t v) {
- uint64_t value = BROTLI_BSWAP64_(v);
- BrotliUnalignedWrite64(p, value);
-}
-#else /* BROTLI_LITTLE_ENDIAN */
-/* Read / store values byte-wise; hopefully compiler will understand. */
-static BROTLI_INLINE uint16_t BROTLI_UNALIGNED_LOAD16LE(const void* p) {
- const uint8_t* in = (const uint8_t*)p;
- return (uint16_t)(in[0] | (in[1] << 8));
-}
-static BROTLI_INLINE uint32_t BROTLI_UNALIGNED_LOAD32LE(const void* p) {
- const uint8_t* in = (const uint8_t*)p;
- uint32_t value = (uint32_t)(in[0]);
- value |= (uint32_t)(in[1]) << 8;
- value |= (uint32_t)(in[2]) << 16;
- value |= (uint32_t)(in[3]) << 24;
- return value;
-}
-static BROTLI_INLINE uint64_t BROTLI_UNALIGNED_LOAD64LE(const void* p) {
- const uint8_t* in = (const uint8_t*)p;
- uint64_t value = (uint64_t)(in[0]);
- value |= (uint64_t)(in[1]) << 8;
- value |= (uint64_t)(in[2]) << 16;
- value |= (uint64_t)(in[3]) << 24;
- value |= (uint64_t)(in[4]) << 32;
- value |= (uint64_t)(in[5]) << 40;
- value |= (uint64_t)(in[6]) << 48;
- value |= (uint64_t)(in[7]) << 56;
- return value;
-}
-static BROTLI_INLINE void BROTLI_UNALIGNED_STORE64LE(void* p, uint64_t v) {
- uint8_t* out = (uint8_t*)p;
- out[0] = (uint8_t)v;
- out[1] = (uint8_t)(v >> 8);
- out[2] = (uint8_t)(v >> 16);
- out[3] = (uint8_t)(v >> 24);
- out[4] = (uint8_t)(v >> 32);
- out[5] = (uint8_t)(v >> 40);
- out[6] = (uint8_t)(v >> 48);
- out[7] = (uint8_t)(v >> 56);
-}
-#endif /* BROTLI_LITTLE_ENDIAN */
-
-/* BROTLI_IS_CONSTANT macros returns true for compile-time constants. */
-#if BROTLI_GNUC_HAS_BUILTIN(__builtin_constant_p, 3, 0, 1) || \
- BROTLI_INTEL_VERSION_CHECK(16, 0, 0)
-#define BROTLI_IS_CONSTANT(x) (!!__builtin_constant_p(x))
-#else
-#define BROTLI_IS_CONSTANT(x) (!!0)
-#endif
-
-#if defined(BROTLI_TARGET_ARMV7) || defined(BROTLI_TARGET_ARMV8_ANY)
-#define BROTLI_HAS_UBFX (!!1)
-#else
-#define BROTLI_HAS_UBFX (!!0)
-#endif
-
-#if defined(BROTLI_ENABLE_LOG)
-#define BROTLI_DCHECK(x) assert(x)
-#define BROTLI_LOG(x) printf x
-#else
-#define BROTLI_DCHECK(x)
-#define BROTLI_LOG(x)
-#endif
-
-#if defined(BROTLI_DEBUG) || defined(BROTLI_ENABLE_LOG)
-static BROTLI_INLINE void BrotliDump(const char* f, int l, const char* fn) {
- fprintf(stderr, "%s:%d (%s)\n", f, l, fn);
- fflush(stderr);
-}
-#define BROTLI_DUMP() BrotliDump(__FILE__, __LINE__, __FUNCTION__)
-#else
-#define BROTLI_DUMP() (void)(0)
-#endif
-
-/* TODO: add appropriate icc/sunpro/arm/ibm/ti checks. */
-#if (BROTLI_GNUC_VERSION_CHECK(3, 0, 0) || defined(__llvm__)) && \
- !defined(BROTLI_BUILD_NO_RBIT)
-#if defined(BROTLI_TARGET_ARMV7) || defined(BROTLI_TARGET_ARMV8_ANY)
-/* TODO: detect ARMv6T2 and enable this code for it. */
-static BROTLI_INLINE brotli_reg_t BrotliRBit(brotli_reg_t input) {
- brotli_reg_t output;
- __asm__("rbit %0, %1\n" : "=r"(output) : "r"(input));
- return output;
-}
-#define BROTLI_RBIT(x) BrotliRBit(x)
-#endif /* armv7 / armv8 */
-#endif /* gcc || clang */
-#if !defined(BROTLI_RBIT)
-static BROTLI_INLINE void BrotliRBit(void) { /* Should break build if used. */ }
-#endif /* BROTLI_RBIT */
-
-#define BROTLI_REPEAT(N, X) { \
- if ((N & 1) != 0) {X;} \
- if ((N & 2) != 0) {X; X;} \
- if ((N & 4) != 0) {X; X; X; X;} \
-}
-
-#define BROTLI_UNUSED(X) (void)(X)
-
-#define BROTLI_MIN_MAX(T) \
- static BROTLI_INLINE T brotli_min_ ## T (T a, T b) { return a < b ? a : b; } \
- static BROTLI_INLINE T brotli_max_ ## T (T a, T b) { return a > b ? a : b; }
-BROTLI_MIN_MAX(double) BROTLI_MIN_MAX(float) BROTLI_MIN_MAX(int)
-BROTLI_MIN_MAX(size_t) BROTLI_MIN_MAX(uint32_t) BROTLI_MIN_MAX(uint8_t)
-#undef BROTLI_MIN_MAX
-#define BROTLI_MIN(T, A, B) (brotli_min_ ## T((A), (B)))
-#define BROTLI_MAX(T, A, B) (brotli_max_ ## T((A), (B)))
-
-#define BROTLI_SWAP(T, A, I, J) { \
- T __brotli_swap_tmp = (A)[(I)]; \
- (A)[(I)] = (A)[(J)]; \
- (A)[(J)] = __brotli_swap_tmp; \
-}
-
-/* Default brotli_alloc_func */
-static void* BrotliDefaultAllocFunc(void* opaque, size_t size) {
- BROTLI_UNUSED(opaque);
- return malloc(size);
-}
-
-/* Default brotli_free_func */
-static void BrotliDefaultFreeFunc(void* opaque, void* address) {
- BROTLI_UNUSED(opaque);
- free(address);
-}
-
-BROTLI_UNUSED_FUNCTION void BrotliSuppressUnusedFunctions(void) {
- BROTLI_UNUSED(&BrotliSuppressUnusedFunctions);
- BROTLI_UNUSED(&BrotliUnalignedRead16);
- BROTLI_UNUSED(&BrotliUnalignedRead32);
- BROTLI_UNUSED(&BrotliUnalignedRead64);
- BROTLI_UNUSED(&BrotliUnalignedWrite64);
- BROTLI_UNUSED(&BROTLI_UNALIGNED_LOAD16LE);
- BROTLI_UNUSED(&BROTLI_UNALIGNED_LOAD32LE);
- BROTLI_UNUSED(&BROTLI_UNALIGNED_LOAD64LE);
- BROTLI_UNUSED(&BROTLI_UNALIGNED_STORE64LE);
- BROTLI_UNUSED(&BrotliRBit);
- BROTLI_UNUSED(&brotli_min_double);
- BROTLI_UNUSED(&brotli_max_double);
- BROTLI_UNUSED(&brotli_min_float);
- BROTLI_UNUSED(&brotli_max_float);
- BROTLI_UNUSED(&brotli_min_int);
- BROTLI_UNUSED(&brotli_max_int);
- BROTLI_UNUSED(&brotli_min_size_t);
- BROTLI_UNUSED(&brotli_max_size_t);
- BROTLI_UNUSED(&brotli_min_uint32_t);
- BROTLI_UNUSED(&brotli_max_uint32_t);
- BROTLI_UNUSED(&brotli_min_uint8_t);
- BROTLI_UNUSED(&brotli_max_uint8_t);
- BROTLI_UNUSED(&BrotliDefaultAllocFunc);
- BROTLI_UNUSED(&BrotliDefaultFreeFunc);
-#if defined(BROTLI_DEBUG) || defined(BROTLI_ENABLE_LOG)
- BROTLI_UNUSED(&BrotliDump);
-#endif
-}
-
-#endif /* BROTLI_COMMON_PLATFORM_H_ */
diff --git a/BaseTools/Source/C/BrotliCompress/common/transform.h b/BaseTools/Source/C/BrotliCompress/common/transform.h
deleted file mode 100644
index 8b42cd1807b0..000000000000
--- a/BaseTools/Source/C/BrotliCompress/common/transform.h
+++ /dev/null
@@ -1,80 +0,0 @@
-/* transforms is a part of ABI, but not API.
-
- It means that there are some functions that are supposed to be in "common"
- library, but header itself is not placed into include/brotli. This way,
- aforementioned functions will be available only to brotli internals.
- */
-
-#ifndef BROTLI_COMMON_TRANSFORM_H_
-#define BROTLI_COMMON_TRANSFORM_H_
-
-#include <brotli/port.h>
-#include <brotli/types.h>
-
-#if defined(__cplusplus) || defined(c_plusplus)
-extern "C" {
-#endif
-
-enum BrotliWordTransformType {
- BROTLI_TRANSFORM_IDENTITY = 0,
- BROTLI_TRANSFORM_OMIT_LAST_1 = 1,
- BROTLI_TRANSFORM_OMIT_LAST_2 = 2,
- BROTLI_TRANSFORM_OMIT_LAST_3 = 3,
- BROTLI_TRANSFORM_OMIT_LAST_4 = 4,
- BROTLI_TRANSFORM_OMIT_LAST_5 = 5,
- BROTLI_TRANSFORM_OMIT_LAST_6 = 6,
- BROTLI_TRANSFORM_OMIT_LAST_7 = 7,
- BROTLI_TRANSFORM_OMIT_LAST_8 = 8,
- BROTLI_TRANSFORM_OMIT_LAST_9 = 9,
- BROTLI_TRANSFORM_UPPERCASE_FIRST = 10,
- BROTLI_TRANSFORM_UPPERCASE_ALL = 11,
- BROTLI_TRANSFORM_OMIT_FIRST_1 = 12,
- BROTLI_TRANSFORM_OMIT_FIRST_2 = 13,
- BROTLI_TRANSFORM_OMIT_FIRST_3 = 14,
- BROTLI_TRANSFORM_OMIT_FIRST_4 = 15,
- BROTLI_TRANSFORM_OMIT_FIRST_5 = 16,
- BROTLI_TRANSFORM_OMIT_FIRST_6 = 17,
- BROTLI_TRANSFORM_OMIT_FIRST_7 = 18,
- BROTLI_TRANSFORM_OMIT_FIRST_8 = 19,
- BROTLI_TRANSFORM_OMIT_FIRST_9 = 20,
- BROTLI_NUM_TRANSFORM_TYPES /* Counts transforms, not a transform itself. */
-};
-
-#define BROTLI_TRANSFORMS_MAX_CUT_OFF BROTLI_TRANSFORM_OMIT_LAST_9
-
-typedef struct BrotliTransforms {
- uint16_t prefix_suffix_size;
- /* Last character must be null, so prefix_suffix_size must be at least 1. */
- const uint8_t* prefix_suffix;
- const uint16_t* prefix_suffix_map;
- uint32_t num_transforms;
- /* Each entry is a [prefix_id, transform, suffix_id] triplet. */
- const uint8_t* transforms;
- /* Indices of transforms like ["", BROTLI_TRANSFORM_OMIT_LAST_#, ""].
- 0-th element corresponds to ["", BROTLI_TRANSFORM_IDENTITY, ""].
- -1, if cut-off transform does not exist. */
- int16_t cutOffTransforms[BROTLI_TRANSFORMS_MAX_CUT_OFF + 1];
-} BrotliTransforms;
-
-/* T is BrotliTransforms*; result is uint8_t. */
-#define BROTLI_TRANSFORM_PREFIX_ID(T, I) ((T)->transforms[((I) * 3) + 0])
-#define BROTLI_TRANSFORM_TYPE(T, I) ((T)->transforms[((I) * 3) + 1])
-#define BROTLI_TRANSFORM_SUFFIX_ID(T, I) ((T)->transforms[((I) * 3) + 2])
-
-/* T is BrotliTransforms*; result is const uint8_t*. */
-#define BROTLI_TRANSFORM_PREFIX(T, I) (&(T)->prefix_suffix[ \
- (T)->prefix_suffix_map[BROTLI_TRANSFORM_PREFIX_ID(T, I)]])
-#define BROTLI_TRANSFORM_SUFFIX(T, I) (&(T)->prefix_suffix[ \
- (T)->prefix_suffix_map[BROTLI_TRANSFORM_SUFFIX_ID(T, I)]])
-
-BROTLI_COMMON_API const BrotliTransforms* BrotliGetTransforms(void);
-
-BROTLI_COMMON_API int BrotliTransformDictionaryWord(
- uint8_t* dst, const uint8_t* word, int len,
- const BrotliTransforms* transforms, int transform_idx);
-
-#if defined(__cplusplus) || defined(c_plusplus)
-} /* extern "C" */
-#endif
-
-#endif /* BROTLI_COMMON_TRANSFORM_H_ */
diff --git a/BaseTools/Source/C/BrotliCompress/common/version.h b/BaseTools/Source/C/BrotliCompress/common/version.h
deleted file mode 100644
index 8e94f4ffeacd..000000000000
--- a/BaseTools/Source/C/BrotliCompress/common/version.h
+++ /dev/null
@@ -1,26 +0,0 @@
-/* Copyright 2016 Google Inc. All Rights Reserved.
-
- Distributed under MIT license.
- See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
-*/
-
-/* Version definition. */
-
-#ifndef BROTLI_COMMON_VERSION_H_
-#define BROTLI_COMMON_VERSION_H_
-
-/* This macro should only be used when library is compiled together with client.
- If library is dynamically linked, use BrotliDecoderVersion and
- BrotliEncoderVersion methods. */
-
-/* Semantic version, calculated as (MAJOR << 24) | (MINOR << 12) | PATCH */
-#define BROTLI_VERSION 0x1000006
-
-/* This macro is used by build system to produce Libtool-friendly soname. See
- https://www.gnu.org/software/libtool/manual/html_node/Libtool-versioning.html
- */
-
-/* ABI version, calculated as (CURRENT << 24) | (REVISION << 12) | AGE */
-#define BROTLI_ABI_VERSION 0x1006000
-
-#endif /* BROTLI_COMMON_VERSION_H_ */
diff --git a/BaseTools/Source/C/BrotliCompress/dec/bit_reader.h b/BaseTools/Source/C/BrotliCompress/dec/bit_reader.h
deleted file mode 100644
index b13e33fea208..000000000000
--- a/BaseTools/Source/C/BrotliCompress/dec/bit_reader.h
+++ /dev/null
@@ -1,309 +0,0 @@
-/* Copyright 2013 Google Inc. All Rights Reserved.
-
- Distributed under MIT license.
- See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
-*/
-
-/* Bit reading helpers */
-
-#ifndef BROTLI_DEC_BIT_READER_H_
-#define BROTLI_DEC_BIT_READER_H_
-
-#include <string.h> /* memcpy */
-
-#include "../common/platform.h"
-#include <brotli/types.h>
-
-#if defined(__cplusplus) || defined(c_plusplus)
-extern "C" {
-#endif
-
-#define BROTLI_SHORT_FILL_BIT_WINDOW_READ (sizeof(brotli_reg_t) >> 1)
-
-static const uint32_t kBitMask[33] = { 0x00000000,
- 0x00000001, 0x00000003, 0x00000007, 0x0000000F,
- 0x0000001F, 0x0000003F, 0x0000007F, 0x000000FF,
- 0x000001FF, 0x000003FF, 0x000007FF, 0x00000FFF,
- 0x00001FFF, 0x00003FFF, 0x00007FFF, 0x0000FFFF,
- 0x0001FFFF, 0x0003FFFF, 0x0007FFFF, 0x000FFFFF,
- 0x001FFFFF, 0x003FFFFF, 0x007FFFFF, 0x00FFFFFF,
- 0x01FFFFFF, 0x03FFFFFF, 0x07FFFFFF, 0x0FFFFFFF,
- 0x1FFFFFFF, 0x3FFFFFFF, 0x7FFFFFFF, 0xFFFFFFFF
-};
-
-static BROTLI_INLINE uint32_t BitMask(uint32_t n) {
- if (BROTLI_IS_CONSTANT(n) || BROTLI_HAS_UBFX) {
- /* Masking with this expression turns to a single
- "Unsigned Bit Field Extract" UBFX instruction on ARM. */
- return ~((0xFFFFFFFFu) << n);
- } else {
- return kBitMask[n];
- }
-}
-
-typedef struct {
- brotli_reg_t val_; /* pre-fetched bits */
- uint32_t bit_pos_; /* current bit-reading position in val_ */
- const uint8_t* next_in; /* the byte we're reading from */
- size_t avail_in;
-} BrotliBitReader;
-
-typedef struct {
- brotli_reg_t val_;
- uint32_t bit_pos_;
- const uint8_t* next_in;
- size_t avail_in;
-} BrotliBitReaderState;
-
-/* Initializes the BrotliBitReader fields. */
-BROTLI_INTERNAL void BrotliInitBitReader(BrotliBitReader* const br);
-
-/* Ensures that accumulator is not empty.
- May consume up to sizeof(brotli_reg_t) - 1 bytes of input.
- Returns BROTLI_FALSE if data is required but there is no input available.
- For BROTLI_ALIGNED_READ this function also prepares bit reader for aligned
- reading. */
-BROTLI_INTERNAL BROTLI_BOOL BrotliWarmupBitReader(BrotliBitReader* const br);
-
-static BROTLI_INLINE void BrotliBitReaderSaveState(
- BrotliBitReader* const from, BrotliBitReaderState* to) {
- to->val_ = from->val_;
- to->bit_pos_ = from->bit_pos_;
- to->next_in = from->next_in;
- to->avail_in = from->avail_in;
-}
-
-static BROTLI_INLINE void BrotliBitReaderRestoreState(
- BrotliBitReader* const to, BrotliBitReaderState* from) {
- to->val_ = from->val_;
- to->bit_pos_ = from->bit_pos_;
- to->next_in = from->next_in;
- to->avail_in = from->avail_in;
-}
-
-static BROTLI_INLINE uint32_t BrotliGetAvailableBits(
- const BrotliBitReader* br) {
- return (BROTLI_64_BITS ? 64 : 32) - br->bit_pos_;
-}
-
-/* Returns amount of unread bytes the bit reader still has buffered from the
- BrotliInput, including whole bytes in br->val_. */
-static BROTLI_INLINE size_t BrotliGetRemainingBytes(BrotliBitReader* br) {
- return br->avail_in + (BrotliGetAvailableBits(br) >> 3);
-}
-
-/* Checks if there is at least |num| bytes left in the input ring-buffer
- (excluding the bits remaining in br->val_). */
-static BROTLI_INLINE BROTLI_BOOL BrotliCheckInputAmount(
- BrotliBitReader* const br, size_t num) {
- return TO_BROTLI_BOOL(br->avail_in >= num);
-}
-
-/* Guarantees that there are at least |n_bits| + 1 bits in accumulator.
- Precondition: accumulator contains at least 1 bit.
- |n_bits| should be in the range [1..24] for regular build. For portable
- non-64-bit little-endian build only 16 bits are safe to request. */
-static BROTLI_INLINE void BrotliFillBitWindow(
- BrotliBitReader* const br, uint32_t n_bits) {
-#if (BROTLI_64_BITS)
- if (!BROTLI_ALIGNED_READ && BROTLI_IS_CONSTANT(n_bits) && (n_bits <= 8)) {
- if (br->bit_pos_ >= 56) {
- br->val_ >>= 56;
- br->bit_pos_ ^= 56; /* here same as -= 56 because of the if condition */
- br->val_ |= BROTLI_UNALIGNED_LOAD64LE(br->next_in) << 8;
- br->avail_in -= 7;
- br->next_in += 7;
- }
- } else if (
- !BROTLI_ALIGNED_READ && BROTLI_IS_CONSTANT(n_bits) && (n_bits <= 16)) {
- if (br->bit_pos_ >= 48) {
- br->val_ >>= 48;
- br->bit_pos_ ^= 48; /* here same as -= 48 because of the if condition */
- br->val_ |= BROTLI_UNALIGNED_LOAD64LE(br->next_in) << 16;
- br->avail_in -= 6;
- br->next_in += 6;
- }
- } else {
- if (br->bit_pos_ >= 32) {
- br->val_ >>= 32;
- br->bit_pos_ ^= 32; /* here same as -= 32 because of the if condition */
- br->val_ |= ((uint64_t)BROTLI_UNALIGNED_LOAD32LE(br->next_in)) << 32;
- br->avail_in -= BROTLI_SHORT_FILL_BIT_WINDOW_READ;
- br->next_in += BROTLI_SHORT_FILL_BIT_WINDOW_READ;
- }
- }
-#else
- if (!BROTLI_ALIGNED_READ && BROTLI_IS_CONSTANT(n_bits) && (n_bits <= 8)) {
- if (br->bit_pos_ >= 24) {
- br->val_ >>= 24;
- br->bit_pos_ ^= 24; /* here same as -= 24 because of the if condition */
- br->val_ |= BROTLI_UNALIGNED_LOAD32LE(br->next_in) << 8;
- br->avail_in -= 3;
- br->next_in += 3;
- }
- } else {
- if (br->bit_pos_ >= 16) {
- br->val_ >>= 16;
- br->bit_pos_ ^= 16; /* here same as -= 16 because of the if condition */
- br->val_ |= ((uint32_t)BROTLI_UNALIGNED_LOAD16LE(br->next_in)) << 16;
- br->avail_in -= BROTLI_SHORT_FILL_BIT_WINDOW_READ;
- br->next_in += BROTLI_SHORT_FILL_BIT_WINDOW_READ;
- }
- }
-#endif
-}
-
-/* Mostly like BrotliFillBitWindow, but guarantees only 16 bits and reads no
- more than BROTLI_SHORT_FILL_BIT_WINDOW_READ bytes of input. */
-static BROTLI_INLINE void BrotliFillBitWindow16(BrotliBitReader* const br) {
- BrotliFillBitWindow(br, 17);
-}
-
-/* Tries to pull one byte of input to accumulator.
- Returns BROTLI_FALSE if there is no input available. */
-static BROTLI_INLINE BROTLI_BOOL BrotliPullByte(BrotliBitReader* const br) {
- if (br->avail_in == 0) {
- return BROTLI_FALSE;
- }
- br->val_ >>= 8;
-#if (BROTLI_64_BITS)
- br->val_ |= ((uint64_t)*br->next_in) << 56;
-#else
- br->val_ |= ((uint32_t)*br->next_in) << 24;
-#endif
- br->bit_pos_ -= 8;
- --br->avail_in;
- ++br->next_in;
- return BROTLI_TRUE;
-}
-
-/* Returns currently available bits.
- The number of valid bits could be calculated by BrotliGetAvailableBits. */
-static BROTLI_INLINE brotli_reg_t BrotliGetBitsUnmasked(
- BrotliBitReader* const br) {
- return br->val_ >> br->bit_pos_;
-}
-
-/* Like BrotliGetBits, but does not mask the result.
- The result contains at least 16 valid bits. */
-static BROTLI_INLINE uint32_t BrotliGet16BitsUnmasked(
- BrotliBitReader* const br) {
- BrotliFillBitWindow(br, 16);
- return (uint32_t)BrotliGetBitsUnmasked(br);
-}
-
-/* Returns the specified number of bits from |br| without advancing bit
- position. */
-static BROTLI_INLINE uint32_t BrotliGetBits(
- BrotliBitReader* const br, uint32_t n_bits) {
- BrotliFillBitWindow(br, n_bits);
- return (uint32_t)BrotliGetBitsUnmasked(br) & BitMask(n_bits);
-}
-
-/* Tries to peek the specified amount of bits. Returns BROTLI_FALSE, if there
- is not enough input. */
-static BROTLI_INLINE BROTLI_BOOL BrotliSafeGetBits(
- BrotliBitReader* const br, uint32_t n_bits, uint32_t* val) {
- while (BrotliGetAvailableBits(br) < n_bits) {
- if (!BrotliPullByte(br)) {
- return BROTLI_FALSE;
- }
- }
- *val = (uint32_t)BrotliGetBitsUnmasked(br) & BitMask(n_bits);
- return BROTLI_TRUE;
-}
-
-/* Advances the bit pos by |n_bits|. */
-static BROTLI_INLINE void BrotliDropBits(
- BrotliBitReader* const br, uint32_t n_bits) {
- br->bit_pos_ += n_bits;
-}
-
-static BROTLI_INLINE void BrotliBitReaderUnload(BrotliBitReader* br) {
- uint32_t unused_bytes = BrotliGetAvailableBits(br) >> 3;
- uint32_t unused_bits = unused_bytes << 3;
- br->avail_in += unused_bytes;
- br->next_in -= unused_bytes;
- if (unused_bits == sizeof(br->val_) << 3) {
- br->val_ = 0;
- } else {
- br->val_ <<= unused_bits;
- }
- br->bit_pos_ += unused_bits;
-}
-
-/* Reads the specified number of bits from |br| and advances the bit pos.
- Precondition: accumulator MUST contain at least |n_bits|. */
-static BROTLI_INLINE void BrotliTakeBits(
- BrotliBitReader* const br, uint32_t n_bits, uint32_t* val) {
- *val = (uint32_t)BrotliGetBitsUnmasked(br) & BitMask(n_bits);
- BROTLI_LOG(("[BrotliReadBits] %d %d %d val: %6x\n",
- (int)br->avail_in, (int)br->bit_pos_, (int)n_bits, (int)*val));
- BrotliDropBits(br, n_bits);
-}
-
-/* Reads the specified number of bits from |br| and advances the bit pos.
- Assumes that there is enough input to perform BrotliFillBitWindow. */
-static BROTLI_INLINE uint32_t BrotliReadBits(
- BrotliBitReader* const br, uint32_t n_bits) {
- if (BROTLI_64_BITS || (n_bits <= 16)) {
- uint32_t val;
- BrotliFillBitWindow(br, n_bits);
- BrotliTakeBits(br, n_bits, &val);
- return val;
- } else {
- uint32_t low_val;
- uint32_t high_val;
- BrotliFillBitWindow(br, 16);
- BrotliTakeBits(br, 16, &low_val);
- BrotliFillBitWindow(br, 8);
- BrotliTakeBits(br, n_bits - 16, &high_val);
- return low_val | (high_val << 16);
- }
-}
-
-/* Tries to read the specified amount of bits. Returns BROTLI_FALSE, if there
- is not enough input. |n_bits| MUST be positive. */
-static BROTLI_INLINE BROTLI_BOOL BrotliSafeReadBits(
- BrotliBitReader* const br, uint32_t n_bits, uint32_t* val) {
- while (BrotliGetAvailableBits(br) < n_bits) {
- if (!BrotliPullByte(br)) {
- return BROTLI_FALSE;
- }
- }
- BrotliTakeBits(br, n_bits, val);
- return BROTLI_TRUE;
-}
-
-/* Advances the bit reader position to the next byte boundary and verifies
- that any skipped bits are set to zero. */
-static BROTLI_INLINE BROTLI_BOOL BrotliJumpToByteBoundary(BrotliBitReader* br) {
- uint32_t pad_bits_count = BrotliGetAvailableBits(br) & 0x7;
- uint32_t pad_bits = 0;
- if (pad_bits_count != 0) {
- BrotliTakeBits(br, pad_bits_count, &pad_bits);
- }
- return TO_BROTLI_BOOL(pad_bits == 0);
-}
-
-/* Copies remaining input bytes stored in the bit reader to the output. Value
- |num| may not be larger than BrotliGetRemainingBytes. The bit reader must be
- warmed up again after this. */
-static BROTLI_INLINE void BrotliCopyBytes(uint8_t* dest,
- BrotliBitReader* br, size_t num) {
- while (BrotliGetAvailableBits(br) >= 8 && num > 0) {
- *dest = (uint8_t)BrotliGetBitsUnmasked(br);
- BrotliDropBits(br, 8);
- ++dest;
- --num;
- }
- memcpy(dest, br->next_in, num);
- br->avail_in -= num;
- br->next_in += num;
-}
-
-#if defined(__cplusplus) || defined(c_plusplus)
-} /* extern "C" */
-#endif
-
-#endif /* BROTLI_DEC_BIT_READER_H_ */
diff --git a/BaseTools/Source/C/BrotliCompress/dec/huffman.h b/BaseTools/Source/C/BrotliCompress/dec/huffman.h
deleted file mode 100644
index 5fc8c0224edc..000000000000
--- a/BaseTools/Source/C/BrotliCompress/dec/huffman.h
+++ /dev/null
@@ -1,72 +0,0 @@
-/* Copyright 2013 Google Inc. All Rights Reserved.
-
- Distributed under MIT license.
- See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
-*/
-
-/* Utilities for building Huffman decoding tables. */
-
-#ifndef BROTLI_DEC_HUFFMAN_H_
-#define BROTLI_DEC_HUFFMAN_H_
-
-#include "../common/platform.h"
-#include <brotli/types.h>
-
-#if defined(__cplusplus) || defined(c_plusplus)
-extern "C" {
-#endif
-
-#define BROTLI_HUFFMAN_MAX_CODE_LENGTH 15
-
-/* Maximum possible Huffman table size for an alphabet size of (index * 32),
- max code length 15 and root table bits 8. */
-static const uint16_t kMaxHuffmanTableSize[] = {
- 256, 402, 436, 468, 500, 534, 566, 598, 630, 662, 694, 726, 758, 790, 822,
- 854, 886, 920, 952, 984, 1016, 1048, 1080, 1112, 1144, 1176, 1208, 1240, 1272,
- 1304, 1336, 1368, 1400, 1432, 1464, 1496, 1528};
-/* BROTLI_NUM_BLOCK_LEN_SYMBOLS == 26 */
-#define BROTLI_HUFFMAN_MAX_SIZE_26 396
-/* BROTLI_MAX_BLOCK_TYPE_SYMBOLS == 258 */
-#define BROTLI_HUFFMAN_MAX_SIZE_258 632
-/* BROTLI_MAX_CONTEXT_MAP_SYMBOLS == 272 */
-#define BROTLI_HUFFMAN_MAX_SIZE_272 646
-
-#define BROTLI_HUFFMAN_MAX_CODE_LENGTH_CODE_LENGTH 5
-
-typedef struct {
- uint8_t bits; /* number of bits used for this symbol */
- uint16_t value; /* symbol value or table offset */
-} HuffmanCode;
-
-/* Builds Huffman lookup table assuming code lengths are in symbol order. */
-BROTLI_INTERNAL void BrotliBuildCodeLengthsHuffmanTable(HuffmanCode* root_table,
- const uint8_t* const code_lengths, uint16_t* count);
-
-/* Builds Huffman lookup table assuming code lengths are in symbol order.
- Returns size of resulting table. */
-BROTLI_INTERNAL uint32_t BrotliBuildHuffmanTable(HuffmanCode* root_table,
- int root_bits, const uint16_t* const symbol_lists, uint16_t* count_arg);
-
-/* Builds a simple Huffman table. The |num_symbols| parameter is to be
- interpreted as follows: 0 means 1 symbol, 1 means 2 symbols,
- 2 means 3 symbols, 3 means 4 symbols with lengths [2, 2, 2, 2],
- 4 means 4 symbols with lengths [1, 2, 3, 3]. */
-BROTLI_INTERNAL uint32_t BrotliBuildSimpleHuffmanTable(HuffmanCode* table,
- int root_bits, uint16_t* symbols, uint32_t num_symbols);
-
-/* Contains a collection of Huffman trees with the same alphabet size. */
-/* max_symbol is needed due to simple codes since log2(alphabet_size) could be
- greater than log2(max_symbol). */
-typedef struct {
- HuffmanCode** htrees;
- HuffmanCode* codes;
- uint16_t alphabet_size;
- uint16_t max_symbol;
- uint16_t num_htrees;
-} HuffmanTreeGroup;
-
-#if defined(__cplusplus) || defined(c_plusplus)
-} /* extern "C" */
-#endif
-
-#endif /* BROTLI_DEC_HUFFMAN_H_ */
diff --git a/BaseTools/Source/C/BrotliCompress/dec/prefix.h b/BaseTools/Source/C/BrotliCompress/dec/prefix.h
deleted file mode 100644
index 39cb45920831..000000000000
--- a/BaseTools/Source/C/BrotliCompress/dec/prefix.h
+++ /dev/null
@@ -1,750 +0,0 @@
-/* Copyright 2013 Google Inc. All Rights Reserved.
-
- Distributed under MIT license.
- See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
-*/
-
-/* Lookup tables to map prefix codes to value ranges. This is used during
- decoding of the block lengths, literal insertion lengths and copy lengths. */
-
-#ifndef BROTLI_DEC_PREFIX_H_
-#define BROTLI_DEC_PREFIX_H_
-
-#include "../common/constants.h"
-#include <brotli/types.h>
-
-/* Represents the range of values belonging to a prefix code:
- [offset, offset + 2^nbits) */
-struct PrefixCodeRange {
- uint16_t offset;
- uint8_t nbits;
-};
-
-static const struct PrefixCodeRange
- kBlockLengthPrefixCode[BROTLI_NUM_BLOCK_LEN_SYMBOLS] = {
- { 1, 2}, { 5, 2}, { 9, 2}, { 13, 2},
- { 17, 3}, { 25, 3}, { 33, 3}, { 41, 3},
- { 49, 4}, { 65, 4}, { 81, 4}, { 97, 4},
- { 113, 5}, { 145, 5}, { 177, 5}, { 209, 5},
- { 241, 6}, { 305, 6}, { 369, 7}, { 497, 8},
- { 753, 9}, { 1265, 10}, {2289, 11}, {4337, 12},
- {8433, 13}, {16625, 24}
-};
-
-typedef struct CmdLutElement {
- uint8_t insert_len_extra_bits;
- uint8_t copy_len_extra_bits;
- int8_t distance_code;
- uint8_t context;
- uint16_t insert_len_offset;
- uint16_t copy_len_offset;
-} CmdLutElement;
-
-static const CmdLutElement kCmdLut[BROTLI_NUM_COMMAND_SYMBOLS] = {
- { 0x00, 0x00, 0, 0x00, 0x0000, 0x0002 },
- { 0x00, 0x00, 0, 0x01, 0x0000, 0x0003 },
- { 0x00, 0x00, 0, 0x02, 0x0000, 0x0004 },
- { 0x00, 0x00, 0, 0x03, 0x0000, 0x0005 },
- { 0x00, 0x00, 0, 0x03, 0x0000, 0x0006 },
- { 0x00, 0x00, 0, 0x03, 0x0000, 0x0007 },
- { 0x00, 0x00, 0, 0x03, 0x0000, 0x0008 },
- { 0x00, 0x00, 0, 0x03, 0x0000, 0x0009 },
- { 0x00, 0x00, 0, 0x00, 0x0001, 0x0002 },
- { 0x00, 0x00, 0, 0x01, 0x0001, 0x0003 },
- { 0x00, 0x00, 0, 0x02, 0x0001, 0x0004 },
- { 0x00, 0x00, 0, 0x03, 0x0001, 0x0005 },
- { 0x00, 0x00, 0, 0x03, 0x0001, 0x0006 },
- { 0x00, 0x00, 0, 0x03, 0x0001, 0x0007 },
- { 0x00, 0x00, 0, 0x03, 0x0001, 0x0008 },
- { 0x00, 0x00, 0, 0x03, 0x0001, 0x0009 },
- { 0x00, 0x00, 0, 0x00, 0x0002, 0x0002 },
- { 0x00, 0x00, 0, 0x01, 0x0002, 0x0003 },
- { 0x00, 0x00, 0, 0x02, 0x0002, 0x0004 },
- { 0x00, 0x00, 0, 0x03, 0x0002, 0x0005 },
- { 0x00, 0x00, 0, 0x03, 0x0002, 0x0006 },
- { 0x00, 0x00, 0, 0x03, 0x0002, 0x0007 },
- { 0x00, 0x00, 0, 0x03, 0x0002, 0x0008 },
- { 0x00, 0x00, 0, 0x03, 0x0002, 0x0009 },
- { 0x00, 0x00, 0, 0x00, 0x0003, 0x0002 },
- { 0x00, 0x00, 0, 0x01, 0x0003, 0x0003 },
- { 0x00, 0x00, 0, 0x02, 0x0003, 0x0004 },
- { 0x00, 0x00, 0, 0x03, 0x0003, 0x0005 },
- { 0x00, 0x00, 0, 0x03, 0x0003, 0x0006 },
- { 0x00, 0x00, 0, 0x03, 0x0003, 0x0007 },
- { 0x00, 0x00, 0, 0x03, 0x0003, 0x0008 },
- { 0x00, 0x00, 0, 0x03, 0x0003, 0x0009 },
- { 0x00, 0x00, 0, 0x00, 0x0004, 0x0002 },
- { 0x00, 0x00, 0, 0x01, 0x0004, 0x0003 },
- { 0x00, 0x00, 0, 0x02, 0x0004, 0x0004 },
- { 0x00, 0x00, 0, 0x03, 0x0004, 0x0005 },
- { 0x00, 0x00, 0, 0x03, 0x0004, 0x0006 },
- { 0x00, 0x00, 0, 0x03, 0x0004, 0x0007 },
- { 0x00, 0x00, 0, 0x03, 0x0004, 0x0008 },
- { 0x00, 0x00, 0, 0x03, 0x0004, 0x0009 },
- { 0x00, 0x00, 0, 0x00, 0x0005, 0x0002 },
- { 0x00, 0x00, 0, 0x01, 0x0005, 0x0003 },
- { 0x00, 0x00, 0, 0x02, 0x0005, 0x0004 },
- { 0x00, 0x00, 0, 0x03, 0x0005, 0x0005 },
- { 0x00, 0x00, 0, 0x03, 0x0005, 0x0006 },
- { 0x00, 0x00, 0, 0x03, 0x0005, 0x0007 },
- { 0x00, 0x00, 0, 0x03, 0x0005, 0x0008 },
- { 0x00, 0x00, 0, 0x03, 0x0005, 0x0009 },
- { 0x01, 0x00, 0, 0x00, 0x0006, 0x0002 },
- { 0x01, 0x00, 0, 0x01, 0x0006, 0x0003 },
- { 0x01, 0x00, 0, 0x02, 0x0006, 0x0004 },
- { 0x01, 0x00, 0, 0x03, 0x0006, 0x0005 },
- { 0x01, 0x00, 0, 0x03, 0x0006, 0x0006 },
- { 0x01, 0x00, 0, 0x03, 0x0006, 0x0007 },
- { 0x01, 0x00, 0, 0x03, 0x0006, 0x0008 },
- { 0x01, 0x00, 0, 0x03, 0x0006, 0x0009 },
- { 0x01, 0x00, 0, 0x00, 0x0008, 0x0002 },
- { 0x01, 0x00, 0, 0x01, 0x0008, 0x0003 },
- { 0x01, 0x00, 0, 0x02, 0x0008, 0x0004 },
- { 0x01, 0x00, 0, 0x03, 0x0008, 0x0005 },
- { 0x01, 0x00, 0, 0x03, 0x0008, 0x0006 },
- { 0x01, 0x00, 0, 0x03, 0x0008, 0x0007 },
- { 0x01, 0x00, 0, 0x03, 0x0008, 0x0008 },
- { 0x01, 0x00, 0, 0x03, 0x0008, 0x0009 },
- { 0x00, 0x01, 0, 0x03, 0x0000, 0x000a },
- { 0x00, 0x01, 0, 0x03, 0x0000, 0x000c },
- { 0x00, 0x02, 0, 0x03, 0x0000, 0x000e },
- { 0x00, 0x02, 0, 0x03, 0x0000, 0x0012 },
- { 0x00, 0x03, 0, 0x03, 0x0000, 0x0016 },
- { 0x00, 0x03, 0, 0x03, 0x0000, 0x001e },
- { 0x00, 0x04, 0, 0x03, 0x0000, 0x0026 },
- { 0x00, 0x04, 0, 0x03, 0x0000, 0x0036 },
- { 0x00, 0x01, 0, 0x03, 0x0001, 0x000a },
- { 0x00, 0x01, 0, 0x03, 0x0001, 0x000c },
- { 0x00, 0x02, 0, 0x03, 0x0001, 0x000e },
- { 0x00, 0x02, 0, 0x03, 0x0001, 0x0012 },
- { 0x00, 0x03, 0, 0x03, 0x0001, 0x0016 },
- { 0x00, 0x03, 0, 0x03, 0x0001, 0x001e },
- { 0x00, 0x04, 0, 0x03, 0x0001, 0x0026 },
- { 0x00, 0x04, 0, 0x03, 0x0001, 0x0036 },
- { 0x00, 0x01, 0, 0x03, 0x0002, 0x000a },
- { 0x00, 0x01, 0, 0x03, 0x0002, 0x000c },
- { 0x00, 0x02, 0, 0x03, 0x0002, 0x000e },
- { 0x00, 0x02, 0, 0x03, 0x0002, 0x0012 },
- { 0x00, 0x03, 0, 0x03, 0x0002, 0x0016 },
- { 0x00, 0x03, 0, 0x03, 0x0002, 0x001e },
- { 0x00, 0x04, 0, 0x03, 0x0002, 0x0026 },
- { 0x00, 0x04, 0, 0x03, 0x0002, 0x0036 },
- { 0x00, 0x01, 0, 0x03, 0x0003, 0x000a },
- { 0x00, 0x01, 0, 0x03, 0x0003, 0x000c },
- { 0x00, 0x02, 0, 0x03, 0x0003, 0x000e },
- { 0x00, 0x02, 0, 0x03, 0x0003, 0x0012 },
- { 0x00, 0x03, 0, 0x03, 0x0003, 0x0016 },
- { 0x00, 0x03, 0, 0x03, 0x0003, 0x001e },
- { 0x00, 0x04, 0, 0x03, 0x0003, 0x0026 },
- { 0x00, 0x04, 0, 0x03, 0x0003, 0x0036 },
- { 0x00, 0x01, 0, 0x03, 0x0004, 0x000a },
- { 0x00, 0x01, 0, 0x03, 0x0004, 0x000c },
- { 0x00, 0x02, 0, 0x03, 0x0004, 0x000e },
- { 0x00, 0x02, 0, 0x03, 0x0004, 0x0012 },
- { 0x00, 0x03, 0, 0x03, 0x0004, 0x0016 },
- { 0x00, 0x03, 0, 0x03, 0x0004, 0x001e },
- { 0x00, 0x04, 0, 0x03, 0x0004, 0x0026 },
- { 0x00, 0x04, 0, 0x03, 0x0004, 0x0036 },
- { 0x00, 0x01, 0, 0x03, 0x0005, 0x000a },
- { 0x00, 0x01, 0, 0x03, 0x0005, 0x000c },
- { 0x00, 0x02, 0, 0x03, 0x0005, 0x000e },
- { 0x00, 0x02, 0, 0x03, 0x0005, 0x0012 },
- { 0x00, 0x03, 0, 0x03, 0x0005, 0x0016 },
- { 0x00, 0x03, 0, 0x03, 0x0005, 0x001e },
- { 0x00, 0x04, 0, 0x03, 0x0005, 0x0026 },
- { 0x00, 0x04, 0, 0x03, 0x0005, 0x0036 },
- { 0x01, 0x01, 0, 0x03, 0x0006, 0x000a },
- { 0x01, 0x01, 0, 0x03, 0x0006, 0x000c },
- { 0x01, 0x02, 0, 0x03, 0x0006, 0x000e },
- { 0x01, 0x02, 0, 0x03, 0x0006, 0x0012 },
- { 0x01, 0x03, 0, 0x03, 0x0006, 0x0016 },
- { 0x01, 0x03, 0, 0x03, 0x0006, 0x001e },
- { 0x01, 0x04, 0, 0x03, 0x0006, 0x0026 },
- { 0x01, 0x04, 0, 0x03, 0x0006, 0x0036 },
- { 0x01, 0x01, 0, 0x03, 0x0008, 0x000a },
- { 0x01, 0x01, 0, 0x03, 0x0008, 0x000c },
- { 0x01, 0x02, 0, 0x03, 0x0008, 0x000e },
- { 0x01, 0x02, 0, 0x03, 0x0008, 0x0012 },
- { 0x01, 0x03, 0, 0x03, 0x0008, 0x0016 },
- { 0x01, 0x03, 0, 0x03, 0x0008, 0x001e },
- { 0x01, 0x04, 0, 0x03, 0x0008, 0x0026 },
- { 0x01, 0x04, 0, 0x03, 0x0008, 0x0036 },
- { 0x00, 0x00, -1, 0x00, 0x0000, 0x0002 },
- { 0x00, 0x00, -1, 0x01, 0x0000, 0x0003 },
- { 0x00, 0x00, -1, 0x02, 0x0000, 0x0004 },
- { 0x00, 0x00, -1, 0x03, 0x0000, 0x0005 },
- { 0x00, 0x00, -1, 0x03, 0x0000, 0x0006 },
- { 0x00, 0x00, -1, 0x03, 0x0000, 0x0007 },
- { 0x00, 0x00, -1, 0x03, 0x0000, 0x0008 },
- { 0x00, 0x00, -1, 0x03, 0x0000, 0x0009 },
- { 0x00, 0x00, -1, 0x00, 0x0001, 0x0002 },
- { 0x00, 0x00, -1, 0x01, 0x0001, 0x0003 },
- { 0x00, 0x00, -1, 0x02, 0x0001, 0x0004 },
- { 0x00, 0x00, -1, 0x03, 0x0001, 0x0005 },
- { 0x00, 0x00, -1, 0x03, 0x0001, 0x0006 },
- { 0x00, 0x00, -1, 0x03, 0x0001, 0x0007 },
- { 0x00, 0x00, -1, 0x03, 0x0001, 0x0008 },
- { 0x00, 0x00, -1, 0x03, 0x0001, 0x0009 },
- { 0x00, 0x00, -1, 0x00, 0x0002, 0x0002 },
- { 0x00, 0x00, -1, 0x01, 0x0002, 0x0003 },
- { 0x00, 0x00, -1, 0x02, 0x0002, 0x0004 },
- { 0x00, 0x00, -1, 0x03, 0x0002, 0x0005 },
- { 0x00, 0x00, -1, 0x03, 0x0002, 0x0006 },
- { 0x00, 0x00, -1, 0x03, 0x0002, 0x0007 },
- { 0x00, 0x00, -1, 0x03, 0x0002, 0x0008 },
- { 0x00, 0x00, -1, 0x03, 0x0002, 0x0009 },
- { 0x00, 0x00, -1, 0x00, 0x0003, 0x0002 },
- { 0x00, 0x00, -1, 0x01, 0x0003, 0x0003 },
- { 0x00, 0x00, -1, 0x02, 0x0003, 0x0004 },
- { 0x00, 0x00, -1, 0x03, 0x0003, 0x0005 },
- { 0x00, 0x00, -1, 0x03, 0x0003, 0x0006 },
- { 0x00, 0x00, -1, 0x03, 0x0003, 0x0007 },
- { 0x00, 0x00, -1, 0x03, 0x0003, 0x0008 },
- { 0x00, 0x00, -1, 0x03, 0x0003, 0x0009 },
- { 0x00, 0x00, -1, 0x00, 0x0004, 0x0002 },
- { 0x00, 0x00, -1, 0x01, 0x0004, 0x0003 },
- { 0x00, 0x00, -1, 0x02, 0x0004, 0x0004 },
- { 0x00, 0x00, -1, 0x03, 0x0004, 0x0005 },
- { 0x00, 0x00, -1, 0x03, 0x0004, 0x0006 },
- { 0x00, 0x00, -1, 0x03, 0x0004, 0x0007 },
- { 0x00, 0x00, -1, 0x03, 0x0004, 0x0008 },
- { 0x00, 0x00, -1, 0x03, 0x0004, 0x0009 },
- { 0x00, 0x00, -1, 0x00, 0x0005, 0x0002 },
- { 0x00, 0x00, -1, 0x01, 0x0005, 0x0003 },
- { 0x00, 0x00, -1, 0x02, 0x0005, 0x0004 },
- { 0x00, 0x00, -1, 0x03, 0x0005, 0x0005 },
- { 0x00, 0x00, -1, 0x03, 0x0005, 0x0006 },
- { 0x00, 0x00, -1, 0x03, 0x0005, 0x0007 },
- { 0x00, 0x00, -1, 0x03, 0x0005, 0x0008 },
- { 0x00, 0x00, -1, 0x03, 0x0005, 0x0009 },
- { 0x01, 0x00, -1, 0x00, 0x0006, 0x0002 },
- { 0x01, 0x00, -1, 0x01, 0x0006, 0x0003 },
- { 0x01, 0x00, -1, 0x02, 0x0006, 0x0004 },
- { 0x01, 0x00, -1, 0x03, 0x0006, 0x0005 },
- { 0x01, 0x00, -1, 0x03, 0x0006, 0x0006 },
- { 0x01, 0x00, -1, 0x03, 0x0006, 0x0007 },
- { 0x01, 0x00, -1, 0x03, 0x0006, 0x0008 },
- { 0x01, 0x00, -1, 0x03, 0x0006, 0x0009 },
- { 0x01, 0x00, -1, 0x00, 0x0008, 0x0002 },
- { 0x01, 0x00, -1, 0x01, 0x0008, 0x0003 },
- { 0x01, 0x00, -1, 0x02, 0x0008, 0x0004 },
- { 0x01, 0x00, -1, 0x03, 0x0008, 0x0005 },
- { 0x01, 0x00, -1, 0x03, 0x0008, 0x0006 },
- { 0x01, 0x00, -1, 0x03, 0x0008, 0x0007 },
- { 0x01, 0x00, -1, 0x03, 0x0008, 0x0008 },
- { 0x01, 0x00, -1, 0x03, 0x0008, 0x0009 },
- { 0x00, 0x01, -1, 0x03, 0x0000, 0x000a },
- { 0x00, 0x01, -1, 0x03, 0x0000, 0x000c },
- { 0x00, 0x02, -1, 0x03, 0x0000, 0x000e },
- { 0x00, 0x02, -1, 0x03, 0x0000, 0x0012 },
- { 0x00, 0x03, -1, 0x03, 0x0000, 0x0016 },
- { 0x00, 0x03, -1, 0x03, 0x0000, 0x001e },
- { 0x00, 0x04, -1, 0x03, 0x0000, 0x0026 },
- { 0x00, 0x04, -1, 0x03, 0x0000, 0x0036 },
- { 0x00, 0x01, -1, 0x03, 0x0001, 0x000a },
- { 0x00, 0x01, -1, 0x03, 0x0001, 0x000c },
- { 0x00, 0x02, -1, 0x03, 0x0001, 0x000e },
- { 0x00, 0x02, -1, 0x03, 0x0001, 0x0012 },
- { 0x00, 0x03, -1, 0x03, 0x0001, 0x0016 },
- { 0x00, 0x03, -1, 0x03, 0x0001, 0x001e },
- { 0x00, 0x04, -1, 0x03, 0x0001, 0x0026 },
- { 0x00, 0x04, -1, 0x03, 0x0001, 0x0036 },
- { 0x00, 0x01, -1, 0x03, 0x0002, 0x000a },
- { 0x00, 0x01, -1, 0x03, 0x0002, 0x000c },
- { 0x00, 0x02, -1, 0x03, 0x0002, 0x000e },
- { 0x00, 0x02, -1, 0x03, 0x0002, 0x0012 },
- { 0x00, 0x03, -1, 0x03, 0x0002, 0x0016 },
- { 0x00, 0x03, -1, 0x03, 0x0002, 0x001e },
- { 0x00, 0x04, -1, 0x03, 0x0002, 0x0026 },
- { 0x00, 0x04, -1, 0x03, 0x0002, 0x0036 },
- { 0x00, 0x01, -1, 0x03, 0x0003, 0x000a },
- { 0x00, 0x01, -1, 0x03, 0x0003, 0x000c },
- { 0x00, 0x02, -1, 0x03, 0x0003, 0x000e },
- { 0x00, 0x02, -1, 0x03, 0x0003, 0x0012 },
- { 0x00, 0x03, -1, 0x03, 0x0003, 0x0016 },
- { 0x00, 0x03, -1, 0x03, 0x0003, 0x001e },
- { 0x00, 0x04, -1, 0x03, 0x0003, 0x0026 },
- { 0x00, 0x04, -1, 0x03, 0x0003, 0x0036 },
- { 0x00, 0x01, -1, 0x03, 0x0004, 0x000a },
- { 0x00, 0x01, -1, 0x03, 0x0004, 0x000c },
- { 0x00, 0x02, -1, 0x03, 0x0004, 0x000e },
- { 0x00, 0x02, -1, 0x03, 0x0004, 0x0012 },
- { 0x00, 0x03, -1, 0x03, 0x0004, 0x0016 },
- { 0x00, 0x03, -1, 0x03, 0x0004, 0x001e },
- { 0x00, 0x04, -1, 0x03, 0x0004, 0x0026 },
- { 0x00, 0x04, -1, 0x03, 0x0004, 0x0036 },
- { 0x00, 0x01, -1, 0x03, 0x0005, 0x000a },
- { 0x00, 0x01, -1, 0x03, 0x0005, 0x000c },
- { 0x00, 0x02, -1, 0x03, 0x0005, 0x000e },
- { 0x00, 0x02, -1, 0x03, 0x0005, 0x0012 },
- { 0x00, 0x03, -1, 0x03, 0x0005, 0x0016 },
- { 0x00, 0x03, -1, 0x03, 0x0005, 0x001e },
- { 0x00, 0x04, -1, 0x03, 0x0005, 0x0026 },
- { 0x00, 0x04, -1, 0x03, 0x0005, 0x0036 },
- { 0x01, 0x01, -1, 0x03, 0x0006, 0x000a },
- { 0x01, 0x01, -1, 0x03, 0x0006, 0x000c },
- { 0x01, 0x02, -1, 0x03, 0x0006, 0x000e },
- { 0x01, 0x02, -1, 0x03, 0x0006, 0x0012 },
- { 0x01, 0x03, -1, 0x03, 0x0006, 0x0016 },
- { 0x01, 0x03, -1, 0x03, 0x0006, 0x001e },
- { 0x01, 0x04, -1, 0x03, 0x0006, 0x0026 },
- { 0x01, 0x04, -1, 0x03, 0x0006, 0x0036 },
- { 0x01, 0x01, -1, 0x03, 0x0008, 0x000a },
- { 0x01, 0x01, -1, 0x03, 0x0008, 0x000c },
- { 0x01, 0x02, -1, 0x03, 0x0008, 0x000e },
- { 0x01, 0x02, -1, 0x03, 0x0008, 0x0012 },
- { 0x01, 0x03, -1, 0x03, 0x0008, 0x0016 },
- { 0x01, 0x03, -1, 0x03, 0x0008, 0x001e },
- { 0x01, 0x04, -1, 0x03, 0x0008, 0x0026 },
- { 0x01, 0x04, -1, 0x03, 0x0008, 0x0036 },
- { 0x02, 0x00, -1, 0x00, 0x000a, 0x0002 },
- { 0x02, 0x00, -1, 0x01, 0x000a, 0x0003 },
- { 0x02, 0x00, -1, 0x02, 0x000a, 0x0004 },
- { 0x02, 0x00, -1, 0x03, 0x000a, 0x0005 },
- { 0x02, 0x00, -1, 0x03, 0x000a, 0x0006 },
- { 0x02, 0x00, -1, 0x03, 0x000a, 0x0007 },
- { 0x02, 0x00, -1, 0x03, 0x000a, 0x0008 },
- { 0x02, 0x00, -1, 0x03, 0x000a, 0x0009 },
- { 0x02, 0x00, -1, 0x00, 0x000e, 0x0002 },
- { 0x02, 0x00, -1, 0x01, 0x000e, 0x0003 },
- { 0x02, 0x00, -1, 0x02, 0x000e, 0x0004 },
- { 0x02, 0x00, -1, 0x03, 0x000e, 0x0005 },
- { 0x02, 0x00, -1, 0x03, 0x000e, 0x0006 },
- { 0x02, 0x00, -1, 0x03, 0x000e, 0x0007 },
- { 0x02, 0x00, -1, 0x03, 0x000e, 0x0008 },
- { 0x02, 0x00, -1, 0x03, 0x000e, 0x0009 },
- { 0x03, 0x00, -1, 0x00, 0x0012, 0x0002 },
- { 0x03, 0x00, -1, 0x01, 0x0012, 0x0003 },
- { 0x03, 0x00, -1, 0x02, 0x0012, 0x0004 },
- { 0x03, 0x00, -1, 0x03, 0x0012, 0x0005 },
- { 0x03, 0x00, -1, 0x03, 0x0012, 0x0006 },
- { 0x03, 0x00, -1, 0x03, 0x0012, 0x0007 },
- { 0x03, 0x00, -1, 0x03, 0x0012, 0x0008 },
- { 0x03, 0x00, -1, 0x03, 0x0012, 0x0009 },
- { 0x03, 0x00, -1, 0x00, 0x001a, 0x0002 },
- { 0x03, 0x00, -1, 0x01, 0x001a, 0x0003 },
- { 0x03, 0x00, -1, 0x02, 0x001a, 0x0004 },
- { 0x03, 0x00, -1, 0x03, 0x001a, 0x0005 },
- { 0x03, 0x00, -1, 0x03, 0x001a, 0x0006 },
- { 0x03, 0x00, -1, 0x03, 0x001a, 0x0007 },
- { 0x03, 0x00, -1, 0x03, 0x001a, 0x0008 },
- { 0x03, 0x00, -1, 0x03, 0x001a, 0x0009 },
- { 0x04, 0x00, -1, 0x00, 0x0022, 0x0002 },
- { 0x04, 0x00, -1, 0x01, 0x0022, 0x0003 },
- { 0x04, 0x00, -1, 0x02, 0x0022, 0x0004 },
- { 0x04, 0x00, -1, 0x03, 0x0022, 0x0005 },
- { 0x04, 0x00, -1, 0x03, 0x0022, 0x0006 },
- { 0x04, 0x00, -1, 0x03, 0x0022, 0x0007 },
- { 0x04, 0x00, -1, 0x03, 0x0022, 0x0008 },
- { 0x04, 0x00, -1, 0x03, 0x0022, 0x0009 },
- { 0x04, 0x00, -1, 0x00, 0x0032, 0x0002 },
- { 0x04, 0x00, -1, 0x01, 0x0032, 0x0003 },
- { 0x04, 0x00, -1, 0x02, 0x0032, 0x0004 },
- { 0x04, 0x00, -1, 0x03, 0x0032, 0x0005 },
- { 0x04, 0x00, -1, 0x03, 0x0032, 0x0006 },
- { 0x04, 0x00, -1, 0x03, 0x0032, 0x0007 },
- { 0x04, 0x00, -1, 0x03, 0x0032, 0x0008 },
- { 0x04, 0x00, -1, 0x03, 0x0032, 0x0009 },
- { 0x05, 0x00, -1, 0x00, 0x0042, 0x0002 },
- { 0x05, 0x00, -1, 0x01, 0x0042, 0x0003 },
- { 0x05, 0x00, -1, 0x02, 0x0042, 0x0004 },
- { 0x05, 0x00, -1, 0x03, 0x0042, 0x0005 },
- { 0x05, 0x00, -1, 0x03, 0x0042, 0x0006 },
- { 0x05, 0x00, -1, 0x03, 0x0042, 0x0007 },
- { 0x05, 0x00, -1, 0x03, 0x0042, 0x0008 },
- { 0x05, 0x00, -1, 0x03, 0x0042, 0x0009 },
- { 0x05, 0x00, -1, 0x00, 0x0062, 0x0002 },
- { 0x05, 0x00, -1, 0x01, 0x0062, 0x0003 },
- { 0x05, 0x00, -1, 0x02, 0x0062, 0x0004 },
- { 0x05, 0x00, -1, 0x03, 0x0062, 0x0005 },
- { 0x05, 0x00, -1, 0x03, 0x0062, 0x0006 },
- { 0x05, 0x00, -1, 0x03, 0x0062, 0x0007 },
- { 0x05, 0x00, -1, 0x03, 0x0062, 0x0008 },
- { 0x05, 0x00, -1, 0x03, 0x0062, 0x0009 },
- { 0x02, 0x01, -1, 0x03, 0x000a, 0x000a },
- { 0x02, 0x01, -1, 0x03, 0x000a, 0x000c },
- { 0x02, 0x02, -1, 0x03, 0x000a, 0x000e },
- { 0x02, 0x02, -1, 0x03, 0x000a, 0x0012 },
- { 0x02, 0x03, -1, 0x03, 0x000a, 0x0016 },
- { 0x02, 0x03, -1, 0x03, 0x000a, 0x001e },
- { 0x02, 0x04, -1, 0x03, 0x000a, 0x0026 },
- { 0x02, 0x04, -1, 0x03, 0x000a, 0x0036 },
- { 0x02, 0x01, -1, 0x03, 0x000e, 0x000a },
- { 0x02, 0x01, -1, 0x03, 0x000e, 0x000c },
- { 0x02, 0x02, -1, 0x03, 0x000e, 0x000e },
- { 0x02, 0x02, -1, 0x03, 0x000e, 0x0012 },
- { 0x02, 0x03, -1, 0x03, 0x000e, 0x0016 },
- { 0x02, 0x03, -1, 0x03, 0x000e, 0x001e },
- { 0x02, 0x04, -1, 0x03, 0x000e, 0x0026 },
- { 0x02, 0x04, -1, 0x03, 0x000e, 0x0036 },
- { 0x03, 0x01, -1, 0x03, 0x0012, 0x000a },
- { 0x03, 0x01, -1, 0x03, 0x0012, 0x000c },
- { 0x03, 0x02, -1, 0x03, 0x0012, 0x000e },
- { 0x03, 0x02, -1, 0x03, 0x0012, 0x0012 },
- { 0x03, 0x03, -1, 0x03, 0x0012, 0x0016 },
- { 0x03, 0x03, -1, 0x03, 0x0012, 0x001e },
- { 0x03, 0x04, -1, 0x03, 0x0012, 0x0026 },
- { 0x03, 0x04, -1, 0x03, 0x0012, 0x0036 },
- { 0x03, 0x01, -1, 0x03, 0x001a, 0x000a },
- { 0x03, 0x01, -1, 0x03, 0x001a, 0x000c },
- { 0x03, 0x02, -1, 0x03, 0x001a, 0x000e },
- { 0x03, 0x02, -1, 0x03, 0x001a, 0x0012 },
- { 0x03, 0x03, -1, 0x03, 0x001a, 0x0016 },
- { 0x03, 0x03, -1, 0x03, 0x001a, 0x001e },
- { 0x03, 0x04, -1, 0x03, 0x001a, 0x0026 },
- { 0x03, 0x04, -1, 0x03, 0x001a, 0x0036 },
- { 0x04, 0x01, -1, 0x03, 0x0022, 0x000a },
- { 0x04, 0x01, -1, 0x03, 0x0022, 0x000c },
- { 0x04, 0x02, -1, 0x03, 0x0022, 0x000e },
- { 0x04, 0x02, -1, 0x03, 0x0022, 0x0012 },
- { 0x04, 0x03, -1, 0x03, 0x0022, 0x0016 },
- { 0x04, 0x03, -1, 0x03, 0x0022, 0x001e },
- { 0x04, 0x04, -1, 0x03, 0x0022, 0x0026 },
- { 0x04, 0x04, -1, 0x03, 0x0022, 0x0036 },
- { 0x04, 0x01, -1, 0x03, 0x0032, 0x000a },
- { 0x04, 0x01, -1, 0x03, 0x0032, 0x000c },
- { 0x04, 0x02, -1, 0x03, 0x0032, 0x000e },
- { 0x04, 0x02, -1, 0x03, 0x0032, 0x0012 },
- { 0x04, 0x03, -1, 0x03, 0x0032, 0x0016 },
- { 0x04, 0x03, -1, 0x03, 0x0032, 0x001e },
- { 0x04, 0x04, -1, 0x03, 0x0032, 0x0026 },
- { 0x04, 0x04, -1, 0x03, 0x0032, 0x0036 },
- { 0x05, 0x01, -1, 0x03, 0x0042, 0x000a },
- { 0x05, 0x01, -1, 0x03, 0x0042, 0x000c },
- { 0x05, 0x02, -1, 0x03, 0x0042, 0x000e },
- { 0x05, 0x02, -1, 0x03, 0x0042, 0x0012 },
- { 0x05, 0x03, -1, 0x03, 0x0042, 0x0016 },
- { 0x05, 0x03, -1, 0x03, 0x0042, 0x001e },
- { 0x05, 0x04, -1, 0x03, 0x0042, 0x0026 },
- { 0x05, 0x04, -1, 0x03, 0x0042, 0x0036 },
- { 0x05, 0x01, -1, 0x03, 0x0062, 0x000a },
- { 0x05, 0x01, -1, 0x03, 0x0062, 0x000c },
- { 0x05, 0x02, -1, 0x03, 0x0062, 0x000e },
- { 0x05, 0x02, -1, 0x03, 0x0062, 0x0012 },
- { 0x05, 0x03, -1, 0x03, 0x0062, 0x0016 },
- { 0x05, 0x03, -1, 0x03, 0x0062, 0x001e },
- { 0x05, 0x04, -1, 0x03, 0x0062, 0x0026 },
- { 0x05, 0x04, -1, 0x03, 0x0062, 0x0036 },
- { 0x00, 0x05, -1, 0x03, 0x0000, 0x0046 },
- { 0x00, 0x05, -1, 0x03, 0x0000, 0x0066 },
- { 0x00, 0x06, -1, 0x03, 0x0000, 0x0086 },
- { 0x00, 0x07, -1, 0x03, 0x0000, 0x00c6 },
- { 0x00, 0x08, -1, 0x03, 0x0000, 0x0146 },
- { 0x00, 0x09, -1, 0x03, 0x0000, 0x0246 },
- { 0x00, 0x0a, -1, 0x03, 0x0000, 0x0446 },
- { 0x00, 0x18, -1, 0x03, 0x0000, 0x0846 },
- { 0x00, 0x05, -1, 0x03, 0x0001, 0x0046 },
- { 0x00, 0x05, -1, 0x03, 0x0001, 0x0066 },
- { 0x00, 0x06, -1, 0x03, 0x0001, 0x0086 },
- { 0x00, 0x07, -1, 0x03, 0x0001, 0x00c6 },
- { 0x00, 0x08, -1, 0x03, 0x0001, 0x0146 },
- { 0x00, 0x09, -1, 0x03, 0x0001, 0x0246 },
- { 0x00, 0x0a, -1, 0x03, 0x0001, 0x0446 },
- { 0x00, 0x18, -1, 0x03, 0x0001, 0x0846 },
- { 0x00, 0x05, -1, 0x03, 0x0002, 0x0046 },
- { 0x00, 0x05, -1, 0x03, 0x0002, 0x0066 },
- { 0x00, 0x06, -1, 0x03, 0x0002, 0x0086 },
- { 0x00, 0x07, -1, 0x03, 0x0002, 0x00c6 },
- { 0x00, 0x08, -1, 0x03, 0x0002, 0x0146 },
- { 0x00, 0x09, -1, 0x03, 0x0002, 0x0246 },
- { 0x00, 0x0a, -1, 0x03, 0x0002, 0x0446 },
- { 0x00, 0x18, -1, 0x03, 0x0002, 0x0846 },
- { 0x00, 0x05, -1, 0x03, 0x0003, 0x0046 },
- { 0x00, 0x05, -1, 0x03, 0x0003, 0x0066 },
- { 0x00, 0x06, -1, 0x03, 0x0003, 0x0086 },
- { 0x00, 0x07, -1, 0x03, 0x0003, 0x00c6 },
- { 0x00, 0x08, -1, 0x03, 0x0003, 0x0146 },
- { 0x00, 0x09, -1, 0x03, 0x0003, 0x0246 },
- { 0x00, 0x0a, -1, 0x03, 0x0003, 0x0446 },
- { 0x00, 0x18, -1, 0x03, 0x0003, 0x0846 },
- { 0x00, 0x05, -1, 0x03, 0x0004, 0x0046 },
- { 0x00, 0x05, -1, 0x03, 0x0004, 0x0066 },
- { 0x00, 0x06, -1, 0x03, 0x0004, 0x0086 },
- { 0x00, 0x07, -1, 0x03, 0x0004, 0x00c6 },
- { 0x00, 0x08, -1, 0x03, 0x0004, 0x0146 },
- { 0x00, 0x09, -1, 0x03, 0x0004, 0x0246 },
- { 0x00, 0x0a, -1, 0x03, 0x0004, 0x0446 },
- { 0x00, 0x18, -1, 0x03, 0x0004, 0x0846 },
- { 0x00, 0x05, -1, 0x03, 0x0005, 0x0046 },
- { 0x00, 0x05, -1, 0x03, 0x0005, 0x0066 },
- { 0x00, 0x06, -1, 0x03, 0x0005, 0x0086 },
- { 0x00, 0x07, -1, 0x03, 0x0005, 0x00c6 },
- { 0x00, 0x08, -1, 0x03, 0x0005, 0x0146 },
- { 0x00, 0x09, -1, 0x03, 0x0005, 0x0246 },
- { 0x00, 0x0a, -1, 0x03, 0x0005, 0x0446 },
- { 0x00, 0x18, -1, 0x03, 0x0005, 0x0846 },
- { 0x01, 0x05, -1, 0x03, 0x0006, 0x0046 },
- { 0x01, 0x05, -1, 0x03, 0x0006, 0x0066 },
- { 0x01, 0x06, -1, 0x03, 0x0006, 0x0086 },
- { 0x01, 0x07, -1, 0x03, 0x0006, 0x00c6 },
- { 0x01, 0x08, -1, 0x03, 0x0006, 0x0146 },
- { 0x01, 0x09, -1, 0x03, 0x0006, 0x0246 },
- { 0x01, 0x0a, -1, 0x03, 0x0006, 0x0446 },
- { 0x01, 0x18, -1, 0x03, 0x0006, 0x0846 },
- { 0x01, 0x05, -1, 0x03, 0x0008, 0x0046 },
- { 0x01, 0x05, -1, 0x03, 0x0008, 0x0066 },
- { 0x01, 0x06, -1, 0x03, 0x0008, 0x0086 },
- { 0x01, 0x07, -1, 0x03, 0x0008, 0x00c6 },
- { 0x01, 0x08, -1, 0x03, 0x0008, 0x0146 },
- { 0x01, 0x09, -1, 0x03, 0x0008, 0x0246 },
- { 0x01, 0x0a, -1, 0x03, 0x0008, 0x0446 },
- { 0x01, 0x18, -1, 0x03, 0x0008, 0x0846 },
- { 0x06, 0x00, -1, 0x00, 0x0082, 0x0002 },
- { 0x06, 0x00, -1, 0x01, 0x0082, 0x0003 },
- { 0x06, 0x00, -1, 0x02, 0x0082, 0x0004 },
- { 0x06, 0x00, -1, 0x03, 0x0082, 0x0005 },
- { 0x06, 0x00, -1, 0x03, 0x0082, 0x0006 },
- { 0x06, 0x00, -1, 0x03, 0x0082, 0x0007 },
- { 0x06, 0x00, -1, 0x03, 0x0082, 0x0008 },
- { 0x06, 0x00, -1, 0x03, 0x0082, 0x0009 },
- { 0x07, 0x00, -1, 0x00, 0x00c2, 0x0002 },
- { 0x07, 0x00, -1, 0x01, 0x00c2, 0x0003 },
- { 0x07, 0x00, -1, 0x02, 0x00c2, 0x0004 },
- { 0x07, 0x00, -1, 0x03, 0x00c2, 0x0005 },
- { 0x07, 0x00, -1, 0x03, 0x00c2, 0x0006 },
- { 0x07, 0x00, -1, 0x03, 0x00c2, 0x0007 },
- { 0x07, 0x00, -1, 0x03, 0x00c2, 0x0008 },
- { 0x07, 0x00, -1, 0x03, 0x00c2, 0x0009 },
- { 0x08, 0x00, -1, 0x00, 0x0142, 0x0002 },
- { 0x08, 0x00, -1, 0x01, 0x0142, 0x0003 },
- { 0x08, 0x00, -1, 0x02, 0x0142, 0x0004 },
- { 0x08, 0x00, -1, 0x03, 0x0142, 0x0005 },
- { 0x08, 0x00, -1, 0x03, 0x0142, 0x0006 },
- { 0x08, 0x00, -1, 0x03, 0x0142, 0x0007 },
- { 0x08, 0x00, -1, 0x03, 0x0142, 0x0008 },
- { 0x08, 0x00, -1, 0x03, 0x0142, 0x0009 },
- { 0x09, 0x00, -1, 0x00, 0x0242, 0x0002 },
- { 0x09, 0x00, -1, 0x01, 0x0242, 0x0003 },
- { 0x09, 0x00, -1, 0x02, 0x0242, 0x0004 },
- { 0x09, 0x00, -1, 0x03, 0x0242, 0x0005 },
- { 0x09, 0x00, -1, 0x03, 0x0242, 0x0006 },
- { 0x09, 0x00, -1, 0x03, 0x0242, 0x0007 },
- { 0x09, 0x00, -1, 0x03, 0x0242, 0x0008 },
- { 0x09, 0x00, -1, 0x03, 0x0242, 0x0009 },
- { 0x0a, 0x00, -1, 0x00, 0x0442, 0x0002 },
- { 0x0a, 0x00, -1, 0x01, 0x0442, 0x0003 },
- { 0x0a, 0x00, -1, 0x02, 0x0442, 0x0004 },
- { 0x0a, 0x00, -1, 0x03, 0x0442, 0x0005 },
- { 0x0a, 0x00, -1, 0x03, 0x0442, 0x0006 },
- { 0x0a, 0x00, -1, 0x03, 0x0442, 0x0007 },
- { 0x0a, 0x00, -1, 0x03, 0x0442, 0x0008 },
- { 0x0a, 0x00, -1, 0x03, 0x0442, 0x0009 },
- { 0x0c, 0x00, -1, 0x00, 0x0842, 0x0002 },
- { 0x0c, 0x00, -1, 0x01, 0x0842, 0x0003 },
- { 0x0c, 0x00, -1, 0x02, 0x0842, 0x0004 },
- { 0x0c, 0x00, -1, 0x03, 0x0842, 0x0005 },
- { 0x0c, 0x00, -1, 0x03, 0x0842, 0x0006 },
- { 0x0c, 0x00, -1, 0x03, 0x0842, 0x0007 },
- { 0x0c, 0x00, -1, 0x03, 0x0842, 0x0008 },
- { 0x0c, 0x00, -1, 0x03, 0x0842, 0x0009 },
- { 0x0e, 0x00, -1, 0x00, 0x1842, 0x0002 },
- { 0x0e, 0x00, -1, 0x01, 0x1842, 0x0003 },
- { 0x0e, 0x00, -1, 0x02, 0x1842, 0x0004 },
- { 0x0e, 0x00, -1, 0x03, 0x1842, 0x0005 },
- { 0x0e, 0x00, -1, 0x03, 0x1842, 0x0006 },
- { 0x0e, 0x00, -1, 0x03, 0x1842, 0x0007 },
- { 0x0e, 0x00, -1, 0x03, 0x1842, 0x0008 },
- { 0x0e, 0x00, -1, 0x03, 0x1842, 0x0009 },
- { 0x18, 0x00, -1, 0x00, 0x5842, 0x0002 },
- { 0x18, 0x00, -1, 0x01, 0x5842, 0x0003 },
- { 0x18, 0x00, -1, 0x02, 0x5842, 0x0004 },
- { 0x18, 0x00, -1, 0x03, 0x5842, 0x0005 },
- { 0x18, 0x00, -1, 0x03, 0x5842, 0x0006 },
- { 0x18, 0x00, -1, 0x03, 0x5842, 0x0007 },
- { 0x18, 0x00, -1, 0x03, 0x5842, 0x0008 },
- { 0x18, 0x00, -1, 0x03, 0x5842, 0x0009 },
- { 0x02, 0x05, -1, 0x03, 0x000a, 0x0046 },
- { 0x02, 0x05, -1, 0x03, 0x000a, 0x0066 },
- { 0x02, 0x06, -1, 0x03, 0x000a, 0x0086 },
- { 0x02, 0x07, -1, 0x03, 0x000a, 0x00c6 },
- { 0x02, 0x08, -1, 0x03, 0x000a, 0x0146 },
- { 0x02, 0x09, -1, 0x03, 0x000a, 0x0246 },
- { 0x02, 0x0a, -1, 0x03, 0x000a, 0x0446 },
- { 0x02, 0x18, -1, 0x03, 0x000a, 0x0846 },
- { 0x02, 0x05, -1, 0x03, 0x000e, 0x0046 },
- { 0x02, 0x05, -1, 0x03, 0x000e, 0x0066 },
- { 0x02, 0x06, -1, 0x03, 0x000e, 0x0086 },
- { 0x02, 0x07, -1, 0x03, 0x000e, 0x00c6 },
- { 0x02, 0x08, -1, 0x03, 0x000e, 0x0146 },
- { 0x02, 0x09, -1, 0x03, 0x000e, 0x0246 },
- { 0x02, 0x0a, -1, 0x03, 0x000e, 0x0446 },
- { 0x02, 0x18, -1, 0x03, 0x000e, 0x0846 },
- { 0x03, 0x05, -1, 0x03, 0x0012, 0x0046 },
- { 0x03, 0x05, -1, 0x03, 0x0012, 0x0066 },
- { 0x03, 0x06, -1, 0x03, 0x0012, 0x0086 },
- { 0x03, 0x07, -1, 0x03, 0x0012, 0x00c6 },
- { 0x03, 0x08, -1, 0x03, 0x0012, 0x0146 },
- { 0x03, 0x09, -1, 0x03, 0x0012, 0x0246 },
- { 0x03, 0x0a, -1, 0x03, 0x0012, 0x0446 },
- { 0x03, 0x18, -1, 0x03, 0x0012, 0x0846 },
- { 0x03, 0x05, -1, 0x03, 0x001a, 0x0046 },
- { 0x03, 0x05, -1, 0x03, 0x001a, 0x0066 },
- { 0x03, 0x06, -1, 0x03, 0x001a, 0x0086 },
- { 0x03, 0x07, -1, 0x03, 0x001a, 0x00c6 },
- { 0x03, 0x08, -1, 0x03, 0x001a, 0x0146 },
- { 0x03, 0x09, -1, 0x03, 0x001a, 0x0246 },
- { 0x03, 0x0a, -1, 0x03, 0x001a, 0x0446 },
- { 0x03, 0x18, -1, 0x03, 0x001a, 0x0846 },
- { 0x04, 0x05, -1, 0x03, 0x0022, 0x0046 },
- { 0x04, 0x05, -1, 0x03, 0x0022, 0x0066 },
- { 0x04, 0x06, -1, 0x03, 0x0022, 0x0086 },
- { 0x04, 0x07, -1, 0x03, 0x0022, 0x00c6 },
- { 0x04, 0x08, -1, 0x03, 0x0022, 0x0146 },
- { 0x04, 0x09, -1, 0x03, 0x0022, 0x0246 },
- { 0x04, 0x0a, -1, 0x03, 0x0022, 0x0446 },
- { 0x04, 0x18, -1, 0x03, 0x0022, 0x0846 },
- { 0x04, 0x05, -1, 0x03, 0x0032, 0x0046 },
- { 0x04, 0x05, -1, 0x03, 0x0032, 0x0066 },
- { 0x04, 0x06, -1, 0x03, 0x0032, 0x0086 },
- { 0x04, 0x07, -1, 0x03, 0x0032, 0x00c6 },
- { 0x04, 0x08, -1, 0x03, 0x0032, 0x0146 },
- { 0x04, 0x09, -1, 0x03, 0x0032, 0x0246 },
- { 0x04, 0x0a, -1, 0x03, 0x0032, 0x0446 },
- { 0x04, 0x18, -1, 0x03, 0x0032, 0x0846 },
- { 0x05, 0x05, -1, 0x03, 0x0042, 0x0046 },
- { 0x05, 0x05, -1, 0x03, 0x0042, 0x0066 },
- { 0x05, 0x06, -1, 0x03, 0x0042, 0x0086 },
- { 0x05, 0x07, -1, 0x03, 0x0042, 0x00c6 },
- { 0x05, 0x08, -1, 0x03, 0x0042, 0x0146 },
- { 0x05, 0x09, -1, 0x03, 0x0042, 0x0246 },
- { 0x05, 0x0a, -1, 0x03, 0x0042, 0x0446 },
- { 0x05, 0x18, -1, 0x03, 0x0042, 0x0846 },
- { 0x05, 0x05, -1, 0x03, 0x0062, 0x0046 },
- { 0x05, 0x05, -1, 0x03, 0x0062, 0x0066 },
- { 0x05, 0x06, -1, 0x03, 0x0062, 0x0086 },
- { 0x05, 0x07, -1, 0x03, 0x0062, 0x00c6 },
- { 0x05, 0x08, -1, 0x03, 0x0062, 0x0146 },
- { 0x05, 0x09, -1, 0x03, 0x0062, 0x0246 },
- { 0x05, 0x0a, -1, 0x03, 0x0062, 0x0446 },
- { 0x05, 0x18, -1, 0x03, 0x0062, 0x0846 },
- { 0x06, 0x01, -1, 0x03, 0x0082, 0x000a },
- { 0x06, 0x01, -1, 0x03, 0x0082, 0x000c },
- { 0x06, 0x02, -1, 0x03, 0x0082, 0x000e },
- { 0x06, 0x02, -1, 0x03, 0x0082, 0x0012 },
- { 0x06, 0x03, -1, 0x03, 0x0082, 0x0016 },
- { 0x06, 0x03, -1, 0x03, 0x0082, 0x001e },
- { 0x06, 0x04, -1, 0x03, 0x0082, 0x0026 },
- { 0x06, 0x04, -1, 0x03, 0x0082, 0x0036 },
- { 0x07, 0x01, -1, 0x03, 0x00c2, 0x000a },
- { 0x07, 0x01, -1, 0x03, 0x00c2, 0x000c },
- { 0x07, 0x02, -1, 0x03, 0x00c2, 0x000e },
- { 0x07, 0x02, -1, 0x03, 0x00c2, 0x0012 },
- { 0x07, 0x03, -1, 0x03, 0x00c2, 0x0016 },
- { 0x07, 0x03, -1, 0x03, 0x00c2, 0x001e },
- { 0x07, 0x04, -1, 0x03, 0x00c2, 0x0026 },
- { 0x07, 0x04, -1, 0x03, 0x00c2, 0x0036 },
- { 0x08, 0x01, -1, 0x03, 0x0142, 0x000a },
- { 0x08, 0x01, -1, 0x03, 0x0142, 0x000c },
- { 0x08, 0x02, -1, 0x03, 0x0142, 0x000e },
- { 0x08, 0x02, -1, 0x03, 0x0142, 0x0012 },
- { 0x08, 0x03, -1, 0x03, 0x0142, 0x0016 },
- { 0x08, 0x03, -1, 0x03, 0x0142, 0x001e },
- { 0x08, 0x04, -1, 0x03, 0x0142, 0x0026 },
- { 0x08, 0x04, -1, 0x03, 0x0142, 0x0036 },
- { 0x09, 0x01, -1, 0x03, 0x0242, 0x000a },
- { 0x09, 0x01, -1, 0x03, 0x0242, 0x000c },
- { 0x09, 0x02, -1, 0x03, 0x0242, 0x000e },
- { 0x09, 0x02, -1, 0x03, 0x0242, 0x0012 },
- { 0x09, 0x03, -1, 0x03, 0x0242, 0x0016 },
- { 0x09, 0x03, -1, 0x03, 0x0242, 0x001e },
- { 0x09, 0x04, -1, 0x03, 0x0242, 0x0026 },
- { 0x09, 0x04, -1, 0x03, 0x0242, 0x0036 },
- { 0x0a, 0x01, -1, 0x03, 0x0442, 0x000a },
- { 0x0a, 0x01, -1, 0x03, 0x0442, 0x000c },
- { 0x0a, 0x02, -1, 0x03, 0x0442, 0x000e },
- { 0x0a, 0x02, -1, 0x03, 0x0442, 0x0012 },
- { 0x0a, 0x03, -1, 0x03, 0x0442, 0x0016 },
- { 0x0a, 0x03, -1, 0x03, 0x0442, 0x001e },
- { 0x0a, 0x04, -1, 0x03, 0x0442, 0x0026 },
- { 0x0a, 0x04, -1, 0x03, 0x0442, 0x0036 },
- { 0x0c, 0x01, -1, 0x03, 0x0842, 0x000a },
- { 0x0c, 0x01, -1, 0x03, 0x0842, 0x000c },
- { 0x0c, 0x02, -1, 0x03, 0x0842, 0x000e },
- { 0x0c, 0x02, -1, 0x03, 0x0842, 0x0012 },
- { 0x0c, 0x03, -1, 0x03, 0x0842, 0x0016 },
- { 0x0c, 0x03, -1, 0x03, 0x0842, 0x001e },
- { 0x0c, 0x04, -1, 0x03, 0x0842, 0x0026 },
- { 0x0c, 0x04, -1, 0x03, 0x0842, 0x0036 },
- { 0x0e, 0x01, -1, 0x03, 0x1842, 0x000a },
- { 0x0e, 0x01, -1, 0x03, 0x1842, 0x000c },
- { 0x0e, 0x02, -1, 0x03, 0x1842, 0x000e },
- { 0x0e, 0x02, -1, 0x03, 0x1842, 0x0012 },
- { 0x0e, 0x03, -1, 0x03, 0x1842, 0x0016 },
- { 0x0e, 0x03, -1, 0x03, 0x1842, 0x001e },
- { 0x0e, 0x04, -1, 0x03, 0x1842, 0x0026 },
- { 0x0e, 0x04, -1, 0x03, 0x1842, 0x0036 },
- { 0x18, 0x01, -1, 0x03, 0x5842, 0x000a },
- { 0x18, 0x01, -1, 0x03, 0x5842, 0x000c },
- { 0x18, 0x02, -1, 0x03, 0x5842, 0x000e },
- { 0x18, 0x02, -1, 0x03, 0x5842, 0x0012 },
- { 0x18, 0x03, -1, 0x03, 0x5842, 0x0016 },
- { 0x18, 0x03, -1, 0x03, 0x5842, 0x001e },
- { 0x18, 0x04, -1, 0x03, 0x5842, 0x0026 },
- { 0x18, 0x04, -1, 0x03, 0x5842, 0x0036 },
- { 0x06, 0x05, -1, 0x03, 0x0082, 0x0046 },
- { 0x06, 0x05, -1, 0x03, 0x0082, 0x0066 },
- { 0x06, 0x06, -1, 0x03, 0x0082, 0x0086 },
- { 0x06, 0x07, -1, 0x03, 0x0082, 0x00c6 },
- { 0x06, 0x08, -1, 0x03, 0x0082, 0x0146 },
- { 0x06, 0x09, -1, 0x03, 0x0082, 0x0246 },
- { 0x06, 0x0a, -1, 0x03, 0x0082, 0x0446 },
- { 0x06, 0x18, -1, 0x03, 0x0082, 0x0846 },
- { 0x07, 0x05, -1, 0x03, 0x00c2, 0x0046 },
- { 0x07, 0x05, -1, 0x03, 0x00c2, 0x0066 },
- { 0x07, 0x06, -1, 0x03, 0x00c2, 0x0086 },
- { 0x07, 0x07, -1, 0x03, 0x00c2, 0x00c6 },
- { 0x07, 0x08, -1, 0x03, 0x00c2, 0x0146 },
- { 0x07, 0x09, -1, 0x03, 0x00c2, 0x0246 },
- { 0x07, 0x0a, -1, 0x03, 0x00c2, 0x0446 },
- { 0x07, 0x18, -1, 0x03, 0x00c2, 0x0846 },
- { 0x08, 0x05, -1, 0x03, 0x0142, 0x0046 },
- { 0x08, 0x05, -1, 0x03, 0x0142, 0x0066 },
- { 0x08, 0x06, -1, 0x03, 0x0142, 0x0086 },
- { 0x08, 0x07, -1, 0x03, 0x0142, 0x00c6 },
- { 0x08, 0x08, -1, 0x03, 0x0142, 0x0146 },
- { 0x08, 0x09, -1, 0x03, 0x0142, 0x0246 },
- { 0x08, 0x0a, -1, 0x03, 0x0142, 0x0446 },
- { 0x08, 0x18, -1, 0x03, 0x0142, 0x0846 },
- { 0x09, 0x05, -1, 0x03, 0x0242, 0x0046 },
- { 0x09, 0x05, -1, 0x03, 0x0242, 0x0066 },
- { 0x09, 0x06, -1, 0x03, 0x0242, 0x0086 },
- { 0x09, 0x07, -1, 0x03, 0x0242, 0x00c6 },
- { 0x09, 0x08, -1, 0x03, 0x0242, 0x0146 },
- { 0x09, 0x09, -1, 0x03, 0x0242, 0x0246 },
- { 0x09, 0x0a, -1, 0x03, 0x0242, 0x0446 },
- { 0x09, 0x18, -1, 0x03, 0x0242, 0x0846 },
- { 0x0a, 0x05, -1, 0x03, 0x0442, 0x0046 },
- { 0x0a, 0x05, -1, 0x03, 0x0442, 0x0066 },
- { 0x0a, 0x06, -1, 0x03, 0x0442, 0x0086 },
- { 0x0a, 0x07, -1, 0x03, 0x0442, 0x00c6 },
- { 0x0a, 0x08, -1, 0x03, 0x0442, 0x0146 },
- { 0x0a, 0x09, -1, 0x03, 0x0442, 0x0246 },
- { 0x0a, 0x0a, -1, 0x03, 0x0442, 0x0446 },
- { 0x0a, 0x18, -1, 0x03, 0x0442, 0x0846 },
- { 0x0c, 0x05, -1, 0x03, 0x0842, 0x0046 },
- { 0x0c, 0x05, -1, 0x03, 0x0842, 0x0066 },
- { 0x0c, 0x06, -1, 0x03, 0x0842, 0x0086 },
- { 0x0c, 0x07, -1, 0x03, 0x0842, 0x00c6 },
- { 0x0c, 0x08, -1, 0x03, 0x0842, 0x0146 },
- { 0x0c, 0x09, -1, 0x03, 0x0842, 0x0246 },
- { 0x0c, 0x0a, -1, 0x03, 0x0842, 0x0446 },
- { 0x0c, 0x18, -1, 0x03, 0x0842, 0x0846 },
- { 0x0e, 0x05, -1, 0x03, 0x1842, 0x0046 },
- { 0x0e, 0x05, -1, 0x03, 0x1842, 0x0066 },
- { 0x0e, 0x06, -1, 0x03, 0x1842, 0x0086 },
- { 0x0e, 0x07, -1, 0x03, 0x1842, 0x00c6 },
- { 0x0e, 0x08, -1, 0x03, 0x1842, 0x0146 },
- { 0x0e, 0x09, -1, 0x03, 0x1842, 0x0246 },
- { 0x0e, 0x0a, -1, 0x03, 0x1842, 0x0446 },
- { 0x0e, 0x18, -1, 0x03, 0x1842, 0x0846 },
- { 0x18, 0x05, -1, 0x03, 0x5842, 0x0046 },
- { 0x18, 0x05, -1, 0x03, 0x5842, 0x0066 },
- { 0x18, 0x06, -1, 0x03, 0x5842, 0x0086 },
- { 0x18, 0x07, -1, 0x03, 0x5842, 0x00c6 },
- { 0x18, 0x08, -1, 0x03, 0x5842, 0x0146 },
- { 0x18, 0x09, -1, 0x03, 0x5842, 0x0246 },
- { 0x18, 0x0a, -1, 0x03, 0x5842, 0x0446 },
- { 0x18, 0x18, -1, 0x03, 0x5842, 0x0846 },
-};
-
-#endif /* BROTLI_DEC_PREFIX_H_ */
diff --git a/BaseTools/Source/C/BrotliCompress/dec/state.h b/BaseTools/Source/C/BrotliCompress/dec/state.h
deleted file mode 100644
index 814f95eee05a..000000000000
--- a/BaseTools/Source/C/BrotliCompress/dec/state.h
+++ /dev/null
@@ -1,258 +0,0 @@
-/* Copyright 2015 Google Inc. All Rights Reserved.
-
- Distributed under MIT license.
- See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
-*/
-
-/* Brotli state for partial streaming decoding. */
-
-#ifndef BROTLI_DEC_STATE_H_
-#define BROTLI_DEC_STATE_H_
-
-#include "../common/constants.h"
-#include "../common/dictionary.h"
-#include "../common/platform.h"
-#include "../common/transform.h"
-#include <brotli/types.h>
-#include "./bit_reader.h"
-#include "./huffman.h"
-
-#if defined(__cplusplus) || defined(c_plusplus)
-extern "C" {
-#endif
-
-typedef enum {
- BROTLI_STATE_UNINITED,
- BROTLI_STATE_LARGE_WINDOW_BITS,
- BROTLI_STATE_INITIALIZE,
- BROTLI_STATE_METABLOCK_BEGIN,
- BROTLI_STATE_METABLOCK_HEADER,
- BROTLI_STATE_METABLOCK_HEADER_2,
- BROTLI_STATE_CONTEXT_MODES,
- BROTLI_STATE_COMMAND_BEGIN,
- BROTLI_STATE_COMMAND_INNER,
- BROTLI_STATE_COMMAND_POST_DECODE_LITERALS,
- BROTLI_STATE_COMMAND_POST_WRAP_COPY,
- BROTLI_STATE_UNCOMPRESSED,
- BROTLI_STATE_METADATA,
- BROTLI_STATE_COMMAND_INNER_WRITE,
- BROTLI_STATE_METABLOCK_DONE,
- BROTLI_STATE_COMMAND_POST_WRITE_1,
- BROTLI_STATE_COMMAND_POST_WRITE_2,
- BROTLI_STATE_HUFFMAN_CODE_0,
- BROTLI_STATE_HUFFMAN_CODE_1,
- BROTLI_STATE_HUFFMAN_CODE_2,
- BROTLI_STATE_HUFFMAN_CODE_3,
- BROTLI_STATE_CONTEXT_MAP_1,
- BROTLI_STATE_CONTEXT_MAP_2,
- BROTLI_STATE_TREE_GROUP,
- BROTLI_STATE_DONE
-} BrotliRunningState;
-
-typedef enum {
- BROTLI_STATE_METABLOCK_HEADER_NONE,
- BROTLI_STATE_METABLOCK_HEADER_EMPTY,
- BROTLI_STATE_METABLOCK_HEADER_NIBBLES,
- BROTLI_STATE_METABLOCK_HEADER_SIZE,
- BROTLI_STATE_METABLOCK_HEADER_UNCOMPRESSED,
- BROTLI_STATE_METABLOCK_HEADER_RESERVED,
- BROTLI_STATE_METABLOCK_HEADER_BYTES,
- BROTLI_STATE_METABLOCK_HEADER_METADATA
-} BrotliRunningMetablockHeaderState;
-
-typedef enum {
- BROTLI_STATE_UNCOMPRESSED_NONE,
- BROTLI_STATE_UNCOMPRESSED_WRITE
-} BrotliRunningUncompressedState;
-
-typedef enum {
- BROTLI_STATE_TREE_GROUP_NONE,
- BROTLI_STATE_TREE_GROUP_LOOP
-} BrotliRunningTreeGroupState;
-
-typedef enum {
- BROTLI_STATE_CONTEXT_MAP_NONE,
- BROTLI_STATE_CONTEXT_MAP_READ_PREFIX,
- BROTLI_STATE_CONTEXT_MAP_HUFFMAN,
- BROTLI_STATE_CONTEXT_MAP_DECODE,
- BROTLI_STATE_CONTEXT_MAP_TRANSFORM
-} BrotliRunningContextMapState;
-
-typedef enum {
- BROTLI_STATE_HUFFMAN_NONE,
- BROTLI_STATE_HUFFMAN_SIMPLE_SIZE,
- BROTLI_STATE_HUFFMAN_SIMPLE_READ,
- BROTLI_STATE_HUFFMAN_SIMPLE_BUILD,
- BROTLI_STATE_HUFFMAN_COMPLEX,
- BROTLI_STATE_HUFFMAN_LENGTH_SYMBOLS
-} BrotliRunningHuffmanState;
-
-typedef enum {
- BROTLI_STATE_DECODE_UINT8_NONE,
- BROTLI_STATE_DECODE_UINT8_SHORT,
- BROTLI_STATE_DECODE_UINT8_LONG
-} BrotliRunningDecodeUint8State;
-
-typedef enum {
- BROTLI_STATE_READ_BLOCK_LENGTH_NONE,
- BROTLI_STATE_READ_BLOCK_LENGTH_SUFFIX
-} BrotliRunningReadBlockLengthState;
-
-struct BrotliDecoderStateStruct {
- BrotliRunningState state;
-
- /* This counter is reused for several disjoint loops. */
- int loop_counter;
-
- BrotliBitReader br;
-
- brotli_alloc_func alloc_func;
- brotli_free_func free_func;
- void* memory_manager_opaque;
-
- /* Temporary storage for remaining input. */
- union {
- uint64_t u64;
- uint8_t u8[8];
- } buffer;
- uint32_t buffer_length;
-
- int pos;
- int max_backward_distance;
- int max_distance;
- int ringbuffer_size;
- int ringbuffer_mask;
- int dist_rb_idx;
- int dist_rb[4];
- int error_code;
- uint32_t sub_loop_counter;
- uint8_t* ringbuffer;
- uint8_t* ringbuffer_end;
- HuffmanCode* htree_command;
- const uint8_t* context_lookup;
- uint8_t* context_map_slice;
- uint8_t* dist_context_map_slice;
-
- /* This ring buffer holds a few past copy distances that will be used by
- some special distance codes. */
- HuffmanTreeGroup literal_hgroup;
- HuffmanTreeGroup insert_copy_hgroup;
- HuffmanTreeGroup distance_hgroup;
- HuffmanCode* block_type_trees;
- HuffmanCode* block_len_trees;
- /* This is true if the literal context map histogram type always matches the
- block type. It is then not needed to keep the context (faster decoding). */
- int trivial_literal_context;
- /* Distance context is actual after command is decoded and before distance is
- computed. After distance computation it is used as a temporary variable. */
- int distance_context;
- int meta_block_remaining_len;
- uint32_t block_length_index;
- uint32_t block_length[3];
- uint32_t num_block_types[3];
- uint32_t block_type_rb[6];
- uint32_t distance_postfix_bits;
- uint32_t num_direct_distance_codes;
- int distance_postfix_mask;
- uint32_t num_dist_htrees;
- uint8_t* dist_context_map;
- HuffmanCode* literal_htree;
- uint8_t dist_htree_index;
- uint32_t repeat_code_len;
- uint32_t prev_code_len;
-
- int copy_length;
- int distance_code;
-
- /* For partial write operations. */
- size_t rb_roundtrips; /* how many times we went around the ring-buffer */
- size_t partial_pos_out; /* how much output to the user in total */
-
- /* For ReadHuffmanCode. */
- uint32_t symbol;
- uint32_t repeat;
- uint32_t space;
-
- HuffmanCode table[32];
- /* List of heads of symbol chains. */
- uint16_t* symbol_lists;
- /* Storage from symbol_lists. */
- uint16_t symbols_lists_array[BROTLI_HUFFMAN_MAX_CODE_LENGTH + 1 +
- BROTLI_NUM_COMMAND_SYMBOLS];
- /* Tails of symbol chains. */
- int next_symbol[32];
- uint8_t code_length_code_lengths[BROTLI_CODE_LENGTH_CODES];
- /* Population counts for the code lengths. */
- uint16_t code_length_histo[16];
-
- /* For HuffmanTreeGroupDecode. */
- int htree_index;
- HuffmanCode* next;
-
- /* For DecodeContextMap. */
- uint32_t context_index;
- uint32_t max_run_length_prefix;
- uint32_t code;
- HuffmanCode context_map_table[BROTLI_HUFFMAN_MAX_SIZE_272];
-
- /* For InverseMoveToFrontTransform. */
- uint32_t mtf_upper_bound;
- uint32_t mtf[64 + 1];
-
- /* Less used attributes are at the end of this struct. */
-
- /* States inside function calls. */
- BrotliRunningMetablockHeaderState substate_metablock_header;
- BrotliRunningTreeGroupState substate_tree_group;
- BrotliRunningContextMapState substate_context_map;
- BrotliRunningUncompressedState substate_uncompressed;
- BrotliRunningHuffmanState substate_huffman;
- BrotliRunningDecodeUint8State substate_decode_uint8;
- BrotliRunningReadBlockLengthState substate_read_block_length;
-
- unsigned int is_last_metablock : 1;
- unsigned int is_uncompressed : 1;
- unsigned int is_metadata : 1;
- unsigned int should_wrap_ringbuffer : 1;
- unsigned int canny_ringbuffer_allocation : 1;
- unsigned int large_window : 1;
- unsigned int size_nibbles : 8;
- uint32_t window_bits;
-
- int new_ringbuffer_size;
-
- uint32_t num_literal_htrees;
- uint8_t* context_map;
- uint8_t* context_modes;
-
- const BrotliDictionary* dictionary;
- const BrotliTransforms* transforms;
-
- uint32_t trivial_literal_contexts[8]; /* 256 bits */
-};
-
-typedef struct BrotliDecoderStateStruct BrotliDecoderStateInternal;
-#define BrotliDecoderState BrotliDecoderStateInternal
-
-BROTLI_INTERNAL BROTLI_BOOL BrotliDecoderStateInit(BrotliDecoderState* s,
- brotli_alloc_func alloc_func, brotli_free_func free_func, void* opaque);
-BROTLI_INTERNAL void BrotliDecoderStateCleanup(BrotliDecoderState* s);
-BROTLI_INTERNAL void BrotliDecoderStateMetablockBegin(BrotliDecoderState* s);
-BROTLI_INTERNAL void BrotliDecoderStateCleanupAfterMetablock(
- BrotliDecoderState* s);
-BROTLI_INTERNAL BROTLI_BOOL BrotliDecoderHuffmanTreeGroupInit(
- BrotliDecoderState* s, HuffmanTreeGroup* group, uint32_t alphabet_size,
- uint32_t max_symbol, uint32_t ntrees);
-
-#define BROTLI_DECODER_ALLOC(S, L) S->alloc_func(S->memory_manager_opaque, L)
-
-#define BROTLI_DECODER_FREE(S, X) { \
- S->free_func(S->memory_manager_opaque, X); \
- X = NULL; \
-}
-
-#if defined(__cplusplus) || defined(c_plusplus)
-} /* extern "C" */
-#endif
-
-#endif /* BROTLI_DEC_STATE_H_ */
diff --git a/BaseTools/Source/C/BrotliCompress/docs/brotli-comparison-study-2015-09-22.pdf b/BaseTools/Source/C/BrotliCompress/docs/brotli-comparison-study-2015-09-22.pdf
deleted file mode 100644
index 040f179e2bce8f5f7a2f407b2d61ab86824bbe8e..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 215208
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%0A(Nmlrom%n++A{@ubAd
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
diff --git a/BaseTools/Source/C/BrotliCompress/enc/backward_references.h b/BaseTools/Source/C/BrotliCompress/enc/backward_references.h
deleted file mode 100644
index fcef6bd92953..000000000000
--- a/BaseTools/Source/C/BrotliCompress/enc/backward_references.h
+++ /dev/null
@@ -1,38 +0,0 @@
-/* Copyright 2013 Google Inc. All Rights Reserved.
-
- Distributed under MIT license.
- See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
-*/
-
-/* Function to find backward reference copies. */
-
-#ifndef BROTLI_ENC_BACKWARD_REFERENCES_H_
-#define BROTLI_ENC_BACKWARD_REFERENCES_H_
-
-#include "../common/constants.h"
-#include "../common/dictionary.h"
-#include "../common/platform.h"
-#include <brotli/types.h>
-#include "./command.h"
-#include "./hash.h"
-#include "./quality.h"
-
-#if defined(__cplusplus) || defined(c_plusplus)
-extern "C" {
-#endif
-
-/* "commands" points to the next output command to write to, "*num_commands" is
- initially the total amount of commands output by previous
- CreateBackwardReferences calls, and must be incremented by the amount written
- by this call. */
-BROTLI_INTERNAL void BrotliCreateBackwardReferences(
- size_t num_bytes, size_t position, const uint8_t* ringbuffer,
- size_t ringbuffer_mask, const BrotliEncoderParams* params,
- HasherHandle hasher, int* dist_cache, size_t* last_insert_len,
- Command* commands, size_t* num_commands, size_t* num_literals);
-
-#if defined(__cplusplus) || defined(c_plusplus)
-} /* extern "C" */
-#endif
-
-#endif /* BROTLI_ENC_BACKWARD_REFERENCES_H_ */
diff --git a/BaseTools/Source/C/BrotliCompress/enc/backward_references_hq.h b/BaseTools/Source/C/BrotliCompress/enc/backward_references_hq.h
deleted file mode 100644
index 60b3b346b778..000000000000
--- a/BaseTools/Source/C/BrotliCompress/enc/backward_references_hq.h
+++ /dev/null
@@ -1,93 +0,0 @@
-/* Copyright 2013 Google Inc. All Rights Reserved.
-
- Distributed under MIT license.
- See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
-*/
-
-/* Function to find backward reference copies. */
-
-#ifndef BROTLI_ENC_BACKWARD_REFERENCES_HQ_H_
-#define BROTLI_ENC_BACKWARD_REFERENCES_HQ_H_
-
-#include "../common/constants.h"
-#include "../common/dictionary.h"
-#include "../common/platform.h"
-#include <brotli/types.h>
-#include "./command.h"
-#include "./hash.h"
-#include "./memory.h"
-#include "./quality.h"
-
-#if defined(__cplusplus) || defined(c_plusplus)
-extern "C" {
-#endif
-
-BROTLI_INTERNAL void BrotliCreateZopfliBackwardReferences(MemoryManager* m,
- size_t num_bytes, size_t position, const uint8_t* ringbuffer,
- size_t ringbuffer_mask, const BrotliEncoderParams* params,
- HasherHandle hasher, int* dist_cache, size_t* last_insert_len,
- Command* commands, size_t* num_commands, size_t* num_literals);
-
-BROTLI_INTERNAL void BrotliCreateHqZopfliBackwardReferences(MemoryManager* m,
- size_t num_bytes, size_t position, const uint8_t* ringbuffer,
- size_t ringbuffer_mask, const BrotliEncoderParams* params,
- HasherHandle hasher, int* dist_cache, size_t* last_insert_len,
- Command* commands, size_t* num_commands, size_t* num_literals);
-
-typedef struct ZopfliNode {
- /* Best length to get up to this byte (not including this byte itself)
- highest 7 bit is used to reconstruct the length code. */
- uint32_t length;
- /* Distance associated with the length. */
- uint32_t distance;
- /* Number of literal inserts before this copy; highest 5 bits contain
- distance short code + 1 (or zero if no short code). */
- uint32_t dcode_insert_length;
-
- /* This union holds information used by dynamic-programming. During forward
- pass |cost| it used to store the goal function. When node is processed its
- |cost| is invalidated in favor of |shortcut|. On path back-tracing pass
- |next| is assigned the offset to next node on the path. */
- union {
- /* Smallest cost to get to this byte from the beginning, as found so far. */
- float cost;
- /* Offset to the next node on the path. Equals to command_length() of the
- next node on the path. For last node equals to BROTLI_UINT32_MAX */
- uint32_t next;
- /* Node position that provides next distance for distance cache. */
- uint32_t shortcut;
- } u;
-} ZopfliNode;
-
-BROTLI_INTERNAL void BrotliInitZopfliNodes(ZopfliNode* array, size_t length);
-
-/* Computes the shortest path of commands from position to at most
- position + num_bytes.
-
- On return, path->size() is the number of commands found and path[i] is the
- length of the i-th command (copy length plus insert length).
- Note that the sum of the lengths of all commands can be less than num_bytes.
-
- On return, the nodes[0..num_bytes] array will have the following
- "ZopfliNode array invariant":
- For each i in [1..num_bytes], if nodes[i].cost < kInfinity, then
- (1) nodes[i].copy_length() >= 2
- (2) nodes[i].command_length() <= i and
- (3) nodes[i - nodes[i].command_length()].cost < kInfinity */
-BROTLI_INTERNAL size_t BrotliZopfliComputeShortestPath(MemoryManager* m,
- size_t num_bytes, size_t position, const uint8_t* ringbuffer,
- size_t ringbuffer_mask, const BrotliEncoderParams* params,
- const size_t max_backward_limit, const int* dist_cache, HasherHandle hasher,
- ZopfliNode* nodes);
-
-BROTLI_INTERNAL void BrotliZopfliCreateCommands(
- const size_t num_bytes, const size_t block_start,
- const size_t max_backward_limit, const ZopfliNode* nodes,
- int* dist_cache, size_t* last_insert_len, const BrotliEncoderParams* params,
- Command* commands, size_t* num_literals);
-
-#if defined(__cplusplus) || defined(c_plusplus)
-} /* extern "C" */
-#endif
-
-#endif /* BROTLI_ENC_BACKWARD_REFERENCES_HQ_H_ */
diff --git a/BaseTools/Source/C/BrotliCompress/enc/backward_references_inc.h b/BaseTools/Source/C/BrotliCompress/enc/backward_references_inc.h
deleted file mode 100644
index 39c6f823f8bd..000000000000
--- a/BaseTools/Source/C/BrotliCompress/enc/backward_references_inc.h
+++ /dev/null
@@ -1,153 +0,0 @@
-/* NOLINT(build/header_guard) */
-/* Copyright 2013 Google Inc. All Rights Reserved.
-
- Distributed under MIT license.
- See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
-*/
-
-/* template parameters: EXPORT_FN, FN */
-
-static BROTLI_NOINLINE void EXPORT_FN(CreateBackwardReferences)(
- size_t num_bytes, size_t position,
- const uint8_t* ringbuffer, size_t ringbuffer_mask,
- const BrotliEncoderParams* params, HasherHandle hasher, int* dist_cache,
- size_t* last_insert_len, Command* commands, size_t* num_commands,
- size_t* num_literals) {
- /* Set maximum distance, see section 9.1. of the spec. */
- const size_t max_backward_limit = BROTLI_MAX_BACKWARD_LIMIT(params->lgwin);
-
- const Command* const orig_commands = commands;
- size_t insert_length = *last_insert_len;
- const size_t pos_end = position + num_bytes;
- const size_t store_end = num_bytes >= FN(StoreLookahead)() ?
- position + num_bytes - FN(StoreLookahead)() + 1 : position;
-
- /* For speed up heuristics for random data. */
- const size_t random_heuristics_window_size =
- LiteralSpreeLengthForSparseSearch(params);
- size_t apply_random_heuristics = position + random_heuristics_window_size;
- const size_t gap = 0;
-
- /* Minimum score to accept a backward reference. */
- const score_t kMinScore = BROTLI_SCORE_BASE + 100;
-
- FN(PrepareDistanceCache)(hasher, dist_cache);
-
- while (position + FN(HashTypeLength)() < pos_end) {
- size_t max_length = pos_end - position;
- size_t max_distance = BROTLI_MIN(size_t, position, max_backward_limit);
- HasherSearchResult sr;
- sr.len = 0;
- sr.len_code_delta = 0;
- sr.distance = 0;
- sr.score = kMinScore;
- FN(FindLongestMatch)(hasher, ¶ms->dictionary,
- ringbuffer, ringbuffer_mask, dist_cache, position,
- max_length, max_distance, gap,
- params->dist.max_distance, &sr);
- if (sr.score > kMinScore) {
- /* Found a match. Let's look for something even better ahead. */
- int delayed_backward_references_in_row = 0;
- --max_length;
- for (;; --max_length) {
- const score_t cost_diff_lazy = 175;
- HasherSearchResult sr2;
- sr2.len = params->quality < MIN_QUALITY_FOR_EXTENSIVE_REFERENCE_SEARCH ?
- BROTLI_MIN(size_t, sr.len - 1, max_length) : 0;
- sr2.len_code_delta = 0;
- sr2.distance = 0;
- sr2.score = kMinScore;
- max_distance = BROTLI_MIN(size_t, position + 1, max_backward_limit);
- FN(FindLongestMatch)(hasher, ¶ms->dictionary,
- ringbuffer, ringbuffer_mask, dist_cache, position + 1, max_length,
- max_distance, gap, params->dist.max_distance, &sr2);
- if (sr2.score >= sr.score + cost_diff_lazy) {
- /* Ok, let's just write one byte for now and start a match from the
- next byte. */
- ++position;
- ++insert_length;
- sr = sr2;
- if (++delayed_backward_references_in_row < 4 &&
- position + FN(HashTypeLength)() < pos_end) {
- continue;
- }
- }
- break;
- }
- apply_random_heuristics =
- position + 2 * sr.len + random_heuristics_window_size;
- max_distance = BROTLI_MIN(size_t, position, max_backward_limit);
- {
- /* The first 16 codes are special short-codes,
- and the minimum offset is 1. */
- size_t distance_code =
- ComputeDistanceCode(sr.distance, max_distance + gap, dist_cache);
- if ((sr.distance <= (max_distance + gap)) && distance_code > 0) {
- dist_cache[3] = dist_cache[2];
- dist_cache[2] = dist_cache[1];
- dist_cache[1] = dist_cache[0];
- dist_cache[0] = (int)sr.distance;
- FN(PrepareDistanceCache)(hasher, dist_cache);
- }
- InitCommand(commands++, ¶ms->dist, insert_length,
- sr.len, sr.len_code_delta, distance_code);
- }
- *num_literals += insert_length;
- insert_length = 0;
- /* Put the hash keys into the table, if there are enough bytes left.
- Depending on the hasher implementation, it can push all positions
- in the given range or only a subset of them.
- Avoid hash poisoning with RLE data. */
- {
- size_t range_start = position + 2;
- size_t range_end = BROTLI_MIN(size_t, position + sr.len, store_end);
- if (sr.distance < (sr.len >> 2)) {
- range_start = BROTLI_MIN(size_t, range_end, BROTLI_MAX(size_t,
- range_start, position + sr.len - (sr.distance << 2)));
- }
- FN(StoreRange)(hasher, ringbuffer, ringbuffer_mask, range_start,
- range_end);
- }
- position += sr.len;
- } else {
- ++insert_length;
- ++position;
- /* If we have not seen matches for a long time, we can skip some
- match lookups. Unsuccessful match lookups are very very expensive
- and this kind of a heuristic speeds up compression quite
- a lot. */
- if (position > apply_random_heuristics) {
- /* Going through uncompressible data, jump. */
- if (position >
- apply_random_heuristics + 4 * random_heuristics_window_size) {
- /* It is quite a long time since we saw a copy, so we assume
- that this data is not compressible, and store hashes less
- often. Hashes of non compressible data are less likely to
- turn out to be useful in the future, too, so we store less of
- them to not to flood out the hash table of good compressible
- data. */
- const size_t kMargin =
- BROTLI_MAX(size_t, FN(StoreLookahead)() - 1, 4);
- size_t pos_jump =
- BROTLI_MIN(size_t, position + 16, pos_end - kMargin);
- for (; position < pos_jump; position += 4) {
- FN(Store)(hasher, ringbuffer, ringbuffer_mask, position);
- insert_length += 4;
- }
- } else {
- const size_t kMargin =
- BROTLI_MAX(size_t, FN(StoreLookahead)() - 1, 2);
- size_t pos_jump =
- BROTLI_MIN(size_t, position + 8, pos_end - kMargin);
- for (; position < pos_jump; position += 2) {
- FN(Store)(hasher, ringbuffer, ringbuffer_mask, position);
- insert_length += 2;
- }
- }
- }
- }
- }
- insert_length += pos_end - position;
- *last_insert_len = insert_length;
- *num_commands += (size_t)(commands - orig_commands);
-}
diff --git a/BaseTools/Source/C/BrotliCompress/enc/bit_cost.h b/BaseTools/Source/C/BrotliCompress/enc/bit_cost.h
deleted file mode 100644
index e7ab2eafe459..000000000000
--- a/BaseTools/Source/C/BrotliCompress/enc/bit_cost.h
+++ /dev/null
@@ -1,63 +0,0 @@
-/* Copyright 2013 Google Inc. All Rights Reserved.
-
- Distributed under MIT license.
- See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
-*/
-
-/* Functions to estimate the bit cost of Huffman trees. */
-
-#ifndef BROTLI_ENC_BIT_COST_H_
-#define BROTLI_ENC_BIT_COST_H_
-
-#include "../common/platform.h"
-#include <brotli/types.h>
-#include "./fast_log.h"
-#include "./histogram.h"
-
-#if defined(__cplusplus) || defined(c_plusplus)
-extern "C" {
-#endif
-
-static BROTLI_INLINE double ShannonEntropy(
- const uint32_t* population, size_t size, size_t* total) {
- size_t sum = 0;
- double retval = 0;
- const uint32_t* population_end = population + size;
- size_t p;
- if (size & 1) {
- goto odd_number_of_elements_left;
- }
- while (population < population_end) {
- p = *population++;
- sum += p;
- retval -= (double)p * FastLog2(p);
- odd_number_of_elements_left:
- p = *population++;
- sum += p;
- retval -= (double)p * FastLog2(p);
- }
- if (sum) retval += (double)sum * FastLog2(sum);
- *total = sum;
- return retval;
-}
-
-static BROTLI_INLINE double BitsEntropy(
- const uint32_t* population, size_t size) {
- size_t sum;
- double retval = ShannonEntropy(population, size, &sum);
- if (retval < sum) {
- /* At least one bit per literal is needed. */
- retval = (double)sum;
- }
- return retval;
-}
-
-BROTLI_INTERNAL double BrotliPopulationCostLiteral(const HistogramLiteral*);
-BROTLI_INTERNAL double BrotliPopulationCostCommand(const HistogramCommand*);
-BROTLI_INTERNAL double BrotliPopulationCostDistance(const HistogramDistance*);
-
-#if defined(__cplusplus) || defined(c_plusplus)
-} /* extern "C" */
-#endif
-
-#endif /* BROTLI_ENC_BIT_COST_H_ */
diff --git a/BaseTools/Source/C/BrotliCompress/enc/bit_cost_inc.h b/BaseTools/Source/C/BrotliCompress/enc/bit_cost_inc.h
deleted file mode 100644
index c96bddac0962..000000000000
--- a/BaseTools/Source/C/BrotliCompress/enc/bit_cost_inc.h
+++ /dev/null
@@ -1,127 +0,0 @@
-/* NOLINT(build/header_guard) */
-/* Copyright 2013 Google Inc. All Rights Reserved.
-
- Distributed under MIT license.
- See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
-*/
-
-/* template parameters: FN */
-
-#define HistogramType FN(Histogram)
-
-double FN(BrotliPopulationCost)(const HistogramType* histogram) {
- static const double kOneSymbolHistogramCost = 12;
- static const double kTwoSymbolHistogramCost = 20;
- static const double kThreeSymbolHistogramCost = 28;
- static const double kFourSymbolHistogramCost = 37;
- const size_t data_size = FN(HistogramDataSize)();
- int count = 0;
- size_t s[5];
- double bits = 0.0;
- size_t i;
- if (histogram->total_count_ == 0) {
- return kOneSymbolHistogramCost;
- }
- for (i = 0; i < data_size; ++i) {
- if (histogram->data_[i] > 0) {
- s[count] = i;
- ++count;
- if (count > 4) break;
- }
- }
- if (count == 1) {
- return kOneSymbolHistogramCost;
- }
- if (count == 2) {
- return (kTwoSymbolHistogramCost + (double)histogram->total_count_);
- }
- if (count == 3) {
- const uint32_t histo0 = histogram->data_[s[0]];
- const uint32_t histo1 = histogram->data_[s[1]];
- const uint32_t histo2 = histogram->data_[s[2]];
- const uint32_t histomax =
- BROTLI_MAX(uint32_t, histo0, BROTLI_MAX(uint32_t, histo1, histo2));
- return (kThreeSymbolHistogramCost +
- 2 * (histo0 + histo1 + histo2) - histomax);
- }
- if (count == 4) {
- uint32_t histo[4];
- uint32_t h23;
- uint32_t histomax;
- for (i = 0; i < 4; ++i) {
- histo[i] = histogram->data_[s[i]];
- }
- /* Sort */
- for (i = 0; i < 4; ++i) {
- size_t j;
- for (j = i + 1; j < 4; ++j) {
- if (histo[j] > histo[i]) {
- BROTLI_SWAP(uint32_t, histo, j, i);
- }
- }
- }
- h23 = histo[2] + histo[3];
- histomax = BROTLI_MAX(uint32_t, h23, histo[0]);
- return (kFourSymbolHistogramCost +
- 3 * h23 + 2 * (histo[0] + histo[1]) - histomax);
- }
-
- {
- /* In this loop we compute the entropy of the histogram and simultaneously
- build a simplified histogram of the code length codes where we use the
- zero repeat code 17, but we don't use the non-zero repeat code 16. */
- size_t max_depth = 1;
- uint32_t depth_histo[BROTLI_CODE_LENGTH_CODES] = { 0 };
- const double log2total = FastLog2(histogram->total_count_);
- for (i = 0; i < data_size;) {
- if (histogram->data_[i] > 0) {
- /* Compute -log2(P(symbol)) = -log2(count(symbol)/total_count) =
- = log2(total_count) - log2(count(symbol)) */
- double log2p = log2total - FastLog2(histogram->data_[i]);
- /* Approximate the bit depth by round(-log2(P(symbol))) */
- size_t depth = (size_t)(log2p + 0.5);
- bits += histogram->data_[i] * log2p;
- if (depth > 15) {
- depth = 15;
- }
- if (depth > max_depth) {
- max_depth = depth;
- }
- ++depth_histo[depth];
- ++i;
- } else {
- /* Compute the run length of zeros and add the appropriate number of 0
- and 17 code length codes to the code length code histogram. */
- uint32_t reps = 1;
- size_t k;
- for (k = i + 1; k < data_size && histogram->data_[k] == 0; ++k) {
- ++reps;
- }
- i += reps;
- if (i == data_size) {
- /* Don't add any cost for the last zero run, since these are encoded
- only implicitly. */
- break;
- }
- if (reps < 3) {
- depth_histo[0] += reps;
- } else {
- reps -= 2;
- while (reps > 0) {
- ++depth_histo[BROTLI_REPEAT_ZERO_CODE_LENGTH];
- /* Add the 3 extra bits for the 17 code length code. */
- bits += 3;
- reps >>= 3;
- }
- }
- }
- }
- /* Add the estimated encoding cost of the code length code histogram. */
- bits += (double)(18 + 2 * max_depth);
- /* Add the entropy of the code length code histogram. */
- bits += BitsEntropy(depth_histo, BROTLI_CODE_LENGTH_CODES);
- }
- return bits;
-}
-
-#undef HistogramType
diff --git a/BaseTools/Source/C/BrotliCompress/enc/block_encoder_inc.h b/BaseTools/Source/C/BrotliCompress/enc/block_encoder_inc.h
deleted file mode 100644
index ce7fd20cb3f4..000000000000
--- a/BaseTools/Source/C/BrotliCompress/enc/block_encoder_inc.h
+++ /dev/null
@@ -1,34 +0,0 @@
-/* NOLINT(build/header_guard) */
-/* Copyright 2014 Google Inc. All Rights Reserved.
-
- Distributed under MIT license.
- See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
-*/
-
-/* template parameters: FN */
-
-#define HistogramType FN(Histogram)
-
-/* Creates entropy codes for all block types and stores them to the bit
- stream. */
-static void FN(BuildAndStoreEntropyCodes)(MemoryManager* m, BlockEncoder* self,
- const HistogramType* histograms, const size_t histograms_size,
- const size_t alphabet_size, HuffmanTree* tree,
- size_t* storage_ix, uint8_t* storage) {
- const size_t table_size = histograms_size * self->histogram_length_;
- self->depths_ = BROTLI_ALLOC(m, uint8_t, table_size);
- self->bits_ = BROTLI_ALLOC(m, uint16_t, table_size);
- if (BROTLI_IS_OOM(m)) return;
-
- {
- size_t i;
- for (i = 0; i < histograms_size; ++i) {
- size_t ix = i * self->histogram_length_;
- BuildAndStoreHuffmanTree(&histograms[i].data_[0], self->histogram_length_,
- alphabet_size, tree, &self->depths_[ix], &self->bits_[ix],
- storage_ix, storage);
- }
- }
-}
-
-#undef HistogramType
diff --git a/BaseTools/Source/C/BrotliCompress/enc/block_splitter.h b/BaseTools/Source/C/BrotliCompress/enc/block_splitter.h
deleted file mode 100644
index aa6ebedc2cb8..000000000000
--- a/BaseTools/Source/C/BrotliCompress/enc/block_splitter.h
+++ /dev/null
@@ -1,51 +0,0 @@
-/* Copyright 2013 Google Inc. All Rights Reserved.
-
- Distributed under MIT license.
- See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
-*/
-
-/* Block split point selection utilities. */
-
-#ifndef BROTLI_ENC_BLOCK_SPLITTER_H_
-#define BROTLI_ENC_BLOCK_SPLITTER_H_
-
-#include "../common/platform.h"
-#include <brotli/types.h>
-#include "./command.h"
-#include "./memory.h"
-#include "./quality.h"
-
-#if defined(__cplusplus) || defined(c_plusplus)
-extern "C" {
-#endif
-
-typedef struct BlockSplit {
- size_t num_types; /* Amount of distinct types */
- size_t num_blocks; /* Amount of values in types and length */
- uint8_t* types;
- uint32_t* lengths;
-
- size_t types_alloc_size;
- size_t lengths_alloc_size;
-} BlockSplit;
-
-BROTLI_INTERNAL void BrotliInitBlockSplit(BlockSplit* self);
-BROTLI_INTERNAL void BrotliDestroyBlockSplit(MemoryManager* m,
- BlockSplit* self);
-
-BROTLI_INTERNAL void BrotliSplitBlock(MemoryManager* m,
- const Command* cmds,
- const size_t num_commands,
- const uint8_t* data,
- const size_t offset,
- const size_t mask,
- const BrotliEncoderParams* params,
- BlockSplit* literal_split,
- BlockSplit* insert_and_copy_split,
- BlockSplit* dist_split);
-
-#if defined(__cplusplus) || defined(c_plusplus)
-} /* extern "C" */
-#endif
-
-#endif /* BROTLI_ENC_BLOCK_SPLITTER_H_ */
diff --git a/BaseTools/Source/C/BrotliCompress/enc/block_splitter_inc.h b/BaseTools/Source/C/BrotliCompress/enc/block_splitter_inc.h
deleted file mode 100644
index 63c7ccf12975..000000000000
--- a/BaseTools/Source/C/BrotliCompress/enc/block_splitter_inc.h
+++ /dev/null
@@ -1,431 +0,0 @@
-/* NOLINT(build/header_guard) */
-/* Copyright 2013 Google Inc. All Rights Reserved.
-
- Distributed under MIT license.
- See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
-*/
-
-/* template parameters: FN, DataType */
-
-#define HistogramType FN(Histogram)
-
-static void FN(InitialEntropyCodes)(const DataType* data, size_t length,
- size_t stride,
- size_t num_histograms,
- HistogramType* histograms) {
- uint32_t seed = 7;
- size_t block_length = length / num_histograms;
- size_t i;
- FN(ClearHistograms)(histograms, num_histograms);
- for (i = 0; i < num_histograms; ++i) {
- size_t pos = length * i / num_histograms;
- if (i != 0) {
- pos += MyRand(&seed) % block_length;
- }
- if (pos + stride >= length) {
- pos = length - stride - 1;
- }
- FN(HistogramAddVector)(&histograms[i], data + pos, stride);
- }
-}
-
-static void FN(RandomSample)(uint32_t* seed,
- const DataType* data,
- size_t length,
- size_t stride,
- HistogramType* sample) {
- size_t pos = 0;
- if (stride >= length) {
- stride = length;
- } else {
- pos = MyRand(seed) % (length - stride + 1);
- }
- FN(HistogramAddVector)(sample, data + pos, stride);
-}
-
-static void FN(RefineEntropyCodes)(const DataType* data, size_t length,
- size_t stride,
- size_t num_histograms,
- HistogramType* histograms) {
- size_t iters =
- kIterMulForRefining * length / stride + kMinItersForRefining;
- uint32_t seed = 7;
- size_t iter;
- iters = ((iters + num_histograms - 1) / num_histograms) * num_histograms;
- for (iter = 0; iter < iters; ++iter) {
- HistogramType sample;
- FN(HistogramClear)(&sample);
- FN(RandomSample)(&seed, data, length, stride, &sample);
- FN(HistogramAddHistogram)(&histograms[iter % num_histograms], &sample);
- }
-}
-
-/* Assigns a block id from the range [0, num_histograms) to each data element
- in data[0..length) and fills in block_id[0..length) with the assigned values.
- Returns the number of blocks, i.e. one plus the number of block switches. */
-static size_t FN(FindBlocks)(const DataType* data, const size_t length,
- const double block_switch_bitcost,
- const size_t num_histograms,
- const HistogramType* histograms,
- double* insert_cost,
- double* cost,
- uint8_t* switch_signal,
- uint8_t* block_id) {
- const size_t data_size = FN(HistogramDataSize)();
- const size_t bitmaplen = (num_histograms + 7) >> 3;
- size_t num_blocks = 1;
- size_t i;
- size_t j;
- BROTLI_DCHECK(num_histograms <= 256);
- if (num_histograms <= 1) {
- for (i = 0; i < length; ++i) {
- block_id[i] = 0;
- }
- return 1;
- }
- memset(insert_cost, 0, sizeof(insert_cost[0]) * data_size * num_histograms);
- for (i = 0; i < num_histograms; ++i) {
- insert_cost[i] = FastLog2((uint32_t)histograms[i].total_count_);
- }
- for (i = data_size; i != 0;) {
- --i;
- for (j = 0; j < num_histograms; ++j) {
- insert_cost[i * num_histograms + j] =
- insert_cost[j] - BitCost(histograms[j].data_[i]);
- }
- }
- memset(cost, 0, sizeof(cost[0]) * num_histograms);
- memset(switch_signal, 0, sizeof(switch_signal[0]) * length * bitmaplen);
- /* After each iteration of this loop, cost[k] will contain the difference
- between the minimum cost of arriving at the current byte position using
- entropy code k, and the minimum cost of arriving at the current byte
- position. This difference is capped at the block switch cost, and if it
- reaches block switch cost, it means that when we trace back from the last
- position, we need to switch here. */
- for (i = 0; i < length; ++i) {
- const size_t byte_ix = i;
- size_t ix = byte_ix * bitmaplen;
- size_t insert_cost_ix = data[byte_ix] * num_histograms;
- double min_cost = 1e99;
- double block_switch_cost = block_switch_bitcost;
- size_t k;
- for (k = 0; k < num_histograms; ++k) {
- /* We are coding the symbol in data[byte_ix] with entropy code k. */
- cost[k] += insert_cost[insert_cost_ix + k];
- if (cost[k] < min_cost) {
- min_cost = cost[k];
- block_id[byte_ix] = (uint8_t)k;
- }
- }
- /* More blocks for the beginning. */
- if (byte_ix < 2000) {
- block_switch_cost *= 0.77 + 0.07 * (double)byte_ix / 2000;
- }
- for (k = 0; k < num_histograms; ++k) {
- cost[k] -= min_cost;
- if (cost[k] >= block_switch_cost) {
- const uint8_t mask = (uint8_t)(1u << (k & 7));
- cost[k] = block_switch_cost;
- BROTLI_DCHECK((k >> 3) < bitmaplen);
- switch_signal[ix + (k >> 3)] |= mask;
- }
- }
- }
- { /* Trace back from the last position and switch at the marked places. */
- size_t byte_ix = length - 1;
- size_t ix = byte_ix * bitmaplen;
- uint8_t cur_id = block_id[byte_ix];
- while (byte_ix > 0) {
- const uint8_t mask = (uint8_t)(1u << (cur_id & 7));
- BROTLI_DCHECK(((size_t)cur_id >> 3) < bitmaplen);
- --byte_ix;
- ix -= bitmaplen;
- if (switch_signal[ix + (cur_id >> 3)] & mask) {
- if (cur_id != block_id[byte_ix]) {
- cur_id = block_id[byte_ix];
- ++num_blocks;
- }
- }
- block_id[byte_ix] = cur_id;
- }
- }
- return num_blocks;
-}
-
-static size_t FN(RemapBlockIds)(uint8_t* block_ids, const size_t length,
- uint16_t* new_id, const size_t num_histograms) {
- static const uint16_t kInvalidId = 256;
- uint16_t next_id = 0;
- size_t i;
- for (i = 0; i < num_histograms; ++i) {
- new_id[i] = kInvalidId;
- }
- for (i = 0; i < length; ++i) {
- BROTLI_DCHECK(block_ids[i] < num_histograms);
- if (new_id[block_ids[i]] == kInvalidId) {
- new_id[block_ids[i]] = next_id++;
- }
- }
- for (i = 0; i < length; ++i) {
- block_ids[i] = (uint8_t)new_id[block_ids[i]];
- BROTLI_DCHECK(block_ids[i] < num_histograms);
- }
- BROTLI_DCHECK(next_id <= num_histograms);
- return next_id;
-}
-
-static void FN(BuildBlockHistograms)(const DataType* data, const size_t length,
- const uint8_t* block_ids,
- const size_t num_histograms,
- HistogramType* histograms) {
- size_t i;
- FN(ClearHistograms)(histograms, num_histograms);
- for (i = 0; i < length; ++i) {
- FN(HistogramAdd)(&histograms[block_ids[i]], data[i]);
- }
-}
-
-static void FN(ClusterBlocks)(MemoryManager* m,
- const DataType* data, const size_t length,
- const size_t num_blocks,
- uint8_t* block_ids,
- BlockSplit* split) {
- uint32_t* histogram_symbols = BROTLI_ALLOC(m, uint32_t, num_blocks);
- uint32_t* block_lengths = BROTLI_ALLOC(m, uint32_t, num_blocks);
- const size_t expected_num_clusters = CLUSTERS_PER_BATCH *
- (num_blocks + HISTOGRAMS_PER_BATCH - 1) / HISTOGRAMS_PER_BATCH;
- size_t all_histograms_size = 0;
- size_t all_histograms_capacity = expected_num_clusters;
- HistogramType* all_histograms =
- BROTLI_ALLOC(m, HistogramType, all_histograms_capacity);
- size_t cluster_size_size = 0;
- size_t cluster_size_capacity = expected_num_clusters;
- uint32_t* cluster_size = BROTLI_ALLOC(m, uint32_t, cluster_size_capacity);
- size_t num_clusters = 0;
- HistogramType* histograms = BROTLI_ALLOC(m, HistogramType,
- BROTLI_MIN(size_t, num_blocks, HISTOGRAMS_PER_BATCH));
- size_t max_num_pairs =
- HISTOGRAMS_PER_BATCH * HISTOGRAMS_PER_BATCH / 2;
- size_t pairs_capacity = max_num_pairs + 1;
- HistogramPair* pairs = BROTLI_ALLOC(m, HistogramPair, pairs_capacity);
- size_t pos = 0;
- uint32_t* clusters;
- size_t num_final_clusters;
- static const uint32_t kInvalidIndex = BROTLI_UINT32_MAX;
- uint32_t* new_index;
- size_t i;
- uint32_t sizes[HISTOGRAMS_PER_BATCH] = { 0 };
- uint32_t new_clusters[HISTOGRAMS_PER_BATCH] = { 0 };
- uint32_t symbols[HISTOGRAMS_PER_BATCH] = { 0 };
- uint32_t remap[HISTOGRAMS_PER_BATCH] = { 0 };
-
- if (BROTLI_IS_OOM(m)) return;
-
- memset(block_lengths, 0, num_blocks * sizeof(uint32_t));
-
- {
- size_t block_idx = 0;
- for (i = 0; i < length; ++i) {
- BROTLI_DCHECK(block_idx < num_blocks);
- ++block_lengths[block_idx];
- if (i + 1 == length || block_ids[i] != block_ids[i + 1]) {
- ++block_idx;
- }
- }
- BROTLI_DCHECK(block_idx == num_blocks);
- }
-
- for (i = 0; i < num_blocks; i += HISTOGRAMS_PER_BATCH) {
- const size_t num_to_combine =
- BROTLI_MIN(size_t, num_blocks - i, HISTOGRAMS_PER_BATCH);
- size_t num_new_clusters;
- size_t j;
- for (j = 0; j < num_to_combine; ++j) {
- size_t k;
- FN(HistogramClear)(&histograms[j]);
- for (k = 0; k < block_lengths[i + j]; ++k) {
- FN(HistogramAdd)(&histograms[j], data[pos++]);
- }
- histograms[j].bit_cost_ = FN(BrotliPopulationCost)(&histograms[j]);
- new_clusters[j] = (uint32_t)j;
- symbols[j] = (uint32_t)j;
- sizes[j] = 1;
- }
- num_new_clusters = FN(BrotliHistogramCombine)(
- histograms, sizes, symbols, new_clusters, pairs, num_to_combine,
- num_to_combine, HISTOGRAMS_PER_BATCH, max_num_pairs);
- BROTLI_ENSURE_CAPACITY(m, HistogramType, all_histograms,
- all_histograms_capacity, all_histograms_size + num_new_clusters);
- BROTLI_ENSURE_CAPACITY(m, uint32_t, cluster_size,
- cluster_size_capacity, cluster_size_size + num_new_clusters);
- if (BROTLI_IS_OOM(m)) return;
- for (j = 0; j < num_new_clusters; ++j) {
- all_histograms[all_histograms_size++] = histograms[new_clusters[j]];
- cluster_size[cluster_size_size++] = sizes[new_clusters[j]];
- remap[new_clusters[j]] = (uint32_t)j;
- }
- for (j = 0; j < num_to_combine; ++j) {
- histogram_symbols[i + j] = (uint32_t)num_clusters + remap[symbols[j]];
- }
- num_clusters += num_new_clusters;
- BROTLI_DCHECK(num_clusters == cluster_size_size);
- BROTLI_DCHECK(num_clusters == all_histograms_size);
- }
- BROTLI_FREE(m, histograms);
-
- max_num_pairs =
- BROTLI_MIN(size_t, 64 * num_clusters, (num_clusters / 2) * num_clusters);
- if (pairs_capacity < max_num_pairs + 1) {
- BROTLI_FREE(m, pairs);
- pairs = BROTLI_ALLOC(m, HistogramPair, max_num_pairs + 1);
- if (BROTLI_IS_OOM(m)) return;
- }
-
- clusters = BROTLI_ALLOC(m, uint32_t, num_clusters);
- if (BROTLI_IS_OOM(m)) return;
- for (i = 0; i < num_clusters; ++i) {
- clusters[i] = (uint32_t)i;
- }
- num_final_clusters = FN(BrotliHistogramCombine)(
- all_histograms, cluster_size, histogram_symbols, clusters, pairs,
- num_clusters, num_blocks, BROTLI_MAX_NUMBER_OF_BLOCK_TYPES,
- max_num_pairs);
- BROTLI_FREE(m, pairs);
- BROTLI_FREE(m, cluster_size);
-
- new_index = BROTLI_ALLOC(m, uint32_t, num_clusters);
- if (BROTLI_IS_OOM(m)) return;
- for (i = 0; i < num_clusters; ++i) new_index[i] = kInvalidIndex;
- pos = 0;
- {
- uint32_t next_index = 0;
- for (i = 0; i < num_blocks; ++i) {
- HistogramType histo;
- size_t j;
- uint32_t best_out;
- double best_bits;
- FN(HistogramClear)(&histo);
- for (j = 0; j < block_lengths[i]; ++j) {
- FN(HistogramAdd)(&histo, data[pos++]);
- }
- best_out = (i == 0) ? histogram_symbols[0] : histogram_symbols[i - 1];
- best_bits =
- FN(BrotliHistogramBitCostDistance)(&histo, &all_histograms[best_out]);
- for (j = 0; j < num_final_clusters; ++j) {
- const double cur_bits = FN(BrotliHistogramBitCostDistance)(
- &histo, &all_histograms[clusters[j]]);
- if (cur_bits < best_bits) {
- best_bits = cur_bits;
- best_out = clusters[j];
- }
- }
- histogram_symbols[i] = best_out;
- if (new_index[best_out] == kInvalidIndex) {
- new_index[best_out] = next_index++;
- }
- }
- }
- BROTLI_FREE(m, clusters);
- BROTLI_FREE(m, all_histograms);
- BROTLI_ENSURE_CAPACITY(
- m, uint8_t, split->types, split->types_alloc_size, num_blocks);
- BROTLI_ENSURE_CAPACITY(
- m, uint32_t, split->lengths, split->lengths_alloc_size, num_blocks);
- if (BROTLI_IS_OOM(m)) return;
- {
- uint32_t cur_length = 0;
- size_t block_idx = 0;
- uint8_t max_type = 0;
- for (i = 0; i < num_blocks; ++i) {
- cur_length += block_lengths[i];
- if (i + 1 == num_blocks ||
- histogram_symbols[i] != histogram_symbols[i + 1]) {
- const uint8_t id = (uint8_t)new_index[histogram_symbols[i]];
- split->types[block_idx] = id;
- split->lengths[block_idx] = cur_length;
- max_type = BROTLI_MAX(uint8_t, max_type, id);
- cur_length = 0;
- ++block_idx;
- }
- }
- split->num_blocks = block_idx;
- split->num_types = (size_t)max_type + 1;
- }
- BROTLI_FREE(m, new_index);
- BROTLI_FREE(m, block_lengths);
- BROTLI_FREE(m, histogram_symbols);
-}
-
-static void FN(SplitByteVector)(MemoryManager* m,
- const DataType* data, const size_t length,
- const size_t literals_per_histogram,
- const size_t max_histograms,
- const size_t sampling_stride_length,
- const double block_switch_cost,
- const BrotliEncoderParams* params,
- BlockSplit* split) {
- const size_t data_size = FN(HistogramDataSize)();
- size_t num_histograms = length / literals_per_histogram + 1;
- HistogramType* histograms;
- if (num_histograms > max_histograms) {
- num_histograms = max_histograms;
- }
- if (length == 0) {
- split->num_types = 1;
- return;
- } else if (length < kMinLengthForBlockSplitting) {
- BROTLI_ENSURE_CAPACITY(m, uint8_t,
- split->types, split->types_alloc_size, split->num_blocks + 1);
- BROTLI_ENSURE_CAPACITY(m, uint32_t,
- split->lengths, split->lengths_alloc_size, split->num_blocks + 1);
- if (BROTLI_IS_OOM(m)) return;
- split->num_types = 1;
- split->types[split->num_blocks] = 0;
- split->lengths[split->num_blocks] = (uint32_t)length;
- split->num_blocks++;
- return;
- }
- histograms = BROTLI_ALLOC(m, HistogramType, num_histograms);
- if (BROTLI_IS_OOM(m)) return;
- /* Find good entropy codes. */
- FN(InitialEntropyCodes)(data, length,
- sampling_stride_length,
- num_histograms, histograms);
- FN(RefineEntropyCodes)(data, length,
- sampling_stride_length,
- num_histograms, histograms);
- {
- /* Find a good path through literals with the good entropy codes. */
- uint8_t* block_ids = BROTLI_ALLOC(m, uint8_t, length);
- size_t num_blocks = 0;
- const size_t bitmaplen = (num_histograms + 7) >> 3;
- double* insert_cost = BROTLI_ALLOC(m, double, data_size * num_histograms);
- double* cost = BROTLI_ALLOC(m, double, num_histograms);
- uint8_t* switch_signal = BROTLI_ALLOC(m, uint8_t, length * bitmaplen);
- uint16_t* new_id = BROTLI_ALLOC(m, uint16_t, num_histograms);
- const size_t iters = params->quality < HQ_ZOPFLIFICATION_QUALITY ? 3 : 10;
- size_t i;
- if (BROTLI_IS_OOM(m)) return;
- for (i = 0; i < iters; ++i) {
- num_blocks = FN(FindBlocks)(data, length,
- block_switch_cost,
- num_histograms, histograms,
- insert_cost, cost, switch_signal,
- block_ids);
- num_histograms = FN(RemapBlockIds)(block_ids, length,
- new_id, num_histograms);
- FN(BuildBlockHistograms)(data, length, block_ids,
- num_histograms, histograms);
- }
- BROTLI_FREE(m, insert_cost);
- BROTLI_FREE(m, cost);
- BROTLI_FREE(m, switch_signal);
- BROTLI_FREE(m, new_id);
- BROTLI_FREE(m, histograms);
- FN(ClusterBlocks)(m, data, length, num_blocks, block_ids, split);
- if (BROTLI_IS_OOM(m)) return;
- BROTLI_FREE(m, block_ids);
- }
-}
-
-#undef HistogramType
diff --git a/BaseTools/Source/C/BrotliCompress/enc/brotli_bit_stream.h b/BaseTools/Source/C/BrotliCompress/enc/brotli_bit_stream.h
deleted file mode 100644
index 18556dc11044..000000000000
--- a/BaseTools/Source/C/BrotliCompress/enc/brotli_bit_stream.h
+++ /dev/null
@@ -1,84 +0,0 @@
-/* Copyright 2014 Google Inc. All Rights Reserved.
-
- Distributed under MIT license.
- See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
-*/
-
-/* Functions to convert brotli-related data structures into the
- brotli bit stream. The functions here operate under
- assumption that there is enough space in the storage, i.e., there are
- no out-of-range checks anywhere.
-
- These functions do bit addressing into a byte array. The byte array
- is called "storage" and the index to the bit is called storage_ix
- in function arguments. */
-
-#ifndef BROTLI_ENC_BROTLI_BIT_STREAM_H_
-#define BROTLI_ENC_BROTLI_BIT_STREAM_H_
-
-#include "../common/context.h"
-#include "../common/platform.h"
-#include <brotli/types.h>
-#include "./command.h"
-#include "./entropy_encode.h"
-#include "./memory.h"
-#include "./metablock.h"
-
-#if defined(__cplusplus) || defined(c_plusplus)
-extern "C" {
-#endif
-
-/* All Store functions here will use a storage_ix, which is always the bit
- position for the current storage. */
-
-BROTLI_INTERNAL void BrotliStoreHuffmanTree(const uint8_t* depths, size_t num,
- HuffmanTree* tree, size_t* storage_ix, uint8_t* storage);
-
-BROTLI_INTERNAL void BrotliBuildAndStoreHuffmanTreeFast(
- MemoryManager* m, const uint32_t* histogram, const size_t histogram_total,
- const size_t max_bits, uint8_t* depth, uint16_t* bits, size_t* storage_ix,
- uint8_t* storage);
-
-/* REQUIRES: length > 0 */
-/* REQUIRES: length <= (1 << 24) */
-BROTLI_INTERNAL void BrotliStoreMetaBlock(MemoryManager* m,
- const uint8_t* input, size_t start_pos, size_t length, size_t mask,
- uint8_t prev_byte, uint8_t prev_byte2, BROTLI_BOOL is_last,
- const BrotliEncoderParams* params, ContextType literal_context_mode,
- const Command* commands, size_t n_commands, const MetaBlockSplit* mb,
- size_t* storage_ix, uint8_t* storage);
-
-/* Stores the meta-block without doing any block splitting, just collects
- one histogram per block category and uses that for entropy coding.
- REQUIRES: length > 0
- REQUIRES: length <= (1 << 24) */
-BROTLI_INTERNAL void BrotliStoreMetaBlockTrivial(MemoryManager* m,
- const uint8_t* input, size_t start_pos, size_t length, size_t mask,
- BROTLI_BOOL is_last, const BrotliEncoderParams* params,
- const Command* commands, size_t n_commands,
- size_t* storage_ix, uint8_t* storage);
-
-/* Same as above, but uses static prefix codes for histograms with a only a few
- symbols, and uses static code length prefix codes for all other histograms.
- REQUIRES: length > 0
- REQUIRES: length <= (1 << 24) */
-BROTLI_INTERNAL void BrotliStoreMetaBlockFast(MemoryManager* m,
- const uint8_t* input, size_t start_pos, size_t length, size_t mask,
- BROTLI_BOOL is_last, const BrotliEncoderParams* params,
- const Command* commands, size_t n_commands,
- size_t* storage_ix, uint8_t* storage);
-
-/* This is for storing uncompressed blocks (simple raw storage of
- bytes-as-bytes).
- REQUIRES: length > 0
- REQUIRES: length <= (1 << 24) */
-BROTLI_INTERNAL void BrotliStoreUncompressedMetaBlock(
- BROTLI_BOOL is_final_block, const uint8_t* BROTLI_RESTRICT input,
- size_t position, size_t mask, size_t len,
- size_t* BROTLI_RESTRICT storage_ix, uint8_t* BROTLI_RESTRICT storage);
-
-#if defined(__cplusplus) || defined(c_plusplus)
-} /* extern "C" */
-#endif
-
-#endif /* BROTLI_ENC_BROTLI_BIT_STREAM_H_ */
diff --git a/BaseTools/Source/C/BrotliCompress/enc/cluster.h b/BaseTools/Source/C/BrotliCompress/enc/cluster.h
deleted file mode 100644
index b7ebec8c7841..000000000000
--- a/BaseTools/Source/C/BrotliCompress/enc/cluster.h
+++ /dev/null
@@ -1,48 +0,0 @@
-/* Copyright 2013 Google Inc. All Rights Reserved.
-
- Distributed under MIT license.
- See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
-*/
-
-/* Functions for clustering similar histograms together. */
-
-#ifndef BROTLI_ENC_CLUSTER_H_
-#define BROTLI_ENC_CLUSTER_H_
-
-#include "../common/platform.h"
-#include <brotli/types.h>
-#include "./histogram.h"
-#include "./memory.h"
-
-#if defined(__cplusplus) || defined(c_plusplus)
-extern "C" {
-#endif
-
-typedef struct HistogramPair {
- uint32_t idx1;
- uint32_t idx2;
- double cost_combo;
- double cost_diff;
-} HistogramPair;
-
-#define CODE(X) /* Declaration */;
-
-#define FN(X) X ## Literal
-#include "./cluster_inc.h" /* NOLINT(build/include) */
-#undef FN
-
-#define FN(X) X ## Command
-#include "./cluster_inc.h" /* NOLINT(build/include) */
-#undef FN
-
-#define FN(X) X ## Distance
-#include "./cluster_inc.h" /* NOLINT(build/include) */
-#undef FN
-
-#undef CODE
-
-#if defined(__cplusplus) || defined(c_plusplus)
-} /* extern "C" */
-#endif
-
-#endif /* BROTLI_ENC_CLUSTER_H_ */
diff --git a/BaseTools/Source/C/BrotliCompress/enc/cluster_inc.h b/BaseTools/Source/C/BrotliCompress/enc/cluster_inc.h
deleted file mode 100644
index b47e0dff0049..000000000000
--- a/BaseTools/Source/C/BrotliCompress/enc/cluster_inc.h
+++ /dev/null
@@ -1,317 +0,0 @@
-/* NOLINT(build/header_guard) */
-/* Copyright 2013 Google Inc. All Rights Reserved.
-
- Distributed under MIT license.
- See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
-*/
-
-/* template parameters: FN, CODE */
-
-#define HistogramType FN(Histogram)
-
-/* Computes the bit cost reduction by combining out[idx1] and out[idx2] and if
- it is below a threshold, stores the pair (idx1, idx2) in the *pairs queue. */
-BROTLI_INTERNAL void FN(BrotliCompareAndPushToQueue)(
- const HistogramType* out, const uint32_t* cluster_size, uint32_t idx1,
- uint32_t idx2, size_t max_num_pairs, HistogramPair* pairs,
- size_t* num_pairs) CODE({
- BROTLI_BOOL is_good_pair = BROTLI_FALSE;
- HistogramPair p;
- p.idx1 = p.idx2 = 0;
- p.cost_diff = p.cost_combo = 0;
- if (idx1 == idx2) {
- return;
- }
- if (idx2 < idx1) {
- uint32_t t = idx2;
- idx2 = idx1;
- idx1 = t;
- }
- p.idx1 = idx1;
- p.idx2 = idx2;
- p.cost_diff = 0.5 * ClusterCostDiff(cluster_size[idx1], cluster_size[idx2]);
- p.cost_diff -= out[idx1].bit_cost_;
- p.cost_diff -= out[idx2].bit_cost_;
-
- if (out[idx1].total_count_ == 0) {
- p.cost_combo = out[idx2].bit_cost_;
- is_good_pair = BROTLI_TRUE;
- } else if (out[idx2].total_count_ == 0) {
- p.cost_combo = out[idx1].bit_cost_;
- is_good_pair = BROTLI_TRUE;
- } else {
- double threshold = *num_pairs == 0 ? 1e99 :
- BROTLI_MAX(double, 0.0, pairs[0].cost_diff);
- HistogramType combo = out[idx1];
- double cost_combo;
- FN(HistogramAddHistogram)(&combo, &out[idx2]);
- cost_combo = FN(BrotliPopulationCost)(&combo);
- if (cost_combo < threshold - p.cost_diff) {
- p.cost_combo = cost_combo;
- is_good_pair = BROTLI_TRUE;
- }
- }
- if (is_good_pair) {
- p.cost_diff += p.cost_combo;
- if (*num_pairs > 0 && HistogramPairIsLess(&pairs[0], &p)) {
- /* Replace the top of the queue if needed. */
- if (*num_pairs < max_num_pairs) {
- pairs[*num_pairs] = pairs[0];
- ++(*num_pairs);
- }
- pairs[0] = p;
- } else if (*num_pairs < max_num_pairs) {
- pairs[*num_pairs] = p;
- ++(*num_pairs);
- }
- }
-})
-
-BROTLI_INTERNAL size_t FN(BrotliHistogramCombine)(HistogramType* out,
- uint32_t* cluster_size,
- uint32_t* symbols,
- uint32_t* clusters,
- HistogramPair* pairs,
- size_t num_clusters,
- size_t symbols_size,
- size_t max_clusters,
- size_t max_num_pairs) CODE({
- double cost_diff_threshold = 0.0;
- size_t min_cluster_size = 1;
- size_t num_pairs = 0;
-
- {
- /* We maintain a vector of histogram pairs, with the property that the pair
- with the maximum bit cost reduction is the first. */
- size_t idx1;
- for (idx1 = 0; idx1 < num_clusters; ++idx1) {
- size_t idx2;
- for (idx2 = idx1 + 1; idx2 < num_clusters; ++idx2) {
- FN(BrotliCompareAndPushToQueue)(out, cluster_size, clusters[idx1],
- clusters[idx2], max_num_pairs, &pairs[0], &num_pairs);
- }
- }
- }
-
- while (num_clusters > min_cluster_size) {
- uint32_t best_idx1;
- uint32_t best_idx2;
- size_t i;
- if (pairs[0].cost_diff >= cost_diff_threshold) {
- cost_diff_threshold = 1e99;
- min_cluster_size = max_clusters;
- continue;
- }
- /* Take the best pair from the top of heap. */
- best_idx1 = pairs[0].idx1;
- best_idx2 = pairs[0].idx2;
- FN(HistogramAddHistogram)(&out[best_idx1], &out[best_idx2]);
- out[best_idx1].bit_cost_ = pairs[0].cost_combo;
- cluster_size[best_idx1] += cluster_size[best_idx2];
- for (i = 0; i < symbols_size; ++i) {
- if (symbols[i] == best_idx2) {
- symbols[i] = best_idx1;
- }
- }
- for (i = 0; i < num_clusters; ++i) {
- if (clusters[i] == best_idx2) {
- memmove(&clusters[i], &clusters[i + 1],
- (num_clusters - i - 1) * sizeof(clusters[0]));
- break;
- }
- }
- --num_clusters;
- {
- /* Remove pairs intersecting the just combined best pair. */
- size_t copy_to_idx = 0;
- for (i = 0; i < num_pairs; ++i) {
- HistogramPair* p = &pairs[i];
- if (p->idx1 == best_idx1 || p->idx2 == best_idx1 ||
- p->idx1 == best_idx2 || p->idx2 == best_idx2) {
- /* Remove invalid pair from the queue. */
- continue;
- }
- if (HistogramPairIsLess(&pairs[0], p)) {
- /* Replace the top of the queue if needed. */
- HistogramPair front = pairs[0];
- pairs[0] = *p;
- pairs[copy_to_idx] = front;
- } else {
- pairs[copy_to_idx] = *p;
- }
- ++copy_to_idx;
- }
- num_pairs = copy_to_idx;
- }
-
- /* Push new pairs formed with the combined histogram to the heap. */
- for (i = 0; i < num_clusters; ++i) {
- FN(BrotliCompareAndPushToQueue)(out, cluster_size, best_idx1, clusters[i],
- max_num_pairs, &pairs[0], &num_pairs);
- }
- }
- return num_clusters;
-})
-
-/* What is the bit cost of moving histogram from cur_symbol to candidate. */
-BROTLI_INTERNAL double FN(BrotliHistogramBitCostDistance)(
- const HistogramType* histogram, const HistogramType* candidate) CODE({
- if (histogram->total_count_ == 0) {
- return 0.0;
- } else {
- HistogramType tmp = *histogram;
- FN(HistogramAddHistogram)(&tmp, candidate);
- return FN(BrotliPopulationCost)(&tmp) - candidate->bit_cost_;
- }
-})
-
-/* Find the best 'out' histogram for each of the 'in' histograms.
- When called, clusters[0..num_clusters) contains the unique values from
- symbols[0..in_size), but this property is not preserved in this function.
- Note: we assume that out[]->bit_cost_ is already up-to-date. */
-BROTLI_INTERNAL void FN(BrotliHistogramRemap)(const HistogramType* in,
- size_t in_size, const uint32_t* clusters, size_t num_clusters,
- HistogramType* out, uint32_t* symbols) CODE({
- size_t i;
- for (i = 0; i < in_size; ++i) {
- uint32_t best_out = i == 0 ? symbols[0] : symbols[i - 1];
- double best_bits =
- FN(BrotliHistogramBitCostDistance)(&in[i], &out[best_out]);
- size_t j;
- for (j = 0; j < num_clusters; ++j) {
- const double cur_bits =
- FN(BrotliHistogramBitCostDistance)(&in[i], &out[clusters[j]]);
- if (cur_bits < best_bits) {
- best_bits = cur_bits;
- best_out = clusters[j];
- }
- }
- symbols[i] = best_out;
- }
-
- /* Recompute each out based on raw and symbols. */
- for (i = 0; i < num_clusters; ++i) {
- FN(HistogramClear)(&out[clusters[i]]);
- }
- for (i = 0; i < in_size; ++i) {
- FN(HistogramAddHistogram)(&out[symbols[i]], &in[i]);
- }
-})
-
-/* Reorders elements of the out[0..length) array and changes values in
- symbols[0..length) array in the following way:
- * when called, symbols[] contains indexes into out[], and has N unique
- values (possibly N < length)
- * on return, symbols'[i] = f(symbols[i]) and
- out'[symbols'[i]] = out[symbols[i]], for each 0 <= i < length,
- where f is a bijection between the range of symbols[] and [0..N), and
- the first occurrences of values in symbols'[i] come in consecutive
- increasing order.
- Returns N, the number of unique values in symbols[]. */
-BROTLI_INTERNAL size_t FN(BrotliHistogramReindex)(MemoryManager* m,
- HistogramType* out, uint32_t* symbols, size_t length) CODE({
- static const uint32_t kInvalidIndex = BROTLI_UINT32_MAX;
- uint32_t* new_index = BROTLI_ALLOC(m, uint32_t, length);
- uint32_t next_index;
- HistogramType* tmp;
- size_t i;
- if (BROTLI_IS_OOM(m)) return 0;
- for (i = 0; i < length; ++i) {
- new_index[i] = kInvalidIndex;
- }
- next_index = 0;
- for (i = 0; i < length; ++i) {
- if (new_index[symbols[i]] == kInvalidIndex) {
- new_index[symbols[i]] = next_index;
- ++next_index;
- }
- }
- /* TODO: by using idea of "cycle-sort" we can avoid allocation of
- tmp and reduce the number of copying by the factor of 2. */
- tmp = BROTLI_ALLOC(m, HistogramType, next_index);
- if (BROTLI_IS_OOM(m)) return 0;
- next_index = 0;
- for (i = 0; i < length; ++i) {
- if (new_index[symbols[i]] == next_index) {
- tmp[next_index] = out[symbols[i]];
- ++next_index;
- }
- symbols[i] = new_index[symbols[i]];
- }
- BROTLI_FREE(m, new_index);
- for (i = 0; i < next_index; ++i) {
- out[i] = tmp[i];
- }
- BROTLI_FREE(m, tmp);
- return next_index;
-})
-
-BROTLI_INTERNAL void FN(BrotliClusterHistograms)(
- MemoryManager* m, const HistogramType* in, const size_t in_size,
- size_t max_histograms, HistogramType* out, size_t* out_size,
- uint32_t* histogram_symbols) CODE({
- uint32_t* cluster_size = BROTLI_ALLOC(m, uint32_t, in_size);
- uint32_t* clusters = BROTLI_ALLOC(m, uint32_t, in_size);
- size_t num_clusters = 0;
- const size_t max_input_histograms = 64;
- size_t pairs_capacity = max_input_histograms * max_input_histograms / 2;
- /* For the first pass of clustering, we allow all pairs. */
- HistogramPair* pairs = BROTLI_ALLOC(m, HistogramPair, pairs_capacity + 1);
- size_t i;
-
- if (BROTLI_IS_OOM(m)) return;
-
- for (i = 0; i < in_size; ++i) {
- cluster_size[i] = 1;
- }
-
- for (i = 0; i < in_size; ++i) {
- out[i] = in[i];
- out[i].bit_cost_ = FN(BrotliPopulationCost)(&in[i]);
- histogram_symbols[i] = (uint32_t)i;
- }
-
- for (i = 0; i < in_size; i += max_input_histograms) {
- size_t num_to_combine =
- BROTLI_MIN(size_t, in_size - i, max_input_histograms);
- size_t num_new_clusters;
- size_t j;
- for (j = 0; j < num_to_combine; ++j) {
- clusters[num_clusters + j] = (uint32_t)(i + j);
- }
- num_new_clusters =
- FN(BrotliHistogramCombine)(out, cluster_size,
- &histogram_symbols[i],
- &clusters[num_clusters], pairs,
- num_to_combine, num_to_combine,
- max_histograms, pairs_capacity);
- num_clusters += num_new_clusters;
- }
-
- {
- /* For the second pass, we limit the total number of histogram pairs.
- After this limit is reached, we only keep searching for the best pair. */
- size_t max_num_pairs = BROTLI_MIN(size_t,
- 64 * num_clusters, (num_clusters / 2) * num_clusters);
- BROTLI_ENSURE_CAPACITY(
- m, HistogramPair, pairs, pairs_capacity, max_num_pairs + 1);
- if (BROTLI_IS_OOM(m)) return;
-
- /* Collapse similar histograms. */
- num_clusters = FN(BrotliHistogramCombine)(out, cluster_size,
- histogram_symbols, clusters,
- pairs, num_clusters, in_size,
- max_histograms, max_num_pairs);
- }
- BROTLI_FREE(m, pairs);
- BROTLI_FREE(m, cluster_size);
- /* Find the optimal map from original histograms to the final ones. */
- FN(BrotliHistogramRemap)(in, in_size, clusters, num_clusters,
- out, histogram_symbols);
- BROTLI_FREE(m, clusters);
- /* Convert the context map to a canonical form. */
- *out_size = FN(BrotliHistogramReindex)(m, out, histogram_symbols, in_size);
- if (BROTLI_IS_OOM(m)) return;
-})
-
-#undef HistogramType
diff --git a/BaseTools/Source/C/BrotliCompress/enc/command.h b/BaseTools/Source/C/BrotliCompress/enc/command.h
deleted file mode 100644
index b8a66a44dc0b..000000000000
--- a/BaseTools/Source/C/BrotliCompress/enc/command.h
+++ /dev/null
@@ -1,190 +0,0 @@
-/* Copyright 2013 Google Inc. All Rights Reserved.
-
- Distributed under MIT license.
- See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
-*/
-
-/* This class models a sequence of literals and a backward reference copy. */
-
-#ifndef BROTLI_ENC_COMMAND_H_
-#define BROTLI_ENC_COMMAND_H_
-
-#include "../common/constants.h"
-#include "../common/platform.h"
-#include <brotli/types.h>
-#include "./fast_log.h"
-#include "./params.h"
-#include "./prefix.h"
-
-#if defined(__cplusplus) || defined(c_plusplus)
-extern "C" {
-#endif
-
-static uint32_t kInsBase[] = { 0, 1, 2, 3, 4, 5, 6, 8, 10, 14, 18, 26, 34, 50,
- 66, 98, 130, 194, 322, 578, 1090, 2114, 6210, 22594 };
-static uint32_t kInsExtra[] = { 0, 0, 0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4,
- 5, 5, 6, 7, 8, 9, 10, 12, 14, 24 };
-static uint32_t kCopyBase[] = { 2, 3, 4, 5, 6, 7, 8, 9, 10, 12, 14, 18, 22, 30,
- 38, 54, 70, 102, 134, 198, 326, 582, 1094, 2118 };
-static uint32_t kCopyExtra[] = { 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 2, 3, 3,
- 4, 4, 5, 5, 6, 7, 8, 9, 10, 24 };
-
-static BROTLI_INLINE uint16_t GetInsertLengthCode(size_t insertlen) {
- if (insertlen < 6) {
- return (uint16_t)insertlen;
- } else if (insertlen < 130) {
- uint32_t nbits = Log2FloorNonZero(insertlen - 2) - 1u;
- return (uint16_t)((nbits << 1) + ((insertlen - 2) >> nbits) + 2);
- } else if (insertlen < 2114) {
- return (uint16_t)(Log2FloorNonZero(insertlen - 66) + 10);
- } else if (insertlen < 6210) {
- return 21u;
- } else if (insertlen < 22594) {
- return 22u;
- } else {
- return 23u;
- }
-}
-
-static BROTLI_INLINE uint16_t GetCopyLengthCode(size_t copylen) {
- if (copylen < 10) {
- return (uint16_t)(copylen - 2);
- } else if (copylen < 134) {
- uint32_t nbits = Log2FloorNonZero(copylen - 6) - 1u;
- return (uint16_t)((nbits << 1) + ((copylen - 6) >> nbits) + 4);
- } else if (copylen < 2118) {
- return (uint16_t)(Log2FloorNonZero(copylen - 70) + 12);
- } else {
- return 23u;
- }
-}
-
-static BROTLI_INLINE uint16_t CombineLengthCodes(
- uint16_t inscode, uint16_t copycode, BROTLI_BOOL use_last_distance) {
- uint16_t bits64 =
- (uint16_t)((copycode & 0x7u) | ((inscode & 0x7u) << 3u));
- if (use_last_distance && inscode < 8u && copycode < 16u) {
- return (copycode < 8u) ? bits64 : (bits64 | 64u);
- } else {
- /* Specification: 5 Encoding of ... (last table) */
- /* offset = 2 * index, where index is in range [0..8] */
- uint32_t offset = 2u * ((copycode >> 3u) + 3u * (inscode >> 3u));
- /* All values in specification are K * 64,
- where K = [2, 3, 6, 4, 5, 8, 7, 9, 10],
- i + 1 = [1, 2, 3, 4, 5, 6, 7, 8, 9],
- K - i - 1 = [1, 1, 3, 0, 0, 2, 0, 1, 2] = D.
- All values in D require only 2 bits to encode.
- Magic constant is shifted 6 bits left, to avoid final multiplication. */
- offset = (offset << 5u) + 0x40u + ((0x520D40u >> offset) & 0xC0u);
- return (uint16_t)(offset | bits64);
- }
-}
-
-static BROTLI_INLINE void GetLengthCode(size_t insertlen, size_t copylen,
- BROTLI_BOOL use_last_distance,
- uint16_t* code) {
- uint16_t inscode = GetInsertLengthCode(insertlen);
- uint16_t copycode = GetCopyLengthCode(copylen);
- *code = CombineLengthCodes(inscode, copycode, use_last_distance);
-}
-
-static BROTLI_INLINE uint32_t GetInsertBase(uint16_t inscode) {
- return kInsBase[inscode];
-}
-
-static BROTLI_INLINE uint32_t GetInsertExtra(uint16_t inscode) {
- return kInsExtra[inscode];
-}
-
-static BROTLI_INLINE uint32_t GetCopyBase(uint16_t copycode) {
- return kCopyBase[copycode];
-}
-
-static BROTLI_INLINE uint32_t GetCopyExtra(uint16_t copycode) {
- return kCopyExtra[copycode];
-}
-
-typedef struct Command {
- uint32_t insert_len_;
- /* Stores copy_len in low 25 bits and copy_code - copy_len in high 7 bit. */
- uint32_t copy_len_;
- /* Stores distance extra bits. */
- uint32_t dist_extra_;
- uint16_t cmd_prefix_;
- /* Stores distance code in low 10 bits
- and number of extra bits in high 6 bits. */
- uint16_t dist_prefix_;
-} Command;
-
-/* distance_code is e.g. 0 for same-as-last short code, or 16 for offset 1. */
-static BROTLI_INLINE void InitCommand(Command* self,
- const BrotliDistanceParams* dist, size_t insertlen,
- size_t copylen, int copylen_code_delta, size_t distance_code) {
- /* Don't rely on signed int representation, use honest casts. */
- uint32_t delta = (uint8_t)((int8_t)copylen_code_delta);
- self->insert_len_ = (uint32_t)insertlen;
- self->copy_len_ = (uint32_t)(copylen | (delta << 25));
- /* The distance prefix and extra bits are stored in this Command as if
- npostfix and ndirect were 0, they are only recomputed later after the
- clustering if needed. */
- PrefixEncodeCopyDistance(
- distance_code, dist->num_direct_distance_codes,
- dist->distance_postfix_bits, &self->dist_prefix_, &self->dist_extra_);
- GetLengthCode(
- insertlen, (size_t)((int)copylen + copylen_code_delta),
- TO_BROTLI_BOOL((self->dist_prefix_ & 0x3FF) == 0), &self->cmd_prefix_);
-}
-
-static BROTLI_INLINE void InitInsertCommand(Command* self, size_t insertlen) {
- self->insert_len_ = (uint32_t)insertlen;
- self->copy_len_ = 4 << 25;
- self->dist_extra_ = 0;
- self->dist_prefix_ = BROTLI_NUM_DISTANCE_SHORT_CODES;
- GetLengthCode(insertlen, 4, BROTLI_FALSE, &self->cmd_prefix_);
-}
-
-static BROTLI_INLINE uint32_t CommandRestoreDistanceCode(
- const Command* self, const BrotliDistanceParams* dist) {
- if ((self->dist_prefix_ & 0x3FFu) <
- BROTLI_NUM_DISTANCE_SHORT_CODES + dist->num_direct_distance_codes) {
- return self->dist_prefix_ & 0x3FFu;
- } else {
- uint32_t dcode = self->dist_prefix_ & 0x3FFu;
- uint32_t nbits = self->dist_prefix_ >> 10;
- uint32_t extra = self->dist_extra_;
- uint32_t postfix_mask = (1U << dist->distance_postfix_bits) - 1U;
- uint32_t hcode = (dcode - dist->num_direct_distance_codes -
- BROTLI_NUM_DISTANCE_SHORT_CODES) >>
- dist->distance_postfix_bits;
- uint32_t lcode = (dcode - dist->num_direct_distance_codes -
- BROTLI_NUM_DISTANCE_SHORT_CODES) & postfix_mask;
- uint32_t offset = ((2U + (hcode & 1U)) << nbits) - 4U;
- return ((offset + extra) << dist->distance_postfix_bits) + lcode +
- dist->num_direct_distance_codes + BROTLI_NUM_DISTANCE_SHORT_CODES;
- }
-}
-
-static BROTLI_INLINE uint32_t CommandDistanceContext(const Command* self) {
- uint32_t r = self->cmd_prefix_ >> 6;
- uint32_t c = self->cmd_prefix_ & 7;
- if ((r == 0 || r == 2 || r == 4 || r == 7) && (c <= 2)) {
- return c;
- }
- return 3;
-}
-
-static BROTLI_INLINE uint32_t CommandCopyLen(const Command* self) {
- return self->copy_len_ & 0x1FFFFFF;
-}
-
-static BROTLI_INLINE uint32_t CommandCopyLenCode(const Command* self) {
- uint32_t modifier = self->copy_len_ >> 25;
- int32_t delta = (int8_t)((uint8_t)(modifier | ((modifier & 0x40) << 1)));
- return (uint32_t)((int32_t)(self->copy_len_ & 0x1FFFFFF) + delta);
-}
-
-#if defined(__cplusplus) || defined(c_plusplus)
-} /* extern "C" */
-#endif
-
-#endif /* BROTLI_ENC_COMMAND_H_ */
diff --git a/BaseTools/Source/C/BrotliCompress/enc/compress_fragment.h b/BaseTools/Source/C/BrotliCompress/enc/compress_fragment.h
deleted file mode 100644
index d4c34299ea2c..000000000000
--- a/BaseTools/Source/C/BrotliCompress/enc/compress_fragment.h
+++ /dev/null
@@ -1,61 +0,0 @@
-/* Copyright 2015 Google Inc. All Rights Reserved.
-
- Distributed under MIT license.
- See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
-*/
-
-/* Function for fast encoding of an input fragment, independently from the input
- history. This function uses one-pass processing: when we find a backward
- match, we immediately emit the corresponding command and literal codes to
- the bit stream. */
-
-#ifndef BROTLI_ENC_COMPRESS_FRAGMENT_H_
-#define BROTLI_ENC_COMPRESS_FRAGMENT_H_
-
-#include "../common/platform.h"
-#include <brotli/types.h>
-#include "./memory.h"
-
-#if defined(__cplusplus) || defined(c_plusplus)
-extern "C" {
-#endif
-
-/* Compresses "input" string to the "*storage" buffer as one or more complete
- meta-blocks, and updates the "*storage_ix" bit position.
-
- If "is_last" is 1, emits an additional empty last meta-block.
-
- "cmd_depth" and "cmd_bits" contain the command and distance prefix codes
- (see comment in encode.h) used for the encoding of this input fragment.
- If "is_last" is 0, they are updated to reflect the statistics
- of this input fragment, to be used for the encoding of the next fragment.
-
- "*cmd_code_numbits" is the number of bits of the compressed representation
- of the command and distance prefix codes, and "cmd_code" is an array of
- at least "(*cmd_code_numbits + 7) >> 3" size that contains the compressed
- command and distance prefix codes. If "is_last" is 0, these are also
- updated to represent the updated "cmd_depth" and "cmd_bits".
-
- REQUIRES: "input_size" is greater than zero, or "is_last" is 1.
- REQUIRES: "input_size" is less or equal to maximal metablock size (1 << 24).
- REQUIRES: All elements in "table[0..table_size-1]" are initialized to zero.
- REQUIRES: "table_size" is an odd (9, 11, 13, 15) power of two
- OUTPUT: maximal copy distance <= |input_size|
- OUTPUT: maximal copy distance <= BROTLI_MAX_BACKWARD_LIMIT(18) */
-BROTLI_INTERNAL void BrotliCompressFragmentFast(MemoryManager* m,
- const uint8_t* input,
- size_t input_size,
- BROTLI_BOOL is_last,
- int* table, size_t table_size,
- uint8_t cmd_depth[128],
- uint16_t cmd_bits[128],
- size_t* cmd_code_numbits,
- uint8_t* cmd_code,
- size_t* storage_ix,
- uint8_t* storage);
-
-#if defined(__cplusplus) || defined(c_plusplus)
-} /* extern "C" */
-#endif
-
-#endif /* BROTLI_ENC_COMPRESS_FRAGMENT_H_ */
diff --git a/BaseTools/Source/C/BrotliCompress/enc/compress_fragment_two_pass.h b/BaseTools/Source/C/BrotliCompress/enc/compress_fragment_two_pass.h
deleted file mode 100644
index c97e22cfcaba..000000000000
--- a/BaseTools/Source/C/BrotliCompress/enc/compress_fragment_two_pass.h
+++ /dev/null
@@ -1,54 +0,0 @@
-/* Copyright 2015 Google Inc. All Rights Reserved.
-
- Distributed under MIT license.
- See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
-*/
-
-/* Function for fast encoding of an input fragment, independently from the input
- history. This function uses two-pass processing: in the first pass we save
- the found backward matches and literal bytes into a buffer, and in the
- second pass we emit them into the bit stream using prefix codes built based
- on the actual command and literal byte histograms. */
-
-#ifndef BROTLI_ENC_COMPRESS_FRAGMENT_TWO_PASS_H_
-#define BROTLI_ENC_COMPRESS_FRAGMENT_TWO_PASS_H_
-
-#include "../common/platform.h"
-#include <brotli/types.h>
-#include "./memory.h"
-
-#if defined(__cplusplus) || defined(c_plusplus)
-extern "C" {
-#endif
-
-static const size_t kCompressFragmentTwoPassBlockSize = 1 << 17;
-
-/* Compresses "input" string to the "*storage" buffer as one or more complete
- meta-blocks, and updates the "*storage_ix" bit position.
-
- If "is_last" is 1, emits an additional empty last meta-block.
-
- REQUIRES: "input_size" is greater than zero, or "is_last" is 1.
- REQUIRES: "input_size" is less or equal to maximal metablock size (1 << 24).
- REQUIRES: "command_buf" and "literal_buf" point to at least
- kCompressFragmentTwoPassBlockSize long arrays.
- REQUIRES: All elements in "table[0..table_size-1]" are initialized to zero.
- REQUIRES: "table_size" is a power of two
- OUTPUT: maximal copy distance <= |input_size|
- OUTPUT: maximal copy distance <= BROTLI_MAX_BACKWARD_LIMIT(18) */
-BROTLI_INTERNAL void BrotliCompressFragmentTwoPass(MemoryManager* m,
- const uint8_t* input,
- size_t input_size,
- BROTLI_BOOL is_last,
- uint32_t* command_buf,
- uint8_t* literal_buf,
- int* table,
- size_t table_size,
- size_t* storage_ix,
- uint8_t* storage);
-
-#if defined(__cplusplus) || defined(c_plusplus)
-} /* extern "C" */
-#endif
-
-#endif /* BROTLI_ENC_COMPRESS_FRAGMENT_TWO_PASS_H_ */
diff --git a/BaseTools/Source/C/BrotliCompress/enc/dictionary_hash.h b/BaseTools/Source/C/BrotliCompress/enc/dictionary_hash.h
deleted file mode 100644
index ab31827c0bb0..000000000000
--- a/BaseTools/Source/C/BrotliCompress/enc/dictionary_hash.h
+++ /dev/null
@@ -1,24 +0,0 @@
-/* Copyright 2015 Google Inc. All Rights Reserved.
-
- Distributed under MIT license.
- See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
-*/
-
-/* Hash table on the 4-byte prefixes of static dictionary words. */
-
-#ifndef BROTLI_ENC_DICTIONARY_HASH_H_
-#define BROTLI_ENC_DICTIONARY_HASH_H_
-
-#include <brotli/types.h>
-
-#if defined(__cplusplus) || defined(c_plusplus)
-extern "C" {
-#endif
-
-extern const uint16_t kStaticDictionaryHash[32768];
-
-#if defined(__cplusplus) || defined(c_plusplus)
-} /* extern "C" */
-#endif
-
-#endif /* BROTLI_ENC_DICTIONARY_HASH_H_ */
diff --git a/BaseTools/Source/C/BrotliCompress/enc/encoder_dict.h b/BaseTools/Source/C/BrotliCompress/enc/encoder_dict.h
deleted file mode 100644
index 7c41ea055ac0..000000000000
--- a/BaseTools/Source/C/BrotliCompress/enc/encoder_dict.h
+++ /dev/null
@@ -1,41 +0,0 @@
-/* Copyright 2017 Google Inc. All Rights Reserved.
-
- Distributed under MIT license.
- See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
-*/
-
-#ifndef BROTLI_ENC_ENCODER_DICT_H_
-#define BROTLI_ENC_ENCODER_DICT_H_
-
-#include "../common/dictionary.h"
-#include "../common/platform.h"
-#include <brotli/types.h>
-#include "./static_dict_lut.h"
-
-#if defined(__cplusplus) || defined(c_plusplus)
-extern "C" {
-#endif
-
-/* Dictionary data (words and transforms) for 1 possible context */
-typedef struct BrotliEncoderDictionary {
- const BrotliDictionary* words;
-
- /* cut off for fast encoder */
- uint32_t cutoffTransformsCount;
- uint64_t cutoffTransforms;
-
- /* from dictionary_hash.h, for fast encoder */
- const uint16_t* hash_table;
-
- /* from static_dict_lut.h, for slow encoder */
- const uint16_t* buckets;
- const DictWord* dict_words;
-} BrotliEncoderDictionary;
-
-BROTLI_INTERNAL void BrotliInitEncoderDictionary(BrotliEncoderDictionary* dict);
-
-#if defined(__cplusplus) || defined(c_plusplus)
-} /* extern "C" */
-#endif
-
-#endif /* BROTLI_ENC_ENCODER_DICT_H_ */
diff --git a/BaseTools/Source/C/BrotliCompress/enc/entropy_encode.h b/BaseTools/Source/C/BrotliCompress/enc/entropy_encode.h
deleted file mode 100644
index 173d98336347..000000000000
--- a/BaseTools/Source/C/BrotliCompress/enc/entropy_encode.h
+++ /dev/null
@@ -1,122 +0,0 @@
-/* Copyright 2010 Google Inc. All Rights Reserved.
-
- Distributed under MIT license.
- See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
-*/
-
-/* Entropy encoding (Huffman) utilities. */
-
-#ifndef BROTLI_ENC_ENTROPY_ENCODE_H_
-#define BROTLI_ENC_ENTROPY_ENCODE_H_
-
-#include "../common/platform.h"
-#include <brotli/types.h>
-
-#if defined(__cplusplus) || defined(c_plusplus)
-extern "C" {
-#endif
-
-/* A node of a Huffman tree. */
-typedef struct HuffmanTree {
- uint32_t total_count_;
- int16_t index_left_;
- int16_t index_right_or_value_;
-} HuffmanTree;
-
-static BROTLI_INLINE void InitHuffmanTree(HuffmanTree* self, uint32_t count,
- int16_t left, int16_t right) {
- self->total_count_ = count;
- self->index_left_ = left;
- self->index_right_or_value_ = right;
-}
-
-/* Returns 1 is assignment of depths succeeded, otherwise 0. */
-BROTLI_INTERNAL BROTLI_BOOL BrotliSetDepth(
- int p, HuffmanTree* pool, uint8_t* depth, int max_depth);
-
-/* This function will create a Huffman tree.
-
- The (data,length) contains the population counts.
- The tree_limit is the maximum bit depth of the Huffman codes.
-
- The depth contains the tree, i.e., how many bits are used for
- the symbol.
-
- The actual Huffman tree is constructed in the tree[] array, which has to
- be at least 2 * length + 1 long.
-
- See http://en.wikipedia.org/wiki/Huffman_coding */
-BROTLI_INTERNAL void BrotliCreateHuffmanTree(const uint32_t* data,
- const size_t length,
- const int tree_limit,
- HuffmanTree* tree,
- uint8_t* depth);
-
-/* Change the population counts in a way that the consequent
- Huffman tree compression, especially its RLE-part will be more
- likely to compress this data more efficiently.
-
- length contains the size of the histogram.
- counts contains the population counts.
- good_for_rle is a buffer of at least length size */
-BROTLI_INTERNAL void BrotliOptimizeHuffmanCountsForRle(
- size_t length, uint32_t* counts, uint8_t* good_for_rle);
-
-/* Write a Huffman tree from bit depths into the bit-stream representation
- of a Huffman tree. The generated Huffman tree is to be compressed once
- more using a Huffman tree */
-BROTLI_INTERNAL void BrotliWriteHuffmanTree(const uint8_t* depth,
- size_t num,
- size_t* tree_size,
- uint8_t* tree,
- uint8_t* extra_bits_data);
-
-/* Get the actual bit values for a tree of bit depths. */
-BROTLI_INTERNAL void BrotliConvertBitDepthsToSymbols(const uint8_t* depth,
- size_t len,
- uint16_t* bits);
-
-/* Input size optimized Shell sort. */
-typedef BROTLI_BOOL (*HuffmanTreeComparator)(
- const HuffmanTree*, const HuffmanTree*);
-static BROTLI_INLINE void SortHuffmanTreeItems(HuffmanTree* items,
- const size_t n, HuffmanTreeComparator comparator) {
- static const size_t gaps[] = {132, 57, 23, 10, 4, 1};
- if (n < 13) {
- /* Insertion sort. */
- size_t i;
- for (i = 1; i < n; ++i) {
- HuffmanTree tmp = items[i];
- size_t k = i;
- size_t j = i - 1;
- while (comparator(&tmp, &items[j])) {
- items[k] = items[j];
- k = j;
- if (!j--) break;
- }
- items[k] = tmp;
- }
- return;
- } else {
- /* Shell sort. */
- int g = n < 57 ? 2 : 0;
- for (; g < 6; ++g) {
- size_t gap = gaps[g];
- size_t i;
- for (i = gap; i < n; ++i) {
- size_t j = i;
- HuffmanTree tmp = items[i];
- for (; j >= gap && comparator(&tmp, &items[j - gap]); j -= gap) {
- items[j] = items[j - gap];
- }
- items[j] = tmp;
- }
- }
- }
-}
-
-#if defined(__cplusplus) || defined(c_plusplus)
-} /* extern "C" */
-#endif
-
-#endif /* BROTLI_ENC_ENTROPY_ENCODE_H_ */
diff --git a/BaseTools/Source/C/BrotliCompress/enc/entropy_encode_static.h b/BaseTools/Source/C/BrotliCompress/enc/entropy_encode_static.h
deleted file mode 100644
index 3910af97ef8e..000000000000
--- a/BaseTools/Source/C/BrotliCompress/enc/entropy_encode_static.h
+++ /dev/null
@@ -1,539 +0,0 @@
-/* Copyright 2015 Google Inc. All Rights Reserved.
-
- Distributed under MIT license.
- See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
-*/
-
-/* Static entropy codes used for faster meta-block encoding. */
-
-#ifndef BROTLI_ENC_ENTROPY_ENCODE_STATIC_H_
-#define BROTLI_ENC_ENTROPY_ENCODE_STATIC_H_
-
-#include "../common/constants.h"
-#include "../common/platform.h"
-#include <brotli/types.h>
-#include "./write_bits.h"
-
-#if defined(__cplusplus) || defined(c_plusplus)
-extern "C" {
-#endif
-
-static const uint8_t kCodeLengthDepth[18] = {
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 5, 5, 0, 4, 4,
-};
-
-static const uint8_t kStaticCommandCodeDepth[BROTLI_NUM_COMMAND_SYMBOLS] = {
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
- 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
- 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
- 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
- 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
- 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
- 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
- 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
- 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
- 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
- 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
- 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
- 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
- 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
- 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
- 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
-};
-
-static const uint8_t kStaticDistanceCodeDepth[64] = {
- 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
- 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
- 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
- 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
-};
-
-static const uint32_t kCodeLengthBits[18] = {
- 0, 8, 4, 12, 2, 10, 6, 14, 1, 9, 5, 13, 3, 15, 31, 0, 11, 7,
-};
-
-static BROTLI_INLINE void StoreStaticCodeLengthCode(
- size_t* storage_ix, uint8_t* storage) {
- BrotliWriteBits(
- 40, BROTLI_MAKE_UINT64_T(0x0000FFu, 0x55555554u), storage_ix, storage);
-}
-
-static const uint64_t kZeroRepsBits[BROTLI_NUM_COMMAND_SYMBOLS] = {
- 0x00000000, 0x00000000, 0x00000000, 0x00000007, 0x00000017, 0x00000027,
- 0x00000037, 0x00000047, 0x00000057, 0x00000067, 0x00000077, 0x00000770,
- 0x00000b87, 0x00001387, 0x00001b87, 0x00002387, 0x00002b87, 0x00003387,
- 0x00003b87, 0x00000397, 0x00000b97, 0x00001397, 0x00001b97, 0x00002397,
- 0x00002b97, 0x00003397, 0x00003b97, 0x000003a7, 0x00000ba7, 0x000013a7,
- 0x00001ba7, 0x000023a7, 0x00002ba7, 0x000033a7, 0x00003ba7, 0x000003b7,
- 0x00000bb7, 0x000013b7, 0x00001bb7, 0x000023b7, 0x00002bb7, 0x000033b7,
- 0x00003bb7, 0x000003c7, 0x00000bc7, 0x000013c7, 0x00001bc7, 0x000023c7,
- 0x00002bc7, 0x000033c7, 0x00003bc7, 0x000003d7, 0x00000bd7, 0x000013d7,
- 0x00001bd7, 0x000023d7, 0x00002bd7, 0x000033d7, 0x00003bd7, 0x000003e7,
- 0x00000be7, 0x000013e7, 0x00001be7, 0x000023e7, 0x00002be7, 0x000033e7,
- 0x00003be7, 0x000003f7, 0x00000bf7, 0x000013f7, 0x00001bf7, 0x000023f7,
- 0x00002bf7, 0x000033f7, 0x00003bf7, 0x0001c387, 0x0005c387, 0x0009c387,
- 0x000dc387, 0x0011c387, 0x0015c387, 0x0019c387, 0x001dc387, 0x0001cb87,
- 0x0005cb87, 0x0009cb87, 0x000dcb87, 0x0011cb87, 0x0015cb87, 0x0019cb87,
- 0x001dcb87, 0x0001d387, 0x0005d387, 0x0009d387, 0x000dd387, 0x0011d387,
- 0x0015d387, 0x0019d387, 0x001dd387, 0x0001db87, 0x0005db87, 0x0009db87,
- 0x000ddb87, 0x0011db87, 0x0015db87, 0x0019db87, 0x001ddb87, 0x0001e387,
- 0x0005e387, 0x0009e387, 0x000de387, 0x0011e387, 0x0015e387, 0x0019e387,
- 0x001de387, 0x0001eb87, 0x0005eb87, 0x0009eb87, 0x000deb87, 0x0011eb87,
- 0x0015eb87, 0x0019eb87, 0x001deb87, 0x0001f387, 0x0005f387, 0x0009f387,
- 0x000df387, 0x0011f387, 0x0015f387, 0x0019f387, 0x001df387, 0x0001fb87,
- 0x0005fb87, 0x0009fb87, 0x000dfb87, 0x0011fb87, 0x0015fb87, 0x0019fb87,
- 0x001dfb87, 0x0001c397, 0x0005c397, 0x0009c397, 0x000dc397, 0x0011c397,
- 0x0015c397, 0x0019c397, 0x001dc397, 0x0001cb97, 0x0005cb97, 0x0009cb97,
- 0x000dcb97, 0x0011cb97, 0x0015cb97, 0x0019cb97, 0x001dcb97, 0x0001d397,
- 0x0005d397, 0x0009d397, 0x000dd397, 0x0011d397, 0x0015d397, 0x0019d397,
- 0x001dd397, 0x0001db97, 0x0005db97, 0x0009db97, 0x000ddb97, 0x0011db97,
- 0x0015db97, 0x0019db97, 0x001ddb97, 0x0001e397, 0x0005e397, 0x0009e397,
- 0x000de397, 0x0011e397, 0x0015e397, 0x0019e397, 0x001de397, 0x0001eb97,
- 0x0005eb97, 0x0009eb97, 0x000deb97, 0x0011eb97, 0x0015eb97, 0x0019eb97,
- 0x001deb97, 0x0001f397, 0x0005f397, 0x0009f397, 0x000df397, 0x0011f397,
- 0x0015f397, 0x0019f397, 0x001df397, 0x0001fb97, 0x0005fb97, 0x0009fb97,
- 0x000dfb97, 0x0011fb97, 0x0015fb97, 0x0019fb97, 0x001dfb97, 0x0001c3a7,
- 0x0005c3a7, 0x0009c3a7, 0x000dc3a7, 0x0011c3a7, 0x0015c3a7, 0x0019c3a7,
- 0x001dc3a7, 0x0001cba7, 0x0005cba7, 0x0009cba7, 0x000dcba7, 0x0011cba7,
- 0x0015cba7, 0x0019cba7, 0x001dcba7, 0x0001d3a7, 0x0005d3a7, 0x0009d3a7,
- 0x000dd3a7, 0x0011d3a7, 0x0015d3a7, 0x0019d3a7, 0x001dd3a7, 0x0001dba7,
- 0x0005dba7, 0x0009dba7, 0x000ddba7, 0x0011dba7, 0x0015dba7, 0x0019dba7,
- 0x001ddba7, 0x0001e3a7, 0x0005e3a7, 0x0009e3a7, 0x000de3a7, 0x0011e3a7,
- 0x0015e3a7, 0x0019e3a7, 0x001de3a7, 0x0001eba7, 0x0005eba7, 0x0009eba7,
- 0x000deba7, 0x0011eba7, 0x0015eba7, 0x0019eba7, 0x001deba7, 0x0001f3a7,
- 0x0005f3a7, 0x0009f3a7, 0x000df3a7, 0x0011f3a7, 0x0015f3a7, 0x0019f3a7,
- 0x001df3a7, 0x0001fba7, 0x0005fba7, 0x0009fba7, 0x000dfba7, 0x0011fba7,
- 0x0015fba7, 0x0019fba7, 0x001dfba7, 0x0001c3b7, 0x0005c3b7, 0x0009c3b7,
- 0x000dc3b7, 0x0011c3b7, 0x0015c3b7, 0x0019c3b7, 0x001dc3b7, 0x0001cbb7,
- 0x0005cbb7, 0x0009cbb7, 0x000dcbb7, 0x0011cbb7, 0x0015cbb7, 0x0019cbb7,
- 0x001dcbb7, 0x0001d3b7, 0x0005d3b7, 0x0009d3b7, 0x000dd3b7, 0x0011d3b7,
- 0x0015d3b7, 0x0019d3b7, 0x001dd3b7, 0x0001dbb7, 0x0005dbb7, 0x0009dbb7,
- 0x000ddbb7, 0x0011dbb7, 0x0015dbb7, 0x0019dbb7, 0x001ddbb7, 0x0001e3b7,
- 0x0005e3b7, 0x0009e3b7, 0x000de3b7, 0x0011e3b7, 0x0015e3b7, 0x0019e3b7,
- 0x001de3b7, 0x0001ebb7, 0x0005ebb7, 0x0009ebb7, 0x000debb7, 0x0011ebb7,
- 0x0015ebb7, 0x0019ebb7, 0x001debb7, 0x0001f3b7, 0x0005f3b7, 0x0009f3b7,
- 0x000df3b7, 0x0011f3b7, 0x0015f3b7, 0x0019f3b7, 0x001df3b7, 0x0001fbb7,
- 0x0005fbb7, 0x0009fbb7, 0x000dfbb7, 0x0011fbb7, 0x0015fbb7, 0x0019fbb7,
- 0x001dfbb7, 0x0001c3c7, 0x0005c3c7, 0x0009c3c7, 0x000dc3c7, 0x0011c3c7,
- 0x0015c3c7, 0x0019c3c7, 0x001dc3c7, 0x0001cbc7, 0x0005cbc7, 0x0009cbc7,
- 0x000dcbc7, 0x0011cbc7, 0x0015cbc7, 0x0019cbc7, 0x001dcbc7, 0x0001d3c7,
- 0x0005d3c7, 0x0009d3c7, 0x000dd3c7, 0x0011d3c7, 0x0015d3c7, 0x0019d3c7,
- 0x001dd3c7, 0x0001dbc7, 0x0005dbc7, 0x0009dbc7, 0x000ddbc7, 0x0011dbc7,
- 0x0015dbc7, 0x0019dbc7, 0x001ddbc7, 0x0001e3c7, 0x0005e3c7, 0x0009e3c7,
- 0x000de3c7, 0x0011e3c7, 0x0015e3c7, 0x0019e3c7, 0x001de3c7, 0x0001ebc7,
- 0x0005ebc7, 0x0009ebc7, 0x000debc7, 0x0011ebc7, 0x0015ebc7, 0x0019ebc7,
- 0x001debc7, 0x0001f3c7, 0x0005f3c7, 0x0009f3c7, 0x000df3c7, 0x0011f3c7,
- 0x0015f3c7, 0x0019f3c7, 0x001df3c7, 0x0001fbc7, 0x0005fbc7, 0x0009fbc7,
- 0x000dfbc7, 0x0011fbc7, 0x0015fbc7, 0x0019fbc7, 0x001dfbc7, 0x0001c3d7,
- 0x0005c3d7, 0x0009c3d7, 0x000dc3d7, 0x0011c3d7, 0x0015c3d7, 0x0019c3d7,
- 0x001dc3d7, 0x0001cbd7, 0x0005cbd7, 0x0009cbd7, 0x000dcbd7, 0x0011cbd7,
- 0x0015cbd7, 0x0019cbd7, 0x001dcbd7, 0x0001d3d7, 0x0005d3d7, 0x0009d3d7,
- 0x000dd3d7, 0x0011d3d7, 0x0015d3d7, 0x0019d3d7, 0x001dd3d7, 0x0001dbd7,
- 0x0005dbd7, 0x0009dbd7, 0x000ddbd7, 0x0011dbd7, 0x0015dbd7, 0x0019dbd7,
- 0x001ddbd7, 0x0001e3d7, 0x0005e3d7, 0x0009e3d7, 0x000de3d7, 0x0011e3d7,
- 0x0015e3d7, 0x0019e3d7, 0x001de3d7, 0x0001ebd7, 0x0005ebd7, 0x0009ebd7,
- 0x000debd7, 0x0011ebd7, 0x0015ebd7, 0x0019ebd7, 0x001debd7, 0x0001f3d7,
- 0x0005f3d7, 0x0009f3d7, 0x000df3d7, 0x0011f3d7, 0x0015f3d7, 0x0019f3d7,
- 0x001df3d7, 0x0001fbd7, 0x0005fbd7, 0x0009fbd7, 0x000dfbd7, 0x0011fbd7,
- 0x0015fbd7, 0x0019fbd7, 0x001dfbd7, 0x0001c3e7, 0x0005c3e7, 0x0009c3e7,
- 0x000dc3e7, 0x0011c3e7, 0x0015c3e7, 0x0019c3e7, 0x001dc3e7, 0x0001cbe7,
- 0x0005cbe7, 0x0009cbe7, 0x000dcbe7, 0x0011cbe7, 0x0015cbe7, 0x0019cbe7,
- 0x001dcbe7, 0x0001d3e7, 0x0005d3e7, 0x0009d3e7, 0x000dd3e7, 0x0011d3e7,
- 0x0015d3e7, 0x0019d3e7, 0x001dd3e7, 0x0001dbe7, 0x0005dbe7, 0x0009dbe7,
- 0x000ddbe7, 0x0011dbe7, 0x0015dbe7, 0x0019dbe7, 0x001ddbe7, 0x0001e3e7,
- 0x0005e3e7, 0x0009e3e7, 0x000de3e7, 0x0011e3e7, 0x0015e3e7, 0x0019e3e7,
- 0x001de3e7, 0x0001ebe7, 0x0005ebe7, 0x0009ebe7, 0x000debe7, 0x0011ebe7,
- 0x0015ebe7, 0x0019ebe7, 0x001debe7, 0x0001f3e7, 0x0005f3e7, 0x0009f3e7,
- 0x000df3e7, 0x0011f3e7, 0x0015f3e7, 0x0019f3e7, 0x001df3e7, 0x0001fbe7,
- 0x0005fbe7, 0x0009fbe7, 0x000dfbe7, 0x0011fbe7, 0x0015fbe7, 0x0019fbe7,
- 0x001dfbe7, 0x0001c3f7, 0x0005c3f7, 0x0009c3f7, 0x000dc3f7, 0x0011c3f7,
- 0x0015c3f7, 0x0019c3f7, 0x001dc3f7, 0x0001cbf7, 0x0005cbf7, 0x0009cbf7,
- 0x000dcbf7, 0x0011cbf7, 0x0015cbf7, 0x0019cbf7, 0x001dcbf7, 0x0001d3f7,
- 0x0005d3f7, 0x0009d3f7, 0x000dd3f7, 0x0011d3f7, 0x0015d3f7, 0x0019d3f7,
- 0x001dd3f7, 0x0001dbf7, 0x0005dbf7, 0x0009dbf7, 0x000ddbf7, 0x0011dbf7,
- 0x0015dbf7, 0x0019dbf7, 0x001ddbf7, 0x0001e3f7, 0x0005e3f7, 0x0009e3f7,
- 0x000de3f7, 0x0011e3f7, 0x0015e3f7, 0x0019e3f7, 0x001de3f7, 0x0001ebf7,
- 0x0005ebf7, 0x0009ebf7, 0x000debf7, 0x0011ebf7, 0x0015ebf7, 0x0019ebf7,
- 0x001debf7, 0x0001f3f7, 0x0005f3f7, 0x0009f3f7, 0x000df3f7, 0x0011f3f7,
- 0x0015f3f7, 0x0019f3f7, 0x001df3f7, 0x0001fbf7, 0x0005fbf7, 0x0009fbf7,
- 0x000dfbf7, 0x0011fbf7, 0x0015fbf7, 0x0019fbf7, 0x001dfbf7, 0x00e1c387,
- 0x02e1c387, 0x04e1c387, 0x06e1c387, 0x08e1c387, 0x0ae1c387, 0x0ce1c387,
- 0x0ee1c387, 0x00e5c387, 0x02e5c387, 0x04e5c387, 0x06e5c387, 0x08e5c387,
- 0x0ae5c387, 0x0ce5c387, 0x0ee5c387, 0x00e9c387, 0x02e9c387, 0x04e9c387,
- 0x06e9c387, 0x08e9c387, 0x0ae9c387, 0x0ce9c387, 0x0ee9c387, 0x00edc387,
- 0x02edc387, 0x04edc387, 0x06edc387, 0x08edc387, 0x0aedc387, 0x0cedc387,
- 0x0eedc387, 0x00f1c387, 0x02f1c387, 0x04f1c387, 0x06f1c387, 0x08f1c387,
- 0x0af1c387, 0x0cf1c387, 0x0ef1c387, 0x00f5c387, 0x02f5c387, 0x04f5c387,
- 0x06f5c387, 0x08f5c387, 0x0af5c387, 0x0cf5c387, 0x0ef5c387, 0x00f9c387,
- 0x02f9c387, 0x04f9c387, 0x06f9c387, 0x08f9c387, 0x0af9c387, 0x0cf9c387,
- 0x0ef9c387, 0x00fdc387, 0x02fdc387, 0x04fdc387, 0x06fdc387, 0x08fdc387,
- 0x0afdc387, 0x0cfdc387, 0x0efdc387, 0x00e1cb87, 0x02e1cb87, 0x04e1cb87,
- 0x06e1cb87, 0x08e1cb87, 0x0ae1cb87, 0x0ce1cb87, 0x0ee1cb87, 0x00e5cb87,
- 0x02e5cb87, 0x04e5cb87, 0x06e5cb87, 0x08e5cb87, 0x0ae5cb87, 0x0ce5cb87,
- 0x0ee5cb87, 0x00e9cb87, 0x02e9cb87, 0x04e9cb87, 0x06e9cb87, 0x08e9cb87,
- 0x0ae9cb87, 0x0ce9cb87, 0x0ee9cb87, 0x00edcb87, 0x02edcb87, 0x04edcb87,
- 0x06edcb87, 0x08edcb87, 0x0aedcb87, 0x0cedcb87, 0x0eedcb87, 0x00f1cb87,
- 0x02f1cb87, 0x04f1cb87, 0x06f1cb87, 0x08f1cb87, 0x0af1cb87, 0x0cf1cb87,
- 0x0ef1cb87, 0x00f5cb87, 0x02f5cb87, 0x04f5cb87, 0x06f5cb87, 0x08f5cb87,
- 0x0af5cb87, 0x0cf5cb87, 0x0ef5cb87, 0x00f9cb87, 0x02f9cb87, 0x04f9cb87,
- 0x06f9cb87, 0x08f9cb87,
-};
-
-static const uint32_t kZeroRepsDepth[BROTLI_NUM_COMMAND_SYMBOLS] = {
- 0, 4, 8, 7, 7, 7, 7, 7, 7, 7, 7, 11, 14, 14, 14, 14,
- 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
- 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
- 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
- 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 21, 21, 21, 21, 21,
- 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
- 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
- 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
- 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
- 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
- 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
- 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
- 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
- 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
- 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
- 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
- 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
- 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
- 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
- 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
- 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
- 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
- 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
- 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
- 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
- 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
- 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
- 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
- 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
- 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
- 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
- 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
- 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
- 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
- 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
- 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
- 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 28, 28, 28, 28, 28,
- 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
- 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
- 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
- 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
- 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
- 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
- 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
-};
-
-static const uint64_t kNonZeroRepsBits[BROTLI_NUM_COMMAND_SYMBOLS] = {
- 0x0000000b, 0x0000001b, 0x0000002b, 0x0000003b, 0x000002cb, 0x000006cb,
- 0x00000acb, 0x00000ecb, 0x000002db, 0x000006db, 0x00000adb, 0x00000edb,
- 0x000002eb, 0x000006eb, 0x00000aeb, 0x00000eeb, 0x000002fb, 0x000006fb,
- 0x00000afb, 0x00000efb, 0x0000b2cb, 0x0001b2cb, 0x0002b2cb, 0x0003b2cb,
- 0x0000b6cb, 0x0001b6cb, 0x0002b6cb, 0x0003b6cb, 0x0000bacb, 0x0001bacb,
- 0x0002bacb, 0x0003bacb, 0x0000becb, 0x0001becb, 0x0002becb, 0x0003becb,
- 0x0000b2db, 0x0001b2db, 0x0002b2db, 0x0003b2db, 0x0000b6db, 0x0001b6db,
- 0x0002b6db, 0x0003b6db, 0x0000badb, 0x0001badb, 0x0002badb, 0x0003badb,
- 0x0000bedb, 0x0001bedb, 0x0002bedb, 0x0003bedb, 0x0000b2eb, 0x0001b2eb,
- 0x0002b2eb, 0x0003b2eb, 0x0000b6eb, 0x0001b6eb, 0x0002b6eb, 0x0003b6eb,
- 0x0000baeb, 0x0001baeb, 0x0002baeb, 0x0003baeb, 0x0000beeb, 0x0001beeb,
- 0x0002beeb, 0x0003beeb, 0x0000b2fb, 0x0001b2fb, 0x0002b2fb, 0x0003b2fb,
- 0x0000b6fb, 0x0001b6fb, 0x0002b6fb, 0x0003b6fb, 0x0000bafb, 0x0001bafb,
- 0x0002bafb, 0x0003bafb, 0x0000befb, 0x0001befb, 0x0002befb, 0x0003befb,
- 0x002cb2cb, 0x006cb2cb, 0x00acb2cb, 0x00ecb2cb, 0x002db2cb, 0x006db2cb,
- 0x00adb2cb, 0x00edb2cb, 0x002eb2cb, 0x006eb2cb, 0x00aeb2cb, 0x00eeb2cb,
- 0x002fb2cb, 0x006fb2cb, 0x00afb2cb, 0x00efb2cb, 0x002cb6cb, 0x006cb6cb,
- 0x00acb6cb, 0x00ecb6cb, 0x002db6cb, 0x006db6cb, 0x00adb6cb, 0x00edb6cb,
- 0x002eb6cb, 0x006eb6cb, 0x00aeb6cb, 0x00eeb6cb, 0x002fb6cb, 0x006fb6cb,
- 0x00afb6cb, 0x00efb6cb, 0x002cbacb, 0x006cbacb, 0x00acbacb, 0x00ecbacb,
- 0x002dbacb, 0x006dbacb, 0x00adbacb, 0x00edbacb, 0x002ebacb, 0x006ebacb,
- 0x00aebacb, 0x00eebacb, 0x002fbacb, 0x006fbacb, 0x00afbacb, 0x00efbacb,
- 0x002cbecb, 0x006cbecb, 0x00acbecb, 0x00ecbecb, 0x002dbecb, 0x006dbecb,
- 0x00adbecb, 0x00edbecb, 0x002ebecb, 0x006ebecb, 0x00aebecb, 0x00eebecb,
- 0x002fbecb, 0x006fbecb, 0x00afbecb, 0x00efbecb, 0x002cb2db, 0x006cb2db,
- 0x00acb2db, 0x00ecb2db, 0x002db2db, 0x006db2db, 0x00adb2db, 0x00edb2db,
- 0x002eb2db, 0x006eb2db, 0x00aeb2db, 0x00eeb2db, 0x002fb2db, 0x006fb2db,
- 0x00afb2db, 0x00efb2db, 0x002cb6db, 0x006cb6db, 0x00acb6db, 0x00ecb6db,
- 0x002db6db, 0x006db6db, 0x00adb6db, 0x00edb6db, 0x002eb6db, 0x006eb6db,
- 0x00aeb6db, 0x00eeb6db, 0x002fb6db, 0x006fb6db, 0x00afb6db, 0x00efb6db,
- 0x002cbadb, 0x006cbadb, 0x00acbadb, 0x00ecbadb, 0x002dbadb, 0x006dbadb,
- 0x00adbadb, 0x00edbadb, 0x002ebadb, 0x006ebadb, 0x00aebadb, 0x00eebadb,
- 0x002fbadb, 0x006fbadb, 0x00afbadb, 0x00efbadb, 0x002cbedb, 0x006cbedb,
- 0x00acbedb, 0x00ecbedb, 0x002dbedb, 0x006dbedb, 0x00adbedb, 0x00edbedb,
- 0x002ebedb, 0x006ebedb, 0x00aebedb, 0x00eebedb, 0x002fbedb, 0x006fbedb,
- 0x00afbedb, 0x00efbedb, 0x002cb2eb, 0x006cb2eb, 0x00acb2eb, 0x00ecb2eb,
- 0x002db2eb, 0x006db2eb, 0x00adb2eb, 0x00edb2eb, 0x002eb2eb, 0x006eb2eb,
- 0x00aeb2eb, 0x00eeb2eb, 0x002fb2eb, 0x006fb2eb, 0x00afb2eb, 0x00efb2eb,
- 0x002cb6eb, 0x006cb6eb, 0x00acb6eb, 0x00ecb6eb, 0x002db6eb, 0x006db6eb,
- 0x00adb6eb, 0x00edb6eb, 0x002eb6eb, 0x006eb6eb, 0x00aeb6eb, 0x00eeb6eb,
- 0x002fb6eb, 0x006fb6eb, 0x00afb6eb, 0x00efb6eb, 0x002cbaeb, 0x006cbaeb,
- 0x00acbaeb, 0x00ecbaeb, 0x002dbaeb, 0x006dbaeb, 0x00adbaeb, 0x00edbaeb,
- 0x002ebaeb, 0x006ebaeb, 0x00aebaeb, 0x00eebaeb, 0x002fbaeb, 0x006fbaeb,
- 0x00afbaeb, 0x00efbaeb, 0x002cbeeb, 0x006cbeeb, 0x00acbeeb, 0x00ecbeeb,
- 0x002dbeeb, 0x006dbeeb, 0x00adbeeb, 0x00edbeeb, 0x002ebeeb, 0x006ebeeb,
- 0x00aebeeb, 0x00eebeeb, 0x002fbeeb, 0x006fbeeb, 0x00afbeeb, 0x00efbeeb,
- 0x002cb2fb, 0x006cb2fb, 0x00acb2fb, 0x00ecb2fb, 0x002db2fb, 0x006db2fb,
- 0x00adb2fb, 0x00edb2fb, 0x002eb2fb, 0x006eb2fb, 0x00aeb2fb, 0x00eeb2fb,
- 0x002fb2fb, 0x006fb2fb, 0x00afb2fb, 0x00efb2fb, 0x002cb6fb, 0x006cb6fb,
- 0x00acb6fb, 0x00ecb6fb, 0x002db6fb, 0x006db6fb, 0x00adb6fb, 0x00edb6fb,
- 0x002eb6fb, 0x006eb6fb, 0x00aeb6fb, 0x00eeb6fb, 0x002fb6fb, 0x006fb6fb,
- 0x00afb6fb, 0x00efb6fb, 0x002cbafb, 0x006cbafb, 0x00acbafb, 0x00ecbafb,
- 0x002dbafb, 0x006dbafb, 0x00adbafb, 0x00edbafb, 0x002ebafb, 0x006ebafb,
- 0x00aebafb, 0x00eebafb, 0x002fbafb, 0x006fbafb, 0x00afbafb, 0x00efbafb,
- 0x002cbefb, 0x006cbefb, 0x00acbefb, 0x00ecbefb, 0x002dbefb, 0x006dbefb,
- 0x00adbefb, 0x00edbefb, 0x002ebefb, 0x006ebefb, 0x00aebefb, 0x00eebefb,
- 0x002fbefb, 0x006fbefb, 0x00afbefb, 0x00efbefb, 0x0b2cb2cb, 0x1b2cb2cb,
- 0x2b2cb2cb, 0x3b2cb2cb, 0x0b6cb2cb, 0x1b6cb2cb, 0x2b6cb2cb, 0x3b6cb2cb,
- 0x0bacb2cb, 0x1bacb2cb, 0x2bacb2cb, 0x3bacb2cb, 0x0becb2cb, 0x1becb2cb,
- 0x2becb2cb, 0x3becb2cb, 0x0b2db2cb, 0x1b2db2cb, 0x2b2db2cb, 0x3b2db2cb,
- 0x0b6db2cb, 0x1b6db2cb, 0x2b6db2cb, 0x3b6db2cb, 0x0badb2cb, 0x1badb2cb,
- 0x2badb2cb, 0x3badb2cb, 0x0bedb2cb, 0x1bedb2cb, 0x2bedb2cb, 0x3bedb2cb,
- 0x0b2eb2cb, 0x1b2eb2cb, 0x2b2eb2cb, 0x3b2eb2cb, 0x0b6eb2cb, 0x1b6eb2cb,
- 0x2b6eb2cb, 0x3b6eb2cb, 0x0baeb2cb, 0x1baeb2cb, 0x2baeb2cb, 0x3baeb2cb,
- 0x0beeb2cb, 0x1beeb2cb, 0x2beeb2cb, 0x3beeb2cb, 0x0b2fb2cb, 0x1b2fb2cb,
- 0x2b2fb2cb, 0x3b2fb2cb, 0x0b6fb2cb, 0x1b6fb2cb, 0x2b6fb2cb, 0x3b6fb2cb,
- 0x0bafb2cb, 0x1bafb2cb, 0x2bafb2cb, 0x3bafb2cb, 0x0befb2cb, 0x1befb2cb,
- 0x2befb2cb, 0x3befb2cb, 0x0b2cb6cb, 0x1b2cb6cb, 0x2b2cb6cb, 0x3b2cb6cb,
- 0x0b6cb6cb, 0x1b6cb6cb, 0x2b6cb6cb, 0x3b6cb6cb, 0x0bacb6cb, 0x1bacb6cb,
- 0x2bacb6cb, 0x3bacb6cb, 0x0becb6cb, 0x1becb6cb, 0x2becb6cb, 0x3becb6cb,
- 0x0b2db6cb, 0x1b2db6cb, 0x2b2db6cb, 0x3b2db6cb, 0x0b6db6cb, 0x1b6db6cb,
- 0x2b6db6cb, 0x3b6db6cb, 0x0badb6cb, 0x1badb6cb, 0x2badb6cb, 0x3badb6cb,
- 0x0bedb6cb, 0x1bedb6cb, 0x2bedb6cb, 0x3bedb6cb, 0x0b2eb6cb, 0x1b2eb6cb,
- 0x2b2eb6cb, 0x3b2eb6cb, 0x0b6eb6cb, 0x1b6eb6cb, 0x2b6eb6cb, 0x3b6eb6cb,
- 0x0baeb6cb, 0x1baeb6cb, 0x2baeb6cb, 0x3baeb6cb, 0x0beeb6cb, 0x1beeb6cb,
- 0x2beeb6cb, 0x3beeb6cb, 0x0b2fb6cb, 0x1b2fb6cb, 0x2b2fb6cb, 0x3b2fb6cb,
- 0x0b6fb6cb, 0x1b6fb6cb, 0x2b6fb6cb, 0x3b6fb6cb, 0x0bafb6cb, 0x1bafb6cb,
- 0x2bafb6cb, 0x3bafb6cb, 0x0befb6cb, 0x1befb6cb, 0x2befb6cb, 0x3befb6cb,
- 0x0b2cbacb, 0x1b2cbacb, 0x2b2cbacb, 0x3b2cbacb, 0x0b6cbacb, 0x1b6cbacb,
- 0x2b6cbacb, 0x3b6cbacb, 0x0bacbacb, 0x1bacbacb, 0x2bacbacb, 0x3bacbacb,
- 0x0becbacb, 0x1becbacb, 0x2becbacb, 0x3becbacb, 0x0b2dbacb, 0x1b2dbacb,
- 0x2b2dbacb, 0x3b2dbacb, 0x0b6dbacb, 0x1b6dbacb, 0x2b6dbacb, 0x3b6dbacb,
- 0x0badbacb, 0x1badbacb, 0x2badbacb, 0x3badbacb, 0x0bedbacb, 0x1bedbacb,
- 0x2bedbacb, 0x3bedbacb, 0x0b2ebacb, 0x1b2ebacb, 0x2b2ebacb, 0x3b2ebacb,
- 0x0b6ebacb, 0x1b6ebacb, 0x2b6ebacb, 0x3b6ebacb, 0x0baebacb, 0x1baebacb,
- 0x2baebacb, 0x3baebacb, 0x0beebacb, 0x1beebacb, 0x2beebacb, 0x3beebacb,
- 0x0b2fbacb, 0x1b2fbacb, 0x2b2fbacb, 0x3b2fbacb, 0x0b6fbacb, 0x1b6fbacb,
- 0x2b6fbacb, 0x3b6fbacb, 0x0bafbacb, 0x1bafbacb, 0x2bafbacb, 0x3bafbacb,
- 0x0befbacb, 0x1befbacb, 0x2befbacb, 0x3befbacb, 0x0b2cbecb, 0x1b2cbecb,
- 0x2b2cbecb, 0x3b2cbecb, 0x0b6cbecb, 0x1b6cbecb, 0x2b6cbecb, 0x3b6cbecb,
- 0x0bacbecb, 0x1bacbecb, 0x2bacbecb, 0x3bacbecb, 0x0becbecb, 0x1becbecb,
- 0x2becbecb, 0x3becbecb, 0x0b2dbecb, 0x1b2dbecb, 0x2b2dbecb, 0x3b2dbecb,
- 0x0b6dbecb, 0x1b6dbecb, 0x2b6dbecb, 0x3b6dbecb, 0x0badbecb, 0x1badbecb,
- 0x2badbecb, 0x3badbecb, 0x0bedbecb, 0x1bedbecb, 0x2bedbecb, 0x3bedbecb,
- 0x0b2ebecb, 0x1b2ebecb, 0x2b2ebecb, 0x3b2ebecb, 0x0b6ebecb, 0x1b6ebecb,
- 0x2b6ebecb, 0x3b6ebecb, 0x0baebecb, 0x1baebecb, 0x2baebecb, 0x3baebecb,
- 0x0beebecb, 0x1beebecb, 0x2beebecb, 0x3beebecb, 0x0b2fbecb, 0x1b2fbecb,
- 0x2b2fbecb, 0x3b2fbecb, 0x0b6fbecb, 0x1b6fbecb, 0x2b6fbecb, 0x3b6fbecb,
- 0x0bafbecb, 0x1bafbecb, 0x2bafbecb, 0x3bafbecb, 0x0befbecb, 0x1befbecb,
- 0x2befbecb, 0x3befbecb, 0x0b2cb2db, 0x1b2cb2db, 0x2b2cb2db, 0x3b2cb2db,
- 0x0b6cb2db, 0x1b6cb2db, 0x2b6cb2db, 0x3b6cb2db, 0x0bacb2db, 0x1bacb2db,
- 0x2bacb2db, 0x3bacb2db, 0x0becb2db, 0x1becb2db, 0x2becb2db, 0x3becb2db,
- 0x0b2db2db, 0x1b2db2db, 0x2b2db2db, 0x3b2db2db, 0x0b6db2db, 0x1b6db2db,
- 0x2b6db2db, 0x3b6db2db, 0x0badb2db, 0x1badb2db, 0x2badb2db, 0x3badb2db,
- 0x0bedb2db, 0x1bedb2db, 0x2bedb2db, 0x3bedb2db, 0x0b2eb2db, 0x1b2eb2db,
- 0x2b2eb2db, 0x3b2eb2db, 0x0b6eb2db, 0x1b6eb2db, 0x2b6eb2db, 0x3b6eb2db,
- 0x0baeb2db, 0x1baeb2db, 0x2baeb2db, 0x3baeb2db, 0x0beeb2db, 0x1beeb2db,
- 0x2beeb2db, 0x3beeb2db, 0x0b2fb2db, 0x1b2fb2db, 0x2b2fb2db, 0x3b2fb2db,
- 0x0b6fb2db, 0x1b6fb2db, 0x2b6fb2db, 0x3b6fb2db, 0x0bafb2db, 0x1bafb2db,
- 0x2bafb2db, 0x3bafb2db, 0x0befb2db, 0x1befb2db, 0x2befb2db, 0x3befb2db,
- 0x0b2cb6db, 0x1b2cb6db, 0x2b2cb6db, 0x3b2cb6db, 0x0b6cb6db, 0x1b6cb6db,
- 0x2b6cb6db, 0x3b6cb6db, 0x0bacb6db, 0x1bacb6db, 0x2bacb6db, 0x3bacb6db,
- 0x0becb6db, 0x1becb6db, 0x2becb6db, 0x3becb6db, 0x0b2db6db, 0x1b2db6db,
- 0x2b2db6db, 0x3b2db6db, 0x0b6db6db, 0x1b6db6db, 0x2b6db6db, 0x3b6db6db,
- 0x0badb6db, 0x1badb6db, 0x2badb6db, 0x3badb6db, 0x0bedb6db, 0x1bedb6db,
- 0x2bedb6db, 0x3bedb6db, 0x0b2eb6db, 0x1b2eb6db, 0x2b2eb6db, 0x3b2eb6db,
- 0x0b6eb6db, 0x1b6eb6db, 0x2b6eb6db, 0x3b6eb6db, 0x0baeb6db, 0x1baeb6db,
- 0x2baeb6db, 0x3baeb6db,
-};
-
-static const uint32_t kNonZeroRepsDepth[BROTLI_NUM_COMMAND_SYMBOLS] = {
- 6, 6, 6, 6, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
- 12, 12, 12, 12, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
- 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
- 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
- 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
- 18, 18, 18, 18, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
- 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
- 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
- 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
- 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
- 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
- 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
- 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
- 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
- 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
- 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
- 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
- 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
- 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
- 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
- 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
- 24, 24, 24, 24, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,
-};
-
-static const uint16_t kStaticCommandCodeBits[BROTLI_NUM_COMMAND_SYMBOLS] = {
- 0, 256, 128, 384, 64, 320, 192, 448,
- 32, 288, 160, 416, 96, 352, 224, 480,
- 16, 272, 144, 400, 80, 336, 208, 464,
- 48, 304, 176, 432, 112, 368, 240, 496,
- 8, 264, 136, 392, 72, 328, 200, 456,
- 40, 296, 168, 424, 104, 360, 232, 488,
- 24, 280, 152, 408, 88, 344, 216, 472,
- 56, 312, 184, 440, 120, 376, 248, 504,
- 4, 260, 132, 388, 68, 324, 196, 452,
- 36, 292, 164, 420, 100, 356, 228, 484,
- 20, 276, 148, 404, 84, 340, 212, 468,
- 52, 308, 180, 436, 116, 372, 244, 500,
- 12, 268, 140, 396, 76, 332, 204, 460,
- 44, 300, 172, 428, 108, 364, 236, 492,
- 28, 284, 156, 412, 92, 348, 220, 476,
- 60, 316, 188, 444, 124, 380, 252, 508,
- 2, 258, 130, 386, 66, 322, 194, 450,
- 34, 290, 162, 418, 98, 354, 226, 482,
- 18, 274, 146, 402, 82, 338, 210, 466,
- 50, 306, 178, 434, 114, 370, 242, 498,
- 10, 266, 138, 394, 74, 330, 202, 458,
- 42, 298, 170, 426, 106, 362, 234, 490,
- 26, 282, 154, 410, 90, 346, 218, 474,
- 58, 314, 186, 442, 122, 378, 250, 506,
- 6, 262, 134, 390, 70, 326, 198, 454,
- 38, 294, 166, 422, 102, 358, 230, 486,
- 22, 278, 150, 406, 86, 342, 214, 470,
- 54, 310, 182, 438, 118, 374, 246, 502,
- 14, 270, 142, 398, 78, 334, 206, 462,
- 46, 302, 174, 430, 110, 366, 238, 494,
- 30, 286, 158, 414, 94, 350, 222, 478,
- 62, 318, 190, 446, 126, 382, 254, 510,
- 1, 257, 129, 385, 65, 321, 193, 449,
- 33, 289, 161, 417, 97, 353, 225, 481,
- 17, 273, 145, 401, 81, 337, 209, 465,
- 49, 305, 177, 433, 113, 369, 241, 497,
- 9, 265, 137, 393, 73, 329, 201, 457,
- 41, 297, 169, 425, 105, 361, 233, 489,
- 25, 281, 153, 409, 89, 345, 217, 473,
- 57, 313, 185, 441, 121, 377, 249, 505,
- 5, 261, 133, 389, 69, 325, 197, 453,
- 37, 293, 165, 421, 101, 357, 229, 485,
- 21, 277, 149, 405, 85, 341, 213, 469,
- 53, 309, 181, 437, 117, 373, 245, 501,
- 13, 269, 141, 397, 77, 333, 205, 461,
- 45, 301, 173, 429, 109, 365, 237, 493,
- 29, 285, 157, 413, 93, 349, 221, 477,
- 61, 317, 189, 445, 125, 381, 253, 509,
- 3, 259, 131, 387, 67, 323, 195, 451,
- 35, 291, 163, 419, 99, 355, 227, 483,
- 19, 275, 147, 403, 83, 339, 211, 467,
- 51, 307, 179, 435, 115, 371, 243, 499,
- 11, 267, 139, 395, 75, 331, 203, 459,
- 43, 299, 171, 427, 107, 363, 235, 491,
- 27, 283, 155, 411, 91, 347, 219, 475,
- 59, 315, 187, 443, 123, 379, 251, 507,
- 7, 1031, 519, 1543, 263, 1287, 775, 1799,
- 135, 1159, 647, 1671, 391, 1415, 903, 1927,
- 71, 1095, 583, 1607, 327, 1351, 839, 1863,
- 199, 1223, 711, 1735, 455, 1479, 967, 1991,
- 39, 1063, 551, 1575, 295, 1319, 807, 1831,
- 167, 1191, 679, 1703, 423, 1447, 935, 1959,
- 103, 1127, 615, 1639, 359, 1383, 871, 1895,
- 231, 1255, 743, 1767, 487, 1511, 999, 2023,
- 23, 1047, 535, 1559, 279, 1303, 791, 1815,
- 151, 1175, 663, 1687, 407, 1431, 919, 1943,
- 87, 1111, 599, 1623, 343, 1367, 855, 1879,
- 215, 1239, 727, 1751, 471, 1495, 983, 2007,
- 55, 1079, 567, 1591, 311, 1335, 823, 1847,
- 183, 1207, 695, 1719, 439, 1463, 951, 1975,
- 119, 1143, 631, 1655, 375, 1399, 887, 1911,
- 247, 1271, 759, 1783, 503, 1527, 1015, 2039,
- 15, 1039, 527, 1551, 271, 1295, 783, 1807,
- 143, 1167, 655, 1679, 399, 1423, 911, 1935,
- 79, 1103, 591, 1615, 335, 1359, 847, 1871,
- 207, 1231, 719, 1743, 463, 1487, 975, 1999,
- 47, 1071, 559, 1583, 303, 1327, 815, 1839,
- 175, 1199, 687, 1711, 431, 1455, 943, 1967,
- 111, 1135, 623, 1647, 367, 1391, 879, 1903,
- 239, 1263, 751, 1775, 495, 1519, 1007, 2031,
- 31, 1055, 543, 1567, 287, 1311, 799, 1823,
- 159, 1183, 671, 1695, 415, 1439, 927, 1951,
- 95, 1119, 607, 1631, 351, 1375, 863, 1887,
- 223, 1247, 735, 1759, 479, 1503, 991, 2015,
- 63, 1087, 575, 1599, 319, 1343, 831, 1855,
- 191, 1215, 703, 1727, 447, 1471, 959, 1983,
- 127, 1151, 639, 1663, 383, 1407, 895, 1919,
- 255, 1279, 767, 1791, 511, 1535, 1023, 2047,
-};
-
-static BROTLI_INLINE void StoreStaticCommandHuffmanTree(
- size_t* storage_ix, uint8_t* storage) {
- BrotliWriteBits(
- 56, BROTLI_MAKE_UINT64_T(0x926244U, 0x16307003U), storage_ix, storage);
- BrotliWriteBits(3, 0x00000000U, storage_ix, storage);
-}
-
-static const uint16_t kStaticDistanceCodeBits[64] = {
- 0, 32, 16, 48, 8, 40, 24, 56, 4, 36, 20, 52, 12, 44, 28, 60,
- 2, 34, 18, 50, 10, 42, 26, 58, 6, 38, 22, 54, 14, 46, 30, 62,
- 1, 33, 17, 49, 9, 41, 25, 57, 5, 37, 21, 53, 13, 45, 29, 61,
- 3, 35, 19, 51, 11, 43, 27, 59, 7, 39, 23, 55, 15, 47, 31, 63,
-};
-
-static BROTLI_INLINE void StoreStaticDistanceHuffmanTree(
- size_t* storage_ix, uint8_t* storage) {
- BrotliWriteBits(28, 0x0369DC03u, storage_ix, storage);
-}
-
-#if defined(__cplusplus) || defined(c_plusplus)
-} /* extern "C" */
-#endif
-
-#endif /* BROTLI_ENC_ENTROPY_ENCODE_STATIC_H_ */
diff --git a/BaseTools/Source/C/BrotliCompress/enc/fast_log.h b/BaseTools/Source/C/BrotliCompress/enc/fast_log.h
deleted file mode 100644
index dabc45ee96b8..000000000000
--- a/BaseTools/Source/C/BrotliCompress/enc/fast_log.h
+++ /dev/null
@@ -1,147 +0,0 @@
-/* Copyright 2013 Google Inc. All Rights Reserved.
-
- Distributed under MIT license.
- See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
-*/
-
-/* Utilities for fast computation of logarithms. */
-
-#ifndef BROTLI_ENC_FAST_LOG_H_
-#define BROTLI_ENC_FAST_LOG_H_
-
-#include <math.h>
-
-#include "../common/platform.h"
-#include <brotli/types.h>
-
-#if defined(__cplusplus) || defined(c_plusplus)
-extern "C" {
-#endif
-
-static BROTLI_INLINE uint32_t Log2FloorNonZero(size_t n) {
- /* TODO: generalize and move to platform.h */
-#if BROTLI_GNUC_HAS_BUILTIN(__builtin_clz, 3, 4, 0) || \
- BROTLI_INTEL_VERSION_CHECK(16, 0, 0)
- return 31u ^ (uint32_t)__builtin_clz((uint32_t)n);
-#else
- uint32_t result = 0;
- while (n >>= 1) result++;
- return result;
-#endif
-}
-
-/* A lookup table for small values of log2(int) to be used in entropy
- computation.
-
- ", ".join(["%.16ff" % x for x in [0.0]+[log2(x) for x in range(1, 256)]]) */
-static const float kLog2Table[] = {
- 0.0000000000000000f, 0.0000000000000000f, 1.0000000000000000f,
- 1.5849625007211563f, 2.0000000000000000f, 2.3219280948873622f,
- 2.5849625007211561f, 2.8073549220576042f, 3.0000000000000000f,
- 3.1699250014423126f, 3.3219280948873626f, 3.4594316186372978f,
- 3.5849625007211565f, 3.7004397181410922f, 3.8073549220576037f,
- 3.9068905956085187f, 4.0000000000000000f, 4.0874628412503400f,
- 4.1699250014423122f, 4.2479275134435852f, 4.3219280948873626f,
- 4.3923174227787607f, 4.4594316186372973f, 4.5235619560570131f,
- 4.5849625007211570f, 4.6438561897747244f, 4.7004397181410926f,
- 4.7548875021634691f, 4.8073549220576037f, 4.8579809951275728f,
- 4.9068905956085187f, 4.9541963103868758f, 5.0000000000000000f,
- 5.0443941193584534f, 5.0874628412503400f, 5.1292830169449664f,
- 5.1699250014423122f, 5.2094533656289501f, 5.2479275134435852f,
- 5.2854022188622487f, 5.3219280948873626f, 5.3575520046180838f,
- 5.3923174227787607f, 5.4262647547020979f, 5.4594316186372973f,
- 5.4918530963296748f, 5.5235619560570131f, 5.5545888516776376f,
- 5.5849625007211570f, 5.6147098441152083f, 5.6438561897747244f,
- 5.6724253419714961f, 5.7004397181410926f, 5.7279204545631996f,
- 5.7548875021634691f, 5.7813597135246599f, 5.8073549220576046f,
- 5.8328900141647422f, 5.8579809951275719f, 5.8826430493618416f,
- 5.9068905956085187f, 5.9307373375628867f, 5.9541963103868758f,
- 5.9772799234999168f, 6.0000000000000000f, 6.0223678130284544f,
- 6.0443941193584534f, 6.0660891904577721f, 6.0874628412503400f,
- 6.1085244567781700f, 6.1292830169449672f, 6.1497471195046822f,
- 6.1699250014423122f, 6.1898245588800176f, 6.2094533656289510f,
- 6.2288186904958804f, 6.2479275134435861f, 6.2667865406949019f,
- 6.2854022188622487f, 6.3037807481771031f, 6.3219280948873617f,
- 6.3398500028846252f, 6.3575520046180847f, 6.3750394313469254f,
- 6.3923174227787598f, 6.4093909361377026f, 6.4262647547020979f,
- 6.4429434958487288f, 6.4594316186372982f, 6.4757334309663976f,
- 6.4918530963296748f, 6.5077946401986964f, 6.5235619560570131f,
- 6.5391588111080319f, 6.5545888516776376f, 6.5698556083309478f,
- 6.5849625007211561f, 6.5999128421871278f, 6.6147098441152092f,
- 6.6293566200796095f, 6.6438561897747253f, 6.6582114827517955f,
- 6.6724253419714952f, 6.6865005271832185f, 6.7004397181410917f,
- 6.7142455176661224f, 6.7279204545631988f, 6.7414669864011465f,
- 6.7548875021634691f, 6.7681843247769260f, 6.7813597135246599f,
- 6.7944158663501062f, 6.8073549220576037f, 6.8201789624151887f,
- 6.8328900141647422f, 6.8454900509443757f, 6.8579809951275719f,
- 6.8703647195834048f, 6.8826430493618416f, 6.8948177633079437f,
- 6.9068905956085187f, 6.9188632372745955f, 6.9307373375628867f,
- 6.9425145053392399f, 6.9541963103868758f, 6.9657842846620879f,
- 6.9772799234999168f, 6.9886846867721664f, 7.0000000000000000f,
- 7.0112272554232540f, 7.0223678130284544f, 7.0334230015374501f,
- 7.0443941193584534f, 7.0552824355011898f, 7.0660891904577721f,
- 7.0768155970508317f, 7.0874628412503400f, 7.0980320829605272f,
- 7.1085244567781700f, 7.1189410727235076f, 7.1292830169449664f,
- 7.1395513523987937f, 7.1497471195046822f, 7.1598713367783891f,
- 7.1699250014423130f, 7.1799090900149345f, 7.1898245588800176f,
- 7.1996723448363644f, 7.2094533656289492f, 7.2191685204621621f,
- 7.2288186904958804f, 7.2384047393250794f, 7.2479275134435861f,
- 7.2573878426926521f, 7.2667865406949019f, 7.2761244052742384f,
- 7.2854022188622487f, 7.2946207488916270f, 7.3037807481771031f,
- 7.3128829552843557f, 7.3219280948873617f, 7.3309168781146177f,
- 7.3398500028846243f, 7.3487281542310781f, 7.3575520046180847f,
- 7.3663222142458151f, 7.3750394313469254f, 7.3837042924740528f,
- 7.3923174227787607f, 7.4008794362821844f, 7.4093909361377026f,
- 7.4178525148858991f, 7.4262647547020979f, 7.4346282276367255f,
- 7.4429434958487288f, 7.4512111118323299f, 7.4594316186372973f,
- 7.4676055500829976f, 7.4757334309663976f, 7.4838157772642564f,
- 7.4918530963296748f, 7.4998458870832057f, 7.5077946401986964f,
- 7.5156998382840436f, 7.5235619560570131f, 7.5313814605163119f,
- 7.5391588111080319f, 7.5468944598876373f, 7.5545888516776376f,
- 7.5622424242210728f, 7.5698556083309478f, 7.5774288280357487f,
- 7.5849625007211561f, 7.5924570372680806f, 7.5999128421871278f,
- 7.6073303137496113f, 7.6147098441152075f, 7.6220518194563764f,
- 7.6293566200796095f, 7.6366246205436488f, 7.6438561897747244f,
- 7.6510516911789290f, 7.6582114827517955f, 7.6653359171851765f,
- 7.6724253419714952f, 7.6794800995054464f, 7.6865005271832185f,
- 7.6934869574993252f, 7.7004397181410926f, 7.7073591320808825f,
- 7.7142455176661224f, 7.7210991887071856f, 7.7279204545631996f,
- 7.7347096202258392f, 7.7414669864011465f, 7.7481928495894596f,
- 7.7548875021634691f, 7.7615512324444795f, 7.7681843247769260f,
- 7.7747870596011737f, 7.7813597135246608f, 7.7879025593914317f,
- 7.7944158663501062f, 7.8008998999203047f, 7.8073549220576037f,
- 7.8137811912170374f, 7.8201789624151887f, 7.8265484872909159f,
- 7.8328900141647422f, 7.8392037880969445f, 7.8454900509443757f,
- 7.8517490414160571f, 7.8579809951275719f, 7.8641861446542798f,
- 7.8703647195834048f, 7.8765169465650002f, 7.8826430493618425f,
- 7.8887432488982601f, 7.8948177633079446f, 7.9008668079807496f,
- 7.9068905956085187f, 7.9128893362299619f, 7.9188632372745955f,
- 7.9248125036057813f, 7.9307373375628867f, 7.9366379390025719f,
- 7.9425145053392399f, 7.9483672315846778f, 7.9541963103868758f,
- 7.9600019320680806f, 7.9657842846620870f, 7.9715435539507720f,
- 7.9772799234999168f, 7.9829935746943104f, 7.9886846867721664f,
- 7.9943534368588578f
-};
-
-#define LOG_2_INV 1.4426950408889634
-
-/* Faster logarithm for small integers, with the property of log2(0) == 0. */
-static BROTLI_INLINE double FastLog2(size_t v) {
- if (v < sizeof(kLog2Table) / sizeof(kLog2Table[0])) {
- return kLog2Table[v];
- }
-#if (defined(_MSC_VER) && _MSC_VER <= 1700) || \
- (defined(__ANDROID_API__) && __ANDROID_API__ < 18)
- /* Visual Studio 2012 and Android API levels < 18 do not have the log2()
- * function defined, so we use log() and a multiplication instead. */
- return log((double)v) * LOG_2_INV;
-#else
- return log2((double)v);
-#endif
-}
-
-#if defined(__cplusplus) || defined(c_plusplus)
-} /* extern "C" */
-#endif
-
-#endif /* BROTLI_ENC_FAST_LOG_H_ */
diff --git a/BaseTools/Source/C/BrotliCompress/enc/find_match_length.h b/BaseTools/Source/C/BrotliCompress/enc/find_match_length.h
deleted file mode 100644
index 6e1f44474baa..000000000000
--- a/BaseTools/Source/C/BrotliCompress/enc/find_match_length.h
+++ /dev/null
@@ -1,80 +0,0 @@
-/* Copyright 2010 Google Inc. All Rights Reserved.
-
- Distributed under MIT license.
- See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
-*/
-
-/* Function to find maximal matching prefixes of strings. */
-
-#ifndef BROTLI_ENC_FIND_MATCH_LENGTH_H_
-#define BROTLI_ENC_FIND_MATCH_LENGTH_H_
-
-#include "../common/platform.h"
-#include <brotli/types.h>
-
-#if defined(__cplusplus) || defined(c_plusplus)
-extern "C" {
-#endif
-
-/* Separate implementation for little-endian 64-bit targets, for speed. */
-#if defined(__GNUC__) && defined(_LP64) && defined(BROTLI_LITTLE_ENDIAN)
-
-static BROTLI_INLINE size_t FindMatchLengthWithLimit(const uint8_t* s1,
- const uint8_t* s2,
- size_t limit) {
- size_t matched = 0;
- size_t limit2 = (limit >> 3) + 1; /* + 1 is for pre-decrement in while */
- while (BROTLI_PREDICT_TRUE(--limit2)) {
- if (BROTLI_PREDICT_FALSE(BROTLI_UNALIGNED_LOAD64LE(s2) ==
- BROTLI_UNALIGNED_LOAD64LE(s1 + matched))) {
- s2 += 8;
- matched += 8;
- } else {
- uint64_t x = BROTLI_UNALIGNED_LOAD64LE(s2) ^
- BROTLI_UNALIGNED_LOAD64LE(s1 + matched);
- size_t matching_bits = (size_t)__builtin_ctzll(x);
- matched += matching_bits >> 3;
- return matched;
- }
- }
- limit = (limit & 7) + 1; /* + 1 is for pre-decrement in while */
- while (--limit) {
- if (BROTLI_PREDICT_TRUE(s1[matched] == *s2)) {
- ++s2;
- ++matched;
- } else {
- return matched;
- }
- }
- return matched;
-}
-#else
-static BROTLI_INLINE size_t FindMatchLengthWithLimit(const uint8_t* s1,
- const uint8_t* s2,
- size_t limit) {
- size_t matched = 0;
- const uint8_t* s2_limit = s2 + limit;
- const uint8_t* s2_ptr = s2;
- /* Find out how long the match is. We loop over the data 32 bits at a
- time until we find a 32-bit block that doesn't match; then we find
- the first non-matching bit and use that to calculate the total
- length of the match. */
- while (s2_ptr <= s2_limit - 4 &&
- BrotliUnalignedRead32(s2_ptr) ==
- BrotliUnalignedRead32(s1 + matched)) {
- s2_ptr += 4;
- matched += 4;
- }
- while ((s2_ptr < s2_limit) && (s1[matched] == *s2_ptr)) {
- ++s2_ptr;
- ++matched;
- }
- return matched;
-}
-#endif
-
-#if defined(__cplusplus) || defined(c_plusplus)
-} /* extern "C" */
-#endif
-
-#endif /* BROTLI_ENC_FIND_MATCH_LENGTH_H_ */
diff --git a/BaseTools/Source/C/BrotliCompress/enc/hash.h b/BaseTools/Source/C/BrotliCompress/enc/hash.h
deleted file mode 100644
index 9225d127ac58..000000000000
--- a/BaseTools/Source/C/BrotliCompress/enc/hash.h
+++ /dev/null
@@ -1,497 +0,0 @@
-/* Copyright 2010 Google Inc. All Rights Reserved.
-
- Distributed under MIT license.
- See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
-*/
-
-/* A (forgetful) hash table to the data seen by the compressor, to
- help create backward references to previous data. */
-
-#ifndef BROTLI_ENC_HASH_H_
-#define BROTLI_ENC_HASH_H_
-
-#include <string.h> /* memcmp, memset */
-
-#include "../common/constants.h"
-#include "../common/dictionary.h"
-#include "../common/platform.h"
-#include <brotli/types.h>
-#include "./encoder_dict.h"
-#include "./fast_log.h"
-#include "./find_match_length.h"
-#include "./memory.h"
-#include "./quality.h"
-#include "./static_dict.h"
-
-#if defined(__cplusplus) || defined(c_plusplus)
-extern "C" {
-#endif
-
-/* Pointer to hasher data.
- *
- * Excluding initialization and destruction, hasher can be passed as
- * HasherHandle by value.
- *
- * Typically hasher data consists of 3 sections:
- * * HasherCommon structure
- * * private structured hasher data, depending on hasher type
- * * private dynamic hasher data, depending on hasher type and parameters
- *
- * Using "define" instead of "typedef", because on MSVC __restrict does not work
- * on typedef pointer types. */
-#define HasherHandle uint8_t*
-
-typedef struct {
- BrotliHasherParams params;
-
- /* False if hasher needs to be "prepared" before use. */
- BROTLI_BOOL is_prepared_;
-
- size_t dict_num_lookups;
- size_t dict_num_matches;
-} HasherCommon;
-
-static BROTLI_INLINE HasherCommon* GetHasherCommon(HasherHandle handle) {
- return (HasherCommon*)handle;
-}
-
-#define score_t size_t
-
-static const uint32_t kCutoffTransformsCount = 10;
-/* 0, 12, 27, 23, 42, 63, 56, 48, 59, 64 */
-/* 0+0, 4+8, 8+19, 12+11, 16+26, 20+43, 24+32, 28+20, 32+27, 36+28 */
-static const uint64_t kCutoffTransforms =
- BROTLI_MAKE_UINT64_T(0x071B520A, 0xDA2D3200);
-
-typedef struct HasherSearchResult {
- size_t len;
- size_t distance;
- score_t score;
- int len_code_delta; /* == len_code - len */
-} HasherSearchResult;
-
-/* kHashMul32 multiplier has these properties:
- * The multiplier must be odd. Otherwise we may lose the highest bit.
- * No long streaks of ones or zeros.
- * There is no effort to ensure that it is a prime, the oddity is enough
- for this use.
- * The number has been tuned heuristically against compression benchmarks. */
-static const uint32_t kHashMul32 = 0x1E35A7BD;
-static const uint64_t kHashMul64 = BROTLI_MAKE_UINT64_T(0x1E35A7BD, 0x1E35A7BD);
-static const uint64_t kHashMul64Long =
- BROTLI_MAKE_UINT64_T(0x1FE35A7Bu, 0xD3579BD3u);
-
-static BROTLI_INLINE uint32_t Hash14(const uint8_t* data) {
- uint32_t h = BROTLI_UNALIGNED_LOAD32LE(data) * kHashMul32;
- /* The higher bits contain more mixture from the multiplication,
- so we take our results from there. */
- return h >> (32 - 14);
-}
-
-static BROTLI_INLINE void PrepareDistanceCache(
- int* BROTLI_RESTRICT distance_cache, const int num_distances) {
- if (num_distances > 4) {
- int last_distance = distance_cache[0];
- distance_cache[4] = last_distance - 1;
- distance_cache[5] = last_distance + 1;
- distance_cache[6] = last_distance - 2;
- distance_cache[7] = last_distance + 2;
- distance_cache[8] = last_distance - 3;
- distance_cache[9] = last_distance + 3;
- if (num_distances > 10) {
- int next_last_distance = distance_cache[1];
- distance_cache[10] = next_last_distance - 1;
- distance_cache[11] = next_last_distance + 1;
- distance_cache[12] = next_last_distance - 2;
- distance_cache[13] = next_last_distance + 2;
- distance_cache[14] = next_last_distance - 3;
- distance_cache[15] = next_last_distance + 3;
- }
- }
-}
-
-#define BROTLI_LITERAL_BYTE_SCORE 135
-#define BROTLI_DISTANCE_BIT_PENALTY 30
-/* Score must be positive after applying maximal penalty. */
-#define BROTLI_SCORE_BASE (BROTLI_DISTANCE_BIT_PENALTY * 8 * sizeof(size_t))
-
-/* Usually, we always choose the longest backward reference. This function
- allows for the exception of that rule.
-
- If we choose a backward reference that is further away, it will
- usually be coded with more bits. We approximate this by assuming
- log2(distance). If the distance can be expressed in terms of the
- last four distances, we use some heuristic constants to estimate
- the bits cost. For the first up to four literals we use the bit
- cost of the literals from the literal cost model, after that we
- use the average bit cost of the cost model.
-
- This function is used to sometimes discard a longer backward reference
- when it is not much longer and the bit cost for encoding it is more
- than the saved literals.
-
- backward_reference_offset MUST be positive. */
-static BROTLI_INLINE score_t BackwardReferenceScore(
- size_t copy_length, size_t backward_reference_offset) {
- return BROTLI_SCORE_BASE + BROTLI_LITERAL_BYTE_SCORE * (score_t)copy_length -
- BROTLI_DISTANCE_BIT_PENALTY * Log2FloorNonZero(backward_reference_offset);
-}
-
-static BROTLI_INLINE score_t BackwardReferenceScoreUsingLastDistance(
- size_t copy_length) {
- return BROTLI_LITERAL_BYTE_SCORE * (score_t)copy_length +
- BROTLI_SCORE_BASE + 15;
-}
-
-static BROTLI_INLINE score_t BackwardReferencePenaltyUsingLastDistance(
- size_t distance_short_code) {
- return (score_t)39 + ((0x1CA10 >> (distance_short_code & 0xE)) & 0xE);
-}
-
-static BROTLI_INLINE BROTLI_BOOL TestStaticDictionaryItem(
- const BrotliEncoderDictionary* dictionary, size_t item, const uint8_t* data,
- size_t max_length, size_t max_backward, size_t max_distance,
- HasherSearchResult* out) {
- size_t len;
- size_t word_idx;
- size_t offset;
- size_t matchlen;
- size_t backward;
- score_t score;
- len = item & 0x1F;
- word_idx = item >> 5;
- offset = dictionary->words->offsets_by_length[len] + len * word_idx;
- if (len > max_length) {
- return BROTLI_FALSE;
- }
-
- matchlen =
- FindMatchLengthWithLimit(data, &dictionary->words->data[offset], len);
- if (matchlen + dictionary->cutoffTransformsCount <= len || matchlen == 0) {
- return BROTLI_FALSE;
- }
- {
- size_t cut = len - matchlen;
- size_t transform_id = (cut << 2) +
- (size_t)((dictionary->cutoffTransforms >> (cut * 6)) & 0x3F);
- backward = max_backward + 1 + word_idx +
- (transform_id << dictionary->words->size_bits_by_length[len]);
- }
- if (backward > max_distance) {
- return BROTLI_FALSE;
- }
- score = BackwardReferenceScore(matchlen, backward);
- if (score < out->score) {
- return BROTLI_FALSE;
- }
- out->len = matchlen;
- out->len_code_delta = (int)len - (int)matchlen;
- out->distance = backward;
- out->score = score;
- return BROTLI_TRUE;
-}
-
-static BROTLI_INLINE void SearchInStaticDictionary(
- const BrotliEncoderDictionary* dictionary,
- HasherHandle handle, const uint8_t* data, size_t max_length,
- size_t max_backward, size_t max_distance,
- HasherSearchResult* out, BROTLI_BOOL shallow) {
- size_t key;
- size_t i;
- HasherCommon* self = GetHasherCommon(handle);
- if (self->dict_num_matches < (self->dict_num_lookups >> 7)) {
- return;
- }
- key = Hash14(data) << 1;
- for (i = 0; i < (shallow ? 1u : 2u); ++i, ++key) {
- size_t item = dictionary->hash_table[key];
- self->dict_num_lookups++;
- if (item != 0) {
- BROTLI_BOOL item_matches = TestStaticDictionaryItem(
- dictionary, item, data, max_length, max_backward, max_distance, out);
- if (item_matches) {
- self->dict_num_matches++;
- }
- }
- }
-}
-
-typedef struct BackwardMatch {
- uint32_t distance;
- uint32_t length_and_code;
-} BackwardMatch;
-
-static BROTLI_INLINE void InitBackwardMatch(BackwardMatch* self,
- size_t dist, size_t len) {
- self->distance = (uint32_t)dist;
- self->length_and_code = (uint32_t)(len << 5);
-}
-
-static BROTLI_INLINE void InitDictionaryBackwardMatch(BackwardMatch* self,
- size_t dist, size_t len, size_t len_code) {
- self->distance = (uint32_t)dist;
- self->length_and_code =
- (uint32_t)((len << 5) | (len == len_code ? 0 : len_code));
-}
-
-static BROTLI_INLINE size_t BackwardMatchLength(const BackwardMatch* self) {
- return self->length_and_code >> 5;
-}
-
-static BROTLI_INLINE size_t BackwardMatchLengthCode(const BackwardMatch* self) {
- size_t code = self->length_and_code & 31;
- return code ? code : BackwardMatchLength(self);
-}
-
-#define EXPAND_CAT(a, b) CAT(a, b)
-#define CAT(a, b) a ## b
-#define FN(X) EXPAND_CAT(X, HASHER())
-
-#define HASHER() H10
-#define BUCKET_BITS 17
-#define MAX_TREE_SEARCH_DEPTH 64
-#define MAX_TREE_COMP_LENGTH 128
-#include "./hash_to_binary_tree_inc.h" /* NOLINT(build/include) */
-#undef MAX_TREE_SEARCH_DEPTH
-#undef MAX_TREE_COMP_LENGTH
-#undef BUCKET_BITS
-#undef HASHER
-/* MAX_NUM_MATCHES == 64 + MAX_TREE_SEARCH_DEPTH */
-#define MAX_NUM_MATCHES_H10 128
-
-/* For BUCKET_SWEEP == 1, enabling the dictionary lookup makes compression
- a little faster (0.5% - 1%) and it compresses 0.15% better on small text
- and HTML inputs. */
-
-#define HASHER() H2
-#define BUCKET_BITS 16
-#define BUCKET_SWEEP 1
-#define HASH_LEN 5
-#define USE_DICTIONARY 1
-#include "./hash_longest_match_quickly_inc.h" /* NOLINT(build/include) */
-#undef BUCKET_SWEEP
-#undef USE_DICTIONARY
-#undef HASHER
-
-#define HASHER() H3
-#define BUCKET_SWEEP 2
-#define USE_DICTIONARY 0
-#include "./hash_longest_match_quickly_inc.h" /* NOLINT(build/include) */
-#undef USE_DICTIONARY
-#undef BUCKET_SWEEP
-#undef BUCKET_BITS
-#undef HASHER
-
-#define HASHER() H4
-#define BUCKET_BITS 17
-#define BUCKET_SWEEP 4
-#define USE_DICTIONARY 1
-#include "./hash_longest_match_quickly_inc.h" /* NOLINT(build/include) */
-#undef USE_DICTIONARY
-#undef HASH_LEN
-#undef BUCKET_SWEEP
-#undef BUCKET_BITS
-#undef HASHER
-
-#define HASHER() H5
-#include "./hash_longest_match_inc.h" /* NOLINT(build/include) */
-#undef HASHER
-
-#define HASHER() H6
-#include "./hash_longest_match64_inc.h" /* NOLINT(build/include) */
-#undef HASHER
-
-#define BUCKET_BITS 15
-
-#define NUM_LAST_DISTANCES_TO_CHECK 4
-#define NUM_BANKS 1
-#define BANK_BITS 16
-#define HASHER() H40
-#include "./hash_forgetful_chain_inc.h" /* NOLINT(build/include) */
-#undef HASHER
-#undef NUM_LAST_DISTANCES_TO_CHECK
-
-#define NUM_LAST_DISTANCES_TO_CHECK 10
-#define HASHER() H41
-#include "./hash_forgetful_chain_inc.h" /* NOLINT(build/include) */
-#undef HASHER
-#undef NUM_LAST_DISTANCES_TO_CHECK
-#undef NUM_BANKS
-#undef BANK_BITS
-
-#define NUM_LAST_DISTANCES_TO_CHECK 16
-#define NUM_BANKS 512
-#define BANK_BITS 9
-#define HASHER() H42
-#include "./hash_forgetful_chain_inc.h" /* NOLINT(build/include) */
-#undef HASHER
-#undef NUM_LAST_DISTANCES_TO_CHECK
-#undef NUM_BANKS
-#undef BANK_BITS
-
-#undef BUCKET_BITS
-
-#define HASHER() H54
-#define BUCKET_BITS 20
-#define BUCKET_SWEEP 4
-#define HASH_LEN 7
-#define USE_DICTIONARY 0
-#include "./hash_longest_match_quickly_inc.h" /* NOLINT(build/include) */
-#undef USE_DICTIONARY
-#undef HASH_LEN
-#undef BUCKET_SWEEP
-#undef BUCKET_BITS
-#undef HASHER
-
-/* fast large window hashers */
-
-#define HASHER() HROLLING_FAST
-#define CHUNKLEN 32
-#define JUMP 4
-#define NUMBUCKETS 16777216
-#define MASK ((NUMBUCKETS * 64) - 1)
-#include "./hash_rolling_inc.h" /* NOLINT(build/include) */
-#undef JUMP
-#undef HASHER
-
-
-#define HASHER() HROLLING
-#define JUMP 1
-#include "./hash_rolling_inc.h" /* NOLINT(build/include) */
-#undef MASK
-#undef NUMBUCKETS
-#undef JUMP
-#undef CHUNKLEN
-#undef HASHER
-
-#define HASHER() H35
-#define HASHER_A H3
-#define HASHER_B HROLLING_FAST
-#include "./hash_composite_inc.h" /* NOLINT(build/include) */
-#undef HASHER_A
-#undef HASHER_B
-#undef HASHER
-
-#define HASHER() H55
-#define HASHER_A H54
-#define HASHER_B HROLLING_FAST
-#include "./hash_composite_inc.h" /* NOLINT(build/include) */
-#undef HASHER_A
-#undef HASHER_B
-#undef HASHER
-
-#define HASHER() H65
-#define HASHER_A H6
-#define HASHER_B HROLLING
-#include "./hash_composite_inc.h" /* NOLINT(build/include) */
-#undef HASHER_A
-#undef HASHER_B
-#undef HASHER
-
-#undef FN
-#undef CAT
-#undef EXPAND_CAT
-
-#define FOR_GENERIC_HASHERS(H) H(2) H(3) H(4) H(5) H(6) H(40) H(41) H(42) H(54)\
- H(35) H(55) H(65)
-#define FOR_ALL_HASHERS(H) FOR_GENERIC_HASHERS(H) H(10)
-
-static BROTLI_INLINE void DestroyHasher(
- MemoryManager* m, HasherHandle* handle) {
- if (*handle == NULL) return;
- BROTLI_FREE(m, *handle);
-}
-
-static BROTLI_INLINE void HasherReset(HasherHandle handle) {
- if (handle == NULL) return;
- GetHasherCommon(handle)->is_prepared_ = BROTLI_FALSE;
-}
-
-static BROTLI_INLINE size_t HasherSize(const BrotliEncoderParams* params,
- BROTLI_BOOL one_shot, const size_t input_size) {
- size_t result = sizeof(HasherCommon);
- switch (params->hasher.type) {
-#define SIZE_(N) \
- case N: \
- result += HashMemAllocInBytesH ## N(params, one_shot, input_size); \
- break;
- FOR_ALL_HASHERS(SIZE_)
-#undef SIZE_
- default:
- break;
- }
- return result;
-}
-
-static BROTLI_INLINE void HasherSetup(MemoryManager* m, HasherHandle* handle,
- BrotliEncoderParams* params, const uint8_t* data, size_t position,
- size_t input_size, BROTLI_BOOL is_last) {
- HasherHandle self = NULL;
- HasherCommon* common = NULL;
- BROTLI_BOOL one_shot = (position == 0 && is_last);
- if (*handle == NULL) {
- size_t alloc_size;
- ChooseHasher(params, ¶ms->hasher);
- alloc_size = HasherSize(params, one_shot, input_size);
- self = BROTLI_ALLOC(m, uint8_t, alloc_size);
- if (BROTLI_IS_OOM(m)) return;
- *handle = self;
- common = GetHasherCommon(self);
- common->params = params->hasher;
- switch (common->params.type) {
-#define INITIALIZE_(N) \
- case N: \
- InitializeH ## N(*handle, params); \
- break;
- FOR_ALL_HASHERS(INITIALIZE_);
-#undef INITIALIZE_
- default:
- break;
- }
- HasherReset(*handle);
- }
-
- self = *handle;
- common = GetHasherCommon(self);
- if (!common->is_prepared_) {
- switch (common->params.type) {
-#define PREPARE_(N) \
- case N: \
- PrepareH ## N(self, one_shot, input_size, data); \
- break;
- FOR_ALL_HASHERS(PREPARE_)
-#undef PREPARE_
- default: break;
- }
- if (position == 0) {
- common->dict_num_lookups = 0;
- common->dict_num_matches = 0;
- }
- common->is_prepared_ = BROTLI_TRUE;
- }
-}
-
-static BROTLI_INLINE void InitOrStitchToPreviousBlock(
- MemoryManager* m, HasherHandle* handle, const uint8_t* data, size_t mask,
- BrotliEncoderParams* params, size_t position, size_t input_size,
- BROTLI_BOOL is_last) {
- HasherHandle self;
- HasherSetup(m, handle, params, data, position, input_size, is_last);
- if (BROTLI_IS_OOM(m)) return;
- self = *handle;
- switch (GetHasherCommon(self)->params.type) {
-#define INIT_(N) \
- case N: \
- StitchToPreviousBlockH ## N(self, input_size, position, data, mask); \
- break;
- FOR_ALL_HASHERS(INIT_)
-#undef INIT_
- default: break;
- }
-}
-
-#if defined(__cplusplus) || defined(c_plusplus)
-} /* extern "C" */
-#endif
-
-#endif /* BROTLI_ENC_HASH_H_ */
diff --git a/BaseTools/Source/C/BrotliCompress/enc/hash_composite_inc.h b/BaseTools/Source/C/BrotliCompress/enc/hash_composite_inc.h
deleted file mode 100644
index ec3e39c73fa2..000000000000
--- a/BaseTools/Source/C/BrotliCompress/enc/hash_composite_inc.h
+++ /dev/null
@@ -1,133 +0,0 @@
-/* NOLINT(build/header_guard) */
-/* Copyright 2018 Google Inc. All Rights Reserved.
-
- Distributed under MIT license.
- See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
-*/
-
-/* template parameters: FN, HASHER_A, HASHER_B */
-
-/* Composite hasher: This hasher allows to combine two other hashers, HASHER_A
- and HASHER_B. */
-
-#define HashComposite HASHER()
-
-#define FN_A(X) EXPAND_CAT(X, HASHER_A)
-#define FN_B(X) EXPAND_CAT(X, HASHER_B)
-
-static BROTLI_INLINE size_t FN(HashTypeLength)(void) {
- size_t a = FN_A(HashTypeLength)();
- size_t b = FN_B(HashTypeLength)();
- return a > b ? a : b;
-}
-
-static BROTLI_INLINE size_t FN(StoreLookahead)(void) {
- size_t a = FN_A(StoreLookahead)();
- size_t b = FN_B(StoreLookahead)();
- return a > b ? a : b;
-}
-
-typedef struct HashComposite {
- HasherHandle ha;
- HasherHandle hb;
- const BrotliEncoderParams* params;
-} HashComposite;
-
-static BROTLI_INLINE HashComposite* FN(Self)(HasherHandle handle) {
- return (HashComposite*)&(GetHasherCommon(handle)[1]);
-}
-
-static void FN(Initialize)(
- HasherHandle handle, const BrotliEncoderParams* params) {
- HashComposite* self = FN(Self)(handle);
- self->ha = 0;
- self->hb = 0;
- self->params = params;
- /* TODO: Initialize of the hashers is defered to Prepare (and params
- remembered here) because we don't get the one_shot and input_size params
- here that are needed to know the memory size of them. Instead provide
- those params to all hashers FN(Initialize) */
-}
-
-static void FN(Prepare)(HasherHandle handle, BROTLI_BOOL one_shot,
- size_t input_size, const uint8_t* data) {
- HashComposite* self = FN(Self)(handle);
- if (!self->ha) {
- HasherCommon* common_a;
- HasherCommon* common_b;
-
- self->ha = handle + sizeof(HasherCommon) + sizeof(HashComposite);
- common_a = (HasherCommon*)self->ha;
- common_a->params = self->params->hasher;
- common_a->is_prepared_ = BROTLI_FALSE;
- common_a->dict_num_lookups = 0;
- common_a->dict_num_matches = 0;
- FN_A(Initialize)(self->ha, self->params);
-
- self->hb = self->ha + sizeof(HasherCommon) + FN_A(HashMemAllocInBytes)(
- self->params, one_shot, input_size);
- common_b = (HasherCommon*)self->hb;
- common_b->params = self->params->hasher;
- common_b->is_prepared_ = BROTLI_FALSE;
- common_b->dict_num_lookups = 0;
- common_b->dict_num_matches = 0;
- FN_B(Initialize)(self->hb, self->params);
- }
- FN_A(Prepare)(self->ha, one_shot, input_size, data);
- FN_B(Prepare)(self->hb, one_shot, input_size, data);
-}
-
-static BROTLI_INLINE size_t FN(HashMemAllocInBytes)(
- const BrotliEncoderParams* params, BROTLI_BOOL one_shot,
- size_t input_size) {
- return sizeof(HashComposite) + 2 * sizeof(HasherCommon) +
- FN_A(HashMemAllocInBytes)(params, one_shot, input_size) +
- FN_B(HashMemAllocInBytes)(params, one_shot, input_size);
-}
-
-static BROTLI_INLINE void FN(Store)(HasherHandle BROTLI_RESTRICT handle,
- const uint8_t* BROTLI_RESTRICT data, const size_t mask, const size_t ix) {
- HashComposite* self = FN(Self)(handle);
- FN_A(Store)(self->ha, data, mask, ix);
- FN_B(Store)(self->hb, data, mask, ix);
-}
-
-static BROTLI_INLINE void FN(StoreRange)(HasherHandle handle,
- const uint8_t* data, const size_t mask, const size_t ix_start,
- const size_t ix_end) {
- HashComposite* self = FN(Self)(handle);
- FN_A(StoreRange)(self->ha, data, mask, ix_start, ix_end);
- FN_B(StoreRange)(self->hb, data, mask, ix_start, ix_end);
-}
-
-static BROTLI_INLINE void FN(StitchToPreviousBlock)(HasherHandle handle,
- size_t num_bytes, size_t position, const uint8_t* ringbuffer,
- size_t ring_buffer_mask) {
- HashComposite* self = FN(Self)(handle);
- FN_A(StitchToPreviousBlock)(self->ha, num_bytes, position, ringbuffer,
- ring_buffer_mask);
- FN_B(StitchToPreviousBlock)(self->hb, num_bytes, position, ringbuffer,
- ring_buffer_mask);
-}
-
-static BROTLI_INLINE void FN(PrepareDistanceCache)(
- HasherHandle handle, int* BROTLI_RESTRICT distance_cache) {
- HashComposite* self = FN(Self)(handle);
- FN_A(PrepareDistanceCache)(self->ha, distance_cache);
- FN_B(PrepareDistanceCache)(self->hb, distance_cache);
-}
-
-static BROTLI_INLINE void FN(FindLongestMatch)(HasherHandle handle,
- const BrotliEncoderDictionary* dictionary,
- const uint8_t* BROTLI_RESTRICT data, const size_t ring_buffer_mask,
- const int* BROTLI_RESTRICT distance_cache, const size_t cur_ix,
- const size_t max_length, const size_t max_backward, const size_t gap,
- const size_t max_distance, HasherSearchResult* BROTLI_RESTRICT out) {
- HashComposite* self = FN(Self)(handle);
- FN_A(FindLongestMatch)(self->ha, dictionary, data, ring_buffer_mask,
- distance_cache, cur_ix, max_length, max_backward, gap, max_distance, out);
- FN_B(FindLongestMatch)(self->hb, dictionary, data, ring_buffer_mask,
- distance_cache, cur_ix, max_length, max_backward, gap, max_distance, out);
-}
-
-#undef HashComposite
diff --git a/BaseTools/Source/C/BrotliCompress/enc/hash_forgetful_chain_inc.h b/BaseTools/Source/C/BrotliCompress/enc/hash_forgetful_chain_inc.h
deleted file mode 100644
index 9caf429db1d9..000000000000
--- a/BaseTools/Source/C/BrotliCompress/enc/hash_forgetful_chain_inc.h
+++ /dev/null
@@ -1,254 +0,0 @@
-/* NOLINT(build/header_guard) */
-/* Copyright 2016 Google Inc. All Rights Reserved.
-
- Distributed under MIT license.
- See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
-*/
-
-/* template parameters: FN, BUCKET_BITS, NUM_BANKS, BANK_BITS,
- NUM_LAST_DISTANCES_TO_CHECK */
-
-/* A (forgetful) hash table to the data seen by the compressor, to
- help create backward references to previous data.
-
- Hashes are stored in chains which are bucketed to groups. Group of chains
- share a storage "bank". When more than "bank size" chain nodes are added,
- oldest nodes are replaced; this way several chains may share a tail. */
-
-#define HashForgetfulChain HASHER()
-
-#define BANK_SIZE (1 << BANK_BITS)
-
-/* Number of hash buckets. */
-#define BUCKET_SIZE (1 << BUCKET_BITS)
-
-#define CAPPED_CHAINS 0
-
-static BROTLI_INLINE size_t FN(HashTypeLength)(void) { return 4; }
-static BROTLI_INLINE size_t FN(StoreLookahead)(void) { return 4; }
-
-/* HashBytes is the function that chooses the bucket to place the address in.*/
-static BROTLI_INLINE size_t FN(HashBytes)(const uint8_t* data) {
- const uint32_t h = BROTLI_UNALIGNED_LOAD32LE(data) * kHashMul32;
- /* The higher bits contain more mixture from the multiplication,
- so we take our results from there. */
- return h >> (32 - BUCKET_BITS);
-}
-
-typedef struct FN(Slot) {
- uint16_t delta;
- uint16_t next;
-} FN(Slot);
-
-typedef struct FN(Bank) {
- FN(Slot) slots[BANK_SIZE];
-} FN(Bank);
-
-typedef struct HashForgetfulChain {
- uint32_t addr[BUCKET_SIZE];
- uint16_t head[BUCKET_SIZE];
- /* Truncated hash used for quick rejection of "distance cache" candidates. */
- uint8_t tiny_hash[65536];
- FN(Bank) banks[NUM_BANKS];
- uint16_t free_slot_idx[NUM_BANKS];
- size_t max_hops;
-} HashForgetfulChain;
-
-static BROTLI_INLINE HashForgetfulChain* FN(Self)(HasherHandle handle) {
- return (HashForgetfulChain*)&(GetHasherCommon(handle)[1]);
-}
-
-static void FN(Initialize)(
- HasherHandle handle, const BrotliEncoderParams* params) {
- FN(Self)(handle)->max_hops =
- (params->quality > 6 ? 7u : 8u) << (params->quality - 4);
-}
-
-static void FN(Prepare)(HasherHandle handle, BROTLI_BOOL one_shot,
- size_t input_size, const uint8_t* data) {
- HashForgetfulChain* self = FN(Self)(handle);
- /* Partial preparation is 100 times slower (per socket). */
- size_t partial_prepare_threshold = BUCKET_SIZE >> 6;
- if (one_shot && input_size <= partial_prepare_threshold) {
- size_t i;
- for (i = 0; i < input_size; ++i) {
- size_t bucket = FN(HashBytes)(&data[i]);
- /* See InitEmpty comment. */
- self->addr[bucket] = 0xCCCCCCCC;
- self->head[bucket] = 0xCCCC;
- }
- } else {
- /* Fill |addr| array with 0xCCCCCCCC value. Because of wrapping, position
- processed by hasher never reaches 3GB + 64M; this makes all new chains
- to be terminated after the first node. */
- memset(self->addr, 0xCC, sizeof(self->addr));
- memset(self->head, 0, sizeof(self->head));
- }
- memset(self->tiny_hash, 0, sizeof(self->tiny_hash));
- memset(self->free_slot_idx, 0, sizeof(self->free_slot_idx));
-}
-
-static BROTLI_INLINE size_t FN(HashMemAllocInBytes)(
- const BrotliEncoderParams* params, BROTLI_BOOL one_shot,
- size_t input_size) {
- BROTLI_UNUSED(params);
- BROTLI_UNUSED(one_shot);
- BROTLI_UNUSED(input_size);
- return sizeof(HashForgetfulChain);
-}
-
-/* Look at 4 bytes at &data[ix & mask]. Compute a hash from these, and prepend
- node to corresponding chain; also update tiny_hash for current position. */
-static BROTLI_INLINE void FN(Store)(HasherHandle BROTLI_RESTRICT handle,
- const uint8_t* BROTLI_RESTRICT data, const size_t mask, const size_t ix) {
- HashForgetfulChain* self = FN(Self)(handle);
- const size_t key = FN(HashBytes)(&data[ix & mask]);
- const size_t bank = key & (NUM_BANKS - 1);
- const size_t idx = self->free_slot_idx[bank]++ & (BANK_SIZE - 1);
- size_t delta = ix - self->addr[key];
- self->tiny_hash[(uint16_t)ix] = (uint8_t)key;
- if (delta > 0xFFFF) delta = CAPPED_CHAINS ? 0 : 0xFFFF;
- self->banks[bank].slots[idx].delta = (uint16_t)delta;
- self->banks[bank].slots[idx].next = self->head[key];
- self->addr[key] = (uint32_t)ix;
- self->head[key] = (uint16_t)idx;
-}
-
-static BROTLI_INLINE void FN(StoreRange)(HasherHandle handle,
- const uint8_t* data, const size_t mask, const size_t ix_start,
- const size_t ix_end) {
- size_t i;
- for (i = ix_start; i < ix_end; ++i) {
- FN(Store)(handle, data, mask, i);
- }
-}
-
-static BROTLI_INLINE void FN(StitchToPreviousBlock)(HasherHandle handle,
- size_t num_bytes, size_t position, const uint8_t* ringbuffer,
- size_t ring_buffer_mask) {
- if (num_bytes >= FN(HashTypeLength)() - 1 && position >= 3) {
- /* Prepare the hashes for three last bytes of the last write.
- These could not be calculated before, since they require knowledge
- of both the previous and the current block. */
- FN(Store)(handle, ringbuffer, ring_buffer_mask, position - 3);
- FN(Store)(handle, ringbuffer, ring_buffer_mask, position - 2);
- FN(Store)(handle, ringbuffer, ring_buffer_mask, position - 1);
- }
-}
-
-static BROTLI_INLINE void FN(PrepareDistanceCache)(
- HasherHandle handle, int* BROTLI_RESTRICT distance_cache) {
- BROTLI_UNUSED(handle);
- PrepareDistanceCache(distance_cache, NUM_LAST_DISTANCES_TO_CHECK);
-}
-
-/* Find a longest backward match of &data[cur_ix] up to the length of
- max_length and stores the position cur_ix in the hash table.
-
- REQUIRES: FN(PrepareDistanceCache) must be invoked for current distance cache
- values; if this method is invoked repeatedly with the same distance
- cache values, it is enough to invoke FN(PrepareDistanceCache) once.
-
- Does not look for matches longer than max_length.
- Does not look for matches further away than max_backward.
- Writes the best match into |out|.
- |out|->score is updated only if a better match is found. */
-static BROTLI_INLINE void FN(FindLongestMatch)(HasherHandle handle,
- const BrotliEncoderDictionary* dictionary,
- const uint8_t* BROTLI_RESTRICT data, const size_t ring_buffer_mask,
- const int* BROTLI_RESTRICT distance_cache,
- const size_t cur_ix, const size_t max_length, const size_t max_backward,
- const size_t gap, const size_t max_distance,
- HasherSearchResult* BROTLI_RESTRICT out) {
- HashForgetfulChain* self = FN(Self)(handle);
- const size_t cur_ix_masked = cur_ix & ring_buffer_mask;
- /* Don't accept a short copy from far away. */
- score_t min_score = out->score;
- score_t best_score = out->score;
- size_t best_len = out->len;
- size_t i;
- const size_t key = FN(HashBytes)(&data[cur_ix_masked]);
- const uint8_t tiny_hash = (uint8_t)(key);
- out->len = 0;
- out->len_code_delta = 0;
- /* Try last distance first. */
- for (i = 0; i < NUM_LAST_DISTANCES_TO_CHECK; ++i) {
- const size_t backward = (size_t)distance_cache[i];
- size_t prev_ix = (cur_ix - backward);
- /* For distance code 0 we want to consider 2-byte matches. */
- if (i > 0 && self->tiny_hash[(uint16_t)prev_ix] != tiny_hash) continue;
- if (prev_ix >= cur_ix || backward > max_backward) {
- continue;
- }
- prev_ix &= ring_buffer_mask;
- {
- const size_t len = FindMatchLengthWithLimit(&data[prev_ix],
- &data[cur_ix_masked],
- max_length);
- if (len >= 2) {
- score_t score = BackwardReferenceScoreUsingLastDistance(len);
- if (best_score < score) {
- if (i != 0) score -= BackwardReferencePenaltyUsingLastDistance(i);
- if (best_score < score) {
- best_score = score;
- best_len = len;
- out->len = best_len;
- out->distance = backward;
- out->score = best_score;
- }
- }
- }
- }
- }
- {
- const size_t bank = key & (NUM_BANKS - 1);
- size_t backward = 0;
- size_t hops = self->max_hops;
- size_t delta = cur_ix - self->addr[key];
- size_t slot = self->head[key];
- while (hops--) {
- size_t prev_ix;
- size_t last = slot;
- backward += delta;
- if (backward > max_backward || (CAPPED_CHAINS && !delta)) break;
- prev_ix = (cur_ix - backward) & ring_buffer_mask;
- slot = self->banks[bank].slots[last].next;
- delta = self->banks[bank].slots[last].delta;
- if (cur_ix_masked + best_len > ring_buffer_mask ||
- prev_ix + best_len > ring_buffer_mask ||
- data[cur_ix_masked + best_len] != data[prev_ix + best_len]) {
- continue;
- }
- {
- const size_t len = FindMatchLengthWithLimit(&data[prev_ix],
- &data[cur_ix_masked],
- max_length);
- if (len >= 4) {
- /* Comparing for >= 3 does not change the semantics, but just saves
- for a few unnecessary binary logarithms in backward reference
- score, since we are not interested in such short matches. */
- score_t score = BackwardReferenceScore(len, backward);
- if (best_score < score) {
- best_score = score;
- best_len = len;
- out->len = best_len;
- out->distance = backward;
- out->score = best_score;
- }
- }
- }
- }
- FN(Store)(handle, data, ring_buffer_mask, cur_ix);
- }
- if (out->score == min_score) {
- SearchInStaticDictionary(dictionary,
- handle, &data[cur_ix_masked], max_length, max_backward + gap,
- max_distance, out, BROTLI_FALSE);
- }
-}
-
-#undef BANK_SIZE
-#undef BUCKET_SIZE
-#undef CAPPED_CHAINS
-
-#undef HashForgetfulChain
diff --git a/BaseTools/Source/C/BrotliCompress/enc/hash_longest_match64_inc.h b/BaseTools/Source/C/BrotliCompress/enc/hash_longest_match64_inc.h
deleted file mode 100644
index 3a01f0d3f1a0..000000000000
--- a/BaseTools/Source/C/BrotliCompress/enc/hash_longest_match64_inc.h
+++ /dev/null
@@ -1,266 +0,0 @@
-/* NOLINT(build/header_guard) */
-/* Copyright 2010 Google Inc. All Rights Reserved.
-
- Distributed under MIT license.
- See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
-*/
-
-/* template parameters: FN */
-
-/* A (forgetful) hash table to the data seen by the compressor, to
- help create backward references to previous data.
-
- This is a hash map of fixed size (bucket_size_) to a ring buffer of
- fixed size (block_size_). The ring buffer contains the last block_size_
- index positions of the given hash key in the compressed data. */
-
-#define HashLongestMatch HASHER()
-
-static BROTLI_INLINE size_t FN(HashTypeLength)(void) { return 8; }
-static BROTLI_INLINE size_t FN(StoreLookahead)(void) { return 8; }
-
-/* HashBytes is the function that chooses the bucket to place the address in. */
-static BROTLI_INLINE uint32_t FN(HashBytes)(const uint8_t* data,
- const uint64_t mask,
- const int shift) {
- const uint64_t h = (BROTLI_UNALIGNED_LOAD64LE(data) & mask) * kHashMul64Long;
- /* The higher bits contain more mixture from the multiplication,
- so we take our results from there. */
- return (uint32_t)(h >> shift);
-}
-
-typedef struct HashLongestMatch {
- /* Number of hash buckets. */
- size_t bucket_size_;
- /* Only block_size_ newest backward references are kept,
- and the older are forgotten. */
- size_t block_size_;
- /* Left-shift for computing hash bucket index from hash value. */
- int hash_shift_;
- /* Mask for selecting the next 4-8 bytes of input */
- uint64_t hash_mask_;
- /* Mask for accessing entries in a block (in a ring-buffer manner). */
- uint32_t block_mask_;
-
- /* --- Dynamic size members --- */
-
- /* Number of entries in a particular bucket. */
- /* uint16_t num[bucket_size]; */
-
- /* Buckets containing block_size_ of backward references. */
- /* uint32_t* buckets[bucket_size * block_size]; */
-} HashLongestMatch;
-
-static BROTLI_INLINE HashLongestMatch* FN(Self)(HasherHandle handle) {
- return (HashLongestMatch*)&(GetHasherCommon(handle)[1]);
-}
-
-static BROTLI_INLINE uint16_t* FN(Num)(HashLongestMatch* self) {
- return (uint16_t*)(&self[1]);
-}
-
-static BROTLI_INLINE uint32_t* FN(Buckets)(HashLongestMatch* self) {
- return (uint32_t*)(&FN(Num)(self)[self->bucket_size_]);
-}
-
-static void FN(Initialize)(
- HasherHandle handle, const BrotliEncoderParams* params) {
- HasherCommon* common = GetHasherCommon(handle);
- HashLongestMatch* self = FN(Self)(handle);
- BROTLI_UNUSED(params);
- self->hash_shift_ = 64 - common->params.bucket_bits;
- self->hash_mask_ = (~((uint64_t)0U)) >> (64 - 8 * common->params.hash_len);
- self->bucket_size_ = (size_t)1 << common->params.bucket_bits;
- self->block_size_ = (size_t)1 << common->params.block_bits;
- self->block_mask_ = (uint32_t)(self->block_size_ - 1);
-}
-
-static void FN(Prepare)(HasherHandle handle, BROTLI_BOOL one_shot,
- size_t input_size, const uint8_t* data) {
- HashLongestMatch* self = FN(Self)(handle);
- uint16_t* num = FN(Num)(self);
- /* Partial preparation is 100 times slower (per socket). */
- size_t partial_prepare_threshold = self->bucket_size_ >> 6;
- if (one_shot && input_size <= partial_prepare_threshold) {
- size_t i;
- for (i = 0; i < input_size; ++i) {
- const uint32_t key = FN(HashBytes)(&data[i], self->hash_mask_,
- self->hash_shift_);
- num[key] = 0;
- }
- } else {
- memset(num, 0, self->bucket_size_ * sizeof(num[0]));
- }
-}
-
-static BROTLI_INLINE size_t FN(HashMemAllocInBytes)(
- const BrotliEncoderParams* params, BROTLI_BOOL one_shot,
- size_t input_size) {
- size_t bucket_size = (size_t)1 << params->hasher.bucket_bits;
- size_t block_size = (size_t)1 << params->hasher.block_bits;
- BROTLI_UNUSED(one_shot);
- BROTLI_UNUSED(input_size);
- return sizeof(HashLongestMatch) + bucket_size * (2 + 4 * block_size);
-}
-
-/* Look at 4 bytes at &data[ix & mask].
- Compute a hash from these, and store the value of ix at that position. */
-static BROTLI_INLINE void FN(Store)(HasherHandle handle, const uint8_t* data,
- const size_t mask, const size_t ix) {
- HashLongestMatch* self = FN(Self)(handle);
- uint16_t* num = FN(Num)(self);
- const uint32_t key = FN(HashBytes)(&data[ix & mask], self->hash_mask_,
- self->hash_shift_);
- const size_t minor_ix = num[key] & self->block_mask_;
- const size_t offset =
- minor_ix + (key << GetHasherCommon(handle)->params.block_bits);
- FN(Buckets)(self)[offset] = (uint32_t)ix;
- ++num[key];
-}
-
-static BROTLI_INLINE void FN(StoreRange)(HasherHandle handle,
- const uint8_t* data, const size_t mask, const size_t ix_start,
- const size_t ix_end) {
- size_t i;
- for (i = ix_start; i < ix_end; ++i) {
- FN(Store)(handle, data, mask, i);
- }
-}
-
-static BROTLI_INLINE void FN(StitchToPreviousBlock)(HasherHandle handle,
- size_t num_bytes, size_t position, const uint8_t* ringbuffer,
- size_t ringbuffer_mask) {
- if (num_bytes >= FN(HashTypeLength)() - 1 && position >= 3) {
- /* Prepare the hashes for three last bytes of the last write.
- These could not be calculated before, since they require knowledge
- of both the previous and the current block. */
- FN(Store)(handle, ringbuffer, ringbuffer_mask, position - 3);
- FN(Store)(handle, ringbuffer, ringbuffer_mask, position - 2);
- FN(Store)(handle, ringbuffer, ringbuffer_mask, position - 1);
- }
-}
-
-static BROTLI_INLINE void FN(PrepareDistanceCache)(
- HasherHandle handle, int* BROTLI_RESTRICT distance_cache) {
- PrepareDistanceCache(distance_cache,
- GetHasherCommon(handle)->params.num_last_distances_to_check);
-}
-
-/* Find a longest backward match of &data[cur_ix] up to the length of
- max_length and stores the position cur_ix in the hash table.
-
- REQUIRES: FN(PrepareDistanceCache) must be invoked for current distance cache
- values; if this method is invoked repeatedly with the same distance
- cache values, it is enough to invoke FN(PrepareDistanceCache) once.
-
- Does not look for matches longer than max_length.
- Does not look for matches further away than max_backward.
- Writes the best match into |out|.
- |out|->score is updated only if a better match is found. */
-static BROTLI_INLINE void FN(FindLongestMatch)(HasherHandle handle,
- const BrotliEncoderDictionary* dictionary,
- const uint8_t* BROTLI_RESTRICT data, const size_t ring_buffer_mask,
- const int* BROTLI_RESTRICT distance_cache, const size_t cur_ix,
- const size_t max_length, const size_t max_backward, const size_t gap,
- const size_t max_distance, HasherSearchResult* BROTLI_RESTRICT out) {
- HasherCommon* common = GetHasherCommon(handle);
- HashLongestMatch* self = FN(Self)(handle);
- uint16_t* num = FN(Num)(self);
- uint32_t* buckets = FN(Buckets)(self);
- const size_t cur_ix_masked = cur_ix & ring_buffer_mask;
- /* Don't accept a short copy from far away. */
- score_t min_score = out->score;
- score_t best_score = out->score;
- size_t best_len = out->len;
- size_t i;
- out->len = 0;
- out->len_code_delta = 0;
- /* Try last distance first. */
- for (i = 0; i < (size_t)common->params.num_last_distances_to_check; ++i) {
- const size_t backward = (size_t)distance_cache[i];
- size_t prev_ix = (size_t)(cur_ix - backward);
- if (prev_ix >= cur_ix) {
- continue;
- }
- if (BROTLI_PREDICT_FALSE(backward > max_backward)) {
- continue;
- }
- prev_ix &= ring_buffer_mask;
-
- if (cur_ix_masked + best_len > ring_buffer_mask ||
- prev_ix + best_len > ring_buffer_mask ||
- data[cur_ix_masked + best_len] != data[prev_ix + best_len]) {
- continue;
- }
- {
- const size_t len = FindMatchLengthWithLimit(&data[prev_ix],
- &data[cur_ix_masked],
- max_length);
- if (len >= 3 || (len == 2 && i < 2)) {
- /* Comparing for >= 2 does not change the semantics, but just saves for
- a few unnecessary binary logarithms in backward reference score,
- since we are not interested in such short matches. */
- score_t score = BackwardReferenceScoreUsingLastDistance(len);
- if (best_score < score) {
- if (i != 0) score -= BackwardReferencePenaltyUsingLastDistance(i);
- if (best_score < score) {
- best_score = score;
- best_len = len;
- out->len = best_len;
- out->distance = backward;
- out->score = best_score;
- }
- }
- }
- }
- }
- {
- const uint32_t key = FN(HashBytes)(
- &data[cur_ix_masked], self->hash_mask_, self->hash_shift_);
- uint32_t* BROTLI_RESTRICT bucket =
- &buckets[key << common->params.block_bits];
- const size_t down =
- (num[key] > self->block_size_) ?
- (num[key] - self->block_size_) : 0u;
- for (i = num[key]; i > down;) {
- size_t prev_ix = bucket[--i & self->block_mask_];
- const size_t backward = cur_ix - prev_ix;
- if (BROTLI_PREDICT_FALSE(backward > max_backward)) {
- break;
- }
- prev_ix &= ring_buffer_mask;
- if (cur_ix_masked + best_len > ring_buffer_mask ||
- prev_ix + best_len > ring_buffer_mask ||
- data[cur_ix_masked + best_len] != data[prev_ix + best_len]) {
- continue;
- }
- {
- const size_t len = FindMatchLengthWithLimit(&data[prev_ix],
- &data[cur_ix_masked],
- max_length);
- if (len >= 4) {
- /* Comparing for >= 3 does not change the semantics, but just saves
- for a few unnecessary binary logarithms in backward reference
- score, since we are not interested in such short matches. */
- score_t score = BackwardReferenceScore(len, backward);
- if (best_score < score) {
- best_score = score;
- best_len = len;
- out->len = best_len;
- out->distance = backward;
- out->score = best_score;
- }
- }
- }
- }
- bucket[num[key] & self->block_mask_] = (uint32_t)cur_ix;
- ++num[key];
- }
- if (min_score == out->score) {
- SearchInStaticDictionary(dictionary,
- handle, &data[cur_ix_masked], max_length, max_backward + gap,
- max_distance, out, BROTLI_FALSE);
- }
-}
-
-#undef HashLongestMatch
diff --git a/BaseTools/Source/C/BrotliCompress/enc/hash_longest_match_inc.h b/BaseTools/Source/C/BrotliCompress/enc/hash_longest_match_inc.h
deleted file mode 100644
index 108a7faaccb1..000000000000
--- a/BaseTools/Source/C/BrotliCompress/enc/hash_longest_match_inc.h
+++ /dev/null
@@ -1,258 +0,0 @@
-/* NOLINT(build/header_guard) */
-/* Copyright 2010 Google Inc. All Rights Reserved.
-
- Distributed under MIT license.
- See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
-*/
-
-/* template parameters: FN */
-
-/* A (forgetful) hash table to the data seen by the compressor, to
- help create backward references to previous data.
-
- This is a hash map of fixed size (bucket_size_) to a ring buffer of
- fixed size (block_size_). The ring buffer contains the last block_size_
- index positions of the given hash key in the compressed data. */
-
-#define HashLongestMatch HASHER()
-
-static BROTLI_INLINE size_t FN(HashTypeLength)(void) { return 4; }
-static BROTLI_INLINE size_t FN(StoreLookahead)(void) { return 4; }
-
-/* HashBytes is the function that chooses the bucket to place the address in. */
-static uint32_t FN(HashBytes)(const uint8_t* data, const int shift) {
- uint32_t h = BROTLI_UNALIGNED_LOAD32LE(data) * kHashMul32;
- /* The higher bits contain more mixture from the multiplication,
- so we take our results from there. */
- return (uint32_t)(h >> shift);
-}
-
-typedef struct HashLongestMatch {
- /* Number of hash buckets. */
- size_t bucket_size_;
- /* Only block_size_ newest backward references are kept,
- and the older are forgotten. */
- size_t block_size_;
- /* Left-shift for computing hash bucket index from hash value. */
- int hash_shift_;
- /* Mask for accessing entries in a block (in a ring-buffer manner). */
- uint32_t block_mask_;
-
- /* --- Dynamic size members --- */
-
- /* Number of entries in a particular bucket. */
- /* uint16_t num[bucket_size]; */
-
- /* Buckets containing block_size_ of backward references. */
- /* uint32_t* buckets[bucket_size * block_size]; */
-} HashLongestMatch;
-
-static BROTLI_INLINE HashLongestMatch* FN(Self)(HasherHandle handle) {
- return (HashLongestMatch*)&(GetHasherCommon(handle)[1]);
-}
-
-static BROTLI_INLINE uint16_t* FN(Num)(HashLongestMatch* self) {
- return (uint16_t*)(&self[1]);
-}
-
-static BROTLI_INLINE uint32_t* FN(Buckets)(HashLongestMatch* self) {
- return (uint32_t*)(&FN(Num)(self)[self->bucket_size_]);
-}
-
-static void FN(Initialize)(
- HasherHandle handle, const BrotliEncoderParams* params) {
- HasherCommon* common = GetHasherCommon(handle);
- HashLongestMatch* self = FN(Self)(handle);
- BROTLI_UNUSED(params);
- self->hash_shift_ = 32 - common->params.bucket_bits;
- self->bucket_size_ = (size_t)1 << common->params.bucket_bits;
- self->block_size_ = (size_t)1 << common->params.block_bits;
- self->block_mask_ = (uint32_t)(self->block_size_ - 1);
-}
-
-static void FN(Prepare)(HasherHandle handle, BROTLI_BOOL one_shot,
- size_t input_size, const uint8_t* data) {
- HashLongestMatch* self = FN(Self)(handle);
- uint16_t* num = FN(Num)(self);
- /* Partial preparation is 100 times slower (per socket). */
- size_t partial_prepare_threshold = self->bucket_size_ >> 6;
- if (one_shot && input_size <= partial_prepare_threshold) {
- size_t i;
- for (i = 0; i < input_size; ++i) {
- const uint32_t key = FN(HashBytes)(&data[i], self->hash_shift_);
- num[key] = 0;
- }
- } else {
- memset(num, 0, self->bucket_size_ * sizeof(num[0]));
- }
-}
-
-static BROTLI_INLINE size_t FN(HashMemAllocInBytes)(
- const BrotliEncoderParams* params, BROTLI_BOOL one_shot,
- size_t input_size) {
- size_t bucket_size = (size_t)1 << params->hasher.bucket_bits;
- size_t block_size = (size_t)1 << params->hasher.block_bits;
- BROTLI_UNUSED(one_shot);
- BROTLI_UNUSED(input_size);
- return sizeof(HashLongestMatch) + bucket_size * (2 + 4 * block_size);
-}
-
-/* Look at 4 bytes at &data[ix & mask].
- Compute a hash from these, and store the value of ix at that position. */
-static BROTLI_INLINE void FN(Store)(HasherHandle handle, const uint8_t* data,
- const size_t mask, const size_t ix) {
- HashLongestMatch* self = FN(Self)(handle);
- uint16_t* num = FN(Num)(self);
- const uint32_t key = FN(HashBytes)(&data[ix & mask], self->hash_shift_);
- const size_t minor_ix = num[key] & self->block_mask_;
- const size_t offset =
- minor_ix + (key << GetHasherCommon(handle)->params.block_bits);
- FN(Buckets)(self)[offset] = (uint32_t)ix;
- ++num[key];
-}
-
-static BROTLI_INLINE void FN(StoreRange)(HasherHandle handle,
- const uint8_t* data, const size_t mask, const size_t ix_start,
- const size_t ix_end) {
- size_t i;
- for (i = ix_start; i < ix_end; ++i) {
- FN(Store)(handle, data, mask, i);
- }
-}
-
-static BROTLI_INLINE void FN(StitchToPreviousBlock)(HasherHandle handle,
- size_t num_bytes, size_t position, const uint8_t* ringbuffer,
- size_t ringbuffer_mask) {
- if (num_bytes >= FN(HashTypeLength)() - 1 && position >= 3) {
- /* Prepare the hashes for three last bytes of the last write.
- These could not be calculated before, since they require knowledge
- of both the previous and the current block. */
- FN(Store)(handle, ringbuffer, ringbuffer_mask, position - 3);
- FN(Store)(handle, ringbuffer, ringbuffer_mask, position - 2);
- FN(Store)(handle, ringbuffer, ringbuffer_mask, position - 1);
- }
-}
-
-static BROTLI_INLINE void FN(PrepareDistanceCache)(
- HasherHandle handle, int* BROTLI_RESTRICT distance_cache) {
- PrepareDistanceCache(distance_cache,
- GetHasherCommon(handle)->params.num_last_distances_to_check);
-}
-
-/* Find a longest backward match of &data[cur_ix] up to the length of
- max_length and stores the position cur_ix in the hash table.
-
- REQUIRES: FN(PrepareDistanceCache) must be invoked for current distance cache
- values; if this method is invoked repeatedly with the same distance
- cache values, it is enough to invoke FN(PrepareDistanceCache) once.
-
- Does not look for matches longer than max_length.
- Does not look for matches further away than max_backward.
- Writes the best match into |out|.
- |out|->score is updated only if a better match is found. */
-static BROTLI_INLINE void FN(FindLongestMatch)(HasherHandle handle,
- const BrotliEncoderDictionary* dictionary,
- const uint8_t* BROTLI_RESTRICT data, const size_t ring_buffer_mask,
- const int* BROTLI_RESTRICT distance_cache, const size_t cur_ix,
- const size_t max_length, const size_t max_backward, const size_t gap,
- const size_t max_distance, HasherSearchResult* BROTLI_RESTRICT out) {
- HasherCommon* common = GetHasherCommon(handle);
- HashLongestMatch* self = FN(Self)(handle);
- uint16_t* num = FN(Num)(self);
- uint32_t* buckets = FN(Buckets)(self);
- const size_t cur_ix_masked = cur_ix & ring_buffer_mask;
- /* Don't accept a short copy from far away. */
- score_t min_score = out->score;
- score_t best_score = out->score;
- size_t best_len = out->len;
- size_t i;
- out->len = 0;
- out->len_code_delta = 0;
- /* Try last distance first. */
- for (i = 0; i < (size_t)common->params.num_last_distances_to_check; ++i) {
- const size_t backward = (size_t)distance_cache[i];
- size_t prev_ix = (size_t)(cur_ix - backward);
- if (prev_ix >= cur_ix) {
- continue;
- }
- if (BROTLI_PREDICT_FALSE(backward > max_backward)) {
- continue;
- }
- prev_ix &= ring_buffer_mask;
-
- if (cur_ix_masked + best_len > ring_buffer_mask ||
- prev_ix + best_len > ring_buffer_mask ||
- data[cur_ix_masked + best_len] != data[prev_ix + best_len]) {
- continue;
- }
- {
- const size_t len = FindMatchLengthWithLimit(&data[prev_ix],
- &data[cur_ix_masked],
- max_length);
- if (len >= 3 || (len == 2 && i < 2)) {
- /* Comparing for >= 2 does not change the semantics, but just saves for
- a few unnecessary binary logarithms in backward reference score,
- since we are not interested in such short matches. */
- score_t score = BackwardReferenceScoreUsingLastDistance(len);
- if (best_score < score) {
- if (i != 0) score -= BackwardReferencePenaltyUsingLastDistance(i);
- if (best_score < score) {
- best_score = score;
- best_len = len;
- out->len = best_len;
- out->distance = backward;
- out->score = best_score;
- }
- }
- }
- }
- }
- {
- const uint32_t key =
- FN(HashBytes)(&data[cur_ix_masked], self->hash_shift_);
- uint32_t* BROTLI_RESTRICT bucket =
- &buckets[key << common->params.block_bits];
- const size_t down =
- (num[key] > self->block_size_) ? (num[key] - self->block_size_) : 0u;
- for (i = num[key]; i > down;) {
- size_t prev_ix = bucket[--i & self->block_mask_];
- const size_t backward = cur_ix - prev_ix;
- if (BROTLI_PREDICT_FALSE(backward > max_backward)) {
- break;
- }
- prev_ix &= ring_buffer_mask;
- if (cur_ix_masked + best_len > ring_buffer_mask ||
- prev_ix + best_len > ring_buffer_mask ||
- data[cur_ix_masked + best_len] != data[prev_ix + best_len]) {
- continue;
- }
- {
- const size_t len = FindMatchLengthWithLimit(&data[prev_ix],
- &data[cur_ix_masked],
- max_length);
- if (len >= 4) {
- /* Comparing for >= 3 does not change the semantics, but just saves
- for a few unnecessary binary logarithms in backward reference
- score, since we are not interested in such short matches. */
- score_t score = BackwardReferenceScore(len, backward);
- if (best_score < score) {
- best_score = score;
- best_len = len;
- out->len = best_len;
- out->distance = backward;
- out->score = best_score;
- }
- }
- }
- }
- bucket[num[key] & self->block_mask_] = (uint32_t)cur_ix;
- ++num[key];
- }
- if (min_score == out->score) {
- SearchInStaticDictionary(dictionary,
- handle, &data[cur_ix_masked], max_length, max_backward + gap,
- max_distance, out, BROTLI_FALSE);
- }
-}
-
-#undef HashLongestMatch
diff --git a/BaseTools/Source/C/BrotliCompress/enc/hash_longest_match_quickly_inc.h b/BaseTools/Source/C/BrotliCompress/enc/hash_longest_match_quickly_inc.h
deleted file mode 100644
index 49338f97db48..000000000000
--- a/BaseTools/Source/C/BrotliCompress/enc/hash_longest_match_quickly_inc.h
+++ /dev/null
@@ -1,235 +0,0 @@
-/* NOLINT(build/header_guard) */
-/* Copyright 2010 Google Inc. All Rights Reserved.
-
- Distributed under MIT license.
- See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
-*/
-
-/* template parameters: FN, BUCKET_BITS, BUCKET_SWEEP, HASH_LEN,
- USE_DICTIONARY
- */
-
-#define HashLongestMatchQuickly HASHER()
-
-#define BUCKET_SIZE (1 << BUCKET_BITS)
-
-#define HASH_MAP_SIZE (4 << BUCKET_BITS)
-
-static BROTLI_INLINE size_t FN(HashTypeLength)(void) { return 8; }
-static BROTLI_INLINE size_t FN(StoreLookahead)(void) { return 8; }
-
-/* HashBytes is the function that chooses the bucket to place
- the address in. The HashLongestMatch and HashLongestMatchQuickly
- classes have separate, different implementations of hashing. */
-static uint32_t FN(HashBytes)(const uint8_t* data) {
- const uint64_t h = ((BROTLI_UNALIGNED_LOAD64LE(data) << (64 - 8 * HASH_LEN)) *
- kHashMul64);
- /* The higher bits contain more mixture from the multiplication,
- so we take our results from there. */
- return (uint32_t)(h >> (64 - BUCKET_BITS));
-}
-
-/* A (forgetful) hash table to the data seen by the compressor, to
- help create backward references to previous data.
-
- This is a hash map of fixed size (BUCKET_SIZE). Starting from the
- given index, BUCKET_SWEEP buckets are used to store values of a key. */
-typedef struct HashLongestMatchQuickly {
- uint32_t buckets_[BUCKET_SIZE + BUCKET_SWEEP];
-} HashLongestMatchQuickly;
-
-static BROTLI_INLINE HashLongestMatchQuickly* FN(Self)(HasherHandle handle) {
- return (HashLongestMatchQuickly*)&(GetHasherCommon(handle)[1]);
-}
-
-static void FN(Initialize)(
- HasherHandle handle, const BrotliEncoderParams* params) {
- BROTLI_UNUSED(handle);
- BROTLI_UNUSED(params);
-}
-
-static void FN(Prepare)(HasherHandle handle, BROTLI_BOOL one_shot,
- size_t input_size, const uint8_t* data) {
- HashLongestMatchQuickly* self = FN(Self)(handle);
- /* Partial preparation is 100 times slower (per socket). */
- size_t partial_prepare_threshold = HASH_MAP_SIZE >> 7;
- if (one_shot && input_size <= partial_prepare_threshold) {
- size_t i;
- for (i = 0; i < input_size; ++i) {
- const uint32_t key = FN(HashBytes)(&data[i]);
- memset(&self->buckets_[key], 0, BUCKET_SWEEP * sizeof(self->buckets_[0]));
- }
- } else {
- /* It is not strictly necessary to fill this buffer here, but
- not filling will make the results of the compression stochastic
- (but correct). This is because random data would cause the
- system to find accidentally good backward references here and there. */
- memset(&self->buckets_[0], 0, sizeof(self->buckets_));
- }
-}
-
-static BROTLI_INLINE size_t FN(HashMemAllocInBytes)(
- const BrotliEncoderParams* params, BROTLI_BOOL one_shot,
- size_t input_size) {
- BROTLI_UNUSED(params);
- BROTLI_UNUSED(one_shot);
- BROTLI_UNUSED(input_size);
- return sizeof(HashLongestMatchQuickly);
-}
-
-/* Look at 5 bytes at &data[ix & mask].
- Compute a hash from these, and store the value somewhere within
- [ix .. ix+3]. */
-static BROTLI_INLINE void FN(Store)(HasherHandle handle,
- const uint8_t* data, const size_t mask, const size_t ix) {
- const uint32_t key = FN(HashBytes)(&data[ix & mask]);
- /* Wiggle the value with the bucket sweep range. */
- const uint32_t off = (ix >> 3) % BUCKET_SWEEP;
- FN(Self)(handle)->buckets_[key + off] = (uint32_t)ix;
-}
-
-static BROTLI_INLINE void FN(StoreRange)(HasherHandle handle,
- const uint8_t* data, const size_t mask, const size_t ix_start,
- const size_t ix_end) {
- size_t i;
- for (i = ix_start; i < ix_end; ++i) {
- FN(Store)(handle, data, mask, i);
- }
-}
-
-static BROTLI_INLINE void FN(StitchToPreviousBlock)(
- HasherHandle handle, size_t num_bytes, size_t position,
- const uint8_t* ringbuffer, size_t ringbuffer_mask) {
- if (num_bytes >= FN(HashTypeLength)() - 1 && position >= 3) {
- /* Prepare the hashes for three last bytes of the last write.
- These could not be calculated before, since they require knowledge
- of both the previous and the current block. */
- FN(Store)(handle, ringbuffer, ringbuffer_mask, position - 3);
- FN(Store)(handle, ringbuffer, ringbuffer_mask, position - 2);
- FN(Store)(handle, ringbuffer, ringbuffer_mask, position - 1);
- }
-}
-
-static BROTLI_INLINE void FN(PrepareDistanceCache)(
- HasherHandle handle, int* BROTLI_RESTRICT distance_cache) {
- BROTLI_UNUSED(handle);
- BROTLI_UNUSED(distance_cache);
-}
-
-/* Find a longest backward match of &data[cur_ix & ring_buffer_mask]
- up to the length of max_length and stores the position cur_ix in the
- hash table.
-
- Does not look for matches longer than max_length.
- Does not look for matches further away than max_backward.
- Writes the best match into |out|.
- |out|->score is updated only if a better match is found. */
-static BROTLI_INLINE void FN(FindLongestMatch)(
- HasherHandle handle, const BrotliEncoderDictionary* dictionary,
- const uint8_t* BROTLI_RESTRICT data,
- const size_t ring_buffer_mask, const int* BROTLI_RESTRICT distance_cache,
- const size_t cur_ix, const size_t max_length, const size_t max_backward,
- const size_t gap, const size_t max_distance,
- HasherSearchResult* BROTLI_RESTRICT out) {
- HashLongestMatchQuickly* self = FN(Self)(handle);
- const size_t best_len_in = out->len;
- const size_t cur_ix_masked = cur_ix & ring_buffer_mask;
- const uint32_t key = FN(HashBytes)(&data[cur_ix_masked]);
- int compare_char = data[cur_ix_masked + best_len_in];
- score_t min_score = out->score;
- score_t best_score = out->score;
- size_t best_len = best_len_in;
- size_t cached_backward = (size_t)distance_cache[0];
- size_t prev_ix = cur_ix - cached_backward;
- out->len_code_delta = 0;
- if (prev_ix < cur_ix) {
- prev_ix &= (uint32_t)ring_buffer_mask;
- if (compare_char == data[prev_ix + best_len]) {
- size_t len = FindMatchLengthWithLimit(&data[prev_ix],
- &data[cur_ix_masked],
- max_length);
- if (len >= 4) {
- const score_t score = BackwardReferenceScoreUsingLastDistance(len);
- if (best_score < score) {
- best_score = score;
- best_len = len;
- out->len = len;
- out->distance = cached_backward;
- out->score = best_score;
- compare_char = data[cur_ix_masked + best_len];
- if (BUCKET_SWEEP == 1) {
- self->buckets_[key] = (uint32_t)cur_ix;
- return;
- }
- }
- }
- }
- }
- if (BUCKET_SWEEP == 1) {
- size_t backward;
- size_t len;
- /* Only one to look for, don't bother to prepare for a loop. */
- prev_ix = self->buckets_[key];
- self->buckets_[key] = (uint32_t)cur_ix;
- backward = cur_ix - prev_ix;
- prev_ix &= (uint32_t)ring_buffer_mask;
- if (compare_char != data[prev_ix + best_len_in]) {
- return;
- }
- if (BROTLI_PREDICT_FALSE(backward == 0 || backward > max_backward)) {
- return;
- }
- len = FindMatchLengthWithLimit(&data[prev_ix],
- &data[cur_ix_masked],
- max_length);
- if (len >= 4) {
- const score_t score = BackwardReferenceScore(len, backward);
- if (best_score < score) {
- out->len = len;
- out->distance = backward;
- out->score = score;
- return;
- }
- }
- } else {
- uint32_t* bucket = self->buckets_ + key;
- int i;
- prev_ix = *bucket++;
- for (i = 0; i < BUCKET_SWEEP; ++i, prev_ix = *bucket++) {
- const size_t backward = cur_ix - prev_ix;
- size_t len;
- prev_ix &= (uint32_t)ring_buffer_mask;
- if (compare_char != data[prev_ix + best_len]) {
- continue;
- }
- if (BROTLI_PREDICT_FALSE(backward == 0 || backward > max_backward)) {
- continue;
- }
- len = FindMatchLengthWithLimit(&data[prev_ix],
- &data[cur_ix_masked],
- max_length);
- if (len >= 4) {
- const score_t score = BackwardReferenceScore(len, backward);
- if (best_score < score) {
- best_score = score;
- best_len = len;
- out->len = best_len;
- out->distance = backward;
- out->score = score;
- compare_char = data[cur_ix_masked + best_len];
- }
- }
- }
- }
- if (USE_DICTIONARY && min_score == out->score) {
- SearchInStaticDictionary(dictionary,
- handle, &data[cur_ix_masked], max_length, max_backward + gap,
- max_distance, out, BROTLI_TRUE);
- }
- self->buckets_[key + ((cur_ix >> 3) % BUCKET_SWEEP)] = (uint32_t)cur_ix;
-}
-
-#undef HASH_MAP_SIZE
-#undef BUCKET_SIZE
-
-#undef HashLongestMatchQuickly
diff --git a/BaseTools/Source/C/BrotliCompress/enc/hash_rolling_inc.h b/BaseTools/Source/C/BrotliCompress/enc/hash_rolling_inc.h
deleted file mode 100644
index b8e3b21b5e33..000000000000
--- a/BaseTools/Source/C/BrotliCompress/enc/hash_rolling_inc.h
+++ /dev/null
@@ -1,215 +0,0 @@
-/* NOLINT(build/header_guard) */
-/* Copyright 2018 Google Inc. All Rights Reserved.
-
- Distributed under MIT license.
- See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
-*/
-
-/* template parameters: FN, JUMP, NUMBUCKETS, MASK, CHUNKLEN */
-/* NUMBUCKETS / (MASK + 1) = probability of storing and using hash code. */
-/* JUMP = skip bytes for speedup */
-
-/* Rolling hash for long distance long string matches. Stores one position
- per bucket, bucket key is computed over a long region. */
-
-#define HashRolling HASHER()
-
-static const uint32_t FN(kRollingHashMul32) = 69069;
-static const uint32_t FN(kInvalidPos) = 0xffffffff;
-
-/* This hasher uses a longer forward length, but returning a higher value here
- will hurt compression by the main hasher when combined with a composite
- hasher. The hasher tests for forward itself instead. */
-static BROTLI_INLINE size_t FN(HashTypeLength)(void) { return 4; }
-static BROTLI_INLINE size_t FN(StoreLookahead)(void) { return 4; }
-
-/* Computes a code from a single byte. A lookup table of 256 values could be
- used, but simply adding 1 works about as good. */
-static uint32_t FN(HashByte)(uint8_t byte) {
- return (uint32_t)byte + 1u;
-}
-
-static uint32_t FN(HashRollingFunctionInitial)(uint32_t state, uint8_t add,
- uint32_t factor) {
- return (uint32_t)(factor * state + FN(HashByte)(add));
-}
-
-static uint32_t FN(HashRollingFunction)(uint32_t state, uint8_t add,
- uint8_t rem, uint32_t factor,
- uint32_t factor_remove) {
- return (uint32_t)(factor * state +
- FN(HashByte)(add) - factor_remove * FN(HashByte)(rem));
-}
-
-typedef struct HashRolling {
- uint32_t state;
- uint32_t* table;
- size_t next_ix;
-
- uint32_t chunk_len;
- uint32_t factor;
- uint32_t factor_remove;
-} HashRolling;
-
-static BROTLI_INLINE HashRolling* FN(Self)(HasherHandle handle) {
- return (HashRolling*)&(GetHasherCommon(handle)[1]);
-}
-
-static void FN(Initialize)(
- HasherHandle handle, const BrotliEncoderParams* params) {
- HashRolling* self = FN(Self)(handle);
- size_t i;
- self->state = 0;
- self->next_ix = 0;
-
- self->factor = FN(kRollingHashMul32);
-
- /* Compute the factor of the oldest byte to remove: factor**steps modulo
- 0xffffffff (the multiplications rely on 32-bit overflow) */
- self->factor_remove = 1;
- for (i = 0; i < CHUNKLEN; i += JUMP) {
- self->factor_remove *= self->factor;
- }
-
- self->table = (uint32_t*)((HasherHandle)self + sizeof(HashRolling));
- for (i = 0; i < NUMBUCKETS; i++) {
- self->table[i] = FN(kInvalidPos);
- }
-
- BROTLI_UNUSED(params);
-}
-
-static void FN(Prepare)(HasherHandle handle, BROTLI_BOOL one_shot,
- size_t input_size, const uint8_t* data) {
- HashRolling* self = FN(Self)(handle);
- size_t i;
- /* Too small size, cannot use this hasher. */
- if (input_size < CHUNKLEN) return;
- self->state = 0;
- for (i = 0; i < CHUNKLEN; i += JUMP) {
- self->state = FN(HashRollingFunctionInitial)(
- self->state, data[i], self->factor);
- }
- BROTLI_UNUSED(one_shot);
-}
-
-static BROTLI_INLINE size_t FN(HashMemAllocInBytes)(
- const BrotliEncoderParams* params, BROTLI_BOOL one_shot,
- size_t input_size) {
- return sizeof(HashRolling) + NUMBUCKETS * sizeof(uint32_t);
- BROTLI_UNUSED(params);
- BROTLI_UNUSED(one_shot);
- BROTLI_UNUSED(input_size);
-}
-
-static BROTLI_INLINE void FN(Store)(HasherHandle BROTLI_RESTRICT handle,
- const uint8_t* BROTLI_RESTRICT data, const size_t mask, const size_t ix) {
- BROTLI_UNUSED(handle);
- BROTLI_UNUSED(data);
- BROTLI_UNUSED(mask);
- BROTLI_UNUSED(ix);
-}
-
-static BROTLI_INLINE void FN(StoreRange)(HasherHandle handle,
- const uint8_t* data, const size_t mask, const size_t ix_start,
- const size_t ix_end) {
- BROTLI_UNUSED(handle);
- BROTLI_UNUSED(data);
- BROTLI_UNUSED(mask);
- BROTLI_UNUSED(ix_start);
- BROTLI_UNUSED(ix_end);
-}
-
-static BROTLI_INLINE void FN(StitchToPreviousBlock)(HasherHandle handle,
- size_t num_bytes, size_t position, const uint8_t* ringbuffer,
- size_t ring_buffer_mask) {
- /* In this case we must re-initialize the hasher from scratch from the
- current position. */
- HashRolling* self = FN(Self)(handle);
- size_t position_masked;
- size_t available = num_bytes;
- if ((position & (JUMP - 1)) != 0) {
- size_t diff = JUMP - (position & (JUMP - 1));
- available = (diff > available) ? 0 : (available - diff);
- position += diff;
- }
- position_masked = position & ring_buffer_mask;
- /* wrapping around ringbuffer not handled. */
- if (available > ring_buffer_mask - position_masked) {
- available = ring_buffer_mask - position_masked;
- }
-
- FN(Prepare)(handle, BROTLI_FALSE, available,
- ringbuffer + (position & ring_buffer_mask));
- self->next_ix = position;
- BROTLI_UNUSED(num_bytes);
-}
-
-static BROTLI_INLINE void FN(PrepareDistanceCache)(
- HasherHandle handle, int* BROTLI_RESTRICT distance_cache) {
- BROTLI_UNUSED(handle);
- BROTLI_UNUSED(distance_cache);
-}
-
-static BROTLI_INLINE void FN(FindLongestMatch)(HasherHandle handle,
- const BrotliEncoderDictionary* dictionary,
- const uint8_t* BROTLI_RESTRICT data, const size_t ring_buffer_mask,
- const int* BROTLI_RESTRICT distance_cache, const size_t cur_ix,
- const size_t max_length, const size_t max_backward, const size_t gap,
- const size_t max_distance, HasherSearchResult* BROTLI_RESTRICT out) {
- HashRolling* self = FN(Self)(handle);
- const size_t cur_ix_masked = cur_ix & ring_buffer_mask;
- size_t pos = self->next_ix;
-
- if ((cur_ix & (JUMP - 1)) != 0) return;
-
- /* Not enough lookahead */
- if (max_length < CHUNKLEN) return;
-
- for (pos = self->next_ix; pos <= cur_ix; pos += JUMP) {
- uint32_t code = self->state & MASK;
-
- uint8_t rem = data[pos & ring_buffer_mask];
- uint8_t add = data[(pos + CHUNKLEN) & ring_buffer_mask];
- size_t found_ix = FN(kInvalidPos);
-
- self->state = FN(HashRollingFunction)(
- self->state, add, rem, self->factor, self->factor_remove);
-
- if (code < NUMBUCKETS) {
- found_ix = self->table[code];
- self->table[code] = (uint32_t)pos;
- if (pos == cur_ix && found_ix != FN(kInvalidPos)) {
- /* The cast to 32-bit makes backward distances up to 4GB work even
- if cur_ix is above 4GB, despite using 32-bit values in the table. */
- size_t backward = (uint32_t)(cur_ix - found_ix);
- if (backward <= max_backward) {
- const size_t found_ix_masked = found_ix & ring_buffer_mask;
- const size_t len = FindMatchLengthWithLimit(&data[found_ix_masked],
- &data[cur_ix_masked],
- max_length);
- if (len >= 4 && len > out->len) {
- score_t score = BackwardReferenceScore(len, backward);
- if (score > out->score) {
- out->len = len;
- out->distance = backward;
- out->score = score;
- out->len_code_delta = 0;
- }
- }
- }
- }
- }
- }
-
- self->next_ix = cur_ix + JUMP;
-
- /* NOTE: this hasher does not search in the dictionary. It is used as
- backup-hasher, the main hasher already searches in it. */
- BROTLI_UNUSED(dictionary);
- BROTLI_UNUSED(distance_cache);
- BROTLI_UNUSED(gap);
- BROTLI_UNUSED(max_distance);
-}
-
-#undef HashRolling
diff --git a/BaseTools/Source/C/BrotliCompress/enc/hash_to_binary_tree_inc.h b/BaseTools/Source/C/BrotliCompress/enc/hash_to_binary_tree_inc.h
deleted file mode 100644
index 09c2642030b0..000000000000
--- a/BaseTools/Source/C/BrotliCompress/enc/hash_to_binary_tree_inc.h
+++ /dev/null
@@ -1,327 +0,0 @@
-/* NOLINT(build/header_guard) */
-/* Copyright 2016 Google Inc. All Rights Reserved.
-
- Distributed under MIT license.
- See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
-*/
-
-/* template parameters: FN, BUCKET_BITS, MAX_TREE_COMP_LENGTH,
- MAX_TREE_SEARCH_DEPTH */
-
-/* A (forgetful) hash table where each hash bucket contains a binary tree of
- sequences whose first 4 bytes share the same hash code.
- Each sequence is MAX_TREE_COMP_LENGTH long and is identified by its starting
- position in the input data. The binary tree is sorted by the lexicographic
- order of the sequences, and it is also a max-heap with respect to the
- starting positions. */
-
-#define HashToBinaryTree HASHER()
-
-#define BUCKET_SIZE (1 << BUCKET_BITS)
-
-static BROTLI_INLINE size_t FN(HashTypeLength)(void) { return 4; }
-static BROTLI_INLINE size_t FN(StoreLookahead)(void) {
- return MAX_TREE_COMP_LENGTH;
-}
-
-static uint32_t FN(HashBytes)(const uint8_t* data) {
- uint32_t h = BROTLI_UNALIGNED_LOAD32LE(data) * kHashMul32;
- /* The higher bits contain more mixture from the multiplication,
- so we take our results from there. */
- return h >> (32 - BUCKET_BITS);
-}
-
-typedef struct HashToBinaryTree {
- /* The window size minus 1 */
- size_t window_mask_;
-
- /* Hash table that maps the 4-byte hashes of the sequence to the last
- position where this hash was found, which is the root of the binary
- tree of sequences that share this hash bucket. */
- uint32_t buckets_[BUCKET_SIZE];
-
- /* A position used to mark a non-existent sequence, i.e. a tree is empty if
- its root is at invalid_pos_ and a node is a leaf if both its children
- are at invalid_pos_. */
- uint32_t invalid_pos_;
-
- /* --- Dynamic size members --- */
-
- /* The union of the binary trees of each hash bucket. The root of the tree
- corresponding to a hash is a sequence starting at buckets_[hash] and
- the left and right children of a sequence starting at pos are
- forest_[2 * pos] and forest_[2 * pos + 1]. */
- /* uint32_t forest[2 * num_nodes] */
-} HashToBinaryTree;
-
-static BROTLI_INLINE HashToBinaryTree* FN(Self)(HasherHandle handle) {
- return (HashToBinaryTree*)&(GetHasherCommon(handle)[1]);
-}
-
-static BROTLI_INLINE uint32_t* FN(Forest)(HashToBinaryTree* self) {
- return (uint32_t*)(&self[1]);
-}
-
-static void FN(Initialize)(
- HasherHandle handle, const BrotliEncoderParams* params) {
- HashToBinaryTree* self = FN(Self)(handle);
- self->window_mask_ = (1u << params->lgwin) - 1u;
- self->invalid_pos_ = (uint32_t)(0 - self->window_mask_);
-}
-
-static void FN(Prepare)(HasherHandle handle, BROTLI_BOOL one_shot,
- size_t input_size, const uint8_t* data) {
- HashToBinaryTree* self = FN(Self)(handle);
- uint32_t invalid_pos = self->invalid_pos_;
- uint32_t i;
- BROTLI_UNUSED(data);
- BROTLI_UNUSED(one_shot);
- BROTLI_UNUSED(input_size);
- for (i = 0; i < BUCKET_SIZE; i++) {
- self->buckets_[i] = invalid_pos;
- }
-}
-
-static BROTLI_INLINE size_t FN(HashMemAllocInBytes)(
- const BrotliEncoderParams* params, BROTLI_BOOL one_shot,
- size_t input_size) {
- size_t num_nodes = (size_t)1 << params->lgwin;
- if (one_shot && input_size < num_nodes) {
- num_nodes = input_size;
- }
- return sizeof(HashToBinaryTree) + 2 * sizeof(uint32_t) * num_nodes;
-}
-
-static BROTLI_INLINE size_t FN(LeftChildIndex)(HashToBinaryTree* self,
- const size_t pos) {
- return 2 * (pos & self->window_mask_);
-}
-
-static BROTLI_INLINE size_t FN(RightChildIndex)(HashToBinaryTree* self,
- const size_t pos) {
- return 2 * (pos & self->window_mask_) + 1;
-}
-
-/* Stores the hash of the next 4 bytes and in a single tree-traversal, the
- hash bucket's binary tree is searched for matches and is re-rooted at the
- current position.
-
- If less than MAX_TREE_COMP_LENGTH data is available, the hash bucket of the
- current position is searched for matches, but the state of the hash table
- is not changed, since we can not know the final sorting order of the
- current (incomplete) sequence.
-
- This function must be called with increasing cur_ix positions. */
-static BROTLI_INLINE BackwardMatch* FN(StoreAndFindMatches)(
- HashToBinaryTree* self, const uint8_t* const BROTLI_RESTRICT data,
- const size_t cur_ix, const size_t ring_buffer_mask, const size_t max_length,
- const size_t max_backward, size_t* const BROTLI_RESTRICT best_len,
- BackwardMatch* BROTLI_RESTRICT matches) {
- const size_t cur_ix_masked = cur_ix & ring_buffer_mask;
- const size_t max_comp_len =
- BROTLI_MIN(size_t, max_length, MAX_TREE_COMP_LENGTH);
- const BROTLI_BOOL should_reroot_tree =
- TO_BROTLI_BOOL(max_length >= MAX_TREE_COMP_LENGTH);
- const uint32_t key = FN(HashBytes)(&data[cur_ix_masked]);
- uint32_t* forest = FN(Forest)(self);
- size_t prev_ix = self->buckets_[key];
- /* The forest index of the rightmost node of the left subtree of the new
- root, updated as we traverse and re-root the tree of the hash bucket. */
- size_t node_left = FN(LeftChildIndex)(self, cur_ix);
- /* The forest index of the leftmost node of the right subtree of the new
- root, updated as we traverse and re-root the tree of the hash bucket. */
- size_t node_right = FN(RightChildIndex)(self, cur_ix);
- /* The match length of the rightmost node of the left subtree of the new
- root, updated as we traverse and re-root the tree of the hash bucket. */
- size_t best_len_left = 0;
- /* The match length of the leftmost node of the right subtree of the new
- root, updated as we traverse and re-root the tree of the hash bucket. */
- size_t best_len_right = 0;
- size_t depth_remaining;
- if (should_reroot_tree) {
- self->buckets_[key] = (uint32_t)cur_ix;
- }
- for (depth_remaining = MAX_TREE_SEARCH_DEPTH; ; --depth_remaining) {
- const size_t backward = cur_ix - prev_ix;
- const size_t prev_ix_masked = prev_ix & ring_buffer_mask;
- if (backward == 0 || backward > max_backward || depth_remaining == 0) {
- if (should_reroot_tree) {
- forest[node_left] = self->invalid_pos_;
- forest[node_right] = self->invalid_pos_;
- }
- break;
- }
- {
- const size_t cur_len = BROTLI_MIN(size_t, best_len_left, best_len_right);
- size_t len;
- BROTLI_DCHECK(cur_len <= MAX_TREE_COMP_LENGTH);
- len = cur_len +
- FindMatchLengthWithLimit(&data[cur_ix_masked + cur_len],
- &data[prev_ix_masked + cur_len],
- max_length - cur_len);
- BROTLI_DCHECK(
- 0 == memcmp(&data[cur_ix_masked], &data[prev_ix_masked], len));
- if (matches && len > *best_len) {
- *best_len = len;
- InitBackwardMatch(matches++, backward, len);
- }
- if (len >= max_comp_len) {
- if (should_reroot_tree) {
- forest[node_left] = forest[FN(LeftChildIndex)(self, prev_ix)];
- forest[node_right] = forest[FN(RightChildIndex)(self, prev_ix)];
- }
- break;
- }
- if (data[cur_ix_masked + len] > data[prev_ix_masked + len]) {
- best_len_left = len;
- if (should_reroot_tree) {
- forest[node_left] = (uint32_t)prev_ix;
- }
- node_left = FN(RightChildIndex)(self, prev_ix);
- prev_ix = forest[node_left];
- } else {
- best_len_right = len;
- if (should_reroot_tree) {
- forest[node_right] = (uint32_t)prev_ix;
- }
- node_right = FN(LeftChildIndex)(self, prev_ix);
- prev_ix = forest[node_right];
- }
- }
- }
- return matches;
-}
-
-/* Finds all backward matches of &data[cur_ix & ring_buffer_mask] up to the
- length of max_length and stores the position cur_ix in the hash table.
-
- Sets *num_matches to the number of matches found, and stores the found
- matches in matches[0] to matches[*num_matches - 1]. The matches will be
- sorted by strictly increasing length and (non-strictly) increasing
- distance. */
-static BROTLI_INLINE size_t FN(FindAllMatches)(HasherHandle handle,
- const BrotliEncoderDictionary* dictionary, const uint8_t* data,
- const size_t ring_buffer_mask, const size_t cur_ix,
- const size_t max_length, const size_t max_backward, const size_t gap,
- const BrotliEncoderParams* params, BackwardMatch* matches) {
- BackwardMatch* const orig_matches = matches;
- const size_t cur_ix_masked = cur_ix & ring_buffer_mask;
- size_t best_len = 1;
- const size_t short_match_max_backward =
- params->quality != HQ_ZOPFLIFICATION_QUALITY ? 16 : 64;
- size_t stop = cur_ix - short_match_max_backward;
- uint32_t dict_matches[BROTLI_MAX_STATIC_DICTIONARY_MATCH_LEN + 1];
- size_t i;
- if (cur_ix < short_match_max_backward) { stop = 0; }
- for (i = cur_ix - 1; i > stop && best_len <= 2; --i) {
- size_t prev_ix = i;
- const size_t backward = cur_ix - prev_ix;
- if (BROTLI_PREDICT_FALSE(backward > max_backward)) {
- break;
- }
- prev_ix &= ring_buffer_mask;
- if (data[cur_ix_masked] != data[prev_ix] ||
- data[cur_ix_masked + 1] != data[prev_ix + 1]) {
- continue;
- }
- {
- const size_t len =
- FindMatchLengthWithLimit(&data[prev_ix], &data[cur_ix_masked],
- max_length);
- if (len > best_len) {
- best_len = len;
- InitBackwardMatch(matches++, backward, len);
- }
- }
- }
- if (best_len < max_length) {
- matches = FN(StoreAndFindMatches)(FN(Self)(handle), data, cur_ix,
- ring_buffer_mask, max_length, max_backward, &best_len, matches);
- }
- for (i = 0; i <= BROTLI_MAX_STATIC_DICTIONARY_MATCH_LEN; ++i) {
- dict_matches[i] = kInvalidMatch;
- }
- {
- size_t minlen = BROTLI_MAX(size_t, 4, best_len + 1);
- if (BrotliFindAllStaticDictionaryMatches(dictionary,
- &data[cur_ix_masked], minlen, max_length, &dict_matches[0])) {
- size_t maxlen = BROTLI_MIN(
- size_t, BROTLI_MAX_STATIC_DICTIONARY_MATCH_LEN, max_length);
- size_t l;
- for (l = minlen; l <= maxlen; ++l) {
- uint32_t dict_id = dict_matches[l];
- if (dict_id < kInvalidMatch) {
- size_t distance = max_backward + gap + (dict_id >> 5) + 1;
- if (distance <= params->dist.max_distance) {
- InitDictionaryBackwardMatch(matches++, distance, l, dict_id & 31);
- }
- }
- }
- }
- }
- return (size_t)(matches - orig_matches);
-}
-
-/* Stores the hash of the next 4 bytes and re-roots the binary tree at the
- current sequence, without returning any matches.
- REQUIRES: ix + MAX_TREE_COMP_LENGTH <= end-of-current-block */
-static BROTLI_INLINE void FN(Store)(HasherHandle handle, const uint8_t* data,
- const size_t mask, const size_t ix) {
- HashToBinaryTree* self = FN(Self)(handle);
- /* Maximum distance is window size - 16, see section 9.1. of the spec. */
- const size_t max_backward = self->window_mask_ - BROTLI_WINDOW_GAP + 1;
- FN(StoreAndFindMatches)(self, data, ix, mask, MAX_TREE_COMP_LENGTH,
- max_backward, NULL, NULL);
-}
-
-static BROTLI_INLINE void FN(StoreRange)(HasherHandle handle,
- const uint8_t* data, const size_t mask, const size_t ix_start,
- const size_t ix_end) {
- size_t i = ix_start;
- size_t j = ix_start;
- if (ix_start + 63 <= ix_end) {
- i = ix_end - 63;
- }
- if (ix_start + 512 <= i) {
- for (; j < i; j += 8) {
- FN(Store)(handle, data, mask, j);
- }
- }
- for (; i < ix_end; ++i) {
- FN(Store)(handle, data, mask, i);
- }
-}
-
-static BROTLI_INLINE void FN(StitchToPreviousBlock)(HasherHandle handle,
- size_t num_bytes, size_t position, const uint8_t* ringbuffer,
- size_t ringbuffer_mask) {
- HashToBinaryTree* self = FN(Self)(handle);
- if (num_bytes >= FN(HashTypeLength)() - 1 &&
- position >= MAX_TREE_COMP_LENGTH) {
- /* Store the last `MAX_TREE_COMP_LENGTH - 1` positions in the hasher.
- These could not be calculated before, since they require knowledge
- of both the previous and the current block. */
- const size_t i_start = position - MAX_TREE_COMP_LENGTH + 1;
- const size_t i_end = BROTLI_MIN(size_t, position, i_start + num_bytes);
- size_t i;
- for (i = i_start; i < i_end; ++i) {
- /* Maximum distance is window size - 16, see section 9.1. of the spec.
- Furthermore, we have to make sure that we don't look further back
- from the start of the next block than the window size, otherwise we
- could access already overwritten areas of the ring-buffer. */
- const size_t max_backward =
- self->window_mask_ - BROTLI_MAX(size_t,
- BROTLI_WINDOW_GAP - 1,
- position - i);
- /* We know that i + MAX_TREE_COMP_LENGTH <= position + num_bytes, i.e. the
- end of the current block and that we have at least
- MAX_TREE_COMP_LENGTH tail in the ring-buffer. */
- FN(StoreAndFindMatches)(self, ringbuffer, i, ringbuffer_mask,
- MAX_TREE_COMP_LENGTH, max_backward, NULL, NULL);
- }
- }
-}
-
-#undef BUCKET_SIZE
-
-#undef HashToBinaryTree
diff --git a/BaseTools/Source/C/BrotliCompress/enc/histogram.h b/BaseTools/Source/C/BrotliCompress/enc/histogram.h
deleted file mode 100644
index c08a4cac2bfa..000000000000
--- a/BaseTools/Source/C/BrotliCompress/enc/histogram.h
+++ /dev/null
@@ -1,63 +0,0 @@
-/* Copyright 2013 Google Inc. All Rights Reserved.
-
- Distributed under MIT license.
- See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
-*/
-
-/* Models the histograms of literals, commands and distance codes. */
-
-#ifndef BROTLI_ENC_HISTOGRAM_H_
-#define BROTLI_ENC_HISTOGRAM_H_
-
-#include <string.h> /* memset */
-
-#include "../common/constants.h"
-#include "../common/context.h"
-#include "../common/platform.h"
-#include <brotli/types.h>
-#include "./block_splitter.h"
-#include "./command.h"
-
-#if defined(__cplusplus) || defined(c_plusplus)
-extern "C" {
-#endif
-
-/* The distance symbols effectively used by "Large Window Brotli" (32-bit). */
-#define BROTLI_NUM_HISTOGRAM_DISTANCE_SYMBOLS 544
-
-#define FN(X) X ## Literal
-#define DATA_SIZE BROTLI_NUM_LITERAL_SYMBOLS
-#define DataType uint8_t
-#include "./histogram_inc.h" /* NOLINT(build/include) */
-#undef DataType
-#undef DATA_SIZE
-#undef FN
-
-#define FN(X) X ## Command
-#define DataType uint16_t
-#define DATA_SIZE BROTLI_NUM_COMMAND_SYMBOLS
-#include "./histogram_inc.h" /* NOLINT(build/include) */
-#undef DATA_SIZE
-#undef FN
-
-#define FN(X) X ## Distance
-#define DATA_SIZE BROTLI_NUM_HISTOGRAM_DISTANCE_SYMBOLS
-#include "./histogram_inc.h" /* NOLINT(build/include) */
-#undef DataType
-#undef DATA_SIZE
-#undef FN
-
-BROTLI_INTERNAL void BrotliBuildHistogramsWithContext(
- const Command* cmds, const size_t num_commands,
- const BlockSplit* literal_split, const BlockSplit* insert_and_copy_split,
- const BlockSplit* dist_split, const uint8_t* ringbuffer, size_t pos,
- size_t mask, uint8_t prev_byte, uint8_t prev_byte2,
- const ContextType* context_modes, HistogramLiteral* literal_histograms,
- HistogramCommand* insert_and_copy_histograms,
- HistogramDistance* copy_dist_histograms);
-
-#if defined(__cplusplus) || defined(c_plusplus)
-} /* extern "C" */
-#endif
-
-#endif /* BROTLI_ENC_HISTOGRAM_H_ */
diff --git a/BaseTools/Source/C/BrotliCompress/enc/histogram_inc.h b/BaseTools/Source/C/BrotliCompress/enc/histogram_inc.h
deleted file mode 100644
index a9d2e7018d60..000000000000
--- a/BaseTools/Source/C/BrotliCompress/enc/histogram_inc.h
+++ /dev/null
@@ -1,51 +0,0 @@
-/* NOLINT(build/header_guard) */
-/* Copyright 2013 Google Inc. All Rights Reserved.
-
- Distributed under MIT license.
- See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
-*/
-
-/* template parameters: Histogram, DATA_SIZE, DataType */
-
-/* A simple container for histograms of data in blocks. */
-
-typedef struct FN(Histogram) {
- uint32_t data_[DATA_SIZE];
- size_t total_count_;
- double bit_cost_;
-} FN(Histogram);
-
-static BROTLI_INLINE void FN(HistogramClear)(FN(Histogram)* self) {
- memset(self->data_, 0, sizeof(self->data_));
- self->total_count_ = 0;
- self->bit_cost_ = HUGE_VAL;
-}
-
-static BROTLI_INLINE void FN(ClearHistograms)(
- FN(Histogram)* array, size_t length) {
- size_t i;
- for (i = 0; i < length; ++i) FN(HistogramClear)(array + i);
-}
-
-static BROTLI_INLINE void FN(HistogramAdd)(FN(Histogram)* self, size_t val) {
- ++self->data_[val];
- ++self->total_count_;
-}
-
-static BROTLI_INLINE void FN(HistogramAddVector)(FN(Histogram)* self,
- const DataType* p, size_t n) {
- self->total_count_ += n;
- n += 1;
- while (--n) ++self->data_[*p++];
-}
-
-static BROTLI_INLINE void FN(HistogramAddHistogram)(FN(Histogram)* self,
- const FN(Histogram)* v) {
- size_t i;
- self->total_count_ += v->total_count_;
- for (i = 0; i < DATA_SIZE; ++i) {
- self->data_[i] += v->data_[i];
- }
-}
-
-static BROTLI_INLINE size_t FN(HistogramDataSize)(void) { return DATA_SIZE; }
diff --git a/BaseTools/Source/C/BrotliCompress/enc/literal_cost.h b/BaseTools/Source/C/BrotliCompress/enc/literal_cost.h
deleted file mode 100644
index 4891a26d5012..000000000000
--- a/BaseTools/Source/C/BrotliCompress/enc/literal_cost.h
+++ /dev/null
@@ -1,30 +0,0 @@
-/* Copyright 2013 Google Inc. All Rights Reserved.
-
- Distributed under MIT license.
- See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
-*/
-
-/* Literal cost model to allow backward reference replacement to be efficient.
-*/
-
-#ifndef BROTLI_ENC_LITERAL_COST_H_
-#define BROTLI_ENC_LITERAL_COST_H_
-
-#include "../common/platform.h"
-#include <brotli/types.h>
-
-#if defined(__cplusplus) || defined(c_plusplus)
-extern "C" {
-#endif
-
-/* Estimates how many bits the literals in the interval [pos, pos + len) in the
- ring-buffer (data, mask) will take entropy coded and writes these estimates
- to the cost[0..len) array. */
-BROTLI_INTERNAL void BrotliEstimateBitCostsForLiterals(
- size_t pos, size_t len, size_t mask, const uint8_t* data, float* cost);
-
-#if defined(__cplusplus) || defined(c_plusplus)
-} /* extern "C" */
-#endif
-
-#endif /* BROTLI_ENC_LITERAL_COST_H_ */
diff --git a/BaseTools/Source/C/BrotliCompress/enc/memory.h b/BaseTools/Source/C/BrotliCompress/enc/memory.h
deleted file mode 100644
index 2bd4d0c872a6..000000000000
--- a/BaseTools/Source/C/BrotliCompress/enc/memory.h
+++ /dev/null
@@ -1,102 +0,0 @@
-/* Copyright 2016 Google Inc. All Rights Reserved.
-
- Distributed under MIT license.
- See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
-*/
-
-/* Macros for memory management. */
-
-#ifndef BROTLI_ENC_MEMORY_H_
-#define BROTLI_ENC_MEMORY_H_
-
-#include <string.h> /* memcpy */
-
-#include "../common/platform.h"
-#include <brotli/types.h>
-
-#if defined(__cplusplus) || defined(c_plusplus)
-extern "C" {
-#endif
-
-#if !defined(BROTLI_ENCODER_CLEANUP_ON_OOM) && \
- !defined(BROTLI_ENCODER_EXIT_ON_OOM)
-#define BROTLI_ENCODER_EXIT_ON_OOM
-#endif
-
-typedef struct MemoryManager {
- brotli_alloc_func alloc_func;
- brotli_free_func free_func;
- void* opaque;
-#if !defined(BROTLI_ENCODER_EXIT_ON_OOM)
- BROTLI_BOOL is_oom;
- size_t perm_allocated;
- size_t new_allocated;
- size_t new_freed;
- void* pointers[256];
-#endif /* BROTLI_ENCODER_EXIT_ON_OOM */
-} MemoryManager;
-
-BROTLI_INTERNAL void BrotliInitMemoryManager(
- MemoryManager* m, brotli_alloc_func alloc_func, brotli_free_func free_func,
- void* opaque);
-
-BROTLI_INTERNAL void* BrotliAllocate(MemoryManager* m, size_t n);
-#define BROTLI_ALLOC(M, T, N) \
- ((N) > 0 ? ((T*)BrotliAllocate((M), (N) * sizeof(T))) : NULL)
-
-BROTLI_INTERNAL void BrotliFree(MemoryManager* m, void* p);
-#define BROTLI_FREE(M, P) { \
- BrotliFree((M), (P)); \
- P = NULL; \
-}
-
-#if defined(BROTLI_ENCODER_EXIT_ON_OOM)
-#define BROTLI_IS_OOM(M) (!!0)
-#else /* BROTLI_ENCODER_EXIT_ON_OOM */
-#define BROTLI_IS_OOM(M) (!!(M)->is_oom)
-#endif /* BROTLI_ENCODER_EXIT_ON_OOM */
-
-BROTLI_INTERNAL void BrotliWipeOutMemoryManager(MemoryManager* m);
-
-/*
-Dynamically grows array capacity to at least the requested size
-M: MemoryManager
-T: data type
-A: array
-C: capacity
-R: requested size
-*/
-#define BROTLI_ENSURE_CAPACITY(M, T, A, C, R) { \
- if (C < (R)) { \
- size_t _new_size = (C == 0) ? (R) : C; \
- T* new_array; \
- while (_new_size < (R)) _new_size *= 2; \
- new_array = BROTLI_ALLOC((M), T, _new_size); \
- if (!BROTLI_IS_OOM(M) && C != 0) \
- memcpy(new_array, A, C * sizeof(T)); \
- BROTLI_FREE((M), A); \
- A = new_array; \
- C = _new_size; \
- } \
-}
-
-/*
-Appends value and dynamically grows array capacity when needed
-M: MemoryManager
-T: data type
-A: array
-C: array capacity
-S: array size
-V: value to append
-*/
-#define BROTLI_ENSURE_CAPACITY_APPEND(M, T, A, C, S, V) { \
- (S)++; \
- BROTLI_ENSURE_CAPACITY(M, T, A, C, S); \
- A[(S) - 1] = (V); \
-}
-
-#if defined(__cplusplus) || defined(c_plusplus)
-} /* extern "C" */
-#endif
-
-#endif /* BROTLI_ENC_MEMORY_H_ */
diff --git a/BaseTools/Source/C/BrotliCompress/enc/metablock.h b/BaseTools/Source/C/BrotliCompress/enc/metablock.h
deleted file mode 100644
index e35c98554f7a..000000000000
--- a/BaseTools/Source/C/BrotliCompress/enc/metablock.h
+++ /dev/null
@@ -1,105 +0,0 @@
-/* Copyright 2015 Google Inc. All Rights Reserved.
-
- Distributed under MIT license.
- See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
-*/
-
-/* Algorithms for distributing the literals and commands of a metablock between
- block types and contexts. */
-
-#ifndef BROTLI_ENC_METABLOCK_H_
-#define BROTLI_ENC_METABLOCK_H_
-
-#include "../common/context.h"
-#include "../common/platform.h"
-#include <brotli/types.h>
-#include "./block_splitter.h"
-#include "./command.h"
-#include "./histogram.h"
-#include "./memory.h"
-#include "./quality.h"
-
-#if defined(__cplusplus) || defined(c_plusplus)
-extern "C" {
-#endif
-
-typedef struct MetaBlockSplit {
- BlockSplit literal_split;
- BlockSplit command_split;
- BlockSplit distance_split;
- uint32_t* literal_context_map;
- size_t literal_context_map_size;
- uint32_t* distance_context_map;
- size_t distance_context_map_size;
- HistogramLiteral* literal_histograms;
- size_t literal_histograms_size;
- HistogramCommand* command_histograms;
- size_t command_histograms_size;
- HistogramDistance* distance_histograms;
- size_t distance_histograms_size;
-} MetaBlockSplit;
-
-static BROTLI_INLINE void InitMetaBlockSplit(MetaBlockSplit* mb) {
- BrotliInitBlockSplit(&mb->literal_split);
- BrotliInitBlockSplit(&mb->command_split);
- BrotliInitBlockSplit(&mb->distance_split);
- mb->literal_context_map = 0;
- mb->literal_context_map_size = 0;
- mb->distance_context_map = 0;
- mb->distance_context_map_size = 0;
- mb->literal_histograms = 0;
- mb->literal_histograms_size = 0;
- mb->command_histograms = 0;
- mb->command_histograms_size = 0;
- mb->distance_histograms = 0;
- mb->distance_histograms_size = 0;
-}
-
-static BROTLI_INLINE void DestroyMetaBlockSplit(
- MemoryManager* m, MetaBlockSplit* mb) {
- BrotliDestroyBlockSplit(m, &mb->literal_split);
- BrotliDestroyBlockSplit(m, &mb->command_split);
- BrotliDestroyBlockSplit(m, &mb->distance_split);
- BROTLI_FREE(m, mb->literal_context_map);
- BROTLI_FREE(m, mb->distance_context_map);
- BROTLI_FREE(m, mb->literal_histograms);
- BROTLI_FREE(m, mb->command_histograms);
- BROTLI_FREE(m, mb->distance_histograms);
-}
-
-/* Uses the slow shortest-path block splitter and does context clustering.
- The distance parameters are dynamically selected based on the commands
- which get recomputed under the new distance parameters. The new distance
- parameters are stored into *params. */
-BROTLI_INTERNAL void BrotliBuildMetaBlock(MemoryManager* m,
- const uint8_t* ringbuffer,
- const size_t pos,
- const size_t mask,
- BrotliEncoderParams* params,
- uint8_t prev_byte,
- uint8_t prev_byte2,
- Command* cmds,
- size_t num_commands,
- ContextType literal_context_mode,
- MetaBlockSplit* mb);
-
-/* Uses a fast greedy block splitter that tries to merge current block with the
- last or the second last block and uses a static context clustering which
- is the same for all block types. */
-BROTLI_INTERNAL void BrotliBuildMetaBlockGreedy(
- MemoryManager* m, const uint8_t* ringbuffer, size_t pos, size_t mask,
- uint8_t prev_byte, uint8_t prev_byte2, ContextLut literal_context_lut,
- size_t num_contexts, const uint32_t* static_context_map,
- const Command* commands, size_t n_commands, MetaBlockSplit* mb);
-
-BROTLI_INTERNAL void BrotliOptimizeHistograms(uint32_t num_distance_codes,
- MetaBlockSplit* mb);
-
-BROTLI_INTERNAL void BrotliInitDistanceParams(BrotliEncoderParams* params,
- uint32_t npostfix, uint32_t ndirect);
-
-#if defined(__cplusplus) || defined(c_plusplus)
-} /* extern "C" */
-#endif
-
-#endif /* BROTLI_ENC_METABLOCK_H_ */
diff --git a/BaseTools/Source/C/BrotliCompress/enc/metablock_inc.h b/BaseTools/Source/C/BrotliCompress/enc/metablock_inc.h
deleted file mode 100644
index c6b1c50b32ce..000000000000
--- a/BaseTools/Source/C/BrotliCompress/enc/metablock_inc.h
+++ /dev/null
@@ -1,183 +0,0 @@
-/* NOLINT(build/header_guard) */
-/* Copyright 2015 Google Inc. All Rights Reserved.
-
- Distributed under MIT license.
- See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
-*/
-
-/* template parameters: FN */
-
-#define HistogramType FN(Histogram)
-
-/* Greedy block splitter for one block category (literal, command or distance).
-*/
-typedef struct FN(BlockSplitter) {
- /* Alphabet size of particular block category. */
- size_t alphabet_size_;
- /* We collect at least this many symbols for each block. */
- size_t min_block_size_;
- /* We merge histograms A and B if
- entropy(A+B) < entropy(A) + entropy(B) + split_threshold_,
- where A is the current histogram and B is the histogram of the last or the
- second last block type. */
- double split_threshold_;
-
- size_t num_blocks_;
- BlockSplit* split_; /* not owned */
- HistogramType* histograms_; /* not owned */
- size_t* histograms_size_; /* not owned */
-
- /* The number of symbols that we want to collect before deciding on whether
- or not to merge the block with a previous one or emit a new block. */
- size_t target_block_size_;
- /* The number of symbols in the current histogram. */
- size_t block_size_;
- /* Offset of the current histogram. */
- size_t curr_histogram_ix_;
- /* Offset of the histograms of the previous two block types. */
- size_t last_histogram_ix_[2];
- /* Entropy of the previous two block types. */
- double last_entropy_[2];
- /* The number of times we merged the current block with the last one. */
- size_t merge_last_count_;
-} FN(BlockSplitter);
-
-static void FN(InitBlockSplitter)(
- MemoryManager* m, FN(BlockSplitter)* self, size_t alphabet_size,
- size_t min_block_size, double split_threshold, size_t num_symbols,
- BlockSplit* split, HistogramType** histograms, size_t* histograms_size) {
- size_t max_num_blocks = num_symbols / min_block_size + 1;
- /* We have to allocate one more histogram than the maximum number of block
- types for the current histogram when the meta-block is too big. */
- size_t max_num_types =
- BROTLI_MIN(size_t, max_num_blocks, BROTLI_MAX_NUMBER_OF_BLOCK_TYPES + 1);
- self->alphabet_size_ = alphabet_size;
- self->min_block_size_ = min_block_size;
- self->split_threshold_ = split_threshold;
- self->num_blocks_ = 0;
- self->split_ = split;
- self->histograms_size_ = histograms_size;
- self->target_block_size_ = min_block_size;
- self->block_size_ = 0;
- self->curr_histogram_ix_ = 0;
- self->merge_last_count_ = 0;
- BROTLI_ENSURE_CAPACITY(m, uint8_t,
- split->types, split->types_alloc_size, max_num_blocks);
- BROTLI_ENSURE_CAPACITY(m, uint32_t,
- split->lengths, split->lengths_alloc_size, max_num_blocks);
- if (BROTLI_IS_OOM(m)) return;
- self->split_->num_blocks = max_num_blocks;
- BROTLI_DCHECK(*histograms == 0);
- *histograms_size = max_num_types;
- *histograms = BROTLI_ALLOC(m, HistogramType, *histograms_size);
- self->histograms_ = *histograms;
- if (BROTLI_IS_OOM(m)) return;
- /* Clear only current histogram. */
- FN(HistogramClear)(&self->histograms_[0]);
- self->last_histogram_ix_[0] = self->last_histogram_ix_[1] = 0;
-}
-
-/* Does either of three things:
- (1) emits the current block with a new block type;
- (2) emits the current block with the type of the second last block;
- (3) merges the current block with the last block. */
-static void FN(BlockSplitterFinishBlock)(
- FN(BlockSplitter)* self, BROTLI_BOOL is_final) {
- BlockSplit* split = self->split_;
- double* last_entropy = self->last_entropy_;
- HistogramType* histograms = self->histograms_;
- self->block_size_ =
- BROTLI_MAX(size_t, self->block_size_, self->min_block_size_);
- if (self->num_blocks_ == 0) {
- /* Create first block. */
- split->lengths[0] = (uint32_t)self->block_size_;
- split->types[0] = 0;
- last_entropy[0] =
- BitsEntropy(histograms[0].data_, self->alphabet_size_);
- last_entropy[1] = last_entropy[0];
- ++self->num_blocks_;
- ++split->num_types;
- ++self->curr_histogram_ix_;
- if (self->curr_histogram_ix_ < *self->histograms_size_)
- FN(HistogramClear)(&histograms[self->curr_histogram_ix_]);
- self->block_size_ = 0;
- } else if (self->block_size_ > 0) {
- double entropy = BitsEntropy(histograms[self->curr_histogram_ix_].data_,
- self->alphabet_size_);
- HistogramType combined_histo[2];
- double combined_entropy[2];
- double diff[2];
- size_t j;
- for (j = 0; j < 2; ++j) {
- size_t last_histogram_ix = self->last_histogram_ix_[j];
- combined_histo[j] = histograms[self->curr_histogram_ix_];
- FN(HistogramAddHistogram)(&combined_histo[j],
- &histograms[last_histogram_ix]);
- combined_entropy[j] = BitsEntropy(
- &combined_histo[j].data_[0], self->alphabet_size_);
- diff[j] = combined_entropy[j] - entropy - last_entropy[j];
- }
-
- if (split->num_types < BROTLI_MAX_NUMBER_OF_BLOCK_TYPES &&
- diff[0] > self->split_threshold_ &&
- diff[1] > self->split_threshold_) {
- /* Create new block. */
- split->lengths[self->num_blocks_] = (uint32_t)self->block_size_;
- split->types[self->num_blocks_] = (uint8_t)split->num_types;
- self->last_histogram_ix_[1] = self->last_histogram_ix_[0];
- self->last_histogram_ix_[0] = (uint8_t)split->num_types;
- last_entropy[1] = last_entropy[0];
- last_entropy[0] = entropy;
- ++self->num_blocks_;
- ++split->num_types;
- ++self->curr_histogram_ix_;
- if (self->curr_histogram_ix_ < *self->histograms_size_)
- FN(HistogramClear)(&histograms[self->curr_histogram_ix_]);
- self->block_size_ = 0;
- self->merge_last_count_ = 0;
- self->target_block_size_ = self->min_block_size_;
- } else if (diff[1] < diff[0] - 20.0) {
- /* Combine this block with second last block. */
- split->lengths[self->num_blocks_] = (uint32_t)self->block_size_;
- split->types[self->num_blocks_] = split->types[self->num_blocks_ - 2];
- BROTLI_SWAP(size_t, self->last_histogram_ix_, 0, 1);
- histograms[self->last_histogram_ix_[0]] = combined_histo[1];
- last_entropy[1] = last_entropy[0];
- last_entropy[0] = combined_entropy[1];
- ++self->num_blocks_;
- self->block_size_ = 0;
- FN(HistogramClear)(&histograms[self->curr_histogram_ix_]);
- self->merge_last_count_ = 0;
- self->target_block_size_ = self->min_block_size_;
- } else {
- /* Combine this block with last block. */
- split->lengths[self->num_blocks_ - 1] += (uint32_t)self->block_size_;
- histograms[self->last_histogram_ix_[0]] = combined_histo[0];
- last_entropy[0] = combined_entropy[0];
- if (split->num_types == 1) {
- last_entropy[1] = last_entropy[0];
- }
- self->block_size_ = 0;
- FN(HistogramClear)(&histograms[self->curr_histogram_ix_]);
- if (++self->merge_last_count_ > 1) {
- self->target_block_size_ += self->min_block_size_;
- }
- }
- }
- if (is_final) {
- *self->histograms_size_ = split->num_types;
- split->num_blocks = self->num_blocks_;
- }
-}
-
-/* Adds the next symbol to the current histogram. When the current histogram
- reaches the target size, decides on merging the block. */
-static void FN(BlockSplitterAddSymbol)(FN(BlockSplitter)* self, size_t symbol) {
- FN(HistogramAdd)(&self->histograms_[self->curr_histogram_ix_], symbol);
- ++self->block_size_;
- if (self->block_size_ == self->target_block_size_) {
- FN(BlockSplitterFinishBlock)(self, /* is_final = */ BROTLI_FALSE);
- }
-}
-
-#undef HistogramType
diff --git a/BaseTools/Source/C/BrotliCompress/enc/params.h b/BaseTools/Source/C/BrotliCompress/enc/params.h
deleted file mode 100644
index 96fed343ccbd..000000000000
--- a/BaseTools/Source/C/BrotliCompress/enc/params.h
+++ /dev/null
@@ -1,44 +0,0 @@
-/* Copyright 2017 Google Inc. All Rights Reserved.
-
- Distributed under MIT license.
- See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
-*/
-
-/* Parameters for the Brotli encoder with chosen quality levels. */
-
-#ifndef BROTLI_ENC_PARAMS_H_
-#define BROTLI_ENC_PARAMS_H_
-
-#include <brotli/encode.h>
-#include "./encoder_dict.h"
-
-typedef struct BrotliHasherParams {
- int type;
- int bucket_bits;
- int block_bits;
- int hash_len;
- int num_last_distances_to_check;
-} BrotliHasherParams;
-
-typedef struct BrotliDistanceParams {
- uint32_t distance_postfix_bits;
- uint32_t num_direct_distance_codes;
- uint32_t alphabet_size;
- size_t max_distance;
-} BrotliDistanceParams;
-
-/* Encoding parameters */
-typedef struct BrotliEncoderParams {
- BrotliEncoderMode mode;
- int quality;
- int lgwin;
- int lgblock;
- size_t size_hint;
- BROTLI_BOOL disable_literal_context_modeling;
- BROTLI_BOOL large_window;
- BrotliHasherParams hasher;
- BrotliDistanceParams dist;
- BrotliEncoderDictionary dictionary;
-} BrotliEncoderParams;
-
-#endif /* BROTLI_ENC_PARAMS_H_ */
diff --git a/BaseTools/Source/C/BrotliCompress/enc/prefix.h b/BaseTools/Source/C/BrotliCompress/enc/prefix.h
deleted file mode 100644
index e52edd1faa78..000000000000
--- a/BaseTools/Source/C/BrotliCompress/enc/prefix.h
+++ /dev/null
@@ -1,53 +0,0 @@
-/* Copyright 2013 Google Inc. All Rights Reserved.
-
- Distributed under MIT license.
- See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
-*/
-
-/* Functions for encoding of integers into prefix codes the amount of extra
- bits, and the actual values of the extra bits. */
-
-#ifndef BROTLI_ENC_PREFIX_H_
-#define BROTLI_ENC_PREFIX_H_
-
-#include "../common/constants.h"
-#include "../common/platform.h"
-#include <brotli/types.h>
-#include "./fast_log.h"
-
-#if defined(__cplusplus) || defined(c_plusplus)
-extern "C" {
-#endif
-
-/* Here distance_code is an intermediate code, i.e. one of the special codes or
- the actual distance increased by BROTLI_NUM_DISTANCE_SHORT_CODES - 1. */
-static BROTLI_INLINE void PrefixEncodeCopyDistance(size_t distance_code,
- size_t num_direct_codes,
- size_t postfix_bits,
- uint16_t* code,
- uint32_t* extra_bits) {
- if (distance_code < BROTLI_NUM_DISTANCE_SHORT_CODES + num_direct_codes) {
- *code = (uint16_t)distance_code;
- *extra_bits = 0;
- return;
- } else {
- size_t dist = ((size_t)1 << (postfix_bits + 2u)) +
- (distance_code - BROTLI_NUM_DISTANCE_SHORT_CODES - num_direct_codes);
- size_t bucket = Log2FloorNonZero(dist) - 1;
- size_t postfix_mask = (1u << postfix_bits) - 1;
- size_t postfix = dist & postfix_mask;
- size_t prefix = (dist >> bucket) & 1;
- size_t offset = (2 + prefix) << bucket;
- size_t nbits = bucket - postfix_bits;
- *code = (uint16_t)((nbits << 10) |
- (BROTLI_NUM_DISTANCE_SHORT_CODES + num_direct_codes +
- ((2 * (nbits - 1) + prefix) << postfix_bits) + postfix));
- *extra_bits = (uint32_t)((dist - offset) >> postfix_bits);
- }
-}
-
-#if defined(__cplusplus) || defined(c_plusplus)
-} /* extern "C" */
-#endif
-
-#endif /* BROTLI_ENC_PREFIX_H_ */
diff --git a/BaseTools/Source/C/BrotliCompress/enc/quality.h b/BaseTools/Source/C/BrotliCompress/enc/quality.h
deleted file mode 100644
index 072bf8f156e4..000000000000
--- a/BaseTools/Source/C/BrotliCompress/enc/quality.h
+++ /dev/null
@@ -1,165 +0,0 @@
-/* Copyright 2016 Google Inc. All Rights Reserved.
-
- Distributed under MIT license.
- See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
-*/
-
-/* Constants and formulas that affect speed-ratio trade-offs and thus define
- quality levels. */
-
-#ifndef BROTLI_ENC_QUALITY_H_
-#define BROTLI_ENC_QUALITY_H_
-
-#include "../common/platform.h"
-#include <brotli/encode.h>
-#include "./params.h"
-
-#define FAST_ONE_PASS_COMPRESSION_QUALITY 0
-#define FAST_TWO_PASS_COMPRESSION_QUALITY 1
-#define ZOPFLIFICATION_QUALITY 10
-#define HQ_ZOPFLIFICATION_QUALITY 11
-
-#define MAX_QUALITY_FOR_STATIC_ENTROPY_CODES 2
-#define MIN_QUALITY_FOR_BLOCK_SPLIT 4
-#define MIN_QUALITY_FOR_NONZERO_DISTANCE_PARAMS 4
-#define MIN_QUALITY_FOR_OPTIMIZE_HISTOGRAMS 4
-#define MIN_QUALITY_FOR_EXTENSIVE_REFERENCE_SEARCH 5
-#define MIN_QUALITY_FOR_CONTEXT_MODELING 5
-#define MIN_QUALITY_FOR_HQ_CONTEXT_MODELING 7
-#define MIN_QUALITY_FOR_HQ_BLOCK_SPLITTING 10
-
-/* For quality below MIN_QUALITY_FOR_BLOCK_SPLIT there is no block splitting,
- so we buffer at most this much literals and commands. */
-#define MAX_NUM_DELAYED_SYMBOLS 0x2FFF
-
-/* Returns hash-table size for quality levels 0 and 1. */
-static BROTLI_INLINE size_t MaxHashTableSize(int quality) {
- return quality == FAST_ONE_PASS_COMPRESSION_QUALITY ? 1 << 15 : 1 << 17;
-}
-
-/* The maximum length for which the zopflification uses distinct distances. */
-#define MAX_ZOPFLI_LEN_QUALITY_10 150
-#define MAX_ZOPFLI_LEN_QUALITY_11 325
-
-/* Do not thoroughly search when a long copy is found. */
-#define BROTLI_LONG_COPY_QUICK_STEP 16384
-
-static BROTLI_INLINE size_t MaxZopfliLen(const BrotliEncoderParams* params) {
- return params->quality <= 10 ?
- MAX_ZOPFLI_LEN_QUALITY_10 :
- MAX_ZOPFLI_LEN_QUALITY_11;
-}
-
-/* Number of best candidates to evaluate to expand Zopfli chain. */
-static BROTLI_INLINE size_t MaxZopfliCandidates(
- const BrotliEncoderParams* params) {
- return params->quality <= 10 ? 1 : 5;
-}
-
-static BROTLI_INLINE void SanitizeParams(BrotliEncoderParams* params) {
- params->quality = BROTLI_MIN(int, BROTLI_MAX_QUALITY,
- BROTLI_MAX(int, BROTLI_MIN_QUALITY, params->quality));
- if (params->quality <= MAX_QUALITY_FOR_STATIC_ENTROPY_CODES) {
- params->large_window = BROTLI_FALSE;
- }
- if (params->lgwin < BROTLI_MIN_WINDOW_BITS) {
- params->lgwin = BROTLI_MIN_WINDOW_BITS;
- } else {
- int max_lgwin = params->large_window ? BROTLI_LARGE_MAX_WINDOW_BITS :
- BROTLI_MAX_WINDOW_BITS;
- if (params->lgwin > max_lgwin) params->lgwin = max_lgwin;
- }
-}
-
-/* Returns optimized lg_block value. */
-static BROTLI_INLINE int ComputeLgBlock(const BrotliEncoderParams* params) {
- int lgblock = params->lgblock;
- if (params->quality == FAST_ONE_PASS_COMPRESSION_QUALITY ||
- params->quality == FAST_TWO_PASS_COMPRESSION_QUALITY) {
- lgblock = params->lgwin;
- } else if (params->quality < MIN_QUALITY_FOR_BLOCK_SPLIT) {
- lgblock = 14;
- } else if (lgblock == 0) {
- lgblock = 16;
- if (params->quality >= 9 && params->lgwin > lgblock) {
- lgblock = BROTLI_MIN(int, 18, params->lgwin);
- }
- } else {
- lgblock = BROTLI_MIN(int, BROTLI_MAX_INPUT_BLOCK_BITS,
- BROTLI_MAX(int, BROTLI_MIN_INPUT_BLOCK_BITS, lgblock));
- }
- return lgblock;
-}
-
-/* Returns log2 of the size of main ring buffer area.
- Allocate at least lgwin + 1 bits for the ring buffer so that the newly
- added block fits there completely and we still get lgwin bits and at least
- read_block_size_bits + 1 bits because the copy tail length needs to be
- smaller than ring-buffer size. */
-static BROTLI_INLINE int ComputeRbBits(const BrotliEncoderParams* params) {
- return 1 + BROTLI_MAX(int, params->lgwin, params->lgblock);
-}
-
-static BROTLI_INLINE size_t MaxMetablockSize(
- const BrotliEncoderParams* params) {
- int bits =
- BROTLI_MIN(int, ComputeRbBits(params), BROTLI_MAX_INPUT_BLOCK_BITS);
- return (size_t)1 << bits;
-}
-
-/* When searching for backward references and have not seen matches for a long
- time, we can skip some match lookups. Unsuccessful match lookups are very
- expensive and this kind of a heuristic speeds up compression quite a lot.
- At first 8 byte strides are taken and every second byte is put to hasher.
- After 4x more literals stride by 16 bytes, every put 4-th byte to hasher.
- Applied only to qualities 2 to 9. */
-static BROTLI_INLINE size_t LiteralSpreeLengthForSparseSearch(
- const BrotliEncoderParams* params) {
- return params->quality < 9 ? 64 : 512;
-}
-
-static BROTLI_INLINE void ChooseHasher(const BrotliEncoderParams* params,
- BrotliHasherParams* hparams) {
- if (params->quality > 9) {
- hparams->type = 10;
- } else if (params->quality == 4 && params->size_hint >= (1 << 20)) {
- hparams->type = 54;
- } else if (params->quality < 5) {
- hparams->type = params->quality;
- } else if (params->lgwin <= 16) {
- hparams->type = params->quality < 7 ? 40 : params->quality < 9 ? 41 : 42;
- } else if (params->size_hint >= (1 << 20) && params->lgwin >= 19) {
- hparams->type = 6;
- hparams->block_bits = params->quality - 1;
- hparams->bucket_bits = 15;
- hparams->hash_len = 5;
- hparams->num_last_distances_to_check =
- params->quality < 7 ? 4 : params->quality < 9 ? 10 : 16;
- } else {
- hparams->type = 5;
- hparams->block_bits = params->quality - 1;
- hparams->bucket_bits = params->quality < 7 ? 14 : 15;
- hparams->num_last_distances_to_check =
- params->quality < 7 ? 4 : params->quality < 9 ? 10 : 16;
- }
-
- if (params->lgwin > 24) {
- /* Different hashers for large window brotli: not for qualities <= 2,
- these are too fast for large window. Not for qualities >= 10: their
- hasher already works well with large window. So the changes are:
- H3 --> H35: for quality 3.
- H54 --> H55: for quality 4 with size hint > 1MB
- H6 --> H65: for qualities 5, 6, 7, 8, 9. */
- if (hparams->type == 3) {
- hparams->type = 35;
- }
- if (hparams->type == 54) {
- hparams->type = 55;
- }
- if (hparams->type == 6) {
- hparams->type = 65;
- }
- }
-}
-
-#endif /* BROTLI_ENC_QUALITY_H_ */
diff --git a/BaseTools/Source/C/BrotliCompress/enc/ringbuffer.h b/BaseTools/Source/C/BrotliCompress/enc/ringbuffer.h
deleted file mode 100644
index fe63270b3f9a..000000000000
--- a/BaseTools/Source/C/BrotliCompress/enc/ringbuffer.h
+++ /dev/null
@@ -1,164 +0,0 @@
-/* Copyright 2013 Google Inc. All Rights Reserved.
-
- Distributed under MIT license.
- See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
-*/
-
-/* Sliding window over the input data. */
-
-#ifndef BROTLI_ENC_RINGBUFFER_H_
-#define BROTLI_ENC_RINGBUFFER_H_
-
-#include <string.h> /* memcpy */
-
-#include "../common/platform.h"
-#include <brotli/types.h>
-#include "./memory.h"
-#include "./quality.h"
-
-#if defined(__cplusplus) || defined(c_plusplus)
-extern "C" {
-#endif
-
-/* A RingBuffer(window_bits, tail_bits) contains `1 << window_bits' bytes of
- data in a circular manner: writing a byte writes it to:
- `position() % (1 << window_bits)'.
- For convenience, the RingBuffer array contains another copy of the
- first `1 << tail_bits' bytes:
- buffer_[i] == buffer_[i + (1 << window_bits)], if i < (1 << tail_bits),
- and another copy of the last two bytes:
- buffer_[-1] == buffer_[(1 << window_bits) - 1] and
- buffer_[-2] == buffer_[(1 << window_bits) - 2]. */
-typedef struct RingBuffer {
- /* Size of the ring-buffer is (1 << window_bits) + tail_size_. */
- const uint32_t size_;
- const uint32_t mask_;
- const uint32_t tail_size_;
- const uint32_t total_size_;
-
- uint32_t cur_size_;
- /* Position to write in the ring buffer. */
- uint32_t pos_;
- /* The actual ring buffer containing the copy of the last two bytes, the data,
- and the copy of the beginning as a tail. */
- uint8_t* data_;
- /* The start of the ring-buffer. */
- uint8_t* buffer_;
-} RingBuffer;
-
-static BROTLI_INLINE void RingBufferInit(RingBuffer* rb) {
- rb->cur_size_ = 0;
- rb->pos_ = 0;
- rb->data_ = 0;
- rb->buffer_ = 0;
-}
-
-static BROTLI_INLINE void RingBufferSetup(
- const BrotliEncoderParams* params, RingBuffer* rb) {
- int window_bits = ComputeRbBits(params);
- int tail_bits = params->lgblock;
- *(uint32_t*)&rb->size_ = 1u << window_bits;
- *(uint32_t*)&rb->mask_ = (1u << window_bits) - 1;
- *(uint32_t*)&rb->tail_size_ = 1u << tail_bits;
- *(uint32_t*)&rb->total_size_ = rb->size_ + rb->tail_size_;
-}
-
-static BROTLI_INLINE void RingBufferFree(MemoryManager* m, RingBuffer* rb) {
- BROTLI_FREE(m, rb->data_);
-}
-
-/* Allocates or re-allocates data_ to the given length + plus some slack
- region before and after. Fills the slack regions with zeros. */
-static BROTLI_INLINE void RingBufferInitBuffer(
- MemoryManager* m, const uint32_t buflen, RingBuffer* rb) {
- static const size_t kSlackForEightByteHashingEverywhere = 7;
- uint8_t* new_data = BROTLI_ALLOC(
- m, uint8_t, 2 + buflen + kSlackForEightByteHashingEverywhere);
- size_t i;
- if (BROTLI_IS_OOM(m)) return;
- if (rb->data_) {
- memcpy(new_data, rb->data_,
- 2 + rb->cur_size_ + kSlackForEightByteHashingEverywhere);
- BROTLI_FREE(m, rb->data_);
- }
- rb->data_ = new_data;
- rb->cur_size_ = buflen;
- rb->buffer_ = rb->data_ + 2;
- rb->buffer_[-2] = rb->buffer_[-1] = 0;
- for (i = 0; i < kSlackForEightByteHashingEverywhere; ++i) {
- rb->buffer_[rb->cur_size_ + i] = 0;
- }
-}
-
-static BROTLI_INLINE void RingBufferWriteTail(
- const uint8_t* bytes, size_t n, RingBuffer* rb) {
- const size_t masked_pos = rb->pos_ & rb->mask_;
- if (BROTLI_PREDICT_FALSE(masked_pos < rb->tail_size_)) {
- /* Just fill the tail buffer with the beginning data. */
- const size_t p = rb->size_ + masked_pos;
- memcpy(&rb->buffer_[p], bytes,
- BROTLI_MIN(size_t, n, rb->tail_size_ - masked_pos));
- }
-}
-
-/* Push bytes into the ring buffer. */
-static BROTLI_INLINE void RingBufferWrite(
- MemoryManager* m, const uint8_t* bytes, size_t n, RingBuffer* rb) {
- if (rb->pos_ == 0 && n < rb->tail_size_) {
- /* Special case for the first write: to process the first block, we don't
- need to allocate the whole ring-buffer and we don't need the tail
- either. However, we do this memory usage optimization only if the
- first write is less than the tail size, which is also the input block
- size, otherwise it is likely that other blocks will follow and we
- will need to reallocate to the full size anyway. */
- rb->pos_ = (uint32_t)n;
- RingBufferInitBuffer(m, rb->pos_, rb);
- if (BROTLI_IS_OOM(m)) return;
- memcpy(rb->buffer_, bytes, n);
- return;
- }
- if (rb->cur_size_ < rb->total_size_) {
- /* Lazily allocate the full buffer. */
- RingBufferInitBuffer(m, rb->total_size_, rb);
- if (BROTLI_IS_OOM(m)) return;
- /* Initialize the last two bytes to zero, so that we don't have to worry
- later when we copy the last two bytes to the first two positions. */
- rb->buffer_[rb->size_ - 2] = 0;
- rb->buffer_[rb->size_ - 1] = 0;
- }
- {
- const size_t masked_pos = rb->pos_ & rb->mask_;
- /* The length of the writes is limited so that we do not need to worry
- about a write */
- RingBufferWriteTail(bytes, n, rb);
- if (BROTLI_PREDICT_TRUE(masked_pos + n <= rb->size_)) {
- /* A single write fits. */
- memcpy(&rb->buffer_[masked_pos], bytes, n);
- } else {
- /* Split into two writes.
- Copy into the end of the buffer, including the tail buffer. */
- memcpy(&rb->buffer_[masked_pos], bytes,
- BROTLI_MIN(size_t, n, rb->total_size_ - masked_pos));
- /* Copy into the beginning of the buffer */
- memcpy(&rb->buffer_[0], bytes + (rb->size_ - masked_pos),
- n - (rb->size_ - masked_pos));
- }
- }
- {
- BROTLI_BOOL not_first_lap = (rb->pos_ & (1u << 31)) != 0;
- uint32_t rb_pos_mask = (1u << 31) - 1;
- rb->buffer_[-2] = rb->buffer_[rb->size_ - 2];
- rb->buffer_[-1] = rb->buffer_[rb->size_ - 1];
- rb->pos_ = (rb->pos_ & rb_pos_mask) + (uint32_t)(n & rb_pos_mask);
- if (not_first_lap) {
- /* Wrap, but preserve not-a-first-lap feature. */
- rb->pos_ |= 1u << 31;
- }
- }
-}
-
-#if defined(__cplusplus) || defined(c_plusplus)
-} /* extern "C" */
-#endif
-
-#endif /* BROTLI_ENC_RINGBUFFER_H_ */
diff --git a/BaseTools/Source/C/BrotliCompress/enc/static_dict.h b/BaseTools/Source/C/BrotliCompress/enc/static_dict.h
deleted file mode 100644
index aafc68ff9e02..000000000000
--- a/BaseTools/Source/C/BrotliCompress/enc/static_dict.h
+++ /dev/null
@@ -1,40 +0,0 @@
-/* Copyright 2013 Google Inc. All Rights Reserved.
-
- Distributed under MIT license.
- See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
-*/
-
-/* Class to model the static dictionary. */
-
-#ifndef BROTLI_ENC_STATIC_DICT_H_
-#define BROTLI_ENC_STATIC_DICT_H_
-
-#include "../common/dictionary.h"
-#include "../common/platform.h"
-#include <brotli/types.h>
-#include "./encoder_dict.h"
-
-#if defined(__cplusplus) || defined(c_plusplus)
-extern "C" {
-#endif
-
-#define BROTLI_MAX_STATIC_DICTIONARY_MATCH_LEN 37
-static const uint32_t kInvalidMatch = 0xFFFFFFF;
-
-/* Matches data against static dictionary words, and for each length l,
- for which a match is found, updates matches[l] to be the minimum possible
- (distance << 5) + len_code.
- Returns 1 if matches have been found, otherwise 0.
- Prerequisites:
- matches array is at least BROTLI_MAX_STATIC_DICTIONARY_MATCH_LEN + 1 long
- all elements are initialized to kInvalidMatch */
-BROTLI_INTERNAL BROTLI_BOOL BrotliFindAllStaticDictionaryMatches(
- const BrotliEncoderDictionary* dictionary,
- const uint8_t* data, size_t min_length, size_t max_length,
- uint32_t* matches);
-
-#if defined(__cplusplus) || defined(c_plusplus)
-} /* extern "C" */
-#endif
-
-#endif /* BROTLI_ENC_STATIC_DICT_H_ */
diff --git a/BaseTools/Source/C/BrotliCompress/enc/static_dict_lut.h b/BaseTools/Source/C/BrotliCompress/enc/static_dict_lut.h
deleted file mode 100644
index 88f8b342eabd..000000000000
--- a/BaseTools/Source/C/BrotliCompress/enc/static_dict_lut.h
+++ /dev/null
@@ -1,5864 +0,0 @@
-/* Copyright 2015 Google Inc. All Rights Reserved.
-
- Distributed under MIT license.
- See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
-*/
-
-/* Lookup table for static dictionary and transforms. */
-
-#ifndef BROTLI_ENC_STATIC_DICT_LUT_H_
-#define BROTLI_ENC_STATIC_DICT_LUT_H_
-
-#include <brotli/types.h>
-
-#if defined(__cplusplus) || defined(c_plusplus)
-extern "C" {
-#endif
-
-typedef struct DictWord {
- /* Highest bit is used to indicate end of bucket. */
- uint8_t len;
- uint8_t transform;
- uint16_t idx;
-} DictWord;
-
-static const int kDictNumBits = 15;
-static const uint32_t kDictHashMul32 = 0x1E35A7BD;
-
-static const uint16_t kStaticDictionaryBuckets[32768] = {
-1,0,0,0,0,0,0,0,0,3,6,0,0,0,0,0,20,0,0,0,21,0,22,0,0,0,0,0,0,0,0,23,0,0,25,0,29,
-0,53,0,0,0,0,0,0,55,0,0,0,0,0,0,61,76,0,0,0,94,0,0,0,0,0,0,96,0,97,0,98,0,0,0,0,
-0,0,0,99,101,106,108,0,0,0,0,0,110,0,111,112,0,113,118,124,0,0,0,0,0,125,128,0,0
-,0,0,129,0,0,131,0,0,0,0,0,0,132,0,0,135,0,0,0,137,0,0,0,0,0,138,139,0,0,0,0,0,0
-,0,142,143,144,0,0,0,0,0,145,0,0,0,146,149,151,152,0,0,153,0,0,0,0,0,0,0,0,0,0,0
-,0,0,0,0,154,0,0,0,0,0,0,155,0,0,0,0,160,182,0,0,0,0,0,0,183,0,0,0,188,189,0,0,
-192,0,0,0,0,0,0,194,0,0,0,0,0,0,0,0,197,202,209,0,0,210,0,224,0,0,0,225,0,0,0,0,
-0,0,0,0,0,0,231,0,0,0,232,0,240,0,0,242,0,0,0,0,0,0,0,0,0,0,0,244,0,0,0,246,0,0,
-249,251,253,0,0,0,0,0,258,0,0,261,263,0,0,0,267,0,0,268,0,269,0,0,0,0,0,0,0,0,0,
-271,0,0,0,0,0,0,272,0,273,0,277,0,278,286,0,0,0,0,287,0,289,290,291,0,0,0,295,0,
-0,296,297,0,0,0,0,0,0,0,0,0,0,298,0,0,0,299,0,0,305,0,324,0,0,0,0,0,327,0,328,
-329,0,0,0,0,336,0,0,340,0,341,342,343,0,0,346,0,348,0,0,0,0,0,0,349,351,0,0,355,
-0,363,0,364,0,368,369,0,370,0,0,0,0,0,0,0,372,0,0,0,0,0,0,0,0,0,0,0,373,0,375,0,
-0,0,0,376,377,0,0,394,395,396,0,0,398,0,0,0,0,400,0,0,408,0,0,0,0,420,0,0,0,0,0,
-0,421,0,0,422,423,0,0,429,435,436,442,0,0,443,0,444,445,453,456,0,457,0,0,0,0,0,
-458,0,0,0,459,0,0,0,460,0,462,463,465,0,0,0,0,0,0,466,469,0,0,0,0,0,0,470,0,0,0,
-474,0,476,0,0,0,0,483,0,485,0,0,0,486,0,0,488,491,492,0,0,497,499,500,0,501,0,0,
-0,505,0,0,506,0,0,0,507,0,0,0,509,0,0,0,0,511,512,519,0,0,0,0,0,0,529,530,0,0,0,
-534,0,0,0,0,543,0,0,0,0,0,0,0,0,0,553,0,0,0,0,557,560,0,0,0,0,0,0,561,0,564,0,0,
-0,0,0,0,565,566,0,575,0,619,0,620,0,0,623,624,0,0,0,625,0,0,626,627,0,0,628,0,0,
-0,0,630,0,631,0,0,0,0,0,0,0,0,0,641,0,0,0,0,643,656,668,0,0,0,673,0,0,0,674,0,0,
-0,0,0,0,0,0,682,0,687,0,690,0,693,699,700,0,0,0,0,0,0,704,705,0,0,0,0,707,710,0,
-711,0,0,0,0,726,0,0,729,0,0,0,730,731,0,0,0,0,0,752,0,0,0,762,0,763,0,0,767,0,0,
-0,770,774,0,0,775,0,0,0,0,0,0,0,0,0,0,776,0,0,0,777,783,0,0,0,785,788,0,0,0,0,
-790,0,0,0,793,0,0,0,0,794,0,0,804,819,821,0,827,0,0,0,834,0,0,835,0,0,0,841,0,
-844,0,850,851,859,0,860,0,0,0,0,0,0,0,874,0,876,0,877,890,0,0,0,0,0,0,0,0,893,
-894,898,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,899,0,0,0,900,904,906,0,0,0,907,0,908,909,
-0,910,0,0,0,0,911,0,0,0,0,0,916,0,0,0,922,925,0,930,0,934,0,0,0,0,0,943,0,0,944,
-0,953,954,0,0,0,0,0,0,955,0,962,963,0,0,976,0,0,977,978,979,980,0,981,0,0,0,0,
-984,0,0,985,0,0,987,989,991,0,0,0,0,0,0,0,0,0,992,0,0,0,993,0,0,0,0,0,0,996,0,0,
-0,1000,0,0,0,0,0,1002,0,0,0,0,1005,1007,0,0,0,1009,0,0,0,1010,0,0,0,0,0,0,1011,0
-,1012,0,0,0,0,1014,1016,0,0,0,1020,0,1021,0,0,0,0,1022,0,0,0,1024,0,0,0,0,0,0,
-1025,0,0,1026,1027,0,0,0,0,0,1031,0,1033,0,0,0,0,1034,0,0,0,1037,1040,0,0,0,1042
-,1043,0,0,1053,0,1054,0,0,1057,0,0,0,1058,0,0,1060,0,0,0,0,0,0,0,1061,0,0,1062,0
-,0,0,0,1063,0,0,0,0,1064,0,0,0,0,0,1065,0,0,0,0,1066,1067,0,0,0,1069,1070,1072,0
-,0,0,0,0,0,1073,0,1075,0,0,0,0,0,0,1080,1084,0,0,0,0,1088,0,0,0,0,0,0,1094,0,
-1095,0,1107,0,0,0,1112,1114,0,1119,0,1122,0,0,1126,0,1129,0,1130,0,0,0,0,0,1132,
-0,0,0,0,0,0,1144,0,0,1145,1146,0,1148,1149,0,0,1150,1151,0,0,0,0,1152,0,1153,0,0
-,0,0,0,1154,0,1163,0,0,0,1164,0,0,0,0,0,1165,0,1167,0,1170,0,0,0,0,0,1171,1172,0
-,0,0,0,0,0,0,0,1173,1175,1177,0,1186,0,0,0,0,0,0,0,0,0,0,1195,0,0,1221,0,0,1224,
-0,0,1227,0,0,0,0,0,1228,1229,0,0,1230,0,0,0,0,0,0,0,0,0,1231,0,0,0,1233,0,0,1243
-,1244,1246,1248,0,0,0,0,1254,1255,1258,1259,0,0,0,1260,0,0,1261,0,0,0,1262,1264,
-0,0,1265,0,0,0,0,0,0,0,0,0,0,0,0,1266,0,1267,0,0,0,0,1273,1274,1276,1289,0,0,
-1291,1292,1293,0,0,1294,1295,1296,0,0,0,0,1302,0,1304,0,0,0,0,0,0,0,0,0,1311,
-1312,0,1314,0,1316,1320,1321,0,0,0,0,0,0,0,1322,1323,1324,0,1335,0,1336,0,0,0,0,
-1341,1342,0,1346,0,1357,0,0,0,1358,1360,0,0,0,0,0,0,1361,0,0,0,1362,1365,0,1366,
-0,0,0,0,0,0,0,1379,0,0,0,0,0,0,0,0,0,0,0,0,1386,0,1388,0,0,0,0,0,0,0,0,0,0,0,0,0
-,0,1395,0,0,0,0,1403,0,1405,0,0,1407,0,0,0,0,0,1408,1409,0,1410,0,0,0,1412,1413,
-1416,0,0,1429,1451,0,0,1454,0,0,0,0,0,0,0,1455,0,0,0,0,0,0,0,1456,0,0,0,0,1459,
-1460,1461,1475,0,0,0,0,0,0,1477,0,1480,0,1481,0,0,1486,0,0,1495,0,0,0,1496,0,0,
-1498,1499,1501,1520,1521,0,0,0,1526,0,0,0,0,1528,1529,0,1533,1536,0,0,0,1537,
-1538,1549,0,1550,1558,1559,1572,0,1573,0,0,0,0,0,0,0,0,0,1575,0,0,0,0,0,1579,0,
-1599,0,1603,0,1604,0,1605,0,0,0,0,0,1608,1610,0,0,0,0,1611,0,1615,0,1616,1618,0,
-1619,0,0,1622,0,0,0,0,1634,0,0,0,1635,0,0,0,1641,0,0,0,0,0,0,0,0,0,1643,0,0,0,
-1650,0,0,1652,0,0,0,0,0,1653,0,0,0,1654,0,0,0,0,1655,0,1662,0,0,1663,1664,0,0,
-1668,0,0,1669,1670,0,1672,1673,0,0,0,0,0,1674,0,0,0,1675,1676,1680,0,1682,0,0,
-1687,0,0,0,0,0,1704,0,0,1705,0,0,1721,0,0,0,0,1734,1735,0,0,0,0,1737,0,0,0,0,
-1739,0,0,1740,0,0,0,0,0,0,0,0,0,0,1741,1743,0,0,0,0,1745,0,0,0,1749,0,0,0,1751,0
-,0,0,0,0,0,1760,0,0,0,0,1765,0,0,0,0,0,1784,0,1785,1787,0,0,0,0,1788,1789,0,0,0,
-0,1790,1791,1793,0,1798,1799,0,0,0,0,1801,0,1803,1805,0,0,0,1806,1811,0,1812,
-1814,0,1821,0,0,0,0,0,1822,1833,0,0,0,0,0,0,1848,0,0,0,0,0,0,1857,0,0,0,1859,0,0
-,0,0,1861,0,0,0,0,0,0,0,1866,0,1921,1925,0,0,0,1929,1930,0,0,0,0,0,0,0,0,0,1931,
-0,0,0,0,1932,0,0,0,1934,0,0,0,0,0,0,0,0,1946,0,0,1948,0,0,0,0,1950,0,1957,0,1958
-,0,0,0,0,0,1965,1967,0,0,0,0,1968,0,1969,0,1971,1972,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-,0,1973,0,0,0,0,1975,0,0,0,0,1976,1979,0,1982,0,0,0,0,1984,1988,0,0,0,0,1990,
-2004,2008,0,0,0,2012,2013,0,0,0,0,0,0,0,0,0,0,2015,0,2016,2017,0,0,0,0,2021,0,0,
-2025,0,0,0,0,0,2029,2036,2040,0,2042,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2043,0,0,0,0,0,
-2045,0,0,0,0,0,0,0,2046,2047,0,2048,2049,0,2059,0,0,2063,0,2064,2065,0,0,2066,0,
-0,0,0,0,0,2069,0,0,0,0,2070,0,2071,0,2072,0,0,0,0,2080,2082,2083,0,0,0,0,0,2085,
-0,2086,2088,2089,2105,0,0,0,0,2107,0,0,2116,2117,0,2120,0,0,2122,0,0,0,0,0,2123,
-0,0,2125,2127,2128,0,0,0,2130,0,0,0,2137,2139,2140,2141,0,0,0,0,0,0,0,0,0,2144,
-2145,0,0,2146,2149,0,0,0,0,2150,0,0,2151,2158,0,2159,0,2160,0,0,0,0,0,0,2161,
-2162,0,0,2194,2202,0,0,0,0,0,0,2205,2217,0,2220,0,2221,0,2222,2224,0,0,0,0,2237,
-0,0,0,0,0,2238,0,2239,2241,0,0,2242,0,0,0,0,0,2243,0,0,0,0,0,0,2252,0,0,2253,0,0
-,0,2257,2258,0,0,0,2260,0,0,0,0,0,0,0,2262,0,2264,0,0,0,0,0,2269,2270,0,0,0,0,0,
-0,0,0,0,2271,0,2273,0,0,0,0,2277,0,0,0,0,2278,0,0,0,0,2279,0,2280,0,2283,0,0,0,0
-,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2287,0,0,0,0,0,0,0,2289,2290,0,0,0,0,2291,0,2292,0,
-0,0,2293,2295,2296,0,0,0,0,0,0,0,2298,0,0,0,0,0,2303,0,2305,0,0,2306,0,2307,0,0,
-0,0,0,0,0,0,0,0,0,0,2313,2314,2315,2316,0,0,2318,0,2319,0,2322,0,0,2323,0,2324,0
-,2326,0,0,0,0,0,0,0,2335,0,2336,2338,2339,0,2340,0,0,0,2355,0,2375,0,2382,2386,0
-,2387,0,0,2394,0,0,0,0,2395,0,2397,0,0,0,0,0,2398,0,0,0,0,0,0,0,2399,2402,2404,
-2408,2411,0,0,0,2413,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2415,0,0,2416,2417,2419,0,2420,
-0,0,0,0,0,2425,0,0,0,2426,0,0,0,0,0,0,0,0,0,0,0,0,2427,2428,0,2429,0,0,2430,2434
-,0,2436,0,0,0,0,0,0,2441,2442,0,2445,0,0,2446,2457,0,2459,0,0,2462,0,2464,0,2477
-,0,2478,2486,0,0,0,2491,0,0,2493,0,0,2494,0,2495,0,2513,2523,0,0,0,0,2524,0,0,0,
-0,0,0,2528,2529,2530,0,0,2531,0,2533,0,0,2534,2535,0,2536,2537,0,2538,0,2539,
-2540,0,0,0,2545,2546,0,0,0,0,0,0,0,2548,0,0,2549,0,2550,2555,0,0,0,0,0,2557,0,
-2560,0,0,0,0,0,0,0,0,0,0,0,2561,0,2576,0,0,0,0,0,0,0,0,0,2577,2578,0,0,0,2579,0,
-0,0,0,0,0,0,2580,0,0,0,0,2581,0,0,0,0,2583,0,2584,0,2588,2590,0,0,0,2591,0,0,0,0
-,2593,2594,0,2595,0,2601,2602,0,0,2603,0,2605,0,0,0,2606,2607,2611,0,2615,0,0,0,
-2617,0,0,0,0,0,0,0,0,0,0,0,0,0,2619,0,0,2620,0,0,0,2621,0,2623,0,2625,0,0,2628,
-2629,0,0,2635,2636,2637,0,0,2639,0,0,0,2642,0,0,0,0,2643,0,2644,0,2649,0,0,0,0,0
-,0,2655,2656,0,0,2657,0,0,0,0,0,2658,0,0,0,0,0,2659,0,0,0,0,2664,2685,0,2687,0,
-2688,0,0,2689,0,0,2694,0,2695,0,0,2698,0,2701,2706,0,0,0,2707,0,2709,2710,2711,0
-,0,0,2720,2730,2735,0,0,0,0,2738,2740,0,0,0,0,2747,0,0,0,0,0,0,2748,0,0,2749,0,0
-,0,0,0,2750,0,0,2752,2754,0,0,0,0,0,2758,0,0,0,0,2762,0,0,0,0,2763,0,0,0,0,0,0,0
-,2764,2767,0,0,0,0,2768,0,0,2770,0,0,0,0,0,0,0,2771,0,0,0,0,0,0,0,0,0,2772,0,0,0
-,0,0,2773,2776,0,0,2783,0,0,2784,0,2789,0,2790,0,0,0,2792,0,0,0,0,0,0,0,0,0,0,
-2793,2795,0,0,0,0,0,0,2796,0,0,0,0,0,0,2797,2799,0,0,0,0,2803,0,0,0,0,2806,0,
-2807,2808,2817,2819,0,0,0,0,0,2821,0,0,0,0,2822,2823,0,0,0,0,0,0,0,2824,0,0,2828
-,0,2834,0,0,0,0,0,0,2836,0,2838,0,0,2839,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2841,
-0,0,0,2842,0,0,0,0,0,2843,2844,0,0,0,0,2846,0,0,2847,0,2849,0,2853,0,0,0,0,0,
-2857,0,0,0,0,2858,0,2859,0,0,2860,0,2862,2868,0,0,0,0,2875,0,2876,0,0,2877,2878,
-2884,2889,2890,0,0,2891,0,0,2892,0,0,0,2906,2912,0,2913,0,0,0,0,0,0,0,0,2916,0,
-2934,0,0,0,0,0,2935,0,0,0,0,2939,0,2940,0,0,0,0,0,0,0,2941,0,0,0,2946,0,2949,0,0
-,2950,2954,2955,0,0,0,2959,2961,0,0,2962,0,2963,0,0,0,0,0,0,2964,2965,2966,2967,
-0,0,0,0,0,0,0,2969,0,0,0,0,0,2970,2975,0,2982,2983,2984,0,0,0,0,0,2989,0,0,2990,
-0,0,0,0,0,0,0,2991,0,0,0,0,0,0,0,0,2998,0,3000,3001,0,0,3002,0,0,0,3003,0,0,3012
-,0,0,3022,0,0,3024,0,0,3025,3027,0,0,0,3030,0,0,0,0,3034,3035,0,0,3036,0,3039,0,
-3049,0,0,3050,0,0,0,0,0,0,3051,0,3053,0,0,0,0,3057,0,3058,0,0,0,0,0,0,0,0,3063,0
-,0,3073,3074,3078,3079,0,3080,3086,0,0,0,0,0,0,0,0,3087,0,3092,0,3095,0,3099,0,0
-,0,3100,0,3101,3102,0,3122,0,0,0,3124,0,3125,0,0,0,0,0,0,3132,3134,0,0,3136,0,0,
-0,0,0,0,0,3147,0,0,3149,0,0,0,0,0,3150,3151,3152,0,0,0,0,3158,0,0,3160,0,0,3161,
-0,0,3162,0,3163,3166,3168,0,0,3169,3170,0,0,3171,0,0,0,0,0,0,0,3182,0,3184,0,0,
-3188,0,0,3194,0,0,0,0,0,0,3204,0,0,0,0,3209,0,0,0,0,0,0,0,0,0,0,0,3216,3217,0,0,
-0,0,0,0,0,3219,0,0,3220,3222,0,3223,0,0,0,0,3224,0,3225,3226,0,3228,3233,0,3239,
-3241,3242,0,0,3251,3252,3253,3255,0,0,0,0,0,0,0,0,3260,0,0,3261,0,0,0,3267,0,0,0
-,0,0,0,0,0,3271,0,0,0,3278,0,3282,0,0,0,3284,0,0,0,3285,3286,0,0,0,0,0,0,0,3287,
-3292,0,0,0,0,3294,3296,0,0,3299,3300,3301,0,3302,0,0,0,0,0,3304,3306,0,0,0,0,0,0
-,3308,0,0,0,0,0,0,0,0,0,3311,0,0,0,0,0,0,0,0,3312,3314,3315,0,3318,0,0,0,0,0,0,0
-,0,3319,0,0,0,0,0,3321,0,0,0,0,0,0,0,0,0,3322,0,0,3324,3325,0,0,3326,0,0,3328,
-3329,3331,0,0,3335,0,0,3337,0,3338,0,0,0,0,3343,3347,0,0,0,3348,0,0,3351,0,0,0,0
-,0,0,3354,0,0,0,0,0,0,0,0,0,0,3355,0,0,3365,3366,3367,0,0,0,0,0,0,3368,3369,0,
-3370,0,0,3373,0,0,3376,0,0,3377,0,3379,3387,0,0,0,0,0,3390,0,0,0,0,0,0,0,3402,0,
-3403,3436,3437,3439,0,0,3441,0,0,0,3442,0,0,3449,0,0,0,3450,0,0,0,0,0,0,0,3451,0
-,0,3452,0,3453,3456,0,3457,0,0,3458,0,3459,0,0,0,0,0,0,0,0,0,3460,0,0,3469,3470,
-0,0,3475,0,0,0,3480,3487,3489,0,3490,0,0,3491,3499,0,3500,0,0,3501,0,0,0,3502,0,
-3514,0,0,0,3516,3517,0,0,0,3518,0,0,0,0,3520,3521,3522,0,0,3526,3530,0,0,0,0,
-3531,0,0,0,0,3536,0,0,0,0,0,0,0,3539,3541,0,0,3542,3544,0,3547,3548,0,0,3550,0,
-3553,0,0,0,0,0,0,0,3554,0,3555,0,3558,0,3559,0,0,0,0,0,0,0,0,3563,0,3581,0,0,0,
-3599,0,0,0,3600,0,3601,0,3602,3603,0,0,3606,3608,0,3610,3611,0,0,0,0,0,0,0,0,0,
-3612,3616,3619,0,0,0,0,0,0,0,0,0,0,0,0,0,3624,3628,0,3629,3634,3635,0,0,0,0,0,0,
-3636,0,3637,0,0,3638,3651,0,0,0,0,0,0,3652,3653,0,0,0,0,3656,3657,0,0,0,0,0,3658
-,0,0,0,0,3659,0,3661,3663,3664,0,3665,0,3692,0,0,0,3694,3696,0,0,0,0,0,0,0,0,0,0
-,0,0,3698,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3700,0,0,3701,0,0,0,3708,3709,0,0,0,3711
-,3712,0,0,0,0,0,3723,0,3724,3725,0,0,3726,0,0,0,0,0,0,3728,3729,0,3734,3735,3737
-,0,0,0,3743,0,3745,0,0,3746,0,0,3747,3748,0,3757,0,3759,3766,3767,0,3768,0,0,0,0
-,3769,0,0,3771,0,3774,0,0,0,0,0,0,3775,0,0,0,0,0,0,3776,0,3777,3786,0,3788,3789,
-0,0,0,0,0,0,0,0,0,3791,0,3811,0,0,0,0,0,3814,3815,3816,3820,0,0,0,0,0,0,0,3821,0
-,0,3825,0,0,0,0,3835,0,0,3848,3849,0,0,0,0,3850,3851,3853,0,0,0,0,3859,0,3860,
-3862,0,0,0,0,0,3863,0,0,0,0,0,0,0,0,3873,0,3874,0,3875,3886,0,3887,0,0,0,0,3892,
-3913,0,3914,0,0,0,3925,3931,0,0,0,0,3934,3941,3942,0,0,0,0,3943,0,0,0,3944,0,0,0
-,0,0,3945,0,3947,0,0,0,3956,3957,0,0,0,0,0,0,0,0,0,3958,0,3959,3965,0,0,0,0,3966
-,0,0,0,3967,0,0,0,3968,3974,0,0,0,0,0,3975,3977,3978,0,0,0,0,3980,0,3985,0,0,0,0
-,0,0,0,0,3986,4011,0,0,4017,0,0,0,0,0,0,0,0,0,0,0,4018,0,0,0,0,4019,0,4023,0,0,0
-,4027,4028,0,0,0,0,0,0,0,0,4031,4034,0,0,4035,4037,4039,4040,0,0,0,0,0,4059,0,
-4060,4061,0,4062,4063,4066,0,0,4072,0,0,0,0,0,0,0,0,0,0,0,0,0,4088,0,0,0,0,0,
-4091,0,0,0,0,4094,4095,0,0,4096,0,0,0,0,0,4098,4099,0,0,0,4101,0,4104,0,0,0,4105
-,4108,0,4113,0,0,4115,4116,0,4126,0,0,4127,0,0,0,0,0,0,0,4128,4132,4133,0,4134,0
-,0,0,4137,0,0,4141,0,0,0,0,4144,4146,4147,0,0,0,0,4148,0,0,4311,0,0,0,4314,4329,
-0,4331,4332,0,4333,0,4334,0,0,0,4335,0,4336,0,0,0,4337,0,0,0,4342,4345,4346,4350
-,0,4351,4352,0,4354,4355,0,0,4364,0,0,0,0,4369,0,0,0,4373,0,4374,0,0,0,0,4377,0,
-0,0,0,4378,0,0,0,4380,0,0,0,4381,4382,0,0,0,0,0,0,0,4384,0,0,0,0,4385,0,0,0,4386
-,0,0,0,4391,4398,0,0,0,0,4407,4409,0,0,0,0,4410,0,0,4411,0,4414,4415,4418,0,4427
-,4428,4430,0,4431,0,4448,0,0,0,0,0,4449,0,0,0,4451,4452,0,4453,4454,0,4456,0,0,0
-,0,0,0,0,4459,0,4463,0,0,0,0,0,4466,0,4467,0,4469,0,0,0,0,0,0,0,0,0,0,0,0,0,4470
-,4471,0,4473,0,0,4475,0,0,0,0,4477,4478,0,0,0,4479,4481,0,4482,0,4484,0,0,0,0,0,
-0,0,4486,0,0,4488,0,0,4497,0,4508,0,0,4510,4511,0,4520,4523,0,4524,0,4525,0,4527
-,0,0,4528,0,0,0,0,4530,0,4531,0,0,4532,0,0,0,4533,0,0,0,0,0,4535,0,0,0,4536,0,0,
-0,0,0,4541,4543,4544,4545,4547,0,4548,0,0,0,0,4550,4551,0,4553,0,0,0,0,4562,0,0,
-4571,0,0,0,4574,0,0,0,4575,0,4576,0,4577,0,0,0,4581,0,0,0,0,0,4582,0,0,4586,0,0,
-0,4588,0,0,4597,0,4598,0,0,0,0,4616,4617,0,4618,0,0,0,0,4619,0,4620,0,0,4621,0,
-4624,0,0,0,0,0,4625,0,0,0,0,4657,0,4659,0,4667,0,0,0,4668,4670,0,4672,0,0,0,0,0,
-4673,4676,0,0,0,0,4687,0,0,0,0,4697,0,0,0,0,4699,0,4701,0,0,0,0,4702,0,0,4706,0,
-0,4713,0,0,0,4714,4715,4716,0,0,0,0,0,0,0,0,0,0,0,0,4717,0,0,4720,0,4721,4729,
-4735,0,0,0,4737,0,0,0,4739,0,0,0,4740,0,0,0,4741,0,0,0,0,0,4742,0,4745,4746,4747
-,0,0,0,0,0,0,0,0,4748,0,0,0,4749,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4751,
-4786,0,4787,0,4788,4796,0,0,4797,4798,0,4799,4806,4807,0,0,0,0,4809,4810,0,0,0,0
-,0,0,4811,0,0,0,0,0,4812,0,4813,0,0,4815,0,4821,4822,0,0,0,0,4823,0,0,0,0,0,0,0,
-0,0,0,4824,0,0,0,0,4826,0,0,0,4828,0,4829,0,0,0,4843,0,0,4847,0,4853,4855,4858,0
-,0,0,0,0,4859,0,4864,0,0,4879,0,0,0,0,4880,0,0,0,0,4881,0,4882,0,0,0,0,0,0,0,0,0
-,4883,0,0,0,0,4884,0,0,0,0,0,4886,4887,4888,4894,4896,0,4902,0,0,4905,0,0,4915,0
-,0,0,0,0,0,0,4916,4917,4919,4921,0,0,0,0,0,4926,0,0,0,0,4927,0,0,0,0,0,0,0,0,
-4929,0,4930,4931,0,4938,0,4952,0,4953,4957,4960,4964,0,0,0,0,0,0,0,5019,5020,
-5022,0,0,0,0,0,5023,0,0,0,5024,0,0,0,5025,0,0,0,0,5028,0,0,0,0,5029,5030,5031,0,
-5033,0,0,0,0,0,0,0,0,0,5034,5035,0,5036,0,0,5037,0,0,0,0,5038,0,0,5039,0,0,0,
-5041,5042,0,0,0,0,5044,5049,5054,0,5055,0,5057,0,0,0,5060,0,0,0,0,0,5063,0,5064,
-5065,0,5067,0,0,0,5068,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5076,0,0,0,0,0,0,
-0,5077,0,0,5078,5080,0,0,5083,0,0,0,0,0,0,0,0,5085,0,0,0,0,0,0,5098,5099,5101,
-5105,5107,0,5108,0,5109,0,0,0,0,0,0,0,5110,0,0,0,0,0,5117,5118,0,5121,0,5122,0,0
-,5130,0,0,0,5137,0,0,0,5148,0,0,0,0,0,0,0,5151,5154,0,0,0,5155,0,0,5156,5159,
-5161,0,0,0,0,5162,0,0,0,0,5163,5164,0,5166,0,0,0,0,0,0,0,0,0,0,5167,0,0,0,5172,0
-,0,0,0,0,0,5178,5179,0,0,5190,0,0,5191,5192,5194,0,0,5198,5201,0,0,0,0,0,5203,0,
-5206,5209,0,0,0,0,0,0,5213,0,5214,5216,0,0,0,0,0,5217,0,0,0,0,0,0,0,0,5218,5219,
-0,5231,0,0,5244,5249,0,5254,0,5255,0,0,5257,0,0,0,0,0,5258,0,5260,5270,0,5277,0,
-0,0,0,0,0,5280,5281,5282,5283,0,0,0,0,0,5284,0,5285,0,0,0,0,0,5287,5288,0,0,0,0,
-0,0,0,0,0,0,5289,5291,0,0,5294,0,0,5295,0,0,0,0,0,0,0,5304,0,0,5306,5307,5308,0,
-5309,0,0,5310,0,0,0,0,5311,5312,0,5313,0,0,0,0,0,5316,0,0,0,5317,0,0,0,0,0,0,0,0
-,0,5325,0,0,0,0,0,0,5326,0,5327,5329,0,5332,0,0,0,0,5338,0,0,0,0,0,0,0,0,5340,0,
-0,5341,0,0,0,5342,0,5343,5344,0,0,5345,0,0,0,0,0,0,5347,5348,0,0,0,0,0,0,0,0,0,
-5349,0,5350,0,5354,0,0,0,0,5358,0,0,5359,0,0,5361,0,0,5365,0,5367,0,5373,0,0,0,
-5379,0,0,0,5380,0,0,0,5382,0,5384,0,0,0,0,0,0,5385,0,0,0,0,5387,0,0,0,0,0,0,5388
-,5390,5393,0,0,0,0,0,0,0,0,0,0,0,5396,0,0,0,0,5397,5402,0,0,0,0,0,5403,0,0,0,
-5404,5405,0,0,0,0,0,0,0,0,0,0,0,0,5406,0,0,0,0,5410,0,0,5411,0,5415,0,0,0,0,5416
-,5434,0,0,0,0,0,0,0,0,0,0,0,5438,0,5440,0,0,0,0,0,0,5441,5442,0,0,0,5443,5444,
-5447,0,0,5448,5449,5451,0,0,0,5456,5457,0,0,0,5459,0,0,0,5461,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,5464,0,5466,0,0,5467,0,5470,0,0,5473,0,0,5474,0,0,5476,0,0,0,0,0,0,0,0
-,0,0,0,5477,0,0,0,0,0,0,0,5484,0,0,5485,5486,0,0,0,0,0,5488,0,0,0,0,0,0,0,5489,0
-,0,0,0,0,5507,0,0,0,5510,0,5511,0,0,5512,0,0,0,5513,0,5515,0,0,5516,5517,0,5518,
-0,0,5522,0,0,0,0,0,5534,5535,0,0,5536,0,5538,0,0,5543,0,5544,0,0,5545,0,5547,0,
-5557,0,0,5558,0,5560,5567,0,0,0,0,5568,0,0,0,5571,5573,0,5574,0,5575,0,0,0,0,
-5577,0,0,5598,0,0,0,0,0,0,0,0,0,5600,5609,0,0,0,0,5610,0,0,5612,0,5624,0,5625,0,
-0,0,5629,0,5641,0,5642,5643,0,0,0,0,0,0,5651,0,0,0,5652,5653,0,5661,5662,5678,0,
-5679,0,0,0,0,5685,5686,0,0,0,0,0,5690,5692,0,5703,0,0,0,0,0,5706,0,0,0,0,5707,0,
-0,0,0,0,0,5708,0,0,5709,0,5710,0,0,0,5712,0,5733,0,5734,5735,0,0,5744,5751,0,0,0
-,0,0,0,0,0,0,0,0,0,5752,0,5754,0,0,0,0,0,0,5757,5758,0,5760,5761,0,0,0,0,5763,
-5764,5765,0,5766,0,5767,5768,0,5770,0,0,0,0,5776,5780,0,0,0,0,5782,0,0,0,0,5784,
-0,0,5788,0,0,0,0,0,0,0,0,0,0,0,5797,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5799,0,0,5801,
-0,0,0,5811,0,0,0,0,0,0,5816,0,0,5827,0,0,0,0,0,0,0,0,5830,5831,0,0,5832,0,0,5833
-,0,5835,5844,5845,0,5846,0,0,0,0,0,5850,0,0,0,0,0,5852,0,5855,5857,0,0,5859,0,
-5861,0,0,5863,0,5865,0,0,0,5873,5875,0,0,0,5877,0,5879,0,0,0,5888,0,0,5889,5891,
-0,5894,0,0,0,0,0,0,5895,0,5897,0,0,0,0,0,0,5907,0,5911,0,0,5912,0,5913,5922,5924
-,0,5927,5928,0,0,0,0,5929,5930,0,5933,0,0,0,0,5949,0,0,5951,0,0,0,0,0,0,0,0,5953
-,0,0,5954,0,5959,5960,5961,0,5964,0,0,0,5976,5978,5987,5990,0,0,0,0,0,5991,0,
-5992,0,0,0,5994,5995,0,0,5996,0,0,6001,6003,0,0,0,0,6007,0,0,0,0,0,6008,0,0,6009
-,0,6010,0,0,0,6011,6015,0,6017,0,6019,0,6023,0,0,0,0,0,0,0,6025,0,0,0,0,0,0,0,0,
-0,0,6026,0,6030,0,0,6032,0,0,0,6033,6038,6040,0,0,0,6041,6045,0,0,6046,0,0,6053,
-0,0,6054,0,6055,0,0,0,0,0,0,6057,0,6063,0,0,0,6064,0,6066,6071,6072,0,0,0,0,0,0,
-6075,6076,0,0,6077,0,0,0,0,0,0,0,0,0,6078,6079,0,0,0,0,0,0,0,0,6080,0,6083,0,0,0
-,0,0,6084,0,0,6088,0,6089,0,0,6093,6105,0,0,6107,0,6110,0,0,0,6111,6125,6126,0,0
-,0,6129,0,0,0,0,6130,0,0,0,6131,6134,0,0,0,0,0,0,6142,0,0,0,0,0,6144,0,0,6146,
-6151,6153,0,6156,0,6163,0,6180,6181,0,0,0,0,0,6182,0,0,0,0,6184,6195,0,0,6206,0,
-6208,0,0,6212,6213,6214,0,6215,0,0,0,6228,0,0,0,6234,0,0,0,0,0,0,6235,6240,0,
-6242,6243,6244,0,6250,6255,0,0,0,0,0,6257,0,0,0,6258,6278,0,6284,0,0,0,6285,0,0,
-0,0,0,0,0,0,6286,0,0,0,6320,0,0,6322,6332,0,0,0,0,0,0,0,0,6334,0,0,0,0,0,0,0,
-6335,0,0,6337,0,6338,0,6339,6340,0,0,6356,6357,6369,0,0,0,6370,6371,6372,0,6373,
-0,0,0,0,0,6376,0,0,0,0,0,6382,6383,6384,0,0,0,0,6386,0,6389,6397,6400,6411,0,
-6414,0,0,0,0,0,0,0,6415,6416,0,0,0,0,0,0,6417,0,0,0,0,6418,0,0,0,0,0,0,0,6420,0,
-6421,6423,6425,0,6429,6430,0,6433,6438,0,0,0,0,0,0,0,0,0,0,6439,6440,0,0,6441,0,
-0,6444,0,0,0,0,6446,0,0,0,0,6447,6448,0,0,6450,0,0,0,6454,0,0,6455,0,6461,0,0,0,
-0,0,0,6462,0,0,6463,0,6464,0,6465,6467,0,0,0,6468,0,6479,6480,0,0,0,0,0,0,0,6481
-,0,0,6485,6487,0,0,0,0,0,0,6493,0,0,0,0,0,0,0,0,6494,6495,6496,0,0,0,0,0,6498,0,
-0,0,6507,6508,0,0,0,0,0,0,0,0,0,0,6511,6512,0,0,0,0,6513,0,0,0,6514,0,0,0,0,0,
-6516,0,0,6517,6518,0,0,0,6519,6520,6521,0,6523,0,0,0,0,6524,6528,0,6530,0,0,6532
-,0,6578,0,0,0,6583,0,6584,0,0,0,6587,0,0,0,6590,0,6591,0,0,0,0,0,6592,0,0,0,0,
-6593,6594,0,0,0,0,0,6599,6600,0,0,6601,6602,6604,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-6608,0,0,0,0,0,0,0,0,6610,6611,0,6615,0,6616,6618,6620,0,6637,0,0,0,0,6639,0,0,0
-,0,6641,0,6642,0,0,0,6647,0,6660,6663,0,6664,0,6666,6669,0,6675,6676,6677,0,0,0,
-0,0,0,0,0,0,6678,0,0,0,6679,0,6680,0,0,0,0,0,0,0,6693,0,0,0,0,0,0,0,0,0,6704,
-6705,6706,0,0,6711,6713,0,0,0,0,0,6716,0,0,0,6717,0,6719,6724,0,0,0,0,0,0,0,0,
-6725,6726,0,0,0,0,0,6728,6729,6735,0,6737,6742,0,0,6743,6750,0,6751,0,0,6752,
-6753,0,0,0,0,0,0,6754,0,0,0,0,0,6756,0,0,0,0,0,0,6763,0,0,6764,6765,0,0,0,6770,0
-,0,0,6776,6780,0,6781,0,0,0,6783,0,6784,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-6785,0,0,0,6792,0,0,0,6793,0,0,6802,0,0,0,0,0,6803,0,0,0,6804,0,0,0,6812,0,0,
-6823,0,6824,6839,0,0,0,0,6852,0,0,6854,0,6856,6857,0,0,0,0,0,0,0,0,0,6867,0,6868
-,6870,6872,0,0,0,6873,6874,0,0,0,0,0,6875,0,0,6877,0,0,0,0,0,0,0,6878,0,0,0,6879
-,0,6880,0,0,0,0,0,0,0,0,0,0,6887,0,6888,6891,6893,0,6895,0,0,0,0,0,0,0,0,6899,0,
-0,0,0,6901,0,0,0,0,6910,0,6911,0,0,6912,0,0,6913,6914,0,0,0,6915,0,0,0,6916,6919
-,0,0,0,0,0,0,6924,0,6925,0,0,0,6926,6927,6928,0,6929,0,6930,0,0,6931,6935,0,6936
-,0,0,0,0,6939,6940,6941,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6942,6948,6949,0,0,0,0,0,0
-,0,6952,6954,6963,6965,6966,0,0,6967,6968,0,0,0,0,0,0,0,0,0,6969,0,0,6970,6979,0
-,0,6980,0,0,6983,0,0,0,0,0,6984,0,0,0,0,0,0,0,6988,6990,6992,0,0,0,0,0,0,0,6995,
-0,0,0,7012,0,0,0,0,0,0,0,0,0,7019,0,0,0,0,0,0,0,0,7021,0,0,7022,7023,7028,0,7030
-,7033,0,0,0,0,0,0,7038,0,0,0,0,0,0,0,0,0,0,7039,0,0,0,0,0,7046,0,7047,0,0,0,0,0,
-0,0,0,0,0,0,7048,7052,0,0,0,0,0,7054,0,7060,0,0,0,0,7061,0,7065,0,0,0,0,7067,
-7069,0,7070,7071,7072,0,0,7078,0,7080,7081,0,7083,0,0,0,7084,7087,7088,0,0,7090,
-0,7093,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7107,0,0,7108,0,0,0,0,0,0,0,0,7110,0,7114,0
-,0,0,0,0,0,0,7115,0,7116,0,0,0,0,0,7117,0,0,7118,0,0,7124,0,7125,0,0,7126,0,0,0,
-0,7128,0,0,0,0,0,7129,0,7130,0,7132,7133,0,0,7134,0,0,7139,0,7148,7150,0,0,0,0,
-7152,0,0,0,7153,7156,7157,0,0,0,0,0,7158,0,0,0,0,0,0,0,0,0,0,7163,7165,7169,0,
-7171,0,0,0,0,0,0,0,0,0,7172,0,7173,7181,0,0,0,0,0,7182,7185,0,0,0,0,7187,0,7201,
-7204,0,0,0,0,0,7206,7207,0,0,0,0,7211,7216,0,7218,0,0,0,0,7226,7228,7230,7232,
-7233,7235,7237,0,0,0,0,7238,7241,0,7242,0,0,7247,0,0,0,7266,0,0,0,0,0,0,0,7289,0
-,0,7290,7291,0,0,7292,0,7297,0,0,0,0,0,0,0,0,0,0,7300,0,7301,0,0,0,0,0,0,0,0,0,0
-,0,0,7302,0,0,0,0,7305,0,0,0,0,7307,0,7308,0,7310,0,7335,0,0,0,0,0,0,0,7337,0,
-7343,7347,0,0,0,0,0,7348,0,7349,7350,7352,7354,0,0,0,0,7357,0,7358,7366,0,7367,
-7368,0,0,7373,0,0,0,7374,0,0,0,0,0,0,0,7376,0,0,0,7377,0,0,0,0,0,7378,0,7379,
-7380,0,0,0,0,0,7383,0,0,7386,0,0,0,0,7398,0,0,0,7399,7400,0,7401,0,0,0,0,0,0,0,
-7402,0,0,0,0,0,7405,0,0,0,0,0,7406,0,0,0,0,0,0,0,0,7421,7427,7429,0,0,0,7435,0,0
-,7436,0,0,0,7437,0,0,0,0,0,0,7438,7443,0,7446,0,7448,0,0,0,0,0,0,0,0,0,0,7456,0,
-0,0,0,0,7457,0,0,7461,0,0,0,0,0,7462,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7463,7466,7472,
-0,7476,0,0,7490,0,7491,0,0,7493,0,0,0,7498,7499,0,0,7508,0,0,0,0,0,7512,0,0,0,
-7513,7514,7516,0,0,0,0,7518,0,0,7519,7521,7522,0,0,0,7526,0,0,7529,0,0,7531,0,
-7536,0,7538,0,7539,0,0,7541,7542,7546,0,0,0,0,0,7547,0,7548,0,0,0,0,0,7550,0,0,
-7552,7553,0,0,0,0,0,0,0,0,0,0,7554,7563,0,7573,0,0,0,0,0,0,7574,7576,0,7578,7581
-,7583,0,0,0,7584,0,7587,0,0,0,0,0,7589,0,0,0,7594,0,0,7595,0,0,7600,7602,7610,0,
-0,0,0,0,7612,0,7613,7614,0,0,7615,0,0,7616,0,7620,0,7621,7622,0,7623,0,0,0,0,
-7626,0,0,0,0,7627,7629,7631,0,0,7633,0,0,0,0,0,7639,0,7640,7642,0,0,7643,0,0,0,0
-,7644,0,0,0,0,0,0,0,7645,0,0,0,0,0,7661,7662,7663,7665,0,7666,0,7667,0,7684,7688
-,7690,0,7691,0,0,0,0,0,0,7692,0,0,7700,0,7707,0,7708,0,7709,0,7721,0,0,0,7722,0,
-7724,0,0,0,0,0,0,7729,7731,0,7732,0,7733,7735,0,0,0,0,0,0,0,7739,0,0,7741,7745,0
-,7748,0,0,0,7751,0,0,0,7752,0,0,0,0,0,0,0,7753,0,0,7756,0,7757,0,7759,0,7760,0,0
-,0,0,7761,7768,0,0,7769,0,0,7770,0,0,7771,0,0,7772,0,0,7773,0,0,0,0,0,7778,7783,
-0,0,0,0,0,7784,7785,0,7790,0,0,0,0,7792,0,7798,0,0,0,0,0,7799,0,7810,0,0,7813,0,
-7814,0,7816,0,7818,7824,7825,7826,0,7828,7830,0,0,0,7840,0,7842,0,7843,0,0,0,0,
-7844,0,0,0,0,0,0,0,7846,0,0,0,0,0,7856,7857,7858,7862,0,7865,0,0,7866,0,0,7913,0
-,0,0,0,7914,0,0,7915,7917,7918,7919,0,7920,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7921,
-7922,0,7924,0,0,7925,0,0,7927,0,7930,7935,0,0,7937,0,0,0,0,0,0,7939,0,7940,0,0,0
-,0,0,7941,0,0,0,0,7945,0,0,0,0,7949,0,0,0,0,0,0,0,0,7950,0,7953,0,0,0,0,0,0,0,
-7968,0,0,0,0,7969,7972,7992,0,7993,0,0,0,0,0,0,0,0,0,0,0,7994,0,0,0,0,8007,8008,
-0,0,0,0,0,0,0,0,0,0,0,0,8010,0,0,0,8012,0,0,0,0,0,0,0,0,8018,0,8028,8029,0,0,
-8030,0,0,8032,8033,0,0,8034,8036,0,0,0,0,0,0,0,0,0,0,8037,0,0,0,8043,8052,8059,
-8060,0,0,8061,0,0,0,8062,0,8063,0,8064,0,8066,8068,0,0,0,8080,8081,0,8089,0,0,0,
-0,0,8092,0,0,0,0,0,0,8093,8110,0,0,0,0,0,0,0,8111,0,0,0,0,0,8112,8115,0,8117,0,0
-,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8120,8121,8122,8128,8129,8130,8131,0,0,8139,0,0,
-8144,0,0,0,0,8145,8146,8153,0,0,0,0,0,0,0,0,8154,0,8157,8160,8162,0,8164,8165,0,
-0,0,0,8166,8167,0,0,8179,0,0,0,8185,0,0,0,8186,0,0,8187,0,0,0,8188,0,0,0,0,0,
-8204,0,0,0,0,8210,0,0,0,0,0,8213,0,8214,0,0,8215,0,0,0,0,0,0,8218,0,0,0,0,0,0,0,
-0,0,8219,0,8221,0,0,8222,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8225,0,0,0,8233,0,0,
-8242,0,0,0,0,0,0,0,0,0,0,0,8247,0,8248,8252,0,8256,8257,0,0,8261,0,8264,8265,0,0
-,0,0,8267,0,0,0,8269,0,0,0,0,0,0,0,0,0,8270,0,0,0,8278,0,8279,8283,0,0,8285,8286
-,8289,8292,0,0,0,0,8293,8295,8299,8300,8301,0,0,0,0,0,0,8304,8307,0,0,0,0,0,0,0,
-8321,0,0,0,8322,8323,8325,8326,8327,0,0,8332,8338,0,0,8340,0,0,0,0,0,8350,0,0,
-8351,0,8354,8355,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8360,8372,0,0,0,0,0,0,0,0,8377,0,0,
-0,0,8380,0,0,0,8383,0,8384,0,0,0,0,8386,8392,0,0,8394,0,0,0,0,0,0,0,8396,8397,0,
-8398,0,8399,0,0,0,0,0,8400,0,8401,8410,8411,0,8412,8413,8422,0,0,0,0,8423,0,0,0,
-0,8424,0,0,8425,0,0,0,0,0,0,0,8441,8442,0,0,0,0,0,0,8443,0,0,8444,0,8447,0,0,0,0
-,8451,0,8458,0,8462,0,0,8468,0,8469,0,0,0,8470,0,8473,8479,8480,0,0,0,0,8481,
-8483,0,0,0,0,0,0,0,0,0,8484,0,0,8490,0,0,0,0,0,0,8491,8493,8494,0,8528,0,0,0,0,0
-,0,0,8530,0,0,0,0,0,0,0,0,8534,8538,8540,0,0,8541,0,0,8545,0,8557,0,0,8569,8570,
-0,0,8571,8574,8575,8579,0,8583,0,0,0,0,8591,0,0,0,0,0,0,0,0,8606,0,8607,0,0,0,0,
-0,0,0,0,0,8608,0,0,8609,0,0,0,8610,0,0,0,8611,0,0,8613,8617,8621,0,0,8622,0,8623
-,0,8624,8625,0,0,0,0,0,0,0,0,0,8637,8638,8639,8650,0,0,0,0,8652,8654,8655,0,0,0,
-0,0,0,0,0,0,0,8656,0,0,0,0,0,8657,0,0,0,0,0,0,0,0,0,8658,0,0,8659,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,8660,0,0,0,0,0,0,8661,8663,8664,0,0,0,0,8665,0,8669,0,
-0,0,0,0,0,0,8671,8674,0,8684,0,8686,0,0,0,8689,0,0,0,8690,0,8706,0,0,0,0,0,0,0,0
-,0,0,0,8710,0,8711,8713,8714,8724,8727,8728,8733,8736,0,8737,8739,0,0,0,0,8742,
-8743,8745,8754,0,0,0,0,8756,0,0,0,0,0,0,8757,8760,0,0,0,0,0,8762,8763,8764,0,
-8766,8769,8770,8773,0,8774,0,8779,0,0,0,0,8780,0,0,8781,0,0,8783,0,0,0,0,0,0,0,0
-,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8784,0,0,0,0,0,0,0,0,8785,0,0,0,0,8786,0,0,0,0,8788
-,8790,0,0,0,8803,0,8813,8814,0,0,0,0,0,8815,8816,0,0,0,0,8818,0,0,0,0,8822,8828,
-8829,0,8831,0,0,0,0,8833,0,0,0,8834,0,0,0,8835,0,8836,0,0,0,8837,0,0,0,0,0,0,
-8838,8839,0,0,0,0,0,0,0,0,0,0,0,8840,0,0,0,8841,0,8842,0,0,0,8846,0,0,0,0,0,0,0,
-8847,0,8848,0,0,8864,0,0,8866,0,0,8870,8872,0,0,8873,8874,0,0,0,0,0,0,8875,0,
-8876,0,0,0,0,8896,8900,0,0,0,0,8901,0,0,0,0,0,8904,0,8907,0,0,0,0,8911,8912,8913
-,0,0,0,8914,0,8915,0,0,0,0,0,0,0,0,0,0,0,0,8916,0,0,0,8929,0,0,0,0,0,0,0,0,0,0,
-8930,0,8932,0,8943,0,0,0,8945,8947,0,0,0,0,8949,0,8950,0,8954,8957,0,0,8970,0,0,
-0,0,8971,0,8996,0,0,0,0,8997,9000,0,0,0,0,9001,9002,0,9004,9009,9024,0,0,0,0,0,0
-,0,0,0,0,0,0,9027,9082,0,0,9083,9089,0,0,0,0,0,0,9090,0,0,0,9092,0,0,9093,0,9095
-,0,0,9096,9097,9101,9102,0,0,0,0,0,0,0,0,9112,0,0,0,0,0,0,9114,0,0,9120,0,9121,
-9122,0,0,0,9123,9124,0,0,9125,0,0,9126,0,9127,0,0,9129,9131,0,0,0,9132,0,0,9136,
-0,9144,0,0,9148,0,0,0,0,0,0,9149,0,9152,9163,0,0,9165,0,0,0,0,0,0,0,0,0,0,0,0,0,
-9166,0,9169,0,0,0,0,0,0,0,9170,0,0,0,0,9172,0,9174,9175,9176,0,9177,0,0,0,0,0,0,
-0,0,9186,0,9187,0,0,0,9188,9189,0,0,9190,0,0,0,0,9191,0,0,0,9193,0,0,0,0,9197,
-9198,0,0,0,9208,9211,0,0,0,0,9216,9217,0,9220,0,0,0,0,9221,9222,9223,0,9224,9225
-,0,0,9227,0,9228,9229,0,0,9230,0,9232,0,9233,0,0,0,0,0,9234,9235,0,0,9237,0,0,0,
-0,0,0,0,0,9238,9240,0,0,9241,0,0,0,0,9244,0,0,0,0,9247,0,0,0,0,0,0,0,0,0,0,9248,
-0,0,0,9249,0,0,0,0,0,9250,0,0,0,0,9251,0,0,9252,9255,0,0,0,9256,0,0,0,0,0,0,0,
-9257,0,0,9258,0,0,0,0,0,0,9259,0,0,0,0,0,9262,9263,0,0,9265,9266,0,0,0,0,0,0,0,0
-,9268,9271,0,0,0,0,0,0,0,0,0,9273,0,0,0,9276,9277,9279,0,0,0,0,0,0,0,9280,0,0,
-9293,0,0,0,0,0,9297,9301,0,0,0,0,0,0,0,0,0,0,0,9308,9309,9313,9321,9322,0,9326,
-9327,0,0,9477,0,9479,0,0,0,0,9482,0,0,0,9483,0,9484,0,0,0,0,0,0,0,0,0,9485,0,0,
-9486,0,0,0,9489,0,0,0,0,9490,9491,0,0,0,0,9493,0,9495,9496,0,0,0,0,0,0,0,0,9500,
-0,9502,0,0,0,0,0,9504,9507,0,9509,0,9511,0,0,9513,0,0,0,0,0,0,0,0,9515,0,0,0,0,0
-,0,9516,9517,0,0,0,0,9532,0,0,9533,0,0,9538,0,9539,9540,0,0,0,0,9541,0,0,0,9542,
-0,0,0,0,0,0,0,0,9544,9545,0,9546,0,0,0,0,0,0,9547,9548,0,0,0,9550,0,9557,0,9558,
-0,9561,0,9563,9570,0,9572,9574,9575,0,0,0,9577,9592,0,0,9596,0,0,0,9598,0,9600,0
-,9601,0,0,0,0,0,0,9608,0,9638,9639,0,0,0,0,0,0,0,9641,0,0,9643,9644,9645,9646,0,
-0,0,9648,0,0,0,0,0,0,0,9650,9654,0,0,0,0,0,0,0,0,9655,0,0,0,0,0,9656,0,9657,0,0,
-0,0,9658,0,0,9659,0,0,9664,0,0,9665,0,9667,9669,0,0,0,0,0,0,0,0,0,0,0,0,9671,0,
-9673,9681,0,0,0,0,9682,9683,9684,0,0,0,0,9686,9698,0,0,9700,9701,9702,0,9703,
-9717,0,0,0,0,9718,0,9726,0,0,0,0,9727,0,0,0,9728,0,9742,0,9744,0,0,0,9750,0,9754
-,9755,0,0,0,0,0,9756,0,9757,9768,0,9769,0,0,0,9770,9771,0,9773,0,9774,0,9775,0,0
-,0,9776,9777,9784,0,0,0,9786,0,9789,0,0,0,0,9793,9794,0,0,0,9808,0,0,0,0,0,9811,
-0,0,0,0,0,0,0,0,0,0,0,0,9812,0,9820,0,9823,0,9828,0,0,0,0,9830,0,0,9833,9836,0,0
-,0,9840,0,0,0,9841,0,0,9842,0,9845,0,0,0,9847,9848,0,0,9855,0,0,0,0,0,0,9856,
-9863,9865,0,0,0,0,0,0,0,0,9866,9867,9868,9873,9875,0,0,0,0,0,0,9880,0,9886,0,0,0
-,9887,0,0,9891,0,0,0,0,0,0,0,9906,9907,9908,0,0,0,9909,0,0,0,0,0,0,9910,0,0,0,0,
-9913,0,0,0,0,9914,0,0,0,0,0,9922,0,0,0,0,9923,9925,0,0,0,0,0,0,9930,0,0,0,9931,0
-,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9932,0,9939,0,0,9940,9962,9966,0,9969,9970,0,0,9974
-,0,9979,9981,9982,0,0,0,9985,0,0,0,0,0,0,9987,0,0,0,0,0,0,0,9988,9993,0,0,9994,0
-,0,0,9997,0,10004,0,0,0,0,0,10007,10019,10020,10022,0,0,0,10031,0,0,0,0,0,10032,
-0,0,10034,0,10036,0,0,0,0,10038,0,10039,10040,10041,10042,0,0,0,0,0,10043,0,0,0,
-0,0,10045,10054,0,0,0,0,10055,0,0,10057,10058,0,0,0,0,0,0,10059,0,0,0,0,0,0,0,
-10060,0,0,0,0,0,0,0,10063,0,10066,0,0,0,10070,0,10072,0,0,10076,10077,0,0,10084,
-0,10087,10090,10091,0,0,0,10094,10097,0,0,0,0,0,0,10098,0,0,0,0,0,0,10103,0,
-10104,0,10108,0,0,0,0,0,0,0,0,10120,0,0,0,10122,0,0,10125,0,0,0,0,10127,10128,0,
-0,10134,0,10135,10136,0,10137,0,0,10147,0,10149,10150,0,0,10156,0,10158,10159,
-10160,10168,0,0,10171,0,10173,0,0,0,10176,0,0,0,0,10177,0,0,0,0,10178,0,0,0,0,
-10194,0,10202,0,0,10203,10204,0,10205,10206,0,10207,0,0,0,0,10209,0,0,0,0,0,0,0,
-10213,0,0,0,0,0,0,10217,0,10229,0,10230,10231,0,0,10232,0,0,10237,10238,10244,0,
-0,0,0,0,10250,0,10252,0,0,0,0,0,0,10255,0,0,10257,0,0,0,0,0,0,10258,0,10259,0,0,
-0,0,0,0,0,0,10260,0,0,0,0,0,0,0,10284,10288,10289,0,0,0,10290,0,10296,0,0,0,0,0,
-10297,0,0,0,0,0,0,10298,0,0,0,0,10299,10303,0,0,0,0,0,10306,0,0,0,10307,0,10308,
-0,0,0,0,10311,0,0,0,0,0,0,0,10315,10317,0,0,0,10318,10319,0,10321,0,10326,0,
-10328,0,0,0,0,10329,0,0,10331,0,10332,0,0,0,0,0,0,10334,0,0,10335,10338,0,0,0,0,
-0,10339,10349,0,0,0,0,0,0,10351,0,10353,0,0,0,0,0,0,10362,0,10368,0,10369,0,0,0,
-10372,10373,0,0,0,0,0,10374,0,0,0,10375,0,10376,0,0,10386,10388,10390,0,0,0,0,0,
-0,0,10391,0,0,10392,10394,0,0,10396,0,10397,0,10403,0,0,0,0,0,0,0,0,10404,0,
-10405,10410,0,0,10411,0,10412,0,0,0,0,0,0,0,10421,10422,10423,0,0,0,0,0,0,0,0,0,
-10425,0,0,10427,0,0,10430,0,0,0,0,0,10432,0,10433,10434,0,0,0,0,10436,10437,0,
-10438,0,10439,0,10444,10446,0,0,0,0,0,10448,0,0,0,0,0,10449,0,0,0,0,0,0,0,10451,
-0,10453,0,0,0,10454,10457,0,0,10459,0,10469,0,0,0,0,0,10472,10481,0,0,0,0,0,
-10482,10483,0,10492,0,0,0,0,0,0,0,0,0,0,10499,0,0,0,10502,0,0,10510,0,10521,
-10524,0,0,10525,10526,10528,0,0,0,0,0,0,0,0,10530,0,0,0,0,10533,0,10534,0,0,0,0,
-0,0,0,0,0,0,10535,10536,0,0,10544,0,10553,10556,0,10557,10559,0,0,0,0,0,10562,
-10563,10564,0,10565,0,0,0,10566,0,10567,0,0,0,0,10575,0,0,10576,0,10578,0,0,0,0,
-0,0,0,0,0,0,10585,10586,10587,10589,0,10590,0,0,10594,0,0,0,0,0,10598,0,0,10601,
-0,0,0,10602,0,10603,0,10604,0,10605,0,0,10607,0,10626,0,10627,0,0,0,0,0,10629,
-10630,10631,0,0,0,10646,0,0,0,10647,0,10650,0,10651,0,0,0,10652,10653,10655,0,
-10658,0,0,10659,0,10667,0,0,0,0,10669,0,0,0,0,0,0,0,0,0,10670,0,0,0,10671,0,0,0,
-0,10672,10673,0,10674,0,0,0,10676,0,0,0,0,0,0,10678,0,10682,0,0,10692,0,10697,0,
-0,0,0,10698,0,0,0,10700,0,0,0,0,0,10703,0,10704,0,0,0,0,0,0,0,10705,0,10715,
-10718,10720,0,0,10722,0,0,0,0,0,0,0,0,10723,0,0,0,0,10726,0,0,0,0,0,10727,10730,
-10743,0,0,0,0,0,0,10744,0,0,10745,0,0,0,0,0,0,10748,0,0,0,0,10750,0,0,10752,
-10753,0,0,0,10756,0,0,0,0,0,0,10758,0,0,0,10759,0,10769,0,0,10772,0,0,0,0,0,0,
-10773,0,0,0,10777,0,0,10779,0,0,0,0,0,0,0,0,10780,10784,0,0,0,10789,0,0,0,10791,
-0,0,0,0,0,0,0,0,0,10795,0,0,10796,0,10808,0,10809,0,0,0,10810,0,0,0,10812,0,0,
-10814,0,0,0,0,0,0,0,0,0,10815,0,0,0,0,10816,10817,0,0,0,0,10819,0,10820,0,0,0,0,
-10821,10822,10823,0,10826,10849,0,0,0,0,10850,0,0,10852,0,10853,0,0,10856,0,0,
-10857,10858,10859,10860,0,0,0,0,0,0,10863,0,10866,10867,10872,10890,0,0,10891,
-10892,0,0,0,0,0,10893,0,0,0,10896,10899,0,0,10900,10902,0,0,0,0,0,10903,0,0,0,0,
-0,0,0,0,0,0,0,0,10905,0,10906,0,0,0,0,10908,10911,0,10912,0,0,10916,0,0,0,0,0,
-10917,0,10918,0,0,0,10923,0,0,0,0,0,10924,0,0,10928,10929,0,0,10930,0,0,0,10932,
-0,0,0,0,10939,0,0,10945,0,0,0,10947,0,0,10948,0,0,0,0,0,0,0,0,0,0,0,0,10958,0,
-10960,10962,0,0,10964,0,0,0,10966,0,0,0,0,0,0,0,0,0,0,10967,0,0,0,10968,0,0,0,
-10973,0,0,0,0,0,10975,0,0,0,10976,10978,0,0,10982,10984,10987,0,0,10988,0,10989,
-0,0,10991,0,0,0,0,10992,0,0,0,10993,0,10995,0,0,0,10996,10997,0,0,0,10998,0,
-10999,0,11001,0,0,0,0,0,0,11010,11012,0,11013,11016,11017,0,0,11019,11020,11021,
-0,0,0,0,0,0,0,0,0,0,0,0,11022,0,0,11023,11029,0,0,0,0,11031,0,0,0,11034,0,0,0,0,
-11055,0,0,0,0,0,11056,11060,0,0,0,0,0,0,11061,0,0,11064,11065,0,11066,0,11069,0,
-11085,0,0,0,0,0,11086,0,0,0,11088,0,0,0,11094,0,0,0,11095,11096,0,0,0,0,0,0,
-11097,11098,0,0,0,0,0,0,11099,0,0,11102,11108,0,0,0,11109,0,11114,11119,0,11131,
-0,0,0,11142,0,0,11143,0,11146,0,11147,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11148,0,
-11149,11152,11153,11154,0,11156,0,11157,0,0,0,11158,0,0,11159,11160,0,0,0,0,0,0,
-0,0,0,0,0,0,11163,0,0,11164,11166,0,0,0,11172,11174,0,0,0,11176,0,0,0,0,0,11182,
-11183,0,0,0,11184,11187,0,0,11188,11189,0,0,0,0,0,0,11194,0,0,0,0,0,0,0,11200,
-11202,0,0,0,0,0,0,11203,0,11204,0,0,0,0,0,11205,0,0,0,11206,0,11207,0,0,11209,0,
-11211,0,11214,0,0,11231,0,0,0,11293,11295,0,0,11296,11297,11302,0,0,0,11307,0,0,
-0,0,11309,11310,0,11311,0,0,0,11313,0,11314,0,0,0,0,11334,0,11338,0,0,0,11339,0,
-0,0,0,0,11340,0,11341,11342,0,11344,0,11345,0,0,0,11348,11349,0,0,11350,0,0,0,
-11355,0,0,0,0,0,0,11356,0,11357,11370,0,0,11371,0,11374,11376,0,0,0,11377,0,0,
-11378,11383,0,11386,11399,0,11400,11406,0,0,0,11408,0,0,11409,11412,0,0,0,0,
-11417,0,0,0,11418,0,11421,0,11426,11429,0,0,0,0,0,11430,0,11437,0,11438,0,0,0,0,
-0,11440,11453,0,0,0,0,0,0,11454,0,0,0,0,11455,0,0,11456,11460,11461,11463,0,
-11469,0,11473,0,0,0,0,11474,0,0,0,11475,0,11476,11477,11480,0,0,0,0,11481,0,0,
-11484,0,0,11487,0,0,0,0,0,0,0,0,0,0,11497,0,0,11502,0,11509,0,0,11510,11511,
-11513,0,0,0,0,0,0,0,0,0,0,11515,0,0,0,0,11516,0,11520,11521,0,0,0,0,0,0,0,0,0,0,
-0,11529,11530,11531,11534,0,0,11543,0,0,0,0,0,11547,0,11548,0,0,0,0,0,11552,
-11556,0,11557,0,0,11559,0,11560,0,0,0,0,0,0,11561,0,0,11563,11564,0,11565,0,0,0,
-0,11567,0,0,0,11569,0,11574,0,11575,0,0,0,11577,0,11578,0,0,0,11580,11581,0,0,0,
-11582,11584,0,0,0,0,0,0,0,11587,0,11588,11591,0,11595,0,0,0,0,0,0,0,0,11596,0,
-11597,0,0,0,0,11598,11601,0,0,0,11602,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11603,
-11604,0,11606,0,0,11608,0,0,0,0,11610,0,0,11611,0,0,0,0,11613,0,11622,0,0,0,
-11623,0,0,0,0,11625,0,0,11626,11627,11628,11630,0,0,0,0,0,0,11639,0,0,11646,0,
-11648,11649,0,11650,0,0,0,0,0,0,0,0,0,11651,0,0,11652,11653,11656,0,0,11677,
-11679,0,0,0,0,11680,0,0,11681,0,11685,0,0,0,0,0,0,0,0,11688,0,0,0,11716,0,11719,
-0,0,0,0,0,11721,0,0,11724,11743,0,0,0,0,0,0,0,0,11745,11748,11750,0,0,0,0,0,
-11751,0,0,0,11752,11754,0,11755,0,0,0,0,0,0,0,11759,0,0,0,0,0,0,11760,0,0,0,
-11761,0,0,0,0,0,0,11766,11767,0,11772,11773,0,11774,0,0,11775,0,11777,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,11778,11780,0,0,0,0,0,0,0,11783,0,11784,0,0,0,11785,
-0,0,0,11786,0,0,0,0,11788,0,0,11789,11791,11792,0,0,0,0,11795,11834,11835,11836,
-0,0,11837,0,0,0,11838,0,0,11846,11851,0,11852,0,11869,0,0,0,11871,0,0,0,11872,
-11874,0,0,0,0,0,0,11875,0,11876,11877,0,0,0,0,0,0,0,0,0,0,11883,0,0,0,0,0,0,0,
-11884,0,11885,0,11886,0,0,11887,0,11894,11895,11897,11909,11910,0,11912,11918,0,
-0,11920,0,11922,11924,11927,11928,0,0,0,0,11929,0,11934,0,0,0,0,0,11941,11943,
-11944,0,11945,0,0,0,0,11948,11949,0,0,0,0,11953,0,11954,0,11955,0,11956,0,0,0,0,
-0,11957,0,0,11959,0,0,0,0,0,0,0,0,11961,0,0,0,0,0,11978,0,0,0,11979,11980,11986,
-11987,0,11992,0,0,0,0,0,11993,0,0,0,11994,0,11999,12004,12005,12006,0,0,0,0,0,
-12011,0,0,12012,12014,0,0,12015,0,0,12019,12028,0,0,12029,0,0,12032,12033,0,0,0,
-0,12034,0,12041,12043,0,0,12044,0,0,0,0,0,0,0,12046,0,0,0,0,0,0,0,12054,12055,0,
-12056,0,0,0,12060,12064,0,0,0,0,0,12065,12067,12068,0,0,0,0,0,0,0,0,12074,0,0,0,
-12075,12076,0,0,0,12079,0,12081,12086,12087,0,0,12088,0,0,0,0,12089,0,12092,0,0,
-0,0,12097,0,0,0,0,0,0,0,0,12098,0,0,0,0,0,0,0,0,0,0,0,0,0,12102,12103,12104,
-12111,0,0,12114,12116,0,0,0,12118,0,0,0,12119,12120,12128,0,0,0,0,12130,0,0,0,0,
-0,0,12131,0,0,0,12132,12134,0,0,0,0,12137,0,12139,0,12141,0,0,12142,0,0,0,12144,
-0,0,0,0,0,12145,0,12148,0,12153,0,0,0,0,12154,12171,12173,0,0,0,12175,0,0,0,0,
-12178,0,0,0,0,0,0,0,12183,0,0,0,0,0,0,0,0,12184,0,0,0,12186,0,0,0,0,0,12187,
-12188,0,0,12189,0,12196,0,12197,0,0,12198,0,12201,0,0,0,0,12203,0,12209,0,0,0,0,
-12210,12211,12212,12213,0,12217,12218,0,0,0,0,0,0,0,0,0,12222,0,0,0,0,0,0,0,
-12223,0,0,12229,0,0,0,0,12233,0,0,0,0,12234,0,0,12236,12242,0,0,0,12243,0,0,0,
-12244,12253,0,12254,12256,0,12257,0,0,12275,0,0,0,0,0,12277,0,0,0,0,0,12278,0,
-12289,0,0,12290,0,12292,12293,0,0,12294,0,12295,0,0,12296,0,12297,0,12298,0,0,0,
-0,12301,0,0,0,0,0,0,0,0,0,0,0,0,0,12309,0,12338,12340,0,0,0,0,12341,0,0,0,0,0,0,
-0,0,12342,12343,0,12344,0,0,0,0,0,0,0,0,0,12345,0,0,0,0,0,0,0,0,12346,0,0,0,0,
-12348,0,0,0,0,0,0,0,0,0,0,0,0,12350,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12351,0,12355,
-12356,12357,0,0,12367,12370,12371,0,0,0,0,0,12372,12376,0,0,0,0,0,0,0,0,12379,0,
-12382,0,12383,0,0,12384,0,0,0,0,12393,0,0,12394,0,0,0,0,12398,12403,0,0,12404,0,
-0,0,0,0,0,0,0,0,0,0,0,0,12410,0,0,0,12411,0,0,0,12412,0,0,0,0,12420,0,12421,0,0,
-0,0,0,12423,0,12425,12429,0,0,0,12431,12432,0,0,0,0,0,0,0,0,0,0,0,0,12434,0,0,0,
-0,0,12435,12436,0,0,0,0,0,0,0,0,12437,0,0,0,0,0,12438,0,0,0,0,0,0,0,0,12445,0,0,
-0,12450,12451,0,0,0,0,0,0,0,0,12452,12475,0,0,12493,12494,0,0,0,12495,0,0,0,0,
-12496,12502,12509,0,0,0,0,12510,0,12512,12513,0,0,0,0,12514,0,0,0,12515,0,12520,
-0,0,0,12524,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12527,0,0,0,12528,0,0,0,12529,0,0,0,
-0,0,12530,0,12535,0,0,12536,0,12538,0,0,0,0,0,0,0,0,0,0,0,0,12540,0,12548,0,0,0,
-0,0,12550,0,0,0,12551,12552,0,0,0,12554,0,0,0,0,0,0,0,0,12555,0,0,12562,0,12565,
-0,12566,0,0,0,0,0,0,0,0,0,0,0,0,12569,0,0,0,12571,12574,0,0,0,0,0,0,0,12577,0,0,
-0,0,0,0,0,12578,12579,12603,0,12608,0,0,12611,0,12612,0,12615,0,12625,0,0,0,0,
-12627,12646,0,12648,0,0,12657,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12670,0,0,12671,0,
-12673,12677,0,0,0,0,0,0,0,0,0,0,0,12679,0,12681,0,12682,12693,0,12694,0,12697,0,
-12701,0,0,0,12703,12704,0,0,0,0,12707,12737,0,0,12739,0,0,12740,0,0,12742,12743,
-0,0,0,0,0,0,0,0,0,12745,0,12746,12747,0,12748,0,0,12759,12767,0,0,0,0,12773,0,
-12774,12778,0,0,0,0,0,0,0,12779,0,0,0,0,0,12780,12793,0,12824,0,12825,0,12836,0,
-0,0,0,12839,0,12842,0,0,0,0,0,0,0,0,0,0,0,0,12843,12845,0,12846,0,0,0,0,12847,0,
-0,12850,12852,12853,0,0,0,12854,0,0,0,12855,0,12856,0,12858,0,0,12859,0,12862,0,
-12863,0,0,12866,0,12869,12872,12873,0,0,0,0,0,0,0,0,0,12875,0,12877,0,0,12878,0,
-0,0,0,0,0,0,0,0,12884,12885,12888,0,12889,0,0,0,0,12893,0,0,0,12895,12896,12898,
-0,0,0,0,0,0,0,12902,0,12909,12910,0,12926,0,12928,0,0,0,12929,0,12930,0,0,0,0,
-12931,0,12932,12933,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12934,0,12942,0,0,0,0,12944,
-0,0,0,0,0,0,0,0,12946,0,0,12948,0,0,12949,0,0,0,0,12950,0,0,0,0,12951,0,12952,0,
-12953,0,0,0,12954,12958,12959,0,0,0,0,0,12960,12964,0,0,0,0,0,12966,0,0,0,0,0,0,
-0,0,12970,0,12971,0,0,0,0,0,0,12972,0,0,12982,0,0,0,12984,12985,0,12986,12996,
-12997,13001,13002,0,0,0,0,13004,0,0,13005,0,0,13007,13009,0,13017,0,0,0,13020,0,
-13021,0,0,0,0,0,0,0,0,0,0,13022,0,0,0,0,0,0,0,0,13024,13027,0,0,0,0,0,13028,0,0,
-13029,0,0,0,0,0,0,0,13032,0,13037,0,0,0,0,0,0,13040,0,0,13041,0,0,0,13043,13044,
-13046,0,0,0,0,13047,0,0,0,0,0,0,0,13049,13054,0,13056,0,0,13060,13061,0,0,0,0,0,
-13067,0,0,13068,0,13071,0,0,0,0,0,13077,13078,0,0,0,0,0,13079,13080,13081,0,
-13082,0,0,0,13085,0,0,0,0,0,0,0,13086,0,13087,13088,0,0,0,0,0,13094,0,13099,0,
-13100,0,0,0,13101,0,13125,13126,13128,13129,0,0,13130,0,13131,0,0,0,0,0,0,13134,
-0,0,0,0,0,0,0,0,0,0,0,13150,0,13168,0,0,0,0,0,0,0,0,0,13169,0,0,13170,0,0,0,0,
-13174,0,0,0,13176,0,0,0,0,0,13177,0,13178,13183,13187,0,0,0,13189,0,0,13190,0,0,
-13191,0,0,13206,0,0,0,13207,0,0,0,0,0,0,0,0,0,0,13212,0,0,13219,13232,0,0,0,
-13241,0,13249,13253,0,0,0,0,0,13255,13259,0,13260,13261,0,13262,0,13272,0,0,0,0,
-13276,0,0,0,0,13277,13299,0,0,13301,13302,0,0,13303,0,0,13305,0,13310,0,0,0,
-13311,0,0,0,0,13325,0,13328,0,0,0,13329,0,0,0,0,0,0,13330,0,0,13331,0,13335,0,0,
-13342,0,0,0,0,0,13343,0,13354,0,13362,0,13366,13367,13369,0,0,13371,13372,0,
-13373,13374,0,13376,0,13380,13381,13386,0,13387,13388,0,13389,13391,13395,0,0,0,
-0,0,13401,13409,0,13410,0,0,0,0,13420,0,0,0,0,0,13422,0,0,0,0,13423,0,0,0,0,
-13425,0,0,0,0,0,13427,0,0,0,13428,0,0,13430,13438,0,13439,0,13445,0,13448,13449,
-0,0,0,0,0,0,13451,0,13457,0,0,0,0,13458,13459,0,13460,0,0,0,0,13464,13465,13466,
-13470,0,13471,13472,13474,13475,0,13476,0,0,13478,13479,0,13481,0,0,0,0,13487,0,
-13490,0,13493,0,0,13494,0,0,13495,0,0,0,0,0,0,0,0,0,0,0,0,0,0,13496,13497,0,
-13500,0,0,13516,13522,0,0,13525,13528,0,0,0,13530,13535,0,13537,13539,0,13540,0,
-13543,0,13544,0,0,0,0,0,0,13545,0,0,0,0,0,0,13547,0,0,0,13549,13555,0,0,0,13556,
-13557,0,0,0,0,0,0,0,13558,0,13563,0,0,0,0,13564,0,0,0,0,0,0,0,0,13566,0,0,0,0,0,
-0,13569,0,0,13571,0,0,0,0,13573,0,0,0,0,0,0,13578,0,0,0,0,0,0,0,0,0,0,13581,0,
-13586,0,13595,0,13600,0,0,0,0,0,0,0,0,13601,13603,0,13604,13605,13606,13607,0,0,
-13617,13618,0,0,0,0,0,0,0,13623,0,13625,13627,0,0,0,0,0,0,0,0,13629,0,0,0,13634,
-0,0,0,13638,0,0,0,0,0,0,0,0,13654,0,0,0,0,0,0,0,0,0,0,13656,0,13659,0,0,13660,0,
-0,13662,0,0,0,13663,0,13664,0,0,0,0,0,13668,0,13669,13671,0,0,13672,0,0,0,0,0,0,
-13675,13685,0,13686,0,0,0,13687,0,0,0,13692,13694,13697,0,0,0,13702,0,0,0,0,0,
-13705,0,0,0,0,13707,0,0,0,13714,0,0,0,0,0,0,0,0,0,13715,0,13716,13717,0,0,13719,
-13724,13730,13731,0,0,0,0,0,0,0,0,13732,0,0,0,0,0,0,0,13734,0,13736,0,0,13737,
-13738,13747,0,13751,0,0,13752,0,0,0,13753,0,13757,0,0,13762,13763,0,13764,13765,
-0,13766,0,0,13767,0,0,0,13768,0,0,0,0,0,0,0,13769,0,0,13772,0,13775,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,13776,13778,13787,0,0,0,13797,0,13798,0,13801,0,13804,
-13806,0,0,0,0,13816,13817,0,0,0,0,0,0,0,0,0,0,0,0,0,13834,0,13836,0,0,13838,0,0,
-13839,0,13840,0,0,0,0,13842,0,0,0,0,0,0,13843,0,0,0,0,0,0,0,0,0,13845,0,0,0,0,0,
-13858,0,0,13860,0,0,13861,0,0,13862,13863,0,13868,0,13869,13870,0,0,0,0,0,0,0,0,
-0,0,13872,0,0,0,0,13873,13878,0,0,0,0,0,0,0,0,0,0,13886,0,13888,13889,13890,0,0,
-13891,13894,0,13897,13899,13900,13904,0,0,13906,0,0,0,13909,0,0,0,13910,0,0,0,
-13911,0,0,0,0,0,13912,13917,0,0,0,0,13918,0,13919,0,0,13920,0,0,0,13921,0,0,
-13922,0,0,0,0,0,0,0,13924,0,13927,0,0,0,0,0,13932,0,13933,0,13934,0,0,13935,0,
-13944,0,0,0,13954,0,0,13955,0,0,0,0,13956,0,13957,0,13967,13969,0,0,0,0,0,0,0,0,
-0,0,0,0,13970,13990,0,13991,13994,0,13995,0,0,0,0,13996,0,0,13999,0,0,0,14018,0,
-14019,0,14021,0,0,0,0,0,0,14041,0,0,0,0,0,0,0,0,14043,0,0,0,0,14046,0,0,0,14048,
-14049,0,0,0,0,0,0,0,0,0,0,14051,0,0,14052,14056,0,14063,0,14064,14066,0,0,14067,
-0,0,0,0,0,0,0,0,0,14068,0,0,0,14072,0,14074,14075,0,14076,14079,14085,14086,
-14087,14093,0,0,0,0,14095,0,0,0,0,0,0,14096,14097,0,0,0,0,0,0,0,14098,0,14102,0,
-0,0,0,0,14103,0,0,0,14104,0,0,14105,0,0,0,14107,14108,0,0,14109,0,0,0,0,0,0,0,0,
-14117,0,0,0,0,14118,0,0,0,0,14119,0,0,14120,0,0,14121,0,14122,14127,0,14128,
-14136,0,0,14138,0,14140,0,0,0,14141,14142,0,0,0,0,14146,0,0,14149,0,14151,0,0,0,
-14152,0,0,14153,0,0,0,0,0,0,0,0,0,14154,0,14156,14157,0,0,14159,0,14161,0,0,0,0,
-14162,0,0,0,0,0,0,14163,0,0,14173,0,0,0,0,0,0,14174,0,0,14176,0,0,14178,0,0,
-14179,14181,0,0,14182,14185,14187,0,14190,0,0,14197,0,0,0,0,0,0,0,0,0,0,0,0,
-14198,0,0,0,0,0,0,14199,14200,0,0,0,14204,0,0,14208,0,0,0,0,0,0,0,0,0,0,0,14231,
-0,0,0,0,0,0,0,0,0,14234,0,0,14235,0,0,0,14240,14241,0,0,0,14246,0,0,0,14247,0,
-14250,0,0,14251,0,0,14254,0,0,14256,0,0,0,14260,0,14261,0,0,0,0,14262,14267,
-14269,0,0,14277,0,0,14278,0,14279,14282,0,0,0,14283,0,0,0,14284,14285,0,0,0,0,
-14286,0,0,0,14288,0,0,0,14289,0,14290,0,14293,14301,14302,14304,14305,0,14307,0,
-14308,14309,0,0,0,0,0,0,0,0,0,0,0,14311,14312,0,0,14317,0,0,0,0,0,0,0,14318,0,0,
-0,0,14320,0,0,0,0,14321,14322,0,0,0,0,0,14326,14329,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-14330,14331,0,0,0,0,14332,0,0,0,14333,0,0,14337,14340,0,14341,0,0,14342,0,14345,
-14346,0,0,14347,0,14362,0,0,0,0,0,14364,14365,14371,0,14373,0,0,14374,0,14379,0,
-14400,0,0,0,0,0,14401,0,0,14405,0,14406,0,14408,14409,0,0,0,14417,0,0,14424,0,0,
-0,0,0,0,0,0,0,14430,0,0,0,14431,0,0,14435,0,14440,0,0,0,0,0,0,14442,0,0,14443,0,
-0,0,0,0,14446,0,0,0,0,0,0,0,14454,0,14457,0,14460,0,0,14466,0,0,0,0,0,14467,0,0,
-0,0,0,0,14469,0,14477,0,0,0,0,0,0,14478,14482,0,0,0,14483,0,0,0,14485,14486,0,0,
-0,14487,14488,14489,14492,14493,14494,14495,14496,14497,0,14499,0,14501,0,0,0,0,
-0,0,0,0,0,0,14502,0,14507,14512,14513,14514,0,0,0,0,0,0,0,0,0,0,0,14515,14526,
-14530,0,14537,0,14544,0,14547,0,0,14548,14550,14551,0,0,14552,0,0,0,14553,0,
-14554,0,0,0,0,14556,14564,0,0,14565,14566,0,0,0,0,0,0,14568,0,0,14569,0,0,0,
-14571,14576,0,0,14577,14578,14579,0,0,14580,0,0,0,0,14582,0,0,0,0,0,0,0,0,0,0,0,
-0,14583,0,0,0,0,0,14587,0,14588,0,0,14600,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,14601,0,0,14604,14605,14611,0,14613,0,0,0,0,14615,0,0,0,0,0,0,14627,0,14628,0,
-0,0,0,14631,0,14633,14634,0,0,0,0,14635,0,0,0,0,0,0,0,0,14636,0,0,14639,14642,0,
-0,0,0,14644,0,0,0,0,14645,14646,0,14653,0,0,14654,0,14658,0,14661,0,0,0,14665,0,
-0,0,14668,0,0,0,0,0,0,0,0,0,14669,0,0,14670,0,0,0,14680,0,0,14681,0,0,0,0,0,
-14682,14683,0,0,0,0,14686,0,0,0,0,14687,14697,0,0,0,0,14699,14705,14711,0,0,0,0,
-0,0,0,0,0,0,14712,0,0,0,14713,0,0,0,0,14719,0,14720,14721,14726,0,0,0,14728,
-14729,0,0,0,0,14731,0,0,0,0,0,0,0,14733,14736,14737,0,0,14740,14742,0,0,0,14744,
-14753,0,0,0,0,14755,14758,14760,0,0,0,0,0,14761,14762,14765,14771,0,14772,0,
-14773,14774,0,0,14775,0,0,14776,0,0,0,0,14777,0,14779,0,0,14782,0,0,14785,14786,
-14788,0,0,0,0,0,14795,0,0,0,0,0,0,14798,0,14803,14804,14806,0,0,0,14809,0,0,0,0,
-0,0,14810,0,0,0,0,14811,0,14812,0,0,0,0,0,14815,0,0,0,0,0,0,0,0,14816,0,14818,0,
-0,0,0,0,0,14819,0,14820,0,14823,0,0,0,14824,0,0,14826,14827,0,0,0,0,0,0,0,0,0,0,
-0,0,14830,0,0,0,0,0,14833,0,14845,0,0,0,0,0,14846,0,0,14847,14871,0,14873,0,
-14876,0,14877,14878,14880,0,0,0,0,0,14881,0,14882,14894,0,0,0,0,14895,0,14907,0,
-14908,0,0,0,0,0,0,0,14911,0,0,0,0,14920,0,0,14931,0,14932,14934,14935,0,0,14936,
-0,14945,0,0,0,0,0,0,0,14947,0,0,14948,14949,14951,0,0,14952,0,0,0,14964,14973,0,
-0,14990,0,0,0,0,14995,0,0,14998,15001,0,0,15002,15020,0,0,0,0,0,0,15021,0,15022,
-0,0,0,0,15023,0,0,15025,15029,15033,0,0,0,15034,0,0,0,15035,0,0,0,0,0,15043,
-15044,0,0,0,15045,15046,15048,15050,0,15065,0,0,0,0,15066,0,0,15075,15082,15084,
-0,0,15085,15086,0,0,0,0,0,0,0,0,15088,0,0,0,15089,0,0,0,0,15094,0,15096,0,15097,
-0,15100,0,0,15102,0,0,0,0,0,0,0,0,15105,0,0,15106,0,15109,15113,0,0,0,15115,0,
-15118,0,0,0,0,0,0,15119,0,0,15120,0,0,0,0,0,15123,15129,0,0,0,15130,0,15131,0,0,
-15134,0,15135,0,0,0,15137,15138,0,0,0,0,0,0,15139,0,0,0,0,0,15140,0,0,15154,
-15162,0,15169,15170,0,15175,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15177,0,15178,15179,0,
-0,0,0,0,15183,0,0,0,0,0,0,0,0,0,0,0,0,15185,15187,0,15194,15195,15196,0,0,0,0,0,
-0,0,15204,0,0,0,0,15206,0,0,0,0,0,15207,0,0,0,0,0,0,0,0,0,15213,0,15214,0,0,0,0,
-0,0,0,15232,0,0,0,0,15234,0,15238,15240,0,15248,0,0,0,0,15250,15251,0,0,0,0,0,0,
-0,15252,0,0,0,15255,15262,15266,0,0,0,15267,0,0,0,15277,15279,0,0,0,15280,15281,
-15282,0,0,0,0,0,15285,0,0,0,0,15289,0,0,15291,0,0,0,0,0,0,0,15296,15297,0,0,
-15304,0,0,0,0,15306,0,0,0,0,0,0,15307,15308,0,15309,0,0,15311,0,0,15312,15313,0,
-0,0,0,0,0,0,0,0,0,0,0,15314,15317,0,0,0,15318,15319,0,0,0,0,15320,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,15321,0,0,0,0,0,15324,0,15325,15326,0,15330,0,0,0,0,15334,0,
-15335,0,15341,0,0,15342,0,0,15343,15344,0,0,0,0,15345,0,0,0,0,15347,0,0,15348,
-15349,15350,0,15356,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15357,0,15358,0,0,0,0,0,0,0,
-15359,15360,15364,0,15380,0,0,0,0,0,15392,0,0,15393,0,15395,0,0,0,0,0,0,0,0,
-15396,0,0,15397,15398,0,0,0,0,0,0,0,0,0,15399,0,15400,0,0,0,15402,0,15405,15410,
-0,0,0,0,15411,0,0,0,15412,0,15416,0,0,0,0,0,0,0,15428,0,15435,0,0,15438,0,0,0,0,
-15439,0,0,0,15440,0,0,0,15441,15449,15451,0,0,0,0,0,0,0,15452,0,0,15455,0,0,0,
-15456,0,0,15458,0,15460,15461,0,0,0,0,0,15462,15464,0,15465,0,0,15466,0,0,15467,
-0,0,0,0,0,15468,0,0,0,0,15481,0,0,15484,0,15485,15486,0,0,0,15487,0,0,0,0,0,
-15488,0,15492,15498,0,0,0,15499,0,0,0,15500,0,15501,0,0,15512,0,15522,0,0,0,
-15524,0,15525,15526,0,0,15527,0,0,15545,15546,0,15548,15552,0,15553,0,0,0,15554,
-0,15555,0,15557,15565,15573,15577,15578,0,15582,0,15583,0,0,0,0,0,0,0,0,0,0,0,0,
-0,15586,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15588,0,0,0,0,0,15589,0,0,0,0,0,0,0,15593,
-15594,0,0,0,0,15595,0,0,0,0,0,0,15596,0,0,0,15597,0,0,0,0,15600,0,0,15601,0,0,0,
-0,15602,15603,0,0,0,0,0,0,15604,0,15609,0,0,15612,0,0,15613,0,0,15615,15617,
-15618,0,0,15620,0,15636,15637,0,0,15649,0,0,0,0,0,0,0,15650,0,0,15651,0,0,0,
-15656,0,15658,0,0,0,15664,0,0,15665,0,0,15668,0,0,0,0,0,15669,0,0,15674,0,0,
-15675,0,0,0,0,15676,0,0,0,0,0,0,0,0,0,0,0,15677,0,0,0,0,15678,0,0,0,0,0,15679,0,
-0,15681,0,15686,0,0,0,0,15687,0,15688,0,0,15690,0,0,0,15697,0,15699,15700,0,0,0,
-0,0,0,0,0,0,15701,0,15702,15703,0,15704,0,15705,0,15707,0,15709,0,15712,15716,0,
-15717,0,15718,15720,0,0,0,0,0,15724,0,0,0,15725,0,15726,0,0,0,15740,0,15745,
-15746,0,0,15747,0,15748,0,0,0,0,0,15749,0,0,0,15752,0,15753,0,0,0,0,0,0,15759,0,
-0,0,15765,0,0,0,0,0,0,0,0,0,15767,0,0,0,15771,0,0,15784,0,0,0,0,15785,15790,
-15791,0,0,15792,0,0,0,15807,0,15811,0,0,0,0,0,0,0,0,0,0,0,0,15818,0,0,0,15819,0,
-0,0,0,15821,0,0,0,0,0,15822,15824,0,0,15827,0,0,15829,15831,0,15832,0,0,15833,0,
-15835,15838,15839,15843,0,0,0,0,0,0,0,0,0,0,0,15844,0,0,0,0,15845,15851,15856,0,
-0,0,0,0,0,0,15858,15860,0,15861,0,0,0,15864,0,0,0,0,15865,0,0,0,0,0,0,15866,0,
-15872,0,0,15876,0,0,0,0,15877,15878,15883,15885,0,0,15888,0,0,0,0,0,15889,15890,
-0,0,0,0,0,0,0,0,15892,0,0,0,0,0,0,0,15893,0,0,15894,0,0,0,15895,0,15896,15897,0,
-15898,15901,15902,0,15911,15915,0,15916,0,15924,15935,0,15937,0,0,0,0,0,15950,0,
-0,0,0,0,0,0,15958,0,0,0,15961,0,0,15966,0,15967,0,0,15977,0,0,15978,0,0,15981,
-15982,15983,0,0,0,0,0,0,0,15986,0,0,0,15990,0,15991,15995,15998,0,15999,0,16000,
-0,0,0,0,16008,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16009,16011,0,16013,0,0,0,0,
-0,0,0,0,16014,0,0,16015,16023,16024,16025,0,0,16026,0,16030,0,16032,0,16033,0,0,
-0,0,0,0,16035,16036,16037,0,0,0,0,0,16039,0,0,0,0,16041,0,0,0,0,0,16043,16044,0,
-0,16047,0,0,0,16048,0,0,16049,16050,16052,0,0,0,0,0,16055,0,0,0,0,0,0,0,0,16056,
-0,0,0,0,0,0,0,16058,16060,16061,0,0,16063,0,0,16064,0,0,0,16067,16068,0,0,16069,
-16078,0,0,0,16079,0,0,0,16080,0,16081,0,0,0,16088,0,0,0,0,0,0,0,0,0,0,0,16089,
-16093,0,16097,0,16103,0,16104,16105,0,0,16256,0,0,16259,0,0,0,0,0,0,0,16260,
-16261,0,0,16262,0,0,16263,0,16268,0,0,0,0,0,0,0,16269,0,0,16270,16273,0,16274,0,
-0,0,0,16275,16276,16277,16280,0,0,0,16281,16284,0,0,0,16286,0,16289,0,0,0,0,0,0,
-0,0,0,16290,0,0,0,0,16291,0,0,0,0,0,0,0,16292,0,0,0,0,0,0,0,0,16293,16295,16297,
-0,16302,0,16304,0,16305,0,16306,0,0,0,0,0,0,0,0,0,0,0,0,16307,16308,16312,0,0,0,
-0,0,0,16313,16315,0,16318,0,0,0,16321,0,0,0,0,0,0,0,16326,16333,16336,0,0,0,0,
-16337,16340,0,0,0,0,0,16345,0,0,16346,0,0,0,0,0,0,0,0,0,16347,0,0,16348,0,0,0,0,
-16349,0,0,0,16350,0,16357,0,0,0,0,16359,16360,0,0,0,0,16362,16363,16364,16365,0,
-0,16366,0,0,0,0,16367,16368,0,16369,16374,0,0,0,0,0,0,0,16376,0,0,0,0,16378,
-16379,0,16380,0,0,0,16381,16383,0,0,0,0,0,16390,0,0,0,16399,0,16402,16404,16406,
-16407,0,0,0,16409,16411,0,0,0,0,16412,0,16413,16415,16423,0,0,0,0,0,16424,0,0,0,
-16428,16434,16435,16449,0,16450,16451,0,0,0,16453,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-16454,0,0,16456,16458,0,0,16459,0,0,16460,0,0,0,0,16462,0,16463,0,0,16466,0,0,0,
-0,0,16479,0,0,16480,0,16481,16484,0,0,0,0,0,0,0,0,0,0,16485,0,0,0,0,0,0,16489,0,
-0,0,0,0,16491,0,0,16498,0,0,16503,0,16505,0,0,0,0,0,0,0,0,16506,0,0,0,16508,
-16509,0,0,0,0,0,0,0,0,16511,16513,0,0,0,16516,0,16517,0,16519,0,16529,0,0,16531,
-0,0,0,0,0,0,16534,0,0,16541,16542,0,0,0,0,0,0,0,0,0,16543,16547,16548,0,0,0,
-16551,0,16552,0,0,0,16553,0,0,16558,0,0,16562,16565,0,0,0,16570,0,0,0,16573,
-16585,0,0,0,16586,16587,16595,0,16596,0,16598,0,0,0,16600,0,0,0,0,0,0,0,0,0,0,0,
-0,0,16601,0,0,0,0,16603,0,0,0,0,0,0,0,16604,16612,0,0,0,0,16613,0,16618,0,0,0,
-16640,0,0,16641,0,0,0,0,0,0,16645,0,0,0,0,16646,0,0,0,0,0,0,16651,0,0,0,0,16653,
-16654,0,0,0,16655,0,0,16656,16667,0,0,0,0,16671,0,16672,0,0,0,16673,0,0,0,0,0,
-16676,0,16686,0,0,0,0,16689,0,16690,0,16692,0,16693,0,16694,0,16696,0,0,0,16705,
-0,0,0,0,0,0,16707,0,0,0,16709,0,0,0,0,16711,0,16712,16713,0,0,0,16715,0,0,0,0,
-16716,0,0,0,0,0,0,0,0,0,16718,16724,0,0,16726,16727,0,0,0,0,0,0,0,16728,0,16729,
-0,0,16730,0,0,0,0,0,16731,0,0,0,16732,0,0,0,0,16734,16738,0,0,0,0,0,0,0,0,16743,
-0,0,16745,0,0,0,0,0,16749,0,16752,0,0,0,0,16756,0,0,16758,0,16759,0,0,0,0,0,
-16760,0,0,0,0,0,0,0,16762,0,16769,0,16770,0,16772,0,0,0,16777,16780,0,0,0,0,0,0,
-16781,0,0,16782,0,16784,0,0,16785,16787,16792,0,0,16794,0,0,0,16798,0,0,16809,0,
-0,16814,16816,16817,0,16819,0,0,0,0,0,0,0,0,0,0,16820,0,0,16836,16839,0,0,16841,
-16851,16857,0,0,16858,16859,0,0,16860,0,0,0,0,0,0,0,0,16862,0,16863,0,0,0,0,0,0,
-0,16864,0,0,0,0,0,0,0,16876,0,16881,16882,0,16885,16886,0,16887,0,0,0,16889,
-16891,0,0,0,0,0,16894,16895,0,0,0,0,0,0,0,0,0,0,0,16897,0,16898,0,0,0,0,0,16913,
-0,0,16924,16925,16926,0,0,16927,0,0,0,16937,16938,0,0,0,16940,16941,0,0,0,16942,
-16945,0,16946,16949,16950,0,0,0,16952,16955,0,0,0,16965,0,16969,0,0,16975,0,0,
-16976,0,0,0,0,16978,0,0,16981,0,16983,16989,0,0,0,0,16990,0,0,16991,0,0,0,16993,
-0,16994,16996,17000,0,0,0,0,0,17002,17004,0,17006,0,0,17007,0,0,0,0,17008,17013,
-17014,0,0,0,0,0,0,0,0,0,17021,0,17031,0,0,0,0,0,17033,17036,0,17038,0,0,17039,0,
-17045,0,0,17046,17047,0,0,0,0,17048,0,17049,17050,0,17051,17053,0,17054,0,17055,
-0,0,0,0,0,17063,0,0,17064,0,0,0,0,0,0,0,17065,0,0,17068,0,0,0,0,0,17072,0,0,0,0,
-0,0,17073,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,17074,0,17080,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,17081,17083,17084,0,0,0,17085,0,0,0,0,17092,0,0,0,0,0,0,0,
-0,0,17093,0,17095,17102,0,0,0,0,0,0,17103,0,0,17105,0,17107,0,0,0,0,17114,0,0,0,
-0,0,17115,17125,17127,0,0,17128,0,0,0,17129,17130,0,17131,0,0,0,0,0,17132,17135,
-17145,0,0,0,0,0,0,0,0,17146,0,17147,0,17148,0,0,0,0,0,0,17149,17150,0,17151,
-17153,0,17155,0,0,0,0,17163,17171,0,17174,0,0,0,0,17179,0,0,17182,17185,0,0,0,0,
-0,17186,0,0,17188,0,0,0,0,0,0,0,17189,17191,0,17194,0,0,0,0,0,0,0,0,0,17195,
-17196,17203,17204,0,0,17205,17217,0,0,0,0,0,17218,0,0,0,0,17219,0,17220,0,17221,
-0,0,17230,0,0,0,0,0,17236,0,17238,17239,0,0,0,17241,17244,0,0,17245,0,17248,0,0,
-17251,0,17252,0,0,17264,0,17266,0,0,0,17268,0,0,0,0,17271,17272,0,17273,0,17295,
-0,17302,0,17305,0,0,0,17306,0,0,0,0,0,0,0,17308,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-17309,0,17310,17313,0,0,0,0,17314,17315,0,17317,0,0,0,0,17318,0,0,0,0,0,0,0,
-17320,0,0,0,0,0,0,17334,0,17344,17348,0,0,0,17350,17351,0,0,17353,0,0,17354,0,0,
-0,0,0,0,0,0,0,17355,0,0,0,0,0,0,17356,17357,0,0,17359,0,0,0,17371,0,17372,0,0,0,
-17393,0,0,0,0,17394,0,0,0,0,0,17395,0,0,17399,0,0,0,17401,17417,0,17418,0,17419,
-0,0,0,0,0,17422,17423,0,0,0,0,0,17424,0,0,0,0,0,17428,17429,17433,0,0,0,17437,0,
-0,17441,0,0,17442,0,0,17453,0,0,0,0,0,0,0,0,17454,17456,17462,0,0,17466,0,0,
-17468,0,0,17469,0,0,0,0,17470,0,17475,0,0,0,0,0,17479,0,0,0,17483,17484,0,17485,
-0,17486,0,17491,17492,0,0,17493,0,17494,17495,0,0,0,17496,0,0,0,17497,0,0,0,
-17502,0,0,0,0,0,17503,0,17505,0,17507,0,0,0,17512,17513,17514,0,0,17515,0,0,0,
-17519,0,0,0,17522,0,0,17523,0,0,0,0,0,0,0,0,0,17527,0,0,0,17528,0,0,0,17534,0,0,
-0,0,17536,0,0,0,17539,0,17540,17543,17549,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,17556,
-0,0,17558,0,17559,0,0,17560,0,0,0,17563,0,0,0,0,0,0,17564,0,0,17565,17566,0,
-17567,0,0,0,0,0,0,17569,17570,0,17575,0,0,0,0,0,0,0,0,0,0,0,17581,0,0,0,17582,
-17583,0,17586,0,0,17587,0,0,0,0,0,0,0,17588,0,0,0,0,17596,17597,0,0,17598,17600,
-0,0,0,0,0,0,17601,0,0,0,17604,0,0,17605,0,0,17607,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,17612,0,0,17618,0,17621,17622,0,0,0,0,17623,0,0,17624,0,0,17630,0,0,
-17631,17633,17634,0,0,0,0,0,0,0,17635,0,0,17636,0,0,17637,0,17638,0,17640,0,0,0,
-0,0,0,0,0,0,0,17641,0,0,0,0,0,0,0,0,0,0,17643,0,0,0,0,17645,0,0,0,0,0,0,0,0,
-17646,17662,0,0,0,0,0,0,0,0,0,17663,17664,0,17665,17666,0,0,0,17669,17671,17673,
-0,17679,0,0,0,0,0,0,0,17684,0,0,0,17686,0,17714,0,0,17720,17722,17726,0,0,17728,
-0,0,17729,0,0,0,17732,0,17733,0,17734,0,0,0,17735,0,0,0,0,17737,0,0,0,0,17739,0,
-0,0,17741,17742,0,0,0,0,17743,17744,17745,0,0,0,17749,0,17750,17751,17752,17754,
-17761,17762,0,17763,0,17766,0,17772,0,0,0,0,0,17775,0,0,0,0,0,0,0,17776,0,0,
-17777,0,0,17778,17779,0,17782,17783,0,0,0,0,0,0,0,0,0,0,17784,0,0,0,0,0,0,0,
-17821,0,0,0,17822,0,0,0,17823,17825,0,0,0,0,0,17826,17831,17832,17833,0,0,17845,
-0,0,0,17846,0,0,0,17848,17850,17854,0,17855,0,0,17859,0,0,0,0,0,0,17860,17861,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,17870,17871,0,0,0,0,0,0,17872,0,0,0,17879,0,
-0,0,17881,17883,0,17884,0,17885,0,0,17886,0,0,17887,17891,17953,0,0,0,0,17954,0,
-0,17955,0,17968,0,0,17972,0,0,0,0,0,17974,0,0,0,0,17976,17978,0,0,17983,0,0,0,0,
-18003,0,0,0,0,0,18007,0,0,0,0,0,18009,0,0,0,0,0,0,0,18010,0,0,0,0,0,0,18012,0,0,
-18014,0,0,0,18015,0,0,0,18016,0,18017,0,0,0,18030,0,0,0,0,0,0,0,18031,0,0,18036,
-18037,18038,0,0,18049,18056,0,18057,18058,0,18059,0,0,0,0,0,0,0,0,18062,0,0,0,0,
-18064,0,0,0,0,0,0,0,0,18067,0,0,0,18068,0,0,18075,0,0,18078,18093,18094,0,0,0,0,
-0,0,0,0,18097,0,0,0,0,0,18098,18100,0,0,0,18108,0,18111,0,0,18112,0,18113,0,0,
-18115,18116,0,18118,0,0,0,0,18121,0,0,0,0,18123,0,0,0,0,0,0,0,0,0,18124,0,0,0,0,
-18125,18126,0,18127,0,0,18128,18135,0,0,0,0,0,0,0,0,0,18150,0,0,0,0,0,18151,
-18152,0,0,18156,18164,0,18166,18171,0,0,0,0,0,0,0,0,0,18172,18183,0,18184,0,0,0,
-0,18185,0,18187,0,0,0,0,0,18188,0,0,0,0,0,0,0,0,18189,0,0,18190,0,0,18191,18192,
-0,0,18194,18195,18196,0,0,0,18197,0,18203,0,18204,0,0,0,0,18205,0,0,0,18207,
-18208,0,0,18214,0,0,0,18215,18216,0,0,0,18220,0,0,18222,0,0,0,0,0,18223,0,18225,
-18231,0,18234,0,18235,0,0,0,0,18240,0,0,18241,18242,0,0,0,0,0,18243,18251,0,
-18253,0,18254,0,0,0,18266,0,0,0,0,0,0,18269,18270,18271,18273,18281,0,0,0,0,0,0,
-0,0,0,0,0,0,18282,0,18283,0,18284,0,0,0,0,0,0,18285,0,18287,18289,0,0,18290,0,0,
-0,0,18308,0,0,0,18310,0,0,0,0,0,0,0,0,0,0,0,0,18311,0,18312,18313,0,18315,0,0,
-18316,18320,0,18331,0,18332,0,18336,0,0,0,0,18337,0,18340,0,0,0,0,0,0,0,0,0,
-18341,0,18344,18345,0,18346,0,0,0,0,0,18348,0,18351,0,0,18356,0,0,0,0,0,0,18357,
-0,0,0,0,0,18367,0,0,0,18368,0,18369,0,18370,18371,0,0,0,18437,18444,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,18445,18450,0,0,0,0,18451,0,18452,0,0,0,18453,0,0,0,0,0,18455,0,
-0,0,18456,0,18457,0,18460,0,0,18461,0,0,0,0,0,0,0,0,18466,0,0,18467,0,0,0,0,
-18473,0,0,0,18476,0,18477,0,0,0,18478,18479,18480,0,0,0,18485,0,0,0,18486,0,0,0,
-0,0,0,18488,18490,0,0,0,0,0,0,18491,0,0,0,0,0,18495,0,0,18496,0,0,0,0,0,0,18505,
-0,18521,0,18522,18523,0,0,0,18525,18526,0,0,0,0,0,18527,0,0,0,0,18532,18533,0,
-18534,0,0,0,0,0,0,18535,18537,0,18538,0,0,0,0,0,0,18540,18541,18542,18543,0,
-18546,0,0,0,0,18553,18556,0,0,18558,0,0,18569,18571,0,0,0,18572,0,18574,0,0,0,0,
-18586,0,0,0,0,0,18588,0,0,18589,0,0,0,0,0,0,18590,0,18592,0,0,0,0,18594,0,0,0,
-18596,0,0,18597,18598,0,0,18601,0,0,0,0,18602,0,0,0,18603,18604,0,18605,0,0,0,0,
-18608,0,0,18611,0,0,0,0,0,0,0,0,0,18612,0,18616,0,0,18617,18619,0,0,0,18628,0,0,
-0,18629,0,0,18630,0,0,0,0,0,0,0,18631,0,18632,0,0,18635,18637,0,0,0,0,0,0,18641,
-18643,18648,0,18652,0,0,18653,0,18655,18656,0,0,0,18657,0,0,18666,18674,0,0,0,0,
-18677,18684,18685,0,0,18686,0,0,18690,0,0,0,0,0,0,0,18695,18696,0,0,0,0,0,0,0,0,
-0,0,18697,0,0,18700,0,0,0,0,0,0,18702,0,18708,0,0,18709,0,18710,0,0,18711,0,
-18714,0,0,18718,0,0,0,0,0,0,18719,0,0,18722,0,18726,0,0,0,0,0,0,0,0,0,0,0,0,0,
-18731,0,0,0,0,0,18739,18741,0,0,18742,0,18743,18744,18746,18748,0,18752,18753,0,
-0,18754,18763,0,18765,0,0,0,18766,0,0,0,18769,0,0,0,0,0,18773,18778,18779,18781,
-0,0,18784,18787,0,18788,0,18793,0,0,0,0,0,0,18795,0,0,18800,0,0,0,0,0,18801,
-18804,0,0,0,0,0,0,0,18806,0,0,0,18811,18815,18816,0,0,0,0,18825,0,0,18827,18829,
-0,0,18830,0,0,0,0,18831,0,0,18832,0,0,0,0,18833,0,18840,0,18841,0,18842,0,0,0,0,
-18843,0,18844,0,0,0,0,0,0,18845,18846,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-18848,0,0,0,18853,18860,0,0,18862,18866,0,0,18867,18869,0,0,18874,18881,18891,0,
-0,0,0,0,0,0,0,0,0,18892,0,0,0,0,0,0,0,0,18895,0,18896,0,0,0,18900,0,0,0,18901,0,
-18902,18915,18916,0,0,0,0,0,0,0,0,18919,0,0,0,0,0,18920,0,0,0,18921,18929,0,0,0,
-0,18930,0,0,0,0,0,0,18932,0,0,0,0,18934,18942,0,0,0,18951,18957,0,0,0,0,18958,0,
-0,0,0,18959,18960,0,0,18961,0,0,18962,0,0,0,0,18963,18964,0,0,0,18965,0,18967,0,
-0,0,0,0,0,0,0,0,18968,0,18969,0,18970,18973,18976,0,0,0,0,0,0,18977,0,0,0,18981,
-0,0,0,18990,0,18998,0,0,0,0,0,18999,19003,0,0,19005,0,0,0,19006,0,0,0,0,0,0,
-19008,19011,0,0,19018,0,0,19019,0,19024,0,19031,19032,0,19039,0,19041,19050,0,0,
-0,19051,19055,19056,0,19059,19063,19064,0,0,19088,0,0,0,19093,19094,0,0,0,0,
-19095,0,19096,0,0,0,19097,0,0,19098,0,19099,19100,0,0,19103,0,0,0,0,0,0,0,19111,
-0,0,0,0,0,0,19112,0,0,0,19116,19117,0,19121,19122,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,19123,19124,0,0,0,0,0,0,0,19125,19126,0,19128,0,0,0,0,0,0,0,0,0,0,
-19129,19130,19131,19132,0,0,19146,0,0,19147,19156,19158,0,0,0,0,0,0,0,0,19182,
-19185,0,0,19187,0,0,0,19193,0,0,0,0,0,19194,0,19197,0,0,0,0,19198,0,0,0,0,0,0,0,
-0,0,0,19202,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,19203,0,19205,19210,
-0,0,0,19213,0,19218,0,0,0,19223,19229,0,0,19230,0,0,19231,19232,19233,19239,0,0,
-0,0,0,19240,0,19248,19249,0,0,0,0,19254,0,19256,19258,19259,0,0,19261,0,19266,0,
-0,0,19272,0,19278,19281,19282,0,0,0,0,0,0,0,0,0,0,0,0,19283,0,0,19284,0,0,19285,
-19287,0,0,0,0,0,0,0,0,0,0,0,0,0,0,19288,19291,0,19292,0,0,0,0,19297,0,19298,0,0,
-0,0,19302,19303,0,0,0,0,19304,19305,0,0,0,0,19314,0,0,19315,0,0,19321,0,0,0,0,0,
-0,0,19322,0,19333,0,19334,19335,0,19336,19337,0,0,0,0,0,0,0,0,0,0,0,19346,0,0,
-19353,0,19354,19362,0,19366,19367,0,0,19369,0,19375,0,19377,19380,19388,0,0,0,0,
-0,19389,19390,0,0,0,0,19392,0,0,0,0,0,19402,0,0,0,0,0,0,0,0,19412,0,0,19413,
-19422,0,19424,0,0,0,19425,0,0,0,19428,0,0,0,0,19431,0,0,0,0,0,19432,0,0,0,0,0,
-19448,19459,0,0,19461,0,19462,19463,0,19467,19474,19482,0,0,0,0,19494,0,0,0,0,
-19501,0,0,0,0,0,0,0,0,0,0,19502,19504,0,0,0,0,0,0,0,19505,0,0,0,0,19506,19507,0,
-0,0,19508,0,0,19511,0,0,19514,0,19515,0,19516,0,19518,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,19530,0,19537,19538,0,19543,19546,0,19547,19551,0,0,0,0,0,0,19552,
-19553,0,0,0,0,0,0,0,0,0,0,0,0,19555,0,0,19556,0,0,0,0,0,0,0,0,0,0,0,0,19560,
-19561,0,0,19562,0,0,0,0,0,0,19565,19567,0,19568,0,0,0,19569,19570,0,19578,0,0,0,
-0,19580,0,0,0,0,19581,19584,0,0,0,0,0,0,0,19585,19586,0,0,0,19587,19588,0,19589,
-0,0,0,0,0,0,19592,19593,19599,0,19600,0,0,19604,0,0,19605,0,19606,19608,19610,0,
-19613,19614,0,0,0,0,0,0,19616,19617,0,0,19618,0,0,19619,0,0,0,19620,19621,19631,
-0,0,19632,19634,19636,0,19643,0,0,19644,19658,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,19659,0,0,0,0,0,0,0,0,0,0,0,19675,19677,0,0,0,0,19679,0,19683,0,19684,0,0,
-0,0,0,0,19687,0,0,0,0,0,0,0,0,19688,19689,19692,0,0,0,0,0,0,0,19695,19697,0,0,0,
-0,0,19698,19699,0,0,19700,0,19702,0,0,19703,0,0,0,0,0,0,19704,19708,0,19710,0,
-19713,0,0,0,19715,0,0,0,0,19718,0,0,0,0,0,0,0,19720,0,19722,0,0,19725,0,0,0,0,0,
-0,0,0,0,0,0,0,0,19730,0,0,0,0,0,19731,0,19734,19735,19739,0,0,19740,0,19741,0,0,
-0,19746,0,0,19747,0,19771,0,0,0,0,0,0,0,0,19772,19775,0,0,0,0,0,0,19778,0,0,0,0,
-0,19779,0,0,19780,19790,0,19791,0,0,19792,0,0,0,19793,0,0,19796,19797,0,0,0,
-19799,0,0,0,19801,0,0,0,0,19803,0,19804,0,19805,0,0,19807,0,0,0,19808,0,0,0,0,0,
-0,19809,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,19816,0,19821,0,19822,19830,19831,0,0,
-0,19833,0,0,0,0,0,0,0,0,0,0,19838,0,0,0,0,19839,0,0,19843,0,0,0,0,19845,0,0,0,0,
-19847,0,0,19848,0,19849,0,0,0,0,0,0,0,19851,0,0,0,19854,0,0,0,0,0,0,0,0,0,19864,
-0,19865,0,19866,0,0,0,0,0,0,0,19868,0,0,19870,0,0,19871,0,0,19872,19873,19875,0,
-19880,19882,19884,0,0,19885,19886,19888,0,0,0,0,0,0,0,0,0,0,0,0,19890,19892,
-19893,0,0,19894,0,0,0,19895,0,19896,19902,0,0,19903,0,0,19905,0,0,0,19906,0,
-19908,0,19909,19911,0,0,0,19913,19920,0,19938,19939,19940,0,0,0,0,0,0,0,19942,0,
-19943,0,19945,0,0,0,19951,19952,19954,19960,0,19965,0,19971,0,0,0,0,0,19975,0,
-19976,0,19990,0,0,19991,0,19993,0,19995,0,0,0,19998,19999,20001,0,20003,20005,0,
-20011,20012,0,0,0,0,0,0,20014,0,20020,0,0,0,0,20021,0,0,0,0,0,20023,20024,0,0,0,
-0,0,20025,0,0,20027,0,0,20029,0,0,20032,0,0,0,0,20044,20045,0,20048,20049,0,0,
-20050,0,20052,0,0,20054,20057,0,0,0,0,0,0,0,0,0,20059,0,0,20061,0,20062,0,20064,
-0,0,20066,0,0,20067,0,0,0,0,20069,0,0,0,0,0,0,20070,20071,0,0,0,0,0,0,0,0,0,0,0,
-20072,0,0,20073,20074,0,0,0,0,0,20075,0,20078,0,0,0,0,20080,0,20081,0,0,0,0,0,0,
-20095,0,20098,0,0,0,0,0,0,0,20107,0,0,0,0,0,0,0,0,20112,0,0,0,20113,20114,0,0,0,
-20115,20123,20124,0,0,0,20131,20133,20134,0,0,0,0,20136,0,0,20137,20138,20150,0,
-20152,0,0,0,20153,0,0,20154,0,0,0,20158,0,20163,0,0,20164,0,0,0,0,0,0,0,20166,0,
-20168,0,20170,0,20175,0,0,20178,0,0,0,0,20223,0,0,0,0,20224,0,20226,0,0,20230,0,
-20231,0,0,0,0,20232,0,0,20233,20234,0,20244,0,20247,0,0,0,0,0,0,20249,0,0,0,
-20250,0,0,0,0,20251,0,20253,0,20254,0,0,0,0,20256,0,0,20264,0,0,0,0,20266,0,0,0,
-20278,0,0,20279,20282,0,0,0,0,0,20283,0,20284,0,20285,0,20287,20290,0,0,0,0,
-20292,0,0,0,0,20293,20297,0,0,0,0,0,0,20299,0,20300,20303,0,0,0,0,0,0,20307,0,0,
-20308,0,20309,0,20310,0,0,0,0,0,0,20312,0,0,0,20314,0,0,0,0,20315,20316,0,20322,
-0,0,0,0,0,0,20339,0,0,0,20342,0,0,0,0,20352,0,0,0,0,0,0,0,0,0,0,20362,0,0,20365,
-0,20375,20377,0,0,0,0,0,0,0,0,0,0,0,20378,20379,0,20380,0,0,20381,0,20382,0,
-20383,0,20388,0,0,0,0,0,0,0,0,0,0,0,0,0,0,20390,20392,20393,0,0,20395,0,0,0,0,0,
-20396,0,0,0,0,0,0,0,0,20398,20415,0,0,0,20417,0,0,20420,0,0,20426,20428,0,20431,
-0,0,20432,0,20433,20434,20435,0,0,0,0,20440,0,0,0,0,0,20442,0,20443,0,20446,0,0,
-0,0,20448,0,20451,0,0,0,0,0,0,0,0,0,20452,20453,0,0,20454,0,0,0,0,0,0,20457,0,
-20458,0,0,0,20465,0,0,0,0,0,20469,0,0,0,20473,0,20476,0,0,0,0,0,0,0,0,20477,0,0,
-20485,0,0,20486,0,0,20487,0,20496,0,20497,0,0,20498,0,0,0,0,0,0,0,0,0,0,20499,
-20500,0,20501,0,0,0,0,0,20520,20527,0,20529,0,0,0,0,20539,0,0,20540,0,0,0,20543,
-0,0,0,20546,0,0,0,0,0,20548,0,0,20563,0,0,20564,0,20566,0,0,0,0,0,20589,0,0,0,0,
-20590,0,0,20593,20594,0,0,0,0,20595,0,20597,20598,0,0,0,20618,20620,0,0,0,0,
-20621,0,0,0,0,20627,0,0,0,0,0,20628,0,0,0,20629,0,20630,0,0,20639,0,0,0,0,0,
-20707,0,0,20709,0,0,0,20713,20714,0,0,0,0,0,20724,20725,0,0,0,0,20726,20728,
-20729,0,20733,0,20734,0,20735,20736,0,20737,0,0,20744,0,20745,0,20748,0,0,20749,
-0,0,0,0,0,0,0,0,20750,0,0,0,0,20754,0,0,0,20761,0,0,20763,0,0,0,0,0,0,0,20766,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,20767,0,0,0,0,20768,0,20769,20777,0,0,0,0,0,0,20785,0,
-0,0,20786,20795,20801,0,20802,0,20807,0,0,20808,0,0,20810,0,0,20811,0,20812,0,0,
-0,0,0,20813,0,0,20818,20820,20821,0,0,0,20822,0,20823,0,0,0,20826,0,0,0,0,0,0,0,
-20829,20830,20831,0,20832,20836,0,0,20839,0,0,20840,20842,0,20843,0,20844,0,
-20854,0,0,0,20855,0,0,0,0,20856,0,0,0,20869,0,0,20871,0,0,0,0,0,0,0,20873,0,0,0,
-0,0,20876,0,0,0,0,0,20880,0,0,20882,0,0,0,0,20883,20884,0,0,20890,0,0,0,0,0,0,0,
-0,0,20891,0,0,0,0,0,20905,0,20906,20910,0,0,20912,20915,0,0,0,0,0,20916,0,20917,
-0,20919,20920,20922,0,20927,0,20928,20929,20930,0,0,20935,0,0,20939,0,0,20941,0,
-0,0,20943,0,0,0,20946,20947,0,0,0,0,0,20950,0,20954,0,0,20955,20964,0,0,20967,0,
-0,0,0,0,20973,20975,0,0,0,20984,0,20987,20988,0,0,0,0,0,20989,0,0,0,20995,0,
-20998,0,20999,0,0,0,0,21000,21001,0,0,0,0,21008,0,21010,0,21016,0,0,0,21017,
-21018,0,0,0,0,0,21021,21026,21027,21028,0,0,21029,0,0,0,0,0,21030,0,0,0,0,0,0,0,
-0,0,0,0,0,0,21031,21032,0,0,0,0,0,21037,0,0,21038,0,0,0,0,0,0,0,0,0,21039,0,
-21041,0,21046,21047,0,0,0,21049,21053,0,0,21057,21064,21065,0,0,21066,21067,0,0,
-0,21069,0,0,0,21071,21072,0,0,21073,0,21074,0,0,21078,0,0,0,0,21079,0,0,21080,
-21081,0,0,21086,21087,0,21089,0,0,0,0,0,0,0,21091,0,21093,0,21094,0,0,0,0,0,0,0,
-0,21095,0,0,0,0,0,21096,0,21098,0,0,0,0,0,0,0,21099,0,0,21100,21101,21102,0,0,0,
-0,0,21103,0,21104,0,0,0,0,0,21105,21108,21109,0,0,21112,21113,0,0,0,0,0,0,21115,
-21122,21123,0,0,0,0,0,21125,0,0,0,0,0,0,0,0,21129,21131,0,0,21134,0,0,0,21137,
-21142,0,21143,0,0,21144,0,21145,21146,0,21152,21154,21155,21156,0,0,0,21160,0,0,
-0,0,0,0,21161,0,21164,0,21166,0,0,0,0,21170,0,0,0,0,21171,0,0,21172,0,21174,0,
-21175,0,0,0,0,0,21176,21179,21188,0,0,0,21189,0,0,21190,0,0,0,21192,0,0,21193,0,
-0,0,21198,0,21212,0,0,21213,0,0,0,0,0,0,21215,21216,0,0,21223,21225,0,21226,0,0,
-0,0,21227,21228,0,0,21229,0,0,0,0,21230,21236,0,0,0,0,0,0,0,0,0,0,0,0,0,21237,0,
-0,21238,21239,0,0,0,0,21256,0,0,0,0,0,21257,0,0,0,0,0,0,0,21259,0,0,0,21263,0,
-21272,0,21274,0,21282,0,0,0,0,0,0,0,0,21283,0,0,0,0,0,0,0,0,21294,0,0,21297,0,0,
-0,0,21298,0,0,0,21299,0,21300,21302,0,21316,0,21318,21322,21323,0,21324,0,21326,
-0,0,0,21327,21328,0,0,0,21352,0,0,21354,21361,0,0,0,0,0,0,0,0,0,0,0,0,0,21362,0,
-0,0,21363,0,0,0,0,0,0,0,0,0,21366,0,0,21367,21372,21374,0,0,0,21375,21377,0,
-21378,0,0,0,21380,0,0,0,0,0,0,0,0,0,0,21381,0,0,0,0,0,0,21382,0,21383,0,0,21384,
-0,0,21385,0,0,0,0,21389,21390,0,0,0,0,0,0,0,0,0,0,0,0,0,21397,21398,0,0,0,0,0,0,
-0,0,0,0,21399,0,21400,0,0,0,0,21402,0,0,0,21403,21404,0,21405,21406,0,0,0,21407,
-0,0,0,0,0,0,0,0,0,0,0,0,21408,0,0,0,0,21409,0,21421,0,21422,0,0,0,21425,21428,0,
-0,0,0,21429,0,0,0,0,0,21433,0,0,0,0,0,0,0,0,0,0,21434,0,21443,0,21444,21449,0,
-21452,0,21453,21454,0,0,0,21457,0,0,21458,0,0,0,21460,21461,0,0,21464,0,0,0,
-21473,21478,0,0,21479,0,0,21481,21483,0,0,0,0,0,0,0,0,21484,0,0,21485,21486,0,0,
-21488,0,0,0,0,0,0,21523,0,0,21525,0,0,0,0,0,0,0,21526,0,0,0,0,0,0,21529,21530,0,
-0,21531,0,0,21533,0,0,21539,21564,0,21567,0,0,0,0,0,0,0,0,21575,0,0,0,0,21577,0,
-0,0,0,0,21591,0,0,21604,0,0,0,0,0,0,0,0,0,21605,0,21606,0,0,21617,21618,21619,
-21620,0,0,0,0,0,0,0,0,0,0,0,0,0,21623,0,0,0,0,21631,0,21635,0,0,0,0,21639,21646,
-21653,21662,0,0,21663,21664,0,21666,0,0,21667,0,21670,21672,21673,0,21674,21683,
-0,0,0,0,0,21684,0,21694,0,0,0,0,21695,21700,0,21703,0,21704,0,0,21709,0,0,0,
-21710,0,0,0,0,0,0,0,0,21711,0,0,0,21712,0,21717,0,21730,0,0,0,21731,21733,0,0,0,
-0,21737,21741,21742,0,21747,0,0,0,21749,0,0,0,0,0,0,0,0,0,0,0,0,0,21750,0,0,0,0,
-0,21752,0,0,0,0,21753,0,0,0,0,0,0,21755,21756,0,21757,0,0,0,0,0,0,21760,0,0,
-21763,0,0,0,0,0,0,0,0,0,21764,0,0,21766,0,0,21767,0,0,0,0,0,0,0,0,0,21773,0,
-21774,0,0,21775,0,0,0,0,21776,0,0,21777,0,0,0,0,0,0,0,0,0,21780,21787,21788,
-21791,0,0,0,21797,0,0,0,0,0,21805,0,0,0,0,21806,0,21807,21809,0,21810,21811,0,
-21817,21819,21820,0,21823,0,21824,0,0,21825,0,0,21826,21832,0,0,0,0,0,21833,
-21848,21849,0,0,21867,21870,21871,21873,0,0,0,21874,0,0,0,0,0,0,0,0,0,21875,0,
-21878,0,0,0,21879,0,21881,21886,0,0,0,0,21887,0,0,21888,21894,21895,21897,0,
-21901,0,21904,0,0,21906,0,0,0,21909,21910,21911,0,0,21912,0,0,21913,21914,21915,
-0,21919,0,0,0,0,0,0,0,21921,0,0,21922,21933,21939,0,0,0,0,0,0,0,0,0,0,0,21944,0,
-0,0,0,0,21945,0,21947,0,0,0,0,0,0,0,0,0,0,21949,0,0,0,21950,0,0,0,0,0,0,0,0,0,0,
-0,0,0,21951,0,21952,0,0,0,0,0,0,0,0,0,21954,21957,0,0,0,0,21958,0,21959,0,0,0,0,
-0,0,21962,21963,0,0,0,0,0,0,0,0,21964,21965,0,0,21969,21970,0,0,0,21974,0,0,
-21980,21981,0,21982,0,0,0,0,0,21985,0,21988,0,21992,0,21999,0,0,0,0,0,0,22001,0,
-22002,0,0,0,0,0,0,22003,0,0,0,0,0,22004,0,0,0,22008,0,22009,22015,0,0,22016,0,0,
-0,22017,22019,0,0,0,0,0,0,0,0,0,22020,0,0,0,0,0,0,0,0,0,0,22021,22037,0,22039,0,
-0,0,22040,0,0,0,22048,22049,0,0,22053,22055,22056,22059,0,0,22060,22061,0,0,
-22064,0,0,0,0,22066,0,0,0,0,0,0,0,22073,0,0,0,22074,22075,0,0,0,0,0,0,0,22076,0,
-0,0,0,22077,22084,22099,0,0,0,0,0,0,0,22104,0,0,22107,0,22108,0,22109,0,22110,0,
-0,0,0,0,0,0,22111,22119,0,22120,22122,0,0,0,0,22125,0,0,0,22128,22129,0,0,0,0,0,
-0,22141,0,0,0,22142,0,0,22144,22146,0,22148,22149,22151,22154,0,0,0,22162,0,0,0,
-0,22164,22177,0,0,0,0,22179,0,22182,22183,0,0,22184,22188,0,0,0,0,0,0,0,0,22190,
-0,22194,22201,0,0,22208,0,22209,0,22212,0,0,22215,0,22223,22231,0,0,22232,0,
-22234,0,0,22235,22236,0,22237,0,22240,0,0,0,0,0,22241,0,0,0,22242,22246,22247,0,
-0,0,22259,22268,0,22269,0,0,0,0,0,0,0,22270,0,0,0,0,22271,0,22272,0,22277,0,0,0,
-0,0,22278,22280,22283,22286,0,0,22287,22289,0,0,22290,0,22293,0,0,0,0,0,0,0,0,0,
-0,22295,0,22301,22302,0,0,0,22305,0,22308,0,0,0,0,0,0,0,0,0,0,22315,0,0,0,22317,
-0,22334,0,0,0,22335,0,0,0,0,0,22336,0,22338,22344,0,22347,22349,0,22350,0,0,0,0,
-0,0,0,22357,0,0,0,0,0,22358,0,0,0,0,0,0,0,0,0,0,22359,22360,0,0,0,0,0,0,0,0,
-22361,22366,0,0,22369,0,22370,22373,0,0,0,0,0,22375,0,22377,0,0,0,0,0,22378,0,0,
-0,0,22381,0,0,0,0,22382,0,22383,0,0,0,0,0,0,0,0,0,22391,0,0,22392,22395,22396,
-22402,0,0,0,0,0,0,0,0,0,0,0,0,0,22405,0,0,22406,0,0,22408,0,0,22409,22410,0,0,0,
-0,0,0,22424,0,0,0,0,22426,0,0,0,22427,0,22428,0,22432,0,22435,22442,22443,0,0,0,
-0,22444,0,0,0,0,0,22446,0,22454,0,22455,0,0,0,22465,0,22470,0,22471,0,0,0,0,
-22472,22473,0,22487,0,0,0,22488,0,0,0,0,22489,0,0,22499,0,0,0,0,0,0,22514,0,0,
-22515,0,0,0,0,0,0,0,22516,0,0,0,22517,22520,0,0,0,22534,0,0,22535,0,0,22536,0,
-22540,22553,0,22555,0,0,0,0,22561,0,0,22562,0,0,0,0,0,0,0,0,0,0,0,22566,0,0,0,0,
-22567,22568,0,0,22575,0,22579,0,22582,22583,22585,0,0,0,0,0,22586,0,0,22587,0,0,
-22590,0,0,0,0,0,22591,0,22592,0,0,0,0,0,22593,0,22602,0,0,22604,0,0,22609,0,0,
-22618,0,0,0,0,0,0,22619,0,22624,22625,0,0,22638,0,0,0,0,0,22639,0,0,22640,0,0,0,
-0,0,0,0,22644,0,22645,22647,0,0,0,0,22652,22653,0,0,0,22654,0,22655,0,0,0,22656,
-0,0,0,0,0,0,0,0,0,0,22673,22675,22676,0,0,22678,22679,0,22691,0,0,0,0,0,0,0,
-22693,0,0,22696,0,22699,22707,22708,0,0,0,0,0,0,0,0,22718,0,22719,0,0,0,0,22723,
-0,0,0,22724,22725,0,0,0,0,0,0,0,0,0,0,0,0,0,0,22726,22728,0,0,0,0,0,0,0,0,22729,
-0,0,22731,0,0,0,0,22732,22735,22736,0,0,0,0,22739,0,22749,0,0,22751,0,0,0,0,0,0,
-0,0,0,0,0,22758,0,0,0,0,0,22760,0,0,0,0,0,22764,22765,22766,0,22768,0,0,0,0,0,
-22769,22770,0,0,0,0,0,0,22771,0,0,22772,22775,0,22776,22777,22780,0,0,22782,
-22784,0,22787,0,22789,22796,0,0,0,0,0,22798,0,0,0,0,0,0,22802,0,22803,22804,0,0,
-0,0,0,0,0,0,0,0,22805,0,0,22810,22811,22814,22816,0,22825,22826,0,22831,22833,0,
-0,0,0,0,0,0,0,0,22834,0,22836,22838,0,22839,0,0,0,0,0,22840,0,22847,0,0,0,0,0,
-22856,22857,0,22858,22859,0,0,22862,0,0,22864,0,0,0,0,22865,0,0,0,0,0,0,0,0,0,0,
-0,22866,0,22867,22868,0,0,0,0,22869,0,22871,0,22872,0,22873,22881,22882,22884,
-22885,0,0,0,0,0,0,0,22886,22887,0,22894,0,22895,0,0,0,22900,0,22901,0,0,0,0,
-22904,0,0,0,0,22905,22907,0,0,0,22915,22917,0,0,22918,0,0,0,22920,0,0,0,22929,
-22930,0,0,0,22941,22942,0,0,0,22943,0,0,0,22944,0,0,0,0,0,0,0,22946,0,22947,0,0,
-22954,0,22956,0,0,22962,0,0,0,0,0,0,0,22963,0,0,22964,0,0,0,0,0,0,0,22965,0,
-22968,0,0,0,22969,0,0,0,0,0,22970,0,22971,0,0,0,0,0,22978,0,0,22979,0,22987,0,0,
-22989,0,0,0,0,0,0,22990,0,23005,0,0,0,0,0,0,0,23006,23007,23008,0,0,23023,23024,
-23029,0,0,0,0,23030,0,0,0,0,0,23032,0,0,0,0,0,23035,0,0,0,0,23038,0,0,0,23048,0,
-23049,23052,23053,23060,23061,0,23063,0,0,0,0,23067,23068,0,0,0,23069,23073,0,0,
-0,23127,0,23128,0,0,0,0,0,23129,0,23138,23141,0,23149,0,0,23150,0,0,0,23152,0,0,
-0,0,0,0,0,0,23154,0,0,0,0,23157,23159,23160,0,0,0,0,0,0,0,0,0,0,0,0,23180,0,0,0,
-0,23181,0,0,23188,0,23189,0,0,0,0,0,0,0,0,0,0,0,0,23195,0,0,23196,23199,0,0,0,0,
-0,0,0,0,0,23202,0,23204,0,23207,0,23209,23210,0,0,0,0,0,0,23227,23229,0,0,23230,
-23234,23238,0,0,0,23245,23246,23248,0,0,0,0,23249,23254,0,0,0,23265,0,0,0,0,0,0,
-0,23268,0,23276,0,0,0,0,23277,0,23297,0,23298,0,0,0,0,23299,0,23302,0,0,23303,
-23312,0,0,23314,0,23320,0,0,0,0,23324,0,23325,0,23328,0,23334,0,0,0,23337,0,0,0,
-0,23343,23344,23346,0,23348,0,0,0,0,0,0,0,0,23353,0,0,0,0,23355,0,23356,23358,0,
-0,0,23359,23360,0,23361,0,23367,0,23369,0,0,23373,0,23378,23379,0,23382,23383,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,23387,0,0,0,0,0,0,23388,23390,0,0,23393,23398,0,0,0,
-23399,0,0,0,23400,0,0,0,0,23401,0,0,0,23415,0,0,0,0,0,0,0,0,23416,0,23422,0,
-23443,23444,0,0,0,0,23448,0,23454,0,0,0,0,0,0,23456,0,0,23458,23464,0,0,0,0,0,0,
-23465,0,0,0,23470,23471,0,0,23472,0,0,0,23473,23496,0,0,0,0,0,0,0,0,23497,0,
-23499,0,0,23502,0,0,23503,0,0,23513,0,0,23515,0,0,0,23517,0,0,0,0,23518,23519,
-23521,23524,0,23525,23528,23539,0,0,0,0,0,23541,0,0,23544,0,0,23556,0,0,23557,0,
-0,0,0,0,0,0,0,0,0,0,0,0,23559,0,23560,0,0,23561,0,0,23566,0,0,0,0,0,23568,23569,
-23570,0,0,0,0,23571,0,23574,0,0,0,0,0,0,0,0,0,0,0,23575,0,23579,0,0,23581,0,0,0,
-0,0,0,23587,0,0,0,0,0,0,0,23596,23598,0,0,0,0,23602,23606,0,0,23607,0,23608,0,0,
-0,23614,23616,0,0,0,0,0,23618,0,0,23619,0,0,0,0,23621,23626,0,23627,0,0,0,0,0,0,
-0,23629,0,23630,0,0,0,0,23634,0,23636,0,0,0,0,0,0,23638,0,0,0,0,23640,23667,0,
-23669,0,0,0,23681,0,0,0,0,0,0,0,23682,0,23683,0,0,0,0,0,23684,0,0,0,23685,23689,
-0,23693,23694,23700,0,23702,0,23709,0,0,0,0,0,0,0,23712,0,0,0,0,0,23714,0,0,
-23715,0,0,0,0,23718,0,0,23720,0,0,0,0,23722,0,0,0,23726,23729,0,23741,23746,0,
-23748,0,0,0,0,23749,0,0,0,0,0,23750,0,0,0,0,23751,0,23753,0,0,0,0,23757,23765,0,
-0,0,23770,0,0,0,0,0,0,0,23771,0,23772,23781,0,0,23796,0,0,0,0,23798,0,23799,0,0,
-0,23802,0,0,23806,0,23807,0,0,23808,0,23809,0,23819,0,0,0,23821,0,23827,0,0,0,
-23829,0,0,0,0,0,0,0,23830,0,0,0,0,0,0,23832,23833,23834,23835,0,0,0,0,23837,
-23838,0,0,0,0,0,23846,0,0,0,0,0,0,23847,0,0,0,0,0,23879,23881,0,0,23882,23883,
-23895,0,23899,0,0,0,0,23901,0,0,0,0,0,0,23902,0,0,0,0,0,23903,23905,0,23906,0,
-23907,23918,23919,23920,0,23922,0,23924,0,23927,0,23934,0,23937,23941,0,23942,
-23946,0,0,0,0,0,23955,23956,23958,0,0,0,0,0,0,23959,0,23962,23965,0,23966,0,0,0,
-0,23967,23968,0,0,23973,0,0,23974,0,0,0,0,23975,0,23976,0,0,0,0,0,0,0,0,0,0,0,0,
-0,23977,0,0,0,0,0,0,0,0,23980,0,0,23984,0,23985,0,0,23987,0,0,23988,23990,23991,
-0,0,0,0,0,0,23992,0,0,0,0,0,0,0,0,23994,0,0,0,23998,0,0,0,0,0,0,0,0,0,23999,0,0,
-24003,0,24004,0,24006,0,0,0,24007,0,0,24008,0,0,0,0,0,0,0,24009,0,0,24010,0,0,
-24011,0,0,24013,24014,0,0,24015,24016,24027,0,24028,24029,0,24030,0,0,0,0,0,
-24033,24034,0,24035,0,0,24036,0,0,24044,0,24048,24049,24063,24067,0,24068,24070,
-0,0,24071,24078,24087,0,24090,0,0,0,24095,0,24098,24101,24104,24106,0,24107,0,0,
-0,24108,0,0,0,0,24110,24111,0,24113,0,0,24115,24120,0,0,0,0,0,0,24124,0,24125,0,
-24126,0,24127,0,0,0,0,0,24135,0,0,24136,0,24137,24142,0,0,0,24146,0,0,24147,
-24149,24154,0,24163,0,0,0,24165,24166,24167,0,0,0,0,0,0,0,0,0,0,24169,24170,
-24175,0,0,0,24178,0,0,24179,0,0,24181,0,24184,24197,0,24201,24204,0,0,0,0,0,0,
-24206,24212,24220,0,0,0,24224,0,0,0,0,0,0,0,0,24226,0,24234,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,24235,0,24236,0,0,0,0,0,24239,24240,24241,0,0,24248,0,0,24249,0,
-24251,0,0,0,0,0,0,24253,0,24268,0,0,0,24269,0,24271,24272,0,0,0,0,24273,0,0,
-24274,0,0,24279,0,0,0,0,0,0,0,24280,0,24293,24294,0,0,0,0,0,0,24296,0,0,24323,0,
-0,0,24329,24330,24331,24339,0,24351,0,0,24369,24370,0,0,0,24371,0,0,0,0,24372,
-24373,24374,0,0,0,0,0,24378,0,0,0,0,24379,0,24381,0,24383,24389,0,24390,0,0,
-24394,24395,24400,0,0,0,24401,24402,0,24406,0,0,0,24411,0,0,0,24415,0,24416,0,0,
-0,0,0,24417,0,24419,0,24422,0,24423,24428,0,24435,0,0,0,24439,0,0,0,24440,24442,
-24446,0,0,0,24447,24448,24449,24452,0,0,0,0,24453,24457,0,0,24458,24459,24460,0,
-24465,0,0,0,0,0,0,0,24470,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,24471,0,24473,
-24474,24475,24476,0,24478,0,0,0,0,24480,0,0,0,0,0,0,0,0,0,0,24481,0,0,0,0,0,0,0,
-0,0,0,24482,24485,0,0,0,0,24486,0,0,0,24488,0,0,0,24494,0,0,0,0,24497,0,0,24498,
-0,0,0,24499,24506,0,0,0,24507,0,0,24511,0,0,24513,24514,0,0,0,0,0,24517,0,24518,
-0,24520,0,24521,24524,24525,0,0,0,0,0,24527,0,0,0,0,0,0,0,0,0,0,0,0,0,0,24528,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,24537,24539,0,24540,0,0,0,24548,0,0,0,0,0,24549,
-24550,0,0,0,24553,24554,0,24555,0,24556,0,24558,0,0,0,0,0,24560,0,0,0,24561,0,0,
-0,0,0,24562,0,0,0,0,0,0,0,0,0,0,0,0,0,24567,0,0,0,0,0,24569,0,0,0,24574,0,24575,
-0,0,0,0,0,0,0,0,0,0,0,24577,24581,0,24584,0,0,0,0,0,24585,0,0,0,0,0,24586,0,0,
-24587,0,24588,0,0,0,0,0,0,0,0,0,0,24590,24591,0,0,0,0,24592,0,0,0,0,0,0,0,24594,
-0,0,0,0,0,0,0,24596,24597,0,0,0,0,24602,24603,0,0,0,0,24604,0,0,24605,0,24610,0,
-0,24611,0,0,0,0,24612,24615,24616,24624,0,0,0,24627,0,24638,24639,0,0,0,0,24640,
-0,0,0,24655,24656,24657,0,0,0,0,0,0,0,0,24662,0,24663,24664,0,0,0,0,0,24665,0,0,
-0,0,24667,0,0,0,0,0,0,24668,24669,0,24670,24674,0,0,0,24675,0,24678,0,0,24679,0,
-0,0,24681,0,24683,0,0,0,0,24684,0,24685,0,0,24686,0,0,24688,24689,0,0,0,0,24690,
-24691,0,0,0,0,0,0,0,24697,0,24698,0,0,0,0,0,0,0,0,24709,0,0,0,0,0,24710,0,24712,
-0,0,0,0,0,0,24713,24714,0,24715,0,24716,24718,0,24719,0,0,0,0,24720,0,0,24725,0,
-0,24738,0,24749,24750,0,0,0,24752,0,0,0,24753,0,0,0,24758,0,0,0,0,0,24762,0,
-24763,0,0,0,0,0,0,0,24764,0,0,0,0,0,24765,24767,24768,0,24772,0,0,0,0,24773,0,0,
-0,0,24777,0,0,0,0,0,24785,0,24786,24788,0,0,0,24789,0,0,0,0,24794,24798,0,24799,
-24800,0,0,0,24803,0,24804,24806,0,24807,0,0,0,24810,0,0,0,0,0,0,24827,24828,0,
-24835,0,0,0,0,0,0,24836,0,0,0,0,0,24839,0,24843,24844,0,0,0,0,0,0,0,0,0,0,24847,
-0,0,24848,0,0,0,0,0,0,24849,0,24850,24851,0,0,0,24852,0,24853,0,0,0,0,0,0,0,0,0,
-24854,0,24855,0,0,24868,0,0,0,24883,0,0,0,24884,0,24895,24897,0,0,0,0,0,24899,0,
-0,0,0,0,24900,0,24913,0,0,0,0,0,0,24914,0,0,24917,24930,24931,0,0,0,24932,0,0,
-24939,0,0,24942,0,0,0,0,0,0,0,0,0,24945,24950,0,24951,0,0,24953,0,0,0,24954,0,
-24959,0,0,0,24961,0,0,24962,0,24964,24968,24970,24972,0,0,0,0,0,24976,0,0,0,
-24977,0,24982,0,0,24983,0,0,24984,0,0,0,24993,0,0,0,24994,0,0,25001,0,0,0,25003,
-0,0,25018,0,0,25023,0,0,0,25034,0,0,25035,25036,0,25037,0,0,0,0,0,0,0,25039,0,0,
-0,0,0,25040,0,0,0,0,0,0,0,25042,0,0,25043,25045,0,0,0,0,0,0,25049,0,0,25051,0,
-25052,25053,0,0,25054,0,0,0,25055,0,0,0,0,25057,25059,0,0,25060,25064,0,25065,
-25069,25070,0,0,0,0,25072,0,25073,0,25090,0,0,25092,25093,25101,0,0,0,0,0,0,
-25105,25108,0,0,25113,0,0,25115,25116,0,0,0,0,0,0,25117,0,0,0,25120,25121,0,0,0,
-0,0,0,0,25125,0,0,0,25126,0,25130,25134,0,25139,0,25143,0,0,0,25151,0,25161,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,25163,0,0,0,0,0,0,0,25174,0,25175,0,25207,0,0,
-0,25209,0,0,0,0,25213,0,25219,0,25223,0,25225,0,0,0,25227,0,0,0,25228,0,0,0,
-25229,0,0,0,0,0,0,0,25231,25233,0,0,0,0,25237,25239,0,0,0,25243,0,0,0,25252,0,
-25257,25258,0,0,0,0,25260,25265,0,25268,0,0,25273,25324,0,25325,0,25326,0,0,0,0,
-0,0,0,0,25327,0,0,0,0,0,25328,0,0,0,0,0,0,25332,0,0,0,25333,0,0,0,25336,25337,
-25338,0,0,25343,0,25350,0,0,0,0,0,0,0,25352,0,25354,0,25375,0,25379,0,0,0,0,
-25384,0,0,0,0,0,0,0,0,0,25386,0,25388,0,25390,0,0,25399,0,0,25401,0,0,0,25402,0,
-0,0,25407,0,0,0,0,0,0,0,0,0,0,0,25413,25415,0,0,25417,0,0,0,0,0,0,0,25419,0,0,0,
-25421,0,0,0,25424,0,0,0,0,25433,0,0,0,0,0,0,0,0,0,25435,0,0,0,0,0,0,25436,0,0,0,
-25437,0,0,25440,0,0,0,0,0,0,25442,0,0,25443,0,25446,0,0,25449,0,0,0,25450,0,0,0,
-0,25452,0,25453,25454,25455,0,0,0,25456,0,25457,0,0,0,25459,0,25461,0,25468,0,0,
-0,0,0,0,0,0,25469,0,0,0,0,0,25471,0,0,0,0,0,25474,0,0,0,0,0,0,0,0,25475,0,0,0,0,
-25477,0,0,0,0,25483,0,0,0,0,0,25484,0,0,0,0,0,0,0,0,0,0,0,0,25485,0,25497,0,0,
-25498,0,25504,0,25510,0,25512,0,0,25513,25514,0,0,0,0,0,0,25517,25518,25519,0,
-25520,0,0,0,0,0,0,0,25521,0,25522,25527,25534,0,25536,0,25537,0,0,25548,25550,0,
-0,25551,0,25552,0,0,0,0,0,25554,0,25555,0,25556,25557,25568,0,0,0,25570,25571,0,
-0,0,0,0,0,25574,0,0,0,0,25579,0,0,0,25581,0,0,0,25582,0,0,0,0,0,0,0,0,0,25588,0,
-0,0,0,25589,0,0,0,0,25590,0,25591,25592,25593,0,25594,0,0,0,25596,0,25597,25615,
-0,0,0,0,0,25618,0,0,0,0,25619,25623,0,0,25629,0,0,25631,0,0,0,25635,25636,0,0,
-25649,0,0,0,0,25654,0,0,0,25661,25663,0,0,25671,0,0,25678,25698,0,25699,25702,
-25703,0,0,0,0,0,0,0,0,25704,0,0,0,0,0,25706,0,0,25710,0,25711,0,25712,0,25715,
-25716,25717,0,0,25718,25728,25732,0,0,0,25734,0,0,0,0,0,0,0,0,0,25737,0,0,25739,
-0,0,0,25740,0,25741,25745,0,25746,0,25748,25772,25778,0,0,0,0,0,25780,0,0,0,0,
-25781,0,25782,25784,25785,0,0,0,25789,0,0,0,0,0,0,25797,25801,0,0,0,25808,25809,
-0,0,25811,25814,25815,0,0,25817,0,0,0,0,0,0,0,0,25820,0,0,0,0,25832,25833,0,0,0,
-25846,0,0,0,25847,25848,0,0,0,0,0,0,0,0,0,25849,25850,0,0,25851,0,0,25852,0,
-25862,0,0,0,25863,25865,0,0,0,0,0,0,0,25867,25868,0,25869,25874,0,25875,0,25876,
-25877,0,0,0,0,25878,25902,0,0,0,0,0,0,0,25903,25904,25905,0,0,0,25908,25909,0,0,
-0,0,25910,0,0,0,0,0,0,0,25912,0,25913,0,0,0,0,0,0,0,0,25914,0,0,25916,0,0,0,0,0,
-25917,25927,0,0,0,0,25928,0,0,25930,0,0,0,25933,0,0,25938,25942,0,0,0,0,0,0,0,
-25945,0,25950,0,25956,0,0,25961,25962,0,0,25963,0,25964,25965,25966,0,0,0,0,0,
-25967,0,0,0,0,25968,0,0,0,25969,25971,0,0,0,0,0,25973,25975,0,0,0,0,0,0,0,25978,
-0,25981,0,0,0,25982,0,0,0,25984,0,0,0,0,0,0,0,25993,0,0,0,0,0,0,0,0,0,0,0,0,0,
-26002,0,0,0,26005,0,0,0,26006,26007,0,0,26014,26015,26016,0,0,0,0,0,0,26017,
-26018,26020,0,26022,26023,0,0,0,26024,26028,0,26029,26033,26034,26044,0,0,0,0,0,
-26046,0,0,26047,0,0,26049,0,26050,0,26051,0,0,0,0,0,26053,0,0,0,0,26054,26059,0,
-0,0,0,0,0,26060,0,26066,0,0,0,0,0,0,0,0,0,0,0,0,26067,0,26069,0,0,26071,0,0,0,
-26073,0,26074,26077,0,0,0,0,26078,0,0,0,26079,0,26090,0,0,26094,0,0,0,0,0,0,0,0,
-26095,0,0,0,0,0,0,0,0,0,0,0,26096,26101,0,26107,26122,0,26124,0,0,26125,0,0,0,0,
-0,0,26136,26141,26155,0,0,0,0,0,0,0,0,0,26164,26166,0,0,0,26167,0,26170,26171,0,
-0,26172,0,0,26174,0,0,0,0,0,0,0,0,0,0,0,0,0,26175,0,0,0,26176,26177,0,26321,
-26322,0,26323,0,0,26324,0,0,0,0,0,0,0,26325,0,26331,0,0,0,0,0,0,26335,0,0,0,
-26350,0,0,0,26379,0,0,26382,26383,26385,0,0,26392,26406,0,0,0,0,26411,0,0,0,0,0,
-26412,0,0,26420,0,0,26423,0,26424,26426,26432,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-26435,0,26436,0,0,0,0,0,26441,0,26444,0,0,0,26446,0,0,0,0,26447,0,0,0,0,26449,0,
-26450,26452,0,26453,26454,0,0,0,26455,0,0,0,26456,0,0,26458,0,0,26460,0,26463,0,
-0,0,0,0,0,0,0,26464,26470,0,0,0,0,0,0,0,0,0,26473,0,0,26474,0,0,0,0,0,0,0,26475,
-0,0,0,0,0,0,0,26477,0,26485,0,0,26486,0,26487,0,0,26488,26493,26494,0,0,26495,0,
-26497,26504,26506,0,0,0,0,0,26507,0,0,0,0,0,26509,0,0,26510,0,0,0,0,0,0,0,0,0,0,
-0,0,0,26512,0,26513,26515,0,0,0,26518,0,0,0,26519,0,26524,26526,0,0,0,26527,0,
-26532,0,26533,26537,26558,0,0,0,26559,0,0,0,26571,0,0,26573,0,26588,0,26593,0,0,
-0,0,0,0,26603,0,26604,0,0,0,0,0,0,0,0,0,0,26606,0,0,0,0,0,0,0,26607,26609,26611,
-26614,0,0,0,26616,26620,0,26621,0,0,0,0,0,26627,0,26629,0,0,26630,0,0,26632,
-26643,0,0,0,26644,0,0,0,0,0,0,0,0,0,26646,26647,0,0,0,26650,0,0,26656,0,0,0,0,
-26663,26670,26671,0,0,0,26685,26686,26687,0,26689,0,0,0,0,26744,0,26745,0,26747,
-26748,0,26749,26750,26751,0,0,0,0,26752,26755,0,0,0,26756,26769,0,0,0,26774,0,0,
-0,0,0,26775,0,26777,26778,0,26786,0,0,0,26787,0,0,0,0,0,0,0,0,0,0,0,0,0,26788,0,
-0,26789,0,0,0,0,0,26791,0,26792,26793,0,0,0,26794,0,26797,26798,0,0,0,26800,0,0,
-26803,0,26804,0,0,0,0,0,0,0,0,0,26805,0,0,26808,0,0,26809,0,0,0,0,0,0,0,26812,0,
-26825,0,0,0,0,0,0,0,26826,0,0,26827,26829,26834,0,0,0,0,26835,0,0,26849,0,26851,
-0,0,0,0,0,0,0,0,0,26852,0,26853,26857,0,26858,0,26859,0,0,0,0,0,0,0,26876,0,
-26878,26882,26883,0,0,0,0,26890,26894,0,0,0,0,26895,26896,0,0,0,0,0,26900,0,0,0,
-0,0,0,0,26911,26913,26914,26915,26916,26919,0,0,0,26921,26922,0,0,26925,0,0,0,
-26928,0,0,26929,26930,0,0,0,26931,0,26932,0,0,0,0,0,26933,0,0,0,0,0,0,26937,0,0,
-26943,0,0,26944,0,0,0,26946,0,0,0,0,0,0,0,26956,0,26958,0,0,26963,0,0,0,0,0,0,0,
-26965,0,26969,26970,26972,0,0,0,0,0,26973,0,26974,0,26978,0,26980,0,0,0,0,0,0,
-26982,0,26986,26987,0,26990,0,0,0,0,27003,27006,0,0,27007,27010,27012,27013,0,0,
-0,0,0,0,0,0,27014,27015,27018,0,27019,0,0,0,0,0,27025,0,0,0,27026,0,0,0,0,27029,
-27030,27031,27034,0,0,27036,27037,0,0,0,27038,27042,0,0,0,27044,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,27045,0,0,0,0,0,0,0,27046,0,0,0,0,0,0,0,27047,27049,0,27050,0,0,0,
-27051,27052,0,27055,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,27056,27058,27059,0,
-27061,0,27064,0,0,0,0,0,27069,0,0,27070,0,0,0,0,0,0,0,27072,0,0,0,0,0,0,0,0,
-27076,0,0,0,0,0,27078,0,27079,0,0,0,27081,0,0,0,0,0,0,27082,0,27083,27086,0,0,0,
-0,27087,0,0,0,0,0,27088,27090,0,27094,0,0,27095,0,27099,27102,0,0,0,27103,0,0,0,
-0,27105,0,0,0,27106,0,0,0,0,0,0,27107,0,0,0,0,27108,27117,0,0,0,0,27118,0,0,
-27124,0,27126,0,0,27130,27131,0,0,0,0,0,0,27147,0,0,0,0,27148,27149,0,0,0,0,
-27150,27151,0,27152,0,27159,0,0,0,27164,0,0,0,0,0,0,0,27175,0,27189,0,0,27191,0,
-27193,0,27195,0,27198,0,0,0,0,0,27200,0,0,0,0,27202,0,0,0,0,27203,0,0,27204,0,0,
-27206,0,27207,0,0,0,0,27209,0,0,0,27213,0,0,27216,27219,27220,27222,27223,0,
-27224,0,27225,27226,0,0,27233,0,0,0,0,27235,0,27237,0,27238,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,27239,0,27242,27243,0,27250,0,0,0,27251,0,27253,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,27254,27255,27258,0,0,0,27259,0,0,0,0,0,0,27267,0,27276,27278,
-0,0,0,0,0,0,0,0,0,27296,27297,27301,0,0,0,0,0,0,27302,0,0,0,0,0,0,27312,27313,0,
-0,0,0,0,27318,0,27320,0,27329,0,27330,27331,0,27332,0,0,0,0,27340,0,0,0,27348,0,
-0,0,0,0,0,27350,0,27351,0,0,0,0,27355,0,0,27358,27359,27361,0,0,0,27365,0,27367,
-0,27376,27378,0,0,27379,0,0,0,0,0,0,27396,0,27397,27404,0,0,0,0,0,27408,0,0,0,0,
-27453,0,0,0,27456,0,0,0,27458,0,0,0,0,0,0,0,27459,0,0,0,27460,0,0,27461,0,27465,
-27467,0,0,27469,0,27470,0,27471,0,27477,27482,0,0,0,0,0,0,27484,0,0,0,0,0,0,
-27485,0,0,0,0,0,27493,0,27494,27502,0,0,0,0,0,0,0,0,0,0,0,0,27511,27532,0,0,0,
-27533,27545,0,0,0,27546,0,0,0,0,0,0,0,0,0,0,27547,0,0,27549,27550,0,27551,0,0,0,
-0,0,0,0,27555,0,0,27571,0,27573,27574,27575,27577,0,27578,0,0,27579,27585,0,0,0,
-0,0,27586,0,0,27588,27589,0,0,0,0,27596,0,0,27600,0,0,0,0,0,0,0,0,0,0,0,27608,0,
-0,0,0,0,0,0,0,0,0,0,27610,0,0,0,27618,0,0,27620,0,0,0,27631,0,0,27632,27634,0,
-27636,27638,0,0,0,27643,0,27644,27649,0,0,0,0,0,0,0,0,0,0,0,0,0,27651,27660,0,
-27661,0,0,0,0,0,0,0,27662,0,0,27664,0,27665,0,0,0,27669,0,27671,0,0,0,27673,
-27674,0,0,0,27682,0,0,0,27711,0,27712,27713,27719,27720,0,0,27728,0,27729,0,0,0,
-0,0,0,0,0,0,27731,0,0,27732,0,27733,0,27738,0,0,0,27742,0,0,0,27743,27744,0,0,0,
-0,0,0,27745,27746,0,0,0,27747,27748,27751,27752,0,0,0,27768,27770,0,0,0,27774,
-27775,0,27776,27777,0,0,27781,0,27784,0,27786,0,0,27791,0,27792,27793,27804,0,
-27812,27813,0,0,0,0,0,0,0,0,27814,0,27825,0,27827,0,0,0,0,27828,27861,27862,0,0,
-0,27864,0,0,0,27865,27884,0,27889,0,0,0,0,0,27890,0,27891,0,0,0,27892,0,0,0,0,0,
-27897,27898,0,0,27899,0,0,0,27901,27905,0,0,27920,0,0,27921,0,27922,0,0,0,27931,
-27934,0,0,0,0,0,0,0,0,0,0,27941,0,27942,0,27945,0,27947,27954,0,0,0,0,27960,
-27963,0,0,0,0,0,0,0,0,27964,27965,0,0,0,27967,0,27969,27975,0,27976,27977,0,
-27981,0,27983,28051,28052,0,0,0,0,0,28056,0,0,0,0,0,0,28058,28059,0,0,28061,0,0,
-0,0,0,0,0,28063,0,0,0,0,0,0,28066,0,0,0,0,0,0,28069,28070,28072,0,28073,0,0,
-28074,0,0,0,0,28075,0,0,0,0,0,0,0,28078,0,0,0,0,28085,0,0,0,0,28086,0,0,0,0,0,0,
-28088,0,0,0,0,0,0,0,0,28090,0,28097,28114,28115,0,0,0,0,0,0,0,28116,0,0,0,0,0,
-28118,0,28129,0,28131,0,0,28135,0,0,0,28140,28141,0,0,0,28146,0,0,0,0,28152,0,0,
-0,0,28155,28157,28161,0,0,0,0,28166,0,28167,0,0,0,0,0,0,0,0,0,0,0,28172,0,0,0,0,
-0,0,28173,0,0,28175,0,0,0,0,0,0,0,0,0,28178,28188,0,28190,0,0,0,0,0,28191,0,
-28193,28206,0,0,28207,28209,0,28211,0,28213,0,0,0,28215,28216,28217,0,28222,0,
-28223,28225,0,0,0,28226,0,28227,28229,28232,0,0,0,0,0,0,0,0,0,28235,0,28241,0,0,
-28242,0,0,0,0,28243,0,0,0,28245,0,0,0,28248,28250,0,28251,28252,0,0,0,0,0,0,
-28253,0,0,28254,28255,0,0,28256,0,0,28258,0,0,0,0,0,28259,0,0,28260,0,0,28261,0,
-0,0,0,28262,28263,0,0,28264,0,0,0,28266,0,28268,28269,0,28270,28272,28274,0,
-28277,28278,0,0,0,28279,0,28280,28281,28283,0,28292,0,28294,0,28297,0,0,0,0,
-28299,0,0,0,0,0,28300,0,0,0,0,0,0,0,28301,0,0,0,0,0,0,0,0,0,0,0,0,0,28302,28303,
-0,0,0,0,28304,0,0,28305,0,28312,0,28313,28314,0,0,0,0,0,0,28315,0,0,0,28320,
-28321,0,0,28328,0,0,0,28329,28338,0,28339,0,0,28344,0,0,0,0,0,0,0,0,28347,0,0,0,
-0,0,0,0,0,28348,0,0,0,0,0,28411,0,28412,28413,0,28416,0,0,0,28420,0,0,0,0,0,
-28421,0,0,0,0,28423,0,0,0,28424,0,0,28428,0,0,0,0,0,28429,0,0,0,28431,28434,0,
-28458,0,0,0,0,0,0,0,0,0,0,0,28464,0,0,0,0,28465,0,28467,0,0,0,0,0,0,28471,0,0,0,
-0,28474,0,28480,0,28481,0,0,28485,0,0,0,0,28486,28488,0,0,28489,0,0,0,0,28492,0,
-0,0,28495,0,28497,0,28499,0,0,0,0,28500,0,0,28502,28503,0,0,0,28508,0,0,0,28510,
-0,0,28512,28513,28514,28521,0,28526,0,28527,28528,0,0,0,0,28529,0,0,28532,0,0,
-28537,28538,0,0,0,28539,0,28548,0,28553,28554,0,0,0,0,0,0,0,0,0,0,0,0,28560,
-28563,0,0,28564,0,0,0,0,28565,0,0,0,0,0,0,0,28566,28568,0,0,0,0,0,0,28569,0,0,0,
-28570,0,28572,28573,0,0,0,0,28575,0,0,0,0,28576,28581,28588,0,0,28589,0,0,0,
-28590,28595,0,28598,0,0,28601,0,0,28605,0,0,0,0,28614,28615,28619,0,0,0,0,0,0,
-28620,0,28626,0,0,28628,0,28631,0,28632,0,0,0,0,0,0,28635,0,0,0,28637,28638,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,28639,0,28643,0,0,28652,0,0,0,28662,0,
-28670,28671,0,0,0,0,0,0,0,0,0,28672,28673,28675,28676,0,0,0,0,0,0,0,28691,0,0,0,
-28695,0,0,0,28696,0,28697,28698,0,28705,0,28707,28708,28710,0,0,0,0,0,0,0,28711,
-28728,0,0,0,28736,0,0,0,28737,0,0,0,0,0,0,0,0,0,28738,0,28739,0,28741,0,0,28742,
-0,0,0,0,0,0,0,0,0,0,0,28745,0,0,0,0,0,0,28749,28750,28752,28754,28756,0,28757,0,
-0,0,0,28759,28760,0,0,0,0,0,0,28762,0,0,0,28764,0,0,0,0,0,0,28766,0,28767,28768,
-0,0,0,0,28769,28770,0,0,0,0,0,0,0,0,0,0,0,0,0,28771,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,28772,0,28773,0,28782,0,0,0,0,0,0,28784,0,28785,0,28786,0,0,0,28787,0,0,0,
-28797,0,0,0,0,0,0,28799,0,0,28801,0,0,0,0,28802,0,28805,0,0,28806,0,0,28807,0,0,
-0,0,0,0,0,28808,0,0,0,0,0,28810,28812,0,0,28816,28819,0,0,28821,0,28826,0,0,0,
-28842,28852,0,0,28853,0,28854,28855,0,0,0,28857,0,0,0,28858,0,28867,28868,28869,
-0,0,0,28874,28880,28882,28890,28892,0,0,0,0,0,0,0,28895,0,0,0,28898,28899,0,0,0,
-28900,0,0,28904,0,28906,0,0,0,0,28907,0,0,0,0,0,0,28908,0,0,0,28910,0,28914,0,0,
-0,0,0,0,0,28915,28916,28919,0,0,28920,0,28921,0,0,0,0,0,0,0,0,28924,0,0,0,0,
-28926,28929,0,0,0,28930,0,28936,0,28939,0,0,0,0,28942,0,0,0,0,0,0,28956,0,0,0,
-28966,0,0,0,0,28967,0,0,0,0,0,0,0,0,0,28968,0,28971,0,28975,28976,0,28982,28983,
-0,0,28984,28989,28996,28997,28998,0,0,0,0,0,0,28999,0,0,0,0,0,29000,0,29001,0,0,
-0,29009,0,0,29011,0,0,29021,0,0,0,0,29024,0,29025,0,0,0,0,0,29026,0,0,0,29036,0,
-0,0,29037,0,0,0,0,29038,0,29045,0,29047,0,0,0,0,0,0,0,0,0,29051,0,0,0,29054,
-29056,29062,0,29070,29082,0,0,0,29083,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,29084,0,0,
-0,0,29085,29088,0,0,0,0,0,0,0,29090,29097,0,0,0,29103,0,0,0,0,0,0,0,0,29105,0,0,
-0,0,0,29107,0,29109,0,0,0,29115,0,0,29120,0,0,29138,29140,0,0,0,0,0,0,0,0,0,
-29152,0,29160,29174,0,29176,0,0,29180,0,29181,0,0,0,0,0,0,0,0,29228,0,0,29229,0,
-0,29230,0,0,0,0,0,0,0,0,0,0,29234,0,0,0,29241,0,29245,0,29248,0,29250,29256,
-29280,0,29282,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,29285,0,0,29286,29291,29292,0,0,0,0,
-29294,0,29295,0,0,0,0,0,29296,29297,29298,29300,0,29302,0,0,29304,29307,0,29312,
-0,0,0,29322,0,0,29323,0,0,29324,29326,29328,0,29335,0,0,0,0,0,0,0,29338,29339,0,
-0,0,0,0,29341,29343,0,0,0,0,29344,0,0,0,0,0,29345,0,0,0,0,29346,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,29347,29348,29349,0,0,29354,0,0,29355,0,0,0,0,0,0,0,0,29357,0,0,
-0,0,29364,0,29365,0,0,0,0,0,0,0,29366,0,0,29368,0,0,0,0,0,0,0,0,29378,0,29381,0,
-0,0,0,0,0,0,0,29386,0,0,0,0,0,0,29389,0,0,0,29390,0,0,29391,29397,0,29398,29412,
-29414,29418,29419,0,0,0,0,0,0,0,29420,0,0,0,0,0,0,0,29423,0,0,0,29435,0,0,0,
-29437,0,0,29439,0,29441,0,0,0,0,29443,0,29446,29450,29452,0,0,0,0,0,29456,0,0,0,
-0,0,29461,0,0,0,29464,0,0,0,0,0,0,0,0,29468,0,29473,0,0,0,29486,0,0,0,29490,0,0,
-0,29491,29492,0,0,29497,0,0,0,29498,0,29499,0,29502,29505,0,29509,0,0,0,29510,0,
-0,0,29512,0,0,0,29516,0,0,0,0,0,0,0,0,29518,0,29519,0,0,0,0,0,29520,29521,29529,
-0,0,0,0,0,0,0,0,29530,0,0,29531,29538,0,29540,0,0,0,29542,0,29543,29544,29547,0,
-0,29548,0,0,0,29549,0,0,0,29550,0,0,29552,0,0,0,0,29558,29561,0,29562,29564,0,0,
-29565,0,0,29566,0,0,0,0,0,0,0,0,0,0,29578,29584,29586,29591,0,0,0,0,29593,29594,
-0,0,29597,0,0,29613,0,29614,0,29615,0,0,0,0,29616,29617,0,0,29625,0,0,0,29632,0,
-0,0,0,0,0,0,29633,0,0,0,0,0,29634,29635,29637,0,29638,0,29641,29643,0,0,0,0,0,0,
-29644,0,29645,0,29649,0,0,0,29650,0,29653,0,0,0,0,0,0,0,0,0,0,0,0,0,0,29656,
-29659,0,0,29660,0,0,0,29661,0,0,0,0,0,29664,0,0,0,29671,29673,0,0,0,0,0,0,0,
-29675,0,29677,29679,0,0,29684,0,0,0,0,0,29685,0,0,0,29687,0,0,0,29688,0,29689,
-29690,29700,0,29701,0,0,0,29702,0,29706,0,0,0,0,0,0,0,29720,0,29721,0,29727,0,
-29733,29734,0,29750,29761,0,29763,0,0,0,0,0,29764,0,0,29765,0,0,0,29771,0,0,0,0,
-0,0,0,0,0,0,0,0,29772,0,0,0,29773,29774,29775,0,0,0,0,0,0,0,0,0,0,0,29822,0,0,0,
-29824,0,29825,0,0,0,0,0,29827,0,0,0,0,0,0,0,0,29829,0,29832,29834,0,0,29835,0,0,
-29837,29838,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,29843,0,0,0,0,29844,29845,0,0,0,
-0,0,0,0,0,0,29849,0,0,29869,29872,29890,29905,0,0,0,0,0,29907,29921,0,29922,0,0,
-29923,29926,29944,29946,0,0,0,0,0,0,0,29947,29948,0,0,0,29951,0,0,0,0,0,29953,0,
-0,29956,0,29957,0,0,29962,0,0,0,0,29971,0,0,0,29972,0,0,0,0,0,29978,0,29979,
-29992,30007,30008,30010,0,0,0,30013,0,0,0,0,30014,30016,0,0,0,0,0,0,0,0,0,0,0,
-30017,0,0,0,0,0,30023,30031,0,0,30033,0,0,0,0,0,0,0,0,0,0,30034,0,30038,0,30039,
-0,30040,0,0,0,0,0,0,30067,30068,0,0,0,30069,0,30072,0,0,0,30073,0,0,0,0,30075,0,
-0,0,0,0,0,30079,0,0,30080,0,0,0,0,0,30082,0,0,0,0,0,0,0,0,0,0,0,30084,30090,0,0,
-30091,0,0,0,0,30098,30118,0,30119,0,30121,30130,0,0,0,0,0,0,0,0,0,0,0,0,0,30131,
-30132,30133,0,0,0,0,0,0,30135,0,0,0,0,0,0,0,0,0,0,0,30136,0,0,30137,30138,0,0,0,
-30139,30146,0,0,0,0,0,30147,0,0,30148,30151,0,0,0,30168,0,30172,30173,0,0,0,0,0,
-0,0,0,30180,30181,0,30192,0,0,0,0,0,0,0,30194,30196,0,0,30199,0,0,30202,0,0,0,0,
-30203,0,0,0,0,0,0,0,0,0,0,30213,0,0,0,30216,0,0,30217,0,0,0,30218,0,0,0,0,30219,
-0,30220,0,30222,30227,0,0,0,0,0,30231,0,0,30233,30235,0,0,0,0,30238,0,30240,
-30243,30245,0,30250,30252,0,0,0,30269,0,0,30271,30272,0,0,0,30278,30280,0,0,
-30282,0,30284,0,30294,0,0,0,0,30295,30296,0,0,0,0,0,30298,30299,30302,30304,
-30306,0,0,0,0,0,0,30316,30317,0,0,0,30318,0,0,0,30319,0,30320,30322,30326,0,0,0,
-0,0,30327,0,30332,30348,30349,0,0,30356,0,0,0,0,0,0,0,0,30357,0,30358,0,30359,
-30360,0,0,30365,30366,30378,0,0,0,0,30379,0,0,30381,0,30385,0,30388,30397,0,0,0,
-30401,0,0,0,0,30403,0,0,0,0,0,30404,0,0,30405,0,30406,30408,0,30409,0,30410,0,0,
-0,30417,0,0,30418,30419,0,30420,0,30424,0,0,0,30427,30430,30432,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,30433,0,0,0,0,0,0,0,30436,0,30437,30438,0,30441,30442,0,0,
-0,30445,0,0,0,0,30452,30456,30457,0,0,0,30458,0,30464,0,0,0,0,0,0,30467,0,30469,
-0,0,0,0,0,30477,0,0,30484,0,0,0,0,0,30485,0,0,0,0,0,30486,30487,30497,30498,0,0,
-0,0,0,0,0,0,0,0,30505,0,30508,0,0,0,30509,30510,0,30514,30516,0,0,0,0,0,0,0,0,0,
-0,0,30523,0,30524,0,30525,0,0,0,0,30537,0,0,30538,0,0,0,0,0,30553,0,0,30555,
-30556,30558,30559,30560,0,0,30561,0,30562,0,0,0,0,0,0,0,0,30563,30570,30571,0,
-30586,30587,0,0,30590,0,0,30594,0,0,0,0,30611,30612,30623,30634,0,0,30636,30640,
-30655,30656,0,30657,0,0,30658,30669,0,30670,0,30676,30678,0,0,0,0,0,0,0,30679,0,
-0,0,0,0,0,0,0,0,0,0,30695,0,0,30698,0,0,0,0,30700,0,0,0,0,30701,0,30702,30703,0,
-0,0,0,30707,0,0,0,30709,0,0,30710,30719,30729,0,0,0,0,0,0,0,0,0,30731,0,0,30733,
-0,0,0,30734,0,0,0,0,0,30736,30737,0,0,0,30740,0,0,0,30743,0,30746,0,30747,30748,
-0,0,30751,30752,30753,0,0,0,30754,0,0,30760,0,0,0,0,0,0,0,30763,0,30764,0,0,
-30766,0,30769,30770,30771,30774,30777,0,0,30779,30780,30781,0,0,0,0,30790,0,0,0,
-30792,0,0,0,0,30810,0,0,0,0,0,0,0,30812,30819,0,0,30823,30824,0,30825,0,30827,0,
-0,0,0,0,0,30828,0,0,30830,0,0,0,30834,0,30835,0,30837,30838,0,30845,0,0,0,0,0,
-30846,30847,0,0,30849,0,30851,0,0,0,0,0,30852,30858,0,0,30859,0,30865,0,0,30866,
-0,0,30868,0,0,30869,0,0,0,30881,30883,0,0,0,0,0,30889,0,30891,0,0,0,0,30894,0,
-30895,0,30897,0,30898,0,0,0,30904,30906,0,30909,0,0,0,0,0,0,30910,0,0,0,30915,
-30933,30942,0,0,0,0,30943,0,0,30945,0,0,0,0,0,0,30946,0,0,30947,0,0,30955,30956,
-0,0,30960,0,0,30961,30962,30966,0,0,30969,30974,0,0,0,30976,0,0,30977,0,30978,
-30982,0,0,0,0,0,0,0,30994,30995,30998,0,31000,0,0,31001,0,0,31003,31005,0,0,
-31006,31011,0,0,31014,0,31016,0,0,0,0,31018,0,0,31020,31023,31024,31025,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,31027,31028,31029,0,0,0,0,0,0,31032,0,0,0,0,0,0,0,0,0,0,0,
-31036,31037,31038,0,0,0,31041,31043,31045,0,31047,0,0,0,31048,0,31049,0,0,0,
-31053,31054,31055,0,0,31063,0,0,0,0,0,31066,0,31068,31071,0,0,0,31072,31073,0,0,
-0,0,31075,0,0,31076,0,0,0,31077,31079,0,31080,0,0,0,0,0,0,0,0,0,0,31087,0,31142,
-0,31144,0,0,31145,31146,31147,0,0,0,0,0,0,0,0,0,0,0,0,0,0,31149,0,31151,31152,0,
-0,0,0,0,0,0,31162,31171,31174,31175,0,0,0,31176,0,0,0,0,0,0,0,31179,0,0,0,31186,
-0,0,0,31192,31195,0,0,31196,0,0,0,0,0,0,0,0,31198,0,0,0,0,0,31199,0,0,0,31205,0,
-0,0,0,31211,31215,0,0,0,0,31231,0,31232,0,0,0,0,0,0,0,0,0,0,31233,31236,31253,0,
-31254,0,0,0,0,0,0,31255,0,0,31257,0,0,0,0,0,0,0,0,0,31258,31259,0,0,31260,0,
-31261,0,0,0,0,0,31262,31263,0,0,31264,0,31266,0,31267,0,0,0,0,0,31281,0,31282,0,
-31284,0,0,31285,31287,31288,0,0,31290,0,0,0,31292,31295,0,31299,0,31300,0,0,0,0,
-0,31302,0,0,0,0,31303,0,0,0,0,0,0,31304,0,0,0,0,0,31305,31308,31309,31315,0,
-31317,0,0,0,0,0,31323,0,31324,0,0,0,0,0,31325,31327,0,0,31331,0,0,0,0,0,31333,0,
-0,0,0,0,31336,0,0,31337,0,0,0,0,0,0,31338,0,0,0,0,0,0,0,0,0,0,0,0,31339,0,0,0,0,
-0,0,0,31342,0,0,0,0,31345,0,0,0,0,0,0,0,0,31347,0,0,0,0,0,0,31348,0,0,31350,
-31351,0,31352,0,0,31354,0,0,0,0,31355,0,0,31356,0,0,0,0,0,0,0,0,0,0,31363,0,
-31372,0,0,31373,0,0,0,0,0,0,0,0,0,31376,0,31388,0,31389,0,31392,0,31401,0,31405,
-31407,31408,0,31409,0,0,0,0,0,0,31413,31415,0,0,0,31416,31418,0,0,0,0,0,0,31422,
-31423,0,0,31424,0,31425,31432,0,0,0,0,0,0,0,0,0,31433,0,0,0,0,0,0,0,0,31434,0,0,
-0,0,0,0,31435,0,0,0,0,31438,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,31442,0,31444,0,
-31448,0,0,31451,0,0,0,0,31452,0,31461,31465,0,0,31466,0,0,31467,0,0,31468,0,0,0,
-31469,31473,0,31476,0,0,0,0,31489,31490,0,0,0,0,0,0,0,31492,31493,31494,0,0,0,0,
-31501,31504,31505,0,0,0,0,0,0,0,0,0,31509,0,0,0,0,31510,0,0,31511,0,0,31513,0,0,
-0,0,0,0,0,0,0,31514,0,31522,31536,31539,31540,0,31541,0,0,0,0,0,0,31546,31553,
-31559,0,0,0,31560,31561,31562,0,0,31564,31567,0,31569,0,0,0,31570,0,0,0,0,31571,
-0,0,0,0,0,0,31572,31574,31580,31581,0,0,31582,31584,31585,31586,31595,0,31596,0,
-0,0,0,31597,0,31599,0,31600,31601,0,0,31603,31604,0,0,31608,31610,0,0,0,31611,0,
-31615,0,0,0,0,31616,0,0,0,0,0,0,31617,0,0,0,0,0,31618,0,0,0,0,0,0,31621,0,0,0,0,
-0,0,0,0,0,31622,31625,0,0,0,0,31627,0,31641,0,0,31642,0,0,31643,0,0,0,0,0,0,0,0,
-0,31644,0,31646,0,0,0,0,31648,0,0,0,31652,0,0,0,31657,0,0,31676,0,0,0,0,0,0,0,
-31689,31691,31692,0,31694,0,0,0,31696,0,31702,0,31703,0};
-
-static const DictWord kStaticDictionaryWords[31705] = {
-{0,0,0},{8,0,1002},{136,0,1015},{4,0,683},{4,10,325},{138,10,125},{7,11,572},{9,
-11,592},{11,11,680},{11,11,842},{11,11,924},{12,11,356},{12,11,550},{13,11,317},
-{13,11,370},{13,11,469},{13,11,471},{14,11,397},{18,11,69},{146,11,145},{134,0,
-1265},{136,11,534},{134,0,1431},{11,0,138},{140,0,40},{4,0,155},{7,0,1689},{4,10
-,718},{135,10,1216},{4,0,245},{5,0,151},{5,0,741},{6,0,1147},{7,0,498},{7,0,870}
-,{7,0,1542},{12,0,213},{14,0,36},{14,0,391},{17,0,111},{18,0,6},{18,0,46},{18,0,
-151},{19,0,36},{20,0,32},{20,0,56},{20,0,69},{20,0,102},{21,0,4},{22,0,8},{22,0,
-10},{22,0,14},{150,0,31},{4,0,624},{135,0,1752},{5,10,124},{5,10,144},{6,10,548}
-,{7,10,15},{7,10,153},{137,10,629},{6,0,503},{9,0,586},{13,0,468},{14,0,66},{16,
-0,58},{7,10,1531},{8,10,416},{9,10,275},{10,10,100},{11,10,658},{11,10,979},{12,
-10,86},{14,10,207},{15,10,20},{143,10,25},{5,0,603},{7,0,1212},{9,0,565},{14,0,
-301},{5,10,915},{6,10,1783},{7,10,211},{7,10,1353},{9,10,83},{10,10,376},{10,10,
-431},{11,10,543},{12,10,664},{13,10,280},{13,10,428},{14,10,128},{17,10,52},{145
-,10,81},{4,0,492},{133,0,451},{135,0,835},{141,0,70},{132,0,539},{7,11,748},{139
-,11,700},{7,11,1517},{11,11,597},{14,11,76},{14,11,335},{148,11,33},{6,0,113},{
-135,0,436},{4,10,338},{133,10,400},{136,0,718},{133,11,127},{133,11,418},{6,0,
-1505},{7,0,520},{6,11,198},{11,10,892},{140,11,83},{4,10,221},{5,10,659},{5,10,
-989},{7,10,697},{7,10,1211},{138,10,284},{135,0,1070},{5,11,276},{6,11,55},{135,
-11,1369},{134,0,1515},{6,11,1752},{136,11,726},{138,10,507},{15,0,78},{4,10,188}
-,{135,10,805},{5,10,884},{139,10,991},{133,11,764},{134,10,1653},{6,11,309},{7,
-11,331},{138,11,550},{135,11,1861},{132,11,348},{135,11,986},{135,11,1573},{12,0
-,610},{13,0,431},{144,0,59},{9,11,799},{140,10,166},{134,0,1530},{132,0,750},{
-132,0,307},{133,0,964},{6,11,194},{7,11,133},{10,11,493},{10,11,570},{139,11,664
-},{5,11,24},{5,11,569},{6,11,3},{6,11,119},{6,11,143},{6,11,440},{7,11,295},{7,
-11,599},{7,11,1686},{7,11,1854},{8,11,424},{9,11,43},{9,11,584},{9,11,760},{10,
-11,148},{10,11,328},{11,11,159},{11,11,253},{11,11,506},{12,11,487},{12,11,531},
-{144,11,33},{136,10,760},{5,11,14},{5,11,892},{6,11,283},{7,11,234},{136,11,537}
-,{135,11,1251},{4,11,126},{8,11,635},{147,11,34},{4,11,316},{135,11,1561},{6,0,
-999},{6,0,1310},{137,11,861},{4,11,64},{5,11,352},{5,11,720},{6,11,368},{139,11,
-359},{4,0,75},{5,0,180},{6,0,500},{7,0,58},{7,0,710},{10,0,645},{136,10,770},{
-133,0,649},{6,0,276},{7,0,282},{7,0,879},{7,0,924},{8,0,459},{9,0,599},{9,0,754}
-,{11,0,574},{12,0,128},{12,0,494},{13,0,52},{13,0,301},{15,0,30},{143,0,132},{
-132,0,200},{4,10,89},{5,10,489},{6,10,315},{7,10,553},{7,10,1745},{138,10,243},{
-135,11,1050},{7,0,1621},{6,10,1658},{9,10,3},{10,10,154},{11,10,641},{13,10,85},
-{13,10,201},{141,10,346},{6,11,175},{137,11,289},{5,11,432},{133,11,913},{6,0,
-225},{137,0,211},{7,0,718},{8,0,687},{139,0,374},{4,10,166},{133,10,505},{9,0,
-110},{134,10,1670},{8,0,58},{9,0,724},{11,0,809},{13,0,113},{145,0,72},{6,0,345}
-,{7,0,1247},{144,11,82},{5,11,931},{134,11,1698},{8,0,767},{8,0,803},{9,0,301},{
-137,0,903},{139,0,203},{134,0,1154},{7,0,1949},{136,0,674},{134,0,259},{135,0,
-1275},{5,11,774},{6,11,1637},{6,11,1686},{134,11,1751},{134,0,1231},{7,10,445},{
-8,10,307},{8,10,704},{10,10,41},{10,10,439},{11,10,237},{11,10,622},{140,10,201}
-,{136,0,254},{6,11,260},{135,11,1484},{139,0,277},{135,10,1977},{4,10,189},{5,10
-,713},{6,11,573},{136,10,57},{138,10,371},{132,10,552},{134,11,344},{133,0,248},
-{9,0,800},{10,0,693},{11,0,482},{11,0,734},{11,0,789},{134,11,240},{4,0,116},{5,
-0,95},{5,0,445},{7,0,1688},{8,0,29},{9,0,272},{11,0,509},{11,0,915},{4,11,292},{
-4,11,736},{5,11,871},{6,11,171},{6,11,1689},{7,11,1324},{7,11,1944},{9,11,415},{
-9,11,580},{14,11,230},{146,11,68},{7,0,490},{13,0,100},{143,0,75},{135,0,1641},{
-133,0,543},{7,11,209},{8,11,661},{10,11,42},{11,11,58},{12,11,58},{12,11,118},{
-141,11,32},{5,0,181},{8,0,41},{6,11,63},{135,11,920},{133,0,657},{133,11,793},{
-138,0,709},{7,0,25},{8,0,202},{138,0,536},{5,11,665},{135,10,1788},{145,10,49},{
-9,0,423},{140,0,89},{5,11,67},{6,11,62},{6,11,374},{135,11,1391},{8,0,113},{9,0,
-877},{10,0,554},{11,0,83},{12,0,136},{19,0,109},{9,11,790},{140,11,47},{138,10,
-661},{4,0,963},{10,0,927},{14,0,442},{135,10,1945},{133,0,976},{132,0,206},{4,11
-,391},{135,11,1169},{134,0,2002},{6,0,696},{134,0,1008},{134,0,1170},{132,11,271
-},{7,0,13},{8,0,226},{10,0,537},{11,0,570},{11,0,605},{11,0,799},{11,0,804},{12,
-0,85},{12,0,516},{12,0,623},{13,0,112},{13,0,361},{14,0,77},{14,0,78},{17,0,28},
-{19,0,110},{140,11,314},{132,0,769},{134,0,1544},{4,0,551},{137,0,678},{5,10,84}
-,{134,10,163},{9,0,57},{9,0,459},{10,0,425},{11,0,119},{12,0,184},{12,0,371},{13
-,0,358},{145,0,51},{5,0,188},{5,0,814},{8,0,10},{9,0,421},{9,0,729},{10,0,609},{
-11,0,689},{4,11,253},{5,10,410},{5,11,544},{7,11,300},{137,11,340},{134,0,624},{
-138,11,321},{135,0,1941},{18,0,130},{5,10,322},{8,10,186},{9,10,262},{10,10,187}
-,{142,10,208},{5,11,53},{5,11,541},{6,11,94},{6,11,499},{7,11,230},{139,11,321},
-{133,10,227},{4,0,378},{4,11,920},{5,11,25},{5,11,790},{6,11,457},{135,11,853},{
-137,0,269},{132,0,528},{134,0,1146},{7,10,1395},{8,10,486},{9,10,236},{9,10,878}
-,{10,10,218},{11,10,95},{19,10,17},{147,10,31},{7,10,2043},{8,10,672},{141,10,
-448},{134,0,1105},{134,0,1616},{134,11,1765},{140,11,163},{5,10,412},{133,11,822
-},{132,11,634},{6,0,656},{134,11,1730},{134,0,1940},{5,0,104},{6,0,173},{135,0,
-1631},{136,10,562},{6,11,36},{7,11,658},{8,11,454},{147,11,86},{5,0,457},{134,10
-,1771},{7,0,810},{8,0,138},{8,0,342},{9,0,84},{10,0,193},{11,0,883},{140,0,359},
-{9,0,620},{135,10,1190},{137,10,132},{7,11,975},{137,11,789},{6,0,95},{6,0,1934}
-,{136,0,967},{141,11,335},{6,0,406},{10,0,409},{10,0,447},{11,0,44},{140,0,100},
-{4,10,317},{135,10,1279},{132,0,477},{134,0,1268},{6,0,1941},{8,0,944},{5,10,63}
-,{133,10,509},{132,0,629},{132,11,104},{4,0,246},{133,0,375},{6,0,1636},{132,10,
-288},{135,11,1614},{9,0,49},{10,0,774},{8,10,89},{8,10,620},{11,10,628},{12,10,
-322},{143,10,124},{4,0,282},{7,0,1034},{11,0,398},{11,0,634},{12,0,1},{12,0,79},
-{12,0,544},{14,0,237},{17,0,10},{146,0,20},{132,0,824},{7,11,45},{9,11,542},{9,
-11,566},{138,11,728},{5,0,118},{5,0,499},{6,0,476},{6,0,665},{6,0,1176},{6,0,
-1196},{7,0,600},{7,0,888},{135,0,1096},{7,0,296},{7,0,596},{8,0,560},{8,0,586},{
-9,0,612},{11,0,304},{12,0,46},{13,0,89},{14,0,112},{145,0,122},{5,0,894},{6,0,
-1772},{9,0,1009},{138,10,120},{5,11,533},{7,11,755},{138,11,780},{151,10,1},{6,0
-,1474},{7,11,87},{142,11,288},{139,0,366},{137,10,461},{7,11,988},{7,11,1939},{9
-,11,64},{9,11,502},{12,11,7},{12,11,34},{13,11,12},{13,11,234},{147,11,77},{7,0,
-1599},{7,0,1723},{8,0,79},{8,0,106},{8,0,190},{8,0,302},{8,0,383},{8,0,713},{9,0
-,119},{9,0,233},{9,0,419},{9,0,471},{10,0,181},{10,0,406},{11,0,57},{11,0,85},{
-11,0,120},{11,0,177},{11,0,296},{11,0,382},{11,0,454},{11,0,758},{11,0,999},{12,
-0,27},{12,0,98},{12,0,131},{12,0,245},{12,0,312},{12,0,446},{12,0,454},{13,0,25}
-,{13,0,98},{13,0,426},{13,0,508},{14,0,70},{14,0,163},{14,0,272},{14,0,277},{14,
-0,370},{15,0,95},{15,0,138},{15,0,167},{17,0,38},{148,0,96},{135,10,1346},{10,0,
-200},{19,0,2},{151,0,22},{135,11,141},{134,10,85},{134,0,1759},{138,0,372},{145,
-0,16},{8,0,943},{132,11,619},{139,11,88},{5,11,246},{8,11,189},{9,11,355},{9,11,
-512},{10,11,124},{10,11,453},{11,11,143},{11,11,416},{11,11,859},{141,11,341},{5
-,0,258},{134,0,719},{6,0,1798},{6,0,1839},{8,0,900},{10,0,874},{10,0,886},{12,0,
-698},{12,0,732},{12,0,770},{16,0,106},{18,0,163},{18,0,170},{18,0,171},{152,0,20
-},{9,0,707},{11,0,326},{11,0,339},{12,0,423},{12,0,502},{20,0,62},{9,11,707},{11
-,11,326},{11,11,339},{12,11,423},{12,11,502},{148,11,62},{5,0,30},{7,0,495},{8,0
-,134},{9,0,788},{140,0,438},{133,11,678},{5,10,279},{6,10,235},{7,10,468},{8,10,
-446},{9,10,637},{10,10,717},{11,10,738},{140,10,514},{5,11,35},{6,11,287},{7,11,
-862},{7,11,1886},{138,11,179},{7,0,1948},{7,0,2004},{132,11,517},{5,10,17},{6,10
-,371},{137,10,528},{4,0,115},{5,0,669},{6,0,407},{8,0,311},{11,0,10},{141,0,5},{
-137,0,381},{5,0,50},{6,0,439},{7,0,780},{135,0,1040},{136,11,667},{11,11,403},{
-146,11,83},{5,0,1},{6,0,81},{138,0,520},{134,0,738},{5,0,482},{8,0,98},{9,0,172}
-,{10,0,360},{10,0,700},{10,0,822},{11,0,302},{11,0,778},{12,0,50},{12,0,127},{12
-,0,396},{13,0,62},{13,0,328},{14,0,122},{147,0,72},{9,11,157},{10,11,131},{140,
-11,72},{135,11,714},{135,11,539},{5,0,2},{6,0,512},{7,0,797},{7,0,1494},{8,0,253
-},{8,0,589},{9,0,77},{10,0,1},{10,0,129},{10,0,225},{11,0,118},{11,0,226},{11,0,
-251},{11,0,430},{11,0,701},{11,0,974},{11,0,982},{12,0,64},{12,0,260},{12,0,488}
-,{140,0,690},{5,11,394},{7,11,367},{7,11,487},{7,11,857},{7,11,1713},{8,11,246},
-{9,11,537},{10,11,165},{12,11,219},{140,11,561},{136,0,557},{5,10,779},{5,10,807
-},{6,10,1655},{134,10,1676},{4,10,196},{5,10,558},{133,10,949},{11,11,827},{12,
-11,56},{14,11,34},{143,11,148},{137,0,347},{133,0,572},{134,0,832},{4,0,12},{7,0
-,504},{7,0,522},{7,0,809},{8,0,797},{141,0,88},{4,10,752},{133,11,449},{7,11,86}
-,{8,11,103},{145,11,69},{7,11,2028},{138,11,641},{5,0,528},{6,11,1},{142,11,2},{
-134,0,861},{10,0,294},{4,10,227},{5,10,159},{5,10,409},{7,10,80},{10,10,479},{12
-,10,418},{14,10,50},{14,10,249},{142,10,295},{7,10,1470},{8,10,66},{8,10,137},{8
-,10,761},{9,10,638},{11,10,80},{11,10,212},{11,10,368},{11,10,418},{12,10,8},{13
-,10,15},{16,10,61},{17,10,59},{19,10,28},{148,10,84},{20,0,109},{135,11,1148},{6
-,11,277},{7,11,1274},{7,11,1386},{7,11,1392},{12,11,129},{146,11,87},{6,11,187},
-{7,11,39},{7,11,1203},{8,11,380},{8,11,542},{14,11,117},{149,11,28},{134,0,1187}
-,{5,0,266},{9,0,290},{9,0,364},{10,0,293},{11,0,606},{142,0,45},{6,11,297},{7,11
-,793},{139,11,938},{4,0,50},{6,0,594},{9,0,121},{10,0,49},{10,0,412},{139,0,834}
-,{136,0,748},{7,11,464},{8,11,438},{11,11,105},{11,11,363},{12,11,231},{14,11,
-386},{15,11,102},{148,11,75},{132,0,466},{13,0,399},{14,0,337},{6,10,38},{7,10,
-1220},{8,10,185},{8,10,256},{9,10,22},{9,10,331},{10,10,738},{11,10,205},{11,10,
-540},{11,10,746},{13,10,465},{142,10,194},{9,0,378},{141,0,162},{137,0,519},{4,
-10,159},{6,10,115},{7,10,252},{7,10,257},{7,10,1928},{8,10,69},{9,10,384},{10,10
-,91},{10,10,615},{12,10,375},{14,10,235},{18,10,117},{147,10,123},{5,11,604},{5,
-10,911},{136,10,278},{132,0,667},{8,0,351},{9,0,322},{4,10,151},{135,10,1567},{
-134,0,902},{133,10,990},{12,0,180},{5,10,194},{7,10,1662},{137,10,90},{4,0,869},
-{134,0,1996},{134,0,813},{133,10,425},{137,11,761},{132,0,260},{133,10,971},{5,
-11,20},{6,11,298},{7,11,659},{7,11,1366},{137,11,219},{4,0,39},{5,0,36},{7,0,
-1843},{8,0,407},{11,0,144},{140,0,523},{4,0,510},{10,0,587},{139,10,752},{7,0,29
-},{7,0,66},{7,0,1980},{10,0,487},{138,0,809},{13,0,260},{14,0,82},{18,0,63},{137
-,10,662},{5,10,72},{6,10,264},{7,10,21},{7,10,46},{7,10,2013},{8,10,215},{8,10,
-513},{10,10,266},{139,10,22},{134,0,570},{6,0,565},{7,0,1667},{4,11,439},{10,10,
-95},{11,10,603},{12,11,242},{13,10,443},{14,10,160},{143,10,4},{134,0,1464},{134
-,10,431},{9,0,372},{15,0,2},{19,0,10},{19,0,18},{5,10,874},{6,10,1677},{143,10,0
-},{132,0,787},{6,0,380},{12,0,399},{21,0,19},{7,10,939},{7,10,1172},{7,10,1671},
-{9,10,540},{10,10,696},{11,10,265},{11,10,732},{11,10,928},{11,10,937},{141,10,
-438},{137,0,200},{132,11,233},{132,0,516},{134,11,577},{132,0,844},{11,0,887},{
-14,0,365},{142,0,375},{132,11,482},{8,0,821},{140,0,44},{7,0,1655},{136,0,305},{
-5,10,682},{135,10,1887},{135,11,346},{132,10,696},{4,0,10},{7,0,917},{139,0,786}
-,{5,11,795},{6,11,1741},{8,11,417},{137,11,782},{4,0,1016},{134,0,2031},{5,0,684
-},{4,10,726},{133,10,630},{6,0,1021},{134,0,1480},{8,10,802},{136,10,838},{134,0
-,27},{134,0,395},{135,11,622},{7,11,625},{135,11,1750},{4,11,203},{135,11,1936},
-{6,10,118},{7,10,215},{7,10,1521},{140,10,11},{132,0,813},{136,0,511},{7,10,615}
-,{138,10,251},{135,10,1044},{145,0,56},{133,10,225},{6,0,342},{6,0,496},{8,0,275
-},{137,0,206},{4,0,909},{133,0,940},{132,0,891},{7,11,311},{9,11,308},{140,11,
-255},{4,10,370},{5,10,756},{135,10,1326},{4,0,687},{134,0,1596},{134,0,1342},{6,
-10,1662},{7,10,48},{8,10,771},{10,10,116},{13,10,104},{14,10,105},{14,10,184},{
-15,10,168},{19,10,92},{148,10,68},{138,10,209},{4,11,400},{5,11,267},{135,11,232
-},{151,11,12},{6,0,41},{141,0,160},{141,11,314},{134,0,1718},{136,0,778},{142,11
-,261},{134,0,1610},{133,0,115},{132,0,294},{14,0,314},{132,10,120},{132,0,983},{
-5,0,193},{140,0,178},{138,10,429},{5,10,820},{135,10,931},{6,0,994},{6,0,1051},{
-6,0,1439},{7,0,174},{133,11,732},{4,11,100},{7,11,679},{8,11,313},{138,10,199},{
-6,10,151},{6,10,1675},{7,10,383},{151,10,10},{6,0,1796},{8,0,848},{8,0,867},{8,0
-,907},{10,0,855},{140,0,703},{140,0,221},{4,0,122},{5,0,796},{5,0,952},{6,0,1660
-},{6,0,1671},{8,0,567},{9,0,687},{9,0,742},{10,0,686},{11,0,682},{11,0,909},{140
-,0,281},{5,11,362},{5,11,443},{6,11,318},{7,11,1019},{139,11,623},{5,11,463},{
-136,11,296},{11,0,583},{13,0,262},{6,10,1624},{12,10,422},{142,10,360},{5,0,179}
-,{7,0,1095},{135,0,1213},{4,10,43},{4,11,454},{5,10,344},{133,10,357},{4,0,66},{
-7,0,722},{135,0,904},{134,0,773},{7,0,352},{133,10,888},{5,11,48},{5,11,404},{6,
-11,557},{7,11,458},{8,11,597},{10,11,455},{10,11,606},{11,11,49},{11,11,548},{12
-,11,476},{13,11,18},{141,11,450},{134,11,418},{132,10,711},{5,11,442},{135,11,
-1984},{141,0,35},{137,0,152},{134,0,1197},{135,11,1093},{137,11,203},{137,10,440
-},{10,0,592},{10,0,753},{12,0,317},{12,0,355},{12,0,465},{12,0,469},{12,0,560},{
-12,0,578},{141,0,243},{133,0,564},{134,0,797},{5,10,958},{133,10,987},{5,11,55},
-{7,11,376},{140,11,161},{133,11,450},{134,0,556},{134,0,819},{11,10,276},{142,10
-,293},{7,0,544},{138,0,61},{8,0,719},{4,10,65},{5,10,479},{5,10,1004},{7,10,1913
-},{8,10,317},{9,10,302},{10,10,612},{141,10,22},{4,0,5},{5,0,498},{8,0,637},{9,0
-,521},{4,11,213},{4,10,261},{7,11,223},{7,10,510},{136,11,80},{5,0,927},{7,0,101
-},{4,10,291},{7,11,381},{7,11,806},{7,11,820},{8,11,354},{8,11,437},{8,11,787},{
-9,10,515},{9,11,657},{10,11,58},{10,11,339},{10,11,749},{11,11,914},{12,10,152},
-{12,11,162},{12,10,443},{13,11,75},{13,10,392},{14,11,106},{14,11,198},{14,11,
-320},{14,10,357},{14,11,413},{146,11,43},{6,0,1153},{7,0,1441},{136,11,747},{4,0
-,893},{5,0,780},{133,0,893},{138,11,654},{133,11,692},{133,0,238},{134,11,191},{
-4,10,130},{135,10,843},{6,0,1296},{5,10,42},{5,10,879},{7,10,245},{7,10,324},{7,
-10,1532},{11,10,463},{11,10,472},{13,10,363},{144,10,52},{134,0,1729},{6,0,1999}
-,{136,0,969},{4,10,134},{133,10,372},{4,0,60},{7,0,941},{7,0,1800},{8,0,314},{9,
-0,700},{139,0,487},{134,0,1144},{6,11,162},{7,11,1960},{136,11,831},{132,11,706}
-,{135,0,1147},{138,11,426},{138,11,89},{7,0,1853},{138,0,437},{136,0,419},{135,
-10,1634},{133,0,828},{5,0,806},{7,0,176},{7,0,178},{7,0,1240},{7,0,1976},{132,10
-,644},{135,11,1877},{5,11,420},{135,11,1449},{4,0,51},{5,0,39},{6,0,4},{7,0,591}
-,{7,0,849},{7,0,951},{7,0,1613},{7,0,1760},{7,0,1988},{9,0,434},{10,0,754},{11,0
-,25},{139,0,37},{10,11,57},{138,11,277},{135,10,540},{132,11,204},{135,0,159},{
-139,11,231},{133,0,902},{7,0,928},{7,11,366},{9,11,287},{12,11,199},{12,11,556},
-{140,11,577},{6,10,623},{136,10,789},{4,10,908},{5,10,359},{5,10,508},{6,10,1723
-},{7,10,343},{7,10,1996},{135,10,2026},{134,0,270},{4,10,341},{135,10,480},{5,11
-,356},{135,11,224},{11,11,588},{11,11,864},{11,11,968},{143,11,160},{132,0,556},
-{137,0,801},{132,0,416},{142,0,372},{5,0,152},{5,0,197},{7,0,340},{7,0,867},{10,
-0,548},{10,0,581},{11,0,6},{12,0,3},{12,0,19},{14,0,110},{142,0,289},{139,0,369}
-,{7,11,630},{9,11,567},{11,11,150},{11,11,444},{141,11,119},{134,11,539},{7,10,
-1995},{8,10,299},{11,10,890},{140,10,674},{7,0,34},{7,0,190},{8,0,28},{8,0,141},
-{8,0,444},{8,0,811},{9,0,468},{11,0,334},{12,0,24},{12,0,386},{140,0,576},{133,0
-,757},{7,0,1553},{136,0,898},{133,0,721},{136,0,1012},{4,0,789},{5,0,647},{135,0
-,1102},{132,0,898},{10,0,183},{4,10,238},{5,10,503},{6,10,179},{7,10,2003},{8,10
-,381},{8,10,473},{9,10,149},{10,10,788},{15,10,45},{15,10,86},{20,10,110},{150,
-10,57},{9,0,136},{19,0,107},{4,10,121},{5,10,156},{5,10,349},{10,10,605},{142,10
-,342},{4,11,235},{135,11,255},{4,11,194},{5,11,584},{6,11,384},{7,11,583},{10,11
-,761},{11,11,760},{139,11,851},{6,10,80},{6,10,1694},{7,10,173},{7,10,1974},{9,
-10,547},{10,10,730},{14,10,18},{150,10,39},{4,10,923},{134,10,1711},{5,0,277},{
-141,0,247},{132,0,435},{133,11,562},{134,0,1311},{5,11,191},{137,11,271},{132,10
-,595},{7,11,1537},{14,11,96},{143,11,73},{5,0,437},{7,0,502},{7,0,519},{7,0,1122
-},{7,0,1751},{14,0,211},{6,10,459},{7,10,1753},{7,10,1805},{8,10,658},{9,10,1},{
-11,10,959},{141,10,446},{6,0,814},{4,11,470},{5,11,473},{6,11,153},{7,11,1503},{
-7,11,1923},{10,11,701},{11,11,132},{11,11,168},{11,11,227},{11,11,320},{11,11,
-436},{11,11,525},{11,11,855},{12,11,41},{12,11,286},{13,11,103},{13,11,284},{14,
-11,255},{14,11,262},{15,11,117},{143,11,127},{5,0,265},{6,0,212},{135,0,28},{138
-,0,750},{133,11,327},{6,11,552},{7,11,1754},{137,11,604},{134,0,2012},{132,0,702
-},{5,11,80},{6,11,405},{7,11,403},{7,11,1502},{7,11,1626},{8,11,456},{9,11,487},
-{9,11,853},{9,11,889},{10,11,309},{11,11,721},{11,11,994},{12,11,430},{141,11,
-165},{5,0,808},{135,0,2045},{5,0,166},{8,0,739},{140,0,511},{134,10,490},{4,11,
-453},{5,11,887},{6,11,535},{8,11,6},{136,11,543},{4,0,119},{5,0,170},{5,0,447},{
-7,0,1708},{7,0,1889},{9,0,357},{9,0,719},{12,0,486},{140,0,596},{137,0,500},{7,
-10,250},{136,10,507},{132,10,158},{6,0,809},{134,0,1500},{9,0,327},{11,0,350},{
-11,0,831},{13,0,352},{4,10,140},{7,10,362},{8,10,209},{9,10,10},{9,10,503},{9,10
-,614},{10,10,689},{11,10,327},{11,10,725},{12,10,252},{12,10,583},{13,10,192},{
-14,10,269},{14,10,356},{148,10,50},{135,11,741},{4,0,450},{7,0,1158},{19,10,1},{
-19,10,26},{150,10,9},{6,0,597},{135,0,1318},{134,0,1602},{6,10,228},{7,10,1341},
-{9,10,408},{138,10,343},{7,0,1375},{7,0,1466},{138,0,331},{132,0,754},{132,10,
-557},{5,11,101},{6,11,88},{6,11,543},{7,11,1677},{9,11,100},{10,11,677},{14,11,
-169},{14,11,302},{14,11,313},{15,11,48},{143,11,84},{134,0,1368},{4,11,310},{9,
-11,795},{10,11,733},{11,11,451},{12,11,249},{14,11,115},{14,11,286},{143,11,100}
-,{132,10,548},{10,0,557},{7,10,197},{8,10,142},{8,10,325},{9,10,150},{9,10,596},
-{10,10,353},{11,10,74},{11,10,315},{12,10,662},{12,10,681},{14,10,423},{143,10,
-141},{133,11,587},{5,0,850},{136,0,799},{10,0,908},{12,0,701},{12,0,757},{142,0,
-466},{4,0,62},{5,0,275},{18,0,19},{6,10,399},{6,10,579},{7,10,692},{7,10,846},{7
-,10,1015},{7,10,1799},{8,10,403},{9,10,394},{10,10,133},{12,10,4},{12,10,297},{
-12,10,452},{16,10,81},{18,10,25},{21,10,14},{22,10,12},{151,10,18},{12,0,459},{7
-,10,1546},{11,10,299},{142,10,407},{132,10,177},{132,11,498},{7,11,217},{8,11,
-140},{138,11,610},{5,10,411},{135,10,653},{134,0,1802},{7,10,439},{10,10,727},{
-11,10,260},{139,10,684},{133,11,905},{11,11,580},{142,11,201},{134,0,1397},{5,10
-,208},{7,10,753},{135,10,1528},{7,0,238},{7,0,2033},{8,0,120},{8,0,188},{8,0,659
-},{9,0,598},{10,0,466},{12,0,342},{12,0,588},{13,0,503},{14,0,246},{143,0,92},{
-135,11,1041},{4,11,456},{7,11,105},{7,11,358},{7,11,1637},{8,11,643},{139,11,483
-},{6,0,1318},{134,0,1324},{4,0,201},{7,0,1744},{8,0,602},{11,0,247},{11,0,826},{
-17,0,65},{133,10,242},{8,0,164},{146,0,62},{133,10,953},{139,10,802},{133,0,615}
-,{7,11,1566},{8,11,269},{9,11,212},{9,11,718},{14,11,15},{14,11,132},{142,11,227
-},{133,10,290},{132,10,380},{5,10,52},{7,10,277},{9,10,368},{139,10,791},{135,0,
-1243},{133,11,539},{11,11,919},{141,11,409},{136,0,968},{133,11,470},{134,0,882}
-,{132,0,907},{5,0,100},{10,0,329},{12,0,416},{149,0,29},{10,10,138},{139,10,476}
-,{5,10,725},{5,10,727},{6,11,91},{7,11,435},{135,10,1811},{4,11,16},{5,11,316},{
-5,11,842},{6,11,370},{6,11,1778},{8,11,166},{11,11,812},{12,11,206},{12,11,351},
-{14,11,418},{16,11,15},{16,11,34},{18,11,3},{19,11,3},{19,11,7},{20,11,4},{149,
-11,21},{132,0,176},{5,0,636},{5,0,998},{7,0,9},{7,0,1508},{8,0,26},{9,0,317},{9,
-0,358},{10,0,210},{10,0,292},{10,0,533},{11,0,555},{12,0,526},{12,0,607},{13,0,
-263},{13,0,459},{142,0,271},{6,0,256},{8,0,265},{4,10,38},{7,10,307},{7,10,999},
-{7,10,1481},{7,10,1732},{7,10,1738},{9,10,414},{11,10,316},{12,10,52},{13,10,420
-},{147,10,100},{135,10,1296},{4,11,611},{133,11,606},{4,0,643},{142,11,21},{133,
-11,715},{133,10,723},{6,0,610},{135,11,597},{10,0,127},{141,0,27},{6,0,1995},{6,
-0,2001},{8,0,119},{136,0,973},{4,11,149},{138,11,368},{12,0,522},{4,11,154},{5,
-10,109},{6,10,1784},{7,11,1134},{7,10,1895},{8,11,105},{12,10,296},{140,10,302},
-{4,11,31},{6,11,429},{7,11,962},{9,11,458},{139,11,691},{10,0,553},{11,0,876},{
-13,0,193},{13,0,423},{14,0,166},{19,0,84},{4,11,312},{5,10,216},{7,10,1879},{9,
-10,141},{9,10,270},{9,10,679},{10,10,159},{11,10,197},{12,10,538},{12,10,559},{
-14,10,144},{14,10,167},{143,10,67},{134,0,1582},{7,0,1578},{135,11,1578},{137,10
-,81},{132,11,236},{134,10,391},{134,0,795},{7,10,322},{136,10,249},{5,11,836},{5
-,11,857},{6,11,1680},{7,11,59},{147,11,53},{135,0,432},{10,11,68},{139,11,494},{
-4,11,81},{139,11,867},{7,0,126},{136,0,84},{142,11,280},{5,11,282},{8,11,650},{9
-,11,295},{9,11,907},{138,11,443},{136,0,790},{5,10,632},{138,10,526},{6,0,64},{
-12,0,377},{13,0,309},{14,0,141},{14,0,429},{14,11,141},{142,11,429},{134,0,1529}
-,{6,0,321},{7,0,1857},{9,0,530},{19,0,99},{7,10,948},{7,10,1042},{8,10,235},{8,
-10,461},{9,10,453},{10,10,354},{145,10,77},{7,0,1104},{11,0,269},{11,0,539},{11,
-0,627},{11,0,706},{11,0,975},{12,0,248},{12,0,434},{12,0,600},{12,0,622},{13,0,
-297},{13,0,485},{14,0,69},{14,0,409},{143,0,108},{4,10,362},{7,10,52},{7,10,303}
-,{10,11,70},{12,11,26},{14,11,17},{14,11,178},{15,11,34},{149,11,12},{11,0,977},
-{141,0,507},{9,0,34},{139,0,484},{5,10,196},{6,10,486},{7,10,212},{8,10,309},{
-136,10,346},{6,0,1700},{7,0,26},{7,0,293},{7,0,382},{7,0,1026},{7,0,1087},{7,0,
-2027},{8,0,24},{8,0,114},{8,0,252},{8,0,727},{8,0,729},{9,0,30},{9,0,199},{9,0,
-231},{9,0,251},{9,0,334},{9,0,361},{9,0,712},{10,0,55},{10,0,60},{10,0,232},{10,
-0,332},{10,0,384},{10,0,396},{10,0,504},{10,0,542},{10,0,652},{11,0,20},{11,0,48
-},{11,0,207},{11,0,291},{11,0,298},{11,0,342},{11,0,365},{11,0,394},{11,0,620},{
-11,0,705},{11,0,1017},{12,0,123},{12,0,340},{12,0,406},{12,0,643},{13,0,61},{13,
-0,269},{13,0,311},{13,0,319},{13,0,486},{14,0,234},{15,0,62},{15,0,85},{16,0,71}
-,{18,0,119},{20,0,105},{135,10,1912},{4,11,71},{5,11,376},{7,11,119},{138,11,665
-},{10,0,918},{10,0,926},{4,10,686},{136,11,55},{138,10,625},{136,10,706},{132,11
-,479},{4,10,30},{133,10,43},{6,0,379},{7,0,270},{8,0,176},{8,0,183},{9,0,432},{9
-,0,661},{12,0,247},{12,0,617},{18,0,125},{7,11,607},{8,11,99},{152,11,4},{5,0,
-792},{133,0,900},{4,11,612},{133,11,561},{4,11,41},{4,10,220},{5,11,74},{7,10,
-1535},{7,11,1627},{11,11,871},{140,11,619},{135,0,1920},{7,11,94},{11,11,329},{
-11,11,965},{12,11,241},{14,11,354},{15,11,22},{148,11,63},{9,11,209},{137,11,300
-},{134,0,771},{135,0,1979},{4,0,901},{133,0,776},{142,0,254},{133,11,98},{9,11,
-16},{141,11,386},{133,11,984},{4,11,182},{6,11,205},{135,11,220},{7,10,1725},{7,
-10,1774},{138,10,393},{5,10,263},{134,10,414},{4,11,42},{9,11,205},{9,11,786},{
-138,11,659},{14,0,140},{148,0,41},{8,0,440},{10,0,359},{6,10,178},{6,11,289},{6,
-10,1750},{7,11,1670},{9,10,690},{10,10,155},{10,10,373},{11,10,698},{12,11,57},{
-13,10,155},{20,10,93},{151,11,4},{4,0,37},{5,0,334},{7,0,1253},{151,11,25},{4,0,
-508},{4,11,635},{5,10,97},{137,10,393},{139,11,533},{4,0,640},{133,0,513},{134,
-10,1639},{132,11,371},{4,11,272},{7,11,836},{7,11,1651},{145,11,89},{5,11,825},{
-6,11,444},{6,11,1640},{136,11,308},{4,10,191},{7,10,934},{8,10,647},{145,10,97},
-{12,0,246},{15,0,162},{19,0,64},{20,0,8},{20,0,95},{22,0,24},{152,0,17},{4,0,533
-},{5,10,165},{9,10,346},{138,10,655},{5,11,737},{139,10,885},{133,10,877},{8,10,
-128},{139,10,179},{137,11,307},{140,0,752},{133,0,920},{135,0,1048},{5,0,153},{6
-,0,580},{6,10,1663},{7,10,132},{7,10,1154},{7,10,1415},{7,10,1507},{12,10,493},{
-15,10,105},{151,10,15},{5,10,459},{7,10,1073},{8,10,241},{136,10,334},{138,0,391
-},{135,0,1952},{133,11,525},{8,11,641},{11,11,388},{140,11,580},{142,0,126},{134
-,0,640},{132,0,483},{7,0,1616},{9,0,69},{6,10,324},{6,10,520},{7,10,338},{7,10,
-1729},{8,10,228},{139,10,750},{5,11,493},{134,11,528},{135,0,734},{4,11,174},{
-135,11,911},{138,0,480},{9,0,495},{146,0,104},{135,10,705},{9,0,472},{4,10,73},{
-6,10,612},{7,10,927},{7,10,1330},{7,10,1822},{8,10,217},{9,10,765},{9,10,766},{
-10,10,408},{11,10,51},{11,10,793},{12,10,266},{15,10,158},{20,10,89},{150,10,32}
-,{7,11,548},{137,11,58},{4,11,32},{5,11,215},{6,11,269},{7,11,1782},{7,11,1892},
-{10,11,16},{11,11,822},{11,11,954},{141,11,481},{132,0,874},{9,0,229},{5,10,389}
-,{136,10,636},{7,11,1749},{136,11,477},{134,0,948},{5,11,308},{135,11,1088},{4,0
-,748},{139,0,1009},{136,10,21},{6,0,555},{135,0,485},{5,11,126},{8,11,297},{9,11
-,366},{9,11,445},{12,11,53},{12,11,374},{141,11,492},{7,11,1551},{139,11,361},{
-136,0,193},{136,0,472},{8,0,653},{13,0,93},{147,0,14},{132,0,984},{132,11,175},{
-5,0,172},{6,0,1971},{132,11,685},{149,11,8},{133,11,797},{13,0,83},{5,10,189},{7
-,10,442},{7,10,443},{8,10,281},{12,10,174},{141,10,261},{134,0,1568},{133,11,565
-},{139,0,384},{133,0,260},{7,0,758},{7,0,880},{7,0,1359},{9,0,164},{9,0,167},{10
-,0,156},{10,0,588},{12,0,101},{14,0,48},{15,0,70},{6,10,2},{7,10,1262},{7,10,
-1737},{8,10,22},{8,10,270},{8,10,612},{9,10,312},{9,10,436},{10,10,311},{10,10,
-623},{11,10,72},{11,10,330},{11,10,455},{12,10,321},{12,10,504},{12,10,530},{12,
-10,543},{13,10,17},{13,10,156},{13,10,334},{17,10,60},{148,10,64},{4,11,252},{7,
-11,1068},{10,11,434},{11,11,228},{11,11,426},{13,11,231},{18,11,106},{148,11,87}
-,{7,10,354},{10,10,410},{139,10,815},{6,0,367},{7,10,670},{7,10,1327},{8,10,411}
-,{8,10,435},{9,10,653},{9,10,740},{10,10,385},{11,10,222},{11,10,324},{11,10,829
-},{140,10,611},{7,0,1174},{6,10,166},{135,10,374},{146,0,121},{132,0,828},{5,11,
-231},{138,11,509},{7,11,601},{9,11,277},{9,11,674},{10,11,178},{10,11,257},{10,
-11,418},{11,11,531},{11,11,544},{11,11,585},{12,11,113},{12,11,475},{13,11,99},{
-142,11,428},{134,0,1541},{135,11,1779},{5,0,343},{134,10,398},{135,10,50},{135,
-11,1683},{4,0,440},{7,0,57},{8,0,167},{8,0,375},{9,0,82},{9,0,561},{9,0,744},{10
-,0,620},{137,11,744},{134,0,926},{6,10,517},{7,10,1159},{10,10,621},{139,10,192}
-,{137,0,827},{8,0,194},{136,0,756},{10,10,223},{139,10,645},{7,10,64},{136,10,
-245},{4,11,399},{5,11,119},{5,11,494},{7,11,751},{137,11,556},{132,0,808},{135,0
-,22},{7,10,1763},{140,10,310},{5,0,639},{7,0,1249},{11,0,896},{134,11,584},{134,
-0,1614},{135,0,860},{135,11,1121},{5,10,129},{6,10,61},{135,10,947},{4,0,102},{7
-,0,815},{7,0,1699},{139,0,964},{13,10,505},{141,10,506},{139,10,1000},{132,11,
-679},{132,0,899},{132,0,569},{5,11,694},{137,11,714},{136,0,795},{6,0,2045},{139
-,11,7},{6,0,52},{9,0,104},{9,0,559},{12,0,308},{147,0,87},{4,0,301},{132,0,604},
-{133,10,637},{136,0,779},{5,11,143},{5,11,769},{6,11,1760},{7,11,682},{7,11,1992
-},{136,11,736},{137,10,590},{147,0,32},{137,11,527},{5,10,280},{135,10,1226},{
-134,0,494},{6,0,677},{6,0,682},{134,0,1044},{133,10,281},{135,10,1064},{7,0,508}
-,{133,11,860},{6,11,422},{7,11,0},{7,11,1544},{9,11,577},{11,11,990},{12,11,141}
-,{12,11,453},{13,11,47},{141,11,266},{134,0,1014},{5,11,515},{137,11,131},{134,0
-,957},{132,11,646},{6,0,310},{7,0,1849},{8,0,72},{8,0,272},{8,0,431},{9,0,12},{9
-,0,376},{10,0,563},{10,0,630},{10,0,796},{10,0,810},{11,0,367},{11,0,599},{11,0,
-686},{140,0,672},{7,0,570},{4,11,396},{7,10,120},{7,11,728},{8,10,489},{9,11,117
-},{9,10,319},{10,10,820},{11,10,1004},{12,10,379},{12,10,679},{13,10,117},{13,11
-,202},{13,10,412},{14,10,25},{15,10,52},{15,10,161},{16,10,47},{20,11,51},{149,
-10,2},{6,11,121},{6,11,124},{6,11,357},{7,11,1138},{7,11,1295},{8,11,162},{139,
-11,655},{8,0,449},{4,10,937},{5,10,801},{136,11,449},{139,11,958},{6,0,181},{7,0
-,537},{8,0,64},{9,0,127},{10,0,496},{12,0,510},{141,0,384},{138,11,253},{4,0,244
-},{135,0,233},{133,11,237},{132,10,365},{6,0,1650},{10,0,702},{139,0,245},{5,10,
-7},{139,10,774},{13,0,463},{20,0,49},{13,11,463},{148,11,49},{4,10,734},{5,10,
-662},{134,10,430},{4,10,746},{135,10,1090},{5,10,360},{136,10,237},{137,0,338},{
-143,11,10},{7,11,571},{138,11,366},{134,0,1279},{9,11,513},{10,11,22},{10,11,39}
-,{12,11,122},{140,11,187},{133,0,896},{146,0,178},{134,0,695},{137,0,808},{134,
-11,587},{7,11,107},{7,11,838},{8,11,550},{138,11,401},{7,0,1117},{136,0,539},{4,
-10,277},{5,10,608},{6,10,493},{7,10,457},{140,10,384},{133,11,768},{12,0,257},{7
-,10,27},{135,10,316},{140,0,1003},{4,0,207},{5,0,586},{5,0,676},{6,0,448},{8,0,
-244},{11,0,1},{13,0,3},{16,0,54},{17,0,4},{18,0,13},{133,10,552},{4,10,401},{137
-,10,264},{5,0,516},{7,0,1883},{135,11,1883},{12,0,960},{132,11,894},{5,0,4},{5,0
-,810},{6,0,13},{6,0,538},{6,0,1690},{6,0,1726},{7,0,499},{7,0,1819},{8,0,148},{8
-,0,696},{8,0,791},{12,0,125},{143,0,9},{135,0,1268},{11,0,30},{14,0,315},{9,10,
-543},{10,10,524},{12,10,524},{16,10,18},{20,10,26},{148,10,65},{6,0,748},{4,10,
-205},{5,10,623},{7,10,104},{136,10,519},{11,0,542},{139,0,852},{140,0,6},{132,0,
-848},{7,0,1385},{11,0,582},{11,0,650},{11,0,901},{11,0,949},{12,0,232},{12,0,236
-},{13,0,413},{13,0,501},{18,0,116},{7,10,579},{9,10,41},{9,10,244},{9,10,669},{
-10,10,5},{11,10,861},{11,10,951},{139,10,980},{4,0,945},{6,0,1811},{6,0,1845},{6
-,0,1853},{6,0,1858},{8,0,862},{12,0,782},{12,0,788},{18,0,160},{148,0,117},{132,
-10,717},{4,0,925},{5,0,803},{8,0,698},{138,0,828},{134,0,1416},{132,0,610},{139,
-0,992},{6,0,878},{134,0,1477},{135,0,1847},{138,11,531},{137,11,539},{134,11,272
-},{133,0,383},{134,0,1404},{132,10,489},{4,11,9},{5,11,128},{7,11,368},{11,11,
-480},{148,11,3},{136,0,986},{9,0,660},{138,0,347},{135,10,892},{136,11,682},{7,0
-,572},{9,0,592},{11,0,680},{12,0,356},{140,0,550},{7,0,1411},{138,11,527},{4,11,
-2},{7,11,545},{135,11,894},{137,10,473},{11,0,64},{7,11,481},{7,10,819},{9,10,26
-},{9,10,392},{9,11,792},{10,10,152},{10,10,226},{12,10,276},{12,10,426},{12,10,
-589},{13,10,460},{15,10,97},{19,10,48},{148,10,104},{135,10,51},{136,11,445},{
-136,11,646},{135,0,606},{132,10,674},{6,0,1829},{134,0,1830},{132,10,770},{5,10,
-79},{7,10,1027},{7,10,1477},{139,10,52},{5,11,530},{142,11,113},{134,10,1666},{7
-,0,748},{139,0,700},{134,10,195},{133,10,789},{9,0,87},{10,0,365},{4,10,251},{4,
-10,688},{7,10,513},{135,10,1284},{136,11,111},{133,0,127},{6,0,198},{140,0,83},{
-133,11,556},{133,10,889},{4,10,160},{5,10,330},{7,10,1434},{136,10,174},{5,0,276
-},{6,0,55},{7,0,1369},{138,0,864},{8,11,16},{140,11,568},{6,0,1752},{136,0,726},
-{135,0,1066},{133,0,764},{6,11,186},{137,11,426},{11,0,683},{139,11,683},{6,0,
-309},{7,0,331},{138,0,550},{133,10,374},{6,0,1212},{6,0,1852},{7,0,1062},{8,0,
-874},{8,0,882},{138,0,936},{132,11,585},{134,0,1364},{7,0,986},{133,10,731},{6,0
-,723},{6,0,1408},{138,0,381},{135,0,1573},{134,0,1025},{4,10,626},{5,10,642},{6,
-10,425},{10,10,202},{139,10,141},{4,11,93},{5,11,252},{6,11,229},{7,11,291},{9,
-11,550},{139,11,644},{137,11,749},{137,11,162},{132,11,381},{135,0,1559},{6,0,
-194},{7,0,133},{10,0,493},{10,0,570},{139,0,664},{5,0,24},{5,0,569},{6,0,3},{6,0
-,119},{6,0,143},{6,0,440},{7,0,295},{7,0,599},{7,0,1686},{7,0,1854},{8,0,424},{9
-,0,43},{9,0,584},{9,0,760},{10,0,148},{10,0,328},{11,0,159},{11,0,253},{11,0,506
-},{12,0,487},{140,0,531},{6,0,661},{134,0,1517},{136,10,835},{151,10,17},{5,0,14
-},{5,0,892},{6,0,283},{7,0,234},{136,0,537},{139,0,541},{4,0,126},{8,0,635},{147
-,0,34},{4,0,316},{4,0,495},{135,0,1561},{4,11,187},{5,11,184},{5,11,690},{7,11,
-1869},{138,11,756},{139,11,783},{4,0,998},{137,0,861},{136,0,1009},{139,11,292},
-{5,11,21},{6,11,77},{6,11,157},{7,11,974},{7,11,1301},{7,11,1339},{7,11,1490},{7
-,11,1873},{137,11,628},{7,11,1283},{9,11,227},{9,11,499},{10,11,341},{11,11,325}
-,{11,11,408},{14,11,180},{15,11,144},{18,11,47},{147,11,49},{4,0,64},{5,0,352},{
-5,0,720},{6,0,368},{139,0,359},{5,10,384},{8,10,455},{140,10,48},{5,10,264},{134
-,10,184},{7,0,1577},{10,0,304},{10,0,549},{12,0,365},{13,0,220},{13,0,240},{142,
-0,33},{134,0,1107},{134,0,929},{135,0,1142},{6,0,175},{137,0,289},{5,0,432},{133
-,0,913},{6,0,279},{7,0,219},{5,10,633},{135,10,1323},{7,0,785},{7,10,359},{8,10,
-243},{140,10,175},{139,0,595},{132,10,105},{8,11,398},{9,11,681},{139,11,632},{
-140,0,80},{5,0,931},{134,0,1698},{142,11,241},{134,11,20},{134,0,1323},{11,0,526
-},{11,0,939},{141,0,290},{5,0,774},{6,0,780},{6,0,1637},{6,0,1686},{6,0,1751},{8
-,0,559},{141,0,109},{141,0,127},{7,0,1167},{11,0,934},{13,0,391},{17,0,76},{135,
-11,709},{135,0,963},{6,0,260},{135,0,1484},{134,0,573},{4,10,758},{139,11,941},{
-135,10,1649},{145,11,36},{4,0,292},{137,0,580},{4,0,736},{5,0,871},{6,0,1689},{
-135,0,1944},{7,11,945},{11,11,713},{139,11,744},{134,0,1164},{135,11,937},{6,0,
-1922},{9,0,982},{15,0,173},{15,0,178},{15,0,200},{18,0,189},{18,0,207},{21,0,47}
-,{135,11,1652},{7,0,1695},{139,10,128},{6,0,63},{135,0,920},{133,0,793},{143,11,
-134},{133,10,918},{5,0,67},{6,0,62},{6,0,374},{135,0,1391},{9,0,790},{12,0,47},{
-4,11,579},{5,11,226},{5,11,323},{135,11,960},{10,11,784},{141,11,191},{4,0,391},
-{135,0,1169},{137,0,443},{13,11,232},{146,11,35},{132,10,340},{132,0,271},{137,
-11,313},{5,11,973},{137,11,659},{134,0,1140},{6,11,135},{135,11,1176},{4,0,253},
-{5,0,544},{7,0,300},{137,0,340},{7,0,897},{5,10,985},{7,10,509},{145,10,96},{138
-,11,735},{135,10,1919},{138,0,890},{5,0,818},{134,0,1122},{5,0,53},{5,0,541},{6,
-0,94},{6,0,499},{7,0,230},{139,0,321},{4,0,920},{5,0,25},{5,0,790},{6,0,457},{7,
-0,853},{8,0,788},{142,11,31},{132,10,247},{135,11,314},{132,0,468},{7,0,243},{6,
-10,337},{7,10,494},{8,10,27},{8,10,599},{138,10,153},{4,10,184},{5,10,390},{7,10
-,618},{7,10,1456},{139,10,710},{134,0,870},{134,0,1238},{134,0,1765},{10,0,853},
-{10,0,943},{14,0,437},{14,0,439},{14,0,443},{14,0,446},{14,0,452},{14,0,469},{14
-,0,471},{14,0,473},{16,0,93},{16,0,102},{16,0,110},{148,0,121},{4,0,605},{7,0,
-518},{7,0,1282},{7,0,1918},{10,0,180},{139,0,218},{133,0,822},{4,0,634},{11,0,
-916},{142,0,419},{6,11,281},{7,11,6},{8,11,282},{8,11,480},{8,11,499},{9,11,198}
-,{10,11,143},{10,11,169},{10,11,211},{10,11,417},{10,11,574},{11,11,147},{11,11,
-395},{12,11,75},{12,11,407},{12,11,608},{13,11,500},{142,11,251},{134,0,898},{6,
-0,36},{7,0,658},{8,0,454},{150,11,48},{133,11,674},{135,11,1776},{4,11,419},{10,
-10,227},{11,10,497},{11,10,709},{140,10,415},{6,10,360},{7,10,1664},{136,10,478}
-,{137,0,806},{12,11,508},{14,11,102},{14,11,226},{144,11,57},{135,11,1123},{4,11
-,138},{7,11,1012},{7,11,1280},{137,11,76},{5,11,29},{140,11,638},{136,10,699},{
-134,0,1326},{132,0,104},{135,11,735},{132,10,739},{134,0,1331},{7,0,260},{135,11
-,260},{135,11,1063},{7,0,45},{9,0,542},{9,0,566},{10,0,728},{137,10,869},{4,10,
-67},{5,10,422},{7,10,1037},{7,10,1289},{7,10,1555},{9,10,741},{145,10,108},{139,
-0,263},{134,0,1516},{14,0,146},{15,0,42},{16,0,23},{17,0,86},{146,0,17},{138,0,
-468},{136,0,1005},{4,11,17},{5,11,23},{7,11,995},{11,11,383},{11,11,437},{12,11,
-460},{140,11,532},{7,0,87},{142,0,288},{138,10,96},{135,11,626},{144,10,26},{7,0
-,988},{7,0,1939},{9,0,64},{9,0,502},{12,0,22},{12,0,34},{13,0,12},{13,0,234},{
-147,0,77},{13,0,133},{8,10,203},{11,10,823},{11,10,846},{12,10,482},{13,10,277},
-{13,10,302},{13,10,464},{14,10,205},{142,10,221},{4,10,449},{133,10,718},{135,0,
-141},{6,0,1842},{136,0,872},{8,11,70},{12,11,171},{141,11,272},{4,10,355},{6,10,
-311},{9,10,256},{138,10,404},{132,0,619},{137,0,261},{10,11,233},{10,10,758},{
-139,11,76},{5,0,246},{8,0,189},{9,0,355},{9,0,512},{10,0,124},{10,0,453},{11,0,
-143},{11,0,416},{11,0,859},{141,0,341},{134,11,442},{133,10,827},{5,10,64},{140,
-10,581},{4,10,442},{7,10,1047},{7,10,1352},{135,10,1643},{134,11,1709},{5,0,678}
-,{6,0,305},{7,0,775},{7,0,1065},{133,10,977},{11,11,69},{12,11,105},{12,11,117},
-{13,11,213},{14,11,13},{14,11,62},{14,11,177},{14,11,421},{15,11,19},{146,11,141
-},{137,11,309},{5,0,35},{7,0,862},{7,0,1886},{138,0,179},{136,0,285},{132,0,517}
-,{7,11,976},{9,11,146},{10,11,206},{10,11,596},{13,11,218},{142,11,153},{132,10,
-254},{6,0,214},{12,0,540},{4,10,275},{7,10,1219},{140,10,376},{8,0,667},{11,0,
-403},{146,0,83},{12,0,74},{10,11,648},{11,11,671},{143,11,46},{135,0,125},{134,
-10,1753},{133,0,761},{6,0,912},{4,11,518},{6,10,369},{6,10,502},{7,10,1036},{7,
-11,1136},{8,10,348},{9,10,452},{10,10,26},{11,10,224},{11,10,387},{11,10,772},{
-12,10,95},{12,10,629},{13,10,195},{13,10,207},{13,10,241},{14,10,260},{14,10,270
-},{143,10,140},{10,0,131},{140,0,72},{132,10,269},{5,10,480},{7,10,532},{7,10,
-1197},{7,10,1358},{8,10,291},{11,10,349},{142,10,396},{8,11,689},{137,11,863},{8
-,0,333},{138,0,182},{4,11,18},{7,11,145},{7,11,444},{7,11,1278},{8,11,49},{8,11,
-400},{9,11,71},{9,11,250},{10,11,459},{12,11,160},{144,11,24},{14,11,35},{142,11
-,191},{135,11,1864},{135,0,1338},{148,10,15},{14,0,94},{15,0,65},{16,0,4},{16,0,
-77},{16,0,80},{145,0,5},{12,11,82},{143,11,36},{133,11,1010},{133,0,449},{133,0,
-646},{7,0,86},{8,0,103},{135,10,657},{7,0,2028},{138,0,641},{136,10,533},{134,0,
-1},{139,11,970},{5,11,87},{7,11,313},{7,11,1103},{10,11,112},{10,11,582},{11,11,
-389},{11,11,813},{12,11,385},{13,11,286},{14,11,124},{146,11,108},{6,0,869},{132
-,11,267},{6,0,277},{7,0,1274},{7,0,1386},{146,0,87},{6,0,187},{7,0,39},{7,0,1203
-},{8,0,380},{14,0,117},{149,0,28},{4,10,211},{4,10,332},{5,10,335},{6,10,238},{7
-,10,269},{7,10,811},{7,10,1797},{8,10,836},{9,10,507},{141,10,242},{4,0,785},{5,
-0,368},{6,0,297},{7,0,793},{139,0,938},{7,0,464},{8,0,558},{11,0,105},{12,0,231}
-,{14,0,386},{15,0,102},{148,0,75},{133,10,1009},{8,0,877},{140,0,731},{139,11,
-289},{10,11,249},{139,11,209},{132,11,561},{134,0,1608},{132,11,760},{134,0,1429
-},{9,11,154},{140,11,485},{5,10,228},{6,10,203},{7,10,156},{8,10,347},{137,10,
-265},{7,0,1010},{11,0,733},{11,0,759},{13,0,34},{14,0,427},{146,0,45},{7,10,1131
-},{135,10,1468},{136,11,255},{7,0,1656},{9,0,369},{10,0,338},{10,0,490},{11,0,
-154},{11,0,545},{11,0,775},{13,0,77},{141,0,274},{133,11,621},{134,0,1038},{4,11
-,368},{135,11,641},{6,0,2010},{8,0,979},{8,0,985},{10,0,951},{138,0,1011},{134,0
-,1005},{19,0,121},{5,10,291},{5,10,318},{7,10,765},{9,10,389},{140,10,548},{5,0,
-20},{6,0,298},{7,0,659},{137,0,219},{7,0,1440},{11,0,854},{11,0,872},{11,0,921},
-{12,0,551},{13,0,472},{142,0,367},{5,0,490},{6,0,615},{6,0,620},{135,0,683},{6,0
-,1070},{134,0,1597},{139,0,522},{132,0,439},{136,0,669},{6,0,766},{6,0,1143},{6,
-0,1245},{10,10,525},{139,10,82},{9,11,92},{147,11,91},{6,0,668},{134,0,1218},{6,
-11,525},{9,11,876},{140,11,284},{132,0,233},{136,0,547},{132,10,422},{5,10,355},
-{145,10,0},{6,11,300},{135,11,1515},{4,0,482},{137,10,905},{4,0,886},{7,0,346},{
-133,11,594},{133,10,865},{5,10,914},{134,10,1625},{135,0,334},{5,0,795},{6,0,
-1741},{133,10,234},{135,10,1383},{6,11,1641},{136,11,820},{135,0,371},{7,11,1313
-},{138,11,660},{135,10,1312},{135,0,622},{7,0,625},{135,0,1750},{135,0,339},{4,0
-,203},{135,0,1936},{15,0,29},{16,0,38},{15,11,29},{144,11,38},{5,0,338},{135,0,
-1256},{135,10,1493},{10,0,130},{6,10,421},{7,10,61},{7,10,1540},{138,10,501},{6,
-11,389},{7,11,149},{9,11,142},{138,11,94},{137,10,341},{11,0,678},{12,0,307},{
-142,10,98},{6,11,8},{7,11,1881},{136,11,91},{135,0,2044},{6,0,770},{6,0,802},{6,
-0,812},{7,0,311},{9,0,308},{12,0,255},{6,10,102},{7,10,72},{15,10,142},{147,10,
-67},{151,10,30},{135,10,823},{135,0,1266},{135,11,1746},{135,10,1870},{4,0,400},
-{5,0,267},{135,0,232},{7,11,24},{11,11,542},{139,11,852},{135,11,1739},{4,11,503
-},{135,11,1661},{5,11,130},{7,11,1314},{9,11,610},{10,11,718},{11,11,601},{11,11
-,819},{11,11,946},{140,11,536},{10,11,149},{11,11,280},{142,11,336},{7,0,739},{
-11,0,690},{7,11,1946},{8,10,48},{8,10,88},{8,10,582},{8,10,681},{9,10,373},{9,10
-,864},{11,10,157},{11,10,843},{148,10,27},{134,0,990},{4,10,88},{5,10,137},{5,10
-,174},{5,10,777},{6,10,1664},{6,10,1725},{7,10,77},{7,10,426},{7,10,1317},{7,10,
-1355},{8,10,126},{8,10,563},{9,10,523},{9,10,750},{10,10,310},{10,10,836},{11,10
-,42},{11,10,318},{11,10,731},{12,10,68},{12,10,92},{12,10,507},{12,10,692},{13,
-10,81},{13,10,238},{13,10,374},{14,10,436},{18,10,138},{19,10,78},{19,10,111},{
-20,10,55},{20,10,77},{148,10,92},{141,10,418},{7,0,1831},{132,10,938},{6,0,776},
-{134,0,915},{138,10,351},{5,11,348},{6,11,522},{6,10,1668},{7,10,1499},{8,10,117
-},{9,10,314},{138,10,174},{135,10,707},{132,0,613},{133,10,403},{132,11,392},{5,
-11,433},{9,11,633},{139,11,629},{133,0,763},{132,0,878},{132,0,977},{132,0,100},
-{6,0,463},{4,10,44},{5,10,311},{7,10,639},{7,10,762},{7,10,1827},{9,10,8},{9,10,
-462},{148,10,83},{134,11,234},{4,10,346},{7,10,115},{9,10,180},{9,10,456},{138,
-10,363},{5,0,362},{5,0,443},{6,0,318},{7,0,1019},{139,0,623},{5,0,463},{8,0,296}
-,{7,11,140},{7,11,1950},{8,11,680},{11,11,817},{147,11,88},{7,11,1222},{138,11,
-386},{142,0,137},{132,0,454},{7,0,1914},{6,11,5},{7,10,1051},{9,10,545},{11,11,
-249},{12,11,313},{16,11,66},{145,11,26},{135,0,1527},{145,0,58},{148,11,59},{5,0
-,48},{5,0,404},{6,0,557},{7,0,458},{8,0,597},{10,0,455},{10,0,606},{11,0,49},{11
-,0,548},{12,0,476},{13,0,18},{141,0,450},{5,11,963},{134,11,1773},{133,0,729},{
-138,11,586},{5,0,442},{135,0,1984},{134,0,449},{144,0,40},{4,0,853},{7,11,180},{
-8,11,509},{136,11,792},{6,10,185},{7,10,1899},{9,10,875},{139,10,673},{134,11,
-524},{12,0,227},{4,10,327},{5,10,478},{7,10,1332},{136,10,753},{6,0,1491},{5,10,
-1020},{133,10,1022},{4,10,103},{133,10,401},{132,11,931},{4,10,499},{135,10,1421
-},{5,0,55},{7,0,376},{140,0,161},{133,0,450},{6,0,1174},{134,0,1562},{10,0,62},{
-13,0,400},{135,11,1837},{140,0,207},{135,0,869},{4,11,773},{5,11,618},{137,11,
-756},{132,10,96},{4,0,213},{7,0,223},{8,0,80},{135,10,968},{4,11,90},{5,11,337},
-{5,11,545},{7,11,754},{9,11,186},{10,11,72},{10,11,782},{11,11,513},{11,11,577},
-{11,11,610},{11,11,889},{11,11,961},{12,11,354},{12,11,362},{12,11,461},{12,11,
-595},{13,11,79},{143,11,121},{7,0,381},{7,0,806},{7,0,820},{8,0,354},{8,0,437},{
-8,0,787},{9,0,657},{10,0,58},{10,0,339},{10,0,749},{11,0,914},{12,0,162},{13,0,
-75},{14,0,106},{14,0,198},{14,0,320},{14,0,413},{146,0,43},{136,0,747},{136,0,
-954},{134,0,1073},{135,0,556},{7,11,151},{9,11,329},{139,11,254},{5,0,692},{134,
-0,1395},{6,10,563},{137,10,224},{134,0,191},{132,0,804},{9,11,187},{10,11,36},{
-17,11,44},{146,11,64},{7,11,165},{7,11,919},{136,11,517},{4,11,506},{5,11,295},{
-7,11,1680},{15,11,14},{144,11,5},{4,0,706},{6,0,162},{7,0,1960},{136,0,831},{135
-,11,1376},{7,11,987},{9,11,688},{10,11,522},{11,11,788},{140,11,566},{150,0,35},
-{138,0,426},{135,0,1235},{135,11,1741},{7,11,389},{7,11,700},{7,11,940},{8,11,
-514},{9,11,116},{9,11,535},{10,11,118},{11,11,107},{11,11,148},{11,11,922},{12,
-11,254},{12,11,421},{142,11,238},{134,0,1234},{132,11,743},{4,10,910},{5,10,832}
-,{135,11,1335},{141,0,96},{135,11,185},{146,0,149},{4,0,204},{137,0,902},{4,11,
-784},{133,11,745},{136,0,833},{136,0,949},{7,0,366},{9,0,287},{12,0,199},{12,0,
-556},{12,0,577},{5,11,81},{7,11,146},{7,11,1342},{7,11,1446},{8,11,53},{8,11,561
-},{8,11,694},{8,11,754},{9,11,97},{9,11,115},{9,11,894},{10,11,462},{10,11,813},
-{11,11,230},{11,11,657},{11,11,699},{11,11,748},{12,11,119},{12,11,200},{12,11,
-283},{14,11,273},{145,11,15},{5,11,408},{137,11,747},{9,11,498},{140,11,181},{6,
-0,2020},{136,0,992},{5,0,356},{135,0,224},{134,0,784},{7,0,630},{9,0,567},{11,0,
-150},{11,0,444},{13,0,119},{8,10,528},{137,10,348},{134,0,539},{4,10,20},{133,10
-,616},{142,0,27},{7,11,30},{8,11,86},{8,11,315},{8,11,700},{9,11,576},{9,11,858}
-,{11,11,310},{11,11,888},{11,11,904},{12,11,361},{141,11,248},{138,11,839},{134,
-0,755},{134,0,1063},{7,10,1091},{135,10,1765},{134,11,428},{7,11,524},{8,11,169}
-,{8,11,234},{9,11,480},{138,11,646},{139,0,814},{7,11,1462},{139,11,659},{4,10,
-26},{5,10,429},{6,10,245},{7,10,704},{7,10,1379},{135,10,1474},{7,11,1205},{138,
-11,637},{139,11,803},{132,10,621},{136,0,987},{4,11,266},{8,11,4},{9,11,39},{10,
-11,166},{11,11,918},{12,11,635},{20,11,10},{22,11,27},{150,11,43},{4,0,235},{135
-,0,255},{4,0,194},{5,0,584},{6,0,384},{7,0,583},{10,0,761},{11,0,760},{139,0,851
-},{133,10,542},{134,0,1086},{133,10,868},{8,0,1016},{136,0,1018},{7,0,1396},{7,
-11,1396},{136,10,433},{135,10,1495},{138,10,215},{141,10,124},{7,11,157},{8,11,
-279},{9,11,759},{16,11,31},{16,11,39},{16,11,75},{18,11,24},{20,11,42},{152,11,1
-},{5,0,562},{134,11,604},{134,0,913},{5,0,191},{137,0,271},{4,0,470},{6,0,153},{
-7,0,1503},{7,0,1923},{10,0,701},{11,0,132},{11,0,227},{11,0,320},{11,0,436},{11,
-0,525},{11,0,855},{11,0,873},{12,0,41},{12,0,286},{13,0,103},{13,0,284},{14,0,
-255},{14,0,262},{15,0,117},{143,0,127},{7,0,475},{12,0,45},{147,10,112},{132,11,
-567},{137,11,859},{6,0,713},{6,0,969},{6,0,1290},{134,0,1551},{133,0,327},{6,0,
-552},{6,0,1292},{7,0,1754},{137,0,604},{4,0,223},{6,0,359},{11,0,3},{13,0,108},{
-14,0,89},{16,0,22},{5,11,762},{7,11,1880},{9,11,680},{139,11,798},{5,0,80},{6,0,
-405},{7,0,403},{7,0,1502},{8,0,456},{9,0,487},{9,0,853},{9,0,889},{10,0,309},{11
-,0,721},{11,0,994},{12,0,430},{141,0,165},{133,11,298},{132,10,647},{134,0,2016}
-,{18,10,10},{146,11,10},{4,0,453},{5,0,887},{6,0,535},{8,0,6},{8,0,543},{136,0,
-826},{136,0,975},{10,0,961},{138,0,962},{138,10,220},{6,0,1891},{6,0,1893},{9,0,
-916},{9,0,965},{9,0,972},{12,0,801},{12,0,859},{12,0,883},{15,0,226},{149,0,51},
-{132,10,109},{135,11,267},{7,11,92},{7,11,182},{8,11,453},{9,11,204},{11,11,950}
-,{12,11,94},{12,11,644},{16,11,20},{16,11,70},{16,11,90},{147,11,55},{134,10,
-1746},{6,11,71},{7,11,845},{7,11,1308},{8,11,160},{137,11,318},{5,0,101},{6,0,88
-},{7,0,263},{7,0,628},{7,0,1677},{8,0,349},{9,0,100},{10,0,677},{14,0,169},{14,0
-,302},{14,0,313},{15,0,48},{15,0,84},{7,11,237},{8,11,664},{9,11,42},{9,11,266},
-{9,11,380},{9,11,645},{10,11,177},{138,11,276},{138,11,69},{4,0,310},{7,0,708},{
-7,0,996},{9,0,795},{10,0,390},{10,0,733},{11,0,451},{12,0,249},{14,0,115},{14,0,
-286},{143,0,100},{5,0,587},{4,10,40},{10,10,67},{11,10,117},{11,10,768},{139,10,
-935},{6,0,1942},{7,0,512},{136,0,983},{7,10,992},{8,10,301},{9,10,722},{12,10,63
-},{13,10,29},{14,10,161},{143,10,18},{136,11,76},{139,10,923},{134,0,645},{134,0
-,851},{4,0,498},{132,11,293},{7,0,217},{8,0,140},{10,0,610},{14,11,352},{17,11,
-53},{18,11,146},{18,11,152},{19,11,11},{150,11,54},{134,0,1448},{138,11,841},{
-133,0,905},{4,11,605},{7,11,518},{7,11,1282},{7,11,1918},{10,11,180},{139,11,218
-},{139,11,917},{135,10,825},{140,10,328},{4,0,456},{7,0,105},{7,0,358},{7,0,1637
-},{8,0,643},{139,0,483},{134,0,792},{6,11,96},{135,11,1426},{137,11,691},{4,11,
-651},{133,11,289},{7,11,688},{8,11,35},{9,11,511},{10,11,767},{147,11,118},{150,
-0,56},{5,0,243},{5,0,535},{6,10,204},{10,10,320},{10,10,583},{13,10,502},{14,10,
-72},{14,10,274},{14,10,312},{14,10,344},{15,10,159},{16,10,62},{16,10,69},{17,10
-,30},{18,10,42},{18,10,53},{18,10,84},{18,10,140},{19,10,68},{19,10,85},{20,10,5
-},{20,10,45},{20,10,101},{22,10,7},{150,10,20},{4,10,558},{6,10,390},{7,10,162},
-{7,10,689},{9,10,360},{138,10,653},{146,11,23},{135,0,1748},{5,10,856},{6,10,
-1672},{6,10,1757},{134,10,1781},{5,0,539},{5,0,754},{6,0,876},{132,11,704},{135,
-11,1078},{5,10,92},{10,10,736},{140,10,102},{17,0,91},{5,10,590},{137,10,213},{
-134,0,1565},{6,0,91},{135,0,435},{4,0,939},{140,0,792},{134,0,1399},{4,0,16},{5,
-0,316},{5,0,842},{6,0,370},{6,0,1778},{8,0,166},{11,0,812},{12,0,206},{12,0,351}
-,{14,0,418},{16,0,15},{16,0,34},{18,0,3},{19,0,3},{19,0,7},{20,0,4},{21,0,21},{4
-,11,720},{133,11,306},{144,0,95},{133,11,431},{132,11,234},{135,0,551},{4,0,999}
-,{6,0,1966},{134,0,2042},{7,0,619},{10,0,547},{11,0,122},{12,0,601},{15,0,7},{
-148,0,20},{5,11,464},{6,11,236},{7,11,276},{7,11,696},{7,11,914},{7,11,1108},{7,
-11,1448},{9,11,15},{9,11,564},{10,11,14},{12,11,565},{13,11,449},{14,11,53},{15,
-11,13},{16,11,64},{145,11,41},{6,0,884},{6,0,1019},{134,0,1150},{6,11,1767},{12,
-11,194},{145,11,107},{136,10,503},{133,11,840},{7,0,671},{134,10,466},{132,0,888
-},{4,0,149},{138,0,368},{4,0,154},{7,0,1134},{136,0,105},{135,0,983},{9,11,642},
-{11,11,236},{142,11,193},{4,0,31},{6,0,429},{7,0,962},{9,0,458},{139,0,691},{6,0
-,643},{134,0,1102},{132,0,312},{4,11,68},{5,11,634},{6,11,386},{7,11,794},{8,11,
-273},{9,11,563},{10,11,105},{10,11,171},{11,11,94},{139,11,354},{133,0,740},{135
-,0,1642},{4,11,95},{7,11,416},{8,11,211},{139,11,830},{132,0,236},{138,10,241},{
-7,11,731},{13,11,20},{143,11,11},{5,0,836},{5,0,857},{6,0,1680},{135,0,59},{10,0
-,68},{11,0,494},{152,11,6},{4,0,81},{139,0,867},{135,0,795},{133,11,689},{4,0,
-1001},{5,0,282},{6,0,1932},{6,0,1977},{6,0,1987},{6,0,1992},{8,0,650},{8,0,919},
-{8,0,920},{8,0,923},{8,0,926},{8,0,927},{8,0,931},{8,0,939},{8,0,947},{8,0,956},
-{8,0,997},{9,0,907},{10,0,950},{10,0,953},{10,0,954},{10,0,956},{10,0,958},{10,0
-,959},{10,0,964},{10,0,970},{10,0,972},{10,0,973},{10,0,975},{10,0,976},{10,0,
-980},{10,0,981},{10,0,984},{10,0,988},{10,0,990},{10,0,995},{10,0,999},{10,0,
-1002},{10,0,1003},{10,0,1005},{10,0,1006},{10,0,1008},{10,0,1009},{10,0,1012},{
-10,0,1014},{10,0,1015},{10,0,1019},{10,0,1020},{10,0,1022},{12,0,959},{12,0,961}
-,{12,0,962},{12,0,963},{12,0,964},{12,0,965},{12,0,967},{12,0,968},{12,0,969},{
-12,0,970},{12,0,971},{12,0,972},{12,0,973},{12,0,974},{12,0,975},{12,0,976},{12,
-0,977},{12,0,979},{12,0,981},{12,0,982},{12,0,983},{12,0,984},{12,0,985},{12,0,
-986},{12,0,987},{12,0,989},{12,0,990},{12,0,992},{12,0,993},{12,0,995},{12,0,998
-},{12,0,999},{12,0,1000},{12,0,1001},{12,0,1002},{12,0,1004},{12,0,1005},{12,0,
-1006},{12,0,1007},{12,0,1008},{12,0,1009},{12,0,1010},{12,0,1011},{12,0,1012},{
-12,0,1014},{12,0,1015},{12,0,1016},{12,0,1017},{12,0,1018},{12,0,1019},{12,0,
-1022},{12,0,1023},{14,0,475},{14,0,477},{14,0,478},{14,0,479},{14,0,480},{14,0,
-482},{14,0,483},{14,0,484},{14,0,485},{14,0,486},{14,0,487},{14,0,488},{14,0,489
-},{14,0,490},{14,0,491},{14,0,492},{14,0,493},{14,0,494},{14,0,495},{14,0,496},{
-14,0,497},{14,0,498},{14,0,499},{14,0,500},{14,0,501},{14,0,502},{14,0,503},{14,
-0,504},{14,0,506},{14,0,507},{14,0,508},{14,0,509},{14,0,510},{14,0,511},{16,0,
-113},{16,0,114},{16,0,115},{16,0,117},{16,0,118},{16,0,119},{16,0,121},{16,0,122
-},{16,0,123},{16,0,124},{16,0,125},{16,0,126},{16,0,127},{18,0,242},{18,0,243},{
-18,0,244},{18,0,245},{18,0,248},{18,0,249},{18,0,250},{18,0,251},{18,0,252},{18,
-0,253},{18,0,254},{18,0,255},{20,0,125},{20,0,126},{148,0,127},{7,11,1717},{7,11
-,1769},{138,11,546},{7,11,1127},{7,11,1572},{10,11,297},{10,11,422},{11,11,764},
-{11,11,810},{12,11,264},{13,11,102},{13,11,300},{13,11,484},{14,11,147},{14,11,
-229},{17,11,71},{18,11,118},{147,11,120},{6,0,1148},{134,0,1586},{132,0,775},{
-135,10,954},{133,11,864},{133,11,928},{138,11,189},{135,10,1958},{6,10,549},{8,
-10,34},{8,10,283},{9,10,165},{138,10,475},{5,10,652},{5,10,701},{135,10,449},{
-135,11,695},{4,10,655},{7,10,850},{17,10,75},{146,10,137},{140,11,682},{133,11,
-523},{8,0,970},{136,10,670},{136,11,555},{7,11,76},{8,11,44},{9,11,884},{10,11,
-580},{11,11,399},{11,11,894},{15,11,122},{18,11,144},{147,11,61},{6,10,159},{6,
-10,364},{7,10,516},{7,10,1439},{137,10,518},{4,0,71},{5,0,376},{7,0,119},{138,0,
-665},{141,10,151},{11,0,827},{14,0,34},{143,0,148},{133,11,518},{4,0,479},{135,
-11,1787},{135,11,1852},{135,10,993},{7,0,607},{136,0,99},{134,0,1960},{132,0,793
-},{4,0,41},{5,0,74},{7,0,1627},{11,0,871},{140,0,619},{7,0,94},{11,0,329},{11,0,
-965},{12,0,241},{14,0,354},{15,0,22},{148,0,63},{7,10,501},{9,10,111},{10,10,141
-},{11,10,332},{13,10,43},{13,10,429},{14,10,130},{14,10,415},{145,10,102},{9,0,
-209},{137,0,300},{134,0,1497},{138,11,255},{4,11,934},{5,11,138},{136,11,610},{
-133,0,98},{6,0,1316},{10,11,804},{138,11,832},{8,11,96},{9,11,36},{10,11,607},{
-11,11,423},{11,11,442},{12,11,309},{14,11,199},{15,11,90},{145,11,110},{132,0,
-463},{5,10,149},{136,10,233},{133,10,935},{4,11,652},{8,11,320},{9,11,13},{9,11,
-398},{9,11,727},{10,11,75},{10,11,184},{10,11,230},{10,11,564},{10,11,569},{11,
-11,973},{12,11,70},{12,11,189},{13,11,57},{13,11,257},{22,11,6},{150,11,16},{142
-,0,291},{12,10,582},{146,10,131},{136,10,801},{133,0,984},{145,11,116},{4,11,692
-},{133,11,321},{4,0,182},{6,0,205},{135,0,220},{4,0,42},{9,0,205},{9,0,786},{138
-,0,659},{6,0,801},{11,11,130},{140,11,609},{132,0,635},{5,11,345},{135,11,1016},
-{139,0,533},{132,0,371},{4,0,272},{135,0,836},{6,0,1282},{135,11,1100},{5,0,825}
-,{134,0,1640},{135,11,1325},{133,11,673},{4,11,287},{133,11,1018},{135,0,357},{6
-,0,467},{137,0,879},{7,0,317},{135,0,569},{6,0,924},{134,0,1588},{5,11,34},{5,10
-,406},{10,11,724},{12,11,444},{13,11,354},{18,11,32},{23,11,24},{23,11,31},{152,
-11,5},{6,0,1795},{6,0,1835},{6,0,1836},{6,0,1856},{8,0,844},{8,0,849},{8,0,854},
-{8,0,870},{8,0,887},{10,0,852},{138,0,942},{6,10,69},{135,10,117},{137,0,307},{4
-,0,944},{6,0,1799},{6,0,1825},{10,0,848},{10,0,875},{10,0,895},{10,0,899},{10,0,
-902},{140,0,773},{11,0,43},{13,0,72},{141,0,142},{135,10,1830},{134,11,382},{4,
-10,432},{135,10,824},{132,11,329},{7,0,1820},{139,11,124},{133,10,826},{133,0,
-525},{132,11,906},{7,11,1940},{136,11,366},{138,11,10},{4,11,123},{4,11,649},{5,
-11,605},{7,11,1509},{136,11,36},{6,0,110},{135,0,1681},{133,0,493},{133,11,767},
-{4,0,174},{135,0,911},{138,11,786},{8,0,417},{137,0,782},{133,10,1000},{7,0,733}
-,{137,0,583},{4,10,297},{6,10,529},{7,10,152},{7,10,713},{7,10,1845},{8,10,710},
-{8,10,717},{12,10,639},{140,10,685},{4,0,32},{5,0,215},{6,0,269},{7,0,1782},{7,0
-,1892},{10,0,16},{11,0,822},{11,0,954},{141,0,481},{4,11,273},{5,11,658},{133,11
-,995},{136,0,477},{134,11,72},{135,11,1345},{5,0,308},{7,0,1088},{4,10,520},{135
-,10,575},{133,11,589},{5,0,126},{8,0,297},{9,0,366},{140,0,374},{7,0,1551},{139,
-0,361},{5,11,117},{6,11,514},{6,11,541},{7,11,1164},{7,11,1436},{8,11,220},{8,11
-,648},{10,11,688},{139,11,560},{133,11,686},{4,0,946},{6,0,1807},{8,0,871},{10,0
-,854},{10,0,870},{10,0,888},{10,0,897},{10,0,920},{12,0,722},{12,0,761},{12,0,
-763},{12,0,764},{14,0,454},{14,0,465},{16,0,107},{18,0,167},{18,0,168},{146,0,
-172},{132,0,175},{135,0,1307},{132,0,685},{135,11,1834},{133,0,797},{6,0,745},{6
-,0,858},{134,0,963},{133,0,565},{5,10,397},{6,10,154},{7,11,196},{7,10,676},{8,
-10,443},{8,10,609},{9,10,24},{9,10,325},{10,10,35},{10,11,765},{11,11,347},{11,
-10,535},{11,11,552},{11,11,576},{11,10,672},{11,11,790},{11,10,1018},{12,11,263}
-,{12,10,637},{13,11,246},{13,11,270},{13,11,395},{14,11,74},{14,11,176},{14,11,
-190},{14,11,398},{14,11,412},{15,11,32},{15,11,63},{16,10,30},{16,11,88},{147,11
-,105},{13,11,84},{141,11,122},{4,0,252},{7,0,1068},{10,0,434},{11,0,228},{11,0,
-426},{13,0,231},{18,0,106},{148,0,87},{137,0,826},{4,11,589},{139,11,282},{5,11,
-381},{135,11,1792},{132,0,791},{5,0,231},{10,0,509},{133,10,981},{7,0,601},{9,0,
-277},{9,0,674},{10,0,178},{10,0,418},{10,0,571},{11,0,531},{12,0,113},{12,0,475}
-,{13,0,99},{142,0,428},{4,10,56},{7,11,616},{7,10,1791},{8,10,607},{8,10,651},{
-10,11,413},{11,10,465},{11,10,835},{12,10,337},{141,10,480},{7,0,1591},{144,0,43
-},{9,10,158},{138,10,411},{135,0,1683},{8,0,289},{11,0,45},{12,0,278},{140,0,537
-},{6,11,120},{7,11,1188},{7,11,1710},{8,11,286},{9,11,667},{11,11,592},{139,11,
-730},{136,10,617},{135,0,1120},{135,11,1146},{139,10,563},{4,11,352},{4,10,369},
-{135,11,687},{143,11,38},{4,0,399},{5,0,119},{5,0,494},{7,0,751},{9,0,556},{14,
-11,179},{15,11,151},{150,11,11},{4,11,192},{5,11,49},{6,11,200},{6,11,293},{6,11
-,1696},{135,11,488},{4,0,398},{133,0,660},{7,0,1030},{134,10,622},{135,11,595},{
-141,0,168},{132,11,147},{7,0,973},{10,10,624},{142,10,279},{132,10,363},{132,0,
-642},{133,11,934},{134,0,1615},{7,11,505},{135,11,523},{7,0,594},{7,0,851},{7,0,
-1858},{9,0,411},{9,0,574},{9,0,666},{9,0,737},{10,0,346},{10,0,712},{11,0,246},{
-11,0,432},{11,0,517},{11,0,647},{11,0,679},{11,0,727},{12,0,304},{12,0,305},{12,
-0,323},{12,0,483},{12,0,572},{12,0,593},{12,0,602},{13,0,95},{13,0,101},{13,0,
-171},{13,0,315},{13,0,378},{13,0,425},{13,0,475},{14,0,63},{14,0,380},{14,0,384}
-,{15,0,133},{18,0,112},{148,0,72},{135,0,1093},{132,0,679},{8,0,913},{10,0,903},
-{10,0,915},{12,0,648},{12,0,649},{14,0,455},{16,0,112},{138,11,438},{137,0,203},
-{134,10,292},{134,0,1492},{7,0,1374},{8,0,540},{5,10,177},{6,10,616},{7,10,827},
-{9,10,525},{138,10,656},{135,0,1486},{9,0,714},{138,10,31},{136,0,825},{134,0,
-1511},{132,11,637},{134,0,952},{4,10,161},{133,10,631},{5,0,143},{5,0,769},{6,0,
-1760},{7,0,682},{7,0,1992},{136,0,736},{132,0,700},{134,0,1540},{132,11,777},{9,
-11,867},{138,11,837},{7,0,1557},{135,10,1684},{133,0,860},{6,0,422},{7,0,0},{7,0
-,1544},{9,0,605},{11,0,990},{12,0,235},{12,0,453},{13,0,47},{13,0,266},{9,10,469
-},{9,10,709},{12,10,512},{14,10,65},{145,10,12},{11,0,807},{10,10,229},{11,10,73
-},{139,10,376},{6,11,170},{7,11,1080},{8,11,395},{8,11,487},{11,11,125},{141,11,
-147},{5,0,515},{137,0,131},{7,0,1605},{11,0,962},{146,0,139},{132,0,646},{4,0,
-396},{7,0,728},{9,0,117},{13,0,202},{148,0,51},{6,0,121},{6,0,124},{6,0,357},{7,
-0,1138},{7,0,1295},{8,0,162},{8,0,508},{11,0,655},{4,11,535},{6,10,558},{7,10,
-651},{8,11,618},{9,10,0},{10,10,34},{139,10,1008},{135,11,1245},{138,0,357},{150
-,11,23},{133,0,237},{135,0,1784},{7,10,1832},{138,10,374},{132,0,713},{132,11,46
-},{6,0,1536},{10,0,348},{5,11,811},{6,11,1679},{6,11,1714},{135,11,2032},{11,11,
-182},{142,11,195},{6,0,523},{7,0,738},{7,10,771},{7,10,1731},{9,10,405},{138,10,
-421},{7,11,1458},{9,11,407},{139,11,15},{6,11,34},{7,11,69},{7,11,640},{7,11,
-1089},{8,11,708},{8,11,721},{9,11,363},{9,11,643},{10,11,628},{148,11,98},{133,0
-,434},{135,0,1877},{7,0,571},{138,0,366},{5,10,881},{133,10,885},{9,0,513},{10,0
-,25},{10,0,39},{12,0,122},{140,0,187},{132,0,580},{5,10,142},{134,10,546},{132,
-11,462},{137,0,873},{5,10,466},{11,10,571},{12,10,198},{13,10,283},{14,10,186},{
-15,10,21},{143,10,103},{7,0,171},{4,10,185},{5,10,257},{5,10,839},{5,10,936},{9,
-10,399},{10,10,258},{10,10,395},{10,10,734},{11,10,1014},{12,10,23},{13,10,350},
-{14,10,150},{147,10,6},{134,0,625},{7,0,107},{7,0,838},{8,0,550},{138,0,401},{5,
-11,73},{6,11,23},{134,11,338},{4,0,943},{6,0,1850},{12,0,713},{142,0,434},{11,0,
-588},{11,0,864},{11,0,936},{11,0,968},{12,0,73},{12,0,343},{12,0,394},{13,0,275}
-,{14,0,257},{15,0,160},{7,10,404},{7,10,1377},{7,10,1430},{7,10,2017},{8,10,149}
-,{8,10,239},{8,10,512},{8,10,793},{8,10,818},{9,10,474},{9,10,595},{10,10,122},{
-10,10,565},{10,10,649},{10,10,783},{11,10,239},{11,10,295},{11,10,447},{11,10,
-528},{11,10,639},{11,10,800},{12,10,25},{12,10,157},{12,10,316},{12,10,390},{12,
-10,391},{12,10,395},{12,10,478},{12,10,503},{12,10,592},{12,10,680},{13,10,50},{
-13,10,53},{13,10,132},{13,10,198},{13,10,322},{13,10,415},{13,10,511},{14,10,71}
-,{14,10,395},{15,10,71},{15,10,136},{17,10,123},{18,10,93},{147,10,58},{133,0,
-768},{11,0,103},{142,0,0},{136,10,712},{132,0,799},{132,0,894},{7,11,725},{8,11,
-498},{139,11,268},{135,11,1798},{135,11,773},{141,11,360},{4,10,377},{152,10,13}
-,{135,0,1673},{132,11,583},{134,0,1052},{133,11,220},{140,11,69},{132,11,544},{4
-,10,180},{135,10,1906},{134,0,272},{4,0,441},{134,0,1421},{4,0,9},{5,0,128},{7,0
-,368},{11,0,480},{148,0,3},{5,11,176},{6,11,437},{6,11,564},{11,11,181},{141,11,
-183},{132,10,491},{7,0,1182},{141,11,67},{6,0,1346},{4,10,171},{138,10,234},{4,
-10,586},{7,10,1186},{138,10,631},{136,0,682},{134,0,1004},{15,0,24},{143,11,24},
-{134,0,968},{4,0,2},{6,0,742},{6,0,793},{7,0,545},{7,0,894},{9,10,931},{10,10,
-334},{148,10,71},{136,11,600},{133,10,765},{9,0,769},{140,0,185},{4,11,790},{5,
-11,273},{134,11,394},{7,0,474},{137,0,578},{4,11,135},{6,11,127},{7,11,1185},{7,
-11,1511},{8,11,613},{11,11,5},{12,11,133},{12,11,495},{12,11,586},{14,11,385},{
-15,11,118},{17,11,20},{146,11,98},{133,10,424},{5,0,530},{142,0,113},{6,11,230},
-{7,11,961},{7,11,1085},{136,11,462},{7,11,1954},{137,11,636},{136,10,714},{149,
-11,6},{135,10,685},{9,10,420},{10,10,269},{10,10,285},{10,10,576},{11,10,397},{
-13,10,175},{145,10,90},{132,10,429},{5,0,556},{5,11,162},{136,11,68},{132,11,654
-},{4,11,156},{7,11,998},{7,11,1045},{7,11,1860},{9,11,48},{9,11,692},{11,11,419}
-,{139,11,602},{6,0,1317},{8,0,16},{9,0,825},{12,0,568},{7,11,1276},{8,11,474},{
-137,11,652},{18,0,97},{7,10,18},{7,10,699},{7,10,1966},{8,10,752},{9,10,273},{9,
-10,412},{9,10,703},{10,10,71},{10,10,427},{138,10,508},{10,0,703},{7,11,1454},{
-138,11,703},{4,10,53},{5,10,186},{135,10,752},{134,0,892},{134,0,1571},{8,10,575
-},{10,10,289},{139,10,319},{6,0,186},{137,0,426},{134,0,1101},{132,10,675},{132,
-0,585},{6,0,1870},{137,0,937},{152,11,10},{9,11,197},{10,11,300},{12,11,473},{13
-,11,90},{141,11,405},{4,0,93},{5,0,252},{6,0,229},{7,0,291},{9,0,550},{139,0,644
-},{137,0,749},{9,0,162},{6,10,209},{8,10,468},{9,10,210},{11,10,36},{12,10,28},{
-12,10,630},{13,10,21},{13,10,349},{14,10,7},{145,10,13},{132,0,381},{132,11,606}
-,{4,10,342},{135,10,1179},{7,11,1587},{7,11,1707},{10,11,528},{139,11,504},{12,
-11,39},{13,11,265},{141,11,439},{4,10,928},{133,10,910},{7,10,1838},{7,11,1978},
-{136,11,676},{6,0,762},{6,0,796},{134,0,956},{4,10,318},{4,10,496},{7,10,856},{
-139,10,654},{137,11,242},{4,11,361},{133,11,315},{132,11,461},{132,11,472},{132,
-0,857},{5,0,21},{6,0,77},{6,0,157},{7,0,974},{7,0,1301},{7,0,1339},{7,0,1490},{7
-,0,1873},{9,0,628},{7,10,915},{8,10,247},{147,10,0},{4,10,202},{5,10,382},{6,10,
-454},{7,10,936},{7,10,1803},{8,10,758},{9,10,375},{9,10,895},{10,10,743},{10,10,
-792},{11,10,978},{11,10,1012},{142,10,109},{7,11,617},{10,11,498},{11,11,501},{
-12,11,16},{140,11,150},{7,10,1150},{7,10,1425},{7,10,1453},{10,11,747},{140,10,
-513},{133,11,155},{11,0,919},{141,0,409},{138,10,791},{10,0,633},{139,11,729},{7
-,11,163},{8,11,319},{9,11,402},{10,11,24},{10,11,681},{11,11,200},{11,11,567},{
-12,11,253},{12,11,410},{142,11,219},{5,11,475},{7,11,1780},{9,11,230},{11,11,297
-},{11,11,558},{14,11,322},{147,11,76},{7,0,332},{6,10,445},{137,10,909},{135,11,
-1956},{136,11,274},{134,10,578},{135,0,1489},{135,11,1848},{5,11,944},{134,11,
-1769},{132,11,144},{136,10,766},{4,0,832},{135,10,541},{8,0,398},{9,0,681},{139,
-0,632},{136,0,645},{9,0,791},{10,0,93},{16,0,13},{17,0,23},{18,0,135},{19,0,12},
-{20,0,1},{20,0,12},{148,0,14},{6,11,247},{137,11,555},{134,0,20},{132,0,800},{
-135,0,1841},{139,10,983},{137,10,768},{132,10,584},{141,11,51},{6,0,1993},{4,11,
-620},{138,11,280},{136,0,769},{11,0,290},{11,0,665},{7,11,1810},{11,11,866},{12,
-11,103},{13,11,495},{17,11,67},{147,11,74},{134,0,1426},{139,0,60},{4,10,326},{
-135,10,1770},{7,0,1874},{9,0,641},{132,10,226},{6,0,644},{5,10,426},{8,10,30},{9
-,10,2},{11,10,549},{147,10,122},{5,11,428},{138,11,442},{135,11,1871},{135,0,
-1757},{147,10,117},{135,0,937},{135,0,1652},{6,0,654},{134,0,1476},{133,11,99},{
-135,0,527},{132,10,345},{4,10,385},{4,11,397},{7,10,265},{135,10,587},{4,0,579},
-{5,0,226},{5,0,323},{135,0,960},{134,0,1486},{8,11,502},{144,11,9},{4,10,347},{5
-,10,423},{5,10,996},{135,10,1329},{7,11,727},{146,11,73},{4,11,485},{7,11,353},{
-7,10,1259},{7,11,1523},{9,10,125},{139,10,65},{6,0,325},{5,10,136},{6,11,366},{7
-,11,1384},{7,11,1601},{136,10,644},{138,11,160},{6,0,1345},{137,11,282},{18,0,91
-},{147,0,70},{136,0,404},{4,11,157},{133,11,471},{133,0,973},{6,0,135},{135,0,
-1176},{8,11,116},{11,11,551},{142,11,159},{4,0,549},{4,10,433},{133,10,719},{136
-,0,976},{5,11,160},{7,11,363},{7,11,589},{10,11,170},{141,11,55},{144,0,21},{144
-,0,51},{135,0,314},{135,10,1363},{4,11,108},{7,11,405},{10,11,491},{139,11,498},
-{146,0,4},{4,10,555},{8,10,536},{10,10,288},{139,10,1005},{135,11,1005},{6,0,281
-},{7,0,6},{8,0,282},{8,0,480},{8,0,499},{9,0,198},{10,0,143},{10,0,169},{10,0,
-211},{10,0,417},{10,0,574},{11,0,147},{11,0,395},{12,0,75},{12,0,407},{12,0,608}
-,{13,0,500},{142,0,251},{6,0,1093},{6,0,1405},{9,10,370},{138,10,90},{4,11,926},
-{133,11,983},{135,0,1776},{134,0,1528},{132,0,419},{132,11,538},{6,11,294},{7,11
-,1267},{136,11,624},{135,11,1772},{138,11,301},{4,10,257},{135,10,2031},{4,0,138
-},{7,0,1012},{7,0,1280},{9,0,76},{135,10,1768},{132,11,757},{5,0,29},{140,0,638}
-,{7,11,655},{135,11,1844},{7,0,1418},{6,11,257},{135,11,1522},{8,11,469},{138,11
-,47},{142,11,278},{6,10,83},{6,10,1733},{135,10,1389},{11,11,204},{11,11,243},{
-140,11,293},{135,11,1875},{6,0,1710},{135,0,2038},{137,11,299},{4,0,17},{5,0,23}
-,{7,0,995},{11,0,383},{11,0,437},{12,0,460},{140,0,532},{133,0,862},{137,10,696}
-,{6,0,592},{138,0,946},{138,11,599},{7,10,1718},{9,10,95},{9,10,274},{10,10,279}
-,{10,10,317},{10,10,420},{11,10,303},{11,10,808},{12,10,134},{12,10,367},{13,10,
-149},{13,10,347},{14,10,349},{14,10,406},{18,10,22},{18,10,89},{18,10,122},{147,
-10,47},{8,0,70},{12,0,171},{141,0,272},{133,10,26},{132,10,550},{137,0,812},{10,
-0,233},{139,0,76},{134,0,988},{134,0,442},{136,10,822},{7,0,896},{4,10,902},{5,
-10,809},{134,10,122},{5,11,150},{7,11,106},{8,11,603},{9,11,593},{9,11,634},{10,
-11,44},{10,11,173},{11,11,462},{11,11,515},{13,11,216},{13,11,288},{142,11,400},
-{136,0,483},{135,10,262},{6,0,1709},{133,10,620},{4,10,34},{5,10,574},{7,10,279}
-,{7,10,1624},{136,10,601},{137,10,170},{147,0,119},{12,11,108},{141,11,291},{11,
-0,69},{12,0,105},{12,0,117},{13,0,213},{14,0,13},{14,0,62},{14,0,177},{14,0,421}
-,{15,0,19},{146,0,141},{137,0,309},{11,11,278},{142,11,73},{7,0,608},{7,0,976},{
-9,0,146},{10,0,206},{10,0,596},{13,0,218},{142,0,153},{133,10,332},{6,10,261},{8
-,10,182},{139,10,943},{4,11,493},{144,11,55},{134,10,1721},{132,0,768},{4,10,933
-},{133,10,880},{7,11,555},{7,11,1316},{7,11,1412},{7,11,1839},{9,11,192},{9,11,
-589},{11,11,241},{11,11,676},{11,11,811},{11,11,891},{12,11,140},{12,11,346},{12
-,11,479},{13,11,30},{13,11,49},{13,11,381},{14,11,188},{15,11,150},{16,11,76},{
-18,11,30},{148,11,52},{4,0,518},{135,0,1136},{6,11,568},{7,11,112},{7,11,1804},{
-8,11,362},{8,11,410},{8,11,830},{9,11,514},{11,11,649},{142,11,157},{135,11,673}
-,{8,0,689},{137,0,863},{4,0,18},{7,0,145},{7,0,444},{7,0,1278},{8,0,49},{8,0,400
-},{9,0,71},{9,0,250},{10,0,459},{12,0,160},{16,0,24},{132,11,625},{140,0,1020},{
-4,0,997},{6,0,1946},{6,0,1984},{134,0,1998},{6,11,16},{6,11,158},{7,11,43},{7,11
-,129},{7,11,181},{8,11,276},{8,11,377},{10,11,523},{11,11,816},{12,11,455},{13,
-11,303},{142,11,135},{133,10,812},{134,0,658},{4,11,1},{7,11,1143},{7,11,1463},{
-8,11,61},{9,11,207},{9,11,390},{9,11,467},{139,11,836},{150,11,26},{140,0,106},{
-6,0,1827},{10,0,931},{18,0,166},{20,0,114},{4,10,137},{7,10,1178},{7,11,1319},{
-135,10,1520},{133,0,1010},{4,11,723},{5,11,895},{7,11,1031},{8,11,199},{8,11,340
-},{9,11,153},{9,11,215},{10,11,21},{10,11,59},{10,11,80},{10,11,224},{11,11,229}
-,{11,11,652},{12,11,192},{13,11,146},{142,11,91},{132,11,295},{6,11,619},{7,11,
-898},{7,11,1092},{8,11,485},{18,11,28},{147,11,116},{137,11,51},{6,10,1661},{7,
-10,1975},{7,10,2009},{135,10,2011},{5,11,309},{140,11,211},{5,0,87},{7,0,313},{7
-,0,1103},{10,0,208},{10,0,582},{11,0,389},{11,0,813},{12,0,385},{13,0,286},{14,0
-,124},{146,0,108},{5,11,125},{8,11,77},{138,11,15},{132,0,267},{133,0,703},{137,
-11,155},{133,11,439},{11,11,164},{140,11,76},{9,0,496},{5,10,89},{7,10,1915},{9,
-10,185},{9,10,235},{10,10,64},{10,10,270},{10,10,403},{10,10,469},{10,10,529},{
-10,10,590},{11,10,140},{11,10,860},{13,10,1},{13,10,422},{14,10,341},{14,10,364}
-,{17,10,93},{18,10,113},{19,10,97},{147,10,113},{133,10,695},{135,0,1121},{5,10,
-6},{6,10,183},{7,10,680},{7,10,978},{7,10,1013},{7,10,1055},{12,10,230},{13,10,
-172},{146,10,29},{4,11,8},{7,11,1152},{7,11,1153},{7,11,1715},{9,11,374},{10,11,
-478},{139,11,648},{135,11,1099},{6,10,29},{139,10,63},{4,0,561},{10,0,249},{139,
-0,209},{132,0,760},{7,11,799},{138,11,511},{136,11,87},{9,0,154},{140,0,485},{
-136,0,255},{132,0,323},{140,0,419},{132,10,311},{134,10,1740},{4,0,368},{135,0,
-641},{7,10,170},{8,10,90},{8,10,177},{8,10,415},{11,10,714},{142,10,281},{4,11,
-69},{5,11,122},{9,11,656},{138,11,464},{5,11,849},{134,11,1633},{8,0,522},{142,0
-,328},{11,10,91},{13,10,129},{15,10,101},{145,10,125},{7,0,562},{8,0,551},{4,10,
-494},{6,10,74},{7,10,44},{11,11,499},{12,10,17},{15,10,5},{148,10,11},{4,10,276}
-,{133,10,296},{9,0,92},{147,0,91},{4,10,7},{5,10,90},{5,10,158},{6,10,542},{7,10
-,221},{7,10,1574},{9,10,490},{10,10,540},{11,10,443},{139,10,757},{6,0,525},{6,0
-,1976},{8,0,806},{9,0,876},{140,0,284},{5,11,859},{7,10,588},{7,11,1160},{8,11,
-107},{9,10,175},{9,11,291},{9,11,439},{10,10,530},{10,11,663},{11,11,609},{140,
-11,197},{7,11,168},{13,11,196},{141,11,237},{139,0,958},{133,0,594},{135,10,580}
-,{7,10,88},{136,10,627},{6,0,479},{6,0,562},{7,0,1060},{13,0,6},{5,10,872},{6,10
-,57},{7,10,471},{9,10,447},{137,10,454},{136,11,413},{145,11,19},{4,11,117},{6,
-11,372},{7,11,1905},{142,11,323},{4,11,722},{139,11,471},{17,0,61},{5,10,31},{
-134,10,614},{8,10,330},{140,10,477},{7,10,1200},{138,10,460},{6,10,424},{135,10,
-1866},{6,0,1641},{136,0,820},{6,0,1556},{134,0,1618},{9,11,5},{12,11,216},{12,11
-,294},{12,11,298},{12,11,400},{12,11,518},{13,11,229},{143,11,139},{15,11,155},{
-144,11,79},{4,0,302},{135,0,1766},{5,10,13},{134,10,142},{6,0,148},{7,0,1313},{7
-,10,116},{8,10,322},{8,10,755},{9,10,548},{10,10,714},{11,10,884},{141,10,324},{
-137,0,676},{9,11,88},{139,11,270},{5,11,12},{7,11,375},{137,11,438},{134,0,1674}
-,{7,10,1472},{135,10,1554},{11,0,178},{7,10,1071},{7,10,1541},{7,10,1767},{7,10,
-1806},{11,10,162},{11,10,242},{12,10,605},{15,10,26},{144,10,44},{6,0,389},{7,0,
-149},{9,0,142},{138,0,94},{140,11,71},{145,10,115},{6,0,8},{7,0,1881},{8,0,91},{
-11,11,966},{12,11,287},{13,11,342},{13,11,402},{15,11,110},{143,11,163},{4,11,
-258},{136,11,639},{6,11,22},{7,11,903},{138,11,577},{133,11,681},{135,10,1111},{
-135,11,1286},{9,0,112},{8,10,1},{138,10,326},{5,10,488},{6,10,527},{7,10,489},{7
-,10,1636},{8,10,121},{8,10,144},{8,10,359},{9,10,193},{9,10,241},{9,10,336},{9,
-10,882},{11,10,266},{11,10,372},{11,10,944},{12,10,401},{140,10,641},{4,11,664},
-{133,11,804},{6,0,747},{134,0,1015},{135,0,1746},{9,10,31},{10,10,244},{10,10,
-699},{12,10,149},{141,10,497},{133,10,377},{135,0,24},{6,0,1352},{5,11,32},{145,
-10,101},{7,0,1530},{10,0,158},{13,0,13},{13,0,137},{13,0,258},{14,0,111},{14,0,
-225},{14,0,253},{14,0,304},{14,0,339},{14,0,417},{146,0,33},{4,0,503},{135,0,
-1661},{5,0,130},{6,0,845},{7,0,1314},{9,0,610},{10,0,718},{11,0,601},{11,0,819},
-{11,0,946},{140,0,536},{10,0,149},{11,0,280},{142,0,336},{134,0,1401},{135,0,
-1946},{8,0,663},{144,0,8},{134,0,1607},{135,10,2023},{4,11,289},{7,11,629},{7,11
-,1698},{7,11,1711},{140,11,215},{6,11,450},{136,11,109},{10,0,882},{10,0,883},{
-10,0,914},{138,0,928},{133,10,843},{136,11,705},{132,10,554},{133,10,536},{5,0,
-417},{9,10,79},{11,10,625},{145,10,7},{7,11,1238},{142,11,37},{4,0,392},{135,0,
-1597},{5,0,433},{9,0,633},{11,0,629},{132,10,424},{7,10,336},{136,10,785},{134,
-11,355},{6,0,234},{7,0,769},{9,0,18},{138,0,358},{4,10,896},{134,10,1777},{138,
-11,323},{7,0,140},{7,0,1950},{8,0,680},{11,0,817},{147,0,88},{7,0,1222},{138,0,
-386},{139,11,908},{11,0,249},{12,0,313},{16,0,66},{145,0,26},{134,0,5},{7,10,750
-},{9,10,223},{11,10,27},{11,10,466},{12,10,624},{14,10,265},{146,10,61},{134,11,
-26},{134,0,1216},{5,0,963},{134,0,1773},{4,11,414},{5,11,467},{9,11,654},{10,11,
-451},{12,11,59},{141,11,375},{135,11,17},{4,10,603},{133,10,661},{4,10,11},{6,10
-,128},{7,10,231},{7,10,1533},{138,10,725},{135,11,955},{7,0,180},{8,0,509},{136,
-0,792},{132,10,476},{132,0,1002},{133,11,538},{135,10,1807},{132,0,931},{7,0,943
-},{11,0,614},{140,0,747},{135,0,1837},{9,10,20},{10,10,324},{10,10,807},{139,10,
-488},{134,0,641},{6,11,280},{10,11,502},{11,11,344},{140,11,38},{5,11,45},{7,11,
-1161},{11,11,448},{11,11,880},{13,11,139},{13,11,407},{15,11,16},{17,11,95},{18,
-11,66},{18,11,88},{18,11,123},{149,11,7},{9,0,280},{138,0,134},{22,0,22},{23,0,5
-},{151,0,29},{136,11,777},{4,0,90},{5,0,545},{7,0,754},{9,0,186},{10,0,72},{10,0
-,782},{11,0,577},{11,0,610},{11,0,960},{12,0,354},{12,0,362},{12,0,595},{4,11,
-410},{135,11,521},{135,11,1778},{5,10,112},{6,10,103},{134,10,150},{138,10,356},
-{132,0,742},{7,0,151},{9,0,329},{139,0,254},{8,0,853},{8,0,881},{8,0,911},{8,0,
-912},{10,0,872},{12,0,741},{12,0,742},{152,0,18},{4,11,573},{136,11,655},{6,0,
-921},{134,0,934},{9,0,187},{10,0,36},{11,0,1016},{17,0,44},{146,0,64},{7,0,833},
-{136,0,517},{4,0,506},{5,0,295},{135,0,1680},{4,10,708},{8,10,15},{9,10,50},{9,
-10,386},{11,10,18},{11,10,529},{140,10,228},{7,0,251},{7,0,1701},{8,0,436},{4,10
-,563},{7,10,592},{7,10,637},{7,10,770},{8,10,463},{9,10,60},{9,10,335},{9,10,904
-},{10,10,73},{11,10,434},{12,10,585},{13,10,331},{18,10,110},{148,10,60},{132,10
-,502},{136,0,584},{6,10,347},{138,10,161},{7,0,987},{9,0,688},{10,0,522},{11,0,
-788},{12,0,137},{12,0,566},{14,0,9},{14,0,24},{14,0,64},{7,11,899},{142,11,325},
-{4,0,214},{5,0,500},{5,10,102},{6,10,284},{7,10,1079},{7,10,1423},{7,10,1702},{8
-,10,470},{9,10,554},{9,10,723},{139,10,333},{7,10,246},{135,10,840},{6,10,10},{8
-,10,571},{9,10,739},{143,10,91},{133,10,626},{146,0,195},{134,0,1775},{7,0,389},
-{7,0,700},{7,0,940},{8,0,514},{9,0,116},{9,0,535},{10,0,118},{11,0,107},{11,0,
-148},{11,0,922},{12,0,254},{12,0,421},{142,0,238},{5,10,18},{6,10,526},{13,10,24
-},{13,10,110},{19,10,5},{147,10,44},{132,0,743},{11,0,292},{4,10,309},{5,10,462}
-,{7,10,970},{135,10,1097},{22,10,30},{150,10,33},{139,11,338},{135,11,1598},{7,0
-,1283},{9,0,227},{11,0,325},{11,0,408},{14,0,180},{146,0,47},{4,0,953},{6,0,1805
-},{6,0,1814},{6,0,1862},{140,0,774},{6,11,611},{135,11,1733},{135,11,1464},{5,0,
-81},{7,0,146},{7,0,1342},{8,0,53},{8,0,561},{8,0,694},{8,0,754},{9,0,115},{9,0,
-179},{9,0,894},{10,0,462},{10,0,813},{11,0,230},{11,0,657},{11,0,699},{11,0,748}
-,{12,0,119},{12,0,200},{12,0,283},{142,0,273},{5,0,408},{6,0,789},{6,0,877},{6,0
-,1253},{6,0,1413},{137,0,747},{134,10,1704},{135,11,663},{6,0,1910},{6,0,1915},{
-6,0,1923},{9,0,913},{9,0,928},{9,0,950},{9,0,954},{9,0,978},{9,0,993},{12,0,812}
-,{12,0,819},{12,0,831},{12,0,833},{12,0,838},{12,0,909},{12,0,928},{12,0,931},{
-12,0,950},{15,0,186},{15,0,187},{15,0,195},{15,0,196},{15,0,209},{15,0,215},{15,
-0,236},{15,0,241},{15,0,249},{15,0,253},{18,0,180},{18,0,221},{18,0,224},{18,0,
-227},{18,0,229},{149,0,60},{7,0,1826},{135,0,1938},{11,0,490},{18,0,143},{5,10,
-86},{7,10,743},{9,10,85},{10,10,281},{10,10,432},{12,10,251},{13,10,118},{142,10
-,378},{5,10,524},{133,10,744},{141,11,442},{10,10,107},{140,10,436},{135,11,503}
-,{134,0,1162},{132,10,927},{7,0,30},{8,0,86},{8,0,315},{8,0,700},{9,0,576},{9,0,
-858},{10,0,414},{11,0,310},{11,0,888},{11,0,904},{12,0,361},{13,0,248},{13,0,371
-},{14,0,142},{12,10,670},{146,10,94},{134,0,721},{4,11,113},{5,11,163},{5,11,735
-},{7,11,1009},{7,10,1149},{9,11,9},{9,10,156},{9,11,771},{12,11,90},{13,11,138},
-{13,11,410},{143,11,128},{138,0,839},{133,10,778},{137,0,617},{133,10,502},{8,10
-,196},{10,10,283},{139,10,406},{6,0,428},{7,0,524},{8,0,169},{8,0,234},{9,0,480}
-,{138,0,646},{133,10,855},{134,0,1648},{7,0,1205},{138,0,637},{7,0,1596},{4,11,
-935},{133,11,823},{5,11,269},{7,11,434},{7,11,891},{8,11,339},{9,11,702},{11,11,
-594},{11,11,718},{145,11,100},{7,11,878},{9,11,485},{141,11,264},{4,0,266},{8,0,
-4},{9,0,39},{10,0,166},{11,0,918},{12,0,635},{20,0,10},{22,0,27},{22,0,43},{22,0
-,52},{134,11,1713},{7,10,1400},{9,10,446},{138,10,45},{135,11,900},{132,0,862},{
-134,0,1554},{135,11,1033},{19,0,16},{147,11,16},{135,11,1208},{7,0,157},{136,0,
-279},{6,0,604},{136,0,391},{13,10,455},{15,10,99},{15,10,129},{144,10,68},{135,
-10,172},{7,0,945},{11,0,713},{139,0,744},{4,0,973},{10,0,877},{10,0,937},{10,0,
-938},{140,0,711},{139,0,1022},{132,10,568},{142,11,143},{4,0,567},{9,0,859},{132
-,10,732},{7,0,1846},{136,0,628},{136,10,733},{133,0,762},{4,10,428},{135,10,1789
-},{10,0,784},{13,0,191},{7,10,2015},{140,10,665},{133,0,298},{7,0,633},{7,0,905}
-,{7,0,909},{7,0,1538},{9,0,767},{140,0,636},{138,10,806},{132,0,795},{139,0,301}
-,{135,0,1970},{5,11,625},{135,11,1617},{135,11,275},{7,11,37},{8,11,425},{8,11,
-693},{9,11,720},{10,11,380},{10,11,638},{11,11,273},{11,11,307},{11,11,473},{12,
-11,61},{143,11,43},{135,11,198},{134,0,1236},{7,0,369},{12,0,644},{12,0,645},{
-144,0,90},{19,0,15},{149,0,27},{6,0,71},{7,0,845},{8,0,160},{9,0,318},{6,10,1623
-},{134,10,1681},{134,0,1447},{134,0,1255},{138,0,735},{8,0,76},{132,11,168},{6,
-10,1748},{8,10,715},{9,10,802},{10,10,46},{10,10,819},{13,10,308},{14,10,351},{
-14,10,363},{146,10,67},{135,11,91},{6,0,474},{4,10,63},{133,10,347},{133,10,749}
-,{138,0,841},{133,10,366},{6,0,836},{132,11,225},{135,0,1622},{135,10,89},{140,0
-,735},{134,0,1601},{138,11,145},{6,0,1390},{137,0,804},{142,0,394},{6,11,15},{7,
-11,70},{10,11,240},{147,11,93},{6,0,96},{135,0,1426},{4,0,651},{133,0,289},{7,11
-,956},{7,10,977},{7,11,1157},{7,11,1506},{7,11,1606},{7,11,1615},{7,11,1619},{7,
-11,1736},{7,11,1775},{8,11,590},{9,11,324},{9,11,736},{9,11,774},{9,11,776},{9,
-11,784},{10,11,567},{10,11,708},{11,11,518},{11,11,613},{11,11,695},{11,11,716},
-{11,11,739},{11,11,770},{11,11,771},{11,11,848},{11,11,857},{11,11,931},{11,11,
-947},{12,11,326},{12,11,387},{12,11,484},{12,11,528},{12,11,552},{12,11,613},{13
-,11,189},{13,11,256},{13,11,340},{13,11,432},{13,11,436},{13,11,440},{13,11,454}
-,{14,11,174},{14,11,220},{14,11,284},{14,11,390},{145,11,121},{7,0,688},{8,0,35}
-,{9,0,511},{10,0,767},{147,0,118},{134,0,667},{4,0,513},{5,10,824},{133,10,941},
-{7,10,440},{8,10,230},{139,10,106},{134,0,2034},{135,11,1399},{143,11,66},{135,
-11,1529},{4,11,145},{6,11,176},{7,11,395},{9,11,562},{144,11,28},{132,11,501},{
-132,0,704},{134,0,1524},{7,0,1078},{134,11,464},{6,11,509},{10,11,82},{20,11,91}
-,{151,11,13},{4,0,720},{133,0,306},{133,0,431},{7,0,1196},{4,10,914},{5,10,800},
-{133,10,852},{135,11,1189},{10,0,54},{141,10,115},{7,10,564},{142,10,168},{5,0,
-464},{6,0,236},{7,0,696},{7,0,914},{7,0,1108},{7,0,1448},{9,0,15},{9,0,564},{10,
-0,14},{12,0,565},{13,0,449},{14,0,53},{15,0,13},{16,0,64},{17,0,41},{4,10,918},{
-133,10,876},{6,0,1418},{134,10,1764},{4,10,92},{133,10,274},{134,0,907},{4,11,
-114},{8,10,501},{9,11,492},{13,11,462},{142,11,215},{4,11,77},{5,11,361},{6,11,
-139},{6,11,401},{6,11,404},{7,11,413},{7,11,715},{7,11,1716},{11,11,279},{12,11,
-179},{12,11,258},{13,11,244},{142,11,358},{6,0,1767},{12,0,194},{145,0,107},{134
-,11,1717},{5,10,743},{142,11,329},{4,10,49},{7,10,280},{135,10,1633},{5,0,840},{
-7,11,1061},{8,11,82},{11,11,250},{12,11,420},{141,11,184},{135,11,724},{134,0,
-900},{136,10,47},{134,0,1436},{144,11,0},{6,0,675},{7,0,1008},{7,0,1560},{9,0,
-642},{11,0,236},{14,0,193},{5,10,272},{5,10,908},{5,10,942},{8,10,197},{9,10,47}
-,{11,10,538},{139,10,742},{4,0,68},{5,0,628},{5,0,634},{6,0,386},{7,0,794},{8,0,
-273},{9,0,563},{10,0,105},{10,0,171},{11,0,94},{139,0,354},{135,10,1911},{137,10
-,891},{4,0,95},{6,0,1297},{6,0,1604},{7,0,416},{139,0,830},{6,11,513},{135,11,
-1052},{7,0,731},{13,0,20},{143,0,11},{137,11,899},{10,0,850},{140,0,697},{4,0,
-662},{7,11,1417},{12,11,382},{17,11,48},{152,11,12},{133,0,736},{132,0,861},{4,
-10,407},{132,10,560},{141,10,490},{6,11,545},{7,11,565},{7,11,1669},{10,11,114},
-{11,11,642},{140,11,618},{6,0,871},{134,0,1000},{5,0,864},{10,0,648},{11,0,671},
-{15,0,46},{133,11,5},{133,0,928},{11,0,90},{13,0,7},{4,10,475},{11,10,35},{13,10
-,71},{13,10,177},{142,10,422},{136,0,332},{135,11,192},{134,0,1055},{136,11,763}
-,{11,0,986},{140,0,682},{7,0,76},{8,0,44},{9,0,884},{10,0,580},{11,0,399},{11,0,
-894},{143,0,122},{135,11,1237},{135,10,636},{11,0,300},{6,10,222},{7,10,1620},{8
-,10,409},{137,10,693},{4,11,87},{5,11,250},{10,11,601},{13,11,298},{13,11,353},{
-141,11,376},{5,0,518},{10,0,340},{11,0,175},{149,0,16},{140,0,771},{6,0,1108},{
-137,0,831},{132,0,836},{135,0,1852},{4,0,957},{6,0,1804},{8,0,842},{8,0,843},{8,
-0,851},{8,0,855},{140,0,767},{135,11,814},{4,11,57},{7,11,1195},{7,11,1438},{7,
-11,1548},{7,11,1835},{7,11,1904},{9,11,757},{10,11,604},{139,11,519},{133,10,882
-},{138,0,246},{4,0,934},{5,0,202},{8,0,610},{7,11,1897},{12,11,290},{13,11,80},{
-13,11,437},{145,11,74},{8,0,96},{9,0,36},{10,0,607},{10,0,804},{10,0,832},{11,0,
-423},{11,0,442},{12,0,309},{14,0,199},{15,0,90},{145,0,110},{132,10,426},{7,0,
-654},{8,0,240},{6,10,58},{7,10,745},{7,10,1969},{8,10,675},{9,10,479},{9,10,731}
-,{10,10,330},{10,10,593},{10,10,817},{11,10,32},{11,10,133},{11,10,221},{145,10,
-68},{9,0,13},{9,0,398},{9,0,727},{10,0,75},{10,0,184},{10,0,230},{10,0,564},{10,
-0,569},{11,0,973},{12,0,70},{12,0,189},{13,0,57},{141,0,257},{4,11,209},{135,11,
-902},{7,0,391},{137,10,538},{134,0,403},{6,11,303},{7,11,335},{7,11,1437},{7,11,
-1668},{8,11,553},{8,11,652},{8,11,656},{9,11,558},{11,11,743},{149,11,18},{132,
-11,559},{11,0,75},{142,0,267},{6,0,815},{141,11,2},{141,0,366},{137,0,631},{133,
-11,1017},{5,0,345},{135,0,1016},{133,11,709},{134,11,1745},{133,10,566},{7,0,952
-},{6,10,48},{9,10,139},{10,10,399},{11,10,469},{12,10,634},{141,10,223},{133,0,
-673},{9,0,850},{7,11,8},{136,11,206},{6,0,662},{149,0,35},{4,0,287},{133,0,1018}
-,{6,10,114},{7,10,1224},{7,10,1556},{136,10,3},{8,10,576},{137,10,267},{4,0,884}
-,{5,0,34},{10,0,724},{12,0,444},{13,0,354},{18,0,32},{23,0,24},{23,0,31},{152,0,
-5},{133,10,933},{132,11,776},{138,0,151},{136,0,427},{134,0,382},{132,0,329},{9,
-0,846},{10,0,827},{138,11,33},{9,0,279},{10,0,407},{14,0,84},{22,0,18},{135,11,
-1297},{136,11,406},{132,0,906},{136,0,366},{134,0,843},{134,0,1443},{135,0,1372}
-,{138,0,992},{4,0,123},{5,0,605},{7,0,1509},{136,0,36},{132,0,649},{8,11,175},{
-10,11,168},{138,11,573},{133,0,767},{134,0,1018},{135,11,1305},{12,10,30},{13,10
-,148},{14,10,87},{14,10,182},{16,10,42},{148,10,70},{134,11,607},{4,0,273},{5,0,
-658},{133,0,995},{6,0,72},{139,11,174},{10,0,483},{12,0,368},{7,10,56},{7,10,
-1989},{8,10,337},{8,10,738},{9,10,600},{13,10,447},{142,10,92},{5,11,784},{138,
-10,666},{135,0,1345},{139,11,882},{134,0,1293},{133,0,589},{134,0,1988},{5,0,117
-},{6,0,514},{6,0,541},{7,0,1164},{7,0,1436},{8,0,220},{8,0,648},{10,0,688},{139,
-0,560},{136,0,379},{5,0,686},{7,10,866},{135,10,1163},{132,10,328},{9,11,14},{9,
-11,441},{10,11,306},{139,11,9},{4,10,101},{135,10,1171},{5,10,833},{136,10,744},
-{5,11,161},{7,11,839},{135,11,887},{7,0,196},{10,0,765},{11,0,347},{11,0,552},{
-11,0,790},{12,0,263},{13,0,246},{13,0,270},{13,0,395},{14,0,176},{14,0,190},{14,
-0,398},{14,0,412},{15,0,32},{15,0,63},{16,0,88},{147,0,105},{6,10,9},{6,10,397},
-{7,10,53},{7,10,1742},{10,10,632},{11,10,828},{140,10,146},{5,0,381},{135,0,1792
-},{134,0,1452},{135,11,429},{8,0,367},{10,0,760},{14,0,79},{20,0,17},{152,0,0},{
-7,0,616},{138,0,413},{11,10,417},{12,10,223},{140,10,265},{7,11,1611},{13,11,14}
-,{15,11,44},{19,11,13},{148,11,76},{135,0,1229},{6,0,120},{7,0,1188},{7,0,1710},
-{8,0,286},{9,0,667},{11,0,592},{139,0,730},{135,11,1814},{135,0,1146},{4,10,186}
-,{5,10,157},{8,10,168},{138,10,6},{4,0,352},{135,0,687},{4,0,192},{5,0,49},{6,0,
-200},{6,0,293},{6,0,1696},{135,0,1151},{133,10,875},{5,10,773},{5,10,991},{6,10,
-1635},{134,10,1788},{7,10,111},{136,10,581},{6,0,935},{134,0,1151},{134,0,1050},
-{132,0,650},{132,0,147},{11,0,194},{12,0,62},{12,0,88},{11,11,194},{12,11,62},{
-140,11,88},{6,0,339},{135,0,923},{134,10,1747},{7,11,643},{136,11,236},{133,0,
-934},{7,10,1364},{7,10,1907},{141,10,158},{132,10,659},{4,10,404},{135,10,675},{
-7,11,581},{9,11,644},{137,11,699},{13,0,211},{14,0,133},{14,0,204},{15,0,64},{15
-,0,69},{15,0,114},{16,0,10},{19,0,23},{19,0,35},{19,0,39},{19,0,51},{19,0,71},{
-19,0,75},{152,0,15},{133,10,391},{5,11,54},{135,11,1513},{7,0,222},{8,0,341},{5,
-10,540},{134,10,1697},{134,10,78},{132,11,744},{136,0,293},{137,11,701},{7,11,
-930},{10,11,402},{10,11,476},{13,11,452},{18,11,55},{147,11,104},{132,0,637},{
-133,10,460},{8,11,50},{137,11,624},{132,11,572},{134,0,1159},{4,10,199},{139,10,
-34},{134,0,847},{134,10,388},{6,11,43},{7,11,38},{8,11,248},{9,11,504},{138,11,
-513},{9,0,683},{4,10,511},{6,10,608},{9,10,333},{10,10,602},{11,10,441},{11,10,
-723},{11,10,976},{140,10,357},{9,0,867},{138,0,837},{6,0,944},{135,11,326},{135,
-0,1809},{5,10,938},{7,11,783},{136,10,707},{133,11,766},{133,11,363},{6,0,170},{
-7,0,1080},{8,0,395},{8,0,487},{141,0,147},{6,11,258},{140,11,409},{4,0,535},{8,0
-,618},{5,11,249},{148,11,82},{6,0,1379},{149,11,15},{135,0,1625},{150,0,23},{5,
-11,393},{6,11,378},{7,11,1981},{9,11,32},{9,11,591},{10,11,685},{10,11,741},{142
-,11,382},{133,11,788},{7,11,1968},{10,11,19},{139,11,911},{7,11,1401},{135,11,
-1476},{4,11,61},{5,11,58},{5,11,171},{5,11,635},{5,11,683},{5,11,700},{6,11,291}
-,{6,11,566},{7,11,1650},{11,11,523},{12,11,273},{12,11,303},{15,11,39},{143,11,
-111},{6,10,469},{7,10,1709},{138,10,515},{4,0,778},{134,11,589},{132,0,46},{5,0,
-811},{6,0,1679},{6,0,1714},{135,0,2032},{7,0,1458},{9,0,407},{11,0,15},{12,0,651
-},{149,0,37},{7,0,938},{132,10,500},{6,0,34},{7,0,69},{7,0,1089},{7,0,1281},{8,0
-,708},{8,0,721},{9,0,363},{148,0,98},{10,11,231},{147,11,124},{7,11,726},{152,11
-,9},{5,10,68},{134,10,383},{136,11,583},{4,11,917},{133,11,1005},{11,10,216},{
-139,10,340},{135,11,1675},{8,0,441},{10,0,314},{143,0,3},{132,11,919},{4,10,337}
-,{6,10,353},{7,10,1934},{8,10,488},{137,10,429},{7,0,889},{7,10,1795},{8,10,259}
-,{9,10,135},{9,10,177},{9,10,860},{10,10,825},{11,10,115},{11,10,370},{11,10,405
-},{11,10,604},{12,10,10},{12,10,667},{12,10,669},{13,10,76},{14,10,310},{15,10,
-76},{15,10,147},{148,10,23},{4,10,15},{4,11,255},{5,10,22},{5,11,302},{6,11,132}
-,{6,10,244},{7,10,40},{7,11,128},{7,10,200},{7,11,283},{7,10,906},{7,10,1199},{7
-,11,1299},{9,10,616},{10,11,52},{10,11,514},{10,10,716},{11,10,635},{11,10,801},
-{11,11,925},{12,10,458},{13,11,92},{142,11,309},{132,0,462},{137,11,173},{135,10
-,1735},{8,0,525},{5,10,598},{7,10,791},{8,10,108},{137,10,123},{5,0,73},{6,0,23}
-,{134,0,338},{132,0,676},{132,10,683},{7,0,725},{8,0,498},{139,0,268},{12,0,21},
-{151,0,7},{135,0,773},{4,10,155},{135,10,1689},{4,0,164},{5,0,730},{5,10,151},{5
-,10,741},{6,11,210},{7,10,498},{7,10,870},{7,10,1542},{12,10,213},{14,10,36},{14
-,10,391},{17,10,111},{18,10,6},{18,10,46},{18,10,151},{19,10,36},{20,10,32},{20,
-10,56},{20,10,69},{20,10,102},{21,10,4},{22,10,8},{22,10,10},{22,10,14},{150,10,
-31},{4,10,624},{135,10,1752},{4,0,583},{9,0,936},{15,0,214},{18,0,199},{24,0,26}
-,{134,11,588},{7,0,1462},{11,0,659},{4,11,284},{134,11,223},{133,0,220},{139,0,
-803},{132,0,544},{4,10,492},{133,10,451},{16,0,98},{148,0,119},{4,11,218},{7,11,
-526},{143,11,137},{135,10,835},{4,11,270},{5,11,192},{6,11,332},{7,11,1322},{13,
-11,9},{13,10,70},{14,11,104},{142,11,311},{132,10,539},{140,11,661},{5,0,176},{6
-,0,437},{6,0,564},{11,0,181},{141,0,183},{135,0,1192},{6,10,113},{135,10,436},{
-136,10,718},{135,10,520},{135,0,1878},{140,11,196},{7,11,379},{8,11,481},{137,11
-,377},{5,11,1003},{6,11,149},{137,11,746},{8,11,262},{9,11,627},{10,11,18},{11,
-11,214},{11,11,404},{11,11,457},{11,11,780},{11,11,849},{11,11,913},{13,11,330},
-{13,11,401},{142,11,200},{149,0,26},{136,11,304},{132,11,142},{135,0,944},{4,0,
-790},{5,0,273},{134,0,394},{134,0,855},{4,0,135},{6,0,127},{7,0,1185},{7,0,1511}
-,{8,0,613},{11,0,5},{12,0,336},{12,0,495},{12,0,586},{12,0,660},{12,0,668},{14,0
-,385},{15,0,118},{17,0,20},{146,0,98},{6,0,230},{9,0,752},{18,0,109},{12,10,610}
-,{13,10,431},{144,10,59},{7,0,1954},{135,11,925},{4,11,471},{5,11,51},{6,11,602}
-,{8,11,484},{10,11,195},{140,11,159},{132,10,307},{136,11,688},{132,11,697},{7,
-11,812},{7,11,1261},{7,11,1360},{9,11,632},{140,11,352},{5,0,162},{8,0,68},{133,
-10,964},{4,0,654},{136,11,212},{4,0,156},{7,0,998},{7,0,1045},{7,0,1860},{9,0,48
-},{9,0,692},{11,0,419},{139,0,602},{133,11,221},{4,11,373},{5,11,283},{6,11,480}
-,{135,11,609},{142,11,216},{132,0,240},{6,11,192},{9,11,793},{145,11,55},{4,10,
-75},{5,10,180},{6,10,500},{7,10,58},{7,10,710},{138,10,645},{4,11,132},{5,11,69}
-,{5,10,649},{135,11,1242},{6,10,276},{7,10,282},{7,10,879},{7,10,924},{8,10,459}
-,{9,10,599},{9,10,754},{11,10,574},{12,10,128},{12,10,494},{13,10,52},{13,10,301
-},{15,10,30},{143,10,132},{132,10,200},{4,11,111},{135,11,302},{9,0,197},{10,0,
-300},{12,0,473},{13,0,90},{141,0,405},{132,11,767},{6,11,42},{7,11,1416},{7,11,
-1590},{7,11,2005},{8,11,131},{8,11,466},{9,11,672},{13,11,252},{148,11,103},{8,0
-,958},{8,0,999},{10,0,963},{138,0,1001},{135,10,1621},{135,0,858},{4,0,606},{137
-,11,444},{6,11,44},{136,11,368},{139,11,172},{4,11,570},{133,11,120},{139,11,624
-},{7,0,1978},{8,0,676},{6,10,225},{137,10,211},{7,0,972},{11,0,102},{136,10,687}
-,{6,11,227},{135,11,1589},{8,10,58},{9,10,724},{11,10,809},{13,10,113},{145,10,
-72},{4,0,361},{133,0,315},{132,0,461},{6,10,345},{135,10,1247},{132,0,472},{8,10
-,767},{8,10,803},{9,10,301},{137,10,903},{135,11,1333},{135,11,477},{7,10,1949},
-{136,10,674},{6,0,905},{138,0,747},{133,0,155},{134,10,259},{7,0,163},{8,0,319},
-{9,0,402},{10,0,24},{10,0,681},{11,0,200},{12,0,253},{12,0,410},{142,0,219},{5,0
-,475},{7,0,1780},{9,0,230},{11,0,297},{11,0,558},{14,0,322},{19,0,76},{6,11,1667
-},{7,11,2036},{138,11,600},{136,10,254},{6,0,848},{135,0,1956},{6,11,511},{140,
-11,132},{5,11,568},{6,11,138},{135,11,1293},{6,0,631},{137,0,838},{149,0,36},{4,
-11,565},{8,11,23},{136,11,827},{5,0,944},{134,0,1769},{4,0,144},{6,0,842},{6,0,
-1400},{4,11,922},{133,11,1023},{133,10,248},{9,10,800},{10,10,693},{11,10,482},{
-11,10,734},{139,10,789},{7,11,1002},{139,11,145},{4,10,116},{5,10,95},{5,10,445}
-,{7,10,1688},{8,10,29},{9,10,272},{11,10,509},{139,10,915},{14,0,369},{146,0,72}
-,{135,10,1641},{132,11,740},{133,10,543},{140,11,116},{6,0,247},{9,0,555},{5,10,
-181},{136,10,41},{133,10,657},{136,0,996},{138,10,709},{7,0,189},{8,10,202},{138
-,10,536},{136,11,402},{4,11,716},{141,11,31},{10,0,280},{138,0,797},{9,10,423},{
-140,10,89},{8,10,113},{9,10,877},{10,10,554},{11,10,83},{12,10,136},{147,10,109}
-,{133,10,976},{7,0,746},{132,10,206},{136,0,526},{139,0,345},{136,0,1017},{8,11,
-152},{9,11,53},{9,11,268},{9,11,901},{10,11,518},{10,11,829},{11,11,188},{13,11,
-74},{14,11,46},{15,11,17},{15,11,33},{17,11,40},{18,11,36},{19,11,20},{22,11,1},
-{152,11,2},{133,11,736},{136,11,532},{5,0,428},{138,0,651},{135,11,681},{135,0,
-1162},{7,0,327},{13,0,230},{17,0,113},{8,10,226},{10,10,537},{11,10,570},{11,10,
-605},{11,10,799},{11,10,804},{12,10,85},{12,10,516},{12,10,623},{12,11,677},{13,
-10,361},{14,10,77},{14,10,78},{147,10,110},{4,0,792},{7,0,1717},{10,0,546},{132,
-10,769},{4,11,684},{136,11,384},{132,10,551},{134,0,1203},{9,10,57},{9,10,459},{
-10,10,425},{11,10,119},{12,10,184},{12,10,371},{13,10,358},{145,10,51},{5,0,672}
-,{5,10,814},{8,10,10},{9,10,421},{9,10,729},{10,10,609},{139,10,689},{138,0,189}
-,{134,10,624},{7,11,110},{7,11,188},{8,11,290},{8,11,591},{9,11,382},{9,11,649},
-{11,11,71},{11,11,155},{11,11,313},{12,11,5},{13,11,325},{142,11,287},{133,0,99}
-,{6,0,1053},{135,0,298},{7,11,360},{7,11,425},{9,11,66},{9,11,278},{138,11,644},
-{4,0,397},{136,0,555},{137,10,269},{132,10,528},{4,11,900},{133,11,861},{6,0,
-1157},{5,11,254},{7,11,985},{136,11,73},{7,11,1959},{136,11,683},{12,0,398},{20,
-0,39},{21,0,11},{150,0,41},{4,0,485},{7,0,353},{135,0,1523},{6,0,366},{7,0,1384}
-,{135,0,1601},{138,0,787},{137,0,282},{5,10,104},{6,10,173},{135,10,1631},{139,
-11,146},{4,0,157},{133,0,471},{134,0,941},{132,11,725},{7,0,1336},{8,10,138},{8,
-10,342},{9,10,84},{10,10,193},{11,10,883},{140,10,359},{134,11,196},{136,0,116},
-{133,11,831},{134,0,787},{134,10,95},{6,10,406},{10,10,409},{10,10,447},{11,10,
-44},{140,10,100},{5,0,160},{7,0,363},{7,0,589},{10,0,170},{141,0,55},{134,0,1815
-},{132,0,866},{6,0,889},{6,0,1067},{6,0,1183},{4,11,321},{134,11,569},{5,11,848}
-,{134,11,66},{4,11,36},{6,10,1636},{7,11,1387},{10,11,205},{11,11,755},{141,11,
-271},{132,0,689},{9,0,820},{4,10,282},{7,10,1034},{11,10,398},{11,10,634},{12,10
-,1},{12,10,79},{12,10,544},{14,10,237},{17,10,10},{146,10,20},{4,0,108},{7,0,804
-},{139,0,498},{132,11,887},{6,0,1119},{135,11,620},{6,11,165},{138,11,388},{5,0,
-244},{5,10,499},{6,10,476},{7,10,600},{7,10,888},{135,10,1096},{140,0,609},{135,
-0,1005},{4,0,412},{133,0,581},{4,11,719},{135,11,155},{7,10,296},{7,10,596},{8,
-10,560},{8,10,586},{9,10,612},{11,10,304},{12,10,46},{13,10,89},{14,10,112},{145
-,10,122},{4,0,895},{133,0,772},{142,11,307},{135,0,1898},{4,0,926},{133,0,983},{
-4,11,353},{6,11,146},{6,11,1789},{7,11,288},{7,11,990},{7,11,1348},{9,11,665},{9
-,11,898},{11,11,893},{142,11,212},{132,0,538},{133,11,532},{6,0,294},{7,0,1267},
-{8,0,624},{141,0,496},{7,0,1325},{4,11,45},{135,11,1257},{138,0,301},{9,0,298},{
-12,0,291},{13,0,276},{14,0,6},{17,0,18},{21,0,32},{7,10,1599},{7,10,1723},{8,10,
-79},{8,10,106},{8,10,190},{8,10,302},{8,10,383},{8,10,713},{9,10,119},{9,10,233}
-,{9,10,419},{9,10,471},{10,10,181},{10,10,406},{11,10,57},{11,10,85},{11,10,120}
-,{11,10,177},{11,10,296},{11,10,382},{11,10,454},{11,10,758},{11,10,999},{12,10,
-27},{12,10,131},{12,10,245},{12,10,312},{12,10,446},{12,10,454},{13,10,98},{13,
-10,426},{13,10,508},{14,10,163},{14,10,272},{14,10,277},{14,10,370},{15,10,95},{
-15,10,138},{15,10,167},{17,10,38},{148,10,96},{132,0,757},{134,0,1263},{4,0,820}
-,{134,10,1759},{133,0,722},{136,11,816},{138,10,372},{145,10,16},{134,0,1039},{4
-,0,991},{134,0,2028},{133,10,258},{7,0,1875},{139,0,124},{6,11,559},{6,11,1691},
-{135,11,586},{5,0,324},{7,0,881},{8,10,134},{9,10,788},{140,10,438},{7,11,1823},
-{139,11,693},{6,0,1348},{134,0,1545},{134,0,911},{132,0,954},{8,0,329},{8,0,414}
-,{7,10,1948},{135,10,2004},{5,0,517},{6,10,439},{7,10,780},{135,10,1040},{132,0,
-816},{5,10,1},{6,10,81},{138,10,520},{9,0,713},{10,0,222},{5,10,482},{8,10,98},{
-10,10,700},{10,10,822},{11,10,302},{11,10,778},{12,10,50},{12,10,127},{12,10,396
-},{13,10,62},{13,10,328},{14,10,122},{147,10,72},{137,0,33},{5,10,2},{7,10,1494}
-,{136,10,589},{6,10,512},{7,10,797},{8,10,253},{9,10,77},{10,10,1},{10,11,108},{
-10,10,129},{10,10,225},{11,11,116},{11,10,118},{11,10,226},{11,10,251},{11,10,
-430},{11,10,701},{11,10,974},{11,10,982},{12,10,64},{12,10,260},{12,10,488},{140
-,10,690},{134,11,456},{133,11,925},{5,0,150},{7,0,106},{7,0,774},{8,0,603},{9,0,
-593},{9,0,634},{10,0,44},{10,0,173},{11,0,462},{11,0,515},{13,0,216},{13,0,288},
-{142,0,400},{137,10,347},{5,0,748},{134,0,553},{12,0,108},{141,0,291},{7,0,420},
-{4,10,12},{7,10,522},{7,10,809},{8,10,797},{141,10,88},{6,11,193},{7,11,240},{7,
-11,1682},{10,11,51},{10,11,640},{11,11,410},{13,11,82},{14,11,247},{14,11,331},{
-142,11,377},{133,10,528},{135,0,1777},{4,0,493},{144,0,55},{136,11,633},{139,0,
-81},{6,0,980},{136,0,321},{148,10,109},{5,10,266},{9,10,290},{9,10,364},{10,10,
-293},{11,10,606},{142,10,45},{6,0,568},{7,0,112},{7,0,1804},{8,0,362},{8,0,410},
-{8,0,830},{9,0,514},{11,0,649},{142,0,157},{4,0,74},{6,0,510},{6,10,594},{9,10,
-121},{10,10,49},{10,10,412},{139,10,834},{134,0,838},{136,10,748},{132,10,466},{
-132,0,625},{135,11,1443},{4,11,237},{135,11,514},{9,10,378},{141,10,162},{6,0,16
-},{6,0,158},{7,0,43},{7,0,129},{7,0,181},{8,0,276},{8,0,377},{10,0,523},{11,0,
-816},{12,0,455},{13,0,303},{142,0,135},{135,0,281},{4,0,1},{7,0,1143},{7,0,1463}
-,{8,0,61},{9,0,207},{9,0,390},{9,0,467},{139,0,836},{6,11,392},{7,11,65},{135,11
-,2019},{132,10,667},{4,0,723},{5,0,895},{7,0,1031},{8,0,199},{8,0,340},{9,0,153}
-,{9,0,215},{10,0,21},{10,0,59},{10,0,80},{10,0,224},{10,0,838},{11,0,229},{11,0,
-652},{12,0,192},{13,0,146},{142,0,91},{132,0,295},{137,0,51},{9,11,222},{10,11,
-43},{139,11,900},{5,0,309},{140,0,211},{5,0,125},{8,0,77},{138,0,15},{136,11,604
-},{138,0,789},{5,0,173},{4,10,39},{7,10,1843},{8,10,407},{11,10,144},{140,10,523
-},{138,11,265},{133,0,439},{132,10,510},{7,0,648},{7,0,874},{11,0,164},{12,0,76}
-,{18,0,9},{7,10,1980},{10,10,487},{138,10,809},{12,0,111},{14,0,294},{19,0,45},{
-13,10,260},{146,10,63},{133,11,549},{134,10,570},{4,0,8},{7,0,1152},{7,0,1153},{
-7,0,1715},{9,0,374},{10,0,478},{139,0,648},{135,0,1099},{5,0,575},{6,0,354},{135
-,0,701},{7,11,36},{8,11,201},{136,11,605},{4,10,787},{136,11,156},{6,0,518},{149
-,11,13},{140,11,224},{134,0,702},{132,10,516},{5,11,724},{10,11,305},{11,11,151}
-,{12,11,33},{12,11,121},{12,11,381},{17,11,3},{17,11,27},{17,11,78},{18,11,18},{
-19,11,54},{149,11,5},{8,0,87},{4,11,523},{5,11,638},{11,10,887},{14,10,365},{142
-,10,375},{138,0,438},{136,10,821},{135,11,1908},{6,11,242},{7,11,227},{7,11,1581
-},{8,11,104},{9,11,113},{9,11,220},{9,11,427},{10,11,74},{10,11,239},{11,11,579}
-,{11,11,1023},{13,11,4},{13,11,204},{13,11,316},{18,11,95},{148,11,86},{4,0,69},
-{5,0,122},{5,0,849},{6,0,1633},{9,0,656},{138,0,464},{7,0,1802},{4,10,10},{139,
-10,786},{135,11,861},{139,0,499},{7,0,476},{7,0,1592},{138,0,87},{133,10,684},{4
-,0,840},{134,10,27},{142,0,283},{6,0,1620},{7,11,1328},{136,11,494},{5,0,859},{7
-,0,1160},{8,0,107},{9,0,291},{9,0,439},{10,0,663},{11,0,609},{140,0,197},{7,11,
-1306},{8,11,505},{9,11,482},{10,11,126},{11,11,225},{12,11,347},{12,11,449},{13,
-11,19},{142,11,218},{5,11,268},{10,11,764},{12,11,120},{13,11,39},{145,11,127},{
-145,10,56},{7,11,1672},{10,11,472},{11,11,189},{143,11,51},{6,10,342},{6,10,496}
-,{8,10,275},{137,10,206},{133,0,600},{4,0,117},{6,0,372},{7,0,1905},{142,0,323},
-{4,10,909},{5,10,940},{135,11,1471},{132,10,891},{4,0,722},{139,0,471},{4,11,384
-},{135,11,1022},{132,10,687},{9,0,5},{12,0,216},{12,0,294},{12,0,298},{12,0,400}
-,{12,0,518},{13,0,229},{143,0,139},{135,11,1703},{7,11,1602},{10,11,698},{12,11,
-212},{141,11,307},{6,10,41},{141,10,160},{135,11,1077},{9,11,159},{11,11,28},{
-140,11,603},{4,0,514},{7,0,1304},{138,0,477},{134,0,1774},{9,0,88},{139,0,270},{
-5,0,12},{7,0,375},{9,0,438},{134,10,1718},{132,11,515},{136,10,778},{8,11,632},{
-8,11,697},{137,11,854},{6,0,362},{6,0,997},{146,0,51},{7,0,816},{7,0,1241},{9,0,
-283},{9,0,520},{10,0,213},{10,0,307},{10,0,463},{10,0,671},{10,0,746},{11,0,401}
-,{11,0,794},{12,0,517},{18,0,107},{147,0,115},{133,10,115},{150,11,28},{4,11,136
-},{133,11,551},{142,10,314},{132,0,258},{6,0,22},{7,0,903},{7,0,1963},{8,0,639},
-{138,0,577},{5,0,681},{8,0,782},{13,0,130},{17,0,84},{5,10,193},{140,10,178},{9,
-11,17},{138,11,291},{7,11,1287},{9,11,44},{10,11,552},{10,11,642},{11,11,839},{
-12,11,274},{12,11,275},{12,11,372},{13,11,91},{142,11,125},{135,10,174},{4,0,664
-},{5,0,804},{139,0,1013},{134,0,942},{6,0,1349},{6,0,1353},{6,0,1450},{7,11,1518
-},{139,11,694},{11,0,356},{4,10,122},{5,10,796},{5,10,952},{6,10,1660},{6,10,
-1671},{8,10,567},{9,10,687},{9,10,742},{10,10,686},{11,10,682},{140,10,281},{5,0
-,32},{6,11,147},{7,11,886},{9,11,753},{138,11,268},{5,10,179},{7,10,1095},{135,
-10,1213},{4,10,66},{7,10,722},{135,10,904},{135,10,352},{9,11,245},{138,11,137},
-{4,0,289},{7,0,629},{7,0,1698},{7,0,1711},{12,0,215},{133,11,414},{6,0,1975},{
-135,11,1762},{6,0,450},{136,0,109},{141,10,35},{134,11,599},{136,0,705},{133,0,
-664},{134,11,1749},{11,11,402},{12,11,109},{12,11,431},{13,11,179},{13,11,206},{
-14,11,175},{14,11,217},{16,11,3},{148,11,53},{135,0,1238},{134,11,1627},{132,11,
-488},{13,0,318},{10,10,592},{10,10,753},{12,10,317},{12,10,355},{12,10,465},{12,
-10,469},{12,10,560},{140,10,578},{133,10,564},{132,11,83},{140,11,676},{6,0,1872
-},{6,0,1906},{6,0,1907},{9,0,934},{9,0,956},{9,0,960},{9,0,996},{12,0,794},{12,0
-,876},{12,0,880},{12,0,918},{15,0,230},{18,0,234},{18,0,238},{21,0,38},{149,0,62
-},{134,10,556},{134,11,278},{137,0,103},{7,10,544},{8,10,719},{138,10,61},{4,10,
-5},{5,10,498},{8,10,637},{137,10,521},{7,0,777},{12,0,229},{12,0,239},{15,0,12},
-{12,11,229},{12,11,239},{143,11,12},{6,0,26},{7,11,388},{7,11,644},{139,11,781},
-{7,11,229},{8,11,59},{9,11,190},{9,11,257},{10,11,378},{140,11,191},{133,10,927}
-,{135,10,1441},{4,10,893},{5,10,780},{133,10,893},{4,0,414},{5,0,467},{9,0,654},
-{10,0,451},{12,0,59},{141,0,375},{142,0,173},{135,0,17},{7,0,1350},{133,10,238},
-{135,0,955},{4,0,960},{10,0,887},{12,0,753},{18,0,161},{18,0,162},{152,0,19},{
-136,11,344},{6,10,1729},{137,11,288},{132,11,660},{4,0,217},{5,0,710},{7,0,760},
-{7,0,1926},{9,0,428},{9,0,708},{10,0,254},{10,0,296},{10,0,720},{11,0,109},{11,0
-,255},{12,0,165},{12,0,315},{13,0,107},{13,0,203},{14,0,54},{14,0,99},{14,0,114}
-,{14,0,388},{16,0,85},{17,0,9},{17,0,33},{20,0,25},{20,0,28},{20,0,29},{21,0,9},
-{21,0,10},{21,0,34},{22,0,17},{4,10,60},{7,10,1800},{8,10,314},{9,10,700},{139,
-10,487},{7,11,1035},{138,11,737},{7,11,690},{9,11,217},{9,11,587},{140,11,521},{
-6,0,919},{7,11,706},{7,11,1058},{138,11,538},{7,10,1853},{138,10,437},{136,10,
-419},{6,0,280},{10,0,502},{11,0,344},{140,0,38},{5,0,45},{7,0,1161},{11,0,448},{
-11,0,880},{13,0,139},{13,0,407},{15,0,16},{17,0,95},{18,0,66},{18,0,88},{18,0,
-123},{149,0,7},{11,11,92},{11,11,196},{11,11,409},{11,11,450},{11,11,666},{11,11
-,777},{12,11,262},{13,11,385},{13,11,393},{15,11,115},{16,11,45},{145,11,82},{
-136,0,777},{134,11,1744},{4,0,410},{7,0,521},{133,10,828},{134,0,673},{7,0,1110}
-,{7,0,1778},{7,10,176},{135,10,178},{5,10,806},{7,11,268},{7,10,1976},{136,11,
-569},{4,11,733},{9,11,194},{10,11,92},{11,11,198},{12,11,84},{12,11,87},{13,11,
-128},{144,11,74},{5,0,341},{7,0,1129},{11,0,414},{4,10,51},{6,10,4},{7,10,591},{
-7,10,849},{7,10,951},{7,10,1613},{7,10,1760},{7,10,1988},{9,10,434},{10,10,754},
-{11,10,25},{139,10,37},{133,10,902},{135,10,928},{135,0,787},{132,0,436},{134,10
-,270},{7,0,1587},{135,0,1707},{6,0,377},{7,0,1025},{9,0,613},{145,0,104},{7,11,
-982},{7,11,1361},{10,11,32},{143,11,56},{139,0,96},{132,0,451},{132,10,416},{142
-,10,372},{5,10,152},{5,10,197},{7,11,306},{7,10,340},{7,10,867},{10,10,548},{10,
-10,581},{11,10,6},{12,10,3},{12,10,19},{14,10,110},{142,10,289},{134,0,680},{134
-,11,609},{7,0,483},{7,10,190},{8,10,28},{8,10,141},{8,10,444},{8,10,811},{9,10,
-468},{11,10,334},{12,10,24},{12,10,386},{140,10,576},{10,0,916},{133,10,757},{5,
-10,721},{135,10,1553},{133,11,178},{134,0,937},{132,10,898},{133,0,739},{147,0,
-82},{135,0,663},{146,0,128},{5,10,277},{141,10,247},{134,0,1087},{132,10,435},{6
-,11,381},{7,11,645},{7,11,694},{136,11,546},{7,0,503},{135,0,1885},{6,0,1965},{8
-,0,925},{138,0,955},{4,0,113},{5,0,163},{5,0,735},{7,0,1009},{9,0,9},{9,0,771},{
-12,0,90},{13,0,138},{13,0,410},{143,0,128},{4,0,324},{138,0,104},{7,0,460},{5,10
-,265},{134,10,212},{133,11,105},{7,11,261},{7,11,1107},{7,11,1115},{7,11,1354},{
-7,11,1588},{7,11,1705},{7,11,1902},{9,11,465},{10,11,248},{10,11,349},{10,11,647
-},{11,11,527},{11,11,660},{11,11,669},{12,11,529},{141,11,305},{5,11,438},{9,11,
-694},{12,11,627},{141,11,210},{152,11,11},{4,0,935},{133,0,823},{132,10,702},{5,
-0,269},{7,0,434},{7,0,891},{8,0,339},{9,0,702},{11,0,594},{11,0,718},{17,0,100},
-{5,10,808},{135,10,2045},{7,0,1014},{9,0,485},{141,0,264},{134,0,1713},{7,0,1810
-},{11,0,866},{12,0,103},{13,0,495},{140,11,233},{4,0,423},{10,0,949},{138,0,1013
-},{135,0,900},{8,11,25},{138,11,826},{5,10,166},{8,10,739},{140,10,511},{134,0,
-2018},{7,11,1270},{139,11,612},{4,10,119},{5,10,170},{5,10,447},{7,10,1708},{7,
-10,1889},{9,10,357},{9,10,719},{12,10,486},{140,10,596},{12,0,574},{140,11,574},
-{132,11,308},{6,0,964},{6,0,1206},{134,0,1302},{4,10,450},{135,10,1158},{135,11,
-150},{136,11,649},{14,0,213},{148,0,38},{9,11,45},{9,11,311},{141,11,42},{134,11
-,521},{7,10,1375},{7,10,1466},{138,10,331},{132,10,754},{5,11,339},{7,11,1442},{
-14,11,3},{15,11,41},{147,11,66},{136,11,378},{134,0,1022},{5,10,850},{136,10,799
-},{142,0,143},{135,0,2029},{134,11,1628},{8,0,523},{150,0,34},{5,0,625},{135,0,
-1617},{7,0,275},{7,10,238},{7,10,2033},{8,10,120},{8,10,188},{8,10,659},{9,10,
-598},{10,10,466},{12,10,342},{12,10,588},{13,10,503},{14,10,246},{143,10,92},{7,
-0,37},{8,0,425},{8,0,693},{9,0,720},{10,0,380},{10,0,638},{11,0,273},{11,0,473},
-{12,0,61},{143,0,43},{135,11,829},{135,0,1943},{132,0,765},{5,11,486},{135,11,
-1349},{7,11,1635},{8,11,17},{10,11,217},{138,11,295},{4,10,201},{7,10,1744},{8,
-10,602},{11,10,247},{11,10,826},{145,10,65},{138,11,558},{11,0,551},{142,0,159},
-{8,10,164},{146,10,62},{139,11,176},{132,0,168},{136,0,1010},{134,0,1994},{135,0
-,91},{138,0,532},{135,10,1243},{135,0,1884},{132,10,907},{5,10,100},{10,10,329},
-{12,10,416},{149,10,29},{134,11,447},{132,10,176},{5,10,636},{5,10,998},{7,10,9}
-,{7,10,1508},{8,10,26},{9,10,317},{9,10,358},{10,10,210},{10,10,292},{10,10,533}
-,{11,10,555},{12,10,526},{12,10,607},{13,10,263},{13,10,459},{142,10,271},{4,11,
-609},{135,11,756},{6,0,15},{7,0,70},{10,0,240},{147,0,93},{4,11,930},{133,11,947
-},{134,0,1227},{134,0,1534},{133,11,939},{133,11,962},{5,11,651},{8,11,170},{9,
-11,61},{9,11,63},{10,11,23},{10,11,37},{10,11,834},{11,11,4},{11,11,187},{11,11,
-281},{11,11,503},{11,11,677},{12,11,96},{12,11,130},{12,11,244},{14,11,5},{14,11
-,40},{14,11,162},{14,11,202},{146,11,133},{4,11,406},{5,11,579},{12,11,492},{150
-,11,15},{139,0,392},{6,10,610},{10,10,127},{141,10,27},{7,0,655},{7,0,1844},{136
-,10,119},{4,0,145},{6,0,176},{7,0,395},{137,0,562},{132,0,501},{140,11,145},{136
-,0,1019},{134,0,509},{139,0,267},{6,11,17},{7,11,16},{7,11,1001},{7,11,1982},{9,
-11,886},{10,11,489},{10,11,800},{11,11,782},{12,11,320},{13,11,467},{14,11,145},
-{14,11,387},{143,11,119},{145,11,17},{6,0,1099},{133,11,458},{7,11,1983},{8,11,0
-},{8,11,171},{9,11,120},{9,11,732},{10,11,473},{11,11,656},{11,11,998},{18,11,0}
-,{18,11,2},{147,11,21},{12,11,427},{146,11,38},{10,0,948},{138,0,968},{7,10,126}
-,{136,10,84},{136,10,790},{4,0,114},{9,0,492},{13,0,462},{142,0,215},{6,10,64},{
-12,10,377},{141,10,309},{4,0,77},{5,0,361},{6,0,139},{6,0,401},{6,0,404},{7,0,
-413},{7,0,715},{7,0,1716},{11,0,279},{12,0,179},{12,0,258},{13,0,244},{142,0,358
-},{134,0,1717},{7,0,772},{7,0,1061},{7,0,1647},{8,0,82},{11,0,250},{11,0,607},{
-12,0,311},{12,0,420},{13,0,184},{13,0,367},{7,10,1104},{11,10,269},{11,10,539},{
-11,10,627},{11,10,706},{11,10,975},{12,10,248},{12,10,434},{12,10,600},{12,10,
-622},{13,10,297},{13,10,485},{14,10,69},{14,10,409},{143,10,108},{135,0,724},{4,
-11,512},{4,11,519},{133,11,342},{134,0,1133},{145,11,29},{11,10,977},{141,10,507
-},{6,0,841},{6,0,1042},{6,0,1194},{10,0,993},{140,0,1021},{6,11,31},{7,11,491},{
-7,11,530},{8,11,592},{9,10,34},{11,11,53},{11,10,484},{11,11,779},{12,11,167},{
-12,11,411},{14,11,14},{14,11,136},{15,11,72},{16,11,17},{144,11,72},{4,0,1021},{
-6,0,2037},{133,11,907},{7,0,373},{8,0,335},{8,0,596},{9,0,488},{6,10,1700},{7,10
-,293},{7,10,382},{7,10,1026},{7,10,1087},{7,10,2027},{8,10,252},{8,10,727},{8,10
-,729},{9,10,30},{9,10,199},{9,10,231},{9,10,251},{9,10,334},{9,10,361},{9,10,712
-},{10,10,55},{10,10,60},{10,10,232},{10,10,332},{10,10,384},{10,10,396},{10,10,
-504},{10,10,542},{10,10,652},{11,10,20},{11,10,48},{11,10,207},{11,10,291},{11,
-10,298},{11,10,342},{11,10,365},{11,10,394},{11,10,620},{11,10,705},{11,10,1017}
-,{12,10,123},{12,10,340},{12,10,406},{12,10,643},{13,10,61},{13,10,269},{13,10,
-311},{13,10,319},{13,10,486},{14,10,234},{15,10,62},{15,10,85},{16,10,71},{18,10
-,119},{148,10,105},{150,0,37},{4,11,208},{5,11,106},{6,11,531},{8,11,408},{9,11,
-188},{138,11,572},{132,0,564},{6,0,513},{135,0,1052},{132,0,825},{9,0,899},{140,
-11,441},{134,0,778},{133,11,379},{7,0,1417},{12,0,382},{17,0,48},{152,0,12},{132
-,11,241},{7,0,1116},{6,10,379},{7,10,270},{8,10,176},{8,10,183},{9,10,432},{9,10
-,661},{12,10,247},{12,10,617},{146,10,125},{5,10,792},{133,10,900},{6,0,545},{7,
-0,565},{7,0,1669},{10,0,114},{11,0,642},{140,0,618},{133,0,5},{138,11,7},{132,11
-,259},{135,0,192},{134,0,701},{136,0,763},{135,10,1979},{4,10,901},{133,10,776},
-{10,0,755},{147,0,29},{133,0,759},{4,11,173},{5,11,312},{5,11,512},{135,11,1285}
-,{7,11,1603},{7,11,1691},{9,11,464},{11,11,195},{12,11,279},{12,11,448},{14,11,
-11},{147,11,102},{7,0,370},{7,0,1007},{7,0,1177},{135,0,1565},{135,0,1237},{4,0,
-87},{5,0,250},{141,0,298},{4,11,452},{5,11,583},{5,11,817},{6,11,433},{7,11,593}
-,{7,11,720},{7,11,1378},{8,11,161},{9,11,284},{10,11,313},{139,11,886},{4,11,547
-},{135,11,1409},{136,11,722},{4,10,37},{5,10,334},{135,10,1253},{132,10,508},{12
-,0,107},{146,0,31},{8,11,420},{139,11,193},{135,0,814},{135,11,409},{140,0,991},
-{4,0,57},{7,0,1195},{7,0,1438},{7,0,1548},{7,0,1835},{7,0,1904},{9,0,757},{10,0,
-604},{139,0,519},{132,0,540},{138,11,308},{132,10,533},{136,0,608},{144,11,65},{
-4,0,1014},{134,0,2029},{4,0,209},{7,0,902},{5,11,1002},{136,11,745},{134,0,2030}
-,{6,0,303},{7,0,335},{7,0,1437},{7,0,1668},{8,0,553},{8,0,652},{8,0,656},{9,0,
-558},{11,0,743},{149,0,18},{5,11,575},{6,11,354},{135,11,701},{4,11,239},{6,11,
-477},{7,11,1607},{11,11,68},{139,11,617},{132,0,559},{8,0,527},{18,0,60},{147,0,
-24},{133,10,920},{138,0,511},{133,0,1017},{133,0,675},{138,10,391},{11,0,156},{
-135,10,1952},{138,11,369},{132,11,367},{133,0,709},{6,0,698},{134,0,887},{142,10
-,126},{134,0,1745},{132,10,483},{13,11,299},{142,11,75},{133,0,714},{7,0,8},{136
-,0,206},{138,10,480},{4,11,694},{9,10,495},{146,10,104},{7,11,1248},{11,11,621},
-{139,11,702},{140,11,687},{132,0,776},{139,10,1009},{135,0,1272},{134,0,1059},{8
-,10,653},{13,10,93},{147,10,14},{135,11,213},{136,0,406},{133,10,172},{132,0,947
-},{8,0,175},{10,0,168},{138,0,573},{132,0,870},{6,0,1567},{151,11,28},{134,11,
-472},{5,10,260},{136,11,132},{4,11,751},{11,11,390},{140,11,32},{4,11,409},{133,
-11,78},{12,0,554},{6,11,473},{145,11,105},{133,0,784},{8,0,908},{136,11,306},{
-139,0,882},{6,0,358},{7,0,1393},{8,0,396},{10,0,263},{14,0,154},{16,0,48},{17,0,
-8},{7,11,1759},{8,11,396},{10,11,263},{14,11,154},{16,11,48},{145,11,8},{13,11,
-163},{13,11,180},{18,11,78},{148,11,35},{14,0,32},{18,0,85},{20,0,2},{152,0,16},
-{7,0,228},{10,0,770},{8,10,167},{8,10,375},{9,10,82},{9,10,561},{138,10,620},{
-132,0,845},{9,0,14},{9,0,441},{10,0,306},{139,0,9},{11,0,966},{12,0,287},{13,0,
-342},{13,0,402},{15,0,110},{15,0,163},{8,10,194},{136,10,756},{134,0,1578},{4,0,
-967},{6,0,1820},{6,0,1847},{140,0,716},{136,0,594},{7,0,1428},{7,0,1640},{7,0,
-1867},{9,0,169},{9,0,182},{9,0,367},{9,0,478},{9,0,506},{9,0,551},{9,0,557},{9,0
-,648},{9,0,697},{9,0,705},{9,0,725},{9,0,787},{9,0,794},{10,0,198},{10,0,214},{
-10,0,267},{10,0,275},{10,0,456},{10,0,551},{10,0,561},{10,0,613},{10,0,627},{10,
-0,668},{10,0,675},{10,0,691},{10,0,695},{10,0,707},{10,0,715},{11,0,183},{11,0,
-201},{11,0,244},{11,0,262},{11,0,352},{11,0,439},{11,0,493},{11,0,572},{11,0,591
-},{11,0,608},{11,0,611},{11,0,646},{11,0,674},{11,0,711},{11,0,751},{11,0,761},{
-11,0,776},{11,0,785},{11,0,850},{11,0,853},{11,0,862},{11,0,865},{11,0,868},{11,
-0,875},{11,0,898},{11,0,902},{11,0,903},{11,0,910},{11,0,932},{11,0,942},{11,0,
-957},{11,0,967},{11,0,972},{12,0,148},{12,0,195},{12,0,220},{12,0,237},{12,0,318
-},{12,0,339},{12,0,393},{12,0,445},{12,0,450},{12,0,474},{12,0,505},{12,0,509},{
-12,0,533},{12,0,591},{12,0,594},{12,0,597},{12,0,621},{12,0,633},{12,0,642},{13,
-0,59},{13,0,60},{13,0,145},{13,0,239},{13,0,250},{13,0,329},{13,0,344},{13,0,365
-},{13,0,372},{13,0,387},{13,0,403},{13,0,414},{13,0,456},{13,0,470},{13,0,478},{
-13,0,483},{13,0,489},{14,0,55},{14,0,57},{14,0,81},{14,0,90},{14,0,148},{14,0,
-239},{14,0,266},{14,0,321},{14,0,326},{14,0,327},{14,0,330},{14,0,347},{14,0,355
-},{14,0,401},{14,0,404},{14,0,411},{14,0,414},{14,0,416},{14,0,420},{15,0,61},{
-15,0,74},{15,0,87},{15,0,88},{15,0,94},{15,0,96},{15,0,116},{15,0,149},{15,0,154
-},{16,0,50},{16,0,63},{16,0,73},{17,0,2},{17,0,66},{17,0,92},{17,0,103},{17,0,
-112},{17,0,120},{18,0,50},{18,0,54},{18,0,82},{18,0,86},{18,0,90},{18,0,111},{18
-,0,115},{18,0,156},{19,0,40},{19,0,79},{20,0,78},{21,0,22},{135,11,883},{5,0,161
-},{135,0,839},{4,0,782},{13,11,293},{142,11,56},{133,11,617},{139,11,50},{135,10
-,22},{145,0,64},{5,10,639},{7,10,1249},{139,10,896},{138,0,998},{135,11,2042},{4
-,11,546},{142,11,233},{6,0,1043},{134,0,1574},{134,0,1496},{4,10,102},{7,10,815}
-,{7,10,1699},{139,10,964},{12,0,781},{142,0,461},{4,11,313},{133,11,577},{6,0,
-639},{6,0,1114},{137,0,817},{8,11,184},{141,11,433},{7,0,1814},{135,11,935},{10,
-0,997},{140,0,958},{4,0,812},{137,11,625},{132,10,899},{136,10,795},{5,11,886},{
-6,11,46},{6,11,1790},{7,11,14},{7,11,732},{7,11,1654},{8,11,95},{8,11,327},{8,11
-,616},{10,11,598},{10,11,769},{11,11,134},{11,11,747},{12,11,378},{142,11,97},{
-136,0,139},{6,10,52},{9,10,104},{9,10,559},{12,10,308},{147,10,87},{133,11,1021}
-,{132,10,604},{132,10,301},{136,10,779},{7,0,643},{136,0,236},{132,11,153},{134,
-0,1172},{147,10,32},{133,11,798},{6,0,1338},{132,11,587},{6,11,598},{7,11,42},{8
-,11,695},{10,11,212},{11,11,158},{14,11,196},{145,11,85},{135,10,508},{5,11,957}
-,{5,11,1008},{135,11,249},{4,11,129},{135,11,465},{5,0,54},{7,11,470},{7,11,1057
-},{7,11,1201},{9,11,755},{11,11,906},{140,11,527},{7,11,908},{146,11,7},{5,11,
-148},{136,11,450},{144,11,1},{4,0,256},{135,0,1488},{9,0,351},{6,10,310},{7,10,
-1849},{8,10,72},{8,10,272},{8,10,431},{9,10,12},{10,10,563},{10,10,630},{10,10,
-796},{10,10,810},{11,10,367},{11,10,599},{11,10,686},{140,10,672},{6,0,1885},{6,
-0,1898},{6,0,1899},{140,0,955},{4,0,714},{133,0,469},{6,0,1270},{134,0,1456},{
-132,0,744},{6,0,313},{7,10,537},{8,10,64},{9,10,127},{10,10,496},{12,10,510},{
-141,10,384},{4,11,217},{4,10,244},{5,11,710},{7,10,233},{7,11,1926},{9,11,428},{
-9,11,708},{10,11,254},{10,11,296},{10,11,720},{11,11,109},{11,11,255},{12,11,165
-},{12,11,315},{13,11,107},{13,11,203},{14,11,54},{14,11,99},{14,11,114},{14,11,
-388},{16,11,85},{17,11,9},{17,11,33},{20,11,25},{20,11,28},{20,11,29},{21,11,9},
-{21,11,10},{21,11,34},{150,11,17},{138,0,402},{7,0,969},{146,0,55},{8,0,50},{137
-,0,624},{134,0,1355},{132,0,572},{134,10,1650},{10,10,702},{139,10,245},{10,0,
-847},{142,0,445},{6,0,43},{7,0,38},{8,0,248},{138,0,513},{133,0,369},{137,10,338
-},{133,0,766},{133,0,363},{133,10,896},{8,11,392},{11,11,54},{13,11,173},{13,11,
-294},{148,11,7},{134,0,678},{7,11,1230},{136,11,531},{6,0,258},{140,0,409},{5,0,
-249},{148,0,82},{7,10,1117},{136,10,539},{5,0,393},{6,0,378},{7,0,1981},{9,0,32}
-,{9,0,591},{10,0,685},{10,0,741},{142,0,382},{133,0,788},{134,0,1281},{134,0,
-1295},{7,0,1968},{141,0,509},{4,0,61},{5,0,58},{5,0,171},{5,0,683},{6,0,291},{6,
-0,566},{7,0,1650},{11,0,523},{12,0,273},{12,0,303},{15,0,39},{143,0,111},{6,0,
-706},{134,0,1283},{134,0,589},{135,11,1433},{133,11,435},{7,0,1059},{13,0,54},{5
-,10,4},{5,10,810},{6,10,13},{6,10,538},{6,10,1690},{6,10,1726},{7,10,1819},{8,10
-,148},{8,10,696},{8,10,791},{12,10,125},{143,10,9},{135,10,1268},{5,11,85},{6,11
-,419},{7,11,134},{7,11,305},{7,11,361},{7,11,1337},{8,11,71},{140,11,519},{137,0
-,824},{140,11,688},{5,11,691},{7,11,345},{7,10,1385},{9,11,94},{11,10,582},{11,
-10,650},{11,10,901},{11,10,949},{12,11,169},{12,10,232},{12,10,236},{13,10,413},
-{13,10,501},{146,10,116},{4,0,917},{133,0,1005},{7,0,1598},{5,11,183},{6,11,582}
-,{9,11,344},{10,11,679},{140,11,435},{4,10,925},{5,10,803},{8,10,698},{138,10,
-828},{132,0,919},{135,11,511},{139,10,992},{4,0,255},{5,0,302},{6,0,132},{7,0,
-128},{7,0,283},{7,0,1299},{10,0,52},{10,0,514},{11,0,925},{13,0,92},{142,0,309},
-{134,0,1369},{135,10,1847},{134,0,328},{7,11,1993},{136,11,684},{133,10,383},{
-137,0,173},{134,11,583},{134,0,1411},{19,0,65},{5,11,704},{8,11,357},{10,11,745}
-,{14,11,426},{17,11,94},{147,11,57},{9,10,660},{138,10,347},{4,11,179},{5,11,198
-},{133,11,697},{7,11,347},{7,11,971},{8,11,181},{138,11,711},{141,0,442},{11,0,
-842},{11,0,924},{13,0,317},{13,0,370},{13,0,469},{13,0,471},{14,0,397},{18,0,69}
-,{18,0,145},{7,10,572},{9,10,592},{11,10,680},{12,10,356},{140,10,550},{14,11,19
-},{14,11,28},{144,11,29},{136,0,534},{4,11,243},{5,11,203},{7,11,19},{7,11,71},{
-7,11,113},{10,11,405},{11,11,357},{142,11,240},{6,0,210},{10,0,845},{138,0,862},
-{7,11,1351},{9,11,581},{10,11,639},{11,11,453},{140,11,584},{7,11,1450},{139,11,
-99},{10,0,892},{12,0,719},{144,0,105},{4,0,284},{6,0,223},{134,11,492},{5,11,134
-},{6,11,408},{6,11,495},{135,11,1593},{136,0,529},{137,0,807},{4,0,218},{7,0,526
-},{143,0,137},{6,0,1444},{142,11,4},{132,11,665},{4,0,270},{5,0,192},{6,0,332},{
-7,0,1322},{4,11,248},{7,11,137},{137,11,349},{140,0,661},{7,0,1517},{11,0,597},{
-14,0,76},{14,0,335},{20,0,33},{7,10,748},{139,10,700},{5,11,371},{135,11,563},{
-146,11,57},{133,10,127},{133,0,418},{4,11,374},{7,11,547},{7,11,1700},{7,11,1833
-},{139,11,858},{6,10,198},{140,10,83},{7,11,1812},{13,11,259},{13,11,356},{14,11
-,242},{147,11,114},{7,0,379},{8,0,481},{9,0,377},{5,10,276},{6,10,55},{135,10,
-1369},{138,11,286},{5,0,1003},{6,0,149},{6,10,1752},{136,10,726},{8,0,262},{9,0,
-627},{10,0,18},{11,0,214},{11,0,404},{11,0,457},{11,0,780},{11,0,913},{13,0,401}
-,{14,0,200},{6,11,1647},{7,11,1552},{7,11,2010},{9,11,494},{137,11,509},{135,0,
-742},{136,0,304},{132,0,142},{133,10,764},{6,10,309},{7,10,331},{138,10,550},{
-135,10,1062},{6,11,123},{7,11,214},{7,10,986},{9,11,728},{10,11,157},{11,11,346}
-,{11,11,662},{143,11,106},{135,10,1573},{7,0,925},{137,0,799},{4,0,471},{5,0,51}
-,{6,0,602},{8,0,484},{138,0,195},{136,0,688},{132,0,697},{6,0,1169},{6,0,1241},{
-6,10,194},{7,10,133},{10,10,493},{10,10,570},{139,10,664},{140,0,751},{7,0,929},
-{10,0,452},{11,0,878},{16,0,33},{5,10,24},{5,10,569},{6,10,3},{6,10,119},{6,10,
-143},{6,10,440},{7,10,599},{7,10,1686},{7,10,1854},{8,10,424},{9,10,43},{9,10,
-584},{9,10,760},{10,10,328},{11,10,159},{11,10,253},{12,10,487},{140,10,531},{4,
-11,707},{13,11,106},{18,11,49},{147,11,41},{5,0,221},{5,11,588},{134,11,393},{
-134,0,1437},{6,11,211},{7,11,1690},{11,11,486},{140,11,369},{5,10,14},{5,10,892}
-,{6,10,283},{7,10,234},{136,10,537},{4,0,988},{136,0,955},{135,0,1251},{4,10,126
-},{8,10,635},{147,10,34},{4,10,316},{135,10,1561},{137,10,861},{4,10,64},{5,10,
-352},{5,10,720},{6,10,368},{139,10,359},{134,0,192},{4,0,132},{5,0,69},{135,0,
-1242},{7,10,1577},{10,10,304},{10,10,549},{12,10,365},{13,10,220},{13,10,240},{
-142,10,33},{4,0,111},{7,0,865},{134,11,219},{5,11,582},{6,11,1646},{7,11,99},{7,
-11,1962},{7,11,1986},{8,11,515},{8,11,773},{9,11,23},{9,11,491},{12,11,620},{14,
-11,52},{145,11,50},{132,0,767},{7,11,568},{148,11,21},{6,0,42},{7,0,1416},{7,0,
-2005},{8,0,131},{8,0,466},{9,0,672},{13,0,252},{20,0,103},{133,11,851},{135,0,
-1050},{6,10,175},{137,10,289},{5,10,432},{133,10,913},{6,0,44},{136,0,368},{135,
-11,784},{132,0,570},{133,0,120},{139,10,595},{140,0,29},{6,0,227},{135,0,1589},{
-4,11,98},{7,11,1365},{9,11,422},{9,11,670},{10,11,775},{11,11,210},{13,11,26},{
-13,11,457},{141,11,476},{140,10,80},{5,10,931},{134,10,1698},{133,0,522},{134,0,
-1120},{135,0,1529},{12,0,739},{14,0,448},{142,0,467},{11,10,526},{11,10,939},{
-141,10,290},{5,10,774},{6,10,1637},{6,10,1686},{134,10,1751},{6,0,1667},{135,0,
-2036},{7,10,1167},{11,10,934},{13,10,391},{145,10,76},{137,11,147},{6,10,260},{7
-,10,1484},{11,11,821},{12,11,110},{12,11,153},{18,11,41},{150,11,19},{6,0,511},{
-12,0,132},{134,10,573},{5,0,568},{6,0,138},{135,0,1293},{132,0,1020},{8,0,258},{
-9,0,208},{137,0,359},{4,0,565},{8,0,23},{136,0,827},{134,0,344},{4,0,922},{5,0,
-1023},{13,11,477},{14,11,120},{148,11,61},{134,0,240},{5,11,209},{6,11,30},{11,
-11,56},{139,11,305},{6,0,171},{7,0,1002},{7,0,1324},{9,0,415},{14,0,230},{18,0,
-68},{4,10,292},{4,10,736},{5,10,871},{6,10,1689},{7,10,1944},{137,10,580},{9,11,
-635},{139,11,559},{4,11,150},{5,11,303},{134,11,327},{6,10,63},{135,10,920},{133
-,10,793},{8,11,192},{10,11,78},{10,11,555},{11,11,308},{13,11,359},{147,11,95},{
-135,11,786},{135,11,1712},{136,0,402},{6,0,754},{6,11,1638},{7,11,79},{7,11,496}
-,{9,11,138},{10,11,336},{11,11,12},{12,11,412},{12,11,440},{142,11,305},{4,0,716
-},{141,0,31},{133,0,982},{8,0,691},{8,0,731},{5,10,67},{6,10,62},{6,10,374},{135
-,10,1391},{9,10,790},{140,10,47},{139,11,556},{151,11,1},{7,11,204},{7,11,415},{
-8,11,42},{10,11,85},{11,11,33},{11,11,564},{12,11,571},{149,11,1},{8,0,888},{7,
-11,610},{135,11,1501},{4,10,391},{135,10,1169},{5,0,847},{9,0,840},{138,0,803},{
-137,0,823},{134,0,785},{8,0,152},{9,0,53},{9,0,268},{9,0,901},{10,0,518},{10,0,
-829},{11,0,188},{13,0,74},{14,0,46},{15,0,17},{15,0,33},{17,0,40},{18,0,36},{19,
-0,20},{22,0,1},{152,0,2},{4,11,3},{5,11,247},{5,11,644},{7,11,744},{7,11,1207},{
-7,11,1225},{7,11,1909},{146,11,147},{136,0,532},{135,0,681},{132,10,271},{140,0,
-314},{140,0,677},{4,0,684},{136,0,384},{5,11,285},{9,11,67},{13,11,473},{143,11,
-82},{4,10,253},{5,10,544},{7,10,300},{137,10,340},{7,0,110},{7,0,447},{8,0,290},
-{8,0,591},{9,0,382},{9,0,649},{11,0,71},{11,0,155},{11,0,313},{12,0,5},{13,0,325
-},{142,0,287},{134,0,1818},{136,0,1007},{138,0,321},{7,0,360},{7,0,425},{9,0,66}
-,{9,0,278},{138,0,644},{133,10,818},{5,0,385},{5,10,541},{6,10,94},{6,10,499},{7
-,10,230},{139,10,321},{4,10,920},{5,10,25},{5,10,790},{6,10,457},{7,10,853},{136
-,10,788},{4,0,900},{133,0,861},{5,0,254},{7,0,985},{136,0,73},{7,0,1959},{136,0,
-683},{134,10,1765},{133,10,822},{132,10,634},{4,11,29},{6,11,532},{7,11,1628},{7
-,11,1648},{9,11,303},{9,11,350},{10,11,433},{11,11,97},{11,11,557},{11,11,745},{
-12,11,289},{12,11,335},{12,11,348},{12,11,606},{13,11,116},{13,11,233},{13,11,
-466},{14,11,181},{14,11,209},{14,11,232},{14,11,236},{14,11,300},{16,11,41},{148
-,11,97},{19,0,86},{6,10,36},{7,10,658},{136,10,454},{135,11,1692},{132,0,725},{5
-,11,501},{7,11,1704},{9,11,553},{11,11,520},{12,11,557},{141,11,249},{134,0,196}
-,{133,0,831},{136,0,723},{7,0,1897},{13,0,80},{13,0,437},{145,0,74},{4,0,992},{6
-,0,627},{136,0,994},{135,11,1294},{132,10,104},{5,0,848},{6,0,66},{136,0,764},{4
-,0,36},{7,0,1387},{10,0,205},{139,0,755},{6,0,1046},{134,0,1485},{134,0,950},{
-132,0,887},{14,0,450},{148,0,111},{7,0,620},{7,0,831},{9,10,542},{9,10,566},{138
-,10,728},{6,0,165},{138,0,388},{139,10,263},{4,0,719},{135,0,155},{138,10,468},{
-6,11,453},{144,11,36},{134,11,129},{5,0,533},{7,0,755},{138,0,780},{134,0,1465},
-{4,0,353},{6,0,146},{6,0,1789},{7,0,427},{7,0,990},{7,0,1348},{9,0,665},{9,0,898
-},{11,0,893},{142,0,212},{7,10,87},{142,10,288},{4,0,45},{135,0,1257},{12,0,7},{
-7,10,988},{7,10,1939},{9,10,64},{9,10,502},{12,10,34},{13,10,12},{13,10,234},{
-147,10,77},{4,0,607},{5,11,60},{6,11,504},{7,11,614},{7,11,1155},{140,11,0},{135
-,10,141},{8,11,198},{11,11,29},{140,11,534},{140,0,65},{136,0,816},{132,10,619},
-{139,0,88},{5,10,246},{8,10,189},{9,10,355},{9,10,512},{10,10,124},{10,10,453},{
-11,10,143},{11,10,416},{11,10,859},{141,10,341},{4,11,379},{135,11,1397},{4,0,
-600},{137,0,621},{133,0,367},{134,0,561},{6,0,559},{134,0,1691},{6,0,585},{134,
-11,585},{135,11,1228},{4,11,118},{5,10,678},{6,11,274},{6,11,361},{7,11,75},{141
-,11,441},{135,11,1818},{137,11,841},{5,0,573},{6,0,287},{7,10,862},{7,10,1886},{
-138,10,179},{132,10,517},{140,11,693},{5,11,314},{6,11,221},{7,11,419},{10,11,
-650},{11,11,396},{12,11,156},{13,11,369},{14,11,333},{145,11,47},{140,10,540},{
-136,10,667},{11,10,403},{146,10,83},{6,0,672},{133,10,761},{9,0,157},{10,10,131}
-,{140,10,72},{7,0,714},{134,11,460},{134,0,456},{133,0,925},{5,11,682},{135,11,
-1887},{136,11,510},{136,11,475},{133,11,1016},{9,0,19},{7,11,602},{8,11,179},{10
-,11,781},{140,11,126},{6,11,329},{138,11,111},{6,0,822},{134,0,1473},{144,11,86}
-,{11,0,113},{139,11,113},{5,11,821},{134,11,1687},{133,10,449},{7,0,463},{17,0,
-69},{136,10,103},{7,10,2028},{138,10,641},{6,0,193},{7,0,240},{7,0,1682},{10,0,
-51},{10,0,640},{11,0,410},{13,0,82},{14,0,247},{14,0,331},{142,0,377},{6,0,471},
-{11,0,411},{142,0,2},{5,11,71},{7,11,1407},{9,11,388},{9,11,704},{10,11,261},{10
-,11,619},{11,11,547},{11,11,619},{143,11,157},{136,0,633},{135,0,1148},{6,0,554}
-,{7,0,1392},{12,0,129},{7,10,1274},{7,10,1386},{7,11,2008},{9,11,337},{10,11,517
-},{146,10,87},{7,0,803},{8,0,542},{6,10,187},{7,10,1203},{8,10,380},{14,10,117},
-{149,10,28},{6,10,297},{7,10,793},{139,10,938},{8,0,438},{11,0,363},{7,10,464},{
-11,10,105},{12,10,231},{14,10,386},{15,10,102},{148,10,75},{5,11,16},{6,11,86},{
-6,11,603},{7,11,292},{7,11,561},{8,11,257},{8,11,382},{9,11,721},{9,11,778},{11,
-11,581},{140,11,466},{6,0,717},{4,11,486},{133,11,491},{132,0,875},{132,11,72},{
-6,11,265},{135,11,847},{4,0,237},{135,0,514},{6,0,392},{7,0,65},{135,0,2019},{
-140,11,261},{135,11,922},{137,11,404},{12,0,563},{14,0,101},{18,0,129},{7,10,
-1010},{11,10,733},{11,10,759},{13,10,34},{146,10,45},{7,10,1656},{9,10,369},{10,
-10,338},{10,10,490},{11,10,154},{11,10,545},{11,10,775},{13,10,77},{141,10,274},
-{4,0,444},{10,0,146},{140,0,9},{139,11,163},{7,0,1260},{135,0,1790},{9,0,222},{
-10,0,43},{139,0,900},{137,11,234},{138,0,971},{137,0,761},{134,0,699},{136,11,
-434},{6,0,1116},{7,0,1366},{5,10,20},{6,11,197},{6,10,298},{7,10,659},{8,11,205}
-,{137,10,219},{132,11,490},{11,11,820},{150,11,51},{7,10,1440},{11,10,854},{11,
-10,872},{11,10,921},{12,10,551},{13,10,472},{142,10,367},{140,11,13},{132,0,829}
-,{12,0,242},{132,10,439},{136,10,669},{6,0,593},{6,11,452},{7,11,312},{138,11,
-219},{4,11,333},{9,11,176},{12,11,353},{141,11,187},{7,0,36},{8,0,201},{136,0,
-605},{140,0,224},{132,10,233},{134,0,1430},{134,0,1806},{4,0,523},{133,0,638},{6
-,0,1889},{9,0,958},{9,0,971},{9,0,976},{12,0,796},{12,0,799},{12,0,808},{12,0,
-835},{12,0,836},{12,0,914},{12,0,946},{15,0,216},{15,0,232},{18,0,183},{18,0,187
-},{18,0,194},{18,0,212},{18,0,232},{149,0,49},{132,10,482},{6,0,827},{134,0,1434
-},{135,10,346},{134,0,2043},{6,0,242},{7,0,227},{7,0,1581},{8,0,104},{9,0,113},{
-9,0,220},{9,0,427},{10,0,136},{10,0,239},{11,0,579},{11,0,1023},{13,0,4},{13,0,
-204},{13,0,316},{148,0,86},{134,11,1685},{7,0,148},{8,0,284},{141,0,63},{142,0,
-10},{135,11,584},{134,0,1249},{7,0,861},{135,10,334},{5,10,795},{6,10,1741},{137
-,11,70},{132,0,807},{7,11,135},{8,11,7},{8,11,62},{9,11,243},{10,11,658},{10,11,
-697},{11,11,456},{139,11,756},{9,11,395},{138,11,79},{137,11,108},{147,0,94},{
-136,0,494},{135,11,631},{135,10,622},{7,0,1510},{135,10,1750},{4,10,203},{135,10
-,1936},{7,11,406},{7,11,459},{8,11,606},{139,11,726},{7,0,1306},{8,0,505},{9,0,
-482},{10,0,126},{11,0,225},{12,0,347},{12,0,449},{13,0,19},{14,0,218},{142,0,435
-},{5,0,268},{10,0,764},{12,0,120},{13,0,39},{145,0,127},{142,11,68},{11,10,678},
-{140,10,307},{12,11,268},{12,11,640},{142,11,119},{135,10,2044},{133,11,612},{4,
-11,372},{7,11,482},{8,11,158},{9,11,602},{9,11,615},{10,11,245},{10,11,678},{10,
-11,744},{11,11,248},{139,11,806},{7,10,311},{9,10,308},{140,10,255},{4,0,384},{
-135,0,1022},{5,11,854},{135,11,1991},{135,10,1266},{4,10,400},{5,10,267},{135,10
-,232},{135,0,1703},{9,0,159},{11,0,661},{140,0,603},{4,0,964},{14,0,438},{14,0,
-444},{14,0,456},{22,0,60},{22,0,63},{9,11,106},{9,11,163},{9,11,296},{10,11,167}
-,{10,11,172},{10,11,777},{139,11,16},{136,0,583},{132,0,515},{8,0,632},{8,0,697}
-,{137,0,854},{5,11,195},{135,11,1685},{6,0,1123},{134,0,1365},{134,11,328},{7,11
-,1997},{8,11,730},{139,11,1006},{4,0,136},{133,0,551},{134,0,1782},{7,0,1287},{9
-,0,44},{10,0,552},{10,0,642},{11,0,839},{12,0,274},{12,0,275},{12,0,372},{13,0,
-91},{142,0,125},{5,11,751},{11,11,797},{140,11,203},{133,0,732},{7,0,679},{8,0,
-313},{4,10,100},{135,11,821},{10,0,361},{142,0,316},{134,0,595},{6,0,147},{7,0,
-886},{9,0,753},{138,0,268},{5,10,362},{5,10,443},{6,10,318},{7,10,1019},{139,10,
-623},{5,10,463},{136,10,296},{4,10,454},{5,11,950},{5,11,994},{134,11,351},{138,
-0,137},{5,10,48},{5,10,404},{6,10,557},{7,10,458},{8,10,597},{10,10,455},{10,10,
-606},{11,10,49},{11,10,548},{12,10,476},{13,10,18},{141,10,450},{133,0,414},{135
-,0,1762},{5,11,421},{135,11,47},{5,10,442},{135,10,1984},{134,0,599},{134,0,1749
-},{134,0,1627},{4,0,488},{132,11,350},{137,11,751},{132,0,83},{140,0,676},{133,
-11,967},{7,0,1639},{5,10,55},{140,10,161},{4,11,473},{7,11,623},{8,11,808},{9,11
-,871},{9,11,893},{11,11,38},{11,11,431},{12,11,112},{12,11,217},{12,11,243},{12,
-11,562},{12,11,683},{13,11,141},{13,11,197},{13,11,227},{13,11,406},{13,11,487},
-{14,11,156},{14,11,203},{14,11,224},{14,11,256},{18,11,58},{150,11,0},{133,10,
-450},{7,11,736},{139,11,264},{134,0,278},{4,11,222},{7,11,286},{136,11,629},{135
-,10,869},{140,0,97},{144,0,14},{134,0,1085},{4,10,213},{7,10,223},{136,10,80},{7
-,0,388},{7,0,644},{139,0,781},{132,0,849},{7,0,229},{8,0,59},{9,0,190},{10,0,378
-},{140,0,191},{7,10,381},{7,10,806},{7,10,820},{8,10,354},{8,10,437},{8,10,787},
-{9,10,657},{10,10,58},{10,10,339},{10,10,749},{11,10,914},{12,10,162},{13,10,75}
-,{14,10,106},{14,10,198},{14,10,320},{14,10,413},{146,10,43},{141,11,306},{136,
-10,747},{134,0,1115},{16,0,94},{16,0,108},{136,11,146},{6,0,700},{6,0,817},{134,
-0,1002},{133,10,692},{4,11,465},{135,11,1663},{134,10,191},{6,0,1414},{135,11,
-913},{132,0,660},{7,0,1035},{138,0,737},{6,10,162},{7,10,1960},{136,10,831},{132
-,10,706},{7,0,690},{9,0,217},{9,0,587},{140,0,521},{138,10,426},{135,10,1235},{6
-,11,82},{7,11,138},{7,11,517},{9,11,673},{139,11,238},{138,0,272},{5,11,495},{7,
-11,834},{9,11,733},{139,11,378},{134,0,1744},{132,0,1011},{7,11,828},{142,11,116
-},{4,0,733},{9,0,194},{10,0,92},{11,0,198},{12,0,84},{13,0,128},{133,11,559},{10
-,0,57},{10,0,277},{6,11,21},{6,11,1737},{7,11,1444},{136,11,224},{4,10,204},{137
-,10,902},{136,10,833},{11,0,348},{12,0,99},{18,0,1},{18,0,11},{19,0,4},{7,10,366
-},{9,10,287},{12,10,199},{12,10,556},{140,10,577},{6,0,1981},{136,0,936},{21,0,
-33},{150,0,40},{5,11,519},{138,11,204},{5,10,356},{135,10,224},{134,0,775},{135,
-0,306},{7,10,630},{9,10,567},{11,10,150},{11,10,444},{141,10,119},{5,0,979},{134
-,10,539},{133,0,611},{4,11,402},{135,11,1679},{5,0,178},{7,11,2},{8,11,323},{136
-,11,479},{5,11,59},{135,11,672},{4,0,1010},{6,0,1969},{138,11,237},{133,11,412},
-{146,11,34},{7,11,1740},{146,11,48},{134,0,664},{139,10,814},{4,11,85},{135,11,
-549},{133,11,94},{133,11,457},{132,0,390},{134,0,1510},{4,10,235},{135,10,255},{
-4,10,194},{5,10,584},{6,11,11},{6,10,384},{7,11,187},{7,10,583},{10,10,761},{11,
-10,760},{139,10,851},{4,11,522},{139,11,802},{135,0,493},{10,11,776},{13,11,345}
-,{142,11,425},{146,0,37},{4,11,52},{135,11,661},{134,0,724},{134,0,829},{133,11,
-520},{133,10,562},{4,11,281},{5,11,38},{7,11,194},{7,11,668},{7,11,1893},{137,11
-,397},{5,10,191},{137,10,271},{7,0,1537},{14,0,96},{143,0,73},{5,0,473},{11,0,
-168},{4,10,470},{6,10,153},{7,10,1503},{7,10,1923},{10,10,701},{11,10,132},{11,
-10,227},{11,10,320},{11,10,436},{11,10,525},{11,10,855},{12,10,41},{12,10,286},{
-13,10,103},{13,10,284},{14,10,255},{14,10,262},{15,10,117},{143,10,127},{133,0,
-105},{5,0,438},{9,0,694},{12,0,627},{141,0,210},{133,10,327},{6,10,552},{7,10,
-1754},{137,10,604},{134,0,1256},{152,0,11},{5,11,448},{11,11,98},{139,11,524},{7
-,0,1626},{5,10,80},{6,10,405},{7,10,403},{7,10,1502},{8,10,456},{9,10,487},{9,10
-,853},{9,10,889},{10,10,309},{11,10,721},{11,10,994},{12,10,430},{13,10,165},{14
-,11,16},{146,11,44},{132,0,779},{8,0,25},{138,0,826},{4,10,453},{5,10,887},{6,10
-,535},{8,10,6},{8,10,543},{136,10,826},{137,11,461},{140,11,632},{132,0,308},{
-135,0,741},{132,0,671},{7,0,150},{8,0,649},{136,0,1020},{9,0,99},{6,11,336},{8,
-11,552},{9,11,285},{10,11,99},{139,11,568},{134,0,521},{5,0,339},{14,0,3},{15,0,
-41},{15,0,166},{147,0,66},{6,11,423},{7,11,665},{7,11,1210},{9,11,218},{141,11,
-222},{6,0,543},{5,10,101},{5,11,256},{6,10,88},{7,10,1677},{9,10,100},{10,10,677
-},{14,10,169},{14,10,302},{14,10,313},{15,10,48},{143,10,84},{4,10,310},{7,10,
-708},{7,10,996},{9,10,795},{10,10,390},{10,10,733},{11,10,451},{12,10,249},{14,
-10,115},{14,10,286},{143,10,100},{133,10,587},{13,11,417},{14,11,129},{143,11,15
-},{134,0,1358},{136,11,554},{132,10,498},{7,10,217},{8,10,140},{138,10,610},{135
-,11,989},{135,11,634},{6,0,155},{140,0,234},{135,11,462},{132,11,618},{134,0,
-1628},{132,0,766},{4,11,339},{5,10,905},{135,11,259},{135,0,829},{4,11,759},{141
-,11,169},{7,0,1445},{4,10,456},{7,10,358},{7,10,1637},{8,10,643},{139,10,483},{5
-,0,486},{135,0,1349},{5,11,688},{135,11,712},{7,0,1635},{8,0,17},{10,0,217},{10,
-0,295},{12,0,2},{140,11,2},{138,0,558},{150,10,56},{4,11,278},{5,11,465},{135,11
-,1367},{136,11,482},{133,10,535},{6,0,1362},{6,0,1461},{10,11,274},{10,11,625},{
-139,11,530},{5,0,599},{5,11,336},{6,11,341},{6,11,478},{6,11,1763},{136,11,386},
-{7,10,1748},{137,11,151},{134,0,1376},{133,10,539},{135,11,73},{135,11,1971},{
-139,11,283},{9,0,93},{139,0,474},{6,10,91},{135,10,435},{6,0,447},{5,11,396},{
-134,11,501},{4,10,16},{5,10,316},{5,10,842},{6,10,370},{6,10,1778},{8,10,166},{
-11,10,812},{12,10,206},{12,10,351},{14,10,418},{16,10,15},{16,10,34},{18,10,3},{
-19,10,3},{19,10,7},{20,10,4},{149,10,21},{7,0,577},{7,0,1432},{9,0,475},{9,0,505
-},{9,0,526},{9,0,609},{9,0,689},{9,0,726},{9,0,735},{9,0,738},{10,0,556},{10,0,
-674},{10,0,684},{11,0,89},{11,0,202},{11,0,272},{11,0,380},{11,0,415},{11,0,505}
-,{11,0,537},{11,0,550},{11,0,562},{11,0,640},{11,0,667},{11,0,688},{11,0,847},{
-11,0,927},{11,0,930},{11,0,940},{12,0,144},{12,0,325},{12,0,329},{12,0,389},{12,
-0,403},{12,0,451},{12,0,515},{12,0,604},{12,0,616},{12,0,626},{13,0,66},{13,0,
-131},{13,0,167},{13,0,236},{13,0,368},{13,0,411},{13,0,434},{13,0,453},{13,0,461
-},{13,0,474},{14,0,59},{14,0,60},{14,0,139},{14,0,152},{14,0,276},{14,0,353},{14
-,0,402},{15,0,28},{15,0,81},{15,0,123},{15,0,152},{18,0,136},{148,0,88},{4,11,
-929},{133,11,799},{136,11,46},{142,0,307},{4,0,609},{7,0,756},{9,0,544},{11,0,
-413},{144,0,25},{10,0,687},{7,10,619},{10,10,547},{11,10,122},{140,10,601},{4,0,
-930},{133,0,947},{133,0,939},{142,0,21},{4,11,892},{133,11,770},{133,0,962},{5,0
-,651},{8,0,170},{9,0,61},{9,0,63},{10,0,23},{10,0,37},{10,0,834},{11,0,4},{11,0,
-187},{11,0,281},{11,0,503},{11,0,677},{12,0,96},{12,0,130},{12,0,244},{14,0,5},{
-14,0,40},{14,0,162},{14,0,202},{146,0,133},{4,0,406},{5,0,579},{12,0,492},{150,0
-,15},{135,11,158},{135,0,597},{132,0,981},{132,10,888},{4,10,149},{138,10,368},{
-132,0,545},{4,10,154},{7,10,1134},{136,10,105},{135,11,2001},{134,0,1558},{4,10,
-31},{6,10,429},{7,10,962},{9,10,458},{139,10,691},{132,10,312},{135,10,1642},{6,
-0,17},{6,0,1304},{7,0,16},{7,0,1001},{9,0,886},{10,0,489},{10,0,800},{11,0,782},
-{12,0,320},{13,0,467},{14,0,145},{14,0,387},{143,0,119},{135,0,1982},{17,0,17},{
-7,11,1461},{140,11,91},{4,10,236},{132,11,602},{138,0,907},{136,0,110},{7,0,272}
-,{19,0,53},{5,10,836},{5,10,857},{134,10,1680},{5,0,458},{7,11,1218},{136,11,303
-},{7,0,1983},{8,0,0},{8,0,171},{9,0,120},{9,0,732},{10,0,473},{11,0,656},{11,0,
-998},{18,0,0},{18,0,2},{19,0,21},{10,10,68},{139,10,494},{137,11,662},{4,11,13},
-{5,11,567},{7,11,1498},{9,11,124},{11,11,521},{140,11,405},{4,10,81},{139,10,867
-},{135,11,1006},{7,11,800},{7,11,1783},{138,11,12},{9,0,295},{10,0,443},{5,10,
-282},{8,10,650},{137,10,907},{132,11,735},{4,11,170},{4,10,775},{135,11,323},{6,
-0,1844},{10,0,924},{11,11,844},{12,11,104},{140,11,625},{5,11,304},{7,11,1403},{
-140,11,498},{134,0,1232},{4,0,519},{10,0,70},{12,0,26},{14,0,17},{14,0,178},{15,
-0,34},{149,0,12},{132,0,993},{4,11,148},{133,11,742},{6,0,31},{7,0,491},{7,0,530
-},{8,0,592},{11,0,53},{11,0,779},{12,0,167},{12,0,411},{14,0,14},{14,0,136},{15,
-0,72},{16,0,17},{144,0,72},{133,0,907},{134,0,733},{133,11,111},{4,10,71},{5,10,
-376},{7,10,119},{138,10,665},{136,0,55},{8,0,430},{136,11,430},{4,0,208},{5,0,
-106},{6,0,531},{8,0,408},{9,0,188},{138,0,572},{12,0,56},{11,10,827},{14,10,34},
-{143,10,148},{134,0,1693},{133,11,444},{132,10,479},{140,0,441},{9,0,449},{10,0,
-192},{138,0,740},{134,0,928},{4,0,241},{7,10,607},{136,10,99},{8,11,123},{15,11,
-6},{144,11,7},{6,11,285},{8,11,654},{11,11,749},{12,11,190},{12,11,327},{13,11,
-120},{13,11,121},{13,11,327},{15,11,47},{146,11,40},{4,10,41},{5,10,74},{7,10,
-1627},{11,10,871},{140,10,619},{7,0,1525},{11,10,329},{11,10,965},{12,10,241},{
-14,10,354},{15,10,22},{148,10,63},{132,0,259},{135,11,183},{9,10,209},{137,10,
-300},{5,11,937},{135,11,100},{133,10,98},{4,0,173},{5,0,312},{5,0,512},{135,0,
-1285},{141,0,185},{7,0,1603},{7,0,1691},{9,0,464},{11,0,195},{12,0,279},{12,0,
-448},{14,0,11},{147,0,102},{135,0,1113},{133,10,984},{4,0,452},{5,0,583},{135,0,
-720},{4,0,547},{5,0,817},{6,0,433},{7,0,593},{7,0,1378},{8,0,161},{9,0,284},{10,
-0,313},{139,0,886},{8,0,722},{4,10,182},{6,10,205},{135,10,220},{150,0,13},{4,10
-,42},{9,10,205},{9,10,786},{138,10,659},{6,0,289},{7,0,1670},{12,0,57},{151,0,4}
-,{132,10,635},{14,0,43},{146,0,21},{139,10,533},{135,0,1694},{8,0,420},{139,0,
-193},{135,0,409},{132,10,371},{4,10,272},{135,10,836},{5,10,825},{134,10,1640},{
-5,11,251},{5,11,956},{8,11,268},{9,11,214},{146,11,142},{138,0,308},{6,0,1863},{
-141,11,37},{137,10,879},{7,10,317},{135,10,569},{132,11,294},{134,0,790},{5,0,
-1002},{136,0,745},{5,11,346},{5,11,711},{136,11,390},{135,0,289},{5,0,504},{11,0
-,68},{137,10,307},{4,0,239},{6,0,477},{7,0,1607},{139,0,617},{149,0,13},{133,0,
-609},{133,11,624},{5,11,783},{7,11,1998},{135,11,2047},{133,10,525},{132,0,367},
-{132,11,594},{6,0,528},{133,10,493},{4,10,174},{135,10,911},{8,10,417},{137,10,
-782},{132,0,694},{7,0,548},{137,0,58},{4,10,32},{5,10,215},{6,10,269},{7,10,1782
-},{7,10,1892},{10,10,16},{11,10,822},{11,10,954},{141,10,481},{140,0,687},{7,0,
-1749},{136,10,477},{132,11,569},{133,10,308},{135,10,1088},{4,0,661},{138,0,1004
-},{5,11,37},{6,11,39},{6,11,451},{7,11,218},{7,11,667},{7,11,1166},{7,11,1687},{
-8,11,662},{144,11,2},{9,0,445},{12,0,53},{13,0,492},{5,10,126},{8,10,297},{9,10,
-366},{140,10,374},{7,10,1551},{139,10,361},{148,0,74},{134,11,508},{135,0,213},{
-132,10,175},{132,10,685},{6,0,760},{6,0,834},{134,0,1248},{7,11,453},{7,11,635},
-{7,11,796},{8,11,331},{9,11,328},{9,11,330},{9,11,865},{10,11,119},{10,11,235},{
-11,11,111},{11,11,129},{11,11,240},{12,11,31},{12,11,66},{12,11,222},{12,11,269}
-,{12,11,599},{12,11,689},{13,11,186},{13,11,364},{142,11,345},{7,0,1672},{139,0,
-189},{133,10,797},{133,10,565},{6,0,1548},{6,11,98},{7,11,585},{135,11,702},{9,0
-,968},{15,0,192},{149,0,56},{4,10,252},{6,11,37},{7,11,299},{7,10,1068},{7,11,
-1666},{8,11,195},{8,11,316},{9,11,178},{9,11,276},{9,11,339},{9,11,536},{10,11,
-102},{10,11,362},{10,10,434},{10,11,785},{11,11,55},{11,11,149},{11,10,228},{11,
-10,426},{11,11,773},{13,10,231},{13,11,416},{13,11,419},{14,11,38},{14,11,41},{
-14,11,210},{18,10,106},{148,10,87},{4,0,751},{11,0,390},{140,0,32},{4,0,409},{
-133,0,78},{11,11,458},{12,11,15},{140,11,432},{7,0,1602},{10,0,257},{10,0,698},{
-11,0,544},{11,0,585},{12,0,212},{13,0,307},{5,10,231},{7,10,601},{9,10,277},{9,
-10,674},{10,10,178},{10,10,418},{10,10,509},{11,10,531},{12,10,113},{12,10,475},
-{13,10,99},{142,10,428},{6,0,473},{145,0,105},{6,0,1949},{15,0,156},{133,11,645}
-,{7,10,1591},{144,10,43},{135,0,1779},{135,10,1683},{4,11,290},{135,11,1356},{
-134,0,763},{6,11,70},{7,11,1292},{10,11,762},{139,11,288},{142,0,29},{140,11,428
-},{7,0,883},{7,11,131},{7,11,422},{8,11,210},{140,11,573},{134,0,488},{4,10,399}
-,{5,10,119},{5,10,494},{7,10,751},{137,10,556},{133,0,617},{132,11,936},{139,0,
-50},{7,0,1518},{139,0,694},{137,0,785},{4,0,546},{135,0,2042},{7,11,716},{13,11,
-97},{141,11,251},{132,11,653},{145,0,22},{134,0,1016},{4,0,313},{133,0,577},{136
-,11,657},{8,0,184},{141,0,433},{135,0,935},{6,0,720},{9,0,114},{146,11,80},{12,0
-,186},{12,0,292},{14,0,100},{18,0,70},{7,10,594},{7,10,851},{7,10,1858},{9,10,
-411},{9,10,574},{9,10,666},{9,10,737},{10,10,346},{10,10,712},{11,10,246},{11,10
-,432},{11,10,517},{11,10,647},{11,10,679},{11,10,727},{12,10,304},{12,10,305},{
-12,10,323},{12,10,483},{12,10,572},{12,10,593},{12,10,602},{13,10,95},{13,10,101
-},{13,10,171},{13,10,315},{13,10,378},{13,10,425},{13,10,475},{14,10,63},{14,10,
-380},{14,10,384},{15,10,133},{18,10,112},{148,10,72},{135,10,1093},{135,11,1836}
-,{132,10,679},{137,10,203},{11,0,402},{12,0,109},{12,0,431},{13,0,179},{13,0,206
-},{14,0,217},{16,0,3},{148,0,53},{7,11,1368},{8,11,232},{8,11,361},{10,11,682},{
-138,11,742},{137,10,714},{5,0,886},{6,0,46},{6,0,1790},{7,0,14},{7,0,732},{7,0,
-1654},{8,0,95},{8,0,327},{8,0,616},{9,0,892},{10,0,598},{10,0,769},{11,0,134},{
-11,0,747},{12,0,378},{14,0,97},{137,11,534},{4,0,969},{136,10,825},{137,11,27},{
-6,0,727},{142,11,12},{133,0,1021},{134,0,1190},{134,11,1657},{5,10,143},{5,10,
-769},{6,10,1760},{7,10,682},{7,10,1992},{136,10,736},{132,0,153},{135,11,127},{
-133,0,798},{132,0,587},{6,0,598},{7,0,42},{8,0,695},{10,0,212},{11,0,158},{14,0,
-196},{145,0,85},{133,10,860},{6,0,1929},{134,0,1933},{5,0,957},{5,0,1008},{9,0,
-577},{12,0,141},{6,10,422},{7,10,0},{7,10,1544},{8,11,364},{11,10,990},{12,10,
-453},{13,10,47},{141,10,266},{134,0,1319},{4,0,129},{135,0,465},{7,0,470},{7,0,
-1057},{7,0,1201},{9,0,755},{11,0,906},{140,0,527},{7,0,908},{146,0,7},{5,0,148},
-{136,0,450},{5,10,515},{137,10,131},{7,10,1605},{11,10,962},{146,10,139},{132,10
-,646},{134,0,1166},{4,10,396},{7,10,728},{9,10,117},{13,10,202},{148,10,51},{6,
-10,121},{6,10,124},{6,10,357},{7,10,1138},{7,10,1295},{8,10,162},{139,10,655},{
-14,0,374},{142,11,374},{138,0,253},{139,0,1003},{5,11,909},{9,11,849},{138,11,
-805},{133,10,237},{7,11,525},{7,11,1579},{8,11,497},{136,11,573},{137,0,46},{132
-,0,879},{134,0,806},{135,0,1868},{6,0,1837},{134,0,1846},{6,0,730},{134,0,881},{
-7,0,965},{7,0,1460},{7,0,1604},{7,11,193},{7,11,397},{7,11,1105},{8,11,124},{8,
-11,619},{9,11,305},{10,11,264},{11,11,40},{12,11,349},{13,11,134},{13,11,295},{
-14,11,155},{15,11,120},{146,11,105},{136,0,506},{143,0,10},{4,11,262},{7,11,342}
-,{7,10,571},{7,10,1877},{10,10,366},{141,11,23},{133,11,641},{10,0,22},{9,10,513
-},{10,10,39},{12,10,122},{140,10,187},{135,11,1431},{150,11,49},{4,11,99},{6,11,
-250},{6,11,346},{8,11,127},{138,11,81},{6,0,2014},{8,0,928},{10,0,960},{10,0,979
-},{140,0,996},{134,0,296},{132,11,915},{5,11,75},{9,11,517},{10,11,470},{12,11,
-155},{141,11,224},{137,10,873},{4,0,854},{140,11,18},{134,0,587},{7,10,107},{7,
-10,838},{8,10,550},{138,10,401},{11,0,636},{15,0,145},{17,0,34},{19,0,50},{23,0,
-20},{11,10,588},{11,10,864},{11,10,968},{143,10,160},{135,11,216},{7,0,982},{10,
-0,32},{143,0,56},{133,10,768},{133,11,954},{6,11,304},{7,11,1114},{8,11,418},{10
-,11,345},{11,11,341},{11,11,675},{141,11,40},{9,11,410},{139,11,425},{136,0,941}
-,{5,0,435},{132,10,894},{5,0,85},{6,0,419},{7,0,134},{7,0,305},{7,0,361},{7,0,
-1337},{8,0,71},{140,0,519},{140,0,688},{135,0,740},{5,0,691},{7,0,345},{9,0,94},
-{140,0,169},{5,0,183},{6,0,582},{10,0,679},{140,0,435},{134,11,14},{6,0,945},{
-135,0,511},{134,11,1708},{5,11,113},{6,11,243},{7,11,1865},{11,11,161},{16,11,37
-},{145,11,99},{132,11,274},{137,0,539},{7,0,1993},{8,0,684},{134,10,272},{6,0,
-659},{134,0,982},{4,10,9},{5,10,128},{7,10,368},{11,10,480},{148,10,3},{134,0,
-583},{132,0,803},{133,0,704},{4,0,179},{5,0,198},{133,0,697},{7,0,347},{7,0,971}
-,{8,0,181},{10,0,711},{135,11,166},{136,10,682},{4,10,2},{7,10,545},{7,10,894},{
-136,11,521},{135,0,481},{132,0,243},{5,0,203},{7,0,19},{7,0,71},{7,0,113},{10,0,
-405},{11,0,357},{142,0,240},{5,11,725},{5,11,727},{135,11,1811},{6,0,826},{137,
-11,304},{7,0,1450},{139,0,99},{133,11,654},{134,0,492},{5,0,134},{6,0,408},{6,0,
-495},{7,0,1593},{6,11,273},{10,11,188},{13,11,377},{146,11,77},{9,10,769},{140,
-10,185},{135,11,410},{142,0,4},{4,0,665},{134,11,1785},{4,0,248},{7,0,137},{137,
-0,349},{5,10,530},{142,10,113},{7,0,1270},{139,0,612},{132,11,780},{5,0,371},{
-135,0,563},{135,0,826},{6,0,1535},{23,0,21},{151,0,23},{4,0,374},{7,0,547},{7,0,
-1700},{7,0,1833},{139,0,858},{133,10,556},{7,11,612},{8,11,545},{8,11,568},{8,11
-,642},{9,11,717},{10,11,541},{10,11,763},{11,11,449},{12,11,489},{13,11,153},{13
-,11,296},{14,11,138},{14,11,392},{15,11,50},{16,11,6},{16,11,12},{148,11,9},{9,0
-,311},{141,0,42},{8,10,16},{140,10,568},{6,0,1968},{6,0,2027},{138,0,991},{6,0,
-1647},{7,0,1552},{7,0,2010},{9,0,494},{137,0,509},{133,11,948},{6,10,186},{137,
-10,426},{134,0,769},{134,0,642},{132,10,585},{6,0,123},{7,0,214},{9,0,728},{10,0
-,157},{11,0,346},{11,0,662},{143,0,106},{142,11,381},{135,0,1435},{4,11,532},{5,
-11,706},{135,11,662},{5,11,837},{134,11,1651},{4,10,93},{5,10,252},{6,10,229},{7
-,10,291},{9,10,550},{139,10,644},{148,0,79},{137,10,749},{134,0,1425},{137,10,
-162},{4,11,362},{7,11,52},{7,11,303},{140,11,166},{132,10,381},{4,11,330},{7,11,
-933},{7,11,2012},{136,11,292},{135,11,767},{4,0,707},{5,0,588},{6,0,393},{13,0,
-106},{18,0,49},{147,0,41},{6,0,211},{7,0,1690},{11,0,486},{140,0,369},{137,11,
-883},{4,11,703},{135,11,207},{4,0,187},{5,0,184},{5,0,690},{7,0,1869},{10,0,756}
-,{139,0,783},{132,11,571},{134,0,1382},{5,0,175},{6,10,77},{6,10,157},{7,10,974}
-,{7,10,1301},{7,10,1339},{7,10,1490},{7,10,1873},{137,10,628},{134,0,1493},{5,11
-,873},{133,11,960},{134,0,1007},{12,11,93},{12,11,501},{13,11,362},{14,11,151},{
-15,11,40},{15,11,59},{16,11,46},{17,11,25},{18,11,14},{18,11,134},{19,11,25},{19
-,11,69},{20,11,16},{20,11,19},{20,11,66},{21,11,23},{21,11,25},{150,11,42},{11,
-10,919},{141,10,409},{134,0,219},{5,0,582},{6,0,1646},{7,0,99},{7,0,1962},{7,0,
-1986},{8,0,515},{8,0,773},{9,0,23},{9,0,491},{12,0,620},{142,0,93},{133,0,851},{
-5,11,33},{134,11,470},{135,11,1291},{134,0,1278},{135,11,1882},{135,10,1489},{
-132,0,1000},{138,0,982},{8,0,762},{8,0,812},{137,0,910},{6,11,47},{7,11,90},{7,
-11,664},{7,11,830},{7,11,1380},{7,11,2025},{8,11,448},{136,11,828},{4,0,98},{4,0
-,940},{6,0,1819},{6,0,1834},{6,0,1841},{7,0,1365},{8,0,859},{8,0,897},{8,0,918},
-{9,0,422},{9,0,670},{10,0,775},{10,0,894},{10,0,909},{10,0,910},{10,0,935},{11,0
-,210},{12,0,750},{12,0,755},{13,0,26},{13,0,457},{13,0,476},{16,0,100},{16,0,109
-},{18,0,173},{18,0,175},{8,10,398},{9,10,681},{139,10,632},{9,11,417},{137,11,
-493},{136,10,645},{138,0,906},{134,0,1730},{134,10,20},{133,11,1019},{134,0,1185
-},{10,0,40},{136,10,769},{9,0,147},{134,11,208},{140,0,650},{5,0,209},{6,0,30},{
-11,0,56},{139,0,305},{132,0,553},{138,11,344},{6,11,68},{7,11,398},{7,11,448},{7
-,11,1629},{7,11,1813},{8,11,387},{8,11,442},{9,11,710},{10,11,282},{138,11,722},
-{5,0,597},{14,0,20},{142,11,20},{135,0,1614},{135,10,1757},{4,0,150},{5,0,303},{
-6,0,327},{135,10,937},{16,0,49},{7,10,1652},{144,11,49},{8,0,192},{10,0,78},{141
-,0,359},{135,0,786},{143,0,134},{6,0,1638},{7,0,79},{7,0,496},{9,0,138},{10,0,
-336},{11,0,12},{12,0,412},{12,0,440},{142,0,305},{136,11,491},{4,10,579},{5,10,
-226},{5,10,323},{135,10,960},{7,0,204},{7,0,415},{8,0,42},{10,0,85},{139,0,564},
-{132,0,614},{4,11,403},{5,11,441},{7,11,450},{11,11,101},{12,11,193},{141,11,430
-},{135,11,1927},{135,11,1330},{4,0,3},{5,0,247},{5,0,644},{7,0,744},{7,0,1207},{
-7,0,1225},{7,0,1909},{146,0,147},{136,0,942},{4,0,1019},{134,0,2023},{5,11,679},
-{133,10,973},{5,0,285},{9,0,67},{13,0,473},{143,0,82},{7,11,328},{137,11,326},{
-151,0,8},{6,10,135},{135,10,1176},{135,11,1128},{134,0,1309},{135,11,1796},{135,
-10,314},{4,11,574},{7,11,350},{7,11,1024},{8,11,338},{9,11,677},{10,11,808},{139
-,11,508},{7,11,818},{17,11,14},{17,11,45},{18,11,75},{148,11,18},{146,10,4},{135
-,11,1081},{4,0,29},{6,0,532},{7,0,1628},{7,0,1648},{9,0,350},{10,0,433},{11,0,97
-},{11,0,557},{11,0,745},{12,0,289},{12,0,335},{12,0,348},{12,0,606},{13,0,116},{
-13,0,233},{13,0,466},{14,0,181},{14,0,209},{14,0,232},{14,0,236},{14,0,300},{16,
-0,41},{148,0,97},{7,0,318},{6,10,281},{8,10,282},{8,10,480},{8,10,499},{9,10,198
-},{10,10,143},{10,10,169},{10,10,211},{10,10,417},{10,10,574},{11,10,147},{11,10
-,395},{12,10,75},{12,10,407},{12,10,608},{13,10,500},{142,10,251},{135,11,1676},
-{135,11,2037},{135,0,1692},{5,0,501},{7,0,1704},{9,0,553},{11,0,520},{12,0,557},
-{141,0,249},{6,0,1527},{14,0,324},{15,0,55},{15,0,80},{14,11,324},{15,11,55},{
-143,11,80},{135,10,1776},{8,0,988},{137,11,297},{132,10,419},{142,0,223},{139,11
-,234},{7,0,1123},{12,0,508},{14,0,102},{14,0,226},{144,0,57},{4,10,138},{7,10,
-1012},{7,10,1280},{137,10,76},{7,0,1764},{5,10,29},{140,10,638},{134,0,2015},{
-134,0,1599},{138,11,56},{6,11,306},{7,11,1140},{7,11,1340},{8,11,133},{138,11,
-449},{139,11,1011},{6,10,1710},{135,10,2038},{7,11,1763},{140,11,310},{6,0,129},
-{4,10,17},{5,10,23},{7,10,995},{11,10,383},{11,10,437},{12,10,460},{140,10,532},
-{5,11,329},{136,11,260},{133,10,862},{132,0,534},{6,0,811},{135,0,626},{132,11,
-657},{4,0,25},{5,0,60},{6,0,504},{7,0,614},{7,0,1155},{12,0,0},{152,11,7},{7,0,
-1248},{11,0,621},{139,0,702},{137,0,321},{8,10,70},{12,10,171},{141,10,272},{10,
-10,233},{139,10,76},{4,0,379},{7,0,1397},{134,10,442},{5,11,66},{7,11,1896},{136
-,11,288},{134,11,1643},{134,10,1709},{4,11,21},{5,11,91},{5,11,570},{5,11,648},{
-5,11,750},{5,11,781},{6,11,54},{6,11,112},{6,11,402},{6,11,1732},{7,11,315},{7,
-11,749},{7,11,1347},{7,11,1900},{9,11,78},{9,11,508},{10,11,611},{11,11,510},{11
-,11,728},{13,11,36},{14,11,39},{16,11,83},{17,11,124},{148,11,30},{4,0,118},{6,0
-,274},{6,0,361},{7,0,75},{141,0,441},{10,11,322},{10,11,719},{139,11,407},{147,
-10,119},{12,11,549},{14,11,67},{147,11,60},{11,10,69},{12,10,105},{12,10,117},{
-13,10,213},{14,10,13},{14,10,62},{14,10,177},{14,10,421},{15,10,19},{146,10,141}
-,{9,0,841},{137,10,309},{7,10,608},{7,10,976},{8,11,125},{8,11,369},{8,11,524},{
-9,10,146},{10,10,206},{10,11,486},{10,10,596},{11,11,13},{11,11,381},{11,11,736}
-,{11,11,766},{11,11,845},{13,11,114},{13,10,218},{13,11,292},{14,11,47},{142,10,
-153},{12,0,693},{135,11,759},{5,0,314},{6,0,221},{7,0,419},{10,0,650},{11,0,396}
-,{12,0,156},{13,0,369},{14,0,333},{145,0,47},{6,11,1684},{6,11,1731},{7,11,356},
-{7,11,1932},{8,11,54},{8,11,221},{9,11,225},{9,11,356},{10,11,77},{10,11,446},{
-10,11,731},{12,11,404},{141,11,491},{132,11,375},{4,10,518},{135,10,1136},{4,0,
-913},{4,11,411},{11,11,643},{140,11,115},{4,11,80},{133,11,44},{8,10,689},{137,
-10,863},{138,0,880},{4,10,18},{7,10,145},{7,10,444},{7,10,1278},{8,10,49},{8,10,
-400},{9,10,71},{9,10,250},{10,10,459},{12,10,160},{144,10,24},{136,0,475},{5,0,
-1016},{5,11,299},{135,11,1083},{7,0,602},{8,0,179},{10,0,781},{140,0,126},{6,0,
-329},{138,0,111},{135,0,1864},{4,11,219},{7,11,1761},{137,11,86},{6,0,1888},{6,0
-,1892},{6,0,1901},{6,0,1904},{9,0,953},{9,0,985},{9,0,991},{9,0,1001},{12,0,818}
-,{12,0,846},{12,0,847},{12,0,861},{12,0,862},{12,0,873},{12,0,875},{12,0,877},{
-12,0,879},{12,0,881},{12,0,884},{12,0,903},{12,0,915},{12,0,926},{12,0,939},{15,
-0,182},{15,0,219},{15,0,255},{18,0,191},{18,0,209},{18,0,211},{149,0,41},{5,11,
-328},{135,11,918},{137,0,780},{12,0,82},{143,0,36},{133,10,1010},{5,0,821},{134,
-0,1687},{133,11,514},{132,0,956},{134,0,1180},{10,0,112},{5,10,87},{7,10,313},{7
-,10,1103},{10,10,582},{11,10,389},{11,10,813},{12,10,385},{13,10,286},{14,10,124
-},{146,10,108},{5,0,71},{7,0,1407},{9,0,704},{10,0,261},{10,0,619},{11,0,547},{
-11,0,619},{143,0,157},{4,0,531},{5,0,455},{5,11,301},{6,11,571},{14,11,49},{146,
-11,102},{132,10,267},{6,0,385},{7,0,2008},{9,0,337},{138,0,517},{133,11,726},{
-133,11,364},{4,11,76},{7,11,1550},{9,11,306},{9,11,430},{9,11,663},{10,11,683},{
-11,11,427},{11,11,753},{12,11,334},{12,11,442},{14,11,258},{14,11,366},{143,11,
-131},{6,0,1865},{6,0,1879},{6,0,1881},{6,0,1894},{6,0,1908},{9,0,915},{9,0,926},
-{9,0,940},{9,0,943},{9,0,966},{9,0,980},{9,0,989},{9,0,1005},{9,0,1010},{12,0,
-813},{12,0,817},{12,0,840},{12,0,843},{12,0,855},{12,0,864},{12,0,871},{12,0,872
-},{12,0,899},{12,0,905},{12,0,924},{15,0,171},{15,0,181},{15,0,224},{15,0,235},{
-15,0,251},{146,0,184},{137,11,52},{5,0,16},{6,0,86},{6,0,603},{7,0,292},{7,0,561
-},{8,0,257},{8,0,382},{9,0,721},{9,0,778},{11,0,581},{140,0,466},{4,0,486},{5,0,
-491},{135,10,1121},{4,0,72},{6,0,265},{135,0,1300},{135,11,1183},{10,10,249},{
-139,10,209},{132,10,561},{137,11,519},{4,11,656},{4,10,760},{135,11,779},{9,10,
-154},{140,10,485},{135,11,1793},{135,11,144},{136,10,255},{133,0,621},{4,10,368}
-,{135,10,641},{135,11,1373},{7,11,554},{7,11,605},{141,11,10},{137,0,234},{5,0,
-815},{6,0,1688},{134,0,1755},{5,11,838},{5,11,841},{134,11,1649},{7,0,1987},{7,0
-,2040},{136,0,743},{133,11,1012},{6,0,197},{136,0,205},{6,0,314},{134,11,314},{
-144,11,53},{6,11,251},{7,11,365},{7,11,1357},{7,11,1497},{8,11,154},{141,11,281}
-,{133,11,340},{6,0,452},{7,0,312},{138,0,219},{138,0,589},{4,0,333},{9,0,176},{
-12,0,353},{141,0,187},{9,10,92},{147,10,91},{134,0,1110},{11,0,47},{139,11,495},
-{6,10,525},{8,10,806},{9,10,876},{140,10,284},{8,11,261},{9,11,144},{9,11,466},{
-10,11,370},{12,11,470},{13,11,144},{142,11,348},{137,11,897},{8,0,863},{8,0,864}
-,{8,0,868},{8,0,884},{10,0,866},{10,0,868},{10,0,873},{10,0,911},{10,0,912},{10,
-0,944},{12,0,727},{6,11,248},{9,11,546},{10,11,535},{11,11,681},{141,11,135},{6,
-0,300},{135,0,1515},{134,0,1237},{139,10,958},{133,10,594},{140,11,250},{134,0,
-1685},{134,11,567},{7,0,135},{8,0,7},{8,0,62},{9,0,243},{10,0,658},{10,0,697},{
-11,0,456},{139,0,756},{9,0,395},{138,0,79},{6,10,1641},{136,10,820},{4,10,302},{
-135,10,1766},{134,11,174},{135,10,1313},{135,0,631},{134,10,1674},{134,11,395},{
-138,0,835},{7,0,406},{7,0,459},{8,0,606},{139,0,726},{134,11,617},{134,0,979},{6
-,10,389},{7,10,149},{9,10,142},{138,10,94},{5,11,878},{133,11,972},{6,10,8},{7,
-10,1881},{8,10,91},{136,11,511},{133,0,612},{132,11,351},{4,0,372},{7,0,482},{8,
-0,158},{9,0,602},{9,0,615},{10,0,245},{10,0,678},{10,0,744},{11,0,248},{139,0,
-806},{5,0,854},{135,0,1991},{132,11,286},{135,11,344},{7,11,438},{7,11,627},{7,
-11,1516},{8,11,40},{9,11,56},{9,11,294},{10,11,30},{10,11,259},{11,11,969},{146,
-11,148},{135,0,1492},{5,11,259},{7,11,414},{7,11,854},{142,11,107},{135,10,1746}
-,{6,0,833},{134,0,998},{135,10,24},{6,0,750},{135,0,1739},{4,10,503},{135,10,
-1661},{5,10,130},{7,10,1314},{9,10,610},{10,10,718},{11,10,601},{11,10,819},{11,
-10,946},{140,10,536},{10,10,149},{11,10,280},{142,10,336},{132,11,738},{135,10,
-1946},{5,0,195},{135,0,1685},{7,0,1997},{8,0,730},{139,0,1006},{151,11,17},{133,
-11,866},{14,0,463},{14,0,470},{150,0,61},{5,0,751},{8,0,266},{11,0,578},{4,10,
-392},{135,10,1597},{5,10,433},{9,10,633},{139,10,629},{135,0,821},{6,0,715},{134
-,0,1325},{133,11,116},{6,0,868},{132,11,457},{134,0,959},{6,10,234},{138,11,199}
-,{7,0,1053},{7,10,1950},{8,10,680},{11,10,817},{147,10,88},{7,10,1222},{138,10,
-386},{5,0,950},{5,0,994},{6,0,351},{134,0,1124},{134,0,1081},{7,0,1595},{6,10,5}
-,{11,10,249},{12,10,313},{16,10,66},{145,10,26},{148,0,59},{5,11,527},{6,11,189}
-,{135,11,859},{5,10,963},{6,10,1773},{11,11,104},{11,11,554},{15,11,60},{143,11,
-125},{135,0,47},{137,0,684},{134,11,116},{134,0,1606},{134,0,777},{7,0,1020},{8,
-10,509},{136,10,792},{135,0,1094},{132,0,350},{133,11,487},{4,11,86},{5,11,667},
-{5,11,753},{6,11,316},{6,11,455},{135,11,946},{7,0,1812},{13,0,259},{13,0,356},{
-14,0,242},{147,0,114},{132,10,931},{133,0,967},{4,0,473},{7,0,623},{8,0,808},{9,
-0,871},{9,0,893},{11,0,38},{11,0,431},{12,0,112},{12,0,217},{12,0,243},{12,0,562
-},{12,0,663},{12,0,683},{13,0,141},{13,0,197},{13,0,227},{13,0,406},{13,0,487},{
-14,0,156},{14,0,203},{14,0,224},{14,0,256},{18,0,58},{150,0,0},{138,0,286},{7,10
-,943},{139,10,614},{135,10,1837},{150,11,45},{132,0,798},{4,0,222},{7,0,286},{
-136,0,629},{4,11,79},{7,11,1773},{10,11,450},{11,11,589},{13,11,332},{13,11,493}
-,{14,11,183},{14,11,334},{14,11,362},{14,11,368},{14,11,376},{14,11,379},{19,11,
-90},{19,11,103},{19,11,127},{148,11,90},{5,0,337},{11,0,513},{11,0,889},{11,0,
-961},{12,0,461},{13,0,79},{15,0,121},{4,10,90},{5,10,545},{7,10,754},{9,10,186},
-{10,10,72},{10,10,782},{11,10,577},{11,10,610},{12,10,354},{12,10,362},{140,10,
-595},{141,0,306},{136,0,146},{7,0,1646},{9,10,329},{11,10,254},{141,11,124},{4,0
-,465},{135,0,1663},{132,0,525},{133,11,663},{10,0,299},{18,0,74},{9,10,187},{11,
-10,1016},{145,10,44},{7,0,165},{7,0,919},{4,10,506},{136,10,517},{5,10,295},{135
-,10,1680},{133,11,846},{134,0,1064},{5,11,378},{7,11,1402},{7,11,1414},{8,11,465
-},{9,11,286},{10,11,185},{10,11,562},{10,11,635},{11,11,31},{11,11,393},{12,11,
-456},{13,11,312},{18,11,65},{18,11,96},{147,11,89},{132,0,596},{7,10,987},{9,10,
-688},{10,10,522},{11,10,788},{140,10,566},{6,0,82},{7,0,138},{7,0,517},{7,0,1741
-},{11,0,238},{4,11,648},{134,10,1775},{7,0,1233},{7,10,700},{7,10,940},{8,10,514
-},{9,10,116},{9,10,535},{10,10,118},{11,10,107},{11,10,148},{11,10,922},{12,10,
-254},{12,10,421},{142,10,238},{4,0,962},{6,0,1824},{8,0,894},{12,0,708},{12,0,
-725},{14,0,451},{20,0,94},{22,0,59},{150,0,62},{5,11,945},{6,11,1656},{6,11,1787
-},{7,11,167},{8,11,824},{9,11,391},{10,11,375},{139,11,185},{5,0,495},{7,0,834},
-{9,0,733},{139,0,378},{4,10,743},{135,11,1273},{6,0,1204},{7,11,1645},{8,11,352}
-,{137,11,249},{139,10,292},{133,0,559},{132,11,152},{9,0,499},{10,0,341},{15,0,
-144},{19,0,49},{7,10,1283},{9,10,227},{11,10,325},{11,10,408},{14,10,180},{146,
-10,47},{6,0,21},{6,0,1737},{7,0,1444},{136,0,224},{133,11,1006},{7,0,1446},{9,0,
-97},{17,0,15},{5,10,81},{7,10,146},{7,10,1342},{8,10,53},{8,10,561},{8,10,694},{
-8,10,754},{9,10,115},{9,10,894},{10,10,462},{10,10,813},{11,10,230},{11,10,657},
-{11,10,699},{11,10,748},{12,10,119},{12,10,200},{12,10,283},{142,10,273},{5,10,
-408},{137,10,747},{135,11,431},{135,11,832},{6,0,729},{134,0,953},{4,0,727},{8,0
-,565},{5,11,351},{7,11,264},{136,11,565},{134,0,1948},{5,0,519},{5,11,40},{7,11,
-598},{7,11,1638},{8,11,78},{9,11,166},{9,11,640},{9,11,685},{9,11,773},{11,11,
-215},{13,11,65},{14,11,172},{14,11,317},{145,11,6},{8,11,60},{9,11,343},{139,11,
-769},{137,11,455},{134,0,1193},{140,0,790},{7,11,1951},{8,11,765},{8,11,772},{
-140,11,671},{7,11,108},{8,11,219},{8,11,388},{9,11,639},{9,11,775},{11,11,275},{
-140,11,464},{132,11,468},{7,10,30},{8,10,86},{8,10,315},{8,10,700},{9,10,576},{9
-,10,858},{11,10,310},{11,10,888},{11,10,904},{12,10,361},{141,10,248},{5,11,15},
-{6,11,56},{7,11,1758},{8,11,500},{9,11,730},{11,11,331},{13,11,150},{142,11,282}
-,{4,0,402},{7,0,2},{8,0,323},{136,0,479},{138,10,839},{11,0,580},{142,0,201},{5,
-0,59},{135,0,672},{137,10,617},{146,0,34},{134,11,1886},{4,0,961},{136,0,896},{6
-,0,1285},{5,11,205},{6,11,438},{137,11,711},{134,10,428},{7,10,524},{8,10,169},{
-8,10,234},{9,10,480},{138,10,646},{148,0,46},{141,0,479},{133,11,534},{6,0,2019}
-,{134,10,1648},{4,0,85},{7,0,549},{7,10,1205},{138,10,637},{4,0,663},{5,0,94},{7
-,11,235},{7,11,1475},{15,11,68},{146,11,120},{6,11,443},{9,11,237},{9,11,571},{9
-,11,695},{10,11,139},{11,11,715},{12,11,417},{141,11,421},{132,0,783},{4,0,682},
-{8,0,65},{9,10,39},{10,10,166},{11,10,918},{12,10,635},{20,10,10},{22,10,27},{22
-,10,43},{150,10,52},{6,0,11},{135,0,187},{132,0,522},{4,0,52},{135,0,661},{4,0,
-383},{133,0,520},{135,11,546},{11,0,343},{142,0,127},{4,11,578},{7,10,157},{7,11
-,624},{7,11,916},{8,10,279},{10,11,256},{11,11,87},{139,11,703},{134,10,604},{4,
-0,281},{5,0,38},{7,0,194},{7,0,668},{7,0,1893},{137,0,397},{7,10,945},{11,10,713
-},{139,10,744},{139,10,1022},{9,0,635},{139,0,559},{5,11,923},{7,11,490},{12,11,
-553},{13,11,100},{14,11,118},{143,11,75},{132,0,975},{132,10,567},{137,10,859},{
-7,10,1846},{7,11,1846},{8,10,628},{136,11,628},{148,0,116},{138,11,750},{14,0,51
-},{14,11,51},{15,11,7},{148,11,20},{132,0,858},{134,0,1075},{4,11,924},{133,10,
-762},{136,0,535},{133,0,448},{10,10,784},{141,10,191},{133,10,298},{7,0,610},{
-135,0,1501},{7,10,633},{7,10,905},{7,10,909},{7,10,1538},{9,10,767},{140,10,636}
-,{4,11,265},{7,11,807},{135,11,950},{5,11,93},{12,11,267},{144,11,26},{136,0,191
-},{139,10,301},{135,10,1970},{135,0,267},{4,0,319},{5,0,699},{138,0,673},{6,0,
-336},{7,0,92},{7,0,182},{8,0,453},{8,0,552},{9,0,204},{9,0,285},{10,0,99},{11,0,
-568},{11,0,950},{12,0,94},{16,0,20},{16,0,70},{19,0,55},{12,10,644},{144,10,90},
-{6,0,551},{7,0,1308},{7,10,845},{7,11,994},{8,10,160},{137,10,318},{19,11,1},{19
-,11,26},{150,11,9},{7,0,1406},{9,0,218},{141,0,222},{5,0,256},{138,0,69},{5,11,
-233},{5,11,320},{6,11,140},{7,11,330},{136,11,295},{6,0,1980},{136,0,952},{4,0,
-833},{137,11,678},{133,11,978},{4,11,905},{6,11,1701},{137,11,843},{138,10,735},
-{136,10,76},{17,0,39},{148,0,36},{18,0,81},{146,11,81},{14,0,352},{17,0,53},{18,
-0,146},{18,0,152},{19,0,11},{150,0,54},{135,0,634},{138,10,841},{132,0,618},{4,0
-,339},{7,0,259},{17,0,73},{4,11,275},{140,11,376},{132,11,509},{7,11,273},{139,
-11,377},{4,0,759},{13,0,169},{137,10,804},{6,10,96},{135,10,1426},{4,10,651},{
-133,10,289},{7,0,1075},{8,10,35},{9,10,511},{10,10,767},{147,10,118},{6,0,649},{
-6,0,670},{136,0,482},{5,0,336},{6,0,341},{6,0,478},{6,0,1763},{136,0,386},{5,11,
-802},{7,11,2021},{8,11,805},{14,11,94},{15,11,65},{16,11,4},{16,11,77},{16,11,80
-},{145,11,5},{6,0,1035},{5,11,167},{5,11,899},{6,11,410},{137,11,777},{134,11,
-1705},{5,0,924},{133,0,969},{132,10,704},{135,0,73},{135,11,10},{135,10,1078},{5
-,11,11},{6,11,117},{6,11,485},{7,11,1133},{9,11,582},{9,11,594},{11,11,21},{11,
-11,818},{12,11,535},{141,11,86},{135,0,1971},{4,11,264},{7,11,1067},{8,11,204},{
-8,11,385},{139,11,953},{6,0,1458},{135,0,1344},{5,0,396},{134,0,501},{4,10,720},
-{133,10,306},{4,0,929},{5,0,799},{8,0,46},{8,0,740},{133,10,431},{7,11,646},{7,
-11,1730},{11,11,446},{141,11,178},{7,0,276},{5,10,464},{6,10,236},{7,10,696},{7,
-10,914},{7,10,1108},{7,10,1448},{9,10,15},{9,10,564},{10,10,14},{12,10,565},{13,
-10,449},{14,10,53},{15,10,13},{16,10,64},{145,10,41},{4,0,892},{133,0,770},{6,10
-,1767},{12,10,194},{145,10,107},{135,0,158},{5,10,840},{138,11,608},{134,0,1432}
-,{138,11,250},{8,11,794},{9,11,400},{10,11,298},{142,11,228},{151,0,25},{7,11,
-1131},{135,11,1468},{135,0,2001},{9,10,642},{11,10,236},{142,10,193},{4,10,68},{
-5,10,634},{6,10,386},{7,10,794},{8,10,273},{9,10,563},{10,10,105},{10,10,171},{
-11,10,94},{139,10,354},{136,11,724},{132,0,478},{11,11,512},{13,11,205},{19,11,
-30},{22,11,36},{151,11,19},{7,0,1461},{140,0,91},{6,11,190},{7,11,768},{135,11,
-1170},{4,0,602},{8,0,211},{4,10,95},{7,10,416},{139,10,830},{7,10,731},{13,10,20
-},{143,10,11},{6,0,1068},{135,0,1872},{4,0,13},{5,0,567},{7,0,1498},{9,0,124},{
-11,0,521},{12,0,405},{135,11,1023},{135,0,1006},{132,0,735},{138,0,812},{4,0,170
-},{135,0,323},{6,11,137},{9,11,75},{9,11,253},{10,11,194},{138,11,444},{5,0,304}
-,{7,0,1403},{5,10,864},{10,10,648},{11,10,671},{143,10,46},{135,11,1180},{133,10
-,928},{4,0,148},{133,0,742},{11,10,986},{140,10,682},{133,0,523},{135,11,1743},{
-7,0,730},{18,0,144},{19,0,61},{8,10,44},{9,10,884},{10,10,580},{11,10,399},{11,
-10,894},{143,10,122},{5,11,760},{7,11,542},{8,11,135},{136,11,496},{136,0,981},{
-133,0,111},{10,0,132},{11,0,191},{11,0,358},{139,0,460},{7,11,319},{7,11,355},{7
-,11,763},{10,11,389},{145,11,43},{134,0,890},{134,0,1420},{136,11,557},{133,10,
-518},{133,0,444},{135,0,1787},{135,10,1852},{8,0,123},{15,0,6},{144,0,7},{6,0,
-2041},{10,11,38},{139,11,784},{136,0,932},{5,0,937},{135,0,100},{6,0,995},{4,11,
-58},{5,11,286},{6,11,319},{7,11,402},{7,11,1254},{7,11,1903},{8,11,356},{140,11,
-408},{4,11,389},{9,11,181},{9,11,255},{10,11,8},{10,11,29},{10,11,816},{11,11,
-311},{11,11,561},{12,11,67},{141,11,181},{138,0,255},{5,0,138},{4,10,934},{136,
-10,610},{4,0,965},{10,0,863},{138,0,898},{10,10,804},{138,10,832},{12,0,631},{8,
-10,96},{9,10,36},{10,10,607},{11,10,423},{11,10,442},{12,10,309},{14,10,199},{15
-,10,90},{145,10,110},{134,0,1394},{4,0,652},{8,0,320},{22,0,6},{22,0,16},{9,10,
-13},{9,10,398},{9,10,727},{10,10,75},{10,10,184},{10,10,230},{10,10,564},{10,10,
-569},{11,10,973},{12,10,70},{12,10,189},{13,10,57},{141,10,257},{6,0,897},{134,0
-,1333},{4,0,692},{133,0,321},{133,11,373},{135,0,922},{5,0,619},{133,0,698},{137
-,10,631},{5,10,345},{135,10,1016},{9,0,957},{9,0,1018},{12,0,828},{12,0,844},{12
-,0,897},{12,0,901},{12,0,943},{15,0,180},{18,0,197},{18,0,200},{18,0,213},{18,0,
-214},{146,0,226},{5,0,917},{134,0,1659},{135,0,1100},{134,0,1173},{134,0,1930},{
-5,0,251},{5,0,956},{8,0,268},{9,0,214},{146,0,142},{133,10,673},{137,10,850},{4,
-10,287},{133,10,1018},{132,11,672},{5,0,346},{5,0,711},{8,0,390},{11,11,752},{
-139,11,885},{5,10,34},{10,10,724},{12,10,444},{13,10,354},{18,10,32},{23,10,24},
-{23,10,31},{152,10,5},{4,11,710},{134,11,606},{134,0,744},{134,10,382},{133,11,
-145},{4,10,329},{7,11,884},{140,11,124},{4,11,467},{5,11,405},{134,11,544},{9,10
-,846},{138,10,827},{133,0,624},{9,11,372},{15,11,2},{19,11,10},{147,11,18},{4,11
-,387},{135,11,1288},{5,0,783},{7,0,1998},{135,0,2047},{132,10,906},{136,10,366},
-{135,11,550},{4,10,123},{4,10,649},{5,10,605},{7,10,1509},{136,10,36},{134,0,
-1125},{132,0,594},{133,10,767},{135,11,1227},{136,11,467},{4,11,576},{135,11,
-1263},{4,0,268},{7,0,1534},{135,11,1534},{4,10,273},{5,10,658},{5,11,919},{5,10,
-995},{134,11,1673},{133,0,563},{134,10,72},{135,10,1345},{4,11,82},{5,11,333},{5
-,11,904},{6,11,207},{7,11,325},{7,11,1726},{8,11,101},{10,11,778},{139,11,220},{
-5,0,37},{6,0,39},{6,0,451},{7,0,218},{7,0,667},{7,0,1166},{7,0,1687},{8,0,662},{
-16,0,2},{133,10,589},{134,0,1332},{133,11,903},{134,0,508},{5,10,117},{6,10,514}
-,{6,10,541},{7,10,1164},{7,10,1436},{8,10,220},{8,10,648},{10,10,688},{11,10,560
-},{140,11,147},{6,11,555},{135,11,485},{133,10,686},{7,0,453},{7,0,635},{7,0,796
-},{8,0,331},{9,0,330},{9,0,865},{10,0,119},{10,0,235},{11,0,111},{11,0,129},{11,
-0,240},{12,0,31},{12,0,66},{12,0,222},{12,0,269},{12,0,599},{12,0,684},{12,0,689
-},{12,0,691},{142,0,345},{135,0,1834},{4,11,705},{7,11,615},{138,11,251},{136,11
-,345},{137,0,527},{6,0,98},{7,0,702},{135,0,991},{11,0,576},{14,0,74},{7,10,196}
-,{10,10,765},{11,10,347},{11,10,552},{11,10,790},{12,10,263},{13,10,246},{13,10,
-270},{13,10,395},{14,10,176},{14,10,190},{14,10,398},{14,10,412},{15,10,32},{15,
-10,63},{16,10,88},{147,10,105},{134,11,90},{13,0,84},{141,0,122},{6,0,37},{7,0,
-299},{7,0,1666},{8,0,195},{8,0,316},{9,0,178},{9,0,276},{9,0,339},{9,0,536},{10,
-0,102},{10,0,362},{10,0,785},{11,0,55},{11,0,149},{11,0,773},{13,0,416},{13,0,
-419},{14,0,38},{14,0,41},{142,0,210},{5,10,381},{135,10,1792},{7,11,813},{12,11,
-497},{141,11,56},{7,10,616},{138,10,413},{133,0,645},{6,11,125},{135,11,1277},{
-132,0,290},{6,0,70},{7,0,1292},{10,0,762},{139,0,288},{6,10,120},{7,10,1188},{7,
-10,1710},{8,10,286},{9,10,667},{11,10,592},{139,10,730},{135,11,1784},{7,0,1315}
-,{135,11,1315},{134,0,1955},{135,10,1146},{7,0,131},{7,0,422},{8,0,210},{140,0,
-573},{4,10,352},{135,10,687},{139,0,797},{143,0,38},{14,0,179},{15,0,151},{150,0
-,11},{7,0,488},{4,10,192},{5,10,49},{6,10,200},{6,10,293},{134,10,1696},{132,0,
-936},{135,11,703},{6,11,160},{7,11,1106},{9,11,770},{10,11,618},{11,11,112},{140
-,11,413},{5,0,453},{134,0,441},{135,0,595},{132,10,650},{132,10,147},{6,0,991},{
-6,0,1182},{12,11,271},{145,11,109},{133,10,934},{140,11,221},{132,0,653},{7,0,
-505},{135,0,523},{134,0,903},{135,11,479},{7,11,304},{9,11,646},{9,11,862},{10,
-11,262},{11,11,696},{12,11,208},{15,11,79},{147,11,108},{146,0,80},{135,11,981},
-{142,0,432},{132,0,314},{137,11,152},{7,0,1368},{8,0,232},{8,0,361},{10,0,682},{
-138,0,742},{135,11,1586},{9,0,534},{4,11,434},{11,11,663},{12,11,210},{13,11,166
-},{13,11,310},{14,11,373},{147,11,43},{7,11,1091},{135,11,1765},{6,11,550},{135,
-11,652},{137,0,27},{142,0,12},{4,10,637},{5,11,553},{7,11,766},{138,11,824},{7,
-11,737},{8,11,298},{136,11,452},{7,0,736},{139,0,264},{134,0,1657},{133,11,292},
-{138,11,135},{6,0,844},{134,0,1117},{135,0,127},{9,10,867},{138,10,837},{6,0,
-1184},{134,0,1208},{134,0,1294},{136,0,364},{6,0,1415},{7,0,1334},{11,0,125},{6,
-10,170},{7,11,393},{8,10,395},{8,10,487},{10,11,603},{11,11,206},{141,10,147},{
-137,11,748},{4,11,912},{137,11,232},{4,10,535},{136,10,618},{137,0,792},{7,11,
-1973},{136,11,716},{135,11,98},{5,0,909},{9,0,849},{138,0,805},{4,0,630},{132,0,
-699},{5,11,733},{14,11,103},{150,10,23},{12,11,158},{18,11,8},{19,11,62},{20,11,
-6},{22,11,4},{23,11,2},{151,11,9},{132,0,968},{132,10,778},{132,10,46},{5,10,811
-},{6,10,1679},{6,10,1714},{135,10,2032},{6,0,1446},{7,10,1458},{9,10,407},{139,
-10,15},{7,0,206},{7,0,397},{7,0,621},{7,0,640},{8,0,124},{8,0,619},{9,0,305},{9,
-0,643},{10,0,264},{10,0,628},{11,0,40},{12,0,349},{13,0,134},{13,0,295},{14,0,
-155},{15,0,120},{18,0,105},{6,10,34},{7,10,1089},{8,10,708},{8,10,721},{9,10,363
-},{148,10,98},{4,0,262},{5,0,641},{135,0,342},{137,11,72},{4,0,99},{6,0,250},{6,
-0,346},{8,0,127},{138,0,81},{132,0,915},{5,0,75},{9,0,517},{10,0,470},{12,0,155}
-,{141,0,224},{132,10,462},{11,11,600},{11,11,670},{141,11,245},{142,0,83},{5,10,
-73},{6,10,23},{134,10,338},{6,0,1031},{139,11,923},{7,11,164},{7,11,1571},{9,11,
-107},{140,11,225},{134,0,1470},{133,0,954},{6,0,304},{8,0,418},{10,0,345},{11,0,
-341},{139,0,675},{9,0,410},{139,0,425},{4,11,27},{5,11,484},{5,11,510},{6,11,434
-},{7,11,1000},{7,11,1098},{8,11,2},{136,11,200},{134,0,734},{140,11,257},{7,10,
-725},{8,10,498},{139,10,268},{134,0,1822},{135,0,1798},{135,10,773},{132,11,460}
-,{4,11,932},{133,11,891},{134,0,14},{132,10,583},{7,10,1462},{8,11,625},{139,10,
-659},{5,0,113},{6,0,243},{6,0,1708},{7,0,1865},{11,0,161},{16,0,37},{17,0,99},{
-133,10,220},{134,11,76},{5,11,461},{135,11,1925},{140,0,69},{8,11,92},{137,11,
-221},{139,10,803},{132,10,544},{4,0,274},{134,0,922},{132,0,541},{5,0,627},{6,10
-,437},{6,10,564},{11,10,181},{141,10,183},{135,10,1192},{7,0,166},{132,11,763},{
-133,11,253},{134,0,849},{9,11,73},{10,11,110},{14,11,185},{145,11,119},{5,11,212
-},{12,11,35},{141,11,382},{133,0,717},{137,0,304},{136,0,600},{133,0,654},{6,0,
-273},{10,0,188},{13,0,377},{146,0,77},{4,10,790},{5,10,273},{134,10,394},{132,0,
-543},{135,0,410},{11,0,98},{11,0,524},{141,0,87},{132,0,941},{135,11,1175},{4,0,
-250},{7,0,1612},{11,0,186},{12,0,133},{6,10,127},{7,10,1511},{8,10,613},{12,10,
-495},{12,10,586},{12,10,660},{12,10,668},{14,10,385},{15,10,118},{17,10,20},{146
-,10,98},{6,0,1785},{133,11,816},{134,0,1339},{7,0,961},{7,0,1085},{7,0,1727},{8,
-0,462},{6,10,230},{135,11,1727},{9,0,636},{135,10,1954},{132,0,780},{5,11,869},{
-5,11,968},{6,11,1626},{8,11,734},{136,11,784},{4,11,542},{6,11,1716},{6,11,1727}
-,{7,11,1082},{7,11,1545},{8,11,56},{8,11,118},{8,11,412},{8,11,564},{9,11,888},{
-9,11,908},{10,11,50},{10,11,423},{11,11,685},{11,11,697},{11,11,933},{12,11,299}
-,{13,11,126},{13,11,136},{13,11,170},{141,11,190},{134,11,226},{4,11,232},{9,11,
-202},{10,11,474},{140,11,433},{137,11,500},{5,0,529},{136,10,68},{132,10,654},{4
-,10,156},{7,10,998},{7,10,1045},{7,10,1860},{9,10,48},{9,10,692},{11,10,419},{
-139,10,602},{7,0,1276},{8,0,474},{9,0,652},{6,11,108},{7,11,1003},{7,11,1181},{
-136,11,343},{7,11,1264},{7,11,1678},{11,11,945},{12,11,341},{12,11,471},{140,11,
-569},{134,11,1712},{5,0,948},{12,0,468},{19,0,96},{148,0,24},{4,11,133},{7,11,
-711},{7,11,1298},{7,11,1585},{135,11,1929},{6,0,753},{140,0,657},{139,0,941},{6,
-11,99},{7,11,1808},{145,11,57},{6,11,574},{7,11,428},{7,11,1250},{10,11,669},{11
-,11,485},{11,11,840},{12,11,300},{142,11,250},{4,0,532},{5,0,706},{135,0,662},{5
-,0,837},{6,0,1651},{139,0,985},{7,0,1861},{9,10,197},{10,10,300},{12,10,473},{13
-,10,90},{141,10,405},{137,11,252},{6,11,323},{135,11,1564},{4,0,330},{4,0,863},{
-7,0,933},{7,0,2012},{8,0,292},{7,11,461},{8,11,775},{138,11,435},{132,10,606},{4
-,11,655},{7,11,850},{17,11,75},{146,11,137},{135,0,767},{7,10,1978},{136,10,676}
-,{132,0,641},{135,11,1559},{134,0,1233},{137,0,242},{17,0,114},{4,10,361},{133,
-10,315},{137,0,883},{132,10,461},{138,0,274},{134,0,2008},{134,0,1794},{4,0,703}
-,{135,0,207},{12,0,285},{132,10,472},{132,0,571},{5,0,873},{5,0,960},{8,0,823},{
-9,0,881},{136,11,577},{7,0,617},{10,0,498},{11,0,501},{12,0,16},{140,0,150},{138
-,10,747},{132,0,431},{133,10,155},{11,0,283},{11,0,567},{7,10,163},{8,10,319},{9
-,10,402},{10,10,24},{10,10,681},{11,10,200},{12,10,253},{12,10,410},{142,10,219}
-,{4,11,413},{5,11,677},{8,11,432},{140,11,280},{9,0,401},{5,10,475},{7,10,1780},
-{11,10,297},{11,10,558},{14,10,322},{147,10,76},{6,0,781},{9,0,134},{10,0,2},{10
-,0,27},{10,0,333},{11,0,722},{143,0,1},{5,0,33},{6,0,470},{139,0,424},{135,0,
-2006},{12,0,783},{135,10,1956},{136,0,274},{135,0,1882},{132,0,794},{135,0,1848}
-,{5,10,944},{134,10,1769},{6,0,47},{7,0,90},{7,0,664},{7,0,830},{7,0,1380},{7,0,
-2025},{8,0,448},{136,0,828},{132,10,144},{134,0,1199},{4,11,395},{139,11,762},{
-135,11,1504},{9,0,417},{137,0,493},{9,11,174},{10,11,164},{11,11,440},{11,11,841
-},{143,11,98},{134,11,426},{139,11,1002},{134,0,295},{134,0,816},{6,10,247},{137
-,10,555},{133,0,1019},{4,0,620},{5,11,476},{10,10,280},{138,10,797},{139,0,464},
-{5,11,76},{6,11,458},{6,11,497},{7,11,764},{7,11,868},{9,11,658},{10,11,594},{11
-,11,173},{11,11,566},{12,11,20},{12,11,338},{141,11,200},{134,0,208},{4,11,526},
-{7,11,1029},{135,11,1054},{132,11,636},{6,11,233},{7,11,660},{7,11,1124},{17,11,
-31},{19,11,22},{151,11,14},{10,0,442},{133,10,428},{10,0,930},{140,0,778},{6,0,
-68},{7,0,448},{7,0,1629},{7,0,1769},{7,0,1813},{8,0,442},{8,0,516},{9,0,710},{10
-,0,282},{10,0,722},{7,10,1717},{138,10,546},{134,0,1128},{11,0,844},{12,0,104},{
-140,0,625},{4,11,432},{135,11,824},{138,10,189},{133,0,787},{133,10,99},{4,11,
-279},{7,11,301},{137,11,362},{8,0,491},{4,10,397},{136,10,555},{4,11,178},{133,
-11,399},{134,0,711},{144,0,9},{4,0,403},{5,0,441},{7,0,450},{10,0,840},{11,0,101
-},{12,0,193},{141,0,430},{135,11,1246},{12,10,398},{20,10,39},{21,10,11},{150,10
-,41},{4,10,485},{7,10,353},{135,10,1523},{6,10,366},{7,10,1384},{7,10,1601},{135
-,11,1912},{7,0,396},{10,0,160},{135,11,396},{137,10,282},{134,11,1692},{4,10,157
-},{5,10,471},{6,11,202},{10,11,448},{11,11,208},{12,11,360},{17,11,117},{17,11,
-118},{18,11,27},{148,11,67},{133,0,679},{137,0,326},{136,10,116},{7,11,872},{10,
-11,516},{139,11,167},{132,11,224},{5,11,546},{7,11,35},{8,11,11},{8,11,12},{9,11
-,315},{9,11,533},{10,11,802},{11,11,166},{12,11,525},{142,11,243},{7,0,1128},{
-135,11,1920},{5,11,241},{8,11,242},{9,11,451},{10,11,667},{11,11,598},{140,11,
-429},{6,0,737},{5,10,160},{7,10,363},{7,10,589},{10,10,170},{141,10,55},{135,0,
-1796},{142,11,254},{4,0,574},{7,0,350},{7,0,1024},{8,0,338},{9,0,677},{138,0,808
-},{134,0,1096},{137,11,516},{7,0,405},{10,0,491},{4,10,108},{4,11,366},{139,10,
-498},{11,11,337},{142,11,303},{134,11,1736},{7,0,1081},{140,11,364},{7,10,1005},
-{140,10,609},{7,0,1676},{4,10,895},{133,10,772},{135,0,2037},{6,0,1207},{11,11,
-916},{142,11,419},{14,11,140},{148,11,41},{6,11,331},{136,11,623},{9,0,944},{9,0
-,969},{9,0,1022},{12,0,913},{12,0,936},{15,0,177},{15,0,193},{4,10,926},{133,10,
-983},{5,0,354},{135,11,506},{8,0,598},{9,0,664},{138,0,441},{4,11,640},{133,11,
-513},{137,0,297},{132,10,538},{6,10,294},{7,10,1267},{136,10,624},{7,0,1772},{7,
-11,1888},{8,11,289},{11,11,45},{12,11,278},{140,11,537},{135,10,1325},{138,0,751
-},{141,0,37},{134,0,1828},{132,10,757},{132,11,394},{6,0,257},{135,0,1522},{4,0,
-582},{9,0,191},{135,11,1931},{7,11,574},{7,11,1719},{137,11,145},{132,11,658},{
-10,0,790},{132,11,369},{9,11,781},{10,11,144},{11,11,385},{13,11,161},{13,11,228
-},{13,11,268},{148,11,107},{8,0,469},{10,0,47},{136,11,374},{6,0,306},{7,0,1140}
-,{7,0,1340},{8,0,133},{138,0,449},{139,0,1011},{7,10,1875},{139,10,124},{4,11,
-344},{6,11,498},{139,11,323},{137,0,299},{132,0,837},{133,11,906},{5,0,329},{8,0
-,260},{138,0,10},{134,0,1320},{4,0,657},{146,0,158},{135,0,1191},{152,0,7},{6,0,
-1939},{8,0,974},{138,0,996},{135,0,1665},{11,11,126},{139,11,287},{143,0,8},{14,
-11,149},{14,11,399},{143,11,57},{5,0,66},{7,0,1896},{136,0,288},{7,0,175},{10,0,
-494},{5,10,150},{8,10,603},{9,10,593},{9,10,634},{10,10,173},{11,10,462},{11,10,
-515},{13,10,216},{13,10,288},{142,10,400},{134,0,1643},{136,11,21},{4,0,21},{5,0
-,91},{5,0,648},{5,0,750},{5,0,781},{6,0,54},{6,0,112},{6,0,402},{6,0,1732},{7,0,
-315},{7,0,749},{7,0,1427},{7,0,1900},{9,0,78},{9,0,508},{10,0,611},{10,0,811},{
-11,0,510},{11,0,728},{13,0,36},{14,0,39},{16,0,83},{17,0,124},{148,0,30},{4,0,
-668},{136,0,570},{10,0,322},{10,0,719},{139,0,407},{135,11,1381},{136,11,193},{
-12,10,108},{141,10,291},{132,11,616},{136,11,692},{8,0,125},{8,0,369},{8,0,524},
-{10,0,486},{11,0,13},{11,0,381},{11,0,736},{11,0,766},{11,0,845},{13,0,114},{13,
-0,292},{142,0,47},{134,0,1247},{6,0,1684},{6,0,1731},{7,0,356},{8,0,54},{8,0,221
-},{9,0,225},{9,0,356},{10,0,77},{10,0,446},{10,0,731},{12,0,404},{141,0,491},{
-135,10,1777},{4,11,305},{4,10,493},{144,10,55},{4,0,951},{6,0,1809},{6,0,1849},{
-8,0,846},{8,0,866},{8,0,899},{10,0,896},{12,0,694},{142,0,468},{5,11,214},{7,11,
-603},{8,11,611},{9,11,686},{10,11,88},{11,11,459},{11,11,496},{12,11,463},{12,11
-,590},{13,11,0},{142,11,214},{132,0,411},{4,0,80},{133,0,44},{140,11,74},{143,0,
-31},{7,0,669},{6,10,568},{7,10,1804},{8,10,362},{8,10,410},{8,10,830},{9,10,514}
-,{11,10,649},{142,10,157},{7,0,673},{134,11,1703},{132,10,625},{134,0,1303},{5,0
-,299},{135,0,1083},{138,0,704},{6,0,275},{7,0,408},{6,10,158},{7,10,129},{7,10,
-181},{8,10,276},{8,10,377},{10,10,523},{11,10,816},{12,10,455},{13,10,303},{142,
-10,135},{4,0,219},{7,0,367},{7,0,1713},{7,0,1761},{9,0,86},{9,0,537},{10,0,165},
-{12,0,219},{140,0,561},{8,0,216},{4,10,1},{4,11,737},{6,11,317},{7,10,1143},{7,
-10,1463},{9,10,207},{9,10,390},{9,10,467},{10,11,98},{11,11,294},{11,10,836},{12
-,11,60},{12,11,437},{13,11,64},{13,11,380},{142,11,430},{6,11,1758},{8,11,520},{
-9,11,345},{9,11,403},{142,11,350},{5,11,47},{10,11,242},{138,11,579},{5,11,139},
-{7,11,1168},{138,11,539},{135,0,1319},{4,10,295},{4,10,723},{5,10,895},{7,10,
-1031},{8,10,199},{8,10,340},{9,10,153},{9,10,215},{10,10,21},{10,10,59},{10,10,
-80},{10,10,224},{10,10,838},{11,10,229},{11,10,652},{12,10,192},{13,10,146},{142
-,10,91},{140,0,428},{137,10,51},{133,0,514},{5,10,309},{140,10,211},{6,0,1010},{
-5,10,125},{8,10,77},{138,10,15},{4,0,55},{5,0,301},{6,0,571},{142,0,49},{146,0,
-102},{136,11,370},{4,11,107},{7,11,613},{8,11,358},{8,11,439},{8,11,504},{9,11,
-501},{10,11,383},{139,11,477},{132,11,229},{133,0,364},{133,10,439},{4,11,903},{
-135,11,1816},{11,0,379},{140,10,76},{4,0,76},{4,0,971},{7,0,1550},{9,0,306},{9,0
-,430},{9,0,663},{10,0,683},{10,0,921},{11,0,427},{11,0,753},{12,0,334},{12,0,442
-},{14,0,258},{14,0,366},{143,0,131},{137,0,52},{4,11,47},{6,11,373},{7,11,452},{
-7,11,543},{7,11,1714},{7,11,1856},{9,11,6},{11,11,257},{139,11,391},{4,10,8},{7,
-10,1152},{7,10,1153},{7,10,1715},{9,10,374},{10,10,478},{139,10,648},{4,11,785},
-{133,11,368},{135,10,1099},{135,11,860},{5,11,980},{134,11,1754},{134,0,1258},{6
-,0,1058},{6,0,1359},{7,11,536},{7,11,1331},{136,11,143},{4,0,656},{135,0,779},{
-136,10,87},{5,11,19},{6,11,533},{146,11,126},{7,0,144},{138,10,438},{5,11,395},{
-5,11,951},{134,11,1776},{135,0,1373},{7,0,554},{7,0,605},{141,0,10},{4,10,69},{5
-,10,122},{9,10,656},{138,10,464},{5,10,849},{134,10,1633},{5,0,838},{5,0,841},{
-134,0,1649},{133,0,1012},{139,10,499},{7,10,476},{7,10,1592},{138,10,87},{6,0,
-251},{7,0,365},{7,0,1357},{7,0,1497},{8,0,154},{141,0,281},{132,11,441},{132,11,
-695},{7,11,497},{9,11,387},{147,11,81},{133,0,340},{14,10,283},{142,11,283},{134
-,0,810},{135,11,1894},{139,0,495},{5,11,284},{6,11,49},{6,11,350},{7,11,1},{7,11
-,377},{7,11,1693},{8,11,18},{8,11,678},{9,11,161},{9,11,585},{9,11,671},{9,11,
-839},{11,11,912},{141,11,427},{5,10,859},{7,10,1160},{8,10,107},{9,10,291},{9,10
-,439},{10,10,663},{11,10,609},{140,10,197},{8,0,261},{9,0,144},{9,0,466},{10,0,
-370},{12,0,470},{13,0,144},{142,0,348},{137,0,897},{6,0,248},{9,0,546},{10,0,535
-},{11,0,681},{141,0,135},{4,0,358},{135,0,1496},{134,0,567},{136,0,445},{4,10,
-117},{6,10,372},{7,10,1905},{142,10,323},{4,10,722},{139,10,471},{6,0,697},{134,
-0,996},{7,11,2007},{9,11,101},{9,11,450},{10,11,66},{10,11,842},{11,11,536},{140
-,11,587},{132,0,577},{134,0,1336},{9,10,5},{12,10,216},{12,10,294},{12,10,298},{
-12,10,400},{12,10,518},{13,10,229},{143,10,139},{6,0,174},{138,0,917},{134,10,
-1774},{5,10,12},{7,10,375},{9,10,88},{9,10,438},{11,11,62},{139,10,270},{134,11,
-1766},{6,11,0},{7,11,84},{7,10,816},{7,10,1241},{9,10,283},{9,10,520},{10,10,213
-},{10,10,307},{10,10,463},{10,10,671},{10,10,746},{11,10,401},{11,10,794},{11,11
-,895},{12,10,517},{17,11,11},{18,10,107},{147,10,115},{5,0,878},{133,0,972},{6,
-11,1665},{7,11,256},{7,11,1388},{138,11,499},{4,10,258},{136,10,639},{4,11,22},{
-5,11,10},{6,10,22},{7,11,848},{7,10,903},{7,10,1963},{8,11,97},{138,10,577},{5,
-10,681},{136,10,782},{133,11,481},{132,0,351},{4,10,664},{5,10,804},{139,10,1013
-},{6,11,134},{7,11,437},{7,11,959},{9,11,37},{14,11,285},{14,11,371},{144,11,60}
-,{7,11,486},{8,11,155},{11,11,93},{140,11,164},{132,0,286},{7,0,438},{7,0,627},{
-7,0,1516},{8,0,40},{9,0,56},{9,0,294},{10,0,30},{11,0,969},{11,0,995},{146,0,148
-},{5,11,591},{135,11,337},{134,0,1950},{133,10,32},{138,11,500},{5,11,380},{5,11
-,650},{136,11,310},{4,11,364},{7,11,1156},{7,11,1187},{137,11,409},{4,0,738},{
-134,11,482},{4,11,781},{6,11,487},{7,11,926},{8,11,263},{139,11,500},{135,11,418
-},{6,0,2047},{10,0,969},{4,10,289},{7,10,629},{7,10,1698},{7,10,1711},{140,10,
-215},{6,10,450},{136,10,109},{134,0,818},{136,10,705},{133,0,866},{4,11,94},{135
-,11,1265},{132,11,417},{134,0,1467},{135,10,1238},{4,0,972},{6,0,1851},{134,0,
-1857},{134,0,355},{133,0,116},{132,0,457},{135,11,1411},{4,11,408},{4,11,741},{
-135,11,500},{134,10,26},{142,11,137},{5,0,527},{6,0,189},{7,0,859},{136,0,267},{
-11,0,104},{11,0,554},{15,0,60},{143,0,125},{134,0,1613},{4,10,414},{5,10,467},{9
-,10,654},{10,10,451},{12,10,59},{141,10,375},{135,10,17},{134,0,116},{135,11,541
-},{135,10,955},{6,11,73},{135,11,177},{133,11,576},{134,0,886},{133,0,487},{4,0,
-86},{5,0,667},{5,0,753},{6,0,316},{6,0,455},{135,0,946},{142,11,231},{150,0,45},
-{134,0,863},{134,0,1953},{6,10,280},{10,10,502},{11,10,344},{140,10,38},{4,0,79}
-,{7,0,1773},{10,0,450},{11,0,589},{13,0,332},{13,0,493},{14,0,183},{14,0,334},{
-14,0,362},{14,0,368},{14,0,376},{14,0,379},{19,0,90},{19,0,103},{19,0,127},{148,
-0,90},{5,10,45},{7,10,1161},{11,10,448},{11,10,880},{13,10,139},{13,10,407},{15,
-10,16},{17,10,95},{18,10,66},{18,10,88},{18,10,123},{149,10,7},{136,10,777},{4,
-10,410},{135,10,521},{135,10,1778},{135,11,538},{142,0,381},{133,11,413},{134,0,
-1142},{6,0,1189},{136,11,495},{5,0,663},{6,0,1962},{134,0,2003},{7,11,54},{8,11,
-312},{10,11,191},{10,11,614},{140,11,567},{132,10,436},{133,0,846},{10,0,528},{
-11,0,504},{7,10,1587},{135,10,1707},{5,0,378},{8,0,465},{9,0,286},{10,0,185},{10
-,0,562},{10,0,635},{11,0,31},{11,0,393},{13,0,312},{18,0,65},{18,0,96},{147,0,89
-},{7,0,899},{14,0,325},{6,11,468},{7,11,567},{7,11,1478},{8,11,530},{142,11,290}
-,{7,0,1880},{9,0,680},{139,0,798},{134,0,1770},{132,0,648},{150,11,35},{5,0,945}
-,{6,0,1656},{6,0,1787},{7,0,167},{8,0,824},{9,0,391},{10,0,375},{139,0,185},{6,
-11,484},{135,11,822},{134,0,2046},{7,0,1645},{8,0,352},{137,0,249},{132,0,152},{
-6,0,611},{135,0,1733},{6,11,1724},{135,11,2022},{133,0,1006},{141,11,96},{5,0,
-420},{135,0,1449},{146,11,149},{135,0,832},{135,10,663},{133,0,351},{5,0,40},{7,
-0,598},{7,0,1638},{8,0,78},{9,0,166},{9,0,640},{9,0,685},{9,0,773},{11,0,215},{
-13,0,65},{14,0,172},{14,0,317},{145,0,6},{8,0,60},{9,0,343},{139,0,769},{134,0,
-1354},{132,0,724},{137,0,745},{132,11,474},{7,0,1951},{8,0,765},{8,0,772},{140,0
-,671},{7,0,108},{8,0,219},{8,0,388},{9,0,775},{11,0,275},{140,0,464},{137,0,639}
-,{135,10,503},{133,11,366},{5,0,15},{6,0,56},{7,0,1758},{8,0,500},{9,0,730},{11,
-0,331},{13,0,150},{14,0,282},{5,11,305},{9,11,560},{141,11,208},{4,10,113},{5,10
-,163},{5,10,735},{7,10,1009},{9,10,9},{9,10,771},{12,10,90},{13,10,138},{13,10,
-410},{143,10,128},{4,10,324},{138,10,104},{135,11,466},{142,11,27},{134,0,1886},
-{5,0,205},{6,0,438},{9,0,711},{4,11,480},{6,11,167},{6,11,302},{6,11,1642},{7,11
-,130},{7,11,656},{7,11,837},{7,11,1547},{7,11,1657},{8,11,429},{9,11,228},{10,11
-,643},{13,11,289},{13,11,343},{147,11,101},{134,0,865},{6,0,2025},{136,0,965},{7
-,11,278},{10,11,739},{11,11,708},{141,11,348},{133,0,534},{135,11,1922},{137,0,
-691},{4,10,935},{133,10,823},{6,0,443},{9,0,237},{9,0,571},{9,0,695},{10,0,139},
-{11,0,715},{12,0,417},{141,0,421},{5,10,269},{7,10,434},{7,10,891},{8,10,339},{9
-,10,702},{11,10,594},{11,10,718},{145,10,100},{6,0,1555},{7,0,878},{9,10,485},{
-141,10,264},{134,10,1713},{7,10,1810},{11,10,866},{12,10,103},{141,10,495},{135,
-10,900},{6,0,1410},{9,11,316},{139,11,256},{4,0,995},{135,0,1033},{132,0,578},{
-10,0,881},{12,0,740},{12,0,743},{140,0,759},{132,0,822},{133,0,923},{142,10,143}
-,{135,11,1696},{6,11,363},{7,11,1955},{136,11,725},{132,0,924},{133,0,665},{135,
-10,2029},{135,0,1901},{4,0,265},{6,0,1092},{6,0,1417},{7,0,807},{135,0,950},{5,0
-,93},{12,0,267},{141,0,498},{135,0,1451},{5,11,813},{135,11,2046},{5,10,625},{
-135,10,1617},{135,0,747},{6,0,788},{137,0,828},{7,0,184},{11,0,307},{11,0,400},{
-15,0,130},{5,11,712},{7,11,1855},{8,10,425},{8,10,693},{9,10,720},{10,10,380},{
-10,10,638},{11,11,17},{11,10,473},{12,10,61},{13,11,321},{144,11,67},{135,0,198}
-,{6,11,320},{7,11,781},{7,11,1921},{9,11,55},{10,11,186},{10,11,273},{10,11,664}
-,{10,11,801},{11,11,996},{11,11,997},{13,11,157},{142,11,170},{136,11,271},{135,
-0,994},{7,11,103},{7,11,863},{11,11,184},{14,11,299},{145,11,62},{11,10,551},{
-142,10,159},{5,0,233},{5,0,320},{6,0,140},{8,0,295},{8,0,615},{136,11,615},{133,
-0,978},{4,0,905},{6,0,1701},{137,0,843},{132,10,168},{4,0,974},{8,0,850},{12,0,
-709},{12,0,768},{140,0,786},{135,10,91},{152,0,6},{138,10,532},{135,10,1884},{
-132,0,509},{6,0,1307},{135,0,273},{5,11,77},{7,11,1455},{10,11,843},{19,11,73},{
-150,11,5},{132,11,458},{135,11,1420},{6,11,109},{138,11,382},{6,0,201},{6,11,330
-},{7,10,70},{7,11,1084},{10,10,240},{11,11,142},{147,10,93},{7,0,1041},{140,11,
-328},{133,11,354},{134,0,1040},{133,0,693},{134,0,774},{139,0,234},{132,0,336},{
-7,0,1399},{139,10,392},{20,0,22},{148,11,22},{5,0,802},{7,0,2021},{136,0,805},{5
-,0,167},{5,0,899},{6,0,410},{137,0,777},{137,0,789},{134,0,1705},{7,10,655},{135
-,10,1844},{4,10,145},{6,10,176},{7,10,395},{137,10,562},{132,10,501},{135,0,10},
-{5,0,11},{6,0,117},{6,0,485},{7,0,1133},{9,0,582},{9,0,594},{10,0,82},{11,0,21},
-{11,0,818},{12,0,535},{13,0,86},{20,0,91},{23,0,13},{134,10,509},{4,0,264},{7,0,
-1067},{8,0,204},{8,0,385},{139,0,953},{139,11,737},{138,0,56},{134,0,1917},{133,
-0,470},{10,11,657},{14,11,297},{142,11,361},{135,11,412},{7,0,1198},{7,11,1198},
-{8,11,556},{14,11,123},{14,11,192},{143,11,27},{7,11,1985},{14,11,146},{15,11,42
-},{16,11,23},{17,11,86},{146,11,17},{11,0,1015},{136,11,122},{4,10,114},{9,10,
-492},{13,10,462},{142,10,215},{4,10,77},{5,10,361},{6,10,139},{6,10,401},{6,10,
-404},{7,10,413},{7,10,715},{7,10,1716},{11,10,279},{12,10,179},{12,10,258},{13,
-10,244},{142,10,358},{134,10,1717},{7,10,1061},{8,10,82},{11,10,250},{12,10,420}
-,{141,10,184},{133,0,715},{135,10,724},{9,0,919},{9,0,922},{9,0,927},{9,0,933},{
-9,0,962},{9,0,1000},{9,0,1002},{9,0,1021},{12,0,890},{12,0,907},{12,0,930},{15,0
-,207},{15,0,228},{15,0,238},{149,0,61},{8,0,794},{9,0,400},{10,0,298},{142,0,228
-},{5,11,430},{5,11,932},{6,11,131},{7,11,417},{9,11,522},{11,11,314},{141,11,390
-},{132,0,867},{8,0,724},{132,11,507},{137,11,261},{4,11,343},{133,11,511},{6,0,
-190},{7,0,768},{135,0,1170},{6,10,513},{135,10,1052},{7,11,455},{138,11,591},{
-134,0,1066},{137,10,899},{14,0,67},{147,0,60},{4,0,948},{18,0,174},{146,0,176},{
-135,0,1023},{7,10,1417},{12,10,382},{17,10,48},{152,10,12},{134,11,575},{132,0,
-764},{6,10,545},{7,10,565},{7,10,1669},{10,10,114},{11,10,642},{140,10,618},{6,0
-,137},{9,0,75},{9,0,253},{10,0,194},{138,0,444},{4,0,756},{133,10,5},{8,0,1008},
-{135,10,192},{132,0,842},{11,0,643},{12,0,115},{136,10,763},{139,0,67},{133,10,
-759},{4,0,821},{5,0,760},{7,0,542},{8,0,135},{8,0,496},{135,11,580},{7,10,370},{
-7,10,1007},{7,10,1177},{135,10,1565},{135,10,1237},{140,0,736},{7,0,319},{7,0,
-355},{7,0,763},{10,0,389},{145,0,43},{8,11,333},{138,11,182},{4,10,87},{5,10,250
-},{141,10,298},{138,0,786},{134,0,2044},{8,11,330},{140,11,477},{135,11,1338},{
-132,11,125},{134,0,1030},{134,0,1083},{132,11,721},{135,10,814},{7,11,776},{8,11
-,145},{147,11,56},{134,0,1226},{4,10,57},{7,10,1195},{7,10,1438},{7,10,1548},{7,
-10,1835},{7,10,1904},{9,10,757},{10,10,604},{139,10,519},{7,11,792},{8,11,147},{
-10,11,821},{139,11,1021},{137,11,797},{4,0,58},{5,0,286},{6,0,319},{7,0,402},{7,
-0,1254},{7,0,1903},{8,0,356},{140,0,408},{4,0,389},{4,0,815},{9,0,181},{9,0,255}
-,{10,0,8},{10,0,29},{10,0,816},{11,0,311},{11,0,561},{12,0,67},{141,0,181},{7,11
-,1472},{135,11,1554},{7,11,1071},{7,11,1541},{7,11,1767},{7,11,1806},{7,11,1999}
-,{9,11,248},{10,11,400},{11,11,162},{11,11,178},{11,11,242},{12,11,605},{15,11,
-26},{144,11,44},{5,11,168},{5,11,930},{8,11,74},{9,11,623},{12,11,500},{12,11,
-579},{13,11,41},{143,11,93},{6,11,220},{7,11,1101},{141,11,105},{5,0,474},{7,0,
-507},{4,10,209},{7,11,507},{135,10,902},{132,0,427},{6,0,413},{7,10,335},{7,10,
-1437},{7,10,1668},{8,10,553},{8,10,652},{8,10,656},{9,10,558},{11,10,743},{149,
-10,18},{132,0,730},{6,11,19},{7,11,1413},{139,11,428},{133,0,373},{132,10,559},{
-7,11,96},{8,11,401},{137,11,896},{7,0,799},{7,0,1972},{5,10,1017},{138,10,511},{
-135,0,1793},{7,11,1961},{7,11,1965},{8,11,702},{136,11,750},{8,11,150},{8,11,737
-},{140,11,366},{132,0,322},{133,10,709},{8,11,800},{9,11,148},{9,11,872},{9,11,
-890},{11,11,309},{11,11,1001},{13,11,267},{141,11,323},{134,10,1745},{7,0,290},{
-136,10,206},{7,0,1651},{145,0,89},{139,0,2},{132,0,672},{6,0,1860},{8,0,905},{10
-,0,844},{10,0,846},{10,0,858},{12,0,699},{12,0,746},{140,0,772},{135,11,424},{
-133,11,547},{133,0,737},{5,11,490},{6,11,615},{6,11,620},{135,11,683},{6,0,746},
-{134,0,1612},{132,10,776},{9,11,385},{149,11,17},{133,0,145},{135,10,1272},{7,0,
-884},{140,0,124},{4,0,387},{135,0,1288},{5,11,133},{136,10,406},{136,11,187},{6,
-0,679},{8,11,8},{138,11,0},{135,0,550},{135,11,798},{136,11,685},{7,11,1086},{
-145,11,46},{8,10,175},{10,10,168},{138,10,573},{135,0,1305},{4,0,576},{135,0,
-1263},{6,0,686},{134,0,1563},{134,0,607},{5,0,919},{134,0,1673},{148,0,37},{8,11
-,774},{10,11,670},{140,11,51},{133,10,784},{139,10,882},{4,0,82},{5,0,333},{5,0,
-904},{6,0,207},{7,0,325},{7,0,1726},{8,0,101},{10,0,778},{139,0,220},{135,11,371
-},{132,0,958},{133,0,903},{4,11,127},{5,11,350},{6,11,356},{8,11,426},{9,11,572}
-,{10,11,247},{139,11,312},{140,0,147},{6,11,59},{7,11,885},{9,11,603},{141,11,
-397},{10,0,367},{9,10,14},{9,10,441},{139,10,9},{11,10,966},{12,10,287},{13,10,
-342},{13,10,402},{15,10,110},{143,10,163},{134,0,690},{132,0,705},{9,0,651},{11,
-0,971},{13,0,273},{7,10,1428},{7,10,1640},{7,10,1867},{9,10,169},{9,10,182},{9,
-10,367},{9,10,478},{9,10,506},{9,10,551},{9,10,557},{9,10,648},{9,10,697},{9,10,
-705},{9,10,725},{9,10,787},{9,10,794},{10,10,198},{10,10,214},{10,10,267},{10,10
-,275},{10,10,456},{10,10,551},{10,10,561},{10,10,613},{10,10,627},{10,10,668},{
-10,10,675},{10,10,691},{10,10,695},{10,10,707},{10,10,715},{11,10,183},{11,10,
-201},{11,10,262},{11,10,352},{11,10,439},{11,10,493},{11,10,572},{11,10,591},{11
-,10,608},{11,10,611},{11,10,646},{11,10,674},{11,10,711},{11,10,751},{11,10,761}
-,{11,10,776},{11,10,785},{11,10,850},{11,10,853},{11,10,862},{11,10,865},{11,10,
-868},{11,10,875},{11,10,898},{11,10,902},{11,10,903},{11,10,910},{11,10,932},{11
-,10,942},{11,10,957},{11,10,967},{11,10,972},{12,10,148},{12,10,195},{12,10,220}
-,{12,10,237},{12,10,318},{12,10,339},{12,10,393},{12,10,445},{12,10,450},{12,10,
-474},{12,10,505},{12,10,509},{12,10,533},{12,10,591},{12,10,594},{12,10,597},{12
-,10,621},{12,10,633},{12,10,642},{13,10,59},{13,10,60},{13,10,145},{13,10,239},{
-13,10,250},{13,10,329},{13,10,344},{13,10,365},{13,10,372},{13,10,387},{13,10,
-403},{13,10,414},{13,10,456},{13,10,470},{13,10,478},{13,10,483},{13,10,489},{14
-,10,55},{14,10,57},{14,10,81},{14,10,90},{14,10,148},{14,10,239},{14,10,266},{14
-,10,321},{14,10,326},{14,10,327},{14,10,330},{14,10,347},{14,10,355},{14,10,401}
-,{14,10,404},{14,10,411},{14,10,414},{14,10,416},{14,10,420},{15,10,61},{15,10,
-74},{15,10,87},{15,10,88},{15,10,94},{15,10,96},{15,10,116},{15,10,149},{15,10,
-154},{16,10,50},{16,10,63},{16,10,73},{17,10,2},{17,10,66},{17,10,92},{17,10,103
-},{17,10,112},{17,10,120},{18,10,50},{18,10,54},{18,10,82},{18,10,86},{18,10,90}
-,{18,10,111},{18,10,115},{18,10,156},{19,10,40},{19,10,79},{20,10,78},{149,10,22
-},{7,0,887},{5,10,161},{135,10,839},{142,11,98},{134,0,90},{138,11,356},{135,11,
-441},{6,11,111},{7,11,4},{8,11,163},{8,11,776},{138,11,566},{134,0,908},{134,0,
-1261},{7,0,813},{12,0,497},{141,0,56},{134,0,1235},{135,0,429},{135,11,1994},{
-138,0,904},{6,0,125},{7,0,1277},{137,0,772},{151,0,12},{4,0,841},{5,0,386},{133,
-11,386},{5,11,297},{135,11,1038},{6,0,860},{6,0,1069},{135,11,309},{136,0,946},{
-135,10,1814},{141,11,418},{136,11,363},{10,0,768},{139,0,787},{22,11,30},{150,11
-,33},{6,0,160},{7,0,1106},{9,0,770},{11,0,112},{140,0,413},{11,11,216},{139,11,
-340},{136,10,139},{135,11,1390},{135,11,808},{132,11,280},{12,0,271},{17,0,109},
-{7,10,643},{136,10,236},{140,11,54},{4,11,421},{133,11,548},{11,0,719},{12,0,36}
-,{141,0,337},{7,0,581},{9,0,644},{137,0,699},{11,11,511},{13,11,394},{14,11,298}
-,{14,11,318},{146,11,103},{7,0,304},{9,0,646},{9,0,862},{11,0,696},{12,0,208},{
-15,0,79},{147,0,108},{4,0,631},{7,0,1126},{135,0,1536},{135,11,1527},{8,0,880},{
-10,0,869},{138,0,913},{7,0,1513},{5,10,54},{6,11,254},{9,11,109},{138,11,103},{
-135,0,981},{133,11,729},{132,10,744},{132,0,434},{134,0,550},{7,0,930},{10,0,476
-},{13,0,452},{19,0,104},{6,11,1630},{10,10,402},{146,10,55},{5,0,553},{138,0,824
-},{136,0,452},{8,0,151},{137,10,624},{132,10,572},{132,0,772},{133,11,671},{133,
-0,292},{138,0,135},{132,11,889},{140,11,207},{9,0,504},{6,10,43},{7,10,38},{8,10
-,248},{138,10,513},{6,0,1089},{135,11,1910},{4,11,627},{133,11,775},{135,0,783},
-{133,10,766},{133,10,363},{7,0,387},{135,11,387},{7,0,393},{10,0,603},{11,0,206}
-,{7,11,202},{11,11,362},{11,11,948},{140,11,388},{6,11,507},{7,11,451},{8,11,389
-},{12,11,490},{13,11,16},{13,11,215},{13,11,351},{18,11,132},{147,11,125},{4,0,
-912},{9,0,232},{135,11,841},{6,10,258},{140,10,409},{5,10,249},{148,10,82},{136,
-11,566},{6,0,977},{135,11,1214},{7,0,1973},{136,0,716},{135,0,98},{133,0,733},{5
-,11,912},{134,11,1695},{5,10,393},{6,10,378},{7,10,1981},{9,10,32},{9,10,591},{
-10,10,685},{10,10,741},{142,10,382},{133,10,788},{10,0,19},{11,0,911},{7,10,1968
-},{141,10,509},{5,0,668},{5,11,236},{6,11,572},{8,11,492},{11,11,618},{144,11,56
-},{135,11,1789},{4,0,360},{5,0,635},{5,0,700},{5,10,58},{5,10,171},{5,10,683},{6
-,10,291},{6,10,566},{7,10,1650},{11,10,523},{12,10,273},{12,10,303},{15,10,39},{
-143,10,111},{133,0,901},{134,10,589},{5,11,190},{136,11,318},{140,0,656},{7,0,
-726},{152,0,9},{4,10,917},{133,10,1005},{135,10,1598},{134,11,491},{4,10,919},{
-133,11,434},{137,0,72},{6,0,1269},{6,0,1566},{134,0,1621},{9,0,463},{10,0,595},{
-4,10,255},{5,10,302},{6,10,132},{7,10,128},{7,10,283},{7,10,1299},{10,10,52},{10
-,10,514},{11,10,925},{13,10,92},{142,10,309},{135,0,1454},{134,0,1287},{11,0,600
-},{13,0,245},{137,10,173},{136,0,989},{7,0,164},{7,0,1571},{9,0,107},{140,0,225}
-,{6,0,1061},{141,10,442},{4,0,27},{5,0,484},{5,0,510},{6,0,434},{7,0,1000},{7,0,
-1098},{136,0,2},{7,11,85},{7,11,247},{8,11,585},{10,11,163},{138,11,316},{11,11,
-103},{142,11,0},{134,0,1127},{4,0,460},{134,0,852},{134,10,210},{4,0,932},{133,0
-,891},{6,0,588},{147,11,83},{8,0,625},{4,10,284},{134,10,223},{134,0,76},{8,0,92
-},{137,0,221},{4,11,124},{10,11,457},{11,11,121},{11,11,169},{11,11,422},{11,11,
-870},{12,11,214},{13,11,389},{14,11,187},{143,11,77},{9,11,618},{138,11,482},{4,
-10,218},{7,10,526},{143,10,137},{13,0,9},{14,0,104},{14,0,311},{4,10,270},{5,10,
-192},{6,10,332},{135,10,1322},{140,10,661},{135,11,1193},{6,11,107},{7,11,638},{
-7,11,1632},{137,11,396},{132,0,763},{4,0,622},{5,11,370},{134,11,1756},{133,0,
-253},{135,0,546},{9,0,73},{10,0,110},{14,0,185},{17,0,119},{133,11,204},{7,0,624
-},{7,0,916},{10,0,256},{139,0,87},{7,10,379},{8,10,481},{137,10,377},{5,0,212},{
-12,0,35},{13,0,382},{5,11,970},{134,11,1706},{9,0,746},{5,10,1003},{134,10,149},
-{10,0,150},{11,0,849},{13,0,330},{8,10,262},{9,10,627},{11,10,214},{11,10,404},{
-11,10,457},{11,10,780},{11,10,913},{13,10,401},{142,10,200},{134,0,1466},{135,11
-,3},{6,0,1299},{4,11,35},{5,11,121},{5,11,483},{5,11,685},{6,11,489},{7,11,1204}
-,{136,11,394},{135,10,742},{4,10,142},{136,10,304},{4,11,921},{133,11,1007},{134
-,0,1518},{6,0,1229},{135,0,1175},{133,0,816},{12,0,159},{4,10,471},{4,11,712},{5
-,10,51},{6,10,602},{7,10,925},{8,10,484},{138,10,195},{134,11,1629},{5,0,869},{5
-,0,968},{6,0,1626},{8,0,734},{136,0,784},{4,0,542},{6,0,1716},{6,0,1727},{7,0,
-1082},{7,0,1545},{8,0,56},{8,0,118},{8,0,412},{8,0,564},{9,0,888},{9,0,908},{10,
-0,50},{10,0,423},{11,0,685},{11,0,697},{11,0,933},{12,0,299},{13,0,126},{13,0,
-136},{13,0,170},{13,0,190},{136,10,688},{132,10,697},{4,0,232},{9,0,202},{10,0,
-474},{140,0,433},{136,0,212},{6,0,108},{7,0,1003},{7,0,1181},{8,0,111},{136,0,
-343},{5,10,221},{135,11,1255},{133,11,485},{134,0,1712},{142,0,216},{5,0,643},{6
-,0,516},{4,11,285},{5,11,317},{6,11,301},{7,11,7},{8,11,153},{10,11,766},{11,11,
-468},{12,11,467},{141,11,143},{4,0,133},{7,0,711},{7,0,1298},{135,0,1585},{134,0
-,650},{135,11,512},{6,0,99},{7,0,1808},{145,0,57},{6,0,246},{6,0,574},{7,0,428},
-{9,0,793},{10,0,669},{11,0,485},{11,0,840},{12,0,300},{14,0,250},{145,0,55},{4,
-10,132},{5,10,69},{135,10,1242},{136,0,1023},{7,0,302},{132,10,111},{135,0,1871}
-,{132,0,728},{9,0,252},{132,10,767},{6,0,461},{7,0,1590},{7,10,1416},{7,10,2005}
-,{8,10,131},{8,10,466},{9,10,672},{13,10,252},{148,10,103},{6,0,323},{135,0,1564
-},{7,0,461},{136,0,775},{6,10,44},{136,10,368},{139,0,172},{132,0,464},{4,10,570
-},{133,10,120},{137,11,269},{6,10,227},{135,10,1589},{6,11,1719},{6,11,1735},{7,
-11,2016},{7,11,2020},{8,11,837},{137,11,852},{7,0,727},{146,0,73},{132,0,1023},{
-135,11,852},{135,10,1529},{136,0,577},{138,11,568},{134,0,1037},{8,11,67},{138,
-11,419},{4,0,413},{5,0,677},{8,0,432},{140,0,280},{10,0,600},{6,10,1667},{7,11,
-967},{7,10,2036},{141,11,11},{6,10,511},{140,10,132},{6,0,799},{5,10,568},{6,10,
-138},{135,10,1293},{8,0,159},{4,10,565},{136,10,827},{7,0,646},{7,0,1730},{11,0,
-446},{141,0,178},{4,10,922},{133,10,1023},{135,11,11},{132,0,395},{11,0,145},{
-135,10,1002},{9,0,174},{10,0,164},{11,0,440},{11,0,514},{11,0,841},{15,0,98},{
-149,0,20},{134,0,426},{10,0,608},{139,0,1002},{7,11,320},{8,11,51},{12,11,481},{
-12,11,570},{148,11,106},{9,0,977},{9,0,983},{132,11,445},{138,0,250},{139,0,100}
-,{6,0,1982},{136,10,402},{133,11,239},{4,10,716},{141,10,31},{5,0,476},{7,11,83}
-,{7,11,1990},{8,11,130},{139,11,720},{8,10,691},{136,10,731},{5,11,123},{6,11,
-530},{7,11,348},{135,11,1419},{5,0,76},{6,0,458},{6,0,497},{7,0,868},{9,0,658},{
-10,0,594},{11,0,173},{11,0,566},{12,0,20},{12,0,338},{141,0,200},{9,11,139},{10,
-11,399},{11,11,469},{12,11,634},{141,11,223},{9,10,840},{138,10,803},{133,10,847
-},{11,11,223},{140,11,168},{132,11,210},{8,0,447},{9,10,53},{9,10,268},{9,10,901
-},{10,10,518},{10,10,829},{11,10,188},{13,10,74},{14,10,46},{15,10,17},{15,10,33
-},{17,10,40},{18,10,36},{19,10,20},{22,10,1},{152,10,2},{4,0,526},{7,0,1029},{
-135,0,1054},{19,11,59},{150,11,2},{4,0,636},{6,0,1875},{6,0,1920},{9,0,999},{12,
-0,807},{12,0,825},{15,0,179},{15,0,190},{18,0,182},{136,10,532},{6,0,1699},{7,0,
-660},{7,0,1124},{17,0,31},{19,0,22},{151,0,14},{135,10,681},{132,11,430},{140,10
-,677},{4,10,684},{136,10,384},{132,11,756},{133,11,213},{7,0,188},{7,10,110},{8,
-10,290},{8,10,591},{9,10,382},{9,10,649},{11,10,71},{11,10,155},{11,10,313},{12,
-10,5},{13,10,325},{142,10,287},{7,10,360},{7,10,425},{9,10,66},{9,10,278},{138,
-10,644},{142,11,164},{4,0,279},{7,0,301},{137,0,362},{134,11,586},{135,0,1743},{
-4,0,178},{133,0,399},{4,10,900},{133,10,861},{5,10,254},{7,10,985},{136,10,73},{
-133,11,108},{7,10,1959},{136,10,683},{133,11,219},{4,11,193},{5,11,916},{7,11,
-364},{10,11,398},{10,11,726},{11,11,317},{11,11,626},{12,11,142},{12,11,288},{12
-,11,678},{13,11,313},{15,11,113},{18,11,114},{21,11,30},{150,11,53},{6,11,241},{
-7,11,907},{8,11,832},{9,11,342},{10,11,729},{11,11,284},{11,11,445},{11,11,651},
-{11,11,863},{13,11,398},{146,11,99},{132,0,872},{134,0,831},{134,0,1692},{6,0,
-202},{6,0,1006},{9,0,832},{10,0,636},{11,0,208},{12,0,360},{17,0,118},{18,0,27},
-{20,0,67},{137,11,734},{132,10,725},{7,11,993},{138,11,666},{134,0,1954},{134,10
-,196},{7,0,872},{10,0,516},{139,0,167},{133,10,831},{4,11,562},{9,11,254},{139,
-11,879},{137,0,313},{4,0,224},{132,11,786},{11,0,24},{12,0,170},{136,10,723},{5,
-0,546},{7,0,35},{8,0,11},{8,0,12},{9,0,315},{9,0,533},{10,0,802},{11,0,166},{12,
-0,525},{142,0,243},{7,0,1937},{13,10,80},{13,10,437},{145,10,74},{5,0,241},{8,0,
-242},{9,0,451},{10,0,667},{11,0,598},{140,0,429},{150,0,46},{6,0,1273},{137,0,
-830},{5,10,848},{6,10,66},{136,10,764},{6,0,825},{134,0,993},{4,0,1006},{10,0,
-327},{13,0,271},{4,10,36},{7,10,1387},{139,10,755},{134,0,1023},{135,0,1580},{4,
-0,366},{137,0,516},{132,10,887},{6,0,1736},{135,0,1891},{6,11,216},{7,11,901},{7
-,11,1343},{136,11,493},{6,10,165},{138,10,388},{7,11,341},{139,11,219},{4,10,719
-},{135,10,155},{134,0,1935},{132,0,826},{6,0,331},{6,0,1605},{8,0,623},{11,0,139
-},{139,0,171},{135,11,1734},{10,11,115},{11,11,420},{12,11,154},{13,11,404},{14,
-11,346},{15,11,54},{143,11,112},{7,0,288},{4,10,353},{6,10,146},{6,10,1789},{7,
-10,990},{7,10,1348},{9,10,665},{9,10,898},{11,10,893},{142,10,212},{6,0,916},{
-134,0,1592},{7,0,1888},{4,10,45},{135,10,1257},{5,11,1011},{136,11,701},{139,11,
-596},{4,11,54},{5,11,666},{7,11,1039},{7,11,1130},{9,11,195},{138,11,302},{134,0
-,1471},{134,0,1570},{132,0,394},{140,10,65},{136,10,816},{135,0,1931},{7,0,574},
-{135,0,1719},{134,11,467},{132,0,658},{9,0,781},{10,0,144},{11,0,385},{13,0,161}
-,{13,0,228},{13,0,268},{20,0,107},{134,11,1669},{136,0,374},{135,0,735},{4,0,344
-},{6,0,498},{139,0,323},{7,0,586},{7,0,1063},{6,10,559},{134,10,1691},{137,0,155
-},{133,0,906},{7,11,122},{9,11,259},{10,11,84},{11,11,470},{12,11,541},{141,11,
-379},{134,0,1139},{10,0,108},{139,0,116},{134,10,456},{133,10,925},{5,11,82},{5,
-11,131},{7,11,1755},{8,11,31},{9,11,168},{9,11,764},{139,11,869},{134,11,605},{5
-,11,278},{137,11,68},{4,11,163},{5,11,201},{5,11,307},{5,11,310},{6,11,335},{7,
-11,284},{136,11,165},{135,11,1660},{6,11,33},{135,11,1244},{4,0,616},{136,11,483
-},{8,0,857},{8,0,902},{8,0,910},{10,0,879},{12,0,726},{4,11,199},{139,11,34},{
-136,0,692},{6,10,193},{7,10,240},{7,10,1682},{10,10,51},{10,10,640},{11,10,410},
-{13,10,82},{14,10,247},{14,10,331},{142,10,377},{6,0,823},{134,0,983},{139,10,
-411},{132,0,305},{136,10,633},{138,11,203},{134,0,681},{6,11,326},{7,11,677},{
-137,11,425},{5,0,214},{7,0,603},{8,0,611},{9,0,686},{10,0,88},{11,0,459},{11,0,
-496},{12,0,463},{12,0,590},{141,0,0},{136,0,1004},{142,0,23},{134,0,1703},{147,
-11,8},{145,11,56},{135,0,1443},{4,10,237},{135,10,514},{6,0,714},{145,0,19},{5,
-11,358},{7,11,473},{7,11,1184},{10,11,662},{13,11,212},{13,11,304},{13,11,333},{
-145,11,98},{4,0,737},{10,0,98},{11,0,294},{12,0,60},{12,0,437},{13,0,64},{13,0,
-380},{142,0,430},{6,10,392},{7,10,65},{135,10,2019},{6,0,1758},{8,0,520},{9,0,
-345},{9,0,403},{142,0,350},{5,0,47},{10,0,242},{138,0,579},{5,0,139},{7,0,1168},
-{138,0,539},{134,0,1459},{13,0,388},{141,11,388},{134,0,253},{7,10,1260},{135,10
-,1790},{10,0,252},{9,10,222},{139,10,900},{140,0,745},{133,11,946},{4,0,107},{7,
-0,613},{8,0,439},{8,0,504},{9,0,501},{10,0,383},{139,0,477},{135,11,1485},{132,0
-,871},{7,11,411},{7,11,590},{8,11,631},{9,11,323},{10,11,355},{11,11,491},{12,11
-,143},{12,11,402},{13,11,73},{14,11,408},{15,11,107},{146,11,71},{132,0,229},{
-132,0,903},{140,0,71},{133,0,549},{4,0,47},{6,0,373},{7,0,452},{7,0,543},{7,0,
-1828},{7,0,1856},{9,0,6},{11,0,257},{139,0,391},{7,11,1467},{8,11,328},{10,11,
-544},{11,11,955},{13,11,320},{145,11,83},{5,0,980},{134,0,1754},{136,0,865},{5,0
-,705},{137,0,606},{7,0,161},{8,10,201},{136,10,605},{143,11,35},{5,11,835},{6,11
-,483},{140,10,224},{7,0,536},{7,0,1331},{136,0,143},{134,0,1388},{5,0,724},{10,0
-,305},{11,0,151},{12,0,33},{12,0,121},{12,0,381},{17,0,3},{17,0,27},{17,0,78},{
-18,0,18},{19,0,54},{149,0,5},{4,10,523},{133,10,638},{5,0,19},{134,0,533},{5,0,
-395},{5,0,951},{134,0,1776},{135,0,1908},{132,0,846},{10,0,74},{11,0,663},{12,0,
-210},{13,0,166},{13,0,310},{14,0,373},{18,0,95},{19,0,43},{6,10,242},{7,10,227},
-{7,10,1581},{8,10,104},{9,10,113},{9,10,220},{9,10,427},{10,10,239},{11,10,579},
-{11,10,1023},{13,10,4},{13,10,204},{13,10,316},{148,10,86},{9,11,716},{11,11,108
-},{13,11,123},{14,11,252},{19,11,38},{21,11,3},{151,11,11},{8,0,372},{9,0,122},{
-138,0,175},{132,11,677},{7,11,1374},{136,11,540},{135,10,861},{132,0,695},{7,0,
-497},{9,0,387},{147,0,81},{136,0,937},{134,0,718},{7,0,1328},{136,10,494},{132,
-11,331},{6,0,1581},{133,11,747},{5,0,284},{6,0,49},{6,0,350},{7,0,1},{7,0,377},{
-7,0,1693},{8,0,18},{8,0,678},{9,0,161},{9,0,585},{9,0,671},{9,0,839},{11,0,912},
-{141,0,427},{7,10,1306},{8,10,505},{9,10,482},{10,10,126},{11,10,225},{12,10,347
-},{12,10,449},{13,10,19},{14,10,218},{142,10,435},{10,10,764},{12,10,120},{13,10
-,39},{145,10,127},{4,0,597},{133,10,268},{134,0,1094},{4,0,1008},{134,0,1973},{
-132,0,811},{139,0,908},{135,0,1471},{133,11,326},{4,10,384},{135,10,1022},{7,0,
-1935},{8,0,324},{12,0,42},{4,11,691},{7,11,1935},{8,11,324},{9,11,35},{10,11,680
-},{11,11,364},{12,11,42},{13,11,357},{146,11,16},{135,0,2014},{7,0,2007},{9,0,
-101},{9,0,450},{10,0,66},{10,0,842},{11,0,536},{12,0,587},{6,11,32},{7,11,385},{
-7,11,757},{7,11,1916},{8,11,37},{8,11,94},{8,11,711},{9,11,541},{10,11,162},{10,
-11,795},{11,11,989},{11,11,1010},{12,11,14},{142,11,308},{139,0,586},{135,10,
-1703},{7,0,1077},{11,0,28},{9,10,159},{140,10,603},{6,0,1221},{136,10,583},{6,11
-,152},{6,11,349},{6,11,1682},{7,11,1252},{8,11,112},{9,11,435},{9,11,668},{10,11
-,290},{10,11,319},{10,11,815},{11,11,180},{11,11,837},{12,11,240},{13,11,152},{
-13,11,219},{142,11,158},{139,0,62},{132,10,515},{8,10,632},{8,10,697},{137,10,
-854},{134,0,1766},{132,11,581},{6,11,126},{7,11,573},{8,11,397},{142,11,44},{150
-,0,28},{11,0,670},{22,0,25},{4,10,136},{133,10,551},{6,0,1665},{7,0,256},{7,0,
-1388},{138,0,499},{4,0,22},{5,0,10},{7,0,1576},{136,0,97},{134,10,1782},{5,0,481
-},{7,10,1287},{9,10,44},{10,10,552},{10,10,642},{11,10,839},{12,10,274},{12,10,
-275},{12,10,372},{13,10,91},{142,10,125},{133,11,926},{7,11,1232},{137,11,531},{
-6,0,134},{7,0,437},{7,0,1824},{9,0,37},{14,0,285},{142,0,371},{7,0,486},{8,0,155
-},{11,0,93},{140,0,164},{6,0,1391},{134,0,1442},{133,11,670},{133,0,591},{6,10,
-147},{7,10,886},{7,11,1957},{9,10,753},{138,10,268},{5,0,380},{5,0,650},{7,0,
-1173},{136,0,310},{4,0,364},{7,0,1156},{7,0,1187},{137,0,409},{135,11,1621},{134
-,0,482},{133,11,506},{4,0,781},{6,0,487},{7,0,926},{8,0,263},{139,0,500},{138,10
-,137},{135,11,242},{139,11,96},{133,10,414},{135,10,1762},{134,0,804},{5,11,834}
-,{7,11,1202},{8,11,14},{9,11,481},{137,11,880},{134,10,599},{4,0,94},{135,0,1265
-},{4,0,415},{132,0,417},{5,0,348},{6,0,522},{6,10,1749},{7,11,1526},{138,11,465}
-,{134,10,1627},{132,0,1012},{132,10,488},{4,11,357},{6,11,172},{7,11,143},{137,
-11,413},{4,10,83},{4,11,590},{146,11,76},{140,10,676},{7,11,287},{8,11,355},{9,
-11,293},{137,11,743},{134,10,278},{6,0,1803},{18,0,165},{24,0,21},{5,11,169},{7,
-11,333},{136,11,45},{12,10,97},{140,11,97},{4,0,408},{4,0,741},{135,0,500},{132,
-11,198},{7,10,388},{7,10,644},{139,10,781},{4,11,24},{5,11,140},{5,11,185},{7,11
-,1500},{11,11,565},{139,11,838},{6,0,1321},{9,0,257},{7,10,229},{8,10,59},{9,10,
-190},{10,10,378},{140,10,191},{4,11,334},{133,11,593},{135,11,1885},{134,0,1138}
-,{4,0,249},{6,0,73},{135,0,177},{133,0,576},{142,0,231},{137,0,288},{132,10,660}
-,{7,10,1035},{138,10,737},{135,0,1487},{6,0,989},{9,0,433},{7,10,690},{9,10,587}
-,{140,10,521},{7,0,1264},{7,0,1678},{11,0,945},{12,0,341},{12,0,471},{140,0,569}
-,{132,11,709},{133,11,897},{5,11,224},{13,11,174},{146,11,52},{135,11,1840},{134
-,10,1744},{12,0,87},{16,0,74},{4,10,733},{9,10,194},{10,10,92},{11,10,198},{12,
-10,84},{141,10,128},{140,0,779},{135,0,538},{4,11,608},{133,11,497},{133,0,413},
-{7,11,1375},{7,11,1466},{138,11,331},{136,0,495},{6,11,540},{136,11,136},{7,0,54
-},{8,0,312},{10,0,191},{10,0,614},{140,0,567},{6,0,468},{7,0,567},{7,0,1478},{8,
-0,530},{14,0,290},{133,11,999},{4,11,299},{7,10,306},{135,11,1004},{142,11,296},
-{134,0,1484},{133,10,979},{6,0,609},{9,0,815},{12,11,137},{14,11,9},{14,11,24},{
-142,11,64},{133,11,456},{6,0,484},{135,0,822},{133,10,178},{136,11,180},{132,11,
-755},{137,0,900},{135,0,1335},{6,0,1724},{135,0,2022},{135,11,1139},{5,0,640},{
-132,10,390},{6,0,1831},{138,11,633},{135,11,566},{4,11,890},{5,11,805},{5,11,819
-},{5,11,961},{6,11,396},{6,11,1631},{6,11,1678},{7,11,1967},{7,11,2041},{9,11,
-630},{11,11,8},{11,11,1019},{12,11,176},{13,11,225},{14,11,292},{149,11,24},{132
-,0,474},{134,0,1103},{135,0,1504},{134,0,1576},{6,0,961},{6,0,1034},{140,0,655},
-{11,11,514},{149,11,20},{5,0,305},{135,11,1815},{7,11,1505},{10,11,190},{10,11,
-634},{11,11,792},{12,11,358},{140,11,447},{5,11,0},{6,11,536},{7,11,604},{13,11,
-445},{145,11,126},{7,0,1236},{133,10,105},{4,0,480},{6,0,217},{6,0,302},{6,0,
-1642},{7,0,130},{7,0,837},{7,0,1321},{7,0,1547},{7,0,1657},{8,0,429},{9,0,228},{
-13,0,289},{13,0,343},{19,0,101},{6,11,232},{6,11,412},{7,11,1074},{8,11,9},{8,11
-,157},{8,11,786},{9,11,196},{9,11,352},{9,11,457},{10,11,337},{11,11,232},{11,11
-,877},{12,11,480},{140,11,546},{5,10,438},{7,11,958},{9,10,694},{12,10,627},{13,
-11,38},{141,10,210},{4,11,382},{136,11,579},{7,0,278},{10,0,739},{11,0,708},{141
-,0,348},{4,11,212},{135,11,1206},{135,11,1898},{6,0,708},{6,0,1344},{152,10,11},
-{137,11,768},{134,0,1840},{140,0,233},{8,10,25},{138,10,826},{6,0,2017},{133,11,
-655},{6,0,1488},{139,11,290},{132,10,308},{134,0,1590},{134,0,1800},{134,0,1259}
-,{16,0,28},{6,11,231},{7,11,95},{136,11,423},{133,11,300},{135,10,150},{136,10,
-649},{7,11,1874},{137,11,641},{6,11,237},{7,11,611},{8,11,100},{9,11,416},{11,11
-,335},{12,11,173},{146,11,101},{137,0,45},{134,10,521},{17,0,36},{14,11,26},{146
-,11,150},{7,0,1442},{14,0,22},{5,10,339},{15,10,41},{15,10,166},{147,10,66},{8,0
-,378},{6,11,581},{135,11,1119},{134,0,1507},{147,11,117},{139,0,39},{134,0,1054}
-,{6,0,363},{7,0,1955},{136,0,725},{134,0,2036},{133,11,199},{6,0,1871},{9,0,935}
-,{9,0,961},{9,0,1004},{9,0,1016},{12,0,805},{12,0,852},{12,0,853},{12,0,869},{12
-,0,882},{12,0,896},{12,0,906},{12,0,917},{12,0,940},{15,0,170},{15,0,176},{15,0,
-188},{15,0,201},{15,0,205},{15,0,212},{15,0,234},{15,0,244},{18,0,181},{18,0,193
-},{18,0,196},{18,0,201},{18,0,202},{18,0,210},{18,0,217},{18,0,235},{18,0,236},{
-18,0,237},{21,0,54},{21,0,55},{21,0,58},{21,0,59},{152,0,22},{134,10,1628},{137,
-0,805},{5,0,813},{135,0,2046},{142,11,42},{5,0,712},{6,0,1240},{11,0,17},{13,0,
-321},{144,0,67},{132,0,617},{135,10,829},{6,0,320},{7,0,781},{7,0,1921},{9,0,55}
-,{10,0,186},{10,0,273},{10,0,664},{10,0,801},{11,0,996},{11,0,997},{13,0,157},{
-142,0,170},{136,0,271},{5,10,486},{135,10,1349},{18,11,91},{147,11,70},{10,0,445
-},{7,10,1635},{8,10,17},{138,10,295},{136,11,404},{7,0,103},{7,0,863},{11,0,184}
-,{145,0,62},{138,10,558},{137,0,659},{6,11,312},{6,11,1715},{10,11,584},{11,11,
-546},{11,11,692},{12,11,259},{12,11,295},{13,11,46},{141,11,154},{134,0,676},{
-132,11,588},{4,11,231},{5,11,61},{6,11,104},{7,11,729},{7,11,964},{7,11,1658},{
-140,11,414},{6,11,263},{138,11,757},{11,0,337},{142,0,303},{135,11,1363},{132,11
-,320},{140,0,506},{134,10,447},{5,0,77},{7,0,1455},{10,0,843},{147,0,73},{7,10,
-577},{7,10,1432},{9,10,475},{9,10,505},{9,10,526},{9,10,609},{9,10,689},{9,10,
-726},{9,10,735},{9,10,738},{10,10,556},{10,10,674},{10,10,684},{11,10,89},{11,10
-,202},{11,10,272},{11,10,380},{11,10,415},{11,10,505},{11,10,537},{11,10,550},{
-11,10,562},{11,10,640},{11,10,667},{11,10,688},{11,10,847},{11,10,927},{11,10,
-930},{11,10,940},{12,10,144},{12,10,325},{12,10,329},{12,10,389},{12,10,403},{12
-,10,451},{12,10,515},{12,10,604},{12,10,616},{12,10,626},{13,10,66},{13,10,131},
-{13,10,167},{13,10,236},{13,10,368},{13,10,411},{13,10,434},{13,10,453},{13,10,
-461},{13,10,474},{14,10,59},{14,10,60},{14,10,139},{14,10,152},{14,10,276},{14,
-10,353},{14,10,402},{15,10,28},{15,10,81},{15,10,123},{15,10,152},{18,10,136},{
-148,10,88},{132,0,458},{135,0,1420},{6,0,109},{10,0,382},{4,11,405},{4,10,609},{
-7,10,756},{7,11,817},{9,10,544},{11,10,413},{14,11,58},{14,10,307},{16,10,25},{
-17,11,37},{146,11,124},{6,0,330},{7,0,1084},{11,0,142},{133,11,974},{4,10,930},{
-133,10,947},{5,10,939},{142,11,394},{16,0,91},{145,0,87},{5,11,235},{5,10,962},{
-7,11,1239},{11,11,131},{140,11,370},{11,0,492},{5,10,651},{8,10,170},{9,10,61},{
-9,10,63},{10,10,23},{10,10,37},{10,10,834},{11,10,4},{11,10,281},{11,10,503},{11
-,10,677},{12,10,96},{12,10,130},{12,10,244},{14,10,5},{14,10,40},{14,10,162},{14
-,10,202},{146,10,133},{4,10,406},{5,10,579},{12,10,492},{150,10,15},{9,11,137},{
-138,11,221},{134,0,1239},{11,0,211},{140,0,145},{7,11,390},{138,11,140},{135,11,
-1418},{135,11,1144},{134,0,1049},{7,0,321},{6,10,17},{7,10,1001},{7,10,1982},{9,
-10,886},{10,10,489},{10,10,800},{11,10,782},{12,10,320},{13,10,467},{14,10,145},
-{14,10,387},{143,10,119},{145,10,17},{5,11,407},{11,11,489},{19,11,37},{20,11,73
-},{150,11,38},{133,10,458},{135,0,1985},{7,10,1983},{8,10,0},{8,10,171},{9,10,
-120},{9,10,732},{10,10,473},{11,10,656},{11,10,998},{18,10,0},{18,10,2},{147,10,
-21},{5,11,325},{7,11,1483},{8,11,5},{8,11,227},{9,11,105},{10,11,585},{140,11,
-614},{136,0,122},{132,0,234},{135,11,1196},{6,0,976},{6,0,1098},{134,0,1441},{7,
-0,253},{136,0,549},{6,11,621},{13,11,504},{144,11,19},{132,10,519},{5,0,430},{5,
-0,932},{6,0,131},{7,0,417},{9,0,522},{11,0,314},{141,0,390},{14,0,149},{14,0,399
-},{143,0,57},{5,10,907},{6,10,31},{6,11,218},{7,10,491},{7,10,530},{8,10,592},{
-11,10,53},{11,10,779},{12,10,167},{12,10,411},{14,10,14},{14,10,136},{15,10,72},
-{16,10,17},{144,10,72},{140,11,330},{7,11,454},{7,11,782},{136,11,768},{132,0,
-507},{10,11,676},{140,11,462},{6,0,630},{9,0,811},{4,10,208},{5,10,106},{6,10,
-531},{8,10,408},{9,10,188},{138,10,572},{4,0,343},{5,0,511},{134,10,1693},{134,
-11,164},{132,0,448},{7,0,455},{138,0,591},{135,0,1381},{12,10,441},{150,11,50},{
-9,10,449},{10,10,192},{138,10,740},{6,0,575},{132,10,241},{134,0,1175},{134,0,
-653},{134,0,1761},{134,0,1198},{132,10,259},{6,11,343},{7,11,195},{9,11,226},{10
-,11,197},{10,11,575},{11,11,502},{139,11,899},{7,0,1127},{7,0,1572},{10,0,297},{
-10,0,422},{11,0,764},{11,0,810},{12,0,264},{13,0,102},{13,0,300},{13,0,484},{14,
-0,147},{14,0,229},{17,0,71},{18,0,118},{147,0,120},{135,11,666},{132,0,678},{4,
-10,173},{5,10,312},{5,10,512},{135,10,1285},{7,10,1603},{7,10,1691},{9,10,464},{
-11,10,195},{12,10,279},{12,10,448},{14,10,11},{147,10,102},{16,0,99},{146,0,164}
-,{7,11,1125},{9,11,143},{11,11,61},{14,11,405},{150,11,21},{137,11,260},{4,10,
-452},{5,10,583},{5,10,817},{6,10,433},{7,10,593},{7,10,720},{7,10,1378},{8,10,
-161},{9,10,284},{10,10,313},{139,10,886},{132,10,547},{136,10,722},{14,0,35},{
-142,0,191},{141,0,45},{138,0,121},{132,0,125},{134,0,1622},{133,11,959},{8,10,
-420},{139,10,193},{132,0,721},{135,10,409},{136,0,145},{7,0,792},{8,0,147},{10,0
-,821},{11,0,970},{11,0,1021},{136,11,173},{134,11,266},{132,0,715},{7,0,1999},{
-138,10,308},{133,0,531},{5,0,168},{5,0,930},{8,0,74},{9,0,623},{12,0,500},{140,0
-,579},{144,0,65},{138,11,246},{6,0,220},{7,0,1101},{13,0,105},{142,11,314},{5,10
-,1002},{136,10,745},{134,0,960},{20,0,0},{148,11,0},{4,0,1005},{4,10,239},{6,10,
-477},{7,10,1607},{11,10,68},{139,10,617},{6,0,19},{7,0,1413},{139,0,428},{149,10
-,13},{7,0,96},{8,0,401},{8,0,703},{9,0,896},{136,11,300},{134,0,1595},{145,0,116
-},{136,0,1021},{7,0,1961},{7,0,1965},{7,0,2030},{8,0,150},{8,0,702},{8,0,737},{8
-,0,750},{140,0,366},{11,11,75},{142,11,267},{132,10,367},{8,0,800},{9,0,148},{9,
-0,872},{9,0,890},{11,0,309},{11,0,1001},{13,0,267},{13,0,323},{5,11,427},{5,11,
-734},{7,11,478},{136,11,52},{7,11,239},{11,11,217},{142,11,165},{132,11,323},{
-140,11,419},{13,0,299},{142,0,75},{6,11,87},{6,11,1734},{7,11,20},{7,11,1056},{8
-,11,732},{9,11,406},{9,11,911},{138,11,694},{134,0,1383},{132,10,694},{133,11,
-613},{137,0,779},{4,0,598},{140,10,687},{6,0,970},{135,0,424},{133,0,547},{7,11,
-32},{7,11,984},{8,11,85},{8,11,709},{9,11,579},{9,11,847},{9,11,856},{10,11,799}
-,{11,11,258},{11,11,1007},{12,11,331},{12,11,615},{13,11,188},{13,11,435},{14,11
-,8},{15,11,165},{16,11,27},{148,11,40},{6,0,1222},{134,0,1385},{132,0,876},{138,
-11,151},{135,10,213},{4,11,167},{135,11,82},{133,0,133},{6,11,24},{7,11,74},{7,
-11,678},{137,11,258},{5,11,62},{6,11,534},{7,11,684},{7,11,1043},{7,11,1072},{8,
-11,280},{8,11,541},{8,11,686},{10,11,519},{11,11,252},{140,11,282},{136,0,187},{
-8,0,8},{10,0,0},{10,0,818},{139,0,988},{132,11,359},{11,0,429},{15,0,51},{135,10
-,1672},{136,0,685},{5,11,211},{7,11,88},{136,11,627},{134,0,472},{136,0,132},{6,
-11,145},{141,11,336},{4,10,751},{11,10,390},{140,10,32},{6,0,938},{6,0,1060},{4,
-11,263},{4,10,409},{133,10,78},{137,0,874},{8,0,774},{10,0,670},{12,0,51},{4,11,
-916},{6,10,473},{7,10,1602},{10,10,698},{12,10,212},{13,10,307},{145,10,105},{
-146,0,92},{143,10,156},{132,0,830},{137,0,701},{4,11,599},{6,11,1634},{7,11,5},{
-7,11,55},{7,11,67},{7,11,97},{7,11,691},{7,11,979},{7,11,1697},{8,11,207},{8,11,
-214},{8,11,231},{8,11,294},{8,11,336},{8,11,428},{8,11,451},{8,11,460},{8,11,471
-},{8,11,622},{8,11,626},{8,11,679},{8,11,759},{8,11,829},{9,11,11},{9,11,246},{9
-,11,484},{9,11,573},{9,11,706},{9,11,762},{9,11,798},{9,11,855},{9,11,870},{9,11
-,912},{10,11,303},{10,11,335},{10,11,424},{10,11,461},{10,11,543},{10,11,759},{
-10,11,814},{11,11,59},{11,11,199},{11,11,235},{11,11,475},{11,11,590},{11,11,929
-},{11,11,963},{12,11,114},{12,11,182},{12,11,226},{12,11,332},{12,11,439},{12,11
-,575},{12,11,598},{13,11,8},{13,11,125},{13,11,194},{13,11,287},{14,11,197},{14,
-11,383},{15,11,53},{17,11,63},{19,11,46},{19,11,98},{19,11,106},{148,11,85},{4,0
-,127},{5,0,350},{6,0,356},{8,0,426},{9,0,572},{10,0,247},{139,0,312},{134,0,1215
-},{6,0,59},{9,0,603},{13,0,397},{7,11,1853},{138,11,437},{134,0,1762},{147,11,
-126},{135,10,883},{13,0,293},{142,0,56},{133,10,617},{139,10,50},{5,11,187},{7,
-10,1518},{139,10,694},{135,0,441},{6,0,111},{7,0,4},{8,0,163},{8,0,776},{138,0,
-566},{132,0,806},{4,11,215},{9,11,38},{10,11,3},{11,11,23},{11,11,127},{139,11,
-796},{14,0,233},{4,10,546},{135,10,2042},{135,0,1994},{134,0,1739},{135,11,1530}
-,{136,0,393},{5,0,297},{7,0,1038},{14,0,359},{19,0,52},{148,0,47},{135,0,309},{4
-,10,313},{133,10,577},{8,10,184},{141,10,433},{135,10,935},{12,10,186},{12,10,
-292},{14,10,100},{146,10,70},{136,0,363},{14,0,175},{11,10,402},{12,10,109},{12,
-10,431},{13,10,179},{13,10,206},{14,10,217},{16,10,3},{148,10,53},{5,10,886},{6,
-10,46},{6,10,1790},{7,10,14},{7,10,732},{7,10,1654},{8,10,95},{8,10,327},{8,10,
-616},{9,10,892},{10,10,598},{10,10,769},{11,10,134},{11,10,747},{12,10,378},{142
-,10,97},{136,0,666},{135,0,1675},{6,0,655},{134,0,1600},{135,0,808},{133,10,1021
-},{4,11,28},{5,11,440},{7,11,248},{11,11,833},{140,11,344},{134,11,1654},{132,0,
-280},{140,0,54},{4,0,421},{133,0,548},{132,10,153},{6,11,339},{135,11,923},{133,
-11,853},{133,10,798},{132,10,587},{6,11,249},{7,11,1234},{139,11,573},{6,10,598}
-,{7,10,42},{8,10,695},{10,10,212},{11,10,158},{14,10,196},{145,10,85},{7,0,249},
-{5,10,957},{133,10,1008},{4,10,129},{135,10,465},{6,0,254},{7,0,842},{7,0,1659},
-{9,0,109},{10,0,103},{7,10,908},{7,10,1201},{9,10,755},{11,10,906},{12,10,527},{
-146,10,7},{5,0,262},{136,10,450},{144,0,1},{10,11,201},{142,11,319},{7,11,49},{7
-,11,392},{8,11,20},{8,11,172},{8,11,690},{9,11,383},{9,11,845},{10,11,48},{11,11
-,293},{11,11,832},{11,11,920},{141,11,221},{5,11,858},{133,11,992},{134,0,805},{
-139,10,1003},{6,0,1630},{134,11,307},{7,11,1512},{135,11,1794},{6,11,268},{137,
-11,62},{135,10,1868},{133,0,671},{4,0,989},{8,0,972},{136,0,998},{132,11,423},{
-132,0,889},{135,0,1382},{135,0,1910},{7,10,965},{7,10,1460},{135,10,1604},{4,0,
-627},{5,0,775},{138,11,106},{134,11,348},{7,0,202},{11,0,362},{11,0,948},{140,0,
-388},{138,11,771},{6,11,613},{136,11,223},{6,0,560},{7,0,451},{8,0,389},{12,0,
-490},{13,0,16},{13,0,215},{13,0,351},{18,0,132},{147,0,125},{135,0,841},{136,0,
-566},{136,0,938},{132,11,670},{5,0,912},{6,0,1695},{140,11,55},{9,11,40},{139,11
-,136},{7,0,1361},{7,10,982},{10,10,32},{143,10,56},{11,11,259},{140,11,270},{5,0
-,236},{6,0,572},{8,0,492},{11,0,618},{144,0,56},{8,11,572},{9,11,310},{9,11,682}
-,{137,11,698},{134,0,1854},{5,0,190},{136,0,318},{133,10,435},{135,0,1376},{4,11
-,296},{6,11,352},{7,11,401},{7,11,1410},{7,11,1594},{7,11,1674},{8,11,63},{8,11,
-660},{137,11,74},{7,0,349},{5,10,85},{6,10,419},{7,10,305},{7,10,361},{7,10,1337
-},{8,10,71},{140,10,519},{4,11,139},{4,11,388},{140,11,188},{6,0,1972},{6,0,2013
-},{8,0,951},{10,0,947},{10,0,974},{10,0,1018},{142,0,476},{140,10,688},{135,10,
-740},{5,10,691},{7,10,345},{9,10,94},{140,10,169},{9,0,344},{5,10,183},{6,10,582
-},{10,10,679},{140,10,435},{135,10,511},{132,0,850},{8,11,441},{10,11,314},{143,
-11,3},{7,10,1993},{136,10,684},{4,11,747},{6,11,290},{6,10,583},{7,11,649},{7,11
-,1479},{135,11,1583},{133,11,232},{133,10,704},{134,0,910},{4,10,179},{5,10,198}
-,{133,10,697},{7,10,347},{7,10,971},{8,10,181},{138,10,711},{136,11,525},{14,0,
-19},{14,0,28},{144,0,29},{7,0,85},{7,0,247},{8,0,585},{138,0,163},{4,0,487},{7,
-11,472},{7,11,1801},{10,11,748},{141,11,458},{4,10,243},{5,10,203},{7,10,19},{7,
-10,71},{7,10,113},{10,10,405},{11,10,357},{142,10,240},{7,10,1450},{139,10,99},{
-132,11,425},{138,0,145},{147,0,83},{6,10,492},{137,11,247},{4,0,1013},{134,0,
-2033},{5,10,134},{6,10,408},{6,10,495},{135,10,1593},{135,0,1922},{134,11,1768},
-{4,0,124},{10,0,457},{11,0,121},{11,0,169},{11,0,870},{11,0,874},{12,0,214},{14,
-0,187},{143,0,77},{5,0,557},{135,0,1457},{139,0,66},{5,11,943},{6,11,1779},{142,
-10,4},{4,10,248},{4,10,665},{7,10,137},{137,10,349},{7,0,1193},{5,11,245},{6,11,
-576},{7,11,582},{136,11,225},{144,0,82},{7,10,1270},{139,10,612},{5,0,454},{10,0
-,352},{138,11,352},{18,0,57},{5,10,371},{135,10,563},{135,0,1333},{6,0,107},{7,0
-,638},{7,0,1632},{9,0,396},{134,11,610},{5,0,370},{134,0,1756},{4,10,374},{7,10,
-547},{7,10,1700},{7,10,1833},{139,10,858},{133,0,204},{6,0,1305},{9,10,311},{141
-,10,42},{5,0,970},{134,0,1706},{6,10,1647},{7,10,1552},{7,10,2010},{9,10,494},{
-137,10,509},{13,11,455},{15,11,99},{15,11,129},{144,11,68},{135,0,3},{4,0,35},{5
-,0,121},{5,0,483},{5,0,685},{6,0,489},{6,0,782},{6,0,1032},{7,0,1204},{136,0,394
-},{4,0,921},{133,0,1007},{8,11,360},{138,11,63},{135,0,1696},{134,0,1519},{132,
-11,443},{135,11,944},{6,10,123},{7,10,214},{9,10,728},{10,10,157},{11,10,346},{
-11,10,662},{143,10,106},{137,0,981},{135,10,1435},{134,0,1072},{132,0,712},{134,
-0,1629},{134,0,728},{4,11,298},{137,11,483},{6,0,1177},{6,0,1271},{5,11,164},{7,
-11,121},{142,11,189},{7,0,1608},{4,10,707},{5,10,588},{6,10,393},{13,10,106},{18
-,10,49},{147,10,41},{23,0,16},{151,11,16},{6,10,211},{7,10,1690},{11,10,486},{
-140,10,369},{133,0,485},{19,11,15},{149,11,27},{4,11,172},{9,11,611},{10,11,436}
-,{12,11,673},{141,11,255},{5,11,844},{10,11,484},{11,11,754},{12,11,457},{14,11,
-171},{14,11,389},{146,11,153},{4,0,285},{5,0,27},{5,0,317},{6,0,301},{7,0,7},{8,
-0,153},{10,0,766},{11,0,468},{12,0,467},{141,0,143},{134,0,1462},{9,11,263},{10,
-11,147},{138,11,492},{133,11,537},{6,0,1945},{6,0,1986},{6,0,1991},{134,0,2038},
-{134,10,219},{137,11,842},{14,0,52},{17,0,50},{5,10,582},{6,10,1646},{7,10,99},{
-7,10,1962},{7,10,1986},{8,10,515},{8,10,773},{9,10,23},{9,10,491},{12,10,620},{
-142,10,93},{138,11,97},{20,0,21},{20,0,44},{133,10,851},{136,0,819},{139,0,917},
-{5,11,230},{5,11,392},{6,11,420},{8,10,762},{8,10,812},{9,11,568},{9,10,910},{
-140,11,612},{135,0,784},{15,0,135},{143,11,135},{10,0,454},{140,0,324},{4,11,0},
-{5,11,41},{7,11,1459},{7,11,1469},{7,11,1618},{7,11,1859},{9,11,549},{139,11,905
-},{4,10,98},{7,10,1365},{9,10,422},{9,10,670},{10,10,775},{11,10,210},{13,10,26}
-,{13,10,457},{141,10,476},{6,0,1719},{6,0,1735},{7,0,2016},{7,0,2020},{8,0,837},
-{137,0,852},{133,11,696},{135,0,852},{132,0,952},{134,10,1730},{132,11,771},{138
-,0,568},{137,0,448},{139,0,146},{8,0,67},{138,0,419},{133,11,921},{137,10,147},{
-134,0,1826},{10,0,657},{14,0,297},{142,0,361},{6,0,666},{6,0,767},{134,0,1542},{
-139,0,729},{6,11,180},{7,11,1137},{8,11,751},{139,11,805},{4,11,183},{7,11,271},
-{11,11,824},{11,11,952},{13,11,278},{13,11,339},{13,11,482},{14,11,424},{148,11,
-99},{4,0,669},{5,11,477},{5,11,596},{6,11,505},{7,11,1221},{11,11,907},{12,11,
-209},{141,11,214},{135,11,1215},{5,0,402},{6,10,30},{11,10,56},{139,10,305},{7,
-11,564},{142,11,168},{139,0,152},{7,0,912},{135,10,1614},{4,10,150},{5,10,303},{
-134,10,327},{7,0,320},{8,0,51},{9,0,868},{10,0,833},{12,0,481},{12,0,570},{148,0
-,106},{132,0,445},{7,11,274},{11,11,263},{11,11,479},{11,11,507},{140,11,277},{
-10,0,555},{11,0,308},{19,0,95},{6,11,1645},{8,10,192},{10,10,78},{141,10,359},{
-135,10,786},{6,11,92},{6,11,188},{7,11,1269},{7,11,1524},{7,11,1876},{10,11,228}
-,{139,11,1020},{4,11,459},{133,11,966},{11,0,386},{6,10,1638},{7,10,79},{7,10,
-496},{9,10,138},{10,10,336},{12,10,412},{12,10,440},{142,10,305},{133,0,239},{7,
-0,83},{7,0,1990},{8,0,130},{139,0,720},{138,11,709},{4,0,143},{5,0,550},{133,0,
-752},{5,0,123},{6,0,530},{7,0,348},{135,0,1419},{135,0,2024},{6,11,18},{7,11,179
-},{7,11,721},{7,11,932},{8,11,548},{8,11,757},{9,11,54},{9,11,65},{9,11,532},{9,
-11,844},{10,11,113},{10,11,117},{10,11,236},{10,11,315},{10,11,430},{10,11,798},
-{11,11,153},{11,11,351},{11,11,375},{12,11,78},{12,11,151},{12,11,392},{14,11,
-248},{143,11,23},{7,10,204},{7,10,415},{8,10,42},{10,10,85},{139,10,564},{134,0,
-958},{133,11,965},{132,0,210},{135,11,1429},{138,11,480},{134,11,182},{139,11,
-345},{10,11,65},{10,11,488},{138,11,497},{4,10,3},{5,10,247},{5,10,644},{7,10,
-744},{7,10,1207},{7,10,1225},{7,10,1909},{146,10,147},{132,0,430},{5,10,285},{9,
-10,67},{13,10,473},{143,10,82},{144,11,16},{7,11,1162},{9,11,588},{10,11,260},{
-151,10,8},{133,0,213},{138,0,7},{135,0,801},{134,11,1786},{135,11,308},{6,0,936}
-,{134,0,1289},{133,0,108},{132,0,885},{133,0,219},{139,0,587},{4,0,193},{5,0,916
-},{6,0,1041},{7,0,364},{10,0,398},{10,0,726},{11,0,317},{11,0,626},{12,0,142},{
-12,0,288},{12,0,678},{13,0,313},{15,0,113},{146,0,114},{135,0,1165},{6,0,241},{9
-,0,342},{10,0,729},{11,0,284},{11,0,445},{11,0,651},{11,0,863},{13,0,398},{146,0
-,99},{7,0,907},{136,0,832},{9,0,303},{4,10,29},{6,10,532},{7,10,1628},{7,10,1648
-},{9,10,350},{10,10,433},{11,10,97},{11,10,557},{11,10,745},{12,10,289},{12,10,
-335},{12,10,348},{12,10,606},{13,10,116},{13,10,233},{13,10,466},{14,10,181},{14
-,10,209},{14,10,232},{14,10,236},{14,10,300},{16,10,41},{148,10,97},{7,11,423},{
-7,10,1692},{136,11,588},{6,0,931},{134,0,1454},{5,10,501},{7,10,1704},{9,10,553}
-,{11,10,520},{12,10,557},{141,10,249},{136,11,287},{4,0,562},{9,0,254},{139,0,
-879},{132,0,786},{14,11,32},{18,11,85},{20,11,2},{152,11,16},{135,0,1294},{7,11,
-723},{135,11,1135},{6,0,216},{7,0,901},{7,0,1343},{8,0,493},{134,11,403},{7,11,
-719},{8,11,809},{136,11,834},{5,11,210},{6,11,213},{7,11,60},{10,11,364},{139,11
-,135},{7,0,341},{11,0,219},{5,11,607},{8,11,326},{136,11,490},{4,11,701},{5,11,
-472},{5,11,639},{7,11,1249},{9,11,758},{139,11,896},{135,11,380},{135,11,1947},{
-139,0,130},{135,0,1734},{10,0,115},{11,0,420},{12,0,154},{13,0,404},{14,0,346},{
-143,0,54},{134,10,129},{4,11,386},{7,11,41},{8,11,405},{9,11,497},{11,11,110},{
-11,11,360},{15,11,37},{144,11,84},{141,11,282},{5,11,46},{7,11,1452},{7,11,1480}
-,{8,11,634},{140,11,472},{4,11,524},{136,11,810},{10,11,238},{141,11,33},{133,0,
-604},{5,0,1011},{136,0,701},{8,0,856},{8,0,858},{8,0,879},{12,0,702},{142,0,447}
-,{4,0,54},{5,0,666},{7,0,1039},{7,0,1130},{9,0,195},{138,0,302},{4,10,25},{5,10,
-60},{6,10,504},{7,10,614},{7,10,1155},{140,10,0},{7,10,1248},{11,10,621},{139,10
-,702},{133,11,997},{137,10,321},{134,0,1669},{134,0,1791},{4,10,379},{135,10,
-1397},{138,11,372},{5,11,782},{5,11,829},{134,11,1738},{135,0,1228},{4,10,118},{
-6,10,274},{6,10,361},{7,10,75},{141,10,441},{132,0,623},{9,11,279},{10,11,407},{
-14,11,84},{150,11,18},{137,10,841},{135,0,798},{140,10,693},{5,10,314},{6,10,221
-},{7,10,419},{10,10,650},{11,10,396},{12,10,156},{13,10,369},{14,10,333},{145,10
-,47},{135,11,1372},{7,0,122},{9,0,259},{10,0,84},{11,0,470},{12,0,541},{141,0,
-379},{134,0,837},{8,0,1013},{4,11,78},{5,11,96},{5,11,182},{7,11,1724},{7,11,
-1825},{10,11,394},{10,11,471},{11,11,532},{14,11,340},{145,11,88},{134,0,577},{
-135,11,1964},{132,10,913},{134,0,460},{8,0,891},{10,0,901},{10,0,919},{10,0,932}
-,{12,0,715},{12,0,728},{12,0,777},{14,0,457},{144,0,103},{5,0,82},{5,0,131},{7,0
-,1755},{8,0,31},{9,0,168},{9,0,764},{139,0,869},{136,10,475},{6,0,605},{5,10,
-1016},{9,11,601},{9,11,619},{10,11,505},{10,11,732},{11,11,355},{140,11,139},{7,
-10,602},{8,10,179},{10,10,781},{140,10,126},{134,0,1246},{6,10,329},{138,10,111}
-,{6,11,215},{7,11,1028},{7,11,1473},{7,11,1721},{9,11,424},{138,11,779},{5,0,278
-},{137,0,68},{6,0,932},{6,0,1084},{144,0,86},{4,0,163},{5,0,201},{5,0,307},{5,0,
-310},{6,0,335},{7,0,284},{7,0,1660},{136,0,165},{136,0,781},{134,0,707},{6,0,33}
-,{135,0,1244},{5,10,821},{6,11,67},{6,10,1687},{7,11,258},{7,11,1630},{9,11,354}
-,{9,11,675},{10,11,830},{14,11,80},{145,11,80},{6,11,141},{7,11,225},{9,11,59},{
-9,11,607},{10,11,312},{11,11,687},{12,11,555},{13,11,373},{13,11,494},{148,11,58
-},{134,0,1113},{9,0,388},{5,10,71},{7,10,1407},{9,10,704},{10,10,261},{10,10,619
-},{11,10,547},{11,10,619},{143,10,157},{7,0,1953},{136,0,720},{138,0,203},{7,10,
-2008},{9,10,337},{138,10,517},{6,0,326},{7,0,677},{137,0,425},{139,11,81},{7,0,
-1316},{7,0,1412},{7,0,1839},{9,0,589},{11,0,241},{11,0,676},{11,0,811},{11,0,891
-},{12,0,140},{12,0,346},{12,0,479},{13,0,140},{13,0,381},{14,0,188},{18,0,30},{
-148,0,108},{5,0,416},{6,10,86},{6,10,603},{7,10,292},{7,10,561},{8,10,257},{8,10
-,382},{9,10,721},{9,10,778},{11,10,581},{140,10,466},{4,10,486},{133,10,491},{
-134,0,1300},{132,10,72},{7,0,847},{6,10,265},{7,11,430},{139,11,46},{5,11,602},{
-6,11,106},{7,11,1786},{7,11,1821},{7,11,2018},{9,11,418},{137,11,763},{5,0,358},
-{7,0,535},{7,0,1184},{10,0,662},{13,0,212},{13,0,304},{13,0,333},{145,0,98},{5,
-11,65},{6,11,416},{7,11,1720},{7,11,1924},{8,11,677},{10,11,109},{11,11,14},{11,
-11,70},{11,11,569},{11,11,735},{15,11,153},{148,11,80},{6,0,1823},{8,0,839},{8,0
-,852},{8,0,903},{10,0,940},{12,0,707},{140,0,775},{135,11,1229},{6,0,1522},{140,
-0,654},{136,11,595},{139,0,163},{141,0,314},{132,0,978},{4,0,601},{6,0,2035},{
-137,10,234},{5,10,815},{6,10,1688},{134,10,1755},{133,0,946},{136,0,434},{6,10,
-197},{136,10,205},{7,0,411},{7,0,590},{8,0,631},{9,0,323},{10,0,355},{11,0,491},
-{12,0,143},{12,0,402},{13,0,73},{14,0,408},{15,0,107},{146,0,71},{7,0,1467},{8,0
-,328},{10,0,544},{11,0,955},{12,0,13},{13,0,320},{145,0,83},{142,0,410},{11,0,
-511},{13,0,394},{14,0,298},{14,0,318},{146,0,103},{6,10,452},{7,10,312},{138,10,
-219},{138,10,589},{4,10,333},{9,10,176},{12,10,353},{141,10,187},{135,11,329},{
-132,11,469},{5,0,835},{134,0,483},{134,11,1743},{5,11,929},{6,11,340},{8,11,376}
-,{136,11,807},{134,10,1685},{132,0,677},{5,11,218},{7,11,1610},{138,11,83},{5,11
-,571},{135,11,1842},{132,11,455},{137,0,70},{135,0,1405},{7,10,135},{8,10,7},{8,
-10,62},{9,10,243},{10,10,658},{10,10,697},{11,10,456},{139,10,756},{9,10,395},{
-138,10,79},{137,0,108},{6,11,161},{7,11,372},{137,11,597},{132,11,349},{132,0,
-777},{132,0,331},{135,10,631},{133,0,747},{6,11,432},{6,11,608},{139,11,322},{
-138,10,835},{5,11,468},{7,11,1809},{10,11,325},{11,11,856},{12,11,345},{143,11,
-104},{133,11,223},{7,10,406},{7,10,459},{8,10,606},{139,10,726},{132,11,566},{
-142,0,68},{4,11,59},{135,11,1394},{6,11,436},{139,11,481},{4,11,48},{5,11,271},{
-135,11,953},{139,11,170},{5,11,610},{136,11,457},{133,11,755},{135,11,1217},{133
-,10,612},{132,11,197},{132,0,505},{4,10,372},{7,10,482},{8,10,158},{9,10,602},{9
-,10,615},{10,10,245},{10,10,678},{10,10,744},{11,10,248},{139,10,806},{133,0,326
-},{5,10,854},{135,10,1991},{4,0,691},{146,0,16},{6,0,628},{9,0,35},{10,0,680},{
-10,0,793},{11,0,364},{13,0,357},{143,0,164},{138,0,654},{6,0,32},{7,0,385},{7,0,
-757},{7,0,1916},{8,0,37},{8,0,94},{8,0,711},{9,0,541},{10,0,162},{10,0,795},{11,
-0,989},{11,0,1010},{12,0,14},{142,0,308},{133,11,217},{6,0,152},{6,0,349},{6,0,
-1682},{7,0,1252},{8,0,112},{9,0,435},{9,0,668},{10,0,290},{10,0,319},{10,0,815},
-{11,0,180},{11,0,837},{12,0,240},{13,0,152},{13,0,219},{142,0,158},{4,0,581},{
-134,0,726},{5,10,195},{135,10,1685},{6,0,126},{7,0,573},{8,0,397},{142,0,44},{
-138,0,89},{7,10,1997},{8,10,730},{139,10,1006},{134,0,1531},{134,0,1167},{5,0,
-926},{12,0,203},{133,10,751},{4,11,165},{7,11,1398},{135,11,1829},{7,0,1232},{
-137,0,531},{135,10,821},{134,0,943},{133,0,670},{4,0,880},{139,0,231},{134,0,
-1617},{135,0,1957},{5,11,9},{7,11,297},{7,11,966},{140,11,306},{6,0,975},{134,0,
-985},{5,10,950},{5,10,994},{134,10,351},{12,11,21},{151,11,7},{5,11,146},{6,11,
-411},{138,11,721},{7,0,242},{135,0,1942},{6,11,177},{135,11,467},{5,0,421},{7,10
-,47},{137,10,684},{5,0,834},{7,0,1202},{8,0,14},{9,0,481},{137,0,880},{138,0,465
-},{6,0,688},{9,0,834},{132,10,350},{132,0,855},{4,0,357},{6,0,172},{7,0,143},{
-137,0,413},{133,11,200},{132,0,590},{7,10,1812},{13,10,259},{13,10,356},{14,10,
-242},{147,10,114},{133,10,967},{11,0,114},{4,10,473},{7,10,623},{8,10,808},{9,10
-,871},{9,10,893},{11,10,431},{12,10,112},{12,10,217},{12,10,243},{12,10,562},{12
-,10,663},{12,10,683},{13,10,141},{13,10,197},{13,10,227},{13,10,406},{13,10,487}
-,{14,10,156},{14,10,203},{14,10,224},{14,10,256},{18,10,58},{150,10,0},{138,10,
-286},{4,10,222},{7,10,286},{136,10,629},{5,0,169},{7,0,333},{136,0,45},{134,11,
-481},{132,0,198},{4,0,24},{5,0,140},{5,0,185},{7,0,1500},{11,0,565},{11,0,838},{
-4,11,84},{7,11,1482},{10,11,76},{138,11,142},{133,0,585},{141,10,306},{133,11,
-1015},{4,11,315},{5,11,507},{135,11,1370},{136,10,146},{6,0,691},{134,0,1503},{4
-,0,334},{133,0,593},{4,10,465},{135,10,1663},{142,11,173},{135,0,913},{12,0,116}
-,{134,11,1722},{134,0,1360},{132,0,802},{8,11,222},{8,11,476},{9,11,238},{11,11,
-516},{11,11,575},{15,11,109},{146,11,100},{6,0,308},{9,0,673},{7,10,138},{7,10,
-517},{139,10,238},{132,0,709},{6,0,1876},{6,0,1895},{9,0,994},{9,0,1006},{12,0,
-829},{12,0,888},{12,0,891},{146,0,185},{148,10,94},{4,0,228},{133,0,897},{7,0,
-1840},{5,10,495},{7,10,834},{9,10,733},{139,10,378},{133,10,559},{6,10,21},{6,10
-,1737},{7,10,1444},{136,10,224},{4,0,608},{133,0,497},{6,11,40},{135,11,1781},{
-134,0,1573},{135,0,2039},{6,0,540},{136,0,136},{4,0,897},{5,0,786},{133,10,519},
-{6,0,1878},{6,0,1884},{9,0,938},{9,0,948},{9,0,955},{9,0,973},{9,0,1012},{12,0,
-895},{12,0,927},{143,0,254},{134,0,1469},{133,0,999},{4,0,299},{135,0,1004},{4,0
-,745},{133,0,578},{136,11,574},{133,0,456},{134,0,1457},{7,0,1679},{132,10,402},
-{7,0,693},{8,0,180},{12,0,163},{8,10,323},{136,10,479},{11,10,580},{142,10,201},
-{5,10,59},{135,10,672},{132,11,354},{146,10,34},{4,0,755},{135,11,1558},{7,0,
-1740},{146,0,48},{4,10,85},{135,10,549},{139,0,338},{133,10,94},{134,0,1091},{
-135,11,469},{12,0,695},{12,0,704},{20,0,113},{5,11,830},{14,11,338},{148,11,81},
-{135,0,1464},{6,10,11},{135,10,187},{135,0,975},{13,0,335},{132,10,522},{134,0,
-1979},{5,11,496},{135,11,203},{4,10,52},{135,10,661},{7,0,1566},{8,0,269},{9,0,
-212},{9,0,718},{14,0,15},{14,0,132},{142,0,227},{4,0,890},{5,0,805},{5,0,819},{5
-,0,961},{6,0,396},{6,0,1631},{6,0,1678},{7,0,1967},{7,0,2041},{9,0,630},{11,0,8}
-,{11,0,1019},{12,0,176},{13,0,225},{14,0,292},{21,0,24},{4,10,383},{133,10,520},
-{134,11,547},{135,11,1748},{5,11,88},{137,11,239},{146,11,128},{7,11,650},{135,
-11,1310},{4,10,281},{5,10,38},{7,10,194},{7,10,668},{7,10,1893},{137,10,397},{
-135,0,1815},{9,10,635},{139,10,559},{7,0,1505},{10,0,190},{10,0,634},{11,0,792},
-{12,0,358},{140,0,447},{5,0,0},{6,0,536},{7,0,604},{13,0,445},{145,0,126},{7,11,
-1076},{9,11,80},{11,11,78},{11,11,421},{11,11,534},{140,11,545},{8,0,966},{10,0,
-1023},{14,11,369},{146,11,72},{135,11,1641},{6,0,232},{6,0,412},{7,0,1074},{8,0,
-9},{8,0,157},{8,0,786},{9,0,196},{9,0,352},{9,0,457},{10,0,337},{11,0,232},{11,0
-,877},{12,0,480},{140,0,546},{135,0,958},{4,0,382},{136,0,579},{4,0,212},{135,0,
-1206},{4,11,497},{5,11,657},{135,11,1584},{132,0,681},{8,0,971},{138,0,965},{5,
-10,448},{136,10,535},{14,0,16},{146,0,44},{11,0,584},{11,0,616},{14,0,275},{11,
-11,584},{11,11,616},{142,11,275},{136,11,13},{7,10,610},{135,10,1501},{7,11,642}
-,{8,11,250},{11,11,123},{11,11,137},{13,11,48},{142,11,95},{133,0,655},{17,0,67}
-,{147,0,74},{134,0,751},{134,0,1967},{6,0,231},{136,0,423},{5,0,300},{138,0,1016
-},{4,10,319},{5,10,699},{138,10,673},{6,0,237},{7,0,611},{8,0,100},{9,0,416},{11
-,0,335},{12,0,173},{18,0,101},{6,10,336},{8,10,552},{9,10,285},{10,10,99},{139,
-10,568},{134,0,1370},{7,10,1406},{9,10,218},{141,10,222},{133,10,256},{135,0,
-1208},{14,11,213},{148,11,38},{6,0,1219},{135,11,1642},{13,0,417},{14,0,129},{
-143,0,15},{10,11,545},{140,11,301},{17,10,39},{148,10,36},{133,0,199},{4,11,904}
-,{133,11,794},{12,0,427},{146,0,38},{134,0,949},{8,0,665},{135,10,634},{132,10,
-618},{135,10,259},{132,10,339},{133,11,761},{141,10,169},{132,10,759},{5,0,688},
-{7,0,539},{135,0,712},{7,11,386},{138,11,713},{134,0,1186},{6,11,7},{6,11,35},{7
-,11,147},{7,11,1069},{7,11,1568},{7,11,1575},{7,11,1917},{8,11,43},{8,11,208},{9
-,11,128},{9,11,866},{10,11,20},{11,11,981},{147,11,33},{7,11,893},{8,10,482},{
-141,11,424},{6,0,312},{6,0,1715},{10,0,584},{11,0,546},{11,0,692},{12,0,259},{12
-,0,295},{13,0,46},{141,0,154},{5,10,336},{6,10,341},{6,10,478},{6,10,1763},{136,
-10,386},{137,0,151},{132,0,588},{152,0,4},{6,11,322},{9,11,552},{11,11,274},{13,
-11,209},{13,11,499},{14,11,85},{15,11,126},{145,11,70},{135,10,73},{4,0,231},{5,
-0,61},{6,0,104},{7,0,729},{7,0,964},{7,0,1658},{140,0,414},{6,0,263},{138,0,757}
-,{135,10,1971},{4,0,612},{133,0,561},{132,0,320},{135,10,1344},{8,11,83},{8,11,
-817},{9,11,28},{9,11,29},{9,11,885},{10,11,387},{11,11,633},{11,11,740},{13,11,
-235},{13,11,254},{15,11,143},{143,11,146},{5,10,396},{134,10,501},{140,11,49},{
-132,0,225},{4,10,929},{5,10,799},{8,10,46},{136,10,740},{4,0,405},{7,0,817},{14,
-0,58},{17,0,37},{146,0,124},{133,0,974},{4,11,412},{133,11,581},{4,10,892},{133,
-10,770},{4,0,996},{134,0,2026},{4,0,527},{5,0,235},{7,0,1239},{11,0,131},{140,0,
-370},{9,0,16},{13,0,386},{135,11,421},{7,0,956},{7,0,1157},{7,0,1506},{7,0,1606}
-,{7,0,1615},{7,0,1619},{7,0,1736},{7,0,1775},{8,0,590},{9,0,324},{9,0,736},{9,0,
-774},{9,0,776},{9,0,784},{10,0,567},{10,0,708},{11,0,518},{11,0,613},{11,0,695},
-{11,0,716},{11,0,739},{11,0,770},{11,0,771},{11,0,848},{11,0,857},{11,0,931},{11
-,0,947},{12,0,326},{12,0,387},{12,0,484},{12,0,528},{12,0,552},{12,0,613},{13,0,
-189},{13,0,256},{13,0,340},{13,0,432},{13,0,436},{13,0,440},{13,0,454},{14,0,174
-},{14,0,220},{14,0,284},{14,0,390},{145,0,121},{135,10,158},{9,0,137},{138,0,221
-},{4,11,110},{10,11,415},{10,11,597},{142,11,206},{141,11,496},{135,11,205},{151
-,10,25},{135,11,778},{7,11,1656},{7,10,2001},{9,11,369},{10,11,338},{10,11,490},
-{11,11,154},{11,11,545},{11,11,775},{13,11,77},{141,11,274},{4,11,444},{10,11,
-146},{140,11,9},{7,0,390},{138,0,140},{135,0,1144},{134,0,464},{7,10,1461},{140,
-10,91},{132,10,602},{4,11,283},{135,11,1194},{5,0,407},{11,0,204},{11,0,243},{11
-,0,489},{12,0,293},{19,0,37},{20,0,73},{150,0,38},{7,0,1218},{136,0,303},{5,0,
-325},{8,0,5},{8,0,227},{9,0,105},{10,0,585},{12,0,614},{4,10,13},{5,10,567},{7,
-10,1498},{9,10,124},{11,10,521},{140,10,405},{135,10,1006},{7,0,800},{10,0,12},{
-134,11,1720},{135,0,1783},{132,10,735},{138,10,812},{4,10,170},{135,10,323},{6,0
-,621},{13,0,504},{144,0,89},{5,10,304},{135,10,1403},{137,11,216},{6,0,920},{6,0
-,1104},{9,11,183},{139,11,286},{4,0,376},{133,10,742},{134,0,218},{8,0,641},{11,
-0,388},{140,0,580},{7,0,454},{7,0,782},{8,0,768},{140,0,686},{137,11,33},{133,10
-,111},{144,0,0},{10,0,676},{140,0,462},{6,0,164},{136,11,735},{133,10,444},{150,
-0,50},{7,11,1862},{12,11,491},{12,11,520},{13,11,383},{14,11,244},{146,11,12},{5
-,11,132},{9,11,486},{9,11,715},{10,11,458},{11,11,373},{11,11,668},{11,11,795},{
-11,11,897},{12,11,272},{12,11,424},{12,11,539},{12,11,558},{14,11,245},{14,11,
-263},{14,11,264},{14,11,393},{142,11,403},{8,10,123},{15,10,6},{144,10,7},{6,0,
-285},{8,0,654},{11,0,749},{12,0,190},{12,0,327},{13,0,120},{13,0,121},{13,0,327}
-,{15,0,47},{146,0,40},{5,11,8},{6,11,89},{6,11,400},{7,11,1569},{7,11,1623},{7,
-11,1850},{8,11,218},{8,11,422},{9,11,570},{138,11,626},{6,11,387},{7,11,882},{
-141,11,111},{6,0,343},{7,0,195},{9,0,226},{10,0,197},{10,0,575},{11,0,502},{11,0
-,899},{6,11,224},{7,11,877},{137,11,647},{5,10,937},{135,10,100},{135,11,790},{
-150,0,29},{147,0,8},{134,0,1812},{149,0,8},{135,11,394},{7,0,1125},{9,0,143},{11
-,0,61},{14,0,405},{150,0,21},{10,11,755},{147,11,29},{9,11,378},{141,11,162},{
-135,10,922},{5,10,619},{133,10,698},{134,0,1327},{6,0,1598},{137,0,575},{9,11,
-569},{12,11,12},{12,11,81},{12,11,319},{13,11,69},{14,11,259},{16,11,87},{17,11,
-1},{17,11,21},{17,11,24},{18,11,15},{18,11,56},{18,11,59},{18,11,127},{18,11,154
-},{19,11,19},{148,11,31},{6,0,895},{135,11,1231},{5,0,959},{7,11,124},{136,11,38
-},{5,11,261},{7,11,78},{7,11,199},{8,11,815},{9,11,126},{138,11,342},{5,10,917},
-{134,10,1659},{7,0,1759},{5,11,595},{135,11,1863},{136,0,173},{134,0,266},{142,0
-,261},{132,11,628},{5,10,251},{5,10,956},{8,10,268},{9,10,214},{146,10,142},{7,
-11,266},{136,11,804},{135,11,208},{6,11,79},{7,11,1021},{135,11,1519},{11,11,704
-},{141,11,396},{5,10,346},{5,10,711},{136,10,390},{136,11,741},{134,11,376},{134
-,0,1427},{6,0,1033},{6,0,1217},{136,0,300},{133,10,624},{6,11,100},{7,11,244},{7
-,11,632},{7,11,1609},{8,11,178},{8,11,638},{141,11,58},{6,0,584},{5,10,783},{7,
-10,1998},{135,10,2047},{5,0,427},{5,0,734},{7,0,478},{136,0,52},{7,0,239},{11,0,
-217},{142,0,165},{134,0,1129},{6,0,168},{6,0,1734},{7,0,20},{7,0,1056},{8,0,732}
-,{9,0,406},{9,0,911},{138,0,694},{132,10,594},{133,11,791},{7,11,686},{8,11,33},
-{8,11,238},{10,11,616},{11,11,467},{11,11,881},{13,11,217},{13,11,253},{142,11,
-268},{137,11,476},{134,0,418},{133,0,613},{132,0,632},{132,11,447},{7,0,32},{7,0
-,984},{8,0,85},{8,0,709},{9,0,579},{9,0,847},{9,0,856},{10,0,799},{11,0,258},{11
-,0,1007},{12,0,331},{12,0,615},{13,0,188},{13,0,435},{14,0,8},{15,0,165},{16,0,
-27},{20,0,40},{144,11,35},{4,11,128},{5,11,415},{6,11,462},{7,11,294},{7,11,578}
-,{10,11,710},{139,11,86},{5,0,694},{136,0,909},{7,0,1109},{11,0,7},{5,10,37},{6,
-10,39},{6,10,451},{7,10,218},{7,10,1166},{7,10,1687},{8,10,662},{144,10,2},{136,
-11,587},{6,11,427},{7,11,1018},{138,11,692},{4,11,195},{6,10,508},{135,11,802},{
-4,0,167},{135,0,82},{5,0,62},{6,0,24},{6,0,534},{7,0,74},{7,0,678},{7,0,684},{7,
-0,1043},{7,0,1072},{8,0,280},{8,0,541},{8,0,686},{9,0,258},{10,0,519},{11,0,252}
-,{140,0,282},{138,0,33},{4,0,359},{133,11,738},{7,0,980},{9,0,328},{13,0,186},{
-13,0,364},{7,10,635},{7,10,796},{8,10,331},{9,10,330},{9,10,865},{10,10,119},{10
-,10,235},{11,10,111},{11,10,129},{11,10,240},{12,10,31},{12,10,66},{12,10,222},{
-12,10,269},{12,10,599},{12,10,684},{12,10,689},{12,10,691},{142,10,345},{137,10,
-527},{6,0,596},{7,0,585},{135,10,702},{134,11,1683},{133,0,211},{6,0,145},{141,0
-,336},{134,0,1130},{7,0,873},{6,10,37},{7,10,1666},{8,10,195},{8,10,316},{9,10,
-178},{9,10,276},{9,10,339},{9,10,536},{10,10,102},{10,10,362},{10,10,785},{11,10
-,55},{11,10,149},{11,10,773},{13,10,416},{13,10,419},{14,10,38},{14,10,41},{142,
-10,210},{8,0,840},{136,0,841},{132,0,263},{5,11,3},{8,11,578},{9,11,118},{10,11,
-705},{12,11,383},{141,11,279},{132,0,916},{133,11,229},{133,10,645},{15,0,155},{
-16,0,79},{8,11,102},{10,11,578},{10,11,672},{12,11,496},{13,11,408},{14,11,121},
-{145,11,106},{4,0,599},{5,0,592},{6,0,1634},{7,0,5},{7,0,55},{7,0,67},{7,0,97},{
-7,0,691},{7,0,979},{7,0,1600},{7,0,1697},{8,0,207},{8,0,214},{8,0,231},{8,0,294}
-,{8,0,336},{8,0,428},{8,0,471},{8,0,622},{8,0,626},{8,0,679},{8,0,759},{8,0,829}
-,{9,0,11},{9,0,246},{9,0,484},{9,0,573},{9,0,706},{9,0,762},{9,0,798},{9,0,855},
-{9,0,870},{9,0,912},{10,0,303},{10,0,335},{10,0,424},{10,0,461},{10,0,543},{10,0
-,759},{10,0,814},{11,0,59},{11,0,199},{11,0,235},{11,0,590},{11,0,631},{11,0,929
-},{11,0,963},{11,0,987},{12,0,114},{12,0,182},{12,0,226},{12,0,332},{12,0,439},{
-12,0,575},{12,0,598},{12,0,675},{13,0,8},{13,0,125},{13,0,194},{13,0,287},{14,0,
-197},{14,0,383},{15,0,53},{17,0,63},{19,0,46},{19,0,98},{19,0,106},{148,0,85},{7
-,0,1356},{132,10,290},{6,10,70},{7,10,1292},{10,10,762},{139,10,288},{150,11,55}
-,{4,0,593},{8,11,115},{8,11,350},{9,11,489},{10,11,128},{11,11,306},{12,11,373},
-{14,11,30},{17,11,79},{147,11,80},{135,11,1235},{134,0,1392},{4,11,230},{133,11,
-702},{147,0,126},{7,10,131},{7,10,422},{8,10,210},{140,10,573},{134,0,1179},{139
-,11,435},{139,10,797},{134,11,1728},{4,0,162},{18,11,26},{19,11,42},{20,11,43},{
-21,11,0},{23,11,27},{152,11,14},{132,10,936},{6,0,765},{5,10,453},{134,10,441},{
-133,0,187},{135,0,1286},{6,0,635},{6,0,904},{6,0,1210},{134,0,1489},{4,0,215},{8
-,0,890},{9,0,38},{10,0,923},{11,0,23},{11,0,127},{139,0,796},{6,0,1165},{134,0,
-1306},{7,0,716},{13,0,97},{141,0,251},{132,10,653},{136,0,657},{146,10,80},{5,11
-,622},{7,11,1032},{11,11,26},{11,11,213},{11,11,707},{12,11,380},{13,11,226},{
-141,11,355},{6,0,299},{5,11,70},{6,11,334},{9,11,171},{11,11,637},{12,11,202},{
-14,11,222},{145,11,42},{142,0,134},{4,11,23},{5,11,313},{5,11,1014},{6,11,50},{6
-,11,51},{7,11,142},{7,11,384},{9,11,783},{139,11,741},{4,11,141},{7,11,559},{8,
-11,640},{9,11,460},{12,11,183},{141,11,488},{136,11,614},{7,10,1368},{8,10,232},
-{8,10,361},{10,10,682},{138,10,742},{137,10,534},{6,0,1082},{140,0,658},{137,10,
-27},{135,0,2002},{142,10,12},{4,0,28},{5,0,440},{7,0,248},{11,0,833},{140,0,344}
-,{7,10,736},{139,10,264},{134,10,1657},{134,0,1654},{138,0,531},{5,11,222},{9,11
-,140},{138,11,534},{6,0,634},{6,0,798},{134,0,840},{138,11,503},{135,10,127},{
-133,0,853},{5,11,154},{7,11,1491},{10,11,379},{138,11,485},{6,0,249},{7,0,1234},
-{139,0,573},{133,11,716},{7,11,1570},{140,11,542},{136,10,364},{138,0,527},{4,11
-,91},{5,11,388},{5,11,845},{6,11,206},{6,11,252},{6,11,365},{7,11,136},{7,11,531
-},{8,11,264},{136,11,621},{134,0,1419},{135,11,1441},{7,0,49},{7,0,392},{8,0,20}
-,{8,0,172},{8,0,690},{9,0,383},{9,0,845},{10,0,48},{11,0,293},{11,0,832},{11,0,
-920},{11,0,984},{141,0,221},{5,0,858},{133,0,992},{5,0,728},{137,10,792},{5,10,
-909},{9,10,849},{138,10,805},{7,0,525},{7,0,1579},{8,0,497},{136,0,573},{6,0,268
-},{137,0,62},{135,11,576},{134,0,1201},{5,11,771},{5,11,863},{5,11,898},{6,11,
-1632},{6,11,1644},{134,11,1780},{133,11,331},{7,0,193},{7,0,1105},{10,0,495},{7,
-10,397},{8,10,124},{8,10,619},{9,10,305},{11,10,40},{12,10,349},{13,10,134},{13,
-10,295},{14,10,155},{15,10,120},{146,10,105},{138,0,106},{6,0,859},{5,11,107},{7
-,11,201},{136,11,518},{6,11,446},{135,11,1817},{13,0,23},{4,10,262},{135,10,342}
-,{133,10,641},{137,11,851},{6,0,925},{137,0,813},{132,11,504},{6,0,613},{136,0,
-223},{4,10,99},{6,10,250},{6,10,346},{8,10,127},{138,10,81},{136,0,953},{132,10,
-915},{139,11,892},{5,10,75},{9,10,517},{10,10,470},{12,10,155},{141,10,224},{4,0
-,666},{7,0,1017},{7,11,996},{138,11,390},{5,11,883},{133,11,975},{14,10,83},{142
-,11,83},{4,0,670},{5,11,922},{134,11,1707},{135,0,216},{9,0,40},{11,0,136},{135,
-11,787},{5,10,954},{5,11,993},{7,11,515},{137,11,91},{139,0,259},{7,0,1114},{9,0
-,310},{9,0,682},{10,0,440},{13,0,40},{6,10,304},{8,10,418},{11,10,341},{139,10,
-675},{14,0,296},{9,10,410},{139,10,425},{10,11,377},{12,11,363},{13,11,68},{13,
-11,94},{14,11,108},{142,11,306},{7,0,1401},{135,0,1476},{4,0,296},{6,0,475},{7,0
-,401},{7,0,1410},{7,0,1594},{7,0,1674},{8,0,63},{8,0,660},{137,0,74},{4,0,139},{
-4,0,388},{140,0,188},{132,0,797},{132,11,766},{5,11,103},{7,11,921},{8,11,580},{
-8,11,593},{8,11,630},{138,11,28},{4,11,911},{5,11,867},{133,11,1013},{134,10,14}
-,{134,0,1572},{134,10,1708},{21,0,39},{5,10,113},{6,10,243},{7,10,1865},{11,10,
-161},{16,10,37},{145,10,99},{7,11,1563},{141,11,182},{5,11,135},{6,11,519},{7,11
-,1722},{10,11,271},{11,11,261},{145,11,54},{132,10,274},{134,0,1594},{4,11,300},
-{5,11,436},{135,11,484},{4,0,747},{6,0,290},{7,0,649},{7,0,1479},{135,0,1583},{
-133,11,535},{147,11,82},{133,0,232},{137,0,887},{135,10,166},{136,0,521},{4,0,14
-},{7,0,472},{7,0,1801},{10,0,748},{141,0,458},{134,0,741},{134,0,992},{16,0,111}
-,{137,10,304},{4,0,425},{5,11,387},{7,11,557},{12,11,547},{142,11,86},{135,11,
-1747},{5,10,654},{135,11,1489},{7,0,789},{4,11,6},{5,11,708},{136,11,75},{6,10,
-273},{10,10,188},{13,10,377},{146,10,77},{6,0,1593},{4,11,303},{7,11,619},{10,11
-,547},{10,11,687},{11,11,122},{140,11,601},{134,0,1768},{135,10,410},{138,11,772
-},{11,0,233},{139,10,524},{5,0,943},{134,0,1779},{134,10,1785},{136,11,529},{132
-,0,955},{5,0,245},{6,0,576},{7,0,582},{136,0,225},{132,10,780},{142,0,241},{134,
-0,1943},{4,11,106},{7,11,310},{7,11,1785},{10,11,690},{139,11,717},{134,0,1284},
-{5,11,890},{133,11,988},{6,11,626},{142,11,431},{10,11,706},{145,11,32},{137,11,
-332},{132,11,698},{135,0,709},{5,10,948},{138,11,17},{136,0,554},{134,0,1564},{
-139,10,941},{132,0,443},{134,0,909},{134,11,84},{142,0,280},{4,10,532},{5,10,706
-},{135,10,662},{132,0,729},{5,10,837},{6,10,1651},{139,10,985},{135,10,1861},{4,
-0,348},{152,11,3},{5,11,986},{6,11,130},{7,11,1582},{8,11,458},{10,11,101},{10,
-11,318},{138,11,823},{134,0,758},{4,0,298},{137,0,848},{4,10,330},{7,10,933},{7,
-10,2012},{136,10,292},{7,11,1644},{137,11,129},{6,0,1422},{9,0,829},{135,10,767}
-,{5,0,164},{7,0,121},{142,0,189},{7,0,812},{7,0,1261},{7,0,1360},{9,0,632},{140,
-0,352},{135,11,1788},{139,0,556},{135,11,997},{145,10,114},{4,0,172},{9,0,611},{
-10,0,436},{12,0,673},{13,0,255},{137,10,883},{11,0,530},{138,10,274},{133,0,844}
-,{134,0,984},{13,0,232},{18,0,35},{4,10,703},{135,10,207},{132,10,571},{9,0,263}
-,{10,0,147},{138,0,492},{7,11,1756},{137,11,98},{5,10,873},{5,10,960},{8,10,823}
-,{137,10,881},{133,0,537},{132,0,859},{7,11,1046},{139,11,160},{137,0,842},{139,
-10,283},{5,10,33},{6,10,470},{139,10,424},{6,11,45},{7,11,433},{8,11,129},{9,11,
-21},{10,11,392},{11,11,79},{12,11,499},{13,11,199},{141,11,451},{135,0,1291},{
-135,10,1882},{7,11,558},{136,11,353},{134,0,1482},{5,0,230},{5,0,392},{6,0,420},
-{9,0,568},{140,0,612},{6,0,262},{7,10,90},{7,10,664},{7,10,830},{7,10,1380},{7,
-10,2025},{8,11,81},{8,10,448},{8,10,828},{9,11,189},{9,11,201},{11,11,478},{11,
-11,712},{141,11,338},{142,0,31},{5,11,353},{151,11,26},{132,0,753},{4,0,0},{5,0,
-41},{7,0,1459},{7,0,1469},{7,0,1859},{9,0,549},{139,0,905},{9,10,417},{137,10,
-493},{135,11,1113},{133,0,696},{141,11,448},{134,10,295},{132,0,834},{4,0,771},{
-5,10,1019},{6,11,25},{7,11,855},{7,11,1258},{144,11,32},{134,0,1076},{133,0,921}
-,{133,0,674},{4,11,4},{7,11,1118},{7,11,1320},{7,11,1706},{8,11,277},{9,11,622},
-{10,11,9},{11,11,724},{12,11,350},{12,11,397},{13,11,28},{13,11,159},{15,11,89},
-{18,11,5},{19,11,9},{20,11,34},{150,11,47},{134,10,208},{6,0,444},{136,0,308},{6
-,0,180},{7,0,1137},{8,0,751},{139,0,805},{4,0,183},{7,0,271},{11,0,824},{11,0,
-952},{13,0,278},{13,0,339},{13,0,482},{14,0,424},{148,0,99},{7,11,317},{135,11,
-569},{4,0,19},{5,0,477},{5,0,596},{6,0,505},{7,0,1221},{11,0,907},{12,0,209},{
-141,0,214},{135,0,1215},{6,0,271},{7,0,398},{8,0,387},{10,0,344},{7,10,448},{7,
-10,1629},{7,10,1813},{8,10,442},{9,10,710},{10,10,282},{138,10,722},{11,10,844},
-{12,10,104},{140,10,625},{134,11,255},{133,10,787},{134,0,1645},{11,11,956},{151
-,11,3},{6,0,92},{6,0,188},{7,0,209},{7,0,1269},{7,0,1524},{7,0,1876},{8,0,661},{
-10,0,42},{10,0,228},{11,0,58},{11,0,1020},{12,0,58},{12,0,118},{141,0,32},{4,0,
-459},{133,0,966},{4,11,536},{7,11,1141},{10,11,723},{139,11,371},{140,0,330},{
-134,0,1557},{7,11,285},{135,11,876},{136,10,491},{135,11,560},{6,0,18},{7,0,179}
-,{7,0,932},{8,0,548},{8,0,757},{9,0,54},{9,0,65},{9,0,532},{9,0,844},{10,0,113},
-{10,0,117},{10,0,315},{10,0,560},{10,0,622},{10,0,798},{11,0,153},{11,0,351},{11
-,0,375},{12,0,78},{12,0,151},{12,0,392},{12,0,666},{14,0,248},{143,0,23},{6,0,
-1742},{132,11,690},{4,10,403},{5,10,441},{7,10,450},{10,10,840},{11,10,101},{12,
-10,193},{141,10,430},{133,0,965},{134,0,182},{10,0,65},{10,0,488},{138,0,497},{
-135,11,1346},{6,0,973},{6,0,1158},{10,11,200},{19,11,2},{151,11,22},{4,11,190},{
-133,11,554},{133,10,679},{7,0,328},{137,10,326},{133,11,1001},{9,0,588},{138,0,
-260},{133,11,446},{135,10,1128},{135,10,1796},{147,11,119},{134,0,1786},{6,0,
-1328},{6,0,1985},{8,0,962},{138,0,1017},{135,0,308},{11,0,508},{4,10,574},{7,10,
-350},{7,10,1024},{8,10,338},{9,10,677},{138,10,808},{138,11,752},{135,10,1081},{
-137,11,96},{7,10,1676},{135,10,2037},{136,0,588},{132,11,304},{133,0,614},{140,0
-,793},{136,0,287},{137,10,297},{141,10,37},{6,11,53},{6,11,199},{7,11,1408},{8,
-11,32},{8,11,93},{9,11,437},{10,11,397},{10,11,629},{11,11,593},{11,11,763},{13,
-11,326},{145,11,35},{134,11,105},{9,11,320},{10,11,506},{138,11,794},{5,11,114},
-{5,11,255},{141,11,285},{140,0,290},{7,11,2035},{8,11,19},{9,11,89},{138,11,831}
-,{134,0,1136},{7,0,719},{8,0,796},{8,0,809},{8,0,834},{6,10,306},{7,10,1140},{7,
-10,1340},{8,10,133},{138,10,449},{139,10,1011},{5,0,210},{6,0,213},{7,0,60},{10,
-0,364},{139,0,135},{5,0,607},{8,0,326},{136,0,490},{138,11,176},{132,0,701},{5,0
-,472},{7,0,380},{137,0,758},{135,0,1947},{6,0,1079},{138,0,278},{138,11,391},{5,
-10,329},{8,10,260},{139,11,156},{4,0,386},{7,0,41},{8,0,405},{8,0,728},{9,0,497}
-,{11,0,110},{11,0,360},{15,0,37},{144,0,84},{5,0,46},{7,0,1452},{7,0,1480},{8,0,
-634},{140,0,472},{136,0,961},{4,0,524},{136,0,810},{10,0,238},{141,0,33},{132,10
-,657},{152,10,7},{133,0,532},{5,0,997},{135,10,1665},{7,11,594},{7,11,851},{7,11
-,1858},{9,11,411},{9,11,574},{9,11,666},{9,11,737},{10,11,346},{10,11,712},{11,
-11,246},{11,11,432},{11,11,517},{11,11,647},{11,11,679},{11,11,727},{12,11,304},
-{12,11,305},{12,11,323},{12,11,483},{12,11,572},{12,11,593},{12,11,602},{13,11,
-95},{13,11,101},{13,11,171},{13,11,315},{13,11,378},{13,11,425},{13,11,475},{14,
-11,63},{14,11,380},{14,11,384},{15,11,133},{18,11,112},{148,11,72},{5,11,955},{
-136,11,814},{134,0,1301},{5,10,66},{7,10,1896},{136,10,288},{133,11,56},{134,10,
-1643},{6,0,1298},{148,11,100},{5,0,782},{5,0,829},{6,0,671},{6,0,1156},{6,0,1738
-},{137,11,621},{4,0,306},{5,0,570},{7,0,1347},{5,10,91},{5,10,648},{5,10,750},{5
-,10,781},{6,10,54},{6,10,112},{6,10,402},{6,10,1732},{7,10,315},{7,10,749},{7,10
-,1900},{9,10,78},{9,10,508},{10,10,611},{10,10,811},{11,10,510},{11,10,728},{13,
-10,36},{14,10,39},{16,10,83},{17,10,124},{148,10,30},{8,10,570},{9,11,477},{141,
-11,78},{4,11,639},{10,11,4},{10,10,322},{10,10,719},{11,10,407},{11,11,638},{12,
-11,177},{148,11,57},{7,0,1823},{139,0,693},{7,0,759},{5,11,758},{8,10,125},{8,10
-,369},{8,10,524},{10,10,486},{11,10,13},{11,10,381},{11,10,736},{11,10,766},{11,
-10,845},{13,10,114},{13,10,292},{142,10,47},{7,0,1932},{6,10,1684},{6,10,1731},{
-7,10,356},{8,10,54},{8,10,221},{9,10,225},{9,10,356},{10,10,77},{10,10,446},{10,
-10,731},{12,10,404},{141,10,491},{135,11,552},{135,11,1112},{4,0,78},{5,0,96},{5
-,0,182},{6,0,1257},{7,0,1724},{7,0,1825},{10,0,394},{10,0,471},{11,0,532},{14,0,
-340},{145,0,88},{139,11,328},{135,0,1964},{132,10,411},{4,10,80},{5,10,44},{137,
-11,133},{5,11,110},{6,11,169},{6,11,1702},{7,11,400},{8,11,538},{9,11,184},{9,11
-,524},{140,11,218},{4,0,521},{5,10,299},{7,10,1083},{140,11,554},{6,11,133},{9,
-11,353},{12,11,628},{146,11,79},{6,0,215},{7,0,584},{7,0,1028},{7,0,1473},{7,0,
-1721},{9,0,424},{138,0,779},{7,0,857},{7,0,1209},{7,10,1713},{9,10,537},{10,10,
-165},{12,10,219},{140,10,561},{4,10,219},{6,11,93},{7,11,1422},{7,10,1761},{7,11
-,1851},{8,11,673},{9,10,86},{9,11,529},{140,11,43},{137,11,371},{136,0,671},{5,0
-,328},{135,0,918},{132,0,529},{9,11,25},{10,11,467},{138,11,559},{4,11,335},{135
-,11,942},{134,0,716},{134,0,1509},{6,0,67},{7,0,258},{7,0,1630},{9,0,354},{9,0,
-675},{10,0,830},{14,0,80},{17,0,80},{140,10,428},{134,0,1112},{6,0,141},{7,0,225
-},{9,0,59},{9,0,607},{10,0,312},{11,0,687},{12,0,555},{13,0,373},{13,0,494},{148
-,0,58},{133,10,514},{8,11,39},{10,11,773},{11,11,84},{12,11,205},{142,11,1},{8,0
-,783},{5,11,601},{133,11,870},{136,11,594},{4,10,55},{5,10,301},{6,10,571},{14,
-10,49},{146,10,102},{132,11,181},{134,11,1652},{133,10,364},{4,11,97},{5,11,147}
-,{6,11,286},{7,11,1362},{141,11,176},{4,10,76},{7,10,1550},{9,10,306},{9,10,430}
-,{9,10,663},{10,10,683},{11,10,427},{11,10,753},{12,10,334},{12,10,442},{14,10,
-258},{14,10,366},{143,10,131},{137,10,52},{6,0,955},{134,0,1498},{6,11,375},{7,
-11,169},{7,11,254},{136,11,780},{7,0,430},{11,0,46},{14,0,343},{142,11,343},{135
-,0,1183},{5,0,602},{7,0,2018},{9,0,418},{9,0,803},{135,11,1447},{8,0,677},{135,
-11,1044},{139,11,285},{4,10,656},{135,10,779},{135,10,144},{5,11,629},{135,11,
-1549},{135,10,1373},{138,11,209},{7,10,554},{7,10,605},{141,10,10},{5,10,838},{5
-,10,841},{134,10,1649},{133,10,1012},{6,0,1357},{134,0,1380},{144,0,53},{6,0,590
-},{7,10,365},{7,10,1357},{7,10,1497},{8,10,154},{141,10,281},{133,10,340},{132,
-11,420},{135,0,329},{147,11,32},{4,0,469},{10,11,429},{139,10,495},{8,10,261},{9
-,10,144},{9,10,466},{10,10,370},{12,10,470},{13,10,144},{142,10,348},{142,0,460}
-,{4,11,325},{9,10,897},{138,11,125},{6,0,1743},{6,10,248},{9,10,546},{10,10,535}
-,{11,10,681},{141,10,135},{4,0,990},{5,0,929},{6,0,340},{8,0,376},{8,0,807},{8,0
-,963},{8,0,980},{138,0,1007},{134,0,1603},{140,0,250},{4,11,714},{133,11,469},{
-134,10,567},{136,10,445},{5,0,218},{7,0,1610},{8,0,646},{10,0,83},{11,11,138},{
-140,11,40},{7,0,1512},{135,0,1794},{135,11,1216},{11,0,0},{16,0,78},{132,11,718}
-,{133,0,571},{132,0,455},{134,0,1012},{5,11,124},{5,11,144},{6,11,548},{7,11,15}
-,{7,11,153},{137,11,629},{142,11,10},{6,11,75},{7,11,1531},{8,11,416},{9,11,240}
-,{9,11,275},{10,11,100},{11,11,658},{11,11,979},{12,11,86},{13,11,468},{14,11,66
-},{14,11,207},{15,11,20},{15,11,25},{144,11,58},{132,10,577},{5,11,141},{5,11,
-915},{6,11,1783},{7,11,211},{7,11,698},{7,11,1353},{9,11,83},{9,11,281},{10,11,
-376},{10,11,431},{11,11,543},{12,11,664},{13,11,280},{13,11,428},{14,11,61},{14,
-11,128},{17,11,52},{145,11,81},{6,0,161},{7,0,372},{137,0,597},{132,0,349},{10,
-11,702},{139,11,245},{134,0,524},{134,10,174},{6,0,432},{9,0,751},{139,0,322},{
-147,11,94},{4,11,338},{133,11,400},{5,0,468},{10,0,325},{11,0,856},{12,0,345},{
-143,0,104},{133,0,223},{132,0,566},{4,11,221},{5,11,659},{5,11,989},{7,11,697},{
-7,11,1211},{138,11,284},{135,11,1070},{4,0,59},{135,0,1394},{6,0,436},{11,0,481}
-,{5,10,878},{133,10,972},{4,0,48},{5,0,271},{135,0,953},{5,0,610},{136,0,457},{4
-,0,773},{5,0,618},{137,0,756},{133,0,755},{135,0,1217},{138,11,507},{132,10,351}
-,{132,0,197},{143,11,78},{4,11,188},{7,11,805},{11,11,276},{142,11,293},{5,11,
-884},{139,11,991},{132,10,286},{10,0,259},{10,0,428},{7,10,438},{7,10,627},{7,10
-,1516},{8,10,40},{9,10,56},{9,10,294},{11,10,969},{11,10,995},{146,10,148},{4,0,
-356},{5,0,217},{5,0,492},{5,0,656},{8,0,544},{136,11,544},{5,0,259},{6,0,1230},{
-7,0,414},{7,0,854},{142,0,107},{132,0,1007},{15,0,14},{144,0,5},{6,0,1580},{132,
-10,738},{132,11,596},{132,0,673},{133,10,866},{6,0,1843},{135,11,1847},{4,0,165}
-,{7,0,1398},{135,0,1829},{135,11,1634},{147,11,65},{6,0,885},{6,0,1009},{137,0,
-809},{133,10,116},{132,10,457},{136,11,770},{9,0,498},{12,0,181},{10,11,361},{
-142,11,316},{134,11,595},{5,0,9},{7,0,297},{7,0,966},{140,0,306},{4,11,89},{5,11
-,489},{6,11,315},{7,11,553},{7,11,1745},{138,11,243},{134,0,1487},{132,0,437},{5
-,0,146},{6,0,411},{138,0,721},{5,10,527},{6,10,189},{135,10,859},{11,10,104},{11
-,10,554},{15,10,60},{143,10,125},{6,11,1658},{9,11,3},{10,11,154},{11,11,641},{
-13,11,85},{13,11,201},{141,11,346},{6,0,177},{135,0,467},{134,0,1377},{134,10,
-116},{136,11,645},{4,11,166},{5,11,505},{6,11,1670},{137,11,110},{133,10,487},{4
-,10,86},{5,10,667},{5,10,753},{6,10,316},{6,10,455},{135,10,946},{133,0,200},{
-132,0,959},{6,0,1928},{134,0,1957},{139,11,203},{150,10,45},{4,10,79},{7,10,1773
-},{10,10,450},{11,10,589},{13,10,332},{13,10,493},{14,10,183},{14,10,334},{14,10
-,362},{14,10,368},{14,10,376},{14,10,379},{19,10,90},{19,10,103},{19,10,127},{
-148,10,90},{6,0,1435},{135,11,1275},{134,0,481},{7,11,445},{8,11,307},{8,11,704}
-,{10,11,41},{10,11,439},{11,11,237},{11,11,622},{140,11,201},{135,11,869},{4,0,
-84},{7,0,1482},{10,0,76},{138,0,142},{11,11,277},{144,11,14},{135,11,1977},{4,11
-,189},{5,11,713},{136,11,57},{133,0,1015},{138,11,371},{4,0,315},{5,0,507},{135,
-0,1370},{4,11,552},{142,10,381},{9,0,759},{16,0,31},{16,0,39},{16,0,75},{18,0,24
-},{20,0,42},{152,0,1},{134,0,712},{134,0,1722},{133,10,663},{133,10,846},{8,0,
-222},{8,0,476},{9,0,238},{11,0,516},{11,0,575},{15,0,109},{146,0,100},{7,0,1402}
-,{7,0,1414},{12,0,456},{5,10,378},{8,10,465},{9,10,286},{10,10,185},{10,10,562},
-{10,10,635},{11,10,31},{11,10,393},{13,10,312},{18,10,65},{18,10,96},{147,10,89}
-,{4,0,986},{6,0,1958},{6,0,2032},{8,0,934},{138,0,985},{7,10,1880},{9,10,680},{
-139,10,798},{134,10,1770},{145,11,49},{132,11,614},{132,10,648},{5,10,945},{6,10
-,1656},{6,10,1787},{7,10,167},{8,10,824},{9,10,391},{10,10,375},{139,10,185},{
-138,11,661},{7,0,1273},{135,11,1945},{7,0,706},{7,0,1058},{138,0,538},{7,10,1645
-},{8,10,352},{137,10,249},{132,10,152},{11,0,92},{11,0,196},{11,0,409},{11,0,450
-},{11,0,666},{11,0,777},{12,0,262},{13,0,385},{13,0,393},{15,0,115},{16,0,45},{
-145,0,82},{133,10,1006},{6,0,40},{135,0,1781},{9,11,614},{139,11,327},{5,10,420}
-,{135,10,1449},{135,0,431},{10,0,97},{135,10,832},{6,0,423},{7,0,665},{135,0,
-1210},{7,0,237},{8,0,664},{9,0,42},{9,0,266},{9,0,380},{9,0,645},{10,0,177},{138
-,0,276},{7,0,264},{133,10,351},{8,0,213},{5,10,40},{7,10,598},{7,10,1638},{9,10,
-166},{9,10,640},{9,10,685},{9,10,773},{11,10,215},{13,10,65},{14,10,172},{14,10,
-317},{145,10,6},{5,11,84},{134,11,163},{8,10,60},{9,10,343},{139,10,769},{137,0,
-455},{133,11,410},{8,0,906},{12,0,700},{12,0,706},{140,0,729},{21,11,33},{150,11
-,40},{7,10,1951},{8,10,765},{8,10,772},{140,10,671},{7,10,108},{8,10,219},{8,10,
-388},{9,10,639},{9,10,775},{11,10,275},{140,10,464},{5,11,322},{7,11,1941},{8,11
-,186},{9,11,262},{10,11,187},{14,11,208},{146,11,130},{139,0,624},{8,0,574},{5,
-11,227},{140,11,29},{7,11,1546},{11,11,299},{142,11,407},{5,10,15},{6,10,56},{7,
-10,1758},{8,10,500},{9,10,730},{11,10,331},{13,10,150},{142,10,282},{7,11,1395},
-{8,11,486},{9,11,236},{9,11,878},{10,11,218},{11,11,95},{19,11,17},{147,11,31},{
-135,11,2043},{4,0,354},{146,11,4},{140,11,80},{135,0,1558},{134,10,1886},{5,10,
-205},{6,10,438},{137,10,711},{133,11,522},{133,10,534},{7,0,235},{7,0,1475},{15,
-0,68},{146,0,120},{137,10,691},{4,0,942},{6,0,1813},{8,0,917},{10,0,884},{12,0,
-696},{12,0,717},{12,0,723},{12,0,738},{12,0,749},{12,0,780},{16,0,97},{146,0,169
-},{6,10,443},{8,11,562},{9,10,237},{9,10,571},{9,10,695},{10,10,139},{11,10,715}
-,{12,10,417},{141,10,421},{135,0,957},{133,0,830},{134,11,1771},{146,0,23},{5,0,
-496},{6,0,694},{7,0,203},{7,11,1190},{137,11,620},{137,11,132},{6,0,547},{134,0,
-1549},{8,11,258},{9,11,208},{137,11,359},{4,0,864},{5,0,88},{137,0,239},{135,11,
-493},{4,11,317},{135,11,1279},{132,11,477},{4,10,578},{5,11,63},{133,11,509},{7,
-0,650},{135,0,1310},{7,0,1076},{9,0,80},{11,0,78},{11,0,421},{11,0,534},{140,0,
-545},{132,11,288},{12,0,553},{14,0,118},{133,10,923},{7,0,274},{11,0,479},{139,0
-,507},{8,11,89},{8,11,620},{9,11,49},{10,11,774},{11,11,628},{12,11,322},{143,11
-,124},{4,0,497},{135,0,1584},{7,0,261},{7,0,1115},{7,0,1354},{7,0,1404},{7,0,
-1588},{7,0,1705},{7,0,1902},{9,0,465},{10,0,248},{10,0,349},{10,0,647},{11,0,527
-},{11,0,660},{11,0,669},{12,0,529},{13,0,305},{132,10,924},{133,10,665},{136,0,
-13},{6,0,791},{138,11,120},{7,0,642},{8,0,250},{11,0,123},{11,0,137},{13,0,48},{
-142,0,95},{4,10,265},{7,10,807},{135,10,950},{5,10,93},{140,10,267},{135,0,1429}
-,{4,0,949},{10,0,885},{10,0,891},{10,0,900},{10,0,939},{12,0,760},{142,0,449},{
-139,11,366},{132,0,818},{134,11,85},{135,10,994},{7,0,330},{5,10,233},{5,10,320}
-,{6,10,140},{136,10,295},{4,0,1004},{8,0,982},{136,0,993},{133,10,978},{4,10,905
-},{6,10,1701},{137,10,843},{10,0,545},{140,0,301},{6,0,947},{134,0,1062},{134,0,
-1188},{4,0,904},{5,0,794},{152,10,6},{134,0,1372},{135,11,608},{5,11,279},{6,11,
-235},{7,11,468},{8,11,446},{9,11,637},{10,11,717},{11,11,738},{140,11,514},{132,
-10,509},{5,11,17},{6,11,371},{137,11,528},{132,0,693},{4,11,115},{5,11,669},{6,
-11,407},{8,11,311},{11,11,10},{141,11,5},{11,0,377},{7,10,273},{137,11,381},{135
-,0,695},{7,0,386},{138,0,713},{135,10,1041},{134,0,1291},{6,0,7},{6,0,35},{7,0,
-147},{7,0,1069},{7,0,1568},{7,0,1575},{7,0,1917},{8,0,43},{8,0,208},{9,0,128},{9
-,0,866},{10,0,20},{11,0,981},{147,0,33},{7,0,893},{141,0,424},{139,10,234},{150,
-11,56},{5,11,779},{5,11,807},{6,11,1655},{134,11,1676},{5,10,802},{7,10,2021},{
-136,10,805},{4,11,196},{5,10,167},{5,11,558},{5,10,899},{5,11,949},{6,10,410},{
-137,10,777},{137,10,789},{134,10,1705},{8,0,904},{140,0,787},{6,0,322},{9,0,552}
-,{11,0,274},{13,0,209},{13,0,499},{14,0,85},{15,0,126},{145,0,70},{135,10,10},{5
-,10,11},{6,10,117},{6,10,485},{7,10,1133},{9,10,582},{9,10,594},{11,10,21},{11,
-10,818},{12,10,535},{141,10,86},{4,10,264},{7,10,1067},{8,10,204},{8,10,385},{
-139,10,953},{132,11,752},{138,10,56},{133,10,470},{6,0,1808},{8,0,83},{8,0,742},
-{8,0,817},{9,0,28},{9,0,29},{9,0,885},{10,0,387},{11,0,633},{11,0,740},{13,0,235
-},{13,0,254},{15,0,143},{143,0,146},{140,0,49},{134,0,1832},{4,11,227},{5,11,159
-},{5,11,409},{7,11,80},{10,11,294},{10,11,479},{12,11,418},{14,11,50},{14,11,249
-},{142,11,295},{7,11,1470},{8,11,66},{8,11,137},{8,11,761},{9,11,638},{11,11,80}
-,{11,11,212},{11,11,368},{11,11,418},{12,11,8},{13,11,15},{16,11,61},{17,11,59},
-{19,11,28},{148,11,84},{139,10,1015},{138,11,468},{135,0,421},{6,0,415},{7,0,
-1049},{137,0,442},{6,11,38},{7,11,1220},{8,11,185},{8,11,256},{9,11,22},{9,11,
-331},{10,11,738},{11,11,205},{11,11,540},{11,11,746},{13,11,399},{13,11,465},{14
-,11,88},{142,11,194},{139,0,289},{133,10,715},{4,0,110},{10,0,415},{10,0,597},{
-142,0,206},{4,11,159},{6,11,115},{7,11,252},{7,11,257},{7,11,1928},{8,11,69},{9,
-11,384},{10,11,91},{10,11,615},{12,11,375},{14,11,235},{18,11,117},{147,11,123},
-{5,11,911},{136,11,278},{7,0,205},{7,0,2000},{8,10,794},{9,10,400},{10,10,298},{
-142,10,228},{135,11,1774},{4,11,151},{7,11,1567},{8,11,351},{137,11,322},{136,10
-,724},{133,11,990},{7,0,1539},{11,0,512},{13,0,205},{19,0,30},{22,0,36},{23,0,19
-},{135,11,1539},{5,11,194},{7,11,1662},{9,11,90},{140,11,180},{6,10,190},{7,10,
-768},{135,10,1170},{134,0,1340},{4,0,283},{135,0,1194},{133,11,425},{133,11,971}
-,{12,0,549},{14,10,67},{147,10,60},{135,10,1023},{134,0,1720},{138,11,587},{5,11
-,72},{6,11,264},{7,11,21},{7,11,46},{7,11,2013},{8,11,215},{8,11,513},{10,11,266
-},{139,11,22},{5,0,319},{135,0,534},{6,10,137},{9,10,75},{9,10,253},{10,10,194},
-{138,10,444},{7,0,1180},{20,0,112},{6,11,239},{7,11,118},{10,11,95},{11,11,603},
-{13,11,443},{14,11,160},{143,11,4},{134,11,431},{5,11,874},{6,11,1677},{11,10,
-643},{12,10,115},{143,11,0},{134,0,967},{6,11,65},{7,11,939},{7,11,1172},{7,11,
-1671},{9,11,540},{10,11,696},{11,11,265},{11,11,732},{11,11,928},{11,11,937},{12
-,11,399},{13,11,438},{149,11,19},{137,11,200},{135,0,1940},{5,10,760},{7,10,542}
-,{8,10,135},{136,10,496},{140,11,44},{7,11,1655},{136,11,305},{7,10,319},{7,10,
-355},{7,10,763},{10,10,389},{145,10,43},{136,0,735},{138,10,786},{137,11,19},{
-132,11,696},{5,0,132},{9,0,486},{9,0,715},{10,0,458},{11,0,373},{11,0,668},{11,0
-,795},{11,0,897},{12,0,272},{12,0,424},{12,0,539},{12,0,558},{14,0,245},{14,0,
-263},{14,0,264},{14,0,393},{142,0,403},{10,0,38},{139,0,784},{132,0,838},{4,11,
-302},{135,11,1766},{133,0,379},{5,0,8},{6,0,89},{6,0,400},{7,0,1569},{7,0,1623},
-{7,0,1850},{8,0,218},{8,0,422},{9,0,570},{10,0,626},{4,11,726},{133,11,630},{4,0
-,1017},{138,0,660},{6,0,387},{7,0,882},{141,0,111},{6,0,224},{7,0,877},{137,0,
-647},{4,10,58},{5,10,286},{6,10,319},{7,10,402},{7,10,1254},{7,10,1903},{8,10,
-356},{140,10,408},{135,0,790},{9,0,510},{10,0,53},{4,10,389},{9,10,181},{10,10,
-29},{10,10,816},{11,10,311},{11,10,561},{12,10,67},{141,10,181},{142,0,458},{6,
-11,118},{7,11,215},{7,11,1521},{140,11,11},{134,0,954},{135,0,394},{134,0,1367},
-{5,11,225},{133,10,373},{132,0,882},{7,0,1409},{135,10,1972},{135,10,1793},{4,11
-,370},{5,11,756},{135,11,1326},{150,11,13},{7,11,354},{10,11,410},{139,11,815},{
-6,11,1662},{7,11,48},{8,11,771},{10,11,116},{13,11,104},{14,11,105},{14,11,184},
-{15,11,168},{19,11,92},{148,11,68},{7,0,124},{136,0,38},{5,0,261},{7,0,78},{7,0,
-199},{8,0,815},{9,0,126},{10,0,342},{140,0,647},{4,0,628},{140,0,724},{7,0,266},
-{8,0,804},{7,10,1651},{145,10,89},{135,0,208},{134,0,1178},{6,0,79},{135,0,1519}
-,{132,10,672},{133,10,737},{136,0,741},{132,11,120},{4,0,710},{6,0,376},{134,0,
-606},{134,0,1347},{134,0,1494},{6,0,850},{6,0,1553},{137,0,821},{5,10,145},{134,
-11,593},{7,0,1311},{140,0,135},{4,0,467},{5,0,405},{134,0,544},{5,11,820},{135,
-11,931},{6,0,100},{7,0,244},{7,0,632},{7,0,1609},{8,0,178},{8,0,638},{141,0,58},
-{4,10,387},{135,10,1288},{6,11,151},{6,11,1675},{7,11,383},{151,11,10},{132,0,
-481},{135,10,550},{134,0,1378},{6,11,1624},{11,11,11},{12,11,422},{13,11,262},{
-142,11,360},{133,0,791},{4,11,43},{5,11,344},{133,11,357},{7,0,1227},{140,0,978}
-,{7,0,686},{8,0,33},{8,0,238},{10,0,616},{11,0,467},{11,0,881},{13,0,217},{13,0,
-253},{142,0,268},{137,0,857},{8,0,467},{8,0,1006},{7,11,148},{8,11,284},{141,11,
-63},{4,10,576},{135,10,1263},{133,11,888},{5,10,919},{134,10,1673},{20,10,37},{
-148,11,37},{132,0,447},{132,11,711},{4,0,128},{5,0,415},{6,0,462},{7,0,294},{7,0
-,578},{10,0,710},{139,0,86},{4,10,82},{5,10,333},{5,10,904},{6,10,207},{7,10,325
-},{7,10,1726},{8,10,101},{10,10,778},{139,10,220},{136,0,587},{137,11,440},{133,
-10,903},{6,0,427},{7,0,1018},{138,0,692},{4,0,195},{135,0,802},{140,10,147},{134
-,0,1546},{134,0,684},{132,10,705},{136,0,345},{11,11,678},{140,11,307},{133,0,
-365},{134,0,1683},{4,11,65},{5,11,479},{5,11,1004},{7,11,1913},{8,11,317},{9,11,
-302},{10,11,612},{141,11,22},{138,0,472},{4,11,261},{135,11,510},{134,10,90},{
-142,0,433},{151,0,28},{4,11,291},{7,11,101},{9,11,515},{12,11,152},{12,11,443},{
-13,11,392},{142,11,357},{140,0,997},{5,0,3},{8,0,578},{9,0,118},{10,0,705},{141,
-0,279},{135,11,1266},{7,10,813},{12,10,497},{141,10,56},{133,0,229},{6,10,125},{
-135,10,1277},{8,0,102},{10,0,578},{10,0,672},{12,0,496},{13,0,408},{14,0,121},{
-17,0,106},{151,10,12},{6,0,866},{134,0,1080},{136,0,1022},{4,11,130},{135,11,843
-},{5,11,42},{5,11,879},{7,11,245},{7,11,324},{7,11,1532},{11,11,463},{11,11,472}
-,{13,11,363},{144,11,52},{150,0,55},{8,0,115},{8,0,350},{9,0,489},{10,0,128},{11
-,0,306},{12,0,373},{14,0,30},{17,0,79},{19,0,80},{4,11,134},{133,11,372},{134,0,
-657},{134,0,933},{135,11,1147},{4,0,230},{133,0,702},{134,0,1728},{4,0,484},{18,
-0,26},{19,0,42},{20,0,43},{21,0,0},{23,0,27},{152,0,14},{7,0,185},{135,0,703},{6
-,0,417},{10,0,618},{7,10,1106},{9,10,770},{11,10,112},{140,10,413},{134,0,803},{
-132,11,644},{134,0,1262},{7,11,540},{12,10,271},{145,10,109},{135,11,123},{132,0
-,633},{134,11,623},{4,11,908},{5,11,359},{5,11,508},{6,11,1723},{7,11,343},{7,11
-,1996},{135,11,2026},{135,0,479},{10,0,262},{7,10,304},{9,10,646},{9,10,862},{11
-,10,696},{12,10,208},{15,10,79},{147,10,108},{4,11,341},{135,11,480},{134,0,830}
-,{5,0,70},{5,0,622},{6,0,334},{7,0,1032},{9,0,171},{11,0,26},{11,0,213},{11,0,
-637},{11,0,707},{12,0,202},{12,0,380},{13,0,226},{13,0,355},{14,0,222},{145,0,42
-},{135,10,981},{143,0,217},{137,11,114},{4,0,23},{4,0,141},{5,0,313},{5,0,1014},
-{6,0,50},{6,0,51},{7,0,142},{7,0,384},{7,0,559},{8,0,640},{9,0,460},{9,0,783},{
-11,0,741},{12,0,183},{141,0,488},{141,0,360},{7,0,1586},{7,11,1995},{8,11,299},{
-11,11,890},{140,11,674},{132,10,434},{7,0,652},{134,10,550},{7,0,766},{5,10,553}
-,{138,10,824},{7,0,737},{8,0,298},{136,10,452},{4,11,238},{5,11,503},{6,11,179},
-{7,11,2003},{8,11,381},{8,11,473},{9,11,149},{10,11,183},{15,11,45},{143,11,86},
-{133,10,292},{5,0,222},{9,0,655},{138,0,534},{138,10,135},{4,11,121},{5,11,156},
-{5,11,349},{9,11,136},{10,11,605},{14,11,342},{147,11,107},{137,0,906},{6,0,1013
-},{134,0,1250},{6,0,1956},{6,0,2009},{8,0,991},{144,0,120},{135,11,1192},{138,0,
-503},{5,0,154},{7,0,1491},{10,0,379},{138,0,485},{6,0,1867},{6,0,1914},{6,0,1925
-},{9,0,917},{9,0,925},{9,0,932},{9,0,951},{9,0,1007},{9,0,1013},{12,0,806},{12,0
-,810},{12,0,814},{12,0,816},{12,0,824},{12,0,832},{12,0,837},{12,0,863},{12,0,
-868},{12,0,870},{12,0,889},{12,0,892},{12,0,900},{12,0,902},{12,0,908},{12,0,933
-},{12,0,942},{12,0,949},{12,0,954},{15,0,175},{15,0,203},{15,0,213},{15,0,218},{
-15,0,225},{15,0,231},{15,0,239},{15,0,248},{15,0,252},{18,0,190},{18,0,204},{18,
-0,215},{18,0,216},{18,0,222},{18,0,225},{18,0,230},{18,0,239},{18,0,241},{21,0,
-42},{21,0,43},{21,0,44},{21,0,45},{21,0,46},{21,0,53},{24,0,27},{152,0,31},{133,
-0,716},{135,0,844},{4,0,91},{5,0,388},{5,0,845},{6,0,206},{6,0,252},{6,0,365},{7
-,0,136},{7,0,531},{136,0,621},{7,10,393},{10,10,603},{139,10,206},{6,11,80},{6,
-11,1694},{7,11,173},{7,11,1974},{9,11,547},{10,11,730},{14,11,18},{150,11,39},{
-137,0,748},{4,11,923},{134,11,1711},{4,10,912},{137,10,232},{7,10,98},{7,10,1973
-},{136,10,716},{14,0,103},{133,10,733},{132,11,595},{12,0,158},{18,0,8},{19,0,62
-},{20,0,6},{22,0,4},{23,0,2},{23,0,9},{5,11,240},{6,11,459},{7,11,12},{7,11,114}
-,{7,11,502},{7,11,1751},{7,11,1753},{7,11,1805},{8,11,658},{9,11,1},{11,11,959},
-{13,11,446},{142,11,211},{135,0,576},{5,0,771},{5,0,863},{5,0,898},{6,0,648},{6,
-0,1632},{6,0,1644},{134,0,1780},{133,0,331},{7,11,633},{7,11,905},{7,11,909},{7,
-11,1538},{9,11,767},{140,11,636},{140,0,632},{5,0,107},{7,0,201},{136,0,518},{6,
-0,446},{7,0,1817},{134,11,490},{9,0,851},{141,0,510},{7,11,250},{8,11,506},{136,
-11,507},{4,0,504},{137,10,72},{132,11,158},{4,11,140},{7,11,362},{8,11,209},{9,
-11,10},{9,11,160},{9,11,503},{10,11,689},{11,11,350},{11,11,553},{11,11,725},{12
-,11,252},{12,11,583},{13,11,192},{13,11,352},{14,11,269},{14,11,356},{148,11,50}
-,{6,11,597},{135,11,1318},{135,10,1454},{5,0,883},{5,0,975},{8,0,392},{148,0,7},
-{6,11,228},{7,11,1341},{9,11,408},{138,11,343},{11,11,348},{11,10,600},{12,11,99
-},{13,10,245},{18,11,1},{18,11,11},{147,11,4},{134,11,296},{5,0,922},{134,0,1707
-},{132,11,557},{4,11,548},{7,10,164},{7,10,1571},{9,10,107},{140,10,225},{7,11,
-197},{8,11,142},{8,11,325},{9,11,150},{9,11,596},{10,11,350},{10,11,353},{11,11,
-74},{11,11,315},{14,11,423},{143,11,141},{5,0,993},{7,0,515},{137,0,91},{4,0,131
-},{8,0,200},{5,10,484},{5,10,510},{6,10,434},{7,10,1000},{7,10,1098},{136,10,2},
-{152,0,10},{4,11,62},{5,11,83},{6,11,399},{6,11,579},{7,11,692},{7,11,846},{7,11
-,1015},{7,11,1799},{8,11,403},{9,11,394},{10,11,133},{12,11,4},{12,11,297},{12,
-11,452},{16,11,81},{18,11,19},{18,11,25},{21,11,14},{22,11,12},{151,11,18},{140,
-11,459},{132,11,177},{7,0,1433},{9,0,365},{137,11,365},{132,10,460},{5,0,103},{6
-,0,2004},{7,0,921},{8,0,580},{8,0,593},{8,0,630},{10,0,28},{5,11,411},{135,11,
-653},{4,10,932},{133,10,891},{4,0,911},{5,0,867},{5,0,1013},{7,0,2034},{8,0,798}
-,{136,0,813},{7,11,439},{10,11,727},{11,11,260},{139,11,684},{136,10,625},{5,11,
-208},{7,11,753},{135,11,1528},{5,0,461},{7,0,1925},{12,0,39},{13,0,265},{13,0,
-439},{134,10,76},{6,0,853},{8,10,92},{137,10,221},{5,0,135},{6,0,519},{7,0,1722}
-,{10,0,271},{11,0,261},{145,0,54},{139,11,814},{14,0,338},{148,0,81},{4,0,300},{
-133,0,436},{5,0,419},{5,0,687},{7,0,864},{9,0,470},{135,11,864},{9,0,836},{133,
-11,242},{134,0,1937},{4,10,763},{133,11,953},{132,10,622},{132,0,393},{133,10,
-253},{8,0,357},{10,0,745},{14,0,426},{17,0,94},{19,0,57},{135,10,546},{5,11,615}
-,{146,11,37},{9,10,73},{10,10,110},{14,10,185},{145,10,119},{11,0,703},{7,10,624
-},{7,10,916},{10,10,256},{139,10,87},{133,11,290},{5,10,212},{12,10,35},{141,10,
-382},{132,11,380},{5,11,52},{7,11,277},{9,11,368},{139,11,791},{133,0,387},{10,
-11,138},{139,11,476},{4,0,6},{5,0,708},{136,0,75},{7,0,1351},{9,0,581},{10,0,639
-},{11,0,453},{140,0,584},{132,0,303},{138,0,772},{135,10,1175},{4,0,749},{5,10,
-816},{6,11,256},{7,11,307},{7,11,999},{7,11,1481},{7,11,1732},{7,11,1738},{8,11,
-265},{9,11,414},{11,11,316},{12,11,52},{13,11,420},{147,11,100},{135,11,1296},{6
-,0,1065},{5,10,869},{5,10,968},{6,10,1626},{8,10,734},{136,10,784},{4,10,542},{6
-,10,1716},{6,10,1727},{7,10,1082},{7,10,1545},{8,10,56},{8,10,118},{8,10,412},{8
-,10,564},{9,10,888},{9,10,908},{10,10,50},{10,10,423},{11,10,685},{11,10,697},{
-11,10,933},{12,10,299},{13,10,126},{13,10,136},{13,10,170},{141,10,190},{134,0,
-226},{4,0,106},{7,0,310},{11,0,717},{133,11,723},{5,0,890},{5,0,988},{4,10,232},
-{9,10,202},{10,10,474},{140,10,433},{6,0,626},{142,0,431},{10,0,706},{150,0,44},
-{13,0,51},{6,10,108},{7,10,1003},{7,10,1181},{8,10,111},{136,10,343},{132,0,698}
-,{5,11,109},{6,11,1784},{7,11,1895},{12,11,296},{140,11,302},{134,0,828},{134,10
-,1712},{138,0,17},{7,0,1929},{4,10,133},{5,11,216},{7,10,711},{7,10,1298},{7,10,
-1585},{7,11,1879},{9,11,141},{9,11,270},{9,11,679},{10,11,159},{10,11,553},{11,
-11,197},{11,11,438},{12,11,538},{12,11,559},{13,11,193},{13,11,423},{14,11,144},
-{14,11,166},{14,11,167},{15,11,67},{147,11,84},{141,11,127},{7,11,1872},{137,11,
-81},{6,10,99},{7,10,1808},{145,10,57},{134,11,391},{5,0,689},{6,0,84},{7,0,1250}
-,{6,10,574},{7,10,428},{10,10,669},{11,10,485},{11,10,840},{12,10,300},{142,10,
-250},{7,11,322},{136,11,249},{7,11,432},{135,11,1649},{135,10,1871},{137,10,252}
-,{6,11,155},{140,11,234},{7,0,871},{19,0,27},{147,11,27},{140,0,498},{5,0,986},{
-6,0,130},{138,0,823},{6,0,1793},{7,0,1582},{8,0,458},{10,0,101},{10,0,318},{10,0
-,945},{12,0,734},{16,0,104},{18,0,177},{6,10,323},{135,10,1564},{5,11,632},{138,
-11,526},{10,0,435},{7,10,461},{136,10,775},{6,11,144},{7,11,948},{7,11,1042},{7,
-11,1857},{8,11,235},{8,11,461},{9,11,453},{9,11,530},{10,11,354},{17,11,77},{19,
-11,99},{148,11,79},{138,0,966},{7,0,1644},{137,0,129},{135,0,997},{136,0,502},{5
-,11,196},{6,11,486},{7,11,212},{8,11,309},{136,11,346},{7,10,727},{146,10,73},{
-132,0,823},{132,11,686},{135,0,1927},{4,0,762},{7,0,1756},{137,0,98},{136,10,577
-},{24,0,8},{4,11,30},{5,11,43},{152,11,8},{7,0,1046},{139,0,160},{7,0,492},{4,10
-,413},{5,10,677},{7,11,492},{8,10,432},{140,10,280},{6,0,45},{7,0,433},{8,0,129}
-,{9,0,21},{10,0,392},{11,0,79},{12,0,499},{13,0,199},{141,0,451},{7,0,558},{136,
-0,353},{4,11,220},{7,11,1535},{9,11,93},{139,11,474},{7,10,646},{7,10,1730},{11,
-10,446},{141,10,178},{133,0,785},{134,0,1145},{8,0,81},{9,0,189},{9,0,201},{11,0
-,478},{11,0,712},{141,0,338},{5,0,353},{151,0,26},{11,0,762},{132,10,395},{134,0
-,2024},{4,0,611},{133,0,606},{9,10,174},{10,10,164},{11,10,440},{11,10,841},{143
-,10,98},{134,10,426},{10,10,608},{139,10,1002},{138,10,250},{6,0,25},{7,0,855},{
-7,0,1258},{144,0,32},{7,11,1725},{138,11,393},{5,11,263},{134,11,414},{6,0,2011}
-,{133,10,476},{4,0,4},{7,0,1118},{7,0,1320},{7,0,1706},{8,0,277},{9,0,622},{10,0
-,9},{11,0,724},{12,0,350},{12,0,397},{13,0,28},{13,0,159},{15,0,89},{18,0,5},{19
-,0,9},{20,0,34},{22,0,47},{6,11,178},{6,11,1750},{8,11,251},{9,11,690},{10,11,
-155},{10,11,196},{10,11,373},{11,11,698},{13,11,155},{148,11,93},{5,11,97},{137,
-11,393},{7,0,764},{11,0,461},{12,0,172},{5,10,76},{6,10,458},{6,10,497},{7,10,
-868},{9,10,658},{10,10,594},{11,10,566},{12,10,338},{141,10,200},{134,0,1449},{
-138,11,40},{134,11,1639},{134,0,1445},{6,0,1168},{4,10,526},{7,10,1029},{135,10,
-1054},{4,11,191},{7,11,934},{8,11,647},{145,11,97},{132,10,636},{6,0,233},{7,10,
-660},{7,10,1124},{17,10,31},{19,10,22},{151,10,14},{6,10,1699},{136,11,110},{12,
-11,246},{15,11,162},{19,11,64},{20,11,8},{20,11,95},{22,11,24},{152,11,17},{5,11
-,165},{9,11,346},{138,11,655},{5,11,319},{135,11,534},{134,0,255},{9,0,216},{8,
-11,128},{139,11,179},{9,0,183},{139,0,286},{11,0,956},{151,0,3},{4,0,536},{7,0,
-1141},{10,0,723},{139,0,371},{4,10,279},{7,10,301},{137,10,362},{7,0,285},{5,11,
-57},{6,11,101},{6,11,1663},{7,11,132},{7,11,1048},{7,11,1154},{7,11,1415},{7,11,
-1507},{12,11,493},{15,11,105},{151,11,15},{5,11,459},{7,11,1073},{7,10,1743},{8,
-11,241},{136,11,334},{4,10,178},{133,10,399},{135,0,560},{132,0,690},{135,0,1246
-},{18,0,157},{147,0,63},{10,0,599},{11,0,33},{12,0,571},{149,0,1},{6,11,324},{6,
-11,520},{7,11,338},{7,11,1616},{7,11,1729},{8,11,228},{9,11,69},{139,11,750},{7,
-0,1862},{12,0,491},{12,0,520},{13,0,383},{142,0,244},{135,11,734},{134,10,1692},
-{10,0,448},{11,0,630},{17,0,117},{6,10,202},{7,11,705},{12,10,360},{17,10,118},{
-18,10,27},{148,10,67},{4,11,73},{6,11,612},{7,11,927},{7,11,1822},{8,11,217},{9,
-11,472},{9,11,765},{9,11,766},{10,11,408},{11,11,51},{11,11,793},{12,11,266},{15
-,11,158},{20,11,89},{150,11,32},{4,0,190},{133,0,554},{133,0,1001},{5,11,389},{8
-,11,636},{137,11,229},{5,0,446},{7,10,872},{10,10,516},{139,10,167},{137,10,313}
-,{132,10,224},{134,0,1313},{5,10,546},{7,10,35},{8,10,11},{8,10,12},{9,10,315},{
-9,10,533},{10,10,802},{11,10,166},{12,10,525},{142,10,243},{6,0,636},{137,0,837}
-,{5,10,241},{8,10,242},{9,10,451},{10,10,667},{11,10,598},{140,10,429},{22,10,46
-},{150,11,46},{136,11,472},{11,0,278},{142,0,73},{141,11,185},{132,0,868},{134,0
-,972},{4,10,366},{137,10,516},{138,0,1010},{5,11,189},{6,10,1736},{7,11,442},{7,
-11,443},{8,11,281},{12,11,174},{13,11,83},{141,11,261},{139,11,384},{6,11,2},{7,
-11,191},{7,11,446},{7,11,758},{7,11,1262},{7,11,1737},{8,11,22},{8,11,270},{8,11
-,612},{9,11,4},{9,11,167},{9,11,312},{9,11,436},{10,11,156},{10,11,216},{10,11,
-311},{10,11,623},{11,11,72},{11,11,330},{11,11,455},{12,11,101},{12,11,321},{12,
-11,504},{12,11,530},{12,11,543},{13,11,17},{13,11,156},{13,11,334},{14,11,48},{
-15,11,70},{17,11,60},{148,11,64},{6,10,331},{136,10,623},{135,0,1231},{132,0,304
-},{6,11,60},{7,11,670},{7,11,1327},{8,11,411},{8,11,435},{9,11,653},{9,11,740},{
-10,11,385},{11,11,222},{11,11,324},{11,11,829},{140,11,611},{7,0,506},{6,11,166}
-,{7,11,374},{135,11,1174},{14,11,43},{146,11,21},{135,11,1694},{135,10,1888},{5,
-11,206},{134,11,398},{135,11,50},{150,0,26},{6,0,53},{6,0,199},{7,0,1408},{8,0,
-32},{8,0,93},{10,0,397},{10,0,629},{11,0,593},{11,0,763},{13,0,326},{145,0,35},{
-134,0,105},{132,10,394},{4,0,843},{138,0,794},{11,0,704},{141,0,396},{5,0,114},{
-5,0,255},{141,0,285},{6,0,619},{7,0,898},{7,0,1092},{8,0,485},{18,0,28},{19,0,
-116},{135,10,1931},{9,0,145},{7,10,574},{135,10,1719},{7,0,2035},{8,0,19},{9,0,
-89},{138,0,831},{132,10,658},{6,11,517},{7,11,1159},{10,11,621},{139,11,192},{7,
-0,1933},{7,11,1933},{9,10,781},{10,10,144},{11,10,385},{13,10,161},{13,10,228},{
-13,10,268},{148,10,107},{136,10,374},{10,11,223},{139,11,645},{135,0,1728},{7,11
-,64},{7,11,289},{136,11,245},{4,10,344},{6,10,498},{139,10,323},{136,0,746},{135
-,10,1063},{137,10,155},{4,0,987},{6,0,1964},{6,0,1974},{6,0,1990},{136,0,995},{
-133,11,609},{133,10,906},{134,0,1550},{134,0,874},{5,11,129},{6,11,61},{135,11,
-947},{4,0,1018},{6,0,1938},{6,0,2021},{134,0,2039},{132,0,814},{11,0,126},{139,0
-,287},{134,0,1264},{5,0,955},{136,0,814},{141,11,506},{132,11,314},{6,0,981},{
-139,11,1000},{5,0,56},{8,0,892},{8,0,915},{140,0,776},{148,0,100},{10,0,4},{10,0
-,13},{11,0,638},{148,0,57},{148,11,74},{5,0,738},{132,10,616},{133,11,637},{136,
-10,692},{133,0,758},{132,10,305},{137,11,590},{5,11,280},{135,11,1226},{134,11,
-494},{135,0,1112},{133,11,281},{13,0,44},{14,0,214},{5,10,214},{7,10,603},{8,10,
-611},{9,10,686},{10,10,88},{11,10,459},{11,10,496},{12,10,463},{140,10,590},{139
-,0,328},{135,11,1064},{137,0,133},{7,0,168},{13,0,196},{141,0,237},{134,10,1703}
-,{134,0,1152},{135,0,1245},{5,0,110},{6,0,169},{6,0,1702},{7,0,400},{8,0,538},{9
-,0,184},{9,0,524},{140,0,218},{6,0,1816},{10,0,871},{12,0,769},{140,0,785},{132,
-11,630},{7,11,33},{7,11,120},{8,11,489},{9,11,319},{10,11,820},{11,11,1004},{12,
-11,379},{13,11,117},{13,11,412},{14,11,25},{15,11,52},{15,11,161},{16,11,47},{
-149,11,2},{6,0,133},{8,0,413},{9,0,353},{139,0,993},{145,10,19},{4,11,937},{133,
-11,801},{134,0,978},{6,0,93},{6,0,1508},{7,0,1422},{7,0,1851},{8,0,673},{9,0,529
-},{140,0,43},{6,0,317},{10,0,512},{4,10,737},{11,10,294},{12,10,60},{12,10,437},
-{13,10,64},{13,10,380},{142,10,430},{9,0,371},{7,11,1591},{144,11,43},{6,10,1758
-},{8,10,520},{9,10,345},{9,10,403},{142,10,350},{5,0,526},{10,10,242},{138,10,
-579},{9,0,25},{10,0,467},{138,0,559},{5,10,139},{7,10,1168},{138,10,539},{4,0,
-335},{135,0,942},{140,0,754},{132,11,365},{11,0,182},{142,0,195},{142,11,29},{5,
-11,7},{139,11,774},{4,11,746},{135,11,1090},{8,0,39},{10,0,773},{11,0,84},{12,0,
-205},{142,0,1},{5,0,601},{5,0,870},{5,11,360},{136,11,237},{132,0,181},{136,0,
-370},{134,0,1652},{8,0,358},{4,10,107},{7,10,613},{8,10,439},{8,10,504},{9,10,
-501},{10,10,383},{139,10,477},{132,10,229},{137,11,785},{4,0,97},{5,0,147},{6,0,
-286},{7,0,1362},{141,0,176},{6,0,537},{7,0,788},{7,0,1816},{132,10,903},{140,10,
-71},{6,0,743},{134,0,1223},{6,0,375},{7,0,169},{7,0,254},{8,0,780},{135,11,1493}
-,{7,0,1714},{4,10,47},{6,10,373},{7,10,452},{7,10,543},{7,10,1856},{9,10,6},{11,
-10,257},{139,10,391},{6,0,896},{136,0,1003},{135,0,1447},{137,11,341},{5,10,980}
-,{134,10,1754},{145,11,22},{4,11,277},{5,11,608},{6,11,493},{7,11,457},{140,11,
-384},{7,10,536},{7,10,1331},{136,10,143},{140,0,744},{7,11,27},{135,11,316},{18,
-0,126},{5,10,19},{134,10,533},{4,0,788},{11,0,41},{5,11,552},{5,11,586},{5,11,
-676},{6,11,448},{8,11,244},{11,11,1},{11,11,41},{13,11,3},{16,11,54},{17,11,4},{
-146,11,13},{4,0,985},{6,0,1801},{4,11,401},{137,11,264},{5,10,395},{5,10,951},{
-134,10,1776},{5,0,629},{135,0,1549},{11,10,663},{12,10,210},{13,10,166},{13,10,
-310},{14,10,373},{147,10,43},{9,11,543},{10,11,524},{11,11,30},{12,11,524},{14,
-11,315},{16,11,18},{20,11,26},{148,11,65},{4,11,205},{5,11,623},{7,11,104},{136,
-11,519},{5,0,293},{134,0,601},{7,11,579},{9,11,41},{9,11,244},{9,11,669},{10,11,
-5},{11,11,861},{11,11,951},{139,11,980},{132,11,717},{132,10,695},{7,10,497},{9,
-10,387},{147,10,81},{132,0,420},{142,0,37},{6,0,1134},{6,0,1900},{12,0,830},{12,
-0,878},{12,0,894},{15,0,221},{143,0,245},{132,11,489},{7,0,1570},{140,0,542},{8,
-0,933},{136,0,957},{6,0,1371},{7,0,31},{8,0,373},{5,10,284},{6,10,49},{6,10,350}
-,{7,10,377},{7,10,1693},{8,10,678},{9,10,161},{9,10,585},{9,10,671},{9,10,839},{
-11,10,912},{141,10,427},{135,11,892},{4,0,325},{138,0,125},{139,11,47},{132,10,
-597},{138,0,323},{6,0,1547},{7,11,1605},{9,11,473},{11,11,962},{146,11,139},{139
-,10,908},{7,11,819},{9,11,26},{9,11,392},{10,11,152},{10,11,226},{11,11,19},{12,
-11,276},{12,11,426},{12,11,589},{13,11,460},{15,11,97},{19,11,48},{148,11,104},{
-135,11,51},{4,0,718},{135,0,1216},{6,0,1896},{6,0,1905},{6,0,1912},{9,0,947},{9,
-0,974},{12,0,809},{12,0,850},{12,0,858},{12,0,874},{12,0,887},{12,0,904},{12,0,
-929},{12,0,948},{12,0,952},{15,0,198},{15,0,206},{15,0,220},{15,0,227},{15,0,247
-},{18,0,188},{21,0,48},{21,0,50},{24,0,25},{24,0,29},{7,11,761},{7,11,1051},{137
-,11,545},{5,0,124},{5,0,144},{6,0,548},{7,0,15},{7,0,153},{137,0,629},{135,11,
-606},{135,10,2014},{7,10,2007},{9,11,46},{9,10,101},{9,10,450},{10,10,66},{10,10
-,842},{11,10,536},{140,10,587},{6,0,75},{7,0,1531},{8,0,416},{9,0,240},{9,0,275}
-,{10,0,100},{11,0,658},{11,0,979},{12,0,86},{14,0,207},{15,0,20},{143,0,25},{5,0
-,141},{5,0,915},{6,0,1783},{7,0,211},{7,0,698},{7,0,1353},{9,0,83},{9,0,281},{10
-,0,376},{10,0,431},{11,0,543},{12,0,664},{13,0,280},{13,0,428},{14,0,61},{14,0,
-128},{17,0,52},{145,0,81},{132,11,674},{135,0,533},{149,0,6},{132,11,770},{133,0
-,538},{5,11,79},{7,11,1027},{7,11,1477},{139,11,52},{139,10,62},{4,0,338},{133,0
-,400},{5,11,789},{134,11,195},{4,11,251},{4,11,688},{7,11,513},{7,11,1284},{9,11
-,87},{138,11,365},{134,10,1766},{6,0,0},{7,0,84},{11,0,895},{145,0,11},{139,0,
-892},{4,0,221},{5,0,659},{7,0,697},{7,0,1211},{138,0,284},{133,0,989},{133,11,
-889},{4,11,160},{5,11,330},{7,11,1434},{136,11,174},{6,10,1665},{7,10,256},{7,10
-,1388},{10,10,499},{139,10,670},{7,0,848},{4,10,22},{5,10,10},{136,10,97},{138,0
-,507},{133,10,481},{4,0,188},{135,0,805},{5,0,884},{6,0,732},{139,0,991},{135,11
-,968},{11,11,636},{15,11,145},{17,11,34},{19,11,50},{151,11,20},{7,0,959},{16,0,
-60},{6,10,134},{7,10,437},{9,10,37},{14,10,285},{142,10,371},{7,10,486},{8,10,
-155},{11,10,93},{140,10,164},{134,0,1653},{7,0,337},{133,10,591},{6,0,1989},{8,0
-,922},{8,0,978},{133,11,374},{132,0,638},{138,0,500},{133,11,731},{5,10,380},{5,
-10,650},{136,10,310},{138,11,381},{4,10,364},{7,10,1156},{7,10,1187},{137,10,409
-},{137,11,224},{140,0,166},{134,10,482},{4,11,626},{5,11,642},{6,11,425},{10,11,
-202},{139,11,141},{4,10,781},{6,10,487},{7,10,926},{8,10,263},{139,10,500},{135,
-0,418},{4,10,94},{135,10,1265},{136,0,760},{132,10,417},{136,11,835},{5,10,348},
-{134,10,522},{6,0,1277},{134,0,1538},{139,11,541},{135,11,1597},{5,11,384},{8,11
-,455},{140,11,48},{136,0,770},{5,11,264},{134,11,184},{4,0,89},{5,0,489},{6,0,
-315},{7,0,553},{7,0,1745},{138,0,243},{4,10,408},{4,10,741},{135,10,500},{134,0,
-1396},{133,0,560},{6,0,1658},{9,0,3},{10,0,154},{11,0,641},{13,0,85},{13,0,201},
-{141,0,346},{135,11,1595},{5,11,633},{6,11,28},{7,11,219},{135,11,1323},{9,11,
-769},{140,11,185},{135,11,785},{7,11,359},{8,11,243},{140,11,175},{138,0,586},{7
-,0,1271},{134,10,73},{132,11,105},{4,0,166},{5,0,505},{134,0,1670},{133,10,576},
-{4,11,324},{138,11,104},{142,10,231},{6,0,637},{7,10,1264},{7,10,1678},{11,10,
-945},{12,10,341},{12,10,471},{12,10,569},{23,11,21},{151,11,23},{8,11,559},{141,
-11,109},{134,0,1947},{7,0,445},{8,0,307},{8,0,704},{10,0,41},{10,0,439},{11,0,
-237},{11,0,622},{140,0,201},{135,11,963},{135,0,1977},{4,0,189},{5,0,713},{136,0
-,57},{138,0,371},{135,10,538},{132,0,552},{6,0,883},{133,10,413},{6,0,923},{132,
-11,758},{138,11,215},{136,10,495},{7,10,54},{8,10,312},{10,10,191},{10,10,614},{
-140,10,567},{7,11,351},{139,11,128},{7,0,875},{6,10,468},{7,10,1478},{8,10,530},
-{142,10,290},{135,0,1788},{17,0,49},{133,11,918},{12,11,398},{20,11,39},{21,11,
-11},{150,11,41},{10,0,661},{6,10,484},{135,10,822},{135,0,1945},{134,0,794},{137
-,10,900},{135,10,1335},{6,10,1724},{135,10,2022},{132,11,340},{134,0,1135},{4,0,
-784},{133,0,745},{5,0,84},{134,0,163},{133,0,410},{4,0,976},{5,11,985},{7,11,509
-},{7,11,529},{145,11,96},{132,10,474},{134,0,703},{135,11,1919},{5,0,322},{8,0,
-186},{9,0,262},{10,0,187},{142,0,208},{135,10,1504},{133,0,227},{9,0,560},{13,0,
-208},{133,10,305},{132,11,247},{7,0,1395},{8,0,486},{9,0,236},{9,0,878},{10,0,
-218},{11,0,95},{19,0,17},{147,0,31},{7,0,2043},{8,0,672},{141,0,448},{4,11,184},
-{5,11,390},{6,11,337},{7,11,23},{7,11,494},{7,11,618},{7,11,1456},{8,11,27},{8,
-11,599},{10,11,153},{139,11,710},{135,0,466},{135,10,1236},{6,0,167},{7,0,186},{
-7,0,656},{10,0,643},{4,10,480},{6,10,302},{6,10,1642},{7,10,837},{7,10,1547},{7,
-10,1657},{8,10,429},{9,10,228},{13,10,289},{13,10,343},{147,10,101},{134,0,1428}
-,{134,0,1440},{5,0,412},{7,10,278},{10,10,739},{11,10,708},{141,10,348},{134,0,
-1118},{136,0,562},{148,11,46},{9,0,316},{139,0,256},{134,0,1771},{135,0,1190},{
-137,0,132},{10,11,227},{11,11,497},{11,11,709},{140,11,415},{143,0,66},{6,11,360
-},{7,11,1664},{136,11,478},{144,10,28},{4,0,317},{135,0,1279},{5,0,63},{133,0,
-509},{136,11,699},{145,10,36},{134,0,1475},{11,11,343},{142,11,127},{132,11,739}
-,{132,0,288},{135,11,1757},{8,0,89},{8,0,620},{9,0,608},{11,0,628},{12,0,322},{
-143,0,124},{134,0,1225},{7,0,1189},{4,11,67},{5,11,422},{6,10,363},{7,11,1037},{
-7,11,1289},{7,11,1555},{7,10,1955},{8,10,725},{9,11,741},{145,11,108},{134,0,
-1468},{6,0,689},{134,0,1451},{138,0,120},{151,0,1},{137,10,805},{142,0,329},{5,
-10,813},{135,10,2046},{135,0,226},{138,11,96},{7,0,1855},{5,10,712},{11,10,17},{
-13,10,321},{144,10,67},{9,0,461},{6,10,320},{7,10,781},{7,10,1921},{9,10,55},{10
-,10,186},{10,10,273},{10,10,664},{10,10,801},{11,10,996},{11,10,997},{13,10,157}
-,{142,10,170},{8,11,203},{8,10,271},{11,11,823},{11,11,846},{12,11,482},{13,11,
-133},{13,11,277},{13,11,302},{13,11,464},{14,11,205},{142,11,221},{135,0,1346},{
-4,11,449},{133,11,718},{134,0,85},{14,0,299},{7,10,103},{7,10,863},{11,10,184},{
-145,10,62},{4,11,355},{6,11,311},{9,11,256},{138,11,404},{137,10,659},{138,11,
-758},{133,11,827},{5,11,64},{140,11,581},{134,0,1171},{4,11,442},{7,11,1047},{7,
-11,1352},{135,11,1643},{132,0,980},{5,11,977},{6,11,288},{7,11,528},{135,11,1065
-},{5,0,279},{6,0,235},{7,0,468},{8,0,446},{9,0,637},{10,0,717},{11,0,738},{140,0
-,514},{132,0,293},{11,10,337},{142,10,303},{136,11,285},{5,0,17},{6,0,371},{9,0,
-528},{12,0,364},{132,11,254},{5,10,77},{7,10,1455},{10,10,843},{147,10,73},{150,
-0,5},{132,10,458},{6,11,12},{7,11,1219},{145,11,73},{135,10,1420},{6,10,109},{
-138,10,382},{135,11,125},{6,10,330},{7,10,1084},{139,10,142},{6,11,369},{6,11,
-502},{7,11,1036},{8,11,348},{9,11,452},{10,11,26},{11,11,224},{11,11,387},{11,11
-,772},{12,11,95},{12,11,629},{13,11,195},{13,11,207},{13,11,241},{14,11,260},{14
-,11,270},{143,11,140},{132,11,269},{5,11,480},{7,11,532},{7,11,1197},{7,11,1358}
-,{8,11,291},{11,11,349},{142,11,396},{150,0,48},{10,0,601},{13,0,353},{141,0,376
-},{5,0,779},{5,0,807},{6,0,1655},{134,0,1676},{142,11,223},{4,0,196},{5,0,558},{
-133,0,949},{148,11,15},{135,11,1764},{134,0,1322},{132,0,752},{139,0,737},{135,
-11,657},{136,11,533},{135,0,412},{4,0,227},{5,0,159},{5,0,409},{7,0,80},{8,0,556
-},{10,0,479},{12,0,418},{14,0,50},{14,0,123},{14,0,192},{14,0,249},{14,0,295},{
-143,0,27},{7,0,1470},{8,0,66},{8,0,137},{8,0,761},{9,0,638},{11,0,80},{11,0,212}
-,{11,0,368},{11,0,418},{12,0,8},{13,0,15},{16,0,61},{17,0,59},{19,0,28},{148,0,
-84},{135,10,1985},{4,11,211},{4,11,332},{5,11,335},{6,11,238},{7,11,269},{7,11,
-811},{7,11,1797},{8,10,122},{8,11,836},{9,11,507},{141,11,242},{6,0,683},{134,0,
-1252},{4,0,873},{132,10,234},{134,0,835},{6,0,38},{7,0,1220},{8,0,185},{8,0,256}
-,{9,0,22},{9,0,331},{10,0,738},{11,0,205},{11,0,540},{11,0,746},{13,0,465},{14,0
-,88},{142,0,194},{138,0,986},{5,11,1009},{12,11,582},{146,11,131},{4,0,159},{6,0
-,115},{7,0,252},{7,0,257},{7,0,1928},{8,0,69},{9,0,384},{10,0,91},{10,0,615},{12
-,0,375},{14,0,235},{18,0,117},{147,0,123},{133,0,911},{136,0,278},{5,10,430},{5,
-10,932},{6,10,131},{7,10,417},{9,10,522},{11,10,314},{141,10,390},{14,10,149},{
-14,10,399},{143,10,57},{4,0,151},{7,0,1567},{136,0,749},{5,11,228},{6,11,203},{7
-,11,156},{8,11,347},{137,11,265},{132,10,507},{10,0,989},{140,0,956},{133,0,990}
-,{5,0,194},{6,0,927},{7,0,1662},{9,0,90},{140,0,564},{4,10,343},{133,10,511},{
-133,0,425},{7,10,455},{138,10,591},{4,0,774},{7,11,476},{7,11,1592},{138,11,87},
-{5,0,971},{135,10,1381},{5,11,318},{147,11,121},{5,11,291},{7,11,765},{9,11,389}
-,{140,11,548},{134,10,575},{4,0,827},{12,0,646},{12,0,705},{12,0,712},{140,0,714
-},{139,0,752},{137,0,662},{5,0,72},{6,0,264},{7,0,21},{7,0,46},{7,0,2013},{8,0,
-215},{8,0,513},{10,0,266},{139,0,22},{139,11,522},{6,0,239},{7,0,118},{10,0,95},
-{11,0,603},{13,0,443},{14,0,160},{143,0,4},{6,0,431},{134,0,669},{7,10,1127},{7,
-10,1572},{10,10,297},{10,10,422},{11,10,764},{11,10,810},{12,10,264},{13,10,102}
-,{13,10,300},{13,10,484},{14,10,147},{14,10,229},{17,10,71},{18,10,118},{147,10,
-120},{5,0,874},{6,0,1677},{15,0,0},{10,11,525},{139,11,82},{6,0,65},{7,0,939},{7
-,0,1172},{7,0,1671},{9,0,540},{10,0,696},{11,0,265},{11,0,732},{11,0,928},{11,0,
-937},{141,0,438},{134,0,1350},{136,11,547},{132,11,422},{5,11,355},{145,11,0},{
-137,11,905},{5,0,682},{135,0,1887},{132,0,809},{4,0,696},{133,11,865},{6,0,1074}
-,{6,0,1472},{14,10,35},{142,10,191},{5,11,914},{134,11,1625},{133,11,234},{135,
-11,1383},{137,11,780},{132,10,125},{4,0,726},{133,0,630},{8,0,802},{136,0,838},{
-132,10,721},{6,0,1337},{7,0,776},{19,0,56},{136,10,145},{132,0,970},{7,10,792},{
-8,10,147},{10,10,821},{139,10,1021},{139,10,970},{8,0,940},{137,0,797},{135,11,
-1312},{9,0,248},{10,0,400},{7,11,816},{7,11,1241},{7,10,1999},{9,11,283},{9,11,
-520},{10,11,213},{10,11,307},{10,11,463},{10,11,671},{10,11,746},{11,11,401},{11
-,11,794},{12,11,517},{18,11,107},{147,11,115},{6,0,1951},{134,0,2040},{135,11,
-339},{13,0,41},{15,0,93},{5,10,168},{5,10,930},{8,10,74},{9,10,623},{12,10,500},
-{140,10,579},{6,0,118},{7,0,215},{7,0,1521},{140,0,11},{6,10,220},{7,10,1101},{
-141,10,105},{6,11,421},{7,11,61},{7,11,1540},{10,11,11},{138,11,501},{7,0,615},{
-138,0,251},{140,11,631},{135,0,1044},{6,10,19},{7,10,1413},{139,10,428},{133,0,
-225},{7,10,96},{8,10,401},{8,10,703},{137,10,896},{145,10,116},{6,11,102},{7,11,
-72},{15,11,142},{147,11,67},{7,10,1961},{7,10,1965},{8,10,702},{136,10,750},{7,
-10,2030},{8,10,150},{8,10,737},{12,10,366},{151,11,30},{4,0,370},{5,0,756},{7,0,
-1326},{135,11,823},{8,10,800},{9,10,148},{9,10,872},{9,10,890},{11,10,309},{11,
-10,1001},{13,10,267},{141,10,323},{6,0,1662},{7,0,48},{8,0,771},{10,0,116},{13,0
-,104},{14,0,105},{14,0,184},{15,0,168},{19,0,92},{148,0,68},{10,0,209},{135,11,
-1870},{7,11,68},{8,11,48},{8,11,88},{8,11,582},{8,11,681},{9,11,373},{9,11,864},
-{11,11,157},{11,11,336},{11,11,843},{148,11,27},{134,0,930},{4,11,88},{5,11,137}
-,{5,11,174},{5,11,777},{6,11,1664},{6,11,1725},{7,11,77},{7,11,426},{7,11,1317},
-{7,11,1355},{8,11,126},{8,11,563},{9,11,523},{9,11,750},{10,11,310},{10,11,836},
-{11,11,42},{11,11,318},{11,11,731},{12,11,68},{12,11,92},{12,11,507},{12,11,692}
-,{13,11,81},{13,11,238},{13,11,374},{18,11,138},{19,11,78},{19,11,111},{20,11,55
-},{20,11,77},{148,11,92},{4,11,938},{135,11,1831},{5,10,547},{7,10,424},{8,11,
-617},{138,11,351},{6,0,1286},{6,11,1668},{7,11,1499},{8,11,117},{9,11,314},{138,
-11,174},{6,0,759},{6,0,894},{7,11,707},{139,11,563},{4,0,120},{135,0,1894},{9,0,
-385},{149,0,17},{138,0,429},{133,11,403},{5,0,820},{135,0,931},{10,0,199},{133,
-10,133},{6,0,151},{6,0,1675},{7,0,383},{151,0,10},{6,0,761},{136,10,187},{8,0,
-365},{10,10,0},{10,10,818},{139,10,988},{4,11,44},{5,11,311},{6,11,156},{7,11,
-639},{7,11,762},{7,11,1827},{9,11,8},{9,11,462},{148,11,83},{4,11,346},{7,11,115
-},{9,11,180},{9,11,456},{138,11,363},{136,10,685},{7,0,1086},{145,0,46},{6,0,
-1624},{11,0,11},{12,0,422},{13,0,444},{142,0,360},{6,0,1020},{6,0,1260},{134,0,
-1589},{4,0,43},{5,0,344},{5,0,357},{14,0,472},{150,0,58},{6,0,1864},{6,0,1866},{
-6,0,1868},{6,0,1869},{6,0,1874},{6,0,1877},{6,0,1903},{6,0,1911},{9,0,920},{9,0,
-921},{9,0,924},{9,0,946},{9,0,959},{9,0,963},{9,0,970},{9,0,997},{9,0,1008},{9,0
-,1017},{12,0,795},{12,0,797},{12,0,798},{12,0,800},{12,0,803},{12,0,811},{12,0,
-820},{12,0,821},{12,0,839},{12,0,841},{12,0,848},{12,0,911},{12,0,921},{12,0,922
-},{12,0,925},{12,0,937},{12,0,944},{12,0,945},{12,0,953},{15,0,184},{15,0,191},{
-15,0,199},{15,0,237},{15,0,240},{15,0,243},{15,0,246},{18,0,203},{21,0,40},{21,0
-,52},{21,0,57},{24,0,23},{24,0,28},{152,0,30},{134,0,725},{145,11,58},{133,0,888
-},{137,10,874},{4,0,711},{8,10,774},{10,10,670},{140,10,51},{144,11,40},{6,11,
-185},{7,11,1899},{139,11,673},{137,10,701},{137,0,440},{4,11,327},{5,11,478},{7,
-11,1332},{8,11,753},{140,11,227},{4,10,127},{5,10,350},{6,10,356},{8,10,426},{9,
-10,572},{10,10,247},{139,10,312},{5,11,1020},{133,11,1022},{4,11,103},{133,11,
-401},{6,0,1913},{6,0,1926},{6,0,1959},{9,0,914},{9,0,939},{9,0,952},{9,0,979},{9
-,0,990},{9,0,998},{9,0,1003},{9,0,1023},{12,0,827},{12,0,834},{12,0,845},{12,0,
-912},{12,0,935},{12,0,951},{15,0,172},{15,0,174},{18,0,198},{149,0,63},{5,0,958}
-,{5,0,987},{4,11,499},{135,11,1421},{7,0,885},{6,10,59},{6,10,1762},{9,10,603},{
-141,10,397},{10,11,62},{141,11,164},{4,0,847},{135,0,326},{11,0,276},{142,0,293}
-,{4,0,65},{5,0,479},{5,0,1004},{7,0,1913},{8,0,317},{9,0,302},{10,0,612},{13,0,
-22},{132,11,96},{4,0,261},{135,0,510},{135,0,1514},{6,10,111},{7,10,4},{8,10,163
-},{8,10,776},{138,10,566},{4,0,291},{9,0,515},{12,0,152},{12,0,443},{13,0,392},{
-142,0,357},{7,11,399},{135,11,1492},{4,0,589},{139,0,282},{6,11,563},{135,10,
-1994},{5,10,297},{135,10,1038},{4,0,130},{7,0,843},{135,0,1562},{5,0,42},{5,0,
-879},{7,0,245},{7,0,324},{7,0,1532},{11,0,463},{11,0,472},{13,0,363},{144,0,52},
-{4,0,134},{133,0,372},{133,0,680},{136,10,363},{6,0,1997},{8,0,935},{136,0,977},
-{4,0,810},{135,0,1634},{135,10,1675},{7,0,1390},{4,11,910},{133,11,832},{7,10,
-808},{8,11,266},{139,11,578},{132,0,644},{4,0,982},{138,0,867},{132,10,280},{135
-,0,540},{140,10,54},{135,0,123},{134,0,1978},{4,10,421},{133,10,548},{6,0,623},{
-136,0,789},{4,0,908},{5,0,359},{5,0,508},{6,0,1723},{7,0,343},{7,0,1996},{135,0,
-2026},{134,0,1220},{4,0,341},{135,0,480},{6,10,254},{9,10,109},{138,10,103},{134
-,0,888},{8,11,528},{137,11,348},{7,0,1995},{8,0,299},{11,0,890},{12,0,674},{4,11
-,20},{133,11,616},{135,11,1094},{134,10,1630},{4,0,238},{5,0,503},{6,0,179},{7,0
-,2003},{8,0,381},{8,0,473},{9,0,149},{10,0,788},{15,0,45},{15,0,86},{20,0,110},{
-150,0,57},{133,10,671},{4,11,26},{5,11,429},{6,11,245},{7,11,704},{7,11,1379},{
-135,11,1474},{4,0,121},{5,0,156},{5,0,349},{9,0,431},{10,0,605},{142,0,342},{7,
-11,943},{139,11,614},{132,10,889},{132,11,621},{7,10,1382},{7,11,1382},{135,10,
-1910},{132,10,627},{133,10,775},{133,11,542},{133,11,868},{136,11,433},{6,0,1373
-},{7,0,1011},{11,10,362},{11,10,948},{140,10,388},{6,0,80},{7,0,173},{9,0,547},{
-10,0,730},{14,0,18},{22,0,39},{135,11,1495},{6,0,1694},{135,0,1974},{140,0,196},
-{4,0,923},{6,0,507},{6,0,1711},{7,10,451},{8,10,389},{12,10,490},{13,10,16},{13,
-10,215},{13,10,351},{18,10,132},{147,10,125},{6,0,646},{134,0,1047},{135,10,841}
-,{136,10,566},{6,0,1611},{135,0,1214},{139,0,926},{132,11,525},{132,0,595},{5,0,
-240},{6,0,459},{7,0,12},{7,0,114},{7,0,949},{7,0,1753},{7,0,1805},{8,0,658},{9,0
-,1},{11,0,959},{141,0,446},{5,10,912},{134,10,1695},{132,0,446},{7,11,62},{12,11
-,45},{147,11,112},{5,10,236},{6,10,572},{8,10,492},{11,10,618},{144,10,56},{5,10
-,190},{136,10,318},{135,10,1376},{4,11,223},{6,11,359},{11,11,3},{13,11,108},{14
-,11,89},{144,11,22},{132,11,647},{134,0,490},{134,0,491},{134,0,1584},{135,11,
-685},{138,11,220},{7,0,250},{136,0,507},{132,0,158},{4,0,140},{7,0,362},{8,0,209
-},{9,0,10},{9,0,160},{9,0,503},{9,0,614},{10,0,689},{11,0,327},{11,0,553},{11,0,
-725},{11,0,767},{12,0,252},{12,0,583},{13,0,192},{14,0,269},{14,0,356},{148,0,50
-},{19,0,1},{19,0,26},{150,0,9},{132,11,109},{6,0,228},{7,0,1341},{9,0,408},{138,
-0,343},{4,0,373},{5,0,283},{6,0,480},{7,0,609},{10,0,860},{138,0,878},{6,0,779},
-{134,0,1209},{4,0,557},{7,11,263},{7,11,628},{136,11,349},{132,0,548},{7,0,197},
-{8,0,142},{8,0,325},{9,0,150},{9,0,596},{10,0,350},{10,0,353},{11,0,74},{11,0,
-315},{12,0,662},{12,0,681},{14,0,423},{143,0,141},{4,11,40},{10,11,67},{11,11,
-117},{11,11,768},{139,11,935},{7,11,992},{8,11,301},{9,11,722},{12,11,63},{13,11
-,29},{14,11,161},{143,11,18},{6,0,1490},{138,11,532},{5,0,580},{7,0,378},{7,0,
-674},{7,0,1424},{15,0,83},{16,0,11},{15,11,83},{144,11,11},{6,0,1057},{6,0,1335}
-,{10,0,316},{7,10,85},{7,10,247},{8,10,585},{138,10,163},{4,0,169},{5,0,83},{6,0
-,399},{6,0,579},{6,0,1513},{7,0,692},{7,0,846},{7,0,1015},{7,0,1799},{8,0,403},{
-9,0,394},{10,0,133},{12,0,4},{12,0,297},{12,0,452},{16,0,81},{18,0,25},{21,0,14}
-,{22,0,12},{151,0,18},{134,0,1106},{7,0,1546},{11,0,299},{142,0,407},{134,0,1192
-},{132,0,177},{5,0,411},{135,0,653},{7,0,439},{10,0,727},{11,0,260},{139,0,684},
-{138,10,145},{147,10,83},{5,0,208},{7,0,753},{135,0,1528},{137,11,617},{135,10,
-1922},{135,11,825},{11,0,422},{13,0,389},{4,10,124},{10,10,457},{11,10,121},{11,
-10,169},{11,10,870},{12,10,214},{14,10,187},{143,10,77},{11,0,615},{15,0,58},{11
-,11,615},{143,11,58},{9,0,618},{138,0,482},{6,0,1952},{6,0,1970},{142,0,505},{7,
-10,1193},{135,11,1838},{133,0,242},{135,10,1333},{6,10,107},{7,10,638},{7,10,
-1632},{137,10,396},{133,0,953},{5,10,370},{134,10,1756},{5,11,28},{6,11,204},{10
-,11,320},{10,11,583},{13,11,502},{14,11,72},{14,11,274},{14,11,312},{14,11,344},
-{15,11,159},{16,11,62},{16,11,69},{17,11,30},{18,11,42},{18,11,53},{18,11,84},{
-18,11,140},{19,11,68},{19,11,85},{20,11,5},{20,11,45},{20,11,101},{22,11,7},{150
-,11,20},{4,11,558},{6,11,390},{7,11,162},{7,11,689},{9,11,360},{138,11,653},{11,
-0,802},{141,0,67},{133,10,204},{133,0,290},{5,10,970},{134,10,1706},{132,0,380},
-{5,0,52},{7,0,277},{9,0,368},{139,0,791},{5,11,856},{6,11,1672},{6,11,1757},{6,
-11,1781},{7,11,1150},{7,11,1425},{7,11,1453},{140,11,513},{5,11,92},{7,10,3},{10
-,11,736},{140,11,102},{4,0,112},{5,0,653},{5,10,483},{5,10,685},{6,10,489},{7,10
-,1204},{136,10,394},{132,10,921},{6,0,1028},{133,10,1007},{5,11,590},{9,11,213},
-{145,11,91},{135,10,1696},{10,0,138},{139,0,476},{5,0,725},{5,0,727},{135,0,1811
-},{4,0,979},{6,0,1821},{6,0,1838},{8,0,876},{8,0,883},{8,0,889},{8,0,893},{8,0,
-895},{10,0,934},{12,0,720},{14,0,459},{148,0,123},{135,11,551},{4,0,38},{6,0,435
-},{7,0,307},{7,0,999},{7,0,1481},{7,0,1732},{7,0,1738},{8,0,371},{9,0,414},{11,0
-,316},{12,0,52},{13,0,420},{147,0,100},{135,0,1296},{132,10,712},{134,10,1629},{
-133,0,723},{134,0,651},{136,11,191},{9,11,791},{10,11,93},{11,11,301},{16,11,13}
-,{17,11,23},{18,11,135},{19,11,12},{20,11,1},{20,11,12},{148,11,14},{136,11,503}
-,{6,11,466},{135,11,671},{6,0,1200},{134,0,1330},{135,0,1255},{134,0,986},{5,0,
-109},{6,0,1784},{7,0,1895},{12,0,296},{140,0,302},{135,11,983},{133,10,485},{134
-,0,660},{134,0,800},{5,0,216},{5,0,294},{6,0,591},{7,0,1879},{9,0,141},{9,0,270}
-,{9,0,679},{10,0,159},{11,0,197},{11,0,438},{12,0,538},{12,0,559},{14,0,144},{14
-,0,167},{15,0,67},{4,10,285},{5,10,317},{6,10,301},{7,10,7},{8,10,153},{10,10,
-766},{11,10,468},{12,10,467},{141,10,143},{136,0,945},{134,0,1090},{137,0,81},{
-12,11,468},{19,11,96},{148,11,24},{134,0,391},{138,11,241},{7,0,322},{136,0,249}
-,{134,0,1412},{135,11,795},{5,0,632},{138,0,526},{136,10,819},{6,0,144},{7,0,948
-},{7,0,1042},{8,0,235},{8,0,461},{9,0,453},{9,0,796},{10,0,354},{17,0,77},{135,
-11,954},{139,10,917},{6,0,940},{134,0,1228},{4,0,362},{7,0,52},{135,0,303},{6,11
-,549},{8,11,34},{8,11,283},{9,11,165},{138,11,475},{7,11,370},{7,11,1007},{7,11,
-1177},{135,11,1565},{5,11,652},{5,11,701},{135,11,449},{5,0,196},{6,0,486},{7,0,
-212},{8,0,309},{136,0,346},{6,10,1719},{6,10,1735},{7,10,2016},{7,10,2020},{8,10
-,837},{137,10,852},{6,11,159},{6,11,364},{7,11,516},{7,11,1439},{137,11,518},{
-135,0,1912},{135,0,1290},{132,0,686},{141,11,151},{138,0,625},{136,0,706},{138,
-10,568},{139,0,412},{4,0,30},{133,0,43},{8,10,67},{138,10,419},{7,0,967},{141,0,
-11},{12,0,758},{14,0,441},{142,0,462},{10,10,657},{14,10,297},{142,10,361},{139,
-10,729},{4,0,220},{135,0,1535},{7,11,501},{9,11,111},{10,11,141},{11,11,332},{13
-,11,43},{13,11,429},{14,11,130},{14,11,415},{145,11,102},{4,0,950},{6,0,1859},{7
-,0,11},{8,0,873},{12,0,710},{12,0,718},{12,0,748},{12,0,765},{148,0,124},{5,11,
-149},{5,11,935},{136,11,233},{142,11,291},{134,0,1579},{7,0,890},{8,10,51},{9,10
-,868},{10,10,833},{12,10,481},{12,10,570},{148,10,106},{141,0,2},{132,10,445},{
-136,11,801},{135,0,1774},{7,0,1725},{138,0,393},{5,0,263},{134,0,414},{132,11,
-322},{133,10,239},{7,0,456},{7,10,1990},{8,10,130},{139,10,720},{137,0,818},{5,
-10,123},{6,10,530},{7,10,348},{135,10,1419},{135,10,2024},{6,0,178},{6,0,1750},{
-8,0,251},{9,0,690},{10,0,155},{10,0,196},{10,0,373},{11,0,698},{13,0,155},{148,0
-,93},{5,0,97},{137,0,393},{134,0,674},{11,0,223},{140,0,168},{132,10,210},{139,
-11,464},{6,0,1639},{146,0,159},{139,11,2},{7,0,934},{8,0,647},{17,0,97},{19,0,59
-},{150,0,2},{132,0,191},{5,0,165},{9,0,346},{10,0,655},{11,0,885},{4,10,430},{
-135,11,357},{133,0,877},{5,10,213},{133,11,406},{8,0,128},{139,0,179},{6,11,69},
-{135,11,117},{135,0,1297},{11,11,43},{13,11,72},{141,11,142},{135,11,1830},{142,
-0,164},{5,0,57},{6,0,101},{6,0,586},{6,0,1663},{7,0,132},{7,0,1154},{7,0,1415},{
-7,0,1507},{12,0,493},{15,0,105},{151,0,15},{5,0,459},{7,0,1073},{8,0,241},{136,0
-,334},{133,11,826},{133,10,108},{5,10,219},{10,11,132},{11,11,191},{11,11,358},{
-139,11,460},{6,0,324},{6,0,520},{7,0,338},{7,0,1729},{8,0,228},{139,0,750},{21,0
-,30},{22,0,53},{4,10,193},{5,10,916},{7,10,364},{10,10,398},{10,10,726},{11,10,
-317},{11,10,626},{12,10,142},{12,10,288},{12,10,678},{13,10,313},{15,10,113},{
-146,10,114},{6,11,110},{135,11,1681},{135,0,910},{6,10,241},{7,10,907},{8,10,832
-},{9,10,342},{10,10,729},{11,10,284},{11,10,445},{11,10,651},{11,10,863},{13,10,
-398},{146,10,99},{7,0,705},{9,0,734},{5,11,1000},{7,11,733},{137,11,583},{4,0,73
-},{6,0,612},{7,0,927},{7,0,1822},{8,0,217},{9,0,765},{9,0,766},{10,0,408},{11,0,
-51},{11,0,793},{12,0,266},{15,0,158},{20,0,89},{150,0,32},{7,0,1330},{4,11,297},
-{6,11,529},{7,11,152},{7,11,713},{7,11,1845},{8,11,710},{8,11,717},{140,11,639},
-{5,0,389},{136,0,636},{134,0,1409},{4,10,562},{9,10,254},{139,10,879},{134,0,893
-},{132,10,786},{4,11,520},{135,11,575},{136,0,21},{140,0,721},{136,0,959},{7,11,
-1428},{7,11,1640},{9,11,169},{9,11,182},{9,11,367},{9,11,478},{9,11,506},{9,11,
-551},{9,11,648},{9,11,651},{9,11,697},{9,11,705},{9,11,725},{9,11,787},{9,11,794
-},{10,11,198},{10,11,214},{10,11,267},{10,11,275},{10,11,456},{10,11,551},{10,11
-,561},{10,11,613},{10,11,627},{10,11,668},{10,11,675},{10,11,691},{10,11,695},{
-10,11,707},{10,11,715},{11,11,183},{11,11,201},{11,11,244},{11,11,262},{11,11,
-352},{11,11,439},{11,11,493},{11,11,572},{11,11,591},{11,11,608},{11,11,611},{11
-,11,646},{11,11,674},{11,11,711},{11,11,751},{11,11,761},{11,11,776},{11,11,785}
-,{11,11,850},{11,11,853},{11,11,862},{11,11,865},{11,11,868},{11,11,898},{11,11,
-902},{11,11,903},{11,11,910},{11,11,932},{11,11,942},{11,11,957},{11,11,967},{11
-,11,972},{12,11,148},{12,11,195},{12,11,220},{12,11,237},{12,11,318},{12,11,339}
-,{12,11,393},{12,11,445},{12,11,450},{12,11,474},{12,11,509},{12,11,533},{12,11,
-591},{12,11,594},{12,11,597},{12,11,621},{12,11,633},{12,11,642},{13,11,59},{13,
-11,60},{13,11,145},{13,11,239},{13,11,250},{13,11,273},{13,11,329},{13,11,344},{
-13,11,365},{13,11,372},{13,11,387},{13,11,403},{13,11,414},{13,11,456},{13,11,
-478},{13,11,483},{13,11,489},{14,11,55},{14,11,57},{14,11,81},{14,11,90},{14,11,
-148},{14,11,239},{14,11,266},{14,11,321},{14,11,326},{14,11,327},{14,11,330},{14
-,11,347},{14,11,355},{14,11,401},{14,11,411},{14,11,414},{14,11,416},{14,11,420}
-,{15,11,61},{15,11,74},{15,11,87},{15,11,88},{15,11,94},{15,11,96},{15,11,116},{
-15,11,149},{15,11,154},{16,11,50},{16,11,63},{16,11,73},{17,11,2},{17,11,66},{17
-,11,92},{17,11,103},{17,11,112},{18,11,50},{18,11,54},{18,11,82},{18,11,86},{18,
-11,90},{18,11,111},{18,11,115},{18,11,156},{19,11,40},{19,11,79},{20,11,78},{149
-,11,22},{137,11,170},{134,0,1433},{135,11,1307},{139,11,411},{5,0,189},{7,0,442}
-,{7,0,443},{8,0,281},{12,0,174},{141,0,261},{6,10,216},{7,10,901},{7,10,1343},{
-136,10,493},{5,11,397},{6,11,154},{7,10,341},{7,11,676},{8,11,443},{8,11,609},{9
-,11,24},{9,11,325},{10,11,35},{11,10,219},{11,11,535},{11,11,672},{11,11,1018},{
-12,11,637},{144,11,30},{6,0,2},{7,0,191},{7,0,446},{7,0,1262},{7,0,1737},{8,0,22
-},{8,0,270},{8,0,612},{9,0,4},{9,0,312},{9,0,436},{9,0,626},{10,0,216},{10,0,311
-},{10,0,521},{10,0,623},{11,0,72},{11,0,330},{11,0,455},{12,0,321},{12,0,504},{
-12,0,530},{12,0,543},{13,0,17},{13,0,156},{13,0,334},{14,0,131},{17,0,60},{148,0
-,64},{7,0,354},{10,0,410},{139,0,815},{139,10,130},{7,10,1734},{137,11,631},{12,
-0,425},{15,0,112},{10,10,115},{11,10,420},{13,10,404},{14,10,346},{143,10,54},{6
-,0,60},{6,0,166},{7,0,374},{7,0,670},{7,0,1327},{8,0,411},{8,0,435},{9,0,653},{9
-,0,740},{10,0,385},{11,0,222},{11,0,324},{11,0,829},{140,0,611},{7,0,1611},{13,0
-,14},{15,0,44},{19,0,13},{148,0,76},{133,11,981},{4,11,56},{7,11,1791},{8,11,607
-},{8,11,651},{11,11,465},{11,11,835},{12,11,337},{141,11,480},{6,0,1478},{5,10,
-1011},{136,10,701},{139,0,596},{5,0,206},{134,0,398},{4,10,54},{5,10,666},{7,10,
-1039},{7,10,1130},{9,10,195},{138,10,302},{7,0,50},{9,11,158},{138,11,411},{135,
-11,1120},{6,0,517},{7,0,1159},{10,0,621},{11,0,192},{134,10,1669},{4,0,592},{6,0
-,600},{135,0,1653},{10,0,223},{139,0,645},{136,11,139},{7,0,64},{136,0,245},{142
-,0,278},{6,11,622},{135,11,1030},{136,0,604},{134,0,1502},{138,0,265},{141,11,
-168},{7,0,1763},{140,0,310},{7,10,798},{139,11,719},{7,11,160},{10,11,624},{142,
-11,279},{132,11,363},{7,10,122},{9,10,259},{10,10,84},{11,10,470},{12,10,541},{
-141,10,379},{5,0,129},{6,0,61},{135,0,947},{134,0,1356},{135,11,1191},{13,0,505}
-,{141,0,506},{11,0,1000},{5,10,82},{5,10,131},{7,10,1755},{8,10,31},{9,10,168},{
-9,10,764},{139,10,869},{134,0,966},{134,10,605},{134,11,292},{5,11,177},{6,11,
-616},{7,11,827},{9,11,525},{138,11,656},{135,11,1486},{138,11,31},{5,10,278},{
-137,10,68},{4,10,163},{5,10,201},{5,10,307},{5,10,310},{6,10,335},{7,10,284},{
-136,10,165},{6,0,839},{135,10,1660},{136,10,781},{6,10,33},{135,10,1244},{133,0,
-637},{4,11,161},{133,11,631},{137,0,590},{7,10,1953},{136,10,720},{5,0,280},{7,0
-,1226},{138,10,203},{134,0,1386},{5,0,281},{6,0,1026},{6,10,326},{7,10,677},{137
-,10,425},{7,11,1557},{135,11,1684},{135,0,1064},{9,11,469},{9,11,709},{12,11,512
-},{14,11,65},{145,11,12},{134,0,917},{10,11,229},{11,11,73},{11,11,376},{139,11,
-433},{7,0,555},{9,0,192},{13,0,30},{13,0,49},{15,0,150},{16,0,76},{20,0,52},{7,
-10,1316},{7,10,1412},{7,10,1839},{9,10,589},{11,10,241},{11,10,676},{11,10,811},
-{11,10,891},{12,10,140},{12,10,346},{12,10,479},{13,10,381},{14,10,188},{146,10,
-30},{149,0,15},{6,0,1882},{6,0,1883},{6,0,1897},{9,0,945},{9,0,1014},{9,0,1020},
-{12,0,823},{12,0,842},{12,0,866},{12,0,934},{15,0,242},{146,0,208},{6,0,965},{
-134,0,1499},{7,0,33},{7,0,120},{8,0,489},{9,0,319},{10,0,820},{11,0,1004},{12,0,
-379},{12,0,679},{13,0,117},{13,0,412},{14,0,25},{15,0,52},{15,0,161},{16,0,47},{
-149,0,2},{6,11,558},{7,11,651},{8,11,421},{9,11,0},{138,11,34},{4,0,937},{5,0,
-801},{7,0,473},{5,10,358},{7,10,1184},{10,10,662},{13,10,212},{13,10,304},{13,10
-,333},{145,10,98},{132,0,877},{6,0,693},{134,0,824},{132,0,365},{7,11,1832},{138
-,11,374},{5,0,7},{139,0,774},{4,0,734},{5,0,662},{134,0,430},{4,0,746},{135,0,
-1090},{5,0,360},{8,0,237},{10,0,231},{147,0,124},{138,11,348},{6,11,6},{7,11,81}
-,{7,11,771},{7,11,1731},{9,11,405},{138,11,421},{6,0,740},{137,0,822},{133,10,
-946},{7,0,1485},{136,0,929},{7,10,411},{8,10,631},{9,10,323},{10,10,355},{11,10,
-491},{12,10,143},{12,10,402},{13,10,73},{14,10,408},{15,10,107},{146,10,71},{135
-,10,590},{5,11,881},{133,11,885},{150,11,25},{4,0,852},{5,11,142},{134,11,546},{
-7,10,1467},{8,10,328},{10,10,544},{11,10,955},{13,10,320},{145,10,83},{9,0,17},{
-10,0,291},{11,10,511},{13,10,394},{14,10,298},{14,10,318},{146,10,103},{5,11,466
-},{11,11,571},{12,11,198},{13,11,283},{14,11,186},{15,11,21},{143,11,103},{134,0
-,1001},{4,11,185},{5,11,257},{5,11,839},{5,11,936},{7,11,171},{9,11,399},{10,11,
-258},{10,11,395},{10,11,734},{11,11,1014},{12,11,23},{13,11,350},{14,11,150},{
-147,11,6},{143,0,35},{132,0,831},{5,10,835},{134,10,483},{4,0,277},{5,0,608},{6,
-0,493},{7,0,457},{12,0,384},{7,11,404},{7,11,1377},{7,11,1430},{7,11,2017},{8,11
-,149},{8,11,239},{8,11,512},{8,11,793},{8,11,818},{9,11,474},{9,11,595},{10,11,
-122},{10,11,565},{10,11,649},{10,11,783},{11,11,239},{11,11,295},{11,11,447},{11
-,11,528},{11,11,639},{11,11,800},{11,11,936},{12,11,25},{12,11,73},{12,11,77},{
-12,11,157},{12,11,316},{12,11,390},{12,11,391},{12,11,394},{12,11,395},{12,11,
-478},{12,11,503},{12,11,592},{12,11,680},{13,11,50},{13,11,53},{13,11,132},{13,
-11,198},{13,11,275},{13,11,322},{13,11,415},{14,11,71},{14,11,257},{14,11,395},{
-15,11,71},{15,11,136},{17,11,123},{18,11,93},{147,11,58},{134,0,1351},{7,0,27},{
-135,0,316},{136,11,712},{136,0,984},{133,0,552},{137,0,264},{132,0,401},{6,0,710
-},{6,0,1111},{134,0,1343},{134,0,1211},{9,0,543},{10,0,524},{11,0,108},{11,0,653
-},{12,0,524},{13,0,123},{14,0,252},{16,0,18},{19,0,38},{20,0,26},{20,0,65},{21,0
-,3},{151,0,11},{4,0,205},{5,0,623},{7,0,104},{8,0,519},{137,0,716},{132,10,677},
-{4,11,377},{152,11,13},{135,11,1673},{7,0,579},{9,0,41},{9,0,244},{9,0,669},{10,
-0,5},{11,0,861},{11,0,951},{139,0,980},{132,0,717},{136,0,1011},{132,0,805},{4,
-11,180},{135,11,1906},{132,10,777},{132,10,331},{132,0,489},{6,0,1024},{4,11,491
-},{133,10,747},{135,11,1182},{4,11,171},{138,11,234},{4,11,586},{7,11,1186},{138
-,11,631},{135,0,892},{135,11,336},{9,11,931},{10,11,334},{148,11,71},{137,0,473}
-,{6,0,864},{12,0,659},{139,11,926},{7,0,819},{9,0,26},{9,0,392},{10,0,152},{10,0
-,226},{11,0,19},{12,0,276},{12,0,426},{12,0,589},{13,0,460},{15,0,97},{19,0,48},
-{148,0,104},{135,0,51},{133,10,326},{4,10,691},{146,10,16},{9,0,130},{11,0,765},
-{10,10,680},{10,10,793},{141,10,357},{133,11,765},{8,0,229},{6,10,32},{7,10,385}
-,{7,10,757},{7,10,1916},{8,10,94},{8,10,711},{9,10,541},{10,10,162},{10,10,795},
-{11,10,989},{11,10,1010},{12,10,14},{142,10,308},{7,11,474},{137,11,578},{132,0,
-674},{132,0,770},{5,0,79},{7,0,1027},{7,0,1477},{139,0,52},{133,11,424},{134,0,
-1666},{6,0,409},{6,10,349},{6,10,1682},{7,10,1252},{8,10,112},{8,11,714},{9,10,
-435},{9,10,668},{10,10,290},{10,10,319},{10,10,815},{11,10,180},{11,10,837},{12,
-10,240},{13,10,152},{13,10,219},{142,10,158},{5,0,789},{134,0,195},{4,0,251},{4,
-0,688},{7,0,513},{135,0,1284},{132,10,581},{9,11,420},{10,11,269},{10,11,285},{
-10,11,576},{11,11,397},{13,11,175},{145,11,90},{6,10,126},{7,10,573},{8,10,397},
-{142,10,44},{132,11,429},{133,0,889},{4,0,160},{5,0,330},{7,0,1434},{136,0,174},
-{7,11,18},{7,11,699},{7,11,1966},{8,11,752},{9,11,273},{9,11,412},{9,11,703},{10
-,11,71},{10,11,427},{10,11,508},{146,11,97},{6,0,872},{134,0,899},{133,10,926},{
-134,0,1126},{134,0,918},{4,11,53},{5,11,186},{135,11,752},{7,0,268},{136,0,569},
-{134,0,1224},{6,0,1361},{7,10,1232},{137,10,531},{8,11,575},{10,11,289},{139,11,
-319},{133,10,670},{132,11,675},{133,0,374},{135,10,1957},{133,0,731},{11,0,190},
-{15,0,49},{11,11,190},{143,11,49},{4,0,626},{5,0,506},{5,0,642},{6,0,425},{10,0,
-202},{139,0,141},{137,0,444},{7,10,242},{135,10,1942},{6,11,209},{8,11,468},{9,
-11,210},{11,11,36},{12,11,28},{12,11,630},{13,11,21},{13,11,349},{14,11,7},{145,
-11,13},{4,11,342},{135,11,1179},{5,10,834},{7,10,1202},{8,10,14},{9,10,481},{137
-,10,880},{4,11,928},{133,11,910},{4,11,318},{4,11,496},{7,11,856},{139,11,654},{
-136,0,835},{7,0,1526},{138,10,465},{151,0,17},{135,0,477},{4,10,357},{6,10,172},
-{7,10,143},{137,10,413},{6,0,1374},{138,0,994},{18,0,76},{132,10,590},{7,0,287},
-{8,0,355},{9,0,293},{137,0,743},{134,0,1389},{7,11,915},{8,11,247},{147,11,0},{4
-,11,202},{5,11,382},{6,11,454},{7,11,936},{7,11,1803},{8,11,758},{9,11,375},{9,
-11,895},{10,11,743},{10,11,792},{11,11,978},{11,11,1012},{142,11,109},{5,0,384},
-{8,0,455},{140,0,48},{132,11,390},{5,10,169},{7,10,333},{136,10,45},{5,0,264},{
-134,0,184},{138,11,791},{133,11,717},{132,10,198},{6,11,445},{7,11,332},{137,11,
-909},{136,0,1001},{4,10,24},{5,10,140},{5,10,185},{7,10,1500},{11,10,565},{139,
-10,838},{134,11,578},{5,0,633},{6,0,28},{135,0,1323},{132,0,851},{136,11,267},{7
-,0,359},{8,0,243},{140,0,175},{4,10,334},{133,10,593},{141,11,87},{136,11,766},{
-10,0,287},{12,0,138},{10,11,287},{140,11,138},{4,0,105},{132,0,740},{140,10,116}
-,{134,0,857},{135,11,1841},{6,0,1402},{137,0,819},{132,11,584},{132,10,709},{133
-,10,897},{5,0,224},{13,0,174},{146,0,52},{135,10,1840},{4,10,608},{133,10,497},{
-139,11,60},{4,0,758},{135,0,1649},{4,11,226},{4,11,326},{135,11,1770},{5,11,426}
-,{8,11,30},{9,11,2},{11,11,549},{147,11,122},{135,10,2039},{6,10,540},{136,10,
-136},{4,0,573},{8,0,655},{4,10,897},{133,10,786},{7,0,351},{139,0,128},{133,10,
-999},{4,10,299},{135,10,1004},{133,0,918},{132,11,345},{4,11,385},{7,11,265},{
-135,11,587},{133,10,456},{136,10,180},{6,0,687},{134,0,1537},{4,11,347},{5,11,
-423},{5,11,996},{135,11,1329},{132,10,755},{7,11,1259},{9,11,125},{11,11,65},{
-140,11,285},{5,11,136},{6,11,136},{136,11,644},{134,0,1525},{4,0,1009},{135,0,
-1139},{139,10,338},{132,0,340},{135,10,1464},{8,0,847},{10,0,861},{10,0,876},{10
-,0,889},{10,0,922},{10,0,929},{10,0,933},{12,0,784},{140,0,791},{139,0,176},{9,
-11,134},{10,11,2},{10,11,27},{10,11,333},{11,11,722},{143,11,1},{4,11,433},{133,
-11,719},{5,0,985},{7,0,509},{7,0,529},{145,0,96},{132,0,615},{4,10,890},{5,10,
-805},{5,10,819},{5,10,961},{6,10,396},{6,10,1631},{6,10,1678},{7,10,1967},{7,10,
-2041},{9,10,630},{11,10,8},{11,10,1019},{12,10,176},{13,10,225},{14,10,292},{149
-,10,24},{135,0,1919},{134,0,1131},{144,11,21},{144,11,51},{135,10,1815},{4,0,247
-},{7,10,1505},{10,10,190},{10,10,634},{11,10,792},{12,10,358},{140,10,447},{5,10
-,0},{6,10,536},{7,10,604},{13,10,445},{145,10,126},{4,0,184},{5,0,390},{6,0,337}
-,{7,0,23},{7,0,494},{7,0,618},{7,0,1456},{8,0,27},{8,0,599},{10,0,153},{139,0,
-710},{6,10,232},{6,10,412},{7,10,1074},{8,10,9},{8,10,157},{8,10,786},{9,10,196}
-,{9,10,352},{9,10,457},{10,10,337},{11,10,232},{11,10,877},{12,10,480},{140,10,
-546},{13,0,38},{135,10,958},{4,10,382},{136,10,579},{4,10,212},{135,10,1206},{4,
-11,555},{8,11,536},{138,11,288},{11,11,139},{139,11,171},{9,11,370},{138,11,90},
-{132,0,1015},{134,0,1088},{5,10,655},{135,11,977},{134,0,1585},{17,10,67},{147,
-10,74},{10,0,227},{11,0,497},{11,0,709},{140,0,415},{6,0,360},{7,0,1664},{136,0,
-478},{7,0,95},{6,10,231},{136,10,423},{140,11,65},{4,11,257},{135,11,2031},{135,
-11,1768},{133,10,300},{139,11,211},{136,0,699},{6,10,237},{7,10,611},{8,10,100},
-{9,10,416},{11,10,335},{12,10,173},{146,10,101},{14,0,26},{146,0,150},{6,0,581},
-{135,0,1119},{135,10,1208},{132,0,739},{6,11,83},{6,11,1733},{135,11,1389},{137,
-0,869},{4,0,67},{5,0,422},{7,0,1037},{7,0,1289},{7,0,1555},{9,0,741},{145,0,108}
-,{133,10,199},{12,10,427},{146,10,38},{136,0,464},{142,0,42},{10,0,96},{8,11,501
-},{137,11,696},{134,11,592},{4,0,512},{4,0,966},{5,0,342},{6,0,1855},{8,0,869},{
-8,0,875},{8,0,901},{144,0,26},{8,0,203},{11,0,823},{11,0,846},{12,0,482},{13,0,
-277},{13,0,302},{13,0,464},{14,0,205},{142,0,221},{4,0,449},{133,0,718},{7,11,
-1718},{9,11,95},{9,11,274},{10,11,279},{10,11,317},{10,11,420},{11,11,303},{11,
-11,808},{12,11,134},{12,11,367},{13,11,149},{13,11,347},{14,11,349},{14,11,406},
-{18,11,22},{18,11,89},{18,11,122},{147,11,47},{133,11,26},{4,0,355},{6,0,311},{9
-,0,256},{138,0,404},{132,11,550},{10,0,758},{6,10,312},{6,10,1715},{10,10,584},{
-11,10,546},{11,10,692},{12,10,259},{12,10,295},{13,10,46},{141,10,154},{136,11,
-822},{5,0,827},{4,11,902},{5,11,809},{6,11,122},{135,11,896},{5,0,64},{140,0,581
-},{4,0,442},{6,0,739},{7,0,1047},{7,0,1352},{7,0,1643},{7,11,1911},{9,11,449},{
-10,11,192},{138,11,740},{135,11,262},{132,10,588},{133,11,620},{5,0,977},{6,0,
-288},{7,0,528},{4,11,34},{5,11,574},{7,11,279},{7,11,1624},{136,11,601},{6,0,
-1375},{4,10,231},{5,10,61},{6,10,104},{7,10,729},{7,10,964},{7,10,1658},{140,10,
-414},{6,10,263},{138,10,757},{132,10,320},{4,0,254},{7,0,1309},{5,11,332},{135,
-11,1309},{6,11,261},{8,11,182},{139,11,943},{132,10,225},{6,0,12},{135,0,1219},{
-4,0,275},{12,0,376},{6,11,1721},{141,11,490},{4,11,933},{133,11,880},{6,0,951},{
-6,0,1109},{6,0,1181},{7,0,154},{4,10,405},{7,10,817},{14,10,58},{17,10,37},{146,
-10,124},{6,0,1520},{133,10,974},{134,0,1753},{6,0,369},{6,0,502},{7,0,1036},{8,0
-,348},{9,0,452},{10,0,26},{11,0,224},{11,0,387},{11,0,772},{12,0,95},{12,0,629},
-{13,0,195},{13,0,207},{13,0,241},{14,0,260},{14,0,270},{143,0,140},{132,0,269},{
-5,0,480},{7,0,532},{7,0,1197},{7,0,1358},{8,0,291},{11,0,349},{142,0,396},{5,10,
-235},{7,10,1239},{11,10,131},{140,10,370},{7,10,956},{7,10,1157},{7,10,1506},{7,
-10,1606},{7,10,1615},{7,10,1619},{7,10,1736},{7,10,1775},{8,10,590},{9,10,324},{
-9,10,736},{9,10,774},{9,10,776},{9,10,784},{10,10,567},{10,10,708},{11,10,518},{
-11,10,613},{11,10,695},{11,10,716},{11,10,739},{11,10,770},{11,10,771},{11,10,
-848},{11,10,857},{11,10,931},{11,10,947},{12,10,326},{12,10,387},{12,10,484},{12
-,10,528},{12,10,552},{12,10,613},{13,10,189},{13,10,256},{13,10,340},{13,10,432}
-,{13,10,436},{13,10,440},{13,10,454},{14,10,174},{14,10,220},{14,10,284},{14,10,
-390},{145,10,121},{8,11,598},{9,11,664},{138,11,441},{9,10,137},{138,10,221},{
-133,11,812},{148,0,15},{134,0,1341},{6,0,1017},{4,11,137},{7,11,1178},{135,11,
-1520},{7,10,390},{138,10,140},{7,11,1260},{135,11,1790},{137,11,191},{135,10,
-1144},{6,0,1810},{7,0,657},{8,0,886},{10,0,857},{14,0,440},{144,0,96},{8,0,533},
-{6,11,1661},{7,11,1975},{7,11,2009},{135,11,2011},{6,0,1453},{134,10,464},{132,
-11,715},{5,10,407},{11,10,204},{11,10,243},{11,10,489},{12,10,293},{19,10,37},{
-20,10,73},{150,10,38},{133,11,703},{4,0,211},{7,0,1483},{5,10,325},{8,10,5},{8,
-10,227},{9,10,105},{10,10,585},{140,10,614},{4,0,332},{5,0,335},{6,0,238},{7,0,
-269},{7,0,811},{7,0,1797},{8,0,836},{9,0,507},{141,0,242},{5,11,89},{7,11,1915},
-{9,11,185},{9,11,235},{9,11,496},{10,11,64},{10,11,270},{10,11,403},{10,11,469},
-{10,11,529},{10,11,590},{11,11,140},{11,11,860},{13,11,1},{13,11,422},{14,11,341
-},{14,11,364},{17,11,93},{18,11,113},{19,11,97},{147,11,113},{133,11,695},{16,0,
-19},{5,11,6},{6,11,183},{6,10,621},{7,11,680},{7,11,978},{7,11,1013},{7,11,1055}
-,{12,11,230},{13,11,172},{13,10,504},{146,11,29},{136,0,156},{133,0,1009},{6,11,
-29},{139,11,63},{134,0,820},{134,10,218},{7,10,454},{7,10,782},{8,10,768},{140,
-10,686},{5,0,228},{6,0,203},{7,0,156},{8,0,347},{9,0,265},{18,0,39},{20,0,54},{
-21,0,31},{22,0,3},{23,0,0},{15,11,8},{18,11,39},{20,11,54},{21,11,31},{22,11,3},
-{151,11,0},{7,0,1131},{135,0,1468},{144,10,0},{134,0,1276},{10,10,676},{140,10,
-462},{132,11,311},{134,11,1740},{7,11,170},{8,11,90},{8,11,177},{8,11,415},{11,
-11,714},{142,11,281},{134,10,164},{6,0,1792},{138,0,849},{150,10,50},{5,0,291},{
-5,0,318},{7,0,765},{9,0,389},{12,0,548},{8,11,522},{142,11,328},{11,11,91},{13,
-11,129},{15,11,101},{145,11,125},{4,11,494},{6,11,74},{7,11,44},{7,11,407},{8,11
-,551},{12,11,17},{15,11,5},{148,11,11},{4,11,276},{133,11,296},{6,10,343},{7,10,
-195},{7,11,1777},{9,10,226},{10,10,197},{10,10,575},{11,10,502},{139,10,899},{10
-,0,525},{139,0,82},{14,0,453},{4,11,7},{5,11,90},{5,11,158},{6,11,542},{7,11,221
-},{7,11,1574},{9,11,490},{10,11,540},{11,11,443},{139,11,757},{135,0,666},{22,10
-,29},{150,11,29},{4,0,422},{147,10,8},{5,0,355},{145,0,0},{6,0,1873},{9,0,918},{
-7,11,588},{9,11,175},{138,11,530},{143,11,31},{11,0,165},{7,10,1125},{9,10,143},
-{14,10,405},{150,10,21},{9,0,260},{137,0,905},{5,11,872},{6,11,57},{6,11,479},{6
-,11,562},{7,11,471},{7,11,1060},{9,11,447},{9,11,454},{141,11,6},{138,11,704},{
-133,0,865},{5,0,914},{134,0,1625},{133,0,234},{7,0,1383},{5,11,31},{6,11,614},{
-145,11,61},{7,11,1200},{138,11,460},{6,11,424},{135,11,1866},{136,0,306},{5,10,
-959},{12,11,30},{13,11,148},{14,11,87},{14,11,182},{16,11,42},{18,11,92},{148,11
-,70},{6,0,1919},{6,0,1921},{9,0,923},{9,0,930},{9,0,941},{9,0,949},{9,0,987},{9,
-0,988},{9,0,992},{12,0,802},{12,0,815},{12,0,856},{12,0,885},{12,0,893},{12,0,
-898},{12,0,919},{12,0,920},{12,0,941},{12,0,947},{15,0,183},{15,0,185},{15,0,189
-},{15,0,197},{15,0,202},{15,0,233},{18,0,218},{18,0,219},{18,0,233},{143,11,156}
-,{135,10,1759},{136,10,173},{13,0,163},{13,0,180},{18,0,78},{20,0,35},{5,11,13},
-{134,11,142},{134,10,266},{6,11,97},{7,11,116},{8,11,322},{8,11,755},{9,11,548},
-{10,11,714},{11,11,884},{141,11,324},{135,0,1312},{9,0,814},{137,11,676},{133,0,
-707},{135,0,1493},{6,0,421},{7,0,61},{7,0,1540},{10,0,11},{138,0,501},{12,0,733}
-,{12,0,766},{7,11,866},{135,11,1163},{137,0,341},{142,0,98},{145,11,115},{135,11
-,1111},{136,10,300},{136,0,1014},{8,11,1},{9,11,112},{138,11,326},{132,11,730},{
-5,11,488},{6,11,527},{7,11,489},{7,11,1636},{8,11,121},{8,11,144},{8,11,359},{9,
-11,193},{9,11,241},{9,11,336},{9,11,882},{11,11,266},{11,11,372},{11,11,944},{12
-,11,401},{140,11,641},{6,0,971},{134,0,1121},{6,0,102},{7,0,72},{15,0,142},{147,
-0,67},{151,0,30},{135,0,823},{134,0,1045},{5,10,427},{5,10,734},{7,10,478},{136,
-10,52},{7,0,1930},{11,10,217},{142,10,165},{6,0,1512},{135,0,1870},{9,11,31},{10
-,11,244},{10,11,699},{12,11,149},{141,11,497},{133,11,377},{145,11,101},{10,11,
-158},{13,11,13},{13,11,137},{13,11,258},{14,11,111},{14,11,225},{14,11,253},{14,
-11,304},{14,11,339},{14,11,417},{146,11,33},{6,0,87},{6,10,1734},{7,10,20},{7,10
-,1056},{8,10,732},{9,10,406},{9,10,911},{138,10,694},{134,0,1243},{137,0,245},{7
-,0,68},{8,0,48},{8,0,88},{8,0,582},{8,0,681},{9,0,373},{9,0,864},{11,0,157},{11,
-0,336},{11,0,843},{148,0,27},{8,11,663},{144,11,8},{133,10,613},{4,0,88},{5,0,
-137},{5,0,174},{5,0,777},{6,0,1664},{6,0,1725},{7,0,77},{7,0,426},{7,0,1317},{7,
-0,1355},{8,0,126},{8,0,563},{9,0,523},{9,0,750},{10,0,310},{10,0,836},{11,0,42},
-{11,0,318},{11,0,731},{12,0,68},{12,0,92},{12,0,507},{12,0,692},{13,0,81},{13,0,
-238},{13,0,374},{14,0,436},{18,0,138},{19,0,78},{19,0,111},{20,0,55},{20,0,77},{
-148,0,92},{141,0,418},{4,0,938},{137,0,625},{138,0,351},{5,11,843},{7,10,32},{7,
-10,984},{8,10,85},{8,10,709},{9,10,579},{9,10,847},{9,10,856},{10,10,799},{11,10
-,258},{11,10,1007},{12,10,331},{12,10,615},{13,10,188},{13,10,435},{14,10,8},{15
-,10,165},{16,10,27},{148,10,40},{6,0,1668},{7,0,1499},{8,0,117},{9,0,314},{138,0
-,174},{135,0,707},{132,11,554},{133,11,536},{5,0,403},{5,11,207},{9,11,79},{11,
-11,625},{145,11,7},{132,11,424},{136,11,785},{4,10,167},{135,10,82},{9,0,7},{23,
-0,6},{9,11,7},{151,11,6},{6,0,282},{5,10,62},{6,10,534},{7,10,74},{7,10,678},{7,
-10,684},{7,10,1043},{7,10,1072},{8,10,280},{8,10,541},{8,10,686},{9,10,258},{10,
-10,519},{11,10,252},{140,10,282},{138,10,33},{132,10,359},{4,0,44},{5,0,311},{6,
-0,156},{7,0,639},{7,0,762},{7,0,1827},{9,0,8},{9,0,462},{148,0,83},{7,11,769},{9
-,11,18},{138,11,358},{4,0,346},{7,0,115},{9,0,180},{9,0,456},{10,0,363},{4,11,
-896},{134,11,1777},{133,10,211},{7,0,761},{7,0,1051},{137,0,545},{6,10,145},{141
-,10,336},{7,11,750},{9,11,223},{11,11,27},{11,11,466},{12,11,624},{14,11,265},{
-146,11,61},{6,0,752},{6,0,768},{6,0,1195},{6,0,1254},{6,0,1619},{137,0,835},{6,0
-,1936},{8,0,930},{136,0,960},{132,10,263},{132,11,249},{12,0,653},{132,10,916},{
-4,11,603},{133,11,661},{8,0,344},{4,11,11},{6,11,128},{7,11,231},{7,11,1533},{
-138,11,725},{134,0,1483},{134,0,875},{6,0,185},{7,0,1899},{9,0,875},{139,0,673},
-{15,10,155},{144,10,79},{7,0,93},{7,0,210},{7,0,1223},{8,0,451},{8,0,460},{11,0,
-353},{11,0,475},{4,10,599},{6,10,1634},{7,10,67},{7,10,691},{7,10,979},{7,10,
-1697},{8,10,207},{8,10,214},{8,10,231},{8,10,294},{8,10,336},{8,10,428},{8,10,
-471},{8,10,622},{8,10,626},{8,10,679},{8,10,759},{8,10,829},{9,10,11},{9,10,246}
-,{9,10,484},{9,10,573},{9,10,706},{9,10,762},{9,10,798},{9,10,855},{9,10,870},{9
-,10,912},{10,10,303},{10,10,335},{10,10,424},{10,10,461},{10,10,543},{10,10,759}
-,{10,10,814},{11,10,59},{11,10,235},{11,10,590},{11,10,929},{11,10,963},{11,10,
-987},{12,10,114},{12,10,182},{12,10,226},{12,10,332},{12,10,439},{12,10,575},{12
-,10,598},{12,10,675},{13,10,8},{13,10,125},{13,10,194},{13,10,287},{14,10,197},{
-14,10,383},{15,10,53},{17,10,63},{19,10,46},{19,10,98},{19,10,106},{148,10,85},{
-132,11,476},{4,0,327},{5,0,478},{7,0,1332},{136,0,753},{5,0,1020},{133,0,1022},{
-135,11,1807},{4,0,103},{133,0,401},{4,0,499},{135,0,1421},{10,0,207},{13,0,164},
-{147,10,126},{9,11,20},{10,11,324},{139,11,488},{132,0,96},{9,11,280},{138,11,
-134},{135,0,968},{133,10,187},{135,10,1286},{5,11,112},{6,11,103},{134,11,150},{
-8,0,914},{10,0,3},{4,10,215},{9,10,38},{11,10,23},{11,10,127},{139,10,796},{135,
-0,399},{6,0,563},{137,0,224},{6,0,704},{134,0,1214},{4,11,708},{8,11,15},{9,11,
-50},{9,11,386},{11,11,18},{11,11,529},{140,11,228},{4,11,563},{7,11,109},{7,11,
-592},{7,11,637},{7,11,770},{7,11,1701},{8,11,436},{8,11,463},{9,11,60},{9,11,335
-},{9,11,904},{10,11,73},{11,11,434},{12,11,585},{13,11,331},{18,11,110},{148,11,
-60},{134,0,1559},{132,11,502},{6,11,347},{138,11,161},{4,11,33},{5,11,102},{5,11
-,500},{6,11,284},{7,11,1079},{7,11,1423},{7,11,1702},{8,11,470},{9,11,554},{9,11
-,723},{139,11,333},{7,11,246},{135,11,840},{6,11,10},{8,11,571},{9,11,739},{143,
-11,91},{8,0,861},{10,0,905},{12,0,730},{12,0,789},{133,11,626},{134,0,946},{5,0,
-746},{12,0,333},{14,0,332},{12,11,333},{142,11,332},{5,11,18},{6,11,526},{13,11,
-24},{13,11,110},{19,11,5},{147,11,44},{4,0,910},{5,0,832},{135,10,2002},{10,11,
-768},{139,11,787},{4,11,309},{5,11,462},{7,11,970},{135,11,1097},{4,10,28},{5,10
-,440},{7,10,248},{11,10,833},{140,10,344},{134,10,1654},{6,0,632},{6,0,652},{6,0
-,1272},{6,0,1384},{134,0,1560},{134,11,1704},{6,0,1393},{133,10,853},{6,10,249},
-{7,10,1234},{139,10,573},{5,11,86},{7,11,743},{9,11,85},{10,11,281},{10,11,432},
-{11,11,490},{12,11,251},{13,11,118},{14,11,378},{146,11,143},{5,11,524},{133,11,
-744},{134,0,1514},{10,0,201},{142,0,319},{7,0,717},{10,0,510},{7,10,392},{8,10,
-20},{8,10,172},{8,10,690},{9,10,383},{9,10,845},{11,10,293},{11,10,832},{11,10,
-920},{11,10,984},{141,10,221},{134,0,1381},{5,10,858},{133,10,992},{8,0,528},{
-137,0,348},{10,11,107},{140,11,436},{4,0,20},{133,0,616},{134,0,1251},{132,11,
-927},{10,11,123},{12,11,670},{13,11,371},{14,11,142},{146,11,94},{134,0,1163},{7
-,11,1149},{137,11,156},{134,0,307},{133,11,778},{7,0,1091},{135,0,1765},{5,11,
-502},{6,10,268},{137,10,62},{8,11,196},{10,11,283},{139,11,406},{4,0,26},{5,0,
-429},{6,0,245},{7,0,704},{7,0,1379},{135,0,1474},{133,11,855},{132,0,881},{4,0,
-621},{135,11,1596},{7,11,1400},{9,11,446},{138,11,45},{6,0,736},{138,10,106},{
-133,0,542},{134,0,348},{133,0,868},{136,0,433},{135,0,1495},{138,0,771},{6,10,
-613},{136,10,223},{138,0,215},{141,0,124},{136,11,391},{135,11,172},{132,10,670}
-,{140,0,55},{9,10,40},{139,10,136},{7,0,62},{147,0,112},{132,0,856},{132,11,568}
-,{12,0,270},{139,10,259},{8,0,572},{137,0,698},{4,11,732},{9,10,310},{137,10,682
-},{142,10,296},{134,0,939},{136,11,733},{135,11,1435},{7,10,1401},{135,10,1476},
-{6,0,352},{4,10,296},{7,10,401},{7,10,1410},{7,10,1594},{7,10,1674},{8,10,63},{8
-,10,660},{137,10,74},{4,11,428},{133,11,668},{4,10,139},{4,10,388},{140,10,188},
-{7,11,2015},{140,11,665},{132,0,647},{146,0,10},{138,0,220},{142,0,464},{132,0,
-109},{134,0,1746},{6,0,515},{4,10,747},{6,11,1623},{6,11,1681},{7,10,649},{7,10,
-1479},{135,10,1583},{133,10,232},{135,0,566},{137,10,887},{4,0,40},{10,0,67},{11
-,0,117},{11,0,768},{139,0,935},{132,0,801},{7,0,992},{8,0,301},{9,0,722},{12,0,
-63},{13,0,29},{14,0,161},{143,0,18},{139,0,923},{6,11,1748},{8,11,715},{9,11,802
-},{10,11,46},{10,11,819},{13,11,308},{14,11,351},{14,11,363},{146,11,67},{137,11
-,745},{7,0,1145},{4,10,14},{7,10,1801},{10,10,748},{141,10,458},{4,11,63},{5,11,
-347},{134,11,474},{135,0,568},{4,10,425},{7,11,577},{7,11,1432},{9,11,475},{9,11
-,505},{9,11,526},{9,11,609},{9,11,689},{9,11,726},{9,11,735},{9,11,738},{10,11,
-556},{10,11,674},{10,11,684},{11,11,89},{11,11,202},{11,11,272},{11,11,380},{11,
-11,415},{11,11,505},{11,11,537},{11,11,550},{11,11,562},{11,11,640},{11,11,667},
-{11,11,688},{11,11,847},{11,11,927},{11,11,930},{11,11,940},{12,11,144},{12,11,
-325},{12,11,329},{12,11,389},{12,11,403},{12,11,451},{12,11,515},{12,11,604},{12
-,11,616},{12,11,626},{13,11,66},{13,11,131},{13,11,167},{13,11,236},{13,11,368},
-{13,11,411},{13,11,434},{13,11,453},{13,11,461},{13,11,474},{14,11,59},{14,11,60
-},{14,11,139},{14,11,152},{14,11,276},{14,11,353},{14,11,402},{15,11,28},{15,11,
-81},{15,11,123},{15,11,152},{18,11,136},{148,11,88},{137,0,247},{135,11,1622},{9
-,11,544},{11,11,413},{144,11,25},{4,0,645},{7,0,825},{6,10,1768},{135,11,89},{
-140,0,328},{5,10,943},{134,10,1779},{134,0,1363},{5,10,245},{6,10,576},{7,10,582
-},{136,10,225},{134,0,1280},{5,11,824},{133,11,941},{7,11,440},{8,11,230},{139,
-11,106},{5,0,28},{6,0,204},{10,0,320},{10,0,583},{13,0,502},{14,0,72},{14,0,274}
-,{14,0,312},{14,0,344},{15,0,159},{16,0,62},{16,0,69},{17,0,30},{18,0,42},{18,0,
-53},{18,0,84},{18,0,140},{19,0,68},{19,0,85},{20,0,5},{20,0,45},{20,0,101},{22,0
-,7},{150,0,20},{4,0,558},{6,0,390},{7,0,162},{7,0,689},{9,0,360},{138,0,653},{
-134,0,764},{6,0,862},{137,0,833},{5,0,856},{6,0,1672},{6,0,1757},{134,0,1781},{5
-,0,92},{10,0,736},{140,0,102},{6,0,1927},{6,0,1944},{8,0,924},{8,0,948},{10,0,
-967},{138,0,978},{134,0,1479},{5,0,590},{8,0,360},{9,0,213},{138,0,63},{134,0,
-1521},{6,0,709},{134,0,891},{132,10,443},{13,0,477},{14,0,120},{148,0,61},{4,11,
-914},{5,11,800},{133,11,852},{10,11,54},{141,11,115},{4,11,918},{133,11,876},{
-139,11,152},{4,11,92},{133,11,274},{135,11,1901},{9,11,800},{10,11,693},{11,11,
-482},{11,11,734},{139,11,789},{9,0,483},{132,10,298},{6,0,1213},{141,11,498},{
-135,11,1451},{133,11,743},{4,0,1022},{10,0,1000},{12,0,957},{12,0,980},{12,0,
-1013},{14,0,481},{144,0,116},{8,0,503},{17,0,29},{4,11,49},{7,11,280},{135,11,
-1633},{135,0,1712},{134,0,466},{136,11,47},{5,10,164},{7,10,121},{142,10,189},{7
-,10,812},{7,10,1261},{7,10,1360},{9,10,632},{140,10,352},{139,10,556},{132,0,731
-},{5,11,272},{5,11,908},{5,11,942},{7,11,1008},{7,11,1560},{8,11,197},{9,11,47},
-{11,11,538},{139,11,742},{4,10,172},{9,10,611},{10,10,436},{12,10,673},{141,10,
-255},{133,10,844},{10,0,484},{11,0,754},{12,0,457},{14,0,171},{14,0,389},{146,0,
-153},{9,10,263},{10,10,147},{138,10,492},{137,11,891},{138,0,241},{133,10,537},{
-6,0,2005},{136,0,964},{137,10,842},{151,11,8},{4,11,407},{132,11,560},{135,11,
-1884},{6,0,1100},{134,0,1242},{135,0,954},{5,10,230},{5,10,392},{6,10,420},{9,10
-,568},{140,10,612},{4,11,475},{11,11,35},{11,11,90},{13,11,7},{13,11,71},{13,11,
-177},{142,11,422},{136,11,332},{135,0,1958},{6,0,549},{8,0,34},{8,0,283},{9,0,
-165},{138,0,475},{10,0,952},{12,0,966},{140,0,994},{5,0,652},{5,0,701},{135,0,
-449},{4,0,655},{7,0,850},{17,0,75},{146,0,137},{4,0,146},{7,0,1618},{8,0,670},{5
-,10,41},{7,10,1459},{7,10,1469},{7,10,1859},{9,10,549},{139,10,905},{133,10,696}
-,{6,0,159},{6,0,364},{7,0,516},{137,0,518},{135,0,1439},{6,11,222},{7,11,636},{7
-,11,1620},{8,11,409},{9,11,693},{139,11,77},{13,0,151},{141,11,45},{6,0,1027},{4
-,11,336},{132,10,771},{139,11,392},{10,11,121},{11,11,175},{149,11,16},{8,0,950}
-,{138,0,983},{133,10,921},{135,0,993},{6,10,180},{7,10,1137},{8,10,751},{139,10,
-805},{7,0,501},{9,0,111},{10,0,141},{11,0,332},{13,0,43},{13,0,429},{14,0,130},{
-14,0,415},{145,0,102},{4,10,183},{5,11,882},{7,10,271},{11,10,824},{11,10,952},{
-13,10,278},{13,10,339},{13,10,482},{14,10,424},{148,10,99},{4,10,19},{5,10,477},
-{5,10,596},{6,10,505},{7,10,1221},{11,10,907},{12,10,209},{141,10,214},{135,10,
-1215},{133,0,452},{132,11,426},{5,0,149},{136,0,233},{133,0,935},{6,11,58},{7,11
-,654},{7,11,745},{7,11,1969},{8,11,240},{8,11,675},{9,11,479},{9,11,731},{10,11,
-330},{10,11,593},{10,11,817},{11,11,32},{11,11,133},{11,11,221},{145,11,68},{12,
-0,582},{18,0,131},{7,11,102},{137,11,538},{136,0,801},{134,10,1645},{132,0,70},{
-6,10,92},{6,10,188},{7,10,1269},{7,10,1524},{7,10,1876},{10,10,228},{139,10,1020
-},{4,10,459},{133,10,966},{138,0,369},{16,0,36},{140,10,330},{141,11,366},{7,0,
-721},{10,0,236},{12,0,204},{6,10,18},{7,10,932},{8,10,757},{9,10,54},{9,10,65},{
-9,10,844},{10,10,113},{10,10,315},{10,10,798},{11,10,153},{12,10,151},{12,10,392
-},{12,10,666},{142,10,248},{7,0,241},{10,0,430},{8,10,548},{9,10,532},{10,10,117
-},{11,10,351},{11,10,375},{143,10,23},{134,10,1742},{133,10,965},{133,11,566},{6
-,11,48},{135,11,63},{134,10,182},{10,10,65},{10,10,488},{138,10,497},{6,11,114},
-{7,11,1224},{7,11,1556},{136,11,3},{134,0,1817},{8,11,576},{137,11,267},{6,0,
-1078},{144,0,16},{9,10,588},{138,10,260},{138,0,1021},{5,0,406},{134,0,2022},{
-133,11,933},{6,0,69},{135,0,117},{7,0,1830},{136,11,427},{4,0,432},{135,0,824},{
-134,10,1786},{133,0,826},{139,11,67},{133,11,759},{135,10,308},{137,0,816},{133,
-0,1000},{4,0,297},{6,0,529},{7,0,152},{7,0,713},{7,0,1845},{8,0,710},{8,0,717},{
-12,0,639},{140,0,685},{7,0,423},{136,10,588},{136,10,287},{136,0,510},{134,0,
-1048},{6,0,618},{7,11,56},{7,11,1989},{8,11,337},{8,11,738},{9,11,600},{10,11,
-483},{12,11,37},{13,11,447},{142,11,92},{4,0,520},{135,0,575},{8,0,990},{138,0,
-977},{135,11,774},{9,11,347},{11,11,24},{140,11,170},{136,11,379},{140,10,290},{
-132,11,328},{4,0,321},{134,0,569},{4,11,101},{135,11,1171},{7,0,723},{7,0,1135},
-{5,11,833},{136,11,744},{7,10,719},{8,10,809},{136,10,834},{8,0,921},{136,10,796
-},{5,10,210},{6,10,213},{7,10,60},{10,10,364},{139,10,135},{5,0,397},{6,0,154},{
-7,0,676},{8,0,443},{8,0,609},{9,0,24},{9,0,325},{10,0,35},{11,0,535},{11,0,672},
-{11,0,1018},{12,0,637},{16,0,30},{5,10,607},{8,10,326},{136,10,490},{4,10,701},{
-5,10,472},{6,11,9},{6,11,397},{7,11,53},{7,11,1742},{9,10,758},{10,11,632},{11,
-11,828},{140,11,146},{135,10,380},{135,10,1947},{148,11,109},{10,10,278},{138,11
-,278},{134,0,856},{7,0,139},{4,10,386},{8,10,405},{8,10,728},{9,10,497},{11,10,
-110},{11,10,360},{15,10,37},{144,10,84},{141,0,282},{133,0,981},{5,0,288},{7,10,
-1452},{7,10,1480},{8,10,634},{140,10,472},{7,0,1890},{8,11,367},{10,11,760},{14,
-11,79},{20,11,17},{152,11,0},{4,10,524},{136,10,810},{4,0,56},{7,0,1791},{8,0,
-607},{8,0,651},{11,0,465},{11,0,835},{12,0,337},{141,0,480},{10,10,238},{141,10,
-33},{11,11,417},{12,11,223},{140,11,265},{9,0,158},{10,0,411},{140,0,261},{133,
-10,532},{133,10,997},{12,11,186},{12,11,292},{14,11,100},{146,11,70},{6,0,1403},
-{136,0,617},{134,0,1205},{139,0,563},{4,0,242},{134,0,333},{4,11,186},{5,11,157}
-,{8,11,168},{138,11,6},{132,0,369},{133,11,875},{5,10,782},{5,10,829},{134,10,
-1738},{134,0,622},{135,11,1272},{6,0,1407},{7,11,111},{136,11,581},{7,10,1823},{
-139,10,693},{7,0,160},{10,0,624},{142,0,279},{132,0,363},{10,11,589},{12,11,111}
-,{13,11,260},{14,11,82},{18,11,63},{147,11,45},{7,11,1364},{7,11,1907},{141,11,
-158},{4,11,404},{4,11,659},{135,11,675},{13,11,211},{14,11,133},{14,11,204},{15,
-11,64},{15,11,69},{15,11,114},{16,11,10},{19,11,23},{19,11,35},{19,11,39},{19,11
-,51},{19,11,71},{19,11,75},{152,11,15},{4,10,78},{5,10,96},{5,10,182},{7,10,1724
-},{7,10,1825},{10,10,394},{10,10,471},{11,10,532},{14,10,340},{145,10,88},{135,
-10,1964},{133,11,391},{11,11,887},{14,11,365},{142,11,375},{5,11,540},{6,11,1697
-},{7,11,222},{136,11,341},{134,11,78},{9,0,601},{9,0,619},{10,0,505},{10,0,732},
-{11,0,355},{140,0,139},{134,0,292},{139,0,174},{5,0,177},{6,0,616},{7,0,827},{9,
-0,525},{138,0,656},{10,0,31},{6,10,215},{7,10,1028},{7,10,1473},{7,10,1721},{9,
-10,424},{138,10,779},{135,10,584},{136,11,293},{134,0,685},{135,11,1868},{133,11
-,460},{7,0,647},{6,10,67},{7,10,1630},{9,10,354},{9,10,675},{10,10,830},{14,10,
-80},{145,10,80},{4,0,161},{133,0,631},{6,10,141},{7,10,225},{9,10,59},{9,10,607}
-,{10,10,312},{11,10,687},{12,10,555},{13,10,373},{13,10,494},{148,10,58},{7,11,
-965},{7,11,1460},{135,11,1604},{136,10,783},{134,11,388},{6,0,722},{6,0,1267},{4
-,11,511},{9,11,333},{9,11,379},{10,11,602},{11,11,441},{11,11,723},{11,11,976},{
-140,11,357},{134,0,1797},{135,0,1684},{9,0,469},{9,0,709},{12,0,512},{14,0,65},{
-17,0,12},{5,11,938},{136,11,707},{7,0,1230},{136,0,531},{10,0,229},{11,0,73},{11
-,0,376},{139,0,433},{12,0,268},{12,0,640},{142,0,119},{7,10,430},{139,10,46},{6,
-0,558},{7,0,651},{8,0,421},{9,0,0},{10,0,34},{139,0,1008},{6,0,106},{7,0,1786},{
-7,0,1821},{9,0,102},{9,0,763},{5,10,602},{7,10,2018},{137,10,418},{5,0,65},{6,0,
-416},{7,0,1720},{7,0,1924},{10,0,109},{11,0,14},{11,0,70},{11,0,569},{11,0,735},
-{15,0,153},{20,0,80},{136,10,677},{135,11,1625},{137,11,772},{136,0,595},{6,11,
-469},{7,11,1709},{138,11,515},{7,0,1832},{138,0,374},{9,0,106},{9,0,163},{9,0,
-296},{10,0,167},{10,0,172},{10,0,777},{139,0,16},{6,0,6},{7,0,81},{7,0,771},{7,0
-,1731},{9,0,405},{138,0,421},{4,11,500},{135,11,938},{5,11,68},{134,11,383},{5,0
-,881},{133,0,885},{6,0,854},{6,0,1132},{6,0,1495},{6,0,1526},{6,0,1533},{134,0,
-1577},{4,11,337},{6,11,353},{7,11,1934},{8,11,488},{137,11,429},{7,11,236},{7,11
-,1795},{8,11,259},{9,11,135},{9,11,177},{10,11,825},{11,11,115},{11,11,370},{11,
-11,405},{11,11,604},{12,11,10},{12,11,667},{12,11,669},{13,11,76},{14,11,310},{
-15,11,76},{15,11,147},{148,11,23},{5,0,142},{134,0,546},{4,11,15},{5,11,22},{6,
-11,244},{7,11,40},{7,11,200},{7,11,906},{7,11,1199},{9,11,616},{10,11,716},{11,
-11,635},{11,11,801},{140,11,458},{5,0,466},{11,0,571},{12,0,198},{13,0,283},{14,
-0,186},{15,0,21},{15,0,103},{135,10,329},{4,0,185},{5,0,257},{5,0,839},{5,0,936}
-,{9,0,399},{10,0,258},{10,0,395},{10,0,734},{11,0,1014},{12,0,23},{13,0,350},{14
-,0,150},{19,0,6},{135,11,1735},{12,11,36},{141,11,337},{5,11,598},{7,11,791},{8,
-11,108},{137,11,123},{132,10,469},{7,0,404},{7,0,1377},{7,0,1430},{7,0,2017},{8,
-0,149},{8,0,239},{8,0,512},{8,0,793},{8,0,818},{9,0,474},{9,0,595},{10,0,122},{
-10,0,565},{10,0,649},{10,0,783},{11,0,239},{11,0,295},{11,0,447},{11,0,528},{11,
-0,639},{11,0,800},{12,0,25},{12,0,77},{12,0,157},{12,0,256},{12,0,316},{12,0,390
-},{12,0,391},{12,0,395},{12,0,478},{12,0,503},{12,0,592},{12,0,680},{13,0,50},{
-13,0,53},{13,0,132},{13,0,198},{13,0,322},{13,0,415},{13,0,511},{14,0,71},{14,0,
-395},{15,0,71},{15,0,136},{17,0,123},{18,0,93},{147,0,58},{136,0,712},{134,10,
-1743},{5,10,929},{6,10,340},{8,10,376},{136,10,807},{6,0,1848},{8,0,860},{10,0,
-856},{10,0,859},{10,0,925},{10,0,941},{140,0,762},{6,0,629},{6,0,906},{9,0,810},
-{140,0,652},{5,10,218},{7,10,1610},{138,10,83},{7,10,1512},{135,10,1794},{4,0,
-377},{24,0,13},{4,11,155},{7,11,1689},{11,10,0},{144,10,78},{4,11,164},{5,11,151
-},{5,11,730},{5,11,741},{7,11,498},{7,11,870},{7,11,1542},{12,11,213},{14,11,36}
-,{14,11,391},{17,11,111},{18,11,6},{18,11,46},{18,11,151},{19,11,36},{20,11,32},
-{20,11,56},{20,11,69},{20,11,102},{21,11,4},{22,11,8},{22,11,10},{22,11,14},{150
-,11,31},{7,0,1842},{133,10,571},{4,10,455},{4,11,624},{135,11,1752},{134,0,1501}
-,{4,11,492},{5,11,451},{6,10,161},{7,10,372},{137,10,597},{132,10,349},{4,0,180}
-,{135,0,1906},{135,11,835},{141,11,70},{132,0,491},{137,10,751},{6,10,432},{139,
-10,322},{4,0,171},{138,0,234},{6,11,113},{135,11,436},{4,0,586},{7,0,1186},{138,
-0,631},{5,10,468},{10,10,325},{11,10,856},{12,10,345},{143,10,104},{5,10,223},{
-10,11,592},{10,11,753},{12,11,317},{12,11,355},{12,11,465},{12,11,469},{12,11,
-560},{12,11,578},{141,11,243},{132,10,566},{135,11,520},{4,10,59},{135,10,1394},
-{6,10,436},{139,10,481},{9,0,931},{10,0,334},{20,0,71},{4,10,48},{5,10,271},{7,
-10,953},{135,11,1878},{11,0,170},{5,10,610},{136,10,457},{133,10,755},{6,0,1587}
-,{135,10,1217},{4,10,197},{149,11,26},{133,11,585},{137,11,521},{133,0,765},{133
-,10,217},{139,11,586},{133,0,424},{9,11,752},{12,11,610},{13,11,431},{16,11,59},
-{146,11,109},{136,0,714},{7,0,685},{132,11,307},{9,0,420},{10,0,269},{10,0,285},
-{10,0,576},{11,0,397},{13,0,175},{145,0,90},{132,0,429},{133,11,964},{9,11,463},
-{138,11,595},{7,0,18},{7,0,699},{7,0,1966},{8,0,752},{9,0,273},{9,0,412},{9,0,
-703},{10,0,71},{10,0,427},{138,0,508},{4,10,165},{7,10,1398},{135,10,1829},{4,0,
-53},{5,0,186},{7,0,752},{7,0,828},{142,0,116},{8,0,575},{10,0,289},{139,0,319},{
-132,0,675},{134,0,1424},{4,11,75},{5,11,180},{6,11,500},{7,11,58},{7,11,710},{
-138,11,645},{133,11,649},{6,11,276},{7,11,282},{7,11,879},{7,11,924},{8,11,459},
-{9,11,599},{9,11,754},{11,11,574},{12,11,128},{12,11,494},{13,11,52},{13,11,301}
-,{15,11,30},{143,11,132},{6,0,647},{134,0,1095},{5,10,9},{7,10,297},{7,10,966},{
-140,10,306},{132,11,200},{134,0,1334},{5,10,146},{6,10,411},{138,10,721},{6,0,
-209},{6,0,1141},{6,0,1288},{8,0,468},{9,0,210},{11,0,36},{12,0,28},{12,0,630},{
-13,0,21},{13,0,349},{14,0,7},{145,0,13},{6,10,177},{135,10,467},{4,0,342},{135,0
-,1179},{10,11,454},{140,11,324},{4,0,928},{133,0,910},{7,0,1838},{6,11,225},{137
-,11,211},{16,0,101},{20,0,115},{20,0,118},{148,0,122},{4,0,496},{135,0,856},{4,0
-,318},{11,0,654},{7,11,718},{139,11,102},{8,11,58},{9,11,724},{11,11,809},{13,11
-,113},{145,11,72},{5,10,200},{6,11,345},{135,11,1247},{8,11,767},{8,11,803},{9,
-11,301},{137,11,903},{7,0,915},{8,0,247},{19,0,0},{7,11,1949},{136,11,674},{4,0,
-202},{5,0,382},{6,0,454},{7,0,936},{7,0,1803},{8,0,758},{9,0,375},{9,0,895},{10,
-0,743},{10,0,792},{11,0,978},{11,0,1012},{142,0,109},{7,0,1150},{7,0,1425},{7,0,
-1453},{140,0,513},{134,11,259},{138,0,791},{11,0,821},{12,0,110},{12,0,153},{18,
-0,41},{150,0,19},{134,10,481},{132,0,796},{6,0,445},{9,0,909},{136,11,254},{10,0
-,776},{13,0,345},{142,0,425},{4,10,84},{7,10,1482},{10,10,76},{138,10,142},{135,
-11,742},{6,0,578},{133,10,1015},{6,0,1387},{4,10,315},{5,10,507},{135,10,1370},{
-4,0,438},{133,0,555},{136,0,766},{133,11,248},{134,10,1722},{4,11,116},{5,11,95}
-,{5,11,445},{7,11,1688},{8,11,29},{9,11,272},{11,11,509},{139,11,915},{135,0,541
-},{133,11,543},{8,10,222},{8,10,476},{9,10,238},{11,10,516},{11,10,575},{15,10,
-109},{146,10,100},{6,0,880},{134,0,1191},{5,11,181},{136,11,41},{134,0,1506},{
-132,11,681},{7,11,25},{8,11,202},{138,11,536},{139,0,983},{137,0,768},{132,0,584
-},{9,11,423},{140,11,89},{8,11,113},{9,11,877},{10,11,554},{11,11,83},{12,11,136
-},{147,11,109},{7,10,706},{7,10,1058},{138,10,538},{133,11,976},{4,11,206},{135,
-11,746},{136,11,526},{140,0,737},{11,10,92},{11,10,196},{11,10,409},{11,10,450},
-{11,10,666},{11,10,777},{12,10,262},{13,10,385},{13,10,393},{15,10,115},{16,10,
-45},{145,10,82},{4,0,226},{4,0,326},{7,0,1770},{4,11,319},{5,11,699},{138,11,673
-},{6,10,40},{135,10,1781},{5,0,426},{8,0,30},{9,0,2},{11,0,549},{147,0,122},{6,0
-,1161},{134,0,1329},{138,10,97},{6,10,423},{7,10,665},{135,10,1210},{7,11,13},{8
-,11,226},{10,11,537},{11,11,570},{11,11,605},{11,11,799},{11,11,804},{12,11,85},
-{12,11,516},{12,11,623},{13,11,112},{13,11,361},{14,11,77},{14,11,78},{17,11,28}
-,{147,11,110},{132,11,769},{132,11,551},{132,11,728},{147,0,117},{9,11,57},{9,11
-,459},{10,11,425},{11,11,119},{12,11,184},{12,11,371},{13,11,358},{145,11,51},{5
-,11,188},{5,11,814},{8,11,10},{9,11,421},{9,11,729},{10,11,609},{139,11,689},{
-134,11,624},{135,11,298},{135,0,462},{4,0,345},{139,10,624},{136,10,574},{4,0,
-385},{7,0,265},{135,0,587},{6,0,808},{132,11,528},{133,0,398},{132,10,354},{4,0,
-347},{5,0,423},{5,0,996},{135,0,1329},{135,10,1558},{7,0,1259},{9,0,125},{139,0,
-65},{5,0,136},{6,0,136},{136,0,644},{5,11,104},{6,11,173},{135,11,1631},{135,0,
-469},{133,10,830},{4,0,278},{5,0,465},{135,0,1367},{7,11,810},{8,11,138},{8,11,
-342},{9,11,84},{10,11,193},{11,11,883},{140,11,359},{5,10,496},{135,10,203},{4,0
-,433},{133,0,719},{6,11,95},{134,10,547},{5,10,88},{137,10,239},{6,11,406},{10,
-11,409},{10,11,447},{11,11,44},{140,11,100},{134,0,1423},{7,10,650},{135,10,1310
-},{134,0,749},{135,11,1243},{135,0,1363},{6,0,381},{7,0,645},{7,0,694},{8,0,546}
-,{7,10,1076},{9,10,80},{11,10,78},{11,10,421},{11,10,534},{140,10,545},{134,11,
-1636},{135,11,1344},{12,0,277},{7,10,274},{11,10,479},{139,10,507},{6,0,705},{6,
-0,783},{6,0,1275},{6,0,1481},{4,11,282},{7,11,1034},{11,11,398},{11,11,634},{12,
-11,1},{12,11,79},{12,11,544},{14,11,237},{17,11,10},{146,11,20},{134,0,453},{4,0
-,555},{8,0,536},{10,0,288},{11,0,1005},{4,10,497},{135,10,1584},{5,11,118},{5,11
-,499},{6,11,476},{7,11,600},{7,11,888},{135,11,1096},{138,0,987},{7,0,1107},{7,
-10,261},{7,10,1115},{7,10,1354},{7,10,1588},{7,10,1705},{7,10,1902},{9,10,465},{
-10,10,248},{10,10,349},{10,10,647},{11,10,527},{11,10,660},{11,10,669},{12,10,
-529},{141,10,305},{7,11,296},{7,11,596},{8,11,560},{8,11,586},{9,11,612},{11,11,
-100},{11,11,304},{12,11,46},{13,11,89},{14,11,112},{145,11,122},{9,0,370},{138,0
-,90},{136,10,13},{132,0,860},{7,10,642},{8,10,250},{11,10,123},{11,10,137},{13,
-10,48},{142,10,95},{135,10,1429},{137,11,321},{132,0,257},{135,0,2031},{7,0,1768
-},{7,11,1599},{7,11,1723},{8,11,79},{8,11,106},{8,11,190},{8,11,302},{8,11,383},
-{9,11,119},{9,11,233},{9,11,298},{9,11,419},{9,11,471},{10,11,181},{10,11,406},{
-11,11,57},{11,11,85},{11,11,120},{11,11,177},{11,11,296},{11,11,382},{11,11,454}
-,{11,11,758},{11,11,999},{12,11,27},{12,11,98},{12,11,131},{12,11,245},{12,11,
-312},{12,11,446},{12,11,454},{13,11,25},{13,11,98},{13,11,426},{13,11,508},{14,
-11,6},{14,11,163},{14,11,272},{14,11,277},{14,11,370},{15,11,95},{15,11,138},{15
-,11,167},{17,11,18},{17,11,38},{20,11,96},{149,11,32},{5,11,722},{134,11,1759},{
-145,11,16},{6,0,1071},{134,0,1561},{10,10,545},{140,10,301},{6,0,83},{6,0,1733},
-{135,0,1389},{4,0,835},{135,0,1818},{133,11,258},{4,10,904},{133,10,794},{134,0,
-2006},{5,11,30},{7,11,495},{8,11,134},{9,11,788},{140,11,438},{135,11,2004},{137
-,0,696},{5,11,50},{6,11,439},{7,11,780},{135,11,1040},{7,11,772},{7,11,1104},{7,
-11,1647},{11,11,269},{11,11,539},{11,11,607},{11,11,627},{11,11,706},{11,11,975}
-,{12,11,248},{12,11,311},{12,11,434},{12,11,600},{12,11,622},{13,11,297},{13,11,
-367},{13,11,485},{14,11,69},{14,11,409},{143,11,108},{5,11,1},{6,11,81},{138,11,
-520},{7,0,1718},{9,0,95},{9,0,274},{10,0,279},{10,0,317},{10,0,420},{11,0,303},{
-11,0,808},{12,0,134},{12,0,367},{13,0,149},{13,0,347},{14,0,349},{14,0,406},{18,
-0,22},{18,0,89},{18,0,122},{147,0,47},{5,11,482},{8,11,98},{9,11,172},{10,11,222
-},{10,11,700},{10,11,822},{11,11,302},{11,11,778},{12,11,50},{12,11,127},{12,11,
-396},{13,11,62},{13,11,328},{14,11,122},{147,11,72},{7,10,386},{138,10,713},{6,
-10,7},{6,10,35},{7,10,147},{7,10,1069},{7,10,1568},{7,10,1575},{7,10,1917},{8,10
-,43},{8,10,208},{9,10,128},{9,10,866},{10,10,20},{11,10,981},{147,10,33},{133,0,
-26},{132,0,550},{5,11,2},{7,11,1494},{136,11,589},{6,11,512},{7,11,797},{8,11,
-253},{9,11,77},{10,11,1},{10,11,129},{10,11,225},{11,11,118},{11,11,226},{11,11,
-251},{11,11,430},{11,11,701},{11,11,974},{11,11,982},{12,11,64},{12,11,260},{12,
-11,488},{140,11,690},{7,10,893},{141,10,424},{134,0,901},{136,0,822},{4,0,902},{
-5,0,809},{134,0,122},{6,0,807},{134,0,1366},{7,0,262},{5,11,748},{134,11,553},{
-133,0,620},{4,0,34},{5,0,574},{7,0,279},{7,0,1624},{136,0,601},{9,0,170},{6,10,
-322},{9,10,552},{11,10,274},{13,10,209},{13,10,499},{14,10,85},{15,10,126},{145,
-10,70},{132,0,537},{4,11,12},{7,11,420},{7,11,522},{7,11,809},{8,11,797},{141,11
-,88},{133,0,332},{8,10,83},{8,10,742},{8,10,817},{9,10,28},{9,10,29},{9,10,885},
-{10,10,387},{11,10,633},{11,10,740},{13,10,235},{13,10,254},{15,10,143},{143,10,
-146},{6,0,1909},{9,0,964},{12,0,822},{12,0,854},{12,0,865},{12,0,910},{12,0,938}
-,{15,0,169},{15,0,208},{15,0,211},{18,0,205},{18,0,206},{18,0,220},{18,0,223},{
-152,0,24},{140,10,49},{5,11,528},{135,11,1580},{6,0,261},{8,0,182},{139,0,943},{
-134,0,1721},{4,0,933},{133,0,880},{136,11,321},{5,11,266},{9,11,290},{9,11,364},
-{10,11,293},{11,11,606},{142,11,45},{6,0,1609},{4,11,50},{6,11,510},{6,11,594},{
-9,11,121},{10,11,49},{10,11,412},{139,11,834},{7,0,895},{136,11,748},{132,11,466
-},{4,10,110},{10,10,415},{10,10,597},{142,10,206},{133,0,812},{135,11,281},{6,0,
-1890},{6,0,1902},{6,0,1916},{9,0,929},{9,0,942},{9,0,975},{9,0,984},{9,0,986},{9
-,0,1011},{9,0,1019},{12,0,804},{12,0,851},{12,0,867},{12,0,916},{12,0,923},{15,0
-,194},{15,0,204},{15,0,210},{15,0,222},{15,0,223},{15,0,229},{15,0,250},{18,0,
-179},{18,0,186},{18,0,192},{7,10,205},{135,10,2000},{132,11,667},{135,0,778},{4,
-0,137},{7,0,1178},{135,0,1520},{134,0,1314},{4,11,242},{134,11,333},{6,0,1661},{
-7,0,1975},{7,0,2009},{135,0,2011},{134,0,1591},{4,10,283},{135,10,1194},{11,0,
-820},{150,0,51},{4,11,39},{5,11,36},{7,11,1843},{8,11,407},{11,11,144},{140,11,
-523},{134,10,1720},{4,11,510},{7,11,29},{7,11,66},{7,11,1980},{10,11,487},{10,11
-,809},{146,11,9},{5,0,89},{7,0,1915},{9,0,185},{9,0,235},{10,0,64},{10,0,270},{
-10,0,403},{10,0,469},{10,0,529},{10,0,590},{11,0,140},{11,0,860},{13,0,1},{13,0,
-422},{14,0,341},{14,0,364},{17,0,93},{18,0,113},{19,0,97},{147,0,113},{133,0,695
-},{6,0,987},{134,0,1160},{5,0,6},{6,0,183},{7,0,680},{7,0,978},{7,0,1013},{7,0,
-1055},{12,0,230},{13,0,172},{146,0,29},{134,11,570},{132,11,787},{134,11,518},{6
-,0,29},{139,0,63},{132,11,516},{136,11,821},{132,0,311},{134,0,1740},{7,0,170},{
-8,0,90},{8,0,177},{8,0,415},{11,0,714},{14,0,281},{136,10,735},{134,0,1961},{135
-,11,1405},{4,11,10},{7,11,917},{139,11,786},{5,10,132},{9,10,486},{9,10,715},{10
-,10,458},{11,10,373},{11,10,668},{11,10,795},{11,10,897},{12,10,272},{12,10,424}
-,{12,10,539},{12,10,558},{14,10,245},{14,10,263},{14,10,264},{14,10,393},{142,10
-,403},{11,0,91},{13,0,129},{15,0,101},{145,0,125},{135,0,1132},{4,0,494},{6,0,74
-},{7,0,44},{7,0,407},{12,0,17},{15,0,5},{148,0,11},{133,10,379},{5,0,270},{5,11,
-684},{6,10,89},{6,10,400},{7,10,1569},{7,10,1623},{7,10,1850},{8,10,218},{8,10,
-422},{9,10,570},{138,10,626},{4,0,276},{133,0,296},{6,0,1523},{134,11,27},{6,10,
-387},{7,10,882},{141,10,111},{6,10,224},{7,10,877},{137,10,647},{135,10,790},{4,
-0,7},{5,0,90},{5,0,158},{6,0,542},{7,0,221},{7,0,1574},{9,0,490},{10,0,540},{11,
-0,443},{139,0,757},{7,0,588},{9,0,175},{138,0,530},{135,10,394},{142,11,23},{134
-,0,786},{135,0,580},{7,0,88},{136,0,627},{5,0,872},{6,0,57},{7,0,471},{9,0,447},
-{137,0,454},{6,11,342},{6,11,496},{8,11,275},{137,11,206},{4,11,909},{133,11,940
-},{6,0,735},{132,11,891},{8,0,845},{8,0,916},{135,10,1409},{5,0,31},{134,0,614},
-{11,0,458},{12,0,15},{140,0,432},{8,0,330},{140,0,477},{4,0,530},{5,0,521},{7,0,
-1200},{10,0,460},{132,11,687},{6,0,424},{135,0,1866},{9,0,569},{12,0,12},{12,0,
-81},{12,0,319},{13,0,69},{14,0,259},{16,0,87},{17,0,1},{17,0,21},{17,0,24},{18,0
-,15},{18,0,56},{18,0,59},{18,0,127},{18,0,154},{19,0,19},{148,0,31},{7,0,1302},{
-136,10,38},{134,11,253},{5,10,261},{7,10,78},{7,10,199},{8,10,815},{9,10,126},{
-138,10,342},{5,0,595},{135,0,1863},{6,11,41},{141,11,160},{5,0,13},{134,0,142},{
-6,0,97},{7,0,116},{8,0,322},{8,0,755},{9,0,548},{10,0,714},{11,0,884},{13,0,324}
-,{7,11,1304},{138,11,477},{132,10,628},{134,11,1718},{7,10,266},{136,10,804},{
-135,10,208},{7,0,1021},{6,10,79},{135,10,1519},{7,0,1472},{135,0,1554},{6,11,362
-},{146,11,51},{7,0,1071},{7,0,1541},{7,0,1767},{7,0,1806},{11,0,162},{11,0,242},
-{11,0,452},{12,0,605},{15,0,26},{144,0,44},{136,10,741},{133,11,115},{145,0,115}
-,{134,10,376},{6,0,1406},{134,0,1543},{5,11,193},{12,11,178},{13,11,130},{145,11
-,84},{135,0,1111},{8,0,1},{9,0,650},{10,0,326},{5,11,705},{137,11,606},{5,0,488}
-,{6,0,527},{7,0,489},{7,0,1636},{8,0,121},{8,0,144},{8,0,359},{9,0,193},{9,0,241
-},{9,0,336},{9,0,882},{11,0,266},{11,0,372},{11,0,944},{12,0,401},{140,0,641},{
-135,11,174},{6,0,267},{7,10,244},{7,10,632},{7,10,1609},{8,10,178},{8,10,638},{
-141,10,58},{134,0,1983},{134,0,1155},{134,0,1575},{134,0,1438},{9,0,31},{10,0,
-244},{10,0,699},{12,0,149},{141,0,497},{133,0,377},{4,11,122},{5,11,796},{5,11,
-952},{6,11,1660},{6,11,1671},{8,11,567},{9,11,687},{9,11,742},{10,11,686},{11,11
-,356},{11,11,682},{140,11,281},{145,0,101},{11,11,0},{144,11,78},{5,11,179},{5,
-10,791},{7,11,1095},{135,11,1213},{8,11,372},{9,11,122},{138,11,175},{7,10,686},
-{8,10,33},{8,10,238},{10,10,616},{11,10,467},{11,10,881},{13,10,217},{13,10,253}
-,{142,10,268},{9,0,476},{4,11,66},{7,11,722},{135,11,904},{7,11,352},{137,11,684
-},{135,0,2023},{135,0,1836},{132,10,447},{5,0,843},{144,0,35},{137,11,779},{141,
-11,35},{4,10,128},{5,10,415},{6,10,462},{7,10,294},{7,10,578},{10,10,710},{139,
-10,86},{132,0,554},{133,0,536},{136,10,587},{5,0,207},{9,0,79},{11,0,625},{145,0
-,7},{7,0,1371},{6,10,427},{138,10,692},{4,0,424},{4,10,195},{135,10,802},{8,0,
-785},{133,11,564},{135,0,336},{4,0,896},{6,0,1777},{134,11,556},{137,11,103},{
-134,10,1683},{7,11,544},{8,11,719},{138,11,61},{138,10,472},{4,11,5},{5,11,498},
-{136,11,637},{7,0,750},{9,0,223},{11,0,27},{11,0,466},{12,0,624},{14,0,265},{146
-,0,61},{12,0,238},{18,0,155},{12,11,238},{146,11,155},{151,10,28},{133,11,927},{
-12,0,383},{5,10,3},{8,10,578},{9,10,118},{10,10,705},{141,10,279},{4,11,893},{5,
-11,780},{133,11,893},{4,0,603},{133,0,661},{4,0,11},{6,0,128},{7,0,231},{7,0,
-1533},{10,0,725},{5,10,229},{5,11,238},{135,11,1350},{8,10,102},{10,10,578},{10,
-10,672},{12,10,496},{13,10,408},{14,10,121},{145,10,106},{132,0,476},{134,0,1552
-},{134,11,1729},{8,10,115},{8,10,350},{9,10,489},{10,10,128},{11,10,306},{12,10,
-373},{14,10,30},{17,10,79},{19,10,80},{150,10,55},{135,0,1807},{4,0,680},{4,11,
-60},{7,11,760},{7,11,1800},{8,11,314},{9,11,700},{139,11,487},{4,10,230},{5,10,
-702},{148,11,94},{132,11,228},{139,0,435},{9,0,20},{10,0,324},{10,0,807},{139,0,
-488},{6,10,1728},{136,11,419},{4,10,484},{18,10,26},{19,10,42},{20,10,43},{21,10
-,0},{23,10,27},{152,10,14},{135,0,1431},{133,11,828},{5,0,112},{6,0,103},{6,0,
-150},{7,0,1303},{9,0,292},{10,0,481},{20,0,13},{7,11,176},{7,11,178},{7,11,1110}
-,{10,11,481},{148,11,13},{138,0,356},{4,11,51},{5,11,39},{6,11,4},{7,11,591},{7,
-11,849},{7,11,951},{7,11,1129},{7,11,1613},{7,11,1760},{7,11,1988},{9,11,434},{
-10,11,754},{11,11,25},{11,11,37},{139,11,414},{6,0,1963},{134,0,2000},{132,10,
-633},{6,0,1244},{133,11,902},{135,11,928},{140,0,18},{138,0,204},{135,11,1173},{
-134,0,867},{4,0,708},{8,0,15},{9,0,50},{9,0,386},{11,0,18},{11,0,529},{140,0,228
-},{134,11,270},{4,0,563},{7,0,109},{7,0,592},{7,0,637},{7,0,770},{8,0,463},{9,0,
-60},{9,0,335},{9,0,904},{10,0,73},{11,0,434},{12,0,585},{13,0,331},{18,0,110},{
-148,0,60},{132,0,502},{14,11,359},{19,11,52},{148,11,47},{6,11,377},{7,11,1025},
-{9,11,613},{145,11,104},{6,0,347},{10,0,161},{5,10,70},{5,10,622},{6,10,334},{7,
-10,1032},{9,10,171},{11,10,26},{11,10,213},{11,10,637},{11,10,707},{12,10,202},{
-12,10,380},{13,10,226},{13,10,355},{14,10,222},{145,10,42},{132,11,416},{4,0,33}
-,{5,0,102},{6,0,284},{7,0,1079},{7,0,1423},{7,0,1702},{8,0,470},{9,0,554},{9,0,
-723},{11,0,333},{142,11,372},{5,11,152},{5,11,197},{7,11,340},{7,11,867},{10,11,
-548},{10,11,581},{11,11,6},{12,11,3},{12,11,19},{14,11,110},{142,11,289},{7,0,
-246},{135,0,840},{6,0,10},{8,0,571},{9,0,739},{143,0,91},{6,0,465},{7,0,1465},{4
-,10,23},{4,10,141},{5,10,313},{5,10,1014},{6,10,50},{7,10,142},{7,10,559},{8,10,
-640},{9,10,460},{9,10,783},{11,10,741},{12,10,183},{141,10,488},{133,0,626},{136
-,0,614},{138,0,237},{7,11,34},{7,11,190},{8,11,28},{8,11,141},{8,11,444},{8,11,
-811},{9,11,468},{11,11,334},{12,11,24},{12,11,386},{140,11,576},{133,11,757},{5,
-0,18},{6,0,526},{13,0,24},{13,0,110},{19,0,5},{147,0,44},{6,0,506},{134,11,506},
-{135,11,1553},{4,0,309},{5,0,462},{7,0,970},{7,0,1097},{22,0,30},{22,0,33},{7,11
-,1385},{11,11,582},{11,11,650},{11,11,901},{11,11,949},{12,11,232},{12,11,236},{
-13,11,413},{13,11,501},{146,11,116},{9,0,140},{5,10,222},{138,10,534},{6,0,1056}
-,{137,10,906},{134,0,1704},{138,10,503},{134,0,1036},{5,10,154},{7,10,1491},{10,
-10,379},{138,10,485},{4,11,383},{133,10,716},{134,0,1315},{5,0,86},{7,0,743},{9,
-0,85},{10,0,281},{10,0,432},{11,0,825},{12,0,251},{13,0,118},{142,0,378},{8,0,
-264},{4,10,91},{5,10,388},{5,10,845},{6,10,206},{6,10,252},{6,10,365},{7,10,136}
-,{7,10,531},{136,10,621},{5,0,524},{133,0,744},{5,11,277},{141,11,247},{132,11,
-435},{10,0,107},{140,0,436},{132,0,927},{10,0,123},{12,0,670},{146,0,94},{7,0,
-1149},{9,0,156},{138,0,957},{5,11,265},{6,11,212},{135,11,28},{133,0,778},{133,0
-,502},{8,0,196},{10,0,283},{139,0,406},{135,10,576},{136,11,535},{134,0,1312},{5
-,10,771},{5,10,863},{5,10,898},{6,10,1632},{6,10,1644},{134,10,1780},{5,0,855},{
-5,10,331},{135,11,1487},{132,11,702},{5,11,808},{135,11,2045},{7,0,1400},{9,0,
-446},{138,0,45},{140,10,632},{132,0,1003},{5,11,166},{8,11,739},{140,11,511},{5,
-10,107},{7,10,201},{136,10,518},{6,10,446},{135,10,1817},{134,0,1532},{134,0,
-1097},{4,11,119},{5,11,170},{5,11,447},{7,11,1708},{7,11,1889},{9,11,357},{9,11,
-719},{12,11,486},{140,11,596},{9,10,851},{141,10,510},{7,0,612},{8,0,545},{8,0,
-568},{8,0,642},{9,0,717},{10,0,541},{10,0,763},{11,0,449},{12,0,489},{13,0,153},
-{13,0,296},{14,0,138},{14,0,392},{15,0,50},{16,0,6},{16,0,12},{20,0,9},{132,10,
-504},{4,11,450},{135,11,1158},{11,0,54},{13,0,173},{13,0,294},{5,10,883},{5,10,
-975},{8,10,392},{148,10,7},{13,0,455},{15,0,99},{15,0,129},{144,0,68},{135,0,172
-},{132,11,754},{5,10,922},{134,10,1707},{134,0,1029},{17,11,39},{148,11,36},{4,0
-,568},{5,10,993},{7,10,515},{137,10,91},{132,0,732},{10,0,617},{138,11,617},{134
-,0,974},{7,0,989},{10,0,377},{12,0,363},{13,0,68},{13,0,94},{14,0,108},{142,0,
-306},{136,0,733},{132,0,428},{7,0,1789},{135,11,1062},{7,0,2015},{140,0,665},{
-135,10,1433},{5,0,287},{7,10,921},{8,10,580},{8,10,593},{8,10,630},{138,10,28},{
-138,0,806},{4,10,911},{5,10,867},{5,10,1013},{7,10,2034},{8,10,798},{136,10,813}
-,{134,0,1539},{8,11,523},{150,11,34},{135,11,740},{7,11,238},{7,11,2033},{8,11,
-120},{8,11,188},{8,11,659},{9,11,598},{10,11,466},{12,11,342},{12,11,588},{13,11
-,503},{14,11,246},{143,11,92},{7,0,1563},{141,0,182},{5,10,135},{6,10,519},{7,10
-,1722},{10,10,271},{11,10,261},{145,10,54},{14,10,338},{148,10,81},{7,0,484},{4,
-10,300},{133,10,436},{145,11,114},{6,0,1623},{134,0,1681},{133,11,640},{4,11,201
-},{7,11,1744},{8,11,602},{11,11,247},{11,11,826},{145,11,65},{8,11,164},{146,11,
-62},{6,0,1833},{6,0,1861},{136,0,878},{134,0,1569},{8,10,357},{10,10,745},{14,10
-,426},{17,10,94},{147,10,57},{12,0,93},{12,0,501},{13,0,362},{14,0,151},{15,0,40
-},{15,0,59},{16,0,46},{17,0,25},{18,0,14},{18,0,134},{19,0,25},{19,0,69},{20,0,
-16},{20,0,19},{20,0,66},{21,0,23},{21,0,25},{150,0,42},{6,0,1748},{8,0,715},{9,0
-,802},{10,0,46},{10,0,819},{13,0,308},{14,0,351},{14,0,363},{146,0,67},{132,0,
-994},{4,0,63},{133,0,347},{132,0,591},{133,0,749},{7,11,1577},{10,11,304},{10,11
-,549},{11,11,424},{12,11,365},{13,11,220},{13,11,240},{142,11,33},{133,0,366},{7
-,0,557},{12,0,547},{14,0,86},{133,10,387},{135,0,1747},{132,11,907},{5,11,100},{
-10,11,329},{12,11,416},{149,11,29},{4,10,6},{5,10,708},{136,10,75},{7,10,1351},{
-9,10,581},{10,10,639},{11,10,453},{140,10,584},{7,0,89},{132,10,303},{138,10,772
-},{132,11,176},{5,11,636},{5,11,998},{8,11,26},{137,11,358},{7,11,9},{7,11,1508}
-,{9,11,317},{10,11,210},{10,11,292},{10,11,533},{11,11,555},{12,11,526},{12,11,
-607},{13,11,263},{13,11,459},{142,11,271},{134,0,1463},{6,0,772},{6,0,1137},{139
-,11,595},{7,0,977},{139,11,66},{138,0,893},{20,0,48},{148,11,48},{5,0,824},{133,
-0,941},{134,11,295},{7,0,1543},{7,0,1785},{10,0,690},{4,10,106},{139,10,717},{7,
-0,440},{8,0,230},{139,0,106},{5,10,890},{133,10,988},{6,10,626},{142,10,431},{10
-,11,127},{141,11,27},{17,0,32},{10,10,706},{150,10,44},{132,0,216},{137,0,332},{
-4,10,698},{136,11,119},{139,11,267},{138,10,17},{11,11,526},{11,11,939},{141,11,
-290},{7,11,1167},{11,11,934},{13,11,391},{145,11,76},{139,11,39},{134,10,84},{4,
-0,914},{5,0,800},{133,0,852},{10,0,416},{141,0,115},{7,0,564},{142,0,168},{4,0,
-918},{133,0,876},{134,0,1764},{152,0,3},{4,0,92},{5,0,274},{7,11,126},{136,11,84
-},{140,10,498},{136,11,790},{8,0,501},{5,10,986},{6,10,130},{7,10,1582},{8,10,
-458},{10,10,101},{10,10,318},{138,10,823},{6,11,64},{12,11,377},{141,11,309},{5,
-0,743},{138,0,851},{4,0,49},{7,0,280},{135,0,1633},{134,0,879},{136,0,47},{7,10,
-1644},{137,10,129},{132,0,865},{134,0,1202},{9,11,34},{139,11,484},{135,10,997},
-{5,0,272},{5,0,908},{5,0,942},{8,0,197},{9,0,47},{11,0,538},{139,0,742},{6,11,
-1700},{7,11,26},{7,11,293},{7,11,382},{7,11,1026},{7,11,1087},{7,11,2027},{8,11,
-24},{8,11,114},{8,11,252},{8,11,727},{8,11,729},{9,11,30},{9,11,199},{9,11,231},
-{9,11,251},{9,11,334},{9,11,361},{9,11,488},{9,11,712},{10,11,55},{10,11,60},{10
-,11,232},{10,11,332},{10,11,384},{10,11,396},{10,11,504},{10,11,542},{10,11,652}
-,{11,11,20},{11,11,48},{11,11,207},{11,11,291},{11,11,298},{11,11,342},{11,11,
-365},{11,11,394},{11,11,620},{11,11,705},{11,11,1017},{12,11,123},{12,11,340},{
-12,11,406},{12,11,643},{13,11,61},{13,11,269},{13,11,311},{13,11,319},{13,11,486
-},{14,11,234},{15,11,62},{15,11,85},{16,11,71},{18,11,119},{148,11,105},{6,0,
-1455},{150,11,37},{135,10,1927},{135,0,1911},{137,0,891},{7,10,1756},{137,10,98}
-,{7,10,1046},{139,10,160},{132,0,761},{6,11,379},{7,11,270},{7,11,1116},{8,11,
-176},{8,11,183},{9,11,432},{9,11,661},{12,11,247},{12,11,617},{146,11,125},{6,10
-,45},{7,10,433},{8,10,129},{9,10,21},{10,10,392},{11,10,79},{12,10,499},{13,10,
-199},{141,10,451},{4,0,407},{5,11,792},{133,11,900},{132,0,560},{135,0,183},{13,
-0,490},{7,10,558},{136,10,353},{4,0,475},{6,0,731},{11,0,35},{13,0,71},{13,0,177
-},{14,0,422},{133,10,785},{8,10,81},{9,10,189},{9,10,201},{11,10,478},{11,10,712
-},{141,10,338},{4,0,418},{4,0,819},{133,10,353},{151,10,26},{4,11,901},{133,11,
-776},{132,0,575},{7,0,818},{16,0,92},{17,0,14},{17,0,45},{18,0,75},{148,0,18},{6
-,0,222},{7,0,636},{7,0,1620},{8,0,409},{9,0,693},{139,0,77},{6,10,25},{7,10,855}
-,{7,10,1258},{144,10,32},{6,0,1880},{6,0,1887},{6,0,1918},{6,0,1924},{9,0,967},{
-9,0,995},{9,0,1015},{12,0,826},{12,0,849},{12,0,857},{12,0,860},{12,0,886},{12,0
-,932},{18,0,228},{18,0,231},{146,0,240},{134,0,633},{134,0,1308},{4,11,37},{5,11
-,334},{135,11,1253},{10,0,86},{4,10,4},{7,10,1118},{7,10,1320},{7,10,1706},{8,10
-,277},{9,10,622},{11,10,724},{12,10,350},{12,10,397},{13,10,28},{13,10,159},{15,
-10,89},{18,10,5},{19,10,9},{20,10,34},{150,10,47},{132,11,508},{137,11,448},{12,
-11,107},{146,11,31},{132,0,817},{134,0,663},{133,0,882},{134,0,914},{132,11,540}
-,{132,11,533},{136,11,608},{8,0,885},{138,0,865},{132,0,426},{6,0,58},{7,0,745},
-{7,0,1969},{8,0,399},{8,0,675},{9,0,479},{9,0,731},{10,0,330},{10,0,593},{10,0,
-817},{11,0,32},{11,0,133},{11,0,221},{145,0,68},{134,10,255},{7,0,102},{137,0,
-538},{137,10,216},{7,11,253},{136,11,549},{135,11,912},{9,10,183},{139,10,286},{
-11,10,956},{151,10,3},{8,11,527},{18,11,60},{147,11,24},{4,10,536},{7,10,1141},{
-10,10,723},{139,10,371},{133,11,920},{7,0,876},{135,10,285},{135,10,560},{132,10
-,690},{142,11,126},{11,10,33},{12,10,571},{149,10,1},{133,0,566},{9,0,139},{10,0
-,399},{11,0,469},{12,0,634},{13,0,223},{132,11,483},{6,0,48},{135,0,63},{18,0,12
-},{7,10,1862},{12,10,491},{12,10,520},{13,10,383},{142,10,244},{135,11,1665},{
-132,11,448},{9,11,495},{146,11,104},{6,0,114},{7,0,1224},{7,0,1556},{136,0,3},{4
-,10,190},{133,10,554},{8,0,576},{9,0,267},{133,10,1001},{133,10,446},{133,0,933}
-,{139,11,1009},{8,11,653},{13,11,93},{147,11,14},{6,0,692},{6,0,821},{134,0,1077
-},{5,11,172},{135,11,801},{138,0,752},{4,0,375},{134,0,638},{134,0,1011},{140,11
-,540},{9,0,96},{133,11,260},{139,11,587},{135,10,1231},{12,0,30},{13,0,148},{14,
-0,87},{14,0,182},{16,0,42},{20,0,70},{132,10,304},{6,0,1398},{7,0,56},{7,0,1989}
-,{8,0,337},{8,0,738},{9,0,600},{12,0,37},{13,0,447},{142,0,92},{138,0,666},{5,0,
-394},{7,0,487},{136,0,246},{9,0,437},{6,10,53},{6,10,199},{7,10,1408},{8,10,32},
-{8,10,93},{10,10,397},{10,10,629},{11,10,593},{11,10,763},{13,10,326},{145,10,35
-},{134,10,105},{9,0,320},{10,0,506},{138,10,794},{7,11,57},{8,11,167},{8,11,375}
-,{9,11,82},{9,11,561},{10,11,620},{10,11,770},{11,10,704},{141,10,396},{6,0,1003
-},{5,10,114},{5,10,255},{141,10,285},{7,0,866},{135,0,1163},{133,11,531},{132,0,
-328},{7,10,2035},{8,10,19},{9,10,89},{138,10,831},{8,11,194},{136,11,756},{136,0
-,1000},{5,11,453},{134,11,441},{4,0,101},{5,0,833},{7,0,1171},{136,0,744},{133,0
-,726},{136,10,746},{138,0,176},{6,0,9},{6,0,397},{7,0,53},{7,0,1742},{10,0,632},
-{11,0,828},{140,0,146},{135,11,22},{145,11,64},{132,0,839},{11,0,417},{12,0,223}
-,{140,0,265},{4,11,102},{7,11,815},{7,11,1699},{139,11,964},{5,10,955},{136,10,
-814},{6,0,1931},{6,0,2007},{18,0,246},{146,0,247},{8,0,198},{11,0,29},{140,0,534
-},{135,0,1771},{6,0,846},{7,11,1010},{11,11,733},{11,11,759},{12,11,563},{13,11,
-34},{14,11,101},{18,11,45},{146,11,129},{4,0,186},{5,0,157},{8,0,168},{138,0,6},
-{132,11,899},{133,10,56},{148,10,100},{133,0,875},{5,0,773},{5,0,991},{6,0,1635}
-,{134,0,1788},{6,0,1274},{9,0,477},{141,0,78},{4,0,639},{7,0,111},{8,0,581},{12,
-0,177},{6,11,52},{9,11,104},{9,11,559},{10,10,4},{10,10,13},{11,10,638},{12,11,
-308},{19,11,87},{148,10,57},{132,11,604},{4,11,301},{133,10,738},{133,10,758},{
-134,0,1747},{7,11,1440},{11,11,854},{11,11,872},{11,11,921},{12,11,551},{13,11,
-472},{142,11,367},{7,0,1364},{7,0,1907},{141,0,158},{134,0,873},{4,0,404},{4,0,
-659},{7,0,552},{135,0,675},{135,10,1112},{139,10,328},{7,11,508},{137,10,133},{
-133,0,391},{5,10,110},{6,10,169},{6,10,1702},{7,10,400},{8,10,538},{9,10,184},{9
-,10,524},{140,10,218},{6,11,310},{7,11,1849},{8,11,72},{8,11,272},{8,11,431},{9,
-11,12},{9,11,351},{10,11,563},{10,11,630},{10,11,810},{11,11,367},{11,11,599},{
-11,11,686},{140,11,672},{5,0,540},{6,0,1697},{136,0,668},{132,0,883},{134,0,78},
-{12,0,628},{18,0,79},{6,10,133},{9,10,353},{139,10,993},{6,11,181},{7,11,537},{8
-,11,64},{9,11,127},{10,11,496},{12,11,510},{141,11,384},{6,10,93},{7,10,1422},{7
-,10,1851},{8,10,673},{9,10,529},{140,10,43},{137,10,371},{134,0,1460},{134,0,962
-},{4,11,244},{135,11,233},{9,10,25},{10,10,467},{138,10,559},{4,10,335},{135,10,
-942},{133,0,460},{135,11,334},{134,11,1650},{4,0,199},{139,0,34},{5,10,601},{8,
-10,39},{10,10,773},{11,10,84},{12,10,205},{142,10,1},{133,10,870},{134,0,388},{
-14,0,474},{148,0,120},{133,11,369},{139,0,271},{4,0,511},{9,0,333},{9,0,379},{10
-,0,602},{11,0,441},{11,0,723},{11,0,976},{12,0,357},{132,10,181},{134,0,608},{
-134,10,1652},{22,0,49},{137,11,338},{140,0,988},{134,0,617},{5,0,938},{136,0,707
-},{132,10,97},{5,10,147},{6,10,286},{7,10,1362},{141,10,176},{6,0,756},{134,0,
-1149},{133,11,896},{6,10,375},{7,10,169},{7,10,254},{136,10,780},{134,0,1583},{
-135,10,1447},{139,0,285},{7,11,1117},{8,11,393},{136,11,539},{135,0,344},{6,0,
-469},{7,0,1709},{138,0,515},{5,10,629},{135,10,1549},{5,11,4},{5,11,810},{6,11,
-13},{6,11,538},{6,11,1690},{6,11,1726},{7,11,499},{7,11,1819},{8,11,148},{8,11,
-696},{8,11,791},{12,11,125},{13,11,54},{143,11,9},{135,11,1268},{137,0,404},{132
-,0,500},{5,0,68},{134,0,383},{11,0,216},{139,0,340},{4,11,925},{5,11,803},{8,11,
-698},{138,11,828},{4,0,337},{6,0,353},{7,0,1934},{8,0,488},{137,0,429},{7,0,236}
-,{7,0,1795},{8,0,259},{9,0,135},{9,0,177},{9,0,860},{10,0,825},{11,0,115},{11,0,
-370},{11,0,405},{11,0,604},{12,0,10},{12,0,667},{12,0,669},{13,0,76},{14,0,310},
-{15,0,76},{15,0,147},{148,0,23},{4,0,15},{4,0,490},{5,0,22},{6,0,244},{7,0,40},{
-7,0,200},{7,0,906},{7,0,1199},{9,0,616},{10,0,716},{11,0,635},{11,0,801},{140,0,
-458},{12,0,756},{132,10,420},{134,0,1504},{6,0,757},{133,11,383},{6,0,1266},{135
-,0,1735},{5,0,598},{7,0,791},{8,0,108},{9,0,123},{7,10,1570},{140,10,542},{142,
-11,410},{9,11,660},{138,11,347}
-};
-
-#if defined(__cplusplus) || defined(c_plusplus)
-} /* extern "C" */
-#endif
-
-#endif /* BROTLI_ENC_STATIC_DICT_LUT_H_ */
diff --git a/BaseTools/Source/C/BrotliCompress/enc/utf8_util.h b/BaseTools/Source/C/BrotliCompress/enc/utf8_util.h
deleted file mode 100644
index 8d1cf5555974..000000000000
--- a/BaseTools/Source/C/BrotliCompress/enc/utf8_util.h
+++ /dev/null
@@ -1,32 +0,0 @@
-/* Copyright 2013 Google Inc. All Rights Reserved.
-
- Distributed under MIT license.
- See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
-*/
-
-/* Heuristics for deciding about the UTF8-ness of strings. */
-
-#ifndef BROTLI_ENC_UTF8_UTIL_H_
-#define BROTLI_ENC_UTF8_UTIL_H_
-
-#include "../common/platform.h"
-#include <brotli/types.h>
-
-#if defined(__cplusplus) || defined(c_plusplus)
-extern "C" {
-#endif
-
-static const double kMinUTF8Ratio = 0.75;
-
-/* Returns 1 if at least min_fraction of the bytes between pos and
- pos + length in the (data, mask) ring-buffer is UTF8-encoded, otherwise
- returns 0. */
-BROTLI_INTERNAL BROTLI_BOOL BrotliIsMostlyUTF8(
- const uint8_t* data, const size_t pos, const size_t mask,
- const size_t length, const double min_fraction);
-
-#if defined(__cplusplus) || defined(c_plusplus)
-} /* extern "C" */
-#endif
-
-#endif /* BROTLI_ENC_UTF8_UTIL_H_ */
diff --git a/BaseTools/Source/C/BrotliCompress/enc/write_bits.h b/BaseTools/Source/C/BrotliCompress/enc/write_bits.h
deleted file mode 100644
index 1269b2895077..000000000000
--- a/BaseTools/Source/C/BrotliCompress/enc/write_bits.h
+++ /dev/null
@@ -1,85 +0,0 @@
-/* Copyright 2010 Google Inc. All Rights Reserved.
-
- Distributed under MIT license.
- See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
-*/
-
-/* Write bits into a byte array. */
-
-#ifndef BROTLI_ENC_WRITE_BITS_H_
-#define BROTLI_ENC_WRITE_BITS_H_
-
-#include "../common/platform.h"
-#include <brotli/types.h>
-
-#if defined(__cplusplus) || defined(c_plusplus)
-extern "C" {
-#endif
-
-/*#define BIT_WRITER_DEBUG */
-
-/* This function writes bits into bytes in increasing addresses, and within
- a byte least-significant-bit first.
-
- The function can write up to 56 bits in one go with WriteBits
- Example: let's assume that 3 bits (Rs below) have been written already:
-
- BYTE-0 BYTE+1 BYTE+2
-
- 0000 0RRR 0000 0000 0000 0000
-
- Now, we could write 5 or less bits in MSB by just sifting by 3
- and OR'ing to BYTE-0.
-
- For n bits, we take the last 5 bits, OR that with high bits in BYTE-0,
- and locate the rest in BYTE+1, BYTE+2, etc. */
-static BROTLI_INLINE void BrotliWriteBits(size_t n_bits,
- uint64_t bits,
- size_t* BROTLI_RESTRICT pos,
- uint8_t* BROTLI_RESTRICT array) {
-#if defined(BROTLI_LITTLE_ENDIAN)
- /* This branch of the code can write up to 56 bits at a time,
- 7 bits are lost by being perhaps already in *p and at least
- 1 bit is needed to initialize the bit-stream ahead (i.e. if 7
- bits are in *p and we write 57 bits, then the next write will
- access a byte that was never initialized). */
- uint8_t* p = &array[*pos >> 3];
- uint64_t v = (uint64_t)(*p); /* Zero-extend 8 to 64 bits. */
- BROTLI_LOG(("WriteBits %2d 0x%08x%08x %10d\n", (int)n_bits,
- (uint32_t)(bits >> 32), (uint32_t)(bits & 0xFFFFFFFF),
- (int)*pos));
- BROTLI_DCHECK((bits >> n_bits) == 0);
- BROTLI_DCHECK(n_bits <= 56);
- v |= bits << (*pos & 7);
- BROTLI_UNALIGNED_STORE64LE(p, v); /* Set some bits. */
- *pos += n_bits;
-#else
- /* implicit & 0xFF is assumed for uint8_t arithmetics */
- uint8_t* array_pos = &array[*pos >> 3];
- const size_t bits_reserved_in_first_byte = (*pos & 7);
- size_t bits_left_to_write;
- bits <<= bits_reserved_in_first_byte;
- *array_pos++ |= (uint8_t)bits;
- for (bits_left_to_write = n_bits + bits_reserved_in_first_byte;
- bits_left_to_write >= 9;
- bits_left_to_write -= 8) {
- bits >>= 8;
- *array_pos++ = (uint8_t)bits;
- }
- *array_pos = 0;
- *pos += n_bits;
-#endif
-}
-
-static BROTLI_INLINE void BrotliWriteBitsPrepareStorage(
- size_t pos, uint8_t* array) {
- BROTLI_LOG(("WriteBitsPrepareStorage %10d\n", (int)pos));
- BROTLI_DCHECK((pos & 7) == 0);
- array[pos >> 3] = 0;
-}
-
-#if defined(__cplusplus) || defined(c_plusplus)
-} /* extern "C" */
-#endif
-
-#endif /* BROTLI_ENC_WRITE_BITS_H_ */
diff --git a/BaseTools/Source/C/BrotliCompress/include/brotli/decode.h b/BaseTools/Source/C/BrotliCompress/include/brotli/decode.h
deleted file mode 100644
index 2cd17250d9d8..000000000000
--- a/BaseTools/Source/C/BrotliCompress/include/brotli/decode.h
+++ /dev/null
@@ -1,344 +0,0 @@
-/* Copyright 2013 Google Inc. All Rights Reserved.
-
- Distributed under MIT license.
- See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
-*/
-
-/**
- * @file
- * API for Brotli decompression.
- */
-
-#ifndef BROTLI_DEC_DECODE_H_
-#define BROTLI_DEC_DECODE_H_
-
-#include <brotli/port.h>
-#include <brotli/types.h>
-
-#if defined(__cplusplus) || defined(c_plusplus)
-extern "C" {
-#endif
-
-/**
- * Opaque structure that holds decoder state.
- *
- * Allocated and initialized with ::BrotliDecoderCreateInstance.
- * Cleaned up and deallocated with ::BrotliDecoderDestroyInstance.
- */
-typedef struct BrotliDecoderStateStruct BrotliDecoderState;
-
-/**
- * Result type for ::BrotliDecoderDecompress and
- * ::BrotliDecoderDecompressStream functions.
- */
-typedef enum {
- /** Decoding error, e.g. corrupted input or memory allocation problem. */
- BROTLI_DECODER_RESULT_ERROR = 0,
- /** Decoding successfully completed. */
- BROTLI_DECODER_RESULT_SUCCESS = 1,
- /** Partially done; should be called again with more input. */
- BROTLI_DECODER_RESULT_NEEDS_MORE_INPUT = 2,
- /** Partially done; should be called again with more output. */
- BROTLI_DECODER_RESULT_NEEDS_MORE_OUTPUT = 3
-} BrotliDecoderResult;
-
-/**
- * Template that evaluates items of ::BrotliDecoderErrorCode.
- *
- * Example: @code {.cpp}
- * // Log Brotli error code.
- * switch (brotliDecoderErrorCode) {
- * #define CASE_(PREFIX, NAME, CODE) \
- * case BROTLI_DECODER ## PREFIX ## NAME: \
- * LOG(INFO) << "error code:" << #NAME; \
- * break;
- * #define NEWLINE_
- * BROTLI_DECODER_ERROR_CODES_LIST(CASE_, NEWLINE_)
- * #undef CASE_
- * #undef NEWLINE_
- * default: LOG(FATAL) << "unknown brotli error code";
- * }
- * @endcode
- */
-#define BROTLI_DECODER_ERROR_CODES_LIST(BROTLI_ERROR_CODE, SEPARATOR) \
- BROTLI_ERROR_CODE(_, NO_ERROR, 0) SEPARATOR \
- /* Same as BrotliDecoderResult values */ \
- BROTLI_ERROR_CODE(_, SUCCESS, 1) SEPARATOR \
- BROTLI_ERROR_CODE(_, NEEDS_MORE_INPUT, 2) SEPARATOR \
- BROTLI_ERROR_CODE(_, NEEDS_MORE_OUTPUT, 3) SEPARATOR \
- \
- /* Errors caused by invalid input */ \
- BROTLI_ERROR_CODE(_ERROR_FORMAT_, EXUBERANT_NIBBLE, -1) SEPARATOR \
- BROTLI_ERROR_CODE(_ERROR_FORMAT_, RESERVED, -2) SEPARATOR \
- BROTLI_ERROR_CODE(_ERROR_FORMAT_, EXUBERANT_META_NIBBLE, -3) SEPARATOR \
- BROTLI_ERROR_CODE(_ERROR_FORMAT_, SIMPLE_HUFFMAN_ALPHABET, -4) SEPARATOR \
- BROTLI_ERROR_CODE(_ERROR_FORMAT_, SIMPLE_HUFFMAN_SAME, -5) SEPARATOR \
- BROTLI_ERROR_CODE(_ERROR_FORMAT_, CL_SPACE, -6) SEPARATOR \
- BROTLI_ERROR_CODE(_ERROR_FORMAT_, HUFFMAN_SPACE, -7) SEPARATOR \
- BROTLI_ERROR_CODE(_ERROR_FORMAT_, CONTEXT_MAP_REPEAT, -8) SEPARATOR \
- BROTLI_ERROR_CODE(_ERROR_FORMAT_, BLOCK_LENGTH_1, -9) SEPARATOR \
- BROTLI_ERROR_CODE(_ERROR_FORMAT_, BLOCK_LENGTH_2, -10) SEPARATOR \
- BROTLI_ERROR_CODE(_ERROR_FORMAT_, TRANSFORM, -11) SEPARATOR \
- BROTLI_ERROR_CODE(_ERROR_FORMAT_, DICTIONARY, -12) SEPARATOR \
- BROTLI_ERROR_CODE(_ERROR_FORMAT_, WINDOW_BITS, -13) SEPARATOR \
- BROTLI_ERROR_CODE(_ERROR_FORMAT_, PADDING_1, -14) SEPARATOR \
- BROTLI_ERROR_CODE(_ERROR_FORMAT_, PADDING_2, -15) SEPARATOR \
- BROTLI_ERROR_CODE(_ERROR_FORMAT_, DISTANCE, -16) SEPARATOR \
- \
- /* -17..-18 codes are reserved */ \
- \
- BROTLI_ERROR_CODE(_ERROR_, DICTIONARY_NOT_SET, -19) SEPARATOR \
- BROTLI_ERROR_CODE(_ERROR_, INVALID_ARGUMENTS, -20) SEPARATOR \
- \
- /* Memory allocation problems */ \
- BROTLI_ERROR_CODE(_ERROR_ALLOC_, CONTEXT_MODES, -21) SEPARATOR \
- /* Literal, insert and distance trees together */ \
- BROTLI_ERROR_CODE(_ERROR_ALLOC_, TREE_GROUPS, -22) SEPARATOR \
- /* -23..-24 codes are reserved for distinct tree groups */ \
- BROTLI_ERROR_CODE(_ERROR_ALLOC_, CONTEXT_MAP, -25) SEPARATOR \
- BROTLI_ERROR_CODE(_ERROR_ALLOC_, RING_BUFFER_1, -26) SEPARATOR \
- BROTLI_ERROR_CODE(_ERROR_ALLOC_, RING_BUFFER_2, -27) SEPARATOR \
- /* -28..-29 codes are reserved for dynamic ring-buffer allocation */ \
- BROTLI_ERROR_CODE(_ERROR_ALLOC_, BLOCK_TYPE_TREES, -30) SEPARATOR \
- \
- /* "Impossible" states */ \
- BROTLI_ERROR_CODE(_ERROR_, UNREACHABLE, -31)
-
-/**
- * Error code for detailed logging / production debugging.
- *
- * See ::BrotliDecoderGetErrorCode and ::BROTLI_LAST_ERROR_CODE.
- */
-typedef enum {
-#define BROTLI_COMMA_ ,
-#define BROTLI_ERROR_CODE_ENUM_ITEM_(PREFIX, NAME, CODE) \
- BROTLI_DECODER ## PREFIX ## NAME = CODE
- BROTLI_DECODER_ERROR_CODES_LIST(BROTLI_ERROR_CODE_ENUM_ITEM_, BROTLI_COMMA_)
-} BrotliDecoderErrorCode;
-#undef BROTLI_ERROR_CODE_ENUM_ITEM_
-#undef BROTLI_COMMA_
-
-/**
- * The value of the last error code, negative integer.
- *
- * All other error code values are in the range from ::BROTLI_LAST_ERROR_CODE
- * to @c -1. There are also 4 other possible non-error codes @c 0 .. @c 3 in
- * ::BrotliDecoderErrorCode enumeration.
- */
-#define BROTLI_LAST_ERROR_CODE BROTLI_DECODER_ERROR_UNREACHABLE
-
-/** Options to be used with ::BrotliDecoderSetParameter. */
-typedef enum BrotliDecoderParameter {
- /**
- * Disable "canny" ring buffer allocation strategy.
- *
- * Ring buffer is allocated according to window size, despite the real size of
- * the content.
- */
- BROTLI_DECODER_PARAM_DISABLE_RING_BUFFER_REALLOCATION = 0,
- /**
- * Flag that determines if "Large Window Brotli" is used.
- */
- BROTLI_DECODER_PARAM_LARGE_WINDOW = 1
-} BrotliDecoderParameter;
-
-/**
- * Sets the specified parameter to the given decoder instance.
- *
- * @param state decoder instance
- * @param param parameter to set
- * @param value new parameter value
- * @returns ::BROTLI_FALSE if parameter is unrecognized, or value is invalid
- * @returns ::BROTLI_TRUE if value is accepted
- */
-BROTLI_DEC_API BROTLI_BOOL BrotliDecoderSetParameter(
- BrotliDecoderState* state, BrotliDecoderParameter param, uint32_t value);
-
-/**
- * Creates an instance of ::BrotliDecoderState and initializes it.
- *
- * The instance can be used once for decoding and should then be destroyed with
- * ::BrotliDecoderDestroyInstance, it cannot be reused for a new decoding
- * session.
- *
- * @p alloc_func and @p free_func @b MUST be both zero or both non-zero. In the
- * case they are both zero, default memory allocators are used. @p opaque is
- * passed to @p alloc_func and @p free_func when they are called. @p free_func
- * has to return without doing anything when asked to free a NULL pointer.
- *
- * @param alloc_func custom memory allocation function
- * @param free_func custom memory free function
- * @param opaque custom memory manager handle
- * @returns @c 0 if instance can not be allocated or initialized
- * @returns pointer to initialized ::BrotliDecoderState otherwise
- */
-BROTLI_DEC_API BrotliDecoderState* BrotliDecoderCreateInstance(
- brotli_alloc_func alloc_func, brotli_free_func free_func, void* opaque);
-
-/**
- * Deinitializes and frees ::BrotliDecoderState instance.
- *
- * @param state decoder instance to be cleaned up and deallocated
- */
-BROTLI_DEC_API void BrotliDecoderDestroyInstance(BrotliDecoderState* state);
-
-/**
- * Performs one-shot memory-to-memory decompression.
- *
- * Decompresses the data in @p encoded_buffer into @p decoded_buffer, and sets
- * @p *decoded_size to the decompressed length.
- *
- * @param encoded_size size of @p encoded_buffer
- * @param encoded_buffer compressed data buffer with at least @p encoded_size
- * addressable bytes
- * @param[in, out] decoded_size @b in: size of @p decoded_buffer; \n
- * @b out: length of decompressed data written to
- * @p decoded_buffer
- * @param decoded_buffer decompressed data destination buffer
- * @returns ::BROTLI_DECODER_RESULT_ERROR if input is corrupted, memory
- * allocation failed, or @p decoded_buffer is not large enough;
- * @returns ::BROTLI_DECODER_RESULT_SUCCESS otherwise
- */
-BROTLI_DEC_API BrotliDecoderResult BrotliDecoderDecompress(
- size_t encoded_size,
- const uint8_t encoded_buffer[BROTLI_ARRAY_PARAM(encoded_size)],
- size_t* decoded_size,
- uint8_t decoded_buffer[BROTLI_ARRAY_PARAM(*decoded_size)]);
-
-/**
- * Decompresses the input stream to the output stream.
- *
- * The values @p *available_in and @p *available_out must specify the number of
- * bytes addressable at @p *next_in and @p *next_out respectively.
- * When @p *available_out is @c 0, @p next_out is allowed to be @c NULL.
- *
- * After each call, @p *available_in will be decremented by the amount of input
- * bytes consumed, and the @p *next_in pointer will be incremented by that
- * amount. Similarly, @p *available_out will be decremented by the amount of
- * output bytes written, and the @p *next_out pointer will be incremented by
- * that amount.
- *
- * @p total_out, if it is not a null-pointer, will be set to the number
- * of bytes decompressed since the last @p state initialization.
- *
- * @note Input is never overconsumed, so @p next_in and @p available_in could be
- * passed to the next consumer after decoding is complete.
- *
- * @param state decoder instance
- * @param[in, out] available_in @b in: amount of available input; \n
- * @b out: amount of unused input
- * @param[in, out] next_in pointer to the next compressed byte
- * @param[in, out] available_out @b in: length of output buffer; \n
- * @b out: remaining size of output buffer
- * @param[in, out] next_out output buffer cursor;
- * can be @c NULL if @p available_out is @c 0
- * @param[out] total_out number of bytes decompressed so far; can be @c NULL
- * @returns ::BROTLI_DECODER_RESULT_ERROR if input is corrupted, memory
- * allocation failed, arguments were invalid, etc.;
- * use ::BrotliDecoderGetErrorCode to get detailed error code
- * @returns ::BROTLI_DECODER_RESULT_NEEDS_MORE_INPUT decoding is blocked until
- * more input data is provided
- * @returns ::BROTLI_DECODER_RESULT_NEEDS_MORE_OUTPUT decoding is blocked until
- * more output space is provided
- * @returns ::BROTLI_DECODER_RESULT_SUCCESS decoding is finished, no more
- * input might be consumed and no more output will be produced
- */
-BROTLI_DEC_API BrotliDecoderResult BrotliDecoderDecompressStream(
- BrotliDecoderState* state, size_t* available_in, const uint8_t** next_in,
- size_t* available_out, uint8_t** next_out, size_t* total_out);
-
-/**
- * Checks if decoder has more output.
- *
- * @param state decoder instance
- * @returns ::BROTLI_TRUE, if decoder has some unconsumed output
- * @returns ::BROTLI_FALSE otherwise
- */
-BROTLI_DEC_API BROTLI_BOOL BrotliDecoderHasMoreOutput(
- const BrotliDecoderState* state);
-
-/**
- * Acquires pointer to internal output buffer.
- *
- * This method is used to make language bindings easier and more efficient:
- * -# push data to ::BrotliDecoderDecompressStream,
- * until ::BROTLI_DECODER_RESULT_NEEDS_MORE_OUTPUT is reported
- * -# use ::BrotliDecoderTakeOutput to peek bytes and copy to language-specific
- * entity
- *
- * Also this could be useful if there is an output stream that is able to
- * consume all the provided data (e.g. when data is saved to file system).
- *
- * @attention After every call to ::BrotliDecoderTakeOutput @p *size bytes of
- * output are considered consumed for all consecutive calls to the
- * instance methods; returned pointer becomes invalidated as well.
- *
- * @note Decoder output is not guaranteed to be contiguous. This means that
- * after the size-unrestricted call to ::BrotliDecoderTakeOutput,
- * immediate next call to ::BrotliDecoderTakeOutput may return more data.
- *
- * @param state decoder instance
- * @param[in, out] size @b in: number of bytes caller is ready to take, @c 0 if
- * any amount could be handled; \n
- * @b out: amount of data pointed by returned pointer and
- * considered consumed; \n
- * out value is never greater than in value, unless it is @c 0
- * @returns pointer to output data
- */
-BROTLI_DEC_API const uint8_t* BrotliDecoderTakeOutput(
- BrotliDecoderState* state, size_t* size);
-
-/**
- * Checks if instance has already consumed input.
- *
- * Instance that returns ::BROTLI_FALSE is considered "fresh" and could be
- * reused.
- *
- * @param state decoder instance
- * @returns ::BROTLI_TRUE if decoder has already used some input bytes
- * @returns ::BROTLI_FALSE otherwise
- */
-BROTLI_DEC_API BROTLI_BOOL BrotliDecoderIsUsed(const BrotliDecoderState* state);
-
-/**
- * Checks if decoder instance reached the final state.
- *
- * @param state decoder instance
- * @returns ::BROTLI_TRUE if decoder is in a state where it reached the end of
- * the input and produced all of the output
- * @returns ::BROTLI_FALSE otherwise
- */
-BROTLI_DEC_API BROTLI_BOOL BrotliDecoderIsFinished(
- const BrotliDecoderState* state);
-
-/**
- * Acquires a detailed error code.
- *
- * Should be used only after ::BrotliDecoderDecompressStream returns
- * ::BROTLI_DECODER_RESULT_ERROR.
- *
- * See also ::BrotliDecoderErrorString
- *
- * @param state decoder instance
- * @returns last saved error code
- */
-BROTLI_DEC_API BrotliDecoderErrorCode BrotliDecoderGetErrorCode(
- const BrotliDecoderState* state);
-
-/**
- * Converts error code to a c-string.
- */
-BROTLI_DEC_API const char* BrotliDecoderErrorString(BrotliDecoderErrorCode c);
-
-/**
- * Gets a decoder library version.
- *
- * Look at BROTLI_VERSION for more information.
- */
-BROTLI_DEC_API uint32_t BrotliDecoderVersion(void);
-
-#if defined(__cplusplus) || defined(c_plusplus)
-} /* extern "C" */
-#endif
-
-#endif /* BROTLI_DEC_DECODE_H_ */
diff --git a/BaseTools/Source/C/BrotliCompress/include/brotli/encode.h b/BaseTools/Source/C/BrotliCompress/include/brotli/encode.h
deleted file mode 100644
index b26fa4278c10..000000000000
--- a/BaseTools/Source/C/BrotliCompress/include/brotli/encode.h
+++ /dev/null
@@ -1,427 +0,0 @@
-/* Copyright 2013 Google Inc. All Rights Reserved.
-
- Distributed under MIT license.
- See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
-*/
-
-/**
- * @file
- * API for Brotli compression.
- */
-
-#ifndef BROTLI_ENC_ENCODE_H_
-#define BROTLI_ENC_ENCODE_H_
-
-#include <brotli/port.h>
-#include <brotli/types.h>
-
-#if defined(__cplusplus) || defined(c_plusplus)
-extern "C" {
-#endif
-
-/** Minimal value for ::BROTLI_PARAM_LGWIN parameter. */
-#define BROTLI_MIN_WINDOW_BITS 10
-/**
- * Maximal value for ::BROTLI_PARAM_LGWIN parameter.
- *
- * @note equal to @c BROTLI_MAX_DISTANCE_BITS constant.
- */
-#define BROTLI_MAX_WINDOW_BITS 24
-/**
- * Maximal value for ::BROTLI_PARAM_LGWIN parameter
- * in "Large Window Brotli" (32-bit).
- */
-#define BROTLI_LARGE_MAX_WINDOW_BITS 30
-/** Minimal value for ::BROTLI_PARAM_LGBLOCK parameter. */
-#define BROTLI_MIN_INPUT_BLOCK_BITS 16
-/** Maximal value for ::BROTLI_PARAM_LGBLOCK parameter. */
-#define BROTLI_MAX_INPUT_BLOCK_BITS 24
-/** Minimal value for ::BROTLI_PARAM_QUALITY parameter. */
-#define BROTLI_MIN_QUALITY 0
-/** Maximal value for ::BROTLI_PARAM_QUALITY parameter. */
-#define BROTLI_MAX_QUALITY 11
-
-/** Options for ::BROTLI_PARAM_MODE parameter. */
-typedef enum BrotliEncoderMode {
- /**
- * Default compression mode.
- *
- * In this mode compressor does not know anything in advance about the
- * properties of the input.
- */
- BROTLI_MODE_GENERIC = 0,
- /** Compression mode for UTF-8 formatted text input. */
- BROTLI_MODE_TEXT = 1,
- /** Compression mode used in WOFF 2.0. */
- BROTLI_MODE_FONT = 2
-} BrotliEncoderMode;
-
-/** Default value for ::BROTLI_PARAM_QUALITY parameter. */
-#define BROTLI_DEFAULT_QUALITY 11
-/** Default value for ::BROTLI_PARAM_LGWIN parameter. */
-#define BROTLI_DEFAULT_WINDOW 22
-/** Default value for ::BROTLI_PARAM_MODE parameter. */
-#define BROTLI_DEFAULT_MODE BROTLI_MODE_GENERIC
-
-/** Operations that can be performed by streaming encoder. */
-typedef enum BrotliEncoderOperation {
- /**
- * Process input.
- *
- * Encoder may postpone producing output, until it has processed enough input.
- */
- BROTLI_OPERATION_PROCESS = 0,
- /**
- * Produce output for all processed input.
- *
- * Actual flush is performed when input stream is depleted and there is enough
- * space in output stream. This means that client should repeat
- * ::BROTLI_OPERATION_FLUSH operation until @p available_in becomes @c 0, and
- * ::BrotliEncoderHasMoreOutput returns ::BROTLI_FALSE. If output is acquired
- * via ::BrotliEncoderTakeOutput, then operation should be repeated after
- * output buffer is drained.
- *
- * @warning Until flush is complete, client @b SHOULD @b NOT swap,
- * reduce or extend input stream.
- *
- * When flush is complete, output data will be sufficient for decoder to
- * reproduce all the given input.
- */
- BROTLI_OPERATION_FLUSH = 1,
- /**
- * Finalize the stream.
- *
- * Actual finalization is performed when input stream is depleted and there is
- * enough space in output stream. This means that client should repeat
- * ::BROTLI_OPERATION_FINISH operation until @p available_in becomes @c 0, and
- * ::BrotliEncoderHasMoreOutput returns ::BROTLI_FALSE. If output is acquired
- * via ::BrotliEncoderTakeOutput, then operation should be repeated after
- * output buffer is drained.
- *
- * @warning Until finalization is complete, client @b SHOULD @b NOT swap,
- * reduce or extend input stream.
- *
- * Helper function ::BrotliEncoderIsFinished checks if stream is finalized and
- * output fully dumped.
- *
- * Adding more input data to finalized stream is impossible.
- */
- BROTLI_OPERATION_FINISH = 2,
- /**
- * Emit metadata block to stream.
- *
- * Metadata is opaque to Brotli: neither encoder, nor decoder processes this
- * data or relies on it. It may be used to pass some extra information from
- * encoder client to decoder client without interfering with main data stream.
- *
- * @note Encoder may emit empty metadata blocks internally, to pad encoded
- * stream to byte boundary.
- *
- * @warning Until emitting metadata is complete client @b SHOULD @b NOT swap,
- * reduce or extend input stream.
- *
- * @warning The whole content of input buffer is considered to be the content
- * of metadata block. Do @b NOT @e append metadata to input stream,
- * before it is depleted with other operations.
- *
- * Stream is soft-flushed before metadata block is emitted. Metadata block
- * @b MUST be no longer than than 16MiB.
- */
- BROTLI_OPERATION_EMIT_METADATA = 3
-} BrotliEncoderOperation;
-
-/** Options to be used with ::BrotliEncoderSetParameter. */
-typedef enum BrotliEncoderParameter {
- /**
- * Tune encoder for specific input.
- *
- * ::BrotliEncoderMode enumerates all available values.
- */
- BROTLI_PARAM_MODE = 0,
- /**
- * The main compression speed-density lever.
- *
- * The higher the quality, the slower the compression. Range is
- * from ::BROTLI_MIN_QUALITY to ::BROTLI_MAX_QUALITY.
- */
- BROTLI_PARAM_QUALITY = 1,
- /**
- * Recommended sliding LZ77 window size.
- *
- * Encoder may reduce this value, e.g. if input is much smaller than
- * window size.
- *
- * Window size is `(1 << value) - 16`.
- *
- * Range is from ::BROTLI_MIN_WINDOW_BITS to ::BROTLI_MAX_WINDOW_BITS.
- */
- BROTLI_PARAM_LGWIN = 2,
- /**
- * Recommended input block size.
- *
- * Encoder may reduce this value, e.g. if input is much smaller than input
- * block size.
- *
- * Range is from ::BROTLI_MIN_INPUT_BLOCK_BITS to
- * ::BROTLI_MAX_INPUT_BLOCK_BITS.
- *
- * @note Bigger input block size allows better compression, but consumes more
- * memory. \n The rough formula of memory used for temporary input
- * storage is `3 << lgBlock`.
- */
- BROTLI_PARAM_LGBLOCK = 3,
- /**
- * Flag that affects usage of "literal context modeling" format feature.
- *
- * This flag is a "decoding-speed vs compression ratio" trade-off.
- */
- BROTLI_PARAM_DISABLE_LITERAL_CONTEXT_MODELING = 4,
- /**
- * Estimated total input size for all ::BrotliEncoderCompressStream calls.
- *
- * The default value is 0, which means that the total input size is unknown.
- */
- BROTLI_PARAM_SIZE_HINT = 5,
- /**
- * Flag that determines if "Large Window Brotli" is used.
- */
- BROTLI_PARAM_LARGE_WINDOW = 6,
- /**
- * Recommended number of postfix bits (NPOSTFIX).
- *
- * Encoder may change this value.
- *
- * Range is from 0 to ::BROTLI_MAX_NPOSTFIX.
- */
- BROTLI_PARAM_NPOSTFIX = 7,
- /**
- * Recommended number of direct distance codes (NDIRECT).
- *
- * Encoder may change this value.
- *
- * Range is from 0 to (15 << NPOSTFIX) in steps of (1 << NPOSTFIX).
- */
- BROTLI_PARAM_NDIRECT = 8
-} BrotliEncoderParameter;
-
-/**
- * Opaque structure that holds encoder state.
- *
- * Allocated and initialized with ::BrotliEncoderCreateInstance.
- * Cleaned up and deallocated with ::BrotliEncoderDestroyInstance.
- */
-typedef struct BrotliEncoderStateStruct BrotliEncoderState;
-
-/**
- * Sets the specified parameter to the given encoder instance.
- *
- * @param state encoder instance
- * @param param parameter to set
- * @param value new parameter value
- * @returns ::BROTLI_FALSE if parameter is unrecognized, or value is invalid
- * @returns ::BROTLI_FALSE if value of parameter can not be changed at current
- * encoder state (e.g. when encoding is started, window size might be
- * already encoded and therefore it is impossible to change it)
- * @returns ::BROTLI_TRUE if value is accepted
- * @warning invalid values might be accepted in case they would not break
- * encoding process.
- */
-BROTLI_ENC_API BROTLI_BOOL BrotliEncoderSetParameter(
- BrotliEncoderState* state, BrotliEncoderParameter param, uint32_t value);
-
-/**
- * Creates an instance of ::BrotliEncoderState and initializes it.
- *
- * @p alloc_func and @p free_func @b MUST be both zero or both non-zero. In the
- * case they are both zero, default memory allocators are used. @p opaque is
- * passed to @p alloc_func and @p free_func when they are called. @p free_func
- * has to return without doing anything when asked to free a NULL pointer.
- *
- * @param alloc_func custom memory allocation function
- * @param free_func custom memory free function
- * @param opaque custom memory manager handle
- * @returns @c 0 if instance can not be allocated or initialized
- * @returns pointer to initialized ::BrotliEncoderState otherwise
- */
-BROTLI_ENC_API BrotliEncoderState* BrotliEncoderCreateInstance(
- brotli_alloc_func alloc_func, brotli_free_func free_func, void* opaque);
-
-/**
- * Deinitializes and frees ::BrotliEncoderState instance.
- *
- * @param state decoder instance to be cleaned up and deallocated
- */
-BROTLI_ENC_API void BrotliEncoderDestroyInstance(BrotliEncoderState* state);
-
-/**
- * Calculates the output size bound for the given @p input_size.
- *
- * @warning Result is only valid if quality is at least @c 2 and, in
- * case ::BrotliEncoderCompressStream was used, no flushes
- * (::BROTLI_OPERATION_FLUSH) were performed.
- *
- * @param input_size size of projected input
- * @returns @c 0 if result does not fit @c size_t
- */
-BROTLI_ENC_API size_t BrotliEncoderMaxCompressedSize(size_t input_size);
-
-/**
- * Performs one-shot memory-to-memory compression.
- *
- * Compresses the data in @p input_buffer into @p encoded_buffer, and sets
- * @p *encoded_size to the compressed length.
- *
- * @note If ::BrotliEncoderMaxCompressedSize(@p input_size) returns non-zero
- * value, then output is guaranteed to be no longer than that.
- *
- * @param quality quality parameter value, e.g. ::BROTLI_DEFAULT_QUALITY
- * @param lgwin lgwin parameter value, e.g. ::BROTLI_DEFAULT_WINDOW
- * @param mode mode parameter value, e.g. ::BROTLI_DEFAULT_MODE
- * @param input_size size of @p input_buffer
- * @param input_buffer input data buffer with at least @p input_size
- * addressable bytes
- * @param[in, out] encoded_size @b in: size of @p encoded_buffer; \n
- * @b out: length of compressed data written to
- * @p encoded_buffer, or @c 0 if compression fails
- * @param encoded_buffer compressed data destination buffer
- * @returns ::BROTLI_FALSE in case of compression error
- * @returns ::BROTLI_FALSE if output buffer is too small
- * @returns ::BROTLI_TRUE otherwise
- */
-BROTLI_ENC_API BROTLI_BOOL BrotliEncoderCompress(
- int quality, int lgwin, BrotliEncoderMode mode, size_t input_size,
- const uint8_t input_buffer[BROTLI_ARRAY_PARAM(input_size)],
- size_t* encoded_size,
- uint8_t encoded_buffer[BROTLI_ARRAY_PARAM(*encoded_size)]);
-
-/**
- * Compresses input stream to output stream.
- *
- * The values @p *available_in and @p *available_out must specify the number of
- * bytes addressable at @p *next_in and @p *next_out respectively.
- * When @p *available_out is @c 0, @p next_out is allowed to be @c NULL.
- *
- * After each call, @p *available_in will be decremented by the amount of input
- * bytes consumed, and the @p *next_in pointer will be incremented by that
- * amount. Similarly, @p *available_out will be decremented by the amount of
- * output bytes written, and the @p *next_out pointer will be incremented by
- * that amount.
- *
- * @p total_out, if it is not a null-pointer, will be set to the number
- * of bytes compressed since the last @p state initialization.
- *
- *
- *
- * Internally workflow consists of 3 tasks:
- * -# (optionally) copy input data to internal buffer
- * -# actually compress data and (optionally) store it to internal buffer
- * -# (optionally) copy compressed bytes from internal buffer to output stream
- *
- * Whenever all 3 tasks can't move forward anymore, or error occurs, this
- * method returns the control flow to caller.
- *
- * @p op is used to perform flush, finish the stream, or inject metadata block.
- * See ::BrotliEncoderOperation for more information.
- *
- * Flushing the stream means forcing encoding of all input passed to encoder and
- * completing the current output block, so it could be fully decoded by stream
- * decoder. To perform flush set @p op to ::BROTLI_OPERATION_FLUSH.
- * Under some circumstances (e.g. lack of output stream capacity) this operation
- * would require several calls to ::BrotliEncoderCompressStream. The method must
- * be called again until both input stream is depleted and encoder has no more
- * output (see ::BrotliEncoderHasMoreOutput) after the method is called.
- *
- * Finishing the stream means encoding of all input passed to encoder and
- * adding specific "final" marks, so stream decoder could determine that stream
- * is complete. To perform finish set @p op to ::BROTLI_OPERATION_FINISH.
- * Under some circumstances (e.g. lack of output stream capacity) this operation
- * would require several calls to ::BrotliEncoderCompressStream. The method must
- * be called again until both input stream is depleted and encoder has no more
- * output (see ::BrotliEncoderHasMoreOutput) after the method is called.
- *
- * @warning When flushing and finishing, @p op should not change until operation
- * is complete; input stream should not be swapped, reduced or
- * extended as well.
- *
- * @param state encoder instance
- * @param op requested operation
- * @param[in, out] available_in @b in: amount of available input; \n
- * @b out: amount of unused input
- * @param[in, out] next_in pointer to the next input byte
- * @param[in, out] available_out @b in: length of output buffer; \n
- * @b out: remaining size of output buffer
- * @param[in, out] next_out compressed output buffer cursor;
- * can be @c NULL if @p available_out is @c 0
- * @param[out] total_out number of bytes produced so far; can be @c NULL
- * @returns ::BROTLI_FALSE if there was an error
- * @returns ::BROTLI_TRUE otherwise
- */
-BROTLI_ENC_API BROTLI_BOOL BrotliEncoderCompressStream(
- BrotliEncoderState* state, BrotliEncoderOperation op, size_t* available_in,
- const uint8_t** next_in, size_t* available_out, uint8_t** next_out,
- size_t* total_out);
-
-/**
- * Checks if encoder instance reached the final state.
- *
- * @param state encoder instance
- * @returns ::BROTLI_TRUE if encoder is in a state where it reached the end of
- * the input and produced all of the output
- * @returns ::BROTLI_FALSE otherwise
- */
-BROTLI_ENC_API BROTLI_BOOL BrotliEncoderIsFinished(BrotliEncoderState* state);
-
-/**
- * Checks if encoder has more output.
- *
- * @param state encoder instance
- * @returns ::BROTLI_TRUE, if encoder has some unconsumed output
- * @returns ::BROTLI_FALSE otherwise
- */
-BROTLI_ENC_API BROTLI_BOOL BrotliEncoderHasMoreOutput(
- BrotliEncoderState* state);
-
-/**
- * Acquires pointer to internal output buffer.
- *
- * This method is used to make language bindings easier and more efficient:
- * -# push data to ::BrotliEncoderCompressStream,
- * until ::BrotliEncoderHasMoreOutput returns BROTL_TRUE
- * -# use ::BrotliEncoderTakeOutput to peek bytes and copy to language-specific
- * entity
- *
- * Also this could be useful if there is an output stream that is able to
- * consume all the provided data (e.g. when data is saved to file system).
- *
- * @attention After every call to ::BrotliEncoderTakeOutput @p *size bytes of
- * output are considered consumed for all consecutive calls to the
- * instance methods; returned pointer becomes invalidated as well.
- *
- * @note Encoder output is not guaranteed to be contiguous. This means that
- * after the size-unrestricted call to ::BrotliEncoderTakeOutput,
- * immediate next call to ::BrotliEncoderTakeOutput may return more data.
- *
- * @param state encoder instance
- * @param[in, out] size @b in: number of bytes caller is ready to take, @c 0 if
- * any amount could be handled; \n
- * @b out: amount of data pointed by returned pointer and
- * considered consumed; \n
- * out value is never greater than in value, unless it is @c 0
- * @returns pointer to output data
- */
-BROTLI_ENC_API const uint8_t* BrotliEncoderTakeOutput(
- BrotliEncoderState* state, size_t* size);
-
-
-/**
- * Gets an encoder library version.
- *
- * Look at BROTLI_VERSION for more information.
- */
-BROTLI_ENC_API uint32_t BrotliEncoderVersion(void);
-
-#if defined(__cplusplus) || defined(c_plusplus)
-} /* extern "C" */
-#endif
-
-#endif /* BROTLI_ENC_ENCODE_H_ */
diff --git a/BaseTools/Source/C/BrotliCompress/include/brotli/port.h b/BaseTools/Source/C/BrotliCompress/include/brotli/port.h
deleted file mode 100644
index 6e439987b547..000000000000
--- a/BaseTools/Source/C/BrotliCompress/include/brotli/port.h
+++ /dev/null
@@ -1,274 +0,0 @@
-/* Copyright 2016 Google Inc. All Rights Reserved.
-
- Distributed under MIT license.
- See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
-*/
-
-/* Macros for compiler / platform specific API declarations. */
-
-#ifndef BROTLI_COMMON_PORT_H_
-#define BROTLI_COMMON_PORT_H_
-
-/* The following macros were borrowed from https://github.com/nemequ/hedley
- * with permission of original author - Evan Nemerson <evan@nemerson.com> */
-
-/* >>> >>> >>> hedley macros */
-
-#define BROTLI_MAKE_VERSION(major, minor, revision) \
- (((major) * 1000000) + ((minor) * 1000) + (revision))
-
-#if defined(__GNUC__) && defined(__GNUC_PATCHLEVEL__)
-#define BROTLI_GNUC_VERSION \
- BROTLI_MAKE_VERSION(__GNUC__, __GNUC_MINOR__, __GNUC_PATCHLEVEL__)
-#elif defined(__GNUC__)
-#define BROTLI_GNUC_VERSION BROTLI_MAKE_VERSION(__GNUC__, __GNUC_MINOR__, 0)
-#endif
-
-#if defined(BROTLI_GNUC_VERSION)
-#define BROTLI_GNUC_VERSION_CHECK(major, minor, patch) \
- (BROTLI_GNUC_VERSION >= BROTLI_MAKE_VERSION(major, minor, patch))
-#else
-#define BROTLI_GNUC_VERSION_CHECK(major, minor, patch) (0)
-#endif
-
-#if defined(_MSC_FULL_VER) && (_MSC_FULL_VER >= 140000000)
-#define BROTLI_MSVC_VERSION \
- BROTLI_MAKE_VERSION((_MSC_FULL_VER / 10000000), \
- (_MSC_FULL_VER % 10000000) / 100000, \
- (_MSC_FULL_VER % 100000) / 100)
-#elif defined(_MSC_FULL_VER)
-#define BROTLI_MSVC_VERSION \
- BROTLI_MAKE_VERSION((_MSC_FULL_VER / 1000000), \
- (_MSC_FULL_VER % 1000000) / 10000, \
- (_MSC_FULL_VER % 10000) / 10)
-#elif defined(_MSC_VER)
-#define BROTLI_MSVC_VERSION \
- BROTLI_MAKE_VERSION(_MSC_VER / 100, _MSC_VER % 100, 0)
-#endif
-
-#if !defined(_MSC_VER)
-#define BROTLI_MSVC_VERSION_CHECK(major, minor, patch) (0)
-#elif defined(_MSC_VER) && (_MSC_VER >= 1400)
-#define BROTLI_MSVC_VERSION_CHECK(major, minor, patch) \
- (_MSC_FULL_VER >= ((major * 10000000) + (minor * 100000) + (patch)))
-#elif defined(_MSC_VER) && (_MSC_VER >= 1200)
-#define BROTLI_MSVC_VERSION_CHECK(major, minor, patch) \
- (_MSC_FULL_VER >= ((major * 1000000) + (minor * 10000) + (patch)))
-#else
-#define BROTLI_MSVC_VERSION_CHECK(major, minor, patch) \
- (_MSC_VER >= ((major * 100) + (minor)))
-#endif
-
-#if defined(__INTEL_COMPILER) && defined(__INTEL_COMPILER_UPDATE)
-#define BROTLI_INTEL_VERSION \
- BROTLI_MAKE_VERSION(__INTEL_COMPILER / 100, \
- __INTEL_COMPILER % 100, \
- __INTEL_COMPILER_UPDATE)
-#elif defined(__INTEL_COMPILER)
-#define BROTLI_INTEL_VERSION \
- BROTLI_MAKE_VERSION(__INTEL_COMPILER / 100, __INTEL_COMPILER % 100, 0)
-#endif
-
-#if defined(BROTLI_INTEL_VERSION)
-#define BROTLI_INTEL_VERSION_CHECK(major, minor, patch) \
- (BROTLI_INTEL_VERSION >= BROTLI_MAKE_VERSION(major, minor, patch))
-#else
-#define BROTLI_INTEL_VERSION_CHECK(major, minor, patch) (0)
-#endif
-
-#if defined(__PGI) && \
- defined(__PGIC__) && defined(__PGIC_MINOR__) && defined(__PGIC_PATCHLEVEL__)
-#define BROTLI_PGI_VERSION \
- BROTLI_MAKE_VERSION(__PGIC__, __PGIC_MINOR__, __PGIC_PATCHLEVEL__)
-#endif
-
-#if defined(BROTLI_PGI_VERSION)
-#define BROTLI_PGI_VERSION_CHECK(major, minor, patch) \
- (BROTLI_PGI_VERSION >= BROTLI_MAKE_VERSION(major, minor, patch))
-#else
-#define BROTLI_PGI_VERSION_CHECK(major, minor, patch) (0)
-#endif
-
-#if defined(__SUNPRO_C) && (__SUNPRO_C > 0x1000)
-#define BROTLI_SUNPRO_VERSION \
- BROTLI_MAKE_VERSION( \
- (((__SUNPRO_C >> 16) & 0xf) * 10) + ((__SUNPRO_C >> 12) & 0xf), \
- (((__SUNPRO_C >> 8) & 0xf) * 10) + ((__SUNPRO_C >> 4) & 0xf), \
- (__SUNPRO_C & 0xf) * 10)
-#elif defined(__SUNPRO_C)
-#define BROTLI_SUNPRO_VERSION \
- BROTLI_MAKE_VERSION((__SUNPRO_C >> 8) & 0xf, \
- (__SUNPRO_C >> 4) & 0xf, \
- (__SUNPRO_C) & 0xf)
-#elif defined(__SUNPRO_CC) && (__SUNPRO_CC > 0x1000)
-#define BROTLI_SUNPRO_VERSION \
- BROTLI_MAKE_VERSION( \
- (((__SUNPRO_CC >> 16) & 0xf) * 10) + ((__SUNPRO_CC >> 12) & 0xf), \
- (((__SUNPRO_CC >> 8) & 0xf) * 10) + ((__SUNPRO_CC >> 4) & 0xf), \
- (__SUNPRO_CC & 0xf) * 10)
-#elif defined(__SUNPRO_CC)
-#define BROTLI_SUNPRO_VERSION \
- BROTLI_MAKE_VERSION((__SUNPRO_CC >> 8) & 0xf, \
- (__SUNPRO_CC >> 4) & 0xf, \
- (__SUNPRO_CC) & 0xf)
-#endif
-
-#if defined(BROTLI_SUNPRO_VERSION)
-#define BROTLI_SUNPRO_VERSION_CHECK(major, minor, patch) \
- (BROTLI_SUNPRO_VERSION >= BROTLI_MAKE_VERSION(major, minor, patch))
-#else
-#define BROTLI_SUNPRO_VERSION_CHECK(major, minor, patch) (0)
-#endif
-
-#if defined(__CC_ARM) && defined(__ARMCOMPILER_VERSION)
-#define BROTLI_ARM_VERSION \
- BROTLI_MAKE_VERSION((__ARMCOMPILER_VERSION / 1000000), \
- (__ARMCOMPILER_VERSION % 1000000) / 10000, \
- (__ARMCOMPILER_VERSION % 10000) / 100)
-#elif defined(__CC_ARM) && defined(__ARMCC_VERSION)
-#define BROTLI_ARM_VERSION \
- BROTLI_MAKE_VERSION((__ARMCC_VERSION / 1000000), \
- (__ARMCC_VERSION % 1000000) / 10000, \
- (__ARMCC_VERSION % 10000) / 100)
-#endif
-
-#if defined(BROTLI_ARM_VERSION)
-#define BROTLI_ARM_VERSION_CHECK(major, minor, patch) \
- (BROTLI_ARM_VERSION >= BROTLI_MAKE_VERSION(major, minor, patch))
-#else
-#define BROTLI_ARM_VERSION_CHECK(major, minor, patch) (0)
-#endif
-
-#if defined(__ibmxl__)
-#define BROTLI_IBM_VERSION \
- BROTLI_MAKE_VERSION(__ibmxl_version__, \
- __ibmxl_release__, \
- __ibmxl_modification__)
-#elif defined(__xlC__) && defined(__xlC_ver__)
-#define BROTLI_IBM_VERSION \
- BROTLI_MAKE_VERSION(__xlC__ >> 8, __xlC__ & 0xff, (__xlC_ver__ >> 8) & 0xff)
-#elif defined(__xlC__)
-#define BROTLI_IBM_VERSION BROTLI_MAKE_VERSION(__xlC__ >> 8, __xlC__ & 0xff, 0)
-#endif
-
-#if defined(BROTLI_IBM_VERSION)
-#define BROTLI_IBM_VERSION_CHECK(major, minor, patch) \
- (BROTLI_IBM_VERSION >= BROTLI_MAKE_VERSION(major, minor, patch))
-#else
-#define BROTLI_IBM_VERSION_CHECK(major, minor, patch) (0)
-#endif
-
-#if defined(__TI_COMPILER_VERSION__)
-#define BROTLI_TI_VERSION \
- BROTLI_MAKE_VERSION((__TI_COMPILER_VERSION__ / 1000000), \
- (__TI_COMPILER_VERSION__ % 1000000) / 1000, \
- (__TI_COMPILER_VERSION__ % 1000))
-#endif
-
-#if defined(BROTLI_TI_VERSION)
-#define BROTLI_TI_VERSION_CHECK(major, minor, patch) \
- (BROTLI_TI_VERSION >= BROTLI_MAKE_VERSION(major, minor, patch))
-#else
-#define BROTLI_TI_VERSION_CHECK(major, minor, patch) (0)
-#endif
-
-#if defined(__IAR_SYSTEMS_ICC__)
-#if __VER__ > 1000
-#define BROTLI_IAR_VERSION \
- BROTLI_MAKE_VERSION((__VER__ / 1000000), \
- (__VER__ / 1000) % 1000, \
- (__VER__ % 1000))
-#else
-#define BROTLI_IAR_VERSION BROTLI_MAKE_VERSION(VER / 100, __VER__ % 100, 0)
-#endif
-#endif
-
-#if defined(BROTLI_IAR_VERSION)
-#define BROTLI_IAR_VERSION_CHECK(major, minor, patch) \
- (BROTLI_IAR_VERSION >= BROTLI_MAKE_VERSION(major, minor, patch))
-#else
-#define BROTLI_IAR_VERSION_CHECK(major, minor, patch) (0)
-#endif
-
-#if defined(__TINYC__)
-#define BROTLI_TINYC_VERSION \
- BROTLI_MAKE_VERSION(__TINYC__ / 1000, (__TINYC__ / 100) % 10, __TINYC__ % 100)
-#endif
-
-#if defined(BROTLI_TINYC_VERSION)
-#define BROTLI_TINYC_VERSION_CHECK(major, minor, patch) \
- (BROTLI_TINYC_VERSION >= BROTLI_MAKE_VERSION(major, minor, patch))
-#else
-#define BROTLI_TINYC_VERSION_CHECK(major, minor, patch) (0)
-#endif
-
-#if defined(__has_attribute)
-#define BROTLI_GNUC_HAS_ATTRIBUTE(attribute, major, minor, patch) \
- __has_attribute(attribute)
-#else
-#define BROTLI_GNUC_HAS_ATTRIBUTE(attribute, major, minor, patch) \
- BROTLI_GNUC_VERSION_CHECK(major, minor, patch)
-#endif
-
-#if defined(__has_builtin)
-#define BROTLI_GNUC_HAS_BUILTIN(builtin, major, minor, patch) \
- __has_builtin(builtin)
-#else
-#define BROTLI_GNUC_HAS_BUILTIN(builtin, major, minor, patch) \
- BROTLI_GNUC_VERSION_CHECK(major, minor, patch)
-#endif
-
-#if defined(_WIN32) || defined(__CYGWIN__)
-#define BROTLI_PUBLIC
-#elif BROTLI_GNUC_VERSION_CHECK(3, 3, 0) || \
- BROTLI_TI_VERSION_CHECK(8, 0, 0) || \
- BROTLI_INTEL_VERSION_CHECK(16, 0, 0) || \
- BROTLI_ARM_VERSION_CHECK(4, 1, 0) || \
- BROTLI_IBM_VERSION_CHECK(13, 1, 0) || \
- BROTLI_SUNPRO_VERSION_CHECK(5, 11, 0) || \
- (BROTLI_TI_VERSION_CHECK(7, 3, 0) && \
- defined(__TI_GNU_ATTRIBUTE_SUPPORT__) && defined(__TI_EABI__))
-#define BROTLI_PUBLIC __attribute__ ((visibility ("default")))
-#else
-#define BROTLI_PUBLIC
-#endif
-
-#if defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) && \
- !defined(__STDC_NO_VLA__) && !defined(__cplusplus) && \
- !defined(__PGI) && !defined(__PGIC__) && !defined(__TINYC__)
-#define BROTLI_ARRAY_PARAM(name) (name)
-#else
-#define BROTLI_ARRAY_PARAM(name)
-#endif
-
-/* <<< <<< <<< end of hedley macros. */
-
-#if defined(BROTLI_SHARED_COMPILATION)
-#if defined(_WIN32)
-#if defined(BROTLICOMMON_SHARED_COMPILATION)
-#define BROTLI_COMMON_API __declspec(dllexport)
-#else
-#define BROTLI_COMMON_API __declspec(dllimport)
-#endif /* BROTLICOMMON_SHARED_COMPILATION */
-#if defined(BROTLIDEC_SHARED_COMPILATION)
-#define BROTLI_DEC_API __declspec(dllexport)
-#else
-#define BROTLI_DEC_API __declspec(dllimport)
-#endif /* BROTLIDEC_SHARED_COMPILATION */
-#if defined(BROTLIENC_SHARED_COMPILATION)
-#define BROTLI_ENC_API __declspec(dllexport)
-#else
-#define BROTLI_ENC_API __declspec(dllimport)
-#endif /* BROTLIENC_SHARED_COMPILATION */
-#else /* _WIN32 */
-#define BROTLI_COMMON_API BROTLI_PUBLIC
-#define BROTLI_DEC_API BROTLI_PUBLIC
-#define BROTLI_ENC_API BROTLI_PUBLIC
-#endif /* _WIN32 */
-#else /* BROTLI_SHARED_COMPILATION */
-#define BROTLI_COMMON_API
-#define BROTLI_DEC_API
-#define BROTLI_ENC_API
-#endif
-
-#endif /* BROTLI_COMMON_PORT_H_ */
diff --git a/BaseTools/Source/C/BrotliCompress/include/brotli/types.h b/BaseTools/Source/C/BrotliCompress/include/brotli/types.h
deleted file mode 100644
index 513e701af96d..000000000000
--- a/BaseTools/Source/C/BrotliCompress/include/brotli/types.h
+++ /dev/null
@@ -1,83 +0,0 @@
-/* Copyright 2013 Google Inc. All Rights Reserved.
-
- Distributed under MIT license.
- See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
-*/
-
-/**
- * @file
- * Common types used in decoder and encoder API.
- */
-
-#ifndef BROTLI_COMMON_TYPES_H_
-#define BROTLI_COMMON_TYPES_H_
-
-#include <stddef.h> /* for size_t */
-
-#if defined(_MSC_VER) && (_MSC_VER < 1600)
-typedef __int8 int8_t;
-typedef unsigned __int8 uint8_t;
-typedef __int16 int16_t;
-typedef unsigned __int16 uint16_t;
-typedef __int32 int32_t;
-typedef unsigned __int32 uint32_t;
-typedef unsigned __int64 uint64_t;
-typedef __int64 int64_t;
-#else
-#include <stdint.h>
-#endif /* defined(_MSC_VER) && (_MSC_VER < 1600) */
-
-/**
- * A portable @c bool replacement.
- *
- * ::BROTLI_BOOL is a "documentation" type: actually it is @c int, but in API it
- * denotes a type, whose only values are ::BROTLI_TRUE and ::BROTLI_FALSE.
- *
- * ::BROTLI_BOOL values passed to Brotli should either be ::BROTLI_TRUE or
- * ::BROTLI_FALSE, or be a result of ::TO_BROTLI_BOOL macros.
- *
- * ::BROTLI_BOOL values returned by Brotli should not be tested for equality
- * with @c true, @c false, ::BROTLI_TRUE, ::BROTLI_FALSE, but rather should be
- * evaluated, for example: @code{.cpp}
- * if (SomeBrotliFunction(encoder, BROTLI_TRUE) &&
- * !OtherBrotliFunction(decoder, BROTLI_FALSE)) {
- * bool x = !!YetAnotherBrotliFunction(encoder, TO_BROLTI_BOOL(2 * 2 == 4));
- * DoSomething(x);
- * }
- * @endcode
- */
-#define BROTLI_BOOL int
-/** Portable @c true replacement. */
-#define BROTLI_TRUE 1
-/** Portable @c false replacement. */
-#define BROTLI_FALSE 0
-/** @c bool to ::BROTLI_BOOL conversion macros. */
-#define TO_BROTLI_BOOL(X) (!!(X) ? BROTLI_TRUE : BROTLI_FALSE)
-
-#define BROTLI_MAKE_UINT64_T(high, low) ((((uint64_t)(high)) << 32) | low)
-
-#define BROTLI_UINT32_MAX (~((uint32_t)0))
-#define BROTLI_SIZE_MAX (~((size_t)0))
-
-/**
- * Allocating function pointer type.
- *
- * @param opaque custom memory manager handle provided by client
- * @param size requested memory region size; can not be @c 0
- * @returns @c 0 in the case of failure
- * @returns a valid pointer to a memory region of at least @p size bytes
- * long otherwise
- */
-typedef void* (*brotli_alloc_func)(void* opaque, size_t size);
-
-/**
- * Deallocating function pointer type.
- *
- * This function @b SHOULD do nothing if @p address is @c 0.
- *
- * @param opaque custom memory manager handle provided by client
- * @param address memory region pointer returned by ::brotli_alloc_func, or @c 0
- */
-typedef void (*brotli_free_func)(void* opaque, void* address);
-
-#endif /* BROTLI_COMMON_TYPES_H_ */
diff --git a/BaseTools/Source/C/BrotliCompress/tools/brotli.md b/BaseTools/Source/C/BrotliCompress/tools/brotli.md
deleted file mode 100644
index c029869bced7..000000000000
--- a/BaseTools/Source/C/BrotliCompress/tools/brotli.md
+++ /dev/null
@@ -1,107 +0,0 @@
-brotli(1) -- brotli, unbrotli - compress or decompress files
-================================================================
-
-SYNOPSIS
---------
-
-`brotli` [*OPTION|FILE*]...
-
-`unbrotli` is equivalent to `brotli --decompress`
-
-DESCRIPTION
------------
-`brotli` is a generic-purpose lossless compression algorithm that compresses
-data using a combination of a modern variant of the **LZ77** algorithm, Huffman
-coding and 2-nd order context modeling, with a compression ratio comparable to
-the best currently available general-purpose compression methods. It is similar
-in speed with deflate but offers more dense compression.
-
-`brotli` command line syntax similar to `gzip (1)` and `zstd (1)`.
-Unlike `gzip (1)`, source files are preserved by default. It is possible to
-remove them after processing by using the `--rm` _option_.
-
-Arguments that look like "`--name`" or "`--name=value`" are _options_. Every
-_option_ has a short form "`-x`" or "`-x value`". Multiple short form _options_
-could be coalesced:
-
-* "`--decompress --stdout --suffix=.b`" works the same as
-* "`-d -s -S .b`" and
-* "`-dsS .b`"
-
-`brotli` has 3 operation modes:
-
-* default mode is compression;
-* `--decompress` option activates decompression mode;
-* `--test` option switches to integrity test mode; this option is equivalent to
- "`--decompress --stdout`" except that the decompressed data is discarded
- instead of being written to standard output.
-
-Every non-option argument is a _file_ entry. If no _files_ are given or _file_
-is "`-`", `brotli` reads from standard input. All arguments after "`--`" are
-_file_ entries.
-
-Unless `--stdout` or `--output` is specified, _files_ are written to a new file
-whose name is derived from the source _file_ name:
-
-* when compressing, a suffix is appended to the source filename to
- get the target filename
-* when decompressing, a suffix is removed from the source filename to
- get the target filename
-
-Default suffix is `.br`, but it could be specified with `--suffix` option.
-
-Conflicting or duplicate _options_ are not allowed.
-
-OPTIONS
--------
-
-* `-#`:
- compression level (0-9); bigger values cause denser, but slower compression
-* `-c`, `--stdout`:
- write on standard output
-* `-d`, `--decompress`:
- decompress mode
-* `-f`, `--force`:
- force output file overwrite
-* `-h`, `--help`:
- display this help and exit
-* `-j`, `--rm`:
- remove source file(s); `gzip (1)`-like behaviour
-* `-k`, `--keep`:
- keep source file(s); `zstd (1)`-like behaviour
-* `-n`, `--no-copy-stat`:
- do not copy source file(s) attributes
-* `-o FILE`, `--output=FILE`
- output file; valid only if there is a single input entry
-* `-q NUM`, `--quality=NUM`:
- compression level (0-11); bigger values cause denser, but slower compression
-* `-t`, `--test`:
- test file integrity mode
-* `-v`, `--verbose`:
- increase output verbosity
-* `-w NUM`, `--lgwin=NUM`:
- set LZ77 window size (0, 10-24) (default: 22); window size is
- `(2**NUM - 16)`; 0 lets compressor decide over the optimal value; bigger
- windows size improve density; decoder might require up to window size
- memory to operate
-* `-S SUF`, `--suffix=SUF`:
- output file suffix (default: `.br`)
-* `-V`, `--version`:
- display version and exit
-* `-Z`, `--best`:
- use best compression level (default); same as "`-q 11`"
-
-SEE ALSO
---------
-
-`brotli` file format is defined in
-[RFC 7932](https://www.ietf.org/rfc/rfc7932.txt).
-
-`brotli` is open-sourced under the
-[MIT License](https://opensource.org/licenses/MIT).
-
-Mailing list: https://groups.google.com/forum/#!forum/brotli
-
-BUGS
-----
-Report bugs at: https://github.com/google/brotli/issues
diff --git a/Readme.md b/Readme.md
index 4a4775db85fd..31a56b4913d5 100644
--- a/Readme.md
+++ b/Readme.md
@@ -57,7 +57,7 @@ for the UEFI and PI specifications from www.uefi.org.
The majority of the content in the EDK II open source project uses a
[BSD-2-Clause Plus Patent License](License.txt). The EDK II open source project
contains the following components that are covered by additional licenses:
-* [BaseTools/Source/C/BrotliCompress](BaseTools/Source/C/BrotliCompress/LICENSE)
+* [BaseTools/Source/C/BrotliCompress/brotli](https://github.com/google/brotli/blob/master/LICENSE)
* [MdeModulePkg/Library/BrotliCustomDecompressLib/brotli](https://github.com/google/brotli/blob/master/LICENSE)
* [BaseTools/Source/C/LzmaCompress](BaseTools/Source/C/LzmaCompress/LZMA-SDK-README.txt)
* [MdeModulePkg/Library/LzmaCustomDecompressLib](MdeModulePkg/Library/LzmaCustomDecompressLib/LZMA-SDK-README.txt)
@@ -200,6 +200,7 @@ as possible as we can. Currently EDK II contains the following submodules
- CryptoPkg/Library/OpensslLib/openssl
- ArmPkg/Library/ArmSoftFloatLib/berkeley-softfloat-3
- MdeModulePkg/Library/BrotliCustomDecompressLib/brotli
+- BaseTools/Source/C/BrotliCompress/brotli
ArmSoftFloatLib is actually required by OpensslLib. It's inevitable
in openssl-1.1.1 (since stable201905) for floating point parameter
--
2.18.0.windows.1
^ permalink raw reply related [flat|nested] 6+ messages in thread
* Re: [PATCH 2/2] BaseTools: Make brotli a submodule
2020-03-02 3:19 ` [PATCH 2/2] BaseTools: " Zhang, Shenglei
@ 2020-03-05 8:03 ` Bob Feng
[not found] ` <15F959C75C03A288.12001@groups.io>
1 sibling, 0 replies; 6+ messages in thread
From: Bob Feng @ 2020-03-05 8:03 UTC (permalink / raw)
To: Zhang, Shenglei, devel@edk2.groups.io; +Cc: Gao, Liming
Shenglei,
Please update BZ status as IN_PROGRESS and add patch link.
Thanks,
Bob
-----Original Message-----
From: Zhang, Shenglei
Sent: Monday, March 2, 2020 11:20 AM
To: devel@edk2.groups.io
Cc: Feng, Bob C <bob.c.feng@intel.com>; Gao, Liming <liming.gao@intel.com>
Subject: [PATCH 2/2] BaseTools: Make brotli a submodule
Use submodule way to access brotli in BaseTools based on
brotli version 666c3280cc11dc433c303d79a83d4ffbdd12cc8d.
https://bugzilla.tianocore.org/show_bug.cgi?id=2558
Cc: Bob Feng <bob.c.feng@intel.com>
Cc: Liming Gao <liming.gao@intel.com>
Signed-off-by: Shenglei Zhang <shenglei.zhang@intel.com>
---
.../C/BrotliCompress/common/dictionary.c | 5905 -----------------
.../C/BrotliCompress/common/transform.c | 235 -
.../Source/C/BrotliCompress/dec/bit_reader.c | 48 -
.../Source/C/BrotliCompress/dec/decode.c | 2497 -------
.../Source/C/BrotliCompress/dec/huffman.c | 356 -
BaseTools/Source/C/BrotliCompress/dec/state.c | 164 -
.../BrotliCompress/enc/backward_references.c | 144 -
.../enc/backward_references_hq.c | 830 ---
.../Source/C/BrotliCompress/enc/bit_cost.c | 35 -
.../C/BrotliCompress/enc/block_splitter.c | 194 -
.../C/BrotliCompress/enc/brotli_bit_stream.c | 1331 ----
.../Source/C/BrotliCompress/enc/cluster.c | 56 -
.../C/BrotliCompress/enc/compress_fragment.c | 790 ---
.../enc/compress_fragment_two_pass.c | 645 --
.../C/BrotliCompress/enc/dictionary_hash.c | 1120 ----
.../Source/C/BrotliCompress/enc/encode.c | 1864 ------
.../C/BrotliCompress/enc/encoder_dict.c | 32 -
.../C/BrotliCompress/enc/entropy_encode.c | 501 --
.../Source/C/BrotliCompress/enc/histogram.c | 100 -
.../C/BrotliCompress/enc/literal_cost.c | 175 -
.../Source/C/BrotliCompress/enc/memory.c | 170 -
.../Source/C/BrotliCompress/enc/metablock.c | 667 --
.../Source/C/BrotliCompress/enc/static_dict.c | 486 --
.../Source/C/BrotliCompress/enc/utf8_util.c | 85 -
.../Source/C/BrotliCompress/tools/brotli.c | 1143 ----
.gitmodules | 3 +
BaseTools/Source/C/BrotliCompress/GNUmakefile | 54 +-
BaseTools/Source/C/BrotliCompress/LICENSE | 19 -
BaseTools/Source/C/BrotliCompress/Makefile | 52 +-
BaseTools/Source/C/BrotliCompress/README.md | 26 -
BaseTools/Source/C/BrotliCompress/ReadMe.txt | 2 -
BaseTools/Source/C/BrotliCompress/brotli | 1 +
.../C/BrotliCompress/common/constants.h | 64 -
.../Source/C/BrotliCompress/common/context.h | 261 -
.../C/BrotliCompress/common/dictionary.h | 64 -
.../Source/C/BrotliCompress/common/platform.h | 558 --
.../C/BrotliCompress/common/transform.h | 80 -
.../Source/C/BrotliCompress/common/version.h | 26 -
.../Source/C/BrotliCompress/dec/bit_reader.h | 309 -
.../Source/C/BrotliCompress/dec/huffman.h | 72 -
.../Source/C/BrotliCompress/dec/prefix.h | 750 ---
BaseTools/Source/C/BrotliCompress/dec/state.h | 258 -
.../brotli-comparison-study-2015-09-22.pdf | Bin 215208 -> 0 bytes
.../BrotliCompress/enc/backward_references.h | 38 -
.../enc/backward_references_hq.h | 93 -
.../enc/backward_references_inc.h | 153 -
.../Source/C/BrotliCompress/enc/bit_cost.h | 63 -
.../C/BrotliCompress/enc/bit_cost_inc.h | 127 -
.../C/BrotliCompress/enc/block_encoder_inc.h | 34 -
.../C/BrotliCompress/enc/block_splitter.h | 51 -
.../C/BrotliCompress/enc/block_splitter_inc.h | 431 --
.../C/BrotliCompress/enc/brotli_bit_stream.h | 84 -
.../Source/C/BrotliCompress/enc/cluster.h | 48 -
.../Source/C/BrotliCompress/enc/cluster_inc.h | 317 -
.../Source/C/BrotliCompress/enc/command.h | 190 -
.../C/BrotliCompress/enc/compress_fragment.h | 61 -
.../enc/compress_fragment_two_pass.h | 54 -
.../C/BrotliCompress/enc/dictionary_hash.h | 24 -
.../C/BrotliCompress/enc/encoder_dict.h | 41 -
.../C/BrotliCompress/enc/entropy_encode.h | 122 -
.../enc/entropy_encode_static.h | 539 --
.../Source/C/BrotliCompress/enc/fast_log.h | 147 -
.../C/BrotliCompress/enc/find_match_length.h | 80 -
BaseTools/Source/C/BrotliCompress/enc/hash.h | 497 --
.../C/BrotliCompress/enc/hash_composite_inc.h | 133 -
.../enc/hash_forgetful_chain_inc.h | 254 -
.../enc/hash_longest_match64_inc.h | 266 -
.../enc/hash_longest_match_inc.h | 258 -
.../enc/hash_longest_match_quickly_inc.h | 235 -
.../C/BrotliCompress/enc/hash_rolling_inc.h | 215 -
.../enc/hash_to_binary_tree_inc.h | 327 -
.../Source/C/BrotliCompress/enc/histogram.h | 63 -
.../C/BrotliCompress/enc/histogram_inc.h | 51 -
.../C/BrotliCompress/enc/literal_cost.h | 30 -
.../Source/C/BrotliCompress/enc/memory.h | 102 -
.../Source/C/BrotliCompress/enc/metablock.h | 105 -
.../C/BrotliCompress/enc/metablock_inc.h | 183 -
.../Source/C/BrotliCompress/enc/params.h | 44 -
.../Source/C/BrotliCompress/enc/prefix.h | 53 -
.../Source/C/BrotliCompress/enc/quality.h | 165 -
.../Source/C/BrotliCompress/enc/ringbuffer.h | 164 -
.../Source/C/BrotliCompress/enc/static_dict.h | 40 -
.../C/BrotliCompress/enc/static_dict_lut.h | 5864 ----------------
.../Source/C/BrotliCompress/enc/utf8_util.h | 32 -
.../Source/C/BrotliCompress/enc/write_bits.h | 85 -
.../C/BrotliCompress/include/brotli/decode.h | 344 -
.../C/BrotliCompress/include/brotli/encode.h | 427 --
.../C/BrotliCompress/include/brotli/port.h | 274 -
.../C/BrotliCompress/include/brotli/types.h | 83 -
.../Source/C/BrotliCompress/tools/brotli.md | 107 -
Readme.md | 3 +-
91 files changed, 59 insertions(+), 35214 deletions(-)
delete mode 100644 BaseTools/Source/C/BrotliCompress/common/dictionary.c
delete mode 100644 BaseTools/Source/C/BrotliCompress/common/transform.c
delete mode 100644 BaseTools/Source/C/BrotliCompress/dec/bit_reader.c
delete mode 100644 BaseTools/Source/C/BrotliCompress/dec/decode.c
delete mode 100644 BaseTools/Source/C/BrotliCompress/dec/huffman.c
delete mode 100644 BaseTools/Source/C/BrotliCompress/dec/state.c
delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/backward_references.c
delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/backward_references_hq.c
delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/bit_cost.c
delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/block_splitter.c
delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/brotli_bit_stream.c
delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/cluster.c
delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/compress_fragment.c
delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/compress_fragment_two_pass.c
delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/dictionary_hash.c
delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/encode.c
delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/encoder_dict.c
delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/entropy_encode.c
delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/histogram.c
delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/literal_cost.c
delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/memory.c
delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/metablock.c
delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/static_dict.c
delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/utf8_util.c
delete mode 100644 BaseTools/Source/C/BrotliCompress/tools/brotli.c
delete mode 100644 BaseTools/Source/C/BrotliCompress/LICENSE
delete mode 100644 BaseTools/Source/C/BrotliCompress/README.md
delete mode 100644 BaseTools/Source/C/BrotliCompress/ReadMe.txt
create mode 160000 BaseTools/Source/C/BrotliCompress/brotli
delete mode 100644 BaseTools/Source/C/BrotliCompress/common/constants.h
delete mode 100644 BaseTools/Source/C/BrotliCompress/common/context.h
delete mode 100644 BaseTools/Source/C/BrotliCompress/common/dictionary.h
delete mode 100644 BaseTools/Source/C/BrotliCompress/common/platform.h
delete mode 100644 BaseTools/Source/C/BrotliCompress/common/transform.h
delete mode 100644 BaseTools/Source/C/BrotliCompress/common/version.h
delete mode 100644 BaseTools/Source/C/BrotliCompress/dec/bit_reader.h
delete mode 100644 BaseTools/Source/C/BrotliCompress/dec/huffman.h
delete mode 100644 BaseTools/Source/C/BrotliCompress/dec/prefix.h
delete mode 100644 BaseTools/Source/C/BrotliCompress/dec/state.h
delete mode 100644 BaseTools/Source/C/BrotliCompress/docs/brotli-comparison-study-2015-09-22.pdf
delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/backward_references.h
delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/backward_references_hq.h
delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/backward_references_inc.h
delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/bit_cost.h
delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/bit_cost_inc.h
delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/block_encoder_inc.h
delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/block_splitter.h
delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/block_splitter_inc.h
delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/brotli_bit_stream.h
delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/cluster.h
delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/cluster_inc.h
delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/command.h
delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/compress_fragment.h
delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/compress_fragment_two_pass.h
delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/dictionary_hash.h
delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/encoder_dict.h
delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/entropy_encode.h
delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/entropy_encode_static.h
delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/fast_log.h
delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/find_match_length.h
delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/hash.h
delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/hash_composite_inc.h
delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/hash_forgetful_chain_inc.h
delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/hash_longest_match64_inc.h
delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/hash_longest_match_inc.h
delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/hash_longest_match_quickly_inc.h
delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/hash_rolling_inc.h
delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/hash_to_binary_tree_inc.h
delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/histogram.h
delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/histogram_inc.h
delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/literal_cost.h
delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/memory.h
delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/metablock.h
delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/metablock_inc.h
delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/params.h
delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/prefix.h
delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/quality.h
delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/ringbuffer.h
delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/static_dict.h
delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/static_dict_lut.h
delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/utf8_util.h
delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/write_bits.h
delete mode 100644 BaseTools/Source/C/BrotliCompress/include/brotli/decode.h
delete mode 100644 BaseTools/Source/C/BrotliCompress/include/brotli/encode.h
delete mode 100644 BaseTools/Source/C/BrotliCompress/include/brotli/port.h
delete mode 100644 BaseTools/Source/C/BrotliCompress/include/brotli/types.h
delete mode 100644 BaseTools/Source/C/BrotliCompress/tools/brotli.md
diff --git a/BaseTools/Source/C/BrotliCompress/common/dictionary.c b/BaseTools/Source/C/BrotliCompress/common/dictionary.c
deleted file mode 100644
index 7fd076194825..000000000000
--- a/BaseTools/Source/C/BrotliCompress/common/dictionary.c
+++ /dev/null
@@ -1,5905 +0,0 @@
-/* Copyright 2013 Google Inc. All Rights Reserved.
-
- Distributed under MIT license.
- See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
-*/
-
-#include "./dictionary.h"
-
-#if defined(__cplusplus) || defined(c_plusplus)
-extern "C" {
-#endif
-
-#ifndef BROTLI_EXTERNAL_DICTIONARY_DATA
-static const uint8_t kBrotliDictionaryData[] =
-{
-116,105,109,101,100,111,119,110,108,105,102,101,108,101,102,116,98,97,99,107,99,
-111,100,101,100,97,116,97,115,104,111,119,111,110,108,121,115,105,116,101,99,105
-,116,121,111,112,101,110,106,117,115,116,108,105,107,101,102,114,101,101,119,111
-,114,107,116,101,120,116,121,101,97,114,111,118,101,114,98,111,100,121,108,111,
-118,101,102,111,114,109,98,111,111,107,112,108,97,121,108,105,118,101,108,105,
-110,101,104,101,108,112,104,111,109,101,115,105,100,101,109,111,114,101,119,111,
-114,100,108,111,110,103,116,104,101,109,118,105,101,119,102,105,110,100,112,97,
-103,101,100,97,121,115,102,117,108,108,104,101,97,100,116,101,114,109,101,97,99,
-104,97,114,101,97,102,114,111,109,116,114,117,101,109,97,114,107,97,98,108,101,
-117,112,111,110,104,105,103,104,100,97,116,101,108,97,110,100,110,101,119,115,
-101,118,101,110,110,101,120,116,99,97,115,101,98,111,116,104,112,111,115,116,117
-,115,101,100,109,97,100,101,104,97,110,100,104,101,114,101,119,104,97,116,110,97
-,109,101,76,105,110,107,98,108,111,103,115,105,122,101,98,97,115,101,104,101,108
-,100,109,97,107,101,109,97,105,110,117,115,101,114,39,41,32,43,104,111,108,100,
-101,110,100,115,119,105,116,104,78,101,119,115,114,101,97,100,119,101,114,101,
-115,105,103,110,116,97,107,101,104,97,118,101,103,97,109,101,115,101,101,110,99,
-97,108,108,112,97,116,104,119,101,108,108,112,108,117,115,109,101,110,117,102,
-105,108,109,112,97,114,116,106,111,105,110,116,104,105,115,108,105,115,116,103,
-111,111,100,110,101,101,100,119,97,121,115,119,101,115,116,106,111,98,115,109,
-105,110,100,97,108,115,111,108,111,103,111,114,105,99,104,117,115,101,115,108,97
-,115,116,116,101,97,109,97,114,109,121,102,111,111,100,107,105,110,103,119,105,
-108,108,101,97,115,116,119,97,114,100,98,101,115,116,102,105,114,101,80,97,103,
-101,107,110,111,119,97,119,97,121,46,112,110,103,109,111,118,101,116,104,97,110,
-108,111,97,100,103,105,118,101,115,101,108,102,110,111,116,101,109,117,99,104,
-102,101,101,100,109,97,110,121,114,111,99,107,105,99,111,110,111,110,99,101,108,
-111,111,107,104,105,100,101,100,105,101,100,72,111,109,101,114,117,108,101,104,
-111,115,116,97,106,97,120,105,110,102,111,99,108,117,98,108,97,119,115,108,101,
-115,115,104,97,108,102,115,111,109,101,115,117,99,104,122,111,110,101,49,48,48,
-37,111,110,101,115,99,97,114,101,84,105,109,101,114,97,99,101,98,108,117,101,102
-,111,117,114,119,101,101,107,102,97,99,101,104,111,112,101,103,97,118,101,104,97
-,114,100,108,111,115,116,119,104,101,110,112,97,114,107,107,101,112,116,112,97,
-115,115,115,104,105,112,114,111,111,109,72,84,77,76,112,108,97,110,84,121,112,
-101,100,111,110,101,115,97,118,101,107,101,101,112,102,108,97,103,108,105,110,
-107,115,111,108,100,102,105,118,101,116,111,111,107,114,97,116,101,116,111,119,
-110,106,117,109,112,116,104,117,115,100,97,114,107,99,97,114,100,102,105,108,101
-,102,101,97,114,115,116,97,121,107,105,108,108,116,104,97,116,102,97,108,108,97,
-117,116,111,101,118,101,114,46,99,111,109,116,97,108,107,115,104,111,112,118,111
-,116,101,100,101,101,112,109,111,100,101,114,101,115,116,116,117,114,110,98,111,
-114,110,98,97,110,100,102,101,108,108,114,111,115,101,117,114,108,40,115,107,105
-,110,114,111,108,101,99,111,109,101,97,99,116,115,97,103,101,115,109,101,101,116
-,103,111,108,100,46,106,112,103,105,116,101,109,118,97,114,121,102,101,108,116,
-116,104,101,110,115,101,110,100,100,114,111,112,86,105,101,119,99,111,112,121,49
-,46,48,34,60,47,97,62,115,116,111,112,101,108,115,101,108,105,101,115,116,111,
-117,114,112,97,99,107,46,103,105,102,112,97,115,116,99,115,115,63,103,114,97,121
-,109,101,97,110,38,103,116,59,114,105,100,101,115,104,111,116,108,97,116,101,115
-,97,105,100,114,111,97,100,118,97,114,32,102,101,101,108,106,111,104,110,114,105
-,99,107,112,111,114,116,102,97,115,116,39,85,65,45,100,101,97,100,60,47,98,62,
-112,111,111,114,98,105,108,108,116,121,112,101,85,46,83,46,119,111,111,100,109,
-117,115,116,50,112,120,59,73,110,102,111,114,97,110,107,119,105,100,101,119,97,
-110,116,119,97,108,108,108,101,97,100,91,48,93,59,112,97,117,108,119,97,118,101,
-115,117,114,101,36,40,39,35,119,97,105,116,109,97,115,115,97,114,109,115,103,111
-,101,115,103,97,105,110,108,97,110,103,112,97,105,100,33,45,45,32,108,111,99,107
-,117,110,105,116,114,111,111,116,119,97,108,107,102,105,114,109,119,105,102,101,
-120,109,108,34,115,111,110,103,116,101,115,116,50,48,112,120,107,105,110,100,114
-,111,119,115,116,111,111,108,102,111,110,116,109,97,105,108,115,97,102,101,115,
-116,97,114,109,97,112,115,99,111,114,101,114,97,105,110,102,108,111,119,98,97,98
-,121,115,112,97,110,115,97,121,115,52,112,120,59,54,112,120,59,97,114,116,115,
-102,111,111,116,114,101,97,108,119,105,107,105,104,101,97,116,115,116,101,112,
-116,114,105,112,111,114,103,47,108,97,107,101,119,101,97,107,116,111,108,100,70,
-111,114,109,99,97,115,116,102,97,110,115,98,97,110,107,118,101,114,121,114,117,
-110,115,106,117,108,121,116,97,115,107,49,112,120,59,103,111,97,108,103,114,101,
-119,115,108,111,119,101,100,103,101,105,100,61,34,115,101,116,115,53,112,120,59,
-46,106,115,63,52,48,112,120,105,102,32,40,115,111,111,110,115,101,97,116,110,111
-,110,101,116,117,98,101,122,101,114,111,115,101,110,116,114,101,101,100,102,97,
-99,116,105,110,116,111,103,105,102,116,104,97,114,109,49,56,112,120,99,97,109,
-101,104,105,108,108,98,111,108,100,122,111,111,109,118,111,105,100,101,97,115,
-121,114,105,110,103,102,105,108,108,112,101,97,107,105,110,105,116,99,111,115,
-116,51,112,120,59,106,97,99,107,116,97,103,115,98,105,116,115,114,111,108,108,
-101,100,105,116,107,110,101,119,110,101,97,114,60,33,45,45,103,114,111,119,74,83
-,79,78,100,117,116,121,78,97,109,101,115,97,108,101,121,111,117,32,108,111,116,
-115,112,97,105,110,106,97,122,122,99,111,108,100,101,121,101,115,102,105,115,104
-,119,119,119,46,114,105,115,107,116,97,98,115,112,114,101,118,49,48,112,120,114,
-105,115,101,50,53,112,120,66,108,117,101,100,105,110,103,51,48,48,44,98,97,108,
-108,102,111,114,100,101,97,114,110,119,105,108,100,98,111,120,46,102,97,105,114,
-108,97,99,107,118,101,114,115,112,97,105,114,106,117,110,101,116,101,99,104,105,
-102,40,33,112,105,99,107,101,118,105,108,36,40,34,35,119,97,114,109,108,111,114,
-100,100,111,101,115,112,117,108,108,44,48,48,48,105,100,101,97,100,114,97,119,
-104,117,103,101,115,112,111,116,102,117,110,100,98,117,114,110,104,114,101,102,
-99,101,108,108,107,101,121,115,116,105,99,107,104,111,117,114,108,111,115,115,
-102,117,101,108,49,50,112,120,115,117,105,116,100,101,97,108,82,83,83,34,97,103,
-101,100,103,114,101,121,71,69,84,34,101,97,115,101,97,105,109,115,103,105,114,
-108,97,105,100,115,56,112,120,59,110,97,118,121,103,114,105,100,116,105,112,115,
-35,57,57,57,119,97,114,115,108,97,100,121,99,97,114,115,41,59,32,125,112,104,112
-,63,104,101,108,108,116,97,108,108,119,104,111,109,122,104,58,229,42,47,13,10,32
-,49,48,48,104,97,108,108,46,10,10,65,55,112,120,59,112,117,115,104,99,104,97,116
-,48,112,120,59,99,114,101,119,42,47,60,47,104,97,115,104,55,53,112,120,102,108,
-97,116,114,97,114,101,32,38,38,32,116,101,108,108,99,97,109,112,111,110,116,111,
-108,97,105,100,109,105,115,115,115,107,105,112,116,101,110,116,102,105,110,101,
-109,97,108,101,103,101,116,115,112,108,111,116,52,48,48,44,13,10,13,10,99,111,
-111,108,102,101,101,116,46,112,104,112,60,98,114,62,101,114,105,99,109,111,115,
-116,103,117,105,100,98,101,108,108,100,101,115,99,104,97,105,114,109,97,116,104,
-97,116,111,109,47,105,109,103,38,35,56,50,108,117,99,107,99,101,110,116,48,48,48
-,59,116,105,110,121,103,111,110,101,104,116,109,108,115,101,108,108,100,114,117,
-103,70,82,69,69,110,111,100,101,110,105,99,107,63,105,100,61,108,111,115,101,110
-,117,108,108,118,97,115,116,119,105,110,100,82,83,83,32,119,101,97,114,114,101,
-108,121,98,101,101,110,115,97,109,101,100,117,107,101,110,97,115,97,99,97,112,
-101,119,105,115,104,103,117,108,102,84,50,51,58,104,105,116,115,115,108,111,116,
-103,97,116,101,107,105,99,107,98,108,117,114,116,104,101,121,49,53,112,120,39,39
-,41,59,41,59,34,62,109,115,105,101,119,105,110,115,98,105,114,100,115,111,114,
-116,98,101,116,97,115,101,101,107,84,49,56,58,111,114,100,115,116,114,101,101,
-109,97,108,108,54,48,112,120,102,97,114,109,226,128,153,115,98,111,121,115,91,48
-,93,46,39,41,59,34,80,79,83,84,98,101,97,114,107,105,100,115,41,59,125,125,109,
-97,114,121,116,101,110,100,40,85,75,41,113,117,97,100,122,104,58,230,45,115,105,
-122,45,45,45,45,112,114,111,112,39,41,59,13,108,105,102,116,84,49,57,58,118,105,
-99,101,97,110,100,121,100,101,98,116,62,82,83,83,112,111,111,108,110,101,99,107,
-98,108,111,119,84,49,54,58,100,111,111,114,101,118,97,108,84,49,55,58,108,101,
-116,115,102,97,105,108,111,114,97,108,112,111,108,108,110,111,118,97,99,111,108,
-115,103,101,110,101,32,226,128,148,115,111,102,116,114,111,109,101,116,105,108,
-108,114,111,115,115,60,104,51,62,112,111,117,114,102,97,100,101,112,105,110,107,
-60,116,114,62,109,105,110,105,41,124,33,40,109,105,110,101,122,104,58,232,98,97,
-114,115,104,101,97,114,48,48,41,59,109,105,108,107,32,45,45,62,105,114,111,110,
-102,114,101,100,100,105,115,107,119,101,110,116,115,111,105,108,112,117,116,115,
-47,106,115,47,104,111,108,121,84,50,50,58,73,83,66,78,84,50,48,58,97,100,97,109,
-115,101,101,115,60,104,50,62,106,115,111,110,39,44,32,39,99,111,110,116,84,50,49
-,58,32,82,83,83,108,111,111,112,97,115,105,97,109,111,111,110,60,47,112,62,115,
-111,117,108,76,73,78,69,102,111,114,116,99,97,114,116,84,49,52,58,60,104,49,62,
-56,48,112,120,33,45,45,60,57,112,120,59,84,48,52,58,109,105,107,101,58,52,54,90,
-110,105,99,101,105,110,99,104,89,111,114,107,114,105,99,101,122,104,58,228,39,41
-,41,59,112,117,114,101,109,97,103,101,112,97,114,97,116,111,110,101,98,111,110,
-100,58,51,55,90,95,111,102,95,39,93,41,59,48,48,48,44,122,104,58,231,116,97,110,
-107,121,97,114,100,98,111,119,108,98,117,115,104,58,53,54,90,74,97,118,97,51,48,
-112,120,10,124,125,10,37,67,51,37,58,51,52,90,106,101,102,102,69,88,80,73,99,97,
-115,104,118,105,115,97,103,111,108,102,115,110,111,119,122,104,58,233,113,117,
-101,114,46,99,115,115,115,105,99,107,109,101,97,116,109,105,110,46,98,105,110,
-100,100,101,108,108,104,105,114,101,112,105,99,115,114,101,110,116,58,51,54,90,
-72,84,84,80,45,50,48,49,102,111,116,111,119,111,108,102,69,78,68,32,120,98,111,
-120,58,53,52,90,66,79,68,89,100,105,99,107,59,10,125,10,101,120,105,116,58,51,53
-,90,118,97,114,115,98,101,97,116,39,125,41,59,100,105,101,116,57,57,57,59,97,110
-,110,101,125,125,60,47,91,105,93,46,76,97,110,103,107,109,194,178,119,105,114,
-101,116,111,121,115,97,100,100,115,115,101,97,108,97,108,101,120,59,10,9,125,101
-,99,104,111,110,105,110,101,46,111,114,103,48,48,53,41,116,111,110,121,106,101,
-119,115,115,97,110,100,108,101,103,115,114,111,111,102,48,48,48,41,32,50,48,48,
-119,105,110,101,103,101,97,114,100,111,103,115,98,111,111,116,103,97,114,121,99,
-117,116,115,116,121,108,101,116,101,109,112,116,105,111,110,46,120,109,108,99,
-111,99,107,103,97,110,103,36,40,39,46,53,48,112,120,80,104,46,68,109,105,115,99,
-97,108,97,110,108,111,97,110,100,101,115,107,109,105,108,101,114,121,97,110,117,
-110,105,120,100,105,115,99,41,59,125,10,100,117,115,116,99,108,105,112,41,46,10,
-10,55,48,112,120,45,50,48,48,68,86,68,115,55,93,62,60,116,97,112,101,100,101,109
-,111,105,43,43,41,119,97,103,101,101,117,114,111,112,104,105,108,111,112,116,115
-,104,111,108,101,70,65,81,115,97,115,105,110,45,50,54,84,108,97,98,115,112,101,
-116,115,85,82,76,32,98,117,108,107,99,111,111,107,59,125,13,10,72,69,65,68,91,48
-,93,41,97,98,98,114,106,117,97,110,40,49,57,56,108,101,115,104,116,119,105,110,
-60,47,105,62,115,111,110,121,103,117,121,115,102,117,99,107,112,105,112,101,124,
-45,10,33,48,48,50,41,110,100,111,119,91,49,93,59,91,93,59,10,76,111,103,32,115,
-97,108,116,13,10,9,9,98,97,110,103,116,114,105,109,98,97,116,104,41,123,13,10,48
-,48,112,120,10,125,41,59,107,111,58,236,102,101,101,115,97,100,62,13,115,58,47,
-47,32,91,93,59,116,111,108,108,112,108,117,103,40,41,123,10,123,13,10,32,46,106,
-115,39,50,48,48,112,100,117,97,108,98,111,97,116,46,74,80,71,41,59,10,125,113,
-117,111,116,41,59,10,10,39,41,59,10,13,10,125,13,50,48,49,52,50,48,49,53,50,48,
-49,54,50,48,49,55,50,48,49,56,50,48,49,57,50,48,50,48,50,48,50,49,50,48,50,50,50
-,48,50,51,50,48,50,52,50,48,50,53,50,48,50,54,50,48,50,55,50,48,50,56,50,48,50,
-57,50,48,51,48,50,48,51,49,50,48,51,50,50,48,51,51,50,48,51,52,50,48,51,53,50,48
-,51,54,50,48,51,55,50,48,49,51,50,48,49,50,50,48,49,49,50,48,49,48,50,48,48,57,
-50,48,48,56,50,48,48,55,50,48,48,54,50,48,48,53,50,48,48,52,50,48,48,51,50,48,48
-,50,50,48,48,49,50,48,48,48,49,57,57,57,49,57,57,56,49,57,57,55,49,57,57,54,49,
-57,57,53,49,57,57,52,49,57,57,51,49,57,57,50,49,57,57,49,49,57,57,48,49,57,56,57
-,49,57,56,56,49,57,56,55,49,57,56,54,49,57,56,53,49,57,56,52,49,57,56,51,49,57,
-56,50,49,57,56,49,49,57,56,48,49,57,55,57,49,57,55,56,49,57,55,55,49,57,55,54,49
-,57,55,53,49,57,55,52,49,57,55,51,49,57,55,50,49,57,55,49,49,57,55,48,49,57,54,
-57,49,57,54,56,49,57,54,55,49,57,54,54,49,57,54,53,49,57,54,52,49,57,54,51,49,57
-,54,50,49,57,54,49,49,57,54,48,49,57,53,57,49,57,53,56,49,57,53,55,49,57,53,54,
-49,57,53,53,49,57,53,52,49,57,53,51,49,57,53,50,49,57,53,49,49,57,53,48,49,48,48
-,48,49,48,50,52,49,51,57,52,48,48,48,48,57,57,57,57,99,111,109,111,109,195,161,
-115,101,115,116,101,101,115,116,97,112,101,114,111,116,111,100,111,104,97,99,101
-,99,97,100,97,97,195,177,111,98,105,101,110,100,195,173,97,97,115,195,173,118,
-105,100,97,99,97,115,111,111,116,114,111,102,111,114,111,115,111,108,111,111,116
-,114,97,99,117,97,108,100,105,106,111,115,105,100,111,103,114,97,110,116,105,112
-,111,116,101,109,97,100,101,98,101,97,108,103,111,113,117,195,169,101,115,116,
-111,110,97,100,97,116,114,101,115,112,111,99,111,99,97,115,97,98,97,106,111,116,
-111,100,97,115,105,110,111,97,103,117,97,112,117,101,115,117,110,111,115,97,110,
-116,101,100,105,99,101,108,117,105,115,101,108,108,97,109,97,121,111,122,111,110
-,97,97,109,111,114,112,105,115,111,111,98,114,97,99,108,105,99,101,108,108,111,
-100,105,111,115,104,111,114,97,99,97,115,105,208,183,208,176,208,189,208,176,208
-,190,208,188,209,128,208,176,209,128,209,131,209,130,208,176,208,189,208,181,208
-,191,208,190,208,190,209,130,208,184,208,183,208,189,208,190,208,180,208,190,209
-,130,208,190,208,182,208,181,208,190,208,189,208,184,209,133,208,157,208,176,208
-,181,208,181,208,177,209,139,208,188,209,139,208,146,209,139,209,129,208,190,208
-,178,209,139,208,178,208,190,208,157,208,190,208,190,208,177,208,159,208,190,208
-,187,208,184,208,189,208,184,208,160,208,164,208,157,208,181,208,156,209,139,209
-,130,209,139,208,158,208,189,208,184,208,188,208,180,208,176,208,151,208,176,208
-,148,208,176,208,157,209,131,208,158,208,177,209,130,208,181,208,152,208,183,208
-,181,208,185,208,189,209,131,208,188,208,188,208,162,209,139,209,131,208,182,217
-,129,217,138,216,163,217,134,217,133,216,167,217,133,216,185,217,131,217,132,216
-,163,217,136,216,177,216,175,217,138,216,167,217,129,217,137,217,135,217,136,217
-,132,217,133,217,132,217,131,216,167,217,136,217,132,217,135,216,168,216,179,216
-,167,217,132,216,165,217,134,217,135,217,138,216,163,217,138,217,130,216,175,217
-,135,217,132,216,171,217,133,216,168,217,135,217,132,217,136,217,132,217,138,216
-,168,217,132,216,167,217,138,216,168,217,131,216,180,217,138,216,167,217,133,216
-,163,217,133,217,134,216,170,216,168,217,138,217,132,217,134,216,173,216,168,217
-,135,217,133,217,133,216,180,217,136,216,180,102,105,114,115,116,118,105,100,101
-,111,108,105,103,104,116,119,111,114,108,100,109,101,100,105,97,119,104,105,116,
-101,99,108,111,115,101,98,108,97,99,107,114,105,103,104,116,115,109,97,108,108,
-98,111,111,107,115,112,108,97,99,101,109,117,115,105,99,102,105,101,108,100,111,
-114,100,101,114,112,111,105,110,116,118,97,108,117,101,108,101,118,101,108,116,
-97,98,108,101,98,111,97,114,100,104,111,117,115,101,103,114,111,117,112,119,111,
-114,107,115,121,101,97,114,115,115,116,97,116,101,116,111,100,97,121,119,97,116,
-101,114,115,116,97,114,116,115,116,121,108,101,100,101,97,116,104,112,111,119,
-101,114,112,104,111,110,101,110,105,103,104,116,101,114,114,111,114,105,110,112,
-117,116,97,98,111,117,116,116,101,114,109,115,116,105,116,108,101,116,111,111,
-108,115,101,118,101,110,116,108,111,99,97,108,116,105,109,101,115,108,97,114,103
-,101,119,111,114,100,115,103,97,109,101,115,115,104,111,114,116,115,112,97,99,
-101,102,111,99,117,115,99,108,101,97,114,109,111,100,101,108,98,108,111,99,107,
-103,117,105,100,101,114,97,100,105,111,115,104,97,114,101,119,111,109,101,110,97
-,103,97,105,110,109,111,110,101,121,105,109,97,103,101,110,97,109,101,115,121,
-111,117,110,103,108,105,110,101,115,108,97,116,101,114,99,111,108,111,114,103,
-114,101,101,110,102,114,111,110,116,38,97,109,112,59,119,97,116,99,104,102,111,
-114,99,101,112,114,105,99,101,114,117,108,101,115,98,101,103,105,110,97,102,116,
-101,114,118,105,115,105,116,105,115,115,117,101,97,114,101,97,115,98,101,108,111
-,119,105,110,100,101,120,116,111,116,97,108,104,111,117,114,115,108,97,98,101,
-108,112,114,105,110,116,112,114,101,115,115,98,117,105,108,116,108,105,110,107,
-115,115,112,101,101,100,115,116,117,100,121,116,114,97,100,101,102,111,117,110,
-100,115,101,110,115,101,117,110,100,101,114,115,104,111,119,110,102,111,114,109,
-115,114,97,110,103,101,97,100,100,101,100,115,116,105,108,108,109,111,118,101,
-100,116,97,107,101,110,97,98,111,118,101,102,108,97,115,104,102,105,120,101,100,
-111,102,116,101,110,111,116,104,101,114,118,105,101,119,115,99,104,101,99,107,
-108,101,103,97,108,114,105,118,101,114,105,116,101,109,115,113,117,105,99,107,
-115,104,97,112,101,104,117,109,97,110,101,120,105,115,116,103,111,105,110,103,
-109,111,118,105,101,116,104,105,114,100,98,97,115,105,99,112,101,97,99,101,115,
-116,97,103,101,119,105,100,116,104,108,111,103,105,110,105,100,101,97,115,119,
-114,111,116,101,112,97,103,101,115,117,115,101,114,115,100,114,105,118,101,115,
-116,111,114,101,98,114,101,97,107,115,111,117,116,104,118,111,105,99,101,115,105
-,116,101,115,109,111,110,116,104,119,104,101,114,101,98,117,105,108,100,119,104,
-105,99,104,101,97,114,116,104,102,111,114,117,109,116,104,114,101,101,115,112,
-111,114,116,112,97,114,116,121,67,108,105,99,107,108,111,119,101,114,108,105,118
-,101,115,99,108,97,115,115,108,97,121,101,114,101,110,116,114,121,115,116,111,
-114,121,117,115,97,103,101,115,111,117,110,100,99,111,117,114,116,121,111,117,
-114,32,98,105,114,116,104,112,111,112,117,112,116,121,112,101,115,97,112,112,108
-,121,73,109,97,103,101,98,101,105,110,103,117,112,112,101,114,110,111,116,101,
-115,101,118,101,114,121,115,104,111,119,115,109,101,97,110,115,101,120,116,114,
-97,109,97,116,99,104,116,114,97,99,107,107,110,111,119,110,101,97,114,108,121,98
-,101,103,97,110,115,117,112,101,114,112,97,112,101,114,110,111,114,116,104,108,
-101,97,114,110,103,105,118,101,110,110,97,109,101,100,101,110,100,101,100,84,101
-,114,109,115,112,97,114,116,115,71,114,111,117,112,98,114,97,110,100,117,115,105
-,110,103,119,111,109,97,110,102,97,108,115,101,114,101,97,100,121,97,117,100,105
-,111,116,97,107,101,115,119,104,105,108,101,46,99,111,109,47,108,105,118,101,100
-,99,97,115,101,115,100,97,105,108,121,99,104,105,108,100,103,114,101,97,116,106,
-117,100,103,101,116,104,111,115,101,117,110,105,116,115,110,101,118,101,114,98,
-114,111,97,100,99,111,97,115,116,99,111,118,101,114,97,112,112,108,101,102,105,
-108,101,115,99,121,99,108,101,115,99,101,110,101,112,108,97,110,115,99,108,105,
-99,107,119,114,105,116,101,113,117,101,101,110,112,105,101,99,101,101,109,97,105
-,108,102,114,97,109,101,111,108,100,101,114,112,104,111,116,111,108,105,109,105,
-116,99,97,99,104,101,99,105,118,105,108,115,99,97,108,101,101,110,116,101,114,
-116,104,101,109,101,116,104,101,114,101,116,111,117,99,104,98,111,117,110,100,
-114,111,121,97,108,97,115,107,101,100,119,104,111,108,101,115,105,110,99,101,115
-,116,111,99,107,32,110,97,109,101,102,97,105,116,104,104,101,97,114,116,101,109,
-112,116,121,111,102,102,101,114,115,99,111,112,101,111,119,110,101,100,109,105,
-103,104,116,97,108,98,117,109,116,104,105,110,107,98,108,111,111,100,97,114,114,
-97,121,109,97,106,111,114,116,114,117,115,116,99,97,110,111,110,117,110,105,111,
-110,99,111,117,110,116,118,97,108,105,100,115,116,111,110,101,83,116,121,108,101
-,76,111,103,105,110,104,97,112,112,121,111,99,99,117,114,108,101,102,116,58,102,
-114,101,115,104,113,117,105,116,101,102,105,108,109,115,103,114,97,100,101,110,
-101,101,100,115,117,114,98,97,110,102,105,103,104,116,98,97,115,105,115,104,111,
-118,101,114,97,117,116,111,59,114,111,117,116,101,46,104,116,109,108,109,105,120
-,101,100,102,105,110,97,108,89,111,117,114,32,115,108,105,100,101,116,111,112,
-105,99,98,114,111,119,110,97,108,111,110,101,100,114,97,119,110,115,112,108,105,
-116,114,101,97,99,104,82,105,103,104,116,100,97,116,101,115,109,97,114,99,104,
-113,117,111,116,101,103,111,111,100,115,76,105,110,107,115,100,111,117,98,116,97
-,115,121,110,99,116,104,117,109,98,97,108,108,111,119,99,104,105,101,102,121,111
-,117,116,104,110,111,118,101,108,49,48,112,120,59,115,101,114,118,101,117,110,
-116,105,108,104,97,110,100,115,67,104,101,99,107,83,112,97,99,101,113,117,101,
-114,121,106,97,109,101,115,101,113,117,97,108,116,119,105,99,101,48,44,48,48,48,
-83,116,97,114,116,112,97,110,101,108,115,111,110,103,115,114,111,117,110,100,101
-,105,103,104,116,115,104,105,102,116,119,111,114,116,104,112,111,115,116,115,108
-,101,97,100,115,119,101,101,107,115,97,118,111,105,100,116,104,101,115,101,109,
-105,108,101,115,112,108,97,110,101,115,109,97,114,116,97,108,112,104,97,112,108,
-97,110,116,109,97,114,107,115,114,97,116,101,115,112,108,97,121,115,99,108,97,
-105,109,115,97,108,101,115,116,101,120,116,115,115,116,97,114,115,119,114,111,
-110,103,60,47,104,51,62,116,104,105,110,103,46,111,114,103,47,109,117,108,116,
-105,104,101,97,114,100,80,111,119,101,114,115,116,97,110,100,116,111,107,101,110
-,115,111,108,105,100,40,116,104,105,115,98,114,105,110,103,115,104,105,112,115,
-115,116,97,102,102,116,114,105,101,100,99,97,108,108,115,102,117,108,108,121,102
-,97,99,116,115,97,103,101,110,116,84,104,105,115,32,47,47,45,45,62,97,100,109,
-105,110,101,103,121,112,116,69,118,101,110,116,49,53,112,120,59,69,109,97,105,
-108,116,114,117,101,34,99,114,111,115,115,115,112,101,110,116,98,108,111,103,115
-,98,111,120,34,62,110,111,116,101,100,108,101,97,118,101,99,104,105,110,97,115,
-105,122,101,115,103,117,101,115,116,60,47,104,52,62,114,111,98,111,116,104,101,
-97,118,121,116,114,117,101,44,115,101,118,101,110,103,114,97,110,100,99,114,105,
-109,101,115,105,103,110,115,97,119,97,114,101,100,97,110,99,101,112,104,97,115,
-101,62,60,33,45,45,101,110,95,85,83,38,35,51,57,59,50,48,48,112,120,95,110,97,
-109,101,108,97,116,105,110,101,110,106,111,121,97,106,97,120,46,97,116,105,111,
-110,115,109,105,116,104,85,46,83,46,32,104,111,108,100,115,112,101,116,101,114,
-105,110,100,105,97,110,97,118,34,62,99,104,97,105,110,115,99,111,114,101,99,111,
-109,101,115,100,111,105,110,103,112,114,105,111,114,83,104,97,114,101,49,57,57,
-48,115,114,111,109,97,110,108,105,115,116,115,106,97,112,97,110,102,97,108,108,
-115,116,114,105,97,108,111,119,110,101,114,97,103,114,101,101,60,47,104,50,62,97
-,98,117,115,101,97,108,101,114,116,111,112,101,114,97,34,45,47,47,87,99,97,114,
-100,115,104,105,108,108,115,116,101,97,109,115,80,104,111,116,111,116,114,117,
-116,104,99,108,101,97,110,46,112,104,112,63,115,97,105,110,116,109,101,116,97,
-108,108,111,117,105,115,109,101,97,110,116,112,114,111,111,102,98,114,105,101,
-102,114,111,119,34,62,103,101,110,114,101,116,114,117,99,107,108,111,111,107,115
-,86,97,108,117,101,70,114,97,109,101,46,110,101,116,47,45,45,62,10,60,116,114,
-121,32,123,10,118,97,114,32,109,97,107,101,115,99,111,115,116,115,112,108,97,105
-,110,97,100,117,108,116,113,117,101,115,116,116,114,97,105,110,108,97,98,111,114
-,104,101,108,112,115,99,97,117,115,101,109,97,103,105,99,109,111,116,111,114,116
-,104,101,105,114,50,53,48,112,120,108,101,97,115,116,115,116,101,112,115,67,111,
-117,110,116,99,111,117,108,100,103,108,97,115,115,115,105,100,101,115,102,117,
-110,100,115,104,111,116,101,108,97,119,97,114,100,109,111,117,116,104,109,111,
-118,101,115,112,97,114,105,115,103,105,118,101,115,100,117,116,99,104,116,101,
-120,97,115,102,114,117,105,116,110,117,108,108,44,124,124,91,93,59,116,111,112,
-34,62,10,60,33,45,45,80,79,83,84,34,111,99,101,97,110,60,98,114,47,62,102,108,
-111,111,114,115,112,101,97,107,100,101,112,116,104,32,115,105,122,101,98,97,110,
-107,115,99,97,116,99,104,99,104,97,114,116,50,48,112,120,59,97,108,105,103,110,
-100,101,97,108,115,119,111,117,108,100,53,48,112,120,59,117,114,108,61,34,112,97
-,114,107,115,109,111,117,115,101,77,111,115,116,32,46,46,46,60,47,97,109,111,110
-,103,98,114,97,105,110,98,111,100,121,32,110,111,110,101,59,98,97,115,101,100,99
-,97,114,114,121,100,114,97,102,116,114,101,102,101,114,112,97,103,101,95,104,111
-,109,101,46,109,101,116,101,114,100,101,108,97,121,100,114,101,97,109,112,114,
-111,118,101,106,111,105,110,116,60,47,116,114,62,100,114,117,103,115,60,33,45,45
-,32,97,112,114,105,108,105,100,101,97,108,97,108,108,101,110,101,120,97,99,116,
-102,111,114,116,104,99,111,100,101,115,108,111,103,105,99,86,105,101,119,32,115,
-101,101,109,115,98,108,97,110,107,112,111,114,116,115,32,40,50,48,48,115,97,118,
-101,100,95,108,105,110,107,103,111,97,108,115,103,114,97,110,116,103,114,101,101
-,107,104,111,109,101,115,114,105,110,103,115,114,97,116,101,100,51,48,112,120,59
-,119,104,111,115,101,112,97,114,115,101,40,41,59,34,32,66,108,111,99,107,108,105
-,110,117,120,106,111,110,101,115,112,105,120,101,108,39,41,59,34,62,41,59,105,
-102,40,45,108,101,102,116,100,97,118,105,100,104,111,114,115,101,70,111,99,117,
-115,114,97,105,115,101,98,111,120,101,115,84,114,97,99,107,101,109,101,110,116,
-60,47,101,109,62,98,97,114,34,62,46,115,114,99,61,116,111,119,101,114,97,108,116
-,61,34,99,97,98,108,101,104,101,110,114,121,50,52,112,120,59,115,101,116,117,112
-,105,116,97,108,121,115,104,97,114,112,109,105,110,111,114,116,97,115,116,101,
-119,97,110,116,115,116,104,105,115,46,114,101,115,101,116,119,104,101,101,108,
-103,105,114,108,115,47,99,115,115,47,49,48,48,37,59,99,108,117,98,115,115,116,
-117,102,102,98,105,98,108,101,118,111,116,101,115,32,49,48,48,48,107,111,114,101
-,97,125,41,59,13,10,98,97,110,100,115,113,117,101,117,101,61,32,123,125,59,56,48
-,112,120,59,99,107,105,110,103,123,13,10,9,9,97,104,101,97,100,99,108,111,99,107
-,105,114,105,115,104,108,105,107,101,32,114,97,116,105,111,115,116,97,116,115,70
-,111,114,109,34,121,97,104,111,111,41,91,48,93,59,65,98,111,117,116,102,105,110,
-100,115,60,47,104,49,62,100,101,98,117,103,116,97,115,107,115,85,82,76,32,61,99,
-101,108,108,115,125,41,40,41,59,49,50,112,120,59,112,114,105,109,101,116,101,108
-,108,115,116,117,114,110,115,48,120,54,48,48,46,106,112,103,34,115,112,97,105,
-110,98,101,97,99,104,116,97,120,101,115,109,105,99,114,111,97,110,103,101,108,45
-,45,62,60,47,103,105,102,116,115,115,116,101,118,101,45,108,105,110,107,98,111,
-100,121,46,125,41,59,10,9,109,111,117,110,116,32,40,49,57,57,70,65,81,60,47,114,
-111,103,101,114,102,114,97,110,107,67,108,97,115,115,50,56,112,120,59,102,101,
-101,100,115,60,104,49,62,60,115,99,111,116,116,116,101,115,116,115,50,50,112,120
-,59,100,114,105,110,107,41,32,124,124,32,108,101,119,105,115,115,104,97,108,108,
-35,48,51,57,59,32,102,111,114,32,108,111,118,101,100,119,97,115,116,101,48,48,
-112,120,59,106,97,58,227,130,115,105,109,111,110,60,102,111,110,116,114,101,112,
-108,121,109,101,101,116,115,117,110,116,101,114,99,104,101,97,112,116,105,103,
-104,116,66,114,97,110,100,41,32,33,61,32,100,114,101,115,115,99,108,105,112,115,
-114,111,111,109,115,111,110,107,101,121,109,111,98,105,108,109,97,105,110,46,78,
-97,109,101,32,112,108,97,116,101,102,117,110,110,121,116,114,101,101,115,99,111,
-109,47,34,49,46,106,112,103,119,109,111,100,101,112,97,114,97,109,83,84,65,82,84
-,108,101,102,116,32,105,100,100,101,110,44,32,50,48,49,41,59,10,125,10,102,111,
-114,109,46,118,105,114,117,115,99,104,97,105,114,116,114,97,110,115,119,111,114,
-115,116,80,97,103,101,115,105,116,105,111,110,112,97,116,99,104,60,33,45,45,10,
-111,45,99,97,99,102,105,114,109,115,116,111,117,114,115,44,48,48,48,32,97,115,
-105,97,110,105,43,43,41,123,97,100,111,98,101,39,41,91,48,93,105,100,61,49,48,98
-,111,116,104,59,109,101,110,117,32,46,50,46,109,105,46,112,110,103,34,107,101,
-118,105,110,99,111,97,99,104,67,104,105,108,100,98,114,117,99,101,50,46,106,112,
-103,85,82,76,41,43,46,106,112,103,124,115,117,105,116,101,115,108,105,99,101,104
-,97,114,114,121,49,50,48,34,32,115,119,101,101,116,116,114,62,13,10,110,97,109,
-101,61,100,105,101,103,111,112,97,103,101,32,115,119,105,115,115,45,45,62,10,10,
-35,102,102,102,59,34,62,76,111,103,46,99,111,109,34,116,114,101,97,116,115,104,
-101,101,116,41,32,38,38,32,49,52,112,120,59,115,108,101,101,112,110,116,101,110,
-116,102,105,108,101,100,106,97,58,227,131,105,100,61,34,99,78,97,109,101,34,119,
-111,114,115,101,115,104,111,116,115,45,98,111,120,45,100,101,108,116,97,10,38,
-108,116,59,98,101,97,114,115,58,52,56,90,60,100,97,116,97,45,114,117,114,97,108,
-60,47,97,62,32,115,112,101,110,100,98,97,107,101,114,115,104,111,112,115,61,32,
-34,34,59,112,104,112,34,62,99,116,105,111,110,49,51,112,120,59,98,114,105,97,110
-,104,101,108,108,111,115,105,122,101,61,111,61,37,50,70,32,106,111,105,110,109,
-97,121,98,101,60,105,109,103,32,105,109,103,34,62,44,32,102,106,115,105,109,103,
-34,32,34,41,91,48,93,77,84,111,112,66,84,121,112,101,34,110,101,119,108,121,68,
-97,110,115,107,99,122,101,99,104,116,114,97,105,108,107,110,111,119,115,60,47,
-104,53,62,102,97,113,34,62,122,104,45,99,110,49,48,41,59,10,45,49,34,41,59,116,
-121,112,101,61,98,108,117,101,115,116,114,117,108,121,100,97,118,105,115,46,106,
-115,39,59,62,13,10,60,33,115,116,101,101,108,32,121,111,117,32,104,50,62,13,10,
-102,111,114,109,32,106,101,115,117,115,49,48,48,37,32,109,101,110,117,46,13,10,9
-,13,10,119,97,108,101,115,114,105,115,107,115,117,109,101,110,116,100,100,105,
-110,103,98,45,108,105,107,116,101,97,99,104,103,105,102,34,32,118,101,103,97,115
-,100,97,110,115,107,101,101,115,116,105,115,104,113,105,112,115,117,111,109,105,
-115,111,98,114,101,100,101,115,100,101,101,110,116,114,101,116,111,100,111,115,
-112,117,101,100,101,97,195,177,111,115,101,115,116,195,161,116,105,101,110,101,
-104,97,115,116,97,111,116,114,111,115,112,97,114,116,101,100,111,110,100,101,110
-,117,101,118,111,104,97,99,101,114,102,111,114,109,97,109,105,115,109,111,109,
-101,106,111,114,109,117,110,100,111,97,113,117,195,173,100,195,173,97,115,115,
-195,179,108,111,97,121,117,100,97,102,101,99,104,97,116,111,100,97,115,116,97,
-110,116,111,109,101,110,111,115,100,97,116,111,115,111,116,114,97,115,115,105,
-116,105,111,109,117,99,104,111,97,104,111,114,97,108,117,103,97,114,109,97,121,
-111,114,101,115,116,111,115,104,111,114,97,115,116,101,110,101,114,97,110,116,
-101,115,102,111,116,111,115,101,115,116,97,115,112,97,195,173,115,110,117,101,
-118,97,115,97,108,117,100,102,111,114,111,115,109,101,100,105,111,113,117,105,
-101,110,109,101,115,101,115,112,111,100,101,114,99,104,105,108,101,115,101,114,
-195,161,118,101,99,101,115,100,101,99,105,114,106,111,115,195,169,101,115,116,97
-,114,118,101,110,116,97,103,114,117,112,111,104,101,99,104,111,101,108,108,111,
-115,116,101,110,103,111,97,109,105,103,111,99,111,115,97,115,110,105,118,101,108
-,103,101,110,116,101,109,105,115,109,97,97,105,114,101,115,106,117,108,105,111,
-116,101,109,97,115,104,97,99,105,97,102,97,118,111,114,106,117,110,105,111,108,
-105,98,114,101,112,117,110,116,111,98,117,101,110,111,97,117,116,111,114,97,98,
-114,105,108,98,117,101,110,97,116,101,120,116,111,109,97,114,122,111,115,97,98,
-101,114,108,105,115,116,97,108,117,101,103,111,99,195,179,109,111,101,110,101,
-114,111,106,117,101,103,111,112,101,114,195,186,104,97,98,101,114,101,115,116,
-111,121,110,117,110,99,97,109,117,106,101,114,118,97,108,111,114,102,117,101,114
-,97,108,105,98,114,111,103,117,115,116,97,105,103,117,97,108,118,111,116,111,115
-,99,97,115,111,115,103,117,195,173,97,112,117,101,100,111,115,111,109,111,115,97
-,118,105,115,111,117,115,116,101,100,100,101,98,101,110,110,111,99,104,101,98,
-117,115,99,97,102,97,108,116,97,101,117,114,111,115,115,101,114,105,101,100,105,
-99,104,111,99,117,114,115,111,99,108,97,118,101,99,97,115,97,115,108,101,195,179
-,110,112,108,97,122,111,108,97,114,103,111,111,98,114,97,115,118,105,115,116,97,
-97,112,111,121,111,106,117,110,116,111,116,114,97,116,97,118,105,115,116,111,99,
-114,101,97,114,99,97,109,112,111,104,101,109,111,115,99,105,110,99,111,99,97,114
-,103,111,112,105,115,111,115,111,114,100,101,110,104,97,99,101,110,195,161,114,
-101,97,100,105,115,99,111,112,101,100,114,111,99,101,114,99,97,112,117,101,100,
-97,112,97,112,101,108,109,101,110,111,114,195,186,116,105,108,99,108,97,114,111,
-106,111,114,103,101,99,97,108,108,101,112,111,110,101,114,116,97,114,100,101,110
-,97,100,105,101,109,97,114,99,97,115,105,103,117,101,101,108,108,97,115,115,105,
-103,108,111,99,111,99,104,101,109,111,116,111,115,109,97,100,114,101,99,108,97,
-115,101,114,101,115,116,111,110,105,195,177,111,113,117,101,100,97,112,97,115,97
-,114,98,97,110,99,111,104,105,106,111,115,118,105,97,106,101,112,97,98,108,111,
-195,169,115,116,101,118,105,101,110,101,114,101,105,110,111,100,101,106,97,114,
-102,111,110,100,111,99,97,110,97,108,110,111,114,116,101,108,101,116,114,97,99,
-97,117,115,97,116,111,109,97,114,109,97,110,111,115,108,117,110,101,115,97,117,
-116,111,115,118,105,108,108,97,118,101,110,100,111,112,101,115,97,114,116,105,
-112,111,115,116,101,110,103,97,109,97,114,99,111,108,108,101,118,97,112,97,100,
-114,101,117,110,105,100,111,118,97,109,111,115,122,111,110,97,115,97,109,98,111,
-115,98,97,110,100,97,109,97,114,105,97,97,98,117,115,111,109,117,99,104,97,115,
-117,98,105,114,114,105,111,106,97,118,105,118,105,114,103,114,97,100,111,99,104,
-105,99,97,97,108,108,195,173,106,111,118,101,110,100,105,99,104,97,101,115,116,
-97,110,116,97,108,101,115,115,97,108,105,114,115,117,101,108,111,112,101,115,111
-,115,102,105,110,101,115,108,108,97,109,97,98,117,115,99,111,195,169,115,116,97,
-108,108,101,103,97,110,101,103,114,111,112,108,97,122,97,104,117,109,111,114,112
-,97,103,97,114,106,117,110,116,97,100,111,98,108,101,105,115,108,97,115,98,111,
-108,115,97,98,97,195,177,111,104,97,98,108,97,108,117,99,104,97,195,129,114,101,
-97,100,105,99,101,110,106,117,103,97,114,110,111,116,97,115,118,97,108,108,101,
-97,108,108,195,161,99,97,114,103,97,100,111,108,111,114,97,98,97,106,111,101,115
-,116,195,169,103,117,115,116,111,109,101,110,116,101,109,97,114,105,111,102,105,
-114,109,97,99,111,115,116,111,102,105,99,104,97,112,108,97,116,97,104,111,103,97
-,114,97,114,116,101,115,108,101,121,101,115,97,113,117,101,108,109,117,115,101,
-111,98,97,115,101,115,112,111,99,111,115,109,105,116,97,100,99,105,101,108,111,
-99,104,105,99,111,109,105,101,100,111,103,97,110,97,114,115,97,110,116,111,101,
-116,97,112,97,100,101,98,101,115,112,108,97,121,97,114,101,100,101,115,115,105,
-101,116,101,99,111,114,116,101,99,111,114,101,97,100,117,100,97,115,100,101,115,
-101,111,118,105,101,106,111,100,101,115,101,97,97,103,117,97,115,38,113,117,111,
-116,59,100,111,109,97,105,110,99,111,109,109,111,110,115,116,97,116,117,115,101,
-118,101,110,116,115,109,97,115,116,101,114,115,121,115,116,101,109,97,99,116,105
-,111,110,98,97,110,110,101,114,114,101,109,111,118,101,115,99,114,111,108,108,
-117,112,100,97,116,101,103,108,111,98,97,108,109,101,100,105,117,109,102,105,108
-,116,101,114,110,117,109,98,101,114,99,104,97,110,103,101,114,101,115,117,108,
-116,112,117,98,108,105,99,115,99,114,101,101,110,99,104,111,111,115,101,110,111,
-114,109,97,108,116,114,97,118,101,108,105,115,115,117,101,115,115,111,117,114,99
-,101,116,97,114,103,101,116,115,112,114,105,110,103,109,111,100,117,108,101,109,
-111,98,105,108,101,115,119,105,116,99,104,112,104,111,116,111,115,98,111,114,100
-,101,114,114,101,103,105,111,110,105,116,115,101,108,102,115,111,99,105,97,108,
-97,99,116,105,118,101,99,111,108,117,109,110,114,101,99,111,114,100,102,111,108,
-108,111,119,116,105,116,108,101,62,101,105,116,104,101,114,108,101,110,103,116,
-104,102,97,109,105,108,121,102,114,105,101,110,100,108,97,121,111,117,116,97,117
-,116,104,111,114,99,114,101,97,116,101,114,101,118,105,101,119,115,117,109,109,
-101,114,115,101,114,118,101,114,112,108,97,121,101,100,112,108,97,121,101,114,
-101,120,112,97,110,100,112,111,108,105,99,121,102,111,114,109,97,116,100,111,117
-,98,108,101,112,111,105,110,116,115,115,101,114,105,101,115,112,101,114,115,111,
-110,108,105,118,105,110,103,100,101,115,105,103,110,109,111,110,116,104,115,102,
-111,114,99,101,115,117,110,105,113,117,101,119,101,105,103,104,116,112,101,111,
-112,108,101,101,110,101,114,103,121,110,97,116,117,114,101,115,101,97,114,99,104
-,102,105,103,117,114,101,104,97,118,105,110,103,99,117,115,116,111,109,111,102,
-102,115,101,116,108,101,116,116,101,114,119,105,110,100,111,119,115,117,98,109,
-105,116,114,101,110,100,101,114,103,114,111,117,112,115,117,112,108,111,97,100,
-104,101,97,108,116,104,109,101,116,104,111,100,118,105,100,101,111,115,115,99,
-104,111,111,108,102,117,116,117,114,101,115,104,97,100,111,119,100,101,98,97,116
-,101,118,97,108,117,101,115,79,98,106,101,99,116,111,116,104,101,114,115,114,105
-,103,104,116,115,108,101,97,103,117,101,99,104,114,111,109,101,115,105,109,112,
-108,101,110,111,116,105,99,101,115,104,97,114,101,100,101,110,100,105,110,103,
-115,101,97,115,111,110,114,101,112,111,114,116,111,110,108,105,110,101,115,113,
-117,97,114,101,98,117,116,116,111,110,105,109,97,103,101,115,101,110,97,98,108,
-101,109,111,118,105,110,103,108,97,116,101,115,116,119,105,110,116,101,114,70,
-114,97,110,99,101,112,101,114,105,111,100,115,116,114,111,110,103,114,101,112,
-101,97,116,76,111,110,100,111,110,100,101,116,97,105,108,102,111,114,109,101,100
-,100,101,109,97,110,100,115,101,99,117,114,101,112,97,115,115,101,100,116,111,
-103,103,108,101,112,108,97,99,101,115,100,101,118,105,99,101,115,116,97,116,105,
-99,99,105,116,105,101,115,115,116,114,101,97,109,121,101,108,108,111,119,97,116,
-116,97,99,107,115,116,114,101,101,116,102,108,105,103,104,116,104,105,100,100,
-101,110,105,110,102,111,34,62,111,112,101,110,101,100,117,115,101,102,117,108,
-118,97,108,108,101,121,99,97,117,115,101,115,108,101,97,100,101,114,115,101,99,
-114,101,116,115,101,99,111,110,100,100,97,109,97,103,101,115,112,111,114,116,115
-,101,120,99,101,112,116,114,97,116,105,110,103,115,105,103,110,101,100,116,104,
-105,110,103,115,101,102,102,101,99,116,102,105,101,108,100,115,115,116,97,116,
-101,115,111,102,102,105,99,101,118,105,115,117,97,108,101,100,105,116,111,114,
-118,111,108,117,109,101,82,101,112,111,114,116,109,117,115,101,117,109,109,111,
-118,105,101,115,112,97,114,101,110,116,97,99,99,101,115,115,109,111,115,116,108,
-121,109,111,116,104,101,114,34,32,105,100,61,34,109,97,114,107,101,116,103,114,
-111,117,110,100,99,104,97,110,99,101,115,117,114,118,101,121,98,101,102,111,114,
-101,115,121,109,98,111,108,109,111,109,101,110,116,115,112,101,101,99,104,109,
-111,116,105,111,110,105,110,115,105,100,101,109,97,116,116,101,114,67,101,110,
-116,101,114,111,98,106,101,99,116,101,120,105,115,116,115,109,105,100,100,108,
-101,69,117,114,111,112,101,103,114,111,119,116,104,108,101,103,97,99,121,109,97,
-110,110,101,114,101,110,111,117,103,104,99,97,114,101,101,114,97,110,115,119,101
-,114,111,114,105,103,105,110,112,111,114,116,97,108,99,108,105,101,110,116,115,
-101,108,101,99,116,114,97,110,100,111,109,99,108,111,115,101,100,116,111,112,105
-,99,115,99,111,109,105,110,103,102,97,116,104,101,114,111,112,116,105,111,110,
-115,105,109,112,108,121,114,97,105,115,101,100,101,115,99,97,112,101,99,104,111,
-115,101,110,99,104,117,114,99,104,100,101,102,105,110,101,114,101,97,115,111,110
-,99,111,114,110,101,114,111,117,116,112,117,116,109,101,109,111,114,121,105,102,
-114,97,109,101,112,111,108,105,99,101,109,111,100,101,108,115,78,117,109,98,101,
-114,100,117,114,105,110,103,111,102,102,101,114,115,115,116,121,108,101,115,107,
-105,108,108,101,100,108,105,115,116,101,100,99,97,108,108,101,100,115,105,108,
-118,101,114,109,97,114,103,105,110,100,101,108,101,116,101,98,101,116,116,101,
-114,98,114,111,119,115,101,108,105,109,105,116,115,71,108,111,98,97,108,115,105,
-110,103,108,101,119,105,100,103,101,116,99,101,110,116,101,114,98,117,100,103,
-101,116,110,111,119,114,97,112,99,114,101,100,105,116,99,108,97,105,109,115,101,
-110,103,105,110,101,115,97,102,101,116,121,99,104,111,105,99,101,115,112,105,114
-,105,116,45,115,116,121,108,101,115,112,114,101,97,100,109,97,107,105,110,103,
-110,101,101,100,101,100,114,117,115,115,105,97,112,108,101,97,115,101,101,120,
-116,101,110,116,83,99,114,105,112,116,98,114,111,107,101,110,97,108,108,111,119,
-115,99,104,97,114,103,101,100,105,118,105,100,101,102,97,99,116,111,114,109,101,
-109,98,101,114,45,98,97,115,101,100,116,104,101,111,114,121,99,111,110,102,105,
-103,97,114,111,117,110,100,119,111,114,107,101,100,104,101,108,112,101,100,67,
-104,117,114,99,104,105,109,112,97,99,116,115,104,111,117,108,100,97,108,119,97,
-121,115,108,111,103,111,34,32,98,111,116,116,111,109,108,105,115,116,34,62,41,
-123,118,97,114,32,112,114,101,102,105,120,111,114,97,110,103,101,72,101,97,100,
-101,114,46,112,117,115,104,40,99,111,117,112,108,101,103,97,114,100,101,110,98,
-114,105,100,103,101,108,97,117,110,99,104,82,101,118,105,101,119,116,97,107,105,
-110,103,118,105,115,105,111,110,108,105,116,116,108,101,100,97,116,105,110,103,
-66,117,116,116,111,110,98,101,97,117,116,121,116,104,101,109,101,115,102,111,114
-,103,111,116,83,101,97,114,99,104,97,110,99,104,111,114,97,108,109,111,115,116,
-108,111,97,100,101,100,67,104,97,110,103,101,114,101,116,117,114,110,115,116,114
-,105,110,103,114,101,108,111,97,100,77,111,98,105,108,101,105,110,99,111,109,101
-,115,117,112,112,108,121,83,111,117,114,99,101,111,114,100,101,114,115,118,105,
-101,119,101,100,38,110,98,115,112,59,99,111,117,114,115,101,65,98,111,117,116,32
-,105,115,108,97,110,100,60,104,116,109,108,32,99,111,111,107,105,101,110,97,109,
-101,61,34,97,109,97,122,111,110,109,111,100,101,114,110,97,100,118,105,99,101,
-105,110,60,47,97,62,58,32,84,104,101,32,100,105,97,108,111,103,104,111,117,115,
-101,115,66,69,71,73,78,32,77,101,120,105,99,111,115,116,97,114,116,115,99,101,
-110,116,114,101,104,101,105,103,104,116,97,100,100,105,110,103,73,115,108,97,110
-,100,97,115,115,101,116,115,69,109,112,105,114,101,83,99,104,111,111,108,101,102
-,102,111,114,116,100,105,114,101,99,116,110,101,97,114,108,121,109,97,110,117,97
-,108,83,101,108,101,99,116,46,10,10,79,110,101,106,111,105,110,101,100,109,101,
-110,117,34,62,80,104,105,108,105,112,97,119,97,114,100,115,104,97,110,100,108,
-101,105,109,112,111,114,116,79,102,102,105,99,101,114,101,103,97,114,100,115,107
-,105,108,108,115,110,97,116,105,111,110,83,112,111,114,116,115,100,101,103,114,
-101,101,119,101,101,107,108,121,32,40,101,46,103,46,98,101,104,105,110,100,100,
-111,99,116,111,114,108,111,103,103,101,100,117,110,105,116,101,100,60,47,98,62,
-60,47,98,101,103,105,110,115,112,108,97,110,116,115,97,115,115,105,115,116,97,
-114,116,105,115,116,105,115,115,117,101,100,51,48,48,112,120,124,99,97,110,97,
-100,97,97,103,101,110,99,121,115,99,104,101,109,101,114,101,109,97,105,110,66,
-114,97,122,105,108,115,97,109,112,108,101,108,111,103,111,34,62,98,101,121,111,
-110,100,45,115,99,97,108,101,97,99,99,101,112,116,115,101,114,118,101,100,109,97
-,114,105,110,101,70,111,111,116,101,114,99,97,109,101,114,97,60,47,104,49,62,10,
-95,102,111,114,109,34,108,101,97,118,101,115,115,116,114,101,115,115,34,32,47,62
-,13,10,46,103,105,102,34,32,111,110,108,111,97,100,108,111,97,100,101,114,79,120
-,102,111,114,100,115,105,115,116,101,114,115,117,114,118,105,118,108,105,115,116
-,101,110,102,101,109,97,108,101,68,101,115,105,103,110,115,105,122,101,61,34,97,
-112,112,101,97,108,116,101,120,116,34,62,108,101,118,101,108,115,116,104,97,110,
-107,115,104,105,103,104,101,114,102,111,114,99,101,100,97,110,105,109,97,108,97,
-110,121,111,110,101,65,102,114,105,99,97,97,103,114,101,101,100,114,101,99,101,
-110,116,80,101,111,112,108,101,60,98,114,32,47,62,119,111,110,100,101,114,112,
-114,105,99,101,115,116,117,114,110,101,100,124,124,32,123,125,59,109,97,105,110,
-34,62,105,110,108,105,110,101,115,117,110,100,97,121,119,114,97,112,34,62,102,97
-,105,108,101,100,99,101,110,115,117,115,109,105,110,117,116,101,98,101,97,99,111
-,110,113,117,111,116,101,115,49,53,48,112,120,124,101,115,116,97,116,101,114,101
-,109,111,116,101,101,109,97,105,108,34,108,105,110,107,101,100,114,105,103,104,
-116,59,115,105,103,110,97,108,102,111,114,109,97,108,49,46,104,116,109,108,115,
-105,103,110,117,112,112,114,105,110,99,101,102,108,111,97,116,58,46,112,110,103,
-34,32,102,111,114,117,109,46,65,99,99,101,115,115,112,97,112,101,114,115,115,111
-,117,110,100,115,101,120,116,101,110,100,72,101,105,103,104,116,115,108,105,100,
-101,114,85,84,70,45,56,34,38,97,109,112,59,32,66,101,102,111,114,101,46,32,87,
-105,116,104,115,116,117,100,105,111,111,119,110,101,114,115,109,97,110,97,103,
-101,112,114,111,102,105,116,106,81,117,101,114,121,97,110,110,117,97,108,112,97,
-114,97,109,115,98,111,117,103,104,116,102,97,109,111,117,115,103,111,111,103,108
-,101,108,111,110,103,101,114,105,43,43,41,32,123,105,115,114,97,101,108,115,97,
-121,105,110,103,100,101,99,105,100,101,104,111,109,101,34,62,104,101,97,100,101,
-114,101,110,115,117,114,101,98,114,97,110,99,104,112,105,101,99,101,115,98,108,
-111,99,107,59,115,116,97,116,101,100,116,111,112,34,62,60,114,97,99,105,110,103,
-114,101,115,105,122,101,45,45,38,103,116,59,112,97,99,105,116,121,115,101,120,
-117,97,108,98,117,114,101,97,117,46,106,112,103,34,32,49,48,44,48,48,48,111,98,
-116,97,105,110,116,105,116,108,101,115,97,109,111,117,110,116,44,32,73,110,99,46
-,99,111,109,101,100,121,109,101,110,117,34,32,108,121,114,105,99,115,116,111,100
-,97,121,46,105,110,100,101,101,100,99,111,117,110,116,121,95,108,111,103,111,46,
-70,97,109,105,108,121,108,111,111,107,101,100,77,97,114,107,101,116,108,115,101,
-32,105,102,80,108,97,121,101,114,116,117,114,107,101,121,41,59,118,97,114,32,102
-,111,114,101,115,116,103,105,118,105,110,103,101,114,114,111,114,115,68,111,109,
-97,105,110,125,101,108,115,101,123,105,110,115,101,114,116,66,108,111,103,60,47,
-102,111,111,116,101,114,108,111,103,105,110,46,102,97,115,116,101,114,97,103,101
-,110,116,115,60,98,111,100,121,32,49,48,112,120,32,48,112,114,97,103,109,97,102,
-114,105,100,97,121,106,117,110,105,111,114,100,111,108,108,97,114,112,108,97,99,
-101,100,99,111,118,101,114,115,112,108,117,103,105,110,53,44,48,48,48,32,112,97,
-103,101,34,62,98,111,115,116,111,110,46,116,101,115,116,40,97,118,97,116,97,114,
-116,101,115,116,101,100,95,99,111,117,110,116,102,111,114,117,109,115,115,99,104
-,101,109,97,105,110,100,101,120,44,102,105,108,108,101,100,115,104,97,114,101,
-115,114,101,97,100,101,114,97,108,101,114,116,40,97,112,112,101,97,114,83,117,98
-,109,105,116,108,105,110,101,34,62,98,111,100,121,34,62,10,42,32,84,104,101,84,
-104,111,117,103,104,115,101,101,105,110,103,106,101,114,115,101,121,78,101,119,
-115,60,47,118,101,114,105,102,121,101,120,112,101,114,116,105,110,106,117,114,
-121,119,105,100,116,104,61,67,111,111,107,105,101,83,84,65,82,84,32,97,99,114,
-111,115,115,95,105,109,97,103,101,116,104,114,101,97,100,110,97,116,105,118,101,
-112,111,99,107,101,116,98,111,120,34,62,10,83,121,115,116,101,109,32,68,97,118,
-105,100,99,97,110,99,101,114,116,97,98,108,101,115,112,114,111,118,101,100,65,
-112,114,105,108,32,114,101,97,108,108,121,100,114,105,118,101,114,105,116,101,
-109,34,62,109,111,114,101,34,62,98,111,97,114,100,115,99,111,108,111,114,115,99,
-97,109,112,117,115,102,105,114,115,116,32,124,124,32,91,93,59,109,101,100,105,97
-,46,103,117,105,116,97,114,102,105,110,105,115,104,119,105,100,116,104,58,115,
-104,111,119,101,100,79,116,104,101,114,32,46,112,104,112,34,32,97,115,115,117,
-109,101,108,97,121,101,114,115,119,105,108,115,111,110,115,116,111,114,101,115,
-114,101,108,105,101,102,115,119,101,100,101,110,67,117,115,116,111,109,101,97,
-115,105,108,121,32,121,111,117,114,32,83,116,114,105,110,103,10,10,87,104,105,
-108,116,97,121,108,111,114,99,108,101,97,114,58,114,101,115,111,114,116,102,114,
-101,110,99,104,116,104,111,117,103,104,34,41,32,43,32,34,60,98,111,100,121,62,98
-,117,121,105,110,103,98,114,97,110,100,115,77,101,109,98,101,114,110,97,109,101,
-34,62,111,112,112,105,110,103,115,101,99,116,111,114,53,112,120,59,34,62,118,115
-,112,97,99,101,112,111,115,116,101,114,109,97,106,111,114,32,99,111,102,102,101,
-101,109,97,114,116,105,110,109,97,116,117,114,101,104,97,112,112,101,110,60,47,
-110,97,118,62,107,97,110,115,97,115,108,105,110,107,34,62,73,109,97,103,101,115,
-61,102,97,108,115,101,119,104,105,108,101,32,104,115,112,97,99,101,48,38,97,109,
-112,59,32,10,10,73,110,32,32,112,111,119,101,114,80,111,108,115,107,105,45,99,
-111,108,111,114,106,111,114,100,97,110,66,111,116,116,111,109,83,116,97,114,116,
-32,45,99,111,117,110,116,50,46,104,116,109,108,110,101,119,115,34,62,48,49,46,
-106,112,103,79,110,108,105,110,101,45,114,105,103,104,116,109,105,108,108,101,
-114,115,101,110,105,111,114,73,83,66,78,32,48,48,44,48,48,48,32,103,117,105,100,
-101,115,118,97,108,117,101,41,101,99,116,105,111,110,114,101,112,97,105,114,46,
-120,109,108,34,32,32,114,105,103,104,116,115,46,104,116,109,108,45,98,108,111,99
-,107,114,101,103,69,120,112,58,104,111,118,101,114,119,105,116,104,105,110,118,
-105,114,103,105,110,112,104,111,110,101,115,60,47,116,114,62,13,117,115,105,110,
-103,32,10,9,118,97,114,32,62,39,41,59,10,9,60,47,116,100,62,10,60,47,116,114,62,
-10,98,97,104,97,115,97,98,114,97,115,105,108,103,97,108,101,103,111,109,97,103,
-121,97,114,112,111,108,115,107,105,115,114,112,115,107,105,216,177,216,175,217,
-136,228,184,173,230,150,135,231,174,128,228,189,147,231,185,129,233,171,148,228,
-191,161,230,129,175,228,184,173,229,155,189,230,136,145,228,187,172,228,184,128,
-228,184,170,229,133,172,229,143,184,231,174,161,231,144,134,232,174,186,229,157,
-155,229,143,175,228,187,165,230,156,141,229,138,161,230,151,182,233,151,180,228,
-184,170,228,186,186,228,186,167,229,147,129,232,135,170,229,183,177,228,188,129,
-228,184,154,230,159,165,231,156,139,229,183,165,228,189,156,232,129,148,231,179,
-187,230,178,161,230,156,137,231,189,145,231,171,153,230,137,128,230,156,137,232,
-175,132,232,174,186,228,184,173,229,191,131,230,150,135,231,171,160,231,148,168,
-230,136,183,233,166,150,233,161,181,228,189,156,232,128,133,230,138,128,230,156,
-175,233,151,174,233,162,152,231,155,184,229,133,179,228,184,139,232,189,189,230,
-144,156,231,180,162,228,189,191,231,148,168,232,189,175,228,187,182,229,156,168,
-231,186,191,228,184,187,233,162,152,232,181,132,230,150,153,232,167,134,233,162,
-145,229,155,158,229,164,141,230,179,168,229,134,140,231,189,145,231,187,156,230,
-148,182,232,151,143,229,134,133,229,174,185,230,142,168,232,141,144,229,184,130,
-229,156,186,230,182,136,230,129,175,231,169,186,233,151,180,229,143,145,229,184,
-131,228,187,128,228,185,136,229,165,189,229,143,139,231,148,159,230,180,187,229,
-155,190,231,137,135,229,143,145,229,177,149,229,166,130,230,158,156,230,137,139,
-230,156,186,230,150,176,233,151,187,230,156,128,230,150,176,230,150,185,229,188,
-143,229,140,151,228,186,172,230,143,144,228,190,155,229,133,179,228,186,142,230,
-155,180,229,164,154,232,191,153,228,184,170,231,179,187,231,187,159,231,159,165,
-233,129,147,230,184,184,230,136,143,229,185,191,229,145,138,229,133,182,228,187,
-150,229,143,145,232,161,168,229,174,137,229,133,168,231,172,172,228,184,128,228,
-188,154,229,145,152,232,191,155,232,161,140,231,130,185,229,135,187,231,137,136,
-230,157,131,231,148,181,229,173,144,228,184,150,231,149,140,232,174,190,232,174,
-161,229,133,141,232,180,185,230,149,153,232,130,178,229,138,160,229,133,165,230,
-180,187,229,138,168,228,187,150,228,187,172,229,149,134,229,147,129,229,141,154,
-229,174,162,231,142,176,229,156,168,228,184,138,230,181,183,229,166,130,228,189,
-149,229,183,178,231,187,143,231,149,153,232,168,128,232,175,166,231,187,134,231,
-164,190,229,140,186,231,153,187,229,189,149,230,156,172,231,171,153,233,156,128,
-232,166,129,228,187,183,230,160,188,230,148,175,230,140,129,229,155,189,233,153,
-133,233,147,190,230,142,165,229,155,189,229,174,182,229,187,186,232,174,190,230,
-156,139,229,143,139,233,152,133,232,175,187,230,179,149,229,190,139,228,189,141,
-231,189,174,231,187,143,230,181,142,233,128,137,230,139,169,232,191,153,230,160,
-183,229,189,147,229,137,141,229,136,134,231,177,187,230,142,146,232,161,140,229,
-155,160,228,184,186,228,186,164,230,152,147,230,156,128,229,144,142,233,159,179,
-228,185,144,228,184,141,232,131,189,233,128,154,232,191,135,232,161,140,228,184,
-154,231,167,145,230,138,128,229,143,175,232,131,189,232,174,190,229,164,135,229,
-144,136,228,189,156,229,164,167,229,174,182,231,164,190,228,188,154,231,160,148,
-231,169,182,228,184,147,228,184,154,229,133,168,233,131,168,233,161,185,231,155,
-174,232,191,153,233,135,140,232,191,152,230,152,175,229,188,128,229,167,139,230,
-131,133,229,134,181,231,148,181,232,132,145,230,150,135,228,187,182,229,147,129,
-231,137,140,229,184,174,229,138,169,230,150,135,229,140,150,232,181,132,230,186,
-144,229,164,167,229,173,166,229,173,166,228,185,160,229,156,176,229,157,128,230,
-181,143,232,167,136,230,138,149,232,181,132,229,183,165,231,168,139,232,166,129,
-230,177,130,230,128,142,228,185,136,230,151,182,229,128,153,229,138,159,232,131,
-189,228,184,187,232,166,129,231,155,174,229,137,141,232,181,132,232,174,175,229,
-159,142,229,184,130,230,150,185,230,179,149,231,148,181,229,189,177,230,139,155,
-232,129,152,229,163,176,230,152,142,228,187,187,228,189,149,229,129,165,229,186,
-183,230,149,176,230,141,174,231,190,142,229,155,189,230,177,189,232,189,166,228,
-187,139,231,187,141,228,189,134,230,152,175,228,186,164,230,181,129,231,148,159,
-228,186,167,230,137,128,228,187,165,231,148,181,232,175,157,230,152,190,231,164,
-186,228,184,128,228,186,155,229,141,149,228,189,141,228,186,186,229,145,152,229,
-136,134,230,158,144,229,156,176,229,155,190,230,151,133,230,184,184,229,183,165,
-229,133,183,229,173,166,231,148,159,231,179,187,229,136,151,231,189,145,229,143,
-139,229,184,150,229,173,144,229,175,134,231,160,129,233,162,145,233,129,147,230,
-142,167,229,136,182,229,156,176,229,140,186,229,159,186,230,156,172,229,133,168,
-229,155,189,231,189,145,228,184,138,233,135,141,232,166,129,231,172,172,228,186,
-140,229,150,156,230,172,162,232,191,155,229,133,165,229,143,139,230,131,133,232,
-191,153,228,186,155,232,128,131,232,175,149,229,143,145,231,142,176,229,159,185,
-232,174,173,228,187,165,228,184,138,230,148,191,229,186,156,230,136,144,228,184,
-186,231,142,175,229,162,131,233,166,153,230,184,175,229,144,140,230,151,182,229,
-168,177,228,185,144,229,143,145,233,128,129,228,184,128,229,174,154,229,188,128,
-229,143,145,228,189,156,229,147,129,230,160,135,229,135,134,230,172,162,232,191,
-142,232,167,163,229,134,179,229,156,176,230,150,185,228,184,128,228,184,139,228,
-187,165,229,143,138,232,180,163,228,187,187,230,136,150,232,128,133,229,174,162,
-230,136,183,228,187,163,232,161,168,231,167,175,229,136,134,229,165,179,228,186,
-186,230,149,176,231,160,129,233,148,128,229,148,174,229,135,186,231,142,176,231,
-166,187,231,186,191,229,186,148,231,148,168,229,136,151,232,161,168,228,184,141,
-229,144,140,231,188,150,232,190,145,231,187,159,232,174,161,230,159,165,232,175,
-162,228,184,141,232,166,129,230,156,137,229,133,179,230,156,186,230,158,132,229,
-190,136,229,164,154,230,146,173,230,148,190,231,187,132,231,187,135,230,148,191,
-231,173,150,231,155,180,230,142,165,232,131,189,229,138,155,230,157,165,230,186,
-144,230,153,130,233,150,147,231,156,139,229,136,176,231,131,173,233,151,168,229,
-133,179,233,148,174,228,184,147,229,140,186,233,157,158,229,184,184,232,139,177,
-232,175,173,231,153,190,229,186,166,229,184,140,230,156,155,231,190,142,229,165,
-179,230,175,148,232,190,131,231,159,165,232,175,134,232,167,132,229,174,154,229,
-187,186,232,174,174,233,131,168,233,151,168,230,132,143,232,167,129,231,178,190,
-229,189,169,230,151,165,230,156,172,230,143,144,233,171,152,229,143,145,232,168,
-128,230,150,185,233,157,162,229,159,186,233,135,145,229,164,132,231,144,134,230,
-157,131,233,153,144,229,189,177,231,137,135,233,147,182,232,161,140,232,191,152,
-230,156,137,229,136,134,228,186,171,231,137,169,229,147,129,231,187,143,232,144,
-165,230,183,187,229,138,160,228,184,147,229,174,182,232,191,153,231,167,141,232,
-175,157,233,162,152,232,181,183,230,157,165,228,184,154,229,138,161,229,133,172,
-229,145,138,232,174,176,229,189,149,231,174,128,228,187,139,232,180,168,233,135,
-143,231,148,183,228,186,186,229,189,177,229,147,141,229,188,149,231,148,168,230,
-138,165,229,145,138,233,131,168,229,136,134,229,191,171,233,128,159,229,146,168,
-232,175,162,230,151,182,229,176,154,230,179,168,230,132,143,231,148,179,232,175,
-183,229,173,166,230,160,161,229,186,148,232,175,165,229,142,134,229,143,178,229,
-143,170,230,152,175,232,191,148,229,155,158,232,180,173,228,185,176,229,144,141,
-231,167,176,228,184,186,228,186,134,230,136,144,229,138,159,232,175,180,230,152,
-142,228,190,155,229,186,148,229,173,169,229,173,144,228,184,147,233,162,152,231,
-168,139,229,186,143,228,184,128,232,136,172,230,156,131,229,147,161,229,143,170,
-230,156,137,229,133,182,229,174,131,228,191,157,230,138,164,232,128,140,228,184,
-148,228,187,138,229,164,169,231,170,151,229,143,163,229,138,168,230,128,129,231,
-138,182,230,128,129,231,137,185,229,136,171,232,174,164,228,184,186,229,191,133,
-233,161,187,230,155,180,230,150,176,229,176,143,232,175,180,230,136,145,229,128,
-145,228,189,156,228,184,186,229,170,146,228,189,147,229,140,133,230,139,172,233,
-130,163,228,185,136,228,184,128,230,160,183,229,155,189,229,134,133,230,152,175,
-229,144,166,230,160,185,230,141,174,231,148,181,232,167,134,229,173,166,233,153,
-162,229,133,183,230,156,137,232,191,135,231,168,139,231,148,177,228,186,142,228,
-186,186,230,137,141,229,135,186,230,157,165,228,184,141,232,191,135,230,173,163,
-229,156,168,230,152,142,230,152,159,230,149,133,228,186,139,229,133,179,231,179,
-187,230,160,135,233,162,152,229,149,134,229,138,161,232,190,147,229,133,165,228,
-184,128,231,155,180,229,159,186,231,161,128,230,149,153,229,173,166,228,186,134,
-232,167,163,229,187,186,231,173,145,231,187,147,230,158,156,229,133,168,231,144,
-131,233,128,154,231,159,165,232,174,161,229,136,146,229,175,185,228,186,142,232,
-137,186,230,156,175,231,155,184,229,134,140,229,143,145,231,148,159,231,156,159,
-231,154,132,229,187,186,231,171,139,231,173,137,231,186,167,231,177,187,229,158,
-139,231,187,143,233,170,140,229,174,158,231,142,176,229,136,182,228,189,156,230,
-157,165,232,135,170,230,160,135,231,173,190,228,187,165,228,184,139,229,142,159,
-229,136,155,230,151,160,230,179,149,229,133,182,228,184,173,229,128,139,228,186,
-186,228,184,128,229,136,135,230,140,135,229,141,151,229,133,179,233,151,173,233,
-155,134,229,155,162,231,172,172,228,184,137,229,133,179,230,179,168,229,155,160,
-230,173,164,231,133,167,231,137,135,230,183,177,229,156,179,229,149,134,228,184,
-154,229,185,191,229,183,158,230,151,165,230,156,159,233,171,152,231,186,167,230,
-156,128,232,191,145,231,187,188,229,144,136,232,161,168,231,164,186,228,184,147,
-232,190,145,232,161,140,228,184,186,228,186,164,233,128,154,232,175,132,228,187,
-183,232,167,137,229,190,151,231,178,190,229,141,142,229,174,182,229,186,173,229,
-174,140,230,136,144,230,132,159,232,167,137,229,174,137,232,163,133,229,190,151,
-229,136,176,233,130,174,228,187,182,229,136,182,229,186,166,233,163,159,229,147,
-129,232,153,189,231,132,182,232,189,172,232,189,189,230,138,165,228,187,183,232,
-174,176,232,128,133,230,150,185,230,161,136,232,161,140,230,148,191,228,186,186,
-230,176,145,231,148,168,229,147,129,228,184,156,232,165,191,230,143,144,229,135,
-186,233,133,146,229,186,151,231,132,182,229,144,142,228,187,152,230,172,190,231,
-131,173,231,130,185,228,187,165,229,137,141,229,174,140,229,133,168,229,143,145,
-229,184,150,232,174,190,231,189,174,233,162,134,229,175,188,229,183,165,228,184,
-154,229,140,187,233,153,162,231,156,139,231,156,139,231,187,143,229,133,184,229,
-142,159,229,155,160,229,185,179,229,143,176,229,144,132,231,167,141,229,162,158,
-229,138,160,230,157,144,230,150,153,230,150,176,229,162,158,228,185,139,229,144,
-142,232,129,140,228,184,154,230,149,136,230,158,156,228,187,138,229,185,180,232,
-174,186,230,150,135,230,136,145,229,155,189,229,145,138,232,175,137,231,137,136,
-228,184,187,228,191,174,230,148,185,229,143,130,228,184,142,230,137,147,229,141,
-176,229,191,171,228,185,144,230,156,186,230,162,176,232,167,130,231,130,185,229,
-173,152,229,156,168,231,178,190,231,165,158,232,142,183,229,190,151,229,136,169,
-231,148,168,231,187,167,231,187,173,228,189,160,228,187,172,232,191,153,228,185,
-136,230,168,161,229,188,143,232,175,173,232,168,128,232,131,189,229,164,159,233,
-155,133,232,153,142,230,147,141,228,189,156,233,163,142,230,160,188,228,184,128,
-232,181,183,231,167,145,229,173,166,228,189,147,232,130,178,231,159,173,228,191,
-161,230,157,161,228,187,182,230,178,187,231,150,151,232,191,144,229,138,168,228,
-186,167,228,184,154,228,188,154,232,174,174,229,175,188,232,136,170,229,133,136,
-231,148,159,232,129,148,231,155,159,229,143,175,230,152,175,229,149,143,233,161,
-140,231,187,147,230,158,132,228,189,156,231,148,168,232,176,131,230,159,165,232,
-179,135,230,150,153,232,135,170,229,138,168,232,180,159,232,180,163,229,134,156,
-228,184,154,232,174,191,233,151,174,229,174,158,230,150,189,230,142,165,229,143,
-151,232,174,168,232,174,186,233,130,163,228,184,170,229,143,141,233,166,136,229,
-138,160,229,188,186,229,165,179,230,128,167,232,140,131,229,155,180,230,156,141,
-229,139,153,228,188,145,233,151,178,228,187,138,230,151,165,229,174,162,230,156,
-141,232,167,128,231,156,139,229,143,130,229,138,160,231,154,132,232,175,157,228,
-184,128,231,130,185,228,191,157,232,175,129,229,155,190,228,185,166,230,156,137,
-230,149,136,230,181,139,232,175,149,231,167,187,229,138,168,230,137,141,232,131,
-189,229,134,179,229,174,154,232,130,161,231,165,168,228,184,141,230,150,173,233,
-156,128,230,177,130,228,184,141,229,190,151,229,138,158,230,179,149,228,185,139,
-233,151,180,233,135,135,231,148,168,232,144,165,233,148,128,230,138,149,232,175,
-137,231,155,174,230,160,135,231,136,177,230,131,133,230,145,132,229,189,177,230,
-156,137,228,186,155,232,164,135,232,163,189,230,150,135,229,173,166,230,156,186,
-228,188,154,230,149,176,229,173,151,232,163,133,228,191,174,232,180,173,231,137,
-169,229,134,156,230,157,145,229,133,168,233,157,162,231,178,190,229,147,129,229,
-133,182,229,174,158,228,186,139,230,131,133,230,176,180,229,185,179,230,143,144,
-231,164,186,228,184,138,229,184,130,232,176,162,232,176,162,230,153,174,233,128,
-154,230,149,153,229,184,136,228,184,138,228,188,160,231,177,187,229,136,171,230,
-173,140,230,155,178,230,139,165,230,156,137,229,136,155,230,150,176,233,133,141,
-228,187,182,229,143,170,232,166,129,230,151,182,228,187,163,232,179,135,232,168,
-138,232,190,190,229,136,176,228,186,186,231,148,159,232,174,162,233,152,133,232,
-128,129,229,184,136,229,177,149,231,164,186,229,191,131,231,144,134,232,180,180,
-229,173,144,231,182,178,231,171,153,228,184,187,233,161,140,232,135,170,231,132,
-182,231,186,167,229,136,171,231,174,128,229,141,149,230,148,185,233,157,169,233,
-130,163,228,186,155,230,157,165,232,175,180,230,137,147,229,188,128,228,187,163,
-231,160,129,229,136,160,233,153,164,232,175,129,229,136,184,232,138,130,231,155,
-174,233,135,141,231,130,185,230,172,161,230,149,184,229,164,154,229,176,145,232,
-167,132,229,136,146,232,181,132,233,135,145,230,137,190,229,136,176,228,187,165,
-229,144,142,229,164,167,229,133,168,228,184,187,233,161,181,230,156,128,228,189,
-179,229,155,158,231,173,148,229,164,169,228,184,139,228,191,157,233,154,156,231,
-142,176,228,187,163,230,163,128,230,159,165,230,138,149,231,165,168,229,176,143,
-230,151,182,230,178,146,230,156,137,230,173,163,229,184,184,231,148,154,232,135,
-179,228,187,163,231,144,134,231,155,174,229,189,149,229,133,172,229,188,128,229,
-164,141,229,136,182,233,135,145,232,158,141,229,185,184,231,166,143,231,137,136,
-230,156,172,229,189,162,230,136,144,229,135,134,229,164,135,232,161,140,230,131,
-133,229,155,158,229,136,176,230,128,157,230,131,179,230,128,142,230,160,183,229,
-141,143,232,174,174,232,174,164,232,175,129,230,156,128,229,165,189,228,186,167,
-231,148,159,230,140,137,231,133,167,230,156,141,232,163,133,229,185,191,228,184,
-156,229,138,168,230,188,171,233,135,135,232,180,173,230,150,176,230,137,139,231,
-187,132,229,155,190,233,157,162,230,157,191,229,143,130,232,128,131,230,148,191,
-230,178,187,229,174,185,230,152,147,229,164,169,229,156,176,229,138,170,229,138,
-155,228,186,186,228,187,172,229,141,135,231,186,167,233,128,159,229,186,166,228,
-186,186,231,137,169,232,176,131,230,149,180,230,181,129,232,161,140,233,128,160,
-230,136,144,230,150,135,229,173,151,233,159,169,229,155,189,232,180,184,230,152,
-147,229,188,128,229,177,149,231,155,184,233,151,156,232,161,168,231,142,176,229,
-189,177,232,167,134,229,166,130,230,173,164,231,190,142,229,174,185,229,164,167,
-229,176,143,230,138,165,233,129,147,230,157,161,230,172,190,229,191,131,230,131,
-133,232,174,184,229,164,154,230,179,149,232,167,132,229,174,182,229,177,133,228,
-185,166,229,186,151,232,191,158,230,142,165,231,171,139,229,141,179,228,184,190,
-230,138,165,230,138,128,229,183,167,229,165,165,232,191,144,231,153,187,229,133,
-165,228,187,165,230,157,165,231,144,134,232,174,186,228,186,139,228,187,182,232,
-135,170,231,148,177,228,184,173,229,141,142,229,138,158,229,133,172,229,166,136,
-229,166,136,231,156,159,230,173,163,228,184,141,233,148,153,229,133,168,230,150,
-135,229,144,136,229,144,140,228,187,183,229,128,188,229,136,171,228,186,186,231,
-155,145,231,157,163,229,133,183,228,189,147,228,184,150,231,186,170,229,155,162,
-233,152,159,229,136,155,228,184,154,230,137,191,230,139,133,229,162,158,233,149,
-191,230,156,137,228,186,186,228,191,157,230,140,129,229,149,134,229,174,182,231,
-187,180,228,191,174,229,143,176,230,185,190,229,183,166,229,143,179,232,130,161,
-228,187,189,231,173,148,230,161,136,229,174,158,233,153,133,231,148,181,228,191,
-161,231,187,143,231,144,134,231,148,159,229,145,189,229,174,163,228,188,160,228,
-187,187,229,138,161,230,173,163,229,188,143,231,137,185,232,137,178,228,184,139,
-230,157,165,229,141,143,228,188,154,229,143,170,232,131,189,229,189,147,231,132,
-182,233,135,141,230,150,176,229,133,167,229,174,185,230,140,135,229,175,188,232,
-191,144,232,161,140,230,151,165,229,191,151,232,179,163,229,174,182,232,182,133,
-232,191,135,229,156,159,229,156,176,230,181,153,230,177,159,230,148,175,228,187,
-152,230,142,168,229,135,186,231,171,153,233,149,191,230,157,173,229,183,158,230,
-137,167,232,161,140,229,136,182,233,128,160,228,185,139,228,184,128,230,142,168,
-229,185,191,231,142,176,229,156,186,230,143,143,232,191,176,229,143,152,229,140,
-150,228,188,160,231,187,159,230,173,140,230,137,139,228,191,157,233,153,169,232,
-175,190,231,168,139,229,140,187,231,150,151,231,187,143,232,191,135,232,191,135,
-229,142,187,228,185,139,229,137,141,230,148,182,229,133,165,229,185,180,229,186,
-166,230,157,130,229,191,151,231,190,142,228,184,189,230,156,128,233,171,152,231,
-153,187,233,153,134,230,156,170,230,157,165,229,138,160,229,183,165,229,133,141,
-232,180,163,230,149,153,231,168,139,231,137,136,229,157,151,232,186,171,228,189,
-147,233,135,141,229,186,134,229,135,186,229,148,174,230,136,144,230,156,172,229,
-189,162,229,188,143,229,156,159,232,177,134,229,135,186,229,131,185,228,184,156,
-230,150,185,233,130,174,231,174,177,229,141,151,228,186,172,230,177,130,232,129,
-140,229,143,150,229,190,151,232,129,140,228,189,141,231,155,184,228,191,161,233,
-161,181,233,157,162,229,136,134,233,146,159,231,189,145,233,161,181,231,161,174,
-229,174,154,229,155,190,228,190,139,231,189,145,229,157,128,231,167,175,230,158,
-129,233,148,153,232,175,175,231,155,174,231,154,132,229,174,157,232,180,157,230,
-156,186,229,133,179,233,163,142,233,153,169,230,142,136,230,157,131,231,151,133,
-230,175,146,229,174,160,231,137,169,233,153,164,228,186,134,232,169,149,232,171,
-150,231,150,190,231,151,133,229,143,138,230,151,182,230,177,130,232,180,173,231,
-171,153,231,130,185,229,132,191,231,171,165,230,175,143,229,164,169,228,184,173,
-229,164,174,232,174,164,232,175,134,230,175,143,228,184,170,229,164,169,230,180,
-165,229,173,151,228,189,147,229,143,176,231,129,163,231,187,180,230,138,164,230,
-156,172,233,161,181,228,184,170,230,128,167,229,174,152,230,150,185,229,184,184,
-232,167,129,231,155,184,230,156,186,230,136,152,231,149,165,229,186,148,229,189,
-147,229,190,139,229,184,136,230,150,185,228,190,191,230,160,161,229,155,173,232,
-130,161,229,184,130,230,136,191,229,177,139,230,160,143,231,155,174,229,145,152,
-229,183,165,229,175,188,232,135,180,231,170,129,231,132,182,233,129,147,229,133,
-183,230,156,172,231,189,145,231,187,147,229,144,136,230,161,163,230,161,136,229,
-138,179,229,138,168,229,143,166,229,164,150,231,190,142,229,133,131,229,188,149,
-232,181,183,230,148,185,229,143,152,231,172,172,229,155,155,228,188,154,232,174,
-161,232,170,170,230,152,142,233,154,144,231,167,129,229,174,157,229,174,157,232,
-167,132,232,140,131,230,182,136,232,180,185,229,133,177,229,144,140,229,191,152,
-232,174,176,228,189,147,231,179,187,229,184,166,230,157,165,229,144,141,229,173,
-151,231,153,188,232,161,168,229,188,128,230,148,190,229,138,160,231,155,159,229,
-143,151,229,136,176,228,186,140,230,137,139,229,164,167,233,135,143,230,136,144,
-228,186,186,230,149,176,233,135,143,229,133,177,228,186,171,229,140,186,229,159,
-159,229,165,179,229,173,169,229,142,159,229,136,153,230,137,128,229,156,168,231,
-187,147,230,157,159,233,128,154,228,191,161,232,182,133,231,186,167,233,133,141,
-231,189,174,229,189,147,230,151,182,228,188,152,231,167,128,230,128,167,230,132,
-159,230,136,191,228,186,167,233,129,138,230,136,178,229,135,186,229,143,163,230,
-143,144,228,186,164,229,176,177,228,184,154,228,191,157,229,129,165,231,168,139,
-229,186,166,229,143,130,230,149,176,228,186,139,228,184,154,230,149,180,228,184,
-170,229,177,177,228,184,156,230,131,133,230,132,159,231,137,185,230,174,138,229,
-136,134,233,161,158,230,144,156,229,176,139,229,177,158,228,186,142,233,151,168,
-230,136,183,232,180,162,229,138,161,229,163,176,233,159,179,229,143,138,229,133,
-182,232,180,162,231,187,143,229,157,154,230,140,129,229,185,178,233,131,168,230,
-136,144,231,171,139,229,136,169,231,155,138,232,128,131,232,153,145,230,136,144,
-233,131,189,229,140,133,232,163,133,231,148,168,230,136,182,230,175,148,232,181,
-155,230,150,135,230,152,142,230,139,155,229,149,134,229,174,140,230,149,180,231,
-156,159,230,152,175,231,156,188,231,157,155,228,188,153,228,188,180,229,168,129,
-230,156,155,233,162,134,229,159,159,229,141,171,231,148,159,228,188,152,230,131,
-160,232,171,150,229,163,135,229,133,172,229,133,177,232,137,175,229,165,189,229,
-133,133,229,136,134,231,172,166,229,144,136,233,153,132,228,187,182,231,137,185,
-231,130,185,228,184,141,229,143,175,232,139,177,230,150,135,232,181,132,228,186,
-167,230,160,185,230,156,172,230,152,142,230,152,190,229,175,134,231,162,188,229,
-133,172,228,188,151,230,176,145,230,151,143,230,155,180,229,138,160,228,186,171,
-229,143,151,229,144,140,229,173,166,229,144,175,229,138,168,233,128,130,229,144,
-136,229,142,159,230,157,165,233,151,174,231,173,148,230,156,172,230,150,135,231,
-190,142,233,163,159,231,187,191,232,137,178,231,168,179,229,174,154,231,187,136,
-228,186,142,231,148,159,231,137,169,228,190,155,230,177,130,230,144,156,231,139,
-144,229,138,155,233,135,143,228,184,165,233,135,141,230,176,184,232,191,156,229,
-134,153,231,156,159,230,156,137,233,153,144,231,171,158,228,186,137,229,175,185,
-232,177,161,232,180,185,231,148,168,228,184,141,229,165,189,231,187,157,229,175,
-185,229,141,129,229,136,134,228,191,131,232,191,155,231,130,185,232,175,132,229,
-189,177,233,159,179,228,188,152,229,138,191,228,184,141,229,176,145,230,172,163,
-232,181,143,229,185,182,228,184,148,230,156,137,231,130,185,230,150,185,229,144,
-145,229,133,168,230,150,176,228,191,161,231,148,168,232,174,190,230,150,189,229,
-189,162,232,177,161,232,181,132,230,160,188,231,170,129,231,160,180,233,154,143,
-231,157,128,233,135,141,229,164,167,228,186,142,230,152,175,230,175,149,228,184,
-154,230,153,186,232,131,189,229,140,150,229,183,165,229,174,140,231,190,142,229,
-149,134,229,159,142,231,187,159,228,184,128,229,135,186,231,137,136,230,137,147,
-233,128,160,231,148,162,229,147,129,230,166,130,229,134,181,231,148,168,228,186,
-142,228,191,157,231,149,153,229,155,160,231,180,160,228,184,173,229,156,139,229,
-173,152,229,130,168,232,180,180,229,155,190,230,156,128,230,132,155,233,149,191,
-230,156,159,229,143,163,228,187,183,231,144,134,232,180,162,229,159,186,229,156,
-176,229,174,137,230,142,146,230,173,166,230,177,137,233,135,140,233,157,162,229,
-136,155,229,187,186,229,164,169,231,169,186,233,166,150,229,133,136,229,174,140,
-229,150,132,233,169,177,229,138,168,228,184,139,233,157,162,228,184,141,229,134,
-141,232,175,154,228,191,161,230,132,143,228,185,137,233,152,179,229,133,137,232,
-139,177,229,155,189,230,188,130,228,186,174,229,134,155,228,186,139,231,142,169,
-229,174,182,231,190,164,228,188,151,229,134,156,230,176,145,229,141,179,229,143,
-175,229,144,141,231,168,177,229,174,182,229,133,183,229,138,168,231,148,187,230,
-131,179,229,136,176,230,179,168,230,152,142,229,176,143,229,173,166,230,128,167,
-232,131,189,232,128,131,231,160,148,231,161,172,228,187,182,232,167,130,231,156,
-139,230,184,133,230,165,154,230,144,158,231,172,145,233,166,150,233,160,129,233,
-187,132,233,135,145,233,128,130,231,148,168,230,177,159,232,139,143,231,156,159,
-229,174,158,228,184,187,231,174,161,233,152,182,230,174,181,232,168,187,229,134,
-138,231,191,187,232,175,145,230,157,131,229,136,169,229,129,154,229,165,189,228,
-188,188,228,185,142,233,128,154,232,174,175,230,150,189,229,183,165,231,139,128,
-230,133,139,228,185,159,232,174,184,231,142,175,228,191,157,229,159,185,229,133,
-187,230,166,130,229,191,181,229,164,167,229,158,139,230,156,186,231,165,168,231,
-144,134,232,167,163,229,140,191,229,144,141,99,117,97,110,100,111,101,110,118,
-105,97,114,109,97,100,114,105,100,98,117,115,99,97,114,105,110,105,99,105,111,
-116,105,101,109,112,111,112,111,114,113,117,101,99,117,101,110,116,97,101,115,
-116,97,100,111,112,117,101,100,101,110,106,117,101,103,111,115,99,111,110,116,
-114,97,101,115,116,195,161,110,110,111,109,98,114,101,116,105,101,110,101,110,
-112,101,114,102,105,108,109,97,110,101,114,97,97,109,105,103,111,115,99,105,117,
-100,97,100,99,101,110,116,114,111,97,117,110,113,117,101,112,117,101,100,101,115
-,100,101,110,116,114,111,112,114,105,109,101,114,112,114,101,99,105,111,115,101,
-103,195,186,110,98,117,101,110,111,115,118,111,108,118,101,114,112,117,110,116,
-111,115,115,101,109,97,110,97,104,97,98,195,173,97,97,103,111,115,116,111,110,
-117,101,118,111,115,117,110,105,100,111,115,99,97,114,108,111,115,101,113,117,
-105,112,111,110,105,195,177,111,115,109,117,99,104,111,115,97,108,103,117,110,97
-,99,111,114,114,101,111,105,109,97,103,101,110,112,97,114,116,105,114,97,114,114
-,105,98,97,109,97,114,195,173,97,104,111,109,98,114,101,101,109,112,108,101,111,
-118,101,114,100,97,100,99,97,109,98,105,111,109,117,99,104,97,115,102,117,101,
-114,111,110,112,97,115,97,100,111,108,195,173,110,101,97,112,97,114,101,99,101,
-110,117,101,118,97,115,99,117,114,115,111,115,101,115,116,97,98,97,113,117,105,
-101,114,111,108,105,98,114,111,115,99,117,97,110,116,111,97,99,99,101,115,111,
-109,105,103,117,101,108,118,97,114,105,111,115,99,117,97,116,114,111,116,105,101
-,110,101,115,103,114,117,112,111,115,115,101,114,195,161,110,101,117,114,111,112
-,97,109,101,100,105,111,115,102,114,101,110,116,101,97,99,101,114,99,97,100,101,
-109,195,161,115,111,102,101,114,116,97,99,111,99,104,101,115,109,111,100,101,108
-,111,105,116,97,108,105,97,108,101,116,114,97,115,97,108,103,195,186,110,99,111,
-109,112,114,97,99,117,97,108,101,115,101,120,105,115,116,101,99,117,101,114,112,
-111,115,105,101,110,100,111,112,114,101,110,115,97,108,108,101,103,97,114,118,
-105,97,106,101,115,100,105,110,101,114,111,109,117,114,99,105,97,112,111,100,114
-,195,161,112,117,101,115,116,111,100,105,97,114,105,111,112,117,101,98,108,111,
-113,117,105,101,114,101,109,97,110,117,101,108,112,114,111,112,105,111,99,114,
-105,115,105,115,99,105,101,114,116,111,115,101,103,117,114,111,109,117,101,114,
-116,101,102,117,101,110,116,101,99,101,114,114,97,114,103,114,97,110,100,101,101
-,102,101,99,116,111,112,97,114,116,101,115,109,101,100,105,100,97,112,114,111,
-112,105,97,111,102,114,101,99,101,116,105,101,114,114,97,101,45,109,97,105,108,
-118,97,114,105,97,115,102,111,114,109,97,115,102,117,116,117,114,111,111,98,106,
-101,116,111,115,101,103,117,105,114,114,105,101,115,103,111,110,111,114,109,97,
-115,109,105,115,109,111,115,195,186,110,105,99,111,99,97,109,105,110,111,115,105
-,116,105,111,115,114,97,122,195,179,110,100,101,98,105,100,111,112,114,117,101,
-98,97,116,111,108,101,100,111,116,101,110,195,173,97,106,101,115,195,186,115,101
-,115,112,101,114,111,99,111,99,105,110,97,111,114,105,103,101,110,116,105,101,
-110,100,97,99,105,101,110,116,111,99,195,161,100,105,122,104,97,98,108,97,114,
-115,101,114,195,173,97,108,97,116,105,110,97,102,117,101,114,122,97,101,115,116,
-105,108,111,103,117,101,114,114,97,101,110,116,114,97,114,195,169,120,105,116,
-111,108,195,179,112,101,122,97,103,101,110,100,97,118,195,173,100,101,111,101,
-118,105,116,97,114,112,97,103,105,110,97,109,101,116,114,111,115,106,97,118,105,
-101,114,112,97,100,114,101,115,102,195,161,99,105,108,99,97,98,101,122,97,195,
-161,114,101,97,115,115,97,108,105,100,97,101,110,118,195,173,111,106,97,112,195,
-179,110,97,98,117,115,111,115,98,105,101,110,101,115,116,101,120,116,111,115,108
-,108,101,118,97,114,112,117,101,100,97,110,102,117,101,114,116,101,99,111,109,
-195,186,110,99,108,97,115,101,115,104,117,109,97,110,111,116,101,110,105,100,111
-,98,105,108,98,97,111,117,110,105,100,97,100,101,115,116,195,161,115,101,100,105
-,116,97,114,99,114,101,97,100,111,208,180,208,187,209,143,209,135,209,130,208,
-190,208,186,208,176,208,186,208,184,208,187,208,184,209,141,209,130,208,190,208,
-178,209,129,208,181,208,181,208,179,208,190,208,191,209,128,208,184,209,130,208,
-176,208,186,208,181,209,137,208,181,209,131,208,182,208,181,208,154,208,176,208,
-186,208,177,208,181,208,183,208,177,209,139,208,187,208,190,208,189,208,184,208,
-146,209,129,208,181,208,191,208,190,208,180,208,173,209,130,208,190,209,130,208,
-190,208,188,209,135,208,181,208,188,208,189,208,181,209,130,208,187,208,181,209,
-130,209,128,208,176,208,183,208,190,208,189,208,176,208,179,208,180,208,181,208,
-188,208,189,208,181,208,148,208,187,209,143,208,159,209,128,208,184,208,189,208,
-176,209,129,208,189,208,184,209,133,209,130,208,181,208,188,208,186,209,130,208,
-190,208,179,208,190,208,180,208,178,208,190,209,130,209,130,208,176,208,188,208,
-161,208,168,208,144,208,188,208,176,209,143,208,167,209,130,208,190,208,178,208,
-176,209,129,208,178,208,176,208,188,208,181,208,188,209,131,208,162,208,176,208,
-186,208,180,208,178,208,176,208,189,208,176,208,188,209,141,209,130,208,184,209,
-141,209,130,209,131,208,146,208,176,208,188,209,130,208,181,209,133,208,191,209,
-128,208,190,209,130,209,131,209,130,208,189,208,176,208,180,208,180,208,189,209,
-143,208,146,208,190,209,130,209,130,209,128,208,184,208,189,208,181,208,185,208,
-146,208,176,209,129,208,189,208,184,208,188,209,129,208,176,208,188,209,130,208,
-190,209,130,209,128,209,131,208,177,208,158,208,189,208,184,208,188,208,184,209,
-128,208,189,208,181,208,181,208,158,208,158,208,158,208,187,208,184,209,134,209,
-141,209,130,208,176,208,158,208,189,208,176,208,189,208,181,208,188,208,180,208,
-190,208,188,208,188,208,190,208,185,208,180,208,178,208,181,208,190,208,189,208,
-190,209,129,209,131,208,180,224,164,149,224,165,135,224,164,185,224,165,136,224,
-164,149,224,165,128,224,164,184,224,165,135,224,164,149,224,164,190,224,164,149,
-224,165,139,224,164,148,224,164,176,224,164,170,224,164,176,224,164,168,224,165,
-135,224,164,143,224,164,149,224,164,149,224,164,191,224,164,173,224,165,128,224,
-164,135,224,164,184,224,164,149,224,164,176,224,164,164,224,165,139,224,164,185,
-224,165,139,224,164,134,224,164,170,224,164,185,224,165,128,224,164,175,224,164,
-185,224,164,175,224,164,190,224,164,164,224,164,149,224,164,165,224,164,190,106,
-97,103,114,97,110,224,164,134,224,164,156,224,164,156,224,165,139,224,164,133,
-224,164,172,224,164,166,224,165,139,224,164,151,224,164,136,224,164,156,224,164,
-190,224,164,151,224,164,143,224,164,185,224,164,174,224,164,135,224,164,168,224,
-164,181,224,164,185,224,164,175,224,165,135,224,164,165,224,165,135,224,164,165,
-224,165,128,224,164,152,224,164,176,224,164,156,224,164,172,224,164,166,224,165,
-128,224,164,149,224,164,136,224,164,156,224,165,128,224,164,181,224,165,135,224,
-164,168,224,164,136,224,164,168,224,164,143,224,164,185,224,164,176,224,164,137,
-224,164,184,224,164,174,224,165,135,224,164,149,224,164,174,224,164,181,224,165,
-139,224,164,178,224,165,135,224,164,184,224,164,172,224,164,174,224,164,136,224,
-164,166,224,165,135,224,164,147,224,164,176,224,164,134,224,164,174,224,164,172,
-224,164,184,224,164,173,224,164,176,224,164,172,224,164,168,224,164,154,224,164,
-178,224,164,174,224,164,168,224,164,134,224,164,151,224,164,184,224,165,128,224,
-164,178,224,165,128,216,185,217,132,217,137,216,165,217,132,217,137,217,135,216,
-176,216,167,216,162,216,174,216,177,216,185,216,175,216,175,216,167,217,132,217,
-137,217,135,216,176,217,135,216,181,217,136,216,177,216,186,217,138,216,177,217,
-131,216,167,217,134,217,136,217,132,216,167,216,168,217,138,217,134,216,185,216,
-177,216,182,216,176,217,132,217,131,217,135,217,134,216,167,217,138,217,136,217,
-133,217,130,216,167,217,132,216,185,217,132,217,138,216,167,217,134,216,167,217,
-132,217,131,217,134,216,173,216,170,217,137,217,130,216,168,217,132,217,136,216,
-173,216,169,216,167,216,174,216,177,217,129,217,130,216,183,216,185,216,168,216,
-175,216,177,217,131,217,134,216,165,216,176,216,167,217,131,217,133,216,167,216,
-167,216,173,216,175,216,165,217,132,216,167,217,129,217,138,217,135,216,168,216,
-185,216,182,217,131,217,138,217,129,216,168,216,173,216,171,217,136,217,133,217,
-134,217,136,217,135,217,136,216,163,217,134,216,167,216,172,216,175,216,167,217,
-132,217,135,216,167,216,179,217,132,217,133,216,185,217,134,216,175,217,132,217,
-138,216,179,216,185,216,168,216,177,216,181,217,132,217,137,217,133,217,134,216,
-176,216,168,217,135,216,167,216,163,217,134,217,135,217,133,216,171,217,132,217,
-131,217,134,216,170,216,167,217,132,216,167,216,173,217,138,216,171,217,133,216,
-181,216,177,216,180,216,177,216,173,216,173,217,136,217,132,217,136,217,129,217,
-138,216,167,216,176,216,167,217,132,217,131,217,132,217,133,216,177,216,169,216,
-167,217,134,216,170,216,167,217,132,217,129,216,163,216,168,217,136,216,174,216,
-167,216,181,216,163,217,134,216,170,216,167,217,134,217,135,216,167,217,132,217,
-138,216,185,216,182,217,136,217,136,217,130,216,175,216,167,216,168,217,134,216,
-174,217,138,216,177,216,168,217,134,216,170,217,132,217,131,217,133,216,180,216,
-167,216,161,217,136,217,135,217,138,216,167,216,168,217,136,217,130,216,181,216,
-181,217,136,217,133,216,167,216,177,217,130,217,133,216,163,216,173,216,175,217,
-134,216,173,217,134,216,185,216,175,217,133,216,177,216,163,217,138,216,167,216,
-173,216,169,217,131,216,170,216,168,216,175,217,136,217,134,217,138,216,172,216,
-168,217,133,217,134,217,135,216,170,216,173,216,170,216,172,217,135,216,169,216,
-179,217,134,216,169,217,138,216,170,217,133,217,131,216,177,216,169,216,186,216,
-178,216,169,217,134,217,129,216,179,216,168,217,138,216,170,217,132,217,132,217,
-135,217,132,217,134,216,167,216,170,217,132,217,131,217,130,217,132,216,168,217,
-132,217,133,216,167,216,185,217,134,217,135,216,163,217,136,217,132,216,180,217,
-138,216,161,217,134,217,136,216,177,216,163,217,133,216,167,217,129,217,138,217,
-131,216,168,217,131,217,132,216,176,216,167,216,170,216,177,216,170,216,168,216,
-168,216,163,217,134,217,135,217,133,216,179,216,167,217,134,217,131,216,168,217,
-138,216,185,217,129,217,130,216,175,216,173,216,179,217,134,217,132,217,135,217,
-133,216,180,216,185,216,177,216,163,217,135,217,132,216,180,217,135,216,177,217,
-130,216,183,216,177,216,183,217,132,216,168,112,114,111,102,105,108,101,115,101,
-114,118,105,99,101,100,101,102,97,117,108,116,104,105,109,115,101,108,102,100,
-101,116,97,105,108,115,99,111,110,116,101,110,116,115,117,112,112,111,114,116,
-115,116,97,114,116,101,100,109,101,115,115,97,103,101,115,117,99,99,101,115,115,
-102,97,115,104,105,111,110,60,116,105,116,108,101,62,99,111,117,110,116,114,121,
-97,99,99,111,117,110,116,99,114,101,97,116,101,100,115,116,111,114,105,101,115,
-114,101,115,117,108,116,115,114,117,110,110,105,110,103,112,114,111,99,101,115,
-115,119,114,105,116,105,110,103,111,98,106,101,99,116,115,118,105,115,105,98,108
-,101,119,101,108,99,111,109,101,97,114,116,105,99,108,101,117,110,107,110,111,
-119,110,110,101,116,119,111,114,107,99,111,109,112,97,110,121,100,121,110,97,109
-,105,99,98,114,111,119,115,101,114,112,114,105,118,97,99,121,112,114,111,98,108,
-101,109,83,101,114,118,105,99,101,114,101,115,112,101,99,116,100,105,115,112,108
-,97,121,114,101,113,117,101,115,116,114,101,115,101,114,118,101,119,101,98,115,
-105,116,101,104,105,115,116,111,114,121,102,114,105,101,110,100,115,111,112,116,
-105,111,110,115,119,111,114,107,105,110,103,118,101,114,115,105,111,110,109,105,
-108,108,105,111,110,99,104,97,110,110,101,108,119,105,110,100,111,119,46,97,100,
-100,114,101,115,115,118,105,115,105,116,101,100,119,101,97,116,104,101,114,99,
-111,114,114,101,99,116,112,114,111,100,117,99,116,101,100,105,114,101,99,116,102
-,111,114,119,97,114,100,121,111,117,32,99,97,110,114,101,109,111,118,101,100,115
-,117,98,106,101,99,116,99,111,110,116,114,111,108,97,114,99,104,105,118,101,99,
-117,114,114,101,110,116,114,101,97,100,105,110,103,108,105,98,114,97,114,121,108
-,105,109,105,116,101,100,109,97,110,97,103,101,114,102,117,114,116,104,101,114,
-115,117,109,109,97,114,121,109,97,99,104,105,110,101,109,105,110,117,116,101,115
-,112,114,105,118,97,116,101,99,111,110,116,101,120,116,112,114,111,103,114,97,
-109,115,111,99,105,101,116,121,110,117,109,98,101,114,115,119,114,105,116,116,
-101,110,101,110,97,98,108,101,100,116,114,105,103,103,101,114,115,111,117,114,99
-,101,115,108,111,97,100,105,110,103,101,108,101,109,101,110,116,112,97,114,116,
-110,101,114,102,105,110,97,108,108,121,112,101,114,102,101,99,116,109,101,97,110
-,105,110,103,115,121,115,116,101,109,115,107,101,101,112,105,110,103,99,117,108,
-116,117,114,101,38,113,117,111,116,59,44,106,111,117,114,110,97,108,112,114,111,
-106,101,99,116,115,117,114,102,97,99,101,115,38,113,117,111,116,59,101,120,112,
-105,114,101,115,114,101,118,105,101,119,115,98,97,108,97,110,99,101,69,110,103,
-108,105,115,104,67,111,110,116,101,110,116,116,104,114,111,117,103,104,80,108,
-101,97,115,101,32,111,112,105,110,105,111,110,99,111,110,116,97,99,116,97,118,
-101,114,97,103,101,112,114,105,109,97,114,121,118,105,108,108,97,103,101,83,112,
-97,110,105,115,104,103,97,108,108,101,114,121,100,101,99,108,105,110,101,109,101
-,101,116,105,110,103,109,105,115,115,105,111,110,112,111,112,117,108,97,114,113,
-117,97,108,105,116,121,109,101,97,115,117,114,101,103,101,110,101,114,97,108,115
-,112,101,99,105,101,115,115,101,115,115,105,111,110,115,101,99,116,105,111,110,
-119,114,105,116,101,114,115,99,111,117,110,116,101,114,105,110,105,116,105,97,
-108,114,101,112,111,114,116,115,102,105,103,117,114,101,115,109,101,109,98,101,
-114,115,104,111,108,100,105,110,103,100,105,115,112,117,116,101,101,97,114,108,
-105,101,114,101,120,112,114,101,115,115,100,105,103,105,116,97,108,112,105,99,
-116,117,114,101,65,110,111,116,104,101,114,109,97,114,114,105,101,100,116,114,97
-,102,102,105,99,108,101,97,100,105,110,103,99,104,97,110,103,101,100,99,101,110,
-116,114,97,108,118,105,99,116,111,114,121,105,109,97,103,101,115,47,114,101,97,
-115,111,110,115,115,116,117,100,105,101,115,102,101,97,116,117,114,101,108,105,
-115,116,105,110,103,109,117,115,116,32,98,101,115,99,104,111,111,108,115,86,101,
-114,115,105,111,110,117,115,117,97,108,108,121,101,112,105,115,111,100,101,112,
-108,97,121,105,110,103,103,114,111,119,105,110,103,111,98,118,105,111,117,115,
-111,118,101,114,108,97,121,112,114,101,115,101,110,116,97,99,116,105,111,110,115
-,60,47,117,108,62,13,10,119,114,97,112,112,101,114,97,108,114,101,97,100,121,99,
-101,114,116,97,105,110,114,101,97,108,105,116,121,115,116,111,114,97,103,101,97,
-110,111,116,104,101,114,100,101,115,107,116,111,112,111,102,102,101,114,101,100,
-112,97,116,116,101,114,110,117,110,117,115,117,97,108,68,105,103,105,116,97,108,
-99,97,112,105,116,97,108,87,101,98,115,105,116,101,102,97,105,108,117,114,101,99
-,111,110,110,101,99,116,114,101,100,117,99,101,100,65,110,100,114,111,105,100,
-100,101,99,97,100,101,115,114,101,103,117,108,97,114,32,38,97,109,112,59,32,97,
-110,105,109,97,108,115,114,101,108,101,97,115,101,65,117,116,111,109,97,116,103,
-101,116,116,105,110,103,109,101,116,104,111,100,115,110,111,116,104,105,110,103,
-80,111,112,117,108,97,114,99,97,112,116,105,111,110,108,101,116,116,101,114,115,
-99,97,112,116,117,114,101,115,99,105,101,110,99,101,108,105,99,101,110,115,101,
-99,104,97,110,103,101,115,69,110,103,108,97,110,100,61,49,38,97,109,112,59,72,
-105,115,116,111,114,121,32,61,32,110,101,119,32,67,101,110,116,114,97,108,117,
-112,100,97,116,101,100,83,112,101,99,105,97,108,78,101,116,119,111,114,107,114,
-101,113,117,105,114,101,99,111,109,109,101,110,116,119,97,114,110,105,110,103,67
-,111,108,108,101,103,101,116,111,111,108,98,97,114,114,101,109,97,105,110,115,98
-,101,99,97,117,115,101,101,108,101,99,116,101,100,68,101,117,116,115,99,104,102,
-105,110,97,110,99,101,119,111,114,107,101,114,115,113,117,105,99,107,108,121,98,
-101,116,119,101,101,110,101,120,97,99,116,108,121,115,101,116,116,105,110,103,
-100,105,115,101,97,115,101,83,111,99,105,101,116,121,119,101,97,112,111,110,115,
-101,120,104,105,98,105,116,38,108,116,59,33,45,45,67,111,110,116,114,111,108,99,
-108,97,115,115,101,115,99,111,118,101,114,101,100,111,117,116,108,105,110,101,97
-,116,116,97,99,107,115,100,101,118,105,99,101,115,40,119,105,110,100,111,119,112
-,117,114,112,111,115,101,116,105,116,108,101,61,34,77,111,98,105,108,101,32,107,
-105,108,108,105,110,103,115,104,111,119,105,110,103,73,116,97,108,105,97,110,100
-,114,111,112,112,101,100,104,101,97,118,105,108,121,101,102,102,101,99,116,115,
-45,49,39,93,41,59,10,99,111,110,102,105,114,109,67,117,114,114,101,110,116,97,
-100,118,97,110,99,101,115,104,97,114,105,110,103,111,112,101,110,105,110,103,100
-,114,97,119,105,110,103,98,105,108,108,105,111,110,111,114,100,101,114,101,100,
-71,101,114,109,97,110,121,114,101,108,97,116,101,100,60,47,102,111,114,109,62,
-105,110,99,108,117,100,101,119,104,101,116,104,101,114,100,101,102,105,110,101,
-100,83,99,105,101,110,99,101,99,97,116,97,108,111,103,65,114,116,105,99,108,101,
-98,117,116,116,111,110,115,108,97,114,103,101,115,116,117,110,105,102,111,114,
-109,106,111,117,114,110,101,121,115,105,100,101,98,97,114,67,104,105,99,97,103,
-111,104,111,108,105,100,97,121,71,101,110,101,114,97,108,112,97,115,115,97,103,
-101,44,38,113,117,111,116,59,97,110,105,109,97,116,101,102,101,101,108,105,110,
-103,97,114,114,105,118,101,100,112,97,115,115,105,110,103,110,97,116,117,114,97,
-108,114,111,117,103,104,108,121,46,10,10,84,104,101,32,98,117,116,32,110,111,116
-,100,101,110,115,105,116,121,66,114,105,116,97,105,110,67,104,105,110,101,115,
-101,108,97,99,107,32,111,102,116,114,105,98,117,116,101,73,114,101,108,97,110,
-100,34,32,100,97,116,97,45,102,97,99,116,111,114,115,114,101,99,101,105,118,101,
-116,104,97,116,32,105,115,76,105,98,114,97,114,121,104,117,115,98,97,110,100,105
-,110,32,102,97,99,116,97,102,102,97,105,114,115,67,104,97,114,108,101,115,114,97
-,100,105,99,97,108,98,114,111,117,103,104,116,102,105,110,100,105,110,103,108,97
-,110,100,105,110,103,58,108,97,110,103,61,34,114,101,116,117,114,110,32,108,101,
-97,100,101,114,115,112,108,97,110,110,101,100,112,114,101,109,105,117,109,112,97
-,99,107,97,103,101,65,109,101,114,105,99,97,69,100,105,116,105,111,110,93,38,113
-,117,111,116,59,77,101,115,115,97,103,101,110,101,101,100,32,116,111,118,97,108,
-117,101,61,34,99,111,109,112,108,101,120,108,111,111,107,105,110,103,115,116,97,
-116,105,111,110,98,101,108,105,101,118,101,115,109,97,108,108,101,114,45,109,111
-,98,105,108,101,114,101,99,111,114,100,115,119,97,110,116,32,116,111,107,105,110
-,100,32,111,102,70,105,114,101,102,111,120,121,111,117,32,97,114,101,115,105,109
-,105,108,97,114,115,116,117,100,105,101,100,109,97,120,105,109,117,109,104,101,
-97,100,105,110,103,114,97,112,105,100,108,121,99,108,105,109,97,116,101,107,105,
-110,103,100,111,109,101,109,101,114,103,101,100,97,109,111,117,110,116,115,102,
-111,117,110,100,101,100,112,105,111,110,101,101,114,102,111,114,109,117,108,97,
-100,121,110,97,115,116,121,104,111,119,32,116,111,32,83,117,112,112,111,114,116,
-114,101,118,101,110,117,101,101,99,111,110,111,109,121,82,101,115,117,108,116,
-115,98,114,111,116,104,101,114,115,111,108,100,105,101,114,108,97,114,103,101,
-108,121,99,97,108,108,105,110,103,46,38,113,117,111,116,59,65,99,99,111,117,110,
-116,69,100,119,97,114,100,32,115,101,103,109,101,110,116,82,111,98,101,114,116,
-32,101,102,102,111,114,116,115,80,97,99,105,102,105,99,108,101,97,114,110,101,
-100,117,112,32,119,105,116,104,104,101,105,103,104,116,58,119,101,32,104,97,118,
-101,65,110,103,101,108,101,115,110,97,116,105,111,110,115,95,115,101,97,114,99,
-104,97,112,112,108,105,101,100,97,99,113,117,105,114,101,109,97,115,115,105,118,
-101,103,114,97,110,116,101,100,58,32,102,97,108,115,101,116,114,101,97,116,101,
-100,98,105,103,103,101,115,116,98,101,110,101,102,105,116,100,114,105,118,105,
-110,103,83,116,117,100,105,101,115,109,105,110,105,109,117,109,112,101,114,104,
-97,112,115,109,111,114,110,105,110,103,115,101,108,108,105,110,103,105,115,32,
-117,115,101,100,114,101,118,101,114,115,101,118,97,114,105,97,110,116,32,114,111
-,108,101,61,34,109,105,115,115,105,110,103,97,99,104,105,101,118,101,112,114,111
-,109,111,116,101,115,116,117,100,101,110,116,115,111,109,101,111,110,101,101,120
-,116,114,101,109,101,114,101,115,116,111,114,101,98,111,116,116,111,109,58,101,
-118,111,108,118,101,100,97,108,108,32,116,104,101,115,105,116,101,109,97,112,101
-,110,103,108,105,115,104,119,97,121,32,116,111,32,32,65,117,103,117,115,116,115,
-121,109,98,111,108,115,67,111,109,112,97,110,121,109,97,116,116,101,114,115,109,
-117,115,105,99,97,108,97,103,97,105,110,115,116,115,101,114,118,105,110,103,125,
-41,40,41,59,13,10,112,97,121,109,101,110,116,116,114,111,117,98,108,101,99,111,
-110,99,101,112,116,99,111,109,112,97,114,101,112,97,114,101,110,116,115,112,108,
-97,121,101,114,115,114,101,103,105,111,110,115,109,111,110,105,116,111,114,32,39
-,39,84,104,101,32,119,105,110,110,105,110,103,101,120,112,108,111,114,101,97,100
-,97,112,116,101,100,71,97,108,108,101,114,121,112,114,111,100,117,99,101,97,98,
-105,108,105,116,121,101,110,104,97,110,99,101,99,97,114,101,101,114,115,41,46,32
-,84,104,101,32,99,111,108,108,101,99,116,83,101,97,114,99,104,32,97,110,99,105,
-101,110,116,101,120,105,115,116,101,100,102,111,111,116,101,114,32,104,97,110,
-100,108,101,114,112,114,105,110,116,101,100,99,111,110,115,111,108,101,69,97,115
-,116,101,114,110,101,120,112,111,114,116,115,119,105,110,100,111,119,115,67,104,
-97,110,110,101,108,105,108,108,101,103,97,108,110,101,117,116,114,97,108,115,117
-,103,103,101,115,116,95,104,101,97,100,101,114,115,105,103,110,105,110,103,46,
-104,116,109,108,34,62,115,101,116,116,108,101,100,119,101,115,116,101,114,110,99
-,97,117,115,105,110,103,45,119,101,98,107,105,116,99,108,97,105,109,101,100,74,
-117,115,116,105,99,101,99,104,97,112,116,101,114,118,105,99,116,105,109,115,84,
-104,111,109,97,115,32,109,111,122,105,108,108,97,112,114,111,109,105,115,101,112
-,97,114,116,105,101,115,101,100,105,116,105,111,110,111,117,116,115,105,100,101,
-58,102,97,108,115,101,44,104,117,110,100,114,101,100,79,108,121,109,112,105,99,
-95,98,117,116,116,111,110,97,117,116,104,111,114,115,114,101,97,99,104,101,100,
-99,104,114,111,110,105,99,100,101,109,97,110,100,115,115,101,99,111,110,100,115,
-112,114,111,116,101,99,116,97,100,111,112,116,101,100,112,114,101,112,97,114,101
-,110,101,105,116,104,101,114,103,114,101,97,116,108,121,103,114,101,97,116,101,
-114,111,118,101,114,97,108,108,105,109,112,114,111,118,101,99,111,109,109,97,110
-,100,115,112,101,99,105,97,108,115,101,97,114,99,104,46,119,111,114,115,104,105,
-112,102,117,110,100,105,110,103,116,104,111,117,103,104,116,104,105,103,104,101,
-115,116,105,110,115,116,101,97,100,117,116,105,108,105,116,121,113,117,97,114,
-116,101,114,67,117,108,116,117,114,101,116,101,115,116,105,110,103,99,108,101,97
-,114,108,121,101,120,112,111,115,101,100,66,114,111,119,115,101,114,108,105,98,
-101,114,97,108,125,32,99,97,116,99,104,80,114,111,106,101,99,116,101,120,97,109,
-112,108,101,104,105,100,101,40,41,59,70,108,111,114,105,100,97,97,110,115,119,
-101,114,115,97,108,108,111,119,101,100,69,109,112,101,114,111,114,100,101,102,
-101,110,115,101,115,101,114,105,111,117,115,102,114,101,101,100,111,109,83,101,
-118,101,114,97,108,45,98,117,116,116,111,110,70,117,114,116,104,101,114,111,117,
-116,32,111,102,32,33,61,32,110,117,108,108,116,114,97,105,110,101,100,68,101,110
-,109,97,114,107,118,111,105,100,40,48,41,47,97,108,108,46,106,115,112,114,101,
-118,101,110,116,82,101,113,117,101,115,116,83,116,101,112,104,101,110,10,10,87,
-104,101,110,32,111,98,115,101,114,118,101,60,47,104,50,62,13,10,77,111,100,101,
-114,110,32,112,114,111,118,105,100,101,34,32,97,108,116,61,34,98,111,114,100,101
-,114,115,46,10,10,70,111,114,32,10,10,77,97,110,121,32,97,114,116,105,115,116,
-115,112,111,119,101,114,101,100,112,101,114,102,111,114,109,102,105,99,116,105,
-111,110,116,121,112,101,32,111,102,109,101,100,105,99,97,108,116,105,99,107,101,
-116,115,111,112,112,111,115,101,100,67,111,117,110,99,105,108,119,105,116,110,
-101,115,115,106,117,115,116,105,99,101,71,101,111,114,103,101,32,66,101,108,103,
-105,117,109,46,46,46,60,47,97,62,116,119,105,116,116,101,114,110,111,116,97,98,
-108,121,119,97,105,116,105,110,103,119,97,114,102,97,114,101,32,79,116,104,101,
-114,32,114,97,110,107,105,110,103,112,104,114,97,115,101,115,109,101,110,116,105
-,111,110,115,117,114,118,105,118,101,115,99,104,111,108,97,114,60,47,112,62,13,
-10,32,67,111,117,110,116,114,121,105,103,110,111,114,101,100,108,111,115,115,32,
-111,102,106,117,115,116,32,97,115,71,101,111,114,103,105,97,115,116,114,97,110,
-103,101,60,104,101,97,100,62,60,115,116,111,112,112,101,100,49,39,93,41,59,13,10
-,105,115,108,97,110,100,115,110,111,116,97,98,108,101,98,111,114,100,101,114,58,
-108,105,115,116,32,111,102,99,97,114,114,105,101,100,49,48,48,44,48,48,48,60,47,
-104,51,62,10,32,115,101,118,101,114,97,108,98,101,99,111,109,101,115,115,101,108
-,101,99,116,32,119,101,100,100,105,110,103,48,48,46,104,116,109,108,109,111,110,
-97,114,99,104,111,102,102,32,116,104,101,116,101,97,99,104,101,114,104,105,103,
-104,108,121,32,98,105,111,108,111,103,121,108,105,102,101,32,111,102,111,114,32,
-101,118,101,110,114,105,115,101,32,111,102,38,114,97,113,117,111,59,112,108,117,
-115,111,110,101,104,117,110,116,105,110,103,40,116,104,111,117,103,104,68,111,
-117,103,108,97,115,106,111,105,110,105,110,103,99,105,114,99,108,101,115,70,111,
-114,32,116,104,101,65,110,99,105,101,110,116,86,105,101,116,110,97,109,118,101,
-104,105,99,108,101,115,117,99,104,32,97,115,99,114,121,115,116,97,108,118,97,108
-,117,101,32,61,87,105,110,100,111,119,115,101,110,106,111,121,101,100,97,32,115,
-109,97,108,108,97,115,115,117,109,101,100,60,97,32,105,100,61,34,102,111,114,101
-,105,103,110,32,65,108,108,32,114,105,104,111,119,32,116,104,101,68,105,115,112,
-108,97,121,114,101,116,105,114,101,100,104,111,119,101,118,101,114,104,105,100,
-100,101,110,59,98,97,116,116,108,101,115,115,101,101,107,105,110,103,99,97,98,
-105,110,101,116,119,97,115,32,110,111,116,108,111,111,107,32,97,116,99,111,110,
-100,117,99,116,103,101,116,32,116,104,101,74,97,110,117,97,114,121,104,97,112,
-112,101,110,115,116,117,114,110,105,110,103,97,58,104,111,118,101,114,79,110,108
-,105,110,101,32,70,114,101,110,99,104,32,108,97,99,107,105,110,103,116,121,112,
-105,99,97,108,101,120,116,114,97,99,116,101,110,101,109,105,101,115,101,118,101,
-110,32,105,102,103,101,110,101,114,97,116,100,101,99,105,100,101,100,97,114,101,
-32,110,111,116,47,115,101,97,114,99,104,98,101,108,105,101,102,115,45,105,109,97
-,103,101,58,108,111,99,97,116,101,100,115,116,97,116,105,99,46,108,111,103,105,
-110,34,62,99,111,110,118,101,114,116,118,105,111,108,101,110,116,101,110,116,101
-,114,101,100,102,105,114,115,116,34,62,99,105,114,99,117,105,116,70,105,110,108,
-97,110,100,99,104,101,109,105,115,116,115,104,101,32,119,97,115,49,48,112,120,59
-,34,62,97,115,32,115,117,99,104,100,105,118,105,100,101,100,60,47,115,112,97,110
-,62,119,105,108,108,32,98,101,108,105,110,101,32,111,102,97,32,103,114,101,97,
-116,109,121,115,116,101,114,121,47,105,110,100,101,120,46,102,97,108,108,105,110
-,103,100,117,101,32,116,111,32,114,97,105,108,119,97,121,99,111,108,108,101,103,
-101,109,111,110,115,116,101,114,100,101,115,99,101,110,116,105,116,32,119,105,
-116,104,110,117,99,108,101,97,114,74,101,119,105,115,104,32,112,114,111,116,101,
-115,116,66,114,105,116,105,115,104,102,108,111,119,101,114,115,112,114,101,100,
-105,99,116,114,101,102,111,114,109,115,98,117,116,116,111,110,32,119,104,111,32,
-119,97,115,108,101,99,116,117,114,101,105,110,115,116,97,110,116,115,117,105,99,
-105,100,101,103,101,110,101,114,105,99,112,101,114,105,111,100,115,109,97,114,
-107,101,116,115,83,111,99,105,97,108,32,102,105,115,104,105,110,103,99,111,109,
-98,105,110,101,103,114,97,112,104,105,99,119,105,110,110,101,114,115,60,98,114,
-32,47,62,60,98,121,32,116,104,101,32,78,97,116,117,114,97,108,80,114,105,118,97,
-99,121,99,111,111,107,105,101,115,111,117,116,99,111,109,101,114,101,115,111,108
-,118,101,83,119,101,100,105,115,104,98,114,105,101,102,108,121,80,101,114,115,
-105,97,110,115,111,32,109,117,99,104,67,101,110,116,117,114,121,100,101,112,105,
-99,116,115,99,111,108,117,109,110,115,104,111,117,115,105,110,103,115,99,114,105
-,112,116,115,110,101,120,116,32,116,111,98,101,97,114,105,110,103,109,97,112,112
-,105,110,103,114,101,118,105,115,101,100,106,81,117,101,114,121,40,45,119,105,
-100,116,104,58,116,105,116,108,101,34,62,116,111,111,108,116,105,112,83,101,99,
-116,105,111,110,100,101,115,105,103,110,115,84,117,114,107,105,115,104,121,111,
-117,110,103,101,114,46,109,97,116,99,104,40,125,41,40,41,59,10,10,98,117,114,110
-,105,110,103,111,112,101,114,97,116,101,100,101,103,114,101,101,115,115,111,117,
-114,99,101,61,82,105,99,104,97,114,100,99,108,111,115,101,108,121,112,108,97,115
-,116,105,99,101,110,116,114,105,101,115,60,47,116,114,62,13,10,99,111,108,111,
-114,58,35,117,108,32,105,100,61,34,112,111,115,115,101,115,115,114,111,108,108,
-105,110,103,112,104,121,115,105,99,115,102,97,105,108,105,110,103,101,120,101,99
-,117,116,101,99,111,110,116,101,115,116,108,105,110,107,32,116,111,68,101,102,97
-,117,108,116,60,98,114,32,47,62,10,58,32,116,114,117,101,44,99,104,97,114,116,
-101,114,116,111,117,114,105,115,109,99,108,97,115,115,105,99,112,114,111,99,101,
-101,100,101,120,112,108,97,105,110,60,47,104,49,62,13,10,111,110,108,105,110,101
-,46,63,120,109,108,32,118,101,104,101,108,112,105,110,103,100,105,97,109,111,110
-,100,117,115,101,32,116,104,101,97,105,114,108,105,110,101,101,110,100,32,45,45,
-62,41,46,97,116,116,114,40,114,101,97,100,101,114,115,104,111,115,116,105,110,
-103,35,102,102,102,102,102,102,114,101,97,108,105,122,101,86,105,110,99,101,110,
-116,115,105,103,110,97,108,115,32,115,114,99,61,34,47,80,114,111,100,117,99,116,
-100,101,115,112,105,116,101,100,105,118,101,114,115,101,116,101,108,108,105,110,
-103,80,117,98,108,105,99,32,104,101,108,100,32,105,110,74,111,115,101,112,104,32
-,116,104,101,97,116,114,101,97,102,102,101,99,116,115,60,115,116,121,108,101,62,
-97,32,108,97,114,103,101,100,111,101,115,110,39,116,108,97,116,101,114,44,32,69,
-108,101,109,101,110,116,102,97,118,105,99,111,110,99,114,101,97,116,111,114,72,
-117,110,103,97,114,121,65,105,114,112,111,114,116,115,101,101,32,116,104,101,115
-,111,32,116,104,97,116,77,105,99,104,97,101,108,83,121,115,116,101,109,115,80,
-114,111,103,114,97,109,115,44,32,97,110,100,32,32,119,105,100,116,104,61,101,38,
-113,117,111,116,59,116,114,97,100,105,110,103,108,101,102,116,34,62,10,112,101,
-114,115,111,110,115,71,111,108,100,101,110,32,65,102,102,97,105,114,115,103,114,
-97,109,109,97,114,102,111,114,109,105,110,103,100,101,115,116,114,111,121,105,
-100,101,97,32,111,102,99,97,115,101,32,111,102,111,108,100,101,115,116,32,116,
-104,105,115,32,105,115,46,115,114,99,32,61,32,99,97,114,116,111,111,110,114,101,
-103,105,115,116,114,67,111,109,109,111,110,115,77,117,115,108,105,109,115,87,104
-,97,116,32,105,115,105,110,32,109,97,110,121,109,97,114,107,105,110,103,114,101,
-118,101,97,108,115,73,110,100,101,101,100,44,101,113,117,97,108,108,121,47,115,
-104,111,119,95,97,111,117,116,100,111,111,114,101,115,99,97,112,101,40,65,117,
-115,116,114,105,97,103,101,110,101,116,105,99,115,121,115,116,101,109,44,73,110,
-32,116,104,101,32,115,105,116,116,105,110,103,72,101,32,97,108,115,111,73,115,
-108,97,110,100,115,65,99,97,100,101,109,121,10,9,9,60,33,45,45,68,97,110,105,101
-,108,32,98,105,110,100,105,110,103,98,108,111,99,107,34,62,105,109,112,111,115,
-101,100,117,116,105,108,105,122,101,65,98,114,97,104,97,109,40,101,120,99,101,
-112,116,123,119,105,100,116,104,58,112,117,116,116,105,110,103,41,46,104,116,109
-,108,40,124,124,32,91,93,59,10,68,65,84,65,91,32,42,107,105,116,99,104,101,110,
-109,111,117,110,116,101,100,97,99,116,117,97,108,32,100,105,97,108,101,99,116,
-109,97,105,110,108,121,32,95,98,108,97,110,107,39,105,110,115,116,97,108,108,101
-,120,112,101,114,116,115,105,102,40,116,121,112,101,73,116,32,97,108,115,111,38,
-99,111,112,121,59,32,34,62,84,101,114,109,115,98,111,114,110,32,105,110,79,112,
-116,105,111,110,115,101,97,115,116,101,114,110,116,97,108,107,105,110,103,99,111
-,110,99,101,114,110,103,97,105,110,101,100,32,111,110,103,111,105,110,103,106,
-117,115,116,105,102,121,99,114,105,116,105,99,115,102,97,99,116,111,114,121,105,
-116,115,32,111,119,110,97,115,115,97,117,108,116,105,110,118,105,116,101,100,108
-,97,115,116,105,110,103,104,105,115,32,111,119,110,104,114,101,102,61,34,47,34,
-32,114,101,108,61,34,100,101,118,101,108,111,112,99,111,110,99,101,114,116,100,
-105,97,103,114,97,109,100,111,108,108,97,114,115,99,108,117,115,116,101,114,112,
-104,112,63,105,100,61,97,108,99,111,104,111,108,41,59,125,41,40,41,59,117,115,
-105,110,103,32,97,62,60,115,112,97,110,62,118,101,115,115,101,108,115,114,101,
-118,105,118,97,108,65,100,100,114,101,115,115,97,109,97,116,101,117,114,97,110,
-100,114,111,105,100,97,108,108,101,103,101,100,105,108,108,110,101,115,115,119,
-97,108,107,105,110,103,99,101,110,116,101,114,115,113,117,97,108,105,102,121,109
-,97,116,99,104,101,115,117,110,105,102,105,101,100,101,120,116,105,110,99,116,68
-,101,102,101,110,115,101,100,105,101,100,32,105,110,10,9,60,33,45,45,32,99,117,
-115,116,111,109,115,108,105,110,107,105,110,103,76,105,116,116,108,101,32,66,111
-,111,107,32,111,102,101,118,101,110,105,110,103,109,105,110,46,106,115,63,97,114
-,101,32,116,104,101,107,111,110,116,97,107,116,116,111,100,97,121,39,115,46,104,
-116,109,108,34,32,116,97,114,103,101,116,61,119,101,97,114,105,110,103,65,108,
-108,32,82,105,103,59,10,125,41,40,41,59,114,97,105,115,105,110,103,32,65,108,115
-,111,44,32,99,114,117,99,105,97,108,97,98,111,117,116,34,62,100,101,99,108,97,
-114,101,45,45,62,10,60,115,99,102,105,114,101,102,111,120,97,115,32,109,117,99,
-104,97,112,112,108,105,101,115,105,110,100,101,120,44,32,115,44,32,98,117,116,32
-,116,121,112,101,32,61,32,10,13,10,60,33,45,45,116,111,119,97,114,100,115,82,101
-,99,111,114,100,115,80,114,105,118,97,116,101,70,111,114,101,105,103,110,80,114,
-101,109,105,101,114,99,104,111,105,99,101,115,86,105,114,116,117,97,108,114,101,
-116,117,114,110,115,67,111,109,109,101,110,116,80,111,119,101,114,101,100,105,
-110,108,105,110,101,59,112,111,118,101,114,116,121,99,104,97,109,98,101,114,76,
-105,118,105,110,103,32,118,111,108,117,109,101,115,65,110,116,104,111,110,121,
-108,111,103,105,110,34,32,82,101,108,97,116,101,100,69,99,111,110,111,109,121,
-114,101,97,99,104,101,115,99,117,116,116,105,110,103,103,114,97,118,105,116,121,
-108,105,102,101,32,105,110,67,104,97,112,116,101,114,45,115,104,97,100,111,119,
-78,111,116,97,98,108,101,60,47,116,100,62,13,10,32,114,101,116,117,114,110,115,
-116,97,100,105,117,109,119,105,100,103,101,116,115,118,97,114,121,105,110,103,
-116,114,97,118,101,108,115,104,101,108,100,32,98,121,119,104,111,32,97,114,101,
-119,111,114,107,32,105,110,102,97,99,117,108,116,121,97,110,103,117,108,97,114,
-119,104,111,32,104,97,100,97,105,114,112,111,114,116,116,111,119,110,32,111,102,
-10,10,83,111,109,101,32,39,99,108,105,99,107,39,99,104,97,114,103,101,115,107,
-101,121,119,111,114,100,105,116,32,119,105,108,108,99,105,116,121,32,111,102,40,
-116,104,105,115,41,59,65,110,100,114,101,119,32,117,110,105,113,117,101,32,99,
-104,101,99,107,101,100,111,114,32,109,111,114,101,51,48,48,112,120,59,32,114,101
-,116,117,114,110,59,114,115,105,111,110,61,34,112,108,117,103,105,110,115,119,
-105,116,104,105,110,32,104,101,114,115,101,108,102,83,116,97,116,105,111,110,70,
-101,100,101,114,97,108,118,101,110,116,117,114,101,112,117,98,108,105,115,104,
-115,101,110,116,32,116,111,116,101,110,115,105,111,110,97,99,116,114,101,115,115
-,99,111,109,101,32,116,111,102,105,110,103,101,114,115,68,117,107,101,32,111,102
-,112,101,111,112,108,101,44,101,120,112,108,111,105,116,119,104,97,116,32,105,
-115,104,97,114,109,111,110,121,97,32,109,97,106,111,114,34,58,34,104,116,116,112
-,105,110,32,104,105,115,32,109,101,110,117,34,62,10,109,111,110,116,104,108,121,
-111,102,102,105,99,101,114,99,111,117,110,99,105,108,103,97,105,110,105,110,103,
-101,118,101,110,32,105,110,83,117,109,109,97,114,121,100,97,116,101,32,111,102,
-108,111,121,97,108,116,121,102,105,116,110,101,115,115,97,110,100,32,119,97,115,
-101,109,112,101,114,111,114,115,117,112,114,101,109,101,83,101,99,111,110,100,32
-,104,101,97,114,105,110,103,82,117,115,115,105,97,110,108,111,110,103,101,115,
-116,65,108,98,101,114,116,97,108,97,116,101,114,97,108,115,101,116,32,111,102,32
-,115,109,97,108,108,34,62,46,97,112,112,101,110,100,100,111,32,119,105,116,104,
-102,101,100,101,114,97,108,98,97,110,107,32,111,102,98,101,110,101,97,116,104,68
-,101,115,112,105,116,101,67,97,112,105,116,97,108,103,114,111,117,110,100,115,41
-,44,32,97,110,100,32,112,101,114,99,101,110,116,105,116,32,102,114,111,109,99,
-108,111,115,105,110,103,99,111,110,116,97,105,110,73,110,115,116,101,97,100,102,
-105,102,116,101,101,110,97,115,32,119,101,108,108,46,121,97,104,111,111,46,114,
-101,115,112,111,110,100,102,105,103,104,116,101,114,111,98,115,99,117,114,101,
-114,101,102,108,101,99,116,111,114,103,97,110,105,99,61,32,77,97,116,104,46,101,
-100,105,116,105,110,103,111,110,108,105,110,101,32,112,97,100,100,105,110,103,97
-,32,119,104,111,108,101,111,110,101,114,114,111,114,121,101,97,114,32,111,102,
-101,110,100,32,111,102,32,98,97,114,114,105,101,114,119,104,101,110,32,105,116,
-104,101,97,100,101,114,32,104,111,109,101,32,111,102,114,101,115,117,109,101,100
-,114,101,110,97,109,101,100,115,116,114,111,110,103,62,104,101,97,116,105,110,
-103,114,101,116,97,105,110,115,99,108,111,117,100,102,114,119,97,121,32,111,102,
-32,77,97,114,99,104,32,49,107,110,111,119,105,110,103,105,110,32,112,97,114,116,
-66,101,116,119,101,101,110,108,101,115,115,111,110,115,99,108,111,115,101,115,
-116,118,105,114,116,117,97,108,108,105,110,107,115,34,62,99,114,111,115,115,101,
-100,69,78,68,32,45,45,62,102,97,109,111,117,115,32,97,119,97,114,100,101,100,76,
-105,99,101,110,115,101,72,101,97,108,116,104,32,102,97,105,114,108,121,32,119,
-101,97,108,116,104,121,109,105,110,105,109,97,108,65,102,114,105,99,97,110,99,
-111,109,112,101,116,101,108,97,98,101,108,34,62,115,105,110,103,105,110,103,102,
-97,114,109,101,114,115,66,114,97,115,105,108,41,100,105,115,99,117,115,115,114,
-101,112,108,97,99,101,71,114,101,103,111,114,121,102,111,110,116,32,99,111,112,
-117,114,115,117,101,100,97,112,112,101,97,114,115,109,97,107,101,32,117,112,114,
-111,117,110,100,101,100,98,111,116,104,32,111,102,98,108,111,99,107,101,100,115,
-97,119,32,116,104,101,111,102,102,105,99,101,115,99,111,108,111,117,114,115,105,
-102,40,100,111,99,117,119,104,101,110,32,104,101,101,110,102,111,114,99,101,112,
-117,115,104,40,102,117,65,117,103,117,115,116,32,85,84,70,45,56,34,62,70,97,110,
-116,97,115,121,105,110,32,109,111,115,116,105,110,106,117,114,101,100,85,115,117
-,97,108,108,121,102,97,114,109,105,110,103,99,108,111,115,117,114,101,111,98,106
-,101,99,116,32,100,101,102,101,110,99,101,117,115,101,32,111,102,32,77,101,100,
-105,99,97,108,60,98,111,100,121,62,10,101,118,105,100,101,110,116,98,101,32,117,
-115,101,100,107,101,121,67,111,100,101,115,105,120,116,101,101,110,73,115,108,97
-,109,105,99,35,48,48,48,48,48,48,101,110,116,105,114,101,32,119,105,100,101,108,
-121,32,97,99,116,105,118,101,32,40,116,121,112,101,111,102,111,110,101,32,99,97,
-110,99,111,108,111,114,32,61,115,112,101,97,107,101,114,101,120,116,101,110,100,
-115,80,104,121,115,105,99,115,116,101,114,114,97,105,110,60,116,98,111,100,121,
-62,102,117,110,101,114,97,108,118,105,101,119,105,110,103,109,105,100,100,108,
-101,32,99,114,105,99,107,101,116,112,114,111,112,104,101,116,115,104,105,102,116
-,101,100,100,111,99,116,111,114,115,82,117,115,115,101,108,108,32,116,97,114,103
-,101,116,99,111,109,112,97,99,116,97,108,103,101,98,114,97,115,111,99,105,97,108
-,45,98,117,108,107,32,111,102,109,97,110,32,97,110,100,60,47,116,100,62,10,32,
-104,101,32,108,101,102,116,41,46,118,97,108,40,41,102,97,108,115,101,41,59,108,
-111,103,105,99,97,108,98,97,110,107,105,110,103,104,111,109,101,32,116,111,110,
-97,109,105,110,103,32,65,114,105,122,111,110,97,99,114,101,100,105,116,115,41,59
-,10,125,41,59,10,102,111,117,110,100,101,114,105,110,32,116,117,114,110,67,111,
-108,108,105,110,115,98,101,102,111,114,101,32,66,117,116,32,116,104,101,99,104,
-97,114,103,101,100,84,105,116,108,101,34,62,67,97,112,116,97,105,110,115,112,101
-,108,108,101,100,103,111,100,100,101,115,115,84,97,103,32,45,45,62,65,100,100,
-105,110,103,58,98,117,116,32,119,97,115,82,101,99,101,110,116,32,112,97,116,105,
-101,110,116,98,97,99,107,32,105,110,61,102,97,108,115,101,38,76,105,110,99,111,
-108,110,119,101,32,107,110,111,119,67,111,117,110,116,101,114,74,117,100,97,105,
-115,109,115,99,114,105,112,116,32,97,108,116,101,114,101,100,39,93,41,59,10,32,
-32,104,97,115,32,116,104,101,117,110,99,108,101,97,114,69,118,101,110,116,39,44,
-98,111,116,104,32,105,110,110,111,116,32,97,108,108,10,10,60,33,45,45,32,112,108
-,97,99,105,110,103,104,97,114,100,32,116,111,32,99,101,110,116,101,114,115,111,
-114,116,32,111,102,99,108,105,101,110,116,115,115,116,114,101,101,116,115,66,101
-,114,110,97,114,100,97,115,115,101,114,116,115,116,101,110,100,32,116,111,102,97
-,110,116,97,115,121,100,111,119,110,32,105,110,104,97,114,98,111,117,114,70,114,
-101,101,100,111,109,106,101,119,101,108,114,121,47,97,98,111,117,116,46,46,115,
-101,97,114,99,104,108,101,103,101,110,100,115,105,115,32,109,97,100,101,109,111,
-100,101,114,110,32,111,110,108,121,32,111,110,111,110,108,121,32,116,111,105,109
-,97,103,101,34,32,108,105,110,101,97,114,32,112,97,105,110,116,101,114,97,110,
-100,32,110,111,116,114,97,114,101,108,121,32,97,99,114,111,110,121,109,100,101,
-108,105,118,101,114,115,104,111,114,116,101,114,48,48,38,97,109,112,59,97,115,32
-,109,97,110,121,119,105,100,116,104,61,34,47,42,32,60,33,91,67,116,105,116,108,
-101,32,61,111,102,32,116,104,101,32,108,111,119,101,115,116,32,112,105,99,107,
-101,100,32,101,115,99,97,112,101,100,117,115,101,115,32,111,102,112,101,111,112,
-108,101,115,32,80,117,98,108,105,99,77,97,116,116,104,101,119,116,97,99,116,105,
-99,115,100,97,109,97,103,101,100,119,97,121,32,102,111,114,108,97,119,115,32,111
-,102,101,97,115,121,32,116,111,32,119,105,110,100,111,119,115,116,114,111,110,
-103,32,32,115,105,109,112,108,101,125,99,97,116,99,104,40,115,101,118,101,110,
-116,104,105,110,102,111,98,111,120,119,101,110,116,32,116,111,112,97,105,110,116
-,101,100,99,105,116,105,122,101,110,73,32,100,111,110,39,116,114,101,116,114,101
-,97,116,46,32,83,111,109,101,32,119,119,46,34,41,59,10,98,111,109,98,105,110,103
-,109,97,105,108,116,111,58,109,97,100,101,32,105,110,46,32,77,97,110,121,32,99,
-97,114,114,105,101,115,124,124,123,125,59,119,105,119,111,114,107,32,111,102,115
-,121,110,111,110,121,109,100,101,102,101,97,116,115,102,97,118,111,114,101,100,
-111,112,116,105,99,97,108,112,97,103,101,84,114,97,117,110,108,101,115,115,32,
-115,101,110,100,105,110,103,108,101,102,116,34,62,60,99,111,109,83,99,111,114,65
-,108,108,32,116,104,101,106,81,117,101,114,121,46,116,111,117,114,105,115,116,67
-,108,97,115,115,105,99,102,97,108,115,101,34,32,87,105,108,104,101,108,109,115,
-117,98,117,114,98,115,103,101,110,117,105,110,101,98,105,115,104,111,112,115,46,
-115,112,108,105,116,40,103,108,111,98,97,108,32,102,111,108,108,111,119,115,98,
-111,100,121,32,111,102,110,111,109,105,110,97,108,67,111,110,116,97,99,116,115,
-101,99,117,108,97,114,108,101,102,116,32,116,111,99,104,105,101,102,108,121,45,
-104,105,100,100,101,110,45,98,97,110,110,101,114,60,47,108,105,62,10,10,46,32,87
-,104,101,110,32,105,110,32,98,111,116,104,100,105,115,109,105,115,115,69,120,112
-,108,111,114,101,97,108,119,97,121,115,32,118,105,97,32,116,104,101,115,112,97,
-195,177,111,108,119,101,108,102,97,114,101,114,117,108,105,110,103,32,97,114,114
-,97,110,103,101,99,97,112,116,97,105,110,104,105,115,32,115,111,110,114,117,108,
-101,32,111,102,104,101,32,116,111,111,107,105,116,115,101,108,102,44,61,48,38,97
-,109,112,59,40,99,97,108,108,101,100,115,97,109,112,108,101,115,116,111,32,109,
-97,107,101,99,111,109,47,112,97,103,77,97,114,116,105,110,32,75,101,110,110,101,
-100,121,97,99,99,101,112,116,115,102,117,108,108,32,111,102,104,97,110,100,108,
-101,100,66,101,115,105,100,101,115,47,47,45,45,62,60,47,97,98,108,101,32,116,111
-,116,97,114,103,101,116,115,101,115,115,101,110,99,101,104,105,109,32,116,111,32
-,105,116,115,32,98,121,32,99,111,109,109,111,110,46,109,105,110,101,114,97,108,
-116,111,32,116,97,107,101,119,97,121,115,32,116,111,115,46,111,114,103,47,108,97
-,100,118,105,115,101,100,112,101,110,97,108,116,121,115,105,109,112,108,101,58,
-105,102,32,116,104,101,121,76,101,116,116,101,114,115,97,32,115,104,111,114,116,
-72,101,114,98,101,114,116,115,116,114,105,107,101,115,32,103,114,111,117,112,115
-,46,108,101,110,103,116,104,102,108,105,103,104,116,115,111,118,101,114,108,97,
-112,115,108,111,119,108,121,32,108,101,115,115,101,114,32,115,111,99,105,97,108,
-32,60,47,112,62,10,9,9,105,116,32,105,110,116,111,114,97,110,107,101,100,32,114,
-97,116,101,32,111,102,117,108,62,13,10,32,32,97,116,116,101,109,112,116,112,97,
-105,114,32,111,102,109,97,107,101,32,105,116,75,111,110,116,97,107,116,65,110,
-116,111,110,105,111,104,97,118,105,110,103,32,114,97,116,105,110,103,115,32,97,
-99,116,105,118,101,115,116,114,101,97,109,115,116,114,97,112,112,101,100,34,41,
-46,99,115,115,40,104,111,115,116,105,108,101,108,101,97,100,32,116,111,108,105,
-116,116,108,101,32,103,114,111,117,112,115,44,80,105,99,116,117,114,101,45,45,62
-,13,10,13,10,32,114,111,119,115,61,34,32,111,98,106,101,99,116,105,110,118,101,
-114,115,101,60,102,111,111,116,101,114,67,117,115,116,111,109,86,62,60,92,47,115
-,99,114,115,111,108,118,105,110,103,67,104,97,109,98,101,114,115,108,97,118,101,
-114,121,119,111,117,110,100,101,100,119,104,101,114,101,97,115,33,61,32,39,117,
-110,100,102,111,114,32,97,108,108,112,97,114,116,108,121,32,45,114,105,103,104,
-116,58,65,114,97,98,105,97,110,98,97,99,107,101,100,32,99,101,110,116,117,114,
-121,117,110,105,116,32,111,102,109,111,98,105,108,101,45,69,117,114,111,112,101,
-44,105,115,32,104,111,109,101,114,105,115,107,32,111,102,100,101,115,105,114,101
-,100,67,108,105,110,116,111,110,99,111,115,116,32,111,102,97,103,101,32,111,102,
-32,98,101,99,111,109,101,32,110,111,110,101,32,111,102,112,38,113,117,111,116,59
-,77,105,100,100,108,101,32,101,97,100,39,41,91,48,67,114,105,116,105,99,115,115,
-116,117,100,105,111,115,62,38,99,111,112,121,59,103,114,111,117,112,34,62,97,115
-,115,101,109,98,108,109,97,107,105,110,103,32,112,114,101,115,115,101,100,119,
-105,100,103,101,116,46,112,115,58,34,32,63,32,114,101,98,117,105,108,116,98,121,
-32,115,111,109,101,70,111,114,109,101,114,32,101,100,105,116,111,114,115,100,101
-,108,97,121,101,100,67,97,110,111,110,105,99,104,97,100,32,116,104,101,112,117,
-115,104,105,110,103,99,108,97,115,115,61,34,98,117,116,32,97,114,101,112,97,114,
-116,105,97,108,66,97,98,121,108,111,110,98,111,116,116,111,109,32,99,97,114,114,
-105,101,114,67,111,109,109,97,110,100,105,116,115,32,117,115,101,65,115,32,119,
-105,116,104,99,111,117,114,115,101,115,97,32,116,104,105,114,100,100,101,110,111
-,116,101,115,97,108,115,111,32,105,110,72,111,117,115,116,111,110,50,48,112,120,
-59,34,62,97,99,99,117,115,101,100,100,111,117,98,108,101,32,103,111,97,108,32,
-111,102,70,97,109,111,117,115,32,41,46,98,105,110,100,40,112,114,105,101,115,116
-,115,32,79,110,108,105,110,101,105,110,32,74,117,108,121,115,116,32,43,32,34,103
-,99,111,110,115,117,108,116,100,101,99,105,109,97,108,104,101,108,112,102,117,
-108,114,101,118,105,118,101,100,105,115,32,118,101,114,121,114,39,43,39,105,112,
-116,108,111,115,105,110,103,32,102,101,109,97,108,101,115,105,115,32,97,108,115,
-111,115,116,114,105,110,103,115,100,97,121,115,32,111,102,97,114,114,105,118,97,
-108,102,117,116,117,114,101,32,60,111,98,106,101,99,116,102,111,114,99,105,110,
-103,83,116,114,105,110,103,40,34,32,47,62,10,9,9,104,101,114,101,32,105,115,101,
-110,99,111,100,101,100,46,32,32,84,104,101,32,98,97,108,108,111,111,110,100,111,
-110,101,32,98,121,47,99,111,109,109,111,110,98,103,99,111,108,111,114,108,97,119
-,32,111,102,32,73,110,100,105,97,110,97,97,118,111,105,100,101,100,98,117,116,32
-,116,104,101,50,112,120,32,51,112,120,106,113,117,101,114,121,46,97,102,116,101,
-114,32,97,112,111,108,105,99,121,46,109,101,110,32,97,110,100,102,111,111,116,
-101,114,45,61,32,116,114,117,101,59,102,111,114,32,117,115,101,115,99,114,101,
-101,110,46,73,110,100,105,97,110,32,105,109,97,103,101,32,61,102,97,109,105,108,
-121,44,104,116,116,112,58,47,47,32,38,110,98,115,112,59,100,114,105,118,101,114,
-115,101,116,101,114,110,97,108,115,97,109,101,32,97,115,110,111,116,105,99,101,
-100,118,105,101,119,101,114,115,125,41,40,41,59,10,32,105,115,32,109,111,114,101
-,115,101,97,115,111,110,115,102,111,114,109,101,114,32,116,104,101,32,110,101,
-119,105,115,32,106,117,115,116,99,111,110,115,101,110,116,32,83,101,97,114,99,
-104,119,97,115,32,116,104,101,119,104,121,32,116,104,101,115,104,105,112,112,101
-,100,98,114,62,60,98,114,62,119,105,100,116,104,58,32,104,101,105,103,104,116,61
-,109,97,100,101,32,111,102,99,117,105,115,105,110,101,105,115,32,116,104,97,116,
-97,32,118,101,114,121,32,65,100,109,105,114,97,108,32,102,105,120,101,100,59,110
-,111,114,109,97,108,32,77,105,115,115,105,111,110,80,114,101,115,115,44,32,111,
-110,116,97,114,105,111,99,104,97,114,115,101,116,116,114,121,32,116,111,32,105,
-110,118,97,100,101,100,61,34,116,114,117,101,34,115,112,97,99,105,110,103,105,
-115,32,109,111,115,116,97,32,109,111,114,101,32,116,111,116,97,108,108,121,102,
-97,108,108,32,111,102,125,41,59,13,10,32,32,105,109,109,101,110,115,101,116,105,
-109,101,32,105,110,115,101,116,32,111,117,116,115,97,116,105,115,102,121,116,111
-,32,102,105,110,100,100,111,119,110,32,116,111,108,111,116,32,111,102,32,80,108,
-97,121,101,114,115,105,110,32,74,117,110,101,113,117,97,110,116,117,109,110,111,
-116,32,116,104,101,116,105,109,101,32,116,111,100,105,115,116,97,110,116,70,105,
-110,110,105,115,104,115,114,99,32,61,32,40,115,105,110,103,108,101,32,104,101,
-108,112,32,111,102,71,101,114,109,97,110,32,108,97,119,32,97,110,100,108,97,98,
-101,108,101,100,102,111,114,101,115,116,115,99,111,111,107,105,110,103,115,112,
-97,99,101,34,62,104,101,97,100,101,114,45,119,101,108,108,32,97,115,83,116,97,
-110,108,101,121,98,114,105,100,103,101,115,47,103,108,111,98,97,108,67,114,111,
-97,116,105,97,32,65,98,111,117,116,32,91,48,93,59,10,32,32,105,116,44,32,97,110,
-100,103,114,111,117,112,101,100,98,101,105,110,103,32,97,41,123,116,104,114,111,
-119,104,101,32,109,97,100,101,108,105,103,104,116,101,114,101,116,104,105,99,97,
-108,70,70,70,70,70,70,34,98,111,116,116,111,109,34,108,105,107,101,32,97,32,101,
-109,112,108,111,121,115,108,105,118,101,32,105,110,97,115,32,115,101,101,110,112
-,114,105,110,116,101,114,109,111,115,116,32,111,102,117,98,45,108,105,110,107,
-114,101,106,101,99,116,115,97,110,100,32,117,115,101,105,109,97,103,101,34,62,
-115,117,99,99,101,101,100,102,101,101,100,105,110,103,78,117,99,108,101,97,114,
-105,110,102,111,114,109,97,116,111,32,104,101,108,112,87,111,109,101,110,39,115,
-78,101,105,116,104,101,114,77,101,120,105,99,97,110,112,114,111,116,101,105,110,
-60,116,97,98,108,101,32,98,121,32,109,97,110,121,104,101,97,108,116,104,121,108,
-97,119,115,117,105,116,100,101,118,105,115,101,100,46,112,117,115,104,40,123,115
-,101,108,108,101,114,115,115,105,109,112,108,121,32,84,104,114,111,117,103,104,
-46,99,111,111,107,105,101,32,73,109,97,103,101,40,111,108,100,101,114,34,62,117,
-115,46,106,115,34,62,32,83,105,110,99,101,32,117,110,105,118,101,114,115,108,97,
-114,103,101,114,32,111,112,101,110,32,116,111,33,45,45,32,101,110,100,108,105,
-101,115,32,105,110,39,93,41,59,13,10,32,32,109,97,114,107,101,116,119,104,111,32
-,105,115,32,40,34,68,79,77,67,111,109,97,110,97,103,101,100,111,110,101,32,102,
-111,114,116,121,112,101,111,102,32,75,105,110,103,100,111,109,112,114,111,102,
-105,116,115,112,114,111,112,111,115,101,116,111,32,115,104,111,119,99,101,110,
-116,101,114,59,109,97,100,101,32,105,116,100,114,101,115,115,101,100,119,101,114
-,101,32,105,110,109,105,120,116,117,114,101,112,114,101,99,105,115,101,97,114,
-105,115,105,110,103,115,114,99,32,61,32,39,109,97,107,101,32,97,32,115,101,99,
-117,114,101,100,66,97,112,116,105,115,116,118,111,116,105,110,103,32,10,9,9,118,
-97,114,32,77,97,114,99,104,32,50,103,114,101,119,32,117,112,67,108,105,109,97,
-116,101,46,114,101,109,111,118,101,115,107,105,108,108,101,100,119,97,121,32,116
-,104,101,60,47,104,101,97,100,62,102,97,99,101,32,111,102,97,99,116,105,110,103,
-32,114,105,103,104,116,34,62,116,111,32,119,111,114,107,114,101,100,117,99,101,
-115,104,97,115,32,104,97,100,101,114,101,99,116,101,100,115,104,111,119,40,41,59
-,97,99,116,105,111,110,61,98,111,111,107,32,111,102,97,110,32,97,114,101,97,61,
-61,32,34,104,116,116,60,104,101,97,100,101,114,10,60,104,116,109,108,62,99,111,
-110,102,111,114,109,102,97,99,105,110,103,32,99,111,111,107,105,101,46,114,101,
-108,121,32,111,110,104,111,115,116,101,100,32,46,99,117,115,116,111,109,104,101,
-32,119,101,110,116,98,117,116,32,102,111,114,115,112,114,101,97,100,32,70,97,109
-,105,108,121,32,97,32,109,101,97,110,115,111,117,116,32,116,104,101,102,111,114,
-117,109,115,46,102,111,111,116,97,103,101,34,62,77,111,98,105,108,67,108,101,109
-,101,110,116,115,34,32,105,100,61,34,97,115,32,104,105,103,104,105,110,116,101,
-110,115,101,45,45,62,60,33,45,45,102,101,109,97,108,101,32,105,115,32,115,101,
-101,110,105,109,112,108,105,101,100,115,101,116,32,116,104,101,97,32,115,116,97,
-116,101,97,110,100,32,104,105,115,102,97,115,116,101,115,116,98,101,115,105,100,
-101,115,98,117,116,116,111,110,95,98,111,117,110,100,101,100,34,62,60,105,109,
-103,32,73,110,102,111,98,111,120,101,118,101,110,116,115,44,97,32,121,111,117,
-110,103,97,110,100,32,97,114,101,78,97,116,105,118,101,32,99,104,101,97,112,101,
-114,84,105,109,101,111,117,116,97,110,100,32,104,97,115,101,110,103,105,110,101,
-115,119,111,110,32,116,104,101,40,109,111,115,116,108,121,114,105,103,104,116,58
-,32,102,105,110,100,32,97,32,45,98,111,116,116,111,109,80,114,105,110,99,101,32,
-97,114,101,97,32,111,102,109,111,114,101,32,111,102,115,101,97,114,99,104,95,110
-,97,116,117,114,101,44,108,101,103,97,108,108,121,112,101,114,105,111,100,44,108
-,97,110,100,32,111,102,111,114,32,119,105,116,104,105,110,100,117,99,101,100,112
-,114,111,118,105,110,103,109,105,115,115,105,108,101,108,111,99,97,108,108,121,
-65,103,97,105,110,115,116,116,104,101,32,119,97,121,107,38,113,117,111,116,59,
-112,120,59,34,62,13,10,112,117,115,104,101,100,32,97,98,97,110,100,111,110,110,
-117,109,101,114,97,108,67,101,114,116,97,105,110,73,110,32,116,104,105,115,109,
-111,114,101,32,105,110,111,114,32,115,111,109,101,110,97,109,101,32,105,115,97,
-110,100,44,32,105,110,99,114,111,119,110,101,100,73,83,66,78,32,48,45,99,114,101
-,97,116,101,115,79,99,116,111,98,101,114,109,97,121,32,110,111,116,99,101,110,
-116,101,114,32,108,97,116,101,32,105,110,68,101,102,101,110,99,101,101,110,97,99
-,116,101,100,119,105,115,104,32,116,111,98,114,111,97,100,108,121,99,111,111,108
-,105,110,103,111,110,108,111,97,100,61,105,116,46,32,84,104,101,114,101,99,111,
-118,101,114,77,101,109,98,101,114,115,104,101,105,103,104,116,32,97,115,115,117,
-109,101,115,60,104,116,109,108,62,10,112,101,111,112,108,101,46,105,110,32,111,
-110,101,32,61,119,105,110,100,111,119,102,111,111,116,101,114,95,97,32,103,111,
-111,100,32,114,101,107,108,97,109,97,111,116,104,101,114,115,44,116,111,32,116,
-104,105,115,95,99,111,111,107,105,101,112,97,110,101,108,34,62,76,111,110,100,
-111,110,44,100,101,102,105,110,101,115,99,114,117,115,104,101,100,98,97,112,116,
-105,115,109,99,111,97,115,116,97,108,115,116,97,116,117,115,32,116,105,116,108,
-101,34,32,109,111,118,101,32,116,111,108,111,115,116,32,105,110,98,101,116,116,
-101,114,32,105,109,112,108,105,101,115,114,105,118,97,108,114,121,115,101,114,
-118,101,114,115,32,83,121,115,116,101,109,80,101,114,104,97,112,115,101,115,32,
-97,110,100,32,99,111,110,116,101,110,100,102,108,111,119,105,110,103,108,97,115,
-116,101,100,32,114,105,115,101,32,105,110,71,101,110,101,115,105,115,118,105,101
-,119,32,111,102,114,105,115,105,110,103,32,115,101,101,109,32,116,111,98,117,116
-,32,105,110,32,98,97,99,107,105,110,103,104,101,32,119,105,108,108,103,105,118,
-101,110,32,97,103,105,118,105,110,103,32,99,105,116,105,101,115,46,102,108,111,
-119,32,111,102,32,76,97,116,101,114,32,97,108,108,32,98,117,116,72,105,103,104,
-119,97,121,111,110,108,121,32,98,121,115,105,103,110,32,111,102,104,101,32,100,
-111,101,115,100,105,102,102,101,114,115,98,97,116,116,101,114,121,38,97,109,112,
-59,108,97,115,105,110,103,108,101,115,116,104,114,101,97,116,115,105,110,116,101
-,103,101,114,116,97,107,101,32,111,110,114,101,102,117,115,101,100,99,97,108,108
-,101,100,32,61,85,83,38,97,109,112,83,101,101,32,116,104,101,110,97,116,105,118,
-101,115,98,121,32,116,104,105,115,115,121,115,116,101,109,46,104,101,97,100,32,
-111,102,58,104,111,118,101,114,44,108,101,115,98,105,97,110,115,117,114,110,97,
-109,101,97,110,100,32,97,108,108,99,111,109,109,111,110,47,104,101,97,100,101,
-114,95,95,112,97,114,97,109,115,72,97,114,118,97,114,100,47,112,105,120,101,108,
-46,114,101,109,111,118,97,108,115,111,32,108,111,110,103,114,111,108,101,32,111,
-102,106,111,105,110,116,108,121,115,107,121,115,99,114,97,85,110,105,99,111,100,
-101,98,114,32,47,62,13,10,65,116,108,97,110,116,97,110,117,99,108,101,117,115,67
-,111,117,110,116,121,44,112,117,114,101,108,121,32,99,111,117,110,116,34,62,101,
-97,115,105,108,121,32,98,117,105,108,100,32,97,111,110,99,108,105,99,107,97,32,
-103,105,118,101,110,112,111,105,110,116,101,114,104,38,113,117,111,116,59,101,
-118,101,110,116,115,32,101,108,115,101,32,123,10,100,105,116,105,111,110,115,110
-,111,119,32,116,104,101,44,32,119,105,116,104,32,109,97,110,32,119,104,111,111,
-114,103,47,87,101,98,111,110,101,32,97,110,100,99,97,118,97,108,114,121,72,101,
-32,100,105,101,100,115,101,97,116,116,108,101,48,48,44,48,48,48,32,123,119,105,
-110,100,111,119,104,97,118,101,32,116,111,105,102,40,119,105,110,100,97,110,100,
-32,105,116,115,115,111,108,101,108,121,32,109,38,113,117,111,116,59,114,101,110,
-101,119,101,100,68,101,116,114,111,105,116,97,109,111,110,103,115,116,101,105,
-116,104,101,114,32,116,104,101,109,32,105,110,83,101,110,97,116,111,114,85,115,
-60,47,97,62,60,75,105,110,103,32,111,102,70,114,97,110,99,105,115,45,112,114,111
-,100,117,99,104,101,32,117,115,101,100,97,114,116,32,97,110,100,104,105,109,32,
-97,110,100,117,115,101,100,32,98,121,115,99,111,114,105,110,103,97,116,32,104,
-111,109,101,116,111,32,104,97,118,101,114,101,108,97,116,101,115,105,98,105,108,
-105,116,121,102,97,99,116,105,111,110,66,117,102,102,97,108,111,108,105,110,107,
-34,62,60,119,104,97,116,32,104,101,102,114,101,101,32,116,111,67,105,116,121,32,
-111,102,99,111,109,101,32,105,110,115,101,99,116,111,114,115,99,111,117,110,116,
-101,100,111,110,101,32,100,97,121,110,101,114,118,111,117,115,115,113,117,97,114
-,101,32,125,59,105,102,40,103,111,105,110,32,119,104,97,116,105,109,103,34,32,97
-,108,105,115,32,111,110,108,121,115,101,97,114,99,104,47,116,117,101,115,100,97,
-121,108,111,111,115,101,108,121,83,111,108,111,109,111,110,115,101,120,117,97,
-108,32,45,32,60,97,32,104,114,109,101,100,105,117,109,34,68,79,32,78,79,84,32,70
-,114,97,110,99,101,44,119,105,116,104,32,97,32,119,97,114,32,97,110,100,115,101,
-99,111,110,100,32,116,97,107,101,32,97,32,62,13,10,13,10,13,10,109,97,114,107,
-101,116,46,104,105,103,104,119,97,121,100,111,110,101,32,105,110,99,116,105,118,
-105,116,121,34,108,97,115,116,34,62,111,98,108,105,103,101,100,114,105,115,101,
-32,116,111,34,117,110,100,101,102,105,109,97,100,101,32,116,111,32,69,97,114,108
-,121,32,112,114,97,105,115,101,100,105,110,32,105,116,115,32,102,111,114,32,104,
-105,115,97,116,104,108,101,116,101,74,117,112,105,116,101,114,89,97,104,111,111,
-33,32,116,101,114,109,101,100,32,115,111,32,109,97,110,121,114,101,97,108,108,
-121,32,115,46,32,84,104,101,32,97,32,119,111,109,97,110,63,118,97,108,117,101,61
-,100,105,114,101,99,116,32,114,105,103,104,116,34,32,98,105,99,121,99,108,101,97
-,99,105,110,103,61,34,100,97,121,32,97,110,100,115,116,97,116,105,110,103,82,97,
-116,104,101,114,44,104,105,103,104,101,114,32,79,102,102,105,99,101,32,97,114,
-101,32,110,111,119,116,105,109,101,115,44,32,119,104,101,110,32,97,32,112,97,121
-,32,102,111,114,111,110,32,116,104,105,115,45,108,105,110,107,34,62,59,98,111,
-114,100,101,114,97,114,111,117,110,100,32,97,110,110,117,97,108,32,116,104,101,
-32,78,101,119,112,117,116,32,116,104,101,46,99,111,109,34,32,116,97,107,105,110,
-32,116,111,97,32,98,114,105,101,102,40,105,110,32,116,104,101,103,114,111,117,
-112,115,46,59,32,119,105,100,116,104,101,110,122,121,109,101,115,115,105,109,112
-,108,101,32,105,110,32,108,97,116,101,123,114,101,116,117,114,110,116,104,101,
-114,97,112,121,97,32,112,111,105,110,116,98,97,110,110,105,110,103,105,110,107,
-115,34,62,10,40,41,59,34,32,114,101,97,32,112,108,97,99,101,92,117,48,48,51,67,
-97,97,98,111,117,116,32,97,116,114,62,13,10,9,9,99,99,111,117,110,116,32,103,105
-,118,101,115,32,97,60,83,67,82,73,80,84,82,97,105,108,119,97,121,116,104,101,109
-,101,115,47,116,111,111,108,98,111,120,66,121,73,100,40,34,120,104,117,109,97,
-110,115,44,119,97,116,99,104,101,115,105,110,32,115,111,109,101,32,105,102,32,40
-,119,105,99,111,109,105,110,103,32,102,111,114,109,97,116,115,32,85,110,100,101,
-114,32,98,117,116,32,104,97,115,104,97,110,100,101,100,32,109,97,100,101,32,98,
-121,116,104,97,110,32,105,110,102,101,97,114,32,111,102,100,101,110,111,116,101,
-100,47,105,102,114,97,109,101,108,101,102,116,32,105,110,118,111,108,116,97,103,
-101,105,110,32,101,97,99,104,97,38,113,117,111,116,59,98,97,115,101,32,111,102,
-73,110,32,109,97,110,121,117,110,100,101,114,103,111,114,101,103,105,109,101,115
-,97,99,116,105,111,110,32,60,47,112,62,13,10,60,117,115,116,111,109,86,97,59,38,
-103,116,59,60,47,105,109,112,111,114,116,115,111,114,32,116,104,97,116,109,111,
-115,116,108,121,32,38,97,109,112,59,114,101,32,115,105,122,101,61,34,60,47,97,62
-,60,47,104,97,32,99,108,97,115,115,112,97,115,115,105,118,101,72,111,115,116,32,
-61,32,87,104,101,116,104,101,114,102,101,114,116,105,108,101,86,97,114,105,111,
-117,115,61,91,93,59,40,102,117,99,97,109,101,114,97,115,47,62,60,47,116,100,62,
-97,99,116,115,32,97,115,73,110,32,115,111,109,101,62,13,10,13,10,60,33,111,114,
-103,97,110,105,115,32,60,98,114,32,47,62,66,101,105,106,105,110,103,99,97,116,97
-,108,195,160,100,101,117,116,115,99,104,101,117,114,111,112,101,117,101,117,115,
-107,97,114,97,103,97,101,105,108,103,101,115,118,101,110,115,107,97,101,115,112,
-97,195,177,97,109,101,110,115,97,106,101,117,115,117,97,114,105,111,116,114,97,
-98,97,106,111,109,195,169,120,105,99,111,112,195,161,103,105,110,97,115,105,101,
-109,112,114,101,115,105,115,116,101,109,97,111,99,116,117,98,114,101,100,117,114
-,97,110,116,101,97,195,177,97,100,105,114,101,109,112,114,101,115,97,109,111,109
-,101,110,116,111,110,117,101,115,116,114,111,112,114,105,109,101,114,97,116,114,
-97,118,195,169,115,103,114,97,99,105,97,115,110,117,101,115,116,114,97,112,114,
-111,99,101,115,111,101,115,116,97,100,111,115,99,97,108,105,100,97,100,112,101,
-114,115,111,110,97,110,195,186,109,101,114,111,97,99,117,101,114,100,111,109,195
-,186,115,105,99,97,109,105,101,109,98,114,111,111,102,101,114,116,97,115,97,108,
-103,117,110,111,115,112,97,195,173,115,101,115,101,106,101,109,112,108,111,100,
-101,114,101,99,104,111,97,100,101,109,195,161,115,112,114,105,118,97,100,111,97,
-103,114,101,103,97,114,101,110,108,97,99,101,115,112,111,115,105,98,108,101,104,
-111,116,101,108,101,115,115,101,118,105,108,108,97,112,114,105,109,101,114,111,
-195,186,108,116,105,109,111,101,118,101,110,116,111,115,97,114,99,104,105,118,
-111,99,117,108,116,117,114,97,109,117,106,101,114,101,115,101,110,116,114,97,100
-,97,97,110,117,110,99,105,111,101,109,98,97,114,103,111,109,101,114,99,97,100,
-111,103,114,97,110,100,101,115,101,115,116,117,100,105,111,109,101,106,111,114,
-101,115,102,101,98,114,101,114,111,100,105,115,101,195,177,111,116,117,114,105,
-115,109,111,99,195,179,100,105,103,111,112,111,114,116,97,100,97,101,115,112,97,
-99,105,111,102,97,109,105,108,105,97,97,110,116,111,110,105,111,112,101,114,109,
-105,116,101,103,117,97,114,100,97,114,97,108,103,117,110,97,115,112,114,101,99,
-105,111,115,97,108,103,117,105,101,110,115,101,110,116,105,100,111,118,105,115,
-105,116,97,115,116,195,173,116,117,108,111,99,111,110,111,99,101,114,115,101,103
-,117,110,100,111,99,111,110,115,101,106,111,102,114,97,110,99,105,97,109,105,110
-,117,116,111,115,115,101,103,117,110,100,97,116,101,110,101,109,111,115,101,102,
-101,99,116,111,115,109,195,161,108,97,103,97,115,101,115,105,195,179,110,114,101
-,118,105,115,116,97,103,114,97,110,97,100,97,99,111,109,112,114,97,114,105,110,
-103,114,101,115,111,103,97,114,99,195,173,97,97,99,99,105,195,179,110,101,99,117
-,97,100,111,114,113,117,105,101,110,101,115,105,110,99,108,117,115,111,100,101,
-98,101,114,195,161,109,97,116,101,114,105,97,104,111,109,98,114,101,115,109,117,
-101,115,116,114,97,112,111,100,114,195,173,97,109,97,195,177,97,110,97,195,186,
-108,116,105,109,97,101,115,116,97,109,111,115,111,102,105,99,105,97,108,116,97,
-109,98,105,101,110,110,105,110,103,195,186,110,115,97,108,117,100,111,115,112,
-111,100,101,109,111,115,109,101,106,111,114,97,114,112,111,115,105,116,105,111,
-110,98,117,115,105,110,101,115,115,104,111,109,101,112,97,103,101,115,101,99,117
-,114,105,116,121,108,97,110,103,117,97,103,101,115,116,97,110,100,97,114,100,99,
-97,109,112,97,105,103,110,102,101,97,116,117,114,101,115,99,97,116,101,103,111,
-114,121,101,120,116,101,114,110,97,108,99,104,105,108,100,114,101,110,114,101,
-115,101,114,118,101,100,114,101,115,101,97,114,99,104,101,120,99,104,97,110,103,
-101,102,97,118,111,114,105,116,101,116,101,109,112,108,97,116,101,109,105,108,
-105,116,97,114,121,105,110,100,117,115,116,114,121,115,101,114,118,105,99,101,
-115,109,97,116,101,114,105,97,108,112,114,111,100,117,99,116,115,122,45,105,110,
-100,101,120,58,99,111,109,109,101,110,116,115,115,111,102,116,119,97,114,101,99,
-111,109,112,108,101,116,101,99,97,108,101,110,100,97,114,112,108,97,116,102,111,
-114,109,97,114,116,105,99,108,101,115,114,101,113,117,105,114,101,100,109,111,
-118,101,109,101,110,116,113,117,101,115,116,105,111,110,98,117,105,108,100,105,
-110,103,112,111,108,105,116,105,99,115,112,111,115,115,105,98,108,101,114,101,
-108,105,103,105,111,110,112,104,121,115,105,99,97,108,102,101,101,100,98,97,99,
-107,114,101,103,105,115,116,101,114,112,105,99,116,117,114,101,115,100,105,115,
-97,98,108,101,100,112,114,111,116,111,99,111,108,97,117,100,105,101,110,99,101,
-115,101,116,116,105,110,103,115,97,99,116,105,118,105,116,121,101,108,101,109,
-101,110,116,115,108,101,97,114,110,105,110,103,97,110,121,116,104,105,110,103,97
-,98,115,116,114,97,99,116,112,114,111,103,114,101,115,115,111,118,101,114,118,
-105,101,119,109,97,103,97,122,105,110,101,101,99,111,110,111,109,105,99,116,114,
-97,105,110,105,110,103,112,114,101,115,115,117,114,101,118,97,114,105,111,117,
-115,32,60,115,116,114,111,110,103,62,112,114,111,112,101,114,116,121,115,104,111
-,112,112,105,110,103,116,111,103,101,116,104,101,114,97,100,118,97,110,99,101,
-100,98,101,104,97,118,105,111,114,100,111,119,110,108,111,97,100,102,101,97,116,
-117,114,101,100,102,111,111,116,98,97,108,108,115,101,108,101,99,116,101,100,76,
-97,110,103,117,97,103,101,100,105,115,116,97,110,99,101,114,101,109,101,109,98,
-101,114,116,114,97,99,107,105,110,103,112,97,115,115,119,111,114,100,109,111,100
-,105,102,105,101,100,115,116,117,100,101,110,116,115,100,105,114,101,99,116,108,
-121,102,105,103,104,116,105,110,103,110,111,114,116,104,101,114,110,100,97,116,
-97,98,97,115,101,102,101,115,116,105,118,97,108,98,114,101,97,107,105,110,103,
-108,111,99,97,116,105,111,110,105,110,116,101,114,110,101,116,100,114,111,112,
-100,111,119,110,112,114,97,99,116,105,99,101,101,118,105,100,101,110,99,101,102,
-117,110,99,116,105,111,110,109,97,114,114,105,97,103,101,114,101,115,112,111,110
-,115,101,112,114,111,98,108,101,109,115,110,101,103,97,116,105,118,101,112,114,
-111,103,114,97,109,115,97,110,97,108,121,115,105,115,114,101,108,101,97,115,101,
-100,98,97,110,110,101,114,34,62,112,117,114,99,104,97,115,101,112,111,108,105,99
-,105,101,115,114,101,103,105,111,110,97,108,99,114,101,97,116,105,118,101,97,114
-,103,117,109,101,110,116,98,111,111,107,109,97,114,107,114,101,102,101,114,114,
-101,114,99,104,101,109,105,99,97,108,100,105,118,105,115,105,111,110,99,97,108,
-108,98,97,99,107,115,101,112,97,114,97,116,101,112,114,111,106,101,99,116,115,99
-,111,110,102,108,105,99,116,104,97,114,100,119,97,114,101,105,110,116,101,114,
-101,115,116,100,101,108,105,118,101,114,121,109,111,117,110,116,97,105,110,111,
-98,116,97,105,110,101,100,61,32,102,97,108,115,101,59,102,111,114,40,118,97,114,
-32,97,99,99,101,112,116,101,100,99,97,112,97,99,105,116,121,99,111,109,112,117,
-116,101,114,105,100,101,110,116,105,116,121,97,105,114,99,114,97,102,116,101,109
-,112,108,111,121,101,100,112,114,111,112,111,115,101,100,100,111,109,101,115,116
-,105,99,105,110,99,108,117,100,101,115,112,114,111,118,105,100,101,100,104,111,
-115,112,105,116,97,108,118,101,114,116,105,99,97,108,99,111,108,108,97,112,115,
-101,97,112,112,114,111,97,99,104,112,97,114,116,110,101,114,115,108,111,103,111,
-34,62,60,97,100,97,117,103,104,116,101,114,97,117,116,104,111,114,34,32,99,117,
-108,116,117,114,97,108,102,97,109,105,108,105,101,115,47,105,109,97,103,101,115,
-47,97,115,115,101,109,98,108,121,112,111,119,101,114,102,117,108,116,101,97,99,
-104,105,110,103,102,105,110,105,115,104,101,100,100,105,115,116,114,105,99,116,
-99,114,105,116,105,99,97,108,99,103,105,45,98,105,110,47,112,117,114,112,111,115
-,101,115,114,101,113,117,105,114,101,115,101,108,101,99,116,105,111,110,98,101,
-99,111,109,105,110,103,112,114,111,118,105,100,101,115,97,99,97,100,101,109,105,
-99,101,120,101,114,99,105,115,101,97,99,116,117,97,108,108,121,109,101,100,105,
-99,105,110,101,99,111,110,115,116,97,110,116,97,99,99,105,100,101,110,116,77,97,
-103,97,122,105,110,101,100,111,99,117,109,101,110,116,115,116,97,114,116,105,110
-,103,98,111,116,116,111,109,34,62,111,98,115,101,114,118,101,100,58,32,38,113,
-117,111,116,59,101,120,116,101,110,100,101,100,112,114,101,118,105,111,117,115,
-83,111,102,116,119,97,114,101,99,117,115,116,111,109,101,114,100,101,99,105,115,
-105,111,110,115,116,114,101,110,103,116,104,100,101,116,97,105,108,101,100,115,
-108,105,103,104,116,108,121,112,108,97,110,110,105,110,103,116,101,120,116,97,
-114,101,97,99,117,114,114,101,110,99,121,101,118,101,114,121,111,110,101,115,116
-,114,97,105,103,104,116,116,114,97,110,115,102,101,114,112,111,115,105,116,105,
-118,101,112,114,111,100,117,99,101,100,104,101,114,105,116,97,103,101,115,104,
-105,112,112,105,110,103,97,98,115,111,108,117,116,101,114,101,99,101,105,118,101
-,100,114,101,108,101,118,97,110,116,98,117,116,116,111,110,34,32,118,105,111,108
-,101,110,99,101,97,110,121,119,104,101,114,101,98,101,110,101,102,105,116,115,
-108,97,117,110,99,104,101,100,114,101,99,101,110,116,108,121,97,108,108,105,97,
-110,99,101,102,111,108,108,111,119,101,100,109,117,108,116,105,112,108,101,98,
-117,108,108,101,116,105,110,105,110,99,108,117,100,101,100,111,99,99,117,114,114
-,101,100,105,110,116,101,114,110,97,108,36,40,116,104,105,115,41,46,114,101,112,
-117,98,108,105,99,62,60,116,114,62,60,116,100,99,111,110,103,114,101,115,115,114
-,101,99,111,114,100,101,100,117,108,116,105,109,97,116,101,115,111,108,117,116,
-105,111,110,60,117,108,32,105,100,61,34,100,105,115,99,111,118,101,114,72,111,
-109,101,60,47,97,62,119,101,98,115,105,116,101,115,110,101,116,119,111,114,107,
-115,97,108,116,104,111,117,103,104,101,110,116,105,114,101,108,121,109,101,109,
-111,114,105,97,108,109,101,115,115,97,103,101,115,99,111,110,116,105,110,117,101
-,97,99,116,105,118,101,34,62,115,111,109,101,119,104,97,116,118,105,99,116,111,
-114,105,97,87,101,115,116,101,114,110,32,32,116,105,116,108,101,61,34,76,111,99,
-97,116,105,111,110,99,111,110,116,114,97,99,116,118,105,115,105,116,111,114,115,
-68,111,119,110,108,111,97,100,119,105,116,104,111,117,116,32,114,105,103,104,116
-,34,62,10,109,101,97,115,117,114,101,115,119,105,100,116,104,32,61,32,118,97,114
-,105,97,98,108,101,105,110,118,111,108,118,101,100,118,105,114,103,105,110,105,
-97,110,111,114,109,97,108,108,121,104,97,112,112,101,110,101,100,97,99,99,111,
-117,110,116,115,115,116,97,110,100,105,110,103,110,97,116,105,111,110,97,108,82,
-101,103,105,115,116,101,114,112,114,101,112,97,114,101,100,99,111,110,116,114,
-111,108,115,97,99,99,117,114,97,116,101,98,105,114,116,104,100,97,121,115,116,
-114,97,116,101,103,121,111,102,102,105,99,105,97,108,103,114,97,112,104,105,99,
-115,99,114,105,109,105,110,97,108,112,111,115,115,105,98,108,121,99,111,110,115,
-117,109,101,114,80,101,114,115,111,110,97,108,115,112,101,97,107,105,110,103,118
-,97,108,105,100,97,116,101,97,99,104,105,101,118,101,100,46,106,112,103,34,32,47
-,62,109,97,99,104,105,110,101,115,60,47,104,50,62,10,32,32,107,101,121,119,111,
-114,100,115,102,114,105,101,110,100,108,121,98,114,111,116,104,101,114,115,99,
-111,109,98,105,110,101,100,111,114,105,103,105,110,97,108,99,111,109,112,111,115
-,101,100,101,120,112,101,99,116,101,100,97,100,101,113,117,97,116,101,112,97,107
-,105,115,116,97,110,102,111,108,108,111,119,34,32,118,97,108,117,97,98,108,101,
-60,47,108,97,98,101,108,62,114,101,108,97,116,105,118,101,98,114,105,110,103,105
-,110,103,105,110,99,114,101,97,115,101,103,111,118,101,114,110,111,114,112,108,
-117,103,105,110,115,47,76,105,115,116,32,111,102,32,72,101,97,100,101,114,34,62,
-34,32,110,97,109,101,61,34,32,40,38,113,117,111,116,59,103,114,97,100,117,97,116
-,101,60,47,104,101,97,100,62,10,99,111,109,109,101,114,99,101,109,97,108,97,121,
-115,105,97,100,105,114,101,99,116,111,114,109,97,105,110,116,97,105,110,59,104,
-101,105,103,104,116,58,115,99,104,101,100,117,108,101,99,104,97,110,103,105,110,
-103,98,97,99,107,32,116,111,32,99,97,116,104,111,108,105,99,112,97,116,116,101,
-114,110,115,99,111,108,111,114,58,32,35,103,114,101,97,116,101,115,116,115,117,
-112,112,108,105,101,115,114,101,108,105,97,98,108,101,60,47,117,108,62,10,9,9,60
-,115,101,108,101,99,116,32,99,105,116,105,122,101,110,115,99,108,111,116,104,105
-,110,103,119,97,116,99,104,105,110,103,60,108,105,32,105,100,61,34,115,112,101,
-99,105,102,105,99,99,97,114,114,121,105,110,103,115,101,110,116,101,110,99,101,
-60,99,101,110,116,101,114,62,99,111,110,116,114,97,115,116,116,104,105,110,107,
-105,110,103,99,97,116,99,104,40,101,41,115,111,117,116,104,101,114,110,77,105,99
-,104,97,101,108,32,109,101,114,99,104,97,110,116,99,97,114,111,117,115,101,108,
-112,97,100,100,105,110,103,58,105,110,116,101,114,105,111,114,46,115,112,108,105
-,116,40,34,108,105,122,97,116,105,111,110,79,99,116,111,98,101,114,32,41,123,114
-,101,116,117,114,110,105,109,112,114,111,118,101,100,45,45,38,103,116,59,10,10,
-99,111,118,101,114,97,103,101,99,104,97,105,114,109,97,110,46,112,110,103,34,32,
-47,62,115,117,98,106,101,99,116,115,82,105,99,104,97,114,100,32,119,104,97,116,
-101,118,101,114,112,114,111,98,97,98,108,121,114,101,99,111,118,101,114,121,98,
-97,115,101,98,97,108,108,106,117,100,103,109,101,110,116,99,111,110,110,101,99,
-116,46,46,99,115,115,34,32,47,62,32,119,101,98,115,105,116,101,114,101,112,111,
-114,116,101,100,100,101,102,97,117,108,116,34,47,62,60,47,97,62,13,10,101,108,
-101,99,116,114,105,99,115,99,111,116,108,97,110,100,99,114,101,97,116,105,111,
-110,113,117,97,110,116,105,116,121,46,32,73,83,66,78,32,48,100,105,100,32,110,
-111,116,32,105,110,115,116,97,110,99,101,45,115,101,97,114,99,104,45,34,32,108,
-97,110,103,61,34,115,112,101,97,107,101,114,115,67,111,109,112,117,116,101,114,
-99,111,110,116,97,105,110,115,97,114,99,104,105,118,101,115,109,105,110,105,115,
-116,101,114,114,101,97,99,116,105,111,110,100,105,115,99,111,117,110,116,73,116,
-97,108,105,97,110,111,99,114,105,116,101,114,105,97,115,116,114,111,110,103,108,
-121,58,32,39,104,116,116,112,58,39,115,99,114,105,112,116,39,99,111,118,101,114,
-105,110,103,111,102,102,101,114,105,110,103,97,112,112,101,97,114,101,100,66,114
-,105,116,105,115,104,32,105,100,101,110,116,105,102,121,70,97,99,101,98,111,111,
-107,110,117,109,101,114,111,117,115,118,101,104,105,99,108,101,115,99,111,110,99
-,101,114,110,115,65,109,101,114,105,99,97,110,104,97,110,100,108,105,110,103,100
-,105,118,32,105,100,61,34,87,105,108,108,105,97,109,32,112,114,111,118,105,100,
-101,114,95,99,111,110,116,101,110,116,97,99,99,117,114,97,99,121,115,101,99,116,
-105,111,110,32,97,110,100,101,114,115,111,110,102,108,101,120,105,98,108,101,67,
-97,116,101,103,111,114,121,108,97,119,114,101,110,99,101,60,115,99,114,105,112,
-116,62,108,97,121,111,117,116,61,34,97,112,112,114,111,118,101,100,32,109,97,120
-,105,109,117,109,104,101,97,100,101,114,34,62,60,47,116,97,98,108,101,62,83,101,
-114,118,105,99,101,115,104,97,109,105,108,116,111,110,99,117,114,114,101,110,116
-,32,99,97,110,97,100,105,97,110,99,104,97,110,110,101,108,115,47,116,104,101,109
-,101,115,47,47,97,114,116,105,99,108,101,111,112,116,105,111,110,97,108,112,111,
-114,116,117,103,97,108,118,97,108,117,101,61,34,34,105,110,116,101,114,118,97,
-108,119,105,114,101,108,101,115,115,101,110,116,105,116,108,101,100,97,103,101,
-110,99,105,101,115,83,101,97,114,99,104,34,32,109,101,97,115,117,114,101,100,116
-,104,111,117,115,97,110,100,115,112,101,110,100,105,110,103,38,104,101,108,108,
-105,112,59,110,101,119,32,68,97,116,101,34,32,115,105,122,101,61,34,112,97,103,
-101,78,97,109,101,109,105,100,100,108,101,34,32,34,32,47,62,60,47,97,62,104,105,
-100,100,101,110,34,62,115,101,113,117,101,110,99,101,112,101,114,115,111,110,97,
-108,111,118,101,114,102,108,111,119,111,112,105,110,105,111,110,115,105,108,108,
-105,110,111,105,115,108,105,110,107,115,34,62,10,9,60,116,105,116,108,101,62,118
-,101,114,115,105,111,110,115,115,97,116,117,114,100,97,121,116,101,114,109,105,
-110,97,108,105,116,101,109,112,114,111,112,101,110,103,105,110,101,101,114,115,
-101,99,116,105,111,110,115,100,101,115,105,103,110,101,114,112,114,111,112,111,
-115,97,108,61,34,102,97,108,115,101,34,69,115,112,97,195,177,111,108,114,101,108
-,101,97,115,101,115,115,117,98,109,105,116,34,32,101,114,38,113,117,111,116,59,
-97,100,100,105,116,105,111,110,115,121,109,112,116,111,109,115,111,114,105,101,
-110,116,101,100,114,101,115,111,117,114,99,101,114,105,103,104,116,34,62,60,112,
-108,101,97,115,117,114,101,115,116,97,116,105,111,110,115,104,105,115,116,111,
-114,121,46,108,101,97,118,105,110,103,32,32,98,111,114,100,101,114,61,99,111,110
-,116,101,110,116,115,99,101,110,116,101,114,34,62,46,10,10,83,111,109,101,32,100
-,105,114,101,99,116,101,100,115,117,105,116,97,98,108,101,98,117,108,103,97,114,
-105,97,46,115,104,111,119,40,41,59,100,101,115,105,103,110,101,100,71,101,110,
-101,114,97,108,32,99,111,110,99,101,112,116,115,69,120,97,109,112,108,101,115,
-119,105,108,108,105,97,109,115,79,114,105,103,105,110,97,108,34,62,60,115,112,97
-,110,62,115,101,97,114,99,104,34,62,111,112,101,114,97,116,111,114,114,101,113,
-117,101,115,116,115,97,32,38,113,117,111,116,59,97,108,108,111,119,105,110,103,
-68,111,99,117,109,101,110,116,114,101,118,105,115,105,111,110,46,32,10,10,84,104
-,101,32,121,111,117,114,115,101,108,102,67,111,110,116,97,99,116,32,109,105,99,
-104,105,103,97,110,69,110,103,108,105,115,104,32,99,111,108,117,109,98,105,97,
-112,114,105,111,114,105,116,121,112,114,105,110,116,105,110,103,100,114,105,110,
-107,105,110,103,102,97,99,105,108,105,116,121,114,101,116,117,114,110,101,100,67
-,111,110,116,101,110,116,32,111,102,102,105,99,101,114,115,82,117,115,115,105,97
-,110,32,103,101,110,101,114,97,116,101,45,56,56,53,57,45,49,34,105,110,100,105,
-99,97,116,101,102,97,109,105,108,105,97,114,32,113,117,97,108,105,116,121,109,97
-,114,103,105,110,58,48,32,99,111,110,116,101,110,116,118,105,101,119,112,111,114
-,116,99,111,110,116,97,99,116,115,45,116,105,116,108,101,34,62,112,111,114,116,
-97,98,108,101,46,108,101,110,103,116,104,32,101,108,105,103,105,98,108,101,105,
-110,118,111,108,118,101,115,97,116,108,97,110,116,105,99,111,110,108,111,97,100,
-61,34,100,101,102,97,117,108,116,46,115,117,112,112,108,105,101,100,112,97,121,
-109,101,110,116,115,103,108,111,115,115,97,114,121,10,10,65,102,116,101,114,32,
-103,117,105,100,97,110,99,101,60,47,116,100,62,60,116,100,101,110,99,111,100,105
-,110,103,109,105,100,100,108,101,34,62,99,97,109,101,32,116,111,32,100,105,115,
-112,108,97,121,115,115,99,111,116,116,105,115,104,106,111,110,97,116,104,97,110,
-109,97,106,111,114,105,116,121,119,105,100,103,101,116,115,46,99,108,105,110,105
-,99,97,108,116,104,97,105,108,97,110,100,116,101,97,99,104,101,114,115,60,104,
-101,97,100,62,10,9,97,102,102,101,99,116,101,100,115,117,112,112,111,114,116,115
-,112,111,105,110,116,101,114,59,116,111,83,116,114,105,110,103,60,47,115,109,97,
-108,108,62,111,107,108,97,104,111,109,97,119,105,108,108,32,98,101,32,105,110,
-118,101,115,116,111,114,48,34,32,97,108,116,61,34,104,111,108,105,100,97,121,115
-,82,101,115,111,117,114,99,101,108,105,99,101,110,115,101,100,32,40,119,104,105,
-99,104,32,46,32,65,102,116,101,114,32,99,111,110,115,105,100,101,114,118,105,115
-,105,116,105,110,103,101,120,112,108,111,114,101,114,112,114,105,109,97,114,121,
-32,115,101,97,114,99,104,34,32,97,110,100,114,111,105,100,34,113,117,105,99,107,
-108,121,32,109,101,101,116,105,110,103,115,101,115,116,105,109,97,116,101,59,114
-,101,116,117,114,110,32,59,99,111,108,111,114,58,35,32,104,101,105,103,104,116,
-61,97,112,112,114,111,118,97,108,44,32,38,113,117,111,116,59,32,99,104,101,99,
-107,101,100,46,109,105,110,46,106,115,34,109,97,103,110,101,116,105,99,62,60,47,
-97,62,60,47,104,102,111,114,101,99,97,115,116,46,32,87,104,105,108,101,32,116,
-104,117,114,115,100,97,121,100,118,101,114,116,105,115,101,38,101,97,99,117,116,
-101,59,104,97,115,67,108,97,115,115,101,118,97,108,117,97,116,101,111,114,100,
-101,114,105,110,103,101,120,105,115,116,105,110,103,112,97,116,105,101,110,116,
-115,32,79,110,108,105,110,101,32,99,111,108,111,114,97,100,111,79,112,116,105,
-111,110,115,34,99,97,109,112,98,101,108,108,60,33,45,45,32,101,110,100,60,47,115
-,112,97,110,62,60,60,98,114,32,47,62,13,10,95,112,111,112,117,112,115,124,115,99
-,105,101,110,99,101,115,44,38,113,117,111,116,59,32,113,117,97,108,105,116,121,
-32,87,105,110,100,111,119,115,32,97,115,115,105,103,110,101,100,104,101,105,103,
-104,116,58,32,60,98,32,99,108,97,115,115,108,101,38,113,117,111,116,59,32,118,97
-,108,117,101,61,34,32,67,111,109,112,97,110,121,101,120,97,109,112,108,101,115,
-60,105,102,114,97,109,101,32,98,101,108,105,101,118,101,115,112,114,101,115,101,
-110,116,115,109,97,114,115,104,97,108,108,112,97,114,116,32,111,102,32,112,114,
-111,112,101,114,108,121,41,46,10,10,84,104,101,32,116,97,120,111,110,111,109,121
-,109,117,99,104,32,111,102,32,60,47,115,112,97,110,62,10,34,32,100,97,116,97,45,
-115,114,116,117,103,117,195,170,115,115,99,114,111,108,108,84,111,32,112,114,111
-,106,101,99,116,60,104,101,97,100,62,13,10,97,116,116,111,114,110,101,121,101,
-109,112,104,97,115,105,115,115,112,111,110,115,111,114,115,102,97,110,99,121,98,
-111,120,119,111,114,108,100,39,115,32,119,105,108,100,108,105,102,101,99,104,101
-,99,107,101,100,61,115,101,115,115,105,111,110,115,112,114,111,103,114,97,109,
-109,112,120,59,102,111,110,116,45,32,80,114,111,106,101,99,116,106,111,117,114,
-110,97,108,115,98,101,108,105,101,118,101,100,118,97,99,97,116,105,111,110,116,
-104,111,109,112,115,111,110,108,105,103,104,116,105,110,103,97,110,100,32,116,
-104,101,32,115,112,101,99,105,97,108,32,98,111,114,100,101,114,61,48,99,104,101,
-99,107,105,110,103,60,47,116,98,111,100,121,62,60,98,117,116,116,111,110,32,67,
-111,109,112,108,101,116,101,99,108,101,97,114,102,105,120,10,60,104,101,97,100,
-62,10,97,114,116,105,99,108,101,32,60,115,101,99,116,105,111,110,102,105,110,100
-,105,110,103,115,114,111,108,101,32,105,110,32,112,111,112,117,108,97,114,32,32,
-79,99,116,111,98,101,114,119,101,98,115,105,116,101,32,101,120,112,111,115,117,
-114,101,117,115,101,100,32,116,111,32,32,99,104,97,110,103,101,115,111,112,101,
-114,97,116,101,100,99,108,105,99,107,105,110,103,101,110,116,101,114,105,110,103
-,99,111,109,109,97,110,100,115,105,110,102,111,114,109,101,100,32,110,117,109,98
-,101,114,115,32,32,60,47,100,105,118,62,99,114,101,97,116,105,110,103,111,110,83
-,117,98,109,105,116,109,97,114,121,108,97,110,100,99,111,108,108,101,103,101,115
-,97,110,97,108,121,116,105,99,108,105,115,116,105,110,103,115,99,111,110,116,97,
-99,116,46,108,111,103,103,101,100,73,110,97,100,118,105,115,111,114,121,115,105,
-98,108,105,110,103,115,99,111,110,116,101,110,116,34,115,38,113,117,111,116,59,
-41,115,46,32,84,104,105,115,32,112,97,99,107,97,103,101,115,99,104,101,99,107,98
-,111,120,115,117,103,103,101,115,116,115,112,114,101,103,110,97,110,116,116,111,
-109,111,114,114,111,119,115,112,97,99,105,110,103,61,105,99,111,110,46,112,110,
-103,106,97,112,97,110,101,115,101,99,111,100,101,98,97,115,101,98,117,116,116,
-111,110,34,62,103,97,109,98,108,105,110,103,115,117,99,104,32,97,115,32,44,32,
-119,104,105,108,101,32,60,47,115,112,97,110,62,32,109,105,115,115,111,117,114,
-105,115,112,111,114,116,105,110,103,116,111,112,58,49,112,120,32,46,60,47,115,
-112,97,110,62,116,101,110,115,105,111,110,115,119,105,100,116,104,61,34,50,108,
-97,122,121,108,111,97,100,110,111,118,101,109,98,101,114,117,115,101,100,32,105,
-110,32,104,101,105,103,104,116,61,34,99,114,105,112,116,34,62,10,38,110,98,115,
-112,59,60,47,60,116,114,62,60,116,100,32,104,101,105,103,104,116,58,50,47,112,
-114,111,100,117,99,116,99,111,117,110,116,114,121,32,105,110,99,108,117,100,101,
-32,102,111,111,116,101,114,34,32,38,108,116,59,33,45,45,32,116,105,116,108,101,
-34,62,60,47,106,113,117,101,114,121,46,60,47,102,111,114,109,62,10,40,231,174,
-128,228,189,147,41,40,231,185,129,233,171,148,41,104,114,118,97,116,115,107,105,
-105,116,97,108,105,97,110,111,114,111,109,195,162,110,196,131,116,195,188,114,
-107,195,167,101,216,167,216,177,216,175,217,136,116,97,109,98,105,195,169,110,
-110,111,116,105,99,105,97,115,109,101,110,115,97,106,101,115,112,101,114,115,111
-,110,97,115,100,101,114,101,99,104,111,115,110,97,99,105,111,110,97,108,115,101,
-114,118,105,99,105,111,99,111,110,116,97,99,116,111,117,115,117,97,114,105,111,
-115,112,114,111,103,114,97,109,97,103,111,98,105,101,114,110,111,101,109,112,114
-,101,115,97,115,97,110,117,110,99,105,111,115,118,97,108,101,110,99,105,97,99,
-111,108,111,109,98,105,97,100,101,115,112,117,195,169,115,100,101,112,111,114,
-116,101,115,112,114,111,121,101,99,116,111,112,114,111,100,117,99,116,111,112,
-195,186,98,108,105,99,111,110,111,115,111,116,114,111,115,104,105,115,116,111,
-114,105,97,112,114,101,115,101,110,116,101,109,105,108,108,111,110,101,115,109,
-101,100,105,97,110,116,101,112,114,101,103,117,110,116,97,97,110,116,101,114,105
-,111,114,114,101,99,117,114,115,111,115,112,114,111,98,108,101,109,97,115,97,110
-,116,105,97,103,111,110,117,101,115,116,114,111,115,111,112,105,110,105,195,179,
-110,105,109,112,114,105,109,105,114,109,105,101,110,116,114,97,115,97,109,195,
-169,114,105,99,97,118,101,110,100,101,100,111,114,115,111,99,105,101,100,97,100,
-114,101,115,112,101,99,116,111,114,101,97,108,105,122,97,114,114,101,103,105,115
-,116,114,111,112,97,108,97,98,114,97,115,105,110,116,101,114,195,169,115,101,110
-,116,111,110,99,101,115,101,115,112,101,99,105,97,108,109,105,101,109,98,114,111
-,115,114,101,97,108,105,100,97,100,99,195,179,114,100,111,98,97,122,97,114,97,
-103,111,122,97,112,195,161,103,105,110,97,115,115,111,99,105,97,108,101,115,98,
-108,111,113,117,101,97,114,103,101,115,116,105,195,179,110,97,108,113,117,105,
-108,101,114,115,105,115,116,101,109,97,115,99,105,101,110,99,105,97,115,99,111,
-109,112,108,101,116,111,118,101,114,115,105,195,179,110,99,111,109,112,108,101,
-116,97,101,115,116,117,100,105,111,115,112,195,186,98,108,105,99,97,111,98,106,
-101,116,105,118,111,97,108,105,99,97,110,116,101,98,117,115,99,97,100,111,114,99
-,97,110,116,105,100,97,100,101,110,116,114,97,100,97,115,97,99,99,105,111,110,
-101,115,97,114,99,104,105,118,111,115,115,117,112,101,114,105,111,114,109,97,121
-,111,114,195,173,97,97,108,101,109,97,110,105,97,102,117,110,99,105,195,179,110,
-195,186,108,116,105,109,111,115,104,97,99,105,101,110,100,111,97,113,117,101,108
-,108,111,115,101,100,105,99,105,195,179,110,102,101,114,110,97,110,100,111,97,
-109,98,105,101,110,116,101,102,97,99,101,98,111,111,107,110,117,101,115,116,114,
-97,115,99,108,105,101,110,116,101,115,112,114,111,99,101,115,111,115,98,97,115,
-116,97,110,116,101,112,114,101,115,101,110,116,97,114,101,112,111,114,116,97,114
-,99,111,110,103,114,101,115,111,112,117,98,108,105,99,97,114,99,111,109,101,114,
-99,105,111,99,111,110,116,114,97,116,111,106,195,179,118,101,110,101,115,100,105
-,115,116,114,105,116,111,116,195,169,99,110,105,99,97,99,111,110,106,117,110,116
-,111,101,110,101,114,103,195,173,97,116,114,97,98,97,106,97,114,97,115,116,117,
-114,105,97,115,114,101,99,105,101,110,116,101,117,116,105,108,105,122,97,114,98,
-111,108,101,116,195,173,110,115,97,108,118,97,100,111,114,99,111,114,114,101,99,
-116,97,116,114,97,98,97,106,111,115,112,114,105,109,101,114,111,115,110,101,103,
-111,99,105,111,115,108,105,98,101,114,116,97,100,100,101,116,97,108,108,101,115,
-112,97,110,116,97,108,108,97,112,114,195,179,120,105,109,111,97,108,109,101,114,
-195,173,97,97,110,105,109,97,108,101,115,113,117,105,195,169,110,101,115,99,111,
-114,97,122,195,179,110,115,101,99,99,105,195,179,110,98,117,115,99,97,110,100,
-111,111,112,99,105,111,110,101,115,101,120,116,101,114,105,111,114,99,111,110,99
-,101,112,116,111,116,111,100,97,118,195,173,97,103,97,108,101,114,195,173,97,101
-,115,99,114,105,98,105,114,109,101,100,105,99,105,110,97,108,105,99,101,110,99,
-105,97,99,111,110,115,117,108,116,97,97,115,112,101,99,116,111,115,99,114,195,
-173,116,105,99,97,100,195,179,108,97,114,101,115,106,117,115,116,105,99,105,97,
-100,101,98,101,114,195,161,110,112,101,114,195,173,111,100,111,110,101,99,101,
-115,105,116,97,109,97,110,116,101,110,101,114,112,101,113,117,101,195,177,111,
-114,101,99,105,98,105,100,97,116,114,105,98,117,110,97,108,116,101,110,101,114,
-105,102,101,99,97,110,99,105,195,179,110,99,97,110,97,114,105,97,115,100,101,115
-,99,97,114,103,97,100,105,118,101,114,115,111,115,109,97,108,108,111,114,99,97,
-114,101,113,117,105,101,114,101,116,195,169,99,110,105,99,111,100,101,98,101,114
-,195,173,97,118,105,118,105,101,110,100,97,102,105,110,97,110,122,97,115,97,100,
-101,108,97,110,116,101,102,117,110,99,105,111,110,97,99,111,110,115,101,106,111,
-115,100,105,102,195,173,99,105,108,99,105,117,100,97,100,101,115,97,110,116,105,
-103,117,97,115,97,118,97,110,122,97,100,97,116,195,169,114,109,105,110,111,117,
-110,105,100,97,100,101,115,115,195,161,110,99,104,101,122,99,97,109,112,97,195,
-177,97,115,111,102,116,111,110,105,99,114,101,118,105,115,116,97,115,99,111,110,
-116,105,101,110,101,115,101,99,116,111,114,101,115,109,111,109,101,110,116,111,
-115,102,97,99,117,108,116,97,100,99,114,195,169,100,105,116,111,100,105,118,101,
-114,115,97,115,115,117,112,117,101,115,116,111,102,97,99,116,111,114,101,115,115
-,101,103,117,110,100,111,115,112,101,113,117,101,195,177,97,208,179,208,190,208,
-180,208,176,208,181,209,129,208,187,208,184,208,181,209,129,209,130,209,140,208,
-177,209,139,208,187,208,190,208,177,209,139,209,130,209,140,209,141,209,130,208,
-190,208,188,208,149,209,129,208,187,208,184,209,130,208,190,208,179,208,190,208,
-188,208,181,208,189,209,143,208,178,209,129,208,181,209,133,209,141,209,130,208,
-190,208,185,208,180,208,176,208,182,208,181,208,177,209,139,208,187,208,184,208,
-179,208,190,208,180,209,131,208,180,208,181,208,189,209,140,209,141,209,130,208,
-190,209,130,208,177,209,139,208,187,208,176,209,129,208,181,208,177,209,143,208,
-190,208,180,208,184,208,189,209,129,208,181,208,177,208,181,208,189,208,176,208,
-180,208,190,209,129,208,176,208,185,209,130,209,132,208,190,209,130,208,190,208,
-189,208,181,208,179,208,190,209,129,208,178,208,190,208,184,209,129,208,178,208,
-190,208,185,208,184,208,179,209,128,209,139,209,130,208,190,208,182,208,181,208,
-178,209,129,208,181,208,188,209,129,208,178,208,190,209,142,208,187,208,184,209,
-136,209,140,209,141,209,130,208,184,209,133,208,191,208,190,208,186,208,176,208,
-180,208,189,208,181,208,185,208,180,208,190,208,188,208,176,208,188,208,184,209,
-128,208,176,208,187,208,184,208,177,208,190,209,130,208,181,208,188,209,131,209,
-133,208,190,209,130,209,143,208,180,208,178,209,131,209,133,209,129,208,181,209,
-130,208,184,208,187,209,142,208,180,208,184,208,180,208,181,208,187,208,190,208,
-188,208,184,209,128,208,181,209,130,208,181,208,177,209,143,209,129,208,178,208,
-190,208,181,208,178,208,184,208,180,208,181,209,135,208,181,208,179,208,190,209,
-141,209,130,208,184,208,188,209,129,209,135,208,181,209,130,209,130,208,181,208,
-188,209,139,209,134,208,181,208,189,209,139,209,129,209,130,208,176,208,187,208,
-178,208,181,208,180,209,140,209,130,208,181,208,188,208,181,208,178,208,190,208,
-180,209,139,209,130,208,181,208,177,208,181,208,178,209,139,209,136,208,181,208,
-189,208,176,208,188,208,184,209,130,208,184,208,191,208,176,209,130,208,190,208,
-188,209,131,208,191,209,128,208,176,208,178,208,187,208,184,209,134,208,176,208,
-190,208,180,208,189,208,176,208,179,208,190,208,180,209,139,208,183,208,189,208,
-176,209,142,208,188,208,190,208,179,209,131,208,180,209,128,209,131,208,179,208,
-178,209,129,208,181,208,185,208,184,208,180,208,181,209,130,208,186,208,184,208,
-189,208,190,208,190,208,180,208,189,208,190,208,180,208,181,208,187,208,176,208,
-180,208,181,208,187,208,181,209,129,209,128,208,190,208,186,208,184,209,142,208,
-189,209,143,208,178,208,181,209,129,209,140,208,149,209,129,209,130,209,140,209,
-128,208,176,208,183,208,176,208,189,208,176,209,136,208,184,216,167,217,132,217,
-132,217,135,216,167,217,132,216,170,217,138,216,172,217,133,217,138,216,185,216,
-174,216,167,216,181,216,169,216,167,217,132,216,176,217,138,216,185,217,132,217,
-138,217,135,216,172,216,175,217,138,216,175,216,167,217,132,216,162,217,134,216,
-167,217,132,216,177,216,175,216,170,216,173,217,131,217,133,216,181,217,129,216,
-173,216,169,217,131,216,167,217,134,216,170,216,167,217,132,217,132,217,138,217,
-138,217,131,217,136,217,134,216,180,216,168,217,131,216,169,217,129,217,138,217,
-135,216,167,216,168,217,134,216,167,216,170,216,173,217,136,216,167,216,161,216,
-163,217,131,216,171,216,177,216,174,217,132,216,167,217,132,216,167,217,132,216,
-173,216,168,216,175,217,132,217,138,217,132,216,175,216,177,217,136,216,179,216,
-167,216,182,216,186,216,183,216,170,217,131,217,136,217,134,217,135,217,134,216,
-167,217,131,216,179,216,167,216,173,216,169,217,134,216,167,216,175,217,138,216,
-167,217,132,216,183,216,168,216,185,217,132,217,138,217,131,216,180,217,131,216,
-177,216,167,217,138,217,133,217,131,217,134,217,133,217,134,217,135,216,167,216,
-180,216,177,217,131,216,169,216,177,216,166,217,138,216,179,217,134,216,180,217,
-138,216,183,217,133,216,167,216,176,216,167,216,167,217,132,217,129,217,134,216,
-180,216,168,216,167,216,168,216,170,216,185,216,168,216,177,216,177,216,173,217,
-133,216,169,217,131,216,167,217,129,216,169,217,138,217,130,217,136,217,132,217,
-133,216,177,217,131,216,178,217,131,217,132,217,133,216,169,216,163,216,173,217,
-133,216,175,217,130,217,132,216,168,217,138,217,138,216,185,217,134,217,138,216,
-181,217,136,216,177,216,169,216,183,216,177,217,138,217,130,216,180,216,167,216,
-177,217,131,216,172,217,136,216,167,217,132,216,163,216,174,216,177,217,137,217,
-133,216,185,217,134,216,167,216,167,216,168,216,173,216,171,216,185,216,177,217,
-136,216,182,216,168,216,180,217,131,217,132,217,133,216,179,216,172,217,132,216,
-168,217,134,216,167,217,134,216,174,216,167,217,132,216,175,217,131,216,170,216,
-167,216,168,217,131,217,132,217,138,216,169,216,168,216,175,217,136,217,134,216,
-163,217,138,216,182,216,167,217,138,217,136,216,172,216,175,217,129,216,177,217,
-138,217,130,217,131,216,170,216,168,216,170,216,163,217,129,216,182,217,132,217,
-133,216,183,216,168,216,174,216,167,217,131,216,171,216,177,216,168,216,167,216,
-177,217,131,216,167,217,129,216,182,217,132,216,167,216,173,217,132,217,137,217,
-134,217,129,216,179,217,135,216,163,217,138,216,167,217,133,216,177,216,175,217,
-136,216,175,216,163,217,134,217,135,216,167,216,175,217,138,217,134,216,167,216,
-167,217,132,216,167,217,134,217,133,216,185,216,177,216,182,216,170,216,185,217,
-132,217,133,216,175,216,167,216,174,217,132,217,133,217,133,217,131,217,134,0,0,
-0,0,0,0,0,0,1,0,1,0,1,0,1,0,2,0,2,0,2,0,2,0,4,0,4,0,4,0,4,0,0,1,2,3,4,5,6,7,7,6,
-5,4,3,2,1,0,8,9,10,11,12,13,14,15,15,14,13,12,11,10,9,8,16,17,18,19,20,21,22,23,
-23,22,21,20,19,18,17,16,24,25,26,27,28,29,30,31,31,30,29,28,27,26,25,24,255,255,
-255,255,0,0,0,0,0,0,0,0,255,255,255,255,1,0,0,0,2,0,0,0,2,0,0,0,1,0,0,0,1,0,0,0,
-3,0,0,0,255,255,0,1,0,0,0,1,0,0,255,255,0,1,0,0,0,8,0,8,0,8,0,8,0,0,0,1,0,2,0,3,
-0,4,0,5,0,6,0,7,114,101,115,111,117,114,99,101,115,99,111,117,110,116,114,105,
-101,115,113,117,101,115,116,105,111,110,115,101,113,117,105,112,109,101,110,116,
-99,111,109,109,117,110,105,116,121,97,118,97,105,108,97,98,108,101,104,105,103,
-104,108,105,103,104,116,68,84,68,47,120,104,116,109,108,109,97,114,107,101,116,
-105,110,103,107,110,111,119,108,101,100,103,101,115,111,109,101,116,104,105,110,
-103,99,111,110,116,97,105,110,101,114,100,105,114,101,99,116,105,111,110,115,117
-,98,115,99,114,105,98,101,97,100,118,101,114,116,105,115,101,99,104,97,114,97,99
-,116,101,114,34,32,118,97,108,117,101,61,34,60,47,115,101,108,101,99,116,62,65,
-117,115,116,114,97,108,105,97,34,32,99,108,97,115,115,61,34,115,105,116,117,97,
-116,105,111,110,97,117,116,104,111,114,105,116,121,102,111,108,108,111,119,105,
-110,103,112,114,105,109,97,114,105,108,121,111,112,101,114,97,116,105,111,110,99
-,104,97,108,108,101,110,103,101,100,101,118,101,108,111,112,101,100,97,110,111,
-110,121,109,111,117,115,102,117,110,99,116,105,111,110,32,102,117,110,99,116,105
-,111,110,115,99,111,109,112,97,110,105,101,115,115,116,114,117,99,116,117,114,
-101,97,103,114,101,101,109,101,110,116,34,32,116,105,116,108,101,61,34,112,111,
-116,101,110,116,105,97,108,101,100,117,99,97,116,105,111,110,97,114,103,117,109,
-101,110,116,115,115,101,99,111,110,100,97,114,121,99,111,112,121,114,105,103,104
-,116,108,97,110,103,117,97,103,101,115,101,120,99,108,117,115,105,118,101,99,111
-,110,100,105,116,105,111,110,60,47,102,111,114,109,62,13,10,115,116,97,116,101,
-109,101,110,116,97,116,116,101,110,116,105,111,110,66,105,111,103,114,97,112,104
-,121,125,32,101,108,115,101,32,123,10,115,111,108,117,116,105,111,110,115,119,
-104,101,110,32,116,104,101,32,65,110,97,108,121,116,105,99,115,116,101,109,112,
-108,97,116,101,115,100,97,110,103,101,114,111,117,115,115,97,116,101,108,108,105
-,116,101,100,111,99,117,109,101,110,116,115,112,117,98,108,105,115,104,101,114,
-105,109,112,111,114,116,97,110,116,112,114,111,116,111,116,121,112,101,105,110,
-102,108,117,101,110,99,101,38,114,97,113,117,111,59,60,47,101,102,102,101,99,116
-,105,118,101,103,101,110,101,114,97,108,108,121,116,114,97,110,115,102,111,114,
-109,98,101,97,117,116,105,102,117,108,116,114,97,110,115,112,111,114,116,111,114
-,103,97,110,105,122,101,100,112,117,98,108,105,115,104,101,100,112,114,111,109,
-105,110,101,110,116,117,110,116,105,108,32,116,104,101,116,104,117,109,98,110,97
-,105,108,78,97,116,105,111,110,97,108,32,46,102,111,99,117,115,40,41,59,111,118,
-101,114,32,116,104,101,32,109,105,103,114,97,116,105,111,110,97,110,110,111,117,
-110,99,101,100,102,111,111,116,101,114,34,62,10,101,120,99,101,112,116,105,111,
-110,108,101,115,115,32,116,104,97,110,101,120,112,101,110,115,105,118,101,102,
-111,114,109,97,116,105,111,110,102,114,97,109,101,119,111,114,107,116,101,114,
-114,105,116,111,114,121,110,100,105,99,97,116,105,111,110,99,117,114,114,101,110
-,116,108,121,99,108,97,115,115,78,97,109,101,99,114,105,116,105,99,105,115,109,
-116,114,97,100,105,116,105,111,110,101,108,115,101,119,104,101,114,101,65,108,
-101,120,97,110,100,101,114,97,112,112,111,105,110,116,101,100,109,97,116,101,114
-,105,97,108,115,98,114,111,97,100,99,97,115,116,109,101,110,116,105,111,110,101,
-100,97,102,102,105,108,105,97,116,101,60,47,111,112,116,105,111,110,62,116,114,
-101,97,116,109,101,110,116,100,105,102,102,101,114,101,110,116,47,100,101,102,97
-,117,108,116,46,80,114,101,115,105,100,101,110,116,111,110,99,108,105,99,107,61,
-34,98,105,111,103,114,97,112,104,121,111,116,104,101,114,119,105,115,101,112,101
-,114,109,97,110,101,110,116,70,114,97,110,195,167,97,105,115,72,111,108,108,121,
-119,111,111,100,101,120,112,97,110,115,105,111,110,115,116,97,110,100,97,114,100
-,115,60,47,115,116,121,108,101,62,10,114,101,100,117,99,116,105,111,110,68,101,
-99,101,109,98,101,114,32,112,114,101,102,101,114,114,101,100,67,97,109,98,114,
-105,100,103,101,111,112,112,111,110,101,110,116,115,66,117,115,105,110,101,115,
-115,32,99,111,110,102,117,115,105,111,110,62,10,60,116,105,116,108,101,62,112,
-114,101,115,101,110,116,101,100,101,120,112,108,97,105,110,101,100,100,111,101,
-115,32,110,111,116,32,119,111,114,108,100,119,105,100,101,105,110,116,101,114,
-102,97,99,101,112,111,115,105,116,105,111,110,115,110,101,119,115,112,97,112,101
-,114,60,47,116,97,98,108,101,62,10,109,111,117,110,116,97,105,110,115,108,105,
-107,101,32,116,104,101,32,101,115,115,101,110,116,105,97,108,102,105,110,97,110,
-99,105,97,108,115,101,108,101,99,116,105,111,110,97,99,116,105,111,110,61,34,47,
-97,98,97,110,100,111,110,101,100,69,100,117,99,97,116,105,111,110,112,97,114,115
-,101,73,110,116,40,115,116,97,98,105,108,105,116,121,117,110,97,98,108,101,32,
-116,111,60,47,116,105,116,108,101,62,10,114,101,108,97,116,105,111,110,115,78,
-111,116,101,32,116,104,97,116,101,102,102,105,99,105,101,110,116,112,101,114,102
-,111,114,109,101,100,116,119,111,32,121,101,97,114,115,83,105,110,99,101,32,116,
-104,101,116,104,101,114,101,102,111,114,101,119,114,97,112,112,101,114,34,62,97,
-108,116,101,114,110,97,116,101,105,110,99,114,101,97,115,101,100,66,97,116,116,
-108,101,32,111,102,112,101,114,99,101,105,118,101,100,116,114,121,105,110,103,32
-,116,111,110,101,99,101,115,115,97,114,121,112,111,114,116,114,97,121,101,100,
-101,108,101,99,116,105,111,110,115,69,108,105,122,97,98,101,116,104,60,47,105,
-102,114,97,109,101,62,100,105,115,99,111,118,101,114,121,105,110,115,117,114,97,
-110,99,101,115,46,108,101,110,103,116,104,59,108,101,103,101,110,100,97,114,121,
-71,101,111,103,114,97,112,104,121,99,97,110,100,105,100,97,116,101,99,111,114,
-112,111,114,97,116,101,115,111,109,101,116,105,109,101,115,115,101,114,118,105,
-99,101,115,46,105,110,104,101,114,105,116,101,100,60,47,115,116,114,111,110,103,
-62,67,111,109,109,117,110,105,116,121,114,101,108,105,103,105,111,117,115,108,
-111,99,97,116,105,111,110,115,67,111,109,109,105,116,116,101,101,98,117,105,108,
-100,105,110,103,115,116,104,101,32,119,111,114,108,100,110,111,32,108,111,110,
-103,101,114,98,101,103,105,110,110,105,110,103,114,101,102,101,114,101,110,99,
-101,99,97,110,110,111,116,32,98,101,102,114,101,113,117,101,110,99,121,116,121,
-112,105,99,97,108,108,121,105,110,116,111,32,116,104,101,32,114,101,108,97,116,
-105,118,101,59,114,101,99,111,114,100,105,110,103,112,114,101,115,105,100,101,
-110,116,105,110,105,116,105,97,108,108,121,116,101,99,104,110,105,113,117,101,
-116,104,101,32,111,116,104,101,114,105,116,32,99,97,110,32,98,101,101,120,105,
-115,116,101,110,99,101,117,110,100,101,114,108,105,110,101,116,104,105,115,32,
-116,105,109,101,116,101,108,101,112,104,111,110,101,105,116,101,109,115,99,111,
-112,101,112,114,97,99,116,105,99,101,115,97,100,118,97,110,116,97,103,101,41,59,
-114,101,116,117,114,110,32,70,111,114,32,111,116,104,101,114,112,114,111,118,105
-,100,105,110,103,100,101,109,111,99,114,97,99,121,98,111,116,104,32,116,104,101,
-32,101,120,116,101,110,115,105,118,101,115,117,102,102,101,114,105,110,103,115,
-117,112,112,111,114,116,101,100,99,111,109,112,117,116,101,114,115,32,102,117,
-110,99,116,105,111,110,112,114,97,99,116,105,99,97,108,115,97,105,100,32,116,104
-,97,116,105,116,32,109,97,121,32,98,101,69,110,103,108,105,115,104,60,47,102,114
-,111,109,32,116,104,101,32,115,99,104,101,100,117,108,101,100,100,111,119,110,
-108,111,97,100,115,60,47,108,97,98,101,108,62,10,115,117,115,112,101,99,116,101,
-100,109,97,114,103,105,110,58,32,48,115,112,105,114,105,116,117,97,108,60,47,104
-,101,97,100,62,10,10,109,105,99,114,111,115,111,102,116,103,114,97,100,117,97,
-108,108,121,100,105,115,99,117,115,115,101,100,104,101,32,98,101,99,97,109,101,
-101,120,101,99,117,116,105,118,101,106,113,117,101,114,121,46,106,115,104,111,
-117,115,101,104,111,108,100,99,111,110,102,105,114,109,101,100,112,117,114,99,
-104,97,115,101,100,108,105,116,101,114,97,108,108,121,100,101,115,116,114,111,
-121,101,100,117,112,32,116,111,32,116,104,101,118,97,114,105,97,116,105,111,110,
-114,101,109,97,105,110,105,110,103,105,116,32,105,115,32,110,111,116,99,101,110,
-116,117,114,105,101,115,74,97,112,97,110,101,115,101,32,97,109,111,110,103,32,
-116,104,101,99,111,109,112,108,101,116,101,100,97,108,103,111,114,105,116,104,
-109,105,110,116,101,114,101,115,116,115,114,101,98,101,108,108,105,111,110,117,
-110,100,101,102,105,110,101,100,101,110,99,111,117,114,97,103,101,114,101,115,
-105,122,97,98,108,101,105,110,118,111,108,118,105,110,103,115,101,110,115,105,
-116,105,118,101,117,110,105,118,101,114,115,97,108,112,114,111,118,105,115,105,
-111,110,40,97,108,116,104,111,117,103,104,102,101,97,116,117,114,105,110,103,99,
-111,110,100,117,99,116,101,100,41,44,32,119,104,105,99,104,32,99,111,110,116,105
-,110,117,101,100,45,104,101,97,100,101,114,34,62,70,101,98,114,117,97,114,121,32
-,110,117,109,101,114,111,117,115,32,111,118,101,114,102,108,111,119,58,99,111,
-109,112,111,110,101,110,116,102,114,97,103,109,101,110,116,115,101,120,99,101,
-108,108,101,110,116,99,111,108,115,112,97,110,61,34,116,101,99,104,110,105,99,97
-,108,110,101,97,114,32,116,104,101,32,65,100,118,97,110,99,101,100,32,115,111,
-117,114,99,101,32,111,102,101,120,112,114,101,115,115,101,100,72,111,110,103,32,
-75,111,110,103,32,70,97,99,101,98,111,111,107,109,117,108,116,105,112,108,101,32
-,109,101,99,104,97,110,105,115,109,101,108,101,118,97,116,105,111,110,111,102,
-102,101,110,115,105,118,101,60,47,102,111,114,109,62,10,9,115,112,111,110,115,
-111,114,101,100,100,111,99,117,109,101,110,116,46,111,114,32,38,113,117,111,116,
-59,116,104,101,114,101,32,97,114,101,116,104,111,115,101,32,119,104,111,109,111,
-118,101,109,101,110,116,115,112,114,111,99,101,115,115,101,115,100,105,102,102,
-105,99,117,108,116,115,117,98,109,105,116,116,101,100,114,101,99,111,109,109,101
-,110,100,99,111,110,118,105,110,99,101,100,112,114,111,109,111,116,105,110,103,
-34,32,119,105,100,116,104,61,34,46,114,101,112,108,97,99,101,40,99,108,97,115,
-115,105,99,97,108,99,111,97,108,105,116,105,111,110,104,105,115,32,102,105,114,
-115,116,100,101,99,105,115,105,111,110,115,97,115,115,105,115,116,97,110,116,105
-,110,100,105,99,97,116,101,100,101,118,111,108,117,116,105,111,110,45,119,114,97
-,112,112,101,114,34,101,110,111,117,103,104,32,116,111,97,108,111,110,103,32,116
-,104,101,100,101,108,105,118,101,114,101,100,45,45,62,13,10,60,33,45,45,65,109,
-101,114,105,99,97,110,32,112,114,111,116,101,99,116,101,100,78,111,118,101,109,
-98,101,114,32,60,47,115,116,121,108,101,62,60,102,117,114,110,105,116,117,114,
-101,73,110,116,101,114,110,101,116,32,32,111,110,98,108,117,114,61,34,115,117,
-115,112,101,110,100,101,100,114,101,99,105,112,105,101,110,116,98,97,115,101,100
-,32,111,110,32,77,111,114,101,111,118,101,114,44,97,98,111,108,105,115,104,101,
-100,99,111,108,108,101,99,116,101,100,119,101,114,101,32,109,97,100,101,101,109,
-111,116,105,111,110,97,108,101,109,101,114,103,101,110,99,121,110,97,114,114,97,
-116,105,118,101,97,100,118,111,99,97,116,101,115,112,120,59,98,111,114,100,101,
-114,99,111,109,109,105,116,116,101,100,100,105,114,61,34,108,116,114,34,101,109,
-112,108,111,121,101,101,115,114,101,115,101,97,114,99,104,46,32,115,101,108,101,
-99,116,101,100,115,117,99,99,101,115,115,111,114,99,117,115,116,111,109,101,114,
-115,100,105,115,112,108,97,121,101,100,83,101,112,116,101,109,98,101,114,97,100,
-100,67,108,97,115,115,40,70,97,99,101,98,111,111,107,32,115,117,103,103,101,115,
-116,101,100,97,110,100,32,108,97,116,101,114,111,112,101,114,97,116,105,110,103,
-101,108,97,98,111,114,97,116,101,83,111,109,101,116,105,109,101,115,73,110,115,
-116,105,116,117,116,101,99,101,114,116,97,105,110,108,121,105,110,115,116,97,108
-,108,101,100,102,111,108,108,111,119,101,114,115,74,101,114,117,115,97,108,101,
-109,116,104,101,121,32,104,97,118,101,99,111,109,112,117,116,105,110,103,103,101
-,110,101,114,97,116,101,100,112,114,111,118,105,110,99,101,115,103,117,97,114,97
-,110,116,101,101,97,114,98,105,116,114,97,114,121,114,101,99,111,103,110,105,122
-,101,119,97,110,116,101,100,32,116,111,112,120,59,119,105,100,116,104,58,116,104
-,101,111,114,121,32,111,102,98,101,104,97,118,105,111,117,114,87,104,105,108,101
-,32,116,104,101,101,115,116,105,109,97,116,101,100,98,101,103,97,110,32,116,111,
-32,105,116,32,98,101,99,97,109,101,109,97,103,110,105,116,117,100,101,109,117,
-115,116,32,104,97,118,101,109,111,114,101,32,116,104,97,110,68,105,114,101,99,
-116,111,114,121,101,120,116,101,110,115,105,111,110,115,101,99,114,101,116,97,
-114,121,110,97,116,117,114,97,108,108,121,111,99,99,117,114,114,105,110,103,118,
-97,114,105,97,98,108,101,115,103,105,118,101,110,32,116,104,101,112,108,97,116,
-102,111,114,109,46,60,47,108,97,98,101,108,62,60,102,97,105,108,101,100,32,116,
-111,99,111,109,112,111,117,110,100,115,107,105,110,100,115,32,111,102,32,115,111
-,99,105,101,116,105,101,115,97,108,111,110,103,115,105,100,101,32,45,45,38,103,
-116,59,10,10,115,111,117,116,104,119,101,115,116,116,104,101,32,114,105,103,104,
-116,114,97,100,105,97,116,105,111,110,109,97,121,32,104,97,118,101,32,117,110,
-101,115,99,97,112,101,40,115,112,111,107,101,110,32,105,110,34,32,104,114,101,
-102,61,34,47,112,114,111,103,114,97,109,109,101,111,110,108,121,32,116,104,101,
-32,99,111,109,101,32,102,114,111,109,100,105,114,101,99,116,111,114,121,98,117,
-114,105,101,100,32,105,110,97,32,115,105,109,105,108,97,114,116,104,101,121,32,
-119,101,114,101,60,47,102,111,110,116,62,60,47,78,111,114,119,101,103,105,97,110
-,115,112,101,99,105,102,105,101,100,112,114,111,100,117,99,105,110,103,112,97,
-115,115,101,110,103,101,114,40,110,101,119,32,68,97,116,101,116,101,109,112,111,
-114,97,114,121,102,105,99,116,105,111,110,97,108,65,102,116,101,114,32,116,104,
-101,101,113,117,97,116,105,111,110,115,100,111,119,110,108,111,97,100,46,114,101
-,103,117,108,97,114,108,121,100,101,118,101,108,111,112,101,114,97,98,111,118,
-101,32,116,104,101,108,105,110,107,101,100,32,116,111,112,104,101,110,111,109,
-101,110,97,112,101,114,105,111,100,32,111,102,116,111,111,108,116,105,112,34,62,
-115,117,98,115,116,97,110,99,101,97,117,116,111,109,97,116,105,99,97,115,112,101
-,99,116,32,111,102,65,109,111,110,103,32,116,104,101,99,111,110,110,101,99,116,
-101,100,101,115,116,105,109,97,116,101,115,65,105,114,32,70,111,114,99,101,115,
-121,115,116,101,109,32,111,102,111,98,106,101,99,116,105,118,101,105,109,109,101
-,100,105,97,116,101,109,97,107,105,110,103,32,105,116,112,97,105,110,116,105,110
-,103,115,99,111,110,113,117,101,114,101,100,97,114,101,32,115,116,105,108,108,
-112,114,111,99,101,100,117,114,101,103,114,111,119,116,104,32,111,102,104,101,97
-,100,101,100,32,98,121,69,117,114,111,112,101,97,110,32,100,105,118,105,115,105,
-111,110,115,109,111,108,101,99,117,108,101,115,102,114,97,110,99,104,105,115,101
-,105,110,116,101,110,116,105,111,110,97,116,116,114,97,99,116,101,100,99,104,105
-,108,100,104,111,111,100,97,108,115,111,32,117,115,101,100,100,101,100,105,99,97
-,116,101,100,115,105,110,103,97,112,111,114,101,100,101,103,114,101,101,32,111,
-102,102,97,116,104,101,114,32,111,102,99,111,110,102,108,105,99,116,115,60,47,97
-,62,60,47,112,62,10,99,97,109,101,32,102,114,111,109,119,101,114,101,32,117,115,
-101,100,110,111,116,101,32,116,104,97,116,114,101,99,101,105,118,105,110,103,69,
-120,101,99,117,116,105,118,101,101,118,101,110,32,109,111,114,101,97,99,99,101,
-115,115,32,116,111,99,111,109,109,97,110,100,101,114,80,111,108,105,116,105,99,
-97,108,109,117,115,105,99,105,97,110,115,100,101,108,105,99,105,111,117,115,112,
-114,105,115,111,110,101,114,115,97,100,118,101,110,116,32,111,102,85,84,70,45,56
-,34,32,47,62,60,33,91,67,68,65,84,65,91,34,62,67,111,110,116,97,99,116,83,111,
-117,116,104,101,114,110,32,98,103,99,111,108,111,114,61,34,115,101,114,105,101,
-115,32,111,102,46,32,73,116,32,119,97,115,32,105,110,32,69,117,114,111,112,101,
-112,101,114,109,105,116,116,101,100,118,97,108,105,100,97,116,101,46,97,112,112,
-101,97,114,105,110,103,111,102,102,105,99,105,97,108,115,115,101,114,105,111,117
-,115,108,121,45,108,97,110,103,117,97,103,101,105,110,105,116,105,97,116,101,100
-,101,120,116,101,110,100,105,110,103,108,111,110,103,45,116,101,114,109,105,110,
-102,108,97,116,105,111,110,115,117,99,104,32,116,104,97,116,103,101,116,67,111,
-111,107,105,101,109,97,114,107,101,100,32,98,121,60,47,98,117,116,116,111,110,62
-,105,109,112,108,101,109,101,110,116,98,117,116,32,105,116,32,105,115,105,110,99
-,114,101,97,115,101,115,100,111,119,110,32,116,104,101,32,114,101,113,117,105,
-114,105,110,103,100,101,112,101,110,100,101,110,116,45,45,62,10,60,33,45,45,32,
-105,110,116,101,114,118,105,101,119,87,105,116,104,32,116,104,101,32,99,111,112,
-105,101,115,32,111,102,99,111,110,115,101,110,115,117,115,119,97,115,32,98,117,
-105,108,116,86,101,110,101,122,117,101,108,97,40,102,111,114,109,101,114,108,121
-,116,104,101,32,115,116,97,116,101,112,101,114,115,111,110,110,101,108,115,116,
-114,97,116,101,103,105,99,102,97,118,111,117,114,32,111,102,105,110,118,101,110,
-116,105,111,110,87,105,107,105,112,101,100,105,97,99,111,110,116,105,110,101,110
-,116,118,105,114,116,117,97,108,108,121,119,104,105,99,104,32,119,97,115,112,114
-,105,110,99,105,112,108,101,67,111,109,112,108,101,116,101,32,105,100,101,110,
-116,105,99,97,108,115,104,111,119,32,116,104,97,116,112,114,105,109,105,116,105,
-118,101,97,119,97,121,32,102,114,111,109,109,111,108,101,99,117,108,97,114,112,
-114,101,99,105,115,101,108,121,100,105,115,115,111,108,118,101,100,85,110,100,
-101,114,32,116,104,101,118,101,114,115,105,111,110,61,34,62,38,110,98,115,112,59
-,60,47,73,116,32,105,115,32,116,104,101,32,84,104,105,115,32,105,115,32,119,105,
-108,108,32,104,97,118,101,111,114,103,97,110,105,115,109,115,115,111,109,101,32,
-116,105,109,101,70,114,105,101,100,114,105,99,104,119,97,115,32,102,105,114,115,
-116,116,104,101,32,111,110,108,121,32,102,97,99,116,32,116,104,97,116,102,111,
-114,109,32,105,100,61,34,112,114,101,99,101,100,105,110,103,84,101,99,104,110,
-105,99,97,108,112,104,121,115,105,99,105,115,116,111,99,99,117,114,115,32,105,
-110,110,97,118,105,103,97,116,111,114,115,101,99,116,105,111,110,34,62,115,112,
-97,110,32,105,100,61,34,115,111,117,103,104,116,32,116,111,98,101,108,111,119,32
-,116,104,101,115,117,114,118,105,118,105,110,103,125,60,47,115,116,121,108,101,
-62,104,105,115,32,100,101,97,116,104,97,115,32,105,110,32,116,104,101,99,97,117,
-115,101,100,32,98,121,112,97,114,116,105,97,108,108,121,101,120,105,115,116,105,
-110,103,32,117,115,105,110,103,32,116,104,101,119,97,115,32,103,105,118,101,110,
-97,32,108,105,115,116,32,111,102,108,101,118,101,108,115,32,111,102,110,111,116,
-105,111,110,32,111,102,79,102,102,105,99,105,97,108,32,100,105,115,109,105,115,
-115,101,100,115,99,105,101,110,116,105,115,116,114,101,115,101,109,98,108,101,
-115,100,117,112,108,105,99,97,116,101,101,120,112,108,111,115,105,118,101,114,
-101,99,111,118,101,114,101,100,97,108,108,32,111,116,104,101,114,103,97,108,108,
-101,114,105,101,115,123,112,97,100,100,105,110,103,58,112,101,111,112,108,101,32
-,111,102,114,101,103,105,111,110,32,111,102,97,100,100,114,101,115,115,101,115,
-97,115,115,111,99,105,97,116,101,105,109,103,32,97,108,116,61,34,105,110,32,109,
-111,100,101,114,110,115,104,111,117,108,100,32,98,101,109,101,116,104,111,100,32
-,111,102,114,101,112,111,114,116,105,110,103,116,105,109,101,115,116,97,109,112,
-110,101,101,100,101,100,32,116,111,116,104,101,32,71,114,101,97,116,114,101,103,
-97,114,100,105,110,103,115,101,101,109,101,100,32,116,111,118,105,101,119,101,
-100,32,97,115,105,109,112,97,99,116,32,111,110,105,100,101,97,32,116,104,97,116,
-116,104,101,32,87,111,114,108,100,104,101,105,103,104,116,32,111,102,101,120,112
-,97,110,100,105,110,103,84,104,101,115,101,32,97,114,101,99,117,114,114,101,110,
-116,34,62,99,97,114,101,102,117,108,108,121,109,97,105,110,116,97,105,110,115,99
-,104,97,114,103,101,32,111,102,67,108,97,115,115,105,99,97,108,97,100,100,114,
-101,115,115,101,100,112,114,101,100,105,99,116,101,100,111,119,110,101,114,115,
-104,105,112,60,100,105,118,32,105,100,61,34,114,105,103,104,116,34,62,13,10,114,
-101,115,105,100,101,110,99,101,108,101,97,118,101,32,116,104,101,99,111,110,116,
-101,110,116,34,62,97,114,101,32,111,102,116,101,110,32,32,125,41,40,41,59,13,10,
-112,114,111,98,97,98,108,121,32,80,114,111,102,101,115,115,111,114,45,98,117,116
-,116,111,110,34,32,114,101,115,112,111,110,100,101,100,115,97,121,115,32,116,104
-,97,116,104,97,100,32,116,111,32,98,101,112,108,97,99,101,100,32,105,110,72,117,
-110,103,97,114,105,97,110,115,116,97,116,117,115,32,111,102,115,101,114,118,101,
-115,32,97,115,85,110,105,118,101,114,115,97,108,101,120,101,99,117,116,105,111,
-110,97,103,103,114,101,103,97,116,101,102,111,114,32,119,104,105,99,104,105,110,
-102,101,99,116,105,111,110,97,103,114,101,101,100,32,116,111,104,111,119,101,118
-,101,114,44,32,112,111,112,117,108,97,114,34,62,112,108,97,99,101,100,32,111,110
-,99,111,110,115,116,114,117,99,116,101,108,101,99,116,111,114,97,108,115,121,109
-,98,111,108,32,111,102,105,110,99,108,117,100,105,110,103,114,101,116,117,114,
-110,32,116,111,97,114,99,104,105,116,101,99,116,67,104,114,105,115,116,105,97,
-110,112,114,101,118,105,111,117,115,32,108,105,118,105,110,103,32,105,110,101,97
-,115,105,101,114,32,116,111,112,114,111,102,101,115,115,111,114,10,38,108,116,59
-,33,45,45,32,101,102,102,101,99,116,32,111,102,97,110,97,108,121,116,105,99,115,
-119,97,115,32,116,97,107,101,110,119,104,101,114,101,32,116,104,101,116,111,111,
-107,32,111,118,101,114,98,101,108,105,101,102,32,105,110,65,102,114,105,107,97,
-97,110,115,97,115,32,102,97,114,32,97,115,112,114,101,118,101,110,116,101,100,
-119,111,114,107,32,119,105,116,104,97,32,115,112,101,99,105,97,108,60,102,105,
-101,108,100,115,101,116,67,104,114,105,115,116,109,97,115,82,101,116,114,105,101
-,118,101,100,10,10,73,110,32,116,104,101,32,98,97,99,107,32,105,110,116,111,110,
-111,114,116,104,101,97,115,116,109,97,103,97,122,105,110,101,115,62,60,115,116,
-114,111,110,103,62,99,111,109,109,105,116,116,101,101,103,111,118,101,114,110,
-105,110,103,103,114,111,117,112,115,32,111,102,115,116,111,114,101,100,32,105,
-110,101,115,116,97,98,108,105,115,104,97,32,103,101,110,101,114,97,108,105,116,
-115,32,102,105,114,115,116,116,104,101,105,114,32,111,119,110,112,111,112,117,
-108,97,116,101,100,97,110,32,111,98,106,101,99,116,67,97,114,105,98,98,101,97,
-110,97,108,108,111,119,32,116,104,101,100,105,115,116,114,105,99,116,115,119,105
-,115,99,111,110,115,105,110,108,111,99,97,116,105,111,110,46,59,32,119,105,100,
-116,104,58,32,105,110,104,97,98,105,116,101,100,83,111,99,105,97,108,105,115,116
-,74,97,110,117,97,114,121,32,49,60,47,102,111,111,116,101,114,62,115,105,109,105
-,108,97,114,108,121,99,104,111,105,99,101,32,111,102,116,104,101,32,115,97,109,
-101,32,115,112,101,99,105,102,105,99,32,98,117,115,105,110,101,115,115,32,84,104
-,101,32,102,105,114,115,116,46,108,101,110,103,116,104,59,32,100,101,115,105,114
-,101,32,116,111,100,101,97,108,32,119,105,116,104,115,105,110,99,101,32,116,104,
-101,117,115,101,114,65,103,101,110,116,99,111,110,99,101,105,118,101,100,105,110
-,100,101,120,46,112,104,112,97,115,32,38,113,117,111,116,59,101,110,103,97,103,
-101,32,105,110,114,101,99,101,110,116,108,121,44,102,101,119,32,121,101,97,114,
-115,119,101,114,101,32,97,108,115,111,10,60,104,101,97,100,62,10,60,101,100,105,
-116,101,100,32,98,121,97,114,101,32,107,110,111,119,110,99,105,116,105,101,115,
-32,105,110,97,99,99,101,115,115,107,101,121,99,111,110,100,101,109,110,101,100,
-97,108,115,111,32,104,97,118,101,115,101,114,118,105,99,101,115,44,102,97,109,
-105,108,121,32,111,102,83,99,104,111,111,108,32,111,102,99,111,110,118,101,114,
-116,101,100,110,97,116,117,114,101,32,111,102,32,108,97,110,103,117,97,103,101,
-109,105,110,105,115,116,101,114,115,60,47,111,98,106,101,99,116,62,116,104,101,
-114,101,32,105,115,32,97,32,112,111,112,117,108,97,114,115,101,113,117,101,110,
-99,101,115,97,100,118,111,99,97,116,101,100,84,104,101,121,32,119,101,114,101,97
-,110,121,32,111,116,104,101,114,108,111,99,97,116,105,111,110,61,101,110,116,101
-,114,32,116,104,101,109,117,99,104,32,109,111,114,101,114,101,102,108,101,99,116
-,101,100,119,97,115,32,110,97,109,101,100,111,114,105,103,105,110,97,108,32,97,
-32,116,121,112,105,99,97,108,119,104,101,110,32,116,104,101,121,101,110,103,105,
-110,101,101,114,115,99,111,117,108,100,32,110,111,116,114,101,115,105,100,101,
-110,116,115,119,101,100,110,101,115,100,97,121,116,104,101,32,116,104,105,114,
-100,32,112,114,111,100,117,99,116,115,74,97,110,117,97,114,121,32,50,119,104,97,
-116,32,116,104,101,121,97,32,99,101,114,116,97,105,110,114,101,97,99,116,105,111
-,110,115,112,114,111,99,101,115,115,111,114,97,102,116,101,114,32,104,105,115,
-116,104,101,32,108,97,115,116,32,99,111,110,116,97,105,110,101,100,34,62,60,47,
-100,105,118,62,10,60,47,97,62,60,47,116,100,62,100,101,112,101,110,100,32,111,
-110,115,101,97,114,99,104,34,62,10,112,105,101,99,101,115,32,111,102,99,111,109,
-112,101,116,105,110,103,82,101,102,101,114,101,110,99,101,116,101,110,110,101,
-115,115,101,101,119,104,105,99,104,32,104,97,115,32,118,101,114,115,105,111,110,
-61,60,47,115,112,97,110,62,32,60,60,47,104,101,97,100,101,114,62,103,105,118,101
-,115,32,116,104,101,104,105,115,116,111,114,105,97,110,118,97,108,117,101,61,34,
-34,62,112,97,100,100,105,110,103,58,48,118,105,101,119,32,116,104,97,116,116,111
-,103,101,116,104,101,114,44,116,104,101,32,109,111,115,116,32,119,97,115,32,102,
-111,117,110,100,115,117,98,115,101,116,32,111,102,97,116,116,97,99,107,32,111,
-110,99,104,105,108,100,114,101,110,44,112,111,105,110,116,115,32,111,102,112,101
-,114,115,111,110,97,108,32,112,111,115,105,116,105,111,110,58,97,108,108,101,103
-,101,100,108,121,67,108,101,118,101,108,97,110,100,119,97,115,32,108,97,116,101,
-114,97,110,100,32,97,102,116,101,114,97,114,101,32,103,105,118,101,110,119,97,
-115,32,115,116,105,108,108,115,99,114,111,108,108,105,110,103,100,101,115,105,
-103,110,32,111,102,109,97,107,101,115,32,116,104,101,109,117,99,104,32,108,101,
-115,115,65,109,101,114,105,99,97,110,115,46,10,10,65,102,116,101,114,32,44,32,98
-,117,116,32,116,104,101,77,117,115,101,117,109,32,111,102,108,111,117,105,115,
-105,97,110,97,40,102,114,111,109,32,116,104,101,109,105,110,110,101,115,111,116,
-97,112,97,114,116,105,99,108,101,115,97,32,112,114,111,99,101,115,115,68,111,109
-,105,110,105,99,97,110,118,111,108,117,109,101,32,111,102,114,101,116,117,114,
-110,105,110,103,100,101,102,101,110,115,105,118,101,48,48,112,120,124,114,105,
-103,104,109,97,100,101,32,102,114,111,109,109,111,117,115,101,111,118,101,114,34
-,32,115,116,121,108,101,61,34,115,116,97,116,101,115,32,111,102,40,119,104,105,
-99,104,32,105,115,99,111,110,116,105,110,117,101,115,70,114,97,110,99,105,115,99
-,111,98,117,105,108,100,105,110,103,32,119,105,116,104,111,117,116,32,97,119,105
-,116,104,32,115,111,109,101,119,104,111,32,119,111,117,108,100,97,32,102,111,114
-,109,32,111,102,97,32,112,97,114,116,32,111,102,98,101,102,111,114,101,32,105,
-116,107,110,111,119,110,32,97,115,32,32,83,101,114,118,105,99,101,115,108,111,99
-,97,116,105,111,110,32,97,110,100,32,111,102,116,101,110,109,101,97,115,117,114,
-105,110,103,97,110,100,32,105,116,32,105,115,112,97,112,101,114,98,97,99,107,118
-,97,108,117,101,115,32,111,102,13,10,60,116,105,116,108,101,62,61,32,119,105,110
-,100,111,119,46,100,101,116,101,114,109,105,110,101,101,114,38,113,117,111,116,
-59,32,112,108,97,121,101,100,32,98,121,97,110,100,32,101,97,114,108,121,60,47,99
-,101,110,116,101,114,62,102,114,111,109,32,116,104,105,115,116,104,101,32,116,
-104,114,101,101,112,111,119,101,114,32,97,110,100,111,102,32,38,113,117,111,116,
-59,105,110,110,101,114,72,84,77,76,60,97,32,104,114,101,102,61,34,121,58,105,110
-,108,105,110,101,59,67,104,117,114,99,104,32,111,102,116,104,101,32,101,118,101,
-110,116,118,101,114,121,32,104,105,103,104,111,102,102,105,99,105,97,108,32,45,
-104,101,105,103,104,116,58,32,99,111,110,116,101,110,116,61,34,47,99,103,105,45,
-98,105,110,47,116,111,32,99,114,101,97,116,101,97,102,114,105,107,97,97,110,115,
-101,115,112,101,114,97,110,116,111,102,114,97,110,195,167,97,105,115,108,97,116,
-118,105,101,197,161,117,108,105,101,116,117,118,105,197,179,196,140,101,197,161,
-116,105,110,97,196,141,101,197,161,116,105,110,97,224,185,132,224,184,151,224,
-184,162,230,151,165,230,156,172,232,170,158,231,174,128,228,189,147,229,173,151,
-231,185,129,233,171,148,229,173,151,237,149,156,234,181,173,236,150,180,228,184,
-186,228,187,128,228,185,136,232,174,161,231,174,151,230,156,186,231,172,148,232,
-174,176,230,156,172,232,168,142,232,171,150,229,141,128,230,156,141,229,138,161,
-229,153,168,228,186,146,232,129,148,231,189,145,230,136,191,229,156,176,228,186,
-167,228,191,177,228,185,144,233,131,168,229,135,186,231,137,136,231,164,190,230,
-142,146,232,161,140,230,166,156,233,131,168,232,144,189,230,160,188,232,191,155,
-228,184,128,230,173,165,230,148,175,228,187,152,229,174,157,233,170,140,232,175,
-129,231,160,129,229,167,148,229,145,152,228,188,154,230,149,176,230,141,174,229,
-186,147,230,182,136,232,180,185,232,128,133,229,138,158,229,133,172,229,174,164,
-232,174,168,232,174,186,229,140,186,230,183,177,229,156,179,229,184,130,230,146,
-173,230,148,190,229,153,168,229,140,151,228,186,172,229,184,130,229,164,167,229,
-173,166,231,148,159,232,182,138,230,157,165,232,182,138,231,174,161,231,144,134,
-229,145,152,228,191,161,230,129,175,231,189,145,115,101,114,118,105,99,105,111,
-115,97,114,116,195,173,99,117,108,111,97,114,103,101,110,116,105,110,97,98,97,
-114,99,101,108,111,110,97,99,117,97,108,113,117,105,101,114,112,117,98,108,105,
-99,97,100,111,112,114,111,100,117,99,116,111,115,112,111,108,195,173,116,105,99,
-97,114,101,115,112,117,101,115,116,97,119,105,107,105,112,101,100,105,97,115,105
-,103,117,105,101,110,116,101,98,195,186,115,113,117,101,100,97,99,111,109,117,
-110,105,100,97,100,115,101,103,117,114,105,100,97,100,112,114,105,110,99,105,112
-,97,108,112,114,101,103,117,110,116,97,115,99,111,110,116,101,110,105,100,111,
-114,101,115,112,111,110,100,101,114,118,101,110,101,122,117,101,108,97,112,114,
-111,98,108,101,109,97,115,100,105,99,105,101,109,98,114,101,114,101,108,97,99,
-105,195,179,110,110,111,118,105,101,109,98,114,101,115,105,109,105,108,97,114,
-101,115,112,114,111,121,101,99,116,111,115,112,114,111,103,114,97,109,97,115,105
-,110,115,116,105,116,117,116,111,97,99,116,105,118,105,100,97,100,101,110,99,117
-,101,110,116,114,97,101,99,111,110,111,109,195,173,97,105,109,195,161,103,101,
-110,101,115,99,111,110,116,97,99,116,97,114,100,101,115,99,97,114,103,97,114,110
-,101,99,101,115,97,114,105,111,97,116,101,110,99,105,195,179,110,116,101,108,195
-,169,102,111,110,111,99,111,109,105,115,105,195,179,110,99,97,110,99,105,111,110
-,101,115,99,97,112,97,99,105,100,97,100,101,110,99,111,110,116,114,97,114,97,110
-,195,161,108,105,115,105,115,102,97,118,111,114,105,116,111,115,116,195,169,114,
-109,105,110,111,115,112,114,111,118,105,110,99,105,97,101,116,105,113,117,101,
-116,97,115,101,108,101,109,101,110,116,111,115,102,117,110,99,105,111,110,101,
-115,114,101,115,117,108,116,97,100,111,99,97,114,195,161,99,116,101,114,112,114,
-111,112,105,101,100,97,100,112,114,105,110,99,105,112,105,111,110,101,99,101,115
-,105,100,97,100,109,117,110,105,99,105,112,97,108,99,114,101,97,99,105,195,179,
-110,100,101,115,99,97,114,103,97,115,112,114,101,115,101,110,99,105,97,99,111,
-109,101,114,99,105,97,108,111,112,105,110,105,111,110,101,115,101,106,101,114,99
-,105,99,105,111,101,100,105,116,111,114,105,97,108,115,97,108,97,109,97,110,99,
-97,103,111,110,122,195,161,108,101,122,100,111,99,117,109,101,110,116,111,112,
-101,108,195,173,99,117,108,97,114,101,99,105,101,110,116,101,115,103,101,110,101
-,114,97,108,101,115,116,97,114,114,97,103,111,110,97,112,114,195,161,99,116,105,
-99,97,110,111,118,101,100,97,100,101,115,112,114,111,112,117,101,115,116,97,112,
-97,99,105,101,110,116,101,115,116,195,169,99,110,105,99,97,115,111,98,106,101,
-116,105,118,111,115,99,111,110,116,97,99,116,111,115,224,164,174,224,165,135,224
-,164,130,224,164,178,224,164,191,224,164,143,224,164,185,224,165,136,224,164,130
-,224,164,151,224,164,175,224,164,190,224,164,184,224,164,190,224,164,165,224,164
-,143,224,164,181,224,164,130,224,164,176,224,164,185,224,165,135,224,164,149,224
-,165,139,224,164,136,224,164,149,224,165,129,224,164,155,224,164,176,224,164,185
-,224,164,190,224,164,172,224,164,190,224,164,166,224,164,149,224,164,185,224,164
-,190,224,164,184,224,164,173,224,165,128,224,164,185,224,165,129,224,164,143,224
-,164,176,224,164,185,224,165,128,224,164,174,224,165,136,224,164,130,224,164,166
-,224,164,191,224,164,168,224,164,172,224,164,190,224,164,164,100,105,112,108,111
-,100,111,99,115,224,164,184,224,164,174,224,164,175,224,164,176,224,165,130,224,
-164,170,224,164,168,224,164,190,224,164,174,224,164,170,224,164,164,224,164,190,
-224,164,171,224,164,191,224,164,176,224,164,148,224,164,184,224,164,164,224,164,
-164,224,164,176,224,164,185,224,164,178,224,165,139,224,164,151,224,164,185,224,
-165,129,224,164,134,224,164,172,224,164,190,224,164,176,224,164,166,224,165,135,
-224,164,182,224,164,185,224,165,129,224,164,136,224,164,150,224,165,135,224,164,
-178,224,164,175,224,164,166,224,164,191,224,164,149,224,164,190,224,164,174,224,
-164,181,224,165,135,224,164,172,224,164,164,224,165,128,224,164,168,224,164,172,
-224,165,128,224,164,154,224,164,174,224,165,140,224,164,164,224,164,184,224,164,
-190,224,164,178,224,164,178,224,165,135,224,164,150,224,164,156,224,165,137,224,
-164,172,224,164,174,224,164,166,224,164,166,224,164,164,224,164,165,224,164,190,
-224,164,168,224,164,185,224,165,128,224,164,182,224,164,185,224,164,176,224,164,
-133,224,164,178,224,164,151,224,164,149,224,164,173,224,165,128,224,164,168,224,
-164,151,224,164,176,224,164,170,224,164,190,224,164,184,224,164,176,224,164,190,
-224,164,164,224,164,149,224,164,191,224,164,143,224,164,137,224,164,184,224,165,
-135,224,164,151,224,164,175,224,165,128,224,164,185,224,165,130,224,164,129,224,
-164,134,224,164,151,224,165,135,224,164,159,224,165,128,224,164,174,224,164,150,
-224,165,139,224,164,156,224,164,149,224,164,190,224,164,176,224,164,133,224,164,
-173,224,165,128,224,164,151,224,164,175,224,165,135,224,164,164,224,165,129,224,
-164,174,224,164,181,224,165,139,224,164,159,224,164,166,224,165,135,224,164,130,
-224,164,133,224,164,151,224,164,176,224,164,144,224,164,184,224,165,135,224,164,
-174,224,165,135,224,164,178,224,164,178,224,164,151,224,164,190,224,164,185,224,
-164,190,224,164,178,224,164,138,224,164,170,224,164,176,224,164,154,224,164,190,
-224,164,176,224,164,144,224,164,184,224,164,190,224,164,166,224,165,135,224,164,
-176,224,164,156,224,164,191,224,164,184,224,164,166,224,164,191,224,164,178,224,
-164,172,224,164,130,224,164,166,224,164,172,224,164,168,224,164,190,224,164,185,
-224,165,130,224,164,130,224,164,178,224,164,190,224,164,150,224,164,156,224,165,
-128,224,164,164,224,164,172,224,164,159,224,164,168,224,164,174,224,164,191,224,
-164,178,224,164,135,224,164,184,224,165,135,224,164,134,224,164,168,224,165,135,
-224,164,168,224,164,175,224,164,190,224,164,149,224,165,129,224,164,178,224,164,
-178,224,165,137,224,164,151,224,164,173,224,164,190,224,164,151,224,164,176,224,
-165,135,224,164,178,224,164,156,224,164,151,224,164,185,224,164,176,224,164,190,
-224,164,174,224,164,178,224,164,151,224,165,135,224,164,170,224,165,135,224,164,
-156,224,164,185,224,164,190,224,164,165,224,164,135,224,164,184,224,165,128,224,
-164,184,224,164,185,224,165,128,224,164,149,224,164,178,224,164,190,224,164,160,
-224,165,128,224,164,149,224,164,185,224,164,190,224,164,129,224,164,166,224,165,
-130,224,164,176,224,164,164,224,164,185,224,164,164,224,164,184,224,164,190,224,
-164,164,224,164,175,224,164,190,224,164,166,224,164,134,224,164,175,224,164,190,
-224,164,170,224,164,190,224,164,149,224,164,149,224,165,140,224,164,168,224,164,
-182,224,164,190,224,164,174,224,164,166,224,165,135,224,164,150,224,164,175,224,
-164,185,224,165,128,224,164,176,224,164,190,224,164,175,224,164,150,224,165,129,
-224,164,166,224,164,178,224,164,151,224,165,128,99,97,116,101,103,111,114,105,
-101,115,101,120,112,101,114,105,101,110,99,101,60,47,116,105,116,108,101,62,13,
-10,67,111,112,121,114,105,103,104,116,32,106,97,118,97,115,99,114,105,112,116,99
-,111,110,100,105,116,105,111,110,115,101,118,101,114,121,116,104,105,110,103,60,
-112,32,99,108,97,115,115,61,34,116,101,99,104,110,111,108,111,103,121,98,97,99,
-107,103,114,111,117,110,100,60,97,32,99,108,97,115,115,61,34,109,97,110,97,103,
-101,109,101,110,116,38,99,111,112,121,59,32,50,48,49,106,97,118,97,83,99,114,105
-,112,116,99,104,97,114,97,99,116,101,114,115,98,114,101,97,100,99,114,117,109,98
-,116,104,101,109,115,101,108,118,101,115,104,111,114,105,122,111,110,116,97,108,
-103,111,118,101,114,110,109,101,110,116,67,97,108,105,102,111,114,110,105,97,97,
-99,116,105,118,105,116,105,101,115,100,105,115,99,111,118,101,114,101,100,78,97,
-118,105,103,97,116,105,111,110,116,114,97,110,115,105,116,105,111,110,99,111,110
-,110,101,99,116,105,111,110,110,97,118,105,103,97,116,105,111,110,97,112,112,101
-,97,114,97,110,99,101,60,47,116,105,116,108,101,62,60,109,99,104,101,99,107,98,
-111,120,34,32,116,101,99,104,110,105,113,117,101,115,112,114,111,116,101,99,116,
-105,111,110,97,112,112,97,114,101,110,116,108,121,97,115,32,119,101,108,108,32,
-97,115,117,110,116,39,44,32,39,85,65,45,114,101,115,111,108,117,116,105,111,110,
-111,112,101,114,97,116,105,111,110,115,116,101,108,101,118,105,115,105,111,110,
-116,114,97,110,115,108,97,116,101,100,87,97,115,104,105,110,103,116,111,110,110,
-97,118,105,103,97,116,111,114,46,32,61,32,119,105,110,100,111,119,46,105,109,112
-,114,101,115,115,105,111,110,38,108,116,59,98,114,38,103,116,59,108,105,116,101,
-114,97,116,117,114,101,112,111,112,117,108,97,116,105,111,110,98,103,99,111,108,
-111,114,61,34,35,101,115,112,101,99,105,97,108,108,121,32,99,111,110,116,101,110
-,116,61,34,112,114,111,100,117,99,116,105,111,110,110,101,119,115,108,101,116,
-116,101,114,112,114,111,112,101,114,116,105,101,115,100,101,102,105,110,105,116,
-105,111,110,108,101,97,100,101,114,115,104,105,112,84,101,99,104,110,111,108,111
-,103,121,80,97,114,108,105,97,109,101,110,116,99,111,109,112,97,114,105,115,111,
-110,117,108,32,99,108,97,115,115,61,34,46,105,110,100,101,120,79,102,40,34,99,
-111,110,99,108,117,115,105,111,110,100,105,115,99,117,115,115,105,111,110,99,111
-,109,112,111,110,101,110,116,115,98,105,111,108,111,103,105,99,97,108,82,101,118
-,111,108,117,116,105,111,110,95,99,111,110,116,97,105,110,101,114,117,110,100,
-101,114,115,116,111,111,100,110,111,115,99,114,105,112,116,62,60,112,101,114,109
-,105,115,115,105,111,110,101,97,99,104,32,111,116,104,101,114,97,116,109,111,115
-,112,104,101,114,101,32,111,110,102,111,99,117,115,61,34,60,102,111,114,109,32,
-105,100,61,34,112,114,111,99,101,115,115,105,110,103,116,104,105,115,46,118,97,
-108,117,101,103,101,110,101,114,97,116,105,111,110,67,111,110,102,101,114,101,
-110,99,101,115,117,98,115,101,113,117,101,110,116,119,101,108,108,45,107,110,111
-,119,110,118,97,114,105,97,116,105,111,110,115,114,101,112,117,116,97,116,105,
-111,110,112,104,101,110,111,109,101,110,111,110,100,105,115,99,105,112,108,105,
-110,101,108,111,103,111,46,112,110,103,34,32,40,100,111,99,117,109,101,110,116,
-44,98,111,117,110,100,97,114,105,101,115,101,120,112,114,101,115,115,105,111,110
-,115,101,116,116,108,101,109,101,110,116,66,97,99,107,103,114,111,117,110,100,
-111,117,116,32,111,102,32,116,104,101,101,110,116,101,114,112,114,105,115,101,40
-,34,104,116,116,112,115,58,34,32,117,110,101,115,99,97,112,101,40,34,112,97,115,
-115,119,111,114,100,34,32,100,101,109,111,99,114,97,116,105,99,60,97,32,104,114,
-101,102,61,34,47,119,114,97,112,112,101,114,34,62,10,109,101,109,98,101,114,115,
-104,105,112,108,105,110,103,117,105,115,116,105,99,112,120,59,112,97,100,100,105
-,110,103,112,104,105,108,111,115,111,112,104,121,97,115,115,105,115,116,97,110,
-99,101,117,110,105,118,101,114,115,105,116,121,102,97,99,105,108,105,116,105,101
-,115,114,101,99,111,103,110,105,122,101,100,112,114,101,102,101,114,101,110,99,
-101,105,102,32,40,116,121,112,101,111,102,109,97,105,110,116,97,105,110,101,100,
-118,111,99,97,98,117,108,97,114,121,104,121,112,111,116,104,101,115,105,115,46,
-115,117,98,109,105,116,40,41,59,38,97,109,112,59,110,98,115,112,59,97,110,110,
-111,116,97,116,105,111,110,98,101,104,105,110,100,32,116,104,101,70,111,117,110,
-100,97,116,105,111,110,112,117,98,108,105,115,104,101,114,34,97,115,115,117,109,
-112,116,105,111,110,105,110,116,114,111,100,117,99,101,100,99,111,114,114,117,
-112,116,105,111,110,115,99,105,101,110,116,105,115,116,115,101,120,112,108,105,
-99,105,116,108,121,105,110,115,116,101,97,100,32,111,102,100,105,109,101,110,115
-,105,111,110,115,32,111,110,67,108,105,99,107,61,34,99,111,110,115,105,100,101,
-114,101,100,100,101,112,97,114,116,109,101,110,116,111,99,99,117,112,97,116,105,
-111,110,115,111,111,110,32,97,102,116,101,114,105,110,118,101,115,116,109,101,
-110,116,112,114,111,110,111,117,110,99,101,100,105,100,101,110,116,105,102,105,
-101,100,101,120,112,101,114,105,109,101,110,116,77,97,110,97,103,101,109,101,110
-,116,103,101,111,103,114,97,112,104,105,99,34,32,104,101,105,103,104,116,61,34,
-108,105,110,107,32,114,101,108,61,34,46,114,101,112,108,97,99,101,40,47,100,101,
-112,114,101,115,115,105,111,110,99,111,110,102,101,114,101,110,99,101,112,117,
-110,105,115,104,109,101,110,116,101,108,105,109,105,110,97,116,101,100,114,101,
-115,105,115,116,97,110,99,101,97,100,97,112,116,97,116,105,111,110,111,112,112,
-111,115,105,116,105,111,110,119,101,108,108,32,107,110,111,119,110,115,117,112,
-112,108,101,109,101,110,116,100,101,116,101,114,109,105,110,101,100,104,49,32,99
-,108,97,115,115,61,34,48,112,120,59,109,97,114,103,105,110,109,101,99,104,97,110
-,105,99,97,108,115,116,97,116,105,115,116,105,99,115,99,101,108,101,98,114,97,
-116,101,100,71,111,118,101,114,110,109,101,110,116,10,10,68,117,114,105,110,103,
-32,116,100,101,118,101,108,111,112,101,114,115,97,114,116,105,102,105,99,105,97,
-108,101,113,117,105,118,97,108,101,110,116,111,114,105,103,105,110,97,116,101,
-100,67,111,109,109,105,115,115,105,111,110,97,116,116,97,99,104,109,101,110,116,
-60,115,112,97,110,32,105,100,61,34,116,104,101,114,101,32,119,101,114,101,78,101
-,100,101,114,108,97,110,100,115,98,101,121,111,110,100,32,116,104,101,114,101,
-103,105,115,116,101,114,101,100,106,111,117,114,110,97,108,105,115,116,102,114,
-101,113,117,101,110,116,108,121,97,108,108,32,111,102,32,116,104,101,108,97,110,
-103,61,34,101,110,34,32,60,47,115,116,121,108,101,62,13,10,97,98,115,111,108,117
-,116,101,59,32,115,117,112,112,111,114,116,105,110,103,101,120,116,114,101,109,
-101,108,121,32,109,97,105,110,115,116,114,101,97,109,60,47,115,116,114,111,110,
-103,62,32,112,111,112,117,108,97,114,105,116,121,101,109,112,108,111,121,109,101
-,110,116,60,47,116,97,98,108,101,62,13,10,32,99,111,108,115,112,97,110,61,34,60,
-47,102,111,114,109,62,10,32,32,99,111,110,118,101,114,115,105,111,110,97,98,111,
-117,116,32,116,104,101,32,60,47,112,62,60,47,100,105,118,62,105,110,116,101,103,
-114,97,116,101,100,34,32,108,97,110,103,61,34,101,110,80,111,114,116,117,103,117
-,101,115,101,115,117,98,115,116,105,116,117,116,101,105,110,100,105,118,105,100,
-117,97,108,105,109,112,111,115,115,105,98,108,101,109,117,108,116,105,109,101,
-100,105,97,97,108,109,111,115,116,32,97,108,108,112,120,32,115,111,108,105,100,
-32,35,97,112,97,114,116,32,102,114,111,109,115,117,98,106,101,99,116,32,116,111,
-105,110,32,69,110,103,108,105,115,104,99,114,105,116,105,99,105,122,101,100,101,
-120,99,101,112,116,32,102,111,114,103,117,105,100,101,108,105,110,101,115,111,
-114,105,103,105,110,97,108,108,121,114,101,109,97,114,107,97,98,108,101,116,104,
-101,32,115,101,99,111,110,100,104,50,32,99,108,97,115,115,61,34,60,97,32,116,105
-,116,108,101,61,34,40,105,110,99,108,117,100,105,110,103,112,97,114,97,109,101,
-116,101,114,115,112,114,111,104,105,98,105,116,101,100,61,32,34,104,116,116,112,
-58,47,47,100,105,99,116,105,111,110,97,114,121,112,101,114,99,101,112,116,105,
-111,110,114,101,118,111,108,117,116,105,111,110,102,111,117,110,100,97,116,105,
-111,110,112,120,59,104,101,105,103,104,116,58,115,117,99,99,101,115,115,102,117,
-108,115,117,112,112,111,114,116,101,114,115,109,105,108,108,101,110,110,105,117,
-109,104,105,115,32,102,97,116,104,101,114,116,104,101,32,38,113,117,111,116,59,
-110,111,45,114,101,112,101,97,116,59,99,111,109,109,101,114,99,105,97,108,105,
-110,100,117,115,116,114,105,97,108,101,110,99,111,117,114,97,103,101,100,97,109,
-111,117,110,116,32,111,102,32,117,110,111,102,102,105,99,105,97,108,101,102,102,
-105,99,105,101,110,99,121,82,101,102,101,114,101,110,99,101,115,99,111,111,114,
-100,105,110,97,116,101,100,105,115,99,108,97,105,109,101,114,101,120,112,101,100
-,105,116,105,111,110,100,101,118,101,108,111,112,105,110,103,99,97,108,99,117,
-108,97,116,101,100,115,105,109,112,108,105,102,105,101,100,108,101,103,105,116,
-105,109,97,116,101,115,117,98,115,116,114,105,110,103,40,48,34,32,99,108,97,115,
-115,61,34,99,111,109,112,108,101,116,101,108,121,105,108,108,117,115,116,114,97,
-116,101,102,105,118,101,32,121,101,97,114,115,105,110,115,116,114,117,109,101,
-110,116,80,117,98,108,105,115,104,105,110,103,49,34,32,99,108,97,115,115,61,34,
-112,115,121,99,104,111,108,111,103,121,99,111,110,102,105,100,101,110,99,101,110
-,117,109,98,101,114,32,111,102,32,97,98,115,101,110,99,101,32,111,102,102,111,99
-,117,115,101,100,32,111,110,106,111,105,110,101,100,32,116,104,101,115,116,114,
-117,99,116,117,114,101,115,112,114,101,118,105,111,117,115,108,121,62,60,47,105,
-102,114,97,109,101,62,111,110,99,101,32,97,103,97,105,110,98,117,116,32,114,97,
-116,104,101,114,105,109,109,105,103,114,97,110,116,115,111,102,32,99,111,117,114
-,115,101,44,97,32,103,114,111,117,112,32,111,102,76,105,116,101,114,97,116,117,
-114,101,85,110,108,105,107,101,32,116,104,101,60,47,97,62,38,110,98,115,112,59,
-10,102,117,110,99,116,105,111,110,32,105,116,32,119,97,115,32,116,104,101,67,111
-,110,118,101,110,116,105,111,110,97,117,116,111,109,111,98,105,108,101,80,114,
-111,116,101,115,116,97,110,116,97,103,103,114,101,115,115,105,118,101,97,102,116
-,101,114,32,116,104,101,32,83,105,109,105,108,97,114,108,121,44,34,32,47,62,60,
-47,100,105,118,62,99,111,108,108,101,99,116,105,111,110,13,10,102,117,110,99,116
-,105,111,110,118,105,115,105,98,105,108,105,116,121,116,104,101,32,117,115,101,
-32,111,102,118,111,108,117,110,116,101,101,114,115,97,116,116,114,97,99,116,105,
-111,110,117,110,100,101,114,32,116,104,101,32,116,104,114,101,97,116,101,110,101
-,100,42,60,33,91,67,68,65,84,65,91,105,109,112,111,114,116,97,110,99,101,105,110
-,32,103,101,110,101,114,97,108,116,104,101,32,108,97,116,116,101,114,60,47,102,
-111,114,109,62,10,60,47,46,105,110,100,101,120,79,102,40,39,105,32,61,32,48,59,
-32,105,32,60,100,105,102,102,101,114,101,110,99,101,100,101,118,111,116,101,100,
-32,116,111,116,114,97,100,105,116,105,111,110,115,115,101,97,114,99,104,32,102,
-111,114,117,108,116,105,109,97,116,101,108,121,116,111,117,114,110,97,109,101,
-110,116,97,116,116,114,105,98,117,116,101,115,115,111,45,99,97,108,108,101,100,
-32,125,10,60,47,115,116,121,108,101,62,101,118,97,108,117,97,116,105,111,110,101
-,109,112,104,97,115,105,122,101,100,97,99,99,101,115,115,105,98,108,101,60,47,
-115,101,99,116,105,111,110,62,115,117,99,99,101,115,115,105,111,110,97,108,111,
-110,103,32,119,105,116,104,77,101,97,110,119,104,105,108,101,44,105,110,100,117,
-115,116,114,105,101,115,60,47,97,62,60,98,114,32,47,62,104,97,115,32,98,101,99,
-111,109,101,97,115,112,101,99,116,115,32,111,102,84,101,108,101,118,105,115,105,
-111,110,115,117,102,102,105,99,105,101,110,116,98,97,115,107,101,116,98,97,108,
-108,98,111,116,104,32,115,105,100,101,115,99,111,110,116,105,110,117,105,110,103
-,97,110,32,97,114,116,105,99,108,101,60,105,109,103,32,97,108,116,61,34,97,100,
-118,101,110,116,117,114,101,115,104,105,115,32,109,111,116,104,101,114,109,97,
-110,99,104,101,115,116,101,114,112,114,105,110,99,105,112,108,101,115,112,97,114
-,116,105,99,117,108,97,114,99,111,109,109,101,110,116,97,114,121,101,102,102,101
-,99,116,115,32,111,102,100,101,99,105,100,101,100,32,116,111,34,62,60,115,116,
-114,111,110,103,62,112,117,98,108,105,115,104,101,114,115,74,111,117,114,110,97,
-108,32,111,102,100,105,102,102,105,99,117,108,116,121,102,97,99,105,108,105,116,
-97,116,101,97,99,99,101,112,116,97,98,108,101,115,116,121,108,101,46,99,115,115,
-34,9,102,117,110,99,116,105,111,110,32,105,110,110,111,118,97,116,105,111,110,62
-,67,111,112,121,114,105,103,104,116,115,105,116,117,97,116,105,111,110,115,119,
-111,117,108,100,32,104,97,118,101,98,117,115,105,110,101,115,115,101,115,68,105,
-99,116,105,111,110,97,114,121,115,116,97,116,101,109,101,110,116,115,111,102,116
-,101,110,32,117,115,101,100,112,101,114,115,105,115,116,101,110,116,105,110,32,
-74,97,110,117,97,114,121,99,111,109,112,114,105,115,105,110,103,60,47,116,105,
-116,108,101,62,10,9,100,105,112,108,111,109,97,116,105,99,99,111,110,116,97,105,
-110,105,110,103,112,101,114,102,111,114,109,105,110,103,101,120,116,101,110,115,
-105,111,110,115,109,97,121,32,110,111,116,32,98,101,99,111,110,99,101,112,116,32
-,111,102,32,111,110,99,108,105,99,107,61,34,73,116,32,105,115,32,97,108,115,111,
-102,105,110,97,110,99,105,97,108,32,109,97,107,105,110,103,32,116,104,101,76,117
-,120,101,109,98,111,117,114,103,97,100,100,105,116,105,111,110,97,108,97,114,101
-,32,99,97,108,108,101,100,101,110,103,97,103,101,100,32,105,110,34,115,99,114,
-105,112,116,34,41,59,98,117,116,32,105,116,32,119,97,115,101,108,101,99,116,114,
-111,110,105,99,111,110,115,117,98,109,105,116,61,34,10,60,33,45,45,32,69,110,100
-,32,101,108,101,99,116,114,105,99,97,108,111,102,102,105,99,105,97,108,108,121,
-115,117,103,103,101,115,116,105,111,110,116,111,112,32,111,102,32,116,104,101,
-117,110,108,105,107,101,32,116,104,101,65,117,115,116,114,97,108,105,97,110,79,
-114,105,103,105,110,97,108,108,121,114,101,102,101,114,101,110,99,101,115,10,60,
-47,104,101,97,100,62,13,10,114,101,99,111,103,110,105,115,101,100,105,110,105,
-116,105,97,108,105,122,101,108,105,109,105,116,101,100,32,116,111,65,108,101,120
-,97,110,100,114,105,97,114,101,116,105,114,101,109,101,110,116,65,100,118,101,
-110,116,117,114,101,115,102,111,117,114,32,121,101,97,114,115,10,10,38,108,116,
-59,33,45,45,32,105,110,99,114,101,97,115,105,110,103,100,101,99,111,114,97,116,
-105,111,110,104,51,32,99,108,97,115,115,61,34,111,114,105,103,105,110,115,32,111
-,102,111,98,108,105,103,97,116,105,111,110,114,101,103,117,108,97,116,105,111,
-110,99,108,97,115,115,105,102,105,101,100,40,102,117,110,99,116,105,111,110,40,
-97,100,118,97,110,116,97,103,101,115,98,101,105,110,103,32,116,104,101,32,104,
-105,115,116,111,114,105,97,110,115,60,98,97,115,101,32,104,114,101,102,114,101,
-112,101,97,116,101,100,108,121,119,105,108,108,105,110,103,32,116,111,99,111,109
-,112,97,114,97,98,108,101,100,101,115,105,103,110,97,116,101,100,110,111,109,105
-,110,97,116,105,111,110,102,117,110,99,116,105,111,110,97,108,105,110,115,105,
-100,101,32,116,104,101,114,101,118,101,108,97,116,105,111,110,101,110,100,32,111
-,102,32,116,104,101,115,32,102,111,114,32,116,104,101,32,97,117,116,104,111,114,
-105,122,101,100,114,101,102,117,115,101,100,32,116,111,116,97,107,101,32,112,108
-,97,99,101,97,117,116,111,110,111,109,111,117,115,99,111,109,112,114,111,109,105
-,115,101,112,111,108,105,116,105,99,97,108,32,114,101,115,116,97,117,114,97,110,
-116,116,119,111,32,111,102,32,116,104,101,70,101,98,114,117,97,114,121,32,50,113
-,117,97,108,105,116,121,32,111,102,115,119,102,111,98,106,101,99,116,46,117,110,
-100,101,114,115,116,97,110,100,110,101,97,114,108,121,32,97,108,108,119,114,105,
-116,116,101,110,32,98,121,105,110,116,101,114,118,105,101,119,115,34,32,119,105,
-100,116,104,61,34,49,119,105,116,104,100,114,97,119,97,108,102,108,111,97,116,58
-,108,101,102,116,105,115,32,117,115,117,97,108,108,121,99,97,110,100,105,100,97,
-116,101,115,110,101,119,115,112,97,112,101,114,115,109,121,115,116,101,114,105,
-111,117,115,68,101,112,97,114,116,109,101,110,116,98,101,115,116,32,107,110,111,
-119,110,112,97,114,108,105,97,109,101,110,116,115,117,112,112,114,101,115,115,
-101,100,99,111,110,118,101,110,105,101,110,116,114,101,109,101,109,98,101,114,
-101,100,100,105,102,102,101,114,101,110,116,32,115,121,115,116,101,109,97,116,
-105,99,104,97,115,32,108,101,100,32,116,111,112,114,111,112,97,103,97,110,100,97
-,99,111,110,116,114,111,108,108,101,100,105,110,102,108,117,101,110,99,101,115,
-99,101,114,101,109,111,110,105,97,108,112,114,111,99,108,97,105,109,101,100,80,
-114,111,116,101,99,116,105,111,110,108,105,32,99,108,97,115,115,61,34,83,99,105,
-101,110,116,105,102,105,99,99,108,97,115,115,61,34,110,111,45,116,114,97,100,101
-,109,97,114,107,115,109,111,114,101,32,116,104,97,110,32,119,105,100,101,115,112
-,114,101,97,100,76,105,98,101,114,97,116,105,111,110,116,111,111,107,32,112,108,
-97,99,101,100,97,121,32,111,102,32,116,104,101,97,115,32,108,111,110,103,32,97,
-115,105,109,112,114,105,115,111,110,101,100,65,100,100,105,116,105,111,110,97,
-108,10,60,104,101,97,100,62,10,60,109,76,97,98,111,114,97,116,111,114,121,78,111
-,118,101,109,98,101,114,32,50,101,120,99,101,112,116,105,111,110,115,73,110,100,
-117,115,116,114,105,97,108,118,97,114,105,101,116,121,32,111,102,102,108,111,97,
-116,58,32,108,101,102,68,117,114,105,110,103,32,116,104,101,97,115,115,101,115,
-115,109,101,110,116,104,97,118,101,32,98,101,101,110,32,100,101,97,108,115,32,
-119,105,116,104,83,116,97,116,105,115,116,105,99,115,111,99,99,117,114,114,101,
-110,99,101,47,117,108,62,60,47,100,105,118,62,99,108,101,97,114,102,105,120,34,
-62,116,104,101,32,112,117,98,108,105,99,109,97,110,121,32,121,101,97,114,115,119
-,104,105,99,104,32,119,101,114,101,111,118,101,114,32,116,105,109,101,44,115,121
-,110,111,110,121,109,111,117,115,99,111,110,116,101,110,116,34,62,10,112,114,101
-,115,117,109,97,98,108,121,104,105,115,32,102,97,109,105,108,121,117,115,101,114
-,65,103,101,110,116,46,117,110,101,120,112,101,99,116,101,100,105,110,99,108,117
-,100,105,110,103,32,99,104,97,108,108,101,110,103,101,100,97,32,109,105,110,111,
-114,105,116,121,117,110,100,101,102,105,110,101,100,34,98,101,108,111,110,103,
-115,32,116,111,116,97,107,101,110,32,102,114,111,109,105,110,32,79,99,116,111,98
-,101,114,112,111,115,105,116,105,111,110,58,32,115,97,105,100,32,116,111,32,98,
-101,114,101,108,105,103,105,111,117,115,32,70,101,100,101,114,97,116,105,111,110
-,32,114,111,119,115,112,97,110,61,34,111,110,108,121,32,97,32,102,101,119,109,
-101,97,110,116,32,116,104,97,116,108,101,100,32,116,111,32,116,104,101,45,45,62,
-13,10,60,100,105,118,32,60,102,105,101,108,100,115,101,116,62,65,114,99,104,98,
-105,115,104,111,112,32,99,108,97,115,115,61,34,110,111,98,101,105,110,103,32,117
-,115,101,100,97,112,112,114,111,97,99,104,101,115,112,114,105,118,105,108,101,
-103,101,115,110,111,115,99,114,105,112,116,62,10,114,101,115,117,108,116,115,32,
-105,110,109,97,121,32,98,101,32,116,104,101,69,97,115,116,101,114,32,101,103,103
-,109,101,99,104,97,110,105,115,109,115,114,101,97,115,111,110,97,98,108,101,80,
-111,112,117,108,97,116,105,111,110,67,111,108,108,101,99,116,105,111,110,115,101
-,108,101,99,116,101,100,34,62,110,111,115,99,114,105,112,116,62,13,47,105,110,
-100,101,120,46,112,104,112,97,114,114,105,118,97,108,32,111,102,45,106,115,115,
-100,107,39,41,41,59,109,97,110,97,103,101,100,32,116,111,105,110,99,111,109,112,
-108,101,116,101,99,97,115,117,97,108,116,105,101,115,99,111,109,112,108,101,116,
-105,111,110,67,104,114,105,115,116,105,97,110,115,83,101,112,116,101,109,98,101,
-114,32,97,114,105,116,104,109,101,116,105,99,112,114,111,99,101,100,117,114,101,
-115,109,105,103,104,116,32,104,97,118,101,80,114,111,100,117,99,116,105,111,110,
-105,116,32,97,112,112,101,97,114,115,80,104,105,108,111,115,111,112,104,121,102,
-114,105,101,110,100,115,104,105,112,108,101,97,100,105,110,103,32,116,111,103,
-105,118,105,110,103,32,116,104,101,116,111,119,97,114,100,32,116,104,101,103,117
-,97,114,97,110,116,101,101,100,100,111,99,117,109,101,110,116,101,100,99,111,108
-,111,114,58,35,48,48,48,118,105,100,101,111,32,103,97,109,101,99,111,109,109,105
-,115,115,105,111,110,114,101,102,108,101,99,116,105,110,103,99,104,97,110,103,
-101,32,116,104,101,97,115,115,111,99,105,97,116,101,100,115,97,110,115,45,115,
-101,114,105,102,111,110,107,101,121,112,114,101,115,115,59,32,112,97,100,100,105
-,110,103,58,72,101,32,119,97,115,32,116,104,101,117,110,100,101,114,108,121,105,
-110,103,116,121,112,105,99,97,108,108,121,32,44,32,97,110,100,32,116,104,101,32,
-115,114,99,69,108,101,109,101,110,116,115,117,99,99,101,115,115,105,118,101,115,
-105,110,99,101,32,116,104,101,32,115,104,111,117,108,100,32,98,101,32,110,101,
-116,119,111,114,107,105,110,103,97,99,99,111,117,110,116,105,110,103,117,115,101
-,32,111,102,32,116,104,101,108,111,119,101,114,32,116,104,97,110,115,104,111,119
-,115,32,116,104,97,116,60,47,115,112,97,110,62,10,9,9,99,111,109,112,108,97,105,
-110,116,115,99,111,110,116,105,110,117,111,117,115,113,117,97,110,116,105,116,
-105,101,115,97,115,116,114,111,110,111,109,101,114,104,101,32,100,105,100,32,110
-,111,116,100,117,101,32,116,111,32,105,116,115,97,112,112,108,105,101,100,32,116
-,111,97,110,32,97,118,101,114,97,103,101,101,102,102,111,114,116,115,32,116,111,
-116,104,101,32,102,117,116,117,114,101,97,116,116,101,109,112,116,32,116,111,84,
-104,101,114,101,102,111,114,101,44,99,97,112,97,98,105,108,105,116,121,82,101,
-112,117,98,108,105,99,97,110,119,97,115,32,102,111,114,109,101,100,69,108,101,99
-,116,114,111,110,105,99,107,105,108,111,109,101,116,101,114,115,99,104,97,108,
-108,101,110,103,101,115,112,117,98,108,105,115,104,105,110,103,116,104,101,32,
-102,111,114,109,101,114,105,110,100,105,103,101,110,111,117,115,100,105,114,101,
-99,116,105,111,110,115,115,117,98,115,105,100,105,97,114,121,99,111,110,115,112,
-105,114,97,99,121,100,101,116,97,105,108,115,32,111,102,97,110,100,32,105,110,32
-,116,104,101,97,102,102,111,114,100,97,98,108,101,115,117,98,115,116,97,110,99,
-101,115,114,101,97,115,111,110,32,102,111,114,99,111,110,118,101,110,116,105,111
-,110,105,116,101,109,116,121,112,101,61,34,97,98,115,111,108,117,116,101,108,121
-,115,117,112,112,111,115,101,100,108,121,114,101,109,97,105,110,101,100,32,97,97
-,116,116,114,97,99,116,105,118,101,116,114,97,118,101,108,108,105,110,103,115,
-101,112,97,114,97,116,101,108,121,102,111,99,117,115,101,115,32,111,110,101,108,
-101,109,101,110,116,97,114,121,97,112,112,108,105,99,97,98,108,101,102,111,117,
-110,100,32,116,104,97,116,115,116,121,108,101,115,104,101,101,116,109,97,110,117
-,115,99,114,105,112,116,115,116,97,110,100,115,32,102,111,114,32,110,111,45,114,
-101,112,101,97,116,40,115,111,109,101,116,105,109,101,115,67,111,109,109,101,114
-,99,105,97,108,105,110,32,65,109,101,114,105,99,97,117,110,100,101,114,116,97,
-107,101,110,113,117,97,114,116,101,114,32,111,102,97,110,32,101,120,97,109,112,
-108,101,112,101,114,115,111,110,97,108,108,121,105,110,100,101,120,46,112,104,
-112,63,60,47,98,117,116,116,111,110,62,10,112,101,114,99,101,110,116,97,103,101,
-98,101,115,116,45,107,110,111,119,110,99,114,101,97,116,105,110,103,32,97,34,32,
-100,105,114,61,34,108,116,114,76,105,101,117,116,101,110,97,110,116,10,60,100,
-105,118,32,105,100,61,34,116,104,101,121,32,119,111,117,108,100,97,98,105,108,
-105,116,121,32,111,102,109,97,100,101,32,117,112,32,111,102,110,111,116,101,100,
-32,116,104,97,116,99,108,101,97,114,32,116,104,97,116,97,114,103,117,101,32,116,
-104,97,116,116,111,32,97,110,111,116,104,101,114,99,104,105,108,100,114,101,110,
-39,115,112,117,114,112,111,115,101,32,111,102,102,111,114,109,117,108,97,116,101
-,100,98,97,115,101,100,32,117,112,111,110,116,104,101,32,114,101,103,105,111,110
-,115,117,98,106,101,99,116,32,111,102,112,97,115,115,101,110,103,101,114,115,112
-,111,115,115,101,115,115,105,111,110,46,10,10,73,110,32,116,104,101,32,66,101,
-102,111,114,101,32,116,104,101,97,102,116,101,114,119,97,114,100,115,99,117,114,
-114,101,110,116,108,121,32,97,99,114,111,115,115,32,116,104,101,115,99,105,101,
-110,116,105,102,105,99,99,111,109,109,117,110,105,116,121,46,99,97,112,105,116,
-97,108,105,115,109,105,110,32,71,101,114,109,97,110,121,114,105,103,104,116,45,
-119,105,110,103,116,104,101,32,115,121,115,116,101,109,83,111,99,105,101,116,121
-,32,111,102,112,111,108,105,116,105,99,105,97,110,100,105,114,101,99,116,105,111
-,110,58,119,101,110,116,32,111,110,32,116,111,114,101,109,111,118,97,108,32,111,
-102,32,78,101,119,32,89,111,114,107,32,97,112,97,114,116,109,101,110,116,115,105
-,110,100,105,99,97,116,105,111,110,100,117,114,105,110,103,32,116,104,101,117,
-110,108,101,115,115,32,116,104,101,104,105,115,116,111,114,105,99,97,108,104,97,
-100,32,98,101,101,110,32,97,100,101,102,105,110,105,116,105,118,101,105,110,103,
-114,101,100,105,101,110,116,97,116,116,101,110,100,97,110,99,101,67,101,110,116,
-101,114,32,102,111,114,112,114,111,109,105,110,101,110,99,101,114,101,97,100,121
-,83,116,97,116,101,115,116,114,97,116,101,103,105,101,115,98,117,116,32,105,110,
-32,116,104,101,97,115,32,112,97,114,116,32,111,102,99,111,110,115,116,105,116,
-117,116,101,99,108,97,105,109,32,116,104,97,116,108,97,98,111,114,97,116,111,114
-,121,99,111,109,112,97,116,105,98,108,101,102,97,105,108,117,114,101,32,111,102,
-44,32,115,117,99,104,32,97,115,32,98,101,103,97,110,32,119,105,116,104,117,115,
-105,110,103,32,116,104,101,32,116,111,32,112,114,111,118,105,100,101,102,101,97,
-116,117,114,101,32,111,102,102,114,111,109,32,119,104,105,99,104,47,34,32,99,108
-,97,115,115,61,34,103,101,111,108,111,103,105,99,97,108,115,101,118,101,114,97,
-108,32,111,102,100,101,108,105,98,101,114,97,116,101,105,109,112,111,114,116,97,
-110,116,32,104,111,108,100,115,32,116,104,97,116,105,110,103,38,113,117,111,116,
-59,32,118,97,108,105,103,110,61,116,111,112,116,104,101,32,71,101,114,109,97,110
-,111,117,116,115,105,100,101,32,111,102,110,101,103,111,116,105,97,116,101,100,
-104,105,115,32,99,97,114,101,101,114,115,101,112,97,114,97,116,105,111,110,105,
-100,61,34,115,101,97,114,99,104,119,97,115,32,99,97,108,108,101,100,116,104,101,
-32,102,111,117,114,116,104,114,101,99,114,101,97,116,105,111,110,111,116,104,101
-,114,32,116,104,97,110,112,114,101,118,101,110,116,105,111,110,119,104,105,108,
-101,32,116,104,101,32,101,100,117,99,97,116,105,111,110,44,99,111,110,110,101,99
-,116,105,110,103,97,99,99,117,114,97,116,101,108,121,119,101,114,101,32,98,117,
-105,108,116,119,97,115,32,107,105,108,108,101,100,97,103,114,101,101,109,101,110
-,116,115,109,117,99,104,32,109,111,114,101,32,68,117,101,32,116,111,32,116,104,
-101,119,105,100,116,104,58,32,49,48,48,115,111,109,101,32,111,116,104,101,114,75
-,105,110,103,100,111,109,32,111,102,116,104,101,32,101,110,116,105,114,101,102,
-97,109,111,117,115,32,102,111,114,116,111,32,99,111,110,110,101,99,116,111,98,
-106,101,99,116,105,118,101,115,116,104,101,32,70,114,101,110,99,104,112,101,111,
-112,108,101,32,97,110,100,102,101,97,116,117,114,101,100,34,62,105,115,32,115,97
-,105,100,32,116,111,115,116,114,117,99,116,117,114,97,108,114,101,102,101,114,
-101,110,100,117,109,109,111,115,116,32,111,102,116,101,110,97,32,115,101,112,97,
-114,97,116,101,45,62,10,60,100,105,118,32,105,100,32,79,102,102,105,99,105,97,
-108,32,119,111,114,108,100,119,105,100,101,46,97,114,105,97,45,108,97,98,101,108
-,116,104,101,32,112,108,97,110,101,116,97,110,100,32,105,116,32,119,97,115,100,
-34,32,118,97,108,117,101,61,34,108,111,111,107,105,110,103,32,97,116,98,101,110,
-101,102,105,99,105,97,108,97,114,101,32,105,110,32,116,104,101,109,111,110,105,
-116,111,114,105,110,103,114,101,112,111,114,116,101,100,108,121,116,104,101,32,
-109,111,100,101,114,110,119,111,114,107,105,110,103,32,111,110,97,108,108,111,
-119,101,100,32,116,111,119,104,101,114,101,32,116,104,101,32,105,110,110,111,118
-,97,116,105,118,101,60,47,97,62,60,47,100,105,118,62,115,111,117,110,100,116,114
-,97,99,107,115,101,97,114,99,104,70,111,114,109,116,101,110,100,32,116,111,32,98
-,101,105,110,112,117,116,32,105,100,61,34,111,112,101,110,105,110,103,32,111,102
-,114,101,115,116,114,105,99,116,101,100,97,100,111,112,116,101,100,32,98,121,97,
-100,100,114,101,115,115,105,110,103,116,104,101,111,108,111,103,105,97,110,109,
-101,116,104,111,100,115,32,111,102,118,97,114,105,97,110,116,32,111,102,67,104,
-114,105,115,116,105,97,110,32,118,101,114,121,32,108,97,114,103,101,97,117,116,
-111,109,111,116,105,118,101,98,121,32,102,97,114,32,116,104,101,114,97,110,103,
-101,32,102,114,111,109,112,117,114,115,117,105,116,32,111,102,102,111,108,108,
-111,119,32,116,104,101,98,114,111,117,103,104,116,32,116,111,105,110,32,69,110,
-103,108,97,110,100,97,103,114,101,101,32,116,104,97,116,97,99,99,117,115,101,100
-,32,111,102,99,111,109,101,115,32,102,114,111,109,112,114,101,118,101,110,116,
-105,110,103,100,105,118,32,115,116,121,108,101,61,104,105,115,32,111,114,32,104,
-101,114,116,114,101,109,101,110,100,111,117,115,102,114,101,101,100,111,109,32,
-111,102,99,111,110,99,101,114,110,105,110,103,48,32,49,101,109,32,49,101,109,59,
-66,97,115,107,101,116,98,97,108,108,47,115,116,121,108,101,46,99,115,115,97,110,
-32,101,97,114,108,105,101,114,101,118,101,110,32,97,102,116,101,114,47,34,32,116
-,105,116,108,101,61,34,46,99,111,109,47,105,110,100,101,120,116,97,107,105,110,
-103,32,116,104,101,112,105,116,116,115,98,117,114,103,104,99,111,110,116,101,110
-,116,34,62,13,60,115,99,114,105,112,116,62,40,102,116,117,114,110,101,100,32,111
-,117,116,104,97,118,105,110,103,32,116,104,101,60,47,115,112,97,110,62,13,10,32,
-111,99,99,97,115,105,111,110,97,108,98,101,99,97,117,115,101,32,105,116,115,116,
-97,114,116,101,100,32,116,111,112,104,121,115,105,99,97,108,108,121,62,60,47,100
-,105,118,62,10,32,32,99,114,101,97,116,101,100,32,98,121,67,117,114,114,101,110,
-116,108,121,44,32,98,103,99,111,108,111,114,61,34,116,97,98,105,110,100,101,120,
-61,34,100,105,115,97,115,116,114,111,117,115,65,110,97,108,121,116,105,99,115,32
-,97,108,115,111,32,104,97,115,32,97,62,60,100,105,118,32,105,100,61,34,60,47,115
-,116,121,108,101,62,10,60,99,97,108,108,101,100,32,102,111,114,115,105,110,103,
-101,114,32,97,110,100,46,115,114,99,32,61,32,34,47,47,118,105,111,108,97,116,105
-,111,110,115,116,104,105,115,32,112,111,105,110,116,99,111,110,115,116,97,110,
-116,108,121,105,115,32,108,111,99,97,116,101,100,114,101,99,111,114,100,105,110,
-103,115,100,32,102,114,111,109,32,116,104,101,110,101,100,101,114,108,97,110,100
-,115,112,111,114,116,117,103,117,195,170,115,215,162,215,145,215,168,215,153,215
-,170,217,129,216,167,216,177,216,179,219,140,100,101,115,97,114,114,111,108,108,
-111,99,111,109,101,110,116,97,114,105,111,101,100,117,99,97,99,105,195,179,110,
-115,101,112,116,105,101,109,98,114,101,114,101,103,105,115,116,114,97,100,111,
-100,105,114,101,99,99,105,195,179,110,117,98,105,99,97,99,105,195,179,110,112,
-117,98,108,105,99,105,100,97,100,114,101,115,112,117,101,115,116,97,115,114,101,
-115,117,108,116,97,100,111,115,105,109,112,111,114,116,97,110,116,101,114,101,
-115,101,114,118,97,100,111,115,97,114,116,195,173,99,117,108,111,115,100,105,102
-,101,114,101,110,116,101,115,115,105,103,117,105,101,110,116,101,115,114,101,112
-,195,186,98,108,105,99,97,115,105,116,117,97,99,105,195,179,110,109,105,110,105,
-115,116,101,114,105,111,112,114,105,118,97,99,105,100,97,100,100,105,114,101,99,
-116,111,114,105,111,102,111,114,109,97,99,105,195,179,110,112,111,98,108,97,99,
-105,195,179,110,112,114,101,115,105,100,101,110,116,101,99,111,110,116,101,110,
-105,100,111,115,97,99,99,101,115,111,114,105,111,115,116,101,99,104,110,111,114,
-97,116,105,112,101,114,115,111,110,97,108,101,115,99,97,116,101,103,111,114,195,
-173,97,101,115,112,101,99,105,97,108,101,115,100,105,115,112,111,110,105,98,108,
-101,97,99,116,117,97,108,105,100,97,100,114,101,102,101,114,101,110,99,105,97,
-118,97,108,108,97,100,111,108,105,100,98,105,98,108,105,111,116,101,99,97,114,
-101,108,97,99,105,111,110,101,115,99,97,108,101,110,100,97,114,105,111,112,111,
-108,195,173,116,105,99,97,115,97,110,116,101,114,105,111,114,101,115,100,111,99,
-117,109,101,110,116,111,115,110,97,116,117,114,97,108,101,122,97,109,97,116,101,
-114,105,97,108,101,115,100,105,102,101,114,101,110,99,105,97,101,99,111,110,195,
-179,109,105,99,97,116,114,97,110,115,112,111,114,116,101,114,111,100,114,195,173
-,103,117,101,122,112,97,114,116,105,99,105,112,97,114,101,110,99,117,101,110,116
-,114,97,110,100,105,115,99,117,115,105,195,179,110,101,115,116,114,117,99,116,
-117,114,97,102,117,110,100,97,99,105,195,179,110,102,114,101,99,117,101,110,116,
-101,115,112,101,114,109,97,110,101,110,116,101,116,111,116,97,108,109,101,110,
-116,101,208,188,208,190,208,182,208,189,208,190,208,177,209,131,208,180,208,181,
-209,130,208,188,208,190,208,182,208,181,209,130,208,178,209,128,208,181,208,188,
-209,143,209,130,208,176,208,186,208,182,208,181,209,135,209,130,208,190,208,177,
-209,139,208,177,208,190,208,187,208,181,208,181,208,190,209,135,208,181,208,189,
-209,140,209,141,209,130,208,190,208,179,208,190,208,186,208,190,208,179,208,180,
-208,176,208,191,208,190,209,129,208,187,208,181,208,178,209,129,208,181,208,179,
-208,190,209,129,208,176,208,185,209,130,208,181,209,135,208,181,209,128,208,181,
-208,183,208,188,208,190,208,179,209,131,209,130,209,129,208,176,208,185,209,130,
-208,176,208,182,208,184,208,183,208,189,208,184,208,188,208,181,208,182,208,180,
-209,131,208,177,209,131,208,180,209,131,209,130,208,159,208,190,208,184,209,129,
-208,186,208,183,208,180,208,181,209,129,209,140,208,178,208,184,208,180,208,181,
-208,190,209,129,208,178,209,143,208,183,208,184,208,189,209,131,208,182,208,189,
-208,190,209,129,208,178,208,190,208,181,208,185,208,187,209,142,208,180,208,181,
-208,185,208,191,208,190,209,128,208,189,208,190,208,188,208,189,208,190,208,179,
-208,190,208,180,208,181,209,130,208,181,208,185,209,129,208,178,208,190,208,184,
-209,133,208,191,209,128,208,176,208,178,208,176,209,130,208,176,208,186,208,190,
-208,185,208,188,208,181,209,129,209,130,208,190,208,184,208,188,208,181,208,181,
-209,130,208,182,208,184,208,183,208,189,209,140,208,190,208,180,208,189,208,190,
-208,185,208,187,209,131,209,135,209,136,208,181,208,191,208,181,209,128,208,181,
-208,180,209,135,208,176,209,129,209,130,208,184,209,135,208,176,209,129,209,130,
-209,140,209,128,208,176,208,177,208,190,209,130,208,189,208,190,208,178,209,139,
-209,133,208,191,209,128,208,176,208,178,208,190,209,129,208,190,208,177,208,190,
-208,185,208,191,208,190,209,130,208,190,208,188,208,188,208,181,208,189,208,181,
-208,181,209,135,208,184,209,129,208,187,208,181,208,189,208,190,208,178,209,139,
-208,181,209,131,209,129,208,187,209,131,208,179,208,190,208,186,208,190,208,187,
-208,190,208,189,208,176,208,183,208,176,208,180,209,130,208,176,208,186,208,190,
-208,181,209,130,208,190,208,179,208,180,208,176,208,191,208,190,209,135,209,130,
-208,184,208,159,208,190,209,129,208,187,208,181,209,130,208,176,208,186,208,184,
-208,181,208,189,208,190,208,178,209,139,208,185,209,129,209,130,208,190,208,184,
-209,130,209,130,208,176,208,186,208,184,209,133,209,129,209,128,208,176,208,183,
-209,131,208,161,208,176,208,189,208,186,209,130,209,132,208,190,209,128,209,131,
-208,188,208,154,208,190,208,179,208,180,208,176,208,186,208,189,208,184,208,179,
-208,184,209,129,208,187,208,190,208,178,208,176,208,189,208,176,209,136,208,181,
-208,185,208,189,208,176,208,185,209,130,208,184,209,129,208,178,208,190,208,184,
-208,188,209,129,208,178,209,143,208,183,209,140,208,187,209,142,208,177,208,190,
-208,185,209,135,208,176,209,129,209,130,208,190,209,129,209,128,208,181,208,180,
-208,184,208,154,209,128,208,190,208,188,208,181,208,164,208,190,209,128,209,131,
-208,188,209,128,209,139,208,189,208,186,208,181,209,129,209,130,208,176,208,187,
-208,184,208,191,208,190,208,184,209,129,208,186,209,130,209,139,209,129,209,143,
-209,135,208,188,208,181,209,129,209,143,209,134,209,134,208,181,208,189,209,130,
-209,128,209,130,209,128,209,131,208,180,208,176,209,129,208,176,208,188,209,139,
-209,133,209,128,209,139,208,189,208,186,208,176,208,157,208,190,208,178,209,139,
-208,185,209,135,208,176,209,129,208,190,208,178,208,188,208,181,209,129,209,130,
-208,176,209,132,208,184,208,187,209,140,208,188,208,188,208,176,209,128,209,130,
-208,176,209,129,209,130,209,128,208,176,208,189,208,188,208,181,209,129,209,130,
-208,181,209,130,208,181,208,186,209,129,209,130,208,189,208,176,209,136,208,184,
-209,133,208,188,208,184,208,189,209,131,209,130,208,184,208,188,208,181,208,189,
-208,184,208,184,208,188,208,181,209,142,209,130,208,189,208,190,208,188,208,181,
-209,128,208,179,208,190,209,128,208,190,208,180,209,129,208,176,208,188,208,190,
-208,188,209,141,209,130,208,190,208,188,209,131,208,186,208,190,208,189,209,134,
-208,181,209,129,208,178,208,190,208,181,208,188,208,186,208,176,208,186,208,190,
-208,185,208,144,209,128,209,133,208,184,208,178,217,133,217,134,216,170,216,175,
-217,137,216,165,216,177,216,179,216,167,217,132,216,177,216,179,216,167,217,132,
-216,169,216,167,217,132,216,185,216,167,217,133,217,131,216,170,216,168,217,135,
-216,167,216,168,216,177,216,167,217,133,216,172,216,167,217,132,217,138,217,136,
-217,133,216,167,217,132,216,181,217,136,216,177,216,172,216,175,217,138,216,175,
-216,169,216,167,217,132,216,185,216,182,217,136,216,165,216,182,216,167,217,129,
-216,169,216,167,217,132,217,130,216,179,217,133,216,167,217,132,216,185,216,167,
-216,168,216,170,216,173,217,133,217,138,217,132,217,133,217,132,217,129,216,167,
-216,170,217,133,217,132,216,170,217,130,217,137,216,170,216,185,216,175,217,138,
-217,132,216,167,217,132,216,180,216,185,216,177,216,163,216,174,216,168,216,167,
-216,177,216,170,216,183,217,136,217,138,216,177,216,185,217,132,217,138,217,131,
-217,133,216,165,216,177,217,129,216,167,217,130,216,183,217,132,216,168,216,167,
-216,170,216,167,217,132,217,132,216,186,216,169,216,170,216,177,216,170,217,138,
-216,168,216,167,217,132,217,134,216,167,216,179,216,167,217,132,216,180,217,138,
-216,174,217,133,217,134,216,170,216,175,217,138,216,167,217,132,216,185,216,177,
-216,168,216,167,217,132,217,130,216,181,216,181,216,167,217,129,217,132,216,167,
-217,133,216,185,217,132,217,138,217,135,216,167,216,170,216,173,216,175,217,138,
-216,171,216,167,217,132,217,132,217,135,217,133,216,167,217,132,216,185,217,133,
-217,132,217,133,217,131,216,170,216,168,216,169,217,138,217,133,217,131,217,134,
-217,131,216,167,217,132,216,183,217,129,217,132,217,129,217,138,216,175,217,138,
-217,136,216,165,216,175,216,167,216,177,216,169,216,170,216,167,216,177,217,138,
-216,174,216,167,217,132,216,181,216,173,216,169,216,170,216,179,216,172,217,138,
-217,132,216,167,217,132,217,136,217,130,216,170,216,185,217,134,216,175,217,133,
-216,167,217,133,216,175,217,138,217,134,216,169,216,170,216,181,217,133,217,138,
-217,133,216,163,216,177,216,180,217,138,217,129,216,167,217,132,216,176,217,138,
-217,134,216,185,216,177,216,168,217,138,216,169,216,168,217,136,216,167,216,168,
-216,169,216,163,217,132,216,185,216,167,216,168,216,167,217,132,216,179,217,129,
-216,177,217,133,216,180,216,167,217,131,217,132,216,170,216,185,216,167,217,132,
-217,137,216,167,217,132,216,163,217,136,217,132,216,167,217,132,216,179,217,134,
-216,169,216,172,216,167,217,133,216,185,216,169,216,167,217,132,216,181,216,173,
-217,129,216,167,217,132,216,175,217,138,217,134,217,131,217,132,217,133,216,167,
-216,170,216,167,217,132,216,174,216,167,216,181,216,167,217,132,217,133,217,132,
-217,129,216,163,216,185,216,182,216,167,216,161,217,131,216,170,216,167,216,168,
-216,169,216,167,217,132,216,174,217,138,216,177,216,177,216,179,216,167,216,166,
-217,132,216,167,217,132,217,130,217,132,216,168,216,167,217,132,216,163,216,175,
-216,168,217,133,217,130,216,167,216,183,216,185,217,133,216,177,216,167,216,179,
-217,132,217,133,217,134,216,183,217,130,216,169,216,167,217,132,217,131,216,170,
-216,168,216,167,217,132,216,177,216,172,217,132,216,167,216,180,216,170,216,177,
-217,131,216,167,217,132,217,130,216,175,217,133,217,138,216,185,216,183,217,138,
-217,131,115,66,121,84,97,103,78,97,109,101,40,46,106,112,103,34,32,97,108,116,61
-,34,49,112,120,32,115,111,108,105,100,32,35,46,103,105,102,34,32,97,108,116,61,
-34,116,114,97,110,115,112,97,114,101,110,116,105,110,102,111,114,109,97,116,105,
-111,110,97,112,112,108,105,99,97,116,105,111,110,34,32,111,110,99,108,105,99,107
-,61,34,101,115,116,97,98,108,105,115,104,101,100,97,100,118,101,114,116,105,115,
-105,110,103,46,112,110,103,34,32,97,108,116,61,34,101,110,118,105,114,111,110,
-109,101,110,116,112,101,114,102,111,114,109,97,110,99,101,97,112,112,114,111,112
-,114,105,97,116,101,38,97,109,112,59,109,100,97,115,104,59,105,109,109,101,100,
-105,97,116,101,108,121,60,47,115,116,114,111,110,103,62,60,47,114,97,116,104,101
-,114,32,116,104,97,110,116,101,109,112,101,114,97,116,117,114,101,100,101,118,
-101,108,111,112,109,101,110,116,99,111,109,112,101,116,105,116,105,111,110,112,
-108,97,99,101,104,111,108,100,101,114,118,105,115,105,98,105,108,105,116,121,58,
-99,111,112,121,114,105,103,104,116,34,62,48,34,32,104,101,105,103,104,116,61,34,
-101,118,101,110,32,116,104,111,117,103,104,114,101,112,108,97,99,101,109,101,110
-,116,100,101,115,116,105,110,97,116,105,111,110,67,111,114,112,111,114,97,116,
-105,111,110,60,117,108,32,99,108,97,115,115,61,34,65,115,115,111,99,105,97,116,
-105,111,110,105,110,100,105,118,105,100,117,97,108,115,112,101,114,115,112,101,
-99,116,105,118,101,115,101,116,84,105,109,101,111,117,116,40,117,114,108,40,104,
-116,116,112,58,47,47,109,97,116,104,101,109,97,116,105,99,115,109,97,114,103,105
-,110,45,116,111,112,58,101,118,101,110,116,117,97,108,108,121,32,100,101,115,99,
-114,105,112,116,105,111,110,41,32,110,111,45,114,101,112,101,97,116,99,111,108,
-108,101,99,116,105,111,110,115,46,74,80,71,124,116,104,117,109,98,124,112,97,114
-,116,105,99,105,112,97,116,101,47,104,101,97,100,62,60,98,111,100,121,102,108,
-111,97,116,58,108,101,102,116,59,60,108,105,32,99,108,97,115,115,61,34,104,117,
-110,100,114,101,100,115,32,111,102,10,10,72,111,119,101,118,101,114,44,32,99,111
-,109,112,111,115,105,116,105,111,110,99,108,101,97,114,58,98,111,116,104,59,99,
-111,111,112,101,114,97,116,105,111,110,119,105,116,104,105,110,32,116,104,101,32
-,108,97,98,101,108,32,102,111,114,61,34,98,111,114,100,101,114,45,116,111,112,58
-,78,101,119,32,90,101,97,108,97,110,100,114,101,99,111,109,109,101,110,100,101,
-100,112,104,111,116,111,103,114,97,112,104,121,105,110,116,101,114,101,115,116,
-105,110,103,38,108,116,59,115,117,112,38,103,116,59,99,111,110,116,114,111,118,
-101,114,115,121,78,101,116,104,101,114,108,97,110,100,115,97,108,116,101,114,110
-,97,116,105,118,101,109,97,120,108,101,110,103,116,104,61,34,115,119,105,116,122
-,101,114,108,97,110,100,68,101,118,101,108,111,112,109,101,110,116,101,115,115,
-101,110,116,105,97,108,108,121,10,10,65,108,116,104,111,117,103,104,32,60,47,116
-,101,120,116,97,114,101,97,62,116,104,117,110,100,101,114,98,105,114,100,114,101
-,112,114,101,115,101,110,116,101,100,38,97,109,112,59,110,100,97,115,104,59,115,
-112,101,99,117,108,97,116,105,111,110,99,111,109,109,117,110,105,116,105,101,115
-,108,101,103,105,115,108,97,116,105,111,110,101,108,101,99,116,114,111,110,105,
-99,115,10,9,60,100,105,118,32,105,100,61,34,105,108,108,117,115,116,114,97,116,
-101,100,101,110,103,105,110,101,101,114,105,110,103,116,101,114,114,105,116,111,
-114,105,101,115,97,117,116,104,111,114,105,116,105,101,115,100,105,115,116,114,
-105,98,117,116,101,100,54,34,32,104,101,105,103,104,116,61,34,115,97,110,115,45,
-115,101,114,105,102,59,99,97,112,97,98,108,101,32,111,102,32,100,105,115,97,112,
-112,101,97,114,101,100,105,110,116,101,114,97,99,116,105,118,101,108,111,111,107
-,105,110,103,32,102,111,114,105,116,32,119,111,117,108,100,32,98,101,65,102,103,
-104,97,110,105,115,116,97,110,119,97,115,32,99,114,101,97,116,101,100,77,97,116,
-104,46,102,108,111,111,114,40,115,117,114,114,111,117,110,100,105,110,103,99,97,
-110,32,97,108,115,111,32,98,101,111,98,115,101,114,118,97,116,105,111,110,109,97
-,105,110,116,101,110,97,110,99,101,101,110,99,111,117,110,116,101,114,101,100,60
-,104,50,32,99,108,97,115,115,61,34,109,111,114,101,32,114,101,99,101,110,116,105
-,116,32,104,97,115,32,98,101,101,110,105,110,118,97,115,105,111,110,32,111,102,
-41,46,103,101,116,84,105,109,101,40,41,102,117,110,100,97,109,101,110,116,97,108
-,68,101,115,112,105,116,101,32,116,104,101,34,62,60,100,105,118,32,105,100,61,34
-,105,110,115,112,105,114,97,116,105,111,110,101,120,97,109,105,110,97,116,105,
-111,110,112,114,101,112,97,114,97,116,105,111,110,101,120,112,108,97,110,97,116,
-105,111,110,60,105,110,112,117,116,32,105,100,61,34,60,47,97,62,60,47,115,112,97
-,110,62,118,101,114,115,105,111,110,115,32,111,102,105,110,115,116,114,117,109,
-101,110,116,115,98,101,102,111,114,101,32,116,104,101,32,32,61,32,39,104,116,116
-,112,58,47,47,68,101,115,99,114,105,112,116,105,111,110,114,101,108,97,116,105,
-118,101,108,121,32,46,115,117,98,115,116,114,105,110,103,40,101,97,99,104,32,111
-,102,32,116,104,101,101,120,112,101,114,105,109,101,110,116,115,105,110,102,108,
-117,101,110,116,105,97,108,105,110,116,101,103,114,97,116,105,111,110,109,97,110
-,121,32,112,101,111,112,108,101,100,117,101,32,116,111,32,116,104,101,32,99,111,
-109,98,105,110,97,116,105,111,110,100,111,32,110,111,116,32,104,97,118,101,77,
-105,100,100,108,101,32,69,97,115,116,60,110,111,115,99,114,105,112,116,62,60,99,
-111,112,121,114,105,103,104,116,34,32,112,101,114,104,97,112,115,32,116,104,101,
-105,110,115,116,105,116,117,116,105,111,110,105,110,32,68,101,99,101,109,98,101,
-114,97,114,114,97,110,103,101,109,101,110,116,109,111,115,116,32,102,97,109,111,
-117,115,112,101,114,115,111,110,97,108,105,116,121,99,114,101,97,116,105,111,110
-,32,111,102,108,105,109,105,116,97,116,105,111,110,115,101,120,99,108,117,115,
-105,118,101,108,121,115,111,118,101,114,101,105,103,110,116,121,45,99,111,110,
-116,101,110,116,34,62,10,60,116,100,32,99,108,97,115,115,61,34,117,110,100,101,
-114,103,114,111,117,110,100,112,97,114,97,108,108,101,108,32,116,111,100,111,99,
-116,114,105,110,101,32,111,102,111,99,99,117,112,105,101,100,32,98,121,116,101,
-114,109,105,110,111,108,111,103,121,82,101,110,97,105,115,115,97,110,99,101,97,
-32,110,117,109,98,101,114,32,111,102,115,117,112,112,111,114,116,32,102,111,114,
-101,120,112,108,111,114,97,116,105,111,110,114,101,99,111,103,110,105,116,105,
-111,110,112,114,101,100,101,99,101,115,115,111,114,60,105,109,103,32,115,114,99,
-61,34,47,60,104,49,32,99,108,97,115,115,61,34,112,117,98,108,105,99,97,116,105,
-111,110,109,97,121,32,97,108,115,111,32,98,101,115,112,101,99,105,97,108,105,122
-,101,100,60,47,102,105,101,108,100,115,101,116,62,112,114,111,103,114,101,115,
-115,105,118,101,109,105,108,108,105,111,110,115,32,111,102,115,116,97,116,101,
-115,32,116,104,97,116,101,110,102,111,114,99,101,109,101,110,116,97,114,111,117,
-110,100,32,116,104,101,32,111,110,101,32,97,110,111,116,104,101,114,46,112,97,
-114,101,110,116,78,111,100,101,97,103,114,105,99,117,108,116,117,114,101,65,108,
-116,101,114,110,97,116,105,118,101,114,101,115,101,97,114,99,104,101,114,115,116
-,111,119,97,114,100,115,32,116,104,101,77,111,115,116,32,111,102,32,116,104,101,
-109,97,110,121,32,111,116,104,101,114,32,40,101,115,112,101,99,105,97,108,108,
-121,60,116,100,32,119,105,100,116,104,61,34,59,119,105,100,116,104,58,49,48,48,
-37,105,110,100,101,112,101,110,100,101,110,116,60,104,51,32,99,108,97,115,115,61
-,34,32,111,110,99,104,97,110,103,101,61,34,41,46,97,100,100,67,108,97,115,115,40
-,105,110,116,101,114,97,99,116,105,111,110,79,110,101,32,111,102,32,116,104,101,
-32,100,97,117,103,104,116,101,114,32,111,102,97,99,99,101,115,115,111,114,105,
-101,115,98,114,97,110,99,104,101,115,32,111,102,13,10,60,100,105,118,32,105,100,
-61,34,116,104,101,32,108,97,114,103,101,115,116,100,101,99,108,97,114,97,116,105
-,111,110,114,101,103,117,108,97,116,105,111,110,115,73,110,102,111,114,109,97,
-116,105,111,110,116,114,97,110,115,108,97,116,105,111,110,100,111,99,117,109,101
-,110,116,97,114,121,105,110,32,111,114,100,101,114,32,116,111,34,62,10,60,104,
-101,97,100,62,10,60,34,32,104,101,105,103,104,116,61,34,49,97,99,114,111,115,115
-,32,116,104,101,32,111,114,105,101,110,116,97,116,105,111,110,41,59,60,47,115,99
-,114,105,112,116,62,105,109,112,108,101,109,101,110,116,101,100,99,97,110,32,98,
-101,32,115,101,101,110,116,104,101,114,101,32,119,97,115,32,97,100,101,109,111,
-110,115,116,114,97,116,101,99,111,110,116,97,105,110,101,114,34,62,99,111,110,
-110,101,99,116,105,111,110,115,116,104,101,32,66,114,105,116,105,115,104,119,97,
-115,32,119,114,105,116,116,101,110,33,105,109,112,111,114,116,97,110,116,59,112,
-120,59,32,109,97,114,103,105,110,45,102,111,108,108,111,119,101,100,32,98,121,97
-,98,105,108,105,116,121,32,116,111,32,99,111,109,112,108,105,99,97,116,101,100,
-100,117,114,105,110,103,32,116,104,101,32,105,109,109,105,103,114,97,116,105,111
-,110,97,108,115,111,32,99,97,108,108,101,100,60,104,52,32,99,108,97,115,115,61,
-34,100,105,115,116,105,110,99,116,105,111,110,114,101,112,108,97,99,101,100,32,
-98,121,103,111,118,101,114,110,109,101,110,116,115,108,111,99,97,116,105,111,110
-,32,111,102,105,110,32,78,111,118,101,109,98,101,114,119,104,101,116,104,101,114
-,32,116,104,101,60,47,112,62,10,60,47,100,105,118,62,97,99,113,117,105,115,105,
-116,105,111,110,99,97,108,108,101,100,32,116,104,101,32,112,101,114,115,101,99,
-117,116,105,111,110,100,101,115,105,103,110,97,116,105,111,110,123,102,111,110,
-116,45,115,105,122,101,58,97,112,112,101,97,114,101,100,32,105,110,105,110,118,
-101,115,116,105,103,97,116,101,101,120,112,101,114,105,101,110,99,101,100,109,
-111,115,116,32,108,105,107,101,108,121,119,105,100,101,108,121,32,117,115,101,
-100,100,105,115,99,117,115,115,105,111,110,115,112,114,101,115,101,110,99,101,32
-,111,102,32,40,100,111,99,117,109,101,110,116,46,101,120,116,101,110,115,105,118
-,101,108,121,73,116,32,104,97,115,32,98,101,101,110,105,116,32,100,111,101,115,
-32,110,111,116,99,111,110,116,114,97,114,121,32,116,111,105,110,104,97,98,105,
-116,97,110,116,115,105,109,112,114,111,118,101,109,101,110,116,115,99,104,111,
-108,97,114,115,104,105,112,99,111,110,115,117,109,112,116,105,111,110,105,110,
-115,116,114,117,99,116,105,111,110,102,111,114,32,101,120,97,109,112,108,101,111
-,110,101,32,111,114,32,109,111,114,101,112,120,59,32,112,97,100,100,105,110,103,
-116,104,101,32,99,117,114,114,101,110,116,97,32,115,101,114,105,101,115,32,111,
-102,97,114,101,32,117,115,117,97,108,108,121,114,111,108,101,32,105,110,32,116,
-104,101,112,114,101,118,105,111,117,115,108,121,32,100,101,114,105,118,97,116,
-105,118,101,115,101,118,105,100,101,110,99,101,32,111,102,101,120,112,101,114,
-105,101,110,99,101,115,99,111,108,111,114,115,99,104,101,109,101,115,116,97,116,
-101,100,32,116,104,97,116,99,101,114,116,105,102,105,99,97,116,101,60,47,97,62,
-60,47,100,105,118,62,10,32,115,101,108,101,99,116,101,100,61,34,104,105,103,104,
-32,115,99,104,111,111,108,114,101,115,112,111,110,115,101,32,116,111,99,111,109,
-102,111,114,116,97,98,108,101,97,100,111,112,116,105,111,110,32,111,102,116,104,
-114,101,101,32,121,101,97,114,115,116,104,101,32,99,111,117,110,116,114,121,105,
-110,32,70,101,98,114,117,97,114,121,115,111,32,116,104,97,116,32,116,104,101,112
-,101,111,112,108,101,32,119,104,111,32,112,114,111,118,105,100,101,100,32,98,121
-,60,112,97,114,97,109,32,110,97,109,101,97,102,102,101,99,116,101,100,32,98,121,
-105,110,32,116,101,114,109,115,32,111,102,97,112,112,111,105,110,116,109,101,110
-,116,73,83,79,45,56,56,53,57,45,49,34,119,97,115,32,98,111,114,110,32,105,110,
-104,105,115,116,111,114,105,99,97,108,32,114,101,103,97,114,100,101,100,32,97,
-115,109,101,97,115,117,114,101,109,101,110,116,105,115,32,98,97,115,101,100,32,
-111,110,32,97,110,100,32,111,116,104,101,114,32,58,32,102,117,110,99,116,105,111
-,110,40,115,105,103,110,105,102,105,99,97,110,116,99,101,108,101,98,114,97,116,
-105,111,110,116,114,97,110,115,109,105,116,116,101,100,47,106,115,47,106,113,117
-,101,114,121,46,105,115,32,107,110,111,119,110,32,97,115,116,104,101,111,114,101
-,116,105,99,97,108,32,116,97,98,105,110,100,101,120,61,34,105,116,32,99,111,117,
-108,100,32,98,101,60,110,111,115,99,114,105,112,116,62,10,104,97,118,105,110,103
-,32,98,101,101,110,13,10,60,104,101,97,100,62,13,10,60,32,38,113,117,111,116,59,
-84,104,101,32,99,111,109,112,105,108,97,116,105,111,110,104,101,32,104,97,100,32
-,98,101,101,110,112,114,111,100,117,99,101,100,32,98,121,112,104,105,108,111,115
-,111,112,104,101,114,99,111,110,115,116,114,117,99,116,101,100,105,110,116,101,
-110,100,101,100,32,116,111,97,109,111,110,103,32,111,116,104,101,114,99,111,109,
-112,97,114,101,100,32,116,111,116,111,32,115,97,121,32,116,104,97,116,69,110,103
-,105,110,101,101,114,105,110,103,97,32,100,105,102,102,101,114,101,110,116,114,
-101,102,101,114,114,101,100,32,116,111,100,105,102,102,101,114,101,110,99,101,
-115,98,101,108,105,101,102,32,116,104,97,116,112,104,111,116,111,103,114,97,112,
-104,115,105,100,101,110,116,105,102,121,105,110,103,72,105,115,116,111,114,121,
-32,111,102,32,82,101,112,117,98,108,105,99,32,111,102,110,101,99,101,115,115,97,
-114,105,108,121,112,114,111,98,97,98,105,108,105,116,121,116,101,99,104,110,105,
-99,97,108,108,121,108,101,97,118,105,110,103,32,116,104,101,115,112,101,99,116,
-97,99,117,108,97,114,102,114,97,99,116,105,111,110,32,111,102,101,108,101,99,116
-,114,105,99,105,116,121,104,101,97,100,32,111,102,32,116,104,101,114,101,115,116
-,97,117,114,97,110,116,115,112,97,114,116,110,101,114,115,104,105,112,101,109,
-112,104,97,115,105,115,32,111,110,109,111,115,116,32,114,101,99,101,110,116,115,
-104,97,114,101,32,119,105,116,104,32,115,97,121,105,110,103,32,116,104,97,116,
-102,105,108,108,101,100,32,119,105,116,104,100,101,115,105,103,110,101,100,32,
-116,111,105,116,32,105,115,32,111,102,116,101,110,34,62,60,47,105,102,114,97,109
-,101,62,97,115,32,102,111,108,108,111,119,115,58,109,101,114,103,101,100,32,119,
-105,116,104,116,104,114,111,117,103,104,32,116,104,101,99,111,109,109,101,114,99
-,105,97,108,32,112,111,105,110,116,101,100,32,111,117,116,111,112,112,111,114,
-116,117,110,105,116,121,118,105,101,119,32,111,102,32,116,104,101,114,101,113,
-117,105,114,101,109,101,110,116,100,105,118,105,115,105,111,110,32,111,102,112,
-114,111,103,114,97,109,109,105,110,103,104,101,32,114,101,99,101,105,118,101,100
-,115,101,116,73,110,116,101,114,118,97,108,34,62,60,47,115,112,97,110,62,60,47,
-105,110,32,78,101,119,32,89,111,114,107,97,100,100,105,116,105,111,110,97,108,32
-,99,111,109,112,114,101,115,115,105,111,110,10,10,60,100,105,118,32,105,100,61,
-34,105,110,99,111,114,112,111,114,97,116,101,59,60,47,115,99,114,105,112,116,62,
-60,97,116,116,97,99,104,69,118,101,110,116,98,101,99,97,109,101,32,116,104,101,
-32,34,32,116,97,114,103,101,116,61,34,95,99,97,114,114,105,101,100,32,111,117,
-116,83,111,109,101,32,111,102,32,116,104,101,115,99,105,101,110,99,101,32,97,110
-,100,116,104,101,32,116,105,109,101,32,111,102,67,111,110,116,97,105,110,101,114
-,34,62,109,97,105,110,116,97,105,110,105,110,103,67,104,114,105,115,116,111,112,
-104,101,114,77,117,99,104,32,111,102,32,116,104,101,119,114,105,116,105,110,103,
-115,32,111,102,34,32,104,101,105,103,104,116,61,34,50,115,105,122,101,32,111,102
-,32,116,104,101,118,101,114,115,105,111,110,32,111,102,32,109,105,120,116,117,
-114,101,32,111,102,32,98,101,116,119,101,101,110,32,116,104,101,69,120,97,109,
-112,108,101,115,32,111,102,101,100,117,99,97,116,105,111,110,97,108,99,111,109,
-112,101,116,105,116,105,118,101,32,111,110,115,117,98,109,105,116,61,34,100,105,
-114,101,99,116,111,114,32,111,102,100,105,115,116,105,110,99,116,105,118,101,47,
-68,84,68,32,88,72,84,77,76,32,114,101,108,97,116,105,110,103,32,116,111,116,101,
-110,100,101,110,99,121,32,116,111,112,114,111,118,105,110,99,101,32,111,102,119,
-104,105,99,104,32,119,111,117,108,100,100,101,115,112,105,116,101,32,116,104,101
-,115,99,105,101,110,116,105,102,105,99,32,108,101,103,105,115,108,97,116,117,114
-,101,46,105,110,110,101,114,72,84,77,76,32,97,108,108,101,103,97,116,105,111,110
-,115,65,103,114,105,99,117,108,116,117,114,101,119,97,115,32,117,115,101,100,32,
-105,110,97,112,112,114,111,97,99,104,32,116,111,105,110,116,101,108,108,105,103,
-101,110,116,121,101,97,114,115,32,108,97,116,101,114,44,115,97,110,115,45,115,
-101,114,105,102,100,101,116,101,114,109,105,110,105,110,103,80,101,114,102,111,
-114,109,97,110,99,101,97,112,112,101,97,114,97,110,99,101,115,44,32,119,104,105,
-99,104,32,105,115,32,102,111,117,110,100,97,116,105,111,110,115,97,98,98,114,101
-,118,105,97,116,101,100,104,105,103,104,101,114,32,116,104,97,110,115,32,102,114
-,111,109,32,116,104,101,32,105,110,100,105,118,105,100,117,97,108,32,99,111,109,
-112,111,115,101,100,32,111,102,115,117,112,112,111,115,101,100,32,116,111,99,108
-,97,105,109,115,32,116,104,97,116,97,116,116,114,105,98,117,116,105,111,110,102,
-111,110,116,45,115,105,122,101,58,49,101,108,101,109,101,110,116,115,32,111,102,
-72,105,115,116,111,114,105,99,97,108,32,104,105,115,32,98,114,111,116,104,101,
-114,97,116,32,116,104,101,32,116,105,109,101,97,110,110,105,118,101,114,115,97,
-114,121,103,111,118,101,114,110,101,100,32,98,121,114,101,108,97,116,101,100,32,
-116,111,32,117,108,116,105,109,97,116,101,108,121,32,105,110,110,111,118,97,116,
-105,111,110,115,105,116,32,105,115,32,115,116,105,108,108,99,97,110,32,111,110,
-108,121,32,98,101,100,101,102,105,110,105,116,105,111,110,115,116,111,71,77,84,
-83,116,114,105,110,103,65,32,110,117,109,98,101,114,32,111,102,105,109,103,32,99
-,108,97,115,115,61,34,69,118,101,110,116,117,97,108,108,121,44,119,97,115,32,99,
-104,97,110,103,101,100,111,99,99,117,114,114,101,100,32,105,110,110,101,105,103,
-104,98,111,114,105,110,103,100,105,115,116,105,110,103,117,105,115,104,119,104,
-101,110,32,104,101,32,119,97,115,105,110,116,114,111,100,117,99,105,110,103,116,
-101,114,114,101,115,116,114,105,97,108,77,97,110,121,32,111,102,32,116,104,101,
-97,114,103,117,101,115,32,116,104,97,116,97,110,32,65,109,101,114,105,99,97,110,
-99,111,110,113,117,101,115,116,32,111,102,119,105,100,101,115,112,114,101,97,100
-,32,119,101,114,101,32,107,105,108,108,101,100,115,99,114,101,101,110,32,97,110,
-100,32,73,110,32,111,114,100,101,114,32,116,111,101,120,112,101,99,116,101,100,
-32,116,111,100,101,115,99,101,110,100,97,110,116,115,97,114,101,32,108,111,99,97
-,116,101,100,108,101,103,105,115,108,97,116,105,118,101,103,101,110,101,114,97,
-116,105,111,110,115,32,98,97,99,107,103,114,111,117,110,100,109,111,115,116,32,
-112,101,111,112,108,101,121,101,97,114,115,32,97,102,116,101,114,116,104,101,114
-,101,32,105,115,32,110,111,116,104,101,32,104,105,103,104,101,115,116,102,114,
-101,113,117,101,110,116,108,121,32,116,104,101,121,32,100,111,32,110,111,116,97,
-114,103,117,101,100,32,116,104,97,116,115,104,111,119,101,100,32,116,104,97,116,
-112,114,101,100,111,109,105,110,97,110,116,116,104,101,111,108,111,103,105,99,97
-,108,98,121,32,116,104,101,32,116,105,109,101,99,111,110,115,105,100,101,114,105
-,110,103,115,104,111,114,116,45,108,105,118,101,100,60,47,115,112,97,110,62,60,
-47,97,62,99,97,110,32,98,101,32,117,115,101,100,118,101,114,121,32,108,105,116,
-116,108,101,111,110,101,32,111,102,32,116,104,101,32,104,97,100,32,97,108,114,
-101,97,100,121,105,110,116,101,114,112,114,101,116,101,100,99,111,109,109,117,
-110,105,99,97,116,101,102,101,97,116,117,114,101,115,32,111,102,103,111,118,101,
-114,110,109,101,110,116,44,60,47,110,111,115,99,114,105,112,116,62,101,110,116,
-101,114,101,100,32,116,104,101,34,32,104,101,105,103,104,116,61,34,51,73,110,100
-,101,112,101,110,100,101,110,116,112,111,112,117,108,97,116,105,111,110,115,108,
-97,114,103,101,45,115,99,97,108,101,46,32,65,108,116,104,111,117,103,104,32,117,
-115,101,100,32,105,110,32,116,104,101,100,101,115,116,114,117,99,116,105,111,110
-,112,111,115,115,105,98,105,108,105,116,121,115,116,97,114,116,105,110,103,32,
-105,110,116,119,111,32,111,114,32,109,111,114,101,101,120,112,114,101,115,115,
-105,111,110,115,115,117,98,111,114,100,105,110,97,116,101,108,97,114,103,101,114
-,32,116,104,97,110,104,105,115,116,111,114,121,32,97,110,100,60,47,111,112,116,
-105,111,110,62,13,10,67,111,110,116,105,110,101,110,116,97,108,101,108,105,109,
-105,110,97,116,105,110,103,119,105,108,108,32,110,111,116,32,98,101,112,114,97,
-99,116,105,99,101,32,111,102,105,110,32,102,114,111,110,116,32,111,102,115,105,
-116,101,32,111,102,32,116,104,101,101,110,115,117,114,101,32,116,104,97,116,116,
-111,32,99,114,101,97,116,101,32,97,109,105,115,115,105,115,115,105,112,112,105,
-112,111,116,101,110,116,105,97,108,108,121,111,117,116,115,116,97,110,100,105,
-110,103,98,101,116,116,101,114,32,116,104,97,110,119,104,97,116,32,105,115,32,
-110,111,119,115,105,116,117,97,116,101,100,32,105,110,109,101,116,97,32,110,97,
-109,101,61,34,84,114,97,100,105,116,105,111,110,97,108,115,117,103,103,101,115,
-116,105,111,110,115,84,114,97,110,115,108,97,116,105,111,110,116,104,101,32,102,
-111,114,109,32,111,102,97,116,109,111,115,112,104,101,114,105,99,105,100,101,111
-,108,111,103,105,99,97,108,101,110,116,101,114,112,114,105,115,101,115,99,97,108
-,99,117,108,97,116,105,110,103,101,97,115,116,32,111,102,32,116,104,101,114,101,
-109,110,97,110,116,115,32,111,102,112,108,117,103,105,110,115,112,97,103,101,47,
-105,110,100,101,120,46,112,104,112,63,114,101,109,97,105,110,101,100,32,105,110,
-116,114,97,110,115,102,111,114,109,101,100,72,101,32,119,97,115,32,97,108,115,
-111,119,97,115,32,97,108,114,101,97,100,121,115,116,97,116,105,115,116,105,99,97
-,108,105,110,32,102,97,118,111,114,32,111,102,77,105,110,105,115,116,114,121,32,
-111,102,109,111,118,101,109,101,110,116,32,111,102,102,111,114,109,117,108,97,
-116,105,111,110,105,115,32,114,101,113,117,105,114,101,100,60,108,105,110,107,32
-,114,101,108,61,34,84,104,105,115,32,105,115,32,116,104,101,32,60,97,32,104,114,
-101,102,61,34,47,112,111,112,117,108,97,114,105,122,101,100,105,110,118,111,108,
-118,101,100,32,105,110,97,114,101,32,117,115,101,100,32,116,111,97,110,100,32,
-115,101,118,101,114,97,108,109,97,100,101,32,98,121,32,116,104,101,115,101,101,
-109,115,32,116,111,32,98,101,108,105,107,101,108,121,32,116,104,97,116,80,97,108
-,101,115,116,105,110,105,97,110,110,97,109,101,100,32,97,102,116,101,114,105,116
-,32,104,97,100,32,98,101,101,110,109,111,115,116,32,99,111,109,109,111,110,116,
-111,32,114,101,102,101,114,32,116,111,98,117,116,32,116,104,105,115,32,105,115,
-99,111,110,115,101,99,117,116,105,118,101,116,101,109,112,111,114,97,114,105,108
-,121,73,110,32,103,101,110,101,114,97,108,44,99,111,110,118,101,110,116,105,111,
-110,115,116,97,107,101,115,32,112,108,97,99,101,115,117,98,100,105,118,105,115,
-105,111,110,116,101,114,114,105,116,111,114,105,97,108,111,112,101,114,97,116,
-105,111,110,97,108,112,101,114,109,97,110,101,110,116,108,121,119,97,115,32,108,
-97,114,103,101,108,121,111,117,116,98,114,101,97,107,32,111,102,105,110,32,116,
-104,101,32,112,97,115,116,102,111,108,108,111,119,105,110,103,32,97,32,120,109,
-108,110,115,58,111,103,61,34,62,60,97,32,99,108,97,115,115,61,34,99,108,97,115,
-115,61,34,116,101,120,116,67,111,110,118,101,114,115,105,111,110,32,109,97,121,
-32,98,101,32,117,115,101,100,109,97,110,117,102,97,99,116,117,114,101,97,102,116
-,101,114,32,98,101,105,110,103,99,108,101,97,114,102,105,120,34,62,10,113,117,
-101,115,116,105,111,110,32,111,102,119,97,115,32,101,108,101,99,116,101,100,116,
-111,32,98,101,99,111,109,101,32,97,98,101,99,97,117,115,101,32,111,102,32,115,
-111,109,101,32,112,101,111,112,108,101,105,110,115,112,105,114,101,100,32,98,121
-,115,117,99,99,101,115,115,102,117,108,32,97,32,116,105,109,101,32,119,104,101,
-110,109,111,114,101,32,99,111,109,109,111,110,97,109,111,110,103,115,116,32,116,
-104,101,97,110,32,111,102,102,105,99,105,97,108,119,105,100,116,104,58,49,48,48,
-37,59,116,101,99,104,110,111,108,111,103,121,44,119,97,115,32,97,100,111,112,116
-,101,100,116,111,32,107,101,101,112,32,116,104,101,115,101,116,116,108,101,109,
-101,110,116,115,108,105,118,101,32,98,105,114,116,104,115,105,110,100,101,120,46
-,104,116,109,108,34,67,111,110,110,101,99,116,105,99,117,116,97,115,115,105,103,
-110,101,100,32,116,111,38,97,109,112,59,116,105,109,101,115,59,97,99,99,111,117,
-110,116,32,102,111,114,97,108,105,103,110,61,114,105,103,104,116,116,104,101,32,
-99,111,109,112,97,110,121,97,108,119,97,121,115,32,98,101,101,110,114,101,116,
-117,114,110,101,100,32,116,111,105,110,118,111,108,118,101,109,101,110,116,66,
-101,99,97,117,115,101,32,116,104,101,116,104,105,115,32,112,101,114,105,111,100,
-34,32,110,97,109,101,61,34,113,34,32,99,111,110,102,105,110,101,100,32,116,111,
-97,32,114,101,115,117,108,116,32,111,102,118,97,108,117,101,61,34,34,32,47,62,
-105,115,32,97,99,116,117,97,108,108,121,69,110,118,105,114,111,110,109,101,110,
-116,13,10,60,47,104,101,97,100,62,13,10,67,111,110,118,101,114,115,101,108,121,
-44,62,10,60,100,105,118,32,105,100,61,34,48,34,32,119,105,100,116,104,61,34,49,
-105,115,32,112,114,111,98,97,98,108,121,104,97,118,101,32,98,101,99,111,109,101,
-99,111,110,116,114,111,108,108,105,110,103,116,104,101,32,112,114,111,98,108,101
-,109,99,105,116,105,122,101,110,115,32,111,102,112,111,108,105,116,105,99,105,97
-,110,115,114,101,97,99,104,101,100,32,116,104,101,97,115,32,101,97,114,108,121,
-32,97,115,58,110,111,110,101,59,32,111,118,101,114,60,116,97,98,108,101,32,99,
-101,108,108,118,97,108,105,100,105,116,121,32,111,102,100,105,114,101,99,116,108
-,121,32,116,111,111,110,109,111,117,115,101,100,111,119,110,119,104,101,114,101,
-32,105,116,32,105,115,119,104,101,110,32,105,116,32,119,97,115,109,101,109,98,
-101,114,115,32,111,102,32,114,101,108,97,116,105,111,110,32,116,111,97,99,99,111
-,109,109,111,100,97,116,101,97,108,111,110,103,32,119,105,116,104,32,73,110,32,
-116,104,101,32,108,97,116,101,116,104,101,32,69,110,103,108,105,115,104,100,101,
-108,105,99,105,111,117,115,34,62,116,104,105,115,32,105,115,32,110,111,116,116,
-104,101,32,112,114,101,115,101,110,116,105,102,32,116,104,101,121,32,97,114,101,
-97,110,100,32,102,105,110,97,108,108,121,97,32,109,97,116,116,101,114,32,111,102
-,13,10,9,60,47,100,105,118,62,13,10,13,10,60,47,115,99,114,105,112,116,62,102,97
-,115,116,101,114,32,116,104,97,110,109,97,106,111,114,105,116,121,32,111,102,97,
-102,116,101,114,32,119,104,105,99,104,99,111,109,112,97,114,97,116,105,118,101,
-116,111,32,109,97,105,110,116,97,105,110,105,109,112,114,111,118,101,32,116,104,
-101,97,119,97,114,100,101,100,32,116,104,101,101,114,34,32,99,108,97,115,115,61,
-34,102,114,97,109,101,98,111,114,100,101,114,114,101,115,116,111,114,97,116,105,
-111,110,105,110,32,116,104,101,32,115,97,109,101,97,110,97,108,121,115,105,115,
-32,111,102,116,104,101,105,114,32,102,105,114,115,116,68,117,114,105,110,103,32,
-116,104,101,32,99,111,110,116,105,110,101,110,116,97,108,115,101,113,117,101,110
-,99,101,32,111,102,102,117,110,99,116,105,111,110,40,41,123,102,111,110,116,45,
-115,105,122,101,58,32,119,111,114,107,32,111,110,32,116,104,101,60,47,115,99,114
-,105,112,116,62,10,60,98,101,103,105,110,115,32,119,105,116,104,106,97,118,97,
-115,99,114,105,112,116,58,99,111,110,115,116,105,116,117,101,110,116,119,97,115,
-32,102,111,117,110,100,101,100,101,113,117,105,108,105,98,114,105,117,109,97,115
-,115,117,109,101,32,116,104,97,116,105,115,32,103,105,118,101,110,32,98,121,110,
-101,101,100,115,32,116,111,32,98,101,99,111,111,114,100,105,110,97,116,101,115,
-116,104,101,32,118,97,114,105,111,117,115,97,114,101,32,112,97,114,116,32,111,
-102,111,110,108,121,32,105,110,32,116,104,101,115,101,99,116,105,111,110,115,32,
-111,102,105,115,32,97,32,99,111,109,109,111,110,116,104,101,111,114,105,101,115,
-32,111,102,100,105,115,99,111,118,101,114,105,101,115,97,115,115,111,99,105,97,
-116,105,111,110,101,100,103,101,32,111,102,32,116,104,101,115,116,114,101,110,
-103,116,104,32,111,102,112,111,115,105,116,105,111,110,32,105,110,112,114,101,
-115,101,110,116,45,100,97,121,117,110,105,118,101,114,115,97,108,108,121,116,111
-,32,102,111,114,109,32,116,104,101,98,117,116,32,105,110,115,116,101,97,100,99,
-111,114,112,111,114,97,116,105,111,110,97,116,116,97,99,104,101,100,32,116,111,
-105,115,32,99,111,109,109,111,110,108,121,114,101,97,115,111,110,115,32,102,111,
-114,32,38,113,117,111,116,59,116,104,101,32,99,97,110,32,98,101,32,109,97,100,
-101,119,97,115,32,97,98,108,101,32,116,111,119,104,105,99,104,32,109,101,97,110,
-115,98,117,116,32,100,105,100,32,110,111,116,111,110,77,111,117,115,101,79,118,
-101,114,97,115,32,112,111,115,115,105,98,108,101,111,112,101,114,97,116,101,100,
-32,98,121,99,111,109,105,110,103,32,102,114,111,109,116,104,101,32,112,114,105,
-109,97,114,121,97,100,100,105,116,105,111,110,32,111,102,102,111,114,32,115,101,
-118,101,114,97,108,116,114,97,110,115,102,101,114,114,101,100,97,32,112,101,114,
-105,111,100,32,111,102,97,114,101,32,97,98,108,101,32,116,111,104,111,119,101,
-118,101,114,44,32,105,116,115,104,111,117,108,100,32,104,97,118,101,109,117,99,
-104,32,108,97,114,103,101,114,10,9,60,47,115,99,114,105,112,116,62,97,100,111,
-112,116,101,100,32,116,104,101,112,114,111,112,101,114,116,121,32,111,102,100,
-105,114,101,99,116,101,100,32,98,121,101,102,102,101,99,116,105,118,101,108,121,
-119,97,115,32,98,114,111,117,103,104,116,99,104,105,108,100,114,101,110,32,111,
-102,80,114,111,103,114,97,109,109,105,110,103,108,111,110,103,101,114,32,116,104
-,97,110,109,97,110,117,115,99,114,105,112,116,115,119,97,114,32,97,103,97,105,
-110,115,116,98,121,32,109,101,97,110,115,32,111,102,97,110,100,32,109,111,115,
-116,32,111,102,115,105,109,105,108,97,114,32,116,111,32,112,114,111,112,114,105,
-101,116,97,114,121,111,114,105,103,105,110,97,116,105,110,103,112,114,101,115,
-116,105,103,105,111,117,115,103,114,97,109,109,97,116,105,99,97,108,101,120,112,
-101,114,105,101,110,99,101,46,116,111,32,109,97,107,101,32,116,104,101,73,116,32
-,119,97,115,32,97,108,115,111,105,115,32,102,111,117,110,100,32,105,110,99,111,
-109,112,101,116,105,116,111,114,115,105,110,32,116,104,101,32,85,46,83,46,114,
-101,112,108,97,99,101,32,116,104,101,98,114,111,117,103,104,116,32,116,104,101,
-99,97,108,99,117,108,97,116,105,111,110,102,97,108,108,32,111,102,32,116,104,101
-,116,104,101,32,103,101,110,101,114,97,108,112,114,97,99,116,105,99,97,108,108,
-121,105,110,32,104,111,110,111,114,32,111,102,114,101,108,101,97,115,101,100,32,
-105,110,114,101,115,105,100,101,110,116,105,97,108,97,110,100,32,115,111,109,101
-,32,111,102,107,105,110,103,32,111,102,32,116,104,101,114,101,97,99,116,105,111,
-110,32,116,111,49,115,116,32,69,97,114,108,32,111,102,99,117,108,116,117,114,101
-,32,97,110,100,112,114,105,110,99,105,112,97,108,108,121,60,47,116,105,116,108,
-101,62,10,32,32,116,104,101,121,32,99,97,110,32,98,101,98,97,99,107,32,116,111,
-32,116,104,101,115,111,109,101,32,111,102,32,104,105,115,101,120,112,111,115,117
-,114,101,32,116,111,97,114,101,32,115,105,109,105,108,97,114,102,111,114,109,32,
-111,102,32,116,104,101,97,100,100,70,97,118,111,114,105,116,101,99,105,116,105,
-122,101,110,115,104,105,112,112,97,114,116,32,105,110,32,116,104,101,112,101,111
-,112,108,101,32,119,105,116,104,105,110,32,112,114,97,99,116,105,99,101,116,111,
-32,99,111,110,116,105,110,117,101,38,97,109,112,59,109,105,110,117,115,59,97,112
-,112,114,111,118,101,100,32,98,121,32,116,104,101,32,102,105,114,115,116,32,97,
-108,108,111,119,101,100,32,116,104,101,97,110,100,32,102,111,114,32,116,104,101,
-102,117,110,99,116,105,111,110,105,110,103,112,108,97,121,105,110,103,32,116,104
-,101,115,111,108,117,116,105,111,110,32,116,111,104,101,105,103,104,116,61,34,48
-,34,32,105,110,32,104,105,115,32,98,111,111,107,109,111,114,101,32,116,104,97,
-110,32,97,102,111,108,108,111,119,115,32,116,104,101,99,114,101,97,116,101,100,
-32,116,104,101,112,114,101,115,101,110,99,101,32,105,110,38,110,98,115,112,59,60
-,47,116,100,62,110,97,116,105,111,110,97,108,105,115,116,116,104,101,32,105,100,
-101,97,32,111,102,97,32,99,104,97,114,97,99,116,101,114,119,101,114,101,32,102,
-111,114,99,101,100,32,99,108,97,115,115,61,34,98,116,110,100,97,121,115,32,111,
-102,32,116,104,101,102,101,97,116,117,114,101,100,32,105,110,115,104,111,119,105
-,110,103,32,116,104,101,105,110,116,101,114,101,115,116,32,105,110,105,110,32,
-112,108,97,99,101,32,111,102,116,117,114,110,32,111,102,32,116,104,101,116,104,
-101,32,104,101,97,100,32,111,102,76,111,114,100,32,111,102,32,116,104,101,112,
-111,108,105,116,105,99,97,108,108,121,104,97,115,32,105,116,115,32,111,119,110,
-69,100,117,99,97,116,105,111,110,97,108,97,112,112,114,111,118,97,108,32,111,102
-,115,111,109,101,32,111,102,32,116,104,101,101,97,99,104,32,111,116,104,101,114,
-44,98,101,104,97,118,105,111,114,32,111,102,97,110,100,32,98,101,99,97,117,115,
-101,97,110,100,32,97,110,111,116,104,101,114,97,112,112,101,97,114,101,100,32,
-111,110,114,101,99,111,114,100,101,100,32,105,110,98,108,97,99,107,38,113,117,
-111,116,59,109,97,121,32,105,110,99,108,117,100,101,116,104,101,32,119,111,114,
-108,100,39,115,99,97,110,32,108,101,97,100,32,116,111,114,101,102,101,114,115,32
-,116,111,32,97,98,111,114,100,101,114,61,34,48,34,32,103,111,118,101,114,110,109
-,101,110,116,32,119,105,110,110,105,110,103,32,116,104,101,114,101,115,117,108,
-116,101,100,32,105,110,32,119,104,105,108,101,32,116,104,101,32,87,97,115,104,
-105,110,103,116,111,110,44,116,104,101,32,115,117,98,106,101,99,116,99,105,116,
-121,32,105,110,32,116,104,101,62,60,47,100,105,118,62,13,10,9,9,114,101,102,108,
-101,99,116,32,116,104,101,116,111,32,99,111,109,112,108,101,116,101,98,101,99,97
-,109,101,32,109,111,114,101,114,97,100,105,111,97,99,116,105,118,101,114,101,106
-,101,99,116,101,100,32,98,121,119,105,116,104,111,117,116,32,97,110,121,104,105,
-115,32,102,97,116,104,101,114,44,119,104,105,99,104,32,99,111,117,108,100,99,111
-,112,121,32,111,102,32,116,104,101,116,111,32,105,110,100,105,99,97,116,101,97,
-32,112,111,108,105,116,105,99,97,108,97,99,99,111,117,110,116,115,32,111,102,99,
-111,110,115,116,105,116,117,116,101,115,119,111,114,107,101,100,32,119,105,116,
-104,101,114,60,47,97,62,60,47,108,105,62,111,102,32,104,105,115,32,108,105,102,
-101,97,99,99,111,109,112,97,110,105,101,100,99,108,105,101,110,116,87,105,100,
-116,104,112,114,101,118,101,110,116,32,116,104,101,76,101,103,105,115,108,97,116
-,105,118,101,100,105,102,102,101,114,101,110,116,108,121,116,111,103,101,116,104
-,101,114,32,105,110,104,97,115,32,115,101,118,101,114,97,108,102,111,114,32,97,
-110,111,116,104,101,114,116,101,120,116,32,111,102,32,116,104,101,102,111,117,
-110,100,101,100,32,116,104,101,101,32,119,105,116,104,32,116,104,101,32,105,115,
-32,117,115,101,100,32,102,111,114,99,104,97,110,103,101,100,32,116,104,101,117,
-115,117,97,108,108,121,32,116,104,101,112,108,97,99,101,32,119,104,101,114,101,
-119,104,101,114,101,97,115,32,116,104,101,62,32,60,97,32,104,114,101,102,61,34,
-34,62,60,97,32,104,114,101,102,61,34,116,104,101,109,115,101,108,118,101,115,44,
-97,108,116,104,111,117,103,104,32,104,101,116,104,97,116,32,99,97,110,32,98,101,
-116,114,97,100,105,116,105,111,110,97,108,114,111,108,101,32,111,102,32,116,104,
-101,97,115,32,97,32,114,101,115,117,108,116,114,101,109,111,118,101,67,104,105,
-108,100,100,101,115,105,103,110,101,100,32,98,121,119,101,115,116,32,111,102,32,
-116,104,101,83,111,109,101,32,112,101,111,112,108,101,112,114,111,100,117,99,116
-,105,111,110,44,115,105,100,101,32,111,102,32,116,104,101,110,101,119,115,108,
-101,116,116,101,114,115,117,115,101,100,32,98,121,32,116,104,101,100,111,119,110
-,32,116,111,32,116,104,101,97,99,99,101,112,116,101,100,32,98,121,108,105,118,
-101,32,105,110,32,116,104,101,97,116,116,101,109,112,116,115,32,116,111,111,117,
-116,115,105,100,101,32,116,104,101,102,114,101,113,117,101,110,99,105,101,115,72
-,111,119,101,118,101,114,44,32,105,110,112,114,111,103,114,97,109,109,101,114,
-115,97,116,32,108,101,97,115,116,32,105,110,97,112,112,114,111,120,105,109,97,
-116,101,97,108,116,104,111,117,103,104,32,105,116,119,97,115,32,112,97,114,116,
-32,111,102,97,110,100,32,118,97,114,105,111,117,115,71,111,118,101,114,110,111,
-114,32,111,102,116,104,101,32,97,114,116,105,99,108,101,116,117,114,110,101,100,
-32,105,110,116,111,62,60,97,32,104,114,101,102,61,34,47,116,104,101,32,101,99,
-111,110,111,109,121,105,115,32,116,104,101,32,109,111,115,116,109,111,115,116,32
-,119,105,100,101,108,121,119,111,117,108,100,32,108,97,116,101,114,97,110,100,32
-,112,101,114,104,97,112,115,114,105,115,101,32,116,111,32,116,104,101,111,99,99,
-117,114,115,32,119,104,101,110,117,110,100,101,114,32,119,104,105,99,104,99,111,
-110,100,105,116,105,111,110,115,46,116,104,101,32,119,101,115,116,101,114,110,
-116,104,101,111,114,121,32,116,104,97,116,105,115,32,112,114,111,100,117,99,101,
-100,116,104,101,32,99,105,116,121,32,111,102,105,110,32,119,104,105,99,104,32,
-104,101,115,101,101,110,32,105,110,32,116,104,101,116,104,101,32,99,101,110,116,
-114,97,108,98,117,105,108,100,105,110,103,32,111,102,109,97,110,121,32,111,102,
-32,104,105,115,97,114,101,97,32,111,102,32,116,104,101,105,115,32,116,104,101,32
-,111,110,108,121,109,111,115,116,32,111,102,32,116,104,101,109,97,110,121,32,111
-,102,32,116,104,101,116,104,101,32,87,101,115,116,101,114,110,84,104,101,114,101
-,32,105,115,32,110,111,101,120,116,101,110,100,101,100,32,116,111,83,116,97,116,
-105,115,116,105,99,97,108,99,111,108,115,112,97,110,61,50,32,124,115,104,111,114
-,116,32,115,116,111,114,121,112,111,115,115,105,98,108,101,32,116,111,116,111,
-112,111,108,111,103,105,99,97,108,99,114,105,116,105,99,97,108,32,111,102,114,
-101,112,111,114,116,101,100,32,116,111,97,32,67,104,114,105,115,116,105,97,110,
-100,101,99,105,115,105,111,110,32,116,111,105,115,32,101,113,117,97,108,32,116,
-111,112,114,111,98,108,101,109,115,32,111,102,84,104,105,115,32,99,97,110,32,98,
-101,109,101,114,99,104,97,110,100,105,115,101,102,111,114,32,109,111,115,116,32,
-111,102,110,111,32,101,118,105,100,101,110,99,101,101,100,105,116,105,111,110,
-115,32,111,102,101,108,101,109,101,110,116,115,32,105,110,38,113,117,111,116,59,
-46,32,84,104,101,99,111,109,47,105,109,97,103,101,115,47,119,104,105,99,104,32,
-109,97,107,101,115,116,104,101,32,112,114,111,99,101,115,115,114,101,109,97,105,
-110,115,32,116,104,101,108,105,116,101,114,97,116,117,114,101,44,105,115,32,97,
-32,109,101,109,98,101,114,116,104,101,32,112,111,112,117,108,97,114,116,104,101,
-32,97,110,99,105,101,110,116,112,114,111,98,108,101,109,115,32,105,110,116,105,
-109,101,32,111,102,32,116,104,101,100,101,102,101,97,116,101,100,32,98,121,98,
-111,100,121,32,111,102,32,116,104,101,97,32,102,101,119,32,121,101,97,114,115,
-109,117,99,104,32,111,102,32,116,104,101,116,104,101,32,119,111,114,107,32,111,
-102,67,97,108,105,102,111,114,110,105,97,44,115,101,114,118,101,100,32,97,115,32
-,97,103,111,118,101,114,110,109,101,110,116,46,99,111,110,99,101,112,116,115,32,
-111,102,109,111,118,101,109,101,110,116,32,105,110,9,9,60,100,105,118,32,105,100
-,61,34,105,116,34,32,118,97,108,117,101,61,34,108,97,110,103,117,97,103,101,32,
-111,102,97,115,32,116,104,101,121,32,97,114,101,112,114,111,100,117,99,101,100,
-32,105,110,105,115,32,116,104,97,116,32,116,104,101,101,120,112,108,97,105,110,
-32,116,104,101,100,105,118,62,60,47,100,105,118,62,10,72,111,119,101,118,101,114
-,32,116,104,101,108,101,97,100,32,116,111,32,116,104,101,9,60,97,32,104,114,101,
-102,61,34,47,119,97,115,32,103,114,97,110,116,101,100,112,101,111,112,108,101,32
-,104,97,118,101,99,111,110,116,105,110,117,97,108,108,121,119,97,115,32,115,101,
-101,110,32,97,115,97,110,100,32,114,101,108,97,116,101,100,116,104,101,32,114,
-111,108,101,32,111,102,112,114,111,112,111,115,101,100,32,98,121,111,102,32,116,
-104,101,32,98,101,115,116,101,97,99,104,32,111,116,104,101,114,46,67,111,110,115
-,116,97,110,116,105,110,101,112,101,111,112,108,101,32,102,114,111,109,100,105,
-97,108,101,99,116,115,32,111,102,116,111,32,114,101,118,105,115,105,111,110,119,
-97,115,32,114,101,110,97,109,101,100,97,32,115,111,117,114,99,101,32,111,102,116
-,104,101,32,105,110,105,116,105,97,108,108,97,117,110,99,104,101,100,32,105,110,
-112,114,111,118,105,100,101,32,116,104,101,116,111,32,116,104,101,32,119,101,115
-,116,119,104,101,114,101,32,116,104,101,114,101,97,110,100,32,115,105,109,105,
-108,97,114,98,101,116,119,101,101,110,32,116,119,111,105,115,32,97,108,115,111,
-32,116,104,101,69,110,103,108,105,115,104,32,97,110,100,99,111,110,100,105,116,
-105,111,110,115,44,116,104,97,116,32,105,116,32,119,97,115,101,110,116,105,116,
-108,101,100,32,116,111,116,104,101,109,115,101,108,118,101,115,46,113,117,97,110
-,116,105,116,121,32,111,102,114,97,110,115,112,97,114,101,110,99,121,116,104,101
-,32,115,97,109,101,32,97,115,116,111,32,106,111,105,110,32,116,104,101,99,111,
-117,110,116,114,121,32,97,110,100,116,104,105,115,32,105,115,32,116,104,101,84,
-104,105,115,32,108,101,100,32,116,111,97,32,115,116,97,116,101,109,101,110,116,
-99,111,110,116,114,97,115,116,32,116,111,108,97,115,116,73,110,100,101,120,79,
-102,116,104,114,111,117,103,104,32,104,105,115,105,115,32,100,101,115,105,103,
-110,101,100,116,104,101,32,116,101,114,109,32,105,115,105,115,32,112,114,111,118
-,105,100,101,100,112,114,111,116,101,99,116,32,116,104,101,110,103,60,47,97,62,
-60,47,108,105,62,84,104,101,32,99,117,114,114,101,110,116,116,104,101,32,115,105
-,116,101,32,111,102,115,117,98,115,116,97,110,116,105,97,108,101,120,112,101,114
-,105,101,110,99,101,44,105,110,32,116,104,101,32,87,101,115,116,116,104,101,121,
-32,115,104,111,117,108,100,115,108,111,118,101,110,196,141,105,110,97,99,111,109
-,101,110,116,97,114,105,111,115,117,110,105,118,101,114,115,105,100,97,100,99,
-111,110,100,105,99,105,111,110,101,115,97,99,116,105,118,105,100,97,100,101,115,
-101,120,112,101,114,105,101,110,99,105,97,116,101,99,110,111,108,111,103,195,173
-,97,112,114,111,100,117,99,99,105,195,179,110,112,117,110,116,117,97,99,105,195,
-179,110,97,112,108,105,99,97,99,105,195,179,110,99,111,110,116,114,97,115,101,
-195,177,97,99,97,116,101,103,111,114,195,173,97,115,114,101,103,105,115,116,114,
-97,114,115,101,112,114,111,102,101,115,105,111,110,97,108,116,114,97,116,97,109,
-105,101,110,116,111,114,101,103,195,173,115,116,114,97,116,101,115,101,99,114,
-101,116,97,114,195,173,97,112,114,105,110,99,105,112,97,108,101,115,112,114,111,
-116,101,99,99,105,195,179,110,105,109,112,111,114,116,97,110,116,101,115,105,109
-,112,111,114,116,97,110,99,105,97,112,111,115,105,98,105,108,105,100,97,100,105,
-110,116,101,114,101,115,97,110,116,101,99,114,101,99,105,109,105,101,110,116,111
-,110,101,99,101,115,105,100,97,100,101,115,115,117,115,99,114,105,98,105,114,115
-,101,97,115,111,99,105,97,99,105,195,179,110,100,105,115,112,111,110,105,98,108,
-101,115,101,118,97,108,117,97,99,105,195,179,110,101,115,116,117,100,105,97,110,
-116,101,115,114,101,115,112,111,110,115,97,98,108,101,114,101,115,111,108,117,99
-,105,195,179,110,103,117,97,100,97,108,97,106,97,114,97,114,101,103,105,115,116,
-114,97,100,111,115,111,112,111,114,116,117,110,105,100,97,100,99,111,109,101,114
-,99,105,97,108,101,115,102,111,116,111,103,114,97,102,195,173,97,97,117,116,111,
-114,105,100,97,100,101,115,105,110,103,101,110,105,101,114,195,173,97,116,101,
-108,101,118,105,115,105,195,179,110,99,111,109,112,101,116,101,110,99,105,97,111
-,112,101,114,97,99,105,111,110,101,115,101,115,116,97,98,108,101,99,105,100,111,
-115,105,109,112,108,101,109,101,110,116,101,97,99,116,117,97,108,109,101,110,116
-,101,110,97,118,101,103,97,99,105,195,179,110,99,111,110,102,111,114,109,105,100
-,97,100,108,105,110,101,45,104,101,105,103,104,116,58,102,111,110,116,45,102,97,
-109,105,108,121,58,34,32,58,32,34,104,116,116,112,58,47,47,97,112,112,108,105,99
-,97,116,105,111,110,115,108,105,110,107,34,32,104,114,101,102,61,34,115,112,101,
-99,105,102,105,99,97,108,108,121,47,47,60,33,91,67,68,65,84,65,91,10,79,114,103,
-97,110,105,122,97,116,105,111,110,100,105,115,116,114,105,98,117,116,105,111,110
-,48,112,120,59,32,104,101,105,103,104,116,58,114,101,108,97,116,105,111,110,115,
-104,105,112,100,101,118,105,99,101,45,119,105,100,116,104,60,100,105,118,32,99,
-108,97,115,115,61,34,60,108,97,98,101,108,32,102,111,114,61,34,114,101,103,105,
-115,116,114,97,116,105,111,110,60,47,110,111,115,99,114,105,112,116,62,10,47,105
-,110,100,101,120,46,104,116,109,108,34,119,105,110,100,111,119,46,111,112,101,
-110,40,32,33,105,109,112,111,114,116,97,110,116,59,97,112,112,108,105,99,97,116,
-105,111,110,47,105,110,100,101,112,101,110,100,101,110,99,101,47,47,119,119,119,
-46,103,111,111,103,108,101,111,114,103,97,110,105,122,97,116,105,111,110,97,117,
-116,111,99,111,109,112,108,101,116,101,114,101,113,117,105,114,101,109,101,110,
-116,115,99,111,110,115,101,114,118,97,116,105,118,101,60,102,111,114,109,32,110,
-97,109,101,61,34,105,110,116,101,108,108,101,99,116,117,97,108,109,97,114,103,
-105,110,45,108,101,102,116,58,49,56,116,104,32,99,101,110,116,117,114,121,97,110
-,32,105,109,112,111,114,116,97,110,116,105,110,115,116,105,116,117,116,105,111,
-110,115,97,98,98,114,101,118,105,97,116,105,111,110,60,105,109,103,32,99,108,97,
-115,115,61,34,111,114,103,97,110,105,115,97,116,105,111,110,99,105,118,105,108,
-105,122,97,116,105,111,110,49,57,116,104,32,99,101,110,116,117,114,121,97,114,99
-,104,105,116,101,99,116,117,114,101,105,110,99,111,114,112,111,114,97,116,101,
-100,50,48,116,104,32,99,101,110,116,117,114,121,45,99,111,110,116,97,105,110,101
-,114,34,62,109,111,115,116,32,110,111,116,97,98,108,121,47,62,60,47,97,62,60,47,
-100,105,118,62,110,111,116,105,102,105,99,97,116,105,111,110,39,117,110,100,101,
-102,105,110,101,100,39,41,70,117,114,116,104,101,114,109,111,114,101,44,98,101,
-108,105,101,118,101,32,116,104,97,116,105,110,110,101,114,72,84,77,76,32,61,32,
-112,114,105,111,114,32,116,111,32,116,104,101,100,114,97,109,97,116,105,99,97,
-108,108,121,114,101,102,101,114,114,105,110,103,32,116,111,110,101,103,111,116,
-105,97,116,105,111,110,115,104,101,97,100,113,117,97,114,116,101,114,115,83,111,
-117,116,104,32,65,102,114,105,99,97,117,110,115,117,99,99,101,115,115,102,117,
-108,80,101,110,110,115,121,108,118,97,110,105,97,65,115,32,97,32,114,101,115,117
-,108,116,44,60,104,116,109,108,32,108,97,110,103,61,34,38,108,116,59,47,115,117,
-112,38,103,116,59,100,101,97,108,105,110,103,32,119,105,116,104,112,104,105,108,
-97,100,101,108,112,104,105,97,104,105,115,116,111,114,105,99,97,108,108,121,41,
-59,60,47,115,99,114,105,112,116,62,10,112,97,100,100,105,110,103,45,116,111,112,
-58,101,120,112,101,114,105,109,101,110,116,97,108,103,101,116,65,116,116,114,105
-,98,117,116,101,105,110,115,116,114,117,99,116,105,111,110,115,116,101,99,104,
-110,111,108,111,103,105,101,115,112,97,114,116,32,111,102,32,116,104,101,32,61,
-102,117,110,99,116,105,111,110,40,41,123,115,117,98,115,99,114,105,112,116,105,
-111,110,108,46,100,116,100,34,62,13,10,60,104,116,103,101,111,103,114,97,112,104
-,105,99,97,108,67,111,110,115,116,105,116,117,116,105,111,110,39,44,32,102,117,
-110,99,116,105,111,110,40,115,117,112,112,111,114,116,101,100,32,98,121,97,103,
-114,105,99,117,108,116,117,114,97,108,99,111,110,115,116,114,117,99,116,105,111,
-110,112,117,98,108,105,99,97,116,105,111,110,115,102,111,110,116,45,115,105,122,
-101,58,32,49,97,32,118,97,114,105,101,116,121,32,111,102,60,100,105,118,32,115,
-116,121,108,101,61,34,69,110,99,121,99,108,111,112,101,100,105,97,105,102,114,97
-,109,101,32,115,114,99,61,34,100,101,109,111,110,115,116,114,97,116,101,100,97,
-99,99,111,109,112,108,105,115,104,101,100,117,110,105,118,101,114,115,105,116,
-105,101,115,68,101,109,111,103,114,97,112,104,105,99,115,41,59,60,47,115,99,114,
-105,112,116,62,60,100,101,100,105,99,97,116,101,100,32,116,111,107,110,111,119,
-108,101,100,103,101,32,111,102,115,97,116,105,115,102,97,99,116,105,111,110,112,
-97,114,116,105,99,117,108,97,114,108,121,60,47,100,105,118,62,60,47,100,105,118,
-62,69,110,103,108,105,115,104,32,40,85,83,41,97,112,112,101,110,100,67,104,105,
-108,100,40,116,114,97,110,115,109,105,115,115,105,111,110,115,46,32,72,111,119,
-101,118,101,114,44,32,105,110,116,101,108,108,105,103,101,110,99,101,34,32,116,
-97,98,105,110,100,101,120,61,34,102,108,111,97,116,58,114,105,103,104,116,59,67,
-111,109,109,111,110,119,101,97,108,116,104,114,97,110,103,105,110,103,32,102,114
-,111,109,105,110,32,119,104,105,99,104,32,116,104,101,97,116,32,108,101,97,115,
-116,32,111,110,101,114,101,112,114,111,100,117,99,116,105,111,110,101,110,99,121
-,99,108,111,112,101,100,105,97,59,102,111,110,116,45,115,105,122,101,58,49,106,
-117,114,105,115,100,105,99,116,105,111,110,97,116,32,116,104,97,116,32,116,105,
-109,101,34,62,60,97,32,99,108,97,115,115,61,34,73,110,32,97,100,100,105,116,105,
-111,110,44,100,101,115,99,114,105,112,116,105,111,110,43,99,111,110,118,101,114,
-115,97,116,105,111,110,99,111,110,116,97,99,116,32,119,105,116,104,105,115,32,
-103,101,110,101,114,97,108,108,121,114,34,32,99,111,110,116,101,110,116,61,34,
-114,101,112,114,101,115,101,110,116,105,110,103,38,108,116,59,109,97,116,104,38,
-103,116,59,112,114,101,115,101,110,116,97,116,105,111,110,111,99,99,97,115,105,
-111,110,97,108,108,121,60,105,109,103,32,119,105,100,116,104,61,34,110,97,118,
-105,103,97,116,105,111,110,34,62,99,111,109,112,101,110,115,97,116,105,111,110,
-99,104,97,109,112,105,111,110,115,104,105,112,109,101,100,105,97,61,34,97,108,
-108,34,32,118,105,111,108,97,116,105,111,110,32,111,102,114,101,102,101,114,101,
-110,99,101,32,116,111,114,101,116,117,114,110,32,116,114,117,101,59,83,116,114,
-105,99,116,47,47,69,78,34,32,116,114,97,110,115,97,99,116,105,111,110,115,105,
-110,116,101,114,118,101,110,116,105,111,110,118,101,114,105,102,105,99,97,116,
-105,111,110,73,110,102,111,114,109,97,116,105,111,110,32,100,105,102,102,105,99,
-117,108,116,105,101,115,67,104,97,109,112,105,111,110,115,104,105,112,99,97,112,
-97,98,105,108,105,116,105,101,115,60,33,91,101,110,100,105,102,93,45,45,62,125,
-10,60,47,115,99,114,105,112,116,62,10,67,104,114,105,115,116,105,97,110,105,116,
-121,102,111,114,32,101,120,97,109,112,108,101,44,80,114,111,102,101,115,115,105,
-111,110,97,108,114,101,115,116,114,105,99,116,105,111,110,115,115,117,103,103,
-101,115,116,32,116,104,97,116,119,97,115,32,114,101,108,101,97,115,101,100,40,
-115,117,99,104,32,97,115,32,116,104,101,114,101,109,111,118,101,67,108,97,115,
-115,40,117,110,101,109,112,108,111,121,109,101,110,116,116,104,101,32,65,109,101
-,114,105,99,97,110,115,116,114,117,99,116,117,114,101,32,111,102,47,105,110,100,
-101,120,46,104,116,109,108,32,112,117,98,108,105,115,104,101,100,32,105,110,115,
-112,97,110,32,99,108,97,115,115,61,34,34,62,60,97,32,104,114,101,102,61,34,47,
-105,110,116,114,111,100,117,99,116,105,111,110,98,101,108,111,110,103,105,110,
-103,32,116,111,99,108,97,105,109,101,100,32,116,104,97,116,99,111,110,115,101,
-113,117,101,110,99,101,115,60,109,101,116,97,32,110,97,109,101,61,34,71,117,105,
-100,101,32,116,111,32,116,104,101,111,118,101,114,119,104,101,108,109,105,110,
-103,97,103,97,105,110,115,116,32,116,104,101,32,99,111,110,99,101,110,116,114,97
-,116,101,100,44,10,46,110,111,110,116,111,117,99,104,32,111,98,115,101,114,118,
-97,116,105,111,110,115,60,47,97,62,10,60,47,100,105,118,62,10,102,32,40,100,111,
-99,117,109,101,110,116,46,98,111,114,100,101,114,58,32,49,112,120,32,123,102,111
-,110,116,45,115,105,122,101,58,49,116,114,101,97,116,109,101,110,116,32,111,102,
-48,34,32,104,101,105,103,104,116,61,34,49,109,111,100,105,102,105,99,97,116,105,
-111,110,73,110,100,101,112,101,110,100,101,110,99,101,100,105,118,105,100,101,
-100,32,105,110,116,111,103,114,101,97,116,101,114,32,116,104,97,110,97,99,104,
-105,101,118,101,109,101,110,116,115,101,115,116,97,98,108,105,115,104,105,110,
-103,74,97,118,97,83,99,114,105,112,116,34,32,110,101,118,101,114,116,104,101,108
-,101,115,115,115,105,103,110,105,102,105,99,97,110,99,101,66,114,111,97,100,99,
-97,115,116,105,110,103,62,38,110,98,115,112,59,60,47,116,100,62,99,111,110,116,
-97,105,110,101,114,34,62,10,115,117,99,104,32,97,115,32,116,104,101,32,105,110,
-102,108,117,101,110,99,101,32,111,102,97,32,112,97,114,116,105,99,117,108,97,114
-,115,114,99,61,39,104,116,116,112,58,47,47,110,97,118,105,103,97,116,105,111,110
-,34,32,104,97,108,102,32,111,102,32,116,104,101,32,115,117,98,115,116,97,110,116
-,105,97,108,32,38,110,98,115,112,59,60,47,100,105,118,62,97,100,118,97,110,116,
-97,103,101,32,111,102,100,105,115,99,111,118,101,114,121,32,111,102,102,117,110,
-100,97,109,101,110,116,97,108,32,109,101,116,114,111,112,111,108,105,116,97,110,
-116,104,101,32,111,112,112,111,115,105,116,101,34,32,120,109,108,58,108,97,110,
-103,61,34,100,101,108,105,98,101,114,97,116,101,108,121,97,108,105,103,110,61,99
-,101,110,116,101,114,101,118,111,108,117,116,105,111,110,32,111,102,112,114,101,
-115,101,114,118,97,116,105,111,110,105,109,112,114,111,118,101,109,101,110,116,
-115,98,101,103,105,110,110,105,110,103,32,105,110,74,101,115,117,115,32,67,104,
-114,105,115,116,80,117,98,108,105,99,97,116,105,111,110,115,100,105,115,97,103,
-114,101,101,109,101,110,116,116,101,120,116,45,97,108,105,103,110,58,114,44,32,
-102,117,110,99,116,105,111,110,40,41,115,105,109,105,108,97,114,105,116,105,101,
-115,98,111,100,121,62,60,47,104,116,109,108,62,105,115,32,99,117,114,114,101,110
-,116,108,121,97,108,112,104,97,98,101,116,105,99,97,108,105,115,32,115,111,109,
-101,116,105,109,101,115,116,121,112,101,61,34,105,109,97,103,101,47,109,97,110,
-121,32,111,102,32,116,104,101,32,102,108,111,119,58,104,105,100,100,101,110,59,
-97,118,97,105,108,97,98,108,101,32,105,110,100,101,115,99,114,105,98,101,32,116,
-104,101,101,120,105,115,116,101,110,99,101,32,111,102,97,108,108,32,111,118,101,
-114,32,116,104,101,116,104,101,32,73,110,116,101,114,110,101,116,9,60,117,108,32
-,99,108,97,115,115,61,34,105,110,115,116,97,108,108,97,116,105,111,110,110,101,
-105,103,104,98,111,114,104,111,111,100,97,114,109,101,100,32,102,111,114,99,101,
-115,114,101,100,117,99,105,110,103,32,116,104,101,99,111,110,116,105,110,117,101
-,115,32,116,111,78,111,110,101,116,104,101,108,101,115,115,44,116,101,109,112,
-101,114,97,116,117,114,101,115,10,9,9,60,97,32,104,114,101,102,61,34,99,108,111,
-115,101,32,116,111,32,116,104,101,101,120,97,109,112,108,101,115,32,111,102,32,
-105,115,32,97,98,111,117,116,32,116,104,101,40,115,101,101,32,98,101,108,111,119
-,41,46,34,32,105,100,61,34,115,101,97,114,99,104,112,114,111,102,101,115,115,105
-,111,110,97,108,105,115,32,97,118,97,105,108,97,98,108,101,116,104,101,32,111,
-102,102,105,99,105,97,108,9,9,60,47,115,99,114,105,112,116,62,10,10,9,9,60,100,
-105,118,32,105,100,61,34,97,99,99,101,108,101,114,97,116,105,111,110,116,104,114
-,111,117,103,104,32,116,104,101,32,72,97,108,108,32,111,102,32,70,97,109,101,100
-,101,115,99,114,105,112,116,105,111,110,115,116,114,97,110,115,108,97,116,105,
-111,110,115,105,110,116,101,114,102,101,114,101,110,99,101,32,116,121,112,101,61
-,39,116,101,120,116,47,114,101,99,101,110,116,32,121,101,97,114,115,105,110,32,
-116,104,101,32,119,111,114,108,100,118,101,114,121,32,112,111,112,117,108,97,114
-,123,98,97,99,107,103,114,111,117,110,100,58,116,114,97,100,105,116,105,111,110,
-97,108,32,115,111,109,101,32,111,102,32,116,104,101,32,99,111,110,110,101,99,116
-,101,100,32,116,111,101,120,112,108,111,105,116,97,116,105,111,110,101,109,101,
-114,103,101,110,99,101,32,111,102,99,111,110,115,116,105,116,117,116,105,111,110
-,65,32,72,105,115,116,111,114,121,32,111,102,115,105,103,110,105,102,105,99,97,
-110,116,32,109,97,110,117,102,97,99,116,117,114,101,100,101,120,112,101,99,116,
-97,116,105,111,110,115,62,60,110,111,115,99,114,105,112,116,62,60,99,97,110,32,
-98,101,32,102,111,117,110,100,98,101,99,97,117,115,101,32,116,104,101,32,104,97,
-115,32,110,111,116,32,98,101,101,110,110,101,105,103,104,98,111,117,114,105,110,
-103,119,105,116,104,111,117,116,32,116,104,101,32,97,100,100,101,100,32,116,111,
-32,116,104,101,9,60,108,105,32,99,108,97,115,115,61,34,105,110,115,116,114,117,
-109,101,110,116,97,108,83,111,118,105,101,116,32,85,110,105,111,110,97,99,107,
-110,111,119,108,101,100,103,101,100,119,104,105,99,104,32,99,97,110,32,98,101,
-110,97,109,101,32,102,111,114,32,116,104,101,97,116,116,101,110,116,105,111,110,
-32,116,111,97,116,116,101,109,112,116,115,32,116,111,32,100,101,118,101,108,111,
-112,109,101,110,116,115,73,110,32,102,97,99,116,44,32,116,104,101,60,108,105,32,
-99,108,97,115,115,61,34,97,105,109,112,108,105,99,97,116,105,111,110,115,115,117
-,105,116,97,98,108,101,32,102,111,114,109,117,99,104,32,111,102,32,116,104,101,
-32,99,111,108,111,110,105,122,97,116,105,111,110,112,114,101,115,105,100,101,110
-,116,105,97,108,99,97,110,99,101,108,66,117,98,98,108,101,32,73,110,102,111,114,
-109,97,116,105,111,110,109,111,115,116,32,111,102,32,116,104,101,32,105,115,32,
-100,101,115,99,114,105,98,101,100,114,101,115,116,32,111,102,32,116,104,101,32,
-109,111,114,101,32,111,114,32,108,101,115,115,105,110,32,83,101,112,116,101,109,
-98,101,114,73,110,116,101,108,108,105,103,101,110,99,101,115,114,99,61,34,104,
-116,116,112,58,47,47,112,120,59,32,104,101,105,103,104,116,58,32,97,118,97,105,
-108,97,98,108,101,32,116,111,109,97,110,117,102,97,99,116,117,114,101,114,104,
-117,109,97,110,32,114,105,103,104,116,115,108,105,110,107,32,104,114,101,102,61,
-34,47,97,118,97,105,108,97,98,105,108,105,116,121,112,114,111,112,111,114,116,
-105,111,110,97,108,111,117,116,115,105,100,101,32,116,104,101,32,97,115,116,114,
-111,110,111,109,105,99,97,108,104,117,109,97,110,32,98,101,105,110,103,115,110,
-97,109,101,32,111,102,32,116,104,101,32,97,114,101,32,102,111,117,110,100,32,105
-,110,97,114,101,32,98,97,115,101,100,32,111,110,115,109,97,108,108,101,114,32,
-116,104,97,110,97,32,112,101,114,115,111,110,32,119,104,111,101,120,112,97,110,
-115,105,111,110,32,111,102,97,114,103,117,105,110,103,32,116,104,97,116,110,111,
-119,32,107,110,111,119,110,32,97,115,73,110,32,116,104,101,32,101,97,114,108,121
-,105,110,116,101,114,109,101,100,105,97,116,101,100,101,114,105,118,101,100,32,
-102,114,111,109,83,99,97,110,100,105,110,97,118,105,97,110,60,47,97,62,60,47,100
-,105,118,62,13,10,99,111,110,115,105,100,101,114,32,116,104,101,97,110,32,101,
-115,116,105,109,97,116,101,100,116,104,101,32,78,97,116,105,111,110,97,108,60,
-100,105,118,32,105,100,61,34,112,97,103,114,101,115,117,108,116,105,110,103,32,
-105,110,99,111,109,109,105,115,115,105,111,110,101,100,97,110,97,108,111,103,111
-,117,115,32,116,111,97,114,101,32,114,101,113,117,105,114,101,100,47,117,108,62,
-10,60,47,100,105,118,62,10,119,97,115,32,98,97,115,101,100,32,111,110,97,110,100
-,32,98,101,99,97,109,101,32,97,38,110,98,115,112,59,38,110,98,115,112,59,116,34,
-32,118,97,108,117,101,61,34,34,32,119,97,115,32,99,97,112,116,117,114,101,100,
-110,111,32,109,111,114,101,32,116,104,97,110,114,101,115,112,101,99,116,105,118,
-101,108,121,99,111,110,116,105,110,117,101,32,116,111,32,62,13,10,60,104,101,97,
-100,62,13,10,60,119,101,114,101,32,99,114,101,97,116,101,100,109,111,114,101,32,
-103,101,110,101,114,97,108,105,110,102,111,114,109,97,116,105,111,110,32,117,115
-,101,100,32,102,111,114,32,116,104,101,105,110,100,101,112,101,110,100,101,110,
-116,32,116,104,101,32,73,109,112,101,114,105,97,108,99,111,109,112,111,110,101,
-110,116,32,111,102,116,111,32,116,104,101,32,110,111,114,116,104,105,110,99,108,
-117,100,101,32,116,104,101,32,67,111,110,115,116,114,117,99,116,105,111,110,115,
-105,100,101,32,111,102,32,116,104,101,32,119,111,117,108,100,32,110,111,116,32,
-98,101,102,111,114,32,105,110,115,116,97,110,99,101,105,110,118,101,110,116,105,
-111,110,32,111,102,109,111,114,101,32,99,111,109,112,108,101,120,99,111,108,108,
-101,99,116,105,118,101,108,121,98,97,99,107,103,114,111,117,110,100,58,32,116,
-101,120,116,45,97,108,105,103,110,58,32,105,116,115,32,111,114,105,103,105,110,
-97,108,105,110,116,111,32,97,99,99,111,117,110,116,116,104,105,115,32,112,114,
-111,99,101,115,115,97,110,32,101,120,116,101,110,115,105,118,101,104,111,119,101
-,118,101,114,44,32,116,104,101,116,104,101,121,32,97,114,101,32,110,111,116,114,
-101,106,101,99,116,101,100,32,116,104,101,99,114,105,116,105,99,105,115,109,32,
-111,102,100,117,114,105,110,103,32,119,104,105,99,104,112,114,111,98,97,98,108,
-121,32,116,104,101,116,104,105,115,32,97,114,116,105,99,108,101,40,102,117,110,
-99,116,105,111,110,40,41,123,73,116,32,115,104,111,117,108,100,32,98,101,97,110,
-32,97,103,114,101,101,109,101,110,116,97,99,99,105,100,101,110,116,97,108,108,
-121,100,105,102,102,101,114,115,32,102,114,111,109,65,114,99,104,105,116,101,99,
-116,117,114,101,98,101,116,116,101,114,32,107,110,111,119,110,97,114,114,97,110,
-103,101,109,101,110,116,115,105,110,102,108,117,101,110,99,101,32,111,110,97,116
-,116,101,110,100,101,100,32,116,104,101,105,100,101,110,116,105,99,97,108,32,116
-,111,115,111,117,116,104,32,111,102,32,116,104,101,112,97,115,115,32,116,104,114
-,111,117,103,104,120,109,108,34,32,116,105,116,108,101,61,34,119,101,105,103,104
-,116,58,98,111,108,100,59,99,114,101,97,116,105,110,103,32,116,104,101,100,105,
-115,112,108,97,121,58,110,111,110,101,114,101,112,108,97,99,101,100,32,116,104,
-101,60,105,109,103,32,115,114,99,61,34,47,105,104,116,116,112,115,58,47,47,119,
-119,119,46,87,111,114,108,100,32,87,97,114,32,73,73,116,101,115,116,105,109,111,
-110,105,97,108,115,102,111,117,110,100,32,105,110,32,116,104,101,114,101,113,117
-,105,114,101,100,32,116,111,32,97,110,100,32,116,104,97,116,32,116,104,101,98,
-101,116,119,101,101,110,32,116,104,101,32,119,97,115,32,100,101,115,105,103,110,
-101,100,99,111,110,115,105,115,116,115,32,111,102,32,99,111,110,115,105,100,101,
-114,97,98,108,121,112,117,98,108,105,115,104,101,100,32,98,121,116,104,101,32,
-108,97,110,103,117,97,103,101,67,111,110,115,101,114,118,97,116,105,111,110,99,
-111,110,115,105,115,116,101,100,32,111,102,114,101,102,101,114,32,116,111,32,116
-,104,101,98,97,99,107,32,116,111,32,116,104,101,32,99,115,115,34,32,109,101,100,
-105,97,61,34,80,101,111,112,108,101,32,102,114,111,109,32,97,118,97,105,108,97,
-98,108,101,32,111,110,112,114,111,118,101,100,32,116,111,32,98,101,115,117,103,
-103,101,115,116,105,111,110,115,34,119,97,115,32,107,110,111,119,110,32,97,115,
-118,97,114,105,101,116,105,101,115,32,111,102,108,105,107,101,108,121,32,116,111
-,32,98,101,99,111,109,112,114,105,115,101,100,32,111,102,115,117,112,112,111,114
-,116,32,116,104,101,32,104,97,110,100,115,32,111,102,32,116,104,101,99,111,117,
-112,108,101,100,32,119,105,116,104,99,111,110,110,101,99,116,32,97,110,100,32,98
-,111,114,100,101,114,58,110,111,110,101,59,112,101,114,102,111,114,109,97,110,99
-,101,115,98,101,102,111,114,101,32,98,101,105,110,103,108,97,116,101,114,32,98,
-101,99,97,109,101,99,97,108,99,117,108,97,116,105,111,110,115,111,102,116,101,
-110,32,99,97,108,108,101,100,114,101,115,105,100,101,110,116,115,32,111,102,109,
-101,97,110,105,110,103,32,116,104,97,116,62,60,108,105,32,99,108,97,115,115,61,
-34,101,118,105,100,101,110,99,101,32,102,111,114,101,120,112,108,97,110,97,116,
-105,111,110,115,101,110,118,105,114,111,110,109,101,110,116,115,34,62,60,47,97,
-62,60,47,100,105,118,62,119,104,105,99,104,32,97,108,108,111,119,115,73,110,116,
-114,111,100,117,99,116,105,111,110,100,101,118,101,108,111,112,101,100,32,98,121
-,97,32,119,105,100,101,32,114,97,110,103,101,111,110,32,98,101,104,97,108,102,32
-,111,102,118,97,108,105,103,110,61,34,116,111,112,34,112,114,105,110,99,105,112,
-108,101,32,111,102,97,116,32,116,104,101,32,116,105,109,101,44,60,47,110,111,115
-,99,114,105,112,116,62,13,115,97,105,100,32,116,111,32,104,97,118,101,105,110,32
-,116,104,101,32,102,105,114,115,116,119,104,105,108,101,32,111,116,104,101,114,
-115,104,121,112,111,116,104,101,116,105,99,97,108,112,104,105,108,111,115,111,
-112,104,101,114,115,112,111,119,101,114,32,111,102,32,116,104,101,99,111,110,116
-,97,105,110,101,100,32,105,110,112,101,114,102,111,114,109,101,100,32,98,121,105
-,110,97,98,105,108,105,116,121,32,116,111,119,101,114,101,32,119,114,105,116,116
-,101,110,115,112,97,110,32,115,116,121,108,101,61,34,105,110,112,117,116,32,110,
-97,109,101,61,34,116,104,101,32,113,117,101,115,116,105,111,110,105,110,116,101,
-110,100,101,100,32,102,111,114,114,101,106,101,99,116,105,111,110,32,111,102,105
-,109,112,108,105,101,115,32,116,104,97,116,105,110,118,101,110,116,101,100,32,
-116,104,101,116,104,101,32,115,116,97,110,100,97,114,100,119,97,115,32,112,114,
-111,98,97,98,108,121,108,105,110,107,32,98,101,116,119,101,101,110,112,114,111,
-102,101,115,115,111,114,32,111,102,105,110,116,101,114,97,99,116,105,111,110,115
-,99,104,97,110,103,105,110,103,32,116,104,101,73,110,100,105,97,110,32,79,99,101
-,97,110,32,99,108,97,115,115,61,34,108,97,115,116,119,111,114,107,105,110,103,32
-,119,105,116,104,39,104,116,116,112,58,47,47,119,119,119,46,121,101,97,114,115,
-32,98,101,102,111,114,101,84,104,105,115,32,119,97,115,32,116,104,101,114,101,99
-,114,101,97,116,105,111,110,97,108,101,110,116,101,114,105,110,103,32,116,104,
-101,109,101,97,115,117,114,101,109,101,110,116,115,97,110,32,101,120,116,114,101
-,109,101,108,121,118,97,108,117,101,32,111,102,32,116,104,101,115,116,97,114,116
-,32,111,102,32,116,104,101,10,60,47,115,99,114,105,112,116,62,10,10,97,110,32,
-101,102,102,111,114,116,32,116,111,105,110,99,114,101,97,115,101,32,116,104,101,
-116,111,32,116,104,101,32,115,111,117,116,104,115,112,97,99,105,110,103,61,34,48
-,34,62,115,117,102,102,105,99,105,101,110,116,108,121,116,104,101,32,69,117,114,
-111,112,101,97,110,99,111,110,118,101,114,116,101,100,32,116,111,99,108,101,97,
-114,84,105,109,101,111,117,116,100,105,100,32,110,111,116,32,104,97,118,101,99,
-111,110,115,101,113,117,101,110,116,108,121,102,111,114,32,116,104,101,32,110,
-101,120,116,101,120,116,101,110,115,105,111,110,32,111,102,101,99,111,110,111,
-109,105,99,32,97,110,100,97,108,116,104,111,117,103,104,32,116,104,101,97,114,
-101,32,112,114,111,100,117,99,101,100,97,110,100,32,119,105,116,104,32,116,104,
-101,105,110,115,117,102,102,105,99,105,101,110,116,103,105,118,101,110,32,98,121
-,32,116,104,101,115,116,97,116,105,110,103,32,116,104,97,116,101,120,112,101,110
-,100,105,116,117,114,101,115,60,47,115,112,97,110,62,60,47,97,62,10,116,104,111,
-117,103,104,116,32,116,104,97,116,111,110,32,116,104,101,32,98,97,115,105,115,99
-,101,108,108,112,97,100,100,105,110,103,61,105,109,97,103,101,32,111,102,32,116,
-104,101,114,101,116,117,114,110,105,110,103,32,116,111,105,110,102,111,114,109,
-97,116,105,111,110,44,115,101,112,97,114,97,116,101,100,32,98,121,97,115,115,97,
-115,115,105,110,97,116,101,100,115,34,32,99,111,110,116,101,110,116,61,34,97,117
-,116,104,111,114,105,116,121,32,111,102,110,111,114,116,104,119,101,115,116,101,
-114,110,60,47,100,105,118,62,10,60,100,105,118,32,34,62,60,47,100,105,118,62,13,
-10,32,32,99,111,110,115,117,108,116,97,116,105,111,110,99,111,109,109,117,110,
-105,116,121,32,111,102,116,104,101,32,110,97,116,105,111,110,97,108,105,116,32,
-115,104,111,117,108,100,32,98,101,112,97,114,116,105,99,105,112,97,110,116,115,
-32,97,108,105,103,110,61,34,108,101,102,116,116,104,101,32,103,114,101,97,116,
-101,115,116,115,101,108,101,99,116,105,111,110,32,111,102,115,117,112,101,114,
-110,97,116,117,114,97,108,100,101,112,101,110,100,101,110,116,32,111,110,105,115
-,32,109,101,110,116,105,111,110,101,100,97,108,108,111,119,105,110,103,32,116,
-104,101,119,97,115,32,105,110,118,101,110,116,101,100,97,99,99,111,109,112,97,
-110,121,105,110,103,104,105,115,32,112,101,114,115,111,110,97,108,97,118,97,105,
-108,97,98,108,101,32,97,116,115,116,117,100,121,32,111,102,32,116,104,101,111,
-110,32,116,104,101,32,111,116,104,101,114,101,120,101,99,117,116,105,111,110,32,
-111,102,72,117,109,97,110,32,82,105,103,104,116,115,116,101,114,109,115,32,111,
-102,32,116,104,101,97,115,115,111,99,105,97,116,105,111,110,115,114,101,115,101,
-97,114,99,104,32,97,110,100,115,117,99,99,101,101,100,101,100,32,98,121,100,101,
-102,101,97,116,101,100,32,116,104,101,97,110,100,32,102,114,111,109,32,116,104,
-101,98,117,116,32,116,104,101,121,32,97,114,101,99,111,109,109,97,110,100,101,
-114,32,111,102,115,116,97,116,101,32,111,102,32,116,104,101,121,101,97,114,115,
-32,111,102,32,97,103,101,116,104,101,32,115,116,117,100,121,32,111,102,60,117,
-108,32,99,108,97,115,115,61,34,115,112,108,97,99,101,32,105,110,32,116,104,101,
-119,104,101,114,101,32,104,101,32,119,97,115,60,108,105,32,99,108,97,115,115,61,
-34,102,116,104,101,114,101,32,97,114,101,32,110,111,119,104,105,99,104,32,98,101
-,99,97,109,101,104,101,32,112,117,98,108,105,115,104,101,100,101,120,112,114,101
-,115,115,101,100,32,105,110,116,111,32,119,104,105,99,104,32,116,104,101,99,111,
-109,109,105,115,115,105,111,110,101,114,102,111,110,116,45,119,101,105,103,104,
-116,58,116,101,114,114,105,116,111,114,121,32,111,102,101,120,116,101,110,115,
-105,111,110,115,34,62,82,111,109,97,110,32,69,109,112,105,114,101,101,113,117,97
-,108,32,116,111,32,116,104,101,73,110,32,99,111,110,116,114,97,115,116,44,104,
-111,119,101,118,101,114,44,32,97,110,100,105,115,32,116,121,112,105,99,97,108,
-108,121,97,110,100,32,104,105,115,32,119,105,102,101,40,97,108,115,111,32,99,97,
-108,108,101,100,62,60,117,108,32,99,108,97,115,115,61,34,101,102,102,101,99,116,
-105,118,101,108,121,32,101,118,111,108,118,101,100,32,105,110,116,111,115,101,
-101,109,32,116,111,32,104,97,118,101,119,104,105,99,104,32,105,115,32,116,104,
-101,116,104,101,114,101,32,119,97,115,32,110,111,97,110,32,101,120,99,101,108,
-108,101,110,116,97,108,108,32,111,102,32,116,104,101,115,101,100,101,115,99,114,
-105,98,101,100,32,98,121,73,110,32,112,114,97,99,116,105,99,101,44,98,114,111,97
-,100,99,97,115,116,105,110,103,99,104,97,114,103,101,100,32,119,105,116,104,114,
-101,102,108,101,99,116,101,100,32,105,110,115,117,98,106,101,99,116,101,100,32,
-116,111,109,105,108,105,116,97,114,121,32,97,110,100,116,111,32,116,104,101,32,
-112,111,105,110,116,101,99,111,110,111,109,105,99,97,108,108,121,115,101,116,84,
-97,114,103,101,116,105,110,103,97,114,101,32,97,99,116,117,97,108,108,121,118,
-105,99,116,111,114,121,32,111,118,101,114,40,41,59,60,47,115,99,114,105,112,116,
-62,99,111,110,116,105,110,117,111,117,115,108,121,114,101,113,117,105,114,101,
-100,32,102,111,114,101,118,111,108,117,116,105,111,110,97,114,121,97,110,32,101,
-102,102,101,99,116,105,118,101,110,111,114,116,104,32,111,102,32,116,104,101,44,
-32,119,104,105,99,104,32,119,97,115,32,102,114,111,110,116,32,111,102,32,116,104
-,101,111,114,32,111,116,104,101,114,119,105,115,101,115,111,109,101,32,102,111,
-114,109,32,111,102,104,97,100,32,110,111,116,32,98,101,101,110,103,101,110,101,
-114,97,116,101,100,32,98,121,105,110,102,111,114,109,97,116,105,111,110,46,112,
-101,114,109,105,116,116,101,100,32,116,111,105,110,99,108,117,100,101,115,32,116
-,104,101,100,101,118,101,108,111,112,109,101,110,116,44,101,110,116,101,114,101,
-100,32,105,110,116,111,116,104,101,32,112,114,101,118,105,111,117,115,99,111,110
-,115,105,115,116,101,110,116,108,121,97,114,101,32,107,110,111,119,110,32,97,115
-,116,104,101,32,102,105,101,108,100,32,111,102,116,104,105,115,32,116,121,112,
-101,32,111,102,103,105,118,101,110,32,116,111,32,116,104,101,116,104,101,32,116,
-105,116,108,101,32,111,102,99,111,110,116,97,105,110,115,32,116,104,101,105,110,
-115,116,97,110,99,101,115,32,111,102,105,110,32,116,104,101,32,110,111,114,116,
-104,100,117,101,32,116,111,32,116,104,101,105,114,97,114,101,32,100,101,115,105,
-103,110,101,100,99,111,114,112,111,114,97,116,105,111,110,115,119,97,115,32,116,
-104,97,116,32,116,104,101,111,110,101,32,111,102,32,116,104,101,115,101,109,111,
-114,101,32,112,111,112,117,108,97,114,115,117,99,99,101,101,100,101,100,32,105,
-110,115,117,112,112,111,114,116,32,102,114,111,109,105,110,32,100,105,102,102,
-101,114,101,110,116,100,111,109,105,110,97,116,101,100,32,98,121,100,101,115,105
-,103,110,101,100,32,102,111,114,111,119,110,101,114,115,104,105,112,32,111,102,
-97,110,100,32,112,111,115,115,105,98,108,121,115,116,97,110,100,97,114,100,105,
-122,101,100,114,101,115,112,111,110,115,101,84,101,120,116,119,97,115,32,105,110
-,116,101,110,100,101,100,114,101,99,101,105,118,101,100,32,116,104,101,97,115,
-115,117,109,101,100,32,116,104,97,116,97,114,101,97,115,32,111,102,32,116,104,
-101,112,114,105,109,97,114,105,108,121,32,105,110,116,104,101,32,98,97,115,105,
-115,32,111,102,105,110,32,116,104,101,32,115,101,110,115,101,97,99,99,111,117,
-110,116,115,32,102,111,114,100,101,115,116,114,111,121,101,100,32,98,121,97,116,
-32,108,101,97,115,116,32,116,119,111,119,97,115,32,100,101,99,108,97,114,101,100
-,99,111,117,108,100,32,110,111,116,32,98,101,83,101,99,114,101,116,97,114,121,32
-,111,102,97,112,112,101,97,114,32,116,111,32,98,101,109,97,114,103,105,110,45,
-116,111,112,58,49,47,94,92,115,43,124,92,115,43,36,47,103,101,41,123,116,104,114
-,111,119,32,101,125,59,116,104,101,32,115,116,97,114,116,32,111,102,116,119,111,
-32,115,101,112,97,114,97,116,101,108,97,110,103,117,97,103,101,32,97,110,100,119
-,104,111,32,104,97,100,32,98,101,101,110,111,112,101,114,97,116,105,111,110,32,
-111,102,100,101,97,116,104,32,111,102,32,116,104,101,114,101,97,108,32,110,117,
-109,98,101,114,115,9,60,108,105,110,107,32,114,101,108,61,34,112,114,111,118,105
-,100,101,100,32,116,104,101,116,104,101,32,115,116,111,114,121,32,111,102,99,111
-,109,112,101,116,105,116,105,111,110,115,101,110,103,108,105,115,104,32,40,85,75
-,41,101,110,103,108,105,115,104,32,40,85,83,41,208,156,208,190,208,189,208,179,
-208,190,208,187,208,161,209,128,208,191,209,129,208,186,208,184,209,129,209,128,
-208,191,209,129,208,186,208,184,209,129,209,128,208,191,209,129,208,186,208,190,
-217,132,216,185,216,177,216,168,217,138,216,169,230,173,163,233,171,148,228,184,
-173,230,150,135,231,174,128,228,189,147,228,184,173,230,150,135,231,185,129,228,
-189,147,228,184,173,230,150,135,230,156,137,233,153,144,229,133,172,229,143,184,
-228,186,186,230,176,145,230,148,191,229,186,156,233,152,191,233,135,140,229,183,
-180,229,183,180,231,164,190,228,188,154,228,184,187,228,185,137,230,147,141,228,
-189,156,231,179,187,231,187,159,230,148,191,231,173,150,230,179,149,232,167,132,
-105,110,102,111,114,109,97,99,105,195,179,110,104,101,114,114,97,109,105,101,110
-,116,97,115,101,108,101,99,116,114,195,179,110,105,99,111,100,101,115,99,114,105
-,112,99,105,195,179,110,99,108,97,115,105,102,105,99,97,100,111,115,99,111,110,
-111,99,105,109,105,101,110,116,111,112,117,98,108,105,99,97,99,105,195,179,110,
-114,101,108,97,99,105,111,110,97,100,97,115,105,110,102,111,114,109,195,161,116,
-105,99,97,114,101,108,97,99,105,111,110,97,100,111,115,100,101,112,97,114,116,97
-,109,101,110,116,111,116,114,97,98,97,106,97,100,111,114,101,115,100,105,114,101
-,99,116,97,109,101,110,116,101,97,121,117,110,116,97,109,105,101,110,116,111,109
-,101,114,99,97,100,111,76,105,98,114,101,99,111,110,116,195,161,99,116,101,110,
-111,115,104,97,98,105,116,97,99,105,111,110,101,115,99,117,109,112,108,105,109,
-105,101,110,116,111,114,101,115,116,97,117,114,97,110,116,101,115,100,105,115,
-112,111,115,105,99,105,195,179,110,99,111,110,115,101,99,117,101,110,99,105,97,
-101,108,101,99,116,114,195,179,110,105,99,97,97,112,108,105,99,97,99,105,111,110
-,101,115,100,101,115,99,111,110,101,99,116,97,100,111,105,110,115,116,97,108,97,
-99,105,195,179,110,114,101,97,108,105,122,97,99,105,195,179,110,117,116,105,108,
-105,122,97,99,105,195,179,110,101,110,99,105,99,108,111,112,101,100,105,97,101,
-110,102,101,114,109,101,100,97,100,101,115,105,110,115,116,114,117,109,101,110,
-116,111,115,101,120,112,101,114,105,101,110,99,105,97,115,105,110,115,116,105,
-116,117,99,105,195,179,110,112,97,114,116,105,99,117,108,97,114,101,115,115,117,
-98,99,97,116,101,103,111,114,105,97,209,130,208,190,208,187,209,140,208,186,208,
-190,208,160,208,190,209,129,209,129,208,184,208,184,209,128,208,176,208,177,208,
-190,209,130,209,139,208,177,208,190,208,187,209,140,209,136,208,181,208,191,209,
-128,208,190,209,129,209,130,208,190,208,188,208,190,208,182,208,181,209,130,208,
-181,208,180,209,128,209,131,208,179,208,184,209,133,209,129,208,187,209,131,209,
-135,208,176,208,181,209,129,208,181,208,185,209,135,208,176,209,129,208,178,209,
-129,208,181,208,179,208,180,208,176,208,160,208,190,209,129,209,129,208,184,209,
-143,208,156,208,190,209,129,208,186,208,178,208,181,208,180,209,128,209,131,208,
-179,208,184,208,181,208,179,208,190,209,128,208,190,208,180,208,176,208,178,208,
-190,208,191,209,128,208,190,209,129,208,180,208,176,208,189,208,189,209,139,209,
-133,208,180,208,190,208,187,208,182,208,189,209,139,208,184,208,188,208,181,208,
-189,208,189,208,190,208,156,208,190,209,129,208,186,208,178,209,139,209,128,209,
-131,208,177,208,187,208,181,208,185,208,156,208,190,209,129,208,186,208,178,208,
-176,209,129,209,130,209,128,208,176,208,189,209,139,208,189,208,184,209,135,208,
-181,208,179,208,190,209,128,208,176,208,177,208,190,209,130,208,181,208,180,208,
-190,208,187,208,182,208,181,208,189,209,131,209,129,208,187,209,131,208,179,208,
-184,209,130,208,181,208,191,208,181,209,128,209,140,208,158,208,180,208,189,208,
-176,208,186,208,190,208,191,208,190,209,130,208,190,208,188,209,131,209,128,208,
-176,208,177,208,190,209,130,209,131,208,176,208,191,209,128,208,181,208,187,209,
-143,208,178,208,190,208,190,208,177,209,137,208,181,208,190,208,180,208,189,208,
-190,208,179,208,190,209,129,208,178,208,190,208,181,208,179,208,190,209,129,209,
-130,208,176,209,130,209,140,208,184,208,180,209,128,209,131,208,179,208,190,208,
-185,209,132,208,190,209,128,209,131,208,188,208,181,209,133,208,190,209,128,208,
-190,209,136,208,190,208,191,209,128,208,190,209,130,208,184,208,178,209,129,209,
-129,209,139,208,187,208,186,208,176,208,186,208,176,208,182,208,180,209,139,208,
-185,208,178,208,187,208,176,209,129,209,130,208,184,208,179,209,128,209,131,208,
-191,208,191,209,139,208,178,208,188,208,181,209,129,209,130,208,181,209,128,208,
-176,208,177,208,190,209,130,208,176,209,129,208,186,208,176,208,183,208,176,208,
-187,208,191,208,181,209,128,208,178,209,139,208,185,208,180,208,181,208,187,208,
-176,209,130,209,140,208,180,208,181,208,189,209,140,208,179,208,184,208,191,208,
-181,209,128,208,184,208,190,208,180,208,177,208,184,208,183,208,189,208,181,209,
-129,208,190,209,129,208,189,208,190,208,178,208,181,208,188,208,190,208,188,208,
-181,208,189,209,130,208,186,209,131,208,191,208,184,209,130,209,140,208,180,208,
-190,208,187,208,182,208,189,208,176,209,128,208,176,208,188,208,186,208,176,209,
-133,208,189,208,176,209,135,208,176,208,187,208,190,208,160,208,176,208,177,208,
-190,209,130,208,176,208,162,208,190,208,187,209,140,208,186,208,190,209,129,208,
-190,208,178,209,129,208,181,208,188,208,178,209,130,208,190,209,128,208,190,208,
-185,208,189,208,176,209,135,208,176,208,187,208,176,209,129,208,191,208,184,209,
-129,208,190,208,186,209,129,208,187,209,131,208,182,208,177,209,139,209,129,208,
-184,209,129,209,130,208,181,208,188,208,191,208,181,209,135,208,176,209,130,208,
-184,208,189,208,190,208,178,208,190,208,179,208,190,208,191,208,190,208,188,208,
-190,209,137,208,184,209,129,208,176,208,185,209,130,208,190,208,178,208,191,208,
-190,209,135,208,181,208,188,209,131,208,191,208,190,208,188,208,190,209,137,209,
-140,208,180,208,190,208,187,208,182,208,189,208,190,209,129,209,129,209,139,208,
-187,208,186,208,184,208,177,209,139,209,129,209,130,209,128,208,190,208,180,208,
-176,208,189,208,189,209,139,208,181,208,188,208,189,208,190,208,179,208,184,208,
-181,208,191,209,128,208,190,208,181,208,186,209,130,208,161,208,181,208,185,209,
-135,208,176,209,129,208,188,208,190,208,180,208,181,208,187,208,184,209,130,208,
-176,208,186,208,190,208,179,208,190,208,190,208,189,208,187,208,176,208,185,208,
-189,208,179,208,190,209,128,208,190,208,180,208,181,208,178,208,181,209,128,209,
-129,208,184,209,143,209,129,209,130,209,128,208,176,208,189,208,181,209,132,208,
-184,208,187,209,140,208,188,209,139,209,131,209,128,208,190,208,178,208,189,209,
-143,209,128,208,176,208,183,208,189,209,139,209,133,208,184,209,129,208,186,208,
-176,209,130,209,140,208,189,208,181,208,180,208,181,208,187,209,142,209,143,208,
-189,208,178,208,176,209,128,209,143,208,188,208,181,208,189,209,140,209,136,208,
-181,208,188,208,189,208,190,208,179,208,184,209,133,208,180,208,176,208,189,208,
-189,208,190,208,185,208,183,208,189,208,176,209,135,208,184,209,130,208,189,208,
-181,208,187,209,140,208,183,209,143,209,132,208,190,209,128,209,131,208,188,208,
-176,208,162,208,181,208,191,208,181,209,128,209,140,208,188,208,181,209,129,209,
-143,209,134,208,176,208,183,208,176,209,137,208,184,209,130,209,139,208,155,209,
-131,209,135,209,136,208,184,208,181,224,164,168,224,164,185,224,165,128,224,164,
-130,224,164,149,224,164,176,224,164,168,224,165,135,224,164,133,224,164,170,224,
-164,168,224,165,135,224,164,149,224,164,191,224,164,175,224,164,190,224,164,149,
-224,164,176,224,165,135,224,164,130,224,164,133,224,164,168,224,165,141,224,164,
-175,224,164,149,224,165,141,224,164,175,224,164,190,224,164,151,224,164,190,224,
-164,135,224,164,161,224,164,172,224,164,190,224,164,176,224,165,135,224,164,149,
-224,164,191,224,164,184,224,165,128,224,164,166,224,164,191,224,164,175,224,164,
-190,224,164,170,224,164,185,224,164,178,224,165,135,224,164,184,224,164,191,224,
-164,130,224,164,185,224,164,173,224,164,190,224,164,176,224,164,164,224,164,133,
-224,164,170,224,164,168,224,165,128,224,164,181,224,164,190,224,164,178,224,165,
-135,224,164,184,224,165,135,224,164,181,224,164,190,224,164,149,224,164,176,224,
-164,164,224,165,135,224,164,174,224,165,135,224,164,176,224,165,135,224,164,185,
-224,165,139,224,164,168,224,165,135,224,164,184,224,164,149,224,164,164,224,165,
-135,224,164,172,224,164,185,224,165,129,224,164,164,224,164,184,224,164,190,224,
-164,135,224,164,159,224,164,185,224,165,139,224,164,151,224,164,190,224,164,156,
-224,164,190,224,164,168,224,165,135,224,164,174,224,164,191,224,164,168,224,164,
-159,224,164,149,224,164,176,224,164,164,224,164,190,224,164,149,224,164,176,224,
-164,168,224,164,190,224,164,137,224,164,168,224,164,149,224,165,135,224,164,175,
-224,164,185,224,164,190,224,164,129,224,164,184,224,164,172,224,164,184,224,165,
-135,224,164,173,224,164,190,224,164,183,224,164,190,224,164,134,224,164,170,224,
-164,149,224,165,135,224,164,178,224,164,191,224,164,175,224,165,135,224,164,182,
-224,165,129,224,164,176,224,165,130,224,164,135,224,164,184,224,164,149,224,165,
-135,224,164,152,224,164,130,224,164,159,224,165,135,224,164,174,224,165,135,224,
-164,176,224,165,128,224,164,184,224,164,149,224,164,164,224,164,190,224,164,174,
-224,165,135,224,164,176,224,164,190,224,164,178,224,165,135,224,164,149,224,164,
-176,224,164,133,224,164,167,224,164,191,224,164,149,224,164,133,224,164,170,224,
-164,168,224,164,190,224,164,184,224,164,174,224,164,190,224,164,156,224,164,174,
-224,165,129,224,164,157,224,165,135,224,164,149,224,164,190,224,164,176,224,164,
-163,224,164,185,224,165,139,224,164,164,224,164,190,224,164,149,224,164,161,224,
-164,188,224,165,128,224,164,175,224,164,185,224,164,190,224,164,130,224,164,185,
-224,165,139,224,164,159,224,164,178,224,164,182,224,164,172,224,165,141,224,164,
-166,224,164,178,224,164,191,224,164,175,224,164,190,224,164,156,224,165,128,224,
-164,181,224,164,168,224,164,156,224,164,190,224,164,164,224,164,190,224,164,149,
-224,165,136,224,164,184,224,165,135,224,164,134,224,164,170,224,164,149,224,164,
-190,224,164,181,224,164,190,224,164,178,224,165,128,224,164,166,224,165,135,224,
-164,168,224,165,135,224,164,170,224,165,130,224,164,176,224,165,128,224,164,170,
-224,164,190,224,164,168,224,165,128,224,164,137,224,164,184,224,164,149,224,165,
-135,224,164,185,224,165,139,224,164,151,224,165,128,224,164,172,224,165,136,224,
-164,160,224,164,149,224,164,134,224,164,170,224,164,149,224,165,128,224,164,181,
-224,164,176,224,165,141,224,164,183,224,164,151,224,164,190,224,164,130,224,164,
-181,224,164,134,224,164,170,224,164,149,224,165,139,224,164,156,224,164,191,224,
-164,178,224,164,190,224,164,156,224,164,190,224,164,168,224,164,190,224,164,184,
-224,164,185,224,164,174,224,164,164,224,164,185,224,164,174,224,165,135,224,164,
-130,224,164,137,224,164,168,224,164,149,224,165,128,224,164,175,224,164,190,224,
-164,185,224,165,130,224,164,166,224,164,176,224,165,141,224,164,156,224,164,184,
-224,165,130,224,164,154,224,165,128,224,164,170,224,164,184,224,164,130,224,164,
-166,224,164,184,224,164,181,224,164,190,224,164,178,224,164,185,224,165,139,224,
-164,168,224,164,190,224,164,185,224,165,139,224,164,164,224,165,128,224,164,156,
-224,165,136,224,164,184,224,165,135,224,164,181,224,164,190,224,164,170,224,164,
-184,224,164,156,224,164,168,224,164,164,224,164,190,224,164,168,224,165,135,224,
-164,164,224,164,190,224,164,156,224,164,190,224,164,176,224,165,128,224,164,152,
-224,164,190,224,164,175,224,164,178,224,164,156,224,164,191,224,164,178,224,165,
-135,224,164,168,224,165,128,224,164,154,224,165,135,224,164,156,224,164,190,224,
-164,130,224,164,154,224,164,170,224,164,164,224,165,141,224,164,176,224,164,151,
-224,165,130,224,164,151,224,164,178,224,164,156,224,164,190,224,164,164,224,165,
-135,224,164,172,224,164,190,224,164,185,224,164,176,224,164,134,224,164,170,224,
-164,168,224,165,135,224,164,181,224,164,190,224,164,185,224,164,168,224,164,135,
-224,164,184,224,164,149,224,164,190,224,164,184,224,165,129,224,164,172,224,164,
-185,224,164,176,224,164,185,224,164,168,224,165,135,224,164,135,224,164,184,224,
-164,184,224,165,135,224,164,184,224,164,185,224,164,191,224,164,164,224,164,172,
-224,164,161,224,164,188,224,165,135,224,164,152,224,164,159,224,164,168,224,164,
-190,224,164,164,224,164,178,224,164,190,224,164,182,224,164,170,224,164,190,224,
-164,130,224,164,154,224,164,182,224,165,141,224,164,176,224,165,128,224,164,172,
-224,164,161,224,164,188,224,165,128,224,164,185,224,165,139,224,164,164,224,165,
-135,224,164,184,224,164,190,224,164,136,224,164,159,224,164,182,224,164,190,224,
-164,175,224,164,166,224,164,184,224,164,149,224,164,164,224,165,128,224,164,156,
-224,164,190,224,164,164,224,165,128,224,164,181,224,164,190,224,164,178,224,164,
-190,224,164,185,224,164,156,224,164,190,224,164,176,224,164,170,224,164,159,224,
-164,168,224,164,190,224,164,176,224,164,150,224,164,168,224,165,135,224,164,184,
-224,164,161,224,164,188,224,164,149,224,164,174,224,164,191,224,164,178,224,164,
-190,224,164,137,224,164,184,224,164,149,224,165,128,224,164,149,224,165,135,224,
-164,181,224,164,178,224,164,178,224,164,151,224,164,164,224,164,190,224,164,150,
-224,164,190,224,164,168,224,164,190,224,164,133,224,164,176,224,165,141,224,164,
-165,224,164,156,224,164,185,224,164,190,224,164,130,224,164,166,224,165,135,224,
-164,150,224,164,190,224,164,170,224,164,185,224,164,178,224,165,128,224,164,168,
-224,164,191,224,164,175,224,164,174,224,164,172,224,164,191,224,164,168,224,164,
-190,224,164,172,224,165,136,224,164,130,224,164,149,224,164,149,224,164,185,224,
-165,128,224,164,130,224,164,149,224,164,185,224,164,168,224,164,190,224,164,166,
-224,165,135,224,164,164,224,164,190,224,164,185,224,164,174,224,164,178,224,165,
-135,224,164,149,224,164,190,224,164,171,224,165,128,224,164,156,224,164,172,224,
-164,149,224,164,191,224,164,164,224,165,129,224,164,176,224,164,164,224,164,174,
-224,164,190,224,164,130,224,164,151,224,164,181,224,164,185,224,165,128,224,164,
-130,224,164,176,224,165,139,224,164,156,224,164,188,224,164,174,224,164,191,224,
-164,178,224,165,128,224,164,134,224,164,176,224,165,139,224,164,170,224,164,184,
-224,165,135,224,164,168,224,164,190,224,164,175,224,164,190,224,164,166,224,164,
-181,224,164,178,224,165,135,224,164,168,224,165,135,224,164,150,224,164,190,224,
-164,164,224,164,190,224,164,149,224,164,176,224,165,128,224,164,172,224,164,137,
-224,164,168,224,164,149,224,164,190,224,164,156,224,164,181,224,164,190,224,164,
-172,224,164,170,224,165,130,224,164,176,224,164,190,224,164,172,224,164,161,224,
-164,188,224,164,190,224,164,184,224,165,140,224,164,166,224,164,190,224,164,182,
-224,165,135,224,164,175,224,164,176,224,164,149,224,164,191,224,164,175,224,165,
-135,224,164,149,224,164,185,224,164,190,224,164,130,224,164,133,224,164,149,224,
-164,184,224,164,176,224,164,172,224,164,168,224,164,190,224,164,143,224,164,181,
-224,164,185,224,164,190,224,164,130,224,164,184,224,165,141,224,164,165,224,164,
-178,224,164,174,224,164,191,224,164,178,224,165,135,224,164,178,224,165,135,224,
-164,150,224,164,149,224,164,181,224,164,191,224,164,183,224,164,175,224,164,149,
-224,165,141,224,164,176,224,164,130,224,164,184,224,164,174,224,165,130,224,164,
-185,224,164,165,224,164,190,224,164,168,224,164,190,216,170,216,179,216,170,216,
-183,217,138,216,185,217,133,216,180,216,167,216,177,217,131,216,169,216,168,217,
-136,216,167,216,179,216,183,216,169,216,167,217,132,216,181,217,129,216,173,216,
-169,217,133,217,136,216,167,216,182,217,138,216,185,216,167,217,132,216,174,216,
-167,216,181,216,169,216,167,217,132,217,133,216,178,217,138,216,175,216,167,217,
-132,216,185,216,167,217,133,216,169,216,167,217,132,217,131,216,167,216,170,216,
-168,216,167,217,132,216,177,216,175,217,136,216,175,216,168,216,177,217,134,216,
-167,217,133,216,172,216,167,217,132,216,175,217,136,217,132,216,169,216,167,217,
-132,216,185,216,167,217,132,217,133,216,167,217,132,217,133,217,136,217,130,216,
-185,216,167,217,132,216,185,216,177,216,168,217,138,216,167,217,132,216,179,216,
-177,217,138,216,185,216,167,217,132,216,172,217,136,216,167,217,132,216,167,217,
-132,216,176,217,135,216,167,216,168,216,167,217,132,216,173,217,138,216,167,216,
-169,216,167,217,132,216,173,217,130,217,136,217,130,216,167,217,132,217,131,216,
-177,217,138,217,133,216,167,217,132,216,185,216,177,216,167,217,130,217,133,216,
-173,217,129,217,136,216,184,216,169,216,167,217,132,216,171,216,167,217,134,217,
-138,217,133,216,180,216,167,217,135,216,175,216,169,216,167,217,132,217,133,216,
-177,216,163,216,169,216,167,217,132,217,130,216,177,216,162,217,134,216,167,217,
-132,216,180,216,168,216,167,216,168,216,167,217,132,216,173,217,136,216,167,216,
-177,216,167,217,132,216,172,216,175,217,138,216,175,216,167,217,132,216,163,216,
-179,216,177,216,169,216,167,217,132,216,185,217,132,217,136,217,133,217,133,216,
-172,217,133,217,136,216,185,216,169,216,167,217,132,216,177,216,173,217,133,217,
-134,216,167,217,132,217,134,217,130,216,167,216,183,217,129,217,132,216,179,216,
-183,217,138,217,134,216,167,217,132,217,131,217,136,217,138,216,170,216,167,217,
-132,216,175,217,134,217,138,216,167,216,168,216,177,217,131,216,167,216,170,217,
-135,216,167,217,132,216,177,217,138,216,167,216,182,216,170,216,173,217,138,216,
-167,216,170,217,138,216,168,216,170,217,136,217,130,217,138,216,170,216,167,217,
-132,216,163,217,136,217,132,217,137,216,167,217,132,216,168,216,177,217,138,216,
-175,216,167,217,132,217,131,217,132,216,167,217,133,216,167,217,132,216,177,216,
-167,216,168,216,183,216,167,217,132,216,180,216,174,216,181,217,138,216,179,217,
-138,216,167,216,177,216,167,216,170,216,167,217,132,216,171,216,167,217,132,216,
-171,216,167,217,132,216,181,217,132,216,167,216,169,216,167,217,132,216,173,216,
-175,217,138,216,171,216,167,217,132,216,178,217,136,216,167,216,177,216,167,217,
-132,216,174,217,132,217,138,216,172,216,167,217,132,216,172,217,133,217,138,216,
-185,216,167,217,132,216,185,216,167,217,133,217,135,216,167,217,132,216,172,217,
-133,216,167,217,132,216,167,217,132,216,179,216,167,216,185,216,169,217,133,216,
-180,216,167,217,135,216,175,217,135,216,167,217,132,216,177,216,166,217,138,216,
-179,216,167,217,132,216,175,216,174,217,136,217,132,216,167,217,132,217,129,217,
-134,217,138,216,169,216,167,217,132,217,131,216,170,216,167,216,168,216,167,217,
-132,216,175,217,136,216,177,217,138,216,167,217,132,216,175,216,177,217,136,216,
-179,216,167,216,179,216,170,216,186,216,177,217,130,216,170,216,181,216,167,217,
-133,217,138,217,133,216,167,217,132,216,168,217,134,216,167,216,170,216,167,217,
-132,216,185,216,184,217,138,217,133,101,110,116,101,114,116,97,105,110,109,101,
-110,116,117,110,100,101,114,115,116,97,110,100,105,110,103,32,61,32,102,117,110,
-99,116,105,111,110,40,41,46,106,112,103,34,32,119,105,100,116,104,61,34,99,111,
-110,102,105,103,117,114,97,116,105,111,110,46,112,110,103,34,32,119,105,100,116,
-104,61,34,60,98,111,100,121,32,99,108,97,115,115,61,34,77,97,116,104,46,114,97,
-110,100,111,109,40,41,99,111,110,116,101,109,112,111,114,97,114,121,32,85,110,
-105,116,101,100,32,83,116,97,116,101,115,99,105,114,99,117,109,115,116,97,110,99
-,101,115,46,97,112,112,101,110,100,67,104,105,108,100,40,111,114,103,97,110,105,
-122,97,116,105,111,110,115,60,115,112,97,110,32,99,108,97,115,115,61,34,34,62,60
-,105,109,103,32,115,114,99,61,34,47,100,105,115,116,105,110,103,117,105,115,104,
-101,100,116,104,111,117,115,97,110,100,115,32,111,102,32,99,111,109,109,117,110,
-105,99,97,116,105,111,110,99,108,101,97,114,34,62,60,47,100,105,118,62,105,110,
-118,101,115,116,105,103,97,116,105,111,110,102,97,118,105,99,111,110,46,105,99,
-111,34,32,109,97,114,103,105,110,45,114,105,103,104,116,58,98,97,115,101,100,32,
-111,110,32,116,104,101,32,77,97,115,115,97,99,104,117,115,101,116,116,115,116,97
-,98,108,101,32,98,111,114,100,101,114,61,105,110,116,101,114,110,97,116,105,111,
-110,97,108,97,108,115,111,32,107,110,111,119,110,32,97,115,112,114,111,110,117,
-110,99,105,97,116,105,111,110,98,97,99,107,103,114,111,117,110,100,58,35,102,112
-,97,100,100,105,110,103,45,108,101,102,116,58,70,111,114,32,101,120,97,109,112,
-108,101,44,32,109,105,115,99,101,108,108,97,110,101,111,117,115,38,108,116,59,47
-,109,97,116,104,38,103,116,59,112,115,121,99,104,111,108,111,103,105,99,97,108,
-105,110,32,112,97,114,116,105,99,117,108,97,114,101,97,114,99,104,34,32,116,121,
-112,101,61,34,102,111,114,109,32,109,101,116,104,111,100,61,34,97,115,32,111,112
-,112,111,115,101,100,32,116,111,83,117,112,114,101,109,101,32,67,111,117,114,116
-,111,99,99,97,115,105,111,110,97,108,108,121,32,65,100,100,105,116,105,111,110,
-97,108,108,121,44,78,111,114,116,104,32,65,109,101,114,105,99,97,112,120,59,98,
-97,99,107,103,114,111,117,110,100,111,112,112,111,114,116,117,110,105,116,105,
-101,115,69,110,116,101,114,116,97,105,110,109,101,110,116,46,116,111,76,111,119,
-101,114,67,97,115,101,40,109,97,110,117,102,97,99,116,117,114,105,110,103,112,
-114,111,102,101,115,115,105,111,110,97,108,32,99,111,109,98,105,110,101,100,32,
-119,105,116,104,70,111,114,32,105,110,115,116,97,110,99,101,44,99,111,110,115,
-105,115,116,105,110,103,32,111,102,34,32,109,97,120,108,101,110,103,116,104,61,
-34,114,101,116,117,114,110,32,102,97,108,115,101,59,99,111,110,115,99,105,111,
-117,115,110,101,115,115,77,101,100,105,116,101,114,114,97,110,101,97,110,101,120
-,116,114,97,111,114,100,105,110,97,114,121,97,115,115,97,115,115,105,110,97,116,
-105,111,110,115,117,98,115,101,113,117,101,110,116,108,121,32,98,117,116,116,111
-,110,32,116,121,112,101,61,34,116,104,101,32,110,117,109,98,101,114,32,111,102,
-116,104,101,32,111,114,105,103,105,110,97,108,32,99,111,109,112,114,101,104,101,
-110,115,105,118,101,114,101,102,101,114,115,32,116,111,32,116,104,101,60,47,117,
-108,62,10,60,47,100,105,118,62,10,112,104,105,108,111,115,111,112,104,105,99,97,
-108,108,111,99,97,116,105,111,110,46,104,114,101,102,119,97,115,32,112,117,98,
-108,105,115,104,101,100,83,97,110,32,70,114,97,110,99,105,115,99,111,40,102,117,
-110,99,116,105,111,110,40,41,123,10,60,100,105,118,32,105,100,61,34,109,97,105,
-110,115,111,112,104,105,115,116,105,99,97,116,101,100,109,97,116,104,101,109,97,
-116,105,99,97,108,32,47,104,101,97,100,62,13,10,60,98,111,100,121,115,117,103,
-103,101,115,116,115,32,116,104,97,116,100,111,99,117,109,101,110,116,97,116,105,
-111,110,99,111,110,99,101,110,116,114,97,116,105,111,110,114,101,108,97,116,105,
-111,110,115,104,105,112,115,109,97,121,32,104,97,118,101,32,98,101,101,110,40,
-102,111,114,32,101,120,97,109,112,108,101,44,84,104,105,115,32,97,114,116,105,99
-,108,101,32,105,110,32,115,111,109,101,32,99,97,115,101,115,112,97,114,116,115,
-32,111,102,32,116,104,101,32,100,101,102,105,110,105,116,105,111,110,32,111,102,
-71,114,101,97,116,32,66,114,105,116,97,105,110,32,99,101,108,108,112,97,100,100,
-105,110,103,61,101,113,117,105,118,97,108,101,110,116,32,116,111,112,108,97,99,
-101,104,111,108,100,101,114,61,34,59,32,102,111,110,116,45,115,105,122,101,58,32
-,106,117,115,116,105,102,105,99,97,116,105,111,110,98,101,108,105,101,118,101,
-100,32,116,104,97,116,115,117,102,102,101,114,101,100,32,102,114,111,109,97,116,
-116,101,109,112,116,101,100,32,116,111,32,108,101,97,100,101,114,32,111,102,32,
-116,104,101,99,114,105,112,116,34,32,115,114,99,61,34,47,40,102,117,110,99,116,
-105,111,110,40,41,32,123,97,114,101,32,97,118,97,105,108,97,98,108,101,10,9,60,
-108,105,110,107,32,114,101,108,61,34,32,115,114,99,61,39,104,116,116,112,58,47,
-47,105,110,116,101,114,101,115,116,101,100,32,105,110,99,111,110,118,101,110,116
-,105,111,110,97,108,32,34,32,97,108,116,61,34,34,32,47,62,60,47,97,114,101,32,
-103,101,110,101,114,97,108,108,121,104,97,115,32,97,108,115,111,32,98,101,101,
-110,109,111,115,116,32,112,111,112,117,108,97,114,32,99,111,114,114,101,115,112,
-111,110,100,105,110,103,99,114,101,100,105,116,101,100,32,119,105,116,104,116,
-121,108,101,61,34,98,111,114,100,101,114,58,60,47,97,62,60,47,115,112,97,110,62,
-60,47,46,103,105,102,34,32,119,105,100,116,104,61,34,60,105,102,114,97,109,101,
-32,115,114,99,61,34,116,97,98,108,101,32,99,108,97,115,115,61,34,105,110,108,105
-,110,101,45,98,108,111,99,107,59,97,99,99,111,114,100,105,110,103,32,116,111,32,
-116,111,103,101,116,104,101,114,32,119,105,116,104,97,112,112,114,111,120,105,
-109,97,116,101,108,121,112,97,114,108,105,97,109,101,110,116,97,114,121,109,111,
-114,101,32,97,110,100,32,109,111,114,101,100,105,115,112,108,97,121,58,110,111,
-110,101,59,116,114,97,100,105,116,105,111,110,97,108,108,121,112,114,101,100,111
-,109,105,110,97,110,116,108,121,38,110,98,115,112,59,124,38,110,98,115,112,59,38
-,110,98,115,112,59,60,47,115,112,97,110,62,32,99,101,108,108,115,112,97,99,105,
-110,103,61,60,105,110,112,117,116,32,110,97,109,101,61,34,111,114,34,32,99,111,
-110,116,101,110,116,61,34,99,111,110,116,114,111,118,101,114,115,105,97,108,112,
-114,111,112,101,114,116,121,61,34,111,103,58,47,120,45,115,104,111,99,107,119,97
-,118,101,45,100,101,109,111,110,115,116,114,97,116,105,111,110,115,117,114,114,
-111,117,110,100,101,100,32,98,121,78,101,118,101,114,116,104,101,108,101,115,115
-,44,119,97,115,32,116,104,101,32,102,105,114,115,116,99,111,110,115,105,100,101,
-114,97,98,108,101,32,65,108,116,104,111,117,103,104,32,116,104,101,32,99,111,108
-,108,97,98,111,114,97,116,105,111,110,115,104,111,117,108,100,32,110,111,116,32,
-98,101,112,114,111,112,111,114,116,105,111,110,32,111,102,60,115,112,97,110,32,
-115,116,121,108,101,61,34,107,110,111,119,110,32,97,115,32,116,104,101,32,115,
-104,111,114,116,108,121,32,97,102,116,101,114,102,111,114,32,105,110,115,116,97,
-110,99,101,44,100,101,115,99,114,105,98,101,100,32,97,115,32,47,104,101,97,100,
-62,10,60,98,111,100,121,32,115,116,97,114,116,105,110,103,32,119,105,116,104,105
-,110,99,114,101,97,115,105,110,103,108,121,32,116,104,101,32,102,97,99,116,32,
-116,104,97,116,100,105,115,99,117,115,115,105,111,110,32,111,102,109,105,100,100
-,108,101,32,111,102,32,116,104,101,97,110,32,105,110,100,105,118,105,100,117,97,
-108,100,105,102,102,105,99,117,108,116,32,116,111,32,112,111,105,110,116,32,111,
-102,32,118,105,101,119,104,111,109,111,115,101,120,117,97,108,105,116,121,97,99,
-99,101,112,116,97,110,99,101,32,111,102,60,47,115,112,97,110,62,60,47,100,105,
-118,62,109,97,110,117,102,97,99,116,117,114,101,114,115,111,114,105,103,105,110,
-32,111,102,32,116,104,101,99,111,109,109,111,110,108,121,32,117,115,101,100,105,
-109,112,111,114,116,97,110,99,101,32,111,102,100,101,110,111,109,105,110,97,116,
-105,111,110,115,98,97,99,107,103,114,111,117,110,100,58,32,35,108,101,110,103,
-116,104,32,111,102,32,116,104,101,100,101,116,101,114,109,105,110,97,116,105,111
-,110,97,32,115,105,103,110,105,102,105,99,97,110,116,34,32,98,111,114,100,101,
-114,61,34,48,34,62,114,101,118,111,108,117,116,105,111,110,97,114,121,112,114,
-105,110,99,105,112,108,101,115,32,111,102,105,115,32,99,111,110,115,105,100,101,
-114,101,100,119,97,115,32,100,101,118,101,108,111,112,101,100,73,110,100,111,45,
-69,117,114,111,112,101,97,110,118,117,108,110,101,114,97,98,108,101,32,116,111,
-112,114,111,112,111,110,101,110,116,115,32,111,102,97,114,101,32,115,111,109,101
-,116,105,109,101,115,99,108,111,115,101,114,32,116,111,32,116,104,101,78,101,119
-,32,89,111,114,107,32,67,105,116,121,32,110,97,109,101,61,34,115,101,97,114,99,
-104,97,116,116,114,105,98,117,116,101,100,32,116,111,99,111,117,114,115,101,32,
-111,102,32,116,104,101,109,97,116,104,101,109,97,116,105,99,105,97,110,98,121,32
-,116,104,101,32,101,110,100,32,111,102,97,116,32,116,104,101,32,101,110,100,32,
-111,102,34,32,98,111,114,100,101,114,61,34,48,34,32,116,101,99,104,110,111,108,
-111,103,105,99,97,108,46,114,101,109,111,118,101,67,108,97,115,115,40,98,114,97,
-110,99,104,32,111,102,32,116,104,101,101,118,105,100,101,110,99,101,32,116,104,
-97,116,33,91,101,110,100,105,102,93,45,45,62,13,10,73,110,115,116,105,116,117,
-116,101,32,111,102,32,105,110,116,111,32,97,32,115,105,110,103,108,101,114,101,
-115,112,101,99,116,105,118,101,108,121,46,97,110,100,32,116,104,101,114,101,102,
-111,114,101,112,114,111,112,101,114,116,105,101,115,32,111,102,105,115,32,108,
-111,99,97,116,101,100,32,105,110,115,111,109,101,32,111,102,32,119,104,105,99,
-104,84,104,101,114,101,32,105,115,32,97,108,115,111,99,111,110,116,105,110,117,
-101,100,32,116,111,32,97,112,112,101,97,114,97,110,99,101,32,111,102,32,38,97,
-109,112,59,110,100,97,115,104,59,32,100,101,115,99,114,105,98,101,115,32,116,104
-,101,99,111,110,115,105,100,101,114,97,116,105,111,110,97,117,116,104,111,114,32
-,111,102,32,116,104,101,105,110,100,101,112,101,110,100,101,110,116,108,121,101,
-113,117,105,112,112,101,100,32,119,105,116,104,100,111,101,115,32,110,111,116,32
-,104,97,118,101,60,47,97,62,60,97,32,104,114,101,102,61,34,99,111,110,102,117,
-115,101,100,32,119,105,116,104,60,108,105,110,107,32,104,114,101,102,61,34,47,97
-,116,32,116,104,101,32,97,103,101,32,111,102,97,112,112,101,97,114,32,105,110,32
-,116,104,101,84,104,101,115,101,32,105,110,99,108,117,100,101,114,101,103,97,114
-,100,108,101,115,115,32,111,102,99,111,117,108,100,32,98,101,32,117,115,101,100,
-32,115,116,121,108,101,61,38,113,117,111,116,59,115,101,118,101,114,97,108,32,
-116,105,109,101,115,114,101,112,114,101,115,101,110,116,32,116,104,101,98,111,
-100,121,62,10,60,47,104,116,109,108,62,116,104,111,117,103,104,116,32,116,111,32
-,98,101,112,111,112,117,108,97,116,105,111,110,32,111,102,112,111,115,115,105,98
-,105,108,105,116,105,101,115,112,101,114,99,101,110,116,97,103,101,32,111,102,97
-,99,99,101,115,115,32,116,111,32,116,104,101,97,110,32,97,116,116,101,109,112,
-116,32,116,111,112,114,111,100,117,99,116,105,111,110,32,111,102,106,113,117,101
-,114,121,47,106,113,117,101,114,121,116,119,111,32,100,105,102,102,101,114,101,
-110,116,98,101,108,111,110,103,32,116,111,32,116,104,101,101,115,116,97,98,108,
-105,115,104,109,101,110,116,114,101,112,108,97,99,105,110,103,32,116,104,101,100
-,101,115,99,114,105,112,116,105,111,110,34,32,100,101,116,101,114,109,105,110,
-101,32,116,104,101,97,118,97,105,108,97,98,108,101,32,102,111,114,65,99,99,111,
-114,100,105,110,103,32,116,111,32,119,105,100,101,32,114,97,110,103,101,32,111,
-102,9,60,100,105,118,32,99,108,97,115,115,61,34,109,111,114,101,32,99,111,109,
-109,111,110,108,121,111,114,103,97,110,105,115,97,116,105,111,110,115,102,117,
-110,99,116,105,111,110,97,108,105,116,121,119,97,115,32,99,111,109,112,108,101,
-116,101,100,32,38,97,109,112,59,109,100,97,115,104,59,32,112,97,114,116,105,99,
-105,112,97,116,105,111,110,116,104,101,32,99,104,97,114,97,99,116,101,114,97,110
-,32,97,100,100,105,116,105,111,110,97,108,97,112,112,101,97,114,115,32,116,111,
-32,98,101,102,97,99,116,32,116,104,97,116,32,116,104,101,97,110,32,101,120,97,
-109,112,108,101,32,111,102,115,105,103,110,105,102,105,99,97,110,116,108,121,111
-,110,109,111,117,115,101,111,118,101,114,61,34,98,101,99,97,117,115,101,32,116,
-104,101,121,32,97,115,121,110,99,32,61,32,116,114,117,101,59,112,114,111,98,108,
-101,109,115,32,119,105,116,104,115,101,101,109,115,32,116,111,32,104,97,118,101,
-116,104,101,32,114,101,115,117,108,116,32,111,102,32,115,114,99,61,34,104,116,
-116,112,58,47,47,102,97,109,105,108,105,97,114,32,119,105,116,104,112,111,115,
-115,101,115,115,105,111,110,32,111,102,102,117,110,99,116,105,111,110,32,40,41,
-32,123,116,111,111,107,32,112,108,97,99,101,32,105,110,97,110,100,32,115,111,109
-,101,116,105,109,101,115,115,117,98,115,116,97,110,116,105,97,108,108,121,60,115
-,112,97,110,62,60,47,115,112,97,110,62,105,115,32,111,102,116,101,110,32,117,115
-,101,100,105,110,32,97,110,32,97,116,116,101,109,112,116,103,114,101,97,116,32,
-100,101,97,108,32,111,102,69,110,118,105,114,111,110,109,101,110,116,97,108,115,
-117,99,99,101,115,115,102,117,108,108,121,32,118,105,114,116,117,97,108,108,121,
-32,97,108,108,50,48,116,104,32,99,101,110,116,117,114,121,44,112,114,111,102,101
-,115,115,105,111,110,97,108,115,110,101,99,101,115,115,97,114,121,32,116,111,32,
-100,101,116,101,114,109,105,110,101,100,32,98,121,99,111,109,112,97,116,105,98,
-105,108,105,116,121,98,101,99,97,117,115,101,32,105,116,32,105,115,68,105,99,116
-,105,111,110,97,114,121,32,111,102,109,111,100,105,102,105,99,97,116,105,111,110
-,115,84,104,101,32,102,111,108,108,111,119,105,110,103,109,97,121,32,114,101,102
-,101,114,32,116,111,58,67,111,110,115,101,113,117,101,110,116,108,121,44,73,110,
-116,101,114,110,97,116,105,111,110,97,108,97,108,116,104,111,117,103,104,32,115,
-111,109,101,116,104,97,116,32,119,111,117,108,100,32,98,101,119,111,114,108,100,
-39,115,32,102,105,114,115,116,99,108,97,115,115,105,102,105,101,100,32,97,115,98
-,111,116,116,111,109,32,111,102,32,116,104,101,40,112,97,114,116,105,99,117,108,
-97,114,108,121,97,108,105,103,110,61,34,108,101,102,116,34,32,109,111,115,116,32
-,99,111,109,109,111,110,108,121,98,97,115,105,115,32,102,111,114,32,116,104,101,
-102,111,117,110,100,97,116,105,111,110,32,111,102,99,111,110,116,114,105,98,117,
-116,105,111,110,115,112,111,112,117,108,97,114,105,116,121,32,111,102,99,101,110
-,116,101,114,32,111,102,32,116,104,101,116,111,32,114,101,100,117,99,101,32,116,
-104,101,106,117,114,105,115,100,105,99,116,105,111,110,115,97,112,112,114,111,
-120,105,109,97,116,105,111,110,32,111,110,109,111,117,115,101,111,117,116,61,34,
-78,101,119,32,84,101,115,116,97,109,101,110,116,99,111,108,108,101,99,116,105,
-111,110,32,111,102,60,47,115,112,97,110,62,60,47,97,62,60,47,105,110,32,116,104,
-101,32,85,110,105,116,101,100,102,105,108,109,32,100,105,114,101,99,116,111,114,
-45,115,116,114,105,99,116,46,100,116,100,34,62,104,97,115,32,98,101,101,110,32,
-117,115,101,100,114,101,116,117,114,110,32,116,111,32,116,104,101,97,108,116,104
-,111,117,103,104,32,116,104,105,115,99,104,97,110,103,101,32,105,110,32,116,104,
-101,115,101,118,101,114,97,108,32,111,116,104,101,114,98,117,116,32,116,104,101,
-114,101,32,97,114,101,117,110,112,114,101,99,101,100,101,110,116,101,100,105,115
-,32,115,105,109,105,108,97,114,32,116,111,101,115,112,101,99,105,97,108,108,121,
-32,105,110,119,101,105,103,104,116,58,32,98,111,108,100,59,105,115,32,99,97,108,
-108,101,100,32,116,104,101,99,111,109,112,117,116,97,116,105,111,110,97,108,105,
-110,100,105,99,97,116,101,32,116,104,97,116,114,101,115,116,114,105,99,116,101,
-100,32,116,111,9,60,109,101,116,97,32,110,97,109,101,61,34,97,114,101,32,116,121
-,112,105,99,97,108,108,121,99,111,110,102,108,105,99,116,32,119,105,116,104,72,
-111,119,101,118,101,114,44,32,116,104,101,32,65,110,32,101,120,97,109,112,108,
-101,32,111,102,99,111,109,112,97,114,101,100,32,119,105,116,104,113,117,97,110,
-116,105,116,105,101,115,32,111,102,114,97,116,104,101,114,32,116,104,97,110,32,
-97,99,111,110,115,116,101,108,108,97,116,105,111,110,110,101,99,101,115,115,97,
-114,121,32,102,111,114,114,101,112,111,114,116,101,100,32,116,104,97,116,115,112
-,101,99,105,102,105,99,97,116,105,111,110,112,111,108,105,116,105,99,97,108,32,
-97,110,100,38,110,98,115,112,59,38,110,98,115,112,59,60,114,101,102,101,114,101,
-110,99,101,115,32,116,111,116,104,101,32,115,97,109,101,32,121,101,97,114,71,111
-,118,101,114,110,109,101,110,116,32,111,102,103,101,110,101,114,97,116,105,111,
-110,32,111,102,104,97,118,101,32,110,111,116,32,98,101,101,110,115,101,118,101,
-114,97,108,32,121,101,97,114,115,99,111,109,109,105,116,109,101,110,116,32,116,
-111,9,9,60,117,108,32,99,108,97,115,115,61,34,118,105,115,117,97,108,105,122,97,
-116,105,111,110,49,57,116,104,32,99,101,110,116,117,114,121,44,112,114,97,99,116
-,105,116,105,111,110,101,114,115,116,104,97,116,32,104,101,32,119,111,117,108,
-100,97,110,100,32,99,111,110,116,105,110,117,101,100,111,99,99,117,112,97,116,
-105,111,110,32,111,102,105,115,32,100,101,102,105,110,101,100,32,97,115,99,101,
-110,116,114,101,32,111,102,32,116,104,101,116,104,101,32,97,109,111,117,110,116,
-32,111,102,62,60,100,105,118,32,115,116,121,108,101,61,34,101,113,117,105,118,97
-,108,101,110,116,32,111,102,100,105,102,102,101,114,101,110,116,105,97,116,101,
-98,114,111,117,103,104,116,32,97,98,111,117,116,109,97,114,103,105,110,45,108,
-101,102,116,58,32,97,117,116,111,109,97,116,105,99,97,108,108,121,116,104,111,
-117,103,104,116,32,111,102,32,97,115,83,111,109,101,32,111,102,32,116,104,101,
-115,101,10,60,100,105,118,32,99,108,97,115,115,61,34,105,110,112,117,116,32,99,
-108,97,115,115,61,34,114,101,112,108,97,99,101,100,32,119,105,116,104,105,115,32
-,111,110,101,32,111,102,32,116,104,101,101,100,117,99,97,116,105,111,110,32,97,
-110,100,105,110,102,108,117,101,110,99,101,100,32,98,121,114,101,112,117,116,97,
-116,105,111,110,32,97,115,10,60,109,101,116,97,32,110,97,109,101,61,34,97,99,99,
-111,109,109,111,100,97,116,105,111,110,60,47,100,105,118,62,10,60,47,100,105,118
-,62,108,97,114,103,101,32,112,97,114,116,32,111,102,73,110,115,116,105,116,117,
-116,101,32,102,111,114,116,104,101,32,115,111,45,99,97,108,108,101,100,32,97,103
-,97,105,110,115,116,32,116,104,101,32,73,110,32,116,104,105,115,32,99,97,115,101
-,44,119,97,115,32,97,112,112,111,105,110,116,101,100,99,108,97,105,109,101,100,
-32,116,111,32,98,101,72,111,119,101,118,101,114,44,32,116,104,105,115,68,101,112
-,97,114,116,109,101,110,116,32,111,102,116,104,101,32,114,101,109,97,105,110,105
-,110,103,101,102,102,101,99,116,32,111,110,32,116,104,101,112,97,114,116,105,99,
-117,108,97,114,108,121,32,100,101,97,108,32,119,105,116,104,32,116,104,101,10,60
-,100,105,118,32,115,116,121,108,101,61,34,97,108,109,111,115,116,32,97,108,119,
-97,121,115,97,114,101,32,99,117,114,114,101,110,116,108,121,101,120,112,114,101,
-115,115,105,111,110,32,111,102,112,104,105,108,111,115,111,112,104,121,32,111,
-102,102,111,114,32,109,111,114,101,32,116,104,97,110,99,105,118,105,108,105,122,
-97,116,105,111,110,115,111,110,32,116,104,101,32,105,115,108,97,110,100,115,101,
-108,101,99,116,101,100,73,110,100,101,120,99,97,110,32,114,101,115,117,108,116,
-32,105,110,34,32,118,97,108,117,101,61,34,34,32,47,62,116,104,101,32,115,116,114
-,117,99,116,117,114,101,32,47,62,60,47,97,62,60,47,100,105,118,62,77,97,110,121,
-32,111,102,32,116,104,101,115,101,99,97,117,115,101,100,32,98,121,32,116,104,101
-,111,102,32,116,104,101,32,85,110,105,116,101,100,115,112,97,110,32,99,108,97,
-115,115,61,34,109,99,97,110,32,98,101,32,116,114,97,99,101,100,105,115,32,114,
-101,108,97,116,101,100,32,116,111,98,101,99,97,109,101,32,111,110,101,32,111,102
-,105,115,32,102,114,101,113,117,101,110,116,108,121,108,105,118,105,110,103,32,
-105,110,32,116,104,101,116,104,101,111,114,101,116,105,99,97,108,108,121,70,111,
-108,108,111,119,105,110,103,32,116,104,101,82,101,118,111,108,117,116,105,111,
-110,97,114,121,103,111,118,101,114,110,109,101,110,116,32,105,110,105,115,32,100
-,101,116,101,114,109,105,110,101,100,116,104,101,32,112,111,108,105,116,105,99,
-97,108,105,110,116,114,111,100,117,99,101,100,32,105,110,115,117,102,102,105,99,
-105,101,110,116,32,116,111,100,101,115,99,114,105,112,116,105,111,110,34,62,115,
-104,111,114,116,32,115,116,111,114,105,101,115,115,101,112,97,114,97,116,105,111
-,110,32,111,102,97,115,32,116,111,32,119,104,101,116,104,101,114,107,110,111,119
-,110,32,102,111,114,32,105,116,115,119,97,115,32,105,110,105,116,105,97,108,108,
-121,100,105,115,112,108,97,121,58,98,108,111,99,107,105,115,32,97,110,32,101,120
-,97,109,112,108,101,116,104,101,32,112,114,105,110,99,105,112,97,108,99,111,110,
-115,105,115,116,115,32,111,102,32,97,114,101,99,111,103,110,105,122,101,100,32,
-97,115,47,98,111,100,121,62,60,47,104,116,109,108,62,97,32,115,117,98,115,116,97
-,110,116,105,97,108,114,101,99,111,110,115,116,114,117,99,116,101,100,104,101,97
-,100,32,111,102,32,115,116,97,116,101,114,101,115,105,115,116,97,110,99,101,32,
-116,111,117,110,100,101,114,103,114,97,100,117,97,116,101,84,104,101,114,101,32,
-97,114,101,32,116,119,111,103,114,97,118,105,116,97,116,105,111,110,97,108,97,
-114,101,32,100,101,115,99,114,105,98,101,100,105,110,116,101,110,116,105,111,110
-,97,108,108,121,115,101,114,118,101,100,32,97,115,32,116,104,101,99,108,97,115,
-115,61,34,104,101,97,100,101,114,111,112,112,111,115,105,116,105,111,110,32,116,
-111,102,117,110,100,97,109,101,110,116,97,108,108,121,100,111,109,105,110,97,116
-,101,100,32,116,104,101,97,110,100,32,116,104,101,32,111,116,104,101,114,97,108,
-108,105,97,110,99,101,32,119,105,116,104,119,97,115,32,102,111,114,99,101,100,32
-,116,111,114,101,115,112,101,99,116,105,118,101,108,121,44,97,110,100,32,112,111
-,108,105,116,105,99,97,108,105,110,32,115,117,112,112,111,114,116,32,111,102,112
-,101,111,112,108,101,32,105,110,32,116,104,101,50,48,116,104,32,99,101,110,116,
-117,114,121,46,97,110,100,32,112,117,98,108,105,115,104,101,100,108,111,97,100,
-67,104,97,114,116,98,101,97,116,116,111,32,117,110,100,101,114,115,116,97,110,
-100,109,101,109,98,101,114,32,115,116,97,116,101,115,101,110,118,105,114,111,110
-,109,101,110,116,97,108,102,105,114,115,116,32,104,97,108,102,32,111,102,99,111,
-117,110,116,114,105,101,115,32,97,110,100,97,114,99,104,105,116,101,99,116,117,
-114,97,108,98,101,32,99,111,110,115,105,100,101,114,101,100,99,104,97,114,97,99,
-116,101,114,105,122,101,100,99,108,101,97,114,73,110,116,101,114,118,97,108,97,
-117,116,104,111,114,105,116,97,116,105,118,101,70,101,100,101,114,97,116,105,111
-,110,32,111,102,119,97,115,32,115,117,99,99,101,101,100,101,100,97,110,100,32,
-116,104,101,114,101,32,97,114,101,97,32,99,111,110,115,101,113,117,101,110,99,
-101,116,104,101,32,80,114,101,115,105,100,101,110,116,97,108,115,111,32,105,110,
-99,108,117,100,101,100,102,114,101,101,32,115,111,102,116,119,97,114,101,115,117
-,99,99,101,115,115,105,111,110,32,111,102,100,101,118,101,108,111,112,101,100,32
-,116,104,101,119,97,115,32,100,101,115,116,114,111,121,101,100,97,119,97,121,32,
-102,114,111,109,32,116,104,101,59,10,60,47,115,99,114,105,112,116,62,10,60,97,
-108,116,104,111,117,103,104,32,116,104,101,121,102,111,108,108,111,119,101,100,
-32,98,121,32,97,109,111,114,101,32,112,111,119,101,114,102,117,108,114,101,115,
-117,108,116,101,100,32,105,110,32,97,85,110,105,118,101,114,115,105,116,121,32,
-111,102,72,111,119,101,118,101,114,44,32,109,97,110,121,116,104,101,32,112,114,
-101,115,105,100,101,110,116,72,111,119,101,118,101,114,44,32,115,111,109,101,105
-,115,32,116,104,111,117,103,104,116,32,116,111,117,110,116,105,108,32,116,104,
-101,32,101,110,100,119,97,115,32,97,110,110,111,117,110,99,101,100,97,114,101,32
-,105,109,112,111,114,116,97,110,116,97,108,115,111,32,105,110,99,108,117,100,101
-,115,62,60,105,110,112,117,116,32,116,121,112,101,61,116,104,101,32,99,101,110,
-116,101,114,32,111,102,32,68,79,32,78,79,84,32,65,76,84,69,82,117,115,101,100,32
-,116,111,32,114,101,102,101,114,116,104,101,109,101,115,47,63,115,111,114,116,61
-,116,104,97,116,32,104,97,100,32,98,101,101,110,116,104,101,32,98,97,115,105,115
-,32,102,111,114,104,97,115,32,100,101,118,101,108,111,112,101,100,105,110,32,116
-,104,101,32,115,117,109,109,101,114,99,111,109,112,97,114,97,116,105,118,101,108
-,121,100,101,115,99,114,105,98,101,100,32,116,104,101,115,117,99,104,32,97,115,
-32,116,104,111,115,101,116,104,101,32,114,101,115,117,108,116,105,110,103,105,
-115,32,105,109,112,111,115,115,105,98,108,101,118,97,114,105,111,117,115,32,111,
-116,104,101,114,83,111,117,116,104,32,65,102,114,105,99,97,110,104,97,118,101,32
-,116,104,101,32,115,97,109,101,101,102,102,101,99,116,105,118,101,110,101,115,
-115,105,110,32,119,104,105,99,104,32,99,97,115,101,59,32,116,101,120,116,45,97,
-108,105,103,110,58,115,116,114,117,99,116,117,114,101,32,97,110,100,59,32,98,97,
-99,107,103,114,111,117,110,100,58,114,101,103,97,114,100,105,110,103,32,116,104,
-101,115,117,112,112,111,114,116,101,100,32,116,104,101,105,115,32,97,108,115,111
-,32,107,110,111,119,110,115,116,121,108,101,61,34,109,97,114,103,105,110,105,110
-,99,108,117,100,105,110,103,32,116,104,101,98,97,104,97,115,97,32,77,101,108,97,
-121,117,110,111,114,115,107,32,98,111,107,109,195,165,108,110,111,114,115,107,32
-,110,121,110,111,114,115,107,115,108,111,118,101,110,197,161,196,141,105,110,97,
-105,110,116,101,114,110,97,99,105,111,110,97,108,99,97,108,105,102,105,99,97,99,
-105,195,179,110,99,111,109,117,110,105,99,97,99,105,195,179,110,99,111,110,115,
-116,114,117,99,99,105,195,179,110,34,62,60,100,105,118,32,99,108,97,115,115,61,
-34,100,105,115,97,109,98,105,103,117,97,116,105,111,110,68,111,109,97,105,110,78
-,97,109,101,39,44,32,39,97,100,109,105,110,105,115,116,114,97,116,105,111,110,
-115,105,109,117,108,116,97,110,101,111,117,115,108,121,116,114,97,110,115,112,
-111,114,116,97,116,105,111,110,73,110,116,101,114,110,97,116,105,111,110,97,108,
-32,109,97,114,103,105,110,45,98,111,116,116,111,109,58,114,101,115,112,111,110,
-115,105,98,105,108,105,116,121,60,33,91,101,110,100,105,102,93,45,45,62,10,60,47
-,62,60,109,101,116,97,32,110,97,109,101,61,34,105,109,112,108,101,109,101,110,
-116,97,116,105,111,110,105,110,102,114,97,115,116,114,117,99,116,117,114,101,114
-,101,112,114,101,115,101,110,116,97,116,105,111,110,98,111,114,100,101,114,45,98
-,111,116,116,111,109,58,60,47,104,101,97,100,62,10,60,98,111,100,121,62,61,104,
-116,116,112,37,51,65,37,50,70,37,50,70,60,102,111,114,109,32,109,101,116,104,111
-,100,61,34,109,101,116,104,111,100,61,34,112,111,115,116,34,32,47,102,97,118,105
-,99,111,110,46,105,99,111,34,32,125,41,59,10,60,47,115,99,114,105,112,116,62,10,
-46,115,101,116,65,116,116,114,105,98,117,116,101,40,65,100,109,105,110,105,115,
-116,114,97,116,105,111,110,61,32,110,101,119,32,65,114,114,97,121,40,41,59,60,33
-,91,101,110,100,105,102,93,45,45,62,13,10,100,105,115,112,108,97,121,58,98,108,
-111,99,107,59,85,110,102,111,114,116,117,110,97,116,101,108,121,44,34,62,38,110,
-98,115,112,59,60,47,100,105,118,62,47,102,97,118,105,99,111,110,46,105,99,111,34
-,62,61,39,115,116,121,108,101,115,104,101,101,116,39,32,105,100,101,110,116,105,
-102,105,99,97,116,105,111,110,44,32,102,111,114,32,101,120,97,109,112,108,101,44
-,60,108,105,62,60,97,32,104,114,101,102,61,34,47,97,110,32,97,108,116,101,114,
-110,97,116,105,118,101,97,115,32,97,32,114,101,115,117,108,116,32,111,102,112,
-116,34,62,60,47,115,99,114,105,112,116,62,10,116,121,112,101,61,34,115,117,98,
-109,105,116,34,32,10,40,102,117,110,99,116,105,111,110,40,41,32,123,114,101,99,
-111,109,109,101,110,100,97,116,105,111,110,102,111,114,109,32,97,99,116,105,111,
-110,61,34,47,116,114,97,110,115,102,111,114,109,97,116,105,111,110,114,101,99,
-111,110,115,116,114,117,99,116,105,111,110,46,115,116,121,108,101,46,100,105,115
-,112,108,97,121,32,65,99,99,111,114,100,105,110,103,32,116,111,32,104,105,100,
-100,101,110,34,32,110,97,109,101,61,34,97,108,111,110,103,32,119,105,116,104,32,
-116,104,101,100,111,99,117,109,101,110,116,46,98,111,100,121,46,97,112,112,114,
-111,120,105,109,97,116,101,108,121,32,67,111,109,109,117,110,105,99,97,116,105,
-111,110,115,112,111,115,116,34,32,97,99,116,105,111,110,61,34,109,101,97,110,105
-,110,103,32,38,113,117,111,116,59,45,45,60,33,91,101,110,100,105,102,93,45,45,62
-,80,114,105,109,101,32,77,105,110,105,115,116,101,114,99,104,97,114,97,99,116,
-101,114,105,115,116,105,99,60,47,97,62,32,60,97,32,99,108,97,115,115,61,116,104,
-101,32,104,105,115,116,111,114,121,32,111,102,32,111,110,109,111,117,115,101,111
-,118,101,114,61,34,116,104,101,32,103,111,118,101,114,110,109,101,110,116,104,
-114,101,102,61,34,104,116,116,112,115,58,47,47,119,97,115,32,111,114,105,103,105
-,110,97,108,108,121,119,97,115,32,105,110,116,114,111,100,117,99,101,100,99,108,
-97,115,115,105,102,105,99,97,116,105,111,110,114,101,112,114,101,115,101,110,116
-,97,116,105,118,101,97,114,101,32,99,111,110,115,105,100,101,114,101,100,60,33,
-91,101,110,100,105,102,93,45,45,62,10,10,100,101,112,101,110,100,115,32,111,110,
-32,116,104,101,85,110,105,118,101,114,115,105,116,121,32,111,102,32,105,110,32,
-99,111,110,116,114,97,115,116,32,116,111,32,112,108,97,99,101,104,111,108,100,
-101,114,61,34,105,110,32,116,104,101,32,99,97,115,101,32,111,102,105,110,116,101
-,114,110,97,116,105,111,110,97,108,32,99,111,110,115,116,105,116,117,116,105,111
-,110,97,108,115,116,121,108,101,61,34,98,111,114,100,101,114,45,58,32,102,117,
-110,99,116,105,111,110,40,41,32,123,66,101,99,97,117,115,101,32,111,102,32,116,
-104,101,45,115,116,114,105,99,116,46,100,116,100,34,62,10,60,116,97,98,108,101,
-32,99,108,97,115,115,61,34,97,99,99,111,109,112,97,110,105,101,100,32,98,121,97,
-99,99,111,117,110,116,32,111,102,32,116,104,101,60,115,99,114,105,112,116,32,115
-,114,99,61,34,47,110,97,116,117,114,101,32,111,102,32,116,104,101,32,116,104,101
-,32,112,101,111,112,108,101,32,105,110,32,105,110,32,97,100,100,105,116,105,111,
-110,32,116,111,115,41,59,32,106,115,46,105,100,32,61,32,105,100,34,32,119,105,
-100,116,104,61,34,49,48,48,37,34,114,101,103,97,114,100,105,110,103,32,116,104,
-101,32,82,111,109,97,110,32,67,97,116,104,111,108,105,99,97,110,32,105,110,100,
-101,112,101,110,100,101,110,116,102,111,108,108,111,119,105,110,103,32,116,104,
-101,32,46,103,105,102,34,32,119,105,100,116,104,61,34,49,116,104,101,32,102,111,
-108,108,111,119,105,110,103,32,100,105,115,99,114,105,109,105,110,97,116,105,111
-,110,97,114,99,104,97,101,111,108,111,103,105,99,97,108,112,114,105,109,101,32,
-109,105,110,105,115,116,101,114,46,106,115,34,62,60,47,115,99,114,105,112,116,62
-,99,111,109,98,105,110,97,116,105,111,110,32,111,102,32,109,97,114,103,105,110,
-119,105,100,116,104,61,34,99,114,101,97,116,101,69,108,101,109,101,110,116,40,
-119,46,97,116,116,97,99,104,69,118,101,110,116,40,60,47,97,62,60,47,116,100,62,
-60,47,116,114,62,115,114,99,61,34,104,116,116,112,115,58,47,47,97,73,110,32,112,
-97,114,116,105,99,117,108,97,114,44,32,97,108,105,103,110,61,34,108,101,102,116,
-34,32,67,122,101,99,104,32,82,101,112,117,98,108,105,99,85,110,105,116,101,100,
-32,75,105,110,103,100,111,109,99,111,114,114,101,115,112,111,110,100,101,110,99,
-101,99,111,110,99,108,117,100,101,100,32,116,104,97,116,46,104,116,109,108,34,32
-,116,105,116,108,101,61,34,40,102,117,110,99,116,105,111,110,32,40,41,32,123,99,
-111,109,101,115,32,102,114,111,109,32,116,104,101,97,112,112,108,105,99,97,116,
-105,111,110,32,111,102,60,115,112,97,110,32,99,108,97,115,115,61,34,115,98,101,
-108,105,101,118,101,100,32,116,111,32,98,101,101,109,101,110,116,40,39,115,99,
-114,105,112,116,39,60,47,97,62,10,60,47,108,105,62,10,60,108,105,118,101,114,121
-,32,100,105,102,102,101,114,101,110,116,62,60,115,112,97,110,32,99,108,97,115,
-115,61,34,111,112,116,105,111,110,32,118,97,108,117,101,61,34,40,97,108,115,111,
-32,107,110,111,119,110,32,97,115,9,60,108,105,62,60,97,32,104,114,101,102,61,34,
-62,60,105,110,112,117,116,32,110,97,109,101,61,34,115,101,112,97,114,97,116,101,
-100,32,102,114,111,109,114,101,102,101,114,114,101,100,32,116,111,32,97,115,32,
-118,97,108,105,103,110,61,34,116,111,112,34,62,102,111,117,110,100,101,114,32,
-111,102,32,116,104,101,97,116,116,101,109,112,116,105,110,103,32,116,111,32,99,
-97,114,98,111,110,32,100,105,111,120,105,100,101,10,10,60,100,105,118,32,99,108,
-97,115,115,61,34,99,108,97,115,115,61,34,115,101,97,114,99,104,45,47,98,111,100,
-121,62,10,60,47,104,116,109,108,62,111,112,112,111,114,116,117,110,105,116,121,
-32,116,111,99,111,109,109,117,110,105,99,97,116,105,111,110,115,60,47,104,101,97
-,100,62,13,10,60,98,111,100,121,32,115,116,121,108,101,61,34,119,105,100,116,104
-,58,84,105,225,186,191,110,103,32,86,105,225,187,135,116,99,104,97,110,103,101,
-115,32,105,110,32,116,104,101,98,111,114,100,101,114,45,99,111,108,111,114,58,35
-,48,34,32,98,111,114,100,101,114,61,34,48,34,32,60,47,115,112,97,110,62,60,47,
-100,105,118,62,60,119,97,115,32,100,105,115,99,111,118,101,114,101,100,34,32,116
-,121,112,101,61,34,116,101,120,116,34,32,41,59,10,60,47,115,99,114,105,112,116,
-62,10,10,68,101,112,97,114,116,109,101,110,116,32,111,102,32,101,99,99,108,101,
-115,105,97,115,116,105,99,97,108,116,104,101,114,101,32,104,97,115,32,98,101,101
-,110,114,101,115,117,108,116,105,110,103,32,102,114,111,109,60,47,98,111,100,121
-,62,60,47,104,116,109,108,62,104,97,115,32,110,101,118,101,114,32,98,101,101,110
-,116,104,101,32,102,105,114,115,116,32,116,105,109,101,105,110,32,114,101,115,
-112,111,110,115,101,32,116,111,97,117,116,111,109,97,116,105,99,97,108,108,121,
-32,60,47,100,105,118,62,10,10,60,100,105,118,32,105,119,97,115,32,99,111,110,115
-,105,100,101,114,101,100,112,101,114,99,101,110,116,32,111,102,32,116,104,101,34
-,32,47,62,60,47,97,62,60,47,100,105,118,62,99,111,108,108,101,99,116,105,111,110
-,32,111,102,32,100,101,115,99,101,110,100,101,100,32,102,114,111,109,115,101,99,
-116,105,111,110,32,111,102,32,116,104,101,97,99,99,101,112,116,45,99,104,97,114,
-115,101,116,116,111,32,98,101,32,99,111,110,102,117,115,101,100,109,101,109,98,
-101,114,32,111,102,32,116,104,101,32,112,97,100,100,105,110,103,45,114,105,103,
-104,116,58,116,114,97,110,115,108,97,116,105,111,110,32,111,102,105,110,116,101,
-114,112,114,101,116,97,116,105,111,110,32,104,114,101,102,61,39,104,116,116,112,
-58,47,47,119,104,101,116,104,101,114,32,111,114,32,110,111,116,84,104,101,114,
-101,32,97,114,101,32,97,108,115,111,116,104,101,114,101,32,97,114,101,32,109,97,
-110,121,97,32,115,109,97,108,108,32,110,117,109,98,101,114,111,116,104,101,114,
-32,112,97,114,116,115,32,111,102,105,109,112,111,115,115,105,98,108,101,32,116,
-111,32,32,99,108,97,115,115,61,34,98,117,116,116,111,110,108,111,99,97,116,101,
-100,32,105,110,32,116,104,101,46,32,72,111,119,101,118,101,114,44,32,116,104,101
-,97,110,100,32,101,118,101,110,116,117,97,108,108,121,65,116,32,116,104,101,32,
-101,110,100,32,111,102,32,98,101,99,97,117,115,101,32,111,102,32,105,116,115,114
-,101,112,114,101,115,101,110,116,115,32,116,104,101,60,102,111,114,109,32,97,99,
-116,105,111,110,61,34,32,109,101,116,104,111,100,61,34,112,111,115,116,34,105,
-116,32,105,115,32,112,111,115,115,105,98,108,101,109,111,114,101,32,108,105,107,
-101,108,121,32,116,111,97,110,32,105,110,99,114,101,97,115,101,32,105,110,104,97
-,118,101,32,97,108,115,111,32,98,101,101,110,99,111,114,114,101,115,112,111,110,
-100,115,32,116,111,97,110,110,111,117,110,99,101,100,32,116,104,97,116,97,108,
-105,103,110,61,34,114,105,103,104,116,34,62,109,97,110,121,32,99,111,117,110,116
-,114,105,101,115,102,111,114,32,109,97,110,121,32,121,101,97,114,115,101,97,114,
-108,105,101,115,116,32,107,110,111,119,110,98,101,99,97,117,115,101,32,105,116,
-32,119,97,115,112,116,34,62,60,47,115,99,114,105,112,116,62,13,32,118,97,108,105
-,103,110,61,34,116,111,112,34,32,105,110,104,97,98,105,116,97,110,116,115,32,111
-,102,102,111,108,108,111,119,105,110,103,32,121,101,97,114,13,10,60,100,105,118,
-32,99,108,97,115,115,61,34,109,105,108,108,105,111,110,32,112,101,111,112,108,
-101,99,111,110,116,114,111,118,101,114,115,105,97,108,32,99,111,110,99,101,114,
-110,105,110,103,32,116,104,101,97,114,103,117,101,32,116,104,97,116,32,116,104,
-101,103,111,118,101,114,110,109,101,110,116,32,97,110,100,97,32,114,101,102,101,
-114,101,110,99,101,32,116,111,116,114,97,110,115,102,101,114,114,101,100,32,116,
-111,100,101,115,99,114,105,98,105,110,103,32,116,104,101,32,115,116,121,108,101,
-61,34,99,111,108,111,114,58,97,108,116,104,111,117,103,104,32,116,104,101,114,
-101,98,101,115,116,32,107,110,111,119,110,32,102,111,114,115,117,98,109,105,116,
-34,32,110,97,109,101,61,34,109,117,108,116,105,112,108,105,99,97,116,105,111,110
-,109,111,114,101,32,116,104,97,110,32,111,110,101,32,114,101,99,111,103,110,105,
-116,105,111,110,32,111,102,67,111,117,110,99,105,108,32,111,102,32,116,104,101,
-101,100,105,116,105,111,110,32,111,102,32,116,104,101,32,32,60,109,101,116,97,32
-,110,97,109,101,61,34,69,110,116,101,114,116,97,105,110,109,101,110,116,32,97,
-119,97,121,32,102,114,111,109,32,116,104,101,32,59,109,97,114,103,105,110,45,114
-,105,103,104,116,58,97,116,32,116,104,101,32,116,105,109,101,32,111,102,105,110,
-118,101,115,116,105,103,97,116,105,111,110,115,99,111,110,110,101,99,116,101,100
-,32,119,105,116,104,97,110,100,32,109,97,110,121,32,111,116,104,101,114,97,108,
-116,104,111,117,103,104,32,105,116,32,105,115,98,101,103,105,110,110,105,110,103
-,32,119,105,116,104,32,60,115,112,97,110,32,99,108,97,115,115,61,34,100,101,115,
-99,101,110,100,97,110,116,115,32,111,102,60,115,112,97,110,32,99,108,97,115,115,
-61,34,105,32,97,108,105,103,110,61,34,114,105,103,104,116,34,60,47,104,101,97,
-100,62,10,60,98,111,100,121,32,97,115,112,101,99,116,115,32,111,102,32,116,104,
-101,104,97,115,32,115,105,110,99,101,32,98,101,101,110,69,117,114,111,112,101,97
-,110,32,85,110,105,111,110,114,101,109,105,110,105,115,99,101,110,116,32,111,102
-,109,111,114,101,32,100,105,102,102,105,99,117,108,116,86,105,99,101,32,80,114,
-101,115,105,100,101,110,116,99,111,109,112,111,115,105,116,105,111,110,32,111,
-102,112,97,115,115,101,100,32,116,104,114,111,117,103,104,109,111,114,101,32,105
-,109,112,111,114,116,97,110,116,102,111,110,116,45,115,105,122,101,58,49,49,112,
-120,101,120,112,108,97,110,97,116,105,111,110,32,111,102,116,104,101,32,99,111,
-110,99,101,112,116,32,111,102,119,114,105,116,116,101,110,32,105,110,32,116,104,
-101,9,60,115,112,97,110,32,99,108,97,115,115,61,34,105,115,32,111,110,101,32,111
-,102,32,116,104,101,32,114,101,115,101,109,98,108,97,110,99,101,32,116,111,111,
-110,32,116,104,101,32,103,114,111,117,110,100,115,119,104,105,99,104,32,99,111,
-110,116,97,105,110,115,105,110,99,108,117,100,105,110,103,32,116,104,101,32,100,
-101,102,105,110,101,100,32,98,121,32,116,104,101,112,117,98,108,105,99,97,116,
-105,111,110,32,111,102,109,101,97,110,115,32,116,104,97,116,32,116,104,101,111,
-117,116,115,105,100,101,32,111,102,32,116,104,101,115,117,112,112,111,114,116,32
-,111,102,32,116,104,101,60,105,110,112,117,116,32,99,108,97,115,115,61,34,60,115
-,112,97,110,32,99,108,97,115,115,61,34,116,40,77,97,116,104,46,114,97,110,100,
-111,109,40,41,109,111,115,116,32,112,114,111,109,105,110,101,110,116,100,101,115
-,99,114,105,112,116,105,111,110,32,111,102,67,111,110,115,116,97,110,116,105,110
-,111,112,108,101,119,101,114,101,32,112,117,98,108,105,115,104,101,100,60,100,
-105,118,32,99,108,97,115,115,61,34,115,101,97,112,112,101,97,114,115,32,105,110,
-32,116,104,101,49,34,32,104,101,105,103,104,116,61,34,49,34,32,109,111,115,116,
-32,105,109,112,111,114,116,97,110,116,119,104,105,99,104,32,105,110,99,108,117,
-100,101,115,119,104,105,99,104,32,104,97,100,32,98,101,101,110,100,101,115,116,
-114,117,99,116,105,111,110,32,111,102,116,104,101,32,112,111,112,117,108,97,116,
-105,111,110,10,9,60,100,105,118,32,99,108,97,115,115,61,34,112,111,115,115,105,
-98,105,108,105,116,121,32,111,102,115,111,109,101,116,105,109,101,115,32,117,115
-,101,100,97,112,112,101,97,114,32,116,111,32,104,97,118,101,115,117,99,99,101,
-115,115,32,111,102,32,116,104,101,105,110,116,101,110,100,101,100,32,116,111,32,
-98,101,112,114,101,115,101,110,116,32,105,110,32,116,104,101,115,116,121,108,101
-,61,34,99,108,101,97,114,58,98,13,10,60,47,115,99,114,105,112,116,62,13,10,60,
-119,97,115,32,102,111,117,110,100,101,100,32,105,110,105,110,116,101,114,118,105
-,101,119,32,119,105,116,104,95,105,100,34,32,99,111,110,116,101,110,116,61,34,99
-,97,112,105,116,97,108,32,111,102,32,116,104,101,13,10,60,108,105,110,107,32,114
-,101,108,61,34,115,114,101,108,101,97,115,101,32,111,102,32,116,104,101,112,111,
-105,110,116,32,111,117,116,32,116,104,97,116,120,77,76,72,116,116,112,82,101,113
-,117,101,115,116,97,110,100,32,115,117,98,115,101,113,117,101,110,116,115,101,99
-,111,110,100,32,108,97,114,103,101,115,116,118,101,114,121,32,105,109,112,111,
-114,116,97,110,116,115,112,101,99,105,102,105,99,97,116,105,111,110,115,115,117,
-114,102,97,99,101,32,111,102,32,116,104,101,97,112,112,108,105,101,100,32,116,
-111,32,116,104,101,102,111,114,101,105,103,110,32,112,111,108,105,99,121,95,115,
-101,116,68,111,109,97,105,110,78,97,109,101,101,115,116,97,98,108,105,115,104,
-101,100,32,105,110,105,115,32,98,101,108,105,101,118,101,100,32,116,111,73,110,
-32,97,100,100,105,116,105,111,110,32,116,111,109,101,97,110,105,110,103,32,111,
-102,32,116,104,101,105,115,32,110,97,109,101,100,32,97,102,116,101,114,116,111,
-32,112,114,111,116,101,99,116,32,116,104,101,105,115,32,114,101,112,114,101,115,
-101,110,116,101,100,68,101,99,108,97,114,97,116,105,111,110,32,111,102,109,111,
-114,101,32,101,102,102,105,99,105,101,110,116,67,108,97,115,115,105,102,105,99,
-97,116,105,111,110,111,116,104,101,114,32,102,111,114,109,115,32,111,102,104,101
-,32,114,101,116,117,114,110,101,100,32,116,111,60,115,112,97,110,32,99,108,97,
-115,115,61,34,99,112,101,114,102,111,114,109,97,110,99,101,32,111,102,40,102,117
-,110,99,116,105,111,110,40,41,32,123,13,105,102,32,97,110,100,32,111,110,108,121
-,32,105,102,114,101,103,105,111,110,115,32,111,102,32,116,104,101,108,101,97,100
-,105,110,103,32,116,111,32,116,104,101,114,101,108,97,116,105,111,110,115,32,119
-,105,116,104,85,110,105,116,101,100,32,78,97,116,105,111,110,115,115,116,121,108
-,101,61,34,104,101,105,103,104,116,58,111,116,104,101,114,32,116,104,97,110,32,
-116,104,101,121,112,101,34,32,99,111,110,116,101,110,116,61,34,65,115,115,111,99
-,105,97,116,105,111,110,32,111,102,10,60,47,104,101,97,100,62,10,60,98,111,100,
-121,108,111,99,97,116,101,100,32,111,110,32,116,104,101,105,115,32,114,101,102,
-101,114,114,101,100,32,116,111,40,105,110,99,108,117,100,105,110,103,32,116,104,
-101,99,111,110,99,101,110,116,114,97,116,105,111,110,115,116,104,101,32,105,110,
-100,105,118,105,100,117,97,108,97,109,111,110,103,32,116,104,101,32,109,111,115,
-116,116,104,97,110,32,97,110,121,32,111,116,104,101,114,47,62,10,60,108,105,110,
-107,32,114,101,108,61,34,32,114,101,116,117,114,110,32,102,97,108,115,101,59,116
-,104,101,32,112,117,114,112,111,115,101,32,111,102,116,104,101,32,97,98,105,108,
-105,116,121,32,116,111,59,99,111,108,111,114,58,35,102,102,102,125,10,46,10,60,
-115,112,97,110,32,99,108,97,115,115,61,34,116,104,101,32,115,117,98,106,101,99,
-116,32,111,102,100,101,102,105,110,105,116,105,111,110,115,32,111,102,62,13,10,
-60,108,105,110,107,32,114,101,108,61,34,99,108,97,105,109,32,116,104,97,116,32,
-116,104,101,104,97,118,101,32,100,101,118,101,108,111,112,101,100,60,116,97,98,
-108,101,32,119,105,100,116,104,61,34,99,101,108,101,98,114,97,116,105,111,110,32
-,111,102,70,111,108,108,111,119,105,110,103,32,116,104,101,32,116,111,32,100,105
-,115,116,105,110,103,117,105,115,104,60,115,112,97,110,32,99,108,97,115,115,61,
-34,98,116,97,107,101,115,32,112,108,97,99,101,32,105,110,117,110,100,101,114,32,
-116,104,101,32,110,97,109,101,110,111,116,101,100,32,116,104,97,116,32,116,104,
-101,62,60,33,91,101,110,100,105,102,93,45,45,62,10,115,116,121,108,101,61,34,109
-,97,114,103,105,110,45,105,110,115,116,101,97,100,32,111,102,32,116,104,101,105,
-110,116,114,111,100,117,99,101,100,32,116,104,101,116,104,101,32,112,114,111,99,
-101,115,115,32,111,102,105,110,99,114,101,97,115,105,110,103,32,116,104,101,100,
-105,102,102,101,114,101,110,99,101,115,32,105,110,101,115,116,105,109,97,116,101
-,100,32,116,104,97,116,101,115,112,101,99,105,97,108,108,121,32,116,104,101,47,
-100,105,118,62,60,100,105,118,32,105,100,61,34,119,97,115,32,101,118,101,110,116
-,117,97,108,108,121,116,104,114,111,117,103,104,111,117,116,32,104,105,115,116,
-104,101,32,100,105,102,102,101,114,101,110,99,101,115,111,109,101,116,104,105,
-110,103,32,116,104,97,116,115,112,97,110,62,60,47,115,112,97,110,62,60,47,115,
-105,103,110,105,102,105,99,97,110,116,108,121,32,62,60,47,115,99,114,105,112,116
-,62,13,10,13,10,101,110,118,105,114,111,110,109,101,110,116,97,108,32,116,111,32
-,112,114,101,118,101,110,116,32,116,104,101,104,97,118,101,32,98,101,101,110,32,
-117,115,101,100,101,115,112,101,99,105,97,108,108,121,32,102,111,114,117,110,100
-,101,114,115,116,97,110,100,32,116,104,101,105,115,32,101,115,115,101,110,116,
-105,97,108,108,121,119,101,114,101,32,116,104,101,32,102,105,114,115,116,105,115
-,32,116,104,101,32,108,97,114,103,101,115,116,104,97,118,101,32,98,101,101,110,
-32,109,97,100,101,34,32,115,114,99,61,34,104,116,116,112,58,47,47,105,110,116,
-101,114,112,114,101,116,101,100,32,97,115,115,101,99,111,110,100,32,104,97,108,
-102,32,111,102,99,114,111,108,108,105,110,103,61,34,110,111,34,32,105,115,32,99,
-111,109,112,111,115,101,100,32,111,102,73,73,44,32,72,111,108,121,32,82,111,109,
-97,110,105,115,32,101,120,112,101,99,116,101,100,32,116,111,104,97,118,101,32,
-116,104,101,105,114,32,111,119,110,100,101,102,105,110,101,100,32,97,115,32,116,
-104,101,116,114,97,100,105,116,105,111,110,97,108,108,121,32,104,97,118,101,32,
-100,105,102,102,101,114,101,110,116,97,114,101,32,111,102,116,101,110,32,117,115
-,101,100,116,111,32,101,110,115,117,114,101,32,116,104,97,116,97,103,114,101,101
-,109,101,110,116,32,119,105,116,104,99,111,110,116,97,105,110,105,110,103,32,116
-,104,101,97,114,101,32,102,114,101,113,117,101,110,116,108,121,105,110,102,111,
-114,109,97,116,105,111,110,32,111,110,101,120,97,109,112,108,101,32,105,115,32,
-116,104,101,114,101,115,117,108,116,105,110,103,32,105,110,32,97,60,47,97,62,60,
-47,108,105,62,60,47,117,108,62,32,99,108,97,115,115,61,34,102,111,111,116,101,
-114,97,110,100,32,101,115,112,101,99,105,97,108,108,121,116,121,112,101,61,34,98
-,117,116,116,111,110,34,32,60,47,115,112,97,110,62,60,47,115,112,97,110,62,119,
-104,105,99,104,32,105,110,99,108,117,100,101,100,62,10,60,109,101,116,97,32,110,
-97,109,101,61,34,99,111,110,115,105,100,101,114,101,100,32,116,104,101,99,97,114
-,114,105,101,100,32,111,117,116,32,98,121,72,111,119,101,118,101,114,44,32,105,
-116,32,105,115,98,101,99,97,109,101,32,112,97,114,116,32,111,102,105,110,32,114,
-101,108,97,116,105,111,110,32,116,111,112,111,112,117,108,97,114,32,105,110,32,
-116,104,101,116,104,101,32,99,97,112,105,116,97,108,32,111,102,119,97,115,32,111
-,102,102,105,99,105,97,108,108,121,119,104,105,99,104,32,104,97,115,32,98,101,
-101,110,116,104,101,32,72,105,115,116,111,114,121,32,111,102,97,108,116,101,114,
-110,97,116,105,118,101,32,116,111,100,105,102,102,101,114,101,110,116,32,102,114
-,111,109,116,111,32,115,117,112,112,111,114,116,32,116,104,101,115,117,103,103,
-101,115,116,101,100,32,116,104,97,116,105,110,32,116,104,101,32,112,114,111,99,
-101,115,115,32,32,60,100,105,118,32,99,108,97,115,115,61,34,116,104,101,32,102,
-111,117,110,100,97,116,105,111,110,98,101,99,97,117,115,101,32,111,102,32,104,
-105,115,99,111,110,99,101,114,110,101,100,32,119,105,116,104,116,104,101,32,117,
-110,105,118,101,114,115,105,116,121,111,112,112,111,115,101,100,32,116,111,32,
-116,104,101,116,104,101,32,99,111,110,116,101,120,116,32,111,102,60,115,112,97,
-110,32,99,108,97,115,115,61,34,112,116,101,120,116,34,32,110,97,109,101,61,34,
-113,34,9,9,60,100,105,118,32,99,108,97,115,115,61,34,116,104,101,32,115,99,105,
-101,110,116,105,102,105,99,114,101,112,114,101,115,101,110,116,101,100,32,98,121
-,109,97,116,104,101,109,97,116,105,99,105,97,110,115,101,108,101,99,116,101,100,
-32,98,121,32,116,104,101,116,104,97,116,32,104,97,118,101,32,98,101,101,110,62,
-60,100,105,118,32,99,108,97,115,115,61,34,99,100,105,118,32,105,100,61,34,104,
-101,97,100,101,114,105,110,32,112,97,114,116,105,99,117,108,97,114,44,99,111,110
-,118,101,114,116,101,100,32,105,110,116,111,41,59,10,60,47,115,99,114,105,112,
-116,62,10,60,112,104,105,108,111,115,111,112,104,105,99,97,108,32,115,114,112,
-115,107,111,104,114,118,97,116,115,107,105,116,105,225,186,191,110,103,32,86,105
-,225,187,135,116,208,160,209,131,209,129,209,129,208,186,208,184,208,185,209,128
-,209,131,209,129,209,129,208,186,208,184,208,185,105,110,118,101,115,116,105,103
-,97,99,105,195,179,110,112,97,114,116,105,99,105,112,97,99,105,195,179,110,208,
-186,208,190,209,130,208,190,209,128,209,139,208,181,208,190,208,177,208,187,208,
-176,209,129,209,130,208,184,208,186,208,190,209,130,208,190,209,128,209,139,208,
-185,209,135,208,181,208,187,208,190,208,178,208,181,208,186,209,129,208,184,209,
-129,209,130,208,181,208,188,209,139,208,157,208,190,208,178,208,190,209,129,209,
-130,208,184,208,186,208,190,209,130,208,190,209,128,209,139,209,133,208,190,208,
-177,208,187,208,176,209,129,209,130,209,140,208,178,209,128,208,181,208,188,208,
-181,208,189,208,184,208,186,208,190,209,130,208,190,209,128,208,176,209,143,209,
-129,208,181,208,179,208,190,208,180,208,189,209,143,209,129,208,186,208,176,209,
-135,208,176,209,130,209,140,208,189,208,190,208,178,208,190,209,129,209,130,208,
-184,208,163,208,186,209,128,208,176,208,184,208,189,209,139,208,178,208,190,208,
-191,209,128,208,190,209,129,209,139,208,186,208,190,209,130,208,190,209,128,208,
-190,208,185,209,129,208,180,208,181,208,187,208,176,209,130,209,140,208,191,208,
-190,208,188,208,190,209,137,209,140,209,142,209,129,209,128,208,181,208,180,209,
-129,209,130,208,178,208,190,208,177,209,128,208,176,208,183,208,190,208,188,209,
-129,209,130,208,190,209,128,208,190,208,189,209,139,209,131,209,135,208,176,209,
-129,209,130,208,184,208,181,209,130,208,181,209,135,208,181,208,189,208,184,208,
-181,208,147,208,187,208,176,208,178,208,189,208,176,209,143,208,184,209,129,209,
-130,208,190,209,128,208,184,208,184,209,129,208,184,209,129,209,130,208,181,208,
-188,208,176,209,128,208,181,209,136,208,181,208,189,208,184,209,143,208,161,208,
-186,208,176,209,135,208,176,209,130,209,140,208,191,208,190,209,141,209,130,208,
-190,208,188,209,131,209,129,208,187,208,181,208,180,209,131,208,181,209,130,209,
-129,208,186,208,176,208,183,208,176,209,130,209,140,209,130,208,190,208,178,208,
-176,209,128,208,190,208,178,208,186,208,190,208,189,208,181,209,135,208,189,208,
-190,209,128,208,181,209,136,208,181,208,189,208,184,208,181,208,186,208,190,209,
-130,208,190,209,128,208,190,208,181,208,190,209,128,208,179,208,176,208,189,208,
-190,208,178,208,186,208,190,209,130,208,190,209,128,208,190,208,188,208,160,208,
-181,208,186,208,187,208,176,208,188,208,176,216,167,217,132,217,133,217,134,216,
-170,216,175,217,137,217,133,217,134,216,170,216,175,217,138,216,167,216,170,216,
-167,217,132,217,133,217,136,216,182,217,136,216,185,216,167,217,132,216,168,216,
-177,216,167,217,133,216,172,216,167,217,132,217,133,217,136,216,167,217,130,216,
-185,216,167,217,132,216,177,216,179,216,167,216,166,217,132,217,133,216,180,216,
-167,216,177,217,131,216,167,216,170,216,167,217,132,216,163,216,185,216,182,216,
-167,216,161,216,167,217,132,216,177,217,138,216,167,216,182,216,169,216,167,217,
-132,216,170,216,181,217,133,217,138,217,133,216,167,217,132,216,167,216,185,216,
-182,216,167,216,161,216,167,217,132,217,134,216,170,216,167,216,166,216,172,216,
-167,217,132,216,163,217,132,216,185,216,167,216,168,216,167,217,132,216,170,216,
-179,216,172,217,138,217,132,216,167,217,132,216,163,217,130,216,179,216,167,217,
-133,216,167,217,132,216,182,216,186,216,183,216,167,216,170,216,167,217,132,217,
-129,217,138,216,175,217,138,217,136,216,167,217,132,216,170,216,177,216,173,217,
-138,216,168,216,167,217,132,216,172,216,175,217,138,216,175,216,169,216,167,217,
-132,216,170,216,185,217,132,217,138,217,133,216,167,217,132,216,163,216,174,216,
-168,216,167,216,177,216,167,217,132,216,167,217,129,217,132,216,167,217,133,216,
-167,217,132,216,163,217,129,217,132,216,167,217,133,216,167,217,132,216,170,216,
-167,216,177,217,138,216,174,216,167,217,132,216,170,217,130,217,134,217,138,216,
-169,216,167,217,132,216,167,217,132,216,185,216,167,216,168,216,167,217,132,216,
-174,217,136,216,167,216,183,216,177,216,167,217,132,217,133,216,172,216,170,217,
-133,216,185,216,167,217,132,216,175,217,138,217,131,217,136,216,177,216,167,217,
-132,216,179,217,138,216,167,216,173,216,169,216,185,216,168,216,175,216,167,217,
-132,217,132,217,135,216,167,217,132,216,170,216,177,216,168,217,138,216,169,216,
-167,217,132,216,177,217,136,216,167,216,168,216,183,216,167,217,132,216,163,216,
-175,216,168,217,138,216,169,216,167,217,132,216,167,216,174,216,168,216,167,216,
-177,216,167,217,132,217,133,216,170,216,173,216,175,216,169,216,167,217,132,216,
-167,216,186,216,167,217,134,217,138,99,117,114,115,111,114,58,112,111,105,110,
-116,101,114,59,60,47,116,105,116,108,101,62,10,60,109,101,116,97,32,34,32,104,
-114,101,102,61,34,104,116,116,112,58,47,47,34,62,60,115,112,97,110,32,99,108,97,
-115,115,61,34,109,101,109,98,101,114,115,32,111,102,32,116,104,101,32,119,105,
-110,100,111,119,46,108,111,99,97,116,105,111,110,118,101,114,116,105,99,97,108,
-45,97,108,105,103,110,58,47,97,62,32,124,32,60,97,32,104,114,101,102,61,34,60,33
-,100,111,99,116,121,112,101,32,104,116,109,108,62,109,101,100,105,97,61,34,115,
-99,114,101,101,110,34,32,60,111,112,116,105,111,110,32,118,97,108,117,101,61,34,
-102,97,118,105,99,111,110,46,105,99,111,34,32,47,62,10,9,9,60,100,105,118,32,99,
-108,97,115,115,61,34,99,104,97,114,97,99,116,101,114,105,115,116,105,99,115,34,
-32,109,101,116,104,111,100,61,34,103,101,116,34,32,47,98,111,100,121,62,10,60,47
-,104,116,109,108,62,10,115,104,111,114,116,99,117,116,32,105,99,111,110,34,32,
-100,111,99,117,109,101,110,116,46,119,114,105,116,101,40,112,97,100,100,105,110,
-103,45,98,111,116,116,111,109,58,114,101,112,114,101,115,101,110,116,97,116,105,
-118,101,115,115,117,98,109,105,116,34,32,118,97,108,117,101,61,34,97,108,105,103
-,110,61,34,99,101,110,116,101,114,34,32,116,104,114,111,117,103,104,111,117,116,
-32,116,104,101,32,115,99,105,101,110,99,101,32,102,105,99,116,105,111,110,10,32,
-32,60,100,105,118,32,99,108,97,115,115,61,34,115,117,98,109,105,116,34,32,99,108
-,97,115,115,61,34,111,110,101,32,111,102,32,116,104,101,32,109,111,115,116,32,
-118,97,108,105,103,110,61,34,116,111,112,34,62,60,119,97,115,32,101,115,116,97,
-98,108,105,115,104,101,100,41,59,13,10,60,47,115,99,114,105,112,116,62,13,10,114
-,101,116,117,114,110,32,102,97,108,115,101,59,34,62,41,46,115,116,121,108,101,46
-,100,105,115,112,108,97,121,98,101,99,97,117,115,101,32,111,102,32,116,104,101,
-32,100,111,99,117,109,101,110,116,46,99,111,111,107,105,101,60,102,111,114,109,
-32,97,99,116,105,111,110,61,34,47,125,98,111,100,121,123,109,97,114,103,105,110,
-58,48,59,69,110,99,121,99,108,111,112,101,100,105,97,32,111,102,118,101,114,115,
-105,111,110,32,111,102,32,116,104,101,32,46,99,114,101,97,116,101,69,108,101,109
-,101,110,116,40,110,97,109,101,34,32,99,111,110,116,101,110,116,61,34,60,47,100,
-105,118,62,10,60,47,100,105,118,62,10,10,97,100,109,105,110,105,115,116,114,97,
-116,105,118,101,32,60,47,98,111,100,121,62,10,60,47,104,116,109,108,62,104,105,
-115,116,111,114,121,32,111,102,32,116,104,101,32,34,62,60,105,110,112,117,116,32
-,116,121,112,101,61,34,112,111,114,116,105,111,110,32,111,102,32,116,104,101,32,
-97,115,32,112,97,114,116,32,111,102,32,116,104,101,32,38,110,98,115,112,59,60,97
-,32,104,114,101,102,61,34,111,116,104,101,114,32,99,111,117,110,116,114,105,101,
-115,34,62,10,60,100,105,118,32,99,108,97,115,115,61,34,60,47,115,112,97,110,62,
-60,47,115,112,97,110,62,60,73,110,32,111,116,104,101,114,32,119,111,114,100,115,
-44,100,105,115,112,108,97,121,58,32,98,108,111,99,107,59,99,111,110,116,114,111,
-108,32,111,102,32,116,104,101,32,105,110,116,114,111,100,117,99,116,105,111,110,
-32,111,102,47,62,10,60,109,101,116,97,32,110,97,109,101,61,34,97,115,32,119,101,
-108,108,32,97,115,32,116,104,101,32,105,110,32,114,101,99,101,110,116,32,121,101
-,97,114,115,13,10,9,60,100,105,118,32,99,108,97,115,115,61,34,60,47,100,105,118,
-62,10,9,60,47,100,105,118,62,10,105,110,115,112,105,114,101,100,32,98,121,32,116
-,104,101,116,104,101,32,101,110,100,32,111,102,32,116,104,101,32,99,111,109,112,
-97,116,105,98,108,101,32,119,105,116,104,98,101,99,97,109,101,32,107,110,111,119
-,110,32,97,115,32,115,116,121,108,101,61,34,109,97,114,103,105,110,58,46,106,115
-,34,62,60,47,115,99,114,105,112,116,62,60,32,73,110,116,101,114,110,97,116,105,
-111,110,97,108,32,116,104,101,114,101,32,104,97,118,101,32,98,101,101,110,71,101
-,114,109,97,110,32,108,97,110,103,117,97,103,101,32,115,116,121,108,101,61,34,99
-,111,108,111,114,58,35,67,111,109,109,117,110,105,115,116,32,80,97,114,116,121,
-99,111,110,115,105,115,116,101,110,116,32,119,105,116,104,98,111,114,100,101,114
-,61,34,48,34,32,99,101,108,108,32,109,97,114,103,105,110,104,101,105,103,104,116
-,61,34,116,104,101,32,109,97,106,111,114,105,116,121,32,111,102,34,32,97,108,105
-,103,110,61,34,99,101,110,116,101,114,114,101,108,97,116,101,100,32,116,111,32,
-116,104,101,32,109,97,110,121,32,100,105,102,102,101,114,101,110,116,32,79,114,
-116,104,111,100,111,120,32,67,104,117,114,99,104,115,105,109,105,108,97,114,32,
-116,111,32,116,104,101,32,47,62,10,60,108,105,110,107,32,114,101,108,61,34,115,
-119,97,115,32,111,110,101,32,111,102,32,116,104,101,32,117,110,116,105,108,32,
-104,105,115,32,100,101,97,116,104,125,41,40,41,59,10,60,47,115,99,114,105,112,
-116,62,111,116,104,101,114,32,108,97,110,103,117,97,103,101,115,99,111,109,112,
-97,114,101,100,32,116,111,32,116,104,101,112,111,114,116,105,111,110,115,32,111,
-102,32,116,104,101,116,104,101,32,78,101,116,104,101,114,108,97,110,100,115,116,
-104,101,32,109,111,115,116,32,99,111,109,109,111,110,98,97,99,107,103,114,111,
-117,110,100,58,117,114,108,40,97,114,103,117,101,100,32,116,104,97,116,32,116,
-104,101,115,99,114,111,108,108,105,110,103,61,34,110,111,34,32,105,110,99,108,
-117,100,101,100,32,105,110,32,116,104,101,78,111,114,116,104,32,65,109,101,114,
-105,99,97,110,32,116,104,101,32,110,97,109,101,32,111,102,32,116,104,101,105,110
-,116,101,114,112,114,101,116,97,116,105,111,110,115,116,104,101,32,116,114,97,
-100,105,116,105,111,110,97,108,100,101,118,101,108,111,112,109,101,110,116,32,
-111,102,32,102,114,101,113,117,101,110,116,108,121,32,117,115,101,100,97,32,99,
-111,108,108,101,99,116,105,111,110,32,111,102,118,101,114,121,32,115,105,109,105
-,108,97,114,32,116,111,115,117,114,114,111,117,110,100,105,110,103,32,116,104,
-101,101,120,97,109,112,108,101,32,111,102,32,116,104,105,115,97,108,105,103,110,
-61,34,99,101,110,116,101,114,34,62,119,111,117,108,100,32,104,97,118,101,32,98,
-101,101,110,105,109,97,103,101,95,99,97,112,116,105,111,110,32,61,97,116,116,97,
-99,104,101,100,32,116,111,32,116,104,101,115,117,103,103,101,115,116,105,110,103
-,32,116,104,97,116,105,110,32,116,104,101,32,102,111,114,109,32,111,102,32,105,
-110,118,111,108,118,101,100,32,105,110,32,116,104,101,105,115,32,100,101,114,105
-,118,101,100,32,102,114,111,109,110,97,109,101,100,32,97,102,116,101,114,32,116,
-104,101,73,110,116,114,111,100,117,99,116,105,111,110,32,116,111,114,101,115,116
-,114,105,99,116,105,111,110,115,32,111,110,32,115,116,121,108,101,61,34,119,105,
-100,116,104,58,32,99,97,110,32,98,101,32,117,115,101,100,32,116,111,32,116,104,
-101,32,99,114,101,97,116,105,111,110,32,111,102,109,111,115,116,32,105,109,112,
-111,114,116,97,110,116,32,105,110,102,111,114,109,97,116,105,111,110,32,97,110,
-100,114,101,115,117,108,116,101,100,32,105,110,32,116,104,101,99,111,108,108,97,
-112,115,101,32,111,102,32,116,104,101,84,104,105,115,32,109,101,97,110,115,32,
-116,104,97,116,101,108,101,109,101,110,116,115,32,111,102,32,116,104,101,119,97,
-115,32,114,101,112,108,97,99,101,100,32,98,121,97,110,97,108,121,115,105,115,32,
-111,102,32,116,104,101,105,110,115,112,105,114,97,116,105,111,110,32,102,111,114
-,114,101,103,97,114,100,101,100,32,97,115,32,116,104,101,109,111,115,116,32,115,
-117,99,99,101,115,115,102,117,108,107,110,111,119,110,32,97,115,32,38,113,117,
-111,116,59,97,32,99,111,109,112,114,101,104,101,110,115,105,118,101,72,105,115,
-116,111,114,121,32,111,102,32,116,104,101,32,119,101,114,101,32,99,111,110,115,
-105,100,101,114,101,100,114,101,116,117,114,110,101,100,32,116,111,32,116,104,
-101,97,114,101,32,114,101,102,101,114,114,101,100,32,116,111,85,110,115,111,117,
-114,99,101,100,32,105,109,97,103,101,62,10,9,60,100,105,118,32,99,108,97,115,115
-,61,34,99,111,110,115,105,115,116,115,32,111,102,32,116,104,101,115,116,111,112,
-80,114,111,112,97,103,97,116,105,111,110,105,110,116,101,114,101,115,116,32,105,
-110,32,116,104,101,97,118,97,105,108,97,98,105,108,105,116,121,32,111,102,97,112
-,112,101,97,114,115,32,116,111,32,104,97,118,101,101,108,101,99,116,114,111,109,
-97,103,110,101,116,105,99,101,110,97,98,108,101,83,101,114,118,105,99,101,115,40
-,102,117,110,99,116,105,111,110,32,111,102,32,116,104,101,73,116,32,105,115,32,
-105,109,112,111,114,116,97,110,116,60,47,115,99,114,105,112,116,62,60,47,100,105
-,118,62,102,117,110,99,116,105,111,110,40,41,123,118,97,114,32,114,101,108,97,
-116,105,118,101,32,116,111,32,116,104,101,97,115,32,97,32,114,101,115,117,108,
-116,32,111,102,32,116,104,101,32,112,111,115,105,116,105,111,110,32,111,102,70,
-111,114,32,101,120,97,109,112,108,101,44,32,105,110,32,109,101,116,104,111,100,
-61,34,112,111,115,116,34,32,119,97,115,32,102,111,108,108,111,119,101,100,32,98,
-121,38,97,109,112,59,109,100,97,115,104,59,32,116,104,101,116,104,101,32,97,112,
-112,108,105,99,97,116,105,111,110,106,115,34,62,60,47,115,99,114,105,112,116,62,
-13,10,117,108,62,60,47,100,105,118,62,60,47,100,105,118,62,97,102,116,101,114,32
-,116,104,101,32,100,101,97,116,104,119,105,116,104,32,114,101,115,112,101,99,116
-,32,116,111,115,116,121,108,101,61,34,112,97,100,100,105,110,103,58,105,115,32,
-112,97,114,116,105,99,117,108,97,114,108,121,100,105,115,112,108,97,121,58,105,
-110,108,105,110,101,59,32,116,121,112,101,61,34,115,117,98,109,105,116,34,32,105
-,115,32,100,105,118,105,100,101,100,32,105,110,116,111,228,184,173,230,150,135,
-32,40,231,174,128,228,189,147,41,114,101,115,112,111,110,115,97,98,105,108,105,
-100,97,100,97,100,109,105,110,105,115,116,114,97,99,105,195,179,110,105,110,116,
-101,114,110,97,99,105,111,110,97,108,101,115,99,111,114,114,101,115,112,111,110,
-100,105,101,110,116,101,224,164,137,224,164,170,224,164,175,224,165,139,224,164,
-151,224,164,170,224,165,130,224,164,176,224,165,141,224,164,181,224,164,185,224,
-164,174,224,164,190,224,164,176,224,165,135,224,164,178,224,165,139,224,164,151,
-224,165,139,224,164,130,224,164,154,224,165,129,224,164,168,224,164,190,224,164,
-181,224,164,178,224,165,135,224,164,149,224,164,191,224,164,168,224,164,184,224,
-164,176,224,164,149,224,164,190,224,164,176,224,164,170,224,165,129,224,164,178,
-224,164,191,224,164,184,224,164,150,224,165,139,224,164,156,224,165,135,224,164,
-130,224,164,154,224,164,190,224,164,185,224,164,191,224,164,143,224,164,173,224,
-165,135,224,164,156,224,165,135,224,164,130,224,164,182,224,164,190,224,164,174,
-224,164,191,224,164,178,224,164,185,224,164,174,224,164,190,224,164,176,224,165,
-128,224,164,156,224,164,190,224,164,151,224,164,176,224,164,163,224,164,172,224,
-164,168,224,164,190,224,164,168,224,165,135,224,164,149,224,165,129,224,164,174,
-224,164,190,224,164,176,224,164,172,224,165,141,224,164,178,224,165,137,224,164,
-151,224,164,174,224,164,190,224,164,178,224,164,191,224,164,149,224,164,174,224,
-164,185,224,164,191,224,164,178,224,164,190,224,164,170,224,165,131,224,164,183,
-224,165,141,224,164,160,224,164,172,224,164,162,224,164,188,224,164,164,224,165,
-135,224,164,173,224,164,190,224,164,156,224,164,170,224,164,190,224,164,149,224,
-165,141,224,164,178,224,164,191,224,164,149,224,164,159,224,165,141,224,164,176,
-224,165,135,224,164,168,224,164,150,224,164,191,224,164,178,224,164,190,224,164,
-171,224,164,166,224,165,140,224,164,176,224,164,190,224,164,168,224,164,174,224,
-164,190,224,164,174,224,164,178,224,165,135,224,164,174,224,164,164,224,164,166,
-224,164,190,224,164,168,224,164,172,224,164,190,224,164,156,224,164,190,224,164,
-176,224,164,181,224,164,191,224,164,149,224,164,190,224,164,184,224,164,149,224,
-165,141,224,164,175,224,165,139,224,164,130,224,164,154,224,164,190,224,164,185,
-224,164,164,224,165,135,224,164,170,224,164,185,224,165,129,224,164,129,224,164,
-154,224,164,172,224,164,164,224,164,190,224,164,175,224,164,190,224,164,184,224,
-164,130,224,164,181,224,164,190,224,164,166,224,164,166,224,165,135,224,164,150,
-224,164,168,224,165,135,224,164,170,224,164,191,224,164,155,224,164,178,224,165,
-135,224,164,181,224,164,191,224,164,182,224,165,135,224,164,183,224,164,176,224,
-164,190,224,164,156,224,165,141,224,164,175,224,164,137,224,164,164,224,165,141,
-224,164,164,224,164,176,224,164,174,224,165,129,224,164,130,224,164,172,224,164,
-136,224,164,166,224,165,139,224,164,168,224,165,139,224,164,130,224,164,137,224,
-164,170,224,164,149,224,164,176,224,164,163,224,164,170,224,164,162,224,164,188,
-224,165,135,224,164,130,224,164,184,224,165,141,224,164,165,224,164,191,224,164,
-164,224,164,171,224,164,191,224,164,178,224,165,141,224,164,174,224,164,174,224,
-165,129,224,164,150,224,165,141,224,164,175,224,164,133,224,164,154,224,165,141,
-224,164,155,224,164,190,224,164,155,224,165,130,224,164,159,224,164,164,224,165,
-128,224,164,184,224,164,130,224,164,151,224,165,128,224,164,164,224,164,156,224,
-164,190,224,164,143,224,164,151,224,164,190,224,164,181,224,164,191,224,164,173,
-224,164,190,224,164,151,224,164,152,224,164,163,224,165,141,224,164,159,224,165,
-135,224,164,166,224,165,130,224,164,184,224,164,176,224,165,135,224,164,166,224,
-164,191,224,164,168,224,165,139,224,164,130,224,164,185,224,164,164,224,165,141,
-224,164,175,224,164,190,224,164,184,224,165,135,224,164,149,224,165,141,224,164,
-184,224,164,151,224,164,190,224,164,130,224,164,167,224,165,128,224,164,181,224,
-164,191,224,164,182,224,165,141,224,164,181,224,164,176,224,164,190,224,164,164,
-224,165,135,224,164,130,224,164,166,224,165,136,224,164,159,224,165,141,224,164,
-184,224,164,168,224,164,149,224,165,141,224,164,182,224,164,190,224,164,184,224,
-164,190,224,164,174,224,164,168,224,165,135,224,164,133,224,164,166,224,164,190,
-224,164,178,224,164,164,224,164,172,224,164,191,224,164,156,224,164,178,224,165,
-128,224,164,170,224,165,129,224,164,176,224,165,130,224,164,183,224,164,185,224,
-164,191,224,164,130,224,164,166,224,165,128,224,164,174,224,164,191,224,164,164,
-224,165,141,224,164,176,224,164,149,224,164,181,224,164,191,224,164,164,224,164,
-190,224,164,176,224,165,129,224,164,170,224,164,175,224,165,135,224,164,184,224,
-165,141,224,164,165,224,164,190,224,164,168,224,164,149,224,164,176,224,165,139,
-224,164,161,224,164,188,224,164,174,224,165,129,224,164,149,224,165,141,224,164,
-164,224,164,175,224,165,139,224,164,156,224,164,168,224,164,190,224,164,149,224,
-165,131,224,164,170,224,164,175,224,164,190,224,164,170,224,165,139,224,164,184,
-224,165,141,224,164,159,224,164,152,224,164,176,224,165,135,224,164,178,224,165,
-130,224,164,149,224,164,190,224,164,176,224,165,141,224,164,175,224,164,181,224,
-164,191,224,164,154,224,164,190,224,164,176,224,164,184,224,165,130,224,164,154,
-224,164,168,224,164,190,224,164,174,224,165,130,224,164,178,224,165,141,224,164,
-175,224,164,166,224,165,135,224,164,150,224,165,135,224,164,130,224,164,185,224,
-164,174,224,165,135,224,164,182,224,164,190,224,164,184,224,165,141,224,164,149,
-224,165,130,224,164,178,224,164,174,224,165,136,224,164,130,224,164,168,224,165,
-135,224,164,164,224,165,136,224,164,175,224,164,190,224,164,176,224,164,156,224,
-164,191,224,164,184,224,164,149,224,165,135,114,115,115,43,120,109,108,34,32,116
-,105,116,108,101,61,34,45,116,121,112,101,34,32,99,111,110,116,101,110,116,61,34
-,116,105,116,108,101,34,32,99,111,110,116,101,110,116,61,34,97,116,32,116,104,
-101,32,115,97,109,101,32,116,105,109,101,46,106,115,34,62,60,47,115,99,114,105,
-112,116,62,10,60,34,32,109,101,116,104,111,100,61,34,112,111,115,116,34,32,60,47
-,115,112,97,110,62,60,47,97,62,60,47,108,105,62,118,101,114,116,105,99,97,108,45
-,97,108,105,103,110,58,116,47,106,113,117,101,114,121,46,109,105,110,46,106,115,
-34,62,46,99,108,105,99,107,40,102,117,110,99,116,105,111,110,40,32,115,116,121,
-108,101,61,34,112,97,100,100,105,110,103,45,125,41,40,41,59,10,60,47,115,99,114,
-105,112,116,62,10,60,47,115,112,97,110,62,60,97,32,104,114,101,102,61,34,60,97,
-32,104,114,101,102,61,34,104,116,116,112,58,47,47,41,59,32,114,101,116,117,114,
-110,32,102,97,108,115,101,59,116,101,120,116,45,100,101,99,111,114,97,116,105,
-111,110,58,32,115,99,114,111,108,108,105,110,103,61,34,110,111,34,32,98,111,114,
-100,101,114,45,99,111,108,108,97,112,115,101,58,97,115,115,111,99,105,97,116,101
-,100,32,119,105,116,104,32,66,97,104,97,115,97,32,73,110,100,111,110,101,115,105
-,97,69,110,103,108,105,115,104,32,108,97,110,103,117,97,103,101,60,116,101,120,
-116,32,120,109,108,58,115,112,97,99,101,61,46,103,105,102,34,32,98,111,114,100,
-101,114,61,34,48,34,60,47,98,111,100,121,62,10,60,47,104,116,109,108,62,10,111,
-118,101,114,102,108,111,119,58,104,105,100,100,101,110,59,105,109,103,32,115,114
-,99,61,34,104,116,116,112,58,47,47,97,100,100,69,118,101,110,116,76,105,115,116,
-101,110,101,114,114,101,115,112,111,110,115,105,98,108,101,32,102,111,114,32,115
-,46,106,115,34,62,60,47,115,99,114,105,112,116,62,10,47,102,97,118,105,99,111,
-110,46,105,99,111,34,32,47,62,111,112,101,114,97,116,105,110,103,32,115,121,115,
-116,101,109,34,32,115,116,121,108,101,61,34,119,105,100,116,104,58,49,116,97,114
-,103,101,116,61,34,95,98,108,97,110,107,34,62,83,116,97,116,101,32,85,110,105,
-118,101,114,115,105,116,121,116,101,120,116,45,97,108,105,103,110,58,108,101,102
-,116,59,10,100,111,99,117,109,101,110,116,46,119,114,105,116,101,40,44,32,105,
-110,99,108,117,100,105,110,103,32,116,104,101,32,97,114,111,117,110,100,32,116,
-104,101,32,119,111,114,108,100,41,59,13,10,60,47,115,99,114,105,112,116,62,13,10
-,60,34,32,115,116,121,108,101,61,34,104,101,105,103,104,116,58,59,111,118,101,
-114,102,108,111,119,58,104,105,100,100,101,110,109,111,114,101,32,105,110,102,
-111,114,109,97,116,105,111,110,97,110,32,105,110,116,101,114,110,97,116,105,111,
-110,97,108,97,32,109,101,109,98,101,114,32,111,102,32,116,104,101,32,111,110,101
-,32,111,102,32,116,104,101,32,102,105,114,115,116,99,97,110,32,98,101,32,102,111
-,117,110,100,32,105,110,32,60,47,100,105,118,62,10,9,9,60,47,100,105,118,62,10,
-100,105,115,112,108,97,121,58,32,110,111,110,101,59,34,62,34,32,47,62,10,60,108,
-105,110,107,32,114,101,108,61,34,10,32,32,40,102,117,110,99,116,105,111,110,40,
-41,32,123,116,104,101,32,49,53,116,104,32,99,101,110,116,117,114,121,46,112,114,
-101,118,101,110,116,68,101,102,97,117,108,116,40,108,97,114,103,101,32,110,117,
-109,98,101,114,32,111,102,32,66,121,122,97,110,116,105,110,101,32,69,109,112,105
-,114,101,46,106,112,103,124,116,104,117,109,98,124,108,101,102,116,124,118,97,
-115,116,32,109,97,106,111,114,105,116,121,32,111,102,109,97,106,111,114,105,116,
-121,32,111,102,32,116,104,101,32,32,97,108,105,103,110,61,34,99,101,110,116,101,
-114,34,62,85,110,105,118,101,114,115,105,116,121,32,80,114,101,115,115,100,111,
-109,105,110,97,116,101,100,32,98,121,32,116,104,101,83,101,99,111,110,100,32,87,
-111,114,108,100,32,87,97,114,100,105,115,116,114,105,98,117,116,105,111,110,32,
-111,102,32,115,116,121,108,101,61,34,112,111,115,105,116,105,111,110,58,116,104,
-101,32,114,101,115,116,32,111,102,32,116,104,101,32,99,104,97,114,97,99,116,101,
-114,105,122,101,100,32,98,121,32,114,101,108,61,34,110,111,102,111,108,108,111,
-119,34,62,100,101,114,105,118,101,115,32,102,114,111,109,32,116,104,101,114,97,
-116,104,101,114,32,116,104,97,110,32,116,104,101,32,97,32,99,111,109,98,105,110,
-97,116,105,111,110,32,111,102,115,116,121,108,101,61,34,119,105,100,116,104,58,
-49,48,48,69,110,103,108,105,115,104,45,115,112,101,97,107,105,110,103,99,111,109
-,112,117,116,101,114,32,115,99,105,101,110,99,101,98,111,114,100,101,114,61,34,
-48,34,32,97,108,116,61,34,116,104,101,32,101,120,105,115,116,101,110,99,101,32,
-111,102,68,101,109,111,99,114,97,116,105,99,32,80,97,114,116,121,34,32,115,116,
-121,108,101,61,34,109,97,114,103,105,110,45,70,111,114,32,116,104,105,115,32,114
-,101,97,115,111,110,44,46,106,115,34,62,60,47,115,99,114,105,112,116,62,10,9,115
-,66,121,84,97,103,78,97,109,101,40,115,41,91,48,93,106,115,34,62,60,47,115,99,
-114,105,112,116,62,13,10,60,46,106,115,34,62,60,47,115,99,114,105,112,116,62,13,
-10,108,105,110,107,32,114,101,108,61,34,105,99,111,110,34,32,39,32,97,108,116,61
-,39,39,32,99,108,97,115,115,61,39,102,111,114,109,97,116,105,111,110,32,111,102,
-32,116,104,101,118,101,114,115,105,111,110,115,32,111,102,32,116,104,101,32,60,
-47,97,62,60,47,100,105,118,62,60,47,100,105,118,62,47,112,97,103,101,62,10,32,32
-,60,112,97,103,101,62,10,60,100,105,118,32,99,108,97,115,115,61,34,99,111,110,
-116,98,101,99,97,109,101,32,116,104,101,32,102,105,114,115,116,98,97,104,97,115,
-97,32,73,110,100,111,110,101,115,105,97,101,110,103,108,105,115,104,32,40,115,
-105,109,112,108,101,41,206,149,206,187,206,187,206,183,206,189,206,185,206,186,
-206,172,209,133,209,128,208,178,208,176,209,130,209,129,208,186,208,184,208,186,
-208,190,208,188,208,191,208,176,208,189,208,184,208,184,209,143,208,178,208,187,
-209,143,208,181,209,130,209,129,209,143,208,148,208,190,208,177,208,176,208,178,
-208,184,209,130,209,140,209,135,208,181,208,187,208,190,208,178,208,181,208,186,
-208,176,209,128,208,176,208,183,208,178,208,184,209,130,208,184,209,143,208,152,
-208,189,209,130,208,181,209,128,208,189,208,181,209,130,208,158,209,130,208,178,
-208,181,209,130,208,184,209,130,209,140,208,189,208,176,208,191,209,128,208,184,
-208,188,208,181,209,128,208,184,208,189,209,130,208,181,209,128,208,189,208,181,
-209,130,208,186,208,190,209,130,208,190,209,128,208,190,208,179,208,190,209,129,
-209,130,209,128,208,176,208,189,208,184,209,134,209,139,208,186,208,176,209,135,
-208,181,209,129,209,130,208,178,208,181,209,131,209,129,208,187,208,190,208,178,
-208,184,209,143,209,133,208,191,209,128,208,190,208,177,208,187,208,181,208,188,
-209,139,208,191,208,190,208,187,209,131,209,135,208,184,209,130,209,140,209,143,
-208,178,208,187,209,143,209,142,209,130,209,129,209,143,208,189,208,176,208,184,
-208,177,208,190,208,187,208,181,208,181,208,186,208,190,208,188,208,191,208,176,
-208,189,208,184,209,143,208,178,208,189,208,184,208,188,208,176,208,189,208,184,
-208,181,209,129,209,128,208,181,208,180,209,129,209,130,208,178,208,176,216,167,
-217,132,217,133,217,136,216,167,216,182,217,138,216,185,216,167,217,132,216,177,
-216,166,217,138,216,179,217,138,216,169,216,167,217,132,216,167,217,134,216,170,
-217,130,216,167,217,132,217,133,216,180,216,167,216,177,217,131,216,167,216,170,
-217,131,216,167,217,132,216,179,217,138,216,167,216,177,216,167,216,170,216,167,
-217,132,217,133,217,131,216,170,217,136,216,168,216,169,216,167,217,132,216,179,
-216,185,217,136,216,175,217,138,216,169,216,167,216,173,216,181,216,167,216,166,
-217,138,216,167,216,170,216,167,217,132,216,185,216,167,217,132,217,133,217,138,
-216,169,216,167,217,132,216,181,217,136,216,170,217,138,216,167,216,170,216,167,
-217,132,216,167,217,134,216,170,216,177,217,134,216,170,216,167,217,132,216,170,
-216,181,216,167,217,133,217,138,217,133,216,167,217,132,216,165,216,179,217,132,
-216,167,217,133,217,138,216,167,217,132,217,133,216,180,216,167,216,177,217,131,
-216,169,216,167,217,132,217,133,216,177,216,166,217,138,216,167,216,170,114,111,
-98,111,116,115,34,32,99,111,110,116,101,110,116,61,34,60,100,105,118,32,105,100,
-61,34,102,111,111,116,101,114,34,62,116,104,101,32,85,110,105,116,101,100,32,83,
-116,97,116,101,115,60,105,109,103,32,115,114,99,61,34,104,116,116,112,58,47,47,
-46,106,112,103,124,114,105,103,104,116,124,116,104,117,109,98,124,46,106,115,34,
-62,60,47,115,99,114,105,112,116,62,13,10,60,108,111,99,97,116,105,111,110,46,112
-,114,111,116,111,99,111,108,102,114,97,109,101,98,111,114,100,101,114,61,34,48,
-34,32,115,34,32,47,62,10,60,109,101,116,97,32,110,97,109,101,61,34,60,47,97,62,
-60,47,100,105,118,62,60,47,100,105,118,62,60,102,111,110,116,45,119,101,105,103,
-104,116,58,98,111,108,100,59,38,113,117,111,116,59,32,97,110,100,32,38,113,117,
-111,116,59,100,101,112,101,110,100,105,110,103,32,111,110,32,116,104,101,32,109,
-97,114,103,105,110,58,48,59,112,97,100,100,105,110,103,58,34,32,114,101,108,61,
-34,110,111,102,111,108,108,111,119,34,32,80,114,101,115,105,100,101,110,116,32,
-111,102,32,116,104,101,32,116,119,101,110,116,105,101,116,104,32,99,101,110,116,
-117,114,121,101,118,105,115,105,111,110,62,10,32,32,60,47,112,97,103,101,73,110,
-116,101,114,110,101,116,32,69,120,112,108,111,114,101,114,97,46,97,115,121,110,
-99,32,61,32,116,114,117,101,59,13,10,105,110,102,111,114,109,97,116,105,111,110,
-32,97,98,111,117,116,60,100,105,118,32,105,100,61,34,104,101,97,100,101,114,34,
-62,34,32,97,99,116,105,111,110,61,34,104,116,116,112,58,47,47,60,97,32,104,114,
-101,102,61,34,104,116,116,112,115,58,47,47,60,100,105,118,32,105,100,61,34,99,
-111,110,116,101,110,116,34,60,47,100,105,118,62,13,10,60,47,100,105,118,62,13,10
-,60,100,101,114,105,118,101,100,32,102,114,111,109,32,116,104,101,32,60,105,109,
-103,32,115,114,99,61,39,104,116,116,112,58,47,47,97,99,99,111,114,100,105,110,
-103,32,116,111,32,116,104,101,32,10,60,47,98,111,100,121,62,10,60,47,104,116,109
-,108,62,10,115,116,121,108,101,61,34,102,111,110,116,45,115,105,122,101,58,115,
-99,114,105,112,116,32,108,97,110,103,117,97,103,101,61,34,65,114,105,97,108,44,
-32,72,101,108,118,101,116,105,99,97,44,60,47,97,62,60,115,112,97,110,32,99,108,
-97,115,115,61,34,60,47,115,99,114,105,112,116,62,60,115,99,114,105,112,116,32,
-112,111,108,105,116,105,99,97,108,32,112,97,114,116,105,101,115,116,100,62,60,47
-,116,114,62,60,47,116,97,98,108,101,62,60,104,114,101,102,61,34,104,116,116,112,
-58,47,47,119,119,119,46,105,110,116,101,114,112,114,101,116,97,116,105,111,110,
-32,111,102,114,101,108,61,34,115,116,121,108,101,115,104,101,101,116,34,32,100,
-111,99,117,109,101,110,116,46,119,114,105,116,101,40,39,60,99,104,97,114,115,101
-,116,61,34,117,116,102,45,56,34,62,10,98,101,103,105,110,110,105,110,103,32,111,
-102,32,116,104,101,32,114,101,118,101,97,108,101,100,32,116,104,97,116,32,116,
-104,101,116,101,108,101,118,105,115,105,111,110,32,115,101,114,105,101,115,34,32
-,114,101,108,61,34,110,111,102,111,108,108,111,119,34,62,32,116,97,114,103,101,
-116,61,34,95,98,108,97,110,107,34,62,99,108,97,105,109,105,110,103,32,116,104,97
-,116,32,116,104,101,104,116,116,112,37,51,65,37,50,70,37,50,70,119,119,119,46,
-109,97,110,105,102,101,115,116,97,116,105,111,110,115,32,111,102,80,114,105,109,
-101,32,77,105,110,105,115,116,101,114,32,111,102,105,110,102,108,117,101,110,99,
-101,100,32,98,121,32,116,104,101,99,108,97,115,115,61,34,99,108,101,97,114,102,
-105,120,34,62,47,100,105,118,62,13,10,60,47,100,105,118,62,13,10,13,10,116,104,
-114,101,101,45,100,105,109,101,110,115,105,111,110,97,108,67,104,117,114,99,104,
-32,111,102,32,69,110,103,108,97,110,100,111,102,32,78,111,114,116,104,32,67,97,
-114,111,108,105,110,97,115,113,117,97,114,101,32,107,105,108,111,109,101,116,114
-,101,115,46,97,100,100,69,118,101,110,116,76,105,115,116,101,110,101,114,100,105
-,115,116,105,110,99,116,32,102,114,111,109,32,116,104,101,99,111,109,109,111,110
-,108,121,32,107,110,111,119,110,32,97,115,80,104,111,110,101,116,105,99,32,65,
-108,112,104,97,98,101,116,100,101,99,108,97,114,101,100,32,116,104,97,116,32,116
-,104,101,99,111,110,116,114,111,108,108,101,100,32,98,121,32,116,104,101,66,101,
-110,106,97,109,105,110,32,70,114,97,110,107,108,105,110,114,111,108,101,45,112,
-108,97,121,105,110,103,32,103,97,109,101,116,104,101,32,85,110,105,118,101,114,
-115,105,116,121,32,111,102,105,110,32,87,101,115,116,101,114,110,32,69,117,114,
-111,112,101,112,101,114,115,111,110,97,108,32,99,111,109,112,117,116,101,114,80,
-114,111,106,101,99,116,32,71,117,116,101,110,98,101,114,103,114,101,103,97,114,
-100,108,101,115,115,32,111,102,32,116,104,101,104,97,115,32,98,101,101,110,32,
-112,114,111,112,111,115,101,100,116,111,103,101,116,104,101,114,32,119,105,116,
-104,32,116,104,101,62,60,47,108,105,62,60,108,105,32,99,108,97,115,115,61,34,105
-,110,32,115,111,109,101,32,99,111,117,110,116,114,105,101,115,109,105,110,46,106
-,115,34,62,60,47,115,99,114,105,112,116,62,111,102,32,116,104,101,32,112,111,112
-,117,108,97,116,105,111,110,111,102,102,105,99,105,97,108,32,108,97,110,103,117,
-97,103,101,60,105,109,103,32,115,114,99,61,34,105,109,97,103,101,115,47,105,100,
-101,110,116,105,102,105,101,100,32,98,121,32,116,104,101,110,97,116,117,114,97,
-108,32,114,101,115,111,117,114,99,101,115,99,108,97,115,115,105,102,105,99,97,
-116,105,111,110,32,111,102,99,97,110,32,98,101,32,99,111,110,115,105,100,101,114
-,101,100,113,117,97,110,116,117,109,32,109,101,99,104,97,110,105,99,115,78,101,
-118,101,114,116,104,101,108,101,115,115,44,32,116,104,101,109,105,108,108,105,
-111,110,32,121,101,97,114,115,32,97,103,111,60,47,98,111,100,121,62,13,10,60,47,
-104,116,109,108,62,13,206,149,206,187,206,187,206,183,206,189,206,185,206,186,
-206,172,10,116,97,107,101,32,97,100,118,97,110,116,97,103,101,32,111,102,97,110,
-100,44,32,97,99,99,111,114,100,105,110,103,32,116,111,97,116,116,114,105,98,117,
-116,101,100,32,116,111,32,116,104,101,77,105,99,114,111,115,111,102,116,32,87,
-105,110,100,111,119,115,116,104,101,32,102,105,114,115,116,32,99,101,110,116,117
-,114,121,117,110,100,101,114,32,116,104,101,32,99,111,110,116,114,111,108,100,
-105,118,32,99,108,97,115,115,61,34,104,101,97,100,101,114,115,104,111,114,116,
-108,121,32,97,102,116,101,114,32,116,104,101,110,111,116,97,98,108,101,32,101,
-120,99,101,112,116,105,111,110,116,101,110,115,32,111,102,32,116,104,111,117,115
-,97,110,100,115,115,101,118,101,114,97,108,32,100,105,102,102,101,114,101,110,
-116,97,114,111,117,110,100,32,116,104,101,32,119,111,114,108,100,46,114,101,97,
-99,104,105,110,103,32,109,105,108,105,116,97,114,121,105,115,111,108,97,116,101,
-100,32,102,114,111,109,32,116,104,101,111,112,112,111,115,105,116,105,111,110,32
-,116,111,32,116,104,101,116,104,101,32,79,108,100,32,84,101,115,116,97,109,101,
-110,116,65,102,114,105,99,97,110,32,65,109,101,114,105,99,97,110,115,105,110,115
-,101,114,116,101,100,32,105,110,116,111,32,116,104,101,115,101,112,97,114,97,116
-,101,32,102,114,111,109,32,116,104,101,109,101,116,114,111,112,111,108,105,116,
-97,110,32,97,114,101,97,109,97,107,101,115,32,105,116,32,112,111,115,115,105,98,
-108,101,97,99,107,110,111,119,108,101,100,103,101,100,32,116,104,97,116,97,114,
-103,117,97,98,108,121,32,116,104,101,32,109,111,115,116,116,121,112,101,61,34,
-116,101,120,116,47,99,115,115,34,62,10,116,104,101,32,73,110,116,101,114,110,97,
-116,105,111,110,97,108,65,99,99,111,114,100,105,110,103,32,116,111,32,116,104,
-101,32,112,101,61,34,116,101,120,116,47,99,115,115,34,32,47,62,10,99,111,105,110
-,99,105,100,101,32,119,105,116,104,32,116,104,101,116,119,111,45,116,104,105,114
-,100,115,32,111,102,32,116,104,101,68,117,114,105,110,103,32,116,104,105,115,32,
-116,105,109,101,44,100,117,114,105,110,103,32,116,104,101,32,112,101,114,105,111
-,100,97,110,110,111,117,110,99,101,100,32,116,104,97,116,32,104,101,116,104,101,
-32,105,110,116,101,114,110,97,116,105,111,110,97,108,97,110,100,32,109,111,114,
-101,32,114,101,99,101,110,116,108,121,98,101,108,105,101,118,101,100,32,116,104,
-97,116,32,116,104,101,99,111,110,115,99,105,111,117,115,110,101,115,115,32,97,
-110,100,102,111,114,109,101,114,108,121,32,107,110,111,119,110,32,97,115,115,117
-,114,114,111,117,110,100,101,100,32,98,121,32,116,104,101,102,105,114,115,116,32
-,97,112,112,101,97,114,101,100,32,105,110,111,99,99,97,115,105,111,110,97,108,
-108,121,32,117,115,101,100,112,111,115,105,116,105,111,110,58,97,98,115,111,108,
-117,116,101,59,34,32,116,97,114,103,101,116,61,34,95,98,108,97,110,107,34,32,112
-,111,115,105,116,105,111,110,58,114,101,108,97,116,105,118,101,59,116,101,120,
-116,45,97,108,105,103,110,58,99,101,110,116,101,114,59,106,97,120,47,108,105,98,
-115,47,106,113,117,101,114,121,47,49,46,98,97,99,107,103,114,111,117,110,100,45,
-99,111,108,111,114,58,35,116,121,112,101,61,34,97,112,112,108,105,99,97,116,105,
-111,110,47,97,110,103,117,97,103,101,34,32,99,111,110,116,101,110,116,61,34,60,
-109,101,116,97,32,104,116,116,112,45,101,113,117,105,118,61,34,80,114,105,118,97
-,99,121,32,80,111,108,105,99,121,60,47,97,62,101,40,34,37,51,67,115,99,114,105,
-112,116,32,115,114,99,61,39,34,32,116,97,114,103,101,116,61,34,95,98,108,97,110,
-107,34,62,79,110,32,116,104,101,32,111,116,104,101,114,32,104,97,110,100,44,46,
-106,112,103,124,116,104,117,109,98,124,114,105,103,104,116,124,50,60,47,100,105,
-118,62,60,100,105,118,32,99,108,97,115,115,61,34,60,100,105,118,32,115,116,121,
-108,101,61,34,102,108,111,97,116,58,110,105,110,101,116,101,101,110,116,104,32,
-99,101,110,116,117,114,121,60,47,98,111,100,121,62,13,10,60,47,104,116,109,108,
-62,13,10,60,105,109,103,32,115,114,99,61,34,104,116,116,112,58,47,47,115,59,116,
-101,120,116,45,97,108,105,103,110,58,99,101,110,116,101,114,102,111,110,116,45,
-119,101,105,103,104,116,58,32,98,111,108,100,59,32,65,99,99,111,114,100,105,110,
-103,32,116,111,32,116,104,101,32,100,105,102,102,101,114,101,110,99,101,32,98,
-101,116,119,101,101,110,34,32,102,114,97,109,101,98,111,114,100,101,114,61,34,48
-,34,32,34,32,115,116,121,108,101,61,34,112,111,115,105,116,105,111,110,58,108,
-105,110,107,32,104,114,101,102,61,34,104,116,116,112,58,47,47,104,116,109,108,52
-,47,108,111,111,115,101,46,100,116,100,34,62,10,100,117,114,105,110,103,32,116,
-104,105,115,32,112,101,114,105,111,100,60,47,116,100,62,60,47,116,114,62,60,47,
-116,97,98,108,101,62,99,108,111,115,101,108,121,32,114,101,108,97,116,101,100,32
-,116,111,102,111,114,32,116,104,101,32,102,105,114,115,116,32,116,105,109,101,59
-,102,111,110,116,45,119,101,105,103,104,116,58,98,111,108,100,59,105,110,112,117
-,116,32,116,121,112,101,61,34,116,101,120,116,34,32,60,115,112,97,110,32,115,116
-,121,108,101,61,34,102,111,110,116,45,111,110,114,101,97,100,121,115,116,97,116,
-101,99,104,97,110,103,101,9,60,100,105,118,32,99,108,97,115,115,61,34,99,108,101
-,97,114,100,111,99,117,109,101,110,116,46,108,111,99,97,116,105,111,110,46,32,70
-,111,114,32,101,120,97,109,112,108,101,44,32,116,104,101,32,97,32,119,105,100,
-101,32,118,97,114,105,101,116,121,32,111,102,32,60,33,68,79,67,84,89,80,69,32,
-104,116,109,108,62,13,10,60,38,110,98,115,112,59,38,110,98,115,112,59,38,110,98,
-115,112,59,34,62,60,97,32,104,114,101,102,61,34,104,116,116,112,58,47,47,115,116
-,121,108,101,61,34,102,108,111,97,116,58,108,101,102,116,59,99,111,110,99,101,
-114,110,101,100,32,119,105,116,104,32,116,104,101,61,104,116,116,112,37,51,65,37
-,50,70,37,50,70,119,119,119,46,105,110,32,112,111,112,117,108,97,114,32,99,117,
-108,116,117,114,101,116,121,112,101,61,34,116,101,120,116,47,99,115,115,34,32,47
-,62,105,116,32,105,115,32,112,111,115,115,105,98,108,101,32,116,111,32,72,97,114
-,118,97,114,100,32,85,110,105,118,101,114,115,105,116,121,116,121,108,101,115,
-104,101,101,116,34,32,104,114,101,102,61,34,47,116,104,101,32,109,97,105,110,32,
-99,104,97,114,97,99,116,101,114,79,120,102,111,114,100,32,85,110,105,118,101,114
-,115,105,116,121,32,32,110,97,109,101,61,34,107,101,121,119,111,114,100,115,34,
-32,99,115,116,121,108,101,61,34,116,101,120,116,45,97,108,105,103,110,58,116,104
-,101,32,85,110,105,116,101,100,32,75,105,110,103,100,111,109,102,101,100,101,114
-,97,108,32,103,111,118,101,114,110,109,101,110,116,60,100,105,118,32,115,116,121
-,108,101,61,34,109,97,114,103,105,110,32,100,101,112,101,110,100,105,110,103,32,
-111,110,32,116,104,101,32,100,101,115,99,114,105,112,116,105,111,110,32,111,102,
-32,116,104,101,60,100,105,118,32,99,108,97,115,115,61,34,104,101,97,100,101,114,
-46,109,105,110,46,106,115,34,62,60,47,115,99,114,105,112,116,62,100,101,115,116,
-114,117,99,116,105,111,110,32,111,102,32,116,104,101,115,108,105,103,104,116,108
-,121,32,100,105,102,102,101,114,101,110,116,105,110,32,97,99,99,111,114,100,97,
-110,99,101,32,119,105,116,104,116,101,108,101,99,111,109,109,117,110,105,99,97,
-116,105,111,110,115,105,110,100,105,99,97,116,101,115,32,116,104,97,116,32,116,
-104,101,115,104,111,114,116,108,121,32,116,104,101,114,101,97,102,116,101,114,
-101,115,112,101,99,105,97,108,108,121,32,105,110,32,116,104,101,32,69,117,114,
-111,112,101,97,110,32,99,111,117,110,116,114,105,101,115,72,111,119,101,118,101,
-114,44,32,116,104,101,114,101,32,97,114,101,115,114,99,61,34,104,116,116,112,58,
-47,47,115,116,97,116,105,99,115,117,103,103,101,115,116,101,100,32,116,104,97,
-116,32,116,104,101,34,32,115,114,99,61,34,104,116,116,112,58,47,47,119,119,119,
-46,97,32,108,97,114,103,101,32,110,117,109,98,101,114,32,111,102,32,84,101,108,
-101,99,111,109,109,117,110,105,99,97,116,105,111,110,115,34,32,114,101,108,61,34
-,110,111,102,111,108,108,111,119,34,32,116,72,111,108,121,32,82,111,109,97,110,
-32,69,109,112,101,114,111,114,97,108,109,111,115,116,32,101,120,99,108,117,115,
-105,118,101,108,121,34,32,98,111,114,100,101,114,61,34,48,34,32,97,108,116,61,34
-,83,101,99,114,101,116,97,114,121,32,111,102,32,83,116,97,116,101,99,117,108,109
-,105,110,97,116,105,110,103,32,105,110,32,116,104,101,67,73,65,32,87,111,114,108
-,100,32,70,97,99,116,98,111,111,107,116,104,101,32,109,111,115,116,32,105,109,
-112,111,114,116,97,110,116,97,110,110,105,118,101,114,115,97,114,121,32,111,102,
-32,116,104,101,115,116,121,108,101,61,34,98,97,99,107,103,114,111,117,110,100,45
-,60,108,105,62,60,101,109,62,60,97,32,104,114,101,102,61,34,47,116,104,101,32,65
-,116,108,97,110,116,105,99,32,79,99,101,97,110,115,116,114,105,99,116,108,121,32
-,115,112,101,97,107,105,110,103,44,115,104,111,114,116,108,121,32,98,101,102,111
-,114,101,32,116,104,101,100,105,102,102,101,114,101,110,116,32,116,121,112,101,
-115,32,111,102,116,104,101,32,79,116,116,111,109,97,110,32,69,109,112,105,114,
-101,62,60,105,109,103,32,115,114,99,61,34,104,116,116,112,58,47,47,65,110,32,73,
-110,116,114,111,100,117,99,116,105,111,110,32,116,111,99,111,110,115,101,113,117
-,101,110,99,101,32,111,102,32,116,104,101,100,101,112,97,114,116,117,114,101,32,
-102,114,111,109,32,116,104,101,67,111,110,102,101,100,101,114,97,116,101,32,83,
-116,97,116,101,115,105,110,100,105,103,101,110,111,117,115,32,112,101,111,112,
-108,101,115,80,114,111,99,101,101,100,105,110,103,115,32,111,102,32,116,104,101,
-105,110,102,111,114,109,97,116,105,111,110,32,111,110,32,116,104,101,116,104,101
-,111,114,105,101,115,32,104,97,118,101,32,98,101,101,110,105,110,118,111,108,118
-,101,109,101,110,116,32,105,110,32,116,104,101,100,105,118,105,100,101,100,32,
-105,110,116,111,32,116,104,114,101,101,97,100,106,97,99,101,110,116,32,99,111,
-117,110,116,114,105,101,115,105,115,32,114,101,115,112,111,110,115,105,98,108,
-101,32,102,111,114,100,105,115,115,111,108,117,116,105,111,110,32,111,102,32,116
-,104,101,99,111,108,108,97,98,111,114,97,116,105,111,110,32,119,105,116,104,119,
-105,100,101,108,121,32,114,101,103,97,114,100,101,100,32,97,115,104,105,115,32,
-99,111,110,116,101,109,112,111,114,97,114,105,101,115,102,111,117,110,100,105,
-110,103,32,109,101,109,98,101,114,32,111,102,68,111,109,105,110,105,99,97,110,32
-,82,101,112,117,98,108,105,99,103,101,110,101,114,97,108,108,121,32,97,99,99,101
-,112,116,101,100,116,104,101,32,112,111,115,115,105,98,105,108,105,116,121,32,
-111,102,97,114,101,32,97,108,115,111,32,97,118,97,105,108,97,98,108,101,117,110,
-100,101,114,32,99,111,110,115,116,114,117,99,116,105,111,110,114,101,115,116,111
-,114,97,116,105,111,110,32,111,102,32,116,104,101,116,104,101,32,103,101,110,101
-,114,97,108,32,112,117,98,108,105,99,105,115,32,97,108,109,111,115,116,32,101,
-110,116,105,114,101,108,121,112,97,115,115,101,115,32,116,104,114,111,117,103,
-104,32,116,104,101,104,97,115,32,98,101,101,110,32,115,117,103,103,101,115,116,
-101,100,99,111,109,112,117,116,101,114,32,97,110,100,32,118,105,100,101,111,71,
-101,114,109,97,110,105,99,32,108,97,110,103,117,97,103,101,115,32,97,99,99,111,
-114,100,105,110,103,32,116,111,32,116,104,101,32,100,105,102,102,101,114,101,110
-,116,32,102,114,111,109,32,116,104,101,115,104,111,114,116,108,121,32,97,102,116
-,101,114,119,97,114,100,115,104,114,101,102,61,34,104,116,116,112,115,58,47,47,
-119,119,119,46,114,101,99,101,110,116,32,100,101,118,101,108,111,112,109,101,110
-,116,66,111,97,114,100,32,111,102,32,68,105,114,101,99,116,111,114,115,60,100,
-105,118,32,99,108,97,115,115,61,34,115,101,97,114,99,104,124,32,60,97,32,104,114
-,101,102,61,34,104,116,116,112,58,47,47,73,110,32,112,97,114,116,105,99,117,108,
-97,114,44,32,116,104,101,77,117,108,116,105,112,108,101,32,102,111,111,116,110,
-111,116,101,115,111,114,32,111,116,104,101,114,32,115,117,98,115,116,97,110,99,
-101,116,104,111,117,115,97,110,100,115,32,111,102,32,121,101,97,114,115,116,114,
-97,110,115,108,97,116,105,111,110,32,111,102,32,116,104,101,60,47,100,105,118,62
-,13,10,60,47,100,105,118,62,13,10,13,10,60,97,32,104,114,101,102,61,34,105,110,
-100,101,120,46,112,104,112,119,97,115,32,101,115,116,97,98,108,105,115,104,101,
-100,32,105,110,109,105,110,46,106,115,34,62,60,47,115,99,114,105,112,116,62,10,
-112,97,114,116,105,99,105,112,97,116,101,32,105,110,32,116,104,101,97,32,115,116
-,114,111,110,103,32,105,110,102,108,117,101,110,99,101,115,116,121,108,101,61,34
-,109,97,114,103,105,110,45,116,111,112,58,114,101,112,114,101,115,101,110,116,
-101,100,32,98,121,32,116,104,101,103,114,97,100,117,97,116,101,100,32,102,114,
-111,109,32,116,104,101,84,114,97,100,105,116,105,111,110,97,108,108,121,44,32,
-116,104,101,69,108,101,109,101,110,116,40,34,115,99,114,105,112,116,34,41,59,72,
-111,119,101,118,101,114,44,32,115,105,110,99,101,32,116,104,101,47,100,105,118,
-62,10,60,47,100,105,118,62,10,60,100,105,118,32,108,101,102,116,59,32,109,97,114
-,103,105,110,45,108,101,102,116,58,112,114,111,116,101,99,116,105,111,110,32,97,
-103,97,105,110,115,116,48,59,32,118,101,114,116,105,99,97,108,45,97,108,105,103,
-110,58,85,110,102,111,114,116,117,110,97,116,101,108,121,44,32,116,104,101,116,
-121,112,101,61,34,105,109,97,103,101,47,120,45,105,99,111,110,47,100,105,118,62,
-10,60,100,105,118,32,99,108,97,115,115,61,34,32,99,108,97,115,115,61,34,99,108,
-101,97,114,102,105,120,34,62,60,100,105,118,32,99,108,97,115,115,61,34,102,111,
-111,116,101,114,9,9,60,47,100,105,118,62,10,9,9,60,47,100,105,118,62,10,116,104,
-101,32,109,111,116,105,111,110,32,112,105,99,116,117,114,101,208,145,209,138,208
-,187,208,179,208,176,209,128,209,129,208,186,208,184,208,177,209,138,208,187,208
-,179,208,176,209,128,209,129,208,186,208,184,208,164,208,181,208,180,208,181,209
-,128,208,176,209,134,208,184,208,184,208,189,208,181,209,129,208,186,208,190,208
-,187,209,140,208,186,208,190,209,129,208,190,208,190,208,177,209,137,208,181,208
-,189,208,184,208,181,209,129,208,190,208,190,208,177,209,137,208,181,208,189,208
-,184,209,143,208,191,209,128,208,190,208,179,209,128,208,176,208,188,208,188,209
-,139,208,158,209,130,208,191,209,128,208,176,208,178,208,184,209,130,209,140,208
-,177,208,181,209,129,208,191,208,187,208,176,209,130,208,189,208,190,208,188,208
-,176,209,130,208,181,209,128,208,184,208,176,208,187,209,139,208,191,208,190,208
-,183,208,178,208,190,208,187,209,143,208,181,209,130,208,191,208,190,209,129,208
-,187,208,181,208,180,208,189,208,184,208,181,209,128,208,176,208,183,208,187,208
-,184,209,135,208,189,209,139,209,133,208,191,209,128,208,190,208,180,209,131,208
-,186,209,134,208,184,208,184,208,191,209,128,208,190,208,179,209,128,208,176,208
-,188,208,188,208,176,208,191,208,190,208,187,208,189,208,190,209,129,209,130,209
-,140,209,142,208,189,208,176,209,133,208,190,208,180,208,184,209,130,209,129,209
-,143,208,184,208,183,208,177,209,128,208,176,208,189,208,189,208,190,208,181,208
-,189,208,176,209,129,208,181,208,187,208,181,208,189,208,184,209,143,208,184,208
-,183,208,188,208,181,208,189,208,181,208,189,208,184,209,143,208,186,208,176,209
-,130,208,181,208,179,208,190,209,128,208,184,208,184,208,144,208,187,208,181,208
-,186,209,129,208,176,208,189,208,180,209,128,224,164,166,224,165,141,224,164,181
-,224,164,190,224,164,176,224,164,190,224,164,174,224,165,136,224,164,168,224,165
-,129,224,164,133,224,164,178,224,164,170,224,165,141,224,164,176,224,164,166,224
-,164,190,224,164,168,224,164,173,224,164,190,224,164,176,224,164,164,224,165,128
-,224,164,175,224,164,133,224,164,168,224,165,129,224,164,166,224,165,135,224,164
-,182,224,164,185,224,164,191,224,164,168,224,165,141,224,164,166,224,165,128,224
-,164,135,224,164,130,224,164,161,224,164,191,224,164,175,224,164,190,224,164,166
-,224,164,191,224,164,178,224,165,141,224,164,178,224,165,128,224,164,133,224,164
-,167,224,164,191,224,164,149,224,164,190,224,164,176,224,164,181,224,165,128,224
-,164,161,224,164,191,224,164,175,224,165,139,224,164,154,224,164,191,224,164,159
-,224,165,141,224,164,160,224,165,135,224,164,184,224,164,174,224,164,190,224,164
-,154,224,164,190,224,164,176,224,164,156,224,164,130,224,164,149,224,165,141,224
-,164,182,224,164,168,224,164,166,224,165,129,224,164,168,224,164,191,224,164,175
-,224,164,190,224,164,170,224,165,141,224,164,176,224,164,175,224,165,139,224,164
-,151,224,164,133,224,164,168,224,165,129,224,164,184,224,164,190,224,164,176,224
-,164,145,224,164,168,224,164,178,224,164,190,224,164,135,224,164,168,224,164,170
-,224,164,190,224,164,176,224,165,141,224,164,159,224,165,128,224,164,182,224,164
-,176,224,165,141,224,164,164,224,165,139,224,164,130,224,164,178,224,165,139,224
-,164,149,224,164,184,224,164,173,224,164,190,224,164,171,224,164,188,224,165,141
-,224,164,178,224,165,136,224,164,182,224,164,182,224,164,176,224,165,141,224,164
-,164,224,165,135,224,164,130,224,164,170,224,165,141,224,164,176,224,164,166,224
-,165,135,224,164,182,224,164,170,224,165,141,224,164,178,224,165,135,224,164,175
-,224,164,176,224,164,149,224,165,135,224,164,130,224,164,166,224,165,141,224,164
-,176,224,164,184,224,165,141,224,164,165,224,164,191,224,164,164,224,164,191,224
-,164,137,224,164,164,224,165,141,224,164,170,224,164,190,224,164,166,224,164,137
-,224,164,168,224,165,141,224,164,185,224,165,135,224,164,130,224,164,154,224,164
-,191,224,164,159,224,165,141,224,164,160,224,164,190,224,164,175,224,164,190,224
-,164,164,224,165,141,224,164,176,224,164,190,224,164,156,224,165,141,224,164,175
-,224,164,190,224,164,166,224,164,190,224,164,170,224,165,129,224,164,176,224,164
-,190,224,164,168,224,165,135,224,164,156,224,165,139,224,164,161,224,164,188,224
-,165,135,224,164,130,224,164,133,224,164,168,224,165,129,224,164,181,224,164,190
-,224,164,166,224,164,182,224,165,141,224,164,176,224,165,135,224,164,163,224,165
-,128,224,164,182,224,164,191,224,164,149,224,165,141,224,164,183,224,164,190,224
-,164,184,224,164,176,224,164,149,224,164,190,224,164,176,224,165,128,224,164,184
-,224,164,130,224,164,151,224,165,141,224,164,176,224,164,185,224,164,170,224,164
-,176,224,164,191,224,164,163,224,164,190,224,164,174,224,164,172,224,165,141,224
-,164,176,224,164,190,224,164,130,224,164,161,224,164,172,224,164,154,224,165,141
-,224,164,154,224,165,139,224,164,130,224,164,137,224,164,170,224,164,178,224,164
-,172,224,165,141,224,164,167,224,164,174,224,164,130,224,164,164,224,165,141,224
-,164,176,224,165,128,224,164,184,224,164,130,224,164,170,224,164,176,224,165,141
-,224,164,149,224,164,137,224,164,174,224,165,141,224,164,174,224,165,128,224,164
-,166,224,164,174,224,164,190,224,164,167,224,165,141,224,164,175,224,164,174,224
-,164,184,224,164,185,224,164,190,224,164,175,224,164,164,224,164,190,224,164,182
-,224,164,172,224,165,141,224,164,166,224,165,139,224,164,130,224,164,174,224,165
-,128,224,164,161,224,164,191,224,164,175,224,164,190,224,164,134,224,164,136,224
-,164,170,224,165,128,224,164,143,224,164,178,224,164,174,224,165,139,224,164,172
-,224,164,190,224,164,135,224,164,178,224,164,184,224,164,130,224,164,150,224,165
-,141,224,164,175,224,164,190,224,164,134,224,164,170,224,164,176,224,165,135,224
-,164,182,224,164,168,224,164,133,224,164,168,224,165,129,224,164,172,224,164,130
-,224,164,167,224,164,172,224,164,190,224,164,156,224,164,188,224,164,190,224,164
-,176,224,164,168,224,164,181,224,165,128,224,164,168,224,164,164,224,164,174,224
-,164,170,224,165,141,224,164,176,224,164,174,224,165,129,224,164,150,224,164,170
-,224,165,141,224,164,176,224,164,182,224,165,141,224,164,168,224,164,170,224,164
-,176,224,164,191,224,164,181,224,164,190,224,164,176,224,164,168,224,165,129,224
-,164,149,224,164,184,224,164,190,224,164,168,224,164,184,224,164,174,224,164,176
-,224,165,141,224,164,165,224,164,168,224,164,134,224,164,175,224,165,139,224,164
-,156,224,164,191,224,164,164,224,164,184,224,165,139,224,164,174,224,164,181,224
-,164,190,224,164,176,216,167,217,132,217,133,216,180,216,167,216,177,217,131,216
-,167,216,170,216,167,217,132,217,133,217,134,216,170,216,175,217,138,216,167,216
-,170,216,167,217,132,217,131,217,133,216,168,217,138,217,136,216,170,216,177,216
-,167,217,132,217,133,216,180,216,167,217,135,216,175,216,167,216,170,216,185,216
-,175,216,175,216,167,217,132,216,178,217,136,216,167,216,177,216,185,216,175,216
-,175,216,167,217,132,216,177,216,175,217,136,216,175,216,167,217,132,216,165,216
-,179,217,132,216,167,217,133,217,138,216,169,216,167,217,132,217,129,217,136,216
-,170,217,136,216,180,217,136,216,168,216,167,217,132,217,133,216,179,216,167,216
-,168,217,130,216,167,216,170,216,167,217,132,217,133,216,185,217,132,217,136,217
-,133,216,167,216,170,216,167,217,132,217,133,216,179,217,132,216,179,217,132,216
-,167,216,170,216,167,217,132,216,172,216,177,216,167,217,129,217,138,217,131,216
-,179,216,167,217,132,216,167,216,179,217,132,216,167,217,133,217,138,216,169,216
-,167,217,132,216,167,216,170,216,181,216,167,217,132,216,167,216,170,107,101,121
-,119,111,114,100,115,34,32,99,111,110,116,101,110,116,61,34,119,51,46,111,114,
-103,47,49,57,57,57,47,120,104,116,109,108,34,62,60,97,32,116,97,114,103,101,116,
-61,34,95,98,108,97,110,107,34,32,116,101,120,116,47,104,116,109,108,59,32,99,104
-,97,114,115,101,116,61,34,32,116,97,114,103,101,116,61,34,95,98,108,97,110,107,
-34,62,60,116,97,98,108,101,32,99,101,108,108,112,97,100,100,105,110,103,61,34,97
-,117,116,111,99,111,109,112,108,101,116,101,61,34,111,102,102,34,32,116,101,120,
-116,45,97,108,105,103,110,58,32,99,101,110,116,101,114,59,116,111,32,108,97,115,
-116,32,118,101,114,115,105,111,110,32,98,121,32,98,97,99,107,103,114,111,117,110
-,100,45,99,111,108,111,114,58,32,35,34,32,104,114,101,102,61,34,104,116,116,112,
-58,47,47,119,119,119,46,47,100,105,118,62,60,47,100,105,118,62,60,100,105,118,32
-,105,100,61,60,97,32,104,114,101,102,61,34,35,34,32,99,108,97,115,115,61,34,34,
-62,60,105,109,103,32,115,114,99,61,34,104,116,116,112,58,47,47,99,114,105,112,
-116,34,32,115,114,99,61,34,104,116,116,112,58,47,47,10,60,115,99,114,105,112,116
-,32,108,97,110,103,117,97,103,101,61,34,47,47,69,78,34,32,34,104,116,116,112,58,
-47,47,119,119,119,46,119,101,110,99,111,100,101,85,82,73,67,111,109,112,111,110,
-101,110,116,40,34,32,104,114,101,102,61,34,106,97,118,97,115,99,114,105,112,116,
-58,60,100,105,118,32,99,108,97,115,115,61,34,99,111,110,116,101,110,116,100,111,
-99,117,109,101,110,116,46,119,114,105,116,101,40,39,60,115,99,112,111,115,105,
-116,105,111,110,58,32,97,98,115,111,108,117,116,101,59,115,99,114,105,112,116,32
-,115,114,99,61,34,104,116,116,112,58,47,47,32,115,116,121,108,101,61,34,109,97,
-114,103,105,110,45,116,111,112,58,46,109,105,110,46,106,115,34,62,60,47,115,99,
-114,105,112,116,62,10,60,47,100,105,118,62,10,60,100,105,118,32,99,108,97,115,
-115,61,34,119,51,46,111,114,103,47,49,57,57,57,47,120,104,116,109,108,34,32,10,
-13,10,60,47,98,111,100,121,62,13,10,60,47,104,116,109,108,62,100,105,115,116,105
-,110,99,116,105,111,110,32,98,101,116,119,101,101,110,47,34,32,116,97,114,103,
-101,116,61,34,95,98,108,97,110,107,34,62,60,108,105,110,107,32,104,114,101,102,
-61,34,104,116,116,112,58,47,47,101,110,99,111,100,105,110,103,61,34,117,116,102,
-45,56,34,63,62,10,119,46,97,100,100,69,118,101,110,116,76,105,115,116,101,110,
-101,114,63,97,99,116,105,111,110,61,34,104,116,116,112,58,47,47,119,119,119,46,
-105,99,111,110,34,32,104,114,101,102,61,34,104,116,116,112,58,47,47,32,115,116,
-121,108,101,61,34,98,97,99,107,103,114,111,117,110,100,58,116,121,112,101,61,34,
-116,101,120,116,47,99,115,115,34,32,47,62,10,109,101,116,97,32,112,114,111,112,
-101,114,116,121,61,34,111,103,58,116,60,105,110,112,117,116,32,116,121,112,101,
-61,34,116,101,120,116,34,32,32,115,116,121,108,101,61,34,116,101,120,116,45,97,
-108,105,103,110,58,116,104,101,32,100,101,118,101,108,111,112,109,101,110,116,32
-,111,102,32,116,121,108,101,115,104,101,101,116,34,32,116,121,112,101,61,34,116,
-101,104,116,109,108,59,32,99,104,97,114,115,101,116,61,117,116,102,45,56,105,115
-,32,99,111,110,115,105,100,101,114,101,100,32,116,111,32,98,101,116,97,98,108,
-101,32,119,105,100,116,104,61,34,49,48,48,37,34,32,73,110,32,97,100,100,105,116,
-105,111,110,32,116,111,32,116,104,101,32,99,111,110,116,114,105,98,117,116,101,
-100,32,116,111,32,116,104,101,32,100,105,102,102,101,114,101,110,99,101,115,32,
-98,101,116,119,101,101,110,100,101,118,101,108,111,112,109,101,110,116,32,111,
-102,32,116,104,101,32,73,116,32,105,115,32,105,109,112,111,114,116,97,110,116,32
-,116,111,32,60,47,115,99,114,105,112,116,62,10,10,60,115,99,114,105,112,116,32,
-32,115,116,121,108,101,61,34,102,111,110,116,45,115,105,122,101,58,49,62,60,47,
-115,112,97,110,62,60,115,112,97,110,32,105,100,61,103,98,76,105,98,114,97,114,
-121,32,111,102,32,67,111,110,103,114,101,115,115,60,105,109,103,32,115,114,99,61
-,34,104,116,116,112,58,47,47,105,109,69,110,103,108,105,115,104,32,116,114,97,
-110,115,108,97,116,105,111,110,65,99,97,100,101,109,121,32,111,102,32,83,99,105,
-101,110,99,101,115,100,105,118,32,115,116,121,108,101,61,34,100,105,115,112,108,
-97,121,58,99,111,110,115,116,114,117,99,116,105,111,110,32,111,102,32,116,104,
-101,46,103,101,116,69,108,101,109,101,110,116,66,121,73,100,40,105,100,41,105,
-110,32,99,111,110,106,117,110,99,116,105,111,110,32,119,105,116,104,69,108,101,
-109,101,110,116,40,39,115,99,114,105,112,116,39,41,59,32,60,109,101,116,97,32,
-112,114,111,112,101,114,116,121,61,34,111,103,58,208,145,209,138,208,187,208,179
-,208,176,209,128,209,129,208,186,208,184,10,32,116,121,112,101,61,34,116,101,120
-,116,34,32,110,97,109,101,61,34,62,80,114,105,118,97,99,121,32,80,111,108,105,99
-,121,60,47,97,62,97,100,109,105,110,105,115,116,101,114,101,100,32,98,121,32,116
-,104,101,101,110,97,98,108,101,83,105,110,103,108,101,82,101,113,117,101,115,116
-,115,116,121,108,101,61,38,113,117,111,116,59,109,97,114,103,105,110,58,60,47,
-100,105,118,62,60,47,100,105,118,62,60,47,100,105,118,62,60,62,60,105,109,103,32
-,115,114,99,61,34,104,116,116,112,58,47,47,105,32,115,116,121,108,101,61,38,113,
-117,111,116,59,102,108,111,97,116,58,114,101,102,101,114,114,101,100,32,116,111,
-32,97,115,32,116,104,101,32,116,111,116,97,108,32,112,111,112,117,108,97,116,105
-,111,110,32,111,102,105,110,32,87,97,115,104,105,110,103,116,111,110,44,32,68,46
-,67,46,32,115,116,121,108,101,61,34,98,97,99,107,103,114,111,117,110,100,45,97,
-109,111,110,103,32,111,116,104,101,114,32,116,104,105,110,103,115,44,111,114,103
-,97,110,105,122,97,116,105,111,110,32,111,102,32,116,104,101,112,97,114,116,105,
-99,105,112,97,116,101,100,32,105,110,32,116,104,101,116,104,101,32,105,110,116,
-114,111,100,117,99,116,105,111,110,32,111,102,105,100,101,110,116,105,102,105,
-101,100,32,119,105,116,104,32,116,104,101,102,105,99,116,105,111,110,97,108,32,
-99,104,97,114,97,99,116,101,114,32,79,120,102,111,114,100,32,85,110,105,118,101,
-114,115,105,116,121,32,109,105,115,117,110,100,101,114,115,116,97,110,100,105,
-110,103,32,111,102,84,104,101,114,101,32,97,114,101,44,32,104,111,119,101,118,
-101,114,44,115,116,121,108,101,115,104,101,101,116,34,32,104,114,101,102,61,34,
-47,67,111,108,117,109,98,105,97,32,85,110,105,118,101,114,115,105,116,121,101,
-120,112,97,110,100,101,100,32,116,111,32,105,110,99,108,117,100,101,117,115,117,
-97,108,108,121,32,114,101,102,101,114,114,101,100,32,116,111,105,110,100,105,99,
-97,116,105,110,103,32,116,104,97,116,32,116,104,101,104,97,118,101,32,115,117,
-103,103,101,115,116,101,100,32,116,104,97,116,97,102,102,105,108,105,97,116,101,
-100,32,119,105,116,104,32,116,104,101,99,111,114,114,101,108,97,116,105,111,110,
-32,98,101,116,119,101,101,110,110,117,109,98,101,114,32,111,102,32,100,105,102,
-102,101,114,101,110,116,62,60,47,116,100,62,60,47,116,114,62,60,47,116,97,98,108
-,101,62,82,101,112,117,98,108,105,99,32,111,102,32,73,114,101,108,97,110,100,10,
-60,47,115,99,114,105,112,116,62,10,60,115,99,114,105,112,116,32,117,110,100,101,
-114,32,116,104,101,32,105,110,102,108,117,101,110,99,101,99,111,110,116,114,105,
-98,117,116,105,111,110,32,116,111,32,116,104,101,79,102,102,105,99,105,97,108,32
-,119,101,98,115,105,116,101,32,111,102,104,101,97,100,113,117,97,114,116,101,114
-,115,32,111,102,32,116,104,101,99,101,110,116,101,114,101,100,32,97,114,111,117,
-110,100,32,116,104,101,105,109,112,108,105,99,97,116,105,111,110,115,32,111,102,
-32,116,104,101,104,97,118,101,32,98,101,101,110,32,100,101,118,101,108,111,112,
-101,100,70,101,100,101,114,97,108,32,82,101,112,117,98,108,105,99,32,111,102,98,
-101,99,97,109,101,32,105,110,99,114,101,97,115,105,110,103,108,121,99,111,110,
-116,105,110,117,97,116,105,111,110,32,111,102,32,116,104,101,78,111,116,101,44,
-32,104,111,119,101,118,101,114,44,32,116,104,97,116,115,105,109,105,108,97,114,
-32,116,111,32,116,104,97,116,32,111,102,32,99,97,112,97,98,105,108,105,116,105,
-101,115,32,111,102,32,116,104,101,97,99,99,111,114,100,97,110,99,101,32,119,105,
-116,104,32,116,104,101,112,97,114,116,105,99,105,112,97,110,116,115,32,105,110,
-32,116,104,101,102,117,114,116,104,101,114,32,100,101,118,101,108,111,112,109,
-101,110,116,117,110,100,101,114,32,116,104,101,32,100,105,114,101,99,116,105,111
-,110,105,115,32,111,102,116,101,110,32,99,111,110,115,105,100,101,114,101,100,
-104,105,115,32,121,111,117,110,103,101,114,32,98,114,111,116,104,101,114,60,47,
-116,100,62,60,47,116,114,62,60,47,116,97,98,108,101,62,60,97,32,104,116,116,112,
-45,101,113,117,105,118,61,34,88,45,85,65,45,112,104,121,115,105,99,97,108,32,112
-,114,111,112,101,114,116,105,101,115,111,102,32,66,114,105,116,105,115,104,32,67
-,111,108,117,109,98,105,97,104,97,115,32,98,101,101,110,32,99,114,105,116,105,99
-,105,122,101,100,40,119,105,116,104,32,116,104,101,32,101,120,99,101,112,116,105
-,111,110,113,117,101,115,116,105,111,110,115,32,97,98,111,117,116,32,116,104,101
-,112,97,115,115,105,110,103,32,116,104,114,111,117,103,104,32,116,104,101,48,34,
-32,99,101,108,108,112,97,100,100,105,110,103,61,34,48,34,32,116,104,111,117,115,
-97,110,100,115,32,111,102,32,112,101,111,112,108,101,114,101,100,105,114,101,99,
-116,115,32,104,101,114,101,46,32,70,111,114,104,97,118,101,32,99,104,105,108,100
-,114,101,110,32,117,110,100,101,114,37,51,69,37,51,67,47,115,99,114,105,112,116,
-37,51,69,34,41,41,59,60,97,32,104,114,101,102,61,34,104,116,116,112,58,47,47,119
-,119,119,46,60,108,105,62,60,97,32,104,114,101,102,61,34,104,116,116,112,58,47,
-47,115,105,116,101,95,110,97,109,101,34,32,99,111,110,116,101,110,116,61,34,116,
-101,120,116,45,100,101,99,111,114,97,116,105,111,110,58,110,111,110,101,115,116,
-121,108,101,61,34,100,105,115,112,108,97,121,58,32,110,111,110,101,60,109,101,
-116,97,32,104,116,116,112,45,101,113,117,105,118,61,34,88,45,110,101,119,32,68,
-97,116,101,40,41,46,103,101,116,84,105,109,101,40,41,32,116,121,112,101,61,34,
-105,109,97,103,101,47,120,45,105,99,111,110,34,60,47,115,112,97,110,62,60,115,
-112,97,110,32,99,108,97,115,115,61,34,108,97,110,103,117,97,103,101,61,34,106,97
-,118,97,115,99,114,105,112,116,119,105,110,100,111,119,46,108,111,99,97,116,105,
-111,110,46,104,114,101,102,60,97,32,104,114,101,102,61,34,106,97,118,97,115,99,
-114,105,112,116,58,45,45,62,13,10,60,115,99,114,105,112,116,32,116,121,112,101,
-61,34,116,60,97,32,104,114,101,102,61,39,104,116,116,112,58,47,47,119,119,119,46
-,104,111,114,116,99,117,116,32,105,99,111,110,34,32,104,114,101,102,61,34,60,47,
-100,105,118,62,13,10,60,100,105,118,32,99,108,97,115,115,61,34,60,115,99,114,105
-,112,116,32,115,114,99,61,34,104,116,116,112,58,47,47,34,32,114,101,108,61,34,
-115,116,121,108,101,115,104,101,101,116,34,32,116,60,47,100,105,118,62,10,60,115
-,99,114,105,112,116,32,116,121,112,101,61,47,97,62,32,60,97,32,104,114,101,102,
-61,34,104,116,116,112,58,47,47,32,97,108,108,111,119,84,114,97,110,115,112,97,
-114,101,110,99,121,61,34,88,45,85,65,45,67,111,109,112,97,116,105,98,108,101,34,
-32,99,111,110,114,101,108,97,116,105,111,110,115,104,105,112,32,98,101,116,119,
-101,101,110,10,60,47,115,99,114,105,112,116,62,13,10,60,115,99,114,105,112,116,
-32,60,47,97,62,60,47,108,105,62,60,47,117,108,62,60,47,100,105,118,62,97,115,115
-,111,99,105,97,116,101,100,32,119,105,116,104,32,116,104,101,32,112,114,111,103,
-114,97,109,109,105,110,103,32,108,97,110,103,117,97,103,101,60,47,97,62,60,97,32
-,104,114,101,102,61,34,104,116,116,112,58,47,47,60,47,97,62,60,47,108,105,62,60,
-108,105,32,99,108,97,115,115,61,34,102,111,114,109,32,97,99,116,105,111,110,61,
-34,104,116,116,112,58,47,47,60,100,105,118,32,115,116,121,108,101,61,34,100,105,
-115,112,108,97,121,58,116,121,112,101,61,34,116,101,120,116,34,32,110,97,109,101
-,61,34,113,34,60,116,97,98,108,101,32,119,105,100,116,104,61,34,49,48,48,37,34,
-32,98,97,99,107,103,114,111,117,110,100,45,112,111,115,105,116,105,111,110,58,34
-,32,98,111,114,100,101,114,61,34,48,34,32,119,105,100,116,104,61,34,114,101,108,
-61,34,115,104,111,114,116,99,117,116,32,105,99,111,110,34,32,104,54,62,60,117,
-108,62,60,108,105,62,60,97,32,104,114,101,102,61,34,32,32,60,109,101,116,97,32,
-104,116,116,112,45,101,113,117,105,118,61,34,99,115,115,34,32,109,101,100,105,97
-,61,34,115,99,114,101,101,110,34,32,114,101,115,112,111,110,115,105,98,108,101,
-32,102,111,114,32,116,104,101,32,34,32,116,121,112,101,61,34,97,112,112,108,105,
-99,97,116,105,111,110,47,34,32,115,116,121,108,101,61,34,98,97,99,107,103,114,
-111,117,110,100,45,104,116,109,108,59,32,99,104,97,114,115,101,116,61,117,116,
-102,45,56,34,32,97,108,108,111,119,116,114,97,110,115,112,97,114,101,110,99,121,
-61,34,115,116,121,108,101,115,104,101,101,116,34,32,116,121,112,101,61,34,116,
-101,13,10,60,109,101,116,97,32,104,116,116,112,45,101,113,117,105,118,61,34,62,
-60,47,115,112,97,110,62,60,115,112,97,110,32,99,108,97,115,115,61,34,48,34,32,99
-,101,108,108,115,112,97,99,105,110,103,61,34,48,34,62,59,10,60,47,115,99,114,105
-,112,116,62,10,60,115,99,114,105,112,116,32,115,111,109,101,116,105,109,101,115,
-32,99,97,108,108,101,100,32,116,104,101,100,111,101,115,32,110,111,116,32,110,
-101,99,101,115,115,97,114,105,108,121,70,111,114,32,109,111,114,101,32,105,110,
-102,111,114,109,97,116,105,111,110,97,116,32,116,104,101,32,98,101,103,105,110,
-110,105,110,103,32,111,102,32,60,33,68,79,67,84,89,80,69,32,104,116,109,108,62,
-60,104,116,109,108,112,97,114,116,105,99,117,108,97,114,108,121,32,105,110,32,
-116,104,101,32,116,121,112,101,61,34,104,105,100,100,101,110,34,32,110,97,109,
-101,61,34,106,97,118,97,115,99,114,105,112,116,58,118,111,105,100,40,48,41,59,34
-,101,102,102,101,99,116,105,118,101,110,101,115,115,32,111,102,32,116,104,101,32
-,97,117,116,111,99,111,109,112,108,101,116,101,61,34,111,102,102,34,32,103,101,
-110,101,114,97,108,108,121,32,99,111,110,115,105,100,101,114,101,100,62,60,105,
-110,112,117,116,32,116,121,112,101,61,34,116,101,120,116,34,32,34,62,60,47,115,
-99,114,105,112,116,62,13,10,60,115,99,114,105,112,116,116,104,114,111,117,103,
-104,111,117,116,32,116,104,101,32,119,111,114,108,100,99,111,109,109,111,110,32,
-109,105,115,99,111,110,99,101,112,116,105,111,110,97,115,115,111,99,105,97,116,
-105,111,110,32,119,105,116,104,32,116,104,101,60,47,100,105,118,62,10,60,47,100,
-105,118,62,10,60,100,105,118,32,99,100,117,114,105,110,103,32,104,105,115,32,108
-,105,102,101,116,105,109,101,44,99,111,114,114,101,115,112,111,110,100,105,110,
-103,32,116,111,32,116,104,101,116,121,112,101,61,34,105,109,97,103,101,47,120,45
-,105,99,111,110,34,32,97,110,32,105,110,99,114,101,97,115,105,110,103,32,110,117
-,109,98,101,114,100,105,112,108,111,109,97,116,105,99,32,114,101,108,97,116,105,
-111,110,115,97,114,101,32,111,102,116,101,110,32,99,111,110,115,105,100,101,114,
-101,100,109,101,116,97,32,99,104,97,114,115,101,116,61,34,117,116,102,45,56,34,
-32,60,105,110,112,117,116,32,116,121,112,101,61,34,116,101,120,116,34,32,101,120
-,97,109,112,108,101,115,32,105,110,99,108,117,100,101,32,116,104,101,34,62,60,
-105,109,103,32,115,114,99,61,34,104,116,116,112,58,47,47,105,112,97,114,116,105,
-99,105,112,97,116,105,111,110,32,105,110,32,116,104,101,116,104,101,32,101,115,
-116,97,98,108,105,115,104,109,101,110,116,32,111,102,10,60,47,100,105,118,62,10,
-60,100,105,118,32,99,108,97,115,115,61,34,38,97,109,112,59,110,98,115,112,59,38,
-97,109,112,59,110,98,115,112,59,116,111,32,100,101,116,101,114,109,105,110,101,
-32,119,104,101,116,104,101,114,113,117,105,116,101,32,100,105,102,102,101,114,
-101,110,116,32,102,114,111,109,109,97,114,107,101,100,32,116,104,101,32,98,101,
-103,105,110,110,105,110,103,100,105,115,116,97,110,99,101,32,98,101,116,119,101,
-101,110,32,116,104,101,99,111,110,116,114,105,98,117,116,105,111,110,115,32,116,
-111,32,116,104,101,99,111,110,102,108,105,99,116,32,98,101,116,119,101,101,110,
-32,116,104,101,119,105,100,101,108,121,32,99,111,110,115,105,100,101,114,101,100
-,32,116,111,119,97,115,32,111,110,101,32,111,102,32,116,104,101,32,102,105,114,
-115,116,119,105,116,104,32,118,97,114,121,105,110,103,32,100,101,103,114,101,101
-,115,104,97,118,101,32,115,112,101,99,117,108,97,116,101,100,32,116,104,97,116,
-40,100,111,99,117,109,101,110,116,46,103,101,116,69,108,101,109,101,110,116,112,
-97,114,116,105,99,105,112,97,116,105,110,103,32,105,110,32,116,104,101,111,114,
-105,103,105,110,97,108,108,121,32,100,101,118,101,108,111,112,101,100,101,116,97
-,32,99,104,97,114,115,101,116,61,34,117,116,102,45,56,34,62,32,116,121,112,101,
-61,34,116,101,120,116,47,99,115,115,34,32,47,62,10,105,110,116,101,114,99,104,97
-,110,103,101,97,98,108,121,32,119,105,116,104,109,111,114,101,32,99,108,111,115,
-101,108,121,32,114,101,108,97,116,101,100,115,111,99,105,97,108,32,97,110,100,32
-,112,111,108,105,116,105,99,97,108,116,104,97,116,32,119,111,117,108,100,32,111,
-116,104,101,114,119,105,115,101,112,101,114,112,101,110,100,105,99,117,108,97,
-114,32,116,111,32,116,104,101,115,116,121,108,101,32,116,121,112,101,61,34,116,
-101,120,116,47,99,115,115,116,121,112,101,61,34,115,117,98,109,105,116,34,32,110
-,97,109,101,61,34,102,97,109,105,108,105,101,115,32,114,101,115,105,100,105,110,
-103,32,105,110,100,101,118,101,108,111,112,105,110,103,32,99,111,117,110,116,114
-,105,101,115,99,111,109,112,117,116,101,114,32,112,114,111,103,114,97,109,109,
-105,110,103,101,99,111,110,111,109,105,99,32,100,101,118,101,108,111,112,109,101
-,110,116,100,101,116,101,114,109,105,110,97,116,105,111,110,32,111,102,32,116,
-104,101,102,111,114,32,109,111,114,101,32,105,110,102,111,114,109,97,116,105,111
-,110,111,110,32,115,101,118,101,114,97,108,32,111,99,99,97,115,105,111,110,115,
-112,111,114,116,117,103,117,195,170,115,32,40,69,117,114,111,112,101,117,41,208,
-163,208,186,209,128,208,176,209,151,208,189,209,129,209,140,208,186,208,176,209,
-131,208,186,209,128,208,176,209,151,208,189,209,129,209,140,208,186,208,176,208,
-160,208,190,209,129,209,129,208,184,208,185,209,129,208,186,208,190,208,185,208,
-188,208,176,209,130,208,181,209,128,208,184,208,176,208,187,208,190,208,178,208,
-184,208,189,209,132,208,190,209,128,208,188,208,176,209,134,208,184,208,184,209,
-131,208,191,209,128,208,176,208,178,208,187,208,181,208,189,208,184,209,143,208,
-189,208,181,208,190,208,177,209,133,208,190,208,180,208,184,208,188,208,190,208,
-184,208,189,209,132,208,190,209,128,208,188,208,176,209,134,208,184,209,143,208,
-152,208,189,209,132,208,190,209,128,208,188,208,176,209,134,208,184,209,143,208,
-160,208,181,209,129,208,191,209,131,208,177,208,187,208,184,208,186,208,184,208,
-186,208,190,208,187,208,184,209,135,208,181,209,129,209,130,208,178,208,190,208,
-184,208,189,209,132,208,190,209,128,208,188,208,176,209,134,208,184,209,142,209,
-130,208,181,209,128,209,128,208,184,209,130,208,190,209,128,208,184,208,184,208,
-180,208,190,209,129,209,130,208,176,209,130,208,190,209,135,208,189,208,190,216,
-167,217,132,217,133,216,170,217,136,216,167,216,172,216,175,217,136,217,134,216,
-167,217,132,216,167,216,180,216,170,216,177,216,167,217,131,216,167,216,170,216,
-167,217,132,216,167,217,130,216,170,216,177,216,167,216,173,216,167,216,170,104,
-116,109,108,59,32,99,104,97,114,115,101,116,61,85,84,70,45,56,34,32,115,101,116,
-84,105,109,101,111,117,116,40,102,117,110,99,116,105,111,110,40,41,100,105,115,
-112,108,97,121,58,105,110,108,105,110,101,45,98,108,111,99,107,59,60,105,110,112
-,117,116,32,116,121,112,101,61,34,115,117,98,109,105,116,34,32,116,121,112,101,
-32,61,32,39,116,101,120,116,47,106,97,118,97,115,99,114,105,60,105,109,103,32,
-115,114,99,61,34,104,116,116,112,58,47,47,119,119,119,46,34,32,34,104,116,116,
-112,58,47,47,119,119,119,46,119,51,46,111,114,103,47,115,104,111,114,116,99,117,
-116,32,105,99,111,110,34,32,104,114,101,102,61,34,34,32,97,117,116,111,99,111,
-109,112,108,101,116,101,61,34,111,102,102,34,32,60,47,97,62,60,47,100,105,118,62
-,60,100,105,118,32,99,108,97,115,115,61,60,47,97,62,60,47,108,105,62,10,60,108,
-105,32,99,108,97,115,115,61,34,99,115,115,34,32,116,121,112,101,61,34,116,101,
-120,116,47,99,115,115,34,32,60,102,111,114,109,32,97,99,116,105,111,110,61,34,
-104,116,116,112,58,47,47,120,116,47,99,115,115,34,32,104,114,101,102,61,34,104,
-116,116,112,58,47,47,108,105,110,107,32,114,101,108,61,34,97,108,116,101,114,110
-,97,116,101,34,32,13,10,60,115,99,114,105,112,116,32,116,121,112,101,61,34,116,
-101,120,116,47,32,111,110,99,108,105,99,107,61,34,106,97,118,97,115,99,114,105,
-112,116,58,40,110,101,119,32,68,97,116,101,41,46,103,101,116,84,105,109,101,40,
-41,125,104,101,105,103,104,116,61,34,49,34,32,119,105,100,116,104,61,34,49,34,32
-,80,101,111,112,108,101,39,115,32,82,101,112,117,98,108,105,99,32,111,102,32,32,
-60,97,32,104,114,101,102,61,34,104,116,116,112,58,47,47,119,119,119,46,116,101,
-120,116,45,100,101,99,111,114,97,116,105,111,110,58,117,110,100,101,114,116,104,
-101,32,98,101,103,105,110,110,105,110,103,32,111,102,32,116,104,101,32,60,47,100
-,105,118,62,10,60,47,100,105,118,62,10,60,47,100,105,118,62,10,101,115,116,97,98
-,108,105,115,104,109,101,110,116,32,111,102,32,116,104,101,32,60,47,100,105,118,
-62,60,47,100,105,118,62,60,47,100,105,118,62,60,47,100,35,118,105,101,119,112,
-111,114,116,123,109,105,110,45,104,101,105,103,104,116,58,10,60,115,99,114,105,
-112,116,32,115,114,99,61,34,104,116,116,112,58,47,47,111,112,116,105,111,110,62,
-60,111,112,116,105,111,110,32,118,97,108,117,101,61,111,102,116,101,110,32,114,
-101,102,101,114,114,101,100,32,116,111,32,97,115,32,47,111,112,116,105,111,110,
-62,10,60,111,112,116,105,111,110,32,118,97,108,117,60,33,68,79,67,84,89,80,69,32
-,104,116,109,108,62,10,60,33,45,45,91,73,110,116,101,114,110,97,116,105,111,110,
-97,108,32,65,105,114,112,111,114,116,62,10,60,97,32,104,114,101,102,61,34,104,
-116,116,112,58,47,47,119,119,119,60,47,97,62,60,97,32,104,114,101,102,61,34,104,
-116,116,112,58,47,47,119,224,184,160,224,184,178,224,184,169,224,184,178,224,185
-,132,224,184,151,224,184,162,225,131,165,225,131,144,225,131,160,225,131,151,225
-,131,163,225,131,154,225,131,152,230,173,163,233,171,148,228,184,173,230,150,135
-,32,40,231,185,129,233,171,148,41,224,164,168,224,164,191,224,164,176,224,165,
-141,224,164,166,224,165,135,224,164,182,224,164,161,224,164,190,224,164,137,224,
-164,168,224,164,178,224,165,139,224,164,161,224,164,149,224,165,141,224,164,183,
-224,165,135,224,164,164,224,165,141,224,164,176,224,164,156,224,164,190,224,164,
-168,224,164,149,224,164,190,224,164,176,224,165,128,224,164,184,224,164,130,224,
-164,172,224,164,130,224,164,167,224,164,191,224,164,164,224,164,184,224,165,141,
-224,164,165,224,164,190,224,164,170,224,164,168,224,164,190,224,164,184,224,165,
-141,224,164,181,224,165,128,224,164,149,224,164,190,224,164,176,224,164,184,224,
-164,130,224,164,184,224,165,141,224,164,149,224,164,176,224,164,163,224,164,184,
-224,164,190,224,164,174,224,164,151,224,165,141,224,164,176,224,165,128,224,164,
-154,224,164,191,224,164,159,224,165,141,224,164,160,224,165,139,224,164,130,224,
-164,181,224,164,191,224,164,156,224,165,141,224,164,158,224,164,190,224,164,168,
-224,164,133,224,164,174,224,165,135,224,164,176,224,164,191,224,164,149,224,164,
-190,224,164,181,224,164,191,224,164,173,224,164,191,224,164,168,224,165,141,224,
-164,168,224,164,151,224,164,190,224,164,161,224,164,191,224,164,175,224,164,190,
-224,164,129,224,164,149,224,165,141,224,164,175,224,165,139,224,164,130,224,164,
-149,224,164,191,224,164,184,224,165,129,224,164,176,224,164,149,224,165,141,224,
-164,183,224,164,190,224,164,170,224,164,185,224,165,129,224,164,129,224,164,154,
-224,164,164,224,165,128,224,164,170,224,165,141,224,164,176,224,164,172,224,164,
-130,224,164,167,224,164,168,224,164,159,224,164,191,224,164,170,224,165,141,224,
-164,170,224,164,163,224,165,128,224,164,149,224,165,141,224,164,176,224,164,191,
-224,164,149,224,165,135,224,164,159,224,164,170,224,165,141,224,164,176,224,164,
-190,224,164,176,224,164,130,224,164,173,224,164,170,224,165,141,224,164,176,224,
-164,190,224,164,170,224,165,141,224,164,164,224,164,174,224,164,190,224,164,178,
-224,164,191,224,164,149,224,165,139,224,164,130,224,164,176,224,164,171,224,164,
-188,224,165,141,224,164,164,224,164,190,224,164,176,224,164,168,224,164,191,224,
-164,176,224,165,141,224,164,174,224,164,190,224,164,163,224,164,178,224,164,191,
-224,164,174,224,164,191,224,164,159,224,165,135,224,164,161,100,101,115,99,114,
-105,112,116,105,111,110,34,32,99,111,110,116,101,110,116,61,34,100,111,99,117,
-109,101,110,116,46,108,111,99,97,116,105,111,110,46,112,114,111,116,46,103,101,
-116,69,108,101,109,101,110,116,115,66,121,84,97,103,78,97,109,101,40,60,33,68,79
-,67,84,89,80,69,32,104,116,109,108,62,10,60,104,116,109,108,32,60,109,101,116,97
-,32,99,104,97,114,115,101,116,61,34,117,116,102,45,56,34,62,58,117,114,108,34,32
-,99,111,110,116,101,110,116,61,34,104,116,116,112,58,47,47,46,99,115,115,34,32,
-114,101,108,61,34,115,116,121,108,101,115,104,101,101,116,34,115,116,121,108,101
-,32,116,121,112,101,61,34,116,101,120,116,47,99,115,115,34,62,116,121,112,101,61
-,34,116,101,120,116,47,99,115,115,34,32,104,114,101,102,61,34,119,51,46,111,114,
-103,47,49,57,57,57,47,120,104,116,109,108,34,32,120,109,108,116,121,112,101,61,
-34,116,101,120,116,47,106,97,118,97,115,99,114,105,112,116,34,32,109,101,116,104
-,111,100,61,34,103,101,116,34,32,97,99,116,105,111,110,61,34,108,105,110,107,32,
-114,101,108,61,34,115,116,121,108,101,115,104,101,101,116,34,32,32,61,32,100,111
-,99,117,109,101,110,116,46,103,101,116,69,108,101,109,101,110,116,116,121,112,
-101,61,34,105,109,97,103,101,47,120,45,105,99,111,110,34,32,47,62,99,101,108,108
-,112,97,100,100,105,110,103,61,34,48,34,32,99,101,108,108,115,112,46,99,115,115,
-34,32,116,121,112,101,61,34,116,101,120,116,47,99,115,115,34,32,60,47,97,62,60,
-47,108,105,62,60,108,105,62,60,97,32,104,114,101,102,61,34,34,32,119,105,100,116
-,104,61,34,49,34,32,104,101,105,103,104,116,61,34,49,34,34,62,60,97,32,104,114,
-101,102,61,34,104,116,116,112,58,47,47,119,119,119,46,115,116,121,108,101,61,34,
-100,105,115,112,108,97,121,58,110,111,110,101,59,34,62,97,108,116,101,114,110,97
-,116,101,34,32,116,121,112,101,61,34,97,112,112,108,105,45,47,47,87,51,67,47,47,
-68,84,68,32,88,72,84,77,76,32,49,46,48,32,101,108,108,115,112,97,99,105,110,103,
-61,34,48,34,32,99,101,108,108,112,97,100,32,116,121,112,101,61,34,104,105,100,
-100,101,110,34,32,118,97,108,117,101,61,34,47,97,62,38,110,98,115,112,59,60,115,
-112,97,110,32,114,111,108,101,61,34,115,10,60,105,110,112,117,116,32,116,121,112
-,101,61,34,104,105,100,100,101,110,34,32,108,97,110,103,117,97,103,101,61,34,74,
-97,118,97,83,99,114,105,112,116,34,32,32,100,111,99,117,109,101,110,116,46,103,
-101,116,69,108,101,109,101,110,116,115,66,103,61,34,48,34,32,99,101,108,108,115,
-112,97,99,105,110,103,61,34,48,34,32,121,112,101,61,34,116,101,120,116,47,99,115
-,115,34,32,109,101,100,105,97,61,34,116,121,112,101,61,39,116,101,120,116,47,106
-,97,118,97,115,99,114,105,112,116,39,119,105,116,104,32,116,104,101,32,101,120,
-99,101,112,116,105,111,110,32,111,102,32,121,112,101,61,34,116,101,120,116,47,99
-,115,115,34,32,114,101,108,61,34,115,116,32,104,101,105,103,104,116,61,34,49,34,
-32,119,105,100,116,104,61,34,49,34,32,61,39,43,101,110,99,111,100,101,85,82,73,
-67,111,109,112,111,110,101,110,116,40,60,108,105,110,107,32,114,101,108,61,34,97
-,108,116,101,114,110,97,116,101,34,32,10,98,111,100,121,44,32,116,114,44,32,105,
-110,112,117,116,44,32,116,101,120,116,109,101,116,97,32,110,97,109,101,61,34,114
-,111,98,111,116,115,34,32,99,111,110,109,101,116,104,111,100,61,34,112,111,115,
-116,34,32,97,99,116,105,111,110,61,34,62,10,60,97,32,104,114,101,102,61,34,104,
-116,116,112,58,47,47,119,119,119,46,99,115,115,34,32,114,101,108,61,34,115,116,
-121,108,101,115,104,101,101,116,34,32,60,47,100,105,118,62,60,47,100,105,118,62,
-60,100,105,118,32,99,108,97,115,115,108,97,110,103,117,97,103,101,61,34,106,97,
-118,97,115,99,114,105,112,116,34,62,97,114,105,97,45,104,105,100,100,101,110,61,
-34,116,114,117,101,34,62,194,183,60,114,105,112,116,34,32,116,121,112,101,61,34,
-116,101,120,116,47,106,97,118,97,115,108,61,48,59,125,41,40,41,59,10,40,102,117,
-110,99,116,105,111,110,40,41,123,98,97,99,107,103,114,111,117,110,100,45,105,109
-,97,103,101,58,32,117,114,108,40,47,97,62,60,47,108,105,62,60,108,105,62,60,97,
-32,104,114,101,102,61,34,104,9,9,60,108,105,62,60,97,32,104,114,101,102,61,34,
-104,116,116,112,58,47,47,97,116,111,114,34,32,97,114,105,97,45,104,105,100,100,
-101,110,61,34,116,114,117,62,32,60,97,32,104,114,101,102,61,34,104,116,116,112,
-58,47,47,119,119,119,46,108,97,110,103,117,97,103,101,61,34,106,97,118,97,115,99
-,114,105,112,116,34,32,47,111,112,116,105,111,110,62,10,60,111,112,116,105,111,
-110,32,118,97,108,117,101,47,100,105,118,62,60,47,100,105,118,62,60,100,105,118,
-32,99,108,97,115,115,61,114,97,116,111,114,34,32,97,114,105,97,45,104,105,100,
-100,101,110,61,34,116,114,101,61,40,110,101,119,32,68,97,116,101,41,46,103,101,
-116,84,105,109,101,40,41,112,111,114,116,117,103,117,195,170,115,32,40,100,111,
-32,66,114,97,115,105,108,41,208,190,209,128,208,179,208,176,208,189,208,184,208,
-183,208,176,209,134,208,184,208,184,208,178,208,190,208,183,208,188,208,190,208,
-182,208,189,208,190,209,129,209,130,209,140,208,190,208,177,209,128,208,176,208,
-183,208,190,208,178,208,176,208,189,208,184,209,143,209,128,208,181,208,179,208,
-184,209,129,209,130,209,128,208,176,209,134,208,184,208,184,208,178,208,190,208,
-183,208,188,208,190,208,182,208,189,208,190,209,129,209,130,208,184,208,190,208,
-177,209,143,208,183,208,176,209,130,208,181,208,187,209,140,208,189,208,176,60,
-33,68,79,67,84,89,80,69,32,104,116,109,108,32,80,85,66,76,73,67,32,34,110,116,45
-,84,121,112,101,34,32,99,111,110,116,101,110,116,61,34,116,101,120,116,47,60,109
-,101,116,97,32,104,116,116,112,45,101,113,117,105,118,61,34,67,111,110,116,101,
-114,97,110,115,105,116,105,111,110,97,108,47,47,69,78,34,32,34,104,116,116,112,
-58,60,104,116,109,108,32,120,109,108,110,115,61,34,104,116,116,112,58,47,47,119,
-119,119,45,47,47,87,51,67,47,47,68,84,68,32,88,72,84,77,76,32,49,46,48,32,84,68,
-84,68,47,120,104,116,109,108,49,45,116,114,97,110,115,105,116,105,111,110,97,108
-,47,47,119,119,119,46,119,51,46,111,114,103,47,84,82,47,120,104,116,109,108,49,
-47,112,101,32,61,32,39,116,101,120,116,47,106,97,118,97,115,99,114,105,112,116,
-39,59,60,109,101,116,97,32,110,97,109,101,61,34,100,101,115,99,114,105,112,116,
-105,111,110,112,97,114,101,110,116,78,111,100,101,46,105,110,115,101,114,116,66,
-101,102,111,114,101,60,105,110,112,117,116,32,116,121,112,101,61,34,104,105,100,
-100,101,110,34,32,110,97,106,115,34,32,116,121,112,101,61,34,116,101,120,116,47,
-106,97,118,97,115,99,114,105,40,100,111,99,117,109,101,110,116,41,46,114,101,97,
-100,121,40,102,117,110,99,116,105,115,99,114,105,112,116,32,116,121,112,101,61,
-34,116,101,120,116,47,106,97,118,97,115,105,109,97,103,101,34,32,99,111,110,116,
-101,110,116,61,34,104,116,116,112,58,47,47,85,65,45,67,111,109,112,97,116,105,98
-,108,101,34,32,99,111,110,116,101,110,116,61,116,109,108,59,32,99,104,97,114,115
-,101,116,61,117,116,102,45,56,34,32,47,62,10,108,105,110,107,32,114,101,108,61,
-34,115,104,111,114,116,99,117,116,32,105,99,111,110,60,108,105,110,107,32,114,
-101,108,61,34,115,116,121,108,101,115,104,101,101,116,34,32,60,47,115,99,114,105
-,112,116,62,10,60,115,99,114,105,112,116,32,116,121,112,101,61,61,32,100,111,99,
-117,109,101,110,116,46,99,114,101,97,116,101,69,108,101,109,101,110,60,97,32,116
-,97,114,103,101,116,61,34,95,98,108,97,110,107,34,32,104,114,101,102,61,32,100,
-111,99,117,109,101,110,116,46,103,101,116,69,108,101,109,101,110,116,115,66,105,
-110,112,117,116,32,116,121,112,101,61,34,116,101,120,116,34,32,110,97,109,101,61
-,97,46,116,121,112,101,32,61,32,39,116,101,120,116,47,106,97,118,97,115,99,114,
-105,110,112,117,116,32,116,121,112,101,61,34,104,105,100,100,101,110,34,32,110,
-97,109,101,104,116,109,108,59,32,99,104,97,114,115,101,116,61,117,116,102,45,56,
-34,32,47,62,100,116,100,34,62,10,60,104,116,109,108,32,120,109,108,110,115,61,34
-,104,116,116,112,45,47,47,87,51,67,47,47,68,84,68,32,72,84,77,76,32,52,46,48,49,
-32,84,101,110,116,115,66,121,84,97,103,78,97,109,101,40,39,115,99,114,105,112,
-116,39,41,105,110,112,117,116,32,116,121,112,101,61,34,104,105,100,100,101,110,
-34,32,110,97,109,60,115,99,114,105,112,116,32,116,121,112,101,61,34,116,101,120,
-116,47,106,97,118,97,115,34,32,115,116,121,108,101,61,34,100,105,115,112,108,97,
-121,58,110,111,110,101,59,34,62,100,111,99,117,109,101,110,116,46,103,101,116,69
-,108,101,109,101,110,116,66,121,73,100,40,61,100,111,99,117,109,101,110,116,46,
-99,114,101,97,116,101,69,108,101,109,101,110,116,40,39,32,116,121,112,101,61,39,
-116,101,120,116,47,106,97,118,97,115,99,114,105,112,116,39,105,110,112,117,116,
-32,116,121,112,101,61,34,116,101,120,116,34,32,110,97,109,101,61,34,100,46,103,
-101,116,69,108,101,109,101,110,116,115,66,121,84,97,103,78,97,109,101,40,115,110
-,105,99,97,108,34,32,104,114,101,102,61,34,104,116,116,112,58,47,47,119,119,119,
-46,67,47,47,68,84,68,32,72,84,77,76,32,52,46,48,49,32,84,114,97,110,115,105,116,
-60,115,116,121,108,101,32,116,121,112,101,61,34,116,101,120,116,47,99,115,115,34
-,62,10,10,60,115,116,121,108,101,32,116,121,112,101,61,34,116,101,120,116,47,99,
-115,115,34,62,105,111,110,97,108,46,100,116,100,34,62,10,60,104,116,109,108,32,
-120,109,108,110,115,61,104,116,116,112,45,101,113,117,105,118,61,34,67,111,110,
-116,101,110,116,45,84,121,112,101,100,105,110,103,61,34,48,34,32,99,101,108,108,
-115,112,97,99,105,110,103,61,34,48,34,104,116,109,108,59,32,99,104,97,114,115,
-101,116,61,117,116,102,45,56,34,32,47,62,10,32,115,116,121,108,101,61,34,100,105
-,115,112,108,97,121,58,110,111,110,101,59,34,62,60,60,108,105,62,60,97,32,104,
-114,101,102,61,34,104,116,116,112,58,47,47,119,119,119,46,32,116,121,112,101,61,
-39,116,101,120,116,47,106,97,118,97,115,99,114,105,112,116,39,62,208,180,208,181
-,209,143,209,130,208,181,208,187,209,140,208,189,208,190,209,129,209,130,208,184
-,209,129,208,190,208,190,209,130,208,178,208,181,209,130,209,129,209,130,208,178
-,208,184,208,184,208,191,209,128,208,190,208,184,208,183,208,178,208,190,208,180
-,209,129,209,130,208,178,208,176,208,177,208,181,208,183,208,190,208,191,208,176
-,209,129,208,189,208,190,209,129,209,130,208,184,224,164,170,224,165,129,224,164
-,184,224,165,141,224,164,164,224,164,191,224,164,149,224,164,190,224,164,149,224
-,164,190,224,164,130,224,164,151,224,165,141,224,164,176,224,165,135,224,164,184
-,224,164,137,224,164,168,224,165,141,224,164,185,224,165,139,224,164,130,224,164
-,168,224,165,135,224,164,181,224,164,191,224,164,167,224,164,190,224,164,168,224
-,164,184,224,164,173,224,164,190,224,164,171,224,164,191,224,164,149,224,165,141
-,224,164,184,224,164,191,224,164,130,224,164,151,224,164,184,224,165,129,224,164
-,176,224,164,149,224,165,141,224,164,183,224,164,191,224,164,164,224,164,149,224
-,165,137,224,164,170,224,165,128,224,164,176,224,164,190,224,164,135,224,164,159
-,224,164,181,224,164,191,224,164,156,224,165,141,224,164,158,224,164,190,224,164
-,170,224,164,168,224,164,149,224,164,190,224,164,176,224,165,141,224,164,176,224
-,164,181,224,164,190,224,164,136,224,164,184,224,164,149,224,165,141,224,164,176
-,224,164,191,224,164,175,224,164,164,224,164,190
-}
-;
-#endif /* !BROTLI_EXTERNAL_DICTIONARY_DATA */
-
-static BrotliDictionary kBrotliDictionary = {
- /* size_bits_by_length */
- {
- 0, 0, 0, 0, 10, 10, 11, 11,
- 10, 10, 10, 10, 10, 9, 9, 8,
- 7, 7, 8, 7, 7, 6, 6, 5,
- 5, 0, 0, 0, 0, 0, 0, 0
- },
-
- /* offsets_by_length */
- {
- 0, 0, 0, 0, 0, 4096, 9216, 21504,
- 35840, 44032, 53248, 63488, 74752, 87040, 93696, 100864,
- 104704, 106752, 108928, 113536, 115968, 118528, 119872, 121280,
- 122016, 122784, 122784, 122784, 122784, 122784, 122784, 122784
- },
-
- /* data_size == sizeof(kBrotliDictionaryData) */
- 122784,
-
- /* data */
-#if defined(BROTLI_EXTERNAL_DICTIONARY_DATA)
- NULL
-#else
- kBrotliDictionaryData
-#endif
-};
-
-const BrotliDictionary* BrotliGetDictionary() {
- return &kBrotliDictionary;
-}
-
-void BrotliSetDictionaryData(const uint8_t* data) {
- if (!!data && !kBrotliDictionary.data) {
- kBrotliDictionary.data = data;
- }
-}
-
-#if defined(__cplusplus) || defined(c_plusplus)
-} /* extern "C" */
-#endif
diff --git a/BaseTools/Source/C/BrotliCompress/common/transform.c b/BaseTools/Source/C/BrotliCompress/common/transform.c
deleted file mode 100644
index aaac74b526d3..000000000000
--- a/BaseTools/Source/C/BrotliCompress/common/transform.c
+++ /dev/null
@@ -1,235 +0,0 @@
-/* Copyright 2013 Google Inc. All Rights Reserved.
-
- Distributed under MIT license.
- See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
-*/
-
-#include "./transform.h"
-
-#if defined(__cplusplus) || defined(c_plusplus)
-extern "C" {
-#endif
-
-/* RFC 7932 transforms string data */
-static const char kPrefixSuffix[217] =
- "\1 \2, \10 of the \4 of \2s \1.\5 and \4 "
-/* 0x _0 _2 __5 _E _3 _6 _8 _E */
- "in \1\"\4 to \2\">\1\n\2. \1]\5 for \3 a \6 "
-/* 2x _3_ _5 _A_ _D_ _F _2 _4 _A _E */
- "that \1\'\6 with \6 from \4 by \1(\6. T"
-/* 4x _5_ _7 _E _5 _A _C */
- "he \4 on \4 as \4 is \4ing \2\n\t\1:\3ed "
-/* 6x _3 _8 _D _2 _7_ _ _A _C */
- "\2=\"\4 at \3ly \1,\2=\'\5.com/\7. This \5"
-/* 8x _0 _ _3 _8 _C _E _ _1 _7 _F */
- " not \3er \3al \4ful \4ive \5less \4es"
-/* Ax _5 _9 _D _2 _7 _D */
- "t \4ize \2\xc2\xa0\4ous \5 the \2e \0";
-/* Cx _2 _7___ ___ _A _F _5 _8 */
-
-static const uint16_t kPrefixSuffixMap[50] = {
- 0x00, 0x02, 0x05, 0x0E, 0x13, 0x16, 0x18, 0x1E, 0x23, 0x25,
- 0x2A, 0x2D, 0x2F, 0x32, 0x34, 0x3A, 0x3E, 0x45, 0x47, 0x4E,
- 0x55, 0x5A, 0x5C, 0x63, 0x68, 0x6D, 0x72, 0x77, 0x7A, 0x7C,
- 0x80, 0x83, 0x88, 0x8C, 0x8E, 0x91, 0x97, 0x9F, 0xA5, 0xA9,
- 0xAD, 0xB2, 0xB7, 0xBD, 0xC2, 0xC7, 0xCA, 0xCF, 0xD5, 0xD8
-};
-
-/* RFC 7932 transforms */
-static const uint8_t kTransformsData[] = {
- 49, BROTLI_TRANSFORM_IDENTITY, 49,
- 49, BROTLI_TRANSFORM_IDENTITY, 0,
- 0, BROTLI_TRANSFORM_IDENTITY, 0,
- 49, BROTLI_TRANSFORM_OMIT_FIRST_1, 49,
- 49, BROTLI_TRANSFORM_UPPERCASE_FIRST, 0,
- 49, BROTLI_TRANSFORM_IDENTITY, 47,
- 0, BROTLI_TRANSFORM_IDENTITY, 49,
- 4, BROTLI_TRANSFORM_IDENTITY, 0,
- 49, BROTLI_TRANSFORM_IDENTITY, 3,
- 49, BROTLI_TRANSFORM_UPPERCASE_FIRST, 49,
- 49, BROTLI_TRANSFORM_IDENTITY, 6,
- 49, BROTLI_TRANSFORM_OMIT_FIRST_2, 49,
- 49, BROTLI_TRANSFORM_OMIT_LAST_1, 49,
- 1, BROTLI_TRANSFORM_IDENTITY, 0,
- 49, BROTLI_TRANSFORM_IDENTITY, 1,
- 0, BROTLI_TRANSFORM_UPPERCASE_FIRST, 0,
- 49, BROTLI_TRANSFORM_IDENTITY, 7,
- 49, BROTLI_TRANSFORM_IDENTITY, 9,
- 48, BROTLI_TRANSFORM_IDENTITY, 0,
- 49, BROTLI_TRANSFORM_IDENTITY, 8,
- 49, BROTLI_TRANSFORM_IDENTITY, 5,
- 49, BROTLI_TRANSFORM_IDENTITY, 10,
- 49, BROTLI_TRANSFORM_IDENTITY, 11,
- 49, BROTLI_TRANSFORM_OMIT_LAST_3, 49,
- 49, BROTLI_TRANSFORM_IDENTITY, 13,
- 49, BROTLI_TRANSFORM_IDENTITY, 14,
- 49, BROTLI_TRANSFORM_OMIT_FIRST_3, 49,
- 49, BROTLI_TRANSFORM_OMIT_LAST_2, 49,
- 49, BROTLI_TRANSFORM_IDENTITY, 15,
- 49, BROTLI_TRANSFORM_IDENTITY, 16,
- 0, BROTLI_TRANSFORM_UPPERCASE_FIRST, 49,
- 49, BROTLI_TRANSFORM_IDENTITY, 12,
- 5, BROTLI_TRANSFORM_IDENTITY, 49,
- 0, BROTLI_TRANSFORM_IDENTITY, 1,
- 49, BROTLI_TRANSFORM_OMIT_FIRST_4, 49,
- 49, BROTLI_TRANSFORM_IDENTITY, 18,
- 49, BROTLI_TRANSFORM_IDENTITY, 17,
- 49, BROTLI_TRANSFORM_IDENTITY, 19,
- 49, BROTLI_TRANSFORM_IDENTITY, 20,
- 49, BROTLI_TRANSFORM_OMIT_FIRST_5, 49,
- 49, BROTLI_TRANSFORM_OMIT_FIRST_6, 49,
- 47, BROTLI_TRANSFORM_IDENTITY, 49,
- 49, BROTLI_TRANSFORM_OMIT_LAST_4, 49,
- 49, BROTLI_TRANSFORM_IDENTITY, 22,
- 49, BROTLI_TRANSFORM_UPPERCASE_ALL, 49,
- 49, BROTLI_TRANSFORM_IDENTITY, 23,
- 49, BROTLI_TRANSFORM_IDENTITY, 24,
- 49, BROTLI_TRANSFORM_IDENTITY, 25,
- 49, BROTLI_TRANSFORM_OMIT_LAST_7, 49,
- 49, BROTLI_TRANSFORM_OMIT_LAST_1, 26,
- 49, BROTLI_TRANSFORM_IDENTITY, 27,
- 49, BROTLI_TRANSFORM_IDENTITY, 28,
- 0, BROTLI_TRANSFORM_IDENTITY, 12,
- 49, BROTLI_TRANSFORM_IDENTITY, 29,
- 49, BROTLI_TRANSFORM_OMIT_FIRST_9, 49,
- 49, BROTLI_TRANSFORM_OMIT_FIRST_7, 49,
- 49, BROTLI_TRANSFORM_OMIT_LAST_6, 49,
- 49, BROTLI_TRANSFORM_IDENTITY, 21,
- 49, BROTLI_TRANSFORM_UPPERCASE_FIRST, 1,
- 49, BROTLI_TRANSFORM_OMIT_LAST_8, 49,
- 49, BROTLI_TRANSFORM_IDENTITY, 31,
- 49, BROTLI_TRANSFORM_IDENTITY, 32,
- 47, BROTLI_TRANSFORM_IDENTITY, 3,
- 49, BROTLI_TRANSFORM_OMIT_LAST_5, 49,
- 49, BROTLI_TRANSFORM_OMIT_LAST_9, 49,
- 0, BROTLI_TRANSFORM_UPPERCASE_FIRST, 1,
- 49, BROTLI_TRANSFORM_UPPERCASE_FIRST, 8,
- 5, BROTLI_TRANSFORM_IDENTITY, 21,
- 49, BROTLI_TRANSFORM_UPPERCASE_ALL, 0,
- 49, BROTLI_TRANSFORM_UPPERCASE_FIRST, 10,
- 49, BROTLI_TRANSFORM_IDENTITY, 30,
- 0, BROTLI_TRANSFORM_IDENTITY, 5,
- 35, BROTLI_TRANSFORM_IDENTITY, 49,
- 47, BROTLI_TRANSFORM_IDENTITY, 2,
- 49, BROTLI_TRANSFORM_UPPERCASE_FIRST, 17,
- 49, BROTLI_TRANSFORM_IDENTITY, 36,
- 49, BROTLI_TRANSFORM_IDENTITY, 33,
- 5, BROTLI_TRANSFORM_IDENTITY, 0,
- 49, BROTLI_TRANSFORM_UPPERCASE_FIRST, 21,
- 49, BROTLI_TRANSFORM_UPPERCASE_FIRST, 5,
- 49, BROTLI_TRANSFORM_IDENTITY, 37,
- 0, BROTLI_TRANSFORM_IDENTITY, 30,
- 49, BROTLI_TRANSFORM_IDENTITY, 38,
- 0, BROTLI_TRANSFORM_UPPERCASE_ALL, 0,
- 49, BROTLI_TRANSFORM_IDENTITY, 39,
- 0, BROTLI_TRANSFORM_UPPERCASE_ALL, 49,
- 49, BROTLI_TRANSFORM_IDENTITY, 34,
- 49, BROTLI_TRANSFORM_UPPERCASE_ALL, 8,
- 49, BROTLI_TRANSFORM_UPPERCASE_FIRST, 12,
- 0, BROTLI_TRANSFORM_IDENTITY, 21,
- 49, BROTLI_TRANSFORM_IDENTITY, 40,
- 0, BROTLI_TRANSFORM_UPPERCASE_FIRST, 12,
- 49, BROTLI_TRANSFORM_IDENTITY, 41,
- 49, BROTLI_TRANSFORM_IDENTITY, 42,
- 49, BROTLI_TRANSFORM_UPPERCASE_ALL, 17,
- 49, BROTLI_TRANSFORM_IDENTITY, 43,
- 0, BROTLI_TRANSFORM_UPPERCASE_FIRST, 5,
- 49, BROTLI_TRANSFORM_UPPERCASE_ALL, 10,
- 0, BROTLI_TRANSFORM_IDENTITY, 34,
- 49, BROTLI_TRANSFORM_UPPERCASE_FIRST, 33,
- 49, BROTLI_TRANSFORM_IDENTITY, 44,
- 49, BROTLI_TRANSFORM_UPPERCASE_ALL, 5,
- 45, BROTLI_TRANSFORM_IDENTITY, 49,
- 0, BROTLI_TRANSFORM_IDENTITY, 33,
- 49, BROTLI_TRANSFORM_UPPERCASE_FIRST, 30,
- 49, BROTLI_TRANSFORM_UPPERCASE_ALL, 30,
- 49, BROTLI_TRANSFORM_IDENTITY, 46,
- 49, BROTLI_TRANSFORM_UPPERCASE_ALL, 1,
- 49, BROTLI_TRANSFORM_UPPERCASE_FIRST, 34,
- 0, BROTLI_TRANSFORM_UPPERCASE_FIRST, 33,
- 0, BROTLI_TRANSFORM_UPPERCASE_ALL, 30,
- 0, BROTLI_TRANSFORM_UPPERCASE_ALL, 1,
- 49, BROTLI_TRANSFORM_UPPERCASE_ALL, 33,
- 49, BROTLI_TRANSFORM_UPPERCASE_ALL, 21,
- 49, BROTLI_TRANSFORM_UPPERCASE_ALL, 12,
- 0, BROTLI_TRANSFORM_UPPERCASE_ALL, 5,
- 49, BROTLI_TRANSFORM_UPPERCASE_ALL, 34,
- 0, BROTLI_TRANSFORM_UPPERCASE_ALL, 12,
- 0, BROTLI_TRANSFORM_UPPERCASE_FIRST, 30,
- 0, BROTLI_TRANSFORM_UPPERCASE_ALL, 34,
- 0, BROTLI_TRANSFORM_UPPERCASE_FIRST, 34,
-};
-
-static BrotliTransforms kBrotliTransforms = {
- sizeof(kPrefixSuffix),
- (const uint8_t*)kPrefixSuffix,
- kPrefixSuffixMap,
- sizeof(kTransformsData) / (3 * sizeof(kTransformsData[0])),
- kTransformsData,
- {0, 12, 27, 23, 42, 63, 56, 48, 59, 64}
-};
-
-const BrotliTransforms* BrotliGetTransforms(void) {
- return &kBrotliTransforms;
-}
-
-static int ToUpperCase(uint8_t* p) {
- if (p[0] < 0xC0) {
- if (p[0] >= 'a' && p[0] <= 'z') {
- p[0] ^= 32;
- }
- return 1;
- }
- /* An overly simplified uppercasing model for UTF-8. */
- if (p[0] < 0xE0) {
- p[1] ^= 32;
- return 2;
- }
- /* An arbitrary transform for three byte characters. */
- p[2] ^= 5;
- return 3;
-}
-
-int BrotliTransformDictionaryWord(uint8_t* dst, const uint8_t* word, int len,
- const BrotliTransforms* transforms, int transfom_idx) {
- int idx = 0;
- const uint8_t* prefix = BROTLI_TRANSFORM_PREFIX(transforms, transfom_idx);
- uint8_t type = BROTLI_TRANSFORM_TYPE(transforms, transfom_idx);
- const uint8_t* suffix = BROTLI_TRANSFORM_SUFFIX(transforms, transfom_idx);
- {
- int prefix_len = *prefix++;
- while (prefix_len--) { dst[idx++] = *prefix++; }
- }
- {
- const int t = type;
- int i = 0;
- if (t <= BROTLI_TRANSFORM_OMIT_LAST_9) {
- len -= t;
- } else if (t >= BROTLI_TRANSFORM_OMIT_FIRST_1
- && t <= BROTLI_TRANSFORM_OMIT_FIRST_9) {
- int skip = t - (BROTLI_TRANSFORM_OMIT_FIRST_1 - 1);
- word += skip;
- len -= skip;
- }
- while (i < len) { dst[idx++] = word[i++]; }
- if (t == BROTLI_TRANSFORM_UPPERCASE_FIRST) {
- ToUpperCase(&dst[idx - len]);
- } else if (t == BROTLI_TRANSFORM_UPPERCASE_ALL) {
- uint8_t* uppercase = &dst[idx - len];
- while (len > 0) {
- int step = ToUpperCase(uppercase);
- uppercase += step;
- len -= step;
- }
- }
- }
- {
- int suffix_len = *suffix++;
- while (suffix_len--) { dst[idx++] = *suffix++; }
- return idx;
- }
-}
-
-#if defined(__cplusplus) || defined(c_plusplus)
-} /* extern "C" */
-#endif
diff --git a/BaseTools/Source/C/BrotliCompress/dec/bit_reader.c b/BaseTools/Source/C/BrotliCompress/dec/bit_reader.c
deleted file mode 100644
index 4d8bd8b2f619..000000000000
--- a/BaseTools/Source/C/BrotliCompress/dec/bit_reader.c
+++ /dev/null
@@ -1,48 +0,0 @@
-/* Copyright 2013 Google Inc. All Rights Reserved.
-
- Distributed under MIT license.
- See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
-*/
-
-/* Bit reading helpers */
-
-#include "./bit_reader.h"
-
-#include "../common/platform.h"
-#include <brotli/types.h>
-
-#if defined(__cplusplus) || defined(c_plusplus)
-extern "C" {
-#endif
-
-void BrotliInitBitReader(BrotliBitReader* const br) {
- br->val_ = 0;
- br->bit_pos_ = sizeof(br->val_) << 3;
-}
-
-BROTLI_BOOL BrotliWarmupBitReader(BrotliBitReader* const br) {
- size_t aligned_read_mask = (sizeof(br->val_) >> 1) - 1;
- /* Fixing alignment after unaligned BrotliFillWindow would result accumulator
- overflow. If unalignment is caused by BrotliSafeReadBits, then there is
- enough space in accumulator to fix alignment. */
- if (!BROTLI_ALIGNED_READ) {
- aligned_read_mask = 0;
- }
- if (BrotliGetAvailableBits(br) == 0) {
- if (!BrotliPullByte(br)) {
- return BROTLI_FALSE;
- }
- }
-
- while ((((size_t)br->next_in) & aligned_read_mask) != 0) {
- if (!BrotliPullByte(br)) {
- /* If we consumed all the input, we don't care about the alignment. */
- return BROTLI_TRUE;
- }
- }
- return BROTLI_TRUE;
-}
-
-#if defined(__cplusplus) || defined(c_plusplus)
-} /* extern "C" */
-#endif
diff --git a/BaseTools/Source/C/BrotliCompress/dec/decode.c b/BaseTools/Source/C/BrotliCompress/dec/decode.c
deleted file mode 100644
index eb67d8bbf86b..000000000000
--- a/BaseTools/Source/C/BrotliCompress/dec/decode.c
+++ /dev/null
@@ -1,2497 +0,0 @@
-/* Copyright 2013 Google Inc. All Rights Reserved.
-
- Distributed under MIT license.
- See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
-*/
-
-#include <brotli/decode.h>
-
-#if defined(__ARM_NEON__)
-#include <arm_neon.h>
-#endif
-
-#include <stdlib.h> /* free, malloc */
-#include <string.h> /* memcpy, memset */
-
-#include "../common/constants.h"
-#include "../common/context.h"
-#include "../common/dictionary.h"
-#include "../common/platform.h"
-#include "../common/transform.h"
-#include "../common/version.h"
-#include "./bit_reader.h"
-#include "./huffman.h"
-#include "./prefix.h"
-#include "./state.h"
-
-#if defined(__cplusplus) || defined(c_plusplus)
-extern "C" {
-#endif
-
-#define BROTLI_FAILURE(CODE) (BROTLI_DUMP(), CODE)
-
-#define BROTLI_LOG_UINT(name) \
- BROTLI_LOG(("[%s] %s = %lu\n", __func__, #name, (unsigned long)(name)))
-#define BROTLI_LOG_ARRAY_INDEX(array_name, idx) \
- BROTLI_LOG(("[%s] %s[%lu] = %lu\n", __func__, #array_name, \
- (unsigned long)(idx), (unsigned long)array_name[idx]))
-
-#define HUFFMAN_TABLE_BITS 8U
-#define HUFFMAN_TABLE_MASK 0xFF
-
-/* We need the slack region for the following reasons:
- - doing up to two 16-byte copies for fast backward copying
- - inserting transformed dictionary word (5 prefix + 24 base + 8 suffix) */
-static const uint32_t kRingBufferWriteAheadSlack = 42;
-
-static const uint8_t kCodeLengthCodeOrder[BROTLI_CODE_LENGTH_CODES] = {
- 1, 2, 3, 4, 0, 5, 17, 6, 16, 7, 8, 9, 10, 11, 12, 13, 14, 15,
-};
-
-/* Static prefix code for the complex code length code lengths. */
-static const uint8_t kCodeLengthPrefixLength[16] = {
- 2, 2, 2, 3, 2, 2, 2, 4, 2, 2, 2, 3, 2, 2, 2, 4,
-};
-
-static const uint8_t kCodeLengthPrefixValue[16] = {
- 0, 4, 3, 2, 0, 4, 3, 1, 0, 4, 3, 2, 0, 4, 3, 5,
-};
-
-BROTLI_BOOL BrotliDecoderSetParameter(
- BrotliDecoderState* state, BrotliDecoderParameter p, uint32_t value) {
- if (state->state != BROTLI_STATE_UNINITED) return BROTLI_FALSE;
- switch (p) {
- case BROTLI_DECODER_PARAM_DISABLE_RING_BUFFER_REALLOCATION:
- state->canny_ringbuffer_allocation = !!value ? 0 : 1;
- return BROTLI_TRUE;
-
- case BROTLI_DECODER_PARAM_LARGE_WINDOW:
- state->large_window = TO_BROTLI_BOOL(!!value);
- return BROTLI_TRUE;
-
- default: return BROTLI_FALSE;
- }
-}
-
-BrotliDecoderState* BrotliDecoderCreateInstance(
- brotli_alloc_func alloc_func, brotli_free_func free_func, void* opaque) {
- BrotliDecoderState* state = 0;
- if (!alloc_func && !free_func) {
- state = (BrotliDecoderState*)malloc(sizeof(BrotliDecoderState));
- } else if (alloc_func && free_func) {
- state = (BrotliDecoderState*)alloc_func(opaque, sizeof(BrotliDecoderState));
- }
- if (state == 0) {
- BROTLI_DUMP();
- return 0;
- }
- if (!BrotliDecoderStateInit(state, alloc_func, free_func, opaque)) {
- BROTLI_DUMP();
- if (!alloc_func && !free_func) {
- free(state);
- } else if (alloc_func && free_func) {
- free_func(opaque, state);
- }
- return 0;
- }
- return state;
-}
-
-/* Deinitializes and frees BrotliDecoderState instance. */
-void BrotliDecoderDestroyInstance(BrotliDecoderState* state) {
- if (!state) {
- return;
- } else {
- brotli_free_func free_func = state->free_func;
- void* opaque = state->memory_manager_opaque;
- BrotliDecoderStateCleanup(state);
- free_func(opaque, state);
- }
-}
-
-/* Saves error code and converts it to BrotliDecoderResult. */
-static BROTLI_NOINLINE BrotliDecoderResult SaveErrorCode(
- BrotliDecoderState* s, BrotliDecoderErrorCode e) {
- s->error_code = (int)e;
- switch (e) {
- case BROTLI_DECODER_SUCCESS:
- return BROTLI_DECODER_RESULT_SUCCESS;
-
- case BROTLI_DECODER_NEEDS_MORE_INPUT:
- return BROTLI_DECODER_RESULT_NEEDS_MORE_INPUT;
-
- case BROTLI_DECODER_NEEDS_MORE_OUTPUT:
- return BROTLI_DECODER_RESULT_NEEDS_MORE_OUTPUT;
-
- default:
- return BROTLI_DECODER_RESULT_ERROR;
- }
-}
-
-/* Decodes WBITS by reading 1 - 7 bits, or 0x11 for "Large Window Brotli".
- Precondition: bit-reader accumulator has at least 8 bits. */
-static BrotliDecoderErrorCode DecodeWindowBits(BrotliDecoderState* s,
- BrotliBitReader* br) {
- uint32_t n;
- BROTLI_BOOL large_window = s->large_window;
- s->large_window = BROTLI_FALSE;
- BrotliTakeBits(br, 1, &n);
- if (n == 0) {
- s->window_bits = 16;
- return BROTLI_DECODER_SUCCESS;
- }
- BrotliTakeBits(br, 3, &n);
- if (n != 0) {
- s->window_bits = 17 + n;
- return BROTLI_DECODER_SUCCESS;
- }
- BrotliTakeBits(br, 3, &n);
- if (n == 1) {
- if (large_window) {
- BrotliTakeBits(br, 1, &n);
- if (n == 1) {
- return BROTLI_FAILURE(BROTLI_DECODER_ERROR_FORMAT_WINDOW_BITS);
- }
- s->large_window = BROTLI_TRUE;
- return BROTLI_DECODER_SUCCESS;
- } else {
- return BROTLI_FAILURE(BROTLI_DECODER_ERROR_FORMAT_WINDOW_BITS);
- }
- }
- if (n != 0) {
- s->window_bits = 8 + n;
- return BROTLI_DECODER_SUCCESS;
- }
- s->window_bits = 17;
- return BROTLI_DECODER_SUCCESS;
-}
-
-static BROTLI_INLINE void memmove16(uint8_t* dst, uint8_t* src) {
-#if defined(__ARM_NEON__)
- vst1q_u8(dst, vld1q_u8(src));
-#else
- uint32_t buffer[4];
- memcpy(buffer, src, 16);
- memcpy(dst, buffer, 16);
-#endif
-}
-
-/* Decodes a number in the range [0..255], by reading 1 - 11 bits. */
-static BROTLI_NOINLINE BrotliDecoderErrorCode DecodeVarLenUint8(
- BrotliDecoderState* s, BrotliBitReader* br, uint32_t* value) {
- uint32_t bits;
- switch (s->substate_decode_uint8) {
- case BROTLI_STATE_DECODE_UINT8_NONE:
- if (BROTLI_PREDICT_FALSE(!BrotliSafeReadBits(br, 1, &bits))) {
- return BROTLI_DECODER_NEEDS_MORE_INPUT;
- }
- if (bits == 0) {
- *value = 0;
- return BROTLI_DECODER_SUCCESS;
- }
- /* Fall through. */
-
- case BROTLI_STATE_DECODE_UINT8_SHORT:
- if (BROTLI_PREDICT_FALSE(!BrotliSafeReadBits(br, 3, &bits))) {
- s->substate_decode_uint8 = BROTLI_STATE_DECODE_UINT8_SHORT;
- return BROTLI_DECODER_NEEDS_MORE_INPUT;
- }
- if (bits == 0) {
- *value = 1;
- s->substate_decode_uint8 = BROTLI_STATE_DECODE_UINT8_NONE;
- return BROTLI_DECODER_SUCCESS;
- }
- /* Use output value as a temporary storage. It MUST be persisted. */
- *value = bits;
- /* Fall through. */
-
- case BROTLI_STATE_DECODE_UINT8_LONG:
- if (BROTLI_PREDICT_FALSE(!BrotliSafeReadBits(br, *value, &bits))) {
- s->substate_decode_uint8 = BROTLI_STATE_DECODE_UINT8_LONG;
- return BROTLI_DECODER_NEEDS_MORE_INPUT;
- }
- *value = (1U << *value) + bits;
- s->substate_decode_uint8 = BROTLI_STATE_DECODE_UINT8_NONE;
- return BROTLI_DECODER_SUCCESS;
-
- default:
- return
- BROTLI_FAILURE(BROTLI_DECODER_ERROR_UNREACHABLE);
- }
-}
-
-/* Decodes a metablock length and flags by reading 2 - 31 bits. */
-static BrotliDecoderErrorCode BROTLI_NOINLINE DecodeMetaBlockLength(
- BrotliDecoderState* s, BrotliBitReader* br) {
- uint32_t bits;
- int i;
- for (;;) {
- switch (s->substate_metablock_header) {
- case BROTLI_STATE_METABLOCK_HEADER_NONE:
- if (!BrotliSafeReadBits(br, 1, &bits)) {
- return BROTLI_DECODER_NEEDS_MORE_INPUT;
- }
- s->is_last_metablock = bits ? 1 : 0;
- s->meta_block_remaining_len = 0;
- s->is_uncompressed = 0;
- s->is_metadata = 0;
- if (!s->is_last_metablock) {
- s->substate_metablock_header = BROTLI_STATE_METABLOCK_HEADER_NIBBLES;
- break;
- }
- s->substate_metablock_header = BROTLI_STATE_METABLOCK_HEADER_EMPTY;
- /* Fall through. */
-
- case BROTLI_STATE_METABLOCK_HEADER_EMPTY:
- if (!BrotliSafeReadBits(br, 1, &bits)) {
- return BROTLI_DECODER_NEEDS_MORE_INPUT;
- }
- if (bits) {
- s->substate_metablock_header = BROTLI_STATE_METABLOCK_HEADER_NONE;
- return BROTLI_DECODER_SUCCESS;
- }
- s->substate_metablock_header = BROTLI_STATE_METABLOCK_HEADER_NIBBLES;
- /* Fall through. */
-
- case BROTLI_STATE_METABLOCK_HEADER_NIBBLES:
- if (!BrotliSafeReadBits(br, 2, &bits)) {
- return BROTLI_DECODER_NEEDS_MORE_INPUT;
- }
- s->size_nibbles = (uint8_t)(bits + 4);
- s->loop_counter = 0;
- if (bits == 3) {
- s->is_metadata = 1;
- s->substate_metablock_header = BROTLI_STATE_METABLOCK_HEADER_RESERVED;
- break;
- }
- s->substate_metablock_header = BROTLI_STATE_METABLOCK_HEADER_SIZE;
- /* Fall through. */
-
- case BROTLI_STATE_METABLOCK_HEADER_SIZE:
- i = s->loop_counter;
- for (; i < (int)s->size_nibbles; ++i) {
- if (!BrotliSafeReadBits(br, 4, &bits)) {
- s->loop_counter = i;
- return BROTLI_DECODER_NEEDS_MORE_INPUT;
- }
- if (i + 1 == s->size_nibbles && s->size_nibbles > 4 && bits == 0) {
- return BROTLI_FAILURE(BROTLI_DECODER_ERROR_FORMAT_EXUBERANT_NIBBLE);
- }
- s->meta_block_remaining_len |= (int)(bits << (i * 4));
- }
- s->substate_metablock_header =
- BROTLI_STATE_METABLOCK_HEADER_UNCOMPRESSED;
- /* Fall through. */
-
- case BROTLI_STATE_METABLOCK_HEADER_UNCOMPRESSED:
- if (!s->is_last_metablock) {
- if (!BrotliSafeReadBits(br, 1, &bits)) {
- return BROTLI_DECODER_NEEDS_MORE_INPUT;
- }
- s->is_uncompressed = bits ? 1 : 0;
- }
- ++s->meta_block_remaining_len;
- s->substate_metablock_header = BROTLI_STATE_METABLOCK_HEADER_NONE;
- return BROTLI_DECODER_SUCCESS;
-
- case BROTLI_STATE_METABLOCK_HEADER_RESERVED:
- if (!BrotliSafeReadBits(br, 1, &bits)) {
- return BROTLI_DECODER_NEEDS_MORE_INPUT;
- }
- if (bits != 0) {
- return BROTLI_FAILURE(BROTLI_DECODER_ERROR_FORMAT_RESERVED);
- }
- s->substate_metablock_header = BROTLI_STATE_METABLOCK_HEADER_BYTES;
- /* Fall through. */
-
- case BROTLI_STATE_METABLOCK_HEADER_BYTES:
- if (!BrotliSafeReadBits(br, 2, &bits)) {
- return BROTLI_DECODER_NEEDS_MORE_INPUT;
- }
- if (bits == 0) {
- s->substate_metablock_header = BROTLI_STATE_METABLOCK_HEADER_NONE;
- return BROTLI_DECODER_SUCCESS;
- }
- s->size_nibbles = (uint8_t)bits;
- s->substate_metablock_header = BROTLI_STATE_METABLOCK_HEADER_METADATA;
- /* Fall through. */
-
- case BROTLI_STATE_METABLOCK_HEADER_METADATA:
- i = s->loop_counter;
- for (; i < (int)s->size_nibbles; ++i) {
- if (!BrotliSafeReadBits(br, 8, &bits)) {
- s->loop_counter = i;
- return BROTLI_DECODER_NEEDS_MORE_INPUT;
- }
- if (i + 1 == s->size_nibbles && s->size_nibbles > 1 && bits == 0) {
- return BROTLI_FAILURE(
- BROTLI_DECODER_ERROR_FORMAT_EXUBERANT_META_NIBBLE);
- }
- s->meta_block_remaining_len |= (int)(bits << (i * 8));
- }
- ++s->meta_block_remaining_len;
- s->substate_metablock_header = BROTLI_STATE_METABLOCK_HEADER_NONE;
- return BROTLI_DECODER_SUCCESS;
-
- default:
- return
- BROTLI_FAILURE(BROTLI_DECODER_ERROR_UNREACHABLE);
- }
- }
-}
-
-/* Decodes the Huffman code.
- This method doesn't read data from the bit reader, BUT drops the amount of
- bits that correspond to the decoded symbol.
- bits MUST contain at least 15 (BROTLI_HUFFMAN_MAX_CODE_LENGTH) valid bits. */
-static BROTLI_INLINE uint32_t DecodeSymbol(uint32_t bits,
- const HuffmanCode* table,
- BrotliBitReader* br) {
- table += bits & HUFFMAN_TABLE_MASK;
- if (table->bits > HUFFMAN_TABLE_BITS) {
- uint32_t nbits = table->bits - HUFFMAN_TABLE_BITS;
- BrotliDropBits(br, HUFFMAN_TABLE_BITS);
- table += table->value;
- table += (bits >> HUFFMAN_TABLE_BITS) & BitMask(nbits);
- }
- BrotliDropBits(br, table->bits);
- return table->value;
-}
-
-/* Reads and decodes the next Huffman code from bit-stream.
- This method peeks 16 bits of input and drops 0 - 15 of them. */
-static BROTLI_INLINE uint32_t ReadSymbol(const HuffmanCode* table,
- BrotliBitReader* br) {
- return DecodeSymbol(BrotliGet16BitsUnmasked(br), table, br);
-}
-
-/* Same as DecodeSymbol, but it is known that there is less than 15 bits of
- input are currently available. */
-static BROTLI_NOINLINE BROTLI_BOOL SafeDecodeSymbol(
- const HuffmanCode* table, BrotliBitReader* br, uint32_t* result) {
- uint32_t val;
- uint32_t available_bits = BrotliGetAvailableBits(br);
- if (available_bits == 0) {
- if (table->bits == 0) {
- *result = table->value;
- return BROTLI_TRUE;
- }
- return BROTLI_FALSE; /* No valid bits at all. */
- }
- val = (uint32_t)BrotliGetBitsUnmasked(br);
- table += val & HUFFMAN_TABLE_MASK;
- if (table->bits <= HUFFMAN_TABLE_BITS) {
- if (table->bits <= available_bits) {
- BrotliDropBits(br, table->bits);
- *result = table->value;
- return BROTLI_TRUE;
- } else {
- return BROTLI_FALSE; /* Not enough bits for the first level. */
- }
- }
- if (available_bits <= HUFFMAN_TABLE_BITS) {
- return BROTLI_FALSE; /* Not enough bits to move to the second level. */
- }
-
- /* Speculatively drop HUFFMAN_TABLE_BITS. */
- val = (val & BitMask(table->bits)) >> HUFFMAN_TABLE_BITS;
- available_bits -= HUFFMAN_TABLE_BITS;
- table += table->value + val;
- if (available_bits < table->bits) {
- return BROTLI_FALSE; /* Not enough bits for the second level. */
- }
-
- BrotliDropBits(br, HUFFMAN_TABLE_BITS + table->bits);
- *result = table->value;
- return BROTLI_TRUE;
-}
-
-static BROTLI_INLINE BROTLI_BOOL SafeReadSymbol(
- const HuffmanCode* table, BrotliBitReader* br, uint32_t* result) {
- uint32_t val;
- if (BROTLI_PREDICT_TRUE(BrotliSafeGetBits(br, 15, &val))) {
- *result = DecodeSymbol(val, table, br);
- return BROTLI_TRUE;
- }
- return SafeDecodeSymbol(table, br, result);
-}
-
-/* Makes a look-up in first level Huffman table. Peeks 8 bits. */
-static BROTLI_INLINE void PreloadSymbol(int safe,
- const HuffmanCode* table,
- BrotliBitReader* br,
- uint32_t* bits,
- uint32_t* value) {
- if (safe) {
- return;
- }
- table += BrotliGetBits(br, HUFFMAN_TABLE_BITS);
- *bits = table->bits;
- *value = table->value;
-}
-
-/* Decodes the next Huffman code using data prepared by PreloadSymbol.
- Reads 0 - 15 bits. Also peeks 8 following bits. */
-static BROTLI_INLINE uint32_t ReadPreloadedSymbol(const HuffmanCode* table,
- BrotliBitReader* br,
- uint32_t* bits,
- uint32_t* value) {
- uint32_t result = *value;
- if (BROTLI_PREDICT_FALSE(*bits > HUFFMAN_TABLE_BITS)) {
- uint32_t val = BrotliGet16BitsUnmasked(br);
- const HuffmanCode* ext = table + (val & HUFFMAN_TABLE_MASK) + *value;
- uint32_t mask = BitMask((*bits - HUFFMAN_TABLE_BITS));
- BrotliDropBits(br, HUFFMAN_TABLE_BITS);
- ext += (val >> HUFFMAN_TABLE_BITS) & mask;
- BrotliDropBits(br, ext->bits);
- result = ext->value;
- } else {
- BrotliDropBits(br, *bits);
- }
- PreloadSymbol(0, table, br, bits, value);
- return result;
-}
-
-static BROTLI_INLINE uint32_t Log2Floor(uint32_t x) {
- uint32_t result = 0;
- while (x) {
- x >>= 1;
- ++result;
- }
- return result;
-}
-
-/* Reads (s->symbol + 1) symbols.
- Totally 1..4 symbols are read, 1..11 bits each.
- The list of symbols MUST NOT contain duplicates. */
-static BrotliDecoderErrorCode ReadSimpleHuffmanSymbols(
- uint32_t alphabet_size, uint32_t max_symbol, BrotliDecoderState* s) {
- /* max_bits == 1..11; symbol == 0..3; 1..44 bits will be read. */
- BrotliBitReader* br = &s->br;
- uint32_t max_bits = Log2Floor(alphabet_size - 1);
- uint32_t i = s->sub_loop_counter;
- uint32_t num_symbols = s->symbol;
- while (i <= num_symbols) {
- uint32_t v;
- if (BROTLI_PREDICT_FALSE(!BrotliSafeReadBits(br, max_bits, &v))) {
- s->sub_loop_counter = i;
- s->substate_huffman = BROTLI_STATE_HUFFMAN_SIMPLE_READ;
- return BROTLI_DECODER_NEEDS_MORE_INPUT;
- }
- if (v >= max_symbol) {
- return
- BROTLI_FAILURE(BROTLI_DECODER_ERROR_FORMAT_SIMPLE_HUFFMAN_ALPHABET);
- }
- s->symbols_lists_array[i] = (uint16_t)v;
- BROTLI_LOG_UINT(s->symbols_lists_array[i]);
- ++i;
- }
-
- for (i = 0; i < num_symbols; ++i) {
- uint32_t k = i + 1;
- for (; k <= num_symbols; ++k) {
- if (s->symbols_lists_array[i] == s->symbols_lists_array[k]) {
- return BROTLI_FAILURE(BROTLI_DECODER_ERROR_FORMAT_SIMPLE_HUFFMAN_SAME);
- }
- }
- }
-
- return BROTLI_DECODER_SUCCESS;
-}
-
-/* Process single decoded symbol code length:
- A) reset the repeat variable
- B) remember code length (if it is not 0)
- C) extend corresponding index-chain
- D) reduce the Huffman space
- E) update the histogram */
-static BROTLI_INLINE void ProcessSingleCodeLength(uint32_t code_len,
- uint32_t* symbol, uint32_t* repeat, uint32_t* space,
- uint32_t* prev_code_len, uint16_t* symbol_lists,
- uint16_t* code_length_histo, int* next_symbol) {
- *repeat = 0;
- if (code_len != 0) { /* code_len == 1..15 */
- symbol_lists[next_symbol[code_len]] = (uint16_t)(*symbol);
- next_symbol[code_len] = (int)(*symbol);
- *prev_code_len = code_len;
- *space -= 32768U >> code_len;
- code_length_histo[code_len]++;
- BROTLI_LOG(("[ReadHuffmanCode] code_length[%d] = %d\n",
- (int)*symbol, (int)code_len));
- }
- (*symbol)++;
-}
-
-/* Process repeated symbol code length.
- A) Check if it is the extension of previous repeat sequence; if the decoded
- value is not BROTLI_REPEAT_PREVIOUS_CODE_LENGTH, then it is a new
- symbol-skip
- B) Update repeat variable
- C) Check if operation is feasible (fits alphabet)
- D) For each symbol do the same operations as in ProcessSingleCodeLength
-
- PRECONDITION: code_len == BROTLI_REPEAT_PREVIOUS_CODE_LENGTH or
- code_len == BROTLI_REPEAT_ZERO_CODE_LENGTH */
-static BROTLI_INLINE void ProcessRepeatedCodeLength(uint32_t code_len,
- uint32_t repeat_delta, uint32_t alphabet_size, uint32_t* symbol,
- uint32_t* repeat, uint32_t* space, uint32_t* prev_code_len,
- uint32_t* repeat_code_len, uint16_t* symbol_lists,
- uint16_t* code_length_histo, int* next_symbol) {
- uint32_t old_repeat;
- uint32_t extra_bits = 3; /* for BROTLI_REPEAT_ZERO_CODE_LENGTH */
- uint32_t new_len = 0; /* for BROTLI_REPEAT_ZERO_CODE_LENGTH */
- if (code_len == BROTLI_REPEAT_PREVIOUS_CODE_LENGTH) {
- new_len = *prev_code_len;
- extra_bits = 2;
- }
- if (*repeat_code_len != new_len) {
- *repeat = 0;
- *repeat_code_len = new_len;
- }
- old_repeat = *repeat;
- if (*repeat > 0) {
- *repeat -= 2;
- *repeat <<= extra_bits;
- }
- *repeat += repeat_delta + 3U;
- repeat_delta = *repeat - old_repeat;
- if (*symbol + repeat_delta > alphabet_size) {
- BROTLI_DUMP();
- *symbol = alphabet_size;
- *space = 0xFFFFF;
- return;
- }
- BROTLI_LOG(("[ReadHuffmanCode] code_length[%d..%d] = %d\n",
- (int)*symbol, (int)(*symbol + repeat_delta - 1), (int)*repeat_code_len));
- if (*repeat_code_len != 0) {
- unsigned last = *symbol + repeat_delta;
- int next = next_symbol[*repeat_code_len];
- do {
- symbol_lists[next] = (uint16_t)*symbol;
- next = (int)*symbol;
- } while (++(*symbol) != last);
- next_symbol[*repeat_code_len] = next;
- *space -= repeat_delta << (15 - *repeat_code_len);
- code_length_histo[*repeat_code_len] =
- (uint16_t)(code_length_histo[*repeat_code_len] + repeat_delta);
- } else {
- *symbol += repeat_delta;
- }
-}
-
-/* Reads and decodes symbol codelengths. */
-static BrotliDecoderErrorCode ReadSymbolCodeLengths(
- uint32_t alphabet_size, BrotliDecoderState* s) {
- BrotliBitReader* br = &s->br;
- uint32_t symbol = s->symbol;
- uint32_t repeat = s->repeat;
- uint32_t space = s->space;
- uint32_t prev_code_len = s->prev_code_len;
- uint32_t repeat_code_len = s->repeat_code_len;
- uint16_t* symbol_lists = s->symbol_lists;
- uint16_t* code_length_histo = s->code_length_histo;
- int* next_symbol = s->next_symbol;
- if (!BrotliWarmupBitReader(br)) {
- return BROTLI_DECODER_NEEDS_MORE_INPUT;
- }
- while (symbol < alphabet_size && space > 0) {
- const HuffmanCode* p = s->table;
- uint32_t code_len;
- if (!BrotliCheckInputAmount(br, BROTLI_SHORT_FILL_BIT_WINDOW_READ)) {
- s->symbol = symbol;
- s->repeat = repeat;
- s->prev_code_len = prev_code_len;
- s->repeat_code_len = repeat_code_len;
- s->space = space;
- return BROTLI_DECODER_NEEDS_MORE_INPUT;
- }
- BrotliFillBitWindow16(br);
- p += BrotliGetBitsUnmasked(br) &
- BitMask(BROTLI_HUFFMAN_MAX_CODE_LENGTH_CODE_LENGTH);
- BrotliDropBits(br, p->bits); /* Use 1..5 bits. */
- code_len = p->value; /* code_len == 0..17 */
- if (code_len < BROTLI_REPEAT_PREVIOUS_CODE_LENGTH) {
- ProcessSingleCodeLength(code_len, &symbol, &repeat, &space,
- &prev_code_len, symbol_lists, code_length_histo, next_symbol);
- } else { /* code_len == 16..17, extra_bits == 2..3 */
- uint32_t extra_bits =
- (code_len == BROTLI_REPEAT_PREVIOUS_CODE_LENGTH) ? 2 : 3;
- uint32_t repeat_delta =
- (uint32_t)BrotliGetBitsUnmasked(br) & BitMask(extra_bits);
- BrotliDropBits(br, extra_bits);
- ProcessRepeatedCodeLength(code_len, repeat_delta, alphabet_size,
- &symbol, &repeat, &space, &prev_code_len, &repeat_code_len,
- symbol_lists, code_length_histo, next_symbol);
- }
- }
- s->space = space;
- return BROTLI_DECODER_SUCCESS;
-}
-
-static BrotliDecoderErrorCode SafeReadSymbolCodeLengths(
- uint32_t alphabet_size, BrotliDecoderState* s) {
- BrotliBitReader* br = &s->br;
- BROTLI_BOOL get_byte = BROTLI_FALSE;
- while (s->symbol < alphabet_size && s->space > 0) {
- const HuffmanCode* p = s->table;
- uint32_t code_len;
- uint32_t available_bits;
- uint32_t bits = 0;
- if (get_byte && !BrotliPullByte(br)) return BROTLI_DECODER_NEEDS_MORE_INPUT;
- get_byte = BROTLI_FALSE;
- available_bits = BrotliGetAvailableBits(br);
- if (available_bits != 0) {
- bits = (uint32_t)BrotliGetBitsUnmasked(br);
- }
- p += bits & BitMask(BROTLI_HUFFMAN_MAX_CODE_LENGTH_CODE_LENGTH);
- if (p->bits > available_bits) {
- get_byte = BROTLI_TRUE;
- continue;
- }
- code_len = p->value; /* code_len == 0..17 */
- if (code_len < BROTLI_REPEAT_PREVIOUS_CODE_LENGTH) {
- BrotliDropBits(br, p->bits);
- ProcessSingleCodeLength(code_len, &s->symbol, &s->repeat, &s->space,
- &s->prev_code_len, s->symbol_lists, s->code_length_histo,
- s->next_symbol);
- } else { /* code_len == 16..17, extra_bits == 2..3 */
- uint32_t extra_bits = code_len - 14U;
- uint32_t repeat_delta = (bits >> p->bits) & BitMask(extra_bits);
- if (available_bits < p->bits + extra_bits) {
- get_byte = BROTLI_TRUE;
- continue;
- }
- BrotliDropBits(br, p->bits + extra_bits);
- ProcessRepeatedCodeLength(code_len, repeat_delta, alphabet_size,
- &s->symbol, &s->repeat, &s->space, &s->prev_code_len,
- &s->repeat_code_len, s->symbol_lists, s->code_length_histo,
- s->next_symbol);
- }
- }
- return BROTLI_DECODER_SUCCESS;
-}
-
-/* Reads and decodes 15..18 codes using static prefix code.
- Each code is 2..4 bits long. In total 30..72 bits are used. */
-static BrotliDecoderErrorCode ReadCodeLengthCodeLengths(BrotliDecoderState* s) {
- BrotliBitReader* br = &s->br;
- uint32_t num_codes = s->repeat;
- unsigned space = s->space;
- uint32_t i = s->sub_loop_counter;
- for (; i < BROTLI_CODE_LENGTH_CODES; ++i) {
- const uint8_t code_len_idx = kCodeLengthCodeOrder[i];
- uint32_t ix;
- uint32_t v;
- if (BROTLI_PREDICT_FALSE(!BrotliSafeGetBits(br, 4, &ix))) {
- uint32_t available_bits = BrotliGetAvailableBits(br);
- if (available_bits != 0) {
- ix = BrotliGetBitsUnmasked(br) & 0xF;
- } else {
- ix = 0;
- }
- if (kCodeLengthPrefixLength[ix] > available_bits) {
- s->sub_loop_counter = i;
- s->repeat = num_codes;
- s->space = space;
- s->substate_huffman = BROTLI_STATE_HUFFMAN_COMPLEX;
- return BROTLI_DECODER_NEEDS_MORE_INPUT;
- }
- }
- v = kCodeLengthPrefixValue[ix];
- BrotliDropBits(br, kCodeLengthPrefixLength[ix]);
- s->code_length_code_lengths[code_len_idx] = (uint8_t)v;
- BROTLI_LOG_ARRAY_INDEX(s->code_length_code_lengths, code_len_idx);
- if (v != 0) {
- space = space - (32U >> v);
- ++num_codes;
- ++s->code_length_histo[v];
- if (space - 1U >= 32U) {
- /* space is 0 or wrapped around. */
- break;
- }
- }
- }
- if (!(num_codes == 1 || space == 0)) {
- return BROTLI_FAILURE(BROTLI_DECODER_ERROR_FORMAT_CL_SPACE);
- }
- return BROTLI_DECODER_SUCCESS;
-}
-
-/* Decodes the Huffman tables.
- There are 2 scenarios:
- A) Huffman code contains only few symbols (1..4). Those symbols are read
- directly; their code lengths are defined by the number of symbols.
- For this scenario 4 - 49 bits will be read.
-
- B) 2-phase decoding:
- B.1) Small Huffman table is decoded; it is specified with code lengths
- encoded with predefined entropy code. 32 - 74 bits are used.
- B.2) Decoded table is used to decode code lengths of symbols in resulting
- Huffman table. In worst case 3520 bits are read. */
-static BrotliDecoderErrorCode ReadHuffmanCode(uint32_t alphabet_size,
- uint32_t max_symbol,
- HuffmanCode* table,
- uint32_t* opt_table_size,
- BrotliDecoderState* s) {
- BrotliBitReader* br = &s->br;
- /* Unnecessary masking, but might be good for safety. */
- alphabet_size &= 0x7FF;
- /* State machine. */
- for (;;) {
- switch (s->substate_huffman) {
- case BROTLI_STATE_HUFFMAN_NONE:
- if (!BrotliSafeReadBits(br, 2, &s->sub_loop_counter)) {
- return BROTLI_DECODER_NEEDS_MORE_INPUT;
- }
- BROTLI_LOG_UINT(s->sub_loop_counter);
- /* The value is used as follows:
- 1 for simple code;
- 0 for no skipping, 2 skips 2 code lengths, 3 skips 3 code lengths */
- if (s->sub_loop_counter != 1) {
- s->space = 32;
- s->repeat = 0; /* num_codes */
- memset(&s->code_length_histo[0], 0, sizeof(s->code_length_histo[0]) *
- (BROTLI_HUFFMAN_MAX_CODE_LENGTH_CODE_LENGTH + 1));
- memset(&s->code_length_code_lengths[0], 0,
- sizeof(s->code_length_code_lengths));
- s->substate_huffman = BROTLI_STATE_HUFFMAN_COMPLEX;
- continue;
- }
- /* Fall through. */
-
- case BROTLI_STATE_HUFFMAN_SIMPLE_SIZE:
- /* Read symbols, codes & code lengths directly. */
- if (!BrotliSafeReadBits(br, 2, &s->symbol)) { /* num_symbols */
- s->substate_huffman = BROTLI_STATE_HUFFMAN_SIMPLE_SIZE;
- return BROTLI_DECODER_NEEDS_MORE_INPUT;
- }
- s->sub_loop_counter = 0;
- /* Fall through. */
-
- case BROTLI_STATE_HUFFMAN_SIMPLE_READ: {
- BrotliDecoderErrorCode result =
- ReadSimpleHuffmanSymbols(alphabet_size, max_symbol, s);
- if (result != BROTLI_DECODER_SUCCESS) {
- return result;
- }
- }
- /* Fall through. */
-
- case BROTLI_STATE_HUFFMAN_SIMPLE_BUILD: {
- uint32_t table_size;
- if (s->symbol == 3) {
- uint32_t bits;
- if (!BrotliSafeReadBits(br, 1, &bits)) {
- s->substate_huffman = BROTLI_STATE_HUFFMAN_SIMPLE_BUILD;
- return BROTLI_DECODER_NEEDS_MORE_INPUT;
- }
- s->symbol += bits;
- }
- BROTLI_LOG_UINT(s->symbol);
- table_size = BrotliBuildSimpleHuffmanTable(
- table, HUFFMAN_TABLE_BITS, s->symbols_lists_array, s->symbol);
- if (opt_table_size) {
- *opt_table_size = table_size;
- }
- s->substate_huffman = BROTLI_STATE_HUFFMAN_NONE;
- return BROTLI_DECODER_SUCCESS;
- }
-
- /* Decode Huffman-coded code lengths. */
- case BROTLI_STATE_HUFFMAN_COMPLEX: {
- uint32_t i;
- BrotliDecoderErrorCode result = ReadCodeLengthCodeLengths(s);
- if (result != BROTLI_DECODER_SUCCESS) {
- return result;
- }
- BrotliBuildCodeLengthsHuffmanTable(s->table,
- s->code_length_code_lengths,
- s->code_length_histo);
- memset(&s->code_length_histo[0], 0, sizeof(s->code_length_histo));
- for (i = 0; i <= BROTLI_HUFFMAN_MAX_CODE_LENGTH; ++i) {
- s->next_symbol[i] = (int)i - (BROTLI_HUFFMAN_MAX_CODE_LENGTH + 1);
- s->symbol_lists[s->next_symbol[i]] = 0xFFFF;
- }
-
- s->symbol = 0;
- s->prev_code_len = BROTLI_INITIAL_REPEATED_CODE_LENGTH;
- s->repeat = 0;
- s->repeat_code_len = 0;
- s->space = 32768;
- s->substate_huffman = BROTLI_STATE_HUFFMAN_LENGTH_SYMBOLS;
- }
- /* Fall through. */
-
- case BROTLI_STATE_HUFFMAN_LENGTH_SYMBOLS: {
- uint32_t table_size;
- BrotliDecoderErrorCode result = ReadSymbolCodeLengths(max_symbol, s);
- if (result == BROTLI_DECODER_NEEDS_MORE_INPUT) {
- result = SafeReadSymbolCodeLengths(max_symbol, s);
- }
- if (result != BROTLI_DECODER_SUCCESS) {
- return result;
- }
-
- if (s->space != 0) {
- BROTLI_LOG(("[ReadHuffmanCode] space = %d\n", (int)s->space));
- return BROTLI_FAILURE(BROTLI_DECODER_ERROR_FORMAT_HUFFMAN_SPACE);
- }
- table_size = BrotliBuildHuffmanTable(
- table, HUFFMAN_TABLE_BITS, s->symbol_lists, s->code_length_histo);
- if (opt_table_size) {
- *opt_table_size = table_size;
- }
- s->substate_huffman = BROTLI_STATE_HUFFMAN_NONE;
- return BROTLI_DECODER_SUCCESS;
- }
-
- default:
- return
- BROTLI_FAILURE(BROTLI_DECODER_ERROR_UNREACHABLE);
- }
- }
-}
-
-/* Decodes a block length by reading 3..39 bits. */
-static BROTLI_INLINE uint32_t ReadBlockLength(const HuffmanCode* table,
- BrotliBitReader* br) {
- uint32_t code;
- uint32_t nbits;
- code = ReadSymbol(table, br);
- nbits = kBlockLengthPrefixCode[code].nbits; /* nbits == 2..24 */
- return kBlockLengthPrefixCode[code].offset + BrotliReadBits(br, nbits);
-}
-
-/* WARNING: if state is not BROTLI_STATE_READ_BLOCK_LENGTH_NONE, then
- reading can't be continued with ReadBlockLength. */
-static BROTLI_INLINE BROTLI_BOOL SafeReadBlockLength(
- BrotliDecoderState* s, uint32_t* result, const HuffmanCode* table,
- BrotliBitReader* br) {
- uint32_t index;
- if (s->substate_read_block_length == BROTLI_STATE_READ_BLOCK_LENGTH_NONE) {
- if (!SafeReadSymbol(table, br, &index)) {
- return BROTLI_FALSE;
- }
- } else {
- index = s->block_length_index;
- }
- {
- uint32_t bits;
- uint32_t nbits = kBlockLengthPrefixCode[index].nbits; /* nbits == 2..24 */
- if (!BrotliSafeReadBits(br, nbits, &bits)) {
- s->block_length_index = index;
- s->substate_read_block_length = BROTLI_STATE_READ_BLOCK_LENGTH_SUFFIX;
- return BROTLI_FALSE;
- }
- *result = kBlockLengthPrefixCode[index].offset + bits;
- s->substate_read_block_length = BROTLI_STATE_READ_BLOCK_LENGTH_NONE;
- return BROTLI_TRUE;
- }
-}
-
-/* Transform:
- 1) initialize list L with values 0, 1,... 255
- 2) For each input element X:
- 2.1) let Y = L[X]
- 2.2) remove X-th element from L
- 2.3) prepend Y to L
- 2.4) append Y to output
-
- In most cases max(Y) <= 7, so most of L remains intact.
- To reduce the cost of initialization, we reuse L, remember the upper bound
- of Y values, and reinitialize only first elements in L.
-
- Most of input values are 0 and 1. To reduce number of branches, we replace
- inner for loop with do-while. */
-static BROTLI_NOINLINE void InverseMoveToFrontTransform(
- uint8_t* v, uint32_t v_len, BrotliDecoderState* state) {
- /* Reinitialize elements that could have been changed. */
- uint32_t i = 1;
- uint32_t upper_bound = state->mtf_upper_bound;
- uint32_t* mtf = &state->mtf[1]; /* Make mtf[-1] addressable. */
- uint8_t* mtf_u8 = (uint8_t*)mtf;
- /* Load endian-aware constant. */
- const uint8_t b0123[4] = {0, 1, 2, 3};
- uint32_t pattern;
- memcpy(&pattern, &b0123, 4);
-
- /* Initialize list using 4 consequent values pattern. */
- mtf[0] = pattern;
- do {
- pattern += 0x04040404; /* Advance all 4 values by 4. */
- mtf[i] = pattern;
- i++;
- } while (i <= upper_bound);
-
- /* Transform the input. */
- upper_bound = 0;
- for (i = 0; i < v_len; ++i) {
- int index = v[i];
- uint8_t value = mtf_u8[index];
- upper_bound |= v[i];
- v[i] = value;
- mtf_u8[-1] = value;
- do {
- index--;
- mtf_u8[index + 1] = mtf_u8[index];
- } while (index >= 0);
- }
- /* Remember amount of elements to be reinitialized. */
- state->mtf_upper_bound = upper_bound >> 2;
-}
-
-/* Decodes a series of Huffman table using ReadHuffmanCode function. */
-static BrotliDecoderErrorCode HuffmanTreeGroupDecode(
- HuffmanTreeGroup* group, BrotliDecoderState* s) {
- if (s->substate_tree_group != BROTLI_STATE_TREE_GROUP_LOOP) {
- s->next = group->codes;
- s->htree_index = 0;
- s->substate_tree_group = BROTLI_STATE_TREE_GROUP_LOOP;
- }
- while (s->htree_index < group->num_htrees) {
- uint32_t table_size;
- BrotliDecoderErrorCode result =
- ReadHuffmanCode(group->alphabet_size, group->max_symbol,
- s->next, &table_size, s);
- if (result != BROTLI_DECODER_SUCCESS) return result;
- group->htrees[s->htree_index] = s->next;
- s->next += table_size;
- ++s->htree_index;
- }
- s->substate_tree_group = BROTLI_STATE_TREE_GROUP_NONE;
- return BROTLI_DECODER_SUCCESS;
-}
-
-/* Decodes a context map.
- Decoding is done in 4 phases:
- 1) Read auxiliary information (6..16 bits) and allocate memory.
- In case of trivial context map, decoding is finished at this phase.
- 2) Decode Huffman table using ReadHuffmanCode function.
- This table will be used for reading context map items.
- 3) Read context map items; "0" values could be run-length encoded.
- 4) Optionally, apply InverseMoveToFront transform to the resulting map. */
-static BrotliDecoderErrorCode DecodeContextMap(uint32_t context_map_size,
- uint32_t* num_htrees,
- uint8_t** context_map_arg,
- BrotliDecoderState* s) {
- BrotliBitReader* br = &s->br;
- BrotliDecoderErrorCode result = BROTLI_DECODER_SUCCESS;
-
- switch ((int)s->substate_context_map) {
- case BROTLI_STATE_CONTEXT_MAP_NONE:
- result = DecodeVarLenUint8(s, br, num_htrees);
- if (result != BROTLI_DECODER_SUCCESS) {
- return result;
- }
- (*num_htrees)++;
- s->context_index = 0;
- BROTLI_LOG_UINT(context_map_size);
- BROTLI_LOG_UINT(*num_htrees);
- *context_map_arg =
- (uint8_t*)BROTLI_DECODER_ALLOC(s, (size_t)context_map_size);
- if (*context_map_arg == 0) {
- return BROTLI_FAILURE(BROTLI_DECODER_ERROR_ALLOC_CONTEXT_MAP);
- }
- if (*num_htrees <= 1) {
- memset(*context_map_arg, 0, (size_t)context_map_size);
- return BROTLI_DECODER_SUCCESS;
- }
- s->substate_context_map = BROTLI_STATE_CONTEXT_MAP_READ_PREFIX;
- /* Fall through. */
-
- case BROTLI_STATE_CONTEXT_MAP_READ_PREFIX: {
- uint32_t bits;
- /* In next stage ReadHuffmanCode uses at least 4 bits, so it is safe
- to peek 4 bits ahead. */
- if (!BrotliSafeGetBits(br, 5, &bits)) {
- return BROTLI_DECODER_NEEDS_MORE_INPUT;
- }
- if ((bits & 1) != 0) { /* Use RLE for zeros. */
- s->max_run_length_prefix = (bits >> 1) + 1;
- BrotliDropBits(br, 5);
- } else {
- s->max_run_length_prefix = 0;
- BrotliDropBits(br, 1);
- }
- BROTLI_LOG_UINT(s->max_run_length_prefix);
- s->substate_context_map = BROTLI_STATE_CONTEXT_MAP_HUFFMAN;
- }
- /* Fall through. */
-
- case BROTLI_STATE_CONTEXT_MAP_HUFFMAN: {
- uint32_t alphabet_size = *num_htrees + s->max_run_length_prefix;
- result = ReadHuffmanCode(alphabet_size, alphabet_size,
- s->context_map_table, NULL, s);
- if (result != BROTLI_DECODER_SUCCESS) return result;
- s->code = 0xFFFF;
- s->substate_context_map = BROTLI_STATE_CONTEXT_MAP_DECODE;
- }
- /* Fall through. */
-
- case BROTLI_STATE_CONTEXT_MAP_DECODE: {
- uint32_t context_index = s->context_index;
- uint32_t max_run_length_prefix = s->max_run_length_prefix;
- uint8_t* context_map = *context_map_arg;
- uint32_t code = s->code;
- BROTLI_BOOL skip_preamble = (code != 0xFFFF);
- while (context_index < context_map_size || skip_preamble) {
- if (!skip_preamble) {
- if (!SafeReadSymbol(s->context_map_table, br, &code)) {
- s->code = 0xFFFF;
- s->context_index = context_index;
- return BROTLI_DECODER_NEEDS_MORE_INPUT;
- }
- BROTLI_LOG_UINT(code);
-
- if (code == 0) {
- context_map[context_index++] = 0;
- continue;
- }
- if (code > max_run_length_prefix) {
- context_map[context_index++] =
- (uint8_t)(code - max_run_length_prefix);
- continue;
- }
- } else {
- skip_preamble = BROTLI_FALSE;
- }
- /* RLE sub-stage. */
- {
- uint32_t reps;
- if (!BrotliSafeReadBits(br, code, &reps)) {
- s->code = code;
- s->context_index = context_index;
- return BROTLI_DECODER_NEEDS_MORE_INPUT;
- }
- reps += 1U << code;
- BROTLI_LOG_UINT(reps);
- if (context_index + reps > context_map_size) {
- return
- BROTLI_FAILURE(BROTLI_DECODER_ERROR_FORMAT_CONTEXT_MAP_REPEAT);
- }
- do {
- context_map[context_index++] = 0;
- } while (--reps);
- }
- }
- }
- /* Fall through. */
-
- case BROTLI_STATE_CONTEXT_MAP_TRANSFORM: {
- uint32_t bits;
- if (!BrotliSafeReadBits(br, 1, &bits)) {
- s->substate_context_map = BROTLI_STATE_CONTEXT_MAP_TRANSFORM;
- return BROTLI_DECODER_NEEDS_MORE_INPUT;
- }
- if (bits != 0) {
- InverseMoveToFrontTransform(*context_map_arg, context_map_size, s);
- }
- s->substate_context_map = BROTLI_STATE_CONTEXT_MAP_NONE;
- return BROTLI_DECODER_SUCCESS;
- }
-
- default:
- return
- BROTLI_FAILURE(BROTLI_DECODER_ERROR_UNREACHABLE);
- }
-}
-
-/* Decodes a command or literal and updates block type ring-buffer.
- Reads 3..54 bits. */
-static BROTLI_INLINE BROTLI_BOOL DecodeBlockTypeAndLength(
- int safe, BrotliDecoderState* s, int tree_type) {
- uint32_t max_block_type = s->num_block_types[tree_type];
- const HuffmanCode* type_tree = &s->block_type_trees[
- tree_type * BROTLI_HUFFMAN_MAX_SIZE_258];
- const HuffmanCode* len_tree = &s->block_len_trees[
- tree_type * BROTLI_HUFFMAN_MAX_SIZE_26];
- BrotliBitReader* br = &s->br;
- uint32_t* ringbuffer = &s->block_type_rb[tree_type * 2];
- uint32_t block_type;
- if (max_block_type <= 1) {
- return BROTLI_FALSE;
- }
-
- /* Read 0..15 + 3..39 bits. */
- if (!safe) {
- block_type = ReadSymbol(type_tree, br);
- s->block_length[tree_type] = ReadBlockLength(len_tree, br);
- } else {
- BrotliBitReaderState memento;
- BrotliBitReaderSaveState(br, &memento);
- if (!SafeReadSymbol(type_tree, br, &block_type)) return BROTLI_FALSE;
- if (!SafeReadBlockLength(s, &s->block_length[tree_type], len_tree, br)) {
- s->substate_read_block_length = BROTLI_STATE_READ_BLOCK_LENGTH_NONE;
- BrotliBitReaderRestoreState(br, &memento);
- return BROTLI_FALSE;
- }
- }
-
- if (block_type == 1) {
- block_type = ringbuffer[1] + 1;
- } else if (block_type == 0) {
- block_type = ringbuffer[0];
- } else {
- block_type -= 2;
- }
- if (block_type >= max_block_type) {
- block_type -= max_block_type;
- }
- ringbuffer[0] = ringbuffer[1];
- ringbuffer[1] = block_type;
- return BROTLI_TRUE;
-}
-
-static BROTLI_INLINE void DetectTrivialLiteralBlockTypes(
- BrotliDecoderState* s) {
- size_t i;
- for (i = 0; i < 8; ++i) s->trivial_literal_contexts[i] = 0;
- for (i = 0; i < s->num_block_types[0]; i++) {
- size_t offset = i << BROTLI_LITERAL_CONTEXT_BITS;
- size_t error = 0;
- size_t sample = s->context_map[offset];
- size_t j;
- for (j = 0; j < (1u << BROTLI_LITERAL_CONTEXT_BITS);) {
- BROTLI_REPEAT(4, error |= s->context_map[offset + j++] ^ sample;)
- }
- if (error == 0) {
- s->trivial_literal_contexts[i >> 5] |= 1u << (i & 31);
- }
- }
-}
-
-static BROTLI_INLINE void PrepareLiteralDecoding(BrotliDecoderState* s) {
- uint8_t context_mode;
- size_t trivial;
- uint32_t block_type = s->block_type_rb[1];
- uint32_t context_offset = block_type << BROTLI_LITERAL_CONTEXT_BITS;
- s->context_map_slice = s->context_map + context_offset;
- trivial = s->trivial_literal_contexts[block_type >> 5];
- s->trivial_literal_context = (trivial >> (block_type & 31)) & 1;
- s->literal_htree = s->literal_hgroup.htrees[s->context_map_slice[0]];
- context_mode = s->context_modes[block_type] & 3;
- s->context_lookup = BROTLI_CONTEXT_LUT(context_mode);
-}
-
-/* Decodes the block type and updates the state for literal context.
- Reads 3..54 bits. */
-static BROTLI_INLINE BROTLI_BOOL DecodeLiteralBlockSwitchInternal(
- int safe, BrotliDecoderState* s) {
- if (!DecodeBlockTypeAndLength(safe, s, 0)) {
- return BROTLI_FALSE;
- }
- PrepareLiteralDecoding(s);
- return BROTLI_TRUE;
-}
-
-static void BROTLI_NOINLINE DecodeLiteralBlockSwitch(BrotliDecoderState* s) {
- DecodeLiteralBlockSwitchInternal(0, s);
-}
-
-static BROTLI_BOOL BROTLI_NOINLINE SafeDecodeLiteralBlockSwitch(
- BrotliDecoderState* s) {
- return DecodeLiteralBlockSwitchInternal(1, s);
-}
-
-/* Block switch for insert/copy length.
- Reads 3..54 bits. */
-static BROTLI_INLINE BROTLI_BOOL DecodeCommandBlockSwitchInternal(
- int safe, BrotliDecoderState* s) {
- if (!DecodeBlockTypeAndLength(safe, s, 1)) {
- return BROTLI_FALSE;
- }
- s->htree_command = s->insert_copy_hgroup.htrees[s->block_type_rb[3]];
- return BROTLI_TRUE;
-}
-
-static void BROTLI_NOINLINE DecodeCommandBlockSwitch(BrotliDecoderState* s) {
- DecodeCommandBlockSwitchInternal(0, s);
-}
-
-static BROTLI_BOOL BROTLI_NOINLINE SafeDecodeCommandBlockSwitch(
- BrotliDecoderState* s) {
- return DecodeCommandBlockSwitchInternal(1, s);
-}
-
-/* Block switch for distance codes.
- Reads 3..54 bits. */
-static BROTLI_INLINE BROTLI_BOOL DecodeDistanceBlockSwitchInternal(
- int safe, BrotliDecoderState* s) {
- if (!DecodeBlockTypeAndLength(safe, s, 2)) {
- return BROTLI_FALSE;
- }
- s->dist_context_map_slice = s->dist_context_map +
- (s->block_type_rb[5] << BROTLI_DISTANCE_CONTEXT_BITS);
- s->dist_htree_index = s->dist_context_map_slice[s->distance_context];
- return BROTLI_TRUE;
-}
-
-static void BROTLI_NOINLINE DecodeDistanceBlockSwitch(BrotliDecoderState* s) {
- DecodeDistanceBlockSwitchInternal(0, s);
-}
-
-static BROTLI_BOOL BROTLI_NOINLINE SafeDecodeDistanceBlockSwitch(
- BrotliDecoderState* s) {
- return DecodeDistanceBlockSwitchInternal(1, s);
-}
-
-static size_t UnwrittenBytes(const BrotliDecoderState* s, BROTLI_BOOL wrap) {
- size_t pos = wrap && s->pos > s->ringbuffer_size ?
- (size_t)s->ringbuffer_size : (size_t)(s->pos);
- size_t partial_pos_rb = (s->rb_roundtrips * (size_t)s->ringbuffer_size) + pos;
- return partial_pos_rb - s->partial_pos_out;
-}
-
-/* Dumps output.
- Returns BROTLI_DECODER_NEEDS_MORE_OUTPUT only if there is more output to push
- and either ring-buffer is as big as window size, or |force| is true. */
-static BrotliDecoderErrorCode BROTLI_NOINLINE WriteRingBuffer(
- BrotliDecoderState* s, size_t* available_out, uint8_t** next_out,
- size_t* total_out, BROTLI_BOOL force) {
- uint8_t* start =
- s->ringbuffer + (s->partial_pos_out & (size_t)s->ringbuffer_mask);
- size_t to_write = UnwrittenBytes(s, BROTLI_TRUE);
- size_t num_written = *available_out;
- if (num_written > to_write) {
- num_written = to_write;
- }
- if (s->meta_block_remaining_len < 0) {
- return BROTLI_FAILURE(BROTLI_DECODER_ERROR_FORMAT_BLOCK_LENGTH_1);
- }
- if (next_out && !*next_out) {
- *next_out = start;
- } else {
- if (next_out) {
- memcpy(*next_out, start, num_written);
- *next_out += num_written;
- }
- }
- *available_out -= num_written;
- BROTLI_LOG_UINT(to_write);
- BROTLI_LOG_UINT(num_written);
- s->partial_pos_out += num_written;
- if (total_out) {
- *total_out = s->partial_pos_out;
- }
- if (num_written < to_write) {
- if (s->ringbuffer_size == (1 << s->window_bits) || force) {
- return BROTLI_DECODER_NEEDS_MORE_OUTPUT;
- } else {
- return BROTLI_DECODER_SUCCESS;
- }
- }
- /* Wrap ring buffer only if it has reached its maximal size. */
- if (s->ringbuffer_size == (1 << s->window_bits) &&
- s->pos >= s->ringbuffer_size) {
- s->pos -= s->ringbuffer_size;
- s->rb_roundtrips++;
- s->should_wrap_ringbuffer = (size_t)s->pos != 0 ? 1 : 0;
- }
- return BROTLI_DECODER_SUCCESS;
-}
-
-static void BROTLI_NOINLINE WrapRingBuffer(BrotliDecoderState* s) {
- if (s->should_wrap_ringbuffer) {
- memcpy(s->ringbuffer, s->ringbuffer_end, (size_t)s->pos);
- s->should_wrap_ringbuffer = 0;
- }
-}
-
-/* Allocates ring-buffer.
-
- s->ringbuffer_size MUST be updated by BrotliCalculateRingBufferSize before
- this function is called.
-
- Last two bytes of ring-buffer are initialized to 0, so context calculation
- could be done uniformly for the first two and all other positions. */
-static BROTLI_BOOL BROTLI_NOINLINE BrotliEnsureRingBuffer(
- BrotliDecoderState* s) {
- uint8_t* old_ringbuffer = s->ringbuffer;
- if (s->ringbuffer_size == s->new_ringbuffer_size) {
- return BROTLI_TRUE;
- }
-
- s->ringbuffer = (uint8_t*)BROTLI_DECODER_ALLOC(s,
- (size_t)(s->new_ringbuffer_size) + kRingBufferWriteAheadSlack);
- if (s->ringbuffer == 0) {
- /* Restore previous value. */
- s->ringbuffer = old_ringbuffer;
- return BROTLI_FALSE;
- }
- s->ringbuffer[s->new_ringbuffer_size - 2] = 0;
- s->ringbuffer[s->new_ringbuffer_size - 1] = 0;
-
- if (!!old_ringbuffer) {
- memcpy(s->ringbuffer, old_ringbuffer, (size_t)s->pos);
- BROTLI_DECODER_FREE(s, old_ringbuffer);
- }
-
- s->ringbuffer_size = s->new_ringbuffer_size;
- s->ringbuffer_mask = s->new_ringbuffer_size - 1;
- s->ringbuffer_end = s->ringbuffer + s->ringbuffer_size;
-
- return BROTLI_TRUE;
-}
-
-static BrotliDecoderErrorCode BROTLI_NOINLINE CopyUncompressedBlockToOutput(
- size_t* available_out, uint8_t** next_out, size_t* total_out,
- BrotliDecoderState* s) {
- /* TODO: avoid allocation for single uncompressed block. */
- if (!BrotliEnsureRingBuffer(s)) {
- return BROTLI_FAILURE(BROTLI_DECODER_ERROR_ALLOC_RING_BUFFER_1);
- }
-
- /* State machine */
- for (;;) {
- switch (s->substate_uncompressed) {
- case BROTLI_STATE_UNCOMPRESSED_NONE: {
- int nbytes = (int)BrotliGetRemainingBytes(&s->br);
- if (nbytes > s->meta_block_remaining_len) {
- nbytes = s->meta_block_remaining_len;
- }
- if (s->pos + nbytes > s->ringbuffer_size) {
- nbytes = s->ringbuffer_size - s->pos;
- }
- /* Copy remaining bytes from s->br.buf_ to ring-buffer. */
- BrotliCopyBytes(&s->ringbuffer[s->pos], &s->br, (size_t)nbytes);
- s->pos += nbytes;
- s->meta_block_remaining_len -= nbytes;
- if (s->pos < 1 << s->window_bits) {
- if (s->meta_block_remaining_len == 0) {
- return BROTLI_DECODER_SUCCESS;
- }
- return BROTLI_DECODER_NEEDS_MORE_INPUT;
- }
- s->substate_uncompressed = BROTLI_STATE_UNCOMPRESSED_WRITE;
- }
- /* Fall through. */
-
- case BROTLI_STATE_UNCOMPRESSED_WRITE: {
- BrotliDecoderErrorCode result;
- result = WriteRingBuffer(
- s, available_out, next_out, total_out, BROTLI_FALSE);
- if (result != BROTLI_DECODER_SUCCESS) {
- return result;
- }
- if (s->ringbuffer_size == 1 << s->window_bits) {
- s->max_distance = s->max_backward_distance;
- }
- s->substate_uncompressed = BROTLI_STATE_UNCOMPRESSED_NONE;
- break;
- }
- }
- }
- BROTLI_DCHECK(0); /* Unreachable */
-}
-
-/* Calculates the smallest feasible ring buffer.
-
- If we know the data size is small, do not allocate more ring buffer
- size than needed to reduce memory usage.
-
- When this method is called, metablock size and flags MUST be decoded. */
-static void BROTLI_NOINLINE BrotliCalculateRingBufferSize(
- BrotliDecoderState* s) {
- int window_size = 1 << s->window_bits;
- int new_ringbuffer_size = window_size;
- /* We need at least 2 bytes of ring buffer size to get the last two
- bytes for context from there */
- int min_size = s->ringbuffer_size ? s->ringbuffer_size : 1024;
- int output_size;
-
- /* If maximum is already reached, no further extension is retired. */
- if (s->ringbuffer_size == window_size) {
- return;
- }
-
- /* Metadata blocks does not touch ring buffer. */
- if (s->is_metadata) {
- return;
- }
-
- if (!s->ringbuffer) {
- output_size = 0;
- } else {
- output_size = s->pos;
- }
- output_size += s->meta_block_remaining_len;
- min_size = min_size < output_size ? output_size : min_size;
-
- if (!!s->canny_ringbuffer_allocation) {
- /* Reduce ring buffer size to save memory when server is unscrupulous.
- In worst case memory usage might be 1.5x bigger for a short period of
- ring buffer reallocation. */
- while ((new_ringbuffer_size >> 1) >= min_size) {
- new_ringbuffer_size >>= 1;
- }
- }
-
- s->new_ringbuffer_size = new_ringbuffer_size;
-}
-
-/* Reads 1..256 2-bit context modes. */
-static BrotliDecoderErrorCode ReadContextModes(BrotliDecoderState* s) {
- BrotliBitReader* br = &s->br;
- int i = s->loop_counter;
-
- while (i < (int)s->num_block_types[0]) {
- uint32_t bits;
- if (!BrotliSafeReadBits(br, 2, &bits)) {
- s->loop_counter = i;
- return BROTLI_DECODER_NEEDS_MORE_INPUT;
- }
- s->context_modes[i] = (uint8_t)bits;
- BROTLI_LOG_ARRAY_INDEX(s->context_modes, i);
- i++;
- }
- return BROTLI_DECODER_SUCCESS;
-}
-
-static BROTLI_INLINE void TakeDistanceFromRingBuffer(BrotliDecoderState* s) {
- if (s->distance_code == 0) {
- --s->dist_rb_idx;
- s->distance_code = s->dist_rb[s->dist_rb_idx & 3];
- /* Compensate double distance-ring-buffer roll for dictionary items. */
- s->distance_context = 1;
- } else {
- int distance_code = s->distance_code << 1;
- /* kDistanceShortCodeIndexOffset has 2-bit values from LSB:
- 3, 2, 1, 0, 3, 3, 3, 3, 3, 3, 2, 2, 2, 2, 2, 2 */
- const uint32_t kDistanceShortCodeIndexOffset = 0xAAAFFF1B;
- /* kDistanceShortCodeValueOffset has 2-bit values from LSB:
- -0, 0,-0, 0,-1, 1,-2, 2,-3, 3,-1, 1,-2, 2,-3, 3 */
- const uint32_t kDistanceShortCodeValueOffset = 0xFA5FA500;
- int v = (s->dist_rb_idx +
- (int)(kDistanceShortCodeIndexOffset >> distance_code)) & 0x3;
- s->distance_code = s->dist_rb[v];
- v = (int)(kDistanceShortCodeValueOffset >> distance_code) & 0x3;
- if ((distance_code & 0x3) != 0) {
- s->distance_code += v;
- } else {
- s->distance_code -= v;
- if (s->distance_code <= 0) {
- /* A huge distance will cause a BROTLI_FAILURE() soon.
- This is a little faster than failing here. */
- s->distance_code = 0x7FFFFFFF;
- }
- }
- }
-}
-
-static BROTLI_INLINE BROTLI_BOOL SafeReadBits(
- BrotliBitReader* const br, uint32_t n_bits, uint32_t* val) {
- if (n_bits != 0) {
- return BrotliSafeReadBits(br, n_bits, val);
- } else {
- *val = 0;
- return BROTLI_TRUE;
- }
-}
-
-/* Precondition: s->distance_code < 0. */
-static BROTLI_INLINE BROTLI_BOOL ReadDistanceInternal(
- int safe, BrotliDecoderState* s, BrotliBitReader* br) {
- int distval;
- BrotliBitReaderState memento;
- HuffmanCode* distance_tree = s->distance_hgroup.htrees[s->dist_htree_index];
- if (!safe) {
- s->distance_code = (int)ReadSymbol(distance_tree, br);
- } else {
- uint32_t code;
- BrotliBitReaderSaveState(br, &memento);
- if (!SafeReadSymbol(distance_tree, br, &code)) {
- return BROTLI_FALSE;
- }
- s->distance_code = (int)code;
- }
- /* Convert the distance code to the actual distance by possibly
- looking up past distances from the s->ringbuffer. */
- s->distance_context = 0;
- if ((s->distance_code & ~0xF) == 0) {
- TakeDistanceFromRingBuffer(s);
- --s->block_length[2];
- return BROTLI_TRUE;
- }
- distval = s->distance_code - (int)s->num_direct_distance_codes;
- if (distval >= 0) {
- uint32_t nbits;
- int postfix;
- int offset;
- if (!safe && (s->distance_postfix_bits == 0)) {
- nbits = ((uint32_t)distval >> 1) + 1;
- offset = ((2 + (distval & 1)) << nbits) - 4;
- s->distance_code = (int)s->num_direct_distance_codes + offset +
- (int)BrotliReadBits(br, nbits);
- } else {
- /* This branch also works well when s->distance_postfix_bits == 0. */
- uint32_t bits;
- postfix = distval & s->distance_postfix_mask;
- distval >>= s->distance_postfix_bits;
- nbits = ((uint32_t)distval >> 1) + 1;
- if (safe) {
- if (!SafeReadBits(br, nbits, &bits)) {
- s->distance_code = -1; /* Restore precondition. */
- BrotliBitReaderRestoreState(br, &memento);
- return BROTLI_FALSE;
- }
- } else {
- bits = BrotliReadBits(br, nbits);
- }
- offset = ((2 + (distval & 1)) << nbits) - 4;
- s->distance_code = (int)s->num_direct_distance_codes +
- ((offset + (int)bits) << s->distance_postfix_bits) + postfix;
- }
- }
- s->distance_code = s->distance_code - BROTLI_NUM_DISTANCE_SHORT_CODES + 1;
- --s->block_length[2];
- return BROTLI_TRUE;
-}
-
-static BROTLI_INLINE void ReadDistance(
- BrotliDecoderState* s, BrotliBitReader* br) {
- ReadDistanceInternal(0, s, br);
-}
-
-static BROTLI_INLINE BROTLI_BOOL SafeReadDistance(
- BrotliDecoderState* s, BrotliBitReader* br) {
- return ReadDistanceInternal(1, s, br);
-}
-
-static BROTLI_INLINE BROTLI_BOOL ReadCommandInternal(
- int safe, BrotliDecoderState* s, BrotliBitReader* br, int* insert_length) {
- uint32_t cmd_code;
- uint32_t insert_len_extra = 0;
- uint32_t copy_length;
- CmdLutElement v;
- BrotliBitReaderState memento;
- if (!safe) {
- cmd_code = ReadSymbol(s->htree_command, br);
- } else {
- BrotliBitReaderSaveState(br, &memento);
- if (!SafeReadSymbol(s->htree_command, br, &cmd_code)) {
- return BROTLI_FALSE;
- }
- }
- v = kCmdLut[cmd_code];
- s->distance_code = v.distance_code;
- s->distance_context = v.context;
- s->dist_htree_index = s->dist_context_map_slice[s->distance_context];
- *insert_length = v.insert_len_offset;
- if (!safe) {
- if (BROTLI_PREDICT_FALSE(v.insert_len_extra_bits != 0)) {
- insert_len_extra = BrotliReadBits(br, v.insert_len_extra_bits);
- }
- copy_length = BrotliReadBits(br, v.copy_len_extra_bits);
- } else {
- if (!SafeReadBits(br, v.insert_len_extra_bits, &insert_len_extra) ||
- !SafeReadBits(br, v.copy_len_extra_bits, ©_length)) {
- BrotliBitReaderRestoreState(br, &memento);
- return BROTLI_FALSE;
- }
- }
- s->copy_length = (int)copy_length + v.copy_len_offset;
- --s->block_length[1];
- *insert_length += (int)insert_len_extra;
- return BROTLI_TRUE;
-}
-
-static BROTLI_INLINE void ReadCommand(
- BrotliDecoderState* s, BrotliBitReader* br, int* insert_length) {
- ReadCommandInternal(0, s, br, insert_length);
-}
-
-static BROTLI_INLINE BROTLI_BOOL SafeReadCommand(
- BrotliDecoderState* s, BrotliBitReader* br, int* insert_length) {
- return ReadCommandInternal(1, s, br, insert_length);
-}
-
-static BROTLI_INLINE BROTLI_BOOL CheckInputAmount(
- int safe, BrotliBitReader* const br, size_t num) {
- if (safe) {
- return BROTLI_TRUE;
- }
- return BrotliCheckInputAmount(br, num);
-}
-
-#define BROTLI_SAFE(METHOD) \
- { \
- if (safe) { \
- if (!Safe##METHOD) { \
- result = BROTLI_DECODER_NEEDS_MORE_INPUT; \
- goto saveStateAndReturn; \
- } \
- } else { \
- METHOD; \
- } \
- }
-
-static BROTLI_INLINE BrotliDecoderErrorCode ProcessCommandsInternal(
- int safe, BrotliDecoderState* s) {
- int pos = s->pos;
- int i = s->loop_counter;
- BrotliDecoderErrorCode result = BROTLI_DECODER_SUCCESS;
- BrotliBitReader* br = &s->br;
-
- if (!CheckInputAmount(safe, br, 28)) {
- result = BROTLI_DECODER_NEEDS_MORE_INPUT;
- goto saveStateAndReturn;
- }
- if (!safe) {
- BROTLI_UNUSED(BrotliWarmupBitReader(br));
- }
-
- /* Jump into state machine. */
- if (s->state == BROTLI_STATE_COMMAND_BEGIN) {
- goto CommandBegin;
- } else if (s->state == BROTLI_STATE_COMMAND_INNER) {
- goto CommandInner;
- } else if (s->state == BROTLI_STATE_COMMAND_POST_DECODE_LITERALS) {
- goto CommandPostDecodeLiterals;
- } else if (s->state == BROTLI_STATE_COMMAND_POST_WRAP_COPY) {
- goto CommandPostWrapCopy;
- } else {
- return BROTLI_FAILURE(BROTLI_DECODER_ERROR_UNREACHABLE);
- }
-
-CommandBegin:
- if (safe) {
- s->state = BROTLI_STATE_COMMAND_BEGIN;
- }
- if (!CheckInputAmount(safe, br, 28)) { /* 156 bits + 7 bytes */
- s->state = BROTLI_STATE_COMMAND_BEGIN;
- result = BROTLI_DECODER_NEEDS_MORE_INPUT;
- goto saveStateAndReturn;
- }
- if (BROTLI_PREDICT_FALSE(s->block_length[1] == 0)) {
- BROTLI_SAFE(DecodeCommandBlockSwitch(s));
- goto CommandBegin;
- }
- /* Read the insert/copy length in the command. */
- BROTLI_SAFE(ReadCommand(s, br, &i));
- BROTLI_LOG(("[ProcessCommandsInternal] pos = %d insert = %d copy = %d\n",
- pos, i, s->copy_length));
- if (i == 0) {
- goto CommandPostDecodeLiterals;
- }
- s->meta_block_remaining_len -= i;
-
-CommandInner:
- if (safe) {
- s->state = BROTLI_STATE_COMMAND_INNER;
- }
- /* Read the literals in the command. */
- if (s->trivial_literal_context) {
- uint32_t bits;
- uint32_t value;
- PreloadSymbol(safe, s->literal_htree, br, &bits, &value);
- do {
- if (!CheckInputAmount(safe, br, 28)) { /* 162 bits + 7 bytes */
- s->state = BROTLI_STATE_COMMAND_INNER;
- result = BROTLI_DECODER_NEEDS_MORE_INPUT;
- goto saveStateAndReturn;
- }
- if (BROTLI_PREDICT_FALSE(s->block_length[0] == 0)) {
- BROTLI_SAFE(DecodeLiteralBlockSwitch(s));
- PreloadSymbol(safe, s->literal_htree, br, &bits, &value);
- if (!s->trivial_literal_context) goto CommandInner;
- }
- if (!safe) {
- s->ringbuffer[pos] =
- (uint8_t)ReadPreloadedSymbol(s->literal_htree, br, &bits, &value);
- } else {
- uint32_t literal;
- if (!SafeReadSymbol(s->literal_htree, br, &literal)) {
- result = BROTLI_DECODER_NEEDS_MORE_INPUT;
- goto saveStateAndReturn;
- }
- s->ringbuffer[pos] = (uint8_t)literal;
- }
- --s->block_length[0];
- BROTLI_LOG_ARRAY_INDEX(s->ringbuffer, pos);
- ++pos;
- if (BROTLI_PREDICT_FALSE(pos == s->ringbuffer_size)) {
- s->state = BROTLI_STATE_COMMAND_INNER_WRITE;
- --i;
- goto saveStateAndReturn;
- }
- } while (--i != 0);
- } else {
- uint8_t p1 = s->ringbuffer[(pos - 1) & s->ringbuffer_mask];
- uint8_t p2 = s->ringbuffer[(pos - 2) & s->ringbuffer_mask];
- do {
- const HuffmanCode* hc;
- uint8_t context;
- if (!CheckInputAmount(safe, br, 28)) { /* 162 bits + 7 bytes */
- s->state = BROTLI_STATE_COMMAND_INNER;
- result = BROTLI_DECODER_NEEDS_MORE_INPUT;
- goto saveStateAndReturn;
- }
- if (BROTLI_PREDICT_FALSE(s->block_length[0] == 0)) {
- BROTLI_SAFE(DecodeLiteralBlockSwitch(s));
- if (s->trivial_literal_context) goto CommandInner;
- }
- context = BROTLI_CONTEXT(p1, p2, s->context_lookup);
- BROTLI_LOG_UINT(context);
- hc = s->literal_hgroup.htrees[s->context_map_slice[context]];
- p2 = p1;
- if (!safe) {
- p1 = (uint8_t)ReadSymbol(hc, br);
- } else {
- uint32_t literal;
- if (!SafeReadSymbol(hc, br, &literal)) {
- result = BROTLI_DECODER_NEEDS_MORE_INPUT;
- goto saveStateAndReturn;
- }
- p1 = (uint8_t)literal;
- }
- s->ringbuffer[pos] = p1;
- --s->block_length[0];
- BROTLI_LOG_UINT(s->context_map_slice[context]);
- BROTLI_LOG_ARRAY_INDEX(s->ringbuffer, pos & s->ringbuffer_mask);
- ++pos;
- if (BROTLI_PREDICT_FALSE(pos == s->ringbuffer_size)) {
- s->state = BROTLI_STATE_COMMAND_INNER_WRITE;
- --i;
- goto saveStateAndReturn;
- }
- } while (--i != 0);
- }
- BROTLI_LOG_UINT(s->meta_block_remaining_len);
- if (BROTLI_PREDICT_FALSE(s->meta_block_remaining_len <= 0)) {
- s->state = BROTLI_STATE_METABLOCK_DONE;
- goto saveStateAndReturn;
- }
-
-CommandPostDecodeLiterals:
- if (safe) {
- s->state = BROTLI_STATE_COMMAND_POST_DECODE_LITERALS;
- }
- if (s->distance_code >= 0) {
- /* Implicit distance case. */
- s->distance_context = s->distance_code ? 0 : 1;
- --s->dist_rb_idx;
- s->distance_code = s->dist_rb[s->dist_rb_idx & 3];
- } else {
- /* Read distance code in the command, unless it was implicitly zero. */
- if (BROTLI_PREDICT_FALSE(s->block_length[2] == 0)) {
- BROTLI_SAFE(DecodeDistanceBlockSwitch(s));
- }
- BROTLI_SAFE(ReadDistance(s, br));
- }
- BROTLI_LOG(("[ProcessCommandsInternal] pos = %d distance = %d\n",
- pos, s->distance_code));
- if (s->max_distance != s->max_backward_distance) {
- s->max_distance =
- (pos < s->max_backward_distance) ? pos : s->max_backward_distance;
- }
- i = s->copy_length;
- /* Apply copy of LZ77 back-reference, or static dictionary reference if
- the distance is larger than the max LZ77 distance */
- if (s->distance_code > s->max_distance) {
- /* The maximum allowed distance is BROTLI_MAX_ALLOWED_DISTANCE = 0x7FFFFFFC.
- With this choice, no signed overflow can occur after decoding
- a special distance code (e.g., after adding 3 to the last distance). */
- if (s->distance_code > BROTLI_MAX_ALLOWED_DISTANCE) {
- BROTLI_LOG(("Invalid backward reference. pos: %d distance: %d "
- "len: %d bytes left: %d\n",
- pos, s->distance_code, i, s->meta_block_remaining_len));
- return BROTLI_FAILURE(BROTLI_DECODER_ERROR_FORMAT_DISTANCE);
- }
- if (i >= BROTLI_MIN_DICTIONARY_WORD_LENGTH &&
- i <= BROTLI_MAX_DICTIONARY_WORD_LENGTH) {
- int address = s->distance_code - s->max_distance - 1;
- const BrotliDictionary* words = s->dictionary;
- const BrotliTransforms* transforms = s->transforms;
- int offset = (int)s->dictionary->offsets_by_length[i];
- uint32_t shift = s->dictionary->size_bits_by_length[i];
-
- int mask = (int)BitMask(shift);
- int word_idx = address & mask;
- int transform_idx = address >> shift;
- /* Compensate double distance-ring-buffer roll. */
- s->dist_rb_idx += s->distance_context;
- offset += word_idx * i;
- if (BROTLI_PREDICT_FALSE(!words->data)) {
- return BROTLI_FAILURE(BROTLI_DECODER_ERROR_DICTIONARY_NOT_SET);
- }
- if (transform_idx < (int)transforms->num_transforms) {
- const uint8_t* word = &words->data[offset];
- int len = i;
- if (transform_idx == transforms->cutOffTransforms[0]) {
- memcpy(&s->ringbuffer[pos], word, (size_t)len);
- BROTLI_LOG(("[ProcessCommandsInternal] dictionary word: [%.*s]\n",
- len, word));
- } else {
- len = BrotliTransformDictionaryWord(&s->ringbuffer[pos], word, len,
- transforms, transform_idx);
- BROTLI_LOG(("[ProcessCommandsInternal] dictionary word: [%.*s],"
- " transform_idx = %d, transformed: [%.*s]\n",
- i, word, transform_idx, len, &s->ringbuffer[pos]));
- }
- pos += len;
- s->meta_block_remaining_len -= len;
- if (pos >= s->ringbuffer_size) {
- s->state = BROTLI_STATE_COMMAND_POST_WRITE_1;
- goto saveStateAndReturn;
- }
- } else {
- BROTLI_LOG(("Invalid backward reference. pos: %d distance: %d "
- "len: %d bytes left: %d\n",
- pos, s->distance_code, i, s->meta_block_remaining_len));
- return BROTLI_FAILURE(BROTLI_DECODER_ERROR_FORMAT_TRANSFORM);
- }
- } else {
- BROTLI_LOG(("Invalid backward reference. pos: %d distance: %d "
- "len: %d bytes left: %d\n",
- pos, s->distance_code, i, s->meta_block_remaining_len));
- return BROTLI_FAILURE(BROTLI_DECODER_ERROR_FORMAT_DICTIONARY);
- }
- } else {
- int src_start = (pos - s->distance_code) & s->ringbuffer_mask;
- uint8_t* copy_dst = &s->ringbuffer[pos];
- uint8_t* copy_src = &s->ringbuffer[src_start];
- int dst_end = pos + i;
- int src_end = src_start + i;
- /* Update the recent distances cache. */
- s->dist_rb[s->dist_rb_idx & 3] = s->distance_code;
- ++s->dist_rb_idx;
- s->meta_block_remaining_len -= i;
- /* There are 32+ bytes of slack in the ring-buffer allocation.
- Also, we have 16 short codes, that make these 16 bytes irrelevant
- in the ring-buffer. Let's copy over them as a first guess. */
- memmove16(copy_dst, copy_src);
- if (src_end > pos && dst_end > src_start) {
- /* Regions intersect. */
- goto CommandPostWrapCopy;
- }
- if (dst_end >= s->ringbuffer_size || src_end >= s->ringbuffer_size) {
- /* At least one region wraps. */
- goto CommandPostWrapCopy;
- }
- pos += i;
- if (i > 16) {
- if (i > 32) {
- memcpy(copy_dst + 16, copy_src + 16, (size_t)(i - 16));
- } else {
- /* This branch covers about 45% cases.
- Fixed size short copy allows more compiler optimizations. */
- memmove16(copy_dst + 16, copy_src + 16);
- }
- }
- }
- BROTLI_LOG_UINT(s->meta_block_remaining_len);
- if (s->meta_block_remaining_len <= 0) {
- /* Next metablock, if any. */
- s->state = BROTLI_STATE_METABLOCK_DONE;
- goto saveStateAndReturn;
- } else {
- goto CommandBegin;
- }
-CommandPostWrapCopy:
- {
- int wrap_guard = s->ringbuffer_size - pos;
- while (--i >= 0) {
- s->ringbuffer[pos] =
- s->ringbuffer[(pos - s->distance_code) & s->ringbuffer_mask];
- ++pos;
- if (BROTLI_PREDICT_FALSE(--wrap_guard == 0)) {
- s->state = BROTLI_STATE_COMMAND_POST_WRITE_2;
- goto saveStateAndReturn;
- }
- }
- }
- if (s->meta_block_remaining_len <= 0) {
- /* Next metablock, if any. */
- s->state = BROTLI_STATE_METABLOCK_DONE;
- goto saveStateAndReturn;
- } else {
- goto CommandBegin;
- }
-
-saveStateAndReturn:
- s->pos = pos;
- s->loop_counter = i;
- return result;
-}
-
-#undef BROTLI_SAFE
-
-static BROTLI_NOINLINE BrotliDecoderErrorCode ProcessCommands(
- BrotliDecoderState* s) {
- return ProcessCommandsInternal(0, s);
-}
-
-static BROTLI_NOINLINE BrotliDecoderErrorCode SafeProcessCommands(
- BrotliDecoderState* s) {
- return ProcessCommandsInternal(1, s);
-}
-
-/* Returns the maximum number of distance symbols which can only represent
- distances not exceeding BROTLI_MAX_ALLOWED_DISTANCE. */
-static uint32_t BrotliMaxDistanceSymbol(uint32_t ndirect, uint32_t npostfix) {
- static const uint32_t bound[BROTLI_MAX_NPOSTFIX + 1] = {0, 4, 12, 28};
- static const uint32_t diff[BROTLI_MAX_NPOSTFIX + 1] = {73, 126, 228, 424};
- uint32_t postfix = 1U << npostfix;
- if (ndirect < bound[npostfix]) {
- return ndirect + diff[npostfix] + postfix;
- } else if (ndirect > bound[npostfix] + postfix) {
- return ndirect + diff[npostfix];
- } else {
- return bound[npostfix] + diff[npostfix] + postfix;
- }
-}
-
-BrotliDecoderResult BrotliDecoderDecompress(
- size_t encoded_size, const uint8_t* encoded_buffer, size_t* decoded_size,
- uint8_t* decoded_buffer) {
- BrotliDecoderState s;
- BrotliDecoderResult result;
- size_t total_out = 0;
- size_t available_in = encoded_size;
- const uint8_t* next_in = encoded_buffer;
- size_t available_out = *decoded_size;
- uint8_t* next_out = decoded_buffer;
- if (!BrotliDecoderStateInit(&s, 0, 0, 0)) {
- return BROTLI_DECODER_RESULT_ERROR;
- }
- result = BrotliDecoderDecompressStream(
- &s, &available_in, &next_in, &available_out, &next_out, &total_out);
- *decoded_size = total_out;
- BrotliDecoderStateCleanup(&s);
- if (result != BROTLI_DECODER_RESULT_SUCCESS) {
- result = BROTLI_DECODER_RESULT_ERROR;
- }
- return result;
-}
-
-/* Invariant: input stream is never overconsumed:
- - invalid input implies that the whole stream is invalid -> any amount of
- input could be read and discarded
- - when result is "needs more input", then at least one more byte is REQUIRED
- to complete decoding; all input data MUST be consumed by decoder, so
- client could swap the input buffer
- - when result is "needs more output" decoder MUST ensure that it doesn't
- hold more than 7 bits in bit reader; this saves client from swapping input
- buffer ahead of time
- - when result is "success" decoder MUST return all unused data back to input
- buffer; this is possible because the invariant is held on enter */
-BrotliDecoderResult BrotliDecoderDecompressStream(
- BrotliDecoderState* s, size_t* available_in, const uint8_t** next_in,
- size_t* available_out, uint8_t** next_out, size_t* total_out) {
- BrotliDecoderErrorCode result = BROTLI_DECODER_SUCCESS;
- BrotliBitReader* br = &s->br;
- /* Ensure that |total_out| is set, even if no data will ever be pushed out. */
- if (total_out) {
- *total_out = s->partial_pos_out;
- }
- /* Do not try to process further in a case of unrecoverable error. */
- if ((int)s->error_code < 0) {
- return BROTLI_DECODER_RESULT_ERROR;
- }
- if (*available_out && (!next_out || !*next_out)) {
- return SaveErrorCode(
- s, BROTLI_FAILURE(BROTLI_DECODER_ERROR_INVALID_ARGUMENTS));
- }
- if (!*available_out) next_out = 0;
- if (s->buffer_length == 0) { /* Just connect bit reader to input stream. */
- br->avail_in = *available_in;
- br->next_in = *next_in;
- } else {
- /* At least one byte of input is required. More than one byte of input may
- be required to complete the transaction -> reading more data must be
- done in a loop -> do it in a main loop. */
- result = BROTLI_DECODER_NEEDS_MORE_INPUT;
- br->next_in = &s->buffer.u8[0];
- }
- /* State machine */
- for (;;) {
- if (result != BROTLI_DECODER_SUCCESS) {
- /* Error, needs more input/output. */
- if (result == BROTLI_DECODER_NEEDS_MORE_INPUT) {
- if (s->ringbuffer != 0) { /* Pro-actively push output. */
- BrotliDecoderErrorCode intermediate_result = WriteRingBuffer(s,
- available_out, next_out, total_out, BROTLI_TRUE);
- /* WriteRingBuffer checks s->meta_block_remaining_len validity. */
- if ((int)intermediate_result < 0) {
- result = intermediate_result;
- break;
- }
- }
- if (s->buffer_length != 0) { /* Used with internal buffer. */
- if (br->avail_in == 0) {
- /* Successfully finished read transaction.
- Accumulator contains less than 8 bits, because internal buffer
- is expanded byte-by-byte until it is enough to complete read. */
- s->buffer_length = 0;
- /* Switch to input stream and restart. */
- result = BROTLI_DECODER_SUCCESS;
- br->avail_in = *available_in;
- br->next_in = *next_in;
- continue;
- } else if (*available_in != 0) {
- /* Not enough data in buffer, but can take one more byte from
- input stream. */
- result = BROTLI_DECODER_SUCCESS;
- s->buffer.u8[s->buffer_length] = **next_in;
- s->buffer_length++;
- br->avail_in = s->buffer_length;
- (*next_in)++;
- (*available_in)--;
- /* Retry with more data in buffer. */
- continue;
- }
- /* Can't finish reading and no more input. */
- break;
- } else { /* Input stream doesn't contain enough input. */
- /* Copy tail to internal buffer and return. */
- *next_in = br->next_in;
- *available_in = br->avail_in;
- while (*available_in) {
- s->buffer.u8[s->buffer_length] = **next_in;
- s->buffer_length++;
- (*next_in)++;
- (*available_in)--;
- }
- break;
- }
- /* Unreachable. */
- }
-
- /* Fail or needs more output. */
-
- if (s->buffer_length != 0) {
- /* Just consumed the buffered input and produced some output. Otherwise
- it would result in "needs more input". Reset internal buffer. */
- s->buffer_length = 0;
- } else {
- /* Using input stream in last iteration. When decoder switches to input
- stream it has less than 8 bits in accumulator, so it is safe to
- return unused accumulator bits there. */
- BrotliBitReaderUnload(br);
- *available_in = br->avail_in;
- *next_in = br->next_in;
- }
- break;
- }
- switch (s->state) {
- case BROTLI_STATE_UNINITED:
- /* Prepare to the first read. */
- if (!BrotliWarmupBitReader(br)) {
- result = BROTLI_DECODER_NEEDS_MORE_INPUT;
- break;
- }
- /* Decode window size. */
- result = DecodeWindowBits(s, br); /* Reads 1..8 bits. */
- if (result != BROTLI_DECODER_SUCCESS) {
- break;
- }
- if (s->large_window) {
- s->state = BROTLI_STATE_LARGE_WINDOW_BITS;
- break;
- }
- s->state = BROTLI_STATE_INITIALIZE;
- break;
-
- case BROTLI_STATE_LARGE_WINDOW_BITS:
- if (!BrotliSafeReadBits(br, 6, &s->window_bits)) {
- result = BROTLI_DECODER_NEEDS_MORE_INPUT;
- break;
- }
- if (s->window_bits < BROTLI_LARGE_MIN_WBITS ||
- s->window_bits > BROTLI_LARGE_MAX_WBITS) {
- result = BROTLI_FAILURE(BROTLI_DECODER_ERROR_FORMAT_WINDOW_BITS);
- break;
- }
- s->state = BROTLI_STATE_INITIALIZE;
- /* Fall through. */
-
- case BROTLI_STATE_INITIALIZE:
- BROTLI_LOG_UINT(s->window_bits);
- /* Maximum distance, see section 9.1. of the spec. */
- s->max_backward_distance = (1 << s->window_bits) - BROTLI_WINDOW_GAP;
-
- /* Allocate memory for both block_type_trees and block_len_trees. */
- s->block_type_trees = (HuffmanCode*)BROTLI_DECODER_ALLOC(s,
- sizeof(HuffmanCode) * 3 *
- (BROTLI_HUFFMAN_MAX_SIZE_258 + BROTLI_HUFFMAN_MAX_SIZE_26));
- if (s->block_type_trees == 0) {
- result = BROTLI_FAILURE(BROTLI_DECODER_ERROR_ALLOC_BLOCK_TYPE_TREES);
- break;
- }
- s->block_len_trees =
- s->block_type_trees + 3 * BROTLI_HUFFMAN_MAX_SIZE_258;
-
- s->state = BROTLI_STATE_METABLOCK_BEGIN;
- /* Fall through. */
-
- case BROTLI_STATE_METABLOCK_BEGIN:
- BrotliDecoderStateMetablockBegin(s);
- BROTLI_LOG_UINT(s->pos);
- s->state = BROTLI_STATE_METABLOCK_HEADER;
- /* Fall through. */
-
- case BROTLI_STATE_METABLOCK_HEADER:
- result = DecodeMetaBlockLength(s, br); /* Reads 2 - 31 bits. */
- if (result != BROTLI_DECODER_SUCCESS) {
- break;
- }
- BROTLI_LOG_UINT(s->is_last_metablock);
- BROTLI_LOG_UINT(s->meta_block_remaining_len);
- BROTLI_LOG_UINT(s->is_metadata);
- BROTLI_LOG_UINT(s->is_uncompressed);
- if (s->is_metadata || s->is_uncompressed) {
- if (!BrotliJumpToByteBoundary(br)) {
- result = BROTLI_FAILURE(BROTLI_DECODER_ERROR_FORMAT_PADDING_1);
- break;
- }
- }
- if (s->is_metadata) {
- s->state = BROTLI_STATE_METADATA;
- break;
- }
- if (s->meta_block_remaining_len == 0) {
- s->state = BROTLI_STATE_METABLOCK_DONE;
- break;
- }
- BrotliCalculateRingBufferSize(s);
- if (s->is_uncompressed) {
- s->state = BROTLI_STATE_UNCOMPRESSED;
- break;
- }
- s->loop_counter = 0;
- s->state = BROTLI_STATE_HUFFMAN_CODE_0;
- break;
-
- case BROTLI_STATE_UNCOMPRESSED: {
- result = CopyUncompressedBlockToOutput(
- available_out, next_out, total_out, s);
- if (result != BROTLI_DECODER_SUCCESS) {
- break;
- }
- s->state = BROTLI_STATE_METABLOCK_DONE;
- break;
- }
-
- case BROTLI_STATE_METADATA:
- for (; s->meta_block_remaining_len > 0; --s->meta_block_remaining_len) {
- uint32_t bits;
- /* Read one byte and ignore it. */
- if (!BrotliSafeReadBits(br, 8, &bits)) {
- result = BROTLI_DECODER_NEEDS_MORE_INPUT;
- break;
- }
- }
- if (result == BROTLI_DECODER_SUCCESS) {
- s->state = BROTLI_STATE_METABLOCK_DONE;
- }
- break;
-
- case BROTLI_STATE_HUFFMAN_CODE_0:
- if (s->loop_counter >= 3) {
- s->state = BROTLI_STATE_METABLOCK_HEADER_2;
- break;
- }
- /* Reads 1..11 bits. */
- result = DecodeVarLenUint8(s, br, &s->num_block_types[s->loop_counter]);
- if (result != BROTLI_DECODER_SUCCESS) {
- break;
- }
- s->num_block_types[s->loop_counter]++;
- BROTLI_LOG_UINT(s->num_block_types[s->loop_counter]);
- if (s->num_block_types[s->loop_counter] < 2) {
- s->loop_counter++;
- break;
- }
- s->state = BROTLI_STATE_HUFFMAN_CODE_1;
- /* Fall through. */
-
- case BROTLI_STATE_HUFFMAN_CODE_1: {
- uint32_t alphabet_size = s->num_block_types[s->loop_counter] + 2;
- int tree_offset = s->loop_counter * BROTLI_HUFFMAN_MAX_SIZE_258;
- result = ReadHuffmanCode(alphabet_size, alphabet_size,
- &s->block_type_trees[tree_offset], NULL, s);
- if (result != BROTLI_DECODER_SUCCESS) break;
- s->state = BROTLI_STATE_HUFFMAN_CODE_2;
- }
- /* Fall through. */
-
- case BROTLI_STATE_HUFFMAN_CODE_2: {
- uint32_t alphabet_size = BROTLI_NUM_BLOCK_LEN_SYMBOLS;
- int tree_offset = s->loop_counter * BROTLI_HUFFMAN_MAX_SIZE_26;
- result = ReadHuffmanCode(alphabet_size, alphabet_size,
- &s->block_len_trees[tree_offset], NULL, s);
- if (result != BROTLI_DECODER_SUCCESS) break;
- s->state = BROTLI_STATE_HUFFMAN_CODE_3;
- }
- /* Fall through. */
-
- case BROTLI_STATE_HUFFMAN_CODE_3: {
- int tree_offset = s->loop_counter * BROTLI_HUFFMAN_MAX_SIZE_26;
- if (!SafeReadBlockLength(s, &s->block_length[s->loop_counter],
- &s->block_len_trees[tree_offset], br)) {
- result = BROTLI_DECODER_NEEDS_MORE_INPUT;
- break;
- }
- BROTLI_LOG_UINT(s->block_length[s->loop_counter]);
- s->loop_counter++;
- s->state = BROTLI_STATE_HUFFMAN_CODE_0;
- break;
- }
-
- case BROTLI_STATE_METABLOCK_HEADER_2: {
- uint32_t bits;
- if (!BrotliSafeReadBits(br, 6, &bits)) {
- result = BROTLI_DECODER_NEEDS_MORE_INPUT;
- break;
- }
- s->distance_postfix_bits = bits & BitMask(2);
- bits >>= 2;
- s->num_direct_distance_codes = BROTLI_NUM_DISTANCE_SHORT_CODES +
- (bits << s->distance_postfix_bits);
- BROTLI_LOG_UINT(s->num_direct_distance_codes);
- BROTLI_LOG_UINT(s->distance_postfix_bits);
- s->distance_postfix_mask = (int)BitMask(s->distance_postfix_bits);
- s->context_modes =
- (uint8_t*)BROTLI_DECODER_ALLOC(s, (size_t)s->num_block_types[0]);
- if (s->context_modes == 0) {
- result = BROTLI_FAILURE(BROTLI_DECODER_ERROR_ALLOC_CONTEXT_MODES);
- break;
- }
- s->loop_counter = 0;
- s->state = BROTLI_STATE_CONTEXT_MODES;
- }
- /* Fall through. */
-
- case BROTLI_STATE_CONTEXT_MODES:
- result = ReadContextModes(s);
- if (result != BROTLI_DECODER_SUCCESS) {
- break;
- }
- s->state = BROTLI_STATE_CONTEXT_MAP_1;
- /* Fall through. */
-
- case BROTLI_STATE_CONTEXT_MAP_1:
- result = DecodeContextMap(
- s->num_block_types[0] << BROTLI_LITERAL_CONTEXT_BITS,
- &s->num_literal_htrees, &s->context_map, s);
- if (result != BROTLI_DECODER_SUCCESS) {
- break;
- }
- DetectTrivialLiteralBlockTypes(s);
- s->state = BROTLI_STATE_CONTEXT_MAP_2;
- /* Fall through. */
-
- case BROTLI_STATE_CONTEXT_MAP_2: {
- uint32_t num_direct_codes =
- s->num_direct_distance_codes - BROTLI_NUM_DISTANCE_SHORT_CODES;
- uint32_t num_distance_codes = BROTLI_DISTANCE_ALPHABET_SIZE(
- s->distance_postfix_bits, num_direct_codes,
- (s->large_window ? BROTLI_LARGE_MAX_DISTANCE_BITS :
- BROTLI_MAX_DISTANCE_BITS));
- uint32_t max_distance_symbol = (s->large_window ?
- BrotliMaxDistanceSymbol(
- num_direct_codes, s->distance_postfix_bits) :
- num_distance_codes);
- BROTLI_BOOL allocation_success = BROTLI_TRUE;
- result = DecodeContextMap(
- s->num_block_types[2] << BROTLI_DISTANCE_CONTEXT_BITS,
- &s->num_dist_htrees, &s->dist_context_map, s);
- if (result != BROTLI_DECODER_SUCCESS) {
- break;
- }
- allocation_success &= BrotliDecoderHuffmanTreeGroupInit(
- s, &s->literal_hgroup, BROTLI_NUM_LITERAL_SYMBOLS,
- BROTLI_NUM_LITERAL_SYMBOLS, s->num_literal_htrees);
- allocation_success &= BrotliDecoderHuffmanTreeGroupInit(
- s, &s->insert_copy_hgroup, BROTLI_NUM_COMMAND_SYMBOLS,
- BROTLI_NUM_COMMAND_SYMBOLS, s->num_block_types[1]);
- allocation_success &= BrotliDecoderHuffmanTreeGroupInit(
- s, &s->distance_hgroup, num_distance_codes,
- max_distance_symbol, s->num_dist_htrees);
- if (!allocation_success) {
- return SaveErrorCode(s,
- BROTLI_FAILURE(BROTLI_DECODER_ERROR_ALLOC_TREE_GROUPS));
- }
- s->loop_counter = 0;
- s->state = BROTLI_STATE_TREE_GROUP;
- }
- /* Fall through. */
-
- case BROTLI_STATE_TREE_GROUP: {
- HuffmanTreeGroup* hgroup = NULL;
- switch (s->loop_counter) {
- case 0: hgroup = &s->literal_hgroup; break;
- case 1: hgroup = &s->insert_copy_hgroup; break;
- case 2: hgroup = &s->distance_hgroup; break;
- default: return SaveErrorCode(s, BROTLI_FAILURE(
- BROTLI_DECODER_ERROR_UNREACHABLE));
- }
- result = HuffmanTreeGroupDecode(hgroup, s);
- if (result != BROTLI_DECODER_SUCCESS) break;
- s->loop_counter++;
- if (s->loop_counter >= 3) {
- PrepareLiteralDecoding(s);
- s->dist_context_map_slice = s->dist_context_map;
- s->htree_command = s->insert_copy_hgroup.htrees[0];
- if (!BrotliEnsureRingBuffer(s)) {
- result = BROTLI_FAILURE(BROTLI_DECODER_ERROR_ALLOC_RING_BUFFER_2);
- break;
- }
- s->state = BROTLI_STATE_COMMAND_BEGIN;
- }
- break;
- }
-
- case BROTLI_STATE_COMMAND_BEGIN:
- /* Fall through. */
- case BROTLI_STATE_COMMAND_INNER:
- /* Fall through. */
- case BROTLI_STATE_COMMAND_POST_DECODE_LITERALS:
- /* Fall through. */
- case BROTLI_STATE_COMMAND_POST_WRAP_COPY:
- result = ProcessCommands(s);
- if (result == BROTLI_DECODER_NEEDS_MORE_INPUT) {
- result = SafeProcessCommands(s);
- }
- break;
-
- case BROTLI_STATE_COMMAND_INNER_WRITE:
- /* Fall through. */
- case BROTLI_STATE_COMMAND_POST_WRITE_1:
- /* Fall through. */
- case BROTLI_STATE_COMMAND_POST_WRITE_2:
- result = WriteRingBuffer(
- s, available_out, next_out, total_out, BROTLI_FALSE);
- if (result != BROTLI_DECODER_SUCCESS) {
- break;
- }
- WrapRingBuffer(s);
- if (s->ringbuffer_size == 1 << s->window_bits) {
- s->max_distance = s->max_backward_distance;
- }
- if (s->state == BROTLI_STATE_COMMAND_POST_WRITE_1) {
- if (s->meta_block_remaining_len == 0) {
- /* Next metablock, if any. */
- s->state = BROTLI_STATE_METABLOCK_DONE;
- } else {
- s->state = BROTLI_STATE_COMMAND_BEGIN;
- }
- break;
- } else if (s->state == BROTLI_STATE_COMMAND_POST_WRITE_2) {
- s->state = BROTLI_STATE_COMMAND_POST_WRAP_COPY;
- } else { /* BROTLI_STATE_COMMAND_INNER_WRITE */
- if (s->loop_counter == 0) {
- if (s->meta_block_remaining_len == 0) {
- s->state = BROTLI_STATE_METABLOCK_DONE;
- } else {
- s->state = BROTLI_STATE_COMMAND_POST_DECODE_LITERALS;
- }
- break;
- }
- s->state = BROTLI_STATE_COMMAND_INNER;
- }
- break;
-
- case BROTLI_STATE_METABLOCK_DONE:
- if (s->meta_block_remaining_len < 0) {
- result = BROTLI_FAILURE(BROTLI_DECODER_ERROR_FORMAT_BLOCK_LENGTH_2);
- break;
- }
- BrotliDecoderStateCleanupAfterMetablock(s);
- if (!s->is_last_metablock) {
- s->state = BROTLI_STATE_METABLOCK_BEGIN;
- break;
- }
- if (!BrotliJumpToByteBoundary(br)) {
- result = BROTLI_FAILURE(BROTLI_DECODER_ERROR_FORMAT_PADDING_2);
- break;
- }
- if (s->buffer_length == 0) {
- BrotliBitReaderUnload(br);
- *available_in = br->avail_in;
- *next_in = br->next_in;
- }
- s->state = BROTLI_STATE_DONE;
- /* Fall through. */
-
- case BROTLI_STATE_DONE:
- if (s->ringbuffer != 0) {
- result = WriteRingBuffer(
- s, available_out, next_out, total_out, BROTLI_TRUE);
- if (result != BROTLI_DECODER_SUCCESS) {
- break;
- }
- }
- return SaveErrorCode(s, result);
- }
- }
- return SaveErrorCode(s, result);
-}
-
-BROTLI_BOOL BrotliDecoderHasMoreOutput(const BrotliDecoderState* s) {
- /* After unrecoverable error remaining output is considered nonsensical. */
- if ((int)s->error_code < 0) {
- return BROTLI_FALSE;
- }
- return TO_BROTLI_BOOL(
- s->ringbuffer != 0 && UnwrittenBytes(s, BROTLI_FALSE) != 0);
-}
-
-const uint8_t* BrotliDecoderTakeOutput(BrotliDecoderState* s, size_t* size) {
- uint8_t* result = 0;
- size_t available_out = *size ? *size : 1u << 24;
- size_t requested_out = available_out;
- BrotliDecoderErrorCode status;
- if ((s->ringbuffer == 0) || ((int)s->error_code < 0)) {
- *size = 0;
- return 0;
- }
- WrapRingBuffer(s);
- status = WriteRingBuffer(s, &available_out, &result, 0, BROTLI_TRUE);
- /* Either WriteRingBuffer returns those "success" codes... */
- if (status == BROTLI_DECODER_SUCCESS ||
- status == BROTLI_DECODER_NEEDS_MORE_OUTPUT) {
- *size = requested_out - available_out;
- } else {
- /* ... or stream is broken. Normally this should be caught by
- BrotliDecoderDecompressStream, this is just a safeguard. */
- if ((int)status < 0) SaveErrorCode(s, status);
- *size = 0;
- result = 0;
- }
- return result;
-}
-
-BROTLI_BOOL BrotliDecoderIsUsed(const BrotliDecoderState* s) {
- return TO_BROTLI_BOOL(s->state != BROTLI_STATE_UNINITED ||
- BrotliGetAvailableBits(&s->br) != 0);
-}
-
-BROTLI_BOOL BrotliDecoderIsFinished(const BrotliDecoderState* s) {
- return TO_BROTLI_BOOL(s->state == BROTLI_STATE_DONE) &&
- !BrotliDecoderHasMoreOutput(s);
-}
-
-BrotliDecoderErrorCode BrotliDecoderGetErrorCode(const BrotliDecoderState* s) {
- return (BrotliDecoderErrorCode)s->error_code;
-}
-
-const char* BrotliDecoderErrorString(BrotliDecoderErrorCode c) {
- switch (c) {
-#define BROTLI_ERROR_CODE_CASE_(PREFIX, NAME, CODE) \
- case BROTLI_DECODER ## PREFIX ## NAME: return #NAME;
-#define BROTLI_NOTHING_
- BROTLI_DECODER_ERROR_CODES_LIST(BROTLI_ERROR_CODE_CASE_, BROTLI_NOTHING_)
-#undef BROTLI_ERROR_CODE_CASE_
-#undef BROTLI_NOTHING_
- default: return "INVALID";
- }
-}
-
-uint32_t BrotliDecoderVersion() {
- return BROTLI_VERSION;
-}
-
-#if defined(__cplusplus) || defined(c_plusplus)
-} /* extern "C" */
-#endif
diff --git a/BaseTools/Source/C/BrotliCompress/dec/huffman.c b/BaseTools/Source/C/BrotliCompress/dec/huffman.c
deleted file mode 100644
index 4ad0dc6bd0eb..000000000000
--- a/BaseTools/Source/C/BrotliCompress/dec/huffman.c
+++ /dev/null
@@ -1,356 +0,0 @@
-/* Copyright 2013 Google Inc. All Rights Reserved.
-
- Distributed under MIT license.
- See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
-*/
-
-/* Utilities for building Huffman decoding tables. */
-
-#include "./huffman.h"
-
-#include <string.h> /* memcpy, memset */
-
-#include "../common/constants.h"
-#include "../common/platform.h"
-#include <brotli/types.h>
-
-#if defined(__cplusplus) || defined(c_plusplus)
-extern "C" {
-#endif
-
-#define BROTLI_REVERSE_BITS_MAX 8
-
-#if defined(BROTLI_RBIT)
-#define BROTLI_REVERSE_BITS_BASE \
- ((sizeof(brotli_reg_t) << 3) - BROTLI_REVERSE_BITS_MAX)
-#else
-#define BROTLI_REVERSE_BITS_BASE 0
-static uint8_t kReverseBits[1 << BROTLI_REVERSE_BITS_MAX] = {
- 0x00, 0x80, 0x40, 0xC0, 0x20, 0xA0, 0x60, 0xE0,
- 0x10, 0x90, 0x50, 0xD0, 0x30, 0xB0, 0x70, 0xF0,
- 0x08, 0x88, 0x48, 0xC8, 0x28, 0xA8, 0x68, 0xE8,
- 0x18, 0x98, 0x58, 0xD8, 0x38, 0xB8, 0x78, 0xF8,
- 0x04, 0x84, 0x44, 0xC4, 0x24, 0xA4, 0x64, 0xE4,
- 0x14, 0x94, 0x54, 0xD4, 0x34, 0xB4, 0x74, 0xF4,
- 0x0C, 0x8C, 0x4C, 0xCC, 0x2C, 0xAC, 0x6C, 0xEC,
- 0x1C, 0x9C, 0x5C, 0xDC, 0x3C, 0xBC, 0x7C, 0xFC,
- 0x02, 0x82, 0x42, 0xC2, 0x22, 0xA2, 0x62, 0xE2,
- 0x12, 0x92, 0x52, 0xD2, 0x32, 0xB2, 0x72, 0xF2,
- 0x0A, 0x8A, 0x4A, 0xCA, 0x2A, 0xAA, 0x6A, 0xEA,
- 0x1A, 0x9A, 0x5A, 0xDA, 0x3A, 0xBA, 0x7A, 0xFA,
- 0x06, 0x86, 0x46, 0xC6, 0x26, 0xA6, 0x66, 0xE6,
- 0x16, 0x96, 0x56, 0xD6, 0x36, 0xB6, 0x76, 0xF6,
- 0x0E, 0x8E, 0x4E, 0xCE, 0x2E, 0xAE, 0x6E, 0xEE,
- 0x1E, 0x9E, 0x5E, 0xDE, 0x3E, 0xBE, 0x7E, 0xFE,
- 0x01, 0x81, 0x41, 0xC1, 0x21, 0xA1, 0x61, 0xE1,
- 0x11, 0x91, 0x51, 0xD1, 0x31, 0xB1, 0x71, 0xF1,
- 0x09, 0x89, 0x49, 0xC9, 0x29, 0xA9, 0x69, 0xE9,
- 0x19, 0x99, 0x59, 0xD9, 0x39, 0xB9, 0x79, 0xF9,
- 0x05, 0x85, 0x45, 0xC5, 0x25, 0xA5, 0x65, 0xE5,
- 0x15, 0x95, 0x55, 0xD5, 0x35, 0xB5, 0x75, 0xF5,
- 0x0D, 0x8D, 0x4D, 0xCD, 0x2D, 0xAD, 0x6D, 0xED,
- 0x1D, 0x9D, 0x5D, 0xDD, 0x3D, 0xBD, 0x7D, 0xFD,
- 0x03, 0x83, 0x43, 0xC3, 0x23, 0xA3, 0x63, 0xE3,
- 0x13, 0x93, 0x53, 0xD3, 0x33, 0xB3, 0x73, 0xF3,
- 0x0B, 0x8B, 0x4B, 0xCB, 0x2B, 0xAB, 0x6B, 0xEB,
- 0x1B, 0x9B, 0x5B, 0xDB, 0x3B, 0xBB, 0x7B, 0xFB,
- 0x07, 0x87, 0x47, 0xC7, 0x27, 0xA7, 0x67, 0xE7,
- 0x17, 0x97, 0x57, 0xD7, 0x37, 0xB7, 0x77, 0xF7,
- 0x0F, 0x8F, 0x4F, 0xCF, 0x2F, 0xAF, 0x6F, 0xEF,
- 0x1F, 0x9F, 0x5F, 0xDF, 0x3F, 0xBF, 0x7F, 0xFF
-};
-#endif /* BROTLI_RBIT */
-
-#define BROTLI_REVERSE_BITS_LOWEST \
- ((brotli_reg_t)1 << (BROTLI_REVERSE_BITS_MAX - 1 + BROTLI_REVERSE_BITS_BASE))
-
-/* Returns reverse(num >> BROTLI_REVERSE_BITS_BASE, BROTLI_REVERSE_BITS_MAX),
- where reverse(value, len) is the bit-wise reversal of the len least
- significant bits of value. */
-static BROTLI_INLINE brotli_reg_t BrotliReverseBits(brotli_reg_t num) {
-#if defined(BROTLI_RBIT)
- return BROTLI_RBIT(num);
-#else
- return kReverseBits[num];
-#endif
-}
-
-/* Stores code in table[0], table[step], table[2*step], ..., table[end] */
-/* Assumes that end is an integer multiple of step */
-static BROTLI_INLINE void ReplicateValue(HuffmanCode* table,
- int step, int end,
- HuffmanCode code) {
- do {
- end -= step;
- table[end] = code;
- } while (end > 0);
-}
-
-/* Returns the table width of the next 2nd level table. |count| is the histogram
- of bit lengths for the remaining symbols, |len| is the code length of the
- next processed symbol. */
-static BROTLI_INLINE int NextTableBitSize(const uint16_t* const count,
- int len, int root_bits) {
- int left = 1 << (len - root_bits);
- while (len < BROTLI_HUFFMAN_MAX_CODE_LENGTH) {
- left -= count[len];
- if (left <= 0) break;
- ++len;
- left <<= 1;
- }
- return len - root_bits;
-}
-
-void BrotliBuildCodeLengthsHuffmanTable(HuffmanCode* table,
- const uint8_t* const code_lengths,
- uint16_t* count) {
- HuffmanCode code; /* current table entry */
- int symbol; /* symbol index in original or sorted table */
- brotli_reg_t key; /* prefix code */
- brotli_reg_t key_step; /* prefix code addend */
- int step; /* step size to replicate values in current table */
- int table_size; /* size of current table */
- int sorted[BROTLI_CODE_LENGTH_CODES]; /* symbols sorted by code length */
- /* offsets in sorted table for each length */
- int offset[BROTLI_HUFFMAN_MAX_CODE_LENGTH_CODE_LENGTH + 1];
- int bits;
- int bits_count;
- BROTLI_DCHECK(BROTLI_HUFFMAN_MAX_CODE_LENGTH_CODE_LENGTH <=
- BROTLI_REVERSE_BITS_MAX);
-
- /* Generate offsets into sorted symbol table by code length. */
- symbol = -1;
- bits = 1;
- BROTLI_REPEAT(BROTLI_HUFFMAN_MAX_CODE_LENGTH_CODE_LENGTH, {
- symbol += count[bits];
- offset[bits] = symbol;
- bits++;
- });
- /* Symbols with code length 0 are placed after all other symbols. */
- offset[0] = BROTLI_CODE_LENGTH_CODES - 1;
-
- /* Sort symbols by length, by symbol order within each length. */
- symbol = BROTLI_CODE_LENGTH_CODES;
- do {
- BROTLI_REPEAT(6, {
- symbol--;
- sorted[offset[code_lengths[symbol]]--] = symbol;
- });
- } while (symbol != 0);
-
- table_size = 1 << BROTLI_HUFFMAN_MAX_CODE_LENGTH_CODE_LENGTH;
-
- /* Special case: all symbols but one have 0 code length. */
- if (offset[0] == 0) {
- code.bits = 0;
- code.value = (uint16_t)sorted[0];
- for (key = 0; key < (brotli_reg_t)table_size; ++key) {
- table[key] = code;
- }
- return;
- }
-
- /* Fill in table. */
- key = 0;
- key_step = BROTLI_REVERSE_BITS_LOWEST;
- symbol = 0;
- bits = 1;
- step = 2;
- do {
- code.bits = (uint8_t)bits;
- for (bits_count = count[bits]; bits_count != 0; --bits_count) {
- code.value = (uint16_t)sorted[symbol++];
- ReplicateValue(&table[BrotliReverseBits(key)], step, table_size, code);
- key += key_step;
- }
- step <<= 1;
- key_step >>= 1;
- } while (++bits <= BROTLI_HUFFMAN_MAX_CODE_LENGTH_CODE_LENGTH);
-}
-
-uint32_t BrotliBuildHuffmanTable(HuffmanCode* root_table,
- int root_bits,
- const uint16_t* const symbol_lists,
- uint16_t* count) {
- HuffmanCode code; /* current table entry */
- HuffmanCode* table; /* next available space in table */
- int len; /* current code length */
- int symbol; /* symbol index in original or sorted table */
- brotli_reg_t key; /* prefix code */
- brotli_reg_t key_step; /* prefix code addend */
- brotli_reg_t sub_key; /* 2nd level table prefix code */
- brotli_reg_t sub_key_step; /* 2nd level table prefix code addend */
- int step; /* step size to replicate values in current table */
- int table_bits; /* key length of current table */
- int table_size; /* size of current table */
- int total_size; /* sum of root table size and 2nd level table sizes */
- int max_length = -1;
- int bits;
- int bits_count;
-
- BROTLI_DCHECK(root_bits <= BROTLI_REVERSE_BITS_MAX);
- BROTLI_DCHECK(BROTLI_HUFFMAN_MAX_CODE_LENGTH - root_bits <=
- BROTLI_REVERSE_BITS_MAX);
-
- while (symbol_lists[max_length] == 0xFFFF) max_length--;
- max_length += BROTLI_HUFFMAN_MAX_CODE_LENGTH + 1;
-
- table = root_table;
- table_bits = root_bits;
- table_size = 1 << table_bits;
- total_size = table_size;
-
- /* Fill in the root table. Reduce the table size to if possible,
- and create the repetitions by memcpy. */
- if (table_bits > max_length) {
- table_bits = max_length;
- table_size = 1 << table_bits;
- }
- key = 0;
- key_step = BROTLI_REVERSE_BITS_LOWEST;
- bits = 1;
- step = 2;
- do {
- code.bits = (uint8_t)bits;
- symbol = bits - (BROTLI_HUFFMAN_MAX_CODE_LENGTH + 1);
- for (bits_count = count[bits]; bits_count != 0; --bits_count) {
- symbol = symbol_lists[symbol];
- code.value = (uint16_t)symbol;
- ReplicateValue(&table[BrotliReverseBits(key)], step, table_size, code);
- key += key_step;
- }
- step <<= 1;
- key_step >>= 1;
- } while (++bits <= table_bits);
-
- /* If root_bits != table_bits then replicate to fill the remaining slots. */
- while (total_size != table_size) {
- memcpy(&table[table_size], &table[0],
- (size_t)table_size * sizeof(table[0]));
- table_size <<= 1;
- }
-
- /* Fill in 2nd level tables and add pointers to root table. */
- key_step = BROTLI_REVERSE_BITS_LOWEST >> (root_bits - 1);
- sub_key = (BROTLI_REVERSE_BITS_LOWEST << 1);
- sub_key_step = BROTLI_REVERSE_BITS_LOWEST;
- for (len = root_bits + 1, step = 2; len <= max_length; ++len) {
- symbol = len - (BROTLI_HUFFMAN_MAX_CODE_LENGTH + 1);
- for (; count[len] != 0; --count[len]) {
- if (sub_key == (BROTLI_REVERSE_BITS_LOWEST << 1U)) {
- table += table_size;
- table_bits = NextTableBitSize(count, len, root_bits);
- table_size = 1 << table_bits;
- total_size += table_size;
- sub_key = BrotliReverseBits(key);
- key += key_step;
- root_table[sub_key].bits = (uint8_t)(table_bits + root_bits);
- root_table[sub_key].value =
- (uint16_t)(((size_t)(table - root_table)) - sub_key);
- sub_key = 0;
- }
- code.bits = (uint8_t)(len - root_bits);
- symbol = symbol_lists[symbol];
- code.value = (uint16_t)symbol;
- ReplicateValue(
- &table[BrotliReverseBits(sub_key)], step, table_size, code);
- sub_key += sub_key_step;
- }
- step <<= 1;
- sub_key_step >>= 1;
- }
- return (uint32_t)total_size;
-}
-
-uint32_t BrotliBuildSimpleHuffmanTable(HuffmanCode* table,
- int root_bits,
- uint16_t* val,
- uint32_t num_symbols) {
- uint32_t table_size = 1;
- const uint32_t goal_size = 1U << root_bits;
- switch (num_symbols) {
- case 0:
- table[0].bits = 0;
- table[0].value = val[0];
- break;
- case 1:
- table[0].bits = 1;
- table[1].bits = 1;
- if (val[1] > val[0]) {
- table[0].value = val[0];
- table[1].value = val[1];
- } else {
- table[0].value = val[1];
- table[1].value = val[0];
- }
- table_size = 2;
- break;
- case 2:
- table[0].bits = 1;
- table[0].value = val[0];
- table[2].bits = 1;
- table[2].value = val[0];
- if (val[2] > val[1]) {
- table[1].value = val[1];
- table[3].value = val[2];
- } else {
- table[1].value = val[2];
- table[3].value = val[1];
- }
- table[1].bits = 2;
- table[3].bits = 2;
- table_size = 4;
- break;
- case 3: {
- int i, k;
- for (i = 0; i < 3; ++i) {
- for (k = i + 1; k < 4; ++k) {
- if (val[k] < val[i]) {
- uint16_t t = val[k];
- val[k] = val[i];
- val[i] = t;
- }
- }
- }
- for (i = 0; i < 4; ++i) {
- table[i].bits = 2;
- }
- table[0].value = val[0];
- table[2].value = val[1];
- table[1].value = val[2];
- table[3].value = val[3];
- table_size = 4;
- break;
- }
- case 4: {
- int i;
- if (val[3] < val[2]) {
- uint16_t t = val[3];
- val[3] = val[2];
- val[2] = t;
- }
- for (i = 0; i < 7; ++i) {
- table[i].value = val[0];
- table[i].bits = (uint8_t)(1 + (i & 1));
- }
- table[1].value = val[1];
- table[3].value = val[2];
- table[5].value = val[1];
- table[7].value = val[3];
- table[3].bits = 3;
- table[7].bits = 3;
- table_size = 8;
- break;
- }
- }
- while (table_size != goal_size) {
- memcpy(&table[table_size], &table[0],
- (size_t)table_size * sizeof(table[0]));
- table_size <<= 1;
- }
- return goal_size;
-}
-
-#if defined(__cplusplus) || defined(c_plusplus)
-} /* extern "C" */
-#endif
diff --git a/BaseTools/Source/C/BrotliCompress/dec/state.c b/BaseTools/Source/C/BrotliCompress/dec/state.c
deleted file mode 100644
index 88ecfb68b684..000000000000
--- a/BaseTools/Source/C/BrotliCompress/dec/state.c
+++ /dev/null
@@ -1,164 +0,0 @@
-/* Copyright 2015 Google Inc. All Rights Reserved.
-
- Distributed under MIT license.
- See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
-*/
-
-#include "./state.h"
-
-#include <stdlib.h> /* free, malloc */
-
-#include <brotli/types.h>
-#include "./huffman.h"
-
-#if defined(__cplusplus) || defined(c_plusplus)
-extern "C" {
-#endif
-
-BROTLI_BOOL BrotliDecoderStateInit(BrotliDecoderState* s,
- brotli_alloc_func alloc_func, brotli_free_func free_func, void* opaque) {
- if (!alloc_func) {
- s->alloc_func = BrotliDefaultAllocFunc;
- s->free_func = BrotliDefaultFreeFunc;
- s->memory_manager_opaque = 0;
- } else {
- s->alloc_func = alloc_func;
- s->free_func = free_func;
- s->memory_manager_opaque = opaque;
- }
-
- s->error_code = 0; /* BROTLI_DECODER_NO_ERROR */
-
- BrotliInitBitReader(&s->br);
- s->state = BROTLI_STATE_UNINITED;
- s->large_window = 0;
- s->substate_metablock_header = BROTLI_STATE_METABLOCK_HEADER_NONE;
- s->substate_tree_group = BROTLI_STATE_TREE_GROUP_NONE;
- s->substate_context_map = BROTLI_STATE_CONTEXT_MAP_NONE;
- s->substate_uncompressed = BROTLI_STATE_UNCOMPRESSED_NONE;
- s->substate_huffman = BROTLI_STATE_HUFFMAN_NONE;
- s->substate_decode_uint8 = BROTLI_STATE_DECODE_UINT8_NONE;
- s->substate_read_block_length = BROTLI_STATE_READ_BLOCK_LENGTH_NONE;
-
- s->buffer_length = 0;
- s->loop_counter = 0;
- s->pos = 0;
- s->rb_roundtrips = 0;
- s->partial_pos_out = 0;
-
- s->block_type_trees = NULL;
- s->block_len_trees = NULL;
- s->ringbuffer = NULL;
- s->ringbuffer_size = 0;
- s->new_ringbuffer_size = 0;
- s->ringbuffer_mask = 0;
-
- s->context_map = NULL;
- s->context_modes = NULL;
- s->dist_context_map = NULL;
- s->context_map_slice = NULL;
- s->dist_context_map_slice = NULL;
-
- s->sub_loop_counter = 0;
-
- s->literal_hgroup.codes = NULL;
- s->literal_hgroup.htrees = NULL;
- s->insert_copy_hgroup.codes = NULL;
- s->insert_copy_hgroup.htrees = NULL;
- s->distance_hgroup.codes = NULL;
- s->distance_hgroup.htrees = NULL;
-
- s->is_last_metablock = 0;
- s->is_uncompressed = 0;
- s->is_metadata = 0;
- s->should_wrap_ringbuffer = 0;
- s->canny_ringbuffer_allocation = 1;
-
- s->window_bits = 0;
- s->max_distance = 0;
- s->dist_rb[0] = 16;
- s->dist_rb[1] = 15;
- s->dist_rb[2] = 11;
- s->dist_rb[3] = 4;
- s->dist_rb_idx = 0;
- s->block_type_trees = NULL;
- s->block_len_trees = NULL;
-
- /* Make small negative indexes addressable. */
- s->symbol_lists = &s->symbols_lists_array[BROTLI_HUFFMAN_MAX_CODE_LENGTH + 1];
-
- s->mtf_upper_bound = 63;
-
- s->dictionary = BrotliGetDictionary();
- s->transforms = BrotliGetTransforms();
-
- return BROTLI_TRUE;
-}
-
-void BrotliDecoderStateMetablockBegin(BrotliDecoderState* s) {
- s->meta_block_remaining_len = 0;
- s->block_length[0] = 1U << 24;
- s->block_length[1] = 1U << 24;
- s->block_length[2] = 1U << 24;
- s->num_block_types[0] = 1;
- s->num_block_types[1] = 1;
- s->num_block_types[2] = 1;
- s->block_type_rb[0] = 1;
- s->block_type_rb[1] = 0;
- s->block_type_rb[2] = 1;
- s->block_type_rb[3] = 0;
- s->block_type_rb[4] = 1;
- s->block_type_rb[5] = 0;
- s->context_map = NULL;
- s->context_modes = NULL;
- s->dist_context_map = NULL;
- s->context_map_slice = NULL;
- s->literal_htree = NULL;
- s->dist_context_map_slice = NULL;
- s->dist_htree_index = 0;
- s->context_lookup = NULL;
- s->literal_hgroup.codes = NULL;
- s->literal_hgroup.htrees = NULL;
- s->insert_copy_hgroup.codes = NULL;
- s->insert_copy_hgroup.htrees = NULL;
- s->distance_hgroup.codes = NULL;
- s->distance_hgroup.htrees = NULL;
-}
-
-void BrotliDecoderStateCleanupAfterMetablock(BrotliDecoderState* s) {
- BROTLI_DECODER_FREE(s, s->context_modes);
- BROTLI_DECODER_FREE(s, s->context_map);
- BROTLI_DECODER_FREE(s, s->dist_context_map);
- BROTLI_DECODER_FREE(s, s->literal_hgroup.htrees);
- BROTLI_DECODER_FREE(s, s->insert_copy_hgroup.htrees);
- BROTLI_DECODER_FREE(s, s->distance_hgroup.htrees);
-}
-
-void BrotliDecoderStateCleanup(BrotliDecoderState* s) {
- BrotliDecoderStateCleanupAfterMetablock(s);
-
- BROTLI_DECODER_FREE(s, s->ringbuffer);
- BROTLI_DECODER_FREE(s, s->block_type_trees);
-}
-
-BROTLI_BOOL BrotliDecoderHuffmanTreeGroupInit(BrotliDecoderState* s,
- HuffmanTreeGroup* group, uint32_t alphabet_size, uint32_t max_symbol,
- uint32_t ntrees) {
- /* Pack two allocations into one */
- const size_t max_table_size = kMaxHuffmanTableSize[(alphabet_size + 31) >> 5];
- const size_t code_size = sizeof(HuffmanCode) * ntrees * max_table_size;
- const size_t htree_size = sizeof(HuffmanCode*) * ntrees;
- /* Pointer alignment is, hopefully, wider than sizeof(HuffmanCode). */
- HuffmanCode** p = (HuffmanCode**)BROTLI_DECODER_ALLOC(s,
- code_size + htree_size);
- group->alphabet_size = (uint16_t)alphabet_size;
- group->max_symbol = (uint16_t)max_symbol;
- group->num_htrees = (uint16_t)ntrees;
- group->htrees = p;
- group->codes = (HuffmanCode*)(&p[ntrees]);
- return !!p;
-}
-
-#if defined(__cplusplus) || defined(c_plusplus)
-} /* extern "C" */
-#endif
diff --git a/BaseTools/Source/C/BrotliCompress/enc/backward_references.c b/BaseTools/Source/C/BrotliCompress/enc/backward_references.c
deleted file mode 100644
index d14679abcddc..000000000000
--- a/BaseTools/Source/C/BrotliCompress/enc/backward_references.c
+++ /dev/null
@@ -1,144 +0,0 @@
-/* Copyright 2013 Google Inc. All Rights Reserved.
-
- Distributed under MIT license.
- See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
-*/
-
-/* Function to find backward reference copies. */
-
-#include "./backward_references.h"
-
-#include "../common/constants.h"
-#include "../common/dictionary.h"
-#include "../common/platform.h"
-#include <brotli/types.h>
-#include "./command.h"
-#include "./dictionary_hash.h"
-#include "./memory.h"
-#include "./quality.h"
-
-#if defined(__cplusplus) || defined(c_plusplus)
-extern "C" {
-#endif
-
-static BROTLI_INLINE size_t ComputeDistanceCode(size_t distance,
- size_t max_distance,
- const int* dist_cache) {
- if (distance <= max_distance) {
- size_t distance_plus_3 = distance + 3;
- size_t offset0 = distance_plus_3 - (size_t)dist_cache[0];
- size_t offset1 = distance_plus_3 - (size_t)dist_cache[1];
- if (distance == (size_t)dist_cache[0]) {
- return 0;
- } else if (distance == (size_t)dist_cache[1]) {
- return 1;
- } else if (offset0 < 7) {
- return (0x9750468 >> (4 * offset0)) & 0xF;
- } else if (offset1 < 7) {
- return (0xFDB1ACE >> (4 * offset1)) & 0xF;
- } else if (distance == (size_t)dist_cache[2]) {
- return 2;
- } else if (distance == (size_t)dist_cache[3]) {
- return 3;
- }
- }
- return distance + BROTLI_NUM_DISTANCE_SHORT_CODES - 1;
-}
-
-#define EXPAND_CAT(a, b) CAT(a, b)
-#define CAT(a, b) a ## b
-#define FN(X) EXPAND_CAT(X, HASHER())
-#define EXPORT_FN(X) EXPAND_CAT(X, EXPAND_CAT(PREFIX(), HASHER()))
-
-#define PREFIX() N
-
-#define HASHER() H2
-/* NOLINTNEXTLINE(build/include) */
-#include "./backward_references_inc.h"
-#undef HASHER
-
-#define HASHER() H3
-/* NOLINTNEXTLINE(build/include) */
-#include "./backward_references_inc.h"
-#undef HASHER
-
-#define HASHER() H4
-/* NOLINTNEXTLINE(build/include) */
-#include "./backward_references_inc.h"
-#undef HASHER
-
-#define HASHER() H5
-/* NOLINTNEXTLINE(build/include) */
-#include "./backward_references_inc.h"
-#undef HASHER
-
-#define HASHER() H6
-/* NOLINTNEXTLINE(build/include) */
-#include "./backward_references_inc.h"
-#undef HASHER
-
-#define HASHER() H40
-/* NOLINTNEXTLINE(build/include) */
-#include "./backward_references_inc.h"
-#undef HASHER
-
-#define HASHER() H41
-/* NOLINTNEXTLINE(build/include) */
-#include "./backward_references_inc.h"
-#undef HASHER
-
-#define HASHER() H42
-/* NOLINTNEXTLINE(build/include) */
-#include "./backward_references_inc.h"
-#undef HASHER
-
-#define HASHER() H54
-/* NOLINTNEXTLINE(build/include) */
-#include "./backward_references_inc.h"
-#undef HASHER
-
-#define HASHER() H35
-/* NOLINTNEXTLINE(build/include) */
-#include "./backward_references_inc.h"
-#undef HASHER
-
-#define HASHER() H55
-/* NOLINTNEXTLINE(build/include) */
-#include "./backward_references_inc.h"
-#undef HASHER
-
-#define HASHER() H65
-/* NOLINTNEXTLINE(build/include) */
-#include "./backward_references_inc.h"
-#undef HASHER
-
-#undef PREFIX
-
-#undef EXPORT_FN
-#undef FN
-#undef CAT
-#undef EXPAND_CAT
-
-void BrotliCreateBackwardReferences(
- size_t num_bytes, size_t position, const uint8_t* ringbuffer,
- size_t ringbuffer_mask, const BrotliEncoderParams* params,
- HasherHandle hasher, int* dist_cache, size_t* last_insert_len,
- Command* commands, size_t* num_commands, size_t* num_literals) {
- switch (params->hasher.type) {
-#define CASE_(N) \
- case N: \
- CreateBackwardReferencesNH ## N( \
- num_bytes, position, ringbuffer, \
- ringbuffer_mask, params, hasher, dist_cache, \
- last_insert_len, commands, num_commands, num_literals); \
- return;
- FOR_GENERIC_HASHERS(CASE_)
-#undef CASE_
- default:
- break;
- }
-}
-
-#if defined(__cplusplus) || defined(c_plusplus)
-} /* extern "C" */
-#endif
diff --git a/BaseTools/Source/C/BrotliCompress/enc/backward_references_hq.c b/BaseTools/Source/C/BrotliCompress/enc/backward_references_hq.c
deleted file mode 100644
index 89320335ea32..000000000000
--- a/BaseTools/Source/C/BrotliCompress/enc/backward_references_hq.c
+++ /dev/null
@@ -1,830 +0,0 @@
-/* Copyright 2013 Google Inc. All Rights Reserved.
-
- Distributed under MIT license.
- See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
-*/
-
-/* Function to find backward reference copies. */
-
-#include "./backward_references_hq.h"
-
-#include <string.h> /* memcpy, memset */
-
-#include "../common/constants.h"
-#include "../common/platform.h"
-#include <brotli/types.h>
-#include "./command.h"
-#include "./fast_log.h"
-#include "./find_match_length.h"
-#include "./literal_cost.h"
-#include "./memory.h"
-#include "./params.h"
-#include "./prefix.h"
-#include "./quality.h"
-
-#if defined(__cplusplus) || defined(c_plusplus)
-extern "C" {
-#endif
-
-#define BROTLI_MAX_EFFECTIVE_DISTANCE_ALPHABET_SIZE 544
-
-static const float kInfinity = 1.7e38f; /* ~= 2 ^ 127 */
-
-static const uint32_t kDistanceCacheIndex[] = {
- 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1,
-};
-static const int kDistanceCacheOffset[] = {
- 0, 0, 0, 0, -1, 1, -2, 2, -3, 3, -1, 1, -2, 2, -3, 3
-};
-
-void BrotliInitZopfliNodes(ZopfliNode* array, size_t length) {
- ZopfliNode stub;
- size_t i;
- stub.length = 1;
- stub.distance = 0;
- stub.dcode_insert_length = 0;
- stub.u.cost = kInfinity;
- for (i = 0; i < length; ++i) array[i] = stub;
-}
-
-static BROTLI_INLINE uint32_t ZopfliNodeCopyLength(const ZopfliNode* self) {
- return self->length & 0x1FFFFFF;
-}
-
-static BROTLI_INLINE uint32_t ZopfliNodeLengthCode(const ZopfliNode* self) {
- const uint32_t modifier = self->length >> 25;
- return ZopfliNodeCopyLength(self) + 9u - modifier;
-}
-
-static BROTLI_INLINE uint32_t ZopfliNodeCopyDistance(const ZopfliNode* self) {
- return self->distance;
-}
-
-static BROTLI_INLINE uint32_t ZopfliNodeDistanceCode(const ZopfliNode* self) {
- const uint32_t short_code = self->dcode_insert_length >> 27;
- return short_code == 0 ?
- ZopfliNodeCopyDistance(self) + BROTLI_NUM_DISTANCE_SHORT_CODES - 1 :
- short_code - 1;
-}
-
-static BROTLI_INLINE uint32_t ZopfliNodeCommandLength(const ZopfliNode* self) {
- return ZopfliNodeCopyLength(self) + (self->dcode_insert_length & 0x7FFFFFF);
-}
-
-/* Histogram based cost model for zopflification. */
-typedef struct ZopfliCostModel {
- /* The insert and copy length symbols. */
- float cost_cmd_[BROTLI_NUM_COMMAND_SYMBOLS];
- float* cost_dist_;
- uint32_t distance_histogram_size;
- /* Cumulative costs of literals per position in the stream. */
- float* literal_costs_;
- float min_cost_cmd_;
- size_t num_bytes_;
-} ZopfliCostModel;
-
-static void InitZopfliCostModel(
- MemoryManager* m, ZopfliCostModel* self, const BrotliDistanceParams* dist,
- size_t num_bytes) {
- uint32_t distance_histogram_size = dist->alphabet_size;
- if (distance_histogram_size > BROTLI_MAX_EFFECTIVE_DISTANCE_ALPHABET_SIZE) {
- distance_histogram_size = BROTLI_MAX_EFFECTIVE_DISTANCE_ALPHABET_SIZE;
- }
- self->num_bytes_ = num_bytes;
- self->literal_costs_ = BROTLI_ALLOC(m, float, num_bytes + 2);
- self->cost_dist_ = BROTLI_ALLOC(m, float, dist->alphabet_size);
- self->distance_histogram_size = distance_histogram_size;
- if (BROTLI_IS_OOM(m)) return;
-}
-
-static void CleanupZopfliCostModel(MemoryManager* m, ZopfliCostModel* self) {
- BROTLI_FREE(m, self->literal_costs_);
- BROTLI_FREE(m, self->cost_dist_);
-}
-
-static void SetCost(const uint32_t* histogram, size_t histogram_size,
- BROTLI_BOOL literal_histogram, float* cost) {
- size_t sum = 0;
- size_t missing_symbol_sum;
- float log2sum;
- float missing_symbol_cost;
- size_t i;
- for (i = 0; i < histogram_size; i++) {
- sum += histogram[i];
- }
- log2sum = (float)FastLog2(sum);
- missing_symbol_sum = sum;
- if (!literal_histogram) {
- for (i = 0; i < histogram_size; i++) {
- if (histogram[i] == 0) missing_symbol_sum++;
- }
- }
- missing_symbol_cost = (float)FastLog2(missing_symbol_sum) + 2;
- for (i = 0; i < histogram_size; i++) {
- if (histogram[i] == 0) {
- cost[i] = missing_symbol_cost;
- continue;
- }
-
- /* Shannon bits for this symbol. */
- cost[i] = log2sum - (float)FastLog2(histogram[i]);
-
- /* Cannot be coded with less than 1 bit */
- if (cost[i] < 1) cost[i] = 1;
- }
-}
-
-static void ZopfliCostModelSetFromCommands(ZopfliCostModel* self,
- size_t position,
- const uint8_t* ringbuffer,
- size_t ringbuffer_mask,
- const Command* commands,
- size_t num_commands,
- size_t last_insert_len) {
- uint32_t histogram_literal[BROTLI_NUM_LITERAL_SYMBOLS];
- uint32_t histogram_cmd[BROTLI_NUM_COMMAND_SYMBOLS];
- uint32_t histogram_dist[BROTLI_MAX_EFFECTIVE_DISTANCE_ALPHABET_SIZE];
- float cost_literal[BROTLI_NUM_LITERAL_SYMBOLS];
- size_t pos = position - last_insert_len;
- float min_cost_cmd = kInfinity;
- size_t i;
- float* cost_cmd = self->cost_cmd_;
-
- memset(histogram_literal, 0, sizeof(histogram_literal));
- memset(histogram_cmd, 0, sizeof(histogram_cmd));
- memset(histogram_dist, 0, sizeof(histogram_dist));
-
- for (i = 0; i < num_commands; i++) {
- size_t inslength = commands[i].insert_len_;
- size_t copylength = CommandCopyLen(&commands[i]);
- size_t distcode = commands[i].dist_prefix_ & 0x3FF;
- size_t cmdcode = commands[i].cmd_prefix_;
- size_t j;
-
- histogram_cmd[cmdcode]++;
- if (cmdcode >= 128) histogram_dist[distcode]++;
-
- for (j = 0; j < inslength; j++) {
- histogram_literal[ringbuffer[(pos + j) & ringbuffer_mask]]++;
- }
-
- pos += inslength + copylength;
- }
-
- SetCost(histogram_literal, BROTLI_NUM_LITERAL_SYMBOLS, BROTLI_TRUE,
- cost_literal);
- SetCost(histogram_cmd, BROTLI_NUM_COMMAND_SYMBOLS, BROTLI_FALSE,
- cost_cmd);
- SetCost(histogram_dist, self->distance_histogram_size, BROTLI_FALSE,
- self->cost_dist_);
-
- for (i = 0; i < BROTLI_NUM_COMMAND_SYMBOLS; ++i) {
- min_cost_cmd = BROTLI_MIN(float, min_cost_cmd, cost_cmd[i]);
- }
- self->min_cost_cmd_ = min_cost_cmd;
-
- {
- float* literal_costs = self->literal_costs_;
- float literal_carry = 0.0;
- size_t num_bytes = self->num_bytes_;
- literal_costs[0] = 0.0;
- for (i = 0; i < num_bytes; ++i) {
- literal_carry +=
- cost_literal[ringbuffer[(position + i) & ringbuffer_mask]];
- literal_costs[i + 1] = literal_costs[i] + literal_carry;
- literal_carry -= literal_costs[i + 1] - literal_costs[i];
- }
- }
-}
-
-static void ZopfliCostModelSetFromLiteralCosts(ZopfliCostModel* self,
- size_t position,
- const uint8_t* ringbuffer,
- size_t ringbuffer_mask) {
- float* literal_costs = self->literal_costs_;
- float literal_carry = 0.0;
- float* cost_dist = self->cost_dist_;
- float* cost_cmd = self->cost_cmd_;
- size_t num_bytes = self->num_bytes_;
- size_t i;
- BrotliEstimateBitCostsForLiterals(position, num_bytes, ringbuffer_mask,
- ringbuffer, &literal_costs[1]);
- literal_costs[0] = 0.0;
- for (i = 0; i < num_bytes; ++i) {
- literal_carry += literal_costs[i + 1];
- literal_costs[i + 1] = literal_costs[i] + literal_carry;
- literal_carry -= literal_costs[i + 1] - literal_costs[i];
- }
- for (i = 0; i < BROTLI_NUM_COMMAND_SYMBOLS; ++i) {
- cost_cmd[i] = (float)FastLog2(11 + (uint32_t)i);
- }
- for (i = 0; i < self->distance_histogram_size; ++i) {
- cost_dist[i] = (float)FastLog2(20 + (uint32_t)i);
- }
- self->min_cost_cmd_ = (float)FastLog2(11);
-}
-
-static BROTLI_INLINE float ZopfliCostModelGetCommandCost(
- const ZopfliCostModel* self, uint16_t cmdcode) {
- return self->cost_cmd_[cmdcode];
-}
-
-static BROTLI_INLINE float ZopfliCostModelGetDistanceCost(
- const ZopfliCostModel* self, size_t distcode) {
- return self->cost_dist_[distcode];
-}
-
-static BROTLI_INLINE float ZopfliCostModelGetLiteralCosts(
- const ZopfliCostModel* self, size_t from, size_t to) {
- return self->literal_costs_[to] - self->literal_costs_[from];
-}
-
-static BROTLI_INLINE float ZopfliCostModelGetMinCostCmd(
- const ZopfliCostModel* self) {
- return self->min_cost_cmd_;
-}
-
-/* REQUIRES: len >= 2, start_pos <= pos */
-/* REQUIRES: cost < kInfinity, nodes[start_pos].cost < kInfinity */
-/* Maintains the "ZopfliNode array invariant". */
-static BROTLI_INLINE void UpdateZopfliNode(ZopfliNode* nodes, size_t pos,
- size_t start_pos, size_t len, size_t len_code, size_t dist,
- size_t short_code, float cost) {
- ZopfliNode* next = &nodes[pos + len];
- next->length = (uint32_t)(len | ((len + 9u - len_code) << 25));
- next->distance = (uint32_t)dist;
- next->dcode_insert_length = (uint32_t)(
- (short_code << 27) | (pos - start_pos));
- next->u.cost = cost;
-}
-
-typedef struct PosData {
- size_t pos;
- int distance_cache[4];
- float costdiff;
- float cost;
-} PosData;
-
-/* Maintains the smallest 8 cost difference together with their positions */
-typedef struct StartPosQueue {
- PosData q_[8];
- size_t idx_;
-} StartPosQueue;
-
-static BROTLI_INLINE void InitStartPosQueue(StartPosQueue* self) {
- self->idx_ = 0;
-}
-
-static size_t StartPosQueueSize(const StartPosQueue* self) {
- return BROTLI_MIN(size_t, self->idx_, 8);
-}
-
-static void StartPosQueuePush(StartPosQueue* self, const PosData* posdata) {
- size_t offset = ~(self->idx_++) & 7;
- size_t len = StartPosQueueSize(self);
- size_t i;
- PosData* q = self->q_;
- q[offset] = *posdata;
- /* Restore the sorted order. In the list of |len| items at most |len - 1|
- adjacent element comparisons / swaps are required. */
- for (i = 1; i < len; ++i) {
- if (q[offset & 7].costdiff > q[(offset + 1) & 7].costdiff) {
- BROTLI_SWAP(PosData, q, offset & 7, (offset + 1) & 7);
- }
- ++offset;
- }
-}
-
-static const PosData* StartPosQueueAt(const StartPosQueue* self, size_t k) {
- return &self->q_[(k - self->idx_) & 7];
-}
-
-/* Returns the minimum possible copy length that can improve the cost of any */
-/* future position. */
-static size_t ComputeMinimumCopyLength(const float start_cost,
- const ZopfliNode* nodes,
- const size_t num_bytes,
- const size_t pos) {
- /* Compute the minimum possible cost of reaching any future position. */
- float min_cost = start_cost;
- size_t len = 2;
- size_t next_len_bucket = 4;
- size_t next_len_offset = 10;
- while (pos + len <= num_bytes && nodes[pos + len].u.cost <= min_cost) {
- /* We already reached (pos + len) with no more cost than the minimum
- possible cost of reaching anything from this pos, so there is no point in
- looking for lengths <= len. */
- ++len;
- if (len == next_len_offset) {
- /* We reached the next copy length code bucket, so we add one more
- extra bit to the minimum cost. */
- min_cost += 1.0f;
- next_len_offset += next_len_bucket;
- next_len_bucket *= 2;
- }
- }
- return len;
-}
-
-/* REQUIRES: nodes[pos].cost < kInfinity
- REQUIRES: nodes[0..pos] satisfies that "ZopfliNode array invariant". */
-static uint32_t ComputeDistanceShortcut(const size_t block_start,
- const size_t pos,
- const size_t max_backward,
- const size_t gap,
- const ZopfliNode* nodes) {
- const size_t clen = ZopfliNodeCopyLength(&nodes[pos]);
- const size_t ilen = nodes[pos].dcode_insert_length & 0x7FFFFFF;
- const size_t dist = ZopfliNodeCopyDistance(&nodes[pos]);
- /* Since |block_start + pos| is the end position of the command, the copy part
- starts from |block_start + pos - clen|. Distances that are greater than
- this or greater than |max_backward| are static dictionary references, and
- do not update the last distances. Also distance code 0 (last distance)
- does not update the last distances. */
- if (pos == 0) {
- return 0;
- } else if (dist + clen <= block_start + pos + gap &&
- dist <= max_backward + gap &&
- ZopfliNodeDistanceCode(&nodes[pos]) > 0) {
- return (uint32_t)pos;
- } else {
- return nodes[pos - clen - ilen].u.shortcut;
- }
-}
-
-/* Fills in dist_cache[0..3] with the last four distances (as defined by
- Section 4. of the Spec) that would be used at (block_start + pos) if we
- used the shortest path of commands from block_start, computed from
- nodes[0..pos]. The last four distances at block_start are in
- starting_dist_cache[0..3].
- REQUIRES: nodes[pos].cost < kInfinity
- REQUIRES: nodes[0..pos] satisfies that "ZopfliNode array invariant". */
-static void ComputeDistanceCache(const size_t pos,
- const int* starting_dist_cache,
- const ZopfliNode* nodes,
- int* dist_cache) {
- int idx = 0;
- size_t p = nodes[pos].u.shortcut;
- while (idx < 4 && p > 0) {
- const size_t ilen = nodes[p].dcode_insert_length & 0x7FFFFFF;
- const size_t clen = ZopfliNodeCopyLength(&nodes[p]);
- const size_t dist = ZopfliNodeCopyDistance(&nodes[p]);
- dist_cache[idx++] = (int)dist;
- /* Because of prerequisite, p >= clen + ilen >= 2. */
- p = nodes[p - clen - ilen].u.shortcut;
- }
- for (; idx < 4; ++idx) {
- dist_cache[idx] = *starting_dist_cache++;
- }
-}
-
-/* Maintains "ZopfliNode array invariant" and pushes node to the queue, if it
- is eligible. */
-static void EvaluateNode(
- const size_t block_start, const size_t pos, const size_t max_backward_limit,
- const size_t gap, const int* starting_dist_cache,
- const ZopfliCostModel* model, StartPosQueue* queue, ZopfliNode* nodes) {
- /* Save cost, because ComputeDistanceCache invalidates it. */
- float node_cost = nodes[pos].u.cost;
- nodes[pos].u.shortcut = ComputeDistanceShortcut(
- block_start, pos, max_backward_limit, gap, nodes);
- if (node_cost <= ZopfliCostModelGetLiteralCosts(model, 0, pos)) {
- PosData posdata;
- posdata.pos = pos;
- posdata.cost = node_cost;
- posdata.costdiff = node_cost -
- ZopfliCostModelGetLiteralCosts(model, 0, pos);
- ComputeDistanceCache(
- pos, starting_dist_cache, nodes, posdata.distance_cache);
- StartPosQueuePush(queue, &posdata);
- }
-}
-
-/* Returns longest copy length. */
-static size_t UpdateNodes(
- const size_t num_bytes, const size_t block_start, const size_t pos,
- const uint8_t* ringbuffer, const size_t ringbuffer_mask,
- const BrotliEncoderParams* params, const size_t max_backward_limit,
- const int* starting_dist_cache, const size_t num_matches,
- const BackwardMatch* matches, const ZopfliCostModel* model,
- StartPosQueue* queue, ZopfliNode* nodes) {
- const size_t cur_ix = block_start + pos;
- const size_t cur_ix_masked = cur_ix & ringbuffer_mask;
- const size_t max_distance = BROTLI_MIN(size_t, cur_ix, max_backward_limit);
- const size_t max_len = num_bytes - pos;
- const size_t max_zopfli_len = MaxZopfliLen(params);
- const size_t max_iters = MaxZopfliCandidates(params);
- size_t min_len;
- size_t result = 0;
- size_t k;
- size_t gap = 0;
-
- EvaluateNode(block_start, pos, max_backward_limit, gap, starting_dist_cache,
- model, queue, nodes);
-
- {
- const PosData* posdata = StartPosQueueAt(queue, 0);
- float min_cost = (posdata->cost + ZopfliCostModelGetMinCostCmd(model) +
- ZopfliCostModelGetLiteralCosts(model, posdata->pos, pos));
- min_len = ComputeMinimumCopyLength(min_cost, nodes, num_bytes, pos);
- }
-
- /* Go over the command starting positions in order of increasing cost
- difference. */
- for (k = 0; k < max_iters && k < StartPosQueueSize(queue); ++k) {
- const PosData* posdata = StartPosQueueAt(queue, k);
- const size_t start = posdata->pos;
- const uint16_t inscode = GetInsertLengthCode(pos - start);
- const float start_costdiff = posdata->costdiff;
- const float base_cost = start_costdiff + (float)GetInsertExtra(inscode) +
- ZopfliCostModelGetLiteralCosts(model, 0, pos);
-
- /* Look for last distance matches using the distance cache from this
- starting position. */
- size_t best_len = min_len - 1;
- size_t j = 0;
- for (; j < BROTLI_NUM_DISTANCE_SHORT_CODES && best_len < max_len; ++j) {
- const size_t idx = kDistanceCacheIndex[j];
- const size_t backward =
- (size_t)(posdata->distance_cache[idx] + kDistanceCacheOffset[j]);
- size_t prev_ix = cur_ix - backward;
- size_t len = 0;
- uint8_t continuation = ringbuffer[cur_ix_masked + best_len];
- if (cur_ix_masked + best_len > ringbuffer_mask) {
- break;
- }
- if (BROTLI_PREDICT_FALSE(backward > max_distance + gap)) {
- continue;
- }
- if (backward <= max_distance) {
- if (prev_ix >= cur_ix) {
- continue;
- }
-
- prev_ix &= ringbuffer_mask;
- if (prev_ix + best_len > ringbuffer_mask ||
- continuation != ringbuffer[prev_ix + best_len]) {
- continue;
- }
- len = FindMatchLengthWithLimit(&ringbuffer[prev_ix],
- &ringbuffer[cur_ix_masked],
- max_len);
- } else {
- continue;
- }
- {
- const float dist_cost = base_cost +
- ZopfliCostModelGetDistanceCost(model, j);
- size_t l;
- for (l = best_len + 1; l <= len; ++l) {
- const uint16_t copycode = GetCopyLengthCode(l);
- const uint16_t cmdcode =
- CombineLengthCodes(inscode, copycode, j == 0);
- const float cost = (cmdcode < 128 ? base_cost : dist_cost) +
- (float)GetCopyExtra(copycode) +
- ZopfliCostModelGetCommandCost(model, cmdcode);
- if (cost < nodes[pos + l].u.cost) {
- UpdateZopfliNode(nodes, pos, start, l, l, backward, j + 1, cost);
- result = BROTLI_MAX(size_t, result, l);
- }
- best_len = l;
- }
- }
- }
-
- /* At higher iterations look only for new last distance matches, since
- looking only for new command start positions with the same distances
- does not help much. */
- if (k >= 2) continue;
-
- {
- /* Loop through all possible copy lengths at this position. */
- size_t len = min_len;
- for (j = 0; j < num_matches; ++j) {
- BackwardMatch match = matches[j];
- size_t dist = match.distance;
- BROTLI_BOOL is_dictionary_match =
- TO_BROTLI_BOOL(dist > max_distance + gap);
- /* We already tried all possible last distance matches, so we can use
- normal distance code here. */
- size_t dist_code = dist + BROTLI_NUM_DISTANCE_SHORT_CODES - 1;
- uint16_t dist_symbol;
- uint32_t distextra;
- uint32_t distnumextra;
- float dist_cost;
- size_t max_match_len;
- PrefixEncodeCopyDistance(
- dist_code, params->dist.num_direct_distance_codes,
- params->dist.distance_postfix_bits, &dist_symbol, &distextra);
- distnumextra = dist_symbol >> 10;
- dist_cost = base_cost + (float)distnumextra +
- ZopfliCostModelGetDistanceCost(model, dist_symbol & 0x3FF);
-
- /* Try all copy lengths up until the maximum copy length corresponding
- to this distance. If the distance refers to the static dictionary, or
- the maximum length is long enough, try only one maximum length. */
- max_match_len = BackwardMatchLength(&match);
- if (len < max_match_len &&
- (is_dictionary_match || max_match_len > max_zopfli_len)) {
- len = max_match_len;
- }
- for (; len <= max_match_len; ++len) {
- const size_t len_code =
- is_dictionary_match ? BackwardMatchLengthCode(&match) : len;
- const uint16_t copycode = GetCopyLengthCode(len_code);
- const uint16_t cmdcode = CombineLengthCodes(inscode, copycode, 0);
- const float cost = dist_cost + (float)GetCopyExtra(copycode) +
- ZopfliCostModelGetCommandCost(model, cmdcode);
- if (cost < nodes[pos + len].u.cost) {
- UpdateZopfliNode(nodes, pos, start, len, len_code, dist, 0, cost);
- result = BROTLI_MAX(size_t, result, len);
- }
- }
- }
- }
- }
- return result;
-}
-
-static size_t ComputeShortestPathFromNodes(size_t num_bytes,
- ZopfliNode* nodes) {
- size_t index = num_bytes;
- size_t num_commands = 0;
- while ((nodes[index].dcode_insert_length & 0x7FFFFFF) == 0 &&
- nodes[index].length == 1) --index;
- nodes[index].u.next = BROTLI_UINT32_MAX;
- while (index != 0) {
- size_t len = ZopfliNodeCommandLength(&nodes[index]);
- index -= len;
- nodes[index].u.next = (uint32_t)len;
- num_commands++;
- }
- return num_commands;
-}
-
-/* REQUIRES: nodes != NULL and len(nodes) >= num_bytes + 1 */
-void BrotliZopfliCreateCommands(const size_t num_bytes,
- const size_t block_start,
- const size_t max_backward_limit,
- const ZopfliNode* nodes,
- int* dist_cache,
- size_t* last_insert_len,
- const BrotliEncoderParams* params,
- Command* commands,
- size_t* num_literals) {
- size_t pos = 0;
- uint32_t offset = nodes[0].u.next;
- size_t i;
- size_t gap = 0;
- for (i = 0; offset != BROTLI_UINT32_MAX; i++) {
- const ZopfliNode* next = &nodes[pos + offset];
- size_t copy_length = ZopfliNodeCopyLength(next);
- size_t insert_length = next->dcode_insert_length & 0x7FFFFFF;
- pos += insert_length;
- offset = next->u.next;
- if (i == 0) {
- insert_length += *last_insert_len;
- *last_insert_len = 0;
- }
- {
- size_t distance = ZopfliNodeCopyDistance(next);
- size_t len_code = ZopfliNodeLengthCode(next);
- size_t max_distance =
- BROTLI_MIN(size_t, block_start + pos, max_backward_limit);
- BROTLI_BOOL is_dictionary = TO_BROTLI_BOOL(distance > max_distance + gap);
- size_t dist_code = ZopfliNodeDistanceCode(next);
- InitCommand(&commands[i], ¶ms->dist, insert_length,
- copy_length, (int)len_code - (int)copy_length, dist_code);
-
- if (!is_dictionary && dist_code > 0) {
- dist_cache[3] = dist_cache[2];
- dist_cache[2] = dist_cache[1];
- dist_cache[1] = dist_cache[0];
- dist_cache[0] = (int)distance;
- }
- }
-
- *num_literals += insert_length;
- pos += copy_length;
- }
- *last_insert_len += num_bytes - pos;
-}
-
-static size_t ZopfliIterate(size_t num_bytes,
- size_t position,
- const uint8_t* ringbuffer,
- size_t ringbuffer_mask,
- const BrotliEncoderParams* params,
- const size_t max_backward_limit,
- const size_t gap,
- const int* dist_cache,
- const ZopfliCostModel* model,
- const uint32_t* num_matches,
- const BackwardMatch* matches,
- ZopfliNode* nodes) {
- const size_t max_zopfli_len = MaxZopfliLen(params);
- StartPosQueue queue;
- size_t cur_match_pos = 0;
- size_t i;
- nodes[0].length = 0;
- nodes[0].u.cost = 0;
- InitStartPosQueue(&queue);
- for (i = 0; i + 3 < num_bytes; i++) {
- size_t skip = UpdateNodes(num_bytes, position, i, ringbuffer,
- ringbuffer_mask, params, max_backward_limit, dist_cache,
- num_matches[i], &matches[cur_match_pos], model, &queue, nodes);
- if (skip < BROTLI_LONG_COPY_QUICK_STEP) skip = 0;
- cur_match_pos += num_matches[i];
- if (num_matches[i] == 1 &&
- BackwardMatchLength(&matches[cur_match_pos - 1]) > max_zopfli_len) {
- skip = BROTLI_MAX(size_t,
- BackwardMatchLength(&matches[cur_match_pos - 1]), skip);
- }
- if (skip > 1) {
- skip--;
- while (skip) {
- i++;
- if (i + 3 >= num_bytes) break;
- EvaluateNode(position, i, max_backward_limit, gap, dist_cache, model,
- &queue, nodes);
- cur_match_pos += num_matches[i];
- skip--;
- }
- }
- }
- return ComputeShortestPathFromNodes(num_bytes, nodes);
-}
-
-/* REQUIRES: nodes != NULL and len(nodes) >= num_bytes + 1 */
-size_t BrotliZopfliComputeShortestPath(MemoryManager* m,
- size_t num_bytes, size_t position, const uint8_t* ringbuffer,
- size_t ringbuffer_mask, const BrotliEncoderParams* params,
- const size_t max_backward_limit, const int* dist_cache, HasherHandle hasher,
- ZopfliNode* nodes) {
- const size_t max_zopfli_len = MaxZopfliLen(params);
- ZopfliCostModel model;
- StartPosQueue queue;
- BackwardMatch matches[2 * (MAX_NUM_MATCHES_H10 + 64)];
- const size_t store_end = num_bytes >= StoreLookaheadH10() ?
- position + num_bytes - StoreLookaheadH10() + 1 : position;
- size_t i;
- size_t gap = 0;
- size_t lz_matches_offset = 0;
- nodes[0].length = 0;
- nodes[0].u.cost = 0;
- InitZopfliCostModel(m, &model, ¶ms->dist, num_bytes);
- if (BROTLI_IS_OOM(m)) return 0;
- ZopfliCostModelSetFromLiteralCosts(
- &model, position, ringbuffer, ringbuffer_mask);
- InitStartPosQueue(&queue);
- for (i = 0; i + HashTypeLengthH10() - 1 < num_bytes; i++) {
- const size_t pos = position + i;
- const size_t max_distance = BROTLI_MIN(size_t, pos, max_backward_limit);
- size_t skip;
- size_t num_matches = FindAllMatchesH10(hasher, ¶ms->dictionary,
- ringbuffer, ringbuffer_mask, pos, num_bytes - i, max_distance, gap,
- params, &matches[lz_matches_offset]);
- if (num_matches > 0 &&
- BackwardMatchLength(&matches[num_matches - 1]) > max_zopfli_len) {
- matches[0] = matches[num_matches - 1];
- num_matches = 1;
- }
- skip = UpdateNodes(num_bytes, position, i, ringbuffer, ringbuffer_mask,
- params, max_backward_limit, dist_cache, num_matches, matches, &model,
- &queue, nodes);
- if (skip < BROTLI_LONG_COPY_QUICK_STEP) skip = 0;
- if (num_matches == 1 && BackwardMatchLength(&matches[0]) > max_zopfli_len) {
- skip = BROTLI_MAX(size_t, BackwardMatchLength(&matches[0]), skip);
- }
- if (skip > 1) {
- /* Add the tail of the copy to the hasher. */
- StoreRangeH10(hasher, ringbuffer, ringbuffer_mask, pos + 1, BROTLI_MIN(
- size_t, pos + skip, store_end));
- skip--;
- while (skip) {
- i++;
- if (i + HashTypeLengthH10() - 1 >= num_bytes) break;
- EvaluateNode(position, i, max_backward_limit, gap, dist_cache, &model,
- &queue, nodes);
- skip--;
- }
- }
- }
- CleanupZopfliCostModel(m, &model);
- return ComputeShortestPathFromNodes(num_bytes, nodes);
-}
-
-void BrotliCreateZopfliBackwardReferences(MemoryManager* m,
- size_t num_bytes, size_t position, const uint8_t* ringbuffer,
- size_t ringbuffer_mask, const BrotliEncoderParams* params,
- HasherHandle hasher, int* dist_cache, size_t* last_insert_len,
- Command* commands, size_t* num_commands, size_t* num_literals) {
- const size_t max_backward_limit = BROTLI_MAX_BACKWARD_LIMIT(params->lgwin);
- ZopfliNode* nodes;
- nodes = BROTLI_ALLOC(m, ZopfliNode, num_bytes + 1);
- if (BROTLI_IS_OOM(m)) return;
- BrotliInitZopfliNodes(nodes, num_bytes + 1);
- *num_commands += BrotliZopfliComputeShortestPath(m,
- num_bytes, position, ringbuffer, ringbuffer_mask,
- params, max_backward_limit, dist_cache, hasher, nodes);
- if (BROTLI_IS_OOM(m)) return;
- BrotliZopfliCreateCommands(num_bytes, position, max_backward_limit, nodes,
- dist_cache, last_insert_len, params, commands, num_literals);
- BROTLI_FREE(m, nodes);
-}
-
-void BrotliCreateHqZopfliBackwardReferences(MemoryManager* m,
- size_t num_bytes, size_t position, const uint8_t* ringbuffer,
- size_t ringbuffer_mask, const BrotliEncoderParams* params,
- HasherHandle hasher, int* dist_cache, size_t* last_insert_len,
- Command* commands, size_t* num_commands, size_t* num_literals) {
- const size_t max_backward_limit = BROTLI_MAX_BACKWARD_LIMIT(params->lgwin);
- uint32_t* num_matches = BROTLI_ALLOC(m, uint32_t, num_bytes);
- size_t matches_size = 4 * num_bytes;
- const size_t store_end = num_bytes >= StoreLookaheadH10() ?
- position + num_bytes - StoreLookaheadH10() + 1 : position;
- size_t cur_match_pos = 0;
- size_t i;
- size_t orig_num_literals;
- size_t orig_last_insert_len;
- int orig_dist_cache[4];
- size_t orig_num_commands;
- ZopfliCostModel model;
- ZopfliNode* nodes;
- BackwardMatch* matches = BROTLI_ALLOC(m, BackwardMatch, matches_size);
- size_t gap = 0;
- size_t shadow_matches = 0;
- if (BROTLI_IS_OOM(m)) return;
- for (i = 0; i + HashTypeLengthH10() - 1 < num_bytes; ++i) {
- const size_t pos = position + i;
- size_t max_distance = BROTLI_MIN(size_t, pos, max_backward_limit);
- size_t max_length = num_bytes - i;
- size_t num_found_matches;
- size_t cur_match_end;
- size_t j;
- /* Ensure that we have enough free slots. */
- BROTLI_ENSURE_CAPACITY(m, BackwardMatch, matches, matches_size,
- cur_match_pos + MAX_NUM_MATCHES_H10 + shadow_matches);
- if (BROTLI_IS_OOM(m)) return;
- num_found_matches = FindAllMatchesH10(hasher,
- ¶ms->dictionary, ringbuffer, ringbuffer_mask, pos, max_length,
- max_distance, gap, params, &matches[cur_match_pos + shadow_matches]);
- cur_match_end = cur_match_pos + num_found_matches;
- for (j = cur_match_pos; j + 1 < cur_match_end; ++j) {
- BROTLI_DCHECK(BackwardMatchLength(&matches[j]) <=
- BackwardMatchLength(&matches[j + 1]));
- }
- num_matches[i] = (uint32_t)num_found_matches;
- if (num_found_matches > 0) {
- const size_t match_len = BackwardMatchLength(&matches[cur_match_end - 1]);
- if (match_len > MAX_ZOPFLI_LEN_QUALITY_11) {
- const size_t skip = match_len - 1;
- matches[cur_match_pos++] = matches[cur_match_end - 1];
- num_matches[i] = 1;
- /* Add the tail of the copy to the hasher. */
- StoreRangeH10(hasher, ringbuffer, ringbuffer_mask, pos + 1,
- BROTLI_MIN(size_t, pos + match_len, store_end));
- memset(&num_matches[i + 1], 0, skip * sizeof(num_matches[0]));
- i += skip;
- } else {
- cur_match_pos = cur_match_end;
- }
- }
- }
- orig_num_literals = *num_literals;
- orig_last_insert_len = *last_insert_len;
- memcpy(orig_dist_cache, dist_cache, 4 * sizeof(dist_cache[0]));
- orig_num_commands = *num_commands;
- nodes = BROTLI_ALLOC(m, ZopfliNode, num_bytes + 1);
- if (BROTLI_IS_OOM(m)) return;
- InitZopfliCostModel(m, &model, ¶ms->dist, num_bytes);
- if (BROTLI_IS_OOM(m)) return;
- for (i = 0; i < 2; i++) {
- BrotliInitZopfliNodes(nodes, num_bytes + 1);
- if (i == 0) {
- ZopfliCostModelSetFromLiteralCosts(
- &model, position, ringbuffer, ringbuffer_mask);
- } else {
- ZopfliCostModelSetFromCommands(&model, position, ringbuffer,
- ringbuffer_mask, commands, *num_commands - orig_num_commands,
- orig_last_insert_len);
- }
- *num_commands = orig_num_commands;
- *num_literals = orig_num_literals;
- *last_insert_len = orig_last_insert_len;
- memcpy(dist_cache, orig_dist_cache, 4 * sizeof(dist_cache[0]));
- *num_commands += ZopfliIterate(num_bytes, position, ringbuffer,
- ringbuffer_mask, params, max_backward_limit, gap, dist_cache,
- &model, num_matches, matches, nodes);
- BrotliZopfliCreateCommands(num_bytes, position, max_backward_limit,
- nodes, dist_cache, last_insert_len, params, commands, num_literals);
- }
- CleanupZopfliCostModel(m, &model);
- BROTLI_FREE(m, nodes);
- BROTLI_FREE(m, matches);
- BROTLI_FREE(m, num_matches);
-}
-
-#if defined(__cplusplus) || defined(c_plusplus)
-} /* extern "C" */
-#endif
diff --git a/BaseTools/Source/C/BrotliCompress/enc/bit_cost.c b/BaseTools/Source/C/BrotliCompress/enc/bit_cost.c
deleted file mode 100644
index c8ee842ce3b3..000000000000
--- a/BaseTools/Source/C/BrotliCompress/enc/bit_cost.c
+++ /dev/null
@@ -1,35 +0,0 @@
-/* Copyright 2013 Google Inc. All Rights Reserved.
-
- Distributed under MIT license.
- See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
-*/
-
-/* Functions to estimate the bit cost of Huffman trees. */
-
-#include "./bit_cost.h"
-
-#include "../common/constants.h"
-#include "../common/platform.h"
-#include <brotli/types.h>
-#include "./fast_log.h"
-#include "./histogram.h"
-
-#if defined(__cplusplus) || defined(c_plusplus)
-extern "C" {
-#endif
-
-#define FN(X) X ## Literal
-#include "./bit_cost_inc.h" /* NOLINT(build/include) */
-#undef FN
-
-#define FN(X) X ## Command
-#include "./bit_cost_inc.h" /* NOLINT(build/include) */
-#undef FN
-
-#define FN(X) X ## Distance
-#include "./bit_cost_inc.h" /* NOLINT(build/include) */
-#undef FN
-
-#if defined(__cplusplus) || defined(c_plusplus)
-} /* extern "C" */
-#endif
diff --git a/BaseTools/Source/C/BrotliCompress/enc/block_splitter.c b/BaseTools/Source/C/BrotliCompress/enc/block_splitter.c
deleted file mode 100644
index 344a629c7dce..000000000000
--- a/BaseTools/Source/C/BrotliCompress/enc/block_splitter.c
+++ /dev/null
@@ -1,194 +0,0 @@
-/* Copyright 2013 Google Inc. All Rights Reserved.
-
- Distributed under MIT license.
- See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
-*/
-
-/* Block split point selection utilities. */
-
-#include "./block_splitter.h"
-
-#include <string.h> /* memcpy, memset */
-
-#include "../common/platform.h"
-#include "./bit_cost.h"
-#include "./cluster.h"
-#include "./command.h"
-#include "./fast_log.h"
-#include "./histogram.h"
-#include "./memory.h"
-#include "./quality.h"
-
-#if defined(__cplusplus) || defined(c_plusplus)
-extern "C" {
-#endif
-
-static const size_t kMaxLiteralHistograms = 100;
-static const size_t kMaxCommandHistograms = 50;
-static const double kLiteralBlockSwitchCost = 28.1;
-static const double kCommandBlockSwitchCost = 13.5;
-static const double kDistanceBlockSwitchCost = 14.6;
-static const size_t kLiteralStrideLength = 70;
-static const size_t kCommandStrideLength = 40;
-static const size_t kSymbolsPerLiteralHistogram = 544;
-static const size_t kSymbolsPerCommandHistogram = 530;
-static const size_t kSymbolsPerDistanceHistogram = 544;
-static const size_t kMinLengthForBlockSplitting = 128;
-static const size_t kIterMulForRefining = 2;
-static const size_t kMinItersForRefining = 100;
-
-static size_t CountLiterals(const Command* cmds, const size_t num_commands) {
- /* Count how many we have. */
- size_t total_length = 0;
- size_t i;
- for (i = 0; i < num_commands; ++i) {
- total_length += cmds[i].insert_len_;
- }
- return total_length;
-}
-
-static void CopyLiteralsToByteArray(const Command* cmds,
- const size_t num_commands,
- const uint8_t* data,
- const size_t offset,
- const size_t mask,
- uint8_t* literals) {
- size_t pos = 0;
- size_t from_pos = offset & mask;
- size_t i;
- for (i = 0; i < num_commands; ++i) {
- size_t insert_len = cmds[i].insert_len_;
- if (from_pos + insert_len > mask) {
- size_t head_size = mask + 1 - from_pos;
- memcpy(literals + pos, data + from_pos, head_size);
- from_pos = 0;
- pos += head_size;
- insert_len -= head_size;
- }
- if (insert_len > 0) {
- memcpy(literals + pos, data + from_pos, insert_len);
- pos += insert_len;
- }
- from_pos = (from_pos + insert_len + CommandCopyLen(&cmds[i])) & mask;
- }
-}
-
-static BROTLI_INLINE uint32_t MyRand(uint32_t* seed) {
- /* Initial seed should be 7. In this case, loop length is (1 << 29). */
- *seed *= 16807U;
- return *seed;
-}
-
-static BROTLI_INLINE double BitCost(size_t count) {
- return count == 0 ? -2.0 : FastLog2(count);
-}
-
-#define HISTOGRAMS_PER_BATCH 64
-#define CLUSTERS_PER_BATCH 16
-
-#define FN(X) X ## Literal
-#define DataType uint8_t
-/* NOLINTNEXTLINE(build/include) */
-#include "./block_splitter_inc.h"
-#undef DataType
-#undef FN
-
-#define FN(X) X ## Command
-#define DataType uint16_t
-/* NOLINTNEXTLINE(build/include) */
-#include "./block_splitter_inc.h"
-#undef FN
-
-#define FN(X) X ## Distance
-/* NOLINTNEXTLINE(build/include) */
-#include "./block_splitter_inc.h"
-#undef DataType
-#undef FN
-
-void BrotliInitBlockSplit(BlockSplit* self) {
- self->num_types = 0;
- self->num_blocks = 0;
- self->types = 0;
- self->lengths = 0;
- self->types_alloc_size = 0;
- self->lengths_alloc_size = 0;
-}
-
-void BrotliDestroyBlockSplit(MemoryManager* m, BlockSplit* self) {
- BROTLI_FREE(m, self->types);
- BROTLI_FREE(m, self->lengths);
-}
-
-void BrotliSplitBlock(MemoryManager* m,
- const Command* cmds,
- const size_t num_commands,
- const uint8_t* data,
- const size_t pos,
- const size_t mask,
- const BrotliEncoderParams* params,
- BlockSplit* literal_split,
- BlockSplit* insert_and_copy_split,
- BlockSplit* dist_split) {
- {
- size_t literals_count = CountLiterals(cmds, num_commands);
- uint8_t* literals = BROTLI_ALLOC(m, uint8_t, literals_count);
- if (BROTLI_IS_OOM(m)) return;
- /* Create a continuous array of literals. */
- CopyLiteralsToByteArray(cmds, num_commands, data, pos, mask, literals);
- /* Create the block split on the array of literals.
- Literal histograms have alphabet size 256. */
- SplitByteVectorLiteral(
- m, literals, literals_count,
- kSymbolsPerLiteralHistogram, kMaxLiteralHistograms,
- kLiteralStrideLength, kLiteralBlockSwitchCost, params,
- literal_split);
- if (BROTLI_IS_OOM(m)) return;
- BROTLI_FREE(m, literals);
- }
-
- {
- /* Compute prefix codes for commands. */
- uint16_t* insert_and_copy_codes = BROTLI_ALLOC(m, uint16_t, num_commands);
- size_t i;
- if (BROTLI_IS_OOM(m)) return;
- for (i = 0; i < num_commands; ++i) {
- insert_and_copy_codes[i] = cmds[i].cmd_prefix_;
- }
- /* Create the block split on the array of command prefixes. */
- SplitByteVectorCommand(
- m, insert_and_copy_codes, num_commands,
- kSymbolsPerCommandHistogram, kMaxCommandHistograms,
- kCommandStrideLength, kCommandBlockSwitchCost, params,
- insert_and_copy_split);
- if (BROTLI_IS_OOM(m)) return;
- /* TODO: reuse for distances? */
- BROTLI_FREE(m, insert_and_copy_codes);
- }
-
- {
- /* Create a continuous array of distance prefixes. */
- uint16_t* distance_prefixes = BROTLI_ALLOC(m, uint16_t, num_commands);
- size_t j = 0;
- size_t i;
- if (BROTLI_IS_OOM(m)) return;
- for (i = 0; i < num_commands; ++i) {
- const Command* cmd = &cmds[i];
- if (CommandCopyLen(cmd) && cmd->cmd_prefix_ >= 128) {
- distance_prefixes[j++] = cmd->dist_prefix_ & 0x3FF;
- }
- }
- /* Create the block split on the array of distance prefixes. */
- SplitByteVectorDistance(
- m, distance_prefixes, j,
- kSymbolsPerDistanceHistogram, kMaxCommandHistograms,
- kCommandStrideLength, kDistanceBlockSwitchCost, params,
- dist_split);
- if (BROTLI_IS_OOM(m)) return;
- BROTLI_FREE(m, distance_prefixes);
- }
-}
-
-
-#if defined(__cplusplus) || defined(c_plusplus)
-} /* extern "C" */
-#endif
diff --git a/BaseTools/Source/C/BrotliCompress/enc/brotli_bit_stream.c b/BaseTools/Source/C/BrotliCompress/enc/brotli_bit_stream.c
deleted file mode 100644
index 50b10eda851b..000000000000
--- a/BaseTools/Source/C/BrotliCompress/enc/brotli_bit_stream.c
+++ /dev/null
@@ -1,1331 +0,0 @@
-/* Copyright 2014 Google Inc. All Rights Reserved.
-
- Distributed under MIT license.
- See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
-*/
-
-/* Brotli bit stream functions to support the low level format. There are no
- compression algorithms here, just the right ordering of bits to match the
- specs. */
-
-#include "./brotli_bit_stream.h"
-
-#include <string.h> /* memcpy, memset */
-
-#include "../common/constants.h"
-#include "../common/context.h"
-#include "../common/platform.h"
-#include <brotli/types.h>
-#include "./entropy_encode.h"
-#include "./entropy_encode_static.h"
-#include "./fast_log.h"
-#include "./histogram.h"
-#include "./memory.h"
-#include "./write_bits.h"
-
-#if defined(__cplusplus) || defined(c_plusplus)
-extern "C" {
-#endif
-
-#define MAX_HUFFMAN_TREE_SIZE (2 * BROTLI_NUM_COMMAND_SYMBOLS + 1)
-/* The maximum size of Huffman dictionary for distances assuming that
- NPOSTFIX = 0 and NDIRECT = 0. */
-#define MAX_SIMPLE_DISTANCE_ALPHABET_SIZE \
- BROTLI_DISTANCE_ALPHABET_SIZE(0, 0, BROTLI_LARGE_MAX_DISTANCE_BITS)
-/* MAX_SIMPLE_DISTANCE_ALPHABET_SIZE == 140 */
-
-/* Represents the range of values belonging to a prefix code:
- [offset, offset + 2^nbits) */
-typedef struct PrefixCodeRange {
- uint32_t offset;
- uint32_t nbits;
-} PrefixCodeRange;
-
-static const PrefixCodeRange
- kBlockLengthPrefixCode[BROTLI_NUM_BLOCK_LEN_SYMBOLS] = {
- { 1, 2}, { 5, 2}, { 9, 2}, {13, 2}, {17, 3}, { 25, 3}, { 33, 3},
- {41, 3}, {49, 4}, {65, 4}, {81, 4}, {97, 4}, {113, 5}, {145, 5},
- {177, 5}, { 209, 5}, { 241, 6}, { 305, 6}, { 369, 7}, { 497, 8},
- {753, 9}, {1265, 10}, {2289, 11}, {4337, 12}, {8433, 13}, {16625, 24}
-};
-
-static BROTLI_INLINE uint32_t BlockLengthPrefixCode(uint32_t len) {
- uint32_t code = (len >= 177) ? (len >= 753 ? 20 : 14) : (len >= 41 ? 7 : 0);
- while (code < (BROTLI_NUM_BLOCK_LEN_SYMBOLS - 1) &&
- len >= kBlockLengthPrefixCode[code + 1].offset) ++code;
- return code;
-}
-
-static BROTLI_INLINE void GetBlockLengthPrefixCode(uint32_t len, size_t* code,
- uint32_t* n_extra, uint32_t* extra) {
- *code = BlockLengthPrefixCode(len);
- *n_extra = kBlockLengthPrefixCode[*code].nbits;
- *extra = len - kBlockLengthPrefixCode[*code].offset;
-}
-
-typedef struct BlockTypeCodeCalculator {
- size_t last_type;
- size_t second_last_type;
-} BlockTypeCodeCalculator;
-
-static void InitBlockTypeCodeCalculator(BlockTypeCodeCalculator* self) {
- self->last_type = 1;
- self->second_last_type = 0;
-}
-
-static BROTLI_INLINE size_t NextBlockTypeCode(
- BlockTypeCodeCalculator* calculator, uint8_t type) {
- size_t type_code = (type == calculator->last_type + 1) ? 1u :
- (type == calculator->second_last_type) ? 0u : type + 2u;
- calculator->second_last_type = calculator->last_type;
- calculator->last_type = type;
- return type_code;
-}
-
-/* |nibblesbits| represents the 2 bits to encode MNIBBLES (0-3)
- REQUIRES: length > 0
- REQUIRES: length <= (1 << 24) */
-static void BrotliEncodeMlen(size_t length, uint64_t* bits,
- size_t* numbits, uint64_t* nibblesbits) {
- size_t lg = (length == 1) ? 1 : Log2FloorNonZero((uint32_t)(length - 1)) + 1;
- size_t mnibbles = (lg < 16 ? 16 : (lg + 3)) / 4;
- BROTLI_DCHECK(length > 0);
- BROTLI_DCHECK(length <= (1 << 24));
- BROTLI_DCHECK(lg <= 24);
- *nibblesbits = mnibbles - 4;
- *numbits = mnibbles * 4;
- *bits = length - 1;
-}
-
-static BROTLI_INLINE void StoreCommandExtra(
- const Command* cmd, size_t* storage_ix, uint8_t* storage) {
- uint32_t copylen_code = CommandCopyLenCode(cmd);
- uint16_t inscode = GetInsertLengthCode(cmd->insert_len_);
- uint16_t copycode = GetCopyLengthCode(copylen_code);
- uint32_t insnumextra = GetInsertExtra(inscode);
- uint64_t insextraval = cmd->insert_len_ - GetInsertBase(inscode);
- uint64_t copyextraval = copylen_code - GetCopyBase(copycode);
- uint64_t bits = (copyextraval << insnumextra) | insextraval;
- BrotliWriteBits(
- insnumextra + GetCopyExtra(copycode), bits, storage_ix, storage);
-}
-
-/* Data structure that stores almost everything that is needed to encode each
- block switch command. */
-typedef struct BlockSplitCode {
- BlockTypeCodeCalculator type_code_calculator;
- uint8_t type_depths[BROTLI_MAX_BLOCK_TYPE_SYMBOLS];
- uint16_t type_bits[BROTLI_MAX_BLOCK_TYPE_SYMBOLS];
- uint8_t length_depths[BROTLI_NUM_BLOCK_LEN_SYMBOLS];
- uint16_t length_bits[BROTLI_NUM_BLOCK_LEN_SYMBOLS];
-} BlockSplitCode;
-
-/* Stores a number between 0 and 255. */
-static void StoreVarLenUint8(size_t n, size_t* storage_ix, uint8_t* storage) {
- if (n == 0) {
- BrotliWriteBits(1, 0, storage_ix, storage);
- } else {
- size_t nbits = Log2FloorNonZero(n);
- BrotliWriteBits(1, 1, storage_ix, storage);
- BrotliWriteBits(3, nbits, storage_ix, storage);
- BrotliWriteBits(nbits, n - ((size_t)1 << nbits), storage_ix, storage);
- }
-}
-
-/* Stores the compressed meta-block header.
- REQUIRES: length > 0
- REQUIRES: length <= (1 << 24) */
-static void StoreCompressedMetaBlockHeader(BROTLI_BOOL is_final_block,
- size_t length,
- size_t* storage_ix,
- uint8_t* storage) {
- uint64_t lenbits;
- size_t nlenbits;
- uint64_t nibblesbits;
-
- /* Write ISLAST bit. */
- BrotliWriteBits(1, (uint64_t)is_final_block, storage_ix, storage);
- /* Write ISEMPTY bit. */
- if (is_final_block) {
- BrotliWriteBits(1, 0, storage_ix, storage);
- }
-
- BrotliEncodeMlen(length, &lenbits, &nlenbits, &nibblesbits);
- BrotliWriteBits(2, nibblesbits, storage_ix, storage);
- BrotliWriteBits(nlenbits, lenbits, storage_ix, storage);
-
- if (!is_final_block) {
- /* Write ISUNCOMPRESSED bit. */
- BrotliWriteBits(1, 0, storage_ix, storage);
- }
-}
-
-/* Stores the uncompressed meta-block header.
- REQUIRES: length > 0
- REQUIRES: length <= (1 << 24) */
-static void BrotliStoreUncompressedMetaBlockHeader(size_t length,
- size_t* storage_ix,
- uint8_t* storage) {
- uint64_t lenbits;
- size_t nlenbits;
- uint64_t nibblesbits;
-
- /* Write ISLAST bit.
- Uncompressed block cannot be the last one, so set to 0. */
- BrotliWriteBits(1, 0, storage_ix, storage);
- BrotliEncodeMlen(length, &lenbits, &nlenbits, &nibblesbits);
- BrotliWriteBits(2, nibblesbits, storage_ix, storage);
- BrotliWriteBits(nlenbits, lenbits, storage_ix, storage);
- /* Write ISUNCOMPRESSED bit. */
- BrotliWriteBits(1, 1, storage_ix, storage);
-}
-
-static void BrotliStoreHuffmanTreeOfHuffmanTreeToBitMask(
- const int num_codes, const uint8_t* code_length_bitdepth,
- size_t* storage_ix, uint8_t* storage) {
- static const uint8_t kStorageOrder[BROTLI_CODE_LENGTH_CODES] = {
- 1, 2, 3, 4, 0, 5, 17, 6, 16, 7, 8, 9, 10, 11, 12, 13, 14, 15
- };
- /* The bit lengths of the Huffman code over the code length alphabet
- are compressed with the following static Huffman code:
- Symbol Code
- ------ ----
- 0 00
- 1 1110
- 2 110
- 3 01
- 4 10
- 5 1111 */
- static const uint8_t kHuffmanBitLengthHuffmanCodeSymbols[6] = {
- 0, 7, 3, 2, 1, 15
- };
- static const uint8_t kHuffmanBitLengthHuffmanCodeBitLengths[6] = {
- 2, 4, 3, 2, 2, 4
- };
-
- size_t skip_some = 0; /* skips none. */
-
- /* Throw away trailing zeros: */
- size_t codes_to_store = BROTLI_CODE_LENGTH_CODES;
- if (num_codes > 1) {
- for (; codes_to_store > 0; --codes_to_store) {
- if (code_length_bitdepth[kStorageOrder[codes_to_store - 1]] != 0) {
- break;
- }
- }
- }
- if (code_length_bitdepth[kStorageOrder[0]] == 0 &&
- code_length_bitdepth[kStorageOrder[1]] == 0) {
- skip_some = 2; /* skips two. */
- if (code_length_bitdepth[kStorageOrder[2]] == 0) {
- skip_some = 3; /* skips three. */
- }
- }
- BrotliWriteBits(2, skip_some, storage_ix, storage);
- {
- size_t i;
- for (i = skip_some; i < codes_to_store; ++i) {
- size_t l = code_length_bitdepth[kStorageOrder[i]];
- BrotliWriteBits(kHuffmanBitLengthHuffmanCodeBitLengths[l],
- kHuffmanBitLengthHuffmanCodeSymbols[l], storage_ix, storage);
- }
- }
-}
-
-static void BrotliStoreHuffmanTreeToBitMask(
- const size_t huffman_tree_size, const uint8_t* huffman_tree,
- const uint8_t* huffman_tree_extra_bits, const uint8_t* code_length_bitdepth,
- const uint16_t* code_length_bitdepth_symbols,
- size_t* BROTLI_RESTRICT storage_ix, uint8_t* BROTLI_RESTRICT storage) {
- size_t i;
- for (i = 0; i < huffman_tree_size; ++i) {
- size_t ix = huffman_tree[i];
- BrotliWriteBits(code_length_bitdepth[ix], code_length_bitdepth_symbols[ix],
- storage_ix, storage);
- /* Extra bits */
- switch (ix) {
- case BROTLI_REPEAT_PREVIOUS_CODE_LENGTH:
- BrotliWriteBits(2, huffman_tree_extra_bits[i], storage_ix, storage);
- break;
- case BROTLI_REPEAT_ZERO_CODE_LENGTH:
- BrotliWriteBits(3, huffman_tree_extra_bits[i], storage_ix, storage);
- break;
- }
- }
-}
-
-static void StoreSimpleHuffmanTree(const uint8_t* depths,
- size_t symbols[4],
- size_t num_symbols,
- size_t max_bits,
- size_t* storage_ix, uint8_t* storage) {
- /* value of 1 indicates a simple Huffman code */
- BrotliWriteBits(2, 1, storage_ix, storage);
- BrotliWriteBits(2, num_symbols - 1, storage_ix, storage); /* NSYM - 1 */
-
- {
- /* Sort */
- size_t i;
- for (i = 0; i < num_symbols; i++) {
- size_t j;
- for (j = i + 1; j < num_symbols; j++) {
- if (depths[symbols[j]] < depths[symbols[i]]) {
- BROTLI_SWAP(size_t, symbols, j, i);
- }
- }
- }
- }
-
- if (num_symbols == 2) {
- BrotliWriteBits(max_bits, symbols[0], storage_ix, storage);
- BrotliWriteBits(max_bits, symbols[1], storage_ix, storage);
- } else if (num_symbols == 3) {
- BrotliWriteBits(max_bits, symbols[0], storage_ix, storage);
- BrotliWriteBits(max_bits, symbols[1], storage_ix, storage);
- BrotliWriteBits(max_bits, symbols[2], storage_ix, storage);
- } else {
- BrotliWriteBits(max_bits, symbols[0], storage_ix, storage);
- BrotliWriteBits(max_bits, symbols[1], storage_ix, storage);
- BrotliWriteBits(max_bits, symbols[2], storage_ix, storage);
- BrotliWriteBits(max_bits, symbols[3], storage_ix, storage);
- /* tree-select */
- BrotliWriteBits(1, depths[symbols[0]] == 1 ? 1 : 0, storage_ix, storage);
- }
-}
-
-/* num = alphabet size
- depths = symbol depths */
-void BrotliStoreHuffmanTree(const uint8_t* depths, size_t num,
- HuffmanTree* tree,
- size_t* storage_ix, uint8_t* storage) {
- /* Write the Huffman tree into the brotli-representation.
- The command alphabet is the largest, so this allocation will fit all
- alphabets. */
- uint8_t huffman_tree[BROTLI_NUM_COMMAND_SYMBOLS];
- uint8_t huffman_tree_extra_bits[BROTLI_NUM_COMMAND_SYMBOLS];
- size_t huffman_tree_size = 0;
- uint8_t code_length_bitdepth[BROTLI_CODE_LENGTH_CODES] = { 0 };
- uint16_t code_length_bitdepth_symbols[BROTLI_CODE_LENGTH_CODES];
- uint32_t huffman_tree_histogram[BROTLI_CODE_LENGTH_CODES] = { 0 };
- size_t i;
- int num_codes = 0;
- size_t code = 0;
-
- BROTLI_DCHECK(num <= BROTLI_NUM_COMMAND_SYMBOLS);
-
- BrotliWriteHuffmanTree(depths, num, &huffman_tree_size, huffman_tree,
- huffman_tree_extra_bits);
-
- /* Calculate the statistics of the Huffman tree in brotli-representation. */
- for (i = 0; i < huffman_tree_size; ++i) {
- ++huffman_tree_histogram[huffman_tree[i]];
- }
-
- for (i = 0; i < BROTLI_CODE_LENGTH_CODES; ++i) {
- if (huffman_tree_histogram[i]) {
- if (num_codes == 0) {
- code = i;
- num_codes = 1;
- } else if (num_codes == 1) {
- num_codes = 2;
- break;
- }
- }
- }
-
- /* Calculate another Huffman tree to use for compressing both the
- earlier Huffman tree with. */
- BrotliCreateHuffmanTree(huffman_tree_histogram, BROTLI_CODE_LENGTH_CODES,
- 5, tree, code_length_bitdepth);
- BrotliConvertBitDepthsToSymbols(code_length_bitdepth,
- BROTLI_CODE_LENGTH_CODES,
- code_length_bitdepth_symbols);
-
- /* Now, we have all the data, let's start storing it */
- BrotliStoreHuffmanTreeOfHuffmanTreeToBitMask(num_codes, code_length_bitdepth,
- storage_ix, storage);
-
- if (num_codes == 1) {
- code_length_bitdepth[code] = 0;
- }
-
- /* Store the real Huffman tree now. */
- BrotliStoreHuffmanTreeToBitMask(huffman_tree_size,
- huffman_tree,
- huffman_tree_extra_bits,
- code_length_bitdepth,
- code_length_bitdepth_symbols,
- storage_ix, storage);
-}
-
-/* Builds a Huffman tree from histogram[0:length] into depth[0:length] and
- bits[0:length] and stores the encoded tree to the bit stream. */
-static void BuildAndStoreHuffmanTree(const uint32_t* histogram,
- const size_t histogram_length,
- const size_t alphabet_size,
- HuffmanTree* tree,
- uint8_t* depth,
- uint16_t* bits,
- size_t* storage_ix,
- uint8_t* storage) {
- size_t count = 0;
- size_t s4[4] = { 0 };
- size_t i;
- size_t max_bits = 0;
- for (i = 0; i < histogram_length; i++) {
- if (histogram[i]) {
- if (count < 4) {
- s4[count] = i;
- } else if (count > 4) {
- break;
- }
- count++;
- }
- }
-
- {
- size_t max_bits_counter = alphabet_size - 1;
- while (max_bits_counter) {
- max_bits_counter >>= 1;
- ++max_bits;
- }
- }
-
- if (count <= 1) {
- BrotliWriteBits(4, 1, storage_ix, storage);
- BrotliWriteBits(max_bits, s4[0], storage_ix, storage);
- depth[s4[0]] = 0;
- bits[s4[0]] = 0;
- return;
- }
-
- memset(depth, 0, histogram_length * sizeof(depth[0]));
- BrotliCreateHuffmanTree(histogram, histogram_length, 15, tree, depth);
- BrotliConvertBitDepthsToSymbols(depth, histogram_length, bits);
-
- if (count <= 4) {
- StoreSimpleHuffmanTree(depth, s4, count, max_bits, storage_ix, storage);
- } else {
- BrotliStoreHuffmanTree(depth, histogram_length, tree, storage_ix, storage);
- }
-}
-
-static BROTLI_INLINE BROTLI_BOOL SortHuffmanTree(
- const HuffmanTree* v0, const HuffmanTree* v1) {
- return TO_BROTLI_BOOL(v0->total_count_ < v1->total_count_);
-}
-
-void BrotliBuildAndStoreHuffmanTreeFast(MemoryManager* m,
- const uint32_t* histogram,
- const size_t histogram_total,
- const size_t max_bits,
- uint8_t* depth, uint16_t* bits,
- size_t* storage_ix,
- uint8_t* storage) {
- size_t count = 0;
- size_t symbols[4] = { 0 };
- size_t length = 0;
- size_t total = histogram_total;
- while (total != 0) {
- if (histogram[length]) {
- if (count < 4) {
- symbols[count] = length;
- }
- ++count;
- total -= histogram[length];
- }
- ++length;
- }
-
- if (count <= 1) {
- BrotliWriteBits(4, 1, storage_ix, storage);
- BrotliWriteBits(max_bits, symbols[0], storage_ix, storage);
- depth[symbols[0]] = 0;
- bits[symbols[0]] = 0;
- return;
- }
-
- memset(depth, 0, length * sizeof(depth[0]));
- {
- const size_t max_tree_size = 2 * length + 1;
- HuffmanTree* tree = BROTLI_ALLOC(m, HuffmanTree, max_tree_size);
- uint32_t count_limit;
- if (BROTLI_IS_OOM(m)) return;
- for (count_limit = 1; ; count_limit *= 2) {
- HuffmanTree* node = tree;
- size_t l;
- for (l = length; l != 0;) {
- --l;
- if (histogram[l]) {
- if (BROTLI_PREDICT_TRUE(histogram[l] >= count_limit)) {
- InitHuffmanTree(node, histogram[l], -1, (int16_t)l);
- } else {
- InitHuffmanTree(node, count_limit, -1, (int16_t)l);
- }
- ++node;
- }
- }
- {
- const int n = (int)(node - tree);
- HuffmanTree sentinel;
- int i = 0; /* Points to the next leaf node. */
- int j = n + 1; /* Points to the next non-leaf node. */
- int k;
-
- SortHuffmanTreeItems(tree, (size_t)n, SortHuffmanTree);
- /* The nodes are:
- [0, n): the sorted leaf nodes that we start with.
- [n]: we add a sentinel here.
- [n + 1, 2n): new parent nodes are added here, starting from
- (n+1). These are naturally in ascending order.
- [2n]: we add a sentinel at the end as well.
- There will be (2n+1) elements at the end. */
- InitHuffmanTree(&sentinel, BROTLI_UINT32_MAX, -1, -1);
- *node++ = sentinel;
- *node++ = sentinel;
-
- for (k = n - 1; k > 0; --k) {
- int left, right;
- if (tree[i].total_count_ <= tree[j].total_count_) {
- left = i;
- ++i;
- } else {
- left = j;
- ++j;
- }
- if (tree[i].total_count_ <= tree[j].total_count_) {
- right = i;
- ++i;
- } else {
- right = j;
- ++j;
- }
- /* The sentinel node becomes the parent node. */
- node[-1].total_count_ =
- tree[left].total_count_ + tree[right].total_count_;
- node[-1].index_left_ = (int16_t)left;
- node[-1].index_right_or_value_ = (int16_t)right;
- /* Add back the last sentinel node. */
- *node++ = sentinel;
- }
- if (BrotliSetDepth(2 * n - 1, tree, depth, 14)) {
- /* We need to pack the Huffman tree in 14 bits. If this was not
- successful, add fake entities to the lowest values and retry. */
- break;
- }
- }
- }
- BROTLI_FREE(m, tree);
- }
- BrotliConvertBitDepthsToSymbols(depth, length, bits);
- if (count <= 4) {
- size_t i;
- /* value of 1 indicates a simple Huffman code */
- BrotliWriteBits(2, 1, storage_ix, storage);
- BrotliWriteBits(2, count - 1, storage_ix, storage); /* NSYM - 1 */
-
- /* Sort */
- for (i = 0; i < count; i++) {
- size_t j;
- for (j = i + 1; j < count; j++) {
- if (depth[symbols[j]] < depth[symbols[i]]) {
- BROTLI_SWAP(size_t, symbols, j, i);
- }
- }
- }
-
- if (count == 2) {
- BrotliWriteBits(max_bits, symbols[0], storage_ix, storage);
- BrotliWriteBits(max_bits, symbols[1], storage_ix, storage);
- } else if (count == 3) {
- BrotliWriteBits(max_bits, symbols[0], storage_ix, storage);
- BrotliWriteBits(max_bits, symbols[1], storage_ix, storage);
- BrotliWriteBits(max_bits, symbols[2], storage_ix, storage);
- } else {
- BrotliWriteBits(max_bits, symbols[0], storage_ix, storage);
- BrotliWriteBits(max_bits, symbols[1], storage_ix, storage);
- BrotliWriteBits(max_bits, symbols[2], storage_ix, storage);
- BrotliWriteBits(max_bits, symbols[3], storage_ix, storage);
- /* tree-select */
- BrotliWriteBits(1, depth[symbols[0]] == 1 ? 1 : 0, storage_ix, storage);
- }
- } else {
- uint8_t previous_value = 8;
- size_t i;
- /* Complex Huffman Tree */
- StoreStaticCodeLengthCode(storage_ix, storage);
-
- /* Actual RLE coding. */
- for (i = 0; i < length;) {
- const uint8_t value = depth[i];
- size_t reps = 1;
- size_t k;
- for (k = i + 1; k < length && depth[k] == value; ++k) {
- ++reps;
- }
- i += reps;
- if (value == 0) {
- BrotliWriteBits(kZeroRepsDepth[reps], kZeroRepsBits[reps],
- storage_ix, storage);
- } else {
- if (previous_value != value) {
- BrotliWriteBits(kCodeLengthDepth[value], kCodeLengthBits[value],
- storage_ix, storage);
- --reps;
- }
- if (reps < 3) {
- while (reps != 0) {
- reps--;
- BrotliWriteBits(kCodeLengthDepth[value], kCodeLengthBits[value],
- storage_ix, storage);
- }
- } else {
- reps -= 3;
- BrotliWriteBits(kNonZeroRepsDepth[reps], kNonZeroRepsBits[reps],
- storage_ix, storage);
- }
- previous_value = value;
- }
- }
- }
-}
-
-static size_t IndexOf(const uint8_t* v, size_t v_size, uint8_t value) {
- size_t i = 0;
- for (; i < v_size; ++i) {
- if (v[i] == value) return i;
- }
- return i;
-}
-
-static void MoveToFront(uint8_t* v, size_t index) {
- uint8_t value = v[index];
- size_t i;
- for (i = index; i != 0; --i) {
- v[i] = v[i - 1];
- }
- v[0] = value;
-}
-
-static void MoveToFrontTransform(const uint32_t* BROTLI_RESTRICT v_in,
- const size_t v_size,
- uint32_t* v_out) {
- size_t i;
- uint8_t mtf[256];
- uint32_t max_value;
- if (v_size == 0) {
- return;
- }
- max_value = v_in[0];
- for (i = 1; i < v_size; ++i) {
- if (v_in[i] > max_value) max_value = v_in[i];
- }
- BROTLI_DCHECK(max_value < 256u);
- for (i = 0; i <= max_value; ++i) {
- mtf[i] = (uint8_t)i;
- }
- {
- size_t mtf_size = max_value + 1;
- for (i = 0; i < v_size; ++i) {
- size_t index = IndexOf(mtf, mtf_size, (uint8_t)v_in[i]);
- BROTLI_DCHECK(index < mtf_size);
- v_out[i] = (uint32_t)index;
- MoveToFront(mtf, index);
- }
- }
-}
-
-/* Finds runs of zeros in v[0..in_size) and replaces them with a prefix code of
- the run length plus extra bits (lower 9 bits is the prefix code and the rest
- are the extra bits). Non-zero values in v[] are shifted by
- *max_length_prefix. Will not create prefix codes bigger than the initial
- value of *max_run_length_prefix. The prefix code of run length L is simply
- Log2Floor(L) and the number of extra bits is the same as the prefix code. */
-static void RunLengthCodeZeros(const size_t in_size,
- uint32_t* BROTLI_RESTRICT v, size_t* BROTLI_RESTRICT out_size,
- uint32_t* BROTLI_RESTRICT max_run_length_prefix) {
- uint32_t max_reps = 0;
- size_t i;
- uint32_t max_prefix;
- for (i = 0; i < in_size;) {
- uint32_t reps = 0;
- for (; i < in_size && v[i] != 0; ++i) ;
- for (; i < in_size && v[i] == 0; ++i) {
- ++reps;
- }
- max_reps = BROTLI_MAX(uint32_t, reps, max_reps);
- }
- max_prefix = max_reps > 0 ? Log2FloorNonZero(max_reps) : 0;
- max_prefix = BROTLI_MIN(uint32_t, max_prefix, *max_run_length_prefix);
- *max_run_length_prefix = max_prefix;
- *out_size = 0;
- for (i = 0; i < in_size;) {
- BROTLI_DCHECK(*out_size <= i);
- if (v[i] != 0) {
- v[*out_size] = v[i] + *max_run_length_prefix;
- ++i;
- ++(*out_size);
- } else {
- uint32_t reps = 1;
- size_t k;
- for (k = i + 1; k < in_size && v[k] == 0; ++k) {
- ++reps;
- }
- i += reps;
- while (reps != 0) {
- if (reps < (2u << max_prefix)) {
- uint32_t run_length_prefix = Log2FloorNonZero(reps);
- const uint32_t extra_bits = reps - (1u << run_length_prefix);
- v[*out_size] = run_length_prefix + (extra_bits << 9);
- ++(*out_size);
- break;
- } else {
- const uint32_t extra_bits = (1u << max_prefix) - 1u;
- v[*out_size] = max_prefix + (extra_bits << 9);
- reps -= (2u << max_prefix) - 1u;
- ++(*out_size);
- }
- }
- }
- }
-}
-
-#define SYMBOL_BITS 9
-
-static void EncodeContextMap(MemoryManager* m,
- const uint32_t* context_map,
- size_t context_map_size,
- size_t num_clusters,
- HuffmanTree* tree,
- size_t* storage_ix, uint8_t* storage) {
- size_t i;
- uint32_t* rle_symbols;
- uint32_t max_run_length_prefix = 6;
- size_t num_rle_symbols = 0;
- uint32_t histogram[BROTLI_MAX_CONTEXT_MAP_SYMBOLS];
- static const uint32_t kSymbolMask = (1u << SYMBOL_BITS) - 1u;
- uint8_t depths[BROTLI_MAX_CONTEXT_MAP_SYMBOLS];
- uint16_t bits[BROTLI_MAX_CONTEXT_MAP_SYMBOLS];
-
- StoreVarLenUint8(num_clusters - 1, storage_ix, storage);
-
- if (num_clusters == 1) {
- return;
- }
-
- rle_symbols = BROTLI_ALLOC(m, uint32_t, context_map_size);
- if (BROTLI_IS_OOM(m)) return;
- MoveToFrontTransform(context_map, context_map_size, rle_symbols);
- RunLengthCodeZeros(context_map_size, rle_symbols,
- &num_rle_symbols, &max_run_length_prefix);
- memset(histogram, 0, sizeof(histogram));
- for (i = 0; i < num_rle_symbols; ++i) {
- ++histogram[rle_symbols[i] & kSymbolMask];
- }
- {
- BROTLI_BOOL use_rle = TO_BROTLI_BOOL(max_run_length_prefix > 0);
- BrotliWriteBits(1, (uint64_t)use_rle, storage_ix, storage);
- if (use_rle) {
- BrotliWriteBits(4, max_run_length_prefix - 1, storage_ix, storage);
- }
- }
- BuildAndStoreHuffmanTree(histogram, num_clusters + max_run_length_prefix,
- num_clusters + max_run_length_prefix,
- tree, depths, bits, storage_ix, storage);
- for (i = 0; i < num_rle_symbols; ++i) {
- const uint32_t rle_symbol = rle_symbols[i] & kSymbolMask;
- const uint32_t extra_bits_val = rle_symbols[i] >> SYMBOL_BITS;
- BrotliWriteBits(depths[rle_symbol], bits[rle_symbol], storage_ix, storage);
- if (rle_symbol > 0 && rle_symbol <= max_run_length_prefix) {
- BrotliWriteBits(rle_symbol, extra_bits_val, storage_ix, storage);
- }
- }
- BrotliWriteBits(1, 1, storage_ix, storage); /* use move-to-front */
- BROTLI_FREE(m, rle_symbols);
-}
-
-/* Stores the block switch command with index block_ix to the bit stream. */
-static BROTLI_INLINE void StoreBlockSwitch(BlockSplitCode* code,
- const uint32_t block_len,
- const uint8_t block_type,
- BROTLI_BOOL is_first_block,
- size_t* storage_ix,
- uint8_t* storage) {
- size_t typecode = NextBlockTypeCode(&code->type_code_calculator, block_type);
- size_t lencode;
- uint32_t len_nextra;
- uint32_t len_extra;
- if (!is_first_block) {
- BrotliWriteBits(code->type_depths[typecode], code->type_bits[typecode],
- storage_ix, storage);
- }
- GetBlockLengthPrefixCode(block_len, &lencode, &len_nextra, &len_extra);
-
- BrotliWriteBits(code->length_depths[lencode], code->length_bits[lencode],
- storage_ix, storage);
- BrotliWriteBits(len_nextra, len_extra, storage_ix, storage);
-}
-
-/* Builds a BlockSplitCode data structure from the block split given by the
- vector of block types and block lengths and stores it to the bit stream. */
-static void BuildAndStoreBlockSplitCode(const uint8_t* types,
- const uint32_t* lengths,
- const size_t num_blocks,
- const size_t num_types,
- HuffmanTree* tree,
- BlockSplitCode* code,
- size_t* storage_ix,
- uint8_t* storage) {
- uint32_t type_histo[BROTLI_MAX_BLOCK_TYPE_SYMBOLS];
- uint32_t length_histo[BROTLI_NUM_BLOCK_LEN_SYMBOLS];
- size_t i;
- BlockTypeCodeCalculator type_code_calculator;
- memset(type_histo, 0, (num_types + 2) * sizeof(type_histo[0]));
- memset(length_histo, 0, sizeof(length_histo));
- InitBlockTypeCodeCalculator(&type_code_calculator);
- for (i = 0; i < num_blocks; ++i) {
- size_t type_code = NextBlockTypeCode(&type_code_calculator, types[i]);
- if (i != 0) ++type_histo[type_code];
- ++length_histo[BlockLengthPrefixCode(lengths[i])];
- }
- StoreVarLenUint8(num_types - 1, storage_ix, storage);
- if (num_types > 1) { /* TODO: else? could StoreBlockSwitch occur? */
- BuildAndStoreHuffmanTree(&type_histo[0], num_types + 2, num_types + 2, tree,
- &code->type_depths[0], &code->type_bits[0],
- storage_ix, storage);
- BuildAndStoreHuffmanTree(&length_histo[0], BROTLI_NUM_BLOCK_LEN_SYMBOLS,
- BROTLI_NUM_BLOCK_LEN_SYMBOLS,
- tree, &code->length_depths[0],
- &code->length_bits[0], storage_ix, storage);
- StoreBlockSwitch(code, lengths[0], types[0], 1, storage_ix, storage);
- }
-}
-
-/* Stores a context map where the histogram type is always the block type. */
-static void StoreTrivialContextMap(size_t num_types,
- size_t context_bits,
- HuffmanTree* tree,
- size_t* storage_ix,
- uint8_t* storage) {
- StoreVarLenUint8(num_types - 1, storage_ix, storage);
- if (num_types > 1) {
- size_t repeat_code = context_bits - 1u;
- size_t repeat_bits = (1u << repeat_code) - 1u;
- size_t alphabet_size = num_types + repeat_code;
- uint32_t histogram[BROTLI_MAX_CONTEXT_MAP_SYMBOLS];
- uint8_t depths[BROTLI_MAX_CONTEXT_MAP_SYMBOLS];
- uint16_t bits[BROTLI_MAX_CONTEXT_MAP_SYMBOLS];
- size_t i;
- memset(histogram, 0, alphabet_size * sizeof(histogram[0]));
- /* Write RLEMAX. */
- BrotliWriteBits(1, 1, storage_ix, storage);
- BrotliWriteBits(4, repeat_code - 1, storage_ix, storage);
- histogram[repeat_code] = (uint32_t)num_types;
- histogram[0] = 1;
- for (i = context_bits; i < alphabet_size; ++i) {
- histogram[i] = 1;
- }
- BuildAndStoreHuffmanTree(histogram, alphabet_size, alphabet_size,
- tree, depths, bits, storage_ix, storage);
- for (i = 0; i < num_types; ++i) {
- size_t code = (i == 0 ? 0 : i + context_bits - 1);
- BrotliWriteBits(depths[code], bits[code], storage_ix, storage);
- BrotliWriteBits(
- depths[repeat_code], bits[repeat_code], storage_ix, storage);
- BrotliWriteBits(repeat_code, repeat_bits, storage_ix, storage);
- }
- /* Write IMTF (inverse-move-to-front) bit. */
- BrotliWriteBits(1, 1, storage_ix, storage);
- }
-}
-
-/* Manages the encoding of one block category (literal, command or distance). */
-typedef struct BlockEncoder {
- size_t histogram_length_;
- size_t num_block_types_;
- const uint8_t* block_types_; /* Not owned. */
- const uint32_t* block_lengths_; /* Not owned. */
- size_t num_blocks_;
- BlockSplitCode block_split_code_;
- size_t block_ix_;
- size_t block_len_;
- size_t entropy_ix_;
- uint8_t* depths_;
- uint16_t* bits_;
-} BlockEncoder;
-
-static void InitBlockEncoder(BlockEncoder* self, size_t histogram_length,
- size_t num_block_types, const uint8_t* block_types,
- const uint32_t* block_lengths, const size_t num_blocks) {
- self->histogram_length_ = histogram_length;
- self->num_block_types_ = num_block_types;
- self->block_types_ = block_types;
- self->block_lengths_ = block_lengths;
- self->num_blocks_ = num_blocks;
- InitBlockTypeCodeCalculator(&self->block_split_code_.type_code_calculator);
- self->block_ix_ = 0;
- self->block_len_ = num_blocks == 0 ? 0 : block_lengths[0];
- self->entropy_ix_ = 0;
- self->depths_ = 0;
- self->bits_ = 0;
-}
-
-static void CleanupBlockEncoder(MemoryManager* m, BlockEncoder* self) {
- BROTLI_FREE(m, self->depths_);
- BROTLI_FREE(m, self->bits_);
-}
-
-/* Creates entropy codes of block lengths and block types and stores them
- to the bit stream. */
-static void BuildAndStoreBlockSwitchEntropyCodes(BlockEncoder* self,
- HuffmanTree* tree, size_t* storage_ix, uint8_t* storage) {
- BuildAndStoreBlockSplitCode(self->block_types_, self->block_lengths_,
- self->num_blocks_, self->num_block_types_, tree, &self->block_split_code_,
- storage_ix, storage);
-}
-
-/* Stores the next symbol with the entropy code of the current block type.
- Updates the block type and block length at block boundaries. */
-static void StoreSymbol(BlockEncoder* self, size_t symbol, size_t* storage_ix,
- uint8_t* storage) {
- if (self->block_len_ == 0) {
- size_t block_ix = ++self->block_ix_;
- uint32_t block_len = self->block_lengths_[block_ix];
- uint8_t block_type = self->block_types_[block_ix];
- self->block_len_ = block_len;
- self->entropy_ix_ = block_type * self->histogram_length_;
- StoreBlockSwitch(&self->block_split_code_, block_len, block_type, 0,
- storage_ix, storage);
- }
- --self->block_len_;
- {
- size_t ix = self->entropy_ix_ + symbol;
- BrotliWriteBits(self->depths_[ix], self->bits_[ix], storage_ix, storage);
- }
-}
-
-/* Stores the next symbol with the entropy code of the current block type and
- context value.
- Updates the block type and block length at block boundaries. */
-static void StoreSymbolWithContext(BlockEncoder* self, size_t symbol,
- size_t context, const uint32_t* context_map, size_t* storage_ix,
- uint8_t* storage, const size_t context_bits) {
- if (self->block_len_ == 0) {
- size_t block_ix = ++self->block_ix_;
- uint32_t block_len = self->block_lengths_[block_ix];
- uint8_t block_type = self->block_types_[block_ix];
- self->block_len_ = block_len;
- self->entropy_ix_ = (size_t)block_type << context_bits;
- StoreBlockSwitch(&self->block_split_code_, block_len, block_type, 0,
- storage_ix, storage);
- }
- --self->block_len_;
- {
- size_t histo_ix = context_map[self->entropy_ix_ + context];
- size_t ix = histo_ix * self->histogram_length_ + symbol;
- BrotliWriteBits(self->depths_[ix], self->bits_[ix], storage_ix, storage);
- }
-}
-
-#define FN(X) X ## Literal
-/* NOLINTNEXTLINE(build/include) */
-#include "./block_encoder_inc.h"
-#undef FN
-
-#define FN(X) X ## Command
-/* NOLINTNEXTLINE(build/include) */
-#include "./block_encoder_inc.h"
-#undef FN
-
-#define FN(X) X ## Distance
-/* NOLINTNEXTLINE(build/include) */
-#include "./block_encoder_inc.h"
-#undef FN
-
-static void JumpToByteBoundary(size_t* storage_ix, uint8_t* storage) {
- *storage_ix = (*storage_ix + 7u) & ~7u;
- storage[*storage_ix >> 3] = 0;
-}
-
-void BrotliStoreMetaBlock(MemoryManager* m,
- const uint8_t* input, size_t start_pos, size_t length, size_t mask,
- uint8_t prev_byte, uint8_t prev_byte2, BROTLI_BOOL is_last,
- const BrotliEncoderParams* params, ContextType literal_context_mode,
- const Command* commands, size_t n_commands, const MetaBlockSplit* mb,
- size_t* storage_ix, uint8_t* storage) {
-
- size_t pos = start_pos;
- size_t i;
- uint32_t num_distance_symbols = params->dist.alphabet_size;
- uint32_t num_effective_distance_symbols = num_distance_symbols;
- HuffmanTree* tree;
- ContextLut literal_context_lut = BROTLI_CONTEXT_LUT(literal_context_mode);
- BlockEncoder literal_enc;
- BlockEncoder command_enc;
- BlockEncoder distance_enc;
- const BrotliDistanceParams* dist = ¶ms->dist;
- if (params->large_window &&
- num_effective_distance_symbols > BROTLI_NUM_HISTOGRAM_DISTANCE_SYMBOLS) {
- num_effective_distance_symbols = BROTLI_NUM_HISTOGRAM_DISTANCE_SYMBOLS;
- }
-
- StoreCompressedMetaBlockHeader(is_last, length, storage_ix, storage);
-
- tree = BROTLI_ALLOC(m, HuffmanTree, MAX_HUFFMAN_TREE_SIZE);
- if (BROTLI_IS_OOM(m)) return;
- InitBlockEncoder(&literal_enc, BROTLI_NUM_LITERAL_SYMBOLS,
- mb->literal_split.num_types, mb->literal_split.types,
- mb->literal_split.lengths, mb->literal_split.num_blocks);
- InitBlockEncoder(&command_enc, BROTLI_NUM_COMMAND_SYMBOLS,
- mb->command_split.num_types, mb->command_split.types,
- mb->command_split.lengths, mb->command_split.num_blocks);
- InitBlockEncoder(&distance_enc, num_effective_distance_symbols,
- mb->distance_split.num_types, mb->distance_split.types,
- mb->distance_split.lengths, mb->distance_split.num_blocks);
-
- BuildAndStoreBlockSwitchEntropyCodes(&literal_enc, tree, storage_ix, storage);
- BuildAndStoreBlockSwitchEntropyCodes(&command_enc, tree, storage_ix, storage);
- BuildAndStoreBlockSwitchEntropyCodes(
- &distance_enc, tree, storage_ix, storage);
-
- BrotliWriteBits(2, dist->distance_postfix_bits, storage_ix, storage);
- BrotliWriteBits(
- 4, dist->num_direct_distance_codes >> dist->distance_postfix_bits,
- storage_ix, storage);
- for (i = 0; i < mb->literal_split.num_types; ++i) {
- BrotliWriteBits(2, literal_context_mode, storage_ix, storage);
- }
-
- if (mb->literal_context_map_size == 0) {
- StoreTrivialContextMap(mb->literal_histograms_size,
- BROTLI_LITERAL_CONTEXT_BITS, tree, storage_ix, storage);
- } else {
- EncodeContextMap(m,
- mb->literal_context_map, mb->literal_context_map_size,
- mb->literal_histograms_size, tree, storage_ix, storage);
- if (BROTLI_IS_OOM(m)) return;
- }
-
- if (mb->distance_context_map_size == 0) {
- StoreTrivialContextMap(mb->distance_histograms_size,
- BROTLI_DISTANCE_CONTEXT_BITS, tree, storage_ix, storage);
- } else {
- EncodeContextMap(m,
- mb->distance_context_map, mb->distance_context_map_size,
- mb->distance_histograms_size, tree, storage_ix, storage);
- if (BROTLI_IS_OOM(m)) return;
- }
-
- BuildAndStoreEntropyCodesLiteral(m, &literal_enc, mb->literal_histograms,
- mb->literal_histograms_size, BROTLI_NUM_LITERAL_SYMBOLS, tree,
- storage_ix, storage);
- if (BROTLI_IS_OOM(m)) return;
- BuildAndStoreEntropyCodesCommand(m, &command_enc, mb->command_histograms,
- mb->command_histograms_size, BROTLI_NUM_COMMAND_SYMBOLS, tree,
- storage_ix, storage);
- if (BROTLI_IS_OOM(m)) return;
- BuildAndStoreEntropyCodesDistance(m, &distance_enc, mb->distance_histograms,
- mb->distance_histograms_size, num_distance_symbols, tree,
- storage_ix, storage);
- if (BROTLI_IS_OOM(m)) return;
- BROTLI_FREE(m, tree);
-
- for (i = 0; i < n_commands; ++i) {
- const Command cmd = commands[i];
- size_t cmd_code = cmd.cmd_prefix_;
- StoreSymbol(&command_enc, cmd_code, storage_ix, storage);
- StoreCommandExtra(&cmd, storage_ix, storage);
- if (mb->literal_context_map_size == 0) {
- size_t j;
- for (j = cmd.insert_len_; j != 0; --j) {
- StoreSymbol(&literal_enc, input[pos & mask], storage_ix, storage);
- ++pos;
- }
- } else {
- size_t j;
- for (j = cmd.insert_len_; j != 0; --j) {
- size_t context =
- BROTLI_CONTEXT(prev_byte, prev_byte2, literal_context_lut);
- uint8_t literal = input[pos & mask];
- StoreSymbolWithContext(&literal_enc, literal, context,
- mb->literal_context_map, storage_ix, storage,
- BROTLI_LITERAL_CONTEXT_BITS);
- prev_byte2 = prev_byte;
- prev_byte = literal;
- ++pos;
- }
- }
- pos += CommandCopyLen(&cmd);
- if (CommandCopyLen(&cmd)) {
- prev_byte2 = input[(pos - 2) & mask];
- prev_byte = input[(pos - 1) & mask];
- if (cmd.cmd_prefix_ >= 128) {
- size_t dist_code = cmd.dist_prefix_ & 0x3FF;
- uint32_t distnumextra = cmd.dist_prefix_ >> 10;
- uint64_t distextra = cmd.dist_extra_;
- if (mb->distance_context_map_size == 0) {
- StoreSymbol(&distance_enc, dist_code, storage_ix, storage);
- } else {
- size_t context = CommandDistanceContext(&cmd);
- StoreSymbolWithContext(&distance_enc, dist_code, context,
- mb->distance_context_map, storage_ix, storage,
- BROTLI_DISTANCE_CONTEXT_BITS);
- }
- BrotliWriteBits(distnumextra, distextra, storage_ix, storage);
- }
- }
- }
- CleanupBlockEncoder(m, &distance_enc);
- CleanupBlockEncoder(m, &command_enc);
- CleanupBlockEncoder(m, &literal_enc);
- if (is_last) {
- JumpToByteBoundary(storage_ix, storage);
- }
-}
-
-static void BuildHistograms(const uint8_t* input,
- size_t start_pos,
- size_t mask,
- const Command* commands,
- size_t n_commands,
- HistogramLiteral* lit_histo,
- HistogramCommand* cmd_histo,
- HistogramDistance* dist_histo) {
- size_t pos = start_pos;
- size_t i;
- for (i = 0; i < n_commands; ++i) {
- const Command cmd = commands[i];
- size_t j;
- HistogramAddCommand(cmd_histo, cmd.cmd_prefix_);
- for (j = cmd.insert_len_; j != 0; --j) {
- HistogramAddLiteral(lit_histo, input[pos & mask]);
- ++pos;
- }
- pos += CommandCopyLen(&cmd);
- if (CommandCopyLen(&cmd) && cmd.cmd_prefix_ >= 128) {
- HistogramAddDistance(dist_histo, cmd.dist_prefix_ & 0x3FF);
- }
- }
-}
-
-static void StoreDataWithHuffmanCodes(const uint8_t* input,
- size_t start_pos,
- size_t mask,
- const Command* commands,
- size_t n_commands,
- const uint8_t* lit_depth,
- const uint16_t* lit_bits,
- const uint8_t* cmd_depth,
- const uint16_t* cmd_bits,
- const uint8_t* dist_depth,
- const uint16_t* dist_bits,
- size_t* storage_ix,
- uint8_t* storage) {
- size_t pos = start_pos;
- size_t i;
- for (i = 0; i < n_commands; ++i) {
- const Command cmd = commands[i];
- const size_t cmd_code = cmd.cmd_prefix_;
- size_t j;
- BrotliWriteBits(
- cmd_depth[cmd_code], cmd_bits[cmd_code], storage_ix, storage);
- StoreCommandExtra(&cmd, storage_ix, storage);
- for (j = cmd.insert_len_; j != 0; --j) {
- const uint8_t literal = input[pos & mask];
- BrotliWriteBits(
- lit_depth[literal], lit_bits[literal], storage_ix, storage);
- ++pos;
- }
- pos += CommandCopyLen(&cmd);
- if (CommandCopyLen(&cmd) && cmd.cmd_prefix_ >= 128) {
- const size_t dist_code = cmd.dist_prefix_ & 0x3FF;
- const uint32_t distnumextra = cmd.dist_prefix_ >> 10;
- const uint32_t distextra = cmd.dist_extra_;
- BrotliWriteBits(dist_depth[dist_code], dist_bits[dist_code],
- storage_ix, storage);
- BrotliWriteBits(distnumextra, distextra, storage_ix, storage);
- }
- }
-}
-
-void BrotliStoreMetaBlockTrivial(MemoryManager* m,
- const uint8_t* input, size_t start_pos, size_t length, size_t mask,
- BROTLI_BOOL is_last, const BrotliEncoderParams* params,
- const Command* commands, size_t n_commands,
- size_t* storage_ix, uint8_t* storage) {
- HistogramLiteral lit_histo;
- HistogramCommand cmd_histo;
- HistogramDistance dist_histo;
- uint8_t lit_depth[BROTLI_NUM_LITERAL_SYMBOLS];
- uint16_t lit_bits[BROTLI_NUM_LITERAL_SYMBOLS];
- uint8_t cmd_depth[BROTLI_NUM_COMMAND_SYMBOLS];
- uint16_t cmd_bits[BROTLI_NUM_COMMAND_SYMBOLS];
- uint8_t dist_depth[MAX_SIMPLE_DISTANCE_ALPHABET_SIZE];
- uint16_t dist_bits[MAX_SIMPLE_DISTANCE_ALPHABET_SIZE];
- HuffmanTree* tree;
- uint32_t num_distance_symbols = params->dist.alphabet_size;
-
- StoreCompressedMetaBlockHeader(is_last, length, storage_ix, storage);
-
- HistogramClearLiteral(&lit_histo);
- HistogramClearCommand(&cmd_histo);
- HistogramClearDistance(&dist_histo);
-
- BuildHistograms(input, start_pos, mask, commands, n_commands,
- &lit_histo, &cmd_histo, &dist_histo);
-
- BrotliWriteBits(13, 0, storage_ix, storage);
-
- tree = BROTLI_ALLOC(m, HuffmanTree, MAX_HUFFMAN_TREE_SIZE);
- if (BROTLI_IS_OOM(m)) return;
- BuildAndStoreHuffmanTree(lit_histo.data_, BROTLI_NUM_LITERAL_SYMBOLS,
- BROTLI_NUM_LITERAL_SYMBOLS, tree,
- lit_depth, lit_bits,
- storage_ix, storage);
- BuildAndStoreHuffmanTree(cmd_histo.data_, BROTLI_NUM_COMMAND_SYMBOLS,
- BROTLI_NUM_COMMAND_SYMBOLS, tree,
- cmd_depth, cmd_bits,
- storage_ix, storage);
- BuildAndStoreHuffmanTree(dist_histo.data_, MAX_SIMPLE_DISTANCE_ALPHABET_SIZE,
- num_distance_symbols, tree,
- dist_depth, dist_bits,
- storage_ix, storage);
- BROTLI_FREE(m, tree);
- StoreDataWithHuffmanCodes(input, start_pos, mask, commands,
- n_commands, lit_depth, lit_bits,
- cmd_depth, cmd_bits,
- dist_depth, dist_bits,
- storage_ix, storage);
- if (is_last) {
- JumpToByteBoundary(storage_ix, storage);
- }
-}
-
-void BrotliStoreMetaBlockFast(MemoryManager* m,
- const uint8_t* input, size_t start_pos, size_t length, size_t mask,
- BROTLI_BOOL is_last, const BrotliEncoderParams* params,
- const Command* commands, size_t n_commands,
- size_t* storage_ix, uint8_t* storage) {
- uint32_t num_distance_symbols = params->dist.alphabet_size;
- uint32_t distance_alphabet_bits =
- Log2FloorNonZero(num_distance_symbols - 1) + 1;
-
- StoreCompressedMetaBlockHeader(is_last, length, storage_ix, storage);
-
- BrotliWriteBits(13, 0, storage_ix, storage);
-
- if (n_commands <= 128) {
- uint32_t histogram[BROTLI_NUM_LITERAL_SYMBOLS] = { 0 };
- size_t pos = start_pos;
- size_t num_literals = 0;
- size_t i;
- uint8_t lit_depth[BROTLI_NUM_LITERAL_SYMBOLS];
- uint16_t lit_bits[BROTLI_NUM_LITERAL_SYMBOLS];
- for (i = 0; i < n_commands; ++i) {
- const Command cmd = commands[i];
- size_t j;
- for (j = cmd.insert_len_; j != 0; --j) {
- ++histogram[input[pos & mask]];
- ++pos;
- }
- num_literals += cmd.insert_len_;
- pos += CommandCopyLen(&cmd);
- }
- BrotliBuildAndStoreHuffmanTreeFast(m, histogram, num_literals,
- /* max_bits = */ 8,
- lit_depth, lit_bits,
- storage_ix, storage);
- if (BROTLI_IS_OOM(m)) return;
- StoreStaticCommandHuffmanTree(storage_ix, storage);
- StoreStaticDistanceHuffmanTree(storage_ix, storage);
- StoreDataWithHuffmanCodes(input, start_pos, mask, commands,
- n_commands, lit_depth, lit_bits,
- kStaticCommandCodeDepth,
- kStaticCommandCodeBits,
- kStaticDistanceCodeDepth,
- kStaticDistanceCodeBits,
- storage_ix, storage);
- } else {
- HistogramLiteral lit_histo;
- HistogramCommand cmd_histo;
- HistogramDistance dist_histo;
- uint8_t lit_depth[BROTLI_NUM_LITERAL_SYMBOLS];
- uint16_t lit_bits[BROTLI_NUM_LITERAL_SYMBOLS];
- uint8_t cmd_depth[BROTLI_NUM_COMMAND_SYMBOLS];
- uint16_t cmd_bits[BROTLI_NUM_COMMAND_SYMBOLS];
- uint8_t dist_depth[MAX_SIMPLE_DISTANCE_ALPHABET_SIZE];
- uint16_t dist_bits[MAX_SIMPLE_DISTANCE_ALPHABET_SIZE];
- HistogramClearLiteral(&lit_histo);
- HistogramClearCommand(&cmd_histo);
- HistogramClearDistance(&dist_histo);
- BuildHistograms(input, start_pos, mask, commands, n_commands,
- &lit_histo, &cmd_histo, &dist_histo);
- BrotliBuildAndStoreHuffmanTreeFast(m, lit_histo.data_,
- lit_histo.total_count_,
- /* max_bits = */ 8,
- lit_depth, lit_bits,
- storage_ix, storage);
- if (BROTLI_IS_OOM(m)) return;
- BrotliBuildAndStoreHuffmanTreeFast(m, cmd_histo.data_,
- cmd_histo.total_count_,
- /* max_bits = */ 10,
- cmd_depth, cmd_bits,
- storage_ix, storage);
- if (BROTLI_IS_OOM(m)) return;
- BrotliBuildAndStoreHuffmanTreeFast(m, dist_histo.data_,
- dist_histo.total_count_,
- /* max_bits = */
- distance_alphabet_bits,
- dist_depth, dist_bits,
- storage_ix, storage);
- if (BROTLI_IS_OOM(m)) return;
- StoreDataWithHuffmanCodes(input, start_pos, mask, commands,
- n_commands, lit_depth, lit_bits,
- cmd_depth, cmd_bits,
- dist_depth, dist_bits,
- storage_ix, storage);
- }
-
- if (is_last) {
- JumpToByteBoundary(storage_ix, storage);
- }
-}
-
-/* This is for storing uncompressed blocks (simple raw storage of
- bytes-as-bytes). */
-void BrotliStoreUncompressedMetaBlock(BROTLI_BOOL is_final_block,
- const uint8_t* BROTLI_RESTRICT input,
- size_t position, size_t mask,
- size_t len,
- size_t* BROTLI_RESTRICT storage_ix,
- uint8_t* BROTLI_RESTRICT storage) {
- size_t masked_pos = position & mask;
- BrotliStoreUncompressedMetaBlockHeader(len, storage_ix, storage);
- JumpToByteBoundary(storage_ix, storage);
-
- if (masked_pos + len > mask + 1) {
- size_t len1 = mask + 1 - masked_pos;
- memcpy(&storage[*storage_ix >> 3], &input[masked_pos], len1);
- *storage_ix += len1 << 3;
- len -= len1;
- masked_pos = 0;
- }
- memcpy(&storage[*storage_ix >> 3], &input[masked_pos], len);
- *storage_ix += len << 3;
-
- /* We need to clear the next 4 bytes to continue to be
- compatible with BrotliWriteBits. */
- BrotliWriteBitsPrepareStorage(*storage_ix, storage);
-
- /* Since the uncompressed block itself may not be the final block, add an
- empty one after this. */
- if (is_final_block) {
- BrotliWriteBits(1, 1, storage_ix, storage); /* islast */
- BrotliWriteBits(1, 1, storage_ix, storage); /* isempty */
- JumpToByteBoundary(storage_ix, storage);
- }
-}
-
-#if defined(__cplusplus) || defined(c_plusplus)
-} /* extern "C" */
-#endif
diff --git a/BaseTools/Source/C/BrotliCompress/enc/cluster.c b/BaseTools/Source/C/BrotliCompress/enc/cluster.c
deleted file mode 100644
index fdb4fa7d3ab2..000000000000
--- a/BaseTools/Source/C/BrotliCompress/enc/cluster.c
+++ /dev/null
@@ -1,56 +0,0 @@
-/* Copyright 2013 Google Inc. All Rights Reserved.
-
- Distributed under MIT license.
- See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
-*/
-
-/* Functions for clustering similar histograms together. */
-
-#include "./cluster.h"
-
-#include "../common/platform.h"
-#include <brotli/types.h>
-#include "./bit_cost.h" /* BrotliPopulationCost */
-#include "./fast_log.h"
-#include "./histogram.h"
-#include "./memory.h"
-
-#if defined(__cplusplus) || defined(c_plusplus)
-extern "C" {
-#endif
-
-static BROTLI_INLINE BROTLI_BOOL HistogramPairIsLess(
- const HistogramPair* p1, const HistogramPair* p2) {
- if (p1->cost_diff != p2->cost_diff) {
- return TO_BROTLI_BOOL(p1->cost_diff > p2->cost_diff);
- }
- return TO_BROTLI_BOOL((p1->idx2 - p1->idx1) > (p2->idx2 - p2->idx1));
-}
-
-/* Returns entropy reduction of the context map when we combine two clusters. */
-static BROTLI_INLINE double ClusterCostDiff(size_t size_a, size_t size_b) {
- size_t size_c = size_a + size_b;
- return (double)size_a * FastLog2(size_a) +
- (double)size_b * FastLog2(size_b) -
- (double)size_c * FastLog2(size_c);
-}
-
-#define CODE(X) X
-
-#define FN(X) X ## Literal
-#include "./cluster_inc.h" /* NOLINT(build/include) */
-#undef FN
-
-#define FN(X) X ## Command
-#include "./cluster_inc.h" /* NOLINT(build/include) */
-#undef FN
-
-#define FN(X) X ## Distance
-#include "./cluster_inc.h" /* NOLINT(build/include) */
-#undef FN
-
-#undef CODE
-
-#if defined(__cplusplus) || defined(c_plusplus)
-} /* extern "C" */
-#endif
diff --git a/BaseTools/Source/C/BrotliCompress/enc/compress_fragment.c b/BaseTools/Source/C/BrotliCompress/enc/compress_fragment.c
deleted file mode 100644
index ca61bc0a7f0d..000000000000
--- a/BaseTools/Source/C/BrotliCompress/enc/compress_fragment.c
+++ /dev/null
@@ -1,790 +0,0 @@
-/* Copyright 2015 Google Inc. All Rights Reserved.
-
- Distributed under MIT license.
- See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
-*/
-
-/* Function for fast encoding of an input fragment, independently from the input
- history. This function uses one-pass processing: when we find a backward
- match, we immediately emit the corresponding command and literal codes to
- the bit stream.
-
- Adapted from the CompressFragment() function in
- https://github.com/google/snappy/blob/master/snappy.cc */
-
-#include "./compress_fragment.h"
-
-#include <string.h> /* memcmp, memcpy, memset */
-
-#include "../common/constants.h"
-#include "../common/platform.h"
-#include <brotli/types.h>
-#include "./brotli_bit_stream.h"
-#include "./entropy_encode.h"
-#include "./fast_log.h"
-#include "./find_match_length.h"
-#include "./memory.h"
-#include "./write_bits.h"
-
-#if defined(__cplusplus) || defined(c_plusplus)
-extern "C" {
-#endif
-
-#define MAX_DISTANCE (long)BROTLI_MAX_BACKWARD_LIMIT(18)
-
-/* kHashMul32 multiplier has these properties:
- * The multiplier must be odd. Otherwise we may lose the highest bit.
- * No long streaks of ones or zeros.
- * There is no effort to ensure that it is a prime, the oddity is enough
- for this use.
- * The number has been tuned heuristically against compression benchmarks. */
-static const uint32_t kHashMul32 = 0x1E35A7BD;
-
-static BROTLI_INLINE uint32_t Hash(const uint8_t* p, size_t shift) {
- const uint64_t h = (BROTLI_UNALIGNED_LOAD64LE(p) << 24) * kHashMul32;
- return (uint32_t)(h >> shift);
-}
-
-static BROTLI_INLINE uint32_t HashBytesAtOffset(
- uint64_t v, int offset, size_t shift) {
- BROTLI_DCHECK(offset >= 0);
- BROTLI_DCHECK(offset <= 3);
- {
- const uint64_t h = ((v >> (8 * offset)) << 24) * kHashMul32;
- return (uint32_t)(h >> shift);
- }
-}
-
-static BROTLI_INLINE BROTLI_BOOL IsMatch(const uint8_t* p1, const uint8_t* p2) {
- return TO_BROTLI_BOOL(
- BrotliUnalignedRead32(p1) == BrotliUnalignedRead32(p2) &&
- p1[4] == p2[4]);
-}
-
-/* Builds a literal prefix code into "depths" and "bits" based on the statistics
- of the "input" string and stores it into the bit stream.
- Note that the prefix code here is built from the pre-LZ77 input, therefore
- we can only approximate the statistics of the actual literal stream.
- Moreover, for long inputs we build a histogram from a sample of the input
- and thus have to assign a non-zero depth for each literal.
- Returns estimated compression ratio millibytes/char for encoding given input
- with generated code. */
-static size_t BuildAndStoreLiteralPrefixCode(MemoryManager* m,
- const uint8_t* input,
- const size_t input_size,
- uint8_t depths[256],
- uint16_t bits[256],
- size_t* storage_ix,
- uint8_t* storage) {
- uint32_t histogram[256] = { 0 };
- size_t histogram_total;
- size_t i;
- if (input_size < (1 << 15)) {
- for (i = 0; i < input_size; ++i) {
- ++histogram[input[i]];
- }
- histogram_total = input_size;
- for (i = 0; i < 256; ++i) {
- /* We weigh the first 11 samples with weight 3 to account for the
- balancing effect of the LZ77 phase on the histogram. */
- const uint32_t adjust = 2 * BROTLI_MIN(uint32_t, histogram[i], 11u);
- histogram[i] += adjust;
- histogram_total += adjust;
- }
- } else {
- static const size_t kSampleRate = 29;
- for (i = 0; i < input_size; i += kSampleRate) {
- ++histogram[input[i]];
- }
- histogram_total = (input_size + kSampleRate - 1) / kSampleRate;
- for (i = 0; i < 256; ++i) {
- /* We add 1 to each population count to avoid 0 bit depths (since this is
- only a sample and we don't know if the symbol appears or not), and we
- weigh the first 11 samples with weight 3 to account for the balancing
- effect of the LZ77 phase on the histogram (more frequent symbols are
- more likely to be in backward references instead as literals). */
- const uint32_t adjust = 1 + 2 * BROTLI_MIN(uint32_t, histogram[i], 11u);
- histogram[i] += adjust;
- histogram_total += adjust;
- }
- }
- BrotliBuildAndStoreHuffmanTreeFast(m, histogram, histogram_total,
- /* max_bits = */ 8,
- depths, bits, storage_ix, storage);
- if (BROTLI_IS_OOM(m)) return 0;
- {
- size_t literal_ratio = 0;
- for (i = 0; i < 256; ++i) {
- if (histogram[i]) literal_ratio += histogram[i] * depths[i];
- }
- /* Estimated encoding ratio, millibytes per symbol. */
- return (literal_ratio * 125) / histogram_total;
- }
-}
-
-/* Builds a command and distance prefix code (each 64 symbols) into "depth" and
- "bits" based on "histogram" and stores it into the bit stream. */
-static void BuildAndStoreCommandPrefixCode(const uint32_t histogram[128],
- uint8_t depth[128], uint16_t bits[128], size_t* storage_ix,
- uint8_t* storage) {
- /* Tree size for building a tree over 64 symbols is 2 * 64 + 1. */
- HuffmanTree tree[129];
- uint8_t cmd_depth[BROTLI_NUM_COMMAND_SYMBOLS] = { 0 };
- uint16_t cmd_bits[64];
-
- BrotliCreateHuffmanTree(histogram, 64, 15, tree, depth);
- BrotliCreateHuffmanTree(&histogram[64], 64, 14, tree, &depth[64]);
- /* We have to jump through a few hoops here in order to compute
- the command bits because the symbols are in a different order than in
- the full alphabet. This looks complicated, but having the symbols
- in this order in the command bits saves a few branches in the Emit*
- functions. */
- memcpy(cmd_depth, depth, 24);
- memcpy(cmd_depth + 24, depth + 40, 8);
- memcpy(cmd_depth + 32, depth + 24, 8);
- memcpy(cmd_depth + 40, depth + 48, 8);
- memcpy(cmd_depth + 48, depth + 32, 8);
- memcpy(cmd_depth + 56, depth + 56, 8);
- BrotliConvertBitDepthsToSymbols(cmd_depth, 64, cmd_bits);
- memcpy(bits, cmd_bits, 48);
- memcpy(bits + 24, cmd_bits + 32, 16);
- memcpy(bits + 32, cmd_bits + 48, 16);
- memcpy(bits + 40, cmd_bits + 24, 16);
- memcpy(bits + 48, cmd_bits + 40, 16);
- memcpy(bits + 56, cmd_bits + 56, 16);
- BrotliConvertBitDepthsToSymbols(&depth[64], 64, &bits[64]);
- {
- /* Create the bit length array for the full command alphabet. */
- size_t i;
- memset(cmd_depth, 0, 64); /* only 64 first values were used */
- memcpy(cmd_depth, depth, 8);
- memcpy(cmd_depth + 64, depth + 8, 8);
- memcpy(cmd_depth + 128, depth + 16, 8);
- memcpy(cmd_depth + 192, depth + 24, 8);
- memcpy(cmd_depth + 384, depth + 32, 8);
- for (i = 0; i < 8; ++i) {
- cmd_depth[128 + 8 * i] = depth[40 + i];
- cmd_depth[256 + 8 * i] = depth[48 + i];
- cmd_depth[448 + 8 * i] = depth[56 + i];
- }
- BrotliStoreHuffmanTree(
- cmd_depth, BROTLI_NUM_COMMAND_SYMBOLS, tree, storage_ix, storage);
- }
- BrotliStoreHuffmanTree(&depth[64], 64, tree, storage_ix, storage);
-}
-
-/* REQUIRES: insertlen < 6210 */
-static BROTLI_INLINE void EmitInsertLen(size_t insertlen,
- const uint8_t depth[128],
- const uint16_t bits[128],
- uint32_t histo[128],
- size_t* storage_ix,
- uint8_t* storage) {
- if (insertlen < 6) {
- const size_t code = insertlen + 40;
- BrotliWriteBits(depth[code], bits[code], storage_ix, storage);
- ++histo[code];
- } else if (insertlen < 130) {
- const size_t tail = insertlen - 2;
- const uint32_t nbits = Log2FloorNonZero(tail) - 1u;
- const size_t prefix = tail >> nbits;
- const size_t inscode = (nbits << 1) + prefix + 42;
- BrotliWriteBits(depth[inscode], bits[inscode], storage_ix, storage);
- BrotliWriteBits(nbits, tail - (prefix << nbits), storage_ix, storage);
- ++histo[inscode];
- } else if (insertlen < 2114) {
- const size_t tail = insertlen - 66;
- const uint32_t nbits = Log2FloorNonZero(tail);
- const size_t code = nbits + 50;
- BrotliWriteBits(depth[code], bits[code], storage_ix, storage);
- BrotliWriteBits(nbits, tail - ((size_t)1 << nbits), storage_ix, storage);
- ++histo[code];
- } else {
- BrotliWriteBits(depth[61], bits[61], storage_ix, storage);
- BrotliWriteBits(12, insertlen - 2114, storage_ix, storage);
- ++histo[61];
- }
-}
-
-static BROTLI_INLINE void EmitLongInsertLen(size_t insertlen,
- const uint8_t depth[128],
- const uint16_t bits[128],
- uint32_t histo[128],
- size_t* storage_ix,
- uint8_t* storage) {
- if (insertlen < 22594) {
- BrotliWriteBits(depth[62], bits[62], storage_ix, storage);
- BrotliWriteBits(14, insertlen - 6210, storage_ix, storage);
- ++histo[62];
- } else {
- BrotliWriteBits(depth[63], bits[63], storage_ix, storage);
- BrotliWriteBits(24, insertlen - 22594, storage_ix, storage);
- ++histo[63];
- }
-}
-
-static BROTLI_INLINE void EmitCopyLen(size_t copylen,
- const uint8_t depth[128],
- const uint16_t bits[128],
- uint32_t histo[128],
- size_t* storage_ix,
- uint8_t* storage) {
- if (copylen < 10) {
- BrotliWriteBits(
- depth[copylen + 14], bits[copylen + 14], storage_ix, storage);
- ++histo[copylen + 14];
- } else if (copylen < 134) {
- const size_t tail = copylen - 6;
- const uint32_t nbits = Log2FloorNonZero(tail) - 1u;
- const size_t prefix = tail >> nbits;
- const size_t code = (nbits << 1) + prefix + 20;
- BrotliWriteBits(depth[code], bits[code], storage_ix, storage);
- BrotliWriteBits(nbits, tail - (prefix << nbits), storage_ix, storage);
- ++histo[code];
- } else if (copylen < 2118) {
- const size_t tail = copylen - 70;
- const uint32_t nbits = Log2FloorNonZero(tail);
- const size_t code = nbits + 28;
- BrotliWriteBits(depth[code], bits[code], storage_ix, storage);
- BrotliWriteBits(nbits, tail - ((size_t)1 << nbits), storage_ix, storage);
- ++histo[code];
- } else {
- BrotliWriteBits(depth[39], bits[39], storage_ix, storage);
- BrotliWriteBits(24, copylen - 2118, storage_ix, storage);
- ++histo[39];
- }
-}
-
-static BROTLI_INLINE void EmitCopyLenLastDistance(size_t copylen,
- const uint8_t depth[128],
- const uint16_t bits[128],
- uint32_t histo[128],
- size_t* storage_ix,
- uint8_t* storage) {
- if (copylen < 12) {
- BrotliWriteBits(depth[copylen - 4], bits[copylen - 4], storage_ix, storage);
- ++histo[copylen - 4];
- } else if (copylen < 72) {
- const size_t tail = copylen - 8;
- const uint32_t nbits = Log2FloorNonZero(tail) - 1;
- const size_t prefix = tail >> nbits;
- const size_t code = (nbits << 1) + prefix + 4;
- BrotliWriteBits(depth[code], bits[code], storage_ix, storage);
- BrotliWriteBits(nbits, tail - (prefix << nbits), storage_ix, storage);
- ++histo[code];
- } else if (copylen < 136) {
- const size_t tail = copylen - 8;
- const size_t code = (tail >> 5) + 30;
- BrotliWriteBits(depth[code], bits[code], storage_ix, storage);
- BrotliWriteBits(5, tail & 31, storage_ix, storage);
- BrotliWriteBits(depth[64], bits[64], storage_ix, storage);
- ++histo[code];
- ++histo[64];
- } else if (copylen < 2120) {
- const size_t tail = copylen - 72;
- const uint32_t nbits = Log2FloorNonZero(tail);
- const size_t code = nbits + 28;
- BrotliWriteBits(depth[code], bits[code], storage_ix, storage);
- BrotliWriteBits(nbits, tail - ((size_t)1 << nbits), storage_ix, storage);
- BrotliWriteBits(depth[64], bits[64], storage_ix, storage);
- ++histo[code];
- ++histo[64];
- } else {
- BrotliWriteBits(depth[39], bits[39], storage_ix, storage);
- BrotliWriteBits(24, copylen - 2120, storage_ix, storage);
- BrotliWriteBits(depth[64], bits[64], storage_ix, storage);
- ++histo[39];
- ++histo[64];
- }
-}
-
-static BROTLI_INLINE void EmitDistance(size_t distance,
- const uint8_t depth[128],
- const uint16_t bits[128],
- uint32_t histo[128],
- size_t* storage_ix, uint8_t* storage) {
- const size_t d = distance + 3;
- const uint32_t nbits = Log2FloorNonZero(d) - 1u;
- const size_t prefix = (d >> nbits) & 1;
- const size_t offset = (2 + prefix) << nbits;
- const size_t distcode = 2 * (nbits - 1) + prefix + 80;
- BrotliWriteBits(depth[distcode], bits[distcode], storage_ix, storage);
- BrotliWriteBits(nbits, d - offset, storage_ix, storage);
- ++histo[distcode];
-}
-
-static BROTLI_INLINE void EmitLiterals(const uint8_t* input, const size_t len,
- const uint8_t depth[256],
- const uint16_t bits[256],
- size_t* storage_ix, uint8_t* storage) {
- size_t j;
- for (j = 0; j < len; j++) {
- const uint8_t lit = input[j];
- BrotliWriteBits(depth[lit], bits[lit], storage_ix, storage);
- }
-}
-
-/* REQUIRES: len <= 1 << 24. */
-static void BrotliStoreMetaBlockHeader(
- size_t len, BROTLI_BOOL is_uncompressed, size_t* storage_ix,
- uint8_t* storage) {
- size_t nibbles = 6;
- /* ISLAST */
- BrotliWriteBits(1, 0, storage_ix, storage);
- if (len <= (1U << 16)) {
- nibbles = 4;
- } else if (len <= (1U << 20)) {
- nibbles = 5;
- }
- BrotliWriteBits(2, nibbles - 4, storage_ix, storage);
- BrotliWriteBits(nibbles * 4, len - 1, storage_ix, storage);
- /* ISUNCOMPRESSED */
- BrotliWriteBits(1, (uint64_t)is_uncompressed, storage_ix, storage);
-}
-
-static void UpdateBits(size_t n_bits, uint32_t bits, size_t pos,
- uint8_t* array) {
- while (n_bits > 0) {
- size_t byte_pos = pos >> 3;
- size_t n_unchanged_bits = pos & 7;
- size_t n_changed_bits = BROTLI_MIN(size_t, n_bits, 8 - n_unchanged_bits);
- size_t total_bits = n_unchanged_bits + n_changed_bits;
- uint32_t mask =
- (~((1u << total_bits) - 1u)) | ((1u << n_unchanged_bits) - 1u);
- uint32_t unchanged_bits = array[byte_pos] & mask;
- uint32_t changed_bits = bits & ((1u << n_changed_bits) - 1u);
- array[byte_pos] =
- (uint8_t)((changed_bits << n_unchanged_bits) | unchanged_bits);
- n_bits -= n_changed_bits;
- bits >>= n_changed_bits;
- pos += n_changed_bits;
- }
-}
-
-static void RewindBitPosition(const size_t new_storage_ix,
- size_t* storage_ix, uint8_t* storage) {
- const size_t bitpos = new_storage_ix & 7;
- const size_t mask = (1u << bitpos) - 1;
- storage[new_storage_ix >> 3] &= (uint8_t)mask;
- *storage_ix = new_storage_ix;
-}
-
-static BROTLI_BOOL ShouldMergeBlock(
- const uint8_t* data, size_t len, const uint8_t* depths) {
- size_t histo[256] = { 0 };
- static const size_t kSampleRate = 43;
- size_t i;
- for (i = 0; i < len; i += kSampleRate) {
- ++histo[data[i]];
- }
- {
- const size_t total = (len + kSampleRate - 1) / kSampleRate;
- double r = (FastLog2(total) + 0.5) * (double)total + 200;
- for (i = 0; i < 256; ++i) {
- r -= (double)histo[i] * (depths[i] + FastLog2(histo[i]));
- }
- return TO_BROTLI_BOOL(r >= 0.0);
- }
-}
-
-/* Acceptable loss for uncompressible speedup is 2% */
-#define MIN_RATIO 980
-
-static BROTLI_INLINE BROTLI_BOOL ShouldUseUncompressedMode(
- const uint8_t* metablock_start, const uint8_t* next_emit,
- const size_t insertlen, const size_t literal_ratio) {
- const size_t compressed = (size_t)(next_emit - metablock_start);
- if (compressed * 50 > insertlen) {
- return BROTLI_FALSE;
- } else {
- return TO_BROTLI_BOOL(literal_ratio > MIN_RATIO);
- }
-}
-
-static void EmitUncompressedMetaBlock(const uint8_t* begin, const uint8_t* end,
- const size_t storage_ix_start,
- size_t* storage_ix, uint8_t* storage) {
- const size_t len = (size_t)(end - begin);
- RewindBitPosition(storage_ix_start, storage_ix, storage);
- BrotliStoreMetaBlockHeader(len, 1, storage_ix, storage);
- *storage_ix = (*storage_ix + 7u) & ~7u;
- memcpy(&storage[*storage_ix >> 3], begin, len);
- *storage_ix += len << 3;
- storage[*storage_ix >> 3] = 0;
-}
-
-static uint32_t kCmdHistoSeed[128] = {
- 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 0, 0, 0, 0,
-};
-
-static BROTLI_INLINE void BrotliCompressFragmentFastImpl(
- MemoryManager* m, const uint8_t* input, size_t input_size,
- BROTLI_BOOL is_last, int* table, size_t table_bits, uint8_t cmd_depth[128],
- uint16_t cmd_bits[128], size_t* cmd_code_numbits, uint8_t* cmd_code,
- size_t* storage_ix, uint8_t* storage) {
- uint32_t cmd_histo[128];
- const uint8_t* ip_end;
-
- /* "next_emit" is a pointer to the first byte that is not covered by a
- previous copy. Bytes between "next_emit" and the start of the next copy or
- the end of the input will be emitted as literal bytes. */
- const uint8_t* next_emit = input;
- /* Save the start of the first block for position and distance computations.
- */
- const uint8_t* base_ip = input;
-
- static const size_t kFirstBlockSize = 3 << 15;
- static const size_t kMergeBlockSize = 1 << 16;
-
- const size_t kInputMarginBytes = BROTLI_WINDOW_GAP;
- const size_t kMinMatchLen = 5;
-
- const uint8_t* metablock_start = input;
- size_t block_size = BROTLI_MIN(size_t, input_size, kFirstBlockSize);
- size_t total_block_size = block_size;
- /* Save the bit position of the MLEN field of the meta-block header, so that
- we can update it later if we decide to extend this meta-block. */
- size_t mlen_storage_ix = *storage_ix + 3;
-
- uint8_t lit_depth[256];
- uint16_t lit_bits[256];
-
- size_t literal_ratio;
-
- const uint8_t* ip;
- int last_distance;
-
- const size_t shift = 64u - table_bits;
-
- BrotliStoreMetaBlockHeader(block_size, 0, storage_ix, storage);
- /* No block splits, no contexts. */
- BrotliWriteBits(13, 0, storage_ix, storage);
-
- literal_ratio = BuildAndStoreLiteralPrefixCode(
- m, input, block_size, lit_depth, lit_bits, storage_ix, storage);
- if (BROTLI_IS_OOM(m)) return;
-
- {
- /* Store the pre-compressed command and distance prefix codes. */
- size_t i;
- for (i = 0; i + 7 < *cmd_code_numbits; i += 8) {
- BrotliWriteBits(8, cmd_code[i >> 3], storage_ix, storage);
- }
- }
- BrotliWriteBits(*cmd_code_numbits & 7, cmd_code[*cmd_code_numbits >> 3],
- storage_ix, storage);
-
- emit_commands:
- /* Initialize the command and distance histograms. We will gather
- statistics of command and distance codes during the processing
- of this block and use it to update the command and distance
- prefix codes for the next block. */
- memcpy(cmd_histo, kCmdHistoSeed, sizeof(kCmdHistoSeed));
-
- /* "ip" is the input pointer. */
- ip = input;
- last_distance = -1;
- ip_end = input + block_size;
-
- if (BROTLI_PREDICT_TRUE(block_size >= kInputMarginBytes)) {
- /* For the last block, we need to keep a 16 bytes margin so that we can be
- sure that all distances are at most window size - 16.
- For all other blocks, we only need to keep a margin of 5 bytes so that
- we don't go over the block size with a copy. */
- const size_t len_limit = BROTLI_MIN(size_t, block_size - kMinMatchLen,
- input_size - kInputMarginBytes);
- const uint8_t* ip_limit = input + len_limit;
-
- uint32_t next_hash;
- for (next_hash = Hash(++ip, shift); ; ) {
- /* Step 1: Scan forward in the input looking for a 5-byte-long match.
- If we get close to exhausting the input then goto emit_remainder.
-
- Heuristic match skipping: If 32 bytes are scanned with no matches
- found, start looking only at every other byte. If 32 more bytes are
- scanned, look at every third byte, etc.. When a match is found,
- immediately go back to looking at every byte. This is a small loss
- (~5% performance, ~0.1% density) for compressible data due to more
- bookkeeping, but for non-compressible data (such as JPEG) it's a huge
- win since the compressor quickly "realizes" the data is incompressible
- and doesn't bother looking for matches everywhere.
-
- The "skip" variable keeps track of how many bytes there are since the
- last match; dividing it by 32 (i.e. right-shifting by five) gives the
- number of bytes to move ahead for each iteration. */
- uint32_t skip = 32;
-
- const uint8_t* next_ip = ip;
- const uint8_t* candidate;
- BROTLI_DCHECK(next_emit < ip);
-trawl:
- do {
- uint32_t hash = next_hash;
- uint32_t bytes_between_hash_lookups = skip++ >> 5;
- BROTLI_DCHECK(hash == Hash(next_ip, shift));
- ip = next_ip;
- next_ip = ip + bytes_between_hash_lookups;
- if (BROTLI_PREDICT_FALSE(next_ip > ip_limit)) {
- goto emit_remainder;
- }
- next_hash = Hash(next_ip, shift);
- candidate = ip - last_distance;
- if (IsMatch(ip, candidate)) {
- if (BROTLI_PREDICT_TRUE(candidate < ip)) {
- table[hash] = (int)(ip - base_ip);
- break;
- }
- }
- candidate = base_ip + table[hash];
- BROTLI_DCHECK(candidate >= base_ip);
- BROTLI_DCHECK(candidate < ip);
-
- table[hash] = (int)(ip - base_ip);
- } while (BROTLI_PREDICT_TRUE(!IsMatch(ip, candidate)));
-
- /* Check copy distance. If candidate is not feasible, continue search.
- Checking is done outside of hot loop to reduce overhead. */
- if (ip - candidate > MAX_DISTANCE) goto trawl;
-
- /* Step 2: Emit the found match together with the literal bytes from
- "next_emit" to the bit stream, and then see if we can find a next match
- immediately afterwards. Repeat until we find no match for the input
- without emitting some literal bytes. */
-
- {
- /* We have a 5-byte match at ip, and we need to emit bytes in
- [next_emit, ip). */
- const uint8_t* base = ip;
- size_t matched = 5 + FindMatchLengthWithLimit(
- candidate + 5, ip + 5, (size_t)(ip_end - ip) - 5);
- int distance = (int)(base - candidate); /* > 0 */
- size_t insert = (size_t)(base - next_emit);
- ip += matched;
- BROTLI_DCHECK(0 == memcmp(base, candidate, matched));
- if (BROTLI_PREDICT_TRUE(insert < 6210)) {
- EmitInsertLen(insert, cmd_depth, cmd_bits, cmd_histo,
- storage_ix, storage);
- } else if (ShouldUseUncompressedMode(metablock_start, next_emit, insert,
- literal_ratio)) {
- EmitUncompressedMetaBlock(metablock_start, base, mlen_storage_ix - 3,
- storage_ix, storage);
- input_size -= (size_t)(base - input);
- input = base;
- next_emit = input;
- goto next_block;
- } else {
- EmitLongInsertLen(insert, cmd_depth, cmd_bits, cmd_histo,
- storage_ix, storage);
- }
- EmitLiterals(next_emit, insert, lit_depth, lit_bits,
- storage_ix, storage);
- if (distance == last_distance) {
- BrotliWriteBits(cmd_depth[64], cmd_bits[64], storage_ix, storage);
- ++cmd_histo[64];
- } else {
- EmitDistance((size_t)distance, cmd_depth, cmd_bits,
- cmd_histo, storage_ix, storage);
- last_distance = distance;
- }
- EmitCopyLenLastDistance(matched, cmd_depth, cmd_bits, cmd_histo,
- storage_ix, storage);
-
- next_emit = ip;
- if (BROTLI_PREDICT_FALSE(ip >= ip_limit)) {
- goto emit_remainder;
- }
- /* We could immediately start working at ip now, but to improve
- compression we first update "table" with the hashes of some positions
- within the last copy. */
- {
- uint64_t input_bytes = BROTLI_UNALIGNED_LOAD64LE(ip - 3);
- uint32_t prev_hash = HashBytesAtOffset(input_bytes, 0, shift);
- uint32_t cur_hash = HashBytesAtOffset(input_bytes, 3, shift);
- table[prev_hash] = (int)(ip - base_ip - 3);
- prev_hash = HashBytesAtOffset(input_bytes, 1, shift);
- table[prev_hash] = (int)(ip - base_ip - 2);
- prev_hash = HashBytesAtOffset(input_bytes, 2, shift);
- table[prev_hash] = (int)(ip - base_ip - 1);
-
- candidate = base_ip + table[cur_hash];
- table[cur_hash] = (int)(ip - base_ip);
- }
- }
-
- while (IsMatch(ip, candidate)) {
- /* We have a 5-byte match at ip, and no need to emit any literal bytes
- prior to ip. */
- const uint8_t* base = ip;
- size_t matched = 5 + FindMatchLengthWithLimit(
- candidate + 5, ip + 5, (size_t)(ip_end - ip) - 5);
- if (ip - candidate > MAX_DISTANCE) break;
- ip += matched;
- last_distance = (int)(base - candidate); /* > 0 */
- BROTLI_DCHECK(0 == memcmp(base, candidate, matched));
- EmitCopyLen(matched, cmd_depth, cmd_bits, cmd_histo,
- storage_ix, storage);
- EmitDistance((size_t)last_distance, cmd_depth, cmd_bits,
- cmd_histo, storage_ix, storage);
-
- next_emit = ip;
- if (BROTLI_PREDICT_FALSE(ip >= ip_limit)) {
- goto emit_remainder;
- }
- /* We could immediately start working at ip now, but to improve
- compression we first update "table" with the hashes of some positions
- within the last copy. */
- {
- uint64_t input_bytes = BROTLI_UNALIGNED_LOAD64LE(ip - 3);
- uint32_t prev_hash = HashBytesAtOffset(input_bytes, 0, shift);
- uint32_t cur_hash = HashBytesAtOffset(input_bytes, 3, shift);
- table[prev_hash] = (int)(ip - base_ip - 3);
- prev_hash = HashBytesAtOffset(input_bytes, 1, shift);
- table[prev_hash] = (int)(ip - base_ip - 2);
- prev_hash = HashBytesAtOffset(input_bytes, 2, shift);
- table[prev_hash] = (int)(ip - base_ip - 1);
-
- candidate = base_ip + table[cur_hash];
- table[cur_hash] = (int)(ip - base_ip);
- }
- }
-
- next_hash = Hash(++ip, shift);
- }
- }
-
- emit_remainder:
- BROTLI_DCHECK(next_emit <= ip_end);
- input += block_size;
- input_size -= block_size;
- block_size = BROTLI_MIN(size_t, input_size, kMergeBlockSize);
-
- /* Decide if we want to continue this meta-block instead of emitting the
- last insert-only command. */
- if (input_size > 0 &&
- total_block_size + block_size <= (1 << 20) &&
- ShouldMergeBlock(input, block_size, lit_depth)) {
- BROTLI_DCHECK(total_block_size > (1 << 16));
- /* Update the size of the current meta-block and continue emitting commands.
- We can do this because the current size and the new size both have 5
- nibbles. */
- total_block_size += block_size;
- UpdateBits(20, (uint32_t)(total_block_size - 1), mlen_storage_ix, storage);
- goto emit_commands;
- }
-
- /* Emit the remaining bytes as literals. */
- if (next_emit < ip_end) {
- const size_t insert = (size_t)(ip_end - next_emit);
- if (BROTLI_PREDICT_TRUE(insert < 6210)) {
- EmitInsertLen(insert, cmd_depth, cmd_bits, cmd_histo,
- storage_ix, storage);
- EmitLiterals(next_emit, insert, lit_depth, lit_bits, storage_ix, storage);
- } else if (ShouldUseUncompressedMode(metablock_start, next_emit, insert,
- literal_ratio)) {
- EmitUncompressedMetaBlock(metablock_start, ip_end, mlen_storage_ix - 3,
- storage_ix, storage);
- } else {
- EmitLongInsertLen(insert, cmd_depth, cmd_bits, cmd_histo,
- storage_ix, storage);
- EmitLiterals(next_emit, insert, lit_depth, lit_bits,
- storage_ix, storage);
- }
- }
- next_emit = ip_end;
-
-next_block:
- /* If we have more data, write a new meta-block header and prefix codes and
- then continue emitting commands. */
- if (input_size > 0) {
- metablock_start = input;
- block_size = BROTLI_MIN(size_t, input_size, kFirstBlockSize);
- total_block_size = block_size;
- /* Save the bit position of the MLEN field of the meta-block header, so that
- we can update it later if we decide to extend this meta-block. */
- mlen_storage_ix = *storage_ix + 3;
- BrotliStoreMetaBlockHeader(block_size, 0, storage_ix, storage);
- /* No block splits, no contexts. */
- BrotliWriteBits(13, 0, storage_ix, storage);
- literal_ratio = BuildAndStoreLiteralPrefixCode(
- m, input, block_size, lit_depth, lit_bits, storage_ix, storage);
- if (BROTLI_IS_OOM(m)) return;
- BuildAndStoreCommandPrefixCode(cmd_histo, cmd_depth, cmd_bits,
- storage_ix, storage);
- goto emit_commands;
- }
-
- if (!is_last) {
- /* If this is not the last block, update the command and distance prefix
- codes for the next block and store the compressed forms. */
- cmd_code[0] = 0;
- *cmd_code_numbits = 0;
- BuildAndStoreCommandPrefixCode(cmd_histo, cmd_depth, cmd_bits,
- cmd_code_numbits, cmd_code);
- }
-}
-
-#define FOR_TABLE_BITS_(X) X(9) X(11) X(13) X(15)
-
-#define BAKE_METHOD_PARAM_(B) \
-static BROTLI_NOINLINE void BrotliCompressFragmentFastImpl ## B( \
- MemoryManager* m, const uint8_t* input, size_t input_size, \
- BROTLI_BOOL is_last, int* table, uint8_t cmd_depth[128], \
- uint16_t cmd_bits[128], size_t* cmd_code_numbits, uint8_t* cmd_code, \
- size_t* storage_ix, uint8_t* storage) { \
- BrotliCompressFragmentFastImpl(m, input, input_size, is_last, table, B, \
- cmd_depth, cmd_bits, cmd_code_numbits, cmd_code, storage_ix, storage); \
-}
-FOR_TABLE_BITS_(BAKE_METHOD_PARAM_)
-#undef BAKE_METHOD_PARAM_
-
-void BrotliCompressFragmentFast(
- MemoryManager* m, const uint8_t* input, size_t input_size,
- BROTLI_BOOL is_last, int* table, size_t table_size, uint8_t cmd_depth[128],
- uint16_t cmd_bits[128], size_t* cmd_code_numbits, uint8_t* cmd_code,
- size_t* storage_ix, uint8_t* storage) {
- const size_t initial_storage_ix = *storage_ix;
- const size_t table_bits = Log2FloorNonZero(table_size);
-
- if (input_size == 0) {
- BROTLI_DCHECK(is_last);
- BrotliWriteBits(1, 1, storage_ix, storage); /* islast */
- BrotliWriteBits(1, 1, storage_ix, storage); /* isempty */
- *storage_ix = (*storage_ix + 7u) & ~7u;
- return;
- }
-
- switch (table_bits) {
-#define CASE_(B) \
- case B: \
- BrotliCompressFragmentFastImpl ## B( \
- m, input, input_size, is_last, table, cmd_depth, cmd_bits, \
- cmd_code_numbits, cmd_code, storage_ix, storage); \
- break;
- FOR_TABLE_BITS_(CASE_)
-#undef CASE_
- default: BROTLI_DCHECK(0); break;
- }
-
- /* If output is larger than single uncompressed block, rewrite it. */
- if (*storage_ix - initial_storage_ix > 31 + (input_size << 3)) {
- EmitUncompressedMetaBlock(input, input + input_size, initial_storage_ix,
- storage_ix, storage);
- }
-
- if (is_last) {
- BrotliWriteBits(1, 1, storage_ix, storage); /* islast */
- BrotliWriteBits(1, 1, storage_ix, storage); /* isempty */
- *storage_ix = (*storage_ix + 7u) & ~7u;
- }
-}
-
-#undef FOR_TABLE_BITS_
-
-#if defined(__cplusplus) || defined(c_plusplus)
-} /* extern "C" */
-#endif
diff --git a/BaseTools/Source/C/BrotliCompress/enc/compress_fragment_two_pass.c b/BaseTools/Source/C/BrotliCompress/enc/compress_fragment_two_pass.c
deleted file mode 100644
index 0d4d3b597eb9..000000000000
--- a/BaseTools/Source/C/BrotliCompress/enc/compress_fragment_two_pass.c
+++ /dev/null
@@ -1,645 +0,0 @@
-/* Copyright 2015 Google Inc. All Rights Reserved.
-
- Distributed under MIT license.
- See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
-*/
-
-/* Function for fast encoding of an input fragment, independently from the input
- history. This function uses two-pass processing: in the first pass we save
- the found backward matches and literal bytes into a buffer, and in the
- second pass we emit them into the bit stream using prefix codes built based
- on the actual command and literal byte histograms. */
-
-#include "./compress_fragment_two_pass.h"
-
-#include <string.h> /* memcmp, memcpy, memset */
-
-#include "../common/constants.h"
-#include "../common/platform.h"
-#include <brotli/types.h>
-#include "./bit_cost.h"
-#include "./brotli_bit_stream.h"
-#include "./entropy_encode.h"
-#include "./fast_log.h"
-#include "./find_match_length.h"
-#include "./memory.h"
-#include "./write_bits.h"
-
-#if defined(__cplusplus) || defined(c_plusplus)
-extern "C" {
-#endif
-
-#define MAX_DISTANCE (long)BROTLI_MAX_BACKWARD_LIMIT(18)
-
-/* kHashMul32 multiplier has these properties:
- * The multiplier must be odd. Otherwise we may lose the highest bit.
- * No long streaks of ones or zeros.
- * There is no effort to ensure that it is a prime, the oddity is enough
- for this use.
- * The number has been tuned heuristically against compression benchmarks. */
-static const uint32_t kHashMul32 = 0x1E35A7BD;
-
-static BROTLI_INLINE uint32_t Hash(const uint8_t* p,
- size_t shift, size_t length) {
- const uint64_t h =
- (BROTLI_UNALIGNED_LOAD64LE(p) << ((8 - length) * 8)) * kHashMul32;
- return (uint32_t)(h >> shift);
-}
-
-static BROTLI_INLINE uint32_t HashBytesAtOffset(uint64_t v, size_t offset,
- size_t shift, size_t length) {
- BROTLI_DCHECK(offset <= 8 - length);
- {
- const uint64_t h = ((v >> (8 * offset)) << ((8 - length) * 8)) * kHashMul32;
- return (uint32_t)(h >> shift);
- }
-}
-
-static BROTLI_INLINE BROTLI_BOOL IsMatch(const uint8_t* p1, const uint8_t* p2,
- size_t length) {
- if (BrotliUnalignedRead32(p1) == BrotliUnalignedRead32(p2)) {
- if (length == 4) return BROTLI_TRUE;
- return TO_BROTLI_BOOL(p1[4] == p2[4] && p1[5] == p2[5]);
- }
- return BROTLI_FALSE;
-}
-
-/* Builds a command and distance prefix code (each 64 symbols) into "depth" and
- "bits" based on "histogram" and stores it into the bit stream. */
-static void BuildAndStoreCommandPrefixCode(
- const uint32_t histogram[128],
- uint8_t depth[128], uint16_t bits[128],
- size_t* storage_ix, uint8_t* storage) {
- /* Tree size for building a tree over 64 symbols is 2 * 64 + 1. */
- HuffmanTree tree[129];
- uint8_t cmd_depth[BROTLI_NUM_COMMAND_SYMBOLS] = { 0 };
- uint16_t cmd_bits[64];
- BrotliCreateHuffmanTree(histogram, 64, 15, tree, depth);
- BrotliCreateHuffmanTree(&histogram[64], 64, 14, tree, &depth[64]);
- /* We have to jump through a few hoops here in order to compute
- the command bits because the symbols are in a different order than in
- the full alphabet. This looks complicated, but having the symbols
- in this order in the command bits saves a few branches in the Emit*
- functions. */
- memcpy(cmd_depth, depth + 24, 24);
- memcpy(cmd_depth + 24, depth, 8);
- memcpy(cmd_depth + 32, depth + 48, 8);
- memcpy(cmd_depth + 40, depth + 8, 8);
- memcpy(cmd_depth + 48, depth + 56, 8);
- memcpy(cmd_depth + 56, depth + 16, 8);
- BrotliConvertBitDepthsToSymbols(cmd_depth, 64, cmd_bits);
- memcpy(bits, cmd_bits + 24, 16);
- memcpy(bits + 8, cmd_bits + 40, 16);
- memcpy(bits + 16, cmd_bits + 56, 16);
- memcpy(bits + 24, cmd_bits, 48);
- memcpy(bits + 48, cmd_bits + 32, 16);
- memcpy(bits + 56, cmd_bits + 48, 16);
- BrotliConvertBitDepthsToSymbols(&depth[64], 64, &bits[64]);
- {
- /* Create the bit length array for the full command alphabet. */
- size_t i;
- memset(cmd_depth, 0, 64); /* only 64 first values were used */
- memcpy(cmd_depth, depth + 24, 8);
- memcpy(cmd_depth + 64, depth + 32, 8);
- memcpy(cmd_depth + 128, depth + 40, 8);
- memcpy(cmd_depth + 192, depth + 48, 8);
- memcpy(cmd_depth + 384, depth + 56, 8);
- for (i = 0; i < 8; ++i) {
- cmd_depth[128 + 8 * i] = depth[i];
- cmd_depth[256 + 8 * i] = depth[8 + i];
- cmd_depth[448 + 8 * i] = depth[16 + i];
- }
- BrotliStoreHuffmanTree(
- cmd_depth, BROTLI_NUM_COMMAND_SYMBOLS, tree, storage_ix, storage);
- }
- BrotliStoreHuffmanTree(&depth[64], 64, tree, storage_ix, storage);
-}
-
-static BROTLI_INLINE void EmitInsertLen(
- uint32_t insertlen, uint32_t** commands) {
- if (insertlen < 6) {
- **commands = insertlen;
- } else if (insertlen < 130) {
- const uint32_t tail = insertlen - 2;
- const uint32_t nbits = Log2FloorNonZero(tail) - 1u;
- const uint32_t prefix = tail >> nbits;
- const uint32_t inscode = (nbits << 1) + prefix + 2;
- const uint32_t extra = tail - (prefix << nbits);
- **commands = inscode | (extra << 8);
- } else if (insertlen < 2114) {
- const uint32_t tail = insertlen - 66;
- const uint32_t nbits = Log2FloorNonZero(tail);
- const uint32_t code = nbits + 10;
- const uint32_t extra = tail - (1u << nbits);
- **commands = code | (extra << 8);
- } else if (insertlen < 6210) {
- const uint32_t extra = insertlen - 2114;
- **commands = 21 | (extra << 8);
- } else if (insertlen < 22594) {
- const uint32_t extra = insertlen - 6210;
- **commands = 22 | (extra << 8);
- } else {
- const uint32_t extra = insertlen - 22594;
- **commands = 23 | (extra << 8);
- }
- ++(*commands);
-}
-
-static BROTLI_INLINE void EmitCopyLen(size_t copylen, uint32_t** commands) {
- if (copylen < 10) {
- **commands = (uint32_t)(copylen + 38);
- } else if (copylen < 134) {
- const size_t tail = copylen - 6;
- const size_t nbits = Log2FloorNonZero(tail) - 1;
- const size_t prefix = tail >> nbits;
- const size_t code = (nbits << 1) + prefix + 44;
- const size_t extra = tail - (prefix << nbits);
- **commands = (uint32_t)(code | (extra << 8));
- } else if (copylen < 2118) {
- const size_t tail = copylen - 70;
- const size_t nbits = Log2FloorNonZero(tail);
- const size_t code = nbits + 52;
- const size_t extra = tail - ((size_t)1 << nbits);
- **commands = (uint32_t)(code | (extra << 8));
- } else {
- const size_t extra = copylen - 2118;
- **commands = (uint32_t)(63 | (extra << 8));
- }
- ++(*commands);
-}
-
-static BROTLI_INLINE void EmitCopyLenLastDistance(
- size_t copylen, uint32_t** commands) {
- if (copylen < 12) {
- **commands = (uint32_t)(copylen + 20);
- ++(*commands);
- } else if (copylen < 72) {
- const size_t tail = copylen - 8;
- const size_t nbits = Log2FloorNonZero(tail) - 1;
- const size_t prefix = tail >> nbits;
- const size_t code = (nbits << 1) + prefix + 28;
- const size_t extra = tail - (prefix << nbits);
- **commands = (uint32_t)(code | (extra << 8));
- ++(*commands);
- } else if (copylen < 136) {
- const size_t tail = copylen - 8;
- const size_t code = (tail >> 5) + 54;
- const size_t extra = tail & 31;
- **commands = (uint32_t)(code | (extra << 8));
- ++(*commands);
- **commands = 64;
- ++(*commands);
- } else if (copylen < 2120) {
- const size_t tail = copylen - 72;
- const size_t nbits = Log2FloorNonZero(tail);
- const size_t code = nbits + 52;
- const size_t extra = tail - ((size_t)1 << nbits);
- **commands = (uint32_t)(code | (extra << 8));
- ++(*commands);
- **commands = 64;
- ++(*commands);
- } else {
- const size_t extra = copylen - 2120;
- **commands = (uint32_t)(63 | (extra << 8));
- ++(*commands);
- **commands = 64;
- ++(*commands);
- }
-}
-
-static BROTLI_INLINE void EmitDistance(uint32_t distance, uint32_t** commands) {
- uint32_t d = distance + 3;
- uint32_t nbits = Log2FloorNonZero(d) - 1;
- const uint32_t prefix = (d >> nbits) & 1;
- const uint32_t offset = (2 + prefix) << nbits;
- const uint32_t distcode = 2 * (nbits - 1) + prefix + 80;
- uint32_t extra = d - offset;
- **commands = distcode | (extra << 8);
- ++(*commands);
-}
-
-/* REQUIRES: len <= 1 << 24. */
-static void BrotliStoreMetaBlockHeader(
- size_t len, BROTLI_BOOL is_uncompressed, size_t* storage_ix,
- uint8_t* storage) {
- size_t nibbles = 6;
- /* ISLAST */
- BrotliWriteBits(1, 0, storage_ix, storage);
- if (len <= (1U << 16)) {
- nibbles = 4;
- } else if (len <= (1U << 20)) {
- nibbles = 5;
- }
- BrotliWriteBits(2, nibbles - 4, storage_ix, storage);
- BrotliWriteBits(nibbles * 4, len - 1, storage_ix, storage);
- /* ISUNCOMPRESSED */
- BrotliWriteBits(1, (uint64_t)is_uncompressed, storage_ix, storage);
-}
-
-static BROTLI_INLINE void CreateCommands(const uint8_t* input,
- size_t block_size, size_t input_size, const uint8_t* base_ip, int* table,
- size_t table_bits, size_t min_match,
- uint8_t** literals, uint32_t** commands) {
- /* "ip" is the input pointer. */
- const uint8_t* ip = input;
- const size_t shift = 64u - table_bits;
- const uint8_t* ip_end = input + block_size;
- /* "next_emit" is a pointer to the first byte that is not covered by a
- previous copy. Bytes between "next_emit" and the start of the next copy or
- the end of the input will be emitted as literal bytes. */
- const uint8_t* next_emit = input;
-
- int last_distance = -1;
- const size_t kInputMarginBytes = BROTLI_WINDOW_GAP;
-
- if (BROTLI_PREDICT_TRUE(block_size >= kInputMarginBytes)) {
- /* For the last block, we need to keep a 16 bytes margin so that we can be
- sure that all distances are at most window size - 16.
- For all other blocks, we only need to keep a margin of 5 bytes so that
- we don't go over the block size with a copy. */
- const size_t len_limit = BROTLI_MIN(size_t, block_size - min_match,
- input_size - kInputMarginBytes);
- const uint8_t* ip_limit = input + len_limit;
-
- uint32_t next_hash;
- for (next_hash = Hash(++ip, shift, min_match); ; ) {
- /* Step 1: Scan forward in the input looking for a 6-byte-long match.
- If we get close to exhausting the input then goto emit_remainder.
-
- Heuristic match skipping: If 32 bytes are scanned with no matches
- found, start looking only at every other byte. If 32 more bytes are
- scanned, look at every third byte, etc.. When a match is found,
- immediately go back to looking at every byte. This is a small loss
- (~5% performance, ~0.1% density) for compressible data due to more
- bookkeeping, but for non-compressible data (such as JPEG) it's a huge
- win since the compressor quickly "realizes" the data is incompressible
- and doesn't bother looking for matches everywhere.
-
- The "skip" variable keeps track of how many bytes there are since the
- last match; dividing it by 32 (ie. right-shifting by five) gives the
- number of bytes to move ahead for each iteration. */
- uint32_t skip = 32;
-
- const uint8_t* next_ip = ip;
- const uint8_t* candidate;
-
- BROTLI_DCHECK(next_emit < ip);
-trawl:
- do {
- uint32_t hash = next_hash;
- uint32_t bytes_between_hash_lookups = skip++ >> 5;
- ip = next_ip;
- BROTLI_DCHECK(hash == Hash(ip, shift, min_match));
- next_ip = ip + bytes_between_hash_lookups;
- if (BROTLI_PREDICT_FALSE(next_ip > ip_limit)) {
- goto emit_remainder;
- }
- next_hash = Hash(next_ip, shift, min_match);
- candidate = ip - last_distance;
- if (IsMatch(ip, candidate, min_match)) {
- if (BROTLI_PREDICT_TRUE(candidate < ip)) {
- table[hash] = (int)(ip - base_ip);
- break;
- }
- }
- candidate = base_ip + table[hash];
- BROTLI_DCHECK(candidate >= base_ip);
- BROTLI_DCHECK(candidate < ip);
-
- table[hash] = (int)(ip - base_ip);
- } while (BROTLI_PREDICT_TRUE(!IsMatch(ip, candidate, min_match)));
-
- /* Check copy distance. If candidate is not feasible, continue search.
- Checking is done outside of hot loop to reduce overhead. */
- if (ip - candidate > MAX_DISTANCE) goto trawl;
-
- /* Step 2: Emit the found match together with the literal bytes from
- "next_emit", and then see if we can find a next match immediately
- afterwards. Repeat until we find no match for the input
- without emitting some literal bytes. */
-
- {
- /* We have a 6-byte match at ip, and we need to emit bytes in
- [next_emit, ip). */
- const uint8_t* base = ip;
- size_t matched = min_match + FindMatchLengthWithLimit(
- candidate + min_match, ip + min_match,
- (size_t)(ip_end - ip) - min_match);
- int distance = (int)(base - candidate); /* > 0 */
- int insert = (int)(base - next_emit);
- ip += matched;
- BROTLI_DCHECK(0 == memcmp(base, candidate, matched));
- EmitInsertLen((uint32_t)insert, commands);
- memcpy(*literals, next_emit, (size_t)insert);
- *literals += insert;
- if (distance == last_distance) {
- **commands = 64;
- ++(*commands);
- } else {
- EmitDistance((uint32_t)distance, commands);
- last_distance = distance;
- }
- EmitCopyLenLastDistance(matched, commands);
-
- next_emit = ip;
- if (BROTLI_PREDICT_FALSE(ip >= ip_limit)) {
- goto emit_remainder;
- }
- {
- /* We could immediately start working at ip now, but to improve
- compression we first update "table" with the hashes of some
- positions within the last copy. */
- uint64_t input_bytes;
- uint32_t cur_hash;
- uint32_t prev_hash;
- if (min_match == 4) {
- input_bytes = BROTLI_UNALIGNED_LOAD64LE(ip - 3);
- cur_hash = HashBytesAtOffset(input_bytes, 3, shift, min_match);
- prev_hash = HashBytesAtOffset(input_bytes, 0, shift, min_match);
- table[prev_hash] = (int)(ip - base_ip - 3);
- prev_hash = HashBytesAtOffset(input_bytes, 1, shift, min_match);
- table[prev_hash] = (int)(ip - base_ip - 2);
- prev_hash = HashBytesAtOffset(input_bytes, 0, shift, min_match);
- table[prev_hash] = (int)(ip - base_ip - 1);
- } else {
- input_bytes = BROTLI_UNALIGNED_LOAD64LE(ip - 5);
- prev_hash = HashBytesAtOffset(input_bytes, 0, shift, min_match);
- table[prev_hash] = (int)(ip - base_ip - 5);
- prev_hash = HashBytesAtOffset(input_bytes, 1, shift, min_match);
- table[prev_hash] = (int)(ip - base_ip - 4);
- prev_hash = HashBytesAtOffset(input_bytes, 2, shift, min_match);
- table[prev_hash] = (int)(ip - base_ip - 3);
- input_bytes = BROTLI_UNALIGNED_LOAD64LE(ip - 2);
- cur_hash = HashBytesAtOffset(input_bytes, 2, shift, min_match);
- prev_hash = HashBytesAtOffset(input_bytes, 0, shift, min_match);
- table[prev_hash] = (int)(ip - base_ip - 2);
- prev_hash = HashBytesAtOffset(input_bytes, 1, shift, min_match);
- table[prev_hash] = (int)(ip - base_ip - 1);
- }
-
- candidate = base_ip + table[cur_hash];
- table[cur_hash] = (int)(ip - base_ip);
- }
- }
-
- while (ip - candidate <= MAX_DISTANCE &&
- IsMatch(ip, candidate, min_match)) {
- /* We have a 6-byte match at ip, and no need to emit any
- literal bytes prior to ip. */
- const uint8_t* base = ip;
- size_t matched = min_match + FindMatchLengthWithLimit(
- candidate + min_match, ip + min_match,
- (size_t)(ip_end - ip) - min_match);
- ip += matched;
- last_distance = (int)(base - candidate); /* > 0 */
- BROTLI_DCHECK(0 == memcmp(base, candidate, matched));
- EmitCopyLen(matched, commands);
- EmitDistance((uint32_t)last_distance, commands);
-
- next_emit = ip;
- if (BROTLI_PREDICT_FALSE(ip >= ip_limit)) {
- goto emit_remainder;
- }
- {
- /* We could immediately start working at ip now, but to improve
- compression we first update "table" with the hashes of some
- positions within the last copy. */
- uint64_t input_bytes;
- uint32_t cur_hash;
- uint32_t prev_hash;
- if (min_match == 4) {
- input_bytes = BROTLI_UNALIGNED_LOAD64LE(ip - 3);
- cur_hash = HashBytesAtOffset(input_bytes, 3, shift, min_match);
- prev_hash = HashBytesAtOffset(input_bytes, 0, shift, min_match);
- table[prev_hash] = (int)(ip - base_ip - 3);
- prev_hash = HashBytesAtOffset(input_bytes, 1, shift, min_match);
- table[prev_hash] = (int)(ip - base_ip - 2);
- prev_hash = HashBytesAtOffset(input_bytes, 2, shift, min_match);
- table[prev_hash] = (int)(ip - base_ip - 1);
- } else {
- input_bytes = BROTLI_UNALIGNED_LOAD64LE(ip - 5);
- prev_hash = HashBytesAtOffset(input_bytes, 0, shift, min_match);
- table[prev_hash] = (int)(ip - base_ip - 5);
- prev_hash = HashBytesAtOffset(input_bytes, 1, shift, min_match);
- table[prev_hash] = (int)(ip - base_ip - 4);
- prev_hash = HashBytesAtOffset(input_bytes, 2, shift, min_match);
- table[prev_hash] = (int)(ip - base_ip - 3);
- input_bytes = BROTLI_UNALIGNED_LOAD64LE(ip - 2);
- cur_hash = HashBytesAtOffset(input_bytes, 2, shift, min_match);
- prev_hash = HashBytesAtOffset(input_bytes, 0, shift, min_match);
- table[prev_hash] = (int)(ip - base_ip - 2);
- prev_hash = HashBytesAtOffset(input_bytes, 1, shift, min_match);
- table[prev_hash] = (int)(ip - base_ip - 1);
- }
-
- candidate = base_ip + table[cur_hash];
- table[cur_hash] = (int)(ip - base_ip);
- }
- }
-
- next_hash = Hash(++ip, shift, min_match);
- }
- }
-
-emit_remainder:
- BROTLI_DCHECK(next_emit <= ip_end);
- /* Emit the remaining bytes as literals. */
- if (next_emit < ip_end) {
- const uint32_t insert = (uint32_t)(ip_end - next_emit);
- EmitInsertLen(insert, commands);
- memcpy(*literals, next_emit, insert);
- *literals += insert;
- }
-}
-
-static void StoreCommands(MemoryManager* m,
- const uint8_t* literals, const size_t num_literals,
- const uint32_t* commands, const size_t num_commands,
- size_t* storage_ix, uint8_t* storage) {
- static const uint32_t kNumExtraBits[128] = {
- 0, 0, 0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 7, 8, 9, 10, 12, 14, 24,
- 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4,
- 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 7, 8, 9, 10, 24,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8,
- 9, 9, 10, 10, 11, 11, 12, 12, 13, 13, 14, 14, 15, 15, 16, 16,
- 17, 17, 18, 18, 19, 19, 20, 20, 21, 21, 22, 22, 23, 23, 24, 24,
- };
- static const uint32_t kInsertOffset[24] = {
- 0, 1, 2, 3, 4, 5, 6, 8, 10, 14, 18, 26, 34, 50, 66, 98, 130, 194, 322, 578,
- 1090, 2114, 6210, 22594,
- };
-
- uint8_t lit_depths[256];
- uint16_t lit_bits[256];
- uint32_t lit_histo[256] = { 0 };
- uint8_t cmd_depths[128] = { 0 };
- uint16_t cmd_bits[128] = { 0 };
- uint32_t cmd_histo[128] = { 0 };
- size_t i;
- for (i = 0; i < num_literals; ++i) {
- ++lit_histo[literals[i]];
- }
- BrotliBuildAndStoreHuffmanTreeFast(m, lit_histo, num_literals,
- /* max_bits = */ 8,
- lit_depths, lit_bits,
- storage_ix, storage);
- if (BROTLI_IS_OOM(m)) return;
-
- for (i = 0; i < num_commands; ++i) {
- const uint32_t code = commands[i] & 0xFF;
- BROTLI_DCHECK(code < 128);
- ++cmd_histo[code];
- }
- cmd_histo[1] += 1;
- cmd_histo[2] += 1;
- cmd_histo[64] += 1;
- cmd_histo[84] += 1;
- BuildAndStoreCommandPrefixCode(cmd_histo, cmd_depths, cmd_bits,
- storage_ix, storage);
-
- for (i = 0; i < num_commands; ++i) {
- const uint32_t cmd = commands[i];
- const uint32_t code = cmd & 0xFF;
- const uint32_t extra = cmd >> 8;
- BROTLI_DCHECK(code < 128);
- BrotliWriteBits(cmd_depths[code], cmd_bits[code], storage_ix, storage);
- BrotliWriteBits(kNumExtraBits[code], extra, storage_ix, storage);
- if (code < 24) {
- const uint32_t insert = kInsertOffset[code] + extra;
- uint32_t j;
- for (j = 0; j < insert; ++j) {
- const uint8_t lit = *literals;
- BrotliWriteBits(lit_depths[lit], lit_bits[lit], storage_ix, storage);
- ++literals;
- }
- }
- }
-}
-
-/* Acceptable loss for uncompressible speedup is 2% */
-#define MIN_RATIO 0.98
-#define SAMPLE_RATE 43
-
-static BROTLI_BOOL ShouldCompress(
- const uint8_t* input, size_t input_size, size_t num_literals) {
- double corpus_size = (double)input_size;
- if (num_literals < MIN_RATIO * corpus_size) {
- return BROTLI_TRUE;
- } else {
- uint32_t literal_histo[256] = { 0 };
- const double max_total_bit_cost = corpus_size * 8 * MIN_RATIO / SAMPLE_RATE;
- size_t i;
- for (i = 0; i < input_size; i += SAMPLE_RATE) {
- ++literal_histo[input[i]];
- }
- return TO_BROTLI_BOOL(BitsEntropy(literal_histo, 256) < max_total_bit_cost);
- }
-}
-
-static void RewindBitPosition(const size_t new_storage_ix,
- size_t* storage_ix, uint8_t* storage) {
- const size_t bitpos = new_storage_ix & 7;
- const size_t mask = (1u << bitpos) - 1;
- storage[new_storage_ix >> 3] &= (uint8_t)mask;
- *storage_ix = new_storage_ix;
-}
-
-static void EmitUncompressedMetaBlock(const uint8_t* input, size_t input_size,
- size_t* storage_ix, uint8_t* storage) {
- BrotliStoreMetaBlockHeader(input_size, 1, storage_ix, storage);
- *storage_ix = (*storage_ix + 7u) & ~7u;
- memcpy(&storage[*storage_ix >> 3], input, input_size);
- *storage_ix += input_size << 3;
- storage[*storage_ix >> 3] = 0;
-}
-
-static BROTLI_INLINE void BrotliCompressFragmentTwoPassImpl(
- MemoryManager* m, const uint8_t* input, size_t input_size,
- BROTLI_BOOL is_last, uint32_t* command_buf, uint8_t* literal_buf,
- int* table, size_t table_bits, size_t min_match,
- size_t* storage_ix, uint8_t* storage) {
- /* Save the start of the first block for position and distance computations.
- */
- const uint8_t* base_ip = input;
- BROTLI_UNUSED(is_last);
-
- while (input_size > 0) {
- size_t block_size =
- BROTLI_MIN(size_t, input_size, kCompressFragmentTwoPassBlockSize);
- uint32_t* commands = command_buf;
- uint8_t* literals = literal_buf;
- size_t num_literals;
- CreateCommands(input, block_size, input_size, base_ip, table,
- table_bits, min_match, &literals, &commands);
- num_literals = (size_t)(literals - literal_buf);
- if (ShouldCompress(input, block_size, num_literals)) {
- const size_t num_commands = (size_t)(commands - command_buf);
- BrotliStoreMetaBlockHeader(block_size, 0, storage_ix, storage);
- /* No block splits, no contexts. */
- BrotliWriteBits(13, 0, storage_ix, storage);
- StoreCommands(m, literal_buf, num_literals, command_buf, num_commands,
- storage_ix, storage);
- if (BROTLI_IS_OOM(m)) return;
- } else {
- /* Since we did not find many backward references and the entropy of
- the data is close to 8 bits, we can simply emit an uncompressed block.
- This makes compression speed of uncompressible data about 3x faster. */
- EmitUncompressedMetaBlock(input, block_size, storage_ix, storage);
- }
- input += block_size;
- input_size -= block_size;
- }
-}
-
-#define FOR_TABLE_BITS_(X) \
- X(8) X(9) X(10) X(11) X(12) X(13) X(14) X(15) X(16) X(17)
-
-#define BAKE_METHOD_PARAM_(B) \
-static BROTLI_NOINLINE void BrotliCompressFragmentTwoPassImpl ## B( \
- MemoryManager* m, const uint8_t* input, size_t input_size, \
- BROTLI_BOOL is_last, uint32_t* command_buf, uint8_t* literal_buf, \
- int* table, size_t* storage_ix, uint8_t* storage) { \
- size_t min_match = (B <= 15) ? 4 : 6; \
- BrotliCompressFragmentTwoPassImpl(m, input, input_size, is_last, command_buf,\
- literal_buf, table, B, min_match, storage_ix, storage); \
-}
-FOR_TABLE_BITS_(BAKE_METHOD_PARAM_)
-#undef BAKE_METHOD_PARAM_
-
-void BrotliCompressFragmentTwoPass(
- MemoryManager* m, const uint8_t* input, size_t input_size,
- BROTLI_BOOL is_last, uint32_t* command_buf, uint8_t* literal_buf,
- int* table, size_t table_size, size_t* storage_ix, uint8_t* storage) {
- const size_t initial_storage_ix = *storage_ix;
- const size_t table_bits = Log2FloorNonZero(table_size);
- switch (table_bits) {
-#define CASE_(B) \
- case B: \
- BrotliCompressFragmentTwoPassImpl ## B( \
- m, input, input_size, is_last, command_buf, \
- literal_buf, table, storage_ix, storage); \
- break;
- FOR_TABLE_BITS_(CASE_)
-#undef CASE_
- default: BROTLI_DCHECK(0); break;
- }
-
- /* If output is larger than single uncompressed block, rewrite it. */
- if (*storage_ix - initial_storage_ix > 31 + (input_size << 3)) {
- RewindBitPosition(initial_storage_ix, storage_ix, storage);
- EmitUncompressedMetaBlock(input, input_size, storage_ix, storage);
- }
-
- if (is_last) {
- BrotliWriteBits(1, 1, storage_ix, storage); /* islast */
- BrotliWriteBits(1, 1, storage_ix, storage); /* isempty */
- *storage_ix = (*storage_ix + 7u) & ~7u;
- }
-}
-
-#undef FOR_TABLE_BITS_
-
-#if defined(__cplusplus) || defined(c_plusplus)
-} /* extern "C" */
-#endif
diff --git a/BaseTools/Source/C/BrotliCompress/enc/dictionary_hash.c b/BaseTools/Source/C/BrotliCompress/enc/dictionary_hash.c
deleted file mode 100644
index 03355c030372..000000000000
--- a/BaseTools/Source/C/BrotliCompress/enc/dictionary_hash.c
+++ /dev/null
@@ -1,1120 +0,0 @@
-/* Copyright 2015 Google Inc. All Rights Reserved.
-
- Distributed under MIT license.
- See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
-*/
-
-/* Hash table on the 4-byte prefixes of static dictionary words. */
-
-#include "../common/platform.h"
-#include "./dictionary_hash.h"
-
-#if defined(__cplusplus) || defined(c_plusplus)
-extern "C" {
-#endif
-
-BROTLI_INTERNAL const uint16_t kStaticDictionaryHash[32768] = {
-32072,0,0,0,0,0,0,0,0,21860,0,0,0,0,0,0,0,40486,0,0,0,0,0,45798,0,0,0,0,0,0,1292
-,0,0,0,0,4964,278,23717,0,19972,0,0,0,0,0,0,0,0,0,0,0,0,2126,16102,0,0,0,14437,0
-,0,0,0,0,0,0,26727,2253,0,0,17252,0,0,0,0,0,0,0,0,0,3622,0,0,0,0,22984,0,0,0,0,0
-,0,16647,0,34247,0,0,0,0,0,48486,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2511,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,19532,0,0,24004,0,0,0,9828,0
-,0,0,0,0,0,0,0,0,0,0,0,0,0,0,30853,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-,0,0,0,0,0,0,0,0,0,0,31974,0,0,0,0,0,0,0,0,20650,2404,0,20773,1677,9031,0,6404,0
-,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,51879,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6761,7206
-,0,0,21992,22983,0,0,3529,0,1864,0,0,0,0,0,0,11046,0,0,9641,0,0,0,6507,0,0,36934
-,21576,62375,0,0,0,0,0,0,0,0,0,8294,0,0,0,0,0,0,0,40807,0,0,0,39398,8136,0,0,0,0
-,0,0,0,8875,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7941,0,0,25609,0,0,0,936,
-3716,3213,15687,0,0,0,0,0,52519,0,17381,0,0,0,0,1320,5797,0,21029,0,0,6472,807,0
-,0,0,0,0,0,0,0,0,0,13545,0,0,0,3624,0,0,0,29674,30820,0,31237,0,6596,0,0,0,0,0,0
-,0,0,0,64070,0,0,0,0,0,0,0,0,0,0,0,22278,0,37446,0,0,0,0,7240,423,0,24612,21705,
-17636,0,0,0,0,0,0,1833,0,0,0,328,6021,0,0,0,19974,0,0,0,0,0,0,0,0,0,62119,4178,0
-,0,0,0,12100,8617,0,0,16900,0,36678,0,0,0,35366,0,51718,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,20998,0,62086,0,0,0,0,0,5542,0,0,0,0,0,0,0,0,0,0,0,14629,10952,25927,0,0,0
-,0,19849,0,0,0,0,0,0,0,30952,3046,14314,12998,0,0,0,15268,0,40582,30216,62118,0,
-0,0,20132,0,0,0,0,0,12005,0,0,0,52358,0,0,0,0,24778,0,44,33095,0,0,0,0,0,26372,0
-,0,0,0,0,3781,0,0,17928,9479,0,0,0,0,0,0,0,0,32297,28613,0,0,0,0,0,0,0,0,0,0,0,0
-,0,47174,11723,0,0,0,0,0,0,0,0,0,2536,55143,0,0,6410,0,0,0,0,0,0,0,0,56294,11914
-,0,529,0,30184,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8261,0,0,28808,58854,22633,
-965,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,64135,0,0,331,3684,0,1605,0,0,0,0,0,0,
-0,0,0,0,16650,37,0,23622,3144,15429,0,0,0,0,0,0,0,0,0,0,22443,69,0,0,0,0,0,0,0,0
-,17832,0,0,0,0,0,0,0,0,0,11113,0,0,0,0,18309,0,0,0,0,0,0,0,0,0,26630,0,0,25512,
-25895,0,0,0,0,0,0,0,0,0,0,0,16901,0,0,0,27558,0,0,9418,0,0,0,3508,0,0,0,0,0,0,0,
-0,37990,9289,8517,0,0,0,0,1578,1604,23944,0,0,14916,12781,0,0,0,0,0,0,0,12105,0,
-16617,0,0,0,0,0,0,0,0,0,0,0,0,21348,11240,28870,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,5772,0,0,27812,0,0,0,0,0,0,0,8324,0,0,0,0,0,0,0,0,0,0,16748,1157,0,0,18794,
-16324,25898,935,8333,0,0,0,0,0,0,0,0,18246,0,18086,0,46854,0,0,0,0,0,0,339,0,0,
-25188,12780,12166,6409,0,0,0,0,16516,0,27012,28395,0,0,0,0,0,0,0,1420,0,0,0,9768
-,52967,0,0,0,0,0,0,0,0,0,0,0,0,0,0,25163,324,0,0,0,0,0,0,0,0,0,64998,0,0,0,0,0,
-21893,0,0,0,0,0,47366,0,0,0,870,0,0,0,12646,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,26020,16360,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1809,0,0,0,6601,15878,0,0,0,0,0,
-29092,0,28516,0,0,0,0,0,0,0,0,0,21988,0,0,0,42950,0,0,0,0,0,0,0,0,0,0,5133,1318,
-0,0,0,0,0,0,0,0,0,0,0,54982,24904,0,0,0,0,0,0,0,0,0,0,51526,0,0,0,0,0,3685,0,0,0
-,0,10062,9412,0,0,0,31460,5708,6181,0,0,0,0,0,0,0,0,0,5575,0,0,0,0,0,0,0,0,0,0,
-27144,57478,0,0,0,0,0,0,7084,0,21993,53126,0,0,0,0,8397,0,0,5733,0,0,0,0,0,2116,
-0,24742,0,11271,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1133,0,4873,0,0,38310,0,0,0,0,0,
-0,0,0,0,0,0,0,17932,0,0,18053,0,0,0,25510,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,17798,0,
-26214,0,0,0,0,0,0,0,0,23016,17415,20392,164,0,0,0,0,0,0,0,0,0,0,0,3239,0,46119,0
-,0,0,28580,0,0,0,0,0,0,0,0,0,7621,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,41478,0,0,31016,
-55334,10056,1924,0,0,0,0,0,36614,0,36711,0,0,0,0,0,0,0,0,0,0,13994,59303,0,0,0,0
-,0,0,0,0,0,0,0,0,0,0,0,26501,0,5639,0,0,0,0,0,0,13897,1253,0,0,0,0,0,5095,0,0,0,
-28869,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8646,0,0,0,0,25641,17796,0,0,0,0,0,0,0,
-13316,620,6309,11819,0,0,0,0,0,0,0,0,0,904,1095,0,24229,0,0,28744,49703,0,23077,
-0,0,0,0,32392,0,0,0,0,35271,0,28740,5866,0,0,0,0,0,0,0,4361,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7917,8869,0,0,0,13924,0,0,0,0,
-0,41958,0,0,0,0,0,0,6766,13989,0,0,0,903,0,0,24010,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-,0,0,0,0,0,64390,0,22468,0,25861,0,0,0,0,23656,5317,0,0,0,0,0,0,23017,5445,16009
-,0,0,0,0,0,0,0,0,48006,10473,0,0,14404,0,0,0,42183,0,0,0,51270,0,0,10602,24132,0
-,0,0,0,0,43782,0,0,17834,0,0,0,25576,27205,0,0,0,0,0,0,0,0,29066,0,0,0,0,0,626,
-1988,14700,0,0,0,0,0,0,0,0,0,0,0,0,57670,0,0,0,0,0,0,0,0,0,44710,0,0,0,0,3848,
-7623,0,0,0,0,0,0,0,0,0,0,0,42374,0,0,0,0,0,0,0,0,19272,6436,0,0,5256,0,0,0,0,0,0
-,0,0,0,0,0,0,0,0,19685,0,0,0,0,0,0,0,0,0,0,0,0,0,39783,0,0,0,0,30984,0,0,0,0,0,0
-,28230,0,0,0,29028,10538,3205,0,0,0,0,0,0,0,0,0,0,0,5636,840,295,0,0,8488,8198,0
-,0,0,0,0,0,0,0,0,20580,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4074,19526,0,0,0,0,
-31144,64038,0,0,0,0,0,0,16716,0,0,0,0,0,0,0,0,0,0,0,17706,0,0,0,0,0,0,50630,0,
-50503,0,0,0,0,0,0,0,0,0,0,0,25446,0,0,0,13831,0,0,0,0,0,0,2696,4039,0,0,0,0,
-25288,0,12076,2054,0,48934,0,0,0,0,16969,59431,17259,35335,0,0,0,0,0,0,0,0,0,0,0
-,0,31275,0,0,0,1097,0,0,0,0,0,0,0,0,0,0,0,776,839,0,0,29386,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,5864,12134,0,0,0,0,0,0,0,25349,0,0,0,0,0,0,0,0,0,61447
-,0,0,0,0,0,0,0,0,0,24678,0,0,0,63335,0,28836,8142,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4494,0,0,0,0,0,14088,1188,0,16260,0,0,0,
-16421,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,276,0,0,17060,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,24076,29445,0,33543,0,4901,0
-,0,12522,0,0,62471,0,0,0,0,0,0,0,0,0,0,4046,0,0,0,0,20486,0,15460,2217,51719,0,0
-,0,0,0,23495,0,0,0,0,0,0,15370,0,15849,0,15113,0,0,0,0,0,0,0,0,27972,7337,0,0,0,
-0,30342,0,0,0,0,0,0,0,0,32299,23940,0,17766,0,0,0,0,0,0,6184,0,20904,0,0,0,0,0,0
-,0,0,0,0,31492,0,0,0,5509,0,0,0,0,0,0,0,0,2669,50182,0,0,12299,0,0,0,0,0,0,0,
-5257,28167,0,0,0,0,0,0,0,0,0,0,0,11750,3890,0,0,26500,0,0,0,0,0,0,0,49318,0,0,0,
-0,0,0,0,10981,0,0,0,0,0,0,0,0,17961,1831,0,0,0,0,0,0,0,29638,0,0,0,0,26473,0,
-6216,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,711,0,0,0,0,0,0,0,0,0,0,28683,39975
-,0,0,0,0,0,51654,0,0,0,27527,0,0,0,0,0,0,0,0,30859,3268,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,28772,0,18212,0,0,0,0,25448,65446,0,0,0,0,
-0,0,3337,1670,0,0,0,0,0,19332,0,0,0,0,24936,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1043,0
-,0,0,0,15814,0,21670,0,0,0,0,0,0,0,16263,0,0,0,0,0,0,0,0,0,32454,0,30630,0,0,
-20170,9926,0,0,0,18247,0,0,14376,0,2056,17191,0,0,0,0,0,0,0,7812,0,0,0,0,0,0,0,0
-,0,0,0,0,0,0,22474,52806,1588,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,10825,0,
-0,0,0,40934,0,0,0,0,0,0,0,28677,0,0,5714,0,0,0,0,0,0,0,0,0,0,0,0,0,25865,22246,0
-,0,0,0,17256,35751,0,0,0,0,0,0,0,0,8236,0,32108,0,0,0,43,14342,0,16517,0,0,30732
-,0,4012,133,0,40583,971,23942,0,0,27275,0,0,0,204,0,0,27140,7564,44327,27592,
-57958,0,0,0,0,22344,25701,0,0,0,0,0,0,0,19524,31755,0,0,28102,0,59111,0,0,0,0,0,
-0,0,12261,0,44934,0,0,0,0,31560,0,11114,0,0,0,0,0,0,0,0,0,0,0,18953,18311,0,
-45159,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2059,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-19399,0,0,0,0,0,0,0,0,0,0,0,0,0,58534,0,0,0,0,0,0,0,0,0,0,0,0,22411,23943,0,0,0,
-0,0,0,11690,0,0,4069,0,0,2668,6342,0,0,0,0,0,0,27658,1766,0,0,0,0,23240,56070,0,
-0,0,0,0,0,0,0,0,0,0,0,0,34119,0,24453,0,0,0,0,21867,0,17610,9894,0,0,27976,38790
-,0,0,0,43654,0,31559,12202,23142,0,0,0,50343,0,0,0,0,0,32806,0,0,0,0,0,0,0,0,0,0
-,0,0,0,0,0,0,0,0,0,49895,0,0,0,0,15786,4263,0,0,0,0,4746,3814,0,0,0,0,0,0,17192,
-453,17323,0,20328,4036,0,0,0,15844,0,0,0,0,27561,31940,32296,0,0,0,0,0,0,0,11499
-,11782,0,0,0,0,9738,50471,0,0,0,0,0,35430,0,0,0,0,0,29734,0,0,0,36551,0,0,0,0,
-9257,5606,0,13829,0,7015,0,0,0,0,0,25127,0,0,19051,0,0,0,0,0,0,0,0,0,0,0,0,0,
-2572,0,0,0,0,0,0,29797,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,42342,0,0,0,0,9293,
-0,17896,56038,4077,0,0,0,29899,37351,0,30823,0,8326,0,0,0,18342,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,18569,54054,0,0,0,0,0,0,0,0,0,37254,0,0,31433,
-61510,0,2022,0,0,0,0,0,25381,0,0,0,0,0,0,0,0,0,0,0,0,0,2149,25289,0,0,0,0,0,0,0,
-0,0,0,12516,14185,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8676,0,0,0,0,0
-,0,0,0,0,0,0,36486,0,0,0,0,10889,9607,0,28711,0,0,0,0,0,0,0,0,0,0,28490,0,0,0,0,
-26181,10283,1701,0,0,0,0,0,0,0,0,0,14980,0,7783,0,27846,0,0,0,56486,3892,0,0,0,
-5770,16583,0,26309,13422,20292,0,0,0,0,0,0,0,0,0,28742,0,0,0,0,14536,1158,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,25801,0,0,0,0,0,0,0,0,0,0,0,0,42438,0,3332,0,0
-,0,0,0,0,0,0,0,8327,0,0,0,0,0,0,0,0,0,0,0,0,17353,1447,0,0,8427,48518,1359,0,0,0
-,0,0,14986,0,32168,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9230,2791,0,0,0,0,0,0,0,0,
-16073,31623,4269,0,0,0,0,0,0,4519,0,0,27912,58950,0,0,0,0,0,0,0,0,8361,19812,0,0
-,0,0,6056,7877,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,21701,0,0,0,0,0,0,0,0,0,0,0
-,0,9128,1125,0,16548,0,0,0,0,0,0,0,0,0,0,17292,6854,21352,0,2380,0,0,4007,0,0,0,
-0,0,24357,4202,0,0,0,0,0,0,0,0,0,0,0,0,0,10664,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-,0,0,0,42823,3022,0,0,0,0,0,0,0,0,0,0,0,0,14373,0,20677,3304,2759,20522,64903,0,
-0,0,38,0,0,0,0,0,0,0,0,0,0,0,27814,2802,8870,3758,1255,0,0,0,0,0,0,0,0,30027,
-9510,0,0,0,0,17864,14855,0,0,0,0,0,0,0,0,0,0,23404,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-51462,0,0,0,0,0,0,0,45734,0,0,23467,32327,0,0,10826,52999,0,0,0,33222,31336,
-64326,0,0,0,0,0,0,0,32166,0,0,3891,0,0,0,7017,645,0,0,0,0,0,0,27915,46087,0,0,0,
-21863,0,34246,0,0,16715,0,0,0,0,14052,21416,0,0,0,0,0,0,0,0,39846,0,0,0,0,0,
-38982,0,0,17512,7460,0,0,0,0,0,0,0,0,0,15428,0,0,0,0,0,0,0,28356,0,0,0,0,0,0,0,0
-,0,0,0,0,0,0,0,0,0,0,0,25445,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11879,0,0,0,0,0,0
-,0,0,0,0,0,0,0,19911,0,20007,0,0,0,10855,943,0,0,10821,0,0,0,0,4170,0,0,0,0,0,0,
-0,0,0,9836,0,0,0,0,0,0,0,0,0,0,65415,0,0,0,0,0,0,0,0,9865,24646,0,0,0,0,0,40519,
-0,0,0,0,0,0,0,0,0,12804,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,22091,23655,0,0,0,0,0,0,
-0,31686,0,0,0,58599,0,0,0,0,0,0,0,0,0,0,0,0,0,19620,0,0,0,0,0,0,0,0,0,0,0,0,0,
-24421,0,28100,0,0,0,31268,0,3204,0,0,0,0,0,0,0,0,0,14822,0,0,0,0,19947,10182,0,0
-,9480,14821,4398,0,0,14532,0,0,0,48871,1873,0,0,0,0,0,0,0,589,1541,0,0,0,0,0,
-23333,0,0,0,14149,0,0,0,0,1296,14374,0,27300,0,0,0,0,0,0,7276,0,0,0,0,0,0,47718,
-0,0,0,0,0,0,0,0,0,0,5164,1765,0,14405,0,37574,1994,0,6636,0,0,0,0,0,0,0,0,27815,
-0,0,0,0,2568,6820,0,0,0,0,0,0,0,0,0,0,11336,26247,0,0,23912,0,0,0,30536,0,0,
-34342,0,17799,0,0,0,22149,0,6118,0,25732,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-,0,0,0,0,26600,5190,0,0,1142,0,0,0,0,0,0,0,0,39527,0,0,0,0,0,39494,0,0,0,0,0,0,0
-,0,0,0,3085,0,0,0,0,0,0,0,4786,0,0,0,28873,6532,0,0,26664,0,9193,11719,0,0,0,0,0
-,0,31752,64646,0,0,0,0,0,0,0,0,0,0,0,11397,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,25094,0
-,0,18153,20167,0,0,0,17254,0,0,878,0,0,0,0,0,0,0,0,0,0,24166,0,0,0,0,0,0,0,0,0,0
-,0,0,26059,0,0,0,0,0,0,0,0,0,0,0,0,0,31592,0,0,8167,24362,6212,0,34758,0,0,0,0,0
-,0,32520,0,0,44679,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,17989,8681,29222,0,0,0,
-0,0,0,0,0,10251,4902,1452,15207,0,0,0,0,0,0,0,22822,0,10469,0,0,0,0,0,0,19337,
-17670,107,11494,0,0,0,0,27305,2565,0,0,0,0,0,0,0,64518,200,28389,0,0,0,0,31208,0
-,30762,0,0,0,0,0,29321,60518,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3209,3237,
-12490,22663,0,0,0,18789,31464,16391,0,0,0,0,0,0,0,0,0,0,0,20646,0,0,0,27238,0,0,
-0,0,0,15940,4488,6951,0,0,0,46342,0,0,0,0,0,0,0,0,0,28965,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,20584,3367,0,25350,0,0,0,0,0,0,0,0,0,0,0,0,1814,0,0,0,0,0,0,0,0,0,0,17125,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,55943,0,0,0,0,0,24133,0,0,0,0,0,0,0,0,0,0,0,0,2929
-,0,0,50086,0,2918,25356,30052,115,11846,0,0,0,0,3056,0,0,0,0,17639,239,19815,0,0
-,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,36806,0,0,0,0,0,0,0,0,0,0,0,0,0,21479,0,0,0,0,0,
-28420,11786,4772,0,0,3368,36295,0,31463,0,0,14665,996,0,20582,0,0,0,9988,0,23685
-,0,0,0,52551,0,0,0,0,0,0,0,7556,0,0,0,0,0,0,0,1895,2186,0,0,0,0,0,27755,25447,0,
-0,0,0,31052,63270,0,0,0,0,0,0,0,36742,0,24804,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,31048,0,0,0,0,0,0,0,0,0,21290,2276,0,0,0,0,26475,0,0,0,0,0,0,0,0,0
-,0,15332,0,0,0,0,0,0,0,0,3176,19431,0,0,0,0,0,0,0,62726,0,0,0,25380,0,0,27883,
-1316,0,0,7724,3015,0,0,0,0,6697,0,0,47910,0,0,0,0,0,0,0,0,0,3141,0,0,0,14820,0,0
-,0,0,9326,0,0,0,0,0,0,0,0,0,0,31493,0,0,0,0,0,6566,0,0,0,0,0,0,6569,1348,0,25638
-,0,0,0,0,0,20324,0,0,17067,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11876,0,41030,0,0,0,26405
-,0,0,0,0,0,0,0,0,0,11431,28137,14950,0,10151,0,0,0,0,0,0,0,29574,0,0,0,0,27176,
-57446,0,0,0,0,28650,57574,1387,0,0,0,0,0,0,0,0,0,0,58247,0,0,0,0,0,0,0,16805,0,0
-,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3526,0,15781,0,5572,13352,0,0,0,0,0,18665
-,23463,0,0,0,0,0,0,15405,6885,0,0,0,0,15272,0,0,0,0,0,0,0,0,9861,0,0,0,0,0,0,0,0
-,9512,4037,0,0,11563,49639,0,0,0,0,0,0,27880,57830,0,0,0,0,0,41831,0,21924,0,0,0
-,0,0,0,0,25509,0,27462,0,18085,0,0,0,0,0,0,0,0,0,0,0,0,13898,8068,26441,0,0,0,0,
-0,0,25316,0,0,0,0,16298,7397,5706,19239,0,0,0,0,0,0,0,0,1392,50919,0,0,0,0,0,
-53863,0,0,0,0,1451,0,0,0,0,0,0,0,0,0,0,35847,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-,17801,15813,0,12740,0,0,0,32967,0,0,0,0,0,0,5389,0,0,0,0,0,0,0,0,0,0,31143,0,
-20548,0,0,0,0,0,0,0,0,0,51686,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-12109,19015,0,34983,0,21732,3600,0,0,0,0,47750,17288,43975,22857,47559,0,0,0,0,
-26408,48358,0,0,0,0,0,0,0,0,0,0,0,0,0,30470,0,0,23560,4581,0,22404,0,49286,0,0,0
-,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,49831,0,0,0,27525,31691,7,0,0,25835,0,0,0,0,0,
-4201,16485,0,20676,0,0,0,0,3753,23303,16264,3878,0,0,0,0,0,0,11434,0,0,0,0,0,0,
-7589,0,0,0,0,0,0,0,0,0,57095,0,0,0,0,0,0,0,0,0,0,0,22820,11146,49158,0,23623,0,0
-,0,0,0,0,0,13893,0,0,0,0,0,0,11722,60071,1258,0,0,0,0,0,0,18564,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,27945,0,0,0,0,5479,0,20006,17608,3431,10988,30180,0,0,0,0,0,0,0,
-24581,14,0,0,0,0,0,0,25572,0,0,0,28612,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,53543,0
-,0,0,0,0,0,0,0,0,0,0,33670,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8710,0,14116,0,0,116,
-292,0,0,0,37831,0,43078,0,0,0,0,0,0,0,0,21832,0,0,32134,783,0,0,30982,0,0,0,68,0
-,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5932,0,0,0,18505,
-15175,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3630,16965,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-,0,0,0,17797,0,0,0,0,0,0,520,42150,0,0,3122,0,0,0,22506,0,0,0,0,0,0,0,0,28550,0,
-0,0,50278,0,0,13641,5958,0,35238,0,0,0,0,0,0,0,0,29993,18724,0,0,0,0,0,0,0,0,0,0
-,0,0,0,0,0,0,20619,9319,0,0,0,0,23977,0,5193,0,0,12196,0,0,0,0,0,0,0,0,0,0,0,0,0
-,0,0,0,0,24390,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,20105,677,0,0,0,0
-,0,0,0,0,29419,0,0,0,0,0,0,0,0,0,20266,0,0,0,0,10631,0,0,0,0,0,0,0,0,0,47655,0,0
-,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,26628,12744,0,20648,0,0,0,432,0,0
-,0,0,0,0,0,0,0,0,646,0,25604,0,0,0,0,0,0,0,0,0,0,0,0,0,63782,0,0,0,0,24616,0,0,0
-,21291,0,0,0,0,0,0,0,0,0,0,45638,0,0,0,0,1931,0,0,0,20521,59975,0,20614,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,56231,0,0,0,0,0,29991,0,52871,0,20934,0,0,0,0,0,0,0,16871,
-0,0,0,0,0,0,0,0,0,0,0,0,0,7237,0,0,0,0,0,47558,0,0,0,0,0,0,0,0,0,0,0,10406,0,0,0
-,0,0,0,0,43046,0,0,2930,0,12936,0,0,0,0,0,0,0,0,0,0,0,0,31141,0,0,0,0,0,0,0,
-37639,0,17572,0,0,0,0,0,0,0,0,0,0,31240,0,0,0,0,0,688,0,0,0,0,0,1648,0,0,0,0,
-10055,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,146,0,0,0,0,0,0,0,0,0,6345,199,0,34982,0,0
-,0,0,0,0,0,0,0,0,0,0,0,56839,0,0,0,0,0,48902,0,13412,0,0,0,0,0,0,0,0,2441,4420,0
-,0,0,0,20428,933,0,0,0,0,0,0,0,45383,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-,0,0,0,0,0,54726,0,0,0,0,0,0,0,0,0,0,0,0,17036,741,0,0,0,0,0,0,0,27589,0,0,30282
-,18950,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2248,0,0,0,0,0,0,0,0,0,25993,0,0,0,
-2443,0,0,31622,0,14150,0,0,0,28679,0,0,0,0,0,0,15464,0,0,0,0,54694,0,0,0,0,0,0,
-3827,0,0,0,3756,0,9897,0,0,0,0,0,19082,31239,0,0,0,0,0,0,0,0,0,0,0,24580,0,0,0,0
-,0,0,0,0,0,16580,0,0,0,0,0,0,0,0,0,0,0,0,0,0,27625,0,0,0,784,4647,32652,0,0,
-63494,0,0,0,0,0,0,0,21062,0,0,0,0,0,0,0,0,0,0,3404,58470,0,32325,0,0,0,0,0,0,0,0
-,0,0,0,0,0,0,0,0,18634,2789,0,0,0,0,0,0,0,8548,0,0,0,22501,0,0,0,0,0,0,0,0,0,0,0
-,0,0,0,15881,0,0,0,0,35879,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7978,17956,0,0,0,
-0,0,0,0,24324,0,0,4937,0,0,0,8168,0,13420,10340,0,0,0,0,0,11780,0,0,0,0,0,0,0,0,
-0,0,16712,0,0,0,0,0,0,0,17640,17991,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,2953,0,0,0,0,0,0,0,9100,16806,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,30667,0,0,
-19013,0,0,0,0,0,0,205,15334,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1969,0,0,0,0,0,0,0,26248
-,52518,0,49798,0,0,0,0,0,0,0,9668,0,0,0,0,0,4742,0,0,21641,0,0,0,0,0,0,53574,0,0
-,0,0,0,0,5707,0,0,0,0,0,0,0,3018,12454,0,0,0,0,2920,262,0,0,0,0,0,0,0,0,0,0,3593
-,0,0,0,0,0,0,0,0,0,0,23910,0,0,0,0,0,0,0,55879,0,0,0,0,0,775,0,43270,5066,48967,
-0,0,22986,4165,8971,44838,0,0,0,0,0,62279,272,0,0,0,0,51430,0,0,0,0,0,0,28234,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,13349,0,0,0,51111,20265,13861,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,585,7494,0,0,0,0,0,0,0,0,21768,62407,0,0,0,0,7979,166,0,
-0,0,0,0,0,0,0,0,38918,0,56742,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16296,5767,0,0,0,0,0,0
-,0,32068,0,0,0,0,0,0,0,0,0,0,0,0,0,29796,0,0,0,0,0,0,0,0,23916,30183,0,58791,0,0
-,0,0,0,0,0,20518,0,0,0,0,8969,0,0,0,183,0,0,0,0,0,2314,17445,0,0,0,0,0,0,0,0,0,
-23748,0,0,8139,4839,27914,0,0,0,0,0,0,0,0,0,0,0,0,29478,0,0,16552,26663,0,53767,
-0,0,13960,8039,18696,0,0,0,0,0,0,0,0,0,0,0,782,16005,0,0,0,0,0,0,0,0,6258,56806,
-16456,12455,0,0,0,0,0,0,0,23780,0,0,0,0,0,0,9355,0,0,0,7273,41063,24780,57766,0,
-0,0,0,0,0,0,0,0,0,3820,2597,0,0,0,0,0,0,0,0,0,0,0,0,0,0,29225,61126,0,0,0,58439,
-15691,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,37190,22408,967,0,0,0,
-23078,26858,0,0,0,19753,0,0,0,0,0,0,0,0,0,5416,13702,0,0,0,0,0,52742,20394,38567
-,0,0,0,51079,0,0,136,8516,0,0,0,0,0,0,0,0,0,0,0,27588,0,0,0,0,0,0,0,0,0,0,531,0,
-0,0,0,0,0,0,0,0,8936,5031,12520,19334,0,0,22827,30247,28074,31140,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,27497,18148,20104,59079,0,0,0,0,0,0,0,0,0,24389,0,0,6125,0,0,0,0,
-9541,0,0,24553,29095,0,0,0,0,0,0,0,25444,0,0,9643,0,0,63047,0,0,0,0,0,0,0,0,0,
-39558,0,0,0,0,0,0,20620,11815,499,0,5128,2278,0,0,0,0,0,46310,0,0,0,0,0,0,0,0,
-23530,40166,2440,0,0,0,0,0,0,0,0,0,0,15174,0,0,0,0,0,0,0,0,0,0,26922,0,0,0,0,0,0
-,0,0,0,0,26758,0,0,0,0,0,51911,0,0,23532,0,0,0,0,51238,25737,44486,12622,0,0,0,0
-,0,0,3078,0,9253,0,0,1128,22023,0,0,0,21350,0,16420,0,0,0,0,0,0,0,65094,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,22532,0,48774,0,34503,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,9797,0,0,0,0,0,0,0,13797,0,38279,0,0,1738,0,489,46343,0,45382,0,0,0,0,0,0,
-0,0,0,29030,0,0,0,0,0,0,6220,56550,0,0,0,0,0,26885,0,28806,0,0,0,0,0,0,0,0,0,0,0
-,45958,0,0,0,0,20553,49927,0,0,0,0,0,0,3019,12358,0,0,0,0,0,0,0,0,0,0,26571,
-13319,0,0,653,23399,0,0,0,0,0,0,0,0,22316,0,0,21188,0,0,0,0,0,0,0,0,0,27556,0,0,
-0,0,0,0,0,27878,21483,27653,0,29701,237,0,10632,0,0,0,0,33766,0,0,0,0,0,0,31563,
-0,0,0,0,0,1416,2439,0,0,0,0,0,0,0,0,0,0,9611,0,0,0,0,0,0,0,5611,16581,26601,
-35462,0,0,0,26756,0,59271,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,26984,57734,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,7882,0,0,0,19528,6469,0,0,1161,0,0,0,7688,20935,425,0,
-0,0,0,0,0,0,0,12519,0,12902,0,0,0,0,0,0,0,0,0,0,2411,0,11725,26086,0,0,20201,0,0
-,0,0,0,0,0,0,11045,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,30471,0,0,0,0,0,0,0,0,0,0,0,
-21541,1141,21190,0,9188,0,0,0,0,0,0,0,0,0,0,0,0,0,0,184,1093,0,0,0,0,0,0,0,0,
-4842,0,13672,0,0,12230,0,0,0,10532,0,0,8937,0,0,0,0,0,0,0,0,0,0,28996,0,0,11720,
-26982,0,46182,0,43911,31754,0,1160,3940,0,20772,0,0,0,0,0,24549,0,32582,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,31845,0,0,0,0,0,0,0,2310,11788,0,0,43047,0,0,0,18853,0
-,0,0,0,0,0,0,0,0,63622,0,0,7048,17318,0,0,0,21957,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,1039,6279,0,0,0,0,0,0,0,0,0,0,0,0,0,12197,0,0,0,0,0,0,0,0,0,
-46470,0,0,24,19719,0,0,0,0,0,0,0,0,0,39335,0,0,0,0,0,0,0,0,0,0,21353,3846,0,0,0,
-0,0,0,0,36679,0,0,0,0,0,0,0,0,0,0,0,11268,0,0,0,0,0,9382,0,0,0,0,0,0,0,0,0,0,0,0
-,0,29926,0,33606,0,4708,2828,0,0,29543,0,0,0,0,0,29893,0,0,0,0,0,0,0,0,3663,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,10920,7111,0,0,0,0,0,0,0,0,0,0
-,9384,0,0,0,0,0,0,0,0,0,0,0,0,20388,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,37094,0,0,0,
-27110,0,0,0,0,0,0,21865,0,27753,30214,0,0,0,0,0,57895,0,0,0,0,0,0,0,0,0,0,12648,
-5446,0,0,0,0,0,0,0,0,0,0,19784,17124,0,52007,0,0,0,0,0,0,0,0,758,0,0,0,0,0,0,0,0
-,0,0,0,0,0,0,0,0,0,0,24900,0,0,0,0,0,1476,0,65031,0,0,1205,46663,0,30023,11625,
-1094,0,0,0,0,0,0,0,0,0,0,0,0,0,0,10058,0,0,0,0,0,0,28455,0,0,0,0,0,0,0,0,0,0,0,
-14788,0,0,0,0,16808,0,0,742,0,0,0,0,0,0,0,0,0,0,0,21636,0,0,0,0,0,0,0,0,0,0,0,0,
-15944,23207,0,0,0,0,247,0,0,0,0,24743,0,0,0,5252,0,0,0,0,0,0,0,0,29961,18660,
-21099,46791,0,7045,0,0,0,0,25707,0,0,17412,3828,0,0,0,0,0,0,0,0,0,0,0,5803,5637,
-0,38151,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,60103,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,853,0,0,0,0,0,0,30215,0,0,0,0,0,0,0,8741,0,0,0,0,0,27366,0,0,0,0,171,
-4070,0,0,0,0,0,0,0,0,24073,7366,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2184,5189,0,
-20932,1545,4996,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7684,0,0,0,0,0
-,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6313,0,0,0,0,0,0,0,30826,0,0,0,0,0,0,
-0,0,0,0,27463,0,0,0,0,0,0,0,0,0,0,21640,63303,0,0,3275,31111,0,0,0,0,0,0,0,11556
-,0,14756,0,0,0,15108,0,0,0,0,0,0,0,0,0,0,0,0,0,0,23914,28966,0,0,0,4965,0,0,0,0,
-0,0,0,0,0,0,10216,5223,0,0,0,0,0,0,0,0,0,27142,0,0,1173,20198,0,0,0,0,0,56614,0,
-0,0,0,0,4612,0,0,0,0,0,0,0,0,0,0,11822,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,17769,7910,
-0,0,31880,0,0,6055,0,0,0,0,0,0,0,0,0,0,8970,0,0,0,0,0,0,0,0,0,0,0,16840,23879,0,
-0,11051,0,0,0,32552,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,20842,13701,0,0,0,37191,7373,
-10471,17482,25348,0,0,0,38502,0,0,0,0,0,0,0,0,0,21509,6058,0,0,0,0,0,0,3173,0,0,
-0,9543,0,0,0,0,0,0,17768,12708,0,0,0,0,0,37030,0,0,0,0,0,0,0,0,0,0,12748,48743,0
-,11718,0,0,25194,0,0,0,9033,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5028,0,30118,0,0,0,0,0,
-42759,0,0,3720,0,0,0,0,0,0,25190,0,0,0,0,0,0,0,0,0,0,5450,5125,0,58086,0,0,0,0,0
-,27716,0,0,0,0,0,0,0,0,0,22052,0,0,0,0,26249,0,15947,3460,0,0,0,35814,0,0,0,7813
-,19500,32167,0,18597,0,0,0,0,0,28644,0,0,0,60743,0,0,0,0,0,29636,0,0,0,0,0,0,0,0
-,0,0,0,0,0,17220,15885,9414,9642,0,0,0,593,0,0,24228,0,0,0,0,0,40422,0,26244,0,
-23109,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,64902,0,0,0,0,3979,60007,0,0,0,28199
-,0,0,0,43142,0,0,0,0,0,0,0,29158,0,30532,0,0,0,0,13256,0,0,0,0,16549,0,0,0,0,0,
-26116,0,0,0,0,0,0,0,0,22825,0,0,0,0,0,0,0,1065,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-,0,0,0,0,18985,4805,0,0,0,0,0,17702,0,0,0,0,0,0,0,0,0,0,3468,0,0,0,0,13447,0,0,0
-,0,0,0,0,0,0,0,0,56871,0,0,1776,15780,0,0,2603,0,10280,31366,0,0,0,0,0,0,0,0,0,0
-,0,0,0,0,11592,3591,0,2372,0,0,0,0,0,0,0,20004,0,0,0,0,0,0,12072,518,0,0,1960,
-8999,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7178,32999,0,0,0,0,0,0,1641,0,0,0,0,0,0,0,6764,
-9893,490,4005,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,25258,5541,0,14053,306,20743,0,0,
-9422,0,0,0,0,0,0,0,11977,260,0,35175,0,0,0,0,0,0,0,18405,0,0,0,16582,0,0,0,22470
-,0,0,0,0,0,0,2792,0,0,0,14026,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14858,3909,0,0,0
-,57671,0,0,0,0,0,0,15979,0,0,0,2794,15239,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,26884,
-9070,0,0,0,0,51846,0,0,0,0,0,0,0,0,0,0,0,0,0,0,19499,37127,0,0,0,0,0,0,0,0,0,0,0
-,0,0,0,0,0,0,0,0,0,0,0,0,19205,10350,11910,0,0,0,0,15083,23108,0,0,0,0,0,0,0,0,0
-,0,0,0,0,0,0,0,169,0,0,0,0,0,0,0,0,0,0,0,15274,41735,0,56774,0,0,2825,0,14025,
-389,0,0,0,0,0,0,0,0,21482,31910,0,0,0,0,0,0,0,0,0,0,0,0,0,0,20456,710,0,0,25032,
-21797,0,0,0,0,0,0,0,0,0,0,32427,21252,0,30150,0,43174,0,0,0,0,0,0,0,0,0,0,0,0,
-11403,0,0,1029,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6892,9252,0,63206,
-3496,14406,0,0,0,0,0,0,0,0,0,0,22568,0,0,21253,0,0,0,0,0,0,0,39623,0,0,10189,0,0
-,0,0,0,0,0,0,0,0,0,0,0,30729,59910,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3305,0,0,0,0,0,0,
-0,0,0,7660,24871,0,838,0,0,0,0,0,0,0,0,0,0,0,0,12013,13252,0,551,0,0,0,43207,0,
-30567,0,0,0,0,0,0,0,0,28394,30724,0,0,0,0,0,0,0,0,0,0,22665,22725,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,29414,0,0,0,0,16074,8966,245,1445,0,0,0,0,24872,0,0,0,0,
-13124,0,35527,0,0,0,0,0,0,13259,10917,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-25191,0,0,0,13956,0,0,0,0,0,0,0,54631,19625,12070,3083,0,0,0,0,14436,0,0,0,0,0,0
-,0,0,0,0,0,0,0,21766,0,15463,29322,0,0,0,0,0,0,29990,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-,0,0,0,23653,0,0,0,0,0,0,0,0,2643,0,0,21223,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,4114,0,0,0,0,0,0,0,0,34790,0,0,0,0,0,0,0,16103,0,0,0,0,0,0,297,3620,3338,
-10372,0,14727,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,29924,22473,13895,
-15529,32455,30378,13540,0,28807,0,0,0,0,0,0,0,64582,18380,0,0,0,0,0,0,0,0,0,0,0,
-0,38598,0,0,0,0,0,0,0,0,1236,0,0,0,0,0,0,0,0,0,0,0,0,0,0,32710,0,0,0,0,4590,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,64935,0,0,0,0,0,0,0,0,0,0,0,0,16744,0,0,
-0,0,0,0,20005,0,0,13608,1191,0,0,0,62183,0,0,0,0,0,24484,0,0,0,0,0,0,0,0,0,0,
-17643,0,0,0,0,0,0,0,0,0,0,0,0,5380,0,0,32328,0,0,63814,0,0,0,2919,0,0,0,0,17034,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,60295,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,7690,486,0,0,0,39270,0,49094,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12555,0,0,0,0,0,0,0,0
-,0,0,0,0,20967,17993,12647,0,0,0,16036,32616,0,0,0,0,16294,8555,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,35174,0,0,0,0,0,0,30346,0,0,0,0,0,0,0,
-14797,3652,0,0,8268,12934,0,54950,0,0,0,0,2632,33959,0,23175,0,0,0,0,0,36262,0,0
-,0,0,0,0,32684,26918,0,32676,0,0,0,0,0,0,0,0,0,0,15625,11943,1206,0,0,0,0,18052,
-0,0,0,0,0,16422,0,0,0,26404,0,0,28777,0,0,24902,0,0,408,45351,0,35719,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,3658,17446,0,165,0,0,0,0,0,0,0,6151,0,0,24424,0,0,0,0,0,0,0,
-24170,24293,0,0,0,0,0,0,0,0,0,11847,0,39591,0,0,0,0,0,0,9549,2788,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1010,0,0,0,0,0,0,26055,31724,0,24233,
-1828,0,0,0,0,0,0,0,0,0,17284,0,0,0,0,19464,0,0,0,0,0,0,0,0,32452,0,0,0,28871,0,0
-,0,0,17704,53383,0,0,0,0,0,0,0,0,0,17892,1938,0,0,0,0,0,16362,0,0,21605,0,0,5003
-,0,0,0,0,0,0,22693,0,22342,0,0,0,55846,0,0,0,0,0,0,0,0,0,22853,0,0,0,0,0,0,0,0,
-6600,263,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,24836,0,0,0,0,0,0,0,0,0,
-40711,0,0,0,0,0,33894,0,0,0,0,0,0,13000,0,0,0,0,0,0,0,0,0,0,30308,0,0,0,0,0,0,
-5386,0,0,0,0,0,0,27844,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,17740,0,0,0,0
-,25093,29064,0,0,0,0,0,0,0,12680,11462,0,0,0,0,0,0,0,0,84,7303,0,0,0,0,0,0,0,0,0
-,0,0,27044,457,0,22924,58246,19016,0,2606,45703,0,5157,0,25028,0,0,0,0,0,0,0,0,0
-,0,0,0,0,0,0,0,0,0,0,0,2065,0,0,0,0,0,31946,0,0,0,0,0,0,0,0,0,0,0,0,33382,0,
-47878,0,0,0,0,0,0,0,0,25004,0,0,0,0,0,0,0,26153,35654,0,58055,30668,0,0,0,0,
-25988,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4456,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-,0,0,7560,20583,0,0,0,0,0,0,0,0,0,37510,0,0,0,0,0,0,0,0,0,42822,0,0,0,0,0,0,0,0,
-0,0,0,1733,0,0,0,8196,0,0,11241,0,30572,60326,0,15013,0,0,0,40646,0,23812,0,
-10022,0,0,0,0,0,0,0,0,12874,31015,0,0,0,0,0,0,1608,0,0,0,0,18308,0,0,0,0,27114,0
-,0,0,0,0,0,0,7944,1382,0,11813,0,0,0,0,0,0,0,0,0,0,0,0,0,24517,0,11621,0,0,0,0,0
-,0,0,0,0,0,0,21702,0,0,13100,8262,2644,7973,0,0,0,0,0,0,0,0,0,0,0,0,1033,12581,0
-,25221,0,0,0,40998,16301,62983,0,0,0,0,1263,9318,0,0,0,18854,0,0,1741,33895,0,0,
-0,0,0,0,26377,0,0,0,0,0,0,0,0,0,0,32165,0,51143,0,0,0,0,0,29412,0,0,0,0,0,0,0,0,
-1674,4230,0,0,0,0,0,10502,0,0,0,0,5545,0,0,0,0,0,2099,45158,0,0,0,0,0,0,0,0,0,0,
-14157,0,26955,0,0,0,0,0,0,0,0,0,17096,0,0,0,0,0,0,0,0,0,0,0,0,0,27050,6726,0,0,0
-,0,0,0,0,0,28554,0,0,7142,0,0,0,0,16936,0,0,0,25833,0,4399,6980,0,46214,0,0,0,0,
-0,10630,21164,0,0,0,0,0,0,0,2446,48551,0,0,0,0,0,0,0,0,0,0,0,13381,0,0,0,0,0,0,0
-,0,15400,12135,0,0,0,0,0,4774,586,0,0,0,0,0,0,0,0,23751,9736,4548,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,25577,29607,6250,1637,0,0,0,0,
-22024,0,0,0,0,22308,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,37414,24044,0,0,0,14474,29735,
-0,7077,0,45990,0,0,0,0,30568,40039,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-6150,0,4228,0,0,0,0,0,27687,0,0,0,0,0,0,0,24548,21513,1350,0,0,0,33607,0,0,0,0,0
-,0,0,0,11784,1414,0,0,0,0,0,0,0,18244,940,0,0,0,0,0,0,7270,0,0,0,0,0,0,0,0,0,0,0
-,0,0,0,0,16709,0,0,0,0,0,0,0,48935,0,0,0,0,0,0,23660,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-,53350,0,0,0,0,0,0,4236,16358,0,4422,6665,32644,0,0,744,18084,0,11014,0,0,0,0,0,
-29508,0,0,0,0,0,0,0,7686,0,0,13289,5478,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,12872,0,0,24134,1005,22916,0,31429,23400,0,0,0,0,0,0,0,28424,0,0,0,
-25706,27109,0,0,26345,0,0,0,0,0,0,25126,0,0,88,0,0,0,0,0,0,0,17032,0,0,21799,0,0
-,10060,0,12296,21892,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,20777,14311,0,58182,
-32232,0,10282,0,2121,11527,0,0,0,12325,0,0,0,0,0,0,0,28804,2344,8133,0,0,0,0,
-21864,62695,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2771,0,0,
-23204,0,0,0,0,0,6278,0,0,0,0,0,26597,0,0,0,0,23144,0,0,0,0,0,31816,20070,0,0,0,0
-,0,0,0,0,0,0,24456,2118,0,0,0,0,6570,1156,0,0,0,0,0,0,0,30406,0,0,0,28388,3572,0
-,0,26599,12426,5286,0,0,0,0,0,4967,0,0,0,0,0,0,0,0,0,0,0,0,0,0,24970,24167,0,0,0
-,0,28745,4678,0,0,0,0,0,0,0,1444,236,0,0,0,0,0,0,0,0,19428,0,0,0,0,0,0,2092,0,0,
-0,0,0,0,0,0,0,2827,0,0,0,0,0,19881,19204,0,11749,0,0,0,0,0,0,0,17958,0,17894,0,
-18726,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9190,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-,0,0,0,0,0,0,0,21510,5033,0,0,0,0,22855,0,0,0,0,0,14598,0,29605,0,0,0,0,0,0,0,0,
-617,0,0,0,0,47142,0,0,0,0,0,0,0,0,0,0,3627,0,0,0,0,0,0,0,0,0,0,0,0,0,2225,14823,
-0,0,2637,6182,78,15078,0,0,0,0,20264,0,0,0,0,0,0,36743,4140,44551,17352,25703,0,
-0,0,0,0,0,0,0,0,0,0,0,14024,0,0,0,0,0,0,28004,0,0,0,0,0,7588,0,0,0,0,0,0,0,2087,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,18028,0,0,0,300,14212,0,0,1386,40327,0,0,0,0
-,0,0,31082,0,0,22374,0,0,0,0,0,35718,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-26532,7756,0,0,18982,0,0,0,0,0,0,0,0,6440,1159,7180,0,0,0,0,0,0,45766,0,57798,0,
-16740,0,0,6802,60454,0,0,0,26470,0,0,0,0,0,65382,4362,7750,0,0,0,0,0,0,9096,4743
-,334,0,0,0,0,0,0,39974,0,0,0,25828,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3027,0,0,
-0,15816,0,0,0,0,0,0,0,0,48327,0,0,0,0,0,0,0,0,0,0,16168,41799,0,0,24458,8581,0,0
-,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12292,0,0,0,0,0,0,0,0,0,0
-,0,0,0,0,0,0,0,54503,0,0,0,0,5097,30852,18664,0,0,0,0,0,0,16484,0,0,27337,0,0,0,
-0,0,0,0,0,0,0,0,0,35942,0,0,0,0,0,0,0,4356,0,0,0,0,0,57030,0,0,1417,41191,0,0,0,
-0,0,23429,0,0,0,0,10024,21735,0,0,10126,0,0,0,0,19046,0,0,0,0,0,0,24105,4710,0,0
-,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4394,0,0,0,0,13253,0,56391,0,0,0,0,0,0,0,0,0,0,
-0,19174,0,0,0,0,0,0,0,0,0,55974,0,0,0,52070,0,15620,0,0,0,0,0,2660,0,0,0,0,21644
-,0,0,52455,0,0,0,0,0,0,0,0,0,8902,0,0,0,0,0,0,3116,0,464,34726,0,0,0,0,0,0,25003
-,12423,0,27172,1896,7335,0,0,0,0,0,35686,0,0,0,0,3472,0,0,0,0,22406,0,0,0,0,0,0,
-0,0,0,45254,0,0,0,0,0,0,0,0,0,0,0,0,0,21124,23594,33127,0,0,0,0,0,0,16684,22087,
-0,0,0,0,0,0,0,0,0,0,0,0,8714,0,0,0,0,0,0,0,0,0,0,55814,0,0,0,0,0,0,4109,23460,0,
-0,8874,0,0,0,0,0,0,0,0,0,147,0,0,0,0,0,0,0,0,0,0,0,0,0,29960,63398,1302,0,0,0,0,
-0,0,0,0,24806,0,0,0,0,0,0,0,0,0,9799,0,0,0,0,0,0,0,31333,0,0,0,0,0,19557,0,0,0,0
-,0,5701,0,0,0,63014,0,0,0,0,0,0,0,21254,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12484,0,0,
-0,48326,0,0,0,0,0,0,0,0,0,0,0,15783,0,0,1202,0,0,0,0,23174,0,0,0,0,0,0,0,0,0,0,0
-,0,0,0,0,0,0,0,0,0,0,0,3086,49191,0,0,5387,15141,0,0,0,3365,0,0,0,0,20076,14021,
-0,0,0,0,0,0,0,0,0,0,376,40198,0,0,0,52039,0,24932,0,0,0,0,808,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,9860,0,0,0,0,0,23719,0,21476,0,0,0,0,20776,4807,0,0,3177,16678,0,0,110
-,10853,0,0,0,17382,0,0,0,0,0,0,0,0,0,43462,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-,0,0,0,7500,4966,0,0,0,0,0,0,0,52102,0,24516,0,0,0,0,0,0,0,0,0,0,0,0,0,26535,0,0
-,0,46247,0,0,0,15557,0,0,0,0,76,52327,0,0,0,0,17866,0,0,0,0,0,0,0,0,0,0,46758,0,
-0,0,0,0,19173,0,0,0,0,0,0,0,0,0,44038,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2985,0
-,0,0,0,0,0,14310,0,0,2125,45831,0,0,0,0,0,0,9838,0,13227,19492,0,0,0,29764,0,0,0
-,0,686,30053,0,0,0,0,0,30789,139,20837,0,0,0,0,502,18533,0,0,0,0,0,19111,0,0,0,0
-,0,31396,0,0,0,17444,0,0,0,0,0,0,0,49862,0,0,0,0,0,0,0,0,0,0,0,0,0,0,25610,550,0
-,0,561,0,29034,0,0,0,3528,0,0,0,1715,14661,18,63463,0,0,0,0,0,0,0,0,0,0,14186,0,
-0,0,0,0,0,0,0,0,0,0,29578,59014,0,39430,0,0,0,0,2250,16612,0,31780,0,0,0,0,0,0,
-462,16967,0,29029,0,0,0,0,0,23462,0,0,0,0,0,0,0,0,1768,0,6025,16998,1804,0,0,
-54182,0,0,0,0,0,0,0,0,14124,0,6154,29702,0,0,0,0,0,7716,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,48807,0,8292,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16389,5933,0,
-14857,51303,0,0,0,0,0,0,0,0,0,0,0,35623,9097,23047,0,0,23112,0,0,0,0,0,438,0,0,0
-,0,0,0,0,151,9254,1390,0,0,0,0,0,0,54215,0,0,0,0,6187,0,0,0,0,13095,0,0,0,0,0,0,
-0,0,0,0,0,0,9866,0,0,59622,0,0,0,0,0,0,0,0,0,25286,0,0,23848,32069,0,0,0,0,0,0,0
-,0,0,9255,2187,15270,437,0,0,0,0,0,0,0,0,0,0,19493,0,0,0,0,0,0,0,0,0,0,0,11748,0
-,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16902,0,0,0,0,0,0,0,0,0,22212,1865,17543,0,
-0,0,0,0,0,21996,0,0,0,0,55975,0,0,0,0,0,0,0,0,32138,21156,0,0,0,0,0,0,14249,0,0,
-0,2388,0,0,0,0,6823,0,0,0,0,0,0,0,0,0,0,0,0,0,26694,0,0,6059,53511,0,0,0,0,0,0,0
-,49542,6159,0,0,0,0,0,0,0,0,0,0,0,0,0,1036,24036,0,2501,0,0,0,0,0,0,17419,51271,
-3377,15142,0,0,0,0,0,0,5007,62374,0,56935,0,0,0,0,0,0,0,0,0,0,0,24422,0,0,0,0,0,
-0,0,0,942,0,0,0,0,0,0,0,0,0,0,28263,0,0,0,0,0,0,0,15622,0,19749,0,0,1611,0,22219
-,48583,25129,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,17476,0,0,0,0,0,0,0,0,0,0,
-721,0,0,0,0,32518,0,0,0,18469,0,0,0,0,0,0,5896,29927,3657,23046,0,0,3214,0,0,0,0
-,0,0,0,0,0,112,0,0,0,0,0,3048,455,0,31012,0,0,0,0,0,0,0,23270,0,32677,0,0,0,0,0,
-38086,0,0,0,0,0,0,0,0,0,0,0,0,0,4900,0,0,0,0,0,0,0,0,0,25541,0,18788,0,0,22248,
-1351,0,61734,4524,30629,0,14887,242,29063,0,0,14408,4741,0,0,0,37318,0,0,0,0,0,0
-,0,0,0,0,0,0,8106,0,32107,0,0,0,0,0,0,0,0,0,0,0,1481,0,0,28132,0,25798,0,59783,0
-,0,0,0,0,59078,0,0,0,23366,0,0,0,0,0,0,0,30887,0,0,0,0,16200,0,0,0,335,0,0,0,714
-,0,0,0,0,0,0,0,0,0,0,0,0,0,30730,9478,0,0,0,0,0,0,0,0,0,0,0,18790,0,0,0,0,663,0,
-0,0,1034,31431,0,0,0,0,0,0,0,0,0,0,30120,0,0,0,0,13925,0,0,0,0,0,0,2280,13414,0,
-0,0,0,0,0,22028,23687,3017,11047,0,0,21738,18630,0,0,0,0,0,0,0,30246,0,0,0,0,0,0
-,0,0,0,0,0,0,17257,0,21896,63783,0,0,0,21094,0,18662,0,25700,0,22533,0,0,0,0,0,
-6341,5800,11111,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15399,
-12970,6501,0,0,3179,26438,0,0,0,0,0,0,0,15750,0,13062,0,0,0,0,0,0,0,0,0,0,142,0,
-0,0,0,21284,11177,4391,0,0,0,0,19595,40647,0,0,0,0,0,11877,0,0,0,26439,0,0,0,0,
-695,49126,27467,11972,0,0,0,0,0,0,9961,0,0,0,31722,62982,0,0,0,0,15817,52710,0,0
-,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,24614,0,0,0,0,0,20550,0,0,5034,3942,0,0,0,
-45927,0,0,0,0,0,0,0,0,0,0,2548,0,0,0,0,0,0,45606,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-,0,0,0,0,0,0,3405,12582,15563,54087,0,0,0,0,0,0,0,0,0,0,0,0,24202,5893,0,0,0,
-44230,0,0,0,5605,0,47782,0,32230,0,0,0,0,0,0,0,0,0,0,0,7014,0,0,0,0,16488,3175,0
-,27237,0,0,0,0,0,40902,0,0,0,0,0,0,0,32004,31434,0,24392,0,0,0,0,0,0,0,0,0,0,0,0
-,0,0,0,0,0,29130,58214,0,0,0,0,0,0,29002,0,0,0,0,0,0,0,0,0,0,55366,0,0,0,0,0,0,0
-,0,0,0,0,37926,0,0,0,0,0,0,0,0,1290,0,0,0,4713,0,0,0,0,0,0,0,0,0,0,0,0,0,20812,0
-,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1803,966,0,17700,0,0,654,19109,0,51655,0,0,0,0,0,
-10470,1584,0,0,0,0,0,0,0,2506,0,0,25159,4303,0,0,0,395,15879,0,0,0,0,0,0,0,0,0,0
-,1352,6535,0,19652,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4722,7909,0,0,0,0
-,30152,0,0,64742,0,0,0,0,0,0,2153,9125,0,0,279,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-,0,0,0,41894,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-,0,0,0,0,1328,17030,0,0,0,0,0,0,0,54151,0,0,0,0,1775,54535,0,0,0,0,31624,0,0,0,
-7150,0,0,0,0,0,0,0,1840,35943,0,0,0,0,0,56455,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-64486,0,0,0,51174,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4134
-,0,0,0,0,0,0,0,0,0,0,0,17092,0,0,0,0,0,0,0,0,0,0,0,0,12,16134,19883,39943,10281,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,44711,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-14125,2407,0,0,0,0,0,0,0,0,0,0,26921,0,0,0,0,0,22188,0,20810,10053,0,0,0,0,0,0,0
-,0,0,0,0,0,0,0,0,0,0,0,0,0,0,29220,0,0,0,0,0,0,0,0,0,0,0,0,0,0,28170,0,15208,0,0
-,32517,5736,19271,3562,10534,0,0,0,59655,0,0,0,0,27084,60422,0,0,24969,0,0,0,
-2636,0,0,0,0,26277,0,0,0,0,0,0,0,0,0,0,0,30596,3594,0,0,0,8362,14565,0,0,0,0,0,0
-,10793,12326,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5906,59686,0,0,23081,517,0,15556,0,0,0,
-8486,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,19877
-,0,0,0,0,0,0,0,0,7497,0,0,26085,0,0,23784,63591,6568,6310,0,0,0,0,0,0,0,0,0,
-10054,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7018,14470,18858,0,5641,10660,0,0,0,0,0,0,0,
-35526,1515,0,0,0,0,0,0,0,0,0,0,0,27656,0,0,9606,0,39590,0,0,0,0,0,0,0,0,0,0,0,
-53926,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,232,4327,12649,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-,0,0,0,0,0,0,0,0,0,0,0,0,20199,0,0,0,0,0,0,26730,0,0,0,19400,14695,0,31334,0,0,0
-,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,19589,0,0,0,0,0,0,0,0,5064,11908,0,27333,0,
-0,0,0,0,0,0,47751,0,0,0,26662,0,0,0,0,0,0,0,55655,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,6245,0,0,0,0,0,0,0,0,23368,63911,0,0,0,0,0,0,0,0,1974,0,0,0,0,0,0,0,
-8520,24037,0,0,0,0,0,0,0,26279,0,0,0,22886,0,0,0,27782,0,30694,0,0,0,0,0,0,0,0,0
-,0,0,33703,0,0,0,30405,0,34598,0,51047,0,0,0,0,1908,0,0,0,0,0,0,0,0,0,0,1511,
-21897,0,0,0,0,0,0,51398,0,24870,0,32647,0,0,0,35015,0,0,0,0,0,0,0,11204,0,0,0,0,
-0,0,7758,57991,0,0,0,30949,0,0,22,15140,9162,0,0,0,0,0,0,25540,20136,7108,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16427,10789,9805,0,0,0,0,0,0,0,0,0,4680,0,0,52679,
-0,0,0,0,0,14884,0,0,0,16804,0,0,0,0,0,0,9578,5287,0,0,0,0,0,0,0,34054,0,0,0,0,0,
-19076,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7627,55719,0,39463,14446,58374,0,0,0,0,23465,
-15845,0,0,0,0,0,38534,0,0,0,17893,10922,0,7176,678,0,0,0,0,0,0,0,0,3113,46279,0,
-0,0,0,0,0,0,23334,0,0,18088,23268,0,62342,0,0,0,16613,0,0,0,0,0,0,0,0,0,38182,0,
-0,0,0,0,0,25292,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,10344,71,6446,0,0,1893,0,0,
-1106,0,28680,30756,0,41126,0,0,1492,0,15341,0,0,0,0,17575,0,21220,0,0,0,0,0,
-25060,2088,21828,0,0,0,0,0,358,0,0,0,0,0,16708,0,0,0,1668,0,0,0,0,0,12260,0,0,0,
-0,0,0,0,0,4078,0,0,0,0,0,12713,6215,0,0,20329,0,0,0,0,0,0,0,0,0,0,31204,0,0,0,0,
-0,0,0,0,0,0,3732,0,1646,0,0,27460,0,34406,17128,14341,0,0,0,0,0,19527,0,0,0,0,0,
-0,0,0,0,0,6120,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8551,21546,10212,3020,
-2951,0,17638,0,0,6985,44999,2218,8197,0,0,30472,63366,0,26660,0,0,0,0,0,0,0,0,0,
-0,0,0,1265,0,0,0,0,0,0,0,2610,0,0,0,11278,20295,0,0,0,0,0,19780,0,0,0,0,0,0,2353
-,10852,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5421,24292,0,0,0,0,0,0,0,0,0,0,0,0,0,34407,0,
-0,0,0,0,0,15432,20774,0,0,0,0,0,0,0,0,12360,10757,0,0,0,33126,0,0,0,0,0,0,0,0,0,
-0,0,29573,0,2343,0,0,0,0,0,63079,0,0,0,0,0,0,0,0,0,43015,0,16038,0,0,0,0,0,0,0,0
-,1480,25573,0,0,0,0,0,0,0,8839,0,0,0,0,0,0,0,24645,0,0,0,0,0,0,0,0,0,0,0,0,0,
-5063,0,0,0,0,0,45830,0,0,0,0,0,0,0,0,0,0,823,0,0,64039,0,0,0,0,0,0,0,0,0,0,0,0,0
-,15300,0,0,0,0,0,0,2924,46759,6760,19268,0,0,0,0,0,0,0,0,0,34182,0,0,3977,18149,
-0,0,0,32199,0,0,0,0,0,0,0,0,0,23524,25994,0,0,10343,0,0,0,9733,0,0,0,0,0,0,0,0,0
-,4740,0,0,0,0,0,0,0,0,0,16741,0,0,4626,23367,0,0,31400,0,0,3557,0,0,4234,0,0,0,0
-,0,0,28486,0,0,0,0,0,14213,0,57191,0,0,0,0,0,0,0,0,0,0,240,0,0,0,0,65318,29832,0
-,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,29989,0,31846,0,0,8170,0,0,4421,27626,30884,0
-,0,20204,0,0,0,0,44614,534,20868,0,0,0,0,0,0,0,0,0,0,0,0,0,28710,0,10277,0,0,0,0
-,0,29511,0,19813,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,27020,0,0,0,0,0,0,53094
-,0,35207,0,0,0,37542,0,61766,8584,8037,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12488
-,22757,0,0,0,0,0,0,0,0,0,0,0,0,0,23814,0,0,0,0,0,0,0,0,0,19973,0,0,0,63943,0,0,0
-,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,36006,0,0,0,19012,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-,0,0,0,0,8580,0,0,0,0,0,0,0,18021,0,0,0,0,0,0,0,0,80,1254,0,0,0,42630,0,0,0,0,0,
-0,0,16262,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2124,25479,0,0,0,0,16873,0,0,0,0,3142,
-0,0,18443,0,0,0,0,0,3917,0,8841,1190,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-,0,20645,0,0,0,0,0,0,0,0,0,0,0,9284,0,0,24394,41351,0,0,0,42087,0,62566,0,0,0,0,
-0,0,0,0,0,0,6728,4199,0,0,0,0,25515,0,1231,0,374,15623,0,29956,0,14118,0,0,0,0,0
-,19047,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,31718,0,0,0,0,0,0,0,0,0,0,0,20900,0,16743,0
-,0,0,28902,0,0,0,0,0,0,0,0,0,0,0,0,2578,0,0,0,0,0,0,0,0,0,13838,0,0,10052,0,0,0,
-0,7432,43783,17097,0,0,0,0,0,873,0,0,0,398,0,0,0,0,0,0,0,0,0,8459,23559,0,53030,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,35750,0,4071,0,0,0,38662,0,41414,0,0,0,0,11656,0,0
-,0,0,0,4011,42695,0,0,0,0,0,0,0,0,0,0,0,0,0,0,25353,0,0,0,0,0,0,0,27177,22372,0,
-0,0,0,0,30980,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,46278,3976,12711
-,0,0,0,0,0,0,0,0,0,0,0,20517,0,0,0,0,0,0,0,0,0,0,0,0,4072,11078,0,0,16553,2405,0
-,0,0,0,0,0,0,0,2670,0,0,0,0,0,0,32998,0,0,0,0,0,0,0,47046,0,30533,0,0,11050,9734
-,13129,0,0,0,0,23494,0,0,0,0,0,58310,0,0,0,57543,0,0,0,0,0,0,0,0,0,0,0,0,0,454,0
-,0,0,0,0,0,5163,59687,2220,0,0,0,0,0,0,29510,0,0,0,0,0,0,0,0,0,0,0,17316,0,20069
-,0,0,0,0,0,0,0,0,0,5319,0,0,0,0,0,0,0,0,0,27174,0,0,0,0,0,0,0,22949,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,19208,0,0,0,0,0,0,20933,0,0,6026,8742,0,0,0,17380,0,13127,2797,0
-,0,30116,0,0,5963,8004,0,57126,0,0,0,0,0,42854,14792,30759,0,24964,0,0,0,0,0,0,0
-,0,0,0,0,0,0,0,0,0,0,16933,0,0,0,0,0,0,15176,40839,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-788,30341,0,0,0,0,21036,24102,0,0,0,0,30123,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-22597,31531,26789,0,59559,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9352,29863,0,0,0,0,0,0,0,0
-,0,24551,0,0,0,0,0,0,0,20516,0,0,0,39462,3665,0,28265,0,8778,64262,0,57414,9132,
-0,0,18276,0,0,0,0,0,0,0,0,0,0,26344,30725,524,19751,0,13796,0,0,0,0,0,0,0,0,0,0,
-18155,0,12841,0,74,24998,13579,1061,0,64199,0,0,8776,0,0,60231,0,25412,0,0,0,
-59143,0,0,0,0,0,0,14344,1510,0,0,0,38374,0,0,0,0,0,0,0,0,13353,0,0,0,0,0,0,0,0,0
-,0,9446,0,0,0,0,0,0,0,32613,0,0,0,0,0,0,0,0,0,0,0,0,0,19844,0,0,0,0,14859,0,0,0,
-0,6662,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14154,0,29770,0,0,0,0,0,
-16520,2182,0,0,0,0,0,36102,3340,0,0,0,0,0,0,0,0,25189,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,15720,0,0,0,0,0,0,22758,0,0,304,0,3243,14117,0,0,0,0,0,0,0,0,0,0,5130,
-12679,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,21733,10441,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,36103,0,0,0,0,0,23590,0,57479,0,0,0,0,0,0,0,0,0,0,0,0,10824,
-18372,0,0,0,0,0,35078,15722,12967,0,0,0,0,0,34599,0,0,0,0,0,0,0,0,0,0,0,0,0,
-53639,0,38630,0,0,0,0,0,0,31017,11333,0,0,0,0,19144,0,9513,0,0,0,0,0,0,0,0,56711
-,24042,0,1197,0,0,58502,0,0,0,0,0,0,0,0,0,8230,6121,18628,0,0,0,0,0,0,25290,0,0,
-0,0,0,1514,0,0,0,0,0,0,0,14378,9798,32363,0,0,0,0,0,9577,0,0,0,0,0,0,26788,0,0,0
-,0,0,0,330,10533,0,0,0,0,0,42246,0,0,0,0,0,0,5074,21028,0,38119,0,0,0,0,0,0,248,
-0,31176,62054,0,53287,0,0,0,0,271,0,0,0,0,0,0,0,0,0,0,0,0,0,9224,2117,0,0,0,0,
-15818,5607,0,52582,0,0,0,0,0,0,0,0,18248,24005,23018,0,0,0,0,0,0,0,0,0,0,0,0,0,
-427,0,0,39910,0,0,7080,11399,0,0,0,0,0,0,0,0,0,0,22220,57894,0,0,0,0,0,0,0,13156
-,0,1413,1007,0,0,0,0,21415,0,21543,0,0,0,0,0,0,0,0,0,41702,22538,9573,0,0,0,8806
-,0,0,6920,56359,0,0,0,0,0,0,0,0,0,0,0,42215,0,0,13708,0,0,0,0,0,0,0,0,0,0,16453,
-0,0,0,0,0,0,1582,1764,3282,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11653,0,0,0,0,12139,0,
-29482,31076,1673,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,40262,0,0,0,33862,0
-,0,0,0,0,20996,0,0,0,0,0,4615,0,0,0,0,0,0,0,0,0,0,0,43943,333,19367,0,0,0,0,0,0,
-0,26821,0,32389,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4936,11687,0,0,0,0,0,0,0,0,0,10885,0
-,0,0,0,0,25926,0,0,0,0,0,0,15851,0,0,0,0,0,0,0,0,0,8360,0,17130,7942,0,11460,0,0
-,0,0,0,0,0,0,0,0,0,0,0,0,0,18150,14248,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-22310,0,0,0,42758,0,0,0,0,0,0,0,0,29354,5574,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-,0,0,0,0,0,0,0,0,0,0,0,31109,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11236,0,0,0,0,0,0,0,0
-,0,0,0,0,0,9156,0,0,1801,14023,0,0,0,0,0,62406,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-23620,0,0,0,0,0,0,0,0,0,0,31018,65510,0,0,0,0,0,0,0,26182,0,0,0,0,0,0,0,27717,0,
-0,0,0,0,0,0,46950,0,0,0,0,0,0,0,0,0,0,0,0,0,31108,0,11366,0,0,0,3717,0,0,0,0,0,0
-,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8552,6054,3339,0,0,0,0,51622,0,
-0,0,0,0,0,0,3718,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,28358,0,2756,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,1462,0,0,27622,0,0,0,0,0,0,0,62502,14410,56743,0,0,0,0,0,0,0,0,0
-,0,0,0,0,0,0,0,0,0,0,0,0,0,12206,0,0,0,0,0,0,0,0,0,0,0,0,36550,0,38054,0,0,0,
-21221,0,0,0,0,0,0,0,27077,0,0,16906,0,12587,12101,0,0,0,0,0,0,10414,28775,21769,
-60167,0,56646,0,0,0,0,0,20740,0,0,0,0,0,0,5931,5351,0,65478,0,0,0,0,0,0,7977,
-52647,0,4868,0,0,0,55463,0,0,0,0,0,32197,0,0,0,0,0,13445,0,0,0,26631,0,0,0,0,0,
-11237,0,0,0,0,209,1285,0,0,1928,0,0,0,0,43334,23849,23172,0,0,0,0,0,0,0,0,24712,
-62439,8811,3463,20457,0,0,0,0,0,0,0,0,0,16008,56263,0,0,0,0,0,0,0,0,0,0,0,60358,
-22761,6565,0,0,30888,27686,0,0,0,17093,0,0,0,0,22121,0,0,0,7593,14182,0,28103,0,
-0,0,0,0,45126,0,0,0,0,0,0,0,0,0,0,0,0,0,31844,0,0,0,0,0,0,0,0,0,0,0,0,0,18500,0,
-0,0,0,28202,0,0,0,0,0,0,0,0,26308,0,29541,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-29572,0,0,0,21285,0,0,0,0,0,60839,0,0,0,0,0,30407,15949,2981,0,0,0,46439,0,0,0,0
-,0,23911,26505,25222,12811,5895,0,6343,0,0,0,0,0,0,0,0,0,0,0,31815,0,0,0,0,0,0,0
-,0,19688,10245,0,0,0,31301,26985,28964,0,0,0,0,0,0,0,0,27208,31172,0,0,0,0,216,0
-,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16292,0,0,0,0,0,8743,0,0,0,0,0,0,0,0,
-0,0,0,0,0,6438,0,0,0,33319,0,0,0,33286,0,0,0,0,0,0,0,0,0,22181,7499,24774,0,
-10756,0,44775,724,0,25768,25669,24873,5349,25257,0,0,54566,0,0,0,0,0,0,0,0,0,0,0
-,327,439,357,0,0,6536,8452,0,0,1802,0,0,61350,0,15045,0,0,0,0,0,0,0,0,0,0,0,
-38343,0,0,0,0,0,0,0,0,0,0,32491,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-22885,0,0,32073,0,0,0,9546,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,27748,0,0,23176,0,0,0
-,0,0,0,0,0,0,0,0,0,24583,0,0,0,0,0,34118,0,0,0,0,2158,0,5586,30340,0,0,0,0,0,0,0
-,0,0,0,0,0,0,24452,0,0,0,0,2409,4390,0,24196,0,0,0,0,0,0,32264,26948,20587,0,0,0
-,2155,0,0,0,0,0,0,0,0,0,0,0,4328,26276,0,0,0,0,0,0,0,0,23564,0,12458,11367,0,0,
-25162,0,0,0,0,0,0,65414,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,32966,0,0,0,
-34662,0,0,0,0,0,39238,0,0,0,0,11400,10214,266,12452,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,15173,0,0,0,13668,0,13222,0,23364,0,0,0,0,0,11941,0,0,0,0,0,0,0,0,0,
-25575,0,0,0,57383,0,0,0,10308,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,2865,9287,75,0,0,0,0,0,0,0,0,0,0,21508,22380,59526,0,0,0,23589,0,0,0,51590
-,0,0,0,0,0,0,0,0,0,0,0,4645,3980,28295,0,0,0,0,0,12388,0,0,0,0,0,0,0,0,0,0,0,
-21734,0,17607,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,41767,0,0,0,0,0,0,0,18436,0,0,0,0,0,
-0,0,21958,0,19430,0,0,1204,0,0,0,0,0,0,0,0,0,3240,55239,0,0,0,0,0,30660,0,0,0,
-28901,0,0,0,0,4716,0,0,0,0,0,0,0,0,0,0,0,11754,0,0,0,0,22086,0,22564,8749,0,0,
-28391,0,0,0,0,0,0,0,0,0,0,0,2886,0,0,0,0,0,0,0,29062,0,0,0,0,0,0,0,40358,0,0,
-15916,39526,0,13735,0,0,0,0,28938,0,407,4006,0,0,0,26916,0,0,0,0,0,27526,30280,0
-,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,24586,0,24649,5126,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8684,0,0,0,0,0,0,0,23019,0,22377,18599,0
-,0,0,0,0,0,0,0,0,0,27593,9735,0,20196,0,0,0,0,28168,48423,0,0,0,0,0,31399,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,13892,0,0,0,0,0,17606,0,0,15242,29767,26378,17701,0,0,
-14472,0,4840,0,0,0,0,0,0,24708,0,9349,4330,0,0,0,0,0,0,0,16137,0,0,34854,0,0,0,0
-,0,0,0,0,0,0,0,25063,0,0,0,0,0,0,6603,12583,0,0,0,0,0,0,0,0,7433,29188,0,0,0,0,0
-,31270,0,0,22920,3143,0,0,0,0,0,23461,0,0,0,0,0,0,0,0,618,0,0,0,0,21381,0,11524,
-0,0,0,0,0,0,21004,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,312,23239,0,0,0,0,0,0,0,0,0,0,0,
-0,2313,0,0,40614,0,0,14825,0,0,0,0,0,0,46535,0,41190,7853,0,31656,0,0,0,0,0,0,0,
-0,0,3433,5255,0,0,0,0,0,0,0,33958,0,0,0,0,72,15493,0,0,0,0,0,0,0,36070,0,0,0,0,0
-,0,0,14724,0,0,0,0,0,29828,0,0,0,0,0,0,0,18822,20008,0,0,0,0,2438,2952,0,0,0,0,0
-,0,0,0,0,0,0,0,0,3342,0,0,0,0,0,0,0,0,0,0,0,0,0,0,24420,0,19908,0,0,0,8101,0,
-17479,0,0,3530,0,8202,29319,0,0,1132,6789,0,0,23881,0,0,0,4810,0,0,46918,0,0,0,
-41574,0,0,0,0,0,0,0,0,0,48582,0,0,0,0,0,0,0,0,0,0,0,0,0,39334,0,0,0,26117,0,0,0,
-0,0,0,5100,0,0,0,0,0,23496,27813,4045,54918,0,0,0,0,0,0,6473,7428,0,0,0,0,6792,0
-,0,0,0,0,3560,32103,0,0,0,0,0,0,0,0,0,0,0,54790,0,0,6926,0,0,0,0,16518,0,0,0,0,0
-,20806,0,0,0,0,1841,3174,0,0,0,0,9612,18374,0,0,0,0,32744,0,0,9671,0,59879,0,
-23300,8073,0,0,14758,0,0,0,10342,0,0,0,0,0,0,24808,14759,0,0,0,0,0,0,5515,0,0,
-14852,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2354,23271,0,32740,0,0,0,0,0,0,0,0
-,0,0,18472,0,0,0,0,0,0,0,0,33190,0,0,0,0,0,0,0,0,8972,21669,0,0,0,0,0,0,0,0,0,0,
-0,25574,0,0,0,0,5096,0,14283,55367,0,0,0,0,0,0,0,0,0,12644,0,0,0,0,4651,0,0,0,0,
-0,0,0,661,0,0,13638,19466,0,0,0,0,0,31273,0,8010,0,0,0,0,0,3211,0,0,0,0,63430,0,
-0,0,0,0,15237,0,0,0,0,0,0,19018,2437,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14312,0
-,0,0,0,16836,0,0,471,35975,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-,6023,0,0,0,0,0,0,0,0,11593,9639,0,0,0,55783,0,5700,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,27908,0,26598,0,0,6667,6470,0,0,0,0,0,0,0,
-62534,0,0,0,0,16522,27911,0,0,10025,7172,0,0,779,0,360,17477,0,0,0,61991,7752,
-7717,1494,0,0,0,26569,40742,0,0,0,0,0,0,0,26406,10474,32196,0,0,0,0,0,50567,
-16521,11716,0,0,0,0,0,55558,0,0,0,0,0,0,0,0,0,0,0,61926,0,26436,0,0,0,0,4459,
-10598,0,0,0,0,0,0,0,0,0,0,0,9223,0,29318,0,0,0,0,0,60423,0,0,0,0,0,0,0,47078,0,
-50246,0,12612,0,0,0,0,0,0,0,61799,0,55015,0,21060,7309,0,0,0,0,0,11976,0,0,0,0,
-23527,0,0,0,0,0,0,10347,15942,0,34023,0,0,0,0,4969,0,0,0,0,0,0,0,0,28997,0,0,0,0
-,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,36454,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-3466,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,19716,
-28872,0,0,0,0,0,22152,0,0,0,0,0,0,26342,0,0,0,9764,0,0,0,0,0,0,0,21798,0,0,0,0,
-13,6853,32136,0,0,0,0,0,0,0,750,0,0,54502,0,0,0,0,0,0,0,0,0,46183,0,0,625,22854,
-0,0,0,0,2061,23588,0,0,11049,56262,0,0,18538,1509,0,0,17258,4453,0,0,0,0,12429,0
-,0,0,0,8102,0,0,0,0,0,0,8074,0,23852,0,0,0,0,0,0,0,0,0,0,0,16136,3428,0,27876,0,
-0,0,7332,0,0,0,0,0,28900,0,0,2284,0,0,17573,201,1508,0,0,0,0,0,0,0,0,0,31365,
-27688,22565,0,0,0,5159,0,0,0,0,4584,42599,0,0,0,44422,1068,23173,0,0,0,613,0,0,0
-,12645,0,0,0,0,0,27076,6732,0,0,0,3913,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-,0,0,0,0,0,0,0,0,0,0,0,22244,29992,15911,0,0,0,0,0,22982,0,0,0,0,0,0,0,50598,0,0
-,0,0,0,0,5161,1574,0,0,0,0,0,0,0,0,0,19108,0,0,0,35014,0,0,0,25956,29067,0,0,0,0
-,0,0,0,0,0,0,47079,0,0,0,0,0,0,0,0,0,0,1356,61927,0,0,0,64455,2122,64231,0,0,
-18763,0,0,0,0,0,0,0,0,0,907,34471,0,0,0,39078,0,0,1995,0,0,0,0,0,0,0,0,0,0,56518
-,0,0,0,0,0,0,0,0,0,0,0,0,822,0,15978,44423,0,0,3112,325,0,0,0,0,0,15397,0,0,0,0,
-0,0,0,0,0,0,1193,4294,4968,15559,0,46150,0,0,0,0,0,18917,0,0,0,0,0,0,9928,37543,
-0,0,0,0,13097,36999,0,0,0,15430,0,0,8424,29639,0,0,0,0,0,0,0,0,0,0,0,0,0,25734,0
-,0,0,0,0,0,0,0,0,0,0,0,0,40487,0,13284,0,11141,0,0,0,32388,0,0,0,0,0,0,0,0,0,0,0
-,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5298,57702,0,0,0,0,0,0,0,13060,0,0,0,0,0,0,
-8233,42278,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,36422,0,0,0,7972,0,0,0,
-18437,0,0,0,0,7406,0,0,0,9225,0,0,0,0,0,0,0,0,0,13865,47591,18220,53703,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2796,0,0,0,0,0,24940,17223,0,0,0
-,13221,0,0,0,0,0,0,0,0,0,0,15848,0,0,0,0,0,6122,1735,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-,0,0,0,0,16968,18151,0,0,0,0,0,47494,0,0,0,0,0,0,26089,19494,0,0,0,0,0,15494,0,0
-,0,0,0,0,0,0,0,0,28809,0,0,0,0,42727,0,55174,0,0,0,0,0,0,0,0,0,0,0,20485,0,0,0,0
-,0,0,0,0,0,0,0,58598,0,0,0,0,0,0,0,0,0,0,0,0,0,15172,0,0,0,0,0,0,0,0,0,35302,0,
-48135,20972,33094,0,0,0,0,0,9765,0,0,0,0,0,0,0,0,0,39559,0,0,13736,6950,0,0,0,0,
-23658,8903,0,0,0,0,0,0,0,22662,0,0,0,0,0,58886,7468,0,0,0,0,0,0,0,0,64550,0,0,0,
-0,0,47622,0,0,0,50886,0,0,0,0,0,57606,912,0,0,0,0,0,0,0,0,0,1449,0,1169,0,718,
-46151,12104,0,0,0,0,0,0,48230,0,0,0,0,0,0,0,0,0,0,1259,0,0,33734,23208,62567,0,
-65158,0,0,0,0,0,0,0,0,0,0,28684,59878,0,0,0,0,0,0,0,0,0,0,25769,0,0,0,0,65479,0,
-0,0,0,555,22789,0,19748,1769,10246,8680,0,0,0,0,0,0,0,0,0,14250,0,5899,3303,0,0,
-0,0,0,0,0,0,21097,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,21638,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,10795,0,0,0,16204,0,0,0,0,0,26986,2469,0,14660,0,0,0,0,0,45447,
-12234,3494,4555,10566,0,0,0,0,0,0,0,0,0,0,0,0,2801,0,0,0,15755,0,0,0,0,0,0,0,0,0
-,0,0,0,0,0,0,0,0,0,39654,0,0,0,0,0,0,6763,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-33574,0,10279,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,63527,0,0,3912,0,0,7492,0,0,0,35142,
-0,0,0,0,0,0,17576,8103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16713,4198,0,0,4782,0,0,0
-,0,0,0,0,0,0,0,0,0,0,0,16228,0,0,0,0,25961,20166,0,0,0,10980,0,0,0,0,0,14340,
-18922,14567,0,44199,0,0,0,0,0,0,0,18406,0,0,0,0,0,37606,0,0,0,0,0,0,0,0,0,20902,
-0,0,0,56358,0,38342,0,0,0,0,9514,36071,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,21700,0,0,
-5266,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1134,0,1453,0,0,0,0,0,3882,0,0,0,
-0,0,0,0,0,4004,0,0,0,51910,0,0,0,0,0,23076,4648,0,0,0,31051,25351,0,0,0,22884,0,
-0,0,0,0,63975,0,0,2376,16997,0,0,2096,0,0,0,3373,7046,0,0,0,0,0,0,0,30726,0,0,0,
-0,20,0,13707,614,0,0,12840,3079,0,0,0,0,0,51046,3729,0,32680,0,0,0,0,0,24008,
-62759,0,0,4745,0,0,0,0,0,0,0,0,0,0,0,0,0,2414,0,0,44262,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,24937,0,0,0,0,0,0,0,0,19140,0,13575,0,0,0,0,0,0,0,39110,0,0,0,28036,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,4261,0,0,0,0,5992,0,264,0,0,0,0,0,0,0,13739,0,21928,0,
-0,0,0,0,0,0,0,0,0,0,4232,15110,0,0,0,0,0,0,0,0,0,30022,0,0,27977,0,0,0,0,0,24776
-,0,0,0,0,0,2962,0,0,0,0,0,0,26564,22441,0,0,0,0,0,13640,11205,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,19305,1894,0,0,0,0,0,0,0,0,0,0,9389,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14119,
-5224,135,0,0,0,0,0,0,0,0,0,25796,0,0,0,0,0,0,7470,0,0,0,0,63815,0,55654,0,0,
-12584,0,1524,33223,0,0,0,9895,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11624,
-0,0,0,5614,0,0,0,0,0,0,0,21320,0,0,53607,0,51206,0,0,0,25863,0,0,0,0,0,0,0,0,0,0
-,0,8964,1740,0,0,0,0,0,0,0,0,13476,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7975,0,
-0,3306,8134,0,8389,48,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,25766,0,0,0,0,0,0,0,0,0,
-52166,0,0,0,0,0,0,0,0,0,0,0,0,0,21477,31112,31652,0,0,0,0,0,0,0,28452,0,0,0,
-44231,0,0,0,0,0,0,0,24805,0,0,0,0,0,0,0,0,0,0,12428,6471,0,0,0,0,525,17926,0,0,0
-,26919,0,0,18120,0,0,0,30024,0,0,0,0,0,0,0,0,0,0,29189,0,0,0,43559,0,0,0,0,0,0,
-19787,7557,0,59334,0,0,10184,6085,0,44039,0,0,0,0,0,0,0,11175,0,0,0,0,30440,
-63110,0,0,0,0,0,0,11017,0,0,0,0,0,0,0,0,27204,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,29126,0,0,0,0,0,0,0,0,0,0,0,0,0,0,622,0,5226,2727,0,15588,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4650,0,2675,0,0,32420,0,0,0,61511,0,0,
-5419,17829,2123,0,0,0,0,0,0,0,0,0,0,0,0,0,0,38183,2640,0,11274,14533,1842,0,0,
-42663,12681,3430,0,11845,0,0,0,0,0,0,0,0,0,6533,0,0,0,0,0,54598,0,0,0,0,0,0,0,0,
-0,0,0,0,12616,38535,0,0,0,0,0,32229,0,0,0,54279,0,48614,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,31401,0,0,0,0,34310,0,0,0,22788,0,52134,0,0,0,0,0,0,0,23302,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,40678,0,0,0,51463,535,0,0,0,0,15525,0,0,0,0,0,0,4904,869,0
-,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,63718,0,0,0,0,0,0,0,0,1678,0,692,0,0,0,
-0,0,0,0,0,0,26216,0,0,0,0,0,29355,0,0,0,0,25095,0,0,0,0,4335,0,0,0,0,0,14538,0,0
-,0,0,0,0,0,0,0,27273,55014,0,0,0,0,0,27271,0,0,0,0,0,30468,0,0,0,0,18186,0,0,0,0
-,0,14345,0,0,0,2152,0,0,0,0,0,0,0,0,0,0,0,0,0,0,58438,21034,0,23339,21318,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,21412,0,0,0,0,0,0,0,12869,0,0,4875,0,0,0,0,29191,0,0,0,0
-,0,0,1640,10247,0,14244,0,0,0,0,9867,0,0,0,0,0,12363,0,0,7653,0,0,4168,2663,0,
-4580,0,11143,0,0,0,0,0,0,0,30662,0,0,0,0,0,6724,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,13764,0,0,0,0,0,0,0,0,0,0,0,0,234,6821,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-,0,0,0,0,0,0,0,0,0,25639,0,0,0,0,0,0,0,0,0,29958,0,3461,0,0,0,0,0,0,0,0,0,28324,
-18795,7013,12746,11655,0,37287,0,0,10953,7718,9705,0,0,0,0,0,0,0,0,0,0,46534,0,0
-,0,0,0,0,0,0,0,0,8137,17988,0,25156,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,41415,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15784,6918,0,0,0,0,7019,10919,0,0,0,
-0,0,0,0,0,0,0,4171,55495,4940,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,22440,19333,0,0,
-28136,0,6249,21317,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,53414,0,0,0,57318,0,0,0
-,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,39303,0,0,0,0,0,19940,0,0,0,0,0,0,0,25543,0,0,0
-,0,0,0,0,0,0,0,0,0,2698,3911,0,0,0,26790,0,0,0,0,0,0,32424,0,0,18470,0,0,0,14726
-,29834,0,0,0,0,0,0,0,0,0,0,0,1000,4197,0,0,0,19366,0,0,0,39878,0,0,0,0,2185,8901
-,5288,9829,25000,0,0,0,0,0,0,1062,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,35622,0,
-0,23048,62503,6506,0,0,0,0,0,0,0,13609,10438,0,0,0,0,0,0,0,0,0,0,7723,42119,0,0,
-0,0,0,13317,0,0,0,41606,0,27111,0,0,21194,11461,0,0,0,0,26856,58342,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,20940,48710,0,0,0,0,0,0,5227,0,0,0,0,0,10061,31300,0,0,0,19236,0
-,0,0,0,0,30277,13896,0,0,0,12876,13159,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,428,
-46951,13134,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15462,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,21668,0,0,0,0,0,0,0,0,0,0,0,0,2249,0,0,0,0,44967,0,0,0,0
-,0,0,3465,0,0,0,0,0,0,0,0,0,0,0,0,0,0,24868,0,0,0,0,0,23909,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,2190,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16164,0,
-10437,0,0,5263,20102,20938,0,0,0,1192,1030,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-,0,21385,4870,0,0,0,0,0,0,0,0,0,0,0,18596,0,0,0,0,1422,4038,2858,0,0,0,0,0,0,0,0
-,48998,0,0,0,0,0,0,0,0,6508,37350,0,0,0,0,0,0,0,0,17001,39431,0,0,0,0,0,30182,0,
-21445,7403,28164,0,51750,0,0,0,62631,0,0,0,0,0,0,0,31206,0,0,0,0,0,0,0,0,0,0,0,
-7751,0,0,0,0,0,0,0,0,0,13477,0,0,456,26693,0,0,0,0,0,0,0,0,0,0,0,0,14890,0,0,0,0
-,0,26697,22022,13225,27364,0,0,0,18884,0,0,0,0,0,0,0,0,3659,0,0,0,0,0,0,0,0,0,0,
-0,1448,5413,0,0,0,0,0,0,0,0,0,0,0,6340,0,0,18091,18725,0,0,0,0,0,0,0,0,0,0,0,0,0
-,22118,0,0,0,18981,0,0,0,0,0,0,0,0,0,29223,3724,0,0,0,0,43526,0,0,0,25668,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,21545,9862,0,22692,32201,60646,0,7300,0,0,
-0,58887,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,19460,0,0,0,0,0,0,0,0,0,50342,0,
-65255,4360,17286,0,0,0,0,0,0,0,28708,0,0,30025,60102,0,0,0,0,0,0,0,0,0,47014,0,
-31973,0,9572,0,0,0,0,0,0,0,18501,0,0,0,0,0,14597,0,0,0,53735,5228,22183,0,0,0,0,
-0,0,1554,24164,0,0,0,0,0,0,0,0,0,0,0,0,10827,0,0,0,0,34918,0,0,0,0,22252,0,0,
-46855,0,0,0,0,0,31207,0,0,10733,0,0,63334,0,0,0,0,8616,50119,20169,12678,0,0,0,0
-,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,58087,20298,5,0,0,30920,0,0,0,0,0,0,0,296,13190,0
-,30663,0,0,18536,12228,0,6788,0,0,0,0,30890,21796,0,0,526,0,0,0,0,0,0,0,0,0,0,0,
-0,20965,0,0,0,0,2161,0,0,0,0,0,0,24038,0,0,0,0,13544,7398,0,0,32522,9605,0,0,0,0
-,3208,7590,0,0,0,43846,0,0,0,38663,0,0,0,0,0,39014,4142,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,6373,0,0,13676,0,0,0,0,30374,21288,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,22791,0,0,0,0,0,37958,0,0,0,0,0,0,0,0,0,0,9452,
-9990,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4841,0,0,0,0,18820,152,0,0,0,0,0,13260,3334,0,0
-,24234,8422,0,17957,0,0,0,10244,0,0,0,0,0,0,0,0,0,0,0,7204,0,0,0,0,1201,26151,0,
-31173,0,0,0,0,0,0,0,0,0,0,0,0,0,64838,4203,7525,521,0,18888,37031,0,0,0,0,0,0,0,
-0,7082,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4490,12487,0,0,0,0,0,0,0,36615,0,0,
-0,14854,0,0,0,0,0,0,0,0,0,0,0,0,6539,13029,9704,38983,0,0,0,0,168,10405,0,0,0,0,
-394,25607,0,57063,0,0,0,0,0,0,0,0,0,0,16141,19878,0,0,0,0,0,0,0,0,0,29446,0,
-12036,0,0,0,0,0,6982,18572,0,24584,14535,0,0,0,0,0,0,0,0,0,0,16,0,21642,0,0,0,0,
-0,0,5254,0,0,0,0,0,0,0,0,1622,0,0,0,0,0,0,0,0,0,0,0,0,0,3853,9126,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,7241,10982,0,0,0,0,0,0,0,0,0,0,0,0,0,0,950,0,0,57990,0,0,277,0
-,0,0,694,36007,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,42470,0,0,0,0,18409,
-51142,0,0,0,0,0,0,0,0,0,28646,0,0,0,30693,0,0,0,0,0,56295,5544,0,0,0,0,8518,8366
-,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,45670,0,0,
-9608,33062,0,0,0,0,0,0,0,0,0,0,0,18694,0,0,0,0,1672,23493,0,0,6955,7655,0,36134,
-0,0,0,0,0,0,0,0,23432,647,0,0,0,0,0,0,0,0,0,0,0,13382,0,0,0,19621,0,0,0,0,0,0,0,
-0,0,20228,0,0,2728,31495,0,0,0,0,29096,22213,235,35495,0,0,0,0,0,0,0,0,0,0,0,0,0
-,0,0,5348,0,0,0,0,8968,1989,0,0,1066,0,0,11492,5965,31367,0,0,0,0,0,0,0,0,0,0,0,
-18727,0,0,0,6757,0,0,10765,4646,0,36166,0,27943,0,0,26888,8420,0,0,0,0,0,0,0,0,0
-,29316,0,0,0,0,0,0,0,0,0,0,4975,0,0,0,14762,3111,0,0,0,0,0,43399,0,0,0,0,0,0,0,
-18980,0,0,0,0,0,44550,0,0,0,0,4051,0,0,0,0,37734,0,0,0,0,0,5188,0,0,0,0,0,24486,
-0,5989,0,41159,0,0,0,0,0,0,0,0,0,20326,0,0,747,6884,0,0,0,41798,0,0,3117,22919,0
-,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,21032,0,0,0,0,0,0,0,0,9574,0,0,0,0,0,0,
-4302,0,0,0,0,0,0,0,0,0,0,0,21068,34630,0,0,0,0,0,64071,0,0,0,0,0,0,26667,7943,0,
-0,0,0,0,52934,0,0,17002,0,0,0,0,0,0,20294,0,0,0,0,0,0,0,0,0,27301,18347,7974,0,0
-,0,0,0,0,0,0,16874,0,0,0,0,45414,0,0,0,0,0,0,648,1575,0,0,0,31749,0,0,0,23301,0,
-0,0,0,0,0,0,0,0,0,0,0,15912,50535,0,0,0,0,1993,8582,0,0,0,0,0,0,0,38438,0,0,0,0,
-0,0,0,0,0,0,0,0,15850,6183,0,0,0,0,3402,0,0,27494,0,0,749,0,0,0,0,0,0,0,26025,
-29606,0,0,7144,19622,30504,0,0,0,0,0,0,0,0,21316,0,0,0,0,0,0,0,0,0,21444,0,0,
-1289,6919,0,0,0,0,0,0,8299,0,0,0,14090,35655,0,0,0,0,0,0,0,0,2377,15206,0,0,6028
-,4452,0,25508,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,50310,0,0,0,0,1269,0,0,0,0,0,0,0,0,0
-,0,0,0,51014,0,0,0,0,0,0,0,9286,0,7429,0,0,28393,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-,0,0,0,16680,452,0,0,0,0,0,23718,0,0,0,31750,0,0,0,0,0,0,0,0,3568,0,0,13604,0,0,
-0,0,0,25255,0,0,0,50982,0,56582,0,0,7467,0,0,0,0,30181,0,0,0,0,0,0,0,30564,7208,
-7845,0,0,0,0,0,0,7726,0,0,0,0,62182,0,0,0,41094,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,22695,0,0,0,0,0,0,17736,0,0,0,0,0,0,0,0,50054,0,0,0,14180,0,0,0,0,
-0,0,8974,0,0,0,0,0,0,0,0,23332,0,0,0,11140,0,0,0,0,0,0,0,24262,27145,9540,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,26537,45510,6062,3879,0,0,20233,25991,0,0,17803,0,0,0,0,0,
-13962,5508,16971,27013,7437,31494,0,0,0,0,0,0,0,0,0,0,4714,0,0,0,0,0,0,0,0,17189
-,0,0,0,0,0,27492,0,0,26953,0,0,0,0,0,0,0,0,0,0,41319,0,0,0,0,0,0,0,0,0,0,0,47430
-,19596,12549,0,0,0,8390,1006,0,0,0,0,0,0,0,0,0,0,24100,17577,4,0,0,0,0,0,22277,0
-,0,0,0,0,0,0,26692,0,0,0,0,0,24676,0,0,0,0,0,0,0,0,0,0,0,0,0,29477,0,0,0,21573,0
-,0,0,0,0,0,0,0,0,0,9864,14214,0,0,0,0,0,0,25771,5766,0,0,8909,8679,0,0,6861,
-16166,0,38887,0,0,0,0,0,0,12392,8678,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-52646,1354,2950,0,14692,0,0,10572,49830,0,0,0,0,0,0,0,0,3626,582,0,0,0,55750,0,0
-,0,30885,0,0,0,0,0,0,0,0,0,0,0,0,0,5830,0,0,2090,0,0,0,0,0,0,0,0,0,0,0,0,31142,0
-,0,0,0,0,10503,0,0,18825,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-57158,0,0,30792,63526,0,0,0,9863,16267,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-,0,0,0,0,0,0,0,0,0,0,18824,0,0,0,0,0,0,19653,25388,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9292,0,0,0,0,0,0,0,0,0,0,36358,0,0,0,0,0,0,0,0,
-0,0,25480,23015,0,0,10440,6725,0,0,0,22436,24265,15109,0,0,0,62311,8906,34534,0,
-0,0,0,0,0,15913,1319,0,0,20296,1477,30760,0,25928,16772,0,0,1069,0,0,0,0,0,0,0,0
-,0,0,0,0,17029,0,31909,0,0,0,0,0,0,0,0,0,0,0,41638,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-,0,0,0,0,41542,0,21478,0,0,0,9796,0,0,0,0,0,0,0,0,0,0,22187,58343,0,0,0,24295,0,
-0,0,0,0,61831,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2833,5829,0,0,0,62855,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,16676,0,0,0,0,0,0,13577,27431,0,0,0,0,21480,10501,0,16932,
-0,0,0,0,0,22918,0,48294,2574,2150,0,0,0,0,1897,4518,0,0,0,0,0,0,25064,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,47942,0,0,0,0,10990,13767,
-25705,37863,21672,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,43430,1712,0,0,0,0,
-18886,0,0,0,0,0,0,0,0,0,0,0,0,0,10535,0,0,0,0,0,0,0,15012,0,0,0,0,0,0,0,0,0,0,
-14734,0,0,55782,0,0,30824,10886,0,0,0,0,0,51302,0,0,8012,0,0,0,0,0,20680,6981,0,
-57415,11,0,0,18277,0,14564,0,0,0,32390,0,0,0,0,0,0,0,0,0,0,0,0,19113,5158,0,
-11172,0,16774,0,0,0,0,0,0,0,0,0,0,0,0,10315,13830,0,0,0,0,0,0,10410,7141,0,0,0,0
-,0,18116,0,0,0,44615,15403,13958,0,1540,14632,19525,24201,19781,0,0,0,24165,0,
-38951,0,0,0,0,0,6308,0,0,0,0,0,0,0,0,0,0,0,0,0,0,17416,15749,3438,13255,0,0,0,0,
-0,0,0,0,0,0,0,32228,0,0,0,0,176,0,0,50566,0,0,0,0,0,0,0,0,0,0,0,0,0,21540,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,58982,0,0,0,0,0,0,0,0,0,5284,0,0,0,0,0,0,25897,28326,0,0
-,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15945,0,0,0,9804,293,0,0,0,0,0,0,0,13988,23082,4677
-,0,0,0,0,0,0,0,0,0,0,0,5670,0,0,0,0,0,0,0,44070,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,6405,0,30692,0,0,0,61702,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-,45926,0,15398,0,0,0,0,0,0,4554,2692,0,0,0,0,0,32485,0,0,0,10084,0,0,0,0,0,0,
-24297,0,0,0,0,0,0,0,0,22790,0,0,0,55110,0,0,0,0,0,0,0,0,0,0,0,0,7112,0,31530,
-45255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,40743,17226,22599,0,
-0,0,0,0,0,0,0,3695,0,0,0,0,0,0,0,0,0,0,56999,0,0,0,0,0,13799,3114,21287,1353,
-7591,0,0,0,8455,0,0,6824,0,0,0,0,0,0,0,14569,0,0,0,29000,0,0,0,0,0,0,0,0,0,0,0,0
-,0,0,0,19979,0,18376,0,0,0,0,0,0,0,0,0,0,0,0,11332,0,0,0,49863,0,0,0,0,0,0,0,0,0
-,0,0,0,0,0,2191,7527,23148,58022,0,0,0,30631,0,26565,0,0,0,0,0,0,0,0,0,0,0,0,754
-,0,0,15877,0,0,0,0,0,0,0,17510,7657,2821,0,0,0,0,0,0,0,0,0,41927,0,0,0,0,0,0,0,0
-,2569,34439,0,0,3790,0,0,0,15339,8775,0,0,0,0,0,0,0,0,0,0,0,15908,0,0,21419,8359
-,0,0,0,0,424,0,0,0,0,0,0,25318,8008,20551,0,0,0,45735,30058,30372,0,0,0,0,0,0,0,
-0,0,0,0,0,0,26180,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,31432,10567,0,0,0,0,
-17450,0,0,0,0,0,0,30310,0,38022,0,0,0,0,0,28932,0,0,0,0,0,43910,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,22180,12075,0,0,0,0,0,0,0,0,0,0,0,0,0,0,22247,0,0,22826,
-12359,0,0,0,0,4105,50407,0,0,0,0,0,0,13581,28583,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-,0,0,0,0,28936,0,0,0,0,0,17673,10310,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,905,57862,
-1580,0,0,0,0,58630,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,13479,0,0,
-14153,13286,0,0,9259,0,0,0,0,0,6606,3524,0,0,0,0,0,6567,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,631,49255,0,0,0,0,0,42886,0,38215,0,0,0,0,0,0,0,0,17580,
-0,0,0,0,0,0,0,0,55046,0,0,0,0,0,0,0,0,0,10213,0,0,0,0,3604,37767,0,0,0,0,0,0,0,0
-,0,0,0,30950,0,0,0,0,0,0,0,0,0,62087,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,23528,0
-,0,0,0,0,0,0,0,0,28715,4229,0,0,0,0,0,0,0,0,0,0,1226,26820,0,0,0,12133,6984,261,
-21130,32548,0,0,0,0,0,0,3565,12390,20713,28071,0,0,1706,25287,0,0,0,0,0,0,0,0,
-14670,0,0,0,0,0,0,30534,0,0,0,12615,0,43750,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,28228,
-0,0,0,0,0,0,0,45095,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1224,3975,10954,6375,0,0,0,0
-,0,0,0,0,0,0,23180,20100,0,0,0,0,25736,8519,0,0,0,0,0,6663,0,2534,0,0,0,0,0,0,0,
-0,23720,0,0,0,0,0,0,0,0,0,0,19398,0,47814,26281,49702,0,0,4332,12965,0,0,5704,
-3206,0,0,0,0,0,0,0,0,0,0,0,0,0,15396,0,0,0,44102,0,0,0,0,0,0,0,0,0,0,0,0,0,25317
-,1064,39271,27433,0,14952,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14308,0,0,0,0,0,0,2763
-,4100,0,0,0,0,0,0,18792,0,0,0,22154,32583,0,6244,0,0,0,0,0,0,0,49478,0,0,0,0,0,0
-,0,0,0,0,0,21894,0,0,11048,0,0,0,0,0,0,11685,0,53862,0,0,15114,0,13870,0,0,0,0,0
-,0,0,919,0,0,0,31916,0,22570,101,0,0,0,0,0,0,0,0,0,7333,0,0,0,0,3272,0,0,0,0,
-27718,32712,0,0,0,0,0,0,0,0,0,1782,0,3688,0,0,0,0,29862,0,0,0,0,0,0,0,22469,0,0,
-0,0,0,0,0,55302,850,15492,0,0,0,5927,19786,13350,0,25702,0,0,0,0,0,0,0,0,0,0,0,
-40390,0,0,0,0,0,0,0,0,0,0,0,0,0,20260,0,0,0,0,0,0,0,0,0,0,0,0,0,15335,8394,0,0,0
-,0,0,0,26566,0,0,0,0,843,2245,0,0,0,0,0,0,0,0,6959,0,20488,1638,0,0,11533,50759,
-0,0,0,0,0,20871,0,0,0,0,0,24519,0,0,0,0,9544,23591,0,0,0,0,0,0,0,0,0,0,20969,
-7109,29001,0,0,32422,31720,64294,0,0,0,0,16106,0,0,0,6930,4933,0,0,0,22917,0,
-27015,0,0,0,0,19880,8070,0,0,0,0,23945,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-3310,0,87,0,0,0,0,0,0,0,0,0,0,0,0,0,0,18439,0,0,0,20742,0,0,0,10597,0,0,0,0,0,0,
-0,0,0,0,0,0,20236,0,0,0,16584,3429,0,0,0,0,0,0,0,0,27241,0,0,0,0,16132,0,0,0,0,0
-,0,0,0,0,0,0,0,244,28261,0,0,0,0,0,0,0,29509,0,0,0,0,0,0,0,0,2921,31781,0,0,0,0,
-0,0,6408,4196,344,0,0,0,0,0,0,0,0,0,0,0,0,0,11689,45863,0,0,0,0,906,3301,0,0,
-25544,32421,0,0,0,0,0,0,0,0,1260,61607,0,27302,0,0,8682,16614,0,0,0,0,10830,0,0,
-9604,15049,13413,0,0,0,0,0,0,26761,0,0,0,0,0,0,61990,0,0,0,0,0,12580,0,0,11432,0
-,0,0,0,0,22507,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12389,0,0,0,0,0,0,
-2408,22661,14507,43239,0,9700,0,0,24714,0,0,0,0,0,0,0,0,23972,0,0,0,0,0,0,0,0,0,
-0,0,0,0,34086,0,0,22955,7238,0,0,0,0,0,28485,13806,20038,0,0,0,0,22602,0,0,0,
-1645,22340,0,0,0,0,0,0,0,0,0,0,0,26502,0,0,554,0,0,0,0,61735,0,0,0,0,0,0,0,0,0,0
-,0,0,0,0,0,0,0,2694,0,0,0,0,0,0,0,0,0,0,0,0,0,0,883,27879,15948,0,3242,57382,0,0
-,0,0,0,0,13930,0,0,0,0,0,30922,0,4137,52615,0,0,0,0,0,0,0,0,0,0,0,0,0,31911,
-16072,0,0,0,0,0,0,0,0,0,0,0,0,26340,0,61671,0,0,0,0,3145,56199,0,0,0,0,0,0,0,0,0
-,0,0,0,280,0,5131,33479,0,15751,0,0,0,0,0,0,4136,1446,0,0,0,0,0,0,11304,17863,0,
-0,0,0,0,25125,0,0,0,36646,6057,0,0,0,855,11301,0,0,0,0,0,64774,0,0,0,19397,0,0,0
-,0,0,0,0,0,0,0,0,0,0,0,0,0,1040,27367,0,0,0,0,0,0,0,0,0,0,0,0,0,64358,0,0,178,
-132,0,0,14763,24455,0,0,0,46374,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,46246,0,0,0,37382,
-0,0,0,7462,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8166,0,0,6921,0,0,0,9163,0,0,0,119,
-0,0,0,23146,17156,0,0,0,0,0,9127,0,0,0,17927,0,0,0,0,0,22084,0,0,0,0,0,39879,0,0
-,2035,0,1067,0,0,0,0,0,16652,59591,0,0,0,0,0,0,0,0,0,0,0,0,20171,0,0,0,0,17733,0
-,0,0,0,0,32037,0,0,0,0,0,14277,0,0,0,0,0,0,0,42022,0,0,26793,20358,0,0,0,0,0,0,0
-,0,0,0,0,0,0,0,0,0,8907,0,0,0,0,0,0,0,0,27780,0,0,0,0,32330,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,39399,0,9732,0,16199,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-,0,0,0,0,854,0,2984,45063,25418,26980,22539,0,9133,3653,15528,28743,4649,0,616,
-65127,0,0,0,61863,0,0,0,0,0,0,0,55303,0,0,0,0,0,0,0,0,23880,0,0,0,0,0,0,0,31848,
-62854,0,0,0,0,0,0,0,0,0,0,0,49606,0,27974,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,32580,0,0,0,26052,4043,0,0,40454,0,0,26056,30565,0,0,0,0,0,0,0,31398,0,0,0,0
-,0,0,0,0,29288,1797,0,0,3220,0,0,0,0,0,0,0,0,0,20427,0,0,0,0,23621,0,0,0,0,0,0,0
-,0,0,24261,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,35591,0,0,6862,0,0,0,4265,0,6285,
-5383,0,0,0,0,0,36870,0,39847,0,0,17224,5414,27882,58118,0,0,13224,4262,0,0,0,
-31302,0,0,1388,2982,11881,0,0,0,0,0,0,16837,809,0,24140,10724,0,0,0,0,5835,0,0,0
-,0,0,0,0,0,0,0,0,1256,19237,0,0,0,0,0,0,0,5796,11848,0,0,52870,11464,0,0,0,0,0,0
-,0,0,0,5645,9158,0,25223,0,0,0,0,0,39142,24968,8135,32104,28678,0,0,0,46311,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,23820,0,0,0,0,0,4050,0,1323,25220,0,0,0,20133,0,
-0,0,0,0,0,0,0,0,0,0,9381,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-,0,0,0,0,0,0,0,13444,1198,60806,0,0,0,0,17356,50247,30632,0,0,0,0,0,0,0,11944,
-999,0,0,0,0,4010,10404,0,0,0,0,0,0,10346,0,0,49510,0,0,0,0,0,0,0,0,0,0,0,0,0,
-38919,0,0,0,0,0,0,6351,60966,20137,487,0,0,0,0,0,0,655,2406,17387,43303,0,0,0,
-17063,0,0,213,0,0,0,0,0,0,17221,0,0,0,0,0,0,0,0,0,0,0,10820,0,0,0,0,369,6,0,0,
-9098,21093,0,31653,0,0,0,0,0,0,0,0,0,27143,0,0,16234,0,0,0,0,0,0,0,0,6020,31723,
-28293,0,0,0,0,1936,30695,0,0,0,0,0,52902,0,0,29512,10791,0,20420,0,0,16010,0,0,0
-,0,0,0,0,0,0,0,0,5324,0,0,0,0,0,0,0,0,0,0,0,0,13383,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,24328,0,0,0,0,0,0,40870,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,24648,0,0,0,0,0,0,0,7786,2852,0,0,0,0,0,0,0,0,0,44678,0,17925,0,0,105,53062,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,18762,0,0,40679,0,0,0,16165,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,20390,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,62310,1322,
-14247,0,0,0,0,0,0,0,0,1832,6052,0,0,11882,0,0,0,0,17668,0,28262,0,29542,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,28007,0,0,0,57223,
-1585,0,0,0,0,0,0,0,0,0,0,0,21162,0,0,62247,0,0,0,0,0,25414,0,0,0,0,0,0,0,0,0,0,0
-,0,0,0,0,0,0,0,0,0,0,0,0,36326,0,0,0,23845,0,0,0,0,0,0,0,2693,0,0,0,0,0,0,0,
-13125,0,31236,0,0,0,0,0,22502,0,0,0,0,0,0,5994,10309,0,0,0,7269,0,0,0,0,17929,0,
-1011,44647,0,0,0,0,0,14919,0,0,0,0,20586,5350,0,0,0,45702,0,13189,0,0,0,0,0,0,0,
-0,0,35782,17992,0,0,0,0,0,8203,0,0,0,0,0,0,56678,0,0,0,0,0,38087,4233,0,2127,0,0
-,0,0,0,0,0,0,0,0,10148,0,0,0,2021,0,0,0,0,0,0,0,47206,0,0,0,0,0,0,0,9220,0,0,0,0
-,19465,0,0,0,0,0,0,0,0,39206,0,38055,0,0,0,0,0,0,0,46982,0,0,0,0,0,22054,3850,0,
-0,0,0,0,0,0,55,0,10542,0,0,0,0,7239,0,0,0,0,0,59367,0,0,14761,0,0,0,0,43079,0,0,
-0,0,0,2726,0,0,9582,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,37478,0,
-0,0,31364,0,0,0,0,0,0,0,0,20393,8933,0,0,0,0,0,9380,0,0,0,0,16905,549,0,0,0,0,
-182,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1558,0,0,0,0,0,0,0,19242,0
-,0,0,0,0,0,24933,0,6276,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,42310,23595,
-24068,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,13191,6158,2567,0,0,268,47047,0,0,0,0,0,0,0,
-0,0,27940,0,0,0,0,0,26726,0,0,0,0,8200,1222,31562,0,0,0,0,0,0,0,0,0,2922,8231,
-8904,29157,0,0,0,0,0,0,0,0,23976,4836,0,0,0,0,0,0,0,0,0,0,0,0,31658,0,0,31685,0,
-0,2889,6213,0,0,0,0,0,13605,0,0,0,0,0,24772,0,0,0,0,0,0,0,0,0,0,20684,26468,
-24075,0,0,0,21193,0,715,679,0,0,0,0,0,0,3050,7654,0,0,0,13798,0,0,0,0,15,27973,0
-,0,8491,2086,0,0,0,43206,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,60391,0,0,0,0,0,0
-,0,25892,0,22276,0,34374,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,20165,0,0,25672,0
-,0,0,1811,24839,0,31044,0,0,25513,0,0,0,0,0,12810,0,0,62438,0,0,1325,0,364,3782,
-0,0,0,0,0,0,0,0,8042,19687,0,0,0,33415,0,0,0,0,0,0,0,0,0,0,0,7205,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,11844,0,0,0,0,3341,1543,6698,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-,0,0,0,0,0,0,0,0,0,0,0,0,29766,0,0,0,0,0,0,0,0,0,0,0,41158,0,24294,0,3844,12329,
-0,0,0,13738,0,0,0,0,0,0,0,0,26245,0,0,0,0,0,0,6378,0,343,4838,0,0,0,24358,11688,
-0,0,0,0,0,0,0,0,0,1489,34759,0,0,0,0,363,51974,1878,11013,0,0,32265,59782,0,0,0,
-28421,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,22756,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14089,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,29257,61222,0,30661,0,28327,0,0,0,0,0,0,0,0,0,0,0,0,0,
-27108,8843,0,9673,2084,0,0,0,16327,0,48455,0,0,0,0,0,0,4876,9316,0,0,0,0,0,0,0,0
-,0,0,0,0,9035,18852,0,0,0,0,0,0,0,0,0,0,0,0,0,4164,0,0,14827,1349,0,0,0,0,0,
-11909,0,0,0,0,0,0,0,0,0,21765,0,0,0,0,0,0,0,0,31272,63910,0,0,0,25924,0,0,0,0,0,
-0,0,0,0,44487,0,0,0,20612,0,0,27754,31428,0,0,0,0,0,0,0,17287,0,3943,0,0,0,63302
-,0,0,0,0,25256,19942,0,55142,0,39046,0,0,0,0,0,0,0,15367,0,0,0,0,0,0,0,0,0,0,0,
-28422,0,0,0,0,0,0,0,0,0,0,0,0,9576,63847,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-,0,0,25226,5734,0,0,0,0,0,0,13801,4997,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-,0,0,0,0,0,0,43942,1270,2566,6284,0,0,16230,0,0,0,20678,0,0,0,0,0,38855,0,0,0,0,
-29643,0,0,0,41,3655,0,0,0,0,0,14276,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,15686,0,0,0,15718,0,50694,0,0,16232,8007,0,0,0,5060,
-329,11591,51,0,0,0,0,0,0,0,0,0,13065,7302,27530,15366,0,24934,0,0,0,17828,0,0,
-4552,6311,0,0,0,0,0,0,0,0,0,0,0,47686,368,12103,10122,33830,0,0,599,18534,9579,
-49479,0,5668,0,0,0,0,0,0,0,0,0,13157,0,0,0,0,23274,14055,0,0,0,0,0,48903,0,0,0,0
-,0,0,1871,0,15434,0,0,0,16174,62470,0,0,0,0,0,0,0,0,0,0,0,7749,0,0,0,0,0,0,0,
-30501,0,0,0,0,25675,0,0,0,0,0,0,0,0,0,0,9285,0,0,25323,1669,0,0,0,0,0,0,0,0,0,0,
-0,3588,0,0,0,0,0,32902,0,0,4426,0,0,0,0,57959,0,0,0,0,0,0,29898,58278,0,0,0,0,
-11880,1220,0,0,0,41479,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,23141,0,0,0,0,0,0,0,0,0,0,0
-,0,0,42566,0,0,0,0,0,0,0,40167,9484,3493,0,0,0,0,0,21126,0,0,0,0,8649,18918,0,0,
-0,0,0,0,0,34886,2601,0,0,0,0,12518,0,0,0,0,7976,10311,0,0,0,0,0,0,0,45190,0,0,0,
-0,0,0,0,0,0,0,16842,20229,0,0,0,0,0,0,7528,4614,0,0,0,0,0,30086,0,0,0,1671,0,0,0
-,0,0,0,0,0,0,0,0,0,0,0,9896,6277,0,0,0,0,0,61191,0,41287,0,21956,0,0,20010,0,0,0
-,0,0,0,0,0,0,0,0,13195,0,0,0,0,1381,0,0,0,0,365,30951,24268,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,7044,0,0,0,0,0,0,0,0,0,0,27944,359,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-,0,0,28487,0,0,77,0,0,0,0,0,0,0,0,56775,12586,8421,0,0,0,0,0,0,26185,14599,0,0,
-8040,5702,12585,3109,0,0,0,0,0,21574,5388,0,0,0,0,0,0,0,5106,52454,0,0,0,0,0,0,0
-,0,1907,29895,0,6116,0,0,0,0,11081,5285,0,28069,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4104
-,0,0,0,0,0,0,41511,0,0,0,0,0,0,5262,0,0,0,503,4231,7720,34343,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7304,10374,1718,0,0,29127,0,0,0,0,0,0,0,0,23497,
-22567,6952,2340,0,0,0,0,0,0,0,0,20360,12453,0,45094,0,0,0,0,0,28582,0,0,0,0,680,
-0,0,0,0,0,0,0,0,0,0,0,0,0,23084,0,0,0,30696,0,0,0,0,45862,0,0,0,0,0,0,0,0,0,0,0,
-0,5580,6053,0,0,0,0,0,0,0,0,0,0,712,70,0,0,26091,11335,0,0,0,0,13612,0,13160,
-1926,435,51559,0,0,0,0,0,0,0,0,0,0,0,0,0,47302,19083,0,0,12742,0,1607,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,6155,37095,0,0,0,0,0,18948,7146,0,0,0,0,0,0,0,7848,
-2055,0,0,0,0,8910,0,19336,0,0,48070,8490,0,0,0,0,0,0,0,9932,56423,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,4133,0,0,0,0,0,0,0,0,0,43398,0,0,0,0,0,0,0,0,16173,0,0,0,0,0
-,0,0,32011,0,0,30918,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,26854,0,0,0,0,0,0,0,0,0,0,0,0
-,0,20389,0,0,0,0,0,0,0,0,0,0,0,0,0,0,18889,0,0,0,0,8965,0,0,0,44358,0,0,0,8997,0
-,34055,0,0,0,0,0,29350,0,0,501,17767,0,0,32457,60262,0,0,0,30886,0,0,3757,1063,0
-,0,0,25637,0,0,0,0,0,28068,0,26374,0,0,0,0,0,0,0,0,0,0,0,11684,0,0,0,0,0,0,24779
-,229,0,13766,0,0,7402,11525,0,0,0,0,0,0,0,0,26313,23686,0,0,29736,47527,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,27268,0,0,0,0,553,0,0,0,0,0,0,32038,0,0,0,0,1135,
-26596,0,0,12300,14631,0,0,0,43238,0,871,0,0,31496,0,8457,17669,0,12836,0,0,0,
-22726,0,38758,0,0,375,6564,0,0,0,0,0,0,0,0,0,0,0,0,170,18535,0,22948,0,0,32360,0
-,0,0,0,0,0,0,0,0,0,0,0,0,0,25764,0,0,0,0,0,0,0,0,0,0,0,15652,0,0,0,32774,0,0,0,0
-,0,0,0,0,0,28551,0,0,0,0,0,0,0,0,0,0,0,0,15145,0,0,0,21100,27654,0,0,0,0,0,0,
-4874,26215,0,1639,0,0,0,0,0,0,0,0,0,0,4169,0,0,0,0,0,7336,0,0,0,0,21572,0,0,0,0,
-0,0,0,0,0,24644,1675,2533,0,0,0,53318,0,13094,0,0,0,0,0,0,0,6246,0,22020,0,0,0,0
-,0,0,0,0,0,0,0,28453,5576,5124,0,0,0,0,0,0,0,0,0,0,0,0,0,27910,0,29382,18216,
-8583,0,0,0,39174,0,43558,0,0,0,0,0,0,0,0,0,11973,0,0,0,0,0,23397,0,0,0,0,6091,0,
-0,0,0,0,0,0,6474,16197,14217,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-,0,0,0,26728,0,567,48839,0,0,0,0,0,15271,0,0,31818,43974,2450,0,0,0,0,0,0,0,
-11368,9191,0,44454,0,0,0,0,0,0,14568,12293,0,0,0,8453,0,0,0,0,0,0,0,0,0,0,0,0,
-32040,0,0,0,0,0,0,0,0,0,0,0,0,902,0,0,0,27236,5612,11495,0,0,0,0,0,0,0,0,9194,
-23684,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,27430,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-26217,44870,0,0,0,0,0,0,5581,7173,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-52775,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,20968,18340,0,0,0,0,0,0,0,0,4107,11239
-,0,0,0,0,0,0,0,0,0,0,0,29381,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,21990,0,0,0,0
-,0,0,0,0,0,48806,0,0,0,32292,0,0,0,0,0,0,0,10884,0,0,0,0,0,0,0,0,0,0,27562,0,
-5643,0,0,0,0,0,0,0,0,0,3089,31525,0,19684,0,0,0,0,0,0,0,61415,0,0,0,0,0,36198,0,
-0,0,0,0,0,0,7908,0,0,0,0,872,743,0,0,0,0,0,0,0,0,1229,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,32484,0,0,0,0,0,34822,0,0,0,0,0,50726,0,0,0,0,7274,0,0,0,15304,
-11526,0,0,0,3047,0,0,0,0,0,0,22376,0,0,0,846,0,0,0,0,35815,0,0,0,23652,0,0,0,0,0
-,0,0,0,0,0,0,0,0,0,0,0,23721,2148,0,0,0,0,0,0,14856,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,1358,0,3082,0,0,0,848,10949,0,0,0,0,0,0,6504,0,0,14372,0,0,0,0,0,0
-,0,0,0,0,8201,9958,0,0,0,0,0,0,24266,0,0,0,0,0,0,0,0,26469,0,0,0,0,18604,2053,0,
-33511,0,0,0,0,0,9222,0,0,0,0,0,44006,0,0,0,0,0,0,0,0,0,0,0,41895,0,0,0,0,0,0,0,0
-,12044,390,0,0,0,0,0,4935,0,48646,0,56102,3052,16070,0,0,0,0,0,0,0,8612,9320,
-38311,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,500,0,0,0,0,42918,0,
-32550,0,0,0,0,0,0,0,0,27434,57926,17064,0,0,46502,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,26760,6756,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,624,0,5000,0,0,0,0,32293,0,
-0,0,0,0,0,0,0,0,0,0,0,0,26246,0,0,0,0,0,0,0,0,23,7301,0,0,0,36199,0,40838,0,0,0,
-0,0,0,0,0,0,0,0,0,27178,57350,0,0,12457,9317,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16810,0,0,0,14510,0,0,0,0,21319,0,0,0,13508,17,
-11365,0,0,0,0,5291,0,8329,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,27685,0,0,0,0,0,0,0,
-52006,0,0,0,7493,0,44263,0,0,0,0,0,0,0,0,9800,0,0,0,25676,61478,0,0,0,0,0,0,5773
-,0,0,0,0,41991,26057,0,0,0,0,0,0,0,0,0,0,22629,0,0,0,47783,362,1959,23468,0,0,0,
-10921,0,0,0,3150,0,0,0,0,0,0,0,0,0,0,0,32456,0,0,0,0,0,0,0,4559,3270,0,0,983,0,0
-,26343,0,33446,0,0,0,61767,0,48390,0,0,0,0,0,0,0,2790,0,39782,7849,0,0,0,0,0,0,0
-,1544,2183,0,0,0,0,0,0,0,0,4040,2471,20009,30020,0,0,11242,0,0,0,5578,53382,0,
-22631,0,0,0,0,0,0,0,0,0,0,0,12901,0,0,0,0,0,0,0,0,0,0,0,0,215,0,0,9030,0,0,0,0,0
-,0,265,1412,0,0,11626,3687,0,0,0,0,0,0,0,0,0,0,0,0,17449,24359,0,0,26729,40134,0
-,0,0,0,29768,61958,0,0,0,0,0,0,0,0,20908,0,0,0,0,0,11016,0,0,47462,21547,5926,0,
-0,14728,2983,24104,15301,0,0,0,0,0,32645,0,0,0,0,0,0,0,3300,0,0,0,15972,0,0,0,0,
-0,0,6634,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3076,0,30983,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,106,0,0,0,0,12775,0,0,0,0,7177,18022,0,0,0,0,0,22534,0,0,0,0,0,0,0,0,0,0,0,
-49894,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,27560,0,0,0,0,30278,10668,23877,0,
-0,0,0,0,0,0,29124,0,0,0,0,0,0,0,0,0,0,0,0,0,20870,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,44582,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,48454,0,0,0,0,6442,0,16330,22951,0,0
-,16904,0,0,0,0,644,0,0,0,40038,0,0,0,37222,0,0,0,9830,0,0,0,0,0,34919,0,0,0,0,0,
-0,0,0,0,0,0,13733,0,0,0,28196,0,0,0,0,0,19876,0,0,0,0,0,0,0,23558,0,11142,0,
-27781,0,0,0,0,13864,0,0,0,24682,47847,0,0,0,0,6890,0,0,0,0,0,3981,0,0,0,0,0,0,0,
-0,0,0,0,1772,0,0,0,0,0,0,0,3603,1991,0,27396,8652,0,18312,0,0,0,0,30054,0,0,0,0,
-0,0,0,11270,0,0,0,0,0,0,0,0,0,20708,0,0,0,0,338,0,0,0,0,0,0,0,7050,0,0,0,0,0,0,0
-,0,0,0,0,0,0,14862,0,0,3492,0,0,0,55878,0,0,0,16486,0,0,0,18119,0,0,0,0,0,0,2154
-,1284,0,0,23113,31751,0,0,29547,0,0,0,0,0,0,36647,0,0,0,0,0,0,0,0,0,0,0,18183,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,7913,0,0,0,0,20644,0,0,10508,0,0,0,0,0,0,0,0,0,0,0,0,
-43622,0,0,0,0,0,40966,0,0,0,0,0,0,0,0,0,0,246,901,11529,5191,0,0,0,0,0,0,0,0,0,0
-,0,24454,0,0,26665,27590,0,27397,0,0,0,0,0,0,23562,2949,0,0,30344,62214,0,47334,
-2026,18885,0,0,0,48678,0,0,0,22694,0,0,1972,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,15465,0,0,0,0,38822,0,0,0,0,945,32708,0,54791,0,14918,0,0,0,0,0,0,
-0,0,0,0,0,0,0,23396,0,0,0,0,0,0,5486,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7722,0,0,
-0,0,0,0,0,0,0,0,0,30856,64166,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,35206,0,0,0,30535,0,
-0,0,0,0,0,0,0,0,62663,0,0,1096,17574,31820,0,0,14375,4402,27207,0,0,21448,4676,0
-,0,0,0,16585,5094,0,0,0,0,0,0,0,0,4845,0,0,32870,0,0,0,0,0,0,0,0,0,0,31466,0,0,0
-,0,31783,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4522,16039,0,0,0,0,0,0,0,0,
-0,14469,0,0,0,0,0,0,0,0,0,0,7464,4773,0,0,0,0,0,0,0,0,18636,0,0,0,25640,0,0,0,0,
-0,0,2244,0,0,11818,0,1168,0,0,0,0,0,0,0,6540,23079,13770,7719,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,58150,528,
-34502,32682,0,0,12997,0,0,0,0,0,2214,0,0,0,0,0,58567,0,0,0,26375,0,0,0,0,0,0,0,0
-,0,26437,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,26121,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-,0,32005,22952,59047,0,13543,0,0,0,0,0,0,0,0,16328,0,0,33542,0,0,0,19782,0,0,0,
-16644,0,0,0,0,31688,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,10276,0,0,0,
-0,0,0,0,36327,0,0,29480,0,0,0,777,12709,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,27398,0,0,
-0,4455,9037,31397,0,9221,0,0,0,60487,20840,1796,0,0,0,0,0,0,0,0,8364,0,0,0,0,0,0
-,0,0,0,0,0,19752,44902,0,38566,0,0,18027,0,0,0,0,0,0,0,0,10662,0,0,0,0,0,11812,0
-,0,0,0,0,0,0,0,0,19910,0,0,0,45030,0,0,0,0,0,0,0,0,0,0,0,0,19978,5127,0,11620,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,19817,0,5579,9350,0,0,21002,19718,0,0,0,21926,0,0,0,0,0,0,0,0,0,0,0,0,0,20711,
-0,0,0,20197,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,40550,0,0,0,57510,0,0,0,53895,
-0,0,15017,0,17000,39367,2347,0,0,0,0,0,0,0,0,0,8588,0,0,0,0,0,3273,17862,3498,
-2085,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,19048,0,0,0,0,0,11978,58631,0,0,0,0
-,0,0,523,0,12969,198,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,28197,0,47846,0,0,0,0,0,0
-,0,0,0,4549,0,0,0,0,0,0,0,0,0,0,687,14917,748,8229,0,0,0,0,0,0,2476,12935,0,0,0,
-0,0,0,22792,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,27528,59142,0,0,20876,20134,0,0,0,
-0,440,12068,0,58951,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,48038,0,0,0,60999,0,0,0,0,
-0,0,0,0,0,0,0,0,0,15716,7498,5476,0,0,0,0,20202,37959,0,0,0,0,0,0,0,0,0,0,0,0,
-29801,0,5451,0,0,0,0,0,0,0,0,0,0,50790,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,24485,0
-,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,13573,0,0,22856,0,0,0,0,21927,0,0,0,0,0
-,0,9130,0,0,0,0,0,0,13732,0,0,0,0,0,0,0,0,0,0,2282,583,0,0,0,0,0,0,0,0,0,0,3726,
-26503,0,0,0,0,0,0,9258,0,0,0,0,0,0,0,0,21604,0,0,0,45574,0,0,0,0,0,20710,0,0,0,
-42694,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1163,6694,0,0,0,0,0,0,0,10948,0,0,0,29700,0,0,
-0,0,0,58823,3796,27399,20939,10180,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-19,29287,28649,14534,0,0,16428,45607,0,0,0,0,0,0,25322,0,4908,0,0,0,0,0,0,25476,
-29097,14246,11053,0,0,0,0,0,0,0,0,18502,0,0,0,44390,0,0,0,17765,0,0,0,0,0,0,
-24520,0,0,0,0,0,0,0,0,0,0,17319,0,0,0,0,0,0,0,0,0,0,0,0,0,28166,0,0,0,0,0,48198,
-0,0,31467,0,24585,0,0,0,0,18692,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,23596,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,7236,968,13637,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-3763,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14791,0,0,0,12324,0,12741,0,0,0
-,0,0,0,0,0,0,11108,0,0,0,0,4009,40295,20616,4357,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-15015,0,0,0,0,0,43751,0,0,0,0,0,0,0,0,0,0,0,23013,0,0,0,0,0,0,0,0,0,0,0,0,0,
-45542,0,0,0,0,0,0,0,0,0,23974,0,0,0,0,17480,20647,0,0,0,0,0,0,8876,0,0,40806,0,0
-,0,0,0,0,0,14502,17160,17764,0,0,31594,35431,0,0,2890,0,0,0,0,0,0,0,0,27524,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8228,0,56583,0,0,0,0,0,0,0,0,0,0,0,0,0
-,0,0,0,0,34278,0,0,0,0,0,0,0,0,0,0,0,0,0,2662,0,26724,0,0,0,0,0,0,0,64198,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,22281,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3049,
-54983,0,0,0,0,0,0,0,837,0,17604,0,0,0,0,0,28838,0,0,0,0,0,0,26312,0,0,3910,0,0,0
-,25830,0,0,0,0,0,8391,0,19845,19240,1092,0,0,5449,0,0,0,0,17188,0,0,0,0,0,0,0,0,
-0,10629,0,0,6671,61094,5832,8358,0,0,0,55078,0,0,0,0,0,29860,0,0,0,0,0,0,0,0,0,0
-,0,0,0,0,0,0,0,51494,0,28647,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,25989,0,0,30153,61318
-,0,0,0,0,0,0,0,24903,0,0,0,4388,0,42054,0,0,0,0,0,0,0,53158,0,0,0,0,0,0,0,50918,
-0,0,0,0,0,0,26251,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5929,2853,0,37126,
-7372,197,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2027,934,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,55686,0,0,5672,5447,0,62758,0,0,0,0,0,0,0,0,0,0,0,0,2923,0,556,1415,
-0,0,0,0,0,0,0,0,0,8645,0,9477,0,0,0,0,0,0,0,48742,0,0,0,0,0,0,0,0,0,0,24235,228,
-0,0,0,0,0,0,0,0,0,0,16970,18823,0,0,0,0,0,0,0,0,0,25158,0,0,0,0,0,18567,20072,
-2823,14313,1830,0,0,0,0,0,0,0,0,27048,23526,0,0,0,0,0,997,492,0,14730,16677,396,
-13574,0,0,0,41671,0,0,0,0,0,0,0,19045,0,0,0,421,17545,3110,0,0,0,0,0,0,0,0,0,0,0
-,0,0,0,0,47111,14475,56551,0,0,0,0,0,0,0,0,0,0,3697,0,0,0,0,0,0,49382,0,35559,0,
-0,0,0,40,0,11496,15621,0,8550,0,0,0,63462,0,0,0,0,0,0,0,36966,0,50406,0,46022,
-1001,0,0,12069,3249,0,0,0,0,0,0,0,0,0,0,0,0,0,15241,0,0,0,0,0,0,0,0,64743,0,0,0,
-0,0,58759,0,0,0,0,1136,26981,0,0,0,0,0,0,0,17732,0,0,0,17157,20011,6629,0,43879,
-0,0,0,13572,25128,10759,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,28676,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,875,24007,0,0,0,0,7628,0,0,0,0,0,12268,0,0,0,0,0,0,0,0,19300
-,23210,356,0,0,0,0,0,0,0,0,0,15236,0,0,0,0,0,49670,0,0,0,0,0,0,0,21764,0,0,0,0,0
-,0,0,0,0,0,0,0,0,0,0,0,13931,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,45799,0,0,436,3589,
-0,0,11402,0,0,0,0,0,0,0,0,0,0,62822,0,0,0,39814,588,0,0,0,0,0,0,27750,0,0,0,0,0,
-0,1609,22660,2346,18951,0,16068,0,0,0,0,0,0,5162,11110,0,0,0,0,15048,1060,0,7879
-,18280,326,0,14886,19656,0,7594,0,0,0,0,0,781,581,0,16198,0,0,0,0,0,0,1078,9892,
-0,0,0,0,0,0,0,0,0,0,4489,0,0,0,0,33798,0,0,0,54534,0,0,0,0,0,0,0,33158,0,0,0,0,0
-,0,0,0,0,42086,13834,2757,8456,16773,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3434,0,0,0,
-0,0,3946,29668,0,0,30634,36775,0,0,0,0,0,24901,0,16069,6280,0,0,0,0,41990,0,0,0,
-0,0,0,0,27365,0,0,0,0,0,0,0,0,0,0,1450,44807,0,0,0,32100,0,0,0,0,0,35110,0,0,0,0
-,0,0,0,0,17448,19591,0,0,0,0,0,0,0,0,0,0,0,0,1739,0,0,0,0,5511,0,0,0,32934,0,0,0
-,0,0,0,0,0,0,18180,0,0,0,23428,19754,0,0,31174,3021,31655,23464,0,0,0,0,0,0,
-57255,0,0,21292,64487,0,0,0,0,0,0,25802,9189,0,0,0,0,0,49254,0,0,0,0,0,0,0,0,0,0
-,5837,50023,0,0,0,0,0,0,0,0,0,15495,0,0,0,0,0,51942,0,0,0,0,0,0,0,0,28104,58662,
-0,50214,0,0,0,0,0,0,0,0,2988,0,22888,31812,0,0,0,0,0,2020,0,18916,0,0,0,0,0,0,0,
-23973,0,0,0,0,17516,11717,0,0,0,55911,0,0,0,0,0,0,0,2855,0,0,0,0,0,0,0,0,0,0,0,0
-,0,0,0,0,0,46822,0,24710,28586,0,0,0,1556,0,0,30117,0,0,22090,57127,3403,14087,0
-,0,0,0,0,0,0,0,0,0,1041,0,10633,6916,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,27269,0,0,13322,18055,0,29380,0,56454,0,0,120
-,0,0,8773,0,0,0,0,16040,0,0,0,0,0,0,0,27242,23781,0,1572,0,28134,0,0,1512,0,0,0,
-0,0,0,27684,0,38470,0,0,0,0,0,0,1513,8709,0,0,0,0,0,0,0,0,0,0,0,46566,0,0,0,0,
-28521,61159,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,24356,0,0,0,0,0,0,0,0,0,13028,0,
-5863,0,0,15693,0,0,0,0,0,0,0,1131,23398,0,0,0,0,0,0,0,26212,0,0,0,0,0,0,0,0,0,0,
-0,0,0,18404,0,0,0,0,1457,26183,0,0,2475,7110,0,0,0,0,27180,60166,0,0,0,20262,0,
-41862,0,0,0,0,0,0,0,0,0,0,2762,0,0,0,0,0,0,0,0,0,0,0,0,0,0,26148,0,0,0,0,0,0,0,0
-,0,28229,0,0,0,29254,0,0,0,0,0,0,0,0,0,0,27690,0,0,13636,12776,1862,0,0,0,0,0,0,
-17225,3271,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,28039,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-,0,0,0,0,0,0,0,0,0,4457,18117,0,2023,402,0,0,0,0,0,0,0,0,0,0,0,0,0,104,3654,0,0,
-0,0,0,0,0,0,18440,0,0,0,0,0,0,0,0,29861,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,22150,0,0,0,0,0,0,0,0,0,0,0,0,24074,0,0,0,0,0,0,0,0,12004,0,32358,
-0,0,3081,0,0,0,0,0,0,0,0,0,4749,0,0,0,0,0,0,0,0,0,0,0,10792,1799,21322,0,7880,
-12613,0,0,0,0,0,0,0,0,13993,0,0,0,16202,0,0,0,0,32102,0,37223,0,10500,0,0,0,0,0,
-0,0,0,32008,0,0,0,0,0,23816,3236,0,0,0,0,0,23237,0,0,5642,0,4684,294,0,0,0,0,0,0
-,0,0,0,0,0,0,0,0,0,0,0,0,0,26852,0,0,0,0,0,0,7148,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,7890,61798,939,0,0,56679,0,0,0,0,0,27078,202,5029,0,0,0,0,0,
-0,0,0,0,28005,0,0,15273,24741,5676,20452,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,55910,0,0
-,0,0,5069,27942,0,21092,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12517,0,0,0,0,0,0,
-0,0,0,0,0,0,21384,28260,0,2502,20108,0,0,0,0,0,0,0,0,0,0,0,0,46726,0,30790,0,0,0
-,0,0,14725,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1099,6372,0,0,0,12422,15182,0,8683,0,
-10665,19462,0,0,0,0,0,0,1590,0,31628,0,22632,19750,0,0,0,0,0,0,0,24198,0,0,0,0,0
-,50662,0,0,0,0,0,0,0,0,0,0,9131,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11015,0,0,0,0,0,0,0,
-0,16490,54695,0,0,0,0,0,0,0,0,12937,0,0,0,0,16004,0,0,0,0,0,0,0,0,0,2181,6923,0,
-0,0,0,0,0,0,15624,11302,0,0,5673,7559,0,0,14668,15684,0,0,0,0,0,0,24204,48134,0,
-24230,0,55527,0,0,3464,19141,0,0,0,0};
-
-#if defined(__cplusplus) || defined(c_plusplus)
-} /* extern "C" */
-#endif
diff --git a/BaseTools/Source/C/BrotliCompress/enc/encode.c b/BaseTools/Source/C/BrotliCompress/enc/encode.c
deleted file mode 100644
index 93824d620373..000000000000
--- a/BaseTools/Source/C/BrotliCompress/enc/encode.c
+++ /dev/null
@@ -1,1864 +0,0 @@
-/* Copyright 2013 Google Inc. All Rights Reserved.
-
- Distributed under MIT license.
- See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
-*/
-
-/* Implementation of Brotli compressor. */
-
-#include <brotli/encode.h>
-
-#include <stdlib.h> /* free, malloc */
-#include <string.h> /* memcpy, memset */
-
-#include "../common/constants.h"
-#include "../common/context.h"
-#include "../common/platform.h"
-#include "../common/version.h"
-#include "./backward_references.h"
-#include "./backward_references_hq.h"
-#include "./bit_cost.h"
-#include "./brotli_bit_stream.h"
-#include "./compress_fragment.h"
-#include "./compress_fragment_two_pass.h"
-#include "./encoder_dict.h"
-#include "./entropy_encode.h"
-#include "./fast_log.h"
-#include "./hash.h"
-#include "./histogram.h"
-#include "./memory.h"
-#include "./metablock.h"
-#include "./prefix.h"
-#include "./quality.h"
-#include "./ringbuffer.h"
-#include "./utf8_util.h"
-#include "./write_bits.h"
-
-#if defined(__cplusplus) || defined(c_plusplus)
-extern "C" {
-#endif
-
-#define COPY_ARRAY(dst, src) memcpy(dst, src, sizeof(src));
-
-typedef enum BrotliEncoderStreamState {
- /* Default state. */
- BROTLI_STREAM_PROCESSING = 0,
- /* Intermediate state; after next block is emitted, byte-padding should be
- performed before getting back to default state. */
- BROTLI_STREAM_FLUSH_REQUESTED = 1,
- /* Last metablock was produced; no more input is acceptable. */
- BROTLI_STREAM_FINISHED = 2,
- /* Flushing compressed block and writing meta-data block header. */
- BROTLI_STREAM_METADATA_HEAD = 3,
- /* Writing metadata block body. */
- BROTLI_STREAM_METADATA_BODY = 4
-} BrotliEncoderStreamState;
-
-typedef struct BrotliEncoderStateStruct {
- BrotliEncoderParams params;
-
- MemoryManager memory_manager_;
-
- HasherHandle hasher_;
- uint64_t input_pos_;
- RingBuffer ringbuffer_;
- size_t cmd_alloc_size_;
- Command* commands_;
- size_t num_commands_;
- size_t num_literals_;
- size_t last_insert_len_;
- uint64_t last_flush_pos_;
- uint64_t last_processed_pos_;
- int dist_cache_[BROTLI_NUM_DISTANCE_SHORT_CODES];
- int saved_dist_cache_[4];
- uint16_t last_bytes_;
- uint8_t last_bytes_bits_;
- uint8_t prev_byte_;
- uint8_t prev_byte2_;
- size_t storage_size_;
- uint8_t* storage_;
- /* Hash table for FAST_ONE_PASS_COMPRESSION_QUALITY mode. */
- int small_table_[1 << 10]; /* 4KiB */
- int* large_table_; /* Allocated only when needed */
- size_t large_table_size_;
- /* Command and distance prefix codes (each 64 symbols, stored back-to-back)
- used for the next block in FAST_ONE_PASS_COMPRESSION_QUALITY. The command
- prefix code is over a smaller alphabet with the following 64 symbols:
- 0 - 15: insert length code 0, copy length code 0 - 15, same distance
- 16 - 39: insert length code 0, copy length code 0 - 23
- 40 - 63: insert length code 0 - 23, copy length code 0
- Note that symbols 16 and 40 represent the same code in the full alphabet,
- but we do not use either of them in FAST_ONE_PASS_COMPRESSION_QUALITY. */
- uint8_t cmd_depths_[128];
- uint16_t cmd_bits_[128];
- /* The compressed form of the command and distance prefix codes for the next
- block in FAST_ONE_PASS_COMPRESSION_QUALITY. */
- uint8_t cmd_code_[512];
- size_t cmd_code_numbits_;
- /* Command and literal buffers for FAST_TWO_PASS_COMPRESSION_QUALITY. */
- uint32_t* command_buf_;
- uint8_t* literal_buf_;
-
- uint8_t* next_out_;
- size_t available_out_;
- size_t total_out_;
- /* Temporary buffer for padding flush bits or metadata block header / body. */
- union {
- uint64_t u64[2];
- uint8_t u8[16];
- } tiny_buf_;
- uint32_t remaining_metadata_bytes_;
- BrotliEncoderStreamState stream_state_;
-
- BROTLI_BOOL is_last_block_emitted_;
- BROTLI_BOOL is_initialized_;
-} BrotliEncoderStateStruct;
-
-static BROTLI_BOOL EnsureInitialized(BrotliEncoderState* s);
-
-static size_t InputBlockSize(BrotliEncoderState* s) {
- return (size_t)1 << s->params.lgblock;
-}
-
-static uint64_t UnprocessedInputSize(BrotliEncoderState* s) {
- return s->input_pos_ - s->last_processed_pos_;
-}
-
-static size_t RemainingInputBlockSize(BrotliEncoderState* s) {
- const uint64_t delta = UnprocessedInputSize(s);
- size_t block_size = InputBlockSize(s);
- if (delta >= block_size) return 0;
- return block_size - (size_t)delta;
-}
-
-BROTLI_BOOL BrotliEncoderSetParameter(
- BrotliEncoderState* state, BrotliEncoderParameter p, uint32_t value) {
- /* Changing parameters on the fly is not implemented yet. */
- if (state->is_initialized_) return BROTLI_FALSE;
- /* TODO: Validate/clamp parameters here. */
- switch (p) {
- case BROTLI_PARAM_MODE:
- state->params.mode = (BrotliEncoderMode)value;
- return BROTLI_TRUE;
-
- case BROTLI_PARAM_QUALITY:
- state->params.quality = (int)value;
- return BROTLI_TRUE;
-
- case BROTLI_PARAM_LGWIN:
- state->params.lgwin = (int)value;
- return BROTLI_TRUE;
-
- case BROTLI_PARAM_LGBLOCK:
- state->params.lgblock = (int)value;
- return BROTLI_TRUE;
-
- case BROTLI_PARAM_DISABLE_LITERAL_CONTEXT_MODELING:
- if ((value != 0) && (value != 1)) return BROTLI_FALSE;
- state->params.disable_literal_context_modeling = TO_BROTLI_BOOL(!!value);
- return BROTLI_TRUE;
-
- case BROTLI_PARAM_SIZE_HINT:
- state->params.size_hint = value;
- return BROTLI_TRUE;
-
- case BROTLI_PARAM_LARGE_WINDOW:
- state->params.large_window = TO_BROTLI_BOOL(!!value);
- return BROTLI_TRUE;
-
- case BROTLI_PARAM_NPOSTFIX:
- state->params.dist.distance_postfix_bits = value;
- return BROTLI_TRUE;
-
- case BROTLI_PARAM_NDIRECT:
- state->params.dist.num_direct_distance_codes = value;
- return BROTLI_TRUE;
-
- default: return BROTLI_FALSE;
- }
-}
-
-/* Wraps 64-bit input position to 32-bit ring-buffer position preserving
- "not-a-first-lap" feature. */
-static uint32_t WrapPosition(uint64_t position) {
- uint32_t result = (uint32_t)position;
- uint64_t gb = position >> 30;
- if (gb > 2) {
- /* Wrap every 2GiB; The first 3GB are continuous. */
- result = (result & ((1u << 30) - 1)) | ((uint32_t)((gb - 1) & 1) + 1) << 30;
- }
- return result;
-}
-
-static uint8_t* GetBrotliStorage(BrotliEncoderState* s, size_t size) {
- MemoryManager* m = &s->memory_manager_;
- if (s->storage_size_ < size) {
- BROTLI_FREE(m, s->storage_);
- s->storage_ = BROTLI_ALLOC(m, uint8_t, size);
- if (BROTLI_IS_OOM(m)) return NULL;
- s->storage_size_ = size;
- }
- return s->storage_;
-}
-
-static size_t HashTableSize(size_t max_table_size, size_t input_size) {
- size_t htsize = 256;
- while (htsize < max_table_size && htsize < input_size) {
- htsize <<= 1;
- }
- return htsize;
-}
-
-static int* GetHashTable(BrotliEncoderState* s, int quality,
- size_t input_size, size_t* table_size) {
- /* Use smaller hash table when input.size() is smaller, since we
- fill the table, incurring O(hash table size) overhead for
- compression, and if the input is short, we won't need that
- many hash table entries anyway. */
- MemoryManager* m = &s->memory_manager_;
- const size_t max_table_size = MaxHashTableSize(quality);
- size_t htsize = HashTableSize(max_table_size, input_size);
- int* table;
- BROTLI_DCHECK(max_table_size >= 256);
- if (quality == FAST_ONE_PASS_COMPRESSION_QUALITY) {
- /* Only odd shifts are supported by fast-one-pass. */
- if ((htsize & 0xAAAAA) == 0) {
- htsize <<= 1;
- }
- }
-
- if (htsize <= sizeof(s->small_table_) / sizeof(s->small_table_[0])) {
- table = s->small_table_;
- } else {
- if (htsize > s->large_table_size_) {
- s->large_table_size_ = htsize;
- BROTLI_FREE(m, s->large_table_);
- s->large_table_ = BROTLI_ALLOC(m, int, htsize);
- if (BROTLI_IS_OOM(m)) return 0;
- }
- table = s->large_table_;
- }
-
- *table_size = htsize;
- memset(table, 0, htsize * sizeof(*table));
- return table;
-}
-
-static void EncodeWindowBits(int lgwin, BROTLI_BOOL large_window,
- uint16_t* last_bytes, uint8_t* last_bytes_bits) {
- if (large_window) {
- *last_bytes = (uint16_t)(((lgwin & 0x3F) << 8) | 0x11);
- *last_bytes_bits = 14;
- } else {
- if (lgwin == 16) {
- *last_bytes = 0;
- *last_bytes_bits = 1;
- } else if (lgwin == 17) {
- *last_bytes = 1;
- *last_bytes_bits = 7;
- } else if (lgwin > 17) {
- *last_bytes = (uint16_t)(((lgwin - 17) << 1) | 0x01);
- *last_bytes_bits = 4;
- } else {
- *last_bytes = (uint16_t)(((lgwin - 8) << 4) | 0x01);
- *last_bytes_bits = 7;
- }
- }
-}
-
-/* Initializes the command and distance prefix codes for the first block. */
-static void InitCommandPrefixCodes(uint8_t cmd_depths[128],
- uint16_t cmd_bits[128],
- uint8_t cmd_code[512],
- size_t* cmd_code_numbits) {
- static const uint8_t kDefaultCommandDepths[128] = {
- 0, 4, 4, 5, 6, 6, 7, 7, 7, 7, 7, 8, 8, 8, 8, 8,
- 0, 0, 0, 4, 4, 4, 4, 4, 5, 5, 6, 6, 6, 6, 7, 7,
- 7, 7, 10, 10, 10, 10, 10, 10, 0, 4, 4, 5, 5, 5, 6, 6,
- 7, 8, 8, 9, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
- 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 6, 6, 6, 6, 6, 6, 5, 5, 5, 5, 5, 5, 4, 4, 4, 4,
- 4, 4, 4, 5, 5, 5, 5, 5, 5, 6, 6, 7, 7, 7, 8, 10,
- 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
- };
- static const uint16_t kDefaultCommandBits[128] = {
- 0, 0, 8, 9, 3, 35, 7, 71,
- 39, 103, 23, 47, 175, 111, 239, 31,
- 0, 0, 0, 4, 12, 2, 10, 6,
- 13, 29, 11, 43, 27, 59, 87, 55,
- 15, 79, 319, 831, 191, 703, 447, 959,
- 0, 14, 1, 25, 5, 21, 19, 51,
- 119, 159, 95, 223, 479, 991, 63, 575,
- 127, 639, 383, 895, 255, 767, 511, 1023,
- 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 27, 59, 7, 39, 23, 55, 30, 1, 17, 9, 25, 5, 0, 8, 4, 12,
- 2, 10, 6, 21, 13, 29, 3, 19, 11, 15, 47, 31, 95, 63, 127, 255,
- 767, 2815, 1791, 3839, 511, 2559, 1535, 3583, 1023, 3071, 2047, 4095,
- };
- static const uint8_t kDefaultCommandCode[] = {
- 0xff, 0x77, 0xd5, 0xbf, 0xe7, 0xde, 0xea, 0x9e, 0x51, 0x5d, 0xde, 0xc6,
- 0x70, 0x57, 0xbc, 0x58, 0x58, 0x58, 0xd8, 0xd8, 0x58, 0xd5, 0xcb, 0x8c,
- 0xea, 0xe0, 0xc3, 0x87, 0x1f, 0x83, 0xc1, 0x60, 0x1c, 0x67, 0xb2, 0xaa,
- 0x06, 0x83, 0xc1, 0x60, 0x30, 0x18, 0xcc, 0xa1, 0xce, 0x88, 0x54, 0x94,
- 0x46, 0xe1, 0xb0, 0xd0, 0x4e, 0xb2, 0xf7, 0x04, 0x00,
- };
- static const size_t kDefaultCommandCodeNumBits = 448;
- COPY_ARRAY(cmd_depths, kDefaultCommandDepths);
- COPY_ARRAY(cmd_bits, kDefaultCommandBits);
-
- /* Initialize the pre-compressed form of the command and distance prefix
- codes. */
- COPY_ARRAY(cmd_code, kDefaultCommandCode);
- *cmd_code_numbits = kDefaultCommandCodeNumBits;
-}
-
-/* Decide about the context map based on the ability of the prediction
- ability of the previous byte UTF8-prefix on the next byte. The
- prediction ability is calculated as Shannon entropy. Here we need
- Shannon entropy instead of 'BitsEntropy' since the prefix will be
- encoded with the remaining 6 bits of the following byte, and
- BitsEntropy will assume that symbol to be stored alone using Huffman
- coding. */
-static void ChooseContextMap(int quality,
- uint32_t* bigram_histo,
- size_t* num_literal_contexts,
- const uint32_t** literal_context_map) {
- static const uint32_t kStaticContextMapContinuation[64] = {
- 1, 1, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- };
- static const uint32_t kStaticContextMapSimpleUTF8[64] = {
- 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- };
-
- uint32_t monogram_histo[3] = { 0 };
- uint32_t two_prefix_histo[6] = { 0 };
- size_t total;
- size_t i;
- size_t dummy;
- double entropy[4];
- for (i = 0; i < 9; ++i) {
- monogram_histo[i % 3] += bigram_histo[i];
- two_prefix_histo[i % 6] += bigram_histo[i];
- }
- entropy[1] = ShannonEntropy(monogram_histo, 3, &dummy);
- entropy[2] = (ShannonEntropy(two_prefix_histo, 3, &dummy) +
- ShannonEntropy(two_prefix_histo + 3, 3, &dummy));
- entropy[3] = 0;
- for (i = 0; i < 3; ++i) {
- entropy[3] += ShannonEntropy(bigram_histo + 3 * i, 3, &dummy);
- }
-
- total = monogram_histo[0] + monogram_histo[1] + monogram_histo[2];
- BROTLI_DCHECK(total != 0);
- entropy[0] = 1.0 / (double)total;
- entropy[1] *= entropy[0];
- entropy[2] *= entropy[0];
- entropy[3] *= entropy[0];
-
- if (quality < MIN_QUALITY_FOR_HQ_CONTEXT_MODELING) {
- /* 3 context models is a bit slower, don't use it at lower qualities. */
- entropy[3] = entropy[1] * 10;
- }
- /* If expected savings by symbol are less than 0.2 bits, skip the
- context modeling -- in exchange for faster decoding speed. */
- if (entropy[1] - entropy[2] < 0.2 &&
- entropy[1] - entropy[3] < 0.2) {
- *num_literal_contexts = 1;
- } else if (entropy[2] - entropy[3] < 0.02) {
- *num_literal_contexts = 2;
- *literal_context_map = kStaticContextMapSimpleUTF8;
- } else {
- *num_literal_contexts = 3;
- *literal_context_map = kStaticContextMapContinuation;
- }
-}
-
-/* Decide if we want to use a more complex static context map containing 13
- context values, based on the entropy reduction of histograms over the
- first 5 bits of literals. */
-static BROTLI_BOOL ShouldUseComplexStaticContextMap(const uint8_t* input,
- size_t start_pos, size_t length, size_t mask, int quality, size_t size_hint,
- size_t* num_literal_contexts, const uint32_t** literal_context_map) {
- static const uint32_t kStaticContextMapComplexUTF8[64] = {
- 11, 11, 12, 12, /* 0 special */
- 0, 0, 0, 0, /* 4 lf */
- 1, 1, 9, 9, /* 8 space */
- 2, 2, 2, 2, /* !, first after space/lf and after something else. */
- 1, 1, 1, 1, /* " */
- 8, 3, 3, 3, /* % */
- 1, 1, 1, 1, /* ({[ */
- 2, 2, 2, 2, /* }]) */
- 8, 4, 4, 4, /* :; */
- 8, 7, 4, 4, /* . */
- 8, 0, 0, 0, /* > */
- 3, 3, 3, 3, /* [0..9] */
- 5, 5, 10, 5, /* [A-Z] */
- 5, 5, 10, 5,
- 6, 6, 6, 6, /* [a-z] */
- 6, 6, 6, 6,
- };
- BROTLI_UNUSED(quality);
- /* Try the more complex static context map only for long data. */
- if (size_hint < (1 << 20)) {
- return BROTLI_FALSE;
- } else {
- const size_t end_pos = start_pos + length;
- /* To make entropy calculations faster and to fit on the stack, we collect
- histograms over the 5 most significant bits of literals. One histogram
- without context and 13 additional histograms for each context value. */
- uint32_t combined_histo[32] = { 0 };
- uint32_t context_histo[13][32] = { { 0 } };
- uint32_t total = 0;
- double entropy[3];
- size_t dummy;
- size_t i;
- ContextLut utf8_lut = BROTLI_CONTEXT_LUT(CONTEXT_UTF8);
- for (; start_pos + 64 <= end_pos; start_pos += 4096) {
- const size_t stride_end_pos = start_pos + 64;
- uint8_t prev2 = input[start_pos & mask];
- uint8_t prev1 = input[(start_pos + 1) & mask];
- size_t pos;
- /* To make the analysis of the data faster we only examine 64 byte long
- strides at every 4kB intervals. */
- for (pos = start_pos + 2; pos < stride_end_pos; ++pos) {
- const uint8_t literal = input[pos & mask];
- const uint8_t context = (uint8_t)kStaticContextMapComplexUTF8[
- BROTLI_CONTEXT(prev1, prev2, utf8_lut)];
- ++total;
- ++combined_histo[literal >> 3];
- ++context_histo[context][literal >> 3];
- prev2 = prev1;
- prev1 = literal;
- }
- }
- entropy[1] = ShannonEntropy(combined_histo, 32, &dummy);
- entropy[2] = 0;
- for (i = 0; i < 13; ++i) {
- entropy[2] += ShannonEntropy(&context_histo[i][0], 32, &dummy);
- }
- entropy[0] = 1.0 / (double)total;
- entropy[1] *= entropy[0];
- entropy[2] *= entropy[0];
- /* The triggering heuristics below were tuned by compressing the individual
- files of the silesia corpus. If we skip this kind of context modeling
- for not very well compressible input (i.e. entropy using context modeling
- is 60% of maximal entropy) or if expected savings by symbol are less
- than 0.2 bits, then in every case when it triggers, the final compression
- ratio is improved. Note however that this heuristics might be too strict
- for some cases and could be tuned further. */
- if (entropy[2] > 3.0 || entropy[1] - entropy[2] < 0.2) {
- return BROTLI_FALSE;
- } else {
- *num_literal_contexts = 13;
- *literal_context_map = kStaticContextMapComplexUTF8;
- return BROTLI_TRUE;
- }
- }
-}
-
-static void DecideOverLiteralContextModeling(const uint8_t* input,
- size_t start_pos, size_t length, size_t mask, int quality, size_t size_hint,
- size_t* num_literal_contexts, const uint32_t** literal_context_map) {
- if (quality < MIN_QUALITY_FOR_CONTEXT_MODELING || length < 64) {
- return;
- } else if (ShouldUseComplexStaticContextMap(
- input, start_pos, length, mask, quality, size_hint,
- num_literal_contexts, literal_context_map)) {
- /* Context map was already set, nothing else to do. */
- } else {
- /* Gather bi-gram data of the UTF8 byte prefixes. To make the analysis of
- UTF8 data faster we only examine 64 byte long strides at every 4kB
- intervals. */
- const size_t end_pos = start_pos + length;
- uint32_t bigram_prefix_histo[9] = { 0 };
- for (; start_pos + 64 <= end_pos; start_pos += 4096) {
- static const int lut[4] = { 0, 0, 1, 2 };
- const size_t stride_end_pos = start_pos + 64;
- int prev = lut[input[start_pos & mask] >> 6] * 3;
- size_t pos;
- for (pos = start_pos + 1; pos < stride_end_pos; ++pos) {
- const uint8_t literal = input[pos & mask];
- ++bigram_prefix_histo[prev + lut[literal >> 6]];
- prev = lut[literal >> 6] * 3;
- }
- }
- ChooseContextMap(quality, &bigram_prefix_histo[0], num_literal_contexts,
- literal_context_map);
- }
-}
-
-static BROTLI_BOOL ShouldCompress(
- const uint8_t* data, const size_t mask, const uint64_t last_flush_pos,
- const size_t bytes, const size_t num_literals, const size_t num_commands) {
- if (num_commands < (bytes >> 8) + 2) {
- if (num_literals > 0.99 * (double)bytes) {
- uint32_t literal_histo[256] = { 0 };
- static const uint32_t kSampleRate = 13;
- static const double kMinEntropy = 7.92;
- const double bit_cost_threshold =
- (double)bytes * kMinEntropy / kSampleRate;
- size_t t = (bytes + kSampleRate - 1) / kSampleRate;
- uint32_t pos = (uint32_t)last_flush_pos;
- size_t i;
- for (i = 0; i < t; i++) {
- ++literal_histo[data[pos & mask]];
- pos += kSampleRate;
- }
- if (BitsEntropy(literal_histo, 256) > bit_cost_threshold) {
- return BROTLI_FALSE;
- }
- }
- }
- return BROTLI_TRUE;
-}
-
-/* Chooses the literal context mode for a metablock */
-static ContextType ChooseContextMode(const BrotliEncoderParams* params,
- const uint8_t* data, const size_t pos, const size_t mask,
- const size_t length) {
- /* We only do the computation for the option of something else than
- CONTEXT_UTF8 for the highest qualities */
- if (params->quality >= MIN_QUALITY_FOR_HQ_BLOCK_SPLITTING &&
- !BrotliIsMostlyUTF8(data, pos, mask, length, kMinUTF8Ratio)) {
- return CONTEXT_SIGNED;
- }
- return CONTEXT_UTF8;
-}
-
-static void WriteMetaBlockInternal(MemoryManager* m,
- const uint8_t* data,
- const size_t mask,
- const uint64_t last_flush_pos,
- const size_t bytes,
- const BROTLI_BOOL is_last,
- ContextType literal_context_mode,
- const BrotliEncoderParams* params,
- const uint8_t prev_byte,
- const uint8_t prev_byte2,
- const size_t num_literals,
- const size_t num_commands,
- Command* commands,
- const int* saved_dist_cache,
- int* dist_cache,
- size_t* storage_ix,
- uint8_t* storage) {
- const uint32_t wrapped_last_flush_pos = WrapPosition(last_flush_pos);
- uint16_t last_bytes;
- uint8_t last_bytes_bits;
- ContextLut literal_context_lut = BROTLI_CONTEXT_LUT(literal_context_mode);
- BrotliEncoderParams block_params = *params;
-
- if (bytes == 0) {
- /* Write the ISLAST and ISEMPTY bits. */
- BrotliWriteBits(2, 3, storage_ix, storage);
- *storage_ix = (*storage_ix + 7u) & ~7u;
- return;
- }
-
- if (!ShouldCompress(data, mask, last_flush_pos, bytes,
- num_literals, num_commands)) {
- /* Restore the distance cache, as its last update by
- CreateBackwardReferences is now unused. */
- memcpy(dist_cache, saved_dist_cache, 4 * sizeof(dist_cache[0]));
- BrotliStoreUncompressedMetaBlock(is_last, data,
- wrapped_last_flush_pos, mask, bytes,
- storage_ix, storage);
- return;
- }
-
- BROTLI_DCHECK(*storage_ix <= 14);
- last_bytes = (uint16_t)((storage[1] << 8) | storage[0]);
- last_bytes_bits = (uint8_t)(*storage_ix);
- if (params->quality <= MAX_QUALITY_FOR_STATIC_ENTROPY_CODES) {
- BrotliStoreMetaBlockFast(m, data, wrapped_last_flush_pos,
- bytes, mask, is_last, params,
- commands, num_commands,
- storage_ix, storage);
- if (BROTLI_IS_OOM(m)) return;
- } else if (params->quality < MIN_QUALITY_FOR_BLOCK_SPLIT) {
- BrotliStoreMetaBlockTrivial(m, data, wrapped_last_flush_pos,
- bytes, mask, is_last, params,
- commands, num_commands,
- storage_ix, storage);
- if (BROTLI_IS_OOM(m)) return;
- } else {
- MetaBlockSplit mb;
- InitMetaBlockSplit(&mb);
- if (params->quality < MIN_QUALITY_FOR_HQ_BLOCK_SPLITTING) {
- size_t num_literal_contexts = 1;
- const uint32_t* literal_context_map = NULL;
- if (!params->disable_literal_context_modeling) {
- DecideOverLiteralContextModeling(
- data, wrapped_last_flush_pos, bytes, mask, params->quality,
- params->size_hint, &num_literal_contexts,
- &literal_context_map);
- }
- BrotliBuildMetaBlockGreedy(m, data, wrapped_last_flush_pos, mask,
- prev_byte, prev_byte2, literal_context_lut, num_literal_contexts,
- literal_context_map, commands, num_commands, &mb);
- if (BROTLI_IS_OOM(m)) return;
- } else {
- BrotliBuildMetaBlock(m, data, wrapped_last_flush_pos, mask, &block_params,
- prev_byte, prev_byte2,
- commands, num_commands,
- literal_context_mode,
- &mb);
- if (BROTLI_IS_OOM(m)) return;
- }
- if (params->quality >= MIN_QUALITY_FOR_OPTIMIZE_HISTOGRAMS) {
- /* The number of distance symbols effectively used for distance
- histograms. It might be less than distance alphabet size
- for "Large Window Brotli" (32-bit). */
- uint32_t num_effective_dist_codes = block_params.dist.alphabet_size;
- if (num_effective_dist_codes > BROTLI_NUM_HISTOGRAM_DISTANCE_SYMBOLS) {
- num_effective_dist_codes = BROTLI_NUM_HISTOGRAM_DISTANCE_SYMBOLS;
- }
- BrotliOptimizeHistograms(num_effective_dist_codes, &mb);
- }
- BrotliStoreMetaBlock(m, data, wrapped_last_flush_pos, bytes, mask,
- prev_byte, prev_byte2,
- is_last,
- &block_params,
- literal_context_mode,
- commands, num_commands,
- &mb,
- storage_ix, storage);
- if (BROTLI_IS_OOM(m)) return;
- DestroyMetaBlockSplit(m, &mb);
- }
- if (bytes + 4 < (*storage_ix >> 3)) {
- /* Restore the distance cache and last byte. */
- memcpy(dist_cache, saved_dist_cache, 4 * sizeof(dist_cache[0]));
- storage[0] = (uint8_t)last_bytes;
- storage[1] = (uint8_t)(last_bytes >> 8);
- *storage_ix = last_bytes_bits;
- BrotliStoreUncompressedMetaBlock(is_last, data,
- wrapped_last_flush_pos, mask,
- bytes, storage_ix, storage);
- }
-}
-
-static void ChooseDistanceParams(BrotliEncoderParams* params) {
- uint32_t distance_postfix_bits = 0;
- uint32_t num_direct_distance_codes = 0;
-
- if (params->quality >= MIN_QUALITY_FOR_NONZERO_DISTANCE_PARAMS) {
- uint32_t ndirect_msb;
- if (params->mode == BROTLI_MODE_FONT) {
- distance_postfix_bits = 1;
- num_direct_distance_codes = 12;
- } else {
- distance_postfix_bits = params->dist.distance_postfix_bits;
- num_direct_distance_codes = params->dist.num_direct_distance_codes;
- }
- ndirect_msb = (num_direct_distance_codes >> distance_postfix_bits) & 0x0F;
- if (distance_postfix_bits > BROTLI_MAX_NPOSTFIX ||
- num_direct_distance_codes > BROTLI_MAX_NDIRECT ||
- (ndirect_msb << distance_postfix_bits) != num_direct_distance_codes) {
- distance_postfix_bits = 0;
- num_direct_distance_codes = 0;
- }
- }
-
- BrotliInitDistanceParams(
- params, distance_postfix_bits, num_direct_distance_codes);
-}
-
-static BROTLI_BOOL EnsureInitialized(BrotliEncoderState* s) {
- if (BROTLI_IS_OOM(&s->memory_manager_)) return BROTLI_FALSE;
- if (s->is_initialized_) return BROTLI_TRUE;
-
- SanitizeParams(&s->params);
- s->params.lgblock = ComputeLgBlock(&s->params);
- ChooseDistanceParams(&s->params);
-
- s->remaining_metadata_bytes_ = BROTLI_UINT32_MAX;
-
- RingBufferSetup(&s->params, &s->ringbuffer_);
-
- /* Initialize last byte with stream header. */
- {
- int lgwin = s->params.lgwin;
- if (s->params.quality == FAST_ONE_PASS_COMPRESSION_QUALITY ||
- s->params.quality == FAST_TWO_PASS_COMPRESSION_QUALITY) {
- lgwin = BROTLI_MAX(int, lgwin, 18);
- }
- EncodeWindowBits(lgwin, s->params.large_window,
- &s->last_bytes_, &s->last_bytes_bits_);
- }
-
- if (s->params.quality == FAST_ONE_PASS_COMPRESSION_QUALITY) {
- InitCommandPrefixCodes(s->cmd_depths_, s->cmd_bits_,
- s->cmd_code_, &s->cmd_code_numbits_);
- }
-
- s->is_initialized_ = BROTLI_TRUE;
- return BROTLI_TRUE;
-}
-
-static void BrotliEncoderInitParams(BrotliEncoderParams* params) {
- params->mode = BROTLI_DEFAULT_MODE;
- params->large_window = BROTLI_FALSE;
- params->quality = BROTLI_DEFAULT_QUALITY;
- params->lgwin = BROTLI_DEFAULT_WINDOW;
- params->lgblock = 0;
- params->size_hint = 0;
- params->disable_literal_context_modeling = BROTLI_FALSE;
- BrotliInitEncoderDictionary(¶ms->dictionary);
- params->dist.distance_postfix_bits = 0;
- params->dist.num_direct_distance_codes = 0;
- params->dist.alphabet_size =
- BROTLI_DISTANCE_ALPHABET_SIZE(0, 0, BROTLI_MAX_DISTANCE_BITS);
- params->dist.max_distance = BROTLI_MAX_DISTANCE;
-}
-
-static void BrotliEncoderInitState(BrotliEncoderState* s) {
- BrotliEncoderInitParams(&s->params);
- s->input_pos_ = 0;
- s->num_commands_ = 0;
- s->num_literals_ = 0;
- s->last_insert_len_ = 0;
- s->last_flush_pos_ = 0;
- s->last_processed_pos_ = 0;
- s->prev_byte_ = 0;
- s->prev_byte2_ = 0;
- s->storage_size_ = 0;
- s->storage_ = 0;
- s->hasher_ = NULL;
- s->large_table_ = NULL;
- s->large_table_size_ = 0;
- s->cmd_code_numbits_ = 0;
- s->command_buf_ = NULL;
- s->literal_buf_ = NULL;
- s->next_out_ = NULL;
- s->available_out_ = 0;
- s->total_out_ = 0;
- s->stream_state_ = BROTLI_STREAM_PROCESSING;
- s->is_last_block_emitted_ = BROTLI_FALSE;
- s->is_initialized_ = BROTLI_FALSE;
-
- RingBufferInit(&s->ringbuffer_);
-
- s->commands_ = 0;
- s->cmd_alloc_size_ = 0;
-
- /* Initialize distance cache. */
- s->dist_cache_[0] = 4;
- s->dist_cache_[1] = 11;
- s->dist_cache_[2] = 15;
- s->dist_cache_[3] = 16;
- /* Save the state of the distance cache in case we need to restore it for
- emitting an uncompressed block. */
- memcpy(s->saved_dist_cache_, s->dist_cache_, sizeof(s->saved_dist_cache_));
-}
-
-BrotliEncoderState* BrotliEncoderCreateInstance(
- brotli_alloc_func alloc_func, brotli_free_func free_func, void* opaque) {
- BrotliEncoderState* state = 0;
- if (!alloc_func && !free_func) {
- state = (BrotliEncoderState*)malloc(sizeof(BrotliEncoderState));
- } else if (alloc_func && free_func) {
- state = (BrotliEncoderState*)alloc_func(opaque, sizeof(BrotliEncoderState));
- }
- if (state == 0) {
- /* BROTLI_DUMP(); */
- return 0;
- }
- BrotliInitMemoryManager(
- &state->memory_manager_, alloc_func, free_func, opaque);
- BrotliEncoderInitState(state);
- return state;
-}
-
-static void BrotliEncoderCleanupState(BrotliEncoderState* s) {
- MemoryManager* m = &s->memory_manager_;
- if (BROTLI_IS_OOM(m)) {
- BrotliWipeOutMemoryManager(m);
- return;
- }
- BROTLI_FREE(m, s->storage_);
- BROTLI_FREE(m, s->commands_);
- RingBufferFree(m, &s->ringbuffer_);
- DestroyHasher(m, &s->hasher_);
- BROTLI_FREE(m, s->large_table_);
- BROTLI_FREE(m, s->command_buf_);
- BROTLI_FREE(m, s->literal_buf_);
-}
-
-/* Deinitializes and frees BrotliEncoderState instance. */
-void BrotliEncoderDestroyInstance(BrotliEncoderState* state) {
- if (!state) {
- return;
- } else {
- MemoryManager* m = &state->memory_manager_;
- brotli_free_func free_func = m->free_func;
- void* opaque = m->opaque;
- BrotliEncoderCleanupState(state);
- free_func(opaque, state);
- }
-}
-
-/*
- Copies the given input data to the internal ring buffer of the compressor.
- No processing of the data occurs at this time and this function can be
- called multiple times before calling WriteBrotliData() to process the
- accumulated input. At most input_block_size() bytes of input data can be
- copied to the ring buffer, otherwise the next WriteBrotliData() will fail.
- */
-static void CopyInputToRingBuffer(BrotliEncoderState* s,
- const size_t input_size,
- const uint8_t* input_buffer) {
- RingBuffer* ringbuffer_ = &s->ringbuffer_;
- MemoryManager* m = &s->memory_manager_;
- RingBufferWrite(m, input_buffer, input_size, ringbuffer_);
- if (BROTLI_IS_OOM(m)) return;
- s->input_pos_ += input_size;
-
- /* TL;DR: If needed, initialize 7 more bytes in the ring buffer to make the
- hashing not depend on uninitialized data. This makes compression
- deterministic and it prevents uninitialized memory warnings in Valgrind.
- Even without erasing, the output would be valid (but nondeterministic).
-
- Background information: The compressor stores short (at most 8 bytes)
- substrings of the input already read in a hash table, and detects
- repetitions by looking up such substrings in the hash table. If it
- can find a substring, it checks whether the substring is really there
- in the ring buffer (or it's just a hash collision). Should the hash
- table become corrupt, this check makes sure that the output is
- still valid, albeit the compression ratio would be bad.
-
- The compressor populates the hash table from the ring buffer as it's
- reading new bytes from the input. However, at the last few indexes of
- the ring buffer, there are not enough bytes to build full-length
- substrings from. Since the hash table always contains full-length
- substrings, we erase with dummy zeros here to make sure that those
- substrings will contain zeros at the end instead of uninitialized
- data.
-
- Please note that erasing is not necessary (because the
- memory region is already initialized since he ring buffer
- has a `tail' that holds a copy of the beginning,) so we
- skip erasing if we have already gone around at least once in
- the ring buffer.
-
- Only clear during the first round of ring-buffer writes. On
- subsequent rounds data in the ring-buffer would be affected. */
- if (ringbuffer_->pos_ <= ringbuffer_->mask_) {
- /* This is the first time when the ring buffer is being written.
- We clear 7 bytes just after the bytes that have been copied from
- the input buffer.
-
- The ring-buffer has a "tail" that holds a copy of the beginning,
- but only once the ring buffer has been fully written once, i.e.,
- pos <= mask. For the first time, we need to write values
- in this tail (where index may be larger than mask), so that
- we have exactly defined behavior and don't read uninitialized
- memory. Due to performance reasons, hashing reads data using a
- LOAD64, which can go 7 bytes beyond the bytes written in the
- ring-buffer. */
- memset(ringbuffer_->buffer_ + ringbuffer_->pos_, 0, 7);
- }
-}
-
-/* Marks all input as processed.
- Returns true if position wrapping occurs. */
-static BROTLI_BOOL UpdateLastProcessedPos(BrotliEncoderState* s) {
- uint32_t wrapped_last_processed_pos = WrapPosition(s->last_processed_pos_);
- uint32_t wrapped_input_pos = WrapPosition(s->input_pos_);
- s->last_processed_pos_ = s->input_pos_;
- return TO_BROTLI_BOOL(wrapped_input_pos < wrapped_last_processed_pos);
-}
-
-static void ExtendLastCommand(BrotliEncoderState* s, uint32_t* bytes,
- uint32_t* wrapped_last_processed_pos) {
- Command* last_command = &s->commands_[s->num_commands_ - 1];
- const uint8_t* data = s->ringbuffer_.buffer_;
- const uint32_t mask = s->ringbuffer_.mask_;
- uint64_t max_backward_distance =
- (((uint64_t)1) << s->params.lgwin) - BROTLI_WINDOW_GAP;
- uint64_t last_copy_len = last_command->copy_len_ & 0x1FFFFFF;
- uint64_t last_processed_pos = s->last_processed_pos_ - last_copy_len;
- uint64_t max_distance = last_processed_pos < max_backward_distance ?
- last_processed_pos : max_backward_distance;
- uint64_t cmd_dist = (uint64_t)s->dist_cache_[0];
- uint32_t distance_code = CommandRestoreDistanceCode(last_command,
- &s->params.dist);
- if (distance_code < BROTLI_NUM_DISTANCE_SHORT_CODES ||
- distance_code - (BROTLI_NUM_DISTANCE_SHORT_CODES - 1) == cmd_dist) {
- if (cmd_dist <= max_distance) {
- while (*bytes != 0 && data[*wrapped_last_processed_pos & mask] ==
- data[(*wrapped_last_processed_pos - cmd_dist) & mask]) {
- last_command->copy_len_++;
- (*bytes)--;
- (*wrapped_last_processed_pos)++;
- }
- }
- /* The copy length is at most the metablock size, and thus expressible. */
- GetLengthCode(last_command->insert_len_,
- (size_t)((int)(last_command->copy_len_ & 0x1FFFFFF) +
- (int)(last_command->copy_len_ >> 25)),
- TO_BROTLI_BOOL((last_command->dist_prefix_ & 0x3FF) == 0),
- &last_command->cmd_prefix_);
- }
-}
-
-/*
- Processes the accumulated input data and sets |*out_size| to the length of
- the new output meta-block, or to zero if no new output meta-block has been
- created (in this case the processed input data is buffered internally).
- If |*out_size| is positive, |*output| points to the start of the output
- data. If |is_last| or |force_flush| is BROTLI_TRUE, an output meta-block is
- always created. However, until |is_last| is BROTLI_TRUE encoder may retain up
- to 7 bits of the last byte of output. To force encoder to dump the remaining
- bits use WriteMetadata() to append an empty meta-data block.
- Returns BROTLI_FALSE if the size of the input data is larger than
- input_block_size().
- */
-static BROTLI_BOOL EncodeData(
- BrotliEncoderState* s, const BROTLI_BOOL is_last,
- const BROTLI_BOOL force_flush, size_t* out_size, uint8_t** output) {
- const uint64_t delta = UnprocessedInputSize(s);
- uint32_t bytes = (uint32_t)delta;
- uint32_t wrapped_last_processed_pos = WrapPosition(s->last_processed_pos_);
- uint8_t* data;
- uint32_t mask;
- MemoryManager* m = &s->memory_manager_;
- ContextType literal_context_mode;
-
- data = s->ringbuffer_.buffer_;
- mask = s->ringbuffer_.mask_;
-
- /* Adding more blocks after "last" block is forbidden. */
- if (s->is_last_block_emitted_) return BROTLI_FALSE;
- if (is_last) s->is_last_block_emitted_ = BROTLI_TRUE;
-
- if (delta > InputBlockSize(s)) {
- return BROTLI_FALSE;
- }
- if (s->params.quality == FAST_TWO_PASS_COMPRESSION_QUALITY &&
- !s->command_buf_) {
- s->command_buf_ =
- BROTLI_ALLOC(m, uint32_t, kCompressFragmentTwoPassBlockSize);
- s->literal_buf_ =
- BROTLI_ALLOC(m, uint8_t, kCompressFragmentTwoPassBlockSize);
- if (BROTLI_IS_OOM(m)) return BROTLI_FALSE;
- }
-
- if (s->params.quality == FAST_ONE_PASS_COMPRESSION_QUALITY ||
- s->params.quality == FAST_TWO_PASS_COMPRESSION_QUALITY) {
- uint8_t* storage;
- size_t storage_ix = s->last_bytes_bits_;
- size_t table_size;
- int* table;
-
- if (delta == 0 && !is_last) {
- /* We have no new input data and we don't have to finish the stream, so
- nothing to do. */
- *out_size = 0;
- return BROTLI_TRUE;
- }
- storage = GetBrotliStorage(s, 2 * bytes + 503);
- if (BROTLI_IS_OOM(m)) return BROTLI_FALSE;
- storage[0] = (uint8_t)s->last_bytes_;
- storage[1] = (uint8_t)(s->last_bytes_ >> 8);
- table = GetHashTable(s, s->params.quality, bytes, &table_size);
- if (BROTLI_IS_OOM(m)) return BROTLI_FALSE;
- if (s->params.quality == FAST_ONE_PASS_COMPRESSION_QUALITY) {
- BrotliCompressFragmentFast(
- m, &data[wrapped_last_processed_pos & mask],
- bytes, is_last,
- table, table_size,
- s->cmd_depths_, s->cmd_bits_,
- &s->cmd_code_numbits_, s->cmd_code_,
- &storage_ix, storage);
- if (BROTLI_IS_OOM(m)) return BROTLI_FALSE;
- } else {
- BrotliCompressFragmentTwoPass(
- m, &data[wrapped_last_processed_pos & mask],
- bytes, is_last,
- s->command_buf_, s->literal_buf_,
- table, table_size,
- &storage_ix, storage);
- if (BROTLI_IS_OOM(m)) return BROTLI_FALSE;
- }
- s->last_bytes_ = (uint16_t)(storage[storage_ix >> 3]);
- s->last_bytes_bits_ = storage_ix & 7u;
- UpdateLastProcessedPos(s);
- *output = &storage[0];
- *out_size = storage_ix >> 3;
- return BROTLI_TRUE;
- }
-
- {
- /* Theoretical max number of commands is 1 per 2 bytes. */
- size_t newsize = s->num_commands_ + bytes / 2 + 1;
- if (newsize > s->cmd_alloc_size_) {
- Command* new_commands;
- /* Reserve a bit more memory to allow merging with a next block
- without reallocation: that would impact speed. */
- newsize += (bytes / 4) + 16;
- s->cmd_alloc_size_ = newsize;
- new_commands = BROTLI_ALLOC(m, Command, newsize);
- if (BROTLI_IS_OOM(m)) return BROTLI_FALSE;
- if (s->commands_) {
- memcpy(new_commands, s->commands_, sizeof(Command) * s->num_commands_);
- BROTLI_FREE(m, s->commands_);
- }
- s->commands_ = new_commands;
- }
- }
-
- InitOrStitchToPreviousBlock(m, &s->hasher_, data, mask, &s->params,
- wrapped_last_processed_pos, bytes, is_last);
-
- literal_context_mode = ChooseContextMode(
- &s->params, data, WrapPosition(s->last_flush_pos_),
- mask, (size_t)(s->input_pos_ - s->last_flush_pos_));
-
- if (BROTLI_IS_OOM(m)) return BROTLI_FALSE;
-
- if (s->num_commands_ && s->last_insert_len_ == 0) {
- ExtendLastCommand(s, &bytes, &wrapped_last_processed_pos);
- }
-
- if (s->params.quality == ZOPFLIFICATION_QUALITY) {
- BROTLI_DCHECK(s->params.hasher.type == 10);
- BrotliCreateZopfliBackwardReferences(m,
- bytes, wrapped_last_processed_pos,
- data, mask, &s->params, s->hasher_, s->dist_cache_,
- &s->last_insert_len_, &s->commands_[s->num_commands_],
- &s->num_commands_, &s->num_literals_);
- if (BROTLI_IS_OOM(m)) return BROTLI_FALSE;
- } else if (s->params.quality == HQ_ZOPFLIFICATION_QUALITY) {
- BROTLI_DCHECK(s->params.hasher.type == 10);
- BrotliCreateHqZopfliBackwardReferences(m,
- bytes, wrapped_last_processed_pos,
- data, mask, &s->params, s->hasher_, s->dist_cache_,
- &s->last_insert_len_, &s->commands_[s->num_commands_],
- &s->num_commands_, &s->num_literals_);
- if (BROTLI_IS_OOM(m)) return BROTLI_FALSE;
- } else {
- BrotliCreateBackwardReferences(
- bytes, wrapped_last_processed_pos,
- data, mask, &s->params, s->hasher_, s->dist_cache_,
- &s->last_insert_len_, &s->commands_[s->num_commands_],
- &s->num_commands_, &s->num_literals_);
- }
-
- {
- const size_t max_length = MaxMetablockSize(&s->params);
- const size_t max_literals = max_length / 8;
- const size_t max_commands = max_length / 8;
- const size_t processed_bytes = (size_t)(s->input_pos_ - s->last_flush_pos_);
- /* If maximal possible additional block doesn't fit metablock, flush now. */
- /* TODO: Postpone decision until next block arrives? */
- const BROTLI_BOOL next_input_fits_metablock = TO_BROTLI_BOOL(
- processed_bytes + InputBlockSize(s) <= max_length);
- /* If block splitting is not used, then flush as soon as there is some
- amount of commands / literals produced. */
- const BROTLI_BOOL should_flush = TO_BROTLI_BOOL(
- s->params.quality < MIN_QUALITY_FOR_BLOCK_SPLIT &&
- s->num_literals_ + s->num_commands_ >= MAX_NUM_DELAYED_SYMBOLS);
- if (!is_last && !force_flush && !should_flush &&
- next_input_fits_metablock &&
- s->num_literals_ < max_literals &&
- s->num_commands_ < max_commands) {
- /* Merge with next input block. Everything will happen later. */
- if (UpdateLastProcessedPos(s)) {
- HasherReset(s->hasher_);
- }
- *out_size = 0;
- return BROTLI_TRUE;
- }
- }
-
- /* Create the last insert-only command. */
- if (s->last_insert_len_ > 0) {
- InitInsertCommand(&s->commands_[s->num_commands_++], s->last_insert_len_);
- s->num_literals_ += s->last_insert_len_;
- s->last_insert_len_ = 0;
- }
-
- if (!is_last && s->input_pos_ == s->last_flush_pos_) {
- /* We have no new input data and we don't have to finish the stream, so
- nothing to do. */
- *out_size = 0;
- return BROTLI_TRUE;
- }
- BROTLI_DCHECK(s->input_pos_ >= s->last_flush_pos_);
- BROTLI_DCHECK(s->input_pos_ > s->last_flush_pos_ || is_last);
- BROTLI_DCHECK(s->input_pos_ - s->last_flush_pos_ <= 1u << 24);
- {
- const uint32_t metablock_size =
- (uint32_t)(s->input_pos_ - s->last_flush_pos_);
- uint8_t* storage = GetBrotliStorage(s, 2 * metablock_size + 503);
- size_t storage_ix = s->last_bytes_bits_;
- if (BROTLI_IS_OOM(m)) return BROTLI_FALSE;
- storage[0] = (uint8_t)s->last_bytes_;
- storage[1] = (uint8_t)(s->last_bytes_ >> 8);
- WriteMetaBlockInternal(
- m, data, mask, s->last_flush_pos_, metablock_size, is_last,
- literal_context_mode, &s->params, s->prev_byte_, s->prev_byte2_,
- s->num_literals_, s->num_commands_, s->commands_, s->saved_dist_cache_,
- s->dist_cache_, &storage_ix, storage);
- if (BROTLI_IS_OOM(m)) return BROTLI_FALSE;
- s->last_bytes_ = (uint16_t)(storage[storage_ix >> 3]);
- s->last_bytes_bits_ = storage_ix & 7u;
- s->last_flush_pos_ = s->input_pos_;
- if (UpdateLastProcessedPos(s)) {
- HasherReset(s->hasher_);
- }
- if (s->last_flush_pos_ > 0) {
- s->prev_byte_ = data[((uint32_t)s->last_flush_pos_ - 1) & mask];
- }
- if (s->last_flush_pos_ > 1) {
- s->prev_byte2_ = data[(uint32_t)(s->last_flush_pos_ - 2) & mask];
- }
- s->num_commands_ = 0;
- s->num_literals_ = 0;
- /* Save the state of the distance cache in case we need to restore it for
- emitting an uncompressed block. */
- memcpy(s->saved_dist_cache_, s->dist_cache_, sizeof(s->saved_dist_cache_));
- *output = &storage[0];
- *out_size = storage_ix >> 3;
- return BROTLI_TRUE;
- }
-}
-
-/* Dumps remaining output bits and metadata header to |header|.
- Returns number of produced bytes.
- REQUIRED: |header| should be 8-byte aligned and at least 16 bytes long.
- REQUIRED: |block_size| <= (1 << 24). */
-static size_t WriteMetadataHeader(
- BrotliEncoderState* s, const size_t block_size, uint8_t* header) {
- size_t storage_ix;
- storage_ix = s->last_bytes_bits_;
- header[0] = (uint8_t)s->last_bytes_;
- header[1] = (uint8_t)(s->last_bytes_ >> 8);
- s->last_bytes_ = 0;
- s->last_bytes_bits_ = 0;
-
- BrotliWriteBits(1, 0, &storage_ix, header);
- BrotliWriteBits(2, 3, &storage_ix, header);
- BrotliWriteBits(1, 0, &storage_ix, header);
- if (block_size == 0) {
- BrotliWriteBits(2, 0, &storage_ix, header);
- } else {
- uint32_t nbits = (block_size == 1) ? 0 :
- (Log2FloorNonZero((uint32_t)block_size - 1) + 1);
- uint32_t nbytes = (nbits + 7) / 8;
- BrotliWriteBits(2, nbytes, &storage_ix, header);
- BrotliWriteBits(8 * nbytes, block_size - 1, &storage_ix, header);
- }
- return (storage_ix + 7u) >> 3;
-}
-
-static BROTLI_BOOL BrotliCompressBufferQuality10(
- int lgwin, size_t input_size, const uint8_t* input_buffer,
- size_t* encoded_size, uint8_t* encoded_buffer) {
- MemoryManager memory_manager;
- MemoryManager* m = &memory_manager;
-
- const size_t mask = BROTLI_SIZE_MAX >> 1;
- const size_t max_backward_limit = BROTLI_MAX_BACKWARD_LIMIT(lgwin);
- int dist_cache[4] = { 4, 11, 15, 16 };
- int saved_dist_cache[4] = { 4, 11, 15, 16 };
- BROTLI_BOOL ok = BROTLI_TRUE;
- const size_t max_out_size = *encoded_size;
- size_t total_out_size = 0;
- uint16_t last_bytes;
- uint8_t last_bytes_bits;
- HasherHandle hasher = NULL;
-
- const size_t hasher_eff_size =
- BROTLI_MIN(size_t, input_size, max_backward_limit + BROTLI_WINDOW_GAP);
-
- BrotliEncoderParams params;
-
- const int lgmetablock = BROTLI_MIN(int, 24, lgwin + 1);
- size_t max_block_size;
- const size_t max_metablock_size = (size_t)1 << lgmetablock;
- const size_t max_literals_per_metablock = max_metablock_size / 8;
- const size_t max_commands_per_metablock = max_metablock_size / 8;
- size_t metablock_start = 0;
- uint8_t prev_byte = 0;
- uint8_t prev_byte2 = 0;
-
- BrotliEncoderInitParams(¶ms);
- params.quality = 10;
- params.lgwin = lgwin;
- if (lgwin > BROTLI_MAX_WINDOW_BITS) {
- params.large_window = BROTLI_TRUE;
- }
- SanitizeParams(¶ms);
- params.lgblock = ComputeLgBlock(¶ms);
- ChooseDistanceParams(¶ms);
- max_block_size = (size_t)1 << params.lgblock;
-
- BrotliInitMemoryManager(m, 0, 0, 0);
-
- BROTLI_DCHECK(input_size <= mask + 1);
- EncodeWindowBits(lgwin, params.large_window, &last_bytes, &last_bytes_bits);
- InitOrStitchToPreviousBlock(m, &hasher, input_buffer, mask, ¶ms,
- 0, hasher_eff_size, BROTLI_TRUE);
- if (BROTLI_IS_OOM(m)) goto oom;
-
- while (ok && metablock_start < input_size) {
- const size_t metablock_end =
- BROTLI_MIN(size_t, input_size, metablock_start + max_metablock_size);
- const size_t expected_num_commands =
- (metablock_end - metablock_start) / 12 + 16;
- Command* commands = 0;
- size_t num_commands = 0;
- size_t last_insert_len = 0;
- size_t num_literals = 0;
- size_t metablock_size = 0;
- size_t cmd_alloc_size = 0;
- BROTLI_BOOL is_last;
- uint8_t* storage;
- size_t storage_ix;
-
- ContextType literal_context_mode = ChooseContextMode(¶ms,
- input_buffer, metablock_start, mask, metablock_end - metablock_start);
-
- size_t block_start;
- for (block_start = metablock_start; block_start < metablock_end; ) {
- size_t block_size =
- BROTLI_MIN(size_t, metablock_end - block_start, max_block_size);
- ZopfliNode* nodes = BROTLI_ALLOC(m, ZopfliNode, block_size + 1);
- size_t path_size;
- size_t new_cmd_alloc_size;
- if (BROTLI_IS_OOM(m)) goto oom;
- BrotliInitZopfliNodes(nodes, block_size + 1);
- StitchToPreviousBlockH10(hasher, block_size, block_start,
- input_buffer, mask);
- path_size = BrotliZopfliComputeShortestPath(m,
- block_size, block_start, input_buffer, mask, ¶ms,
- max_backward_limit, dist_cache, hasher, nodes);
- if (BROTLI_IS_OOM(m)) goto oom;
- /* We allocate a command buffer in the first iteration of this loop that
- will be likely big enough for the whole metablock, so that for most
- inputs we will not have to reallocate in later iterations. We do the
- allocation here and not before the loop, because if the input is small,
- this will be allocated after the Zopfli cost model is freed, so this
- will not increase peak memory usage.
- TODO: If the first allocation is too small, increase command
- buffer size exponentially. */
- new_cmd_alloc_size = BROTLI_MAX(size_t, expected_num_commands,
- num_commands + path_size + 1);
- if (cmd_alloc_size != new_cmd_alloc_size) {
- Command* new_commands = BROTLI_ALLOC(m, Command, new_cmd_alloc_size);
- if (BROTLI_IS_OOM(m)) goto oom;
- cmd_alloc_size = new_cmd_alloc_size;
- if (commands) {
- memcpy(new_commands, commands, sizeof(Command) * num_commands);
- BROTLI_FREE(m, commands);
- }
- commands = new_commands;
- }
- BrotliZopfliCreateCommands(block_size, block_start, max_backward_limit,
- &nodes[0], dist_cache, &last_insert_len,
- ¶ms, &commands[num_commands],
- &num_literals);
- num_commands += path_size;
- block_start += block_size;
- metablock_size += block_size;
- BROTLI_FREE(m, nodes);
- if (num_literals > max_literals_per_metablock ||
- num_commands > max_commands_per_metablock) {
- break;
- }
- }
-
- if (last_insert_len > 0) {
- InitInsertCommand(&commands[num_commands++], last_insert_len);
- num_literals += last_insert_len;
- }
-
- is_last = TO_BROTLI_BOOL(metablock_start + metablock_size == input_size);
- storage = NULL;
- storage_ix = last_bytes_bits;
-
- if (metablock_size == 0) {
- /* Write the ISLAST and ISEMPTY bits. */
- storage = BROTLI_ALLOC(m, uint8_t, 16);
- if (BROTLI_IS_OOM(m)) goto oom;
- storage[0] = (uint8_t)last_bytes;
- storage[1] = (uint8_t)(last_bytes >> 8);
- BrotliWriteBits(2, 3, &storage_ix, storage);
- storage_ix = (storage_ix + 7u) & ~7u;
- } else if (!ShouldCompress(input_buffer, mask, metablock_start,
- metablock_size, num_literals, num_commands)) {
- /* Restore the distance cache, as its last update by
- CreateBackwardReferences is now unused. */
- memcpy(dist_cache, saved_dist_cache, 4 * sizeof(dist_cache[0]));
- storage = BROTLI_ALLOC(m, uint8_t, metablock_size + 16);
- if (BROTLI_IS_OOM(m)) goto oom;
- storage[0] = (uint8_t)last_bytes;
- storage[1] = (uint8_t)(last_bytes >> 8);
- BrotliStoreUncompressedMetaBlock(is_last, input_buffer,
- metablock_start, mask, metablock_size,
- &storage_ix, storage);
- } else {
- MetaBlockSplit mb;
- BrotliEncoderParams block_params = params;
- InitMetaBlockSplit(&mb);
- BrotliBuildMetaBlock(m, input_buffer, metablock_start, mask,
- &block_params,
- prev_byte, prev_byte2,
- commands, num_commands,
- literal_context_mode,
- &mb);
- if (BROTLI_IS_OOM(m)) goto oom;
- {
- /* The number of distance symbols effectively used for distance
- histograms. It might be less than distance alphabet size
- for "Large Window Brotli" (32-bit). */
- uint32_t num_effective_dist_codes = block_params.dist.alphabet_size;
- if (num_effective_dist_codes > BROTLI_NUM_HISTOGRAM_DISTANCE_SYMBOLS) {
- num_effective_dist_codes = BROTLI_NUM_HISTOGRAM_DISTANCE_SYMBOLS;
- }
- BrotliOptimizeHistograms(num_effective_dist_codes, &mb);
- }
- storage = BROTLI_ALLOC(m, uint8_t, 2 * metablock_size + 503);
- if (BROTLI_IS_OOM(m)) goto oom;
- storage[0] = (uint8_t)last_bytes;
- storage[1] = (uint8_t)(last_bytes >> 8);
- BrotliStoreMetaBlock(m, input_buffer, metablock_start, metablock_size,
- mask, prev_byte, prev_byte2,
- is_last,
- &block_params,
- literal_context_mode,
- commands, num_commands,
- &mb,
- &storage_ix, storage);
- if (BROTLI_IS_OOM(m)) goto oom;
- if (metablock_size + 4 < (storage_ix >> 3)) {
- /* Restore the distance cache and last byte. */
- memcpy(dist_cache, saved_dist_cache, 4 * sizeof(dist_cache[0]));
- storage[0] = (uint8_t)last_bytes;
- storage[1] = (uint8_t)(last_bytes >> 8);
- storage_ix = last_bytes_bits;
- BrotliStoreUncompressedMetaBlock(is_last, input_buffer,
- metablock_start, mask,
- metablock_size, &storage_ix, storage);
- }
- DestroyMetaBlockSplit(m, &mb);
- }
- last_bytes = (uint16_t)(storage[storage_ix >> 3]);
- last_bytes_bits = storage_ix & 7u;
- metablock_start += metablock_size;
- if (metablock_start < input_size) {
- prev_byte = input_buffer[metablock_start - 1];
- prev_byte2 = input_buffer[metablock_start - 2];
- }
- /* Save the state of the distance cache in case we need to restore it for
- emitting an uncompressed block. */
- memcpy(saved_dist_cache, dist_cache, 4 * sizeof(dist_cache[0]));
-
- {
- const size_t out_size = storage_ix >> 3;
- total_out_size += out_size;
- if (total_out_size <= max_out_size) {
- memcpy(encoded_buffer, storage, out_size);
- encoded_buffer += out_size;
- } else {
- ok = BROTLI_FALSE;
- }
- }
- BROTLI_FREE(m, storage);
- BROTLI_FREE(m, commands);
- }
-
- *encoded_size = total_out_size;
- DestroyHasher(m, &hasher);
- return ok;
-
-oom:
- BrotliWipeOutMemoryManager(m);
- return BROTLI_FALSE;
-}
-
-size_t BrotliEncoderMaxCompressedSize(size_t input_size) {
- /* [window bits / empty metadata] + N * [uncompressed] + [last empty] */
- size_t num_large_blocks = input_size >> 14;
- size_t overhead = 2 + (4 * num_large_blocks) + 3 + 1;
- size_t result = input_size + overhead;
- if (input_size == 0) return 2;
- return (result < input_size) ? 0 : result;
-}
-
-/* Wraps data to uncompressed brotli stream with minimal window size.
- |output| should point at region with at least BrotliEncoderMaxCompressedSize
- addressable bytes.
- Returns the length of stream. */
-static size_t MakeUncompressedStream(
- const uint8_t* input, size_t input_size, uint8_t* output) {
- size_t size = input_size;
- size_t result = 0;
- size_t offset = 0;
- if (input_size == 0) {
- output[0] = 6;
- return 1;
- }
- output[result++] = 0x21; /* window bits = 10, is_last = false */
- output[result++] = 0x03; /* empty metadata, padding */
- while (size > 0) {
- uint32_t nibbles = 0;
- uint32_t chunk_size;
- uint32_t bits;
- chunk_size = (size > (1u << 24)) ? (1u << 24) : (uint32_t)size;
- if (chunk_size > (1u << 16)) nibbles = (chunk_size > (1u << 20)) ? 2 : 1;
- bits =
- (nibbles << 1) | ((chunk_size - 1) << 3) | (1u << (19 + 4 * nibbles));
- output[result++] = (uint8_t)bits;
- output[result++] = (uint8_t)(bits >> 8);
- output[result++] = (uint8_t)(bits >> 16);
- if (nibbles == 2) output[result++] = (uint8_t)(bits >> 24);
- memcpy(&output[result], &input[offset], chunk_size);
- result += chunk_size;
- offset += chunk_size;
- size -= chunk_size;
- }
- output[result++] = 3;
- return result;
-}
-
-BROTLI_BOOL BrotliEncoderCompress(
- int quality, int lgwin, BrotliEncoderMode mode, size_t input_size,
- const uint8_t* input_buffer, size_t* encoded_size,
- uint8_t* encoded_buffer) {
- BrotliEncoderState* s;
- size_t out_size = *encoded_size;
- const uint8_t* input_start = input_buffer;
- uint8_t* output_start = encoded_buffer;
- size_t max_out_size = BrotliEncoderMaxCompressedSize(input_size);
- if (out_size == 0) {
- /* Output buffer needs at least one byte. */
- return BROTLI_FALSE;
- }
- if (input_size == 0) {
- /* Handle the special case of empty input. */
- *encoded_size = 1;
- *encoded_buffer = 6;
- return BROTLI_TRUE;
- }
- if (quality == 10) {
- /* TODO: Implement this direct path for all quality levels. */
- const int lg_win = BROTLI_MIN(int, BROTLI_LARGE_MAX_WINDOW_BITS,
- BROTLI_MAX(int, 16, lgwin));
- int ok = BrotliCompressBufferQuality10(lg_win, input_size, input_buffer,
- encoded_size, encoded_buffer);
- if (!ok || (max_out_size && *encoded_size > max_out_size)) {
- goto fallback;
- }
- return BROTLI_TRUE;
- }
-
- s = BrotliEncoderCreateInstance(0, 0, 0);
- if (!s) {
- return BROTLI_FALSE;
- } else {
- size_t available_in = input_size;
- const uint8_t* next_in = input_buffer;
- size_t available_out = *encoded_size;
- uint8_t* next_out = encoded_buffer;
- size_t total_out = 0;
- BROTLI_BOOL result = BROTLI_FALSE;
- BrotliEncoderSetParameter(s, BROTLI_PARAM_QUALITY, (uint32_t)quality);
- BrotliEncoderSetParameter(s, BROTLI_PARAM_LGWIN, (uint32_t)lgwin);
- BrotliEncoderSetParameter(s, BROTLI_PARAM_MODE, (uint32_t)mode);
- BrotliEncoderSetParameter(s, BROTLI_PARAM_SIZE_HINT, (uint32_t)input_size);
- if (lgwin > BROTLI_MAX_WINDOW_BITS) {
- BrotliEncoderSetParameter(s, BROTLI_PARAM_LARGE_WINDOW, BROTLI_TRUE);
- }
- result = BrotliEncoderCompressStream(s, BROTLI_OPERATION_FINISH,
- &available_in, &next_in, &available_out, &next_out, &total_out);
- if (!BrotliEncoderIsFinished(s)) result = 0;
- *encoded_size = total_out;
- BrotliEncoderDestroyInstance(s);
- if (!result || (max_out_size && *encoded_size > max_out_size)) {
- goto fallback;
- }
- return BROTLI_TRUE;
- }
-fallback:
- *encoded_size = 0;
- if (!max_out_size) return BROTLI_FALSE;
- if (out_size >= max_out_size) {
- *encoded_size =
- MakeUncompressedStream(input_start, input_size, output_start);
- return BROTLI_TRUE;
- }
- return BROTLI_FALSE;
-}
-
-static void InjectBytePaddingBlock(BrotliEncoderState* s) {
- uint32_t seal = s->last_bytes_;
- size_t seal_bits = s->last_bytes_bits_;
- uint8_t* destination;
- s->last_bytes_ = 0;
- s->last_bytes_bits_ = 0;
- /* is_last = 0, data_nibbles = 11, reserved = 0, meta_nibbles = 00 */
- seal |= 0x6u << seal_bits;
- seal_bits += 6;
- /* If we have already created storage, then append to it.
- Storage is valid until next block is being compressed. */
- if (s->next_out_) {
- destination = s->next_out_ + s->available_out_;
- } else {
- destination = s->tiny_buf_.u8;
- s->next_out_ = destination;
- }
- destination[0] = (uint8_t)seal;
- if (seal_bits > 8) destination[1] = (uint8_t)(seal >> 8);
- if (seal_bits > 16) destination[2] = (uint8_t)(seal >> 16);
- s->available_out_ += (seal_bits + 7) >> 3;
-}
-
-/* Injects padding bits or pushes compressed data to output.
- Returns false if nothing is done. */
-static BROTLI_BOOL InjectFlushOrPushOutput(BrotliEncoderState* s,
- size_t* available_out, uint8_t** next_out, size_t* total_out) {
- if (s->stream_state_ == BROTLI_STREAM_FLUSH_REQUESTED &&
- s->last_bytes_bits_ != 0) {
- InjectBytePaddingBlock(s);
- return BROTLI_TRUE;
- }
-
- if (s->available_out_ != 0 && *available_out != 0) {
- size_t copy_output_size =
- BROTLI_MIN(size_t, s->available_out_, *available_out);
- memcpy(*next_out, s->next_out_, copy_output_size);
- *next_out += copy_output_size;
- *available_out -= copy_output_size;
- s->next_out_ += copy_output_size;
- s->available_out_ -= copy_output_size;
- s->total_out_ += copy_output_size;
- if (total_out) *total_out = s->total_out_;
- return BROTLI_TRUE;
- }
-
- return BROTLI_FALSE;
-}
-
-static void CheckFlushComplete(BrotliEncoderState* s) {
- if (s->stream_state_ == BROTLI_STREAM_FLUSH_REQUESTED &&
- s->available_out_ == 0) {
- s->stream_state_ = BROTLI_STREAM_PROCESSING;
- s->next_out_ = 0;
- }
-}
-
-static BROTLI_BOOL BrotliEncoderCompressStreamFast(
- BrotliEncoderState* s, BrotliEncoderOperation op, size_t* available_in,
- const uint8_t** next_in, size_t* available_out, uint8_t** next_out,
- size_t* total_out) {
- const size_t block_size_limit = (size_t)1 << s->params.lgwin;
- const size_t buf_size = BROTLI_MIN(size_t, kCompressFragmentTwoPassBlockSize,
- BROTLI_MIN(size_t, *available_in, block_size_limit));
- uint32_t* tmp_command_buf = NULL;
- uint32_t* command_buf = NULL;
- uint8_t* tmp_literal_buf = NULL;
- uint8_t* literal_buf = NULL;
- MemoryManager* m = &s->memory_manager_;
- if (s->params.quality != FAST_ONE_PASS_COMPRESSION_QUALITY &&
- s->params.quality != FAST_TWO_PASS_COMPRESSION_QUALITY) {
- return BROTLI_FALSE;
- }
- if (s->params.quality == FAST_TWO_PASS_COMPRESSION_QUALITY) {
- if (!s->command_buf_ && buf_size == kCompressFragmentTwoPassBlockSize) {
- s->command_buf_ =
- BROTLI_ALLOC(m, uint32_t, kCompressFragmentTwoPassBlockSize);
- s->literal_buf_ =
- BROTLI_ALLOC(m, uint8_t, kCompressFragmentTwoPassBlockSize);
- if (BROTLI_IS_OOM(m)) return BROTLI_FALSE;
- }
- if (s->command_buf_) {
- command_buf = s->command_buf_;
- literal_buf = s->literal_buf_;
- } else {
- tmp_command_buf = BROTLI_ALLOC(m, uint32_t, buf_size);
- tmp_literal_buf = BROTLI_ALLOC(m, uint8_t, buf_size);
- if (BROTLI_IS_OOM(m)) return BROTLI_FALSE;
- command_buf = tmp_command_buf;
- literal_buf = tmp_literal_buf;
- }
- }
-
- while (BROTLI_TRUE) {
- if (InjectFlushOrPushOutput(s, available_out, next_out, total_out)) {
- continue;
- }
-
- /* Compress block only when internal output buffer is empty, stream is not
- finished, there is no pending flush request, and there is either
- additional input or pending operation. */
- if (s->available_out_ == 0 &&
- s->stream_state_ == BROTLI_STREAM_PROCESSING &&
- (*available_in != 0 || op != BROTLI_OPERATION_PROCESS)) {
- size_t block_size = BROTLI_MIN(size_t, block_size_limit, *available_in);
- BROTLI_BOOL is_last =
- (*available_in == block_size) && (op == BROTLI_OPERATION_FINISH);
- BROTLI_BOOL force_flush =
- (*available_in == block_size) && (op == BROTLI_OPERATION_FLUSH);
- size_t max_out_size = 2 * block_size + 503;
- BROTLI_BOOL inplace = BROTLI_TRUE;
- uint8_t* storage = NULL;
- size_t storage_ix = s->last_bytes_bits_;
- size_t table_size;
- int* table;
-
- if (force_flush && block_size == 0) {
- s->stream_state_ = BROTLI_STREAM_FLUSH_REQUESTED;
- continue;
- }
- if (max_out_size <= *available_out) {
- storage = *next_out;
- } else {
- inplace = BROTLI_FALSE;
- storage = GetBrotliStorage(s, max_out_size);
- if (BROTLI_IS_OOM(m)) return BROTLI_FALSE;
- }
- storage[0] = (uint8_t)s->last_bytes_;
- storage[1] = (uint8_t)(s->last_bytes_ >> 8);
- table = GetHashTable(s, s->params.quality, block_size, &table_size);
- if (BROTLI_IS_OOM(m)) return BROTLI_FALSE;
-
- if (s->params.quality == FAST_ONE_PASS_COMPRESSION_QUALITY) {
- BrotliCompressFragmentFast(m, *next_in, block_size, is_last, table,
- table_size, s->cmd_depths_, s->cmd_bits_, &s->cmd_code_numbits_,
- s->cmd_code_, &storage_ix, storage);
- if (BROTLI_IS_OOM(m)) return BROTLI_FALSE;
- } else {
- BrotliCompressFragmentTwoPass(m, *next_in, block_size, is_last,
- command_buf, literal_buf, table, table_size,
- &storage_ix, storage);
- if (BROTLI_IS_OOM(m)) return BROTLI_FALSE;
- }
- *next_in += block_size;
- *available_in -= block_size;
- if (inplace) {
- size_t out_bytes = storage_ix >> 3;
- BROTLI_DCHECK(out_bytes <= *available_out);
- BROTLI_DCHECK((storage_ix & 7) == 0 || out_bytes < *available_out);
- *next_out += out_bytes;
- *available_out -= out_bytes;
- s->total_out_ += out_bytes;
- if (total_out) *total_out = s->total_out_;
- } else {
- size_t out_bytes = storage_ix >> 3;
- s->next_out_ = storage;
- s->available_out_ = out_bytes;
- }
- s->last_bytes_ = (uint16_t)(storage[storage_ix >> 3]);
- s->last_bytes_bits_ = storage_ix & 7u;
-
- if (force_flush) s->stream_state_ = BROTLI_STREAM_FLUSH_REQUESTED;
- if (is_last) s->stream_state_ = BROTLI_STREAM_FINISHED;
- continue;
- }
- break;
- }
- BROTLI_FREE(m, tmp_command_buf);
- BROTLI_FREE(m, tmp_literal_buf);
- CheckFlushComplete(s);
- return BROTLI_TRUE;
-}
-
-static BROTLI_BOOL ProcessMetadata(
- BrotliEncoderState* s, size_t* available_in, const uint8_t** next_in,
- size_t* available_out, uint8_t** next_out, size_t* total_out) {
- if (*available_in > (1u << 24)) return BROTLI_FALSE;
- /* Switch to metadata block workflow, if required. */
- if (s->stream_state_ == BROTLI_STREAM_PROCESSING) {
- s->remaining_metadata_bytes_ = (uint32_t)*available_in;
- s->stream_state_ = BROTLI_STREAM_METADATA_HEAD;
- }
- if (s->stream_state_ != BROTLI_STREAM_METADATA_HEAD &&
- s->stream_state_ != BROTLI_STREAM_METADATA_BODY) {
- return BROTLI_FALSE;
- }
-
- while (BROTLI_TRUE) {
- if (InjectFlushOrPushOutput(s, available_out, next_out, total_out)) {
- continue;
- }
- if (s->available_out_ != 0) break;
-
- if (s->input_pos_ != s->last_flush_pos_) {
- BROTLI_BOOL result = EncodeData(s, BROTLI_FALSE, BROTLI_TRUE,
- &s->available_out_, &s->next_out_);
- if (!result) return BROTLI_FALSE;
- continue;
- }
-
- if (s->stream_state_ == BROTLI_STREAM_METADATA_HEAD) {
- s->next_out_ = s->tiny_buf_.u8;
- s->available_out_ =
- WriteMetadataHeader(s, s->remaining_metadata_bytes_, s->next_out_);
- s->stream_state_ = BROTLI_STREAM_METADATA_BODY;
- continue;
- } else {
- /* Exit workflow only when there is no more input and no more output.
- Otherwise client may continue producing empty metadata blocks. */
- if (s->remaining_metadata_bytes_ == 0) {
- s->remaining_metadata_bytes_ = BROTLI_UINT32_MAX;
- s->stream_state_ = BROTLI_STREAM_PROCESSING;
- break;
- }
- if (*available_out) {
- /* Directly copy input to output. */
- uint32_t copy = (uint32_t)BROTLI_MIN(
- size_t, s->remaining_metadata_bytes_, *available_out);
- memcpy(*next_out, *next_in, copy);
- *next_in += copy;
- *available_in -= copy;
- s->remaining_metadata_bytes_ -= copy;
- *next_out += copy;
- *available_out -= copy;
- } else {
- /* This guarantees progress in "TakeOutput" workflow. */
- uint32_t copy = BROTLI_MIN(uint32_t, s->remaining_metadata_bytes_, 16);
- s->next_out_ = s->tiny_buf_.u8;
- memcpy(s->next_out_, *next_in, copy);
- *next_in += copy;
- *available_in -= copy;
- s->remaining_metadata_bytes_ -= copy;
- s->available_out_ = copy;
- }
- continue;
- }
- }
-
- return BROTLI_TRUE;
-}
-
-static void UpdateSizeHint(BrotliEncoderState* s, size_t available_in) {
- if (s->params.size_hint == 0) {
- uint64_t delta = UnprocessedInputSize(s);
- uint64_t tail = available_in;
- uint32_t limit = 1u << 30;
- uint32_t total;
- if ((delta >= limit) || (tail >= limit) || ((delta + tail) >= limit)) {
- total = limit;
- } else {
- total = (uint32_t)(delta + tail);
- }
- s->params.size_hint = total;
- }
-}
-
-BROTLI_BOOL BrotliEncoderCompressStream(
- BrotliEncoderState* s, BrotliEncoderOperation op, size_t* available_in,
- const uint8_t** next_in, size_t* available_out,uint8_t** next_out,
- size_t* total_out) {
- if (!EnsureInitialized(s)) return BROTLI_FALSE;
-
- /* Unfinished metadata block; check requirements. */
- if (s->remaining_metadata_bytes_ != BROTLI_UINT32_MAX) {
- if (*available_in != s->remaining_metadata_bytes_) return BROTLI_FALSE;
- if (op != BROTLI_OPERATION_EMIT_METADATA) return BROTLI_FALSE;
- }
-
- if (op == BROTLI_OPERATION_EMIT_METADATA) {
- UpdateSizeHint(s, 0); /* First data metablock might be emitted here. */
- return ProcessMetadata(
- s, available_in, next_in, available_out, next_out, total_out);
- }
-
- if (s->stream_state_ == BROTLI_STREAM_METADATA_HEAD ||
- s->stream_state_ == BROTLI_STREAM_METADATA_BODY) {
- return BROTLI_FALSE;
- }
-
- if (s->stream_state_ != BROTLI_STREAM_PROCESSING && *available_in != 0) {
- return BROTLI_FALSE;
- }
- if (s->params.quality == FAST_ONE_PASS_COMPRESSION_QUALITY ||
- s->params.quality == FAST_TWO_PASS_COMPRESSION_QUALITY) {
- return BrotliEncoderCompressStreamFast(s, op, available_in, next_in,
- available_out, next_out, total_out);
- }
- while (BROTLI_TRUE) {
- size_t remaining_block_size = RemainingInputBlockSize(s);
-
- if (remaining_block_size != 0 && *available_in != 0) {
- size_t copy_input_size =
- BROTLI_MIN(size_t, remaining_block_size, *available_in);
- CopyInputToRingBuffer(s, copy_input_size, *next_in);
- *next_in += copy_input_size;
- *available_in -= copy_input_size;
- continue;
- }
-
- if (InjectFlushOrPushOutput(s, available_out, next_out, total_out)) {
- continue;
- }
-
- /* Compress data only when internal output buffer is empty, stream is not
- finished and there is no pending flush request. */
- if (s->available_out_ == 0 &&
- s->stream_state_ == BROTLI_STREAM_PROCESSING) {
- if (remaining_block_size == 0 || op != BROTLI_OPERATION_PROCESS) {
- BROTLI_BOOL is_last = TO_BROTLI_BOOL(
- (*available_in == 0) && op == BROTLI_OPERATION_FINISH);
- BROTLI_BOOL force_flush = TO_BROTLI_BOOL(
- (*available_in == 0) && op == BROTLI_OPERATION_FLUSH);
- BROTLI_BOOL result;
- UpdateSizeHint(s, *available_in);
- result = EncodeData(s, is_last, force_flush,
- &s->available_out_, &s->next_out_);
- if (!result) return BROTLI_FALSE;
- if (force_flush) s->stream_state_ = BROTLI_STREAM_FLUSH_REQUESTED;
- if (is_last) s->stream_state_ = BROTLI_STREAM_FINISHED;
- continue;
- }
- }
- break;
- }
- CheckFlushComplete(s);
- return BROTLI_TRUE;
-}
-
-BROTLI_BOOL BrotliEncoderIsFinished(BrotliEncoderState* s) {
- return TO_BROTLI_BOOL(s->stream_state_ == BROTLI_STREAM_FINISHED &&
- !BrotliEncoderHasMoreOutput(s));
-}
-
-BROTLI_BOOL BrotliEncoderHasMoreOutput(BrotliEncoderState* s) {
- return TO_BROTLI_BOOL(s->available_out_ != 0);
-}
-
-const uint8_t* BrotliEncoderTakeOutput(BrotliEncoderState* s, size_t* size) {
- size_t consumed_size = s->available_out_;
- uint8_t* result = s->next_out_;
- if (*size) {
- consumed_size = BROTLI_MIN(size_t, *size, s->available_out_);
- }
- if (consumed_size) {
- s->next_out_ += consumed_size;
- s->available_out_ -= consumed_size;
- s->total_out_ += consumed_size;
- CheckFlushComplete(s);
- *size = consumed_size;
- } else {
- *size = 0;
- result = 0;
- }
- return result;
-}
-
-uint32_t BrotliEncoderVersion(void) {
- return BROTLI_VERSION;
-}
-
-#if defined(__cplusplus) || defined(c_plusplus)
-} /* extern "C" */
-#endif
diff --git a/BaseTools/Source/C/BrotliCompress/enc/encoder_dict.c b/BaseTools/Source/C/BrotliCompress/enc/encoder_dict.c
deleted file mode 100644
index 956d50c0b578..000000000000
--- a/BaseTools/Source/C/BrotliCompress/enc/encoder_dict.c
+++ /dev/null
@@ -1,32 +0,0 @@
-/* Copyright 2017 Google Inc. All Rights Reserved.
-
- Distributed under MIT license.
- See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
-*/
-
-#include "./encoder_dict.h"
-
-#include "../common/dictionary.h"
-#include "../common/transform.h"
-#include "./dictionary_hash.h"
-#include "./hash.h"
-
-#if defined(__cplusplus) || defined(c_plusplus)
-extern "C" {
-#endif
-
-void BrotliInitEncoderDictionary(BrotliEncoderDictionary* dict) {
- dict->words = BrotliGetDictionary();
-
- dict->hash_table = kStaticDictionaryHash;
- dict->buckets = kStaticDictionaryBuckets;
- dict->dict_words = kStaticDictionaryWords;
-
- dict->cutoffTransformsCount = kCutoffTransformsCount;
- dict->cutoffTransforms = kCutoffTransforms;
-
-}
-
-#if defined(__cplusplus) || defined(c_plusplus)
-} /* extern "C" */
-#endif
diff --git a/BaseTools/Source/C/BrotliCompress/enc/entropy_encode.c b/BaseTools/Source/C/BrotliCompress/enc/entropy_encode.c
deleted file mode 100644
index e3f0d2edaabe..000000000000
--- a/BaseTools/Source/C/BrotliCompress/enc/entropy_encode.c
+++ /dev/null
@@ -1,501 +0,0 @@
-/* Copyright 2010 Google Inc. All Rights Reserved.
-
- Distributed under MIT license.
- See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
-*/
-
-/* Entropy encoding (Huffman) utilities. */
-
-#include "./entropy_encode.h"
-
-#include <string.h> /* memset */
-
-#include "../common/constants.h"
-#include "../common/platform.h"
-#include <brotli/types.h>
-
-#if defined(__cplusplus) || defined(c_plusplus)
-extern "C" {
-#endif
-
-BROTLI_BOOL BrotliSetDepth(
- int p0, HuffmanTree* pool, uint8_t* depth, int max_depth) {
- int stack[16];
- int level = 0;
- int p = p0;
- BROTLI_DCHECK(max_depth <= 15);
- stack[0] = -1;
- while (BROTLI_TRUE) {
- if (pool[p].index_left_ >= 0) {
- level++;
- if (level > max_depth) return BROTLI_FALSE;
- stack[level] = pool[p].index_right_or_value_;
- p = pool[p].index_left_;
- continue;
- } else {
- depth[pool[p].index_right_or_value_] = (uint8_t)level;
- }
- while (level >= 0 && stack[level] == -1) level--;
- if (level < 0) return BROTLI_TRUE;
- p = stack[level];
- stack[level] = -1;
- }
-}
-
-/* Sort the root nodes, least popular first. */
-static BROTLI_INLINE BROTLI_BOOL SortHuffmanTree(
- const HuffmanTree* v0, const HuffmanTree* v1) {
- if (v0->total_count_ != v1->total_count_) {
- return TO_BROTLI_BOOL(v0->total_count_ < v1->total_count_);
- }
- return TO_BROTLI_BOOL(v0->index_right_or_value_ > v1->index_right_or_value_);
-}
-
-/* This function will create a Huffman tree.
-
- The catch here is that the tree cannot be arbitrarily deep.
- Brotli specifies a maximum depth of 15 bits for "code trees"
- and 7 bits for "code length code trees."
-
- count_limit is the value that is to be faked as the minimum value
- and this minimum value is raised until the tree matches the
- maximum length requirement.
-
- This algorithm is not of excellent performance for very long data blocks,
- especially when population counts are longer than 2**tree_limit, but
- we are not planning to use this with extremely long blocks.
-
- See http://en.wikipedia.org/wiki/Huffman_coding */
-void BrotliCreateHuffmanTree(const uint32_t* data,
- const size_t length,
- const int tree_limit,
- HuffmanTree* tree,
- uint8_t* depth) {
- uint32_t count_limit;
- HuffmanTree sentinel;
- InitHuffmanTree(&sentinel, BROTLI_UINT32_MAX, -1, -1);
- /* For block sizes below 64 kB, we never need to do a second iteration
- of this loop. Probably all of our block sizes will be smaller than
- that, so this loop is mostly of academic interest. If we actually
- would need this, we would be better off with the Katajainen algorithm. */
- for (count_limit = 1; ; count_limit *= 2) {
- size_t n = 0;
- size_t i;
- size_t j;
- size_t k;
- for (i = length; i != 0;) {
- --i;
- if (data[i]) {
- const uint32_t count = BROTLI_MAX(uint32_t, data[i], count_limit);
- InitHuffmanTree(&tree[n++], count, -1, (int16_t)i);
- }
- }
-
- if (n == 1) {
- depth[tree[0].index_right_or_value_] = 1; /* Only one element. */
- break;
- }
-
- SortHuffmanTreeItems(tree, n, SortHuffmanTree);
-
- /* The nodes are:
- [0, n): the sorted leaf nodes that we start with.
- [n]: we add a sentinel here.
- [n + 1, 2n): new parent nodes are added here, starting from
- (n+1). These are naturally in ascending order.
- [2n]: we add a sentinel at the end as well.
- There will be (2n+1) elements at the end. */
- tree[n] = sentinel;
- tree[n + 1] = sentinel;
-
- i = 0; /* Points to the next leaf node. */
- j = n + 1; /* Points to the next non-leaf node. */
- for (k = n - 1; k != 0; --k) {
- size_t left, right;
- if (tree[i].total_count_ <= tree[j].total_count_) {
- left = i;
- ++i;
- } else {
- left = j;
- ++j;
- }
- if (tree[i].total_count_ <= tree[j].total_count_) {
- right = i;
- ++i;
- } else {
- right = j;
- ++j;
- }
-
- {
- /* The sentinel node becomes the parent node. */
- size_t j_end = 2 * n - k;
- tree[j_end].total_count_ =
- tree[left].total_count_ + tree[right].total_count_;
- tree[j_end].index_left_ = (int16_t)left;
- tree[j_end].index_right_or_value_ = (int16_t)right;
-
- /* Add back the last sentinel node. */
- tree[j_end + 1] = sentinel;
- }
- }
- if (BrotliSetDepth((int)(2 * n - 1), &tree[0], depth, tree_limit)) {
- /* We need to pack the Huffman tree in tree_limit bits. If this was not
- successful, add fake entities to the lowest values and retry. */
- break;
- }
- }
-}
-
-static void Reverse(uint8_t* v, size_t start, size_t end) {
- --end;
- while (start < end) {
- uint8_t tmp = v[start];
- v[start] = v[end];
- v[end] = tmp;
- ++start;
- --end;
- }
-}
-
-static void BrotliWriteHuffmanTreeRepetitions(
- const uint8_t previous_value,
- const uint8_t value,
- size_t repetitions,
- size_t* tree_size,
- uint8_t* tree,
- uint8_t* extra_bits_data) {
- BROTLI_DCHECK(repetitions > 0);
- if (previous_value != value) {
- tree[*tree_size] = value;
- extra_bits_data[*tree_size] = 0;
- ++(*tree_size);
- --repetitions;
- }
- if (repetitions == 7) {
- tree[*tree_size] = value;
- extra_bits_data[*tree_size] = 0;
- ++(*tree_size);
- --repetitions;
- }
- if (repetitions < 3) {
- size_t i;
- for (i = 0; i < repetitions; ++i) {
- tree[*tree_size] = value;
- extra_bits_data[*tree_size] = 0;
- ++(*tree_size);
- }
- } else {
- size_t start = *tree_size;
- repetitions -= 3;
- while (BROTLI_TRUE) {
- tree[*tree_size] = BROTLI_REPEAT_PREVIOUS_CODE_LENGTH;
- extra_bits_data[*tree_size] = repetitions & 0x3;
- ++(*tree_size);
- repetitions >>= 2;
- if (repetitions == 0) {
- break;
- }
- --repetitions;
- }
- Reverse(tree, start, *tree_size);
- Reverse(extra_bits_data, start, *tree_size);
- }
-}
-
-static void BrotliWriteHuffmanTreeRepetitionsZeros(
- size_t repetitions,
- size_t* tree_size,
- uint8_t* tree,
- uint8_t* extra_bits_data) {
- if (repetitions == 11) {
- tree[*tree_size] = 0;
- extra_bits_data[*tree_size] = 0;
- ++(*tree_size);
- --repetitions;
- }
- if (repetitions < 3) {
- size_t i;
- for (i = 0; i < repetitions; ++i) {
- tree[*tree_size] = 0;
- extra_bits_data[*tree_size] = 0;
- ++(*tree_size);
- }
- } else {
- size_t start = *tree_size;
- repetitions -= 3;
- while (BROTLI_TRUE) {
- tree[*tree_size] = BROTLI_REPEAT_ZERO_CODE_LENGTH;
- extra_bits_data[*tree_size] = repetitions & 0x7;
- ++(*tree_size);
- repetitions >>= 3;
- if (repetitions == 0) {
- break;
- }
- --repetitions;
- }
- Reverse(tree, start, *tree_size);
- Reverse(extra_bits_data, start, *tree_size);
- }
-}
-
-void BrotliOptimizeHuffmanCountsForRle(size_t length, uint32_t* counts,
- uint8_t* good_for_rle) {
- size_t nonzero_count = 0;
- size_t stride;
- size_t limit;
- size_t sum;
- const size_t streak_limit = 1240;
- /* Let's make the Huffman code more compatible with RLE encoding. */
- size_t i;
- for (i = 0; i < length; i++) {
- if (counts[i]) {
- ++nonzero_count;
- }
- }
- if (nonzero_count < 16) {
- return;
- }
- while (length != 0 && counts[length - 1] == 0) {
- --length;
- }
- if (length == 0) {
- return; /* All zeros. */
- }
- /* Now counts[0..length - 1] does not have trailing zeros. */
- {
- size_t nonzeros = 0;
- uint32_t smallest_nonzero = 1 << 30;
- for (i = 0; i < length; ++i) {
- if (counts[i] != 0) {
- ++nonzeros;
- if (smallest_nonzero > counts[i]) {
- smallest_nonzero = counts[i];
- }
- }
- }
- if (nonzeros < 5) {
- /* Small histogram will model it well. */
- return;
- }
- if (smallest_nonzero < 4) {
- size_t zeros = length - nonzeros;
- if (zeros < 6) {
- for (i = 1; i < length - 1; ++i) {
- if (counts[i - 1] != 0 && counts[i] == 0 && counts[i + 1] != 0) {
- counts[i] = 1;
- }
- }
- }
- }
- if (nonzeros < 28) {
- return;
- }
- }
- /* 2) Let's mark all population counts that already can be encoded
- with an RLE code. */
- memset(good_for_rle, 0, length);
- {
- /* Let's not spoil any of the existing good RLE codes.
- Mark any seq of 0's that is longer as 5 as a good_for_rle.
- Mark any seq of non-0's that is longer as 7 as a good_for_rle. */
- uint32_t symbol = counts[0];
- size_t step = 0;
- for (i = 0; i <= length; ++i) {
- if (i == length || counts[i] != symbol) {
- if ((symbol == 0 && step >= 5) ||
- (symbol != 0 && step >= 7)) {
- size_t k;
- for (k = 0; k < step; ++k) {
- good_for_rle[i - k - 1] = 1;
- }
- }
- step = 1;
- if (i != length) {
- symbol = counts[i];
- }
- } else {
- ++step;
- }
- }
- }
- /* 3) Let's replace those population counts that lead to more RLE codes.
- Math here is in 24.8 fixed point representation. */
- stride = 0;
- limit = 256 * (counts[0] + counts[1] + counts[2]) / 3 + 420;
- sum = 0;
- for (i = 0; i <= length; ++i) {
- if (i == length || good_for_rle[i] ||
- (i != 0 && good_for_rle[i - 1]) ||
- (256 * counts[i] - limit + streak_limit) >= 2 * streak_limit) {
- if (stride >= 4 || (stride >= 3 && sum == 0)) {
- size_t k;
- /* The stride must end, collapse what we have, if we have enough (4). */
- size_t count = (sum + stride / 2) / stride;
- if (count == 0) {
- count = 1;
- }
- if (sum == 0) {
- /* Don't make an all zeros stride to be upgraded to ones. */
- count = 0;
- }
- for (k = 0; k < stride; ++k) {
- /* We don't want to change value at counts[i],
- that is already belonging to the next stride. Thus - 1. */
- counts[i - k - 1] = (uint32_t)count;
- }
- }
- stride = 0;
- sum = 0;
- if (i < length - 2) {
- /* All interesting strides have a count of at least 4, */
- /* at least when non-zeros. */
- limit = 256 * (counts[i] + counts[i + 1] + counts[i + 2]) / 3 + 420;
- } else if (i < length) {
- limit = 256 * counts[i];
- } else {
- limit = 0;
- }
- }
- ++stride;
- if (i != length) {
- sum += counts[i];
- if (stride >= 4) {
- limit = (256 * sum + stride / 2) / stride;
- }
- if (stride == 4) {
- limit += 120;
- }
- }
- }
-}
-
-static void DecideOverRleUse(const uint8_t* depth, const size_t length,
- BROTLI_BOOL* use_rle_for_non_zero,
- BROTLI_BOOL* use_rle_for_zero) {
- size_t total_reps_zero = 0;
- size_t total_reps_non_zero = 0;
- size_t count_reps_zero = 1;
- size_t count_reps_non_zero = 1;
- size_t i;
- for (i = 0; i < length;) {
- const uint8_t value = depth[i];
- size_t reps = 1;
- size_t k;
- for (k = i + 1; k < length && depth[k] == value; ++k) {
- ++reps;
- }
- if (reps >= 3 && value == 0) {
- total_reps_zero += reps;
- ++count_reps_zero;
- }
- if (reps >= 4 && value != 0) {
- total_reps_non_zero += reps;
- ++count_reps_non_zero;
- }
- i += reps;
- }
- *use_rle_for_non_zero =
- TO_BROTLI_BOOL(total_reps_non_zero > count_reps_non_zero * 2);
- *use_rle_for_zero = TO_BROTLI_BOOL(total_reps_zero > count_reps_zero * 2);
-}
-
-void BrotliWriteHuffmanTree(const uint8_t* depth,
- size_t length,
- size_t* tree_size,
- uint8_t* tree,
- uint8_t* extra_bits_data) {
- uint8_t previous_value = BROTLI_INITIAL_REPEATED_CODE_LENGTH;
- size_t i;
- BROTLI_BOOL use_rle_for_non_zero = BROTLI_FALSE;
- BROTLI_BOOL use_rle_for_zero = BROTLI_FALSE;
-
- /* Throw away trailing zeros. */
- size_t new_length = length;
- for (i = 0; i < length; ++i) {
- if (depth[length - i - 1] == 0) {
- --new_length;
- } else {
- break;
- }
- }
-
- /* First gather statistics on if it is a good idea to do RLE. */
- if (length > 50) {
- /* Find RLE coding for longer codes.
- Shorter codes seem not to benefit from RLE. */
- DecideOverRleUse(depth, new_length,
- &use_rle_for_non_zero, &use_rle_for_zero);
- }
-
- /* Actual RLE coding. */
- for (i = 0; i < new_length;) {
- const uint8_t value = depth[i];
- size_t reps = 1;
- if ((value != 0 && use_rle_for_non_zero) ||
- (value == 0 && use_rle_for_zero)) {
- size_t k;
- for (k = i + 1; k < new_length && depth[k] == value; ++k) {
- ++reps;
- }
- }
- if (value == 0) {
- BrotliWriteHuffmanTreeRepetitionsZeros(
- reps, tree_size, tree, extra_bits_data);
- } else {
- BrotliWriteHuffmanTreeRepetitions(previous_value,
- value, reps, tree_size,
- tree, extra_bits_data);
- previous_value = value;
- }
- i += reps;
- }
-}
-
-static uint16_t BrotliReverseBits(size_t num_bits, uint16_t bits) {
- static const size_t kLut[16] = { /* Pre-reversed 4-bit values. */
- 0x00, 0x08, 0x04, 0x0C, 0x02, 0x0A, 0x06, 0x0E,
- 0x01, 0x09, 0x05, 0x0D, 0x03, 0x0B, 0x07, 0x0F
- };
- size_t retval = kLut[bits & 0x0F];
- size_t i;
- for (i = 4; i < num_bits; i += 4) {
- retval <<= 4;
- bits = (uint16_t)(bits >> 4);
- retval |= kLut[bits & 0x0F];
- }
- retval >>= ((0 - num_bits) & 0x03);
- return (uint16_t)retval;
-}
-
-/* 0..15 are values for bits */
-#define MAX_HUFFMAN_BITS 16
-
-void BrotliConvertBitDepthsToSymbols(const uint8_t* depth,
- size_t len,
- uint16_t* bits) {
- /* In Brotli, all bit depths are [1..15]
- 0 bit depth means that the symbol does not exist. */
- uint16_t bl_count[MAX_HUFFMAN_BITS] = { 0 };
- uint16_t next_code[MAX_HUFFMAN_BITS];
- size_t i;
- int code = 0;
- for (i = 0; i < len; ++i) {
- ++bl_count[depth[i]];
- }
- bl_count[0] = 0;
- next_code[0] = 0;
- for (i = 1; i < MAX_HUFFMAN_BITS; ++i) {
- code = (code + bl_count[i - 1]) << 1;
- next_code[i] = (uint16_t)code;
- }
- for (i = 0; i < len; ++i) {
- if (depth[i]) {
- bits[i] = BrotliReverseBits(depth[i], next_code[depth[i]]++);
- }
- }
-}
-
-#if defined(__cplusplus) || defined(c_plusplus)
-} /* extern "C" */
-#endif
diff --git a/BaseTools/Source/C/BrotliCompress/enc/histogram.c b/BaseTools/Source/C/BrotliCompress/enc/histogram.c
deleted file mode 100644
index d3bfa3a79a80..000000000000
--- a/BaseTools/Source/C/BrotliCompress/enc/histogram.c
+++ /dev/null
@@ -1,100 +0,0 @@
-/* Copyright 2013 Google Inc. All Rights Reserved.
-
- Distributed under MIT license.
- See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
-*/
-
-/* Build per-context histograms of literals, commands and distance codes. */
-
-#include "./histogram.h"
-
-#include "../common/context.h"
-#include "./block_splitter.h"
-#include "./command.h"
-
-#if defined(__cplusplus) || defined(c_plusplus)
-extern "C" {
-#endif
-
-typedef struct BlockSplitIterator {
- const BlockSplit* split_; /* Not owned. */
- size_t idx_;
- size_t type_;
- size_t length_;
-} BlockSplitIterator;
-
-static void InitBlockSplitIterator(BlockSplitIterator* self,
- const BlockSplit* split) {
- self->split_ = split;
- self->idx_ = 0;
- self->type_ = 0;
- self->length_ = split->lengths ? split->lengths[0] : 0;
-}
-
-static void BlockSplitIteratorNext(BlockSplitIterator* self) {
- if (self->length_ == 0) {
- ++self->idx_;
- self->type_ = self->split_->types[self->idx_];
- self->length_ = self->split_->lengths[self->idx_];
- }
- --self->length_;
-}
-
-void BrotliBuildHistogramsWithContext(
- const Command* cmds, const size_t num_commands,
- const BlockSplit* literal_split, const BlockSplit* insert_and_copy_split,
- const BlockSplit* dist_split, const uint8_t* ringbuffer, size_t start_pos,
- size_t mask, uint8_t prev_byte, uint8_t prev_byte2,
- const ContextType* context_modes, HistogramLiteral* literal_histograms,
- HistogramCommand* insert_and_copy_histograms,
- HistogramDistance* copy_dist_histograms) {
- size_t pos = start_pos;
- BlockSplitIterator literal_it;
- BlockSplitIterator insert_and_copy_it;
- BlockSplitIterator dist_it;
- size_t i;
-
- InitBlockSplitIterator(&literal_it, literal_split);
- InitBlockSplitIterator(&insert_and_copy_it, insert_and_copy_split);
- InitBlockSplitIterator(&dist_it, dist_split);
- for (i = 0; i < num_commands; ++i) {
- const Command* cmd = &cmds[i];
- size_t j;
- BlockSplitIteratorNext(&insert_and_copy_it);
- HistogramAddCommand(&insert_and_copy_histograms[insert_and_copy_it.type_],
- cmd->cmd_prefix_);
- /* TODO: unwrap iterator blocks. */
- for (j = cmd->insert_len_; j != 0; --j) {
- size_t context;
- BlockSplitIteratorNext(&literal_it);
- context = literal_it.type_;
- if (context_modes) {
- ContextLut lut = BROTLI_CONTEXT_LUT(context_modes[context]);
- context = (context << BROTLI_LITERAL_CONTEXT_BITS) +
- BROTLI_CONTEXT(prev_byte, prev_byte2, lut);
- }
- HistogramAddLiteral(&literal_histograms[context],
- ringbuffer[pos & mask]);
- prev_byte2 = prev_byte;
- prev_byte = ringbuffer[pos & mask];
- ++pos;
- }
- pos += CommandCopyLen(cmd);
- if (CommandCopyLen(cmd)) {
- prev_byte2 = ringbuffer[(pos - 2) & mask];
- prev_byte = ringbuffer[(pos - 1) & mask];
- if (cmd->cmd_prefix_ >= 128) {
- size_t context;
- BlockSplitIteratorNext(&dist_it);
- context = (dist_it.type_ << BROTLI_DISTANCE_CONTEXT_BITS) +
- CommandDistanceContext(cmd);
- HistogramAddDistance(©_dist_histograms[context],
- cmd->dist_prefix_ & 0x3FF);
- }
- }
- }
-}
-
-#if defined(__cplusplus) || defined(c_plusplus)
-} /* extern "C" */
-#endif
diff --git a/BaseTools/Source/C/BrotliCompress/enc/literal_cost.c b/BaseTools/Source/C/BrotliCompress/enc/literal_cost.c
deleted file mode 100644
index de780dcc99b0..000000000000
--- a/BaseTools/Source/C/BrotliCompress/enc/literal_cost.c
+++ /dev/null
@@ -1,175 +0,0 @@
-/* Copyright 2013 Google Inc. All Rights Reserved.
-
- Distributed under MIT license.
- See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
-*/
-
-/* Literal cost model to allow backward reference replacement to be efficient.
-*/
-
-#include "./literal_cost.h"
-
-#include "../common/platform.h"
-#include <brotli/types.h>
-#include "./fast_log.h"
-#include "./utf8_util.h"
-
-#if defined(__cplusplus) || defined(c_plusplus)
-extern "C" {
-#endif
-
-static size_t UTF8Position(size_t last, size_t c, size_t clamp) {
- if (c < 128) {
- return 0; /* Next one is the 'Byte 1' again. */
- } else if (c >= 192) { /* Next one is the 'Byte 2' of utf-8 encoding. */
- return BROTLI_MIN(size_t, 1, clamp);
- } else {
- /* Let's decide over the last byte if this ends the sequence. */
- if (last < 0xE0) {
- return 0; /* Completed two or three byte coding. */
- } else { /* Next one is the 'Byte 3' of utf-8 encoding. */
- return BROTLI_MIN(size_t, 2, clamp);
- }
- }
-}
-
-static size_t DecideMultiByteStatsLevel(size_t pos, size_t len, size_t mask,
- const uint8_t* data) {
- size_t counts[3] = { 0 };
- size_t max_utf8 = 1; /* should be 2, but 1 compresses better. */
- size_t last_c = 0;
- size_t i;
- for (i = 0; i < len; ++i) {
- size_t c = data[(pos + i) & mask];
- ++counts[UTF8Position(last_c, c, 2)];
- last_c = c;
- }
- if (counts[2] < 500) {
- max_utf8 = 1;
- }
- if (counts[1] + counts[2] < 25) {
- max_utf8 = 0;
- }
- return max_utf8;
-}
-
-static void EstimateBitCostsForLiteralsUTF8(size_t pos, size_t len, size_t mask,
- const uint8_t* data, float* cost) {
- /* max_utf8 is 0 (normal ASCII single byte modeling),
- 1 (for 2-byte UTF-8 modeling), or 2 (for 3-byte UTF-8 modeling). */
- const size_t max_utf8 = DecideMultiByteStatsLevel(pos, len, mask, data);
- size_t histogram[3][256] = { { 0 } };
- size_t window_half = 495;
- size_t in_window = BROTLI_MIN(size_t, window_half, len);
- size_t in_window_utf8[3] = { 0 };
-
- size_t i;
- { /* Bootstrap histograms. */
- size_t last_c = 0;
- size_t utf8_pos = 0;
- for (i = 0; i < in_window; ++i) {
- size_t c = data[(pos + i) & mask];
- ++histogram[utf8_pos][c];
- ++in_window_utf8[utf8_pos];
- utf8_pos = UTF8Position(last_c, c, max_utf8);
- last_c = c;
- }
- }
-
- /* Compute bit costs with sliding window. */
- for (i = 0; i < len; ++i) {
- if (i >= window_half) {
- /* Remove a byte in the past. */
- size_t c =
- i < window_half + 1 ? 0 : data[(pos + i - window_half - 1) & mask];
- size_t last_c =
- i < window_half + 2 ? 0 : data[(pos + i - window_half - 2) & mask];
- size_t utf8_pos2 = UTF8Position(last_c, c, max_utf8);
- --histogram[utf8_pos2][data[(pos + i - window_half) & mask]];
- --in_window_utf8[utf8_pos2];
- }
- if (i + window_half < len) {
- /* Add a byte in the future. */
- size_t c = data[(pos + i + window_half - 1) & mask];
- size_t last_c = data[(pos + i + window_half - 2) & mask];
- size_t utf8_pos2 = UTF8Position(last_c, c, max_utf8);
- ++histogram[utf8_pos2][data[(pos + i + window_half) & mask]];
- ++in_window_utf8[utf8_pos2];
- }
- {
- size_t c = i < 1 ? 0 : data[(pos + i - 1) & mask];
- size_t last_c = i < 2 ? 0 : data[(pos + i - 2) & mask];
- size_t utf8_pos = UTF8Position(last_c, c, max_utf8);
- size_t masked_pos = (pos + i) & mask;
- size_t histo = histogram[utf8_pos][data[masked_pos]];
- double lit_cost;
- if (histo == 0) {
- histo = 1;
- }
- lit_cost = FastLog2(in_window_utf8[utf8_pos]) - FastLog2(histo);
- lit_cost += 0.02905;
- if (lit_cost < 1.0) {
- lit_cost *= 0.5;
- lit_cost += 0.5;
- }
- /* Make the first bytes more expensive -- seems to help, not sure why.
- Perhaps because the entropy source is changing its properties
- rapidly in the beginning of the file, perhaps because the beginning
- of the data is a statistical "anomaly". */
- if (i < 2000) {
- lit_cost += 0.7 - ((double)(2000 - i) / 2000.0 * 0.35);
- }
- cost[i] = (float)lit_cost;
- }
- }
-}
-
-void BrotliEstimateBitCostsForLiterals(size_t pos, size_t len, size_t mask,
- const uint8_t* data, float* cost) {
- if (BrotliIsMostlyUTF8(data, pos, mask, len, kMinUTF8Ratio)) {
- EstimateBitCostsForLiteralsUTF8(pos, len, mask, data, cost);
- return;
- } else {
- size_t histogram[256] = { 0 };
- size_t window_half = 2000;
- size_t in_window = BROTLI_MIN(size_t, window_half, len);
-
- /* Bootstrap histogram. */
- size_t i;
- for (i = 0; i < in_window; ++i) {
- ++histogram[data[(pos + i) & mask]];
- }
-
- /* Compute bit costs with sliding window. */
- for (i = 0; i < len; ++i) {
- size_t histo;
- if (i >= window_half) {
- /* Remove a byte in the past. */
- --histogram[data[(pos + i - window_half) & mask]];
- --in_window;
- }
- if (i + window_half < len) {
- /* Add a byte in the future. */
- ++histogram[data[(pos + i + window_half) & mask]];
- ++in_window;
- }
- histo = histogram[data[(pos + i) & mask]];
- if (histo == 0) {
- histo = 1;
- }
- {
- double lit_cost = FastLog2(in_window) - FastLog2(histo);
- lit_cost += 0.029;
- if (lit_cost < 1.0) {
- lit_cost *= 0.5;
- lit_cost += 0.5;
- }
- cost[i] = (float)lit_cost;
- }
- }
- }
-}
-
-#if defined(__cplusplus) || defined(c_plusplus)
-} /* extern "C" */
-#endif
diff --git a/BaseTools/Source/C/BrotliCompress/enc/memory.c b/BaseTools/Source/C/BrotliCompress/enc/memory.c
deleted file mode 100644
index f0b2f13f6472..000000000000
--- a/BaseTools/Source/C/BrotliCompress/enc/memory.c
+++ /dev/null
@@ -1,170 +0,0 @@
-/* Copyright 2015 Google Inc. All Rights Reserved.
-
- Distributed under MIT license.
- See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
-*/
-
-/* Algorithms for distributing the literals and commands of a metablock between
- block types and contexts. */
-
-#include "./memory.h"
-
-#include <stdlib.h> /* exit, free, malloc */
-#include <string.h> /* memcpy */
-
-#include "../common/platform.h"
-#include <brotli/types.h>
-
-#if defined(__cplusplus) || defined(c_plusplus)
-extern "C" {
-#endif
-
-#define MAX_PERM_ALLOCATED 128
-#define MAX_NEW_ALLOCATED 64
-#define MAX_NEW_FREED 64
-
-#define PERM_ALLOCATED_OFFSET 0
-#define NEW_ALLOCATED_OFFSET MAX_PERM_ALLOCATED
-#define NEW_FREED_OFFSET (MAX_PERM_ALLOCATED + MAX_NEW_ALLOCATED)
-
-void BrotliInitMemoryManager(
- MemoryManager* m, brotli_alloc_func alloc_func, brotli_free_func free_func,
- void* opaque) {
- if (!alloc_func) {
- m->alloc_func = BrotliDefaultAllocFunc;
- m->free_func = BrotliDefaultFreeFunc;
- m->opaque = 0;
- } else {
- m->alloc_func = alloc_func;
- m->free_func = free_func;
- m->opaque = opaque;
- }
-#if !defined(BROTLI_ENCODER_EXIT_ON_OOM)
- m->is_oom = BROTLI_FALSE;
- m->perm_allocated = 0;
- m->new_allocated = 0;
- m->new_freed = 0;
-#endif /* BROTLI_ENCODER_EXIT_ON_OOM */
-}
-
-#if defined(BROTLI_ENCODER_EXIT_ON_OOM)
-
-void* BrotliAllocate(MemoryManager* m, size_t n) {
- void* result = m->alloc_func(m->opaque, n);
- if (!result) exit(EXIT_FAILURE);
- return result;
-}
-
-void BrotliFree(MemoryManager* m, void* p) {
- m->free_func(m->opaque, p);
-}
-
-void BrotliWipeOutMemoryManager(MemoryManager* m) {
- BROTLI_UNUSED(m);
-}
-
-#else /* BROTLI_ENCODER_EXIT_ON_OOM */
-
-static void SortPointers(void** items, const size_t n) {
- /* Shell sort. */
- static const size_t gaps[] = {23, 10, 4, 1};
- int g = 0;
- for (; g < 4; ++g) {
- size_t gap = gaps[g];
- size_t i;
- for (i = gap; i < n; ++i) {
- size_t j = i;
- void* tmp = items[i];
- for (; j >= gap && tmp < items[j - gap]; j -= gap) {
- items[j] = items[j - gap];
- }
- items[j] = tmp;
- }
- }
-}
-
-static size_t Annihilate(void** a, size_t a_len, void** b, size_t b_len) {
- size_t a_read_index = 0;
- size_t b_read_index = 0;
- size_t a_write_index = 0;
- size_t b_write_index = 0;
- size_t annihilated = 0;
- while (a_read_index < a_len && b_read_index < b_len) {
- if (a[a_read_index] == b[b_read_index]) {
- a_read_index++;
- b_read_index++;
- annihilated++;
- } else if (a[a_read_index] < b[b_read_index]) {
- a[a_write_index++] = a[a_read_index++];
- } else {
- b[b_write_index++] = b[b_read_index++];
- }
- }
- while (a_read_index < a_len) a[a_write_index++] = a[a_read_index++];
- while (b_read_index < b_len) b[b_write_index++] = b[b_read_index++];
- return annihilated;
-}
-
-static void CollectGarbagePointers(MemoryManager* m) {
- size_t annihilated;
- SortPointers(m->pointers + NEW_ALLOCATED_OFFSET, m->new_allocated);
- SortPointers(m->pointers + NEW_FREED_OFFSET, m->new_freed);
- annihilated = Annihilate(
- m->pointers + NEW_ALLOCATED_OFFSET, m->new_allocated,
- m->pointers + NEW_FREED_OFFSET, m->new_freed);
- m->new_allocated -= annihilated;
- m->new_freed -= annihilated;
-
- if (m->new_freed != 0) {
- annihilated = Annihilate(
- m->pointers + PERM_ALLOCATED_OFFSET, m->perm_allocated,
- m->pointers + NEW_FREED_OFFSET, m->new_freed);
- m->perm_allocated -= annihilated;
- m->new_freed -= annihilated;
- BROTLI_DCHECK(m->new_freed == 0);
- }
-
- if (m->new_allocated != 0) {
- BROTLI_DCHECK(m->perm_allocated + m->new_allocated <= MAX_PERM_ALLOCATED);
- memcpy(m->pointers + PERM_ALLOCATED_OFFSET + m->perm_allocated,
- m->pointers + NEW_ALLOCATED_OFFSET,
- sizeof(void*) * m->new_allocated);
- m->perm_allocated += m->new_allocated;
- m->new_allocated = 0;
- SortPointers(m->pointers + PERM_ALLOCATED_OFFSET, m->perm_allocated);
- }
-}
-
-void* BrotliAllocate(MemoryManager* m, size_t n) {
- void* result = m->alloc_func(m->opaque, n);
- if (!result) {
- m->is_oom = BROTLI_TRUE;
- return NULL;
- }
- if (m->new_allocated == MAX_NEW_ALLOCATED) CollectGarbagePointers(m);
- m->pointers[NEW_ALLOCATED_OFFSET + (m->new_allocated++)] = result;
- return result;
-}
-
-void BrotliFree(MemoryManager* m, void* p) {
- if (!p) return;
- m->free_func(m->opaque, p);
- if (m->new_freed == MAX_NEW_FREED) CollectGarbagePointers(m);
- m->pointers[NEW_FREED_OFFSET + (m->new_freed++)] = p;
-}
-
-void BrotliWipeOutMemoryManager(MemoryManager* m) {
- size_t i;
- CollectGarbagePointers(m);
- /* Now all unfreed pointers are in perm-allocated list. */
- for (i = 0; i < m->perm_allocated; ++i) {
- m->free_func(m->opaque, m->pointers[PERM_ALLOCATED_OFFSET + i]);
- }
- m->perm_allocated = 0;
-}
-
-#endif /* BROTLI_ENCODER_EXIT_ON_OOM */
-
-#if defined(__cplusplus) || defined(c_plusplus)
-} /* extern "C" */
-#endif
diff --git a/BaseTools/Source/C/BrotliCompress/enc/metablock.c b/BaseTools/Source/C/BrotliCompress/enc/metablock.c
deleted file mode 100644
index 2fc3e28d02af..000000000000
--- a/BaseTools/Source/C/BrotliCompress/enc/metablock.c
+++ /dev/null
@@ -1,667 +0,0 @@
-/* Copyright 2015 Google Inc. All Rights Reserved.
-
- Distributed under MIT license.
- See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
-*/
-
-/* Algorithms for distributing the literals and commands of a metablock between
- block types and contexts. */
-
-#include "./metablock.h"
-
-#include "../common/constants.h"
-#include "../common/context.h"
-#include "../common/platform.h"
-#include <brotli/types.h>
-#include "./bit_cost.h"
-#include "./block_splitter.h"
-#include "./cluster.h"
-#include "./entropy_encode.h"
-#include "./histogram.h"
-#include "./memory.h"
-#include "./quality.h"
-
-#if defined(__cplusplus) || defined(c_plusplus)
-extern "C" {
-#endif
-
-void BrotliInitDistanceParams(BrotliEncoderParams* params,
- uint32_t npostfix, uint32_t ndirect) {
- BrotliDistanceParams* dist_params = ¶ms->dist;
- uint32_t alphabet_size, max_distance;
-
- dist_params->distance_postfix_bits = npostfix;
- dist_params->num_direct_distance_codes = ndirect;
-
- alphabet_size = BROTLI_DISTANCE_ALPHABET_SIZE(
- npostfix, ndirect, BROTLI_MAX_DISTANCE_BITS);
- max_distance = ndirect + (1U << (BROTLI_MAX_DISTANCE_BITS + npostfix + 2)) -
- (1U << (npostfix + 2));
-
- if (params->large_window) {
- static const uint32_t bound[BROTLI_MAX_NPOSTFIX + 1] = {0, 4, 12, 28};
- uint32_t postfix = 1U << npostfix;
- alphabet_size = BROTLI_DISTANCE_ALPHABET_SIZE(
- npostfix, ndirect, BROTLI_LARGE_MAX_DISTANCE_BITS);
- /* The maximum distance is set so that no distance symbol used can encode
- a distance larger than BROTLI_MAX_ALLOWED_DISTANCE with all
- its extra bits set. */
- if (ndirect < bound[npostfix]) {
- max_distance = BROTLI_MAX_ALLOWED_DISTANCE - (bound[npostfix] - ndirect);
- } else if (ndirect >= bound[npostfix] + postfix) {
- max_distance = (3U << 29) - 4 + (ndirect - bound[npostfix]);
- } else {
- max_distance = BROTLI_MAX_ALLOWED_DISTANCE;
- }
- }
-
- dist_params->alphabet_size = alphabet_size;
- dist_params->max_distance = max_distance;
-}
-
-static void RecomputeDistancePrefixes(Command* cmds,
- size_t num_commands,
- const BrotliDistanceParams* orig_params,
- const BrotliDistanceParams* new_params) {
- size_t i;
-
- if (orig_params->distance_postfix_bits == new_params->distance_postfix_bits &&
- orig_params->num_direct_distance_codes ==
- new_params->num_direct_distance_codes) {
- return;
- }
-
- for (i = 0; i < num_commands; ++i) {
- Command* cmd = &cmds[i];
- if (CommandCopyLen(cmd) && cmd->cmd_prefix_ >= 128) {
- PrefixEncodeCopyDistance(CommandRestoreDistanceCode(cmd, orig_params),
- new_params->num_direct_distance_codes,
- new_params->distance_postfix_bits,
- &cmd->dist_prefix_,
- &cmd->dist_extra_);
- }
- }
-}
-
-static BROTLI_BOOL ComputeDistanceCost(const Command* cmds,
- size_t num_commands,
- const BrotliDistanceParams* orig_params,
- const BrotliDistanceParams* new_params,
- double* cost) {
- size_t i;
- BROTLI_BOOL equal_params = BROTLI_FALSE;
- uint16_t dist_prefix;
- uint32_t dist_extra;
- double extra_bits = 0.0;
- HistogramDistance histo;
- HistogramClearDistance(&histo);
-
- if (orig_params->distance_postfix_bits == new_params->distance_postfix_bits &&
- orig_params->num_direct_distance_codes ==
- new_params->num_direct_distance_codes) {
- equal_params = BROTLI_TRUE;
- }
-
- for (i = 0; i < num_commands; i++) {
- const Command* cmd = &cmds[i];
- if (CommandCopyLen(cmd) && cmd->cmd_prefix_ >= 128) {
- if (equal_params) {
- dist_prefix = cmd->dist_prefix_;
- } else {
- uint32_t distance = CommandRestoreDistanceCode(cmd, orig_params);
- if (distance > new_params->max_distance) {
- return BROTLI_FALSE;
- }
- PrefixEncodeCopyDistance(distance,
- new_params->num_direct_distance_codes,
- new_params->distance_postfix_bits,
- &dist_prefix,
- &dist_extra);
- }
- HistogramAddDistance(&histo, dist_prefix & 0x3FF);
- extra_bits += dist_prefix >> 10;
- }
- }
-
- *cost = BrotliPopulationCostDistance(&histo) + extra_bits;
- return BROTLI_TRUE;
-}
-
-void BrotliBuildMetaBlock(MemoryManager* m,
- const uint8_t* ringbuffer,
- const size_t pos,
- const size_t mask,
- BrotliEncoderParams* params,
- uint8_t prev_byte,
- uint8_t prev_byte2,
- Command* cmds,
- size_t num_commands,
- ContextType literal_context_mode,
- MetaBlockSplit* mb) {
- /* Histogram ids need to fit in one byte. */
- static const size_t kMaxNumberOfHistograms = 256;
- HistogramDistance* distance_histograms;
- HistogramLiteral* literal_histograms;
- ContextType* literal_context_modes = NULL;
- size_t literal_histograms_size;
- size_t distance_histograms_size;
- size_t i;
- size_t literal_context_multiplier = 1;
- uint32_t npostfix;
- uint32_t ndirect_msb = 0;
- BROTLI_BOOL check_orig = BROTLI_TRUE;
- double best_dist_cost = 1e99;
- BrotliEncoderParams orig_params = *params;
- BrotliEncoderParams new_params = *params;
-
- for (npostfix = 0; npostfix <= BROTLI_MAX_NPOSTFIX; npostfix++) {
- for (; ndirect_msb < 16; ndirect_msb++) {
- uint32_t ndirect = ndirect_msb << npostfix;
- BROTLI_BOOL skip;
- double dist_cost;
- BrotliInitDistanceParams(&new_params, npostfix, ndirect);
- if (npostfix == orig_params.dist.distance_postfix_bits &&
- ndirect == orig_params.dist.num_direct_distance_codes) {
- check_orig = BROTLI_FALSE;
- }
- skip = !ComputeDistanceCost(
- cmds, num_commands,
- &orig_params.dist, &new_params.dist, &dist_cost);
- if (skip || (dist_cost > best_dist_cost)) {
- break;
- }
- best_dist_cost = dist_cost;
- params->dist = new_params.dist;
- }
- if (ndirect_msb > 0) ndirect_msb--;
- ndirect_msb /= 2;
- }
- if (check_orig) {
- double dist_cost;
- ComputeDistanceCost(cmds, num_commands,
- &orig_params.dist, &orig_params.dist, &dist_cost);
- if (dist_cost < best_dist_cost) {
- /* NB: currently unused; uncomment when more param tuning is added. */
- /* best_dist_cost = dist_cost; */
- params->dist = orig_params.dist;
- }
- }
- RecomputeDistancePrefixes(cmds, num_commands,
- &orig_params.dist, ¶ms->dist);
-
- BrotliSplitBlock(m, cmds, num_commands,
- ringbuffer, pos, mask, params,
- &mb->literal_split,
- &mb->command_split,
- &mb->distance_split);
- if (BROTLI_IS_OOM(m)) return;
-
- if (!params->disable_literal_context_modeling) {
- literal_context_multiplier = 1 << BROTLI_LITERAL_CONTEXT_BITS;
- literal_context_modes =
- BROTLI_ALLOC(m, ContextType, mb->literal_split.num_types);
- if (BROTLI_IS_OOM(m)) return;
- for (i = 0; i < mb->literal_split.num_types; ++i) {
- literal_context_modes[i] = literal_context_mode;
- }
- }
-
- literal_histograms_size =
- mb->literal_split.num_types * literal_context_multiplier;
- literal_histograms =
- BROTLI_ALLOC(m, HistogramLiteral, literal_histograms_size);
- if (BROTLI_IS_OOM(m)) return;
- ClearHistogramsLiteral(literal_histograms, literal_histograms_size);
-
- distance_histograms_size =
- mb->distance_split.num_types << BROTLI_DISTANCE_CONTEXT_BITS;
- distance_histograms =
- BROTLI_ALLOC(m, HistogramDistance, distance_histograms_size);
- if (BROTLI_IS_OOM(m)) return;
- ClearHistogramsDistance(distance_histograms, distance_histograms_size);
-
- BROTLI_DCHECK(mb->command_histograms == 0);
- mb->command_histograms_size = mb->command_split.num_types;
- mb->command_histograms =
- BROTLI_ALLOC(m, HistogramCommand, mb->command_histograms_size);
- if (BROTLI_IS_OOM(m)) return;
- ClearHistogramsCommand(mb->command_histograms, mb->command_histograms_size);
-
- BrotliBuildHistogramsWithContext(cmds, num_commands,
- &mb->literal_split, &mb->command_split, &mb->distance_split,
- ringbuffer, pos, mask, prev_byte, prev_byte2, literal_context_modes,
- literal_histograms, mb->command_histograms, distance_histograms);
- BROTLI_FREE(m, literal_context_modes);
-
- BROTLI_DCHECK(mb->literal_context_map == 0);
- mb->literal_context_map_size =
- mb->literal_split.num_types << BROTLI_LITERAL_CONTEXT_BITS;
- mb->literal_context_map =
- BROTLI_ALLOC(m, uint32_t, mb->literal_context_map_size);
- if (BROTLI_IS_OOM(m)) return;
-
- BROTLI_DCHECK(mb->literal_histograms == 0);
- mb->literal_histograms_size = mb->literal_context_map_size;
- mb->literal_histograms =
- BROTLI_ALLOC(m, HistogramLiteral, mb->literal_histograms_size);
- if (BROTLI_IS_OOM(m)) return;
-
- BrotliClusterHistogramsLiteral(m, literal_histograms, literal_histograms_size,
- kMaxNumberOfHistograms, mb->literal_histograms,
- &mb->literal_histograms_size, mb->literal_context_map);
- if (BROTLI_IS_OOM(m)) return;
- BROTLI_FREE(m, literal_histograms);
-
- if (params->disable_literal_context_modeling) {
- /* Distribute assignment to all contexts. */
- for (i = mb->literal_split.num_types; i != 0;) {
- size_t j = 0;
- i--;
- for (; j < (1 << BROTLI_LITERAL_CONTEXT_BITS); j++) {
- mb->literal_context_map[(i << BROTLI_LITERAL_CONTEXT_BITS) + j] =
- mb->literal_context_map[i];
- }
- }
- }
-
- BROTLI_DCHECK(mb->distance_context_map == 0);
- mb->distance_context_map_size =
- mb->distance_split.num_types << BROTLI_DISTANCE_CONTEXT_BITS;
- mb->distance_context_map =
- BROTLI_ALLOC(m, uint32_t, mb->distance_context_map_size);
- if (BROTLI_IS_OOM(m)) return;
-
- BROTLI_DCHECK(mb->distance_histograms == 0);
- mb->distance_histograms_size = mb->distance_context_map_size;
- mb->distance_histograms =
- BROTLI_ALLOC(m, HistogramDistance, mb->distance_histograms_size);
- if (BROTLI_IS_OOM(m)) return;
-
- BrotliClusterHistogramsDistance(m, distance_histograms,
- mb->distance_context_map_size,
- kMaxNumberOfHistograms,
- mb->distance_histograms,
- &mb->distance_histograms_size,
- mb->distance_context_map);
- if (BROTLI_IS_OOM(m)) return;
- BROTLI_FREE(m, distance_histograms);
-}
-
-#define FN(X) X ## Literal
-#include "./metablock_inc.h" /* NOLINT(build/include) */
-#undef FN
-
-#define FN(X) X ## Command
-#include "./metablock_inc.h" /* NOLINT(build/include) */
-#undef FN
-
-#define FN(X) X ## Distance
-#include "./metablock_inc.h" /* NOLINT(build/include) */
-#undef FN
-
-#define BROTLI_MAX_STATIC_CONTEXTS 13
-
-/* Greedy block splitter for one block category (literal, command or distance).
- Gathers histograms for all context buckets. */
-typedef struct ContextBlockSplitter {
- /* Alphabet size of particular block category. */
- size_t alphabet_size_;
- size_t num_contexts_;
- size_t max_block_types_;
- /* We collect at least this many symbols for each block. */
- size_t min_block_size_;
- /* We merge histograms A and B if
- entropy(A+B) < entropy(A) + entropy(B) + split_threshold_,
- where A is the current histogram and B is the histogram of the last or the
- second last block type. */
- double split_threshold_;
-
- size_t num_blocks_;
- BlockSplit* split_; /* not owned */
- HistogramLiteral* histograms_; /* not owned */
- size_t* histograms_size_; /* not owned */
-
- /* The number of symbols that we want to collect before deciding on whether
- or not to merge the block with a previous one or emit a new block. */
- size_t target_block_size_;
- /* The number of symbols in the current histogram. */
- size_t block_size_;
- /* Offset of the current histogram. */
- size_t curr_histogram_ix_;
- /* Offset of the histograms of the previous two block types. */
- size_t last_histogram_ix_[2];
- /* Entropy of the previous two block types. */
- double last_entropy_[2 * BROTLI_MAX_STATIC_CONTEXTS];
- /* The number of times we merged the current block with the last one. */
- size_t merge_last_count_;
-} ContextBlockSplitter;
-
-static void InitContextBlockSplitter(
- MemoryManager* m, ContextBlockSplitter* self, size_t alphabet_size,
- size_t num_contexts, size_t min_block_size, double split_threshold,
- size_t num_symbols, BlockSplit* split, HistogramLiteral** histograms,
- size_t* histograms_size) {
- size_t max_num_blocks = num_symbols / min_block_size + 1;
- size_t max_num_types;
- BROTLI_DCHECK(num_contexts <= BROTLI_MAX_STATIC_CONTEXTS);
-
- self->alphabet_size_ = alphabet_size;
- self->num_contexts_ = num_contexts;
- self->max_block_types_ = BROTLI_MAX_NUMBER_OF_BLOCK_TYPES / num_contexts;
- self->min_block_size_ = min_block_size;
- self->split_threshold_ = split_threshold;
- self->num_blocks_ = 0;
- self->split_ = split;
- self->histograms_size_ = histograms_size;
- self->target_block_size_ = min_block_size;
- self->block_size_ = 0;
- self->curr_histogram_ix_ = 0;
- self->merge_last_count_ = 0;
-
- /* We have to allocate one more histogram than the maximum number of block
- types for the current histogram when the meta-block is too big. */
- max_num_types =
- BROTLI_MIN(size_t, max_num_blocks, self->max_block_types_ + 1);
- BROTLI_ENSURE_CAPACITY(m, uint8_t,
- split->types, split->types_alloc_size, max_num_blocks);
- BROTLI_ENSURE_CAPACITY(m, uint32_t,
- split->lengths, split->lengths_alloc_size, max_num_blocks);
- if (BROTLI_IS_OOM(m)) return;
- split->num_blocks = max_num_blocks;
- if (BROTLI_IS_OOM(m)) return;
- BROTLI_DCHECK(*histograms == 0);
- *histograms_size = max_num_types * num_contexts;
- *histograms = BROTLI_ALLOC(m, HistogramLiteral, *histograms_size);
- self->histograms_ = *histograms;
- if (BROTLI_IS_OOM(m)) return;
- /* Clear only current histogram. */
- ClearHistogramsLiteral(&self->histograms_[0], num_contexts);
- self->last_histogram_ix_[0] = self->last_histogram_ix_[1] = 0;
-}
-
-/* Does either of three things:
- (1) emits the current block with a new block type;
- (2) emits the current block with the type of the second last block;
- (3) merges the current block with the last block. */
-static void ContextBlockSplitterFinishBlock(
- ContextBlockSplitter* self, MemoryManager* m, BROTLI_BOOL is_final) {
- BlockSplit* split = self->split_;
- const size_t num_contexts = self->num_contexts_;
- double* last_entropy = self->last_entropy_;
- HistogramLiteral* histograms = self->histograms_;
-
- if (self->block_size_ < self->min_block_size_) {
- self->block_size_ = self->min_block_size_;
- }
- if (self->num_blocks_ == 0) {
- size_t i;
- /* Create first block. */
- split->lengths[0] = (uint32_t)self->block_size_;
- split->types[0] = 0;
-
- for (i = 0; i < num_contexts; ++i) {
- last_entropy[i] =
- BitsEntropy(histograms[i].data_, self->alphabet_size_);
- last_entropy[num_contexts + i] = last_entropy[i];
- }
- ++self->num_blocks_;
- ++split->num_types;
- self->curr_histogram_ix_ += num_contexts;
- if (self->curr_histogram_ix_ < *self->histograms_size_) {
- ClearHistogramsLiteral(
- &self->histograms_[self->curr_histogram_ix_], self->num_contexts_);
- }
- self->block_size_ = 0;
- } else if (self->block_size_ > 0) {
- /* Try merging the set of histograms for the current block type with the
- respective set of histograms for the last and second last block types.
- Decide over the split based on the total reduction of entropy across
- all contexts. */
- double entropy[BROTLI_MAX_STATIC_CONTEXTS];
- HistogramLiteral* combined_histo =
- BROTLI_ALLOC(m, HistogramLiteral, 2 * num_contexts);
- double combined_entropy[2 * BROTLI_MAX_STATIC_CONTEXTS];
- double diff[2] = { 0.0 };
- size_t i;
- if (BROTLI_IS_OOM(m)) return;
- for (i = 0; i < num_contexts; ++i) {
- size_t curr_histo_ix = self->curr_histogram_ix_ + i;
- size_t j;
- entropy[i] = BitsEntropy(histograms[curr_histo_ix].data_,
- self->alphabet_size_);
- for (j = 0; j < 2; ++j) {
- size_t jx = j * num_contexts + i;
- size_t last_histogram_ix = self->last_histogram_ix_[j] + i;
- combined_histo[jx] = histograms[curr_histo_ix];
- HistogramAddHistogramLiteral(&combined_histo[jx],
- &histograms[last_histogram_ix]);
- combined_entropy[jx] = BitsEntropy(
- &combined_histo[jx].data_[0], self->alphabet_size_);
- diff[j] += combined_entropy[jx] - entropy[i] - last_entropy[jx];
- }
- }
-
- if (split->num_types < self->max_block_types_ &&
- diff[0] > self->split_threshold_ &&
- diff[1] > self->split_threshold_) {
- /* Create new block. */
- split->lengths[self->num_blocks_] = (uint32_t)self->block_size_;
- split->types[self->num_blocks_] = (uint8_t)split->num_types;
- self->last_histogram_ix_[1] = self->last_histogram_ix_[0];
- self->last_histogram_ix_[0] = split->num_types * num_contexts;
- for (i = 0; i < num_contexts; ++i) {
- last_entropy[num_contexts + i] = last_entropy[i];
- last_entropy[i] = entropy[i];
- }
- ++self->num_blocks_;
- ++split->num_types;
- self->curr_histogram_ix_ += num_contexts;
- if (self->curr_histogram_ix_ < *self->histograms_size_) {
- ClearHistogramsLiteral(
- &self->histograms_[self->curr_histogram_ix_], self->num_contexts_);
- }
- self->block_size_ = 0;
- self->merge_last_count_ = 0;
- self->target_block_size_ = self->min_block_size_;
- } else if (diff[1] < diff[0] - 20.0) {
- /* Combine this block with second last block. */
- split->lengths[self->num_blocks_] = (uint32_t)self->block_size_;
- split->types[self->num_blocks_] = split->types[self->num_blocks_ - 2];
- BROTLI_SWAP(size_t, self->last_histogram_ix_, 0, 1);
- for (i = 0; i < num_contexts; ++i) {
- histograms[self->last_histogram_ix_[0] + i] =
- combined_histo[num_contexts + i];
- last_entropy[num_contexts + i] = last_entropy[i];
- last_entropy[i] = combined_entropy[num_contexts + i];
- HistogramClearLiteral(&histograms[self->curr_histogram_ix_ + i]);
- }
- ++self->num_blocks_;
- self->block_size_ = 0;
- self->merge_last_count_ = 0;
- self->target_block_size_ = self->min_block_size_;
- } else {
- /* Combine this block with last block. */
- split->lengths[self->num_blocks_ - 1] += (uint32_t)self->block_size_;
- for (i = 0; i < num_contexts; ++i) {
- histograms[self->last_histogram_ix_[0] + i] = combined_histo[i];
- last_entropy[i] = combined_entropy[i];
- if (split->num_types == 1) {
- last_entropy[num_contexts + i] = last_entropy[i];
- }
- HistogramClearLiteral(&histograms[self->curr_histogram_ix_ + i]);
- }
- self->block_size_ = 0;
- if (++self->merge_last_count_ > 1) {
- self->target_block_size_ += self->min_block_size_;
- }
- }
- BROTLI_FREE(m, combined_histo);
- }
- if (is_final) {
- *self->histograms_size_ = split->num_types * num_contexts;
- split->num_blocks = self->num_blocks_;
- }
-}
-
-/* Adds the next symbol to the current block type and context. When the
- current block reaches the target size, decides on merging the block. */
-static void ContextBlockSplitterAddSymbol(
- ContextBlockSplitter* self, MemoryManager* m,
- size_t symbol, size_t context) {
- HistogramAddLiteral(&self->histograms_[self->curr_histogram_ix_ + context],
- symbol);
- ++self->block_size_;
- if (self->block_size_ == self->target_block_size_) {
- ContextBlockSplitterFinishBlock(self, m, /* is_final = */ BROTLI_FALSE);
- if (BROTLI_IS_OOM(m)) return;
- }
-}
-
-static void MapStaticContexts(MemoryManager* m,
- size_t num_contexts,
- const uint32_t* static_context_map,
- MetaBlockSplit* mb) {
- size_t i;
- BROTLI_DCHECK(mb->literal_context_map == 0);
- mb->literal_context_map_size =
- mb->literal_split.num_types << BROTLI_LITERAL_CONTEXT_BITS;
- mb->literal_context_map =
- BROTLI_ALLOC(m, uint32_t, mb->literal_context_map_size);
- if (BROTLI_IS_OOM(m)) return;
-
- for (i = 0; i < mb->literal_split.num_types; ++i) {
- uint32_t offset = (uint32_t)(i * num_contexts);
- size_t j;
- for (j = 0; j < (1u << BROTLI_LITERAL_CONTEXT_BITS); ++j) {
- mb->literal_context_map[(i << BROTLI_LITERAL_CONTEXT_BITS) + j] =
- offset + static_context_map[j];
- }
- }
-}
-
-static BROTLI_INLINE void BrotliBuildMetaBlockGreedyInternal(
- MemoryManager* m, const uint8_t* ringbuffer, size_t pos, size_t mask,
- uint8_t prev_byte, uint8_t prev_byte2, ContextLut literal_context_lut,
- const size_t num_contexts, const uint32_t* static_context_map,
- const Command* commands, size_t n_commands, MetaBlockSplit* mb) {
- union {
- BlockSplitterLiteral plain;
- ContextBlockSplitter ctx;
- } lit_blocks;
- BlockSplitterCommand cmd_blocks;
- BlockSplitterDistance dist_blocks;
- size_t num_literals = 0;
- size_t i;
- for (i = 0; i < n_commands; ++i) {
- num_literals += commands[i].insert_len_;
- }
-
- if (num_contexts == 1) {
- InitBlockSplitterLiteral(m, &lit_blocks.plain, 256, 512, 400.0,
- num_literals, &mb->literal_split, &mb->literal_histograms,
- &mb->literal_histograms_size);
- } else {
- InitContextBlockSplitter(m, &lit_blocks.ctx, 256, num_contexts, 512, 400.0,
- num_literals, &mb->literal_split, &mb->literal_histograms,
- &mb->literal_histograms_size);
- }
- if (BROTLI_IS_OOM(m)) return;
- InitBlockSplitterCommand(m, &cmd_blocks, BROTLI_NUM_COMMAND_SYMBOLS, 1024,
- 500.0, n_commands, &mb->command_split, &mb->command_histograms,
- &mb->command_histograms_size);
- if (BROTLI_IS_OOM(m)) return;
- InitBlockSplitterDistance(m, &dist_blocks, 64, 512, 100.0, n_commands,
- &mb->distance_split, &mb->distance_histograms,
- &mb->distance_histograms_size);
- if (BROTLI_IS_OOM(m)) return;
-
- for (i = 0; i < n_commands; ++i) {
- const Command cmd = commands[i];
- size_t j;
- BlockSplitterAddSymbolCommand(&cmd_blocks, cmd.cmd_prefix_);
- for (j = cmd.insert_len_; j != 0; --j) {
- uint8_t literal = ringbuffer[pos & mask];
- if (num_contexts == 1) {
- BlockSplitterAddSymbolLiteral(&lit_blocks.plain, literal);
- } else {
- size_t context =
- BROTLI_CONTEXT(prev_byte, prev_byte2, literal_context_lut);
- ContextBlockSplitterAddSymbol(&lit_blocks.ctx, m, literal,
- static_context_map[context]);
- if (BROTLI_IS_OOM(m)) return;
- }
- prev_byte2 = prev_byte;
- prev_byte = literal;
- ++pos;
- }
- pos += CommandCopyLen(&cmd);
- if (CommandCopyLen(&cmd)) {
- prev_byte2 = ringbuffer[(pos - 2) & mask];
- prev_byte = ringbuffer[(pos - 1) & mask];
- if (cmd.cmd_prefix_ >= 128) {
- BlockSplitterAddSymbolDistance(&dist_blocks, cmd.dist_prefix_ & 0x3FF);
- }
- }
- }
-
- if (num_contexts == 1) {
- BlockSplitterFinishBlockLiteral(
- &lit_blocks.plain, /* is_final = */ BROTLI_TRUE);
- } else {
- ContextBlockSplitterFinishBlock(
- &lit_blocks.ctx, m, /* is_final = */ BROTLI_TRUE);
- if (BROTLI_IS_OOM(m)) return;
- }
- BlockSplitterFinishBlockCommand(&cmd_blocks, /* is_final = */ BROTLI_TRUE);
- BlockSplitterFinishBlockDistance(&dist_blocks, /* is_final = */ BROTLI_TRUE);
-
- if (num_contexts > 1) {
- MapStaticContexts(m, num_contexts, static_context_map, mb);
- }
-}
-
-void BrotliBuildMetaBlockGreedy(MemoryManager* m,
- const uint8_t* ringbuffer,
- size_t pos,
- size_t mask,
- uint8_t prev_byte,
- uint8_t prev_byte2,
- ContextLut literal_context_lut,
- size_t num_contexts,
- const uint32_t* static_context_map,
- const Command* commands,
- size_t n_commands,
- MetaBlockSplit* mb) {
- if (num_contexts == 1) {
- BrotliBuildMetaBlockGreedyInternal(m, ringbuffer, pos, mask, prev_byte,
- prev_byte2, literal_context_lut, 1, NULL, commands, n_commands, mb);
- } else {
- BrotliBuildMetaBlockGreedyInternal(m, ringbuffer, pos, mask, prev_byte,
- prev_byte2, literal_context_lut, num_contexts, static_context_map,
- commands, n_commands, mb);
- }
-}
-
-void BrotliOptimizeHistograms(uint32_t num_distance_codes,
- MetaBlockSplit* mb) {
- uint8_t good_for_rle[BROTLI_NUM_COMMAND_SYMBOLS];
- size_t i;
- for (i = 0; i < mb->literal_histograms_size; ++i) {
- BrotliOptimizeHuffmanCountsForRle(256, mb->literal_histograms[i].data_,
- good_for_rle);
- }
- for (i = 0; i < mb->command_histograms_size; ++i) {
- BrotliOptimizeHuffmanCountsForRle(BROTLI_NUM_COMMAND_SYMBOLS,
- mb->command_histograms[i].data_,
- good_for_rle);
- }
- for (i = 0; i < mb->distance_histograms_size; ++i) {
- BrotliOptimizeHuffmanCountsForRle(num_distance_codes,
- mb->distance_histograms[i].data_,
- good_for_rle);
- }
-}
-
-#if defined(__cplusplus) || defined(c_plusplus)
-} /* extern "C" */
-#endif
diff --git a/BaseTools/Source/C/BrotliCompress/enc/static_dict.c b/BaseTools/Source/C/BrotliCompress/enc/static_dict.c
deleted file mode 100644
index bad13a7f1693..000000000000
--- a/BaseTools/Source/C/BrotliCompress/enc/static_dict.c
+++ /dev/null
@@ -1,486 +0,0 @@
-/* Copyright 2013 Google Inc. All Rights Reserved.
-
- Distributed under MIT license.
- See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
-*/
-
-#include "./static_dict.h"
-
-#include "../common/dictionary.h"
-#include "../common/platform.h"
-#include "../common/transform.h"
-#include "./encoder_dict.h"
-#include "./find_match_length.h"
-
-#if defined(__cplusplus) || defined(c_plusplus)
-extern "C" {
-#endif
-
-static BROTLI_INLINE uint32_t Hash(const uint8_t* data) {
- uint32_t h = BROTLI_UNALIGNED_LOAD32LE(data) * kDictHashMul32;
- /* The higher bits contain more mixture from the multiplication,
- so we take our results from there. */
- return h >> (32 - kDictNumBits);
-}
-
-static BROTLI_INLINE void AddMatch(size_t distance, size_t len, size_t len_code,
- uint32_t* matches) {
- uint32_t match = (uint32_t)((distance << 5) + len_code);
- matches[len] = BROTLI_MIN(uint32_t, matches[len], match);
-}
-
-static BROTLI_INLINE size_t DictMatchLength(const BrotliDictionary* dictionary,
- const uint8_t* data,
- size_t id,
- size_t len,
- size_t maxlen) {
- const size_t offset = dictionary->offsets_by_length[len] + len * id;
- return FindMatchLengthWithLimit(&dictionary->data[offset], data,
- BROTLI_MIN(size_t, len, maxlen));
-}
-
-static BROTLI_INLINE BROTLI_BOOL IsMatch(const BrotliDictionary* dictionary,
- DictWord w, const uint8_t* data, size_t max_length) {
- if (w.len > max_length) {
- return BROTLI_FALSE;
- } else {
- const size_t offset = dictionary->offsets_by_length[w.len] +
- (size_t)w.len * (size_t)w.idx;
- const uint8_t* dict = &dictionary->data[offset];
- if (w.transform == 0) {
- /* Match against base dictionary word. */
- return
- TO_BROTLI_BOOL(FindMatchLengthWithLimit(dict, data, w.len) == w.len);
- } else if (w.transform == 10) {
- /* Match against uppercase first transform.
- Note that there are only ASCII uppercase words in the lookup table. */
- return TO_BROTLI_BOOL(dict[0] >= 'a' && dict[0] <= 'z' &&
- (dict[0] ^ 32) == data[0] &&
- FindMatchLengthWithLimit(&dict[1], &data[1], w.len - 1u) ==
- w.len - 1u);
- } else {
- /* Match against uppercase all transform.
- Note that there are only ASCII uppercase words in the lookup table. */
- size_t i;
- for (i = 0; i < w.len; ++i) {
- if (dict[i] >= 'a' && dict[i] <= 'z') {
- if ((dict[i] ^ 32) != data[i]) return BROTLI_FALSE;
- } else {
- if (dict[i] != data[i]) return BROTLI_FALSE;
- }
- }
- return BROTLI_TRUE;
- }
- }
-}
-
-BROTLI_BOOL BrotliFindAllStaticDictionaryMatches(
- const BrotliEncoderDictionary* dictionary, const uint8_t* data,
- size_t min_length, size_t max_length, uint32_t* matches) {
- BROTLI_BOOL has_found_match = BROTLI_FALSE;
- {
- size_t offset = dictionary->buckets[Hash(data)];
- BROTLI_BOOL end = !offset;
- while (!end) {
- DictWord w = dictionary->dict_words[offset++];
- const size_t l = w.len & 0x1F;
- const size_t n = (size_t)1 << dictionary->words->size_bits_by_length[l];
- const size_t id = w.idx;
- end = !!(w.len & 0x80);
- w.len = (uint8_t)l;
- if (w.transform == 0) {
- const size_t matchlen =
- DictMatchLength(dictionary->words, data, id, l, max_length);
- const uint8_t* s;
- size_t minlen;
- size_t maxlen;
- size_t len;
- /* Transform "" + BROTLI_TRANSFORM_IDENTITY + "" */
- if (matchlen == l) {
- AddMatch(id, l, l, matches);
- has_found_match = BROTLI_TRUE;
- }
- /* Transforms "" + BROTLI_TRANSFORM_OMIT_LAST_1 + "" and
- "" + BROTLI_TRANSFORM_OMIT_LAST_1 + "ing " */
- if (matchlen >= l - 1) {
- AddMatch(id + 12 * n, l - 1, l, matches);
- if (l + 2 < max_length &&
- data[l - 1] == 'i' && data[l] == 'n' && data[l + 1] == 'g' &&
- data[l + 2] == ' ') {
- AddMatch(id + 49 * n, l + 3, l, matches);
- }
- has_found_match = BROTLI_TRUE;
- }
- /* Transform "" + BROTLI_TRANSFORM_OMIT_LAST_# + "" (# = 2 .. 9) */
- minlen = min_length;
- if (l > 9) minlen = BROTLI_MAX(size_t, minlen, l - 9);
- maxlen = BROTLI_MIN(size_t, matchlen, l - 2);
- for (len = minlen; len <= maxlen; ++len) {
- size_t cut = l - len;
- size_t transform_id = (cut << 2) +
- (size_t)((dictionary->cutoffTransforms >> (cut * 6)) & 0x3F);
- AddMatch(id + transform_id * n, len, l, matches);
- has_found_match = BROTLI_TRUE;
- }
- if (matchlen < l || l + 6 >= max_length) {
- continue;
- }
- s = &data[l];
- /* Transforms "" + BROTLI_TRANSFORM_IDENTITY + <suffix> */
- if (s[0] == ' ') {
- AddMatch(id + n, l + 1, l, matches);
- if (s[1] == 'a') {
- if (s[2] == ' ') {
- AddMatch(id + 28 * n, l + 3, l, matches);
- } else if (s[2] == 's') {
- if (s[3] == ' ') AddMatch(id + 46 * n, l + 4, l, matches);
- } else if (s[2] == 't') {
- if (s[3] == ' ') AddMatch(id + 60 * n, l + 4, l, matches);
- } else if (s[2] == 'n') {
- if (s[3] == 'd' && s[4] == ' ') {
- AddMatch(id + 10 * n, l + 5, l, matches);
- }
- }
- } else if (s[1] == 'b') {
- if (s[2] == 'y' && s[3] == ' ') {
- AddMatch(id + 38 * n, l + 4, l, matches);
- }
- } else if (s[1] == 'i') {
- if (s[2] == 'n') {
- if (s[3] == ' ') AddMatch(id + 16 * n, l + 4, l, matches);
- } else if (s[2] == 's') {
- if (s[3] == ' ') AddMatch(id + 47 * n, l + 4, l, matches);
- }
- } else if (s[1] == 'f') {
- if (s[2] == 'o') {
- if (s[3] == 'r' && s[4] == ' ') {
- AddMatch(id + 25 * n, l + 5, l, matches);
- }
- } else if (s[2] == 'r') {
- if (s[3] == 'o' && s[4] == 'm' && s[5] == ' ') {
- AddMatch(id + 37 * n, l + 6, l, matches);
- }
- }
- } else if (s[1] == 'o') {
- if (s[2] == 'f') {
- if (s[3] == ' ') AddMatch(id + 8 * n, l + 4, l, matches);
- } else if (s[2] == 'n') {
- if (s[3] == ' ') AddMatch(id + 45 * n, l + 4, l, matches);
- }
- } else if (s[1] == 'n') {
- if (s[2] == 'o' && s[3] == 't' && s[4] == ' ') {
- AddMatch(id + 80 * n, l + 5, l, matches);
- }
- } else if (s[1] == 't') {
- if (s[2] == 'h') {
- if (s[3] == 'e') {
- if (s[4] == ' ') AddMatch(id + 5 * n, l + 5, l, matches);
- } else if (s[3] == 'a') {
- if (s[4] == 't' && s[5] == ' ') {
- AddMatch(id + 29 * n, l + 6, l, matches);
- }
- }
- } else if (s[2] == 'o') {
- if (s[3] == ' ') AddMatch(id + 17 * n, l + 4, l, matches);
- }
- } else if (s[1] == 'w') {
- if (s[2] == 'i' && s[3] == 't' && s[4] == 'h' && s[5] == ' ') {
- AddMatch(id + 35 * n, l + 6, l, matches);
- }
- }
- } else if (s[0] == '"') {
- AddMatch(id + 19 * n, l + 1, l, matches);
- if (s[1] == '>') {
- AddMatch(id + 21 * n, l + 2, l, matches);
- }
- } else if (s[0] == '.') {
- AddMatch(id + 20 * n, l + 1, l, matches);
- if (s[1] == ' ') {
- AddMatch(id + 31 * n, l + 2, l, matches);
- if (s[2] == 'T' && s[3] == 'h') {
- if (s[4] == 'e') {
- if (s[5] == ' ') AddMatch(id + 43 * n, l + 6, l, matches);
- } else if (s[4] == 'i') {
- if (s[5] == 's' && s[6] == ' ') {
- AddMatch(id + 75 * n, l + 7, l, matches);
- }
- }
- }
- }
- } else if (s[0] == ',') {
- AddMatch(id + 76 * n, l + 1, l, matches);
- if (s[1] == ' ') {
- AddMatch(id + 14 * n, l + 2, l, matches);
- }
- } else if (s[0] == '\n') {
- AddMatch(id + 22 * n, l + 1, l, matches);
- if (s[1] == '\t') {
- AddMatch(id + 50 * n, l + 2, l, matches);
- }
- } else if (s[0] == ']') {
- AddMatch(id + 24 * n, l + 1, l, matches);
- } else if (s[0] == '\'') {
- AddMatch(id + 36 * n, l + 1, l, matches);
- } else if (s[0] == ':') {
- AddMatch(id + 51 * n, l + 1, l, matches);
- } else if (s[0] == '(') {
- AddMatch(id + 57 * n, l + 1, l, matches);
- } else if (s[0] == '=') {
- if (s[1] == '"') {
- AddMatch(id + 70 * n, l + 2, l, matches);
- } else if (s[1] == '\'') {
- AddMatch(id + 86 * n, l + 2, l, matches);
- }
- } else if (s[0] == 'a') {
- if (s[1] == 'l' && s[2] == ' ') {
- AddMatch(id + 84 * n, l + 3, l, matches);
- }
- } else if (s[0] == 'e') {
- if (s[1] == 'd') {
- if (s[2] == ' ') AddMatch(id + 53 * n, l + 3, l, matches);
- } else if (s[1] == 'r') {
- if (s[2] == ' ') AddMatch(id + 82 * n, l + 3, l, matches);
- } else if (s[1] == 's') {
- if (s[2] == 't' && s[3] == ' ') {
- AddMatch(id + 95 * n, l + 4, l, matches);
- }
- }
- } else if (s[0] == 'f') {
- if (s[1] == 'u' && s[2] == 'l' && s[3] == ' ') {
- AddMatch(id + 90 * n, l + 4, l, matches);
- }
- } else if (s[0] == 'i') {
- if (s[1] == 'v') {
- if (s[2] == 'e' && s[3] == ' ') {
- AddMatch(id + 92 * n, l + 4, l, matches);
- }
- } else if (s[1] == 'z') {
- if (s[2] == 'e' && s[3] == ' ') {
- AddMatch(id + 100 * n, l + 4, l, matches);
- }
- }
- } else if (s[0] == 'l') {
- if (s[1] == 'e') {
- if (s[2] == 's' && s[3] == 's' && s[4] == ' ') {
- AddMatch(id + 93 * n, l + 5, l, matches);
- }
- } else if (s[1] == 'y') {
- if (s[2] == ' ') AddMatch(id + 61 * n, l + 3, l, matches);
- }
- } else if (s[0] == 'o') {
- if (s[1] == 'u' && s[2] == 's' && s[3] == ' ') {
- AddMatch(id + 106 * n, l + 4, l, matches);
- }
- }
- } else {
- /* Set is_all_caps=0 for BROTLI_TRANSFORM_UPPERCASE_FIRST and
- is_all_caps=1 otherwise (BROTLI_TRANSFORM_UPPERCASE_ALL)
- transform. */
- const BROTLI_BOOL is_all_caps =
- TO_BROTLI_BOOL(w.transform != BROTLI_TRANSFORM_UPPERCASE_FIRST);
- const uint8_t* s;
- if (!IsMatch(dictionary->words, w, data, max_length)) {
- continue;
- }
- /* Transform "" + kUppercase{First,All} + "" */
- AddMatch(id + (is_all_caps ? 44 : 9) * n, l, l, matches);
- has_found_match = BROTLI_TRUE;
- if (l + 1 >= max_length) {
- continue;
- }
- /* Transforms "" + kUppercase{First,All} + <suffix> */
- s = &data[l];
- if (s[0] == ' ') {
- AddMatch(id + (is_all_caps ? 68 : 4) * n, l + 1, l, matches);
- } else if (s[0] == '"') {
- AddMatch(id + (is_all_caps ? 87 : 66) * n, l + 1, l, matches);
- if (s[1] == '>') {
- AddMatch(id + (is_all_caps ? 97 : 69) * n, l + 2, l, matches);
- }
- } else if (s[0] == '.') {
- AddMatch(id + (is_all_caps ? 101 : 79) * n, l + 1, l, matches);
- if (s[1] == ' ') {
- AddMatch(id + (is_all_caps ? 114 : 88) * n, l + 2, l, matches);
- }
- } else if (s[0] == ',') {
- AddMatch(id + (is_all_caps ? 112 : 99) * n, l + 1, l, matches);
- if (s[1] == ' ') {
- AddMatch(id + (is_all_caps ? 107 : 58) * n, l + 2, l, matches);
- }
- } else if (s[0] == '\'') {
- AddMatch(id + (is_all_caps ? 94 : 74) * n, l + 1, l, matches);
- } else if (s[0] == '(') {
- AddMatch(id + (is_all_caps ? 113 : 78) * n, l + 1, l, matches);
- } else if (s[0] == '=') {
- if (s[1] == '"') {
- AddMatch(id + (is_all_caps ? 105 : 104) * n, l + 2, l, matches);
- } else if (s[1] == '\'') {
- AddMatch(id + (is_all_caps ? 116 : 108) * n, l + 2, l, matches);
- }
- }
- }
- }
- }
- /* Transforms with prefixes " " and "." */
- if (max_length >= 5 && (data[0] == ' ' || data[0] == '.')) {
- BROTLI_BOOL is_space = TO_BROTLI_BOOL(data[0] == ' ');
- size_t offset = dictionary->buckets[Hash(&data[1])];
- BROTLI_BOOL end = !offset;
- while (!end) {
- DictWord w = dictionary->dict_words[offset++];
- const size_t l = w.len & 0x1F;
- const size_t n = (size_t)1 << dictionary->words->size_bits_by_length[l];
- const size_t id = w.idx;
- end = !!(w.len & 0x80);
- w.len = (uint8_t)l;
- if (w.transform == 0) {
- const uint8_t* s;
- if (!IsMatch(dictionary->words, w, &data[1], max_length - 1)) {
- continue;
- }
- /* Transforms " " + BROTLI_TRANSFORM_IDENTITY + "" and
- "." + BROTLI_TRANSFORM_IDENTITY + "" */
- AddMatch(id + (is_space ? 6 : 32) * n, l + 1, l, matches);
- has_found_match = BROTLI_TRUE;
- if (l + 2 >= max_length) {
- continue;
- }
- /* Transforms " " + BROTLI_TRANSFORM_IDENTITY + <suffix> and
- "." + BROTLI_TRANSFORM_IDENTITY + <suffix>
- */
- s = &data[l + 1];
- if (s[0] == ' ') {
- AddMatch(id + (is_space ? 2 : 77) * n, l + 2, l, matches);
- } else if (s[0] == '(') {
- AddMatch(id + (is_space ? 89 : 67) * n, l + 2, l, matches);
- } else if (is_space) {
- if (s[0] == ',') {
- AddMatch(id + 103 * n, l + 2, l, matches);
- if (s[1] == ' ') {
- AddMatch(id + 33 * n, l + 3, l, matches);
- }
- } else if (s[0] == '.') {
- AddMatch(id + 71 * n, l + 2, l, matches);
- if (s[1] == ' ') {
- AddMatch(id + 52 * n, l + 3, l, matches);
- }
- } else if (s[0] == '=') {
- if (s[1] == '"') {
- AddMatch(id + 81 * n, l + 3, l, matches);
- } else if (s[1] == '\'') {
- AddMatch(id + 98 * n, l + 3, l, matches);
- }
- }
- }
- } else if (is_space) {
- /* Set is_all_caps=0 for BROTLI_TRANSFORM_UPPERCASE_FIRST and
- is_all_caps=1 otherwise (BROTLI_TRANSFORM_UPPERCASE_ALL)
- transform. */
- const BROTLI_BOOL is_all_caps =
- TO_BROTLI_BOOL(w.transform != BROTLI_TRANSFORM_UPPERCASE_FIRST);
- const uint8_t* s;
- if (!IsMatch(dictionary->words, w, &data[1], max_length - 1)) {
- continue;
- }
- /* Transforms " " + kUppercase{First,All} + "" */
- AddMatch(id + (is_all_caps ? 85 : 30) * n, l + 1, l, matches);
- has_found_match = BROTLI_TRUE;
- if (l + 2 >= max_length) {
- continue;
- }
- /* Transforms " " + kUppercase{First,All} + <suffix> */
- s = &data[l + 1];
- if (s[0] == ' ') {
- AddMatch(id + (is_all_caps ? 83 : 15) * n, l + 2, l, matches);
- } else if (s[0] == ',') {
- if (!is_all_caps) {
- AddMatch(id + 109 * n, l + 2, l, matches);
- }
- if (s[1] == ' ') {
- AddMatch(id + (is_all_caps ? 111 : 65) * n, l + 3, l, matches);
- }
- } else if (s[0] == '.') {
- AddMatch(id + (is_all_caps ? 115 : 96) * n, l + 2, l, matches);
- if (s[1] == ' ') {
- AddMatch(id + (is_all_caps ? 117 : 91) * n, l + 3, l, matches);
- }
- } else if (s[0] == '=') {
- if (s[1] == '"') {
- AddMatch(id + (is_all_caps ? 110 : 118) * n, l + 3, l, matches);
- } else if (s[1] == '\'') {
- AddMatch(id + (is_all_caps ? 119 : 120) * n, l + 3, l, matches);
- }
- }
- }
- }
- }
- if (max_length >= 6) {
- /* Transforms with prefixes "e ", "s ", ", " and "\xC2\xA0" */
- if ((data[1] == ' ' &&
- (data[0] == 'e' || data[0] == 's' || data[0] == ',')) ||
- (data[0] == 0xC2 && data[1] == 0xA0)) {
- size_t offset = dictionary->buckets[Hash(&data[2])];
- BROTLI_BOOL end = !offset;
- while (!end) {
- DictWord w = dictionary->dict_words[offset++];
- const size_t l = w.len & 0x1F;
- const size_t n = (size_t)1 << dictionary->words->size_bits_by_length[l];
- const size_t id = w.idx;
- end = !!(w.len & 0x80);
- w.len = (uint8_t)l;
- if (w.transform == 0 &&
- IsMatch(dictionary->words, w, &data[2], max_length - 2)) {
- if (data[0] == 0xC2) {
- AddMatch(id + 102 * n, l + 2, l, matches);
- has_found_match = BROTLI_TRUE;
- } else if (l + 2 < max_length && data[l + 2] == ' ') {
- size_t t = data[0] == 'e' ? 18 : (data[0] == 's' ? 7 : 13);
- AddMatch(id + t * n, l + 3, l, matches);
- has_found_match = BROTLI_TRUE;
- }
- }
- }
- }
- }
- if (max_length >= 9) {
- /* Transforms with prefixes " the " and ".com/" */
- if ((data[0] == ' ' && data[1] == 't' && data[2] == 'h' &&
- data[3] == 'e' && data[4] == ' ') ||
- (data[0] == '.' && data[1] == 'c' && data[2] == 'o' &&
- data[3] == 'm' && data[4] == '/')) {
- size_t offset = dictionary->buckets[Hash(&data[5])];
- BROTLI_BOOL end = !offset;
- while (!end) {
- DictWord w = dictionary->dict_words[offset++];
- const size_t l = w.len & 0x1F;
- const size_t n = (size_t)1 << dictionary->words->size_bits_by_length[l];
- const size_t id = w.idx;
- end = !!(w.len & 0x80);
- w.len = (uint8_t)l;
- if (w.transform == 0 &&
- IsMatch(dictionary->words, w, &data[5], max_length - 5)) {
- AddMatch(id + (data[0] == ' ' ? 41 : 72) * n, l + 5, l, matches);
- has_found_match = BROTLI_TRUE;
- if (l + 5 < max_length) {
- const uint8_t* s = &data[l + 5];
- if (data[0] == ' ') {
- if (l + 8 < max_length &&
- s[0] == ' ' && s[1] == 'o' && s[2] == 'f' && s[3] == ' ') {
- AddMatch(id + 62 * n, l + 9, l, matches);
- if (l + 12 < max_length &&
- s[4] == 't' && s[5] == 'h' && s[6] == 'e' && s[7] == ' ') {
- AddMatch(id + 73 * n, l + 13, l, matches);
- }
- }
- }
- }
- }
- }
- }
- }
- return has_found_match;
-}
-
-#if defined(__cplusplus) || defined(c_plusplus)
-} /* extern "C" */
-#endif
diff --git a/BaseTools/Source/C/BrotliCompress/enc/utf8_util.c b/BaseTools/Source/C/BrotliCompress/enc/utf8_util.c
deleted file mode 100644
index 9d21aa9fa3ed..000000000000
--- a/BaseTools/Source/C/BrotliCompress/enc/utf8_util.c
+++ /dev/null
@@ -1,85 +0,0 @@
-/* Copyright 2013 Google Inc. All Rights Reserved.
-
- Distributed under MIT license.
- See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
-*/
-
-/* Heuristics for deciding about the UTF8-ness of strings. */
-
-#include "./utf8_util.h"
-
-#include <brotli/types.h>
-
-#if defined(__cplusplus) || defined(c_plusplus)
-extern "C" {
-#endif
-
-static size_t BrotliParseAsUTF8(
- int* symbol, const uint8_t* input, size_t size) {
- /* ASCII */
- if ((input[0] & 0x80) == 0) {
- *symbol = input[0];
- if (*symbol > 0) {
- return 1;
- }
- }
- /* 2-byte UTF8 */
- if (size > 1u &&
- (input[0] & 0xE0) == 0xC0 &&
- (input[1] & 0xC0) == 0x80) {
- *symbol = (((input[0] & 0x1F) << 6) |
- (input[1] & 0x3F));
- if (*symbol > 0x7F) {
- return 2;
- }
- }
- /* 3-byte UFT8 */
- if (size > 2u &&
- (input[0] & 0xF0) == 0xE0 &&
- (input[1] & 0xC0) == 0x80 &&
- (input[2] & 0xC0) == 0x80) {
- *symbol = (((input[0] & 0x0F) << 12) |
- ((input[1] & 0x3F) << 6) |
- (input[2] & 0x3F));
- if (*symbol > 0x7FF) {
- return 3;
- }
- }
- /* 4-byte UFT8 */
- if (size > 3u &&
- (input[0] & 0xF8) == 0xF0 &&
- (input[1] & 0xC0) == 0x80 &&
- (input[2] & 0xC0) == 0x80 &&
- (input[3] & 0xC0) == 0x80) {
- *symbol = (((input[0] & 0x07) << 18) |
- ((input[1] & 0x3F) << 12) |
- ((input[2] & 0x3F) << 6) |
- (input[3] & 0x3F));
- if (*symbol > 0xFFFF && *symbol <= 0x10FFFF) {
- return 4;
- }
- }
- /* Not UTF8, emit a special symbol above the UTF8-code space */
- *symbol = 0x110000 | input[0];
- return 1;
-}
-
-/* Returns 1 if at least min_fraction of the data is UTF8-encoded.*/
-BROTLI_BOOL BrotliIsMostlyUTF8(
- const uint8_t* data, const size_t pos, const size_t mask,
- const size_t length, const double min_fraction) {
- size_t size_utf8 = 0;
- size_t i = 0;
- while (i < length) {
- int symbol;
- size_t bytes_read =
- BrotliParseAsUTF8(&symbol, &data[(pos + i) & mask], length - i);
- i += bytes_read;
- if (symbol < 0x110000) size_utf8 += bytes_read;
- }
- return TO_BROTLI_BOOL(size_utf8 > min_fraction * (double)length);
-}
-
-#if defined(__cplusplus) || defined(c_plusplus)
-} /* extern "C" */
-#endif
diff --git a/BaseTools/Source/C/BrotliCompress/tools/brotli.c b/BaseTools/Source/C/BrotliCompress/tools/brotli.c
deleted file mode 100644
index b0246e1ecf86..000000000000
--- a/BaseTools/Source/C/BrotliCompress/tools/brotli.c
+++ /dev/null
@@ -1,1143 +0,0 @@
-/* Copyright 2014 Google Inc. All Rights Reserved.
-
- Distributed under MIT license.
- See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
-*/
-
-/* Command line interface for Brotli library. */
-
-#include <errno.h>
-#include <fcntl.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <sys/stat.h>
-#include <sys/types.h>
-#include <time.h>
-
-#include "../common/constants.h"
-#include "../common/version.h"
-#include <brotli/decode.h>
-#include <brotli/encode.h>
-
-#if !defined(_WIN32)
-#include <unistd.h>
-#include <utime.h>
-#define MAKE_BINARY(FILENO) (FILENO)
-#else
-#include <io.h>
-#include <share.h>
-#include <sys/utime.h>
-
-#define MAKE_BINARY(FILENO) (_setmode((FILENO), _O_BINARY), (FILENO))
-
-#if !defined(__MINGW32__)
-#define STDIN_FILENO _fileno(stdin)
-#define STDOUT_FILENO _fileno(stdout)
-#define S_IRUSR S_IREAD
-#define S_IWUSR S_IWRITE
-#endif
-
-#define fdopen _fdopen
-#define isatty _isatty
-#define unlink _unlink
-#define utimbuf _utimbuf
-#define utime _utime
-
-#define fopen ms_fopen
-#define open ms_open
-
-#define chmod(F, P) (0)
-#define chown(F, O, G) (0)
-
-#if defined(_MSC_VER) && (_MSC_VER >= 1400)
-#define fseek _fseeki64
-#define ftell _ftelli64
-#endif
-
-static FILE* ms_fopen(const char* filename, const char* mode) {
- FILE* result = 0;
- fopen_s(&result, filename, mode);
- return result;
-}
-
-static int ms_open(const char* filename, int oflag, int pmode) {
- int result = -1;
- _sopen_s(&result, filename, oflag | O_BINARY, _SH_DENYNO, pmode);
- return result;
-}
-#endif /* WIN32 */
-
-typedef enum {
- COMMAND_COMPRESS,
- COMMAND_DECOMPRESS,
- COMMAND_HELP,
- COMMAND_INVALID,
- COMMAND_TEST_INTEGRITY,
- COMMAND_NOOP,
- COMMAND_VERSION
-} Command;
-
-#define DEFAULT_LGWIN 24
-#define DEFAULT_SUFFIX ".br"
-#define MAX_OPTIONS 20
-#define DECODE_HEADER_SIZE 0x10
-#define GAP_MEM_BLOCK 0x1000
-
-typedef struct {
- /* Parameters */
- int gmem;
- int quality;
- int lgwin;
- BROTLI_BOOL force_overwrite;
- BROTLI_BOOL junk_source;
- BROTLI_BOOL copy_stat;
- BROTLI_BOOL verbose;
- BROTLI_BOOL write_to_stdout;
- BROTLI_BOOL test_integrity;
- BROTLI_BOOL decompress;
- BROTLI_BOOL large_window;
- const char* output_path;
- const char* suffix;
- int not_input_indices[MAX_OPTIONS];
- size_t longest_path_len;
- size_t input_count;
-
- /* Inner state */
- int argc;
- char** argv;
- char* modified_path; /* Storage for path with appended / cut suffix */
- int iterator;
- int ignore;
- BROTLI_BOOL iterator_error;
- uint8_t* buffer;
- uint8_t* input;
- uint8_t* output;
- const char* current_input_path;
- const char* current_output_path;
- int64_t input_file_length; /* -1, if impossible to calculate */
- FILE* fin;
- FILE* fout;
-
- /* I/O buffers */
- size_t available_in;
- const uint8_t* next_in;
- size_t available_out;
- uint8_t* next_out;
-} Context;
-
-/* Parse up to 5 decimal digits. */
-static BROTLI_BOOL ParseInt(const char* s, int low, int high, int* result) {
- int value = 0;
- int i;
- for (i = 0; i < 5; ++i) {
- char c = s[i];
- if (c == 0) break;
- if (s[i] < '0' || s[i] > '9') return BROTLI_FALSE;
- value = (10 * value) + (c - '0');
- }
- if (i == 0) return BROTLI_FALSE;
- if (i > 1 && s[0] == '0') return BROTLI_FALSE;
- if (s[i] != 0) return BROTLI_FALSE;
- if (value < low || value > high) return BROTLI_FALSE;
- *result = value;
- return BROTLI_TRUE;
-}
-
-/* Returns "base file name" or its tail, if it contains '/' or '\'. */
-static const char* FileName(const char* path) {
- const char* separator_position = strrchr(path, '/');
- if (separator_position) path = separator_position + 1;
- separator_position = strrchr(path, '\\');
- if (separator_position) path = separator_position + 1;
- return path;
-}
-
-/* Detect if the program name is a special alias that infers a command type. */
-static Command ParseAlias(const char* name) {
- /* TODO: cast name to lower case? */
- const char* unbrotli = "unbrotli";
- size_t unbrotli_len = strlen(unbrotli);
- name = FileName(name);
- /* Partial comparison. On Windows there could be ".exe" suffix. */
- if (strncmp(name, unbrotli, unbrotli_len) == 0) {
- char terminator = name[unbrotli_len];
- if (terminator == 0 || terminator == '.') return COMMAND_DECOMPRESS;
- }
- return COMMAND_COMPRESS;
-}
-
-static Command ParseParams(Context* params) {
- int argc = params->argc;
- char** argv = params->argv;
- int i;
- int next_option_index = 0;
- size_t input_count = 0;
- size_t longest_path_len = 1;
- BROTLI_BOOL command_set = BROTLI_FALSE;
- BROTLI_BOOL gmem_set = BROTLI_FALSE;
- BROTLI_BOOL quality_set = BROTLI_FALSE;
- BROTLI_BOOL output_set = BROTLI_FALSE;
- BROTLI_BOOL keep_set = BROTLI_FALSE;
- BROTLI_BOOL lgwin_set = BROTLI_FALSE;
- BROTLI_BOOL suffix_set = BROTLI_FALSE;
- BROTLI_BOOL after_dash_dash = BROTLI_FALSE;
- Command command = ParseAlias(argv[0]);
-
- for (i = 1; i < argc; ++i) {
- const char* arg = argv[i];
- /* C99 5.1.2.2.1: "members argv[0] through argv[argc-1] inclusive shall
- contain pointers to strings"; NULL and 0-length are not forbidden. */
- size_t arg_len = arg ? strlen(arg) : 0;
-
- if (arg_len == 0) {
- params->not_input_indices[next_option_index++] = i;
- continue;
- }
-
- /* Too many options. The expected longest option list is:
- "-q 0 -w 10 -o f -D d -S b -d -f -k -n -v --", i.e. 16 items in total.
- This check is an additional guard that is never triggered, but provides
- a guard for future changes. */
- if (next_option_index > (MAX_OPTIONS - 2)) {
- fprintf(stderr, "too many options passed\n");
- return COMMAND_INVALID;
- }
-
- /* Input file entry. */
- if (after_dash_dash || arg[0] != '-' || arg_len == 1) {
- input_count++;
- if (longest_path_len < arg_len) longest_path_len = arg_len;
- continue;
- }
-
- /* Not a file entry. */
- params->not_input_indices[next_option_index++] = i;
-
- /* '--' entry stop parsing arguments. */
- if (arg_len == 2 && arg[1] == '-') {
- after_dash_dash = BROTLI_TRUE;
- continue;
- }
-
- /* Simple / coalesced options. */
- if (arg[1] != '-') {
- size_t j;
- for (j = 1; j < arg_len; ++j) {
- char c = arg[j];
- if (c >= '0' && c <= '9') {
- if (quality_set) {
- fprintf(stderr, "quality already set\n");
- return COMMAND_INVALID;
- }
- quality_set = BROTLI_TRUE;
- params->quality = c - '0';
- continue;
- } else if (c == 'c') {
- if (output_set) {
- fprintf(stderr, "write to standard output already set\n");
- return COMMAND_INVALID;
- }
- output_set = BROTLI_TRUE;
- params->write_to_stdout = BROTLI_TRUE;
- continue;
- } else if (c == 'd') {
- if (command_set) {
- fprintf(stderr, "command already set when parsing -d\n");
- return COMMAND_INVALID;
- }
- command_set = BROTLI_TRUE;
- command = COMMAND_DECOMPRESS;
- continue;
- } else if (c == 'f') {
- if (params->force_overwrite) {
- fprintf(stderr, "force output overwrite already set\n");
- return COMMAND_INVALID;
- }
- params->force_overwrite = BROTLI_TRUE;
- continue;
- } else if (c == 'h') {
- /* Don't parse further. */
- return COMMAND_HELP;
- } else if (c == 'j' || c == 'k') {
- if (keep_set) {
- fprintf(stderr, "argument --rm / -j or --keep / -n already set\n");
- return COMMAND_INVALID;
- }
- keep_set = BROTLI_TRUE;
- params->junk_source = TO_BROTLI_BOOL(c == 'j');
- continue;
- } else if (c == 'n') {
- if (!params->copy_stat) {
- fprintf(stderr, "argument --no-copy-stat / -n already set\n");
- return COMMAND_INVALID;
- }
- params->copy_stat = BROTLI_FALSE;
- continue;
- } else if (c == 't') {
- if (command_set) {
- fprintf(stderr, "command already set when parsing -t\n");
- return COMMAND_INVALID;
- }
- command_set = BROTLI_TRUE;
- command = COMMAND_TEST_INTEGRITY;
- continue;
- } else if (c == 'v') {
- if (params->verbose) {
- fprintf(stderr, "argument --verbose / -v already set\n");
- return COMMAND_INVALID;
- }
- params->verbose = BROTLI_TRUE;
- continue;
- } else if (c == 'V') {
- /* Don't parse further. */
- return COMMAND_VERSION;
- } else if (c == 'Z') {
- if (quality_set) {
- fprintf(stderr, "quality already set\n");
- return COMMAND_INVALID;
- }
- quality_set = BROTLI_TRUE;
- params->quality = 11;
- continue;
- }
- /* o/q/w/D/S with parameter is expected */
- if (c != 'o' && c != 'q' && c != 'w' && c != 'D' && c != 'S') {
- fprintf(stderr, "invalid argument -%c\n", c);
- return COMMAND_INVALID;
- }
- if (j + 1 != arg_len) {
- fprintf(stderr, "expected parameter for argument -%c\n", c);
- return COMMAND_INVALID;
- }
- i++;
- if (i == argc || !argv[i] || argv[i][0] == 0) {
- fprintf(stderr, "expected parameter for argument -%c\n", c);
- return COMMAND_INVALID;
- }
- params->not_input_indices[next_option_index++] = i;
- if (c == 'o') {
- if (output_set) {
- fprintf(stderr, "write to standard output already set (-o)\n");
- return COMMAND_INVALID;
- }
- params->output_path = argv[i];
- } else if (c == 'g') {
- gmem_set = ParseInt(argv[i], 1, 0x10, ¶ms->gmem);
- if (!gmem_set) {
- fprintf(stderr, "error parsing gmem value [%s]\n", argv[i]);
- return COMMAND_INVALID;
- }
- } else if (c == 'q') {
- if (quality_set) {
- fprintf(stderr, "quality already set\n");
- return COMMAND_INVALID;
- }
- quality_set = ParseInt(argv[i], BROTLI_MIN_QUALITY,
- BROTLI_MAX_QUALITY, ¶ms->quality);
- if (!quality_set) {
- fprintf(stderr, "error parsing quality value [%s]\n", argv[i]);
- return COMMAND_INVALID;
- }
- } else if (c == 'w') {
- if (lgwin_set) {
- fprintf(stderr, "lgwin parameter already set\n");
- return COMMAND_INVALID;
- }
- lgwin_set = ParseInt(argv[i], 0,
- BROTLI_MAX_WINDOW_BITS, ¶ms->lgwin);
- if (!lgwin_set) {
- fprintf(stderr, "error parsing lgwin value [%s]\n", argv[i]);
- return COMMAND_INVALID;
- }
- if (params->lgwin != 0 && params->lgwin < BROTLI_MIN_WINDOW_BITS) {
- fprintf(stderr,
- "lgwin parameter (%d) smaller than the minimum (%d)\n",
- params->lgwin, BROTLI_MIN_WINDOW_BITS);
- return COMMAND_INVALID;
- }
- } else if (c == 'S') {
- if (suffix_set) {
- fprintf(stderr, "suffix already set\n");
- return COMMAND_INVALID;
- }
- suffix_set = BROTLI_TRUE;
- params->suffix = argv[i];
- }
- }
- } else { /* Double-dash. */
- arg = &arg[2];
- if (strcmp("best", arg) == 0) {
- if (quality_set) {
- fprintf(stderr, "quality already set\n");
- return COMMAND_INVALID;
- }
- quality_set = BROTLI_TRUE;
- params->quality = 11;
- } else if (strcmp("decompress", arg) == 0) {
- if (command_set) {
- fprintf(stderr, "command already set when parsing --decompress\n");
- return COMMAND_INVALID;
- }
- command_set = BROTLI_TRUE;
- command = COMMAND_DECOMPRESS;
- } else if (strcmp("force", arg) == 0) {
- if (params->force_overwrite) {
- fprintf(stderr, "force output overwrite already set\n");
- return COMMAND_INVALID;
- }
- params->force_overwrite = BROTLI_TRUE;
- } else if (strcmp("help", arg) == 0) {
- /* Don't parse further. */
- return COMMAND_HELP;
- } else if (strcmp("keep", arg) == 0) {
- if (keep_set) {
- fprintf(stderr, "argument --rm / -j or --keep / -n already set\n");
- return COMMAND_INVALID;
- }
- keep_set = BROTLI_TRUE;
- params->junk_source = BROTLI_FALSE;
- } else if (strcmp("no-copy-stat", arg) == 0) {
- if (!params->copy_stat) {
- fprintf(stderr, "argument --no-copy-stat / -n already set\n");
- return COMMAND_INVALID;
- }
- params->copy_stat = BROTLI_FALSE;
- } else if (strcmp("rm", arg) == 0) {
- if (keep_set) {
- fprintf(stderr, "argument --rm / -j or --keep / -n already set\n");
- return COMMAND_INVALID;
- }
- keep_set = BROTLI_TRUE;
- params->junk_source = BROTLI_TRUE;
- } else if (strcmp("stdout", arg) == 0) {
- if (output_set) {
- fprintf(stderr, "write to standard output already set\n");
- return COMMAND_INVALID;
- }
- output_set = BROTLI_TRUE;
- params->write_to_stdout = BROTLI_TRUE;
- } else if (strcmp("test", arg) == 0) {
- if (command_set) {
- fprintf(stderr, "command already set when parsing --test\n");
- return COMMAND_INVALID;
- }
- command_set = BROTLI_TRUE;
- command = COMMAND_TEST_INTEGRITY;
- } else if (strcmp("verbose", arg) == 0) {
- if (params->verbose) {
- fprintf(stderr, "argument --verbose / -v already set\n");
- return COMMAND_INVALID;
- }
- params->verbose = BROTLI_TRUE;
- } else if (strcmp("version", arg) == 0) {
- /* Don't parse further. */
- return COMMAND_VERSION;
- } else {
- /* key=value */
- const char* value = strrchr(arg, '=');
- size_t key_len;
- if (!value || value[1] == 0) {
- fprintf(stderr, "must pass the parameter as --%s=value\n", arg);
- return COMMAND_INVALID;
- }
- key_len = (size_t)(value - arg);
- value++;
- if (strncmp("lgwin", arg, key_len) == 0) {
- if (lgwin_set) {
- fprintf(stderr, "lgwin parameter already set\n");
- return COMMAND_INVALID;
- }
- lgwin_set = ParseInt(value, 0,
- BROTLI_MAX_WINDOW_BITS, ¶ms->lgwin);
- if (!lgwin_set) {
- fprintf(stderr, "error parsing lgwin value [%s]\n", value);
- return COMMAND_INVALID;
- }
- if (params->lgwin != 0 && params->lgwin < BROTLI_MIN_WINDOW_BITS) {
- fprintf(stderr,
- "lgwin parameter (%d) smaller than the minimum (%d)\n",
- params->lgwin, BROTLI_MIN_WINDOW_BITS);
- return COMMAND_INVALID;
- }
- } else if (strncmp("large_window", arg, key_len) == 0) {
- /* This option is intentionally not mentioned in help. */
- if (lgwin_set) {
- fprintf(stderr, "lgwin parameter already set\n");
- return COMMAND_INVALID;
- }
- lgwin_set = ParseInt(value, 0,
- BROTLI_LARGE_MAX_WINDOW_BITS, ¶ms->lgwin);
- if (!lgwin_set) {
- fprintf(stderr, "error parsing lgwin value [%s]\n", value);
- return COMMAND_INVALID;
- }
- if (params->lgwin != 0 && params->lgwin < BROTLI_MIN_WINDOW_BITS) {
- fprintf(stderr,
- "lgwin parameter (%d) smaller than the minimum (%d)\n",
- params->lgwin, BROTLI_MIN_WINDOW_BITS);
- return COMMAND_INVALID;
- }
- } else if (strncmp("output", arg, key_len) == 0) {
- if (output_set) {
- fprintf(stderr,
- "write to standard output already set (--output)\n");
- return COMMAND_INVALID;
- }
- params->output_path = value;
- } else if (strncmp("gap", arg, key_len) == 0) {
- gmem_set = ParseInt(value, 1, 0x10, ¶ms->gmem);
- if (!gmem_set) {
- fprintf(stderr, "error parsing gmem value [%s]\n", value);
- return COMMAND_INVALID;
- }
- } else if (strncmp("quality", arg, key_len) == 0) {
- if (quality_set) {
- fprintf(stderr, "quality already set\n");
- return COMMAND_INVALID;
- }
- quality_set = ParseInt(value, BROTLI_MIN_QUALITY,
- BROTLI_MAX_QUALITY, ¶ms->quality);
- if (!quality_set) {
- fprintf(stderr, "error parsing quality value [%s]\n", value);
- return COMMAND_INVALID;
- }
- } else if (strncmp("suffix", arg, key_len) == 0) {
- if (suffix_set) {
- fprintf(stderr, "suffix already set\n");
- return COMMAND_INVALID;
- }
- suffix_set = BROTLI_TRUE;
- params->suffix = value;
- } else {
- fprintf(stderr, "invalid parameter: [%s]\n", arg);
- return COMMAND_INVALID;
- }
- }
- }
- }
-
- params->input_count = input_count;
- params->longest_path_len = longest_path_len;
- params->decompress = (command == COMMAND_DECOMPRESS);
- params->test_integrity = (command == COMMAND_TEST_INTEGRITY);
-
- if (input_count > 1 && output_set) return COMMAND_INVALID;
- if (params->test_integrity) {
- if (params->output_path) return COMMAND_INVALID;
- if (params->write_to_stdout) return COMMAND_INVALID;
- }
- if (strchr(params->suffix, '/') || strchr(params->suffix, '\\')) {
- return COMMAND_INVALID;
- }
-
- return command;
-}
-
-static void PrintVersion(void) {
- int major = BROTLI_VERSION >> 24;
- int minor = (BROTLI_VERSION >> 12) & 0xFFF;
- int patch = BROTLI_VERSION & 0xFFF;
- fprintf(stdout, "brotli %d.%d.%d\n", major, minor, patch);
-}
-
-static void PrintHelp(const char* name, BROTLI_BOOL error) {
- FILE* media = error ? stderr : stdout;
- /* String is cut to pieces with length less than 509, to conform C90 spec. */
- fprintf(media,
-"Usage: %s [OPTION]... [FILE]...\n",
- name);
- fprintf(media,
-"Options:\n"
-" -# compression level (0-9)\n"
-" -c, --stdout write on standard output\n"
-" -d, --decompress decompress\n"
-" -f, --force force output file overwrite\n"
-" -h, --help display this help and exit\n");
- fprintf(media,
-" -j, --rm remove source file(s)\n"
-" -k, --keep keep source file(s) (default)\n"
-" -n, --no-copy-stat do not copy source file(s) attributes\n"
-" -o FILE, --output=FILE output file (only if 1 input file)\n");
- fprintf(media,
-" -g NUM, --gap=NUM scratch memory gap level (1-16)\n");
- fprintf(media,
-" -q NUM, --quality=NUM compression level (%d-%d)\n",
- BROTLI_MIN_QUALITY, BROTLI_MAX_QUALITY);
- fprintf(media,
-" -t, --test test compressed file integrity\n"
-" -v, --verbose verbose mode\n");
- fprintf(media,
-" -w NUM, --lgwin=NUM set LZ77 window size (0, %d-%d)\n",
- BROTLI_MIN_WINDOW_BITS, BROTLI_MAX_WINDOW_BITS);
- fprintf(media,
-" window size = 2**NUM - 16\n"
-" 0 lets compressor choose the optimal value\n");
- fprintf(media,
-" -S SUF, --suffix=SUF output file suffix (default:'%s')\n",
- DEFAULT_SUFFIX);
- fprintf(media,
-" -V, --version display version and exit\n"
-" -Z, --best use best compression level (11) (default)\n"
-"Simple options could be coalesced, i.e. '-9kf' is equivalent to '-9 -k -f'.\n"
-"With no FILE, or when FILE is -, read standard input.\n"
-"All arguments after '--' are treated as files.\n");
-}
-
-static const char* PrintablePath(const char* path) {
- return path ? path : "con";
-}
-
-static BROTLI_BOOL OpenInputFile(const char* input_path, FILE** f) {
- *f = NULL;
- if (!input_path) {
- *f = fdopen(MAKE_BINARY(STDIN_FILENO), "rb");
- return BROTLI_TRUE;
- }
- *f = fopen(input_path, "rb");
- if (!*f) {
- fprintf(stderr, "failed to open input file [%s]: %s\n",
- PrintablePath(input_path), strerror(errno));
- return BROTLI_FALSE;
- }
- return BROTLI_TRUE;
-}
-
-static BROTLI_BOOL OpenOutputFile(const char* output_path, FILE** f,
- BROTLI_BOOL force) {
- int fd;
- *f = NULL;
- if (!output_path) {
- *f = fdopen(MAKE_BINARY(STDOUT_FILENO), "wb");
- return BROTLI_TRUE;
- }
- fd = open(output_path, O_CREAT | (force ? 0 : O_EXCL) | O_WRONLY | O_TRUNC,
- S_IRUSR | S_IWUSR);
- if (fd < 0) {
- fd = open(output_path, (force ? 0 : O_EXCL) | O_WRONLY | O_TRUNC,
- S_IRUSR | S_IWUSR);
- if (fd < 0) {
- fprintf(stderr, "failed to open output file [%s]: %s\n",
- PrintablePath(output_path), strerror(errno));
- return BROTLI_FALSE;
- }
- }
-
- *f = fdopen(fd, "wb");
- if (!*f) {
- fprintf(stderr, "failed to open output file [%s]: %s\n",
- PrintablePath(output_path), strerror(errno));
- return BROTLI_FALSE;
- }
- return BROTLI_TRUE;
-}
-
-static int64_t FileSize(const char* path) {
- FILE* f = fopen(path, "rb");
- int64_t retval;
- if (f == NULL) {
- return -1;
- }
- if (fseek(f, 0L, SEEK_END) != 0) {
- fclose(f);
- return -1;
- }
- retval = ftell(f);
- if (fclose(f) != 0) {
- return -1;
- }
- return retval;
-}
-
-/* Copy file times and permissions.
- TODO: this is a "best effort" implementation; honest cross-platform
- fully featured implementation is way too hacky; add more hacks by request. */
-static void CopyStat(const char* input_path, const char* output_path) {
- struct stat statbuf;
- struct utimbuf times;
- int res;
- if (input_path == 0 || output_path == 0) {
- return;
- }
- if (stat(input_path, &statbuf) != 0) {
- return;
- }
- times.actime = statbuf.st_atime;
- times.modtime = statbuf.st_mtime;
- utime(output_path, ×);
- res = chmod(output_path, statbuf.st_mode & (S_IRWXU | S_IRWXG | S_IRWXO));
- if (res != 0) {
- fprintf(stderr, "setting access bits failed for [%s]: %s\n",
- PrintablePath(output_path), strerror(errno));
- }
- res = chown(output_path, (uid_t)-1, statbuf.st_gid);
- if (res != 0) {
- fprintf(stderr, "setting group failed for [%s]: %s\n",
- PrintablePath(output_path), strerror(errno));
- }
- res = chown(output_path, statbuf.st_uid, (gid_t)-1);
- if (res != 0) {
- fprintf(stderr, "setting user failed for [%s]: %s\n",
- PrintablePath(output_path), strerror(errno));
- }
-}
-
-int64_t input_file_length = 0;
-
-static BROTLI_BOOL NextFile(Context* context) {
- const char* arg;
- size_t arg_len;
-
- /* Iterator points to last used arg; increment to search for the next one. */
- context->iterator++;
-
- context->input_file_length = -1;
-
- /* No input path; read from console. */
- if (context->input_count == 0) {
- if (context->iterator > 1) return BROTLI_FALSE;
- context->current_input_path = NULL;
- /* Either write to the specified path, or to console. */
- context->current_output_path = context->output_path;
- return BROTLI_TRUE;
- }
-
- /* Skip option arguments. */
- while (context->iterator == context->not_input_indices[context->ignore]) {
- context->iterator++;
- context->ignore++;
- }
-
- /* All args are scanned already. */
- if (context->iterator >= context->argc) return BROTLI_FALSE;
-
- /* Iterator now points to the input file name. */
- arg = context->argv[context->iterator];
- arg_len = strlen(arg);
- /* Read from console. */
- if (arg_len == 1 && arg[0] == '-') {
- context->current_input_path = NULL;
- context->current_output_path = context->output_path;
- return BROTLI_TRUE;
- }
-
- if (context->current_input_path == NULL) {
- context->current_input_path = arg;
- }
- context->input_file_length = FileSize(context->current_input_path);
- context->current_output_path = context->output_path;
- if (!context->decompress) {
- input_file_length += context->input_file_length;
- }
-
- if (context->output_path) return BROTLI_TRUE;
- if (context->write_to_stdout) return BROTLI_TRUE;
-
- strcpy(context->modified_path, arg);
- context->current_output_path = context->modified_path;
- /* If output is not specified, input path suffix should match. */
- if (context->decompress) {
- size_t suffix_len = strlen(context->suffix);
- char* name = (char*)FileName(context->modified_path);
- char* name_suffix;
- size_t name_len = strlen(name);
- if (name_len < suffix_len + 1) {
- fprintf(stderr, "empty output file name for [%s] input file\n",
- PrintablePath(arg));
- context->iterator_error = BROTLI_TRUE;
- return BROTLI_FALSE;
- }
- name_suffix = name + name_len - suffix_len;
- if (strcmp(context->suffix, name_suffix) != 0) {
- fprintf(stderr, "input file [%s] suffix mismatch\n",
- PrintablePath(arg));
- context->iterator_error = BROTLI_TRUE;
- return BROTLI_FALSE;
- }
- name_suffix[0] = 0;
- return BROTLI_TRUE;
- } else {
- strcpy(context->modified_path + arg_len, context->suffix);
- return BROTLI_TRUE;
- }
-}
-
-static BROTLI_BOOL OpenFiles(Context* context) {
- BROTLI_BOOL is_ok = OpenInputFile(context->current_input_path, &context->fin);
- if (context->decompress) {
- //
- // skip the decoder data header
- //
- fseek(context->fin, DECODE_HEADER_SIZE, SEEK_SET);
- }
- if (!context->test_integrity && is_ok && context->fout == NULL) {
- is_ok = OpenOutputFile(
- context->current_output_path, &context->fout, context->force_overwrite);
- }
- if (!context->decompress) {
- //
- // append the decoder data header
- //
- fseek(context->fout, DECODE_HEADER_SIZE, SEEK_SET);
- }
- return is_ok;
-}
-
-static BROTLI_BOOL CloseFiles(Context* context, BROTLI_BOOL success) {
- BROTLI_BOOL is_ok = BROTLI_TRUE;
- if (!context->test_integrity && context->fout) {
- if (!success && context->current_output_path) {
- unlink(context->current_output_path);
- }
- if (fclose(context->fout) != 0) {
- if (success) {
- fprintf(stderr, "fclose failed [%s]: %s\n",
- PrintablePath(context->current_output_path), strerror(errno));
- }
- is_ok = BROTLI_FALSE;
- }
-
- /* TOCTOU violation, but otherwise it is impossible to set file times. */
- if (success && is_ok && context->copy_stat) {
- CopyStat(context->current_input_path, context->current_output_path);
- }
- }
-
- if (context->fin) {
- if (fclose(context->fin) != 0) {
- if (is_ok) {
- fprintf(stderr, "fclose failed [%s]: %s\n",
- PrintablePath(context->current_input_path), strerror(errno));
- }
- is_ok = BROTLI_FALSE;
- }
- }
- if (success && context->junk_source && context->current_input_path) {
- unlink(context->current_input_path);
- }
-
- context->fin = NULL;
- context->fout = NULL;
-
- return is_ok;
-}
-
-static const size_t kFileBufferSize = 1 << 16;
-
-static void InitializeBuffers(Context* context) {
- context->available_in = 0;
- context->next_in = NULL;
- context->available_out = kFileBufferSize;
- context->next_out = context->output;
-}
-
-static BROTLI_BOOL HasMoreInput(Context* context) {
- return feof(context->fin) ? BROTLI_FALSE : BROTLI_TRUE;
-}
-
-static BROTLI_BOOL ProvideInput(Context* context) {
- context->available_in =
- fread(context->input, 1, kFileBufferSize, context->fin);
- context->next_in = context->input;
- if (ferror(context->fin)) {
- fprintf(stderr, "failed to read input [%s]: %s\n",
- PrintablePath(context->current_input_path), strerror(errno));
- return BROTLI_FALSE;
- }
- return BROTLI_TRUE;
-}
-
-/* Internal: should be used only in Provide-/Flush-Output. */
-static BROTLI_BOOL WriteOutput(Context* context) {
- size_t out_size = (size_t)(context->next_out - context->output);
- if (out_size == 0) return BROTLI_TRUE;
- if (context->test_integrity) return BROTLI_TRUE;
-
- fwrite(context->output, 1, out_size, context->fout);
- if (ferror(context->fout)) {
- fprintf(stderr, "failed to write output [%s]: %s\n",
- PrintablePath(context->current_output_path), strerror(errno));
- return BROTLI_FALSE;
- }
- return BROTLI_TRUE;
-}
-
-static BROTLI_BOOL ProvideOutput(Context* context) {
- if (!WriteOutput(context)) return BROTLI_FALSE;
- context->available_out = kFileBufferSize;
- context->next_out = context->output;
- return BROTLI_TRUE;
-}
-
-static BROTLI_BOOL FlushOutput(Context* context) {
- if (!WriteOutput(context)) return BROTLI_FALSE;
- context->available_out = 0;
- return BROTLI_TRUE;
-}
-
-static BROTLI_BOOL DecompressFile(Context* context, BrotliDecoderState* s) {
- BrotliDecoderResult result = BROTLI_DECODER_RESULT_NEEDS_MORE_INPUT;
- InitializeBuffers(context);
- for (;;) {
- if (result == BROTLI_DECODER_RESULT_NEEDS_MORE_INPUT) {
- if (!HasMoreInput(context)) {
- fprintf(stderr, "corrupt input [%s]\n",
- PrintablePath(context->current_input_path));
- return BROTLI_FALSE;
- }
- if (!ProvideInput(context)) return BROTLI_FALSE;
- } else if (result == BROTLI_DECODER_RESULT_NEEDS_MORE_OUTPUT) {
- if (!ProvideOutput(context)) return BROTLI_FALSE;
- } else if (result == BROTLI_DECODER_RESULT_SUCCESS) {
- if (!FlushOutput(context)) return BROTLI_FALSE;
- if (context->available_in != 0 || HasMoreInput(context)) {
- fprintf(stderr, "corrupt input [%s]\n",
- PrintablePath(context->current_input_path));
- return BROTLI_FALSE;
- }
- return BROTLI_TRUE;
- } else {
- fprintf(stderr, "corrupt input [%s]\n",
- PrintablePath(context->current_input_path));
- return BROTLI_FALSE;
- }
-
- result = BrotliDecoderDecompressStream(s, &context->available_in,
- &context->next_in, &context->available_out, &context->next_out, 0);
- }
-}
-
-/* Default brotli_alloc_func */
-void* BrotliAllocFunc(void* opaque, size_t size) {
- *(size_t *)opaque = *(size_t *) opaque + size;
- return malloc(size);
-}
-
-/* Default brotli_free_func */
-void BrotliFreeFunc(void* opaque, void* address) {
- free(address);
-}
-
-size_t scratch_buffer_size = 0;
-
-static BROTLI_BOOL DecompressFiles(Context* context) {
- while (NextFile(context)) {
- BROTLI_BOOL is_ok = BROTLI_TRUE;
- BrotliDecoderState* s = BrotliDecoderCreateInstance(BrotliAllocFunc, BrotliFreeFunc, &scratch_buffer_size);
- if (!s) {
- fprintf(stderr, "out of memory\n");
- return BROTLI_FALSE;
- }
- /* This allows decoding "large-window" streams. Though it creates
- fragmentation (new builds decode streams that old builds don't),
- it is better from used experience perspective. */
- BrotliDecoderSetParameter(s, BROTLI_DECODER_PARAM_LARGE_WINDOW, 1u);
- is_ok = OpenFiles(context);
- if (is_ok && !context->current_input_path &&
- !context->force_overwrite && isatty(STDIN_FILENO)) {
- fprintf(stderr, "Use -h help. Use -f to force input from a terminal.\n");
- is_ok = BROTLI_FALSE;
- }
- if (is_ok) is_ok = DecompressFile(context, s);
- BrotliDecoderDestroyInstance(s);
- if (!CloseFiles(context, is_ok)) is_ok = BROTLI_FALSE;
- if (!is_ok) return BROTLI_FALSE;
- }
- return BROTLI_TRUE;
-}
-
-static BROTLI_BOOL CompressFile(Context* context, BrotliEncoderState* s) {
- BROTLI_BOOL is_eof = BROTLI_FALSE;
- InitializeBuffers(context);
- for (;;) {
- if (context->available_in == 0 && !is_eof) {
- if (!ProvideInput(context)) return BROTLI_FALSE;
- is_eof = !HasMoreInput(context);
- }
-
- if (!BrotliEncoderCompressStream(s,
- is_eof ? BROTLI_OPERATION_FINISH : BROTLI_OPERATION_PROCESS,
- &context->available_in, &context->next_in,
- &context->available_out, &context->next_out, NULL)) {
- /* Should detect OOM? */
- fprintf(stderr, "failed to compress data [%s]\n",
- PrintablePath(context->current_input_path));
- return BROTLI_FALSE;
- }
-
- if (context->available_out == 0) {
- if (!ProvideOutput(context)) return BROTLI_FALSE;
- }
-
- if (BrotliEncoderIsFinished(s)) {
- return FlushOutput(context);
- }
- }
-}
-
-static BROTLI_BOOL CompressFiles(Context* context) {
- while (NextFile(context)) {
- BROTLI_BOOL is_ok = BROTLI_TRUE;
- BrotliEncoderState* s = BrotliEncoderCreateInstance(NULL, NULL, NULL);
- if (!s) {
- fprintf(stderr, "out of memory\n");
- return BROTLI_FALSE;
- }
- BrotliEncoderSetParameter(s,
- BROTLI_PARAM_QUALITY, (uint32_t)context->quality);
- if (context->lgwin > 0) {
- /* Specified by user. */
- /* Do not enable "large-window" extension, if not required. */
- if (context->lgwin > BROTLI_MAX_WINDOW_BITS) {
- BrotliEncoderSetParameter(s, BROTLI_PARAM_LARGE_WINDOW, 1u);
- }
- BrotliEncoderSetParameter(s,
- BROTLI_PARAM_LGWIN, (uint32_t)context->lgwin);
- } else {
- /* 0, or not specified by user; could be chosen by compressor. */
- uint32_t lgwin = DEFAULT_LGWIN;
- /* Use file size to limit lgwin. */
- if (context->input_file_length >= 0) {
- int32_t size = 1 << BROTLI_MIN_WINDOW_BITS;
- lgwin = BROTLI_MIN_WINDOW_BITS;
- while (size < context->input_file_length) {
- size <<= 1;
- lgwin++;
- if (lgwin == BROTLI_MAX_WINDOW_BITS) break;
- }
- }
- BrotliEncoderSetParameter(s, BROTLI_PARAM_LGWIN, lgwin);
- }
- if (context->input_file_length > 0) {
- uint32_t size_hint = context->input_file_length < (1 << 30) ?
- (uint32_t)context->input_file_length : (1u << 30);
- BrotliEncoderSetParameter(s, BROTLI_PARAM_SIZE_HINT, size_hint);
- }
- is_ok = OpenFiles(context);
- if (is_ok && !context->current_output_path &&
- !context->force_overwrite && isatty(STDOUT_FILENO)) {
- fprintf(stderr, "Use -h help. Use -f to force output to a terminal.\n");
- is_ok = BROTLI_FALSE;
- }
- if (is_ok) is_ok = CompressFile(context, s);
- BrotliEncoderDestroyInstance(s);
- if (!CloseFiles(context, is_ok)) is_ok = BROTLI_FALSE;
- if (!is_ok) return BROTLI_FALSE;
- }
- return BROTLI_TRUE;
-}
-
-int main(int argc, char** argv) {
- Command command;
- Context context;
- Context context_dec;
- BROTLI_BOOL is_ok = BROTLI_TRUE;
- int i;
-
- context.quality = 11;
- context.lgwin = -1;
- context.gmem = 1;
- context.force_overwrite = BROTLI_FALSE;
- context.junk_source = BROTLI_FALSE;
- context.copy_stat = BROTLI_TRUE;
- context.test_integrity = BROTLI_FALSE;
- context.verbose = BROTLI_FALSE;
- context.write_to_stdout = BROTLI_FALSE;
- context.decompress = BROTLI_FALSE;
- context.large_window = BROTLI_FALSE;
- context.output_path = NULL;
- context.suffix = DEFAULT_SUFFIX;
- for (i = 0; i < MAX_OPTIONS; ++i) context.not_input_indices[i] = 0;
- context.longest_path_len = 1;
- context.input_count = 0;
-
- context.argc = argc;
- context.argv = argv;
- context.modified_path = NULL;
- context.iterator = 0;
- context.ignore = 0;
- context.iterator_error = BROTLI_FALSE;
- context.buffer = NULL;
- context.current_input_path = NULL;
- context.current_output_path = NULL;
- context.fin = NULL;
- context.fout = NULL;
-
- command = ParseParams(&context);
-
- if (command == COMMAND_COMPRESS || command == COMMAND_DECOMPRESS ||
- command == COMMAND_TEST_INTEGRITY) {
- if (is_ok) {
- size_t modified_path_len =
- context.longest_path_len + strlen(context.suffix) + 1;
- context.modified_path = (char*)malloc(modified_path_len);
- context.buffer = (uint8_t*)malloc(kFileBufferSize * 2);
- if (!context.modified_path || !context.buffer) {
- fprintf(stderr, "out of memory\n");
- is_ok = BROTLI_FALSE;
- } else {
- context.input = context.buffer;
- context.output = context.buffer + kFileBufferSize;
- }
- }
- }
-
- if (!is_ok) command = COMMAND_NOOP;
-
- switch (command) {
- case COMMAND_NOOP:
- break;
-
- case COMMAND_VERSION:
- PrintVersion();
- break;
-
- case COMMAND_COMPRESS:
- memcpy (&context_dec, &context, sizeof (context));
- is_ok = CompressFiles(&context);
- if (!is_ok) {
- break;
- }
- context_dec.decompress = BROTLI_TRUE;
- context_dec.input_count = 1;
- context_dec.current_input_path = context_dec.output_path;
- context_dec.fout = tmpfile ();
- is_ok = DecompressFiles(&context_dec);
- if (!is_ok) {
- break;
- }
- //
- // fill decoder header
- //
- context_dec.fout = fopen(context_dec.output_path, "rb+"); /* open output_path file and add in head info */
- fwrite(&input_file_length, 1, sizeof(int64_t), context_dec.fout);
- scratch_buffer_size += context.gmem * GAP_MEM_BLOCK; /* there is a memory gap between IA32 and X64 environment*/
- scratch_buffer_size += kFileBufferSize * 2;
- fwrite(&scratch_buffer_size, 1, sizeof(int64_t), context_dec.fout);
- if (fclose(context_dec.fout) != 0) {
- fprintf(stderr, "failed to update ouptut file: %s\n", context_dec.output_path);
- is_ok = 0;
- }
- break;
-
- case COMMAND_DECOMPRESS:
- case COMMAND_TEST_INTEGRITY:
- is_ok = DecompressFiles(&context);
- break;
-
- case COMMAND_HELP:
- case COMMAND_INVALID:
- default:
- is_ok = (command == COMMAND_HELP);
- PrintHelp(FileName(argv[0]), is_ok);
- break;
- }
-
- if (context.iterator_error) is_ok = BROTLI_FALSE;
-
- free(context.modified_path);
- free(context.buffer);
-
- if (!is_ok) exit(1);
- return 0;
-}
diff --git a/.gitmodules b/.gitmodules
index 8032dceecacc..1714b6c0a65e 100644
--- a/.gitmodules
+++ b/.gitmodules
@@ -10,3 +10,6 @@
[submodule "MdeModulePkg/Library/BrotliCustomDecompressLib/brotli"]
path = MdeModulePkg/Library/BrotliCustomDecompressLib/brotli
url = https://github.com/google/brotli
+[submodule "BaseTools/Source/C/BrotliCompress/brotli"]
+ path = BaseTools/Source/C/BrotliCompress/brotli
+ url = https://github.com/google/brotli
diff --git a/BaseTools/Source/C/BrotliCompress/GNUmakefile b/BaseTools/Source/C/BrotliCompress/GNUmakefile
index fdf713e8b236..9544837263ca 100644
--- a/BaseTools/Source/C/BrotliCompress/GNUmakefile
+++ b/BaseTools/Source/C/BrotliCompress/GNUmakefile
@@ -1,7 +1,7 @@
## @file
# GNU/Linux makefile for 'Brotli' module build.
#
-# Copyright (c) 2017 - 2018, Intel Corporation. All rights reserved.<BR>
+# Copyright (c) 2017 - 2020, Intel Corporation. All rights reserved.<BR>
# SPDX-License-Identifier: BSD-2-Clause-Patent
#
MAKEROOT ?= ..
@@ -9,33 +9,33 @@ MAKEROOT ?= ..
APPNAME = Brotli
OBJECTS = \
- tools/brotli.o \
- common/dictionary.o \
- common/transform.o \
- dec/bit_reader.o \
- dec/decode.o \
- dec/huffman.o \
- dec/state.o \
- enc/backward_references.o \
- enc/backward_references_hq.o \
- enc/bit_cost.o \
- enc/block_splitter.o \
- enc/brotli_bit_stream.o \
- enc/cluster.o \
- enc/compress_fragment.o \
- enc/compress_fragment_two_pass.o \
- enc/dictionary_hash.o \
- enc/encode.o \
- enc/encoder_dict.o \
- enc/entropy_encode.o \
- enc/histogram.o \
- enc/literal_cost.o \
- enc/memory.o \
- enc/metablock.o \
- enc/static_dict.o \
- enc/utf8_util.o
+ brotli/c/tools/brotli.o \
+ brotli/c/common/dictionary.o \
+ brotli/c/common/transform.o \
+ brotli/c/dec/bit_reader.o \
+ brotli/c/dec/decode.o \
+ brotli/c/dec/huffman.o \
+ brotli/c/dec/state.o \
+ brotli/c/enc/backward_references.o \
+ brotli/c/enc/backward_references_hq.o \
+ brotli/c/enc/bit_cost.o \
+ brotli/c/enc/block_splitter.o \
+ brotli/c/enc/brotli_bit_stream.o \
+ brotli/c/enc/cluster.o \
+ brotli/c/enc/compress_fragment.o \
+ brotli/c/enc/compress_fragment_two_pass.o \
+ brotli/c/enc/dictionary_hash.o \
+ brotli/c/enc/encode.o \
+ brotli/c/enc/encoder_dict.o \
+ brotli/c/enc/entropy_encode.o \
+ brotli/c/enc/histogram.o \
+ brotli/c/enc/literal_cost.o \
+ brotli/c/enc/memory.o \
+ brotli/c/enc/metablock.o \
+ brotli/c/enc/static_dict.o \
+ brotli/c/enc/utf8_util.o
include $(MAKEROOT)/Makefiles/app.makefile
-TOOL_INCLUDE = -I ./include
+TOOL_INCLUDE = -I ./brotli/c/include
LIBS += -lm
diff --git a/BaseTools/Source/C/BrotliCompress/LICENSE b/BaseTools/Source/C/BrotliCompress/LICENSE
deleted file mode 100644
index 49550fc2d06e..000000000000
--- a/BaseTools/Source/C/BrotliCompress/LICENSE
+++ /dev/null
@@ -1,19 +0,0 @@
-Copyright (c) 2009, 2010, 2013-2016 by the Brotli Authors.
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-THE SOFTWARE.
diff --git a/BaseTools/Source/C/BrotliCompress/Makefile b/BaseTools/Source/C/BrotliCompress/Makefile
index 4c03b0e6df17..b805ff1e5870 100644
--- a/BaseTools/Source/C/BrotliCompress/Makefile
+++ b/BaseTools/Source/C/BrotliCompress/Makefile
@@ -1,46 +1,46 @@
## @file
# Windows makefile for 'Brotli' module build.
#
-# Copyright (c) 2017 - 2018, Intel Corporation. All rights reserved.<BR>
+# Copyright (c) 2017 - 2020, Intel Corporation. All rights reserved.<BR>
# SPDX-License-Identifier: BSD-2-Clause-Patent
#
!INCLUDE ..\Makefiles\ms.common
-INC = -I .\include $(INC)
+INC = -I .\brotli\c\include $(INC)
CFLAGS = $(CFLAGS) /W2
APPNAME = Brotli
#LIBS = $(LIB_PATH)\Common.lib
-COMMON_OBJ = common\dictionary.obj common\transform.obj
+COMMON_OBJ = brotli\c\common\dictionary.obj brotli\c\common\transform.obj
DEC_OBJ = \
- dec\bit_reader.obj \
- dec\decode.obj \
- dec\huffman.obj \
- dec\state.obj
+ brotli\c\dec\bit_reader.obj \
+ brotli\c\dec\decode.obj \
+ brotli\c\dec\huffman.obj \
+ brotli\c\dec\state.obj
ENC_OBJ = \
- enc\backward_references.obj \
- enc\backward_references_hq.obj \
- enc\bit_cost.obj \
- enc\block_splitter.obj \
- enc\brotli_bit_stream.obj \
- enc\cluster.obj \
- enc\compress_fragment.obj \
- enc\compress_fragment_two_pass.obj \
- enc\dictionary_hash.obj \
- enc\encode.obj \
- enc\encoder_dict.obj \
- enc\entropy_encode.obj \
- enc\histogram.obj \
- enc\literal_cost.obj \
- enc\memory.obj \
- enc\metablock.obj \
- enc\static_dict.obj \
- enc\utf8_util.obj
+ brotli\c\enc\backward_references.obj \
+ brotli\c\enc\backward_references_hq.obj \
+ brotli\c\enc\bit_cost.obj \
+ brotli\c\enc\block_splitter.obj \
+ brotli\c\enc\brotli_bit_stream.obj \
+ brotli\c\enc\cluster.obj \
+ brotli\c\enc\compress_fragment.obj \
+ brotli\c\enc\compress_fragment_two_pass.obj \
+ brotli\c\enc\dictionary_hash.obj \
+ brotli\c\enc\encode.obj \
+ brotli\c\enc\encoder_dict.obj \
+ brotli\c\enc\entropy_encode.obj \
+ brotli\c\enc\histogram.obj \
+ brotli\c\enc\literal_cost.obj \
+ brotli\c\enc\memory.obj \
+ brotli\c\enc\metablock.obj \
+ brotli\c\enc\static_dict.obj \
+ brotli\c\enc\utf8_util.obj
OBJECTS = \
- tools\brotli.obj \
+ brotli\c\tools\brotli.obj \
$(COMMON_OBJ) \
$(DEC_OBJ) \
$(ENC_OBJ)
diff --git a/BaseTools/Source/C/BrotliCompress/README.md b/BaseTools/Source/C/BrotliCompress/README.md
deleted file mode 100644
index 01848adc170a..000000000000
--- a/BaseTools/Source/C/BrotliCompress/README.md
+++ /dev/null
@@ -1,26 +0,0 @@
-### Introduction
-
-Brotli is a generic-purpose lossless compression algorithm that compresses data
-using a combination of a modern variant of the LZ77 algorithm, Huffman coding
-and 2nd order context modeling, with a compression ratio comparable to the best
-currently available general-purpose compression methods. It is similar in speed
-with deflate but offers more dense compression.
-
-The specification of the Brotli Compressed Data Format is defined in [RFC 7932](https://www.ietf.org/rfc/rfc7932.txt).
-
-Brotli is open-sourced under the MIT License, see the LICENSE file.
-
-Brotli mailing list:
-https://groups.google.com/forum/#!forum/brotli
-
-[![Build Status](https://travis-ci.org/google/brotli.svg?branch=master)](https://travis-ci.org/google/brotli)
-
-### Benchmarks
-* [Squash Compression Benchmark](https://quixdb.github.io/squash-benchmark/) / [Unstable Squash Compression Benchmark](https://quixdb.github.io/squash-benchmark/unstable/)
-* [Large Text Compression Benchmark](http://mattmahoney.net/dc/text.html)
-* [Lzturbo Benchmark](https://sites.google.com/site/powturbo/home/benchmark)
-
-### Related projects
-Independent [decoder](https://github.com/madler/brotli) implementation by Mark Adler, based entirely on format specification.
-
-JavaScript port of brotli [decoder](https://github.com/devongovett/brotli.js). Could be used directly via `npm install brotli`
diff --git a/BaseTools/Source/C/BrotliCompress/ReadMe.txt b/BaseTools/Source/C/BrotliCompress/ReadMe.txt
deleted file mode 100644
index 399ec38d4081..000000000000
--- a/BaseTools/Source/C/BrotliCompress/ReadMe.txt
+++ /dev/null
@@ -1,2 +0,0 @@
-It is based on the Brotli v1.0.6.
-Brotli was released on the website https://github.com/google/brotli.
diff --git a/BaseTools/Source/C/BrotliCompress/brotli b/BaseTools/Source/C/BrotliCompress/brotli
new file mode 160000
index 000000000000..666c3280cc11
--- /dev/null
+++ b/BaseTools/Source/C/BrotliCompress/brotli
@@ -0,0 +1 @@
+Subproject commit 666c3280cc11dc433c303d79a83d4ffbdd12cc8d
diff --git a/BaseTools/Source/C/BrotliCompress/common/constants.h b/BaseTools/Source/C/BrotliCompress/common/constants.h
deleted file mode 100644
index 1a29f035e899..000000000000
--- a/BaseTools/Source/C/BrotliCompress/common/constants.h
+++ /dev/null
@@ -1,64 +0,0 @@
-/* Copyright 2016 Google Inc. All Rights Reserved.
-
- Distributed under MIT license.
- See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
-*/
-
-#ifndef BROTLI_COMMON_CONSTANTS_H_
-#define BROTLI_COMMON_CONSTANTS_H_
-
-/* Specification: 7.3. Encoding of the context map */
-#define BROTLI_CONTEXT_MAP_MAX_RLE 16
-
-/* Specification: 2. Compressed representation overview */
-#define BROTLI_MAX_NUMBER_OF_BLOCK_TYPES 256
-
-/* Specification: 3.3. Alphabet sizes: insert-and-copy length */
-#define BROTLI_NUM_LITERAL_SYMBOLS 256
-#define BROTLI_NUM_COMMAND_SYMBOLS 704
-#define BROTLI_NUM_BLOCK_LEN_SYMBOLS 26
-#define BROTLI_MAX_CONTEXT_MAP_SYMBOLS (BROTLI_MAX_NUMBER_OF_BLOCK_TYPES + \
- BROTLI_CONTEXT_MAP_MAX_RLE)
-#define BROTLI_MAX_BLOCK_TYPE_SYMBOLS (BROTLI_MAX_NUMBER_OF_BLOCK_TYPES + 2)
-
-/* Specification: 3.5. Complex prefix codes */
-#define BROTLI_REPEAT_PREVIOUS_CODE_LENGTH 16
-#define BROTLI_REPEAT_ZERO_CODE_LENGTH 17
-#define BROTLI_CODE_LENGTH_CODES (BROTLI_REPEAT_ZERO_CODE_LENGTH + 1)
-/* "code length of 8 is repeated" */
-#define BROTLI_INITIAL_REPEATED_CODE_LENGTH 8
-
-/* "Large Window Brotli" */
-#define BROTLI_LARGE_MAX_DISTANCE_BITS 62U
-#define BROTLI_LARGE_MIN_WBITS 10
-#define BROTLI_LARGE_MAX_WBITS 30
-
-/* Specification: 4. Encoding of distances */
-#define BROTLI_NUM_DISTANCE_SHORT_CODES 16
-#define BROTLI_MAX_NPOSTFIX 3
-#define BROTLI_MAX_NDIRECT 120
-#define BROTLI_MAX_DISTANCE_BITS 24U
-#define BROTLI_DISTANCE_ALPHABET_SIZE(NPOSTFIX, NDIRECT, MAXNBITS) ( \
- BROTLI_NUM_DISTANCE_SHORT_CODES + (NDIRECT) + \
- ((MAXNBITS) << ((NPOSTFIX) + 1)))
-/* BROTLI_NUM_DISTANCE_SYMBOLS == 1128 */
-#define BROTLI_NUM_DISTANCE_SYMBOLS \
- BROTLI_DISTANCE_ALPHABET_SIZE( \
- BROTLI_MAX_NDIRECT, BROTLI_MAX_NPOSTFIX, BROTLI_LARGE_MAX_DISTANCE_BITS)
-#define BROTLI_MAX_DISTANCE 0x3FFFFFC
-#define BROTLI_MAX_ALLOWED_DISTANCE 0x7FFFFFFC
-
-/* 7.1. Context modes and context ID lookup for literals */
-/* "context IDs for literals are in the range of 0..63" */
-#define BROTLI_LITERAL_CONTEXT_BITS 6
-
-/* 7.2. Context ID for distances */
-#define BROTLI_DISTANCE_CONTEXT_BITS 2
-
-/* 9.1. Format of the Stream Header */
-/* Number of slack bytes for window size. Don't confuse
- with BROTLI_NUM_DISTANCE_SHORT_CODES. */
-#define BROTLI_WINDOW_GAP 16
-#define BROTLI_MAX_BACKWARD_LIMIT(W) (((size_t)1 << (W)) - BROTLI_WINDOW_GAP)
-
-#endif /* BROTLI_COMMON_CONSTANTS_H_ */
diff --git a/BaseTools/Source/C/BrotliCompress/common/context.h b/BaseTools/Source/C/BrotliCompress/common/context.h
deleted file mode 100644
index 7ffc640eafa4..000000000000
--- a/BaseTools/Source/C/BrotliCompress/common/context.h
+++ /dev/null
@@ -1,261 +0,0 @@
-/* Copyright 2013 Google Inc. All Rights Reserved.
-
- Distributed under MIT license.
- See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
-*/
-
-/* Lookup table to map the previous two bytes to a context id.
-
- There are four different context modeling modes defined here:
- CONTEXT_LSB6: context id is the least significant 6 bits of the last byte,
- CONTEXT_MSB6: context id is the most significant 6 bits of the last byte,
- CONTEXT_UTF8: second-order context model tuned for UTF8-encoded text,
- CONTEXT_SIGNED: second-order context model tuned for signed integers.
-
- If |p1| and |p2| are the previous two bytes, and |mode| is current context
- mode, we calculate the context as:
-
- context = ContextLut(mode)[p1] | ContextLut(mode)[p2 + 256].
-
- For CONTEXT_UTF8 mode, if the previous two bytes are ASCII characters
- (i.e. < 128), this will be equivalent to
-
- context = 4 * context1(p1) + context2(p2),
-
- where context1 is based on the previous byte in the following way:
-
- 0 : non-ASCII control
- 1 : \t, \n, \r
- 2 : space
- 3 : other punctuation
- 4 : " '
- 5 : %
- 6 : ( < [ {
- 7 : ) > ] }
- 8 : , ; :
- 9 : .
- 10 : =
- 11 : number
- 12 : upper-case vowel
- 13 : upper-case consonant
- 14 : lower-case vowel
- 15 : lower-case consonant
-
- and context2 is based on the second last byte:
-
- 0 : control, space
- 1 : punctuation
- 2 : upper-case letter, number
- 3 : lower-case letter
-
- If the last byte is ASCII, and the second last byte is not (in a valid UTF8
- stream it will be a continuation byte, value between 128 and 191), the
- context is the same as if the second last byte was an ASCII control or space.
-
- If the last byte is a UTF8 lead byte (value >= 192), then the next byte will
- be a continuation byte and the context id is 2 or 3 depending on the LSB of
- the last byte and to a lesser extent on the second last byte if it is ASCII.
-
- If the last byte is a UTF8 continuation byte, the second last byte can be:
- - continuation byte: the next byte is probably ASCII or lead byte (assuming
- 4-byte UTF8 characters are rare) and the context id is 0 or 1.
- - lead byte (192 - 207): next byte is ASCII or lead byte, context is 0 or 1
- - lead byte (208 - 255): next byte is continuation byte, context is 2 or 3
-
- The possible value combinations of the previous two bytes, the range of
- context ids and the type of the next byte is summarized in the table below:
-
- |--------\-----------------------------------------------------------------|
- | \ Last byte |
- | Second \---------------------------------------------------------------|
- | last byte \ ASCII | cont. byte | lead byte |
- | \ (0-127) | (128-191) | (192-) |
- |=============|===================|=====================|==================|
- | ASCII | next: ASCII/lead | not valid | next: cont. |
- | (0-127) | context: 4 - 63 | | context: 2 - 3 |
- |-------------|-------------------|---------------------|------------------|
- | cont. byte | next: ASCII/lead | next: ASCII/lead | next: cont. |
- | (128-191) | context: 4 - 63 | context: 0 - 1 | context: 2 - 3 |
- |-------------|-------------------|---------------------|------------------|
- | lead byte | not valid | next: ASCII/lead | not valid |
- | (192-207) | | context: 0 - 1 | |
- |-------------|-------------------|---------------------|------------------|
- | lead byte | not valid | next: cont. | not valid |
- | (208-) | | context: 2 - 3 | |
- |-------------|-------------------|---------------------|------------------|
-*/
-
-#ifndef BROTLI_COMMON_CONTEXT_H_
-#define BROTLI_COMMON_CONTEXT_H_
-
-#include <brotli/types.h>
-
-typedef enum ContextType {
- CONTEXT_LSB6 = 0,
- CONTEXT_MSB6 = 1,
- CONTEXT_UTF8 = 2,
- CONTEXT_SIGNED = 3
-} ContextType;
-
-/* Common context lookup table for all context modes. */
-static const uint8_t kContextLookup[2048] = {
- /* CONTEXT_LSB6, last byte. */
- 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
- 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,
- 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,
- 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63,
- 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
- 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,
- 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,
- 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63,
- 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
- 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,
- 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,
- 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63,
- 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
- 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,
- 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,
- 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63,
-
- /* CONTEXT_LSB6, second last byte, */
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* CONTEXT_MSB6, last byte. */
- 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3,
- 4, 4, 4, 4, 5, 5, 5, 5, 6, 6, 6, 6, 7, 7, 7, 7,
- 8, 8, 8, 8, 9, 9, 9, 9, 10, 10, 10, 10, 11, 11, 11, 11,
- 12, 12, 12, 12, 13, 13, 13, 13, 14, 14, 14, 14, 15, 15, 15, 15,
- 16, 16, 16, 16, 17, 17, 17, 17, 18, 18, 18, 18, 19, 19, 19, 19,
- 20, 20, 20, 20, 21, 21, 21, 21, 22, 22, 22, 22, 23, 23, 23, 23,
- 24, 24, 24, 24, 25, 25, 25, 25, 26, 26, 26, 26, 27, 27, 27, 27,
- 28, 28, 28, 28, 29, 29, 29, 29, 30, 30, 30, 30, 31, 31, 31, 31,
- 32, 32, 32, 32, 33, 33, 33, 33, 34, 34, 34, 34, 35, 35, 35, 35,
- 36, 36, 36, 36, 37, 37, 37, 37, 38, 38, 38, 38, 39, 39, 39, 39,
- 40, 40, 40, 40, 41, 41, 41, 41, 42, 42, 42, 42, 43, 43, 43, 43,
- 44, 44, 44, 44, 45, 45, 45, 45, 46, 46, 46, 46, 47, 47, 47, 47,
- 48, 48, 48, 48, 49, 49, 49, 49, 50, 50, 50, 50, 51, 51, 51, 51,
- 52, 52, 52, 52, 53, 53, 53, 53, 54, 54, 54, 54, 55, 55, 55, 55,
- 56, 56, 56, 56, 57, 57, 57, 57, 58, 58, 58, 58, 59, 59, 59, 59,
- 60, 60, 60, 60, 61, 61, 61, 61, 62, 62, 62, 62, 63, 63, 63, 63,
-
- /* CONTEXT_MSB6, second last byte, */
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* CONTEXT_UTF8, last byte. */
- /* ASCII range. */
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 0, 0, 4, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 8, 12, 16, 12, 12, 20, 12, 16, 24, 28, 12, 12, 32, 12, 36, 12,
- 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 32, 32, 24, 40, 28, 12,
- 12, 48, 52, 52, 52, 48, 52, 52, 52, 48, 52, 52, 52, 52, 52, 48,
- 52, 52, 52, 52, 52, 48, 52, 52, 52, 52, 52, 24, 12, 28, 12, 12,
- 12, 56, 60, 60, 60, 56, 60, 60, 60, 56, 60, 60, 60, 60, 60, 56,
- 60, 60, 60, 60, 60, 56, 60, 60, 60, 60, 60, 24, 12, 28, 12, 0,
- /* UTF8 continuation byte range. */
- 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1,
- 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1,
- 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1,
- 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1,
- /* UTF8 lead byte range. */
- 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3,
- 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3,
- 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3,
- 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3,
-
- /* CONTEXT_UTF8 second last byte. */
- /* ASCII range. */
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1,
- 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1,
- 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
- 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 1, 1, 1, 0,
- /* UTF8 continuation byte range. */
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- /* UTF8 lead byte range. */
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
-
- /* CONTEXT_SIGNED, last byte, same as the above values shifted by 3 bits. */
- 0, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
- 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
- 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
- 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
- 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
- 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
- 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
- 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
- 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
- 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
- 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
- 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
- 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40,
- 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40,
- 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40,
- 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 56,
-
- /* CONTEXT_SIGNED, second last byte. */
- 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
- 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
- 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
- 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
- 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
- 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
- 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 7,
-};
-
-typedef const uint8_t* ContextLut;
-
-/* typeof(MODE) == ContextType; returns ContextLut */
-#define BROTLI_CONTEXT_LUT(MODE) (&kContextLookup[(MODE) << 9])
-
-/* typeof(LUT) == ContextLut */
-#define BROTLI_CONTEXT(P1, P2, LUT) ((LUT)[P1] | ((LUT) + 256)[P2])
-
-#endif /* BROTLI_COMMON_CONTEXT_H_ */
diff --git a/BaseTools/Source/C/BrotliCompress/common/dictionary.h b/BaseTools/Source/C/BrotliCompress/common/dictionary.h
deleted file mode 100644
index a68a1c54493e..000000000000
--- a/BaseTools/Source/C/BrotliCompress/common/dictionary.h
+++ /dev/null
@@ -1,64 +0,0 @@
-/* Copyright 2013 Google Inc. All Rights Reserved.
-
- Distributed under MIT license.
- See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
-*/
-
-/* Collection of static dictionary words. */
-
-#ifndef BROTLI_COMMON_DICTIONARY_H_
-#define BROTLI_COMMON_DICTIONARY_H_
-
-#include <brotli/port.h>
-#include <brotli/types.h>
-
-#if defined(__cplusplus) || defined(c_plusplus)
-extern "C" {
-#endif
-
-typedef struct BrotliDictionary {
- /**
- * Number of bits to encode index of dictionary word in a bucket.
- *
- * Specification: Appendix A. Static Dictionary Data
- *
- * Words in a dictionary are bucketed by length.
- * @c 0 means that there are no words of a given length.
- * Dictionary consists of words with length of [4..24] bytes.
- * Values at [0..3] and [25..31] indices should not be addressed.
- */
- uint8_t size_bits_by_length[32];
-
- /* assert(offset[i + 1] == offset[i] + (bits[i] ? (i << bits[i]) : 0)) */
- uint32_t offsets_by_length[32];
-
- /* assert(data_size == offsets_by_length[31]) */
- size_t data_size;
-
- /* Data array is not bound, and should obey to size_bits_by_length values.
- Specified size matches default (RFC 7932) dictionary. Its size is
- defined by data_size */
- const uint8_t* data;
-} BrotliDictionary;
-
-BROTLI_COMMON_API const BrotliDictionary* BrotliGetDictionary(void);
-
-/**
- * Sets dictionary data.
- *
- * When dictionary data is already set / present, this method is no-op.
- *
- * Dictionary data MUST be provided before BrotliGetDictionary is invoked.
- * This method is used ONLY in multi-client environment (e.g. C + Java),
- * to reduce storage by sharing single dictionary between implementations.
- */
-BROTLI_COMMON_API void BrotliSetDictionaryData(const uint8_t* data);
-
-#define BROTLI_MIN_DICTIONARY_WORD_LENGTH 4
-#define BROTLI_MAX_DICTIONARY_WORD_LENGTH 24
-
-#if defined(__cplusplus) || defined(c_plusplus)
-} /* extern "C" */
-#endif
-
-#endif /* BROTLI_COMMON_DICTIONARY_H_ */
diff --git a/BaseTools/Source/C/BrotliCompress/common/platform.h b/BaseTools/Source/C/BrotliCompress/common/platform.h
deleted file mode 100644
index b83ed6ca258a..000000000000
--- a/BaseTools/Source/C/BrotliCompress/common/platform.h
+++ /dev/null
@@ -1,558 +0,0 @@
-/* Copyright 2016 Google Inc. All Rights Reserved.
-
- Distributed under MIT license.
- See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
-*/
-
-/* Macros for compiler / platform specific features and build options.
-
- Build options are:
- * BROTLI_BUILD_32_BIT disables 64-bit optimizations
- * BROTLI_BUILD_64_BIT forces to use 64-bit optimizations
- * BROTLI_BUILD_BIG_ENDIAN forces to use big-endian optimizations
- * BROTLI_BUILD_ENDIAN_NEUTRAL disables endian-aware optimizations
- * BROTLI_BUILD_LITTLE_ENDIAN forces to use little-endian optimizations
- * BROTLI_BUILD_PORTABLE disables dangerous optimizations, like unaligned
- read and overlapping memcpy; this reduces decompression speed by 5%
- * BROTLI_BUILD_NO_RBIT disables "rbit" optimization for ARM CPUs
- * BROTLI_DEBUG dumps file name and line number when decoder detects stream
- or memory error
- * BROTLI_ENABLE_LOG enables asserts and dumps various state information
-*/
-
-#ifndef BROTLI_COMMON_PLATFORM_H_
-#define BROTLI_COMMON_PLATFORM_H_
-
-#include <string.h> /* memcpy */
-#include <stdlib.h> /* malloc, free */
-
-#include <brotli/port.h>
-#include <brotli/types.h>
-
-#if defined(OS_LINUX) || defined(OS_CYGWIN)
-#include <endian.h>
-#elif defined(OS_FREEBSD)
-#include <machine/endian.h>
-#elif defined(OS_MACOSX)
-#include <machine/endian.h>
-/* Let's try and follow the Linux convention */
-#define BROTLI_X_BYTE_ORDER BYTE_ORDER
-#define BROTLI_X_LITTLE_ENDIAN LITTLE_ENDIAN
-#define BROTLI_X_BIG_ENDIAN BIG_ENDIAN
-#endif
-
-#if defined(BROTLI_ENABLE_LOG) || defined(BROTLI_DEBUG)
-#include <assert.h>
-#include <stdio.h>
-#endif
-
-/* The following macros were borrowed from https://github.com/nemequ/hedley
- * with permission of original author - Evan Nemerson <evan@nemerson.com> */
-
-/* >>> >>> >>> hedley macros */
-
-/* Define "BROTLI_PREDICT_TRUE" and "BROTLI_PREDICT_FALSE" macros for capable
- compilers.
-
-To apply compiler hint, enclose the branching condition into macros, like this:
-
- if (BROTLI_PREDICT_TRUE(zero == 0)) {
- // main execution path
- } else {
- // compiler should place this code outside of main execution path
- }
-
-OR:
-
- if (BROTLI_PREDICT_FALSE(something_rare_or_unexpected_happens)) {
- // compiler should place this code outside of main execution path
- }
-
-*/
-#if BROTLI_GNUC_HAS_BUILTIN(__builtin_expect, 3, 0, 0) || \
- BROTLI_INTEL_VERSION_CHECK(16, 0, 0) || \
- BROTLI_SUNPRO_VERSION_CHECK(5, 12, 0) || \
- BROTLI_ARM_VERSION_CHECK(4, 1, 0) || \
- BROTLI_IBM_VERSION_CHECK(10, 1, 0) || \
- BROTLI_TI_VERSION_CHECK(7, 3, 0) || \
- BROTLI_TINYC_VERSION_CHECK(0, 9, 27)
-#define BROTLI_PREDICT_TRUE(x) (__builtin_expect(!!(x), 1))
-#define BROTLI_PREDICT_FALSE(x) (__builtin_expect(x, 0))
-#else
-#define BROTLI_PREDICT_FALSE(x) (x)
-#define BROTLI_PREDICT_TRUE(x) (x)
-#endif
-
-#if defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) && \
- !defined(__cplusplus)
-#define BROTLI_RESTRICT restrict
-#elif BROTLI_GNUC_VERSION_CHECK(3, 1, 0) || \
- BROTLI_MSVC_VERSION_CHECK(14, 0, 0) || \
- BROTLI_INTEL_VERSION_CHECK(16, 0, 0) || \
- BROTLI_ARM_VERSION_CHECK(4, 1, 0) || \
- BROTLI_IBM_VERSION_CHECK(10, 1, 0) || \
- BROTLI_PGI_VERSION_CHECK(17, 10, 0) || \
- BROTLI_TI_VERSION_CHECK(8, 0, 0) || \
- BROTLI_IAR_VERSION_CHECK(8, 0, 0) || \
- (BROTLI_SUNPRO_VERSION_CHECK(5, 14, 0) && defined(__cplusplus))
-#define BROTLI_RESTRICT __restrict
-#elif BROTLI_SUNPRO_VERSION_CHECK(5, 3, 0) && !defined(__cplusplus)
-#define BROTLI_RESTRICT _Restrict
-#else
-#define BROTLI_RESTRICT
-#endif
-
-#if (defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L)) || \
- (defined(__cplusplus) && (__cplusplus >= 199711L))
-#define BROTLI_MAYBE_INLINE inline
-#elif defined(__GNUC_STDC_INLINE__) || defined(__GNUC_GNU_INLINE__) || \
- BROTLI_ARM_VERSION_CHECK(6, 2, 0)
-#define BROTLI_MAYBE_INLINE __inline__
-#elif BROTLI_MSVC_VERSION_CHECK(12, 0, 0) || \
- BROTLI_ARM_VERSION_CHECK(4, 1, 0) || BROTLI_TI_VERSION_CHECK(8, 0, 0)
-#define BROTLI_MAYBE_INLINE __inline
-#else
-#define BROTLI_MAYBE_INLINE
-#endif
-
-#if BROTLI_GNUC_HAS_ATTRIBUTE(always_inline, 4, 0, 0) || \
- BROTLI_INTEL_VERSION_CHECK(16, 0, 0) || \
- BROTLI_SUNPRO_VERSION_CHECK(5, 11, 0) || \
- BROTLI_ARM_VERSION_CHECK(4, 1, 0) || \
- BROTLI_IBM_VERSION_CHECK(10, 1, 0) || \
- BROTLI_TI_VERSION_CHECK(8, 0, 0) || \
- (BROTLI_TI_VERSION_CHECK(7, 3, 0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__))
-#define BROTLI_INLINE BROTLI_MAYBE_INLINE __attribute__((__always_inline__))
-#elif BROTLI_MSVC_VERSION_CHECK(12, 0, 0)
-#define BROTLI_INLINE BROTLI_MAYBE_INLINE __forceinline
-#elif BROTLI_TI_VERSION_CHECK(7, 0, 0) && defined(__cplusplus)
-#define BROTLI_INLINE BROTLI_MAYBE_INLINE _Pragma("FUNC_ALWAYS_INLINE;")
-#elif BROTLI_IAR_VERSION_CHECK(8, 0, 0)
-#define BROTLI_INLINE BROTLI_MAYBE_INLINE _Pragma("inline=forced")
-#else
-#define BROTLI_INLINE BROTLI_MAYBE_INLINE
-#endif
-
-#if BROTLI_GNUC_HAS_ATTRIBUTE(noinline, 4, 0, 0) || \
- BROTLI_INTEL_VERSION_CHECK(16, 0, 0) || \
- BROTLI_SUNPRO_VERSION_CHECK(5, 11, 0) || \
- BROTLI_ARM_VERSION_CHECK(4, 1, 0) || \
- BROTLI_IBM_VERSION_CHECK(10, 1, 0) || \
- BROTLI_TI_VERSION_CHECK(8, 0, 0) || \
- (BROTLI_TI_VERSION_CHECK(7, 3, 0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__))
-#define BROTLI_NOINLINE __attribute__((__noinline__))
-#elif BROTLI_MSVC_VERSION_CHECK(13, 10, 0)
-#define BROTLI_NOINLINE __declspec(noinline)
-#elif BROTLI_PGI_VERSION_CHECK(10, 2, 0)
-#define BROTLI_NOINLINE _Pragma("noinline")
-#elif BROTLI_TI_VERSION_CHECK(6, 0, 0) && defined(__cplusplus)
-#define BROTLI_NOINLINE _Pragma("FUNC_CANNOT_INLINE;")
-#elif BROTLI_IAR_VERSION_CHECK(8, 0, 0)
-#define BROTLI_NOINLINE _Pragma("inline=never")
-#else
-#define BROTLI_NOINLINE
-#endif
-
-/* BROTLI_INTERNAL could be defined to override visibility, e.g. for tests. */
-#if !defined(BROTLI_INTERNAL)
-#if defined(_WIN32) || defined(__CYGWIN__)
-#define BROTLI_INTERNAL
-#elif BROTLI_GNUC_VERSION_CHECK(3, 3, 0) || \
- BROTLI_TI_VERSION_CHECK(8, 0, 0) || \
- BROTLI_INTEL_VERSION_CHECK(16, 0, 0) || \
- BROTLI_ARM_VERSION_CHECK(4, 1, 0) || \
- BROTLI_IBM_VERSION_CHECK(13, 1, 0) || \
- BROTLI_SUNPRO_VERSION_CHECK(5, 11, 0) || \
- (BROTLI_TI_VERSION_CHECK(7, 3, 0) && \
- defined(__TI_GNU_ATTRIBUTE_SUPPORT__) && defined(__TI_EABI__))
-#define BROTLI_INTERNAL __attribute__ ((visibility ("hidden")))
-#else
-#define BROTLI_INTERNAL
-#endif
-#endif
-
-/* <<< <<< <<< end of hedley macros. */
-
-#if BROTLI_GNUC_HAS_ATTRIBUTE(unused, 2, 7, 0) || \
- BROTLI_INTEL_VERSION_CHECK(16, 0, 0)
-#define BROTLI_UNUSED_FUNCTION static BROTLI_INLINE __attribute__ ((unused))
-#else
-#define BROTLI_UNUSED_FUNCTION static BROTLI_INLINE
-#endif
-
-#if (defined(__ARM_ARCH) && (__ARM_ARCH == 7)) || \
- (defined(M_ARM) && (M_ARM == 7))
-#define BROTLI_TARGET_ARMV7
-#endif /* ARMv7 */
-
-#if (defined(__ARM_ARCH) && (__ARM_ARCH == 8)) || \
- defined(__aarch64__) || defined(__ARM64_ARCH_8__)
-#define BROTLI_TARGET_ARMV8_ANY
-
-#if defined(__ARM_32BIT_STATE)
-#define BROTLI_TARGET_ARMV8_32
-#elif defined(__ARM_64BIT_STATE)
-#define BROTLI_TARGET_ARMV8_64
-#endif
-
-#endif /* ARMv8 */
-
-#if defined(__i386) || defined(_M_IX86)
-#define BROTLI_TARGET_X86
-#endif
-
-#if defined(__x86_64__) || defined(_M_X64)
-#define BROTLI_TARGET_X64
-#endif
-
-#if defined(__PPC64__)
-#define BROTLI_TARGET_POWERPC64
-#endif
-
-#if defined(__riscv) && defined(__riscv_xlen) && __riscv_xlen == 64
-#define BROTLI_TARGET_RISCV64
-#endif
-
-#if defined(BROTLI_BUILD_64_BIT)
-#define BROTLI_64_BITS 1
-#elif defined(BROTLI_BUILD_32_BIT)
-#define BROTLI_64_BITS 0
-#elif defined(BROTLI_TARGET_X64) || defined(BROTLI_TARGET_ARMV8_64) || \
- defined(BROTLI_TARGET_POWERPC64) || defined(BROTLI_TARGET_RISCV64)
-#define BROTLI_64_BITS 1
-#else
-#define BROTLI_64_BITS 0
-#endif
-
-#if (BROTLI_64_BITS)
-#define brotli_reg_t uint64_t
-#else
-#define brotli_reg_t uint32_t
-#endif
-
-#if defined(BROTLI_BUILD_BIG_ENDIAN)
-#define BROTLI_BIG_ENDIAN 1
-#elif defined(BROTLI_BUILD_LITTLE_ENDIAN)
-#define BROTLI_LITTLE_ENDIAN 1
-#elif defined(BROTLI_BUILD_ENDIAN_NEUTRAL)
-/* Just break elif chain. */
-#elif defined(__BYTE_ORDER__) && (__BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__)
-#define BROTLI_LITTLE_ENDIAN 1
-#elif defined(_WIN32) || defined(BROTLI_TARGET_X64)
-/* Win32 & x64 can currently always be assumed to be little endian */
-#define BROTLI_LITTLE_ENDIAN 1
-#elif defined(__BYTE_ORDER__) && (__BYTE_ORDER__ == __ORDER_BIG_ENDIAN__)
-#define BROTLI_BIG_ENDIAN 1
-#elif defined(BROTLI_X_BYTE_ORDER)
-#if BROTLI_X_BYTE_ORDER == BROTLI_X_LITTLE_ENDIAN
-#define BROTLI_LITTLE_ENDIAN 1
-#elif BROTLI_X_BYTE_ORDER == BROTLI_X_BIG_ENDIAN
-#define BROTLI_BIG_ENDIAN 1
-#endif
-#endif /* BROTLI_X_BYTE_ORDER */
-
-#if !defined(BROTLI_LITTLE_ENDIAN)
-#define BROTLI_LITTLE_ENDIAN 0
-#endif
-
-#if !defined(BROTLI_BIG_ENDIAN)
-#define BROTLI_BIG_ENDIAN 0
-#endif
-
-#if defined(BROTLI_X_BYTE_ORDER)
-#undef BROTLI_X_BYTE_ORDER
-#undef BROTLI_X_LITTLE_ENDIAN
-#undef BROTLI_X_BIG_ENDIAN
-#endif
-
-#if defined(BROTLI_BUILD_PORTABLE)
-#define BROTLI_ALIGNED_READ (!!1)
-#elif defined(BROTLI_TARGET_X86) || defined(BROTLI_TARGET_X64) || \
- defined(BROTLI_TARGET_ARMV7) || defined(BROTLI_TARGET_ARMV8_ANY) || \
- defined(BROTLI_TARGET_RISCV64)
-/* Allow unaligned read only for white-listed CPUs. */
-#define BROTLI_ALIGNED_READ (!!0)
-#else
-#define BROTLI_ALIGNED_READ (!!1)
-#endif
-
-#if BROTLI_ALIGNED_READ
-/* Portable unaligned memory access: read / write values via memcpy. */
-static BROTLI_INLINE uint16_t BrotliUnalignedRead16(const void* p) {
- uint16_t t;
- memcpy(&t, p, sizeof t);
- return t;
-}
-static BROTLI_INLINE uint32_t BrotliUnalignedRead32(const void* p) {
- uint32_t t;
- memcpy(&t, p, sizeof t);
- return t;
-}
-static BROTLI_INLINE uint64_t BrotliUnalignedRead64(const void* p) {
- uint64_t t;
- memcpy(&t, p, sizeof t);
- return t;
-}
-static BROTLI_INLINE void BrotliUnalignedWrite64(void* p, uint64_t v) {
- memcpy(p, &v, sizeof v);
-}
-#else /* BROTLI_ALIGNED_READ */
-/* Unaligned memory access is allowed: just cast pointer to requested type. */
-#if defined(ADDRESS_SANITIZER) || defined(THREAD_SANITIZER) || \
- defined(MEMORY_SANITIZER)
-/* Consider we have an unaligned load/store of 4 bytes from address 0x...05.
- AddressSanitizer will treat it as a 3-byte access to the range 05:07 and
- will miss a bug if 08 is the first unaddressable byte.
- ThreadSanitizer will also treat this as a 3-byte access to 05:07 and will
- miss a race between this access and some other accesses to 08.
- MemorySanitizer will correctly propagate the shadow on unaligned stores
- and correctly report bugs on unaligned loads, but it may not properly
- update and report the origin of the uninitialized memory.
- For all three tools, replacing an unaligned access with a tool-specific
- callback solves the problem. */
-#if defined(__cplusplus)
-extern "C" {
-#endif /* __cplusplus */
- uint16_t __sanitizer_unaligned_load16(const void* p);
- uint32_t __sanitizer_unaligned_load32(const void* p);
- uint64_t __sanitizer_unaligned_load64(const void* p);
- void __sanitizer_unaligned_store64(void* p, uint64_t v);
-#if defined(__cplusplus)
-} /* extern "C" */
-#endif /* __cplusplus */
-#define BrotliUnalignedRead16 __sanitizer_unaligned_load16
-#define BrotliUnalignedRead32 __sanitizer_unaligned_load32
-#define BrotliUnalignedRead64 __sanitizer_unaligned_load64
-#define BrotliUnalignedWrite64 __sanitizer_unaligned_store64
-#else
-static BROTLI_INLINE uint16_t BrotliUnalignedRead16(const void* p) {
- return *(const uint16_t*)p;
-}
-static BROTLI_INLINE uint32_t BrotliUnalignedRead32(const void* p) {
- return *(const uint32_t*)p;
-}
-#if (BROTLI_64_BITS)
-static BROTLI_INLINE uint64_t BrotliUnalignedRead64(const void* p) {
- return *(const uint64_t*)p;
-}
-static BROTLI_INLINE void BrotliUnalignedWrite64(void* p, uint64_t v) {
- *(uint64_t*)p = v;
-}
-#else /* BROTLI_64_BITS */
-/* Avoid emitting LDRD / STRD, which require properly aligned address. */
-/* If __attribute__(aligned) is available, use that. Otherwise, memcpy. */
-
-#if BROTLI_GNUC_HAS_ATTRIBUTE(aligned, 2, 7, 0)
-typedef __attribute__((aligned(1))) uint64_t brotli_unaligned_uint64_t;
-
-static BROTLI_INLINE uint64_t BrotliUnalignedRead64(const void* p) {
- return (uint64_t) ((brotli_unaligned_uint64_t*) p)[0];
-}
-static BROTLI_INLINE void BrotliUnalignedWrite64(void* p, uint64_t v) {
- brotli_unaligned_uint64_t* dwords = (brotli_unaligned_uint64_t*) p;
- dwords[0] = (brotli_unaligned_uint64_t) v;
-}
-#else /* BROTLI_GNUC_HAS_ATTRIBUTE(aligned, 2, 7, 0) */
-static BROTLI_INLINE uint64_t BrotliUnalignedRead64(const void* p) {
- uint64_t v;
- memcpy(&v, p, sizeof(uint64_t));
- return v;
-}
-
-static BROTLI_INLINE void BrotliUnalignedWrite64(void* p, uint64_t v) {
- memcpy(p, &v, sizeof(uint64_t));
-}
-#endif /* BROTLI_GNUC_HAS_ATTRIBUTE(aligned, 2, 7, 0) */
-#endif /* BROTLI_64_BITS */
-#endif /* ASAN / TSAN / MSAN */
-#endif /* BROTLI_ALIGNED_READ */
-
-#if BROTLI_LITTLE_ENDIAN
-/* Straight endianness. Just read / write values. */
-#define BROTLI_UNALIGNED_LOAD16LE BrotliUnalignedRead16
-#define BROTLI_UNALIGNED_LOAD32LE BrotliUnalignedRead32
-#define BROTLI_UNALIGNED_LOAD64LE BrotliUnalignedRead64
-#define BROTLI_UNALIGNED_STORE64LE BrotliUnalignedWrite64
-#elif BROTLI_BIG_ENDIAN /* BROTLI_LITTLE_ENDIAN */
-/* Explain compiler to byte-swap values. */
-#define BROTLI_BSWAP16_(V) ((uint16_t)( \
- (((V) & 0xFFU) << 8) | \
- (((V) >> 8) & 0xFFU)))
-static BROTLI_INLINE uint16_t BROTLI_UNALIGNED_LOAD16LE(const void* p) {
- uint16_t value = BrotliUnalignedRead16(p);
- return BROTLI_BSWAP16_(value);
-}
-#define BROTLI_BSWAP32_(V) ( \
- (((V) & 0xFFU) << 24) | (((V) & 0xFF00U) << 8) | \
- (((V) >> 8) & 0xFF00U) | (((V) >> 24) & 0xFFU))
-static BROTLI_INLINE uint32_t BROTLI_UNALIGNED_LOAD32LE(const void* p) {
- uint32_t value = BrotliUnalignedRead32(p);
- return BROTLI_BSWAP32_(value);
-}
-#define BROTLI_BSWAP64_(V) ( \
- (((V) & 0xFFU) << 56) | (((V) & 0xFF00U) << 40) | \
- (((V) & 0xFF0000U) << 24) | (((V) & 0xFF000000U) << 8) | \
- (((V) >> 8) & 0xFF000000U) | (((V) >> 24) & 0xFF0000U) | \
- (((V) >> 40) & 0xFF00U) | (((V) >> 56) & 0xFFU))
-static BROTLI_INLINE uint64_t BROTLI_UNALIGNED_LOAD64LE(const void* p) {
- uint64_t value = BrotliUnalignedRead64(p);
- return BROTLI_BSWAP64_(value);
-}
-static BROTLI_INLINE void BROTLI_UNALIGNED_STORE64LE(void* p, uint64_t v) {
- uint64_t value = BROTLI_BSWAP64_(v);
- BrotliUnalignedWrite64(p, value);
-}
-#else /* BROTLI_LITTLE_ENDIAN */
-/* Read / store values byte-wise; hopefully compiler will understand. */
-static BROTLI_INLINE uint16_t BROTLI_UNALIGNED_LOAD16LE(const void* p) {
- const uint8_t* in = (const uint8_t*)p;
- return (uint16_t)(in[0] | (in[1] << 8));
-}
-static BROTLI_INLINE uint32_t BROTLI_UNALIGNED_LOAD32LE(const void* p) {
- const uint8_t* in = (const uint8_t*)p;
- uint32_t value = (uint32_t)(in[0]);
- value |= (uint32_t)(in[1]) << 8;
- value |= (uint32_t)(in[2]) << 16;
- value |= (uint32_t)(in[3]) << 24;
- return value;
-}
-static BROTLI_INLINE uint64_t BROTLI_UNALIGNED_LOAD64LE(const void* p) {
- const uint8_t* in = (const uint8_t*)p;
- uint64_t value = (uint64_t)(in[0]);
- value |= (uint64_t)(in[1]) << 8;
- value |= (uint64_t)(in[2]) << 16;
- value |= (uint64_t)(in[3]) << 24;
- value |= (uint64_t)(in[4]) << 32;
- value |= (uint64_t)(in[5]) << 40;
- value |= (uint64_t)(in[6]) << 48;
- value |= (uint64_t)(in[7]) << 56;
- return value;
-}
-static BROTLI_INLINE void BROTLI_UNALIGNED_STORE64LE(void* p, uint64_t v) {
- uint8_t* out = (uint8_t*)p;
- out[0] = (uint8_t)v;
- out[1] = (uint8_t)(v >> 8);
- out[2] = (uint8_t)(v >> 16);
- out[3] = (uint8_t)(v >> 24);
- out[4] = (uint8_t)(v >> 32);
- out[5] = (uint8_t)(v >> 40);
- out[6] = (uint8_t)(v >> 48);
- out[7] = (uint8_t)(v >> 56);
-}
-#endif /* BROTLI_LITTLE_ENDIAN */
-
-/* BROTLI_IS_CONSTANT macros returns true for compile-time constants. */
-#if BROTLI_GNUC_HAS_BUILTIN(__builtin_constant_p, 3, 0, 1) || \
- BROTLI_INTEL_VERSION_CHECK(16, 0, 0)
-#define BROTLI_IS_CONSTANT(x) (!!__builtin_constant_p(x))
-#else
-#define BROTLI_IS_CONSTANT(x) (!!0)
-#endif
-
-#if defined(BROTLI_TARGET_ARMV7) || defined(BROTLI_TARGET_ARMV8_ANY)
-#define BROTLI_HAS_UBFX (!!1)
-#else
-#define BROTLI_HAS_UBFX (!!0)
-#endif
-
-#if defined(BROTLI_ENABLE_LOG)
-#define BROTLI_DCHECK(x) assert(x)
-#define BROTLI_LOG(x) printf x
-#else
-#define BROTLI_DCHECK(x)
-#define BROTLI_LOG(x)
-#endif
-
-#if defined(BROTLI_DEBUG) || defined(BROTLI_ENABLE_LOG)
-static BROTLI_INLINE void BrotliDump(const char* f, int l, const char* fn) {
- fprintf(stderr, "%s:%d (%s)\n", f, l, fn);
- fflush(stderr);
-}
-#define BROTLI_DUMP() BrotliDump(__FILE__, __LINE__, __FUNCTION__)
-#else
-#define BROTLI_DUMP() (void)(0)
-#endif
-
-/* TODO: add appropriate icc/sunpro/arm/ibm/ti checks. */
-#if (BROTLI_GNUC_VERSION_CHECK(3, 0, 0) || defined(__llvm__)) && \
- !defined(BROTLI_BUILD_NO_RBIT)
-#if defined(BROTLI_TARGET_ARMV7) || defined(BROTLI_TARGET_ARMV8_ANY)
-/* TODO: detect ARMv6T2 and enable this code for it. */
-static BROTLI_INLINE brotli_reg_t BrotliRBit(brotli_reg_t input) {
- brotli_reg_t output;
- __asm__("rbit %0, %1\n" : "=r"(output) : "r"(input));
- return output;
-}
-#define BROTLI_RBIT(x) BrotliRBit(x)
-#endif /* armv7 / armv8 */
-#endif /* gcc || clang */
-#if !defined(BROTLI_RBIT)
-static BROTLI_INLINE void BrotliRBit(void) { /* Should break build if used. */ }
-#endif /* BROTLI_RBIT */
-
-#define BROTLI_REPEAT(N, X) { \
- if ((N & 1) != 0) {X;} \
- if ((N & 2) != 0) {X; X;} \
- if ((N & 4) != 0) {X; X; X; X;} \
-}
-
-#define BROTLI_UNUSED(X) (void)(X)
-
-#define BROTLI_MIN_MAX(T) \
- static BROTLI_INLINE T brotli_min_ ## T (T a, T b) { return a < b ? a : b; } \
- static BROTLI_INLINE T brotli_max_ ## T (T a, T b) { return a > b ? a : b; }
-BROTLI_MIN_MAX(double) BROTLI_MIN_MAX(float) BROTLI_MIN_MAX(int)
-BROTLI_MIN_MAX(size_t) BROTLI_MIN_MAX(uint32_t) BROTLI_MIN_MAX(uint8_t)
-#undef BROTLI_MIN_MAX
-#define BROTLI_MIN(T, A, B) (brotli_min_ ## T((A), (B)))
-#define BROTLI_MAX(T, A, B) (brotli_max_ ## T((A), (B)))
-
-#define BROTLI_SWAP(T, A, I, J) { \
- T __brotli_swap_tmp = (A)[(I)]; \
- (A)[(I)] = (A)[(J)]; \
- (A)[(J)] = __brotli_swap_tmp; \
-}
-
-/* Default brotli_alloc_func */
-static void* BrotliDefaultAllocFunc(void* opaque, size_t size) {
- BROTLI_UNUSED(opaque);
- return malloc(size);
-}
-
-/* Default brotli_free_func */
-static void BrotliDefaultFreeFunc(void* opaque, void* address) {
- BROTLI_UNUSED(opaque);
- free(address);
-}
-
-BROTLI_UNUSED_FUNCTION void BrotliSuppressUnusedFunctions(void) {
- BROTLI_UNUSED(&BrotliSuppressUnusedFunctions);
- BROTLI_UNUSED(&BrotliUnalignedRead16);
- BROTLI_UNUSED(&BrotliUnalignedRead32);
- BROTLI_UNUSED(&BrotliUnalignedRead64);
- BROTLI_UNUSED(&BrotliUnalignedWrite64);
- BROTLI_UNUSED(&BROTLI_UNALIGNED_LOAD16LE);
- BROTLI_UNUSED(&BROTLI_UNALIGNED_LOAD32LE);
- BROTLI_UNUSED(&BROTLI_UNALIGNED_LOAD64LE);
- BROTLI_UNUSED(&BROTLI_UNALIGNED_STORE64LE);
- BROTLI_UNUSED(&BrotliRBit);
- BROTLI_UNUSED(&brotli_min_double);
- BROTLI_UNUSED(&brotli_max_double);
- BROTLI_UNUSED(&brotli_min_float);
- BROTLI_UNUSED(&brotli_max_float);
- BROTLI_UNUSED(&brotli_min_int);
- BROTLI_UNUSED(&brotli_max_int);
- BROTLI_UNUSED(&brotli_min_size_t);
- BROTLI_UNUSED(&brotli_max_size_t);
- BROTLI_UNUSED(&brotli_min_uint32_t);
- BROTLI_UNUSED(&brotli_max_uint32_t);
- BROTLI_UNUSED(&brotli_min_uint8_t);
- BROTLI_UNUSED(&brotli_max_uint8_t);
- BROTLI_UNUSED(&BrotliDefaultAllocFunc);
- BROTLI_UNUSED(&BrotliDefaultFreeFunc);
-#if defined(BROTLI_DEBUG) || defined(BROTLI_ENABLE_LOG)
- BROTLI_UNUSED(&BrotliDump);
-#endif
-}
-
-#endif /* BROTLI_COMMON_PLATFORM_H_ */
diff --git a/BaseTools/Source/C/BrotliCompress/common/transform.h b/BaseTools/Source/C/BrotliCompress/common/transform.h
deleted file mode 100644
index 8b42cd1807b0..000000000000
--- a/BaseTools/Source/C/BrotliCompress/common/transform.h
+++ /dev/null
@@ -1,80 +0,0 @@
-/* transforms is a part of ABI, but not API.
-
- It means that there are some functions that are supposed to be in "common"
- library, but header itself is not placed into include/brotli. This way,
- aforementioned functions will be available only to brotli internals.
- */
-
-#ifndef BROTLI_COMMON_TRANSFORM_H_
-#define BROTLI_COMMON_TRANSFORM_H_
-
-#include <brotli/port.h>
-#include <brotli/types.h>
-
-#if defined(__cplusplus) || defined(c_plusplus)
-extern "C" {
-#endif
-
-enum BrotliWordTransformType {
- BROTLI_TRANSFORM_IDENTITY = 0,
- BROTLI_TRANSFORM_OMIT_LAST_1 = 1,
- BROTLI_TRANSFORM_OMIT_LAST_2 = 2,
- BROTLI_TRANSFORM_OMIT_LAST_3 = 3,
- BROTLI_TRANSFORM_OMIT_LAST_4 = 4,
- BROTLI_TRANSFORM_OMIT_LAST_5 = 5,
- BROTLI_TRANSFORM_OMIT_LAST_6 = 6,
- BROTLI_TRANSFORM_OMIT_LAST_7 = 7,
- BROTLI_TRANSFORM_OMIT_LAST_8 = 8,
- BROTLI_TRANSFORM_OMIT_LAST_9 = 9,
- BROTLI_TRANSFORM_UPPERCASE_FIRST = 10,
- BROTLI_TRANSFORM_UPPERCASE_ALL = 11,
- BROTLI_TRANSFORM_OMIT_FIRST_1 = 12,
- BROTLI_TRANSFORM_OMIT_FIRST_2 = 13,
- BROTLI_TRANSFORM_OMIT_FIRST_3 = 14,
- BROTLI_TRANSFORM_OMIT_FIRST_4 = 15,
- BROTLI_TRANSFORM_OMIT_FIRST_5 = 16,
- BROTLI_TRANSFORM_OMIT_FIRST_6 = 17,
- BROTLI_TRANSFORM_OMIT_FIRST_7 = 18,
- BROTLI_TRANSFORM_OMIT_FIRST_8 = 19,
- BROTLI_TRANSFORM_OMIT_FIRST_9 = 20,
- BROTLI_NUM_TRANSFORM_TYPES /* Counts transforms, not a transform itself. */
-};
-
-#define BROTLI_TRANSFORMS_MAX_CUT_OFF BROTLI_TRANSFORM_OMIT_LAST_9
-
-typedef struct BrotliTransforms {
- uint16_t prefix_suffix_size;
- /* Last character must be null, so prefix_suffix_size must be at least 1. */
- const uint8_t* prefix_suffix;
- const uint16_t* prefix_suffix_map;
- uint32_t num_transforms;
- /* Each entry is a [prefix_id, transform, suffix_id] triplet. */
- const uint8_t* transforms;
- /* Indices of transforms like ["", BROTLI_TRANSFORM_OMIT_LAST_#, ""].
- 0-th element corresponds to ["", BROTLI_TRANSFORM_IDENTITY, ""].
- -1, if cut-off transform does not exist. */
- int16_t cutOffTransforms[BROTLI_TRANSFORMS_MAX_CUT_OFF + 1];
-} BrotliTransforms;
-
-/* T is BrotliTransforms*; result is uint8_t. */
-#define BROTLI_TRANSFORM_PREFIX_ID(T, I) ((T)->transforms[((I) * 3) + 0])
-#define BROTLI_TRANSFORM_TYPE(T, I) ((T)->transforms[((I) * 3) + 1])
-#define BROTLI_TRANSFORM_SUFFIX_ID(T, I) ((T)->transforms[((I) * 3) + 2])
-
-/* T is BrotliTransforms*; result is const uint8_t*. */
-#define BROTLI_TRANSFORM_PREFIX(T, I) (&(T)->prefix_suffix[ \
- (T)->prefix_suffix_map[BROTLI_TRANSFORM_PREFIX_ID(T, I)]])
-#define BROTLI_TRANSFORM_SUFFIX(T, I) (&(T)->prefix_suffix[ \
- (T)->prefix_suffix_map[BROTLI_TRANSFORM_SUFFIX_ID(T, I)]])
-
-BROTLI_COMMON_API const BrotliTransforms* BrotliGetTransforms(void);
-
-BROTLI_COMMON_API int BrotliTransformDictionaryWord(
- uint8_t* dst, const uint8_t* word, int len,
- const BrotliTransforms* transforms, int transform_idx);
-
-#if defined(__cplusplus) || defined(c_plusplus)
-} /* extern "C" */
-#endif
-
-#endif /* BROTLI_COMMON_TRANSFORM_H_ */
diff --git a/BaseTools/Source/C/BrotliCompress/common/version.h b/BaseTools/Source/C/BrotliCompress/common/version.h
deleted file mode 100644
index 8e94f4ffeacd..000000000000
--- a/BaseTools/Source/C/BrotliCompress/common/version.h
+++ /dev/null
@@ -1,26 +0,0 @@
-/* Copyright 2016 Google Inc. All Rights Reserved.
-
- Distributed under MIT license.
- See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
-*/
-
-/* Version definition. */
-
-#ifndef BROTLI_COMMON_VERSION_H_
-#define BROTLI_COMMON_VERSION_H_
-
-/* This macro should only be used when library is compiled together with client.
- If library is dynamically linked, use BrotliDecoderVersion and
- BrotliEncoderVersion methods. */
-
-/* Semantic version, calculated as (MAJOR << 24) | (MINOR << 12) | PATCH */
-#define BROTLI_VERSION 0x1000006
-
-/* This macro is used by build system to produce Libtool-friendly soname. See
- https://www.gnu.org/software/libtool/manual/html_node/Libtool-versioning.html
- */
-
-/* ABI version, calculated as (CURRENT << 24) | (REVISION << 12) | AGE */
-#define BROTLI_ABI_VERSION 0x1006000
-
-#endif /* BROTLI_COMMON_VERSION_H_ */
diff --git a/BaseTools/Source/C/BrotliCompress/dec/bit_reader.h b/BaseTools/Source/C/BrotliCompress/dec/bit_reader.h
deleted file mode 100644
index b13e33fea208..000000000000
--- a/BaseTools/Source/C/BrotliCompress/dec/bit_reader.h
+++ /dev/null
@@ -1,309 +0,0 @@
-/* Copyright 2013 Google Inc. All Rights Reserved.
-
- Distributed under MIT license.
- See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
-*/
-
-/* Bit reading helpers */
-
-#ifndef BROTLI_DEC_BIT_READER_H_
-#define BROTLI_DEC_BIT_READER_H_
-
-#include <string.h> /* memcpy */
-
-#include "../common/platform.h"
-#include <brotli/types.h>
-
-#if defined(__cplusplus) || defined(c_plusplus)
-extern "C" {
-#endif
-
-#define BROTLI_SHORT_FILL_BIT_WINDOW_READ (sizeof(brotli_reg_t) >> 1)
-
-static const uint32_t kBitMask[33] = { 0x00000000,
- 0x00000001, 0x00000003, 0x00000007, 0x0000000F,
- 0x0000001F, 0x0000003F, 0x0000007F, 0x000000FF,
- 0x000001FF, 0x000003FF, 0x000007FF, 0x00000FFF,
- 0x00001FFF, 0x00003FFF, 0x00007FFF, 0x0000FFFF,
- 0x0001FFFF, 0x0003FFFF, 0x0007FFFF, 0x000FFFFF,
- 0x001FFFFF, 0x003FFFFF, 0x007FFFFF, 0x00FFFFFF,
- 0x01FFFFFF, 0x03FFFFFF, 0x07FFFFFF, 0x0FFFFFFF,
- 0x1FFFFFFF, 0x3FFFFFFF, 0x7FFFFFFF, 0xFFFFFFFF
-};
-
-static BROTLI_INLINE uint32_t BitMask(uint32_t n) {
- if (BROTLI_IS_CONSTANT(n) || BROTLI_HAS_UBFX) {
- /* Masking with this expression turns to a single
- "Unsigned Bit Field Extract" UBFX instruction on ARM. */
- return ~((0xFFFFFFFFu) << n);
- } else {
- return kBitMask[n];
- }
-}
-
-typedef struct {
- brotli_reg_t val_; /* pre-fetched bits */
- uint32_t bit_pos_; /* current bit-reading position in val_ */
- const uint8_t* next_in; /* the byte we're reading from */
- size_t avail_in;
-} BrotliBitReader;
-
-typedef struct {
- brotli_reg_t val_;
- uint32_t bit_pos_;
- const uint8_t* next_in;
- size_t avail_in;
-} BrotliBitReaderState;
-
-/* Initializes the BrotliBitReader fields. */
-BROTLI_INTERNAL void BrotliInitBitReader(BrotliBitReader* const br);
-
-/* Ensures that accumulator is not empty.
- May consume up to sizeof(brotli_reg_t) - 1 bytes of input.
- Returns BROTLI_FALSE if data is required but there is no input available.
- For BROTLI_ALIGNED_READ this function also prepares bit reader for aligned
- reading. */
-BROTLI_INTERNAL BROTLI_BOOL BrotliWarmupBitReader(BrotliBitReader* const br);
-
-static BROTLI_INLINE void BrotliBitReaderSaveState(
- BrotliBitReader* const from, BrotliBitReaderState* to) {
- to->val_ = from->val_;
- to->bit_pos_ = from->bit_pos_;
- to->next_in = from->next_in;
- to->avail_in = from->avail_in;
-}
-
-static BROTLI_INLINE void BrotliBitReaderRestoreState(
- BrotliBitReader* const to, BrotliBitReaderState* from) {
- to->val_ = from->val_;
- to->bit_pos_ = from->bit_pos_;
- to->next_in = from->next_in;
- to->avail_in = from->avail_in;
-}
-
-static BROTLI_INLINE uint32_t BrotliGetAvailableBits(
- const BrotliBitReader* br) {
- return (BROTLI_64_BITS ? 64 : 32) - br->bit_pos_;
-}
-
-/* Returns amount of unread bytes the bit reader still has buffered from the
- BrotliInput, including whole bytes in br->val_. */
-static BROTLI_INLINE size_t BrotliGetRemainingBytes(BrotliBitReader* br) {
- return br->avail_in + (BrotliGetAvailableBits(br) >> 3);
-}
-
-/* Checks if there is at least |num| bytes left in the input ring-buffer
- (excluding the bits remaining in br->val_). */
-static BROTLI_INLINE BROTLI_BOOL BrotliCheckInputAmount(
- BrotliBitReader* const br, size_t num) {
- return TO_BROTLI_BOOL(br->avail_in >= num);
-}
-
-/* Guarantees that there are at least |n_bits| + 1 bits in accumulator.
- Precondition: accumulator contains at least 1 bit.
- |n_bits| should be in the range [1..24] for regular build. For portable
- non-64-bit little-endian build only 16 bits are safe to request. */
-static BROTLI_INLINE void BrotliFillBitWindow(
- BrotliBitReader* const br, uint32_t n_bits) {
-#if (BROTLI_64_BITS)
- if (!BROTLI_ALIGNED_READ && BROTLI_IS_CONSTANT(n_bits) && (n_bits <= 8)) {
- if (br->bit_pos_ >= 56) {
- br->val_ >>= 56;
- br->bit_pos_ ^= 56; /* here same as -= 56 because of the if condition */
- br->val_ |= BROTLI_UNALIGNED_LOAD64LE(br->next_in) << 8;
- br->avail_in -= 7;
- br->next_in += 7;
- }
- } else if (
- !BROTLI_ALIGNED_READ && BROTLI_IS_CONSTANT(n_bits) && (n_bits <= 16)) {
- if (br->bit_pos_ >= 48) {
- br->val_ >>= 48;
- br->bit_pos_ ^= 48; /* here same as -= 48 because of the if condition */
- br->val_ |= BROTLI_UNALIGNED_LOAD64LE(br->next_in) << 16;
- br->avail_in -= 6;
- br->next_in += 6;
- }
- } else {
- if (br->bit_pos_ >= 32) {
- br->val_ >>= 32;
- br->bit_pos_ ^= 32; /* here same as -= 32 because of the if condition */
- br->val_ |= ((uint64_t)BROTLI_UNALIGNED_LOAD32LE(br->next_in)) << 32;
- br->avail_in -= BROTLI_SHORT_FILL_BIT_WINDOW_READ;
- br->next_in += BROTLI_SHORT_FILL_BIT_WINDOW_READ;
- }
- }
-#else
- if (!BROTLI_ALIGNED_READ && BROTLI_IS_CONSTANT(n_bits) && (n_bits <= 8)) {
- if (br->bit_pos_ >= 24) {
- br->val_ >>= 24;
- br->bit_pos_ ^= 24; /* here same as -= 24 because of the if condition */
- br->val_ |= BROTLI_UNALIGNED_LOAD32LE(br->next_in) << 8;
- br->avail_in -= 3;
- br->next_in += 3;
- }
- } else {
- if (br->bit_pos_ >= 16) {
- br->val_ >>= 16;
- br->bit_pos_ ^= 16; /* here same as -= 16 because of the if condition */
- br->val_ |= ((uint32_t)BROTLI_UNALIGNED_LOAD16LE(br->next_in)) << 16;
- br->avail_in -= BROTLI_SHORT_FILL_BIT_WINDOW_READ;
- br->next_in += BROTLI_SHORT_FILL_BIT_WINDOW_READ;
- }
- }
-#endif
-}
-
-/* Mostly like BrotliFillBitWindow, but guarantees only 16 bits and reads no
- more than BROTLI_SHORT_FILL_BIT_WINDOW_READ bytes of input. */
-static BROTLI_INLINE void BrotliFillBitWindow16(BrotliBitReader* const br) {
- BrotliFillBitWindow(br, 17);
-}
-
-/* Tries to pull one byte of input to accumulator.
- Returns BROTLI_FALSE if there is no input available. */
-static BROTLI_INLINE BROTLI_BOOL BrotliPullByte(BrotliBitReader* const br) {
- if (br->avail_in == 0) {
- return BROTLI_FALSE;
- }
- br->val_ >>= 8;
-#if (BROTLI_64_BITS)
- br->val_ |= ((uint64_t)*br->next_in) << 56;
-#else
- br->val_ |= ((uint32_t)*br->next_in) << 24;
-#endif
- br->bit_pos_ -= 8;
- --br->avail_in;
- ++br->next_in;
- return BROTLI_TRUE;
-}
-
-/* Returns currently available bits.
- The number of valid bits could be calculated by BrotliGetAvailableBits. */
-static BROTLI_INLINE brotli_reg_t BrotliGetBitsUnmasked(
- BrotliBitReader* const br) {
- return br->val_ >> br->bit_pos_;
-}
-
-/* Like BrotliGetBits, but does not mask the result.
- The result contains at least 16 valid bits. */
-static BROTLI_INLINE uint32_t BrotliGet16BitsUnmasked(
- BrotliBitReader* const br) {
- BrotliFillBitWindow(br, 16);
- return (uint32_t)BrotliGetBitsUnmasked(br);
-}
-
-/* Returns the specified number of bits from |br| without advancing bit
- position. */
-static BROTLI_INLINE uint32_t BrotliGetBits(
- BrotliBitReader* const br, uint32_t n_bits) {
- BrotliFillBitWindow(br, n_bits);
- return (uint32_t)BrotliGetBitsUnmasked(br) & BitMask(n_bits);
-}
-
-/* Tries to peek the specified amount of bits. Returns BROTLI_FALSE, if there
- is not enough input. */
-static BROTLI_INLINE BROTLI_BOOL BrotliSafeGetBits(
- BrotliBitReader* const br, uint32_t n_bits, uint32_t* val) {
- while (BrotliGetAvailableBits(br) < n_bits) {
- if (!BrotliPullByte(br)) {
- return BROTLI_FALSE;
- }
- }
- *val = (uint32_t)BrotliGetBitsUnmasked(br) & BitMask(n_bits);
- return BROTLI_TRUE;
-}
-
-/* Advances the bit pos by |n_bits|. */
-static BROTLI_INLINE void BrotliDropBits(
- BrotliBitReader* const br, uint32_t n_bits) {
- br->bit_pos_ += n_bits;
-}
-
-static BROTLI_INLINE void BrotliBitReaderUnload(BrotliBitReader* br) {
- uint32_t unused_bytes = BrotliGetAvailableBits(br) >> 3;
- uint32_t unused_bits = unused_bytes << 3;
- br->avail_in += unused_bytes;
- br->next_in -= unused_bytes;
- if (unused_bits == sizeof(br->val_) << 3) {
- br->val_ = 0;
- } else {
- br->val_ <<= unused_bits;
- }
- br->bit_pos_ += unused_bits;
-}
-
-/* Reads the specified number of bits from |br| and advances the bit pos.
- Precondition: accumulator MUST contain at least |n_bits|. */
-static BROTLI_INLINE void BrotliTakeBits(
- BrotliBitReader* const br, uint32_t n_bits, uint32_t* val) {
- *val = (uint32_t)BrotliGetBitsUnmasked(br) & BitMask(n_bits);
- BROTLI_LOG(("[BrotliReadBits] %d %d %d val: %6x\n",
- (int)br->avail_in, (int)br->bit_pos_, (int)n_bits, (int)*val));
- BrotliDropBits(br, n_bits);
-}
-
-/* Reads the specified number of bits from |br| and advances the bit pos.
- Assumes that there is enough input to perform BrotliFillBitWindow. */
-static BROTLI_INLINE uint32_t BrotliReadBits(
- BrotliBitReader* const br, uint32_t n_bits) {
- if (BROTLI_64_BITS || (n_bits <= 16)) {
- uint32_t val;
- BrotliFillBitWindow(br, n_bits);
- BrotliTakeBits(br, n_bits, &val);
- return val;
- } else {
- uint32_t low_val;
- uint32_t high_val;
- BrotliFillBitWindow(br, 16);
- BrotliTakeBits(br, 16, &low_val);
- BrotliFillBitWindow(br, 8);
- BrotliTakeBits(br, n_bits - 16, &high_val);
- return low_val | (high_val << 16);
- }
-}
-
-/* Tries to read the specified amount of bits. Returns BROTLI_FALSE, if there
- is not enough input. |n_bits| MUST be positive. */
-static BROTLI_INLINE BROTLI_BOOL BrotliSafeReadBits(
- BrotliBitReader* const br, uint32_t n_bits, uint32_t* val) {
- while (BrotliGetAvailableBits(br) < n_bits) {
- if (!BrotliPullByte(br)) {
- return BROTLI_FALSE;
- }
- }
- BrotliTakeBits(br, n_bits, val);
- return BROTLI_TRUE;
-}
-
-/* Advances the bit reader position to the next byte boundary and verifies
- that any skipped bits are set to zero. */
-static BROTLI_INLINE BROTLI_BOOL BrotliJumpToByteBoundary(BrotliBitReader* br) {
- uint32_t pad_bits_count = BrotliGetAvailableBits(br) & 0x7;
- uint32_t pad_bits = 0;
- if (pad_bits_count != 0) {
- BrotliTakeBits(br, pad_bits_count, &pad_bits);
- }
- return TO_BROTLI_BOOL(pad_bits == 0);
-}
-
-/* Copies remaining input bytes stored in the bit reader to the output. Value
- |num| may not be larger than BrotliGetRemainingBytes. The bit reader must be
- warmed up again after this. */
-static BROTLI_INLINE void BrotliCopyBytes(uint8_t* dest,
- BrotliBitReader* br, size_t num) {
- while (BrotliGetAvailableBits(br) >= 8 && num > 0) {
- *dest = (uint8_t)BrotliGetBitsUnmasked(br);
- BrotliDropBits(br, 8);
- ++dest;
- --num;
- }
- memcpy(dest, br->next_in, num);
- br->avail_in -= num;
- br->next_in += num;
-}
-
-#if defined(__cplusplus) || defined(c_plusplus)
-} /* extern "C" */
-#endif
-
-#endif /* BROTLI_DEC_BIT_READER_H_ */
diff --git a/BaseTools/Source/C/BrotliCompress/dec/huffman.h b/BaseTools/Source/C/BrotliCompress/dec/huffman.h
deleted file mode 100644
index 5fc8c0224edc..000000000000
--- a/BaseTools/Source/C/BrotliCompress/dec/huffman.h
+++ /dev/null
@@ -1,72 +0,0 @@
-/* Copyright 2013 Google Inc. All Rights Reserved.
-
- Distributed under MIT license.
- See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
-*/
-
-/* Utilities for building Huffman decoding tables. */
-
-#ifndef BROTLI_DEC_HUFFMAN_H_
-#define BROTLI_DEC_HUFFMAN_H_
-
-#include "../common/platform.h"
-#include <brotli/types.h>
-
-#if defined(__cplusplus) || defined(c_plusplus)
-extern "C" {
-#endif
-
-#define BROTLI_HUFFMAN_MAX_CODE_LENGTH 15
-
-/* Maximum possible Huffman table size for an alphabet size of (index * 32),
- max code length 15 and root table bits 8. */
-static const uint16_t kMaxHuffmanTableSize[] = {
- 256, 402, 436, 468, 500, 534, 566, 598, 630, 662, 694, 726, 758, 790, 822,
- 854, 886, 920, 952, 984, 1016, 1048, 1080, 1112, 1144, 1176, 1208, 1240, 1272,
- 1304, 1336, 1368, 1400, 1432, 1464, 1496, 1528};
-/* BROTLI_NUM_BLOCK_LEN_SYMBOLS == 26 */
-#define BROTLI_HUFFMAN_MAX_SIZE_26 396
-/* BROTLI_MAX_BLOCK_TYPE_SYMBOLS == 258 */
-#define BROTLI_HUFFMAN_MAX_SIZE_258 632
-/* BROTLI_MAX_CONTEXT_MAP_SYMBOLS == 272 */
-#define BROTLI_HUFFMAN_MAX_SIZE_272 646
-
-#define BROTLI_HUFFMAN_MAX_CODE_LENGTH_CODE_LENGTH 5
-
-typedef struct {
- uint8_t bits; /* number of bits used for this symbol */
- uint16_t value; /* symbol value or table offset */
-} HuffmanCode;
-
-/* Builds Huffman lookup table assuming code lengths are in symbol order. */
-BROTLI_INTERNAL void BrotliBuildCodeLengthsHuffmanTable(HuffmanCode* root_table,
- const uint8_t* const code_lengths, uint16_t* count);
-
-/* Builds Huffman lookup table assuming code lengths are in symbol order.
- Returns size of resulting table. */
-BROTLI_INTERNAL uint32_t BrotliBuildHuffmanTable(HuffmanCode* root_table,
- int root_bits, const uint16_t* const symbol_lists, uint16_t* count_arg);
-
-/* Builds a simple Huffman table. The |num_symbols| parameter is to be
- interpreted as follows: 0 means 1 symbol, 1 means 2 symbols,
- 2 means 3 symbols, 3 means 4 symbols with lengths [2, 2, 2, 2],
- 4 means 4 symbols with lengths [1, 2, 3, 3]. */
-BROTLI_INTERNAL uint32_t BrotliBuildSimpleHuffmanTable(HuffmanCode* table,
- int root_bits, uint16_t* symbols, uint32_t num_symbols);
-
-/* Contains a collection of Huffman trees with the same alphabet size. */
-/* max_symbol is needed due to simple codes since log2(alphabet_size) could be
- greater than log2(max_symbol). */
-typedef struct {
- HuffmanCode** htrees;
- HuffmanCode* codes;
- uint16_t alphabet_size;
- uint16_t max_symbol;
- uint16_t num_htrees;
-} HuffmanTreeGroup;
-
-#if defined(__cplusplus) || defined(c_plusplus)
-} /* extern "C" */
-#endif
-
-#endif /* BROTLI_DEC_HUFFMAN_H_ */
diff --git a/BaseTools/Source/C/BrotliCompress/dec/prefix.h b/BaseTools/Source/C/BrotliCompress/dec/prefix.h
deleted file mode 100644
index 39cb45920831..000000000000
--- a/BaseTools/Source/C/BrotliCompress/dec/prefix.h
+++ /dev/null
@@ -1,750 +0,0 @@
-/* Copyright 2013 Google Inc. All Rights Reserved.
-
- Distributed under MIT license.
- See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
-*/
-
-/* Lookup tables to map prefix codes to value ranges. This is used during
- decoding of the block lengths, literal insertion lengths and copy lengths. */
-
-#ifndef BROTLI_DEC_PREFIX_H_
-#define BROTLI_DEC_PREFIX_H_
-
-#include "../common/constants.h"
-#include <brotli/types.h>
-
-/* Represents the range of values belonging to a prefix code:
- [offset, offset + 2^nbits) */
-struct PrefixCodeRange {
- uint16_t offset;
- uint8_t nbits;
-};
-
-static const struct PrefixCodeRange
- kBlockLengthPrefixCode[BROTLI_NUM_BLOCK_LEN_SYMBOLS] = {
- { 1, 2}, { 5, 2}, { 9, 2}, { 13, 2},
- { 17, 3}, { 25, 3}, { 33, 3}, { 41, 3},
- { 49, 4}, { 65, 4}, { 81, 4}, { 97, 4},
- { 113, 5}, { 145, 5}, { 177, 5}, { 209, 5},
- { 241, 6}, { 305, 6}, { 369, 7}, { 497, 8},
- { 753, 9}, { 1265, 10}, {2289, 11}, {4337, 12},
- {8433, 13}, {16625, 24}
-};
-
-typedef struct CmdLutElement {
- uint8_t insert_len_extra_bits;
- uint8_t copy_len_extra_bits;
- int8_t distance_code;
- uint8_t context;
- uint16_t insert_len_offset;
- uint16_t copy_len_offset;
-} CmdLutElement;
-
-static const CmdLutElement kCmdLut[BROTLI_NUM_COMMAND_SYMBOLS] = {
- { 0x00, 0x00, 0, 0x00, 0x0000, 0x0002 },
- { 0x00, 0x00, 0, 0x01, 0x0000, 0x0003 },
- { 0x00, 0x00, 0, 0x02, 0x0000, 0x0004 },
- { 0x00, 0x00, 0, 0x03, 0x0000, 0x0005 },
- { 0x00, 0x00, 0, 0x03, 0x0000, 0x0006 },
- { 0x00, 0x00, 0, 0x03, 0x0000, 0x0007 },
- { 0x00, 0x00, 0, 0x03, 0x0000, 0x0008 },
- { 0x00, 0x00, 0, 0x03, 0x0000, 0x0009 },
- { 0x00, 0x00, 0, 0x00, 0x0001, 0x0002 },
- { 0x00, 0x00, 0, 0x01, 0x0001, 0x0003 },
- { 0x00, 0x00, 0, 0x02, 0x0001, 0x0004 },
- { 0x00, 0x00, 0, 0x03, 0x0001, 0x0005 },
- { 0x00, 0x00, 0, 0x03, 0x0001, 0x0006 },
- { 0x00, 0x00, 0, 0x03, 0x0001, 0x0007 },
- { 0x00, 0x00, 0, 0x03, 0x0001, 0x0008 },
- { 0x00, 0x00, 0, 0x03, 0x0001, 0x0009 },
- { 0x00, 0x00, 0, 0x00, 0x0002, 0x0002 },
- { 0x00, 0x00, 0, 0x01, 0x0002, 0x0003 },
- { 0x00, 0x00, 0, 0x02, 0x0002, 0x0004 },
- { 0x00, 0x00, 0, 0x03, 0x0002, 0x0005 },
- { 0x00, 0x00, 0, 0x03, 0x0002, 0x0006 },
- { 0x00, 0x00, 0, 0x03, 0x0002, 0x0007 },
- { 0x00, 0x00, 0, 0x03, 0x0002, 0x0008 },
- { 0x00, 0x00, 0, 0x03, 0x0002, 0x0009 },
- { 0x00, 0x00, 0, 0x00, 0x0003, 0x0002 },
- { 0x00, 0x00, 0, 0x01, 0x0003, 0x0003 },
- { 0x00, 0x00, 0, 0x02, 0x0003, 0x0004 },
- { 0x00, 0x00, 0, 0x03, 0x0003, 0x0005 },
- { 0x00, 0x00, 0, 0x03, 0x0003, 0x0006 },
- { 0x00, 0x00, 0, 0x03, 0x0003, 0x0007 },
- { 0x00, 0x00, 0, 0x03, 0x0003, 0x0008 },
- { 0x00, 0x00, 0, 0x03, 0x0003, 0x0009 },
- { 0x00, 0x00, 0, 0x00, 0x0004, 0x0002 },
- { 0x00, 0x00, 0, 0x01, 0x0004, 0x0003 },
- { 0x00, 0x00, 0, 0x02, 0x0004, 0x0004 },
- { 0x00, 0x00, 0, 0x03, 0x0004, 0x0005 },
- { 0x00, 0x00, 0, 0x03, 0x0004, 0x0006 },
- { 0x00, 0x00, 0, 0x03, 0x0004, 0x0007 },
- { 0x00, 0x00, 0, 0x03, 0x0004, 0x0008 },
- { 0x00, 0x00, 0, 0x03, 0x0004, 0x0009 },
- { 0x00, 0x00, 0, 0x00, 0x0005, 0x0002 },
- { 0x00, 0x00, 0, 0x01, 0x0005, 0x0003 },
- { 0x00, 0x00, 0, 0x02, 0x0005, 0x0004 },
- { 0x00, 0x00, 0, 0x03, 0x0005, 0x0005 },
- { 0x00, 0x00, 0, 0x03, 0x0005, 0x0006 },
- { 0x00, 0x00, 0, 0x03, 0x0005, 0x0007 },
- { 0x00, 0x00, 0, 0x03, 0x0005, 0x0008 },
- { 0x00, 0x00, 0, 0x03, 0x0005, 0x0009 },
- { 0x01, 0x00, 0, 0x00, 0x0006, 0x0002 },
- { 0x01, 0x00, 0, 0x01, 0x0006, 0x0003 },
- { 0x01, 0x00, 0, 0x02, 0x0006, 0x0004 },
- { 0x01, 0x00, 0, 0x03, 0x0006, 0x0005 },
- { 0x01, 0x00, 0, 0x03, 0x0006, 0x0006 },
- { 0x01, 0x00, 0, 0x03, 0x0006, 0x0007 },
- { 0x01, 0x00, 0, 0x03, 0x0006, 0x0008 },
- { 0x01, 0x00, 0, 0x03, 0x0006, 0x0009 },
- { 0x01, 0x00, 0, 0x00, 0x0008, 0x0002 },
- { 0x01, 0x00, 0, 0x01, 0x0008, 0x0003 },
- { 0x01, 0x00, 0, 0x02, 0x0008, 0x0004 },
- { 0x01, 0x00, 0, 0x03, 0x0008, 0x0005 },
- { 0x01, 0x00, 0, 0x03, 0x0008, 0x0006 },
- { 0x01, 0x00, 0, 0x03, 0x0008, 0x0007 },
- { 0x01, 0x00, 0, 0x03, 0x0008, 0x0008 },
- { 0x01, 0x00, 0, 0x03, 0x0008, 0x0009 },
- { 0x00, 0x01, 0, 0x03, 0x0000, 0x000a },
- { 0x00, 0x01, 0, 0x03, 0x0000, 0x000c },
- { 0x00, 0x02, 0, 0x03, 0x0000, 0x000e },
- { 0x00, 0x02, 0, 0x03, 0x0000, 0x0012 },
- { 0x00, 0x03, 0, 0x03, 0x0000, 0x0016 },
- { 0x00, 0x03, 0, 0x03, 0x0000, 0x001e },
- { 0x00, 0x04, 0, 0x03, 0x0000, 0x0026 },
- { 0x00, 0x04, 0, 0x03, 0x0000, 0x0036 },
- { 0x00, 0x01, 0, 0x03, 0x0001, 0x000a },
- { 0x00, 0x01, 0, 0x03, 0x0001, 0x000c },
- { 0x00, 0x02, 0, 0x03, 0x0001, 0x000e },
- { 0x00, 0x02, 0, 0x03, 0x0001, 0x0012 },
- { 0x00, 0x03, 0, 0x03, 0x0001, 0x0016 },
- { 0x00, 0x03, 0, 0x03, 0x0001, 0x001e },
- { 0x00, 0x04, 0, 0x03, 0x0001, 0x0026 },
- { 0x00, 0x04, 0, 0x03, 0x0001, 0x0036 },
- { 0x00, 0x01, 0, 0x03, 0x0002, 0x000a },
- { 0x00, 0x01, 0, 0x03, 0x0002, 0x000c },
- { 0x00, 0x02, 0, 0x03, 0x0002, 0x000e },
- { 0x00, 0x02, 0, 0x03, 0x0002, 0x0012 },
- { 0x00, 0x03, 0, 0x03, 0x0002, 0x0016 },
- { 0x00, 0x03, 0, 0x03, 0x0002, 0x001e },
- { 0x00, 0x04, 0, 0x03, 0x0002, 0x0026 },
- { 0x00, 0x04, 0, 0x03, 0x0002, 0x0036 },
- { 0x00, 0x01, 0, 0x03, 0x0003, 0x000a },
- { 0x00, 0x01, 0, 0x03, 0x0003, 0x000c },
- { 0x00, 0x02, 0, 0x03, 0x0003, 0x000e },
- { 0x00, 0x02, 0, 0x03, 0x0003, 0x0012 },
- { 0x00, 0x03, 0, 0x03, 0x0003, 0x0016 },
- { 0x00, 0x03, 0, 0x03, 0x0003, 0x001e },
- { 0x00, 0x04, 0, 0x03, 0x0003, 0x0026 },
- { 0x00, 0x04, 0, 0x03, 0x0003, 0x0036 },
- { 0x00, 0x01, 0, 0x03, 0x0004, 0x000a },
- { 0x00, 0x01, 0, 0x03, 0x0004, 0x000c },
- { 0x00, 0x02, 0, 0x03, 0x0004, 0x000e },
- { 0x00, 0x02, 0, 0x03, 0x0004, 0x0012 },
- { 0x00, 0x03, 0, 0x03, 0x0004, 0x0016 },
- { 0x00, 0x03, 0, 0x03, 0x0004, 0x001e },
- { 0x00, 0x04, 0, 0x03, 0x0004, 0x0026 },
- { 0x00, 0x04, 0, 0x03, 0x0004, 0x0036 },
- { 0x00, 0x01, 0, 0x03, 0x0005, 0x000a },
- { 0x00, 0x01, 0, 0x03, 0x0005, 0x000c },
- { 0x00, 0x02, 0, 0x03, 0x0005, 0x000e },
- { 0x00, 0x02, 0, 0x03, 0x0005, 0x0012 },
- { 0x00, 0x03, 0, 0x03, 0x0005, 0x0016 },
- { 0x00, 0x03, 0, 0x03, 0x0005, 0x001e },
- { 0x00, 0x04, 0, 0x03, 0x0005, 0x0026 },
- { 0x00, 0x04, 0, 0x03, 0x0005, 0x0036 },
- { 0x01, 0x01, 0, 0x03, 0x0006, 0x000a },
- { 0x01, 0x01, 0, 0x03, 0x0006, 0x000c },
- { 0x01, 0x02, 0, 0x03, 0x0006, 0x000e },
- { 0x01, 0x02, 0, 0x03, 0x0006, 0x0012 },
- { 0x01, 0x03, 0, 0x03, 0x0006, 0x0016 },
- { 0x01, 0x03, 0, 0x03, 0x0006, 0x001e },
- { 0x01, 0x04, 0, 0x03, 0x0006, 0x0026 },
- { 0x01, 0x04, 0, 0x03, 0x0006, 0x0036 },
- { 0x01, 0x01, 0, 0x03, 0x0008, 0x000a },
- { 0x01, 0x01, 0, 0x03, 0x0008, 0x000c },
- { 0x01, 0x02, 0, 0x03, 0x0008, 0x000e },
- { 0x01, 0x02, 0, 0x03, 0x0008, 0x0012 },
- { 0x01, 0x03, 0, 0x03, 0x0008, 0x0016 },
- { 0x01, 0x03, 0, 0x03, 0x0008, 0x001e },
- { 0x01, 0x04, 0, 0x03, 0x0008, 0x0026 },
- { 0x01, 0x04, 0, 0x03, 0x0008, 0x0036 },
- { 0x00, 0x00, -1, 0x00, 0x0000, 0x0002 },
- { 0x00, 0x00, -1, 0x01, 0x0000, 0x0003 },
- { 0x00, 0x00, -1, 0x02, 0x0000, 0x0004 },
- { 0x00, 0x00, -1, 0x03, 0x0000, 0x0005 },
- { 0x00, 0x00, -1, 0x03, 0x0000, 0x0006 },
- { 0x00, 0x00, -1, 0x03, 0x0000, 0x0007 },
- { 0x00, 0x00, -1, 0x03, 0x0000, 0x0008 },
- { 0x00, 0x00, -1, 0x03, 0x0000, 0x0009 },
- { 0x00, 0x00, -1, 0x00, 0x0001, 0x0002 },
- { 0x00, 0x00, -1, 0x01, 0x0001, 0x0003 },
- { 0x00, 0x00, -1, 0x02, 0x0001, 0x0004 },
- { 0x00, 0x00, -1, 0x03, 0x0001, 0x0005 },
- { 0x00, 0x00, -1, 0x03, 0x0001, 0x0006 },
- { 0x00, 0x00, -1, 0x03, 0x0001, 0x0007 },
- { 0x00, 0x00, -1, 0x03, 0x0001, 0x0008 },
- { 0x00, 0x00, -1, 0x03, 0x0001, 0x0009 },
- { 0x00, 0x00, -1, 0x00, 0x0002, 0x0002 },
- { 0x00, 0x00, -1, 0x01, 0x0002, 0x0003 },
- { 0x00, 0x00, -1, 0x02, 0x0002, 0x0004 },
- { 0x00, 0x00, -1, 0x03, 0x0002, 0x0005 },
- { 0x00, 0x00, -1, 0x03, 0x0002, 0x0006 },
- { 0x00, 0x00, -1, 0x03, 0x0002, 0x0007 },
- { 0x00, 0x00, -1, 0x03, 0x0002, 0x0008 },
- { 0x00, 0x00, -1, 0x03, 0x0002, 0x0009 },
- { 0x00, 0x00, -1, 0x00, 0x0003, 0x0002 },
- { 0x00, 0x00, -1, 0x01, 0x0003, 0x0003 },
- { 0x00, 0x00, -1, 0x02, 0x0003, 0x0004 },
- { 0x00, 0x00, -1, 0x03, 0x0003, 0x0005 },
- { 0x00, 0x00, -1, 0x03, 0x0003, 0x0006 },
- { 0x00, 0x00, -1, 0x03, 0x0003, 0x0007 },
- { 0x00, 0x00, -1, 0x03, 0x0003, 0x0008 },
- { 0x00, 0x00, -1, 0x03, 0x0003, 0x0009 },
- { 0x00, 0x00, -1, 0x00, 0x0004, 0x0002 },
- { 0x00, 0x00, -1, 0x01, 0x0004, 0x0003 },
- { 0x00, 0x00, -1, 0x02, 0x0004, 0x0004 },
- { 0x00, 0x00, -1, 0x03, 0x0004, 0x0005 },
- { 0x00, 0x00, -1, 0x03, 0x0004, 0x0006 },
- { 0x00, 0x00, -1, 0x03, 0x0004, 0x0007 },
- { 0x00, 0x00, -1, 0x03, 0x0004, 0x0008 },
- { 0x00, 0x00, -1, 0x03, 0x0004, 0x0009 },
- { 0x00, 0x00, -1, 0x00, 0x0005, 0x0002 },
- { 0x00, 0x00, -1, 0x01, 0x0005, 0x0003 },
- { 0x00, 0x00, -1, 0x02, 0x0005, 0x0004 },
- { 0x00, 0x00, -1, 0x03, 0x0005, 0x0005 },
- { 0x00, 0x00, -1, 0x03, 0x0005, 0x0006 },
- { 0x00, 0x00, -1, 0x03, 0x0005, 0x0007 },
- { 0x00, 0x00, -1, 0x03, 0x0005, 0x0008 },
- { 0x00, 0x00, -1, 0x03, 0x0005, 0x0009 },
- { 0x01, 0x00, -1, 0x00, 0x0006, 0x0002 },
- { 0x01, 0x00, -1, 0x01, 0x0006, 0x0003 },
- { 0x01, 0x00, -1, 0x02, 0x0006, 0x0004 },
- { 0x01, 0x00, -1, 0x03, 0x0006, 0x0005 },
- { 0x01, 0x00, -1, 0x03, 0x0006, 0x0006 },
- { 0x01, 0x00, -1, 0x03, 0x0006, 0x0007 },
- { 0x01, 0x00, -1, 0x03, 0x0006, 0x0008 },
- { 0x01, 0x00, -1, 0x03, 0x0006, 0x0009 },
- { 0x01, 0x00, -1, 0x00, 0x0008, 0x0002 },
- { 0x01, 0x00, -1, 0x01, 0x0008, 0x0003 },
- { 0x01, 0x00, -1, 0x02, 0x0008, 0x0004 },
- { 0x01, 0x00, -1, 0x03, 0x0008, 0x0005 },
- { 0x01, 0x00, -1, 0x03, 0x0008, 0x0006 },
- { 0x01, 0x00, -1, 0x03, 0x0008, 0x0007 },
- { 0x01, 0x00, -1, 0x03, 0x0008, 0x0008 },
- { 0x01, 0x00, -1, 0x03, 0x0008, 0x0009 },
- { 0x00, 0x01, -1, 0x03, 0x0000, 0x000a },
- { 0x00, 0x01, -1, 0x03, 0x0000, 0x000c },
- { 0x00, 0x02, -1, 0x03, 0x0000, 0x000e },
- { 0x00, 0x02, -1, 0x03, 0x0000, 0x0012 },
- { 0x00, 0x03, -1, 0x03, 0x0000, 0x0016 },
- { 0x00, 0x03, -1, 0x03, 0x0000, 0x001e },
- { 0x00, 0x04, -1, 0x03, 0x0000, 0x0026 },
- { 0x00, 0x04, -1, 0x03, 0x0000, 0x0036 },
- { 0x00, 0x01, -1, 0x03, 0x0001, 0x000a },
- { 0x00, 0x01, -1, 0x03, 0x0001, 0x000c },
- { 0x00, 0x02, -1, 0x03, 0x0001, 0x000e },
- { 0x00, 0x02, -1, 0x03, 0x0001, 0x0012 },
- { 0x00, 0x03, -1, 0x03, 0x0001, 0x0016 },
- { 0x00, 0x03, -1, 0x03, 0x0001, 0x001e },
- { 0x00, 0x04, -1, 0x03, 0x0001, 0x0026 },
- { 0x00, 0x04, -1, 0x03, 0x0001, 0x0036 },
- { 0x00, 0x01, -1, 0x03, 0x0002, 0x000a },
- { 0x00, 0x01, -1, 0x03, 0x0002, 0x000c },
- { 0x00, 0x02, -1, 0x03, 0x0002, 0x000e },
- { 0x00, 0x02, -1, 0x03, 0x0002, 0x0012 },
- { 0x00, 0x03, -1, 0x03, 0x0002, 0x0016 },
- { 0x00, 0x03, -1, 0x03, 0x0002, 0x001e },
- { 0x00, 0x04, -1, 0x03, 0x0002, 0x0026 },
- { 0x00, 0x04, -1, 0x03, 0x0002, 0x0036 },
- { 0x00, 0x01, -1, 0x03, 0x0003, 0x000a },
- { 0x00, 0x01, -1, 0x03, 0x0003, 0x000c },
- { 0x00, 0x02, -1, 0x03, 0x0003, 0x000e },
- { 0x00, 0x02, -1, 0x03, 0x0003, 0x0012 },
- { 0x00, 0x03, -1, 0x03, 0x0003, 0x0016 },
- { 0x00, 0x03, -1, 0x03, 0x0003, 0x001e },
- { 0x00, 0x04, -1, 0x03, 0x0003, 0x0026 },
- { 0x00, 0x04, -1, 0x03, 0x0003, 0x0036 },
- { 0x00, 0x01, -1, 0x03, 0x0004, 0x000a },
- { 0x00, 0x01, -1, 0x03, 0x0004, 0x000c },
- { 0x00, 0x02, -1, 0x03, 0x0004, 0x000e },
- { 0x00, 0x02, -1, 0x03, 0x0004, 0x0012 },
- { 0x00, 0x03, -1, 0x03, 0x0004, 0x0016 },
- { 0x00, 0x03, -1, 0x03, 0x0004, 0x001e },
- { 0x00, 0x04, -1, 0x03, 0x0004, 0x0026 },
- { 0x00, 0x04, -1, 0x03, 0x0004, 0x0036 },
- { 0x00, 0x01, -1, 0x03, 0x0005, 0x000a },
- { 0x00, 0x01, -1, 0x03, 0x0005, 0x000c },
- { 0x00, 0x02, -1, 0x03, 0x0005, 0x000e },
- { 0x00, 0x02, -1, 0x03, 0x0005, 0x0012 },
- { 0x00, 0x03, -1, 0x03, 0x0005, 0x0016 },
- { 0x00, 0x03, -1, 0x03, 0x0005, 0x001e },
- { 0x00, 0x04, -1, 0x03, 0x0005, 0x0026 },
- { 0x00, 0x04, -1, 0x03, 0x0005, 0x0036 },
- { 0x01, 0x01, -1, 0x03, 0x0006, 0x000a },
- { 0x01, 0x01, -1, 0x03, 0x0006, 0x000c },
- { 0x01, 0x02, -1, 0x03, 0x0006, 0x000e },
- { 0x01, 0x02, -1, 0x03, 0x0006, 0x0012 },
- { 0x01, 0x03, -1, 0x03, 0x0006, 0x0016 },
- { 0x01, 0x03, -1, 0x03, 0x0006, 0x001e },
- { 0x01, 0x04, -1, 0x03, 0x0006, 0x0026 },
- { 0x01, 0x04, -1, 0x03, 0x0006, 0x0036 },
- { 0x01, 0x01, -1, 0x03, 0x0008, 0x000a },
- { 0x01, 0x01, -1, 0x03, 0x0008, 0x000c },
- { 0x01, 0x02, -1, 0x03, 0x0008, 0x000e },
- { 0x01, 0x02, -1, 0x03, 0x0008, 0x0012 },
- { 0x01, 0x03, -1, 0x03, 0x0008, 0x0016 },
- { 0x01, 0x03, -1, 0x03, 0x0008, 0x001e },
- { 0x01, 0x04, -1, 0x03, 0x0008, 0x0026 },
- { 0x01, 0x04, -1, 0x03, 0x0008, 0x0036 },
- { 0x02, 0x00, -1, 0x00, 0x000a, 0x0002 },
- { 0x02, 0x00, -1, 0x01, 0x000a, 0x0003 },
- { 0x02, 0x00, -1, 0x02, 0x000a, 0x0004 },
- { 0x02, 0x00, -1, 0x03, 0x000a, 0x0005 },
- { 0x02, 0x00, -1, 0x03, 0x000a, 0x0006 },
- { 0x02, 0x00, -1, 0x03, 0x000a, 0x0007 },
- { 0x02, 0x00, -1, 0x03, 0x000a, 0x0008 },
- { 0x02, 0x00, -1, 0x03, 0x000a, 0x0009 },
- { 0x02, 0x00, -1, 0x00, 0x000e, 0x0002 },
- { 0x02, 0x00, -1, 0x01, 0x000e, 0x0003 },
- { 0x02, 0x00, -1, 0x02, 0x000e, 0x0004 },
- { 0x02, 0x00, -1, 0x03, 0x000e, 0x0005 },
- { 0x02, 0x00, -1, 0x03, 0x000e, 0x0006 },
- { 0x02, 0x00, -1, 0x03, 0x000e, 0x0007 },
- { 0x02, 0x00, -1, 0x03, 0x000e, 0x0008 },
- { 0x02, 0x00, -1, 0x03, 0x000e, 0x0009 },
- { 0x03, 0x00, -1, 0x00, 0x0012, 0x0002 },
- { 0x03, 0x00, -1, 0x01, 0x0012, 0x0003 },
- { 0x03, 0x00, -1, 0x02, 0x0012, 0x0004 },
- { 0x03, 0x00, -1, 0x03, 0x0012, 0x0005 },
- { 0x03, 0x00, -1, 0x03, 0x0012, 0x0006 },
- { 0x03, 0x00, -1, 0x03, 0x0012, 0x0007 },
- { 0x03, 0x00, -1, 0x03, 0x0012, 0x0008 },
- { 0x03, 0x00, -1, 0x03, 0x0012, 0x0009 },
- { 0x03, 0x00, -1, 0x00, 0x001a, 0x0002 },
- { 0x03, 0x00, -1, 0x01, 0x001a, 0x0003 },
- { 0x03, 0x00, -1, 0x02, 0x001a, 0x0004 },
- { 0x03, 0x00, -1, 0x03, 0x001a, 0x0005 },
- { 0x03, 0x00, -1, 0x03, 0x001a, 0x0006 },
- { 0x03, 0x00, -1, 0x03, 0x001a, 0x0007 },
- { 0x03, 0x00, -1, 0x03, 0x001a, 0x0008 },
- { 0x03, 0x00, -1, 0x03, 0x001a, 0x0009 },
- { 0x04, 0x00, -1, 0x00, 0x0022, 0x0002 },
- { 0x04, 0x00, -1, 0x01, 0x0022, 0x0003 },
- { 0x04, 0x00, -1, 0x02, 0x0022, 0x0004 },
- { 0x04, 0x00, -1, 0x03, 0x0022, 0x0005 },
- { 0x04, 0x00, -1, 0x03, 0x0022, 0x0006 },
- { 0x04, 0x00, -1, 0x03, 0x0022, 0x0007 },
- { 0x04, 0x00, -1, 0x03, 0x0022, 0x0008 },
- { 0x04, 0x00, -1, 0x03, 0x0022, 0x0009 },
- { 0x04, 0x00, -1, 0x00, 0x0032, 0x0002 },
- { 0x04, 0x00, -1, 0x01, 0x0032, 0x0003 },
- { 0x04, 0x00, -1, 0x02, 0x0032, 0x0004 },
- { 0x04, 0x00, -1, 0x03, 0x0032, 0x0005 },
- { 0x04, 0x00, -1, 0x03, 0x0032, 0x0006 },
- { 0x04, 0x00, -1, 0x03, 0x0032, 0x0007 },
- { 0x04, 0x00, -1, 0x03, 0x0032, 0x0008 },
- { 0x04, 0x00, -1, 0x03, 0x0032, 0x0009 },
- { 0x05, 0x00, -1, 0x00, 0x0042, 0x0002 },
- { 0x05, 0x00, -1, 0x01, 0x0042, 0x0003 },
- { 0x05, 0x00, -1, 0x02, 0x0042, 0x0004 },
- { 0x05, 0x00, -1, 0x03, 0x0042, 0x0005 },
- { 0x05, 0x00, -1, 0x03, 0x0042, 0x0006 },
- { 0x05, 0x00, -1, 0x03, 0x0042, 0x0007 },
- { 0x05, 0x00, -1, 0x03, 0x0042, 0x0008 },
- { 0x05, 0x00, -1, 0x03, 0x0042, 0x0009 },
- { 0x05, 0x00, -1, 0x00, 0x0062, 0x0002 },
- { 0x05, 0x00, -1, 0x01, 0x0062, 0x0003 },
- { 0x05, 0x00, -1, 0x02, 0x0062, 0x0004 },
- { 0x05, 0x00, -1, 0x03, 0x0062, 0x0005 },
- { 0x05, 0x00, -1, 0x03, 0x0062, 0x0006 },
- { 0x05, 0x00, -1, 0x03, 0x0062, 0x0007 },
- { 0x05, 0x00, -1, 0x03, 0x0062, 0x0008 },
- { 0x05, 0x00, -1, 0x03, 0x0062, 0x0009 },
- { 0x02, 0x01, -1, 0x03, 0x000a, 0x000a },
- { 0x02, 0x01, -1, 0x03, 0x000a, 0x000c },
- { 0x02, 0x02, -1, 0x03, 0x000a, 0x000e },
- { 0x02, 0x02, -1, 0x03, 0x000a, 0x0012 },
- { 0x02, 0x03, -1, 0x03, 0x000a, 0x0016 },
- { 0x02, 0x03, -1, 0x03, 0x000a, 0x001e },
- { 0x02, 0x04, -1, 0x03, 0x000a, 0x0026 },
- { 0x02, 0x04, -1, 0x03, 0x000a, 0x0036 },
- { 0x02, 0x01, -1, 0x03, 0x000e, 0x000a },
- { 0x02, 0x01, -1, 0x03, 0x000e, 0x000c },
- { 0x02, 0x02, -1, 0x03, 0x000e, 0x000e },
- { 0x02, 0x02, -1, 0x03, 0x000e, 0x0012 },
- { 0x02, 0x03, -1, 0x03, 0x000e, 0x0016 },
- { 0x02, 0x03, -1, 0x03, 0x000e, 0x001e },
- { 0x02, 0x04, -1, 0x03, 0x000e, 0x0026 },
- { 0x02, 0x04, -1, 0x03, 0x000e, 0x0036 },
- { 0x03, 0x01, -1, 0x03, 0x0012, 0x000a },
- { 0x03, 0x01, -1, 0x03, 0x0012, 0x000c },
- { 0x03, 0x02, -1, 0x03, 0x0012, 0x000e },
- { 0x03, 0x02, -1, 0x03, 0x0012, 0x0012 },
- { 0x03, 0x03, -1, 0x03, 0x0012, 0x0016 },
- { 0x03, 0x03, -1, 0x03, 0x0012, 0x001e },
- { 0x03, 0x04, -1, 0x03, 0x0012, 0x0026 },
- { 0x03, 0x04, -1, 0x03, 0x0012, 0x0036 },
- { 0x03, 0x01, -1, 0x03, 0x001a, 0x000a },
- { 0x03, 0x01, -1, 0x03, 0x001a, 0x000c },
- { 0x03, 0x02, -1, 0x03, 0x001a, 0x000e },
- { 0x03, 0x02, -1, 0x03, 0x001a, 0x0012 },
- { 0x03, 0x03, -1, 0x03, 0x001a, 0x0016 },
- { 0x03, 0x03, -1, 0x03, 0x001a, 0x001e },
- { 0x03, 0x04, -1, 0x03, 0x001a, 0x0026 },
- { 0x03, 0x04, -1, 0x03, 0x001a, 0x0036 },
- { 0x04, 0x01, -1, 0x03, 0x0022, 0x000a },
- { 0x04, 0x01, -1, 0x03, 0x0022, 0x000c },
- { 0x04, 0x02, -1, 0x03, 0x0022, 0x000e },
- { 0x04, 0x02, -1, 0x03, 0x0022, 0x0012 },
- { 0x04, 0x03, -1, 0x03, 0x0022, 0x0016 },
- { 0x04, 0x03, -1, 0x03, 0x0022, 0x001e },
- { 0x04, 0x04, -1, 0x03, 0x0022, 0x0026 },
- { 0x04, 0x04, -1, 0x03, 0x0022, 0x0036 },
- { 0x04, 0x01, -1, 0x03, 0x0032, 0x000a },
- { 0x04, 0x01, -1, 0x03, 0x0032, 0x000c },
- { 0x04, 0x02, -1, 0x03, 0x0032, 0x000e },
- { 0x04, 0x02, -1, 0x03, 0x0032, 0x0012 },
- { 0x04, 0x03, -1, 0x03, 0x0032, 0x0016 },
- { 0x04, 0x03, -1, 0x03, 0x0032, 0x001e },
- { 0x04, 0x04, -1, 0x03, 0x0032, 0x0026 },
- { 0x04, 0x04, -1, 0x03, 0x0032, 0x0036 },
- { 0x05, 0x01, -1, 0x03, 0x0042, 0x000a },
- { 0x05, 0x01, -1, 0x03, 0x0042, 0x000c },
- { 0x05, 0x02, -1, 0x03, 0x0042, 0x000e },
- { 0x05, 0x02, -1, 0x03, 0x0042, 0x0012 },
- { 0x05, 0x03, -1, 0x03, 0x0042, 0x0016 },
- { 0x05, 0x03, -1, 0x03, 0x0042, 0x001e },
- { 0x05, 0x04, -1, 0x03, 0x0042, 0x0026 },
- { 0x05, 0x04, -1, 0x03, 0x0042, 0x0036 },
- { 0x05, 0x01, -1, 0x03, 0x0062, 0x000a },
- { 0x05, 0x01, -1, 0x03, 0x0062, 0x000c },
- { 0x05, 0x02, -1, 0x03, 0x0062, 0x000e },
- { 0x05, 0x02, -1, 0x03, 0x0062, 0x0012 },
- { 0x05, 0x03, -1, 0x03, 0x0062, 0x0016 },
- { 0x05, 0x03, -1, 0x03, 0x0062, 0x001e },
- { 0x05, 0x04, -1, 0x03, 0x0062, 0x0026 },
- { 0x05, 0x04, -1, 0x03, 0x0062, 0x0036 },
- { 0x00, 0x05, -1, 0x03, 0x0000, 0x0046 },
- { 0x00, 0x05, -1, 0x03, 0x0000, 0x0066 },
- { 0x00, 0x06, -1, 0x03, 0x0000, 0x0086 },
- { 0x00, 0x07, -1, 0x03, 0x0000, 0x00c6 },
- { 0x00, 0x08, -1, 0x03, 0x0000, 0x0146 },
- { 0x00, 0x09, -1, 0x03, 0x0000, 0x0246 },
- { 0x00, 0x0a, -1, 0x03, 0x0000, 0x0446 },
- { 0x00, 0x18, -1, 0x03, 0x0000, 0x0846 },
- { 0x00, 0x05, -1, 0x03, 0x0001, 0x0046 },
- { 0x00, 0x05, -1, 0x03, 0x0001, 0x0066 },
- { 0x00, 0x06, -1, 0x03, 0x0001, 0x0086 },
- { 0x00, 0x07, -1, 0x03, 0x0001, 0x00c6 },
- { 0x00, 0x08, -1, 0x03, 0x0001, 0x0146 },
- { 0x00, 0x09, -1, 0x03, 0x0001, 0x0246 },
- { 0x00, 0x0a, -1, 0x03, 0x0001, 0x0446 },
- { 0x00, 0x18, -1, 0x03, 0x0001, 0x0846 },
- { 0x00, 0x05, -1, 0x03, 0x0002, 0x0046 },
- { 0x00, 0x05, -1, 0x03, 0x0002, 0x0066 },
- { 0x00, 0x06, -1, 0x03, 0x0002, 0x0086 },
- { 0x00, 0x07, -1, 0x03, 0x0002, 0x00c6 },
- { 0x00, 0x08, -1, 0x03, 0x0002, 0x0146 },
- { 0x00, 0x09, -1, 0x03, 0x0002, 0x0246 },
- { 0x00, 0x0a, -1, 0x03, 0x0002, 0x0446 },
- { 0x00, 0x18, -1, 0x03, 0x0002, 0x0846 },
- { 0x00, 0x05, -1, 0x03, 0x0003, 0x0046 },
- { 0x00, 0x05, -1, 0x03, 0x0003, 0x0066 },
- { 0x00, 0x06, -1, 0x03, 0x0003, 0x0086 },
- { 0x00, 0x07, -1, 0x03, 0x0003, 0x00c6 },
- { 0x00, 0x08, -1, 0x03, 0x0003, 0x0146 },
- { 0x00, 0x09, -1, 0x03, 0x0003, 0x0246 },
- { 0x00, 0x0a, -1, 0x03, 0x0003, 0x0446 },
- { 0x00, 0x18, -1, 0x03, 0x0003, 0x0846 },
- { 0x00, 0x05, -1, 0x03, 0x0004, 0x0046 },
- { 0x00, 0x05, -1, 0x03, 0x0004, 0x0066 },
- { 0x00, 0x06, -1, 0x03, 0x0004, 0x0086 },
- { 0x00, 0x07, -1, 0x03, 0x0004, 0x00c6 },
- { 0x00, 0x08, -1, 0x03, 0x0004, 0x0146 },
- { 0x00, 0x09, -1, 0x03, 0x0004, 0x0246 },
- { 0x00, 0x0a, -1, 0x03, 0x0004, 0x0446 },
- { 0x00, 0x18, -1, 0x03, 0x0004, 0x0846 },
- { 0x00, 0x05, -1, 0x03, 0x0005, 0x0046 },
- { 0x00, 0x05, -1, 0x03, 0x0005, 0x0066 },
- { 0x00, 0x06, -1, 0x03, 0x0005, 0x0086 },
- { 0x00, 0x07, -1, 0x03, 0x0005, 0x00c6 },
- { 0x00, 0x08, -1, 0x03, 0x0005, 0x0146 },
- { 0x00, 0x09, -1, 0x03, 0x0005, 0x0246 },
- { 0x00, 0x0a, -1, 0x03, 0x0005, 0x0446 },
- { 0x00, 0x18, -1, 0x03, 0x0005, 0x0846 },
- { 0x01, 0x05, -1, 0x03, 0x0006, 0x0046 },
- { 0x01, 0x05, -1, 0x03, 0x0006, 0x0066 },
- { 0x01, 0x06, -1, 0x03, 0x0006, 0x0086 },
- { 0x01, 0x07, -1, 0x03, 0x0006, 0x00c6 },
- { 0x01, 0x08, -1, 0x03, 0x0006, 0x0146 },
- { 0x01, 0x09, -1, 0x03, 0x0006, 0x0246 },
- { 0x01, 0x0a, -1, 0x03, 0x0006, 0x0446 },
- { 0x01, 0x18, -1, 0x03, 0x0006, 0x0846 },
- { 0x01, 0x05, -1, 0x03, 0x0008, 0x0046 },
- { 0x01, 0x05, -1, 0x03, 0x0008, 0x0066 },
- { 0x01, 0x06, -1, 0x03, 0x0008, 0x0086 },
- { 0x01, 0x07, -1, 0x03, 0x0008, 0x00c6 },
- { 0x01, 0x08, -1, 0x03, 0x0008, 0x0146 },
- { 0x01, 0x09, -1, 0x03, 0x0008, 0x0246 },
- { 0x01, 0x0a, -1, 0x03, 0x0008, 0x0446 },
- { 0x01, 0x18, -1, 0x03, 0x0008, 0x0846 },
- { 0x06, 0x00, -1, 0x00, 0x0082, 0x0002 },
- { 0x06, 0x00, -1, 0x01, 0x0082, 0x0003 },
- { 0x06, 0x00, -1, 0x02, 0x0082, 0x0004 },
- { 0x06, 0x00, -1, 0x03, 0x0082, 0x0005 },
- { 0x06, 0x00, -1, 0x03, 0x0082, 0x0006 },
- { 0x06, 0x00, -1, 0x03, 0x0082, 0x0007 },
- { 0x06, 0x00, -1, 0x03, 0x0082, 0x0008 },
- { 0x06, 0x00, -1, 0x03, 0x0082, 0x0009 },
- { 0x07, 0x00, -1, 0x00, 0x00c2, 0x0002 },
- { 0x07, 0x00, -1, 0x01, 0x00c2, 0x0003 },
- { 0x07, 0x00, -1, 0x02, 0x00c2, 0x0004 },
- { 0x07, 0x00, -1, 0x03, 0x00c2, 0x0005 },
- { 0x07, 0x00, -1, 0x03, 0x00c2, 0x0006 },
- { 0x07, 0x00, -1, 0x03, 0x00c2, 0x0007 },
- { 0x07, 0x00, -1, 0x03, 0x00c2, 0x0008 },
- { 0x07, 0x00, -1, 0x03, 0x00c2, 0x0009 },
- { 0x08, 0x00, -1, 0x00, 0x0142, 0x0002 },
- { 0x08, 0x00, -1, 0x01, 0x0142, 0x0003 },
- { 0x08, 0x00, -1, 0x02, 0x0142, 0x0004 },
- { 0x08, 0x00, -1, 0x03, 0x0142, 0x0005 },
- { 0x08, 0x00, -1, 0x03, 0x0142, 0x0006 },
- { 0x08, 0x00, -1, 0x03, 0x0142, 0x0007 },
- { 0x08, 0x00, -1, 0x03, 0x0142, 0x0008 },
- { 0x08, 0x00, -1, 0x03, 0x0142, 0x0009 },
- { 0x09, 0x00, -1, 0x00, 0x0242, 0x0002 },
- { 0x09, 0x00, -1, 0x01, 0x0242, 0x0003 },
- { 0x09, 0x00, -1, 0x02, 0x0242, 0x0004 },
- { 0x09, 0x00, -1, 0x03, 0x0242, 0x0005 },
- { 0x09, 0x00, -1, 0x03, 0x0242, 0x0006 },
- { 0x09, 0x00, -1, 0x03, 0x0242, 0x0007 },
- { 0x09, 0x00, -1, 0x03, 0x0242, 0x0008 },
- { 0x09, 0x00, -1, 0x03, 0x0242, 0x0009 },
- { 0x0a, 0x00, -1, 0x00, 0x0442, 0x0002 },
- { 0x0a, 0x00, -1, 0x01, 0x0442, 0x0003 },
- { 0x0a, 0x00, -1, 0x02, 0x0442, 0x0004 },
- { 0x0a, 0x00, -1, 0x03, 0x0442, 0x0005 },
- { 0x0a, 0x00, -1, 0x03, 0x0442, 0x0006 },
- { 0x0a, 0x00, -1, 0x03, 0x0442, 0x0007 },
- { 0x0a, 0x00, -1, 0x03, 0x0442, 0x0008 },
- { 0x0a, 0x00, -1, 0x03, 0x0442, 0x0009 },
- { 0x0c, 0x00, -1, 0x00, 0x0842, 0x0002 },
- { 0x0c, 0x00, -1, 0x01, 0x0842, 0x0003 },
- { 0x0c, 0x00, -1, 0x02, 0x0842, 0x0004 },
- { 0x0c, 0x00, -1, 0x03, 0x0842, 0x0005 },
- { 0x0c, 0x00, -1, 0x03, 0x0842, 0x0006 },
- { 0x0c, 0x00, -1, 0x03, 0x0842, 0x0007 },
- { 0x0c, 0x00, -1, 0x03, 0x0842, 0x0008 },
- { 0x0c, 0x00, -1, 0x03, 0x0842, 0x0009 },
- { 0x0e, 0x00, -1, 0x00, 0x1842, 0x0002 },
- { 0x0e, 0x00, -1, 0x01, 0x1842, 0x0003 },
- { 0x0e, 0x00, -1, 0x02, 0x1842, 0x0004 },
- { 0x0e, 0x00, -1, 0x03, 0x1842, 0x0005 },
- { 0x0e, 0x00, -1, 0x03, 0x1842, 0x0006 },
- { 0x0e, 0x00, -1, 0x03, 0x1842, 0x0007 },
- { 0x0e, 0x00, -1, 0x03, 0x1842, 0x0008 },
- { 0x0e, 0x00, -1, 0x03, 0x1842, 0x0009 },
- { 0x18, 0x00, -1, 0x00, 0x5842, 0x0002 },
- { 0x18, 0x00, -1, 0x01, 0x5842, 0x0003 },
- { 0x18, 0x00, -1, 0x02, 0x5842, 0x0004 },
- { 0x18, 0x00, -1, 0x03, 0x5842, 0x0005 },
- { 0x18, 0x00, -1, 0x03, 0x5842, 0x0006 },
- { 0x18, 0x00, -1, 0x03, 0x5842, 0x0007 },
- { 0x18, 0x00, -1, 0x03, 0x5842, 0x0008 },
- { 0x18, 0x00, -1, 0x03, 0x5842, 0x0009 },
- { 0x02, 0x05, -1, 0x03, 0x000a, 0x0046 },
- { 0x02, 0x05, -1, 0x03, 0x000a, 0x0066 },
- { 0x02, 0x06, -1, 0x03, 0x000a, 0x0086 },
- { 0x02, 0x07, -1, 0x03, 0x000a, 0x00c6 },
- { 0x02, 0x08, -1, 0x03, 0x000a, 0x0146 },
- { 0x02, 0x09, -1, 0x03, 0x000a, 0x0246 },
- { 0x02, 0x0a, -1, 0x03, 0x000a, 0x0446 },
- { 0x02, 0x18, -1, 0x03, 0x000a, 0x0846 },
- { 0x02, 0x05, -1, 0x03, 0x000e, 0x0046 },
- { 0x02, 0x05, -1, 0x03, 0x000e, 0x0066 },
- { 0x02, 0x06, -1, 0x03, 0x000e, 0x0086 },
- { 0x02, 0x07, -1, 0x03, 0x000e, 0x00c6 },
- { 0x02, 0x08, -1, 0x03, 0x000e, 0x0146 },
- { 0x02, 0x09, -1, 0x03, 0x000e, 0x0246 },
- { 0x02, 0x0a, -1, 0x03, 0x000e, 0x0446 },
- { 0x02, 0x18, -1, 0x03, 0x000e, 0x0846 },
- { 0x03, 0x05, -1, 0x03, 0x0012, 0x0046 },
- { 0x03, 0x05, -1, 0x03, 0x0012, 0x0066 },
- { 0x03, 0x06, -1, 0x03, 0x0012, 0x0086 },
- { 0x03, 0x07, -1, 0x03, 0x0012, 0x00c6 },
- { 0x03, 0x08, -1, 0x03, 0x0012, 0x0146 },
- { 0x03, 0x09, -1, 0x03, 0x0012, 0x0246 },
- { 0x03, 0x0a, -1, 0x03, 0x0012, 0x0446 },
- { 0x03, 0x18, -1, 0x03, 0x0012, 0x0846 },
- { 0x03, 0x05, -1, 0x03, 0x001a, 0x0046 },
- { 0x03, 0x05, -1, 0x03, 0x001a, 0x0066 },
- { 0x03, 0x06, -1, 0x03, 0x001a, 0x0086 },
- { 0x03, 0x07, -1, 0x03, 0x001a, 0x00c6 },
- { 0x03, 0x08, -1, 0x03, 0x001a, 0x0146 },
- { 0x03, 0x09, -1, 0x03, 0x001a, 0x0246 },
- { 0x03, 0x0a, -1, 0x03, 0x001a, 0x0446 },
- { 0x03, 0x18, -1, 0x03, 0x001a, 0x0846 },
- { 0x04, 0x05, -1, 0x03, 0x0022, 0x0046 },
- { 0x04, 0x05, -1, 0x03, 0x0022, 0x0066 },
- { 0x04, 0x06, -1, 0x03, 0x0022, 0x0086 },
- { 0x04, 0x07, -1, 0x03, 0x0022, 0x00c6 },
- { 0x04, 0x08, -1, 0x03, 0x0022, 0x0146 },
- { 0x04, 0x09, -1, 0x03, 0x0022, 0x0246 },
- { 0x04, 0x0a, -1, 0x03, 0x0022, 0x0446 },
- { 0x04, 0x18, -1, 0x03, 0x0022, 0x0846 },
- { 0x04, 0x05, -1, 0x03, 0x0032, 0x0046 },
- { 0x04, 0x05, -1, 0x03, 0x0032, 0x0066 },
- { 0x04, 0x06, -1, 0x03, 0x0032, 0x0086 },
- { 0x04, 0x07, -1, 0x03, 0x0032, 0x00c6 },
- { 0x04, 0x08, -1, 0x03, 0x0032, 0x0146 },
- { 0x04, 0x09, -1, 0x03, 0x0032, 0x0246 },
- { 0x04, 0x0a, -1, 0x03, 0x0032, 0x0446 },
- { 0x04, 0x18, -1, 0x03, 0x0032, 0x0846 },
- { 0x05, 0x05, -1, 0x03, 0x0042, 0x0046 },
- { 0x05, 0x05, -1, 0x03, 0x0042, 0x0066 },
- { 0x05, 0x06, -1, 0x03, 0x0042, 0x0086 },
- { 0x05, 0x07, -1, 0x03, 0x0042, 0x00c6 },
- { 0x05, 0x08, -1, 0x03, 0x0042, 0x0146 },
- { 0x05, 0x09, -1, 0x03, 0x0042, 0x0246 },
- { 0x05, 0x0a, -1, 0x03, 0x0042, 0x0446 },
- { 0x05, 0x18, -1, 0x03, 0x0042, 0x0846 },
- { 0x05, 0x05, -1, 0x03, 0x0062, 0x0046 },
- { 0x05, 0x05, -1, 0x03, 0x0062, 0x0066 },
- { 0x05, 0x06, -1, 0x03, 0x0062, 0x0086 },
- { 0x05, 0x07, -1, 0x03, 0x0062, 0x00c6 },
- { 0x05, 0x08, -1, 0x03, 0x0062, 0x0146 },
- { 0x05, 0x09, -1, 0x03, 0x0062, 0x0246 },
- { 0x05, 0x0a, -1, 0x03, 0x0062, 0x0446 },
- { 0x05, 0x18, -1, 0x03, 0x0062, 0x0846 },
- { 0x06, 0x01, -1, 0x03, 0x0082, 0x000a },
- { 0x06, 0x01, -1, 0x03, 0x0082, 0x000c },
- { 0x06, 0x02, -1, 0x03, 0x0082, 0x000e },
- { 0x06, 0x02, -1, 0x03, 0x0082, 0x0012 },
- { 0x06, 0x03, -1, 0x03, 0x0082, 0x0016 },
- { 0x06, 0x03, -1, 0x03, 0x0082, 0x001e },
- { 0x06, 0x04, -1, 0x03, 0x0082, 0x0026 },
- { 0x06, 0x04, -1, 0x03, 0x0082, 0x0036 },
- { 0x07, 0x01, -1, 0x03, 0x00c2, 0x000a },
- { 0x07, 0x01, -1, 0x03, 0x00c2, 0x000c },
- { 0x07, 0x02, -1, 0x03, 0x00c2, 0x000e },
- { 0x07, 0x02, -1, 0x03, 0x00c2, 0x0012 },
- { 0x07, 0x03, -1, 0x03, 0x00c2, 0x0016 },
- { 0x07, 0x03, -1, 0x03, 0x00c2, 0x001e },
- { 0x07, 0x04, -1, 0x03, 0x00c2, 0x0026 },
- { 0x07, 0x04, -1, 0x03, 0x00c2, 0x0036 },
- { 0x08, 0x01, -1, 0x03, 0x0142, 0x000a },
- { 0x08, 0x01, -1, 0x03, 0x0142, 0x000c },
- { 0x08, 0x02, -1, 0x03, 0x0142, 0x000e },
- { 0x08, 0x02, -1, 0x03, 0x0142, 0x0012 },
- { 0x08, 0x03, -1, 0x03, 0x0142, 0x0016 },
- { 0x08, 0x03, -1, 0x03, 0x0142, 0x001e },
- { 0x08, 0x04, -1, 0x03, 0x0142, 0x0026 },
- { 0x08, 0x04, -1, 0x03, 0x0142, 0x0036 },
- { 0x09, 0x01, -1, 0x03, 0x0242, 0x000a },
- { 0x09, 0x01, -1, 0x03, 0x0242, 0x000c },
- { 0x09, 0x02, -1, 0x03, 0x0242, 0x000e },
- { 0x09, 0x02, -1, 0x03, 0x0242, 0x0012 },
- { 0x09, 0x03, -1, 0x03, 0x0242, 0x0016 },
- { 0x09, 0x03, -1, 0x03, 0x0242, 0x001e },
- { 0x09, 0x04, -1, 0x03, 0x0242, 0x0026 },
- { 0x09, 0x04, -1, 0x03, 0x0242, 0x0036 },
- { 0x0a, 0x01, -1, 0x03, 0x0442, 0x000a },
- { 0x0a, 0x01, -1, 0x03, 0x0442, 0x000c },
- { 0x0a, 0x02, -1, 0x03, 0x0442, 0x000e },
- { 0x0a, 0x02, -1, 0x03, 0x0442, 0x0012 },
- { 0x0a, 0x03, -1, 0x03, 0x0442, 0x0016 },
- { 0x0a, 0x03, -1, 0x03, 0x0442, 0x001e },
- { 0x0a, 0x04, -1, 0x03, 0x0442, 0x0026 },
- { 0x0a, 0x04, -1, 0x03, 0x0442, 0x0036 },
- { 0x0c, 0x01, -1, 0x03, 0x0842, 0x000a },
- { 0x0c, 0x01, -1, 0x03, 0x0842, 0x000c },
- { 0x0c, 0x02, -1, 0x03, 0x0842, 0x000e },
- { 0x0c, 0x02, -1, 0x03, 0x0842, 0x0012 },
- { 0x0c, 0x03, -1, 0x03, 0x0842, 0x0016 },
- { 0x0c, 0x03, -1, 0x03, 0x0842, 0x001e },
- { 0x0c, 0x04, -1, 0x03, 0x0842, 0x0026 },
- { 0x0c, 0x04, -1, 0x03, 0x0842, 0x0036 },
- { 0x0e, 0x01, -1, 0x03, 0x1842, 0x000a },
- { 0x0e, 0x01, -1, 0x03, 0x1842, 0x000c },
- { 0x0e, 0x02, -1, 0x03, 0x1842, 0x000e },
- { 0x0e, 0x02, -1, 0x03, 0x1842, 0x0012 },
- { 0x0e, 0x03, -1, 0x03, 0x1842, 0x0016 },
- { 0x0e, 0x03, -1, 0x03, 0x1842, 0x001e },
- { 0x0e, 0x04, -1, 0x03, 0x1842, 0x0026 },
- { 0x0e, 0x04, -1, 0x03, 0x1842, 0x0036 },
- { 0x18, 0x01, -1, 0x03, 0x5842, 0x000a },
- { 0x18, 0x01, -1, 0x03, 0x5842, 0x000c },
- { 0x18, 0x02, -1, 0x03, 0x5842, 0x000e },
- { 0x18, 0x02, -1, 0x03, 0x5842, 0x0012 },
- { 0x18, 0x03, -1, 0x03, 0x5842, 0x0016 },
- { 0x18, 0x03, -1, 0x03, 0x5842, 0x001e },
- { 0x18, 0x04, -1, 0x03, 0x5842, 0x0026 },
- { 0x18, 0x04, -1, 0x03, 0x5842, 0x0036 },
- { 0x06, 0x05, -1, 0x03, 0x0082, 0x0046 },
- { 0x06, 0x05, -1, 0x03, 0x0082, 0x0066 },
- { 0x06, 0x06, -1, 0x03, 0x0082, 0x0086 },
- { 0x06, 0x07, -1, 0x03, 0x0082, 0x00c6 },
- { 0x06, 0x08, -1, 0x03, 0x0082, 0x0146 },
- { 0x06, 0x09, -1, 0x03, 0x0082, 0x0246 },
- { 0x06, 0x0a, -1, 0x03, 0x0082, 0x0446 },
- { 0x06, 0x18, -1, 0x03, 0x0082, 0x0846 },
- { 0x07, 0x05, -1, 0x03, 0x00c2, 0x0046 },
- { 0x07, 0x05, -1, 0x03, 0x00c2, 0x0066 },
- { 0x07, 0x06, -1, 0x03, 0x00c2, 0x0086 },
- { 0x07, 0x07, -1, 0x03, 0x00c2, 0x00c6 },
- { 0x07, 0x08, -1, 0x03, 0x00c2, 0x0146 },
- { 0x07, 0x09, -1, 0x03, 0x00c2, 0x0246 },
- { 0x07, 0x0a, -1, 0x03, 0x00c2, 0x0446 },
- { 0x07, 0x18, -1, 0x03, 0x00c2, 0x0846 },
- { 0x08, 0x05, -1, 0x03, 0x0142, 0x0046 },
- { 0x08, 0x05, -1, 0x03, 0x0142, 0x0066 },
- { 0x08, 0x06, -1, 0x03, 0x0142, 0x0086 },
- { 0x08, 0x07, -1, 0x03, 0x0142, 0x00c6 },
- { 0x08, 0x08, -1, 0x03, 0x0142, 0x0146 },
- { 0x08, 0x09, -1, 0x03, 0x0142, 0x0246 },
- { 0x08, 0x0a, -1, 0x03, 0x0142, 0x0446 },
- { 0x08, 0x18, -1, 0x03, 0x0142, 0x0846 },
- { 0x09, 0x05, -1, 0x03, 0x0242, 0x0046 },
- { 0x09, 0x05, -1, 0x03, 0x0242, 0x0066 },
- { 0x09, 0x06, -1, 0x03, 0x0242, 0x0086 },
- { 0x09, 0x07, -1, 0x03, 0x0242, 0x00c6 },
- { 0x09, 0x08, -1, 0x03, 0x0242, 0x0146 },
- { 0x09, 0x09, -1, 0x03, 0x0242, 0x0246 },
- { 0x09, 0x0a, -1, 0x03, 0x0242, 0x0446 },
- { 0x09, 0x18, -1, 0x03, 0x0242, 0x0846 },
- { 0x0a, 0x05, -1, 0x03, 0x0442, 0x0046 },
- { 0x0a, 0x05, -1, 0x03, 0x0442, 0x0066 },
- { 0x0a, 0x06, -1, 0x03, 0x0442, 0x0086 },
- { 0x0a, 0x07, -1, 0x03, 0x0442, 0x00c6 },
- { 0x0a, 0x08, -1, 0x03, 0x0442, 0x0146 },
- { 0x0a, 0x09, -1, 0x03, 0x0442, 0x0246 },
- { 0x0a, 0x0a, -1, 0x03, 0x0442, 0x0446 },
- { 0x0a, 0x18, -1, 0x03, 0x0442, 0x0846 },
- { 0x0c, 0x05, -1, 0x03, 0x0842, 0x0046 },
- { 0x0c, 0x05, -1, 0x03, 0x0842, 0x0066 },
- { 0x0c, 0x06, -1, 0x03, 0x0842, 0x0086 },
- { 0x0c, 0x07, -1, 0x03, 0x0842, 0x00c6 },
- { 0x0c, 0x08, -1, 0x03, 0x0842, 0x0146 },
- { 0x0c, 0x09, -1, 0x03, 0x0842, 0x0246 },
- { 0x0c, 0x0a, -1, 0x03, 0x0842, 0x0446 },
- { 0x0c, 0x18, -1, 0x03, 0x0842, 0x0846 },
- { 0x0e, 0x05, -1, 0x03, 0x1842, 0x0046 },
- { 0x0e, 0x05, -1, 0x03, 0x1842, 0x0066 },
- { 0x0e, 0x06, -1, 0x03, 0x1842, 0x0086 },
- { 0x0e, 0x07, -1, 0x03, 0x1842, 0x00c6 },
- { 0x0e, 0x08, -1, 0x03, 0x1842, 0x0146 },
- { 0x0e, 0x09, -1, 0x03, 0x1842, 0x0246 },
- { 0x0e, 0x0a, -1, 0x03, 0x1842, 0x0446 },
- { 0x0e, 0x18, -1, 0x03, 0x1842, 0x0846 },
- { 0x18, 0x05, -1, 0x03, 0x5842, 0x0046 },
- { 0x18, 0x05, -1, 0x03, 0x5842, 0x0066 },
- { 0x18, 0x06, -1, 0x03, 0x5842, 0x0086 },
- { 0x18, 0x07, -1, 0x03, 0x5842, 0x00c6 },
- { 0x18, 0x08, -1, 0x03, 0x5842, 0x0146 },
- { 0x18, 0x09, -1, 0x03, 0x5842, 0x0246 },
- { 0x18, 0x0a, -1, 0x03, 0x5842, 0x0446 },
- { 0x18, 0x18, -1, 0x03, 0x5842, 0x0846 },
-};
-
-#endif /* BROTLI_DEC_PREFIX_H_ */
diff --git a/BaseTools/Source/C/BrotliCompress/dec/state.h b/BaseTools/Source/C/BrotliCompress/dec/state.h
deleted file mode 100644
index 814f95eee05a..000000000000
--- a/BaseTools/Source/C/BrotliCompress/dec/state.h
+++ /dev/null
@@ -1,258 +0,0 @@
-/* Copyright 2015 Google Inc. All Rights Reserved.
-
- Distributed under MIT license.
- See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
-*/
-
-/* Brotli state for partial streaming decoding. */
-
-#ifndef BROTLI_DEC_STATE_H_
-#define BROTLI_DEC_STATE_H_
-
-#include "../common/constants.h"
-#include "../common/dictionary.h"
-#include "../common/platform.h"
-#include "../common/transform.h"
-#include <brotli/types.h>
-#include "./bit_reader.h"
-#include "./huffman.h"
-
-#if defined(__cplusplus) || defined(c_plusplus)
-extern "C" {
-#endif
-
-typedef enum {
- BROTLI_STATE_UNINITED,
- BROTLI_STATE_LARGE_WINDOW_BITS,
- BROTLI_STATE_INITIALIZE,
- BROTLI_STATE_METABLOCK_BEGIN,
- BROTLI_STATE_METABLOCK_HEADER,
- BROTLI_STATE_METABLOCK_HEADER_2,
- BROTLI_STATE_CONTEXT_MODES,
- BROTLI_STATE_COMMAND_BEGIN,
- BROTLI_STATE_COMMAND_INNER,
- BROTLI_STATE_COMMAND_POST_DECODE_LITERALS,
- BROTLI_STATE_COMMAND_POST_WRAP_COPY,
- BROTLI_STATE_UNCOMPRESSED,
- BROTLI_STATE_METADATA,
- BROTLI_STATE_COMMAND_INNER_WRITE,
- BROTLI_STATE_METABLOCK_DONE,
- BROTLI_STATE_COMMAND_POST_WRITE_1,
- BROTLI_STATE_COMMAND_POST_WRITE_2,
- BROTLI_STATE_HUFFMAN_CODE_0,
- BROTLI_STATE_HUFFMAN_CODE_1,
- BROTLI_STATE_HUFFMAN_CODE_2,
- BROTLI_STATE_HUFFMAN_CODE_3,
- BROTLI_STATE_CONTEXT_MAP_1,
- BROTLI_STATE_CONTEXT_MAP_2,
- BROTLI_STATE_TREE_GROUP,
- BROTLI_STATE_DONE
-} BrotliRunningState;
-
-typedef enum {
- BROTLI_STATE_METABLOCK_HEADER_NONE,
- BROTLI_STATE_METABLOCK_HEADER_EMPTY,
- BROTLI_STATE_METABLOCK_HEADER_NIBBLES,
- BROTLI_STATE_METABLOCK_HEADER_SIZE,
- BROTLI_STATE_METABLOCK_HEADER_UNCOMPRESSED,
- BROTLI_STATE_METABLOCK_HEADER_RESERVED,
- BROTLI_STATE_METABLOCK_HEADER_BYTES,
- BROTLI_STATE_METABLOCK_HEADER_METADATA
-} BrotliRunningMetablockHeaderState;
-
-typedef enum {
- BROTLI_STATE_UNCOMPRESSED_NONE,
- BROTLI_STATE_UNCOMPRESSED_WRITE
-} BrotliRunningUncompressedState;
-
-typedef enum {
- BROTLI_STATE_TREE_GROUP_NONE,
- BROTLI_STATE_TREE_GROUP_LOOP
-} BrotliRunningTreeGroupState;
-
-typedef enum {
- BROTLI_STATE_CONTEXT_MAP_NONE,
- BROTLI_STATE_CONTEXT_MAP_READ_PREFIX,
- BROTLI_STATE_CONTEXT_MAP_HUFFMAN,
- BROTLI_STATE_CONTEXT_MAP_DECODE,
- BROTLI_STATE_CONTEXT_MAP_TRANSFORM
-} BrotliRunningContextMapState;
-
-typedef enum {
- BROTLI_STATE_HUFFMAN_NONE,
- BROTLI_STATE_HUFFMAN_SIMPLE_SIZE,
- BROTLI_STATE_HUFFMAN_SIMPLE_READ,
- BROTLI_STATE_HUFFMAN_SIMPLE_BUILD,
- BROTLI_STATE_HUFFMAN_COMPLEX,
- BROTLI_STATE_HUFFMAN_LENGTH_SYMBOLS
-} BrotliRunningHuffmanState;
-
-typedef enum {
- BROTLI_STATE_DECODE_UINT8_NONE,
- BROTLI_STATE_DECODE_UINT8_SHORT,
- BROTLI_STATE_DECODE_UINT8_LONG
-} BrotliRunningDecodeUint8State;
-
-typedef enum {
- BROTLI_STATE_READ_BLOCK_LENGTH_NONE,
- BROTLI_STATE_READ_BLOCK_LENGTH_SUFFIX
-} BrotliRunningReadBlockLengthState;
-
-struct BrotliDecoderStateStruct {
- BrotliRunningState state;
-
- /* This counter is reused for several disjoint loops. */
- int loop_counter;
-
- BrotliBitReader br;
-
- brotli_alloc_func alloc_func;
- brotli_free_func free_func;
- void* memory_manager_opaque;
-
- /* Temporary storage for remaining input. */
- union {
- uint64_t u64;
- uint8_t u8[8];
- } buffer;
- uint32_t buffer_length;
-
- int pos;
- int max_backward_distance;
- int max_distance;
- int ringbuffer_size;
- int ringbuffer_mask;
- int dist_rb_idx;
- int dist_rb[4];
- int error_code;
- uint32_t sub_loop_counter;
- uint8_t* ringbuffer;
- uint8_t* ringbuffer_end;
- HuffmanCode* htree_command;
- const uint8_t* context_lookup;
- uint8_t* context_map_slice;
- uint8_t* dist_context_map_slice;
-
- /* This ring buffer holds a few past copy distances that will be used by
- some special distance codes. */
- HuffmanTreeGroup literal_hgroup;
- HuffmanTreeGroup insert_copy_hgroup;
- HuffmanTreeGroup distance_hgroup;
- HuffmanCode* block_type_trees;
- HuffmanCode* block_len_trees;
- /* This is true if the literal context map histogram type always matches the
- block type. It is then not needed to keep the context (faster decoding). */
- int trivial_literal_context;
- /* Distance context is actual after command is decoded and before distance is
- computed. After distance computation it is used as a temporary variable. */
- int distance_context;
- int meta_block_remaining_len;
- uint32_t block_length_index;
- uint32_t block_length[3];
- uint32_t num_block_types[3];
- uint32_t block_type_rb[6];
- uint32_t distance_postfix_bits;
- uint32_t num_direct_distance_codes;
- int distance_postfix_mask;
- uint32_t num_dist_htrees;
- uint8_t* dist_context_map;
- HuffmanCode* literal_htree;
- uint8_t dist_htree_index;
- uint32_t repeat_code_len;
- uint32_t prev_code_len;
-
- int copy_length;
- int distance_code;
-
- /* For partial write operations. */
- size_t rb_roundtrips; /* how many times we went around the ring-buffer */
- size_t partial_pos_out; /* how much output to the user in total */
-
- /* For ReadHuffmanCode. */
- uint32_t symbol;
- uint32_t repeat;
- uint32_t space;
-
- HuffmanCode table[32];
- /* List of heads of symbol chains. */
- uint16_t* symbol_lists;
- /* Storage from symbol_lists. */
- uint16_t symbols_lists_array[BROTLI_HUFFMAN_MAX_CODE_LENGTH + 1 +
- BROTLI_NUM_COMMAND_SYMBOLS];
- /* Tails of symbol chains. */
- int next_symbol[32];
- uint8_t code_length_code_lengths[BROTLI_CODE_LENGTH_CODES];
- /* Population counts for the code lengths. */
- uint16_t code_length_histo[16];
-
- /* For HuffmanTreeGroupDecode. */
- int htree_index;
- HuffmanCode* next;
-
- /* For DecodeContextMap. */
- uint32_t context_index;
- uint32_t max_run_length_prefix;
- uint32_t code;
- HuffmanCode context_map_table[BROTLI_HUFFMAN_MAX_SIZE_272];
-
- /* For InverseMoveToFrontTransform. */
- uint32_t mtf_upper_bound;
- uint32_t mtf[64 + 1];
-
- /* Less used attributes are at the end of this struct. */
-
- /* States inside function calls. */
- BrotliRunningMetablockHeaderState substate_metablock_header;
- BrotliRunningTreeGroupState substate_tree_group;
- BrotliRunningContextMapState substate_context_map;
- BrotliRunningUncompressedState substate_uncompressed;
- BrotliRunningHuffmanState substate_huffman;
- BrotliRunningDecodeUint8State substate_decode_uint8;
- BrotliRunningReadBlockLengthState substate_read_block_length;
-
- unsigned int is_last_metablock : 1;
- unsigned int is_uncompressed : 1;
- unsigned int is_metadata : 1;
- unsigned int should_wrap_ringbuffer : 1;
- unsigned int canny_ringbuffer_allocation : 1;
- unsigned int large_window : 1;
- unsigned int size_nibbles : 8;
- uint32_t window_bits;
-
- int new_ringbuffer_size;
-
- uint32_t num_literal_htrees;
- uint8_t* context_map;
- uint8_t* context_modes;
-
- const BrotliDictionary* dictionary;
- const BrotliTransforms* transforms;
-
- uint32_t trivial_literal_contexts[8]; /* 256 bits */
-};
-
-typedef struct BrotliDecoderStateStruct BrotliDecoderStateInternal;
-#define BrotliDecoderState BrotliDecoderStateInternal
-
-BROTLI_INTERNAL BROTLI_BOOL BrotliDecoderStateInit(BrotliDecoderState* s,
- brotli_alloc_func alloc_func, brotli_free_func free_func, void* opaque);
-BROTLI_INTERNAL void BrotliDecoderStateCleanup(BrotliDecoderState* s);
-BROTLI_INTERNAL void BrotliDecoderStateMetablockBegin(BrotliDecoderState* s);
-BROTLI_INTERNAL void BrotliDecoderStateCleanupAfterMetablock(
- BrotliDecoderState* s);
-BROTLI_INTERNAL BROTLI_BOOL BrotliDecoderHuffmanTreeGroupInit(
- BrotliDecoderState* s, HuffmanTreeGroup* group, uint32_t alphabet_size,
- uint32_t max_symbol, uint32_t ntrees);
-
-#define BROTLI_DECODER_ALLOC(S, L) S->alloc_func(S->memory_manager_opaque, L)
-
-#define BROTLI_DECODER_FREE(S, X) { \
- S->free_func(S->memory_manager_opaque, X); \
- X = NULL; \
-}
-
-#if defined(__cplusplus) || defined(c_plusplus)
-} /* extern "C" */
-#endif
-
-#endif /* BROTLI_DEC_STATE_H_ */
diff --git a/BaseTools/Source/C/BrotliCompress/docs/brotli-comparison-study-2015-09-22.pdf b/BaseTools/Source/C/BrotliCompress/docs/brotli-comparison-study-2015-09-22.pdf
deleted file mode 100644
index 040f179e2bce8f5f7a2f407b2d61ab86824bbe8e..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 215208
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%0A(Nmlrom%n++A{@ubAd
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
diff --git a/BaseTools/Source/C/BrotliCompress/enc/backward_references.h b/BaseTools/Source/C/BrotliCompress/enc/backward_references.h
deleted file mode 100644
index fcef6bd92953..000000000000
--- a/BaseTools/Source/C/BrotliCompress/enc/backward_references.h
+++ /dev/null
@@ -1,38 +0,0 @@
-/* Copyright 2013 Google Inc. All Rights Reserved.
-
- Distributed under MIT license.
- See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
-*/
-
-/* Function to find backward reference copies. */
-
-#ifndef BROTLI_ENC_BACKWARD_REFERENCES_H_
-#define BROTLI_ENC_BACKWARD_REFERENCES_H_
-
-#include "../common/constants.h"
-#include "../common/dictionary.h"
-#include "../common/platform.h"
-#include <brotli/types.h>
-#include "./command.h"
-#include "./hash.h"
-#include "./quality.h"
-
-#if defined(__cplusplus) || defined(c_plusplus)
-extern "C" {
-#endif
-
-/* "commands" points to the next output command to write to, "*num_commands" is
- initially the total amount of commands output by previous
- CreateBackwardReferences calls, and must be incremented by the amount written
- by this call. */
-BROTLI_INTERNAL void BrotliCreateBackwardReferences(
- size_t num_bytes, size_t position, const uint8_t* ringbuffer,
- size_t ringbuffer_mask, const BrotliEncoderParams* params,
- HasherHandle hasher, int* dist_cache, size_t* last_insert_len,
- Command* commands, size_t* num_commands, size_t* num_literals);
-
-#if defined(__cplusplus) || defined(c_plusplus)
-} /* extern "C" */
-#endif
-
-#endif /* BROTLI_ENC_BACKWARD_REFERENCES_H_ */
diff --git a/BaseTools/Source/C/BrotliCompress/enc/backward_references_hq.h b/BaseTools/Source/C/BrotliCompress/enc/backward_references_hq.h
deleted file mode 100644
index 60b3b346b778..000000000000
--- a/BaseTools/Source/C/BrotliCompress/enc/backward_references_hq.h
+++ /dev/null
@@ -1,93 +0,0 @@
-/* Copyright 2013 Google Inc. All Rights Reserved.
-
- Distributed under MIT license.
- See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
-*/
-
-/* Function to find backward reference copies. */
-
-#ifndef BROTLI_ENC_BACKWARD_REFERENCES_HQ_H_
-#define BROTLI_ENC_BACKWARD_REFERENCES_HQ_H_
-
-#include "../common/constants.h"
-#include "../common/dictionary.h"
-#include "../common/platform.h"
-#include <brotli/types.h>
-#include "./command.h"
-#include "./hash.h"
-#include "./memory.h"
-#include "./quality.h"
-
-#if defined(__cplusplus) || defined(c_plusplus)
-extern "C" {
-#endif
-
-BROTLI_INTERNAL void BrotliCreateZopfliBackwardReferences(MemoryManager* m,
- size_t num_bytes, size_t position, const uint8_t* ringbuffer,
- size_t ringbuffer_mask, const BrotliEncoderParams* params,
- HasherHandle hasher, int* dist_cache, size_t* last_insert_len,
- Command* commands, size_t* num_commands, size_t* num_literals);
-
-BROTLI_INTERNAL void BrotliCreateHqZopfliBackwardReferences(MemoryManager* m,
- size_t num_bytes, size_t position, const uint8_t* ringbuffer,
- size_t ringbuffer_mask, const BrotliEncoderParams* params,
- HasherHandle hasher, int* dist_cache, size_t* last_insert_len,
- Command* commands, size_t* num_commands, size_t* num_literals);
-
-typedef struct ZopfliNode {
- /* Best length to get up to this byte (not including this byte itself)
- highest 7 bit is used to reconstruct the length code. */
- uint32_t length;
- /* Distance associated with the length. */
- uint32_t distance;
- /* Number of literal inserts before this copy; highest 5 bits contain
- distance short code + 1 (or zero if no short code). */
- uint32_t dcode_insert_length;
-
- /* This union holds information used by dynamic-programming. During forward
- pass |cost| it used to store the goal function. When node is processed its
- |cost| is invalidated in favor of |shortcut|. On path back-tracing pass
- |next| is assigned the offset to next node on the path. */
- union {
- /* Smallest cost to get to this byte from the beginning, as found so far. */
- float cost;
- /* Offset to the next node on the path. Equals to command_length() of the
- next node on the path. For last node equals to BROTLI_UINT32_MAX */
- uint32_t next;
- /* Node position that provides next distance for distance cache. */
- uint32_t shortcut;
- } u;
-} ZopfliNode;
-
-BROTLI_INTERNAL void BrotliInitZopfliNodes(ZopfliNode* array, size_t length);
-
-/* Computes the shortest path of commands from position to at most
- position + num_bytes.
-
- On return, path->size() is the number of commands found and path[i] is the
- length of the i-th command (copy length plus insert length).
- Note that the sum of the lengths of all commands can be less than num_bytes.
-
- On return, the nodes[0..num_bytes] array will have the following
- "ZopfliNode array invariant":
- For each i in [1..num_bytes], if nodes[i].cost < kInfinity, then
- (1) nodes[i].copy_length() >= 2
- (2) nodes[i].command_length() <= i and
- (3) nodes[i - nodes[i].command_length()].cost < kInfinity */
-BROTLI_INTERNAL size_t BrotliZopfliComputeShortestPath(MemoryManager* m,
- size_t num_bytes, size_t position, const uint8_t* ringbuffer,
- size_t ringbuffer_mask, const BrotliEncoderParams* params,
- const size_t max_backward_limit, const int* dist_cache, HasherHandle hasher,
- ZopfliNode* nodes);
-
-BROTLI_INTERNAL void BrotliZopfliCreateCommands(
- const size_t num_bytes, const size_t block_start,
- const size_t max_backward_limit, const ZopfliNode* nodes,
- int* dist_cache, size_t* last_insert_len, const BrotliEncoderParams* params,
- Command* commands, size_t* num_literals);
-
-#if defined(__cplusplus) || defined(c_plusplus)
-} /* extern "C" */
-#endif
-
-#endif /* BROTLI_ENC_BACKWARD_REFERENCES_HQ_H_ */
diff --git a/BaseTools/Source/C/BrotliCompress/enc/backward_references_inc.h b/BaseTools/Source/C/BrotliCompress/enc/backward_references_inc.h
deleted file mode 100644
index 39c6f823f8bd..000000000000
--- a/BaseTools/Source/C/BrotliCompress/enc/backward_references_inc.h
+++ /dev/null
@@ -1,153 +0,0 @@
-/* NOLINT(build/header_guard) */
-/* Copyright 2013 Google Inc. All Rights Reserved.
-
- Distributed under MIT license.
- See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
-*/
-
-/* template parameters: EXPORT_FN, FN */
-
-static BROTLI_NOINLINE void EXPORT_FN(CreateBackwardReferences)(
- size_t num_bytes, size_t position,
- const uint8_t* ringbuffer, size_t ringbuffer_mask,
- const BrotliEncoderParams* params, HasherHandle hasher, int* dist_cache,
- size_t* last_insert_len, Command* commands, size_t* num_commands,
- size_t* num_literals) {
- /* Set maximum distance, see section 9.1. of the spec. */
- const size_t max_backward_limit = BROTLI_MAX_BACKWARD_LIMIT(params->lgwin);
-
- const Command* const orig_commands = commands;
- size_t insert_length = *last_insert_len;
- const size_t pos_end = position + num_bytes;
- const size_t store_end = num_bytes >= FN(StoreLookahead)() ?
- position + num_bytes - FN(StoreLookahead)() + 1 : position;
-
- /* For speed up heuristics for random data. */
- const size_t random_heuristics_window_size =
- LiteralSpreeLengthForSparseSearch(params);
- size_t apply_random_heuristics = position + random_heuristics_window_size;
- const size_t gap = 0;
-
- /* Minimum score to accept a backward reference. */
- const score_t kMinScore = BROTLI_SCORE_BASE + 100;
-
- FN(PrepareDistanceCache)(hasher, dist_cache);
-
- while (position + FN(HashTypeLength)() < pos_end) {
- size_t max_length = pos_end - position;
- size_t max_distance = BROTLI_MIN(size_t, position, max_backward_limit);
- HasherSearchResult sr;
- sr.len = 0;
- sr.len_code_delta = 0;
- sr.distance = 0;
- sr.score = kMinScore;
- FN(FindLongestMatch)(hasher, ¶ms->dictionary,
- ringbuffer, ringbuffer_mask, dist_cache, position,
- max_length, max_distance, gap,
- params->dist.max_distance, &sr);
- if (sr.score > kMinScore) {
- /* Found a match. Let's look for something even better ahead. */
- int delayed_backward_references_in_row = 0;
- --max_length;
- for (;; --max_length) {
- const score_t cost_diff_lazy = 175;
- HasherSearchResult sr2;
- sr2.len = params->quality < MIN_QUALITY_FOR_EXTENSIVE_REFERENCE_SEARCH ?
- BROTLI_MIN(size_t, sr.len - 1, max_length) : 0;
- sr2.len_code_delta = 0;
- sr2.distance = 0;
- sr2.score = kMinScore;
- max_distance = BROTLI_MIN(size_t, position + 1, max_backward_limit);
- FN(FindLongestMatch)(hasher, ¶ms->dictionary,
- ringbuffer, ringbuffer_mask, dist_cache, position + 1, max_length,
- max_distance, gap, params->dist.max_distance, &sr2);
- if (sr2.score >= sr.score + cost_diff_lazy) {
- /* Ok, let's just write one byte for now and start a match from the
- next byte. */
- ++position;
- ++insert_length;
- sr = sr2;
- if (++delayed_backward_references_in_row < 4 &&
- position + FN(HashTypeLength)() < pos_end) {
- continue;
- }
- }
- break;
- }
- apply_random_heuristics =
- position + 2 * sr.len + random_heuristics_window_size;
- max_distance = BROTLI_MIN(size_t, position, max_backward_limit);
- {
- /* The first 16 codes are special short-codes,
- and the minimum offset is 1. */
- size_t distance_code =
- ComputeDistanceCode(sr.distance, max_distance + gap, dist_cache);
- if ((sr.distance <= (max_distance + gap)) && distance_code > 0) {
- dist_cache[3] = dist_cache[2];
- dist_cache[2] = dist_cache[1];
- dist_cache[1] = dist_cache[0];
- dist_cache[0] = (int)sr.distance;
- FN(PrepareDistanceCache)(hasher, dist_cache);
- }
- InitCommand(commands++, ¶ms->dist, insert_length,
- sr.len, sr.len_code_delta, distance_code);
- }
- *num_literals += insert_length;
- insert_length = 0;
- /* Put the hash keys into the table, if there are enough bytes left.
- Depending on the hasher implementation, it can push all positions
- in the given range or only a subset of them.
- Avoid hash poisoning with RLE data. */
- {
- size_t range_start = position + 2;
- size_t range_end = BROTLI_MIN(size_t, position + sr.len, store_end);
- if (sr.distance < (sr.len >> 2)) {
- range_start = BROTLI_MIN(size_t, range_end, BROTLI_MAX(size_t,
- range_start, position + sr.len - (sr.distance << 2)));
- }
- FN(StoreRange)(hasher, ringbuffer, ringbuffer_mask, range_start,
- range_end);
- }
- position += sr.len;
- } else {
- ++insert_length;
- ++position;
- /* If we have not seen matches for a long time, we can skip some
- match lookups. Unsuccessful match lookups are very very expensive
- and this kind of a heuristic speeds up compression quite
- a lot. */
- if (position > apply_random_heuristics) {
- /* Going through uncompressible data, jump. */
- if (position >
- apply_random_heuristics + 4 * random_heuristics_window_size) {
- /* It is quite a long time since we saw a copy, so we assume
- that this data is not compressible, and store hashes less
- often. Hashes of non compressible data are less likely to
- turn out to be useful in the future, too, so we store less of
- them to not to flood out the hash table of good compressible
- data. */
- const size_t kMargin =
- BROTLI_MAX(size_t, FN(StoreLookahead)() - 1, 4);
- size_t pos_jump =
- BROTLI_MIN(size_t, position + 16, pos_end - kMargin);
- for (; position < pos_jump; position += 4) {
- FN(Store)(hasher, ringbuffer, ringbuffer_mask, position);
- insert_length += 4;
- }
- } else {
- const size_t kMargin =
- BROTLI_MAX(size_t, FN(StoreLookahead)() - 1, 2);
- size_t pos_jump =
- BROTLI_MIN(size_t, position + 8, pos_end - kMargin);
- for (; position < pos_jump; position += 2) {
- FN(Store)(hasher, ringbuffer, ringbuffer_mask, position);
- insert_length += 2;
- }
- }
- }
- }
- }
- insert_length += pos_end - position;
- *last_insert_len = insert_length;
- *num_commands += (size_t)(commands - orig_commands);
-}
diff --git a/BaseTools/Source/C/BrotliCompress/enc/bit_cost.h b/BaseTools/Source/C/BrotliCompress/enc/bit_cost.h
deleted file mode 100644
index e7ab2eafe459..000000000000
--- a/BaseTools/Source/C/BrotliCompress/enc/bit_cost.h
+++ /dev/null
@@ -1,63 +0,0 @@
-/* Copyright 2013 Google Inc. All Rights Reserved.
-
- Distributed under MIT license.
- See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
-*/
-
-/* Functions to estimate the bit cost of Huffman trees. */
-
-#ifndef BROTLI_ENC_BIT_COST_H_
-#define BROTLI_ENC_BIT_COST_H_
-
-#include "../common/platform.h"
-#include <brotli/types.h>
-#include "./fast_log.h"
-#include "./histogram.h"
-
-#if defined(__cplusplus) || defined(c_plusplus)
-extern "C" {
-#endif
-
-static BROTLI_INLINE double ShannonEntropy(
- const uint32_t* population, size_t size, size_t* total) {
- size_t sum = 0;
- double retval = 0;
- const uint32_t* population_end = population + size;
- size_t p;
- if (size & 1) {
- goto odd_number_of_elements_left;
- }
- while (population < population_end) {
- p = *population++;
- sum += p;
- retval -= (double)p * FastLog2(p);
- odd_number_of_elements_left:
- p = *population++;
- sum += p;
- retval -= (double)p * FastLog2(p);
- }
- if (sum) retval += (double)sum * FastLog2(sum);
- *total = sum;
- return retval;
-}
-
-static BROTLI_INLINE double BitsEntropy(
- const uint32_t* population, size_t size) {
- size_t sum;
- double retval = ShannonEntropy(population, size, &sum);
- if (retval < sum) {
- /* At least one bit per literal is needed. */
- retval = (double)sum;
- }
- return retval;
-}
-
-BROTLI_INTERNAL double BrotliPopulationCostLiteral(const HistogramLiteral*);
-BROTLI_INTERNAL double BrotliPopulationCostCommand(const HistogramCommand*);
-BROTLI_INTERNAL double BrotliPopulationCostDistance(const HistogramDistance*);
-
-#if defined(__cplusplus) || defined(c_plusplus)
-} /* extern "C" */
-#endif
-
-#endif /* BROTLI_ENC_BIT_COST_H_ */
diff --git a/BaseTools/Source/C/BrotliCompress/enc/bit_cost_inc.h b/BaseTools/Source/C/BrotliCompress/enc/bit_cost_inc.h
deleted file mode 100644
index c96bddac0962..000000000000
--- a/BaseTools/Source/C/BrotliCompress/enc/bit_cost_inc.h
+++ /dev/null
@@ -1,127 +0,0 @@
-/* NOLINT(build/header_guard) */
-/* Copyright 2013 Google Inc. All Rights Reserved.
-
- Distributed under MIT license.
- See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
-*/
-
-/* template parameters: FN */
-
-#define HistogramType FN(Histogram)
-
-double FN(BrotliPopulationCost)(const HistogramType* histogram) {
- static const double kOneSymbolHistogramCost = 12;
- static const double kTwoSymbolHistogramCost = 20;
- static const double kThreeSymbolHistogramCost = 28;
- static const double kFourSymbolHistogramCost = 37;
- const size_t data_size = FN(HistogramDataSize)();
- int count = 0;
- size_t s[5];
- double bits = 0.0;
- size_t i;
- if (histogram->total_count_ == 0) {
- return kOneSymbolHistogramCost;
- }
- for (i = 0; i < data_size; ++i) {
- if (histogram->data_[i] > 0) {
- s[count] = i;
- ++count;
- if (count > 4) break;
- }
- }
- if (count == 1) {
- return kOneSymbolHistogramCost;
- }
- if (count == 2) {
- return (kTwoSymbolHistogramCost + (double)histogram->total_count_);
- }
- if (count == 3) {
- const uint32_t histo0 = histogram->data_[s[0]];
- const uint32_t histo1 = histogram->data_[s[1]];
- const uint32_t histo2 = histogram->data_[s[2]];
- const uint32_t histomax =
- BROTLI_MAX(uint32_t, histo0, BROTLI_MAX(uint32_t, histo1, histo2));
- return (kThreeSymbolHistogramCost +
- 2 * (histo0 + histo1 + histo2) - histomax);
- }
- if (count == 4) {
- uint32_t histo[4];
- uint32_t h23;
- uint32_t histomax;
- for (i = 0; i < 4; ++i) {
- histo[i] = histogram->data_[s[i]];
- }
- /* Sort */
- for (i = 0; i < 4; ++i) {
- size_t j;
- for (j = i + 1; j < 4; ++j) {
- if (histo[j] > histo[i]) {
- BROTLI_SWAP(uint32_t, histo, j, i);
- }
- }
- }
- h23 = histo[2] + histo[3];
- histomax = BROTLI_MAX(uint32_t, h23, histo[0]);
- return (kFourSymbolHistogramCost +
- 3 * h23 + 2 * (histo[0] + histo[1]) - histomax);
- }
-
- {
- /* In this loop we compute the entropy of the histogram and simultaneously
- build a simplified histogram of the code length codes where we use the
- zero repeat code 17, but we don't use the non-zero repeat code 16. */
- size_t max_depth = 1;
- uint32_t depth_histo[BROTLI_CODE_LENGTH_CODES] = { 0 };
- const double log2total = FastLog2(histogram->total_count_);
- for (i = 0; i < data_size;) {
- if (histogram->data_[i] > 0) {
- /* Compute -log2(P(symbol)) = -log2(count(symbol)/total_count) =
- = log2(total_count) - log2(count(symbol)) */
- double log2p = log2total - FastLog2(histogram->data_[i]);
- /* Approximate the bit depth by round(-log2(P(symbol))) */
- size_t depth = (size_t)(log2p + 0.5);
- bits += histogram->data_[i] * log2p;
- if (depth > 15) {
- depth = 15;
- }
- if (depth > max_depth) {
- max_depth = depth;
- }
- ++depth_histo[depth];
- ++i;
- } else {
- /* Compute the run length of zeros and add the appropriate number of 0
- and 17 code length codes to the code length code histogram. */
- uint32_t reps = 1;
- size_t k;
- for (k = i + 1; k < data_size && histogram->data_[k] == 0; ++k) {
- ++reps;
- }
- i += reps;
- if (i == data_size) {
- /* Don't add any cost for the last zero run, since these are encoded
- only implicitly. */
- break;
- }
- if (reps < 3) {
- depth_histo[0] += reps;
- } else {
- reps -= 2;
- while (reps > 0) {
- ++depth_histo[BROTLI_REPEAT_ZERO_CODE_LENGTH];
- /* Add the 3 extra bits for the 17 code length code. */
- bits += 3;
- reps >>= 3;
- }
- }
- }
- }
- /* Add the estimated encoding cost of the code length code histogram. */
- bits += (double)(18 + 2 * max_depth);
- /* Add the entropy of the code length code histogram. */
- bits += BitsEntropy(depth_histo, BROTLI_CODE_LENGTH_CODES);
- }
- return bits;
-}
-
-#undef HistogramType
diff --git a/BaseTools/Source/C/BrotliCompress/enc/block_encoder_inc.h b/BaseTools/Source/C/BrotliCompress/enc/block_encoder_inc.h
deleted file mode 100644
index ce7fd20cb3f4..000000000000
--- a/BaseTools/Source/C/BrotliCompress/enc/block_encoder_inc.h
+++ /dev/null
@@ -1,34 +0,0 @@
-/* NOLINT(build/header_guard) */
-/* Copyright 2014 Google Inc. All Rights Reserved.
-
- Distributed under MIT license.
- See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
-*/
-
-/* template parameters: FN */
-
-#define HistogramType FN(Histogram)
-
-/* Creates entropy codes for all block types and stores them to the bit
- stream. */
-static void FN(BuildAndStoreEntropyCodes)(MemoryManager* m, BlockEncoder* self,
- const HistogramType* histograms, const size_t histograms_size,
- const size_t alphabet_size, HuffmanTree* tree,
- size_t* storage_ix, uint8_t* storage) {
- const size_t table_size = histograms_size * self->histogram_length_;
- self->depths_ = BROTLI_ALLOC(m, uint8_t, table_size);
- self->bits_ = BROTLI_ALLOC(m, uint16_t, table_size);
- if (BROTLI_IS_OOM(m)) return;
-
- {
- size_t i;
- for (i = 0; i < histograms_size; ++i) {
- size_t ix = i * self->histogram_length_;
- BuildAndStoreHuffmanTree(&histograms[i].data_[0], self->histogram_length_,
- alphabet_size, tree, &self->depths_[ix], &self->bits_[ix],
- storage_ix, storage);
- }
- }
-}
-
-#undef HistogramType
diff --git a/BaseTools/Source/C/BrotliCompress/enc/block_splitter.h b/BaseTools/Source/C/BrotliCompress/enc/block_splitter.h
deleted file mode 100644
index aa6ebedc2cb8..000000000000
--- a/BaseTools/Source/C/BrotliCompress/enc/block_splitter.h
+++ /dev/null
@@ -1,51 +0,0 @@
-/* Copyright 2013 Google Inc. All Rights Reserved.
-
- Distributed under MIT license.
- See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
-*/
-
-/* Block split point selection utilities. */
-
-#ifndef BROTLI_ENC_BLOCK_SPLITTER_H_
-#define BROTLI_ENC_BLOCK_SPLITTER_H_
-
-#include "../common/platform.h"
-#include <brotli/types.h>
-#include "./command.h"
-#include "./memory.h"
-#include "./quality.h"
-
-#if defined(__cplusplus) || defined(c_plusplus)
-extern "C" {
-#endif
-
-typedef struct BlockSplit {
- size_t num_types; /* Amount of distinct types */
- size_t num_blocks; /* Amount of values in types and length */
- uint8_t* types;
- uint32_t* lengths;
-
- size_t types_alloc_size;
- size_t lengths_alloc_size;
-} BlockSplit;
-
-BROTLI_INTERNAL void BrotliInitBlockSplit(BlockSplit* self);
-BROTLI_INTERNAL void BrotliDestroyBlockSplit(MemoryManager* m,
- BlockSplit* self);
-
-BROTLI_INTERNAL void BrotliSplitBlock(MemoryManager* m,
- const Command* cmds,
- const size_t num_commands,
- const uint8_t* data,
- const size_t offset,
- const size_t mask,
- const BrotliEncoderParams* params,
- BlockSplit* literal_split,
- BlockSplit* insert_and_copy_split,
- BlockSplit* dist_split);
-
-#if defined(__cplusplus) || defined(c_plusplus)
-} /* extern "C" */
-#endif
-
-#endif /* BROTLI_ENC_BLOCK_SPLITTER_H_ */
diff --git a/BaseTools/Source/C/BrotliCompress/enc/block_splitter_inc.h b/BaseTools/Source/C/BrotliCompress/enc/block_splitter_inc.h
deleted file mode 100644
index 63c7ccf12975..000000000000
--- a/BaseTools/Source/C/BrotliCompress/enc/block_splitter_inc.h
+++ /dev/null
@@ -1,431 +0,0 @@
-/* NOLINT(build/header_guard) */
-/* Copyright 2013 Google Inc. All Rights Reserved.
-
- Distributed under MIT license.
- See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
-*/
-
-/* template parameters: FN, DataType */
-
-#define HistogramType FN(Histogram)
-
-static void FN(InitialEntropyCodes)(const DataType* data, size_t length,
- size_t stride,
- size_t num_histograms,
- HistogramType* histograms) {
- uint32_t seed = 7;
- size_t block_length = length / num_histograms;
- size_t i;
- FN(ClearHistograms)(histograms, num_histograms);
- for (i = 0; i < num_histograms; ++i) {
- size_t pos = length * i / num_histograms;
- if (i != 0) {
- pos += MyRand(&seed) % block_length;
- }
- if (pos + stride >= length) {
- pos = length - stride - 1;
- }
- FN(HistogramAddVector)(&histograms[i], data + pos, stride);
- }
-}
-
-static void FN(RandomSample)(uint32_t* seed,
- const DataType* data,
- size_t length,
- size_t stride,
- HistogramType* sample) {
- size_t pos = 0;
- if (stride >= length) {
- stride = length;
- } else {
- pos = MyRand(seed) % (length - stride + 1);
- }
- FN(HistogramAddVector)(sample, data + pos, stride);
-}
-
-static void FN(RefineEntropyCodes)(const DataType* data, size_t length,
- size_t stride,
- size_t num_histograms,
- HistogramType* histograms) {
- size_t iters =
- kIterMulForRefining * length / stride + kMinItersForRefining;
- uint32_t seed = 7;
- size_t iter;
- iters = ((iters + num_histograms - 1) / num_histograms) * num_histograms;
- for (iter = 0; iter < iters; ++iter) {
- HistogramType sample;
- FN(HistogramClear)(&sample);
- FN(RandomSample)(&seed, data, length, stride, &sample);
- FN(HistogramAddHistogram)(&histograms[iter % num_histograms], &sample);
- }
-}
-
-/* Assigns a block id from the range [0, num_histograms) to each data element
- in data[0..length) and fills in block_id[0..length) with the assigned values.
- Returns the number of blocks, i.e. one plus the number of block switches. */
-static size_t FN(FindBlocks)(const DataType* data, const size_t length,
- const double block_switch_bitcost,
- const size_t num_histograms,
- const HistogramType* histograms,
- double* insert_cost,
- double* cost,
- uint8_t* switch_signal,
- uint8_t* block_id) {
- const size_t data_size = FN(HistogramDataSize)();
- const size_t bitmaplen = (num_histograms + 7) >> 3;
- size_t num_blocks = 1;
- size_t i;
- size_t j;
- BROTLI_DCHECK(num_histograms <= 256);
- if (num_histograms <= 1) {
- for (i = 0; i < length; ++i) {
- block_id[i] = 0;
- }
- return 1;
- }
- memset(insert_cost, 0, sizeof(insert_cost[0]) * data_size * num_histograms);
- for (i = 0; i < num_histograms; ++i) {
- insert_cost[i] = FastLog2((uint32_t)histograms[i].total_count_);
- }
- for (i = data_size; i != 0;) {
- --i;
- for (j = 0; j < num_histograms; ++j) {
- insert_cost[i * num_histograms + j] =
- insert_cost[j] - BitCost(histograms[j].data_[i]);
- }
- }
- memset(cost, 0, sizeof(cost[0]) * num_histograms);
- memset(switch_signal, 0, sizeof(switch_signal[0]) * length * bitmaplen);
- /* After each iteration of this loop, cost[k] will contain the difference
- between the minimum cost of arriving at the current byte position using
- entropy code k, and the minimum cost of arriving at the current byte
- position. This difference is capped at the block switch cost, and if it
- reaches block switch cost, it means that when we trace back from the last
- position, we need to switch here. */
- for (i = 0; i < length; ++i) {
- const size_t byte_ix = i;
- size_t ix = byte_ix * bitmaplen;
- size_t insert_cost_ix = data[byte_ix] * num_histograms;
- double min_cost = 1e99;
- double block_switch_cost = block_switch_bitcost;
- size_t k;
- for (k = 0; k < num_histograms; ++k) {
- /* We are coding the symbol in data[byte_ix] with entropy code k. */
- cost[k] += insert_cost[insert_cost_ix + k];
- if (cost[k] < min_cost) {
- min_cost = cost[k];
- block_id[byte_ix] = (uint8_t)k;
- }
- }
- /* More blocks for the beginning. */
- if (byte_ix < 2000) {
- block_switch_cost *= 0.77 + 0.07 * (double)byte_ix / 2000;
- }
- for (k = 0; k < num_histograms; ++k) {
- cost[k] -= min_cost;
- if (cost[k] >= block_switch_cost) {
- const uint8_t mask = (uint8_t)(1u << (k & 7));
- cost[k] = block_switch_cost;
- BROTLI_DCHECK((k >> 3) < bitmaplen);
- switch_signal[ix + (k >> 3)] |= mask;
- }
- }
- }
- { /* Trace back from the last position and switch at the marked places. */
- size_t byte_ix = length - 1;
- size_t ix = byte_ix * bitmaplen;
- uint8_t cur_id = block_id[byte_ix];
- while (byte_ix > 0) {
- const uint8_t mask = (uint8_t)(1u << (cur_id & 7));
- BROTLI_DCHECK(((size_t)cur_id >> 3) < bitmaplen);
- --byte_ix;
- ix -= bitmaplen;
- if (switch_signal[ix + (cur_id >> 3)] & mask) {
- if (cur_id != block_id[byte_ix]) {
- cur_id = block_id[byte_ix];
- ++num_blocks;
- }
- }
- block_id[byte_ix] = cur_id;
- }
- }
- return num_blocks;
-}
-
-static size_t FN(RemapBlockIds)(uint8_t* block_ids, const size_t length,
- uint16_t* new_id, const size_t num_histograms) {
- static const uint16_t kInvalidId = 256;
- uint16_t next_id = 0;
- size_t i;
- for (i = 0; i < num_histograms; ++i) {
- new_id[i] = kInvalidId;
- }
- for (i = 0; i < length; ++i) {
- BROTLI_DCHECK(block_ids[i] < num_histograms);
- if (new_id[block_ids[i]] == kInvalidId) {
- new_id[block_ids[i]] = next_id++;
- }
- }
- for (i = 0; i < length; ++i) {
- block_ids[i] = (uint8_t)new_id[block_ids[i]];
- BROTLI_DCHECK(block_ids[i] < num_histograms);
- }
- BROTLI_DCHECK(next_id <= num_histograms);
- return next_id;
-}
-
-static void FN(BuildBlockHistograms)(const DataType* data, const size_t length,
- const uint8_t* block_ids,
- const size_t num_histograms,
- HistogramType* histograms) {
- size_t i;
- FN(ClearHistograms)(histograms, num_histograms);
- for (i = 0; i < length; ++i) {
- FN(HistogramAdd)(&histograms[block_ids[i]], data[i]);
- }
-}
-
-static void FN(ClusterBlocks)(MemoryManager* m,
- const DataType* data, const size_t length,
- const size_t num_blocks,
- uint8_t* block_ids,
- BlockSplit* split) {
- uint32_t* histogram_symbols = BROTLI_ALLOC(m, uint32_t, num_blocks);
- uint32_t* block_lengths = BROTLI_ALLOC(m, uint32_t, num_blocks);
- const size_t expected_num_clusters = CLUSTERS_PER_BATCH *
- (num_blocks + HISTOGRAMS_PER_BATCH - 1) / HISTOGRAMS_PER_BATCH;
- size_t all_histograms_size = 0;
- size_t all_histograms_capacity = expected_num_clusters;
- HistogramType* all_histograms =
- BROTLI_ALLOC(m, HistogramType, all_histograms_capacity);
- size_t cluster_size_size = 0;
- size_t cluster_size_capacity = expected_num_clusters;
- uint32_t* cluster_size = BROTLI_ALLOC(m, uint32_t, cluster_size_capacity);
- size_t num_clusters = 0;
- HistogramType* histograms = BROTLI_ALLOC(m, HistogramType,
- BROTLI_MIN(size_t, num_blocks, HISTOGRAMS_PER_BATCH));
- size_t max_num_pairs =
- HISTOGRAMS_PER_BATCH * HISTOGRAMS_PER_BATCH / 2;
- size_t pairs_capacity = max_num_pairs + 1;
- HistogramPair* pairs = BROTLI_ALLOC(m, HistogramPair, pairs_capacity);
- size_t pos = 0;
- uint32_t* clusters;
- size_t num_final_clusters;
- static const uint32_t kInvalidIndex = BROTLI_UINT32_MAX;
- uint32_t* new_index;
- size_t i;
- uint32_t sizes[HISTOGRAMS_PER_BATCH] = { 0 };
- uint32_t new_clusters[HISTOGRAMS_PER_BATCH] = { 0 };
- uint32_t symbols[HISTOGRAMS_PER_BATCH] = { 0 };
- uint32_t remap[HISTOGRAMS_PER_BATCH] = { 0 };
-
- if (BROTLI_IS_OOM(m)) return;
-
- memset(block_lengths, 0, num_blocks * sizeof(uint32_t));
-
- {
- size_t block_idx = 0;
- for (i = 0; i < length; ++i) {
- BROTLI_DCHECK(block_idx < num_blocks);
- ++block_lengths[block_idx];
- if (i + 1 == length || block_ids[i] != block_ids[i + 1]) {
- ++block_idx;
- }
- }
- BROTLI_DCHECK(block_idx == num_blocks);
- }
-
- for (i = 0; i < num_blocks; i += HISTOGRAMS_PER_BATCH) {
- const size_t num_to_combine =
- BROTLI_MIN(size_t, num_blocks - i, HISTOGRAMS_PER_BATCH);
- size_t num_new_clusters;
- size_t j;
- for (j = 0; j < num_to_combine; ++j) {
- size_t k;
- FN(HistogramClear)(&histograms[j]);
- for (k = 0; k < block_lengths[i + j]; ++k) {
- FN(HistogramAdd)(&histograms[j], data[pos++]);
- }
- histograms[j].bit_cost_ = FN(BrotliPopulationCost)(&histograms[j]);
- new_clusters[j] = (uint32_t)j;
- symbols[j] = (uint32_t)j;
- sizes[j] = 1;
- }
- num_new_clusters = FN(BrotliHistogramCombine)(
- histograms, sizes, symbols, new_clusters, pairs, num_to_combine,
- num_to_combine, HISTOGRAMS_PER_BATCH, max_num_pairs);
- BROTLI_ENSURE_CAPACITY(m, HistogramType, all_histograms,
- all_histograms_capacity, all_histograms_size + num_new_clusters);
- BROTLI_ENSURE_CAPACITY(m, uint32_t, cluster_size,
- cluster_size_capacity, cluster_size_size + num_new_clusters);
- if (BROTLI_IS_OOM(m)) return;
- for (j = 0; j < num_new_clusters; ++j) {
- all_histograms[all_histograms_size++] = histograms[new_clusters[j]];
- cluster_size[cluster_size_size++] = sizes[new_clusters[j]];
- remap[new_clusters[j]] = (uint32_t)j;
- }
- for (j = 0; j < num_to_combine; ++j) {
- histogram_symbols[i + j] = (uint32_t)num_clusters + remap[symbols[j]];
- }
- num_clusters += num_new_clusters;
- BROTLI_DCHECK(num_clusters == cluster_size_size);
- BROTLI_DCHECK(num_clusters == all_histograms_size);
- }
- BROTLI_FREE(m, histograms);
-
- max_num_pairs =
- BROTLI_MIN(size_t, 64 * num_clusters, (num_clusters / 2) * num_clusters);
- if (pairs_capacity < max_num_pairs + 1) {
- BROTLI_FREE(m, pairs);
- pairs = BROTLI_ALLOC(m, HistogramPair, max_num_pairs + 1);
- if (BROTLI_IS_OOM(m)) return;
- }
-
- clusters = BROTLI_ALLOC(m, uint32_t, num_clusters);
- if (BROTLI_IS_OOM(m)) return;
- for (i = 0; i < num_clusters; ++i) {
- clusters[i] = (uint32_t)i;
- }
- num_final_clusters = FN(BrotliHistogramCombine)(
- all_histograms, cluster_size, histogram_symbols, clusters, pairs,
- num_clusters, num_blocks, BROTLI_MAX_NUMBER_OF_BLOCK_TYPES,
- max_num_pairs);
- BROTLI_FREE(m, pairs);
- BROTLI_FREE(m, cluster_size);
-
- new_index = BROTLI_ALLOC(m, uint32_t, num_clusters);
- if (BROTLI_IS_OOM(m)) return;
- for (i = 0; i < num_clusters; ++i) new_index[i] = kInvalidIndex;
- pos = 0;
- {
- uint32_t next_index = 0;
- for (i = 0; i < num_blocks; ++i) {
- HistogramType histo;
- size_t j;
- uint32_t best_out;
- double best_bits;
- FN(HistogramClear)(&histo);
- for (j = 0; j < block_lengths[i]; ++j) {
- FN(HistogramAdd)(&histo, data[pos++]);
- }
- best_out = (i == 0) ? histogram_symbols[0] : histogram_symbols[i - 1];
- best_bits =
- FN(BrotliHistogramBitCostDistance)(&histo, &all_histograms[best_out]);
- for (j = 0; j < num_final_clusters; ++j) {
- const double cur_bits = FN(BrotliHistogramBitCostDistance)(
- &histo, &all_histograms[clusters[j]]);
- if (cur_bits < best_bits) {
- best_bits = cur_bits;
- best_out = clusters[j];
- }
- }
- histogram_symbols[i] = best_out;
- if (new_index[best_out] == kInvalidIndex) {
- new_index[best_out] = next_index++;
- }
- }
- }
- BROTLI_FREE(m, clusters);
- BROTLI_FREE(m, all_histograms);
- BROTLI_ENSURE_CAPACITY(
- m, uint8_t, split->types, split->types_alloc_size, num_blocks);
- BROTLI_ENSURE_CAPACITY(
- m, uint32_t, split->lengths, split->lengths_alloc_size, num_blocks);
- if (BROTLI_IS_OOM(m)) return;
- {
- uint32_t cur_length = 0;
- size_t block_idx = 0;
- uint8_t max_type = 0;
- for (i = 0; i < num_blocks; ++i) {
- cur_length += block_lengths[i];
- if (i + 1 == num_blocks ||
- histogram_symbols[i] != histogram_symbols[i + 1]) {
- const uint8_t id = (uint8_t)new_index[histogram_symbols[i]];
- split->types[block_idx] = id;
- split->lengths[block_idx] = cur_length;
- max_type = BROTLI_MAX(uint8_t, max_type, id);
- cur_length = 0;
- ++block_idx;
- }
- }
- split->num_blocks = block_idx;
- split->num_types = (size_t)max_type + 1;
- }
- BROTLI_FREE(m, new_index);
- BROTLI_FREE(m, block_lengths);
- BROTLI_FREE(m, histogram_symbols);
-}
-
-static void FN(SplitByteVector)(MemoryManager* m,
- const DataType* data, const size_t length,
- const size_t literals_per_histogram,
- const size_t max_histograms,
- const size_t sampling_stride_length,
- const double block_switch_cost,
- const BrotliEncoderParams* params,
- BlockSplit* split) {
- const size_t data_size = FN(HistogramDataSize)();
- size_t num_histograms = length / literals_per_histogram + 1;
- HistogramType* histograms;
- if (num_histograms > max_histograms) {
- num_histograms = max_histograms;
- }
- if (length == 0) {
- split->num_types = 1;
- return;
- } else if (length < kMinLengthForBlockSplitting) {
- BROTLI_ENSURE_CAPACITY(m, uint8_t,
- split->types, split->types_alloc_size, split->num_blocks + 1);
- BROTLI_ENSURE_CAPACITY(m, uint32_t,
- split->lengths, split->lengths_alloc_size, split->num_blocks + 1);
- if (BROTLI_IS_OOM(m)) return;
- split->num_types = 1;
- split->types[split->num_blocks] = 0;
- split->lengths[split->num_blocks] = (uint32_t)length;
- split->num_blocks++;
- return;
- }
- histograms = BROTLI_ALLOC(m, HistogramType, num_histograms);
- if (BROTLI_IS_OOM(m)) return;
- /* Find good entropy codes. */
- FN(InitialEntropyCodes)(data, length,
- sampling_stride_length,
- num_histograms, histograms);
- FN(RefineEntropyCodes)(data, length,
- sampling_stride_length,
- num_histograms, histograms);
- {
- /* Find a good path through literals with the good entropy codes. */
- uint8_t* block_ids = BROTLI_ALLOC(m, uint8_t, length);
- size_t num_blocks = 0;
- const size_t bitmaplen = (num_histograms + 7) >> 3;
- double* insert_cost = BROTLI_ALLOC(m, double, data_size * num_histograms);
- double* cost = BROTLI_ALLOC(m, double, num_histograms);
- uint8_t* switch_signal = BROTLI_ALLOC(m, uint8_t, length * bitmaplen);
- uint16_t* new_id = BROTLI_ALLOC(m, uint16_t, num_histograms);
- const size_t iters = params->quality < HQ_ZOPFLIFICATION_QUALITY ? 3 : 10;
- size_t i;
- if (BROTLI_IS_OOM(m)) return;
- for (i = 0; i < iters; ++i) {
- num_blocks = FN(FindBlocks)(data, length,
- block_switch_cost,
- num_histograms, histograms,
- insert_cost, cost, switch_signal,
- block_ids);
- num_histograms = FN(RemapBlockIds)(block_ids, length,
- new_id, num_histograms);
- FN(BuildBlockHistograms)(data, length, block_ids,
- num_histograms, histograms);
- }
- BROTLI_FREE(m, insert_cost);
- BROTLI_FREE(m, cost);
- BROTLI_FREE(m, switch_signal);
- BROTLI_FREE(m, new_id);
- BROTLI_FREE(m, histograms);
- FN(ClusterBlocks)(m, data, length, num_blocks, block_ids, split);
- if (BROTLI_IS_OOM(m)) return;
- BROTLI_FREE(m, block_ids);
- }
-}
-
-#undef HistogramType
diff --git a/BaseTools/Source/C/BrotliCompress/enc/brotli_bit_stream.h b/BaseTools/Source/C/BrotliCompress/enc/brotli_bit_stream.h
deleted file mode 100644
index 18556dc11044..000000000000
--- a/BaseTools/Source/C/BrotliCompress/enc/brotli_bit_stream.h
+++ /dev/null
@@ -1,84 +0,0 @@
-/* Copyright 2014 Google Inc. All Rights Reserved.
-
- Distributed under MIT license.
- See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
-*/
-
-/* Functions to convert brotli-related data structures into the
- brotli bit stream. The functions here operate under
- assumption that there is enough space in the storage, i.e., there are
- no out-of-range checks anywhere.
-
- These functions do bit addressing into a byte array. The byte array
- is called "storage" and the index to the bit is called storage_ix
- in function arguments. */
-
-#ifndef BROTLI_ENC_BROTLI_BIT_STREAM_H_
-#define BROTLI_ENC_BROTLI_BIT_STREAM_H_
-
-#include "../common/context.h"
-#include "../common/platform.h"
-#include <brotli/types.h>
-#include "./command.h"
-#include "./entropy_encode.h"
-#include "./memory.h"
-#include "./metablock.h"
-
-#if defined(__cplusplus) || defined(c_plusplus)
-extern "C" {
-#endif
-
-/* All Store functions here will use a storage_ix, which is always the bit
- position for the current storage. */
-
-BROTLI_INTERNAL void BrotliStoreHuffmanTree(const uint8_t* depths, size_t num,
- HuffmanTree* tree, size_t* storage_ix, uint8_t* storage);
-
-BROTLI_INTERNAL void BrotliBuildAndStoreHuffmanTreeFast(
- MemoryManager* m, const uint32_t* histogram, const size_t histogram_total,
- const size_t max_bits, uint8_t* depth, uint16_t* bits, size_t* storage_ix,
- uint8_t* storage);
-
-/* REQUIRES: length > 0 */
-/* REQUIRES: length <= (1 << 24) */
-BROTLI_INTERNAL void BrotliStoreMetaBlock(MemoryManager* m,
- const uint8_t* input, size_t start_pos, size_t length, size_t mask,
- uint8_t prev_byte, uint8_t prev_byte2, BROTLI_BOOL is_last,
- const BrotliEncoderParams* params, ContextType literal_context_mode,
- const Command* commands, size_t n_commands, const MetaBlockSplit* mb,
- size_t* storage_ix, uint8_t* storage);
-
-/* Stores the meta-block without doing any block splitting, just collects
- one histogram per block category and uses that for entropy coding.
- REQUIRES: length > 0
- REQUIRES: length <= (1 << 24) */
-BROTLI_INTERNAL void BrotliStoreMetaBlockTrivial(MemoryManager* m,
- const uint8_t* input, size_t start_pos, size_t length, size_t mask,
- BROTLI_BOOL is_last, const BrotliEncoderParams* params,
- const Command* commands, size_t n_commands,
- size_t* storage_ix, uint8_t* storage);
-
-/* Same as above, but uses static prefix codes for histograms with a only a few
- symbols, and uses static code length prefix codes for all other histograms.
- REQUIRES: length > 0
- REQUIRES: length <= (1 << 24) */
-BROTLI_INTERNAL void BrotliStoreMetaBlockFast(MemoryManager* m,
- const uint8_t* input, size_t start_pos, size_t length, size_t mask,
- BROTLI_BOOL is_last, const BrotliEncoderParams* params,
- const Command* commands, size_t n_commands,
- size_t* storage_ix, uint8_t* storage);
-
-/* This is for storing uncompressed blocks (simple raw storage of
- bytes-as-bytes).
- REQUIRES: length > 0
- REQUIRES: length <= (1 << 24) */
-BROTLI_INTERNAL void BrotliStoreUncompressedMetaBlock(
- BROTLI_BOOL is_final_block, const uint8_t* BROTLI_RESTRICT input,
- size_t position, size_t mask, size_t len,
- size_t* BROTLI_RESTRICT storage_ix, uint8_t* BROTLI_RESTRICT storage);
-
-#if defined(__cplusplus) || defined(c_plusplus)
-} /* extern "C" */
-#endif
-
-#endif /* BROTLI_ENC_BROTLI_BIT_STREAM_H_ */
diff --git a/BaseTools/Source/C/BrotliCompress/enc/cluster.h b/BaseTools/Source/C/BrotliCompress/enc/cluster.h
deleted file mode 100644
index b7ebec8c7841..000000000000
--- a/BaseTools/Source/C/BrotliCompress/enc/cluster.h
+++ /dev/null
@@ -1,48 +0,0 @@
-/* Copyright 2013 Google Inc. All Rights Reserved.
-
- Distributed under MIT license.
- See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
-*/
-
-/* Functions for clustering similar histograms together. */
-
-#ifndef BROTLI_ENC_CLUSTER_H_
-#define BROTLI_ENC_CLUSTER_H_
-
-#include "../common/platform.h"
-#include <brotli/types.h>
-#include "./histogram.h"
-#include "./memory.h"
-
-#if defined(__cplusplus) || defined(c_plusplus)
-extern "C" {
-#endif
-
-typedef struct HistogramPair {
- uint32_t idx1;
- uint32_t idx2;
- double cost_combo;
- double cost_diff;
-} HistogramPair;
-
-#define CODE(X) /* Declaration */;
-
-#define FN(X) X ## Literal
-#include "./cluster_inc.h" /* NOLINT(build/include) */
-#undef FN
-
-#define FN(X) X ## Command
-#include "./cluster_inc.h" /* NOLINT(build/include) */
-#undef FN
-
-#define FN(X) X ## Distance
-#include "./cluster_inc.h" /* NOLINT(build/include) */
-#undef FN
-
-#undef CODE
-
-#if defined(__cplusplus) || defined(c_plusplus)
-} /* extern "C" */
-#endif
-
-#endif /* BROTLI_ENC_CLUSTER_H_ */
diff --git a/BaseTools/Source/C/BrotliCompress/enc/cluster_inc.h b/BaseTools/Source/C/BrotliCompress/enc/cluster_inc.h
deleted file mode 100644
index b47e0dff0049..000000000000
--- a/BaseTools/Source/C/BrotliCompress/enc/cluster_inc.h
+++ /dev/null
@@ -1,317 +0,0 @@
-/* NOLINT(build/header_guard) */
-/* Copyright 2013 Google Inc. All Rights Reserved.
-
- Distributed under MIT license.
- See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
-*/
-
-/* template parameters: FN, CODE */
-
-#define HistogramType FN(Histogram)
-
-/* Computes the bit cost reduction by combining out[idx1] and out[idx2] and if
- it is below a threshold, stores the pair (idx1, idx2) in the *pairs queue. */
-BROTLI_INTERNAL void FN(BrotliCompareAndPushToQueue)(
- const HistogramType* out, const uint32_t* cluster_size, uint32_t idx1,
- uint32_t idx2, size_t max_num_pairs, HistogramPair* pairs,
- size_t* num_pairs) CODE({
- BROTLI_BOOL is_good_pair = BROTLI_FALSE;
- HistogramPair p;
- p.idx1 = p.idx2 = 0;
- p.cost_diff = p.cost_combo = 0;
- if (idx1 == idx2) {
- return;
- }
- if (idx2 < idx1) {
- uint32_t t = idx2;
- idx2 = idx1;
- idx1 = t;
- }
- p.idx1 = idx1;
- p.idx2 = idx2;
- p.cost_diff = 0.5 * ClusterCostDiff(cluster_size[idx1], cluster_size[idx2]);
- p.cost_diff -= out[idx1].bit_cost_;
- p.cost_diff -= out[idx2].bit_cost_;
-
- if (out[idx1].total_count_ == 0) {
- p.cost_combo = out[idx2].bit_cost_;
- is_good_pair = BROTLI_TRUE;
- } else if (out[idx2].total_count_ == 0) {
- p.cost_combo = out[idx1].bit_cost_;
- is_good_pair = BROTLI_TRUE;
- } else {
- double threshold = *num_pairs == 0 ? 1e99 :
- BROTLI_MAX(double, 0.0, pairs[0].cost_diff);
- HistogramType combo = out[idx1];
- double cost_combo;
- FN(HistogramAddHistogram)(&combo, &out[idx2]);
- cost_combo = FN(BrotliPopulationCost)(&combo);
- if (cost_combo < threshold - p.cost_diff) {
- p.cost_combo = cost_combo;
- is_good_pair = BROTLI_TRUE;
- }
- }
- if (is_good_pair) {
- p.cost_diff += p.cost_combo;
- if (*num_pairs > 0 && HistogramPairIsLess(&pairs[0], &p)) {
- /* Replace the top of the queue if needed. */
- if (*num_pairs < max_num_pairs) {
- pairs[*num_pairs] = pairs[0];
- ++(*num_pairs);
- }
- pairs[0] = p;
- } else if (*num_pairs < max_num_pairs) {
- pairs[*num_pairs] = p;
- ++(*num_pairs);
- }
- }
-})
-
-BROTLI_INTERNAL size_t FN(BrotliHistogramCombine)(HistogramType* out,
- uint32_t* cluster_size,
- uint32_t* symbols,
- uint32_t* clusters,
- HistogramPair* pairs,
- size_t num_clusters,
- size_t symbols_size,
- size_t max_clusters,
- size_t max_num_pairs) CODE({
- double cost_diff_threshold = 0.0;
- size_t min_cluster_size = 1;
- size_t num_pairs = 0;
-
- {
- /* We maintain a vector of histogram pairs, with the property that the pair
- with the maximum bit cost reduction is the first. */
- size_t idx1;
- for (idx1 = 0; idx1 < num_clusters; ++idx1) {
- size_t idx2;
- for (idx2 = idx1 + 1; idx2 < num_clusters; ++idx2) {
- FN(BrotliCompareAndPushToQueue)(out, cluster_size, clusters[idx1],
- clusters[idx2], max_num_pairs, &pairs[0], &num_pairs);
- }
- }
- }
-
- while (num_clusters > min_cluster_size) {
- uint32_t best_idx1;
- uint32_t best_idx2;
- size_t i;
- if (pairs[0].cost_diff >= cost_diff_threshold) {
- cost_diff_threshold = 1e99;
- min_cluster_size = max_clusters;
- continue;
- }
- /* Take the best pair from the top of heap. */
- best_idx1 = pairs[0].idx1;
- best_idx2 = pairs[0].idx2;
- FN(HistogramAddHistogram)(&out[best_idx1], &out[best_idx2]);
- out[best_idx1].bit_cost_ = pairs[0].cost_combo;
- cluster_size[best_idx1] += cluster_size[best_idx2];
- for (i = 0; i < symbols_size; ++i) {
- if (symbols[i] == best_idx2) {
- symbols[i] = best_idx1;
- }
- }
- for (i = 0; i < num_clusters; ++i) {
- if (clusters[i] == best_idx2) {
- memmove(&clusters[i], &clusters[i + 1],
- (num_clusters - i - 1) * sizeof(clusters[0]));
- break;
- }
- }
- --num_clusters;
- {
- /* Remove pairs intersecting the just combined best pair. */
- size_t copy_to_idx = 0;
- for (i = 0; i < num_pairs; ++i) {
- HistogramPair* p = &pairs[i];
- if (p->idx1 == best_idx1 || p->idx2 == best_idx1 ||
- p->idx1 == best_idx2 || p->idx2 == best_idx2) {
- /* Remove invalid pair from the queue. */
- continue;
- }
- if (HistogramPairIsLess(&pairs[0], p)) {
- /* Replace the top of the queue if needed. */
- HistogramPair front = pairs[0];
- pairs[0] = *p;
- pairs[copy_to_idx] = front;
- } else {
- pairs[copy_to_idx] = *p;
- }
- ++copy_to_idx;
- }
- num_pairs = copy_to_idx;
- }
-
- /* Push new pairs formed with the combined histogram to the heap. */
- for (i = 0; i < num_clusters; ++i) {
- FN(BrotliCompareAndPushToQueue)(out, cluster_size, best_idx1, clusters[i],
- max_num_pairs, &pairs[0], &num_pairs);
- }
- }
- return num_clusters;
-})
-
-/* What is the bit cost of moving histogram from cur_symbol to candidate. */
-BROTLI_INTERNAL double FN(BrotliHistogramBitCostDistance)(
- const HistogramType* histogram, const HistogramType* candidate) CODE({
- if (histogram->total_count_ == 0) {
- return 0.0;
- } else {
- HistogramType tmp = *histogram;
- FN(HistogramAddHistogram)(&tmp, candidate);
- return FN(BrotliPopulationCost)(&tmp) - candidate->bit_cost_;
- }
-})
-
-/* Find the best 'out' histogram for each of the 'in' histograms.
- When called, clusters[0..num_clusters) contains the unique values from
- symbols[0..in_size), but this property is not preserved in this function.
- Note: we assume that out[]->bit_cost_ is already up-to-date. */
-BROTLI_INTERNAL void FN(BrotliHistogramRemap)(const HistogramType* in,
- size_t in_size, const uint32_t* clusters, size_t num_clusters,
- HistogramType* out, uint32_t* symbols) CODE({
- size_t i;
- for (i = 0; i < in_size; ++i) {
- uint32_t best_out = i == 0 ? symbols[0] : symbols[i - 1];
- double best_bits =
- FN(BrotliHistogramBitCostDistance)(&in[i], &out[best_out]);
- size_t j;
- for (j = 0; j < num_clusters; ++j) {
- const double cur_bits =
- FN(BrotliHistogramBitCostDistance)(&in[i], &out[clusters[j]]);
- if (cur_bits < best_bits) {
- best_bits = cur_bits;
- best_out = clusters[j];
- }
- }
- symbols[i] = best_out;
- }
-
- /* Recompute each out based on raw and symbols. */
- for (i = 0; i < num_clusters; ++i) {
- FN(HistogramClear)(&out[clusters[i]]);
- }
- for (i = 0; i < in_size; ++i) {
- FN(HistogramAddHistogram)(&out[symbols[i]], &in[i]);
- }
-})
-
-/* Reorders elements of the out[0..length) array and changes values in
- symbols[0..length) array in the following way:
- * when called, symbols[] contains indexes into out[], and has N unique
- values (possibly N < length)
- * on return, symbols'[i] = f(symbols[i]) and
- out'[symbols'[i]] = out[symbols[i]], for each 0 <= i < length,
- where f is a bijection between the range of symbols[] and [0..N), and
- the first occurrences of values in symbols'[i] come in consecutive
- increasing order.
- Returns N, the number of unique values in symbols[]. */
-BROTLI_INTERNAL size_t FN(BrotliHistogramReindex)(MemoryManager* m,
- HistogramType* out, uint32_t* symbols, size_t length) CODE({
- static const uint32_t kInvalidIndex = BROTLI_UINT32_MAX;
- uint32_t* new_index = BROTLI_ALLOC(m, uint32_t, length);
- uint32_t next_index;
- HistogramType* tmp;
- size_t i;
- if (BROTLI_IS_OOM(m)) return 0;
- for (i = 0; i < length; ++i) {
- new_index[i] = kInvalidIndex;
- }
- next_index = 0;
- for (i = 0; i < length; ++i) {
- if (new_index[symbols[i]] == kInvalidIndex) {
- new_index[symbols[i]] = next_index;
- ++next_index;
- }
- }
- /* TODO: by using idea of "cycle-sort" we can avoid allocation of
- tmp and reduce the number of copying by the factor of 2. */
- tmp = BROTLI_ALLOC(m, HistogramType, next_index);
- if (BROTLI_IS_OOM(m)) return 0;
- next_index = 0;
- for (i = 0; i < length; ++i) {
- if (new_index[symbols[i]] == next_index) {
- tmp[next_index] = out[symbols[i]];
- ++next_index;
- }
- symbols[i] = new_index[symbols[i]];
- }
- BROTLI_FREE(m, new_index);
- for (i = 0; i < next_index; ++i) {
- out[i] = tmp[i];
- }
- BROTLI_FREE(m, tmp);
- return next_index;
-})
-
-BROTLI_INTERNAL void FN(BrotliClusterHistograms)(
- MemoryManager* m, const HistogramType* in, const size_t in_size,
- size_t max_histograms, HistogramType* out, size_t* out_size,
- uint32_t* histogram_symbols) CODE({
- uint32_t* cluster_size = BROTLI_ALLOC(m, uint32_t, in_size);
- uint32_t* clusters = BROTLI_ALLOC(m, uint32_t, in_size);
- size_t num_clusters = 0;
- const size_t max_input_histograms = 64;
- size_t pairs_capacity = max_input_histograms * max_input_histograms / 2;
- /* For the first pass of clustering, we allow all pairs. */
- HistogramPair* pairs = BROTLI_ALLOC(m, HistogramPair, pairs_capacity + 1);
- size_t i;
-
- if (BROTLI_IS_OOM(m)) return;
-
- for (i = 0; i < in_size; ++i) {
- cluster_size[i] = 1;
- }
-
- for (i = 0; i < in_size; ++i) {
- out[i] = in[i];
- out[i].bit_cost_ = FN(BrotliPopulationCost)(&in[i]);
- histogram_symbols[i] = (uint32_t)i;
- }
-
- for (i = 0; i < in_size; i += max_input_histograms) {
- size_t num_to_combine =
- BROTLI_MIN(size_t, in_size - i, max_input_histograms);
- size_t num_new_clusters;
- size_t j;
- for (j = 0; j < num_to_combine; ++j) {
- clusters[num_clusters + j] = (uint32_t)(i + j);
- }
- num_new_clusters =
- FN(BrotliHistogramCombine)(out, cluster_size,
- &histogram_symbols[i],
- &clusters[num_clusters], pairs,
- num_to_combine, num_to_combine,
- max_histograms, pairs_capacity);
- num_clusters += num_new_clusters;
- }
-
- {
- /* For the second pass, we limit the total number of histogram pairs.
- After this limit is reached, we only keep searching for the best pair. */
- size_t max_num_pairs = BROTLI_MIN(size_t,
- 64 * num_clusters, (num_clusters / 2) * num_clusters);
- BROTLI_ENSURE_CAPACITY(
- m, HistogramPair, pairs, pairs_capacity, max_num_pairs + 1);
- if (BROTLI_IS_OOM(m)) return;
-
- /* Collapse similar histograms. */
- num_clusters = FN(BrotliHistogramCombine)(out, cluster_size,
- histogram_symbols, clusters,
- pairs, num_clusters, in_size,
- max_histograms, max_num_pairs);
- }
- BROTLI_FREE(m, pairs);
- BROTLI_FREE(m, cluster_size);
- /* Find the optimal map from original histograms to the final ones. */
- FN(BrotliHistogramRemap)(in, in_size, clusters, num_clusters,
- out, histogram_symbols);
- BROTLI_FREE(m, clusters);
- /* Convert the context map to a canonical form. */
- *out_size = FN(BrotliHistogramReindex)(m, out, histogram_symbols, in_size);
- if (BROTLI_IS_OOM(m)) return;
-})
-
-#undef HistogramType
diff --git a/BaseTools/Source/C/BrotliCompress/enc/command.h b/BaseTools/Source/C/BrotliCompress/enc/command.h
deleted file mode 100644
index b8a66a44dc0b..000000000000
--- a/BaseTools/Source/C/BrotliCompress/enc/command.h
+++ /dev/null
@@ -1,190 +0,0 @@
-/* Copyright 2013 Google Inc. All Rights Reserved.
-
- Distributed under MIT license.
- See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
-*/
-
-/* This class models a sequence of literals and a backward reference copy. */
-
-#ifndef BROTLI_ENC_COMMAND_H_
-#define BROTLI_ENC_COMMAND_H_
-
-#include "../common/constants.h"
-#include "../common/platform.h"
-#include <brotli/types.h>
-#include "./fast_log.h"
-#include "./params.h"
-#include "./prefix.h"
-
-#if defined(__cplusplus) || defined(c_plusplus)
-extern "C" {
-#endif
-
-static uint32_t kInsBase[] = { 0, 1, 2, 3, 4, 5, 6, 8, 10, 14, 18, 26, 34, 50,
- 66, 98, 130, 194, 322, 578, 1090, 2114, 6210, 22594 };
-static uint32_t kInsExtra[] = { 0, 0, 0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4,
- 5, 5, 6, 7, 8, 9, 10, 12, 14, 24 };
-static uint32_t kCopyBase[] = { 2, 3, 4, 5, 6, 7, 8, 9, 10, 12, 14, 18, 22, 30,
- 38, 54, 70, 102, 134, 198, 326, 582, 1094, 2118 };
-static uint32_t kCopyExtra[] = { 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 2, 3, 3,
- 4, 4, 5, 5, 6, 7, 8, 9, 10, 24 };
-
-static BROTLI_INLINE uint16_t GetInsertLengthCode(size_t insertlen) {
- if (insertlen < 6) {
- return (uint16_t)insertlen;
- } else if (insertlen < 130) {
- uint32_t nbits = Log2FloorNonZero(insertlen - 2) - 1u;
- return (uint16_t)((nbits << 1) + ((insertlen - 2) >> nbits) + 2);
- } else if (insertlen < 2114) {
- return (uint16_t)(Log2FloorNonZero(insertlen - 66) + 10);
- } else if (insertlen < 6210) {
- return 21u;
- } else if (insertlen < 22594) {
- return 22u;
- } else {
- return 23u;
- }
-}
-
-static BROTLI_INLINE uint16_t GetCopyLengthCode(size_t copylen) {
- if (copylen < 10) {
- return (uint16_t)(copylen - 2);
- } else if (copylen < 134) {
- uint32_t nbits = Log2FloorNonZero(copylen - 6) - 1u;
- return (uint16_t)((nbits << 1) + ((copylen - 6) >> nbits) + 4);
- } else if (copylen < 2118) {
- return (uint16_t)(Log2FloorNonZero(copylen - 70) + 12);
- } else {
- return 23u;
- }
-}
-
-static BROTLI_INLINE uint16_t CombineLengthCodes(
- uint16_t inscode, uint16_t copycode, BROTLI_BOOL use_last_distance) {
- uint16_t bits64 =
- (uint16_t)((copycode & 0x7u) | ((inscode & 0x7u) << 3u));
- if (use_last_distance && inscode < 8u && copycode < 16u) {
- return (copycode < 8u) ? bits64 : (bits64 | 64u);
- } else {
- /* Specification: 5 Encoding of ... (last table) */
- /* offset = 2 * index, where index is in range [0..8] */
- uint32_t offset = 2u * ((copycode >> 3u) + 3u * (inscode >> 3u));
- /* All values in specification are K * 64,
- where K = [2, 3, 6, 4, 5, 8, 7, 9, 10],
- i + 1 = [1, 2, 3, 4, 5, 6, 7, 8, 9],
- K - i - 1 = [1, 1, 3, 0, 0, 2, 0, 1, 2] = D.
- All values in D require only 2 bits to encode.
- Magic constant is shifted 6 bits left, to avoid final multiplication. */
- offset = (offset << 5u) + 0x40u + ((0x520D40u >> offset) & 0xC0u);
- return (uint16_t)(offset | bits64);
- }
-}
-
-static BROTLI_INLINE void GetLengthCode(size_t insertlen, size_t copylen,
- BROTLI_BOOL use_last_distance,
- uint16_t* code) {
- uint16_t inscode = GetInsertLengthCode(insertlen);
- uint16_t copycode = GetCopyLengthCode(copylen);
- *code = CombineLengthCodes(inscode, copycode, use_last_distance);
-}
-
-static BROTLI_INLINE uint32_t GetInsertBase(uint16_t inscode) {
- return kInsBase[inscode];
-}
-
-static BROTLI_INLINE uint32_t GetInsertExtra(uint16_t inscode) {
- return kInsExtra[inscode];
-}
-
-static BROTLI_INLINE uint32_t GetCopyBase(uint16_t copycode) {
- return kCopyBase[copycode];
-}
-
-static BROTLI_INLINE uint32_t GetCopyExtra(uint16_t copycode) {
- return kCopyExtra[copycode];
-}
-
-typedef struct Command {
- uint32_t insert_len_;
- /* Stores copy_len in low 25 bits and copy_code - copy_len in high 7 bit. */
- uint32_t copy_len_;
- /* Stores distance extra bits. */
- uint32_t dist_extra_;
- uint16_t cmd_prefix_;
- /* Stores distance code in low 10 bits
- and number of extra bits in high 6 bits. */
- uint16_t dist_prefix_;
-} Command;
-
-/* distance_code is e.g. 0 for same-as-last short code, or 16 for offset 1. */
-static BROTLI_INLINE void InitCommand(Command* self,
- const BrotliDistanceParams* dist, size_t insertlen,
- size_t copylen, int copylen_code_delta, size_t distance_code) {
- /* Don't rely on signed int representation, use honest casts. */
- uint32_t delta = (uint8_t)((int8_t)copylen_code_delta);
- self->insert_len_ = (uint32_t)insertlen;
- self->copy_len_ = (uint32_t)(copylen | (delta << 25));
- /* The distance prefix and extra bits are stored in this Command as if
- npostfix and ndirect were 0, they are only recomputed later after the
- clustering if needed. */
- PrefixEncodeCopyDistance(
- distance_code, dist->num_direct_distance_codes,
- dist->distance_postfix_bits, &self->dist_prefix_, &self->dist_extra_);
- GetLengthCode(
- insertlen, (size_t)((int)copylen + copylen_code_delta),
- TO_BROTLI_BOOL((self->dist_prefix_ & 0x3FF) == 0), &self->cmd_prefix_);
-}
-
-static BROTLI_INLINE void InitInsertCommand(Command* self, size_t insertlen) {
- self->insert_len_ = (uint32_t)insertlen;
- self->copy_len_ = 4 << 25;
- self->dist_extra_ = 0;
- self->dist_prefix_ = BROTLI_NUM_DISTANCE_SHORT_CODES;
- GetLengthCode(insertlen, 4, BROTLI_FALSE, &self->cmd_prefix_);
-}
-
-static BROTLI_INLINE uint32_t CommandRestoreDistanceCode(
- const Command* self, const BrotliDistanceParams* dist) {
- if ((self->dist_prefix_ & 0x3FFu) <
- BROTLI_NUM_DISTANCE_SHORT_CODES + dist->num_direct_distance_codes) {
- return self->dist_prefix_ & 0x3FFu;
- } else {
- uint32_t dcode = self->dist_prefix_ & 0x3FFu;
- uint32_t nbits = self->dist_prefix_ >> 10;
- uint32_t extra = self->dist_extra_;
- uint32_t postfix_mask = (1U << dist->distance_postfix_bits) - 1U;
- uint32_t hcode = (dcode - dist->num_direct_distance_codes -
- BROTLI_NUM_DISTANCE_SHORT_CODES) >>
- dist->distance_postfix_bits;
- uint32_t lcode = (dcode - dist->num_direct_distance_codes -
- BROTLI_NUM_DISTANCE_SHORT_CODES) & postfix_mask;
- uint32_t offset = ((2U + (hcode & 1U)) << nbits) - 4U;
- return ((offset + extra) << dist->distance_postfix_bits) + lcode +
- dist->num_direct_distance_codes + BROTLI_NUM_DISTANCE_SHORT_CODES;
- }
-}
-
-static BROTLI_INLINE uint32_t CommandDistanceContext(const Command* self) {
- uint32_t r = self->cmd_prefix_ >> 6;
- uint32_t c = self->cmd_prefix_ & 7;
- if ((r == 0 || r == 2 || r == 4 || r == 7) && (c <= 2)) {
- return c;
- }
- return 3;
-}
-
-static BROTLI_INLINE uint32_t CommandCopyLen(const Command* self) {
- return self->copy_len_ & 0x1FFFFFF;
-}
-
-static BROTLI_INLINE uint32_t CommandCopyLenCode(const Command* self) {
- uint32_t modifier = self->copy_len_ >> 25;
- int32_t delta = (int8_t)((uint8_t)(modifier | ((modifier & 0x40) << 1)));
- return (uint32_t)((int32_t)(self->copy_len_ & 0x1FFFFFF) + delta);
-}
-
-#if defined(__cplusplus) || defined(c_plusplus)
-} /* extern "C" */
-#endif
-
-#endif /* BROTLI_ENC_COMMAND_H_ */
diff --git a/BaseTools/Source/C/BrotliCompress/enc/compress_fragment.h b/BaseTools/Source/C/BrotliCompress/enc/compress_fragment.h
deleted file mode 100644
index d4c34299ea2c..000000000000
--- a/BaseTools/Source/C/BrotliCompress/enc/compress_fragment.h
+++ /dev/null
@@ -1,61 +0,0 @@
-/* Copyright 2015 Google Inc. All Rights Reserved.
-
- Distributed under MIT license.
- See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
-*/
-
-/* Function for fast encoding of an input fragment, independently from the input
- history. This function uses one-pass processing: when we find a backward
- match, we immediately emit the corresponding command and literal codes to
- the bit stream. */
-
-#ifndef BROTLI_ENC_COMPRESS_FRAGMENT_H_
-#define BROTLI_ENC_COMPRESS_FRAGMENT_H_
-
-#include "../common/platform.h"
-#include <brotli/types.h>
-#include "./memory.h"
-
-#if defined(__cplusplus) || defined(c_plusplus)
-extern "C" {
-#endif
-
-/* Compresses "input" string to the "*storage" buffer as one or more complete
- meta-blocks, and updates the "*storage_ix" bit position.
-
- If "is_last" is 1, emits an additional empty last meta-block.
-
- "cmd_depth" and "cmd_bits" contain the command and distance prefix codes
- (see comment in encode.h) used for the encoding of this input fragment.
- If "is_last" is 0, they are updated to reflect the statistics
- of this input fragment, to be used for the encoding of the next fragment.
-
- "*cmd_code_numbits" is the number of bits of the compressed representation
- of the command and distance prefix codes, and "cmd_code" is an array of
- at least "(*cmd_code_numbits + 7) >> 3" size that contains the compressed
- command and distance prefix codes. If "is_last" is 0, these are also
- updated to represent the updated "cmd_depth" and "cmd_bits".
-
- REQUIRES: "input_size" is greater than zero, or "is_last" is 1.
- REQUIRES: "input_size" is less or equal to maximal metablock size (1 << 24).
- REQUIRES: All elements in "table[0..table_size-1]" are initialized to zero.
- REQUIRES: "table_size" is an odd (9, 11, 13, 15) power of two
- OUTPUT: maximal copy distance <= |input_size|
- OUTPUT: maximal copy distance <= BROTLI_MAX_BACKWARD_LIMIT(18) */
-BROTLI_INTERNAL void BrotliCompressFragmentFast(MemoryManager* m,
- const uint8_t* input,
- size_t input_size,
- BROTLI_BOOL is_last,
- int* table, size_t table_size,
- uint8_t cmd_depth[128],
- uint16_t cmd_bits[128],
- size_t* cmd_code_numbits,
- uint8_t* cmd_code,
- size_t* storage_ix,
- uint8_t* storage);
-
-#if defined(__cplusplus) || defined(c_plusplus)
-} /* extern "C" */
-#endif
-
-#endif /* BROTLI_ENC_COMPRESS_FRAGMENT_H_ */
diff --git a/BaseTools/Source/C/BrotliCompress/enc/compress_fragment_two_pass.h b/BaseTools/Source/C/BrotliCompress/enc/compress_fragment_two_pass.h
deleted file mode 100644
index c97e22cfcaba..000000000000
--- a/BaseTools/Source/C/BrotliCompress/enc/compress_fragment_two_pass.h
+++ /dev/null
@@ -1,54 +0,0 @@
-/* Copyright 2015 Google Inc. All Rights Reserved.
-
- Distributed under MIT license.
- See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
-*/
-
-/* Function for fast encoding of an input fragment, independently from the input
- history. This function uses two-pass processing: in the first pass we save
- the found backward matches and literal bytes into a buffer, and in the
- second pass we emit them into the bit stream using prefix codes built based
- on the actual command and literal byte histograms. */
-
-#ifndef BROTLI_ENC_COMPRESS_FRAGMENT_TWO_PASS_H_
-#define BROTLI_ENC_COMPRESS_FRAGMENT_TWO_PASS_H_
-
-#include "../common/platform.h"
-#include <brotli/types.h>
-#include "./memory.h"
-
-#if defined(__cplusplus) || defined(c_plusplus)
-extern "C" {
-#endif
-
-static const size_t kCompressFragmentTwoPassBlockSize = 1 << 17;
-
-/* Compresses "input" string to the "*storage" buffer as one or more complete
- meta-blocks, and updates the "*storage_ix" bit position.
-
- If "is_last" is 1, emits an additional empty last meta-block.
-
- REQUIRES: "input_size" is greater than zero, or "is_last" is 1.
- REQUIRES: "input_size" is less or equal to maximal metablock size (1 << 24).
- REQUIRES: "command_buf" and "literal_buf" point to at least
- kCompressFragmentTwoPassBlockSize long arrays.
- REQUIRES: All elements in "table[0..table_size-1]" are initialized to zero.
- REQUIRES: "table_size" is a power of two
- OUTPUT: maximal copy distance <= |input_size|
- OUTPUT: maximal copy distance <= BROTLI_MAX_BACKWARD_LIMIT(18) */
-BROTLI_INTERNAL void BrotliCompressFragmentTwoPass(MemoryManager* m,
- const uint8_t* input,
- size_t input_size,
- BROTLI_BOOL is_last,
- uint32_t* command_buf,
- uint8_t* literal_buf,
- int* table,
- size_t table_size,
- size_t* storage_ix,
- uint8_t* storage);
-
-#if defined(__cplusplus) || defined(c_plusplus)
-} /* extern "C" */
-#endif
-
-#endif /* BROTLI_ENC_COMPRESS_FRAGMENT_TWO_PASS_H_ */
diff --git a/BaseTools/Source/C/BrotliCompress/enc/dictionary_hash.h b/BaseTools/Source/C/BrotliCompress/enc/dictionary_hash.h
deleted file mode 100644
index ab31827c0bb0..000000000000
--- a/BaseTools/Source/C/BrotliCompress/enc/dictionary_hash.h
+++ /dev/null
@@ -1,24 +0,0 @@
-/* Copyright 2015 Google Inc. All Rights Reserved.
-
- Distributed under MIT license.
- See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
-*/
-
-/* Hash table on the 4-byte prefixes of static dictionary words. */
-
-#ifndef BROTLI_ENC_DICTIONARY_HASH_H_
-#define BROTLI_ENC_DICTIONARY_HASH_H_
-
-#include <brotli/types.h>
-
-#if defined(__cplusplus) || defined(c_plusplus)
-extern "C" {
-#endif
-
-extern const uint16_t kStaticDictionaryHash[32768];
-
-#if defined(__cplusplus) || defined(c_plusplus)
-} /* extern "C" */
-#endif
-
-#endif /* BROTLI_ENC_DICTIONARY_HASH_H_ */
diff --git a/BaseTools/Source/C/BrotliCompress/enc/encoder_dict.h b/BaseTools/Source/C/BrotliCompress/enc/encoder_dict.h
deleted file mode 100644
index 7c41ea055ac0..000000000000
--- a/BaseTools/Source/C/BrotliCompress/enc/encoder_dict.h
+++ /dev/null
@@ -1,41 +0,0 @@
-/* Copyright 2017 Google Inc. All Rights Reserved.
-
- Distributed under MIT license.
- See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
-*/
-
-#ifndef BROTLI_ENC_ENCODER_DICT_H_
-#define BROTLI_ENC_ENCODER_DICT_H_
-
-#include "../common/dictionary.h"
-#include "../common/platform.h"
-#include <brotli/types.h>
-#include "./static_dict_lut.h"
-
-#if defined(__cplusplus) || defined(c_plusplus)
-extern "C" {
-#endif
-
-/* Dictionary data (words and transforms) for 1 possible context */
-typedef struct BrotliEncoderDictionary {
- const BrotliDictionary* words;
-
- /* cut off for fast encoder */
- uint32_t cutoffTransformsCount;
- uint64_t cutoffTransforms;
-
- /* from dictionary_hash.h, for fast encoder */
- const uint16_t* hash_table;
-
- /* from static_dict_lut.h, for slow encoder */
- const uint16_t* buckets;
- const DictWord* dict_words;
-} BrotliEncoderDictionary;
-
-BROTLI_INTERNAL void BrotliInitEncoderDictionary(BrotliEncoderDictionary* dict);
-
-#if defined(__cplusplus) || defined(c_plusplus)
-} /* extern "C" */
-#endif
-
-#endif /* BROTLI_ENC_ENCODER_DICT_H_ */
diff --git a/BaseTools/Source/C/BrotliCompress/enc/entropy_encode.h b/BaseTools/Source/C/BrotliCompress/enc/entropy_encode.h
deleted file mode 100644
index 173d98336347..000000000000
--- a/BaseTools/Source/C/BrotliCompress/enc/entropy_encode.h
+++ /dev/null
@@ -1,122 +0,0 @@
-/* Copyright 2010 Google Inc. All Rights Reserved.
-
- Distributed under MIT license.
- See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
-*/
-
-/* Entropy encoding (Huffman) utilities. */
-
-#ifndef BROTLI_ENC_ENTROPY_ENCODE_H_
-#define BROTLI_ENC_ENTROPY_ENCODE_H_
-
-#include "../common/platform.h"
-#include <brotli/types.h>
-
-#if defined(__cplusplus) || defined(c_plusplus)
-extern "C" {
-#endif
-
-/* A node of a Huffman tree. */
-typedef struct HuffmanTree {
- uint32_t total_count_;
- int16_t index_left_;
- int16_t index_right_or_value_;
-} HuffmanTree;
-
-static BROTLI_INLINE void InitHuffmanTree(HuffmanTree* self, uint32_t count,
- int16_t left, int16_t right) {
- self->total_count_ = count;
- self->index_left_ = left;
- self->index_right_or_value_ = right;
-}
-
-/* Returns 1 is assignment of depths succeeded, otherwise 0. */
-BROTLI_INTERNAL BROTLI_BOOL BrotliSetDepth(
- int p, HuffmanTree* pool, uint8_t* depth, int max_depth);
-
-/* This function will create a Huffman tree.
-
- The (data,length) contains the population counts.
- The tree_limit is the maximum bit depth of the Huffman codes.
-
- The depth contains the tree, i.e., how many bits are used for
- the symbol.
-
- The actual Huffman tree is constructed in the tree[] array, which has to
- be at least 2 * length + 1 long.
-
- See http://en.wikipedia.org/wiki/Huffman_coding */
-BROTLI_INTERNAL void BrotliCreateHuffmanTree(const uint32_t* data,
- const size_t length,
- const int tree_limit,
- HuffmanTree* tree,
- uint8_t* depth);
-
-/* Change the population counts in a way that the consequent
- Huffman tree compression, especially its RLE-part will be more
- likely to compress this data more efficiently.
-
- length contains the size of the histogram.
- counts contains the population counts.
- good_for_rle is a buffer of at least length size */
-BROTLI_INTERNAL void BrotliOptimizeHuffmanCountsForRle(
- size_t length, uint32_t* counts, uint8_t* good_for_rle);
-
-/* Write a Huffman tree from bit depths into the bit-stream representation
- of a Huffman tree. The generated Huffman tree is to be compressed once
- more using a Huffman tree */
-BROTLI_INTERNAL void BrotliWriteHuffmanTree(const uint8_t* depth,
- size_t num,
- size_t* tree_size,
- uint8_t* tree,
- uint8_t* extra_bits_data);
-
-/* Get the actual bit values for a tree of bit depths. */
-BROTLI_INTERNAL void BrotliConvertBitDepthsToSymbols(const uint8_t* depth,
- size_t len,
- uint16_t* bits);
-
-/* Input size optimized Shell sort. */
-typedef BROTLI_BOOL (*HuffmanTreeComparator)(
- const HuffmanTree*, const HuffmanTree*);
-static BROTLI_INLINE void SortHuffmanTreeItems(HuffmanTree* items,
- const size_t n, HuffmanTreeComparator comparator) {
- static const size_t gaps[] = {132, 57, 23, 10, 4, 1};
- if (n < 13) {
- /* Insertion sort. */
- size_t i;
- for (i = 1; i < n; ++i) {
- HuffmanTree tmp = items[i];
- size_t k = i;
- size_t j = i - 1;
- while (comparator(&tmp, &items[j])) {
- items[k] = items[j];
- k = j;
- if (!j--) break;
- }
- items[k] = tmp;
- }
- return;
- } else {
- /* Shell sort. */
- int g = n < 57 ? 2 : 0;
- for (; g < 6; ++g) {
- size_t gap = gaps[g];
- size_t i;
- for (i = gap; i < n; ++i) {
- size_t j = i;
- HuffmanTree tmp = items[i];
- for (; j >= gap && comparator(&tmp, &items[j - gap]); j -= gap) {
- items[j] = items[j - gap];
- }
- items[j] = tmp;
- }
- }
- }
-}
-
-#if defined(__cplusplus) || defined(c_plusplus)
-} /* extern "C" */
-#endif
-
-#endif /* BROTLI_ENC_ENTROPY_ENCODE_H_ */
diff --git a/BaseTools/Source/C/BrotliCompress/enc/entropy_encode_static.h b/BaseTools/Source/C/BrotliCompress/enc/entropy_encode_static.h
deleted file mode 100644
index 3910af97ef8e..000000000000
--- a/BaseTools/Source/C/BrotliCompress/enc/entropy_encode_static.h
+++ /dev/null
@@ -1,539 +0,0 @@
-/* Copyright 2015 Google Inc. All Rights Reserved.
-
- Distributed under MIT license.
- See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
-*/
-
-/* Static entropy codes used for faster meta-block encoding. */
-
-#ifndef BROTLI_ENC_ENTROPY_ENCODE_STATIC_H_
-#define BROTLI_ENC_ENTROPY_ENCODE_STATIC_H_
-
-#include "../common/constants.h"
-#include "../common/platform.h"
-#include <brotli/types.h>
-#include "./write_bits.h"
-
-#if defined(__cplusplus) || defined(c_plusplus)
-extern "C" {
-#endif
-
-static const uint8_t kCodeLengthDepth[18] = {
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 5, 5, 0, 4, 4,
-};
-
-static const uint8_t kStaticCommandCodeDepth[BROTLI_NUM_COMMAND_SYMBOLS] = {
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
- 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
- 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
- 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
- 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
- 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
- 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
- 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
- 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
- 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
- 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
- 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
- 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
- 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
- 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
- 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
-};
-
-static const uint8_t kStaticDistanceCodeDepth[64] = {
- 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
- 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
- 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
- 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
-};
-
-static const uint32_t kCodeLengthBits[18] = {
- 0, 8, 4, 12, 2, 10, 6, 14, 1, 9, 5, 13, 3, 15, 31, 0, 11, 7,
-};
-
-static BROTLI_INLINE void StoreStaticCodeLengthCode(
- size_t* storage_ix, uint8_t* storage) {
- BrotliWriteBits(
- 40, BROTLI_MAKE_UINT64_T(0x0000FFu, 0x55555554u), storage_ix, storage);
-}
-
-static const uint64_t kZeroRepsBits[BROTLI_NUM_COMMAND_SYMBOLS] = {
- 0x00000000, 0x00000000, 0x00000000, 0x00000007, 0x00000017, 0x00000027,
- 0x00000037, 0x00000047, 0x00000057, 0x00000067, 0x00000077, 0x00000770,
- 0x00000b87, 0x00001387, 0x00001b87, 0x00002387, 0x00002b87, 0x00003387,
- 0x00003b87, 0x00000397, 0x00000b97, 0x00001397, 0x00001b97, 0x00002397,
- 0x00002b97, 0x00003397, 0x00003b97, 0x000003a7, 0x00000ba7, 0x000013a7,
- 0x00001ba7, 0x000023a7, 0x00002ba7, 0x000033a7, 0x00003ba7, 0x000003b7,
- 0x00000bb7, 0x000013b7, 0x00001bb7, 0x000023b7, 0x00002bb7, 0x000033b7,
- 0x00003bb7, 0x000003c7, 0x00000bc7, 0x000013c7, 0x00001bc7, 0x000023c7,
- 0x00002bc7, 0x000033c7, 0x00003bc7, 0x000003d7, 0x00000bd7, 0x000013d7,
- 0x00001bd7, 0x000023d7, 0x00002bd7, 0x000033d7, 0x00003bd7, 0x000003e7,
- 0x00000be7, 0x000013e7, 0x00001be7, 0x000023e7, 0x00002be7, 0x000033e7,
- 0x00003be7, 0x000003f7, 0x00000bf7, 0x000013f7, 0x00001bf7, 0x000023f7,
- 0x00002bf7, 0x000033f7, 0x00003bf7, 0x0001c387, 0x0005c387, 0x0009c387,
- 0x000dc387, 0x0011c387, 0x0015c387, 0x0019c387, 0x001dc387, 0x0001cb87,
- 0x0005cb87, 0x0009cb87, 0x000dcb87, 0x0011cb87, 0x0015cb87, 0x0019cb87,
- 0x001dcb87, 0x0001d387, 0x0005d387, 0x0009d387, 0x000dd387, 0x0011d387,
- 0x0015d387, 0x0019d387, 0x001dd387, 0x0001db87, 0x0005db87, 0x0009db87,
- 0x000ddb87, 0x0011db87, 0x0015db87, 0x0019db87, 0x001ddb87, 0x0001e387,
- 0x0005e387, 0x0009e387, 0x000de387, 0x0011e387, 0x0015e387, 0x0019e387,
- 0x001de387, 0x0001eb87, 0x0005eb87, 0x0009eb87, 0x000deb87, 0x0011eb87,
- 0x0015eb87, 0x0019eb87, 0x001deb87, 0x0001f387, 0x0005f387, 0x0009f387,
- 0x000df387, 0x0011f387, 0x0015f387, 0x0019f387, 0x001df387, 0x0001fb87,
- 0x0005fb87, 0x0009fb87, 0x000dfb87, 0x0011fb87, 0x0015fb87, 0x0019fb87,
- 0x001dfb87, 0x0001c397, 0x0005c397, 0x0009c397, 0x000dc397, 0x0011c397,
- 0x0015c397, 0x0019c397, 0x001dc397, 0x0001cb97, 0x0005cb97, 0x0009cb97,
- 0x000dcb97, 0x0011cb97, 0x0015cb97, 0x0019cb97, 0x001dcb97, 0x0001d397,
- 0x0005d397, 0x0009d397, 0x000dd397, 0x0011d397, 0x0015d397, 0x0019d397,
- 0x001dd397, 0x0001db97, 0x0005db97, 0x0009db97, 0x000ddb97, 0x0011db97,
- 0x0015db97, 0x0019db97, 0x001ddb97, 0x0001e397, 0x0005e397, 0x0009e397,
- 0x000de397, 0x0011e397, 0x0015e397, 0x0019e397, 0x001de397, 0x0001eb97,
- 0x0005eb97, 0x0009eb97, 0x000deb97, 0x0011eb97, 0x0015eb97, 0x0019eb97,
- 0x001deb97, 0x0001f397, 0x0005f397, 0x0009f397, 0x000df397, 0x0011f397,
- 0x0015f397, 0x0019f397, 0x001df397, 0x0001fb97, 0x0005fb97, 0x0009fb97,
- 0x000dfb97, 0x0011fb97, 0x0015fb97, 0x0019fb97, 0x001dfb97, 0x0001c3a7,
- 0x0005c3a7, 0x0009c3a7, 0x000dc3a7, 0x0011c3a7, 0x0015c3a7, 0x0019c3a7,
- 0x001dc3a7, 0x0001cba7, 0x0005cba7, 0x0009cba7, 0x000dcba7, 0x0011cba7,
- 0x0015cba7, 0x0019cba7, 0x001dcba7, 0x0001d3a7, 0x0005d3a7, 0x0009d3a7,
- 0x000dd3a7, 0x0011d3a7, 0x0015d3a7, 0x0019d3a7, 0x001dd3a7, 0x0001dba7,
- 0x0005dba7, 0x0009dba7, 0x000ddba7, 0x0011dba7, 0x0015dba7, 0x0019dba7,
- 0x001ddba7, 0x0001e3a7, 0x0005e3a7, 0x0009e3a7, 0x000de3a7, 0x0011e3a7,
- 0x0015e3a7, 0x0019e3a7, 0x001de3a7, 0x0001eba7, 0x0005eba7, 0x0009eba7,
- 0x000deba7, 0x0011eba7, 0x0015eba7, 0x0019eba7, 0x001deba7, 0x0001f3a7,
- 0x0005f3a7, 0x0009f3a7, 0x000df3a7, 0x0011f3a7, 0x0015f3a7, 0x0019f3a7,
- 0x001df3a7, 0x0001fba7, 0x0005fba7, 0x0009fba7, 0x000dfba7, 0x0011fba7,
- 0x0015fba7, 0x0019fba7, 0x001dfba7, 0x0001c3b7, 0x0005c3b7, 0x0009c3b7,
- 0x000dc3b7, 0x0011c3b7, 0x0015c3b7, 0x0019c3b7, 0x001dc3b7, 0x0001cbb7,
- 0x0005cbb7, 0x0009cbb7, 0x000dcbb7, 0x0011cbb7, 0x0015cbb7, 0x0019cbb7,
- 0x001dcbb7, 0x0001d3b7, 0x0005d3b7, 0x0009d3b7, 0x000dd3b7, 0x0011d3b7,
- 0x0015d3b7, 0x0019d3b7, 0x001dd3b7, 0x0001dbb7, 0x0005dbb7, 0x0009dbb7,
- 0x000ddbb7, 0x0011dbb7, 0x0015dbb7, 0x0019dbb7, 0x001ddbb7, 0x0001e3b7,
- 0x0005e3b7, 0x0009e3b7, 0x000de3b7, 0x0011e3b7, 0x0015e3b7, 0x0019e3b7,
- 0x001de3b7, 0x0001ebb7, 0x0005ebb7, 0x0009ebb7, 0x000debb7, 0x0011ebb7,
- 0x0015ebb7, 0x0019ebb7, 0x001debb7, 0x0001f3b7, 0x0005f3b7, 0x0009f3b7,
- 0x000df3b7, 0x0011f3b7, 0x0015f3b7, 0x0019f3b7, 0x001df3b7, 0x0001fbb7,
- 0x0005fbb7, 0x0009fbb7, 0x000dfbb7, 0x0011fbb7, 0x0015fbb7, 0x0019fbb7,
- 0x001dfbb7, 0x0001c3c7, 0x0005c3c7, 0x0009c3c7, 0x000dc3c7, 0x0011c3c7,
- 0x0015c3c7, 0x0019c3c7, 0x001dc3c7, 0x0001cbc7, 0x0005cbc7, 0x0009cbc7,
- 0x000dcbc7, 0x0011cbc7, 0x0015cbc7, 0x0019cbc7, 0x001dcbc7, 0x0001d3c7,
- 0x0005d3c7, 0x0009d3c7, 0x000dd3c7, 0x0011d3c7, 0x0015d3c7, 0x0019d3c7,
- 0x001dd3c7, 0x0001dbc7, 0x0005dbc7, 0x0009dbc7, 0x000ddbc7, 0x0011dbc7,
- 0x0015dbc7, 0x0019dbc7, 0x001ddbc7, 0x0001e3c7, 0x0005e3c7, 0x0009e3c7,
- 0x000de3c7, 0x0011e3c7, 0x0015e3c7, 0x0019e3c7, 0x001de3c7, 0x0001ebc7,
- 0x0005ebc7, 0x0009ebc7, 0x000debc7, 0x0011ebc7, 0x0015ebc7, 0x0019ebc7,
- 0x001debc7, 0x0001f3c7, 0x0005f3c7, 0x0009f3c7, 0x000df3c7, 0x0011f3c7,
- 0x0015f3c7, 0x0019f3c7, 0x001df3c7, 0x0001fbc7, 0x0005fbc7, 0x0009fbc7,
- 0x000dfbc7, 0x0011fbc7, 0x0015fbc7, 0x0019fbc7, 0x001dfbc7, 0x0001c3d7,
- 0x0005c3d7, 0x0009c3d7, 0x000dc3d7, 0x0011c3d7, 0x0015c3d7, 0x0019c3d7,
- 0x001dc3d7, 0x0001cbd7, 0x0005cbd7, 0x0009cbd7, 0x000dcbd7, 0x0011cbd7,
- 0x0015cbd7, 0x0019cbd7, 0x001dcbd7, 0x0001d3d7, 0x0005d3d7, 0x0009d3d7,
- 0x000dd3d7, 0x0011d3d7, 0x0015d3d7, 0x0019d3d7, 0x001dd3d7, 0x0001dbd7,
- 0x0005dbd7, 0x0009dbd7, 0x000ddbd7, 0x0011dbd7, 0x0015dbd7, 0x0019dbd7,
- 0x001ddbd7, 0x0001e3d7, 0x0005e3d7, 0x0009e3d7, 0x000de3d7, 0x0011e3d7,
- 0x0015e3d7, 0x0019e3d7, 0x001de3d7, 0x0001ebd7, 0x0005ebd7, 0x0009ebd7,
- 0x000debd7, 0x0011ebd7, 0x0015ebd7, 0x0019ebd7, 0x001debd7, 0x0001f3d7,
- 0x0005f3d7, 0x0009f3d7, 0x000df3d7, 0x0011f3d7, 0x0015f3d7, 0x0019f3d7,
- 0x001df3d7, 0x0001fbd7, 0x0005fbd7, 0x0009fbd7, 0x000dfbd7, 0x0011fbd7,
- 0x0015fbd7, 0x0019fbd7, 0x001dfbd7, 0x0001c3e7, 0x0005c3e7, 0x0009c3e7,
- 0x000dc3e7, 0x0011c3e7, 0x0015c3e7, 0x0019c3e7, 0x001dc3e7, 0x0001cbe7,
- 0x0005cbe7, 0x0009cbe7, 0x000dcbe7, 0x0011cbe7, 0x0015cbe7, 0x0019cbe7,
- 0x001dcbe7, 0x0001d3e7, 0x0005d3e7, 0x0009d3e7, 0x000dd3e7, 0x0011d3e7,
- 0x0015d3e7, 0x0019d3e7, 0x001dd3e7, 0x0001dbe7, 0x0005dbe7, 0x0009dbe7,
- 0x000ddbe7, 0x0011dbe7, 0x0015dbe7, 0x0019dbe7, 0x001ddbe7, 0x0001e3e7,
- 0x0005e3e7, 0x0009e3e7, 0x000de3e7, 0x0011e3e7, 0x0015e3e7, 0x0019e3e7,
- 0x001de3e7, 0x0001ebe7, 0x0005ebe7, 0x0009ebe7, 0x000debe7, 0x0011ebe7,
- 0x0015ebe7, 0x0019ebe7, 0x001debe7, 0x0001f3e7, 0x0005f3e7, 0x0009f3e7,
- 0x000df3e7, 0x0011f3e7, 0x0015f3e7, 0x0019f3e7, 0x001df3e7, 0x0001fbe7,
- 0x0005fbe7, 0x0009fbe7, 0x000dfbe7, 0x0011fbe7, 0x0015fbe7, 0x0019fbe7,
- 0x001dfbe7, 0x0001c3f7, 0x0005c3f7, 0x0009c3f7, 0x000dc3f7, 0x0011c3f7,
- 0x0015c3f7, 0x0019c3f7, 0x001dc3f7, 0x0001cbf7, 0x0005cbf7, 0x0009cbf7,
- 0x000dcbf7, 0x0011cbf7, 0x0015cbf7, 0x0019cbf7, 0x001dcbf7, 0x0001d3f7,
- 0x0005d3f7, 0x0009d3f7, 0x000dd3f7, 0x0011d3f7, 0x0015d3f7, 0x0019d3f7,
- 0x001dd3f7, 0x0001dbf7, 0x0005dbf7, 0x0009dbf7, 0x000ddbf7, 0x0011dbf7,
- 0x0015dbf7, 0x0019dbf7, 0x001ddbf7, 0x0001e3f7, 0x0005e3f7, 0x0009e3f7,
- 0x000de3f7, 0x0011e3f7, 0x0015e3f7, 0x0019e3f7, 0x001de3f7, 0x0001ebf7,
- 0x0005ebf7, 0x0009ebf7, 0x000debf7, 0x0011ebf7, 0x0015ebf7, 0x0019ebf7,
- 0x001debf7, 0x0001f3f7, 0x0005f3f7, 0x0009f3f7, 0x000df3f7, 0x0011f3f7,
- 0x0015f3f7, 0x0019f3f7, 0x001df3f7, 0x0001fbf7, 0x0005fbf7, 0x0009fbf7,
- 0x000dfbf7, 0x0011fbf7, 0x0015fbf7, 0x0019fbf7, 0x001dfbf7, 0x00e1c387,
- 0x02e1c387, 0x04e1c387, 0x06e1c387, 0x08e1c387, 0x0ae1c387, 0x0ce1c387,
- 0x0ee1c387, 0x00e5c387, 0x02e5c387, 0x04e5c387, 0x06e5c387, 0x08e5c387,
- 0x0ae5c387, 0x0ce5c387, 0x0ee5c387, 0x00e9c387, 0x02e9c387, 0x04e9c387,
- 0x06e9c387, 0x08e9c387, 0x0ae9c387, 0x0ce9c387, 0x0ee9c387, 0x00edc387,
- 0x02edc387, 0x04edc387, 0x06edc387, 0x08edc387, 0x0aedc387, 0x0cedc387,
- 0x0eedc387, 0x00f1c387, 0x02f1c387, 0x04f1c387, 0x06f1c387, 0x08f1c387,
- 0x0af1c387, 0x0cf1c387, 0x0ef1c387, 0x00f5c387, 0x02f5c387, 0x04f5c387,
- 0x06f5c387, 0x08f5c387, 0x0af5c387, 0x0cf5c387, 0x0ef5c387, 0x00f9c387,
- 0x02f9c387, 0x04f9c387, 0x06f9c387, 0x08f9c387, 0x0af9c387, 0x0cf9c387,
- 0x0ef9c387, 0x00fdc387, 0x02fdc387, 0x04fdc387, 0x06fdc387, 0x08fdc387,
- 0x0afdc387, 0x0cfdc387, 0x0efdc387, 0x00e1cb87, 0x02e1cb87, 0x04e1cb87,
- 0x06e1cb87, 0x08e1cb87, 0x0ae1cb87, 0x0ce1cb87, 0x0ee1cb87, 0x00e5cb87,
- 0x02e5cb87, 0x04e5cb87, 0x06e5cb87, 0x08e5cb87, 0x0ae5cb87, 0x0ce5cb87,
- 0x0ee5cb87, 0x00e9cb87, 0x02e9cb87, 0x04e9cb87, 0x06e9cb87, 0x08e9cb87,
- 0x0ae9cb87, 0x0ce9cb87, 0x0ee9cb87, 0x00edcb87, 0x02edcb87, 0x04edcb87,
- 0x06edcb87, 0x08edcb87, 0x0aedcb87, 0x0cedcb87, 0x0eedcb87, 0x00f1cb87,
- 0x02f1cb87, 0x04f1cb87, 0x06f1cb87, 0x08f1cb87, 0x0af1cb87, 0x0cf1cb87,
- 0x0ef1cb87, 0x00f5cb87, 0x02f5cb87, 0x04f5cb87, 0x06f5cb87, 0x08f5cb87,
- 0x0af5cb87, 0x0cf5cb87, 0x0ef5cb87, 0x00f9cb87, 0x02f9cb87, 0x04f9cb87,
- 0x06f9cb87, 0x08f9cb87,
-};
-
-static const uint32_t kZeroRepsDepth[BROTLI_NUM_COMMAND_SYMBOLS] = {
- 0, 4, 8, 7, 7, 7, 7, 7, 7, 7, 7, 11, 14, 14, 14, 14,
- 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
- 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
- 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
- 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 21, 21, 21, 21, 21,
- 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
- 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
- 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
- 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
- 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
- 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
- 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
- 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
- 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
- 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
- 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
- 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
- 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
- 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
- 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
- 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
- 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
- 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
- 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
- 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
- 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
- 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
- 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
- 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
- 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
- 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
- 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
- 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
- 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
- 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
- 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
- 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 28, 28, 28, 28, 28,
- 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
- 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
- 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
- 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
- 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
- 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
- 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
-};
-
-static const uint64_t kNonZeroRepsBits[BROTLI_NUM_COMMAND_SYMBOLS] = {
- 0x0000000b, 0x0000001b, 0x0000002b, 0x0000003b, 0x000002cb, 0x000006cb,
- 0x00000acb, 0x00000ecb, 0x000002db, 0x000006db, 0x00000adb, 0x00000edb,
- 0x000002eb, 0x000006eb, 0x00000aeb, 0x00000eeb, 0x000002fb, 0x000006fb,
- 0x00000afb, 0x00000efb, 0x0000b2cb, 0x0001b2cb, 0x0002b2cb, 0x0003b2cb,
- 0x0000b6cb, 0x0001b6cb, 0x0002b6cb, 0x0003b6cb, 0x0000bacb, 0x0001bacb,
- 0x0002bacb, 0x0003bacb, 0x0000becb, 0x0001becb, 0x0002becb, 0x0003becb,
- 0x0000b2db, 0x0001b2db, 0x0002b2db, 0x0003b2db, 0x0000b6db, 0x0001b6db,
- 0x0002b6db, 0x0003b6db, 0x0000badb, 0x0001badb, 0x0002badb, 0x0003badb,
- 0x0000bedb, 0x0001bedb, 0x0002bedb, 0x0003bedb, 0x0000b2eb, 0x0001b2eb,
- 0x0002b2eb, 0x0003b2eb, 0x0000b6eb, 0x0001b6eb, 0x0002b6eb, 0x0003b6eb,
- 0x0000baeb, 0x0001baeb, 0x0002baeb, 0x0003baeb, 0x0000beeb, 0x0001beeb,
- 0x0002beeb, 0x0003beeb, 0x0000b2fb, 0x0001b2fb, 0x0002b2fb, 0x0003b2fb,
- 0x0000b6fb, 0x0001b6fb, 0x0002b6fb, 0x0003b6fb, 0x0000bafb, 0x0001bafb,
- 0x0002bafb, 0x0003bafb, 0x0000befb, 0x0001befb, 0x0002befb, 0x0003befb,
- 0x002cb2cb, 0x006cb2cb, 0x00acb2cb, 0x00ecb2cb, 0x002db2cb, 0x006db2cb,
- 0x00adb2cb, 0x00edb2cb, 0x002eb2cb, 0x006eb2cb, 0x00aeb2cb, 0x00eeb2cb,
- 0x002fb2cb, 0x006fb2cb, 0x00afb2cb, 0x00efb2cb, 0x002cb6cb, 0x006cb6cb,
- 0x00acb6cb, 0x00ecb6cb, 0x002db6cb, 0x006db6cb, 0x00adb6cb, 0x00edb6cb,
- 0x002eb6cb, 0x006eb6cb, 0x00aeb6cb, 0x00eeb6cb, 0x002fb6cb, 0x006fb6cb,
- 0x00afb6cb, 0x00efb6cb, 0x002cbacb, 0x006cbacb, 0x00acbacb, 0x00ecbacb,
- 0x002dbacb, 0x006dbacb, 0x00adbacb, 0x00edbacb, 0x002ebacb, 0x006ebacb,
- 0x00aebacb, 0x00eebacb, 0x002fbacb, 0x006fbacb, 0x00afbacb, 0x00efbacb,
- 0x002cbecb, 0x006cbecb, 0x00acbecb, 0x00ecbecb, 0x002dbecb, 0x006dbecb,
- 0x00adbecb, 0x00edbecb, 0x002ebecb, 0x006ebecb, 0x00aebecb, 0x00eebecb,
- 0x002fbecb, 0x006fbecb, 0x00afbecb, 0x00efbecb, 0x002cb2db, 0x006cb2db,
- 0x00acb2db, 0x00ecb2db, 0x002db2db, 0x006db2db, 0x00adb2db, 0x00edb2db,
- 0x002eb2db, 0x006eb2db, 0x00aeb2db, 0x00eeb2db, 0x002fb2db, 0x006fb2db,
- 0x00afb2db, 0x00efb2db, 0x002cb6db, 0x006cb6db, 0x00acb6db, 0x00ecb6db,
- 0x002db6db, 0x006db6db, 0x00adb6db, 0x00edb6db, 0x002eb6db, 0x006eb6db,
- 0x00aeb6db, 0x00eeb6db, 0x002fb6db, 0x006fb6db, 0x00afb6db, 0x00efb6db,
- 0x002cbadb, 0x006cbadb, 0x00acbadb, 0x00ecbadb, 0x002dbadb, 0x006dbadb,
- 0x00adbadb, 0x00edbadb, 0x002ebadb, 0x006ebadb, 0x00aebadb, 0x00eebadb,
- 0x002fbadb, 0x006fbadb, 0x00afbadb, 0x00efbadb, 0x002cbedb, 0x006cbedb,
- 0x00acbedb, 0x00ecbedb, 0x002dbedb, 0x006dbedb, 0x00adbedb, 0x00edbedb,
- 0x002ebedb, 0x006ebedb, 0x00aebedb, 0x00eebedb, 0x002fbedb, 0x006fbedb,
- 0x00afbedb, 0x00efbedb, 0x002cb2eb, 0x006cb2eb, 0x00acb2eb, 0x00ecb2eb,
- 0x002db2eb, 0x006db2eb, 0x00adb2eb, 0x00edb2eb, 0x002eb2eb, 0x006eb2eb,
- 0x00aeb2eb, 0x00eeb2eb, 0x002fb2eb, 0x006fb2eb, 0x00afb2eb, 0x00efb2eb,
- 0x002cb6eb, 0x006cb6eb, 0x00acb6eb, 0x00ecb6eb, 0x002db6eb, 0x006db6eb,
- 0x00adb6eb, 0x00edb6eb, 0x002eb6eb, 0x006eb6eb, 0x00aeb6eb, 0x00eeb6eb,
- 0x002fb6eb, 0x006fb6eb, 0x00afb6eb, 0x00efb6eb, 0x002cbaeb, 0x006cbaeb,
- 0x00acbaeb, 0x00ecbaeb, 0x002dbaeb, 0x006dbaeb, 0x00adbaeb, 0x00edbaeb,
- 0x002ebaeb, 0x006ebaeb, 0x00aebaeb, 0x00eebaeb, 0x002fbaeb, 0x006fbaeb,
- 0x00afbaeb, 0x00efbaeb, 0x002cbeeb, 0x006cbeeb, 0x00acbeeb, 0x00ecbeeb,
- 0x002dbeeb, 0x006dbeeb, 0x00adbeeb, 0x00edbeeb, 0x002ebeeb, 0x006ebeeb,
- 0x00aebeeb, 0x00eebeeb, 0x002fbeeb, 0x006fbeeb, 0x00afbeeb, 0x00efbeeb,
- 0x002cb2fb, 0x006cb2fb, 0x00acb2fb, 0x00ecb2fb, 0x002db2fb, 0x006db2fb,
- 0x00adb2fb, 0x00edb2fb, 0x002eb2fb, 0x006eb2fb, 0x00aeb2fb, 0x00eeb2fb,
- 0x002fb2fb, 0x006fb2fb, 0x00afb2fb, 0x00efb2fb, 0x002cb6fb, 0x006cb6fb,
- 0x00acb6fb, 0x00ecb6fb, 0x002db6fb, 0x006db6fb, 0x00adb6fb, 0x00edb6fb,
- 0x002eb6fb, 0x006eb6fb, 0x00aeb6fb, 0x00eeb6fb, 0x002fb6fb, 0x006fb6fb,
- 0x00afb6fb, 0x00efb6fb, 0x002cbafb, 0x006cbafb, 0x00acbafb, 0x00ecbafb,
- 0x002dbafb, 0x006dbafb, 0x00adbafb, 0x00edbafb, 0x002ebafb, 0x006ebafb,
- 0x00aebafb, 0x00eebafb, 0x002fbafb, 0x006fbafb, 0x00afbafb, 0x00efbafb,
- 0x002cbefb, 0x006cbefb, 0x00acbefb, 0x00ecbefb, 0x002dbefb, 0x006dbefb,
- 0x00adbefb, 0x00edbefb, 0x002ebefb, 0x006ebefb, 0x00aebefb, 0x00eebefb,
- 0x002fbefb, 0x006fbefb, 0x00afbefb, 0x00efbefb, 0x0b2cb2cb, 0x1b2cb2cb,
- 0x2b2cb2cb, 0x3b2cb2cb, 0x0b6cb2cb, 0x1b6cb2cb, 0x2b6cb2cb, 0x3b6cb2cb,
- 0x0bacb2cb, 0x1bacb2cb, 0x2bacb2cb, 0x3bacb2cb, 0x0becb2cb, 0x1becb2cb,
- 0x2becb2cb, 0x3becb2cb, 0x0b2db2cb, 0x1b2db2cb, 0x2b2db2cb, 0x3b2db2cb,
- 0x0b6db2cb, 0x1b6db2cb, 0x2b6db2cb, 0x3b6db2cb, 0x0badb2cb, 0x1badb2cb,
- 0x2badb2cb, 0x3badb2cb, 0x0bedb2cb, 0x1bedb2cb, 0x2bedb2cb, 0x3bedb2cb,
- 0x0b2eb2cb, 0x1b2eb2cb, 0x2b2eb2cb, 0x3b2eb2cb, 0x0b6eb2cb, 0x1b6eb2cb,
- 0x2b6eb2cb, 0x3b6eb2cb, 0x0baeb2cb, 0x1baeb2cb, 0x2baeb2cb, 0x3baeb2cb,
- 0x0beeb2cb, 0x1beeb2cb, 0x2beeb2cb, 0x3beeb2cb, 0x0b2fb2cb, 0x1b2fb2cb,
- 0x2b2fb2cb, 0x3b2fb2cb, 0x0b6fb2cb, 0x1b6fb2cb, 0x2b6fb2cb, 0x3b6fb2cb,
- 0x0bafb2cb, 0x1bafb2cb, 0x2bafb2cb, 0x3bafb2cb, 0x0befb2cb, 0x1befb2cb,
- 0x2befb2cb, 0x3befb2cb, 0x0b2cb6cb, 0x1b2cb6cb, 0x2b2cb6cb, 0x3b2cb6cb,
- 0x0b6cb6cb, 0x1b6cb6cb, 0x2b6cb6cb, 0x3b6cb6cb, 0x0bacb6cb, 0x1bacb6cb,
- 0x2bacb6cb, 0x3bacb6cb, 0x0becb6cb, 0x1becb6cb, 0x2becb6cb, 0x3becb6cb,
- 0x0b2db6cb, 0x1b2db6cb, 0x2b2db6cb, 0x3b2db6cb, 0x0b6db6cb, 0x1b6db6cb,
- 0x2b6db6cb, 0x3b6db6cb, 0x0badb6cb, 0x1badb6cb, 0x2badb6cb, 0x3badb6cb,
- 0x0bedb6cb, 0x1bedb6cb, 0x2bedb6cb, 0x3bedb6cb, 0x0b2eb6cb, 0x1b2eb6cb,
- 0x2b2eb6cb, 0x3b2eb6cb, 0x0b6eb6cb, 0x1b6eb6cb, 0x2b6eb6cb, 0x3b6eb6cb,
- 0x0baeb6cb, 0x1baeb6cb, 0x2baeb6cb, 0x3baeb6cb, 0x0beeb6cb, 0x1beeb6cb,
- 0x2beeb6cb, 0x3beeb6cb, 0x0b2fb6cb, 0x1b2fb6cb, 0x2b2fb6cb, 0x3b2fb6cb,
- 0x0b6fb6cb, 0x1b6fb6cb, 0x2b6fb6cb, 0x3b6fb6cb, 0x0bafb6cb, 0x1bafb6cb,
- 0x2bafb6cb, 0x3bafb6cb, 0x0befb6cb, 0x1befb6cb, 0x2befb6cb, 0x3befb6cb,
- 0x0b2cbacb, 0x1b2cbacb, 0x2b2cbacb, 0x3b2cbacb, 0x0b6cbacb, 0x1b6cbacb,
- 0x2b6cbacb, 0x3b6cbacb, 0x0bacbacb, 0x1bacbacb, 0x2bacbacb, 0x3bacbacb,
- 0x0becbacb, 0x1becbacb, 0x2becbacb, 0x3becbacb, 0x0b2dbacb, 0x1b2dbacb,
- 0x2b2dbacb, 0x3b2dbacb, 0x0b6dbacb, 0x1b6dbacb, 0x2b6dbacb, 0x3b6dbacb,
- 0x0badbacb, 0x1badbacb, 0x2badbacb, 0x3badbacb, 0x0bedbacb, 0x1bedbacb,
- 0x2bedbacb, 0x3bedbacb, 0x0b2ebacb, 0x1b2ebacb, 0x2b2ebacb, 0x3b2ebacb,
- 0x0b6ebacb, 0x1b6ebacb, 0x2b6ebacb, 0x3b6ebacb, 0x0baebacb, 0x1baebacb,
- 0x2baebacb, 0x3baebacb, 0x0beebacb, 0x1beebacb, 0x2beebacb, 0x3beebacb,
- 0x0b2fbacb, 0x1b2fbacb, 0x2b2fbacb, 0x3b2fbacb, 0x0b6fbacb, 0x1b6fbacb,
- 0x2b6fbacb, 0x3b6fbacb, 0x0bafbacb, 0x1bafbacb, 0x2bafbacb, 0x3bafbacb,
- 0x0befbacb, 0x1befbacb, 0x2befbacb, 0x3befbacb, 0x0b2cbecb, 0x1b2cbecb,
- 0x2b2cbecb, 0x3b2cbecb, 0x0b6cbecb, 0x1b6cbecb, 0x2b6cbecb, 0x3b6cbecb,
- 0x0bacbecb, 0x1bacbecb, 0x2bacbecb, 0x3bacbecb, 0x0becbecb, 0x1becbecb,
- 0x2becbecb, 0x3becbecb, 0x0b2dbecb, 0x1b2dbecb, 0x2b2dbecb, 0x3b2dbecb,
- 0x0b6dbecb, 0x1b6dbecb, 0x2b6dbecb, 0x3b6dbecb, 0x0badbecb, 0x1badbecb,
- 0x2badbecb, 0x3badbecb, 0x0bedbecb, 0x1bedbecb, 0x2bedbecb, 0x3bedbecb,
- 0x0b2ebecb, 0x1b2ebecb, 0x2b2ebecb, 0x3b2ebecb, 0x0b6ebecb, 0x1b6ebecb,
- 0x2b6ebecb, 0x3b6ebecb, 0x0baebecb, 0x1baebecb, 0x2baebecb, 0x3baebecb,
- 0x0beebecb, 0x1beebecb, 0x2beebecb, 0x3beebecb, 0x0b2fbecb, 0x1b2fbecb,
- 0x2b2fbecb, 0x3b2fbecb, 0x0b6fbecb, 0x1b6fbecb, 0x2b6fbecb, 0x3b6fbecb,
- 0x0bafbecb, 0x1bafbecb, 0x2bafbecb, 0x3bafbecb, 0x0befbecb, 0x1befbecb,
- 0x2befbecb, 0x3befbecb, 0x0b2cb2db, 0x1b2cb2db, 0x2b2cb2db, 0x3b2cb2db,
- 0x0b6cb2db, 0x1b6cb2db, 0x2b6cb2db, 0x3b6cb2db, 0x0bacb2db, 0x1bacb2db,
- 0x2bacb2db, 0x3bacb2db, 0x0becb2db, 0x1becb2db, 0x2becb2db, 0x3becb2db,
- 0x0b2db2db, 0x1b2db2db, 0x2b2db2db, 0x3b2db2db, 0x0b6db2db, 0x1b6db2db,
- 0x2b6db2db, 0x3b6db2db, 0x0badb2db, 0x1badb2db, 0x2badb2db, 0x3badb2db,
- 0x0bedb2db, 0x1bedb2db, 0x2bedb2db, 0x3bedb2db, 0x0b2eb2db, 0x1b2eb2db,
- 0x2b2eb2db, 0x3b2eb2db, 0x0b6eb2db, 0x1b6eb2db, 0x2b6eb2db, 0x3b6eb2db,
- 0x0baeb2db, 0x1baeb2db, 0x2baeb2db, 0x3baeb2db, 0x0beeb2db, 0x1beeb2db,
- 0x2beeb2db, 0x3beeb2db, 0x0b2fb2db, 0x1b2fb2db, 0x2b2fb2db, 0x3b2fb2db,
- 0x0b6fb2db, 0x1b6fb2db, 0x2b6fb2db, 0x3b6fb2db, 0x0bafb2db, 0x1bafb2db,
- 0x2bafb2db, 0x3bafb2db, 0x0befb2db, 0x1befb2db, 0x2befb2db, 0x3befb2db,
- 0x0b2cb6db, 0x1b2cb6db, 0x2b2cb6db, 0x3b2cb6db, 0x0b6cb6db, 0x1b6cb6db,
- 0x2b6cb6db, 0x3b6cb6db, 0x0bacb6db, 0x1bacb6db, 0x2bacb6db, 0x3bacb6db,
- 0x0becb6db, 0x1becb6db, 0x2becb6db, 0x3becb6db, 0x0b2db6db, 0x1b2db6db,
- 0x2b2db6db, 0x3b2db6db, 0x0b6db6db, 0x1b6db6db, 0x2b6db6db, 0x3b6db6db,
- 0x0badb6db, 0x1badb6db, 0x2badb6db, 0x3badb6db, 0x0bedb6db, 0x1bedb6db,
- 0x2bedb6db, 0x3bedb6db, 0x0b2eb6db, 0x1b2eb6db, 0x2b2eb6db, 0x3b2eb6db,
- 0x0b6eb6db, 0x1b6eb6db, 0x2b6eb6db, 0x3b6eb6db, 0x0baeb6db, 0x1baeb6db,
- 0x2baeb6db, 0x3baeb6db,
-};
-
-static const uint32_t kNonZeroRepsDepth[BROTLI_NUM_COMMAND_SYMBOLS] = {
- 6, 6, 6, 6, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
- 12, 12, 12, 12, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
- 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
- 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
- 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
- 18, 18, 18, 18, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
- 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
- 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
- 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
- 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
- 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
- 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
- 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
- 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
- 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
- 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
- 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
- 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
- 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
- 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
- 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
- 24, 24, 24, 24, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,
-};
-
-static const uint16_t kStaticCommandCodeBits[BROTLI_NUM_COMMAND_SYMBOLS] = {
- 0, 256, 128, 384, 64, 320, 192, 448,
- 32, 288, 160, 416, 96, 352, 224, 480,
- 16, 272, 144, 400, 80, 336, 208, 464,
- 48, 304, 176, 432, 112, 368, 240, 496,
- 8, 264, 136, 392, 72, 328, 200, 456,
- 40, 296, 168, 424, 104, 360, 232, 488,
- 24, 280, 152, 408, 88, 344, 216, 472,
- 56, 312, 184, 440, 120, 376, 248, 504,
- 4, 260, 132, 388, 68, 324, 196, 452,
- 36, 292, 164, 420, 100, 356, 228, 484,
- 20, 276, 148, 404, 84, 340, 212, 468,
- 52, 308, 180, 436, 116, 372, 244, 500,
- 12, 268, 140, 396, 76, 332, 204, 460,
- 44, 300, 172, 428, 108, 364, 236, 492,
- 28, 284, 156, 412, 92, 348, 220, 476,
- 60, 316, 188, 444, 124, 380, 252, 508,
- 2, 258, 130, 386, 66, 322, 194, 450,
- 34, 290, 162, 418, 98, 354, 226, 482,
- 18, 274, 146, 402, 82, 338, 210, 466,
- 50, 306, 178, 434, 114, 370, 242, 498,
- 10, 266, 138, 394, 74, 330, 202, 458,
- 42, 298, 170, 426, 106, 362, 234, 490,
- 26, 282, 154, 410, 90, 346, 218, 474,
- 58, 314, 186, 442, 122, 378, 250, 506,
- 6, 262, 134, 390, 70, 326, 198, 454,
- 38, 294, 166, 422, 102, 358, 230, 486,
- 22, 278, 150, 406, 86, 342, 214, 470,
- 54, 310, 182, 438, 118, 374, 246, 502,
- 14, 270, 142, 398, 78, 334, 206, 462,
- 46, 302, 174, 430, 110, 366, 238, 494,
- 30, 286, 158, 414, 94, 350, 222, 478,
- 62, 318, 190, 446, 126, 382, 254, 510,
- 1, 257, 129, 385, 65, 321, 193, 449,
- 33, 289, 161, 417, 97, 353, 225, 481,
- 17, 273, 145, 401, 81, 337, 209, 465,
- 49, 305, 177, 433, 113, 369, 241, 497,
- 9, 265, 137, 393, 73, 329, 201, 457,
- 41, 297, 169, 425, 105, 361, 233, 489,
- 25, 281, 153, 409, 89, 345, 217, 473,
- 57, 313, 185, 441, 121, 377, 249, 505,
- 5, 261, 133, 389, 69, 325, 197, 453,
- 37, 293, 165, 421, 101, 357, 229, 485,
- 21, 277, 149, 405, 85, 341, 213, 469,
- 53, 309, 181, 437, 117, 373, 245, 501,
- 13, 269, 141, 397, 77, 333, 205, 461,
- 45, 301, 173, 429, 109, 365, 237, 493,
- 29, 285, 157, 413, 93, 349, 221, 477,
- 61, 317, 189, 445, 125, 381, 253, 509,
- 3, 259, 131, 387, 67, 323, 195, 451,
- 35, 291, 163, 419, 99, 355, 227, 483,
- 19, 275, 147, 403, 83, 339, 211, 467,
- 51, 307, 179, 435, 115, 371, 243, 499,
- 11, 267, 139, 395, 75, 331, 203, 459,
- 43, 299, 171, 427, 107, 363, 235, 491,
- 27, 283, 155, 411, 91, 347, 219, 475,
- 59, 315, 187, 443, 123, 379, 251, 507,
- 7, 1031, 519, 1543, 263, 1287, 775, 1799,
- 135, 1159, 647, 1671, 391, 1415, 903, 1927,
- 71, 1095, 583, 1607, 327, 1351, 839, 1863,
- 199, 1223, 711, 1735, 455, 1479, 967, 1991,
- 39, 1063, 551, 1575, 295, 1319, 807, 1831,
- 167, 1191, 679, 1703, 423, 1447, 935, 1959,
- 103, 1127, 615, 1639, 359, 1383, 871, 1895,
- 231, 1255, 743, 1767, 487, 1511, 999, 2023,
- 23, 1047, 535, 1559, 279, 1303, 791, 1815,
- 151, 1175, 663, 1687, 407, 1431, 919, 1943,
- 87, 1111, 599, 1623, 343, 1367, 855, 1879,
- 215, 1239, 727, 1751, 471, 1495, 983, 2007,
- 55, 1079, 567, 1591, 311, 1335, 823, 1847,
- 183, 1207, 695, 1719, 439, 1463, 951, 1975,
- 119, 1143, 631, 1655, 375, 1399, 887, 1911,
- 247, 1271, 759, 1783, 503, 1527, 1015, 2039,
- 15, 1039, 527, 1551, 271, 1295, 783, 1807,
- 143, 1167, 655, 1679, 399, 1423, 911, 1935,
- 79, 1103, 591, 1615, 335, 1359, 847, 1871,
- 207, 1231, 719, 1743, 463, 1487, 975, 1999,
- 47, 1071, 559, 1583, 303, 1327, 815, 1839,
- 175, 1199, 687, 1711, 431, 1455, 943, 1967,
- 111, 1135, 623, 1647, 367, 1391, 879, 1903,
- 239, 1263, 751, 1775, 495, 1519, 1007, 2031,
- 31, 1055, 543, 1567, 287, 1311, 799, 1823,
- 159, 1183, 671, 1695, 415, 1439, 927, 1951,
- 95, 1119, 607, 1631, 351, 1375, 863, 1887,
- 223, 1247, 735, 1759, 479, 1503, 991, 2015,
- 63, 1087, 575, 1599, 319, 1343, 831, 1855,
- 191, 1215, 703, 1727, 447, 1471, 959, 1983,
- 127, 1151, 639, 1663, 383, 1407, 895, 1919,
- 255, 1279, 767, 1791, 511, 1535, 1023, 2047,
-};
-
-static BROTLI_INLINE void StoreStaticCommandHuffmanTree(
- size_t* storage_ix, uint8_t* storage) {
- BrotliWriteBits(
- 56, BROTLI_MAKE_UINT64_T(0x926244U, 0x16307003U), storage_ix, storage);
- BrotliWriteBits(3, 0x00000000U, storage_ix, storage);
-}
-
-static const uint16_t kStaticDistanceCodeBits[64] = {
- 0, 32, 16, 48, 8, 40, 24, 56, 4, 36, 20, 52, 12, 44, 28, 60,
- 2, 34, 18, 50, 10, 42, 26, 58, 6, 38, 22, 54, 14, 46, 30, 62,
- 1, 33, 17, 49, 9, 41, 25, 57, 5, 37, 21, 53, 13, 45, 29, 61,
- 3, 35, 19, 51, 11, 43, 27, 59, 7, 39, 23, 55, 15, 47, 31, 63,
-};
-
-static BROTLI_INLINE void StoreStaticDistanceHuffmanTree(
- size_t* storage_ix, uint8_t* storage) {
- BrotliWriteBits(28, 0x0369DC03u, storage_ix, storage);
-}
-
-#if defined(__cplusplus) || defined(c_plusplus)
-} /* extern "C" */
-#endif
-
-#endif /* BROTLI_ENC_ENTROPY_ENCODE_STATIC_H_ */
diff --git a/BaseTools/Source/C/BrotliCompress/enc/fast_log.h b/BaseTools/Source/C/BrotliCompress/enc/fast_log.h
deleted file mode 100644
index dabc45ee96b8..000000000000
--- a/BaseTools/Source/C/BrotliCompress/enc/fast_log.h
+++ /dev/null
@@ -1,147 +0,0 @@
-/* Copyright 2013 Google Inc. All Rights Reserved.
-
- Distributed under MIT license.
- See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
-*/
-
-/* Utilities for fast computation of logarithms. */
-
-#ifndef BROTLI_ENC_FAST_LOG_H_
-#define BROTLI_ENC_FAST_LOG_H_
-
-#include <math.h>
-
-#include "../common/platform.h"
-#include <brotli/types.h>
-
-#if defined(__cplusplus) || defined(c_plusplus)
-extern "C" {
-#endif
-
-static BROTLI_INLINE uint32_t Log2FloorNonZero(size_t n) {
- /* TODO: generalize and move to platform.h */
-#if BROTLI_GNUC_HAS_BUILTIN(__builtin_clz, 3, 4, 0) || \
- BROTLI_INTEL_VERSION_CHECK(16, 0, 0)
- return 31u ^ (uint32_t)__builtin_clz((uint32_t)n);
-#else
- uint32_t result = 0;
- while (n >>= 1) result++;
- return result;
-#endif
-}
-
-/* A lookup table for small values of log2(int) to be used in entropy
- computation.
-
- ", ".join(["%.16ff" % x for x in [0.0]+[log2(x) for x in range(1, 256)]]) */
-static const float kLog2Table[] = {
- 0.0000000000000000f, 0.0000000000000000f, 1.0000000000000000f,
- 1.5849625007211563f, 2.0000000000000000f, 2.3219280948873622f,
- 2.5849625007211561f, 2.8073549220576042f, 3.0000000000000000f,
- 3.1699250014423126f, 3.3219280948873626f, 3.4594316186372978f,
- 3.5849625007211565f, 3.7004397181410922f, 3.8073549220576037f,
- 3.9068905956085187f, 4.0000000000000000f, 4.0874628412503400f,
- 4.1699250014423122f, 4.2479275134435852f, 4.3219280948873626f,
- 4.3923174227787607f, 4.4594316186372973f, 4.5235619560570131f,
- 4.5849625007211570f, 4.6438561897747244f, 4.7004397181410926f,
- 4.7548875021634691f, 4.8073549220576037f, 4.8579809951275728f,
- 4.9068905956085187f, 4.9541963103868758f, 5.0000000000000000f,
- 5.0443941193584534f, 5.0874628412503400f, 5.1292830169449664f,
- 5.1699250014423122f, 5.2094533656289501f, 5.2479275134435852f,
- 5.2854022188622487f, 5.3219280948873626f, 5.3575520046180838f,
- 5.3923174227787607f, 5.4262647547020979f, 5.4594316186372973f,
- 5.4918530963296748f, 5.5235619560570131f, 5.5545888516776376f,
- 5.5849625007211570f, 5.6147098441152083f, 5.6438561897747244f,
- 5.6724253419714961f, 5.7004397181410926f, 5.7279204545631996f,
- 5.7548875021634691f, 5.7813597135246599f, 5.8073549220576046f,
- 5.8328900141647422f, 5.8579809951275719f, 5.8826430493618416f,
- 5.9068905956085187f, 5.9307373375628867f, 5.9541963103868758f,
- 5.9772799234999168f, 6.0000000000000000f, 6.0223678130284544f,
- 6.0443941193584534f, 6.0660891904577721f, 6.0874628412503400f,
- 6.1085244567781700f, 6.1292830169449672f, 6.1497471195046822f,
- 6.1699250014423122f, 6.1898245588800176f, 6.2094533656289510f,
- 6.2288186904958804f, 6.2479275134435861f, 6.2667865406949019f,
- 6.2854022188622487f, 6.3037807481771031f, 6.3219280948873617f,
- 6.3398500028846252f, 6.3575520046180847f, 6.3750394313469254f,
- 6.3923174227787598f, 6.4093909361377026f, 6.4262647547020979f,
- 6.4429434958487288f, 6.4594316186372982f, 6.4757334309663976f,
- 6.4918530963296748f, 6.5077946401986964f, 6.5235619560570131f,
- 6.5391588111080319f, 6.5545888516776376f, 6.5698556083309478f,
- 6.5849625007211561f, 6.5999128421871278f, 6.6147098441152092f,
- 6.6293566200796095f, 6.6438561897747253f, 6.6582114827517955f,
- 6.6724253419714952f, 6.6865005271832185f, 6.7004397181410917f,
- 6.7142455176661224f, 6.7279204545631988f, 6.7414669864011465f,
- 6.7548875021634691f, 6.7681843247769260f, 6.7813597135246599f,
- 6.7944158663501062f, 6.8073549220576037f, 6.8201789624151887f,
- 6.8328900141647422f, 6.8454900509443757f, 6.8579809951275719f,
- 6.8703647195834048f, 6.8826430493618416f, 6.8948177633079437f,
- 6.9068905956085187f, 6.9188632372745955f, 6.9307373375628867f,
- 6.9425145053392399f, 6.9541963103868758f, 6.9657842846620879f,
- 6.9772799234999168f, 6.9886846867721664f, 7.0000000000000000f,
- 7.0112272554232540f, 7.0223678130284544f, 7.0334230015374501f,
- 7.0443941193584534f, 7.0552824355011898f, 7.0660891904577721f,
- 7.0768155970508317f, 7.0874628412503400f, 7.0980320829605272f,
- 7.1085244567781700f, 7.1189410727235076f, 7.1292830169449664f,
- 7.1395513523987937f, 7.1497471195046822f, 7.1598713367783891f,
- 7.1699250014423130f, 7.1799090900149345f, 7.1898245588800176f,
- 7.1996723448363644f, 7.2094533656289492f, 7.2191685204621621f,
- 7.2288186904958804f, 7.2384047393250794f, 7.2479275134435861f,
- 7.2573878426926521f, 7.2667865406949019f, 7.2761244052742384f,
- 7.2854022188622487f, 7.2946207488916270f, 7.3037807481771031f,
- 7.3128829552843557f, 7.3219280948873617f, 7.3309168781146177f,
- 7.3398500028846243f, 7.3487281542310781f, 7.3575520046180847f,
- 7.3663222142458151f, 7.3750394313469254f, 7.3837042924740528f,
- 7.3923174227787607f, 7.4008794362821844f, 7.4093909361377026f,
- 7.4178525148858991f, 7.4262647547020979f, 7.4346282276367255f,
- 7.4429434958487288f, 7.4512111118323299f, 7.4594316186372973f,
- 7.4676055500829976f, 7.4757334309663976f, 7.4838157772642564f,
- 7.4918530963296748f, 7.4998458870832057f, 7.5077946401986964f,
- 7.5156998382840436f, 7.5235619560570131f, 7.5313814605163119f,
- 7.5391588111080319f, 7.5468944598876373f, 7.5545888516776376f,
- 7.5622424242210728f, 7.5698556083309478f, 7.5774288280357487f,
- 7.5849625007211561f, 7.5924570372680806f, 7.5999128421871278f,
- 7.6073303137496113f, 7.6147098441152075f, 7.6220518194563764f,
- 7.6293566200796095f, 7.6366246205436488f, 7.6438561897747244f,
- 7.6510516911789290f, 7.6582114827517955f, 7.6653359171851765f,
- 7.6724253419714952f, 7.6794800995054464f, 7.6865005271832185f,
- 7.6934869574993252f, 7.7004397181410926f, 7.7073591320808825f,
- 7.7142455176661224f, 7.7210991887071856f, 7.7279204545631996f,
- 7.7347096202258392f, 7.7414669864011465f, 7.7481928495894596f,
- 7.7548875021634691f, 7.7615512324444795f, 7.7681843247769260f,
- 7.7747870596011737f, 7.7813597135246608f, 7.7879025593914317f,
- 7.7944158663501062f, 7.8008998999203047f, 7.8073549220576037f,
- 7.8137811912170374f, 7.8201789624151887f, 7.8265484872909159f,
- 7.8328900141647422f, 7.8392037880969445f, 7.8454900509443757f,
- 7.8517490414160571f, 7.8579809951275719f, 7.8641861446542798f,
- 7.8703647195834048f, 7.8765169465650002f, 7.8826430493618425f,
- 7.8887432488982601f, 7.8948177633079446f, 7.9008668079807496f,
- 7.9068905956085187f, 7.9128893362299619f, 7.9188632372745955f,
- 7.9248125036057813f, 7.9307373375628867f, 7.9366379390025719f,
- 7.9425145053392399f, 7.9483672315846778f, 7.9541963103868758f,
- 7.9600019320680806f, 7.9657842846620870f, 7.9715435539507720f,
- 7.9772799234999168f, 7.9829935746943104f, 7.9886846867721664f,
- 7.9943534368588578f
-};
-
-#define LOG_2_INV 1.4426950408889634
-
-/* Faster logarithm for small integers, with the property of log2(0) == 0. */
-static BROTLI_INLINE double FastLog2(size_t v) {
- if (v < sizeof(kLog2Table) / sizeof(kLog2Table[0])) {
- return kLog2Table[v];
- }
-#if (defined(_MSC_VER) && _MSC_VER <= 1700) || \
- (defined(__ANDROID_API__) && __ANDROID_API__ < 18)
- /* Visual Studio 2012 and Android API levels < 18 do not have the log2()
- * function defined, so we use log() and a multiplication instead. */
- return log((double)v) * LOG_2_INV;
-#else
- return log2((double)v);
-#endif
-}
-
-#if defined(__cplusplus) || defined(c_plusplus)
-} /* extern "C" */
-#endif
-
-#endif /* BROTLI_ENC_FAST_LOG_H_ */
diff --git a/BaseTools/Source/C/BrotliCompress/enc/find_match_length.h b/BaseTools/Source/C/BrotliCompress/enc/find_match_length.h
deleted file mode 100644
index 6e1f44474baa..000000000000
--- a/BaseTools/Source/C/BrotliCompress/enc/find_match_length.h
+++ /dev/null
@@ -1,80 +0,0 @@
-/* Copyright 2010 Google Inc. All Rights Reserved.
-
- Distributed under MIT license.
- See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
-*/
-
-/* Function to find maximal matching prefixes of strings. */
-
-#ifndef BROTLI_ENC_FIND_MATCH_LENGTH_H_
-#define BROTLI_ENC_FIND_MATCH_LENGTH_H_
-
-#include "../common/platform.h"
-#include <brotli/types.h>
-
-#if defined(__cplusplus) || defined(c_plusplus)
-extern "C" {
-#endif
-
-/* Separate implementation for little-endian 64-bit targets, for speed. */
-#if defined(__GNUC__) && defined(_LP64) && defined(BROTLI_LITTLE_ENDIAN)
-
-static BROTLI_INLINE size_t FindMatchLengthWithLimit(const uint8_t* s1,
- const uint8_t* s2,
- size_t limit) {
- size_t matched = 0;
- size_t limit2 = (limit >> 3) + 1; /* + 1 is for pre-decrement in while */
- while (BROTLI_PREDICT_TRUE(--limit2)) {
- if (BROTLI_PREDICT_FALSE(BROTLI_UNALIGNED_LOAD64LE(s2) ==
- BROTLI_UNALIGNED_LOAD64LE(s1 + matched))) {
- s2 += 8;
- matched += 8;
- } else {
- uint64_t x = BROTLI_UNALIGNED_LOAD64LE(s2) ^
- BROTLI_UNALIGNED_LOAD64LE(s1 + matched);
- size_t matching_bits = (size_t)__builtin_ctzll(x);
- matched += matching_bits >> 3;
- return matched;
- }
- }
- limit = (limit & 7) + 1; /* + 1 is for pre-decrement in while */
- while (--limit) {
- if (BROTLI_PREDICT_TRUE(s1[matched] == *s2)) {
- ++s2;
- ++matched;
- } else {
- return matched;
- }
- }
- return matched;
-}
-#else
-static BROTLI_INLINE size_t FindMatchLengthWithLimit(const uint8_t* s1,
- const uint8_t* s2,
- size_t limit) {
- size_t matched = 0;
- const uint8_t* s2_limit = s2 + limit;
- const uint8_t* s2_ptr = s2;
- /* Find out how long the match is. We loop over the data 32 bits at a
- time until we find a 32-bit block that doesn't match; then we find
- the first non-matching bit and use that to calculate the total
- length of the match. */
- while (s2_ptr <= s2_limit - 4 &&
- BrotliUnalignedRead32(s2_ptr) ==
- BrotliUnalignedRead32(s1 + matched)) {
- s2_ptr += 4;
- matched += 4;
- }
- while ((s2_ptr < s2_limit) && (s1[matched] == *s2_ptr)) {
- ++s2_ptr;
- ++matched;
- }
- return matched;
-}
-#endif
-
-#if defined(__cplusplus) || defined(c_plusplus)
-} /* extern "C" */
-#endif
-
-#endif /* BROTLI_ENC_FIND_MATCH_LENGTH_H_ */
diff --git a/BaseTools/Source/C/BrotliCompress/enc/hash.h b/BaseTools/Source/C/BrotliCompress/enc/hash.h
deleted file mode 100644
index 9225d127ac58..000000000000
--- a/BaseTools/Source/C/BrotliCompress/enc/hash.h
+++ /dev/null
@@ -1,497 +0,0 @@
-/* Copyright 2010 Google Inc. All Rights Reserved.
-
- Distributed under MIT license.
- See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
-*/
-
-/* A (forgetful) hash table to the data seen by the compressor, to
- help create backward references to previous data. */
-
-#ifndef BROTLI_ENC_HASH_H_
-#define BROTLI_ENC_HASH_H_
-
-#include <string.h> /* memcmp, memset */
-
-#include "../common/constants.h"
-#include "../common/dictionary.h"
-#include "../common/platform.h"
-#include <brotli/types.h>
-#include "./encoder_dict.h"
-#include "./fast_log.h"
-#include "./find_match_length.h"
-#include "./memory.h"
-#include "./quality.h"
-#include "./static_dict.h"
-
-#if defined(__cplusplus) || defined(c_plusplus)
-extern "C" {
-#endif
-
-/* Pointer to hasher data.
- *
- * Excluding initialization and destruction, hasher can be passed as
- * HasherHandle by value.
- *
- * Typically hasher data consists of 3 sections:
- * * HasherCommon structure
- * * private structured hasher data, depending on hasher type
- * * private dynamic hasher data, depending on hasher type and parameters
- *
- * Using "define" instead of "typedef", because on MSVC __restrict does not work
- * on typedef pointer types. */
-#define HasherHandle uint8_t*
-
-typedef struct {
- BrotliHasherParams params;
-
- /* False if hasher needs to be "prepared" before use. */
- BROTLI_BOOL is_prepared_;
-
- size_t dict_num_lookups;
- size_t dict_num_matches;
-} HasherCommon;
-
-static BROTLI_INLINE HasherCommon* GetHasherCommon(HasherHandle handle) {
- return (HasherCommon*)handle;
-}
-
-#define score_t size_t
-
-static const uint32_t kCutoffTransformsCount = 10;
-/* 0, 12, 27, 23, 42, 63, 56, 48, 59, 64 */
-/* 0+0, 4+8, 8+19, 12+11, 16+26, 20+43, 24+32, 28+20, 32+27, 36+28 */
-static const uint64_t kCutoffTransforms =
- BROTLI_MAKE_UINT64_T(0x071B520A, 0xDA2D3200);
-
-typedef struct HasherSearchResult {
- size_t len;
- size_t distance;
- score_t score;
- int len_code_delta; /* == len_code - len */
-} HasherSearchResult;
-
-/* kHashMul32 multiplier has these properties:
- * The multiplier must be odd. Otherwise we may lose the highest bit.
- * No long streaks of ones or zeros.
- * There is no effort to ensure that it is a prime, the oddity is enough
- for this use.
- * The number has been tuned heuristically against compression benchmarks. */
-static const uint32_t kHashMul32 = 0x1E35A7BD;
-static const uint64_t kHashMul64 = BROTLI_MAKE_UINT64_T(0x1E35A7BD, 0x1E35A7BD);
-static const uint64_t kHashMul64Long =
- BROTLI_MAKE_UINT64_T(0x1FE35A7Bu, 0xD3579BD3u);
-
-static BROTLI_INLINE uint32_t Hash14(const uint8_t* data) {
- uint32_t h = BROTLI_UNALIGNED_LOAD32LE(data) * kHashMul32;
- /* The higher bits contain more mixture from the multiplication,
- so we take our results from there. */
- return h >> (32 - 14);
-}
-
-static BROTLI_INLINE void PrepareDistanceCache(
- int* BROTLI_RESTRICT distance_cache, const int num_distances) {
- if (num_distances > 4) {
- int last_distance = distance_cache[0];
- distance_cache[4] = last_distance - 1;
- distance_cache[5] = last_distance + 1;
- distance_cache[6] = last_distance - 2;
- distance_cache[7] = last_distance + 2;
- distance_cache[8] = last_distance - 3;
- distance_cache[9] = last_distance + 3;
- if (num_distances > 10) {
- int next_last_distance = distance_cache[1];
- distance_cache[10] = next_last_distance - 1;
- distance_cache[11] = next_last_distance + 1;
- distance_cache[12] = next_last_distance - 2;
- distance_cache[13] = next_last_distance + 2;
- distance_cache[14] = next_last_distance - 3;
- distance_cache[15] = next_last_distance + 3;
- }
- }
-}
-
-#define BROTLI_LITERAL_BYTE_SCORE 135
-#define BROTLI_DISTANCE_BIT_PENALTY 30
-/* Score must be positive after applying maximal penalty. */
-#define BROTLI_SCORE_BASE (BROTLI_DISTANCE_BIT_PENALTY * 8 * sizeof(size_t))
-
-/* Usually, we always choose the longest backward reference. This function
- allows for the exception of that rule.
-
- If we choose a backward reference that is further away, it will
- usually be coded with more bits. We approximate this by assuming
- log2(distance). If the distance can be expressed in terms of the
- last four distances, we use some heuristic constants to estimate
- the bits cost. For the first up to four literals we use the bit
- cost of the literals from the literal cost model, after that we
- use the average bit cost of the cost model.
-
- This function is used to sometimes discard a longer backward reference
- when it is not much longer and the bit cost for encoding it is more
- than the saved literals.
-
- backward_reference_offset MUST be positive. */
-static BROTLI_INLINE score_t BackwardReferenceScore(
- size_t copy_length, size_t backward_reference_offset) {
- return BROTLI_SCORE_BASE + BROTLI_LITERAL_BYTE_SCORE * (score_t)copy_length -
- BROTLI_DISTANCE_BIT_PENALTY * Log2FloorNonZero(backward_reference_offset);
-}
-
-static BROTLI_INLINE score_t BackwardReferenceScoreUsingLastDistance(
- size_t copy_length) {
- return BROTLI_LITERAL_BYTE_SCORE * (score_t)copy_length +
- BROTLI_SCORE_BASE + 15;
-}
-
-static BROTLI_INLINE score_t BackwardReferencePenaltyUsingLastDistance(
- size_t distance_short_code) {
- return (score_t)39 + ((0x1CA10 >> (distance_short_code & 0xE)) & 0xE);
-}
-
-static BROTLI_INLINE BROTLI_BOOL TestStaticDictionaryItem(
- const BrotliEncoderDictionary* dictionary, size_t item, const uint8_t* data,
- size_t max_length, size_t max_backward, size_t max_distance,
- HasherSearchResult* out) {
- size_t len;
- size_t word_idx;
- size_t offset;
- size_t matchlen;
- size_t backward;
- score_t score;
- len = item & 0x1F;
- word_idx = item >> 5;
- offset = dictionary->words->offsets_by_length[len] + len * word_idx;
- if (len > max_length) {
- return BROTLI_FALSE;
- }
-
- matchlen =
- FindMatchLengthWithLimit(data, &dictionary->words->data[offset], len);
- if (matchlen + dictionary->cutoffTransformsCount <= len || matchlen == 0) {
- return BROTLI_FALSE;
- }
- {
- size_t cut = len - matchlen;
- size_t transform_id = (cut << 2) +
- (size_t)((dictionary->cutoffTransforms >> (cut * 6)) & 0x3F);
- backward = max_backward + 1 + word_idx +
- (transform_id << dictionary->words->size_bits_by_length[len]);
- }
- if (backward > max_distance) {
- return BROTLI_FALSE;
- }
- score = BackwardReferenceScore(matchlen, backward);
- if (score < out->score) {
- return BROTLI_FALSE;
- }
- out->len = matchlen;
- out->len_code_delta = (int)len - (int)matchlen;
- out->distance = backward;
- out->score = score;
- return BROTLI_TRUE;
-}
-
-static BROTLI_INLINE void SearchInStaticDictionary(
- const BrotliEncoderDictionary* dictionary,
- HasherHandle handle, const uint8_t* data, size_t max_length,
- size_t max_backward, size_t max_distance,
- HasherSearchResult* out, BROTLI_BOOL shallow) {
- size_t key;
- size_t i;
- HasherCommon* self = GetHasherCommon(handle);
- if (self->dict_num_matches < (self->dict_num_lookups >> 7)) {
- return;
- }
- key = Hash14(data) << 1;
- for (i = 0; i < (shallow ? 1u : 2u); ++i, ++key) {
- size_t item = dictionary->hash_table[key];
- self->dict_num_lookups++;
- if (item != 0) {
- BROTLI_BOOL item_matches = TestStaticDictionaryItem(
- dictionary, item, data, max_length, max_backward, max_distance, out);
- if (item_matches) {
- self->dict_num_matches++;
- }
- }
- }
-}
-
-typedef struct BackwardMatch {
- uint32_t distance;
- uint32_t length_and_code;
-} BackwardMatch;
-
-static BROTLI_INLINE void InitBackwardMatch(BackwardMatch* self,
- size_t dist, size_t len) {
- self->distance = (uint32_t)dist;
- self->length_and_code = (uint32_t)(len << 5);
-}
-
-static BROTLI_INLINE void InitDictionaryBackwardMatch(BackwardMatch* self,
- size_t dist, size_t len, size_t len_code) {
- self->distance = (uint32_t)dist;
- self->length_and_code =
- (uint32_t)((len << 5) | (len == len_code ? 0 : len_code));
-}
-
-static BROTLI_INLINE size_t BackwardMatchLength(const BackwardMatch* self) {
- return self->length_and_code >> 5;
-}
-
-static BROTLI_INLINE size_t BackwardMatchLengthCode(const BackwardMatch* self) {
- size_t code = self->length_and_code & 31;
- return code ? code : BackwardMatchLength(self);
-}
-
-#define EXPAND_CAT(a, b) CAT(a, b)
-#define CAT(a, b) a ## b
-#define FN(X) EXPAND_CAT(X, HASHER())
-
-#define HASHER() H10
-#define BUCKET_BITS 17
-#define MAX_TREE_SEARCH_DEPTH 64
-#define MAX_TREE_COMP_LENGTH 128
-#include "./hash_to_binary_tree_inc.h" /* NOLINT(build/include) */
-#undef MAX_TREE_SEARCH_DEPTH
-#undef MAX_TREE_COMP_LENGTH
-#undef BUCKET_BITS
-#undef HASHER
-/* MAX_NUM_MATCHES == 64 + MAX_TREE_SEARCH_DEPTH */
-#define MAX_NUM_MATCHES_H10 128
-
-/* For BUCKET_SWEEP == 1, enabling the dictionary lookup makes compression
- a little faster (0.5% - 1%) and it compresses 0.15% better on small text
- and HTML inputs. */
-
-#define HASHER() H2
-#define BUCKET_BITS 16
-#define BUCKET_SWEEP 1
-#define HASH_LEN 5
-#define USE_DICTIONARY 1
-#include "./hash_longest_match_quickly_inc.h" /* NOLINT(build/include) */
-#undef BUCKET_SWEEP
-#undef USE_DICTIONARY
-#undef HASHER
-
-#define HASHER() H3
-#define BUCKET_SWEEP 2
-#define USE_DICTIONARY 0
-#include "./hash_longest_match_quickly_inc.h" /* NOLINT(build/include) */
-#undef USE_DICTIONARY
-#undef BUCKET_SWEEP
-#undef BUCKET_BITS
-#undef HASHER
-
-#define HASHER() H4
-#define BUCKET_BITS 17
-#define BUCKET_SWEEP 4
-#define USE_DICTIONARY 1
-#include "./hash_longest_match_quickly_inc.h" /* NOLINT(build/include) */
-#undef USE_DICTIONARY
-#undef HASH_LEN
-#undef BUCKET_SWEEP
-#undef BUCKET_BITS
-#undef HASHER
-
-#define HASHER() H5
-#include "./hash_longest_match_inc.h" /* NOLINT(build/include) */
-#undef HASHER
-
-#define HASHER() H6
-#include "./hash_longest_match64_inc.h" /* NOLINT(build/include) */
-#undef HASHER
-
-#define BUCKET_BITS 15
-
-#define NUM_LAST_DISTANCES_TO_CHECK 4
-#define NUM_BANKS 1
-#define BANK_BITS 16
-#define HASHER() H40
-#include "./hash_forgetful_chain_inc.h" /* NOLINT(build/include) */
-#undef HASHER
-#undef NUM_LAST_DISTANCES_TO_CHECK
-
-#define NUM_LAST_DISTANCES_TO_CHECK 10
-#define HASHER() H41
-#include "./hash_forgetful_chain_inc.h" /* NOLINT(build/include) */
-#undef HASHER
-#undef NUM_LAST_DISTANCES_TO_CHECK
-#undef NUM_BANKS
-#undef BANK_BITS
-
-#define NUM_LAST_DISTANCES_TO_CHECK 16
-#define NUM_BANKS 512
-#define BANK_BITS 9
-#define HASHER() H42
-#include "./hash_forgetful_chain_inc.h" /* NOLINT(build/include) */
-#undef HASHER
-#undef NUM_LAST_DISTANCES_TO_CHECK
-#undef NUM_BANKS
-#undef BANK_BITS
-
-#undef BUCKET_BITS
-
-#define HASHER() H54
-#define BUCKET_BITS 20
-#define BUCKET_SWEEP 4
-#define HASH_LEN 7
-#define USE_DICTIONARY 0
-#include "./hash_longest_match_quickly_inc.h" /* NOLINT(build/include) */
-#undef USE_DICTIONARY
-#undef HASH_LEN
-#undef BUCKET_SWEEP
-#undef BUCKET_BITS
-#undef HASHER
-
-/* fast large window hashers */
-
-#define HASHER() HROLLING_FAST
-#define CHUNKLEN 32
-#define JUMP 4
-#define NUMBUCKETS 16777216
-#define MASK ((NUMBUCKETS * 64) - 1)
-#include "./hash_rolling_inc.h" /* NOLINT(build/include) */
-#undef JUMP
-#undef HASHER
-
-
-#define HASHER() HROLLING
-#define JUMP 1
-#include "./hash_rolling_inc.h" /* NOLINT(build/include) */
-#undef MASK
-#undef NUMBUCKETS
-#undef JUMP
-#undef CHUNKLEN
-#undef HASHER
-
-#define HASHER() H35
-#define HASHER_A H3
-#define HASHER_B HROLLING_FAST
-#include "./hash_composite_inc.h" /* NOLINT(build/include) */
-#undef HASHER_A
-#undef HASHER_B
-#undef HASHER
-
-#define HASHER() H55
-#define HASHER_A H54
-#define HASHER_B HROLLING_FAST
-#include "./hash_composite_inc.h" /* NOLINT(build/include) */
-#undef HASHER_A
-#undef HASHER_B
-#undef HASHER
-
-#define HASHER() H65
-#define HASHER_A H6
-#define HASHER_B HROLLING
-#include "./hash_composite_inc.h" /* NOLINT(build/include) */
-#undef HASHER_A
-#undef HASHER_B
-#undef HASHER
-
-#undef FN
-#undef CAT
-#undef EXPAND_CAT
-
-#define FOR_GENERIC_HASHERS(H) H(2) H(3) H(4) H(5) H(6) H(40) H(41) H(42) H(54)\
- H(35) H(55) H(65)
-#define FOR_ALL_HASHERS(H) FOR_GENERIC_HASHERS(H) H(10)
-
-static BROTLI_INLINE void DestroyHasher(
- MemoryManager* m, HasherHandle* handle) {
- if (*handle == NULL) return;
- BROTLI_FREE(m, *handle);
-}
-
-static BROTLI_INLINE void HasherReset(HasherHandle handle) {
- if (handle == NULL) return;
- GetHasherCommon(handle)->is_prepared_ = BROTLI_FALSE;
-}
-
-static BROTLI_INLINE size_t HasherSize(const BrotliEncoderParams* params,
- BROTLI_BOOL one_shot, const size_t input_size) {
- size_t result = sizeof(HasherCommon);
- switch (params->hasher.type) {
-#define SIZE_(N) \
- case N: \
- result += HashMemAllocInBytesH ## N(params, one_shot, input_size); \
- break;
- FOR_ALL_HASHERS(SIZE_)
-#undef SIZE_
- default:
- break;
- }
- return result;
-}
-
-static BROTLI_INLINE void HasherSetup(MemoryManager* m, HasherHandle* handle,
- BrotliEncoderParams* params, const uint8_t* data, size_t position,
- size_t input_size, BROTLI_BOOL is_last) {
- HasherHandle self = NULL;
- HasherCommon* common = NULL;
- BROTLI_BOOL one_shot = (position == 0 && is_last);
- if (*handle == NULL) {
- size_t alloc_size;
- ChooseHasher(params, ¶ms->hasher);
- alloc_size = HasherSize(params, one_shot, input_size);
- self = BROTLI_ALLOC(m, uint8_t, alloc_size);
- if (BROTLI_IS_OOM(m)) return;
- *handle = self;
- common = GetHasherCommon(self);
- common->params = params->hasher;
- switch (common->params.type) {
-#define INITIALIZE_(N) \
- case N: \
- InitializeH ## N(*handle, params); \
- break;
- FOR_ALL_HASHERS(INITIALIZE_);
-#undef INITIALIZE_
- default:
- break;
- }
- HasherReset(*handle);
- }
-
- self = *handle;
- common = GetHasherCommon(self);
- if (!common->is_prepared_) {
- switch (common->params.type) {
-#define PREPARE_(N) \
- case N: \
- PrepareH ## N(self, one_shot, input_size, data); \
- break;
- FOR_ALL_HASHERS(PREPARE_)
-#undef PREPARE_
- default: break;
- }
- if (position == 0) {
- common->dict_num_lookups = 0;
- common->dict_num_matches = 0;
- }
- common->is_prepared_ = BROTLI_TRUE;
- }
-}
-
-static BROTLI_INLINE void InitOrStitchToPreviousBlock(
- MemoryManager* m, HasherHandle* handle, const uint8_t* data, size_t mask,
- BrotliEncoderParams* params, size_t position, size_t input_size,
- BROTLI_BOOL is_last) {
- HasherHandle self;
- HasherSetup(m, handle, params, data, position, input_size, is_last);
- if (BROTLI_IS_OOM(m)) return;
- self = *handle;
- switch (GetHasherCommon(self)->params.type) {
-#define INIT_(N) \
- case N: \
- StitchToPreviousBlockH ## N(self, input_size, position, data, mask); \
- break;
- FOR_ALL_HASHERS(INIT_)
-#undef INIT_
- default: break;
- }
-}
-
-#if defined(__cplusplus) || defined(c_plusplus)
-} /* extern "C" */
-#endif
-
-#endif /* BROTLI_ENC_HASH_H_ */
diff --git a/BaseTools/Source/C/BrotliCompress/enc/hash_composite_inc.h b/BaseTools/Source/C/BrotliCompress/enc/hash_composite_inc.h
deleted file mode 100644
index ec3e39c73fa2..000000000000
--- a/BaseTools/Source/C/BrotliCompress/enc/hash_composite_inc.h
+++ /dev/null
@@ -1,133 +0,0 @@
-/* NOLINT(build/header_guard) */
-/* Copyright 2018 Google Inc. All Rights Reserved.
-
- Distributed under MIT license.
- See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
-*/
-
-/* template parameters: FN, HASHER_A, HASHER_B */
-
-/* Composite hasher: This hasher allows to combine two other hashers, HASHER_A
- and HASHER_B. */
-
-#define HashComposite HASHER()
-
-#define FN_A(X) EXPAND_CAT(X, HASHER_A)
-#define FN_B(X) EXPAND_CAT(X, HASHER_B)
-
-static BROTLI_INLINE size_t FN(HashTypeLength)(void) {
- size_t a = FN_A(HashTypeLength)();
- size_t b = FN_B(HashTypeLength)();
- return a > b ? a : b;
-}
-
-static BROTLI_INLINE size_t FN(StoreLookahead)(void) {
- size_t a = FN_A(StoreLookahead)();
- size_t b = FN_B(StoreLookahead)();
- return a > b ? a : b;
-}
-
-typedef struct HashComposite {
- HasherHandle ha;
- HasherHandle hb;
- const BrotliEncoderParams* params;
-} HashComposite;
-
-static BROTLI_INLINE HashComposite* FN(Self)(HasherHandle handle) {
- return (HashComposite*)&(GetHasherCommon(handle)[1]);
-}
-
-static void FN(Initialize)(
- HasherHandle handle, const BrotliEncoderParams* params) {
- HashComposite* self = FN(Self)(handle);
- self->ha = 0;
- self->hb = 0;
- self->params = params;
- /* TODO: Initialize of the hashers is defered to Prepare (and params
- remembered here) because we don't get the one_shot and input_size params
- here that are needed to know the memory size of them. Instead provide
- those params to all hashers FN(Initialize) */
-}
-
-static void FN(Prepare)(HasherHandle handle, BROTLI_BOOL one_shot,
- size_t input_size, const uint8_t* data) {
- HashComposite* self = FN(Self)(handle);
- if (!self->ha) {
- HasherCommon* common_a;
- HasherCommon* common_b;
-
- self->ha = handle + sizeof(HasherCommon) + sizeof(HashComposite);
- common_a = (HasherCommon*)self->ha;
- common_a->params = self->params->hasher;
- common_a->is_prepared_ = BROTLI_FALSE;
- common_a->dict_num_lookups = 0;
- common_a->dict_num_matches = 0;
- FN_A(Initialize)(self->ha, self->params);
-
- self->hb = self->ha + sizeof(HasherCommon) + FN_A(HashMemAllocInBytes)(
- self->params, one_shot, input_size);
- common_b = (HasherCommon*)self->hb;
- common_b->params = self->params->hasher;
- common_b->is_prepared_ = BROTLI_FALSE;
- common_b->dict_num_lookups = 0;
- common_b->dict_num_matches = 0;
- FN_B(Initialize)(self->hb, self->params);
- }
- FN_A(Prepare)(self->ha, one_shot, input_size, data);
- FN_B(Prepare)(self->hb, one_shot, input_size, data);
-}
-
-static BROTLI_INLINE size_t FN(HashMemAllocInBytes)(
- const BrotliEncoderParams* params, BROTLI_BOOL one_shot,
- size_t input_size) {
- return sizeof(HashComposite) + 2 * sizeof(HasherCommon) +
- FN_A(HashMemAllocInBytes)(params, one_shot, input_size) +
- FN_B(HashMemAllocInBytes)(params, one_shot, input_size);
-}
-
-static BROTLI_INLINE void FN(Store)(HasherHandle BROTLI_RESTRICT handle,
- const uint8_t* BROTLI_RESTRICT data, const size_t mask, const size_t ix) {
- HashComposite* self = FN(Self)(handle);
- FN_A(Store)(self->ha, data, mask, ix);
- FN_B(Store)(self->hb, data, mask, ix);
-}
-
-static BROTLI_INLINE void FN(StoreRange)(HasherHandle handle,
- const uint8_t* data, const size_t mask, const size_t ix_start,
- const size_t ix_end) {
- HashComposite* self = FN(Self)(handle);
- FN_A(StoreRange)(self->ha, data, mask, ix_start, ix_end);
- FN_B(StoreRange)(self->hb, data, mask, ix_start, ix_end);
-}
-
-static BROTLI_INLINE void FN(StitchToPreviousBlock)(HasherHandle handle,
- size_t num_bytes, size_t position, const uint8_t* ringbuffer,
- size_t ring_buffer_mask) {
- HashComposite* self = FN(Self)(handle);
- FN_A(StitchToPreviousBlock)(self->ha, num_bytes, position, ringbuffer,
- ring_buffer_mask);
- FN_B(StitchToPreviousBlock)(self->hb, num_bytes, position, ringbuffer,
- ring_buffer_mask);
-}
-
-static BROTLI_INLINE void FN(PrepareDistanceCache)(
- HasherHandle handle, int* BROTLI_RESTRICT distance_cache) {
- HashComposite* self = FN(Self)(handle);
- FN_A(PrepareDistanceCache)(self->ha, distance_cache);
- FN_B(PrepareDistanceCache)(self->hb, distance_cache);
-}
-
-static BROTLI_INLINE void FN(FindLongestMatch)(HasherHandle handle,
- const BrotliEncoderDictionary* dictionary,
- const uint8_t* BROTLI_RESTRICT data, const size_t ring_buffer_mask,
- const int* BROTLI_RESTRICT distance_cache, const size_t cur_ix,
- const size_t max_length, const size_t max_backward, const size_t gap,
- const size_t max_distance, HasherSearchResult* BROTLI_RESTRICT out) {
- HashComposite* self = FN(Self)(handle);
- FN_A(FindLongestMatch)(self->ha, dictionary, data, ring_buffer_mask,
- distance_cache, cur_ix, max_length, max_backward, gap, max_distance, out);
- FN_B(FindLongestMatch)(self->hb, dictionary, data, ring_buffer_mask,
- distance_cache, cur_ix, max_length, max_backward, gap, max_distance, out);
-}
-
-#undef HashComposite
diff --git a/BaseTools/Source/C/BrotliCompress/enc/hash_forgetful_chain_inc.h b/BaseTools/Source/C/BrotliCompress/enc/hash_forgetful_chain_inc.h
deleted file mode 100644
index 9caf429db1d9..000000000000
--- a/BaseTools/Source/C/BrotliCompress/enc/hash_forgetful_chain_inc.h
+++ /dev/null
@@ -1,254 +0,0 @@
-/* NOLINT(build/header_guard) */
-/* Copyright 2016 Google Inc. All Rights Reserved.
-
- Distributed under MIT license.
- See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
-*/
-
-/* template parameters: FN, BUCKET_BITS, NUM_BANKS, BANK_BITS,
- NUM_LAST_DISTANCES_TO_CHECK */
-
-/* A (forgetful) hash table to the data seen by the compressor, to
- help create backward references to previous data.
-
- Hashes are stored in chains which are bucketed to groups. Group of chains
- share a storage "bank". When more than "bank size" chain nodes are added,
- oldest nodes are replaced; this way several chains may share a tail. */
-
-#define HashForgetfulChain HASHER()
-
-#define BANK_SIZE (1 << BANK_BITS)
-
-/* Number of hash buckets. */
-#define BUCKET_SIZE (1 << BUCKET_BITS)
-
-#define CAPPED_CHAINS 0
-
-static BROTLI_INLINE size_t FN(HashTypeLength)(void) { return 4; }
-static BROTLI_INLINE size_t FN(StoreLookahead)(void) { return 4; }
-
-/* HashBytes is the function that chooses the bucket to place the address in.*/
-static BROTLI_INLINE size_t FN(HashBytes)(const uint8_t* data) {
- const uint32_t h = BROTLI_UNALIGNED_LOAD32LE(data) * kHashMul32;
- /* The higher bits contain more mixture from the multiplication,
- so we take our results from there. */
- return h >> (32 - BUCKET_BITS);
-}
-
-typedef struct FN(Slot) {
- uint16_t delta;
- uint16_t next;
-} FN(Slot);
-
-typedef struct FN(Bank) {
- FN(Slot) slots[BANK_SIZE];
-} FN(Bank);
-
-typedef struct HashForgetfulChain {
- uint32_t addr[BUCKET_SIZE];
- uint16_t head[BUCKET_SIZE];
- /* Truncated hash used for quick rejection of "distance cache" candidates. */
- uint8_t tiny_hash[65536];
- FN(Bank) banks[NUM_BANKS];
- uint16_t free_slot_idx[NUM_BANKS];
- size_t max_hops;
-} HashForgetfulChain;
-
-static BROTLI_INLINE HashForgetfulChain* FN(Self)(HasherHandle handle) {
- return (HashForgetfulChain*)&(GetHasherCommon(handle)[1]);
-}
-
-static void FN(Initialize)(
- HasherHandle handle, const BrotliEncoderParams* params) {
- FN(Self)(handle)->max_hops =
- (params->quality > 6 ? 7u : 8u) << (params->quality - 4);
-}
-
-static void FN(Prepare)(HasherHandle handle, BROTLI_BOOL one_shot,
- size_t input_size, const uint8_t* data) {
- HashForgetfulChain* self = FN(Self)(handle);
- /* Partial preparation is 100 times slower (per socket). */
- size_t partial_prepare_threshold = BUCKET_SIZE >> 6;
- if (one_shot && input_size <= partial_prepare_threshold) {
- size_t i;
- for (i = 0; i < input_size; ++i) {
- size_t bucket = FN(HashBytes)(&data[i]);
- /* See InitEmpty comment. */
- self->addr[bucket] = 0xCCCCCCCC;
- self->head[bucket] = 0xCCCC;
- }
- } else {
- /* Fill |addr| array with 0xCCCCCCCC value. Because of wrapping, position
- processed by hasher never reaches 3GB + 64M; this makes all new chains
- to be terminated after the first node. */
- memset(self->addr, 0xCC, sizeof(self->addr));
- memset(self->head, 0, sizeof(self->head));
- }
- memset(self->tiny_hash, 0, sizeof(self->tiny_hash));
- memset(self->free_slot_idx, 0, sizeof(self->free_slot_idx));
-}
-
-static BROTLI_INLINE size_t FN(HashMemAllocInBytes)(
- const BrotliEncoderParams* params, BROTLI_BOOL one_shot,
- size_t input_size) {
- BROTLI_UNUSED(params);
- BROTLI_UNUSED(one_shot);
- BROTLI_UNUSED(input_size);
- return sizeof(HashForgetfulChain);
-}
-
-/* Look at 4 bytes at &data[ix & mask]. Compute a hash from these, and prepend
- node to corresponding chain; also update tiny_hash for current position. */
-static BROTLI_INLINE void FN(Store)(HasherHandle BROTLI_RESTRICT handle,
- const uint8_t* BROTLI_RESTRICT data, const size_t mask, const size_t ix) {
- HashForgetfulChain* self = FN(Self)(handle);
- const size_t key = FN(HashBytes)(&data[ix & mask]);
- const size_t bank = key & (NUM_BANKS - 1);
- const size_t idx = self->free_slot_idx[bank]++ & (BANK_SIZE - 1);
- size_t delta = ix - self->addr[key];
- self->tiny_hash[(uint16_t)ix] = (uint8_t)key;
- if (delta > 0xFFFF) delta = CAPPED_CHAINS ? 0 : 0xFFFF;
- self->banks[bank].slots[idx].delta = (uint16_t)delta;
- self->banks[bank].slots[idx].next = self->head[key];
- self->addr[key] = (uint32_t)ix;
- self->head[key] = (uint16_t)idx;
-}
-
-static BROTLI_INLINE void FN(StoreRange)(HasherHandle handle,
- const uint8_t* data, const size_t mask, const size_t ix_start,
- const size_t ix_end) {
- size_t i;
- for (i = ix_start; i < ix_end; ++i) {
- FN(Store)(handle, data, mask, i);
- }
-}
-
-static BROTLI_INLINE void FN(StitchToPreviousBlock)(HasherHandle handle,
- size_t num_bytes, size_t position, const uint8_t* ringbuffer,
- size_t ring_buffer_mask) {
- if (num_bytes >= FN(HashTypeLength)() - 1 && position >= 3) {
- /* Prepare the hashes for three last bytes of the last write.
- These could not be calculated before, since they require knowledge
- of both the previous and the current block. */
- FN(Store)(handle, ringbuffer, ring_buffer_mask, position - 3);
- FN(Store)(handle, ringbuffer, ring_buffer_mask, position - 2);
- FN(Store)(handle, ringbuffer, ring_buffer_mask, position - 1);
- }
-}
-
-static BROTLI_INLINE void FN(PrepareDistanceCache)(
- HasherHandle handle, int* BROTLI_RESTRICT distance_cache) {
- BROTLI_UNUSED(handle);
- PrepareDistanceCache(distance_cache, NUM_LAST_DISTANCES_TO_CHECK);
-}
-
-/* Find a longest backward match of &data[cur_ix] up to the length of
- max_length and stores the position cur_ix in the hash table.
-
- REQUIRES: FN(PrepareDistanceCache) must be invoked for current distance cache
- values; if this method is invoked repeatedly with the same distance
- cache values, it is enough to invoke FN(PrepareDistanceCache) once.
-
- Does not look for matches longer than max_length.
- Does not look for matches further away than max_backward.
- Writes the best match into |out|.
- |out|->score is updated only if a better match is found. */
-static BROTLI_INLINE void FN(FindLongestMatch)(HasherHandle handle,
- const BrotliEncoderDictionary* dictionary,
- const uint8_t* BROTLI_RESTRICT data, const size_t ring_buffer_mask,
- const int* BROTLI_RESTRICT distance_cache,
- const size_t cur_ix, const size_t max_length, const size_t max_backward,
- const size_t gap, const size_t max_distance,
- HasherSearchResult* BROTLI_RESTRICT out) {
- HashForgetfulChain* self = FN(Self)(handle);
- const size_t cur_ix_masked = cur_ix & ring_buffer_mask;
- /* Don't accept a short copy from far away. */
- score_t min_score = out->score;
- score_t best_score = out->score;
- size_t best_len = out->len;
- size_t i;
- const size_t key = FN(HashBytes)(&data[cur_ix_masked]);
- const uint8_t tiny_hash = (uint8_t)(key);
- out->len = 0;
- out->len_code_delta = 0;
- /* Try last distance first. */
- for (i = 0; i < NUM_LAST_DISTANCES_TO_CHECK; ++i) {
- const size_t backward = (size_t)distance_cache[i];
- size_t prev_ix = (cur_ix - backward);
- /* For distance code 0 we want to consider 2-byte matches. */
- if (i > 0 && self->tiny_hash[(uint16_t)prev_ix] != tiny_hash) continue;
- if (prev_ix >= cur_ix || backward > max_backward) {
- continue;
- }
- prev_ix &= ring_buffer_mask;
- {
- const size_t len = FindMatchLengthWithLimit(&data[prev_ix],
- &data[cur_ix_masked],
- max_length);
- if (len >= 2) {
- score_t score = BackwardReferenceScoreUsingLastDistance(len);
- if (best_score < score) {
- if (i != 0) score -= BackwardReferencePenaltyUsingLastDistance(i);
- if (best_score < score) {
- best_score = score;
- best_len = len;
- out->len = best_len;
- out->distance = backward;
- out->score = best_score;
- }
- }
- }
- }
- }
- {
- const size_t bank = key & (NUM_BANKS - 1);
- size_t backward = 0;
- size_t hops = self->max_hops;
- size_t delta = cur_ix - self->addr[key];
- size_t slot = self->head[key];
- while (hops--) {
- size_t prev_ix;
- size_t last = slot;
- backward += delta;
- if (backward > max_backward || (CAPPED_CHAINS && !delta)) break;
- prev_ix = (cur_ix - backward) & ring_buffer_mask;
- slot = self->banks[bank].slots[last].next;
- delta = self->banks[bank].slots[last].delta;
- if (cur_ix_masked + best_len > ring_buffer_mask ||
- prev_ix + best_len > ring_buffer_mask ||
- data[cur_ix_masked + best_len] != data[prev_ix + best_len]) {
- continue;
- }
- {
- const size_t len = FindMatchLengthWithLimit(&data[prev_ix],
- &data[cur_ix_masked],
- max_length);
- if (len >= 4) {
- /* Comparing for >= 3 does not change the semantics, but just saves
- for a few unnecessary binary logarithms in backward reference
- score, since we are not interested in such short matches. */
- score_t score = BackwardReferenceScore(len, backward);
- if (best_score < score) {
- best_score = score;
- best_len = len;
- out->len = best_len;
- out->distance = backward;
- out->score = best_score;
- }
- }
- }
- }
- FN(Store)(handle, data, ring_buffer_mask, cur_ix);
- }
- if (out->score == min_score) {
- SearchInStaticDictionary(dictionary,
- handle, &data[cur_ix_masked], max_length, max_backward + gap,
- max_distance, out, BROTLI_FALSE);
- }
-}
-
-#undef BANK_SIZE
-#undef BUCKET_SIZE
-#undef CAPPED_CHAINS
-
-#undef HashForgetfulChain
diff --git a/BaseTools/Source/C/BrotliCompress/enc/hash_longest_match64_inc.h b/BaseTools/Source/C/BrotliCompress/enc/hash_longest_match64_inc.h
deleted file mode 100644
index 3a01f0d3f1a0..000000000000
--- a/BaseTools/Source/C/BrotliCompress/enc/hash_longest_match64_inc.h
+++ /dev/null
@@ -1,266 +0,0 @@
-/* NOLINT(build/header_guard) */
-/* Copyright 2010 Google Inc. All Rights Reserved.
-
- Distributed under MIT license.
- See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
-*/
-
-/* template parameters: FN */
-
-/* A (forgetful) hash table to the data seen by the compressor, to
- help create backward references to previous data.
-
- This is a hash map of fixed size (bucket_size_) to a ring buffer of
- fixed size (block_size_). The ring buffer contains the last block_size_
- index positions of the given hash key in the compressed data. */
-
-#define HashLongestMatch HASHER()
-
-static BROTLI_INLINE size_t FN(HashTypeLength)(void) { return 8; }
-static BROTLI_INLINE size_t FN(StoreLookahead)(void) { return 8; }
-
-/* HashBytes is the function that chooses the bucket to place the address in. */
-static BROTLI_INLINE uint32_t FN(HashBytes)(const uint8_t* data,
- const uint64_t mask,
- const int shift) {
- const uint64_t h = (BROTLI_UNALIGNED_LOAD64LE(data) & mask) * kHashMul64Long;
- /* The higher bits contain more mixture from the multiplication,
- so we take our results from there. */
- return (uint32_t)(h >> shift);
-}
-
-typedef struct HashLongestMatch {
- /* Number of hash buckets. */
- size_t bucket_size_;
- /* Only block_size_ newest backward references are kept,
- and the older are forgotten. */
- size_t block_size_;
- /* Left-shift for computing hash bucket index from hash value. */
- int hash_shift_;
- /* Mask for selecting the next 4-8 bytes of input */
- uint64_t hash_mask_;
- /* Mask for accessing entries in a block (in a ring-buffer manner). */
- uint32_t block_mask_;
-
- /* --- Dynamic size members --- */
-
- /* Number of entries in a particular bucket. */
- /* uint16_t num[bucket_size]; */
-
- /* Buckets containing block_size_ of backward references. */
- /* uint32_t* buckets[bucket_size * block_size]; */
-} HashLongestMatch;
-
-static BROTLI_INLINE HashLongestMatch* FN(Self)(HasherHandle handle) {
- return (HashLongestMatch*)&(GetHasherCommon(handle)[1]);
-}
-
-static BROTLI_INLINE uint16_t* FN(Num)(HashLongestMatch* self) {
- return (uint16_t*)(&self[1]);
-}
-
-static BROTLI_INLINE uint32_t* FN(Buckets)(HashLongestMatch* self) {
- return (uint32_t*)(&FN(Num)(self)[self->bucket_size_]);
-}
-
-static void FN(Initialize)(
- HasherHandle handle, const BrotliEncoderParams* params) {
- HasherCommon* common = GetHasherCommon(handle);
- HashLongestMatch* self = FN(Self)(handle);
- BROTLI_UNUSED(params);
- self->hash_shift_ = 64 - common->params.bucket_bits;
- self->hash_mask_ = (~((uint64_t)0U)) >> (64 - 8 * common->params.hash_len);
- self->bucket_size_ = (size_t)1 << common->params.bucket_bits;
- self->block_size_ = (size_t)1 << common->params.block_bits;
- self->block_mask_ = (uint32_t)(self->block_size_ - 1);
-}
-
-static void FN(Prepare)(HasherHandle handle, BROTLI_BOOL one_shot,
- size_t input_size, const uint8_t* data) {
- HashLongestMatch* self = FN(Self)(handle);
- uint16_t* num = FN(Num)(self);
- /* Partial preparation is 100 times slower (per socket). */
- size_t partial_prepare_threshold = self->bucket_size_ >> 6;
- if (one_shot && input_size <= partial_prepare_threshold) {
- size_t i;
- for (i = 0; i < input_size; ++i) {
- const uint32_t key = FN(HashBytes)(&data[i], self->hash_mask_,
- self->hash_shift_);
- num[key] = 0;
- }
- } else {
- memset(num, 0, self->bucket_size_ * sizeof(num[0]));
- }
-}
-
-static BROTLI_INLINE size_t FN(HashMemAllocInBytes)(
- const BrotliEncoderParams* params, BROTLI_BOOL one_shot,
- size_t input_size) {
- size_t bucket_size = (size_t)1 << params->hasher.bucket_bits;
- size_t block_size = (size_t)1 << params->hasher.block_bits;
- BROTLI_UNUSED(one_shot);
- BROTLI_UNUSED(input_size);
- return sizeof(HashLongestMatch) + bucket_size * (2 + 4 * block_size);
-}
-
-/* Look at 4 bytes at &data[ix & mask].
- Compute a hash from these, and store the value of ix at that position. */
-static BROTLI_INLINE void FN(Store)(HasherHandle handle, const uint8_t* data,
- const size_t mask, const size_t ix) {
- HashLongestMatch* self = FN(Self)(handle);
- uint16_t* num = FN(Num)(self);
- const uint32_t key = FN(HashBytes)(&data[ix & mask], self->hash_mask_,
- self->hash_shift_);
- const size_t minor_ix = num[key] & self->block_mask_;
- const size_t offset =
- minor_ix + (key << GetHasherCommon(handle)->params.block_bits);
- FN(Buckets)(self)[offset] = (uint32_t)ix;
- ++num[key];
-}
-
-static BROTLI_INLINE void FN(StoreRange)(HasherHandle handle,
- const uint8_t* data, const size_t mask, const size_t ix_start,
- const size_t ix_end) {
- size_t i;
- for (i = ix_start; i < ix_end; ++i) {
- FN(Store)(handle, data, mask, i);
- }
-}
-
-static BROTLI_INLINE void FN(StitchToPreviousBlock)(HasherHandle handle,
- size_t num_bytes, size_t position, const uint8_t* ringbuffer,
- size_t ringbuffer_mask) {
- if (num_bytes >= FN(HashTypeLength)() - 1 && position >= 3) {
- /* Prepare the hashes for three last bytes of the last write.
- These could not be calculated before, since they require knowledge
- of both the previous and the current block. */
- FN(Store)(handle, ringbuffer, ringbuffer_mask, position - 3);
- FN(Store)(handle, ringbuffer, ringbuffer_mask, position - 2);
- FN(Store)(handle, ringbuffer, ringbuffer_mask, position - 1);
- }
-}
-
-static BROTLI_INLINE void FN(PrepareDistanceCache)(
- HasherHandle handle, int* BROTLI_RESTRICT distance_cache) {
- PrepareDistanceCache(distance_cache,
- GetHasherCommon(handle)->params.num_last_distances_to_check);
-}
-
-/* Find a longest backward match of &data[cur_ix] up to the length of
- max_length and stores the position cur_ix in the hash table.
-
- REQUIRES: FN(PrepareDistanceCache) must be invoked for current distance cache
- values; if this method is invoked repeatedly with the same distance
- cache values, it is enough to invoke FN(PrepareDistanceCache) once.
-
- Does not look for matches longer than max_length.
- Does not look for matches further away than max_backward.
- Writes the best match into |out|.
- |out|->score is updated only if a better match is found. */
-static BROTLI_INLINE void FN(FindLongestMatch)(HasherHandle handle,
- const BrotliEncoderDictionary* dictionary,
- const uint8_t* BROTLI_RESTRICT data, const size_t ring_buffer_mask,
- const int* BROTLI_RESTRICT distance_cache, const size_t cur_ix,
- const size_t max_length, const size_t max_backward, const size_t gap,
- const size_t max_distance, HasherSearchResult* BROTLI_RESTRICT out) {
- HasherCommon* common = GetHasherCommon(handle);
- HashLongestMatch* self = FN(Self)(handle);
- uint16_t* num = FN(Num)(self);
- uint32_t* buckets = FN(Buckets)(self);
- const size_t cur_ix_masked = cur_ix & ring_buffer_mask;
- /* Don't accept a short copy from far away. */
- score_t min_score = out->score;
- score_t best_score = out->score;
- size_t best_len = out->len;
- size_t i;
- out->len = 0;
- out->len_code_delta = 0;
- /* Try last distance first. */
- for (i = 0; i < (size_t)common->params.num_last_distances_to_check; ++i) {
- const size_t backward = (size_t)distance_cache[i];
- size_t prev_ix = (size_t)(cur_ix - backward);
- if (prev_ix >= cur_ix) {
- continue;
- }
- if (BROTLI_PREDICT_FALSE(backward > max_backward)) {
- continue;
- }
- prev_ix &= ring_buffer_mask;
-
- if (cur_ix_masked + best_len > ring_buffer_mask ||
- prev_ix + best_len > ring_buffer_mask ||
- data[cur_ix_masked + best_len] != data[prev_ix + best_len]) {
- continue;
- }
- {
- const size_t len = FindMatchLengthWithLimit(&data[prev_ix],
- &data[cur_ix_masked],
- max_length);
- if (len >= 3 || (len == 2 && i < 2)) {
- /* Comparing for >= 2 does not change the semantics, but just saves for
- a few unnecessary binary logarithms in backward reference score,
- since we are not interested in such short matches. */
- score_t score = BackwardReferenceScoreUsingLastDistance(len);
- if (best_score < score) {
- if (i != 0) score -= BackwardReferencePenaltyUsingLastDistance(i);
- if (best_score < score) {
- best_score = score;
- best_len = len;
- out->len = best_len;
- out->distance = backward;
- out->score = best_score;
- }
- }
- }
- }
- }
- {
- const uint32_t key = FN(HashBytes)(
- &data[cur_ix_masked], self->hash_mask_, self->hash_shift_);
- uint32_t* BROTLI_RESTRICT bucket =
- &buckets[key << common->params.block_bits];
- const size_t down =
- (num[key] > self->block_size_) ?
- (num[key] - self->block_size_) : 0u;
- for (i = num[key]; i > down;) {
- size_t prev_ix = bucket[--i & self->block_mask_];
- const size_t backward = cur_ix - prev_ix;
- if (BROTLI_PREDICT_FALSE(backward > max_backward)) {
- break;
- }
- prev_ix &= ring_buffer_mask;
- if (cur_ix_masked + best_len > ring_buffer_mask ||
- prev_ix + best_len > ring_buffer_mask ||
- data[cur_ix_masked + best_len] != data[prev_ix + best_len]) {
- continue;
- }
- {
- const size_t len = FindMatchLengthWithLimit(&data[prev_ix],
- &data[cur_ix_masked],
- max_length);
- if (len >= 4) {
- /* Comparing for >= 3 does not change the semantics, but just saves
- for a few unnecessary binary logarithms in backward reference
- score, since we are not interested in such short matches. */
- score_t score = BackwardReferenceScore(len, backward);
- if (best_score < score) {
- best_score = score;
- best_len = len;
- out->len = best_len;
- out->distance = backward;
- out->score = best_score;
- }
- }
- }
- }
- bucket[num[key] & self->block_mask_] = (uint32_t)cur_ix;
- ++num[key];
- }
- if (min_score == out->score) {
- SearchInStaticDictionary(dictionary,
- handle, &data[cur_ix_masked], max_length, max_backward + gap,
- max_distance, out, BROTLI_FALSE);
- }
-}
-
-#undef HashLongestMatch
diff --git a/BaseTools/Source/C/BrotliCompress/enc/hash_longest_match_inc.h b/BaseTools/Source/C/BrotliCompress/enc/hash_longest_match_inc.h
deleted file mode 100644
index 108a7faaccb1..000000000000
--- a/BaseTools/Source/C/BrotliCompress/enc/hash_longest_match_inc.h
+++ /dev/null
@@ -1,258 +0,0 @@
-/* NOLINT(build/header_guard) */
-/* Copyright 2010 Google Inc. All Rights Reserved.
-
- Distributed under MIT license.
- See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
-*/
-
-/* template parameters: FN */
-
-/* A (forgetful) hash table to the data seen by the compressor, to
- help create backward references to previous data.
-
- This is a hash map of fixed size (bucket_size_) to a ring buffer of
- fixed size (block_size_). The ring buffer contains the last block_size_
- index positions of the given hash key in the compressed data. */
-
-#define HashLongestMatch HASHER()
-
-static BROTLI_INLINE size_t FN(HashTypeLength)(void) { return 4; }
-static BROTLI_INLINE size_t FN(StoreLookahead)(void) { return 4; }
-
-/* HashBytes is the function that chooses the bucket to place the address in. */
-static uint32_t FN(HashBytes)(const uint8_t* data, const int shift) {
- uint32_t h = BROTLI_UNALIGNED_LOAD32LE(data) * kHashMul32;
- /* The higher bits contain more mixture from the multiplication,
- so we take our results from there. */
- return (uint32_t)(h >> shift);
-}
-
-typedef struct HashLongestMatch {
- /* Number of hash buckets. */
- size_t bucket_size_;
- /* Only block_size_ newest backward references are kept,
- and the older are forgotten. */
- size_t block_size_;
- /* Left-shift for computing hash bucket index from hash value. */
- int hash_shift_;
- /* Mask for accessing entries in a block (in a ring-buffer manner). */
- uint32_t block_mask_;
-
- /* --- Dynamic size members --- */
-
- /* Number of entries in a particular bucket. */
- /* uint16_t num[bucket_size]; */
-
- /* Buckets containing block_size_ of backward references. */
- /* uint32_t* buckets[bucket_size * block_size]; */
-} HashLongestMatch;
-
-static BROTLI_INLINE HashLongestMatch* FN(Self)(HasherHandle handle) {
- return (HashLongestMatch*)&(GetHasherCommon(handle)[1]);
-}
-
-static BROTLI_INLINE uint16_t* FN(Num)(HashLongestMatch* self) {
- return (uint16_t*)(&self[1]);
-}
-
-static BROTLI_INLINE uint32_t* FN(Buckets)(HashLongestMatch* self) {
- return (uint32_t*)(&FN(Num)(self)[self->bucket_size_]);
-}
-
-static void FN(Initialize)(
- HasherHandle handle, const BrotliEncoderParams* params) {
- HasherCommon* common = GetHasherCommon(handle);
- HashLongestMatch* self = FN(Self)(handle);
- BROTLI_UNUSED(params);
- self->hash_shift_ = 32 - common->params.bucket_bits;
- self->bucket_size_ = (size_t)1 << common->params.bucket_bits;
- self->block_size_ = (size_t)1 << common->params.block_bits;
- self->block_mask_ = (uint32_t)(self->block_size_ - 1);
-}
-
-static void FN(Prepare)(HasherHandle handle, BROTLI_BOOL one_shot,
- size_t input_size, const uint8_t* data) {
- HashLongestMatch* self = FN(Self)(handle);
- uint16_t* num = FN(Num)(self);
- /* Partial preparation is 100 times slower (per socket). */
- size_t partial_prepare_threshold = self->bucket_size_ >> 6;
- if (one_shot && input_size <= partial_prepare_threshold) {
- size_t i;
- for (i = 0; i < input_size; ++i) {
- const uint32_t key = FN(HashBytes)(&data[i], self->hash_shift_);
- num[key] = 0;
- }
- } else {
- memset(num, 0, self->bucket_size_ * sizeof(num[0]));
- }
-}
-
-static BROTLI_INLINE size_t FN(HashMemAllocInBytes)(
- const BrotliEncoderParams* params, BROTLI_BOOL one_shot,
- size_t input_size) {
- size_t bucket_size = (size_t)1 << params->hasher.bucket_bits;
- size_t block_size = (size_t)1 << params->hasher.block_bits;
- BROTLI_UNUSED(one_shot);
- BROTLI_UNUSED(input_size);
- return sizeof(HashLongestMatch) + bucket_size * (2 + 4 * block_size);
-}
-
-/* Look at 4 bytes at &data[ix & mask].
- Compute a hash from these, and store the value of ix at that position. */
-static BROTLI_INLINE void FN(Store)(HasherHandle handle, const uint8_t* data,
- const size_t mask, const size_t ix) {
- HashLongestMatch* self = FN(Self)(handle);
- uint16_t* num = FN(Num)(self);
- const uint32_t key = FN(HashBytes)(&data[ix & mask], self->hash_shift_);
- const size_t minor_ix = num[key] & self->block_mask_;
- const size_t offset =
- minor_ix + (key << GetHasherCommon(handle)->params.block_bits);
- FN(Buckets)(self)[offset] = (uint32_t)ix;
- ++num[key];
-}
-
-static BROTLI_INLINE void FN(StoreRange)(HasherHandle handle,
- const uint8_t* data, const size_t mask, const size_t ix_start,
- const size_t ix_end) {
- size_t i;
- for (i = ix_start; i < ix_end; ++i) {
- FN(Store)(handle, data, mask, i);
- }
-}
-
-static BROTLI_INLINE void FN(StitchToPreviousBlock)(HasherHandle handle,
- size_t num_bytes, size_t position, const uint8_t* ringbuffer,
- size_t ringbuffer_mask) {
- if (num_bytes >= FN(HashTypeLength)() - 1 && position >= 3) {
- /* Prepare the hashes for three last bytes of the last write.
- These could not be calculated before, since they require knowledge
- of both the previous and the current block. */
- FN(Store)(handle, ringbuffer, ringbuffer_mask, position - 3);
- FN(Store)(handle, ringbuffer, ringbuffer_mask, position - 2);
- FN(Store)(handle, ringbuffer, ringbuffer_mask, position - 1);
- }
-}
-
-static BROTLI_INLINE void FN(PrepareDistanceCache)(
- HasherHandle handle, int* BROTLI_RESTRICT distance_cache) {
- PrepareDistanceCache(distance_cache,
- GetHasherCommon(handle)->params.num_last_distances_to_check);
-}
-
-/* Find a longest backward match of &data[cur_ix] up to the length of
- max_length and stores the position cur_ix in the hash table.
-
- REQUIRES: FN(PrepareDistanceCache) must be invoked for current distance cache
- values; if this method is invoked repeatedly with the same distance
- cache values, it is enough to invoke FN(PrepareDistanceCache) once.
-
- Does not look for matches longer than max_length.
- Does not look for matches further away than max_backward.
- Writes the best match into |out|.
- |out|->score is updated only if a better match is found. */
-static BROTLI_INLINE void FN(FindLongestMatch)(HasherHandle handle,
- const BrotliEncoderDictionary* dictionary,
- const uint8_t* BROTLI_RESTRICT data, const size_t ring_buffer_mask,
- const int* BROTLI_RESTRICT distance_cache, const size_t cur_ix,
- const size_t max_length, const size_t max_backward, const size_t gap,
- const size_t max_distance, HasherSearchResult* BROTLI_RESTRICT out) {
- HasherCommon* common = GetHasherCommon(handle);
- HashLongestMatch* self = FN(Self)(handle);
- uint16_t* num = FN(Num)(self);
- uint32_t* buckets = FN(Buckets)(self);
- const size_t cur_ix_masked = cur_ix & ring_buffer_mask;
- /* Don't accept a short copy from far away. */
- score_t min_score = out->score;
- score_t best_score = out->score;
- size_t best_len = out->len;
- size_t i;
- out->len = 0;
- out->len_code_delta = 0;
- /* Try last distance first. */
- for (i = 0; i < (size_t)common->params.num_last_distances_to_check; ++i) {
- const size_t backward = (size_t)distance_cache[i];
- size_t prev_ix = (size_t)(cur_ix - backward);
- if (prev_ix >= cur_ix) {
- continue;
- }
- if (BROTLI_PREDICT_FALSE(backward > max_backward)) {
- continue;
- }
- prev_ix &= ring_buffer_mask;
-
- if (cur_ix_masked + best_len > ring_buffer_mask ||
- prev_ix + best_len > ring_buffer_mask ||
- data[cur_ix_masked + best_len] != data[prev_ix + best_len]) {
- continue;
- }
- {
- const size_t len = FindMatchLengthWithLimit(&data[prev_ix],
- &data[cur_ix_masked],
- max_length);
- if (len >= 3 || (len == 2 && i < 2)) {
- /* Comparing for >= 2 does not change the semantics, but just saves for
- a few unnecessary binary logarithms in backward reference score,
- since we are not interested in such short matches. */
- score_t score = BackwardReferenceScoreUsingLastDistance(len);
- if (best_score < score) {
- if (i != 0) score -= BackwardReferencePenaltyUsingLastDistance(i);
- if (best_score < score) {
- best_score = score;
- best_len = len;
- out->len = best_len;
- out->distance = backward;
- out->score = best_score;
- }
- }
- }
- }
- }
- {
- const uint32_t key =
- FN(HashBytes)(&data[cur_ix_masked], self->hash_shift_);
- uint32_t* BROTLI_RESTRICT bucket =
- &buckets[key << common->params.block_bits];
- const size_t down =
- (num[key] > self->block_size_) ? (num[key] - self->block_size_) : 0u;
- for (i = num[key]; i > down;) {
- size_t prev_ix = bucket[--i & self->block_mask_];
- const size_t backward = cur_ix - prev_ix;
- if (BROTLI_PREDICT_FALSE(backward > max_backward)) {
- break;
- }
- prev_ix &= ring_buffer_mask;
- if (cur_ix_masked + best_len > ring_buffer_mask ||
- prev_ix + best_len > ring_buffer_mask ||
- data[cur_ix_masked + best_len] != data[prev_ix + best_len]) {
- continue;
- }
- {
- const size_t len = FindMatchLengthWithLimit(&data[prev_ix],
- &data[cur_ix_masked],
- max_length);
- if (len >= 4) {
- /* Comparing for >= 3 does not change the semantics, but just saves
- for a few unnecessary binary logarithms in backward reference
- score, since we are not interested in such short matches. */
- score_t score = BackwardReferenceScore(len, backward);
- if (best_score < score) {
- best_score = score;
- best_len = len;
- out->len = best_len;
- out->distance = backward;
- out->score = best_score;
- }
- }
- }
- }
- bucket[num[key] & self->block_mask_] = (uint32_t)cur_ix;
- ++num[key];
- }
- if (min_score == out->score) {
- SearchInStaticDictionary(dictionary,
- handle, &data[cur_ix_masked], max_length, max_backward + gap,
- max_distance, out, BROTLI_FALSE);
- }
-}
-
-#undef HashLongestMatch
diff --git a/BaseTools/Source/C/BrotliCompress/enc/hash_longest_match_quickly_inc.h b/BaseTools/Source/C/BrotliCompress/enc/hash_longest_match_quickly_inc.h
deleted file mode 100644
index 49338f97db48..000000000000
--- a/BaseTools/Source/C/BrotliCompress/enc/hash_longest_match_quickly_inc.h
+++ /dev/null
@@ -1,235 +0,0 @@
-/* NOLINT(build/header_guard) */
-/* Copyright 2010 Google Inc. All Rights Reserved.
-
- Distributed under MIT license.
- See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
-*/
-
-/* template parameters: FN, BUCKET_BITS, BUCKET_SWEEP, HASH_LEN,
- USE_DICTIONARY
- */
-
-#define HashLongestMatchQuickly HASHER()
-
-#define BUCKET_SIZE (1 << BUCKET_BITS)
-
-#define HASH_MAP_SIZE (4 << BUCKET_BITS)
-
-static BROTLI_INLINE size_t FN(HashTypeLength)(void) { return 8; }
-static BROTLI_INLINE size_t FN(StoreLookahead)(void) { return 8; }
-
-/* HashBytes is the function that chooses the bucket to place
- the address in. The HashLongestMatch and HashLongestMatchQuickly
- classes have separate, different implementations of hashing. */
-static uint32_t FN(HashBytes)(const uint8_t* data) {
- const uint64_t h = ((BROTLI_UNALIGNED_LOAD64LE(data) << (64 - 8 * HASH_LEN)) *
- kHashMul64);
- /* The higher bits contain more mixture from the multiplication,
- so we take our results from there. */
- return (uint32_t)(h >> (64 - BUCKET_BITS));
-}
-
-/* A (forgetful) hash table to the data seen by the compressor, to
- help create backward references to previous data.
-
- This is a hash map of fixed size (BUCKET_SIZE). Starting from the
- given index, BUCKET_SWEEP buckets are used to store values of a key. */
-typedef struct HashLongestMatchQuickly {
- uint32_t buckets_[BUCKET_SIZE + BUCKET_SWEEP];
-} HashLongestMatchQuickly;
-
-static BROTLI_INLINE HashLongestMatchQuickly* FN(Self)(HasherHandle handle) {
- return (HashLongestMatchQuickly*)&(GetHasherCommon(handle)[1]);
-}
-
-static void FN(Initialize)(
- HasherHandle handle, const BrotliEncoderParams* params) {
- BROTLI_UNUSED(handle);
- BROTLI_UNUSED(params);
-}
-
-static void FN(Prepare)(HasherHandle handle, BROTLI_BOOL one_shot,
- size_t input_size, const uint8_t* data) {
- HashLongestMatchQuickly* self = FN(Self)(handle);
- /* Partial preparation is 100 times slower (per socket). */
- size_t partial_prepare_threshold = HASH_MAP_SIZE >> 7;
- if (one_shot && input_size <= partial_prepare_threshold) {
- size_t i;
- for (i = 0; i < input_size; ++i) {
- const uint32_t key = FN(HashBytes)(&data[i]);
- memset(&self->buckets_[key], 0, BUCKET_SWEEP * sizeof(self->buckets_[0]));
- }
- } else {
- /* It is not strictly necessary to fill this buffer here, but
- not filling will make the results of the compression stochastic
- (but correct). This is because random data would cause the
- system to find accidentally good backward references here and there. */
- memset(&self->buckets_[0], 0, sizeof(self->buckets_));
- }
-}
-
-static BROTLI_INLINE size_t FN(HashMemAllocInBytes)(
- const BrotliEncoderParams* params, BROTLI_BOOL one_shot,
- size_t input_size) {
- BROTLI_UNUSED(params);
- BROTLI_UNUSED(one_shot);
- BROTLI_UNUSED(input_size);
- return sizeof(HashLongestMatchQuickly);
-}
-
-/* Look at 5 bytes at &data[ix & mask].
- Compute a hash from these, and store the value somewhere within
- [ix .. ix+3]. */
-static BROTLI_INLINE void FN(Store)(HasherHandle handle,
- const uint8_t* data, const size_t mask, const size_t ix) {
- const uint32_t key = FN(HashBytes)(&data[ix & mask]);
- /* Wiggle the value with the bucket sweep range. */
- const uint32_t off = (ix >> 3) % BUCKET_SWEEP;
- FN(Self)(handle)->buckets_[key + off] = (uint32_t)ix;
-}
-
-static BROTLI_INLINE void FN(StoreRange)(HasherHandle handle,
- const uint8_t* data, const size_t mask, const size_t ix_start,
- const size_t ix_end) {
- size_t i;
- for (i = ix_start; i < ix_end; ++i) {
- FN(Store)(handle, data, mask, i);
- }
-}
-
-static BROTLI_INLINE void FN(StitchToPreviousBlock)(
- HasherHandle handle, size_t num_bytes, size_t position,
- const uint8_t* ringbuffer, size_t ringbuffer_mask) {
- if (num_bytes >= FN(HashTypeLength)() - 1 && position >= 3) {
- /* Prepare the hashes for three last bytes of the last write.
- These could not be calculated before, since they require knowledge
- of both the previous and the current block. */
- FN(Store)(handle, ringbuffer, ringbuffer_mask, position - 3);
- FN(Store)(handle, ringbuffer, ringbuffer_mask, position - 2);
- FN(Store)(handle, ringbuffer, ringbuffer_mask, position - 1);
- }
-}
-
-static BROTLI_INLINE void FN(PrepareDistanceCache)(
- HasherHandle handle, int* BROTLI_RESTRICT distance_cache) {
- BROTLI_UNUSED(handle);
- BROTLI_UNUSED(distance_cache);
-}
-
-/* Find a longest backward match of &data[cur_ix & ring_buffer_mask]
- up to the length of max_length and stores the position cur_ix in the
- hash table.
-
- Does not look for matches longer than max_length.
- Does not look for matches further away than max_backward.
- Writes the best match into |out|.
- |out|->score is updated only if a better match is found. */
-static BROTLI_INLINE void FN(FindLongestMatch)(
- HasherHandle handle, const BrotliEncoderDictionary* dictionary,
- const uint8_t* BROTLI_RESTRICT data,
- const size_t ring_buffer_mask, const int* BROTLI_RESTRICT distance_cache,
- const size_t cur_ix, const size_t max_length, const size_t max_backward,
- const size_t gap, const size_t max_distance,
- HasherSearchResult* BROTLI_RESTRICT out) {
- HashLongestMatchQuickly* self = FN(Self)(handle);
- const size_t best_len_in = out->len;
- const size_t cur_ix_masked = cur_ix & ring_buffer_mask;
- const uint32_t key = FN(HashBytes)(&data[cur_ix_masked]);
- int compare_char = data[cur_ix_masked + best_len_in];
- score_t min_score = out->score;
- score_t best_score = out->score;
- size_t best_len = best_len_in;
- size_t cached_backward = (size_t)distance_cache[0];
- size_t prev_ix = cur_ix - cached_backward;
- out->len_code_delta = 0;
- if (prev_ix < cur_ix) {
- prev_ix &= (uint32_t)ring_buffer_mask;
- if (compare_char == data[prev_ix + best_len]) {
- size_t len = FindMatchLengthWithLimit(&data[prev_ix],
- &data[cur_ix_masked],
- max_length);
- if (len >= 4) {
- const score_t score = BackwardReferenceScoreUsingLastDistance(len);
- if (best_score < score) {
- best_score = score;
- best_len = len;
- out->len = len;
- out->distance = cached_backward;
- out->score = best_score;
- compare_char = data[cur_ix_masked + best_len];
- if (BUCKET_SWEEP == 1) {
- self->buckets_[key] = (uint32_t)cur_ix;
- return;
- }
- }
- }
- }
- }
- if (BUCKET_SWEEP == 1) {
- size_t backward;
- size_t len;
- /* Only one to look for, don't bother to prepare for a loop. */
- prev_ix = self->buckets_[key];
- self->buckets_[key] = (uint32_t)cur_ix;
- backward = cur_ix - prev_ix;
- prev_ix &= (uint32_t)ring_buffer_mask;
- if (compare_char != data[prev_ix + best_len_in]) {
- return;
- }
- if (BROTLI_PREDICT_FALSE(backward == 0 || backward > max_backward)) {
- return;
- }
- len = FindMatchLengthWithLimit(&data[prev_ix],
- &data[cur_ix_masked],
- max_length);
- if (len >= 4) {
- const score_t score = BackwardReferenceScore(len, backward);
- if (best_score < score) {
- out->len = len;
- out->distance = backward;
- out->score = score;
- return;
- }
- }
- } else {
- uint32_t* bucket = self->buckets_ + key;
- int i;
- prev_ix = *bucket++;
- for (i = 0; i < BUCKET_SWEEP; ++i, prev_ix = *bucket++) {
- const size_t backward = cur_ix - prev_ix;
- size_t len;
- prev_ix &= (uint32_t)ring_buffer_mask;
- if (compare_char != data[prev_ix + best_len]) {
- continue;
- }
- if (BROTLI_PREDICT_FALSE(backward == 0 || backward > max_backward)) {
- continue;
- }
- len = FindMatchLengthWithLimit(&data[prev_ix],
- &data[cur_ix_masked],
- max_length);
- if (len >= 4) {
- const score_t score = BackwardReferenceScore(len, backward);
- if (best_score < score) {
- best_score = score;
- best_len = len;
- out->len = best_len;
- out->distance = backward;
- out->score = score;
- compare_char = data[cur_ix_masked + best_len];
- }
- }
- }
- }
- if (USE_DICTIONARY && min_score == out->score) {
- SearchInStaticDictionary(dictionary,
- handle, &data[cur_ix_masked], max_length, max_backward + gap,
- max_distance, out, BROTLI_TRUE);
- }
- self->buckets_[key + ((cur_ix >> 3) % BUCKET_SWEEP)] = (uint32_t)cur_ix;
-}
-
-#undef HASH_MAP_SIZE
-#undef BUCKET_SIZE
-
-#undef HashLongestMatchQuickly
diff --git a/BaseTools/Source/C/BrotliCompress/enc/hash_rolling_inc.h b/BaseTools/Source/C/BrotliCompress/enc/hash_rolling_inc.h
deleted file mode 100644
index b8e3b21b5e33..000000000000
--- a/BaseTools/Source/C/BrotliCompress/enc/hash_rolling_inc.h
+++ /dev/null
@@ -1,215 +0,0 @@
-/* NOLINT(build/header_guard) */
-/* Copyright 2018 Google Inc. All Rights Reserved.
-
- Distributed under MIT license.
- See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
-*/
-
-/* template parameters: FN, JUMP, NUMBUCKETS, MASK, CHUNKLEN */
-/* NUMBUCKETS / (MASK + 1) = probability of storing and using hash code. */
-/* JUMP = skip bytes for speedup */
-
-/* Rolling hash for long distance long string matches. Stores one position
- per bucket, bucket key is computed over a long region. */
-
-#define HashRolling HASHER()
-
-static const uint32_t FN(kRollingHashMul32) = 69069;
-static const uint32_t FN(kInvalidPos) = 0xffffffff;
-
-/* This hasher uses a longer forward length, but returning a higher value here
- will hurt compression by the main hasher when combined with a composite
- hasher. The hasher tests for forward itself instead. */
-static BROTLI_INLINE size_t FN(HashTypeLength)(void) { return 4; }
-static BROTLI_INLINE size_t FN(StoreLookahead)(void) { return 4; }
-
-/* Computes a code from a single byte. A lookup table of 256 values could be
- used, but simply adding 1 works about as good. */
-static uint32_t FN(HashByte)(uint8_t byte) {
- return (uint32_t)byte + 1u;
-}
-
-static uint32_t FN(HashRollingFunctionInitial)(uint32_t state, uint8_t add,
- uint32_t factor) {
- return (uint32_t)(factor * state + FN(HashByte)(add));
-}
-
-static uint32_t FN(HashRollingFunction)(uint32_t state, uint8_t add,
- uint8_t rem, uint32_t factor,
- uint32_t factor_remove) {
- return (uint32_t)(factor * state +
- FN(HashByte)(add) - factor_remove * FN(HashByte)(rem));
-}
-
-typedef struct HashRolling {
- uint32_t state;
- uint32_t* table;
- size_t next_ix;
-
- uint32_t chunk_len;
- uint32_t factor;
- uint32_t factor_remove;
-} HashRolling;
-
-static BROTLI_INLINE HashRolling* FN(Self)(HasherHandle handle) {
- return (HashRolling*)&(GetHasherCommon(handle)[1]);
-}
-
-static void FN(Initialize)(
- HasherHandle handle, const BrotliEncoderParams* params) {
- HashRolling* self = FN(Self)(handle);
- size_t i;
- self->state = 0;
- self->next_ix = 0;
-
- self->factor = FN(kRollingHashMul32);
-
- /* Compute the factor of the oldest byte to remove: factor**steps modulo
- 0xffffffff (the multiplications rely on 32-bit overflow) */
- self->factor_remove = 1;
- for (i = 0; i < CHUNKLEN; i += JUMP) {
- self->factor_remove *= self->factor;
- }
-
- self->table = (uint32_t*)((HasherHandle)self + sizeof(HashRolling));
- for (i = 0; i < NUMBUCKETS; i++) {
- self->table[i] = FN(kInvalidPos);
- }
-
- BROTLI_UNUSED(params);
-}
-
-static void FN(Prepare)(HasherHandle handle, BROTLI_BOOL one_shot,
- size_t input_size, const uint8_t* data) {
- HashRolling* self = FN(Self)(handle);
- size_t i;
- /* Too small size, cannot use this hasher. */
- if (input_size < CHUNKLEN) return;
- self->state = 0;
- for (i = 0; i < CHUNKLEN; i += JUMP) {
- self->state = FN(HashRollingFunctionInitial)(
- self->state, data[i], self->factor);
- }
- BROTLI_UNUSED(one_shot);
-}
-
-static BROTLI_INLINE size_t FN(HashMemAllocInBytes)(
- const BrotliEncoderParams* params, BROTLI_BOOL one_shot,
- size_t input_size) {
- return sizeof(HashRolling) + NUMBUCKETS * sizeof(uint32_t);
- BROTLI_UNUSED(params);
- BROTLI_UNUSED(one_shot);
- BROTLI_UNUSED(input_size);
-}
-
-static BROTLI_INLINE void FN(Store)(HasherHandle BROTLI_RESTRICT handle,
- const uint8_t* BROTLI_RESTRICT data, const size_t mask, const size_t ix) {
- BROTLI_UNUSED(handle);
- BROTLI_UNUSED(data);
- BROTLI_UNUSED(mask);
- BROTLI_UNUSED(ix);
-}
-
-static BROTLI_INLINE void FN(StoreRange)(HasherHandle handle,
- const uint8_t* data, const size_t mask, const size_t ix_start,
- const size_t ix_end) {
- BROTLI_UNUSED(handle);
- BROTLI_UNUSED(data);
- BROTLI_UNUSED(mask);
- BROTLI_UNUSED(ix_start);
- BROTLI_UNUSED(ix_end);
-}
-
-static BROTLI_INLINE void FN(StitchToPreviousBlock)(HasherHandle handle,
- size_t num_bytes, size_t position, const uint8_t* ringbuffer,
- size_t ring_buffer_mask) {
- /* In this case we must re-initialize the hasher from scratch from the
- current position. */
- HashRolling* self = FN(Self)(handle);
- size_t position_masked;
- size_t available = num_bytes;
- if ((position & (JUMP - 1)) != 0) {
- size_t diff = JUMP - (position & (JUMP - 1));
- available = (diff > available) ? 0 : (available - diff);
- position += diff;
- }
- position_masked = position & ring_buffer_mask;
- /* wrapping around ringbuffer not handled. */
- if (available > ring_buffer_mask - position_masked) {
- available = ring_buffer_mask - position_masked;
- }
-
- FN(Prepare)(handle, BROTLI_FALSE, available,
- ringbuffer + (position & ring_buffer_mask));
- self->next_ix = position;
- BROTLI_UNUSED(num_bytes);
-}
-
-static BROTLI_INLINE void FN(PrepareDistanceCache)(
- HasherHandle handle, int* BROTLI_RESTRICT distance_cache) {
- BROTLI_UNUSED(handle);
- BROTLI_UNUSED(distance_cache);
-}
-
-static BROTLI_INLINE void FN(FindLongestMatch)(HasherHandle handle,
- const BrotliEncoderDictionary* dictionary,
- const uint8_t* BROTLI_RESTRICT data, const size_t ring_buffer_mask,
- const int* BROTLI_RESTRICT distance_cache, const size_t cur_ix,
- const size_t max_length, const size_t max_backward, const size_t gap,
- const size_t max_distance, HasherSearchResult* BROTLI_RESTRICT out) {
- HashRolling* self = FN(Self)(handle);
- const size_t cur_ix_masked = cur_ix & ring_buffer_mask;
- size_t pos = self->next_ix;
-
- if ((cur_ix & (JUMP - 1)) != 0) return;
-
- /* Not enough lookahead */
- if (max_length < CHUNKLEN) return;
-
- for (pos = self->next_ix; pos <= cur_ix; pos += JUMP) {
- uint32_t code = self->state & MASK;
-
- uint8_t rem = data[pos & ring_buffer_mask];
- uint8_t add = data[(pos + CHUNKLEN) & ring_buffer_mask];
- size_t found_ix = FN(kInvalidPos);
-
- self->state = FN(HashRollingFunction)(
- self->state, add, rem, self->factor, self->factor_remove);
-
- if (code < NUMBUCKETS) {
- found_ix = self->table[code];
- self->table[code] = (uint32_t)pos;
- if (pos == cur_ix && found_ix != FN(kInvalidPos)) {
- /* The cast to 32-bit makes backward distances up to 4GB work even
- if cur_ix is above 4GB, despite using 32-bit values in the table. */
- size_t backward = (uint32_t)(cur_ix - found_ix);
- if (backward <= max_backward) {
- const size_t found_ix_masked = found_ix & ring_buffer_mask;
- const size_t len = FindMatchLengthWithLimit(&data[found_ix_masked],
- &data[cur_ix_masked],
- max_length);
- if (len >= 4 && len > out->len) {
- score_t score = BackwardReferenceScore(len, backward);
- if (score > out->score) {
- out->len = len;
- out->distance = backward;
- out->score = score;
- out->len_code_delta = 0;
- }
- }
- }
- }
- }
- }
-
- self->next_ix = cur_ix + JUMP;
-
- /* NOTE: this hasher does not search in the dictionary. It is used as
- backup-hasher, the main hasher already searches in it. */
- BROTLI_UNUSED(dictionary);
- BROTLI_UNUSED(distance_cache);
- BROTLI_UNUSED(gap);
- BROTLI_UNUSED(max_distance);
-}
-
-#undef HashRolling
diff --git a/BaseTools/Source/C/BrotliCompress/enc/hash_to_binary_tree_inc.h b/BaseTools/Source/C/BrotliCompress/enc/hash_to_binary_tree_inc.h
deleted file mode 100644
index 09c2642030b0..000000000000
--- a/BaseTools/Source/C/BrotliCompress/enc/hash_to_binary_tree_inc.h
+++ /dev/null
@@ -1,327 +0,0 @@
-/* NOLINT(build/header_guard) */
-/* Copyright 2016 Google Inc. All Rights Reserved.
-
- Distributed under MIT license.
- See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
-*/
-
-/* template parameters: FN, BUCKET_BITS, MAX_TREE_COMP_LENGTH,
- MAX_TREE_SEARCH_DEPTH */
-
-/* A (forgetful) hash table where each hash bucket contains a binary tree of
- sequences whose first 4 bytes share the same hash code.
- Each sequence is MAX_TREE_COMP_LENGTH long and is identified by its starting
- position in the input data. The binary tree is sorted by the lexicographic
- order of the sequences, and it is also a max-heap with respect to the
- starting positions. */
-
-#define HashToBinaryTree HASHER()
-
-#define BUCKET_SIZE (1 << BUCKET_BITS)
-
-static BROTLI_INLINE size_t FN(HashTypeLength)(void) { return 4; }
-static BROTLI_INLINE size_t FN(StoreLookahead)(void) {
- return MAX_TREE_COMP_LENGTH;
-}
-
-static uint32_t FN(HashBytes)(const uint8_t* data) {
- uint32_t h = BROTLI_UNALIGNED_LOAD32LE(data) * kHashMul32;
- /* The higher bits contain more mixture from the multiplication,
- so we take our results from there. */
- return h >> (32 - BUCKET_BITS);
-}
-
-typedef struct HashToBinaryTree {
- /* The window size minus 1 */
- size_t window_mask_;
-
- /* Hash table that maps the 4-byte hashes of the sequence to the last
- position where this hash was found, which is the root of the binary
- tree of sequences that share this hash bucket. */
- uint32_t buckets_[BUCKET_SIZE];
-
- /* A position used to mark a non-existent sequence, i.e. a tree is empty if
- its root is at invalid_pos_ and a node is a leaf if both its children
- are at invalid_pos_. */
- uint32_t invalid_pos_;
-
- /* --- Dynamic size members --- */
-
- /* The union of the binary trees of each hash bucket. The root of the tree
- corresponding to a hash is a sequence starting at buckets_[hash] and
- the left and right children of a sequence starting at pos are
- forest_[2 * pos] and forest_[2 * pos + 1]. */
- /* uint32_t forest[2 * num_nodes] */
-} HashToBinaryTree;
-
-static BROTLI_INLINE HashToBinaryTree* FN(Self)(HasherHandle handle) {
- return (HashToBinaryTree*)&(GetHasherCommon(handle)[1]);
-}
-
-static BROTLI_INLINE uint32_t* FN(Forest)(HashToBinaryTree* self) {
- return (uint32_t*)(&self[1]);
-}
-
-static void FN(Initialize)(
- HasherHandle handle, const BrotliEncoderParams* params) {
- HashToBinaryTree* self = FN(Self)(handle);
- self->window_mask_ = (1u << params->lgwin) - 1u;
- self->invalid_pos_ = (uint32_t)(0 - self->window_mask_);
-}
-
-static void FN(Prepare)(HasherHandle handle, BROTLI_BOOL one_shot,
- size_t input_size, const uint8_t* data) {
- HashToBinaryTree* self = FN(Self)(handle);
- uint32_t invalid_pos = self->invalid_pos_;
- uint32_t i;
- BROTLI_UNUSED(data);
- BROTLI_UNUSED(one_shot);
- BROTLI_UNUSED(input_size);
- for (i = 0; i < BUCKET_SIZE; i++) {
- self->buckets_[i] = invalid_pos;
- }
-}
-
-static BROTLI_INLINE size_t FN(HashMemAllocInBytes)(
- const BrotliEncoderParams* params, BROTLI_BOOL one_shot,
- size_t input_size) {
- size_t num_nodes = (size_t)1 << params->lgwin;
- if (one_shot && input_size < num_nodes) {
- num_nodes = input_size;
- }
- return sizeof(HashToBinaryTree) + 2 * sizeof(uint32_t) * num_nodes;
-}
-
-static BROTLI_INLINE size_t FN(LeftChildIndex)(HashToBinaryTree* self,
- const size_t pos) {
- return 2 * (pos & self->window_mask_);
-}
-
-static BROTLI_INLINE size_t FN(RightChildIndex)(HashToBinaryTree* self,
- const size_t pos) {
- return 2 * (pos & self->window_mask_) + 1;
-}
-
-/* Stores the hash of the next 4 bytes and in a single tree-traversal, the
- hash bucket's binary tree is searched for matches and is re-rooted at the
- current position.
-
- If less than MAX_TREE_COMP_LENGTH data is available, the hash bucket of the
- current position is searched for matches, but the state of the hash table
- is not changed, since we can not know the final sorting order of the
- current (incomplete) sequence.
-
- This function must be called with increasing cur_ix positions. */
-static BROTLI_INLINE BackwardMatch* FN(StoreAndFindMatches)(
- HashToBinaryTree* self, const uint8_t* const BROTLI_RESTRICT data,
- const size_t cur_ix, const size_t ring_buffer_mask, const size_t max_length,
- const size_t max_backward, size_t* const BROTLI_RESTRICT best_len,
- BackwardMatch* BROTLI_RESTRICT matches) {
- const size_t cur_ix_masked = cur_ix & ring_buffer_mask;
- const size_t max_comp_len =
- BROTLI_MIN(size_t, max_length, MAX_TREE_COMP_LENGTH);
- const BROTLI_BOOL should_reroot_tree =
- TO_BROTLI_BOOL(max_length >= MAX_TREE_COMP_LENGTH);
- const uint32_t key = FN(HashBytes)(&data[cur_ix_masked]);
- uint32_t* forest = FN(Forest)(self);
- size_t prev_ix = self->buckets_[key];
- /* The forest index of the rightmost node of the left subtree of the new
- root, updated as we traverse and re-root the tree of the hash bucket. */
- size_t node_left = FN(LeftChildIndex)(self, cur_ix);
- /* The forest index of the leftmost node of the right subtree of the new
- root, updated as we traverse and re-root the tree of the hash bucket. */
- size_t node_right = FN(RightChildIndex)(self, cur_ix);
- /* The match length of the rightmost node of the left subtree of the new
- root, updated as we traverse and re-root the tree of the hash bucket. */
- size_t best_len_left = 0;
- /* The match length of the leftmost node of the right subtree of the new
- root, updated as we traverse and re-root the tree of the hash bucket. */
- size_t best_len_right = 0;
- size_t depth_remaining;
- if (should_reroot_tree) {
- self->buckets_[key] = (uint32_t)cur_ix;
- }
- for (depth_remaining = MAX_TREE_SEARCH_DEPTH; ; --depth_remaining) {
- const size_t backward = cur_ix - prev_ix;
- const size_t prev_ix_masked = prev_ix & ring_buffer_mask;
- if (backward == 0 || backward > max_backward || depth_remaining == 0) {
- if (should_reroot_tree) {
- forest[node_left] = self->invalid_pos_;
- forest[node_right] = self->invalid_pos_;
- }
- break;
- }
- {
- const size_t cur_len = BROTLI_MIN(size_t, best_len_left, best_len_right);
- size_t len;
- BROTLI_DCHECK(cur_len <= MAX_TREE_COMP_LENGTH);
- len = cur_len +
- FindMatchLengthWithLimit(&data[cur_ix_masked + cur_len],
- &data[prev_ix_masked + cur_len],
- max_length - cur_len);
- BROTLI_DCHECK(
- 0 == memcmp(&data[cur_ix_masked], &data[prev_ix_masked], len));
- if (matches && len > *best_len) {
- *best_len = len;
- InitBackwardMatch(matches++, backward, len);
- }
- if (len >= max_comp_len) {
- if (should_reroot_tree) {
- forest[node_left] = forest[FN(LeftChildIndex)(self, prev_ix)];
- forest[node_right] = forest[FN(RightChildIndex)(self, prev_ix)];
- }
- break;
- }
- if (data[cur_ix_masked + len] > data[prev_ix_masked + len]) {
- best_len_left = len;
- if (should_reroot_tree) {
- forest[node_left] = (uint32_t)prev_ix;
- }
- node_left = FN(RightChildIndex)(self, prev_ix);
- prev_ix = forest[node_left];
- } else {
- best_len_right = len;
- if (should_reroot_tree) {
- forest[node_right] = (uint32_t)prev_ix;
- }
- node_right = FN(LeftChildIndex)(self, prev_ix);
- prev_ix = forest[node_right];
- }
- }
- }
- return matches;
-}
-
-/* Finds all backward matches of &data[cur_ix & ring_buffer_mask] up to the
- length of max_length and stores the position cur_ix in the hash table.
-
- Sets *num_matches to the number of matches found, and stores the found
- matches in matches[0] to matches[*num_matches - 1]. The matches will be
- sorted by strictly increasing length and (non-strictly) increasing
- distance. */
-static BROTLI_INLINE size_t FN(FindAllMatches)(HasherHandle handle,
- const BrotliEncoderDictionary* dictionary, const uint8_t* data,
- const size_t ring_buffer_mask, const size_t cur_ix,
- const size_t max_length, const size_t max_backward, const size_t gap,
- const BrotliEncoderParams* params, BackwardMatch* matches) {
- BackwardMatch* const orig_matches = matches;
- const size_t cur_ix_masked = cur_ix & ring_buffer_mask;
- size_t best_len = 1;
- const size_t short_match_max_backward =
- params->quality != HQ_ZOPFLIFICATION_QUALITY ? 16 : 64;
- size_t stop = cur_ix - short_match_max_backward;
- uint32_t dict_matches[BROTLI_MAX_STATIC_DICTIONARY_MATCH_LEN + 1];
- size_t i;
- if (cur_ix < short_match_max_backward) { stop = 0; }
- for (i = cur_ix - 1; i > stop && best_len <= 2; --i) {
- size_t prev_ix = i;
- const size_t backward = cur_ix - prev_ix;
- if (BROTLI_PREDICT_FALSE(backward > max_backward)) {
- break;
- }
- prev_ix &= ring_buffer_mask;
- if (data[cur_ix_masked] != data[prev_ix] ||
- data[cur_ix_masked + 1] != data[prev_ix + 1]) {
- continue;
- }
- {
- const size_t len =
- FindMatchLengthWithLimit(&data[prev_ix], &data[cur_ix_masked],
- max_length);
- if (len > best_len) {
- best_len = len;
- InitBackwardMatch(matches++, backward, len);
- }
- }
- }
- if (best_len < max_length) {
- matches = FN(StoreAndFindMatches)(FN(Self)(handle), data, cur_ix,
- ring_buffer_mask, max_length, max_backward, &best_len, matches);
- }
- for (i = 0; i <= BROTLI_MAX_STATIC_DICTIONARY_MATCH_LEN; ++i) {
- dict_matches[i] = kInvalidMatch;
- }
- {
- size_t minlen = BROTLI_MAX(size_t, 4, best_len + 1);
- if (BrotliFindAllStaticDictionaryMatches(dictionary,
- &data[cur_ix_masked], minlen, max_length, &dict_matches[0])) {
- size_t maxlen = BROTLI_MIN(
- size_t, BROTLI_MAX_STATIC_DICTIONARY_MATCH_LEN, max_length);
- size_t l;
- for (l = minlen; l <= maxlen; ++l) {
- uint32_t dict_id = dict_matches[l];
- if (dict_id < kInvalidMatch) {
- size_t distance = max_backward + gap + (dict_id >> 5) + 1;
- if (distance <= params->dist.max_distance) {
- InitDictionaryBackwardMatch(matches++, distance, l, dict_id & 31);
- }
- }
- }
- }
- }
- return (size_t)(matches - orig_matches);
-}
-
-/* Stores the hash of the next 4 bytes and re-roots the binary tree at the
- current sequence, without returning any matches.
- REQUIRES: ix + MAX_TREE_COMP_LENGTH <= end-of-current-block */
-static BROTLI_INLINE void FN(Store)(HasherHandle handle, const uint8_t* data,
- const size_t mask, const size_t ix) {
- HashToBinaryTree* self = FN(Self)(handle);
- /* Maximum distance is window size - 16, see section 9.1. of the spec. */
- const size_t max_backward = self->window_mask_ - BROTLI_WINDOW_GAP + 1;
- FN(StoreAndFindMatches)(self, data, ix, mask, MAX_TREE_COMP_LENGTH,
- max_backward, NULL, NULL);
-}
-
-static BROTLI_INLINE void FN(StoreRange)(HasherHandle handle,
- const uint8_t* data, const size_t mask, const size_t ix_start,
- const size_t ix_end) {
- size_t i = ix_start;
- size_t j = ix_start;
- if (ix_start + 63 <= ix_end) {
- i = ix_end - 63;
- }
- if (ix_start + 512 <= i) {
- for (; j < i; j += 8) {
- FN(Store)(handle, data, mask, j);
- }
- }
- for (; i < ix_end; ++i) {
- FN(Store)(handle, data, mask, i);
- }
-}
-
-static BROTLI_INLINE void FN(StitchToPreviousBlock)(HasherHandle handle,
- size_t num_bytes, size_t position, const uint8_t* ringbuffer,
- size_t ringbuffer_mask) {
- HashToBinaryTree* self = FN(Self)(handle);
- if (num_bytes >= FN(HashTypeLength)() - 1 &&
- position >= MAX_TREE_COMP_LENGTH) {
- /* Store the last `MAX_TREE_COMP_LENGTH - 1` positions in the hasher.
- These could not be calculated before, since they require knowledge
- of both the previous and the current block. */
- const size_t i_start = position - MAX_TREE_COMP_LENGTH + 1;
- const size_t i_end = BROTLI_MIN(size_t, position, i_start + num_bytes);
- size_t i;
- for (i = i_start; i < i_end; ++i) {
- /* Maximum distance is window size - 16, see section 9.1. of the spec.
- Furthermore, we have to make sure that we don't look further back
- from the start of the next block than the window size, otherwise we
- could access already overwritten areas of the ring-buffer. */
- const size_t max_backward =
- self->window_mask_ - BROTLI_MAX(size_t,
- BROTLI_WINDOW_GAP - 1,
- position - i);
- /* We know that i + MAX_TREE_COMP_LENGTH <= position + num_bytes, i.e. the
- end of the current block and that we have at least
- MAX_TREE_COMP_LENGTH tail in the ring-buffer. */
- FN(StoreAndFindMatches)(self, ringbuffer, i, ringbuffer_mask,
- MAX_TREE_COMP_LENGTH, max_backward, NULL, NULL);
- }
- }
-}
-
-#undef BUCKET_SIZE
-
-#undef HashToBinaryTree
diff --git a/BaseTools/Source/C/BrotliCompress/enc/histogram.h b/BaseTools/Source/C/BrotliCompress/enc/histogram.h
deleted file mode 100644
index c08a4cac2bfa..000000000000
--- a/BaseTools/Source/C/BrotliCompress/enc/histogram.h
+++ /dev/null
@@ -1,63 +0,0 @@
-/* Copyright 2013 Google Inc. All Rights Reserved.
-
- Distributed under MIT license.
- See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
-*/
-
-/* Models the histograms of literals, commands and distance codes. */
-
-#ifndef BROTLI_ENC_HISTOGRAM_H_
-#define BROTLI_ENC_HISTOGRAM_H_
-
-#include <string.h> /* memset */
-
-#include "../common/constants.h"
-#include "../common/context.h"
-#include "../common/platform.h"
-#include <brotli/types.h>
-#include "./block_splitter.h"
-#include "./command.h"
-
-#if defined(__cplusplus) || defined(c_plusplus)
-extern "C" {
-#endif
-
-/* The distance symbols effectively used by "Large Window Brotli" (32-bit). */
-#define BROTLI_NUM_HISTOGRAM_DISTANCE_SYMBOLS 544
-
-#define FN(X) X ## Literal
-#define DATA_SIZE BROTLI_NUM_LITERAL_SYMBOLS
-#define DataType uint8_t
-#include "./histogram_inc.h" /* NOLINT(build/include) */
-#undef DataType
-#undef DATA_SIZE
-#undef FN
-
-#define FN(X) X ## Command
-#define DataType uint16_t
-#define DATA_SIZE BROTLI_NUM_COMMAND_SYMBOLS
-#include "./histogram_inc.h" /* NOLINT(build/include) */
-#undef DATA_SIZE
-#undef FN
-
-#define FN(X) X ## Distance
-#define DATA_SIZE BROTLI_NUM_HISTOGRAM_DISTANCE_SYMBOLS
-#include "./histogram_inc.h" /* NOLINT(build/include) */
-#undef DataType
-#undef DATA_SIZE
-#undef FN
-
-BROTLI_INTERNAL void BrotliBuildHistogramsWithContext(
- const Command* cmds, const size_t num_commands,
- const BlockSplit* literal_split, const BlockSplit* insert_and_copy_split,
- const BlockSplit* dist_split, const uint8_t* ringbuffer, size_t pos,
- size_t mask, uint8_t prev_byte, uint8_t prev_byte2,
- const ContextType* context_modes, HistogramLiteral* literal_histograms,
- HistogramCommand* insert_and_copy_histograms,
- HistogramDistance* copy_dist_histograms);
-
-#if defined(__cplusplus) || defined(c_plusplus)
-} /* extern "C" */
-#endif
-
-#endif /* BROTLI_ENC_HISTOGRAM_H_ */
diff --git a/BaseTools/Source/C/BrotliCompress/enc/histogram_inc.h b/BaseTools/Source/C/BrotliCompress/enc/histogram_inc.h
deleted file mode 100644
index a9d2e7018d60..000000000000
--- a/BaseTools/Source/C/BrotliCompress/enc/histogram_inc.h
+++ /dev/null
@@ -1,51 +0,0 @@
-/* NOLINT(build/header_guard) */
-/* Copyright 2013 Google Inc. All Rights Reserved.
-
- Distributed under MIT license.
- See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
-*/
-
-/* template parameters: Histogram, DATA_SIZE, DataType */
-
-/* A simple container for histograms of data in blocks. */
-
-typedef struct FN(Histogram) {
- uint32_t data_[DATA_SIZE];
- size_t total_count_;
- double bit_cost_;
-} FN(Histogram);
-
-static BROTLI_INLINE void FN(HistogramClear)(FN(Histogram)* self) {
- memset(self->data_, 0, sizeof(self->data_));
- self->total_count_ = 0;
- self->bit_cost_ = HUGE_VAL;
-}
-
-static BROTLI_INLINE void FN(ClearHistograms)(
- FN(Histogram)* array, size_t length) {
- size_t i;
- for (i = 0; i < length; ++i) FN(HistogramClear)(array + i);
-}
-
-static BROTLI_INLINE void FN(HistogramAdd)(FN(Histogram)* self, size_t val) {
- ++self->data_[val];
- ++self->total_count_;
-}
-
-static BROTLI_INLINE void FN(HistogramAddVector)(FN(Histogram)* self,
- const DataType* p, size_t n) {
- self->total_count_ += n;
- n += 1;
- while (--n) ++self->data_[*p++];
-}
-
-static BROTLI_INLINE void FN(HistogramAddHistogram)(FN(Histogram)* self,
- const FN(Histogram)* v) {
- size_t i;
- self->total_count_ += v->total_count_;
- for (i = 0; i < DATA_SIZE; ++i) {
- self->data_[i] += v->data_[i];
- }
-}
-
-static BROTLI_INLINE size_t FN(HistogramDataSize)(void) { return DATA_SIZE; }
diff --git a/BaseTools/Source/C/BrotliCompress/enc/literal_cost.h b/BaseTools/Source/C/BrotliCompress/enc/literal_cost.h
deleted file mode 100644
index 4891a26d5012..000000000000
--- a/BaseTools/Source/C/BrotliCompress/enc/literal_cost.h
+++ /dev/null
@@ -1,30 +0,0 @@
-/* Copyright 2013 Google Inc. All Rights Reserved.
-
- Distributed under MIT license.
- See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
-*/
-
-/* Literal cost model to allow backward reference replacement to be efficient.
-*/
-
-#ifndef BROTLI_ENC_LITERAL_COST_H_
-#define BROTLI_ENC_LITERAL_COST_H_
-
-#include "../common/platform.h"
-#include <brotli/types.h>
-
-#if defined(__cplusplus) || defined(c_plusplus)
-extern "C" {
-#endif
-
-/* Estimates how many bits the literals in the interval [pos, pos + len) in the
- ring-buffer (data, mask) will take entropy coded and writes these estimates
- to the cost[0..len) array. */
-BROTLI_INTERNAL void BrotliEstimateBitCostsForLiterals(
- size_t pos, size_t len, size_t mask, const uint8_t* data, float* cost);
-
-#if defined(__cplusplus) || defined(c_plusplus)
-} /* extern "C" */
-#endif
-
-#endif /* BROTLI_ENC_LITERAL_COST_H_ */
diff --git a/BaseTools/Source/C/BrotliCompress/enc/memory.h b/BaseTools/Source/C/BrotliCompress/enc/memory.h
deleted file mode 100644
index 2bd4d0c872a6..000000000000
--- a/BaseTools/Source/C/BrotliCompress/enc/memory.h
+++ /dev/null
@@ -1,102 +0,0 @@
-/* Copyright 2016 Google Inc. All Rights Reserved.
-
- Distributed under MIT license.
- See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
-*/
-
-/* Macros for memory management. */
-
-#ifndef BROTLI_ENC_MEMORY_H_
-#define BROTLI_ENC_MEMORY_H_
-
-#include <string.h> /* memcpy */
-
-#include "../common/platform.h"
-#include <brotli/types.h>
-
-#if defined(__cplusplus) || defined(c_plusplus)
-extern "C" {
-#endif
-
-#if !defined(BROTLI_ENCODER_CLEANUP_ON_OOM) && \
- !defined(BROTLI_ENCODER_EXIT_ON_OOM)
-#define BROTLI_ENCODER_EXIT_ON_OOM
-#endif
-
-typedef struct MemoryManager {
- brotli_alloc_func alloc_func;
- brotli_free_func free_func;
- void* opaque;
-#if !defined(BROTLI_ENCODER_EXIT_ON_OOM)
- BROTLI_BOOL is_oom;
- size_t perm_allocated;
- size_t new_allocated;
- size_t new_freed;
- void* pointers[256];
-#endif /* BROTLI_ENCODER_EXIT_ON_OOM */
-} MemoryManager;
-
-BROTLI_INTERNAL void BrotliInitMemoryManager(
- MemoryManager* m, brotli_alloc_func alloc_func, brotli_free_func free_func,
- void* opaque);
-
-BROTLI_INTERNAL void* BrotliAllocate(MemoryManager* m, size_t n);
-#define BROTLI_ALLOC(M, T, N) \
- ((N) > 0 ? ((T*)BrotliAllocate((M), (N) * sizeof(T))) : NULL)
-
-BROTLI_INTERNAL void BrotliFree(MemoryManager* m, void* p);
-#define BROTLI_FREE(M, P) { \
- BrotliFree((M), (P)); \
- P = NULL; \
-}
-
-#if defined(BROTLI_ENCODER_EXIT_ON_OOM)
-#define BROTLI_IS_OOM(M) (!!0)
-#else /* BROTLI_ENCODER_EXIT_ON_OOM */
-#define BROTLI_IS_OOM(M) (!!(M)->is_oom)
-#endif /* BROTLI_ENCODER_EXIT_ON_OOM */
-
-BROTLI_INTERNAL void BrotliWipeOutMemoryManager(MemoryManager* m);
-
-/*
-Dynamically grows array capacity to at least the requested size
-M: MemoryManager
-T: data type
-A: array
-C: capacity
-R: requested size
-*/
-#define BROTLI_ENSURE_CAPACITY(M, T, A, C, R) { \
- if (C < (R)) { \
- size_t _new_size = (C == 0) ? (R) : C; \
- T* new_array; \
- while (_new_size < (R)) _new_size *= 2; \
- new_array = BROTLI_ALLOC((M), T, _new_size); \
- if (!BROTLI_IS_OOM(M) && C != 0) \
- memcpy(new_array, A, C * sizeof(T)); \
- BROTLI_FREE((M), A); \
- A = new_array; \
- C = _new_size; \
- } \
-}
-
-/*
-Appends value and dynamically grows array capacity when needed
-M: MemoryManager
-T: data type
-A: array
-C: array capacity
-S: array size
-V: value to append
-*/
-#define BROTLI_ENSURE_CAPACITY_APPEND(M, T, A, C, S, V) { \
- (S)++; \
- BROTLI_ENSURE_CAPACITY(M, T, A, C, S); \
- A[(S) - 1] = (V); \
-}
-
-#if defined(__cplusplus) || defined(c_plusplus)
-} /* extern "C" */
-#endif
-
-#endif /* BROTLI_ENC_MEMORY_H_ */
diff --git a/BaseTools/Source/C/BrotliCompress/enc/metablock.h b/BaseTools/Source/C/BrotliCompress/enc/metablock.h
deleted file mode 100644
index e35c98554f7a..000000000000
--- a/BaseTools/Source/C/BrotliCompress/enc/metablock.h
+++ /dev/null
@@ -1,105 +0,0 @@
-/* Copyright 2015 Google Inc. All Rights Reserved.
-
- Distributed under MIT license.
- See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
-*/
-
-/* Algorithms for distributing the literals and commands of a metablock between
- block types and contexts. */
-
-#ifndef BROTLI_ENC_METABLOCK_H_
-#define BROTLI_ENC_METABLOCK_H_
-
-#include "../common/context.h"
-#include "../common/platform.h"
-#include <brotli/types.h>
-#include "./block_splitter.h"
-#include "./command.h"
-#include "./histogram.h"
-#include "./memory.h"
-#include "./quality.h"
-
-#if defined(__cplusplus) || defined(c_plusplus)
-extern "C" {
-#endif
-
-typedef struct MetaBlockSplit {
- BlockSplit literal_split;
- BlockSplit command_split;
- BlockSplit distance_split;
- uint32_t* literal_context_map;
- size_t literal_context_map_size;
- uint32_t* distance_context_map;
- size_t distance_context_map_size;
- HistogramLiteral* literal_histograms;
- size_t literal_histograms_size;
- HistogramCommand* command_histograms;
- size_t command_histograms_size;
- HistogramDistance* distance_histograms;
- size_t distance_histograms_size;
-} MetaBlockSplit;
-
-static BROTLI_INLINE void InitMetaBlockSplit(MetaBlockSplit* mb) {
- BrotliInitBlockSplit(&mb->literal_split);
- BrotliInitBlockSplit(&mb->command_split);
- BrotliInitBlockSplit(&mb->distance_split);
- mb->literal_context_map = 0;
- mb->literal_context_map_size = 0;
- mb->distance_context_map = 0;
- mb->distance_context_map_size = 0;
- mb->literal_histograms = 0;
- mb->literal_histograms_size = 0;
- mb->command_histograms = 0;
- mb->command_histograms_size = 0;
- mb->distance_histograms = 0;
- mb->distance_histograms_size = 0;
-}
-
-static BROTLI_INLINE void DestroyMetaBlockSplit(
- MemoryManager* m, MetaBlockSplit* mb) {
- BrotliDestroyBlockSplit(m, &mb->literal_split);
- BrotliDestroyBlockSplit(m, &mb->command_split);
- BrotliDestroyBlockSplit(m, &mb->distance_split);
- BROTLI_FREE(m, mb->literal_context_map);
- BROTLI_FREE(m, mb->distance_context_map);
- BROTLI_FREE(m, mb->literal_histograms);
- BROTLI_FREE(m, mb->command_histograms);
- BROTLI_FREE(m, mb->distance_histograms);
-}
-
-/* Uses the slow shortest-path block splitter and does context clustering.
- The distance parameters are dynamically selected based on the commands
- which get recomputed under the new distance parameters. The new distance
- parameters are stored into *params. */
-BROTLI_INTERNAL void BrotliBuildMetaBlock(MemoryManager* m,
- const uint8_t* ringbuffer,
- const size_t pos,
- const size_t mask,
- BrotliEncoderParams* params,
- uint8_t prev_byte,
- uint8_t prev_byte2,
- Command* cmds,
- size_t num_commands,
- ContextType literal_context_mode,
- MetaBlockSplit* mb);
-
-/* Uses a fast greedy block splitter that tries to merge current block with the
- last or the second last block and uses a static context clustering which
- is the same for all block types. */
-BROTLI_INTERNAL void BrotliBuildMetaBlockGreedy(
- MemoryManager* m, const uint8_t* ringbuffer, size_t pos, size_t mask,
- uint8_t prev_byte, uint8_t prev_byte2, ContextLut literal_context_lut,
- size_t num_contexts, const uint32_t* static_context_map,
- const Command* commands, size_t n_commands, MetaBlockSplit* mb);
-
-BROTLI_INTERNAL void BrotliOptimizeHistograms(uint32_t num_distance_codes,
- MetaBlockSplit* mb);
-
-BROTLI_INTERNAL void BrotliInitDistanceParams(BrotliEncoderParams* params,
- uint32_t npostfix, uint32_t ndirect);
-
-#if defined(__cplusplus) || defined(c_plusplus)
-} /* extern "C" */
-#endif
-
-#endif /* BROTLI_ENC_METABLOCK_H_ */
diff --git a/BaseTools/Source/C/BrotliCompress/enc/metablock_inc.h b/BaseTools/Source/C/BrotliCompress/enc/metablock_inc.h
deleted file mode 100644
index c6b1c50b32ce..000000000000
--- a/BaseTools/Source/C/BrotliCompress/enc/metablock_inc.h
+++ /dev/null
@@ -1,183 +0,0 @@
-/* NOLINT(build/header_guard) */
-/* Copyright 2015 Google Inc. All Rights Reserved.
-
- Distributed under MIT license.
- See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
-*/
-
-/* template parameters: FN */
-
-#define HistogramType FN(Histogram)
-
-/* Greedy block splitter for one block category (literal, command or distance).
-*/
-typedef struct FN(BlockSplitter) {
- /* Alphabet size of particular block category. */
- size_t alphabet_size_;
- /* We collect at least this many symbols for each block. */
- size_t min_block_size_;
- /* We merge histograms A and B if
- entropy(A+B) < entropy(A) + entropy(B) + split_threshold_,
- where A is the current histogram and B is the histogram of the last or the
- second last block type. */
- double split_threshold_;
-
- size_t num_blocks_;
- BlockSplit* split_; /* not owned */
- HistogramType* histograms_; /* not owned */
- size_t* histograms_size_; /* not owned */
-
- /* The number of symbols that we want to collect before deciding on whether
- or not to merge the block with a previous one or emit a new block. */
- size_t target_block_size_;
- /* The number of symbols in the current histogram. */
- size_t block_size_;
- /* Offset of the current histogram. */
- size_t curr_histogram_ix_;
- /* Offset of the histograms of the previous two block types. */
- size_t last_histogram_ix_[2];
- /* Entropy of the previous two block types. */
- double last_entropy_[2];
- /* The number of times we merged the current block with the last one. */
- size_t merge_last_count_;
-} FN(BlockSplitter);
-
-static void FN(InitBlockSplitter)(
- MemoryManager* m, FN(BlockSplitter)* self, size_t alphabet_size,
- size_t min_block_size, double split_threshold, size_t num_symbols,
- BlockSplit* split, HistogramType** histograms, size_t* histograms_size) {
- size_t max_num_blocks = num_symbols / min_block_size + 1;
- /* We have to allocate one more histogram than the maximum number of block
- types for the current histogram when the meta-block is too big. */
- size_t max_num_types =
- BROTLI_MIN(size_t, max_num_blocks, BROTLI_MAX_NUMBER_OF_BLOCK_TYPES + 1);
- self->alphabet_size_ = alphabet_size;
- self->min_block_size_ = min_block_size;
- self->split_threshold_ = split_threshold;
- self->num_blocks_ = 0;
- self->split_ = split;
- self->histograms_size_ = histograms_size;
- self->target_block_size_ = min_block_size;
- self->block_size_ = 0;
- self->curr_histogram_ix_ = 0;
- self->merge_last_count_ = 0;
- BROTLI_ENSURE_CAPACITY(m, uint8_t,
- split->types, split->types_alloc_size, max_num_blocks);
- BROTLI_ENSURE_CAPACITY(m, uint32_t,
- split->lengths, split->lengths_alloc_size, max_num_blocks);
- if (BROTLI_IS_OOM(m)) return;
- self->split_->num_blocks = max_num_blocks;
- BROTLI_DCHECK(*histograms == 0);
- *histograms_size = max_num_types;
- *histograms = BROTLI_ALLOC(m, HistogramType, *histograms_size);
- self->histograms_ = *histograms;
- if (BROTLI_IS_OOM(m)) return;
- /* Clear only current histogram. */
- FN(HistogramClear)(&self->histograms_[0]);
- self->last_histogram_ix_[0] = self->last_histogram_ix_[1] = 0;
-}
-
-/* Does either of three things:
- (1) emits the current block with a new block type;
- (2) emits the current block with the type of the second last block;
- (3) merges the current block with the last block. */
-static void FN(BlockSplitterFinishBlock)(
- FN(BlockSplitter)* self, BROTLI_BOOL is_final) {
- BlockSplit* split = self->split_;
- double* last_entropy = self->last_entropy_;
- HistogramType* histograms = self->histograms_;
- self->block_size_ =
- BROTLI_MAX(size_t, self->block_size_, self->min_block_size_);
- if (self->num_blocks_ == 0) {
- /* Create first block. */
- split->lengths[0] = (uint32_t)self->block_size_;
- split->types[0] = 0;
- last_entropy[0] =
- BitsEntropy(histograms[0].data_, self->alphabet_size_);
- last_entropy[1] = last_entropy[0];
- ++self->num_blocks_;
- ++split->num_types;
- ++self->curr_histogram_ix_;
- if (self->curr_histogram_ix_ < *self->histograms_size_)
- FN(HistogramClear)(&histograms[self->curr_histogram_ix_]);
- self->block_size_ = 0;
- } else if (self->block_size_ > 0) {
- double entropy = BitsEntropy(histograms[self->curr_histogram_ix_].data_,
- self->alphabet_size_);
- HistogramType combined_histo[2];
- double combined_entropy[2];
- double diff[2];
- size_t j;
- for (j = 0; j < 2; ++j) {
- size_t last_histogram_ix = self->last_histogram_ix_[j];
- combined_histo[j] = histograms[self->curr_histogram_ix_];
- FN(HistogramAddHistogram)(&combined_histo[j],
- &histograms[last_histogram_ix]);
- combined_entropy[j] = BitsEntropy(
- &combined_histo[j].data_[0], self->alphabet_size_);
- diff[j] = combined_entropy[j] - entropy - last_entropy[j];
- }
-
- if (split->num_types < BROTLI_MAX_NUMBER_OF_BLOCK_TYPES &&
- diff[0] > self->split_threshold_ &&
- diff[1] > self->split_threshold_) {
- /* Create new block. */
- split->lengths[self->num_blocks_] = (uint32_t)self->block_size_;
- split->types[self->num_blocks_] = (uint8_t)split->num_types;
- self->last_histogram_ix_[1] = self->last_histogram_ix_[0];
- self->last_histogram_ix_[0] = (uint8_t)split->num_types;
- last_entropy[1] = last_entropy[0];
- last_entropy[0] = entropy;
- ++self->num_blocks_;
- ++split->num_types;
- ++self->curr_histogram_ix_;
- if (self->curr_histogram_ix_ < *self->histograms_size_)
- FN(HistogramClear)(&histograms[self->curr_histogram_ix_]);
- self->block_size_ = 0;
- self->merge_last_count_ = 0;
- self->target_block_size_ = self->min_block_size_;
- } else if (diff[1] < diff[0] - 20.0) {
- /* Combine this block with second last block. */
- split->lengths[self->num_blocks_] = (uint32_t)self->block_size_;
- split->types[self->num_blocks_] = split->types[self->num_blocks_ - 2];
- BROTLI_SWAP(size_t, self->last_histogram_ix_, 0, 1);
- histograms[self->last_histogram_ix_[0]] = combined_histo[1];
- last_entropy[1] = last_entropy[0];
- last_entropy[0] = combined_entropy[1];
- ++self->num_blocks_;
- self->block_size_ = 0;
- FN(HistogramClear)(&histograms[self->curr_histogram_ix_]);
- self->merge_last_count_ = 0;
- self->target_block_size_ = self->min_block_size_;
- } else {
- /* Combine this block with last block. */
- split->lengths[self->num_blocks_ - 1] += (uint32_t)self->block_size_;
- histograms[self->last_histogram_ix_[0]] = combined_histo[0];
- last_entropy[0] = combined_entropy[0];
- if (split->num_types == 1) {
- last_entropy[1] = last_entropy[0];
- }
- self->block_size_ = 0;
- FN(HistogramClear)(&histograms[self->curr_histogram_ix_]);
- if (++self->merge_last_count_ > 1) {
- self->target_block_size_ += self->min_block_size_;
- }
- }
- }
- if (is_final) {
- *self->histograms_size_ = split->num_types;
- split->num_blocks = self->num_blocks_;
- }
-}
-
-/* Adds the next symbol to the current histogram. When the current histogram
- reaches the target size, decides on merging the block. */
-static void FN(BlockSplitterAddSymbol)(FN(BlockSplitter)* self, size_t symbol) {
- FN(HistogramAdd)(&self->histograms_[self->curr_histogram_ix_], symbol);
- ++self->block_size_;
- if (self->block_size_ == self->target_block_size_) {
- FN(BlockSplitterFinishBlock)(self, /* is_final = */ BROTLI_FALSE);
- }
-}
-
-#undef HistogramType
diff --git a/BaseTools/Source/C/BrotliCompress/enc/params.h b/BaseTools/Source/C/BrotliCompress/enc/params.h
deleted file mode 100644
index 96fed343ccbd..000000000000
--- a/BaseTools/Source/C/BrotliCompress/enc/params.h
+++ /dev/null
@@ -1,44 +0,0 @@
-/* Copyright 2017 Google Inc. All Rights Reserved.
-
- Distributed under MIT license.
- See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
-*/
-
-/* Parameters for the Brotli encoder with chosen quality levels. */
-
-#ifndef BROTLI_ENC_PARAMS_H_
-#define BROTLI_ENC_PARAMS_H_
-
-#include <brotli/encode.h>
-#include "./encoder_dict.h"
-
-typedef struct BrotliHasherParams {
- int type;
- int bucket_bits;
- int block_bits;
- int hash_len;
- int num_last_distances_to_check;
-} BrotliHasherParams;
-
-typedef struct BrotliDistanceParams {
- uint32_t distance_postfix_bits;
- uint32_t num_direct_distance_codes;
- uint32_t alphabet_size;
- size_t max_distance;
-} BrotliDistanceParams;
-
-/* Encoding parameters */
-typedef struct BrotliEncoderParams {
- BrotliEncoderMode mode;
- int quality;
- int lgwin;
- int lgblock;
- size_t size_hint;
- BROTLI_BOOL disable_literal_context_modeling;
- BROTLI_BOOL large_window;
- BrotliHasherParams hasher;
- BrotliDistanceParams dist;
- BrotliEncoderDictionary dictionary;
-} BrotliEncoderParams;
-
-#endif /* BROTLI_ENC_PARAMS_H_ */
diff --git a/BaseTools/Source/C/BrotliCompress/enc/prefix.h b/BaseTools/Source/C/BrotliCompress/enc/prefix.h
deleted file mode 100644
index e52edd1faa78..000000000000
--- a/BaseTools/Source/C/BrotliCompress/enc/prefix.h
+++ /dev/null
@@ -1,53 +0,0 @@
-/* Copyright 2013 Google Inc. All Rights Reserved.
-
- Distributed under MIT license.
- See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
-*/
-
-/* Functions for encoding of integers into prefix codes the amount of extra
- bits, and the actual values of the extra bits. */
-
-#ifndef BROTLI_ENC_PREFIX_H_
-#define BROTLI_ENC_PREFIX_H_
-
-#include "../common/constants.h"
-#include "../common/platform.h"
-#include <brotli/types.h>
-#include "./fast_log.h"
-
-#if defined(__cplusplus) || defined(c_plusplus)
-extern "C" {
-#endif
-
-/* Here distance_code is an intermediate code, i.e. one of the special codes or
- the actual distance increased by BROTLI_NUM_DISTANCE_SHORT_CODES - 1. */
-static BROTLI_INLINE void PrefixEncodeCopyDistance(size_t distance_code,
- size_t num_direct_codes,
- size_t postfix_bits,
- uint16_t* code,
- uint32_t* extra_bits) {
- if (distance_code < BROTLI_NUM_DISTANCE_SHORT_CODES + num_direct_codes) {
- *code = (uint16_t)distance_code;
- *extra_bits = 0;
- return;
- } else {
- size_t dist = ((size_t)1 << (postfix_bits + 2u)) +
- (distance_code - BROTLI_NUM_DISTANCE_SHORT_CODES - num_direct_codes);
- size_t bucket = Log2FloorNonZero(dist) - 1;
- size_t postfix_mask = (1u << postfix_bits) - 1;
- size_t postfix = dist & postfix_mask;
- size_t prefix = (dist >> bucket) & 1;
- size_t offset = (2 + prefix) << bucket;
- size_t nbits = bucket - postfix_bits;
- *code = (uint16_t)((nbits << 10) |
- (BROTLI_NUM_DISTANCE_SHORT_CODES + num_direct_codes +
- ((2 * (nbits - 1) + prefix) << postfix_bits) + postfix));
- *extra_bits = (uint32_t)((dist - offset) >> postfix_bits);
- }
-}
-
-#if defined(__cplusplus) || defined(c_plusplus)
-} /* extern "C" */
-#endif
-
-#endif /* BROTLI_ENC_PREFIX_H_ */
diff --git a/BaseTools/Source/C/BrotliCompress/enc/quality.h b/BaseTools/Source/C/BrotliCompress/enc/quality.h
deleted file mode 100644
index 072bf8f156e4..000000000000
--- a/BaseTools/Source/C/BrotliCompress/enc/quality.h
+++ /dev/null
@@ -1,165 +0,0 @@
-/* Copyright 2016 Google Inc. All Rights Reserved.
-
- Distributed under MIT license.
- See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
-*/
-
-/* Constants and formulas that affect speed-ratio trade-offs and thus define
- quality levels. */
-
-#ifndef BROTLI_ENC_QUALITY_H_
-#define BROTLI_ENC_QUALITY_H_
-
-#include "../common/platform.h"
-#include <brotli/encode.h>
-#include "./params.h"
-
-#define FAST_ONE_PASS_COMPRESSION_QUALITY 0
-#define FAST_TWO_PASS_COMPRESSION_QUALITY 1
-#define ZOPFLIFICATION_QUALITY 10
-#define HQ_ZOPFLIFICATION_QUALITY 11
-
-#define MAX_QUALITY_FOR_STATIC_ENTROPY_CODES 2
-#define MIN_QUALITY_FOR_BLOCK_SPLIT 4
-#define MIN_QUALITY_FOR_NONZERO_DISTANCE_PARAMS 4
-#define MIN_QUALITY_FOR_OPTIMIZE_HISTOGRAMS 4
-#define MIN_QUALITY_FOR_EXTENSIVE_REFERENCE_SEARCH 5
-#define MIN_QUALITY_FOR_CONTEXT_MODELING 5
-#define MIN_QUALITY_FOR_HQ_CONTEXT_MODELING 7
-#define MIN_QUALITY_FOR_HQ_BLOCK_SPLITTING 10
-
-/* For quality below MIN_QUALITY_FOR_BLOCK_SPLIT there is no block splitting,
- so we buffer at most this much literals and commands. */
-#define MAX_NUM_DELAYED_SYMBOLS 0x2FFF
-
-/* Returns hash-table size for quality levels 0 and 1. */
-static BROTLI_INLINE size_t MaxHashTableSize(int quality) {
- return quality == FAST_ONE_PASS_COMPRESSION_QUALITY ? 1 << 15 : 1 << 17;
-}
-
-/* The maximum length for which the zopflification uses distinct distances. */
-#define MAX_ZOPFLI_LEN_QUALITY_10 150
-#define MAX_ZOPFLI_LEN_QUALITY_11 325
-
-/* Do not thoroughly search when a long copy is found. */
-#define BROTLI_LONG_COPY_QUICK_STEP 16384
-
-static BROTLI_INLINE size_t MaxZopfliLen(const BrotliEncoderParams* params) {
- return params->quality <= 10 ?
- MAX_ZOPFLI_LEN_QUALITY_10 :
- MAX_ZOPFLI_LEN_QUALITY_11;
-}
-
-/* Number of best candidates to evaluate to expand Zopfli chain. */
-static BROTLI_INLINE size_t MaxZopfliCandidates(
- const BrotliEncoderParams* params) {
- return params->quality <= 10 ? 1 : 5;
-}
-
-static BROTLI_INLINE void SanitizeParams(BrotliEncoderParams* params) {
- params->quality = BROTLI_MIN(int, BROTLI_MAX_QUALITY,
- BROTLI_MAX(int, BROTLI_MIN_QUALITY, params->quality));
- if (params->quality <= MAX_QUALITY_FOR_STATIC_ENTROPY_CODES) {
- params->large_window = BROTLI_FALSE;
- }
- if (params->lgwin < BROTLI_MIN_WINDOW_BITS) {
- params->lgwin = BROTLI_MIN_WINDOW_BITS;
- } else {
- int max_lgwin = params->large_window ? BROTLI_LARGE_MAX_WINDOW_BITS :
- BROTLI_MAX_WINDOW_BITS;
- if (params->lgwin > max_lgwin) params->lgwin = max_lgwin;
- }
-}
-
-/* Returns optimized lg_block value. */
-static BROTLI_INLINE int ComputeLgBlock(const BrotliEncoderParams* params) {
- int lgblock = params->lgblock;
- if (params->quality == FAST_ONE_PASS_COMPRESSION_QUALITY ||
- params->quality == FAST_TWO_PASS_COMPRESSION_QUALITY) {
- lgblock = params->lgwin;
- } else if (params->quality < MIN_QUALITY_FOR_BLOCK_SPLIT) {
- lgblock = 14;
- } else if (lgblock == 0) {
- lgblock = 16;
- if (params->quality >= 9 && params->lgwin > lgblock) {
- lgblock = BROTLI_MIN(int, 18, params->lgwin);
- }
- } else {
- lgblock = BROTLI_MIN(int, BROTLI_MAX_INPUT_BLOCK_BITS,
- BROTLI_MAX(int, BROTLI_MIN_INPUT_BLOCK_BITS, lgblock));
- }
- return lgblock;
-}
-
-/* Returns log2 of the size of main ring buffer area.
- Allocate at least lgwin + 1 bits for the ring buffer so that the newly
- added block fits there completely and we still get lgwin bits and at least
- read_block_size_bits + 1 bits because the copy tail length needs to be
- smaller than ring-buffer size. */
-static BROTLI_INLINE int ComputeRbBits(const BrotliEncoderParams* params) {
- return 1 + BROTLI_MAX(int, params->lgwin, params->lgblock);
-}
-
-static BROTLI_INLINE size_t MaxMetablockSize(
- const BrotliEncoderParams* params) {
- int bits =
- BROTLI_MIN(int, ComputeRbBits(params), BROTLI_MAX_INPUT_BLOCK_BITS);
- return (size_t)1 << bits;
-}
-
-/* When searching for backward references and have not seen matches for a long
- time, we can skip some match lookups. Unsuccessful match lookups are very
- expensive and this kind of a heuristic speeds up compression quite a lot.
- At first 8 byte strides are taken and every second byte is put to hasher.
- After 4x more literals stride by 16 bytes, every put 4-th byte to hasher.
- Applied only to qualities 2 to 9. */
-static BROTLI_INLINE size_t LiteralSpreeLengthForSparseSearch(
- const BrotliEncoderParams* params) {
- return params->quality < 9 ? 64 : 512;
-}
-
-static BROTLI_INLINE void ChooseHasher(const BrotliEncoderParams* params,
- BrotliHasherParams* hparams) {
- if (params->quality > 9) {
- hparams->type = 10;
- } else if (params->quality == 4 && params->size_hint >= (1 << 20)) {
- hparams->type = 54;
- } else if (params->quality < 5) {
- hparams->type = params->quality;
- } else if (params->lgwin <= 16) {
- hparams->type = params->quality < 7 ? 40 : params->quality < 9 ? 41 : 42;
- } else if (params->size_hint >= (1 << 20) && params->lgwin >= 19) {
- hparams->type = 6;
- hparams->block_bits = params->quality - 1;
- hparams->bucket_bits = 15;
- hparams->hash_len = 5;
- hparams->num_last_distances_to_check =
- params->quality < 7 ? 4 : params->quality < 9 ? 10 : 16;
- } else {
- hparams->type = 5;
- hparams->block_bits = params->quality - 1;
- hparams->bucket_bits = params->quality < 7 ? 14 : 15;
- hparams->num_last_distances_to_check =
- params->quality < 7 ? 4 : params->quality < 9 ? 10 : 16;
- }
-
- if (params->lgwin > 24) {
- /* Different hashers for large window brotli: not for qualities <= 2,
- these are too fast for large window. Not for qualities >= 10: their
- hasher already works well with large window. So the changes are:
- H3 --> H35: for quality 3.
- H54 --> H55: for quality 4 with size hint > 1MB
- H6 --> H65: for qualities 5, 6, 7, 8, 9. */
- if (hparams->type == 3) {
- hparams->type = 35;
- }
- if (hparams->type == 54) {
- hparams->type = 55;
- }
- if (hparams->type == 6) {
- hparams->type = 65;
- }
- }
-}
-
-#endif /* BROTLI_ENC_QUALITY_H_ */
diff --git a/BaseTools/Source/C/BrotliCompress/enc/ringbuffer.h b/BaseTools/Source/C/BrotliCompress/enc/ringbuffer.h
deleted file mode 100644
index fe63270b3f9a..000000000000
--- a/BaseTools/Source/C/BrotliCompress/enc/ringbuffer.h
+++ /dev/null
@@ -1,164 +0,0 @@
-/* Copyright 2013 Google Inc. All Rights Reserved.
-
- Distributed under MIT license.
- See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
-*/
-
-/* Sliding window over the input data. */
-
-#ifndef BROTLI_ENC_RINGBUFFER_H_
-#define BROTLI_ENC_RINGBUFFER_H_
-
-#include <string.h> /* memcpy */
-
-#include "../common/platform.h"
-#include <brotli/types.h>
-#include "./memory.h"
-#include "./quality.h"
-
-#if defined(__cplusplus) || defined(c_plusplus)
-extern "C" {
-#endif
-
-/* A RingBuffer(window_bits, tail_bits) contains `1 << window_bits' bytes of
- data in a circular manner: writing a byte writes it to:
- `position() % (1 << window_bits)'.
- For convenience, the RingBuffer array contains another copy of the
- first `1 << tail_bits' bytes:
- buffer_[i] == buffer_[i + (1 << window_bits)], if i < (1 << tail_bits),
- and another copy of the last two bytes:
- buffer_[-1] == buffer_[(1 << window_bits) - 1] and
- buffer_[-2] == buffer_[(1 << window_bits) - 2]. */
-typedef struct RingBuffer {
- /* Size of the ring-buffer is (1 << window_bits) + tail_size_. */
- const uint32_t size_;
- const uint32_t mask_;
- const uint32_t tail_size_;
- const uint32_t total_size_;
-
- uint32_t cur_size_;
- /* Position to write in the ring buffer. */
- uint32_t pos_;
- /* The actual ring buffer containing the copy of the last two bytes, the data,
- and the copy of the beginning as a tail. */
- uint8_t* data_;
- /* The start of the ring-buffer. */
- uint8_t* buffer_;
-} RingBuffer;
-
-static BROTLI_INLINE void RingBufferInit(RingBuffer* rb) {
- rb->cur_size_ = 0;
- rb->pos_ = 0;
- rb->data_ = 0;
- rb->buffer_ = 0;
-}
-
-static BROTLI_INLINE void RingBufferSetup(
- const BrotliEncoderParams* params, RingBuffer* rb) {
- int window_bits = ComputeRbBits(params);
- int tail_bits = params->lgblock;
- *(uint32_t*)&rb->size_ = 1u << window_bits;
- *(uint32_t*)&rb->mask_ = (1u << window_bits) - 1;
- *(uint32_t*)&rb->tail_size_ = 1u << tail_bits;
- *(uint32_t*)&rb->total_size_ = rb->size_ + rb->tail_size_;
-}
-
-static BROTLI_INLINE void RingBufferFree(MemoryManager* m, RingBuffer* rb) {
- BROTLI_FREE(m, rb->data_);
-}
-
-/* Allocates or re-allocates data_ to the given length + plus some slack
- region before and after. Fills the slack regions with zeros. */
-static BROTLI_INLINE void RingBufferInitBuffer(
- MemoryManager* m, const uint32_t buflen, RingBuffer* rb) {
- static const size_t kSlackForEightByteHashingEverywhere = 7;
- uint8_t* new_data = BROTLI_ALLOC(
- m, uint8_t, 2 + buflen + kSlackForEightByteHashingEverywhere);
- size_t i;
- if (BROTLI_IS_OOM(m)) return;
- if (rb->data_) {
- memcpy(new_data, rb->data_,
- 2 + rb->cur_size_ + kSlackForEightByteHashingEverywhere);
- BROTLI_FREE(m, rb->data_);
- }
- rb->data_ = new_data;
- rb->cur_size_ = buflen;
- rb->buffer_ = rb->data_ + 2;
- rb->buffer_[-2] = rb->buffer_[-1] = 0;
- for (i = 0; i < kSlackForEightByteHashingEverywhere; ++i) {
- rb->buffer_[rb->cur_size_ + i] = 0;
- }
-}
-
-static BROTLI_INLINE void RingBufferWriteTail(
- const uint8_t* bytes, size_t n, RingBuffer* rb) {
- const size_t masked_pos = rb->pos_ & rb->mask_;
- if (BROTLI_PREDICT_FALSE(masked_pos < rb->tail_size_)) {
- /* Just fill the tail buffer with the beginning data. */
- const size_t p = rb->size_ + masked_pos;
- memcpy(&rb->buffer_[p], bytes,
- BROTLI_MIN(size_t, n, rb->tail_size_ - masked_pos));
- }
-}
-
-/* Push bytes into the ring buffer. */
-static BROTLI_INLINE void RingBufferWrite(
- MemoryManager* m, const uint8_t* bytes, size_t n, RingBuffer* rb) {
- if (rb->pos_ == 0 && n < rb->tail_size_) {
- /* Special case for the first write: to process the first block, we don't
- need to allocate the whole ring-buffer and we don't need the tail
- either. However, we do this memory usage optimization only if the
- first write is less than the tail size, which is also the input block
- size, otherwise it is likely that other blocks will follow and we
- will need to reallocate to the full size anyway. */
- rb->pos_ = (uint32_t)n;
- RingBufferInitBuffer(m, rb->pos_, rb);
- if (BROTLI_IS_OOM(m)) return;
- memcpy(rb->buffer_, bytes, n);
- return;
- }
- if (rb->cur_size_ < rb->total_size_) {
- /* Lazily allocate the full buffer. */
- RingBufferInitBuffer(m, rb->total_size_, rb);
- if (BROTLI_IS_OOM(m)) return;
- /* Initialize the last two bytes to zero, so that we don't have to worry
- later when we copy the last two bytes to the first two positions. */
- rb->buffer_[rb->size_ - 2] = 0;
- rb->buffer_[rb->size_ - 1] = 0;
- }
- {
- const size_t masked_pos = rb->pos_ & rb->mask_;
- /* The length of the writes is limited so that we do not need to worry
- about a write */
- RingBufferWriteTail(bytes, n, rb);
- if (BROTLI_PREDICT_TRUE(masked_pos + n <= rb->size_)) {
- /* A single write fits. */
- memcpy(&rb->buffer_[masked_pos], bytes, n);
- } else {
- /* Split into two writes.
- Copy into the end of the buffer, including the tail buffer. */
- memcpy(&rb->buffer_[masked_pos], bytes,
- BROTLI_MIN(size_t, n, rb->total_size_ - masked_pos));
- /* Copy into the beginning of the buffer */
- memcpy(&rb->buffer_[0], bytes + (rb->size_ - masked_pos),
- n - (rb->size_ - masked_pos));
- }
- }
- {
- BROTLI_BOOL not_first_lap = (rb->pos_ & (1u << 31)) != 0;
- uint32_t rb_pos_mask = (1u << 31) - 1;
- rb->buffer_[-2] = rb->buffer_[rb->size_ - 2];
- rb->buffer_[-1] = rb->buffer_[rb->size_ - 1];
- rb->pos_ = (rb->pos_ & rb_pos_mask) + (uint32_t)(n & rb_pos_mask);
- if (not_first_lap) {
- /* Wrap, but preserve not-a-first-lap feature. */
- rb->pos_ |= 1u << 31;
- }
- }
-}
-
-#if defined(__cplusplus) || defined(c_plusplus)
-} /* extern "C" */
-#endif
-
-#endif /* BROTLI_ENC_RINGBUFFER_H_ */
diff --git a/BaseTools/Source/C/BrotliCompress/enc/static_dict.h b/BaseTools/Source/C/BrotliCompress/enc/static_dict.h
deleted file mode 100644
index aafc68ff9e02..000000000000
--- a/BaseTools/Source/C/BrotliCompress/enc/static_dict.h
+++ /dev/null
@@ -1,40 +0,0 @@
-/* Copyright 2013 Google Inc. All Rights Reserved.
-
- Distributed under MIT license.
- See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
-*/
-
-/* Class to model the static dictionary. */
-
-#ifndef BROTLI_ENC_STATIC_DICT_H_
-#define BROTLI_ENC_STATIC_DICT_H_
-
-#include "../common/dictionary.h"
-#include "../common/platform.h"
-#include <brotli/types.h>
-#include "./encoder_dict.h"
-
-#if defined(__cplusplus) || defined(c_plusplus)
-extern "C" {
-#endif
-
-#define BROTLI_MAX_STATIC_DICTIONARY_MATCH_LEN 37
-static const uint32_t kInvalidMatch = 0xFFFFFFF;
-
-/* Matches data against static dictionary words, and for each length l,
- for which a match is found, updates matches[l] to be the minimum possible
- (distance << 5) + len_code.
- Returns 1 if matches have been found, otherwise 0.
- Prerequisites:
- matches array is at least BROTLI_MAX_STATIC_DICTIONARY_MATCH_LEN + 1 long
- all elements are initialized to kInvalidMatch */
-BROTLI_INTERNAL BROTLI_BOOL BrotliFindAllStaticDictionaryMatches(
- const BrotliEncoderDictionary* dictionary,
- const uint8_t* data, size_t min_length, size_t max_length,
- uint32_t* matches);
-
-#if defined(__cplusplus) || defined(c_plusplus)
-} /* extern "C" */
-#endif
-
-#endif /* BROTLI_ENC_STATIC_DICT_H_ */
diff --git a/BaseTools/Source/C/BrotliCompress/enc/static_dict_lut.h b/BaseTools/Source/C/BrotliCompress/enc/static_dict_lut.h
deleted file mode 100644
index 88f8b342eabd..000000000000
--- a/BaseTools/Source/C/BrotliCompress/enc/static_dict_lut.h
+++ /dev/null
@@ -1,5864 +0,0 @@
-/* Copyright 2015 Google Inc. All Rights Reserved.
-
- Distributed under MIT license.
- See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
-*/
-
-/* Lookup table for static dictionary and transforms. */
-
-#ifndef BROTLI_ENC_STATIC_DICT_LUT_H_
-#define BROTLI_ENC_STATIC_DICT_LUT_H_
-
-#include <brotli/types.h>
-
-#if defined(__cplusplus) || defined(c_plusplus)
-extern "C" {
-#endif
-
-typedef struct DictWord {
- /* Highest bit is used to indicate end of bucket. */
- uint8_t len;
- uint8_t transform;
- uint16_t idx;
-} DictWord;
-
-static const int kDictNumBits = 15;
-static const uint32_t kDictHashMul32 = 0x1E35A7BD;
-
-static const uint16_t kStaticDictionaryBuckets[32768] = {
-1,0,0,0,0,0,0,0,0,3,6,0,0,0,0,0,20,0,0,0,21,0,22,0,0,0,0,0,0,0,0,23,0,0,25,0,29,
-0,53,0,0,0,0,0,0,55,0,0,0,0,0,0,61,76,0,0,0,94,0,0,0,0,0,0,96,0,97,0,98,0,0,0,0,
-0,0,0,99,101,106,108,0,0,0,0,0,110,0,111,112,0,113,118,124,0,0,0,0,0,125,128,0,0
-,0,0,129,0,0,131,0,0,0,0,0,0,132,0,0,135,0,0,0,137,0,0,0,0,0,138,139,0,0,0,0,0,0
-,0,142,143,144,0,0,0,0,0,145,0,0,0,146,149,151,152,0,0,153,0,0,0,0,0,0,0,0,0,0,0
-,0,0,0,0,154,0,0,0,0,0,0,155,0,0,0,0,160,182,0,0,0,0,0,0,183,0,0,0,188,189,0,0,
-192,0,0,0,0,0,0,194,0,0,0,0,0,0,0,0,197,202,209,0,0,210,0,224,0,0,0,225,0,0,0,0,
-0,0,0,0,0,0,231,0,0,0,232,0,240,0,0,242,0,0,0,0,0,0,0,0,0,0,0,244,0,0,0,246,0,0,
-249,251,253,0,0,0,0,0,258,0,0,261,263,0,0,0,267,0,0,268,0,269,0,0,0,0,0,0,0,0,0,
-271,0,0,0,0,0,0,272,0,273,0,277,0,278,286,0,0,0,0,287,0,289,290,291,0,0,0,295,0,
-0,296,297,0,0,0,0,0,0,0,0,0,0,298,0,0,0,299,0,0,305,0,324,0,0,0,0,0,327,0,328,
-329,0,0,0,0,336,0,0,340,0,341,342,343,0,0,346,0,348,0,0,0,0,0,0,349,351,0,0,355,
-0,363,0,364,0,368,369,0,370,0,0,0,0,0,0,0,372,0,0,0,0,0,0,0,0,0,0,0,373,0,375,0,
-0,0,0,376,377,0,0,394,395,396,0,0,398,0,0,0,0,400,0,0,408,0,0,0,0,420,0,0,0,0,0,
-0,421,0,0,422,423,0,0,429,435,436,442,0,0,443,0,444,445,453,456,0,457,0,0,0,0,0,
-458,0,0,0,459,0,0,0,460,0,462,463,465,0,0,0,0,0,0,466,469,0,0,0,0,0,0,470,0,0,0,
-474,0,476,0,0,0,0,483,0,485,0,0,0,486,0,0,488,491,492,0,0,497,499,500,0,501,0,0,
-0,505,0,0,506,0,0,0,507,0,0,0,509,0,0,0,0,511,512,519,0,0,0,0,0,0,529,530,0,0,0,
-534,0,0,0,0,543,0,0,0,0,0,0,0,0,0,553,0,0,0,0,557,560,0,0,0,0,0,0,561,0,564,0,0,
-0,0,0,0,565,566,0,575,0,619,0,620,0,0,623,624,0,0,0,625,0,0,626,627,0,0,628,0,0,
-0,0,630,0,631,0,0,0,0,0,0,0,0,0,641,0,0,0,0,643,656,668,0,0,0,673,0,0,0,674,0,0,
-0,0,0,0,0,0,682,0,687,0,690,0,693,699,700,0,0,0,0,0,0,704,705,0,0,0,0,707,710,0,
-711,0,0,0,0,726,0,0,729,0,0,0,730,731,0,0,0,0,0,752,0,0,0,762,0,763,0,0,767,0,0,
-0,770,774,0,0,775,0,0,0,0,0,0,0,0,0,0,776,0,0,0,777,783,0,0,0,785,788,0,0,0,0,
-790,0,0,0,793,0,0,0,0,794,0,0,804,819,821,0,827,0,0,0,834,0,0,835,0,0,0,841,0,
-844,0,850,851,859,0,860,0,0,0,0,0,0,0,874,0,876,0,877,890,0,0,0,0,0,0,0,0,893,
-894,898,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,899,0,0,0,900,904,906,0,0,0,907,0,908,909,
-0,910,0,0,0,0,911,0,0,0,0,0,916,0,0,0,922,925,0,930,0,934,0,0,0,0,0,943,0,0,944,
-0,953,954,0,0,0,0,0,0,955,0,962,963,0,0,976,0,0,977,978,979,980,0,981,0,0,0,0,
-984,0,0,985,0,0,987,989,991,0,0,0,0,0,0,0,0,0,992,0,0,0,993,0,0,0,0,0,0,996,0,0,
-0,1000,0,0,0,0,0,1002,0,0,0,0,1005,1007,0,0,0,1009,0,0,0,1010,0,0,0,0,0,0,1011,0
-,1012,0,0,0,0,1014,1016,0,0,0,1020,0,1021,0,0,0,0,1022,0,0,0,1024,0,0,0,0,0,0,
-1025,0,0,1026,1027,0,0,0,0,0,1031,0,1033,0,0,0,0,1034,0,0,0,1037,1040,0,0,0,1042
-,1043,0,0,1053,0,1054,0,0,1057,0,0,0,1058,0,0,1060,0,0,0,0,0,0,0,1061,0,0,1062,0
-,0,0,0,1063,0,0,0,0,1064,0,0,0,0,0,1065,0,0,0,0,1066,1067,0,0,0,1069,1070,1072,0
-,0,0,0,0,0,1073,0,1075,0,0,0,0,0,0,1080,1084,0,0,0,0,1088,0,0,0,0,0,0,1094,0,
-1095,0,1107,0,0,0,1112,1114,0,1119,0,1122,0,0,1126,0,1129,0,1130,0,0,0,0,0,1132,
-0,0,0,0,0,0,1144,0,0,1145,1146,0,1148,1149,0,0,1150,1151,0,0,0,0,1152,0,1153,0,0
-,0,0,0,1154,0,1163,0,0,0,1164,0,0,0,0,0,1165,0,1167,0,1170,0,0,0,0,0,1171,1172,0
-,0,0,0,0,0,0,0,1173,1175,1177,0,1186,0,0,0,0,0,0,0,0,0,0,1195,0,0,1221,0,0,1224,
-0,0,1227,0,0,0,0,0,1228,1229,0,0,1230,0,0,0,0,0,0,0,0,0,1231,0,0,0,1233,0,0,1243
-,1244,1246,1248,0,0,0,0,1254,1255,1258,1259,0,0,0,1260,0,0,1261,0,0,0,1262,1264,
-0,0,1265,0,0,0,0,0,0,0,0,0,0,0,0,1266,0,1267,0,0,0,0,1273,1274,1276,1289,0,0,
-1291,1292,1293,0,0,1294,1295,1296,0,0,0,0,1302,0,1304,0,0,0,0,0,0,0,0,0,1311,
-1312,0,1314,0,1316,1320,1321,0,0,0,0,0,0,0,1322,1323,1324,0,1335,0,1336,0,0,0,0,
-1341,1342,0,1346,0,1357,0,0,0,1358,1360,0,0,0,0,0,0,1361,0,0,0,1362,1365,0,1366,
-0,0,0,0,0,0,0,1379,0,0,0,0,0,0,0,0,0,0,0,0,1386,0,1388,0,0,0,0,0,0,0,0,0,0,0,0,0
-,0,1395,0,0,0,0,1403,0,1405,0,0,1407,0,0,0,0,0,1408,1409,0,1410,0,0,0,1412,1413,
-1416,0,0,1429,1451,0,0,1454,0,0,0,0,0,0,0,1455,0,0,0,0,0,0,0,1456,0,0,0,0,1459,
-1460,1461,1475,0,0,0,0,0,0,1477,0,1480,0,1481,0,0,1486,0,0,1495,0,0,0,1496,0,0,
-1498,1499,1501,1520,1521,0,0,0,1526,0,0,0,0,1528,1529,0,1533,1536,0,0,0,1537,
-1538,1549,0,1550,1558,1559,1572,0,1573,0,0,0,0,0,0,0,0,0,1575,0,0,0,0,0,1579,0,
-1599,0,1603,0,1604,0,1605,0,0,0,0,0,1608,1610,0,0,0,0,1611,0,1615,0,1616,1618,0,
-1619,0,0,1622,0,0,0,0,1634,0,0,0,1635,0,0,0,1641,0,0,0,0,0,0,0,0,0,1643,0,0,0,
-1650,0,0,1652,0,0,0,0,0,1653,0,0,0,1654,0,0,0,0,1655,0,1662,0,0,1663,1664,0,0,
-1668,0,0,1669,1670,0,1672,1673,0,0,0,0,0,1674,0,0,0,1675,1676,1680,0,1682,0,0,
-1687,0,0,0,0,0,1704,0,0,1705,0,0,1721,0,0,0,0,1734,1735,0,0,0,0,1737,0,0,0,0,
-1739,0,0,1740,0,0,0,0,0,0,0,0,0,0,1741,1743,0,0,0,0,1745,0,0,0,1749,0,0,0,1751,0
-,0,0,0,0,0,1760,0,0,0,0,1765,0,0,0,0,0,1784,0,1785,1787,0,0,0,0,1788,1789,0,0,0,
-0,1790,1791,1793,0,1798,1799,0,0,0,0,1801,0,1803,1805,0,0,0,1806,1811,0,1812,
-1814,0,1821,0,0,0,0,0,1822,1833,0,0,0,0,0,0,1848,0,0,0,0,0,0,1857,0,0,0,1859,0,0
-,0,0,1861,0,0,0,0,0,0,0,1866,0,1921,1925,0,0,0,1929,1930,0,0,0,0,0,0,0,0,0,1931,
-0,0,0,0,1932,0,0,0,1934,0,0,0,0,0,0,0,0,1946,0,0,1948,0,0,0,0,1950,0,1957,0,1958
-,0,0,0,0,0,1965,1967,0,0,0,0,1968,0,1969,0,1971,1972,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-,0,1973,0,0,0,0,1975,0,0,0,0,1976,1979,0,1982,0,0,0,0,1984,1988,0,0,0,0,1990,
-2004,2008,0,0,0,2012,2013,0,0,0,0,0,0,0,0,0,0,2015,0,2016,2017,0,0,0,0,2021,0,0,
-2025,0,0,0,0,0,2029,2036,2040,0,2042,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2043,0,0,0,0,0,
-2045,0,0,0,0,0,0,0,2046,2047,0,2048,2049,0,2059,0,0,2063,0,2064,2065,0,0,2066,0,
-0,0,0,0,0,2069,0,0,0,0,2070,0,2071,0,2072,0,0,0,0,2080,2082,2083,0,0,0,0,0,2085,
-0,2086,2088,2089,2105,0,0,0,0,2107,0,0,2116,2117,0,2120,0,0,2122,0,0,0,0,0,2123,
-0,0,2125,2127,2128,0,0,0,2130,0,0,0,2137,2139,2140,2141,0,0,0,0,0,0,0,0,0,2144,
-2145,0,0,2146,2149,0,0,0,0,2150,0,0,2151,2158,0,2159,0,2160,0,0,0,0,0,0,2161,
-2162,0,0,2194,2202,0,0,0,0,0,0,2205,2217,0,2220,0,2221,0,2222,2224,0,0,0,0,2237,
-0,0,0,0,0,2238,0,2239,2241,0,0,2242,0,0,0,0,0,2243,0,0,0,0,0,0,2252,0,0,2253,0,0
-,0,2257,2258,0,0,0,2260,0,0,0,0,0,0,0,2262,0,2264,0,0,0,0,0,2269,2270,0,0,0,0,0,
-0,0,0,0,2271,0,2273,0,0,0,0,2277,0,0,0,0,2278,0,0,0,0,2279,0,2280,0,2283,0,0,0,0
-,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2287,0,0,0,0,0,0,0,2289,2290,0,0,0,0,2291,0,2292,0,
-0,0,2293,2295,2296,0,0,0,0,0,0,0,2298,0,0,0,0,0,2303,0,2305,0,0,2306,0,2307,0,0,
-0,0,0,0,0,0,0,0,0,0,2313,2314,2315,2316,0,0,2318,0,2319,0,2322,0,0,2323,0,2324,0
-,2326,0,0,0,0,0,0,0,2335,0,2336,2338,2339,0,2340,0,0,0,2355,0,2375,0,2382,2386,0
-,2387,0,0,2394,0,0,0,0,2395,0,2397,0,0,0,0,0,2398,0,0,0,0,0,0,0,2399,2402,2404,
-2408,2411,0,0,0,2413,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2415,0,0,2416,2417,2419,0,2420,
-0,0,0,0,0,2425,0,0,0,2426,0,0,0,0,0,0,0,0,0,0,0,0,2427,2428,0,2429,0,0,2430,2434
-,0,2436,0,0,0,0,0,0,2441,2442,0,2445,0,0,2446,2457,0,2459,0,0,2462,0,2464,0,2477
-,0,2478,2486,0,0,0,2491,0,0,2493,0,0,2494,0,2495,0,2513,2523,0,0,0,0,2524,0,0,0,
-0,0,0,2528,2529,2530,0,0,2531,0,2533,0,0,2534,2535,0,2536,2537,0,2538,0,2539,
-2540,0,0,0,2545,2546,0,0,0,0,0,0,0,2548,0,0,2549,0,2550,2555,0,0,0,0,0,2557,0,
-2560,0,0,0,0,0,0,0,0,0,0,0,2561,0,2576,0,0,0,0,0,0,0,0,0,2577,2578,0,0,0,2579,0,
-0,0,0,0,0,0,2580,0,0,0,0,2581,0,0,0,0,2583,0,2584,0,2588,2590,0,0,0,2591,0,0,0,0
-,2593,2594,0,2595,0,2601,2602,0,0,2603,0,2605,0,0,0,2606,2607,2611,0,2615,0,0,0,
-2617,0,0,0,0,0,0,0,0,0,0,0,0,0,2619,0,0,2620,0,0,0,2621,0,2623,0,2625,0,0,2628,
-2629,0,0,2635,2636,2637,0,0,2639,0,0,0,2642,0,0,0,0,2643,0,2644,0,2649,0,0,0,0,0
-,0,2655,2656,0,0,2657,0,0,0,0,0,2658,0,0,0,0,0,2659,0,0,0,0,2664,2685,0,2687,0,
-2688,0,0,2689,0,0,2694,0,2695,0,0,2698,0,2701,2706,0,0,0,2707,0,2709,2710,2711,0
-,0,0,2720,2730,2735,0,0,0,0,2738,2740,0,0,0,0,2747,0,0,0,0,0,0,2748,0,0,2749,0,0
-,0,0,0,2750,0,0,2752,2754,0,0,0,0,0,2758,0,0,0,0,2762,0,0,0,0,2763,0,0,0,0,0,0,0
-,2764,2767,0,0,0,0,2768,0,0,2770,0,0,0,0,0,0,0,2771,0,0,0,0,0,0,0,0,0,2772,0,0,0
-,0,0,2773,2776,0,0,2783,0,0,2784,0,2789,0,2790,0,0,0,2792,0,0,0,0,0,0,0,0,0,0,
-2793,2795,0,0,0,0,0,0,2796,0,0,0,0,0,0,2797,2799,0,0,0,0,2803,0,0,0,0,2806,0,
-2807,2808,2817,2819,0,0,0,0,0,2821,0,0,0,0,2822,2823,0,0,0,0,0,0,0,2824,0,0,2828
-,0,2834,0,0,0,0,0,0,2836,0,2838,0,0,2839,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2841,
-0,0,0,2842,0,0,0,0,0,2843,2844,0,0,0,0,2846,0,0,2847,0,2849,0,2853,0,0,0,0,0,
-2857,0,0,0,0,2858,0,2859,0,0,2860,0,2862,2868,0,0,0,0,2875,0,2876,0,0,2877,2878,
-2884,2889,2890,0,0,2891,0,0,2892,0,0,0,2906,2912,0,2913,0,0,0,0,0,0,0,0,2916,0,
-2934,0,0,0,0,0,2935,0,0,0,0,2939,0,2940,0,0,0,0,0,0,0,2941,0,0,0,2946,0,2949,0,0
-,2950,2954,2955,0,0,0,2959,2961,0,0,2962,0,2963,0,0,0,0,0,0,2964,2965,2966,2967,
-0,0,0,0,0,0,0,2969,0,0,0,0,0,2970,2975,0,2982,2983,2984,0,0,0,0,0,2989,0,0,2990,
-0,0,0,0,0,0,0,2991,0,0,0,0,0,0,0,0,2998,0,3000,3001,0,0,3002,0,0,0,3003,0,0,3012
-,0,0,3022,0,0,3024,0,0,3025,3027,0,0,0,3030,0,0,0,0,3034,3035,0,0,3036,0,3039,0,
-3049,0,0,3050,0,0,0,0,0,0,3051,0,3053,0,0,0,0,3057,0,3058,0,0,0,0,0,0,0,0,3063,0
-,0,3073,3074,3078,3079,0,3080,3086,0,0,0,0,0,0,0,0,3087,0,3092,0,3095,0,3099,0,0
-,0,3100,0,3101,3102,0,3122,0,0,0,3124,0,3125,0,0,0,0,0,0,3132,3134,0,0,3136,0,0,
-0,0,0,0,0,3147,0,0,3149,0,0,0,0,0,3150,3151,3152,0,0,0,0,3158,0,0,3160,0,0,3161,
-0,0,3162,0,3163,3166,3168,0,0,3169,3170,0,0,3171,0,0,0,0,0,0,0,3182,0,3184,0,0,
-3188,0,0,3194,0,0,0,0,0,0,3204,0,0,0,0,3209,0,0,0,0,0,0,0,0,0,0,0,3216,3217,0,0,
-0,0,0,0,0,3219,0,0,3220,3222,0,3223,0,0,0,0,3224,0,3225,3226,0,3228,3233,0,3239,
-3241,3242,0,0,3251,3252,3253,3255,0,0,0,0,0,0,0,0,3260,0,0,3261,0,0,0,3267,0,0,0
-,0,0,0,0,0,3271,0,0,0,3278,0,3282,0,0,0,3284,0,0,0,3285,3286,0,0,0,0,0,0,0,3287,
-3292,0,0,0,0,3294,3296,0,0,3299,3300,3301,0,3302,0,0,0,0,0,3304,3306,0,0,0,0,0,0
-,3308,0,0,0,0,0,0,0,0,0,3311,0,0,0,0,0,0,0,0,3312,3314,3315,0,3318,0,0,0,0,0,0,0
-,0,3319,0,0,0,0,0,3321,0,0,0,0,0,0,0,0,0,3322,0,0,3324,3325,0,0,3326,0,0,3328,
-3329,3331,0,0,3335,0,0,3337,0,3338,0,0,0,0,3343,3347,0,0,0,3348,0,0,3351,0,0,0,0
-,0,0,3354,0,0,0,0,0,0,0,0,0,0,3355,0,0,3365,3366,3367,0,0,0,0,0,0,3368,3369,0,
-3370,0,0,3373,0,0,3376,0,0,3377,0,3379,3387,0,0,0,0,0,3390,0,0,0,0,0,0,0,3402,0,
-3403,3436,3437,3439,0,0,3441,0,0,0,3442,0,0,3449,0,0,0,3450,0,0,0,0,0,0,0,3451,0
-,0,3452,0,3453,3456,0,3457,0,0,3458,0,3459,0,0,0,0,0,0,0,0,0,3460,0,0,3469,3470,
-0,0,3475,0,0,0,3480,3487,3489,0,3490,0,0,3491,3499,0,3500,0,0,3501,0,0,0,3502,0,
-3514,0,0,0,3516,3517,0,0,0,3518,0,0,0,0,3520,3521,3522,0,0,3526,3530,0,0,0,0,
-3531,0,0,0,0,3536,0,0,0,0,0,0,0,3539,3541,0,0,3542,3544,0,3547,3548,0,0,3550,0,
-3553,0,0,0,0,0,0,0,3554,0,3555,0,3558,0,3559,0,0,0,0,0,0,0,0,3563,0,3581,0,0,0,
-3599,0,0,0,3600,0,3601,0,3602,3603,0,0,3606,3608,0,3610,3611,0,0,0,0,0,0,0,0,0,
-3612,3616,3619,0,0,0,0,0,0,0,0,0,0,0,0,0,3624,3628,0,3629,3634,3635,0,0,0,0,0,0,
-3636,0,3637,0,0,3638,3651,0,0,0,0,0,0,3652,3653,0,0,0,0,3656,3657,0,0,0,0,0,3658
-,0,0,0,0,3659,0,3661,3663,3664,0,3665,0,3692,0,0,0,3694,3696,0,0,0,0,0,0,0,0,0,0
-,0,0,3698,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3700,0,0,3701,0,0,0,3708,3709,0,0,0,3711
-,3712,0,0,0,0,0,3723,0,3724,3725,0,0,3726,0,0,0,0,0,0,3728,3729,0,3734,3735,3737
-,0,0,0,3743,0,3745,0,0,3746,0,0,3747,3748,0,3757,0,3759,3766,3767,0,3768,0,0,0,0
-,3769,0,0,3771,0,3774,0,0,0,0,0,0,3775,0,0,0,0,0,0,3776,0,3777,3786,0,3788,3789,
-0,0,0,0,0,0,0,0,0,3791,0,3811,0,0,0,0,0,3814,3815,3816,3820,0,0,0,0,0,0,0,3821,0
-,0,3825,0,0,0,0,3835,0,0,3848,3849,0,0,0,0,3850,3851,3853,0,0,0,0,3859,0,3860,
-3862,0,0,0,0,0,3863,0,0,0,0,0,0,0,0,3873,0,3874,0,3875,3886,0,3887,0,0,0,0,3892,
-3913,0,3914,0,0,0,3925,3931,0,0,0,0,3934,3941,3942,0,0,0,0,3943,0,0,0,3944,0,0,0
-,0,0,3945,0,3947,0,0,0,3956,3957,0,0,0,0,0,0,0,0,0,3958,0,3959,3965,0,0,0,0,3966
-,0,0,0,3967,0,0,0,3968,3974,0,0,0,0,0,3975,3977,3978,0,0,0,0,3980,0,3985,0,0,0,0
-,0,0,0,0,3986,4011,0,0,4017,0,0,0,0,0,0,0,0,0,0,0,4018,0,0,0,0,4019,0,4023,0,0,0
-,4027,4028,0,0,0,0,0,0,0,0,4031,4034,0,0,4035,4037,4039,4040,0,0,0,0,0,4059,0,
-4060,4061,0,4062,4063,4066,0,0,4072,0,0,0,0,0,0,0,0,0,0,0,0,0,4088,0,0,0,0,0,
-4091,0,0,0,0,4094,4095,0,0,4096,0,0,0,0,0,4098,4099,0,0,0,4101,0,4104,0,0,0,4105
-,4108,0,4113,0,0,4115,4116,0,4126,0,0,4127,0,0,0,0,0,0,0,4128,4132,4133,0,4134,0
-,0,0,4137,0,0,4141,0,0,0,0,4144,4146,4147,0,0,0,0,4148,0,0,4311,0,0,0,4314,4329,
-0,4331,4332,0,4333,0,4334,0,0,0,4335,0,4336,0,0,0,4337,0,0,0,4342,4345,4346,4350
-,0,4351,4352,0,4354,4355,0,0,4364,0,0,0,0,4369,0,0,0,4373,0,4374,0,0,0,0,4377,0,
-0,0,0,4378,0,0,0,4380,0,0,0,4381,4382,0,0,0,0,0,0,0,4384,0,0,0,0,4385,0,0,0,4386
-,0,0,0,4391,4398,0,0,0,0,4407,4409,0,0,0,0,4410,0,0,4411,0,4414,4415,4418,0,4427
-,4428,4430,0,4431,0,4448,0,0,0,0,0,4449,0,0,0,4451,4452,0,4453,4454,0,4456,0,0,0
-,0,0,0,0,4459,0,4463,0,0,0,0,0,4466,0,4467,0,4469,0,0,0,0,0,0,0,0,0,0,0,0,0,4470
-,4471,0,4473,0,0,4475,0,0,0,0,4477,4478,0,0,0,4479,4481,0,4482,0,4484,0,0,0,0,0,
-0,0,4486,0,0,4488,0,0,4497,0,4508,0,0,4510,4511,0,4520,4523,0,4524,0,4525,0,4527
-,0,0,4528,0,0,0,0,4530,0,4531,0,0,4532,0,0,0,4533,0,0,0,0,0,4535,0,0,0,4536,0,0,
-0,0,0,4541,4543,4544,4545,4547,0,4548,0,0,0,0,4550,4551,0,4553,0,0,0,0,4562,0,0,
-4571,0,0,0,4574,0,0,0,4575,0,4576,0,4577,0,0,0,4581,0,0,0,0,0,4582,0,0,4586,0,0,
-0,4588,0,0,4597,0,4598,0,0,0,0,4616,4617,0,4618,0,0,0,0,4619,0,4620,0,0,4621,0,
-4624,0,0,0,0,0,4625,0,0,0,0,4657,0,4659,0,4667,0,0,0,4668,4670,0,4672,0,0,0,0,0,
-4673,4676,0,0,0,0,4687,0,0,0,0,4697,0,0,0,0,4699,0,4701,0,0,0,0,4702,0,0,4706,0,
-0,4713,0,0,0,4714,4715,4716,0,0,0,0,0,0,0,0,0,0,0,0,4717,0,0,4720,0,4721,4729,
-4735,0,0,0,4737,0,0,0,4739,0,0,0,4740,0,0,0,4741,0,0,0,0,0,4742,0,4745,4746,4747
-,0,0,0,0,0,0,0,0,4748,0,0,0,4749,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4751,
-4786,0,4787,0,4788,4796,0,0,4797,4798,0,4799,4806,4807,0,0,0,0,4809,4810,0,0,0,0
-,0,0,4811,0,0,0,0,0,4812,0,4813,0,0,4815,0,4821,4822,0,0,0,0,4823,0,0,0,0,0,0,0,
-0,0,0,4824,0,0,0,0,4826,0,0,0,4828,0,4829,0,0,0,4843,0,0,4847,0,4853,4855,4858,0
-,0,0,0,0,4859,0,4864,0,0,4879,0,0,0,0,4880,0,0,0,0,4881,0,4882,0,0,0,0,0,0,0,0,0
-,4883,0,0,0,0,4884,0,0,0,0,0,4886,4887,4888,4894,4896,0,4902,0,0,4905,0,0,4915,0
-,0,0,0,0,0,0,4916,4917,4919,4921,0,0,0,0,0,4926,0,0,0,0,4927,0,0,0,0,0,0,0,0,
-4929,0,4930,4931,0,4938,0,4952,0,4953,4957,4960,4964,0,0,0,0,0,0,0,5019,5020,
-5022,0,0,0,0,0,5023,0,0,0,5024,0,0,0,5025,0,0,0,0,5028,0,0,0,0,5029,5030,5031,0,
-5033,0,0,0,0,0,0,0,0,0,5034,5035,0,5036,0,0,5037,0,0,0,0,5038,0,0,5039,0,0,0,
-5041,5042,0,0,0,0,5044,5049,5054,0,5055,0,5057,0,0,0,5060,0,0,0,0,0,5063,0,5064,
-5065,0,5067,0,0,0,5068,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5076,0,0,0,0,0,0,
-0,5077,0,0,5078,5080,0,0,5083,0,0,0,0,0,0,0,0,5085,0,0,0,0,0,0,5098,5099,5101,
-5105,5107,0,5108,0,5109,0,0,0,0,0,0,0,5110,0,0,0,0,0,5117,5118,0,5121,0,5122,0,0
-,5130,0,0,0,5137,0,0,0,5148,0,0,0,0,0,0,0,5151,5154,0,0,0,5155,0,0,5156,5159,
-5161,0,0,0,0,5162,0,0,0,0,5163,5164,0,5166,0,0,0,0,0,0,0,0,0,0,5167,0,0,0,5172,0
-,0,0,0,0,0,5178,5179,0,0,5190,0,0,5191,5192,5194,0,0,5198,5201,0,0,0,0,0,5203,0,
-5206,5209,0,0,0,0,0,0,5213,0,5214,5216,0,0,0,0,0,5217,0,0,0,0,0,0,0,0,5218,5219,
-0,5231,0,0,5244,5249,0,5254,0,5255,0,0,5257,0,0,0,0,0,5258,0,5260,5270,0,5277,0,
-0,0,0,0,0,5280,5281,5282,5283,0,0,0,0,0,5284,0,5285,0,0,0,0,0,5287,5288,0,0,0,0,
-0,0,0,0,0,0,5289,5291,0,0,5294,0,0,5295,0,0,0,0,0,0,0,5304,0,0,5306,5307,5308,0,
-5309,0,0,5310,0,0,0,0,5311,5312,0,5313,0,0,0,0,0,5316,0,0,0,5317,0,0,0,0,0,0,0,0
-,0,5325,0,0,0,0,0,0,5326,0,5327,5329,0,5332,0,0,0,0,5338,0,0,0,0,0,0,0,0,5340,0,
-0,5341,0,0,0,5342,0,5343,5344,0,0,5345,0,0,0,0,0,0,5347,5348,0,0,0,0,0,0,0,0,0,
-5349,0,5350,0,5354,0,0,0,0,5358,0,0,5359,0,0,5361,0,0,5365,0,5367,0,5373,0,0,0,
-5379,0,0,0,5380,0,0,0,5382,0,5384,0,0,0,0,0,0,5385,0,0,0,0,5387,0,0,0,0,0,0,5388
-,5390,5393,0,0,0,0,0,0,0,0,0,0,0,5396,0,0,0,0,5397,5402,0,0,0,0,0,5403,0,0,0,
-5404,5405,0,0,0,0,0,0,0,0,0,0,0,0,5406,0,0,0,0,5410,0,0,5411,0,5415,0,0,0,0,5416
-,5434,0,0,0,0,0,0,0,0,0,0,0,5438,0,5440,0,0,0,0,0,0,5441,5442,0,0,0,5443,5444,
-5447,0,0,5448,5449,5451,0,0,0,5456,5457,0,0,0,5459,0,0,0,5461,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,5464,0,5466,0,0,5467,0,5470,0,0,5473,0,0,5474,0,0,5476,0,0,0,0,0,0,0,0
-,0,0,0,5477,0,0,0,0,0,0,0,5484,0,0,5485,5486,0,0,0,0,0,5488,0,0,0,0,0,0,0,5489,0
-,0,0,0,0,5507,0,0,0,5510,0,5511,0,0,5512,0,0,0,5513,0,5515,0,0,5516,5517,0,5518,
-0,0,5522,0,0,0,0,0,5534,5535,0,0,5536,0,5538,0,0,5543,0,5544,0,0,5545,0,5547,0,
-5557,0,0,5558,0,5560,5567,0,0,0,0,5568,0,0,0,5571,5573,0,5574,0,5575,0,0,0,0,
-5577,0,0,5598,0,0,0,0,0,0,0,0,0,5600,5609,0,0,0,0,5610,0,0,5612,0,5624,0,5625,0,
-0,0,5629,0,5641,0,5642,5643,0,0,0,0,0,0,5651,0,0,0,5652,5653,0,5661,5662,5678,0,
-5679,0,0,0,0,5685,5686,0,0,0,0,0,5690,5692,0,5703,0,0,0,0,0,5706,0,0,0,0,5707,0,
-0,0,0,0,0,5708,0,0,5709,0,5710,0,0,0,5712,0,5733,0,5734,5735,0,0,5744,5751,0,0,0
-,0,0,0,0,0,0,0,0,0,5752,0,5754,0,0,0,0,0,0,5757,5758,0,5760,5761,0,0,0,0,5763,
-5764,5765,0,5766,0,5767,5768,0,5770,0,0,0,0,5776,5780,0,0,0,0,5782,0,0,0,0,5784,
-0,0,5788,0,0,0,0,0,0,0,0,0,0,0,5797,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5799,0,0,5801,
-0,0,0,5811,0,0,0,0,0,0,5816,0,0,5827,0,0,0,0,0,0,0,0,5830,5831,0,0,5832,0,0,5833
-,0,5835,5844,5845,0,5846,0,0,0,0,0,5850,0,0,0,0,0,5852,0,5855,5857,0,0,5859,0,
-5861,0,0,5863,0,5865,0,0,0,5873,5875,0,0,0,5877,0,5879,0,0,0,5888,0,0,5889,5891,
-0,5894,0,0,0,0,0,0,5895,0,5897,0,0,0,0,0,0,5907,0,5911,0,0,5912,0,5913,5922,5924
-,0,5927,5928,0,0,0,0,5929,5930,0,5933,0,0,0,0,5949,0,0,5951,0,0,0,0,0,0,0,0,5953
-,0,0,5954,0,5959,5960,5961,0,5964,0,0,0,5976,5978,5987,5990,0,0,0,0,0,5991,0,
-5992,0,0,0,5994,5995,0,0,5996,0,0,6001,6003,0,0,0,0,6007,0,0,0,0,0,6008,0,0,6009
-,0,6010,0,0,0,6011,6015,0,6017,0,6019,0,6023,0,0,0,0,0,0,0,6025,0,0,0,0,0,0,0,0,
-0,0,6026,0,6030,0,0,6032,0,0,0,6033,6038,6040,0,0,0,6041,6045,0,0,6046,0,0,6053,
-0,0,6054,0,6055,0,0,0,0,0,0,6057,0,6063,0,0,0,6064,0,6066,6071,6072,0,0,0,0,0,0,
-6075,6076,0,0,6077,0,0,0,0,0,0,0,0,0,6078,6079,0,0,0,0,0,0,0,0,6080,0,6083,0,0,0
-,0,0,6084,0,0,6088,0,6089,0,0,6093,6105,0,0,6107,0,6110,0,0,0,6111,6125,6126,0,0
-,0,6129,0,0,0,0,6130,0,0,0,6131,6134,0,0,0,0,0,0,6142,0,0,0,0,0,6144,0,0,6146,
-6151,6153,0,6156,0,6163,0,6180,6181,0,0,0,0,0,6182,0,0,0,0,6184,6195,0,0,6206,0,
-6208,0,0,6212,6213,6214,0,6215,0,0,0,6228,0,0,0,6234,0,0,0,0,0,0,6235,6240,0,
-6242,6243,6244,0,6250,6255,0,0,0,0,0,6257,0,0,0,6258,6278,0,6284,0,0,0,6285,0,0,
-0,0,0,0,0,0,6286,0,0,0,6320,0,0,6322,6332,0,0,0,0,0,0,0,0,6334,0,0,0,0,0,0,0,
-6335,0,0,6337,0,6338,0,6339,6340,0,0,6356,6357,6369,0,0,0,6370,6371,6372,0,6373,
-0,0,0,0,0,6376,0,0,0,0,0,6382,6383,6384,0,0,0,0,6386,0,6389,6397,6400,6411,0,
-6414,0,0,0,0,0,0,0,6415,6416,0,0,0,0,0,0,6417,0,0,0,0,6418,0,0,0,0,0,0,0,6420,0,
-6421,6423,6425,0,6429,6430,0,6433,6438,0,0,0,0,0,0,0,0,0,0,6439,6440,0,0,6441,0,
-0,6444,0,0,0,0,6446,0,0,0,0,6447,6448,0,0,6450,0,0,0,6454,0,0,6455,0,6461,0,0,0,
-0,0,0,6462,0,0,6463,0,6464,0,6465,6467,0,0,0,6468,0,6479,6480,0,0,0,0,0,0,0,6481
-,0,0,6485,6487,0,0,0,0,0,0,6493,0,0,0,0,0,0,0,0,6494,6495,6496,0,0,0,0,0,6498,0,
-0,0,6507,6508,0,0,0,0,0,0,0,0,0,0,6511,6512,0,0,0,0,6513,0,0,0,6514,0,0,0,0,0,
-6516,0,0,6517,6518,0,0,0,6519,6520,6521,0,6523,0,0,0,0,6524,6528,0,6530,0,0,6532
-,0,6578,0,0,0,6583,0,6584,0,0,0,6587,0,0,0,6590,0,6591,0,0,0,0,0,6592,0,0,0,0,
-6593,6594,0,0,0,0,0,6599,6600,0,0,6601,6602,6604,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-6608,0,0,0,0,0,0,0,0,6610,6611,0,6615,0,6616,6618,6620,0,6637,0,0,0,0,6639,0,0,0
-,0,6641,0,6642,0,0,0,6647,0,6660,6663,0,6664,0,6666,6669,0,6675,6676,6677,0,0,0,
-0,0,0,0,0,0,6678,0,0,0,6679,0,6680,0,0,0,0,0,0,0,6693,0,0,0,0,0,0,0,0,0,6704,
-6705,6706,0,0,6711,6713,0,0,0,0,0,6716,0,0,0,6717,0,6719,6724,0,0,0,0,0,0,0,0,
-6725,6726,0,0,0,0,0,6728,6729,6735,0,6737,6742,0,0,6743,6750,0,6751,0,0,6752,
-6753,0,0,0,0,0,0,6754,0,0,0,0,0,6756,0,0,0,0,0,0,6763,0,0,6764,6765,0,0,0,6770,0
-,0,0,6776,6780,0,6781,0,0,0,6783,0,6784,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-6785,0,0,0,6792,0,0,0,6793,0,0,6802,0,0,0,0,0,6803,0,0,0,6804,0,0,0,6812,0,0,
-6823,0,6824,6839,0,0,0,0,6852,0,0,6854,0,6856,6857,0,0,0,0,0,0,0,0,0,6867,0,6868
-,6870,6872,0,0,0,6873,6874,0,0,0,0,0,6875,0,0,6877,0,0,0,0,0,0,0,6878,0,0,0,6879
-,0,6880,0,0,0,0,0,0,0,0,0,0,6887,0,6888,6891,6893,0,6895,0,0,0,0,0,0,0,0,6899,0,
-0,0,0,6901,0,0,0,0,6910,0,6911,0,0,6912,0,0,6913,6914,0,0,0,6915,0,0,0,6916,6919
-,0,0,0,0,0,0,6924,0,6925,0,0,0,6926,6927,6928,0,6929,0,6930,0,0,6931,6935,0,6936
-,0,0,0,0,6939,6940,6941,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6942,6948,6949,0,0,0,0,0,0
-,0,6952,6954,6963,6965,6966,0,0,6967,6968,0,0,0,0,0,0,0,0,0,6969,0,0,6970,6979,0
-,0,6980,0,0,6983,0,0,0,0,0,6984,0,0,0,0,0,0,0,6988,6990,6992,0,0,0,0,0,0,0,6995,
-0,0,0,7012,0,0,0,0,0,0,0,0,0,7019,0,0,0,0,0,0,0,0,7021,0,0,7022,7023,7028,0,7030
-,7033,0,0,0,0,0,0,7038,0,0,0,0,0,0,0,0,0,0,7039,0,0,0,0,0,7046,0,7047,0,0,0,0,0,
-0,0,0,0,0,0,7048,7052,0,0,0,0,0,7054,0,7060,0,0,0,0,7061,0,7065,0,0,0,0,7067,
-7069,0,7070,7071,7072,0,0,7078,0,7080,7081,0,7083,0,0,0,7084,7087,7088,0,0,7090,
-0,7093,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7107,0,0,7108,0,0,0,0,0,0,0,0,7110,0,7114,0
-,0,0,0,0,0,0,7115,0,7116,0,0,0,0,0,7117,0,0,7118,0,0,7124,0,7125,0,0,7126,0,0,0,
-0,7128,0,0,0,0,0,7129,0,7130,0,7132,7133,0,0,7134,0,0,7139,0,7148,7150,0,0,0,0,
-7152,0,0,0,7153,7156,7157,0,0,0,0,0,7158,0,0,0,0,0,0,0,0,0,0,7163,7165,7169,0,
-7171,0,0,0,0,0,0,0,0,0,7172,0,7173,7181,0,0,0,0,0,7182,7185,0,0,0,0,7187,0,7201,
-7204,0,0,0,0,0,7206,7207,0,0,0,0,7211,7216,0,7218,0,0,0,0,7226,7228,7230,7232,
-7233,7235,7237,0,0,0,0,7238,7241,0,7242,0,0,7247,0,0,0,7266,0,0,0,0,0,0,0,7289,0
-,0,7290,7291,0,0,7292,0,7297,0,0,0,0,0,0,0,0,0,0,7300,0,7301,0,0,0,0,0,0,0,0,0,0
-,0,0,7302,0,0,0,0,7305,0,0,0,0,7307,0,7308,0,7310,0,7335,0,0,0,0,0,0,0,7337,0,
-7343,7347,0,0,0,0,0,7348,0,7349,7350,7352,7354,0,0,0,0,7357,0,7358,7366,0,7367,
-7368,0,0,7373,0,0,0,7374,0,0,0,0,0,0,0,7376,0,0,0,7377,0,0,0,0,0,7378,0,7379,
-7380,0,0,0,0,0,7383,0,0,7386,0,0,0,0,7398,0,0,0,7399,7400,0,7401,0,0,0,0,0,0,0,
-7402,0,0,0,0,0,7405,0,0,0,0,0,7406,0,0,0,0,0,0,0,0,7421,7427,7429,0,0,0,7435,0,0
-,7436,0,0,0,7437,0,0,0,0,0,0,7438,7443,0,7446,0,7448,0,0,0,0,0,0,0,0,0,0,7456,0,
-0,0,0,0,7457,0,0,7461,0,0,0,0,0,7462,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7463,7466,7472,
-0,7476,0,0,7490,0,7491,0,0,7493,0,0,0,7498,7499,0,0,7508,0,0,0,0,0,7512,0,0,0,
-7513,7514,7516,0,0,0,0,7518,0,0,7519,7521,7522,0,0,0,7526,0,0,7529,0,0,7531,0,
-7536,0,7538,0,7539,0,0,7541,7542,7546,0,0,0,0,0,7547,0,7548,0,0,0,0,0,7550,0,0,
-7552,7553,0,0,0,0,0,0,0,0,0,0,7554,7563,0,7573,0,0,0,0,0,0,7574,7576,0,7578,7581
-,7583,0,0,0,7584,0,7587,0,0,0,0,0,7589,0,0,0,7594,0,0,7595,0,0,7600,7602,7610,0,
-0,0,0,0,7612,0,7613,7614,0,0,7615,0,0,7616,0,7620,0,7621,7622,0,7623,0,0,0,0,
-7626,0,0,0,0,7627,7629,7631,0,0,7633,0,0,0,0,0,7639,0,7640,7642,0,0,7643,0,0,0,0
-,7644,0,0,0,0,0,0,0,7645,0,0,0,0,0,7661,7662,7663,7665,0,7666,0,7667,0,7684,7688
-,7690,0,7691,0,0,0,0,0,0,7692,0,0,7700,0,7707,0,7708,0,7709,0,7721,0,0,0,7722,0,
-7724,0,0,0,0,0,0,7729,7731,0,7732,0,7733,7735,0,0,0,0,0,0,0,7739,0,0,7741,7745,0
-,7748,0,0,0,7751,0,0,0,7752,0,0,0,0,0,0,0,7753,0,0,7756,0,7757,0,7759,0,7760,0,0
-,0,0,7761,7768,0,0,7769,0,0,7770,0,0,7771,0,0,7772,0,0,7773,0,0,0,0,0,7778,7783,
-0,0,0,0,0,7784,7785,0,7790,0,0,0,0,7792,0,7798,0,0,0,0,0,7799,0,7810,0,0,7813,0,
-7814,0,7816,0,7818,7824,7825,7826,0,7828,7830,0,0,0,7840,0,7842,0,7843,0,0,0,0,
-7844,0,0,0,0,0,0,0,7846,0,0,0,0,0,7856,7857,7858,7862,0,7865,0,0,7866,0,0,7913,0
-,0,0,0,7914,0,0,7915,7917,7918,7919,0,7920,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7921,
-7922,0,7924,0,0,7925,0,0,7927,0,7930,7935,0,0,7937,0,0,0,0,0,0,7939,0,7940,0,0,0
-,0,0,7941,0,0,0,0,7945,0,0,0,0,7949,0,0,0,0,0,0,0,0,7950,0,7953,0,0,0,0,0,0,0,
-7968,0,0,0,0,7969,7972,7992,0,7993,0,0,0,0,0,0,0,0,0,0,0,7994,0,0,0,0,8007,8008,
-0,0,0,0,0,0,0,0,0,0,0,0,8010,0,0,0,8012,0,0,0,0,0,0,0,0,8018,0,8028,8029,0,0,
-8030,0,0,8032,8033,0,0,8034,8036,0,0,0,0,0,0,0,0,0,0,8037,0,0,0,8043,8052,8059,
-8060,0,0,8061,0,0,0,8062,0,8063,0,8064,0,8066,8068,0,0,0,8080,8081,0,8089,0,0,0,
-0,0,8092,0,0,0,0,0,0,8093,8110,0,0,0,0,0,0,0,8111,0,0,0,0,0,8112,8115,0,8117,0,0
-,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8120,8121,8122,8128,8129,8130,8131,0,0,8139,0,0,
-8144,0,0,0,0,8145,8146,8153,0,0,0,0,0,0,0,0,8154,0,8157,8160,8162,0,8164,8165,0,
-0,0,0,8166,8167,0,0,8179,0,0,0,8185,0,0,0,8186,0,0,8187,0,0,0,8188,0,0,0,0,0,
-8204,0,0,0,0,8210,0,0,0,0,0,8213,0,8214,0,0,8215,0,0,0,0,0,0,8218,0,0,0,0,0,0,0,
-0,0,8219,0,8221,0,0,8222,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8225,0,0,0,8233,0,0,
-8242,0,0,0,0,0,0,0,0,0,0,0,8247,0,8248,8252,0,8256,8257,0,0,8261,0,8264,8265,0,0
-,0,0,8267,0,0,0,8269,0,0,0,0,0,0,0,0,0,8270,0,0,0,8278,0,8279,8283,0,0,8285,8286
-,8289,8292,0,0,0,0,8293,8295,8299,8300,8301,0,0,0,0,0,0,8304,8307,0,0,0,0,0,0,0,
-8321,0,0,0,8322,8323,8325,8326,8327,0,0,8332,8338,0,0,8340,0,0,0,0,0,8350,0,0,
-8351,0,8354,8355,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8360,8372,0,0,0,0,0,0,0,0,8377,0,0,
-0,0,8380,0,0,0,8383,0,8384,0,0,0,0,8386,8392,0,0,8394,0,0,0,0,0,0,0,8396,8397,0,
-8398,0,8399,0,0,0,0,0,8400,0,8401,8410,8411,0,8412,8413,8422,0,0,0,0,8423,0,0,0,
-0,8424,0,0,8425,0,0,0,0,0,0,0,8441,8442,0,0,0,0,0,0,8443,0,0,8444,0,8447,0,0,0,0
-,8451,0,8458,0,8462,0,0,8468,0,8469,0,0,0,8470,0,8473,8479,8480,0,0,0,0,8481,
-8483,0,0,0,0,0,0,0,0,0,8484,0,0,8490,0,0,0,0,0,0,8491,8493,8494,0,8528,0,0,0,0,0
-,0,0,8530,0,0,0,0,0,0,0,0,8534,8538,8540,0,0,8541,0,0,8545,0,8557,0,0,8569,8570,
-0,0,8571,8574,8575,8579,0,8583,0,0,0,0,8591,0,0,0,0,0,0,0,0,8606,0,8607,0,0,0,0,
-0,0,0,0,0,8608,0,0,8609,0,0,0,8610,0,0,0,8611,0,0,8613,8617,8621,0,0,8622,0,8623
-,0,8624,8625,0,0,0,0,0,0,0,0,0,8637,8638,8639,8650,0,0,0,0,8652,8654,8655,0,0,0,
-0,0,0,0,0,0,0,8656,0,0,0,0,0,8657,0,0,0,0,0,0,0,0,0,8658,0,0,8659,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,8660,0,0,0,0,0,0,8661,8663,8664,0,0,0,0,8665,0,8669,0,
-0,0,0,0,0,0,8671,8674,0,8684,0,8686,0,0,0,8689,0,0,0,8690,0,8706,0,0,0,0,0,0,0,0
-,0,0,0,8710,0,8711,8713,8714,8724,8727,8728,8733,8736,0,8737,8739,0,0,0,0,8742,
-8743,8745,8754,0,0,0,0,8756,0,0,0,0,0,0,8757,8760,0,0,0,0,0,8762,8763,8764,0,
-8766,8769,8770,8773,0,8774,0,8779,0,0,0,0,8780,0,0,8781,0,0,8783,0,0,0,0,0,0,0,0
-,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8784,0,0,0,0,0,0,0,0,8785,0,0,0,0,8786,0,0,0,0,8788
-,8790,0,0,0,8803,0,8813,8814,0,0,0,0,0,8815,8816,0,0,0,0,8818,0,0,0,0,8822,8828,
-8829,0,8831,0,0,0,0,8833,0,0,0,8834,0,0,0,8835,0,8836,0,0,0,8837,0,0,0,0,0,0,
-8838,8839,0,0,0,0,0,0,0,0,0,0,0,8840,0,0,0,8841,0,8842,0,0,0,8846,0,0,0,0,0,0,0,
-8847,0,8848,0,0,8864,0,0,8866,0,0,8870,8872,0,0,8873,8874,0,0,0,0,0,0,8875,0,
-8876,0,0,0,0,8896,8900,0,0,0,0,8901,0,0,0,0,0,8904,0,8907,0,0,0,0,8911,8912,8913
-,0,0,0,8914,0,8915,0,0,0,0,0,0,0,0,0,0,0,0,8916,0,0,0,8929,0,0,0,0,0,0,0,0,0,0,
-8930,0,8932,0,8943,0,0,0,8945,8947,0,0,0,0,8949,0,8950,0,8954,8957,0,0,8970,0,0,
-0,0,8971,0,8996,0,0,0,0,8997,9000,0,0,0,0,9001,9002,0,9004,9009,9024,0,0,0,0,0,0
-,0,0,0,0,0,0,9027,9082,0,0,9083,9089,0,0,0,0,0,0,9090,0,0,0,9092,0,0,9093,0,9095
-,0,0,9096,9097,9101,9102,0,0,0,0,0,0,0,0,9112,0,0,0,0,0,0,9114,0,0,9120,0,9121,
-9122,0,0,0,9123,9124,0,0,9125,0,0,9126,0,9127,0,0,9129,9131,0,0,0,9132,0,0,9136,
-0,9144,0,0,9148,0,0,0,0,0,0,9149,0,9152,9163,0,0,9165,0,0,0,0,0,0,0,0,0,0,0,0,0,
-9166,0,9169,0,0,0,0,0,0,0,9170,0,0,0,0,9172,0,9174,9175,9176,0,9177,0,0,0,0,0,0,
-0,0,9186,0,9187,0,0,0,9188,9189,0,0,9190,0,0,0,0,9191,0,0,0,9193,0,0,0,0,9197,
-9198,0,0,0,9208,9211,0,0,0,0,9216,9217,0,9220,0,0,0,0,9221,9222,9223,0,9224,9225
-,0,0,9227,0,9228,9229,0,0,9230,0,9232,0,9233,0,0,0,0,0,9234,9235,0,0,9237,0,0,0,
-0,0,0,0,0,9238,9240,0,0,9241,0,0,0,0,9244,0,0,0,0,9247,0,0,0,0,0,0,0,0,0,0,9248,
-0,0,0,9249,0,0,0,0,0,9250,0,0,0,0,9251,0,0,9252,9255,0,0,0,9256,0,0,0,0,0,0,0,
-9257,0,0,9258,0,0,0,0,0,0,9259,0,0,0,0,0,9262,9263,0,0,9265,9266,0,0,0,0,0,0,0,0
-,9268,9271,0,0,0,0,0,0,0,0,0,9273,0,0,0,9276,9277,9279,0,0,0,0,0,0,0,9280,0,0,
-9293,0,0,0,0,0,9297,9301,0,0,0,0,0,0,0,0,0,0,0,9308,9309,9313,9321,9322,0,9326,
-9327,0,0,9477,0,9479,0,0,0,0,9482,0,0,0,9483,0,9484,0,0,0,0,0,0,0,0,0,9485,0,0,
-9486,0,0,0,9489,0,0,0,0,9490,9491,0,0,0,0,9493,0,9495,9496,0,0,0,0,0,0,0,0,9500,
-0,9502,0,0,0,0,0,9504,9507,0,9509,0,9511,0,0,9513,0,0,0,0,0,0,0,0,9515,0,0,0,0,0
-,0,9516,9517,0,0,0,0,9532,0,0,9533,0,0,9538,0,9539,9540,0,0,0,0,9541,0,0,0,9542,
-0,0,0,0,0,0,0,0,9544,9545,0,9546,0,0,0,0,0,0,9547,9548,0,0,0,9550,0,9557,0,9558,
-0,9561,0,9563,9570,0,9572,9574,9575,0,0,0,9577,9592,0,0,9596,0,0,0,9598,0,9600,0
-,9601,0,0,0,0,0,0,9608,0,9638,9639,0,0,0,0,0,0,0,9641,0,0,9643,9644,9645,9646,0,
-0,0,9648,0,0,0,0,0,0,0,9650,9654,0,0,0,0,0,0,0,0,9655,0,0,0,0,0,9656,0,9657,0,0,
-0,0,9658,0,0,9659,0,0,9664,0,0,9665,0,9667,9669,0,0,0,0,0,0,0,0,0,0,0,0,9671,0,
-9673,9681,0,0,0,0,9682,9683,9684,0,0,0,0,9686,9698,0,0,9700,9701,9702,0,9703,
-9717,0,0,0,0,9718,0,9726,0,0,0,0,9727,0,0,0,9728,0,9742,0,9744,0,0,0,9750,0,9754
-,9755,0,0,0,0,0,9756,0,9757,9768,0,9769,0,0,0,9770,9771,0,9773,0,9774,0,9775,0,0
-,0,9776,9777,9784,0,0,0,9786,0,9789,0,0,0,0,9793,9794,0,0,0,9808,0,0,0,0,0,9811,
-0,0,0,0,0,0,0,0,0,0,0,0,9812,0,9820,0,9823,0,9828,0,0,0,0,9830,0,0,9833,9836,0,0
-,0,9840,0,0,0,9841,0,0,9842,0,9845,0,0,0,9847,9848,0,0,9855,0,0,0,0,0,0,9856,
-9863,9865,0,0,0,0,0,0,0,0,9866,9867,9868,9873,9875,0,0,0,0,0,0,9880,0,9886,0,0,0
-,9887,0,0,9891,0,0,0,0,0,0,0,9906,9907,9908,0,0,0,9909,0,0,0,0,0,0,9910,0,0,0,0,
-9913,0,0,0,0,9914,0,0,0,0,0,9922,0,0,0,0,9923,9925,0,0,0,0,0,0,9930,0,0,0,9931,0
-,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9932,0,9939,0,0,9940,9962,9966,0,9969,9970,0,0,9974
-,0,9979,9981,9982,0,0,0,9985,0,0,0,0,0,0,9987,0,0,0,0,0,0,0,9988,9993,0,0,9994,0
-,0,0,9997,0,10004,0,0,0,0,0,10007,10019,10020,10022,0,0,0,10031,0,0,0,0,0,10032,
-0,0,10034,0,10036,0,0,0,0,10038,0,10039,10040,10041,10042,0,0,0,0,0,10043,0,0,0,
-0,0,10045,10054,0,0,0,0,10055,0,0,10057,10058,0,0,0,0,0,0,10059,0,0,0,0,0,0,0,
-10060,0,0,0,0,0,0,0,10063,0,10066,0,0,0,10070,0,10072,0,0,10076,10077,0,0,10084,
-0,10087,10090,10091,0,0,0,10094,10097,0,0,0,0,0,0,10098,0,0,0,0,0,0,10103,0,
-10104,0,10108,0,0,0,0,0,0,0,0,10120,0,0,0,10122,0,0,10125,0,0,0,0,10127,10128,0,
-0,10134,0,10135,10136,0,10137,0,0,10147,0,10149,10150,0,0,10156,0,10158,10159,
-10160,10168,0,0,10171,0,10173,0,0,0,10176,0,0,0,0,10177,0,0,0,0,10178,0,0,0,0,
-10194,0,10202,0,0,10203,10204,0,10205,10206,0,10207,0,0,0,0,10209,0,0,0,0,0,0,0,
-10213,0,0,0,0,0,0,10217,0,10229,0,10230,10231,0,0,10232,0,0,10237,10238,10244,0,
-0,0,0,0,10250,0,10252,0,0,0,0,0,0,10255,0,0,10257,0,0,0,0,0,0,10258,0,10259,0,0,
-0,0,0,0,0,0,10260,0,0,0,0,0,0,0,10284,10288,10289,0,0,0,10290,0,10296,0,0,0,0,0,
-10297,0,0,0,0,0,0,10298,0,0,0,0,10299,10303,0,0,0,0,0,10306,0,0,0,10307,0,10308,
-0,0,0,0,10311,0,0,0,0,0,0,0,10315,10317,0,0,0,10318,10319,0,10321,0,10326,0,
-10328,0,0,0,0,10329,0,0,10331,0,10332,0,0,0,0,0,0,10334,0,0,10335,10338,0,0,0,0,
-0,10339,10349,0,0,0,0,0,0,10351,0,10353,0,0,0,0,0,0,10362,0,10368,0,10369,0,0,0,
-10372,10373,0,0,0,0,0,10374,0,0,0,10375,0,10376,0,0,10386,10388,10390,0,0,0,0,0,
-0,0,10391,0,0,10392,10394,0,0,10396,0,10397,0,10403,0,0,0,0,0,0,0,0,10404,0,
-10405,10410,0,0,10411,0,10412,0,0,0,0,0,0,0,10421,10422,10423,0,0,0,0,0,0,0,0,0,
-10425,0,0,10427,0,0,10430,0,0,0,0,0,10432,0,10433,10434,0,0,0,0,10436,10437,0,
-10438,0,10439,0,10444,10446,0,0,0,0,0,10448,0,0,0,0,0,10449,0,0,0,0,0,0,0,10451,
-0,10453,0,0,0,10454,10457,0,0,10459,0,10469,0,0,0,0,0,10472,10481,0,0,0,0,0,
-10482,10483,0,10492,0,0,0,0,0,0,0,0,0,0,10499,0,0,0,10502,0,0,10510,0,10521,
-10524,0,0,10525,10526,10528,0,0,0,0,0,0,0,0,10530,0,0,0,0,10533,0,10534,0,0,0,0,
-0,0,0,0,0,0,10535,10536,0,0,10544,0,10553,10556,0,10557,10559,0,0,0,0,0,10562,
-10563,10564,0,10565,0,0,0,10566,0,10567,0,0,0,0,10575,0,0,10576,0,10578,0,0,0,0,
-0,0,0,0,0,0,10585,10586,10587,10589,0,10590,0,0,10594,0,0,0,0,0,10598,0,0,10601,
-0,0,0,10602,0,10603,0,10604,0,10605,0,0,10607,0,10626,0,10627,0,0,0,0,0,10629,
-10630,10631,0,0,0,10646,0,0,0,10647,0,10650,0,10651,0,0,0,10652,10653,10655,0,
-10658,0,0,10659,0,10667,0,0,0,0,10669,0,0,0,0,0,0,0,0,0,10670,0,0,0,10671,0,0,0,
-0,10672,10673,0,10674,0,0,0,10676,0,0,0,0,0,0,10678,0,10682,0,0,10692,0,10697,0,
-0,0,0,10698,0,0,0,10700,0,0,0,0,0,10703,0,10704,0,0,0,0,0,0,0,10705,0,10715,
-10718,10720,0,0,10722,0,0,0,0,0,0,0,0,10723,0,0,0,0,10726,0,0,0,0,0,10727,10730,
-10743,0,0,0,0,0,0,10744,0,0,10745,0,0,0,0,0,0,10748,0,0,0,0,10750,0,0,10752,
-10753,0,0,0,10756,0,0,0,0,0,0,10758,0,0,0,10759,0,10769,0,0,10772,0,0,0,0,0,0,
-10773,0,0,0,10777,0,0,10779,0,0,0,0,0,0,0,0,10780,10784,0,0,0,10789,0,0,0,10791,
-0,0,0,0,0,0,0,0,0,10795,0,0,10796,0,10808,0,10809,0,0,0,10810,0,0,0,10812,0,0,
-10814,0,0,0,0,0,0,0,0,0,10815,0,0,0,0,10816,10817,0,0,0,0,10819,0,10820,0,0,0,0,
-10821,10822,10823,0,10826,10849,0,0,0,0,10850,0,0,10852,0,10853,0,0,10856,0,0,
-10857,10858,10859,10860,0,0,0,0,0,0,10863,0,10866,10867,10872,10890,0,0,10891,
-10892,0,0,0,0,0,10893,0,0,0,10896,10899,0,0,10900,10902,0,0,0,0,0,10903,0,0,0,0,
-0,0,0,0,0,0,0,0,10905,0,10906,0,0,0,0,10908,10911,0,10912,0,0,10916,0,0,0,0,0,
-10917,0,10918,0,0,0,10923,0,0,0,0,0,10924,0,0,10928,10929,0,0,10930,0,0,0,10932,
-0,0,0,0,10939,0,0,10945,0,0,0,10947,0,0,10948,0,0,0,0,0,0,0,0,0,0,0,0,10958,0,
-10960,10962,0,0,10964,0,0,0,10966,0,0,0,0,0,0,0,0,0,0,10967,0,0,0,10968,0,0,0,
-10973,0,0,0,0,0,10975,0,0,0,10976,10978,0,0,10982,10984,10987,0,0,10988,0,10989,
-0,0,10991,0,0,0,0,10992,0,0,0,10993,0,10995,0,0,0,10996,10997,0,0,0,10998,0,
-10999,0,11001,0,0,0,0,0,0,11010,11012,0,11013,11016,11017,0,0,11019,11020,11021,
-0,0,0,0,0,0,0,0,0,0,0,0,11022,0,0,11023,11029,0,0,0,0,11031,0,0,0,11034,0,0,0,0,
-11055,0,0,0,0,0,11056,11060,0,0,0,0,0,0,11061,0,0,11064,11065,0,11066,0,11069,0,
-11085,0,0,0,0,0,11086,0,0,0,11088,0,0,0,11094,0,0,0,11095,11096,0,0,0,0,0,0,
-11097,11098,0,0,0,0,0,0,11099,0,0,11102,11108,0,0,0,11109,0,11114,11119,0,11131,
-0,0,0,11142,0,0,11143,0,11146,0,11147,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11148,0,
-11149,11152,11153,11154,0,11156,0,11157,0,0,0,11158,0,0,11159,11160,0,0,0,0,0,0,
-0,0,0,0,0,0,11163,0,0,11164,11166,0,0,0,11172,11174,0,0,0,11176,0,0,0,0,0,11182,
-11183,0,0,0,11184,11187,0,0,11188,11189,0,0,0,0,0,0,11194,0,0,0,0,0,0,0,11200,
-11202,0,0,0,0,0,0,11203,0,11204,0,0,0,0,0,11205,0,0,0,11206,0,11207,0,0,11209,0,
-11211,0,11214,0,0,11231,0,0,0,11293,11295,0,0,11296,11297,11302,0,0,0,11307,0,0,
-0,0,11309,11310,0,11311,0,0,0,11313,0,11314,0,0,0,0,11334,0,11338,0,0,0,11339,0,
-0,0,0,0,11340,0,11341,11342,0,11344,0,11345,0,0,0,11348,11349,0,0,11350,0,0,0,
-11355,0,0,0,0,0,0,11356,0,11357,11370,0,0,11371,0,11374,11376,0,0,0,11377,0,0,
-11378,11383,0,11386,11399,0,11400,11406,0,0,0,11408,0,0,11409,11412,0,0,0,0,
-11417,0,0,0,11418,0,11421,0,11426,11429,0,0,0,0,0,11430,0,11437,0,11438,0,0,0,0,
-0,11440,11453,0,0,0,0,0,0,11454,0,0,0,0,11455,0,0,11456,11460,11461,11463,0,
-11469,0,11473,0,0,0,0,11474,0,0,0,11475,0,11476,11477,11480,0,0,0,0,11481,0,0,
-11484,0,0,11487,0,0,0,0,0,0,0,0,0,0,11497,0,0,11502,0,11509,0,0,11510,11511,
-11513,0,0,0,0,0,0,0,0,0,0,11515,0,0,0,0,11516,0,11520,11521,0,0,0,0,0,0,0,0,0,0,
-0,11529,11530,11531,11534,0,0,11543,0,0,0,0,0,11547,0,11548,0,0,0,0,0,11552,
-11556,0,11557,0,0,11559,0,11560,0,0,0,0,0,0,11561,0,0,11563,11564,0,11565,0,0,0,
-0,11567,0,0,0,11569,0,11574,0,11575,0,0,0,11577,0,11578,0,0,0,11580,11581,0,0,0,
-11582,11584,0,0,0,0,0,0,0,11587,0,11588,11591,0,11595,0,0,0,0,0,0,0,0,11596,0,
-11597,0,0,0,0,11598,11601,0,0,0,11602,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11603,
-11604,0,11606,0,0,11608,0,0,0,0,11610,0,0,11611,0,0,0,0,11613,0,11622,0,0,0,
-11623,0,0,0,0,11625,0,0,11626,11627,11628,11630,0,0,0,0,0,0,11639,0,0,11646,0,
-11648,11649,0,11650,0,0,0,0,0,0,0,0,0,11651,0,0,11652,11653,11656,0,0,11677,
-11679,0,0,0,0,11680,0,0,11681,0,11685,0,0,0,0,0,0,0,0,11688,0,0,0,11716,0,11719,
-0,0,0,0,0,11721,0,0,11724,11743,0,0,0,0,0,0,0,0,11745,11748,11750,0,0,0,0,0,
-11751,0,0,0,11752,11754,0,11755,0,0,0,0,0,0,0,11759,0,0,0,0,0,0,11760,0,0,0,
-11761,0,0,0,0,0,0,11766,11767,0,11772,11773,0,11774,0,0,11775,0,11777,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,11778,11780,0,0,0,0,0,0,0,11783,0,11784,0,0,0,11785,
-0,0,0,11786,0,0,0,0,11788,0,0,11789,11791,11792,0,0,0,0,11795,11834,11835,11836,
-0,0,11837,0,0,0,11838,0,0,11846,11851,0,11852,0,11869,0,0,0,11871,0,0,0,11872,
-11874,0,0,0,0,0,0,11875,0,11876,11877,0,0,0,0,0,0,0,0,0,0,11883,0,0,0,0,0,0,0,
-11884,0,11885,0,11886,0,0,11887,0,11894,11895,11897,11909,11910,0,11912,11918,0,
-0,11920,0,11922,11924,11927,11928,0,0,0,0,11929,0,11934,0,0,0,0,0,11941,11943,
-11944,0,11945,0,0,0,0,11948,11949,0,0,0,0,11953,0,11954,0,11955,0,11956,0,0,0,0,
-0,11957,0,0,11959,0,0,0,0,0,0,0,0,11961,0,0,0,0,0,11978,0,0,0,11979,11980,11986,
-11987,0,11992,0,0,0,0,0,11993,0,0,0,11994,0,11999,12004,12005,12006,0,0,0,0,0,
-12011,0,0,12012,12014,0,0,12015,0,0,12019,12028,0,0,12029,0,0,12032,12033,0,0,0,
-0,12034,0,12041,12043,0,0,12044,0,0,0,0,0,0,0,12046,0,0,0,0,0,0,0,12054,12055,0,
-12056,0,0,0,12060,12064,0,0,0,0,0,12065,12067,12068,0,0,0,0,0,0,0,0,12074,0,0,0,
-12075,12076,0,0,0,12079,0,12081,12086,12087,0,0,12088,0,0,0,0,12089,0,12092,0,0,
-0,0,12097,0,0,0,0,0,0,0,0,12098,0,0,0,0,0,0,0,0,0,0,0,0,0,12102,12103,12104,
-12111,0,0,12114,12116,0,0,0,12118,0,0,0,12119,12120,12128,0,0,0,0,12130,0,0,0,0,
-0,0,12131,0,0,0,12132,12134,0,0,0,0,12137,0,12139,0,12141,0,0,12142,0,0,0,12144,
-0,0,0,0,0,12145,0,12148,0,12153,0,0,0,0,12154,12171,12173,0,0,0,12175,0,0,0,0,
-12178,0,0,0,0,0,0,0,12183,0,0,0,0,0,0,0,0,12184,0,0,0,12186,0,0,0,0,0,12187,
-12188,0,0,12189,0,12196,0,12197,0,0,12198,0,12201,0,0,0,0,12203,0,12209,0,0,0,0,
-12210,12211,12212,12213,0,12217,12218,0,0,0,0,0,0,0,0,0,12222,0,0,0,0,0,0,0,
-12223,0,0,12229,0,0,0,0,12233,0,0,0,0,12234,0,0,12236,12242,0,0,0,12243,0,0,0,
-12244,12253,0,12254,12256,0,12257,0,0,12275,0,0,0,0,0,12277,0,0,0,0,0,12278,0,
-12289,0,0,12290,0,12292,12293,0,0,12294,0,12295,0,0,12296,0,12297,0,12298,0,0,0,
-0,12301,0,0,0,0,0,0,0,0,0,0,0,0,0,12309,0,12338,12340,0,0,0,0,12341,0,0,0,0,0,0,
-0,0,12342,12343,0,12344,0,0,0,0,0,0,0,0,0,12345,0,0,0,0,0,0,0,0,12346,0,0,0,0,
-12348,0,0,0,0,0,0,0,0,0,0,0,0,12350,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12351,0,12355,
-12356,12357,0,0,12367,12370,12371,0,0,0,0,0,12372,12376,0,0,0,0,0,0,0,0,12379,0,
-12382,0,12383,0,0,12384,0,0,0,0,12393,0,0,12394,0,0,0,0,12398,12403,0,0,12404,0,
-0,0,0,0,0,0,0,0,0,0,0,0,12410,0,0,0,12411,0,0,0,12412,0,0,0,0,12420,0,12421,0,0,
-0,0,0,12423,0,12425,12429,0,0,0,12431,12432,0,0,0,0,0,0,0,0,0,0,0,0,12434,0,0,0,
-0,0,12435,12436,0,0,0,0,0,0,0,0,12437,0,0,0,0,0,12438,0,0,0,0,0,0,0,0,12445,0,0,
-0,12450,12451,0,0,0,0,0,0,0,0,12452,12475,0,0,12493,12494,0,0,0,12495,0,0,0,0,
-12496,12502,12509,0,0,0,0,12510,0,12512,12513,0,0,0,0,12514,0,0,0,12515,0,12520,
-0,0,0,12524,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12527,0,0,0,12528,0,0,0,12529,0,0,0,
-0,0,12530,0,12535,0,0,12536,0,12538,0,0,0,0,0,0,0,0,0,0,0,0,12540,0,12548,0,0,0,
-0,0,12550,0,0,0,12551,12552,0,0,0,12554,0,0,0,0,0,0,0,0,12555,0,0,12562,0,12565,
-0,12566,0,0,0,0,0,0,0,0,0,0,0,0,12569,0,0,0,12571,12574,0,0,0,0,0,0,0,12577,0,0,
-0,0,0,0,0,12578,12579,12603,0,12608,0,0,12611,0,12612,0,12615,0,12625,0,0,0,0,
-12627,12646,0,12648,0,0,12657,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12670,0,0,12671,0,
-12673,12677,0,0,0,0,0,0,0,0,0,0,0,12679,0,12681,0,12682,12693,0,12694,0,12697,0,
-12701,0,0,0,12703,12704,0,0,0,0,12707,12737,0,0,12739,0,0,12740,0,0,12742,12743,
-0,0,0,0,0,0,0,0,0,12745,0,12746,12747,0,12748,0,0,12759,12767,0,0,0,0,12773,0,
-12774,12778,0,0,0,0,0,0,0,12779,0,0,0,0,0,12780,12793,0,12824,0,12825,0,12836,0,
-0,0,0,12839,0,12842,0,0,0,0,0,0,0,0,0,0,0,0,12843,12845,0,12846,0,0,0,0,12847,0,
-0,12850,12852,12853,0,0,0,12854,0,0,0,12855,0,12856,0,12858,0,0,12859,0,12862,0,
-12863,0,0,12866,0,12869,12872,12873,0,0,0,0,0,0,0,0,0,12875,0,12877,0,0,12878,0,
-0,0,0,0,0,0,0,0,12884,12885,12888,0,12889,0,0,0,0,12893,0,0,0,12895,12896,12898,
-0,0,0,0,0,0,0,12902,0,12909,12910,0,12926,0,12928,0,0,0,12929,0,12930,0,0,0,0,
-12931,0,12932,12933,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12934,0,12942,0,0,0,0,12944,
-0,0,0,0,0,0,0,0,12946,0,0,12948,0,0,12949,0,0,0,0,12950,0,0,0,0,12951,0,12952,0,
-12953,0,0,0,12954,12958,12959,0,0,0,0,0,12960,12964,0,0,0,0,0,12966,0,0,0,0,0,0,
-0,0,12970,0,12971,0,0,0,0,0,0,12972,0,0,12982,0,0,0,12984,12985,0,12986,12996,
-12997,13001,13002,0,0,0,0,13004,0,0,13005,0,0,13007,13009,0,13017,0,0,0,13020,0,
-13021,0,0,0,0,0,0,0,0,0,0,13022,0,0,0,0,0,0,0,0,13024,13027,0,0,0,0,0,13028,0,0,
-13029,0,0,0,0,0,0,0,13032,0,13037,0,0,0,0,0,0,13040,0,0,13041,0,0,0,13043,13044,
-13046,0,0,0,0,13047,0,0,0,0,0,0,0,13049,13054,0,13056,0,0,13060,13061,0,0,0,0,0,
-13067,0,0,13068,0,13071,0,0,0,0,0,13077,13078,0,0,0,0,0,13079,13080,13081,0,
-13082,0,0,0,13085,0,0,0,0,0,0,0,13086,0,13087,13088,0,0,0,0,0,13094,0,13099,0,
-13100,0,0,0,13101,0,13125,13126,13128,13129,0,0,13130,0,13131,0,0,0,0,0,0,13134,
-0,0,0,0,0,0,0,0,0,0,0,13150,0,13168,0,0,0,0,0,0,0,0,0,13169,0,0,13170,0,0,0,0,
-13174,0,0,0,13176,0,0,0,0,0,13177,0,13178,13183,13187,0,0,0,13189,0,0,13190,0,0,
-13191,0,0,13206,0,0,0,13207,0,0,0,0,0,0,0,0,0,0,13212,0,0,13219,13232,0,0,0,
-13241,0,13249,13253,0,0,0,0,0,13255,13259,0,13260,13261,0,13262,0,13272,0,0,0,0,
-13276,0,0,0,0,13277,13299,0,0,13301,13302,0,0,13303,0,0,13305,0,13310,0,0,0,
-13311,0,0,0,0,13325,0,13328,0,0,0,13329,0,0,0,0,0,0,13330,0,0,13331,0,13335,0,0,
-13342,0,0,0,0,0,13343,0,13354,0,13362,0,13366,13367,13369,0,0,13371,13372,0,
-13373,13374,0,13376,0,13380,13381,13386,0,13387,13388,0,13389,13391,13395,0,0,0,
-0,0,13401,13409,0,13410,0,0,0,0,13420,0,0,0,0,0,13422,0,0,0,0,13423,0,0,0,0,
-13425,0,0,0,0,0,13427,0,0,0,13428,0,0,13430,13438,0,13439,0,13445,0,13448,13449,
-0,0,0,0,0,0,13451,0,13457,0,0,0,0,13458,13459,0,13460,0,0,0,0,13464,13465,13466,
-13470,0,13471,13472,13474,13475,0,13476,0,0,13478,13479,0,13481,0,0,0,0,13487,0,
-13490,0,13493,0,0,13494,0,0,13495,0,0,0,0,0,0,0,0,0,0,0,0,0,0,13496,13497,0,
-13500,0,0,13516,13522,0,0,13525,13528,0,0,0,13530,13535,0,13537,13539,0,13540,0,
-13543,0,13544,0,0,0,0,0,0,13545,0,0,0,0,0,0,13547,0,0,0,13549,13555,0,0,0,13556,
-13557,0,0,0,0,0,0,0,13558,0,13563,0,0,0,0,13564,0,0,0,0,0,0,0,0,13566,0,0,0,0,0,
-0,13569,0,0,13571,0,0,0,0,13573,0,0,0,0,0,0,13578,0,0,0,0,0,0,0,0,0,0,13581,0,
-13586,0,13595,0,13600,0,0,0,0,0,0,0,0,13601,13603,0,13604,13605,13606,13607,0,0,
-13617,13618,0,0,0,0,0,0,0,13623,0,13625,13627,0,0,0,0,0,0,0,0,13629,0,0,0,13634,
-0,0,0,13638,0,0,0,0,0,0,0,0,13654,0,0,0,0,0,0,0,0,0,0,13656,0,13659,0,0,13660,0,
-0,13662,0,0,0,13663,0,13664,0,0,0,0,0,13668,0,13669,13671,0,0,13672,0,0,0,0,0,0,
-13675,13685,0,13686,0,0,0,13687,0,0,0,13692,13694,13697,0,0,0,13702,0,0,0,0,0,
-13705,0,0,0,0,13707,0,0,0,13714,0,0,0,0,0,0,0,0,0,13715,0,13716,13717,0,0,13719,
-13724,13730,13731,0,0,0,0,0,0,0,0,13732,0,0,0,0,0,0,0,13734,0,13736,0,0,13737,
-13738,13747,0,13751,0,0,13752,0,0,0,13753,0,13757,0,0,13762,13763,0,13764,13765,
-0,13766,0,0,13767,0,0,0,13768,0,0,0,0,0,0,0,13769,0,0,13772,0,13775,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,13776,13778,13787,0,0,0,13797,0,13798,0,13801,0,13804,
-13806,0,0,0,0,13816,13817,0,0,0,0,0,0,0,0,0,0,0,0,0,13834,0,13836,0,0,13838,0,0,
-13839,0,13840,0,0,0,0,13842,0,0,0,0,0,0,13843,0,0,0,0,0,0,0,0,0,13845,0,0,0,0,0,
-13858,0,0,13860,0,0,13861,0,0,13862,13863,0,13868,0,13869,13870,0,0,0,0,0,0,0,0,
-0,0,13872,0,0,0,0,13873,13878,0,0,0,0,0,0,0,0,0,0,13886,0,13888,13889,13890,0,0,
-13891,13894,0,13897,13899,13900,13904,0,0,13906,0,0,0,13909,0,0,0,13910,0,0,0,
-13911,0,0,0,0,0,13912,13917,0,0,0,0,13918,0,13919,0,0,13920,0,0,0,13921,0,0,
-13922,0,0,0,0,0,0,0,13924,0,13927,0,0,0,0,0,13932,0,13933,0,13934,0,0,13935,0,
-13944,0,0,0,13954,0,0,13955,0,0,0,0,13956,0,13957,0,13967,13969,0,0,0,0,0,0,0,0,
-0,0,0,0,13970,13990,0,13991,13994,0,13995,0,0,0,0,13996,0,0,13999,0,0,0,14018,0,
-14019,0,14021,0,0,0,0,0,0,14041,0,0,0,0,0,0,0,0,14043,0,0,0,0,14046,0,0,0,14048,
-14049,0,0,0,0,0,0,0,0,0,0,14051,0,0,14052,14056,0,14063,0,14064,14066,0,0,14067,
-0,0,0,0,0,0,0,0,0,14068,0,0,0,14072,0,14074,14075,0,14076,14079,14085,14086,
-14087,14093,0,0,0,0,14095,0,0,0,0,0,0,14096,14097,0,0,0,0,0,0,0,14098,0,14102,0,
-0,0,0,0,14103,0,0,0,14104,0,0,14105,0,0,0,14107,14108,0,0,14109,0,0,0,0,0,0,0,0,
-14117,0,0,0,0,14118,0,0,0,0,14119,0,0,14120,0,0,14121,0,14122,14127,0,14128,
-14136,0,0,14138,0,14140,0,0,0,14141,14142,0,0,0,0,14146,0,0,14149,0,14151,0,0,0,
-14152,0,0,14153,0,0,0,0,0,0,0,0,0,14154,0,14156,14157,0,0,14159,0,14161,0,0,0,0,
-14162,0,0,0,0,0,0,14163,0,0,14173,0,0,0,0,0,0,14174,0,0,14176,0,0,14178,0,0,
-14179,14181,0,0,14182,14185,14187,0,14190,0,0,14197,0,0,0,0,0,0,0,0,0,0,0,0,
-14198,0,0,0,0,0,0,14199,14200,0,0,0,14204,0,0,14208,0,0,0,0,0,0,0,0,0,0,0,14231,
-0,0,0,0,0,0,0,0,0,14234,0,0,14235,0,0,0,14240,14241,0,0,0,14246,0,0,0,14247,0,
-14250,0,0,14251,0,0,14254,0,0,14256,0,0,0,14260,0,14261,0,0,0,0,14262,14267,
-14269,0,0,14277,0,0,14278,0,14279,14282,0,0,0,14283,0,0,0,14284,14285,0,0,0,0,
-14286,0,0,0,14288,0,0,0,14289,0,14290,0,14293,14301,14302,14304,14305,0,14307,0,
-14308,14309,0,0,0,0,0,0,0,0,0,0,0,14311,14312,0,0,14317,0,0,0,0,0,0,0,14318,0,0,
-0,0,14320,0,0,0,0,14321,14322,0,0,0,0,0,14326,14329,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-14330,14331,0,0,0,0,14332,0,0,0,14333,0,0,14337,14340,0,14341,0,0,14342,0,14345,
-14346,0,0,14347,0,14362,0,0,0,0,0,14364,14365,14371,0,14373,0,0,14374,0,14379,0,
-14400,0,0,0,0,0,14401,0,0,14405,0,14406,0,14408,14409,0,0,0,14417,0,0,14424,0,0,
-0,0,0,0,0,0,0,14430,0,0,0,14431,0,0,14435,0,14440,0,0,0,0,0,0,14442,0,0,14443,0,
-0,0,0,0,14446,0,0,0,0,0,0,0,14454,0,14457,0,14460,0,0,14466,0,0,0,0,0,14467,0,0,
-0,0,0,0,14469,0,14477,0,0,0,0,0,0,14478,14482,0,0,0,14483,0,0,0,14485,14486,0,0,
-0,14487,14488,14489,14492,14493,14494,14495,14496,14497,0,14499,0,14501,0,0,0,0,
-0,0,0,0,0,0,14502,0,14507,14512,14513,14514,0,0,0,0,0,0,0,0,0,0,0,14515,14526,
-14530,0,14537,0,14544,0,14547,0,0,14548,14550,14551,0,0,14552,0,0,0,14553,0,
-14554,0,0,0,0,14556,14564,0,0,14565,14566,0,0,0,0,0,0,14568,0,0,14569,0,0,0,
-14571,14576,0,0,14577,14578,14579,0,0,14580,0,0,0,0,14582,0,0,0,0,0,0,0,0,0,0,0,
-0,14583,0,0,0,0,0,14587,0,14588,0,0,14600,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,14601,0,0,14604,14605,14611,0,14613,0,0,0,0,14615,0,0,0,0,0,0,14627,0,14628,0,
-0,0,0,14631,0,14633,14634,0,0,0,0,14635,0,0,0,0,0,0,0,0,14636,0,0,14639,14642,0,
-0,0,0,14644,0,0,0,0,14645,14646,0,14653,0,0,14654,0,14658,0,14661,0,0,0,14665,0,
-0,0,14668,0,0,0,0,0,0,0,0,0,14669,0,0,14670,0,0,0,14680,0,0,14681,0,0,0,0,0,
-14682,14683,0,0,0,0,14686,0,0,0,0,14687,14697,0,0,0,0,14699,14705,14711,0,0,0,0,
-0,0,0,0,0,0,14712,0,0,0,14713,0,0,0,0,14719,0,14720,14721,14726,0,0,0,14728,
-14729,0,0,0,0,14731,0,0,0,0,0,0,0,14733,14736,14737,0,0,14740,14742,0,0,0,14744,
-14753,0,0,0,0,14755,14758,14760,0,0,0,0,0,14761,14762,14765,14771,0,14772,0,
-14773,14774,0,0,14775,0,0,14776,0,0,0,0,14777,0,14779,0,0,14782,0,0,14785,14786,
-14788,0,0,0,0,0,14795,0,0,0,0,0,0,14798,0,14803,14804,14806,0,0,0,14809,0,0,0,0,
-0,0,14810,0,0,0,0,14811,0,14812,0,0,0,0,0,14815,0,0,0,0,0,0,0,0,14816,0,14818,0,
-0,0,0,0,0,14819,0,14820,0,14823,0,0,0,14824,0,0,14826,14827,0,0,0,0,0,0,0,0,0,0,
-0,0,14830,0,0,0,0,0,14833,0,14845,0,0,0,0,0,14846,0,0,14847,14871,0,14873,0,
-14876,0,14877,14878,14880,0,0,0,0,0,14881,0,14882,14894,0,0,0,0,14895,0,14907,0,
-14908,0,0,0,0,0,0,0,14911,0,0,0,0,14920,0,0,14931,0,14932,14934,14935,0,0,14936,
-0,14945,0,0,0,0,0,0,0,14947,0,0,14948,14949,14951,0,0,14952,0,0,0,14964,14973,0,
-0,14990,0,0,0,0,14995,0,0,14998,15001,0,0,15002,15020,0,0,0,0,0,0,15021,0,15022,
-0,0,0,0,15023,0,0,15025,15029,15033,0,0,0,15034,0,0,0,15035,0,0,0,0,0,15043,
-15044,0,0,0,15045,15046,15048,15050,0,15065,0,0,0,0,15066,0,0,15075,15082,15084,
-0,0,15085,15086,0,0,0,0,0,0,0,0,15088,0,0,0,15089,0,0,0,0,15094,0,15096,0,15097,
-0,15100,0,0,15102,0,0,0,0,0,0,0,0,15105,0,0,15106,0,15109,15113,0,0,0,15115,0,
-15118,0,0,0,0,0,0,15119,0,0,15120,0,0,0,0,0,15123,15129,0,0,0,15130,0,15131,0,0,
-15134,0,15135,0,0,0,15137,15138,0,0,0,0,0,0,15139,0,0,0,0,0,15140,0,0,15154,
-15162,0,15169,15170,0,15175,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15177,0,15178,15179,0,
-0,0,0,0,15183,0,0,0,0,0,0,0,0,0,0,0,0,15185,15187,0,15194,15195,15196,0,0,0,0,0,
-0,0,15204,0,0,0,0,15206,0,0,0,0,0,15207,0,0,0,0,0,0,0,0,0,15213,0,15214,0,0,0,0,
-0,0,0,15232,0,0,0,0,15234,0,15238,15240,0,15248,0,0,0,0,15250,15251,0,0,0,0,0,0,
-0,15252,0,0,0,15255,15262,15266,0,0,0,15267,0,0,0,15277,15279,0,0,0,15280,15281,
-15282,0,0,0,0,0,15285,0,0,0,0,15289,0,0,15291,0,0,0,0,0,0,0,15296,15297,0,0,
-15304,0,0,0,0,15306,0,0,0,0,0,0,15307,15308,0,15309,0,0,15311,0,0,15312,15313,0,
-0,0,0,0,0,0,0,0,0,0,0,15314,15317,0,0,0,15318,15319,0,0,0,0,15320,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,15321,0,0,0,0,0,15324,0,15325,15326,0,15330,0,0,0,0,15334,0,
-15335,0,15341,0,0,15342,0,0,15343,15344,0,0,0,0,15345,0,0,0,0,15347,0,0,15348,
-15349,15350,0,15356,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15357,0,15358,0,0,0,0,0,0,0,
-15359,15360,15364,0,15380,0,0,0,0,0,15392,0,0,15393,0,15395,0,0,0,0,0,0,0,0,
-15396,0,0,15397,15398,0,0,0,0,0,0,0,0,0,15399,0,15400,0,0,0,15402,0,15405,15410,
-0,0,0,0,15411,0,0,0,15412,0,15416,0,0,0,0,0,0,0,15428,0,15435,0,0,15438,0,0,0,0,
-15439,0,0,0,15440,0,0,0,15441,15449,15451,0,0,0,0,0,0,0,15452,0,0,15455,0,0,0,
-15456,0,0,15458,0,15460,15461,0,0,0,0,0,15462,15464,0,15465,0,0,15466,0,0,15467,
-0,0,0,0,0,15468,0,0,0,0,15481,0,0,15484,0,15485,15486,0,0,0,15487,0,0,0,0,0,
-15488,0,15492,15498,0,0,0,15499,0,0,0,15500,0,15501,0,0,15512,0,15522,0,0,0,
-15524,0,15525,15526,0,0,15527,0,0,15545,15546,0,15548,15552,0,15553,0,0,0,15554,
-0,15555,0,15557,15565,15573,15577,15578,0,15582,0,15583,0,0,0,0,0,0,0,0,0,0,0,0,
-0,15586,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15588,0,0,0,0,0,15589,0,0,0,0,0,0,0,15593,
-15594,0,0,0,0,15595,0,0,0,0,0,0,15596,0,0,0,15597,0,0,0,0,15600,0,0,15601,0,0,0,
-0,15602,15603,0,0,0,0,0,0,15604,0,15609,0,0,15612,0,0,15613,0,0,15615,15617,
-15618,0,0,15620,0,15636,15637,0,0,15649,0,0,0,0,0,0,0,15650,0,0,15651,0,0,0,
-15656,0,15658,0,0,0,15664,0,0,15665,0,0,15668,0,0,0,0,0,15669,0,0,15674,0,0,
-15675,0,0,0,0,15676,0,0,0,0,0,0,0,0,0,0,0,15677,0,0,0,0,15678,0,0,0,0,0,15679,0,
-0,15681,0,15686,0,0,0,0,15687,0,15688,0,0,15690,0,0,0,15697,0,15699,15700,0,0,0,
-0,0,0,0,0,0,15701,0,15702,15703,0,15704,0,15705,0,15707,0,15709,0,15712,15716,0,
-15717,0,15718,15720,0,0,0,0,0,15724,0,0,0,15725,0,15726,0,0,0,15740,0,15745,
-15746,0,0,15747,0,15748,0,0,0,0,0,15749,0,0,0,15752,0,15753,0,0,0,0,0,0,15759,0,
-0,0,15765,0,0,0,0,0,0,0,0,0,15767,0,0,0,15771,0,0,15784,0,0,0,0,15785,15790,
-15791,0,0,15792,0,0,0,15807,0,15811,0,0,0,0,0,0,0,0,0,0,0,0,15818,0,0,0,15819,0,
-0,0,0,15821,0,0,0,0,0,15822,15824,0,0,15827,0,0,15829,15831,0,15832,0,0,15833,0,
-15835,15838,15839,15843,0,0,0,0,0,0,0,0,0,0,0,15844,0,0,0,0,15845,15851,15856,0,
-0,0,0,0,0,0,15858,15860,0,15861,0,0,0,15864,0,0,0,0,15865,0,0,0,0,0,0,15866,0,
-15872,0,0,15876,0,0,0,0,15877,15878,15883,15885,0,0,15888,0,0,0,0,0,15889,15890,
-0,0,0,0,0,0,0,0,15892,0,0,0,0,0,0,0,15893,0,0,15894,0,0,0,15895,0,15896,15897,0,
-15898,15901,15902,0,15911,15915,0,15916,0,15924,15935,0,15937,0,0,0,0,0,15950,0,
-0,0,0,0,0,0,15958,0,0,0,15961,0,0,15966,0,15967,0,0,15977,0,0,15978,0,0,15981,
-15982,15983,0,0,0,0,0,0,0,15986,0,0,0,15990,0,15991,15995,15998,0,15999,0,16000,
-0,0,0,0,16008,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16009,16011,0,16013,0,0,0,0,
-0,0,0,0,16014,0,0,16015,16023,16024,16025,0,0,16026,0,16030,0,16032,0,16033,0,0,
-0,0,0,0,16035,16036,16037,0,0,0,0,0,16039,0,0,0,0,16041,0,0,0,0,0,16043,16044,0,
-0,16047,0,0,0,16048,0,0,16049,16050,16052,0,0,0,0,0,16055,0,0,0,0,0,0,0,0,16056,
-0,0,0,0,0,0,0,16058,16060,16061,0,0,16063,0,0,16064,0,0,0,16067,16068,0,0,16069,
-16078,0,0,0,16079,0,0,0,16080,0,16081,0,0,0,16088,0,0,0,0,0,0,0,0,0,0,0,16089,
-16093,0,16097,0,16103,0,16104,16105,0,0,16256,0,0,16259,0,0,0,0,0,0,0,16260,
-16261,0,0,16262,0,0,16263,0,16268,0,0,0,0,0,0,0,16269,0,0,16270,16273,0,16274,0,
-0,0,0,16275,16276,16277,16280,0,0,0,16281,16284,0,0,0,16286,0,16289,0,0,0,0,0,0,
-0,0,0,16290,0,0,0,0,16291,0,0,0,0,0,0,0,16292,0,0,0,0,0,0,0,0,16293,16295,16297,
-0,16302,0,16304,0,16305,0,16306,0,0,0,0,0,0,0,0,0,0,0,0,16307,16308,16312,0,0,0,
-0,0,0,16313,16315,0,16318,0,0,0,16321,0,0,0,0,0,0,0,16326,16333,16336,0,0,0,0,
-16337,16340,0,0,0,0,0,16345,0,0,16346,0,0,0,0,0,0,0,0,0,16347,0,0,16348,0,0,0,0,
-16349,0,0,0,16350,0,16357,0,0,0,0,16359,16360,0,0,0,0,16362,16363,16364,16365,0,
-0,16366,0,0,0,0,16367,16368,0,16369,16374,0,0,0,0,0,0,0,16376,0,0,0,0,16378,
-16379,0,16380,0,0,0,16381,16383,0,0,0,0,0,16390,0,0,0,16399,0,16402,16404,16406,
-16407,0,0,0,16409,16411,0,0,0,0,16412,0,16413,16415,16423,0,0,0,0,0,16424,0,0,0,
-16428,16434,16435,16449,0,16450,16451,0,0,0,16453,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-16454,0,0,16456,16458,0,0,16459,0,0,16460,0,0,0,0,16462,0,16463,0,0,16466,0,0,0,
-0,0,16479,0,0,16480,0,16481,16484,0,0,0,0,0,0,0,0,0,0,16485,0,0,0,0,0,0,16489,0,
-0,0,0,0,16491,0,0,16498,0,0,16503,0,16505,0,0,0,0,0,0,0,0,16506,0,0,0,16508,
-16509,0,0,0,0,0,0,0,0,16511,16513,0,0,0,16516,0,16517,0,16519,0,16529,0,0,16531,
-0,0,0,0,0,0,16534,0,0,16541,16542,0,0,0,0,0,0,0,0,0,16543,16547,16548,0,0,0,
-16551,0,16552,0,0,0,16553,0,0,16558,0,0,16562,16565,0,0,0,16570,0,0,0,16573,
-16585,0,0,0,16586,16587,16595,0,16596,0,16598,0,0,0,16600,0,0,0,0,0,0,0,0,0,0,0,
-0,0,16601,0,0,0,0,16603,0,0,0,0,0,0,0,16604,16612,0,0,0,0,16613,0,16618,0,0,0,
-16640,0,0,16641,0,0,0,0,0,0,16645,0,0,0,0,16646,0,0,0,0,0,0,16651,0,0,0,0,16653,
-16654,0,0,0,16655,0,0,16656,16667,0,0,0,0,16671,0,16672,0,0,0,16673,0,0,0,0,0,
-16676,0,16686,0,0,0,0,16689,0,16690,0,16692,0,16693,0,16694,0,16696,0,0,0,16705,
-0,0,0,0,0,0,16707,0,0,0,16709,0,0,0,0,16711,0,16712,16713,0,0,0,16715,0,0,0,0,
-16716,0,0,0,0,0,0,0,0,0,16718,16724,0,0,16726,16727,0,0,0,0,0,0,0,16728,0,16729,
-0,0,16730,0,0,0,0,0,16731,0,0,0,16732,0,0,0,0,16734,16738,0,0,0,0,0,0,0,0,16743,
-0,0,16745,0,0,0,0,0,16749,0,16752,0,0,0,0,16756,0,0,16758,0,16759,0,0,0,0,0,
-16760,0,0,0,0,0,0,0,16762,0,16769,0,16770,0,16772,0,0,0,16777,16780,0,0,0,0,0,0,
-16781,0,0,16782,0,16784,0,0,16785,16787,16792,0,0,16794,0,0,0,16798,0,0,16809,0,
-0,16814,16816,16817,0,16819,0,0,0,0,0,0,0,0,0,0,16820,0,0,16836,16839,0,0,16841,
-16851,16857,0,0,16858,16859,0,0,16860,0,0,0,0,0,0,0,0,16862,0,16863,0,0,0,0,0,0,
-0,16864,0,0,0,0,0,0,0,16876,0,16881,16882,0,16885,16886,0,16887,0,0,0,16889,
-16891,0,0,0,0,0,16894,16895,0,0,0,0,0,0,0,0,0,0,0,16897,0,16898,0,0,0,0,0,16913,
-0,0,16924,16925,16926,0,0,16927,0,0,0,16937,16938,0,0,0,16940,16941,0,0,0,16942,
-16945,0,16946,16949,16950,0,0,0,16952,16955,0,0,0,16965,0,16969,0,0,16975,0,0,
-16976,0,0,0,0,16978,0,0,16981,0,16983,16989,0,0,0,0,16990,0,0,16991,0,0,0,16993,
-0,16994,16996,17000,0,0,0,0,0,17002,17004,0,17006,0,0,17007,0,0,0,0,17008,17013,
-17014,0,0,0,0,0,0,0,0,0,17021,0,17031,0,0,0,0,0,17033,17036,0,17038,0,0,17039,0,
-17045,0,0,17046,17047,0,0,0,0,17048,0,17049,17050,0,17051,17053,0,17054,0,17055,
-0,0,0,0,0,17063,0,0,17064,0,0,0,0,0,0,0,17065,0,0,17068,0,0,0,0,0,17072,0,0,0,0,
-0,0,17073,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,17074,0,17080,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,17081,17083,17084,0,0,0,17085,0,0,0,0,17092,0,0,0,0,0,0,0,
-0,0,17093,0,17095,17102,0,0,0,0,0,0,17103,0,0,17105,0,17107,0,0,0,0,17114,0,0,0,
-0,0,17115,17125,17127,0,0,17128,0,0,0,17129,17130,0,17131,0,0,0,0,0,17132,17135,
-17145,0,0,0,0,0,0,0,0,17146,0,17147,0,17148,0,0,0,0,0,0,17149,17150,0,17151,
-17153,0,17155,0,0,0,0,17163,17171,0,17174,0,0,0,0,17179,0,0,17182,17185,0,0,0,0,
-0,17186,0,0,17188,0,0,0,0,0,0,0,17189,17191,0,17194,0,0,0,0,0,0,0,0,0,17195,
-17196,17203,17204,0,0,17205,17217,0,0,0,0,0,17218,0,0,0,0,17219,0,17220,0,17221,
-0,0,17230,0,0,0,0,0,17236,0,17238,17239,0,0,0,17241,17244,0,0,17245,0,17248,0,0,
-17251,0,17252,0,0,17264,0,17266,0,0,0,17268,0,0,0,0,17271,17272,0,17273,0,17295,
-0,17302,0,17305,0,0,0,17306,0,0,0,0,0,0,0,17308,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-17309,0,17310,17313,0,0,0,0,17314,17315,0,17317,0,0,0,0,17318,0,0,0,0,0,0,0,
-17320,0,0,0,0,0,0,17334,0,17344,17348,0,0,0,17350,17351,0,0,17353,0,0,17354,0,0,
-0,0,0,0,0,0,0,17355,0,0,0,0,0,0,17356,17357,0,0,17359,0,0,0,17371,0,17372,0,0,0,
-17393,0,0,0,0,17394,0,0,0,0,0,17395,0,0,17399,0,0,0,17401,17417,0,17418,0,17419,
-0,0,0,0,0,17422,17423,0,0,0,0,0,17424,0,0,0,0,0,17428,17429,17433,0,0,0,17437,0,
-0,17441,0,0,17442,0,0,17453,0,0,0,0,0,0,0,0,17454,17456,17462,0,0,17466,0,0,
-17468,0,0,17469,0,0,0,0,17470,0,17475,0,0,0,0,0,17479,0,0,0,17483,17484,0,17485,
-0,17486,0,17491,17492,0,0,17493,0,17494,17495,0,0,0,17496,0,0,0,17497,0,0,0,
-17502,0,0,0,0,0,17503,0,17505,0,17507,0,0,0,17512,17513,17514,0,0,17515,0,0,0,
-17519,0,0,0,17522,0,0,17523,0,0,0,0,0,0,0,0,0,17527,0,0,0,17528,0,0,0,17534,0,0,
-0,0,17536,0,0,0,17539,0,17540,17543,17549,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,17556,
-0,0,17558,0,17559,0,0,17560,0,0,0,17563,0,0,0,0,0,0,17564,0,0,17565,17566,0,
-17567,0,0,0,0,0,0,17569,17570,0,17575,0,0,0,0,0,0,0,0,0,0,0,17581,0,0,0,17582,
-17583,0,17586,0,0,17587,0,0,0,0,0,0,0,17588,0,0,0,0,17596,17597,0,0,17598,17600,
-0,0,0,0,0,0,17601,0,0,0,17604,0,0,17605,0,0,17607,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,17612,0,0,17618,0,17621,17622,0,0,0,0,17623,0,0,17624,0,0,17630,0,0,
-17631,17633,17634,0,0,0,0,0,0,0,17635,0,0,17636,0,0,17637,0,17638,0,17640,0,0,0,
-0,0,0,0,0,0,0,17641,0,0,0,0,0,0,0,0,0,0,17643,0,0,0,0,17645,0,0,0,0,0,0,0,0,
-17646,17662,0,0,0,0,0,0,0,0,0,17663,17664,0,17665,17666,0,0,0,17669,17671,17673,
-0,17679,0,0,0,0,0,0,0,17684,0,0,0,17686,0,17714,0,0,17720,17722,17726,0,0,17728,
-0,0,17729,0,0,0,17732,0,17733,0,17734,0,0,0,17735,0,0,0,0,17737,0,0,0,0,17739,0,
-0,0,17741,17742,0,0,0,0,17743,17744,17745,0,0,0,17749,0,17750,17751,17752,17754,
-17761,17762,0,17763,0,17766,0,17772,0,0,0,0,0,17775,0,0,0,0,0,0,0,17776,0,0,
-17777,0,0,17778,17779,0,17782,17783,0,0,0,0,0,0,0,0,0,0,17784,0,0,0,0,0,0,0,
-17821,0,0,0,17822,0,0,0,17823,17825,0,0,0,0,0,17826,17831,17832,17833,0,0,17845,
-0,0,0,17846,0,0,0,17848,17850,17854,0,17855,0,0,17859,0,0,0,0,0,0,17860,17861,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,17870,17871,0,0,0,0,0,0,17872,0,0,0,17879,0,
-0,0,17881,17883,0,17884,0,17885,0,0,17886,0,0,17887,17891,17953,0,0,0,0,17954,0,
-0,17955,0,17968,0,0,17972,0,0,0,0,0,17974,0,0,0,0,17976,17978,0,0,17983,0,0,0,0,
-18003,0,0,0,0,0,18007,0,0,0,0,0,18009,0,0,0,0,0,0,0,18010,0,0,0,0,0,0,18012,0,0,
-18014,0,0,0,18015,0,0,0,18016,0,18017,0,0,0,18030,0,0,0,0,0,0,0,18031,0,0,18036,
-18037,18038,0,0,18049,18056,0,18057,18058,0,18059,0,0,0,0,0,0,0,0,18062,0,0,0,0,
-18064,0,0,0,0,0,0,0,0,18067,0,0,0,18068,0,0,18075,0,0,18078,18093,18094,0,0,0,0,
-0,0,0,0,18097,0,0,0,0,0,18098,18100,0,0,0,18108,0,18111,0,0,18112,0,18113,0,0,
-18115,18116,0,18118,0,0,0,0,18121,0,0,0,0,18123,0,0,0,0,0,0,0,0,0,18124,0,0,0,0,
-18125,18126,0,18127,0,0,18128,18135,0,0,0,0,0,0,0,0,0,18150,0,0,0,0,0,18151,
-18152,0,0,18156,18164,0,18166,18171,0,0,0,0,0,0,0,0,0,18172,18183,0,18184,0,0,0,
-0,18185,0,18187,0,0,0,0,0,18188,0,0,0,0,0,0,0,0,18189,0,0,18190,0,0,18191,18192,
-0,0,18194,18195,18196,0,0,0,18197,0,18203,0,18204,0,0,0,0,18205,0,0,0,18207,
-18208,0,0,18214,0,0,0,18215,18216,0,0,0,18220,0,0,18222,0,0,0,0,0,18223,0,18225,
-18231,0,18234,0,18235,0,0,0,0,18240,0,0,18241,18242,0,0,0,0,0,18243,18251,0,
-18253,0,18254,0,0,0,18266,0,0,0,0,0,0,18269,18270,18271,18273,18281,0,0,0,0,0,0,
-0,0,0,0,0,0,18282,0,18283,0,18284,0,0,0,0,0,0,18285,0,18287,18289,0,0,18290,0,0,
-0,0,18308,0,0,0,18310,0,0,0,0,0,0,0,0,0,0,0,0,18311,0,18312,18313,0,18315,0,0,
-18316,18320,0,18331,0,18332,0,18336,0,0,0,0,18337,0,18340,0,0,0,0,0,0,0,0,0,
-18341,0,18344,18345,0,18346,0,0,0,0,0,18348,0,18351,0,0,18356,0,0,0,0,0,0,18357,
-0,0,0,0,0,18367,0,0,0,18368,0,18369,0,18370,18371,0,0,0,18437,18444,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,18445,18450,0,0,0,0,18451,0,18452,0,0,0,18453,0,0,0,0,0,18455,0,
-0,0,18456,0,18457,0,18460,0,0,18461,0,0,0,0,0,0,0,0,18466,0,0,18467,0,0,0,0,
-18473,0,0,0,18476,0,18477,0,0,0,18478,18479,18480,0,0,0,18485,0,0,0,18486,0,0,0,
-0,0,0,18488,18490,0,0,0,0,0,0,18491,0,0,0,0,0,18495,0,0,18496,0,0,0,0,0,0,18505,
-0,18521,0,18522,18523,0,0,0,18525,18526,0,0,0,0,0,18527,0,0,0,0,18532,18533,0,
-18534,0,0,0,0,0,0,18535,18537,0,18538,0,0,0,0,0,0,18540,18541,18542,18543,0,
-18546,0,0,0,0,18553,18556,0,0,18558,0,0,18569,18571,0,0,0,18572,0,18574,0,0,0,0,
-18586,0,0,0,0,0,18588,0,0,18589,0,0,0,0,0,0,18590,0,18592,0,0,0,0,18594,0,0,0,
-18596,0,0,18597,18598,0,0,18601,0,0,0,0,18602,0,0,0,18603,18604,0,18605,0,0,0,0,
-18608,0,0,18611,0,0,0,0,0,0,0,0,0,18612,0,18616,0,0,18617,18619,0,0,0,18628,0,0,
-0,18629,0,0,18630,0,0,0,0,0,0,0,18631,0,18632,0,0,18635,18637,0,0,0,0,0,0,18641,
-18643,18648,0,18652,0,0,18653,0,18655,18656,0,0,0,18657,0,0,18666,18674,0,0,0,0,
-18677,18684,18685,0,0,18686,0,0,18690,0,0,0,0,0,0,0,18695,18696,0,0,0,0,0,0,0,0,
-0,0,18697,0,0,18700,0,0,0,0,0,0,18702,0,18708,0,0,18709,0,18710,0,0,18711,0,
-18714,0,0,18718,0,0,0,0,0,0,18719,0,0,18722,0,18726,0,0,0,0,0,0,0,0,0,0,0,0,0,
-18731,0,0,0,0,0,18739,18741,0,0,18742,0,18743,18744,18746,18748,0,18752,18753,0,
-0,18754,18763,0,18765,0,0,0,18766,0,0,0,18769,0,0,0,0,0,18773,18778,18779,18781,
-0,0,18784,18787,0,18788,0,18793,0,0,0,0,0,0,18795,0,0,18800,0,0,0,0,0,18801,
-18804,0,0,0,0,0,0,0,18806,0,0,0,18811,18815,18816,0,0,0,0,18825,0,0,18827,18829,
-0,0,18830,0,0,0,0,18831,0,0,18832,0,0,0,0,18833,0,18840,0,18841,0,18842,0,0,0,0,
-18843,0,18844,0,0,0,0,0,0,18845,18846,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-18848,0,0,0,18853,18860,0,0,18862,18866,0,0,18867,18869,0,0,18874,18881,18891,0,
-0,0,0,0,0,0,0,0,0,18892,0,0,0,0,0,0,0,0,18895,0,18896,0,0,0,18900,0,0,0,18901,0,
-18902,18915,18916,0,0,0,0,0,0,0,0,18919,0,0,0,0,0,18920,0,0,0,18921,18929,0,0,0,
-0,18930,0,0,0,0,0,0,18932,0,0,0,0,18934,18942,0,0,0,18951,18957,0,0,0,0,18958,0,
-0,0,0,18959,18960,0,0,18961,0,0,18962,0,0,0,0,18963,18964,0,0,0,18965,0,18967,0,
-0,0,0,0,0,0,0,0,18968,0,18969,0,18970,18973,18976,0,0,0,0,0,0,18977,0,0,0,18981,
-0,0,0,18990,0,18998,0,0,0,0,0,18999,19003,0,0,19005,0,0,0,19006,0,0,0,0,0,0,
-19008,19011,0,0,19018,0,0,19019,0,19024,0,19031,19032,0,19039,0,19041,19050,0,0,
-0,19051,19055,19056,0,19059,19063,19064,0,0,19088,0,0,0,19093,19094,0,0,0,0,
-19095,0,19096,0,0,0,19097,0,0,19098,0,19099,19100,0,0,19103,0,0,0,0,0,0,0,19111,
-0,0,0,0,0,0,19112,0,0,0,19116,19117,0,19121,19122,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,19123,19124,0,0,0,0,0,0,0,19125,19126,0,19128,0,0,0,0,0,0,0,0,0,0,
-19129,19130,19131,19132,0,0,19146,0,0,19147,19156,19158,0,0,0,0,0,0,0,0,19182,
-19185,0,0,19187,0,0,0,19193,0,0,0,0,0,19194,0,19197,0,0,0,0,19198,0,0,0,0,0,0,0,
-0,0,0,19202,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,19203,0,19205,19210,
-0,0,0,19213,0,19218,0,0,0,19223,19229,0,0,19230,0,0,19231,19232,19233,19239,0,0,
-0,0,0,19240,0,19248,19249,0,0,0,0,19254,0,19256,19258,19259,0,0,19261,0,19266,0,
-0,0,19272,0,19278,19281,19282,0,0,0,0,0,0,0,0,0,0,0,0,19283,0,0,19284,0,0,19285,
-19287,0,0,0,0,0,0,0,0,0,0,0,0,0,0,19288,19291,0,19292,0,0,0,0,19297,0,19298,0,0,
-0,0,19302,19303,0,0,0,0,19304,19305,0,0,0,0,19314,0,0,19315,0,0,19321,0,0,0,0,0,
-0,0,19322,0,19333,0,19334,19335,0,19336,19337,0,0,0,0,0,0,0,0,0,0,0,19346,0,0,
-19353,0,19354,19362,0,19366,19367,0,0,19369,0,19375,0,19377,19380,19388,0,0,0,0,
-0,19389,19390,0,0,0,0,19392,0,0,0,0,0,19402,0,0,0,0,0,0,0,0,19412,0,0,19413,
-19422,0,19424,0,0,0,19425,0,0,0,19428,0,0,0,0,19431,0,0,0,0,0,19432,0,0,0,0,0,
-19448,19459,0,0,19461,0,19462,19463,0,19467,19474,19482,0,0,0,0,19494,0,0,0,0,
-19501,0,0,0,0,0,0,0,0,0,0,19502,19504,0,0,0,0,0,0,0,19505,0,0,0,0,19506,19507,0,
-0,0,19508,0,0,19511,0,0,19514,0,19515,0,19516,0,19518,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,19530,0,19537,19538,0,19543,19546,0,19547,19551,0,0,0,0,0,0,19552,
-19553,0,0,0,0,0,0,0,0,0,0,0,0,19555,0,0,19556,0,0,0,0,0,0,0,0,0,0,0,0,19560,
-19561,0,0,19562,0,0,0,0,0,0,19565,19567,0,19568,0,0,0,19569,19570,0,19578,0,0,0,
-0,19580,0,0,0,0,19581,19584,0,0,0,0,0,0,0,19585,19586,0,0,0,19587,19588,0,19589,
-0,0,0,0,0,0,19592,19593,19599,0,19600,0,0,19604,0,0,19605,0,19606,19608,19610,0,
-19613,19614,0,0,0,0,0,0,19616,19617,0,0,19618,0,0,19619,0,0,0,19620,19621,19631,
-0,0,19632,19634,19636,0,19643,0,0,19644,19658,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,19659,0,0,0,0,0,0,0,0,0,0,0,19675,19677,0,0,0,0,19679,0,19683,0,19684,0,0,
-0,0,0,0,19687,0,0,0,0,0,0,0,0,19688,19689,19692,0,0,0,0,0,0,0,19695,19697,0,0,0,
-0,0,19698,19699,0,0,19700,0,19702,0,0,19703,0,0,0,0,0,0,19704,19708,0,19710,0,
-19713,0,0,0,19715,0,0,0,0,19718,0,0,0,0,0,0,0,19720,0,19722,0,0,19725,0,0,0,0,0,
-0,0,0,0,0,0,0,0,19730,0,0,0,0,0,19731,0,19734,19735,19739,0,0,19740,0,19741,0,0,
-0,19746,0,0,19747,0,19771,0,0,0,0,0,0,0,0,19772,19775,0,0,0,0,0,0,19778,0,0,0,0,
-0,19779,0,0,19780,19790,0,19791,0,0,19792,0,0,0,19793,0,0,19796,19797,0,0,0,
-19799,0,0,0,19801,0,0,0,0,19803,0,19804,0,19805,0,0,19807,0,0,0,19808,0,0,0,0,0,
-0,19809,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,19816,0,19821,0,19822,19830,19831,0,0,
-0,19833,0,0,0,0,0,0,0,0,0,0,19838,0,0,0,0,19839,0,0,19843,0,0,0,0,19845,0,0,0,0,
-19847,0,0,19848,0,19849,0,0,0,0,0,0,0,19851,0,0,0,19854,0,0,0,0,0,0,0,0,0,19864,
-0,19865,0,19866,0,0,0,0,0,0,0,19868,0,0,19870,0,0,19871,0,0,19872,19873,19875,0,
-19880,19882,19884,0,0,19885,19886,19888,0,0,0,0,0,0,0,0,0,0,0,0,19890,19892,
-19893,0,0,19894,0,0,0,19895,0,19896,19902,0,0,19903,0,0,19905,0,0,0,19906,0,
-19908,0,19909,19911,0,0,0,19913,19920,0,19938,19939,19940,0,0,0,0,0,0,0,19942,0,
-19943,0,19945,0,0,0,19951,19952,19954,19960,0,19965,0,19971,0,0,0,0,0,19975,0,
-19976,0,19990,0,0,19991,0,19993,0,19995,0,0,0,19998,19999,20001,0,20003,20005,0,
-20011,20012,0,0,0,0,0,0,20014,0,20020,0,0,0,0,20021,0,0,0,0,0,20023,20024,0,0,0,
-0,0,20025,0,0,20027,0,0,20029,0,0,20032,0,0,0,0,20044,20045,0,20048,20049,0,0,
-20050,0,20052,0,0,20054,20057,0,0,0,0,0,0,0,0,0,20059,0,0,20061,0,20062,0,20064,
-0,0,20066,0,0,20067,0,0,0,0,20069,0,0,0,0,0,0,20070,20071,0,0,0,0,0,0,0,0,0,0,0,
-20072,0,0,20073,20074,0,0,0,0,0,20075,0,20078,0,0,0,0,20080,0,20081,0,0,0,0,0,0,
-20095,0,20098,0,0,0,0,0,0,0,20107,0,0,0,0,0,0,0,0,20112,0,0,0,20113,20114,0,0,0,
-20115,20123,20124,0,0,0,20131,20133,20134,0,0,0,0,20136,0,0,20137,20138,20150,0,
-20152,0,0,0,20153,0,0,20154,0,0,0,20158,0,20163,0,0,20164,0,0,0,0,0,0,0,20166,0,
-20168,0,20170,0,20175,0,0,20178,0,0,0,0,20223,0,0,0,0,20224,0,20226,0,0,20230,0,
-20231,0,0,0,0,20232,0,0,20233,20234,0,20244,0,20247,0,0,0,0,0,0,20249,0,0,0,
-20250,0,0,0,0,20251,0,20253,0,20254,0,0,0,0,20256,0,0,20264,0,0,0,0,20266,0,0,0,
-20278,0,0,20279,20282,0,0,0,0,0,20283,0,20284,0,20285,0,20287,20290,0,0,0,0,
-20292,0,0,0,0,20293,20297,0,0,0,0,0,0,20299,0,20300,20303,0,0,0,0,0,0,20307,0,0,
-20308,0,20309,0,20310,0,0,0,0,0,0,20312,0,0,0,20314,0,0,0,0,20315,20316,0,20322,
-0,0,0,0,0,0,20339,0,0,0,20342,0,0,0,0,20352,0,0,0,0,0,0,0,0,0,0,20362,0,0,20365,
-0,20375,20377,0,0,0,0,0,0,0,0,0,0,0,20378,20379,0,20380,0,0,20381,0,20382,0,
-20383,0,20388,0,0,0,0,0,0,0,0,0,0,0,0,0,0,20390,20392,20393,0,0,20395,0,0,0,0,0,
-20396,0,0,0,0,0,0,0,0,20398,20415,0,0,0,20417,0,0,20420,0,0,20426,20428,0,20431,
-0,0,20432,0,20433,20434,20435,0,0,0,0,20440,0,0,0,0,0,20442,0,20443,0,20446,0,0,
-0,0,20448,0,20451,0,0,0,0,0,0,0,0,0,20452,20453,0,0,20454,0,0,0,0,0,0,20457,0,
-20458,0,0,0,20465,0,0,0,0,0,20469,0,0,0,20473,0,20476,0,0,0,0,0,0,0,0,20477,0,0,
-20485,0,0,20486,0,0,20487,0,20496,0,20497,0,0,20498,0,0,0,0,0,0,0,0,0,0,20499,
-20500,0,20501,0,0,0,0,0,20520,20527,0,20529,0,0,0,0,20539,0,0,20540,0,0,0,20543,
-0,0,0,20546,0,0,0,0,0,20548,0,0,20563,0,0,20564,0,20566,0,0,0,0,0,20589,0,0,0,0,
-20590,0,0,20593,20594,0,0,0,0,20595,0,20597,20598,0,0,0,20618,20620,0,0,0,0,
-20621,0,0,0,0,20627,0,0,0,0,0,20628,0,0,0,20629,0,20630,0,0,20639,0,0,0,0,0,
-20707,0,0,20709,0,0,0,20713,20714,0,0,0,0,0,20724,20725,0,0,0,0,20726,20728,
-20729,0,20733,0,20734,0,20735,20736,0,20737,0,0,20744,0,20745,0,20748,0,0,20749,
-0,0,0,0,0,0,0,0,20750,0,0,0,0,20754,0,0,0,20761,0,0,20763,0,0,0,0,0,0,0,20766,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,20767,0,0,0,0,20768,0,20769,20777,0,0,0,0,0,0,20785,0,
-0,0,20786,20795,20801,0,20802,0,20807,0,0,20808,0,0,20810,0,0,20811,0,20812,0,0,
-0,0,0,20813,0,0,20818,20820,20821,0,0,0,20822,0,20823,0,0,0,20826,0,0,0,0,0,0,0,
-20829,20830,20831,0,20832,20836,0,0,20839,0,0,20840,20842,0,20843,0,20844,0,
-20854,0,0,0,20855,0,0,0,0,20856,0,0,0,20869,0,0,20871,0,0,0,0,0,0,0,20873,0,0,0,
-0,0,20876,0,0,0,0,0,20880,0,0,20882,0,0,0,0,20883,20884,0,0,20890,0,0,0,0,0,0,0,
-0,0,20891,0,0,0,0,0,20905,0,20906,20910,0,0,20912,20915,0,0,0,0,0,20916,0,20917,
-0,20919,20920,20922,0,20927,0,20928,20929,20930,0,0,20935,0,0,20939,0,0,20941,0,
-0,0,20943,0,0,0,20946,20947,0,0,0,0,0,20950,0,20954,0,0,20955,20964,0,0,20967,0,
-0,0,0,0,20973,20975,0,0,0,20984,0,20987,20988,0,0,0,0,0,20989,0,0,0,20995,0,
-20998,0,20999,0,0,0,0,21000,21001,0,0,0,0,21008,0,21010,0,21016,0,0,0,21017,
-21018,0,0,0,0,0,21021,21026,21027,21028,0,0,21029,0,0,0,0,0,21030,0,0,0,0,0,0,0,
-0,0,0,0,0,0,21031,21032,0,0,0,0,0,21037,0,0,21038,0,0,0,0,0,0,0,0,0,21039,0,
-21041,0,21046,21047,0,0,0,21049,21053,0,0,21057,21064,21065,0,0,21066,21067,0,0,
-0,21069,0,0,0,21071,21072,0,0,21073,0,21074,0,0,21078,0,0,0,0,21079,0,0,21080,
-21081,0,0,21086,21087,0,21089,0,0,0,0,0,0,0,21091,0,21093,0,21094,0,0,0,0,0,0,0,
-0,21095,0,0,0,0,0,21096,0,21098,0,0,0,0,0,0,0,21099,0,0,21100,21101,21102,0,0,0,
-0,0,21103,0,21104,0,0,0,0,0,21105,21108,21109,0,0,21112,21113,0,0,0,0,0,0,21115,
-21122,21123,0,0,0,0,0,21125,0,0,0,0,0,0,0,0,21129,21131,0,0,21134,0,0,0,21137,
-21142,0,21143,0,0,21144,0,21145,21146,0,21152,21154,21155,21156,0,0,0,21160,0,0,
-0,0,0,0,21161,0,21164,0,21166,0,0,0,0,21170,0,0,0,0,21171,0,0,21172,0,21174,0,
-21175,0,0,0,0,0,21176,21179,21188,0,0,0,21189,0,0,21190,0,0,0,21192,0,0,21193,0,
-0,0,21198,0,21212,0,0,21213,0,0,0,0,0,0,21215,21216,0,0,21223,21225,0,21226,0,0,
-0,0,21227,21228,0,0,21229,0,0,0,0,21230,21236,0,0,0,0,0,0,0,0,0,0,0,0,0,21237,0,
-0,21238,21239,0,0,0,0,21256,0,0,0,0,0,21257,0,0,0,0,0,0,0,21259,0,0,0,21263,0,
-21272,0,21274,0,21282,0,0,0,0,0,0,0,0,21283,0,0,0,0,0,0,0,0,21294,0,0,21297,0,0,
-0,0,21298,0,0,0,21299,0,21300,21302,0,21316,0,21318,21322,21323,0,21324,0,21326,
-0,0,0,21327,21328,0,0,0,21352,0,0,21354,21361,0,0,0,0,0,0,0,0,0,0,0,0,0,21362,0,
-0,0,21363,0,0,0,0,0,0,0,0,0,21366,0,0,21367,21372,21374,0,0,0,21375,21377,0,
-21378,0,0,0,21380,0,0,0,0,0,0,0,0,0,0,21381,0,0,0,0,0,0,21382,0,21383,0,0,21384,
-0,0,21385,0,0,0,0,21389,21390,0,0,0,0,0,0,0,0,0,0,0,0,0,21397,21398,0,0,0,0,0,0,
-0,0,0,0,21399,0,21400,0,0,0,0,21402,0,0,0,21403,21404,0,21405,21406,0,0,0,21407,
-0,0,0,0,0,0,0,0,0,0,0,0,21408,0,0,0,0,21409,0,21421,0,21422,0,0,0,21425,21428,0,
-0,0,0,21429,0,0,0,0,0,21433,0,0,0,0,0,0,0,0,0,0,21434,0,21443,0,21444,21449,0,
-21452,0,21453,21454,0,0,0,21457,0,0,21458,0,0,0,21460,21461,0,0,21464,0,0,0,
-21473,21478,0,0,21479,0,0,21481,21483,0,0,0,0,0,0,0,0,21484,0,0,21485,21486,0,0,
-21488,0,0,0,0,0,0,21523,0,0,21525,0,0,0,0,0,0,0,21526,0,0,0,0,0,0,21529,21530,0,
-0,21531,0,0,21533,0,0,21539,21564,0,21567,0,0,0,0,0,0,0,0,21575,0,0,0,0,21577,0,
-0,0,0,0,21591,0,0,21604,0,0,0,0,0,0,0,0,0,21605,0,21606,0,0,21617,21618,21619,
-21620,0,0,0,0,0,0,0,0,0,0,0,0,0,21623,0,0,0,0,21631,0,21635,0,0,0,0,21639,21646,
-21653,21662,0,0,21663,21664,0,21666,0,0,21667,0,21670,21672,21673,0,21674,21683,
-0,0,0,0,0,21684,0,21694,0,0,0,0,21695,21700,0,21703,0,21704,0,0,21709,0,0,0,
-21710,0,0,0,0,0,0,0,0,21711,0,0,0,21712,0,21717,0,21730,0,0,0,21731,21733,0,0,0,
-0,21737,21741,21742,0,21747,0,0,0,21749,0,0,0,0,0,0,0,0,0,0,0,0,0,21750,0,0,0,0,
-0,21752,0,0,0,0,21753,0,0,0,0,0,0,21755,21756,0,21757,0,0,0,0,0,0,21760,0,0,
-21763,0,0,0,0,0,0,0,0,0,21764,0,0,21766,0,0,21767,0,0,0,0,0,0,0,0,0,21773,0,
-21774,0,0,21775,0,0,0,0,21776,0,0,21777,0,0,0,0,0,0,0,0,0,21780,21787,21788,
-21791,0,0,0,21797,0,0,0,0,0,21805,0,0,0,0,21806,0,21807,21809,0,21810,21811,0,
-21817,21819,21820,0,21823,0,21824,0,0,21825,0,0,21826,21832,0,0,0,0,0,21833,
-21848,21849,0,0,21867,21870,21871,21873,0,0,0,21874,0,0,0,0,0,0,0,0,0,21875,0,
-21878,0,0,0,21879,0,21881,21886,0,0,0,0,21887,0,0,21888,21894,21895,21897,0,
-21901,0,21904,0,0,21906,0,0,0,21909,21910,21911,0,0,21912,0,0,21913,21914,21915,
-0,21919,0,0,0,0,0,0,0,21921,0,0,21922,21933,21939,0,0,0,0,0,0,0,0,0,0,0,21944,0,
-0,0,0,0,21945,0,21947,0,0,0,0,0,0,0,0,0,0,21949,0,0,0,21950,0,0,0,0,0,0,0,0,0,0,
-0,0,0,21951,0,21952,0,0,0,0,0,0,0,0,0,21954,21957,0,0,0,0,21958,0,21959,0,0,0,0,
-0,0,21962,21963,0,0,0,0,0,0,0,0,21964,21965,0,0,21969,21970,0,0,0,21974,0,0,
-21980,21981,0,21982,0,0,0,0,0,21985,0,21988,0,21992,0,21999,0,0,0,0,0,0,22001,0,
-22002,0,0,0,0,0,0,22003,0,0,0,0,0,22004,0,0,0,22008,0,22009,22015,0,0,22016,0,0,
-0,22017,22019,0,0,0,0,0,0,0,0,0,22020,0,0,0,0,0,0,0,0,0,0,22021,22037,0,22039,0,
-0,0,22040,0,0,0,22048,22049,0,0,22053,22055,22056,22059,0,0,22060,22061,0,0,
-22064,0,0,0,0,22066,0,0,0,0,0,0,0,22073,0,0,0,22074,22075,0,0,0,0,0,0,0,22076,0,
-0,0,0,22077,22084,22099,0,0,0,0,0,0,0,22104,0,0,22107,0,22108,0,22109,0,22110,0,
-0,0,0,0,0,0,22111,22119,0,22120,22122,0,0,0,0,22125,0,0,0,22128,22129,0,0,0,0,0,
-0,22141,0,0,0,22142,0,0,22144,22146,0,22148,22149,22151,22154,0,0,0,22162,0,0,0,
-0,22164,22177,0,0,0,0,22179,0,22182,22183,0,0,22184,22188,0,0,0,0,0,0,0,0,22190,
-0,22194,22201,0,0,22208,0,22209,0,22212,0,0,22215,0,22223,22231,0,0,22232,0,
-22234,0,0,22235,22236,0,22237,0,22240,0,0,0,0,0,22241,0,0,0,22242,22246,22247,0,
-0,0,22259,22268,0,22269,0,0,0,0,0,0,0,22270,0,0,0,0,22271,0,22272,0,22277,0,0,0,
-0,0,22278,22280,22283,22286,0,0,22287,22289,0,0,22290,0,22293,0,0,0,0,0,0,0,0,0,
-0,22295,0,22301,22302,0,0,0,22305,0,22308,0,0,0,0,0,0,0,0,0,0,22315,0,0,0,22317,
-0,22334,0,0,0,22335,0,0,0,0,0,22336,0,22338,22344,0,22347,22349,0,22350,0,0,0,0,
-0,0,0,22357,0,0,0,0,0,22358,0,0,0,0,0,0,0,0,0,0,22359,22360,0,0,0,0,0,0,0,0,
-22361,22366,0,0,22369,0,22370,22373,0,0,0,0,0,22375,0,22377,0,0,0,0,0,22378,0,0,
-0,0,22381,0,0,0,0,22382,0,22383,0,0,0,0,0,0,0,0,0,22391,0,0,22392,22395,22396,
-22402,0,0,0,0,0,0,0,0,0,0,0,0,0,22405,0,0,22406,0,0,22408,0,0,22409,22410,0,0,0,
-0,0,0,22424,0,0,0,0,22426,0,0,0,22427,0,22428,0,22432,0,22435,22442,22443,0,0,0,
-0,22444,0,0,0,0,0,22446,0,22454,0,22455,0,0,0,22465,0,22470,0,22471,0,0,0,0,
-22472,22473,0,22487,0,0,0,22488,0,0,0,0,22489,0,0,22499,0,0,0,0,0,0,22514,0,0,
-22515,0,0,0,0,0,0,0,22516,0,0,0,22517,22520,0,0,0,22534,0,0,22535,0,0,22536,0,
-22540,22553,0,22555,0,0,0,0,22561,0,0,22562,0,0,0,0,0,0,0,0,0,0,0,22566,0,0,0,0,
-22567,22568,0,0,22575,0,22579,0,22582,22583,22585,0,0,0,0,0,22586,0,0,22587,0,0,
-22590,0,0,0,0,0,22591,0,22592,0,0,0,0,0,22593,0,22602,0,0,22604,0,0,22609,0,0,
-22618,0,0,0,0,0,0,22619,0,22624,22625,0,0,22638,0,0,0,0,0,22639,0,0,22640,0,0,0,
-0,0,0,0,22644,0,22645,22647,0,0,0,0,22652,22653,0,0,0,22654,0,22655,0,0,0,22656,
-0,0,0,0,0,0,0,0,0,0,22673,22675,22676,0,0,22678,22679,0,22691,0,0,0,0,0,0,0,
-22693,0,0,22696,0,22699,22707,22708,0,0,0,0,0,0,0,0,22718,0,22719,0,0,0,0,22723,
-0,0,0,22724,22725,0,0,0,0,0,0,0,0,0,0,0,0,0,0,22726,22728,0,0,0,0,0,0,0,0,22729,
-0,0,22731,0,0,0,0,22732,22735,22736,0,0,0,0,22739,0,22749,0,0,22751,0,0,0,0,0,0,
-0,0,0,0,0,22758,0,0,0,0,0,22760,0,0,0,0,0,22764,22765,22766,0,22768,0,0,0,0,0,
-22769,22770,0,0,0,0,0,0,22771,0,0,22772,22775,0,22776,22777,22780,0,0,22782,
-22784,0,22787,0,22789,22796,0,0,0,0,0,22798,0,0,0,0,0,0,22802,0,22803,22804,0,0,
-0,0,0,0,0,0,0,0,22805,0,0,22810,22811,22814,22816,0,22825,22826,0,22831,22833,0,
-0,0,0,0,0,0,0,0,22834,0,22836,22838,0,22839,0,0,0,0,0,22840,0,22847,0,0,0,0,0,
-22856,22857,0,22858,22859,0,0,22862,0,0,22864,0,0,0,0,22865,0,0,0,0,0,0,0,0,0,0,
-0,22866,0,22867,22868,0,0,0,0,22869,0,22871,0,22872,0,22873,22881,22882,22884,
-22885,0,0,0,0,0,0,0,22886,22887,0,22894,0,22895,0,0,0,22900,0,22901,0,0,0,0,
-22904,0,0,0,0,22905,22907,0,0,0,22915,22917,0,0,22918,0,0,0,22920,0,0,0,22929,
-22930,0,0,0,22941,22942,0,0,0,22943,0,0,0,22944,0,0,0,0,0,0,0,22946,0,22947,0,0,
-22954,0,22956,0,0,22962,0,0,0,0,0,0,0,22963,0,0,22964,0,0,0,0,0,0,0,22965,0,
-22968,0,0,0,22969,0,0,0,0,0,22970,0,22971,0,0,0,0,0,22978,0,0,22979,0,22987,0,0,
-22989,0,0,0,0,0,0,22990,0,23005,0,0,0,0,0,0,0,23006,23007,23008,0,0,23023,23024,
-23029,0,0,0,0,23030,0,0,0,0,0,23032,0,0,0,0,0,23035,0,0,0,0,23038,0,0,0,23048,0,
-23049,23052,23053,23060,23061,0,23063,0,0,0,0,23067,23068,0,0,0,23069,23073,0,0,
-0,23127,0,23128,0,0,0,0,0,23129,0,23138,23141,0,23149,0,0,23150,0,0,0,23152,0,0,
-0,0,0,0,0,0,23154,0,0,0,0,23157,23159,23160,0,0,0,0,0,0,0,0,0,0,0,0,23180,0,0,0,
-0,23181,0,0,23188,0,23189,0,0,0,0,0,0,0,0,0,0,0,0,23195,0,0,23196,23199,0,0,0,0,
-0,0,0,0,0,23202,0,23204,0,23207,0,23209,23210,0,0,0,0,0,0,23227,23229,0,0,23230,
-23234,23238,0,0,0,23245,23246,23248,0,0,0,0,23249,23254,0,0,0,23265,0,0,0,0,0,0,
-0,23268,0,23276,0,0,0,0,23277,0,23297,0,23298,0,0,0,0,23299,0,23302,0,0,23303,
-23312,0,0,23314,0,23320,0,0,0,0,23324,0,23325,0,23328,0,23334,0,0,0,23337,0,0,0,
-0,23343,23344,23346,0,23348,0,0,0,0,0,0,0,0,23353,0,0,0,0,23355,0,23356,23358,0,
-0,0,23359,23360,0,23361,0,23367,0,23369,0,0,23373,0,23378,23379,0,23382,23383,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,23387,0,0,0,0,0,0,23388,23390,0,0,23393,23398,0,0,0,
-23399,0,0,0,23400,0,0,0,0,23401,0,0,0,23415,0,0,0,0,0,0,0,0,23416,0,23422,0,
-23443,23444,0,0,0,0,23448,0,23454,0,0,0,0,0,0,23456,0,0,23458,23464,0,0,0,0,0,0,
-23465,0,0,0,23470,23471,0,0,23472,0,0,0,23473,23496,0,0,0,0,0,0,0,0,23497,0,
-23499,0,0,23502,0,0,23503,0,0,23513,0,0,23515,0,0,0,23517,0,0,0,0,23518,23519,
-23521,23524,0,23525,23528,23539,0,0,0,0,0,23541,0,0,23544,0,0,23556,0,0,23557,0,
-0,0,0,0,0,0,0,0,0,0,0,0,23559,0,23560,0,0,23561,0,0,23566,0,0,0,0,0,23568,23569,
-23570,0,0,0,0,23571,0,23574,0,0,0,0,0,0,0,0,0,0,0,23575,0,23579,0,0,23581,0,0,0,
-0,0,0,23587,0,0,0,0,0,0,0,23596,23598,0,0,0,0,23602,23606,0,0,23607,0,23608,0,0,
-0,23614,23616,0,0,0,0,0,23618,0,0,23619,0,0,0,0,23621,23626,0,23627,0,0,0,0,0,0,
-0,23629,0,23630,0,0,0,0,23634,0,23636,0,0,0,0,0,0,23638,0,0,0,0,23640,23667,0,
-23669,0,0,0,23681,0,0,0,0,0,0,0,23682,0,23683,0,0,0,0,0,23684,0,0,0,23685,23689,
-0,23693,23694,23700,0,23702,0,23709,0,0,0,0,0,0,0,23712,0,0,0,0,0,23714,0,0,
-23715,0,0,0,0,23718,0,0,23720,0,0,0,0,23722,0,0,0,23726,23729,0,23741,23746,0,
-23748,0,0,0,0,23749,0,0,0,0,0,23750,0,0,0,0,23751,0,23753,0,0,0,0,23757,23765,0,
-0,0,23770,0,0,0,0,0,0,0,23771,0,23772,23781,0,0,23796,0,0,0,0,23798,0,23799,0,0,
-0,23802,0,0,23806,0,23807,0,0,23808,0,23809,0,23819,0,0,0,23821,0,23827,0,0,0,
-23829,0,0,0,0,0,0,0,23830,0,0,0,0,0,0,23832,23833,23834,23835,0,0,0,0,23837,
-23838,0,0,0,0,0,23846,0,0,0,0,0,0,23847,0,0,0,0,0,23879,23881,0,0,23882,23883,
-23895,0,23899,0,0,0,0,23901,0,0,0,0,0,0,23902,0,0,0,0,0,23903,23905,0,23906,0,
-23907,23918,23919,23920,0,23922,0,23924,0,23927,0,23934,0,23937,23941,0,23942,
-23946,0,0,0,0,0,23955,23956,23958,0,0,0,0,0,0,23959,0,23962,23965,0,23966,0,0,0,
-0,23967,23968,0,0,23973,0,0,23974,0,0,0,0,23975,0,23976,0,0,0,0,0,0,0,0,0,0,0,0,
-0,23977,0,0,0,0,0,0,0,0,23980,0,0,23984,0,23985,0,0,23987,0,0,23988,23990,23991,
-0,0,0,0,0,0,23992,0,0,0,0,0,0,0,0,23994,0,0,0,23998,0,0,0,0,0,0,0,0,0,23999,0,0,
-24003,0,24004,0,24006,0,0,0,24007,0,0,24008,0,0,0,0,0,0,0,24009,0,0,24010,0,0,
-24011,0,0,24013,24014,0,0,24015,24016,24027,0,24028,24029,0,24030,0,0,0,0,0,
-24033,24034,0,24035,0,0,24036,0,0,24044,0,24048,24049,24063,24067,0,24068,24070,
-0,0,24071,24078,24087,0,24090,0,0,0,24095,0,24098,24101,24104,24106,0,24107,0,0,
-0,24108,0,0,0,0,24110,24111,0,24113,0,0,24115,24120,0,0,0,0,0,0,24124,0,24125,0,
-24126,0,24127,0,0,0,0,0,24135,0,0,24136,0,24137,24142,0,0,0,24146,0,0,24147,
-24149,24154,0,24163,0,0,0,24165,24166,24167,0,0,0,0,0,0,0,0,0,0,24169,24170,
-24175,0,0,0,24178,0,0,24179,0,0,24181,0,24184,24197,0,24201,24204,0,0,0,0,0,0,
-24206,24212,24220,0,0,0,24224,0,0,0,0,0,0,0,0,24226,0,24234,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,24235,0,24236,0,0,0,0,0,24239,24240,24241,0,0,24248,0,0,24249,0,
-24251,0,0,0,0,0,0,24253,0,24268,0,0,0,24269,0,24271,24272,0,0,0,0,24273,0,0,
-24274,0,0,24279,0,0,0,0,0,0,0,24280,0,24293,24294,0,0,0,0,0,0,24296,0,0,24323,0,
-0,0,24329,24330,24331,24339,0,24351,0,0,24369,24370,0,0,0,24371,0,0,0,0,24372,
-24373,24374,0,0,0,0,0,24378,0,0,0,0,24379,0,24381,0,24383,24389,0,24390,0,0,
-24394,24395,24400,0,0,0,24401,24402,0,24406,0,0,0,24411,0,0,0,24415,0,24416,0,0,
-0,0,0,24417,0,24419,0,24422,0,24423,24428,0,24435,0,0,0,24439,0,0,0,24440,24442,
-24446,0,0,0,24447,24448,24449,24452,0,0,0,0,24453,24457,0,0,24458,24459,24460,0,
-24465,0,0,0,0,0,0,0,24470,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,24471,0,24473,
-24474,24475,24476,0,24478,0,0,0,0,24480,0,0,0,0,0,0,0,0,0,0,24481,0,0,0,0,0,0,0,
-0,0,0,24482,24485,0,0,0,0,24486,0,0,0,24488,0,0,0,24494,0,0,0,0,24497,0,0,24498,
-0,0,0,24499,24506,0,0,0,24507,0,0,24511,0,0,24513,24514,0,0,0,0,0,24517,0,24518,
-0,24520,0,24521,24524,24525,0,0,0,0,0,24527,0,0,0,0,0,0,0,0,0,0,0,0,0,0,24528,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,24537,24539,0,24540,0,0,0,24548,0,0,0,0,0,24549,
-24550,0,0,0,24553,24554,0,24555,0,24556,0,24558,0,0,0,0,0,24560,0,0,0,24561,0,0,
-0,0,0,24562,0,0,0,0,0,0,0,0,0,0,0,0,0,24567,0,0,0,0,0,24569,0,0,0,24574,0,24575,
-0,0,0,0,0,0,0,0,0,0,0,24577,24581,0,24584,0,0,0,0,0,24585,0,0,0,0,0,24586,0,0,
-24587,0,24588,0,0,0,0,0,0,0,0,0,0,24590,24591,0,0,0,0,24592,0,0,0,0,0,0,0,24594,
-0,0,0,0,0,0,0,24596,24597,0,0,0,0,24602,24603,0,0,0,0,24604,0,0,24605,0,24610,0,
-0,24611,0,0,0,0,24612,24615,24616,24624,0,0,0,24627,0,24638,24639,0,0,0,0,24640,
-0,0,0,24655,24656,24657,0,0,0,0,0,0,0,0,24662,0,24663,24664,0,0,0,0,0,24665,0,0,
-0,0,24667,0,0,0,0,0,0,24668,24669,0,24670,24674,0,0,0,24675,0,24678,0,0,24679,0,
-0,0,24681,0,24683,0,0,0,0,24684,0,24685,0,0,24686,0,0,24688,24689,0,0,0,0,24690,
-24691,0,0,0,0,0,0,0,24697,0,24698,0,0,0,0,0,0,0,0,24709,0,0,0,0,0,24710,0,24712,
-0,0,0,0,0,0,24713,24714,0,24715,0,24716,24718,0,24719,0,0,0,0,24720,0,0,24725,0,
-0,24738,0,24749,24750,0,0,0,24752,0,0,0,24753,0,0,0,24758,0,0,0,0,0,24762,0,
-24763,0,0,0,0,0,0,0,24764,0,0,0,0,0,24765,24767,24768,0,24772,0,0,0,0,24773,0,0,
-0,0,24777,0,0,0,0,0,24785,0,24786,24788,0,0,0,24789,0,0,0,0,24794,24798,0,24799,
-24800,0,0,0,24803,0,24804,24806,0,24807,0,0,0,24810,0,0,0,0,0,0,24827,24828,0,
-24835,0,0,0,0,0,0,24836,0,0,0,0,0,24839,0,24843,24844,0,0,0,0,0,0,0,0,0,0,24847,
-0,0,24848,0,0,0,0,0,0,24849,0,24850,24851,0,0,0,24852,0,24853,0,0,0,0,0,0,0,0,0,
-24854,0,24855,0,0,24868,0,0,0,24883,0,0,0,24884,0,24895,24897,0,0,0,0,0,24899,0,
-0,0,0,0,24900,0,24913,0,0,0,0,0,0,24914,0,0,24917,24930,24931,0,0,0,24932,0,0,
-24939,0,0,24942,0,0,0,0,0,0,0,0,0,24945,24950,0,24951,0,0,24953,0,0,0,24954,0,
-24959,0,0,0,24961,0,0,24962,0,24964,24968,24970,24972,0,0,0,0,0,24976,0,0,0,
-24977,0,24982,0,0,24983,0,0,24984,0,0,0,24993,0,0,0,24994,0,0,25001,0,0,0,25003,
-0,0,25018,0,0,25023,0,0,0,25034,0,0,25035,25036,0,25037,0,0,0,0,0,0,0,25039,0,0,
-0,0,0,25040,0,0,0,0,0,0,0,25042,0,0,25043,25045,0,0,0,0,0,0,25049,0,0,25051,0,
-25052,25053,0,0,25054,0,0,0,25055,0,0,0,0,25057,25059,0,0,25060,25064,0,25065,
-25069,25070,0,0,0,0,25072,0,25073,0,25090,0,0,25092,25093,25101,0,0,0,0,0,0,
-25105,25108,0,0,25113,0,0,25115,25116,0,0,0,0,0,0,25117,0,0,0,25120,25121,0,0,0,
-0,0,0,0,25125,0,0,0,25126,0,25130,25134,0,25139,0,25143,0,0,0,25151,0,25161,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,25163,0,0,0,0,0,0,0,25174,0,25175,0,25207,0,0,
-0,25209,0,0,0,0,25213,0,25219,0,25223,0,25225,0,0,0,25227,0,0,0,25228,0,0,0,
-25229,0,0,0,0,0,0,0,25231,25233,0,0,0,0,25237,25239,0,0,0,25243,0,0,0,25252,0,
-25257,25258,0,0,0,0,25260,25265,0,25268,0,0,25273,25324,0,25325,0,25326,0,0,0,0,
-0,0,0,0,25327,0,0,0,0,0,25328,0,0,0,0,0,0,25332,0,0,0,25333,0,0,0,25336,25337,
-25338,0,0,25343,0,25350,0,0,0,0,0,0,0,25352,0,25354,0,25375,0,25379,0,0,0,0,
-25384,0,0,0,0,0,0,0,0,0,25386,0,25388,0,25390,0,0,25399,0,0,25401,0,0,0,25402,0,
-0,0,25407,0,0,0,0,0,0,0,0,0,0,0,25413,25415,0,0,25417,0,0,0,0,0,0,0,25419,0,0,0,
-25421,0,0,0,25424,0,0,0,0,25433,0,0,0,0,0,0,0,0,0,25435,0,0,0,0,0,0,25436,0,0,0,
-25437,0,0,25440,0,0,0,0,0,0,25442,0,0,25443,0,25446,0,0,25449,0,0,0,25450,0,0,0,
-0,25452,0,25453,25454,25455,0,0,0,25456,0,25457,0,0,0,25459,0,25461,0,25468,0,0,
-0,0,0,0,0,0,25469,0,0,0,0,0,25471,0,0,0,0,0,25474,0,0,0,0,0,0,0,0,25475,0,0,0,0,
-25477,0,0,0,0,25483,0,0,0,0,0,25484,0,0,0,0,0,0,0,0,0,0,0,0,25485,0,25497,0,0,
-25498,0,25504,0,25510,0,25512,0,0,25513,25514,0,0,0,0,0,0,25517,25518,25519,0,
-25520,0,0,0,0,0,0,0,25521,0,25522,25527,25534,0,25536,0,25537,0,0,25548,25550,0,
-0,25551,0,25552,0,0,0,0,0,25554,0,25555,0,25556,25557,25568,0,0,0,25570,25571,0,
-0,0,0,0,0,25574,0,0,0,0,25579,0,0,0,25581,0,0,0,25582,0,0,0,0,0,0,0,0,0,25588,0,
-0,0,0,25589,0,0,0,0,25590,0,25591,25592,25593,0,25594,0,0,0,25596,0,25597,25615,
-0,0,0,0,0,25618,0,0,0,0,25619,25623,0,0,25629,0,0,25631,0,0,0,25635,25636,0,0,
-25649,0,0,0,0,25654,0,0,0,25661,25663,0,0,25671,0,0,25678,25698,0,25699,25702,
-25703,0,0,0,0,0,0,0,0,25704,0,0,0,0,0,25706,0,0,25710,0,25711,0,25712,0,25715,
-25716,25717,0,0,25718,25728,25732,0,0,0,25734,0,0,0,0,0,0,0,0,0,25737,0,0,25739,
-0,0,0,25740,0,25741,25745,0,25746,0,25748,25772,25778,0,0,0,0,0,25780,0,0,0,0,
-25781,0,25782,25784,25785,0,0,0,25789,0,0,0,0,0,0,25797,25801,0,0,0,25808,25809,
-0,0,25811,25814,25815,0,0,25817,0,0,0,0,0,0,0,0,25820,0,0,0,0,25832,25833,0,0,0,
-25846,0,0,0,25847,25848,0,0,0,0,0,0,0,0,0,25849,25850,0,0,25851,0,0,25852,0,
-25862,0,0,0,25863,25865,0,0,0,0,0,0,0,25867,25868,0,25869,25874,0,25875,0,25876,
-25877,0,0,0,0,25878,25902,0,0,0,0,0,0,0,25903,25904,25905,0,0,0,25908,25909,0,0,
-0,0,25910,0,0,0,0,0,0,0,25912,0,25913,0,0,0,0,0,0,0,0,25914,0,0,25916,0,0,0,0,0,
-25917,25927,0,0,0,0,25928,0,0,25930,0,0,0,25933,0,0,25938,25942,0,0,0,0,0,0,0,
-25945,0,25950,0,25956,0,0,25961,25962,0,0,25963,0,25964,25965,25966,0,0,0,0,0,
-25967,0,0,0,0,25968,0,0,0,25969,25971,0,0,0,0,0,25973,25975,0,0,0,0,0,0,0,25978,
-0,25981,0,0,0,25982,0,0,0,25984,0,0,0,0,0,0,0,25993,0,0,0,0,0,0,0,0,0,0,0,0,0,
-26002,0,0,0,26005,0,0,0,26006,26007,0,0,26014,26015,26016,0,0,0,0,0,0,26017,
-26018,26020,0,26022,26023,0,0,0,26024,26028,0,26029,26033,26034,26044,0,0,0,0,0,
-26046,0,0,26047,0,0,26049,0,26050,0,26051,0,0,0,0,0,26053,0,0,0,0,26054,26059,0,
-0,0,0,0,0,26060,0,26066,0,0,0,0,0,0,0,0,0,0,0,0,26067,0,26069,0,0,26071,0,0,0,
-26073,0,26074,26077,0,0,0,0,26078,0,0,0,26079,0,26090,0,0,26094,0,0,0,0,0,0,0,0,
-26095,0,0,0,0,0,0,0,0,0,0,0,26096,26101,0,26107,26122,0,26124,0,0,26125,0,0,0,0,
-0,0,26136,26141,26155,0,0,0,0,0,0,0,0,0,26164,26166,0,0,0,26167,0,26170,26171,0,
-0,26172,0,0,26174,0,0,0,0,0,0,0,0,0,0,0,0,0,26175,0,0,0,26176,26177,0,26321,
-26322,0,26323,0,0,26324,0,0,0,0,0,0,0,26325,0,26331,0,0,0,0,0,0,26335,0,0,0,
-26350,0,0,0,26379,0,0,26382,26383,26385,0,0,26392,26406,0,0,0,0,26411,0,0,0,0,0,
-26412,0,0,26420,0,0,26423,0,26424,26426,26432,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-26435,0,26436,0,0,0,0,0,26441,0,26444,0,0,0,26446,0,0,0,0,26447,0,0,0,0,26449,0,
-26450,26452,0,26453,26454,0,0,0,26455,0,0,0,26456,0,0,26458,0,0,26460,0,26463,0,
-0,0,0,0,0,0,0,26464,26470,0,0,0,0,0,0,0,0,0,26473,0,0,26474,0,0,0,0,0,0,0,26475,
-0,0,0,0,0,0,0,26477,0,26485,0,0,26486,0,26487,0,0,26488,26493,26494,0,0,26495,0,
-26497,26504,26506,0,0,0,0,0,26507,0,0,0,0,0,26509,0,0,26510,0,0,0,0,0,0,0,0,0,0,
-0,0,0,26512,0,26513,26515,0,0,0,26518,0,0,0,26519,0,26524,26526,0,0,0,26527,0,
-26532,0,26533,26537,26558,0,0,0,26559,0,0,0,26571,0,0,26573,0,26588,0,26593,0,0,
-0,0,0,0,26603,0,26604,0,0,0,0,0,0,0,0,0,0,26606,0,0,0,0,0,0,0,26607,26609,26611,
-26614,0,0,0,26616,26620,0,26621,0,0,0,0,0,26627,0,26629,0,0,26630,0,0,26632,
-26643,0,0,0,26644,0,0,0,0,0,0,0,0,0,26646,26647,0,0,0,26650,0,0,26656,0,0,0,0,
-26663,26670,26671,0,0,0,26685,26686,26687,0,26689,0,0,0,0,26744,0,26745,0,26747,
-26748,0,26749,26750,26751,0,0,0,0,26752,26755,0,0,0,26756,26769,0,0,0,26774,0,0,
-0,0,0,26775,0,26777,26778,0,26786,0,0,0,26787,0,0,0,0,0,0,0,0,0,0,0,0,0,26788,0,
-0,26789,0,0,0,0,0,26791,0,26792,26793,0,0,0,26794,0,26797,26798,0,0,0,26800,0,0,
-26803,0,26804,0,0,0,0,0,0,0,0,0,26805,0,0,26808,0,0,26809,0,0,0,0,0,0,0,26812,0,
-26825,0,0,0,0,0,0,0,26826,0,0,26827,26829,26834,0,0,0,0,26835,0,0,26849,0,26851,
-0,0,0,0,0,0,0,0,0,26852,0,26853,26857,0,26858,0,26859,0,0,0,0,0,0,0,26876,0,
-26878,26882,26883,0,0,0,0,26890,26894,0,0,0,0,26895,26896,0,0,0,0,0,26900,0,0,0,
-0,0,0,0,26911,26913,26914,26915,26916,26919,0,0,0,26921,26922,0,0,26925,0,0,0,
-26928,0,0,26929,26930,0,0,0,26931,0,26932,0,0,0,0,0,26933,0,0,0,0,0,0,26937,0,0,
-26943,0,0,26944,0,0,0,26946,0,0,0,0,0,0,0,26956,0,26958,0,0,26963,0,0,0,0,0,0,0,
-26965,0,26969,26970,26972,0,0,0,0,0,26973,0,26974,0,26978,0,26980,0,0,0,0,0,0,
-26982,0,26986,26987,0,26990,0,0,0,0,27003,27006,0,0,27007,27010,27012,27013,0,0,
-0,0,0,0,0,0,27014,27015,27018,0,27019,0,0,0,0,0,27025,0,0,0,27026,0,0,0,0,27029,
-27030,27031,27034,0,0,27036,27037,0,0,0,27038,27042,0,0,0,27044,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,27045,0,0,0,0,0,0,0,27046,0,0,0,0,0,0,0,27047,27049,0,27050,0,0,0,
-27051,27052,0,27055,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,27056,27058,27059,0,
-27061,0,27064,0,0,0,0,0,27069,0,0,27070,0,0,0,0,0,0,0,27072,0,0,0,0,0,0,0,0,
-27076,0,0,0,0,0,27078,0,27079,0,0,0,27081,0,0,0,0,0,0,27082,0,27083,27086,0,0,0,
-0,27087,0,0,0,0,0,27088,27090,0,27094,0,0,27095,0,27099,27102,0,0,0,27103,0,0,0,
-0,27105,0,0,0,27106,0,0,0,0,0,0,27107,0,0,0,0,27108,27117,0,0,0,0,27118,0,0,
-27124,0,27126,0,0,27130,27131,0,0,0,0,0,0,27147,0,0,0,0,27148,27149,0,0,0,0,
-27150,27151,0,27152,0,27159,0,0,0,27164,0,0,0,0,0,0,0,27175,0,27189,0,0,27191,0,
-27193,0,27195,0,27198,0,0,0,0,0,27200,0,0,0,0,27202,0,0,0,0,27203,0,0,27204,0,0,
-27206,0,27207,0,0,0,0,27209,0,0,0,27213,0,0,27216,27219,27220,27222,27223,0,
-27224,0,27225,27226,0,0,27233,0,0,0,0,27235,0,27237,0,27238,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,27239,0,27242,27243,0,27250,0,0,0,27251,0,27253,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,27254,27255,27258,0,0,0,27259,0,0,0,0,0,0,27267,0,27276,27278,
-0,0,0,0,0,0,0,0,0,27296,27297,27301,0,0,0,0,0,0,27302,0,0,0,0,0,0,27312,27313,0,
-0,0,0,0,27318,0,27320,0,27329,0,27330,27331,0,27332,0,0,0,0,27340,0,0,0,27348,0,
-0,0,0,0,0,27350,0,27351,0,0,0,0,27355,0,0,27358,27359,27361,0,0,0,27365,0,27367,
-0,27376,27378,0,0,27379,0,0,0,0,0,0,27396,0,27397,27404,0,0,0,0,0,27408,0,0,0,0,
-27453,0,0,0,27456,0,0,0,27458,0,0,0,0,0,0,0,27459,0,0,0,27460,0,0,27461,0,27465,
-27467,0,0,27469,0,27470,0,27471,0,27477,27482,0,0,0,0,0,0,27484,0,0,0,0,0,0,
-27485,0,0,0,0,0,27493,0,27494,27502,0,0,0,0,0,0,0,0,0,0,0,0,27511,27532,0,0,0,
-27533,27545,0,0,0,27546,0,0,0,0,0,0,0,0,0,0,27547,0,0,27549,27550,0,27551,0,0,0,
-0,0,0,0,27555,0,0,27571,0,27573,27574,27575,27577,0,27578,0,0,27579,27585,0,0,0,
-0,0,27586,0,0,27588,27589,0,0,0,0,27596,0,0,27600,0,0,0,0,0,0,0,0,0,0,0,27608,0,
-0,0,0,0,0,0,0,0,0,0,27610,0,0,0,27618,0,0,27620,0,0,0,27631,0,0,27632,27634,0,
-27636,27638,0,0,0,27643,0,27644,27649,0,0,0,0,0,0,0,0,0,0,0,0,0,27651,27660,0,
-27661,0,0,0,0,0,0,0,27662,0,0,27664,0,27665,0,0,0,27669,0,27671,0,0,0,27673,
-27674,0,0,0,27682,0,0,0,27711,0,27712,27713,27719,27720,0,0,27728,0,27729,0,0,0,
-0,0,0,0,0,0,27731,0,0,27732,0,27733,0,27738,0,0,0,27742,0,0,0,27743,27744,0,0,0,
-0,0,0,27745,27746,0,0,0,27747,27748,27751,27752,0,0,0,27768,27770,0,0,0,27774,
-27775,0,27776,27777,0,0,27781,0,27784,0,27786,0,0,27791,0,27792,27793,27804,0,
-27812,27813,0,0,0,0,0,0,0,0,27814,0,27825,0,27827,0,0,0,0,27828,27861,27862,0,0,
-0,27864,0,0,0,27865,27884,0,27889,0,0,0,0,0,27890,0,27891,0,0,0,27892,0,0,0,0,0,
-27897,27898,0,0,27899,0,0,0,27901,27905,0,0,27920,0,0,27921,0,27922,0,0,0,27931,
-27934,0,0,0,0,0,0,0,0,0,0,27941,0,27942,0,27945,0,27947,27954,0,0,0,0,27960,
-27963,0,0,0,0,0,0,0,0,27964,27965,0,0,0,27967,0,27969,27975,0,27976,27977,0,
-27981,0,27983,28051,28052,0,0,0,0,0,28056,0,0,0,0,0,0,28058,28059,0,0,28061,0,0,
-0,0,0,0,0,28063,0,0,0,0,0,0,28066,0,0,0,0,0,0,28069,28070,28072,0,28073,0,0,
-28074,0,0,0,0,28075,0,0,0,0,0,0,0,28078,0,0,0,0,28085,0,0,0,0,28086,0,0,0,0,0,0,
-28088,0,0,0,0,0,0,0,0,28090,0,28097,28114,28115,0,0,0,0,0,0,0,28116,0,0,0,0,0,
-28118,0,28129,0,28131,0,0,28135,0,0,0,28140,28141,0,0,0,28146,0,0,0,0,28152,0,0,
-0,0,28155,28157,28161,0,0,0,0,28166,0,28167,0,0,0,0,0,0,0,0,0,0,0,28172,0,0,0,0,
-0,0,28173,0,0,28175,0,0,0,0,0,0,0,0,0,28178,28188,0,28190,0,0,0,0,0,28191,0,
-28193,28206,0,0,28207,28209,0,28211,0,28213,0,0,0,28215,28216,28217,0,28222,0,
-28223,28225,0,0,0,28226,0,28227,28229,28232,0,0,0,0,0,0,0,0,0,28235,0,28241,0,0,
-28242,0,0,0,0,28243,0,0,0,28245,0,0,0,28248,28250,0,28251,28252,0,0,0,0,0,0,
-28253,0,0,28254,28255,0,0,28256,0,0,28258,0,0,0,0,0,28259,0,0,28260,0,0,28261,0,
-0,0,0,28262,28263,0,0,28264,0,0,0,28266,0,28268,28269,0,28270,28272,28274,0,
-28277,28278,0,0,0,28279,0,28280,28281,28283,0,28292,0,28294,0,28297,0,0,0,0,
-28299,0,0,0,0,0,28300,0,0,0,0,0,0,0,28301,0,0,0,0,0,0,0,0,0,0,0,0,0,28302,28303,
-0,0,0,0,28304,0,0,28305,0,28312,0,28313,28314,0,0,0,0,0,0,28315,0,0,0,28320,
-28321,0,0,28328,0,0,0,28329,28338,0,28339,0,0,28344,0,0,0,0,0,0,0,0,28347,0,0,0,
-0,0,0,0,0,28348,0,0,0,0,0,28411,0,28412,28413,0,28416,0,0,0,28420,0,0,0,0,0,
-28421,0,0,0,0,28423,0,0,0,28424,0,0,28428,0,0,0,0,0,28429,0,0,0,28431,28434,0,
-28458,0,0,0,0,0,0,0,0,0,0,0,28464,0,0,0,0,28465,0,28467,0,0,0,0,0,0,28471,0,0,0,
-0,28474,0,28480,0,28481,0,0,28485,0,0,0,0,28486,28488,0,0,28489,0,0,0,0,28492,0,
-0,0,28495,0,28497,0,28499,0,0,0,0,28500,0,0,28502,28503,0,0,0,28508,0,0,0,28510,
-0,0,28512,28513,28514,28521,0,28526,0,28527,28528,0,0,0,0,28529,0,0,28532,0,0,
-28537,28538,0,0,0,28539,0,28548,0,28553,28554,0,0,0,0,0,0,0,0,0,0,0,0,28560,
-28563,0,0,28564,0,0,0,0,28565,0,0,0,0,0,0,0,28566,28568,0,0,0,0,0,0,28569,0,0,0,
-28570,0,28572,28573,0,0,0,0,28575,0,0,0,0,28576,28581,28588,0,0,28589,0,0,0,
-28590,28595,0,28598,0,0,28601,0,0,28605,0,0,0,0,28614,28615,28619,0,0,0,0,0,0,
-28620,0,28626,0,0,28628,0,28631,0,28632,0,0,0,0,0,0,28635,0,0,0,28637,28638,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,28639,0,28643,0,0,28652,0,0,0,28662,0,
-28670,28671,0,0,0,0,0,0,0,0,0,28672,28673,28675,28676,0,0,0,0,0,0,0,28691,0,0,0,
-28695,0,0,0,28696,0,28697,28698,0,28705,0,28707,28708,28710,0,0,0,0,0,0,0,28711,
-28728,0,0,0,28736,0,0,0,28737,0,0,0,0,0,0,0,0,0,28738,0,28739,0,28741,0,0,28742,
-0,0,0,0,0,0,0,0,0,0,0,28745,0,0,0,0,0,0,28749,28750,28752,28754,28756,0,28757,0,
-0,0,0,28759,28760,0,0,0,0,0,0,28762,0,0,0,28764,0,0,0,0,0,0,28766,0,28767,28768,
-0,0,0,0,28769,28770,0,0,0,0,0,0,0,0,0,0,0,0,0,28771,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,28772,0,28773,0,28782,0,0,0,0,0,0,28784,0,28785,0,28786,0,0,0,28787,0,0,0,
-28797,0,0,0,0,0,0,28799,0,0,28801,0,0,0,0,28802,0,28805,0,0,28806,0,0,28807,0,0,
-0,0,0,0,0,28808,0,0,0,0,0,28810,28812,0,0,28816,28819,0,0,28821,0,28826,0,0,0,
-28842,28852,0,0,28853,0,28854,28855,0,0,0,28857,0,0,0,28858,0,28867,28868,28869,
-0,0,0,28874,28880,28882,28890,28892,0,0,0,0,0,0,0,28895,0,0,0,28898,28899,0,0,0,
-28900,0,0,28904,0,28906,0,0,0,0,28907,0,0,0,0,0,0,28908,0,0,0,28910,0,28914,0,0,
-0,0,0,0,0,28915,28916,28919,0,0,28920,0,28921,0,0,0,0,0,0,0,0,28924,0,0,0,0,
-28926,28929,0,0,0,28930,0,28936,0,28939,0,0,0,0,28942,0,0,0,0,0,0,28956,0,0,0,
-28966,0,0,0,0,28967,0,0,0,0,0,0,0,0,0,28968,0,28971,0,28975,28976,0,28982,28983,
-0,0,28984,28989,28996,28997,28998,0,0,0,0,0,0,28999,0,0,0,0,0,29000,0,29001,0,0,
-0,29009,0,0,29011,0,0,29021,0,0,0,0,29024,0,29025,0,0,0,0,0,29026,0,0,0,29036,0,
-0,0,29037,0,0,0,0,29038,0,29045,0,29047,0,0,0,0,0,0,0,0,0,29051,0,0,0,29054,
-29056,29062,0,29070,29082,0,0,0,29083,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,29084,0,0,
-0,0,29085,29088,0,0,0,0,0,0,0,29090,29097,0,0,0,29103,0,0,0,0,0,0,0,0,29105,0,0,
-0,0,0,29107,0,29109,0,0,0,29115,0,0,29120,0,0,29138,29140,0,0,0,0,0,0,0,0,0,
-29152,0,29160,29174,0,29176,0,0,29180,0,29181,0,0,0,0,0,0,0,0,29228,0,0,29229,0,
-0,29230,0,0,0,0,0,0,0,0,0,0,29234,0,0,0,29241,0,29245,0,29248,0,29250,29256,
-29280,0,29282,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,29285,0,0,29286,29291,29292,0,0,0,0,
-29294,0,29295,0,0,0,0,0,29296,29297,29298,29300,0,29302,0,0,29304,29307,0,29312,
-0,0,0,29322,0,0,29323,0,0,29324,29326,29328,0,29335,0,0,0,0,0,0,0,29338,29339,0,
-0,0,0,0,29341,29343,0,0,0,0,29344,0,0,0,0,0,29345,0,0,0,0,29346,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,29347,29348,29349,0,0,29354,0,0,29355,0,0,0,0,0,0,0,0,29357,0,0,
-0,0,29364,0,29365,0,0,0,0,0,0,0,29366,0,0,29368,0,0,0,0,0,0,0,0,29378,0,29381,0,
-0,0,0,0,0,0,0,29386,0,0,0,0,0,0,29389,0,0,0,29390,0,0,29391,29397,0,29398,29412,
-29414,29418,29419,0,0,0,0,0,0,0,29420,0,0,0,0,0,0,0,29423,0,0,0,29435,0,0,0,
-29437,0,0,29439,0,29441,0,0,0,0,29443,0,29446,29450,29452,0,0,0,0,0,29456,0,0,0,
-0,0,29461,0,0,0,29464,0,0,0,0,0,0,0,0,29468,0,29473,0,0,0,29486,0,0,0,29490,0,0,
-0,29491,29492,0,0,29497,0,0,0,29498,0,29499,0,29502,29505,0,29509,0,0,0,29510,0,
-0,0,29512,0,0,0,29516,0,0,0,0,0,0,0,0,29518,0,29519,0,0,0,0,0,29520,29521,29529,
-0,0,0,0,0,0,0,0,29530,0,0,29531,29538,0,29540,0,0,0,29542,0,29543,29544,29547,0,
-0,29548,0,0,0,29549,0,0,0,29550,0,0,29552,0,0,0,0,29558,29561,0,29562,29564,0,0,
-29565,0,0,29566,0,0,0,0,0,0,0,0,0,0,29578,29584,29586,29591,0,0,0,0,29593,29594,
-0,0,29597,0,0,29613,0,29614,0,29615,0,0,0,0,29616,29617,0,0,29625,0,0,0,29632,0,
-0,0,0,0,0,0,29633,0,0,0,0,0,29634,29635,29637,0,29638,0,29641,29643,0,0,0,0,0,0,
-29644,0,29645,0,29649,0,0,0,29650,0,29653,0,0,0,0,0,0,0,0,0,0,0,0,0,0,29656,
-29659,0,0,29660,0,0,0,29661,0,0,0,0,0,29664,0,0,0,29671,29673,0,0,0,0,0,0,0,
-29675,0,29677,29679,0,0,29684,0,0,0,0,0,29685,0,0,0,29687,0,0,0,29688,0,29689,
-29690,29700,0,29701,0,0,0,29702,0,29706,0,0,0,0,0,0,0,29720,0,29721,0,29727,0,
-29733,29734,0,29750,29761,0,29763,0,0,0,0,0,29764,0,0,29765,0,0,0,29771,0,0,0,0,
-0,0,0,0,0,0,0,0,29772,0,0,0,29773,29774,29775,0,0,0,0,0,0,0,0,0,0,0,29822,0,0,0,
-29824,0,29825,0,0,0,0,0,29827,0,0,0,0,0,0,0,0,29829,0,29832,29834,0,0,29835,0,0,
-29837,29838,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,29843,0,0,0,0,29844,29845,0,0,0,
-0,0,0,0,0,0,29849,0,0,29869,29872,29890,29905,0,0,0,0,0,29907,29921,0,29922,0,0,
-29923,29926,29944,29946,0,0,0,0,0,0,0,29947,29948,0,0,0,29951,0,0,0,0,0,29953,0,
-0,29956,0,29957,0,0,29962,0,0,0,0,29971,0,0,0,29972,0,0,0,0,0,29978,0,29979,
-29992,30007,30008,30010,0,0,0,30013,0,0,0,0,30014,30016,0,0,0,0,0,0,0,0,0,0,0,
-30017,0,0,0,0,0,30023,30031,0,0,30033,0,0,0,0,0,0,0,0,0,0,30034,0,30038,0,30039,
-0,30040,0,0,0,0,0,0,30067,30068,0,0,0,30069,0,30072,0,0,0,30073,0,0,0,0,30075,0,
-0,0,0,0,0,30079,0,0,30080,0,0,0,0,0,30082,0,0,0,0,0,0,0,0,0,0,0,30084,30090,0,0,
-30091,0,0,0,0,30098,30118,0,30119,0,30121,30130,0,0,0,0,0,0,0,0,0,0,0,0,0,30131,
-30132,30133,0,0,0,0,0,0,30135,0,0,0,0,0,0,0,0,0,0,0,30136,0,0,30137,30138,0,0,0,
-30139,30146,0,0,0,0,0,30147,0,0,30148,30151,0,0,0,30168,0,30172,30173,0,0,0,0,0,
-0,0,0,30180,30181,0,30192,0,0,0,0,0,0,0,30194,30196,0,0,30199,0,0,30202,0,0,0,0,
-30203,0,0,0,0,0,0,0,0,0,0,30213,0,0,0,30216,0,0,30217,0,0,0,30218,0,0,0,0,30219,
-0,30220,0,30222,30227,0,0,0,0,0,30231,0,0,30233,30235,0,0,0,0,30238,0,30240,
-30243,30245,0,30250,30252,0,0,0,30269,0,0,30271,30272,0,0,0,30278,30280,0,0,
-30282,0,30284,0,30294,0,0,0,0,30295,30296,0,0,0,0,0,30298,30299,30302,30304,
-30306,0,0,0,0,0,0,30316,30317,0,0,0,30318,0,0,0,30319,0,30320,30322,30326,0,0,0,
-0,0,30327,0,30332,30348,30349,0,0,30356,0,0,0,0,0,0,0,0,30357,0,30358,0,30359,
-30360,0,0,30365,30366,30378,0,0,0,0,30379,0,0,30381,0,30385,0,30388,30397,0,0,0,
-30401,0,0,0,0,30403,0,0,0,0,0,30404,0,0,30405,0,30406,30408,0,30409,0,30410,0,0,
-0,30417,0,0,30418,30419,0,30420,0,30424,0,0,0,30427,30430,30432,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,30433,0,0,0,0,0,0,0,30436,0,30437,30438,0,30441,30442,0,0,
-0,30445,0,0,0,0,30452,30456,30457,0,0,0,30458,0,30464,0,0,0,0,0,0,30467,0,30469,
-0,0,0,0,0,30477,0,0,30484,0,0,0,0,0,30485,0,0,0,0,0,30486,30487,30497,30498,0,0,
-0,0,0,0,0,0,0,0,30505,0,30508,0,0,0,30509,30510,0,30514,30516,0,0,0,0,0,0,0,0,0,
-0,0,30523,0,30524,0,30525,0,0,0,0,30537,0,0,30538,0,0,0,0,0,30553,0,0,30555,
-30556,30558,30559,30560,0,0,30561,0,30562,0,0,0,0,0,0,0,0,30563,30570,30571,0,
-30586,30587,0,0,30590,0,0,30594,0,0,0,0,30611,30612,30623,30634,0,0,30636,30640,
-30655,30656,0,30657,0,0,30658,30669,0,30670,0,30676,30678,0,0,0,0,0,0,0,30679,0,
-0,0,0,0,0,0,0,0,0,0,30695,0,0,30698,0,0,0,0,30700,0,0,0,0,30701,0,30702,30703,0,
-0,0,0,30707,0,0,0,30709,0,0,30710,30719,30729,0,0,0,0,0,0,0,0,0,30731,0,0,30733,
-0,0,0,30734,0,0,0,0,0,30736,30737,0,0,0,30740,0,0,0,30743,0,30746,0,30747,30748,
-0,0,30751,30752,30753,0,0,0,30754,0,0,30760,0,0,0,0,0,0,0,30763,0,30764,0,0,
-30766,0,30769,30770,30771,30774,30777,0,0,30779,30780,30781,0,0,0,0,30790,0,0,0,
-30792,0,0,0,0,30810,0,0,0,0,0,0,0,30812,30819,0,0,30823,30824,0,30825,0,30827,0,
-0,0,0,0,0,30828,0,0,30830,0,0,0,30834,0,30835,0,30837,30838,0,30845,0,0,0,0,0,
-30846,30847,0,0,30849,0,30851,0,0,0,0,0,30852,30858,0,0,30859,0,30865,0,0,30866,
-0,0,30868,0,0,30869,0,0,0,30881,30883,0,0,0,0,0,30889,0,30891,0,0,0,0,30894,0,
-30895,0,30897,0,30898,0,0,0,30904,30906,0,30909,0,0,0,0,0,0,30910,0,0,0,30915,
-30933,30942,0,0,0,0,30943,0,0,30945,0,0,0,0,0,0,30946,0,0,30947,0,0,30955,30956,
-0,0,30960,0,0,30961,30962,30966,0,0,30969,30974,0,0,0,30976,0,0,30977,0,30978,
-30982,0,0,0,0,0,0,0,30994,30995,30998,0,31000,0,0,31001,0,0,31003,31005,0,0,
-31006,31011,0,0,31014,0,31016,0,0,0,0,31018,0,0,31020,31023,31024,31025,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,31027,31028,31029,0,0,0,0,0,0,31032,0,0,0,0,0,0,0,0,0,0,0,
-31036,31037,31038,0,0,0,31041,31043,31045,0,31047,0,0,0,31048,0,31049,0,0,0,
-31053,31054,31055,0,0,31063,0,0,0,0,0,31066,0,31068,31071,0,0,0,31072,31073,0,0,
-0,0,31075,0,0,31076,0,0,0,31077,31079,0,31080,0,0,0,0,0,0,0,0,0,0,31087,0,31142,
-0,31144,0,0,31145,31146,31147,0,0,0,0,0,0,0,0,0,0,0,0,0,0,31149,0,31151,31152,0,
-0,0,0,0,0,0,31162,31171,31174,31175,0,0,0,31176,0,0,0,0,0,0,0,31179,0,0,0,31186,
-0,0,0,31192,31195,0,0,31196,0,0,0,0,0,0,0,0,31198,0,0,0,0,0,31199,0,0,0,31205,0,
-0,0,0,31211,31215,0,0,0,0,31231,0,31232,0,0,0,0,0,0,0,0,0,0,31233,31236,31253,0,
-31254,0,0,0,0,0,0,31255,0,0,31257,0,0,0,0,0,0,0,0,0,31258,31259,0,0,31260,0,
-31261,0,0,0,0,0,31262,31263,0,0,31264,0,31266,0,31267,0,0,0,0,0,31281,0,31282,0,
-31284,0,0,31285,31287,31288,0,0,31290,0,0,0,31292,31295,0,31299,0,31300,0,0,0,0,
-0,31302,0,0,0,0,31303,0,0,0,0,0,0,31304,0,0,0,0,0,31305,31308,31309,31315,0,
-31317,0,0,0,0,0,31323,0,31324,0,0,0,0,0,31325,31327,0,0,31331,0,0,0,0,0,31333,0,
-0,0,0,0,31336,0,0,31337,0,0,0,0,0,0,31338,0,0,0,0,0,0,0,0,0,0,0,0,31339,0,0,0,0,
-0,0,0,31342,0,0,0,0,31345,0,0,0,0,0,0,0,0,31347,0,0,0,0,0,0,31348,0,0,31350,
-31351,0,31352,0,0,31354,0,0,0,0,31355,0,0,31356,0,0,0,0,0,0,0,0,0,0,31363,0,
-31372,0,0,31373,0,0,0,0,0,0,0,0,0,31376,0,31388,0,31389,0,31392,0,31401,0,31405,
-31407,31408,0,31409,0,0,0,0,0,0,31413,31415,0,0,0,31416,31418,0,0,0,0,0,0,31422,
-31423,0,0,31424,0,31425,31432,0,0,0,0,0,0,0,0,0,31433,0,0,0,0,0,0,0,0,31434,0,0,
-0,0,0,0,31435,0,0,0,0,31438,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,31442,0,31444,0,
-31448,0,0,31451,0,0,0,0,31452,0,31461,31465,0,0,31466,0,0,31467,0,0,31468,0,0,0,
-31469,31473,0,31476,0,0,0,0,31489,31490,0,0,0,0,0,0,0,31492,31493,31494,0,0,0,0,
-31501,31504,31505,0,0,0,0,0,0,0,0,0,31509,0,0,0,0,31510,0,0,31511,0,0,31513,0,0,
-0,0,0,0,0,0,0,31514,0,31522,31536,31539,31540,0,31541,0,0,0,0,0,0,31546,31553,
-31559,0,0,0,31560,31561,31562,0,0,31564,31567,0,31569,0,0,0,31570,0,0,0,0,31571,
-0,0,0,0,0,0,31572,31574,31580,31581,0,0,31582,31584,31585,31586,31595,0,31596,0,
-0,0,0,31597,0,31599,0,31600,31601,0,0,31603,31604,0,0,31608,31610,0,0,0,31611,0,
-31615,0,0,0,0,31616,0,0,0,0,0,0,31617,0,0,0,0,0,31618,0,0,0,0,0,0,31621,0,0,0,0,
-0,0,0,0,0,31622,31625,0,0,0,0,31627,0,31641,0,0,31642,0,0,31643,0,0,0,0,0,0,0,0,
-0,31644,0,31646,0,0,0,0,31648,0,0,0,31652,0,0,0,31657,0,0,31676,0,0,0,0,0,0,0,
-31689,31691,31692,0,31694,0,0,0,31696,0,31702,0,31703,0};
-
-static const DictWord kStaticDictionaryWords[31705] = {
-{0,0,0},{8,0,1002},{136,0,1015},{4,0,683},{4,10,325},{138,10,125},{7,11,572},{9,
-11,592},{11,11,680},{11,11,842},{11,11,924},{12,11,356},{12,11,550},{13,11,317},
-{13,11,370},{13,11,469},{13,11,471},{14,11,397},{18,11,69},{146,11,145},{134,0,
-1265},{136,11,534},{134,0,1431},{11,0,138},{140,0,40},{4,0,155},{7,0,1689},{4,10
-,718},{135,10,1216},{4,0,245},{5,0,151},{5,0,741},{6,0,1147},{7,0,498},{7,0,870}
-,{7,0,1542},{12,0,213},{14,0,36},{14,0,391},{17,0,111},{18,0,6},{18,0,46},{18,0,
-151},{19,0,36},{20,0,32},{20,0,56},{20,0,69},{20,0,102},{21,0,4},{22,0,8},{22,0,
-10},{22,0,14},{150,0,31},{4,0,624},{135,0,1752},{5,10,124},{5,10,144},{6,10,548}
-,{7,10,15},{7,10,153},{137,10,629},{6,0,503},{9,0,586},{13,0,468},{14,0,66},{16,
-0,58},{7,10,1531},{8,10,416},{9,10,275},{10,10,100},{11,10,658},{11,10,979},{12,
-10,86},{14,10,207},{15,10,20},{143,10,25},{5,0,603},{7,0,1212},{9,0,565},{14,0,
-301},{5,10,915},{6,10,1783},{7,10,211},{7,10,1353},{9,10,83},{10,10,376},{10,10,
-431},{11,10,543},{12,10,664},{13,10,280},{13,10,428},{14,10,128},{17,10,52},{145
-,10,81},{4,0,492},{133,0,451},{135,0,835},{141,0,70},{132,0,539},{7,11,748},{139
-,11,700},{7,11,1517},{11,11,597},{14,11,76},{14,11,335},{148,11,33},{6,0,113},{
-135,0,436},{4,10,338},{133,10,400},{136,0,718},{133,11,127},{133,11,418},{6,0,
-1505},{7,0,520},{6,11,198},{11,10,892},{140,11,83},{4,10,221},{5,10,659},{5,10,
-989},{7,10,697},{7,10,1211},{138,10,284},{135,0,1070},{5,11,276},{6,11,55},{135,
-11,1369},{134,0,1515},{6,11,1752},{136,11,726},{138,10,507},{15,0,78},{4,10,188}
-,{135,10,805},{5,10,884},{139,10,991},{133,11,764},{134,10,1653},{6,11,309},{7,
-11,331},{138,11,550},{135,11,1861},{132,11,348},{135,11,986},{135,11,1573},{12,0
-,610},{13,0,431},{144,0,59},{9,11,799},{140,10,166},{134,0,1530},{132,0,750},{
-132,0,307},{133,0,964},{6,11,194},{7,11,133},{10,11,493},{10,11,570},{139,11,664
-},{5,11,24},{5,11,569},{6,11,3},{6,11,119},{6,11,143},{6,11,440},{7,11,295},{7,
-11,599},{7,11,1686},{7,11,1854},{8,11,424},{9,11,43},{9,11,584},{9,11,760},{10,
-11,148},{10,11,328},{11,11,159},{11,11,253},{11,11,506},{12,11,487},{12,11,531},
-{144,11,33},{136,10,760},{5,11,14},{5,11,892},{6,11,283},{7,11,234},{136,11,537}
-,{135,11,1251},{4,11,126},{8,11,635},{147,11,34},{4,11,316},{135,11,1561},{6,0,
-999},{6,0,1310},{137,11,861},{4,11,64},{5,11,352},{5,11,720},{6,11,368},{139,11,
-359},{4,0,75},{5,0,180},{6,0,500},{7,0,58},{7,0,710},{10,0,645},{136,10,770},{
-133,0,649},{6,0,276},{7,0,282},{7,0,879},{7,0,924},{8,0,459},{9,0,599},{9,0,754}
-,{11,0,574},{12,0,128},{12,0,494},{13,0,52},{13,0,301},{15,0,30},{143,0,132},{
-132,0,200},{4,10,89},{5,10,489},{6,10,315},{7,10,553},{7,10,1745},{138,10,243},{
-135,11,1050},{7,0,1621},{6,10,1658},{9,10,3},{10,10,154},{11,10,641},{13,10,85},
-{13,10,201},{141,10,346},{6,11,175},{137,11,289},{5,11,432},{133,11,913},{6,0,
-225},{137,0,211},{7,0,718},{8,0,687},{139,0,374},{4,10,166},{133,10,505},{9,0,
-110},{134,10,1670},{8,0,58},{9,0,724},{11,0,809},{13,0,113},{145,0,72},{6,0,345}
-,{7,0,1247},{144,11,82},{5,11,931},{134,11,1698},{8,0,767},{8,0,803},{9,0,301},{
-137,0,903},{139,0,203},{134,0,1154},{7,0,1949},{136,0,674},{134,0,259},{135,0,
-1275},{5,11,774},{6,11,1637},{6,11,1686},{134,11,1751},{134,0,1231},{7,10,445},{
-8,10,307},{8,10,704},{10,10,41},{10,10,439},{11,10,237},{11,10,622},{140,10,201}
-,{136,0,254},{6,11,260},{135,11,1484},{139,0,277},{135,10,1977},{4,10,189},{5,10
-,713},{6,11,573},{136,10,57},{138,10,371},{132,10,552},{134,11,344},{133,0,248},
-{9,0,800},{10,0,693},{11,0,482},{11,0,734},{11,0,789},{134,11,240},{4,0,116},{5,
-0,95},{5,0,445},{7,0,1688},{8,0,29},{9,0,272},{11,0,509},{11,0,915},{4,11,292},{
-4,11,736},{5,11,871},{6,11,171},{6,11,1689},{7,11,1324},{7,11,1944},{9,11,415},{
-9,11,580},{14,11,230},{146,11,68},{7,0,490},{13,0,100},{143,0,75},{135,0,1641},{
-133,0,543},{7,11,209},{8,11,661},{10,11,42},{11,11,58},{12,11,58},{12,11,118},{
-141,11,32},{5,0,181},{8,0,41},{6,11,63},{135,11,920},{133,0,657},{133,11,793},{
-138,0,709},{7,0,25},{8,0,202},{138,0,536},{5,11,665},{135,10,1788},{145,10,49},{
-9,0,423},{140,0,89},{5,11,67},{6,11,62},{6,11,374},{135,11,1391},{8,0,113},{9,0,
-877},{10,0,554},{11,0,83},{12,0,136},{19,0,109},{9,11,790},{140,11,47},{138,10,
-661},{4,0,963},{10,0,927},{14,0,442},{135,10,1945},{133,0,976},{132,0,206},{4,11
-,391},{135,11,1169},{134,0,2002},{6,0,696},{134,0,1008},{134,0,1170},{132,11,271
-},{7,0,13},{8,0,226},{10,0,537},{11,0,570},{11,0,605},{11,0,799},{11,0,804},{12,
-0,85},{12,0,516},{12,0,623},{13,0,112},{13,0,361},{14,0,77},{14,0,78},{17,0,28},
-{19,0,110},{140,11,314},{132,0,769},{134,0,1544},{4,0,551},{137,0,678},{5,10,84}
-,{134,10,163},{9,0,57},{9,0,459},{10,0,425},{11,0,119},{12,0,184},{12,0,371},{13
-,0,358},{145,0,51},{5,0,188},{5,0,814},{8,0,10},{9,0,421},{9,0,729},{10,0,609},{
-11,0,689},{4,11,253},{5,10,410},{5,11,544},{7,11,300},{137,11,340},{134,0,624},{
-138,11,321},{135,0,1941},{18,0,130},{5,10,322},{8,10,186},{9,10,262},{10,10,187}
-,{142,10,208},{5,11,53},{5,11,541},{6,11,94},{6,11,499},{7,11,230},{139,11,321},
-{133,10,227},{4,0,378},{4,11,920},{5,11,25},{5,11,790},{6,11,457},{135,11,853},{
-137,0,269},{132,0,528},{134,0,1146},{7,10,1395},{8,10,486},{9,10,236},{9,10,878}
-,{10,10,218},{11,10,95},{19,10,17},{147,10,31},{7,10,2043},{8,10,672},{141,10,
-448},{134,0,1105},{134,0,1616},{134,11,1765},{140,11,163},{5,10,412},{133,11,822
-},{132,11,634},{6,0,656},{134,11,1730},{134,0,1940},{5,0,104},{6,0,173},{135,0,
-1631},{136,10,562},{6,11,36},{7,11,658},{8,11,454},{147,11,86},{5,0,457},{134,10
-,1771},{7,0,810},{8,0,138},{8,0,342},{9,0,84},{10,0,193},{11,0,883},{140,0,359},
-{9,0,620},{135,10,1190},{137,10,132},{7,11,975},{137,11,789},{6,0,95},{6,0,1934}
-,{136,0,967},{141,11,335},{6,0,406},{10,0,409},{10,0,447},{11,0,44},{140,0,100},
-{4,10,317},{135,10,1279},{132,0,477},{134,0,1268},{6,0,1941},{8,0,944},{5,10,63}
-,{133,10,509},{132,0,629},{132,11,104},{4,0,246},{133,0,375},{6,0,1636},{132,10,
-288},{135,11,1614},{9,0,49},{10,0,774},{8,10,89},{8,10,620},{11,10,628},{12,10,
-322},{143,10,124},{4,0,282},{7,0,1034},{11,0,398},{11,0,634},{12,0,1},{12,0,79},
-{12,0,544},{14,0,237},{17,0,10},{146,0,20},{132,0,824},{7,11,45},{9,11,542},{9,
-11,566},{138,11,728},{5,0,118},{5,0,499},{6,0,476},{6,0,665},{6,0,1176},{6,0,
-1196},{7,0,600},{7,0,888},{135,0,1096},{7,0,296},{7,0,596},{8,0,560},{8,0,586},{
-9,0,612},{11,0,304},{12,0,46},{13,0,89},{14,0,112},{145,0,122},{5,0,894},{6,0,
-1772},{9,0,1009},{138,10,120},{5,11,533},{7,11,755},{138,11,780},{151,10,1},{6,0
-,1474},{7,11,87},{142,11,288},{139,0,366},{137,10,461},{7,11,988},{7,11,1939},{9
-,11,64},{9,11,502},{12,11,7},{12,11,34},{13,11,12},{13,11,234},{147,11,77},{7,0,
-1599},{7,0,1723},{8,0,79},{8,0,106},{8,0,190},{8,0,302},{8,0,383},{8,0,713},{9,0
-,119},{9,0,233},{9,0,419},{9,0,471},{10,0,181},{10,0,406},{11,0,57},{11,0,85},{
-11,0,120},{11,0,177},{11,0,296},{11,0,382},{11,0,454},{11,0,758},{11,0,999},{12,
-0,27},{12,0,98},{12,0,131},{12,0,245},{12,0,312},{12,0,446},{12,0,454},{13,0,25}
-,{13,0,98},{13,0,426},{13,0,508},{14,0,70},{14,0,163},{14,0,272},{14,0,277},{14,
-0,370},{15,0,95},{15,0,138},{15,0,167},{17,0,38},{148,0,96},{135,10,1346},{10,0,
-200},{19,0,2},{151,0,22},{135,11,141},{134,10,85},{134,0,1759},{138,0,372},{145,
-0,16},{8,0,943},{132,11,619},{139,11,88},{5,11,246},{8,11,189},{9,11,355},{9,11,
-512},{10,11,124},{10,11,453},{11,11,143},{11,11,416},{11,11,859},{141,11,341},{5
-,0,258},{134,0,719},{6,0,1798},{6,0,1839},{8,0,900},{10,0,874},{10,0,886},{12,0,
-698},{12,0,732},{12,0,770},{16,0,106},{18,0,163},{18,0,170},{18,0,171},{152,0,20
-},{9,0,707},{11,0,326},{11,0,339},{12,0,423},{12,0,502},{20,0,62},{9,11,707},{11
-,11,326},{11,11,339},{12,11,423},{12,11,502},{148,11,62},{5,0,30},{7,0,495},{8,0
-,134},{9,0,788},{140,0,438},{133,11,678},{5,10,279},{6,10,235},{7,10,468},{8,10,
-446},{9,10,637},{10,10,717},{11,10,738},{140,10,514},{5,11,35},{6,11,287},{7,11,
-862},{7,11,1886},{138,11,179},{7,0,1948},{7,0,2004},{132,11,517},{5,10,17},{6,10
-,371},{137,10,528},{4,0,115},{5,0,669},{6,0,407},{8,0,311},{11,0,10},{141,0,5},{
-137,0,381},{5,0,50},{6,0,439},{7,0,780},{135,0,1040},{136,11,667},{11,11,403},{
-146,11,83},{5,0,1},{6,0,81},{138,0,520},{134,0,738},{5,0,482},{8,0,98},{9,0,172}
-,{10,0,360},{10,0,700},{10,0,822},{11,0,302},{11,0,778},{12,0,50},{12,0,127},{12
-,0,396},{13,0,62},{13,0,328},{14,0,122},{147,0,72},{9,11,157},{10,11,131},{140,
-11,72},{135,11,714},{135,11,539},{5,0,2},{6,0,512},{7,0,797},{7,0,1494},{8,0,253
-},{8,0,589},{9,0,77},{10,0,1},{10,0,129},{10,0,225},{11,0,118},{11,0,226},{11,0,
-251},{11,0,430},{11,0,701},{11,0,974},{11,0,982},{12,0,64},{12,0,260},{12,0,488}
-,{140,0,690},{5,11,394},{7,11,367},{7,11,487},{7,11,857},{7,11,1713},{8,11,246},
-{9,11,537},{10,11,165},{12,11,219},{140,11,561},{136,0,557},{5,10,779},{5,10,807
-},{6,10,1655},{134,10,1676},{4,10,196},{5,10,558},{133,10,949},{11,11,827},{12,
-11,56},{14,11,34},{143,11,148},{137,0,347},{133,0,572},{134,0,832},{4,0,12},{7,0
-,504},{7,0,522},{7,0,809},{8,0,797},{141,0,88},{4,10,752},{133,11,449},{7,11,86}
-,{8,11,103},{145,11,69},{7,11,2028},{138,11,641},{5,0,528},{6,11,1},{142,11,2},{
-134,0,861},{10,0,294},{4,10,227},{5,10,159},{5,10,409},{7,10,80},{10,10,479},{12
-,10,418},{14,10,50},{14,10,249},{142,10,295},{7,10,1470},{8,10,66},{8,10,137},{8
-,10,761},{9,10,638},{11,10,80},{11,10,212},{11,10,368},{11,10,418},{12,10,8},{13
-,10,15},{16,10,61},{17,10,59},{19,10,28},{148,10,84},{20,0,109},{135,11,1148},{6
-,11,277},{7,11,1274},{7,11,1386},{7,11,1392},{12,11,129},{146,11,87},{6,11,187},
-{7,11,39},{7,11,1203},{8,11,380},{8,11,542},{14,11,117},{149,11,28},{134,0,1187}
-,{5,0,266},{9,0,290},{9,0,364},{10,0,293},{11,0,606},{142,0,45},{6,11,297},{7,11
-,793},{139,11,938},{4,0,50},{6,0,594},{9,0,121},{10,0,49},{10,0,412},{139,0,834}
-,{136,0,748},{7,11,464},{8,11,438},{11,11,105},{11,11,363},{12,11,231},{14,11,
-386},{15,11,102},{148,11,75},{132,0,466},{13,0,399},{14,0,337},{6,10,38},{7,10,
-1220},{8,10,185},{8,10,256},{9,10,22},{9,10,331},{10,10,738},{11,10,205},{11,10,
-540},{11,10,746},{13,10,465},{142,10,194},{9,0,378},{141,0,162},{137,0,519},{4,
-10,159},{6,10,115},{7,10,252},{7,10,257},{7,10,1928},{8,10,69},{9,10,384},{10,10
-,91},{10,10,615},{12,10,375},{14,10,235},{18,10,117},{147,10,123},{5,11,604},{5,
-10,911},{136,10,278},{132,0,667},{8,0,351},{9,0,322},{4,10,151},{135,10,1567},{
-134,0,902},{133,10,990},{12,0,180},{5,10,194},{7,10,1662},{137,10,90},{4,0,869},
-{134,0,1996},{134,0,813},{133,10,425},{137,11,761},{132,0,260},{133,10,971},{5,
-11,20},{6,11,298},{7,11,659},{7,11,1366},{137,11,219},{4,0,39},{5,0,36},{7,0,
-1843},{8,0,407},{11,0,144},{140,0,523},{4,0,510},{10,0,587},{139,10,752},{7,0,29
-},{7,0,66},{7,0,1980},{10,0,487},{138,0,809},{13,0,260},{14,0,82},{18,0,63},{137
-,10,662},{5,10,72},{6,10,264},{7,10,21},{7,10,46},{7,10,2013},{8,10,215},{8,10,
-513},{10,10,266},{139,10,22},{134,0,570},{6,0,565},{7,0,1667},{4,11,439},{10,10,
-95},{11,10,603},{12,11,242},{13,10,443},{14,10,160},{143,10,4},{134,0,1464},{134
-,10,431},{9,0,372},{15,0,2},{19,0,10},{19,0,18},{5,10,874},{6,10,1677},{143,10,0
-},{132,0,787},{6,0,380},{12,0,399},{21,0,19},{7,10,939},{7,10,1172},{7,10,1671},
-{9,10,540},{10,10,696},{11,10,265},{11,10,732},{11,10,928},{11,10,937},{141,10,
-438},{137,0,200},{132,11,233},{132,0,516},{134,11,577},{132,0,844},{11,0,887},{
-14,0,365},{142,0,375},{132,11,482},{8,0,821},{140,0,44},{7,0,1655},{136,0,305},{
-5,10,682},{135,10,1887},{135,11,346},{132,10,696},{4,0,10},{7,0,917},{139,0,786}
-,{5,11,795},{6,11,1741},{8,11,417},{137,11,782},{4,0,1016},{134,0,2031},{5,0,684
-},{4,10,726},{133,10,630},{6,0,1021},{134,0,1480},{8,10,802},{136,10,838},{134,0
-,27},{134,0,395},{135,11,622},{7,11,625},{135,11,1750},{4,11,203},{135,11,1936},
-{6,10,118},{7,10,215},{7,10,1521},{140,10,11},{132,0,813},{136,0,511},{7,10,615}
-,{138,10,251},{135,10,1044},{145,0,56},{133,10,225},{6,0,342},{6,0,496},{8,0,275
-},{137,0,206},{4,0,909},{133,0,940},{132,0,891},{7,11,311},{9,11,308},{140,11,
-255},{4,10,370},{5,10,756},{135,10,1326},{4,0,687},{134,0,1596},{134,0,1342},{6,
-10,1662},{7,10,48},{8,10,771},{10,10,116},{13,10,104},{14,10,105},{14,10,184},{
-15,10,168},{19,10,92},{148,10,68},{138,10,209},{4,11,400},{5,11,267},{135,11,232
-},{151,11,12},{6,0,41},{141,0,160},{141,11,314},{134,0,1718},{136,0,778},{142,11
-,261},{134,0,1610},{133,0,115},{132,0,294},{14,0,314},{132,10,120},{132,0,983},{
-5,0,193},{140,0,178},{138,10,429},{5,10,820},{135,10,931},{6,0,994},{6,0,1051},{
-6,0,1439},{7,0,174},{133,11,732},{4,11,100},{7,11,679},{8,11,313},{138,10,199},{
-6,10,151},{6,10,1675},{7,10,383},{151,10,10},{6,0,1796},{8,0,848},{8,0,867},{8,0
-,907},{10,0,855},{140,0,703},{140,0,221},{4,0,122},{5,0,796},{5,0,952},{6,0,1660
-},{6,0,1671},{8,0,567},{9,0,687},{9,0,742},{10,0,686},{11,0,682},{11,0,909},{140
-,0,281},{5,11,362},{5,11,443},{6,11,318},{7,11,1019},{139,11,623},{5,11,463},{
-136,11,296},{11,0,583},{13,0,262},{6,10,1624},{12,10,422},{142,10,360},{5,0,179}
-,{7,0,1095},{135,0,1213},{4,10,43},{4,11,454},{5,10,344},{133,10,357},{4,0,66},{
-7,0,722},{135,0,904},{134,0,773},{7,0,352},{133,10,888},{5,11,48},{5,11,404},{6,
-11,557},{7,11,458},{8,11,597},{10,11,455},{10,11,606},{11,11,49},{11,11,548},{12
-,11,476},{13,11,18},{141,11,450},{134,11,418},{132,10,711},{5,11,442},{135,11,
-1984},{141,0,35},{137,0,152},{134,0,1197},{135,11,1093},{137,11,203},{137,10,440
-},{10,0,592},{10,0,753},{12,0,317},{12,0,355},{12,0,465},{12,0,469},{12,0,560},{
-12,0,578},{141,0,243},{133,0,564},{134,0,797},{5,10,958},{133,10,987},{5,11,55},
-{7,11,376},{140,11,161},{133,11,450},{134,0,556},{134,0,819},{11,10,276},{142,10
-,293},{7,0,544},{138,0,61},{8,0,719},{4,10,65},{5,10,479},{5,10,1004},{7,10,1913
-},{8,10,317},{9,10,302},{10,10,612},{141,10,22},{4,0,5},{5,0,498},{8,0,637},{9,0
-,521},{4,11,213},{4,10,261},{7,11,223},{7,10,510},{136,11,80},{5,0,927},{7,0,101
-},{4,10,291},{7,11,381},{7,11,806},{7,11,820},{8,11,354},{8,11,437},{8,11,787},{
-9,10,515},{9,11,657},{10,11,58},{10,11,339},{10,11,749},{11,11,914},{12,10,152},
-{12,11,162},{12,10,443},{13,11,75},{13,10,392},{14,11,106},{14,11,198},{14,11,
-320},{14,10,357},{14,11,413},{146,11,43},{6,0,1153},{7,0,1441},{136,11,747},{4,0
-,893},{5,0,780},{133,0,893},{138,11,654},{133,11,692},{133,0,238},{134,11,191},{
-4,10,130},{135,10,843},{6,0,1296},{5,10,42},{5,10,879},{7,10,245},{7,10,324},{7,
-10,1532},{11,10,463},{11,10,472},{13,10,363},{144,10,52},{134,0,1729},{6,0,1999}
-,{136,0,969},{4,10,134},{133,10,372},{4,0,60},{7,0,941},{7,0,1800},{8,0,314},{9,
-0,700},{139,0,487},{134,0,1144},{6,11,162},{7,11,1960},{136,11,831},{132,11,706}
-,{135,0,1147},{138,11,426},{138,11,89},{7,0,1853},{138,0,437},{136,0,419},{135,
-10,1634},{133,0,828},{5,0,806},{7,0,176},{7,0,178},{7,0,1240},{7,0,1976},{132,10
-,644},{135,11,1877},{5,11,420},{135,11,1449},{4,0,51},{5,0,39},{6,0,4},{7,0,591}
-,{7,0,849},{7,0,951},{7,0,1613},{7,0,1760},{7,0,1988},{9,0,434},{10,0,754},{11,0
-,25},{139,0,37},{10,11,57},{138,11,277},{135,10,540},{132,11,204},{135,0,159},{
-139,11,231},{133,0,902},{7,0,928},{7,11,366},{9,11,287},{12,11,199},{12,11,556},
-{140,11,577},{6,10,623},{136,10,789},{4,10,908},{5,10,359},{5,10,508},{6,10,1723
-},{7,10,343},{7,10,1996},{135,10,2026},{134,0,270},{4,10,341},{135,10,480},{5,11
-,356},{135,11,224},{11,11,588},{11,11,864},{11,11,968},{143,11,160},{132,0,556},
-{137,0,801},{132,0,416},{142,0,372},{5,0,152},{5,0,197},{7,0,340},{7,0,867},{10,
-0,548},{10,0,581},{11,0,6},{12,0,3},{12,0,19},{14,0,110},{142,0,289},{139,0,369}
-,{7,11,630},{9,11,567},{11,11,150},{11,11,444},{141,11,119},{134,11,539},{7,10,
-1995},{8,10,299},{11,10,890},{140,10,674},{7,0,34},{7,0,190},{8,0,28},{8,0,141},
-{8,0,444},{8,0,811},{9,0,468},{11,0,334},{12,0,24},{12,0,386},{140,0,576},{133,0
-,757},{7,0,1553},{136,0,898},{133,0,721},{136,0,1012},{4,0,789},{5,0,647},{135,0
-,1102},{132,0,898},{10,0,183},{4,10,238},{5,10,503},{6,10,179},{7,10,2003},{8,10
-,381},{8,10,473},{9,10,149},{10,10,788},{15,10,45},{15,10,86},{20,10,110},{150,
-10,57},{9,0,136},{19,0,107},{4,10,121},{5,10,156},{5,10,349},{10,10,605},{142,10
-,342},{4,11,235},{135,11,255},{4,11,194},{5,11,584},{6,11,384},{7,11,583},{10,11
-,761},{11,11,760},{139,11,851},{6,10,80},{6,10,1694},{7,10,173},{7,10,1974},{9,
-10,547},{10,10,730},{14,10,18},{150,10,39},{4,10,923},{134,10,1711},{5,0,277},{
-141,0,247},{132,0,435},{133,11,562},{134,0,1311},{5,11,191},{137,11,271},{132,10
-,595},{7,11,1537},{14,11,96},{143,11,73},{5,0,437},{7,0,502},{7,0,519},{7,0,1122
-},{7,0,1751},{14,0,211},{6,10,459},{7,10,1753},{7,10,1805},{8,10,658},{9,10,1},{
-11,10,959},{141,10,446},{6,0,814},{4,11,470},{5,11,473},{6,11,153},{7,11,1503},{
-7,11,1923},{10,11,701},{11,11,132},{11,11,168},{11,11,227},{11,11,320},{11,11,
-436},{11,11,525},{11,11,855},{12,11,41},{12,11,286},{13,11,103},{13,11,284},{14,
-11,255},{14,11,262},{15,11,117},{143,11,127},{5,0,265},{6,0,212},{135,0,28},{138
-,0,750},{133,11,327},{6,11,552},{7,11,1754},{137,11,604},{134,0,2012},{132,0,702
-},{5,11,80},{6,11,405},{7,11,403},{7,11,1502},{7,11,1626},{8,11,456},{9,11,487},
-{9,11,853},{9,11,889},{10,11,309},{11,11,721},{11,11,994},{12,11,430},{141,11,
-165},{5,0,808},{135,0,2045},{5,0,166},{8,0,739},{140,0,511},{134,10,490},{4,11,
-453},{5,11,887},{6,11,535},{8,11,6},{136,11,543},{4,0,119},{5,0,170},{5,0,447},{
-7,0,1708},{7,0,1889},{9,0,357},{9,0,719},{12,0,486},{140,0,596},{137,0,500},{7,
-10,250},{136,10,507},{132,10,158},{6,0,809},{134,0,1500},{9,0,327},{11,0,350},{
-11,0,831},{13,0,352},{4,10,140},{7,10,362},{8,10,209},{9,10,10},{9,10,503},{9,10
-,614},{10,10,689},{11,10,327},{11,10,725},{12,10,252},{12,10,583},{13,10,192},{
-14,10,269},{14,10,356},{148,10,50},{135,11,741},{4,0,450},{7,0,1158},{19,10,1},{
-19,10,26},{150,10,9},{6,0,597},{135,0,1318},{134,0,1602},{6,10,228},{7,10,1341},
-{9,10,408},{138,10,343},{7,0,1375},{7,0,1466},{138,0,331},{132,0,754},{132,10,
-557},{5,11,101},{6,11,88},{6,11,543},{7,11,1677},{9,11,100},{10,11,677},{14,11,
-169},{14,11,302},{14,11,313},{15,11,48},{143,11,84},{134,0,1368},{4,11,310},{9,
-11,795},{10,11,733},{11,11,451},{12,11,249},{14,11,115},{14,11,286},{143,11,100}
-,{132,10,548},{10,0,557},{7,10,197},{8,10,142},{8,10,325},{9,10,150},{9,10,596},
-{10,10,353},{11,10,74},{11,10,315},{12,10,662},{12,10,681},{14,10,423},{143,10,
-141},{133,11,587},{5,0,850},{136,0,799},{10,0,908},{12,0,701},{12,0,757},{142,0,
-466},{4,0,62},{5,0,275},{18,0,19},{6,10,399},{6,10,579},{7,10,692},{7,10,846},{7
-,10,1015},{7,10,1799},{8,10,403},{9,10,394},{10,10,133},{12,10,4},{12,10,297},{
-12,10,452},{16,10,81},{18,10,25},{21,10,14},{22,10,12},{151,10,18},{12,0,459},{7
-,10,1546},{11,10,299},{142,10,407},{132,10,177},{132,11,498},{7,11,217},{8,11,
-140},{138,11,610},{5,10,411},{135,10,653},{134,0,1802},{7,10,439},{10,10,727},{
-11,10,260},{139,10,684},{133,11,905},{11,11,580},{142,11,201},{134,0,1397},{5,10
-,208},{7,10,753},{135,10,1528},{7,0,238},{7,0,2033},{8,0,120},{8,0,188},{8,0,659
-},{9,0,598},{10,0,466},{12,0,342},{12,0,588},{13,0,503},{14,0,246},{143,0,92},{
-135,11,1041},{4,11,456},{7,11,105},{7,11,358},{7,11,1637},{8,11,643},{139,11,483
-},{6,0,1318},{134,0,1324},{4,0,201},{7,0,1744},{8,0,602},{11,0,247},{11,0,826},{
-17,0,65},{133,10,242},{8,0,164},{146,0,62},{133,10,953},{139,10,802},{133,0,615}
-,{7,11,1566},{8,11,269},{9,11,212},{9,11,718},{14,11,15},{14,11,132},{142,11,227
-},{133,10,290},{132,10,380},{5,10,52},{7,10,277},{9,10,368},{139,10,791},{135,0,
-1243},{133,11,539},{11,11,919},{141,11,409},{136,0,968},{133,11,470},{134,0,882}
-,{132,0,907},{5,0,100},{10,0,329},{12,0,416},{149,0,29},{10,10,138},{139,10,476}
-,{5,10,725},{5,10,727},{6,11,91},{7,11,435},{135,10,1811},{4,11,16},{5,11,316},{
-5,11,842},{6,11,370},{6,11,1778},{8,11,166},{11,11,812},{12,11,206},{12,11,351},
-{14,11,418},{16,11,15},{16,11,34},{18,11,3},{19,11,3},{19,11,7},{20,11,4},{149,
-11,21},{132,0,176},{5,0,636},{5,0,998},{7,0,9},{7,0,1508},{8,0,26},{9,0,317},{9,
-0,358},{10,0,210},{10,0,292},{10,0,533},{11,0,555},{12,0,526},{12,0,607},{13,0,
-263},{13,0,459},{142,0,271},{6,0,256},{8,0,265},{4,10,38},{7,10,307},{7,10,999},
-{7,10,1481},{7,10,1732},{7,10,1738},{9,10,414},{11,10,316},{12,10,52},{13,10,420
-},{147,10,100},{135,10,1296},{4,11,611},{133,11,606},{4,0,643},{142,11,21},{133,
-11,715},{133,10,723},{6,0,610},{135,11,597},{10,0,127},{141,0,27},{6,0,1995},{6,
-0,2001},{8,0,119},{136,0,973},{4,11,149},{138,11,368},{12,0,522},{4,11,154},{5,
-10,109},{6,10,1784},{7,11,1134},{7,10,1895},{8,11,105},{12,10,296},{140,10,302},
-{4,11,31},{6,11,429},{7,11,962},{9,11,458},{139,11,691},{10,0,553},{11,0,876},{
-13,0,193},{13,0,423},{14,0,166},{19,0,84},{4,11,312},{5,10,216},{7,10,1879},{9,
-10,141},{9,10,270},{9,10,679},{10,10,159},{11,10,197},{12,10,538},{12,10,559},{
-14,10,144},{14,10,167},{143,10,67},{134,0,1582},{7,0,1578},{135,11,1578},{137,10
-,81},{132,11,236},{134,10,391},{134,0,795},{7,10,322},{136,10,249},{5,11,836},{5
-,11,857},{6,11,1680},{7,11,59},{147,11,53},{135,0,432},{10,11,68},{139,11,494},{
-4,11,81},{139,11,867},{7,0,126},{136,0,84},{142,11,280},{5,11,282},{8,11,650},{9
-,11,295},{9,11,907},{138,11,443},{136,0,790},{5,10,632},{138,10,526},{6,0,64},{
-12,0,377},{13,0,309},{14,0,141},{14,0,429},{14,11,141},{142,11,429},{134,0,1529}
-,{6,0,321},{7,0,1857},{9,0,530},{19,0,99},{7,10,948},{7,10,1042},{8,10,235},{8,
-10,461},{9,10,453},{10,10,354},{145,10,77},{7,0,1104},{11,0,269},{11,0,539},{11,
-0,627},{11,0,706},{11,0,975},{12,0,248},{12,0,434},{12,0,600},{12,0,622},{13,0,
-297},{13,0,485},{14,0,69},{14,0,409},{143,0,108},{4,10,362},{7,10,52},{7,10,303}
-,{10,11,70},{12,11,26},{14,11,17},{14,11,178},{15,11,34},{149,11,12},{11,0,977},
-{141,0,507},{9,0,34},{139,0,484},{5,10,196},{6,10,486},{7,10,212},{8,10,309},{
-136,10,346},{6,0,1700},{7,0,26},{7,0,293},{7,0,382},{7,0,1026},{7,0,1087},{7,0,
-2027},{8,0,24},{8,0,114},{8,0,252},{8,0,727},{8,0,729},{9,0,30},{9,0,199},{9,0,
-231},{9,0,251},{9,0,334},{9,0,361},{9,0,712},{10,0,55},{10,0,60},{10,0,232},{10,
-0,332},{10,0,384},{10,0,396},{10,0,504},{10,0,542},{10,0,652},{11,0,20},{11,0,48
-},{11,0,207},{11,0,291},{11,0,298},{11,0,342},{11,0,365},{11,0,394},{11,0,620},{
-11,0,705},{11,0,1017},{12,0,123},{12,0,340},{12,0,406},{12,0,643},{13,0,61},{13,
-0,269},{13,0,311},{13,0,319},{13,0,486},{14,0,234},{15,0,62},{15,0,85},{16,0,71}
-,{18,0,119},{20,0,105},{135,10,1912},{4,11,71},{5,11,376},{7,11,119},{138,11,665
-},{10,0,918},{10,0,926},{4,10,686},{136,11,55},{138,10,625},{136,10,706},{132,11
-,479},{4,10,30},{133,10,43},{6,0,379},{7,0,270},{8,0,176},{8,0,183},{9,0,432},{9
-,0,661},{12,0,247},{12,0,617},{18,0,125},{7,11,607},{8,11,99},{152,11,4},{5,0,
-792},{133,0,900},{4,11,612},{133,11,561},{4,11,41},{4,10,220},{5,11,74},{7,10,
-1535},{7,11,1627},{11,11,871},{140,11,619},{135,0,1920},{7,11,94},{11,11,329},{
-11,11,965},{12,11,241},{14,11,354},{15,11,22},{148,11,63},{9,11,209},{137,11,300
-},{134,0,771},{135,0,1979},{4,0,901},{133,0,776},{142,0,254},{133,11,98},{9,11,
-16},{141,11,386},{133,11,984},{4,11,182},{6,11,205},{135,11,220},{7,10,1725},{7,
-10,1774},{138,10,393},{5,10,263},{134,10,414},{4,11,42},{9,11,205},{9,11,786},{
-138,11,659},{14,0,140},{148,0,41},{8,0,440},{10,0,359},{6,10,178},{6,11,289},{6,
-10,1750},{7,11,1670},{9,10,690},{10,10,155},{10,10,373},{11,10,698},{12,11,57},{
-13,10,155},{20,10,93},{151,11,4},{4,0,37},{5,0,334},{7,0,1253},{151,11,25},{4,0,
-508},{4,11,635},{5,10,97},{137,10,393},{139,11,533},{4,0,640},{133,0,513},{134,
-10,1639},{132,11,371},{4,11,272},{7,11,836},{7,11,1651},{145,11,89},{5,11,825},{
-6,11,444},{6,11,1640},{136,11,308},{4,10,191},{7,10,934},{8,10,647},{145,10,97},
-{12,0,246},{15,0,162},{19,0,64},{20,0,8},{20,0,95},{22,0,24},{152,0,17},{4,0,533
-},{5,10,165},{9,10,346},{138,10,655},{5,11,737},{139,10,885},{133,10,877},{8,10,
-128},{139,10,179},{137,11,307},{140,0,752},{133,0,920},{135,0,1048},{5,0,153},{6
-,0,580},{6,10,1663},{7,10,132},{7,10,1154},{7,10,1415},{7,10,1507},{12,10,493},{
-15,10,105},{151,10,15},{5,10,459},{7,10,1073},{8,10,241},{136,10,334},{138,0,391
-},{135,0,1952},{133,11,525},{8,11,641},{11,11,388},{140,11,580},{142,0,126},{134
-,0,640},{132,0,483},{7,0,1616},{9,0,69},{6,10,324},{6,10,520},{7,10,338},{7,10,
-1729},{8,10,228},{139,10,750},{5,11,493},{134,11,528},{135,0,734},{4,11,174},{
-135,11,911},{138,0,480},{9,0,495},{146,0,104},{135,10,705},{9,0,472},{4,10,73},{
-6,10,612},{7,10,927},{7,10,1330},{7,10,1822},{8,10,217},{9,10,765},{9,10,766},{
-10,10,408},{11,10,51},{11,10,793},{12,10,266},{15,10,158},{20,10,89},{150,10,32}
-,{7,11,548},{137,11,58},{4,11,32},{5,11,215},{6,11,269},{7,11,1782},{7,11,1892},
-{10,11,16},{11,11,822},{11,11,954},{141,11,481},{132,0,874},{9,0,229},{5,10,389}
-,{136,10,636},{7,11,1749},{136,11,477},{134,0,948},{5,11,308},{135,11,1088},{4,0
-,748},{139,0,1009},{136,10,21},{6,0,555},{135,0,485},{5,11,126},{8,11,297},{9,11
-,366},{9,11,445},{12,11,53},{12,11,374},{141,11,492},{7,11,1551},{139,11,361},{
-136,0,193},{136,0,472},{8,0,653},{13,0,93},{147,0,14},{132,0,984},{132,11,175},{
-5,0,172},{6,0,1971},{132,11,685},{149,11,8},{133,11,797},{13,0,83},{5,10,189},{7
-,10,442},{7,10,443},{8,10,281},{12,10,174},{141,10,261},{134,0,1568},{133,11,565
-},{139,0,384},{133,0,260},{7,0,758},{7,0,880},{7,0,1359},{9,0,164},{9,0,167},{10
-,0,156},{10,0,588},{12,0,101},{14,0,48},{15,0,70},{6,10,2},{7,10,1262},{7,10,
-1737},{8,10,22},{8,10,270},{8,10,612},{9,10,312},{9,10,436},{10,10,311},{10,10,
-623},{11,10,72},{11,10,330},{11,10,455},{12,10,321},{12,10,504},{12,10,530},{12,
-10,543},{13,10,17},{13,10,156},{13,10,334},{17,10,60},{148,10,64},{4,11,252},{7,
-11,1068},{10,11,434},{11,11,228},{11,11,426},{13,11,231},{18,11,106},{148,11,87}
-,{7,10,354},{10,10,410},{139,10,815},{6,0,367},{7,10,670},{7,10,1327},{8,10,411}
-,{8,10,435},{9,10,653},{9,10,740},{10,10,385},{11,10,222},{11,10,324},{11,10,829
-},{140,10,611},{7,0,1174},{6,10,166},{135,10,374},{146,0,121},{132,0,828},{5,11,
-231},{138,11,509},{7,11,601},{9,11,277},{9,11,674},{10,11,178},{10,11,257},{10,
-11,418},{11,11,531},{11,11,544},{11,11,585},{12,11,113},{12,11,475},{13,11,99},{
-142,11,428},{134,0,1541},{135,11,1779},{5,0,343},{134,10,398},{135,10,50},{135,
-11,1683},{4,0,440},{7,0,57},{8,0,167},{8,0,375},{9,0,82},{9,0,561},{9,0,744},{10
-,0,620},{137,11,744},{134,0,926},{6,10,517},{7,10,1159},{10,10,621},{139,10,192}
-,{137,0,827},{8,0,194},{136,0,756},{10,10,223},{139,10,645},{7,10,64},{136,10,
-245},{4,11,399},{5,11,119},{5,11,494},{7,11,751},{137,11,556},{132,0,808},{135,0
-,22},{7,10,1763},{140,10,310},{5,0,639},{7,0,1249},{11,0,896},{134,11,584},{134,
-0,1614},{135,0,860},{135,11,1121},{5,10,129},{6,10,61},{135,10,947},{4,0,102},{7
-,0,815},{7,0,1699},{139,0,964},{13,10,505},{141,10,506},{139,10,1000},{132,11,
-679},{132,0,899},{132,0,569},{5,11,694},{137,11,714},{136,0,795},{6,0,2045},{139
-,11,7},{6,0,52},{9,0,104},{9,0,559},{12,0,308},{147,0,87},{4,0,301},{132,0,604},
-{133,10,637},{136,0,779},{5,11,143},{5,11,769},{6,11,1760},{7,11,682},{7,11,1992
-},{136,11,736},{137,10,590},{147,0,32},{137,11,527},{5,10,280},{135,10,1226},{
-134,0,494},{6,0,677},{6,0,682},{134,0,1044},{133,10,281},{135,10,1064},{7,0,508}
-,{133,11,860},{6,11,422},{7,11,0},{7,11,1544},{9,11,577},{11,11,990},{12,11,141}
-,{12,11,453},{13,11,47},{141,11,266},{134,0,1014},{5,11,515},{137,11,131},{134,0
-,957},{132,11,646},{6,0,310},{7,0,1849},{8,0,72},{8,0,272},{8,0,431},{9,0,12},{9
-,0,376},{10,0,563},{10,0,630},{10,0,796},{10,0,810},{11,0,367},{11,0,599},{11,0,
-686},{140,0,672},{7,0,570},{4,11,396},{7,10,120},{7,11,728},{8,10,489},{9,11,117
-},{9,10,319},{10,10,820},{11,10,1004},{12,10,379},{12,10,679},{13,10,117},{13,11
-,202},{13,10,412},{14,10,25},{15,10,52},{15,10,161},{16,10,47},{20,11,51},{149,
-10,2},{6,11,121},{6,11,124},{6,11,357},{7,11,1138},{7,11,1295},{8,11,162},{139,
-11,655},{8,0,449},{4,10,937},{5,10,801},{136,11,449},{139,11,958},{6,0,181},{7,0
-,537},{8,0,64},{9,0,127},{10,0,496},{12,0,510},{141,0,384},{138,11,253},{4,0,244
-},{135,0,233},{133,11,237},{132,10,365},{6,0,1650},{10,0,702},{139,0,245},{5,10,
-7},{139,10,774},{13,0,463},{20,0,49},{13,11,463},{148,11,49},{4,10,734},{5,10,
-662},{134,10,430},{4,10,746},{135,10,1090},{5,10,360},{136,10,237},{137,0,338},{
-143,11,10},{7,11,571},{138,11,366},{134,0,1279},{9,11,513},{10,11,22},{10,11,39}
-,{12,11,122},{140,11,187},{133,0,896},{146,0,178},{134,0,695},{137,0,808},{134,
-11,587},{7,11,107},{7,11,838},{8,11,550},{138,11,401},{7,0,1117},{136,0,539},{4,
-10,277},{5,10,608},{6,10,493},{7,10,457},{140,10,384},{133,11,768},{12,0,257},{7
-,10,27},{135,10,316},{140,0,1003},{4,0,207},{5,0,586},{5,0,676},{6,0,448},{8,0,
-244},{11,0,1},{13,0,3},{16,0,54},{17,0,4},{18,0,13},{133,10,552},{4,10,401},{137
-,10,264},{5,0,516},{7,0,1883},{135,11,1883},{12,0,960},{132,11,894},{5,0,4},{5,0
-,810},{6,0,13},{6,0,538},{6,0,1690},{6,0,1726},{7,0,499},{7,0,1819},{8,0,148},{8
-,0,696},{8,0,791},{12,0,125},{143,0,9},{135,0,1268},{11,0,30},{14,0,315},{9,10,
-543},{10,10,524},{12,10,524},{16,10,18},{20,10,26},{148,10,65},{6,0,748},{4,10,
-205},{5,10,623},{7,10,104},{136,10,519},{11,0,542},{139,0,852},{140,0,6},{132,0,
-848},{7,0,1385},{11,0,582},{11,0,650},{11,0,901},{11,0,949},{12,0,232},{12,0,236
-},{13,0,413},{13,0,501},{18,0,116},{7,10,579},{9,10,41},{9,10,244},{9,10,669},{
-10,10,5},{11,10,861},{11,10,951},{139,10,980},{4,0,945},{6,0,1811},{6,0,1845},{6
-,0,1853},{6,0,1858},{8,0,862},{12,0,782},{12,0,788},{18,0,160},{148,0,117},{132,
-10,717},{4,0,925},{5,0,803},{8,0,698},{138,0,828},{134,0,1416},{132,0,610},{139,
-0,992},{6,0,878},{134,0,1477},{135,0,1847},{138,11,531},{137,11,539},{134,11,272
-},{133,0,383},{134,0,1404},{132,10,489},{4,11,9},{5,11,128},{7,11,368},{11,11,
-480},{148,11,3},{136,0,986},{9,0,660},{138,0,347},{135,10,892},{136,11,682},{7,0
-,572},{9,0,592},{11,0,680},{12,0,356},{140,0,550},{7,0,1411},{138,11,527},{4,11,
-2},{7,11,545},{135,11,894},{137,10,473},{11,0,64},{7,11,481},{7,10,819},{9,10,26
-},{9,10,392},{9,11,792},{10,10,152},{10,10,226},{12,10,276},{12,10,426},{12,10,
-589},{13,10,460},{15,10,97},{19,10,48},{148,10,104},{135,10,51},{136,11,445},{
-136,11,646},{135,0,606},{132,10,674},{6,0,1829},{134,0,1830},{132,10,770},{5,10,
-79},{7,10,1027},{7,10,1477},{139,10,52},{5,11,530},{142,11,113},{134,10,1666},{7
-,0,748},{139,0,700},{134,10,195},{133,10,789},{9,0,87},{10,0,365},{4,10,251},{4,
-10,688},{7,10,513},{135,10,1284},{136,11,111},{133,0,127},{6,0,198},{140,0,83},{
-133,11,556},{133,10,889},{4,10,160},{5,10,330},{7,10,1434},{136,10,174},{5,0,276
-},{6,0,55},{7,0,1369},{138,0,864},{8,11,16},{140,11,568},{6,0,1752},{136,0,726},
-{135,0,1066},{133,0,764},{6,11,186},{137,11,426},{11,0,683},{139,11,683},{6,0,
-309},{7,0,331},{138,0,550},{133,10,374},{6,0,1212},{6,0,1852},{7,0,1062},{8,0,
-874},{8,0,882},{138,0,936},{132,11,585},{134,0,1364},{7,0,986},{133,10,731},{6,0
-,723},{6,0,1408},{138,0,381},{135,0,1573},{134,0,1025},{4,10,626},{5,10,642},{6,
-10,425},{10,10,202},{139,10,141},{4,11,93},{5,11,252},{6,11,229},{7,11,291},{9,
-11,550},{139,11,644},{137,11,749},{137,11,162},{132,11,381},{135,0,1559},{6,0,
-194},{7,0,133},{10,0,493},{10,0,570},{139,0,664},{5,0,24},{5,0,569},{6,0,3},{6,0
-,119},{6,0,143},{6,0,440},{7,0,295},{7,0,599},{7,0,1686},{7,0,1854},{8,0,424},{9
-,0,43},{9,0,584},{9,0,760},{10,0,148},{10,0,328},{11,0,159},{11,0,253},{11,0,506
-},{12,0,487},{140,0,531},{6,0,661},{134,0,1517},{136,10,835},{151,10,17},{5,0,14
-},{5,0,892},{6,0,283},{7,0,234},{136,0,537},{139,0,541},{4,0,126},{8,0,635},{147
-,0,34},{4,0,316},{4,0,495},{135,0,1561},{4,11,187},{5,11,184},{5,11,690},{7,11,
-1869},{138,11,756},{139,11,783},{4,0,998},{137,0,861},{136,0,1009},{139,11,292},
-{5,11,21},{6,11,77},{6,11,157},{7,11,974},{7,11,1301},{7,11,1339},{7,11,1490},{7
-,11,1873},{137,11,628},{7,11,1283},{9,11,227},{9,11,499},{10,11,341},{11,11,325}
-,{11,11,408},{14,11,180},{15,11,144},{18,11,47},{147,11,49},{4,0,64},{5,0,352},{
-5,0,720},{6,0,368},{139,0,359},{5,10,384},{8,10,455},{140,10,48},{5,10,264},{134
-,10,184},{7,0,1577},{10,0,304},{10,0,549},{12,0,365},{13,0,220},{13,0,240},{142,
-0,33},{134,0,1107},{134,0,929},{135,0,1142},{6,0,175},{137,0,289},{5,0,432},{133
-,0,913},{6,0,279},{7,0,219},{5,10,633},{135,10,1323},{7,0,785},{7,10,359},{8,10,
-243},{140,10,175},{139,0,595},{132,10,105},{8,11,398},{9,11,681},{139,11,632},{
-140,0,80},{5,0,931},{134,0,1698},{142,11,241},{134,11,20},{134,0,1323},{11,0,526
-},{11,0,939},{141,0,290},{5,0,774},{6,0,780},{6,0,1637},{6,0,1686},{6,0,1751},{8
-,0,559},{141,0,109},{141,0,127},{7,0,1167},{11,0,934},{13,0,391},{17,0,76},{135,
-11,709},{135,0,963},{6,0,260},{135,0,1484},{134,0,573},{4,10,758},{139,11,941},{
-135,10,1649},{145,11,36},{4,0,292},{137,0,580},{4,0,736},{5,0,871},{6,0,1689},{
-135,0,1944},{7,11,945},{11,11,713},{139,11,744},{134,0,1164},{135,11,937},{6,0,
-1922},{9,0,982},{15,0,173},{15,0,178},{15,0,200},{18,0,189},{18,0,207},{21,0,47}
-,{135,11,1652},{7,0,1695},{139,10,128},{6,0,63},{135,0,920},{133,0,793},{143,11,
-134},{133,10,918},{5,0,67},{6,0,62},{6,0,374},{135,0,1391},{9,0,790},{12,0,47},{
-4,11,579},{5,11,226},{5,11,323},{135,11,960},{10,11,784},{141,11,191},{4,0,391},
-{135,0,1169},{137,0,443},{13,11,232},{146,11,35},{132,10,340},{132,0,271},{137,
-11,313},{5,11,973},{137,11,659},{134,0,1140},{6,11,135},{135,11,1176},{4,0,253},
-{5,0,544},{7,0,300},{137,0,340},{7,0,897},{5,10,985},{7,10,509},{145,10,96},{138
-,11,735},{135,10,1919},{138,0,890},{5,0,818},{134,0,1122},{5,0,53},{5,0,541},{6,
-0,94},{6,0,499},{7,0,230},{139,0,321},{4,0,920},{5,0,25},{5,0,790},{6,0,457},{7,
-0,853},{8,0,788},{142,11,31},{132,10,247},{135,11,314},{132,0,468},{7,0,243},{6,
-10,337},{7,10,494},{8,10,27},{8,10,599},{138,10,153},{4,10,184},{5,10,390},{7,10
-,618},{7,10,1456},{139,10,710},{134,0,870},{134,0,1238},{134,0,1765},{10,0,853},
-{10,0,943},{14,0,437},{14,0,439},{14,0,443},{14,0,446},{14,0,452},{14,0,469},{14
-,0,471},{14,0,473},{16,0,93},{16,0,102},{16,0,110},{148,0,121},{4,0,605},{7,0,
-518},{7,0,1282},{7,0,1918},{10,0,180},{139,0,218},{133,0,822},{4,0,634},{11,0,
-916},{142,0,419},{6,11,281},{7,11,6},{8,11,282},{8,11,480},{8,11,499},{9,11,198}
-,{10,11,143},{10,11,169},{10,11,211},{10,11,417},{10,11,574},{11,11,147},{11,11,
-395},{12,11,75},{12,11,407},{12,11,608},{13,11,500},{142,11,251},{134,0,898},{6,
-0,36},{7,0,658},{8,0,454},{150,11,48},{133,11,674},{135,11,1776},{4,11,419},{10,
-10,227},{11,10,497},{11,10,709},{140,10,415},{6,10,360},{7,10,1664},{136,10,478}
-,{137,0,806},{12,11,508},{14,11,102},{14,11,226},{144,11,57},{135,11,1123},{4,11
-,138},{7,11,1012},{7,11,1280},{137,11,76},{5,11,29},{140,11,638},{136,10,699},{
-134,0,1326},{132,0,104},{135,11,735},{132,10,739},{134,0,1331},{7,0,260},{135,11
-,260},{135,11,1063},{7,0,45},{9,0,542},{9,0,566},{10,0,728},{137,10,869},{4,10,
-67},{5,10,422},{7,10,1037},{7,10,1289},{7,10,1555},{9,10,741},{145,10,108},{139,
-0,263},{134,0,1516},{14,0,146},{15,0,42},{16,0,23},{17,0,86},{146,0,17},{138,0,
-468},{136,0,1005},{4,11,17},{5,11,23},{7,11,995},{11,11,383},{11,11,437},{12,11,
-460},{140,11,532},{7,0,87},{142,0,288},{138,10,96},{135,11,626},{144,10,26},{7,0
-,988},{7,0,1939},{9,0,64},{9,0,502},{12,0,22},{12,0,34},{13,0,12},{13,0,234},{
-147,0,77},{13,0,133},{8,10,203},{11,10,823},{11,10,846},{12,10,482},{13,10,277},
-{13,10,302},{13,10,464},{14,10,205},{142,10,221},{4,10,449},{133,10,718},{135,0,
-141},{6,0,1842},{136,0,872},{8,11,70},{12,11,171},{141,11,272},{4,10,355},{6,10,
-311},{9,10,256},{138,10,404},{132,0,619},{137,0,261},{10,11,233},{10,10,758},{
-139,11,76},{5,0,246},{8,0,189},{9,0,355},{9,0,512},{10,0,124},{10,0,453},{11,0,
-143},{11,0,416},{11,0,859},{141,0,341},{134,11,442},{133,10,827},{5,10,64},{140,
-10,581},{4,10,442},{7,10,1047},{7,10,1352},{135,10,1643},{134,11,1709},{5,0,678}
-,{6,0,305},{7,0,775},{7,0,1065},{133,10,977},{11,11,69},{12,11,105},{12,11,117},
-{13,11,213},{14,11,13},{14,11,62},{14,11,177},{14,11,421},{15,11,19},{146,11,141
-},{137,11,309},{5,0,35},{7,0,862},{7,0,1886},{138,0,179},{136,0,285},{132,0,517}
-,{7,11,976},{9,11,146},{10,11,206},{10,11,596},{13,11,218},{142,11,153},{132,10,
-254},{6,0,214},{12,0,540},{4,10,275},{7,10,1219},{140,10,376},{8,0,667},{11,0,
-403},{146,0,83},{12,0,74},{10,11,648},{11,11,671},{143,11,46},{135,0,125},{134,
-10,1753},{133,0,761},{6,0,912},{4,11,518},{6,10,369},{6,10,502},{7,10,1036},{7,
-11,1136},{8,10,348},{9,10,452},{10,10,26},{11,10,224},{11,10,387},{11,10,772},{
-12,10,95},{12,10,629},{13,10,195},{13,10,207},{13,10,241},{14,10,260},{14,10,270
-},{143,10,140},{10,0,131},{140,0,72},{132,10,269},{5,10,480},{7,10,532},{7,10,
-1197},{7,10,1358},{8,10,291},{11,10,349},{142,10,396},{8,11,689},{137,11,863},{8
-,0,333},{138,0,182},{4,11,18},{7,11,145},{7,11,444},{7,11,1278},{8,11,49},{8,11,
-400},{9,11,71},{9,11,250},{10,11,459},{12,11,160},{144,11,24},{14,11,35},{142,11
-,191},{135,11,1864},{135,0,1338},{148,10,15},{14,0,94},{15,0,65},{16,0,4},{16,0,
-77},{16,0,80},{145,0,5},{12,11,82},{143,11,36},{133,11,1010},{133,0,449},{133,0,
-646},{7,0,86},{8,0,103},{135,10,657},{7,0,2028},{138,0,641},{136,10,533},{134,0,
-1},{139,11,970},{5,11,87},{7,11,313},{7,11,1103},{10,11,112},{10,11,582},{11,11,
-389},{11,11,813},{12,11,385},{13,11,286},{14,11,124},{146,11,108},{6,0,869},{132
-,11,267},{6,0,277},{7,0,1274},{7,0,1386},{146,0,87},{6,0,187},{7,0,39},{7,0,1203
-},{8,0,380},{14,0,117},{149,0,28},{4,10,211},{4,10,332},{5,10,335},{6,10,238},{7
-,10,269},{7,10,811},{7,10,1797},{8,10,836},{9,10,507},{141,10,242},{4,0,785},{5,
-0,368},{6,0,297},{7,0,793},{139,0,938},{7,0,464},{8,0,558},{11,0,105},{12,0,231}
-,{14,0,386},{15,0,102},{148,0,75},{133,10,1009},{8,0,877},{140,0,731},{139,11,
-289},{10,11,249},{139,11,209},{132,11,561},{134,0,1608},{132,11,760},{134,0,1429
-},{9,11,154},{140,11,485},{5,10,228},{6,10,203},{7,10,156},{8,10,347},{137,10,
-265},{7,0,1010},{11,0,733},{11,0,759},{13,0,34},{14,0,427},{146,0,45},{7,10,1131
-},{135,10,1468},{136,11,255},{7,0,1656},{9,0,369},{10,0,338},{10,0,490},{11,0,
-154},{11,0,545},{11,0,775},{13,0,77},{141,0,274},{133,11,621},{134,0,1038},{4,11
-,368},{135,11,641},{6,0,2010},{8,0,979},{8,0,985},{10,0,951},{138,0,1011},{134,0
-,1005},{19,0,121},{5,10,291},{5,10,318},{7,10,765},{9,10,389},{140,10,548},{5,0,
-20},{6,0,298},{7,0,659},{137,0,219},{7,0,1440},{11,0,854},{11,0,872},{11,0,921},
-{12,0,551},{13,0,472},{142,0,367},{5,0,490},{6,0,615},{6,0,620},{135,0,683},{6,0
-,1070},{134,0,1597},{139,0,522},{132,0,439},{136,0,669},{6,0,766},{6,0,1143},{6,
-0,1245},{10,10,525},{139,10,82},{9,11,92},{147,11,91},{6,0,668},{134,0,1218},{6,
-11,525},{9,11,876},{140,11,284},{132,0,233},{136,0,547},{132,10,422},{5,10,355},
-{145,10,0},{6,11,300},{135,11,1515},{4,0,482},{137,10,905},{4,0,886},{7,0,346},{
-133,11,594},{133,10,865},{5,10,914},{134,10,1625},{135,0,334},{5,0,795},{6,0,
-1741},{133,10,234},{135,10,1383},{6,11,1641},{136,11,820},{135,0,371},{7,11,1313
-},{138,11,660},{135,10,1312},{135,0,622},{7,0,625},{135,0,1750},{135,0,339},{4,0
-,203},{135,0,1936},{15,0,29},{16,0,38},{15,11,29},{144,11,38},{5,0,338},{135,0,
-1256},{135,10,1493},{10,0,130},{6,10,421},{7,10,61},{7,10,1540},{138,10,501},{6,
-11,389},{7,11,149},{9,11,142},{138,11,94},{137,10,341},{11,0,678},{12,0,307},{
-142,10,98},{6,11,8},{7,11,1881},{136,11,91},{135,0,2044},{6,0,770},{6,0,802},{6,
-0,812},{7,0,311},{9,0,308},{12,0,255},{6,10,102},{7,10,72},{15,10,142},{147,10,
-67},{151,10,30},{135,10,823},{135,0,1266},{135,11,1746},{135,10,1870},{4,0,400},
-{5,0,267},{135,0,232},{7,11,24},{11,11,542},{139,11,852},{135,11,1739},{4,11,503
-},{135,11,1661},{5,11,130},{7,11,1314},{9,11,610},{10,11,718},{11,11,601},{11,11
-,819},{11,11,946},{140,11,536},{10,11,149},{11,11,280},{142,11,336},{7,0,739},{
-11,0,690},{7,11,1946},{8,10,48},{8,10,88},{8,10,582},{8,10,681},{9,10,373},{9,10
-,864},{11,10,157},{11,10,843},{148,10,27},{134,0,990},{4,10,88},{5,10,137},{5,10
-,174},{5,10,777},{6,10,1664},{6,10,1725},{7,10,77},{7,10,426},{7,10,1317},{7,10,
-1355},{8,10,126},{8,10,563},{9,10,523},{9,10,750},{10,10,310},{10,10,836},{11,10
-,42},{11,10,318},{11,10,731},{12,10,68},{12,10,92},{12,10,507},{12,10,692},{13,
-10,81},{13,10,238},{13,10,374},{14,10,436},{18,10,138},{19,10,78},{19,10,111},{
-20,10,55},{20,10,77},{148,10,92},{141,10,418},{7,0,1831},{132,10,938},{6,0,776},
-{134,0,915},{138,10,351},{5,11,348},{6,11,522},{6,10,1668},{7,10,1499},{8,10,117
-},{9,10,314},{138,10,174},{135,10,707},{132,0,613},{133,10,403},{132,11,392},{5,
-11,433},{9,11,633},{139,11,629},{133,0,763},{132,0,878},{132,0,977},{132,0,100},
-{6,0,463},{4,10,44},{5,10,311},{7,10,639},{7,10,762},{7,10,1827},{9,10,8},{9,10,
-462},{148,10,83},{134,11,234},{4,10,346},{7,10,115},{9,10,180},{9,10,456},{138,
-10,363},{5,0,362},{5,0,443},{6,0,318},{7,0,1019},{139,0,623},{5,0,463},{8,0,296}
-,{7,11,140},{7,11,1950},{8,11,680},{11,11,817},{147,11,88},{7,11,1222},{138,11,
-386},{142,0,137},{132,0,454},{7,0,1914},{6,11,5},{7,10,1051},{9,10,545},{11,11,
-249},{12,11,313},{16,11,66},{145,11,26},{135,0,1527},{145,0,58},{148,11,59},{5,0
-,48},{5,0,404},{6,0,557},{7,0,458},{8,0,597},{10,0,455},{10,0,606},{11,0,49},{11
-,0,548},{12,0,476},{13,0,18},{141,0,450},{5,11,963},{134,11,1773},{133,0,729},{
-138,11,586},{5,0,442},{135,0,1984},{134,0,449},{144,0,40},{4,0,853},{7,11,180},{
-8,11,509},{136,11,792},{6,10,185},{7,10,1899},{9,10,875},{139,10,673},{134,11,
-524},{12,0,227},{4,10,327},{5,10,478},{7,10,1332},{136,10,753},{6,0,1491},{5,10,
-1020},{133,10,1022},{4,10,103},{133,10,401},{132,11,931},{4,10,499},{135,10,1421
-},{5,0,55},{7,0,376},{140,0,161},{133,0,450},{6,0,1174},{134,0,1562},{10,0,62},{
-13,0,400},{135,11,1837},{140,0,207},{135,0,869},{4,11,773},{5,11,618},{137,11,
-756},{132,10,96},{4,0,213},{7,0,223},{8,0,80},{135,10,968},{4,11,90},{5,11,337},
-{5,11,545},{7,11,754},{9,11,186},{10,11,72},{10,11,782},{11,11,513},{11,11,577},
-{11,11,610},{11,11,889},{11,11,961},{12,11,354},{12,11,362},{12,11,461},{12,11,
-595},{13,11,79},{143,11,121},{7,0,381},{7,0,806},{7,0,820},{8,0,354},{8,0,437},{
-8,0,787},{9,0,657},{10,0,58},{10,0,339},{10,0,749},{11,0,914},{12,0,162},{13,0,
-75},{14,0,106},{14,0,198},{14,0,320},{14,0,413},{146,0,43},{136,0,747},{136,0,
-954},{134,0,1073},{135,0,556},{7,11,151},{9,11,329},{139,11,254},{5,0,692},{134,
-0,1395},{6,10,563},{137,10,224},{134,0,191},{132,0,804},{9,11,187},{10,11,36},{
-17,11,44},{146,11,64},{7,11,165},{7,11,919},{136,11,517},{4,11,506},{5,11,295},{
-7,11,1680},{15,11,14},{144,11,5},{4,0,706},{6,0,162},{7,0,1960},{136,0,831},{135
-,11,1376},{7,11,987},{9,11,688},{10,11,522},{11,11,788},{140,11,566},{150,0,35},
-{138,0,426},{135,0,1235},{135,11,1741},{7,11,389},{7,11,700},{7,11,940},{8,11,
-514},{9,11,116},{9,11,535},{10,11,118},{11,11,107},{11,11,148},{11,11,922},{12,
-11,254},{12,11,421},{142,11,238},{134,0,1234},{132,11,743},{4,10,910},{5,10,832}
-,{135,11,1335},{141,0,96},{135,11,185},{146,0,149},{4,0,204},{137,0,902},{4,11,
-784},{133,11,745},{136,0,833},{136,0,949},{7,0,366},{9,0,287},{12,0,199},{12,0,
-556},{12,0,577},{5,11,81},{7,11,146},{7,11,1342},{7,11,1446},{8,11,53},{8,11,561
-},{8,11,694},{8,11,754},{9,11,97},{9,11,115},{9,11,894},{10,11,462},{10,11,813},
-{11,11,230},{11,11,657},{11,11,699},{11,11,748},{12,11,119},{12,11,200},{12,11,
-283},{14,11,273},{145,11,15},{5,11,408},{137,11,747},{9,11,498},{140,11,181},{6,
-0,2020},{136,0,992},{5,0,356},{135,0,224},{134,0,784},{7,0,630},{9,0,567},{11,0,
-150},{11,0,444},{13,0,119},{8,10,528},{137,10,348},{134,0,539},{4,10,20},{133,10
-,616},{142,0,27},{7,11,30},{8,11,86},{8,11,315},{8,11,700},{9,11,576},{9,11,858}
-,{11,11,310},{11,11,888},{11,11,904},{12,11,361},{141,11,248},{138,11,839},{134,
-0,755},{134,0,1063},{7,10,1091},{135,10,1765},{134,11,428},{7,11,524},{8,11,169}
-,{8,11,234},{9,11,480},{138,11,646},{139,0,814},{7,11,1462},{139,11,659},{4,10,
-26},{5,10,429},{6,10,245},{7,10,704},{7,10,1379},{135,10,1474},{7,11,1205},{138,
-11,637},{139,11,803},{132,10,621},{136,0,987},{4,11,266},{8,11,4},{9,11,39},{10,
-11,166},{11,11,918},{12,11,635},{20,11,10},{22,11,27},{150,11,43},{4,0,235},{135
-,0,255},{4,0,194},{5,0,584},{6,0,384},{7,0,583},{10,0,761},{11,0,760},{139,0,851
-},{133,10,542},{134,0,1086},{133,10,868},{8,0,1016},{136,0,1018},{7,0,1396},{7,
-11,1396},{136,10,433},{135,10,1495},{138,10,215},{141,10,124},{7,11,157},{8,11,
-279},{9,11,759},{16,11,31},{16,11,39},{16,11,75},{18,11,24},{20,11,42},{152,11,1
-},{5,0,562},{134,11,604},{134,0,913},{5,0,191},{137,0,271},{4,0,470},{6,0,153},{
-7,0,1503},{7,0,1923},{10,0,701},{11,0,132},{11,0,227},{11,0,320},{11,0,436},{11,
-0,525},{11,0,855},{11,0,873},{12,0,41},{12,0,286},{13,0,103},{13,0,284},{14,0,
-255},{14,0,262},{15,0,117},{143,0,127},{7,0,475},{12,0,45},{147,10,112},{132,11,
-567},{137,11,859},{6,0,713},{6,0,969},{6,0,1290},{134,0,1551},{133,0,327},{6,0,
-552},{6,0,1292},{7,0,1754},{137,0,604},{4,0,223},{6,0,359},{11,0,3},{13,0,108},{
-14,0,89},{16,0,22},{5,11,762},{7,11,1880},{9,11,680},{139,11,798},{5,0,80},{6,0,
-405},{7,0,403},{7,0,1502},{8,0,456},{9,0,487},{9,0,853},{9,0,889},{10,0,309},{11
-,0,721},{11,0,994},{12,0,430},{141,0,165},{133,11,298},{132,10,647},{134,0,2016}
-,{18,10,10},{146,11,10},{4,0,453},{5,0,887},{6,0,535},{8,0,6},{8,0,543},{136,0,
-826},{136,0,975},{10,0,961},{138,0,962},{138,10,220},{6,0,1891},{6,0,1893},{9,0,
-916},{9,0,965},{9,0,972},{12,0,801},{12,0,859},{12,0,883},{15,0,226},{149,0,51},
-{132,10,109},{135,11,267},{7,11,92},{7,11,182},{8,11,453},{9,11,204},{11,11,950}
-,{12,11,94},{12,11,644},{16,11,20},{16,11,70},{16,11,90},{147,11,55},{134,10,
-1746},{6,11,71},{7,11,845},{7,11,1308},{8,11,160},{137,11,318},{5,0,101},{6,0,88
-},{7,0,263},{7,0,628},{7,0,1677},{8,0,349},{9,0,100},{10,0,677},{14,0,169},{14,0
-,302},{14,0,313},{15,0,48},{15,0,84},{7,11,237},{8,11,664},{9,11,42},{9,11,266},
-{9,11,380},{9,11,645},{10,11,177},{138,11,276},{138,11,69},{4,0,310},{7,0,708},{
-7,0,996},{9,0,795},{10,0,390},{10,0,733},{11,0,451},{12,0,249},{14,0,115},{14,0,
-286},{143,0,100},{5,0,587},{4,10,40},{10,10,67},{11,10,117},{11,10,768},{139,10,
-935},{6,0,1942},{7,0,512},{136,0,983},{7,10,992},{8,10,301},{9,10,722},{12,10,63
-},{13,10,29},{14,10,161},{143,10,18},{136,11,76},{139,10,923},{134,0,645},{134,0
-,851},{4,0,498},{132,11,293},{7,0,217},{8,0,140},{10,0,610},{14,11,352},{17,11,
-53},{18,11,146},{18,11,152},{19,11,11},{150,11,54},{134,0,1448},{138,11,841},{
-133,0,905},{4,11,605},{7,11,518},{7,11,1282},{7,11,1918},{10,11,180},{139,11,218
-},{139,11,917},{135,10,825},{140,10,328},{4,0,456},{7,0,105},{7,0,358},{7,0,1637
-},{8,0,643},{139,0,483},{134,0,792},{6,11,96},{135,11,1426},{137,11,691},{4,11,
-651},{133,11,289},{7,11,688},{8,11,35},{9,11,511},{10,11,767},{147,11,118},{150,
-0,56},{5,0,243},{5,0,535},{6,10,204},{10,10,320},{10,10,583},{13,10,502},{14,10,
-72},{14,10,274},{14,10,312},{14,10,344},{15,10,159},{16,10,62},{16,10,69},{17,10
-,30},{18,10,42},{18,10,53},{18,10,84},{18,10,140},{19,10,68},{19,10,85},{20,10,5
-},{20,10,45},{20,10,101},{22,10,7},{150,10,20},{4,10,558},{6,10,390},{7,10,162},
-{7,10,689},{9,10,360},{138,10,653},{146,11,23},{135,0,1748},{5,10,856},{6,10,
-1672},{6,10,1757},{134,10,1781},{5,0,539},{5,0,754},{6,0,876},{132,11,704},{135,
-11,1078},{5,10,92},{10,10,736},{140,10,102},{17,0,91},{5,10,590},{137,10,213},{
-134,0,1565},{6,0,91},{135,0,435},{4,0,939},{140,0,792},{134,0,1399},{4,0,16},{5,
-0,316},{5,0,842},{6,0,370},{6,0,1778},{8,0,166},{11,0,812},{12,0,206},{12,0,351}
-,{14,0,418},{16,0,15},{16,0,34},{18,0,3},{19,0,3},{19,0,7},{20,0,4},{21,0,21},{4
-,11,720},{133,11,306},{144,0,95},{133,11,431},{132,11,234},{135,0,551},{4,0,999}
-,{6,0,1966},{134,0,2042},{7,0,619},{10,0,547},{11,0,122},{12,0,601},{15,0,7},{
-148,0,20},{5,11,464},{6,11,236},{7,11,276},{7,11,696},{7,11,914},{7,11,1108},{7,
-11,1448},{9,11,15},{9,11,564},{10,11,14},{12,11,565},{13,11,449},{14,11,53},{15,
-11,13},{16,11,64},{145,11,41},{6,0,884},{6,0,1019},{134,0,1150},{6,11,1767},{12,
-11,194},{145,11,107},{136,10,503},{133,11,840},{7,0,671},{134,10,466},{132,0,888
-},{4,0,149},{138,0,368},{4,0,154},{7,0,1134},{136,0,105},{135,0,983},{9,11,642},
-{11,11,236},{142,11,193},{4,0,31},{6,0,429},{7,0,962},{9,0,458},{139,0,691},{6,0
-,643},{134,0,1102},{132,0,312},{4,11,68},{5,11,634},{6,11,386},{7,11,794},{8,11,
-273},{9,11,563},{10,11,105},{10,11,171},{11,11,94},{139,11,354},{133,0,740},{135
-,0,1642},{4,11,95},{7,11,416},{8,11,211},{139,11,830},{132,0,236},{138,10,241},{
-7,11,731},{13,11,20},{143,11,11},{5,0,836},{5,0,857},{6,0,1680},{135,0,59},{10,0
-,68},{11,0,494},{152,11,6},{4,0,81},{139,0,867},{135,0,795},{133,11,689},{4,0,
-1001},{5,0,282},{6,0,1932},{6,0,1977},{6,0,1987},{6,0,1992},{8,0,650},{8,0,919},
-{8,0,920},{8,0,923},{8,0,926},{8,0,927},{8,0,931},{8,0,939},{8,0,947},{8,0,956},
-{8,0,997},{9,0,907},{10,0,950},{10,0,953},{10,0,954},{10,0,956},{10,0,958},{10,0
-,959},{10,0,964},{10,0,970},{10,0,972},{10,0,973},{10,0,975},{10,0,976},{10,0,
-980},{10,0,981},{10,0,984},{10,0,988},{10,0,990},{10,0,995},{10,0,999},{10,0,
-1002},{10,0,1003},{10,0,1005},{10,0,1006},{10,0,1008},{10,0,1009},{10,0,1012},{
-10,0,1014},{10,0,1015},{10,0,1019},{10,0,1020},{10,0,1022},{12,0,959},{12,0,961}
-,{12,0,962},{12,0,963},{12,0,964},{12,0,965},{12,0,967},{12,0,968},{12,0,969},{
-12,0,970},{12,0,971},{12,0,972},{12,0,973},{12,0,974},{12,0,975},{12,0,976},{12,
-0,977},{12,0,979},{12,0,981},{12,0,982},{12,0,983},{12,0,984},{12,0,985},{12,0,
-986},{12,0,987},{12,0,989},{12,0,990},{12,0,992},{12,0,993},{12,0,995},{12,0,998
-},{12,0,999},{12,0,1000},{12,0,1001},{12,0,1002},{12,0,1004},{12,0,1005},{12,0,
-1006},{12,0,1007},{12,0,1008},{12,0,1009},{12,0,1010},{12,0,1011},{12,0,1012},{
-12,0,1014},{12,0,1015},{12,0,1016},{12,0,1017},{12,0,1018},{12,0,1019},{12,0,
-1022},{12,0,1023},{14,0,475},{14,0,477},{14,0,478},{14,0,479},{14,0,480},{14,0,
-482},{14,0,483},{14,0,484},{14,0,485},{14,0,486},{14,0,487},{14,0,488},{14,0,489
-},{14,0,490},{14,0,491},{14,0,492},{14,0,493},{14,0,494},{14,0,495},{14,0,496},{
-14,0,497},{14,0,498},{14,0,499},{14,0,500},{14,0,501},{14,0,502},{14,0,503},{14,
-0,504},{14,0,506},{14,0,507},{14,0,508},{14,0,509},{14,0,510},{14,0,511},{16,0,
-113},{16,0,114},{16,0,115},{16,0,117},{16,0,118},{16,0,119},{16,0,121},{16,0,122
-},{16,0,123},{16,0,124},{16,0,125},{16,0,126},{16,0,127},{18,0,242},{18,0,243},{
-18,0,244},{18,0,245},{18,0,248},{18,0,249},{18,0,250},{18,0,251},{18,0,252},{18,
-0,253},{18,0,254},{18,0,255},{20,0,125},{20,0,126},{148,0,127},{7,11,1717},{7,11
-,1769},{138,11,546},{7,11,1127},{7,11,1572},{10,11,297},{10,11,422},{11,11,764},
-{11,11,810},{12,11,264},{13,11,102},{13,11,300},{13,11,484},{14,11,147},{14,11,
-229},{17,11,71},{18,11,118},{147,11,120},{6,0,1148},{134,0,1586},{132,0,775},{
-135,10,954},{133,11,864},{133,11,928},{138,11,189},{135,10,1958},{6,10,549},{8,
-10,34},{8,10,283},{9,10,165},{138,10,475},{5,10,652},{5,10,701},{135,10,449},{
-135,11,695},{4,10,655},{7,10,850},{17,10,75},{146,10,137},{140,11,682},{133,11,
-523},{8,0,970},{136,10,670},{136,11,555},{7,11,76},{8,11,44},{9,11,884},{10,11,
-580},{11,11,399},{11,11,894},{15,11,122},{18,11,144},{147,11,61},{6,10,159},{6,
-10,364},{7,10,516},{7,10,1439},{137,10,518},{4,0,71},{5,0,376},{7,0,119},{138,0,
-665},{141,10,151},{11,0,827},{14,0,34},{143,0,148},{133,11,518},{4,0,479},{135,
-11,1787},{135,11,1852},{135,10,993},{7,0,607},{136,0,99},{134,0,1960},{132,0,793
-},{4,0,41},{5,0,74},{7,0,1627},{11,0,871},{140,0,619},{7,0,94},{11,0,329},{11,0,
-965},{12,0,241},{14,0,354},{15,0,22},{148,0,63},{7,10,501},{9,10,111},{10,10,141
-},{11,10,332},{13,10,43},{13,10,429},{14,10,130},{14,10,415},{145,10,102},{9,0,
-209},{137,0,300},{134,0,1497},{138,11,255},{4,11,934},{5,11,138},{136,11,610},{
-133,0,98},{6,0,1316},{10,11,804},{138,11,832},{8,11,96},{9,11,36},{10,11,607},{
-11,11,423},{11,11,442},{12,11,309},{14,11,199},{15,11,90},{145,11,110},{132,0,
-463},{5,10,149},{136,10,233},{133,10,935},{4,11,652},{8,11,320},{9,11,13},{9,11,
-398},{9,11,727},{10,11,75},{10,11,184},{10,11,230},{10,11,564},{10,11,569},{11,
-11,973},{12,11,70},{12,11,189},{13,11,57},{13,11,257},{22,11,6},{150,11,16},{142
-,0,291},{12,10,582},{146,10,131},{136,10,801},{133,0,984},{145,11,116},{4,11,692
-},{133,11,321},{4,0,182},{6,0,205},{135,0,220},{4,0,42},{9,0,205},{9,0,786},{138
-,0,659},{6,0,801},{11,11,130},{140,11,609},{132,0,635},{5,11,345},{135,11,1016},
-{139,0,533},{132,0,371},{4,0,272},{135,0,836},{6,0,1282},{135,11,1100},{5,0,825}
-,{134,0,1640},{135,11,1325},{133,11,673},{4,11,287},{133,11,1018},{135,0,357},{6
-,0,467},{137,0,879},{7,0,317},{135,0,569},{6,0,924},{134,0,1588},{5,11,34},{5,10
-,406},{10,11,724},{12,11,444},{13,11,354},{18,11,32},{23,11,24},{23,11,31},{152,
-11,5},{6,0,1795},{6,0,1835},{6,0,1836},{6,0,1856},{8,0,844},{8,0,849},{8,0,854},
-{8,0,870},{8,0,887},{10,0,852},{138,0,942},{6,10,69},{135,10,117},{137,0,307},{4
-,0,944},{6,0,1799},{6,0,1825},{10,0,848},{10,0,875},{10,0,895},{10,0,899},{10,0,
-902},{140,0,773},{11,0,43},{13,0,72},{141,0,142},{135,10,1830},{134,11,382},{4,
-10,432},{135,10,824},{132,11,329},{7,0,1820},{139,11,124},{133,10,826},{133,0,
-525},{132,11,906},{7,11,1940},{136,11,366},{138,11,10},{4,11,123},{4,11,649},{5,
-11,605},{7,11,1509},{136,11,36},{6,0,110},{135,0,1681},{133,0,493},{133,11,767},
-{4,0,174},{135,0,911},{138,11,786},{8,0,417},{137,0,782},{133,10,1000},{7,0,733}
-,{137,0,583},{4,10,297},{6,10,529},{7,10,152},{7,10,713},{7,10,1845},{8,10,710},
-{8,10,717},{12,10,639},{140,10,685},{4,0,32},{5,0,215},{6,0,269},{7,0,1782},{7,0
-,1892},{10,0,16},{11,0,822},{11,0,954},{141,0,481},{4,11,273},{5,11,658},{133,11
-,995},{136,0,477},{134,11,72},{135,11,1345},{5,0,308},{7,0,1088},{4,10,520},{135
-,10,575},{133,11,589},{5,0,126},{8,0,297},{9,0,366},{140,0,374},{7,0,1551},{139,
-0,361},{5,11,117},{6,11,514},{6,11,541},{7,11,1164},{7,11,1436},{8,11,220},{8,11
-,648},{10,11,688},{139,11,560},{133,11,686},{4,0,946},{6,0,1807},{8,0,871},{10,0
-,854},{10,0,870},{10,0,888},{10,0,897},{10,0,920},{12,0,722},{12,0,761},{12,0,
-763},{12,0,764},{14,0,454},{14,0,465},{16,0,107},{18,0,167},{18,0,168},{146,0,
-172},{132,0,175},{135,0,1307},{132,0,685},{135,11,1834},{133,0,797},{6,0,745},{6
-,0,858},{134,0,963},{133,0,565},{5,10,397},{6,10,154},{7,11,196},{7,10,676},{8,
-10,443},{8,10,609},{9,10,24},{9,10,325},{10,10,35},{10,11,765},{11,11,347},{11,
-10,535},{11,11,552},{11,11,576},{11,10,672},{11,11,790},{11,10,1018},{12,11,263}
-,{12,10,637},{13,11,246},{13,11,270},{13,11,395},{14,11,74},{14,11,176},{14,11,
-190},{14,11,398},{14,11,412},{15,11,32},{15,11,63},{16,10,30},{16,11,88},{147,11
-,105},{13,11,84},{141,11,122},{4,0,252},{7,0,1068},{10,0,434},{11,0,228},{11,0,
-426},{13,0,231},{18,0,106},{148,0,87},{137,0,826},{4,11,589},{139,11,282},{5,11,
-381},{135,11,1792},{132,0,791},{5,0,231},{10,0,509},{133,10,981},{7,0,601},{9,0,
-277},{9,0,674},{10,0,178},{10,0,418},{10,0,571},{11,0,531},{12,0,113},{12,0,475}
-,{13,0,99},{142,0,428},{4,10,56},{7,11,616},{7,10,1791},{8,10,607},{8,10,651},{
-10,11,413},{11,10,465},{11,10,835},{12,10,337},{141,10,480},{7,0,1591},{144,0,43
-},{9,10,158},{138,10,411},{135,0,1683},{8,0,289},{11,0,45},{12,0,278},{140,0,537
-},{6,11,120},{7,11,1188},{7,11,1710},{8,11,286},{9,11,667},{11,11,592},{139,11,
-730},{136,10,617},{135,0,1120},{135,11,1146},{139,10,563},{4,11,352},{4,10,369},
-{135,11,687},{143,11,38},{4,0,399},{5,0,119},{5,0,494},{7,0,751},{9,0,556},{14,
-11,179},{15,11,151},{150,11,11},{4,11,192},{5,11,49},{6,11,200},{6,11,293},{6,11
-,1696},{135,11,488},{4,0,398},{133,0,660},{7,0,1030},{134,10,622},{135,11,595},{
-141,0,168},{132,11,147},{7,0,973},{10,10,624},{142,10,279},{132,10,363},{132,0,
-642},{133,11,934},{134,0,1615},{7,11,505},{135,11,523},{7,0,594},{7,0,851},{7,0,
-1858},{9,0,411},{9,0,574},{9,0,666},{9,0,737},{10,0,346},{10,0,712},{11,0,246},{
-11,0,432},{11,0,517},{11,0,647},{11,0,679},{11,0,727},{12,0,304},{12,0,305},{12,
-0,323},{12,0,483},{12,0,572},{12,0,593},{12,0,602},{13,0,95},{13,0,101},{13,0,
-171},{13,0,315},{13,0,378},{13,0,425},{13,0,475},{14,0,63},{14,0,380},{14,0,384}
-,{15,0,133},{18,0,112},{148,0,72},{135,0,1093},{132,0,679},{8,0,913},{10,0,903},
-{10,0,915},{12,0,648},{12,0,649},{14,0,455},{16,0,112},{138,11,438},{137,0,203},
-{134,10,292},{134,0,1492},{7,0,1374},{8,0,540},{5,10,177},{6,10,616},{7,10,827},
-{9,10,525},{138,10,656},{135,0,1486},{9,0,714},{138,10,31},{136,0,825},{134,0,
-1511},{132,11,637},{134,0,952},{4,10,161},{133,10,631},{5,0,143},{5,0,769},{6,0,
-1760},{7,0,682},{7,0,1992},{136,0,736},{132,0,700},{134,0,1540},{132,11,777},{9,
-11,867},{138,11,837},{7,0,1557},{135,10,1684},{133,0,860},{6,0,422},{7,0,0},{7,0
-,1544},{9,0,605},{11,0,990},{12,0,235},{12,0,453},{13,0,47},{13,0,266},{9,10,469
-},{9,10,709},{12,10,512},{14,10,65},{145,10,12},{11,0,807},{10,10,229},{11,10,73
-},{139,10,376},{6,11,170},{7,11,1080},{8,11,395},{8,11,487},{11,11,125},{141,11,
-147},{5,0,515},{137,0,131},{7,0,1605},{11,0,962},{146,0,139},{132,0,646},{4,0,
-396},{7,0,728},{9,0,117},{13,0,202},{148,0,51},{6,0,121},{6,0,124},{6,0,357},{7,
-0,1138},{7,0,1295},{8,0,162},{8,0,508},{11,0,655},{4,11,535},{6,10,558},{7,10,
-651},{8,11,618},{9,10,0},{10,10,34},{139,10,1008},{135,11,1245},{138,0,357},{150
-,11,23},{133,0,237},{135,0,1784},{7,10,1832},{138,10,374},{132,0,713},{132,11,46
-},{6,0,1536},{10,0,348},{5,11,811},{6,11,1679},{6,11,1714},{135,11,2032},{11,11,
-182},{142,11,195},{6,0,523},{7,0,738},{7,10,771},{7,10,1731},{9,10,405},{138,10,
-421},{7,11,1458},{9,11,407},{139,11,15},{6,11,34},{7,11,69},{7,11,640},{7,11,
-1089},{8,11,708},{8,11,721},{9,11,363},{9,11,643},{10,11,628},{148,11,98},{133,0
-,434},{135,0,1877},{7,0,571},{138,0,366},{5,10,881},{133,10,885},{9,0,513},{10,0
-,25},{10,0,39},{12,0,122},{140,0,187},{132,0,580},{5,10,142},{134,10,546},{132,
-11,462},{137,0,873},{5,10,466},{11,10,571},{12,10,198},{13,10,283},{14,10,186},{
-15,10,21},{143,10,103},{7,0,171},{4,10,185},{5,10,257},{5,10,839},{5,10,936},{9,
-10,399},{10,10,258},{10,10,395},{10,10,734},{11,10,1014},{12,10,23},{13,10,350},
-{14,10,150},{147,10,6},{134,0,625},{7,0,107},{7,0,838},{8,0,550},{138,0,401},{5,
-11,73},{6,11,23},{134,11,338},{4,0,943},{6,0,1850},{12,0,713},{142,0,434},{11,0,
-588},{11,0,864},{11,0,936},{11,0,968},{12,0,73},{12,0,343},{12,0,394},{13,0,275}
-,{14,0,257},{15,0,160},{7,10,404},{7,10,1377},{7,10,1430},{7,10,2017},{8,10,149}
-,{8,10,239},{8,10,512},{8,10,793},{8,10,818},{9,10,474},{9,10,595},{10,10,122},{
-10,10,565},{10,10,649},{10,10,783},{11,10,239},{11,10,295},{11,10,447},{11,10,
-528},{11,10,639},{11,10,800},{12,10,25},{12,10,157},{12,10,316},{12,10,390},{12,
-10,391},{12,10,395},{12,10,478},{12,10,503},{12,10,592},{12,10,680},{13,10,50},{
-13,10,53},{13,10,132},{13,10,198},{13,10,322},{13,10,415},{13,10,511},{14,10,71}
-,{14,10,395},{15,10,71},{15,10,136},{17,10,123},{18,10,93},{147,10,58},{133,0,
-768},{11,0,103},{142,0,0},{136,10,712},{132,0,799},{132,0,894},{7,11,725},{8,11,
-498},{139,11,268},{135,11,1798},{135,11,773},{141,11,360},{4,10,377},{152,10,13}
-,{135,0,1673},{132,11,583},{134,0,1052},{133,11,220},{140,11,69},{132,11,544},{4
-,10,180},{135,10,1906},{134,0,272},{4,0,441},{134,0,1421},{4,0,9},{5,0,128},{7,0
-,368},{11,0,480},{148,0,3},{5,11,176},{6,11,437},{6,11,564},{11,11,181},{141,11,
-183},{132,10,491},{7,0,1182},{141,11,67},{6,0,1346},{4,10,171},{138,10,234},{4,
-10,586},{7,10,1186},{138,10,631},{136,0,682},{134,0,1004},{15,0,24},{143,11,24},
-{134,0,968},{4,0,2},{6,0,742},{6,0,793},{7,0,545},{7,0,894},{9,10,931},{10,10,
-334},{148,10,71},{136,11,600},{133,10,765},{9,0,769},{140,0,185},{4,11,790},{5,
-11,273},{134,11,394},{7,0,474},{137,0,578},{4,11,135},{6,11,127},{7,11,1185},{7,
-11,1511},{8,11,613},{11,11,5},{12,11,133},{12,11,495},{12,11,586},{14,11,385},{
-15,11,118},{17,11,20},{146,11,98},{133,10,424},{5,0,530},{142,0,113},{6,11,230},
-{7,11,961},{7,11,1085},{136,11,462},{7,11,1954},{137,11,636},{136,10,714},{149,
-11,6},{135,10,685},{9,10,420},{10,10,269},{10,10,285},{10,10,576},{11,10,397},{
-13,10,175},{145,10,90},{132,10,429},{5,0,556},{5,11,162},{136,11,68},{132,11,654
-},{4,11,156},{7,11,998},{7,11,1045},{7,11,1860},{9,11,48},{9,11,692},{11,11,419}
-,{139,11,602},{6,0,1317},{8,0,16},{9,0,825},{12,0,568},{7,11,1276},{8,11,474},{
-137,11,652},{18,0,97},{7,10,18},{7,10,699},{7,10,1966},{8,10,752},{9,10,273},{9,
-10,412},{9,10,703},{10,10,71},{10,10,427},{138,10,508},{10,0,703},{7,11,1454},{
-138,11,703},{4,10,53},{5,10,186},{135,10,752},{134,0,892},{134,0,1571},{8,10,575
-},{10,10,289},{139,10,319},{6,0,186},{137,0,426},{134,0,1101},{132,10,675},{132,
-0,585},{6,0,1870},{137,0,937},{152,11,10},{9,11,197},{10,11,300},{12,11,473},{13
-,11,90},{141,11,405},{4,0,93},{5,0,252},{6,0,229},{7,0,291},{9,0,550},{139,0,644
-},{137,0,749},{9,0,162},{6,10,209},{8,10,468},{9,10,210},{11,10,36},{12,10,28},{
-12,10,630},{13,10,21},{13,10,349},{14,10,7},{145,10,13},{132,0,381},{132,11,606}
-,{4,10,342},{135,10,1179},{7,11,1587},{7,11,1707},{10,11,528},{139,11,504},{12,
-11,39},{13,11,265},{141,11,439},{4,10,928},{133,10,910},{7,10,1838},{7,11,1978},
-{136,11,676},{6,0,762},{6,0,796},{134,0,956},{4,10,318},{4,10,496},{7,10,856},{
-139,10,654},{137,11,242},{4,11,361},{133,11,315},{132,11,461},{132,11,472},{132,
-0,857},{5,0,21},{6,0,77},{6,0,157},{7,0,974},{7,0,1301},{7,0,1339},{7,0,1490},{7
-,0,1873},{9,0,628},{7,10,915},{8,10,247},{147,10,0},{4,10,202},{5,10,382},{6,10,
-454},{7,10,936},{7,10,1803},{8,10,758},{9,10,375},{9,10,895},{10,10,743},{10,10,
-792},{11,10,978},{11,10,1012},{142,10,109},{7,11,617},{10,11,498},{11,11,501},{
-12,11,16},{140,11,150},{7,10,1150},{7,10,1425},{7,10,1453},{10,11,747},{140,10,
-513},{133,11,155},{11,0,919},{141,0,409},{138,10,791},{10,0,633},{139,11,729},{7
-,11,163},{8,11,319},{9,11,402},{10,11,24},{10,11,681},{11,11,200},{11,11,567},{
-12,11,253},{12,11,410},{142,11,219},{5,11,475},{7,11,1780},{9,11,230},{11,11,297
-},{11,11,558},{14,11,322},{147,11,76},{7,0,332},{6,10,445},{137,10,909},{135,11,
-1956},{136,11,274},{134,10,578},{135,0,1489},{135,11,1848},{5,11,944},{134,11,
-1769},{132,11,144},{136,10,766},{4,0,832},{135,10,541},{8,0,398},{9,0,681},{139,
-0,632},{136,0,645},{9,0,791},{10,0,93},{16,0,13},{17,0,23},{18,0,135},{19,0,12},
-{20,0,1},{20,0,12},{148,0,14},{6,11,247},{137,11,555},{134,0,20},{132,0,800},{
-135,0,1841},{139,10,983},{137,10,768},{132,10,584},{141,11,51},{6,0,1993},{4,11,
-620},{138,11,280},{136,0,769},{11,0,290},{11,0,665},{7,11,1810},{11,11,866},{12,
-11,103},{13,11,495},{17,11,67},{147,11,74},{134,0,1426},{139,0,60},{4,10,326},{
-135,10,1770},{7,0,1874},{9,0,641},{132,10,226},{6,0,644},{5,10,426},{8,10,30},{9
-,10,2},{11,10,549},{147,10,122},{5,11,428},{138,11,442},{135,11,1871},{135,0,
-1757},{147,10,117},{135,0,937},{135,0,1652},{6,0,654},{134,0,1476},{133,11,99},{
-135,0,527},{132,10,345},{4,10,385},{4,11,397},{7,10,265},{135,10,587},{4,0,579},
-{5,0,226},{5,0,323},{135,0,960},{134,0,1486},{8,11,502},{144,11,9},{4,10,347},{5
-,10,423},{5,10,996},{135,10,1329},{7,11,727},{146,11,73},{4,11,485},{7,11,353},{
-7,10,1259},{7,11,1523},{9,10,125},{139,10,65},{6,0,325},{5,10,136},{6,11,366},{7
-,11,1384},{7,11,1601},{136,10,644},{138,11,160},{6,0,1345},{137,11,282},{18,0,91
-},{147,0,70},{136,0,404},{4,11,157},{133,11,471},{133,0,973},{6,0,135},{135,0,
-1176},{8,11,116},{11,11,551},{142,11,159},{4,0,549},{4,10,433},{133,10,719},{136
-,0,976},{5,11,160},{7,11,363},{7,11,589},{10,11,170},{141,11,55},{144,0,21},{144
-,0,51},{135,0,314},{135,10,1363},{4,11,108},{7,11,405},{10,11,491},{139,11,498},
-{146,0,4},{4,10,555},{8,10,536},{10,10,288},{139,10,1005},{135,11,1005},{6,0,281
-},{7,0,6},{8,0,282},{8,0,480},{8,0,499},{9,0,198},{10,0,143},{10,0,169},{10,0,
-211},{10,0,417},{10,0,574},{11,0,147},{11,0,395},{12,0,75},{12,0,407},{12,0,608}
-,{13,0,500},{142,0,251},{6,0,1093},{6,0,1405},{9,10,370},{138,10,90},{4,11,926},
-{133,11,983},{135,0,1776},{134,0,1528},{132,0,419},{132,11,538},{6,11,294},{7,11
-,1267},{136,11,624},{135,11,1772},{138,11,301},{4,10,257},{135,10,2031},{4,0,138
-},{7,0,1012},{7,0,1280},{9,0,76},{135,10,1768},{132,11,757},{5,0,29},{140,0,638}
-,{7,11,655},{135,11,1844},{7,0,1418},{6,11,257},{135,11,1522},{8,11,469},{138,11
-,47},{142,11,278},{6,10,83},{6,10,1733},{135,10,1389},{11,11,204},{11,11,243},{
-140,11,293},{135,11,1875},{6,0,1710},{135,0,2038},{137,11,299},{4,0,17},{5,0,23}
-,{7,0,995},{11,0,383},{11,0,437},{12,0,460},{140,0,532},{133,0,862},{137,10,696}
-,{6,0,592},{138,0,946},{138,11,599},{7,10,1718},{9,10,95},{9,10,274},{10,10,279}
-,{10,10,317},{10,10,420},{11,10,303},{11,10,808},{12,10,134},{12,10,367},{13,10,
-149},{13,10,347},{14,10,349},{14,10,406},{18,10,22},{18,10,89},{18,10,122},{147,
-10,47},{8,0,70},{12,0,171},{141,0,272},{133,10,26},{132,10,550},{137,0,812},{10,
-0,233},{139,0,76},{134,0,988},{134,0,442},{136,10,822},{7,0,896},{4,10,902},{5,
-10,809},{134,10,122},{5,11,150},{7,11,106},{8,11,603},{9,11,593},{9,11,634},{10,
-11,44},{10,11,173},{11,11,462},{11,11,515},{13,11,216},{13,11,288},{142,11,400},
-{136,0,483},{135,10,262},{6,0,1709},{133,10,620},{4,10,34},{5,10,574},{7,10,279}
-,{7,10,1624},{136,10,601},{137,10,170},{147,0,119},{12,11,108},{141,11,291},{11,
-0,69},{12,0,105},{12,0,117},{13,0,213},{14,0,13},{14,0,62},{14,0,177},{14,0,421}
-,{15,0,19},{146,0,141},{137,0,309},{11,11,278},{142,11,73},{7,0,608},{7,0,976},{
-9,0,146},{10,0,206},{10,0,596},{13,0,218},{142,0,153},{133,10,332},{6,10,261},{8
-,10,182},{139,10,943},{4,11,493},{144,11,55},{134,10,1721},{132,0,768},{4,10,933
-},{133,10,880},{7,11,555},{7,11,1316},{7,11,1412},{7,11,1839},{9,11,192},{9,11,
-589},{11,11,241},{11,11,676},{11,11,811},{11,11,891},{12,11,140},{12,11,346},{12
-,11,479},{13,11,30},{13,11,49},{13,11,381},{14,11,188},{15,11,150},{16,11,76},{
-18,11,30},{148,11,52},{4,0,518},{135,0,1136},{6,11,568},{7,11,112},{7,11,1804},{
-8,11,362},{8,11,410},{8,11,830},{9,11,514},{11,11,649},{142,11,157},{135,11,673}
-,{8,0,689},{137,0,863},{4,0,18},{7,0,145},{7,0,444},{7,0,1278},{8,0,49},{8,0,400
-},{9,0,71},{9,0,250},{10,0,459},{12,0,160},{16,0,24},{132,11,625},{140,0,1020},{
-4,0,997},{6,0,1946},{6,0,1984},{134,0,1998},{6,11,16},{6,11,158},{7,11,43},{7,11
-,129},{7,11,181},{8,11,276},{8,11,377},{10,11,523},{11,11,816},{12,11,455},{13,
-11,303},{142,11,135},{133,10,812},{134,0,658},{4,11,1},{7,11,1143},{7,11,1463},{
-8,11,61},{9,11,207},{9,11,390},{9,11,467},{139,11,836},{150,11,26},{140,0,106},{
-6,0,1827},{10,0,931},{18,0,166},{20,0,114},{4,10,137},{7,10,1178},{7,11,1319},{
-135,10,1520},{133,0,1010},{4,11,723},{5,11,895},{7,11,1031},{8,11,199},{8,11,340
-},{9,11,153},{9,11,215},{10,11,21},{10,11,59},{10,11,80},{10,11,224},{11,11,229}
-,{11,11,652},{12,11,192},{13,11,146},{142,11,91},{132,11,295},{6,11,619},{7,11,
-898},{7,11,1092},{8,11,485},{18,11,28},{147,11,116},{137,11,51},{6,10,1661},{7,
-10,1975},{7,10,2009},{135,10,2011},{5,11,309},{140,11,211},{5,0,87},{7,0,313},{7
-,0,1103},{10,0,208},{10,0,582},{11,0,389},{11,0,813},{12,0,385},{13,0,286},{14,0
-,124},{146,0,108},{5,11,125},{8,11,77},{138,11,15},{132,0,267},{133,0,703},{137,
-11,155},{133,11,439},{11,11,164},{140,11,76},{9,0,496},{5,10,89},{7,10,1915},{9,
-10,185},{9,10,235},{10,10,64},{10,10,270},{10,10,403},{10,10,469},{10,10,529},{
-10,10,590},{11,10,140},{11,10,860},{13,10,1},{13,10,422},{14,10,341},{14,10,364}
-,{17,10,93},{18,10,113},{19,10,97},{147,10,113},{133,10,695},{135,0,1121},{5,10,
-6},{6,10,183},{7,10,680},{7,10,978},{7,10,1013},{7,10,1055},{12,10,230},{13,10,
-172},{146,10,29},{4,11,8},{7,11,1152},{7,11,1153},{7,11,1715},{9,11,374},{10,11,
-478},{139,11,648},{135,11,1099},{6,10,29},{139,10,63},{4,0,561},{10,0,249},{139,
-0,209},{132,0,760},{7,11,799},{138,11,511},{136,11,87},{9,0,154},{140,0,485},{
-136,0,255},{132,0,323},{140,0,419},{132,10,311},{134,10,1740},{4,0,368},{135,0,
-641},{7,10,170},{8,10,90},{8,10,177},{8,10,415},{11,10,714},{142,10,281},{4,11,
-69},{5,11,122},{9,11,656},{138,11,464},{5,11,849},{134,11,1633},{8,0,522},{142,0
-,328},{11,10,91},{13,10,129},{15,10,101},{145,10,125},{7,0,562},{8,0,551},{4,10,
-494},{6,10,74},{7,10,44},{11,11,499},{12,10,17},{15,10,5},{148,10,11},{4,10,276}
-,{133,10,296},{9,0,92},{147,0,91},{4,10,7},{5,10,90},{5,10,158},{6,10,542},{7,10
-,221},{7,10,1574},{9,10,490},{10,10,540},{11,10,443},{139,10,757},{6,0,525},{6,0
-,1976},{8,0,806},{9,0,876},{140,0,284},{5,11,859},{7,10,588},{7,11,1160},{8,11,
-107},{9,10,175},{9,11,291},{9,11,439},{10,10,530},{10,11,663},{11,11,609},{140,
-11,197},{7,11,168},{13,11,196},{141,11,237},{139,0,958},{133,0,594},{135,10,580}
-,{7,10,88},{136,10,627},{6,0,479},{6,0,562},{7,0,1060},{13,0,6},{5,10,872},{6,10
-,57},{7,10,471},{9,10,447},{137,10,454},{136,11,413},{145,11,19},{4,11,117},{6,
-11,372},{7,11,1905},{142,11,323},{4,11,722},{139,11,471},{17,0,61},{5,10,31},{
-134,10,614},{8,10,330},{140,10,477},{7,10,1200},{138,10,460},{6,10,424},{135,10,
-1866},{6,0,1641},{136,0,820},{6,0,1556},{134,0,1618},{9,11,5},{12,11,216},{12,11
-,294},{12,11,298},{12,11,400},{12,11,518},{13,11,229},{143,11,139},{15,11,155},{
-144,11,79},{4,0,302},{135,0,1766},{5,10,13},{134,10,142},{6,0,148},{7,0,1313},{7
-,10,116},{8,10,322},{8,10,755},{9,10,548},{10,10,714},{11,10,884},{141,10,324},{
-137,0,676},{9,11,88},{139,11,270},{5,11,12},{7,11,375},{137,11,438},{134,0,1674}
-,{7,10,1472},{135,10,1554},{11,0,178},{7,10,1071},{7,10,1541},{7,10,1767},{7,10,
-1806},{11,10,162},{11,10,242},{12,10,605},{15,10,26},{144,10,44},{6,0,389},{7,0,
-149},{9,0,142},{138,0,94},{140,11,71},{145,10,115},{6,0,8},{7,0,1881},{8,0,91},{
-11,11,966},{12,11,287},{13,11,342},{13,11,402},{15,11,110},{143,11,163},{4,11,
-258},{136,11,639},{6,11,22},{7,11,903},{138,11,577},{133,11,681},{135,10,1111},{
-135,11,1286},{9,0,112},{8,10,1},{138,10,326},{5,10,488},{6,10,527},{7,10,489},{7
-,10,1636},{8,10,121},{8,10,144},{8,10,359},{9,10,193},{9,10,241},{9,10,336},{9,
-10,882},{11,10,266},{11,10,372},{11,10,944},{12,10,401},{140,10,641},{4,11,664},
-{133,11,804},{6,0,747},{134,0,1015},{135,0,1746},{9,10,31},{10,10,244},{10,10,
-699},{12,10,149},{141,10,497},{133,10,377},{135,0,24},{6,0,1352},{5,11,32},{145,
-10,101},{7,0,1530},{10,0,158},{13,0,13},{13,0,137},{13,0,258},{14,0,111},{14,0,
-225},{14,0,253},{14,0,304},{14,0,339},{14,0,417},{146,0,33},{4,0,503},{135,0,
-1661},{5,0,130},{6,0,845},{7,0,1314},{9,0,610},{10,0,718},{11,0,601},{11,0,819},
-{11,0,946},{140,0,536},{10,0,149},{11,0,280},{142,0,336},{134,0,1401},{135,0,
-1946},{8,0,663},{144,0,8},{134,0,1607},{135,10,2023},{4,11,289},{7,11,629},{7,11
-,1698},{7,11,1711},{140,11,215},{6,11,450},{136,11,109},{10,0,882},{10,0,883},{
-10,0,914},{138,0,928},{133,10,843},{136,11,705},{132,10,554},{133,10,536},{5,0,
-417},{9,10,79},{11,10,625},{145,10,7},{7,11,1238},{142,11,37},{4,0,392},{135,0,
-1597},{5,0,433},{9,0,633},{11,0,629},{132,10,424},{7,10,336},{136,10,785},{134,
-11,355},{6,0,234},{7,0,769},{9,0,18},{138,0,358},{4,10,896},{134,10,1777},{138,
-11,323},{7,0,140},{7,0,1950},{8,0,680},{11,0,817},{147,0,88},{7,0,1222},{138,0,
-386},{139,11,908},{11,0,249},{12,0,313},{16,0,66},{145,0,26},{134,0,5},{7,10,750
-},{9,10,223},{11,10,27},{11,10,466},{12,10,624},{14,10,265},{146,10,61},{134,11,
-26},{134,0,1216},{5,0,963},{134,0,1773},{4,11,414},{5,11,467},{9,11,654},{10,11,
-451},{12,11,59},{141,11,375},{135,11,17},{4,10,603},{133,10,661},{4,10,11},{6,10
-,128},{7,10,231},{7,10,1533},{138,10,725},{135,11,955},{7,0,180},{8,0,509},{136,
-0,792},{132,10,476},{132,0,1002},{133,11,538},{135,10,1807},{132,0,931},{7,0,943
-},{11,0,614},{140,0,747},{135,0,1837},{9,10,20},{10,10,324},{10,10,807},{139,10,
-488},{134,0,641},{6,11,280},{10,11,502},{11,11,344},{140,11,38},{5,11,45},{7,11,
-1161},{11,11,448},{11,11,880},{13,11,139},{13,11,407},{15,11,16},{17,11,95},{18,
-11,66},{18,11,88},{18,11,123},{149,11,7},{9,0,280},{138,0,134},{22,0,22},{23,0,5
-},{151,0,29},{136,11,777},{4,0,90},{5,0,545},{7,0,754},{9,0,186},{10,0,72},{10,0
-,782},{11,0,577},{11,0,610},{11,0,960},{12,0,354},{12,0,362},{12,0,595},{4,11,
-410},{135,11,521},{135,11,1778},{5,10,112},{6,10,103},{134,10,150},{138,10,356},
-{132,0,742},{7,0,151},{9,0,329},{139,0,254},{8,0,853},{8,0,881},{8,0,911},{8,0,
-912},{10,0,872},{12,0,741},{12,0,742},{152,0,18},{4,11,573},{136,11,655},{6,0,
-921},{134,0,934},{9,0,187},{10,0,36},{11,0,1016},{17,0,44},{146,0,64},{7,0,833},
-{136,0,517},{4,0,506},{5,0,295},{135,0,1680},{4,10,708},{8,10,15},{9,10,50},{9,
-10,386},{11,10,18},{11,10,529},{140,10,228},{7,0,251},{7,0,1701},{8,0,436},{4,10
-,563},{7,10,592},{7,10,637},{7,10,770},{8,10,463},{9,10,60},{9,10,335},{9,10,904
-},{10,10,73},{11,10,434},{12,10,585},{13,10,331},{18,10,110},{148,10,60},{132,10
-,502},{136,0,584},{6,10,347},{138,10,161},{7,0,987},{9,0,688},{10,0,522},{11,0,
-788},{12,0,137},{12,0,566},{14,0,9},{14,0,24},{14,0,64},{7,11,899},{142,11,325},
-{4,0,214},{5,0,500},{5,10,102},{6,10,284},{7,10,1079},{7,10,1423},{7,10,1702},{8
-,10,470},{9,10,554},{9,10,723},{139,10,333},{7,10,246},{135,10,840},{6,10,10},{8
-,10,571},{9,10,739},{143,10,91},{133,10,626},{146,0,195},{134,0,1775},{7,0,389},
-{7,0,700},{7,0,940},{8,0,514},{9,0,116},{9,0,535},{10,0,118},{11,0,107},{11,0,
-148},{11,0,922},{12,0,254},{12,0,421},{142,0,238},{5,10,18},{6,10,526},{13,10,24
-},{13,10,110},{19,10,5},{147,10,44},{132,0,743},{11,0,292},{4,10,309},{5,10,462}
-,{7,10,970},{135,10,1097},{22,10,30},{150,10,33},{139,11,338},{135,11,1598},{7,0
-,1283},{9,0,227},{11,0,325},{11,0,408},{14,0,180},{146,0,47},{4,0,953},{6,0,1805
-},{6,0,1814},{6,0,1862},{140,0,774},{6,11,611},{135,11,1733},{135,11,1464},{5,0,
-81},{7,0,146},{7,0,1342},{8,0,53},{8,0,561},{8,0,694},{8,0,754},{9,0,115},{9,0,
-179},{9,0,894},{10,0,462},{10,0,813},{11,0,230},{11,0,657},{11,0,699},{11,0,748}
-,{12,0,119},{12,0,200},{12,0,283},{142,0,273},{5,0,408},{6,0,789},{6,0,877},{6,0
-,1253},{6,0,1413},{137,0,747},{134,10,1704},{135,11,663},{6,0,1910},{6,0,1915},{
-6,0,1923},{9,0,913},{9,0,928},{9,0,950},{9,0,954},{9,0,978},{9,0,993},{12,0,812}
-,{12,0,819},{12,0,831},{12,0,833},{12,0,838},{12,0,909},{12,0,928},{12,0,931},{
-12,0,950},{15,0,186},{15,0,187},{15,0,195},{15,0,196},{15,0,209},{15,0,215},{15,
-0,236},{15,0,241},{15,0,249},{15,0,253},{18,0,180},{18,0,221},{18,0,224},{18,0,
-227},{18,0,229},{149,0,60},{7,0,1826},{135,0,1938},{11,0,490},{18,0,143},{5,10,
-86},{7,10,743},{9,10,85},{10,10,281},{10,10,432},{12,10,251},{13,10,118},{142,10
-,378},{5,10,524},{133,10,744},{141,11,442},{10,10,107},{140,10,436},{135,11,503}
-,{134,0,1162},{132,10,927},{7,0,30},{8,0,86},{8,0,315},{8,0,700},{9,0,576},{9,0,
-858},{10,0,414},{11,0,310},{11,0,888},{11,0,904},{12,0,361},{13,0,248},{13,0,371
-},{14,0,142},{12,10,670},{146,10,94},{134,0,721},{4,11,113},{5,11,163},{5,11,735
-},{7,11,1009},{7,10,1149},{9,11,9},{9,10,156},{9,11,771},{12,11,90},{13,11,138},
-{13,11,410},{143,11,128},{138,0,839},{133,10,778},{137,0,617},{133,10,502},{8,10
-,196},{10,10,283},{139,10,406},{6,0,428},{7,0,524},{8,0,169},{8,0,234},{9,0,480}
-,{138,0,646},{133,10,855},{134,0,1648},{7,0,1205},{138,0,637},{7,0,1596},{4,11,
-935},{133,11,823},{5,11,269},{7,11,434},{7,11,891},{8,11,339},{9,11,702},{11,11,
-594},{11,11,718},{145,11,100},{7,11,878},{9,11,485},{141,11,264},{4,0,266},{8,0,
-4},{9,0,39},{10,0,166},{11,0,918},{12,0,635},{20,0,10},{22,0,27},{22,0,43},{22,0
-,52},{134,11,1713},{7,10,1400},{9,10,446},{138,10,45},{135,11,900},{132,0,862},{
-134,0,1554},{135,11,1033},{19,0,16},{147,11,16},{135,11,1208},{7,0,157},{136,0,
-279},{6,0,604},{136,0,391},{13,10,455},{15,10,99},{15,10,129},{144,10,68},{135,
-10,172},{7,0,945},{11,0,713},{139,0,744},{4,0,973},{10,0,877},{10,0,937},{10,0,
-938},{140,0,711},{139,0,1022},{132,10,568},{142,11,143},{4,0,567},{9,0,859},{132
-,10,732},{7,0,1846},{136,0,628},{136,10,733},{133,0,762},{4,10,428},{135,10,1789
-},{10,0,784},{13,0,191},{7,10,2015},{140,10,665},{133,0,298},{7,0,633},{7,0,905}
-,{7,0,909},{7,0,1538},{9,0,767},{140,0,636},{138,10,806},{132,0,795},{139,0,301}
-,{135,0,1970},{5,11,625},{135,11,1617},{135,11,275},{7,11,37},{8,11,425},{8,11,
-693},{9,11,720},{10,11,380},{10,11,638},{11,11,273},{11,11,307},{11,11,473},{12,
-11,61},{143,11,43},{135,11,198},{134,0,1236},{7,0,369},{12,0,644},{12,0,645},{
-144,0,90},{19,0,15},{149,0,27},{6,0,71},{7,0,845},{8,0,160},{9,0,318},{6,10,1623
-},{134,10,1681},{134,0,1447},{134,0,1255},{138,0,735},{8,0,76},{132,11,168},{6,
-10,1748},{8,10,715},{9,10,802},{10,10,46},{10,10,819},{13,10,308},{14,10,351},{
-14,10,363},{146,10,67},{135,11,91},{6,0,474},{4,10,63},{133,10,347},{133,10,749}
-,{138,0,841},{133,10,366},{6,0,836},{132,11,225},{135,0,1622},{135,10,89},{140,0
-,735},{134,0,1601},{138,11,145},{6,0,1390},{137,0,804},{142,0,394},{6,11,15},{7,
-11,70},{10,11,240},{147,11,93},{6,0,96},{135,0,1426},{4,0,651},{133,0,289},{7,11
-,956},{7,10,977},{7,11,1157},{7,11,1506},{7,11,1606},{7,11,1615},{7,11,1619},{7,
-11,1736},{7,11,1775},{8,11,590},{9,11,324},{9,11,736},{9,11,774},{9,11,776},{9,
-11,784},{10,11,567},{10,11,708},{11,11,518},{11,11,613},{11,11,695},{11,11,716},
-{11,11,739},{11,11,770},{11,11,771},{11,11,848},{11,11,857},{11,11,931},{11,11,
-947},{12,11,326},{12,11,387},{12,11,484},{12,11,528},{12,11,552},{12,11,613},{13
-,11,189},{13,11,256},{13,11,340},{13,11,432},{13,11,436},{13,11,440},{13,11,454}
-,{14,11,174},{14,11,220},{14,11,284},{14,11,390},{145,11,121},{7,0,688},{8,0,35}
-,{9,0,511},{10,0,767},{147,0,118},{134,0,667},{4,0,513},{5,10,824},{133,10,941},
-{7,10,440},{8,10,230},{139,10,106},{134,0,2034},{135,11,1399},{143,11,66},{135,
-11,1529},{4,11,145},{6,11,176},{7,11,395},{9,11,562},{144,11,28},{132,11,501},{
-132,0,704},{134,0,1524},{7,0,1078},{134,11,464},{6,11,509},{10,11,82},{20,11,91}
-,{151,11,13},{4,0,720},{133,0,306},{133,0,431},{7,0,1196},{4,10,914},{5,10,800},
-{133,10,852},{135,11,1189},{10,0,54},{141,10,115},{7,10,564},{142,10,168},{5,0,
-464},{6,0,236},{7,0,696},{7,0,914},{7,0,1108},{7,0,1448},{9,0,15},{9,0,564},{10,
-0,14},{12,0,565},{13,0,449},{14,0,53},{15,0,13},{16,0,64},{17,0,41},{4,10,918},{
-133,10,876},{6,0,1418},{134,10,1764},{4,10,92},{133,10,274},{134,0,907},{4,11,
-114},{8,10,501},{9,11,492},{13,11,462},{142,11,215},{4,11,77},{5,11,361},{6,11,
-139},{6,11,401},{6,11,404},{7,11,413},{7,11,715},{7,11,1716},{11,11,279},{12,11,
-179},{12,11,258},{13,11,244},{142,11,358},{6,0,1767},{12,0,194},{145,0,107},{134
-,11,1717},{5,10,743},{142,11,329},{4,10,49},{7,10,280},{135,10,1633},{5,0,840},{
-7,11,1061},{8,11,82},{11,11,250},{12,11,420},{141,11,184},{135,11,724},{134,0,
-900},{136,10,47},{134,0,1436},{144,11,0},{6,0,675},{7,0,1008},{7,0,1560},{9,0,
-642},{11,0,236},{14,0,193},{5,10,272},{5,10,908},{5,10,942},{8,10,197},{9,10,47}
-,{11,10,538},{139,10,742},{4,0,68},{5,0,628},{5,0,634},{6,0,386},{7,0,794},{8,0,
-273},{9,0,563},{10,0,105},{10,0,171},{11,0,94},{139,0,354},{135,10,1911},{137,10
-,891},{4,0,95},{6,0,1297},{6,0,1604},{7,0,416},{139,0,830},{6,11,513},{135,11,
-1052},{7,0,731},{13,0,20},{143,0,11},{137,11,899},{10,0,850},{140,0,697},{4,0,
-662},{7,11,1417},{12,11,382},{17,11,48},{152,11,12},{133,0,736},{132,0,861},{4,
-10,407},{132,10,560},{141,10,490},{6,11,545},{7,11,565},{7,11,1669},{10,11,114},
-{11,11,642},{140,11,618},{6,0,871},{134,0,1000},{5,0,864},{10,0,648},{11,0,671},
-{15,0,46},{133,11,5},{133,0,928},{11,0,90},{13,0,7},{4,10,475},{11,10,35},{13,10
-,71},{13,10,177},{142,10,422},{136,0,332},{135,11,192},{134,0,1055},{136,11,763}
-,{11,0,986},{140,0,682},{7,0,76},{8,0,44},{9,0,884},{10,0,580},{11,0,399},{11,0,
-894},{143,0,122},{135,11,1237},{135,10,636},{11,0,300},{6,10,222},{7,10,1620},{8
-,10,409},{137,10,693},{4,11,87},{5,11,250},{10,11,601},{13,11,298},{13,11,353},{
-141,11,376},{5,0,518},{10,0,340},{11,0,175},{149,0,16},{140,0,771},{6,0,1108},{
-137,0,831},{132,0,836},{135,0,1852},{4,0,957},{6,0,1804},{8,0,842},{8,0,843},{8,
-0,851},{8,0,855},{140,0,767},{135,11,814},{4,11,57},{7,11,1195},{7,11,1438},{7,
-11,1548},{7,11,1835},{7,11,1904},{9,11,757},{10,11,604},{139,11,519},{133,10,882
-},{138,0,246},{4,0,934},{5,0,202},{8,0,610},{7,11,1897},{12,11,290},{13,11,80},{
-13,11,437},{145,11,74},{8,0,96},{9,0,36},{10,0,607},{10,0,804},{10,0,832},{11,0,
-423},{11,0,442},{12,0,309},{14,0,199},{15,0,90},{145,0,110},{132,10,426},{7,0,
-654},{8,0,240},{6,10,58},{7,10,745},{7,10,1969},{8,10,675},{9,10,479},{9,10,731}
-,{10,10,330},{10,10,593},{10,10,817},{11,10,32},{11,10,133},{11,10,221},{145,10,
-68},{9,0,13},{9,0,398},{9,0,727},{10,0,75},{10,0,184},{10,0,230},{10,0,564},{10,
-0,569},{11,0,973},{12,0,70},{12,0,189},{13,0,57},{141,0,257},{4,11,209},{135,11,
-902},{7,0,391},{137,10,538},{134,0,403},{6,11,303},{7,11,335},{7,11,1437},{7,11,
-1668},{8,11,553},{8,11,652},{8,11,656},{9,11,558},{11,11,743},{149,11,18},{132,
-11,559},{11,0,75},{142,0,267},{6,0,815},{141,11,2},{141,0,366},{137,0,631},{133,
-11,1017},{5,0,345},{135,0,1016},{133,11,709},{134,11,1745},{133,10,566},{7,0,952
-},{6,10,48},{9,10,139},{10,10,399},{11,10,469},{12,10,634},{141,10,223},{133,0,
-673},{9,0,850},{7,11,8},{136,11,206},{6,0,662},{149,0,35},{4,0,287},{133,0,1018}
-,{6,10,114},{7,10,1224},{7,10,1556},{136,10,3},{8,10,576},{137,10,267},{4,0,884}
-,{5,0,34},{10,0,724},{12,0,444},{13,0,354},{18,0,32},{23,0,24},{23,0,31},{152,0,
-5},{133,10,933},{132,11,776},{138,0,151},{136,0,427},{134,0,382},{132,0,329},{9,
-0,846},{10,0,827},{138,11,33},{9,0,279},{10,0,407},{14,0,84},{22,0,18},{135,11,
-1297},{136,11,406},{132,0,906},{136,0,366},{134,0,843},{134,0,1443},{135,0,1372}
-,{138,0,992},{4,0,123},{5,0,605},{7,0,1509},{136,0,36},{132,0,649},{8,11,175},{
-10,11,168},{138,11,573},{133,0,767},{134,0,1018},{135,11,1305},{12,10,30},{13,10
-,148},{14,10,87},{14,10,182},{16,10,42},{148,10,70},{134,11,607},{4,0,273},{5,0,
-658},{133,0,995},{6,0,72},{139,11,174},{10,0,483},{12,0,368},{7,10,56},{7,10,
-1989},{8,10,337},{8,10,738},{9,10,600},{13,10,447},{142,10,92},{5,11,784},{138,
-10,666},{135,0,1345},{139,11,882},{134,0,1293},{133,0,589},{134,0,1988},{5,0,117
-},{6,0,514},{6,0,541},{7,0,1164},{7,0,1436},{8,0,220},{8,0,648},{10,0,688},{139,
-0,560},{136,0,379},{5,0,686},{7,10,866},{135,10,1163},{132,10,328},{9,11,14},{9,
-11,441},{10,11,306},{139,11,9},{4,10,101},{135,10,1171},{5,10,833},{136,10,744},
-{5,11,161},{7,11,839},{135,11,887},{7,0,196},{10,0,765},{11,0,347},{11,0,552},{
-11,0,790},{12,0,263},{13,0,246},{13,0,270},{13,0,395},{14,0,176},{14,0,190},{14,
-0,398},{14,0,412},{15,0,32},{15,0,63},{16,0,88},{147,0,105},{6,10,9},{6,10,397},
-{7,10,53},{7,10,1742},{10,10,632},{11,10,828},{140,10,146},{5,0,381},{135,0,1792
-},{134,0,1452},{135,11,429},{8,0,367},{10,0,760},{14,0,79},{20,0,17},{152,0,0},{
-7,0,616},{138,0,413},{11,10,417},{12,10,223},{140,10,265},{7,11,1611},{13,11,14}
-,{15,11,44},{19,11,13},{148,11,76},{135,0,1229},{6,0,120},{7,0,1188},{7,0,1710},
-{8,0,286},{9,0,667},{11,0,592},{139,0,730},{135,11,1814},{135,0,1146},{4,10,186}
-,{5,10,157},{8,10,168},{138,10,6},{4,0,352},{135,0,687},{4,0,192},{5,0,49},{6,0,
-200},{6,0,293},{6,0,1696},{135,0,1151},{133,10,875},{5,10,773},{5,10,991},{6,10,
-1635},{134,10,1788},{7,10,111},{136,10,581},{6,0,935},{134,0,1151},{134,0,1050},
-{132,0,650},{132,0,147},{11,0,194},{12,0,62},{12,0,88},{11,11,194},{12,11,62},{
-140,11,88},{6,0,339},{135,0,923},{134,10,1747},{7,11,643},{136,11,236},{133,0,
-934},{7,10,1364},{7,10,1907},{141,10,158},{132,10,659},{4,10,404},{135,10,675},{
-7,11,581},{9,11,644},{137,11,699},{13,0,211},{14,0,133},{14,0,204},{15,0,64},{15
-,0,69},{15,0,114},{16,0,10},{19,0,23},{19,0,35},{19,0,39},{19,0,51},{19,0,71},{
-19,0,75},{152,0,15},{133,10,391},{5,11,54},{135,11,1513},{7,0,222},{8,0,341},{5,
-10,540},{134,10,1697},{134,10,78},{132,11,744},{136,0,293},{137,11,701},{7,11,
-930},{10,11,402},{10,11,476},{13,11,452},{18,11,55},{147,11,104},{132,0,637},{
-133,10,460},{8,11,50},{137,11,624},{132,11,572},{134,0,1159},{4,10,199},{139,10,
-34},{134,0,847},{134,10,388},{6,11,43},{7,11,38},{8,11,248},{9,11,504},{138,11,
-513},{9,0,683},{4,10,511},{6,10,608},{9,10,333},{10,10,602},{11,10,441},{11,10,
-723},{11,10,976},{140,10,357},{9,0,867},{138,0,837},{6,0,944},{135,11,326},{135,
-0,1809},{5,10,938},{7,11,783},{136,10,707},{133,11,766},{133,11,363},{6,0,170},{
-7,0,1080},{8,0,395},{8,0,487},{141,0,147},{6,11,258},{140,11,409},{4,0,535},{8,0
-,618},{5,11,249},{148,11,82},{6,0,1379},{149,11,15},{135,0,1625},{150,0,23},{5,
-11,393},{6,11,378},{7,11,1981},{9,11,32},{9,11,591},{10,11,685},{10,11,741},{142
-,11,382},{133,11,788},{7,11,1968},{10,11,19},{139,11,911},{7,11,1401},{135,11,
-1476},{4,11,61},{5,11,58},{5,11,171},{5,11,635},{5,11,683},{5,11,700},{6,11,291}
-,{6,11,566},{7,11,1650},{11,11,523},{12,11,273},{12,11,303},{15,11,39},{143,11,
-111},{6,10,469},{7,10,1709},{138,10,515},{4,0,778},{134,11,589},{132,0,46},{5,0,
-811},{6,0,1679},{6,0,1714},{135,0,2032},{7,0,1458},{9,0,407},{11,0,15},{12,0,651
-},{149,0,37},{7,0,938},{132,10,500},{6,0,34},{7,0,69},{7,0,1089},{7,0,1281},{8,0
-,708},{8,0,721},{9,0,363},{148,0,98},{10,11,231},{147,11,124},{7,11,726},{152,11
-,9},{5,10,68},{134,10,383},{136,11,583},{4,11,917},{133,11,1005},{11,10,216},{
-139,10,340},{135,11,1675},{8,0,441},{10,0,314},{143,0,3},{132,11,919},{4,10,337}
-,{6,10,353},{7,10,1934},{8,10,488},{137,10,429},{7,0,889},{7,10,1795},{8,10,259}
-,{9,10,135},{9,10,177},{9,10,860},{10,10,825},{11,10,115},{11,10,370},{11,10,405
-},{11,10,604},{12,10,10},{12,10,667},{12,10,669},{13,10,76},{14,10,310},{15,10,
-76},{15,10,147},{148,10,23},{4,10,15},{4,11,255},{5,10,22},{5,11,302},{6,11,132}
-,{6,10,244},{7,10,40},{7,11,128},{7,10,200},{7,11,283},{7,10,906},{7,10,1199},{7
-,11,1299},{9,10,616},{10,11,52},{10,11,514},{10,10,716},{11,10,635},{11,10,801},
-{11,11,925},{12,10,458},{13,11,92},{142,11,309},{132,0,462},{137,11,173},{135,10
-,1735},{8,0,525},{5,10,598},{7,10,791},{8,10,108},{137,10,123},{5,0,73},{6,0,23}
-,{134,0,338},{132,0,676},{132,10,683},{7,0,725},{8,0,498},{139,0,268},{12,0,21},
-{151,0,7},{135,0,773},{4,10,155},{135,10,1689},{4,0,164},{5,0,730},{5,10,151},{5
-,10,741},{6,11,210},{7,10,498},{7,10,870},{7,10,1542},{12,10,213},{14,10,36},{14
-,10,391},{17,10,111},{18,10,6},{18,10,46},{18,10,151},{19,10,36},{20,10,32},{20,
-10,56},{20,10,69},{20,10,102},{21,10,4},{22,10,8},{22,10,10},{22,10,14},{150,10,
-31},{4,10,624},{135,10,1752},{4,0,583},{9,0,936},{15,0,214},{18,0,199},{24,0,26}
-,{134,11,588},{7,0,1462},{11,0,659},{4,11,284},{134,11,223},{133,0,220},{139,0,
-803},{132,0,544},{4,10,492},{133,10,451},{16,0,98},{148,0,119},{4,11,218},{7,11,
-526},{143,11,137},{135,10,835},{4,11,270},{5,11,192},{6,11,332},{7,11,1322},{13,
-11,9},{13,10,70},{14,11,104},{142,11,311},{132,10,539},{140,11,661},{5,0,176},{6
-,0,437},{6,0,564},{11,0,181},{141,0,183},{135,0,1192},{6,10,113},{135,10,436},{
-136,10,718},{135,10,520},{135,0,1878},{140,11,196},{7,11,379},{8,11,481},{137,11
-,377},{5,11,1003},{6,11,149},{137,11,746},{8,11,262},{9,11,627},{10,11,18},{11,
-11,214},{11,11,404},{11,11,457},{11,11,780},{11,11,849},{11,11,913},{13,11,330},
-{13,11,401},{142,11,200},{149,0,26},{136,11,304},{132,11,142},{135,0,944},{4,0,
-790},{5,0,273},{134,0,394},{134,0,855},{4,0,135},{6,0,127},{7,0,1185},{7,0,1511}
-,{8,0,613},{11,0,5},{12,0,336},{12,0,495},{12,0,586},{12,0,660},{12,0,668},{14,0
-,385},{15,0,118},{17,0,20},{146,0,98},{6,0,230},{9,0,752},{18,0,109},{12,10,610}
-,{13,10,431},{144,10,59},{7,0,1954},{135,11,925},{4,11,471},{5,11,51},{6,11,602}
-,{8,11,484},{10,11,195},{140,11,159},{132,10,307},{136,11,688},{132,11,697},{7,
-11,812},{7,11,1261},{7,11,1360},{9,11,632},{140,11,352},{5,0,162},{8,0,68},{133,
-10,964},{4,0,654},{136,11,212},{4,0,156},{7,0,998},{7,0,1045},{7,0,1860},{9,0,48
-},{9,0,692},{11,0,419},{139,0,602},{133,11,221},{4,11,373},{5,11,283},{6,11,480}
-,{135,11,609},{142,11,216},{132,0,240},{6,11,192},{9,11,793},{145,11,55},{4,10,
-75},{5,10,180},{6,10,500},{7,10,58},{7,10,710},{138,10,645},{4,11,132},{5,11,69}
-,{5,10,649},{135,11,1242},{6,10,276},{7,10,282},{7,10,879},{7,10,924},{8,10,459}
-,{9,10,599},{9,10,754},{11,10,574},{12,10,128},{12,10,494},{13,10,52},{13,10,301
-},{15,10,30},{143,10,132},{132,10,200},{4,11,111},{135,11,302},{9,0,197},{10,0,
-300},{12,0,473},{13,0,90},{141,0,405},{132,11,767},{6,11,42},{7,11,1416},{7,11,
-1590},{7,11,2005},{8,11,131},{8,11,466},{9,11,672},{13,11,252},{148,11,103},{8,0
-,958},{8,0,999},{10,0,963},{138,0,1001},{135,10,1621},{135,0,858},{4,0,606},{137
-,11,444},{6,11,44},{136,11,368},{139,11,172},{4,11,570},{133,11,120},{139,11,624
-},{7,0,1978},{8,0,676},{6,10,225},{137,10,211},{7,0,972},{11,0,102},{136,10,687}
-,{6,11,227},{135,11,1589},{8,10,58},{9,10,724},{11,10,809},{13,10,113},{145,10,
-72},{4,0,361},{133,0,315},{132,0,461},{6,10,345},{135,10,1247},{132,0,472},{8,10
-,767},{8,10,803},{9,10,301},{137,10,903},{135,11,1333},{135,11,477},{7,10,1949},
-{136,10,674},{6,0,905},{138,0,747},{133,0,155},{134,10,259},{7,0,163},{8,0,319},
-{9,0,402},{10,0,24},{10,0,681},{11,0,200},{12,0,253},{12,0,410},{142,0,219},{5,0
-,475},{7,0,1780},{9,0,230},{11,0,297},{11,0,558},{14,0,322},{19,0,76},{6,11,1667
-},{7,11,2036},{138,11,600},{136,10,254},{6,0,848},{135,0,1956},{6,11,511},{140,
-11,132},{5,11,568},{6,11,138},{135,11,1293},{6,0,631},{137,0,838},{149,0,36},{4,
-11,565},{8,11,23},{136,11,827},{5,0,944},{134,0,1769},{4,0,144},{6,0,842},{6,0,
-1400},{4,11,922},{133,11,1023},{133,10,248},{9,10,800},{10,10,693},{11,10,482},{
-11,10,734},{139,10,789},{7,11,1002},{139,11,145},{4,10,116},{5,10,95},{5,10,445}
-,{7,10,1688},{8,10,29},{9,10,272},{11,10,509},{139,10,915},{14,0,369},{146,0,72}
-,{135,10,1641},{132,11,740},{133,10,543},{140,11,116},{6,0,247},{9,0,555},{5,10,
-181},{136,10,41},{133,10,657},{136,0,996},{138,10,709},{7,0,189},{8,10,202},{138
-,10,536},{136,11,402},{4,11,716},{141,11,31},{10,0,280},{138,0,797},{9,10,423},{
-140,10,89},{8,10,113},{9,10,877},{10,10,554},{11,10,83},{12,10,136},{147,10,109}
-,{133,10,976},{7,0,746},{132,10,206},{136,0,526},{139,0,345},{136,0,1017},{8,11,
-152},{9,11,53},{9,11,268},{9,11,901},{10,11,518},{10,11,829},{11,11,188},{13,11,
-74},{14,11,46},{15,11,17},{15,11,33},{17,11,40},{18,11,36},{19,11,20},{22,11,1},
-{152,11,2},{133,11,736},{136,11,532},{5,0,428},{138,0,651},{135,11,681},{135,0,
-1162},{7,0,327},{13,0,230},{17,0,113},{8,10,226},{10,10,537},{11,10,570},{11,10,
-605},{11,10,799},{11,10,804},{12,10,85},{12,10,516},{12,10,623},{12,11,677},{13,
-10,361},{14,10,77},{14,10,78},{147,10,110},{4,0,792},{7,0,1717},{10,0,546},{132,
-10,769},{4,11,684},{136,11,384},{132,10,551},{134,0,1203},{9,10,57},{9,10,459},{
-10,10,425},{11,10,119},{12,10,184},{12,10,371},{13,10,358},{145,10,51},{5,0,672}
-,{5,10,814},{8,10,10},{9,10,421},{9,10,729},{10,10,609},{139,10,689},{138,0,189}
-,{134,10,624},{7,11,110},{7,11,188},{8,11,290},{8,11,591},{9,11,382},{9,11,649},
-{11,11,71},{11,11,155},{11,11,313},{12,11,5},{13,11,325},{142,11,287},{133,0,99}
-,{6,0,1053},{135,0,298},{7,11,360},{7,11,425},{9,11,66},{9,11,278},{138,11,644},
-{4,0,397},{136,0,555},{137,10,269},{132,10,528},{4,11,900},{133,11,861},{6,0,
-1157},{5,11,254},{7,11,985},{136,11,73},{7,11,1959},{136,11,683},{12,0,398},{20,
-0,39},{21,0,11},{150,0,41},{4,0,485},{7,0,353},{135,0,1523},{6,0,366},{7,0,1384}
-,{135,0,1601},{138,0,787},{137,0,282},{5,10,104},{6,10,173},{135,10,1631},{139,
-11,146},{4,0,157},{133,0,471},{134,0,941},{132,11,725},{7,0,1336},{8,10,138},{8,
-10,342},{9,10,84},{10,10,193},{11,10,883},{140,10,359},{134,11,196},{136,0,116},
-{133,11,831},{134,0,787},{134,10,95},{6,10,406},{10,10,409},{10,10,447},{11,10,
-44},{140,10,100},{5,0,160},{7,0,363},{7,0,589},{10,0,170},{141,0,55},{134,0,1815
-},{132,0,866},{6,0,889},{6,0,1067},{6,0,1183},{4,11,321},{134,11,569},{5,11,848}
-,{134,11,66},{4,11,36},{6,10,1636},{7,11,1387},{10,11,205},{11,11,755},{141,11,
-271},{132,0,689},{9,0,820},{4,10,282},{7,10,1034},{11,10,398},{11,10,634},{12,10
-,1},{12,10,79},{12,10,544},{14,10,237},{17,10,10},{146,10,20},{4,0,108},{7,0,804
-},{139,0,498},{132,11,887},{6,0,1119},{135,11,620},{6,11,165},{138,11,388},{5,0,
-244},{5,10,499},{6,10,476},{7,10,600},{7,10,888},{135,10,1096},{140,0,609},{135,
-0,1005},{4,0,412},{133,0,581},{4,11,719},{135,11,155},{7,10,296},{7,10,596},{8,
-10,560},{8,10,586},{9,10,612},{11,10,304},{12,10,46},{13,10,89},{14,10,112},{145
-,10,122},{4,0,895},{133,0,772},{142,11,307},{135,0,1898},{4,0,926},{133,0,983},{
-4,11,353},{6,11,146},{6,11,1789},{7,11,288},{7,11,990},{7,11,1348},{9,11,665},{9
-,11,898},{11,11,893},{142,11,212},{132,0,538},{133,11,532},{6,0,294},{7,0,1267},
-{8,0,624},{141,0,496},{7,0,1325},{4,11,45},{135,11,1257},{138,0,301},{9,0,298},{
-12,0,291},{13,0,276},{14,0,6},{17,0,18},{21,0,32},{7,10,1599},{7,10,1723},{8,10,
-79},{8,10,106},{8,10,190},{8,10,302},{8,10,383},{8,10,713},{9,10,119},{9,10,233}
-,{9,10,419},{9,10,471},{10,10,181},{10,10,406},{11,10,57},{11,10,85},{11,10,120}
-,{11,10,177},{11,10,296},{11,10,382},{11,10,454},{11,10,758},{11,10,999},{12,10,
-27},{12,10,131},{12,10,245},{12,10,312},{12,10,446},{12,10,454},{13,10,98},{13,
-10,426},{13,10,508},{14,10,163},{14,10,272},{14,10,277},{14,10,370},{15,10,95},{
-15,10,138},{15,10,167},{17,10,38},{148,10,96},{132,0,757},{134,0,1263},{4,0,820}
-,{134,10,1759},{133,0,722},{136,11,816},{138,10,372},{145,10,16},{134,0,1039},{4
-,0,991},{134,0,2028},{133,10,258},{7,0,1875},{139,0,124},{6,11,559},{6,11,1691},
-{135,11,586},{5,0,324},{7,0,881},{8,10,134},{9,10,788},{140,10,438},{7,11,1823},
-{139,11,693},{6,0,1348},{134,0,1545},{134,0,911},{132,0,954},{8,0,329},{8,0,414}
-,{7,10,1948},{135,10,2004},{5,0,517},{6,10,439},{7,10,780},{135,10,1040},{132,0,
-816},{5,10,1},{6,10,81},{138,10,520},{9,0,713},{10,0,222},{5,10,482},{8,10,98},{
-10,10,700},{10,10,822},{11,10,302},{11,10,778},{12,10,50},{12,10,127},{12,10,396
-},{13,10,62},{13,10,328},{14,10,122},{147,10,72},{137,0,33},{5,10,2},{7,10,1494}
-,{136,10,589},{6,10,512},{7,10,797},{8,10,253},{9,10,77},{10,10,1},{10,11,108},{
-10,10,129},{10,10,225},{11,11,116},{11,10,118},{11,10,226},{11,10,251},{11,10,
-430},{11,10,701},{11,10,974},{11,10,982},{12,10,64},{12,10,260},{12,10,488},{140
-,10,690},{134,11,456},{133,11,925},{5,0,150},{7,0,106},{7,0,774},{8,0,603},{9,0,
-593},{9,0,634},{10,0,44},{10,0,173},{11,0,462},{11,0,515},{13,0,216},{13,0,288},
-{142,0,400},{137,10,347},{5,0,748},{134,0,553},{12,0,108},{141,0,291},{7,0,420},
-{4,10,12},{7,10,522},{7,10,809},{8,10,797},{141,10,88},{6,11,193},{7,11,240},{7,
-11,1682},{10,11,51},{10,11,640},{11,11,410},{13,11,82},{14,11,247},{14,11,331},{
-142,11,377},{133,10,528},{135,0,1777},{4,0,493},{144,0,55},{136,11,633},{139,0,
-81},{6,0,980},{136,0,321},{148,10,109},{5,10,266},{9,10,290},{9,10,364},{10,10,
-293},{11,10,606},{142,10,45},{6,0,568},{7,0,112},{7,0,1804},{8,0,362},{8,0,410},
-{8,0,830},{9,0,514},{11,0,649},{142,0,157},{4,0,74},{6,0,510},{6,10,594},{9,10,
-121},{10,10,49},{10,10,412},{139,10,834},{134,0,838},{136,10,748},{132,10,466},{
-132,0,625},{135,11,1443},{4,11,237},{135,11,514},{9,10,378},{141,10,162},{6,0,16
-},{6,0,158},{7,0,43},{7,0,129},{7,0,181},{8,0,276},{8,0,377},{10,0,523},{11,0,
-816},{12,0,455},{13,0,303},{142,0,135},{135,0,281},{4,0,1},{7,0,1143},{7,0,1463}
-,{8,0,61},{9,0,207},{9,0,390},{9,0,467},{139,0,836},{6,11,392},{7,11,65},{135,11
-,2019},{132,10,667},{4,0,723},{5,0,895},{7,0,1031},{8,0,199},{8,0,340},{9,0,153}
-,{9,0,215},{10,0,21},{10,0,59},{10,0,80},{10,0,224},{10,0,838},{11,0,229},{11,0,
-652},{12,0,192},{13,0,146},{142,0,91},{132,0,295},{137,0,51},{9,11,222},{10,11,
-43},{139,11,900},{5,0,309},{140,0,211},{5,0,125},{8,0,77},{138,0,15},{136,11,604
-},{138,0,789},{5,0,173},{4,10,39},{7,10,1843},{8,10,407},{11,10,144},{140,10,523
-},{138,11,265},{133,0,439},{132,10,510},{7,0,648},{7,0,874},{11,0,164},{12,0,76}
-,{18,0,9},{7,10,1980},{10,10,487},{138,10,809},{12,0,111},{14,0,294},{19,0,45},{
-13,10,260},{146,10,63},{133,11,549},{134,10,570},{4,0,8},{7,0,1152},{7,0,1153},{
-7,0,1715},{9,0,374},{10,0,478},{139,0,648},{135,0,1099},{5,0,575},{6,0,354},{135
-,0,701},{7,11,36},{8,11,201},{136,11,605},{4,10,787},{136,11,156},{6,0,518},{149
-,11,13},{140,11,224},{134,0,702},{132,10,516},{5,11,724},{10,11,305},{11,11,151}
-,{12,11,33},{12,11,121},{12,11,381},{17,11,3},{17,11,27},{17,11,78},{18,11,18},{
-19,11,54},{149,11,5},{8,0,87},{4,11,523},{5,11,638},{11,10,887},{14,10,365},{142
-,10,375},{138,0,438},{136,10,821},{135,11,1908},{6,11,242},{7,11,227},{7,11,1581
-},{8,11,104},{9,11,113},{9,11,220},{9,11,427},{10,11,74},{10,11,239},{11,11,579}
-,{11,11,1023},{13,11,4},{13,11,204},{13,11,316},{18,11,95},{148,11,86},{4,0,69},
-{5,0,122},{5,0,849},{6,0,1633},{9,0,656},{138,0,464},{7,0,1802},{4,10,10},{139,
-10,786},{135,11,861},{139,0,499},{7,0,476},{7,0,1592},{138,0,87},{133,10,684},{4
-,0,840},{134,10,27},{142,0,283},{6,0,1620},{7,11,1328},{136,11,494},{5,0,859},{7
-,0,1160},{8,0,107},{9,0,291},{9,0,439},{10,0,663},{11,0,609},{140,0,197},{7,11,
-1306},{8,11,505},{9,11,482},{10,11,126},{11,11,225},{12,11,347},{12,11,449},{13,
-11,19},{142,11,218},{5,11,268},{10,11,764},{12,11,120},{13,11,39},{145,11,127},{
-145,10,56},{7,11,1672},{10,11,472},{11,11,189},{143,11,51},{6,10,342},{6,10,496}
-,{8,10,275},{137,10,206},{133,0,600},{4,0,117},{6,0,372},{7,0,1905},{142,0,323},
-{4,10,909},{5,10,940},{135,11,1471},{132,10,891},{4,0,722},{139,0,471},{4,11,384
-},{135,11,1022},{132,10,687},{9,0,5},{12,0,216},{12,0,294},{12,0,298},{12,0,400}
-,{12,0,518},{13,0,229},{143,0,139},{135,11,1703},{7,11,1602},{10,11,698},{12,11,
-212},{141,11,307},{6,10,41},{141,10,160},{135,11,1077},{9,11,159},{11,11,28},{
-140,11,603},{4,0,514},{7,0,1304},{138,0,477},{134,0,1774},{9,0,88},{139,0,270},{
-5,0,12},{7,0,375},{9,0,438},{134,10,1718},{132,11,515},{136,10,778},{8,11,632},{
-8,11,697},{137,11,854},{6,0,362},{6,0,997},{146,0,51},{7,0,816},{7,0,1241},{9,0,
-283},{9,0,520},{10,0,213},{10,0,307},{10,0,463},{10,0,671},{10,0,746},{11,0,401}
-,{11,0,794},{12,0,517},{18,0,107},{147,0,115},{133,10,115},{150,11,28},{4,11,136
-},{133,11,551},{142,10,314},{132,0,258},{6,0,22},{7,0,903},{7,0,1963},{8,0,639},
-{138,0,577},{5,0,681},{8,0,782},{13,0,130},{17,0,84},{5,10,193},{140,10,178},{9,
-11,17},{138,11,291},{7,11,1287},{9,11,44},{10,11,552},{10,11,642},{11,11,839},{
-12,11,274},{12,11,275},{12,11,372},{13,11,91},{142,11,125},{135,10,174},{4,0,664
-},{5,0,804},{139,0,1013},{134,0,942},{6,0,1349},{6,0,1353},{6,0,1450},{7,11,1518
-},{139,11,694},{11,0,356},{4,10,122},{5,10,796},{5,10,952},{6,10,1660},{6,10,
-1671},{8,10,567},{9,10,687},{9,10,742},{10,10,686},{11,10,682},{140,10,281},{5,0
-,32},{6,11,147},{7,11,886},{9,11,753},{138,11,268},{5,10,179},{7,10,1095},{135,
-10,1213},{4,10,66},{7,10,722},{135,10,904},{135,10,352},{9,11,245},{138,11,137},
-{4,0,289},{7,0,629},{7,0,1698},{7,0,1711},{12,0,215},{133,11,414},{6,0,1975},{
-135,11,1762},{6,0,450},{136,0,109},{141,10,35},{134,11,599},{136,0,705},{133,0,
-664},{134,11,1749},{11,11,402},{12,11,109},{12,11,431},{13,11,179},{13,11,206},{
-14,11,175},{14,11,217},{16,11,3},{148,11,53},{135,0,1238},{134,11,1627},{132,11,
-488},{13,0,318},{10,10,592},{10,10,753},{12,10,317},{12,10,355},{12,10,465},{12,
-10,469},{12,10,560},{140,10,578},{133,10,564},{132,11,83},{140,11,676},{6,0,1872
-},{6,0,1906},{6,0,1907},{9,0,934},{9,0,956},{9,0,960},{9,0,996},{12,0,794},{12,0
-,876},{12,0,880},{12,0,918},{15,0,230},{18,0,234},{18,0,238},{21,0,38},{149,0,62
-},{134,10,556},{134,11,278},{137,0,103},{7,10,544},{8,10,719},{138,10,61},{4,10,
-5},{5,10,498},{8,10,637},{137,10,521},{7,0,777},{12,0,229},{12,0,239},{15,0,12},
-{12,11,229},{12,11,239},{143,11,12},{6,0,26},{7,11,388},{7,11,644},{139,11,781},
-{7,11,229},{8,11,59},{9,11,190},{9,11,257},{10,11,378},{140,11,191},{133,10,927}
-,{135,10,1441},{4,10,893},{5,10,780},{133,10,893},{4,0,414},{5,0,467},{9,0,654},
-{10,0,451},{12,0,59},{141,0,375},{142,0,173},{135,0,17},{7,0,1350},{133,10,238},
-{135,0,955},{4,0,960},{10,0,887},{12,0,753},{18,0,161},{18,0,162},{152,0,19},{
-136,11,344},{6,10,1729},{137,11,288},{132,11,660},{4,0,217},{5,0,710},{7,0,760},
-{7,0,1926},{9,0,428},{9,0,708},{10,0,254},{10,0,296},{10,0,720},{11,0,109},{11,0
-,255},{12,0,165},{12,0,315},{13,0,107},{13,0,203},{14,0,54},{14,0,99},{14,0,114}
-,{14,0,388},{16,0,85},{17,0,9},{17,0,33},{20,0,25},{20,0,28},{20,0,29},{21,0,9},
-{21,0,10},{21,0,34},{22,0,17},{4,10,60},{7,10,1800},{8,10,314},{9,10,700},{139,
-10,487},{7,11,1035},{138,11,737},{7,11,690},{9,11,217},{9,11,587},{140,11,521},{
-6,0,919},{7,11,706},{7,11,1058},{138,11,538},{7,10,1853},{138,10,437},{136,10,
-419},{6,0,280},{10,0,502},{11,0,344},{140,0,38},{5,0,45},{7,0,1161},{11,0,448},{
-11,0,880},{13,0,139},{13,0,407},{15,0,16},{17,0,95},{18,0,66},{18,0,88},{18,0,
-123},{149,0,7},{11,11,92},{11,11,196},{11,11,409},{11,11,450},{11,11,666},{11,11
-,777},{12,11,262},{13,11,385},{13,11,393},{15,11,115},{16,11,45},{145,11,82},{
-136,0,777},{134,11,1744},{4,0,410},{7,0,521},{133,10,828},{134,0,673},{7,0,1110}
-,{7,0,1778},{7,10,176},{135,10,178},{5,10,806},{7,11,268},{7,10,1976},{136,11,
-569},{4,11,733},{9,11,194},{10,11,92},{11,11,198},{12,11,84},{12,11,87},{13,11,
-128},{144,11,74},{5,0,341},{7,0,1129},{11,0,414},{4,10,51},{6,10,4},{7,10,591},{
-7,10,849},{7,10,951},{7,10,1613},{7,10,1760},{7,10,1988},{9,10,434},{10,10,754},
-{11,10,25},{139,10,37},{133,10,902},{135,10,928},{135,0,787},{132,0,436},{134,10
-,270},{7,0,1587},{135,0,1707},{6,0,377},{7,0,1025},{9,0,613},{145,0,104},{7,11,
-982},{7,11,1361},{10,11,32},{143,11,56},{139,0,96},{132,0,451},{132,10,416},{142
-,10,372},{5,10,152},{5,10,197},{7,11,306},{7,10,340},{7,10,867},{10,10,548},{10,
-10,581},{11,10,6},{12,10,3},{12,10,19},{14,10,110},{142,10,289},{134,0,680},{134
-,11,609},{7,0,483},{7,10,190},{8,10,28},{8,10,141},{8,10,444},{8,10,811},{9,10,
-468},{11,10,334},{12,10,24},{12,10,386},{140,10,576},{10,0,916},{133,10,757},{5,
-10,721},{135,10,1553},{133,11,178},{134,0,937},{132,10,898},{133,0,739},{147,0,
-82},{135,0,663},{146,0,128},{5,10,277},{141,10,247},{134,0,1087},{132,10,435},{6
-,11,381},{7,11,645},{7,11,694},{136,11,546},{7,0,503},{135,0,1885},{6,0,1965},{8
-,0,925},{138,0,955},{4,0,113},{5,0,163},{5,0,735},{7,0,1009},{9,0,9},{9,0,771},{
-12,0,90},{13,0,138},{13,0,410},{143,0,128},{4,0,324},{138,0,104},{7,0,460},{5,10
-,265},{134,10,212},{133,11,105},{7,11,261},{7,11,1107},{7,11,1115},{7,11,1354},{
-7,11,1588},{7,11,1705},{7,11,1902},{9,11,465},{10,11,248},{10,11,349},{10,11,647
-},{11,11,527},{11,11,660},{11,11,669},{12,11,529},{141,11,305},{5,11,438},{9,11,
-694},{12,11,627},{141,11,210},{152,11,11},{4,0,935},{133,0,823},{132,10,702},{5,
-0,269},{7,0,434},{7,0,891},{8,0,339},{9,0,702},{11,0,594},{11,0,718},{17,0,100},
-{5,10,808},{135,10,2045},{7,0,1014},{9,0,485},{141,0,264},{134,0,1713},{7,0,1810
-},{11,0,866},{12,0,103},{13,0,495},{140,11,233},{4,0,423},{10,0,949},{138,0,1013
-},{135,0,900},{8,11,25},{138,11,826},{5,10,166},{8,10,739},{140,10,511},{134,0,
-2018},{7,11,1270},{139,11,612},{4,10,119},{5,10,170},{5,10,447},{7,10,1708},{7,
-10,1889},{9,10,357},{9,10,719},{12,10,486},{140,10,596},{12,0,574},{140,11,574},
-{132,11,308},{6,0,964},{6,0,1206},{134,0,1302},{4,10,450},{135,10,1158},{135,11,
-150},{136,11,649},{14,0,213},{148,0,38},{9,11,45},{9,11,311},{141,11,42},{134,11
-,521},{7,10,1375},{7,10,1466},{138,10,331},{132,10,754},{5,11,339},{7,11,1442},{
-14,11,3},{15,11,41},{147,11,66},{136,11,378},{134,0,1022},{5,10,850},{136,10,799
-},{142,0,143},{135,0,2029},{134,11,1628},{8,0,523},{150,0,34},{5,0,625},{135,0,
-1617},{7,0,275},{7,10,238},{7,10,2033},{8,10,120},{8,10,188},{8,10,659},{9,10,
-598},{10,10,466},{12,10,342},{12,10,588},{13,10,503},{14,10,246},{143,10,92},{7,
-0,37},{8,0,425},{8,0,693},{9,0,720},{10,0,380},{10,0,638},{11,0,273},{11,0,473},
-{12,0,61},{143,0,43},{135,11,829},{135,0,1943},{132,0,765},{5,11,486},{135,11,
-1349},{7,11,1635},{8,11,17},{10,11,217},{138,11,295},{4,10,201},{7,10,1744},{8,
-10,602},{11,10,247},{11,10,826},{145,10,65},{138,11,558},{11,0,551},{142,0,159},
-{8,10,164},{146,10,62},{139,11,176},{132,0,168},{136,0,1010},{134,0,1994},{135,0
-,91},{138,0,532},{135,10,1243},{135,0,1884},{132,10,907},{5,10,100},{10,10,329},
-{12,10,416},{149,10,29},{134,11,447},{132,10,176},{5,10,636},{5,10,998},{7,10,9}
-,{7,10,1508},{8,10,26},{9,10,317},{9,10,358},{10,10,210},{10,10,292},{10,10,533}
-,{11,10,555},{12,10,526},{12,10,607},{13,10,263},{13,10,459},{142,10,271},{4,11,
-609},{135,11,756},{6,0,15},{7,0,70},{10,0,240},{147,0,93},{4,11,930},{133,11,947
-},{134,0,1227},{134,0,1534},{133,11,939},{133,11,962},{5,11,651},{8,11,170},{9,
-11,61},{9,11,63},{10,11,23},{10,11,37},{10,11,834},{11,11,4},{11,11,187},{11,11,
-281},{11,11,503},{11,11,677},{12,11,96},{12,11,130},{12,11,244},{14,11,5},{14,11
-,40},{14,11,162},{14,11,202},{146,11,133},{4,11,406},{5,11,579},{12,11,492},{150
-,11,15},{139,0,392},{6,10,610},{10,10,127},{141,10,27},{7,0,655},{7,0,1844},{136
-,10,119},{4,0,145},{6,0,176},{7,0,395},{137,0,562},{132,0,501},{140,11,145},{136
-,0,1019},{134,0,509},{139,0,267},{6,11,17},{7,11,16},{7,11,1001},{7,11,1982},{9,
-11,886},{10,11,489},{10,11,800},{11,11,782},{12,11,320},{13,11,467},{14,11,145},
-{14,11,387},{143,11,119},{145,11,17},{6,0,1099},{133,11,458},{7,11,1983},{8,11,0
-},{8,11,171},{9,11,120},{9,11,732},{10,11,473},{11,11,656},{11,11,998},{18,11,0}
-,{18,11,2},{147,11,21},{12,11,427},{146,11,38},{10,0,948},{138,0,968},{7,10,126}
-,{136,10,84},{136,10,790},{4,0,114},{9,0,492},{13,0,462},{142,0,215},{6,10,64},{
-12,10,377},{141,10,309},{4,0,77},{5,0,361},{6,0,139},{6,0,401},{6,0,404},{7,0,
-413},{7,0,715},{7,0,1716},{11,0,279},{12,0,179},{12,0,258},{13,0,244},{142,0,358
-},{134,0,1717},{7,0,772},{7,0,1061},{7,0,1647},{8,0,82},{11,0,250},{11,0,607},{
-12,0,311},{12,0,420},{13,0,184},{13,0,367},{7,10,1104},{11,10,269},{11,10,539},{
-11,10,627},{11,10,706},{11,10,975},{12,10,248},{12,10,434},{12,10,600},{12,10,
-622},{13,10,297},{13,10,485},{14,10,69},{14,10,409},{143,10,108},{135,0,724},{4,
-11,512},{4,11,519},{133,11,342},{134,0,1133},{145,11,29},{11,10,977},{141,10,507
-},{6,0,841},{6,0,1042},{6,0,1194},{10,0,993},{140,0,1021},{6,11,31},{7,11,491},{
-7,11,530},{8,11,592},{9,10,34},{11,11,53},{11,10,484},{11,11,779},{12,11,167},{
-12,11,411},{14,11,14},{14,11,136},{15,11,72},{16,11,17},{144,11,72},{4,0,1021},{
-6,0,2037},{133,11,907},{7,0,373},{8,0,335},{8,0,596},{9,0,488},{6,10,1700},{7,10
-,293},{7,10,382},{7,10,1026},{7,10,1087},{7,10,2027},{8,10,252},{8,10,727},{8,10
-,729},{9,10,30},{9,10,199},{9,10,231},{9,10,251},{9,10,334},{9,10,361},{9,10,712
-},{10,10,55},{10,10,60},{10,10,232},{10,10,332},{10,10,384},{10,10,396},{10,10,
-504},{10,10,542},{10,10,652},{11,10,20},{11,10,48},{11,10,207},{11,10,291},{11,
-10,298},{11,10,342},{11,10,365},{11,10,394},{11,10,620},{11,10,705},{11,10,1017}
-,{12,10,123},{12,10,340},{12,10,406},{12,10,643},{13,10,61},{13,10,269},{13,10,
-311},{13,10,319},{13,10,486},{14,10,234},{15,10,62},{15,10,85},{16,10,71},{18,10
-,119},{148,10,105},{150,0,37},{4,11,208},{5,11,106},{6,11,531},{8,11,408},{9,11,
-188},{138,11,572},{132,0,564},{6,0,513},{135,0,1052},{132,0,825},{9,0,899},{140,
-11,441},{134,0,778},{133,11,379},{7,0,1417},{12,0,382},{17,0,48},{152,0,12},{132
-,11,241},{7,0,1116},{6,10,379},{7,10,270},{8,10,176},{8,10,183},{9,10,432},{9,10
-,661},{12,10,247},{12,10,617},{146,10,125},{5,10,792},{133,10,900},{6,0,545},{7,
-0,565},{7,0,1669},{10,0,114},{11,0,642},{140,0,618},{133,0,5},{138,11,7},{132,11
-,259},{135,0,192},{134,0,701},{136,0,763},{135,10,1979},{4,10,901},{133,10,776},
-{10,0,755},{147,0,29},{133,0,759},{4,11,173},{5,11,312},{5,11,512},{135,11,1285}
-,{7,11,1603},{7,11,1691},{9,11,464},{11,11,195},{12,11,279},{12,11,448},{14,11,
-11},{147,11,102},{7,0,370},{7,0,1007},{7,0,1177},{135,0,1565},{135,0,1237},{4,0,
-87},{5,0,250},{141,0,298},{4,11,452},{5,11,583},{5,11,817},{6,11,433},{7,11,593}
-,{7,11,720},{7,11,1378},{8,11,161},{9,11,284},{10,11,313},{139,11,886},{4,11,547
-},{135,11,1409},{136,11,722},{4,10,37},{5,10,334},{135,10,1253},{132,10,508},{12
-,0,107},{146,0,31},{8,11,420},{139,11,193},{135,0,814},{135,11,409},{140,0,991},
-{4,0,57},{7,0,1195},{7,0,1438},{7,0,1548},{7,0,1835},{7,0,1904},{9,0,757},{10,0,
-604},{139,0,519},{132,0,540},{138,11,308},{132,10,533},{136,0,608},{144,11,65},{
-4,0,1014},{134,0,2029},{4,0,209},{7,0,902},{5,11,1002},{136,11,745},{134,0,2030}
-,{6,0,303},{7,0,335},{7,0,1437},{7,0,1668},{8,0,553},{8,0,652},{8,0,656},{9,0,
-558},{11,0,743},{149,0,18},{5,11,575},{6,11,354},{135,11,701},{4,11,239},{6,11,
-477},{7,11,1607},{11,11,68},{139,11,617},{132,0,559},{8,0,527},{18,0,60},{147,0,
-24},{133,10,920},{138,0,511},{133,0,1017},{133,0,675},{138,10,391},{11,0,156},{
-135,10,1952},{138,11,369},{132,11,367},{133,0,709},{6,0,698},{134,0,887},{142,10
-,126},{134,0,1745},{132,10,483},{13,11,299},{142,11,75},{133,0,714},{7,0,8},{136
-,0,206},{138,10,480},{4,11,694},{9,10,495},{146,10,104},{7,11,1248},{11,11,621},
-{139,11,702},{140,11,687},{132,0,776},{139,10,1009},{135,0,1272},{134,0,1059},{8
-,10,653},{13,10,93},{147,10,14},{135,11,213},{136,0,406},{133,10,172},{132,0,947
-},{8,0,175},{10,0,168},{138,0,573},{132,0,870},{6,0,1567},{151,11,28},{134,11,
-472},{5,10,260},{136,11,132},{4,11,751},{11,11,390},{140,11,32},{4,11,409},{133,
-11,78},{12,0,554},{6,11,473},{145,11,105},{133,0,784},{8,0,908},{136,11,306},{
-139,0,882},{6,0,358},{7,0,1393},{8,0,396},{10,0,263},{14,0,154},{16,0,48},{17,0,
-8},{7,11,1759},{8,11,396},{10,11,263},{14,11,154},{16,11,48},{145,11,8},{13,11,
-163},{13,11,180},{18,11,78},{148,11,35},{14,0,32},{18,0,85},{20,0,2},{152,0,16},
-{7,0,228},{10,0,770},{8,10,167},{8,10,375},{9,10,82},{9,10,561},{138,10,620},{
-132,0,845},{9,0,14},{9,0,441},{10,0,306},{139,0,9},{11,0,966},{12,0,287},{13,0,
-342},{13,0,402},{15,0,110},{15,0,163},{8,10,194},{136,10,756},{134,0,1578},{4,0,
-967},{6,0,1820},{6,0,1847},{140,0,716},{136,0,594},{7,0,1428},{7,0,1640},{7,0,
-1867},{9,0,169},{9,0,182},{9,0,367},{9,0,478},{9,0,506},{9,0,551},{9,0,557},{9,0
-,648},{9,0,697},{9,0,705},{9,0,725},{9,0,787},{9,0,794},{10,0,198},{10,0,214},{
-10,0,267},{10,0,275},{10,0,456},{10,0,551},{10,0,561},{10,0,613},{10,0,627},{10,
-0,668},{10,0,675},{10,0,691},{10,0,695},{10,0,707},{10,0,715},{11,0,183},{11,0,
-201},{11,0,244},{11,0,262},{11,0,352},{11,0,439},{11,0,493},{11,0,572},{11,0,591
-},{11,0,608},{11,0,611},{11,0,646},{11,0,674},{11,0,711},{11,0,751},{11,0,761},{
-11,0,776},{11,0,785},{11,0,850},{11,0,853},{11,0,862},{11,0,865},{11,0,868},{11,
-0,875},{11,0,898},{11,0,902},{11,0,903},{11,0,910},{11,0,932},{11,0,942},{11,0,
-957},{11,0,967},{11,0,972},{12,0,148},{12,0,195},{12,0,220},{12,0,237},{12,0,318
-},{12,0,339},{12,0,393},{12,0,445},{12,0,450},{12,0,474},{12,0,505},{12,0,509},{
-12,0,533},{12,0,591},{12,0,594},{12,0,597},{12,0,621},{12,0,633},{12,0,642},{13,
-0,59},{13,0,60},{13,0,145},{13,0,239},{13,0,250},{13,0,329},{13,0,344},{13,0,365
-},{13,0,372},{13,0,387},{13,0,403},{13,0,414},{13,0,456},{13,0,470},{13,0,478},{
-13,0,483},{13,0,489},{14,0,55},{14,0,57},{14,0,81},{14,0,90},{14,0,148},{14,0,
-239},{14,0,266},{14,0,321},{14,0,326},{14,0,327},{14,0,330},{14,0,347},{14,0,355
-},{14,0,401},{14,0,404},{14,0,411},{14,0,414},{14,0,416},{14,0,420},{15,0,61},{
-15,0,74},{15,0,87},{15,0,88},{15,0,94},{15,0,96},{15,0,116},{15,0,149},{15,0,154
-},{16,0,50},{16,0,63},{16,0,73},{17,0,2},{17,0,66},{17,0,92},{17,0,103},{17,0,
-112},{17,0,120},{18,0,50},{18,0,54},{18,0,82},{18,0,86},{18,0,90},{18,0,111},{18
-,0,115},{18,0,156},{19,0,40},{19,0,79},{20,0,78},{21,0,22},{135,11,883},{5,0,161
-},{135,0,839},{4,0,782},{13,11,293},{142,11,56},{133,11,617},{139,11,50},{135,10
-,22},{145,0,64},{5,10,639},{7,10,1249},{139,10,896},{138,0,998},{135,11,2042},{4
-,11,546},{142,11,233},{6,0,1043},{134,0,1574},{134,0,1496},{4,10,102},{7,10,815}
-,{7,10,1699},{139,10,964},{12,0,781},{142,0,461},{4,11,313},{133,11,577},{6,0,
-639},{6,0,1114},{137,0,817},{8,11,184},{141,11,433},{7,0,1814},{135,11,935},{10,
-0,997},{140,0,958},{4,0,812},{137,11,625},{132,10,899},{136,10,795},{5,11,886},{
-6,11,46},{6,11,1790},{7,11,14},{7,11,732},{7,11,1654},{8,11,95},{8,11,327},{8,11
-,616},{10,11,598},{10,11,769},{11,11,134},{11,11,747},{12,11,378},{142,11,97},{
-136,0,139},{6,10,52},{9,10,104},{9,10,559},{12,10,308},{147,10,87},{133,11,1021}
-,{132,10,604},{132,10,301},{136,10,779},{7,0,643},{136,0,236},{132,11,153},{134,
-0,1172},{147,10,32},{133,11,798},{6,0,1338},{132,11,587},{6,11,598},{7,11,42},{8
-,11,695},{10,11,212},{11,11,158},{14,11,196},{145,11,85},{135,10,508},{5,11,957}
-,{5,11,1008},{135,11,249},{4,11,129},{135,11,465},{5,0,54},{7,11,470},{7,11,1057
-},{7,11,1201},{9,11,755},{11,11,906},{140,11,527},{7,11,908},{146,11,7},{5,11,
-148},{136,11,450},{144,11,1},{4,0,256},{135,0,1488},{9,0,351},{6,10,310},{7,10,
-1849},{8,10,72},{8,10,272},{8,10,431},{9,10,12},{10,10,563},{10,10,630},{10,10,
-796},{10,10,810},{11,10,367},{11,10,599},{11,10,686},{140,10,672},{6,0,1885},{6,
-0,1898},{6,0,1899},{140,0,955},{4,0,714},{133,0,469},{6,0,1270},{134,0,1456},{
-132,0,744},{6,0,313},{7,10,537},{8,10,64},{9,10,127},{10,10,496},{12,10,510},{
-141,10,384},{4,11,217},{4,10,244},{5,11,710},{7,10,233},{7,11,1926},{9,11,428},{
-9,11,708},{10,11,254},{10,11,296},{10,11,720},{11,11,109},{11,11,255},{12,11,165
-},{12,11,315},{13,11,107},{13,11,203},{14,11,54},{14,11,99},{14,11,114},{14,11,
-388},{16,11,85},{17,11,9},{17,11,33},{20,11,25},{20,11,28},{20,11,29},{21,11,9},
-{21,11,10},{21,11,34},{150,11,17},{138,0,402},{7,0,969},{146,0,55},{8,0,50},{137
-,0,624},{134,0,1355},{132,0,572},{134,10,1650},{10,10,702},{139,10,245},{10,0,
-847},{142,0,445},{6,0,43},{7,0,38},{8,0,248},{138,0,513},{133,0,369},{137,10,338
-},{133,0,766},{133,0,363},{133,10,896},{8,11,392},{11,11,54},{13,11,173},{13,11,
-294},{148,11,7},{134,0,678},{7,11,1230},{136,11,531},{6,0,258},{140,0,409},{5,0,
-249},{148,0,82},{7,10,1117},{136,10,539},{5,0,393},{6,0,378},{7,0,1981},{9,0,32}
-,{9,0,591},{10,0,685},{10,0,741},{142,0,382},{133,0,788},{134,0,1281},{134,0,
-1295},{7,0,1968},{141,0,509},{4,0,61},{5,0,58},{5,0,171},{5,0,683},{6,0,291},{6,
-0,566},{7,0,1650},{11,0,523},{12,0,273},{12,0,303},{15,0,39},{143,0,111},{6,0,
-706},{134,0,1283},{134,0,589},{135,11,1433},{133,11,435},{7,0,1059},{13,0,54},{5
-,10,4},{5,10,810},{6,10,13},{6,10,538},{6,10,1690},{6,10,1726},{7,10,1819},{8,10
-,148},{8,10,696},{8,10,791},{12,10,125},{143,10,9},{135,10,1268},{5,11,85},{6,11
-,419},{7,11,134},{7,11,305},{7,11,361},{7,11,1337},{8,11,71},{140,11,519},{137,0
-,824},{140,11,688},{5,11,691},{7,11,345},{7,10,1385},{9,11,94},{11,10,582},{11,
-10,650},{11,10,901},{11,10,949},{12,11,169},{12,10,232},{12,10,236},{13,10,413},
-{13,10,501},{146,10,116},{4,0,917},{133,0,1005},{7,0,1598},{5,11,183},{6,11,582}
-,{9,11,344},{10,11,679},{140,11,435},{4,10,925},{5,10,803},{8,10,698},{138,10,
-828},{132,0,919},{135,11,511},{139,10,992},{4,0,255},{5,0,302},{6,0,132},{7,0,
-128},{7,0,283},{7,0,1299},{10,0,52},{10,0,514},{11,0,925},{13,0,92},{142,0,309},
-{134,0,1369},{135,10,1847},{134,0,328},{7,11,1993},{136,11,684},{133,10,383},{
-137,0,173},{134,11,583},{134,0,1411},{19,0,65},{5,11,704},{8,11,357},{10,11,745}
-,{14,11,426},{17,11,94},{147,11,57},{9,10,660},{138,10,347},{4,11,179},{5,11,198
-},{133,11,697},{7,11,347},{7,11,971},{8,11,181},{138,11,711},{141,0,442},{11,0,
-842},{11,0,924},{13,0,317},{13,0,370},{13,0,469},{13,0,471},{14,0,397},{18,0,69}
-,{18,0,145},{7,10,572},{9,10,592},{11,10,680},{12,10,356},{140,10,550},{14,11,19
-},{14,11,28},{144,11,29},{136,0,534},{4,11,243},{5,11,203},{7,11,19},{7,11,71},{
-7,11,113},{10,11,405},{11,11,357},{142,11,240},{6,0,210},{10,0,845},{138,0,862},
-{7,11,1351},{9,11,581},{10,11,639},{11,11,453},{140,11,584},{7,11,1450},{139,11,
-99},{10,0,892},{12,0,719},{144,0,105},{4,0,284},{6,0,223},{134,11,492},{5,11,134
-},{6,11,408},{6,11,495},{135,11,1593},{136,0,529},{137,0,807},{4,0,218},{7,0,526
-},{143,0,137},{6,0,1444},{142,11,4},{132,11,665},{4,0,270},{5,0,192},{6,0,332},{
-7,0,1322},{4,11,248},{7,11,137},{137,11,349},{140,0,661},{7,0,1517},{11,0,597},{
-14,0,76},{14,0,335},{20,0,33},{7,10,748},{139,10,700},{5,11,371},{135,11,563},{
-146,11,57},{133,10,127},{133,0,418},{4,11,374},{7,11,547},{7,11,1700},{7,11,1833
-},{139,11,858},{6,10,198},{140,10,83},{7,11,1812},{13,11,259},{13,11,356},{14,11
-,242},{147,11,114},{7,0,379},{8,0,481},{9,0,377},{5,10,276},{6,10,55},{135,10,
-1369},{138,11,286},{5,0,1003},{6,0,149},{6,10,1752},{136,10,726},{8,0,262},{9,0,
-627},{10,0,18},{11,0,214},{11,0,404},{11,0,457},{11,0,780},{11,0,913},{13,0,401}
-,{14,0,200},{6,11,1647},{7,11,1552},{7,11,2010},{9,11,494},{137,11,509},{135,0,
-742},{136,0,304},{132,0,142},{133,10,764},{6,10,309},{7,10,331},{138,10,550},{
-135,10,1062},{6,11,123},{7,11,214},{7,10,986},{9,11,728},{10,11,157},{11,11,346}
-,{11,11,662},{143,11,106},{135,10,1573},{7,0,925},{137,0,799},{4,0,471},{5,0,51}
-,{6,0,602},{8,0,484},{138,0,195},{136,0,688},{132,0,697},{6,0,1169},{6,0,1241},{
-6,10,194},{7,10,133},{10,10,493},{10,10,570},{139,10,664},{140,0,751},{7,0,929},
-{10,0,452},{11,0,878},{16,0,33},{5,10,24},{5,10,569},{6,10,3},{6,10,119},{6,10,
-143},{6,10,440},{7,10,599},{7,10,1686},{7,10,1854},{8,10,424},{9,10,43},{9,10,
-584},{9,10,760},{10,10,328},{11,10,159},{11,10,253},{12,10,487},{140,10,531},{4,
-11,707},{13,11,106},{18,11,49},{147,11,41},{5,0,221},{5,11,588},{134,11,393},{
-134,0,1437},{6,11,211},{7,11,1690},{11,11,486},{140,11,369},{5,10,14},{5,10,892}
-,{6,10,283},{7,10,234},{136,10,537},{4,0,988},{136,0,955},{135,0,1251},{4,10,126
-},{8,10,635},{147,10,34},{4,10,316},{135,10,1561},{137,10,861},{4,10,64},{5,10,
-352},{5,10,720},{6,10,368},{139,10,359},{134,0,192},{4,0,132},{5,0,69},{135,0,
-1242},{7,10,1577},{10,10,304},{10,10,549},{12,10,365},{13,10,220},{13,10,240},{
-142,10,33},{4,0,111},{7,0,865},{134,11,219},{5,11,582},{6,11,1646},{7,11,99},{7,
-11,1962},{7,11,1986},{8,11,515},{8,11,773},{9,11,23},{9,11,491},{12,11,620},{14,
-11,52},{145,11,50},{132,0,767},{7,11,568},{148,11,21},{6,0,42},{7,0,1416},{7,0,
-2005},{8,0,131},{8,0,466},{9,0,672},{13,0,252},{20,0,103},{133,11,851},{135,0,
-1050},{6,10,175},{137,10,289},{5,10,432},{133,10,913},{6,0,44},{136,0,368},{135,
-11,784},{132,0,570},{133,0,120},{139,10,595},{140,0,29},{6,0,227},{135,0,1589},{
-4,11,98},{7,11,1365},{9,11,422},{9,11,670},{10,11,775},{11,11,210},{13,11,26},{
-13,11,457},{141,11,476},{140,10,80},{5,10,931},{134,10,1698},{133,0,522},{134,0,
-1120},{135,0,1529},{12,0,739},{14,0,448},{142,0,467},{11,10,526},{11,10,939},{
-141,10,290},{5,10,774},{6,10,1637},{6,10,1686},{134,10,1751},{6,0,1667},{135,0,
-2036},{7,10,1167},{11,10,934},{13,10,391},{145,10,76},{137,11,147},{6,10,260},{7
-,10,1484},{11,11,821},{12,11,110},{12,11,153},{18,11,41},{150,11,19},{6,0,511},{
-12,0,132},{134,10,573},{5,0,568},{6,0,138},{135,0,1293},{132,0,1020},{8,0,258},{
-9,0,208},{137,0,359},{4,0,565},{8,0,23},{136,0,827},{134,0,344},{4,0,922},{5,0,
-1023},{13,11,477},{14,11,120},{148,11,61},{134,0,240},{5,11,209},{6,11,30},{11,
-11,56},{139,11,305},{6,0,171},{7,0,1002},{7,0,1324},{9,0,415},{14,0,230},{18,0,
-68},{4,10,292},{4,10,736},{5,10,871},{6,10,1689},{7,10,1944},{137,10,580},{9,11,
-635},{139,11,559},{4,11,150},{5,11,303},{134,11,327},{6,10,63},{135,10,920},{133
-,10,793},{8,11,192},{10,11,78},{10,11,555},{11,11,308},{13,11,359},{147,11,95},{
-135,11,786},{135,11,1712},{136,0,402},{6,0,754},{6,11,1638},{7,11,79},{7,11,496}
-,{9,11,138},{10,11,336},{11,11,12},{12,11,412},{12,11,440},{142,11,305},{4,0,716
-},{141,0,31},{133,0,982},{8,0,691},{8,0,731},{5,10,67},{6,10,62},{6,10,374},{135
-,10,1391},{9,10,790},{140,10,47},{139,11,556},{151,11,1},{7,11,204},{7,11,415},{
-8,11,42},{10,11,85},{11,11,33},{11,11,564},{12,11,571},{149,11,1},{8,0,888},{7,
-11,610},{135,11,1501},{4,10,391},{135,10,1169},{5,0,847},{9,0,840},{138,0,803},{
-137,0,823},{134,0,785},{8,0,152},{9,0,53},{9,0,268},{9,0,901},{10,0,518},{10,0,
-829},{11,0,188},{13,0,74},{14,0,46},{15,0,17},{15,0,33},{17,0,40},{18,0,36},{19,
-0,20},{22,0,1},{152,0,2},{4,11,3},{5,11,247},{5,11,644},{7,11,744},{7,11,1207},{
-7,11,1225},{7,11,1909},{146,11,147},{136,0,532},{135,0,681},{132,10,271},{140,0,
-314},{140,0,677},{4,0,684},{136,0,384},{5,11,285},{9,11,67},{13,11,473},{143,11,
-82},{4,10,253},{5,10,544},{7,10,300},{137,10,340},{7,0,110},{7,0,447},{8,0,290},
-{8,0,591},{9,0,382},{9,0,649},{11,0,71},{11,0,155},{11,0,313},{12,0,5},{13,0,325
-},{142,0,287},{134,0,1818},{136,0,1007},{138,0,321},{7,0,360},{7,0,425},{9,0,66}
-,{9,0,278},{138,0,644},{133,10,818},{5,0,385},{5,10,541},{6,10,94},{6,10,499},{7
-,10,230},{139,10,321},{4,10,920},{5,10,25},{5,10,790},{6,10,457},{7,10,853},{136
-,10,788},{4,0,900},{133,0,861},{5,0,254},{7,0,985},{136,0,73},{7,0,1959},{136,0,
-683},{134,10,1765},{133,10,822},{132,10,634},{4,11,29},{6,11,532},{7,11,1628},{7
-,11,1648},{9,11,303},{9,11,350},{10,11,433},{11,11,97},{11,11,557},{11,11,745},{
-12,11,289},{12,11,335},{12,11,348},{12,11,606},{13,11,116},{13,11,233},{13,11,
-466},{14,11,181},{14,11,209},{14,11,232},{14,11,236},{14,11,300},{16,11,41},{148
-,11,97},{19,0,86},{6,10,36},{7,10,658},{136,10,454},{135,11,1692},{132,0,725},{5
-,11,501},{7,11,1704},{9,11,553},{11,11,520},{12,11,557},{141,11,249},{134,0,196}
-,{133,0,831},{136,0,723},{7,0,1897},{13,0,80},{13,0,437},{145,0,74},{4,0,992},{6
-,0,627},{136,0,994},{135,11,1294},{132,10,104},{5,0,848},{6,0,66},{136,0,764},{4
-,0,36},{7,0,1387},{10,0,205},{139,0,755},{6,0,1046},{134,0,1485},{134,0,950},{
-132,0,887},{14,0,450},{148,0,111},{7,0,620},{7,0,831},{9,10,542},{9,10,566},{138
-,10,728},{6,0,165},{138,0,388},{139,10,263},{4,0,719},{135,0,155},{138,10,468},{
-6,11,453},{144,11,36},{134,11,129},{5,0,533},{7,0,755},{138,0,780},{134,0,1465},
-{4,0,353},{6,0,146},{6,0,1789},{7,0,427},{7,0,990},{7,0,1348},{9,0,665},{9,0,898
-},{11,0,893},{142,0,212},{7,10,87},{142,10,288},{4,0,45},{135,0,1257},{12,0,7},{
-7,10,988},{7,10,1939},{9,10,64},{9,10,502},{12,10,34},{13,10,12},{13,10,234},{
-147,10,77},{4,0,607},{5,11,60},{6,11,504},{7,11,614},{7,11,1155},{140,11,0},{135
-,10,141},{8,11,198},{11,11,29},{140,11,534},{140,0,65},{136,0,816},{132,10,619},
-{139,0,88},{5,10,246},{8,10,189},{9,10,355},{9,10,512},{10,10,124},{10,10,453},{
-11,10,143},{11,10,416},{11,10,859},{141,10,341},{4,11,379},{135,11,1397},{4,0,
-600},{137,0,621},{133,0,367},{134,0,561},{6,0,559},{134,0,1691},{6,0,585},{134,
-11,585},{135,11,1228},{4,11,118},{5,10,678},{6,11,274},{6,11,361},{7,11,75},{141
-,11,441},{135,11,1818},{137,11,841},{5,0,573},{6,0,287},{7,10,862},{7,10,1886},{
-138,10,179},{132,10,517},{140,11,693},{5,11,314},{6,11,221},{7,11,419},{10,11,
-650},{11,11,396},{12,11,156},{13,11,369},{14,11,333},{145,11,47},{140,10,540},{
-136,10,667},{11,10,403},{146,10,83},{6,0,672},{133,10,761},{9,0,157},{10,10,131}
-,{140,10,72},{7,0,714},{134,11,460},{134,0,456},{133,0,925},{5,11,682},{135,11,
-1887},{136,11,510},{136,11,475},{133,11,1016},{9,0,19},{7,11,602},{8,11,179},{10
-,11,781},{140,11,126},{6,11,329},{138,11,111},{6,0,822},{134,0,1473},{144,11,86}
-,{11,0,113},{139,11,113},{5,11,821},{134,11,1687},{133,10,449},{7,0,463},{17,0,
-69},{136,10,103},{7,10,2028},{138,10,641},{6,0,193},{7,0,240},{7,0,1682},{10,0,
-51},{10,0,640},{11,0,410},{13,0,82},{14,0,247},{14,0,331},{142,0,377},{6,0,471},
-{11,0,411},{142,0,2},{5,11,71},{7,11,1407},{9,11,388},{9,11,704},{10,11,261},{10
-,11,619},{11,11,547},{11,11,619},{143,11,157},{136,0,633},{135,0,1148},{6,0,554}
-,{7,0,1392},{12,0,129},{7,10,1274},{7,10,1386},{7,11,2008},{9,11,337},{10,11,517
-},{146,10,87},{7,0,803},{8,0,542},{6,10,187},{7,10,1203},{8,10,380},{14,10,117},
-{149,10,28},{6,10,297},{7,10,793},{139,10,938},{8,0,438},{11,0,363},{7,10,464},{
-11,10,105},{12,10,231},{14,10,386},{15,10,102},{148,10,75},{5,11,16},{6,11,86},{
-6,11,603},{7,11,292},{7,11,561},{8,11,257},{8,11,382},{9,11,721},{9,11,778},{11,
-11,581},{140,11,466},{6,0,717},{4,11,486},{133,11,491},{132,0,875},{132,11,72},{
-6,11,265},{135,11,847},{4,0,237},{135,0,514},{6,0,392},{7,0,65},{135,0,2019},{
-140,11,261},{135,11,922},{137,11,404},{12,0,563},{14,0,101},{18,0,129},{7,10,
-1010},{11,10,733},{11,10,759},{13,10,34},{146,10,45},{7,10,1656},{9,10,369},{10,
-10,338},{10,10,490},{11,10,154},{11,10,545},{11,10,775},{13,10,77},{141,10,274},
-{4,0,444},{10,0,146},{140,0,9},{139,11,163},{7,0,1260},{135,0,1790},{9,0,222},{
-10,0,43},{139,0,900},{137,11,234},{138,0,971},{137,0,761},{134,0,699},{136,11,
-434},{6,0,1116},{7,0,1366},{5,10,20},{6,11,197},{6,10,298},{7,10,659},{8,11,205}
-,{137,10,219},{132,11,490},{11,11,820},{150,11,51},{7,10,1440},{11,10,854},{11,
-10,872},{11,10,921},{12,10,551},{13,10,472},{142,10,367},{140,11,13},{132,0,829}
-,{12,0,242},{132,10,439},{136,10,669},{6,0,593},{6,11,452},{7,11,312},{138,11,
-219},{4,11,333},{9,11,176},{12,11,353},{141,11,187},{7,0,36},{8,0,201},{136,0,
-605},{140,0,224},{132,10,233},{134,0,1430},{134,0,1806},{4,0,523},{133,0,638},{6
-,0,1889},{9,0,958},{9,0,971},{9,0,976},{12,0,796},{12,0,799},{12,0,808},{12,0,
-835},{12,0,836},{12,0,914},{12,0,946},{15,0,216},{15,0,232},{18,0,183},{18,0,187
-},{18,0,194},{18,0,212},{18,0,232},{149,0,49},{132,10,482},{6,0,827},{134,0,1434
-},{135,10,346},{134,0,2043},{6,0,242},{7,0,227},{7,0,1581},{8,0,104},{9,0,113},{
-9,0,220},{9,0,427},{10,0,136},{10,0,239},{11,0,579},{11,0,1023},{13,0,4},{13,0,
-204},{13,0,316},{148,0,86},{134,11,1685},{7,0,148},{8,0,284},{141,0,63},{142,0,
-10},{135,11,584},{134,0,1249},{7,0,861},{135,10,334},{5,10,795},{6,10,1741},{137
-,11,70},{132,0,807},{7,11,135},{8,11,7},{8,11,62},{9,11,243},{10,11,658},{10,11,
-697},{11,11,456},{139,11,756},{9,11,395},{138,11,79},{137,11,108},{147,0,94},{
-136,0,494},{135,11,631},{135,10,622},{7,0,1510},{135,10,1750},{4,10,203},{135,10
-,1936},{7,11,406},{7,11,459},{8,11,606},{139,11,726},{7,0,1306},{8,0,505},{9,0,
-482},{10,0,126},{11,0,225},{12,0,347},{12,0,449},{13,0,19},{14,0,218},{142,0,435
-},{5,0,268},{10,0,764},{12,0,120},{13,0,39},{145,0,127},{142,11,68},{11,10,678},
-{140,10,307},{12,11,268},{12,11,640},{142,11,119},{135,10,2044},{133,11,612},{4,
-11,372},{7,11,482},{8,11,158},{9,11,602},{9,11,615},{10,11,245},{10,11,678},{10,
-11,744},{11,11,248},{139,11,806},{7,10,311},{9,10,308},{140,10,255},{4,0,384},{
-135,0,1022},{5,11,854},{135,11,1991},{135,10,1266},{4,10,400},{5,10,267},{135,10
-,232},{135,0,1703},{9,0,159},{11,0,661},{140,0,603},{4,0,964},{14,0,438},{14,0,
-444},{14,0,456},{22,0,60},{22,0,63},{9,11,106},{9,11,163},{9,11,296},{10,11,167}
-,{10,11,172},{10,11,777},{139,11,16},{136,0,583},{132,0,515},{8,0,632},{8,0,697}
-,{137,0,854},{5,11,195},{135,11,1685},{6,0,1123},{134,0,1365},{134,11,328},{7,11
-,1997},{8,11,730},{139,11,1006},{4,0,136},{133,0,551},{134,0,1782},{7,0,1287},{9
-,0,44},{10,0,552},{10,0,642},{11,0,839},{12,0,274},{12,0,275},{12,0,372},{13,0,
-91},{142,0,125},{5,11,751},{11,11,797},{140,11,203},{133,0,732},{7,0,679},{8,0,
-313},{4,10,100},{135,11,821},{10,0,361},{142,0,316},{134,0,595},{6,0,147},{7,0,
-886},{9,0,753},{138,0,268},{5,10,362},{5,10,443},{6,10,318},{7,10,1019},{139,10,
-623},{5,10,463},{136,10,296},{4,10,454},{5,11,950},{5,11,994},{134,11,351},{138,
-0,137},{5,10,48},{5,10,404},{6,10,557},{7,10,458},{8,10,597},{10,10,455},{10,10,
-606},{11,10,49},{11,10,548},{12,10,476},{13,10,18},{141,10,450},{133,0,414},{135
-,0,1762},{5,11,421},{135,11,47},{5,10,442},{135,10,1984},{134,0,599},{134,0,1749
-},{134,0,1627},{4,0,488},{132,11,350},{137,11,751},{132,0,83},{140,0,676},{133,
-11,967},{7,0,1639},{5,10,55},{140,10,161},{4,11,473},{7,11,623},{8,11,808},{9,11
-,871},{9,11,893},{11,11,38},{11,11,431},{12,11,112},{12,11,217},{12,11,243},{12,
-11,562},{12,11,683},{13,11,141},{13,11,197},{13,11,227},{13,11,406},{13,11,487},
-{14,11,156},{14,11,203},{14,11,224},{14,11,256},{18,11,58},{150,11,0},{133,10,
-450},{7,11,736},{139,11,264},{134,0,278},{4,11,222},{7,11,286},{136,11,629},{135
-,10,869},{140,0,97},{144,0,14},{134,0,1085},{4,10,213},{7,10,223},{136,10,80},{7
-,0,388},{7,0,644},{139,0,781},{132,0,849},{7,0,229},{8,0,59},{9,0,190},{10,0,378
-},{140,0,191},{7,10,381},{7,10,806},{7,10,820},{8,10,354},{8,10,437},{8,10,787},
-{9,10,657},{10,10,58},{10,10,339},{10,10,749},{11,10,914},{12,10,162},{13,10,75}
-,{14,10,106},{14,10,198},{14,10,320},{14,10,413},{146,10,43},{141,11,306},{136,
-10,747},{134,0,1115},{16,0,94},{16,0,108},{136,11,146},{6,0,700},{6,0,817},{134,
-0,1002},{133,10,692},{4,11,465},{135,11,1663},{134,10,191},{6,0,1414},{135,11,
-913},{132,0,660},{7,0,1035},{138,0,737},{6,10,162},{7,10,1960},{136,10,831},{132
-,10,706},{7,0,690},{9,0,217},{9,0,587},{140,0,521},{138,10,426},{135,10,1235},{6
-,11,82},{7,11,138},{7,11,517},{9,11,673},{139,11,238},{138,0,272},{5,11,495},{7,
-11,834},{9,11,733},{139,11,378},{134,0,1744},{132,0,1011},{7,11,828},{142,11,116
-},{4,0,733},{9,0,194},{10,0,92},{11,0,198},{12,0,84},{13,0,128},{133,11,559},{10
-,0,57},{10,0,277},{6,11,21},{6,11,1737},{7,11,1444},{136,11,224},{4,10,204},{137
-,10,902},{136,10,833},{11,0,348},{12,0,99},{18,0,1},{18,0,11},{19,0,4},{7,10,366
-},{9,10,287},{12,10,199},{12,10,556},{140,10,577},{6,0,1981},{136,0,936},{21,0,
-33},{150,0,40},{5,11,519},{138,11,204},{5,10,356},{135,10,224},{134,0,775},{135,
-0,306},{7,10,630},{9,10,567},{11,10,150},{11,10,444},{141,10,119},{5,0,979},{134
-,10,539},{133,0,611},{4,11,402},{135,11,1679},{5,0,178},{7,11,2},{8,11,323},{136
-,11,479},{5,11,59},{135,11,672},{4,0,1010},{6,0,1969},{138,11,237},{133,11,412},
-{146,11,34},{7,11,1740},{146,11,48},{134,0,664},{139,10,814},{4,11,85},{135,11,
-549},{133,11,94},{133,11,457},{132,0,390},{134,0,1510},{4,10,235},{135,10,255},{
-4,10,194},{5,10,584},{6,11,11},{6,10,384},{7,11,187},{7,10,583},{10,10,761},{11,
-10,760},{139,10,851},{4,11,522},{139,11,802},{135,0,493},{10,11,776},{13,11,345}
-,{142,11,425},{146,0,37},{4,11,52},{135,11,661},{134,0,724},{134,0,829},{133,11,
-520},{133,10,562},{4,11,281},{5,11,38},{7,11,194},{7,11,668},{7,11,1893},{137,11
-,397},{5,10,191},{137,10,271},{7,0,1537},{14,0,96},{143,0,73},{5,0,473},{11,0,
-168},{4,10,470},{6,10,153},{7,10,1503},{7,10,1923},{10,10,701},{11,10,132},{11,
-10,227},{11,10,320},{11,10,436},{11,10,525},{11,10,855},{12,10,41},{12,10,286},{
-13,10,103},{13,10,284},{14,10,255},{14,10,262},{15,10,117},{143,10,127},{133,0,
-105},{5,0,438},{9,0,694},{12,0,627},{141,0,210},{133,10,327},{6,10,552},{7,10,
-1754},{137,10,604},{134,0,1256},{152,0,11},{5,11,448},{11,11,98},{139,11,524},{7
-,0,1626},{5,10,80},{6,10,405},{7,10,403},{7,10,1502},{8,10,456},{9,10,487},{9,10
-,853},{9,10,889},{10,10,309},{11,10,721},{11,10,994},{12,10,430},{13,10,165},{14
-,11,16},{146,11,44},{132,0,779},{8,0,25},{138,0,826},{4,10,453},{5,10,887},{6,10
-,535},{8,10,6},{8,10,543},{136,10,826},{137,11,461},{140,11,632},{132,0,308},{
-135,0,741},{132,0,671},{7,0,150},{8,0,649},{136,0,1020},{9,0,99},{6,11,336},{8,
-11,552},{9,11,285},{10,11,99},{139,11,568},{134,0,521},{5,0,339},{14,0,3},{15,0,
-41},{15,0,166},{147,0,66},{6,11,423},{7,11,665},{7,11,1210},{9,11,218},{141,11,
-222},{6,0,543},{5,10,101},{5,11,256},{6,10,88},{7,10,1677},{9,10,100},{10,10,677
-},{14,10,169},{14,10,302},{14,10,313},{15,10,48},{143,10,84},{4,10,310},{7,10,
-708},{7,10,996},{9,10,795},{10,10,390},{10,10,733},{11,10,451},{12,10,249},{14,
-10,115},{14,10,286},{143,10,100},{133,10,587},{13,11,417},{14,11,129},{143,11,15
-},{134,0,1358},{136,11,554},{132,10,498},{7,10,217},{8,10,140},{138,10,610},{135
-,11,989},{135,11,634},{6,0,155},{140,0,234},{135,11,462},{132,11,618},{134,0,
-1628},{132,0,766},{4,11,339},{5,10,905},{135,11,259},{135,0,829},{4,11,759},{141
-,11,169},{7,0,1445},{4,10,456},{7,10,358},{7,10,1637},{8,10,643},{139,10,483},{5
-,0,486},{135,0,1349},{5,11,688},{135,11,712},{7,0,1635},{8,0,17},{10,0,217},{10,
-0,295},{12,0,2},{140,11,2},{138,0,558},{150,10,56},{4,11,278},{5,11,465},{135,11
-,1367},{136,11,482},{133,10,535},{6,0,1362},{6,0,1461},{10,11,274},{10,11,625},{
-139,11,530},{5,0,599},{5,11,336},{6,11,341},{6,11,478},{6,11,1763},{136,11,386},
-{7,10,1748},{137,11,151},{134,0,1376},{133,10,539},{135,11,73},{135,11,1971},{
-139,11,283},{9,0,93},{139,0,474},{6,10,91},{135,10,435},{6,0,447},{5,11,396},{
-134,11,501},{4,10,16},{5,10,316},{5,10,842},{6,10,370},{6,10,1778},{8,10,166},{
-11,10,812},{12,10,206},{12,10,351},{14,10,418},{16,10,15},{16,10,34},{18,10,3},{
-19,10,3},{19,10,7},{20,10,4},{149,10,21},{7,0,577},{7,0,1432},{9,0,475},{9,0,505
-},{9,0,526},{9,0,609},{9,0,689},{9,0,726},{9,0,735},{9,0,738},{10,0,556},{10,0,
-674},{10,0,684},{11,0,89},{11,0,202},{11,0,272},{11,0,380},{11,0,415},{11,0,505}
-,{11,0,537},{11,0,550},{11,0,562},{11,0,640},{11,0,667},{11,0,688},{11,0,847},{
-11,0,927},{11,0,930},{11,0,940},{12,0,144},{12,0,325},{12,0,329},{12,0,389},{12,
-0,403},{12,0,451},{12,0,515},{12,0,604},{12,0,616},{12,0,626},{13,0,66},{13,0,
-131},{13,0,167},{13,0,236},{13,0,368},{13,0,411},{13,0,434},{13,0,453},{13,0,461
-},{13,0,474},{14,0,59},{14,0,60},{14,0,139},{14,0,152},{14,0,276},{14,0,353},{14
-,0,402},{15,0,28},{15,0,81},{15,0,123},{15,0,152},{18,0,136},{148,0,88},{4,11,
-929},{133,11,799},{136,11,46},{142,0,307},{4,0,609},{7,0,756},{9,0,544},{11,0,
-413},{144,0,25},{10,0,687},{7,10,619},{10,10,547},{11,10,122},{140,10,601},{4,0,
-930},{133,0,947},{133,0,939},{142,0,21},{4,11,892},{133,11,770},{133,0,962},{5,0
-,651},{8,0,170},{9,0,61},{9,0,63},{10,0,23},{10,0,37},{10,0,834},{11,0,4},{11,0,
-187},{11,0,281},{11,0,503},{11,0,677},{12,0,96},{12,0,130},{12,0,244},{14,0,5},{
-14,0,40},{14,0,162},{14,0,202},{146,0,133},{4,0,406},{5,0,579},{12,0,492},{150,0
-,15},{135,11,158},{135,0,597},{132,0,981},{132,10,888},{4,10,149},{138,10,368},{
-132,0,545},{4,10,154},{7,10,1134},{136,10,105},{135,11,2001},{134,0,1558},{4,10,
-31},{6,10,429},{7,10,962},{9,10,458},{139,10,691},{132,10,312},{135,10,1642},{6,
-0,17},{6,0,1304},{7,0,16},{7,0,1001},{9,0,886},{10,0,489},{10,0,800},{11,0,782},
-{12,0,320},{13,0,467},{14,0,145},{14,0,387},{143,0,119},{135,0,1982},{17,0,17},{
-7,11,1461},{140,11,91},{4,10,236},{132,11,602},{138,0,907},{136,0,110},{7,0,272}
-,{19,0,53},{5,10,836},{5,10,857},{134,10,1680},{5,0,458},{7,11,1218},{136,11,303
-},{7,0,1983},{8,0,0},{8,0,171},{9,0,120},{9,0,732},{10,0,473},{11,0,656},{11,0,
-998},{18,0,0},{18,0,2},{19,0,21},{10,10,68},{139,10,494},{137,11,662},{4,11,13},
-{5,11,567},{7,11,1498},{9,11,124},{11,11,521},{140,11,405},{4,10,81},{139,10,867
-},{135,11,1006},{7,11,800},{7,11,1783},{138,11,12},{9,0,295},{10,0,443},{5,10,
-282},{8,10,650},{137,10,907},{132,11,735},{4,11,170},{4,10,775},{135,11,323},{6,
-0,1844},{10,0,924},{11,11,844},{12,11,104},{140,11,625},{5,11,304},{7,11,1403},{
-140,11,498},{134,0,1232},{4,0,519},{10,0,70},{12,0,26},{14,0,17},{14,0,178},{15,
-0,34},{149,0,12},{132,0,993},{4,11,148},{133,11,742},{6,0,31},{7,0,491},{7,0,530
-},{8,0,592},{11,0,53},{11,0,779},{12,0,167},{12,0,411},{14,0,14},{14,0,136},{15,
-0,72},{16,0,17},{144,0,72},{133,0,907},{134,0,733},{133,11,111},{4,10,71},{5,10,
-376},{7,10,119},{138,10,665},{136,0,55},{8,0,430},{136,11,430},{4,0,208},{5,0,
-106},{6,0,531},{8,0,408},{9,0,188},{138,0,572},{12,0,56},{11,10,827},{14,10,34},
-{143,10,148},{134,0,1693},{133,11,444},{132,10,479},{140,0,441},{9,0,449},{10,0,
-192},{138,0,740},{134,0,928},{4,0,241},{7,10,607},{136,10,99},{8,11,123},{15,11,
-6},{144,11,7},{6,11,285},{8,11,654},{11,11,749},{12,11,190},{12,11,327},{13,11,
-120},{13,11,121},{13,11,327},{15,11,47},{146,11,40},{4,10,41},{5,10,74},{7,10,
-1627},{11,10,871},{140,10,619},{7,0,1525},{11,10,329},{11,10,965},{12,10,241},{
-14,10,354},{15,10,22},{148,10,63},{132,0,259},{135,11,183},{9,10,209},{137,10,
-300},{5,11,937},{135,11,100},{133,10,98},{4,0,173},{5,0,312},{5,0,512},{135,0,
-1285},{141,0,185},{7,0,1603},{7,0,1691},{9,0,464},{11,0,195},{12,0,279},{12,0,
-448},{14,0,11},{147,0,102},{135,0,1113},{133,10,984},{4,0,452},{5,0,583},{135,0,
-720},{4,0,547},{5,0,817},{6,0,433},{7,0,593},{7,0,1378},{8,0,161},{9,0,284},{10,
-0,313},{139,0,886},{8,0,722},{4,10,182},{6,10,205},{135,10,220},{150,0,13},{4,10
-,42},{9,10,205},{9,10,786},{138,10,659},{6,0,289},{7,0,1670},{12,0,57},{151,0,4}
-,{132,10,635},{14,0,43},{146,0,21},{139,10,533},{135,0,1694},{8,0,420},{139,0,
-193},{135,0,409},{132,10,371},{4,10,272},{135,10,836},{5,10,825},{134,10,1640},{
-5,11,251},{5,11,956},{8,11,268},{9,11,214},{146,11,142},{138,0,308},{6,0,1863},{
-141,11,37},{137,10,879},{7,10,317},{135,10,569},{132,11,294},{134,0,790},{5,0,
-1002},{136,0,745},{5,11,346},{5,11,711},{136,11,390},{135,0,289},{5,0,504},{11,0
-,68},{137,10,307},{4,0,239},{6,0,477},{7,0,1607},{139,0,617},{149,0,13},{133,0,
-609},{133,11,624},{5,11,783},{7,11,1998},{135,11,2047},{133,10,525},{132,0,367},
-{132,11,594},{6,0,528},{133,10,493},{4,10,174},{135,10,911},{8,10,417},{137,10,
-782},{132,0,694},{7,0,548},{137,0,58},{4,10,32},{5,10,215},{6,10,269},{7,10,1782
-},{7,10,1892},{10,10,16},{11,10,822},{11,10,954},{141,10,481},{140,0,687},{7,0,
-1749},{136,10,477},{132,11,569},{133,10,308},{135,10,1088},{4,0,661},{138,0,1004
-},{5,11,37},{6,11,39},{6,11,451},{7,11,218},{7,11,667},{7,11,1166},{7,11,1687},{
-8,11,662},{144,11,2},{9,0,445},{12,0,53},{13,0,492},{5,10,126},{8,10,297},{9,10,
-366},{140,10,374},{7,10,1551},{139,10,361},{148,0,74},{134,11,508},{135,0,213},{
-132,10,175},{132,10,685},{6,0,760},{6,0,834},{134,0,1248},{7,11,453},{7,11,635},
-{7,11,796},{8,11,331},{9,11,328},{9,11,330},{9,11,865},{10,11,119},{10,11,235},{
-11,11,111},{11,11,129},{11,11,240},{12,11,31},{12,11,66},{12,11,222},{12,11,269}
-,{12,11,599},{12,11,689},{13,11,186},{13,11,364},{142,11,345},{7,0,1672},{139,0,
-189},{133,10,797},{133,10,565},{6,0,1548},{6,11,98},{7,11,585},{135,11,702},{9,0
-,968},{15,0,192},{149,0,56},{4,10,252},{6,11,37},{7,11,299},{7,10,1068},{7,11,
-1666},{8,11,195},{8,11,316},{9,11,178},{9,11,276},{9,11,339},{9,11,536},{10,11,
-102},{10,11,362},{10,10,434},{10,11,785},{11,11,55},{11,11,149},{11,10,228},{11,
-10,426},{11,11,773},{13,10,231},{13,11,416},{13,11,419},{14,11,38},{14,11,41},{
-14,11,210},{18,10,106},{148,10,87},{4,0,751},{11,0,390},{140,0,32},{4,0,409},{
-133,0,78},{11,11,458},{12,11,15},{140,11,432},{7,0,1602},{10,0,257},{10,0,698},{
-11,0,544},{11,0,585},{12,0,212},{13,0,307},{5,10,231},{7,10,601},{9,10,277},{9,
-10,674},{10,10,178},{10,10,418},{10,10,509},{11,10,531},{12,10,113},{12,10,475},
-{13,10,99},{142,10,428},{6,0,473},{145,0,105},{6,0,1949},{15,0,156},{133,11,645}
-,{7,10,1591},{144,10,43},{135,0,1779},{135,10,1683},{4,11,290},{135,11,1356},{
-134,0,763},{6,11,70},{7,11,1292},{10,11,762},{139,11,288},{142,0,29},{140,11,428
-},{7,0,883},{7,11,131},{7,11,422},{8,11,210},{140,11,573},{134,0,488},{4,10,399}
-,{5,10,119},{5,10,494},{7,10,751},{137,10,556},{133,0,617},{132,11,936},{139,0,
-50},{7,0,1518},{139,0,694},{137,0,785},{4,0,546},{135,0,2042},{7,11,716},{13,11,
-97},{141,11,251},{132,11,653},{145,0,22},{134,0,1016},{4,0,313},{133,0,577},{136
-,11,657},{8,0,184},{141,0,433},{135,0,935},{6,0,720},{9,0,114},{146,11,80},{12,0
-,186},{12,0,292},{14,0,100},{18,0,70},{7,10,594},{7,10,851},{7,10,1858},{9,10,
-411},{9,10,574},{9,10,666},{9,10,737},{10,10,346},{10,10,712},{11,10,246},{11,10
-,432},{11,10,517},{11,10,647},{11,10,679},{11,10,727},{12,10,304},{12,10,305},{
-12,10,323},{12,10,483},{12,10,572},{12,10,593},{12,10,602},{13,10,95},{13,10,101
-},{13,10,171},{13,10,315},{13,10,378},{13,10,425},{13,10,475},{14,10,63},{14,10,
-380},{14,10,384},{15,10,133},{18,10,112},{148,10,72},{135,10,1093},{135,11,1836}
-,{132,10,679},{137,10,203},{11,0,402},{12,0,109},{12,0,431},{13,0,179},{13,0,206
-},{14,0,217},{16,0,3},{148,0,53},{7,11,1368},{8,11,232},{8,11,361},{10,11,682},{
-138,11,742},{137,10,714},{5,0,886},{6,0,46},{6,0,1790},{7,0,14},{7,0,732},{7,0,
-1654},{8,0,95},{8,0,327},{8,0,616},{9,0,892},{10,0,598},{10,0,769},{11,0,134},{
-11,0,747},{12,0,378},{14,0,97},{137,11,534},{4,0,969},{136,10,825},{137,11,27},{
-6,0,727},{142,11,12},{133,0,1021},{134,0,1190},{134,11,1657},{5,10,143},{5,10,
-769},{6,10,1760},{7,10,682},{7,10,1992},{136,10,736},{132,0,153},{135,11,127},{
-133,0,798},{132,0,587},{6,0,598},{7,0,42},{8,0,695},{10,0,212},{11,0,158},{14,0,
-196},{145,0,85},{133,10,860},{6,0,1929},{134,0,1933},{5,0,957},{5,0,1008},{9,0,
-577},{12,0,141},{6,10,422},{7,10,0},{7,10,1544},{8,11,364},{11,10,990},{12,10,
-453},{13,10,47},{141,10,266},{134,0,1319},{4,0,129},{135,0,465},{7,0,470},{7,0,
-1057},{7,0,1201},{9,0,755},{11,0,906},{140,0,527},{7,0,908},{146,0,7},{5,0,148},
-{136,0,450},{5,10,515},{137,10,131},{7,10,1605},{11,10,962},{146,10,139},{132,10
-,646},{134,0,1166},{4,10,396},{7,10,728},{9,10,117},{13,10,202},{148,10,51},{6,
-10,121},{6,10,124},{6,10,357},{7,10,1138},{7,10,1295},{8,10,162},{139,10,655},{
-14,0,374},{142,11,374},{138,0,253},{139,0,1003},{5,11,909},{9,11,849},{138,11,
-805},{133,10,237},{7,11,525},{7,11,1579},{8,11,497},{136,11,573},{137,0,46},{132
-,0,879},{134,0,806},{135,0,1868},{6,0,1837},{134,0,1846},{6,0,730},{134,0,881},{
-7,0,965},{7,0,1460},{7,0,1604},{7,11,193},{7,11,397},{7,11,1105},{8,11,124},{8,
-11,619},{9,11,305},{10,11,264},{11,11,40},{12,11,349},{13,11,134},{13,11,295},{
-14,11,155},{15,11,120},{146,11,105},{136,0,506},{143,0,10},{4,11,262},{7,11,342}
-,{7,10,571},{7,10,1877},{10,10,366},{141,11,23},{133,11,641},{10,0,22},{9,10,513
-},{10,10,39},{12,10,122},{140,10,187},{135,11,1431},{150,11,49},{4,11,99},{6,11,
-250},{6,11,346},{8,11,127},{138,11,81},{6,0,2014},{8,0,928},{10,0,960},{10,0,979
-},{140,0,996},{134,0,296},{132,11,915},{5,11,75},{9,11,517},{10,11,470},{12,11,
-155},{141,11,224},{137,10,873},{4,0,854},{140,11,18},{134,0,587},{7,10,107},{7,
-10,838},{8,10,550},{138,10,401},{11,0,636},{15,0,145},{17,0,34},{19,0,50},{23,0,
-20},{11,10,588},{11,10,864},{11,10,968},{143,10,160},{135,11,216},{7,0,982},{10,
-0,32},{143,0,56},{133,10,768},{133,11,954},{6,11,304},{7,11,1114},{8,11,418},{10
-,11,345},{11,11,341},{11,11,675},{141,11,40},{9,11,410},{139,11,425},{136,0,941}
-,{5,0,435},{132,10,894},{5,0,85},{6,0,419},{7,0,134},{7,0,305},{7,0,361},{7,0,
-1337},{8,0,71},{140,0,519},{140,0,688},{135,0,740},{5,0,691},{7,0,345},{9,0,94},
-{140,0,169},{5,0,183},{6,0,582},{10,0,679},{140,0,435},{134,11,14},{6,0,945},{
-135,0,511},{134,11,1708},{5,11,113},{6,11,243},{7,11,1865},{11,11,161},{16,11,37
-},{145,11,99},{132,11,274},{137,0,539},{7,0,1993},{8,0,684},{134,10,272},{6,0,
-659},{134,0,982},{4,10,9},{5,10,128},{7,10,368},{11,10,480},{148,10,3},{134,0,
-583},{132,0,803},{133,0,704},{4,0,179},{5,0,198},{133,0,697},{7,0,347},{7,0,971}
-,{8,0,181},{10,0,711},{135,11,166},{136,10,682},{4,10,2},{7,10,545},{7,10,894},{
-136,11,521},{135,0,481},{132,0,243},{5,0,203},{7,0,19},{7,0,71},{7,0,113},{10,0,
-405},{11,0,357},{142,0,240},{5,11,725},{5,11,727},{135,11,1811},{6,0,826},{137,
-11,304},{7,0,1450},{139,0,99},{133,11,654},{134,0,492},{5,0,134},{6,0,408},{6,0,
-495},{7,0,1593},{6,11,273},{10,11,188},{13,11,377},{146,11,77},{9,10,769},{140,
-10,185},{135,11,410},{142,0,4},{4,0,665},{134,11,1785},{4,0,248},{7,0,137},{137,
-0,349},{5,10,530},{142,10,113},{7,0,1270},{139,0,612},{132,11,780},{5,0,371},{
-135,0,563},{135,0,826},{6,0,1535},{23,0,21},{151,0,23},{4,0,374},{7,0,547},{7,0,
-1700},{7,0,1833},{139,0,858},{133,10,556},{7,11,612},{8,11,545},{8,11,568},{8,11
-,642},{9,11,717},{10,11,541},{10,11,763},{11,11,449},{12,11,489},{13,11,153},{13
-,11,296},{14,11,138},{14,11,392},{15,11,50},{16,11,6},{16,11,12},{148,11,9},{9,0
-,311},{141,0,42},{8,10,16},{140,10,568},{6,0,1968},{6,0,2027},{138,0,991},{6,0,
-1647},{7,0,1552},{7,0,2010},{9,0,494},{137,0,509},{133,11,948},{6,10,186},{137,
-10,426},{134,0,769},{134,0,642},{132,10,585},{6,0,123},{7,0,214},{9,0,728},{10,0
-,157},{11,0,346},{11,0,662},{143,0,106},{142,11,381},{135,0,1435},{4,11,532},{5,
-11,706},{135,11,662},{5,11,837},{134,11,1651},{4,10,93},{5,10,252},{6,10,229},{7
-,10,291},{9,10,550},{139,10,644},{148,0,79},{137,10,749},{134,0,1425},{137,10,
-162},{4,11,362},{7,11,52},{7,11,303},{140,11,166},{132,10,381},{4,11,330},{7,11,
-933},{7,11,2012},{136,11,292},{135,11,767},{4,0,707},{5,0,588},{6,0,393},{13,0,
-106},{18,0,49},{147,0,41},{6,0,211},{7,0,1690},{11,0,486},{140,0,369},{137,11,
-883},{4,11,703},{135,11,207},{4,0,187},{5,0,184},{5,0,690},{7,0,1869},{10,0,756}
-,{139,0,783},{132,11,571},{134,0,1382},{5,0,175},{6,10,77},{6,10,157},{7,10,974}
-,{7,10,1301},{7,10,1339},{7,10,1490},{7,10,1873},{137,10,628},{134,0,1493},{5,11
-,873},{133,11,960},{134,0,1007},{12,11,93},{12,11,501},{13,11,362},{14,11,151},{
-15,11,40},{15,11,59},{16,11,46},{17,11,25},{18,11,14},{18,11,134},{19,11,25},{19
-,11,69},{20,11,16},{20,11,19},{20,11,66},{21,11,23},{21,11,25},{150,11,42},{11,
-10,919},{141,10,409},{134,0,219},{5,0,582},{6,0,1646},{7,0,99},{7,0,1962},{7,0,
-1986},{8,0,515},{8,0,773},{9,0,23},{9,0,491},{12,0,620},{142,0,93},{133,0,851},{
-5,11,33},{134,11,470},{135,11,1291},{134,0,1278},{135,11,1882},{135,10,1489},{
-132,0,1000},{138,0,982},{8,0,762},{8,0,812},{137,0,910},{6,11,47},{7,11,90},{7,
-11,664},{7,11,830},{7,11,1380},{7,11,2025},{8,11,448},{136,11,828},{4,0,98},{4,0
-,940},{6,0,1819},{6,0,1834},{6,0,1841},{7,0,1365},{8,0,859},{8,0,897},{8,0,918},
-{9,0,422},{9,0,670},{10,0,775},{10,0,894},{10,0,909},{10,0,910},{10,0,935},{11,0
-,210},{12,0,750},{12,0,755},{13,0,26},{13,0,457},{13,0,476},{16,0,100},{16,0,109
-},{18,0,173},{18,0,175},{8,10,398},{9,10,681},{139,10,632},{9,11,417},{137,11,
-493},{136,10,645},{138,0,906},{134,0,1730},{134,10,20},{133,11,1019},{134,0,1185
-},{10,0,40},{136,10,769},{9,0,147},{134,11,208},{140,0,650},{5,0,209},{6,0,30},{
-11,0,56},{139,0,305},{132,0,553},{138,11,344},{6,11,68},{7,11,398},{7,11,448},{7
-,11,1629},{7,11,1813},{8,11,387},{8,11,442},{9,11,710},{10,11,282},{138,11,722},
-{5,0,597},{14,0,20},{142,11,20},{135,0,1614},{135,10,1757},{4,0,150},{5,0,303},{
-6,0,327},{135,10,937},{16,0,49},{7,10,1652},{144,11,49},{8,0,192},{10,0,78},{141
-,0,359},{135,0,786},{143,0,134},{6,0,1638},{7,0,79},{7,0,496},{9,0,138},{10,0,
-336},{11,0,12},{12,0,412},{12,0,440},{142,0,305},{136,11,491},{4,10,579},{5,10,
-226},{5,10,323},{135,10,960},{7,0,204},{7,0,415},{8,0,42},{10,0,85},{139,0,564},
-{132,0,614},{4,11,403},{5,11,441},{7,11,450},{11,11,101},{12,11,193},{141,11,430
-},{135,11,1927},{135,11,1330},{4,0,3},{5,0,247},{5,0,644},{7,0,744},{7,0,1207},{
-7,0,1225},{7,0,1909},{146,0,147},{136,0,942},{4,0,1019},{134,0,2023},{5,11,679},
-{133,10,973},{5,0,285},{9,0,67},{13,0,473},{143,0,82},{7,11,328},{137,11,326},{
-151,0,8},{6,10,135},{135,10,1176},{135,11,1128},{134,0,1309},{135,11,1796},{135,
-10,314},{4,11,574},{7,11,350},{7,11,1024},{8,11,338},{9,11,677},{10,11,808},{139
-,11,508},{7,11,818},{17,11,14},{17,11,45},{18,11,75},{148,11,18},{146,10,4},{135
-,11,1081},{4,0,29},{6,0,532},{7,0,1628},{7,0,1648},{9,0,350},{10,0,433},{11,0,97
-},{11,0,557},{11,0,745},{12,0,289},{12,0,335},{12,0,348},{12,0,606},{13,0,116},{
-13,0,233},{13,0,466},{14,0,181},{14,0,209},{14,0,232},{14,0,236},{14,0,300},{16,
-0,41},{148,0,97},{7,0,318},{6,10,281},{8,10,282},{8,10,480},{8,10,499},{9,10,198
-},{10,10,143},{10,10,169},{10,10,211},{10,10,417},{10,10,574},{11,10,147},{11,10
-,395},{12,10,75},{12,10,407},{12,10,608},{13,10,500},{142,10,251},{135,11,1676},
-{135,11,2037},{135,0,1692},{5,0,501},{7,0,1704},{9,0,553},{11,0,520},{12,0,557},
-{141,0,249},{6,0,1527},{14,0,324},{15,0,55},{15,0,80},{14,11,324},{15,11,55},{
-143,11,80},{135,10,1776},{8,0,988},{137,11,297},{132,10,419},{142,0,223},{139,11
-,234},{7,0,1123},{12,0,508},{14,0,102},{14,0,226},{144,0,57},{4,10,138},{7,10,
-1012},{7,10,1280},{137,10,76},{7,0,1764},{5,10,29},{140,10,638},{134,0,2015},{
-134,0,1599},{138,11,56},{6,11,306},{7,11,1140},{7,11,1340},{8,11,133},{138,11,
-449},{139,11,1011},{6,10,1710},{135,10,2038},{7,11,1763},{140,11,310},{6,0,129},
-{4,10,17},{5,10,23},{7,10,995},{11,10,383},{11,10,437},{12,10,460},{140,10,532},
-{5,11,329},{136,11,260},{133,10,862},{132,0,534},{6,0,811},{135,0,626},{132,11,
-657},{4,0,25},{5,0,60},{6,0,504},{7,0,614},{7,0,1155},{12,0,0},{152,11,7},{7,0,
-1248},{11,0,621},{139,0,702},{137,0,321},{8,10,70},{12,10,171},{141,10,272},{10,
-10,233},{139,10,76},{4,0,379},{7,0,1397},{134,10,442},{5,11,66},{7,11,1896},{136
-,11,288},{134,11,1643},{134,10,1709},{4,11,21},{5,11,91},{5,11,570},{5,11,648},{
-5,11,750},{5,11,781},{6,11,54},{6,11,112},{6,11,402},{6,11,1732},{7,11,315},{7,
-11,749},{7,11,1347},{7,11,1900},{9,11,78},{9,11,508},{10,11,611},{11,11,510},{11
-,11,728},{13,11,36},{14,11,39},{16,11,83},{17,11,124},{148,11,30},{4,0,118},{6,0
-,274},{6,0,361},{7,0,75},{141,0,441},{10,11,322},{10,11,719},{139,11,407},{147,
-10,119},{12,11,549},{14,11,67},{147,11,60},{11,10,69},{12,10,105},{12,10,117},{
-13,10,213},{14,10,13},{14,10,62},{14,10,177},{14,10,421},{15,10,19},{146,10,141}
-,{9,0,841},{137,10,309},{7,10,608},{7,10,976},{8,11,125},{8,11,369},{8,11,524},{
-9,10,146},{10,10,206},{10,11,486},{10,10,596},{11,11,13},{11,11,381},{11,11,736}
-,{11,11,766},{11,11,845},{13,11,114},{13,10,218},{13,11,292},{14,11,47},{142,10,
-153},{12,0,693},{135,11,759},{5,0,314},{6,0,221},{7,0,419},{10,0,650},{11,0,396}
-,{12,0,156},{13,0,369},{14,0,333},{145,0,47},{6,11,1684},{6,11,1731},{7,11,356},
-{7,11,1932},{8,11,54},{8,11,221},{9,11,225},{9,11,356},{10,11,77},{10,11,446},{
-10,11,731},{12,11,404},{141,11,491},{132,11,375},{4,10,518},{135,10,1136},{4,0,
-913},{4,11,411},{11,11,643},{140,11,115},{4,11,80},{133,11,44},{8,10,689},{137,
-10,863},{138,0,880},{4,10,18},{7,10,145},{7,10,444},{7,10,1278},{8,10,49},{8,10,
-400},{9,10,71},{9,10,250},{10,10,459},{12,10,160},{144,10,24},{136,0,475},{5,0,
-1016},{5,11,299},{135,11,1083},{7,0,602},{8,0,179},{10,0,781},{140,0,126},{6,0,
-329},{138,0,111},{135,0,1864},{4,11,219},{7,11,1761},{137,11,86},{6,0,1888},{6,0
-,1892},{6,0,1901},{6,0,1904},{9,0,953},{9,0,985},{9,0,991},{9,0,1001},{12,0,818}
-,{12,0,846},{12,0,847},{12,0,861},{12,0,862},{12,0,873},{12,0,875},{12,0,877},{
-12,0,879},{12,0,881},{12,0,884},{12,0,903},{12,0,915},{12,0,926},{12,0,939},{15,
-0,182},{15,0,219},{15,0,255},{18,0,191},{18,0,209},{18,0,211},{149,0,41},{5,11,
-328},{135,11,918},{137,0,780},{12,0,82},{143,0,36},{133,10,1010},{5,0,821},{134,
-0,1687},{133,11,514},{132,0,956},{134,0,1180},{10,0,112},{5,10,87},{7,10,313},{7
-,10,1103},{10,10,582},{11,10,389},{11,10,813},{12,10,385},{13,10,286},{14,10,124
-},{146,10,108},{5,0,71},{7,0,1407},{9,0,704},{10,0,261},{10,0,619},{11,0,547},{
-11,0,619},{143,0,157},{4,0,531},{5,0,455},{5,11,301},{6,11,571},{14,11,49},{146,
-11,102},{132,10,267},{6,0,385},{7,0,2008},{9,0,337},{138,0,517},{133,11,726},{
-133,11,364},{4,11,76},{7,11,1550},{9,11,306},{9,11,430},{9,11,663},{10,11,683},{
-11,11,427},{11,11,753},{12,11,334},{12,11,442},{14,11,258},{14,11,366},{143,11,
-131},{6,0,1865},{6,0,1879},{6,0,1881},{6,0,1894},{6,0,1908},{9,0,915},{9,0,926},
-{9,0,940},{9,0,943},{9,0,966},{9,0,980},{9,0,989},{9,0,1005},{9,0,1010},{12,0,
-813},{12,0,817},{12,0,840},{12,0,843},{12,0,855},{12,0,864},{12,0,871},{12,0,872
-},{12,0,899},{12,0,905},{12,0,924},{15,0,171},{15,0,181},{15,0,224},{15,0,235},{
-15,0,251},{146,0,184},{137,11,52},{5,0,16},{6,0,86},{6,0,603},{7,0,292},{7,0,561
-},{8,0,257},{8,0,382},{9,0,721},{9,0,778},{11,0,581},{140,0,466},{4,0,486},{5,0,
-491},{135,10,1121},{4,0,72},{6,0,265},{135,0,1300},{135,11,1183},{10,10,249},{
-139,10,209},{132,10,561},{137,11,519},{4,11,656},{4,10,760},{135,11,779},{9,10,
-154},{140,10,485},{135,11,1793},{135,11,144},{136,10,255},{133,0,621},{4,10,368}
-,{135,10,641},{135,11,1373},{7,11,554},{7,11,605},{141,11,10},{137,0,234},{5,0,
-815},{6,0,1688},{134,0,1755},{5,11,838},{5,11,841},{134,11,1649},{7,0,1987},{7,0
-,2040},{136,0,743},{133,11,1012},{6,0,197},{136,0,205},{6,0,314},{134,11,314},{
-144,11,53},{6,11,251},{7,11,365},{7,11,1357},{7,11,1497},{8,11,154},{141,11,281}
-,{133,11,340},{6,0,452},{7,0,312},{138,0,219},{138,0,589},{4,0,333},{9,0,176},{
-12,0,353},{141,0,187},{9,10,92},{147,10,91},{134,0,1110},{11,0,47},{139,11,495},
-{6,10,525},{8,10,806},{9,10,876},{140,10,284},{8,11,261},{9,11,144},{9,11,466},{
-10,11,370},{12,11,470},{13,11,144},{142,11,348},{137,11,897},{8,0,863},{8,0,864}
-,{8,0,868},{8,0,884},{10,0,866},{10,0,868},{10,0,873},{10,0,911},{10,0,912},{10,
-0,944},{12,0,727},{6,11,248},{9,11,546},{10,11,535},{11,11,681},{141,11,135},{6,
-0,300},{135,0,1515},{134,0,1237},{139,10,958},{133,10,594},{140,11,250},{134,0,
-1685},{134,11,567},{7,0,135},{8,0,7},{8,0,62},{9,0,243},{10,0,658},{10,0,697},{
-11,0,456},{139,0,756},{9,0,395},{138,0,79},{6,10,1641},{136,10,820},{4,10,302},{
-135,10,1766},{134,11,174},{135,10,1313},{135,0,631},{134,10,1674},{134,11,395},{
-138,0,835},{7,0,406},{7,0,459},{8,0,606},{139,0,726},{134,11,617},{134,0,979},{6
-,10,389},{7,10,149},{9,10,142},{138,10,94},{5,11,878},{133,11,972},{6,10,8},{7,
-10,1881},{8,10,91},{136,11,511},{133,0,612},{132,11,351},{4,0,372},{7,0,482},{8,
-0,158},{9,0,602},{9,0,615},{10,0,245},{10,0,678},{10,0,744},{11,0,248},{139,0,
-806},{5,0,854},{135,0,1991},{132,11,286},{135,11,344},{7,11,438},{7,11,627},{7,
-11,1516},{8,11,40},{9,11,56},{9,11,294},{10,11,30},{10,11,259},{11,11,969},{146,
-11,148},{135,0,1492},{5,11,259},{7,11,414},{7,11,854},{142,11,107},{135,10,1746}
-,{6,0,833},{134,0,998},{135,10,24},{6,0,750},{135,0,1739},{4,10,503},{135,10,
-1661},{5,10,130},{7,10,1314},{9,10,610},{10,10,718},{11,10,601},{11,10,819},{11,
-10,946},{140,10,536},{10,10,149},{11,10,280},{142,10,336},{132,11,738},{135,10,
-1946},{5,0,195},{135,0,1685},{7,0,1997},{8,0,730},{139,0,1006},{151,11,17},{133,
-11,866},{14,0,463},{14,0,470},{150,0,61},{5,0,751},{8,0,266},{11,0,578},{4,10,
-392},{135,10,1597},{5,10,433},{9,10,633},{139,10,629},{135,0,821},{6,0,715},{134
-,0,1325},{133,11,116},{6,0,868},{132,11,457},{134,0,959},{6,10,234},{138,11,199}
-,{7,0,1053},{7,10,1950},{8,10,680},{11,10,817},{147,10,88},{7,10,1222},{138,10,
-386},{5,0,950},{5,0,994},{6,0,351},{134,0,1124},{134,0,1081},{7,0,1595},{6,10,5}
-,{11,10,249},{12,10,313},{16,10,66},{145,10,26},{148,0,59},{5,11,527},{6,11,189}
-,{135,11,859},{5,10,963},{6,10,1773},{11,11,104},{11,11,554},{15,11,60},{143,11,
-125},{135,0,47},{137,0,684},{134,11,116},{134,0,1606},{134,0,777},{7,0,1020},{8,
-10,509},{136,10,792},{135,0,1094},{132,0,350},{133,11,487},{4,11,86},{5,11,667},
-{5,11,753},{6,11,316},{6,11,455},{135,11,946},{7,0,1812},{13,0,259},{13,0,356},{
-14,0,242},{147,0,114},{132,10,931},{133,0,967},{4,0,473},{7,0,623},{8,0,808},{9,
-0,871},{9,0,893},{11,0,38},{11,0,431},{12,0,112},{12,0,217},{12,0,243},{12,0,562
-},{12,0,663},{12,0,683},{13,0,141},{13,0,197},{13,0,227},{13,0,406},{13,0,487},{
-14,0,156},{14,0,203},{14,0,224},{14,0,256},{18,0,58},{150,0,0},{138,0,286},{7,10
-,943},{139,10,614},{135,10,1837},{150,11,45},{132,0,798},{4,0,222},{7,0,286},{
-136,0,629},{4,11,79},{7,11,1773},{10,11,450},{11,11,589},{13,11,332},{13,11,493}
-,{14,11,183},{14,11,334},{14,11,362},{14,11,368},{14,11,376},{14,11,379},{19,11,
-90},{19,11,103},{19,11,127},{148,11,90},{5,0,337},{11,0,513},{11,0,889},{11,0,
-961},{12,0,461},{13,0,79},{15,0,121},{4,10,90},{5,10,545},{7,10,754},{9,10,186},
-{10,10,72},{10,10,782},{11,10,577},{11,10,610},{12,10,354},{12,10,362},{140,10,
-595},{141,0,306},{136,0,146},{7,0,1646},{9,10,329},{11,10,254},{141,11,124},{4,0
-,465},{135,0,1663},{132,0,525},{133,11,663},{10,0,299},{18,0,74},{9,10,187},{11,
-10,1016},{145,10,44},{7,0,165},{7,0,919},{4,10,506},{136,10,517},{5,10,295},{135
-,10,1680},{133,11,846},{134,0,1064},{5,11,378},{7,11,1402},{7,11,1414},{8,11,465
-},{9,11,286},{10,11,185},{10,11,562},{10,11,635},{11,11,31},{11,11,393},{12,11,
-456},{13,11,312},{18,11,65},{18,11,96},{147,11,89},{132,0,596},{7,10,987},{9,10,
-688},{10,10,522},{11,10,788},{140,10,566},{6,0,82},{7,0,138},{7,0,517},{7,0,1741
-},{11,0,238},{4,11,648},{134,10,1775},{7,0,1233},{7,10,700},{7,10,940},{8,10,514
-},{9,10,116},{9,10,535},{10,10,118},{11,10,107},{11,10,148},{11,10,922},{12,10,
-254},{12,10,421},{142,10,238},{4,0,962},{6,0,1824},{8,0,894},{12,0,708},{12,0,
-725},{14,0,451},{20,0,94},{22,0,59},{150,0,62},{5,11,945},{6,11,1656},{6,11,1787
-},{7,11,167},{8,11,824},{9,11,391},{10,11,375},{139,11,185},{5,0,495},{7,0,834},
-{9,0,733},{139,0,378},{4,10,743},{135,11,1273},{6,0,1204},{7,11,1645},{8,11,352}
-,{137,11,249},{139,10,292},{133,0,559},{132,11,152},{9,0,499},{10,0,341},{15,0,
-144},{19,0,49},{7,10,1283},{9,10,227},{11,10,325},{11,10,408},{14,10,180},{146,
-10,47},{6,0,21},{6,0,1737},{7,0,1444},{136,0,224},{133,11,1006},{7,0,1446},{9,0,
-97},{17,0,15},{5,10,81},{7,10,146},{7,10,1342},{8,10,53},{8,10,561},{8,10,694},{
-8,10,754},{9,10,115},{9,10,894},{10,10,462},{10,10,813},{11,10,230},{11,10,657},
-{11,10,699},{11,10,748},{12,10,119},{12,10,200},{12,10,283},{142,10,273},{5,10,
-408},{137,10,747},{135,11,431},{135,11,832},{6,0,729},{134,0,953},{4,0,727},{8,0
-,565},{5,11,351},{7,11,264},{136,11,565},{134,0,1948},{5,0,519},{5,11,40},{7,11,
-598},{7,11,1638},{8,11,78},{9,11,166},{9,11,640},{9,11,685},{9,11,773},{11,11,
-215},{13,11,65},{14,11,172},{14,11,317},{145,11,6},{8,11,60},{9,11,343},{139,11,
-769},{137,11,455},{134,0,1193},{140,0,790},{7,11,1951},{8,11,765},{8,11,772},{
-140,11,671},{7,11,108},{8,11,219},{8,11,388},{9,11,639},{9,11,775},{11,11,275},{
-140,11,464},{132,11,468},{7,10,30},{8,10,86},{8,10,315},{8,10,700},{9,10,576},{9
-,10,858},{11,10,310},{11,10,888},{11,10,904},{12,10,361},{141,10,248},{5,11,15},
-{6,11,56},{7,11,1758},{8,11,500},{9,11,730},{11,11,331},{13,11,150},{142,11,282}
-,{4,0,402},{7,0,2},{8,0,323},{136,0,479},{138,10,839},{11,0,580},{142,0,201},{5,
-0,59},{135,0,672},{137,10,617},{146,0,34},{134,11,1886},{4,0,961},{136,0,896},{6
-,0,1285},{5,11,205},{6,11,438},{137,11,711},{134,10,428},{7,10,524},{8,10,169},{
-8,10,234},{9,10,480},{138,10,646},{148,0,46},{141,0,479},{133,11,534},{6,0,2019}
-,{134,10,1648},{4,0,85},{7,0,549},{7,10,1205},{138,10,637},{4,0,663},{5,0,94},{7
-,11,235},{7,11,1475},{15,11,68},{146,11,120},{6,11,443},{9,11,237},{9,11,571},{9
-,11,695},{10,11,139},{11,11,715},{12,11,417},{141,11,421},{132,0,783},{4,0,682},
-{8,0,65},{9,10,39},{10,10,166},{11,10,918},{12,10,635},{20,10,10},{22,10,27},{22
-,10,43},{150,10,52},{6,0,11},{135,0,187},{132,0,522},{4,0,52},{135,0,661},{4,0,
-383},{133,0,520},{135,11,546},{11,0,343},{142,0,127},{4,11,578},{7,10,157},{7,11
-,624},{7,11,916},{8,10,279},{10,11,256},{11,11,87},{139,11,703},{134,10,604},{4,
-0,281},{5,0,38},{7,0,194},{7,0,668},{7,0,1893},{137,0,397},{7,10,945},{11,10,713
-},{139,10,744},{139,10,1022},{9,0,635},{139,0,559},{5,11,923},{7,11,490},{12,11,
-553},{13,11,100},{14,11,118},{143,11,75},{132,0,975},{132,10,567},{137,10,859},{
-7,10,1846},{7,11,1846},{8,10,628},{136,11,628},{148,0,116},{138,11,750},{14,0,51
-},{14,11,51},{15,11,7},{148,11,20},{132,0,858},{134,0,1075},{4,11,924},{133,10,
-762},{136,0,535},{133,0,448},{10,10,784},{141,10,191},{133,10,298},{7,0,610},{
-135,0,1501},{7,10,633},{7,10,905},{7,10,909},{7,10,1538},{9,10,767},{140,10,636}
-,{4,11,265},{7,11,807},{135,11,950},{5,11,93},{12,11,267},{144,11,26},{136,0,191
-},{139,10,301},{135,10,1970},{135,0,267},{4,0,319},{5,0,699},{138,0,673},{6,0,
-336},{7,0,92},{7,0,182},{8,0,453},{8,0,552},{9,0,204},{9,0,285},{10,0,99},{11,0,
-568},{11,0,950},{12,0,94},{16,0,20},{16,0,70},{19,0,55},{12,10,644},{144,10,90},
-{6,0,551},{7,0,1308},{7,10,845},{7,11,994},{8,10,160},{137,10,318},{19,11,1},{19
-,11,26},{150,11,9},{7,0,1406},{9,0,218},{141,0,222},{5,0,256},{138,0,69},{5,11,
-233},{5,11,320},{6,11,140},{7,11,330},{136,11,295},{6,0,1980},{136,0,952},{4,0,
-833},{137,11,678},{133,11,978},{4,11,905},{6,11,1701},{137,11,843},{138,10,735},
-{136,10,76},{17,0,39},{148,0,36},{18,0,81},{146,11,81},{14,0,352},{17,0,53},{18,
-0,146},{18,0,152},{19,0,11},{150,0,54},{135,0,634},{138,10,841},{132,0,618},{4,0
-,339},{7,0,259},{17,0,73},{4,11,275},{140,11,376},{132,11,509},{7,11,273},{139,
-11,377},{4,0,759},{13,0,169},{137,10,804},{6,10,96},{135,10,1426},{4,10,651},{
-133,10,289},{7,0,1075},{8,10,35},{9,10,511},{10,10,767},{147,10,118},{6,0,649},{
-6,0,670},{136,0,482},{5,0,336},{6,0,341},{6,0,478},{6,0,1763},{136,0,386},{5,11,
-802},{7,11,2021},{8,11,805},{14,11,94},{15,11,65},{16,11,4},{16,11,77},{16,11,80
-},{145,11,5},{6,0,1035},{5,11,167},{5,11,899},{6,11,410},{137,11,777},{134,11,
-1705},{5,0,924},{133,0,969},{132,10,704},{135,0,73},{135,11,10},{135,10,1078},{5
-,11,11},{6,11,117},{6,11,485},{7,11,1133},{9,11,582},{9,11,594},{11,11,21},{11,
-11,818},{12,11,535},{141,11,86},{135,0,1971},{4,11,264},{7,11,1067},{8,11,204},{
-8,11,385},{139,11,953},{6,0,1458},{135,0,1344},{5,0,396},{134,0,501},{4,10,720},
-{133,10,306},{4,0,929},{5,0,799},{8,0,46},{8,0,740},{133,10,431},{7,11,646},{7,
-11,1730},{11,11,446},{141,11,178},{7,0,276},{5,10,464},{6,10,236},{7,10,696},{7,
-10,914},{7,10,1108},{7,10,1448},{9,10,15},{9,10,564},{10,10,14},{12,10,565},{13,
-10,449},{14,10,53},{15,10,13},{16,10,64},{145,10,41},{4,0,892},{133,0,770},{6,10
-,1767},{12,10,194},{145,10,107},{135,0,158},{5,10,840},{138,11,608},{134,0,1432}
-,{138,11,250},{8,11,794},{9,11,400},{10,11,298},{142,11,228},{151,0,25},{7,11,
-1131},{135,11,1468},{135,0,2001},{9,10,642},{11,10,236},{142,10,193},{4,10,68},{
-5,10,634},{6,10,386},{7,10,794},{8,10,273},{9,10,563},{10,10,105},{10,10,171},{
-11,10,94},{139,10,354},{136,11,724},{132,0,478},{11,11,512},{13,11,205},{19,11,
-30},{22,11,36},{151,11,19},{7,0,1461},{140,0,91},{6,11,190},{7,11,768},{135,11,
-1170},{4,0,602},{8,0,211},{4,10,95},{7,10,416},{139,10,830},{7,10,731},{13,10,20
-},{143,10,11},{6,0,1068},{135,0,1872},{4,0,13},{5,0,567},{7,0,1498},{9,0,124},{
-11,0,521},{12,0,405},{135,11,1023},{135,0,1006},{132,0,735},{138,0,812},{4,0,170
-},{135,0,323},{6,11,137},{9,11,75},{9,11,253},{10,11,194},{138,11,444},{5,0,304}
-,{7,0,1403},{5,10,864},{10,10,648},{11,10,671},{143,10,46},{135,11,1180},{133,10
-,928},{4,0,148},{133,0,742},{11,10,986},{140,10,682},{133,0,523},{135,11,1743},{
-7,0,730},{18,0,144},{19,0,61},{8,10,44},{9,10,884},{10,10,580},{11,10,399},{11,
-10,894},{143,10,122},{5,11,760},{7,11,542},{8,11,135},{136,11,496},{136,0,981},{
-133,0,111},{10,0,132},{11,0,191},{11,0,358},{139,0,460},{7,11,319},{7,11,355},{7
-,11,763},{10,11,389},{145,11,43},{134,0,890},{134,0,1420},{136,11,557},{133,10,
-518},{133,0,444},{135,0,1787},{135,10,1852},{8,0,123},{15,0,6},{144,0,7},{6,0,
-2041},{10,11,38},{139,11,784},{136,0,932},{5,0,937},{135,0,100},{6,0,995},{4,11,
-58},{5,11,286},{6,11,319},{7,11,402},{7,11,1254},{7,11,1903},{8,11,356},{140,11,
-408},{4,11,389},{9,11,181},{9,11,255},{10,11,8},{10,11,29},{10,11,816},{11,11,
-311},{11,11,561},{12,11,67},{141,11,181},{138,0,255},{5,0,138},{4,10,934},{136,
-10,610},{4,0,965},{10,0,863},{138,0,898},{10,10,804},{138,10,832},{12,0,631},{8,
-10,96},{9,10,36},{10,10,607},{11,10,423},{11,10,442},{12,10,309},{14,10,199},{15
-,10,90},{145,10,110},{134,0,1394},{4,0,652},{8,0,320},{22,0,6},{22,0,16},{9,10,
-13},{9,10,398},{9,10,727},{10,10,75},{10,10,184},{10,10,230},{10,10,564},{10,10,
-569},{11,10,973},{12,10,70},{12,10,189},{13,10,57},{141,10,257},{6,0,897},{134,0
-,1333},{4,0,692},{133,0,321},{133,11,373},{135,0,922},{5,0,619},{133,0,698},{137
-,10,631},{5,10,345},{135,10,1016},{9,0,957},{9,0,1018},{12,0,828},{12,0,844},{12
-,0,897},{12,0,901},{12,0,943},{15,0,180},{18,0,197},{18,0,200},{18,0,213},{18,0,
-214},{146,0,226},{5,0,917},{134,0,1659},{135,0,1100},{134,0,1173},{134,0,1930},{
-5,0,251},{5,0,956},{8,0,268},{9,0,214},{146,0,142},{133,10,673},{137,10,850},{4,
-10,287},{133,10,1018},{132,11,672},{5,0,346},{5,0,711},{8,0,390},{11,11,752},{
-139,11,885},{5,10,34},{10,10,724},{12,10,444},{13,10,354},{18,10,32},{23,10,24},
-{23,10,31},{152,10,5},{4,11,710},{134,11,606},{134,0,744},{134,10,382},{133,11,
-145},{4,10,329},{7,11,884},{140,11,124},{4,11,467},{5,11,405},{134,11,544},{9,10
-,846},{138,10,827},{133,0,624},{9,11,372},{15,11,2},{19,11,10},{147,11,18},{4,11
-,387},{135,11,1288},{5,0,783},{7,0,1998},{135,0,2047},{132,10,906},{136,10,366},
-{135,11,550},{4,10,123},{4,10,649},{5,10,605},{7,10,1509},{136,10,36},{134,0,
-1125},{132,0,594},{133,10,767},{135,11,1227},{136,11,467},{4,11,576},{135,11,
-1263},{4,0,268},{7,0,1534},{135,11,1534},{4,10,273},{5,10,658},{5,11,919},{5,10,
-995},{134,11,1673},{133,0,563},{134,10,72},{135,10,1345},{4,11,82},{5,11,333},{5
-,11,904},{6,11,207},{7,11,325},{7,11,1726},{8,11,101},{10,11,778},{139,11,220},{
-5,0,37},{6,0,39},{6,0,451},{7,0,218},{7,0,667},{7,0,1166},{7,0,1687},{8,0,662},{
-16,0,2},{133,10,589},{134,0,1332},{133,11,903},{134,0,508},{5,10,117},{6,10,514}
-,{6,10,541},{7,10,1164},{7,10,1436},{8,10,220},{8,10,648},{10,10,688},{11,10,560
-},{140,11,147},{6,11,555},{135,11,485},{133,10,686},{7,0,453},{7,0,635},{7,0,796
-},{8,0,331},{9,0,330},{9,0,865},{10,0,119},{10,0,235},{11,0,111},{11,0,129},{11,
-0,240},{12,0,31},{12,0,66},{12,0,222},{12,0,269},{12,0,599},{12,0,684},{12,0,689
-},{12,0,691},{142,0,345},{135,0,1834},{4,11,705},{7,11,615},{138,11,251},{136,11
-,345},{137,0,527},{6,0,98},{7,0,702},{135,0,991},{11,0,576},{14,0,74},{7,10,196}
-,{10,10,765},{11,10,347},{11,10,552},{11,10,790},{12,10,263},{13,10,246},{13,10,
-270},{13,10,395},{14,10,176},{14,10,190},{14,10,398},{14,10,412},{15,10,32},{15,
-10,63},{16,10,88},{147,10,105},{134,11,90},{13,0,84},{141,0,122},{6,0,37},{7,0,
-299},{7,0,1666},{8,0,195},{8,0,316},{9,0,178},{9,0,276},{9,0,339},{9,0,536},{10,
-0,102},{10,0,362},{10,0,785},{11,0,55},{11,0,149},{11,0,773},{13,0,416},{13,0,
-419},{14,0,38},{14,0,41},{142,0,210},{5,10,381},{135,10,1792},{7,11,813},{12,11,
-497},{141,11,56},{7,10,616},{138,10,413},{133,0,645},{6,11,125},{135,11,1277},{
-132,0,290},{6,0,70},{7,0,1292},{10,0,762},{139,0,288},{6,10,120},{7,10,1188},{7,
-10,1710},{8,10,286},{9,10,667},{11,10,592},{139,10,730},{135,11,1784},{7,0,1315}
-,{135,11,1315},{134,0,1955},{135,10,1146},{7,0,131},{7,0,422},{8,0,210},{140,0,
-573},{4,10,352},{135,10,687},{139,0,797},{143,0,38},{14,0,179},{15,0,151},{150,0
-,11},{7,0,488},{4,10,192},{5,10,49},{6,10,200},{6,10,293},{134,10,1696},{132,0,
-936},{135,11,703},{6,11,160},{7,11,1106},{9,11,770},{10,11,618},{11,11,112},{140
-,11,413},{5,0,453},{134,0,441},{135,0,595},{132,10,650},{132,10,147},{6,0,991},{
-6,0,1182},{12,11,271},{145,11,109},{133,10,934},{140,11,221},{132,0,653},{7,0,
-505},{135,0,523},{134,0,903},{135,11,479},{7,11,304},{9,11,646},{9,11,862},{10,
-11,262},{11,11,696},{12,11,208},{15,11,79},{147,11,108},{146,0,80},{135,11,981},
-{142,0,432},{132,0,314},{137,11,152},{7,0,1368},{8,0,232},{8,0,361},{10,0,682},{
-138,0,742},{135,11,1586},{9,0,534},{4,11,434},{11,11,663},{12,11,210},{13,11,166
-},{13,11,310},{14,11,373},{147,11,43},{7,11,1091},{135,11,1765},{6,11,550},{135,
-11,652},{137,0,27},{142,0,12},{4,10,637},{5,11,553},{7,11,766},{138,11,824},{7,
-11,737},{8,11,298},{136,11,452},{7,0,736},{139,0,264},{134,0,1657},{133,11,292},
-{138,11,135},{6,0,844},{134,0,1117},{135,0,127},{9,10,867},{138,10,837},{6,0,
-1184},{134,0,1208},{134,0,1294},{136,0,364},{6,0,1415},{7,0,1334},{11,0,125},{6,
-10,170},{7,11,393},{8,10,395},{8,10,487},{10,11,603},{11,11,206},{141,10,147},{
-137,11,748},{4,11,912},{137,11,232},{4,10,535},{136,10,618},{137,0,792},{7,11,
-1973},{136,11,716},{135,11,98},{5,0,909},{9,0,849},{138,0,805},{4,0,630},{132,0,
-699},{5,11,733},{14,11,103},{150,10,23},{12,11,158},{18,11,8},{19,11,62},{20,11,
-6},{22,11,4},{23,11,2},{151,11,9},{132,0,968},{132,10,778},{132,10,46},{5,10,811
-},{6,10,1679},{6,10,1714},{135,10,2032},{6,0,1446},{7,10,1458},{9,10,407},{139,
-10,15},{7,0,206},{7,0,397},{7,0,621},{7,0,640},{8,0,124},{8,0,619},{9,0,305},{9,
-0,643},{10,0,264},{10,0,628},{11,0,40},{12,0,349},{13,0,134},{13,0,295},{14,0,
-155},{15,0,120},{18,0,105},{6,10,34},{7,10,1089},{8,10,708},{8,10,721},{9,10,363
-},{148,10,98},{4,0,262},{5,0,641},{135,0,342},{137,11,72},{4,0,99},{6,0,250},{6,
-0,346},{8,0,127},{138,0,81},{132,0,915},{5,0,75},{9,0,517},{10,0,470},{12,0,155}
-,{141,0,224},{132,10,462},{11,11,600},{11,11,670},{141,11,245},{142,0,83},{5,10,
-73},{6,10,23},{134,10,338},{6,0,1031},{139,11,923},{7,11,164},{7,11,1571},{9,11,
-107},{140,11,225},{134,0,1470},{133,0,954},{6,0,304},{8,0,418},{10,0,345},{11,0,
-341},{139,0,675},{9,0,410},{139,0,425},{4,11,27},{5,11,484},{5,11,510},{6,11,434
-},{7,11,1000},{7,11,1098},{8,11,2},{136,11,200},{134,0,734},{140,11,257},{7,10,
-725},{8,10,498},{139,10,268},{134,0,1822},{135,0,1798},{135,10,773},{132,11,460}
-,{4,11,932},{133,11,891},{134,0,14},{132,10,583},{7,10,1462},{8,11,625},{139,10,
-659},{5,0,113},{6,0,243},{6,0,1708},{7,0,1865},{11,0,161},{16,0,37},{17,0,99},{
-133,10,220},{134,11,76},{5,11,461},{135,11,1925},{140,0,69},{8,11,92},{137,11,
-221},{139,10,803},{132,10,544},{4,0,274},{134,0,922},{132,0,541},{5,0,627},{6,10
-,437},{6,10,564},{11,10,181},{141,10,183},{135,10,1192},{7,0,166},{132,11,763},{
-133,11,253},{134,0,849},{9,11,73},{10,11,110},{14,11,185},{145,11,119},{5,11,212
-},{12,11,35},{141,11,382},{133,0,717},{137,0,304},{136,0,600},{133,0,654},{6,0,
-273},{10,0,188},{13,0,377},{146,0,77},{4,10,790},{5,10,273},{134,10,394},{132,0,
-543},{135,0,410},{11,0,98},{11,0,524},{141,0,87},{132,0,941},{135,11,1175},{4,0,
-250},{7,0,1612},{11,0,186},{12,0,133},{6,10,127},{7,10,1511},{8,10,613},{12,10,
-495},{12,10,586},{12,10,660},{12,10,668},{14,10,385},{15,10,118},{17,10,20},{146
-,10,98},{6,0,1785},{133,11,816},{134,0,1339},{7,0,961},{7,0,1085},{7,0,1727},{8,
-0,462},{6,10,230},{135,11,1727},{9,0,636},{135,10,1954},{132,0,780},{5,11,869},{
-5,11,968},{6,11,1626},{8,11,734},{136,11,784},{4,11,542},{6,11,1716},{6,11,1727}
-,{7,11,1082},{7,11,1545},{8,11,56},{8,11,118},{8,11,412},{8,11,564},{9,11,888},{
-9,11,908},{10,11,50},{10,11,423},{11,11,685},{11,11,697},{11,11,933},{12,11,299}
-,{13,11,126},{13,11,136},{13,11,170},{141,11,190},{134,11,226},{4,11,232},{9,11,
-202},{10,11,474},{140,11,433},{137,11,500},{5,0,529},{136,10,68},{132,10,654},{4
-,10,156},{7,10,998},{7,10,1045},{7,10,1860},{9,10,48},{9,10,692},{11,10,419},{
-139,10,602},{7,0,1276},{8,0,474},{9,0,652},{6,11,108},{7,11,1003},{7,11,1181},{
-136,11,343},{7,11,1264},{7,11,1678},{11,11,945},{12,11,341},{12,11,471},{140,11,
-569},{134,11,1712},{5,0,948},{12,0,468},{19,0,96},{148,0,24},{4,11,133},{7,11,
-711},{7,11,1298},{7,11,1585},{135,11,1929},{6,0,753},{140,0,657},{139,0,941},{6,
-11,99},{7,11,1808},{145,11,57},{6,11,574},{7,11,428},{7,11,1250},{10,11,669},{11
-,11,485},{11,11,840},{12,11,300},{142,11,250},{4,0,532},{5,0,706},{135,0,662},{5
-,0,837},{6,0,1651},{139,0,985},{7,0,1861},{9,10,197},{10,10,300},{12,10,473},{13
-,10,90},{141,10,405},{137,11,252},{6,11,323},{135,11,1564},{4,0,330},{4,0,863},{
-7,0,933},{7,0,2012},{8,0,292},{7,11,461},{8,11,775},{138,11,435},{132,10,606},{4
-,11,655},{7,11,850},{17,11,75},{146,11,137},{135,0,767},{7,10,1978},{136,10,676}
-,{132,0,641},{135,11,1559},{134,0,1233},{137,0,242},{17,0,114},{4,10,361},{133,
-10,315},{137,0,883},{132,10,461},{138,0,274},{134,0,2008},{134,0,1794},{4,0,703}
-,{135,0,207},{12,0,285},{132,10,472},{132,0,571},{5,0,873},{5,0,960},{8,0,823},{
-9,0,881},{136,11,577},{7,0,617},{10,0,498},{11,0,501},{12,0,16},{140,0,150},{138
-,10,747},{132,0,431},{133,10,155},{11,0,283},{11,0,567},{7,10,163},{8,10,319},{9
-,10,402},{10,10,24},{10,10,681},{11,10,200},{12,10,253},{12,10,410},{142,10,219}
-,{4,11,413},{5,11,677},{8,11,432},{140,11,280},{9,0,401},{5,10,475},{7,10,1780},
-{11,10,297},{11,10,558},{14,10,322},{147,10,76},{6,0,781},{9,0,134},{10,0,2},{10
-,0,27},{10,0,333},{11,0,722},{143,0,1},{5,0,33},{6,0,470},{139,0,424},{135,0,
-2006},{12,0,783},{135,10,1956},{136,0,274},{135,0,1882},{132,0,794},{135,0,1848}
-,{5,10,944},{134,10,1769},{6,0,47},{7,0,90},{7,0,664},{7,0,830},{7,0,1380},{7,0,
-2025},{8,0,448},{136,0,828},{132,10,144},{134,0,1199},{4,11,395},{139,11,762},{
-135,11,1504},{9,0,417},{137,0,493},{9,11,174},{10,11,164},{11,11,440},{11,11,841
-},{143,11,98},{134,11,426},{139,11,1002},{134,0,295},{134,0,816},{6,10,247},{137
-,10,555},{133,0,1019},{4,0,620},{5,11,476},{10,10,280},{138,10,797},{139,0,464},
-{5,11,76},{6,11,458},{6,11,497},{7,11,764},{7,11,868},{9,11,658},{10,11,594},{11
-,11,173},{11,11,566},{12,11,20},{12,11,338},{141,11,200},{134,0,208},{4,11,526},
-{7,11,1029},{135,11,1054},{132,11,636},{6,11,233},{7,11,660},{7,11,1124},{17,11,
-31},{19,11,22},{151,11,14},{10,0,442},{133,10,428},{10,0,930},{140,0,778},{6,0,
-68},{7,0,448},{7,0,1629},{7,0,1769},{7,0,1813},{8,0,442},{8,0,516},{9,0,710},{10
-,0,282},{10,0,722},{7,10,1717},{138,10,546},{134,0,1128},{11,0,844},{12,0,104},{
-140,0,625},{4,11,432},{135,11,824},{138,10,189},{133,0,787},{133,10,99},{4,11,
-279},{7,11,301},{137,11,362},{8,0,491},{4,10,397},{136,10,555},{4,11,178},{133,
-11,399},{134,0,711},{144,0,9},{4,0,403},{5,0,441},{7,0,450},{10,0,840},{11,0,101
-},{12,0,193},{141,0,430},{135,11,1246},{12,10,398},{20,10,39},{21,10,11},{150,10
-,41},{4,10,485},{7,10,353},{135,10,1523},{6,10,366},{7,10,1384},{7,10,1601},{135
-,11,1912},{7,0,396},{10,0,160},{135,11,396},{137,10,282},{134,11,1692},{4,10,157
-},{5,10,471},{6,11,202},{10,11,448},{11,11,208},{12,11,360},{17,11,117},{17,11,
-118},{18,11,27},{148,11,67},{133,0,679},{137,0,326},{136,10,116},{7,11,872},{10,
-11,516},{139,11,167},{132,11,224},{5,11,546},{7,11,35},{8,11,11},{8,11,12},{9,11
-,315},{9,11,533},{10,11,802},{11,11,166},{12,11,525},{142,11,243},{7,0,1128},{
-135,11,1920},{5,11,241},{8,11,242},{9,11,451},{10,11,667},{11,11,598},{140,11,
-429},{6,0,737},{5,10,160},{7,10,363},{7,10,589},{10,10,170},{141,10,55},{135,0,
-1796},{142,11,254},{4,0,574},{7,0,350},{7,0,1024},{8,0,338},{9,0,677},{138,0,808
-},{134,0,1096},{137,11,516},{7,0,405},{10,0,491},{4,10,108},{4,11,366},{139,10,
-498},{11,11,337},{142,11,303},{134,11,1736},{7,0,1081},{140,11,364},{7,10,1005},
-{140,10,609},{7,0,1676},{4,10,895},{133,10,772},{135,0,2037},{6,0,1207},{11,11,
-916},{142,11,419},{14,11,140},{148,11,41},{6,11,331},{136,11,623},{9,0,944},{9,0
-,969},{9,0,1022},{12,0,913},{12,0,936},{15,0,177},{15,0,193},{4,10,926},{133,10,
-983},{5,0,354},{135,11,506},{8,0,598},{9,0,664},{138,0,441},{4,11,640},{133,11,
-513},{137,0,297},{132,10,538},{6,10,294},{7,10,1267},{136,10,624},{7,0,1772},{7,
-11,1888},{8,11,289},{11,11,45},{12,11,278},{140,11,537},{135,10,1325},{138,0,751
-},{141,0,37},{134,0,1828},{132,10,757},{132,11,394},{6,0,257},{135,0,1522},{4,0,
-582},{9,0,191},{135,11,1931},{7,11,574},{7,11,1719},{137,11,145},{132,11,658},{
-10,0,790},{132,11,369},{9,11,781},{10,11,144},{11,11,385},{13,11,161},{13,11,228
-},{13,11,268},{148,11,107},{8,0,469},{10,0,47},{136,11,374},{6,0,306},{7,0,1140}
-,{7,0,1340},{8,0,133},{138,0,449},{139,0,1011},{7,10,1875},{139,10,124},{4,11,
-344},{6,11,498},{139,11,323},{137,0,299},{132,0,837},{133,11,906},{5,0,329},{8,0
-,260},{138,0,10},{134,0,1320},{4,0,657},{146,0,158},{135,0,1191},{152,0,7},{6,0,
-1939},{8,0,974},{138,0,996},{135,0,1665},{11,11,126},{139,11,287},{143,0,8},{14,
-11,149},{14,11,399},{143,11,57},{5,0,66},{7,0,1896},{136,0,288},{7,0,175},{10,0,
-494},{5,10,150},{8,10,603},{9,10,593},{9,10,634},{10,10,173},{11,10,462},{11,10,
-515},{13,10,216},{13,10,288},{142,10,400},{134,0,1643},{136,11,21},{4,0,21},{5,0
-,91},{5,0,648},{5,0,750},{5,0,781},{6,0,54},{6,0,112},{6,0,402},{6,0,1732},{7,0,
-315},{7,0,749},{7,0,1427},{7,0,1900},{9,0,78},{9,0,508},{10,0,611},{10,0,811},{
-11,0,510},{11,0,728},{13,0,36},{14,0,39},{16,0,83},{17,0,124},{148,0,30},{4,0,
-668},{136,0,570},{10,0,322},{10,0,719},{139,0,407},{135,11,1381},{136,11,193},{
-12,10,108},{141,10,291},{132,11,616},{136,11,692},{8,0,125},{8,0,369},{8,0,524},
-{10,0,486},{11,0,13},{11,0,381},{11,0,736},{11,0,766},{11,0,845},{13,0,114},{13,
-0,292},{142,0,47},{134,0,1247},{6,0,1684},{6,0,1731},{7,0,356},{8,0,54},{8,0,221
-},{9,0,225},{9,0,356},{10,0,77},{10,0,446},{10,0,731},{12,0,404},{141,0,491},{
-135,10,1777},{4,11,305},{4,10,493},{144,10,55},{4,0,951},{6,0,1809},{6,0,1849},{
-8,0,846},{8,0,866},{8,0,899},{10,0,896},{12,0,694},{142,0,468},{5,11,214},{7,11,
-603},{8,11,611},{9,11,686},{10,11,88},{11,11,459},{11,11,496},{12,11,463},{12,11
-,590},{13,11,0},{142,11,214},{132,0,411},{4,0,80},{133,0,44},{140,11,74},{143,0,
-31},{7,0,669},{6,10,568},{7,10,1804},{8,10,362},{8,10,410},{8,10,830},{9,10,514}
-,{11,10,649},{142,10,157},{7,0,673},{134,11,1703},{132,10,625},{134,0,1303},{5,0
-,299},{135,0,1083},{138,0,704},{6,0,275},{7,0,408},{6,10,158},{7,10,129},{7,10,
-181},{8,10,276},{8,10,377},{10,10,523},{11,10,816},{12,10,455},{13,10,303},{142,
-10,135},{4,0,219},{7,0,367},{7,0,1713},{7,0,1761},{9,0,86},{9,0,537},{10,0,165},
-{12,0,219},{140,0,561},{8,0,216},{4,10,1},{4,11,737},{6,11,317},{7,10,1143},{7,
-10,1463},{9,10,207},{9,10,390},{9,10,467},{10,11,98},{11,11,294},{11,10,836},{12
-,11,60},{12,11,437},{13,11,64},{13,11,380},{142,11,430},{6,11,1758},{8,11,520},{
-9,11,345},{9,11,403},{142,11,350},{5,11,47},{10,11,242},{138,11,579},{5,11,139},
-{7,11,1168},{138,11,539},{135,0,1319},{4,10,295},{4,10,723},{5,10,895},{7,10,
-1031},{8,10,199},{8,10,340},{9,10,153},{9,10,215},{10,10,21},{10,10,59},{10,10,
-80},{10,10,224},{10,10,838},{11,10,229},{11,10,652},{12,10,192},{13,10,146},{142
-,10,91},{140,0,428},{137,10,51},{133,0,514},{5,10,309},{140,10,211},{6,0,1010},{
-5,10,125},{8,10,77},{138,10,15},{4,0,55},{5,0,301},{6,0,571},{142,0,49},{146,0,
-102},{136,11,370},{4,11,107},{7,11,613},{8,11,358},{8,11,439},{8,11,504},{9,11,
-501},{10,11,383},{139,11,477},{132,11,229},{133,0,364},{133,10,439},{4,11,903},{
-135,11,1816},{11,0,379},{140,10,76},{4,0,76},{4,0,971},{7,0,1550},{9,0,306},{9,0
-,430},{9,0,663},{10,0,683},{10,0,921},{11,0,427},{11,0,753},{12,0,334},{12,0,442
-},{14,0,258},{14,0,366},{143,0,131},{137,0,52},{4,11,47},{6,11,373},{7,11,452},{
-7,11,543},{7,11,1714},{7,11,1856},{9,11,6},{11,11,257},{139,11,391},{4,10,8},{7,
-10,1152},{7,10,1153},{7,10,1715},{9,10,374},{10,10,478},{139,10,648},{4,11,785},
-{133,11,368},{135,10,1099},{135,11,860},{5,11,980},{134,11,1754},{134,0,1258},{6
-,0,1058},{6,0,1359},{7,11,536},{7,11,1331},{136,11,143},{4,0,656},{135,0,779},{
-136,10,87},{5,11,19},{6,11,533},{146,11,126},{7,0,144},{138,10,438},{5,11,395},{
-5,11,951},{134,11,1776},{135,0,1373},{7,0,554},{7,0,605},{141,0,10},{4,10,69},{5
-,10,122},{9,10,656},{138,10,464},{5,10,849},{134,10,1633},{5,0,838},{5,0,841},{
-134,0,1649},{133,0,1012},{139,10,499},{7,10,476},{7,10,1592},{138,10,87},{6,0,
-251},{7,0,365},{7,0,1357},{7,0,1497},{8,0,154},{141,0,281},{132,11,441},{132,11,
-695},{7,11,497},{9,11,387},{147,11,81},{133,0,340},{14,10,283},{142,11,283},{134
-,0,810},{135,11,1894},{139,0,495},{5,11,284},{6,11,49},{6,11,350},{7,11,1},{7,11
-,377},{7,11,1693},{8,11,18},{8,11,678},{9,11,161},{9,11,585},{9,11,671},{9,11,
-839},{11,11,912},{141,11,427},{5,10,859},{7,10,1160},{8,10,107},{9,10,291},{9,10
-,439},{10,10,663},{11,10,609},{140,10,197},{8,0,261},{9,0,144},{9,0,466},{10,0,
-370},{12,0,470},{13,0,144},{142,0,348},{137,0,897},{6,0,248},{9,0,546},{10,0,535
-},{11,0,681},{141,0,135},{4,0,358},{135,0,1496},{134,0,567},{136,0,445},{4,10,
-117},{6,10,372},{7,10,1905},{142,10,323},{4,10,722},{139,10,471},{6,0,697},{134,
-0,996},{7,11,2007},{9,11,101},{9,11,450},{10,11,66},{10,11,842},{11,11,536},{140
-,11,587},{132,0,577},{134,0,1336},{9,10,5},{12,10,216},{12,10,294},{12,10,298},{
-12,10,400},{12,10,518},{13,10,229},{143,10,139},{6,0,174},{138,0,917},{134,10,
-1774},{5,10,12},{7,10,375},{9,10,88},{9,10,438},{11,11,62},{139,10,270},{134,11,
-1766},{6,11,0},{7,11,84},{7,10,816},{7,10,1241},{9,10,283},{9,10,520},{10,10,213
-},{10,10,307},{10,10,463},{10,10,671},{10,10,746},{11,10,401},{11,10,794},{11,11
-,895},{12,10,517},{17,11,11},{18,10,107},{147,10,115},{5,0,878},{133,0,972},{6,
-11,1665},{7,11,256},{7,11,1388},{138,11,499},{4,10,258},{136,10,639},{4,11,22},{
-5,11,10},{6,10,22},{7,11,848},{7,10,903},{7,10,1963},{8,11,97},{138,10,577},{5,
-10,681},{136,10,782},{133,11,481},{132,0,351},{4,10,664},{5,10,804},{139,10,1013
-},{6,11,134},{7,11,437},{7,11,959},{9,11,37},{14,11,285},{14,11,371},{144,11,60}
-,{7,11,486},{8,11,155},{11,11,93},{140,11,164},{132,0,286},{7,0,438},{7,0,627},{
-7,0,1516},{8,0,40},{9,0,56},{9,0,294},{10,0,30},{11,0,969},{11,0,995},{146,0,148
-},{5,11,591},{135,11,337},{134,0,1950},{133,10,32},{138,11,500},{5,11,380},{5,11
-,650},{136,11,310},{4,11,364},{7,11,1156},{7,11,1187},{137,11,409},{4,0,738},{
-134,11,482},{4,11,781},{6,11,487},{7,11,926},{8,11,263},{139,11,500},{135,11,418
-},{6,0,2047},{10,0,969},{4,10,289},{7,10,629},{7,10,1698},{7,10,1711},{140,10,
-215},{6,10,450},{136,10,109},{134,0,818},{136,10,705},{133,0,866},{4,11,94},{135
-,11,1265},{132,11,417},{134,0,1467},{135,10,1238},{4,0,972},{6,0,1851},{134,0,
-1857},{134,0,355},{133,0,116},{132,0,457},{135,11,1411},{4,11,408},{4,11,741},{
-135,11,500},{134,10,26},{142,11,137},{5,0,527},{6,0,189},{7,0,859},{136,0,267},{
-11,0,104},{11,0,554},{15,0,60},{143,0,125},{134,0,1613},{4,10,414},{5,10,467},{9
-,10,654},{10,10,451},{12,10,59},{141,10,375},{135,10,17},{134,0,116},{135,11,541
-},{135,10,955},{6,11,73},{135,11,177},{133,11,576},{134,0,886},{133,0,487},{4,0,
-86},{5,0,667},{5,0,753},{6,0,316},{6,0,455},{135,0,946},{142,11,231},{150,0,45},
-{134,0,863},{134,0,1953},{6,10,280},{10,10,502},{11,10,344},{140,10,38},{4,0,79}
-,{7,0,1773},{10,0,450},{11,0,589},{13,0,332},{13,0,493},{14,0,183},{14,0,334},{
-14,0,362},{14,0,368},{14,0,376},{14,0,379},{19,0,90},{19,0,103},{19,0,127},{148,
-0,90},{5,10,45},{7,10,1161},{11,10,448},{11,10,880},{13,10,139},{13,10,407},{15,
-10,16},{17,10,95},{18,10,66},{18,10,88},{18,10,123},{149,10,7},{136,10,777},{4,
-10,410},{135,10,521},{135,10,1778},{135,11,538},{142,0,381},{133,11,413},{134,0,
-1142},{6,0,1189},{136,11,495},{5,0,663},{6,0,1962},{134,0,2003},{7,11,54},{8,11,
-312},{10,11,191},{10,11,614},{140,11,567},{132,10,436},{133,0,846},{10,0,528},{
-11,0,504},{7,10,1587},{135,10,1707},{5,0,378},{8,0,465},{9,0,286},{10,0,185},{10
-,0,562},{10,0,635},{11,0,31},{11,0,393},{13,0,312},{18,0,65},{18,0,96},{147,0,89
-},{7,0,899},{14,0,325},{6,11,468},{7,11,567},{7,11,1478},{8,11,530},{142,11,290}
-,{7,0,1880},{9,0,680},{139,0,798},{134,0,1770},{132,0,648},{150,11,35},{5,0,945}
-,{6,0,1656},{6,0,1787},{7,0,167},{8,0,824},{9,0,391},{10,0,375},{139,0,185},{6,
-11,484},{135,11,822},{134,0,2046},{7,0,1645},{8,0,352},{137,0,249},{132,0,152},{
-6,0,611},{135,0,1733},{6,11,1724},{135,11,2022},{133,0,1006},{141,11,96},{5,0,
-420},{135,0,1449},{146,11,149},{135,0,832},{135,10,663},{133,0,351},{5,0,40},{7,
-0,598},{7,0,1638},{8,0,78},{9,0,166},{9,0,640},{9,0,685},{9,0,773},{11,0,215},{
-13,0,65},{14,0,172},{14,0,317},{145,0,6},{8,0,60},{9,0,343},{139,0,769},{134,0,
-1354},{132,0,724},{137,0,745},{132,11,474},{7,0,1951},{8,0,765},{8,0,772},{140,0
-,671},{7,0,108},{8,0,219},{8,0,388},{9,0,775},{11,0,275},{140,0,464},{137,0,639}
-,{135,10,503},{133,11,366},{5,0,15},{6,0,56},{7,0,1758},{8,0,500},{9,0,730},{11,
-0,331},{13,0,150},{14,0,282},{5,11,305},{9,11,560},{141,11,208},{4,10,113},{5,10
-,163},{5,10,735},{7,10,1009},{9,10,9},{9,10,771},{12,10,90},{13,10,138},{13,10,
-410},{143,10,128},{4,10,324},{138,10,104},{135,11,466},{142,11,27},{134,0,1886},
-{5,0,205},{6,0,438},{9,0,711},{4,11,480},{6,11,167},{6,11,302},{6,11,1642},{7,11
-,130},{7,11,656},{7,11,837},{7,11,1547},{7,11,1657},{8,11,429},{9,11,228},{10,11
-,643},{13,11,289},{13,11,343},{147,11,101},{134,0,865},{6,0,2025},{136,0,965},{7
-,11,278},{10,11,739},{11,11,708},{141,11,348},{133,0,534},{135,11,1922},{137,0,
-691},{4,10,935},{133,10,823},{6,0,443},{9,0,237},{9,0,571},{9,0,695},{10,0,139},
-{11,0,715},{12,0,417},{141,0,421},{5,10,269},{7,10,434},{7,10,891},{8,10,339},{9
-,10,702},{11,10,594},{11,10,718},{145,10,100},{6,0,1555},{7,0,878},{9,10,485},{
-141,10,264},{134,10,1713},{7,10,1810},{11,10,866},{12,10,103},{141,10,495},{135,
-10,900},{6,0,1410},{9,11,316},{139,11,256},{4,0,995},{135,0,1033},{132,0,578},{
-10,0,881},{12,0,740},{12,0,743},{140,0,759},{132,0,822},{133,0,923},{142,10,143}
-,{135,11,1696},{6,11,363},{7,11,1955},{136,11,725},{132,0,924},{133,0,665},{135,
-10,2029},{135,0,1901},{4,0,265},{6,0,1092},{6,0,1417},{7,0,807},{135,0,950},{5,0
-,93},{12,0,267},{141,0,498},{135,0,1451},{5,11,813},{135,11,2046},{5,10,625},{
-135,10,1617},{135,0,747},{6,0,788},{137,0,828},{7,0,184},{11,0,307},{11,0,400},{
-15,0,130},{5,11,712},{7,11,1855},{8,10,425},{8,10,693},{9,10,720},{10,10,380},{
-10,10,638},{11,11,17},{11,10,473},{12,10,61},{13,11,321},{144,11,67},{135,0,198}
-,{6,11,320},{7,11,781},{7,11,1921},{9,11,55},{10,11,186},{10,11,273},{10,11,664}
-,{10,11,801},{11,11,996},{11,11,997},{13,11,157},{142,11,170},{136,11,271},{135,
-0,994},{7,11,103},{7,11,863},{11,11,184},{14,11,299},{145,11,62},{11,10,551},{
-142,10,159},{5,0,233},{5,0,320},{6,0,140},{8,0,295},{8,0,615},{136,11,615},{133,
-0,978},{4,0,905},{6,0,1701},{137,0,843},{132,10,168},{4,0,974},{8,0,850},{12,0,
-709},{12,0,768},{140,0,786},{135,10,91},{152,0,6},{138,10,532},{135,10,1884},{
-132,0,509},{6,0,1307},{135,0,273},{5,11,77},{7,11,1455},{10,11,843},{19,11,73},{
-150,11,5},{132,11,458},{135,11,1420},{6,11,109},{138,11,382},{6,0,201},{6,11,330
-},{7,10,70},{7,11,1084},{10,10,240},{11,11,142},{147,10,93},{7,0,1041},{140,11,
-328},{133,11,354},{134,0,1040},{133,0,693},{134,0,774},{139,0,234},{132,0,336},{
-7,0,1399},{139,10,392},{20,0,22},{148,11,22},{5,0,802},{7,0,2021},{136,0,805},{5
-,0,167},{5,0,899},{6,0,410},{137,0,777},{137,0,789},{134,0,1705},{7,10,655},{135
-,10,1844},{4,10,145},{6,10,176},{7,10,395},{137,10,562},{132,10,501},{135,0,10},
-{5,0,11},{6,0,117},{6,0,485},{7,0,1133},{9,0,582},{9,0,594},{10,0,82},{11,0,21},
-{11,0,818},{12,0,535},{13,0,86},{20,0,91},{23,0,13},{134,10,509},{4,0,264},{7,0,
-1067},{8,0,204},{8,0,385},{139,0,953},{139,11,737},{138,0,56},{134,0,1917},{133,
-0,470},{10,11,657},{14,11,297},{142,11,361},{135,11,412},{7,0,1198},{7,11,1198},
-{8,11,556},{14,11,123},{14,11,192},{143,11,27},{7,11,1985},{14,11,146},{15,11,42
-},{16,11,23},{17,11,86},{146,11,17},{11,0,1015},{136,11,122},{4,10,114},{9,10,
-492},{13,10,462},{142,10,215},{4,10,77},{5,10,361},{6,10,139},{6,10,401},{6,10,
-404},{7,10,413},{7,10,715},{7,10,1716},{11,10,279},{12,10,179},{12,10,258},{13,
-10,244},{142,10,358},{134,10,1717},{7,10,1061},{8,10,82},{11,10,250},{12,10,420}
-,{141,10,184},{133,0,715},{135,10,724},{9,0,919},{9,0,922},{9,0,927},{9,0,933},{
-9,0,962},{9,0,1000},{9,0,1002},{9,0,1021},{12,0,890},{12,0,907},{12,0,930},{15,0
-,207},{15,0,228},{15,0,238},{149,0,61},{8,0,794},{9,0,400},{10,0,298},{142,0,228
-},{5,11,430},{5,11,932},{6,11,131},{7,11,417},{9,11,522},{11,11,314},{141,11,390
-},{132,0,867},{8,0,724},{132,11,507},{137,11,261},{4,11,343},{133,11,511},{6,0,
-190},{7,0,768},{135,0,1170},{6,10,513},{135,10,1052},{7,11,455},{138,11,591},{
-134,0,1066},{137,10,899},{14,0,67},{147,0,60},{4,0,948},{18,0,174},{146,0,176},{
-135,0,1023},{7,10,1417},{12,10,382},{17,10,48},{152,10,12},{134,11,575},{132,0,
-764},{6,10,545},{7,10,565},{7,10,1669},{10,10,114},{11,10,642},{140,10,618},{6,0
-,137},{9,0,75},{9,0,253},{10,0,194},{138,0,444},{4,0,756},{133,10,5},{8,0,1008},
-{135,10,192},{132,0,842},{11,0,643},{12,0,115},{136,10,763},{139,0,67},{133,10,
-759},{4,0,821},{5,0,760},{7,0,542},{8,0,135},{8,0,496},{135,11,580},{7,10,370},{
-7,10,1007},{7,10,1177},{135,10,1565},{135,10,1237},{140,0,736},{7,0,319},{7,0,
-355},{7,0,763},{10,0,389},{145,0,43},{8,11,333},{138,11,182},{4,10,87},{5,10,250
-},{141,10,298},{138,0,786},{134,0,2044},{8,11,330},{140,11,477},{135,11,1338},{
-132,11,125},{134,0,1030},{134,0,1083},{132,11,721},{135,10,814},{7,11,776},{8,11
-,145},{147,11,56},{134,0,1226},{4,10,57},{7,10,1195},{7,10,1438},{7,10,1548},{7,
-10,1835},{7,10,1904},{9,10,757},{10,10,604},{139,10,519},{7,11,792},{8,11,147},{
-10,11,821},{139,11,1021},{137,11,797},{4,0,58},{5,0,286},{6,0,319},{7,0,402},{7,
-0,1254},{7,0,1903},{8,0,356},{140,0,408},{4,0,389},{4,0,815},{9,0,181},{9,0,255}
-,{10,0,8},{10,0,29},{10,0,816},{11,0,311},{11,0,561},{12,0,67},{141,0,181},{7,11
-,1472},{135,11,1554},{7,11,1071},{7,11,1541},{7,11,1767},{7,11,1806},{7,11,1999}
-,{9,11,248},{10,11,400},{11,11,162},{11,11,178},{11,11,242},{12,11,605},{15,11,
-26},{144,11,44},{5,11,168},{5,11,930},{8,11,74},{9,11,623},{12,11,500},{12,11,
-579},{13,11,41},{143,11,93},{6,11,220},{7,11,1101},{141,11,105},{5,0,474},{7,0,
-507},{4,10,209},{7,11,507},{135,10,902},{132,0,427},{6,0,413},{7,10,335},{7,10,
-1437},{7,10,1668},{8,10,553},{8,10,652},{8,10,656},{9,10,558},{11,10,743},{149,
-10,18},{132,0,730},{6,11,19},{7,11,1413},{139,11,428},{133,0,373},{132,10,559},{
-7,11,96},{8,11,401},{137,11,896},{7,0,799},{7,0,1972},{5,10,1017},{138,10,511},{
-135,0,1793},{7,11,1961},{7,11,1965},{8,11,702},{136,11,750},{8,11,150},{8,11,737
-},{140,11,366},{132,0,322},{133,10,709},{8,11,800},{9,11,148},{9,11,872},{9,11,
-890},{11,11,309},{11,11,1001},{13,11,267},{141,11,323},{134,10,1745},{7,0,290},{
-136,10,206},{7,0,1651},{145,0,89},{139,0,2},{132,0,672},{6,0,1860},{8,0,905},{10
-,0,844},{10,0,846},{10,0,858},{12,0,699},{12,0,746},{140,0,772},{135,11,424},{
-133,11,547},{133,0,737},{5,11,490},{6,11,615},{6,11,620},{135,11,683},{6,0,746},
-{134,0,1612},{132,10,776},{9,11,385},{149,11,17},{133,0,145},{135,10,1272},{7,0,
-884},{140,0,124},{4,0,387},{135,0,1288},{5,11,133},{136,10,406},{136,11,187},{6,
-0,679},{8,11,8},{138,11,0},{135,0,550},{135,11,798},{136,11,685},{7,11,1086},{
-145,11,46},{8,10,175},{10,10,168},{138,10,573},{135,0,1305},{4,0,576},{135,0,
-1263},{6,0,686},{134,0,1563},{134,0,607},{5,0,919},{134,0,1673},{148,0,37},{8,11
-,774},{10,11,670},{140,11,51},{133,10,784},{139,10,882},{4,0,82},{5,0,333},{5,0,
-904},{6,0,207},{7,0,325},{7,0,1726},{8,0,101},{10,0,778},{139,0,220},{135,11,371
-},{132,0,958},{133,0,903},{4,11,127},{5,11,350},{6,11,356},{8,11,426},{9,11,572}
-,{10,11,247},{139,11,312},{140,0,147},{6,11,59},{7,11,885},{9,11,603},{141,11,
-397},{10,0,367},{9,10,14},{9,10,441},{139,10,9},{11,10,966},{12,10,287},{13,10,
-342},{13,10,402},{15,10,110},{143,10,163},{134,0,690},{132,0,705},{9,0,651},{11,
-0,971},{13,0,273},{7,10,1428},{7,10,1640},{7,10,1867},{9,10,169},{9,10,182},{9,
-10,367},{9,10,478},{9,10,506},{9,10,551},{9,10,557},{9,10,648},{9,10,697},{9,10,
-705},{9,10,725},{9,10,787},{9,10,794},{10,10,198},{10,10,214},{10,10,267},{10,10
-,275},{10,10,456},{10,10,551},{10,10,561},{10,10,613},{10,10,627},{10,10,668},{
-10,10,675},{10,10,691},{10,10,695},{10,10,707},{10,10,715},{11,10,183},{11,10,
-201},{11,10,262},{11,10,352},{11,10,439},{11,10,493},{11,10,572},{11,10,591},{11
-,10,608},{11,10,611},{11,10,646},{11,10,674},{11,10,711},{11,10,751},{11,10,761}
-,{11,10,776},{11,10,785},{11,10,850},{11,10,853},{11,10,862},{11,10,865},{11,10,
-868},{11,10,875},{11,10,898},{11,10,902},{11,10,903},{11,10,910},{11,10,932},{11
-,10,942},{11,10,957},{11,10,967},{11,10,972},{12,10,148},{12,10,195},{12,10,220}
-,{12,10,237},{12,10,318},{12,10,339},{12,10,393},{12,10,445},{12,10,450},{12,10,
-474},{12,10,505},{12,10,509},{12,10,533},{12,10,591},{12,10,594},{12,10,597},{12
-,10,621},{12,10,633},{12,10,642},{13,10,59},{13,10,60},{13,10,145},{13,10,239},{
-13,10,250},{13,10,329},{13,10,344},{13,10,365},{13,10,372},{13,10,387},{13,10,
-403},{13,10,414},{13,10,456},{13,10,470},{13,10,478},{13,10,483},{13,10,489},{14
-,10,55},{14,10,57},{14,10,81},{14,10,90},{14,10,148},{14,10,239},{14,10,266},{14
-,10,321},{14,10,326},{14,10,327},{14,10,330},{14,10,347},{14,10,355},{14,10,401}
-,{14,10,404},{14,10,411},{14,10,414},{14,10,416},{14,10,420},{15,10,61},{15,10,
-74},{15,10,87},{15,10,88},{15,10,94},{15,10,96},{15,10,116},{15,10,149},{15,10,
-154},{16,10,50},{16,10,63},{16,10,73},{17,10,2},{17,10,66},{17,10,92},{17,10,103
-},{17,10,112},{17,10,120},{18,10,50},{18,10,54},{18,10,82},{18,10,86},{18,10,90}
-,{18,10,111},{18,10,115},{18,10,156},{19,10,40},{19,10,79},{20,10,78},{149,10,22
-},{7,0,887},{5,10,161},{135,10,839},{142,11,98},{134,0,90},{138,11,356},{135,11,
-441},{6,11,111},{7,11,4},{8,11,163},{8,11,776},{138,11,566},{134,0,908},{134,0,
-1261},{7,0,813},{12,0,497},{141,0,56},{134,0,1235},{135,0,429},{135,11,1994},{
-138,0,904},{6,0,125},{7,0,1277},{137,0,772},{151,0,12},{4,0,841},{5,0,386},{133,
-11,386},{5,11,297},{135,11,1038},{6,0,860},{6,0,1069},{135,11,309},{136,0,946},{
-135,10,1814},{141,11,418},{136,11,363},{10,0,768},{139,0,787},{22,11,30},{150,11
-,33},{6,0,160},{7,0,1106},{9,0,770},{11,0,112},{140,0,413},{11,11,216},{139,11,
-340},{136,10,139},{135,11,1390},{135,11,808},{132,11,280},{12,0,271},{17,0,109},
-{7,10,643},{136,10,236},{140,11,54},{4,11,421},{133,11,548},{11,0,719},{12,0,36}
-,{141,0,337},{7,0,581},{9,0,644},{137,0,699},{11,11,511},{13,11,394},{14,11,298}
-,{14,11,318},{146,11,103},{7,0,304},{9,0,646},{9,0,862},{11,0,696},{12,0,208},{
-15,0,79},{147,0,108},{4,0,631},{7,0,1126},{135,0,1536},{135,11,1527},{8,0,880},{
-10,0,869},{138,0,913},{7,0,1513},{5,10,54},{6,11,254},{9,11,109},{138,11,103},{
-135,0,981},{133,11,729},{132,10,744},{132,0,434},{134,0,550},{7,0,930},{10,0,476
-},{13,0,452},{19,0,104},{6,11,1630},{10,10,402},{146,10,55},{5,0,553},{138,0,824
-},{136,0,452},{8,0,151},{137,10,624},{132,10,572},{132,0,772},{133,11,671},{133,
-0,292},{138,0,135},{132,11,889},{140,11,207},{9,0,504},{6,10,43},{7,10,38},{8,10
-,248},{138,10,513},{6,0,1089},{135,11,1910},{4,11,627},{133,11,775},{135,0,783},
-{133,10,766},{133,10,363},{7,0,387},{135,11,387},{7,0,393},{10,0,603},{11,0,206}
-,{7,11,202},{11,11,362},{11,11,948},{140,11,388},{6,11,507},{7,11,451},{8,11,389
-},{12,11,490},{13,11,16},{13,11,215},{13,11,351},{18,11,132},{147,11,125},{4,0,
-912},{9,0,232},{135,11,841},{6,10,258},{140,10,409},{5,10,249},{148,10,82},{136,
-11,566},{6,0,977},{135,11,1214},{7,0,1973},{136,0,716},{135,0,98},{133,0,733},{5
-,11,912},{134,11,1695},{5,10,393},{6,10,378},{7,10,1981},{9,10,32},{9,10,591},{
-10,10,685},{10,10,741},{142,10,382},{133,10,788},{10,0,19},{11,0,911},{7,10,1968
-},{141,10,509},{5,0,668},{5,11,236},{6,11,572},{8,11,492},{11,11,618},{144,11,56
-},{135,11,1789},{4,0,360},{5,0,635},{5,0,700},{5,10,58},{5,10,171},{5,10,683},{6
-,10,291},{6,10,566},{7,10,1650},{11,10,523},{12,10,273},{12,10,303},{15,10,39},{
-143,10,111},{133,0,901},{134,10,589},{5,11,190},{136,11,318},{140,0,656},{7,0,
-726},{152,0,9},{4,10,917},{133,10,1005},{135,10,1598},{134,11,491},{4,10,919},{
-133,11,434},{137,0,72},{6,0,1269},{6,0,1566},{134,0,1621},{9,0,463},{10,0,595},{
-4,10,255},{5,10,302},{6,10,132},{7,10,128},{7,10,283},{7,10,1299},{10,10,52},{10
-,10,514},{11,10,925},{13,10,92},{142,10,309},{135,0,1454},{134,0,1287},{11,0,600
-},{13,0,245},{137,10,173},{136,0,989},{7,0,164},{7,0,1571},{9,0,107},{140,0,225}
-,{6,0,1061},{141,10,442},{4,0,27},{5,0,484},{5,0,510},{6,0,434},{7,0,1000},{7,0,
-1098},{136,0,2},{7,11,85},{7,11,247},{8,11,585},{10,11,163},{138,11,316},{11,11,
-103},{142,11,0},{134,0,1127},{4,0,460},{134,0,852},{134,10,210},{4,0,932},{133,0
-,891},{6,0,588},{147,11,83},{8,0,625},{4,10,284},{134,10,223},{134,0,76},{8,0,92
-},{137,0,221},{4,11,124},{10,11,457},{11,11,121},{11,11,169},{11,11,422},{11,11,
-870},{12,11,214},{13,11,389},{14,11,187},{143,11,77},{9,11,618},{138,11,482},{4,
-10,218},{7,10,526},{143,10,137},{13,0,9},{14,0,104},{14,0,311},{4,10,270},{5,10,
-192},{6,10,332},{135,10,1322},{140,10,661},{135,11,1193},{6,11,107},{7,11,638},{
-7,11,1632},{137,11,396},{132,0,763},{4,0,622},{5,11,370},{134,11,1756},{133,0,
-253},{135,0,546},{9,0,73},{10,0,110},{14,0,185},{17,0,119},{133,11,204},{7,0,624
-},{7,0,916},{10,0,256},{139,0,87},{7,10,379},{8,10,481},{137,10,377},{5,0,212},{
-12,0,35},{13,0,382},{5,11,970},{134,11,1706},{9,0,746},{5,10,1003},{134,10,149},
-{10,0,150},{11,0,849},{13,0,330},{8,10,262},{9,10,627},{11,10,214},{11,10,404},{
-11,10,457},{11,10,780},{11,10,913},{13,10,401},{142,10,200},{134,0,1466},{135,11
-,3},{6,0,1299},{4,11,35},{5,11,121},{5,11,483},{5,11,685},{6,11,489},{7,11,1204}
-,{136,11,394},{135,10,742},{4,10,142},{136,10,304},{4,11,921},{133,11,1007},{134
-,0,1518},{6,0,1229},{135,0,1175},{133,0,816},{12,0,159},{4,10,471},{4,11,712},{5
-,10,51},{6,10,602},{7,10,925},{8,10,484},{138,10,195},{134,11,1629},{5,0,869},{5
-,0,968},{6,0,1626},{8,0,734},{136,0,784},{4,0,542},{6,0,1716},{6,0,1727},{7,0,
-1082},{7,0,1545},{8,0,56},{8,0,118},{8,0,412},{8,0,564},{9,0,888},{9,0,908},{10,
-0,50},{10,0,423},{11,0,685},{11,0,697},{11,0,933},{12,0,299},{13,0,126},{13,0,
-136},{13,0,170},{13,0,190},{136,10,688},{132,10,697},{4,0,232},{9,0,202},{10,0,
-474},{140,0,433},{136,0,212},{6,0,108},{7,0,1003},{7,0,1181},{8,0,111},{136,0,
-343},{5,10,221},{135,11,1255},{133,11,485},{134,0,1712},{142,0,216},{5,0,643},{6
-,0,516},{4,11,285},{5,11,317},{6,11,301},{7,11,7},{8,11,153},{10,11,766},{11,11,
-468},{12,11,467},{141,11,143},{4,0,133},{7,0,711},{7,0,1298},{135,0,1585},{134,0
-,650},{135,11,512},{6,0,99},{7,0,1808},{145,0,57},{6,0,246},{6,0,574},{7,0,428},
-{9,0,793},{10,0,669},{11,0,485},{11,0,840},{12,0,300},{14,0,250},{145,0,55},{4,
-10,132},{5,10,69},{135,10,1242},{136,0,1023},{7,0,302},{132,10,111},{135,0,1871}
-,{132,0,728},{9,0,252},{132,10,767},{6,0,461},{7,0,1590},{7,10,1416},{7,10,2005}
-,{8,10,131},{8,10,466},{9,10,672},{13,10,252},{148,10,103},{6,0,323},{135,0,1564
-},{7,0,461},{136,0,775},{6,10,44},{136,10,368},{139,0,172},{132,0,464},{4,10,570
-},{133,10,120},{137,11,269},{6,10,227},{135,10,1589},{6,11,1719},{6,11,1735},{7,
-11,2016},{7,11,2020},{8,11,837},{137,11,852},{7,0,727},{146,0,73},{132,0,1023},{
-135,11,852},{135,10,1529},{136,0,577},{138,11,568},{134,0,1037},{8,11,67},{138,
-11,419},{4,0,413},{5,0,677},{8,0,432},{140,0,280},{10,0,600},{6,10,1667},{7,11,
-967},{7,10,2036},{141,11,11},{6,10,511},{140,10,132},{6,0,799},{5,10,568},{6,10,
-138},{135,10,1293},{8,0,159},{4,10,565},{136,10,827},{7,0,646},{7,0,1730},{11,0,
-446},{141,0,178},{4,10,922},{133,10,1023},{135,11,11},{132,0,395},{11,0,145},{
-135,10,1002},{9,0,174},{10,0,164},{11,0,440},{11,0,514},{11,0,841},{15,0,98},{
-149,0,20},{134,0,426},{10,0,608},{139,0,1002},{7,11,320},{8,11,51},{12,11,481},{
-12,11,570},{148,11,106},{9,0,977},{9,0,983},{132,11,445},{138,0,250},{139,0,100}
-,{6,0,1982},{136,10,402},{133,11,239},{4,10,716},{141,10,31},{5,0,476},{7,11,83}
-,{7,11,1990},{8,11,130},{139,11,720},{8,10,691},{136,10,731},{5,11,123},{6,11,
-530},{7,11,348},{135,11,1419},{5,0,76},{6,0,458},{6,0,497},{7,0,868},{9,0,658},{
-10,0,594},{11,0,173},{11,0,566},{12,0,20},{12,0,338},{141,0,200},{9,11,139},{10,
-11,399},{11,11,469},{12,11,634},{141,11,223},{9,10,840},{138,10,803},{133,10,847
-},{11,11,223},{140,11,168},{132,11,210},{8,0,447},{9,10,53},{9,10,268},{9,10,901
-},{10,10,518},{10,10,829},{11,10,188},{13,10,74},{14,10,46},{15,10,17},{15,10,33
-},{17,10,40},{18,10,36},{19,10,20},{22,10,1},{152,10,2},{4,0,526},{7,0,1029},{
-135,0,1054},{19,11,59},{150,11,2},{4,0,636},{6,0,1875},{6,0,1920},{9,0,999},{12,
-0,807},{12,0,825},{15,0,179},{15,0,190},{18,0,182},{136,10,532},{6,0,1699},{7,0,
-660},{7,0,1124},{17,0,31},{19,0,22},{151,0,14},{135,10,681},{132,11,430},{140,10
-,677},{4,10,684},{136,10,384},{132,11,756},{133,11,213},{7,0,188},{7,10,110},{8,
-10,290},{8,10,591},{9,10,382},{9,10,649},{11,10,71},{11,10,155},{11,10,313},{12,
-10,5},{13,10,325},{142,10,287},{7,10,360},{7,10,425},{9,10,66},{9,10,278},{138,
-10,644},{142,11,164},{4,0,279},{7,0,301},{137,0,362},{134,11,586},{135,0,1743},{
-4,0,178},{133,0,399},{4,10,900},{133,10,861},{5,10,254},{7,10,985},{136,10,73},{
-133,11,108},{7,10,1959},{136,10,683},{133,11,219},{4,11,193},{5,11,916},{7,11,
-364},{10,11,398},{10,11,726},{11,11,317},{11,11,626},{12,11,142},{12,11,288},{12
-,11,678},{13,11,313},{15,11,113},{18,11,114},{21,11,30},{150,11,53},{6,11,241},{
-7,11,907},{8,11,832},{9,11,342},{10,11,729},{11,11,284},{11,11,445},{11,11,651},
-{11,11,863},{13,11,398},{146,11,99},{132,0,872},{134,0,831},{134,0,1692},{6,0,
-202},{6,0,1006},{9,0,832},{10,0,636},{11,0,208},{12,0,360},{17,0,118},{18,0,27},
-{20,0,67},{137,11,734},{132,10,725},{7,11,993},{138,11,666},{134,0,1954},{134,10
-,196},{7,0,872},{10,0,516},{139,0,167},{133,10,831},{4,11,562},{9,11,254},{139,
-11,879},{137,0,313},{4,0,224},{132,11,786},{11,0,24},{12,0,170},{136,10,723},{5,
-0,546},{7,0,35},{8,0,11},{8,0,12},{9,0,315},{9,0,533},{10,0,802},{11,0,166},{12,
-0,525},{142,0,243},{7,0,1937},{13,10,80},{13,10,437},{145,10,74},{5,0,241},{8,0,
-242},{9,0,451},{10,0,667},{11,0,598},{140,0,429},{150,0,46},{6,0,1273},{137,0,
-830},{5,10,848},{6,10,66},{136,10,764},{6,0,825},{134,0,993},{4,0,1006},{10,0,
-327},{13,0,271},{4,10,36},{7,10,1387},{139,10,755},{134,0,1023},{135,0,1580},{4,
-0,366},{137,0,516},{132,10,887},{6,0,1736},{135,0,1891},{6,11,216},{7,11,901},{7
-,11,1343},{136,11,493},{6,10,165},{138,10,388},{7,11,341},{139,11,219},{4,10,719
-},{135,10,155},{134,0,1935},{132,0,826},{6,0,331},{6,0,1605},{8,0,623},{11,0,139
-},{139,0,171},{135,11,1734},{10,11,115},{11,11,420},{12,11,154},{13,11,404},{14,
-11,346},{15,11,54},{143,11,112},{7,0,288},{4,10,353},{6,10,146},{6,10,1789},{7,
-10,990},{7,10,1348},{9,10,665},{9,10,898},{11,10,893},{142,10,212},{6,0,916},{
-134,0,1592},{7,0,1888},{4,10,45},{135,10,1257},{5,11,1011},{136,11,701},{139,11,
-596},{4,11,54},{5,11,666},{7,11,1039},{7,11,1130},{9,11,195},{138,11,302},{134,0
-,1471},{134,0,1570},{132,0,394},{140,10,65},{136,10,816},{135,0,1931},{7,0,574},
-{135,0,1719},{134,11,467},{132,0,658},{9,0,781},{10,0,144},{11,0,385},{13,0,161}
-,{13,0,228},{13,0,268},{20,0,107},{134,11,1669},{136,0,374},{135,0,735},{4,0,344
-},{6,0,498},{139,0,323},{7,0,586},{7,0,1063},{6,10,559},{134,10,1691},{137,0,155
-},{133,0,906},{7,11,122},{9,11,259},{10,11,84},{11,11,470},{12,11,541},{141,11,
-379},{134,0,1139},{10,0,108},{139,0,116},{134,10,456},{133,10,925},{5,11,82},{5,
-11,131},{7,11,1755},{8,11,31},{9,11,168},{9,11,764},{139,11,869},{134,11,605},{5
-,11,278},{137,11,68},{4,11,163},{5,11,201},{5,11,307},{5,11,310},{6,11,335},{7,
-11,284},{136,11,165},{135,11,1660},{6,11,33},{135,11,1244},{4,0,616},{136,11,483
-},{8,0,857},{8,0,902},{8,0,910},{10,0,879},{12,0,726},{4,11,199},{139,11,34},{
-136,0,692},{6,10,193},{7,10,240},{7,10,1682},{10,10,51},{10,10,640},{11,10,410},
-{13,10,82},{14,10,247},{14,10,331},{142,10,377},{6,0,823},{134,0,983},{139,10,
-411},{132,0,305},{136,10,633},{138,11,203},{134,0,681},{6,11,326},{7,11,677},{
-137,11,425},{5,0,214},{7,0,603},{8,0,611},{9,0,686},{10,0,88},{11,0,459},{11,0,
-496},{12,0,463},{12,0,590},{141,0,0},{136,0,1004},{142,0,23},{134,0,1703},{147,
-11,8},{145,11,56},{135,0,1443},{4,10,237},{135,10,514},{6,0,714},{145,0,19},{5,
-11,358},{7,11,473},{7,11,1184},{10,11,662},{13,11,212},{13,11,304},{13,11,333},{
-145,11,98},{4,0,737},{10,0,98},{11,0,294},{12,0,60},{12,0,437},{13,0,64},{13,0,
-380},{142,0,430},{6,10,392},{7,10,65},{135,10,2019},{6,0,1758},{8,0,520},{9,0,
-345},{9,0,403},{142,0,350},{5,0,47},{10,0,242},{138,0,579},{5,0,139},{7,0,1168},
-{138,0,539},{134,0,1459},{13,0,388},{141,11,388},{134,0,253},{7,10,1260},{135,10
-,1790},{10,0,252},{9,10,222},{139,10,900},{140,0,745},{133,11,946},{4,0,107},{7,
-0,613},{8,0,439},{8,0,504},{9,0,501},{10,0,383},{139,0,477},{135,11,1485},{132,0
-,871},{7,11,411},{7,11,590},{8,11,631},{9,11,323},{10,11,355},{11,11,491},{12,11
-,143},{12,11,402},{13,11,73},{14,11,408},{15,11,107},{146,11,71},{132,0,229},{
-132,0,903},{140,0,71},{133,0,549},{4,0,47},{6,0,373},{7,0,452},{7,0,543},{7,0,
-1828},{7,0,1856},{9,0,6},{11,0,257},{139,0,391},{7,11,1467},{8,11,328},{10,11,
-544},{11,11,955},{13,11,320},{145,11,83},{5,0,980},{134,0,1754},{136,0,865},{5,0
-,705},{137,0,606},{7,0,161},{8,10,201},{136,10,605},{143,11,35},{5,11,835},{6,11
-,483},{140,10,224},{7,0,536},{7,0,1331},{136,0,143},{134,0,1388},{5,0,724},{10,0
-,305},{11,0,151},{12,0,33},{12,0,121},{12,0,381},{17,0,3},{17,0,27},{17,0,78},{
-18,0,18},{19,0,54},{149,0,5},{4,10,523},{133,10,638},{5,0,19},{134,0,533},{5,0,
-395},{5,0,951},{134,0,1776},{135,0,1908},{132,0,846},{10,0,74},{11,0,663},{12,0,
-210},{13,0,166},{13,0,310},{14,0,373},{18,0,95},{19,0,43},{6,10,242},{7,10,227},
-{7,10,1581},{8,10,104},{9,10,113},{9,10,220},{9,10,427},{10,10,239},{11,10,579},
-{11,10,1023},{13,10,4},{13,10,204},{13,10,316},{148,10,86},{9,11,716},{11,11,108
-},{13,11,123},{14,11,252},{19,11,38},{21,11,3},{151,11,11},{8,0,372},{9,0,122},{
-138,0,175},{132,11,677},{7,11,1374},{136,11,540},{135,10,861},{132,0,695},{7,0,
-497},{9,0,387},{147,0,81},{136,0,937},{134,0,718},{7,0,1328},{136,10,494},{132,
-11,331},{6,0,1581},{133,11,747},{5,0,284},{6,0,49},{6,0,350},{7,0,1},{7,0,377},{
-7,0,1693},{8,0,18},{8,0,678},{9,0,161},{9,0,585},{9,0,671},{9,0,839},{11,0,912},
-{141,0,427},{7,10,1306},{8,10,505},{9,10,482},{10,10,126},{11,10,225},{12,10,347
-},{12,10,449},{13,10,19},{14,10,218},{142,10,435},{10,10,764},{12,10,120},{13,10
-,39},{145,10,127},{4,0,597},{133,10,268},{134,0,1094},{4,0,1008},{134,0,1973},{
-132,0,811},{139,0,908},{135,0,1471},{133,11,326},{4,10,384},{135,10,1022},{7,0,
-1935},{8,0,324},{12,0,42},{4,11,691},{7,11,1935},{8,11,324},{9,11,35},{10,11,680
-},{11,11,364},{12,11,42},{13,11,357},{146,11,16},{135,0,2014},{7,0,2007},{9,0,
-101},{9,0,450},{10,0,66},{10,0,842},{11,0,536},{12,0,587},{6,11,32},{7,11,385},{
-7,11,757},{7,11,1916},{8,11,37},{8,11,94},{8,11,711},{9,11,541},{10,11,162},{10,
-11,795},{11,11,989},{11,11,1010},{12,11,14},{142,11,308},{139,0,586},{135,10,
-1703},{7,0,1077},{11,0,28},{9,10,159},{140,10,603},{6,0,1221},{136,10,583},{6,11
-,152},{6,11,349},{6,11,1682},{7,11,1252},{8,11,112},{9,11,435},{9,11,668},{10,11
-,290},{10,11,319},{10,11,815},{11,11,180},{11,11,837},{12,11,240},{13,11,152},{
-13,11,219},{142,11,158},{139,0,62},{132,10,515},{8,10,632},{8,10,697},{137,10,
-854},{134,0,1766},{132,11,581},{6,11,126},{7,11,573},{8,11,397},{142,11,44},{150
-,0,28},{11,0,670},{22,0,25},{4,10,136},{133,10,551},{6,0,1665},{7,0,256},{7,0,
-1388},{138,0,499},{4,0,22},{5,0,10},{7,0,1576},{136,0,97},{134,10,1782},{5,0,481
-},{7,10,1287},{9,10,44},{10,10,552},{10,10,642},{11,10,839},{12,10,274},{12,10,
-275},{12,10,372},{13,10,91},{142,10,125},{133,11,926},{7,11,1232},{137,11,531},{
-6,0,134},{7,0,437},{7,0,1824},{9,0,37},{14,0,285},{142,0,371},{7,0,486},{8,0,155
-},{11,0,93},{140,0,164},{6,0,1391},{134,0,1442},{133,11,670},{133,0,591},{6,10,
-147},{7,10,886},{7,11,1957},{9,10,753},{138,10,268},{5,0,380},{5,0,650},{7,0,
-1173},{136,0,310},{4,0,364},{7,0,1156},{7,0,1187},{137,0,409},{135,11,1621},{134
-,0,482},{133,11,506},{4,0,781},{6,0,487},{7,0,926},{8,0,263},{139,0,500},{138,10
-,137},{135,11,242},{139,11,96},{133,10,414},{135,10,1762},{134,0,804},{5,11,834}
-,{7,11,1202},{8,11,14},{9,11,481},{137,11,880},{134,10,599},{4,0,94},{135,0,1265
-},{4,0,415},{132,0,417},{5,0,348},{6,0,522},{6,10,1749},{7,11,1526},{138,11,465}
-,{134,10,1627},{132,0,1012},{132,10,488},{4,11,357},{6,11,172},{7,11,143},{137,
-11,413},{4,10,83},{4,11,590},{146,11,76},{140,10,676},{7,11,287},{8,11,355},{9,
-11,293},{137,11,743},{134,10,278},{6,0,1803},{18,0,165},{24,0,21},{5,11,169},{7,
-11,333},{136,11,45},{12,10,97},{140,11,97},{4,0,408},{4,0,741},{135,0,500},{132,
-11,198},{7,10,388},{7,10,644},{139,10,781},{4,11,24},{5,11,140},{5,11,185},{7,11
-,1500},{11,11,565},{139,11,838},{6,0,1321},{9,0,257},{7,10,229},{8,10,59},{9,10,
-190},{10,10,378},{140,10,191},{4,11,334},{133,11,593},{135,11,1885},{134,0,1138}
-,{4,0,249},{6,0,73},{135,0,177},{133,0,576},{142,0,231},{137,0,288},{132,10,660}
-,{7,10,1035},{138,10,737},{135,0,1487},{6,0,989},{9,0,433},{7,10,690},{9,10,587}
-,{140,10,521},{7,0,1264},{7,0,1678},{11,0,945},{12,0,341},{12,0,471},{140,0,569}
-,{132,11,709},{133,11,897},{5,11,224},{13,11,174},{146,11,52},{135,11,1840},{134
-,10,1744},{12,0,87},{16,0,74},{4,10,733},{9,10,194},{10,10,92},{11,10,198},{12,
-10,84},{141,10,128},{140,0,779},{135,0,538},{4,11,608},{133,11,497},{133,0,413},
-{7,11,1375},{7,11,1466},{138,11,331},{136,0,495},{6,11,540},{136,11,136},{7,0,54
-},{8,0,312},{10,0,191},{10,0,614},{140,0,567},{6,0,468},{7,0,567},{7,0,1478},{8,
-0,530},{14,0,290},{133,11,999},{4,11,299},{7,10,306},{135,11,1004},{142,11,296},
-{134,0,1484},{133,10,979},{6,0,609},{9,0,815},{12,11,137},{14,11,9},{14,11,24},{
-142,11,64},{133,11,456},{6,0,484},{135,0,822},{133,10,178},{136,11,180},{132,11,
-755},{137,0,900},{135,0,1335},{6,0,1724},{135,0,2022},{135,11,1139},{5,0,640},{
-132,10,390},{6,0,1831},{138,11,633},{135,11,566},{4,11,890},{5,11,805},{5,11,819
-},{5,11,961},{6,11,396},{6,11,1631},{6,11,1678},{7,11,1967},{7,11,2041},{9,11,
-630},{11,11,8},{11,11,1019},{12,11,176},{13,11,225},{14,11,292},{149,11,24},{132
-,0,474},{134,0,1103},{135,0,1504},{134,0,1576},{6,0,961},{6,0,1034},{140,0,655},
-{11,11,514},{149,11,20},{5,0,305},{135,11,1815},{7,11,1505},{10,11,190},{10,11,
-634},{11,11,792},{12,11,358},{140,11,447},{5,11,0},{6,11,536},{7,11,604},{13,11,
-445},{145,11,126},{7,0,1236},{133,10,105},{4,0,480},{6,0,217},{6,0,302},{6,0,
-1642},{7,0,130},{7,0,837},{7,0,1321},{7,0,1547},{7,0,1657},{8,0,429},{9,0,228},{
-13,0,289},{13,0,343},{19,0,101},{6,11,232},{6,11,412},{7,11,1074},{8,11,9},{8,11
-,157},{8,11,786},{9,11,196},{9,11,352},{9,11,457},{10,11,337},{11,11,232},{11,11
-,877},{12,11,480},{140,11,546},{5,10,438},{7,11,958},{9,10,694},{12,10,627},{13,
-11,38},{141,10,210},{4,11,382},{136,11,579},{7,0,278},{10,0,739},{11,0,708},{141
-,0,348},{4,11,212},{135,11,1206},{135,11,1898},{6,0,708},{6,0,1344},{152,10,11},
-{137,11,768},{134,0,1840},{140,0,233},{8,10,25},{138,10,826},{6,0,2017},{133,11,
-655},{6,0,1488},{139,11,290},{132,10,308},{134,0,1590},{134,0,1800},{134,0,1259}
-,{16,0,28},{6,11,231},{7,11,95},{136,11,423},{133,11,300},{135,10,150},{136,10,
-649},{7,11,1874},{137,11,641},{6,11,237},{7,11,611},{8,11,100},{9,11,416},{11,11
-,335},{12,11,173},{146,11,101},{137,0,45},{134,10,521},{17,0,36},{14,11,26},{146
-,11,150},{7,0,1442},{14,0,22},{5,10,339},{15,10,41},{15,10,166},{147,10,66},{8,0
-,378},{6,11,581},{135,11,1119},{134,0,1507},{147,11,117},{139,0,39},{134,0,1054}
-,{6,0,363},{7,0,1955},{136,0,725},{134,0,2036},{133,11,199},{6,0,1871},{9,0,935}
-,{9,0,961},{9,0,1004},{9,0,1016},{12,0,805},{12,0,852},{12,0,853},{12,0,869},{12
-,0,882},{12,0,896},{12,0,906},{12,0,917},{12,0,940},{15,0,170},{15,0,176},{15,0,
-188},{15,0,201},{15,0,205},{15,0,212},{15,0,234},{15,0,244},{18,0,181},{18,0,193
-},{18,0,196},{18,0,201},{18,0,202},{18,0,210},{18,0,217},{18,0,235},{18,0,236},{
-18,0,237},{21,0,54},{21,0,55},{21,0,58},{21,0,59},{152,0,22},{134,10,1628},{137,
-0,805},{5,0,813},{135,0,2046},{142,11,42},{5,0,712},{6,0,1240},{11,0,17},{13,0,
-321},{144,0,67},{132,0,617},{135,10,829},{6,0,320},{7,0,781},{7,0,1921},{9,0,55}
-,{10,0,186},{10,0,273},{10,0,664},{10,0,801},{11,0,996},{11,0,997},{13,0,157},{
-142,0,170},{136,0,271},{5,10,486},{135,10,1349},{18,11,91},{147,11,70},{10,0,445
-},{7,10,1635},{8,10,17},{138,10,295},{136,11,404},{7,0,103},{7,0,863},{11,0,184}
-,{145,0,62},{138,10,558},{137,0,659},{6,11,312},{6,11,1715},{10,11,584},{11,11,
-546},{11,11,692},{12,11,259},{12,11,295},{13,11,46},{141,11,154},{134,0,676},{
-132,11,588},{4,11,231},{5,11,61},{6,11,104},{7,11,729},{7,11,964},{7,11,1658},{
-140,11,414},{6,11,263},{138,11,757},{11,0,337},{142,0,303},{135,11,1363},{132,11
-,320},{140,0,506},{134,10,447},{5,0,77},{7,0,1455},{10,0,843},{147,0,73},{7,10,
-577},{7,10,1432},{9,10,475},{9,10,505},{9,10,526},{9,10,609},{9,10,689},{9,10,
-726},{9,10,735},{9,10,738},{10,10,556},{10,10,674},{10,10,684},{11,10,89},{11,10
-,202},{11,10,272},{11,10,380},{11,10,415},{11,10,505},{11,10,537},{11,10,550},{
-11,10,562},{11,10,640},{11,10,667},{11,10,688},{11,10,847},{11,10,927},{11,10,
-930},{11,10,940},{12,10,144},{12,10,325},{12,10,329},{12,10,389},{12,10,403},{12
-,10,451},{12,10,515},{12,10,604},{12,10,616},{12,10,626},{13,10,66},{13,10,131},
-{13,10,167},{13,10,236},{13,10,368},{13,10,411},{13,10,434},{13,10,453},{13,10,
-461},{13,10,474},{14,10,59},{14,10,60},{14,10,139},{14,10,152},{14,10,276},{14,
-10,353},{14,10,402},{15,10,28},{15,10,81},{15,10,123},{15,10,152},{18,10,136},{
-148,10,88},{132,0,458},{135,0,1420},{6,0,109},{10,0,382},{4,11,405},{4,10,609},{
-7,10,756},{7,11,817},{9,10,544},{11,10,413},{14,11,58},{14,10,307},{16,10,25},{
-17,11,37},{146,11,124},{6,0,330},{7,0,1084},{11,0,142},{133,11,974},{4,10,930},{
-133,10,947},{5,10,939},{142,11,394},{16,0,91},{145,0,87},{5,11,235},{5,10,962},{
-7,11,1239},{11,11,131},{140,11,370},{11,0,492},{5,10,651},{8,10,170},{9,10,61},{
-9,10,63},{10,10,23},{10,10,37},{10,10,834},{11,10,4},{11,10,281},{11,10,503},{11
-,10,677},{12,10,96},{12,10,130},{12,10,244},{14,10,5},{14,10,40},{14,10,162},{14
-,10,202},{146,10,133},{4,10,406},{5,10,579},{12,10,492},{150,10,15},{9,11,137},{
-138,11,221},{134,0,1239},{11,0,211},{140,0,145},{7,11,390},{138,11,140},{135,11,
-1418},{135,11,1144},{134,0,1049},{7,0,321},{6,10,17},{7,10,1001},{7,10,1982},{9,
-10,886},{10,10,489},{10,10,800},{11,10,782},{12,10,320},{13,10,467},{14,10,145},
-{14,10,387},{143,10,119},{145,10,17},{5,11,407},{11,11,489},{19,11,37},{20,11,73
-},{150,11,38},{133,10,458},{135,0,1985},{7,10,1983},{8,10,0},{8,10,171},{9,10,
-120},{9,10,732},{10,10,473},{11,10,656},{11,10,998},{18,10,0},{18,10,2},{147,10,
-21},{5,11,325},{7,11,1483},{8,11,5},{8,11,227},{9,11,105},{10,11,585},{140,11,
-614},{136,0,122},{132,0,234},{135,11,1196},{6,0,976},{6,0,1098},{134,0,1441},{7,
-0,253},{136,0,549},{6,11,621},{13,11,504},{144,11,19},{132,10,519},{5,0,430},{5,
-0,932},{6,0,131},{7,0,417},{9,0,522},{11,0,314},{141,0,390},{14,0,149},{14,0,399
-},{143,0,57},{5,10,907},{6,10,31},{6,11,218},{7,10,491},{7,10,530},{8,10,592},{
-11,10,53},{11,10,779},{12,10,167},{12,10,411},{14,10,14},{14,10,136},{15,10,72},
-{16,10,17},{144,10,72},{140,11,330},{7,11,454},{7,11,782},{136,11,768},{132,0,
-507},{10,11,676},{140,11,462},{6,0,630},{9,0,811},{4,10,208},{5,10,106},{6,10,
-531},{8,10,408},{9,10,188},{138,10,572},{4,0,343},{5,0,511},{134,10,1693},{134,
-11,164},{132,0,448},{7,0,455},{138,0,591},{135,0,1381},{12,10,441},{150,11,50},{
-9,10,449},{10,10,192},{138,10,740},{6,0,575},{132,10,241},{134,0,1175},{134,0,
-653},{134,0,1761},{134,0,1198},{132,10,259},{6,11,343},{7,11,195},{9,11,226},{10
-,11,197},{10,11,575},{11,11,502},{139,11,899},{7,0,1127},{7,0,1572},{10,0,297},{
-10,0,422},{11,0,764},{11,0,810},{12,0,264},{13,0,102},{13,0,300},{13,0,484},{14,
-0,147},{14,0,229},{17,0,71},{18,0,118},{147,0,120},{135,11,666},{132,0,678},{4,
-10,173},{5,10,312},{5,10,512},{135,10,1285},{7,10,1603},{7,10,1691},{9,10,464},{
-11,10,195},{12,10,279},{12,10,448},{14,10,11},{147,10,102},{16,0,99},{146,0,164}
-,{7,11,1125},{9,11,143},{11,11,61},{14,11,405},{150,11,21},{137,11,260},{4,10,
-452},{5,10,583},{5,10,817},{6,10,433},{7,10,593},{7,10,720},{7,10,1378},{8,10,
-161},{9,10,284},{10,10,313},{139,10,886},{132,10,547},{136,10,722},{14,0,35},{
-142,0,191},{141,0,45},{138,0,121},{132,0,125},{134,0,1622},{133,11,959},{8,10,
-420},{139,10,193},{132,0,721},{135,10,409},{136,0,145},{7,0,792},{8,0,147},{10,0
-,821},{11,0,970},{11,0,1021},{136,11,173},{134,11,266},{132,0,715},{7,0,1999},{
-138,10,308},{133,0,531},{5,0,168},{5,0,930},{8,0,74},{9,0,623},{12,0,500},{140,0
-,579},{144,0,65},{138,11,246},{6,0,220},{7,0,1101},{13,0,105},{142,11,314},{5,10
-,1002},{136,10,745},{134,0,960},{20,0,0},{148,11,0},{4,0,1005},{4,10,239},{6,10,
-477},{7,10,1607},{11,10,68},{139,10,617},{6,0,19},{7,0,1413},{139,0,428},{149,10
-,13},{7,0,96},{8,0,401},{8,0,703},{9,0,896},{136,11,300},{134,0,1595},{145,0,116
-},{136,0,1021},{7,0,1961},{7,0,1965},{7,0,2030},{8,0,150},{8,0,702},{8,0,737},{8
-,0,750},{140,0,366},{11,11,75},{142,11,267},{132,10,367},{8,0,800},{9,0,148},{9,
-0,872},{9,0,890},{11,0,309},{11,0,1001},{13,0,267},{13,0,323},{5,11,427},{5,11,
-734},{7,11,478},{136,11,52},{7,11,239},{11,11,217},{142,11,165},{132,11,323},{
-140,11,419},{13,0,299},{142,0,75},{6,11,87},{6,11,1734},{7,11,20},{7,11,1056},{8
-,11,732},{9,11,406},{9,11,911},{138,11,694},{134,0,1383},{132,10,694},{133,11,
-613},{137,0,779},{4,0,598},{140,10,687},{6,0,970},{135,0,424},{133,0,547},{7,11,
-32},{7,11,984},{8,11,85},{8,11,709},{9,11,579},{9,11,847},{9,11,856},{10,11,799}
-,{11,11,258},{11,11,1007},{12,11,331},{12,11,615},{13,11,188},{13,11,435},{14,11
-,8},{15,11,165},{16,11,27},{148,11,40},{6,0,1222},{134,0,1385},{132,0,876},{138,
-11,151},{135,10,213},{4,11,167},{135,11,82},{133,0,133},{6,11,24},{7,11,74},{7,
-11,678},{137,11,258},{5,11,62},{6,11,534},{7,11,684},{7,11,1043},{7,11,1072},{8,
-11,280},{8,11,541},{8,11,686},{10,11,519},{11,11,252},{140,11,282},{136,0,187},{
-8,0,8},{10,0,0},{10,0,818},{139,0,988},{132,11,359},{11,0,429},{15,0,51},{135,10
-,1672},{136,0,685},{5,11,211},{7,11,88},{136,11,627},{134,0,472},{136,0,132},{6,
-11,145},{141,11,336},{4,10,751},{11,10,390},{140,10,32},{6,0,938},{6,0,1060},{4,
-11,263},{4,10,409},{133,10,78},{137,0,874},{8,0,774},{10,0,670},{12,0,51},{4,11,
-916},{6,10,473},{7,10,1602},{10,10,698},{12,10,212},{13,10,307},{145,10,105},{
-146,0,92},{143,10,156},{132,0,830},{137,0,701},{4,11,599},{6,11,1634},{7,11,5},{
-7,11,55},{7,11,67},{7,11,97},{7,11,691},{7,11,979},{7,11,1697},{8,11,207},{8,11,
-214},{8,11,231},{8,11,294},{8,11,336},{8,11,428},{8,11,451},{8,11,460},{8,11,471
-},{8,11,622},{8,11,626},{8,11,679},{8,11,759},{8,11,829},{9,11,11},{9,11,246},{9
-,11,484},{9,11,573},{9,11,706},{9,11,762},{9,11,798},{9,11,855},{9,11,870},{9,11
-,912},{10,11,303},{10,11,335},{10,11,424},{10,11,461},{10,11,543},{10,11,759},{
-10,11,814},{11,11,59},{11,11,199},{11,11,235},{11,11,475},{11,11,590},{11,11,929
-},{11,11,963},{12,11,114},{12,11,182},{12,11,226},{12,11,332},{12,11,439},{12,11
-,575},{12,11,598},{13,11,8},{13,11,125},{13,11,194},{13,11,287},{14,11,197},{14,
-11,383},{15,11,53},{17,11,63},{19,11,46},{19,11,98},{19,11,106},{148,11,85},{4,0
-,127},{5,0,350},{6,0,356},{8,0,426},{9,0,572},{10,0,247},{139,0,312},{134,0,1215
-},{6,0,59},{9,0,603},{13,0,397},{7,11,1853},{138,11,437},{134,0,1762},{147,11,
-126},{135,10,883},{13,0,293},{142,0,56},{133,10,617},{139,10,50},{5,11,187},{7,
-10,1518},{139,10,694},{135,0,441},{6,0,111},{7,0,4},{8,0,163},{8,0,776},{138,0,
-566},{132,0,806},{4,11,215},{9,11,38},{10,11,3},{11,11,23},{11,11,127},{139,11,
-796},{14,0,233},{4,10,546},{135,10,2042},{135,0,1994},{134,0,1739},{135,11,1530}
-,{136,0,393},{5,0,297},{7,0,1038},{14,0,359},{19,0,52},{148,0,47},{135,0,309},{4
-,10,313},{133,10,577},{8,10,184},{141,10,433},{135,10,935},{12,10,186},{12,10,
-292},{14,10,100},{146,10,70},{136,0,363},{14,0,175},{11,10,402},{12,10,109},{12,
-10,431},{13,10,179},{13,10,206},{14,10,217},{16,10,3},{148,10,53},{5,10,886},{6,
-10,46},{6,10,1790},{7,10,14},{7,10,732},{7,10,1654},{8,10,95},{8,10,327},{8,10,
-616},{9,10,892},{10,10,598},{10,10,769},{11,10,134},{11,10,747},{12,10,378},{142
-,10,97},{136,0,666},{135,0,1675},{6,0,655},{134,0,1600},{135,0,808},{133,10,1021
-},{4,11,28},{5,11,440},{7,11,248},{11,11,833},{140,11,344},{134,11,1654},{132,0,
-280},{140,0,54},{4,0,421},{133,0,548},{132,10,153},{6,11,339},{135,11,923},{133,
-11,853},{133,10,798},{132,10,587},{6,11,249},{7,11,1234},{139,11,573},{6,10,598}
-,{7,10,42},{8,10,695},{10,10,212},{11,10,158},{14,10,196},{145,10,85},{7,0,249},
-{5,10,957},{133,10,1008},{4,10,129},{135,10,465},{6,0,254},{7,0,842},{7,0,1659},
-{9,0,109},{10,0,103},{7,10,908},{7,10,1201},{9,10,755},{11,10,906},{12,10,527},{
-146,10,7},{5,0,262},{136,10,450},{144,0,1},{10,11,201},{142,11,319},{7,11,49},{7
-,11,392},{8,11,20},{8,11,172},{8,11,690},{9,11,383},{9,11,845},{10,11,48},{11,11
-,293},{11,11,832},{11,11,920},{141,11,221},{5,11,858},{133,11,992},{134,0,805},{
-139,10,1003},{6,0,1630},{134,11,307},{7,11,1512},{135,11,1794},{6,11,268},{137,
-11,62},{135,10,1868},{133,0,671},{4,0,989},{8,0,972},{136,0,998},{132,11,423},{
-132,0,889},{135,0,1382},{135,0,1910},{7,10,965},{7,10,1460},{135,10,1604},{4,0,
-627},{5,0,775},{138,11,106},{134,11,348},{7,0,202},{11,0,362},{11,0,948},{140,0,
-388},{138,11,771},{6,11,613},{136,11,223},{6,0,560},{7,0,451},{8,0,389},{12,0,
-490},{13,0,16},{13,0,215},{13,0,351},{18,0,132},{147,0,125},{135,0,841},{136,0,
-566},{136,0,938},{132,11,670},{5,0,912},{6,0,1695},{140,11,55},{9,11,40},{139,11
-,136},{7,0,1361},{7,10,982},{10,10,32},{143,10,56},{11,11,259},{140,11,270},{5,0
-,236},{6,0,572},{8,0,492},{11,0,618},{144,0,56},{8,11,572},{9,11,310},{9,11,682}
-,{137,11,698},{134,0,1854},{5,0,190},{136,0,318},{133,10,435},{135,0,1376},{4,11
-,296},{6,11,352},{7,11,401},{7,11,1410},{7,11,1594},{7,11,1674},{8,11,63},{8,11,
-660},{137,11,74},{7,0,349},{5,10,85},{6,10,419},{7,10,305},{7,10,361},{7,10,1337
-},{8,10,71},{140,10,519},{4,11,139},{4,11,388},{140,11,188},{6,0,1972},{6,0,2013
-},{8,0,951},{10,0,947},{10,0,974},{10,0,1018},{142,0,476},{140,10,688},{135,10,
-740},{5,10,691},{7,10,345},{9,10,94},{140,10,169},{9,0,344},{5,10,183},{6,10,582
-},{10,10,679},{140,10,435},{135,10,511},{132,0,850},{8,11,441},{10,11,314},{143,
-11,3},{7,10,1993},{136,10,684},{4,11,747},{6,11,290},{6,10,583},{7,11,649},{7,11
-,1479},{135,11,1583},{133,11,232},{133,10,704},{134,0,910},{4,10,179},{5,10,198}
-,{133,10,697},{7,10,347},{7,10,971},{8,10,181},{138,10,711},{136,11,525},{14,0,
-19},{14,0,28},{144,0,29},{7,0,85},{7,0,247},{8,0,585},{138,0,163},{4,0,487},{7,
-11,472},{7,11,1801},{10,11,748},{141,11,458},{4,10,243},{5,10,203},{7,10,19},{7,
-10,71},{7,10,113},{10,10,405},{11,10,357},{142,10,240},{7,10,1450},{139,10,99},{
-132,11,425},{138,0,145},{147,0,83},{6,10,492},{137,11,247},{4,0,1013},{134,0,
-2033},{5,10,134},{6,10,408},{6,10,495},{135,10,1593},{135,0,1922},{134,11,1768},
-{4,0,124},{10,0,457},{11,0,121},{11,0,169},{11,0,870},{11,0,874},{12,0,214},{14,
-0,187},{143,0,77},{5,0,557},{135,0,1457},{139,0,66},{5,11,943},{6,11,1779},{142,
-10,4},{4,10,248},{4,10,665},{7,10,137},{137,10,349},{7,0,1193},{5,11,245},{6,11,
-576},{7,11,582},{136,11,225},{144,0,82},{7,10,1270},{139,10,612},{5,0,454},{10,0
-,352},{138,11,352},{18,0,57},{5,10,371},{135,10,563},{135,0,1333},{6,0,107},{7,0
-,638},{7,0,1632},{9,0,396},{134,11,610},{5,0,370},{134,0,1756},{4,10,374},{7,10,
-547},{7,10,1700},{7,10,1833},{139,10,858},{133,0,204},{6,0,1305},{9,10,311},{141
-,10,42},{5,0,970},{134,0,1706},{6,10,1647},{7,10,1552},{7,10,2010},{9,10,494},{
-137,10,509},{13,11,455},{15,11,99},{15,11,129},{144,11,68},{135,0,3},{4,0,35},{5
-,0,121},{5,0,483},{5,0,685},{6,0,489},{6,0,782},{6,0,1032},{7,0,1204},{136,0,394
-},{4,0,921},{133,0,1007},{8,11,360},{138,11,63},{135,0,1696},{134,0,1519},{132,
-11,443},{135,11,944},{6,10,123},{7,10,214},{9,10,728},{10,10,157},{11,10,346},{
-11,10,662},{143,10,106},{137,0,981},{135,10,1435},{134,0,1072},{132,0,712},{134,
-0,1629},{134,0,728},{4,11,298},{137,11,483},{6,0,1177},{6,0,1271},{5,11,164},{7,
-11,121},{142,11,189},{7,0,1608},{4,10,707},{5,10,588},{6,10,393},{13,10,106},{18
-,10,49},{147,10,41},{23,0,16},{151,11,16},{6,10,211},{7,10,1690},{11,10,486},{
-140,10,369},{133,0,485},{19,11,15},{149,11,27},{4,11,172},{9,11,611},{10,11,436}
-,{12,11,673},{141,11,255},{5,11,844},{10,11,484},{11,11,754},{12,11,457},{14,11,
-171},{14,11,389},{146,11,153},{4,0,285},{5,0,27},{5,0,317},{6,0,301},{7,0,7},{8,
-0,153},{10,0,766},{11,0,468},{12,0,467},{141,0,143},{134,0,1462},{9,11,263},{10,
-11,147},{138,11,492},{133,11,537},{6,0,1945},{6,0,1986},{6,0,1991},{134,0,2038},
-{134,10,219},{137,11,842},{14,0,52},{17,0,50},{5,10,582},{6,10,1646},{7,10,99},{
-7,10,1962},{7,10,1986},{8,10,515},{8,10,773},{9,10,23},{9,10,491},{12,10,620},{
-142,10,93},{138,11,97},{20,0,21},{20,0,44},{133,10,851},{136,0,819},{139,0,917},
-{5,11,230},{5,11,392},{6,11,420},{8,10,762},{8,10,812},{9,11,568},{9,10,910},{
-140,11,612},{135,0,784},{15,0,135},{143,11,135},{10,0,454},{140,0,324},{4,11,0},
-{5,11,41},{7,11,1459},{7,11,1469},{7,11,1618},{7,11,1859},{9,11,549},{139,11,905
-},{4,10,98},{7,10,1365},{9,10,422},{9,10,670},{10,10,775},{11,10,210},{13,10,26}
-,{13,10,457},{141,10,476},{6,0,1719},{6,0,1735},{7,0,2016},{7,0,2020},{8,0,837},
-{137,0,852},{133,11,696},{135,0,852},{132,0,952},{134,10,1730},{132,11,771},{138
-,0,568},{137,0,448},{139,0,146},{8,0,67},{138,0,419},{133,11,921},{137,10,147},{
-134,0,1826},{10,0,657},{14,0,297},{142,0,361},{6,0,666},{6,0,767},{134,0,1542},{
-139,0,729},{6,11,180},{7,11,1137},{8,11,751},{139,11,805},{4,11,183},{7,11,271},
-{11,11,824},{11,11,952},{13,11,278},{13,11,339},{13,11,482},{14,11,424},{148,11,
-99},{4,0,669},{5,11,477},{5,11,596},{6,11,505},{7,11,1221},{11,11,907},{12,11,
-209},{141,11,214},{135,11,1215},{5,0,402},{6,10,30},{11,10,56},{139,10,305},{7,
-11,564},{142,11,168},{139,0,152},{7,0,912},{135,10,1614},{4,10,150},{5,10,303},{
-134,10,327},{7,0,320},{8,0,51},{9,0,868},{10,0,833},{12,0,481},{12,0,570},{148,0
-,106},{132,0,445},{7,11,274},{11,11,263},{11,11,479},{11,11,507},{140,11,277},{
-10,0,555},{11,0,308},{19,0,95},{6,11,1645},{8,10,192},{10,10,78},{141,10,359},{
-135,10,786},{6,11,92},{6,11,188},{7,11,1269},{7,11,1524},{7,11,1876},{10,11,228}
-,{139,11,1020},{4,11,459},{133,11,966},{11,0,386},{6,10,1638},{7,10,79},{7,10,
-496},{9,10,138},{10,10,336},{12,10,412},{12,10,440},{142,10,305},{133,0,239},{7,
-0,83},{7,0,1990},{8,0,130},{139,0,720},{138,11,709},{4,0,143},{5,0,550},{133,0,
-752},{5,0,123},{6,0,530},{7,0,348},{135,0,1419},{135,0,2024},{6,11,18},{7,11,179
-},{7,11,721},{7,11,932},{8,11,548},{8,11,757},{9,11,54},{9,11,65},{9,11,532},{9,
-11,844},{10,11,113},{10,11,117},{10,11,236},{10,11,315},{10,11,430},{10,11,798},
-{11,11,153},{11,11,351},{11,11,375},{12,11,78},{12,11,151},{12,11,392},{14,11,
-248},{143,11,23},{7,10,204},{7,10,415},{8,10,42},{10,10,85},{139,10,564},{134,0,
-958},{133,11,965},{132,0,210},{135,11,1429},{138,11,480},{134,11,182},{139,11,
-345},{10,11,65},{10,11,488},{138,11,497},{4,10,3},{5,10,247},{5,10,644},{7,10,
-744},{7,10,1207},{7,10,1225},{7,10,1909},{146,10,147},{132,0,430},{5,10,285},{9,
-10,67},{13,10,473},{143,10,82},{144,11,16},{7,11,1162},{9,11,588},{10,11,260},{
-151,10,8},{133,0,213},{138,0,7},{135,0,801},{134,11,1786},{135,11,308},{6,0,936}
-,{134,0,1289},{133,0,108},{132,0,885},{133,0,219},{139,0,587},{4,0,193},{5,0,916
-},{6,0,1041},{7,0,364},{10,0,398},{10,0,726},{11,0,317},{11,0,626},{12,0,142},{
-12,0,288},{12,0,678},{13,0,313},{15,0,113},{146,0,114},{135,0,1165},{6,0,241},{9
-,0,342},{10,0,729},{11,0,284},{11,0,445},{11,0,651},{11,0,863},{13,0,398},{146,0
-,99},{7,0,907},{136,0,832},{9,0,303},{4,10,29},{6,10,532},{7,10,1628},{7,10,1648
-},{9,10,350},{10,10,433},{11,10,97},{11,10,557},{11,10,745},{12,10,289},{12,10,
-335},{12,10,348},{12,10,606},{13,10,116},{13,10,233},{13,10,466},{14,10,181},{14
-,10,209},{14,10,232},{14,10,236},{14,10,300},{16,10,41},{148,10,97},{7,11,423},{
-7,10,1692},{136,11,588},{6,0,931},{134,0,1454},{5,10,501},{7,10,1704},{9,10,553}
-,{11,10,520},{12,10,557},{141,10,249},{136,11,287},{4,0,562},{9,0,254},{139,0,
-879},{132,0,786},{14,11,32},{18,11,85},{20,11,2},{152,11,16},{135,0,1294},{7,11,
-723},{135,11,1135},{6,0,216},{7,0,901},{7,0,1343},{8,0,493},{134,11,403},{7,11,
-719},{8,11,809},{136,11,834},{5,11,210},{6,11,213},{7,11,60},{10,11,364},{139,11
-,135},{7,0,341},{11,0,219},{5,11,607},{8,11,326},{136,11,490},{4,11,701},{5,11,
-472},{5,11,639},{7,11,1249},{9,11,758},{139,11,896},{135,11,380},{135,11,1947},{
-139,0,130},{135,0,1734},{10,0,115},{11,0,420},{12,0,154},{13,0,404},{14,0,346},{
-143,0,54},{134,10,129},{4,11,386},{7,11,41},{8,11,405},{9,11,497},{11,11,110},{
-11,11,360},{15,11,37},{144,11,84},{141,11,282},{5,11,46},{7,11,1452},{7,11,1480}
-,{8,11,634},{140,11,472},{4,11,524},{136,11,810},{10,11,238},{141,11,33},{133,0,
-604},{5,0,1011},{136,0,701},{8,0,856},{8,0,858},{8,0,879},{12,0,702},{142,0,447}
-,{4,0,54},{5,0,666},{7,0,1039},{7,0,1130},{9,0,195},{138,0,302},{4,10,25},{5,10,
-60},{6,10,504},{7,10,614},{7,10,1155},{140,10,0},{7,10,1248},{11,10,621},{139,10
-,702},{133,11,997},{137,10,321},{134,0,1669},{134,0,1791},{4,10,379},{135,10,
-1397},{138,11,372},{5,11,782},{5,11,829},{134,11,1738},{135,0,1228},{4,10,118},{
-6,10,274},{6,10,361},{7,10,75},{141,10,441},{132,0,623},{9,11,279},{10,11,407},{
-14,11,84},{150,11,18},{137,10,841},{135,0,798},{140,10,693},{5,10,314},{6,10,221
-},{7,10,419},{10,10,650},{11,10,396},{12,10,156},{13,10,369},{14,10,333},{145,10
-,47},{135,11,1372},{7,0,122},{9,0,259},{10,0,84},{11,0,470},{12,0,541},{141,0,
-379},{134,0,837},{8,0,1013},{4,11,78},{5,11,96},{5,11,182},{7,11,1724},{7,11,
-1825},{10,11,394},{10,11,471},{11,11,532},{14,11,340},{145,11,88},{134,0,577},{
-135,11,1964},{132,10,913},{134,0,460},{8,0,891},{10,0,901},{10,0,919},{10,0,932}
-,{12,0,715},{12,0,728},{12,0,777},{14,0,457},{144,0,103},{5,0,82},{5,0,131},{7,0
-,1755},{8,0,31},{9,0,168},{9,0,764},{139,0,869},{136,10,475},{6,0,605},{5,10,
-1016},{9,11,601},{9,11,619},{10,11,505},{10,11,732},{11,11,355},{140,11,139},{7,
-10,602},{8,10,179},{10,10,781},{140,10,126},{134,0,1246},{6,10,329},{138,10,111}
-,{6,11,215},{7,11,1028},{7,11,1473},{7,11,1721},{9,11,424},{138,11,779},{5,0,278
-},{137,0,68},{6,0,932},{6,0,1084},{144,0,86},{4,0,163},{5,0,201},{5,0,307},{5,0,
-310},{6,0,335},{7,0,284},{7,0,1660},{136,0,165},{136,0,781},{134,0,707},{6,0,33}
-,{135,0,1244},{5,10,821},{6,11,67},{6,10,1687},{7,11,258},{7,11,1630},{9,11,354}
-,{9,11,675},{10,11,830},{14,11,80},{145,11,80},{6,11,141},{7,11,225},{9,11,59},{
-9,11,607},{10,11,312},{11,11,687},{12,11,555},{13,11,373},{13,11,494},{148,11,58
-},{134,0,1113},{9,0,388},{5,10,71},{7,10,1407},{9,10,704},{10,10,261},{10,10,619
-},{11,10,547},{11,10,619},{143,10,157},{7,0,1953},{136,0,720},{138,0,203},{7,10,
-2008},{9,10,337},{138,10,517},{6,0,326},{7,0,677},{137,0,425},{139,11,81},{7,0,
-1316},{7,0,1412},{7,0,1839},{9,0,589},{11,0,241},{11,0,676},{11,0,811},{11,0,891
-},{12,0,140},{12,0,346},{12,0,479},{13,0,140},{13,0,381},{14,0,188},{18,0,30},{
-148,0,108},{5,0,416},{6,10,86},{6,10,603},{7,10,292},{7,10,561},{8,10,257},{8,10
-,382},{9,10,721},{9,10,778},{11,10,581},{140,10,466},{4,10,486},{133,10,491},{
-134,0,1300},{132,10,72},{7,0,847},{6,10,265},{7,11,430},{139,11,46},{5,11,602},{
-6,11,106},{7,11,1786},{7,11,1821},{7,11,2018},{9,11,418},{137,11,763},{5,0,358},
-{7,0,535},{7,0,1184},{10,0,662},{13,0,212},{13,0,304},{13,0,333},{145,0,98},{5,
-11,65},{6,11,416},{7,11,1720},{7,11,1924},{8,11,677},{10,11,109},{11,11,14},{11,
-11,70},{11,11,569},{11,11,735},{15,11,153},{148,11,80},{6,0,1823},{8,0,839},{8,0
-,852},{8,0,903},{10,0,940},{12,0,707},{140,0,775},{135,11,1229},{6,0,1522},{140,
-0,654},{136,11,595},{139,0,163},{141,0,314},{132,0,978},{4,0,601},{6,0,2035},{
-137,10,234},{5,10,815},{6,10,1688},{134,10,1755},{133,0,946},{136,0,434},{6,10,
-197},{136,10,205},{7,0,411},{7,0,590},{8,0,631},{9,0,323},{10,0,355},{11,0,491},
-{12,0,143},{12,0,402},{13,0,73},{14,0,408},{15,0,107},{146,0,71},{7,0,1467},{8,0
-,328},{10,0,544},{11,0,955},{12,0,13},{13,0,320},{145,0,83},{142,0,410},{11,0,
-511},{13,0,394},{14,0,298},{14,0,318},{146,0,103},{6,10,452},{7,10,312},{138,10,
-219},{138,10,589},{4,10,333},{9,10,176},{12,10,353},{141,10,187},{135,11,329},{
-132,11,469},{5,0,835},{134,0,483},{134,11,1743},{5,11,929},{6,11,340},{8,11,376}
-,{136,11,807},{134,10,1685},{132,0,677},{5,11,218},{7,11,1610},{138,11,83},{5,11
-,571},{135,11,1842},{132,11,455},{137,0,70},{135,0,1405},{7,10,135},{8,10,7},{8,
-10,62},{9,10,243},{10,10,658},{10,10,697},{11,10,456},{139,10,756},{9,10,395},{
-138,10,79},{137,0,108},{6,11,161},{7,11,372},{137,11,597},{132,11,349},{132,0,
-777},{132,0,331},{135,10,631},{133,0,747},{6,11,432},{6,11,608},{139,11,322},{
-138,10,835},{5,11,468},{7,11,1809},{10,11,325},{11,11,856},{12,11,345},{143,11,
-104},{133,11,223},{7,10,406},{7,10,459},{8,10,606},{139,10,726},{132,11,566},{
-142,0,68},{4,11,59},{135,11,1394},{6,11,436},{139,11,481},{4,11,48},{5,11,271},{
-135,11,953},{139,11,170},{5,11,610},{136,11,457},{133,11,755},{135,11,1217},{133
-,10,612},{132,11,197},{132,0,505},{4,10,372},{7,10,482},{8,10,158},{9,10,602},{9
-,10,615},{10,10,245},{10,10,678},{10,10,744},{11,10,248},{139,10,806},{133,0,326
-},{5,10,854},{135,10,1991},{4,0,691},{146,0,16},{6,0,628},{9,0,35},{10,0,680},{
-10,0,793},{11,0,364},{13,0,357},{143,0,164},{138,0,654},{6,0,32},{7,0,385},{7,0,
-757},{7,0,1916},{8,0,37},{8,0,94},{8,0,711},{9,0,541},{10,0,162},{10,0,795},{11,
-0,989},{11,0,1010},{12,0,14},{142,0,308},{133,11,217},{6,0,152},{6,0,349},{6,0,
-1682},{7,0,1252},{8,0,112},{9,0,435},{9,0,668},{10,0,290},{10,0,319},{10,0,815},
-{11,0,180},{11,0,837},{12,0,240},{13,0,152},{13,0,219},{142,0,158},{4,0,581},{
-134,0,726},{5,10,195},{135,10,1685},{6,0,126},{7,0,573},{8,0,397},{142,0,44},{
-138,0,89},{7,10,1997},{8,10,730},{139,10,1006},{134,0,1531},{134,0,1167},{5,0,
-926},{12,0,203},{133,10,751},{4,11,165},{7,11,1398},{135,11,1829},{7,0,1232},{
-137,0,531},{135,10,821},{134,0,943},{133,0,670},{4,0,880},{139,0,231},{134,0,
-1617},{135,0,1957},{5,11,9},{7,11,297},{7,11,966},{140,11,306},{6,0,975},{134,0,
-985},{5,10,950},{5,10,994},{134,10,351},{12,11,21},{151,11,7},{5,11,146},{6,11,
-411},{138,11,721},{7,0,242},{135,0,1942},{6,11,177},{135,11,467},{5,0,421},{7,10
-,47},{137,10,684},{5,0,834},{7,0,1202},{8,0,14},{9,0,481},{137,0,880},{138,0,465
-},{6,0,688},{9,0,834},{132,10,350},{132,0,855},{4,0,357},{6,0,172},{7,0,143},{
-137,0,413},{133,11,200},{132,0,590},{7,10,1812},{13,10,259},{13,10,356},{14,10,
-242},{147,10,114},{133,10,967},{11,0,114},{4,10,473},{7,10,623},{8,10,808},{9,10
-,871},{9,10,893},{11,10,431},{12,10,112},{12,10,217},{12,10,243},{12,10,562},{12
-,10,663},{12,10,683},{13,10,141},{13,10,197},{13,10,227},{13,10,406},{13,10,487}
-,{14,10,156},{14,10,203},{14,10,224},{14,10,256},{18,10,58},{150,10,0},{138,10,
-286},{4,10,222},{7,10,286},{136,10,629},{5,0,169},{7,0,333},{136,0,45},{134,11,
-481},{132,0,198},{4,0,24},{5,0,140},{5,0,185},{7,0,1500},{11,0,565},{11,0,838},{
-4,11,84},{7,11,1482},{10,11,76},{138,11,142},{133,0,585},{141,10,306},{133,11,
-1015},{4,11,315},{5,11,507},{135,11,1370},{136,10,146},{6,0,691},{134,0,1503},{4
-,0,334},{133,0,593},{4,10,465},{135,10,1663},{142,11,173},{135,0,913},{12,0,116}
-,{134,11,1722},{134,0,1360},{132,0,802},{8,11,222},{8,11,476},{9,11,238},{11,11,
-516},{11,11,575},{15,11,109},{146,11,100},{6,0,308},{9,0,673},{7,10,138},{7,10,
-517},{139,10,238},{132,0,709},{6,0,1876},{6,0,1895},{9,0,994},{9,0,1006},{12,0,
-829},{12,0,888},{12,0,891},{146,0,185},{148,10,94},{4,0,228},{133,0,897},{7,0,
-1840},{5,10,495},{7,10,834},{9,10,733},{139,10,378},{133,10,559},{6,10,21},{6,10
-,1737},{7,10,1444},{136,10,224},{4,0,608},{133,0,497},{6,11,40},{135,11,1781},{
-134,0,1573},{135,0,2039},{6,0,540},{136,0,136},{4,0,897},{5,0,786},{133,10,519},
-{6,0,1878},{6,0,1884},{9,0,938},{9,0,948},{9,0,955},{9,0,973},{9,0,1012},{12,0,
-895},{12,0,927},{143,0,254},{134,0,1469},{133,0,999},{4,0,299},{135,0,1004},{4,0
-,745},{133,0,578},{136,11,574},{133,0,456},{134,0,1457},{7,0,1679},{132,10,402},
-{7,0,693},{8,0,180},{12,0,163},{8,10,323},{136,10,479},{11,10,580},{142,10,201},
-{5,10,59},{135,10,672},{132,11,354},{146,10,34},{4,0,755},{135,11,1558},{7,0,
-1740},{146,0,48},{4,10,85},{135,10,549},{139,0,338},{133,10,94},{134,0,1091},{
-135,11,469},{12,0,695},{12,0,704},{20,0,113},{5,11,830},{14,11,338},{148,11,81},
-{135,0,1464},{6,10,11},{135,10,187},{135,0,975},{13,0,335},{132,10,522},{134,0,
-1979},{5,11,496},{135,11,203},{4,10,52},{135,10,661},{7,0,1566},{8,0,269},{9,0,
-212},{9,0,718},{14,0,15},{14,0,132},{142,0,227},{4,0,890},{5,0,805},{5,0,819},{5
-,0,961},{6,0,396},{6,0,1631},{6,0,1678},{7,0,1967},{7,0,2041},{9,0,630},{11,0,8}
-,{11,0,1019},{12,0,176},{13,0,225},{14,0,292},{21,0,24},{4,10,383},{133,10,520},
-{134,11,547},{135,11,1748},{5,11,88},{137,11,239},{146,11,128},{7,11,650},{135,
-11,1310},{4,10,281},{5,10,38},{7,10,194},{7,10,668},{7,10,1893},{137,10,397},{
-135,0,1815},{9,10,635},{139,10,559},{7,0,1505},{10,0,190},{10,0,634},{11,0,792},
-{12,0,358},{140,0,447},{5,0,0},{6,0,536},{7,0,604},{13,0,445},{145,0,126},{7,11,
-1076},{9,11,80},{11,11,78},{11,11,421},{11,11,534},{140,11,545},{8,0,966},{10,0,
-1023},{14,11,369},{146,11,72},{135,11,1641},{6,0,232},{6,0,412},{7,0,1074},{8,0,
-9},{8,0,157},{8,0,786},{9,0,196},{9,0,352},{9,0,457},{10,0,337},{11,0,232},{11,0
-,877},{12,0,480},{140,0,546},{135,0,958},{4,0,382},{136,0,579},{4,0,212},{135,0,
-1206},{4,11,497},{5,11,657},{135,11,1584},{132,0,681},{8,0,971},{138,0,965},{5,
-10,448},{136,10,535},{14,0,16},{146,0,44},{11,0,584},{11,0,616},{14,0,275},{11,
-11,584},{11,11,616},{142,11,275},{136,11,13},{7,10,610},{135,10,1501},{7,11,642}
-,{8,11,250},{11,11,123},{11,11,137},{13,11,48},{142,11,95},{133,0,655},{17,0,67}
-,{147,0,74},{134,0,751},{134,0,1967},{6,0,231},{136,0,423},{5,0,300},{138,0,1016
-},{4,10,319},{5,10,699},{138,10,673},{6,0,237},{7,0,611},{8,0,100},{9,0,416},{11
-,0,335},{12,0,173},{18,0,101},{6,10,336},{8,10,552},{9,10,285},{10,10,99},{139,
-10,568},{134,0,1370},{7,10,1406},{9,10,218},{141,10,222},{133,10,256},{135,0,
-1208},{14,11,213},{148,11,38},{6,0,1219},{135,11,1642},{13,0,417},{14,0,129},{
-143,0,15},{10,11,545},{140,11,301},{17,10,39},{148,10,36},{133,0,199},{4,11,904}
-,{133,11,794},{12,0,427},{146,0,38},{134,0,949},{8,0,665},{135,10,634},{132,10,
-618},{135,10,259},{132,10,339},{133,11,761},{141,10,169},{132,10,759},{5,0,688},
-{7,0,539},{135,0,712},{7,11,386},{138,11,713},{134,0,1186},{6,11,7},{6,11,35},{7
-,11,147},{7,11,1069},{7,11,1568},{7,11,1575},{7,11,1917},{8,11,43},{8,11,208},{9
-,11,128},{9,11,866},{10,11,20},{11,11,981},{147,11,33},{7,11,893},{8,10,482},{
-141,11,424},{6,0,312},{6,0,1715},{10,0,584},{11,0,546},{11,0,692},{12,0,259},{12
-,0,295},{13,0,46},{141,0,154},{5,10,336},{6,10,341},{6,10,478},{6,10,1763},{136,
-10,386},{137,0,151},{132,0,588},{152,0,4},{6,11,322},{9,11,552},{11,11,274},{13,
-11,209},{13,11,499},{14,11,85},{15,11,126},{145,11,70},{135,10,73},{4,0,231},{5,
-0,61},{6,0,104},{7,0,729},{7,0,964},{7,0,1658},{140,0,414},{6,0,263},{138,0,757}
-,{135,10,1971},{4,0,612},{133,0,561},{132,0,320},{135,10,1344},{8,11,83},{8,11,
-817},{9,11,28},{9,11,29},{9,11,885},{10,11,387},{11,11,633},{11,11,740},{13,11,
-235},{13,11,254},{15,11,143},{143,11,146},{5,10,396},{134,10,501},{140,11,49},{
-132,0,225},{4,10,929},{5,10,799},{8,10,46},{136,10,740},{4,0,405},{7,0,817},{14,
-0,58},{17,0,37},{146,0,124},{133,0,974},{4,11,412},{133,11,581},{4,10,892},{133,
-10,770},{4,0,996},{134,0,2026},{4,0,527},{5,0,235},{7,0,1239},{11,0,131},{140,0,
-370},{9,0,16},{13,0,386},{135,11,421},{7,0,956},{7,0,1157},{7,0,1506},{7,0,1606}
-,{7,0,1615},{7,0,1619},{7,0,1736},{7,0,1775},{8,0,590},{9,0,324},{9,0,736},{9,0,
-774},{9,0,776},{9,0,784},{10,0,567},{10,0,708},{11,0,518},{11,0,613},{11,0,695},
-{11,0,716},{11,0,739},{11,0,770},{11,0,771},{11,0,848},{11,0,857},{11,0,931},{11
-,0,947},{12,0,326},{12,0,387},{12,0,484},{12,0,528},{12,0,552},{12,0,613},{13,0,
-189},{13,0,256},{13,0,340},{13,0,432},{13,0,436},{13,0,440},{13,0,454},{14,0,174
-},{14,0,220},{14,0,284},{14,0,390},{145,0,121},{135,10,158},{9,0,137},{138,0,221
-},{4,11,110},{10,11,415},{10,11,597},{142,11,206},{141,11,496},{135,11,205},{151
-,10,25},{135,11,778},{7,11,1656},{7,10,2001},{9,11,369},{10,11,338},{10,11,490},
-{11,11,154},{11,11,545},{11,11,775},{13,11,77},{141,11,274},{4,11,444},{10,11,
-146},{140,11,9},{7,0,390},{138,0,140},{135,0,1144},{134,0,464},{7,10,1461},{140,
-10,91},{132,10,602},{4,11,283},{135,11,1194},{5,0,407},{11,0,204},{11,0,243},{11
-,0,489},{12,0,293},{19,0,37},{20,0,73},{150,0,38},{7,0,1218},{136,0,303},{5,0,
-325},{8,0,5},{8,0,227},{9,0,105},{10,0,585},{12,0,614},{4,10,13},{5,10,567},{7,
-10,1498},{9,10,124},{11,10,521},{140,10,405},{135,10,1006},{7,0,800},{10,0,12},{
-134,11,1720},{135,0,1783},{132,10,735},{138,10,812},{4,10,170},{135,10,323},{6,0
-,621},{13,0,504},{144,0,89},{5,10,304},{135,10,1403},{137,11,216},{6,0,920},{6,0
-,1104},{9,11,183},{139,11,286},{4,0,376},{133,10,742},{134,0,218},{8,0,641},{11,
-0,388},{140,0,580},{7,0,454},{7,0,782},{8,0,768},{140,0,686},{137,11,33},{133,10
-,111},{144,0,0},{10,0,676},{140,0,462},{6,0,164},{136,11,735},{133,10,444},{150,
-0,50},{7,11,1862},{12,11,491},{12,11,520},{13,11,383},{14,11,244},{146,11,12},{5
-,11,132},{9,11,486},{9,11,715},{10,11,458},{11,11,373},{11,11,668},{11,11,795},{
-11,11,897},{12,11,272},{12,11,424},{12,11,539},{12,11,558},{14,11,245},{14,11,
-263},{14,11,264},{14,11,393},{142,11,403},{8,10,123},{15,10,6},{144,10,7},{6,0,
-285},{8,0,654},{11,0,749},{12,0,190},{12,0,327},{13,0,120},{13,0,121},{13,0,327}
-,{15,0,47},{146,0,40},{5,11,8},{6,11,89},{6,11,400},{7,11,1569},{7,11,1623},{7,
-11,1850},{8,11,218},{8,11,422},{9,11,570},{138,11,626},{6,11,387},{7,11,882},{
-141,11,111},{6,0,343},{7,0,195},{9,0,226},{10,0,197},{10,0,575},{11,0,502},{11,0
-,899},{6,11,224},{7,11,877},{137,11,647},{5,10,937},{135,10,100},{135,11,790},{
-150,0,29},{147,0,8},{134,0,1812},{149,0,8},{135,11,394},{7,0,1125},{9,0,143},{11
-,0,61},{14,0,405},{150,0,21},{10,11,755},{147,11,29},{9,11,378},{141,11,162},{
-135,10,922},{5,10,619},{133,10,698},{134,0,1327},{6,0,1598},{137,0,575},{9,11,
-569},{12,11,12},{12,11,81},{12,11,319},{13,11,69},{14,11,259},{16,11,87},{17,11,
-1},{17,11,21},{17,11,24},{18,11,15},{18,11,56},{18,11,59},{18,11,127},{18,11,154
-},{19,11,19},{148,11,31},{6,0,895},{135,11,1231},{5,0,959},{7,11,124},{136,11,38
-},{5,11,261},{7,11,78},{7,11,199},{8,11,815},{9,11,126},{138,11,342},{5,10,917},
-{134,10,1659},{7,0,1759},{5,11,595},{135,11,1863},{136,0,173},{134,0,266},{142,0
-,261},{132,11,628},{5,10,251},{5,10,956},{8,10,268},{9,10,214},{146,10,142},{7,
-11,266},{136,11,804},{135,11,208},{6,11,79},{7,11,1021},{135,11,1519},{11,11,704
-},{141,11,396},{5,10,346},{5,10,711},{136,10,390},{136,11,741},{134,11,376},{134
-,0,1427},{6,0,1033},{6,0,1217},{136,0,300},{133,10,624},{6,11,100},{7,11,244},{7
-,11,632},{7,11,1609},{8,11,178},{8,11,638},{141,11,58},{6,0,584},{5,10,783},{7,
-10,1998},{135,10,2047},{5,0,427},{5,0,734},{7,0,478},{136,0,52},{7,0,239},{11,0,
-217},{142,0,165},{134,0,1129},{6,0,168},{6,0,1734},{7,0,20},{7,0,1056},{8,0,732}
-,{9,0,406},{9,0,911},{138,0,694},{132,10,594},{133,11,791},{7,11,686},{8,11,33},
-{8,11,238},{10,11,616},{11,11,467},{11,11,881},{13,11,217},{13,11,253},{142,11,
-268},{137,11,476},{134,0,418},{133,0,613},{132,0,632},{132,11,447},{7,0,32},{7,0
-,984},{8,0,85},{8,0,709},{9,0,579},{9,0,847},{9,0,856},{10,0,799},{11,0,258},{11
-,0,1007},{12,0,331},{12,0,615},{13,0,188},{13,0,435},{14,0,8},{15,0,165},{16,0,
-27},{20,0,40},{144,11,35},{4,11,128},{5,11,415},{6,11,462},{7,11,294},{7,11,578}
-,{10,11,710},{139,11,86},{5,0,694},{136,0,909},{7,0,1109},{11,0,7},{5,10,37},{6,
-10,39},{6,10,451},{7,10,218},{7,10,1166},{7,10,1687},{8,10,662},{144,10,2},{136,
-11,587},{6,11,427},{7,11,1018},{138,11,692},{4,11,195},{6,10,508},{135,11,802},{
-4,0,167},{135,0,82},{5,0,62},{6,0,24},{6,0,534},{7,0,74},{7,0,678},{7,0,684},{7,
-0,1043},{7,0,1072},{8,0,280},{8,0,541},{8,0,686},{9,0,258},{10,0,519},{11,0,252}
-,{140,0,282},{138,0,33},{4,0,359},{133,11,738},{7,0,980},{9,0,328},{13,0,186},{
-13,0,364},{7,10,635},{7,10,796},{8,10,331},{9,10,330},{9,10,865},{10,10,119},{10
-,10,235},{11,10,111},{11,10,129},{11,10,240},{12,10,31},{12,10,66},{12,10,222},{
-12,10,269},{12,10,599},{12,10,684},{12,10,689},{12,10,691},{142,10,345},{137,10,
-527},{6,0,596},{7,0,585},{135,10,702},{134,11,1683},{133,0,211},{6,0,145},{141,0
-,336},{134,0,1130},{7,0,873},{6,10,37},{7,10,1666},{8,10,195},{8,10,316},{9,10,
-178},{9,10,276},{9,10,339},{9,10,536},{10,10,102},{10,10,362},{10,10,785},{11,10
-,55},{11,10,149},{11,10,773},{13,10,416},{13,10,419},{14,10,38},{14,10,41},{142,
-10,210},{8,0,840},{136,0,841},{132,0,263},{5,11,3},{8,11,578},{9,11,118},{10,11,
-705},{12,11,383},{141,11,279},{132,0,916},{133,11,229},{133,10,645},{15,0,155},{
-16,0,79},{8,11,102},{10,11,578},{10,11,672},{12,11,496},{13,11,408},{14,11,121},
-{145,11,106},{4,0,599},{5,0,592},{6,0,1634},{7,0,5},{7,0,55},{7,0,67},{7,0,97},{
-7,0,691},{7,0,979},{7,0,1600},{7,0,1697},{8,0,207},{8,0,214},{8,0,231},{8,0,294}
-,{8,0,336},{8,0,428},{8,0,471},{8,0,622},{8,0,626},{8,0,679},{8,0,759},{8,0,829}
-,{9,0,11},{9,0,246},{9,0,484},{9,0,573},{9,0,706},{9,0,762},{9,0,798},{9,0,855},
-{9,0,870},{9,0,912},{10,0,303},{10,0,335},{10,0,424},{10,0,461},{10,0,543},{10,0
-,759},{10,0,814},{11,0,59},{11,0,199},{11,0,235},{11,0,590},{11,0,631},{11,0,929
-},{11,0,963},{11,0,987},{12,0,114},{12,0,182},{12,0,226},{12,0,332},{12,0,439},{
-12,0,575},{12,0,598},{12,0,675},{13,0,8},{13,0,125},{13,0,194},{13,0,287},{14,0,
-197},{14,0,383},{15,0,53},{17,0,63},{19,0,46},{19,0,98},{19,0,106},{148,0,85},{7
-,0,1356},{132,10,290},{6,10,70},{7,10,1292},{10,10,762},{139,10,288},{150,11,55}
-,{4,0,593},{8,11,115},{8,11,350},{9,11,489},{10,11,128},{11,11,306},{12,11,373},
-{14,11,30},{17,11,79},{147,11,80},{135,11,1235},{134,0,1392},{4,11,230},{133,11,
-702},{147,0,126},{7,10,131},{7,10,422},{8,10,210},{140,10,573},{134,0,1179},{139
-,11,435},{139,10,797},{134,11,1728},{4,0,162},{18,11,26},{19,11,42},{20,11,43},{
-21,11,0},{23,11,27},{152,11,14},{132,10,936},{6,0,765},{5,10,453},{134,10,441},{
-133,0,187},{135,0,1286},{6,0,635},{6,0,904},{6,0,1210},{134,0,1489},{4,0,215},{8
-,0,890},{9,0,38},{10,0,923},{11,0,23},{11,0,127},{139,0,796},{6,0,1165},{134,0,
-1306},{7,0,716},{13,0,97},{141,0,251},{132,10,653},{136,0,657},{146,10,80},{5,11
-,622},{7,11,1032},{11,11,26},{11,11,213},{11,11,707},{12,11,380},{13,11,226},{
-141,11,355},{6,0,299},{5,11,70},{6,11,334},{9,11,171},{11,11,637},{12,11,202},{
-14,11,222},{145,11,42},{142,0,134},{4,11,23},{5,11,313},{5,11,1014},{6,11,50},{6
-,11,51},{7,11,142},{7,11,384},{9,11,783},{139,11,741},{4,11,141},{7,11,559},{8,
-11,640},{9,11,460},{12,11,183},{141,11,488},{136,11,614},{7,10,1368},{8,10,232},
-{8,10,361},{10,10,682},{138,10,742},{137,10,534},{6,0,1082},{140,0,658},{137,10,
-27},{135,0,2002},{142,10,12},{4,0,28},{5,0,440},{7,0,248},{11,0,833},{140,0,344}
-,{7,10,736},{139,10,264},{134,10,1657},{134,0,1654},{138,0,531},{5,11,222},{9,11
-,140},{138,11,534},{6,0,634},{6,0,798},{134,0,840},{138,11,503},{135,10,127},{
-133,0,853},{5,11,154},{7,11,1491},{10,11,379},{138,11,485},{6,0,249},{7,0,1234},
-{139,0,573},{133,11,716},{7,11,1570},{140,11,542},{136,10,364},{138,0,527},{4,11
-,91},{5,11,388},{5,11,845},{6,11,206},{6,11,252},{6,11,365},{7,11,136},{7,11,531
-},{8,11,264},{136,11,621},{134,0,1419},{135,11,1441},{7,0,49},{7,0,392},{8,0,20}
-,{8,0,172},{8,0,690},{9,0,383},{9,0,845},{10,0,48},{11,0,293},{11,0,832},{11,0,
-920},{11,0,984},{141,0,221},{5,0,858},{133,0,992},{5,0,728},{137,10,792},{5,10,
-909},{9,10,849},{138,10,805},{7,0,525},{7,0,1579},{8,0,497},{136,0,573},{6,0,268
-},{137,0,62},{135,11,576},{134,0,1201},{5,11,771},{5,11,863},{5,11,898},{6,11,
-1632},{6,11,1644},{134,11,1780},{133,11,331},{7,0,193},{7,0,1105},{10,0,495},{7,
-10,397},{8,10,124},{8,10,619},{9,10,305},{11,10,40},{12,10,349},{13,10,134},{13,
-10,295},{14,10,155},{15,10,120},{146,10,105},{138,0,106},{6,0,859},{5,11,107},{7
-,11,201},{136,11,518},{6,11,446},{135,11,1817},{13,0,23},{4,10,262},{135,10,342}
-,{133,10,641},{137,11,851},{6,0,925},{137,0,813},{132,11,504},{6,0,613},{136,0,
-223},{4,10,99},{6,10,250},{6,10,346},{8,10,127},{138,10,81},{136,0,953},{132,10,
-915},{139,11,892},{5,10,75},{9,10,517},{10,10,470},{12,10,155},{141,10,224},{4,0
-,666},{7,0,1017},{7,11,996},{138,11,390},{5,11,883},{133,11,975},{14,10,83},{142
-,11,83},{4,0,670},{5,11,922},{134,11,1707},{135,0,216},{9,0,40},{11,0,136},{135,
-11,787},{5,10,954},{5,11,993},{7,11,515},{137,11,91},{139,0,259},{7,0,1114},{9,0
-,310},{9,0,682},{10,0,440},{13,0,40},{6,10,304},{8,10,418},{11,10,341},{139,10,
-675},{14,0,296},{9,10,410},{139,10,425},{10,11,377},{12,11,363},{13,11,68},{13,
-11,94},{14,11,108},{142,11,306},{7,0,1401},{135,0,1476},{4,0,296},{6,0,475},{7,0
-,401},{7,0,1410},{7,0,1594},{7,0,1674},{8,0,63},{8,0,660},{137,0,74},{4,0,139},{
-4,0,388},{140,0,188},{132,0,797},{132,11,766},{5,11,103},{7,11,921},{8,11,580},{
-8,11,593},{8,11,630},{138,11,28},{4,11,911},{5,11,867},{133,11,1013},{134,10,14}
-,{134,0,1572},{134,10,1708},{21,0,39},{5,10,113},{6,10,243},{7,10,1865},{11,10,
-161},{16,10,37},{145,10,99},{7,11,1563},{141,11,182},{5,11,135},{6,11,519},{7,11
-,1722},{10,11,271},{11,11,261},{145,11,54},{132,10,274},{134,0,1594},{4,11,300},
-{5,11,436},{135,11,484},{4,0,747},{6,0,290},{7,0,649},{7,0,1479},{135,0,1583},{
-133,11,535},{147,11,82},{133,0,232},{137,0,887},{135,10,166},{136,0,521},{4,0,14
-},{7,0,472},{7,0,1801},{10,0,748},{141,0,458},{134,0,741},{134,0,992},{16,0,111}
-,{137,10,304},{4,0,425},{5,11,387},{7,11,557},{12,11,547},{142,11,86},{135,11,
-1747},{5,10,654},{135,11,1489},{7,0,789},{4,11,6},{5,11,708},{136,11,75},{6,10,
-273},{10,10,188},{13,10,377},{146,10,77},{6,0,1593},{4,11,303},{7,11,619},{10,11
-,547},{10,11,687},{11,11,122},{140,11,601},{134,0,1768},{135,10,410},{138,11,772
-},{11,0,233},{139,10,524},{5,0,943},{134,0,1779},{134,10,1785},{136,11,529},{132
-,0,955},{5,0,245},{6,0,576},{7,0,582},{136,0,225},{132,10,780},{142,0,241},{134,
-0,1943},{4,11,106},{7,11,310},{7,11,1785},{10,11,690},{139,11,717},{134,0,1284},
-{5,11,890},{133,11,988},{6,11,626},{142,11,431},{10,11,706},{145,11,32},{137,11,
-332},{132,11,698},{135,0,709},{5,10,948},{138,11,17},{136,0,554},{134,0,1564},{
-139,10,941},{132,0,443},{134,0,909},{134,11,84},{142,0,280},{4,10,532},{5,10,706
-},{135,10,662},{132,0,729},{5,10,837},{6,10,1651},{139,10,985},{135,10,1861},{4,
-0,348},{152,11,3},{5,11,986},{6,11,130},{7,11,1582},{8,11,458},{10,11,101},{10,
-11,318},{138,11,823},{134,0,758},{4,0,298},{137,0,848},{4,10,330},{7,10,933},{7,
-10,2012},{136,10,292},{7,11,1644},{137,11,129},{6,0,1422},{9,0,829},{135,10,767}
-,{5,0,164},{7,0,121},{142,0,189},{7,0,812},{7,0,1261},{7,0,1360},{9,0,632},{140,
-0,352},{135,11,1788},{139,0,556},{135,11,997},{145,10,114},{4,0,172},{9,0,611},{
-10,0,436},{12,0,673},{13,0,255},{137,10,883},{11,0,530},{138,10,274},{133,0,844}
-,{134,0,984},{13,0,232},{18,0,35},{4,10,703},{135,10,207},{132,10,571},{9,0,263}
-,{10,0,147},{138,0,492},{7,11,1756},{137,11,98},{5,10,873},{5,10,960},{8,10,823}
-,{137,10,881},{133,0,537},{132,0,859},{7,11,1046},{139,11,160},{137,0,842},{139,
-10,283},{5,10,33},{6,10,470},{139,10,424},{6,11,45},{7,11,433},{8,11,129},{9,11,
-21},{10,11,392},{11,11,79},{12,11,499},{13,11,199},{141,11,451},{135,0,1291},{
-135,10,1882},{7,11,558},{136,11,353},{134,0,1482},{5,0,230},{5,0,392},{6,0,420},
-{9,0,568},{140,0,612},{6,0,262},{7,10,90},{7,10,664},{7,10,830},{7,10,1380},{7,
-10,2025},{8,11,81},{8,10,448},{8,10,828},{9,11,189},{9,11,201},{11,11,478},{11,
-11,712},{141,11,338},{142,0,31},{5,11,353},{151,11,26},{132,0,753},{4,0,0},{5,0,
-41},{7,0,1459},{7,0,1469},{7,0,1859},{9,0,549},{139,0,905},{9,10,417},{137,10,
-493},{135,11,1113},{133,0,696},{141,11,448},{134,10,295},{132,0,834},{4,0,771},{
-5,10,1019},{6,11,25},{7,11,855},{7,11,1258},{144,11,32},{134,0,1076},{133,0,921}
-,{133,0,674},{4,11,4},{7,11,1118},{7,11,1320},{7,11,1706},{8,11,277},{9,11,622},
-{10,11,9},{11,11,724},{12,11,350},{12,11,397},{13,11,28},{13,11,159},{15,11,89},
-{18,11,5},{19,11,9},{20,11,34},{150,11,47},{134,10,208},{6,0,444},{136,0,308},{6
-,0,180},{7,0,1137},{8,0,751},{139,0,805},{4,0,183},{7,0,271},{11,0,824},{11,0,
-952},{13,0,278},{13,0,339},{13,0,482},{14,0,424},{148,0,99},{7,11,317},{135,11,
-569},{4,0,19},{5,0,477},{5,0,596},{6,0,505},{7,0,1221},{11,0,907},{12,0,209},{
-141,0,214},{135,0,1215},{6,0,271},{7,0,398},{8,0,387},{10,0,344},{7,10,448},{7,
-10,1629},{7,10,1813},{8,10,442},{9,10,710},{10,10,282},{138,10,722},{11,10,844},
-{12,10,104},{140,10,625},{134,11,255},{133,10,787},{134,0,1645},{11,11,956},{151
-,11,3},{6,0,92},{6,0,188},{7,0,209},{7,0,1269},{7,0,1524},{7,0,1876},{8,0,661},{
-10,0,42},{10,0,228},{11,0,58},{11,0,1020},{12,0,58},{12,0,118},{141,0,32},{4,0,
-459},{133,0,966},{4,11,536},{7,11,1141},{10,11,723},{139,11,371},{140,0,330},{
-134,0,1557},{7,11,285},{135,11,876},{136,10,491},{135,11,560},{6,0,18},{7,0,179}
-,{7,0,932},{8,0,548},{8,0,757},{9,0,54},{9,0,65},{9,0,532},{9,0,844},{10,0,113},
-{10,0,117},{10,0,315},{10,0,560},{10,0,622},{10,0,798},{11,0,153},{11,0,351},{11
-,0,375},{12,0,78},{12,0,151},{12,0,392},{12,0,666},{14,0,248},{143,0,23},{6,0,
-1742},{132,11,690},{4,10,403},{5,10,441},{7,10,450},{10,10,840},{11,10,101},{12,
-10,193},{141,10,430},{133,0,965},{134,0,182},{10,0,65},{10,0,488},{138,0,497},{
-135,11,1346},{6,0,973},{6,0,1158},{10,11,200},{19,11,2},{151,11,22},{4,11,190},{
-133,11,554},{133,10,679},{7,0,328},{137,10,326},{133,11,1001},{9,0,588},{138,0,
-260},{133,11,446},{135,10,1128},{135,10,1796},{147,11,119},{134,0,1786},{6,0,
-1328},{6,0,1985},{8,0,962},{138,0,1017},{135,0,308},{11,0,508},{4,10,574},{7,10,
-350},{7,10,1024},{8,10,338},{9,10,677},{138,10,808},{138,11,752},{135,10,1081},{
-137,11,96},{7,10,1676},{135,10,2037},{136,0,588},{132,11,304},{133,0,614},{140,0
-,793},{136,0,287},{137,10,297},{141,10,37},{6,11,53},{6,11,199},{7,11,1408},{8,
-11,32},{8,11,93},{9,11,437},{10,11,397},{10,11,629},{11,11,593},{11,11,763},{13,
-11,326},{145,11,35},{134,11,105},{9,11,320},{10,11,506},{138,11,794},{5,11,114},
-{5,11,255},{141,11,285},{140,0,290},{7,11,2035},{8,11,19},{9,11,89},{138,11,831}
-,{134,0,1136},{7,0,719},{8,0,796},{8,0,809},{8,0,834},{6,10,306},{7,10,1140},{7,
-10,1340},{8,10,133},{138,10,449},{139,10,1011},{5,0,210},{6,0,213},{7,0,60},{10,
-0,364},{139,0,135},{5,0,607},{8,0,326},{136,0,490},{138,11,176},{132,0,701},{5,0
-,472},{7,0,380},{137,0,758},{135,0,1947},{6,0,1079},{138,0,278},{138,11,391},{5,
-10,329},{8,10,260},{139,11,156},{4,0,386},{7,0,41},{8,0,405},{8,0,728},{9,0,497}
-,{11,0,110},{11,0,360},{15,0,37},{144,0,84},{5,0,46},{7,0,1452},{7,0,1480},{8,0,
-634},{140,0,472},{136,0,961},{4,0,524},{136,0,810},{10,0,238},{141,0,33},{132,10
-,657},{152,10,7},{133,0,532},{5,0,997},{135,10,1665},{7,11,594},{7,11,851},{7,11
-,1858},{9,11,411},{9,11,574},{9,11,666},{9,11,737},{10,11,346},{10,11,712},{11,
-11,246},{11,11,432},{11,11,517},{11,11,647},{11,11,679},{11,11,727},{12,11,304},
-{12,11,305},{12,11,323},{12,11,483},{12,11,572},{12,11,593},{12,11,602},{13,11,
-95},{13,11,101},{13,11,171},{13,11,315},{13,11,378},{13,11,425},{13,11,475},{14,
-11,63},{14,11,380},{14,11,384},{15,11,133},{18,11,112},{148,11,72},{5,11,955},{
-136,11,814},{134,0,1301},{5,10,66},{7,10,1896},{136,10,288},{133,11,56},{134,10,
-1643},{6,0,1298},{148,11,100},{5,0,782},{5,0,829},{6,0,671},{6,0,1156},{6,0,1738
-},{137,11,621},{4,0,306},{5,0,570},{7,0,1347},{5,10,91},{5,10,648},{5,10,750},{5
-,10,781},{6,10,54},{6,10,112},{6,10,402},{6,10,1732},{7,10,315},{7,10,749},{7,10
-,1900},{9,10,78},{9,10,508},{10,10,611},{10,10,811},{11,10,510},{11,10,728},{13,
-10,36},{14,10,39},{16,10,83},{17,10,124},{148,10,30},{8,10,570},{9,11,477},{141,
-11,78},{4,11,639},{10,11,4},{10,10,322},{10,10,719},{11,10,407},{11,11,638},{12,
-11,177},{148,11,57},{7,0,1823},{139,0,693},{7,0,759},{5,11,758},{8,10,125},{8,10
-,369},{8,10,524},{10,10,486},{11,10,13},{11,10,381},{11,10,736},{11,10,766},{11,
-10,845},{13,10,114},{13,10,292},{142,10,47},{7,0,1932},{6,10,1684},{6,10,1731},{
-7,10,356},{8,10,54},{8,10,221},{9,10,225},{9,10,356},{10,10,77},{10,10,446},{10,
-10,731},{12,10,404},{141,10,491},{135,11,552},{135,11,1112},{4,0,78},{5,0,96},{5
-,0,182},{6,0,1257},{7,0,1724},{7,0,1825},{10,0,394},{10,0,471},{11,0,532},{14,0,
-340},{145,0,88},{139,11,328},{135,0,1964},{132,10,411},{4,10,80},{5,10,44},{137,
-11,133},{5,11,110},{6,11,169},{6,11,1702},{7,11,400},{8,11,538},{9,11,184},{9,11
-,524},{140,11,218},{4,0,521},{5,10,299},{7,10,1083},{140,11,554},{6,11,133},{9,
-11,353},{12,11,628},{146,11,79},{6,0,215},{7,0,584},{7,0,1028},{7,0,1473},{7,0,
-1721},{9,0,424},{138,0,779},{7,0,857},{7,0,1209},{7,10,1713},{9,10,537},{10,10,
-165},{12,10,219},{140,10,561},{4,10,219},{6,11,93},{7,11,1422},{7,10,1761},{7,11
-,1851},{8,11,673},{9,10,86},{9,11,529},{140,11,43},{137,11,371},{136,0,671},{5,0
-,328},{135,0,918},{132,0,529},{9,11,25},{10,11,467},{138,11,559},{4,11,335},{135
-,11,942},{134,0,716},{134,0,1509},{6,0,67},{7,0,258},{7,0,1630},{9,0,354},{9,0,
-675},{10,0,830},{14,0,80},{17,0,80},{140,10,428},{134,0,1112},{6,0,141},{7,0,225
-},{9,0,59},{9,0,607},{10,0,312},{11,0,687},{12,0,555},{13,0,373},{13,0,494},{148
-,0,58},{133,10,514},{8,11,39},{10,11,773},{11,11,84},{12,11,205},{142,11,1},{8,0
-,783},{5,11,601},{133,11,870},{136,11,594},{4,10,55},{5,10,301},{6,10,571},{14,
-10,49},{146,10,102},{132,11,181},{134,11,1652},{133,10,364},{4,11,97},{5,11,147}
-,{6,11,286},{7,11,1362},{141,11,176},{4,10,76},{7,10,1550},{9,10,306},{9,10,430}
-,{9,10,663},{10,10,683},{11,10,427},{11,10,753},{12,10,334},{12,10,442},{14,10,
-258},{14,10,366},{143,10,131},{137,10,52},{6,0,955},{134,0,1498},{6,11,375},{7,
-11,169},{7,11,254},{136,11,780},{7,0,430},{11,0,46},{14,0,343},{142,11,343},{135
-,0,1183},{5,0,602},{7,0,2018},{9,0,418},{9,0,803},{135,11,1447},{8,0,677},{135,
-11,1044},{139,11,285},{4,10,656},{135,10,779},{135,10,144},{5,11,629},{135,11,
-1549},{135,10,1373},{138,11,209},{7,10,554},{7,10,605},{141,10,10},{5,10,838},{5
-,10,841},{134,10,1649},{133,10,1012},{6,0,1357},{134,0,1380},{144,0,53},{6,0,590
-},{7,10,365},{7,10,1357},{7,10,1497},{8,10,154},{141,10,281},{133,10,340},{132,
-11,420},{135,0,329},{147,11,32},{4,0,469},{10,11,429},{139,10,495},{8,10,261},{9
-,10,144},{9,10,466},{10,10,370},{12,10,470},{13,10,144},{142,10,348},{142,0,460}
-,{4,11,325},{9,10,897},{138,11,125},{6,0,1743},{6,10,248},{9,10,546},{10,10,535}
-,{11,10,681},{141,10,135},{4,0,990},{5,0,929},{6,0,340},{8,0,376},{8,0,807},{8,0
-,963},{8,0,980},{138,0,1007},{134,0,1603},{140,0,250},{4,11,714},{133,11,469},{
-134,10,567},{136,10,445},{5,0,218},{7,0,1610},{8,0,646},{10,0,83},{11,11,138},{
-140,11,40},{7,0,1512},{135,0,1794},{135,11,1216},{11,0,0},{16,0,78},{132,11,718}
-,{133,0,571},{132,0,455},{134,0,1012},{5,11,124},{5,11,144},{6,11,548},{7,11,15}
-,{7,11,153},{137,11,629},{142,11,10},{6,11,75},{7,11,1531},{8,11,416},{9,11,240}
-,{9,11,275},{10,11,100},{11,11,658},{11,11,979},{12,11,86},{13,11,468},{14,11,66
-},{14,11,207},{15,11,20},{15,11,25},{144,11,58},{132,10,577},{5,11,141},{5,11,
-915},{6,11,1783},{7,11,211},{7,11,698},{7,11,1353},{9,11,83},{9,11,281},{10,11,
-376},{10,11,431},{11,11,543},{12,11,664},{13,11,280},{13,11,428},{14,11,61},{14,
-11,128},{17,11,52},{145,11,81},{6,0,161},{7,0,372},{137,0,597},{132,0,349},{10,
-11,702},{139,11,245},{134,0,524},{134,10,174},{6,0,432},{9,0,751},{139,0,322},{
-147,11,94},{4,11,338},{133,11,400},{5,0,468},{10,0,325},{11,0,856},{12,0,345},{
-143,0,104},{133,0,223},{132,0,566},{4,11,221},{5,11,659},{5,11,989},{7,11,697},{
-7,11,1211},{138,11,284},{135,11,1070},{4,0,59},{135,0,1394},{6,0,436},{11,0,481}
-,{5,10,878},{133,10,972},{4,0,48},{5,0,271},{135,0,953},{5,0,610},{136,0,457},{4
-,0,773},{5,0,618},{137,0,756},{133,0,755},{135,0,1217},{138,11,507},{132,10,351}
-,{132,0,197},{143,11,78},{4,11,188},{7,11,805},{11,11,276},{142,11,293},{5,11,
-884},{139,11,991},{132,10,286},{10,0,259},{10,0,428},{7,10,438},{7,10,627},{7,10
-,1516},{8,10,40},{9,10,56},{9,10,294},{11,10,969},{11,10,995},{146,10,148},{4,0,
-356},{5,0,217},{5,0,492},{5,0,656},{8,0,544},{136,11,544},{5,0,259},{6,0,1230},{
-7,0,414},{7,0,854},{142,0,107},{132,0,1007},{15,0,14},{144,0,5},{6,0,1580},{132,
-10,738},{132,11,596},{132,0,673},{133,10,866},{6,0,1843},{135,11,1847},{4,0,165}
-,{7,0,1398},{135,0,1829},{135,11,1634},{147,11,65},{6,0,885},{6,0,1009},{137,0,
-809},{133,10,116},{132,10,457},{136,11,770},{9,0,498},{12,0,181},{10,11,361},{
-142,11,316},{134,11,595},{5,0,9},{7,0,297},{7,0,966},{140,0,306},{4,11,89},{5,11
-,489},{6,11,315},{7,11,553},{7,11,1745},{138,11,243},{134,0,1487},{132,0,437},{5
-,0,146},{6,0,411},{138,0,721},{5,10,527},{6,10,189},{135,10,859},{11,10,104},{11
-,10,554},{15,10,60},{143,10,125},{6,11,1658},{9,11,3},{10,11,154},{11,11,641},{
-13,11,85},{13,11,201},{141,11,346},{6,0,177},{135,0,467},{134,0,1377},{134,10,
-116},{136,11,645},{4,11,166},{5,11,505},{6,11,1670},{137,11,110},{133,10,487},{4
-,10,86},{5,10,667},{5,10,753},{6,10,316},{6,10,455},{135,10,946},{133,0,200},{
-132,0,959},{6,0,1928},{134,0,1957},{139,11,203},{150,10,45},{4,10,79},{7,10,1773
-},{10,10,450},{11,10,589},{13,10,332},{13,10,493},{14,10,183},{14,10,334},{14,10
-,362},{14,10,368},{14,10,376},{14,10,379},{19,10,90},{19,10,103},{19,10,127},{
-148,10,90},{6,0,1435},{135,11,1275},{134,0,481},{7,11,445},{8,11,307},{8,11,704}
-,{10,11,41},{10,11,439},{11,11,237},{11,11,622},{140,11,201},{135,11,869},{4,0,
-84},{7,0,1482},{10,0,76},{138,0,142},{11,11,277},{144,11,14},{135,11,1977},{4,11
-,189},{5,11,713},{136,11,57},{133,0,1015},{138,11,371},{4,0,315},{5,0,507},{135,
-0,1370},{4,11,552},{142,10,381},{9,0,759},{16,0,31},{16,0,39},{16,0,75},{18,0,24
-},{20,0,42},{152,0,1},{134,0,712},{134,0,1722},{133,10,663},{133,10,846},{8,0,
-222},{8,0,476},{9,0,238},{11,0,516},{11,0,575},{15,0,109},{146,0,100},{7,0,1402}
-,{7,0,1414},{12,0,456},{5,10,378},{8,10,465},{9,10,286},{10,10,185},{10,10,562},
-{10,10,635},{11,10,31},{11,10,393},{13,10,312},{18,10,65},{18,10,96},{147,10,89}
-,{4,0,986},{6,0,1958},{6,0,2032},{8,0,934},{138,0,985},{7,10,1880},{9,10,680},{
-139,10,798},{134,10,1770},{145,11,49},{132,11,614},{132,10,648},{5,10,945},{6,10
-,1656},{6,10,1787},{7,10,167},{8,10,824},{9,10,391},{10,10,375},{139,10,185},{
-138,11,661},{7,0,1273},{135,11,1945},{7,0,706},{7,0,1058},{138,0,538},{7,10,1645
-},{8,10,352},{137,10,249},{132,10,152},{11,0,92},{11,0,196},{11,0,409},{11,0,450
-},{11,0,666},{11,0,777},{12,0,262},{13,0,385},{13,0,393},{15,0,115},{16,0,45},{
-145,0,82},{133,10,1006},{6,0,40},{135,0,1781},{9,11,614},{139,11,327},{5,10,420}
-,{135,10,1449},{135,0,431},{10,0,97},{135,10,832},{6,0,423},{7,0,665},{135,0,
-1210},{7,0,237},{8,0,664},{9,0,42},{9,0,266},{9,0,380},{9,0,645},{10,0,177},{138
-,0,276},{7,0,264},{133,10,351},{8,0,213},{5,10,40},{7,10,598},{7,10,1638},{9,10,
-166},{9,10,640},{9,10,685},{9,10,773},{11,10,215},{13,10,65},{14,10,172},{14,10,
-317},{145,10,6},{5,11,84},{134,11,163},{8,10,60},{9,10,343},{139,10,769},{137,0,
-455},{133,11,410},{8,0,906},{12,0,700},{12,0,706},{140,0,729},{21,11,33},{150,11
-,40},{7,10,1951},{8,10,765},{8,10,772},{140,10,671},{7,10,108},{8,10,219},{8,10,
-388},{9,10,639},{9,10,775},{11,10,275},{140,10,464},{5,11,322},{7,11,1941},{8,11
-,186},{9,11,262},{10,11,187},{14,11,208},{146,11,130},{139,0,624},{8,0,574},{5,
-11,227},{140,11,29},{7,11,1546},{11,11,299},{142,11,407},{5,10,15},{6,10,56},{7,
-10,1758},{8,10,500},{9,10,730},{11,10,331},{13,10,150},{142,10,282},{7,11,1395},
-{8,11,486},{9,11,236},{9,11,878},{10,11,218},{11,11,95},{19,11,17},{147,11,31},{
-135,11,2043},{4,0,354},{146,11,4},{140,11,80},{135,0,1558},{134,10,1886},{5,10,
-205},{6,10,438},{137,10,711},{133,11,522},{133,10,534},{7,0,235},{7,0,1475},{15,
-0,68},{146,0,120},{137,10,691},{4,0,942},{6,0,1813},{8,0,917},{10,0,884},{12,0,
-696},{12,0,717},{12,0,723},{12,0,738},{12,0,749},{12,0,780},{16,0,97},{146,0,169
-},{6,10,443},{8,11,562},{9,10,237},{9,10,571},{9,10,695},{10,10,139},{11,10,715}
-,{12,10,417},{141,10,421},{135,0,957},{133,0,830},{134,11,1771},{146,0,23},{5,0,
-496},{6,0,694},{7,0,203},{7,11,1190},{137,11,620},{137,11,132},{6,0,547},{134,0,
-1549},{8,11,258},{9,11,208},{137,11,359},{4,0,864},{5,0,88},{137,0,239},{135,11,
-493},{4,11,317},{135,11,1279},{132,11,477},{4,10,578},{5,11,63},{133,11,509},{7,
-0,650},{135,0,1310},{7,0,1076},{9,0,80},{11,0,78},{11,0,421},{11,0,534},{140,0,
-545},{132,11,288},{12,0,553},{14,0,118},{133,10,923},{7,0,274},{11,0,479},{139,0
-,507},{8,11,89},{8,11,620},{9,11,49},{10,11,774},{11,11,628},{12,11,322},{143,11
-,124},{4,0,497},{135,0,1584},{7,0,261},{7,0,1115},{7,0,1354},{7,0,1404},{7,0,
-1588},{7,0,1705},{7,0,1902},{9,0,465},{10,0,248},{10,0,349},{10,0,647},{11,0,527
-},{11,0,660},{11,0,669},{12,0,529},{13,0,305},{132,10,924},{133,10,665},{136,0,
-13},{6,0,791},{138,11,120},{7,0,642},{8,0,250},{11,0,123},{11,0,137},{13,0,48},{
-142,0,95},{4,10,265},{7,10,807},{135,10,950},{5,10,93},{140,10,267},{135,0,1429}
-,{4,0,949},{10,0,885},{10,0,891},{10,0,900},{10,0,939},{12,0,760},{142,0,449},{
-139,11,366},{132,0,818},{134,11,85},{135,10,994},{7,0,330},{5,10,233},{5,10,320}
-,{6,10,140},{136,10,295},{4,0,1004},{8,0,982},{136,0,993},{133,10,978},{4,10,905
-},{6,10,1701},{137,10,843},{10,0,545},{140,0,301},{6,0,947},{134,0,1062},{134,0,
-1188},{4,0,904},{5,0,794},{152,10,6},{134,0,1372},{135,11,608},{5,11,279},{6,11,
-235},{7,11,468},{8,11,446},{9,11,637},{10,11,717},{11,11,738},{140,11,514},{132,
-10,509},{5,11,17},{6,11,371},{137,11,528},{132,0,693},{4,11,115},{5,11,669},{6,
-11,407},{8,11,311},{11,11,10},{141,11,5},{11,0,377},{7,10,273},{137,11,381},{135
-,0,695},{7,0,386},{138,0,713},{135,10,1041},{134,0,1291},{6,0,7},{6,0,35},{7,0,
-147},{7,0,1069},{7,0,1568},{7,0,1575},{7,0,1917},{8,0,43},{8,0,208},{9,0,128},{9
-,0,866},{10,0,20},{11,0,981},{147,0,33},{7,0,893},{141,0,424},{139,10,234},{150,
-11,56},{5,11,779},{5,11,807},{6,11,1655},{134,11,1676},{5,10,802},{7,10,2021},{
-136,10,805},{4,11,196},{5,10,167},{5,11,558},{5,10,899},{5,11,949},{6,10,410},{
-137,10,777},{137,10,789},{134,10,1705},{8,0,904},{140,0,787},{6,0,322},{9,0,552}
-,{11,0,274},{13,0,209},{13,0,499},{14,0,85},{15,0,126},{145,0,70},{135,10,10},{5
-,10,11},{6,10,117},{6,10,485},{7,10,1133},{9,10,582},{9,10,594},{11,10,21},{11,
-10,818},{12,10,535},{141,10,86},{4,10,264},{7,10,1067},{8,10,204},{8,10,385},{
-139,10,953},{132,11,752},{138,10,56},{133,10,470},{6,0,1808},{8,0,83},{8,0,742},
-{8,0,817},{9,0,28},{9,0,29},{9,0,885},{10,0,387},{11,0,633},{11,0,740},{13,0,235
-},{13,0,254},{15,0,143},{143,0,146},{140,0,49},{134,0,1832},{4,11,227},{5,11,159
-},{5,11,409},{7,11,80},{10,11,294},{10,11,479},{12,11,418},{14,11,50},{14,11,249
-},{142,11,295},{7,11,1470},{8,11,66},{8,11,137},{8,11,761},{9,11,638},{11,11,80}
-,{11,11,212},{11,11,368},{11,11,418},{12,11,8},{13,11,15},{16,11,61},{17,11,59},
-{19,11,28},{148,11,84},{139,10,1015},{138,11,468},{135,0,421},{6,0,415},{7,0,
-1049},{137,0,442},{6,11,38},{7,11,1220},{8,11,185},{8,11,256},{9,11,22},{9,11,
-331},{10,11,738},{11,11,205},{11,11,540},{11,11,746},{13,11,399},{13,11,465},{14
-,11,88},{142,11,194},{139,0,289},{133,10,715},{4,0,110},{10,0,415},{10,0,597},{
-142,0,206},{4,11,159},{6,11,115},{7,11,252},{7,11,257},{7,11,1928},{8,11,69},{9,
-11,384},{10,11,91},{10,11,615},{12,11,375},{14,11,235},{18,11,117},{147,11,123},
-{5,11,911},{136,11,278},{7,0,205},{7,0,2000},{8,10,794},{9,10,400},{10,10,298},{
-142,10,228},{135,11,1774},{4,11,151},{7,11,1567},{8,11,351},{137,11,322},{136,10
-,724},{133,11,990},{7,0,1539},{11,0,512},{13,0,205},{19,0,30},{22,0,36},{23,0,19
-},{135,11,1539},{5,11,194},{7,11,1662},{9,11,90},{140,11,180},{6,10,190},{7,10,
-768},{135,10,1170},{134,0,1340},{4,0,283},{135,0,1194},{133,11,425},{133,11,971}
-,{12,0,549},{14,10,67},{147,10,60},{135,10,1023},{134,0,1720},{138,11,587},{5,11
-,72},{6,11,264},{7,11,21},{7,11,46},{7,11,2013},{8,11,215},{8,11,513},{10,11,266
-},{139,11,22},{5,0,319},{135,0,534},{6,10,137},{9,10,75},{9,10,253},{10,10,194},
-{138,10,444},{7,0,1180},{20,0,112},{6,11,239},{7,11,118},{10,11,95},{11,11,603},
-{13,11,443},{14,11,160},{143,11,4},{134,11,431},{5,11,874},{6,11,1677},{11,10,
-643},{12,10,115},{143,11,0},{134,0,967},{6,11,65},{7,11,939},{7,11,1172},{7,11,
-1671},{9,11,540},{10,11,696},{11,11,265},{11,11,732},{11,11,928},{11,11,937},{12
-,11,399},{13,11,438},{149,11,19},{137,11,200},{135,0,1940},{5,10,760},{7,10,542}
-,{8,10,135},{136,10,496},{140,11,44},{7,11,1655},{136,11,305},{7,10,319},{7,10,
-355},{7,10,763},{10,10,389},{145,10,43},{136,0,735},{138,10,786},{137,11,19},{
-132,11,696},{5,0,132},{9,0,486},{9,0,715},{10,0,458},{11,0,373},{11,0,668},{11,0
-,795},{11,0,897},{12,0,272},{12,0,424},{12,0,539},{12,0,558},{14,0,245},{14,0,
-263},{14,0,264},{14,0,393},{142,0,403},{10,0,38},{139,0,784},{132,0,838},{4,11,
-302},{135,11,1766},{133,0,379},{5,0,8},{6,0,89},{6,0,400},{7,0,1569},{7,0,1623},
-{7,0,1850},{8,0,218},{8,0,422},{9,0,570},{10,0,626},{4,11,726},{133,11,630},{4,0
-,1017},{138,0,660},{6,0,387},{7,0,882},{141,0,111},{6,0,224},{7,0,877},{137,0,
-647},{4,10,58},{5,10,286},{6,10,319},{7,10,402},{7,10,1254},{7,10,1903},{8,10,
-356},{140,10,408},{135,0,790},{9,0,510},{10,0,53},{4,10,389},{9,10,181},{10,10,
-29},{10,10,816},{11,10,311},{11,10,561},{12,10,67},{141,10,181},{142,0,458},{6,
-11,118},{7,11,215},{7,11,1521},{140,11,11},{134,0,954},{135,0,394},{134,0,1367},
-{5,11,225},{133,10,373},{132,0,882},{7,0,1409},{135,10,1972},{135,10,1793},{4,11
-,370},{5,11,756},{135,11,1326},{150,11,13},{7,11,354},{10,11,410},{139,11,815},{
-6,11,1662},{7,11,48},{8,11,771},{10,11,116},{13,11,104},{14,11,105},{14,11,184},
-{15,11,168},{19,11,92},{148,11,68},{7,0,124},{136,0,38},{5,0,261},{7,0,78},{7,0,
-199},{8,0,815},{9,0,126},{10,0,342},{140,0,647},{4,0,628},{140,0,724},{7,0,266},
-{8,0,804},{7,10,1651},{145,10,89},{135,0,208},{134,0,1178},{6,0,79},{135,0,1519}
-,{132,10,672},{133,10,737},{136,0,741},{132,11,120},{4,0,710},{6,0,376},{134,0,
-606},{134,0,1347},{134,0,1494},{6,0,850},{6,0,1553},{137,0,821},{5,10,145},{134,
-11,593},{7,0,1311},{140,0,135},{4,0,467},{5,0,405},{134,0,544},{5,11,820},{135,
-11,931},{6,0,100},{7,0,244},{7,0,632},{7,0,1609},{8,0,178},{8,0,638},{141,0,58},
-{4,10,387},{135,10,1288},{6,11,151},{6,11,1675},{7,11,383},{151,11,10},{132,0,
-481},{135,10,550},{134,0,1378},{6,11,1624},{11,11,11},{12,11,422},{13,11,262},{
-142,11,360},{133,0,791},{4,11,43},{5,11,344},{133,11,357},{7,0,1227},{140,0,978}
-,{7,0,686},{8,0,33},{8,0,238},{10,0,616},{11,0,467},{11,0,881},{13,0,217},{13,0,
-253},{142,0,268},{137,0,857},{8,0,467},{8,0,1006},{7,11,148},{8,11,284},{141,11,
-63},{4,10,576},{135,10,1263},{133,11,888},{5,10,919},{134,10,1673},{20,10,37},{
-148,11,37},{132,0,447},{132,11,711},{4,0,128},{5,0,415},{6,0,462},{7,0,294},{7,0
-,578},{10,0,710},{139,0,86},{4,10,82},{5,10,333},{5,10,904},{6,10,207},{7,10,325
-},{7,10,1726},{8,10,101},{10,10,778},{139,10,220},{136,0,587},{137,11,440},{133,
-10,903},{6,0,427},{7,0,1018},{138,0,692},{4,0,195},{135,0,802},{140,10,147},{134
-,0,1546},{134,0,684},{132,10,705},{136,0,345},{11,11,678},{140,11,307},{133,0,
-365},{134,0,1683},{4,11,65},{5,11,479},{5,11,1004},{7,11,1913},{8,11,317},{9,11,
-302},{10,11,612},{141,11,22},{138,0,472},{4,11,261},{135,11,510},{134,10,90},{
-142,0,433},{151,0,28},{4,11,291},{7,11,101},{9,11,515},{12,11,152},{12,11,443},{
-13,11,392},{142,11,357},{140,0,997},{5,0,3},{8,0,578},{9,0,118},{10,0,705},{141,
-0,279},{135,11,1266},{7,10,813},{12,10,497},{141,10,56},{133,0,229},{6,10,125},{
-135,10,1277},{8,0,102},{10,0,578},{10,0,672},{12,0,496},{13,0,408},{14,0,121},{
-17,0,106},{151,10,12},{6,0,866},{134,0,1080},{136,0,1022},{4,11,130},{135,11,843
-},{5,11,42},{5,11,879},{7,11,245},{7,11,324},{7,11,1532},{11,11,463},{11,11,472}
-,{13,11,363},{144,11,52},{150,0,55},{8,0,115},{8,0,350},{9,0,489},{10,0,128},{11
-,0,306},{12,0,373},{14,0,30},{17,0,79},{19,0,80},{4,11,134},{133,11,372},{134,0,
-657},{134,0,933},{135,11,1147},{4,0,230},{133,0,702},{134,0,1728},{4,0,484},{18,
-0,26},{19,0,42},{20,0,43},{21,0,0},{23,0,27},{152,0,14},{7,0,185},{135,0,703},{6
-,0,417},{10,0,618},{7,10,1106},{9,10,770},{11,10,112},{140,10,413},{134,0,803},{
-132,11,644},{134,0,1262},{7,11,540},{12,10,271},{145,10,109},{135,11,123},{132,0
-,633},{134,11,623},{4,11,908},{5,11,359},{5,11,508},{6,11,1723},{7,11,343},{7,11
-,1996},{135,11,2026},{135,0,479},{10,0,262},{7,10,304},{9,10,646},{9,10,862},{11
-,10,696},{12,10,208},{15,10,79},{147,10,108},{4,11,341},{135,11,480},{134,0,830}
-,{5,0,70},{5,0,622},{6,0,334},{7,0,1032},{9,0,171},{11,0,26},{11,0,213},{11,0,
-637},{11,0,707},{12,0,202},{12,0,380},{13,0,226},{13,0,355},{14,0,222},{145,0,42
-},{135,10,981},{143,0,217},{137,11,114},{4,0,23},{4,0,141},{5,0,313},{5,0,1014},
-{6,0,50},{6,0,51},{7,0,142},{7,0,384},{7,0,559},{8,0,640},{9,0,460},{9,0,783},{
-11,0,741},{12,0,183},{141,0,488},{141,0,360},{7,0,1586},{7,11,1995},{8,11,299},{
-11,11,890},{140,11,674},{132,10,434},{7,0,652},{134,10,550},{7,0,766},{5,10,553}
-,{138,10,824},{7,0,737},{8,0,298},{136,10,452},{4,11,238},{5,11,503},{6,11,179},
-{7,11,2003},{8,11,381},{8,11,473},{9,11,149},{10,11,183},{15,11,45},{143,11,86},
-{133,10,292},{5,0,222},{9,0,655},{138,0,534},{138,10,135},{4,11,121},{5,11,156},
-{5,11,349},{9,11,136},{10,11,605},{14,11,342},{147,11,107},{137,0,906},{6,0,1013
-},{134,0,1250},{6,0,1956},{6,0,2009},{8,0,991},{144,0,120},{135,11,1192},{138,0,
-503},{5,0,154},{7,0,1491},{10,0,379},{138,0,485},{6,0,1867},{6,0,1914},{6,0,1925
-},{9,0,917},{9,0,925},{9,0,932},{9,0,951},{9,0,1007},{9,0,1013},{12,0,806},{12,0
-,810},{12,0,814},{12,0,816},{12,0,824},{12,0,832},{12,0,837},{12,0,863},{12,0,
-868},{12,0,870},{12,0,889},{12,0,892},{12,0,900},{12,0,902},{12,0,908},{12,0,933
-},{12,0,942},{12,0,949},{12,0,954},{15,0,175},{15,0,203},{15,0,213},{15,0,218},{
-15,0,225},{15,0,231},{15,0,239},{15,0,248},{15,0,252},{18,0,190},{18,0,204},{18,
-0,215},{18,0,216},{18,0,222},{18,0,225},{18,0,230},{18,0,239},{18,0,241},{21,0,
-42},{21,0,43},{21,0,44},{21,0,45},{21,0,46},{21,0,53},{24,0,27},{152,0,31},{133,
-0,716},{135,0,844},{4,0,91},{5,0,388},{5,0,845},{6,0,206},{6,0,252},{6,0,365},{7
-,0,136},{7,0,531},{136,0,621},{7,10,393},{10,10,603},{139,10,206},{6,11,80},{6,
-11,1694},{7,11,173},{7,11,1974},{9,11,547},{10,11,730},{14,11,18},{150,11,39},{
-137,0,748},{4,11,923},{134,11,1711},{4,10,912},{137,10,232},{7,10,98},{7,10,1973
-},{136,10,716},{14,0,103},{133,10,733},{132,11,595},{12,0,158},{18,0,8},{19,0,62
-},{20,0,6},{22,0,4},{23,0,2},{23,0,9},{5,11,240},{6,11,459},{7,11,12},{7,11,114}
-,{7,11,502},{7,11,1751},{7,11,1753},{7,11,1805},{8,11,658},{9,11,1},{11,11,959},
-{13,11,446},{142,11,211},{135,0,576},{5,0,771},{5,0,863},{5,0,898},{6,0,648},{6,
-0,1632},{6,0,1644},{134,0,1780},{133,0,331},{7,11,633},{7,11,905},{7,11,909},{7,
-11,1538},{9,11,767},{140,11,636},{140,0,632},{5,0,107},{7,0,201},{136,0,518},{6,
-0,446},{7,0,1817},{134,11,490},{9,0,851},{141,0,510},{7,11,250},{8,11,506},{136,
-11,507},{4,0,504},{137,10,72},{132,11,158},{4,11,140},{7,11,362},{8,11,209},{9,
-11,10},{9,11,160},{9,11,503},{10,11,689},{11,11,350},{11,11,553},{11,11,725},{12
-,11,252},{12,11,583},{13,11,192},{13,11,352},{14,11,269},{14,11,356},{148,11,50}
-,{6,11,597},{135,11,1318},{135,10,1454},{5,0,883},{5,0,975},{8,0,392},{148,0,7},
-{6,11,228},{7,11,1341},{9,11,408},{138,11,343},{11,11,348},{11,10,600},{12,11,99
-},{13,10,245},{18,11,1},{18,11,11},{147,11,4},{134,11,296},{5,0,922},{134,0,1707
-},{132,11,557},{4,11,548},{7,10,164},{7,10,1571},{9,10,107},{140,10,225},{7,11,
-197},{8,11,142},{8,11,325},{9,11,150},{9,11,596},{10,11,350},{10,11,353},{11,11,
-74},{11,11,315},{14,11,423},{143,11,141},{5,0,993},{7,0,515},{137,0,91},{4,0,131
-},{8,0,200},{5,10,484},{5,10,510},{6,10,434},{7,10,1000},{7,10,1098},{136,10,2},
-{152,0,10},{4,11,62},{5,11,83},{6,11,399},{6,11,579},{7,11,692},{7,11,846},{7,11
-,1015},{7,11,1799},{8,11,403},{9,11,394},{10,11,133},{12,11,4},{12,11,297},{12,
-11,452},{16,11,81},{18,11,19},{18,11,25},{21,11,14},{22,11,12},{151,11,18},{140,
-11,459},{132,11,177},{7,0,1433},{9,0,365},{137,11,365},{132,10,460},{5,0,103},{6
-,0,2004},{7,0,921},{8,0,580},{8,0,593},{8,0,630},{10,0,28},{5,11,411},{135,11,
-653},{4,10,932},{133,10,891},{4,0,911},{5,0,867},{5,0,1013},{7,0,2034},{8,0,798}
-,{136,0,813},{7,11,439},{10,11,727},{11,11,260},{139,11,684},{136,10,625},{5,11,
-208},{7,11,753},{135,11,1528},{5,0,461},{7,0,1925},{12,0,39},{13,0,265},{13,0,
-439},{134,10,76},{6,0,853},{8,10,92},{137,10,221},{5,0,135},{6,0,519},{7,0,1722}
-,{10,0,271},{11,0,261},{145,0,54},{139,11,814},{14,0,338},{148,0,81},{4,0,300},{
-133,0,436},{5,0,419},{5,0,687},{7,0,864},{9,0,470},{135,11,864},{9,0,836},{133,
-11,242},{134,0,1937},{4,10,763},{133,11,953},{132,10,622},{132,0,393},{133,10,
-253},{8,0,357},{10,0,745},{14,0,426},{17,0,94},{19,0,57},{135,10,546},{5,11,615}
-,{146,11,37},{9,10,73},{10,10,110},{14,10,185},{145,10,119},{11,0,703},{7,10,624
-},{7,10,916},{10,10,256},{139,10,87},{133,11,290},{5,10,212},{12,10,35},{141,10,
-382},{132,11,380},{5,11,52},{7,11,277},{9,11,368},{139,11,791},{133,0,387},{10,
-11,138},{139,11,476},{4,0,6},{5,0,708},{136,0,75},{7,0,1351},{9,0,581},{10,0,639
-},{11,0,453},{140,0,584},{132,0,303},{138,0,772},{135,10,1175},{4,0,749},{5,10,
-816},{6,11,256},{7,11,307},{7,11,999},{7,11,1481},{7,11,1732},{7,11,1738},{8,11,
-265},{9,11,414},{11,11,316},{12,11,52},{13,11,420},{147,11,100},{135,11,1296},{6
-,0,1065},{5,10,869},{5,10,968},{6,10,1626},{8,10,734},{136,10,784},{4,10,542},{6
-,10,1716},{6,10,1727},{7,10,1082},{7,10,1545},{8,10,56},{8,10,118},{8,10,412},{8
-,10,564},{9,10,888},{9,10,908},{10,10,50},{10,10,423},{11,10,685},{11,10,697},{
-11,10,933},{12,10,299},{13,10,126},{13,10,136},{13,10,170},{141,10,190},{134,0,
-226},{4,0,106},{7,0,310},{11,0,717},{133,11,723},{5,0,890},{5,0,988},{4,10,232},
-{9,10,202},{10,10,474},{140,10,433},{6,0,626},{142,0,431},{10,0,706},{150,0,44},
-{13,0,51},{6,10,108},{7,10,1003},{7,10,1181},{8,10,111},{136,10,343},{132,0,698}
-,{5,11,109},{6,11,1784},{7,11,1895},{12,11,296},{140,11,302},{134,0,828},{134,10
-,1712},{138,0,17},{7,0,1929},{4,10,133},{5,11,216},{7,10,711},{7,10,1298},{7,10,
-1585},{7,11,1879},{9,11,141},{9,11,270},{9,11,679},{10,11,159},{10,11,553},{11,
-11,197},{11,11,438},{12,11,538},{12,11,559},{13,11,193},{13,11,423},{14,11,144},
-{14,11,166},{14,11,167},{15,11,67},{147,11,84},{141,11,127},{7,11,1872},{137,11,
-81},{6,10,99},{7,10,1808},{145,10,57},{134,11,391},{5,0,689},{6,0,84},{7,0,1250}
-,{6,10,574},{7,10,428},{10,10,669},{11,10,485},{11,10,840},{12,10,300},{142,10,
-250},{7,11,322},{136,11,249},{7,11,432},{135,11,1649},{135,10,1871},{137,10,252}
-,{6,11,155},{140,11,234},{7,0,871},{19,0,27},{147,11,27},{140,0,498},{5,0,986},{
-6,0,130},{138,0,823},{6,0,1793},{7,0,1582},{8,0,458},{10,0,101},{10,0,318},{10,0
-,945},{12,0,734},{16,0,104},{18,0,177},{6,10,323},{135,10,1564},{5,11,632},{138,
-11,526},{10,0,435},{7,10,461},{136,10,775},{6,11,144},{7,11,948},{7,11,1042},{7,
-11,1857},{8,11,235},{8,11,461},{9,11,453},{9,11,530},{10,11,354},{17,11,77},{19,
-11,99},{148,11,79},{138,0,966},{7,0,1644},{137,0,129},{135,0,997},{136,0,502},{5
-,11,196},{6,11,486},{7,11,212},{8,11,309},{136,11,346},{7,10,727},{146,10,73},{
-132,0,823},{132,11,686},{135,0,1927},{4,0,762},{7,0,1756},{137,0,98},{136,10,577
-},{24,0,8},{4,11,30},{5,11,43},{152,11,8},{7,0,1046},{139,0,160},{7,0,492},{4,10
-,413},{5,10,677},{7,11,492},{8,10,432},{140,10,280},{6,0,45},{7,0,433},{8,0,129}
-,{9,0,21},{10,0,392},{11,0,79},{12,0,499},{13,0,199},{141,0,451},{7,0,558},{136,
-0,353},{4,11,220},{7,11,1535},{9,11,93},{139,11,474},{7,10,646},{7,10,1730},{11,
-10,446},{141,10,178},{133,0,785},{134,0,1145},{8,0,81},{9,0,189},{9,0,201},{11,0
-,478},{11,0,712},{141,0,338},{5,0,353},{151,0,26},{11,0,762},{132,10,395},{134,0
-,2024},{4,0,611},{133,0,606},{9,10,174},{10,10,164},{11,10,440},{11,10,841},{143
-,10,98},{134,10,426},{10,10,608},{139,10,1002},{138,10,250},{6,0,25},{7,0,855},{
-7,0,1258},{144,0,32},{7,11,1725},{138,11,393},{5,11,263},{134,11,414},{6,0,2011}
-,{133,10,476},{4,0,4},{7,0,1118},{7,0,1320},{7,0,1706},{8,0,277},{9,0,622},{10,0
-,9},{11,0,724},{12,0,350},{12,0,397},{13,0,28},{13,0,159},{15,0,89},{18,0,5},{19
-,0,9},{20,0,34},{22,0,47},{6,11,178},{6,11,1750},{8,11,251},{9,11,690},{10,11,
-155},{10,11,196},{10,11,373},{11,11,698},{13,11,155},{148,11,93},{5,11,97},{137,
-11,393},{7,0,764},{11,0,461},{12,0,172},{5,10,76},{6,10,458},{6,10,497},{7,10,
-868},{9,10,658},{10,10,594},{11,10,566},{12,10,338},{141,10,200},{134,0,1449},{
-138,11,40},{134,11,1639},{134,0,1445},{6,0,1168},{4,10,526},{7,10,1029},{135,10,
-1054},{4,11,191},{7,11,934},{8,11,647},{145,11,97},{132,10,636},{6,0,233},{7,10,
-660},{7,10,1124},{17,10,31},{19,10,22},{151,10,14},{6,10,1699},{136,11,110},{12,
-11,246},{15,11,162},{19,11,64},{20,11,8},{20,11,95},{22,11,24},{152,11,17},{5,11
-,165},{9,11,346},{138,11,655},{5,11,319},{135,11,534},{134,0,255},{9,0,216},{8,
-11,128},{139,11,179},{9,0,183},{139,0,286},{11,0,956},{151,0,3},{4,0,536},{7,0,
-1141},{10,0,723},{139,0,371},{4,10,279},{7,10,301},{137,10,362},{7,0,285},{5,11,
-57},{6,11,101},{6,11,1663},{7,11,132},{7,11,1048},{7,11,1154},{7,11,1415},{7,11,
-1507},{12,11,493},{15,11,105},{151,11,15},{5,11,459},{7,11,1073},{7,10,1743},{8,
-11,241},{136,11,334},{4,10,178},{133,10,399},{135,0,560},{132,0,690},{135,0,1246
-},{18,0,157},{147,0,63},{10,0,599},{11,0,33},{12,0,571},{149,0,1},{6,11,324},{6,
-11,520},{7,11,338},{7,11,1616},{7,11,1729},{8,11,228},{9,11,69},{139,11,750},{7,
-0,1862},{12,0,491},{12,0,520},{13,0,383},{142,0,244},{135,11,734},{134,10,1692},
-{10,0,448},{11,0,630},{17,0,117},{6,10,202},{7,11,705},{12,10,360},{17,10,118},{
-18,10,27},{148,10,67},{4,11,73},{6,11,612},{7,11,927},{7,11,1822},{8,11,217},{9,
-11,472},{9,11,765},{9,11,766},{10,11,408},{11,11,51},{11,11,793},{12,11,266},{15
-,11,158},{20,11,89},{150,11,32},{4,0,190},{133,0,554},{133,0,1001},{5,11,389},{8
-,11,636},{137,11,229},{5,0,446},{7,10,872},{10,10,516},{139,10,167},{137,10,313}
-,{132,10,224},{134,0,1313},{5,10,546},{7,10,35},{8,10,11},{8,10,12},{9,10,315},{
-9,10,533},{10,10,802},{11,10,166},{12,10,525},{142,10,243},{6,0,636},{137,0,837}
-,{5,10,241},{8,10,242},{9,10,451},{10,10,667},{11,10,598},{140,10,429},{22,10,46
-},{150,11,46},{136,11,472},{11,0,278},{142,0,73},{141,11,185},{132,0,868},{134,0
-,972},{4,10,366},{137,10,516},{138,0,1010},{5,11,189},{6,10,1736},{7,11,442},{7,
-11,443},{8,11,281},{12,11,174},{13,11,83},{141,11,261},{139,11,384},{6,11,2},{7,
-11,191},{7,11,446},{7,11,758},{7,11,1262},{7,11,1737},{8,11,22},{8,11,270},{8,11
-,612},{9,11,4},{9,11,167},{9,11,312},{9,11,436},{10,11,156},{10,11,216},{10,11,
-311},{10,11,623},{11,11,72},{11,11,330},{11,11,455},{12,11,101},{12,11,321},{12,
-11,504},{12,11,530},{12,11,543},{13,11,17},{13,11,156},{13,11,334},{14,11,48},{
-15,11,70},{17,11,60},{148,11,64},{6,10,331},{136,10,623},{135,0,1231},{132,0,304
-},{6,11,60},{7,11,670},{7,11,1327},{8,11,411},{8,11,435},{9,11,653},{9,11,740},{
-10,11,385},{11,11,222},{11,11,324},{11,11,829},{140,11,611},{7,0,506},{6,11,166}
-,{7,11,374},{135,11,1174},{14,11,43},{146,11,21},{135,11,1694},{135,10,1888},{5,
-11,206},{134,11,398},{135,11,50},{150,0,26},{6,0,53},{6,0,199},{7,0,1408},{8,0,
-32},{8,0,93},{10,0,397},{10,0,629},{11,0,593},{11,0,763},{13,0,326},{145,0,35},{
-134,0,105},{132,10,394},{4,0,843},{138,0,794},{11,0,704},{141,0,396},{5,0,114},{
-5,0,255},{141,0,285},{6,0,619},{7,0,898},{7,0,1092},{8,0,485},{18,0,28},{19,0,
-116},{135,10,1931},{9,0,145},{7,10,574},{135,10,1719},{7,0,2035},{8,0,19},{9,0,
-89},{138,0,831},{132,10,658},{6,11,517},{7,11,1159},{10,11,621},{139,11,192},{7,
-0,1933},{7,11,1933},{9,10,781},{10,10,144},{11,10,385},{13,10,161},{13,10,228},{
-13,10,268},{148,10,107},{136,10,374},{10,11,223},{139,11,645},{135,0,1728},{7,11
-,64},{7,11,289},{136,11,245},{4,10,344},{6,10,498},{139,10,323},{136,0,746},{135
-,10,1063},{137,10,155},{4,0,987},{6,0,1964},{6,0,1974},{6,0,1990},{136,0,995},{
-133,11,609},{133,10,906},{134,0,1550},{134,0,874},{5,11,129},{6,11,61},{135,11,
-947},{4,0,1018},{6,0,1938},{6,0,2021},{134,0,2039},{132,0,814},{11,0,126},{139,0
-,287},{134,0,1264},{5,0,955},{136,0,814},{141,11,506},{132,11,314},{6,0,981},{
-139,11,1000},{5,0,56},{8,0,892},{8,0,915},{140,0,776},{148,0,100},{10,0,4},{10,0
-,13},{11,0,638},{148,0,57},{148,11,74},{5,0,738},{132,10,616},{133,11,637},{136,
-10,692},{133,0,758},{132,10,305},{137,11,590},{5,11,280},{135,11,1226},{134,11,
-494},{135,0,1112},{133,11,281},{13,0,44},{14,0,214},{5,10,214},{7,10,603},{8,10,
-611},{9,10,686},{10,10,88},{11,10,459},{11,10,496},{12,10,463},{140,10,590},{139
-,0,328},{135,11,1064},{137,0,133},{7,0,168},{13,0,196},{141,0,237},{134,10,1703}
-,{134,0,1152},{135,0,1245},{5,0,110},{6,0,169},{6,0,1702},{7,0,400},{8,0,538},{9
-,0,184},{9,0,524},{140,0,218},{6,0,1816},{10,0,871},{12,0,769},{140,0,785},{132,
-11,630},{7,11,33},{7,11,120},{8,11,489},{9,11,319},{10,11,820},{11,11,1004},{12,
-11,379},{13,11,117},{13,11,412},{14,11,25},{15,11,52},{15,11,161},{16,11,47},{
-149,11,2},{6,0,133},{8,0,413},{9,0,353},{139,0,993},{145,10,19},{4,11,937},{133,
-11,801},{134,0,978},{6,0,93},{6,0,1508},{7,0,1422},{7,0,1851},{8,0,673},{9,0,529
-},{140,0,43},{6,0,317},{10,0,512},{4,10,737},{11,10,294},{12,10,60},{12,10,437},
-{13,10,64},{13,10,380},{142,10,430},{9,0,371},{7,11,1591},{144,11,43},{6,10,1758
-},{8,10,520},{9,10,345},{9,10,403},{142,10,350},{5,0,526},{10,10,242},{138,10,
-579},{9,0,25},{10,0,467},{138,0,559},{5,10,139},{7,10,1168},{138,10,539},{4,0,
-335},{135,0,942},{140,0,754},{132,11,365},{11,0,182},{142,0,195},{142,11,29},{5,
-11,7},{139,11,774},{4,11,746},{135,11,1090},{8,0,39},{10,0,773},{11,0,84},{12,0,
-205},{142,0,1},{5,0,601},{5,0,870},{5,11,360},{136,11,237},{132,0,181},{136,0,
-370},{134,0,1652},{8,0,358},{4,10,107},{7,10,613},{8,10,439},{8,10,504},{9,10,
-501},{10,10,383},{139,10,477},{132,10,229},{137,11,785},{4,0,97},{5,0,147},{6,0,
-286},{7,0,1362},{141,0,176},{6,0,537},{7,0,788},{7,0,1816},{132,10,903},{140,10,
-71},{6,0,743},{134,0,1223},{6,0,375},{7,0,169},{7,0,254},{8,0,780},{135,11,1493}
-,{7,0,1714},{4,10,47},{6,10,373},{7,10,452},{7,10,543},{7,10,1856},{9,10,6},{11,
-10,257},{139,10,391},{6,0,896},{136,0,1003},{135,0,1447},{137,11,341},{5,10,980}
-,{134,10,1754},{145,11,22},{4,11,277},{5,11,608},{6,11,493},{7,11,457},{140,11,
-384},{7,10,536},{7,10,1331},{136,10,143},{140,0,744},{7,11,27},{135,11,316},{18,
-0,126},{5,10,19},{134,10,533},{4,0,788},{11,0,41},{5,11,552},{5,11,586},{5,11,
-676},{6,11,448},{8,11,244},{11,11,1},{11,11,41},{13,11,3},{16,11,54},{17,11,4},{
-146,11,13},{4,0,985},{6,0,1801},{4,11,401},{137,11,264},{5,10,395},{5,10,951},{
-134,10,1776},{5,0,629},{135,0,1549},{11,10,663},{12,10,210},{13,10,166},{13,10,
-310},{14,10,373},{147,10,43},{9,11,543},{10,11,524},{11,11,30},{12,11,524},{14,
-11,315},{16,11,18},{20,11,26},{148,11,65},{4,11,205},{5,11,623},{7,11,104},{136,
-11,519},{5,0,293},{134,0,601},{7,11,579},{9,11,41},{9,11,244},{9,11,669},{10,11,
-5},{11,11,861},{11,11,951},{139,11,980},{132,11,717},{132,10,695},{7,10,497},{9,
-10,387},{147,10,81},{132,0,420},{142,0,37},{6,0,1134},{6,0,1900},{12,0,830},{12,
-0,878},{12,0,894},{15,0,221},{143,0,245},{132,11,489},{7,0,1570},{140,0,542},{8,
-0,933},{136,0,957},{6,0,1371},{7,0,31},{8,0,373},{5,10,284},{6,10,49},{6,10,350}
-,{7,10,377},{7,10,1693},{8,10,678},{9,10,161},{9,10,585},{9,10,671},{9,10,839},{
-11,10,912},{141,10,427},{135,11,892},{4,0,325},{138,0,125},{139,11,47},{132,10,
-597},{138,0,323},{6,0,1547},{7,11,1605},{9,11,473},{11,11,962},{146,11,139},{139
-,10,908},{7,11,819},{9,11,26},{9,11,392},{10,11,152},{10,11,226},{11,11,19},{12,
-11,276},{12,11,426},{12,11,589},{13,11,460},{15,11,97},{19,11,48},{148,11,104},{
-135,11,51},{4,0,718},{135,0,1216},{6,0,1896},{6,0,1905},{6,0,1912},{9,0,947},{9,
-0,974},{12,0,809},{12,0,850},{12,0,858},{12,0,874},{12,0,887},{12,0,904},{12,0,
-929},{12,0,948},{12,0,952},{15,0,198},{15,0,206},{15,0,220},{15,0,227},{15,0,247
-},{18,0,188},{21,0,48},{21,0,50},{24,0,25},{24,0,29},{7,11,761},{7,11,1051},{137
-,11,545},{5,0,124},{5,0,144},{6,0,548},{7,0,15},{7,0,153},{137,0,629},{135,11,
-606},{135,10,2014},{7,10,2007},{9,11,46},{9,10,101},{9,10,450},{10,10,66},{10,10
-,842},{11,10,536},{140,10,587},{6,0,75},{7,0,1531},{8,0,416},{9,0,240},{9,0,275}
-,{10,0,100},{11,0,658},{11,0,979},{12,0,86},{14,0,207},{15,0,20},{143,0,25},{5,0
-,141},{5,0,915},{6,0,1783},{7,0,211},{7,0,698},{7,0,1353},{9,0,83},{9,0,281},{10
-,0,376},{10,0,431},{11,0,543},{12,0,664},{13,0,280},{13,0,428},{14,0,61},{14,0,
-128},{17,0,52},{145,0,81},{132,11,674},{135,0,533},{149,0,6},{132,11,770},{133,0
-,538},{5,11,79},{7,11,1027},{7,11,1477},{139,11,52},{139,10,62},{4,0,338},{133,0
-,400},{5,11,789},{134,11,195},{4,11,251},{4,11,688},{7,11,513},{7,11,1284},{9,11
-,87},{138,11,365},{134,10,1766},{6,0,0},{7,0,84},{11,0,895},{145,0,11},{139,0,
-892},{4,0,221},{5,0,659},{7,0,697},{7,0,1211},{138,0,284},{133,0,989},{133,11,
-889},{4,11,160},{5,11,330},{7,11,1434},{136,11,174},{6,10,1665},{7,10,256},{7,10
-,1388},{10,10,499},{139,10,670},{7,0,848},{4,10,22},{5,10,10},{136,10,97},{138,0
-,507},{133,10,481},{4,0,188},{135,0,805},{5,0,884},{6,0,732},{139,0,991},{135,11
-,968},{11,11,636},{15,11,145},{17,11,34},{19,11,50},{151,11,20},{7,0,959},{16,0,
-60},{6,10,134},{7,10,437},{9,10,37},{14,10,285},{142,10,371},{7,10,486},{8,10,
-155},{11,10,93},{140,10,164},{134,0,1653},{7,0,337},{133,10,591},{6,0,1989},{8,0
-,922},{8,0,978},{133,11,374},{132,0,638},{138,0,500},{133,11,731},{5,10,380},{5,
-10,650},{136,10,310},{138,11,381},{4,10,364},{7,10,1156},{7,10,1187},{137,10,409
-},{137,11,224},{140,0,166},{134,10,482},{4,11,626},{5,11,642},{6,11,425},{10,11,
-202},{139,11,141},{4,10,781},{6,10,487},{7,10,926},{8,10,263},{139,10,500},{135,
-0,418},{4,10,94},{135,10,1265},{136,0,760},{132,10,417},{136,11,835},{5,10,348},
-{134,10,522},{6,0,1277},{134,0,1538},{139,11,541},{135,11,1597},{5,11,384},{8,11
-,455},{140,11,48},{136,0,770},{5,11,264},{134,11,184},{4,0,89},{5,0,489},{6,0,
-315},{7,0,553},{7,0,1745},{138,0,243},{4,10,408},{4,10,741},{135,10,500},{134,0,
-1396},{133,0,560},{6,0,1658},{9,0,3},{10,0,154},{11,0,641},{13,0,85},{13,0,201},
-{141,0,346},{135,11,1595},{5,11,633},{6,11,28},{7,11,219},{135,11,1323},{9,11,
-769},{140,11,185},{135,11,785},{7,11,359},{8,11,243},{140,11,175},{138,0,586},{7
-,0,1271},{134,10,73},{132,11,105},{4,0,166},{5,0,505},{134,0,1670},{133,10,576},
-{4,11,324},{138,11,104},{142,10,231},{6,0,637},{7,10,1264},{7,10,1678},{11,10,
-945},{12,10,341},{12,10,471},{12,10,569},{23,11,21},{151,11,23},{8,11,559},{141,
-11,109},{134,0,1947},{7,0,445},{8,0,307},{8,0,704},{10,0,41},{10,0,439},{11,0,
-237},{11,0,622},{140,0,201},{135,11,963},{135,0,1977},{4,0,189},{5,0,713},{136,0
-,57},{138,0,371},{135,10,538},{132,0,552},{6,0,883},{133,10,413},{6,0,923},{132,
-11,758},{138,11,215},{136,10,495},{7,10,54},{8,10,312},{10,10,191},{10,10,614},{
-140,10,567},{7,11,351},{139,11,128},{7,0,875},{6,10,468},{7,10,1478},{8,10,530},
-{142,10,290},{135,0,1788},{17,0,49},{133,11,918},{12,11,398},{20,11,39},{21,11,
-11},{150,11,41},{10,0,661},{6,10,484},{135,10,822},{135,0,1945},{134,0,794},{137
-,10,900},{135,10,1335},{6,10,1724},{135,10,2022},{132,11,340},{134,0,1135},{4,0,
-784},{133,0,745},{5,0,84},{134,0,163},{133,0,410},{4,0,976},{5,11,985},{7,11,509
-},{7,11,529},{145,11,96},{132,10,474},{134,0,703},{135,11,1919},{5,0,322},{8,0,
-186},{9,0,262},{10,0,187},{142,0,208},{135,10,1504},{133,0,227},{9,0,560},{13,0,
-208},{133,10,305},{132,11,247},{7,0,1395},{8,0,486},{9,0,236},{9,0,878},{10,0,
-218},{11,0,95},{19,0,17},{147,0,31},{7,0,2043},{8,0,672},{141,0,448},{4,11,184},
-{5,11,390},{6,11,337},{7,11,23},{7,11,494},{7,11,618},{7,11,1456},{8,11,27},{8,
-11,599},{10,11,153},{139,11,710},{135,0,466},{135,10,1236},{6,0,167},{7,0,186},{
-7,0,656},{10,0,643},{4,10,480},{6,10,302},{6,10,1642},{7,10,837},{7,10,1547},{7,
-10,1657},{8,10,429},{9,10,228},{13,10,289},{13,10,343},{147,10,101},{134,0,1428}
-,{134,0,1440},{5,0,412},{7,10,278},{10,10,739},{11,10,708},{141,10,348},{134,0,
-1118},{136,0,562},{148,11,46},{9,0,316},{139,0,256},{134,0,1771},{135,0,1190},{
-137,0,132},{10,11,227},{11,11,497},{11,11,709},{140,11,415},{143,0,66},{6,11,360
-},{7,11,1664},{136,11,478},{144,10,28},{4,0,317},{135,0,1279},{5,0,63},{133,0,
-509},{136,11,699},{145,10,36},{134,0,1475},{11,11,343},{142,11,127},{132,11,739}
-,{132,0,288},{135,11,1757},{8,0,89},{8,0,620},{9,0,608},{11,0,628},{12,0,322},{
-143,0,124},{134,0,1225},{7,0,1189},{4,11,67},{5,11,422},{6,10,363},{7,11,1037},{
-7,11,1289},{7,11,1555},{7,10,1955},{8,10,725},{9,11,741},{145,11,108},{134,0,
-1468},{6,0,689},{134,0,1451},{138,0,120},{151,0,1},{137,10,805},{142,0,329},{5,
-10,813},{135,10,2046},{135,0,226},{138,11,96},{7,0,1855},{5,10,712},{11,10,17},{
-13,10,321},{144,10,67},{9,0,461},{6,10,320},{7,10,781},{7,10,1921},{9,10,55},{10
-,10,186},{10,10,273},{10,10,664},{10,10,801},{11,10,996},{11,10,997},{13,10,157}
-,{142,10,170},{8,11,203},{8,10,271},{11,11,823},{11,11,846},{12,11,482},{13,11,
-133},{13,11,277},{13,11,302},{13,11,464},{14,11,205},{142,11,221},{135,0,1346},{
-4,11,449},{133,11,718},{134,0,85},{14,0,299},{7,10,103},{7,10,863},{11,10,184},{
-145,10,62},{4,11,355},{6,11,311},{9,11,256},{138,11,404},{137,10,659},{138,11,
-758},{133,11,827},{5,11,64},{140,11,581},{134,0,1171},{4,11,442},{7,11,1047},{7,
-11,1352},{135,11,1643},{132,0,980},{5,11,977},{6,11,288},{7,11,528},{135,11,1065
-},{5,0,279},{6,0,235},{7,0,468},{8,0,446},{9,0,637},{10,0,717},{11,0,738},{140,0
-,514},{132,0,293},{11,10,337},{142,10,303},{136,11,285},{5,0,17},{6,0,371},{9,0,
-528},{12,0,364},{132,11,254},{5,10,77},{7,10,1455},{10,10,843},{147,10,73},{150,
-0,5},{132,10,458},{6,11,12},{7,11,1219},{145,11,73},{135,10,1420},{6,10,109},{
-138,10,382},{135,11,125},{6,10,330},{7,10,1084},{139,10,142},{6,11,369},{6,11,
-502},{7,11,1036},{8,11,348},{9,11,452},{10,11,26},{11,11,224},{11,11,387},{11,11
-,772},{12,11,95},{12,11,629},{13,11,195},{13,11,207},{13,11,241},{14,11,260},{14
-,11,270},{143,11,140},{132,11,269},{5,11,480},{7,11,532},{7,11,1197},{7,11,1358}
-,{8,11,291},{11,11,349},{142,11,396},{150,0,48},{10,0,601},{13,0,353},{141,0,376
-},{5,0,779},{5,0,807},{6,0,1655},{134,0,1676},{142,11,223},{4,0,196},{5,0,558},{
-133,0,949},{148,11,15},{135,11,1764},{134,0,1322},{132,0,752},{139,0,737},{135,
-11,657},{136,11,533},{135,0,412},{4,0,227},{5,0,159},{5,0,409},{7,0,80},{8,0,556
-},{10,0,479},{12,0,418},{14,0,50},{14,0,123},{14,0,192},{14,0,249},{14,0,295},{
-143,0,27},{7,0,1470},{8,0,66},{8,0,137},{8,0,761},{9,0,638},{11,0,80},{11,0,212}
-,{11,0,368},{11,0,418},{12,0,8},{13,0,15},{16,0,61},{17,0,59},{19,0,28},{148,0,
-84},{135,10,1985},{4,11,211},{4,11,332},{5,11,335},{6,11,238},{7,11,269},{7,11,
-811},{7,11,1797},{8,10,122},{8,11,836},{9,11,507},{141,11,242},{6,0,683},{134,0,
-1252},{4,0,873},{132,10,234},{134,0,835},{6,0,38},{7,0,1220},{8,0,185},{8,0,256}
-,{9,0,22},{9,0,331},{10,0,738},{11,0,205},{11,0,540},{11,0,746},{13,0,465},{14,0
-,88},{142,0,194},{138,0,986},{5,11,1009},{12,11,582},{146,11,131},{4,0,159},{6,0
-,115},{7,0,252},{7,0,257},{7,0,1928},{8,0,69},{9,0,384},{10,0,91},{10,0,615},{12
-,0,375},{14,0,235},{18,0,117},{147,0,123},{133,0,911},{136,0,278},{5,10,430},{5,
-10,932},{6,10,131},{7,10,417},{9,10,522},{11,10,314},{141,10,390},{14,10,149},{
-14,10,399},{143,10,57},{4,0,151},{7,0,1567},{136,0,749},{5,11,228},{6,11,203},{7
-,11,156},{8,11,347},{137,11,265},{132,10,507},{10,0,989},{140,0,956},{133,0,990}
-,{5,0,194},{6,0,927},{7,0,1662},{9,0,90},{140,0,564},{4,10,343},{133,10,511},{
-133,0,425},{7,10,455},{138,10,591},{4,0,774},{7,11,476},{7,11,1592},{138,11,87},
-{5,0,971},{135,10,1381},{5,11,318},{147,11,121},{5,11,291},{7,11,765},{9,11,389}
-,{140,11,548},{134,10,575},{4,0,827},{12,0,646},{12,0,705},{12,0,712},{140,0,714
-},{139,0,752},{137,0,662},{5,0,72},{6,0,264},{7,0,21},{7,0,46},{7,0,2013},{8,0,
-215},{8,0,513},{10,0,266},{139,0,22},{139,11,522},{6,0,239},{7,0,118},{10,0,95},
-{11,0,603},{13,0,443},{14,0,160},{143,0,4},{6,0,431},{134,0,669},{7,10,1127},{7,
-10,1572},{10,10,297},{10,10,422},{11,10,764},{11,10,810},{12,10,264},{13,10,102}
-,{13,10,300},{13,10,484},{14,10,147},{14,10,229},{17,10,71},{18,10,118},{147,10,
-120},{5,0,874},{6,0,1677},{15,0,0},{10,11,525},{139,11,82},{6,0,65},{7,0,939},{7
-,0,1172},{7,0,1671},{9,0,540},{10,0,696},{11,0,265},{11,0,732},{11,0,928},{11,0,
-937},{141,0,438},{134,0,1350},{136,11,547},{132,11,422},{5,11,355},{145,11,0},{
-137,11,905},{5,0,682},{135,0,1887},{132,0,809},{4,0,696},{133,11,865},{6,0,1074}
-,{6,0,1472},{14,10,35},{142,10,191},{5,11,914},{134,11,1625},{133,11,234},{135,
-11,1383},{137,11,780},{132,10,125},{4,0,726},{133,0,630},{8,0,802},{136,0,838},{
-132,10,721},{6,0,1337},{7,0,776},{19,0,56},{136,10,145},{132,0,970},{7,10,792},{
-8,10,147},{10,10,821},{139,10,1021},{139,10,970},{8,0,940},{137,0,797},{135,11,
-1312},{9,0,248},{10,0,400},{7,11,816},{7,11,1241},{7,10,1999},{9,11,283},{9,11,
-520},{10,11,213},{10,11,307},{10,11,463},{10,11,671},{10,11,746},{11,11,401},{11
-,11,794},{12,11,517},{18,11,107},{147,11,115},{6,0,1951},{134,0,2040},{135,11,
-339},{13,0,41},{15,0,93},{5,10,168},{5,10,930},{8,10,74},{9,10,623},{12,10,500},
-{140,10,579},{6,0,118},{7,0,215},{7,0,1521},{140,0,11},{6,10,220},{7,10,1101},{
-141,10,105},{6,11,421},{7,11,61},{7,11,1540},{10,11,11},{138,11,501},{7,0,615},{
-138,0,251},{140,11,631},{135,0,1044},{6,10,19},{7,10,1413},{139,10,428},{133,0,
-225},{7,10,96},{8,10,401},{8,10,703},{137,10,896},{145,10,116},{6,11,102},{7,11,
-72},{15,11,142},{147,11,67},{7,10,1961},{7,10,1965},{8,10,702},{136,10,750},{7,
-10,2030},{8,10,150},{8,10,737},{12,10,366},{151,11,30},{4,0,370},{5,0,756},{7,0,
-1326},{135,11,823},{8,10,800},{9,10,148},{9,10,872},{9,10,890},{11,10,309},{11,
-10,1001},{13,10,267},{141,10,323},{6,0,1662},{7,0,48},{8,0,771},{10,0,116},{13,0
-,104},{14,0,105},{14,0,184},{15,0,168},{19,0,92},{148,0,68},{10,0,209},{135,11,
-1870},{7,11,68},{8,11,48},{8,11,88},{8,11,582},{8,11,681},{9,11,373},{9,11,864},
-{11,11,157},{11,11,336},{11,11,843},{148,11,27},{134,0,930},{4,11,88},{5,11,137}
-,{5,11,174},{5,11,777},{6,11,1664},{6,11,1725},{7,11,77},{7,11,426},{7,11,1317},
-{7,11,1355},{8,11,126},{8,11,563},{9,11,523},{9,11,750},{10,11,310},{10,11,836},
-{11,11,42},{11,11,318},{11,11,731},{12,11,68},{12,11,92},{12,11,507},{12,11,692}
-,{13,11,81},{13,11,238},{13,11,374},{18,11,138},{19,11,78},{19,11,111},{20,11,55
-},{20,11,77},{148,11,92},{4,11,938},{135,11,1831},{5,10,547},{7,10,424},{8,11,
-617},{138,11,351},{6,0,1286},{6,11,1668},{7,11,1499},{8,11,117},{9,11,314},{138,
-11,174},{6,0,759},{6,0,894},{7,11,707},{139,11,563},{4,0,120},{135,0,1894},{9,0,
-385},{149,0,17},{138,0,429},{133,11,403},{5,0,820},{135,0,931},{10,0,199},{133,
-10,133},{6,0,151},{6,0,1675},{7,0,383},{151,0,10},{6,0,761},{136,10,187},{8,0,
-365},{10,10,0},{10,10,818},{139,10,988},{4,11,44},{5,11,311},{6,11,156},{7,11,
-639},{7,11,762},{7,11,1827},{9,11,8},{9,11,462},{148,11,83},{4,11,346},{7,11,115
-},{9,11,180},{9,11,456},{138,11,363},{136,10,685},{7,0,1086},{145,0,46},{6,0,
-1624},{11,0,11},{12,0,422},{13,0,444},{142,0,360},{6,0,1020},{6,0,1260},{134,0,
-1589},{4,0,43},{5,0,344},{5,0,357},{14,0,472},{150,0,58},{6,0,1864},{6,0,1866},{
-6,0,1868},{6,0,1869},{6,0,1874},{6,0,1877},{6,0,1903},{6,0,1911},{9,0,920},{9,0,
-921},{9,0,924},{9,0,946},{9,0,959},{9,0,963},{9,0,970},{9,0,997},{9,0,1008},{9,0
-,1017},{12,0,795},{12,0,797},{12,0,798},{12,0,800},{12,0,803},{12,0,811},{12,0,
-820},{12,0,821},{12,0,839},{12,0,841},{12,0,848},{12,0,911},{12,0,921},{12,0,922
-},{12,0,925},{12,0,937},{12,0,944},{12,0,945},{12,0,953},{15,0,184},{15,0,191},{
-15,0,199},{15,0,237},{15,0,240},{15,0,243},{15,0,246},{18,0,203},{21,0,40},{21,0
-,52},{21,0,57},{24,0,23},{24,0,28},{152,0,30},{134,0,725},{145,11,58},{133,0,888
-},{137,10,874},{4,0,711},{8,10,774},{10,10,670},{140,10,51},{144,11,40},{6,11,
-185},{7,11,1899},{139,11,673},{137,10,701},{137,0,440},{4,11,327},{5,11,478},{7,
-11,1332},{8,11,753},{140,11,227},{4,10,127},{5,10,350},{6,10,356},{8,10,426},{9,
-10,572},{10,10,247},{139,10,312},{5,11,1020},{133,11,1022},{4,11,103},{133,11,
-401},{6,0,1913},{6,0,1926},{6,0,1959},{9,0,914},{9,0,939},{9,0,952},{9,0,979},{9
-,0,990},{9,0,998},{9,0,1003},{9,0,1023},{12,0,827},{12,0,834},{12,0,845},{12,0,
-912},{12,0,935},{12,0,951},{15,0,172},{15,0,174},{18,0,198},{149,0,63},{5,0,958}
-,{5,0,987},{4,11,499},{135,11,1421},{7,0,885},{6,10,59},{6,10,1762},{9,10,603},{
-141,10,397},{10,11,62},{141,11,164},{4,0,847},{135,0,326},{11,0,276},{142,0,293}
-,{4,0,65},{5,0,479},{5,0,1004},{7,0,1913},{8,0,317},{9,0,302},{10,0,612},{13,0,
-22},{132,11,96},{4,0,261},{135,0,510},{135,0,1514},{6,10,111},{7,10,4},{8,10,163
-},{8,10,776},{138,10,566},{4,0,291},{9,0,515},{12,0,152},{12,0,443},{13,0,392},{
-142,0,357},{7,11,399},{135,11,1492},{4,0,589},{139,0,282},{6,11,563},{135,10,
-1994},{5,10,297},{135,10,1038},{4,0,130},{7,0,843},{135,0,1562},{5,0,42},{5,0,
-879},{7,0,245},{7,0,324},{7,0,1532},{11,0,463},{11,0,472},{13,0,363},{144,0,52},
-{4,0,134},{133,0,372},{133,0,680},{136,10,363},{6,0,1997},{8,0,935},{136,0,977},
-{4,0,810},{135,0,1634},{135,10,1675},{7,0,1390},{4,11,910},{133,11,832},{7,10,
-808},{8,11,266},{139,11,578},{132,0,644},{4,0,982},{138,0,867},{132,10,280},{135
-,0,540},{140,10,54},{135,0,123},{134,0,1978},{4,10,421},{133,10,548},{6,0,623},{
-136,0,789},{4,0,908},{5,0,359},{5,0,508},{6,0,1723},{7,0,343},{7,0,1996},{135,0,
-2026},{134,0,1220},{4,0,341},{135,0,480},{6,10,254},{9,10,109},{138,10,103},{134
-,0,888},{8,11,528},{137,11,348},{7,0,1995},{8,0,299},{11,0,890},{12,0,674},{4,11
-,20},{133,11,616},{135,11,1094},{134,10,1630},{4,0,238},{5,0,503},{6,0,179},{7,0
-,2003},{8,0,381},{8,0,473},{9,0,149},{10,0,788},{15,0,45},{15,0,86},{20,0,110},{
-150,0,57},{133,10,671},{4,11,26},{5,11,429},{6,11,245},{7,11,704},{7,11,1379},{
-135,11,1474},{4,0,121},{5,0,156},{5,0,349},{9,0,431},{10,0,605},{142,0,342},{7,
-11,943},{139,11,614},{132,10,889},{132,11,621},{7,10,1382},{7,11,1382},{135,10,
-1910},{132,10,627},{133,10,775},{133,11,542},{133,11,868},{136,11,433},{6,0,1373
-},{7,0,1011},{11,10,362},{11,10,948},{140,10,388},{6,0,80},{7,0,173},{9,0,547},{
-10,0,730},{14,0,18},{22,0,39},{135,11,1495},{6,0,1694},{135,0,1974},{140,0,196},
-{4,0,923},{6,0,507},{6,0,1711},{7,10,451},{8,10,389},{12,10,490},{13,10,16},{13,
-10,215},{13,10,351},{18,10,132},{147,10,125},{6,0,646},{134,0,1047},{135,10,841}
-,{136,10,566},{6,0,1611},{135,0,1214},{139,0,926},{132,11,525},{132,0,595},{5,0,
-240},{6,0,459},{7,0,12},{7,0,114},{7,0,949},{7,0,1753},{7,0,1805},{8,0,658},{9,0
-,1},{11,0,959},{141,0,446},{5,10,912},{134,10,1695},{132,0,446},{7,11,62},{12,11
-,45},{147,11,112},{5,10,236},{6,10,572},{8,10,492},{11,10,618},{144,10,56},{5,10
-,190},{136,10,318},{135,10,1376},{4,11,223},{6,11,359},{11,11,3},{13,11,108},{14
-,11,89},{144,11,22},{132,11,647},{134,0,490},{134,0,491},{134,0,1584},{135,11,
-685},{138,11,220},{7,0,250},{136,0,507},{132,0,158},{4,0,140},{7,0,362},{8,0,209
-},{9,0,10},{9,0,160},{9,0,503},{9,0,614},{10,0,689},{11,0,327},{11,0,553},{11,0,
-725},{11,0,767},{12,0,252},{12,0,583},{13,0,192},{14,0,269},{14,0,356},{148,0,50
-},{19,0,1},{19,0,26},{150,0,9},{132,11,109},{6,0,228},{7,0,1341},{9,0,408},{138,
-0,343},{4,0,373},{5,0,283},{6,0,480},{7,0,609},{10,0,860},{138,0,878},{6,0,779},
-{134,0,1209},{4,0,557},{7,11,263},{7,11,628},{136,11,349},{132,0,548},{7,0,197},
-{8,0,142},{8,0,325},{9,0,150},{9,0,596},{10,0,350},{10,0,353},{11,0,74},{11,0,
-315},{12,0,662},{12,0,681},{14,0,423},{143,0,141},{4,11,40},{10,11,67},{11,11,
-117},{11,11,768},{139,11,935},{7,11,992},{8,11,301},{9,11,722},{12,11,63},{13,11
-,29},{14,11,161},{143,11,18},{6,0,1490},{138,11,532},{5,0,580},{7,0,378},{7,0,
-674},{7,0,1424},{15,0,83},{16,0,11},{15,11,83},{144,11,11},{6,0,1057},{6,0,1335}
-,{10,0,316},{7,10,85},{7,10,247},{8,10,585},{138,10,163},{4,0,169},{5,0,83},{6,0
-,399},{6,0,579},{6,0,1513},{7,0,692},{7,0,846},{7,0,1015},{7,0,1799},{8,0,403},{
-9,0,394},{10,0,133},{12,0,4},{12,0,297},{12,0,452},{16,0,81},{18,0,25},{21,0,14}
-,{22,0,12},{151,0,18},{134,0,1106},{7,0,1546},{11,0,299},{142,0,407},{134,0,1192
-},{132,0,177},{5,0,411},{135,0,653},{7,0,439},{10,0,727},{11,0,260},{139,0,684},
-{138,10,145},{147,10,83},{5,0,208},{7,0,753},{135,0,1528},{137,11,617},{135,10,
-1922},{135,11,825},{11,0,422},{13,0,389},{4,10,124},{10,10,457},{11,10,121},{11,
-10,169},{11,10,870},{12,10,214},{14,10,187},{143,10,77},{11,0,615},{15,0,58},{11
-,11,615},{143,11,58},{9,0,618},{138,0,482},{6,0,1952},{6,0,1970},{142,0,505},{7,
-10,1193},{135,11,1838},{133,0,242},{135,10,1333},{6,10,107},{7,10,638},{7,10,
-1632},{137,10,396},{133,0,953},{5,10,370},{134,10,1756},{5,11,28},{6,11,204},{10
-,11,320},{10,11,583},{13,11,502},{14,11,72},{14,11,274},{14,11,312},{14,11,344},
-{15,11,159},{16,11,62},{16,11,69},{17,11,30},{18,11,42},{18,11,53},{18,11,84},{
-18,11,140},{19,11,68},{19,11,85},{20,11,5},{20,11,45},{20,11,101},{22,11,7},{150
-,11,20},{4,11,558},{6,11,390},{7,11,162},{7,11,689},{9,11,360},{138,11,653},{11,
-0,802},{141,0,67},{133,10,204},{133,0,290},{5,10,970},{134,10,1706},{132,0,380},
-{5,0,52},{7,0,277},{9,0,368},{139,0,791},{5,11,856},{6,11,1672},{6,11,1757},{6,
-11,1781},{7,11,1150},{7,11,1425},{7,11,1453},{140,11,513},{5,11,92},{7,10,3},{10
-,11,736},{140,11,102},{4,0,112},{5,0,653},{5,10,483},{5,10,685},{6,10,489},{7,10
-,1204},{136,10,394},{132,10,921},{6,0,1028},{133,10,1007},{5,11,590},{9,11,213},
-{145,11,91},{135,10,1696},{10,0,138},{139,0,476},{5,0,725},{5,0,727},{135,0,1811
-},{4,0,979},{6,0,1821},{6,0,1838},{8,0,876},{8,0,883},{8,0,889},{8,0,893},{8,0,
-895},{10,0,934},{12,0,720},{14,0,459},{148,0,123},{135,11,551},{4,0,38},{6,0,435
-},{7,0,307},{7,0,999},{7,0,1481},{7,0,1732},{7,0,1738},{8,0,371},{9,0,414},{11,0
-,316},{12,0,52},{13,0,420},{147,0,100},{135,0,1296},{132,10,712},{134,10,1629},{
-133,0,723},{134,0,651},{136,11,191},{9,11,791},{10,11,93},{11,11,301},{16,11,13}
-,{17,11,23},{18,11,135},{19,11,12},{20,11,1},{20,11,12},{148,11,14},{136,11,503}
-,{6,11,466},{135,11,671},{6,0,1200},{134,0,1330},{135,0,1255},{134,0,986},{5,0,
-109},{6,0,1784},{7,0,1895},{12,0,296},{140,0,302},{135,11,983},{133,10,485},{134
-,0,660},{134,0,800},{5,0,216},{5,0,294},{6,0,591},{7,0,1879},{9,0,141},{9,0,270}
-,{9,0,679},{10,0,159},{11,0,197},{11,0,438},{12,0,538},{12,0,559},{14,0,144},{14
-,0,167},{15,0,67},{4,10,285},{5,10,317},{6,10,301},{7,10,7},{8,10,153},{10,10,
-766},{11,10,468},{12,10,467},{141,10,143},{136,0,945},{134,0,1090},{137,0,81},{
-12,11,468},{19,11,96},{148,11,24},{134,0,391},{138,11,241},{7,0,322},{136,0,249}
-,{134,0,1412},{135,11,795},{5,0,632},{138,0,526},{136,10,819},{6,0,144},{7,0,948
-},{7,0,1042},{8,0,235},{8,0,461},{9,0,453},{9,0,796},{10,0,354},{17,0,77},{135,
-11,954},{139,10,917},{6,0,940},{134,0,1228},{4,0,362},{7,0,52},{135,0,303},{6,11
-,549},{8,11,34},{8,11,283},{9,11,165},{138,11,475},{7,11,370},{7,11,1007},{7,11,
-1177},{135,11,1565},{5,11,652},{5,11,701},{135,11,449},{5,0,196},{6,0,486},{7,0,
-212},{8,0,309},{136,0,346},{6,10,1719},{6,10,1735},{7,10,2016},{7,10,2020},{8,10
-,837},{137,10,852},{6,11,159},{6,11,364},{7,11,516},{7,11,1439},{137,11,518},{
-135,0,1912},{135,0,1290},{132,0,686},{141,11,151},{138,0,625},{136,0,706},{138,
-10,568},{139,0,412},{4,0,30},{133,0,43},{8,10,67},{138,10,419},{7,0,967},{141,0,
-11},{12,0,758},{14,0,441},{142,0,462},{10,10,657},{14,10,297},{142,10,361},{139,
-10,729},{4,0,220},{135,0,1535},{7,11,501},{9,11,111},{10,11,141},{11,11,332},{13
-,11,43},{13,11,429},{14,11,130},{14,11,415},{145,11,102},{4,0,950},{6,0,1859},{7
-,0,11},{8,0,873},{12,0,710},{12,0,718},{12,0,748},{12,0,765},{148,0,124},{5,11,
-149},{5,11,935},{136,11,233},{142,11,291},{134,0,1579},{7,0,890},{8,10,51},{9,10
-,868},{10,10,833},{12,10,481},{12,10,570},{148,10,106},{141,0,2},{132,10,445},{
-136,11,801},{135,0,1774},{7,0,1725},{138,0,393},{5,0,263},{134,0,414},{132,11,
-322},{133,10,239},{7,0,456},{7,10,1990},{8,10,130},{139,10,720},{137,0,818},{5,
-10,123},{6,10,530},{7,10,348},{135,10,1419},{135,10,2024},{6,0,178},{6,0,1750},{
-8,0,251},{9,0,690},{10,0,155},{10,0,196},{10,0,373},{11,0,698},{13,0,155},{148,0
-,93},{5,0,97},{137,0,393},{134,0,674},{11,0,223},{140,0,168},{132,10,210},{139,
-11,464},{6,0,1639},{146,0,159},{139,11,2},{7,0,934},{8,0,647},{17,0,97},{19,0,59
-},{150,0,2},{132,0,191},{5,0,165},{9,0,346},{10,0,655},{11,0,885},{4,10,430},{
-135,11,357},{133,0,877},{5,10,213},{133,11,406},{8,0,128},{139,0,179},{6,11,69},
-{135,11,117},{135,0,1297},{11,11,43},{13,11,72},{141,11,142},{135,11,1830},{142,
-0,164},{5,0,57},{6,0,101},{6,0,586},{6,0,1663},{7,0,132},{7,0,1154},{7,0,1415},{
-7,0,1507},{12,0,493},{15,0,105},{151,0,15},{5,0,459},{7,0,1073},{8,0,241},{136,0
-,334},{133,11,826},{133,10,108},{5,10,219},{10,11,132},{11,11,191},{11,11,358},{
-139,11,460},{6,0,324},{6,0,520},{7,0,338},{7,0,1729},{8,0,228},{139,0,750},{21,0
-,30},{22,0,53},{4,10,193},{5,10,916},{7,10,364},{10,10,398},{10,10,726},{11,10,
-317},{11,10,626},{12,10,142},{12,10,288},{12,10,678},{13,10,313},{15,10,113},{
-146,10,114},{6,11,110},{135,11,1681},{135,0,910},{6,10,241},{7,10,907},{8,10,832
-},{9,10,342},{10,10,729},{11,10,284},{11,10,445},{11,10,651},{11,10,863},{13,10,
-398},{146,10,99},{7,0,705},{9,0,734},{5,11,1000},{7,11,733},{137,11,583},{4,0,73
-},{6,0,612},{7,0,927},{7,0,1822},{8,0,217},{9,0,765},{9,0,766},{10,0,408},{11,0,
-51},{11,0,793},{12,0,266},{15,0,158},{20,0,89},{150,0,32},{7,0,1330},{4,11,297},
-{6,11,529},{7,11,152},{7,11,713},{7,11,1845},{8,11,710},{8,11,717},{140,11,639},
-{5,0,389},{136,0,636},{134,0,1409},{4,10,562},{9,10,254},{139,10,879},{134,0,893
-},{132,10,786},{4,11,520},{135,11,575},{136,0,21},{140,0,721},{136,0,959},{7,11,
-1428},{7,11,1640},{9,11,169},{9,11,182},{9,11,367},{9,11,478},{9,11,506},{9,11,
-551},{9,11,648},{9,11,651},{9,11,697},{9,11,705},{9,11,725},{9,11,787},{9,11,794
-},{10,11,198},{10,11,214},{10,11,267},{10,11,275},{10,11,456},{10,11,551},{10,11
-,561},{10,11,613},{10,11,627},{10,11,668},{10,11,675},{10,11,691},{10,11,695},{
-10,11,707},{10,11,715},{11,11,183},{11,11,201},{11,11,244},{11,11,262},{11,11,
-352},{11,11,439},{11,11,493},{11,11,572},{11,11,591},{11,11,608},{11,11,611},{11
-,11,646},{11,11,674},{11,11,711},{11,11,751},{11,11,761},{11,11,776},{11,11,785}
-,{11,11,850},{11,11,853},{11,11,862},{11,11,865},{11,11,868},{11,11,898},{11,11,
-902},{11,11,903},{11,11,910},{11,11,932},{11,11,942},{11,11,957},{11,11,967},{11
-,11,972},{12,11,148},{12,11,195},{12,11,220},{12,11,237},{12,11,318},{12,11,339}
-,{12,11,393},{12,11,445},{12,11,450},{12,11,474},{12,11,509},{12,11,533},{12,11,
-591},{12,11,594},{12,11,597},{12,11,621},{12,11,633},{12,11,642},{13,11,59},{13,
-11,60},{13,11,145},{13,11,239},{13,11,250},{13,11,273},{13,11,329},{13,11,344},{
-13,11,365},{13,11,372},{13,11,387},{13,11,403},{13,11,414},{13,11,456},{13,11,
-478},{13,11,483},{13,11,489},{14,11,55},{14,11,57},{14,11,81},{14,11,90},{14,11,
-148},{14,11,239},{14,11,266},{14,11,321},{14,11,326},{14,11,327},{14,11,330},{14
-,11,347},{14,11,355},{14,11,401},{14,11,411},{14,11,414},{14,11,416},{14,11,420}
-,{15,11,61},{15,11,74},{15,11,87},{15,11,88},{15,11,94},{15,11,96},{15,11,116},{
-15,11,149},{15,11,154},{16,11,50},{16,11,63},{16,11,73},{17,11,2},{17,11,66},{17
-,11,92},{17,11,103},{17,11,112},{18,11,50},{18,11,54},{18,11,82},{18,11,86},{18,
-11,90},{18,11,111},{18,11,115},{18,11,156},{19,11,40},{19,11,79},{20,11,78},{149
-,11,22},{137,11,170},{134,0,1433},{135,11,1307},{139,11,411},{5,0,189},{7,0,442}
-,{7,0,443},{8,0,281},{12,0,174},{141,0,261},{6,10,216},{7,10,901},{7,10,1343},{
-136,10,493},{5,11,397},{6,11,154},{7,10,341},{7,11,676},{8,11,443},{8,11,609},{9
-,11,24},{9,11,325},{10,11,35},{11,10,219},{11,11,535},{11,11,672},{11,11,1018},{
-12,11,637},{144,11,30},{6,0,2},{7,0,191},{7,0,446},{7,0,1262},{7,0,1737},{8,0,22
-},{8,0,270},{8,0,612},{9,0,4},{9,0,312},{9,0,436},{9,0,626},{10,0,216},{10,0,311
-},{10,0,521},{10,0,623},{11,0,72},{11,0,330},{11,0,455},{12,0,321},{12,0,504},{
-12,0,530},{12,0,543},{13,0,17},{13,0,156},{13,0,334},{14,0,131},{17,0,60},{148,0
-,64},{7,0,354},{10,0,410},{139,0,815},{139,10,130},{7,10,1734},{137,11,631},{12,
-0,425},{15,0,112},{10,10,115},{11,10,420},{13,10,404},{14,10,346},{143,10,54},{6
-,0,60},{6,0,166},{7,0,374},{7,0,670},{7,0,1327},{8,0,411},{8,0,435},{9,0,653},{9
-,0,740},{10,0,385},{11,0,222},{11,0,324},{11,0,829},{140,0,611},{7,0,1611},{13,0
-,14},{15,0,44},{19,0,13},{148,0,76},{133,11,981},{4,11,56},{7,11,1791},{8,11,607
-},{8,11,651},{11,11,465},{11,11,835},{12,11,337},{141,11,480},{6,0,1478},{5,10,
-1011},{136,10,701},{139,0,596},{5,0,206},{134,0,398},{4,10,54},{5,10,666},{7,10,
-1039},{7,10,1130},{9,10,195},{138,10,302},{7,0,50},{9,11,158},{138,11,411},{135,
-11,1120},{6,0,517},{7,0,1159},{10,0,621},{11,0,192},{134,10,1669},{4,0,592},{6,0
-,600},{135,0,1653},{10,0,223},{139,0,645},{136,11,139},{7,0,64},{136,0,245},{142
-,0,278},{6,11,622},{135,11,1030},{136,0,604},{134,0,1502},{138,0,265},{141,11,
-168},{7,0,1763},{140,0,310},{7,10,798},{139,11,719},{7,11,160},{10,11,624},{142,
-11,279},{132,11,363},{7,10,122},{9,10,259},{10,10,84},{11,10,470},{12,10,541},{
-141,10,379},{5,0,129},{6,0,61},{135,0,947},{134,0,1356},{135,11,1191},{13,0,505}
-,{141,0,506},{11,0,1000},{5,10,82},{5,10,131},{7,10,1755},{8,10,31},{9,10,168},{
-9,10,764},{139,10,869},{134,0,966},{134,10,605},{134,11,292},{5,11,177},{6,11,
-616},{7,11,827},{9,11,525},{138,11,656},{135,11,1486},{138,11,31},{5,10,278},{
-137,10,68},{4,10,163},{5,10,201},{5,10,307},{5,10,310},{6,10,335},{7,10,284},{
-136,10,165},{6,0,839},{135,10,1660},{136,10,781},{6,10,33},{135,10,1244},{133,0,
-637},{4,11,161},{133,11,631},{137,0,590},{7,10,1953},{136,10,720},{5,0,280},{7,0
-,1226},{138,10,203},{134,0,1386},{5,0,281},{6,0,1026},{6,10,326},{7,10,677},{137
-,10,425},{7,11,1557},{135,11,1684},{135,0,1064},{9,11,469},{9,11,709},{12,11,512
-},{14,11,65},{145,11,12},{134,0,917},{10,11,229},{11,11,73},{11,11,376},{139,11,
-433},{7,0,555},{9,0,192},{13,0,30},{13,0,49},{15,0,150},{16,0,76},{20,0,52},{7,
-10,1316},{7,10,1412},{7,10,1839},{9,10,589},{11,10,241},{11,10,676},{11,10,811},
-{11,10,891},{12,10,140},{12,10,346},{12,10,479},{13,10,381},{14,10,188},{146,10,
-30},{149,0,15},{6,0,1882},{6,0,1883},{6,0,1897},{9,0,945},{9,0,1014},{9,0,1020},
-{12,0,823},{12,0,842},{12,0,866},{12,0,934},{15,0,242},{146,0,208},{6,0,965},{
-134,0,1499},{7,0,33},{7,0,120},{8,0,489},{9,0,319},{10,0,820},{11,0,1004},{12,0,
-379},{12,0,679},{13,0,117},{13,0,412},{14,0,25},{15,0,52},{15,0,161},{16,0,47},{
-149,0,2},{6,11,558},{7,11,651},{8,11,421},{9,11,0},{138,11,34},{4,0,937},{5,0,
-801},{7,0,473},{5,10,358},{7,10,1184},{10,10,662},{13,10,212},{13,10,304},{13,10
-,333},{145,10,98},{132,0,877},{6,0,693},{134,0,824},{132,0,365},{7,11,1832},{138
-,11,374},{5,0,7},{139,0,774},{4,0,734},{5,0,662},{134,0,430},{4,0,746},{135,0,
-1090},{5,0,360},{8,0,237},{10,0,231},{147,0,124},{138,11,348},{6,11,6},{7,11,81}
-,{7,11,771},{7,11,1731},{9,11,405},{138,11,421},{6,0,740},{137,0,822},{133,10,
-946},{7,0,1485},{136,0,929},{7,10,411},{8,10,631},{9,10,323},{10,10,355},{11,10,
-491},{12,10,143},{12,10,402},{13,10,73},{14,10,408},{15,10,107},{146,10,71},{135
-,10,590},{5,11,881},{133,11,885},{150,11,25},{4,0,852},{5,11,142},{134,11,546},{
-7,10,1467},{8,10,328},{10,10,544},{11,10,955},{13,10,320},{145,10,83},{9,0,17},{
-10,0,291},{11,10,511},{13,10,394},{14,10,298},{14,10,318},{146,10,103},{5,11,466
-},{11,11,571},{12,11,198},{13,11,283},{14,11,186},{15,11,21},{143,11,103},{134,0
-,1001},{4,11,185},{5,11,257},{5,11,839},{5,11,936},{7,11,171},{9,11,399},{10,11,
-258},{10,11,395},{10,11,734},{11,11,1014},{12,11,23},{13,11,350},{14,11,150},{
-147,11,6},{143,0,35},{132,0,831},{5,10,835},{134,10,483},{4,0,277},{5,0,608},{6,
-0,493},{7,0,457},{12,0,384},{7,11,404},{7,11,1377},{7,11,1430},{7,11,2017},{8,11
-,149},{8,11,239},{8,11,512},{8,11,793},{8,11,818},{9,11,474},{9,11,595},{10,11,
-122},{10,11,565},{10,11,649},{10,11,783},{11,11,239},{11,11,295},{11,11,447},{11
-,11,528},{11,11,639},{11,11,800},{11,11,936},{12,11,25},{12,11,73},{12,11,77},{
-12,11,157},{12,11,316},{12,11,390},{12,11,391},{12,11,394},{12,11,395},{12,11,
-478},{12,11,503},{12,11,592},{12,11,680},{13,11,50},{13,11,53},{13,11,132},{13,
-11,198},{13,11,275},{13,11,322},{13,11,415},{14,11,71},{14,11,257},{14,11,395},{
-15,11,71},{15,11,136},{17,11,123},{18,11,93},{147,11,58},{134,0,1351},{7,0,27},{
-135,0,316},{136,11,712},{136,0,984},{133,0,552},{137,0,264},{132,0,401},{6,0,710
-},{6,0,1111},{134,0,1343},{134,0,1211},{9,0,543},{10,0,524},{11,0,108},{11,0,653
-},{12,0,524},{13,0,123},{14,0,252},{16,0,18},{19,0,38},{20,0,26},{20,0,65},{21,0
-,3},{151,0,11},{4,0,205},{5,0,623},{7,0,104},{8,0,519},{137,0,716},{132,10,677},
-{4,11,377},{152,11,13},{135,11,1673},{7,0,579},{9,0,41},{9,0,244},{9,0,669},{10,
-0,5},{11,0,861},{11,0,951},{139,0,980},{132,0,717},{136,0,1011},{132,0,805},{4,
-11,180},{135,11,1906},{132,10,777},{132,10,331},{132,0,489},{6,0,1024},{4,11,491
-},{133,10,747},{135,11,1182},{4,11,171},{138,11,234},{4,11,586},{7,11,1186},{138
-,11,631},{135,0,892},{135,11,336},{9,11,931},{10,11,334},{148,11,71},{137,0,473}
-,{6,0,864},{12,0,659},{139,11,926},{7,0,819},{9,0,26},{9,0,392},{10,0,152},{10,0
-,226},{11,0,19},{12,0,276},{12,0,426},{12,0,589},{13,0,460},{15,0,97},{19,0,48},
-{148,0,104},{135,0,51},{133,10,326},{4,10,691},{146,10,16},{9,0,130},{11,0,765},
-{10,10,680},{10,10,793},{141,10,357},{133,11,765},{8,0,229},{6,10,32},{7,10,385}
-,{7,10,757},{7,10,1916},{8,10,94},{8,10,711},{9,10,541},{10,10,162},{10,10,795},
-{11,10,989},{11,10,1010},{12,10,14},{142,10,308},{7,11,474},{137,11,578},{132,0,
-674},{132,0,770},{5,0,79},{7,0,1027},{7,0,1477},{139,0,52},{133,11,424},{134,0,
-1666},{6,0,409},{6,10,349},{6,10,1682},{7,10,1252},{8,10,112},{8,11,714},{9,10,
-435},{9,10,668},{10,10,290},{10,10,319},{10,10,815},{11,10,180},{11,10,837},{12,
-10,240},{13,10,152},{13,10,219},{142,10,158},{5,0,789},{134,0,195},{4,0,251},{4,
-0,688},{7,0,513},{135,0,1284},{132,10,581},{9,11,420},{10,11,269},{10,11,285},{
-10,11,576},{11,11,397},{13,11,175},{145,11,90},{6,10,126},{7,10,573},{8,10,397},
-{142,10,44},{132,11,429},{133,0,889},{4,0,160},{5,0,330},{7,0,1434},{136,0,174},
-{7,11,18},{7,11,699},{7,11,1966},{8,11,752},{9,11,273},{9,11,412},{9,11,703},{10
-,11,71},{10,11,427},{10,11,508},{146,11,97},{6,0,872},{134,0,899},{133,10,926},{
-134,0,1126},{134,0,918},{4,11,53},{5,11,186},{135,11,752},{7,0,268},{136,0,569},
-{134,0,1224},{6,0,1361},{7,10,1232},{137,10,531},{8,11,575},{10,11,289},{139,11,
-319},{133,10,670},{132,11,675},{133,0,374},{135,10,1957},{133,0,731},{11,0,190},
-{15,0,49},{11,11,190},{143,11,49},{4,0,626},{5,0,506},{5,0,642},{6,0,425},{10,0,
-202},{139,0,141},{137,0,444},{7,10,242},{135,10,1942},{6,11,209},{8,11,468},{9,
-11,210},{11,11,36},{12,11,28},{12,11,630},{13,11,21},{13,11,349},{14,11,7},{145,
-11,13},{4,11,342},{135,11,1179},{5,10,834},{7,10,1202},{8,10,14},{9,10,481},{137
-,10,880},{4,11,928},{133,11,910},{4,11,318},{4,11,496},{7,11,856},{139,11,654},{
-136,0,835},{7,0,1526},{138,10,465},{151,0,17},{135,0,477},{4,10,357},{6,10,172},
-{7,10,143},{137,10,413},{6,0,1374},{138,0,994},{18,0,76},{132,10,590},{7,0,287},
-{8,0,355},{9,0,293},{137,0,743},{134,0,1389},{7,11,915},{8,11,247},{147,11,0},{4
-,11,202},{5,11,382},{6,11,454},{7,11,936},{7,11,1803},{8,11,758},{9,11,375},{9,
-11,895},{10,11,743},{10,11,792},{11,11,978},{11,11,1012},{142,11,109},{5,0,384},
-{8,0,455},{140,0,48},{132,11,390},{5,10,169},{7,10,333},{136,10,45},{5,0,264},{
-134,0,184},{138,11,791},{133,11,717},{132,10,198},{6,11,445},{7,11,332},{137,11,
-909},{136,0,1001},{4,10,24},{5,10,140},{5,10,185},{7,10,1500},{11,10,565},{139,
-10,838},{134,11,578},{5,0,633},{6,0,28},{135,0,1323},{132,0,851},{136,11,267},{7
-,0,359},{8,0,243},{140,0,175},{4,10,334},{133,10,593},{141,11,87},{136,11,766},{
-10,0,287},{12,0,138},{10,11,287},{140,11,138},{4,0,105},{132,0,740},{140,10,116}
-,{134,0,857},{135,11,1841},{6,0,1402},{137,0,819},{132,11,584},{132,10,709},{133
-,10,897},{5,0,224},{13,0,174},{146,0,52},{135,10,1840},{4,10,608},{133,10,497},{
-139,11,60},{4,0,758},{135,0,1649},{4,11,226},{4,11,326},{135,11,1770},{5,11,426}
-,{8,11,30},{9,11,2},{11,11,549},{147,11,122},{135,10,2039},{6,10,540},{136,10,
-136},{4,0,573},{8,0,655},{4,10,897},{133,10,786},{7,0,351},{139,0,128},{133,10,
-999},{4,10,299},{135,10,1004},{133,0,918},{132,11,345},{4,11,385},{7,11,265},{
-135,11,587},{133,10,456},{136,10,180},{6,0,687},{134,0,1537},{4,11,347},{5,11,
-423},{5,11,996},{135,11,1329},{132,10,755},{7,11,1259},{9,11,125},{11,11,65},{
-140,11,285},{5,11,136},{6,11,136},{136,11,644},{134,0,1525},{4,0,1009},{135,0,
-1139},{139,10,338},{132,0,340},{135,10,1464},{8,0,847},{10,0,861},{10,0,876},{10
-,0,889},{10,0,922},{10,0,929},{10,0,933},{12,0,784},{140,0,791},{139,0,176},{9,
-11,134},{10,11,2},{10,11,27},{10,11,333},{11,11,722},{143,11,1},{4,11,433},{133,
-11,719},{5,0,985},{7,0,509},{7,0,529},{145,0,96},{132,0,615},{4,10,890},{5,10,
-805},{5,10,819},{5,10,961},{6,10,396},{6,10,1631},{6,10,1678},{7,10,1967},{7,10,
-2041},{9,10,630},{11,10,8},{11,10,1019},{12,10,176},{13,10,225},{14,10,292},{149
-,10,24},{135,0,1919},{134,0,1131},{144,11,21},{144,11,51},{135,10,1815},{4,0,247
-},{7,10,1505},{10,10,190},{10,10,634},{11,10,792},{12,10,358},{140,10,447},{5,10
-,0},{6,10,536},{7,10,604},{13,10,445},{145,10,126},{4,0,184},{5,0,390},{6,0,337}
-,{7,0,23},{7,0,494},{7,0,618},{7,0,1456},{8,0,27},{8,0,599},{10,0,153},{139,0,
-710},{6,10,232},{6,10,412},{7,10,1074},{8,10,9},{8,10,157},{8,10,786},{9,10,196}
-,{9,10,352},{9,10,457},{10,10,337},{11,10,232},{11,10,877},{12,10,480},{140,10,
-546},{13,0,38},{135,10,958},{4,10,382},{136,10,579},{4,10,212},{135,10,1206},{4,
-11,555},{8,11,536},{138,11,288},{11,11,139},{139,11,171},{9,11,370},{138,11,90},
-{132,0,1015},{134,0,1088},{5,10,655},{135,11,977},{134,0,1585},{17,10,67},{147,
-10,74},{10,0,227},{11,0,497},{11,0,709},{140,0,415},{6,0,360},{7,0,1664},{136,0,
-478},{7,0,95},{6,10,231},{136,10,423},{140,11,65},{4,11,257},{135,11,2031},{135,
-11,1768},{133,10,300},{139,11,211},{136,0,699},{6,10,237},{7,10,611},{8,10,100},
-{9,10,416},{11,10,335},{12,10,173},{146,10,101},{14,0,26},{146,0,150},{6,0,581},
-{135,0,1119},{135,10,1208},{132,0,739},{6,11,83},{6,11,1733},{135,11,1389},{137,
-0,869},{4,0,67},{5,0,422},{7,0,1037},{7,0,1289},{7,0,1555},{9,0,741},{145,0,108}
-,{133,10,199},{12,10,427},{146,10,38},{136,0,464},{142,0,42},{10,0,96},{8,11,501
-},{137,11,696},{134,11,592},{4,0,512},{4,0,966},{5,0,342},{6,0,1855},{8,0,869},{
-8,0,875},{8,0,901},{144,0,26},{8,0,203},{11,0,823},{11,0,846},{12,0,482},{13,0,
-277},{13,0,302},{13,0,464},{14,0,205},{142,0,221},{4,0,449},{133,0,718},{7,11,
-1718},{9,11,95},{9,11,274},{10,11,279},{10,11,317},{10,11,420},{11,11,303},{11,
-11,808},{12,11,134},{12,11,367},{13,11,149},{13,11,347},{14,11,349},{14,11,406},
-{18,11,22},{18,11,89},{18,11,122},{147,11,47},{133,11,26},{4,0,355},{6,0,311},{9
-,0,256},{138,0,404},{132,11,550},{10,0,758},{6,10,312},{6,10,1715},{10,10,584},{
-11,10,546},{11,10,692},{12,10,259},{12,10,295},{13,10,46},{141,10,154},{136,11,
-822},{5,0,827},{4,11,902},{5,11,809},{6,11,122},{135,11,896},{5,0,64},{140,0,581
-},{4,0,442},{6,0,739},{7,0,1047},{7,0,1352},{7,0,1643},{7,11,1911},{9,11,449},{
-10,11,192},{138,11,740},{135,11,262},{132,10,588},{133,11,620},{5,0,977},{6,0,
-288},{7,0,528},{4,11,34},{5,11,574},{7,11,279},{7,11,1624},{136,11,601},{6,0,
-1375},{4,10,231},{5,10,61},{6,10,104},{7,10,729},{7,10,964},{7,10,1658},{140,10,
-414},{6,10,263},{138,10,757},{132,10,320},{4,0,254},{7,0,1309},{5,11,332},{135,
-11,1309},{6,11,261},{8,11,182},{139,11,943},{132,10,225},{6,0,12},{135,0,1219},{
-4,0,275},{12,0,376},{6,11,1721},{141,11,490},{4,11,933},{133,11,880},{6,0,951},{
-6,0,1109},{6,0,1181},{7,0,154},{4,10,405},{7,10,817},{14,10,58},{17,10,37},{146,
-10,124},{6,0,1520},{133,10,974},{134,0,1753},{6,0,369},{6,0,502},{7,0,1036},{8,0
-,348},{9,0,452},{10,0,26},{11,0,224},{11,0,387},{11,0,772},{12,0,95},{12,0,629},
-{13,0,195},{13,0,207},{13,0,241},{14,0,260},{14,0,270},{143,0,140},{132,0,269},{
-5,0,480},{7,0,532},{7,0,1197},{7,0,1358},{8,0,291},{11,0,349},{142,0,396},{5,10,
-235},{7,10,1239},{11,10,131},{140,10,370},{7,10,956},{7,10,1157},{7,10,1506},{7,
-10,1606},{7,10,1615},{7,10,1619},{7,10,1736},{7,10,1775},{8,10,590},{9,10,324},{
-9,10,736},{9,10,774},{9,10,776},{9,10,784},{10,10,567},{10,10,708},{11,10,518},{
-11,10,613},{11,10,695},{11,10,716},{11,10,739},{11,10,770},{11,10,771},{11,10,
-848},{11,10,857},{11,10,931},{11,10,947},{12,10,326},{12,10,387},{12,10,484},{12
-,10,528},{12,10,552},{12,10,613},{13,10,189},{13,10,256},{13,10,340},{13,10,432}
-,{13,10,436},{13,10,440},{13,10,454},{14,10,174},{14,10,220},{14,10,284},{14,10,
-390},{145,10,121},{8,11,598},{9,11,664},{138,11,441},{9,10,137},{138,10,221},{
-133,11,812},{148,0,15},{134,0,1341},{6,0,1017},{4,11,137},{7,11,1178},{135,11,
-1520},{7,10,390},{138,10,140},{7,11,1260},{135,11,1790},{137,11,191},{135,10,
-1144},{6,0,1810},{7,0,657},{8,0,886},{10,0,857},{14,0,440},{144,0,96},{8,0,533},
-{6,11,1661},{7,11,1975},{7,11,2009},{135,11,2011},{6,0,1453},{134,10,464},{132,
-11,715},{5,10,407},{11,10,204},{11,10,243},{11,10,489},{12,10,293},{19,10,37},{
-20,10,73},{150,10,38},{133,11,703},{4,0,211},{7,0,1483},{5,10,325},{8,10,5},{8,
-10,227},{9,10,105},{10,10,585},{140,10,614},{4,0,332},{5,0,335},{6,0,238},{7,0,
-269},{7,0,811},{7,0,1797},{8,0,836},{9,0,507},{141,0,242},{5,11,89},{7,11,1915},
-{9,11,185},{9,11,235},{9,11,496},{10,11,64},{10,11,270},{10,11,403},{10,11,469},
-{10,11,529},{10,11,590},{11,11,140},{11,11,860},{13,11,1},{13,11,422},{14,11,341
-},{14,11,364},{17,11,93},{18,11,113},{19,11,97},{147,11,113},{133,11,695},{16,0,
-19},{5,11,6},{6,11,183},{6,10,621},{7,11,680},{7,11,978},{7,11,1013},{7,11,1055}
-,{12,11,230},{13,11,172},{13,10,504},{146,11,29},{136,0,156},{133,0,1009},{6,11,
-29},{139,11,63},{134,0,820},{134,10,218},{7,10,454},{7,10,782},{8,10,768},{140,
-10,686},{5,0,228},{6,0,203},{7,0,156},{8,0,347},{9,0,265},{18,0,39},{20,0,54},{
-21,0,31},{22,0,3},{23,0,0},{15,11,8},{18,11,39},{20,11,54},{21,11,31},{22,11,3},
-{151,11,0},{7,0,1131},{135,0,1468},{144,10,0},{134,0,1276},{10,10,676},{140,10,
-462},{132,11,311},{134,11,1740},{7,11,170},{8,11,90},{8,11,177},{8,11,415},{11,
-11,714},{142,11,281},{134,10,164},{6,0,1792},{138,0,849},{150,10,50},{5,0,291},{
-5,0,318},{7,0,765},{9,0,389},{12,0,548},{8,11,522},{142,11,328},{11,11,91},{13,
-11,129},{15,11,101},{145,11,125},{4,11,494},{6,11,74},{7,11,44},{7,11,407},{8,11
-,551},{12,11,17},{15,11,5},{148,11,11},{4,11,276},{133,11,296},{6,10,343},{7,10,
-195},{7,11,1777},{9,10,226},{10,10,197},{10,10,575},{11,10,502},{139,10,899},{10
-,0,525},{139,0,82},{14,0,453},{4,11,7},{5,11,90},{5,11,158},{6,11,542},{7,11,221
-},{7,11,1574},{9,11,490},{10,11,540},{11,11,443},{139,11,757},{135,0,666},{22,10
-,29},{150,11,29},{4,0,422},{147,10,8},{5,0,355},{145,0,0},{6,0,1873},{9,0,918},{
-7,11,588},{9,11,175},{138,11,530},{143,11,31},{11,0,165},{7,10,1125},{9,10,143},
-{14,10,405},{150,10,21},{9,0,260},{137,0,905},{5,11,872},{6,11,57},{6,11,479},{6
-,11,562},{7,11,471},{7,11,1060},{9,11,447},{9,11,454},{141,11,6},{138,11,704},{
-133,0,865},{5,0,914},{134,0,1625},{133,0,234},{7,0,1383},{5,11,31},{6,11,614},{
-145,11,61},{7,11,1200},{138,11,460},{6,11,424},{135,11,1866},{136,0,306},{5,10,
-959},{12,11,30},{13,11,148},{14,11,87},{14,11,182},{16,11,42},{18,11,92},{148,11
-,70},{6,0,1919},{6,0,1921},{9,0,923},{9,0,930},{9,0,941},{9,0,949},{9,0,987},{9,
-0,988},{9,0,992},{12,0,802},{12,0,815},{12,0,856},{12,0,885},{12,0,893},{12,0,
-898},{12,0,919},{12,0,920},{12,0,941},{12,0,947},{15,0,183},{15,0,185},{15,0,189
-},{15,0,197},{15,0,202},{15,0,233},{18,0,218},{18,0,219},{18,0,233},{143,11,156}
-,{135,10,1759},{136,10,173},{13,0,163},{13,0,180},{18,0,78},{20,0,35},{5,11,13},
-{134,11,142},{134,10,266},{6,11,97},{7,11,116},{8,11,322},{8,11,755},{9,11,548},
-{10,11,714},{11,11,884},{141,11,324},{135,0,1312},{9,0,814},{137,11,676},{133,0,
-707},{135,0,1493},{6,0,421},{7,0,61},{7,0,1540},{10,0,11},{138,0,501},{12,0,733}
-,{12,0,766},{7,11,866},{135,11,1163},{137,0,341},{142,0,98},{145,11,115},{135,11
-,1111},{136,10,300},{136,0,1014},{8,11,1},{9,11,112},{138,11,326},{132,11,730},{
-5,11,488},{6,11,527},{7,11,489},{7,11,1636},{8,11,121},{8,11,144},{8,11,359},{9,
-11,193},{9,11,241},{9,11,336},{9,11,882},{11,11,266},{11,11,372},{11,11,944},{12
-,11,401},{140,11,641},{6,0,971},{134,0,1121},{6,0,102},{7,0,72},{15,0,142},{147,
-0,67},{151,0,30},{135,0,823},{134,0,1045},{5,10,427},{5,10,734},{7,10,478},{136,
-10,52},{7,0,1930},{11,10,217},{142,10,165},{6,0,1512},{135,0,1870},{9,11,31},{10
-,11,244},{10,11,699},{12,11,149},{141,11,497},{133,11,377},{145,11,101},{10,11,
-158},{13,11,13},{13,11,137},{13,11,258},{14,11,111},{14,11,225},{14,11,253},{14,
-11,304},{14,11,339},{14,11,417},{146,11,33},{6,0,87},{6,10,1734},{7,10,20},{7,10
-,1056},{8,10,732},{9,10,406},{9,10,911},{138,10,694},{134,0,1243},{137,0,245},{7
-,0,68},{8,0,48},{8,0,88},{8,0,582},{8,0,681},{9,0,373},{9,0,864},{11,0,157},{11,
-0,336},{11,0,843},{148,0,27},{8,11,663},{144,11,8},{133,10,613},{4,0,88},{5,0,
-137},{5,0,174},{5,0,777},{6,0,1664},{6,0,1725},{7,0,77},{7,0,426},{7,0,1317},{7,
-0,1355},{8,0,126},{8,0,563},{9,0,523},{9,0,750},{10,0,310},{10,0,836},{11,0,42},
-{11,0,318},{11,0,731},{12,0,68},{12,0,92},{12,0,507},{12,0,692},{13,0,81},{13,0,
-238},{13,0,374},{14,0,436},{18,0,138},{19,0,78},{19,0,111},{20,0,55},{20,0,77},{
-148,0,92},{141,0,418},{4,0,938},{137,0,625},{138,0,351},{5,11,843},{7,10,32},{7,
-10,984},{8,10,85},{8,10,709},{9,10,579},{9,10,847},{9,10,856},{10,10,799},{11,10
-,258},{11,10,1007},{12,10,331},{12,10,615},{13,10,188},{13,10,435},{14,10,8},{15
-,10,165},{16,10,27},{148,10,40},{6,0,1668},{7,0,1499},{8,0,117},{9,0,314},{138,0
-,174},{135,0,707},{132,11,554},{133,11,536},{5,0,403},{5,11,207},{9,11,79},{11,
-11,625},{145,11,7},{132,11,424},{136,11,785},{4,10,167},{135,10,82},{9,0,7},{23,
-0,6},{9,11,7},{151,11,6},{6,0,282},{5,10,62},{6,10,534},{7,10,74},{7,10,678},{7,
-10,684},{7,10,1043},{7,10,1072},{8,10,280},{8,10,541},{8,10,686},{9,10,258},{10,
-10,519},{11,10,252},{140,10,282},{138,10,33},{132,10,359},{4,0,44},{5,0,311},{6,
-0,156},{7,0,639},{7,0,762},{7,0,1827},{9,0,8},{9,0,462},{148,0,83},{7,11,769},{9
-,11,18},{138,11,358},{4,0,346},{7,0,115},{9,0,180},{9,0,456},{10,0,363},{4,11,
-896},{134,11,1777},{133,10,211},{7,0,761},{7,0,1051},{137,0,545},{6,10,145},{141
-,10,336},{7,11,750},{9,11,223},{11,11,27},{11,11,466},{12,11,624},{14,11,265},{
-146,11,61},{6,0,752},{6,0,768},{6,0,1195},{6,0,1254},{6,0,1619},{137,0,835},{6,0
-,1936},{8,0,930},{136,0,960},{132,10,263},{132,11,249},{12,0,653},{132,10,916},{
-4,11,603},{133,11,661},{8,0,344},{4,11,11},{6,11,128},{7,11,231},{7,11,1533},{
-138,11,725},{134,0,1483},{134,0,875},{6,0,185},{7,0,1899},{9,0,875},{139,0,673},
-{15,10,155},{144,10,79},{7,0,93},{7,0,210},{7,0,1223},{8,0,451},{8,0,460},{11,0,
-353},{11,0,475},{4,10,599},{6,10,1634},{7,10,67},{7,10,691},{7,10,979},{7,10,
-1697},{8,10,207},{8,10,214},{8,10,231},{8,10,294},{8,10,336},{8,10,428},{8,10,
-471},{8,10,622},{8,10,626},{8,10,679},{8,10,759},{8,10,829},{9,10,11},{9,10,246}
-,{9,10,484},{9,10,573},{9,10,706},{9,10,762},{9,10,798},{9,10,855},{9,10,870},{9
-,10,912},{10,10,303},{10,10,335},{10,10,424},{10,10,461},{10,10,543},{10,10,759}
-,{10,10,814},{11,10,59},{11,10,235},{11,10,590},{11,10,929},{11,10,963},{11,10,
-987},{12,10,114},{12,10,182},{12,10,226},{12,10,332},{12,10,439},{12,10,575},{12
-,10,598},{12,10,675},{13,10,8},{13,10,125},{13,10,194},{13,10,287},{14,10,197},{
-14,10,383},{15,10,53},{17,10,63},{19,10,46},{19,10,98},{19,10,106},{148,10,85},{
-132,11,476},{4,0,327},{5,0,478},{7,0,1332},{136,0,753},{5,0,1020},{133,0,1022},{
-135,11,1807},{4,0,103},{133,0,401},{4,0,499},{135,0,1421},{10,0,207},{13,0,164},
-{147,10,126},{9,11,20},{10,11,324},{139,11,488},{132,0,96},{9,11,280},{138,11,
-134},{135,0,968},{133,10,187},{135,10,1286},{5,11,112},{6,11,103},{134,11,150},{
-8,0,914},{10,0,3},{4,10,215},{9,10,38},{11,10,23},{11,10,127},{139,10,796},{135,
-0,399},{6,0,563},{137,0,224},{6,0,704},{134,0,1214},{4,11,708},{8,11,15},{9,11,
-50},{9,11,386},{11,11,18},{11,11,529},{140,11,228},{4,11,563},{7,11,109},{7,11,
-592},{7,11,637},{7,11,770},{7,11,1701},{8,11,436},{8,11,463},{9,11,60},{9,11,335
-},{9,11,904},{10,11,73},{11,11,434},{12,11,585},{13,11,331},{18,11,110},{148,11,
-60},{134,0,1559},{132,11,502},{6,11,347},{138,11,161},{4,11,33},{5,11,102},{5,11
-,500},{6,11,284},{7,11,1079},{7,11,1423},{7,11,1702},{8,11,470},{9,11,554},{9,11
-,723},{139,11,333},{7,11,246},{135,11,840},{6,11,10},{8,11,571},{9,11,739},{143,
-11,91},{8,0,861},{10,0,905},{12,0,730},{12,0,789},{133,11,626},{134,0,946},{5,0,
-746},{12,0,333},{14,0,332},{12,11,333},{142,11,332},{5,11,18},{6,11,526},{13,11,
-24},{13,11,110},{19,11,5},{147,11,44},{4,0,910},{5,0,832},{135,10,2002},{10,11,
-768},{139,11,787},{4,11,309},{5,11,462},{7,11,970},{135,11,1097},{4,10,28},{5,10
-,440},{7,10,248},{11,10,833},{140,10,344},{134,10,1654},{6,0,632},{6,0,652},{6,0
-,1272},{6,0,1384},{134,0,1560},{134,11,1704},{6,0,1393},{133,10,853},{6,10,249},
-{7,10,1234},{139,10,573},{5,11,86},{7,11,743},{9,11,85},{10,11,281},{10,11,432},
-{11,11,490},{12,11,251},{13,11,118},{14,11,378},{146,11,143},{5,11,524},{133,11,
-744},{134,0,1514},{10,0,201},{142,0,319},{7,0,717},{10,0,510},{7,10,392},{8,10,
-20},{8,10,172},{8,10,690},{9,10,383},{9,10,845},{11,10,293},{11,10,832},{11,10,
-920},{11,10,984},{141,10,221},{134,0,1381},{5,10,858},{133,10,992},{8,0,528},{
-137,0,348},{10,11,107},{140,11,436},{4,0,20},{133,0,616},{134,0,1251},{132,11,
-927},{10,11,123},{12,11,670},{13,11,371},{14,11,142},{146,11,94},{134,0,1163},{7
-,11,1149},{137,11,156},{134,0,307},{133,11,778},{7,0,1091},{135,0,1765},{5,11,
-502},{6,10,268},{137,10,62},{8,11,196},{10,11,283},{139,11,406},{4,0,26},{5,0,
-429},{6,0,245},{7,0,704},{7,0,1379},{135,0,1474},{133,11,855},{132,0,881},{4,0,
-621},{135,11,1596},{7,11,1400},{9,11,446},{138,11,45},{6,0,736},{138,10,106},{
-133,0,542},{134,0,348},{133,0,868},{136,0,433},{135,0,1495},{138,0,771},{6,10,
-613},{136,10,223},{138,0,215},{141,0,124},{136,11,391},{135,11,172},{132,10,670}
-,{140,0,55},{9,10,40},{139,10,136},{7,0,62},{147,0,112},{132,0,856},{132,11,568}
-,{12,0,270},{139,10,259},{8,0,572},{137,0,698},{4,11,732},{9,10,310},{137,10,682
-},{142,10,296},{134,0,939},{136,11,733},{135,11,1435},{7,10,1401},{135,10,1476},
-{6,0,352},{4,10,296},{7,10,401},{7,10,1410},{7,10,1594},{7,10,1674},{8,10,63},{8
-,10,660},{137,10,74},{4,11,428},{133,11,668},{4,10,139},{4,10,388},{140,10,188},
-{7,11,2015},{140,11,665},{132,0,647},{146,0,10},{138,0,220},{142,0,464},{132,0,
-109},{134,0,1746},{6,0,515},{4,10,747},{6,11,1623},{6,11,1681},{7,10,649},{7,10,
-1479},{135,10,1583},{133,10,232},{135,0,566},{137,10,887},{4,0,40},{10,0,67},{11
-,0,117},{11,0,768},{139,0,935},{132,0,801},{7,0,992},{8,0,301},{9,0,722},{12,0,
-63},{13,0,29},{14,0,161},{143,0,18},{139,0,923},{6,11,1748},{8,11,715},{9,11,802
-},{10,11,46},{10,11,819},{13,11,308},{14,11,351},{14,11,363},{146,11,67},{137,11
-,745},{7,0,1145},{4,10,14},{7,10,1801},{10,10,748},{141,10,458},{4,11,63},{5,11,
-347},{134,11,474},{135,0,568},{4,10,425},{7,11,577},{7,11,1432},{9,11,475},{9,11
-,505},{9,11,526},{9,11,609},{9,11,689},{9,11,726},{9,11,735},{9,11,738},{10,11,
-556},{10,11,674},{10,11,684},{11,11,89},{11,11,202},{11,11,272},{11,11,380},{11,
-11,415},{11,11,505},{11,11,537},{11,11,550},{11,11,562},{11,11,640},{11,11,667},
-{11,11,688},{11,11,847},{11,11,927},{11,11,930},{11,11,940},{12,11,144},{12,11,
-325},{12,11,329},{12,11,389},{12,11,403},{12,11,451},{12,11,515},{12,11,604},{12
-,11,616},{12,11,626},{13,11,66},{13,11,131},{13,11,167},{13,11,236},{13,11,368},
-{13,11,411},{13,11,434},{13,11,453},{13,11,461},{13,11,474},{14,11,59},{14,11,60
-},{14,11,139},{14,11,152},{14,11,276},{14,11,353},{14,11,402},{15,11,28},{15,11,
-81},{15,11,123},{15,11,152},{18,11,136},{148,11,88},{137,0,247},{135,11,1622},{9
-,11,544},{11,11,413},{144,11,25},{4,0,645},{7,0,825},{6,10,1768},{135,11,89},{
-140,0,328},{5,10,943},{134,10,1779},{134,0,1363},{5,10,245},{6,10,576},{7,10,582
-},{136,10,225},{134,0,1280},{5,11,824},{133,11,941},{7,11,440},{8,11,230},{139,
-11,106},{5,0,28},{6,0,204},{10,0,320},{10,0,583},{13,0,502},{14,0,72},{14,0,274}
-,{14,0,312},{14,0,344},{15,0,159},{16,0,62},{16,0,69},{17,0,30},{18,0,42},{18,0,
-53},{18,0,84},{18,0,140},{19,0,68},{19,0,85},{20,0,5},{20,0,45},{20,0,101},{22,0
-,7},{150,0,20},{4,0,558},{6,0,390},{7,0,162},{7,0,689},{9,0,360},{138,0,653},{
-134,0,764},{6,0,862},{137,0,833},{5,0,856},{6,0,1672},{6,0,1757},{134,0,1781},{5
-,0,92},{10,0,736},{140,0,102},{6,0,1927},{6,0,1944},{8,0,924},{8,0,948},{10,0,
-967},{138,0,978},{134,0,1479},{5,0,590},{8,0,360},{9,0,213},{138,0,63},{134,0,
-1521},{6,0,709},{134,0,891},{132,10,443},{13,0,477},{14,0,120},{148,0,61},{4,11,
-914},{5,11,800},{133,11,852},{10,11,54},{141,11,115},{4,11,918},{133,11,876},{
-139,11,152},{4,11,92},{133,11,274},{135,11,1901},{9,11,800},{10,11,693},{11,11,
-482},{11,11,734},{139,11,789},{9,0,483},{132,10,298},{6,0,1213},{141,11,498},{
-135,11,1451},{133,11,743},{4,0,1022},{10,0,1000},{12,0,957},{12,0,980},{12,0,
-1013},{14,0,481},{144,0,116},{8,0,503},{17,0,29},{4,11,49},{7,11,280},{135,11,
-1633},{135,0,1712},{134,0,466},{136,11,47},{5,10,164},{7,10,121},{142,10,189},{7
-,10,812},{7,10,1261},{7,10,1360},{9,10,632},{140,10,352},{139,10,556},{132,0,731
-},{5,11,272},{5,11,908},{5,11,942},{7,11,1008},{7,11,1560},{8,11,197},{9,11,47},
-{11,11,538},{139,11,742},{4,10,172},{9,10,611},{10,10,436},{12,10,673},{141,10,
-255},{133,10,844},{10,0,484},{11,0,754},{12,0,457},{14,0,171},{14,0,389},{146,0,
-153},{9,10,263},{10,10,147},{138,10,492},{137,11,891},{138,0,241},{133,10,537},{
-6,0,2005},{136,0,964},{137,10,842},{151,11,8},{4,11,407},{132,11,560},{135,11,
-1884},{6,0,1100},{134,0,1242},{135,0,954},{5,10,230},{5,10,392},{6,10,420},{9,10
-,568},{140,10,612},{4,11,475},{11,11,35},{11,11,90},{13,11,7},{13,11,71},{13,11,
-177},{142,11,422},{136,11,332},{135,0,1958},{6,0,549},{8,0,34},{8,0,283},{9,0,
-165},{138,0,475},{10,0,952},{12,0,966},{140,0,994},{5,0,652},{5,0,701},{135,0,
-449},{4,0,655},{7,0,850},{17,0,75},{146,0,137},{4,0,146},{7,0,1618},{8,0,670},{5
-,10,41},{7,10,1459},{7,10,1469},{7,10,1859},{9,10,549},{139,10,905},{133,10,696}
-,{6,0,159},{6,0,364},{7,0,516},{137,0,518},{135,0,1439},{6,11,222},{7,11,636},{7
-,11,1620},{8,11,409},{9,11,693},{139,11,77},{13,0,151},{141,11,45},{6,0,1027},{4
-,11,336},{132,10,771},{139,11,392},{10,11,121},{11,11,175},{149,11,16},{8,0,950}
-,{138,0,983},{133,10,921},{135,0,993},{6,10,180},{7,10,1137},{8,10,751},{139,10,
-805},{7,0,501},{9,0,111},{10,0,141},{11,0,332},{13,0,43},{13,0,429},{14,0,130},{
-14,0,415},{145,0,102},{4,10,183},{5,11,882},{7,10,271},{11,10,824},{11,10,952},{
-13,10,278},{13,10,339},{13,10,482},{14,10,424},{148,10,99},{4,10,19},{5,10,477},
-{5,10,596},{6,10,505},{7,10,1221},{11,10,907},{12,10,209},{141,10,214},{135,10,
-1215},{133,0,452},{132,11,426},{5,0,149},{136,0,233},{133,0,935},{6,11,58},{7,11
-,654},{7,11,745},{7,11,1969},{8,11,240},{8,11,675},{9,11,479},{9,11,731},{10,11,
-330},{10,11,593},{10,11,817},{11,11,32},{11,11,133},{11,11,221},{145,11,68},{12,
-0,582},{18,0,131},{7,11,102},{137,11,538},{136,0,801},{134,10,1645},{132,0,70},{
-6,10,92},{6,10,188},{7,10,1269},{7,10,1524},{7,10,1876},{10,10,228},{139,10,1020
-},{4,10,459},{133,10,966},{138,0,369},{16,0,36},{140,10,330},{141,11,366},{7,0,
-721},{10,0,236},{12,0,204},{6,10,18},{7,10,932},{8,10,757},{9,10,54},{9,10,65},{
-9,10,844},{10,10,113},{10,10,315},{10,10,798},{11,10,153},{12,10,151},{12,10,392
-},{12,10,666},{142,10,248},{7,0,241},{10,0,430},{8,10,548},{9,10,532},{10,10,117
-},{11,10,351},{11,10,375},{143,10,23},{134,10,1742},{133,10,965},{133,11,566},{6
-,11,48},{135,11,63},{134,10,182},{10,10,65},{10,10,488},{138,10,497},{6,11,114},
-{7,11,1224},{7,11,1556},{136,11,3},{134,0,1817},{8,11,576},{137,11,267},{6,0,
-1078},{144,0,16},{9,10,588},{138,10,260},{138,0,1021},{5,0,406},{134,0,2022},{
-133,11,933},{6,0,69},{135,0,117},{7,0,1830},{136,11,427},{4,0,432},{135,0,824},{
-134,10,1786},{133,0,826},{139,11,67},{133,11,759},{135,10,308},{137,0,816},{133,
-0,1000},{4,0,297},{6,0,529},{7,0,152},{7,0,713},{7,0,1845},{8,0,710},{8,0,717},{
-12,0,639},{140,0,685},{7,0,423},{136,10,588},{136,10,287},{136,0,510},{134,0,
-1048},{6,0,618},{7,11,56},{7,11,1989},{8,11,337},{8,11,738},{9,11,600},{10,11,
-483},{12,11,37},{13,11,447},{142,11,92},{4,0,520},{135,0,575},{8,0,990},{138,0,
-977},{135,11,774},{9,11,347},{11,11,24},{140,11,170},{136,11,379},{140,10,290},{
-132,11,328},{4,0,321},{134,0,569},{4,11,101},{135,11,1171},{7,0,723},{7,0,1135},
-{5,11,833},{136,11,744},{7,10,719},{8,10,809},{136,10,834},{8,0,921},{136,10,796
-},{5,10,210},{6,10,213},{7,10,60},{10,10,364},{139,10,135},{5,0,397},{6,0,154},{
-7,0,676},{8,0,443},{8,0,609},{9,0,24},{9,0,325},{10,0,35},{11,0,535},{11,0,672},
-{11,0,1018},{12,0,637},{16,0,30},{5,10,607},{8,10,326},{136,10,490},{4,10,701},{
-5,10,472},{6,11,9},{6,11,397},{7,11,53},{7,11,1742},{9,10,758},{10,11,632},{11,
-11,828},{140,11,146},{135,10,380},{135,10,1947},{148,11,109},{10,10,278},{138,11
-,278},{134,0,856},{7,0,139},{4,10,386},{8,10,405},{8,10,728},{9,10,497},{11,10,
-110},{11,10,360},{15,10,37},{144,10,84},{141,0,282},{133,0,981},{5,0,288},{7,10,
-1452},{7,10,1480},{8,10,634},{140,10,472},{7,0,1890},{8,11,367},{10,11,760},{14,
-11,79},{20,11,17},{152,11,0},{4,10,524},{136,10,810},{4,0,56},{7,0,1791},{8,0,
-607},{8,0,651},{11,0,465},{11,0,835},{12,0,337},{141,0,480},{10,10,238},{141,10,
-33},{11,11,417},{12,11,223},{140,11,265},{9,0,158},{10,0,411},{140,0,261},{133,
-10,532},{133,10,997},{12,11,186},{12,11,292},{14,11,100},{146,11,70},{6,0,1403},
-{136,0,617},{134,0,1205},{139,0,563},{4,0,242},{134,0,333},{4,11,186},{5,11,157}
-,{8,11,168},{138,11,6},{132,0,369},{133,11,875},{5,10,782},{5,10,829},{134,10,
-1738},{134,0,622},{135,11,1272},{6,0,1407},{7,11,111},{136,11,581},{7,10,1823},{
-139,10,693},{7,0,160},{10,0,624},{142,0,279},{132,0,363},{10,11,589},{12,11,111}
-,{13,11,260},{14,11,82},{18,11,63},{147,11,45},{7,11,1364},{7,11,1907},{141,11,
-158},{4,11,404},{4,11,659},{135,11,675},{13,11,211},{14,11,133},{14,11,204},{15,
-11,64},{15,11,69},{15,11,114},{16,11,10},{19,11,23},{19,11,35},{19,11,39},{19,11
-,51},{19,11,71},{19,11,75},{152,11,15},{4,10,78},{5,10,96},{5,10,182},{7,10,1724
-},{7,10,1825},{10,10,394},{10,10,471},{11,10,532},{14,10,340},{145,10,88},{135,
-10,1964},{133,11,391},{11,11,887},{14,11,365},{142,11,375},{5,11,540},{6,11,1697
-},{7,11,222},{136,11,341},{134,11,78},{9,0,601},{9,0,619},{10,0,505},{10,0,732},
-{11,0,355},{140,0,139},{134,0,292},{139,0,174},{5,0,177},{6,0,616},{7,0,827},{9,
-0,525},{138,0,656},{10,0,31},{6,10,215},{7,10,1028},{7,10,1473},{7,10,1721},{9,
-10,424},{138,10,779},{135,10,584},{136,11,293},{134,0,685},{135,11,1868},{133,11
-,460},{7,0,647},{6,10,67},{7,10,1630},{9,10,354},{9,10,675},{10,10,830},{14,10,
-80},{145,10,80},{4,0,161},{133,0,631},{6,10,141},{7,10,225},{9,10,59},{9,10,607}
-,{10,10,312},{11,10,687},{12,10,555},{13,10,373},{13,10,494},{148,10,58},{7,11,
-965},{7,11,1460},{135,11,1604},{136,10,783},{134,11,388},{6,0,722},{6,0,1267},{4
-,11,511},{9,11,333},{9,11,379},{10,11,602},{11,11,441},{11,11,723},{11,11,976},{
-140,11,357},{134,0,1797},{135,0,1684},{9,0,469},{9,0,709},{12,0,512},{14,0,65},{
-17,0,12},{5,11,938},{136,11,707},{7,0,1230},{136,0,531},{10,0,229},{11,0,73},{11
-,0,376},{139,0,433},{12,0,268},{12,0,640},{142,0,119},{7,10,430},{139,10,46},{6,
-0,558},{7,0,651},{8,0,421},{9,0,0},{10,0,34},{139,0,1008},{6,0,106},{7,0,1786},{
-7,0,1821},{9,0,102},{9,0,763},{5,10,602},{7,10,2018},{137,10,418},{5,0,65},{6,0,
-416},{7,0,1720},{7,0,1924},{10,0,109},{11,0,14},{11,0,70},{11,0,569},{11,0,735},
-{15,0,153},{20,0,80},{136,10,677},{135,11,1625},{137,11,772},{136,0,595},{6,11,
-469},{7,11,1709},{138,11,515},{7,0,1832},{138,0,374},{9,0,106},{9,0,163},{9,0,
-296},{10,0,167},{10,0,172},{10,0,777},{139,0,16},{6,0,6},{7,0,81},{7,0,771},{7,0
-,1731},{9,0,405},{138,0,421},{4,11,500},{135,11,938},{5,11,68},{134,11,383},{5,0
-,881},{133,0,885},{6,0,854},{6,0,1132},{6,0,1495},{6,0,1526},{6,0,1533},{134,0,
-1577},{4,11,337},{6,11,353},{7,11,1934},{8,11,488},{137,11,429},{7,11,236},{7,11
-,1795},{8,11,259},{9,11,135},{9,11,177},{10,11,825},{11,11,115},{11,11,370},{11,
-11,405},{11,11,604},{12,11,10},{12,11,667},{12,11,669},{13,11,76},{14,11,310},{
-15,11,76},{15,11,147},{148,11,23},{5,0,142},{134,0,546},{4,11,15},{5,11,22},{6,
-11,244},{7,11,40},{7,11,200},{7,11,906},{7,11,1199},{9,11,616},{10,11,716},{11,
-11,635},{11,11,801},{140,11,458},{5,0,466},{11,0,571},{12,0,198},{13,0,283},{14,
-0,186},{15,0,21},{15,0,103},{135,10,329},{4,0,185},{5,0,257},{5,0,839},{5,0,936}
-,{9,0,399},{10,0,258},{10,0,395},{10,0,734},{11,0,1014},{12,0,23},{13,0,350},{14
-,0,150},{19,0,6},{135,11,1735},{12,11,36},{141,11,337},{5,11,598},{7,11,791},{8,
-11,108},{137,11,123},{132,10,469},{7,0,404},{7,0,1377},{7,0,1430},{7,0,2017},{8,
-0,149},{8,0,239},{8,0,512},{8,0,793},{8,0,818},{9,0,474},{9,0,595},{10,0,122},{
-10,0,565},{10,0,649},{10,0,783},{11,0,239},{11,0,295},{11,0,447},{11,0,528},{11,
-0,639},{11,0,800},{12,0,25},{12,0,77},{12,0,157},{12,0,256},{12,0,316},{12,0,390
-},{12,0,391},{12,0,395},{12,0,478},{12,0,503},{12,0,592},{12,0,680},{13,0,50},{
-13,0,53},{13,0,132},{13,0,198},{13,0,322},{13,0,415},{13,0,511},{14,0,71},{14,0,
-395},{15,0,71},{15,0,136},{17,0,123},{18,0,93},{147,0,58},{136,0,712},{134,10,
-1743},{5,10,929},{6,10,340},{8,10,376},{136,10,807},{6,0,1848},{8,0,860},{10,0,
-856},{10,0,859},{10,0,925},{10,0,941},{140,0,762},{6,0,629},{6,0,906},{9,0,810},
-{140,0,652},{5,10,218},{7,10,1610},{138,10,83},{7,10,1512},{135,10,1794},{4,0,
-377},{24,0,13},{4,11,155},{7,11,1689},{11,10,0},{144,10,78},{4,11,164},{5,11,151
-},{5,11,730},{5,11,741},{7,11,498},{7,11,870},{7,11,1542},{12,11,213},{14,11,36}
-,{14,11,391},{17,11,111},{18,11,6},{18,11,46},{18,11,151},{19,11,36},{20,11,32},
-{20,11,56},{20,11,69},{20,11,102},{21,11,4},{22,11,8},{22,11,10},{22,11,14},{150
-,11,31},{7,0,1842},{133,10,571},{4,10,455},{4,11,624},{135,11,1752},{134,0,1501}
-,{4,11,492},{5,11,451},{6,10,161},{7,10,372},{137,10,597},{132,10,349},{4,0,180}
-,{135,0,1906},{135,11,835},{141,11,70},{132,0,491},{137,10,751},{6,10,432},{139,
-10,322},{4,0,171},{138,0,234},{6,11,113},{135,11,436},{4,0,586},{7,0,1186},{138,
-0,631},{5,10,468},{10,10,325},{11,10,856},{12,10,345},{143,10,104},{5,10,223},{
-10,11,592},{10,11,753},{12,11,317},{12,11,355},{12,11,465},{12,11,469},{12,11,
-560},{12,11,578},{141,11,243},{132,10,566},{135,11,520},{4,10,59},{135,10,1394},
-{6,10,436},{139,10,481},{9,0,931},{10,0,334},{20,0,71},{4,10,48},{5,10,271},{7,
-10,953},{135,11,1878},{11,0,170},{5,10,610},{136,10,457},{133,10,755},{6,0,1587}
-,{135,10,1217},{4,10,197},{149,11,26},{133,11,585},{137,11,521},{133,0,765},{133
-,10,217},{139,11,586},{133,0,424},{9,11,752},{12,11,610},{13,11,431},{16,11,59},
-{146,11,109},{136,0,714},{7,0,685},{132,11,307},{9,0,420},{10,0,269},{10,0,285},
-{10,0,576},{11,0,397},{13,0,175},{145,0,90},{132,0,429},{133,11,964},{9,11,463},
-{138,11,595},{7,0,18},{7,0,699},{7,0,1966},{8,0,752},{9,0,273},{9,0,412},{9,0,
-703},{10,0,71},{10,0,427},{138,0,508},{4,10,165},{7,10,1398},{135,10,1829},{4,0,
-53},{5,0,186},{7,0,752},{7,0,828},{142,0,116},{8,0,575},{10,0,289},{139,0,319},{
-132,0,675},{134,0,1424},{4,11,75},{5,11,180},{6,11,500},{7,11,58},{7,11,710},{
-138,11,645},{133,11,649},{6,11,276},{7,11,282},{7,11,879},{7,11,924},{8,11,459},
-{9,11,599},{9,11,754},{11,11,574},{12,11,128},{12,11,494},{13,11,52},{13,11,301}
-,{15,11,30},{143,11,132},{6,0,647},{134,0,1095},{5,10,9},{7,10,297},{7,10,966},{
-140,10,306},{132,11,200},{134,0,1334},{5,10,146},{6,10,411},{138,10,721},{6,0,
-209},{6,0,1141},{6,0,1288},{8,0,468},{9,0,210},{11,0,36},{12,0,28},{12,0,630},{
-13,0,21},{13,0,349},{14,0,7},{145,0,13},{6,10,177},{135,10,467},{4,0,342},{135,0
-,1179},{10,11,454},{140,11,324},{4,0,928},{133,0,910},{7,0,1838},{6,11,225},{137
-,11,211},{16,0,101},{20,0,115},{20,0,118},{148,0,122},{4,0,496},{135,0,856},{4,0
-,318},{11,0,654},{7,11,718},{139,11,102},{8,11,58},{9,11,724},{11,11,809},{13,11
-,113},{145,11,72},{5,10,200},{6,11,345},{135,11,1247},{8,11,767},{8,11,803},{9,
-11,301},{137,11,903},{7,0,915},{8,0,247},{19,0,0},{7,11,1949},{136,11,674},{4,0,
-202},{5,0,382},{6,0,454},{7,0,936},{7,0,1803},{8,0,758},{9,0,375},{9,0,895},{10,
-0,743},{10,0,792},{11,0,978},{11,0,1012},{142,0,109},{7,0,1150},{7,0,1425},{7,0,
-1453},{140,0,513},{134,11,259},{138,0,791},{11,0,821},{12,0,110},{12,0,153},{18,
-0,41},{150,0,19},{134,10,481},{132,0,796},{6,0,445},{9,0,909},{136,11,254},{10,0
-,776},{13,0,345},{142,0,425},{4,10,84},{7,10,1482},{10,10,76},{138,10,142},{135,
-11,742},{6,0,578},{133,10,1015},{6,0,1387},{4,10,315},{5,10,507},{135,10,1370},{
-4,0,438},{133,0,555},{136,0,766},{133,11,248},{134,10,1722},{4,11,116},{5,11,95}
-,{5,11,445},{7,11,1688},{8,11,29},{9,11,272},{11,11,509},{139,11,915},{135,0,541
-},{133,11,543},{8,10,222},{8,10,476},{9,10,238},{11,10,516},{11,10,575},{15,10,
-109},{146,10,100},{6,0,880},{134,0,1191},{5,11,181},{136,11,41},{134,0,1506},{
-132,11,681},{7,11,25},{8,11,202},{138,11,536},{139,0,983},{137,0,768},{132,0,584
-},{9,11,423},{140,11,89},{8,11,113},{9,11,877},{10,11,554},{11,11,83},{12,11,136
-},{147,11,109},{7,10,706},{7,10,1058},{138,10,538},{133,11,976},{4,11,206},{135,
-11,746},{136,11,526},{140,0,737},{11,10,92},{11,10,196},{11,10,409},{11,10,450},
-{11,10,666},{11,10,777},{12,10,262},{13,10,385},{13,10,393},{15,10,115},{16,10,
-45},{145,10,82},{4,0,226},{4,0,326},{7,0,1770},{4,11,319},{5,11,699},{138,11,673
-},{6,10,40},{135,10,1781},{5,0,426},{8,0,30},{9,0,2},{11,0,549},{147,0,122},{6,0
-,1161},{134,0,1329},{138,10,97},{6,10,423},{7,10,665},{135,10,1210},{7,11,13},{8
-,11,226},{10,11,537},{11,11,570},{11,11,605},{11,11,799},{11,11,804},{12,11,85},
-{12,11,516},{12,11,623},{13,11,112},{13,11,361},{14,11,77},{14,11,78},{17,11,28}
-,{147,11,110},{132,11,769},{132,11,551},{132,11,728},{147,0,117},{9,11,57},{9,11
-,459},{10,11,425},{11,11,119},{12,11,184},{12,11,371},{13,11,358},{145,11,51},{5
-,11,188},{5,11,814},{8,11,10},{9,11,421},{9,11,729},{10,11,609},{139,11,689},{
-134,11,624},{135,11,298},{135,0,462},{4,0,345},{139,10,624},{136,10,574},{4,0,
-385},{7,0,265},{135,0,587},{6,0,808},{132,11,528},{133,0,398},{132,10,354},{4,0,
-347},{5,0,423},{5,0,996},{135,0,1329},{135,10,1558},{7,0,1259},{9,0,125},{139,0,
-65},{5,0,136},{6,0,136},{136,0,644},{5,11,104},{6,11,173},{135,11,1631},{135,0,
-469},{133,10,830},{4,0,278},{5,0,465},{135,0,1367},{7,11,810},{8,11,138},{8,11,
-342},{9,11,84},{10,11,193},{11,11,883},{140,11,359},{5,10,496},{135,10,203},{4,0
-,433},{133,0,719},{6,11,95},{134,10,547},{5,10,88},{137,10,239},{6,11,406},{10,
-11,409},{10,11,447},{11,11,44},{140,11,100},{134,0,1423},{7,10,650},{135,10,1310
-},{134,0,749},{135,11,1243},{135,0,1363},{6,0,381},{7,0,645},{7,0,694},{8,0,546}
-,{7,10,1076},{9,10,80},{11,10,78},{11,10,421},{11,10,534},{140,10,545},{134,11,
-1636},{135,11,1344},{12,0,277},{7,10,274},{11,10,479},{139,10,507},{6,0,705},{6,
-0,783},{6,0,1275},{6,0,1481},{4,11,282},{7,11,1034},{11,11,398},{11,11,634},{12,
-11,1},{12,11,79},{12,11,544},{14,11,237},{17,11,10},{146,11,20},{134,0,453},{4,0
-,555},{8,0,536},{10,0,288},{11,0,1005},{4,10,497},{135,10,1584},{5,11,118},{5,11
-,499},{6,11,476},{7,11,600},{7,11,888},{135,11,1096},{138,0,987},{7,0,1107},{7,
-10,261},{7,10,1115},{7,10,1354},{7,10,1588},{7,10,1705},{7,10,1902},{9,10,465},{
-10,10,248},{10,10,349},{10,10,647},{11,10,527},{11,10,660},{11,10,669},{12,10,
-529},{141,10,305},{7,11,296},{7,11,596},{8,11,560},{8,11,586},{9,11,612},{11,11,
-100},{11,11,304},{12,11,46},{13,11,89},{14,11,112},{145,11,122},{9,0,370},{138,0
-,90},{136,10,13},{132,0,860},{7,10,642},{8,10,250},{11,10,123},{11,10,137},{13,
-10,48},{142,10,95},{135,10,1429},{137,11,321},{132,0,257},{135,0,2031},{7,0,1768
-},{7,11,1599},{7,11,1723},{8,11,79},{8,11,106},{8,11,190},{8,11,302},{8,11,383},
-{9,11,119},{9,11,233},{9,11,298},{9,11,419},{9,11,471},{10,11,181},{10,11,406},{
-11,11,57},{11,11,85},{11,11,120},{11,11,177},{11,11,296},{11,11,382},{11,11,454}
-,{11,11,758},{11,11,999},{12,11,27},{12,11,98},{12,11,131},{12,11,245},{12,11,
-312},{12,11,446},{12,11,454},{13,11,25},{13,11,98},{13,11,426},{13,11,508},{14,
-11,6},{14,11,163},{14,11,272},{14,11,277},{14,11,370},{15,11,95},{15,11,138},{15
-,11,167},{17,11,18},{17,11,38},{20,11,96},{149,11,32},{5,11,722},{134,11,1759},{
-145,11,16},{6,0,1071},{134,0,1561},{10,10,545},{140,10,301},{6,0,83},{6,0,1733},
-{135,0,1389},{4,0,835},{135,0,1818},{133,11,258},{4,10,904},{133,10,794},{134,0,
-2006},{5,11,30},{7,11,495},{8,11,134},{9,11,788},{140,11,438},{135,11,2004},{137
-,0,696},{5,11,50},{6,11,439},{7,11,780},{135,11,1040},{7,11,772},{7,11,1104},{7,
-11,1647},{11,11,269},{11,11,539},{11,11,607},{11,11,627},{11,11,706},{11,11,975}
-,{12,11,248},{12,11,311},{12,11,434},{12,11,600},{12,11,622},{13,11,297},{13,11,
-367},{13,11,485},{14,11,69},{14,11,409},{143,11,108},{5,11,1},{6,11,81},{138,11,
-520},{7,0,1718},{9,0,95},{9,0,274},{10,0,279},{10,0,317},{10,0,420},{11,0,303},{
-11,0,808},{12,0,134},{12,0,367},{13,0,149},{13,0,347},{14,0,349},{14,0,406},{18,
-0,22},{18,0,89},{18,0,122},{147,0,47},{5,11,482},{8,11,98},{9,11,172},{10,11,222
-},{10,11,700},{10,11,822},{11,11,302},{11,11,778},{12,11,50},{12,11,127},{12,11,
-396},{13,11,62},{13,11,328},{14,11,122},{147,11,72},{7,10,386},{138,10,713},{6,
-10,7},{6,10,35},{7,10,147},{7,10,1069},{7,10,1568},{7,10,1575},{7,10,1917},{8,10
-,43},{8,10,208},{9,10,128},{9,10,866},{10,10,20},{11,10,981},{147,10,33},{133,0,
-26},{132,0,550},{5,11,2},{7,11,1494},{136,11,589},{6,11,512},{7,11,797},{8,11,
-253},{9,11,77},{10,11,1},{10,11,129},{10,11,225},{11,11,118},{11,11,226},{11,11,
-251},{11,11,430},{11,11,701},{11,11,974},{11,11,982},{12,11,64},{12,11,260},{12,
-11,488},{140,11,690},{7,10,893},{141,10,424},{134,0,901},{136,0,822},{4,0,902},{
-5,0,809},{134,0,122},{6,0,807},{134,0,1366},{7,0,262},{5,11,748},{134,11,553},{
-133,0,620},{4,0,34},{5,0,574},{7,0,279},{7,0,1624},{136,0,601},{9,0,170},{6,10,
-322},{9,10,552},{11,10,274},{13,10,209},{13,10,499},{14,10,85},{15,10,126},{145,
-10,70},{132,0,537},{4,11,12},{7,11,420},{7,11,522},{7,11,809},{8,11,797},{141,11
-,88},{133,0,332},{8,10,83},{8,10,742},{8,10,817},{9,10,28},{9,10,29},{9,10,885},
-{10,10,387},{11,10,633},{11,10,740},{13,10,235},{13,10,254},{15,10,143},{143,10,
-146},{6,0,1909},{9,0,964},{12,0,822},{12,0,854},{12,0,865},{12,0,910},{12,0,938}
-,{15,0,169},{15,0,208},{15,0,211},{18,0,205},{18,0,206},{18,0,220},{18,0,223},{
-152,0,24},{140,10,49},{5,11,528},{135,11,1580},{6,0,261},{8,0,182},{139,0,943},{
-134,0,1721},{4,0,933},{133,0,880},{136,11,321},{5,11,266},{9,11,290},{9,11,364},
-{10,11,293},{11,11,606},{142,11,45},{6,0,1609},{4,11,50},{6,11,510},{6,11,594},{
-9,11,121},{10,11,49},{10,11,412},{139,11,834},{7,0,895},{136,11,748},{132,11,466
-},{4,10,110},{10,10,415},{10,10,597},{142,10,206},{133,0,812},{135,11,281},{6,0,
-1890},{6,0,1902},{6,0,1916},{9,0,929},{9,0,942},{9,0,975},{9,0,984},{9,0,986},{9
-,0,1011},{9,0,1019},{12,0,804},{12,0,851},{12,0,867},{12,0,916},{12,0,923},{15,0
-,194},{15,0,204},{15,0,210},{15,0,222},{15,0,223},{15,0,229},{15,0,250},{18,0,
-179},{18,0,186},{18,0,192},{7,10,205},{135,10,2000},{132,11,667},{135,0,778},{4,
-0,137},{7,0,1178},{135,0,1520},{134,0,1314},{4,11,242},{134,11,333},{6,0,1661},{
-7,0,1975},{7,0,2009},{135,0,2011},{134,0,1591},{4,10,283},{135,10,1194},{11,0,
-820},{150,0,51},{4,11,39},{5,11,36},{7,11,1843},{8,11,407},{11,11,144},{140,11,
-523},{134,10,1720},{4,11,510},{7,11,29},{7,11,66},{7,11,1980},{10,11,487},{10,11
-,809},{146,11,9},{5,0,89},{7,0,1915},{9,0,185},{9,0,235},{10,0,64},{10,0,270},{
-10,0,403},{10,0,469},{10,0,529},{10,0,590},{11,0,140},{11,0,860},{13,0,1},{13,0,
-422},{14,0,341},{14,0,364},{17,0,93},{18,0,113},{19,0,97},{147,0,113},{133,0,695
-},{6,0,987},{134,0,1160},{5,0,6},{6,0,183},{7,0,680},{7,0,978},{7,0,1013},{7,0,
-1055},{12,0,230},{13,0,172},{146,0,29},{134,11,570},{132,11,787},{134,11,518},{6
-,0,29},{139,0,63},{132,11,516},{136,11,821},{132,0,311},{134,0,1740},{7,0,170},{
-8,0,90},{8,0,177},{8,0,415},{11,0,714},{14,0,281},{136,10,735},{134,0,1961},{135
-,11,1405},{4,11,10},{7,11,917},{139,11,786},{5,10,132},{9,10,486},{9,10,715},{10
-,10,458},{11,10,373},{11,10,668},{11,10,795},{11,10,897},{12,10,272},{12,10,424}
-,{12,10,539},{12,10,558},{14,10,245},{14,10,263},{14,10,264},{14,10,393},{142,10
-,403},{11,0,91},{13,0,129},{15,0,101},{145,0,125},{135,0,1132},{4,0,494},{6,0,74
-},{7,0,44},{7,0,407},{12,0,17},{15,0,5},{148,0,11},{133,10,379},{5,0,270},{5,11,
-684},{6,10,89},{6,10,400},{7,10,1569},{7,10,1623},{7,10,1850},{8,10,218},{8,10,
-422},{9,10,570},{138,10,626},{4,0,276},{133,0,296},{6,0,1523},{134,11,27},{6,10,
-387},{7,10,882},{141,10,111},{6,10,224},{7,10,877},{137,10,647},{135,10,790},{4,
-0,7},{5,0,90},{5,0,158},{6,0,542},{7,0,221},{7,0,1574},{9,0,490},{10,0,540},{11,
-0,443},{139,0,757},{7,0,588},{9,0,175},{138,0,530},{135,10,394},{142,11,23},{134
-,0,786},{135,0,580},{7,0,88},{136,0,627},{5,0,872},{6,0,57},{7,0,471},{9,0,447},
-{137,0,454},{6,11,342},{6,11,496},{8,11,275},{137,11,206},{4,11,909},{133,11,940
-},{6,0,735},{132,11,891},{8,0,845},{8,0,916},{135,10,1409},{5,0,31},{134,0,614},
-{11,0,458},{12,0,15},{140,0,432},{8,0,330},{140,0,477},{4,0,530},{5,0,521},{7,0,
-1200},{10,0,460},{132,11,687},{6,0,424},{135,0,1866},{9,0,569},{12,0,12},{12,0,
-81},{12,0,319},{13,0,69},{14,0,259},{16,0,87},{17,0,1},{17,0,21},{17,0,24},{18,0
-,15},{18,0,56},{18,0,59},{18,0,127},{18,0,154},{19,0,19},{148,0,31},{7,0,1302},{
-136,10,38},{134,11,253},{5,10,261},{7,10,78},{7,10,199},{8,10,815},{9,10,126},{
-138,10,342},{5,0,595},{135,0,1863},{6,11,41},{141,11,160},{5,0,13},{134,0,142},{
-6,0,97},{7,0,116},{8,0,322},{8,0,755},{9,0,548},{10,0,714},{11,0,884},{13,0,324}
-,{7,11,1304},{138,11,477},{132,10,628},{134,11,1718},{7,10,266},{136,10,804},{
-135,10,208},{7,0,1021},{6,10,79},{135,10,1519},{7,0,1472},{135,0,1554},{6,11,362
-},{146,11,51},{7,0,1071},{7,0,1541},{7,0,1767},{7,0,1806},{11,0,162},{11,0,242},
-{11,0,452},{12,0,605},{15,0,26},{144,0,44},{136,10,741},{133,11,115},{145,0,115}
-,{134,10,376},{6,0,1406},{134,0,1543},{5,11,193},{12,11,178},{13,11,130},{145,11
-,84},{135,0,1111},{8,0,1},{9,0,650},{10,0,326},{5,11,705},{137,11,606},{5,0,488}
-,{6,0,527},{7,0,489},{7,0,1636},{8,0,121},{8,0,144},{8,0,359},{9,0,193},{9,0,241
-},{9,0,336},{9,0,882},{11,0,266},{11,0,372},{11,0,944},{12,0,401},{140,0,641},{
-135,11,174},{6,0,267},{7,10,244},{7,10,632},{7,10,1609},{8,10,178},{8,10,638},{
-141,10,58},{134,0,1983},{134,0,1155},{134,0,1575},{134,0,1438},{9,0,31},{10,0,
-244},{10,0,699},{12,0,149},{141,0,497},{133,0,377},{4,11,122},{5,11,796},{5,11,
-952},{6,11,1660},{6,11,1671},{8,11,567},{9,11,687},{9,11,742},{10,11,686},{11,11
-,356},{11,11,682},{140,11,281},{145,0,101},{11,11,0},{144,11,78},{5,11,179},{5,
-10,791},{7,11,1095},{135,11,1213},{8,11,372},{9,11,122},{138,11,175},{7,10,686},
-{8,10,33},{8,10,238},{10,10,616},{11,10,467},{11,10,881},{13,10,217},{13,10,253}
-,{142,10,268},{9,0,476},{4,11,66},{7,11,722},{135,11,904},{7,11,352},{137,11,684
-},{135,0,2023},{135,0,1836},{132,10,447},{5,0,843},{144,0,35},{137,11,779},{141,
-11,35},{4,10,128},{5,10,415},{6,10,462},{7,10,294},{7,10,578},{10,10,710},{139,
-10,86},{132,0,554},{133,0,536},{136,10,587},{5,0,207},{9,0,79},{11,0,625},{145,0
-,7},{7,0,1371},{6,10,427},{138,10,692},{4,0,424},{4,10,195},{135,10,802},{8,0,
-785},{133,11,564},{135,0,336},{4,0,896},{6,0,1777},{134,11,556},{137,11,103},{
-134,10,1683},{7,11,544},{8,11,719},{138,11,61},{138,10,472},{4,11,5},{5,11,498},
-{136,11,637},{7,0,750},{9,0,223},{11,0,27},{11,0,466},{12,0,624},{14,0,265},{146
-,0,61},{12,0,238},{18,0,155},{12,11,238},{146,11,155},{151,10,28},{133,11,927},{
-12,0,383},{5,10,3},{8,10,578},{9,10,118},{10,10,705},{141,10,279},{4,11,893},{5,
-11,780},{133,11,893},{4,0,603},{133,0,661},{4,0,11},{6,0,128},{7,0,231},{7,0,
-1533},{10,0,725},{5,10,229},{5,11,238},{135,11,1350},{8,10,102},{10,10,578},{10,
-10,672},{12,10,496},{13,10,408},{14,10,121},{145,10,106},{132,0,476},{134,0,1552
-},{134,11,1729},{8,10,115},{8,10,350},{9,10,489},{10,10,128},{11,10,306},{12,10,
-373},{14,10,30},{17,10,79},{19,10,80},{150,10,55},{135,0,1807},{4,0,680},{4,11,
-60},{7,11,760},{7,11,1800},{8,11,314},{9,11,700},{139,11,487},{4,10,230},{5,10,
-702},{148,11,94},{132,11,228},{139,0,435},{9,0,20},{10,0,324},{10,0,807},{139,0,
-488},{6,10,1728},{136,11,419},{4,10,484},{18,10,26},{19,10,42},{20,10,43},{21,10
-,0},{23,10,27},{152,10,14},{135,0,1431},{133,11,828},{5,0,112},{6,0,103},{6,0,
-150},{7,0,1303},{9,0,292},{10,0,481},{20,0,13},{7,11,176},{7,11,178},{7,11,1110}
-,{10,11,481},{148,11,13},{138,0,356},{4,11,51},{5,11,39},{6,11,4},{7,11,591},{7,
-11,849},{7,11,951},{7,11,1129},{7,11,1613},{7,11,1760},{7,11,1988},{9,11,434},{
-10,11,754},{11,11,25},{11,11,37},{139,11,414},{6,0,1963},{134,0,2000},{132,10,
-633},{6,0,1244},{133,11,902},{135,11,928},{140,0,18},{138,0,204},{135,11,1173},{
-134,0,867},{4,0,708},{8,0,15},{9,0,50},{9,0,386},{11,0,18},{11,0,529},{140,0,228
-},{134,11,270},{4,0,563},{7,0,109},{7,0,592},{7,0,637},{7,0,770},{8,0,463},{9,0,
-60},{9,0,335},{9,0,904},{10,0,73},{11,0,434},{12,0,585},{13,0,331},{18,0,110},{
-148,0,60},{132,0,502},{14,11,359},{19,11,52},{148,11,47},{6,11,377},{7,11,1025},
-{9,11,613},{145,11,104},{6,0,347},{10,0,161},{5,10,70},{5,10,622},{6,10,334},{7,
-10,1032},{9,10,171},{11,10,26},{11,10,213},{11,10,637},{11,10,707},{12,10,202},{
-12,10,380},{13,10,226},{13,10,355},{14,10,222},{145,10,42},{132,11,416},{4,0,33}
-,{5,0,102},{6,0,284},{7,0,1079},{7,0,1423},{7,0,1702},{8,0,470},{9,0,554},{9,0,
-723},{11,0,333},{142,11,372},{5,11,152},{5,11,197},{7,11,340},{7,11,867},{10,11,
-548},{10,11,581},{11,11,6},{12,11,3},{12,11,19},{14,11,110},{142,11,289},{7,0,
-246},{135,0,840},{6,0,10},{8,0,571},{9,0,739},{143,0,91},{6,0,465},{7,0,1465},{4
-,10,23},{4,10,141},{5,10,313},{5,10,1014},{6,10,50},{7,10,142},{7,10,559},{8,10,
-640},{9,10,460},{9,10,783},{11,10,741},{12,10,183},{141,10,488},{133,0,626},{136
-,0,614},{138,0,237},{7,11,34},{7,11,190},{8,11,28},{8,11,141},{8,11,444},{8,11,
-811},{9,11,468},{11,11,334},{12,11,24},{12,11,386},{140,11,576},{133,11,757},{5,
-0,18},{6,0,526},{13,0,24},{13,0,110},{19,0,5},{147,0,44},{6,0,506},{134,11,506},
-{135,11,1553},{4,0,309},{5,0,462},{7,0,970},{7,0,1097},{22,0,30},{22,0,33},{7,11
-,1385},{11,11,582},{11,11,650},{11,11,901},{11,11,949},{12,11,232},{12,11,236},{
-13,11,413},{13,11,501},{146,11,116},{9,0,140},{5,10,222},{138,10,534},{6,0,1056}
-,{137,10,906},{134,0,1704},{138,10,503},{134,0,1036},{5,10,154},{7,10,1491},{10,
-10,379},{138,10,485},{4,11,383},{133,10,716},{134,0,1315},{5,0,86},{7,0,743},{9,
-0,85},{10,0,281},{10,0,432},{11,0,825},{12,0,251},{13,0,118},{142,0,378},{8,0,
-264},{4,10,91},{5,10,388},{5,10,845},{6,10,206},{6,10,252},{6,10,365},{7,10,136}
-,{7,10,531},{136,10,621},{5,0,524},{133,0,744},{5,11,277},{141,11,247},{132,11,
-435},{10,0,107},{140,0,436},{132,0,927},{10,0,123},{12,0,670},{146,0,94},{7,0,
-1149},{9,0,156},{138,0,957},{5,11,265},{6,11,212},{135,11,28},{133,0,778},{133,0
-,502},{8,0,196},{10,0,283},{139,0,406},{135,10,576},{136,11,535},{134,0,1312},{5
-,10,771},{5,10,863},{5,10,898},{6,10,1632},{6,10,1644},{134,10,1780},{5,0,855},{
-5,10,331},{135,11,1487},{132,11,702},{5,11,808},{135,11,2045},{7,0,1400},{9,0,
-446},{138,0,45},{140,10,632},{132,0,1003},{5,11,166},{8,11,739},{140,11,511},{5,
-10,107},{7,10,201},{136,10,518},{6,10,446},{135,10,1817},{134,0,1532},{134,0,
-1097},{4,11,119},{5,11,170},{5,11,447},{7,11,1708},{7,11,1889},{9,11,357},{9,11,
-719},{12,11,486},{140,11,596},{9,10,851},{141,10,510},{7,0,612},{8,0,545},{8,0,
-568},{8,0,642},{9,0,717},{10,0,541},{10,0,763},{11,0,449},{12,0,489},{13,0,153},
-{13,0,296},{14,0,138},{14,0,392},{15,0,50},{16,0,6},{16,0,12},{20,0,9},{132,10,
-504},{4,11,450},{135,11,1158},{11,0,54},{13,0,173},{13,0,294},{5,10,883},{5,10,
-975},{8,10,392},{148,10,7},{13,0,455},{15,0,99},{15,0,129},{144,0,68},{135,0,172
-},{132,11,754},{5,10,922},{134,10,1707},{134,0,1029},{17,11,39},{148,11,36},{4,0
-,568},{5,10,993},{7,10,515},{137,10,91},{132,0,732},{10,0,617},{138,11,617},{134
-,0,974},{7,0,989},{10,0,377},{12,0,363},{13,0,68},{13,0,94},{14,0,108},{142,0,
-306},{136,0,733},{132,0,428},{7,0,1789},{135,11,1062},{7,0,2015},{140,0,665},{
-135,10,1433},{5,0,287},{7,10,921},{8,10,580},{8,10,593},{8,10,630},{138,10,28},{
-138,0,806},{4,10,911},{5,10,867},{5,10,1013},{7,10,2034},{8,10,798},{136,10,813}
-,{134,0,1539},{8,11,523},{150,11,34},{135,11,740},{7,11,238},{7,11,2033},{8,11,
-120},{8,11,188},{8,11,659},{9,11,598},{10,11,466},{12,11,342},{12,11,588},{13,11
-,503},{14,11,246},{143,11,92},{7,0,1563},{141,0,182},{5,10,135},{6,10,519},{7,10
-,1722},{10,10,271},{11,10,261},{145,10,54},{14,10,338},{148,10,81},{7,0,484},{4,
-10,300},{133,10,436},{145,11,114},{6,0,1623},{134,0,1681},{133,11,640},{4,11,201
-},{7,11,1744},{8,11,602},{11,11,247},{11,11,826},{145,11,65},{8,11,164},{146,11,
-62},{6,0,1833},{6,0,1861},{136,0,878},{134,0,1569},{8,10,357},{10,10,745},{14,10
-,426},{17,10,94},{147,10,57},{12,0,93},{12,0,501},{13,0,362},{14,0,151},{15,0,40
-},{15,0,59},{16,0,46},{17,0,25},{18,0,14},{18,0,134},{19,0,25},{19,0,69},{20,0,
-16},{20,0,19},{20,0,66},{21,0,23},{21,0,25},{150,0,42},{6,0,1748},{8,0,715},{9,0
-,802},{10,0,46},{10,0,819},{13,0,308},{14,0,351},{14,0,363},{146,0,67},{132,0,
-994},{4,0,63},{133,0,347},{132,0,591},{133,0,749},{7,11,1577},{10,11,304},{10,11
-,549},{11,11,424},{12,11,365},{13,11,220},{13,11,240},{142,11,33},{133,0,366},{7
-,0,557},{12,0,547},{14,0,86},{133,10,387},{135,0,1747},{132,11,907},{5,11,100},{
-10,11,329},{12,11,416},{149,11,29},{4,10,6},{5,10,708},{136,10,75},{7,10,1351},{
-9,10,581},{10,10,639},{11,10,453},{140,10,584},{7,0,89},{132,10,303},{138,10,772
-},{132,11,176},{5,11,636},{5,11,998},{8,11,26},{137,11,358},{7,11,9},{7,11,1508}
-,{9,11,317},{10,11,210},{10,11,292},{10,11,533},{11,11,555},{12,11,526},{12,11,
-607},{13,11,263},{13,11,459},{142,11,271},{134,0,1463},{6,0,772},{6,0,1137},{139
-,11,595},{7,0,977},{139,11,66},{138,0,893},{20,0,48},{148,11,48},{5,0,824},{133,
-0,941},{134,11,295},{7,0,1543},{7,0,1785},{10,0,690},{4,10,106},{139,10,717},{7,
-0,440},{8,0,230},{139,0,106},{5,10,890},{133,10,988},{6,10,626},{142,10,431},{10
-,11,127},{141,11,27},{17,0,32},{10,10,706},{150,10,44},{132,0,216},{137,0,332},{
-4,10,698},{136,11,119},{139,11,267},{138,10,17},{11,11,526},{11,11,939},{141,11,
-290},{7,11,1167},{11,11,934},{13,11,391},{145,11,76},{139,11,39},{134,10,84},{4,
-0,914},{5,0,800},{133,0,852},{10,0,416},{141,0,115},{7,0,564},{142,0,168},{4,0,
-918},{133,0,876},{134,0,1764},{152,0,3},{4,0,92},{5,0,274},{7,11,126},{136,11,84
-},{140,10,498},{136,11,790},{8,0,501},{5,10,986},{6,10,130},{7,10,1582},{8,10,
-458},{10,10,101},{10,10,318},{138,10,823},{6,11,64},{12,11,377},{141,11,309},{5,
-0,743},{138,0,851},{4,0,49},{7,0,280},{135,0,1633},{134,0,879},{136,0,47},{7,10,
-1644},{137,10,129},{132,0,865},{134,0,1202},{9,11,34},{139,11,484},{135,10,997},
-{5,0,272},{5,0,908},{5,0,942},{8,0,197},{9,0,47},{11,0,538},{139,0,742},{6,11,
-1700},{7,11,26},{7,11,293},{7,11,382},{7,11,1026},{7,11,1087},{7,11,2027},{8,11,
-24},{8,11,114},{8,11,252},{8,11,727},{8,11,729},{9,11,30},{9,11,199},{9,11,231},
-{9,11,251},{9,11,334},{9,11,361},{9,11,488},{9,11,712},{10,11,55},{10,11,60},{10
-,11,232},{10,11,332},{10,11,384},{10,11,396},{10,11,504},{10,11,542},{10,11,652}
-,{11,11,20},{11,11,48},{11,11,207},{11,11,291},{11,11,298},{11,11,342},{11,11,
-365},{11,11,394},{11,11,620},{11,11,705},{11,11,1017},{12,11,123},{12,11,340},{
-12,11,406},{12,11,643},{13,11,61},{13,11,269},{13,11,311},{13,11,319},{13,11,486
-},{14,11,234},{15,11,62},{15,11,85},{16,11,71},{18,11,119},{148,11,105},{6,0,
-1455},{150,11,37},{135,10,1927},{135,0,1911},{137,0,891},{7,10,1756},{137,10,98}
-,{7,10,1046},{139,10,160},{132,0,761},{6,11,379},{7,11,270},{7,11,1116},{8,11,
-176},{8,11,183},{9,11,432},{9,11,661},{12,11,247},{12,11,617},{146,11,125},{6,10
-,45},{7,10,433},{8,10,129},{9,10,21},{10,10,392},{11,10,79},{12,10,499},{13,10,
-199},{141,10,451},{4,0,407},{5,11,792},{133,11,900},{132,0,560},{135,0,183},{13,
-0,490},{7,10,558},{136,10,353},{4,0,475},{6,0,731},{11,0,35},{13,0,71},{13,0,177
-},{14,0,422},{133,10,785},{8,10,81},{9,10,189},{9,10,201},{11,10,478},{11,10,712
-},{141,10,338},{4,0,418},{4,0,819},{133,10,353},{151,10,26},{4,11,901},{133,11,
-776},{132,0,575},{7,0,818},{16,0,92},{17,0,14},{17,0,45},{18,0,75},{148,0,18},{6
-,0,222},{7,0,636},{7,0,1620},{8,0,409},{9,0,693},{139,0,77},{6,10,25},{7,10,855}
-,{7,10,1258},{144,10,32},{6,0,1880},{6,0,1887},{6,0,1918},{6,0,1924},{9,0,967},{
-9,0,995},{9,0,1015},{12,0,826},{12,0,849},{12,0,857},{12,0,860},{12,0,886},{12,0
-,932},{18,0,228},{18,0,231},{146,0,240},{134,0,633},{134,0,1308},{4,11,37},{5,11
-,334},{135,11,1253},{10,0,86},{4,10,4},{7,10,1118},{7,10,1320},{7,10,1706},{8,10
-,277},{9,10,622},{11,10,724},{12,10,350},{12,10,397},{13,10,28},{13,10,159},{15,
-10,89},{18,10,5},{19,10,9},{20,10,34},{150,10,47},{132,11,508},{137,11,448},{12,
-11,107},{146,11,31},{132,0,817},{134,0,663},{133,0,882},{134,0,914},{132,11,540}
-,{132,11,533},{136,11,608},{8,0,885},{138,0,865},{132,0,426},{6,0,58},{7,0,745},
-{7,0,1969},{8,0,399},{8,0,675},{9,0,479},{9,0,731},{10,0,330},{10,0,593},{10,0,
-817},{11,0,32},{11,0,133},{11,0,221},{145,0,68},{134,10,255},{7,0,102},{137,0,
-538},{137,10,216},{7,11,253},{136,11,549},{135,11,912},{9,10,183},{139,10,286},{
-11,10,956},{151,10,3},{8,11,527},{18,11,60},{147,11,24},{4,10,536},{7,10,1141},{
-10,10,723},{139,10,371},{133,11,920},{7,0,876},{135,10,285},{135,10,560},{132,10
-,690},{142,11,126},{11,10,33},{12,10,571},{149,10,1},{133,0,566},{9,0,139},{10,0
-,399},{11,0,469},{12,0,634},{13,0,223},{132,11,483},{6,0,48},{135,0,63},{18,0,12
-},{7,10,1862},{12,10,491},{12,10,520},{13,10,383},{142,10,244},{135,11,1665},{
-132,11,448},{9,11,495},{146,11,104},{6,0,114},{7,0,1224},{7,0,1556},{136,0,3},{4
-,10,190},{133,10,554},{8,0,576},{9,0,267},{133,10,1001},{133,10,446},{133,0,933}
-,{139,11,1009},{8,11,653},{13,11,93},{147,11,14},{6,0,692},{6,0,821},{134,0,1077
-},{5,11,172},{135,11,801},{138,0,752},{4,0,375},{134,0,638},{134,0,1011},{140,11
-,540},{9,0,96},{133,11,260},{139,11,587},{135,10,1231},{12,0,30},{13,0,148},{14,
-0,87},{14,0,182},{16,0,42},{20,0,70},{132,10,304},{6,0,1398},{7,0,56},{7,0,1989}
-,{8,0,337},{8,0,738},{9,0,600},{12,0,37},{13,0,447},{142,0,92},{138,0,666},{5,0,
-394},{7,0,487},{136,0,246},{9,0,437},{6,10,53},{6,10,199},{7,10,1408},{8,10,32},
-{8,10,93},{10,10,397},{10,10,629},{11,10,593},{11,10,763},{13,10,326},{145,10,35
-},{134,10,105},{9,0,320},{10,0,506},{138,10,794},{7,11,57},{8,11,167},{8,11,375}
-,{9,11,82},{9,11,561},{10,11,620},{10,11,770},{11,10,704},{141,10,396},{6,0,1003
-},{5,10,114},{5,10,255},{141,10,285},{7,0,866},{135,0,1163},{133,11,531},{132,0,
-328},{7,10,2035},{8,10,19},{9,10,89},{138,10,831},{8,11,194},{136,11,756},{136,0
-,1000},{5,11,453},{134,11,441},{4,0,101},{5,0,833},{7,0,1171},{136,0,744},{133,0
-,726},{136,10,746},{138,0,176},{6,0,9},{6,0,397},{7,0,53},{7,0,1742},{10,0,632},
-{11,0,828},{140,0,146},{135,11,22},{145,11,64},{132,0,839},{11,0,417},{12,0,223}
-,{140,0,265},{4,11,102},{7,11,815},{7,11,1699},{139,11,964},{5,10,955},{136,10,
-814},{6,0,1931},{6,0,2007},{18,0,246},{146,0,247},{8,0,198},{11,0,29},{140,0,534
-},{135,0,1771},{6,0,846},{7,11,1010},{11,11,733},{11,11,759},{12,11,563},{13,11,
-34},{14,11,101},{18,11,45},{146,11,129},{4,0,186},{5,0,157},{8,0,168},{138,0,6},
-{132,11,899},{133,10,56},{148,10,100},{133,0,875},{5,0,773},{5,0,991},{6,0,1635}
-,{134,0,1788},{6,0,1274},{9,0,477},{141,0,78},{4,0,639},{7,0,111},{8,0,581},{12,
-0,177},{6,11,52},{9,11,104},{9,11,559},{10,10,4},{10,10,13},{11,10,638},{12,11,
-308},{19,11,87},{148,10,57},{132,11,604},{4,11,301},{133,10,738},{133,10,758},{
-134,0,1747},{7,11,1440},{11,11,854},{11,11,872},{11,11,921},{12,11,551},{13,11,
-472},{142,11,367},{7,0,1364},{7,0,1907},{141,0,158},{134,0,873},{4,0,404},{4,0,
-659},{7,0,552},{135,0,675},{135,10,1112},{139,10,328},{7,11,508},{137,10,133},{
-133,0,391},{5,10,110},{6,10,169},{6,10,1702},{7,10,400},{8,10,538},{9,10,184},{9
-,10,524},{140,10,218},{6,11,310},{7,11,1849},{8,11,72},{8,11,272},{8,11,431},{9,
-11,12},{9,11,351},{10,11,563},{10,11,630},{10,11,810},{11,11,367},{11,11,599},{
-11,11,686},{140,11,672},{5,0,540},{6,0,1697},{136,0,668},{132,0,883},{134,0,78},
-{12,0,628},{18,0,79},{6,10,133},{9,10,353},{139,10,993},{6,11,181},{7,11,537},{8
-,11,64},{9,11,127},{10,11,496},{12,11,510},{141,11,384},{6,10,93},{7,10,1422},{7
-,10,1851},{8,10,673},{9,10,529},{140,10,43},{137,10,371},{134,0,1460},{134,0,962
-},{4,11,244},{135,11,233},{9,10,25},{10,10,467},{138,10,559},{4,10,335},{135,10,
-942},{133,0,460},{135,11,334},{134,11,1650},{4,0,199},{139,0,34},{5,10,601},{8,
-10,39},{10,10,773},{11,10,84},{12,10,205},{142,10,1},{133,10,870},{134,0,388},{
-14,0,474},{148,0,120},{133,11,369},{139,0,271},{4,0,511},{9,0,333},{9,0,379},{10
-,0,602},{11,0,441},{11,0,723},{11,0,976},{12,0,357},{132,10,181},{134,0,608},{
-134,10,1652},{22,0,49},{137,11,338},{140,0,988},{134,0,617},{5,0,938},{136,0,707
-},{132,10,97},{5,10,147},{6,10,286},{7,10,1362},{141,10,176},{6,0,756},{134,0,
-1149},{133,11,896},{6,10,375},{7,10,169},{7,10,254},{136,10,780},{134,0,1583},{
-135,10,1447},{139,0,285},{7,11,1117},{8,11,393},{136,11,539},{135,0,344},{6,0,
-469},{7,0,1709},{138,0,515},{5,10,629},{135,10,1549},{5,11,4},{5,11,810},{6,11,
-13},{6,11,538},{6,11,1690},{6,11,1726},{7,11,499},{7,11,1819},{8,11,148},{8,11,
-696},{8,11,791},{12,11,125},{13,11,54},{143,11,9},{135,11,1268},{137,0,404},{132
-,0,500},{5,0,68},{134,0,383},{11,0,216},{139,0,340},{4,11,925},{5,11,803},{8,11,
-698},{138,11,828},{4,0,337},{6,0,353},{7,0,1934},{8,0,488},{137,0,429},{7,0,236}
-,{7,0,1795},{8,0,259},{9,0,135},{9,0,177},{9,0,860},{10,0,825},{11,0,115},{11,0,
-370},{11,0,405},{11,0,604},{12,0,10},{12,0,667},{12,0,669},{13,0,76},{14,0,310},
-{15,0,76},{15,0,147},{148,0,23},{4,0,15},{4,0,490},{5,0,22},{6,0,244},{7,0,40},{
-7,0,200},{7,0,906},{7,0,1199},{9,0,616},{10,0,716},{11,0,635},{11,0,801},{140,0,
-458},{12,0,756},{132,10,420},{134,0,1504},{6,0,757},{133,11,383},{6,0,1266},{135
-,0,1735},{5,0,598},{7,0,791},{8,0,108},{9,0,123},{7,10,1570},{140,10,542},{142,
-11,410},{9,11,660},{138,11,347}
-};
-
-#if defined(__cplusplus) || defined(c_plusplus)
-} /* extern "C" */
-#endif
-
-#endif /* BROTLI_ENC_STATIC_DICT_LUT_H_ */
diff --git a/BaseTools/Source/C/BrotliCompress/enc/utf8_util.h b/BaseTools/Source/C/BrotliCompress/enc/utf8_util.h
deleted file mode 100644
index 8d1cf5555974..000000000000
--- a/BaseTools/Source/C/BrotliCompress/enc/utf8_util.h
+++ /dev/null
@@ -1,32 +0,0 @@
-/* Copyright 2013 Google Inc. All Rights Reserved.
-
- Distributed under MIT license.
- See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
-*/
-
-/* Heuristics for deciding about the UTF8-ness of strings. */
-
-#ifndef BROTLI_ENC_UTF8_UTIL_H_
-#define BROTLI_ENC_UTF8_UTIL_H_
-
-#include "../common/platform.h"
-#include <brotli/types.h>
-
-#if defined(__cplusplus) || defined(c_plusplus)
-extern "C" {
-#endif
-
-static const double kMinUTF8Ratio = 0.75;
-
-/* Returns 1 if at least min_fraction of the bytes between pos and
- pos + length in the (data, mask) ring-buffer is UTF8-encoded, otherwise
- returns 0. */
-BROTLI_INTERNAL BROTLI_BOOL BrotliIsMostlyUTF8(
- const uint8_t* data, const size_t pos, const size_t mask,
- const size_t length, const double min_fraction);
-
-#if defined(__cplusplus) || defined(c_plusplus)
-} /* extern "C" */
-#endif
-
-#endif /* BROTLI_ENC_UTF8_UTIL_H_ */
diff --git a/BaseTools/Source/C/BrotliCompress/enc/write_bits.h b/BaseTools/Source/C/BrotliCompress/enc/write_bits.h
deleted file mode 100644
index 1269b2895077..000000000000
--- a/BaseTools/Source/C/BrotliCompress/enc/write_bits.h
+++ /dev/null
@@ -1,85 +0,0 @@
-/* Copyright 2010 Google Inc. All Rights Reserved.
-
- Distributed under MIT license.
- See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
-*/
-
-/* Write bits into a byte array. */
-
-#ifndef BROTLI_ENC_WRITE_BITS_H_
-#define BROTLI_ENC_WRITE_BITS_H_
-
-#include "../common/platform.h"
-#include <brotli/types.h>
-
-#if defined(__cplusplus) || defined(c_plusplus)
-extern "C" {
-#endif
-
-/*#define BIT_WRITER_DEBUG */
-
-/* This function writes bits into bytes in increasing addresses, and within
- a byte least-significant-bit first.
-
- The function can write up to 56 bits in one go with WriteBits
- Example: let's assume that 3 bits (Rs below) have been written already:
-
- BYTE-0 BYTE+1 BYTE+2
-
- 0000 0RRR 0000 0000 0000 0000
-
- Now, we could write 5 or less bits in MSB by just sifting by 3
- and OR'ing to BYTE-0.
-
- For n bits, we take the last 5 bits, OR that with high bits in BYTE-0,
- and locate the rest in BYTE+1, BYTE+2, etc. */
-static BROTLI_INLINE void BrotliWriteBits(size_t n_bits,
- uint64_t bits,
- size_t* BROTLI_RESTRICT pos,
- uint8_t* BROTLI_RESTRICT array) {
-#if defined(BROTLI_LITTLE_ENDIAN)
- /* This branch of the code can write up to 56 bits at a time,
- 7 bits are lost by being perhaps already in *p and at least
- 1 bit is needed to initialize the bit-stream ahead (i.e. if 7
- bits are in *p and we write 57 bits, then the next write will
- access a byte that was never initialized). */
- uint8_t* p = &array[*pos >> 3];
- uint64_t v = (uint64_t)(*p); /* Zero-extend 8 to 64 bits. */
- BROTLI_LOG(("WriteBits %2d 0x%08x%08x %10d\n", (int)n_bits,
- (uint32_t)(bits >> 32), (uint32_t)(bits & 0xFFFFFFFF),
- (int)*pos));
- BROTLI_DCHECK((bits >> n_bits) == 0);
- BROTLI_DCHECK(n_bits <= 56);
- v |= bits << (*pos & 7);
- BROTLI_UNALIGNED_STORE64LE(p, v); /* Set some bits. */
- *pos += n_bits;
-#else
- /* implicit & 0xFF is assumed for uint8_t arithmetics */
- uint8_t* array_pos = &array[*pos >> 3];
- const size_t bits_reserved_in_first_byte = (*pos & 7);
- size_t bits_left_to_write;
- bits <<= bits_reserved_in_first_byte;
- *array_pos++ |= (uint8_t)bits;
- for (bits_left_to_write = n_bits + bits_reserved_in_first_byte;
- bits_left_to_write >= 9;
- bits_left_to_write -= 8) {
- bits >>= 8;
- *array_pos++ = (uint8_t)bits;
- }
- *array_pos = 0;
- *pos += n_bits;
-#endif
-}
-
-static BROTLI_INLINE void BrotliWriteBitsPrepareStorage(
- size_t pos, uint8_t* array) {
- BROTLI_LOG(("WriteBitsPrepareStorage %10d\n", (int)pos));
- BROTLI_DCHECK((pos & 7) == 0);
- array[pos >> 3] = 0;
-}
-
-#if defined(__cplusplus) || defined(c_plusplus)
-} /* extern "C" */
-#endif
-
-#endif /* BROTLI_ENC_WRITE_BITS_H_ */
diff --git a/BaseTools/Source/C/BrotliCompress/include/brotli/decode.h b/BaseTools/Source/C/BrotliCompress/include/brotli/decode.h
deleted file mode 100644
index 2cd17250d9d8..000000000000
--- a/BaseTools/Source/C/BrotliCompress/include/brotli/decode.h
+++ /dev/null
@@ -1,344 +0,0 @@
-/* Copyright 2013 Google Inc. All Rights Reserved.
-
- Distributed under MIT license.
- See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
-*/
-
-/**
- * @file
- * API for Brotli decompression.
- */
-
-#ifndef BROTLI_DEC_DECODE_H_
-#define BROTLI_DEC_DECODE_H_
-
-#include <brotli/port.h>
-#include <brotli/types.h>
-
-#if defined(__cplusplus) || defined(c_plusplus)
-extern "C" {
-#endif
-
-/**
- * Opaque structure that holds decoder state.
- *
- * Allocated and initialized with ::BrotliDecoderCreateInstance.
- * Cleaned up and deallocated with ::BrotliDecoderDestroyInstance.
- */
-typedef struct BrotliDecoderStateStruct BrotliDecoderState;
-
-/**
- * Result type for ::BrotliDecoderDecompress and
- * ::BrotliDecoderDecompressStream functions.
- */
-typedef enum {
- /** Decoding error, e.g. corrupted input or memory allocation problem. */
- BROTLI_DECODER_RESULT_ERROR = 0,
- /** Decoding successfully completed. */
- BROTLI_DECODER_RESULT_SUCCESS = 1,
- /** Partially done; should be called again with more input. */
- BROTLI_DECODER_RESULT_NEEDS_MORE_INPUT = 2,
- /** Partially done; should be called again with more output. */
- BROTLI_DECODER_RESULT_NEEDS_MORE_OUTPUT = 3
-} BrotliDecoderResult;
-
-/**
- * Template that evaluates items of ::BrotliDecoderErrorCode.
- *
- * Example: @code {.cpp}
- * // Log Brotli error code.
- * switch (brotliDecoderErrorCode) {
- * #define CASE_(PREFIX, NAME, CODE) \
- * case BROTLI_DECODER ## PREFIX ## NAME: \
- * LOG(INFO) << "error code:" << #NAME; \
- * break;
- * #define NEWLINE_
- * BROTLI_DECODER_ERROR_CODES_LIST(CASE_, NEWLINE_)
- * #undef CASE_
- * #undef NEWLINE_
- * default: LOG(FATAL) << "unknown brotli error code";
- * }
- * @endcode
- */
-#define BROTLI_DECODER_ERROR_CODES_LIST(BROTLI_ERROR_CODE, SEPARATOR) \
- BROTLI_ERROR_CODE(_, NO_ERROR, 0) SEPARATOR \
- /* Same as BrotliDecoderResult values */ \
- BROTLI_ERROR_CODE(_, SUCCESS, 1) SEPARATOR \
- BROTLI_ERROR_CODE(_, NEEDS_MORE_INPUT, 2) SEPARATOR \
- BROTLI_ERROR_CODE(_, NEEDS_MORE_OUTPUT, 3) SEPARATOR \
- \
- /* Errors caused by invalid input */ \
- BROTLI_ERROR_CODE(_ERROR_FORMAT_, EXUBERANT_NIBBLE, -1) SEPARATOR \
- BROTLI_ERROR_CODE(_ERROR_FORMAT_, RESERVED, -2) SEPARATOR \
- BROTLI_ERROR_CODE(_ERROR_FORMAT_, EXUBERANT_META_NIBBLE, -3) SEPARATOR \
- BROTLI_ERROR_CODE(_ERROR_FORMAT_, SIMPLE_HUFFMAN_ALPHABET, -4) SEPARATOR \
- BROTLI_ERROR_CODE(_ERROR_FORMAT_, SIMPLE_HUFFMAN_SAME, -5) SEPARATOR \
- BROTLI_ERROR_CODE(_ERROR_FORMAT_, CL_SPACE, -6) SEPARATOR \
- BROTLI_ERROR_CODE(_ERROR_FORMAT_, HUFFMAN_SPACE, -7) SEPARATOR \
- BROTLI_ERROR_CODE(_ERROR_FORMAT_, CONTEXT_MAP_REPEAT, -8) SEPARATOR \
- BROTLI_ERROR_CODE(_ERROR_FORMAT_, BLOCK_LENGTH_1, -9) SEPARATOR \
- BROTLI_ERROR_CODE(_ERROR_FORMAT_, BLOCK_LENGTH_2, -10) SEPARATOR \
- BROTLI_ERROR_CODE(_ERROR_FORMAT_, TRANSFORM, -11) SEPARATOR \
- BROTLI_ERROR_CODE(_ERROR_FORMAT_, DICTIONARY, -12) SEPARATOR \
- BROTLI_ERROR_CODE(_ERROR_FORMAT_, WINDOW_BITS, -13) SEPARATOR \
- BROTLI_ERROR_CODE(_ERROR_FORMAT_, PADDING_1, -14) SEPARATOR \
- BROTLI_ERROR_CODE(_ERROR_FORMAT_, PADDING_2, -15) SEPARATOR \
- BROTLI_ERROR_CODE(_ERROR_FORMAT_, DISTANCE, -16) SEPARATOR \
- \
- /* -17..-18 codes are reserved */ \
- \
- BROTLI_ERROR_CODE(_ERROR_, DICTIONARY_NOT_SET, -19) SEPARATOR \
- BROTLI_ERROR_CODE(_ERROR_, INVALID_ARGUMENTS, -20) SEPARATOR \
- \
- /* Memory allocation problems */ \
- BROTLI_ERROR_CODE(_ERROR_ALLOC_, CONTEXT_MODES, -21) SEPARATOR \
- /* Literal, insert and distance trees together */ \
- BROTLI_ERROR_CODE(_ERROR_ALLOC_, TREE_GROUPS, -22) SEPARATOR \
- /* -23..-24 codes are reserved for distinct tree groups */ \
- BROTLI_ERROR_CODE(_ERROR_ALLOC_, CONTEXT_MAP, -25) SEPARATOR \
- BROTLI_ERROR_CODE(_ERROR_ALLOC_, RING_BUFFER_1, -26) SEPARATOR \
- BROTLI_ERROR_CODE(_ERROR_ALLOC_, RING_BUFFER_2, -27) SEPARATOR \
- /* -28..-29 codes are reserved for dynamic ring-buffer allocation */ \
- BROTLI_ERROR_CODE(_ERROR_ALLOC_, BLOCK_TYPE_TREES, -30) SEPARATOR \
- \
- /* "Impossible" states */ \
- BROTLI_ERROR_CODE(_ERROR_, UNREACHABLE, -31)
-
-/**
- * Error code for detailed logging / production debugging.
- *
- * See ::BrotliDecoderGetErrorCode and ::BROTLI_LAST_ERROR_CODE.
- */
-typedef enum {
-#define BROTLI_COMMA_ ,
-#define BROTLI_ERROR_CODE_ENUM_ITEM_(PREFIX, NAME, CODE) \
- BROTLI_DECODER ## PREFIX ## NAME = CODE
- BROTLI_DECODER_ERROR_CODES_LIST(BROTLI_ERROR_CODE_ENUM_ITEM_, BROTLI_COMMA_)
-} BrotliDecoderErrorCode;
-#undef BROTLI_ERROR_CODE_ENUM_ITEM_
-#undef BROTLI_COMMA_
-
-/**
- * The value of the last error code, negative integer.
- *
- * All other error code values are in the range from ::BROTLI_LAST_ERROR_CODE
- * to @c -1. There are also 4 other possible non-error codes @c 0 .. @c 3 in
- * ::BrotliDecoderErrorCode enumeration.
- */
-#define BROTLI_LAST_ERROR_CODE BROTLI_DECODER_ERROR_UNREACHABLE
-
-/** Options to be used with ::BrotliDecoderSetParameter. */
-typedef enum BrotliDecoderParameter {
- /**
- * Disable "canny" ring buffer allocation strategy.
- *
- * Ring buffer is allocated according to window size, despite the real size of
- * the content.
- */
- BROTLI_DECODER_PARAM_DISABLE_RING_BUFFER_REALLOCATION = 0,
- /**
- * Flag that determines if "Large Window Brotli" is used.
- */
- BROTLI_DECODER_PARAM_LARGE_WINDOW = 1
-} BrotliDecoderParameter;
-
-/**
- * Sets the specified parameter to the given decoder instance.
- *
- * @param state decoder instance
- * @param param parameter to set
- * @param value new parameter value
- * @returns ::BROTLI_FALSE if parameter is unrecognized, or value is invalid
- * @returns ::BROTLI_TRUE if value is accepted
- */
-BROTLI_DEC_API BROTLI_BOOL BrotliDecoderSetParameter(
- BrotliDecoderState* state, BrotliDecoderParameter param, uint32_t value);
-
-/**
- * Creates an instance of ::BrotliDecoderState and initializes it.
- *
- * The instance can be used once for decoding and should then be destroyed with
- * ::BrotliDecoderDestroyInstance, it cannot be reused for a new decoding
- * session.
- *
- * @p alloc_func and @p free_func @b MUST be both zero or both non-zero. In the
- * case they are both zero, default memory allocators are used. @p opaque is
- * passed to @p alloc_func and @p free_func when they are called. @p free_func
- * has to return without doing anything when asked to free a NULL pointer.
- *
- * @param alloc_func custom memory allocation function
- * @param free_func custom memory free function
- * @param opaque custom memory manager handle
- * @returns @c 0 if instance can not be allocated or initialized
- * @returns pointer to initialized ::BrotliDecoderState otherwise
- */
-BROTLI_DEC_API BrotliDecoderState* BrotliDecoderCreateInstance(
- brotli_alloc_func alloc_func, brotli_free_func free_func, void* opaque);
-
-/**
- * Deinitializes and frees ::BrotliDecoderState instance.
- *
- * @param state decoder instance to be cleaned up and deallocated
- */
-BROTLI_DEC_API void BrotliDecoderDestroyInstance(BrotliDecoderState* state);
-
-/**
- * Performs one-shot memory-to-memory decompression.
- *
- * Decompresses the data in @p encoded_buffer into @p decoded_buffer, and sets
- * @p *decoded_size to the decompressed length.
- *
- * @param encoded_size size of @p encoded_buffer
- * @param encoded_buffer compressed data buffer with at least @p encoded_size
- * addressable bytes
- * @param[in, out] decoded_size @b in: size of @p decoded_buffer; \n
- * @b out: length of decompressed data written to
- * @p decoded_buffer
- * @param decoded_buffer decompressed data destination buffer
- * @returns ::BROTLI_DECODER_RESULT_ERROR if input is corrupted, memory
- * allocation failed, or @p decoded_buffer is not large enough;
- * @returns ::BROTLI_DECODER_RESULT_SUCCESS otherwise
- */
-BROTLI_DEC_API BrotliDecoderResult BrotliDecoderDecompress(
- size_t encoded_size,
- const uint8_t encoded_buffer[BROTLI_ARRAY_PARAM(encoded_size)],
- size_t* decoded_size,
- uint8_t decoded_buffer[BROTLI_ARRAY_PARAM(*decoded_size)]);
-
-/**
- * Decompresses the input stream to the output stream.
- *
- * The values @p *available_in and @p *available_out must specify the number of
- * bytes addressable at @p *next_in and @p *next_out respectively.
- * When @p *available_out is @c 0, @p next_out is allowed to be @c NULL.
- *
- * After each call, @p *available_in will be decremented by the amount of input
- * bytes consumed, and the @p *next_in pointer will be incremented by that
- * amount. Similarly, @p *available_out will be decremented by the amount of
- * output bytes written, and the @p *next_out pointer will be incremented by
- * that amount.
- *
- * @p total_out, if it is not a null-pointer, will be set to the number
- * of bytes decompressed since the last @p state initialization.
- *
- * @note Input is never overconsumed, so @p next_in and @p available_in could be
- * passed to the next consumer after decoding is complete.
- *
- * @param state decoder instance
- * @param[in, out] available_in @b in: amount of available input; \n
- * @b out: amount of unused input
- * @param[in, out] next_in pointer to the next compressed byte
- * @param[in, out] available_out @b in: length of output buffer; \n
- * @b out: remaining size of output buffer
- * @param[in, out] next_out output buffer cursor;
- * can be @c NULL if @p available_out is @c 0
- * @param[out] total_out number of bytes decompressed so far; can be @c NULL
- * @returns ::BROTLI_DECODER_RESULT_ERROR if input is corrupted, memory
- * allocation failed, arguments were invalid, etc.;
- * use ::BrotliDecoderGetErrorCode to get detailed error code
- * @returns ::BROTLI_DECODER_RESULT_NEEDS_MORE_INPUT decoding is blocked until
- * more input data is provided
- * @returns ::BROTLI_DECODER_RESULT_NEEDS_MORE_OUTPUT decoding is blocked until
- * more output space is provided
- * @returns ::BROTLI_DECODER_RESULT_SUCCESS decoding is finished, no more
- * input might be consumed and no more output will be produced
- */
-BROTLI_DEC_API BrotliDecoderResult BrotliDecoderDecompressStream(
- BrotliDecoderState* state, size_t* available_in, const uint8_t** next_in,
- size_t* available_out, uint8_t** next_out, size_t* total_out);
-
-/**
- * Checks if decoder has more output.
- *
- * @param state decoder instance
- * @returns ::BROTLI_TRUE, if decoder has some unconsumed output
- * @returns ::BROTLI_FALSE otherwise
- */
-BROTLI_DEC_API BROTLI_BOOL BrotliDecoderHasMoreOutput(
- const BrotliDecoderState* state);
-
-/**
- * Acquires pointer to internal output buffer.
- *
- * This method is used to make language bindings easier and more efficient:
- * -# push data to ::BrotliDecoderDecompressStream,
- * until ::BROTLI_DECODER_RESULT_NEEDS_MORE_OUTPUT is reported
- * -# use ::BrotliDecoderTakeOutput to peek bytes and copy to language-specific
- * entity
- *
- * Also this could be useful if there is an output stream that is able to
- * consume all the provided data (e.g. when data is saved to file system).
- *
- * @attention After every call to ::BrotliDecoderTakeOutput @p *size bytes of
- * output are considered consumed for all consecutive calls to the
- * instance methods; returned pointer becomes invalidated as well.
- *
- * @note Decoder output is not guaranteed to be contiguous. This means that
- * after the size-unrestricted call to ::BrotliDecoderTakeOutput,
- * immediate next call to ::BrotliDecoderTakeOutput may return more data.
- *
- * @param state decoder instance
- * @param[in, out] size @b in: number of bytes caller is ready to take, @c 0 if
- * any amount could be handled; \n
- * @b out: amount of data pointed by returned pointer and
- * considered consumed; \n
- * out value is never greater than in value, unless it is @c 0
- * @returns pointer to output data
- */
-BROTLI_DEC_API const uint8_t* BrotliDecoderTakeOutput(
- BrotliDecoderState* state, size_t* size);
-
-/**
- * Checks if instance has already consumed input.
- *
- * Instance that returns ::BROTLI_FALSE is considered "fresh" and could be
- * reused.
- *
- * @param state decoder instance
- * @returns ::BROTLI_TRUE if decoder has already used some input bytes
- * @returns ::BROTLI_FALSE otherwise
- */
-BROTLI_DEC_API BROTLI_BOOL BrotliDecoderIsUsed(const BrotliDecoderState* state);
-
-/**
- * Checks if decoder instance reached the final state.
- *
- * @param state decoder instance
- * @returns ::BROTLI_TRUE if decoder is in a state where it reached the end of
- * the input and produced all of the output
- * @returns ::BROTLI_FALSE otherwise
- */
-BROTLI_DEC_API BROTLI_BOOL BrotliDecoderIsFinished(
- const BrotliDecoderState* state);
-
-/**
- * Acquires a detailed error code.
- *
- * Should be used only after ::BrotliDecoderDecompressStream returns
- * ::BROTLI_DECODER_RESULT_ERROR.
- *
- * See also ::BrotliDecoderErrorString
- *
- * @param state decoder instance
- * @returns last saved error code
- */
-BROTLI_DEC_API BrotliDecoderErrorCode BrotliDecoderGetErrorCode(
- const BrotliDecoderState* state);
-
-/**
- * Converts error code to a c-string.
- */
-BROTLI_DEC_API const char* BrotliDecoderErrorString(BrotliDecoderErrorCode c);
-
-/**
- * Gets a decoder library version.
- *
- * Look at BROTLI_VERSION for more information.
- */
-BROTLI_DEC_API uint32_t BrotliDecoderVersion(void);
-
-#if defined(__cplusplus) || defined(c_plusplus)
-} /* extern "C" */
-#endif
-
-#endif /* BROTLI_DEC_DECODE_H_ */
diff --git a/BaseTools/Source/C/BrotliCompress/include/brotli/encode.h b/BaseTools/Source/C/BrotliCompress/include/brotli/encode.h
deleted file mode 100644
index b26fa4278c10..000000000000
--- a/BaseTools/Source/C/BrotliCompress/include/brotli/encode.h
+++ /dev/null
@@ -1,427 +0,0 @@
-/* Copyright 2013 Google Inc. All Rights Reserved.
-
- Distributed under MIT license.
- See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
-*/
-
-/**
- * @file
- * API for Brotli compression.
- */
-
-#ifndef BROTLI_ENC_ENCODE_H_
-#define BROTLI_ENC_ENCODE_H_
-
-#include <brotli/port.h>
-#include <brotli/types.h>
-
-#if defined(__cplusplus) || defined(c_plusplus)
-extern "C" {
-#endif
-
-/** Minimal value for ::BROTLI_PARAM_LGWIN parameter. */
-#define BROTLI_MIN_WINDOW_BITS 10
-/**
- * Maximal value for ::BROTLI_PARAM_LGWIN parameter.
- *
- * @note equal to @c BROTLI_MAX_DISTANCE_BITS constant.
- */
-#define BROTLI_MAX_WINDOW_BITS 24
-/**
- * Maximal value for ::BROTLI_PARAM_LGWIN parameter
- * in "Large Window Brotli" (32-bit).
- */
-#define BROTLI_LARGE_MAX_WINDOW_BITS 30
-/** Minimal value for ::BROTLI_PARAM_LGBLOCK parameter. */
-#define BROTLI_MIN_INPUT_BLOCK_BITS 16
-/** Maximal value for ::BROTLI_PARAM_LGBLOCK parameter. */
-#define BROTLI_MAX_INPUT_BLOCK_BITS 24
-/** Minimal value for ::BROTLI_PARAM_QUALITY parameter. */
-#define BROTLI_MIN_QUALITY 0
-/** Maximal value for ::BROTLI_PARAM_QUALITY parameter. */
-#define BROTLI_MAX_QUALITY 11
-
-/** Options for ::BROTLI_PARAM_MODE parameter. */
-typedef enum BrotliEncoderMode {
- /**
- * Default compression mode.
- *
- * In this mode compressor does not know anything in advance about the
- * properties of the input.
- */
- BROTLI_MODE_GENERIC = 0,
- /** Compression mode for UTF-8 formatted text input. */
- BROTLI_MODE_TEXT = 1,
- /** Compression mode used in WOFF 2.0. */
- BROTLI_MODE_FONT = 2
-} BrotliEncoderMode;
-
-/** Default value for ::BROTLI_PARAM_QUALITY parameter. */
-#define BROTLI_DEFAULT_QUALITY 11
-/** Default value for ::BROTLI_PARAM_LGWIN parameter. */
-#define BROTLI_DEFAULT_WINDOW 22
-/** Default value for ::BROTLI_PARAM_MODE parameter. */
-#define BROTLI_DEFAULT_MODE BROTLI_MODE_GENERIC
-
-/** Operations that can be performed by streaming encoder. */
-typedef enum BrotliEncoderOperation {
- /**
- * Process input.
- *
- * Encoder may postpone producing output, until it has processed enough input.
- */
- BROTLI_OPERATION_PROCESS = 0,
- /**
- * Produce output for all processed input.
- *
- * Actual flush is performed when input stream is depleted and there is enough
- * space in output stream. This means that client should repeat
- * ::BROTLI_OPERATION_FLUSH operation until @p available_in becomes @c 0, and
- * ::BrotliEncoderHasMoreOutput returns ::BROTLI_FALSE. If output is acquired
- * via ::BrotliEncoderTakeOutput, then operation should be repeated after
- * output buffer is drained.
- *
- * @warning Until flush is complete, client @b SHOULD @b NOT swap,
- * reduce or extend input stream.
- *
- * When flush is complete, output data will be sufficient for decoder to
- * reproduce all the given input.
- */
- BROTLI_OPERATION_FLUSH = 1,
- /**
- * Finalize the stream.
- *
- * Actual finalization is performed when input stream is depleted and there is
- * enough space in output stream. This means that client should repeat
- * ::BROTLI_OPERATION_FINISH operation until @p available_in becomes @c 0, and
- * ::BrotliEncoderHasMoreOutput returns ::BROTLI_FALSE. If output is acquired
- * via ::BrotliEncoderTakeOutput, then operation should be repeated after
- * output buffer is drained.
- *
- * @warning Until finalization is complete, client @b SHOULD @b NOT swap,
- * reduce or extend input stream.
- *
- * Helper function ::BrotliEncoderIsFinished checks if stream is finalized and
- * output fully dumped.
- *
- * Adding more input data to finalized stream is impossible.
- */
- BROTLI_OPERATION_FINISH = 2,
- /**
- * Emit metadata block to stream.
- *
- * Metadata is opaque to Brotli: neither encoder, nor decoder processes this
- * data or relies on it. It may be used to pass some extra information from
- * encoder client to decoder client without interfering with main data stream.
- *
- * @note Encoder may emit empty metadata blocks internally, to pad encoded
- * stream to byte boundary.
- *
- * @warning Until emitting metadata is complete client @b SHOULD @b NOT swap,
- * reduce or extend input stream.
- *
- * @warning The whole content of input buffer is considered to be the content
- * of metadata block. Do @b NOT @e append metadata to input stream,
- * before it is depleted with other operations.
- *
- * Stream is soft-flushed before metadata block is emitted. Metadata block
- * @b MUST be no longer than than 16MiB.
- */
- BROTLI_OPERATION_EMIT_METADATA = 3
-} BrotliEncoderOperation;
-
-/** Options to be used with ::BrotliEncoderSetParameter. */
-typedef enum BrotliEncoderParameter {
- /**
- * Tune encoder for specific input.
- *
- * ::BrotliEncoderMode enumerates all available values.
- */
- BROTLI_PARAM_MODE = 0,
- /**
- * The main compression speed-density lever.
- *
- * The higher the quality, the slower the compression. Range is
- * from ::BROTLI_MIN_QUALITY to ::BROTLI_MAX_QUALITY.
- */
- BROTLI_PARAM_QUALITY = 1,
- /**
- * Recommended sliding LZ77 window size.
- *
- * Encoder may reduce this value, e.g. if input is much smaller than
- * window size.
- *
- * Window size is `(1 << value) - 16`.
- *
- * Range is from ::BROTLI_MIN_WINDOW_BITS to ::BROTLI_MAX_WINDOW_BITS.
- */
- BROTLI_PARAM_LGWIN = 2,
- /**
- * Recommended input block size.
- *
- * Encoder may reduce this value, e.g. if input is much smaller than input
- * block size.
- *
- * Range is from ::BROTLI_MIN_INPUT_BLOCK_BITS to
- * ::BROTLI_MAX_INPUT_BLOCK_BITS.
- *
- * @note Bigger input block size allows better compression, but consumes more
- * memory. \n The rough formula of memory used for temporary input
- * storage is `3 << lgBlock`.
- */
- BROTLI_PARAM_LGBLOCK = 3,
- /**
- * Flag that affects usage of "literal context modeling" format feature.
- *
- * This flag is a "decoding-speed vs compression ratio" trade-off.
- */
- BROTLI_PARAM_DISABLE_LITERAL_CONTEXT_MODELING = 4,
- /**
- * Estimated total input size for all ::BrotliEncoderCompressStream calls.
- *
- * The default value is 0, which means that the total input size is unknown.
- */
- BROTLI_PARAM_SIZE_HINT = 5,
- /**
- * Flag that determines if "Large Window Brotli" is used.
- */
- BROTLI_PARAM_LARGE_WINDOW = 6,
- /**
- * Recommended number of postfix bits (NPOSTFIX).
- *
- * Encoder may change this value.
- *
- * Range is from 0 to ::BROTLI_MAX_NPOSTFIX.
- */
- BROTLI_PARAM_NPOSTFIX = 7,
- /**
- * Recommended number of direct distance codes (NDIRECT).
- *
- * Encoder may change this value.
- *
- * Range is from 0 to (15 << NPOSTFIX) in steps of (1 << NPOSTFIX).
- */
- BROTLI_PARAM_NDIRECT = 8
-} BrotliEncoderParameter;
-
-/**
- * Opaque structure that holds encoder state.
- *
- * Allocated and initialized with ::BrotliEncoderCreateInstance.
- * Cleaned up and deallocated with ::BrotliEncoderDestroyInstance.
- */
-typedef struct BrotliEncoderStateStruct BrotliEncoderState;
-
-/**
- * Sets the specified parameter to the given encoder instance.
- *
- * @param state encoder instance
- * @param param parameter to set
- * @param value new parameter value
- * @returns ::BROTLI_FALSE if parameter is unrecognized, or value is invalid
- * @returns ::BROTLI_FALSE if value of parameter can not be changed at current
- * encoder state (e.g. when encoding is started, window size might be
- * already encoded and therefore it is impossible to change it)
- * @returns ::BROTLI_TRUE if value is accepted
- * @warning invalid values might be accepted in case they would not break
- * encoding process.
- */
-BROTLI_ENC_API BROTLI_BOOL BrotliEncoderSetParameter(
- BrotliEncoderState* state, BrotliEncoderParameter param, uint32_t value);
-
-/**
- * Creates an instance of ::BrotliEncoderState and initializes it.
- *
- * @p alloc_func and @p free_func @b MUST be both zero or both non-zero. In the
- * case they are both zero, default memory allocators are used. @p opaque is
- * passed to @p alloc_func and @p free_func when they are called. @p free_func
- * has to return without doing anything when asked to free a NULL pointer.
- *
- * @param alloc_func custom memory allocation function
- * @param free_func custom memory free function
- * @param opaque custom memory manager handle
- * @returns @c 0 if instance can not be allocated or initialized
- * @returns pointer to initialized ::BrotliEncoderState otherwise
- */
-BROTLI_ENC_API BrotliEncoderState* BrotliEncoderCreateInstance(
- brotli_alloc_func alloc_func, brotli_free_func free_func, void* opaque);
-
-/**
- * Deinitializes and frees ::BrotliEncoderState instance.
- *
- * @param state decoder instance to be cleaned up and deallocated
- */
-BROTLI_ENC_API void BrotliEncoderDestroyInstance(BrotliEncoderState* state);
-
-/**
- * Calculates the output size bound for the given @p input_size.
- *
- * @warning Result is only valid if quality is at least @c 2 and, in
- * case ::BrotliEncoderCompressStream was used, no flushes
- * (::BROTLI_OPERATION_FLUSH) were performed.
- *
- * @param input_size size of projected input
- * @returns @c 0 if result does not fit @c size_t
- */
-BROTLI_ENC_API size_t BrotliEncoderMaxCompressedSize(size_t input_size);
-
-/**
- * Performs one-shot memory-to-memory compression.
- *
- * Compresses the data in @p input_buffer into @p encoded_buffer, and sets
- * @p *encoded_size to the compressed length.
- *
- * @note If ::BrotliEncoderMaxCompressedSize(@p input_size) returns non-zero
- * value, then output is guaranteed to be no longer than that.
- *
- * @param quality quality parameter value, e.g. ::BROTLI_DEFAULT_QUALITY
- * @param lgwin lgwin parameter value, e.g. ::BROTLI_DEFAULT_WINDOW
- * @param mode mode parameter value, e.g. ::BROTLI_DEFAULT_MODE
- * @param input_size size of @p input_buffer
- * @param input_buffer input data buffer with at least @p input_size
- * addressable bytes
- * @param[in, out] encoded_size @b in: size of @p encoded_buffer; \n
- * @b out: length of compressed data written to
- * @p encoded_buffer, or @c 0 if compression fails
- * @param encoded_buffer compressed data destination buffer
- * @returns ::BROTLI_FALSE in case of compression error
- * @returns ::BROTLI_FALSE if output buffer is too small
- * @returns ::BROTLI_TRUE otherwise
- */
-BROTLI_ENC_API BROTLI_BOOL BrotliEncoderCompress(
- int quality, int lgwin, BrotliEncoderMode mode, size_t input_size,
- const uint8_t input_buffer[BROTLI_ARRAY_PARAM(input_size)],
- size_t* encoded_size,
- uint8_t encoded_buffer[BROTLI_ARRAY_PARAM(*encoded_size)]);
-
-/**
- * Compresses input stream to output stream.
- *
- * The values @p *available_in and @p *available_out must specify the number of
- * bytes addressable at @p *next_in and @p *next_out respectively.
- * When @p *available_out is @c 0, @p next_out is allowed to be @c NULL.
- *
- * After each call, @p *available_in will be decremented by the amount of input
- * bytes consumed, and the @p *next_in pointer will be incremented by that
- * amount. Similarly, @p *available_out will be decremented by the amount of
- * output bytes written, and the @p *next_out pointer will be incremented by
- * that amount.
- *
- * @p total_out, if it is not a null-pointer, will be set to the number
- * of bytes compressed since the last @p state initialization.
- *
- *
- *
- * Internally workflow consists of 3 tasks:
- * -# (optionally) copy input data to internal buffer
- * -# actually compress data and (optionally) store it to internal buffer
- * -# (optionally) copy compressed bytes from internal buffer to output stream
- *
- * Whenever all 3 tasks can't move forward anymore, or error occurs, this
- * method returns the control flow to caller.
- *
- * @p op is used to perform flush, finish the stream, or inject metadata block.
- * See ::BrotliEncoderOperation for more information.
- *
- * Flushing the stream means forcing encoding of all input passed to encoder and
- * completing the current output block, so it could be fully decoded by stream
- * decoder. To perform flush set @p op to ::BROTLI_OPERATION_FLUSH.
- * Under some circumstances (e.g. lack of output stream capacity) this operation
- * would require several calls to ::BrotliEncoderCompressStream. The method must
- * be called again until both input stream is depleted and encoder has no more
- * output (see ::BrotliEncoderHasMoreOutput) after the method is called.
- *
- * Finishing the stream means encoding of all input passed to encoder and
- * adding specific "final" marks, so stream decoder could determine that stream
- * is complete. To perform finish set @p op to ::BROTLI_OPERATION_FINISH.
- * Under some circumstances (e.g. lack of output stream capacity) this operation
- * would require several calls to ::BrotliEncoderCompressStream. The method must
- * be called again until both input stream is depleted and encoder has no more
- * output (see ::BrotliEncoderHasMoreOutput) after the method is called.
- *
- * @warning When flushing and finishing, @p op should not change until operation
- * is complete; input stream should not be swapped, reduced or
- * extended as well.
- *
- * @param state encoder instance
- * @param op requested operation
- * @param[in, out] available_in @b in: amount of available input; \n
- * @b out: amount of unused input
- * @param[in, out] next_in pointer to the next input byte
- * @param[in, out] available_out @b in: length of output buffer; \n
- * @b out: remaining size of output buffer
- * @param[in, out] next_out compressed output buffer cursor;
- * can be @c NULL if @p available_out is @c 0
- * @param[out] total_out number of bytes produced so far; can be @c NULL
- * @returns ::BROTLI_FALSE if there was an error
- * @returns ::BROTLI_TRUE otherwise
- */
-BROTLI_ENC_API BROTLI_BOOL BrotliEncoderCompressStream(
- BrotliEncoderState* state, BrotliEncoderOperation op, size_t* available_in,
- const uint8_t** next_in, size_t* available_out, uint8_t** next_out,
- size_t* total_out);
-
-/**
- * Checks if encoder instance reached the final state.
- *
- * @param state encoder instance
- * @returns ::BROTLI_TRUE if encoder is in a state where it reached the end of
- * the input and produced all of the output
- * @returns ::BROTLI_FALSE otherwise
- */
-BROTLI_ENC_API BROTLI_BOOL BrotliEncoderIsFinished(BrotliEncoderState* state);
-
-/**
- * Checks if encoder has more output.
- *
- * @param state encoder instance
- * @returns ::BROTLI_TRUE, if encoder has some unconsumed output
- * @returns ::BROTLI_FALSE otherwise
- */
-BROTLI_ENC_API BROTLI_BOOL BrotliEncoderHasMoreOutput(
- BrotliEncoderState* state);
-
-/**
- * Acquires pointer to internal output buffer.
- *
- * This method is used to make language bindings easier and more efficient:
- * -# push data to ::BrotliEncoderCompressStream,
- * until ::BrotliEncoderHasMoreOutput returns BROTL_TRUE
- * -# use ::BrotliEncoderTakeOutput to peek bytes and copy to language-specific
- * entity
- *
- * Also this could be useful if there is an output stream that is able to
- * consume all the provided data (e.g. when data is saved to file system).
- *
- * @attention After every call to ::BrotliEncoderTakeOutput @p *size bytes of
- * output are considered consumed for all consecutive calls to the
- * instance methods; returned pointer becomes invalidated as well.
- *
- * @note Encoder output is not guaranteed to be contiguous. This means that
- * after the size-unrestricted call to ::BrotliEncoderTakeOutput,
- * immediate next call to ::BrotliEncoderTakeOutput may return more data.
- *
- * @param state encoder instance
- * @param[in, out] size @b in: number of bytes caller is ready to take, @c 0 if
- * any amount could be handled; \n
- * @b out: amount of data pointed by returned pointer and
- * considered consumed; \n
- * out value is never greater than in value, unless it is @c 0
- * @returns pointer to output data
- */
-BROTLI_ENC_API const uint8_t* BrotliEncoderTakeOutput(
- BrotliEncoderState* state, size_t* size);
-
-
-/**
- * Gets an encoder library version.
- *
- * Look at BROTLI_VERSION for more information.
- */
-BROTLI_ENC_API uint32_t BrotliEncoderVersion(void);
-
-#if defined(__cplusplus) || defined(c_plusplus)
-} /* extern "C" */
-#endif
-
-#endif /* BROTLI_ENC_ENCODE_H_ */
diff --git a/BaseTools/Source/C/BrotliCompress/include/brotli/port.h b/BaseTools/Source/C/BrotliCompress/include/brotli/port.h
deleted file mode 100644
index 6e439987b547..000000000000
--- a/BaseTools/Source/C/BrotliCompress/include/brotli/port.h
+++ /dev/null
@@ -1,274 +0,0 @@
-/* Copyright 2016 Google Inc. All Rights Reserved.
-
- Distributed under MIT license.
- See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
-*/
-
-/* Macros for compiler / platform specific API declarations. */
-
-#ifndef BROTLI_COMMON_PORT_H_
-#define BROTLI_COMMON_PORT_H_
-
-/* The following macros were borrowed from https://github.com/nemequ/hedley
- * with permission of original author - Evan Nemerson <evan@nemerson.com> */
-
-/* >>> >>> >>> hedley macros */
-
-#define BROTLI_MAKE_VERSION(major, minor, revision) \
- (((major) * 1000000) + ((minor) * 1000) + (revision))
-
-#if defined(__GNUC__) && defined(__GNUC_PATCHLEVEL__)
-#define BROTLI_GNUC_VERSION \
- BROTLI_MAKE_VERSION(__GNUC__, __GNUC_MINOR__, __GNUC_PATCHLEVEL__)
-#elif defined(__GNUC__)
-#define BROTLI_GNUC_VERSION BROTLI_MAKE_VERSION(__GNUC__, __GNUC_MINOR__, 0)
-#endif
-
-#if defined(BROTLI_GNUC_VERSION)
-#define BROTLI_GNUC_VERSION_CHECK(major, minor, patch) \
- (BROTLI_GNUC_VERSION >= BROTLI_MAKE_VERSION(major, minor, patch))
-#else
-#define BROTLI_GNUC_VERSION_CHECK(major, minor, patch) (0)
-#endif
-
-#if defined(_MSC_FULL_VER) && (_MSC_FULL_VER >= 140000000)
-#define BROTLI_MSVC_VERSION \
- BROTLI_MAKE_VERSION((_MSC_FULL_VER / 10000000), \
- (_MSC_FULL_VER % 10000000) / 100000, \
- (_MSC_FULL_VER % 100000) / 100)
-#elif defined(_MSC_FULL_VER)
-#define BROTLI_MSVC_VERSION \
- BROTLI_MAKE_VERSION((_MSC_FULL_VER / 1000000), \
- (_MSC_FULL_VER % 1000000) / 10000, \
- (_MSC_FULL_VER % 10000) / 10)
-#elif defined(_MSC_VER)
-#define BROTLI_MSVC_VERSION \
- BROTLI_MAKE_VERSION(_MSC_VER / 100, _MSC_VER % 100, 0)
-#endif
-
-#if !defined(_MSC_VER)
-#define BROTLI_MSVC_VERSION_CHECK(major, minor, patch) (0)
-#elif defined(_MSC_VER) && (_MSC_VER >= 1400)
-#define BROTLI_MSVC_VERSION_CHECK(major, minor, patch) \
- (_MSC_FULL_VER >= ((major * 10000000) + (minor * 100000) + (patch)))
-#elif defined(_MSC_VER) && (_MSC_VER >= 1200)
-#define BROTLI_MSVC_VERSION_CHECK(major, minor, patch) \
- (_MSC_FULL_VER >= ((major * 1000000) + (minor * 10000) + (patch)))
-#else
-#define BROTLI_MSVC_VERSION_CHECK(major, minor, patch) \
- (_MSC_VER >= ((major * 100) + (minor)))
-#endif
-
-#if defined(__INTEL_COMPILER) && defined(__INTEL_COMPILER_UPDATE)
-#define BROTLI_INTEL_VERSION \
- BROTLI_MAKE_VERSION(__INTEL_COMPILER / 100, \
- __INTEL_COMPILER % 100, \
- __INTEL_COMPILER_UPDATE)
-#elif defined(__INTEL_COMPILER)
-#define BROTLI_INTEL_VERSION \
- BROTLI_MAKE_VERSION(__INTEL_COMPILER / 100, __INTEL_COMPILER % 100, 0)
-#endif
-
-#if defined(BROTLI_INTEL_VERSION)
-#define BROTLI_INTEL_VERSION_CHECK(major, minor, patch) \
- (BROTLI_INTEL_VERSION >= BROTLI_MAKE_VERSION(major, minor, patch))
-#else
-#define BROTLI_INTEL_VERSION_CHECK(major, minor, patch) (0)
-#endif
-
-#if defined(__PGI) && \
- defined(__PGIC__) && defined(__PGIC_MINOR__) && defined(__PGIC_PATCHLEVEL__)
-#define BROTLI_PGI_VERSION \
- BROTLI_MAKE_VERSION(__PGIC__, __PGIC_MINOR__, __PGIC_PATCHLEVEL__)
-#endif
-
-#if defined(BROTLI_PGI_VERSION)
-#define BROTLI_PGI_VERSION_CHECK(major, minor, patch) \
- (BROTLI_PGI_VERSION >= BROTLI_MAKE_VERSION(major, minor, patch))
-#else
-#define BROTLI_PGI_VERSION_CHECK(major, minor, patch) (0)
-#endif
-
-#if defined(__SUNPRO_C) && (__SUNPRO_C > 0x1000)
-#define BROTLI_SUNPRO_VERSION \
- BROTLI_MAKE_VERSION( \
- (((__SUNPRO_C >> 16) & 0xf) * 10) + ((__SUNPRO_C >> 12) & 0xf), \
- (((__SUNPRO_C >> 8) & 0xf) * 10) + ((__SUNPRO_C >> 4) & 0xf), \
- (__SUNPRO_C & 0xf) * 10)
-#elif defined(__SUNPRO_C)
-#define BROTLI_SUNPRO_VERSION \
- BROTLI_MAKE_VERSION((__SUNPRO_C >> 8) & 0xf, \
- (__SUNPRO_C >> 4) & 0xf, \
- (__SUNPRO_C) & 0xf)
-#elif defined(__SUNPRO_CC) && (__SUNPRO_CC > 0x1000)
-#define BROTLI_SUNPRO_VERSION \
- BROTLI_MAKE_VERSION( \
- (((__SUNPRO_CC >> 16) & 0xf) * 10) + ((__SUNPRO_CC >> 12) & 0xf), \
- (((__SUNPRO_CC >> 8) & 0xf) * 10) + ((__SUNPRO_CC >> 4) & 0xf), \
- (__SUNPRO_CC & 0xf) * 10)
-#elif defined(__SUNPRO_CC)
-#define BROTLI_SUNPRO_VERSION \
- BROTLI_MAKE_VERSION((__SUNPRO_CC >> 8) & 0xf, \
- (__SUNPRO_CC >> 4) & 0xf, \
- (__SUNPRO_CC) & 0xf)
-#endif
-
-#if defined(BROTLI_SUNPRO_VERSION)
-#define BROTLI_SUNPRO_VERSION_CHECK(major, minor, patch) \
- (BROTLI_SUNPRO_VERSION >= BROTLI_MAKE_VERSION(major, minor, patch))
-#else
-#define BROTLI_SUNPRO_VERSION_CHECK(major, minor, patch) (0)
-#endif
-
-#if defined(__CC_ARM) && defined(__ARMCOMPILER_VERSION)
-#define BROTLI_ARM_VERSION \
- BROTLI_MAKE_VERSION((__ARMCOMPILER_VERSION / 1000000), \
- (__ARMCOMPILER_VERSION % 1000000) / 10000, \
- (__ARMCOMPILER_VERSION % 10000) / 100)
-#elif defined(__CC_ARM) && defined(__ARMCC_VERSION)
-#define BROTLI_ARM_VERSION \
- BROTLI_MAKE_VERSION((__ARMCC_VERSION / 1000000), \
- (__ARMCC_VERSION % 1000000) / 10000, \
- (__ARMCC_VERSION % 10000) / 100)
-#endif
-
-#if defined(BROTLI_ARM_VERSION)
-#define BROTLI_ARM_VERSION_CHECK(major, minor, patch) \
- (BROTLI_ARM_VERSION >= BROTLI_MAKE_VERSION(major, minor, patch))
-#else
-#define BROTLI_ARM_VERSION_CHECK(major, minor, patch) (0)
-#endif
-
-#if defined(__ibmxl__)
-#define BROTLI_IBM_VERSION \
- BROTLI_MAKE_VERSION(__ibmxl_version__, \
- __ibmxl_release__, \
- __ibmxl_modification__)
-#elif defined(__xlC__) && defined(__xlC_ver__)
-#define BROTLI_IBM_VERSION \
- BROTLI_MAKE_VERSION(__xlC__ >> 8, __xlC__ & 0xff, (__xlC_ver__ >> 8) & 0xff)
-#elif defined(__xlC__)
-#define BROTLI_IBM_VERSION BROTLI_MAKE_VERSION(__xlC__ >> 8, __xlC__ & 0xff, 0)
-#endif
-
-#if defined(BROTLI_IBM_VERSION)
-#define BROTLI_IBM_VERSION_CHECK(major, minor, patch) \
- (BROTLI_IBM_VERSION >= BROTLI_MAKE_VERSION(major, minor, patch))
-#else
-#define BROTLI_IBM_VERSION_CHECK(major, minor, patch) (0)
-#endif
-
-#if defined(__TI_COMPILER_VERSION__)
-#define BROTLI_TI_VERSION \
- BROTLI_MAKE_VERSION((__TI_COMPILER_VERSION__ / 1000000), \
- (__TI_COMPILER_VERSION__ % 1000000) / 1000, \
- (__TI_COMPILER_VERSION__ % 1000))
-#endif
-
-#if defined(BROTLI_TI_VERSION)
-#define BROTLI_TI_VERSION_CHECK(major, minor, patch) \
- (BROTLI_TI_VERSION >= BROTLI_MAKE_VERSION(major, minor, patch))
-#else
-#define BROTLI_TI_VERSION_CHECK(major, minor, patch) (0)
-#endif
-
-#if defined(__IAR_SYSTEMS_ICC__)
-#if __VER__ > 1000
-#define BROTLI_IAR_VERSION \
- BROTLI_MAKE_VERSION((__VER__ / 1000000), \
- (__VER__ / 1000) % 1000, \
- (__VER__ % 1000))
-#else
-#define BROTLI_IAR_VERSION BROTLI_MAKE_VERSION(VER / 100, __VER__ % 100, 0)
-#endif
-#endif
-
-#if defined(BROTLI_IAR_VERSION)
-#define BROTLI_IAR_VERSION_CHECK(major, minor, patch) \
- (BROTLI_IAR_VERSION >= BROTLI_MAKE_VERSION(major, minor, patch))
-#else
-#define BROTLI_IAR_VERSION_CHECK(major, minor, patch) (0)
-#endif
-
-#if defined(__TINYC__)
-#define BROTLI_TINYC_VERSION \
- BROTLI_MAKE_VERSION(__TINYC__ / 1000, (__TINYC__ / 100) % 10, __TINYC__ % 100)
-#endif
-
-#if defined(BROTLI_TINYC_VERSION)
-#define BROTLI_TINYC_VERSION_CHECK(major, minor, patch) \
- (BROTLI_TINYC_VERSION >= BROTLI_MAKE_VERSION(major, minor, patch))
-#else
-#define BROTLI_TINYC_VERSION_CHECK(major, minor, patch) (0)
-#endif
-
-#if defined(__has_attribute)
-#define BROTLI_GNUC_HAS_ATTRIBUTE(attribute, major, minor, patch) \
- __has_attribute(attribute)
-#else
-#define BROTLI_GNUC_HAS_ATTRIBUTE(attribute, major, minor, patch) \
- BROTLI_GNUC_VERSION_CHECK(major, minor, patch)
-#endif
-
-#if defined(__has_builtin)
-#define BROTLI_GNUC_HAS_BUILTIN(builtin, major, minor, patch) \
- __has_builtin(builtin)
-#else
-#define BROTLI_GNUC_HAS_BUILTIN(builtin, major, minor, patch) \
- BROTLI_GNUC_VERSION_CHECK(major, minor, patch)
-#endif
-
-#if defined(_WIN32) || defined(__CYGWIN__)
-#define BROTLI_PUBLIC
-#elif BROTLI_GNUC_VERSION_CHECK(3, 3, 0) || \
- BROTLI_TI_VERSION_CHECK(8, 0, 0) || \
- BROTLI_INTEL_VERSION_CHECK(16, 0, 0) || \
- BROTLI_ARM_VERSION_CHECK(4, 1, 0) || \
- BROTLI_IBM_VERSION_CHECK(13, 1, 0) || \
- BROTLI_SUNPRO_VERSION_CHECK(5, 11, 0) || \
- (BROTLI_TI_VERSION_CHECK(7, 3, 0) && \
- defined(__TI_GNU_ATTRIBUTE_SUPPORT__) && defined(__TI_EABI__))
-#define BROTLI_PUBLIC __attribute__ ((visibility ("default")))
-#else
-#define BROTLI_PUBLIC
-#endif
-
-#if defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) && \
- !defined(__STDC_NO_VLA__) && !defined(__cplusplus) && \
- !defined(__PGI) && !defined(__PGIC__) && !defined(__TINYC__)
-#define BROTLI_ARRAY_PARAM(name) (name)
-#else
-#define BROTLI_ARRAY_PARAM(name)
-#endif
-
-/* <<< <<< <<< end of hedley macros. */
-
-#if defined(BROTLI_SHARED_COMPILATION)
-#if defined(_WIN32)
-#if defined(BROTLICOMMON_SHARED_COMPILATION)
-#define BROTLI_COMMON_API __declspec(dllexport)
-#else
-#define BROTLI_COMMON_API __declspec(dllimport)
-#endif /* BROTLICOMMON_SHARED_COMPILATION */
-#if defined(BROTLIDEC_SHARED_COMPILATION)
-#define BROTLI_DEC_API __declspec(dllexport)
-#else
-#define BROTLI_DEC_API __declspec(dllimport)
-#endif /* BROTLIDEC_SHARED_COMPILATION */
-#if defined(BROTLIENC_SHARED_COMPILATION)
-#define BROTLI_ENC_API __declspec(dllexport)
-#else
-#define BROTLI_ENC_API __declspec(dllimport)
-#endif /* BROTLIENC_SHARED_COMPILATION */
-#else /* _WIN32 */
-#define BROTLI_COMMON_API BROTLI_PUBLIC
-#define BROTLI_DEC_API BROTLI_PUBLIC
-#define BROTLI_ENC_API BROTLI_PUBLIC
-#endif /* _WIN32 */
-#else /* BROTLI_SHARED_COMPILATION */
-#define BROTLI_COMMON_API
-#define BROTLI_DEC_API
-#define BROTLI_ENC_API
-#endif
-
-#endif /* BROTLI_COMMON_PORT_H_ */
diff --git a/BaseTools/Source/C/BrotliCompress/include/brotli/types.h b/BaseTools/Source/C/BrotliCompress/include/brotli/types.h
deleted file mode 100644
index 513e701af96d..000000000000
--- a/BaseTools/Source/C/BrotliCompress/include/brotli/types.h
+++ /dev/null
@@ -1,83 +0,0 @@
-/* Copyright 2013 Google Inc. All Rights Reserved.
-
- Distributed under MIT license.
- See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
-*/
-
-/**
- * @file
- * Common types used in decoder and encoder API.
- */
-
-#ifndef BROTLI_COMMON_TYPES_H_
-#define BROTLI_COMMON_TYPES_H_
-
-#include <stddef.h> /* for size_t */
-
-#if defined(_MSC_VER) && (_MSC_VER < 1600)
-typedef __int8 int8_t;
-typedef unsigned __int8 uint8_t;
-typedef __int16 int16_t;
-typedef unsigned __int16 uint16_t;
-typedef __int32 int32_t;
-typedef unsigned __int32 uint32_t;
-typedef unsigned __int64 uint64_t;
-typedef __int64 int64_t;
-#else
-#include <stdint.h>
-#endif /* defined(_MSC_VER) && (_MSC_VER < 1600) */
-
-/**
- * A portable @c bool replacement.
- *
- * ::BROTLI_BOOL is a "documentation" type: actually it is @c int, but in API it
- * denotes a type, whose only values are ::BROTLI_TRUE and ::BROTLI_FALSE.
- *
- * ::BROTLI_BOOL values passed to Brotli should either be ::BROTLI_TRUE or
- * ::BROTLI_FALSE, or be a result of ::TO_BROTLI_BOOL macros.
- *
- * ::BROTLI_BOOL values returned by Brotli should not be tested for equality
- * with @c true, @c false, ::BROTLI_TRUE, ::BROTLI_FALSE, but rather should be
- * evaluated, for example: @code{.cpp}
- * if (SomeBrotliFunction(encoder, BROTLI_TRUE) &&
- * !OtherBrotliFunction(decoder, BROTLI_FALSE)) {
- * bool x = !!YetAnotherBrotliFunction(encoder, TO_BROLTI_BOOL(2 * 2 == 4));
- * DoSomething(x);
- * }
- * @endcode
- */
-#define BROTLI_BOOL int
-/** Portable @c true replacement. */
-#define BROTLI_TRUE 1
-/** Portable @c false replacement. */
-#define BROTLI_FALSE 0
-/** @c bool to ::BROTLI_BOOL conversion macros. */
-#define TO_BROTLI_BOOL(X) (!!(X) ? BROTLI_TRUE : BROTLI_FALSE)
-
-#define BROTLI_MAKE_UINT64_T(high, low) ((((uint64_t)(high)) << 32) | low)
-
-#define BROTLI_UINT32_MAX (~((uint32_t)0))
-#define BROTLI_SIZE_MAX (~((size_t)0))
-
-/**
- * Allocating function pointer type.
- *
- * @param opaque custom memory manager handle provided by client
- * @param size requested memory region size; can not be @c 0
- * @returns @c 0 in the case of failure
- * @returns a valid pointer to a memory region of at least @p size bytes
- * long otherwise
- */
-typedef void* (*brotli_alloc_func)(void* opaque, size_t size);
-
-/**
- * Deallocating function pointer type.
- *
- * This function @b SHOULD do nothing if @p address is @c 0.
- *
- * @param opaque custom memory manager handle provided by client
- * @param address memory region pointer returned by ::brotli_alloc_func, or @c 0
- */
-typedef void (*brotli_free_func)(void* opaque, void* address);
-
-#endif /* BROTLI_COMMON_TYPES_H_ */
diff --git a/BaseTools/Source/C/BrotliCompress/tools/brotli.md b/BaseTools/Source/C/BrotliCompress/tools/brotli.md
deleted file mode 100644
index c029869bced7..000000000000
--- a/BaseTools/Source/C/BrotliCompress/tools/brotli.md
+++ /dev/null
@@ -1,107 +0,0 @@
-brotli(1) -- brotli, unbrotli - compress or decompress files
-================================================================
-
-SYNOPSIS
---------
-
-`brotli` [*OPTION|FILE*]...
-
-`unbrotli` is equivalent to `brotli --decompress`
-
-DESCRIPTION
------------
-`brotli` is a generic-purpose lossless compression algorithm that compresses
-data using a combination of a modern variant of the **LZ77** algorithm, Huffman
-coding and 2-nd order context modeling, with a compression ratio comparable to
-the best currently available general-purpose compression methods. It is similar
-in speed with deflate but offers more dense compression.
-
-`brotli` command line syntax similar to `gzip (1)` and `zstd (1)`.
-Unlike `gzip (1)`, source files are preserved by default. It is possible to
-remove them after processing by using the `--rm` _option_.
-
-Arguments that look like "`--name`" or "`--name=value`" are _options_. Every
-_option_ has a short form "`-x`" or "`-x value`". Multiple short form _options_
-could be coalesced:
-
-* "`--decompress --stdout --suffix=.b`" works the same as
-* "`-d -s -S .b`" and
-* "`-dsS .b`"
-
-`brotli` has 3 operation modes:
-
-* default mode is compression;
-* `--decompress` option activates decompression mode;
-* `--test` option switches to integrity test mode; this option is equivalent to
- "`--decompress --stdout`" except that the decompressed data is discarded
- instead of being written to standard output.
-
-Every non-option argument is a _file_ entry. If no _files_ are given or _file_
-is "`-`", `brotli` reads from standard input. All arguments after "`--`" are
-_file_ entries.
-
-Unless `--stdout` or `--output` is specified, _files_ are written to a new file
-whose name is derived from the source _file_ name:
-
-* when compressing, a suffix is appended to the source filename to
- get the target filename
-* when decompressing, a suffix is removed from the source filename to
- get the target filename
-
-Default suffix is `.br`, but it could be specified with `--suffix` option.
-
-Conflicting or duplicate _options_ are not allowed.
-
-OPTIONS
--------
-
-* `-#`:
- compression level (0-9); bigger values cause denser, but slower compression
-* `-c`, `--stdout`:
- write on standard output
-* `-d`, `--decompress`:
- decompress mode
-* `-f`, `--force`:
- force output file overwrite
-* `-h`, `--help`:
- display this help and exit
-* `-j`, `--rm`:
- remove source file(s); `gzip (1)`-like behaviour
-* `-k`, `--keep`:
- keep source file(s); `zstd (1)`-like behaviour
-* `-n`, `--no-copy-stat`:
- do not copy source file(s) attributes
-* `-o FILE`, `--output=FILE`
- output file; valid only if there is a single input entry
-* `-q NUM`, `--quality=NUM`:
- compression level (0-11); bigger values cause denser, but slower compression
-* `-t`, `--test`:
- test file integrity mode
-* `-v`, `--verbose`:
- increase output verbosity
-* `-w NUM`, `--lgwin=NUM`:
- set LZ77 window size (0, 10-24) (default: 22); window size is
- `(2**NUM - 16)`; 0 lets compressor decide over the optimal value; bigger
- windows size improve density; decoder might require up to window size
- memory to operate
-* `-S SUF`, `--suffix=SUF`:
- output file suffix (default: `.br`)
-* `-V`, `--version`:
- display version and exit
-* `-Z`, `--best`:
- use best compression level (default); same as "`-q 11`"
-
-SEE ALSO
---------
-
-`brotli` file format is defined in
-[RFC 7932](https://www.ietf.org/rfc/rfc7932.txt).
-
-`brotli` is open-sourced under the
-[MIT License](https://opensource.org/licenses/MIT).
-
-Mailing list: https://groups.google.com/forum/#!forum/brotli
-
-BUGS
-----
-Report bugs at: https://github.com/google/brotli/issues
diff --git a/Readme.md b/Readme.md
index 4a4775db85fd..31a56b4913d5 100644
--- a/Readme.md
+++ b/Readme.md
@@ -57,7 +57,7 @@ for the UEFI and PI specifications from www.uefi.org.
The majority of the content in the EDK II open source project uses a
[BSD-2-Clause Plus Patent License](License.txt). The EDK II open source project
contains the following components that are covered by additional licenses:
-* [BaseTools/Source/C/BrotliCompress](BaseTools/Source/C/BrotliCompress/LICENSE)
+* [BaseTools/Source/C/BrotliCompress/brotli](https://github.com/google/brotli/blob/master/LICENSE)
* [MdeModulePkg/Library/BrotliCustomDecompressLib/brotli](https://github.com/google/brotli/blob/master/LICENSE)
* [BaseTools/Source/C/LzmaCompress](BaseTools/Source/C/LzmaCompress/LZMA-SDK-README.txt)
* [MdeModulePkg/Library/LzmaCustomDecompressLib](MdeModulePkg/Library/LzmaCustomDecompressLib/LZMA-SDK-README.txt)
@@ -200,6 +200,7 @@ as possible as we can. Currently EDK II contains the following submodules
- CryptoPkg/Library/OpensslLib/openssl
- ArmPkg/Library/ArmSoftFloatLib/berkeley-softfloat-3
- MdeModulePkg/Library/BrotliCustomDecompressLib/brotli
+- BaseTools/Source/C/BrotliCompress/brotli
ArmSoftFloatLib is actually required by OpensslLib. It's inevitable
in openssl-1.1.1 (since stable201905) for floating point parameter
--
2.18.0.windows.1
^ permalink raw reply related [flat|nested] 6+ messages in thread
* Re: [edk2-devel] [PATCH 2/2] BaseTools: Make brotli a submodule
[not found] ` <15F959C75C03A288.12001@groups.io>
@ 2020-03-05 8:28 ` Bob Feng
2020-03-09 5:30 ` Zhang, Shenglei
0 siblings, 1 reply; 6+ messages in thread
From: Bob Feng @ 2020-03-05 8:28 UTC (permalink / raw)
To: devel@edk2.groups.io, Feng, Bob C, Zhang, Shenglei; +Cc: Gao, Liming
Shenglei,
Would you also add comment in BZ why we need change to submodule way?
Thanks,
Bob
-----Original Message-----
From: devel@edk2.groups.io [mailto:devel@edk2.groups.io] On Behalf Of Bob Feng
Sent: Thursday, March 5, 2020 4:04 PM
To: Zhang, Shenglei <shenglei.zhang@intel.com>; devel@edk2.groups.io
Cc: Gao, Liming <liming.gao@intel.com>
Subject: Re: [edk2-devel] [PATCH 2/2] BaseTools: Make brotli a submodule
Shenglei,
Please update BZ status as IN_PROGRESS and add patch link.
Thanks,
Bob
-----Original Message-----
From: Zhang, Shenglei
Sent: Monday, March 2, 2020 11:20 AM
To: devel@edk2.groups.io
Cc: Feng, Bob C <bob.c.feng@intel.com>; Gao, Liming <liming.gao@intel.com>
Subject: [PATCH 2/2] BaseTools: Make brotli a submodule
Use submodule way to access brotli in BaseTools based on
brotli version 666c3280cc11dc433c303d79a83d4ffbdd12cc8d.
https://bugzilla.tianocore.org/show_bug.cgi?id=2558
Cc: Bob Feng <bob.c.feng@intel.com>
Cc: Liming Gao <liming.gao@intel.com>
Signed-off-by: Shenglei Zhang <shenglei.zhang@intel.com>
---
.../C/BrotliCompress/common/dictionary.c | 5905 -----------------
.../C/BrotliCompress/common/transform.c | 235 -
.../Source/C/BrotliCompress/dec/bit_reader.c | 48 -
.../Source/C/BrotliCompress/dec/decode.c | 2497 -------
.../Source/C/BrotliCompress/dec/huffman.c | 356 -
BaseTools/Source/C/BrotliCompress/dec/state.c | 164 -
.../BrotliCompress/enc/backward_references.c | 144 -
.../enc/backward_references_hq.c | 830 ---
.../Source/C/BrotliCompress/enc/bit_cost.c | 35 -
.../C/BrotliCompress/enc/block_splitter.c | 194 -
.../C/BrotliCompress/enc/brotli_bit_stream.c | 1331 ----
.../Source/C/BrotliCompress/enc/cluster.c | 56 -
.../C/BrotliCompress/enc/compress_fragment.c | 790 ---
.../enc/compress_fragment_two_pass.c | 645 --
.../C/BrotliCompress/enc/dictionary_hash.c | 1120 ----
.../Source/C/BrotliCompress/enc/encode.c | 1864 ------
.../C/BrotliCompress/enc/encoder_dict.c | 32 -
.../C/BrotliCompress/enc/entropy_encode.c | 501 --
.../Source/C/BrotliCompress/enc/histogram.c | 100 -
.../C/BrotliCompress/enc/literal_cost.c | 175 -
.../Source/C/BrotliCompress/enc/memory.c | 170 -
.../Source/C/BrotliCompress/enc/metablock.c | 667 --
.../Source/C/BrotliCompress/enc/static_dict.c | 486 --
.../Source/C/BrotliCompress/enc/utf8_util.c | 85 -
.../Source/C/BrotliCompress/tools/brotli.c | 1143 ----
.gitmodules | 3 +
BaseTools/Source/C/BrotliCompress/GNUmakefile | 54 +-
BaseTools/Source/C/BrotliCompress/LICENSE | 19 -
BaseTools/Source/C/BrotliCompress/Makefile | 52 +-
BaseTools/Source/C/BrotliCompress/README.md | 26 -
BaseTools/Source/C/BrotliCompress/ReadMe.txt | 2 -
BaseTools/Source/C/BrotliCompress/brotli | 1 +
.../C/BrotliCompress/common/constants.h | 64 -
.../Source/C/BrotliCompress/common/context.h | 261 -
.../C/BrotliCompress/common/dictionary.h | 64 -
.../Source/C/BrotliCompress/common/platform.h | 558 --
.../C/BrotliCompress/common/transform.h | 80 -
.../Source/C/BrotliCompress/common/version.h | 26 -
.../Source/C/BrotliCompress/dec/bit_reader.h | 309 -
.../Source/C/BrotliCompress/dec/huffman.h | 72 -
.../Source/C/BrotliCompress/dec/prefix.h | 750 ---
BaseTools/Source/C/BrotliCompress/dec/state.h | 258 -
.../brotli-comparison-study-2015-09-22.pdf | Bin 215208 -> 0 bytes
.../BrotliCompress/enc/backward_references.h | 38 -
.../enc/backward_references_hq.h | 93 -
.../enc/backward_references_inc.h | 153 -
.../Source/C/BrotliCompress/enc/bit_cost.h | 63 -
.../C/BrotliCompress/enc/bit_cost_inc.h | 127 -
.../C/BrotliCompress/enc/block_encoder_inc.h | 34 -
.../C/BrotliCompress/enc/block_splitter.h | 51 -
.../C/BrotliCompress/enc/block_splitter_inc.h | 431 --
.../C/BrotliCompress/enc/brotli_bit_stream.h | 84 -
.../Source/C/BrotliCompress/enc/cluster.h | 48 -
.../Source/C/BrotliCompress/enc/cluster_inc.h | 317 -
.../Source/C/BrotliCompress/enc/command.h | 190 -
.../C/BrotliCompress/enc/compress_fragment.h | 61 -
.../enc/compress_fragment_two_pass.h | 54 -
.../C/BrotliCompress/enc/dictionary_hash.h | 24 -
.../C/BrotliCompress/enc/encoder_dict.h | 41 -
.../C/BrotliCompress/enc/entropy_encode.h | 122 -
.../enc/entropy_encode_static.h | 539 --
.../Source/C/BrotliCompress/enc/fast_log.h | 147 -
.../C/BrotliCompress/enc/find_match_length.h | 80 -
BaseTools/Source/C/BrotliCompress/enc/hash.h | 497 --
.../C/BrotliCompress/enc/hash_composite_inc.h | 133 -
.../enc/hash_forgetful_chain_inc.h | 254 -
.../enc/hash_longest_match64_inc.h | 266 -
.../enc/hash_longest_match_inc.h | 258 -
.../enc/hash_longest_match_quickly_inc.h | 235 -
.../C/BrotliCompress/enc/hash_rolling_inc.h | 215 -
.../enc/hash_to_binary_tree_inc.h | 327 -
.../Source/C/BrotliCompress/enc/histogram.h | 63 -
.../C/BrotliCompress/enc/histogram_inc.h | 51 -
.../C/BrotliCompress/enc/literal_cost.h | 30 -
.../Source/C/BrotliCompress/enc/memory.h | 102 -
.../Source/C/BrotliCompress/enc/metablock.h | 105 -
.../C/BrotliCompress/enc/metablock_inc.h | 183 -
.../Source/C/BrotliCompress/enc/params.h | 44 -
.../Source/C/BrotliCompress/enc/prefix.h | 53 -
.../Source/C/BrotliCompress/enc/quality.h | 165 -
.../Source/C/BrotliCompress/enc/ringbuffer.h | 164 -
.../Source/C/BrotliCompress/enc/static_dict.h | 40 -
.../C/BrotliCompress/enc/static_dict_lut.h | 5864 ----------------
.../Source/C/BrotliCompress/enc/utf8_util.h | 32 -
.../Source/C/BrotliCompress/enc/write_bits.h | 85 -
.../C/BrotliCompress/include/brotli/decode.h | 344 -
.../C/BrotliCompress/include/brotli/encode.h | 427 --
.../C/BrotliCompress/include/brotli/port.h | 274 -
.../C/BrotliCompress/include/brotli/types.h | 83 -
.../Source/C/BrotliCompress/tools/brotli.md | 107 -
Readme.md | 3 +-
91 files changed, 59 insertions(+), 35214 deletions(-)
delete mode 100644 BaseTools/Source/C/BrotliCompress/common/dictionary.c
delete mode 100644 BaseTools/Source/C/BrotliCompress/common/transform.c
delete mode 100644 BaseTools/Source/C/BrotliCompress/dec/bit_reader.c
delete mode 100644 BaseTools/Source/C/BrotliCompress/dec/decode.c
delete mode 100644 BaseTools/Source/C/BrotliCompress/dec/huffman.c
delete mode 100644 BaseTools/Source/C/BrotliCompress/dec/state.c
delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/backward_references.c
delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/backward_references_hq.c
delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/bit_cost.c
delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/block_splitter.c
delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/brotli_bit_stream.c
delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/cluster.c
delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/compress_fragment.c
delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/compress_fragment_two_pass.c
delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/dictionary_hash.c
delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/encode.c
delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/encoder_dict.c
delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/entropy_encode.c
delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/histogram.c
delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/literal_cost.c
delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/memory.c
delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/metablock.c
delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/static_dict.c
delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/utf8_util.c
delete mode 100644 BaseTools/Source/C/BrotliCompress/tools/brotli.c
delete mode 100644 BaseTools/Source/C/BrotliCompress/LICENSE
delete mode 100644 BaseTools/Source/C/BrotliCompress/README.md
delete mode 100644 BaseTools/Source/C/BrotliCompress/ReadMe.txt
create mode 160000 BaseTools/Source/C/BrotliCompress/brotli
delete mode 100644 BaseTools/Source/C/BrotliCompress/common/constants.h
delete mode 100644 BaseTools/Source/C/BrotliCompress/common/context.h
delete mode 100644 BaseTools/Source/C/BrotliCompress/common/dictionary.h
delete mode 100644 BaseTools/Source/C/BrotliCompress/common/platform.h
delete mode 100644 BaseTools/Source/C/BrotliCompress/common/transform.h
delete mode 100644 BaseTools/Source/C/BrotliCompress/common/version.h
delete mode 100644 BaseTools/Source/C/BrotliCompress/dec/bit_reader.h
delete mode 100644 BaseTools/Source/C/BrotliCompress/dec/huffman.h
delete mode 100644 BaseTools/Source/C/BrotliCompress/dec/prefix.h
delete mode 100644 BaseTools/Source/C/BrotliCompress/dec/state.h
delete mode 100644 BaseTools/Source/C/BrotliCompress/docs/brotli-comparison-study-2015-09-22.pdf
delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/backward_references.h
delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/backward_references_hq.h
delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/backward_references_inc.h
delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/bit_cost.h
delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/bit_cost_inc.h
delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/block_encoder_inc.h
delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/block_splitter.h
delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/block_splitter_inc.h
delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/brotli_bit_stream.h
delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/cluster.h
delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/cluster_inc.h
delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/command.h
delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/compress_fragment.h
delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/compress_fragment_two_pass.h
delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/dictionary_hash.h
delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/encoder_dict.h
delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/entropy_encode.h
delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/entropy_encode_static.h
delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/fast_log.h
delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/find_match_length.h
delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/hash.h
delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/hash_composite_inc.h
delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/hash_forgetful_chain_inc.h
delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/hash_longest_match64_inc.h
delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/hash_longest_match_inc.h
delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/hash_longest_match_quickly_inc.h
delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/hash_rolling_inc.h
delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/hash_to_binary_tree_inc.h
delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/histogram.h
delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/histogram_inc.h
delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/literal_cost.h
delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/memory.h
delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/metablock.h
delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/metablock_inc.h
delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/params.h
delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/prefix.h
delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/quality.h
delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/ringbuffer.h
delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/static_dict.h
delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/static_dict_lut.h
delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/utf8_util.h
delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/write_bits.h
delete mode 100644 BaseTools/Source/C/BrotliCompress/include/brotli/decode.h
delete mode 100644 BaseTools/Source/C/BrotliCompress/include/brotli/encode.h
delete mode 100644 BaseTools/Source/C/BrotliCompress/include/brotli/port.h
delete mode 100644 BaseTools/Source/C/BrotliCompress/include/brotli/types.h
delete mode 100644 BaseTools/Source/C/BrotliCompress/tools/brotli.md
diff --git a/BaseTools/Source/C/BrotliCompress/common/dictionary.c b/BaseTools/Source/C/BrotliCompress/common/dictionary.c
deleted file mode 100644
index 7fd076194825..000000000000
--- a/BaseTools/Source/C/BrotliCompress/common/dictionary.c
+++ /dev/null
@@ -1,5905 +0,0 @@
-/* Copyright 2013 Google Inc. All Rights Reserved.
-
- Distributed under MIT license.
- See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
-*/
-
-#include "./dictionary.h"
-
-#if defined(__cplusplus) || defined(c_plusplus)
-extern "C" {
-#endif
-
-#ifndef BROTLI_EXTERNAL_DICTIONARY_DATA
-static const uint8_t kBrotliDictionaryData[] =
-{
-116,105,109,101,100,111,119,110,108,105,102,101,108,101,102,116,98,97,99,107,99,
-111,100,101,100,97,116,97,115,104,111,119,111,110,108,121,115,105,116,101,99,105
-,116,121,111,112,101,110,106,117,115,116,108,105,107,101,102,114,101,101,119,111
-,114,107,116,101,120,116,121,101,97,114,111,118,101,114,98,111,100,121,108,111,
-118,101,102,111,114,109,98,111,111,107,112,108,97,121,108,105,118,101,108,105,
-110,101,104,101,108,112,104,111,109,101,115,105,100,101,109,111,114,101,119,111,
-114,100,108,111,110,103,116,104,101,109,118,105,101,119,102,105,110,100,112,97,
-103,101,100,97,121,115,102,117,108,108,104,101,97,100,116,101,114,109,101,97,99,
-104,97,114,101,97,102,114,111,109,116,114,117,101,109,97,114,107,97,98,108,101,
-117,112,111,110,104,105,103,104,100,97,116,101,108,97,110,100,110,101,119,115,
-101,118,101,110,110,101,120,116,99,97,115,101,98,111,116,104,112,111,115,116,117
-,115,101,100,109,97,100,101,104,97,110,100,104,101,114,101,119,104,97,116,110,97
-,109,101,76,105,110,107,98,108,111,103,115,105,122,101,98,97,115,101,104,101,108
-,100,109,97,107,101,109,97,105,110,117,115,101,114,39,41,32,43,104,111,108,100,
-101,110,100,115,119,105,116,104,78,101,119,115,114,101,97,100,119,101,114,101,
-115,105,103,110,116,97,107,101,104,97,118,101,103,97,109,101,115,101,101,110,99,
-97,108,108,112,97,116,104,119,101,108,108,112,108,117,115,109,101,110,117,102,
-105,108,109,112,97,114,116,106,111,105,110,116,104,105,115,108,105,115,116,103,
-111,111,100,110,101,101,100,119,97,121,115,119,101,115,116,106,111,98,115,109,
-105,110,100,97,108,115,111,108,111,103,111,114,105,99,104,117,115,101,115,108,97
-,115,116,116,101,97,109,97,114,109,121,102,111,111,100,107,105,110,103,119,105,
-108,108,101,97,115,116,119,97,114,100,98,101,115,116,102,105,114,101,80,97,103,
-101,107,110,111,119,97,119,97,121,46,112,110,103,109,111,118,101,116,104,97,110,
-108,111,97,100,103,105,118,101,115,101,108,102,110,111,116,101,109,117,99,104,
-102,101,101,100,109,97,110,121,114,111,99,107,105,99,111,110,111,110,99,101,108,
-111,111,107,104,105,100,101,100,105,101,100,72,111,109,101,114,117,108,101,104,
-111,115,116,97,106,97,120,105,110,102,111,99,108,117,98,108,97,119,115,108,101,
-115,115,104,97,108,102,115,111,109,101,115,117,99,104,122,111,110,101,49,48,48,
-37,111,110,101,115,99,97,114,101,84,105,109,101,114,97,99,101,98,108,117,101,102
-,111,117,114,119,101,101,107,102,97,99,101,104,111,112,101,103,97,118,101,104,97
-,114,100,108,111,115,116,119,104,101,110,112,97,114,107,107,101,112,116,112,97,
-115,115,115,104,105,112,114,111,111,109,72,84,77,76,112,108,97,110,84,121,112,
-101,100,111,110,101,115,97,118,101,107,101,101,112,102,108,97,103,108,105,110,
-107,115,111,108,100,102,105,118,101,116,111,111,107,114,97,116,101,116,111,119,
-110,106,117,109,112,116,104,117,115,100,97,114,107,99,97,114,100,102,105,108,101
-,102,101,97,114,115,116,97,121,107,105,108,108,116,104,97,116,102,97,108,108,97,
-117,116,111,101,118,101,114,46,99,111,109,116,97,108,107,115,104,111,112,118,111
-,116,101,100,101,101,112,109,111,100,101,114,101,115,116,116,117,114,110,98,111,
-114,110,98,97,110,100,102,101,108,108,114,111,115,101,117,114,108,40,115,107,105
-,110,114,111,108,101,99,111,109,101,97,99,116,115,97,103,101,115,109,101,101,116
-,103,111,108,100,46,106,112,103,105,116,101,109,118,97,114,121,102,101,108,116,
-116,104,101,110,115,101,110,100,100,114,111,112,86,105,101,119,99,111,112,121,49
-,46,48,34,60,47,97,62,115,116,111,112,101,108,115,101,108,105,101,115,116,111,
-117,114,112,97,99,107,46,103,105,102,112,97,115,116,99,115,115,63,103,114,97,121
-,109,101,97,110,38,103,116,59,114,105,100,101,115,104,111,116,108,97,116,101,115
-,97,105,100,114,111,97,100,118,97,114,32,102,101,101,108,106,111,104,110,114,105
-,99,107,112,111,114,116,102,97,115,116,39,85,65,45,100,101,97,100,60,47,98,62,
-112,111,111,114,98,105,108,108,116,121,112,101,85,46,83,46,119,111,111,100,109,
-117,115,116,50,112,120,59,73,110,102,111,114,97,110,107,119,105,100,101,119,97,
-110,116,119,97,108,108,108,101,97,100,91,48,93,59,112,97,117,108,119,97,118,101,
-115,117,114,101,36,40,39,35,119,97,105,116,109,97,115,115,97,114,109,115,103,111
-,101,115,103,97,105,110,108,97,110,103,112,97,105,100,33,45,45,32,108,111,99,107
-,117,110,105,116,114,111,111,116,119,97,108,107,102,105,114,109,119,105,102,101,
-120,109,108,34,115,111,110,103,116,101,115,116,50,48,112,120,107,105,110,100,114
-,111,119,115,116,111,111,108,102,111,110,116,109,97,105,108,115,97,102,101,115,
-116,97,114,109,97,112,115,99,111,114,101,114,97,105,110,102,108,111,119,98,97,98
-,121,115,112,97,110,115,97,121,115,52,112,120,59,54,112,120,59,97,114,116,115,
-102,111,111,116,114,101,97,108,119,105,107,105,104,101,97,116,115,116,101,112,
-116,114,105,112,111,114,103,47,108,97,107,101,119,101,97,107,116,111,108,100,70,
-111,114,109,99,97,115,116,102,97,110,115,98,97,110,107,118,101,114,121,114,117,
-110,115,106,117,108,121,116,97,115,107,49,112,120,59,103,111,97,108,103,114,101,
-119,115,108,111,119,101,100,103,101,105,100,61,34,115,101,116,115,53,112,120,59,
-46,106,115,63,52,48,112,120,105,102,32,40,115,111,111,110,115,101,97,116,110,111
-,110,101,116,117,98,101,122,101,114,111,115,101,110,116,114,101,101,100,102,97,
-99,116,105,110,116,111,103,105,102,116,104,97,114,109,49,56,112,120,99,97,109,
-101,104,105,108,108,98,111,108,100,122,111,111,109,118,111,105,100,101,97,115,
-121,114,105,110,103,102,105,108,108,112,101,97,107,105,110,105,116,99,111,115,
-116,51,112,120,59,106,97,99,107,116,97,103,115,98,105,116,115,114,111,108,108,
-101,100,105,116,107,110,101,119,110,101,97,114,60,33,45,45,103,114,111,119,74,83
-,79,78,100,117,116,121,78,97,109,101,115,97,108,101,121,111,117,32,108,111,116,
-115,112,97,105,110,106,97,122,122,99,111,108,100,101,121,101,115,102,105,115,104
-,119,119,119,46,114,105,115,107,116,97,98,115,112,114,101,118,49,48,112,120,114,
-105,115,101,50,53,112,120,66,108,117,101,100,105,110,103,51,48,48,44,98,97,108,
-108,102,111,114,100,101,97,114,110,119,105,108,100,98,111,120,46,102,97,105,114,
-108,97,99,107,118,101,114,115,112,97,105,114,106,117,110,101,116,101,99,104,105,
-102,40,33,112,105,99,107,101,118,105,108,36,40,34,35,119,97,114,109,108,111,114,
-100,100,111,101,115,112,117,108,108,44,48,48,48,105,100,101,97,100,114,97,119,
-104,117,103,101,115,112,111,116,102,117,110,100,98,117,114,110,104,114,101,102,
-99,101,108,108,107,101,121,115,116,105,99,107,104,111,117,114,108,111,115,115,
-102,117,101,108,49,50,112,120,115,117,105,116,100,101,97,108,82,83,83,34,97,103,
-101,100,103,114,101,121,71,69,84,34,101,97,115,101,97,105,109,115,103,105,114,
-108,97,105,100,115,56,112,120,59,110,97,118,121,103,114,105,100,116,105,112,115,
-35,57,57,57,119,97,114,115,108,97,100,121,99,97,114,115,41,59,32,125,112,104,112
-,63,104,101,108,108,116,97,108,108,119,104,111,109,122,104,58,229,42,47,13,10,32
-,49,48,48,104,97,108,108,46,10,10,65,55,112,120,59,112,117,115,104,99,104,97,116
-,48,112,120,59,99,114,101,119,42,47,60,47,104,97,115,104,55,53,112,120,102,108,
-97,116,114,97,114,101,32,38,38,32,116,101,108,108,99,97,109,112,111,110,116,111,
-108,97,105,100,109,105,115,115,115,107,105,112,116,101,110,116,102,105,110,101,
-109,97,108,101,103,101,116,115,112,108,111,116,52,48,48,44,13,10,13,10,99,111,
-111,108,102,101,101,116,46,112,104,112,60,98,114,62,101,114,105,99,109,111,115,
-116,103,117,105,100,98,101,108,108,100,101,115,99,104,97,105,114,109,97,116,104,
-97,116,111,109,47,105,109,103,38,35,56,50,108,117,99,107,99,101,110,116,48,48,48
-,59,116,105,110,121,103,111,110,101,104,116,109,108,115,101,108,108,100,114,117,
-103,70,82,69,69,110,111,100,101,110,105,99,107,63,105,100,61,108,111,115,101,110
-,117,108,108,118,97,115,116,119,105,110,100,82,83,83,32,119,101,97,114,114,101,
-108,121,98,101,101,110,115,97,109,101,100,117,107,101,110,97,115,97,99,97,112,
-101,119,105,115,104,103,117,108,102,84,50,51,58,104,105,116,115,115,108,111,116,
-103,97,116,101,107,105,99,107,98,108,117,114,116,104,101,121,49,53,112,120,39,39
-,41,59,41,59,34,62,109,115,105,101,119,105,110,115,98,105,114,100,115,111,114,
-116,98,101,116,97,115,101,101,107,84,49,56,58,111,114,100,115,116,114,101,101,
-109,97,108,108,54,48,112,120,102,97,114,109,226,128,153,115,98,111,121,115,91,48
-,93,46,39,41,59,34,80,79,83,84,98,101,97,114,107,105,100,115,41,59,125,125,109,
-97,114,121,116,101,110,100,40,85,75,41,113,117,97,100,122,104,58,230,45,115,105,
-122,45,45,45,45,112,114,111,112,39,41,59,13,108,105,102,116,84,49,57,58,118,105,
-99,101,97,110,100,121,100,101,98,116,62,82,83,83,112,111,111,108,110,101,99,107,
-98,108,111,119,84,49,54,58,100,111,111,114,101,118,97,108,84,49,55,58,108,101,
-116,115,102,97,105,108,111,114,97,108,112,111,108,108,110,111,118,97,99,111,108,
-115,103,101,110,101,32,226,128,148,115,111,102,116,114,111,109,101,116,105,108,
-108,114,111,115,115,60,104,51,62,112,111,117,114,102,97,100,101,112,105,110,107,
-60,116,114,62,109,105,110,105,41,124,33,40,109,105,110,101,122,104,58,232,98,97,
-114,115,104,101,97,114,48,48,41,59,109,105,108,107,32,45,45,62,105,114,111,110,
-102,114,101,100,100,105,115,107,119,101,110,116,115,111,105,108,112,117,116,115,
-47,106,115,47,104,111,108,121,84,50,50,58,73,83,66,78,84,50,48,58,97,100,97,109,
-115,101,101,115,60,104,50,62,106,115,111,110,39,44,32,39,99,111,110,116,84,50,49
-,58,32,82,83,83,108,111,111,112,97,115,105,97,109,111,111,110,60,47,112,62,115,
-111,117,108,76,73,78,69,102,111,114,116,99,97,114,116,84,49,52,58,60,104,49,62,
-56,48,112,120,33,45,45,60,57,112,120,59,84,48,52,58,109,105,107,101,58,52,54,90,
-110,105,99,101,105,110,99,104,89,111,114,107,114,105,99,101,122,104,58,228,39,41
-,41,59,112,117,114,101,109,97,103,101,112,97,114,97,116,111,110,101,98,111,110,
-100,58,51,55,90,95,111,102,95,39,93,41,59,48,48,48,44,122,104,58,231,116,97,110,
-107,121,97,114,100,98,111,119,108,98,117,115,104,58,53,54,90,74,97,118,97,51,48,
-112,120,10,124,125,10,37,67,51,37,58,51,52,90,106,101,102,102,69,88,80,73,99,97,
-115,104,118,105,115,97,103,111,108,102,115,110,111,119,122,104,58,233,113,117,
-101,114,46,99,115,115,115,105,99,107,109,101,97,116,109,105,110,46,98,105,110,
-100,100,101,108,108,104,105,114,101,112,105,99,115,114,101,110,116,58,51,54,90,
-72,84,84,80,45,50,48,49,102,111,116,111,119,111,108,102,69,78,68,32,120,98,111,
-120,58,53,52,90,66,79,68,89,100,105,99,107,59,10,125,10,101,120,105,116,58,51,53
-,90,118,97,114,115,98,101,97,116,39,125,41,59,100,105,101,116,57,57,57,59,97,110
-,110,101,125,125,60,47,91,105,93,46,76,97,110,103,107,109,194,178,119,105,114,
-101,116,111,121,115,97,100,100,115,115,101,97,108,97,108,101,120,59,10,9,125,101
-,99,104,111,110,105,110,101,46,111,114,103,48,48,53,41,116,111,110,121,106,101,
-119,115,115,97,110,100,108,101,103,115,114,111,111,102,48,48,48,41,32,50,48,48,
-119,105,110,101,103,101,97,114,100,111,103,115,98,111,111,116,103,97,114,121,99,
-117,116,115,116,121,108,101,116,101,109,112,116,105,111,110,46,120,109,108,99,
-111,99,107,103,97,110,103,36,40,39,46,53,48,112,120,80,104,46,68,109,105,115,99,
-97,108,97,110,108,111,97,110,100,101,115,107,109,105,108,101,114,121,97,110,117,
-110,105,120,100,105,115,99,41,59,125,10,100,117,115,116,99,108,105,112,41,46,10,
-10,55,48,112,120,45,50,48,48,68,86,68,115,55,93,62,60,116,97,112,101,100,101,109
-,111,105,43,43,41,119,97,103,101,101,117,114,111,112,104,105,108,111,112,116,115
-,104,111,108,101,70,65,81,115,97,115,105,110,45,50,54,84,108,97,98,115,112,101,
-116,115,85,82,76,32,98,117,108,107,99,111,111,107,59,125,13,10,72,69,65,68,91,48
-,93,41,97,98,98,114,106,117,97,110,40,49,57,56,108,101,115,104,116,119,105,110,
-60,47,105,62,115,111,110,121,103,117,121,115,102,117,99,107,112,105,112,101,124,
-45,10,33,48,48,50,41,110,100,111,119,91,49,93,59,91,93,59,10,76,111,103,32,115,
-97,108,116,13,10,9,9,98,97,110,103,116,114,105,109,98,97,116,104,41,123,13,10,48
-,48,112,120,10,125,41,59,107,111,58,236,102,101,101,115,97,100,62,13,115,58,47,
-47,32,91,93,59,116,111,108,108,112,108,117,103,40,41,123,10,123,13,10,32,46,106,
-115,39,50,48,48,112,100,117,97,108,98,111,97,116,46,74,80,71,41,59,10,125,113,
-117,111,116,41,59,10,10,39,41,59,10,13,10,125,13,50,48,49,52,50,48,49,53,50,48,
-49,54,50,48,49,55,50,48,49,56,50,48,49,57,50,48,50,48,50,48,50,49,50,48,50,50,50
-,48,50,51,50,48,50,52,50,48,50,53,50,48,50,54,50,48,50,55,50,48,50,56,50,48,50,
-57,50,48,51,48,50,48,51,49,50,48,51,50,50,48,51,51,50,48,51,52,50,48,51,53,50,48
-,51,54,50,48,51,55,50,48,49,51,50,48,49,50,50,48,49,49,50,48,49,48,50,48,48,57,
-50,48,48,56,50,48,48,55,50,48,48,54,50,48,48,53,50,48,48,52,50,48,48,51,50,48,48
-,50,50,48,48,49,50,48,48,48,49,57,57,57,49,57,57,56,49,57,57,55,49,57,57,54,49,
-57,57,53,49,57,57,52,49,57,57,51,49,57,57,50,49,57,57,49,49,57,57,48,49,57,56,57
-,49,57,56,56,49,57,56,55,49,57,56,54,49,57,56,53,49,57,56,52,49,57,56,51,49,57,
-56,50,49,57,56,49,49,57,56,48,49,57,55,57,49,57,55,56,49,57,55,55,49,57,55,54,49
-,57,55,53,49,57,55,52,49,57,55,51,49,57,55,50,49,57,55,49,49,57,55,48,49,57,54,
-57,49,57,54,56,49,57,54,55,49,57,54,54,49,57,54,53,49,57,54,52,49,57,54,51,49,57
-,54,50,49,57,54,49,49,57,54,48,49,57,53,57,49,57,53,56,49,57,53,55,49,57,53,54,
-49,57,53,53,49,57,53,52,49,57,53,51,49,57,53,50,49,57,53,49,49,57,53,48,49,48,48
-,48,49,48,50,52,49,51,57,52,48,48,48,48,57,57,57,57,99,111,109,111,109,195,161,
-115,101,115,116,101,101,115,116,97,112,101,114,111,116,111,100,111,104,97,99,101
-,99,97,100,97,97,195,177,111,98,105,101,110,100,195,173,97,97,115,195,173,118,
-105,100,97,99,97,115,111,111,116,114,111,102,111,114,111,115,111,108,111,111,116
-,114,97,99,117,97,108,100,105,106,111,115,105,100,111,103,114,97,110,116,105,112
-,111,116,101,109,97,100,101,98,101,97,108,103,111,113,117,195,169,101,115,116,
-111,110,97,100,97,116,114,101,115,112,111,99,111,99,97,115,97,98,97,106,111,116,
-111,100,97,115,105,110,111,97,103,117,97,112,117,101,115,117,110,111,115,97,110,
-116,101,100,105,99,101,108,117,105,115,101,108,108,97,109,97,121,111,122,111,110
-,97,97,109,111,114,112,105,115,111,111,98,114,97,99,108,105,99,101,108,108,111,
-100,105,111,115,104,111,114,97,99,97,115,105,208,183,208,176,208,189,208,176,208
-,190,208,188,209,128,208,176,209,128,209,131,209,130,208,176,208,189,208,181,208
-,191,208,190,208,190,209,130,208,184,208,183,208,189,208,190,208,180,208,190,209
-,130,208,190,208,182,208,181,208,190,208,189,208,184,209,133,208,157,208,176,208
-,181,208,181,208,177,209,139,208,188,209,139,208,146,209,139,209,129,208,190,208
-,178,209,139,208,178,208,190,208,157,208,190,208,190,208,177,208,159,208,190,208
-,187,208,184,208,189,208,184,208,160,208,164,208,157,208,181,208,156,209,139,209
-,130,209,139,208,158,208,189,208,184,208,188,208,180,208,176,208,151,208,176,208
-,148,208,176,208,157,209,131,208,158,208,177,209,130,208,181,208,152,208,183,208
-,181,208,185,208,189,209,131,208,188,208,188,208,162,209,139,209,131,208,182,217
-,129,217,138,216,163,217,134,217,133,216,167,217,133,216,185,217,131,217,132,216
-,163,217,136,216,177,216,175,217,138,216,167,217,129,217,137,217,135,217,136,217
-,132,217,133,217,132,217,131,216,167,217,136,217,132,217,135,216,168,216,179,216
-,167,217,132,216,165,217,134,217,135,217,138,216,163,217,138,217,130,216,175,217
-,135,217,132,216,171,217,133,216,168,217,135,217,132,217,136,217,132,217,138,216
-,168,217,132,216,167,217,138,216,168,217,131,216,180,217,138,216,167,217,133,216
-,163,217,133,217,134,216,170,216,168,217,138,217,132,217,134,216,173,216,168,217
-,135,217,133,217,133,216,180,217,136,216,180,102,105,114,115,116,118,105,100,101
-,111,108,105,103,104,116,119,111,114,108,100,109,101,100,105,97,119,104,105,116,
-101,99,108,111,115,101,98,108,97,99,107,114,105,103,104,116,115,109,97,108,108,
-98,111,111,107,115,112,108,97,99,101,109,117,115,105,99,102,105,101,108,100,111,
-114,100,101,114,112,111,105,110,116,118,97,108,117,101,108,101,118,101,108,116,
-97,98,108,101,98,111,97,114,100,104,111,117,115,101,103,114,111,117,112,119,111,
-114,107,115,121,101,97,114,115,115,116,97,116,101,116,111,100,97,121,119,97,116,
-101,114,115,116,97,114,116,115,116,121,108,101,100,101,97,116,104,112,111,119,
-101,114,112,104,111,110,101,110,105,103,104,116,101,114,114,111,114,105,110,112,
-117,116,97,98,111,117,116,116,101,114,109,115,116,105,116,108,101,116,111,111,
-108,115,101,118,101,110,116,108,111,99,97,108,116,105,109,101,115,108,97,114,103
-,101,119,111,114,100,115,103,97,109,101,115,115,104,111,114,116,115,112,97,99,
-101,102,111,99,117,115,99,108,101,97,114,109,111,100,101,108,98,108,111,99,107,
-103,117,105,100,101,114,97,100,105,111,115,104,97,114,101,119,111,109,101,110,97
-,103,97,105,110,109,111,110,101,121,105,109,97,103,101,110,97,109,101,115,121,
-111,117,110,103,108,105,110,101,115,108,97,116,101,114,99,111,108,111,114,103,
-114,101,101,110,102,114,111,110,116,38,97,109,112,59,119,97,116,99,104,102,111,
-114,99,101,112,114,105,99,101,114,117,108,101,115,98,101,103,105,110,97,102,116,
-101,114,118,105,115,105,116,105,115,115,117,101,97,114,101,97,115,98,101,108,111
-,119,105,110,100,101,120,116,111,116,97,108,104,111,117,114,115,108,97,98,101,
-108,112,114,105,110,116,112,114,101,115,115,98,117,105,108,116,108,105,110,107,
-115,115,112,101,101,100,115,116,117,100,121,116,114,97,100,101,102,111,117,110,
-100,115,101,110,115,101,117,110,100,101,114,115,104,111,119,110,102,111,114,109,
-115,114,97,110,103,101,97,100,100,101,100,115,116,105,108,108,109,111,118,101,
-100,116,97,107,101,110,97,98,111,118,101,102,108,97,115,104,102,105,120,101,100,
-111,102,116,101,110,111,116,104,101,114,118,105,101,119,115,99,104,101,99,107,
-108,101,103,97,108,114,105,118,101,114,105,116,101,109,115,113,117,105,99,107,
-115,104,97,112,101,104,117,109,97,110,101,120,105,115,116,103,111,105,110,103,
-109,111,118,105,101,116,104,105,114,100,98,97,115,105,99,112,101,97,99,101,115,
-116,97,103,101,119,105,100,116,104,108,111,103,105,110,105,100,101,97,115,119,
-114,111,116,101,112,97,103,101,115,117,115,101,114,115,100,114,105,118,101,115,
-116,111,114,101,98,114,101,97,107,115,111,117,116,104,118,111,105,99,101,115,105
-,116,101,115,109,111,110,116,104,119,104,101,114,101,98,117,105,108,100,119,104,
-105,99,104,101,97,114,116,104,102,111,114,117,109,116,104,114,101,101,115,112,
-111,114,116,112,97,114,116,121,67,108,105,99,107,108,111,119,101,114,108,105,118
-,101,115,99,108,97,115,115,108,97,121,101,114,101,110,116,114,121,115,116,111,
-114,121,117,115,97,103,101,115,111,117,110,100,99,111,117,114,116,121,111,117,
-114,32,98,105,114,116,104,112,111,112,117,112,116,121,112,101,115,97,112,112,108
-,121,73,109,97,103,101,98,101,105,110,103,117,112,112,101,114,110,111,116,101,
-115,101,118,101,114,121,115,104,111,119,115,109,101,97,110,115,101,120,116,114,
-97,109,97,116,99,104,116,114,97,99,107,107,110,111,119,110,101,97,114,108,121,98
-,101,103,97,110,115,117,112,101,114,112,97,112,101,114,110,111,114,116,104,108,
-101,97,114,110,103,105,118,101,110,110,97,109,101,100,101,110,100,101,100,84,101
-,114,109,115,112,97,114,116,115,71,114,111,117,112,98,114,97,110,100,117,115,105
-,110,103,119,111,109,97,110,102,97,108,115,101,114,101,97,100,121,97,117,100,105
-,111,116,97,107,101,115,119,104,105,108,101,46,99,111,109,47,108,105,118,101,100
-,99,97,115,101,115,100,97,105,108,121,99,104,105,108,100,103,114,101,97,116,106,
-117,100,103,101,116,104,111,115,101,117,110,105,116,115,110,101,118,101,114,98,
-114,111,97,100,99,111,97,115,116,99,111,118,101,114,97,112,112,108,101,102,105,
-108,101,115,99,121,99,108,101,115,99,101,110,101,112,108,97,110,115,99,108,105,
-99,107,119,114,105,116,101,113,117,101,101,110,112,105,101,99,101,101,109,97,105
-,108,102,114,97,109,101,111,108,100,101,114,112,104,111,116,111,108,105,109,105,
-116,99,97,99,104,101,99,105,118,105,108,115,99,97,108,101,101,110,116,101,114,
-116,104,101,109,101,116,104,101,114,101,116,111,117,99,104,98,111,117,110,100,
-114,111,121,97,108,97,115,107,101,100,119,104,111,108,101,115,105,110,99,101,115
-,116,111,99,107,32,110,97,109,101,102,97,105,116,104,104,101,97,114,116,101,109,
-112,116,121,111,102,102,101,114,115,99,111,112,101,111,119,110,101,100,109,105,
-103,104,116,97,108,98,117,109,116,104,105,110,107,98,108,111,111,100,97,114,114,
-97,121,109,97,106,111,114,116,114,117,115,116,99,97,110,111,110,117,110,105,111,
-110,99,111,117,110,116,118,97,108,105,100,115,116,111,110,101,83,116,121,108,101
-,76,111,103,105,110,104,97,112,112,121,111,99,99,117,114,108,101,102,116,58,102,
-114,101,115,104,113,117,105,116,101,102,105,108,109,115,103,114,97,100,101,110,
-101,101,100,115,117,114,98,97,110,102,105,103,104,116,98,97,115,105,115,104,111,
-118,101,114,97,117,116,111,59,114,111,117,116,101,46,104,116,109,108,109,105,120
-,101,100,102,105,110,97,108,89,111,117,114,32,115,108,105,100,101,116,111,112,
-105,99,98,114,111,119,110,97,108,111,110,101,100,114,97,119,110,115,112,108,105,
-116,114,101,97,99,104,82,105,103,104,116,100,97,116,101,115,109,97,114,99,104,
-113,117,111,116,101,103,111,111,100,115,76,105,110,107,115,100,111,117,98,116,97
-,115,121,110,99,116,104,117,109,98,97,108,108,111,119,99,104,105,101,102,121,111
-,117,116,104,110,111,118,101,108,49,48,112,120,59,115,101,114,118,101,117,110,
-116,105,108,104,97,110,100,115,67,104,101,99,107,83,112,97,99,101,113,117,101,
-114,121,106,97,109,101,115,101,113,117,97,108,116,119,105,99,101,48,44,48,48,48,
-83,116,97,114,116,112,97,110,101,108,115,111,110,103,115,114,111,117,110,100,101
-,105,103,104,116,115,104,105,102,116,119,111,114,116,104,112,111,115,116,115,108
-,101,97,100,115,119,101,101,107,115,97,118,111,105,100,116,104,101,115,101,109,
-105,108,101,115,112,108,97,110,101,115,109,97,114,116,97,108,112,104,97,112,108,
-97,110,116,109,97,114,107,115,114,97,116,101,115,112,108,97,121,115,99,108,97,
-105,109,115,97,108,101,115,116,101,120,116,115,115,116,97,114,115,119,114,111,
-110,103,60,47,104,51,62,116,104,105,110,103,46,111,114,103,47,109,117,108,116,
-105,104,101,97,114,100,80,111,119,101,114,115,116,97,110,100,116,111,107,101,110
-,115,111,108,105,100,40,116,104,105,115,98,114,105,110,103,115,104,105,112,115,
-115,116,97,102,102,116,114,105,101,100,99,97,108,108,115,102,117,108,108,121,102
-,97,99,116,115,97,103,101,110,116,84,104,105,115,32,47,47,45,45,62,97,100,109,
-105,110,101,103,121,112,116,69,118,101,110,116,49,53,112,120,59,69,109,97,105,
-108,116,114,117,101,34,99,114,111,115,115,115,112,101,110,116,98,108,111,103,115
-,98,111,120,34,62,110,111,116,101,100,108,101,97,118,101,99,104,105,110,97,115,
-105,122,101,115,103,117,101,115,116,60,47,104,52,62,114,111,98,111,116,104,101,
-97,118,121,116,114,117,101,44,115,101,118,101,110,103,114,97,110,100,99,114,105,
-109,101,115,105,103,110,115,97,119,97,114,101,100,97,110,99,101,112,104,97,115,
-101,62,60,33,45,45,101,110,95,85,83,38,35,51,57,59,50,48,48,112,120,95,110,97,
-109,101,108,97,116,105,110,101,110,106,111,121,97,106,97,120,46,97,116,105,111,
-110,115,109,105,116,104,85,46,83,46,32,104,111,108,100,115,112,101,116,101,114,
-105,110,100,105,97,110,97,118,34,62,99,104,97,105,110,115,99,111,114,101,99,111,
-109,101,115,100,111,105,110,103,112,114,105,111,114,83,104,97,114,101,49,57,57,
-48,115,114,111,109,97,110,108,105,115,116,115,106,97,112,97,110,102,97,108,108,
-115,116,114,105,97,108,111,119,110,101,114,97,103,114,101,101,60,47,104,50,62,97
-,98,117,115,101,97,108,101,114,116,111,112,101,114,97,34,45,47,47,87,99,97,114,
-100,115,104,105,108,108,115,116,101,97,109,115,80,104,111,116,111,116,114,117,
-116,104,99,108,101,97,110,46,112,104,112,63,115,97,105,110,116,109,101,116,97,
-108,108,111,117,105,115,109,101,97,110,116,112,114,111,111,102,98,114,105,101,
-102,114,111,119,34,62,103,101,110,114,101,116,114,117,99,107,108,111,111,107,115
-,86,97,108,117,101,70,114,97,109,101,46,110,101,116,47,45,45,62,10,60,116,114,
-121,32,123,10,118,97,114,32,109,97,107,101,115,99,111,115,116,115,112,108,97,105
-,110,97,100,117,108,116,113,117,101,115,116,116,114,97,105,110,108,97,98,111,114
-,104,101,108,112,115,99,97,117,115,101,109,97,103,105,99,109,111,116,111,114,116
-,104,101,105,114,50,53,48,112,120,108,101,97,115,116,115,116,101,112,115,67,111,
-117,110,116,99,111,117,108,100,103,108,97,115,115,115,105,100,101,115,102,117,
-110,100,115,104,111,116,101,108,97,119,97,114,100,109,111,117,116,104,109,111,
-118,101,115,112,97,114,105,115,103,105,118,101,115,100,117,116,99,104,116,101,
-120,97,115,102,114,117,105,116,110,117,108,108,44,124,124,91,93,59,116,111,112,
-34,62,10,60,33,45,45,80,79,83,84,34,111,99,101,97,110,60,98,114,47,62,102,108,
-111,111,114,115,112,101,97,107,100,101,112,116,104,32,115,105,122,101,98,97,110,
-107,115,99,97,116,99,104,99,104,97,114,116,50,48,112,120,59,97,108,105,103,110,
-100,101,97,108,115,119,111,117,108,100,53,48,112,120,59,117,114,108,61,34,112,97
-,114,107,115,109,111,117,115,101,77,111,115,116,32,46,46,46,60,47,97,109,111,110
-,103,98,114,97,105,110,98,111,100,121,32,110,111,110,101,59,98,97,115,101,100,99
-,97,114,114,121,100,114,97,102,116,114,101,102,101,114,112,97,103,101,95,104,111
-,109,101,46,109,101,116,101,114,100,101,108,97,121,100,114,101,97,109,112,114,
-111,118,101,106,111,105,110,116,60,47,116,114,62,100,114,117,103,115,60,33,45,45
-,32,97,112,114,105,108,105,100,101,97,108,97,108,108,101,110,101,120,97,99,116,
-102,111,114,116,104,99,111,100,101,115,108,111,103,105,99,86,105,101,119,32,115,
-101,101,109,115,98,108,97,110,107,112,111,114,116,115,32,40,50,48,48,115,97,118,
-101,100,95,108,105,110,107,103,111,97,108,115,103,114,97,110,116,103,114,101,101
-,107,104,111,109,101,115,114,105,110,103,115,114,97,116,101,100,51,48,112,120,59
-,119,104,111,115,101,112,97,114,115,101,40,41,59,34,32,66,108,111,99,107,108,105
-,110,117,120,106,111,110,101,115,112,105,120,101,108,39,41,59,34,62,41,59,105,
-102,40,45,108,101,102,116,100,97,118,105,100,104,111,114,115,101,70,111,99,117,
-115,114,97,105,115,101,98,111,120,101,115,84,114,97,99,107,101,109,101,110,116,
-60,47,101,109,62,98,97,114,34,62,46,115,114,99,61,116,111,119,101,114,97,108,116
-,61,34,99,97,98,108,101,104,101,110,114,121,50,52,112,120,59,115,101,116,117,112
-,105,116,97,108,121,115,104,97,114,112,109,105,110,111,114,116,97,115,116,101,
-119,97,110,116,115,116,104,105,115,46,114,101,115,101,116,119,104,101,101,108,
-103,105,114,108,115,47,99,115,115,47,49,48,48,37,59,99,108,117,98,115,115,116,
-117,102,102,98,105,98,108,101,118,111,116,101,115,32,49,48,48,48,107,111,114,101
-,97,125,41,59,13,10,98,97,110,100,115,113,117,101,117,101,61,32,123,125,59,56,48
-,112,120,59,99,107,105,110,103,123,13,10,9,9,97,104,101,97,100,99,108,111,99,107
-,105,114,105,115,104,108,105,107,101,32,114,97,116,105,111,115,116,97,116,115,70
-,111,114,109,34,121,97,104,111,111,41,91,48,93,59,65,98,111,117,116,102,105,110,
-100,115,60,47,104,49,62,100,101,98,117,103,116,97,115,107,115,85,82,76,32,61,99,
-101,108,108,115,125,41,40,41,59,49,50,112,120,59,112,114,105,109,101,116,101,108
-,108,115,116,117,114,110,115,48,120,54,48,48,46,106,112,103,34,115,112,97,105,
-110,98,101,97,99,104,116,97,120,101,115,109,105,99,114,111,97,110,103,101,108,45
-,45,62,60,47,103,105,102,116,115,115,116,101,118,101,45,108,105,110,107,98,111,
-100,121,46,125,41,59,10,9,109,111,117,110,116,32,40,49,57,57,70,65,81,60,47,114,
-111,103,101,114,102,114,97,110,107,67,108,97,115,115,50,56,112,120,59,102,101,
-101,100,115,60,104,49,62,60,115,99,111,116,116,116,101,115,116,115,50,50,112,120
-,59,100,114,105,110,107,41,32,124,124,32,108,101,119,105,115,115,104,97,108,108,
-35,48,51,57,59,32,102,111,114,32,108,111,118,101,100,119,97,115,116,101,48,48,
-112,120,59,106,97,58,227,130,115,105,109,111,110,60,102,111,110,116,114,101,112,
-108,121,109,101,101,116,115,117,110,116,101,114,99,104,101,97,112,116,105,103,
-104,116,66,114,97,110,100,41,32,33,61,32,100,114,101,115,115,99,108,105,112,115,
-114,111,111,109,115,111,110,107,101,121,109,111,98,105,108,109,97,105,110,46,78,
-97,109,101,32,112,108,97,116,101,102,117,110,110,121,116,114,101,101,115,99,111,
-109,47,34,49,46,106,112,103,119,109,111,100,101,112,97,114,97,109,83,84,65,82,84
-,108,101,102,116,32,105,100,100,101,110,44,32,50,48,49,41,59,10,125,10,102,111,
-114,109,46,118,105,114,117,115,99,104,97,105,114,116,114,97,110,115,119,111,114,
-115,116,80,97,103,101,115,105,116,105,111,110,112,97,116,99,104,60,33,45,45,10,
-111,45,99,97,99,102,105,114,109,115,116,111,117,114,115,44,48,48,48,32,97,115,
-105,97,110,105,43,43,41,123,97,100,111,98,101,39,41,91,48,93,105,100,61,49,48,98
-,111,116,104,59,109,101,110,117,32,46,50,46,109,105,46,112,110,103,34,107,101,
-118,105,110,99,111,97,99,104,67,104,105,108,100,98,114,117,99,101,50,46,106,112,
-103,85,82,76,41,43,46,106,112,103,124,115,117,105,116,101,115,108,105,99,101,104
-,97,114,114,121,49,50,48,34,32,115,119,101,101,116,116,114,62,13,10,110,97,109,
-101,61,100,105,101,103,111,112,97,103,101,32,115,119,105,115,115,45,45,62,10,10,
-35,102,102,102,59,34,62,76,111,103,46,99,111,109,34,116,114,101,97,116,115,104,
-101,101,116,41,32,38,38,32,49,52,112,120,59,115,108,101,101,112,110,116,101,110,
-116,102,105,108,101,100,106,97,58,227,131,105,100,61,34,99,78,97,109,101,34,119,
-111,114,115,101,115,104,111,116,115,45,98,111,120,45,100,101,108,116,97,10,38,
-108,116,59,98,101,97,114,115,58,52,56,90,60,100,97,116,97,45,114,117,114,97,108,
-60,47,97,62,32,115,112,101,110,100,98,97,107,101,114,115,104,111,112,115,61,32,
-34,34,59,112,104,112,34,62,99,116,105,111,110,49,51,112,120,59,98,114,105,97,110
-,104,101,108,108,111,115,105,122,101,61,111,61,37,50,70,32,106,111,105,110,109,
-97,121,98,101,60,105,109,103,32,105,109,103,34,62,44,32,102,106,115,105,109,103,
-34,32,34,41,91,48,93,77,84,111,112,66,84,121,112,101,34,110,101,119,108,121,68,
-97,110,115,107,99,122,101,99,104,116,114,97,105,108,107,110,111,119,115,60,47,
-104,53,62,102,97,113,34,62,122,104,45,99,110,49,48,41,59,10,45,49,34,41,59,116,
-121,112,101,61,98,108,117,101,115,116,114,117,108,121,100,97,118,105,115,46,106,
-115,39,59,62,13,10,60,33,115,116,101,101,108,32,121,111,117,32,104,50,62,13,10,
-102,111,114,109,32,106,101,115,117,115,49,48,48,37,32,109,101,110,117,46,13,10,9
-,13,10,119,97,108,101,115,114,105,115,107,115,117,109,101,110,116,100,100,105,
-110,103,98,45,108,105,107,116,101,97,99,104,103,105,102,34,32,118,101,103,97,115
-,100,97,110,115,107,101,101,115,116,105,115,104,113,105,112,115,117,111,109,105,
-115,111,98,114,101,100,101,115,100,101,101,110,116,114,101,116,111,100,111,115,
-112,117,101,100,101,97,195,177,111,115,101,115,116,195,161,116,105,101,110,101,
-104,97,115,116,97,111,116,114,111,115,112,97,114,116,101,100,111,110,100,101,110
-,117,101,118,111,104,97,99,101,114,102,111,114,109,97,109,105,115,109,111,109,
-101,106,111,114,109,117,110,100,111,97,113,117,195,173,100,195,173,97,115,115,
-195,179,108,111,97,121,117,100,97,102,101,99,104,97,116,111,100,97,115,116,97,
-110,116,111,109,101,110,111,115,100,97,116,111,115,111,116,114,97,115,115,105,
-116,105,111,109,117,99,104,111,97,104,111,114,97,108,117,103,97,114,109,97,121,
-111,114,101,115,116,111,115,104,111,114,97,115,116,101,110,101,114,97,110,116,
-101,115,102,111,116,111,115,101,115,116,97,115,112,97,195,173,115,110,117,101,
-118,97,115,97,108,117,100,102,111,114,111,115,109,101,100,105,111,113,117,105,
-101,110,109,101,115,101,115,112,111,100,101,114,99,104,105,108,101,115,101,114,
-195,161,118,101,99,101,115,100,101,99,105,114,106,111,115,195,169,101,115,116,97
-,114,118,101,110,116,97,103,114,117,112,111,104,101,99,104,111,101,108,108,111,
-115,116,101,110,103,111,97,109,105,103,111,99,111,115,97,115,110,105,118,101,108
-,103,101,110,116,101,109,105,115,109,97,97,105,114,101,115,106,117,108,105,111,
-116,101,109,97,115,104,97,99,105,97,102,97,118,111,114,106,117,110,105,111,108,
-105,98,114,101,112,117,110,116,111,98,117,101,110,111,97,117,116,111,114,97,98,
-114,105,108,98,117,101,110,97,116,101,120,116,111,109,97,114,122,111,115,97,98,
-101,114,108,105,115,116,97,108,117,101,103,111,99,195,179,109,111,101,110,101,
-114,111,106,117,101,103,111,112,101,114,195,186,104,97,98,101,114,101,115,116,
-111,121,110,117,110,99,97,109,117,106,101,114,118,97,108,111,114,102,117,101,114
-,97,108,105,98,114,111,103,117,115,116,97,105,103,117,97,108,118,111,116,111,115
-,99,97,115,111,115,103,117,195,173,97,112,117,101,100,111,115,111,109,111,115,97
-,118,105,115,111,117,115,116,101,100,100,101,98,101,110,110,111,99,104,101,98,
-117,115,99,97,102,97,108,116,97,101,117,114,111,115,115,101,114,105,101,100,105,
-99,104,111,99,117,114,115,111,99,108,97,118,101,99,97,115,97,115,108,101,195,179
-,110,112,108,97,122,111,108,97,114,103,111,111,98,114,97,115,118,105,115,116,97,
-97,112,111,121,111,106,117,110,116,111,116,114,97,116,97,118,105,115,116,111,99,
-114,101,97,114,99,97,109,112,111,104,101,109,111,115,99,105,110,99,111,99,97,114
-,103,111,112,105,115,111,115,111,114,100,101,110,104,97,99,101,110,195,161,114,
-101,97,100,105,115,99,111,112,101,100,114,111,99,101,114,99,97,112,117,101,100,
-97,112,97,112,101,108,109,101,110,111,114,195,186,116,105,108,99,108,97,114,111,
-106,111,114,103,101,99,97,108,108,101,112,111,110,101,114,116,97,114,100,101,110
-,97,100,105,101,109,97,114,99,97,115,105,103,117,101,101,108,108,97,115,115,105,
-103,108,111,99,111,99,104,101,109,111,116,111,115,109,97,100,114,101,99,108,97,
-115,101,114,101,115,116,111,110,105,195,177,111,113,117,101,100,97,112,97,115,97
-,114,98,97,110,99,111,104,105,106,111,115,118,105,97,106,101,112,97,98,108,111,
-195,169,115,116,101,118,105,101,110,101,114,101,105,110,111,100,101,106,97,114,
-102,111,110,100,111,99,97,110,97,108,110,111,114,116,101,108,101,116,114,97,99,
-97,117,115,97,116,111,109,97,114,109,97,110,111,115,108,117,110,101,115,97,117,
-116,111,115,118,105,108,108,97,118,101,110,100,111,112,101,115,97,114,116,105,
-112,111,115,116,101,110,103,97,109,97,114,99,111,108,108,101,118,97,112,97,100,
-114,101,117,110,105,100,111,118,97,109,111,115,122,111,110,97,115,97,109,98,111,
-115,98,97,110,100,97,109,97,114,105,97,97,98,117,115,111,109,117,99,104,97,115,
-117,98,105,114,114,105,111,106,97,118,105,118,105,114,103,114,97,100,111,99,104,
-105,99,97,97,108,108,195,173,106,111,118,101,110,100,105,99,104,97,101,115,116,
-97,110,116,97,108,101,115,115,97,108,105,114,115,117,101,108,111,112,101,115,111
-,115,102,105,110,101,115,108,108,97,109,97,98,117,115,99,111,195,169,115,116,97,
-108,108,101,103,97,110,101,103,114,111,112,108,97,122,97,104,117,109,111,114,112
-,97,103,97,114,106,117,110,116,97,100,111,98,108,101,105,115,108,97,115,98,111,
-108,115,97,98,97,195,177,111,104,97,98,108,97,108,117,99,104,97,195,129,114,101,
-97,100,105,99,101,110,106,117,103,97,114,110,111,116,97,115,118,97,108,108,101,
-97,108,108,195,161,99,97,114,103,97,100,111,108,111,114,97,98,97,106,111,101,115
-,116,195,169,103,117,115,116,111,109,101,110,116,101,109,97,114,105,111,102,105,
-114,109,97,99,111,115,116,111,102,105,99,104,97,112,108,97,116,97,104,111,103,97
-,114,97,114,116,101,115,108,101,121,101,115,97,113,117,101,108,109,117,115,101,
-111,98,97,115,101,115,112,111,99,111,115,109,105,116,97,100,99,105,101,108,111,
-99,104,105,99,111,109,105,101,100,111,103,97,110,97,114,115,97,110,116,111,101,
-116,97,112,97,100,101,98,101,115,112,108,97,121,97,114,101,100,101,115,115,105,
-101,116,101,99,111,114,116,101,99,111,114,101,97,100,117,100,97,115,100,101,115,
-101,111,118,105,101,106,111,100,101,115,101,97,97,103,117,97,115,38,113,117,111,
-116,59,100,111,109,97,105,110,99,111,109,109,111,110,115,116,97,116,117,115,101,
-118,101,110,116,115,109,97,115,116,101,114,115,121,115,116,101,109,97,99,116,105
-,111,110,98,97,110,110,101,114,114,101,109,111,118,101,115,99,114,111,108,108,
-117,112,100,97,116,101,103,108,111,98,97,108,109,101,100,105,117,109,102,105,108
-,116,101,114,110,117,109,98,101,114,99,104,97,110,103,101,114,101,115,117,108,
-116,112,117,98,108,105,99,115,99,114,101,101,110,99,104,111,111,115,101,110,111,
-114,109,97,108,116,114,97,118,101,108,105,115,115,117,101,115,115,111,117,114,99
-,101,116,97,114,103,101,116,115,112,114,105,110,103,109,111,100,117,108,101,109,
-111,98,105,108,101,115,119,105,116,99,104,112,104,111,116,111,115,98,111,114,100
-,101,114,114,101,103,105,111,110,105,116,115,101,108,102,115,111,99,105,97,108,
-97,99,116,105,118,101,99,111,108,117,109,110,114,101,99,111,114,100,102,111,108,
-108,111,119,116,105,116,108,101,62,101,105,116,104,101,114,108,101,110,103,116,
-104,102,97,109,105,108,121,102,114,105,101,110,100,108,97,121,111,117,116,97,117
-,116,104,111,114,99,114,101,97,116,101,114,101,118,105,101,119,115,117,109,109,
-101,114,115,101,114,118,101,114,112,108,97,121,101,100,112,108,97,121,101,114,
-101,120,112,97,110,100,112,111,108,105,99,121,102,111,114,109,97,116,100,111,117
-,98,108,101,112,111,105,110,116,115,115,101,114,105,101,115,112,101,114,115,111,
-110,108,105,118,105,110,103,100,101,115,105,103,110,109,111,110,116,104,115,102,
-111,114,99,101,115,117,110,105,113,117,101,119,101,105,103,104,116,112,101,111,
-112,108,101,101,110,101,114,103,121,110,97,116,117,114,101,115,101,97,114,99,104
-,102,105,103,117,114,101,104,97,118,105,110,103,99,117,115,116,111,109,111,102,
-102,115,101,116,108,101,116,116,101,114,119,105,110,100,111,119,115,117,98,109,
-105,116,114,101,110,100,101,114,103,114,111,117,112,115,117,112,108,111,97,100,
-104,101,97,108,116,104,109,101,116,104,111,100,118,105,100,101,111,115,115,99,
-104,111,111,108,102,117,116,117,114,101,115,104,97,100,111,119,100,101,98,97,116
-,101,118,97,108,117,101,115,79,98,106,101,99,116,111,116,104,101,114,115,114,105
-,103,104,116,115,108,101,97,103,117,101,99,104,114,111,109,101,115,105,109,112,
-108,101,110,111,116,105,99,101,115,104,97,114,101,100,101,110,100,105,110,103,
-115,101,97,115,111,110,114,101,112,111,114,116,111,110,108,105,110,101,115,113,
-117,97,114,101,98,117,116,116,111,110,105,109,97,103,101,115,101,110,97,98,108,
-101,109,111,118,105,110,103,108,97,116,101,115,116,119,105,110,116,101,114,70,
-114,97,110,99,101,112,101,114,105,111,100,115,116,114,111,110,103,114,101,112,
-101,97,116,76,111,110,100,111,110,100,101,116,97,105,108,102,111,114,109,101,100
-,100,101,109,97,110,100,115,101,99,117,114,101,112,97,115,115,101,100,116,111,
-103,103,108,101,112,108,97,99,101,115,100,101,118,105,99,101,115,116,97,116,105,
-99,99,105,116,105,101,115,115,116,114,101,97,109,121,101,108,108,111,119,97,116,
-116,97,99,107,115,116,114,101,101,116,102,108,105,103,104,116,104,105,100,100,
-101,110,105,110,102,111,34,62,111,112,101,110,101,100,117,115,101,102,117,108,
-118,97,108,108,101,121,99,97,117,115,101,115,108,101,97,100,101,114,115,101,99,
-114,101,116,115,101,99,111,110,100,100,97,109,97,103,101,115,112,111,114,116,115
-,101,120,99,101,112,116,114,97,116,105,110,103,115,105,103,110,101,100,116,104,
-105,110,103,115,101,102,102,101,99,116,102,105,101,108,100,115,115,116,97,116,
-101,115,111,102,102,105,99,101,118,105,115,117,97,108,101,100,105,116,111,114,
-118,111,108,117,109,101,82,101,112,111,114,116,109,117,115,101,117,109,109,111,
-118,105,101,115,112,97,114,101,110,116,97,99,99,101,115,115,109,111,115,116,108,
-121,109,111,116,104,101,114,34,32,105,100,61,34,109,97,114,107,101,116,103,114,
-111,117,110,100,99,104,97,110,99,101,115,117,114,118,101,121,98,101,102,111,114,
-101,115,121,109,98,111,108,109,111,109,101,110,116,115,112,101,101,99,104,109,
-111,116,105,111,110,105,110,115,105,100,101,109,97,116,116,101,114,67,101,110,
-116,101,114,111,98,106,101,99,116,101,120,105,115,116,115,109,105,100,100,108,
-101,69,117,114,111,112,101,103,114,111,119,116,104,108,101,103,97,99,121,109,97,
-110,110,101,114,101,110,111,117,103,104,99,97,114,101,101,114,97,110,115,119,101
-,114,111,114,105,103,105,110,112,111,114,116,97,108,99,108,105,101,110,116,115,
-101,108,101,99,116,114,97,110,100,111,109,99,108,111,115,101,100,116,111,112,105
-,99,115,99,111,109,105,110,103,102,97,116,104,101,114,111,112,116,105,111,110,
-115,105,109,112,108,121,114,97,105,115,101,100,101,115,99,97,112,101,99,104,111,
-115,101,110,99,104,117,114,99,104,100,101,102,105,110,101,114,101,97,115,111,110
-,99,111,114,110,101,114,111,117,116,112,117,116,109,101,109,111,114,121,105,102,
-114,97,109,101,112,111,108,105,99,101,109,111,100,101,108,115,78,117,109,98,101,
-114,100,117,114,105,110,103,111,102,102,101,114,115,115,116,121,108,101,115,107,
-105,108,108,101,100,108,105,115,116,101,100,99,97,108,108,101,100,115,105,108,
-118,101,114,109,97,114,103,105,110,100,101,108,101,116,101,98,101,116,116,101,
-114,98,114,111,119,115,101,108,105,109,105,116,115,71,108,111,98,97,108,115,105,
-110,103,108,101,119,105,100,103,101,116,99,101,110,116,101,114,98,117,100,103,
-101,116,110,111,119,114,97,112,99,114,101,100,105,116,99,108,97,105,109,115,101,
-110,103,105,110,101,115,97,102,101,116,121,99,104,111,105,99,101,115,112,105,114
-,105,116,45,115,116,121,108,101,115,112,114,101,97,100,109,97,107,105,110,103,
-110,101,101,100,101,100,114,117,115,115,105,97,112,108,101,97,115,101,101,120,
-116,101,110,116,83,99,114,105,112,116,98,114,111,107,101,110,97,108,108,111,119,
-115,99,104,97,114,103,101,100,105,118,105,100,101,102,97,99,116,111,114,109,101,
-109,98,101,114,45,98,97,115,101,100,116,104,101,111,114,121,99,111,110,102,105,
-103,97,114,111,117,110,100,119,111,114,107,101,100,104,101,108,112,101,100,67,
-104,117,114,99,104,105,109,112,97,99,116,115,104,111,117,108,100,97,108,119,97,
-121,115,108,111,103,111,34,32,98,111,116,116,111,109,108,105,115,116,34,62,41,
-123,118,97,114,32,112,114,101,102,105,120,111,114,97,110,103,101,72,101,97,100,
-101,114,46,112,117,115,104,40,99,111,117,112,108,101,103,97,114,100,101,110,98,
-114,105,100,103,101,108,97,117,110,99,104,82,101,118,105,101,119,116,97,107,105,
-110,103,118,105,115,105,111,110,108,105,116,116,108,101,100,97,116,105,110,103,
-66,117,116,116,111,110,98,101,97,117,116,121,116,104,101,109,101,115,102,111,114
-,103,111,116,83,101,97,114,99,104,97,110,99,104,111,114,97,108,109,111,115,116,
-108,111,97,100,101,100,67,104,97,110,103,101,114,101,116,117,114,110,115,116,114
-,105,110,103,114,101,108,111,97,100,77,111,98,105,108,101,105,110,99,111,109,101
-,115,117,112,112,108,121,83,111,117,114,99,101,111,114,100,101,114,115,118,105,
-101,119,101,100,38,110,98,115,112,59,99,111,117,114,115,101,65,98,111,117,116,32
-,105,115,108,97,110,100,60,104,116,109,108,32,99,111,111,107,105,101,110,97,109,
-101,61,34,97,109,97,122,111,110,109,111,100,101,114,110,97,100,118,105,99,101,
-105,110,60,47,97,62,58,32,84,104,101,32,100,105,97,108,111,103,104,111,117,115,
-101,115,66,69,71,73,78,32,77,101,120,105,99,111,115,116,97,114,116,115,99,101,
-110,116,114,101,104,101,105,103,104,116,97,100,100,105,110,103,73,115,108,97,110
-,100,97,115,115,101,116,115,69,109,112,105,114,101,83,99,104,111,111,108,101,102
-,102,111,114,116,100,105,114,101,99,116,110,101,97,114,108,121,109,97,110,117,97
-,108,83,101,108,101,99,116,46,10,10,79,110,101,106,111,105,110,101,100,109,101,
-110,117,34,62,80,104,105,108,105,112,97,119,97,114,100,115,104,97,110,100,108,
-101,105,109,112,111,114,116,79,102,102,105,99,101,114,101,103,97,114,100,115,107
-,105,108,108,115,110,97,116,105,111,110,83,112,111,114,116,115,100,101,103,114,
-101,101,119,101,101,107,108,121,32,40,101,46,103,46,98,101,104,105,110,100,100,
-111,99,116,111,114,108,111,103,103,101,100,117,110,105,116,101,100,60,47,98,62,
-60,47,98,101,103,105,110,115,112,108,97,110,116,115,97,115,115,105,115,116,97,
-114,116,105,115,116,105,115,115,117,101,100,51,48,48,112,120,124,99,97,110,97,
-100,97,97,103,101,110,99,121,115,99,104,101,109,101,114,101,109,97,105,110,66,
-114,97,122,105,108,115,97,109,112,108,101,108,111,103,111,34,62,98,101,121,111,
-110,100,45,115,99,97,108,101,97,99,99,101,112,116,115,101,114,118,101,100,109,97
-,114,105,110,101,70,111,111,116,101,114,99,97,109,101,114,97,60,47,104,49,62,10,
-95,102,111,114,109,34,108,101,97,118,101,115,115,116,114,101,115,115,34,32,47,62
-,13,10,46,103,105,102,34,32,111,110,108,111,97,100,108,111,97,100,101,114,79,120
-,102,111,114,100,115,105,115,116,101,114,115,117,114,118,105,118,108,105,115,116
-,101,110,102,101,109,97,108,101,68,101,115,105,103,110,115,105,122,101,61,34,97,
-112,112,101,97,108,116,101,120,116,34,62,108,101,118,101,108,115,116,104,97,110,
-107,115,104,105,103,104,101,114,102,111,114,99,101,100,97,110,105,109,97,108,97,
-110,121,111,110,101,65,102,114,105,99,97,97,103,114,101,101,100,114,101,99,101,
-110,116,80,101,111,112,108,101,60,98,114,32,47,62,119,111,110,100,101,114,112,
-114,105,99,101,115,116,117,114,110,101,100,124,124,32,123,125,59,109,97,105,110,
-34,62,105,110,108,105,110,101,115,117,110,100,97,121,119,114,97,112,34,62,102,97
-,105,108,101,100,99,101,110,115,117,115,109,105,110,117,116,101,98,101,97,99,111
-,110,113,117,111,116,101,115,49,53,48,112,120,124,101,115,116,97,116,101,114,101
-,109,111,116,101,101,109,97,105,108,34,108,105,110,107,101,100,114,105,103,104,
-116,59,115,105,103,110,97,108,102,111,114,109,97,108,49,46,104,116,109,108,115,
-105,103,110,117,112,112,114,105,110,99,101,102,108,111,97,116,58,46,112,110,103,
-34,32,102,111,114,117,109,46,65,99,99,101,115,115,112,97,112,101,114,115,115,111
-,117,110,100,115,101,120,116,101,110,100,72,101,105,103,104,116,115,108,105,100,
-101,114,85,84,70,45,56,34,38,97,109,112,59,32,66,101,102,111,114,101,46,32,87,
-105,116,104,115,116,117,100,105,111,111,119,110,101,114,115,109,97,110,97,103,
-101,112,114,111,102,105,116,106,81,117,101,114,121,97,110,110,117,97,108,112,97,
-114,97,109,115,98,111,117,103,104,116,102,97,109,111,117,115,103,111,111,103,108
-,101,108,111,110,103,101,114,105,43,43,41,32,123,105,115,114,97,101,108,115,97,
-121,105,110,103,100,101,99,105,100,101,104,111,109,101,34,62,104,101,97,100,101,
-114,101,110,115,117,114,101,98,114,97,110,99,104,112,105,101,99,101,115,98,108,
-111,99,107,59,115,116,97,116,101,100,116,111,112,34,62,60,114,97,99,105,110,103,
-114,101,115,105,122,101,45,45,38,103,116,59,112,97,99,105,116,121,115,101,120,
-117,97,108,98,117,114,101,97,117,46,106,112,103,34,32,49,48,44,48,48,48,111,98,
-116,97,105,110,116,105,116,108,101,115,97,109,111,117,110,116,44,32,73,110,99,46
-,99,111,109,101,100,121,109,101,110,117,34,32,108,121,114,105,99,115,116,111,100
-,97,121,46,105,110,100,101,101,100,99,111,117,110,116,121,95,108,111,103,111,46,
-70,97,109,105,108,121,108,111,111,107,101,100,77,97,114,107,101,116,108,115,101,
-32,105,102,80,108,97,121,101,114,116,117,114,107,101,121,41,59,118,97,114,32,102
-,111,114,101,115,116,103,105,118,105,110,103,101,114,114,111,114,115,68,111,109,
-97,105,110,125,101,108,115,101,123,105,110,115,101,114,116,66,108,111,103,60,47,
-102,111,111,116,101,114,108,111,103,105,110,46,102,97,115,116,101,114,97,103,101
-,110,116,115,60,98,111,100,121,32,49,48,112,120,32,48,112,114,97,103,109,97,102,
-114,105,100,97,121,106,117,110,105,111,114,100,111,108,108,97,114,112,108,97,99,
-101,100,99,111,118,101,114,115,112,108,117,103,105,110,53,44,48,48,48,32,112,97,
-103,101,34,62,98,111,115,116,111,110,46,116,101,115,116,40,97,118,97,116,97,114,
-116,101,115,116,101,100,95,99,111,117,110,116,102,111,114,117,109,115,115,99,104
-,101,109,97,105,110,100,101,120,44,102,105,108,108,101,100,115,104,97,114,101,
-115,114,101,97,100,101,114,97,108,101,114,116,40,97,112,112,101,97,114,83,117,98
-,109,105,116,108,105,110,101,34,62,98,111,100,121,34,62,10,42,32,84,104,101,84,
-104,111,117,103,104,115,101,101,105,110,103,106,101,114,115,101,121,78,101,119,
-115,60,47,118,101,114,105,102,121,101,120,112,101,114,116,105,110,106,117,114,
-121,119,105,100,116,104,61,67,111,111,107,105,101,83,84,65,82,84,32,97,99,114,
-111,115,115,95,105,109,97,103,101,116,104,114,101,97,100,110,97,116,105,118,101,
-112,111,99,107,101,116,98,111,120,34,62,10,83,121,115,116,101,109,32,68,97,118,
-105,100,99,97,110,99,101,114,116,97,98,108,101,115,112,114,111,118,101,100,65,
-112,114,105,108,32,114,101,97,108,108,121,100,114,105,118,101,114,105,116,101,
-109,34,62,109,111,114,101,34,62,98,111,97,114,100,115,99,111,108,111,114,115,99,
-97,109,112,117,115,102,105,114,115,116,32,124,124,32,91,93,59,109,101,100,105,97
-,46,103,117,105,116,97,114,102,105,110,105,115,104,119,105,100,116,104,58,115,
-104,111,119,101,100,79,116,104,101,114,32,46,112,104,112,34,32,97,115,115,117,
-109,101,108,97,121,101,114,115,119,105,108,115,111,110,115,116,111,114,101,115,
-114,101,108,105,101,102,115,119,101,100,101,110,67,117,115,116,111,109,101,97,
-115,105,108,121,32,121,111,117,114,32,83,116,114,105,110,103,10,10,87,104,105,
-108,116,97,121,108,111,114,99,108,101,97,114,58,114,101,115,111,114,116,102,114,
-101,110,99,104,116,104,111,117,103,104,34,41,32,43,32,34,60,98,111,100,121,62,98
-,117,121,105,110,103,98,114,97,110,100,115,77,101,109,98,101,114,110,97,109,101,
-34,62,111,112,112,105,110,103,115,101,99,116,111,114,53,112,120,59,34,62,118,115
-,112,97,99,101,112,111,115,116,101,114,109,97,106,111,114,32,99,111,102,102,101,
-101,109,97,114,116,105,110,109,97,116,117,114,101,104,97,112,112,101,110,60,47,
-110,97,118,62,107,97,110,115,97,115,108,105,110,107,34,62,73,109,97,103,101,115,
-61,102,97,108,115,101,119,104,105,108,101,32,104,115,112,97,99,101,48,38,97,109,
-112,59,32,10,10,73,110,32,32,112,111,119,101,114,80,111,108,115,107,105,45,99,
-111,108,111,114,106,111,114,100,97,110,66,111,116,116,111,109,83,116,97,114,116,
-32,45,99,111,117,110,116,50,46,104,116,109,108,110,101,119,115,34,62,48,49,46,
-106,112,103,79,110,108,105,110,101,45,114,105,103,104,116,109,105,108,108,101,
-114,115,101,110,105,111,114,73,83,66,78,32,48,48,44,48,48,48,32,103,117,105,100,
-101,115,118,97,108,117,101,41,101,99,116,105,111,110,114,101,112,97,105,114,46,
-120,109,108,34,32,32,114,105,103,104,116,115,46,104,116,109,108,45,98,108,111,99
-,107,114,101,103,69,120,112,58,104,111,118,101,114,119,105,116,104,105,110,118,
-105,114,103,105,110,112,104,111,110,101,115,60,47,116,114,62,13,117,115,105,110,
-103,32,10,9,118,97,114,32,62,39,41,59,10,9,60,47,116,100,62,10,60,47,116,114,62,
-10,98,97,104,97,115,97,98,114,97,115,105,108,103,97,108,101,103,111,109,97,103,
-121,97,114,112,111,108,115,107,105,115,114,112,115,107,105,216,177,216,175,217,
-136,228,184,173,230,150,135,231,174,128,228,189,147,231,185,129,233,171,148,228,
-191,161,230,129,175,228,184,173,229,155,189,230,136,145,228,187,172,228,184,128,
-228,184,170,229,133,172,229,143,184,231,174,161,231,144,134,232,174,186,229,157,
-155,229,143,175,228,187,165,230,156,141,229,138,161,230,151,182,233,151,180,228,
-184,170,228,186,186,228,186,167,229,147,129,232,135,170,229,183,177,228,188,129,
-228,184,154,230,159,165,231,156,139,229,183,165,228,189,156,232,129,148,231,179,
-187,230,178,161,230,156,137,231,189,145,231,171,153,230,137,128,230,156,137,232,
-175,132,232,174,186,228,184,173,229,191,131,230,150,135,231,171,160,231,148,168,
-230,136,183,233,166,150,233,161,181,228,189,156,232,128,133,230,138,128,230,156,
-175,233,151,174,233,162,152,231,155,184,229,133,179,228,184,139,232,189,189,230,
-144,156,231,180,162,228,189,191,231,148,168,232,189,175,228,187,182,229,156,168,
-231,186,191,228,184,187,233,162,152,232,181,132,230,150,153,232,167,134,233,162,
-145,229,155,158,229,164,141,230,179,168,229,134,140,231,189,145,231,187,156,230,
-148,182,232,151,143,229,134,133,229,174,185,230,142,168,232,141,144,229,184,130,
-229,156,186,230,182,136,230,129,175,231,169,186,233,151,180,229,143,145,229,184,
-131,228,187,128,228,185,136,229,165,189,229,143,139,231,148,159,230,180,187,229,
-155,190,231,137,135,229,143,145,229,177,149,229,166,130,230,158,156,230,137,139,
-230,156,186,230,150,176,233,151,187,230,156,128,230,150,176,230,150,185,229,188,
-143,229,140,151,228,186,172,230,143,144,228,190,155,229,133,179,228,186,142,230,
-155,180,229,164,154,232,191,153,228,184,170,231,179,187,231,187,159,231,159,165,
-233,129,147,230,184,184,230,136,143,229,185,191,229,145,138,229,133,182,228,187,
-150,229,143,145,232,161,168,229,174,137,229,133,168,231,172,172,228,184,128,228,
-188,154,229,145,152,232,191,155,232,161,140,231,130,185,229,135,187,231,137,136,
-230,157,131,231,148,181,229,173,144,228,184,150,231,149,140,232,174,190,232,174,
-161,229,133,141,232,180,185,230,149,153,232,130,178,229,138,160,229,133,165,230,
-180,187,229,138,168,228,187,150,228,187,172,229,149,134,229,147,129,229,141,154,
-229,174,162,231,142,176,229,156,168,228,184,138,230,181,183,229,166,130,228,189,
-149,229,183,178,231,187,143,231,149,153,232,168,128,232,175,166,231,187,134,231,
-164,190,229,140,186,231,153,187,229,189,149,230,156,172,231,171,153,233,156,128,
-232,166,129,228,187,183,230,160,188,230,148,175,230,140,129,229,155,189,233,153,
-133,233,147,190,230,142,165,229,155,189,229,174,182,229,187,186,232,174,190,230,
-156,139,229,143,139,233,152,133,232,175,187,230,179,149,229,190,139,228,189,141,
-231,189,174,231,187,143,230,181,142,233,128,137,230,139,169,232,191,153,230,160,
-183,229,189,147,229,137,141,229,136,134,231,177,187,230,142,146,232,161,140,229,
-155,160,228,184,186,228,186,164,230,152,147,230,156,128,229,144,142,233,159,179,
-228,185,144,228,184,141,232,131,189,233,128,154,232,191,135,232,161,140,228,184,
-154,231,167,145,230,138,128,229,143,175,232,131,189,232,174,190,229,164,135,229,
-144,136,228,189,156,229,164,167,229,174,182,231,164,190,228,188,154,231,160,148,
-231,169,182,228,184,147,228,184,154,229,133,168,233,131,168,233,161,185,231,155,
-174,232,191,153,233,135,140,232,191,152,230,152,175,229,188,128,229,167,139,230,
-131,133,229,134,181,231,148,181,232,132,145,230,150,135,228,187,182,229,147,129,
-231,137,140,229,184,174,229,138,169,230,150,135,229,140,150,232,181,132,230,186,
-144,229,164,167,229,173,166,229,173,166,228,185,160,229,156,176,229,157,128,230,
-181,143,232,167,136,230,138,149,232,181,132,229,183,165,231,168,139,232,166,129,
-230,177,130,230,128,142,228,185,136,230,151,182,229,128,153,229,138,159,232,131,
-189,228,184,187,232,166,129,231,155,174,229,137,141,232,181,132,232,174,175,229,
-159,142,229,184,130,230,150,185,230,179,149,231,148,181,229,189,177,230,139,155,
-232,129,152,229,163,176,230,152,142,228,187,187,228,189,149,229,129,165,229,186,
-183,230,149,176,230,141,174,231,190,142,229,155,189,230,177,189,232,189,166,228,
-187,139,231,187,141,228,189,134,230,152,175,228,186,164,230,181,129,231,148,159,
-228,186,167,230,137,128,228,187,165,231,148,181,232,175,157,230,152,190,231,164,
-186,228,184,128,228,186,155,229,141,149,228,189,141,228,186,186,229,145,152,229,
-136,134,230,158,144,229,156,176,229,155,190,230,151,133,230,184,184,229,183,165,
-229,133,183,229,173,166,231,148,159,231,179,187,229,136,151,231,189,145,229,143,
-139,229,184,150,229,173,144,229,175,134,231,160,129,233,162,145,233,129,147,230,
-142,167,229,136,182,229,156,176,229,140,186,229,159,186,230,156,172,229,133,168,
-229,155,189,231,189,145,228,184,138,233,135,141,232,166,129,231,172,172,228,186,
-140,229,150,156,230,172,162,232,191,155,229,133,165,229,143,139,230,131,133,232,
-191,153,228,186,155,232,128,131,232,175,149,229,143,145,231,142,176,229,159,185,
-232,174,173,228,187,165,228,184,138,230,148,191,229,186,156,230,136,144,228,184,
-186,231,142,175,229,162,131,233,166,153,230,184,175,229,144,140,230,151,182,229,
-168,177,228,185,144,229,143,145,233,128,129,228,184,128,229,174,154,229,188,128,
-229,143,145,228,189,156,229,147,129,230,160,135,229,135,134,230,172,162,232,191,
-142,232,167,163,229,134,179,229,156,176,230,150,185,228,184,128,228,184,139,228,
-187,165,229,143,138,232,180,163,228,187,187,230,136,150,232,128,133,229,174,162,
-230,136,183,228,187,163,232,161,168,231,167,175,229,136,134,229,165,179,228,186,
-186,230,149,176,231,160,129,233,148,128,229,148,174,229,135,186,231,142,176,231,
-166,187,231,186,191,229,186,148,231,148,168,229,136,151,232,161,168,228,184,141,
-229,144,140,231,188,150,232,190,145,231,187,159,232,174,161,230,159,165,232,175,
-162,228,184,141,232,166,129,230,156,137,229,133,179,230,156,186,230,158,132,229,
-190,136,229,164,154,230,146,173,230,148,190,231,187,132,231,187,135,230,148,191,
-231,173,150,231,155,180,230,142,165,232,131,189,229,138,155,230,157,165,230,186,
-144,230,153,130,233,150,147,231,156,139,229,136,176,231,131,173,233,151,168,229,
-133,179,233,148,174,228,184,147,229,140,186,233,157,158,229,184,184,232,139,177,
-232,175,173,231,153,190,229,186,166,229,184,140,230,156,155,231,190,142,229,165,
-179,230,175,148,232,190,131,231,159,165,232,175,134,232,167,132,229,174,154,229,
-187,186,232,174,174,233,131,168,233,151,168,230,132,143,232,167,129,231,178,190,
-229,189,169,230,151,165,230,156,172,230,143,144,233,171,152,229,143,145,232,168,
-128,230,150,185,233,157,162,229,159,186,233,135,145,229,164,132,231,144,134,230,
-157,131,233,153,144,229,189,177,231,137,135,233,147,182,232,161,140,232,191,152,
-230,156,137,229,136,134,228,186,171,231,137,169,229,147,129,231,187,143,232,144,
-165,230,183,187,229,138,160,228,184,147,229,174,182,232,191,153,231,167,141,232,
-175,157,233,162,152,232,181,183,230,157,165,228,184,154,229,138,161,229,133,172,
-229,145,138,232,174,176,229,189,149,231,174,128,228,187,139,232,180,168,233,135,
-143,231,148,183,228,186,186,229,189,177,229,147,141,229,188,149,231,148,168,230,
-138,165,229,145,138,233,131,168,229,136,134,229,191,171,233,128,159,229,146,168,
-232,175,162,230,151,182,229,176,154,230,179,168,230,132,143,231,148,179,232,175,
-183,229,173,166,230,160,161,229,186,148,232,175,165,229,142,134,229,143,178,229,
-143,170,230,152,175,232,191,148,229,155,158,232,180,173,228,185,176,229,144,141,
-231,167,176,228,184,186,228,186,134,230,136,144,229,138,159,232,175,180,230,152,
-142,228,190,155,229,186,148,229,173,169,229,173,144,228,184,147,233,162,152,231,
-168,139,229,186,143,228,184,128,232,136,172,230,156,131,229,147,161,229,143,170,
-230,156,137,229,133,182,229,174,131,228,191,157,230,138,164,232,128,140,228,184,
-148,228,187,138,229,164,169,231,170,151,229,143,163,229,138,168,230,128,129,231,
-138,182,230,128,129,231,137,185,229,136,171,232,174,164,228,184,186,229,191,133,
-233,161,187,230,155,180,230,150,176,229,176,143,232,175,180,230,136,145,229,128,
-145,228,189,156,228,184,186,229,170,146,228,189,147,229,140,133,230,139,172,233,
-130,163,228,185,136,228,184,128,230,160,183,229,155,189,229,134,133,230,152,175,
-229,144,166,230,160,185,230,141,174,231,148,181,232,167,134,229,173,166,233,153,
-162,229,133,183,230,156,137,232,191,135,231,168,139,231,148,177,228,186,142,228,
-186,186,230,137,141,229,135,186,230,157,165,228,184,141,232,191,135,230,173,163,
-229,156,168,230,152,142,230,152,159,230,149,133,228,186,139,229,133,179,231,179,
-187,230,160,135,233,162,152,229,149,134,229,138,161,232,190,147,229,133,165,228,
-184,128,231,155,180,229,159,186,231,161,128,230,149,153,229,173,166,228,186,134,
-232,167,163,229,187,186,231,173,145,231,187,147,230,158,156,229,133,168,231,144,
-131,233,128,154,231,159,165,232,174,161,229,136,146,229,175,185,228,186,142,232,
-137,186,230,156,175,231,155,184,229,134,140,229,143,145,231,148,159,231,156,159,
-231,154,132,229,187,186,231,171,139,231,173,137,231,186,167,231,177,187,229,158,
-139,231,187,143,233,170,140,229,174,158,231,142,176,229,136,182,228,189,156,230,
-157,165,232,135,170,230,160,135,231,173,190,228,187,165,228,184,139,229,142,159,
-229,136,155,230,151,160,230,179,149,229,133,182,228,184,173,229,128,139,228,186,
-186,228,184,128,229,136,135,230,140,135,229,141,151,229,133,179,233,151,173,233,
-155,134,229,155,162,231,172,172,228,184,137,229,133,179,230,179,168,229,155,160,
-230,173,164,231,133,167,231,137,135,230,183,177,229,156,179,229,149,134,228,184,
-154,229,185,191,229,183,158,230,151,165,230,156,159,233,171,152,231,186,167,230,
-156,128,232,191,145,231,187,188,229,144,136,232,161,168,231,164,186,228,184,147,
-232,190,145,232,161,140,228,184,186,228,186,164,233,128,154,232,175,132,228,187,
-183,232,167,137,229,190,151,231,178,190,229,141,142,229,174,182,229,186,173,229,
-174,140,230,136,144,230,132,159,232,167,137,229,174,137,232,163,133,229,190,151,
-229,136,176,233,130,174,228,187,182,229,136,182,229,186,166,233,163,159,229,147,
-129,232,153,189,231,132,182,232,189,172,232,189,189,230,138,165,228,187,183,232,
-174,176,232,128,133,230,150,185,230,161,136,232,161,140,230,148,191,228,186,186,
-230,176,145,231,148,168,229,147,129,228,184,156,232,165,191,230,143,144,229,135,
-186,233,133,146,229,186,151,231,132,182,229,144,142,228,187,152,230,172,190,231,
-131,173,231,130,185,228,187,165,229,137,141,229,174,140,229,133,168,229,143,145,
-229,184,150,232,174,190,231,189,174,233,162,134,229,175,188,229,183,165,228,184,
-154,229,140,187,233,153,162,231,156,139,231,156,139,231,187,143,229,133,184,229,
-142,159,229,155,160,229,185,179,229,143,176,229,144,132,231,167,141,229,162,158,
-229,138,160,230,157,144,230,150,153,230,150,176,229,162,158,228,185,139,229,144,
-142,232,129,140,228,184,154,230,149,136,230,158,156,228,187,138,229,185,180,232,
-174,186,230,150,135,230,136,145,229,155,189,229,145,138,232,175,137,231,137,136,
-228,184,187,228,191,174,230,148,185,229,143,130,228,184,142,230,137,147,229,141,
-176,229,191,171,228,185,144,230,156,186,230,162,176,232,167,130,231,130,185,229,
-173,152,229,156,168,231,178,190,231,165,158,232,142,183,229,190,151,229,136,169,
-231,148,168,231,187,167,231,187,173,228,189,160,228,187,172,232,191,153,228,185,
-136,230,168,161,229,188,143,232,175,173,232,168,128,232,131,189,229,164,159,233,
-155,133,232,153,142,230,147,141,228,189,156,233,163,142,230,160,188,228,184,128,
-232,181,183,231,167,145,229,173,166,228,189,147,232,130,178,231,159,173,228,191,
-161,230,157,161,228,187,182,230,178,187,231,150,151,232,191,144,229,138,168,228,
-186,167,228,184,154,228,188,154,232,174,174,229,175,188,232,136,170,229,133,136,
-231,148,159,232,129,148,231,155,159,229,143,175,230,152,175,229,149,143,233,161,
-140,231,187,147,230,158,132,228,189,156,231,148,168,232,176,131,230,159,165,232,
-179,135,230,150,153,232,135,170,229,138,168,232,180,159,232,180,163,229,134,156,
-228,184,154,232,174,191,233,151,174,229,174,158,230,150,189,230,142,165,229,143,
-151,232,174,168,232,174,186,233,130,163,228,184,170,229,143,141,233,166,136,229,
-138,160,229,188,186,229,165,179,230,128,167,232,140,131,229,155,180,230,156,141,
-229,139,153,228,188,145,233,151,178,228,187,138,230,151,165,229,174,162,230,156,
-141,232,167,128,231,156,139,229,143,130,229,138,160,231,154,132,232,175,157,228,
-184,128,231,130,185,228,191,157,232,175,129,229,155,190,228,185,166,230,156,137,
-230,149,136,230,181,139,232,175,149,231,167,187,229,138,168,230,137,141,232,131,
-189,229,134,179,229,174,154,232,130,161,231,165,168,228,184,141,230,150,173,233,
-156,128,230,177,130,228,184,141,229,190,151,229,138,158,230,179,149,228,185,139,
-233,151,180,233,135,135,231,148,168,232,144,165,233,148,128,230,138,149,232,175,
-137,231,155,174,230,160,135,231,136,177,230,131,133,230,145,132,229,189,177,230,
-156,137,228,186,155,232,164,135,232,163,189,230,150,135,229,173,166,230,156,186,
-228,188,154,230,149,176,229,173,151,232,163,133,228,191,174,232,180,173,231,137,
-169,229,134,156,230,157,145,229,133,168,233,157,162,231,178,190,229,147,129,229,
-133,182,229,174,158,228,186,139,230,131,133,230,176,180,229,185,179,230,143,144,
-231,164,186,228,184,138,229,184,130,232,176,162,232,176,162,230,153,174,233,128,
-154,230,149,153,229,184,136,228,184,138,228,188,160,231,177,187,229,136,171,230,
-173,140,230,155,178,230,139,165,230,156,137,229,136,155,230,150,176,233,133,141,
-228,187,182,229,143,170,232,166,129,230,151,182,228,187,163,232,179,135,232,168,
-138,232,190,190,229,136,176,228,186,186,231,148,159,232,174,162,233,152,133,232,
-128,129,229,184,136,229,177,149,231,164,186,229,191,131,231,144,134,232,180,180,
-229,173,144,231,182,178,231,171,153,228,184,187,233,161,140,232,135,170,231,132,
-182,231,186,167,229,136,171,231,174,128,229,141,149,230,148,185,233,157,169,233,
-130,163,228,186,155,230,157,165,232,175,180,230,137,147,229,188,128,228,187,163,
-231,160,129,229,136,160,233,153,164,232,175,129,229,136,184,232,138,130,231,155,
-174,233,135,141,231,130,185,230,172,161,230,149,184,229,164,154,229,176,145,232,
-167,132,229,136,146,232,181,132,233,135,145,230,137,190,229,136,176,228,187,165,
-229,144,142,229,164,167,229,133,168,228,184,187,233,161,181,230,156,128,228,189,
-179,229,155,158,231,173,148,229,164,169,228,184,139,228,191,157,233,154,156,231,
-142,176,228,187,163,230,163,128,230,159,165,230,138,149,231,165,168,229,176,143,
-230,151,182,230,178,146,230,156,137,230,173,163,229,184,184,231,148,154,232,135,
-179,228,187,163,231,144,134,231,155,174,229,189,149,229,133,172,229,188,128,229,
-164,141,229,136,182,233,135,145,232,158,141,229,185,184,231,166,143,231,137,136,
-230,156,172,229,189,162,230,136,144,229,135,134,229,164,135,232,161,140,230,131,
-133,229,155,158,229,136,176,230,128,157,230,131,179,230,128,142,230,160,183,229,
-141,143,232,174,174,232,174,164,232,175,129,230,156,128,229,165,189,228,186,167,
-231,148,159,230,140,137,231,133,167,230,156,141,232,163,133,229,185,191,228,184,
-156,229,138,168,230,188,171,233,135,135,232,180,173,230,150,176,230,137,139,231,
-187,132,229,155,190,233,157,162,230,157,191,229,143,130,232,128,131,230,148,191,
-230,178,187,229,174,185,230,152,147,229,164,169,229,156,176,229,138,170,229,138,
-155,228,186,186,228,187,172,229,141,135,231,186,167,233,128,159,229,186,166,228,
-186,186,231,137,169,232,176,131,230,149,180,230,181,129,232,161,140,233,128,160,
-230,136,144,230,150,135,229,173,151,233,159,169,229,155,189,232,180,184,230,152,
-147,229,188,128,229,177,149,231,155,184,233,151,156,232,161,168,231,142,176,229,
-189,177,232,167,134,229,166,130,230,173,164,231,190,142,229,174,185,229,164,167,
-229,176,143,230,138,165,233,129,147,230,157,161,230,172,190,229,191,131,230,131,
-133,232,174,184,229,164,154,230,179,149,232,167,132,229,174,182,229,177,133,228,
-185,166,229,186,151,232,191,158,230,142,165,231,171,139,229,141,179,228,184,190,
-230,138,165,230,138,128,229,183,167,229,165,165,232,191,144,231,153,187,229,133,
-165,228,187,165,230,157,165,231,144,134,232,174,186,228,186,139,228,187,182,232,
-135,170,231,148,177,228,184,173,229,141,142,229,138,158,229,133,172,229,166,136,
-229,166,136,231,156,159,230,173,163,228,184,141,233,148,153,229,133,168,230,150,
-135,229,144,136,229,144,140,228,187,183,229,128,188,229,136,171,228,186,186,231,
-155,145,231,157,163,229,133,183,228,189,147,228,184,150,231,186,170,229,155,162,
-233,152,159,229,136,155,228,184,154,230,137,191,230,139,133,229,162,158,233,149,
-191,230,156,137,228,186,186,228,191,157,230,140,129,229,149,134,229,174,182,231,
-187,180,228,191,174,229,143,176,230,185,190,229,183,166,229,143,179,232,130,161,
-228,187,189,231,173,148,230,161,136,229,174,158,233,153,133,231,148,181,228,191,
-161,231,187,143,231,144,134,231,148,159,229,145,189,229,174,163,228,188,160,228,
-187,187,229,138,161,230,173,163,229,188,143,231,137,185,232,137,178,228,184,139,
-230,157,165,229,141,143,228,188,154,229,143,170,232,131,189,229,189,147,231,132,
-182,233,135,141,230,150,176,229,133,167,229,174,185,230,140,135,229,175,188,232,
-191,144,232,161,140,230,151,165,229,191,151,232,179,163,229,174,182,232,182,133,
-232,191,135,229,156,159,229,156,176,230,181,153,230,177,159,230,148,175,228,187,
-152,230,142,168,229,135,186,231,171,153,233,149,191,230,157,173,229,183,158,230,
-137,167,232,161,140,229,136,182,233,128,160,228,185,139,228,184,128,230,142,168,
-229,185,191,231,142,176,229,156,186,230,143,143,232,191,176,229,143,152,229,140,
-150,228,188,160,231,187,159,230,173,140,230,137,139,228,191,157,233,153,169,232,
-175,190,231,168,139,229,140,187,231,150,151,231,187,143,232,191,135,232,191,135,
-229,142,187,228,185,139,229,137,141,230,148,182,229,133,165,229,185,180,229,186,
-166,230,157,130,229,191,151,231,190,142,228,184,189,230,156,128,233,171,152,231,
-153,187,233,153,134,230,156,170,230,157,165,229,138,160,229,183,165,229,133,141,
-232,180,163,230,149,153,231,168,139,231,137,136,229,157,151,232,186,171,228,189,
-147,233,135,141,229,186,134,229,135,186,229,148,174,230,136,144,230,156,172,229,
-189,162,229,188,143,229,156,159,232,177,134,229,135,186,229,131,185,228,184,156,
-230,150,185,233,130,174,231,174,177,229,141,151,228,186,172,230,177,130,232,129,
-140,229,143,150,229,190,151,232,129,140,228,189,141,231,155,184,228,191,161,233,
-161,181,233,157,162,229,136,134,233,146,159,231,189,145,233,161,181,231,161,174,
-229,174,154,229,155,190,228,190,139,231,189,145,229,157,128,231,167,175,230,158,
-129,233,148,153,232,175,175,231,155,174,231,154,132,229,174,157,232,180,157,230,
-156,186,229,133,179,233,163,142,233,153,169,230,142,136,230,157,131,231,151,133,
-230,175,146,229,174,160,231,137,169,233,153,164,228,186,134,232,169,149,232,171,
-150,231,150,190,231,151,133,229,143,138,230,151,182,230,177,130,232,180,173,231,
-171,153,231,130,185,229,132,191,231,171,165,230,175,143,229,164,169,228,184,173,
-229,164,174,232,174,164,232,175,134,230,175,143,228,184,170,229,164,169,230,180,
-165,229,173,151,228,189,147,229,143,176,231,129,163,231,187,180,230,138,164,230,
-156,172,233,161,181,228,184,170,230,128,167,229,174,152,230,150,185,229,184,184,
-232,167,129,231,155,184,230,156,186,230,136,152,231,149,165,229,186,148,229,189,
-147,229,190,139,229,184,136,230,150,185,228,190,191,230,160,161,229,155,173,232,
-130,161,229,184,130,230,136,191,229,177,139,230,160,143,231,155,174,229,145,152,
-229,183,165,229,175,188,232,135,180,231,170,129,231,132,182,233,129,147,229,133,
-183,230,156,172,231,189,145,231,187,147,229,144,136,230,161,163,230,161,136,229,
-138,179,229,138,168,229,143,166,229,164,150,231,190,142,229,133,131,229,188,149,
-232,181,183,230,148,185,229,143,152,231,172,172,229,155,155,228,188,154,232,174,
-161,232,170,170,230,152,142,233,154,144,231,167,129,229,174,157,229,174,157,232,
-167,132,232,140,131,230,182,136,232,180,185,229,133,177,229,144,140,229,191,152,
-232,174,176,228,189,147,231,179,187,229,184,166,230,157,165,229,144,141,229,173,
-151,231,153,188,232,161,168,229,188,128,230,148,190,229,138,160,231,155,159,229,
-143,151,229,136,176,228,186,140,230,137,139,229,164,167,233,135,143,230,136,144,
-228,186,186,230,149,176,233,135,143,229,133,177,228,186,171,229,140,186,229,159,
-159,229,165,179,229,173,169,229,142,159,229,136,153,230,137,128,229,156,168,231,
-187,147,230,157,159,233,128,154,228,191,161,232,182,133,231,186,167,233,133,141,
-231,189,174,229,189,147,230,151,182,228,188,152,231,167,128,230,128,167,230,132,
-159,230,136,191,228,186,167,233,129,138,230,136,178,229,135,186,229,143,163,230,
-143,144,228,186,164,229,176,177,228,184,154,228,191,157,229,129,165,231,168,139,
-229,186,166,229,143,130,230,149,176,228,186,139,228,184,154,230,149,180,228,184,
-170,229,177,177,228,184,156,230,131,133,230,132,159,231,137,185,230,174,138,229,
-136,134,233,161,158,230,144,156,229,176,139,229,177,158,228,186,142,233,151,168,
-230,136,183,232,180,162,229,138,161,229,163,176,233,159,179,229,143,138,229,133,
-182,232,180,162,231,187,143,229,157,154,230,140,129,229,185,178,233,131,168,230,
-136,144,231,171,139,229,136,169,231,155,138,232,128,131,232,153,145,230,136,144,
-233,131,189,229,140,133,232,163,133,231,148,168,230,136,182,230,175,148,232,181,
-155,230,150,135,230,152,142,230,139,155,229,149,134,229,174,140,230,149,180,231,
-156,159,230,152,175,231,156,188,231,157,155,228,188,153,228,188,180,229,168,129,
-230,156,155,233,162,134,229,159,159,229,141,171,231,148,159,228,188,152,230,131,
-160,232,171,150,229,163,135,229,133,172,229,133,177,232,137,175,229,165,189,229,
-133,133,229,136,134,231,172,166,229,144,136,233,153,132,228,187,182,231,137,185,
-231,130,185,228,184,141,229,143,175,232,139,177,230,150,135,232,181,132,228,186,
-167,230,160,185,230,156,172,230,152,142,230,152,190,229,175,134,231,162,188,229,
-133,172,228,188,151,230,176,145,230,151,143,230,155,180,229,138,160,228,186,171,
-229,143,151,229,144,140,229,173,166,229,144,175,229,138,168,233,128,130,229,144,
-136,229,142,159,230,157,165,233,151,174,231,173,148,230,156,172,230,150,135,231,
-190,142,233,163,159,231,187,191,232,137,178,231,168,179,229,174,154,231,187,136,
-228,186,142,231,148,159,231,137,169,228,190,155,230,177,130,230,144,156,231,139,
-144,229,138,155,233,135,143,228,184,165,233,135,141,230,176,184,232,191,156,229,
-134,153,231,156,159,230,156,137,233,153,144,231,171,158,228,186,137,229,175,185,
-232,177,161,232,180,185,231,148,168,228,184,141,229,165,189,231,187,157,229,175,
-185,229,141,129,229,136,134,228,191,131,232,191,155,231,130,185,232,175,132,229,
-189,177,233,159,179,228,188,152,229,138,191,228,184,141,229,176,145,230,172,163,
-232,181,143,229,185,182,228,184,148,230,156,137,231,130,185,230,150,185,229,144,
-145,229,133,168,230,150,176,228,191,161,231,148,168,232,174,190,230,150,189,229,
-189,162,232,177,161,232,181,132,230,160,188,231,170,129,231,160,180,233,154,143,
-231,157,128,233,135,141,229,164,167,228,186,142,230,152,175,230,175,149,228,184,
-154,230,153,186,232,131,189,229,140,150,229,183,165,229,174,140,231,190,142,229,
-149,134,229,159,142,231,187,159,228,184,128,229,135,186,231,137,136,230,137,147,
-233,128,160,231,148,162,229,147,129,230,166,130,229,134,181,231,148,168,228,186,
-142,228,191,157,231,149,153,229,155,160,231,180,160,228,184,173,229,156,139,229,
-173,152,229,130,168,232,180,180,229,155,190,230,156,128,230,132,155,233,149,191,
-230,156,159,229,143,163,228,187,183,231,144,134,232,180,162,229,159,186,229,156,
-176,229,174,137,230,142,146,230,173,166,230,177,137,233,135,140,233,157,162,229,
-136,155,229,187,186,229,164,169,231,169,186,233,166,150,229,133,136,229,174,140,
-229,150,132,233,169,177,229,138,168,228,184,139,233,157,162,228,184,141,229,134,
-141,232,175,154,228,191,161,230,132,143,228,185,137,233,152,179,229,133,137,232,
-139,177,229,155,189,230,188,130,228,186,174,229,134,155,228,186,139,231,142,169,
-229,174,182,231,190,164,228,188,151,229,134,156,230,176,145,229,141,179,229,143,
-175,229,144,141,231,168,177,229,174,182,229,133,183,229,138,168,231,148,187,230,
-131,179,229,136,176,230,179,168,230,152,142,229,176,143,229,173,166,230,128,167,
-232,131,189,232,128,131,231,160,148,231,161,172,228,187,182,232,167,130,231,156,
-139,230,184,133,230,165,154,230,144,158,231,172,145,233,166,150,233,160,129,233,
-187,132,233,135,145,233,128,130,231,148,168,230,177,159,232,139,143,231,156,159,
-229,174,158,228,184,187,231,174,161,233,152,182,230,174,181,232,168,187,229,134,
-138,231,191,187,232,175,145,230,157,131,229,136,169,229,129,154,229,165,189,228,
-188,188,228,185,142,233,128,154,232,174,175,230,150,189,229,183,165,231,139,128,
-230,133,139,228,185,159,232,174,184,231,142,175,228,191,157,229,159,185,229,133,
-187,230,166,130,229,191,181,229,164,167,229,158,139,230,156,186,231,165,168,231,
-144,134,232,167,163,229,140,191,229,144,141,99,117,97,110,100,111,101,110,118,
-105,97,114,109,97,100,114,105,100,98,117,115,99,97,114,105,110,105,99,105,111,
-116,105,101,109,112,111,112,111,114,113,117,101,99,117,101,110,116,97,101,115,
-116,97,100,111,112,117,101,100,101,110,106,117,101,103,111,115,99,111,110,116,
-114,97,101,115,116,195,161,110,110,111,109,98,114,101,116,105,101,110,101,110,
-112,101,114,102,105,108,109,97,110,101,114,97,97,109,105,103,111,115,99,105,117,
-100,97,100,99,101,110,116,114,111,97,117,110,113,117,101,112,117,101,100,101,115
-,100,101,110,116,114,111,112,114,105,109,101,114,112,114,101,99,105,111,115,101,
-103,195,186,110,98,117,101,110,111,115,118,111,108,118,101,114,112,117,110,116,
-111,115,115,101,109,97,110,97,104,97,98,195,173,97,97,103,111,115,116,111,110,
-117,101,118,111,115,117,110,105,100,111,115,99,97,114,108,111,115,101,113,117,
-105,112,111,110,105,195,177,111,115,109,117,99,104,111,115,97,108,103,117,110,97
-,99,111,114,114,101,111,105,109,97,103,101,110,112,97,114,116,105,114,97,114,114
-,105,98,97,109,97,114,195,173,97,104,111,109,98,114,101,101,109,112,108,101,111,
-118,101,114,100,97,100,99,97,109,98,105,111,109,117,99,104,97,115,102,117,101,
-114,111,110,112,97,115,97,100,111,108,195,173,110,101,97,112,97,114,101,99,101,
-110,117,101,118,97,115,99,117,114,115,111,115,101,115,116,97,98,97,113,117,105,
-101,114,111,108,105,98,114,111,115,99,117,97,110,116,111,97,99,99,101,115,111,
-109,105,103,117,101,108,118,97,114,105,111,115,99,117,97,116,114,111,116,105,101
-,110,101,115,103,114,117,112,111,115,115,101,114,195,161,110,101,117,114,111,112
-,97,109,101,100,105,111,115,102,114,101,110,116,101,97,99,101,114,99,97,100,101,
-109,195,161,115,111,102,101,114,116,97,99,111,99,104,101,115,109,111,100,101,108
-,111,105,116,97,108,105,97,108,101,116,114,97,115,97,108,103,195,186,110,99,111,
-109,112,114,97,99,117,97,108,101,115,101,120,105,115,116,101,99,117,101,114,112,
-111,115,105,101,110,100,111,112,114,101,110,115,97,108,108,101,103,97,114,118,
-105,97,106,101,115,100,105,110,101,114,111,109,117,114,99,105,97,112,111,100,114
-,195,161,112,117,101,115,116,111,100,105,97,114,105,111,112,117,101,98,108,111,
-113,117,105,101,114,101,109,97,110,117,101,108,112,114,111,112,105,111,99,114,
-105,115,105,115,99,105,101,114,116,111,115,101,103,117,114,111,109,117,101,114,
-116,101,102,117,101,110,116,101,99,101,114,114,97,114,103,114,97,110,100,101,101
-,102,101,99,116,111,112,97,114,116,101,115,109,101,100,105,100,97,112,114,111,
-112,105,97,111,102,114,101,99,101,116,105,101,114,114,97,101,45,109,97,105,108,
-118,97,114,105,97,115,102,111,114,109,97,115,102,117,116,117,114,111,111,98,106,
-101,116,111,115,101,103,117,105,114,114,105,101,115,103,111,110,111,114,109,97,
-115,109,105,115,109,111,115,195,186,110,105,99,111,99,97,109,105,110,111,115,105
-,116,105,111,115,114,97,122,195,179,110,100,101,98,105,100,111,112,114,117,101,
-98,97,116,111,108,101,100,111,116,101,110,195,173,97,106,101,115,195,186,115,101
-,115,112,101,114,111,99,111,99,105,110,97,111,114,105,103,101,110,116,105,101,
-110,100,97,99,105,101,110,116,111,99,195,161,100,105,122,104,97,98,108,97,114,
-115,101,114,195,173,97,108,97,116,105,110,97,102,117,101,114,122,97,101,115,116,
-105,108,111,103,117,101,114,114,97,101,110,116,114,97,114,195,169,120,105,116,
-111,108,195,179,112,101,122,97,103,101,110,100,97,118,195,173,100,101,111,101,
-118,105,116,97,114,112,97,103,105,110,97,109,101,116,114,111,115,106,97,118,105,
-101,114,112,97,100,114,101,115,102,195,161,99,105,108,99,97,98,101,122,97,195,
-161,114,101,97,115,115,97,108,105,100,97,101,110,118,195,173,111,106,97,112,195,
-179,110,97,98,117,115,111,115,98,105,101,110,101,115,116,101,120,116,111,115,108
-,108,101,118,97,114,112,117,101,100,97,110,102,117,101,114,116,101,99,111,109,
-195,186,110,99,108,97,115,101,115,104,117,109,97,110,111,116,101,110,105,100,111
-,98,105,108,98,97,111,117,110,105,100,97,100,101,115,116,195,161,115,101,100,105
-,116,97,114,99,114,101,97,100,111,208,180,208,187,209,143,209,135,209,130,208,
-190,208,186,208,176,208,186,208,184,208,187,208,184,209,141,209,130,208,190,208,
-178,209,129,208,181,208,181,208,179,208,190,208,191,209,128,208,184,209,130,208,
-176,208,186,208,181,209,137,208,181,209,131,208,182,208,181,208,154,208,176,208,
-186,208,177,208,181,208,183,208,177,209,139,208,187,208,190,208,189,208,184,208,
-146,209,129,208,181,208,191,208,190,208,180,208,173,209,130,208,190,209,130,208,
-190,208,188,209,135,208,181,208,188,208,189,208,181,209,130,208,187,208,181,209,
-130,209,128,208,176,208,183,208,190,208,189,208,176,208,179,208,180,208,181,208,
-188,208,189,208,181,208,148,208,187,209,143,208,159,209,128,208,184,208,189,208,
-176,209,129,208,189,208,184,209,133,209,130,208,181,208,188,208,186,209,130,208,
-190,208,179,208,190,208,180,208,178,208,190,209,130,209,130,208,176,208,188,208,
-161,208,168,208,144,208,188,208,176,209,143,208,167,209,130,208,190,208,178,208,
-176,209,129,208,178,208,176,208,188,208,181,208,188,209,131,208,162,208,176,208,
-186,208,180,208,178,208,176,208,189,208,176,208,188,209,141,209,130,208,184,209,
-141,209,130,209,131,208,146,208,176,208,188,209,130,208,181,209,133,208,191,209,
-128,208,190,209,130,209,131,209,130,208,189,208,176,208,180,208,180,208,189,209,
-143,208,146,208,190,209,130,209,130,209,128,208,184,208,189,208,181,208,185,208,
-146,208,176,209,129,208,189,208,184,208,188,209,129,208,176,208,188,209,130,208,
-190,209,130,209,128,209,131,208,177,208,158,208,189,208,184,208,188,208,184,209,
-128,208,189,208,181,208,181,208,158,208,158,208,158,208,187,208,184,209,134,209,
-141,209,130,208,176,208,158,208,189,208,176,208,189,208,181,208,188,208,180,208,
-190,208,188,208,188,208,190,208,185,208,180,208,178,208,181,208,190,208,189,208,
-190,209,129,209,131,208,180,224,164,149,224,165,135,224,164,185,224,165,136,224,
-164,149,224,165,128,224,164,184,224,165,135,224,164,149,224,164,190,224,164,149,
-224,165,139,224,164,148,224,164,176,224,164,170,224,164,176,224,164,168,224,165,
-135,224,164,143,224,164,149,224,164,149,224,164,191,224,164,173,224,165,128,224,
-164,135,224,164,184,224,164,149,224,164,176,224,164,164,224,165,139,224,164,185,
-224,165,139,224,164,134,224,164,170,224,164,185,224,165,128,224,164,175,224,164,
-185,224,164,175,224,164,190,224,164,164,224,164,149,224,164,165,224,164,190,106,
-97,103,114,97,110,224,164,134,224,164,156,224,164,156,224,165,139,224,164,133,
-224,164,172,224,164,166,224,165,139,224,164,151,224,164,136,224,164,156,224,164,
-190,224,164,151,224,164,143,224,164,185,224,164,174,224,164,135,224,164,168,224,
-164,181,224,164,185,224,164,175,224,165,135,224,164,165,224,165,135,224,164,165,
-224,165,128,224,164,152,224,164,176,224,164,156,224,164,172,224,164,166,224,165,
-128,224,164,149,224,164,136,224,164,156,224,165,128,224,164,181,224,165,135,224,
-164,168,224,164,136,224,164,168,224,164,143,224,164,185,224,164,176,224,164,137,
-224,164,184,224,164,174,224,165,135,224,164,149,224,164,174,224,164,181,224,165,
-139,224,164,178,224,165,135,224,164,184,224,164,172,224,164,174,224,164,136,224,
-164,166,224,165,135,224,164,147,224,164,176,224,164,134,224,164,174,224,164,172,
-224,164,184,224,164,173,224,164,176,224,164,172,224,164,168,224,164,154,224,164,
-178,224,164,174,224,164,168,224,164,134,224,164,151,224,164,184,224,165,128,224,
-164,178,224,165,128,216,185,217,132,217,137,216,165,217,132,217,137,217,135,216,
-176,216,167,216,162,216,174,216,177,216,185,216,175,216,175,216,167,217,132,217,
-137,217,135,216,176,217,135,216,181,217,136,216,177,216,186,217,138,216,177,217,
-131,216,167,217,134,217,136,217,132,216,167,216,168,217,138,217,134,216,185,216,
-177,216,182,216,176,217,132,217,131,217,135,217,134,216,167,217,138,217,136,217,
-133,217,130,216,167,217,132,216,185,217,132,217,138,216,167,217,134,216,167,217,
-132,217,131,217,134,216,173,216,170,217,137,217,130,216,168,217,132,217,136,216,
-173,216,169,216,167,216,174,216,177,217,129,217,130,216,183,216,185,216,168,216,
-175,216,177,217,131,217,134,216,165,216,176,216,167,217,131,217,133,216,167,216,
-167,216,173,216,175,216,165,217,132,216,167,217,129,217,138,217,135,216,168,216,
-185,216,182,217,131,217,138,217,129,216,168,216,173,216,171,217,136,217,133,217,
-134,217,136,217,135,217,136,216,163,217,134,216,167,216,172,216,175,216,167,217,
-132,217,135,216,167,216,179,217,132,217,133,216,185,217,134,216,175,217,132,217,
-138,216,179,216,185,216,168,216,177,216,181,217,132,217,137,217,133,217,134,216,
-176,216,168,217,135,216,167,216,163,217,134,217,135,217,133,216,171,217,132,217,
-131,217,134,216,170,216,167,217,132,216,167,216,173,217,138,216,171,217,133,216,
-181,216,177,216,180,216,177,216,173,216,173,217,136,217,132,217,136,217,129,217,
-138,216,167,216,176,216,167,217,132,217,131,217,132,217,133,216,177,216,169,216,
-167,217,134,216,170,216,167,217,132,217,129,216,163,216,168,217,136,216,174,216,
-167,216,181,216,163,217,134,216,170,216,167,217,134,217,135,216,167,217,132,217,
-138,216,185,216,182,217,136,217,136,217,130,216,175,216,167,216,168,217,134,216,
-174,217,138,216,177,216,168,217,134,216,170,217,132,217,131,217,133,216,180,216,
-167,216,161,217,136,217,135,217,138,216,167,216,168,217,136,217,130,216,181,216,
-181,217,136,217,133,216,167,216,177,217,130,217,133,216,163,216,173,216,175,217,
-134,216,173,217,134,216,185,216,175,217,133,216,177,216,163,217,138,216,167,216,
-173,216,169,217,131,216,170,216,168,216,175,217,136,217,134,217,138,216,172,216,
-168,217,133,217,134,217,135,216,170,216,173,216,170,216,172,217,135,216,169,216,
-179,217,134,216,169,217,138,216,170,217,133,217,131,216,177,216,169,216,186,216,
-178,216,169,217,134,217,129,216,179,216,168,217,138,216,170,217,132,217,132,217,
-135,217,132,217,134,216,167,216,170,217,132,217,131,217,130,217,132,216,168,217,
-132,217,133,216,167,216,185,217,134,217,135,216,163,217,136,217,132,216,180,217,
-138,216,161,217,134,217,136,216,177,216,163,217,133,216,167,217,129,217,138,217,
-131,216,168,217,131,217,132,216,176,216,167,216,170,216,177,216,170,216,168,216,
-168,216,163,217,134,217,135,217,133,216,179,216,167,217,134,217,131,216,168,217,
-138,216,185,217,129,217,130,216,175,216,173,216,179,217,134,217,132,217,135,217,
-133,216,180,216,185,216,177,216,163,217,135,217,132,216,180,217,135,216,177,217,
-130,216,183,216,177,216,183,217,132,216,168,112,114,111,102,105,108,101,115,101,
-114,118,105,99,101,100,101,102,97,117,108,116,104,105,109,115,101,108,102,100,
-101,116,97,105,108,115,99,111,110,116,101,110,116,115,117,112,112,111,114,116,
-115,116,97,114,116,101,100,109,101,115,115,97,103,101,115,117,99,99,101,115,115,
-102,97,115,104,105,111,110,60,116,105,116,108,101,62,99,111,117,110,116,114,121,
-97,99,99,111,117,110,116,99,114,101,97,116,101,100,115,116,111,114,105,101,115,
-114,101,115,117,108,116,115,114,117,110,110,105,110,103,112,114,111,99,101,115,
-115,119,114,105,116,105,110,103,111,98,106,101,99,116,115,118,105,115,105,98,108
-,101,119,101,108,99,111,109,101,97,114,116,105,99,108,101,117,110,107,110,111,
-119,110,110,101,116,119,111,114,107,99,111,109,112,97,110,121,100,121,110,97,109
-,105,99,98,114,111,119,115,101,114,112,114,105,118,97,99,121,112,114,111,98,108,
-101,109,83,101,114,118,105,99,101,114,101,115,112,101,99,116,100,105,115,112,108
-,97,121,114,101,113,117,101,115,116,114,101,115,101,114,118,101,119,101,98,115,
-105,116,101,104,105,115,116,111,114,121,102,114,105,101,110,100,115,111,112,116,
-105,111,110,115,119,111,114,107,105,110,103,118,101,114,115,105,111,110,109,105,
-108,108,105,111,110,99,104,97,110,110,101,108,119,105,110,100,111,119,46,97,100,
-100,114,101,115,115,118,105,115,105,116,101,100,119,101,97,116,104,101,114,99,
-111,114,114,101,99,116,112,114,111,100,117,99,116,101,100,105,114,101,99,116,102
-,111,114,119,97,114,100,121,111,117,32,99,97,110,114,101,109,111,118,101,100,115
-,117,98,106,101,99,116,99,111,110,116,114,111,108,97,114,99,104,105,118,101,99,
-117,114,114,101,110,116,114,101,97,100,105,110,103,108,105,98,114,97,114,121,108
-,105,109,105,116,101,100,109,97,110,97,103,101,114,102,117,114,116,104,101,114,
-115,117,109,109,97,114,121,109,97,99,104,105,110,101,109,105,110,117,116,101,115
-,112,114,105,118,97,116,101,99,111,110,116,101,120,116,112,114,111,103,114,97,
-109,115,111,99,105,101,116,121,110,117,109,98,101,114,115,119,114,105,116,116,
-101,110,101,110,97,98,108,101,100,116,114,105,103,103,101,114,115,111,117,114,99
-,101,115,108,111,97,100,105,110,103,101,108,101,109,101,110,116,112,97,114,116,
-110,101,114,102,105,110,97,108,108,121,112,101,114,102,101,99,116,109,101,97,110
-,105,110,103,115,121,115,116,101,109,115,107,101,101,112,105,110,103,99,117,108,
-116,117,114,101,38,113,117,111,116,59,44,106,111,117,114,110,97,108,112,114,111,
-106,101,99,116,115,117,114,102,97,99,101,115,38,113,117,111,116,59,101,120,112,
-105,114,101,115,114,101,118,105,101,119,115,98,97,108,97,110,99,101,69,110,103,
-108,105,115,104,67,111,110,116,101,110,116,116,104,114,111,117,103,104,80,108,
-101,97,115,101,32,111,112,105,110,105,111,110,99,111,110,116,97,99,116,97,118,
-101,114,97,103,101,112,114,105,109,97,114,121,118,105,108,108,97,103,101,83,112,
-97,110,105,115,104,103,97,108,108,101,114,121,100,101,99,108,105,110,101,109,101
-,101,116,105,110,103,109,105,115,115,105,111,110,112,111,112,117,108,97,114,113,
-117,97,108,105,116,121,109,101,97,115,117,114,101,103,101,110,101,114,97,108,115
-,112,101,99,105,101,115,115,101,115,115,105,111,110,115,101,99,116,105,111,110,
-119,114,105,116,101,114,115,99,111,117,110,116,101,114,105,110,105,116,105,97,
-108,114,101,112,111,114,116,115,102,105,103,117,114,101,115,109,101,109,98,101,
-114,115,104,111,108,100,105,110,103,100,105,115,112,117,116,101,101,97,114,108,
-105,101,114,101,120,112,114,101,115,115,100,105,103,105,116,97,108,112,105,99,
-116,117,114,101,65,110,111,116,104,101,114,109,97,114,114,105,101,100,116,114,97
-,102,102,105,99,108,101,97,100,105,110,103,99,104,97,110,103,101,100,99,101,110,
-116,114,97,108,118,105,99,116,111,114,121,105,109,97,103,101,115,47,114,101,97,
-115,111,110,115,115,116,117,100,105,101,115,102,101,97,116,117,114,101,108,105,
-115,116,105,110,103,109,117,115,116,32,98,101,115,99,104,111,111,108,115,86,101,
-114,115,105,111,110,117,115,117,97,108,108,121,101,112,105,115,111,100,101,112,
-108,97,121,105,110,103,103,114,111,119,105,110,103,111,98,118,105,111,117,115,
-111,118,101,114,108,97,121,112,114,101,115,101,110,116,97,99,116,105,111,110,115
-,60,47,117,108,62,13,10,119,114,97,112,112,101,114,97,108,114,101,97,100,121,99,
-101,114,116,97,105,110,114,101,97,108,105,116,121,115,116,111,114,97,103,101,97,
-110,111,116,104,101,114,100,101,115,107,116,111,112,111,102,102,101,114,101,100,
-112,97,116,116,101,114,110,117,110,117,115,117,97,108,68,105,103,105,116,97,108,
-99,97,112,105,116,97,108,87,101,98,115,105,116,101,102,97,105,108,117,114,101,99
-,111,110,110,101,99,116,114,101,100,117,99,101,100,65,110,100,114,111,105,100,
-100,101,99,97,100,101,115,114,101,103,117,108,97,114,32,38,97,109,112,59,32,97,
-110,105,109,97,108,115,114,101,108,101,97,115,101,65,117,116,111,109,97,116,103,
-101,116,116,105,110,103,109,101,116,104,111,100,115,110,111,116,104,105,110,103,
-80,111,112,117,108,97,114,99,97,112,116,105,111,110,108,101,116,116,101,114,115,
-99,97,112,116,117,114,101,115,99,105,101,110,99,101,108,105,99,101,110,115,101,
-99,104,97,110,103,101,115,69,110,103,108,97,110,100,61,49,38,97,109,112,59,72,
-105,115,116,111,114,121,32,61,32,110,101,119,32,67,101,110,116,114,97,108,117,
-112,100,97,116,101,100,83,112,101,99,105,97,108,78,101,116,119,111,114,107,114,
-101,113,117,105,114,101,99,111,109,109,101,110,116,119,97,114,110,105,110,103,67
-,111,108,108,101,103,101,116,111,111,108,98,97,114,114,101,109,97,105,110,115,98
-,101,99,97,117,115,101,101,108,101,99,116,101,100,68,101,117,116,115,99,104,102,
-105,110,97,110,99,101,119,111,114,107,101,114,115,113,117,105,99,107,108,121,98,
-101,116,119,101,101,110,101,120,97,99,116,108,121,115,101,116,116,105,110,103,
-100,105,115,101,97,115,101,83,111,99,105,101,116,121,119,101,97,112,111,110,115,
-101,120,104,105,98,105,116,38,108,116,59,33,45,45,67,111,110,116,114,111,108,99,
-108,97,115,115,101,115,99,111,118,101,114,101,100,111,117,116,108,105,110,101,97
-,116,116,97,99,107,115,100,101,118,105,99,101,115,40,119,105,110,100,111,119,112
-,117,114,112,111,115,101,116,105,116,108,101,61,34,77,111,98,105,108,101,32,107,
-105,108,108,105,110,103,115,104,111,119,105,110,103,73,116,97,108,105,97,110,100
-,114,111,112,112,101,100,104,101,97,118,105,108,121,101,102,102,101,99,116,115,
-45,49,39,93,41,59,10,99,111,110,102,105,114,109,67,117,114,114,101,110,116,97,
-100,118,97,110,99,101,115,104,97,114,105,110,103,111,112,101,110,105,110,103,100
-,114,97,119,105,110,103,98,105,108,108,105,111,110,111,114,100,101,114,101,100,
-71,101,114,109,97,110,121,114,101,108,97,116,101,100,60,47,102,111,114,109,62,
-105,110,99,108,117,100,101,119,104,101,116,104,101,114,100,101,102,105,110,101,
-100,83,99,105,101,110,99,101,99,97,116,97,108,111,103,65,114,116,105,99,108,101,
-98,117,116,116,111,110,115,108,97,114,103,101,115,116,117,110,105,102,111,114,
-109,106,111,117,114,110,101,121,115,105,100,101,98,97,114,67,104,105,99,97,103,
-111,104,111,108,105,100,97,121,71,101,110,101,114,97,108,112,97,115,115,97,103,
-101,44,38,113,117,111,116,59,97,110,105,109,97,116,101,102,101,101,108,105,110,
-103,97,114,114,105,118,101,100,112,97,115,115,105,110,103,110,97,116,117,114,97,
-108,114,111,117,103,104,108,121,46,10,10,84,104,101,32,98,117,116,32,110,111,116
-,100,101,110,115,105,116,121,66,114,105,116,97,105,110,67,104,105,110,101,115,
-101,108,97,99,107,32,111,102,116,114,105,98,117,116,101,73,114,101,108,97,110,
-100,34,32,100,97,116,97,45,102,97,99,116,111,114,115,114,101,99,101,105,118,101,
-116,104,97,116,32,105,115,76,105,98,114,97,114,121,104,117,115,98,97,110,100,105
-,110,32,102,97,99,116,97,102,102,97,105,114,115,67,104,97,114,108,101,115,114,97
-,100,105,99,97,108,98,114,111,117,103,104,116,102,105,110,100,105,110,103,108,97
-,110,100,105,110,103,58,108,97,110,103,61,34,114,101,116,117,114,110,32,108,101,
-97,100,101,114,115,112,108,97,110,110,101,100,112,114,101,109,105,117,109,112,97
-,99,107,97,103,101,65,109,101,114,105,99,97,69,100,105,116,105,111,110,93,38,113
-,117,111,116,59,77,101,115,115,97,103,101,110,101,101,100,32,116,111,118,97,108,
-117,101,61,34,99,111,109,112,108,101,120,108,111,111,107,105,110,103,115,116,97,
-116,105,111,110,98,101,108,105,101,118,101,115,109,97,108,108,101,114,45,109,111
-,98,105,108,101,114,101,99,111,114,100,115,119,97,110,116,32,116,111,107,105,110
-,100,32,111,102,70,105,114,101,102,111,120,121,111,117,32,97,114,101,115,105,109
-,105,108,97,114,115,116,117,100,105,101,100,109,97,120,105,109,117,109,104,101,
-97,100,105,110,103,114,97,112,105,100,108,121,99,108,105,109,97,116,101,107,105,
-110,103,100,111,109,101,109,101,114,103,101,100,97,109,111,117,110,116,115,102,
-111,117,110,100,101,100,112,105,111,110,101,101,114,102,111,114,109,117,108,97,
-100,121,110,97,115,116,121,104,111,119,32,116,111,32,83,117,112,112,111,114,116,
-114,101,118,101,110,117,101,101,99,111,110,111,109,121,82,101,115,117,108,116,
-115,98,114,111,116,104,101,114,115,111,108,100,105,101,114,108,97,114,103,101,
-108,121,99,97,108,108,105,110,103,46,38,113,117,111,116,59,65,99,99,111,117,110,
-116,69,100,119,97,114,100,32,115,101,103,109,101,110,116,82,111,98,101,114,116,
-32,101,102,102,111,114,116,115,80,97,99,105,102,105,99,108,101,97,114,110,101,
-100,117,112,32,119,105,116,104,104,101,105,103,104,116,58,119,101,32,104,97,118,
-101,65,110,103,101,108,101,115,110,97,116,105,111,110,115,95,115,101,97,114,99,
-104,97,112,112,108,105,101,100,97,99,113,117,105,114,101,109,97,115,115,105,118,
-101,103,114,97,110,116,101,100,58,32,102,97,108,115,101,116,114,101,97,116,101,
-100,98,105,103,103,101,115,116,98,101,110,101,102,105,116,100,114,105,118,105,
-110,103,83,116,117,100,105,101,115,109,105,110,105,109,117,109,112,101,114,104,
-97,112,115,109,111,114,110,105,110,103,115,101,108,108,105,110,103,105,115,32,
-117,115,101,100,114,101,118,101,114,115,101,118,97,114,105,97,110,116,32,114,111
-,108,101,61,34,109,105,115,115,105,110,103,97,99,104,105,101,118,101,112,114,111
-,109,111,116,101,115,116,117,100,101,110,116,115,111,109,101,111,110,101,101,120
-,116,114,101,109,101,114,101,115,116,111,114,101,98,111,116,116,111,109,58,101,
-118,111,108,118,101,100,97,108,108,32,116,104,101,115,105,116,101,109,97,112,101
-,110,103,108,105,115,104,119,97,121,32,116,111,32,32,65,117,103,117,115,116,115,
-121,109,98,111,108,115,67,111,109,112,97,110,121,109,97,116,116,101,114,115,109,
-117,115,105,99,97,108,97,103,97,105,110,115,116,115,101,114,118,105,110,103,125,
-41,40,41,59,13,10,112,97,121,109,101,110,116,116,114,111,117,98,108,101,99,111,
-110,99,101,112,116,99,111,109,112,97,114,101,112,97,114,101,110,116,115,112,108,
-97,121,101,114,115,114,101,103,105,111,110,115,109,111,110,105,116,111,114,32,39
-,39,84,104,101,32,119,105,110,110,105,110,103,101,120,112,108,111,114,101,97,100
-,97,112,116,101,100,71,97,108,108,101,114,121,112,114,111,100,117,99,101,97,98,
-105,108,105,116,121,101,110,104,97,110,99,101,99,97,114,101,101,114,115,41,46,32
-,84,104,101,32,99,111,108,108,101,99,116,83,101,97,114,99,104,32,97,110,99,105,
-101,110,116,101,120,105,115,116,101,100,102,111,111,116,101,114,32,104,97,110,
-100,108,101,114,112,114,105,110,116,101,100,99,111,110,115,111,108,101,69,97,115
-,116,101,114,110,101,120,112,111,114,116,115,119,105,110,100,111,119,115,67,104,
-97,110,110,101,108,105,108,108,101,103,97,108,110,101,117,116,114,97,108,115,117
-,103,103,101,115,116,95,104,101,97,100,101,114,115,105,103,110,105,110,103,46,
-104,116,109,108,34,62,115,101,116,116,108,101,100,119,101,115,116,101,114,110,99
-,97,117,115,105,110,103,45,119,101,98,107,105,116,99,108,97,105,109,101,100,74,
-117,115,116,105,99,101,99,104,97,112,116,101,114,118,105,99,116,105,109,115,84,
-104,111,109,97,115,32,109,111,122,105,108,108,97,112,114,111,109,105,115,101,112
-,97,114,116,105,101,115,101,100,105,116,105,111,110,111,117,116,115,105,100,101,
-58,102,97,108,115,101,44,104,117,110,100,114,101,100,79,108,121,109,112,105,99,
-95,98,117,116,116,111,110,97,117,116,104,111,114,115,114,101,97,99,104,101,100,
-99,104,114,111,110,105,99,100,101,109,97,110,100,115,115,101,99,111,110,100,115,
-112,114,111,116,101,99,116,97,100,111,112,116,101,100,112,114,101,112,97,114,101
-,110,101,105,116,104,101,114,103,114,101,97,116,108,121,103,114,101,97,116,101,
-114,111,118,101,114,97,108,108,105,109,112,114,111,118,101,99,111,109,109,97,110
-,100,115,112,101,99,105,97,108,115,101,97,114,99,104,46,119,111,114,115,104,105,
-112,102,117,110,100,105,110,103,116,104,111,117,103,104,116,104,105,103,104,101,
-115,116,105,110,115,116,101,97,100,117,116,105,108,105,116,121,113,117,97,114,
-116,101,114,67,117,108,116,117,114,101,116,101,115,116,105,110,103,99,108,101,97
-,114,108,121,101,120,112,111,115,101,100,66,114,111,119,115,101,114,108,105,98,
-101,114,97,108,125,32,99,97,116,99,104,80,114,111,106,101,99,116,101,120,97,109,
-112,108,101,104,105,100,101,40,41,59,70,108,111,114,105,100,97,97,110,115,119,
-101,114,115,97,108,108,111,119,101,100,69,109,112,101,114,111,114,100,101,102,
-101,110,115,101,115,101,114,105,111,117,115,102,114,101,101,100,111,109,83,101,
-118,101,114,97,108,45,98,117,116,116,111,110,70,117,114,116,104,101,114,111,117,
-116,32,111,102,32,33,61,32,110,117,108,108,116,114,97,105,110,101,100,68,101,110
-,109,97,114,107,118,111,105,100,40,48,41,47,97,108,108,46,106,115,112,114,101,
-118,101,110,116,82,101,113,117,101,115,116,83,116,101,112,104,101,110,10,10,87,
-104,101,110,32,111,98,115,101,114,118,101,60,47,104,50,62,13,10,77,111,100,101,
-114,110,32,112,114,111,118,105,100,101,34,32,97,108,116,61,34,98,111,114,100,101
-,114,115,46,10,10,70,111,114,32,10,10,77,97,110,121,32,97,114,116,105,115,116,
-115,112,111,119,101,114,101,100,112,101,114,102,111,114,109,102,105,99,116,105,
-111,110,116,121,112,101,32,111,102,109,101,100,105,99,97,108,116,105,99,107,101,
-116,115,111,112,112,111,115,101,100,67,111,117,110,99,105,108,119,105,116,110,
-101,115,115,106,117,115,116,105,99,101,71,101,111,114,103,101,32,66,101,108,103,
-105,117,109,46,46,46,60,47,97,62,116,119,105,116,116,101,114,110,111,116,97,98,
-108,121,119,97,105,116,105,110,103,119,97,114,102,97,114,101,32,79,116,104,101,
-114,32,114,97,110,107,105,110,103,112,104,114,97,115,101,115,109,101,110,116,105
-,111,110,115,117,114,118,105,118,101,115,99,104,111,108,97,114,60,47,112,62,13,
-10,32,67,111,117,110,116,114,121,105,103,110,111,114,101,100,108,111,115,115,32,
-111,102,106,117,115,116,32,97,115,71,101,111,114,103,105,97,115,116,114,97,110,
-103,101,60,104,101,97,100,62,60,115,116,111,112,112,101,100,49,39,93,41,59,13,10
-,105,115,108,97,110,100,115,110,111,116,97,98,108,101,98,111,114,100,101,114,58,
-108,105,115,116,32,111,102,99,97,114,114,105,101,100,49,48,48,44,48,48,48,60,47,
-104,51,62,10,32,115,101,118,101,114,97,108,98,101,99,111,109,101,115,115,101,108
-,101,99,116,32,119,101,100,100,105,110,103,48,48,46,104,116,109,108,109,111,110,
-97,114,99,104,111,102,102,32,116,104,101,116,101,97,99,104,101,114,104,105,103,
-104,108,121,32,98,105,111,108,111,103,121,108,105,102,101,32,111,102,111,114,32,
-101,118,101,110,114,105,115,101,32,111,102,38,114,97,113,117,111,59,112,108,117,
-115,111,110,101,104,117,110,116,105,110,103,40,116,104,111,117,103,104,68,111,
-117,103,108,97,115,106,111,105,110,105,110,103,99,105,114,99,108,101,115,70,111,
-114,32,116,104,101,65,110,99,105,101,110,116,86,105,101,116,110,97,109,118,101,
-104,105,99,108,101,115,117,99,104,32,97,115,99,114,121,115,116,97,108,118,97,108
-,117,101,32,61,87,105,110,100,111,119,115,101,110,106,111,121,101,100,97,32,115,
-109,97,108,108,97,115,115,117,109,101,100,60,97,32,105,100,61,34,102,111,114,101
-,105,103,110,32,65,108,108,32,114,105,104,111,119,32,116,104,101,68,105,115,112,
-108,97,121,114,101,116,105,114,101,100,104,111,119,101,118,101,114,104,105,100,
-100,101,110,59,98,97,116,116,108,101,115,115,101,101,107,105,110,103,99,97,98,
-105,110,101,116,119,97,115,32,110,111,116,108,111,111,107,32,97,116,99,111,110,
-100,117,99,116,103,101,116,32,116,104,101,74,97,110,117,97,114,121,104,97,112,
-112,101,110,115,116,117,114,110,105,110,103,97,58,104,111,118,101,114,79,110,108
-,105,110,101,32,70,114,101,110,99,104,32,108,97,99,107,105,110,103,116,121,112,
-105,99,97,108,101,120,116,114,97,99,116,101,110,101,109,105,101,115,101,118,101,
-110,32,105,102,103,101,110,101,114,97,116,100,101,99,105,100,101,100,97,114,101,
-32,110,111,116,47,115,101,97,114,99,104,98,101,108,105,101,102,115,45,105,109,97
-,103,101,58,108,111,99,97,116,101,100,115,116,97,116,105,99,46,108,111,103,105,
-110,34,62,99,111,110,118,101,114,116,118,105,111,108,101,110,116,101,110,116,101
-,114,101,100,102,105,114,115,116,34,62,99,105,114,99,117,105,116,70,105,110,108,
-97,110,100,99,104,101,109,105,115,116,115,104,101,32,119,97,115,49,48,112,120,59
-,34,62,97,115,32,115,117,99,104,100,105,118,105,100,101,100,60,47,115,112,97,110
-,62,119,105,108,108,32,98,101,108,105,110,101,32,111,102,97,32,103,114,101,97,
-116,109,121,115,116,101,114,121,47,105,110,100,101,120,46,102,97,108,108,105,110
-,103,100,117,101,32,116,111,32,114,97,105,108,119,97,121,99,111,108,108,101,103,
-101,109,111,110,115,116,101,114,100,101,115,99,101,110,116,105,116,32,119,105,
-116,104,110,117,99,108,101,97,114,74,101,119,105,115,104,32,112,114,111,116,101,
-115,116,66,114,105,116,105,115,104,102,108,111,119,101,114,115,112,114,101,100,
-105,99,116,114,101,102,111,114,109,115,98,117,116,116,111,110,32,119,104,111,32,
-119,97,115,108,101,99,116,117,114,101,105,110,115,116,97,110,116,115,117,105,99,
-105,100,101,103,101,110,101,114,105,99,112,101,114,105,111,100,115,109,97,114,
-107,101,116,115,83,111,99,105,97,108,32,102,105,115,104,105,110,103,99,111,109,
-98,105,110,101,103,114,97,112,104,105,99,119,105,110,110,101,114,115,60,98,114,
-32,47,62,60,98,121,32,116,104,101,32,78,97,116,117,114,97,108,80,114,105,118,97,
-99,121,99,111,111,107,105,101,115,111,117,116,99,111,109,101,114,101,115,111,108
-,118,101,83,119,101,100,105,115,104,98,114,105,101,102,108,121,80,101,114,115,
-105,97,110,115,111,32,109,117,99,104,67,101,110,116,117,114,121,100,101,112,105,
-99,116,115,99,111,108,117,109,110,115,104,111,117,115,105,110,103,115,99,114,105
-,112,116,115,110,101,120,116,32,116,111,98,101,97,114,105,110,103,109,97,112,112
-,105,110,103,114,101,118,105,115,101,100,106,81,117,101,114,121,40,45,119,105,
-100,116,104,58,116,105,116,108,101,34,62,116,111,111,108,116,105,112,83,101,99,
-116,105,111,110,100,101,115,105,103,110,115,84,117,114,107,105,115,104,121,111,
-117,110,103,101,114,46,109,97,116,99,104,40,125,41,40,41,59,10,10,98,117,114,110
-,105,110,103,111,112,101,114,97,116,101,100,101,103,114,101,101,115,115,111,117,
-114,99,101,61,82,105,99,104,97,114,100,99,108,111,115,101,108,121,112,108,97,115
-,116,105,99,101,110,116,114,105,101,115,60,47,116,114,62,13,10,99,111,108,111,
-114,58,35,117,108,32,105,100,61,34,112,111,115,115,101,115,115,114,111,108,108,
-105,110,103,112,104,121,115,105,99,115,102,97,105,108,105,110,103,101,120,101,99
-,117,116,101,99,111,110,116,101,115,116,108,105,110,107,32,116,111,68,101,102,97
-,117,108,116,60,98,114,32,47,62,10,58,32,116,114,117,101,44,99,104,97,114,116,
-101,114,116,111,117,114,105,115,109,99,108,97,115,115,105,99,112,114,111,99,101,
-101,100,101,120,112,108,97,105,110,60,47,104,49,62,13,10,111,110,108,105,110,101
-,46,63,120,109,108,32,118,101,104,101,108,112,105,110,103,100,105,97,109,111,110
-,100,117,115,101,32,116,104,101,97,105,114,108,105,110,101,101,110,100,32,45,45,
-62,41,46,97,116,116,114,40,114,101,97,100,101,114,115,104,111,115,116,105,110,
-103,35,102,102,102,102,102,102,114,101,97,108,105,122,101,86,105,110,99,101,110,
-116,115,105,103,110,97,108,115,32,115,114,99,61,34,47,80,114,111,100,117,99,116,
-100,101,115,112,105,116,101,100,105,118,101,114,115,101,116,101,108,108,105,110,
-103,80,117,98,108,105,99,32,104,101,108,100,32,105,110,74,111,115,101,112,104,32
-,116,104,101,97,116,114,101,97,102,102,101,99,116,115,60,115,116,121,108,101,62,
-97,32,108,97,114,103,101,100,111,101,115,110,39,116,108,97,116,101,114,44,32,69,
-108,101,109,101,110,116,102,97,118,105,99,111,110,99,114,101,97,116,111,114,72,
-117,110,103,97,114,121,65,105,114,112,111,114,116,115,101,101,32,116,104,101,115
-,111,32,116,104,97,116,77,105,99,104,97,101,108,83,121,115,116,101,109,115,80,
-114,111,103,114,97,109,115,44,32,97,110,100,32,32,119,105,100,116,104,61,101,38,
-113,117,111,116,59,116,114,97,100,105,110,103,108,101,102,116,34,62,10,112,101,
-114,115,111,110,115,71,111,108,100,101,110,32,65,102,102,97,105,114,115,103,114,
-97,109,109,97,114,102,111,114,109,105,110,103,100,101,115,116,114,111,121,105,
-100,101,97,32,111,102,99,97,115,101,32,111,102,111,108,100,101,115,116,32,116,
-104,105,115,32,105,115,46,115,114,99,32,61,32,99,97,114,116,111,111,110,114,101,
-103,105,115,116,114,67,111,109,109,111,110,115,77,117,115,108,105,109,115,87,104
-,97,116,32,105,115,105,110,32,109,97,110,121,109,97,114,107,105,110,103,114,101,
-118,101,97,108,115,73,110,100,101,101,100,44,101,113,117,97,108,108,121,47,115,
-104,111,119,95,97,111,117,116,100,111,111,114,101,115,99,97,112,101,40,65,117,
-115,116,114,105,97,103,101,110,101,116,105,99,115,121,115,116,101,109,44,73,110,
-32,116,104,101,32,115,105,116,116,105,110,103,72,101,32,97,108,115,111,73,115,
-108,97,110,100,115,65,99,97,100,101,109,121,10,9,9,60,33,45,45,68,97,110,105,101
-,108,32,98,105,110,100,105,110,103,98,108,111,99,107,34,62,105,109,112,111,115,
-101,100,117,116,105,108,105,122,101,65,98,114,97,104,97,109,40,101,120,99,101,
-112,116,123,119,105,100,116,104,58,112,117,116,116,105,110,103,41,46,104,116,109
-,108,40,124,124,32,91,93,59,10,68,65,84,65,91,32,42,107,105,116,99,104,101,110,
-109,111,117,110,116,101,100,97,99,116,117,97,108,32,100,105,97,108,101,99,116,
-109,97,105,110,108,121,32,95,98,108,97,110,107,39,105,110,115,116,97,108,108,101
-,120,112,101,114,116,115,105,102,40,116,121,112,101,73,116,32,97,108,115,111,38,
-99,111,112,121,59,32,34,62,84,101,114,109,115,98,111,114,110,32,105,110,79,112,
-116,105,111,110,115,101,97,115,116,101,114,110,116,97,108,107,105,110,103,99,111
-,110,99,101,114,110,103,97,105,110,101,100,32,111,110,103,111,105,110,103,106,
-117,115,116,105,102,121,99,114,105,116,105,99,115,102,97,99,116,111,114,121,105,
-116,115,32,111,119,110,97,115,115,97,117,108,116,105,110,118,105,116,101,100,108
-,97,115,116,105,110,103,104,105,115,32,111,119,110,104,114,101,102,61,34,47,34,
-32,114,101,108,61,34,100,101,118,101,108,111,112,99,111,110,99,101,114,116,100,
-105,97,103,114,97,109,100,111,108,108,97,114,115,99,108,117,115,116,101,114,112,
-104,112,63,105,100,61,97,108,99,111,104,111,108,41,59,125,41,40,41,59,117,115,
-105,110,103,32,97,62,60,115,112,97,110,62,118,101,115,115,101,108,115,114,101,
-118,105,118,97,108,65,100,100,114,101,115,115,97,109,97,116,101,117,114,97,110,
-100,114,111,105,100,97,108,108,101,103,101,100,105,108,108,110,101,115,115,119,
-97,108,107,105,110,103,99,101,110,116,101,114,115,113,117,97,108,105,102,121,109
-,97,116,99,104,101,115,117,110,105,102,105,101,100,101,120,116,105,110,99,116,68
-,101,102,101,110,115,101,100,105,101,100,32,105,110,10,9,60,33,45,45,32,99,117,
-115,116,111,109,115,108,105,110,107,105,110,103,76,105,116,116,108,101,32,66,111
-,111,107,32,111,102,101,118,101,110,105,110,103,109,105,110,46,106,115,63,97,114
-,101,32,116,104,101,107,111,110,116,97,107,116,116,111,100,97,121,39,115,46,104,
-116,109,108,34,32,116,97,114,103,101,116,61,119,101,97,114,105,110,103,65,108,
-108,32,82,105,103,59,10,125,41,40,41,59,114,97,105,115,105,110,103,32,65,108,115
-,111,44,32,99,114,117,99,105,97,108,97,98,111,117,116,34,62,100,101,99,108,97,
-114,101,45,45,62,10,60,115,99,102,105,114,101,102,111,120,97,115,32,109,117,99,
-104,97,112,112,108,105,101,115,105,110,100,101,120,44,32,115,44,32,98,117,116,32
-,116,121,112,101,32,61,32,10,13,10,60,33,45,45,116,111,119,97,114,100,115,82,101
-,99,111,114,100,115,80,114,105,118,97,116,101,70,111,114,101,105,103,110,80,114,
-101,109,105,101,114,99,104,111,105,99,101,115,86,105,114,116,117,97,108,114,101,
-116,117,114,110,115,67,111,109,109,101,110,116,80,111,119,101,114,101,100,105,
-110,108,105,110,101,59,112,111,118,101,114,116,121,99,104,97,109,98,101,114,76,
-105,118,105,110,103,32,118,111,108,117,109,101,115,65,110,116,104,111,110,121,
-108,111,103,105,110,34,32,82,101,108,97,116,101,100,69,99,111,110,111,109,121,
-114,101,97,99,104,101,115,99,117,116,116,105,110,103,103,114,97,118,105,116,121,
-108,105,102,101,32,105,110,67,104,97,112,116,101,114,45,115,104,97,100,111,119,
-78,111,116,97,98,108,101,60,47,116,100,62,13,10,32,114,101,116,117,114,110,115,
-116,97,100,105,117,109,119,105,100,103,101,116,115,118,97,114,121,105,110,103,
-116,114,97,118,101,108,115,104,101,108,100,32,98,121,119,104,111,32,97,114,101,
-119,111,114,107,32,105,110,102,97,99,117,108,116,121,97,110,103,117,108,97,114,
-119,104,111,32,104,97,100,97,105,114,112,111,114,116,116,111,119,110,32,111,102,
-10,10,83,111,109,101,32,39,99,108,105,99,107,39,99,104,97,114,103,101,115,107,
-101,121,119,111,114,100,105,116,32,119,105,108,108,99,105,116,121,32,111,102,40,
-116,104,105,115,41,59,65,110,100,114,101,119,32,117,110,105,113,117,101,32,99,
-104,101,99,107,101,100,111,114,32,109,111,114,101,51,48,48,112,120,59,32,114,101
-,116,117,114,110,59,114,115,105,111,110,61,34,112,108,117,103,105,110,115,119,
-105,116,104,105,110,32,104,101,114,115,101,108,102,83,116,97,116,105,111,110,70,
-101,100,101,114,97,108,118,101,110,116,117,114,101,112,117,98,108,105,115,104,
-115,101,110,116,32,116,111,116,101,110,115,105,111,110,97,99,116,114,101,115,115
-,99,111,109,101,32,116,111,102,105,110,103,101,114,115,68,117,107,101,32,111,102
-,112,101,111,112,108,101,44,101,120,112,108,111,105,116,119,104,97,116,32,105,
-115,104,97,114,109,111,110,121,97,32,109,97,106,111,114,34,58,34,104,116,116,112
-,105,110,32,104,105,115,32,109,101,110,117,34,62,10,109,111,110,116,104,108,121,
-111,102,102,105,99,101,114,99,111,117,110,99,105,108,103,97,105,110,105,110,103,
-101,118,101,110,32,105,110,83,117,109,109,97,114,121,100,97,116,101,32,111,102,
-108,111,121,97,108,116,121,102,105,116,110,101,115,115,97,110,100,32,119,97,115,
-101,109,112,101,114,111,114,115,117,112,114,101,109,101,83,101,99,111,110,100,32
-,104,101,97,114,105,110,103,82,117,115,115,105,97,110,108,111,110,103,101,115,
-116,65,108,98,101,114,116,97,108,97,116,101,114,97,108,115,101,116,32,111,102,32
-,115,109,97,108,108,34,62,46,97,112,112,101,110,100,100,111,32,119,105,116,104,
-102,101,100,101,114,97,108,98,97,110,107,32,111,102,98,101,110,101,97,116,104,68
-,101,115,112,105,116,101,67,97,112,105,116,97,108,103,114,111,117,110,100,115,41
-,44,32,97,110,100,32,112,101,114,99,101,110,116,105,116,32,102,114,111,109,99,
-108,111,115,105,110,103,99,111,110,116,97,105,110,73,110,115,116,101,97,100,102,
-105,102,116,101,101,110,97,115,32,119,101,108,108,46,121,97,104,111,111,46,114,
-101,115,112,111,110,100,102,105,103,104,116,101,114,111,98,115,99,117,114,101,
-114,101,102,108,101,99,116,111,114,103,97,110,105,99,61,32,77,97,116,104,46,101,
-100,105,116,105,110,103,111,110,108,105,110,101,32,112,97,100,100,105,110,103,97
-,32,119,104,111,108,101,111,110,101,114,114,111,114,121,101,97,114,32,111,102,
-101,110,100,32,111,102,32,98,97,114,114,105,101,114,119,104,101,110,32,105,116,
-104,101,97,100,101,114,32,104,111,109,101,32,111,102,114,101,115,117,109,101,100
-,114,101,110,97,109,101,100,115,116,114,111,110,103,62,104,101,97,116,105,110,
-103,114,101,116,97,105,110,115,99,108,111,117,100,102,114,119,97,121,32,111,102,
-32,77,97,114,99,104,32,49,107,110,111,119,105,110,103,105,110,32,112,97,114,116,
-66,101,116,119,101,101,110,108,101,115,115,111,110,115,99,108,111,115,101,115,
-116,118,105,114,116,117,97,108,108,105,110,107,115,34,62,99,114,111,115,115,101,
-100,69,78,68,32,45,45,62,102,97,109,111,117,115,32,97,119,97,114,100,101,100,76,
-105,99,101,110,115,101,72,101,97,108,116,104,32,102,97,105,114,108,121,32,119,
-101,97,108,116,104,121,109,105,110,105,109,97,108,65,102,114,105,99,97,110,99,
-111,109,112,101,116,101,108,97,98,101,108,34,62,115,105,110,103,105,110,103,102,
-97,114,109,101,114,115,66,114,97,115,105,108,41,100,105,115,99,117,115,115,114,
-101,112,108,97,99,101,71,114,101,103,111,114,121,102,111,110,116,32,99,111,112,
-117,114,115,117,101,100,97,112,112,101,97,114,115,109,97,107,101,32,117,112,114,
-111,117,110,100,101,100,98,111,116,104,32,111,102,98,108,111,99,107,101,100,115,
-97,119,32,116,104,101,111,102,102,105,99,101,115,99,111,108,111,117,114,115,105,
-102,40,100,111,99,117,119,104,101,110,32,104,101,101,110,102,111,114,99,101,112,
-117,115,104,40,102,117,65,117,103,117,115,116,32,85,84,70,45,56,34,62,70,97,110,
-116,97,115,121,105,110,32,109,111,115,116,105,110,106,117,114,101,100,85,115,117
-,97,108,108,121,102,97,114,109,105,110,103,99,108,111,115,117,114,101,111,98,106
-,101,99,116,32,100,101,102,101,110,99,101,117,115,101,32,111,102,32,77,101,100,
-105,99,97,108,60,98,111,100,121,62,10,101,118,105,100,101,110,116,98,101,32,117,
-115,101,100,107,101,121,67,111,100,101,115,105,120,116,101,101,110,73,115,108,97
-,109,105,99,35,48,48,48,48,48,48,101,110,116,105,114,101,32,119,105,100,101,108,
-121,32,97,99,116,105,118,101,32,40,116,121,112,101,111,102,111,110,101,32,99,97,
-110,99,111,108,111,114,32,61,115,112,101,97,107,101,114,101,120,116,101,110,100,
-115,80,104,121,115,105,99,115,116,101,114,114,97,105,110,60,116,98,111,100,121,
-62,102,117,110,101,114,97,108,118,105,101,119,105,110,103,109,105,100,100,108,
-101,32,99,114,105,99,107,101,116,112,114,111,112,104,101,116,115,104,105,102,116
-,101,100,100,111,99,116,111,114,115,82,117,115,115,101,108,108,32,116,97,114,103
-,101,116,99,111,109,112,97,99,116,97,108,103,101,98,114,97,115,111,99,105,97,108
-,45,98,117,108,107,32,111,102,109,97,110,32,97,110,100,60,47,116,100,62,10,32,
-104,101,32,108,101,102,116,41,46,118,97,108,40,41,102,97,108,115,101,41,59,108,
-111,103,105,99,97,108,98,97,110,107,105,110,103,104,111,109,101,32,116,111,110,
-97,109,105,110,103,32,65,114,105,122,111,110,97,99,114,101,100,105,116,115,41,59
-,10,125,41,59,10,102,111,117,110,100,101,114,105,110,32,116,117,114,110,67,111,
-108,108,105,110,115,98,101,102,111,114,101,32,66,117,116,32,116,104,101,99,104,
-97,114,103,101,100,84,105,116,108,101,34,62,67,97,112,116,97,105,110,115,112,101
-,108,108,101,100,103,111,100,100,101,115,115,84,97,103,32,45,45,62,65,100,100,
-105,110,103,58,98,117,116,32,119,97,115,82,101,99,101,110,116,32,112,97,116,105,
-101,110,116,98,97,99,107,32,105,110,61,102,97,108,115,101,38,76,105,110,99,111,
-108,110,119,101,32,107,110,111,119,67,111,117,110,116,101,114,74,117,100,97,105,
-115,109,115,99,114,105,112,116,32,97,108,116,101,114,101,100,39,93,41,59,10,32,
-32,104,97,115,32,116,104,101,117,110,99,108,101,97,114,69,118,101,110,116,39,44,
-98,111,116,104,32,105,110,110,111,116,32,97,108,108,10,10,60,33,45,45,32,112,108
-,97,99,105,110,103,104,97,114,100,32,116,111,32,99,101,110,116,101,114,115,111,
-114,116,32,111,102,99,108,105,101,110,116,115,115,116,114,101,101,116,115,66,101
-,114,110,97,114,100,97,115,115,101,114,116,115,116,101,110,100,32,116,111,102,97
-,110,116,97,115,121,100,111,119,110,32,105,110,104,97,114,98,111,117,114,70,114,
-101,101,100,111,109,106,101,119,101,108,114,121,47,97,98,111,117,116,46,46,115,
-101,97,114,99,104,108,101,103,101,110,100,115,105,115,32,109,97,100,101,109,111,
-100,101,114,110,32,111,110,108,121,32,111,110,111,110,108,121,32,116,111,105,109
-,97,103,101,34,32,108,105,110,101,97,114,32,112,97,105,110,116,101,114,97,110,
-100,32,110,111,116,114,97,114,101,108,121,32,97,99,114,111,110,121,109,100,101,
-108,105,118,101,114,115,104,111,114,116,101,114,48,48,38,97,109,112,59,97,115,32
-,109,97,110,121,119,105,100,116,104,61,34,47,42,32,60,33,91,67,116,105,116,108,
-101,32,61,111,102,32,116,104,101,32,108,111,119,101,115,116,32,112,105,99,107,
-101,100,32,101,115,99,97,112,101,100,117,115,101,115,32,111,102,112,101,111,112,
-108,101,115,32,80,117,98,108,105,99,77,97,116,116,104,101,119,116,97,99,116,105,
-99,115,100,97,109,97,103,101,100,119,97,121,32,102,111,114,108,97,119,115,32,111
-,102,101,97,115,121,32,116,111,32,119,105,110,100,111,119,115,116,114,111,110,
-103,32,32,115,105,109,112,108,101,125,99,97,116,99,104,40,115,101,118,101,110,
-116,104,105,110,102,111,98,111,120,119,101,110,116,32,116,111,112,97,105,110,116
-,101,100,99,105,116,105,122,101,110,73,32,100,111,110,39,116,114,101,116,114,101
-,97,116,46,32,83,111,109,101,32,119,119,46,34,41,59,10,98,111,109,98,105,110,103
-,109,97,105,108,116,111,58,109,97,100,101,32,105,110,46,32,77,97,110,121,32,99,
-97,114,114,105,101,115,124,124,123,125,59,119,105,119,111,114,107,32,111,102,115
-,121,110,111,110,121,109,100,101,102,101,97,116,115,102,97,118,111,114,101,100,
-111,112,116,105,99,97,108,112,97,103,101,84,114,97,117,110,108,101,115,115,32,
-115,101,110,100,105,110,103,108,101,102,116,34,62,60,99,111,109,83,99,111,114,65
-,108,108,32,116,104,101,106,81,117,101,114,121,46,116,111,117,114,105,115,116,67
-,108,97,115,115,105,99,102,97,108,115,101,34,32,87,105,108,104,101,108,109,115,
-117,98,117,114,98,115,103,101,110,117,105,110,101,98,105,115,104,111,112,115,46,
-115,112,108,105,116,40,103,108,111,98,97,108,32,102,111,108,108,111,119,115,98,
-111,100,121,32,111,102,110,111,109,105,110,97,108,67,111,110,116,97,99,116,115,
-101,99,117,108,97,114,108,101,102,116,32,116,111,99,104,105,101,102,108,121,45,
-104,105,100,100,101,110,45,98,97,110,110,101,114,60,47,108,105,62,10,10,46,32,87
-,104,101,110,32,105,110,32,98,111,116,104,100,105,115,109,105,115,115,69,120,112
-,108,111,114,101,97,108,119,97,121,115,32,118,105,97,32,116,104,101,115,112,97,
-195,177,111,108,119,101,108,102,97,114,101,114,117,108,105,110,103,32,97,114,114
-,97,110,103,101,99,97,112,116,97,105,110,104,105,115,32,115,111,110,114,117,108,
-101,32,111,102,104,101,32,116,111,111,107,105,116,115,101,108,102,44,61,48,38,97
-,109,112,59,40,99,97,108,108,101,100,115,97,109,112,108,101,115,116,111,32,109,
-97,107,101,99,111,109,47,112,97,103,77,97,114,116,105,110,32,75,101,110,110,101,
-100,121,97,99,99,101,112,116,115,102,117,108,108,32,111,102,104,97,110,100,108,
-101,100,66,101,115,105,100,101,115,47,47,45,45,62,60,47,97,98,108,101,32,116,111
-,116,97,114,103,101,116,115,101,115,115,101,110,99,101,104,105,109,32,116,111,32
-,105,116,115,32,98,121,32,99,111,109,109,111,110,46,109,105,110,101,114,97,108,
-116,111,32,116,97,107,101,119,97,121,115,32,116,111,115,46,111,114,103,47,108,97
-,100,118,105,115,101,100,112,101,110,97,108,116,121,115,105,109,112,108,101,58,
-105,102,32,116,104,101,121,76,101,116,116,101,114,115,97,32,115,104,111,114,116,
-72,101,114,98,101,114,116,115,116,114,105,107,101,115,32,103,114,111,117,112,115
-,46,108,101,110,103,116,104,102,108,105,103,104,116,115,111,118,101,114,108,97,
-112,115,108,111,119,108,121,32,108,101,115,115,101,114,32,115,111,99,105,97,108,
-32,60,47,112,62,10,9,9,105,116,32,105,110,116,111,114,97,110,107,101,100,32,114,
-97,116,101,32,111,102,117,108,62,13,10,32,32,97,116,116,101,109,112,116,112,97,
-105,114,32,111,102,109,97,107,101,32,105,116,75,111,110,116,97,107,116,65,110,
-116,111,110,105,111,104,97,118,105,110,103,32,114,97,116,105,110,103,115,32,97,
-99,116,105,118,101,115,116,114,101,97,109,115,116,114,97,112,112,101,100,34,41,
-46,99,115,115,40,104,111,115,116,105,108,101,108,101,97,100,32,116,111,108,105,
-116,116,108,101,32,103,114,111,117,112,115,44,80,105,99,116,117,114,101,45,45,62
-,13,10,13,10,32,114,111,119,115,61,34,32,111,98,106,101,99,116,105,110,118,101,
-114,115,101,60,102,111,111,116,101,114,67,117,115,116,111,109,86,62,60,92,47,115
-,99,114,115,111,108,118,105,110,103,67,104,97,109,98,101,114,115,108,97,118,101,
-114,121,119,111,117,110,100,101,100,119,104,101,114,101,97,115,33,61,32,39,117,
-110,100,102,111,114,32,97,108,108,112,97,114,116,108,121,32,45,114,105,103,104,
-116,58,65,114,97,98,105,97,110,98,97,99,107,101,100,32,99,101,110,116,117,114,
-121,117,110,105,116,32,111,102,109,111,98,105,108,101,45,69,117,114,111,112,101,
-44,105,115,32,104,111,109,101,114,105,115,107,32,111,102,100,101,115,105,114,101
-,100,67,108,105,110,116,111,110,99,111,115,116,32,111,102,97,103,101,32,111,102,
-32,98,101,99,111,109,101,32,110,111,110,101,32,111,102,112,38,113,117,111,116,59
-,77,105,100,100,108,101,32,101,97,100,39,41,91,48,67,114,105,116,105,99,115,115,
-116,117,100,105,111,115,62,38,99,111,112,121,59,103,114,111,117,112,34,62,97,115
-,115,101,109,98,108,109,97,107,105,110,103,32,112,114,101,115,115,101,100,119,
-105,100,103,101,116,46,112,115,58,34,32,63,32,114,101,98,117,105,108,116,98,121,
-32,115,111,109,101,70,111,114,109,101,114,32,101,100,105,116,111,114,115,100,101
-,108,97,121,101,100,67,97,110,111,110,105,99,104,97,100,32,116,104,101,112,117,
-115,104,105,110,103,99,108,97,115,115,61,34,98,117,116,32,97,114,101,112,97,114,
-116,105,97,108,66,97,98,121,108,111,110,98,111,116,116,111,109,32,99,97,114,114,
-105,101,114,67,111,109,109,97,110,100,105,116,115,32,117,115,101,65,115,32,119,
-105,116,104,99,111,117,114,115,101,115,97,32,116,104,105,114,100,100,101,110,111
-,116,101,115,97,108,115,111,32,105,110,72,111,117,115,116,111,110,50,48,112,120,
-59,34,62,97,99,99,117,115,101,100,100,111,117,98,108,101,32,103,111,97,108,32,
-111,102,70,97,109,111,117,115,32,41,46,98,105,110,100,40,112,114,105,101,115,116
-,115,32,79,110,108,105,110,101,105,110,32,74,117,108,121,115,116,32,43,32,34,103
-,99,111,110,115,117,108,116,100,101,99,105,109,97,108,104,101,108,112,102,117,
-108,114,101,118,105,118,101,100,105,115,32,118,101,114,121,114,39,43,39,105,112,
-116,108,111,115,105,110,103,32,102,101,109,97,108,101,115,105,115,32,97,108,115,
-111,115,116,114,105,110,103,115,100,97,121,115,32,111,102,97,114,114,105,118,97,
-108,102,117,116,117,114,101,32,60,111,98,106,101,99,116,102,111,114,99,105,110,
-103,83,116,114,105,110,103,40,34,32,47,62,10,9,9,104,101,114,101,32,105,115,101,
-110,99,111,100,101,100,46,32,32,84,104,101,32,98,97,108,108,111,111,110,100,111,
-110,101,32,98,121,47,99,111,109,109,111,110,98,103,99,111,108,111,114,108,97,119
-,32,111,102,32,73,110,100,105,97,110,97,97,118,111,105,100,101,100,98,117,116,32
-,116,104,101,50,112,120,32,51,112,120,106,113,117,101,114,121,46,97,102,116,101,
-114,32,97,112,111,108,105,99,121,46,109,101,110,32,97,110,100,102,111,111,116,
-101,114,45,61,32,116,114,117,101,59,102,111,114,32,117,115,101,115,99,114,101,
-101,110,46,73,110,100,105,97,110,32,105,109,97,103,101,32,61,102,97,109,105,108,
-121,44,104,116,116,112,58,47,47,32,38,110,98,115,112,59,100,114,105,118,101,114,
-115,101,116,101,114,110,97,108,115,97,109,101,32,97,115,110,111,116,105,99,101,
-100,118,105,101,119,101,114,115,125,41,40,41,59,10,32,105,115,32,109,111,114,101
-,115,101,97,115,111,110,115,102,111,114,109,101,114,32,116,104,101,32,110,101,
-119,105,115,32,106,117,115,116,99,111,110,115,101,110,116,32,83,101,97,114,99,
-104,119,97,115,32,116,104,101,119,104,121,32,116,104,101,115,104,105,112,112,101
-,100,98,114,62,60,98,114,62,119,105,100,116,104,58,32,104,101,105,103,104,116,61
-,109,97,100,101,32,111,102,99,117,105,115,105,110,101,105,115,32,116,104,97,116,
-97,32,118,101,114,121,32,65,100,109,105,114,97,108,32,102,105,120,101,100,59,110
-,111,114,109,97,108,32,77,105,115,115,105,111,110,80,114,101,115,115,44,32,111,
-110,116,97,114,105,111,99,104,97,114,115,101,116,116,114,121,32,116,111,32,105,
-110,118,97,100,101,100,61,34,116,114,117,101,34,115,112,97,99,105,110,103,105,
-115,32,109,111,115,116,97,32,109,111,114,101,32,116,111,116,97,108,108,121,102,
-97,108,108,32,111,102,125,41,59,13,10,32,32,105,109,109,101,110,115,101,116,105,
-109,101,32,105,110,115,101,116,32,111,117,116,115,97,116,105,115,102,121,116,111
-,32,102,105,110,100,100,111,119,110,32,116,111,108,111,116,32,111,102,32,80,108,
-97,121,101,114,115,105,110,32,74,117,110,101,113,117,97,110,116,117,109,110,111,
-116,32,116,104,101,116,105,109,101,32,116,111,100,105,115,116,97,110,116,70,105,
-110,110,105,115,104,115,114,99,32,61,32,40,115,105,110,103,108,101,32,104,101,
-108,112,32,111,102,71,101,114,109,97,110,32,108,97,119,32,97,110,100,108,97,98,
-101,108,101,100,102,111,114,101,115,116,115,99,111,111,107,105,110,103,115,112,
-97,99,101,34,62,104,101,97,100,101,114,45,119,101,108,108,32,97,115,83,116,97,
-110,108,101,121,98,114,105,100,103,101,115,47,103,108,111,98,97,108,67,114,111,
-97,116,105,97,32,65,98,111,117,116,32,91,48,93,59,10,32,32,105,116,44,32,97,110,
-100,103,114,111,117,112,101,100,98,101,105,110,103,32,97,41,123,116,104,114,111,
-119,104,101,32,109,97,100,101,108,105,103,104,116,101,114,101,116,104,105,99,97,
-108,70,70,70,70,70,70,34,98,111,116,116,111,109,34,108,105,107,101,32,97,32,101,
-109,112,108,111,121,115,108,105,118,101,32,105,110,97,115,32,115,101,101,110,112
-,114,105,110,116,101,114,109,111,115,116,32,111,102,117,98,45,108,105,110,107,
-114,101,106,101,99,116,115,97,110,100,32,117,115,101,105,109,97,103,101,34,62,
-115,117,99,99,101,101,100,102,101,101,100,105,110,103,78,117,99,108,101,97,114,
-105,110,102,111,114,109,97,116,111,32,104,101,108,112,87,111,109,101,110,39,115,
-78,101,105,116,104,101,114,77,101,120,105,99,97,110,112,114,111,116,101,105,110,
-60,116,97,98,108,101,32,98,121,32,109,97,110,121,104,101,97,108,116,104,121,108,
-97,119,115,117,105,116,100,101,118,105,115,101,100,46,112,117,115,104,40,123,115
-,101,108,108,101,114,115,115,105,109,112,108,121,32,84,104,114,111,117,103,104,
-46,99,111,111,107,105,101,32,73,109,97,103,101,40,111,108,100,101,114,34,62,117,
-115,46,106,115,34,62,32,83,105,110,99,101,32,117,110,105,118,101,114,115,108,97,
-114,103,101,114,32,111,112,101,110,32,116,111,33,45,45,32,101,110,100,108,105,
-101,115,32,105,110,39,93,41,59,13,10,32,32,109,97,114,107,101,116,119,104,111,32
-,105,115,32,40,34,68,79,77,67,111,109,97,110,97,103,101,100,111,110,101,32,102,
-111,114,116,121,112,101,111,102,32,75,105,110,103,100,111,109,112,114,111,102,
-105,116,115,112,114,111,112,111,115,101,116,111,32,115,104,111,119,99,101,110,
-116,101,114,59,109,97,100,101,32,105,116,100,114,101,115,115,101,100,119,101,114
-,101,32,105,110,109,105,120,116,117,114,101,112,114,101,99,105,115,101,97,114,
-105,115,105,110,103,115,114,99,32,61,32,39,109,97,107,101,32,97,32,115,101,99,
-117,114,101,100,66,97,112,116,105,115,116,118,111,116,105,110,103,32,10,9,9,118,
-97,114,32,77,97,114,99,104,32,50,103,114,101,119,32,117,112,67,108,105,109,97,
-116,101,46,114,101,109,111,118,101,115,107,105,108,108,101,100,119,97,121,32,116
-,104,101,60,47,104,101,97,100,62,102,97,99,101,32,111,102,97,99,116,105,110,103,
-32,114,105,103,104,116,34,62,116,111,32,119,111,114,107,114,101,100,117,99,101,
-115,104,97,115,32,104,97,100,101,114,101,99,116,101,100,115,104,111,119,40,41,59
-,97,99,116,105,111,110,61,98,111,111,107,32,111,102,97,110,32,97,114,101,97,61,
-61,32,34,104,116,116,60,104,101,97,100,101,114,10,60,104,116,109,108,62,99,111,
-110,102,111,114,109,102,97,99,105,110,103,32,99,111,111,107,105,101,46,114,101,
-108,121,32,111,110,104,111,115,116,101,100,32,46,99,117,115,116,111,109,104,101,
-32,119,101,110,116,98,117,116,32,102,111,114,115,112,114,101,97,100,32,70,97,109
-,105,108,121,32,97,32,109,101,97,110,115,111,117,116,32,116,104,101,102,111,114,
-117,109,115,46,102,111,111,116,97,103,101,34,62,77,111,98,105,108,67,108,101,109
-,101,110,116,115,34,32,105,100,61,34,97,115,32,104,105,103,104,105,110,116,101,
-110,115,101,45,45,62,60,33,45,45,102,101,109,97,108,101,32,105,115,32,115,101,
-101,110,105,109,112,108,105,101,100,115,101,116,32,116,104,101,97,32,115,116,97,
-116,101,97,110,100,32,104,105,115,102,97,115,116,101,115,116,98,101,115,105,100,
-101,115,98,117,116,116,111,110,95,98,111,117,110,100,101,100,34,62,60,105,109,
-103,32,73,110,102,111,98,111,120,101,118,101,110,116,115,44,97,32,121,111,117,
-110,103,97,110,100,32,97,114,101,78,97,116,105,118,101,32,99,104,101,97,112,101,
-114,84,105,109,101,111,117,116,97,110,100,32,104,97,115,101,110,103,105,110,101,
-115,119,111,110,32,116,104,101,40,109,111,115,116,108,121,114,105,103,104,116,58
-,32,102,105,110,100,32,97,32,45,98,111,116,116,111,109,80,114,105,110,99,101,32,
-97,114,101,97,32,111,102,109,111,114,101,32,111,102,115,101,97,114,99,104,95,110
-,97,116,117,114,101,44,108,101,103,97,108,108,121,112,101,114,105,111,100,44,108
-,97,110,100,32,111,102,111,114,32,119,105,116,104,105,110,100,117,99,101,100,112
-,114,111,118,105,110,103,109,105,115,115,105,108,101,108,111,99,97,108,108,121,
-65,103,97,105,110,115,116,116,104,101,32,119,97,121,107,38,113,117,111,116,59,
-112,120,59,34,62,13,10,112,117,115,104,101,100,32,97,98,97,110,100,111,110,110,
-117,109,101,114,97,108,67,101,114,116,97,105,110,73,110,32,116,104,105,115,109,
-111,114,101,32,105,110,111,114,32,115,111,109,101,110,97,109,101,32,105,115,97,
-110,100,44,32,105,110,99,114,111,119,110,101,100,73,83,66,78,32,48,45,99,114,101
-,97,116,101,115,79,99,116,111,98,101,114,109,97,121,32,110,111,116,99,101,110,
-116,101,114,32,108,97,116,101,32,105,110,68,101,102,101,110,99,101,101,110,97,99
-,116,101,100,119,105,115,104,32,116,111,98,114,111,97,100,108,121,99,111,111,108
-,105,110,103,111,110,108,111,97,100,61,105,116,46,32,84,104,101,114,101,99,111,
-118,101,114,77,101,109,98,101,114,115,104,101,105,103,104,116,32,97,115,115,117,
-109,101,115,60,104,116,109,108,62,10,112,101,111,112,108,101,46,105,110,32,111,
-110,101,32,61,119,105,110,100,111,119,102,111,111,116,101,114,95,97,32,103,111,
-111,100,32,114,101,107,108,97,109,97,111,116,104,101,114,115,44,116,111,32,116,
-104,105,115,95,99,111,111,107,105,101,112,97,110,101,108,34,62,76,111,110,100,
-111,110,44,100,101,102,105,110,101,115,99,114,117,115,104,101,100,98,97,112,116,
-105,115,109,99,111,97,115,116,97,108,115,116,97,116,117,115,32,116,105,116,108,
-101,34,32,109,111,118,101,32,116,111,108,111,115,116,32,105,110,98,101,116,116,
-101,114,32,105,109,112,108,105,101,115,114,105,118,97,108,114,121,115,101,114,
-118,101,114,115,32,83,121,115,116,101,109,80,101,114,104,97,112,115,101,115,32,
-97,110,100,32,99,111,110,116,101,110,100,102,108,111,119,105,110,103,108,97,115,
-116,101,100,32,114,105,115,101,32,105,110,71,101,110,101,115,105,115,118,105,101
-,119,32,111,102,114,105,115,105,110,103,32,115,101,101,109,32,116,111,98,117,116
-,32,105,110,32,98,97,99,107,105,110,103,104,101,32,119,105,108,108,103,105,118,
-101,110,32,97,103,105,118,105,110,103,32,99,105,116,105,101,115,46,102,108,111,
-119,32,111,102,32,76,97,116,101,114,32,97,108,108,32,98,117,116,72,105,103,104,
-119,97,121,111,110,108,121,32,98,121,115,105,103,110,32,111,102,104,101,32,100,
-111,101,115,100,105,102,102,101,114,115,98,97,116,116,101,114,121,38,97,109,112,
-59,108,97,115,105,110,103,108,101,115,116,104,114,101,97,116,115,105,110,116,101
-,103,101,114,116,97,107,101,32,111,110,114,101,102,117,115,101,100,99,97,108,108
-,101,100,32,61,85,83,38,97,109,112,83,101,101,32,116,104,101,110,97,116,105,118,
-101,115,98,121,32,116,104,105,115,115,121,115,116,101,109,46,104,101,97,100,32,
-111,102,58,104,111,118,101,114,44,108,101,115,98,105,97,110,115,117,114,110,97,
-109,101,97,110,100,32,97,108,108,99,111,109,109,111,110,47,104,101,97,100,101,
-114,95,95,112,97,114,97,109,115,72,97,114,118,97,114,100,47,112,105,120,101,108,
-46,114,101,109,111,118,97,108,115,111,32,108,111,110,103,114,111,108,101,32,111,
-102,106,111,105,110,116,108,121,115,107,121,115,99,114,97,85,110,105,99,111,100,
-101,98,114,32,47,62,13,10,65,116,108,97,110,116,97,110,117,99,108,101,117,115,67
-,111,117,110,116,121,44,112,117,114,101,108,121,32,99,111,117,110,116,34,62,101,
-97,115,105,108,121,32,98,117,105,108,100,32,97,111,110,99,108,105,99,107,97,32,
-103,105,118,101,110,112,111,105,110,116,101,114,104,38,113,117,111,116,59,101,
-118,101,110,116,115,32,101,108,115,101,32,123,10,100,105,116,105,111,110,115,110
-,111,119,32,116,104,101,44,32,119,105,116,104,32,109,97,110,32,119,104,111,111,
-114,103,47,87,101,98,111,110,101,32,97,110,100,99,97,118,97,108,114,121,72,101,
-32,100,105,101,100,115,101,97,116,116,108,101,48,48,44,48,48,48,32,123,119,105,
-110,100,111,119,104,97,118,101,32,116,111,105,102,40,119,105,110,100,97,110,100,
-32,105,116,115,115,111,108,101,108,121,32,109,38,113,117,111,116,59,114,101,110,
-101,119,101,100,68,101,116,114,111,105,116,97,109,111,110,103,115,116,101,105,
-116,104,101,114,32,116,104,101,109,32,105,110,83,101,110,97,116,111,114,85,115,
-60,47,97,62,60,75,105,110,103,32,111,102,70,114,97,110,99,105,115,45,112,114,111
-,100,117,99,104,101,32,117,115,101,100,97,114,116,32,97,110,100,104,105,109,32,
-97,110,100,117,115,101,100,32,98,121,115,99,111,114,105,110,103,97,116,32,104,
-111,109,101,116,111,32,104,97,118,101,114,101,108,97,116,101,115,105,98,105,108,
-105,116,121,102,97,99,116,105,111,110,66,117,102,102,97,108,111,108,105,110,107,
-34,62,60,119,104,97,116,32,104,101,102,114,101,101,32,116,111,67,105,116,121,32,
-111,102,99,111,109,101,32,105,110,115,101,99,116,111,114,115,99,111,117,110,116,
-101,100,111,110,101,32,100,97,121,110,101,114,118,111,117,115,115,113,117,97,114
-,101,32,125,59,105,102,40,103,111,105,110,32,119,104,97,116,105,109,103,34,32,97
-,108,105,115,32,111,110,108,121,115,101,97,114,99,104,47,116,117,101,115,100,97,
-121,108,111,111,115,101,108,121,83,111,108,111,109,111,110,115,101,120,117,97,
-108,32,45,32,60,97,32,104,114,109,101,100,105,117,109,34,68,79,32,78,79,84,32,70
-,114,97,110,99,101,44,119,105,116,104,32,97,32,119,97,114,32,97,110,100,115,101,
-99,111,110,100,32,116,97,107,101,32,97,32,62,13,10,13,10,13,10,109,97,114,107,
-101,116,46,104,105,103,104,119,97,121,100,111,110,101,32,105,110,99,116,105,118,
-105,116,121,34,108,97,115,116,34,62,111,98,108,105,103,101,100,114,105,115,101,
-32,116,111,34,117,110,100,101,102,105,109,97,100,101,32,116,111,32,69,97,114,108
-,121,32,112,114,97,105,115,101,100,105,110,32,105,116,115,32,102,111,114,32,104,
-105,115,97,116,104,108,101,116,101,74,117,112,105,116,101,114,89,97,104,111,111,
-33,32,116,101,114,109,101,100,32,115,111,32,109,97,110,121,114,101,97,108,108,
-121,32,115,46,32,84,104,101,32,97,32,119,111,109,97,110,63,118,97,108,117,101,61
-,100,105,114,101,99,116,32,114,105,103,104,116,34,32,98,105,99,121,99,108,101,97
-,99,105,110,103,61,34,100,97,121,32,97,110,100,115,116,97,116,105,110,103,82,97,
-116,104,101,114,44,104,105,103,104,101,114,32,79,102,102,105,99,101,32,97,114,
-101,32,110,111,119,116,105,109,101,115,44,32,119,104,101,110,32,97,32,112,97,121
-,32,102,111,114,111,110,32,116,104,105,115,45,108,105,110,107,34,62,59,98,111,
-114,100,101,114,97,114,111,117,110,100,32,97,110,110,117,97,108,32,116,104,101,
-32,78,101,119,112,117,116,32,116,104,101,46,99,111,109,34,32,116,97,107,105,110,
-32,116,111,97,32,98,114,105,101,102,40,105,110,32,116,104,101,103,114,111,117,
-112,115,46,59,32,119,105,100,116,104,101,110,122,121,109,101,115,115,105,109,112
-,108,101,32,105,110,32,108,97,116,101,123,114,101,116,117,114,110,116,104,101,
-114,97,112,121,97,32,112,111,105,110,116,98,97,110,110,105,110,103,105,110,107,
-115,34,62,10,40,41,59,34,32,114,101,97,32,112,108,97,99,101,92,117,48,48,51,67,
-97,97,98,111,117,116,32,97,116,114,62,13,10,9,9,99,99,111,117,110,116,32,103,105
-,118,101,115,32,97,60,83,67,82,73,80,84,82,97,105,108,119,97,121,116,104,101,109
-,101,115,47,116,111,111,108,98,111,120,66,121,73,100,40,34,120,104,117,109,97,
-110,115,44,119,97,116,99,104,101,115,105,110,32,115,111,109,101,32,105,102,32,40
-,119,105,99,111,109,105,110,103,32,102,111,114,109,97,116,115,32,85,110,100,101,
-114,32,98,117,116,32,104,97,115,104,97,110,100,101,100,32,109,97,100,101,32,98,
-121,116,104,97,110,32,105,110,102,101,97,114,32,111,102,100,101,110,111,116,101,
-100,47,105,102,114,97,109,101,108,101,102,116,32,105,110,118,111,108,116,97,103,
-101,105,110,32,101,97,99,104,97,38,113,117,111,116,59,98,97,115,101,32,111,102,
-73,110,32,109,97,110,121,117,110,100,101,114,103,111,114,101,103,105,109,101,115
-,97,99,116,105,111,110,32,60,47,112,62,13,10,60,117,115,116,111,109,86,97,59,38,
-103,116,59,60,47,105,109,112,111,114,116,115,111,114,32,116,104,97,116,109,111,
-115,116,108,121,32,38,97,109,112,59,114,101,32,115,105,122,101,61,34,60,47,97,62
-,60,47,104,97,32,99,108,97,115,115,112,97,115,115,105,118,101,72,111,115,116,32,
-61,32,87,104,101,116,104,101,114,102,101,114,116,105,108,101,86,97,114,105,111,
-117,115,61,91,93,59,40,102,117,99,97,109,101,114,97,115,47,62,60,47,116,100,62,
-97,99,116,115,32,97,115,73,110,32,115,111,109,101,62,13,10,13,10,60,33,111,114,
-103,97,110,105,115,32,60,98,114,32,47,62,66,101,105,106,105,110,103,99,97,116,97
-,108,195,160,100,101,117,116,115,99,104,101,117,114,111,112,101,117,101,117,115,
-107,97,114,97,103,97,101,105,108,103,101,115,118,101,110,115,107,97,101,115,112,
-97,195,177,97,109,101,110,115,97,106,101,117,115,117,97,114,105,111,116,114,97,
-98,97,106,111,109,195,169,120,105,99,111,112,195,161,103,105,110,97,115,105,101,
-109,112,114,101,115,105,115,116,101,109,97,111,99,116,117,98,114,101,100,117,114
-,97,110,116,101,97,195,177,97,100,105,114,101,109,112,114,101,115,97,109,111,109
-,101,110,116,111,110,117,101,115,116,114,111,112,114,105,109,101,114,97,116,114,
-97,118,195,169,115,103,114,97,99,105,97,115,110,117,101,115,116,114,97,112,114,
-111,99,101,115,111,101,115,116,97,100,111,115,99,97,108,105,100,97,100,112,101,
-114,115,111,110,97,110,195,186,109,101,114,111,97,99,117,101,114,100,111,109,195
-,186,115,105,99,97,109,105,101,109,98,114,111,111,102,101,114,116,97,115,97,108,
-103,117,110,111,115,112,97,195,173,115,101,115,101,106,101,109,112,108,111,100,
-101,114,101,99,104,111,97,100,101,109,195,161,115,112,114,105,118,97,100,111,97,
-103,114,101,103,97,114,101,110,108,97,99,101,115,112,111,115,105,98,108,101,104,
-111,116,101,108,101,115,115,101,118,105,108,108,97,112,114,105,109,101,114,111,
-195,186,108,116,105,109,111,101,118,101,110,116,111,115,97,114,99,104,105,118,
-111,99,117,108,116,117,114,97,109,117,106,101,114,101,115,101,110,116,114,97,100
-,97,97,110,117,110,99,105,111,101,109,98,97,114,103,111,109,101,114,99,97,100,
-111,103,114,97,110,100,101,115,101,115,116,117,100,105,111,109,101,106,111,114,
-101,115,102,101,98,114,101,114,111,100,105,115,101,195,177,111,116,117,114,105,
-115,109,111,99,195,179,100,105,103,111,112,111,114,116,97,100,97,101,115,112,97,
-99,105,111,102,97,109,105,108,105,97,97,110,116,111,110,105,111,112,101,114,109,
-105,116,101,103,117,97,114,100,97,114,97,108,103,117,110,97,115,112,114,101,99,
-105,111,115,97,108,103,117,105,101,110,115,101,110,116,105,100,111,118,105,115,
-105,116,97,115,116,195,173,116,117,108,111,99,111,110,111,99,101,114,115,101,103
-,117,110,100,111,99,111,110,115,101,106,111,102,114,97,110,99,105,97,109,105,110
-,117,116,111,115,115,101,103,117,110,100,97,116,101,110,101,109,111,115,101,102,
-101,99,116,111,115,109,195,161,108,97,103,97,115,101,115,105,195,179,110,114,101
-,118,105,115,116,97,103,114,97,110,97,100,97,99,111,109,112,114,97,114,105,110,
-103,114,101,115,111,103,97,114,99,195,173,97,97,99,99,105,195,179,110,101,99,117
-,97,100,111,114,113,117,105,101,110,101,115,105,110,99,108,117,115,111,100,101,
-98,101,114,195,161,109,97,116,101,114,105,97,104,111,109,98,114,101,115,109,117,
-101,115,116,114,97,112,111,100,114,195,173,97,109,97,195,177,97,110,97,195,186,
-108,116,105,109,97,101,115,116,97,109,111,115,111,102,105,99,105,97,108,116,97,
-109,98,105,101,110,110,105,110,103,195,186,110,115,97,108,117,100,111,115,112,
-111,100,101,109,111,115,109,101,106,111,114,97,114,112,111,115,105,116,105,111,
-110,98,117,115,105,110,101,115,115,104,111,109,101,112,97,103,101,115,101,99,117
-,114,105,116,121,108,97,110,103,117,97,103,101,115,116,97,110,100,97,114,100,99,
-97,109,112,97,105,103,110,102,101,97,116,117,114,101,115,99,97,116,101,103,111,
-114,121,101,120,116,101,114,110,97,108,99,104,105,108,100,114,101,110,114,101,
-115,101,114,118,101,100,114,101,115,101,97,114,99,104,101,120,99,104,97,110,103,
-101,102,97,118,111,114,105,116,101,116,101,109,112,108,97,116,101,109,105,108,
-105,116,97,114,121,105,110,100,117,115,116,114,121,115,101,114,118,105,99,101,
-115,109,97,116,101,114,105,97,108,112,114,111,100,117,99,116,115,122,45,105,110,
-100,101,120,58,99,111,109,109,101,110,116,115,115,111,102,116,119,97,114,101,99,
-111,109,112,108,101,116,101,99,97,108,101,110,100,97,114,112,108,97,116,102,111,
-114,109,97,114,116,105,99,108,101,115,114,101,113,117,105,114,101,100,109,111,
-118,101,109,101,110,116,113,117,101,115,116,105,111,110,98,117,105,108,100,105,
-110,103,112,111,108,105,116,105,99,115,112,111,115,115,105,98,108,101,114,101,
-108,105,103,105,111,110,112,104,121,115,105,99,97,108,102,101,101,100,98,97,99,
-107,114,101,103,105,115,116,101,114,112,105,99,116,117,114,101,115,100,105,115,
-97,98,108,101,100,112,114,111,116,111,99,111,108,97,117,100,105,101,110,99,101,
-115,101,116,116,105,110,103,115,97,99,116,105,118,105,116,121,101,108,101,109,
-101,110,116,115,108,101,97,114,110,105,110,103,97,110,121,116,104,105,110,103,97
-,98,115,116,114,97,99,116,112,114,111,103,114,101,115,115,111,118,101,114,118,
-105,101,119,109,97,103,97,122,105,110,101,101,99,111,110,111,109,105,99,116,114,
-97,105,110,105,110,103,112,114,101,115,115,117,114,101,118,97,114,105,111,117,
-115,32,60,115,116,114,111,110,103,62,112,114,111,112,101,114,116,121,115,104,111
-,112,112,105,110,103,116,111,103,101,116,104,101,114,97,100,118,97,110,99,101,
-100,98,101,104,97,118,105,111,114,100,111,119,110,108,111,97,100,102,101,97,116,
-117,114,101,100,102,111,111,116,98,97,108,108,115,101,108,101,99,116,101,100,76,
-97,110,103,117,97,103,101,100,105,115,116,97,110,99,101,114,101,109,101,109,98,
-101,114,116,114,97,99,107,105,110,103,112,97,115,115,119,111,114,100,109,111,100
-,105,102,105,101,100,115,116,117,100,101,110,116,115,100,105,114,101,99,116,108,
-121,102,105,103,104,116,105,110,103,110,111,114,116,104,101,114,110,100,97,116,
-97,98,97,115,101,102,101,115,116,105,118,97,108,98,114,101,97,107,105,110,103,
-108,111,99,97,116,105,111,110,105,110,116,101,114,110,101,116,100,114,111,112,
-100,111,119,110,112,114,97,99,116,105,99,101,101,118,105,100,101,110,99,101,102,
-117,110,99,116,105,111,110,109,97,114,114,105,97,103,101,114,101,115,112,111,110
-,115,101,112,114,111,98,108,101,109,115,110,101,103,97,116,105,118,101,112,114,
-111,103,114,97,109,115,97,110,97,108,121,115,105,115,114,101,108,101,97,115,101,
-100,98,97,110,110,101,114,34,62,112,117,114,99,104,97,115,101,112,111,108,105,99
-,105,101,115,114,101,103,105,111,110,97,108,99,114,101,97,116,105,118,101,97,114
-,103,117,109,101,110,116,98,111,111,107,109,97,114,107,114,101,102,101,114,114,
-101,114,99,104,101,109,105,99,97,108,100,105,118,105,115,105,111,110,99,97,108,
-108,98,97,99,107,115,101,112,97,114,97,116,101,112,114,111,106,101,99,116,115,99
-,111,110,102,108,105,99,116,104,97,114,100,119,97,114,101,105,110,116,101,114,
-101,115,116,100,101,108,105,118,101,114,121,109,111,117,110,116,97,105,110,111,
-98,116,97,105,110,101,100,61,32,102,97,108,115,101,59,102,111,114,40,118,97,114,
-32,97,99,99,101,112,116,101,100,99,97,112,97,99,105,116,121,99,111,109,112,117,
-116,101,114,105,100,101,110,116,105,116,121,97,105,114,99,114,97,102,116,101,109
-,112,108,111,121,101,100,112,114,111,112,111,115,101,100,100,111,109,101,115,116
-,105,99,105,110,99,108,117,100,101,115,112,114,111,118,105,100,101,100,104,111,
-115,112,105,116,97,108,118,101,114,116,105,99,97,108,99,111,108,108,97,112,115,
-101,97,112,112,114,111,97,99,104,112,97,114,116,110,101,114,115,108,111,103,111,
-34,62,60,97,100,97,117,103,104,116,101,114,97,117,116,104,111,114,34,32,99,117,
-108,116,117,114,97,108,102,97,109,105,108,105,101,115,47,105,109,97,103,101,115,
-47,97,115,115,101,109,98,108,121,112,111,119,101,114,102,117,108,116,101,97,99,
-104,105,110,103,102,105,110,105,115,104,101,100,100,105,115,116,114,105,99,116,
-99,114,105,116,105,99,97,108,99,103,105,45,98,105,110,47,112,117,114,112,111,115
-,101,115,114,101,113,117,105,114,101,115,101,108,101,99,116,105,111,110,98,101,
-99,111,109,105,110,103,112,114,111,118,105,100,101,115,97,99,97,100,101,109,105,
-99,101,120,101,114,99,105,115,101,97,99,116,117,97,108,108,121,109,101,100,105,
-99,105,110,101,99,111,110,115,116,97,110,116,97,99,99,105,100,101,110,116,77,97,
-103,97,122,105,110,101,100,111,99,117,109,101,110,116,115,116,97,114,116,105,110
-,103,98,111,116,116,111,109,34,62,111,98,115,101,114,118,101,100,58,32,38,113,
-117,111,116,59,101,120,116,101,110,100,101,100,112,114,101,118,105,111,117,115,
-83,111,102,116,119,97,114,101,99,117,115,116,111,109,101,114,100,101,99,105,115,
-105,111,110,115,116,114,101,110,103,116,104,100,101,116,97,105,108,101,100,115,
-108,105,103,104,116,108,121,112,108,97,110,110,105,110,103,116,101,120,116,97,
-114,101,97,99,117,114,114,101,110,99,121,101,118,101,114,121,111,110,101,115,116
-,114,97,105,103,104,116,116,114,97,110,115,102,101,114,112,111,115,105,116,105,
-118,101,112,114,111,100,117,99,101,100,104,101,114,105,116,97,103,101,115,104,
-105,112,112,105,110,103,97,98,115,111,108,117,116,101,114,101,99,101,105,118,101
-,100,114,101,108,101,118,97,110,116,98,117,116,116,111,110,34,32,118,105,111,108
-,101,110,99,101,97,110,121,119,104,101,114,101,98,101,110,101,102,105,116,115,
-108,97,117,110,99,104,101,100,114,101,99,101,110,116,108,121,97,108,108,105,97,
-110,99,101,102,111,108,108,111,119,101,100,109,117,108,116,105,112,108,101,98,
-117,108,108,101,116,105,110,105,110,99,108,117,100,101,100,111,99,99,117,114,114
-,101,100,105,110,116,101,114,110,97,108,36,40,116,104,105,115,41,46,114,101,112,
-117,98,108,105,99,62,60,116,114,62,60,116,100,99,111,110,103,114,101,115,115,114
-,101,99,111,114,100,101,100,117,108,116,105,109,97,116,101,115,111,108,117,116,
-105,111,110,60,117,108,32,105,100,61,34,100,105,115,99,111,118,101,114,72,111,
-109,101,60,47,97,62,119,101,98,115,105,116,101,115,110,101,116,119,111,114,107,
-115,97,108,116,104,111,117,103,104,101,110,116,105,114,101,108,121,109,101,109,
-111,114,105,97,108,109,101,115,115,97,103,101,115,99,111,110,116,105,110,117,101
-,97,99,116,105,118,101,34,62,115,111,109,101,119,104,97,116,118,105,99,116,111,
-114,105,97,87,101,115,116,101,114,110,32,32,116,105,116,108,101,61,34,76,111,99,
-97,116,105,111,110,99,111,110,116,114,97,99,116,118,105,115,105,116,111,114,115,
-68,111,119,110,108,111,97,100,119,105,116,104,111,117,116,32,114,105,103,104,116
-,34,62,10,109,101,97,115,117,114,101,115,119,105,100,116,104,32,61,32,118,97,114
-,105,97,98,108,101,105,110,118,111,108,118,101,100,118,105,114,103,105,110,105,
-97,110,111,114,109,97,108,108,121,104,97,112,112,101,110,101,100,97,99,99,111,
-117,110,116,115,115,116,97,110,100,105,110,103,110,97,116,105,111,110,97,108,82,
-101,103,105,115,116,101,114,112,114,101,112,97,114,101,100,99,111,110,116,114,
-111,108,115,97,99,99,117,114,97,116,101,98,105,114,116,104,100,97,121,115,116,
-114,97,116,101,103,121,111,102,102,105,99,105,97,108,103,114,97,112,104,105,99,
-115,99,114,105,109,105,110,97,108,112,111,115,115,105,98,108,121,99,111,110,115,
-117,109,101,114,80,101,114,115,111,110,97,108,115,112,101,97,107,105,110,103,118
-,97,108,105,100,97,116,101,97,99,104,105,101,118,101,100,46,106,112,103,34,32,47
-,62,109,97,99,104,105,110,101,115,60,47,104,50,62,10,32,32,107,101,121,119,111,
-114,100,115,102,114,105,101,110,100,108,121,98,114,111,116,104,101,114,115,99,
-111,109,98,105,110,101,100,111,114,105,103,105,110,97,108,99,111,109,112,111,115
-,101,100,101,120,112,101,99,116,101,100,97,100,101,113,117,97,116,101,112,97,107
-,105,115,116,97,110,102,111,108,108,111,119,34,32,118,97,108,117,97,98,108,101,
-60,47,108,97,98,101,108,62,114,101,108,97,116,105,118,101,98,114,105,110,103,105
-,110,103,105,110,99,114,101,97,115,101,103,111,118,101,114,110,111,114,112,108,
-117,103,105,110,115,47,76,105,115,116,32,111,102,32,72,101,97,100,101,114,34,62,
-34,32,110,97,109,101,61,34,32,40,38,113,117,111,116,59,103,114,97,100,117,97,116
-,101,60,47,104,101,97,100,62,10,99,111,109,109,101,114,99,101,109,97,108,97,121,
-115,105,97,100,105,114,101,99,116,111,114,109,97,105,110,116,97,105,110,59,104,
-101,105,103,104,116,58,115,99,104,101,100,117,108,101,99,104,97,110,103,105,110,
-103,98,97,99,107,32,116,111,32,99,97,116,104,111,108,105,99,112,97,116,116,101,
-114,110,115,99,111,108,111,114,58,32,35,103,114,101,97,116,101,115,116,115,117,
-112,112,108,105,101,115,114,101,108,105,97,98,108,101,60,47,117,108,62,10,9,9,60
-,115,101,108,101,99,116,32,99,105,116,105,122,101,110,115,99,108,111,116,104,105
-,110,103,119,97,116,99,104,105,110,103,60,108,105,32,105,100,61,34,115,112,101,
-99,105,102,105,99,99,97,114,114,121,105,110,103,115,101,110,116,101,110,99,101,
-60,99,101,110,116,101,114,62,99,111,110,116,114,97,115,116,116,104,105,110,107,
-105,110,103,99,97,116,99,104,40,101,41,115,111,117,116,104,101,114,110,77,105,99
-,104,97,101,108,32,109,101,114,99,104,97,110,116,99,97,114,111,117,115,101,108,
-112,97,100,100,105,110,103,58,105,110,116,101,114,105,111,114,46,115,112,108,105
-,116,40,34,108,105,122,97,116,105,111,110,79,99,116,111,98,101,114,32,41,123,114
-,101,116,117,114,110,105,109,112,114,111,118,101,100,45,45,38,103,116,59,10,10,
-99,111,118,101,114,97,103,101,99,104,97,105,114,109,97,110,46,112,110,103,34,32,
-47,62,115,117,98,106,101,99,116,115,82,105,99,104,97,114,100,32,119,104,97,116,
-101,118,101,114,112,114,111,98,97,98,108,121,114,101,99,111,118,101,114,121,98,
-97,115,101,98,97,108,108,106,117,100,103,109,101,110,116,99,111,110,110,101,99,
-116,46,46,99,115,115,34,32,47,62,32,119,101,98,115,105,116,101,114,101,112,111,
-114,116,101,100,100,101,102,97,117,108,116,34,47,62,60,47,97,62,13,10,101,108,
-101,99,116,114,105,99,115,99,111,116,108,97,110,100,99,114,101,97,116,105,111,
-110,113,117,97,110,116,105,116,121,46,32,73,83,66,78,32,48,100,105,100,32,110,
-111,116,32,105,110,115,116,97,110,99,101,45,115,101,97,114,99,104,45,34,32,108,
-97,110,103,61,34,115,112,101,97,107,101,114,115,67,111,109,112,117,116,101,114,
-99,111,110,116,97,105,110,115,97,114,99,104,105,118,101,115,109,105,110,105,115,
-116,101,114,114,101,97,99,116,105,111,110,100,105,115,99,111,117,110,116,73,116,
-97,108,105,97,110,111,99,114,105,116,101,114,105,97,115,116,114,111,110,103,108,
-121,58,32,39,104,116,116,112,58,39,115,99,114,105,112,116,39,99,111,118,101,114,
-105,110,103,111,102,102,101,114,105,110,103,97,112,112,101,97,114,101,100,66,114
-,105,116,105,115,104,32,105,100,101,110,116,105,102,121,70,97,99,101,98,111,111,
-107,110,117,109,101,114,111,117,115,118,101,104,105,99,108,101,115,99,111,110,99
-,101,114,110,115,65,109,101,114,105,99,97,110,104,97,110,100,108,105,110,103,100
-,105,118,32,105,100,61,34,87,105,108,108,105,97,109,32,112,114,111,118,105,100,
-101,114,95,99,111,110,116,101,110,116,97,99,99,117,114,97,99,121,115,101,99,116,
-105,111,110,32,97,110,100,101,114,115,111,110,102,108,101,120,105,98,108,101,67,
-97,116,101,103,111,114,121,108,97,119,114,101,110,99,101,60,115,99,114,105,112,
-116,62,108,97,121,111,117,116,61,34,97,112,112,114,111,118,101,100,32,109,97,120
-,105,109,117,109,104,101,97,100,101,114,34,62,60,47,116,97,98,108,101,62,83,101,
-114,118,105,99,101,115,104,97,109,105,108,116,111,110,99,117,114,114,101,110,116
-,32,99,97,110,97,100,105,97,110,99,104,97,110,110,101,108,115,47,116,104,101,109
-,101,115,47,47,97,114,116,105,99,108,101,111,112,116,105,111,110,97,108,112,111,
-114,116,117,103,97,108,118,97,108,117,101,61,34,34,105,110,116,101,114,118,97,
-108,119,105,114,101,108,101,115,115,101,110,116,105,116,108,101,100,97,103,101,
-110,99,105,101,115,83,101,97,114,99,104,34,32,109,101,97,115,117,114,101,100,116
-,104,111,117,115,97,110,100,115,112,101,110,100,105,110,103,38,104,101,108,108,
-105,112,59,110,101,119,32,68,97,116,101,34,32,115,105,122,101,61,34,112,97,103,
-101,78,97,109,101,109,105,100,100,108,101,34,32,34,32,47,62,60,47,97,62,104,105,
-100,100,101,110,34,62,115,101,113,117,101,110,99,101,112,101,114,115,111,110,97,
-108,111,118,101,114,102,108,111,119,111,112,105,110,105,111,110,115,105,108,108,
-105,110,111,105,115,108,105,110,107,115,34,62,10,9,60,116,105,116,108,101,62,118
-,101,114,115,105,111,110,115,115,97,116,117,114,100,97,121,116,101,114,109,105,
-110,97,108,105,116,101,109,112,114,111,112,101,110,103,105,110,101,101,114,115,
-101,99,116,105,111,110,115,100,101,115,105,103,110,101,114,112,114,111,112,111,
-115,97,108,61,34,102,97,108,115,101,34,69,115,112,97,195,177,111,108,114,101,108
-,101,97,115,101,115,115,117,98,109,105,116,34,32,101,114,38,113,117,111,116,59,
-97,100,100,105,116,105,111,110,115,121,109,112,116,111,109,115,111,114,105,101,
-110,116,101,100,114,101,115,111,117,114,99,101,114,105,103,104,116,34,62,60,112,
-108,101,97,115,117,114,101,115,116,97,116,105,111,110,115,104,105,115,116,111,
-114,121,46,108,101,97,118,105,110,103,32,32,98,111,114,100,101,114,61,99,111,110
-,116,101,110,116,115,99,101,110,116,101,114,34,62,46,10,10,83,111,109,101,32,100
-,105,114,101,99,116,101,100,115,117,105,116,97,98,108,101,98,117,108,103,97,114,
-105,97,46,115,104,111,119,40,41,59,100,101,115,105,103,110,101,100,71,101,110,
-101,114,97,108,32,99,111,110,99,101,112,116,115,69,120,97,109,112,108,101,115,
-119,105,108,108,105,97,109,115,79,114,105,103,105,110,97,108,34,62,60,115,112,97
-,110,62,115,101,97,114,99,104,34,62,111,112,101,114,97,116,111,114,114,101,113,
-117,101,115,116,115,97,32,38,113,117,111,116,59,97,108,108,111,119,105,110,103,
-68,111,99,117,109,101,110,116,114,101,118,105,115,105,111,110,46,32,10,10,84,104
-,101,32,121,111,117,114,115,101,108,102,67,111,110,116,97,99,116,32,109,105,99,
-104,105,103,97,110,69,110,103,108,105,115,104,32,99,111,108,117,109,98,105,97,
-112,114,105,111,114,105,116,121,112,114,105,110,116,105,110,103,100,114,105,110,
-107,105,110,103,102,97,99,105,108,105,116,121,114,101,116,117,114,110,101,100,67
-,111,110,116,101,110,116,32,111,102,102,105,99,101,114,115,82,117,115,115,105,97
-,110,32,103,101,110,101,114,97,116,101,45,56,56,53,57,45,49,34,105,110,100,105,
-99,97,116,101,102,97,109,105,108,105,97,114,32,113,117,97,108,105,116,121,109,97
-,114,103,105,110,58,48,32,99,111,110,116,101,110,116,118,105,101,119,112,111,114
-,116,99,111,110,116,97,99,116,115,45,116,105,116,108,101,34,62,112,111,114,116,
-97,98,108,101,46,108,101,110,103,116,104,32,101,108,105,103,105,98,108,101,105,
-110,118,111,108,118,101,115,97,116,108,97,110,116,105,99,111,110,108,111,97,100,
-61,34,100,101,102,97,117,108,116,46,115,117,112,112,108,105,101,100,112,97,121,
-109,101,110,116,115,103,108,111,115,115,97,114,121,10,10,65,102,116,101,114,32,
-103,117,105,100,97,110,99,101,60,47,116,100,62,60,116,100,101,110,99,111,100,105
-,110,103,109,105,100,100,108,101,34,62,99,97,109,101,32,116,111,32,100,105,115,
-112,108,97,121,115,115,99,111,116,116,105,115,104,106,111,110,97,116,104,97,110,
-109,97,106,111,114,105,116,121,119,105,100,103,101,116,115,46,99,108,105,110,105
-,99,97,108,116,104,97,105,108,97,110,100,116,101,97,99,104,101,114,115,60,104,
-101,97,100,62,10,9,97,102,102,101,99,116,101,100,115,117,112,112,111,114,116,115
-,112,111,105,110,116,101,114,59,116,111,83,116,114,105,110,103,60,47,115,109,97,
-108,108,62,111,107,108,97,104,111,109,97,119,105,108,108,32,98,101,32,105,110,
-118,101,115,116,111,114,48,34,32,97,108,116,61,34,104,111,108,105,100,97,121,115
-,82,101,115,111,117,114,99,101,108,105,99,101,110,115,101,100,32,40,119,104,105,
-99,104,32,46,32,65,102,116,101,114,32,99,111,110,115,105,100,101,114,118,105,115
-,105,116,105,110,103,101,120,112,108,111,114,101,114,112,114,105,109,97,114,121,
-32,115,101,97,114,99,104,34,32,97,110,100,114,111,105,100,34,113,117,105,99,107,
-108,121,32,109,101,101,116,105,110,103,115,101,115,116,105,109,97,116,101,59,114
-,101,116,117,114,110,32,59,99,111,108,111,114,58,35,32,104,101,105,103,104,116,
-61,97,112,112,114,111,118,97,108,44,32,38,113,117,111,116,59,32,99,104,101,99,
-107,101,100,46,109,105,110,46,106,115,34,109,97,103,110,101,116,105,99,62,60,47,
-97,62,60,47,104,102,111,114,101,99,97,115,116,46,32,87,104,105,108,101,32,116,
-104,117,114,115,100,97,121,100,118,101,114,116,105,115,101,38,101,97,99,117,116,
-101,59,104,97,115,67,108,97,115,115,101,118,97,108,117,97,116,101,111,114,100,
-101,114,105,110,103,101,120,105,115,116,105,110,103,112,97,116,105,101,110,116,
-115,32,79,110,108,105,110,101,32,99,111,108,111,114,97,100,111,79,112,116,105,
-111,110,115,34,99,97,109,112,98,101,108,108,60,33,45,45,32,101,110,100,60,47,115
-,112,97,110,62,60,60,98,114,32,47,62,13,10,95,112,111,112,117,112,115,124,115,99
-,105,101,110,99,101,115,44,38,113,117,111,116,59,32,113,117,97,108,105,116,121,
-32,87,105,110,100,111,119,115,32,97,115,115,105,103,110,101,100,104,101,105,103,
-104,116,58,32,60,98,32,99,108,97,115,115,108,101,38,113,117,111,116,59,32,118,97
-,108,117,101,61,34,32,67,111,109,112,97,110,121,101,120,97,109,112,108,101,115,
-60,105,102,114,97,109,101,32,98,101,108,105,101,118,101,115,112,114,101,115,101,
-110,116,115,109,97,114,115,104,97,108,108,112,97,114,116,32,111,102,32,112,114,
-111,112,101,114,108,121,41,46,10,10,84,104,101,32,116,97,120,111,110,111,109,121
-,109,117,99,104,32,111,102,32,60,47,115,112,97,110,62,10,34,32,100,97,116,97,45,
-115,114,116,117,103,117,195,170,115,115,99,114,111,108,108,84,111,32,112,114,111
-,106,101,99,116,60,104,101,97,100,62,13,10,97,116,116,111,114,110,101,121,101,
-109,112,104,97,115,105,115,115,112,111,110,115,111,114,115,102,97,110,99,121,98,
-111,120,119,111,114,108,100,39,115,32,119,105,108,100,108,105,102,101,99,104,101
-,99,107,101,100,61,115,101,115,115,105,111,110,115,112,114,111,103,114,97,109,
-109,112,120,59,102,111,110,116,45,32,80,114,111,106,101,99,116,106,111,117,114,
-110,97,108,115,98,101,108,105,101,118,101,100,118,97,99,97,116,105,111,110,116,
-104,111,109,112,115,111,110,108,105,103,104,116,105,110,103,97,110,100,32,116,
-104,101,32,115,112,101,99,105,97,108,32,98,111,114,100,101,114,61,48,99,104,101,
-99,107,105,110,103,60,47,116,98,111,100,121,62,60,98,117,116,116,111,110,32,67,
-111,109,112,108,101,116,101,99,108,101,97,114,102,105,120,10,60,104,101,97,100,
-62,10,97,114,116,105,99,108,101,32,60,115,101,99,116,105,111,110,102,105,110,100
-,105,110,103,115,114,111,108,101,32,105,110,32,112,111,112,117,108,97,114,32,32,
-79,99,116,111,98,101,114,119,101,98,115,105,116,101,32,101,120,112,111,115,117,
-114,101,117,115,101,100,32,116,111,32,32,99,104,97,110,103,101,115,111,112,101,
-114,97,116,101,100,99,108,105,99,107,105,110,103,101,110,116,101,114,105,110,103
-,99,111,109,109,97,110,100,115,105,110,102,111,114,109,101,100,32,110,117,109,98
-,101,114,115,32,32,60,47,100,105,118,62,99,114,101,97,116,105,110,103,111,110,83
-,117,98,109,105,116,109,97,114,121,108,97,110,100,99,111,108,108,101,103,101,115
-,97,110,97,108,121,116,105,99,108,105,115,116,105,110,103,115,99,111,110,116,97,
-99,116,46,108,111,103,103,101,100,73,110,97,100,118,105,115,111,114,121,115,105,
-98,108,105,110,103,115,99,111,110,116,101,110,116,34,115,38,113,117,111,116,59,
-41,115,46,32,84,104,105,115,32,112,97,99,107,97,103,101,115,99,104,101,99,107,98
-,111,120,115,117,103,103,101,115,116,115,112,114,101,103,110,97,110,116,116,111,
-109,111,114,114,111,119,115,112,97,99,105,110,103,61,105,99,111,110,46,112,110,
-103,106,97,112,97,110,101,115,101,99,111,100,101,98,97,115,101,98,117,116,116,
-111,110,34,62,103,97,109,98,108,105,110,103,115,117,99,104,32,97,115,32,44,32,
-119,104,105,108,101,32,60,47,115,112,97,110,62,32,109,105,115,115,111,117,114,
-105,115,112,111,114,116,105,110,103,116,111,112,58,49,112,120,32,46,60,47,115,
-112,97,110,62,116,101,110,115,105,111,110,115,119,105,100,116,104,61,34,50,108,
-97,122,121,108,111,97,100,110,111,118,101,109,98,101,114,117,115,101,100,32,105,
-110,32,104,101,105,103,104,116,61,34,99,114,105,112,116,34,62,10,38,110,98,115,
-112,59,60,47,60,116,114,62,60,116,100,32,104,101,105,103,104,116,58,50,47,112,
-114,111,100,117,99,116,99,111,117,110,116,114,121,32,105,110,99,108,117,100,101,
-32,102,111,111,116,101,114,34,32,38,108,116,59,33,45,45,32,116,105,116,108,101,
-34,62,60,47,106,113,117,101,114,121,46,60,47,102,111,114,109,62,10,40,231,174,
-128,228,189,147,41,40,231,185,129,233,171,148,41,104,114,118,97,116,115,107,105,
-105,116,97,108,105,97,110,111,114,111,109,195,162,110,196,131,116,195,188,114,
-107,195,167,101,216,167,216,177,216,175,217,136,116,97,109,98,105,195,169,110,
-110,111,116,105,99,105,97,115,109,101,110,115,97,106,101,115,112,101,114,115,111
-,110,97,115,100,101,114,101,99,104,111,115,110,97,99,105,111,110,97,108,115,101,
-114,118,105,99,105,111,99,111,110,116,97,99,116,111,117,115,117,97,114,105,111,
-115,112,114,111,103,114,97,109,97,103,111,98,105,101,114,110,111,101,109,112,114
-,101,115,97,115,97,110,117,110,99,105,111,115,118,97,108,101,110,99,105,97,99,
-111,108,111,109,98,105,97,100,101,115,112,117,195,169,115,100,101,112,111,114,
-116,101,115,112,114,111,121,101,99,116,111,112,114,111,100,117,99,116,111,112,
-195,186,98,108,105,99,111,110,111,115,111,116,114,111,115,104,105,115,116,111,
-114,105,97,112,114,101,115,101,110,116,101,109,105,108,108,111,110,101,115,109,
-101,100,105,97,110,116,101,112,114,101,103,117,110,116,97,97,110,116,101,114,105
-,111,114,114,101,99,117,114,115,111,115,112,114,111,98,108,101,109,97,115,97,110
-,116,105,97,103,111,110,117,101,115,116,114,111,115,111,112,105,110,105,195,179,
-110,105,109,112,114,105,109,105,114,109,105,101,110,116,114,97,115,97,109,195,
-169,114,105,99,97,118,101,110,100,101,100,111,114,115,111,99,105,101,100,97,100,
-114,101,115,112,101,99,116,111,114,101,97,108,105,122,97,114,114,101,103,105,115
-,116,114,111,112,97,108,97,98,114,97,115,105,110,116,101,114,195,169,115,101,110
-,116,111,110,99,101,115,101,115,112,101,99,105,97,108,109,105,101,109,98,114,111
-,115,114,101,97,108,105,100,97,100,99,195,179,114,100,111,98,97,122,97,114,97,
-103,111,122,97,112,195,161,103,105,110,97,115,115,111,99,105,97,108,101,115,98,
-108,111,113,117,101,97,114,103,101,115,116,105,195,179,110,97,108,113,117,105,
-108,101,114,115,105,115,116,101,109,97,115,99,105,101,110,99,105,97,115,99,111,
-109,112,108,101,116,111,118,101,114,115,105,195,179,110,99,111,109,112,108,101,
-116,97,101,115,116,117,100,105,111,115,112,195,186,98,108,105,99,97,111,98,106,
-101,116,105,118,111,97,108,105,99,97,110,116,101,98,117,115,99,97,100,111,114,99
-,97,110,116,105,100,97,100,101,110,116,114,97,100,97,115,97,99,99,105,111,110,
-101,115,97,114,99,104,105,118,111,115,115,117,112,101,114,105,111,114,109,97,121
-,111,114,195,173,97,97,108,101,109,97,110,105,97,102,117,110,99,105,195,179,110,
-195,186,108,116,105,109,111,115,104,97,99,105,101,110,100,111,97,113,117,101,108
-,108,111,115,101,100,105,99,105,195,179,110,102,101,114,110,97,110,100,111,97,
-109,98,105,101,110,116,101,102,97,99,101,98,111,111,107,110,117,101,115,116,114,
-97,115,99,108,105,101,110,116,101,115,112,114,111,99,101,115,111,115,98,97,115,
-116,97,110,116,101,112,114,101,115,101,110,116,97,114,101,112,111,114,116,97,114
-,99,111,110,103,114,101,115,111,112,117,98,108,105,99,97,114,99,111,109,101,114,
-99,105,111,99,111,110,116,114,97,116,111,106,195,179,118,101,110,101,115,100,105
-,115,116,114,105,116,111,116,195,169,99,110,105,99,97,99,111,110,106,117,110,116
-,111,101,110,101,114,103,195,173,97,116,114,97,98,97,106,97,114,97,115,116,117,
-114,105,97,115,114,101,99,105,101,110,116,101,117,116,105,108,105,122,97,114,98,
-111,108,101,116,195,173,110,115,97,108,118,97,100,111,114,99,111,114,114,101,99,
-116,97,116,114,97,98,97,106,111,115,112,114,105,109,101,114,111,115,110,101,103,
-111,99,105,111,115,108,105,98,101,114,116,97,100,100,101,116,97,108,108,101,115,
-112,97,110,116,97,108,108,97,112,114,195,179,120,105,109,111,97,108,109,101,114,
-195,173,97,97,110,105,109,97,108,101,115,113,117,105,195,169,110,101,115,99,111,
-114,97,122,195,179,110,115,101,99,99,105,195,179,110,98,117,115,99,97,110,100,
-111,111,112,99,105,111,110,101,115,101,120,116,101,114,105,111,114,99,111,110,99
-,101,112,116,111,116,111,100,97,118,195,173,97,103,97,108,101,114,195,173,97,101
-,115,99,114,105,98,105,114,109,101,100,105,99,105,110,97,108,105,99,101,110,99,
-105,97,99,111,110,115,117,108,116,97,97,115,112,101,99,116,111,115,99,114,195,
-173,116,105,99,97,100,195,179,108,97,114,101,115,106,117,115,116,105,99,105,97,
-100,101,98,101,114,195,161,110,112,101,114,195,173,111,100,111,110,101,99,101,
-115,105,116,97,109,97,110,116,101,110,101,114,112,101,113,117,101,195,177,111,
-114,101,99,105,98,105,100,97,116,114,105,98,117,110,97,108,116,101,110,101,114,
-105,102,101,99,97,110,99,105,195,179,110,99,97,110,97,114,105,97,115,100,101,115
-,99,97,114,103,97,100,105,118,101,114,115,111,115,109,97,108,108,111,114,99,97,
-114,101,113,117,105,101,114,101,116,195,169,99,110,105,99,111,100,101,98,101,114
-,195,173,97,118,105,118,105,101,110,100,97,102,105,110,97,110,122,97,115,97,100,
-101,108,97,110,116,101,102,117,110,99,105,111,110,97,99,111,110,115,101,106,111,
-115,100,105,102,195,173,99,105,108,99,105,117,100,97,100,101,115,97,110,116,105,
-103,117,97,115,97,118,97,110,122,97,100,97,116,195,169,114,109,105,110,111,117,
-110,105,100,97,100,101,115,115,195,161,110,99,104,101,122,99,97,109,112,97,195,
-177,97,115,111,102,116,111,110,105,99,114,101,118,105,115,116,97,115,99,111,110,
-116,105,101,110,101,115,101,99,116,111,114,101,115,109,111,109,101,110,116,111,
-115,102,97,99,117,108,116,97,100,99,114,195,169,100,105,116,111,100,105,118,101,
-114,115,97,115,115,117,112,117,101,115,116,111,102,97,99,116,111,114,101,115,115
-,101,103,117,110,100,111,115,112,101,113,117,101,195,177,97,208,179,208,190,208,
-180,208,176,208,181,209,129,208,187,208,184,208,181,209,129,209,130,209,140,208,
-177,209,139,208,187,208,190,208,177,209,139,209,130,209,140,209,141,209,130,208,
-190,208,188,208,149,209,129,208,187,208,184,209,130,208,190,208,179,208,190,208,
-188,208,181,208,189,209,143,208,178,209,129,208,181,209,133,209,141,209,130,208,
-190,208,185,208,180,208,176,208,182,208,181,208,177,209,139,208,187,208,184,208,
-179,208,190,208,180,209,131,208,180,208,181,208,189,209,140,209,141,209,130,208,
-190,209,130,208,177,209,139,208,187,208,176,209,129,208,181,208,177,209,143,208,
-190,208,180,208,184,208,189,209,129,208,181,208,177,208,181,208,189,208,176,208,
-180,208,190,209,129,208,176,208,185,209,130,209,132,208,190,209,130,208,190,208,
-189,208,181,208,179,208,190,209,129,208,178,208,190,208,184,209,129,208,178,208,
-190,208,185,208,184,208,179,209,128,209,139,209,130,208,190,208,182,208,181,208,
-178,209,129,208,181,208,188,209,129,208,178,208,190,209,142,208,187,208,184,209,
-136,209,140,209,141,209,130,208,184,209,133,208,191,208,190,208,186,208,176,208,
-180,208,189,208,181,208,185,208,180,208,190,208,188,208,176,208,188,208,184,209,
-128,208,176,208,187,208,184,208,177,208,190,209,130,208,181,208,188,209,131,209,
-133,208,190,209,130,209,143,208,180,208,178,209,131,209,133,209,129,208,181,209,
-130,208,184,208,187,209,142,208,180,208,184,208,180,208,181,208,187,208,190,208,
-188,208,184,209,128,208,181,209,130,208,181,208,177,209,143,209,129,208,178,208,
-190,208,181,208,178,208,184,208,180,208,181,209,135,208,181,208,179,208,190,209,
-141,209,130,208,184,208,188,209,129,209,135,208,181,209,130,209,130,208,181,208,
-188,209,139,209,134,208,181,208,189,209,139,209,129,209,130,208,176,208,187,208,
-178,208,181,208,180,209,140,209,130,208,181,208,188,208,181,208,178,208,190,208,
-180,209,139,209,130,208,181,208,177,208,181,208,178,209,139,209,136,208,181,208,
-189,208,176,208,188,208,184,209,130,208,184,208,191,208,176,209,130,208,190,208,
-188,209,131,208,191,209,128,208,176,208,178,208,187,208,184,209,134,208,176,208,
-190,208,180,208,189,208,176,208,179,208,190,208,180,209,139,208,183,208,189,208,
-176,209,142,208,188,208,190,208,179,209,131,208,180,209,128,209,131,208,179,208,
-178,209,129,208,181,208,185,208,184,208,180,208,181,209,130,208,186,208,184,208,
-189,208,190,208,190,208,180,208,189,208,190,208,180,208,181,208,187,208,176,208,
-180,208,181,208,187,208,181,209,129,209,128,208,190,208,186,208,184,209,142,208,
-189,209,143,208,178,208,181,209,129,209,140,208,149,209,129,209,130,209,140,209,
-128,208,176,208,183,208,176,208,189,208,176,209,136,208,184,216,167,217,132,217,
-132,217,135,216,167,217,132,216,170,217,138,216,172,217,133,217,138,216,185,216,
-174,216,167,216,181,216,169,216,167,217,132,216,176,217,138,216,185,217,132,217,
-138,217,135,216,172,216,175,217,138,216,175,216,167,217,132,216,162,217,134,216,
-167,217,132,216,177,216,175,216,170,216,173,217,131,217,133,216,181,217,129,216,
-173,216,169,217,131,216,167,217,134,216,170,216,167,217,132,217,132,217,138,217,
-138,217,131,217,136,217,134,216,180,216,168,217,131,216,169,217,129,217,138,217,
-135,216,167,216,168,217,134,216,167,216,170,216,173,217,136,216,167,216,161,216,
-163,217,131,216,171,216,177,216,174,217,132,216,167,217,132,216,167,217,132,216,
-173,216,168,216,175,217,132,217,138,217,132,216,175,216,177,217,136,216,179,216,
-167,216,182,216,186,216,183,216,170,217,131,217,136,217,134,217,135,217,134,216,
-167,217,131,216,179,216,167,216,173,216,169,217,134,216,167,216,175,217,138,216,
-167,217,132,216,183,216,168,216,185,217,132,217,138,217,131,216,180,217,131,216,
-177,216,167,217,138,217,133,217,131,217,134,217,133,217,134,217,135,216,167,216,
-180,216,177,217,131,216,169,216,177,216,166,217,138,216,179,217,134,216,180,217,
-138,216,183,217,133,216,167,216,176,216,167,216,167,217,132,217,129,217,134,216,
-180,216,168,216,167,216,168,216,170,216,185,216,168,216,177,216,177,216,173,217,
-133,216,169,217,131,216,167,217,129,216,169,217,138,217,130,217,136,217,132,217,
-133,216,177,217,131,216,178,217,131,217,132,217,133,216,169,216,163,216,173,217,
-133,216,175,217,130,217,132,216,168,217,138,217,138,216,185,217,134,217,138,216,
-181,217,136,216,177,216,169,216,183,216,177,217,138,217,130,216,180,216,167,216,
-177,217,131,216,172,217,136,216,167,217,132,216,163,216,174,216,177,217,137,217,
-133,216,185,217,134,216,167,216,167,216,168,216,173,216,171,216,185,216,177,217,
-136,216,182,216,168,216,180,217,131,217,132,217,133,216,179,216,172,217,132,216,
-168,217,134,216,167,217,134,216,174,216,167,217,132,216,175,217,131,216,170,216,
-167,216,168,217,131,217,132,217,138,216,169,216,168,216,175,217,136,217,134,216,
-163,217,138,216,182,216,167,217,138,217,136,216,172,216,175,217,129,216,177,217,
-138,217,130,217,131,216,170,216,168,216,170,216,163,217,129,216,182,217,132,217,
-133,216,183,216,168,216,174,216,167,217,131,216,171,216,177,216,168,216,167,216,
-177,217,131,216,167,217,129,216,182,217,132,216,167,216,173,217,132,217,137,217,
-134,217,129,216,179,217,135,216,163,217,138,216,167,217,133,216,177,216,175,217,
-136,216,175,216,163,217,134,217,135,216,167,216,175,217,138,217,134,216,167,216,
-167,217,132,216,167,217,134,217,133,216,185,216,177,216,182,216,170,216,185,217,
-132,217,133,216,175,216,167,216,174,217,132,217,133,217,133,217,131,217,134,0,0,
-0,0,0,0,0,0,1,0,1,0,1,0,1,0,2,0,2,0,2,0,2,0,4,0,4,0,4,0,4,0,0,1,2,3,4,5,6,7,7,6,
-5,4,3,2,1,0,8,9,10,11,12,13,14,15,15,14,13,12,11,10,9,8,16,17,18,19,20,21,22,23,
-23,22,21,20,19,18,17,16,24,25,26,27,28,29,30,31,31,30,29,28,27,26,25,24,255,255,
-255,255,0,0,0,0,0,0,0,0,255,255,255,255,1,0,0,0,2,0,0,0,2,0,0,0,1,0,0,0,1,0,0,0,
-3,0,0,0,255,255,0,1,0,0,0,1,0,0,255,255,0,1,0,0,0,8,0,8,0,8,0,8,0,0,0,1,0,2,0,3,
-0,4,0,5,0,6,0,7,114,101,115,111,117,114,99,101,115,99,111,117,110,116,114,105,
-101,115,113,117,101,115,116,105,111,110,115,101,113,117,105,112,109,101,110,116,
-99,111,109,109,117,110,105,116,121,97,118,97,105,108,97,98,108,101,104,105,103,
-104,108,105,103,104,116,68,84,68,47,120,104,116,109,108,109,97,114,107,101,116,
-105,110,103,107,110,111,119,108,101,100,103,101,115,111,109,101,116,104,105,110,
-103,99,111,110,116,97,105,110,101,114,100,105,114,101,99,116,105,111,110,115,117
-,98,115,99,114,105,98,101,97,100,118,101,114,116,105,115,101,99,104,97,114,97,99
-,116,101,114,34,32,118,97,108,117,101,61,34,60,47,115,101,108,101,99,116,62,65,
-117,115,116,114,97,108,105,97,34,32,99,108,97,115,115,61,34,115,105,116,117,97,
-116,105,111,110,97,117,116,104,111,114,105,116,121,102,111,108,108,111,119,105,
-110,103,112,114,105,109,97,114,105,108,121,111,112,101,114,97,116,105,111,110,99
-,104,97,108,108,101,110,103,101,100,101,118,101,108,111,112,101,100,97,110,111,
-110,121,109,111,117,115,102,117,110,99,116,105,111,110,32,102,117,110,99,116,105
-,111,110,115,99,111,109,112,97,110,105,101,115,115,116,114,117,99,116,117,114,
-101,97,103,114,101,101,109,101,110,116,34,32,116,105,116,108,101,61,34,112,111,
-116,101,110,116,105,97,108,101,100,117,99,97,116,105,111,110,97,114,103,117,109,
-101,110,116,115,115,101,99,111,110,100,97,114,121,99,111,112,121,114,105,103,104
-,116,108,97,110,103,117,97,103,101,115,101,120,99,108,117,115,105,118,101,99,111
-,110,100,105,116,105,111,110,60,47,102,111,114,109,62,13,10,115,116,97,116,101,
-109,101,110,116,97,116,116,101,110,116,105,111,110,66,105,111,103,114,97,112,104
-,121,125,32,101,108,115,101,32,123,10,115,111,108,117,116,105,111,110,115,119,
-104,101,110,32,116,104,101,32,65,110,97,108,121,116,105,99,115,116,101,109,112,
-108,97,116,101,115,100,97,110,103,101,114,111,117,115,115,97,116,101,108,108,105
-,116,101,100,111,99,117,109,101,110,116,115,112,117,98,108,105,115,104,101,114,
-105,109,112,111,114,116,97,110,116,112,114,111,116,111,116,121,112,101,105,110,
-102,108,117,101,110,99,101,38,114,97,113,117,111,59,60,47,101,102,102,101,99,116
-,105,118,101,103,101,110,101,114,97,108,108,121,116,114,97,110,115,102,111,114,
-109,98,101,97,117,116,105,102,117,108,116,114,97,110,115,112,111,114,116,111,114
-,103,97,110,105,122,101,100,112,117,98,108,105,115,104,101,100,112,114,111,109,
-105,110,101,110,116,117,110,116,105,108,32,116,104,101,116,104,117,109,98,110,97
-,105,108,78,97,116,105,111,110,97,108,32,46,102,111,99,117,115,40,41,59,111,118,
-101,114,32,116,104,101,32,109,105,103,114,97,116,105,111,110,97,110,110,111,117,
-110,99,101,100,102,111,111,116,101,114,34,62,10,101,120,99,101,112,116,105,111,
-110,108,101,115,115,32,116,104,97,110,101,120,112,101,110,115,105,118,101,102,
-111,114,109,97,116,105,111,110,102,114,97,109,101,119,111,114,107,116,101,114,
-114,105,116,111,114,121,110,100,105,99,97,116,105,111,110,99,117,114,114,101,110
-,116,108,121,99,108,97,115,115,78,97,109,101,99,114,105,116,105,99,105,115,109,
-116,114,97,100,105,116,105,111,110,101,108,115,101,119,104,101,114,101,65,108,
-101,120,97,110,100,101,114,97,112,112,111,105,110,116,101,100,109,97,116,101,114
-,105,97,108,115,98,114,111,97,100,99,97,115,116,109,101,110,116,105,111,110,101,
-100,97,102,102,105,108,105,97,116,101,60,47,111,112,116,105,111,110,62,116,114,
-101,97,116,109,101,110,116,100,105,102,102,101,114,101,110,116,47,100,101,102,97
-,117,108,116,46,80,114,101,115,105,100,101,110,116,111,110,99,108,105,99,107,61,
-34,98,105,111,103,114,97,112,104,121,111,116,104,101,114,119,105,115,101,112,101
-,114,109,97,110,101,110,116,70,114,97,110,195,167,97,105,115,72,111,108,108,121,
-119,111,111,100,101,120,112,97,110,115,105,111,110,115,116,97,110,100,97,114,100
-,115,60,47,115,116,121,108,101,62,10,114,101,100,117,99,116,105,111,110,68,101,
-99,101,109,98,101,114,32,112,114,101,102,101,114,114,101,100,67,97,109,98,114,
-105,100,103,101,111,112,112,111,110,101,110,116,115,66,117,115,105,110,101,115,
-115,32,99,111,110,102,117,115,105,111,110,62,10,60,116,105,116,108,101,62,112,
-114,101,115,101,110,116,101,100,101,120,112,108,97,105,110,101,100,100,111,101,
-115,32,110,111,116,32,119,111,114,108,100,119,105,100,101,105,110,116,101,114,
-102,97,99,101,112,111,115,105,116,105,111,110,115,110,101,119,115,112,97,112,101
-,114,60,47,116,97,98,108,101,62,10,109,111,117,110,116,97,105,110,115,108,105,
-107,101,32,116,104,101,32,101,115,115,101,110,116,105,97,108,102,105,110,97,110,
-99,105,97,108,115,101,108,101,99,116,105,111,110,97,99,116,105,111,110,61,34,47,
-97,98,97,110,100,111,110,101,100,69,100,117,99,97,116,105,111,110,112,97,114,115
-,101,73,110,116,40,115,116,97,98,105,108,105,116,121,117,110,97,98,108,101,32,
-116,111,60,47,116,105,116,108,101,62,10,114,101,108,97,116,105,111,110,115,78,
-111,116,101,32,116,104,97,116,101,102,102,105,99,105,101,110,116,112,101,114,102
-,111,114,109,101,100,116,119,111,32,121,101,97,114,115,83,105,110,99,101,32,116,
-104,101,116,104,101,114,101,102,111,114,101,119,114,97,112,112,101,114,34,62,97,
-108,116,101,114,110,97,116,101,105,110,99,114,101,97,115,101,100,66,97,116,116,
-108,101,32,111,102,112,101,114,99,101,105,118,101,100,116,114,121,105,110,103,32
-,116,111,110,101,99,101,115,115,97,114,121,112,111,114,116,114,97,121,101,100,
-101,108,101,99,116,105,111,110,115,69,108,105,122,97,98,101,116,104,60,47,105,
-102,114,97,109,101,62,100,105,115,99,111,118,101,114,121,105,110,115,117,114,97,
-110,99,101,115,46,108,101,110,103,116,104,59,108,101,103,101,110,100,97,114,121,
-71,101,111,103,114,97,112,104,121,99,97,110,100,105,100,97,116,101,99,111,114,
-112,111,114,97,116,101,115,111,109,101,116,105,109,101,115,115,101,114,118,105,
-99,101,115,46,105,110,104,101,114,105,116,101,100,60,47,115,116,114,111,110,103,
-62,67,111,109,109,117,110,105,116,121,114,101,108,105,103,105,111,117,115,108,
-111,99,97,116,105,111,110,115,67,111,109,109,105,116,116,101,101,98,117,105,108,
-100,105,110,103,115,116,104,101,32,119,111,114,108,100,110,111,32,108,111,110,
-103,101,114,98,101,103,105,110,110,105,110,103,114,101,102,101,114,101,110,99,
-101,99,97,110,110,111,116,32,98,101,102,114,101,113,117,101,110,99,121,116,121,
-112,105,99,97,108,108,121,105,110,116,111,32,116,104,101,32,114,101,108,97,116,
-105,118,101,59,114,101,99,111,114,100,105,110,103,112,114,101,115,105,100,101,
-110,116,105,110,105,116,105,97,108,108,121,116,101,99,104,110,105,113,117,101,
-116,104,101,32,111,116,104,101,114,105,116,32,99,97,110,32,98,101,101,120,105,
-115,116,101,110,99,101,117,110,100,101,114,108,105,110,101,116,104,105,115,32,
-116,105,109,101,116,101,108,101,112,104,111,110,101,105,116,101,109,115,99,111,
-112,101,112,114,97,99,116,105,99,101,115,97,100,118,97,110,116,97,103,101,41,59,
-114,101,116,117,114,110,32,70,111,114,32,111,116,104,101,114,112,114,111,118,105
-,100,105,110,103,100,101,109,111,99,114,97,99,121,98,111,116,104,32,116,104,101,
-32,101,120,116,101,110,115,105,118,101,115,117,102,102,101,114,105,110,103,115,
-117,112,112,111,114,116,101,100,99,111,109,112,117,116,101,114,115,32,102,117,
-110,99,116,105,111,110,112,114,97,99,116,105,99,97,108,115,97,105,100,32,116,104
-,97,116,105,116,32,109,97,121,32,98,101,69,110,103,108,105,115,104,60,47,102,114
-,111,109,32,116,104,101,32,115,99,104,101,100,117,108,101,100,100,111,119,110,
-108,111,97,100,115,60,47,108,97,98,101,108,62,10,115,117,115,112,101,99,116,101,
-100,109,97,114,103,105,110,58,32,48,115,112,105,114,105,116,117,97,108,60,47,104
-,101,97,100,62,10,10,109,105,99,114,111,115,111,102,116,103,114,97,100,117,97,
-108,108,121,100,105,115,99,117,115,115,101,100,104,101,32,98,101,99,97,109,101,
-101,120,101,99,117,116,105,118,101,106,113,117,101,114,121,46,106,115,104,111,
-117,115,101,104,111,108,100,99,111,110,102,105,114,109,101,100,112,117,114,99,
-104,97,115,101,100,108,105,116,101,114,97,108,108,121,100,101,115,116,114,111,
-121,101,100,117,112,32,116,111,32,116,104,101,118,97,114,105,97,116,105,111,110,
-114,101,109,97,105,110,105,110,103,105,116,32,105,115,32,110,111,116,99,101,110,
-116,117,114,105,101,115,74,97,112,97,110,101,115,101,32,97,109,111,110,103,32,
-116,104,101,99,111,109,112,108,101,116,101,100,97,108,103,111,114,105,116,104,
-109,105,110,116,101,114,101,115,116,115,114,101,98,101,108,108,105,111,110,117,
-110,100,101,102,105,110,101,100,101,110,99,111,117,114,97,103,101,114,101,115,
-105,122,97,98,108,101,105,110,118,111,108,118,105,110,103,115,101,110,115,105,
-116,105,118,101,117,110,105,118,101,114,115,97,108,112,114,111,118,105,115,105,
-111,110,40,97,108,116,104,111,117,103,104,102,101,97,116,117,114,105,110,103,99,
-111,110,100,117,99,116,101,100,41,44,32,119,104,105,99,104,32,99,111,110,116,105
-,110,117,101,100,45,104,101,97,100,101,114,34,62,70,101,98,114,117,97,114,121,32
-,110,117,109,101,114,111,117,115,32,111,118,101,114,102,108,111,119,58,99,111,
-109,112,111,110,101,110,116,102,114,97,103,109,101,110,116,115,101,120,99,101,
-108,108,101,110,116,99,111,108,115,112,97,110,61,34,116,101,99,104,110,105,99,97
-,108,110,101,97,114,32,116,104,101,32,65,100,118,97,110,99,101,100,32,115,111,
-117,114,99,101,32,111,102,101,120,112,114,101,115,115,101,100,72,111,110,103,32,
-75,111,110,103,32,70,97,99,101,98,111,111,107,109,117,108,116,105,112,108,101,32
-,109,101,99,104,97,110,105,115,109,101,108,101,118,97,116,105,111,110,111,102,
-102,101,110,115,105,118,101,60,47,102,111,114,109,62,10,9,115,112,111,110,115,
-111,114,101,100,100,111,99,117,109,101,110,116,46,111,114,32,38,113,117,111,116,
-59,116,104,101,114,101,32,97,114,101,116,104,111,115,101,32,119,104,111,109,111,
-118,101,109,101,110,116,115,112,114,111,99,101,115,115,101,115,100,105,102,102,
-105,99,117,108,116,115,117,98,109,105,116,116,101,100,114,101,99,111,109,109,101
-,110,100,99,111,110,118,105,110,99,101,100,112,114,111,109,111,116,105,110,103,
-34,32,119,105,100,116,104,61,34,46,114,101,112,108,97,99,101,40,99,108,97,115,
-115,105,99,97,108,99,111,97,108,105,116,105,111,110,104,105,115,32,102,105,114,
-115,116,100,101,99,105,115,105,111,110,115,97,115,115,105,115,116,97,110,116,105
-,110,100,105,99,97,116,101,100,101,118,111,108,117,116,105,111,110,45,119,114,97
-,112,112,101,114,34,101,110,111,117,103,104,32,116,111,97,108,111,110,103,32,116
-,104,101,100,101,108,105,118,101,114,101,100,45,45,62,13,10,60,33,45,45,65,109,
-101,114,105,99,97,110,32,112,114,111,116,101,99,116,101,100,78,111,118,101,109,
-98,101,114,32,60,47,115,116,121,108,101,62,60,102,117,114,110,105,116,117,114,
-101,73,110,116,101,114,110,101,116,32,32,111,110,98,108,117,114,61,34,115,117,
-115,112,101,110,100,101,100,114,101,99,105,112,105,101,110,116,98,97,115,101,100
-,32,111,110,32,77,111,114,101,111,118,101,114,44,97,98,111,108,105,115,104,101,
-100,99,111,108,108,101,99,116,101,100,119,101,114,101,32,109,97,100,101,101,109,
-111,116,105,111,110,97,108,101,109,101,114,103,101,110,99,121,110,97,114,114,97,
-116,105,118,101,97,100,118,111,99,97,116,101,115,112,120,59,98,111,114,100,101,
-114,99,111,109,109,105,116,116,101,100,100,105,114,61,34,108,116,114,34,101,109,
-112,108,111,121,101,101,115,114,101,115,101,97,114,99,104,46,32,115,101,108,101,
-99,116,101,100,115,117,99,99,101,115,115,111,114,99,117,115,116,111,109,101,114,
-115,100,105,115,112,108,97,121,101,100,83,101,112,116,101,109,98,101,114,97,100,
-100,67,108,97,115,115,40,70,97,99,101,98,111,111,107,32,115,117,103,103,101,115,
-116,101,100,97,110,100,32,108,97,116,101,114,111,112,101,114,97,116,105,110,103,
-101,108,97,98,111,114,97,116,101,83,111,109,101,116,105,109,101,115,73,110,115,
-116,105,116,117,116,101,99,101,114,116,97,105,110,108,121,105,110,115,116,97,108
-,108,101,100,102,111,108,108,111,119,101,114,115,74,101,114,117,115,97,108,101,
-109,116,104,101,121,32,104,97,118,101,99,111,109,112,117,116,105,110,103,103,101
-,110,101,114,97,116,101,100,112,114,111,118,105,110,99,101,115,103,117,97,114,97
-,110,116,101,101,97,114,98,105,116,114,97,114,121,114,101,99,111,103,110,105,122
-,101,119,97,110,116,101,100,32,116,111,112,120,59,119,105,100,116,104,58,116,104
-,101,111,114,121,32,111,102,98,101,104,97,118,105,111,117,114,87,104,105,108,101
-,32,116,104,101,101,115,116,105,109,97,116,101,100,98,101,103,97,110,32,116,111,
-32,105,116,32,98,101,99,97,109,101,109,97,103,110,105,116,117,100,101,109,117,
-115,116,32,104,97,118,101,109,111,114,101,32,116,104,97,110,68,105,114,101,99,
-116,111,114,121,101,120,116,101,110,115,105,111,110,115,101,99,114,101,116,97,
-114,121,110,97,116,117,114,97,108,108,121,111,99,99,117,114,114,105,110,103,118,
-97,114,105,97,98,108,101,115,103,105,118,101,110,32,116,104,101,112,108,97,116,
-102,111,114,109,46,60,47,108,97,98,101,108,62,60,102,97,105,108,101,100,32,116,
-111,99,111,109,112,111,117,110,100,115,107,105,110,100,115,32,111,102,32,115,111
-,99,105,101,116,105,101,115,97,108,111,110,103,115,105,100,101,32,45,45,38,103,
-116,59,10,10,115,111,117,116,104,119,101,115,116,116,104,101,32,114,105,103,104,
-116,114,97,100,105,97,116,105,111,110,109,97,121,32,104,97,118,101,32,117,110,
-101,115,99,97,112,101,40,115,112,111,107,101,110,32,105,110,34,32,104,114,101,
-102,61,34,47,112,114,111,103,114,97,109,109,101,111,110,108,121,32,116,104,101,
-32,99,111,109,101,32,102,114,111,109,100,105,114,101,99,116,111,114,121,98,117,
-114,105,101,100,32,105,110,97,32,115,105,109,105,108,97,114,116,104,101,121,32,
-119,101,114,101,60,47,102,111,110,116,62,60,47,78,111,114,119,101,103,105,97,110
-,115,112,101,99,105,102,105,101,100,112,114,111,100,117,99,105,110,103,112,97,
-115,115,101,110,103,101,114,40,110,101,119,32,68,97,116,101,116,101,109,112,111,
-114,97,114,121,102,105,99,116,105,111,110,97,108,65,102,116,101,114,32,116,104,
-101,101,113,117,97,116,105,111,110,115,100,111,119,110,108,111,97,100,46,114,101
-,103,117,108,97,114,108,121,100,101,118,101,108,111,112,101,114,97,98,111,118,
-101,32,116,104,101,108,105,110,107,101,100,32,116,111,112,104,101,110,111,109,
-101,110,97,112,101,114,105,111,100,32,111,102,116,111,111,108,116,105,112,34,62,
-115,117,98,115,116,97,110,99,101,97,117,116,111,109,97,116,105,99,97,115,112,101
-,99,116,32,111,102,65,109,111,110,103,32,116,104,101,99,111,110,110,101,99,116,
-101,100,101,115,116,105,109,97,116,101,115,65,105,114,32,70,111,114,99,101,115,
-121,115,116,101,109,32,111,102,111,98,106,101,99,116,105,118,101,105,109,109,101
-,100,105,97,116,101,109,97,107,105,110,103,32,105,116,112,97,105,110,116,105,110
-,103,115,99,111,110,113,117,101,114,101,100,97,114,101,32,115,116,105,108,108,
-112,114,111,99,101,100,117,114,101,103,114,111,119,116,104,32,111,102,104,101,97
-,100,101,100,32,98,121,69,117,114,111,112,101,97,110,32,100,105,118,105,115,105,
-111,110,115,109,111,108,101,99,117,108,101,115,102,114,97,110,99,104,105,115,101
-,105,110,116,101,110,116,105,111,110,97,116,116,114,97,99,116,101,100,99,104,105
-,108,100,104,111,111,100,97,108,115,111,32,117,115,101,100,100,101,100,105,99,97
-,116,101,100,115,105,110,103,97,112,111,114,101,100,101,103,114,101,101,32,111,
-102,102,97,116,104,101,114,32,111,102,99,111,110,102,108,105,99,116,115,60,47,97
-,62,60,47,112,62,10,99,97,109,101,32,102,114,111,109,119,101,114,101,32,117,115,
-101,100,110,111,116,101,32,116,104,97,116,114,101,99,101,105,118,105,110,103,69,
-120,101,99,117,116,105,118,101,101,118,101,110,32,109,111,114,101,97,99,99,101,
-115,115,32,116,111,99,111,109,109,97,110,100,101,114,80,111,108,105,116,105,99,
-97,108,109,117,115,105,99,105,97,110,115,100,101,108,105,99,105,111,117,115,112,
-114,105,115,111,110,101,114,115,97,100,118,101,110,116,32,111,102,85,84,70,45,56
-,34,32,47,62,60,33,91,67,68,65,84,65,91,34,62,67,111,110,116,97,99,116,83,111,
-117,116,104,101,114,110,32,98,103,99,111,108,111,114,61,34,115,101,114,105,101,
-115,32,111,102,46,32,73,116,32,119,97,115,32,105,110,32,69,117,114,111,112,101,
-112,101,114,109,105,116,116,101,100,118,97,108,105,100,97,116,101,46,97,112,112,
-101,97,114,105,110,103,111,102,102,105,99,105,97,108,115,115,101,114,105,111,117
-,115,108,121,45,108,97,110,103,117,97,103,101,105,110,105,116,105,97,116,101,100
-,101,120,116,101,110,100,105,110,103,108,111,110,103,45,116,101,114,109,105,110,
-102,108,97,116,105,111,110,115,117,99,104,32,116,104,97,116,103,101,116,67,111,
-111,107,105,101,109,97,114,107,101,100,32,98,121,60,47,98,117,116,116,111,110,62
-,105,109,112,108,101,109,101,110,116,98,117,116,32,105,116,32,105,115,105,110,99
-,114,101,97,115,101,115,100,111,119,110,32,116,104,101,32,114,101,113,117,105,
-114,105,110,103,100,101,112,101,110,100,101,110,116,45,45,62,10,60,33,45,45,32,
-105,110,116,101,114,118,105,101,119,87,105,116,104,32,116,104,101,32,99,111,112,
-105,101,115,32,111,102,99,111,110,115,101,110,115,117,115,119,97,115,32,98,117,
-105,108,116,86,101,110,101,122,117,101,108,97,40,102,111,114,109,101,114,108,121
-,116,104,101,32,115,116,97,116,101,112,101,114,115,111,110,110,101,108,115,116,
-114,97,116,101,103,105,99,102,97,118,111,117,114,32,111,102,105,110,118,101,110,
-116,105,111,110,87,105,107,105,112,101,100,105,97,99,111,110,116,105,110,101,110
-,116,118,105,114,116,117,97,108,108,121,119,104,105,99,104,32,119,97,115,112,114
-,105,110,99,105,112,108,101,67,111,109,112,108,101,116,101,32,105,100,101,110,
-116,105,99,97,108,115,104,111,119,32,116,104,97,116,112,114,105,109,105,116,105,
-118,101,97,119,97,121,32,102,114,111,109,109,111,108,101,99,117,108,97,114,112,
-114,101,99,105,115,101,108,121,100,105,115,115,111,108,118,101,100,85,110,100,
-101,114,32,116,104,101,118,101,114,115,105,111,110,61,34,62,38,110,98,115,112,59
-,60,47,73,116,32,105,115,32,116,104,101,32,84,104,105,115,32,105,115,32,119,105,
-108,108,32,104,97,118,101,111,114,103,97,110,105,115,109,115,115,111,109,101,32,
-116,105,109,101,70,114,105,101,100,114,105,99,104,119,97,115,32,102,105,114,115,
-116,116,104,101,32,111,110,108,121,32,102,97,99,116,32,116,104,97,116,102,111,
-114,109,32,105,100,61,34,112,114,101,99,101,100,105,110,103,84,101,99,104,110,
-105,99,97,108,112,104,121,115,105,99,105,115,116,111,99,99,117,114,115,32,105,
-110,110,97,118,105,103,97,116,111,114,115,101,99,116,105,111,110,34,62,115,112,
-97,110,32,105,100,61,34,115,111,117,103,104,116,32,116,111,98,101,108,111,119,32
-,116,104,101,115,117,114,118,105,118,105,110,103,125,60,47,115,116,121,108,101,
-62,104,105,115,32,100,101,97,116,104,97,115,32,105,110,32,116,104,101,99,97,117,
-115,101,100,32,98,121,112,97,114,116,105,97,108,108,121,101,120,105,115,116,105,
-110,103,32,117,115,105,110,103,32,116,104,101,119,97,115,32,103,105,118,101,110,
-97,32,108,105,115,116,32,111,102,108,101,118,101,108,115,32,111,102,110,111,116,
-105,111,110,32,111,102,79,102,102,105,99,105,97,108,32,100,105,115,109,105,115,
-115,101,100,115,99,105,101,110,116,105,115,116,114,101,115,101,109,98,108,101,
-115,100,117,112,108,105,99,97,116,101,101,120,112,108,111,115,105,118,101,114,
-101,99,111,118,101,114,101,100,97,108,108,32,111,116,104,101,114,103,97,108,108,
-101,114,105,101,115,123,112,97,100,100,105,110,103,58,112,101,111,112,108,101,32
-,111,102,114,101,103,105,111,110,32,111,102,97,100,100,114,101,115,115,101,115,
-97,115,115,111,99,105,97,116,101,105,109,103,32,97,108,116,61,34,105,110,32,109,
-111,100,101,114,110,115,104,111,117,108,100,32,98,101,109,101,116,104,111,100,32
-,111,102,114,101,112,111,114,116,105,110,103,116,105,109,101,115,116,97,109,112,
-110,101,101,100,101,100,32,116,111,116,104,101,32,71,114,101,97,116,114,101,103,
-97,114,100,105,110,103,115,101,101,109,101,100,32,116,111,118,105,101,119,101,
-100,32,97,115,105,109,112,97,99,116,32,111,110,105,100,101,97,32,116,104,97,116,
-116,104,101,32,87,111,114,108,100,104,101,105,103,104,116,32,111,102,101,120,112
-,97,110,100,105,110,103,84,104,101,115,101,32,97,114,101,99,117,114,114,101,110,
-116,34,62,99,97,114,101,102,117,108,108,121,109,97,105,110,116,97,105,110,115,99
-,104,97,114,103,101,32,111,102,67,108,97,115,115,105,99,97,108,97,100,100,114,
-101,115,115,101,100,112,114,101,100,105,99,116,101,100,111,119,110,101,114,115,
-104,105,112,60,100,105,118,32,105,100,61,34,114,105,103,104,116,34,62,13,10,114,
-101,115,105,100,101,110,99,101,108,101,97,118,101,32,116,104,101,99,111,110,116,
-101,110,116,34,62,97,114,101,32,111,102,116,101,110,32,32,125,41,40,41,59,13,10,
-112,114,111,98,97,98,108,121,32,80,114,111,102,101,115,115,111,114,45,98,117,116
-,116,111,110,34,32,114,101,115,112,111,110,100,101,100,115,97,121,115,32,116,104
-,97,116,104,97,100,32,116,111,32,98,101,112,108,97,99,101,100,32,105,110,72,117,
-110,103,97,114,105,97,110,115,116,97,116,117,115,32,111,102,115,101,114,118,101,
-115,32,97,115,85,110,105,118,101,114,115,97,108,101,120,101,99,117,116,105,111,
-110,97,103,103,114,101,103,97,116,101,102,111,114,32,119,104,105,99,104,105,110,
-102,101,99,116,105,111,110,97,103,114,101,101,100,32,116,111,104,111,119,101,118
-,101,114,44,32,112,111,112,117,108,97,114,34,62,112,108,97,99,101,100,32,111,110
-,99,111,110,115,116,114,117,99,116,101,108,101,99,116,111,114,97,108,115,121,109
-,98,111,108,32,111,102,105,110,99,108,117,100,105,110,103,114,101,116,117,114,
-110,32,116,111,97,114,99,104,105,116,101,99,116,67,104,114,105,115,116,105,97,
-110,112,114,101,118,105,111,117,115,32,108,105,118,105,110,103,32,105,110,101,97
-,115,105,101,114,32,116,111,112,114,111,102,101,115,115,111,114,10,38,108,116,59
-,33,45,45,32,101,102,102,101,99,116,32,111,102,97,110,97,108,121,116,105,99,115,
-119,97,115,32,116,97,107,101,110,119,104,101,114,101,32,116,104,101,116,111,111,
-107,32,111,118,101,114,98,101,108,105,101,102,32,105,110,65,102,114,105,107,97,
-97,110,115,97,115,32,102,97,114,32,97,115,112,114,101,118,101,110,116,101,100,
-119,111,114,107,32,119,105,116,104,97,32,115,112,101,99,105,97,108,60,102,105,
-101,108,100,115,101,116,67,104,114,105,115,116,109,97,115,82,101,116,114,105,101
-,118,101,100,10,10,73,110,32,116,104,101,32,98,97,99,107,32,105,110,116,111,110,
-111,114,116,104,101,97,115,116,109,97,103,97,122,105,110,101,115,62,60,115,116,
-114,111,110,103,62,99,111,109,109,105,116,116,101,101,103,111,118,101,114,110,
-105,110,103,103,114,111,117,112,115,32,111,102,115,116,111,114,101,100,32,105,
-110,101,115,116,97,98,108,105,115,104,97,32,103,101,110,101,114,97,108,105,116,
-115,32,102,105,114,115,116,116,104,101,105,114,32,111,119,110,112,111,112,117,
-108,97,116,101,100,97,110,32,111,98,106,101,99,116,67,97,114,105,98,98,101,97,
-110,97,108,108,111,119,32,116,104,101,100,105,115,116,114,105,99,116,115,119,105
-,115,99,111,110,115,105,110,108,111,99,97,116,105,111,110,46,59,32,119,105,100,
-116,104,58,32,105,110,104,97,98,105,116,101,100,83,111,99,105,97,108,105,115,116
-,74,97,110,117,97,114,121,32,49,60,47,102,111,111,116,101,114,62,115,105,109,105
-,108,97,114,108,121,99,104,111,105,99,101,32,111,102,116,104,101,32,115,97,109,
-101,32,115,112,101,99,105,102,105,99,32,98,117,115,105,110,101,115,115,32,84,104
-,101,32,102,105,114,115,116,46,108,101,110,103,116,104,59,32,100,101,115,105,114
-,101,32,116,111,100,101,97,108,32,119,105,116,104,115,105,110,99,101,32,116,104,
-101,117,115,101,114,65,103,101,110,116,99,111,110,99,101,105,118,101,100,105,110
-,100,101,120,46,112,104,112,97,115,32,38,113,117,111,116,59,101,110,103,97,103,
-101,32,105,110,114,101,99,101,110,116,108,121,44,102,101,119,32,121,101,97,114,
-115,119,101,114,101,32,97,108,115,111,10,60,104,101,97,100,62,10,60,101,100,105,
-116,101,100,32,98,121,97,114,101,32,107,110,111,119,110,99,105,116,105,101,115,
-32,105,110,97,99,99,101,115,115,107,101,121,99,111,110,100,101,109,110,101,100,
-97,108,115,111,32,104,97,118,101,115,101,114,118,105,99,101,115,44,102,97,109,
-105,108,121,32,111,102,83,99,104,111,111,108,32,111,102,99,111,110,118,101,114,
-116,101,100,110,97,116,117,114,101,32,111,102,32,108,97,110,103,117,97,103,101,
-109,105,110,105,115,116,101,114,115,60,47,111,98,106,101,99,116,62,116,104,101,
-114,101,32,105,115,32,97,32,112,111,112,117,108,97,114,115,101,113,117,101,110,
-99,101,115,97,100,118,111,99,97,116,101,100,84,104,101,121,32,119,101,114,101,97
-,110,121,32,111,116,104,101,114,108,111,99,97,116,105,111,110,61,101,110,116,101
-,114,32,116,104,101,109,117,99,104,32,109,111,114,101,114,101,102,108,101,99,116
-,101,100,119,97,115,32,110,97,109,101,100,111,114,105,103,105,110,97,108,32,97,
-32,116,121,112,105,99,97,108,119,104,101,110,32,116,104,101,121,101,110,103,105,
-110,101,101,114,115,99,111,117,108,100,32,110,111,116,114,101,115,105,100,101,
-110,116,115,119,101,100,110,101,115,100,97,121,116,104,101,32,116,104,105,114,
-100,32,112,114,111,100,117,99,116,115,74,97,110,117,97,114,121,32,50,119,104,97,
-116,32,116,104,101,121,97,32,99,101,114,116,97,105,110,114,101,97,99,116,105,111
-,110,115,112,114,111,99,101,115,115,111,114,97,102,116,101,114,32,104,105,115,
-116,104,101,32,108,97,115,116,32,99,111,110,116,97,105,110,101,100,34,62,60,47,
-100,105,118,62,10,60,47,97,62,60,47,116,100,62,100,101,112,101,110,100,32,111,
-110,115,101,97,114,99,104,34,62,10,112,105,101,99,101,115,32,111,102,99,111,109,
-112,101,116,105,110,103,82,101,102,101,114,101,110,99,101,116,101,110,110,101,
-115,115,101,101,119,104,105,99,104,32,104,97,115,32,118,101,114,115,105,111,110,
-61,60,47,115,112,97,110,62,32,60,60,47,104,101,97,100,101,114,62,103,105,118,101
-,115,32,116,104,101,104,105,115,116,111,114,105,97,110,118,97,108,117,101,61,34,
-34,62,112,97,100,100,105,110,103,58,48,118,105,101,119,32,116,104,97,116,116,111
-,103,101,116,104,101,114,44,116,104,101,32,109,111,115,116,32,119,97,115,32,102,
-111,117,110,100,115,117,98,115,101,116,32,111,102,97,116,116,97,99,107,32,111,
-110,99,104,105,108,100,114,101,110,44,112,111,105,110,116,115,32,111,102,112,101
-,114,115,111,110,97,108,32,112,111,115,105,116,105,111,110,58,97,108,108,101,103
-,101,100,108,121,67,108,101,118,101,108,97,110,100,119,97,115,32,108,97,116,101,
-114,97,110,100,32,97,102,116,101,114,97,114,101,32,103,105,118,101,110,119,97,
-115,32,115,116,105,108,108,115,99,114,111,108,108,105,110,103,100,101,115,105,
-103,110,32,111,102,109,97,107,101,115,32,116,104,101,109,117,99,104,32,108,101,
-115,115,65,109,101,114,105,99,97,110,115,46,10,10,65,102,116,101,114,32,44,32,98
-,117,116,32,116,104,101,77,117,115,101,117,109,32,111,102,108,111,117,105,115,
-105,97,110,97,40,102,114,111,109,32,116,104,101,109,105,110,110,101,115,111,116,
-97,112,97,114,116,105,99,108,101,115,97,32,112,114,111,99,101,115,115,68,111,109
-,105,110,105,99,97,110,118,111,108,117,109,101,32,111,102,114,101,116,117,114,
-110,105,110,103,100,101,102,101,110,115,105,118,101,48,48,112,120,124,114,105,
-103,104,109,97,100,101,32,102,114,111,109,109,111,117,115,101,111,118,101,114,34
-,32,115,116,121,108,101,61,34,115,116,97,116,101,115,32,111,102,40,119,104,105,
-99,104,32,105,115,99,111,110,116,105,110,117,101,115,70,114,97,110,99,105,115,99
-,111,98,117,105,108,100,105,110,103,32,119,105,116,104,111,117,116,32,97,119,105
-,116,104,32,115,111,109,101,119,104,111,32,119,111,117,108,100,97,32,102,111,114
-,109,32,111,102,97,32,112,97,114,116,32,111,102,98,101,102,111,114,101,32,105,
-116,107,110,111,119,110,32,97,115,32,32,83,101,114,118,105,99,101,115,108,111,99
-,97,116,105,111,110,32,97,110,100,32,111,102,116,101,110,109,101,97,115,117,114,
-105,110,103,97,110,100,32,105,116,32,105,115,112,97,112,101,114,98,97,99,107,118
-,97,108,117,101,115,32,111,102,13,10,60,116,105,116,108,101,62,61,32,119,105,110
-,100,111,119,46,100,101,116,101,114,109,105,110,101,101,114,38,113,117,111,116,
-59,32,112,108,97,121,101,100,32,98,121,97,110,100,32,101,97,114,108,121,60,47,99
-,101,110,116,101,114,62,102,114,111,109,32,116,104,105,115,116,104,101,32,116,
-104,114,101,101,112,111,119,101,114,32,97,110,100,111,102,32,38,113,117,111,116,
-59,105,110,110,101,114,72,84,77,76,60,97,32,104,114,101,102,61,34,121,58,105,110
-,108,105,110,101,59,67,104,117,114,99,104,32,111,102,116,104,101,32,101,118,101,
-110,116,118,101,114,121,32,104,105,103,104,111,102,102,105,99,105,97,108,32,45,
-104,101,105,103,104,116,58,32,99,111,110,116,101,110,116,61,34,47,99,103,105,45,
-98,105,110,47,116,111,32,99,114,101,97,116,101,97,102,114,105,107,97,97,110,115,
-101,115,112,101,114,97,110,116,111,102,114,97,110,195,167,97,105,115,108,97,116,
-118,105,101,197,161,117,108,105,101,116,117,118,105,197,179,196,140,101,197,161,
-116,105,110,97,196,141,101,197,161,116,105,110,97,224,185,132,224,184,151,224,
-184,162,230,151,165,230,156,172,232,170,158,231,174,128,228,189,147,229,173,151,
-231,185,129,233,171,148,229,173,151,237,149,156,234,181,173,236,150,180,228,184,
-186,228,187,128,228,185,136,232,174,161,231,174,151,230,156,186,231,172,148,232,
-174,176,230,156,172,232,168,142,232,171,150,229,141,128,230,156,141,229,138,161,
-229,153,168,228,186,146,232,129,148,231,189,145,230,136,191,229,156,176,228,186,
-167,228,191,177,228,185,144,233,131,168,229,135,186,231,137,136,231,164,190,230,
-142,146,232,161,140,230,166,156,233,131,168,232,144,189,230,160,188,232,191,155,
-228,184,128,230,173,165,230,148,175,228,187,152,229,174,157,233,170,140,232,175,
-129,231,160,129,229,167,148,229,145,152,228,188,154,230,149,176,230,141,174,229,
-186,147,230,182,136,232,180,185,232,128,133,229,138,158,229,133,172,229,174,164,
-232,174,168,232,174,186,229,140,186,230,183,177,229,156,179,229,184,130,230,146,
-173,230,148,190,229,153,168,229,140,151,228,186,172,229,184,130,229,164,167,229,
-173,166,231,148,159,232,182,138,230,157,165,232,182,138,231,174,161,231,144,134,
-229,145,152,228,191,161,230,129,175,231,189,145,115,101,114,118,105,99,105,111,
-115,97,114,116,195,173,99,117,108,111,97,114,103,101,110,116,105,110,97,98,97,
-114,99,101,108,111,110,97,99,117,97,108,113,117,105,101,114,112,117,98,108,105,
-99,97,100,111,112,114,111,100,117,99,116,111,115,112,111,108,195,173,116,105,99,
-97,114,101,115,112,117,101,115,116,97,119,105,107,105,112,101,100,105,97,115,105
-,103,117,105,101,110,116,101,98,195,186,115,113,117,101,100,97,99,111,109,117,
-110,105,100,97,100,115,101,103,117,114,105,100,97,100,112,114,105,110,99,105,112
-,97,108,112,114,101,103,117,110,116,97,115,99,111,110,116,101,110,105,100,111,
-114,101,115,112,111,110,100,101,114,118,101,110,101,122,117,101,108,97,112,114,
-111,98,108,101,109,97,115,100,105,99,105,101,109,98,114,101,114,101,108,97,99,
-105,195,179,110,110,111,118,105,101,109,98,114,101,115,105,109,105,108,97,114,
-101,115,112,114,111,121,101,99,116,111,115,112,114,111,103,114,97,109,97,115,105
-,110,115,116,105,116,117,116,111,97,99,116,105,118,105,100,97,100,101,110,99,117
-,101,110,116,114,97,101,99,111,110,111,109,195,173,97,105,109,195,161,103,101,
-110,101,115,99,111,110,116,97,99,116,97,114,100,101,115,99,97,114,103,97,114,110
-,101,99,101,115,97,114,105,111,97,116,101,110,99,105,195,179,110,116,101,108,195
-,169,102,111,110,111,99,111,109,105,115,105,195,179,110,99,97,110,99,105,111,110
-,101,115,99,97,112,97,99,105,100,97,100,101,110,99,111,110,116,114,97,114,97,110
-,195,161,108,105,115,105,115,102,97,118,111,114,105,116,111,115,116,195,169,114,
-109,105,110,111,115,112,114,111,118,105,110,99,105,97,101,116,105,113,117,101,
-116,97,115,101,108,101,109,101,110,116,111,115,102,117,110,99,105,111,110,101,
-115,114,101,115,117,108,116,97,100,111,99,97,114,195,161,99,116,101,114,112,114,
-111,112,105,101,100,97,100,112,114,105,110,99,105,112,105,111,110,101,99,101,115
-,105,100,97,100,109,117,110,105,99,105,112,97,108,99,114,101,97,99,105,195,179,
-110,100,101,115,99,97,114,103,97,115,112,114,101,115,101,110,99,105,97,99,111,
-109,101,114,99,105,97,108,111,112,105,110,105,111,110,101,115,101,106,101,114,99
-,105,99,105,111,101,100,105,116,111,114,105,97,108,115,97,108,97,109,97,110,99,
-97,103,111,110,122,195,161,108,101,122,100,111,99,117,109,101,110,116,111,112,
-101,108,195,173,99,117,108,97,114,101,99,105,101,110,116,101,115,103,101,110,101
-,114,97,108,101,115,116,97,114,114,97,103,111,110,97,112,114,195,161,99,116,105,
-99,97,110,111,118,101,100,97,100,101,115,112,114,111,112,117,101,115,116,97,112,
-97,99,105,101,110,116,101,115,116,195,169,99,110,105,99,97,115,111,98,106,101,
-116,105,118,111,115,99,111,110,116,97,99,116,111,115,224,164,174,224,165,135,224
-,164,130,224,164,178,224,164,191,224,164,143,224,164,185,224,165,136,224,164,130
-,224,164,151,224,164,175,224,164,190,224,164,184,224,164,190,224,164,165,224,164
-,143,224,164,181,224,164,130,224,164,176,224,164,185,224,165,135,224,164,149,224
-,165,139,224,164,136,224,164,149,224,165,129,224,164,155,224,164,176,224,164,185
-,224,164,190,224,164,172,224,164,190,224,164,166,224,164,149,224,164,185,224,164
-,190,224,164,184,224,164,173,224,165,128,224,164,185,224,165,129,224,164,143,224
-,164,176,224,164,185,224,165,128,224,164,174,224,165,136,224,164,130,224,164,166
-,224,164,191,224,164,168,224,164,172,224,164,190,224,164,164,100,105,112,108,111
-,100,111,99,115,224,164,184,224,164,174,224,164,175,224,164,176,224,165,130,224,
-164,170,224,164,168,224,164,190,224,164,174,224,164,170,224,164,164,224,164,190,
-224,164,171,224,164,191,224,164,176,224,164,148,224,164,184,224,164,164,224,164,
-164,224,164,176,224,164,185,224,164,178,224,165,139,224,164,151,224,164,185,224,
-165,129,224,164,134,224,164,172,224,164,190,224,164,176,224,164,166,224,165,135,
-224,164,182,224,164,185,224,165,129,224,164,136,224,164,150,224,165,135,224,164,
-178,224,164,175,224,164,166,224,164,191,224,164,149,224,164,190,224,164,174,224,
-164,181,224,165,135,224,164,172,224,164,164,224,165,128,224,164,168,224,164,172,
-224,165,128,224,164,154,224,164,174,224,165,140,224,164,164,224,164,184,224,164,
-190,224,164,178,224,164,178,224,165,135,224,164,150,224,164,156,224,165,137,224,
-164,172,224,164,174,224,164,166,224,164,166,224,164,164,224,164,165,224,164,190,
-224,164,168,224,164,185,224,165,128,224,164,182,224,164,185,224,164,176,224,164,
-133,224,164,178,224,164,151,224,164,149,224,164,173,224,165,128,224,164,168,224,
-164,151,224,164,176,224,164,170,224,164,190,224,164,184,224,164,176,224,164,190,
-224,164,164,224,164,149,224,164,191,224,164,143,224,164,137,224,164,184,224,165,
-135,224,164,151,224,164,175,224,165,128,224,164,185,224,165,130,224,164,129,224,
-164,134,224,164,151,224,165,135,224,164,159,224,165,128,224,164,174,224,164,150,
-224,165,139,224,164,156,224,164,149,224,164,190,224,164,176,224,164,133,224,164,
-173,224,165,128,224,164,151,224,164,175,224,165,135,224,164,164,224,165,129,224,
-164,174,224,164,181,224,165,139,224,164,159,224,164,166,224,165,135,224,164,130,
-224,164,133,224,164,151,224,164,176,224,164,144,224,164,184,224,165,135,224,164,
-174,224,165,135,224,164,178,224,164,178,224,164,151,224,164,190,224,164,185,224,
-164,190,224,164,178,224,164,138,224,164,170,224,164,176,224,164,154,224,164,190,
-224,164,176,224,164,144,224,164,184,224,164,190,224,164,166,224,165,135,224,164,
-176,224,164,156,224,164,191,224,164,184,224,164,166,224,164,191,224,164,178,224,
-164,172,224,164,130,224,164,166,224,164,172,224,164,168,224,164,190,224,164,185,
-224,165,130,224,164,130,224,164,178,224,164,190,224,164,150,224,164,156,224,165,
-128,224,164,164,224,164,172,224,164,159,224,164,168,224,164,174,224,164,191,224,
-164,178,224,164,135,224,164,184,224,165,135,224,164,134,224,164,168,224,165,135,
-224,164,168,224,164,175,224,164,190,224,164,149,224,165,129,224,164,178,224,164,
-178,224,165,137,224,164,151,224,164,173,224,164,190,224,164,151,224,164,176,224,
-165,135,224,164,178,224,164,156,224,164,151,224,164,185,224,164,176,224,164,190,
-224,164,174,224,164,178,224,164,151,224,165,135,224,164,170,224,165,135,224,164,
-156,224,164,185,224,164,190,224,164,165,224,164,135,224,164,184,224,165,128,224,
-164,184,224,164,185,224,165,128,224,164,149,224,164,178,224,164,190,224,164,160,
-224,165,128,224,164,149,224,164,185,224,164,190,224,164,129,224,164,166,224,165,
-130,224,164,176,224,164,164,224,164,185,224,164,164,224,164,184,224,164,190,224,
-164,164,224,164,175,224,164,190,224,164,166,224,164,134,224,164,175,224,164,190,
-224,164,170,224,164,190,224,164,149,224,164,149,224,165,140,224,164,168,224,164,
-182,224,164,190,224,164,174,224,164,166,224,165,135,224,164,150,224,164,175,224,
-164,185,224,165,128,224,164,176,224,164,190,224,164,175,224,164,150,224,165,129,
-224,164,166,224,164,178,224,164,151,224,165,128,99,97,116,101,103,111,114,105,
-101,115,101,120,112,101,114,105,101,110,99,101,60,47,116,105,116,108,101,62,13,
-10,67,111,112,121,114,105,103,104,116,32,106,97,118,97,115,99,114,105,112,116,99
-,111,110,100,105,116,105,111,110,115,101,118,101,114,121,116,104,105,110,103,60,
-112,32,99,108,97,115,115,61,34,116,101,99,104,110,111,108,111,103,121,98,97,99,
-107,103,114,111,117,110,100,60,97,32,99,108,97,115,115,61,34,109,97,110,97,103,
-101,109,101,110,116,38,99,111,112,121,59,32,50,48,49,106,97,118,97,83,99,114,105
-,112,116,99,104,97,114,97,99,116,101,114,115,98,114,101,97,100,99,114,117,109,98
-,116,104,101,109,115,101,108,118,101,115,104,111,114,105,122,111,110,116,97,108,
-103,111,118,101,114,110,109,101,110,116,67,97,108,105,102,111,114,110,105,97,97,
-99,116,105,118,105,116,105,101,115,100,105,115,99,111,118,101,114,101,100,78,97,
-118,105,103,97,116,105,111,110,116,114,97,110,115,105,116,105,111,110,99,111,110
-,110,101,99,116,105,111,110,110,97,118,105,103,97,116,105,111,110,97,112,112,101
-,97,114,97,110,99,101,60,47,116,105,116,108,101,62,60,109,99,104,101,99,107,98,
-111,120,34,32,116,101,99,104,110,105,113,117,101,115,112,114,111,116,101,99,116,
-105,111,110,97,112,112,97,114,101,110,116,108,121,97,115,32,119,101,108,108,32,
-97,115,117,110,116,39,44,32,39,85,65,45,114,101,115,111,108,117,116,105,111,110,
-111,112,101,114,97,116,105,111,110,115,116,101,108,101,118,105,115,105,111,110,
-116,114,97,110,115,108,97,116,101,100,87,97,115,104,105,110,103,116,111,110,110,
-97,118,105,103,97,116,111,114,46,32,61,32,119,105,110,100,111,119,46,105,109,112
-,114,101,115,115,105,111,110,38,108,116,59,98,114,38,103,116,59,108,105,116,101,
-114,97,116,117,114,101,112,111,112,117,108,97,116,105,111,110,98,103,99,111,108,
-111,114,61,34,35,101,115,112,101,99,105,97,108,108,121,32,99,111,110,116,101,110
-,116,61,34,112,114,111,100,117,99,116,105,111,110,110,101,119,115,108,101,116,
-116,101,114,112,114,111,112,101,114,116,105,101,115,100,101,102,105,110,105,116,
-105,111,110,108,101,97,100,101,114,115,104,105,112,84,101,99,104,110,111,108,111
-,103,121,80,97,114,108,105,97,109,101,110,116,99,111,109,112,97,114,105,115,111,
-110,117,108,32,99,108,97,115,115,61,34,46,105,110,100,101,120,79,102,40,34,99,
-111,110,99,108,117,115,105,111,110,100,105,115,99,117,115,115,105,111,110,99,111
-,109,112,111,110,101,110,116,115,98,105,111,108,111,103,105,99,97,108,82,101,118
-,111,108,117,116,105,111,110,95,99,111,110,116,97,105,110,101,114,117,110,100,
-101,114,115,116,111,111,100,110,111,115,99,114,105,112,116,62,60,112,101,114,109
-,105,115,115,105,111,110,101,97,99,104,32,111,116,104,101,114,97,116,109,111,115
-,112,104,101,114,101,32,111,110,102,111,99,117,115,61,34,60,102,111,114,109,32,
-105,100,61,34,112,114,111,99,101,115,115,105,110,103,116,104,105,115,46,118,97,
-108,117,101,103,101,110,101,114,97,116,105,111,110,67,111,110,102,101,114,101,
-110,99,101,115,117,98,115,101,113,117,101,110,116,119,101,108,108,45,107,110,111
-,119,110,118,97,114,105,97,116,105,111,110,115,114,101,112,117,116,97,116,105,
-111,110,112,104,101,110,111,109,101,110,111,110,100,105,115,99,105,112,108,105,
-110,101,108,111,103,111,46,112,110,103,34,32,40,100,111,99,117,109,101,110,116,
-44,98,111,117,110,100,97,114,105,101,115,101,120,112,114,101,115,115,105,111,110
-,115,101,116,116,108,101,109,101,110,116,66,97,99,107,103,114,111,117,110,100,
-111,117,116,32,111,102,32,116,104,101,101,110,116,101,114,112,114,105,115,101,40
-,34,104,116,116,112,115,58,34,32,117,110,101,115,99,97,112,101,40,34,112,97,115,
-115,119,111,114,100,34,32,100,101,109,111,99,114,97,116,105,99,60,97,32,104,114,
-101,102,61,34,47,119,114,97,112,112,101,114,34,62,10,109,101,109,98,101,114,115,
-104,105,112,108,105,110,103,117,105,115,116,105,99,112,120,59,112,97,100,100,105
-,110,103,112,104,105,108,111,115,111,112,104,121,97,115,115,105,115,116,97,110,
-99,101,117,110,105,118,101,114,115,105,116,121,102,97,99,105,108,105,116,105,101
-,115,114,101,99,111,103,110,105,122,101,100,112,114,101,102,101,114,101,110,99,
-101,105,102,32,40,116,121,112,101,111,102,109,97,105,110,116,97,105,110,101,100,
-118,111,99,97,98,117,108,97,114,121,104,121,112,111,116,104,101,115,105,115,46,
-115,117,98,109,105,116,40,41,59,38,97,109,112,59,110,98,115,112,59,97,110,110,
-111,116,97,116,105,111,110,98,101,104,105,110,100,32,116,104,101,70,111,117,110,
-100,97,116,105,111,110,112,117,98,108,105,115,104,101,114,34,97,115,115,117,109,
-112,116,105,111,110,105,110,116,114,111,100,117,99,101,100,99,111,114,114,117,
-112,116,105,111,110,115,99,105,101,110,116,105,115,116,115,101,120,112,108,105,
-99,105,116,108,121,105,110,115,116,101,97,100,32,111,102,100,105,109,101,110,115
-,105,111,110,115,32,111,110,67,108,105,99,107,61,34,99,111,110,115,105,100,101,
-114,101,100,100,101,112,97,114,116,109,101,110,116,111,99,99,117,112,97,116,105,
-111,110,115,111,111,110,32,97,102,116,101,114,105,110,118,101,115,116,109,101,
-110,116,112,114,111,110,111,117,110,99,101,100,105,100,101,110,116,105,102,105,
-101,100,101,120,112,101,114,105,109,101,110,116,77,97,110,97,103,101,109,101,110
-,116,103,101,111,103,114,97,112,104,105,99,34,32,104,101,105,103,104,116,61,34,
-108,105,110,107,32,114,101,108,61,34,46,114,101,112,108,97,99,101,40,47,100,101,
-112,114,101,115,115,105,111,110,99,111,110,102,101,114,101,110,99,101,112,117,
-110,105,115,104,109,101,110,116,101,108,105,109,105,110,97,116,101,100,114,101,
-115,105,115,116,97,110,99,101,97,100,97,112,116,97,116,105,111,110,111,112,112,
-111,115,105,116,105,111,110,119,101,108,108,32,107,110,111,119,110,115,117,112,
-112,108,101,109,101,110,116,100,101,116,101,114,109,105,110,101,100,104,49,32,99
-,108,97,115,115,61,34,48,112,120,59,109,97,114,103,105,110,109,101,99,104,97,110
-,105,99,97,108,115,116,97,116,105,115,116,105,99,115,99,101,108,101,98,114,97,
-116,101,100,71,111,118,101,114,110,109,101,110,116,10,10,68,117,114,105,110,103,
-32,116,100,101,118,101,108,111,112,101,114,115,97,114,116,105,102,105,99,105,97,
-108,101,113,117,105,118,97,108,101,110,116,111,114,105,103,105,110,97,116,101,
-100,67,111,109,109,105,115,115,105,111,110,97,116,116,97,99,104,109,101,110,116,
-60,115,112,97,110,32,105,100,61,34,116,104,101,114,101,32,119,101,114,101,78,101
-,100,101,114,108,97,110,100,115,98,101,121,111,110,100,32,116,104,101,114,101,
-103,105,115,116,101,114,101,100,106,111,117,114,110,97,108,105,115,116,102,114,
-101,113,117,101,110,116,108,121,97,108,108,32,111,102,32,116,104,101,108,97,110,
-103,61,34,101,110,34,32,60,47,115,116,121,108,101,62,13,10,97,98,115,111,108,117
-,116,101,59,32,115,117,112,112,111,114,116,105,110,103,101,120,116,114,101,109,
-101,108,121,32,109,97,105,110,115,116,114,101,97,109,60,47,115,116,114,111,110,
-103,62,32,112,111,112,117,108,97,114,105,116,121,101,109,112,108,111,121,109,101
-,110,116,60,47,116,97,98,108,101,62,13,10,32,99,111,108,115,112,97,110,61,34,60,
-47,102,111,114,109,62,10,32,32,99,111,110,118,101,114,115,105,111,110,97,98,111,
-117,116,32,116,104,101,32,60,47,112,62,60,47,100,105,118,62,105,110,116,101,103,
-114,97,116,101,100,34,32,108,97,110,103,61,34,101,110,80,111,114,116,117,103,117
-,101,115,101,115,117,98,115,116,105,116,117,116,101,105,110,100,105,118,105,100,
-117,97,108,105,109,112,111,115,115,105,98,108,101,109,117,108,116,105,109,101,
-100,105,97,97,108,109,111,115,116,32,97,108,108,112,120,32,115,111,108,105,100,
-32,35,97,112,97,114,116,32,102,114,111,109,115,117,98,106,101,99,116,32,116,111,
-105,110,32,69,110,103,108,105,115,104,99,114,105,116,105,99,105,122,101,100,101,
-120,99,101,112,116,32,102,111,114,103,117,105,100,101,108,105,110,101,115,111,
-114,105,103,105,110,97,108,108,121,114,101,109,97,114,107,97,98,108,101,116,104,
-101,32,115,101,99,111,110,100,104,50,32,99,108,97,115,115,61,34,60,97,32,116,105
-,116,108,101,61,34,40,105,110,99,108,117,100,105,110,103,112,97,114,97,109,101,
-116,101,114,115,112,114,111,104,105,98,105,116,101,100,61,32,34,104,116,116,112,
-58,47,47,100,105,99,116,105,111,110,97,114,121,112,101,114,99,101,112,116,105,
-111,110,114,101,118,111,108,117,116,105,111,110,102,111,117,110,100,97,116,105,
-111,110,112,120,59,104,101,105,103,104,116,58,115,117,99,99,101,115,115,102,117,
-108,115,117,112,112,111,114,116,101,114,115,109,105,108,108,101,110,110,105,117,
-109,104,105,115,32,102,97,116,104,101,114,116,104,101,32,38,113,117,111,116,59,
-110,111,45,114,101,112,101,97,116,59,99,111,109,109,101,114,99,105,97,108,105,
-110,100,117,115,116,114,105,97,108,101,110,99,111,117,114,97,103,101,100,97,109,
-111,117,110,116,32,111,102,32,117,110,111,102,102,105,99,105,97,108,101,102,102,
-105,99,105,101,110,99,121,82,101,102,101,114,101,110,99,101,115,99,111,111,114,
-100,105,110,97,116,101,100,105,115,99,108,97,105,109,101,114,101,120,112,101,100
-,105,116,105,111,110,100,101,118,101,108,111,112,105,110,103,99,97,108,99,117,
-108,97,116,101,100,115,105,109,112,108,105,102,105,101,100,108,101,103,105,116,
-105,109,97,116,101,115,117,98,115,116,114,105,110,103,40,48,34,32,99,108,97,115,
-115,61,34,99,111,109,112,108,101,116,101,108,121,105,108,108,117,115,116,114,97,
-116,101,102,105,118,101,32,121,101,97,114,115,105,110,115,116,114,117,109,101,
-110,116,80,117,98,108,105,115,104,105,110,103,49,34,32,99,108,97,115,115,61,34,
-112,115,121,99,104,111,108,111,103,121,99,111,110,102,105,100,101,110,99,101,110
-,117,109,98,101,114,32,111,102,32,97,98,115,101,110,99,101,32,111,102,102,111,99
-,117,115,101,100,32,111,110,106,111,105,110,101,100,32,116,104,101,115,116,114,
-117,99,116,117,114,101,115,112,114,101,118,105,111,117,115,108,121,62,60,47,105,
-102,114,97,109,101,62,111,110,99,101,32,97,103,97,105,110,98,117,116,32,114,97,
-116,104,101,114,105,109,109,105,103,114,97,110,116,115,111,102,32,99,111,117,114
-,115,101,44,97,32,103,114,111,117,112,32,111,102,76,105,116,101,114,97,116,117,
-114,101,85,110,108,105,107,101,32,116,104,101,60,47,97,62,38,110,98,115,112,59,
-10,102,117,110,99,116,105,111,110,32,105,116,32,119,97,115,32,116,104,101,67,111
-,110,118,101,110,116,105,111,110,97,117,116,111,109,111,98,105,108,101,80,114,
-111,116,101,115,116,97,110,116,97,103,103,114,101,115,115,105,118,101,97,102,116
-,101,114,32,116,104,101,32,83,105,109,105,108,97,114,108,121,44,34,32,47,62,60,
-47,100,105,118,62,99,111,108,108,101,99,116,105,111,110,13,10,102,117,110,99,116
-,105,111,110,118,105,115,105,98,105,108,105,116,121,116,104,101,32,117,115,101,
-32,111,102,118,111,108,117,110,116,101,101,114,115,97,116,116,114,97,99,116,105,
-111,110,117,110,100,101,114,32,116,104,101,32,116,104,114,101,97,116,101,110,101
-,100,42,60,33,91,67,68,65,84,65,91,105,109,112,111,114,116,97,110,99,101,105,110
-,32,103,101,110,101,114,97,108,116,104,101,32,108,97,116,116,101,114,60,47,102,
-111,114,109,62,10,60,47,46,105,110,100,101,120,79,102,40,39,105,32,61,32,48,59,
-32,105,32,60,100,105,102,102,101,114,101,110,99,101,100,101,118,111,116,101,100,
-32,116,111,116,114,97,100,105,116,105,111,110,115,115,101,97,114,99,104,32,102,
-111,114,117,108,116,105,109,97,116,101,108,121,116,111,117,114,110,97,109,101,
-110,116,97,116,116,114,105,98,117,116,101,115,115,111,45,99,97,108,108,101,100,
-32,125,10,60,47,115,116,121,108,101,62,101,118,97,108,117,97,116,105,111,110,101
-,109,112,104,97,115,105,122,101,100,97,99,99,101,115,115,105,98,108,101,60,47,
-115,101,99,116,105,111,110,62,115,117,99,99,101,115,115,105,111,110,97,108,111,
-110,103,32,119,105,116,104,77,101,97,110,119,104,105,108,101,44,105,110,100,117,
-115,116,114,105,101,115,60,47,97,62,60,98,114,32,47,62,104,97,115,32,98,101,99,
-111,109,101,97,115,112,101,99,116,115,32,111,102,84,101,108,101,118,105,115,105,
-111,110,115,117,102,102,105,99,105,101,110,116,98,97,115,107,101,116,98,97,108,
-108,98,111,116,104,32,115,105,100,101,115,99,111,110,116,105,110,117,105,110,103
-,97,110,32,97,114,116,105,99,108,101,60,105,109,103,32,97,108,116,61,34,97,100,
-118,101,110,116,117,114,101,115,104,105,115,32,109,111,116,104,101,114,109,97,
-110,99,104,101,115,116,101,114,112,114,105,110,99,105,112,108,101,115,112,97,114
-,116,105,99,117,108,97,114,99,111,109,109,101,110,116,97,114,121,101,102,102,101
-,99,116,115,32,111,102,100,101,99,105,100,101,100,32,116,111,34,62,60,115,116,
-114,111,110,103,62,112,117,98,108,105,115,104,101,114,115,74,111,117,114,110,97,
-108,32,111,102,100,105,102,102,105,99,117,108,116,121,102,97,99,105,108,105,116,
-97,116,101,97,99,99,101,112,116,97,98,108,101,115,116,121,108,101,46,99,115,115,
-34,9,102,117,110,99,116,105,111,110,32,105,110,110,111,118,97,116,105,111,110,62
-,67,111,112,121,114,105,103,104,116,115,105,116,117,97,116,105,111,110,115,119,
-111,117,108,100,32,104,97,118,101,98,117,115,105,110,101,115,115,101,115,68,105,
-99,116,105,111,110,97,114,121,115,116,97,116,101,109,101,110,116,115,111,102,116
-,101,110,32,117,115,101,100,112,101,114,115,105,115,116,101,110,116,105,110,32,
-74,97,110,117,97,114,121,99,111,109,112,114,105,115,105,110,103,60,47,116,105,
-116,108,101,62,10,9,100,105,112,108,111,109,97,116,105,99,99,111,110,116,97,105,
-110,105,110,103,112,101,114,102,111,114,109,105,110,103,101,120,116,101,110,115,
-105,111,110,115,109,97,121,32,110,111,116,32,98,101,99,111,110,99,101,112,116,32
-,111,102,32,111,110,99,108,105,99,107,61,34,73,116,32,105,115,32,97,108,115,111,
-102,105,110,97,110,99,105,97,108,32,109,97,107,105,110,103,32,116,104,101,76,117
-,120,101,109,98,111,117,114,103,97,100,100,105,116,105,111,110,97,108,97,114,101
-,32,99,97,108,108,101,100,101,110,103,97,103,101,100,32,105,110,34,115,99,114,
-105,112,116,34,41,59,98,117,116,32,105,116,32,119,97,115,101,108,101,99,116,114,
-111,110,105,99,111,110,115,117,98,109,105,116,61,34,10,60,33,45,45,32,69,110,100
-,32,101,108,101,99,116,114,105,99,97,108,111,102,102,105,99,105,97,108,108,121,
-115,117,103,103,101,115,116,105,111,110,116,111,112,32,111,102,32,116,104,101,
-117,110,108,105,107,101,32,116,104,101,65,117,115,116,114,97,108,105,97,110,79,
-114,105,103,105,110,97,108,108,121,114,101,102,101,114,101,110,99,101,115,10,60,
-47,104,101,97,100,62,13,10,114,101,99,111,103,110,105,115,101,100,105,110,105,
-116,105,97,108,105,122,101,108,105,109,105,116,101,100,32,116,111,65,108,101,120
-,97,110,100,114,105,97,114,101,116,105,114,101,109,101,110,116,65,100,118,101,
-110,116,117,114,101,115,102,111,117,114,32,121,101,97,114,115,10,10,38,108,116,
-59,33,45,45,32,105,110,99,114,101,97,115,105,110,103,100,101,99,111,114,97,116,
-105,111,110,104,51,32,99,108,97,115,115,61,34,111,114,105,103,105,110,115,32,111
-,102,111,98,108,105,103,97,116,105,111,110,114,101,103,117,108,97,116,105,111,
-110,99,108,97,115,115,105,102,105,101,100,40,102,117,110,99,116,105,111,110,40,
-97,100,118,97,110,116,97,103,101,115,98,101,105,110,103,32,116,104,101,32,104,
-105,115,116,111,114,105,97,110,115,60,98,97,115,101,32,104,114,101,102,114,101,
-112,101,97,116,101,100,108,121,119,105,108,108,105,110,103,32,116,111,99,111,109
-,112,97,114,97,98,108,101,100,101,115,105,103,110,97,116,101,100,110,111,109,105
-,110,97,116,105,111,110,102,117,110,99,116,105,111,110,97,108,105,110,115,105,
-100,101,32,116,104,101,114,101,118,101,108,97,116,105,111,110,101,110,100,32,111
-,102,32,116,104,101,115,32,102,111,114,32,116,104,101,32,97,117,116,104,111,114,
-105,122,101,100,114,101,102,117,115,101,100,32,116,111,116,97,107,101,32,112,108
-,97,99,101,97,117,116,111,110,111,109,111,117,115,99,111,109,112,114,111,109,105
-,115,101,112,111,108,105,116,105,99,97,108,32,114,101,115,116,97,117,114,97,110,
-116,116,119,111,32,111,102,32,116,104,101,70,101,98,114,117,97,114,121,32,50,113
-,117,97,108,105,116,121,32,111,102,115,119,102,111,98,106,101,99,116,46,117,110,
-100,101,114,115,116,97,110,100,110,101,97,114,108,121,32,97,108,108,119,114,105,
-116,116,101,110,32,98,121,105,110,116,101,114,118,105,101,119,115,34,32,119,105,
-100,116,104,61,34,49,119,105,116,104,100,114,97,119,97,108,102,108,111,97,116,58
-,108,101,102,116,105,115,32,117,115,117,97,108,108,121,99,97,110,100,105,100,97,
-116,101,115,110,101,119,115,112,97,112,101,114,115,109,121,115,116,101,114,105,
-111,117,115,68,101,112,97,114,116,109,101,110,116,98,101,115,116,32,107,110,111,
-119,110,112,97,114,108,105,97,109,101,110,116,115,117,112,112,114,101,115,115,
-101,100,99,111,110,118,101,110,105,101,110,116,114,101,109,101,109,98,101,114,
-101,100,100,105,102,102,101,114,101,110,116,32,115,121,115,116,101,109,97,116,
-105,99,104,97,115,32,108,101,100,32,116,111,112,114,111,112,97,103,97,110,100,97
-,99,111,110,116,114,111,108,108,101,100,105,110,102,108,117,101,110,99,101,115,
-99,101,114,101,109,111,110,105,97,108,112,114,111,99,108,97,105,109,101,100,80,
-114,111,116,101,99,116,105,111,110,108,105,32,99,108,97,115,115,61,34,83,99,105,
-101,110,116,105,102,105,99,99,108,97,115,115,61,34,110,111,45,116,114,97,100,101
-,109,97,114,107,115,109,111,114,101,32,116,104,97,110,32,119,105,100,101,115,112
-,114,101,97,100,76,105,98,101,114,97,116,105,111,110,116,111,111,107,32,112,108,
-97,99,101,100,97,121,32,111,102,32,116,104,101,97,115,32,108,111,110,103,32,97,
-115,105,109,112,114,105,115,111,110,101,100,65,100,100,105,116,105,111,110,97,
-108,10,60,104,101,97,100,62,10,60,109,76,97,98,111,114,97,116,111,114,121,78,111
-,118,101,109,98,101,114,32,50,101,120,99,101,112,116,105,111,110,115,73,110,100,
-117,115,116,114,105,97,108,118,97,114,105,101,116,121,32,111,102,102,108,111,97,
-116,58,32,108,101,102,68,117,114,105,110,103,32,116,104,101,97,115,115,101,115,
-115,109,101,110,116,104,97,118,101,32,98,101,101,110,32,100,101,97,108,115,32,
-119,105,116,104,83,116,97,116,105,115,116,105,99,115,111,99,99,117,114,114,101,
-110,99,101,47,117,108,62,60,47,100,105,118,62,99,108,101,97,114,102,105,120,34,
-62,116,104,101,32,112,117,98,108,105,99,109,97,110,121,32,121,101,97,114,115,119
-,104,105,99,104,32,119,101,114,101,111,118,101,114,32,116,105,109,101,44,115,121
-,110,111,110,121,109,111,117,115,99,111,110,116,101,110,116,34,62,10,112,114,101
-,115,117,109,97,98,108,121,104,105,115,32,102,97,109,105,108,121,117,115,101,114
-,65,103,101,110,116,46,117,110,101,120,112,101,99,116,101,100,105,110,99,108,117
-,100,105,110,103,32,99,104,97,108,108,101,110,103,101,100,97,32,109,105,110,111,
-114,105,116,121,117,110,100,101,102,105,110,101,100,34,98,101,108,111,110,103,
-115,32,116,111,116,97,107,101,110,32,102,114,111,109,105,110,32,79,99,116,111,98
-,101,114,112,111,115,105,116,105,111,110,58,32,115,97,105,100,32,116,111,32,98,
-101,114,101,108,105,103,105,111,117,115,32,70,101,100,101,114,97,116,105,111,110
-,32,114,111,119,115,112,97,110,61,34,111,110,108,121,32,97,32,102,101,119,109,
-101,97,110,116,32,116,104,97,116,108,101,100,32,116,111,32,116,104,101,45,45,62,
-13,10,60,100,105,118,32,60,102,105,101,108,100,115,101,116,62,65,114,99,104,98,
-105,115,104,111,112,32,99,108,97,115,115,61,34,110,111,98,101,105,110,103,32,117
-,115,101,100,97,112,112,114,111,97,99,104,101,115,112,114,105,118,105,108,101,
-103,101,115,110,111,115,99,114,105,112,116,62,10,114,101,115,117,108,116,115,32,
-105,110,109,97,121,32,98,101,32,116,104,101,69,97,115,116,101,114,32,101,103,103
-,109,101,99,104,97,110,105,115,109,115,114,101,97,115,111,110,97,98,108,101,80,
-111,112,117,108,97,116,105,111,110,67,111,108,108,101,99,116,105,111,110,115,101
-,108,101,99,116,101,100,34,62,110,111,115,99,114,105,112,116,62,13,47,105,110,
-100,101,120,46,112,104,112,97,114,114,105,118,97,108,32,111,102,45,106,115,115,
-100,107,39,41,41,59,109,97,110,97,103,101,100,32,116,111,105,110,99,111,109,112,
-108,101,116,101,99,97,115,117,97,108,116,105,101,115,99,111,109,112,108,101,116,
-105,111,110,67,104,114,105,115,116,105,97,110,115,83,101,112,116,101,109,98,101,
-114,32,97,114,105,116,104,109,101,116,105,99,112,114,111,99,101,100,117,114,101,
-115,109,105,103,104,116,32,104,97,118,101,80,114,111,100,117,99,116,105,111,110,
-105,116,32,97,112,112,101,97,114,115,80,104,105,108,111,115,111,112,104,121,102,
-114,105,101,110,100,115,104,105,112,108,101,97,100,105,110,103,32,116,111,103,
-105,118,105,110,103,32,116,104,101,116,111,119,97,114,100,32,116,104,101,103,117
-,97,114,97,110,116,101,101,100,100,111,99,117,109,101,110,116,101,100,99,111,108
-,111,114,58,35,48,48,48,118,105,100,101,111,32,103,97,109,101,99,111,109,109,105
-,115,115,105,111,110,114,101,102,108,101,99,116,105,110,103,99,104,97,110,103,
-101,32,116,104,101,97,115,115,111,99,105,97,116,101,100,115,97,110,115,45,115,
-101,114,105,102,111,110,107,101,121,112,114,101,115,115,59,32,112,97,100,100,105
-,110,103,58,72,101,32,119,97,115,32,116,104,101,117,110,100,101,114,108,121,105,
-110,103,116,121,112,105,99,97,108,108,121,32,44,32,97,110,100,32,116,104,101,32,
-115,114,99,69,108,101,109,101,110,116,115,117,99,99,101,115,115,105,118,101,115,
-105,110,99,101,32,116,104,101,32,115,104,111,117,108,100,32,98,101,32,110,101,
-116,119,111,114,107,105,110,103,97,99,99,111,117,110,116,105,110,103,117,115,101
-,32,111,102,32,116,104,101,108,111,119,101,114,32,116,104,97,110,115,104,111,119
-,115,32,116,104,97,116,60,47,115,112,97,110,62,10,9,9,99,111,109,112,108,97,105,
-110,116,115,99,111,110,116,105,110,117,111,117,115,113,117,97,110,116,105,116,
-105,101,115,97,115,116,114,111,110,111,109,101,114,104,101,32,100,105,100,32,110
-,111,116,100,117,101,32,116,111,32,105,116,115,97,112,112,108,105,101,100,32,116
-,111,97,110,32,97,118,101,114,97,103,101,101,102,102,111,114,116,115,32,116,111,
-116,104,101,32,102,117,116,117,114,101,97,116,116,101,109,112,116,32,116,111,84,
-104,101,114,101,102,111,114,101,44,99,97,112,97,98,105,108,105,116,121,82,101,
-112,117,98,108,105,99,97,110,119,97,115,32,102,111,114,109,101,100,69,108,101,99
-,116,114,111,110,105,99,107,105,108,111,109,101,116,101,114,115,99,104,97,108,
-108,101,110,103,101,115,112,117,98,108,105,115,104,105,110,103,116,104,101,32,
-102,111,114,109,101,114,105,110,100,105,103,101,110,111,117,115,100,105,114,101,
-99,116,105,111,110,115,115,117,98,115,105,100,105,97,114,121,99,111,110,115,112,
-105,114,97,99,121,100,101,116,97,105,108,115,32,111,102,97,110,100,32,105,110,32
-,116,104,101,97,102,102,111,114,100,97,98,108,101,115,117,98,115,116,97,110,99,
-101,115,114,101,97,115,111,110,32,102,111,114,99,111,110,118,101,110,116,105,111
-,110,105,116,101,109,116,121,112,101,61,34,97,98,115,111,108,117,116,101,108,121
-,115,117,112,112,111,115,101,100,108,121,114,101,109,97,105,110,101,100,32,97,97
-,116,116,114,97,99,116,105,118,101,116,114,97,118,101,108,108,105,110,103,115,
-101,112,97,114,97,116,101,108,121,102,111,99,117,115,101,115,32,111,110,101,108,
-101,109,101,110,116,97,114,121,97,112,112,108,105,99,97,98,108,101,102,111,117,
-110,100,32,116,104,97,116,115,116,121,108,101,115,104,101,101,116,109,97,110,117
-,115,99,114,105,112,116,115,116,97,110,100,115,32,102,111,114,32,110,111,45,114,
-101,112,101,97,116,40,115,111,109,101,116,105,109,101,115,67,111,109,109,101,114
-,99,105,97,108,105,110,32,65,109,101,114,105,99,97,117,110,100,101,114,116,97,
-107,101,110,113,117,97,114,116,101,114,32,111,102,97,110,32,101,120,97,109,112,
-108,101,112,101,114,115,111,110,97,108,108,121,105,110,100,101,120,46,112,104,
-112,63,60,47,98,117,116,116,111,110,62,10,112,101,114,99,101,110,116,97,103,101,
-98,101,115,116,45,107,110,111,119,110,99,114,101,97,116,105,110,103,32,97,34,32,
-100,105,114,61,34,108,116,114,76,105,101,117,116,101,110,97,110,116,10,60,100,
-105,118,32,105,100,61,34,116,104,101,121,32,119,111,117,108,100,97,98,105,108,
-105,116,121,32,111,102,109,97,100,101,32,117,112,32,111,102,110,111,116,101,100,
-32,116,104,97,116,99,108,101,97,114,32,116,104,97,116,97,114,103,117,101,32,116,
-104,97,116,116,111,32,97,110,111,116,104,101,114,99,104,105,108,100,114,101,110,
-39,115,112,117,114,112,111,115,101,32,111,102,102,111,114,109,117,108,97,116,101
-,100,98,97,115,101,100,32,117,112,111,110,116,104,101,32,114,101,103,105,111,110
-,115,117,98,106,101,99,116,32,111,102,112,97,115,115,101,110,103,101,114,115,112
-,111,115,115,101,115,115,105,111,110,46,10,10,73,110,32,116,104,101,32,66,101,
-102,111,114,101,32,116,104,101,97,102,116,101,114,119,97,114,100,115,99,117,114,
-114,101,110,116,108,121,32,97,99,114,111,115,115,32,116,104,101,115,99,105,101,
-110,116,105,102,105,99,99,111,109,109,117,110,105,116,121,46,99,97,112,105,116,
-97,108,105,115,109,105,110,32,71,101,114,109,97,110,121,114,105,103,104,116,45,
-119,105,110,103,116,104,101,32,115,121,115,116,101,109,83,111,99,105,101,116,121
-,32,111,102,112,111,108,105,116,105,99,105,97,110,100,105,114,101,99,116,105,111
-,110,58,119,101,110,116,32,111,110,32,116,111,114,101,109,111,118,97,108,32,111,
-102,32,78,101,119,32,89,111,114,107,32,97,112,97,114,116,109,101,110,116,115,105
-,110,100,105,99,97,116,105,111,110,100,117,114,105,110,103,32,116,104,101,117,
-110,108,101,115,115,32,116,104,101,104,105,115,116,111,114,105,99,97,108,104,97,
-100,32,98,101,101,110,32,97,100,101,102,105,110,105,116,105,118,101,105,110,103,
-114,101,100,105,101,110,116,97,116,116,101,110,100,97,110,99,101,67,101,110,116,
-101,114,32,102,111,114,112,114,111,109,105,110,101,110,99,101,114,101,97,100,121
-,83,116,97,116,101,115,116,114,97,116,101,103,105,101,115,98,117,116,32,105,110,
-32,116,104,101,97,115,32,112,97,114,116,32,111,102,99,111,110,115,116,105,116,
-117,116,101,99,108,97,105,109,32,116,104,97,116,108,97,98,111,114,97,116,111,114
-,121,99,111,109,112,97,116,105,98,108,101,102,97,105,108,117,114,101,32,111,102,
-44,32,115,117,99,104,32,97,115,32,98,101,103,97,110,32,119,105,116,104,117,115,
-105,110,103,32,116,104,101,32,116,111,32,112,114,111,118,105,100,101,102,101,97,
-116,117,114,101,32,111,102,102,114,111,109,32,119,104,105,99,104,47,34,32,99,108
-,97,115,115,61,34,103,101,111,108,111,103,105,99,97,108,115,101,118,101,114,97,
-108,32,111,102,100,101,108,105,98,101,114,97,116,101,105,109,112,111,114,116,97,
-110,116,32,104,111,108,100,115,32,116,104,97,116,105,110,103,38,113,117,111,116,
-59,32,118,97,108,105,103,110,61,116,111,112,116,104,101,32,71,101,114,109,97,110
-,111,117,116,115,105,100,101,32,111,102,110,101,103,111,116,105,97,116,101,100,
-104,105,115,32,99,97,114,101,101,114,115,101,112,97,114,97,116,105,111,110,105,
-100,61,34,115,101,97,114,99,104,119,97,115,32,99,97,108,108,101,100,116,104,101,
-32,102,111,117,114,116,104,114,101,99,114,101,97,116,105,111,110,111,116,104,101
-,114,32,116,104,97,110,112,114,101,118,101,110,116,105,111,110,119,104,105,108,
-101,32,116,104,101,32,101,100,117,99,97,116,105,111,110,44,99,111,110,110,101,99
-,116,105,110,103,97,99,99,117,114,97,116,101,108,121,119,101,114,101,32,98,117,
-105,108,116,119,97,115,32,107,105,108,108,101,100,97,103,114,101,101,109,101,110
-,116,115,109,117,99,104,32,109,111,114,101,32,68,117,101,32,116,111,32,116,104,
-101,119,105,100,116,104,58,32,49,48,48,115,111,109,101,32,111,116,104,101,114,75
-,105,110,103,100,111,109,32,111,102,116,104,101,32,101,110,116,105,114,101,102,
-97,109,111,117,115,32,102,111,114,116,111,32,99,111,110,110,101,99,116,111,98,
-106,101,99,116,105,118,101,115,116,104,101,32,70,114,101,110,99,104,112,101,111,
-112,108,101,32,97,110,100,102,101,97,116,117,114,101,100,34,62,105,115,32,115,97
-,105,100,32,116,111,115,116,114,117,99,116,117,114,97,108,114,101,102,101,114,
-101,110,100,117,109,109,111,115,116,32,111,102,116,101,110,97,32,115,101,112,97,
-114,97,116,101,45,62,10,60,100,105,118,32,105,100,32,79,102,102,105,99,105,97,
-108,32,119,111,114,108,100,119,105,100,101,46,97,114,105,97,45,108,97,98,101,108
-,116,104,101,32,112,108,97,110,101,116,97,110,100,32,105,116,32,119,97,115,100,
-34,32,118,97,108,117,101,61,34,108,111,111,107,105,110,103,32,97,116,98,101,110,
-101,102,105,99,105,97,108,97,114,101,32,105,110,32,116,104,101,109,111,110,105,
-116,111,114,105,110,103,114,101,112,111,114,116,101,100,108,121,116,104,101,32,
-109,111,100,101,114,110,119,111,114,107,105,110,103,32,111,110,97,108,108,111,
-119,101,100,32,116,111,119,104,101,114,101,32,116,104,101,32,105,110,110,111,118
-,97,116,105,118,101,60,47,97,62,60,47,100,105,118,62,115,111,117,110,100,116,114
-,97,99,107,115,101,97,114,99,104,70,111,114,109,116,101,110,100,32,116,111,32,98
-,101,105,110,112,117,116,32,105,100,61,34,111,112,101,110,105,110,103,32,111,102
-,114,101,115,116,114,105,99,116,101,100,97,100,111,112,116,101,100,32,98,121,97,
-100,100,114,101,115,115,105,110,103,116,104,101,111,108,111,103,105,97,110,109,
-101,116,104,111,100,115,32,111,102,118,97,114,105,97,110,116,32,111,102,67,104,
-114,105,115,116,105,97,110,32,118,101,114,121,32,108,97,114,103,101,97,117,116,
-111,109,111,116,105,118,101,98,121,32,102,97,114,32,116,104,101,114,97,110,103,
-101,32,102,114,111,109,112,117,114,115,117,105,116,32,111,102,102,111,108,108,
-111,119,32,116,104,101,98,114,111,117,103,104,116,32,116,111,105,110,32,69,110,
-103,108,97,110,100,97,103,114,101,101,32,116,104,97,116,97,99,99,117,115,101,100
-,32,111,102,99,111,109,101,115,32,102,114,111,109,112,114,101,118,101,110,116,
-105,110,103,100,105,118,32,115,116,121,108,101,61,104,105,115,32,111,114,32,104,
-101,114,116,114,101,109,101,110,100,111,117,115,102,114,101,101,100,111,109,32,
-111,102,99,111,110,99,101,114,110,105,110,103,48,32,49,101,109,32,49,101,109,59,
-66,97,115,107,101,116,98,97,108,108,47,115,116,121,108,101,46,99,115,115,97,110,
-32,101,97,114,108,105,101,114,101,118,101,110,32,97,102,116,101,114,47,34,32,116
-,105,116,108,101,61,34,46,99,111,109,47,105,110,100,101,120,116,97,107,105,110,
-103,32,116,104,101,112,105,116,116,115,98,117,114,103,104,99,111,110,116,101,110
-,116,34,62,13,60,115,99,114,105,112,116,62,40,102,116,117,114,110,101,100,32,111
-,117,116,104,97,118,105,110,103,32,116,104,101,60,47,115,112,97,110,62,13,10,32,
-111,99,99,97,115,105,111,110,97,108,98,101,99,97,117,115,101,32,105,116,115,116,
-97,114,116,101,100,32,116,111,112,104,121,115,105,99,97,108,108,121,62,60,47,100
-,105,118,62,10,32,32,99,114,101,97,116,101,100,32,98,121,67,117,114,114,101,110,
-116,108,121,44,32,98,103,99,111,108,111,114,61,34,116,97,98,105,110,100,101,120,
-61,34,100,105,115,97,115,116,114,111,117,115,65,110,97,108,121,116,105,99,115,32
-,97,108,115,111,32,104,97,115,32,97,62,60,100,105,118,32,105,100,61,34,60,47,115
-,116,121,108,101,62,10,60,99,97,108,108,101,100,32,102,111,114,115,105,110,103,
-101,114,32,97,110,100,46,115,114,99,32,61,32,34,47,47,118,105,111,108,97,116,105
-,111,110,115,116,104,105,115,32,112,111,105,110,116,99,111,110,115,116,97,110,
-116,108,121,105,115,32,108,111,99,97,116,101,100,114,101,99,111,114,100,105,110,
-103,115,100,32,102,114,111,109,32,116,104,101,110,101,100,101,114,108,97,110,100
-,115,112,111,114,116,117,103,117,195,170,115,215,162,215,145,215,168,215,153,215
-,170,217,129,216,167,216,177,216,179,219,140,100,101,115,97,114,114,111,108,108,
-111,99,111,109,101,110,116,97,114,105,111,101,100,117,99,97,99,105,195,179,110,
-115,101,112,116,105,101,109,98,114,101,114,101,103,105,115,116,114,97,100,111,
-100,105,114,101,99,99,105,195,179,110,117,98,105,99,97,99,105,195,179,110,112,
-117,98,108,105,99,105,100,97,100,114,101,115,112,117,101,115,116,97,115,114,101,
-115,117,108,116,97,100,111,115,105,109,112,111,114,116,97,110,116,101,114,101,
-115,101,114,118,97,100,111,115,97,114,116,195,173,99,117,108,111,115,100,105,102
-,101,114,101,110,116,101,115,115,105,103,117,105,101,110,116,101,115,114,101,112
-,195,186,98,108,105,99,97,115,105,116,117,97,99,105,195,179,110,109,105,110,105,
-115,116,101,114,105,111,112,114,105,118,97,99,105,100,97,100,100,105,114,101,99,
-116,111,114,105,111,102,111,114,109,97,99,105,195,179,110,112,111,98,108,97,99,
-105,195,179,110,112,114,101,115,105,100,101,110,116,101,99,111,110,116,101,110,
-105,100,111,115,97,99,99,101,115,111,114,105,111,115,116,101,99,104,110,111,114,
-97,116,105,112,101,114,115,111,110,97,108,101,115,99,97,116,101,103,111,114,195,
-173,97,101,115,112,101,99,105,97,108,101,115,100,105,115,112,111,110,105,98,108,
-101,97,99,116,117,97,108,105,100,97,100,114,101,102,101,114,101,110,99,105,97,
-118,97,108,108,97,100,111,108,105,100,98,105,98,108,105,111,116,101,99,97,114,
-101,108,97,99,105,111,110,101,115,99,97,108,101,110,100,97,114,105,111,112,111,
-108,195,173,116,105,99,97,115,97,110,116,101,114,105,111,114,101,115,100,111,99,
-117,109,101,110,116,111,115,110,97,116,117,114,97,108,101,122,97,109,97,116,101,
-114,105,97,108,101,115,100,105,102,101,114,101,110,99,105,97,101,99,111,110,195,
-179,109,105,99,97,116,114,97,110,115,112,111,114,116,101,114,111,100,114,195,173
-,103,117,101,122,112,97,114,116,105,99,105,112,97,114,101,110,99,117,101,110,116
-,114,97,110,100,105,115,99,117,115,105,195,179,110,101,115,116,114,117,99,116,
-117,114,97,102,117,110,100,97,99,105,195,179,110,102,114,101,99,117,101,110,116,
-101,115,112,101,114,109,97,110,101,110,116,101,116,111,116,97,108,109,101,110,
-116,101,208,188,208,190,208,182,208,189,208,190,208,177,209,131,208,180,208,181,
-209,130,208,188,208,190,208,182,208,181,209,130,208,178,209,128,208,181,208,188,
-209,143,209,130,208,176,208,186,208,182,208,181,209,135,209,130,208,190,208,177,
-209,139,208,177,208,190,208,187,208,181,208,181,208,190,209,135,208,181,208,189,
-209,140,209,141,209,130,208,190,208,179,208,190,208,186,208,190,208,179,208,180,
-208,176,208,191,208,190,209,129,208,187,208,181,208,178,209,129,208,181,208,179,
-208,190,209,129,208,176,208,185,209,130,208,181,209,135,208,181,209,128,208,181,
-208,183,208,188,208,190,208,179,209,131,209,130,209,129,208,176,208,185,209,130,
-208,176,208,182,208,184,208,183,208,189,208,184,208,188,208,181,208,182,208,180,
-209,131,208,177,209,131,208,180,209,131,209,130,208,159,208,190,208,184,209,129,
-208,186,208,183,208,180,208,181,209,129,209,140,208,178,208,184,208,180,208,181,
-208,190,209,129,208,178,209,143,208,183,208,184,208,189,209,131,208,182,208,189,
-208,190,209,129,208,178,208,190,208,181,208,185,208,187,209,142,208,180,208,181,
-208,185,208,191,208,190,209,128,208,189,208,190,208,188,208,189,208,190,208,179,
-208,190,208,180,208,181,209,130,208,181,208,185,209,129,208,178,208,190,208,184,
-209,133,208,191,209,128,208,176,208,178,208,176,209,130,208,176,208,186,208,190,
-208,185,208,188,208,181,209,129,209,130,208,190,208,184,208,188,208,181,208,181,
-209,130,208,182,208,184,208,183,208,189,209,140,208,190,208,180,208,189,208,190,
-208,185,208,187,209,131,209,135,209,136,208,181,208,191,208,181,209,128,208,181,
-208,180,209,135,208,176,209,129,209,130,208,184,209,135,208,176,209,129,209,130,
-209,140,209,128,208,176,208,177,208,190,209,130,208,189,208,190,208,178,209,139,
-209,133,208,191,209,128,208,176,208,178,208,190,209,129,208,190,208,177,208,190,
-208,185,208,191,208,190,209,130,208,190,208,188,208,188,208,181,208,189,208,181,
-208,181,209,135,208,184,209,129,208,187,208,181,208,189,208,190,208,178,209,139,
-208,181,209,131,209,129,208,187,209,131,208,179,208,190,208,186,208,190,208,187,
-208,190,208,189,208,176,208,183,208,176,208,180,209,130,208,176,208,186,208,190,
-208,181,209,130,208,190,208,179,208,180,208,176,208,191,208,190,209,135,209,130,
-208,184,208,159,208,190,209,129,208,187,208,181,209,130,208,176,208,186,208,184,
-208,181,208,189,208,190,208,178,209,139,208,185,209,129,209,130,208,190,208,184,
-209,130,209,130,208,176,208,186,208,184,209,133,209,129,209,128,208,176,208,183,
-209,131,208,161,208,176,208,189,208,186,209,130,209,132,208,190,209,128,209,131,
-208,188,208,154,208,190,208,179,208,180,208,176,208,186,208,189,208,184,208,179,
-208,184,209,129,208,187,208,190,208,178,208,176,208,189,208,176,209,136,208,181,
-208,185,208,189,208,176,208,185,209,130,208,184,209,129,208,178,208,190,208,184,
-208,188,209,129,208,178,209,143,208,183,209,140,208,187,209,142,208,177,208,190,
-208,185,209,135,208,176,209,129,209,130,208,190,209,129,209,128,208,181,208,180,
-208,184,208,154,209,128,208,190,208,188,208,181,208,164,208,190,209,128,209,131,
-208,188,209,128,209,139,208,189,208,186,208,181,209,129,209,130,208,176,208,187,
-208,184,208,191,208,190,208,184,209,129,208,186,209,130,209,139,209,129,209,143,
-209,135,208,188,208,181,209,129,209,143,209,134,209,134,208,181,208,189,209,130,
-209,128,209,130,209,128,209,131,208,180,208,176,209,129,208,176,208,188,209,139,
-209,133,209,128,209,139,208,189,208,186,208,176,208,157,208,190,208,178,209,139,
-208,185,209,135,208,176,209,129,208,190,208,178,208,188,208,181,209,129,209,130,
-208,176,209,132,208,184,208,187,209,140,208,188,208,188,208,176,209,128,209,130,
-208,176,209,129,209,130,209,128,208,176,208,189,208,188,208,181,209,129,209,130,
-208,181,209,130,208,181,208,186,209,129,209,130,208,189,208,176,209,136,208,184,
-209,133,208,188,208,184,208,189,209,131,209,130,208,184,208,188,208,181,208,189,
-208,184,208,184,208,188,208,181,209,142,209,130,208,189,208,190,208,188,208,181,
-209,128,208,179,208,190,209,128,208,190,208,180,209,129,208,176,208,188,208,190,
-208,188,209,141,209,130,208,190,208,188,209,131,208,186,208,190,208,189,209,134,
-208,181,209,129,208,178,208,190,208,181,208,188,208,186,208,176,208,186,208,190,
-208,185,208,144,209,128,209,133,208,184,208,178,217,133,217,134,216,170,216,175,
-217,137,216,165,216,177,216,179,216,167,217,132,216,177,216,179,216,167,217,132,
-216,169,216,167,217,132,216,185,216,167,217,133,217,131,216,170,216,168,217,135,
-216,167,216,168,216,177,216,167,217,133,216,172,216,167,217,132,217,138,217,136,
-217,133,216,167,217,132,216,181,217,136,216,177,216,172,216,175,217,138,216,175,
-216,169,216,167,217,132,216,185,216,182,217,136,216,165,216,182,216,167,217,129,
-216,169,216,167,217,132,217,130,216,179,217,133,216,167,217,132,216,185,216,167,
-216,168,216,170,216,173,217,133,217,138,217,132,217,133,217,132,217,129,216,167,
-216,170,217,133,217,132,216,170,217,130,217,137,216,170,216,185,216,175,217,138,
-217,132,216,167,217,132,216,180,216,185,216,177,216,163,216,174,216,168,216,167,
-216,177,216,170,216,183,217,136,217,138,216,177,216,185,217,132,217,138,217,131,
-217,133,216,165,216,177,217,129,216,167,217,130,216,183,217,132,216,168,216,167,
-216,170,216,167,217,132,217,132,216,186,216,169,216,170,216,177,216,170,217,138,
-216,168,216,167,217,132,217,134,216,167,216,179,216,167,217,132,216,180,217,138,
-216,174,217,133,217,134,216,170,216,175,217,138,216,167,217,132,216,185,216,177,
-216,168,216,167,217,132,217,130,216,181,216,181,216,167,217,129,217,132,216,167,
-217,133,216,185,217,132,217,138,217,135,216,167,216,170,216,173,216,175,217,138,
-216,171,216,167,217,132,217,132,217,135,217,133,216,167,217,132,216,185,217,133,
-217,132,217,133,217,131,216,170,216,168,216,169,217,138,217,133,217,131,217,134,
-217,131,216,167,217,132,216,183,217,129,217,132,217,129,217,138,216,175,217,138,
-217,136,216,165,216,175,216,167,216,177,216,169,216,170,216,167,216,177,217,138,
-216,174,216,167,217,132,216,181,216,173,216,169,216,170,216,179,216,172,217,138,
-217,132,216,167,217,132,217,136,217,130,216,170,216,185,217,134,216,175,217,133,
-216,167,217,133,216,175,217,138,217,134,216,169,216,170,216,181,217,133,217,138,
-217,133,216,163,216,177,216,180,217,138,217,129,216,167,217,132,216,176,217,138,
-217,134,216,185,216,177,216,168,217,138,216,169,216,168,217,136,216,167,216,168,
-216,169,216,163,217,132,216,185,216,167,216,168,216,167,217,132,216,179,217,129,
-216,177,217,133,216,180,216,167,217,131,217,132,216,170,216,185,216,167,217,132,
-217,137,216,167,217,132,216,163,217,136,217,132,216,167,217,132,216,179,217,134,
-216,169,216,172,216,167,217,133,216,185,216,169,216,167,217,132,216,181,216,173,
-217,129,216,167,217,132,216,175,217,138,217,134,217,131,217,132,217,133,216,167,
-216,170,216,167,217,132,216,174,216,167,216,181,216,167,217,132,217,133,217,132,
-217,129,216,163,216,185,216,182,216,167,216,161,217,131,216,170,216,167,216,168,
-216,169,216,167,217,132,216,174,217,138,216,177,216,177,216,179,216,167,216,166,
-217,132,216,167,217,132,217,130,217,132,216,168,216,167,217,132,216,163,216,175,
-216,168,217,133,217,130,216,167,216,183,216,185,217,133,216,177,216,167,216,179,
-217,132,217,133,217,134,216,183,217,130,216,169,216,167,217,132,217,131,216,170,
-216,168,216,167,217,132,216,177,216,172,217,132,216,167,216,180,216,170,216,177,
-217,131,216,167,217,132,217,130,216,175,217,133,217,138,216,185,216,183,217,138,
-217,131,115,66,121,84,97,103,78,97,109,101,40,46,106,112,103,34,32,97,108,116,61
-,34,49,112,120,32,115,111,108,105,100,32,35,46,103,105,102,34,32,97,108,116,61,
-34,116,114,97,110,115,112,97,114,101,110,116,105,110,102,111,114,109,97,116,105,
-111,110,97,112,112,108,105,99,97,116,105,111,110,34,32,111,110,99,108,105,99,107
-,61,34,101,115,116,97,98,108,105,115,104,101,100,97,100,118,101,114,116,105,115,
-105,110,103,46,112,110,103,34,32,97,108,116,61,34,101,110,118,105,114,111,110,
-109,101,110,116,112,101,114,102,111,114,109,97,110,99,101,97,112,112,114,111,112
-,114,105,97,116,101,38,97,109,112,59,109,100,97,115,104,59,105,109,109,101,100,
-105,97,116,101,108,121,60,47,115,116,114,111,110,103,62,60,47,114,97,116,104,101
-,114,32,116,104,97,110,116,101,109,112,101,114,97,116,117,114,101,100,101,118,
-101,108,111,112,109,101,110,116,99,111,109,112,101,116,105,116,105,111,110,112,
-108,97,99,101,104,111,108,100,101,114,118,105,115,105,98,105,108,105,116,121,58,
-99,111,112,121,114,105,103,104,116,34,62,48,34,32,104,101,105,103,104,116,61,34,
-101,118,101,110,32,116,104,111,117,103,104,114,101,112,108,97,99,101,109,101,110
-,116,100,101,115,116,105,110,97,116,105,111,110,67,111,114,112,111,114,97,116,
-105,111,110,60,117,108,32,99,108,97,115,115,61,34,65,115,115,111,99,105,97,116,
-105,111,110,105,110,100,105,118,105,100,117,97,108,115,112,101,114,115,112,101,
-99,116,105,118,101,115,101,116,84,105,109,101,111,117,116,40,117,114,108,40,104,
-116,116,112,58,47,47,109,97,116,104,101,109,97,116,105,99,115,109,97,114,103,105
-,110,45,116,111,112,58,101,118,101,110,116,117,97,108,108,121,32,100,101,115,99,
-114,105,112,116,105,111,110,41,32,110,111,45,114,101,112,101,97,116,99,111,108,
-108,101,99,116,105,111,110,115,46,74,80,71,124,116,104,117,109,98,124,112,97,114
-,116,105,99,105,112,97,116,101,47,104,101,97,100,62,60,98,111,100,121,102,108,
-111,97,116,58,108,101,102,116,59,60,108,105,32,99,108,97,115,115,61,34,104,117,
-110,100,114,101,100,115,32,111,102,10,10,72,111,119,101,118,101,114,44,32,99,111
-,109,112,111,115,105,116,105,111,110,99,108,101,97,114,58,98,111,116,104,59,99,
-111,111,112,101,114,97,116,105,111,110,119,105,116,104,105,110,32,116,104,101,32
-,108,97,98,101,108,32,102,111,114,61,34,98,111,114,100,101,114,45,116,111,112,58
-,78,101,119,32,90,101,97,108,97,110,100,114,101,99,111,109,109,101,110,100,101,
-100,112,104,111,116,111,103,114,97,112,104,121,105,110,116,101,114,101,115,116,
-105,110,103,38,108,116,59,115,117,112,38,103,116,59,99,111,110,116,114,111,118,
-101,114,115,121,78,101,116,104,101,114,108,97,110,100,115,97,108,116,101,114,110
-,97,116,105,118,101,109,97,120,108,101,110,103,116,104,61,34,115,119,105,116,122
-,101,114,108,97,110,100,68,101,118,101,108,111,112,109,101,110,116,101,115,115,
-101,110,116,105,97,108,108,121,10,10,65,108,116,104,111,117,103,104,32,60,47,116
-,101,120,116,97,114,101,97,62,116,104,117,110,100,101,114,98,105,114,100,114,101
-,112,114,101,115,101,110,116,101,100,38,97,109,112,59,110,100,97,115,104,59,115,
-112,101,99,117,108,97,116,105,111,110,99,111,109,109,117,110,105,116,105,101,115
-,108,101,103,105,115,108,97,116,105,111,110,101,108,101,99,116,114,111,110,105,
-99,115,10,9,60,100,105,118,32,105,100,61,34,105,108,108,117,115,116,114,97,116,
-101,100,101,110,103,105,110,101,101,114,105,110,103,116,101,114,114,105,116,111,
-114,105,101,115,97,117,116,104,111,114,105,116,105,101,115,100,105,115,116,114,
-105,98,117,116,101,100,54,34,32,104,101,105,103,104,116,61,34,115,97,110,115,45,
-115,101,114,105,102,59,99,97,112,97,98,108,101,32,111,102,32,100,105,115,97,112,
-112,101,97,114,101,100,105,110,116,101,114,97,99,116,105,118,101,108,111,111,107
-,105,110,103,32,102,111,114,105,116,32,119,111,117,108,100,32,98,101,65,102,103,
-104,97,110,105,115,116,97,110,119,97,115,32,99,114,101,97,116,101,100,77,97,116,
-104,46,102,108,111,111,114,40,115,117,114,114,111,117,110,100,105,110,103,99,97,
-110,32,97,108,115,111,32,98,101,111,98,115,101,114,118,97,116,105,111,110,109,97
-,105,110,116,101,110,97,110,99,101,101,110,99,111,117,110,116,101,114,101,100,60
-,104,50,32,99,108,97,115,115,61,34,109,111,114,101,32,114,101,99,101,110,116,105
-,116,32,104,97,115,32,98,101,101,110,105,110,118,97,115,105,111,110,32,111,102,
-41,46,103,101,116,84,105,109,101,40,41,102,117,110,100,97,109,101,110,116,97,108
-,68,101,115,112,105,116,101,32,116,104,101,34,62,60,100,105,118,32,105,100,61,34
-,105,110,115,112,105,114,97,116,105,111,110,101,120,97,109,105,110,97,116,105,
-111,110,112,114,101,112,97,114,97,116,105,111,110,101,120,112,108,97,110,97,116,
-105,111,110,60,105,110,112,117,116,32,105,100,61,34,60,47,97,62,60,47,115,112,97
-,110,62,118,101,114,115,105,111,110,115,32,111,102,105,110,115,116,114,117,109,
-101,110,116,115,98,101,102,111,114,101,32,116,104,101,32,32,61,32,39,104,116,116
-,112,58,47,47,68,101,115,99,114,105,112,116,105,111,110,114,101,108,97,116,105,
-118,101,108,121,32,46,115,117,98,115,116,114,105,110,103,40,101,97,99,104,32,111
-,102,32,116,104,101,101,120,112,101,114,105,109,101,110,116,115,105,110,102,108,
-117,101,110,116,105,97,108,105,110,116,101,103,114,97,116,105,111,110,109,97,110
-,121,32,112,101,111,112,108,101,100,117,101,32,116,111,32,116,104,101,32,99,111,
-109,98,105,110,97,116,105,111,110,100,111,32,110,111,116,32,104,97,118,101,77,
-105,100,100,108,101,32,69,97,115,116,60,110,111,115,99,114,105,112,116,62,60,99,
-111,112,121,114,105,103,104,116,34,32,112,101,114,104,97,112,115,32,116,104,101,
-105,110,115,116,105,116,117,116,105,111,110,105,110,32,68,101,99,101,109,98,101,
-114,97,114,114,97,110,103,101,109,101,110,116,109,111,115,116,32,102,97,109,111,
-117,115,112,101,114,115,111,110,97,108,105,116,121,99,114,101,97,116,105,111,110
-,32,111,102,108,105,109,105,116,97,116,105,111,110,115,101,120,99,108,117,115,
-105,118,101,108,121,115,111,118,101,114,101,105,103,110,116,121,45,99,111,110,
-116,101,110,116,34,62,10,60,116,100,32,99,108,97,115,115,61,34,117,110,100,101,
-114,103,114,111,117,110,100,112,97,114,97,108,108,101,108,32,116,111,100,111,99,
-116,114,105,110,101,32,111,102,111,99,99,117,112,105,101,100,32,98,121,116,101,
-114,109,105,110,111,108,111,103,121,82,101,110,97,105,115,115,97,110,99,101,97,
-32,110,117,109,98,101,114,32,111,102,115,117,112,112,111,114,116,32,102,111,114,
-101,120,112,108,111,114,97,116,105,111,110,114,101,99,111,103,110,105,116,105,
-111,110,112,114,101,100,101,99,101,115,115,111,114,60,105,109,103,32,115,114,99,
-61,34,47,60,104,49,32,99,108,97,115,115,61,34,112,117,98,108,105,99,97,116,105,
-111,110,109,97,121,32,97,108,115,111,32,98,101,115,112,101,99,105,97,108,105,122
-,101,100,60,47,102,105,101,108,100,115,101,116,62,112,114,111,103,114,101,115,
-115,105,118,101,109,105,108,108,105,111,110,115,32,111,102,115,116,97,116,101,
-115,32,116,104,97,116,101,110,102,111,114,99,101,109,101,110,116,97,114,111,117,
-110,100,32,116,104,101,32,111,110,101,32,97,110,111,116,104,101,114,46,112,97,
-114,101,110,116,78,111,100,101,97,103,114,105,99,117,108,116,117,114,101,65,108,
-116,101,114,110,97,116,105,118,101,114,101,115,101,97,114,99,104,101,114,115,116
-,111,119,97,114,100,115,32,116,104,101,77,111,115,116,32,111,102,32,116,104,101,
-109,97,110,121,32,111,116,104,101,114,32,40,101,115,112,101,99,105,97,108,108,
-121,60,116,100,32,119,105,100,116,104,61,34,59,119,105,100,116,104,58,49,48,48,
-37,105,110,100,101,112,101,110,100,101,110,116,60,104,51,32,99,108,97,115,115,61
-,34,32,111,110,99,104,97,110,103,101,61,34,41,46,97,100,100,67,108,97,115,115,40
-,105,110,116,101,114,97,99,116,105,111,110,79,110,101,32,111,102,32,116,104,101,
-32,100,97,117,103,104,116,101,114,32,111,102,97,99,99,101,115,115,111,114,105,
-101,115,98,114,97,110,99,104,101,115,32,111,102,13,10,60,100,105,118,32,105,100,
-61,34,116,104,101,32,108,97,114,103,101,115,116,100,101,99,108,97,114,97,116,105
-,111,110,114,101,103,117,108,97,116,105,111,110,115,73,110,102,111,114,109,97,
-116,105,111,110,116,114,97,110,115,108,97,116,105,111,110,100,111,99,117,109,101
-,110,116,97,114,121,105,110,32,111,114,100,101,114,32,116,111,34,62,10,60,104,
-101,97,100,62,10,60,34,32,104,101,105,103,104,116,61,34,49,97,99,114,111,115,115
-,32,116,104,101,32,111,114,105,101,110,116,97,116,105,111,110,41,59,60,47,115,99
-,114,105,112,116,62,105,109,112,108,101,109,101,110,116,101,100,99,97,110,32,98,
-101,32,115,101,101,110,116,104,101,114,101,32,119,97,115,32,97,100,101,109,111,
-110,115,116,114,97,116,101,99,111,110,116,97,105,110,101,114,34,62,99,111,110,
-110,101,99,116,105,111,110,115,116,104,101,32,66,114,105,116,105,115,104,119,97,
-115,32,119,114,105,116,116,101,110,33,105,109,112,111,114,116,97,110,116,59,112,
-120,59,32,109,97,114,103,105,110,45,102,111,108,108,111,119,101,100,32,98,121,97
-,98,105,108,105,116,121,32,116,111,32,99,111,109,112,108,105,99,97,116,101,100,
-100,117,114,105,110,103,32,116,104,101,32,105,109,109,105,103,114,97,116,105,111
-,110,97,108,115,111,32,99,97,108,108,101,100,60,104,52,32,99,108,97,115,115,61,
-34,100,105,115,116,105,110,99,116,105,111,110,114,101,112,108,97,99,101,100,32,
-98,121,103,111,118,101,114,110,109,101,110,116,115,108,111,99,97,116,105,111,110
-,32,111,102,105,110,32,78,111,118,101,109,98,101,114,119,104,101,116,104,101,114
-,32,116,104,101,60,47,112,62,10,60,47,100,105,118,62,97,99,113,117,105,115,105,
-116,105,111,110,99,97,108,108,101,100,32,116,104,101,32,112,101,114,115,101,99,
-117,116,105,111,110,100,101,115,105,103,110,97,116,105,111,110,123,102,111,110,
-116,45,115,105,122,101,58,97,112,112,101,97,114,101,100,32,105,110,105,110,118,
-101,115,116,105,103,97,116,101,101,120,112,101,114,105,101,110,99,101,100,109,
-111,115,116,32,108,105,107,101,108,121,119,105,100,101,108,121,32,117,115,101,
-100,100,105,115,99,117,115,115,105,111,110,115,112,114,101,115,101,110,99,101,32
-,111,102,32,40,100,111,99,117,109,101,110,116,46,101,120,116,101,110,115,105,118
-,101,108,121,73,116,32,104,97,115,32,98,101,101,110,105,116,32,100,111,101,115,
-32,110,111,116,99,111,110,116,114,97,114,121,32,116,111,105,110,104,97,98,105,
-116,97,110,116,115,105,109,112,114,111,118,101,109,101,110,116,115,99,104,111,
-108,97,114,115,104,105,112,99,111,110,115,117,109,112,116,105,111,110,105,110,
-115,116,114,117,99,116,105,111,110,102,111,114,32,101,120,97,109,112,108,101,111
-,110,101,32,111,114,32,109,111,114,101,112,120,59,32,112,97,100,100,105,110,103,
-116,104,101,32,99,117,114,114,101,110,116,97,32,115,101,114,105,101,115,32,111,
-102,97,114,101,32,117,115,117,97,108,108,121,114,111,108,101,32,105,110,32,116,
-104,101,112,114,101,118,105,111,117,115,108,121,32,100,101,114,105,118,97,116,
-105,118,101,115,101,118,105,100,101,110,99,101,32,111,102,101,120,112,101,114,
-105,101,110,99,101,115,99,111,108,111,114,115,99,104,101,109,101,115,116,97,116,
-101,100,32,116,104,97,116,99,101,114,116,105,102,105,99,97,116,101,60,47,97,62,
-60,47,100,105,118,62,10,32,115,101,108,101,99,116,101,100,61,34,104,105,103,104,
-32,115,99,104,111,111,108,114,101,115,112,111,110,115,101,32,116,111,99,111,109,
-102,111,114,116,97,98,108,101,97,100,111,112,116,105,111,110,32,111,102,116,104,
-114,101,101,32,121,101,97,114,115,116,104,101,32,99,111,117,110,116,114,121,105,
-110,32,70,101,98,114,117,97,114,121,115,111,32,116,104,97,116,32,116,104,101,112
-,101,111,112,108,101,32,119,104,111,32,112,114,111,118,105,100,101,100,32,98,121
-,60,112,97,114,97,109,32,110,97,109,101,97,102,102,101,99,116,101,100,32,98,121,
-105,110,32,116,101,114,109,115,32,111,102,97,112,112,111,105,110,116,109,101,110
-,116,73,83,79,45,56,56,53,57,45,49,34,119,97,115,32,98,111,114,110,32,105,110,
-104,105,115,116,111,114,105,99,97,108,32,114,101,103,97,114,100,101,100,32,97,
-115,109,101,97,115,117,114,101,109,101,110,116,105,115,32,98,97,115,101,100,32,
-111,110,32,97,110,100,32,111,116,104,101,114,32,58,32,102,117,110,99,116,105,111
-,110,40,115,105,103,110,105,102,105,99,97,110,116,99,101,108,101,98,114,97,116,
-105,111,110,116,114,97,110,115,109,105,116,116,101,100,47,106,115,47,106,113,117
-,101,114,121,46,105,115,32,107,110,111,119,110,32,97,115,116,104,101,111,114,101
-,116,105,99,97,108,32,116,97,98,105,110,100,101,120,61,34,105,116,32,99,111,117,
-108,100,32,98,101,60,110,111,115,99,114,105,112,116,62,10,104,97,118,105,110,103
-,32,98,101,101,110,13,10,60,104,101,97,100,62,13,10,60,32,38,113,117,111,116,59,
-84,104,101,32,99,111,109,112,105,108,97,116,105,111,110,104,101,32,104,97,100,32
-,98,101,101,110,112,114,111,100,117,99,101,100,32,98,121,112,104,105,108,111,115
-,111,112,104,101,114,99,111,110,115,116,114,117,99,116,101,100,105,110,116,101,
-110,100,101,100,32,116,111,97,109,111,110,103,32,111,116,104,101,114,99,111,109,
-112,97,114,101,100,32,116,111,116,111,32,115,97,121,32,116,104,97,116,69,110,103
-,105,110,101,101,114,105,110,103,97,32,100,105,102,102,101,114,101,110,116,114,
-101,102,101,114,114,101,100,32,116,111,100,105,102,102,101,114,101,110,99,101,
-115,98,101,108,105,101,102,32,116,104,97,116,112,104,111,116,111,103,114,97,112,
-104,115,105,100,101,110,116,105,102,121,105,110,103,72,105,115,116,111,114,121,
-32,111,102,32,82,101,112,117,98,108,105,99,32,111,102,110,101,99,101,115,115,97,
-114,105,108,121,112,114,111,98,97,98,105,108,105,116,121,116,101,99,104,110,105,
-99,97,108,108,121,108,101,97,118,105,110,103,32,116,104,101,115,112,101,99,116,
-97,99,117,108,97,114,102,114,97,99,116,105,111,110,32,111,102,101,108,101,99,116
-,114,105,99,105,116,121,104,101,97,100,32,111,102,32,116,104,101,114,101,115,116
-,97,117,114,97,110,116,115,112,97,114,116,110,101,114,115,104,105,112,101,109,
-112,104,97,115,105,115,32,111,110,109,111,115,116,32,114,101,99,101,110,116,115,
-104,97,114,101,32,119,105,116,104,32,115,97,121,105,110,103,32,116,104,97,116,
-102,105,108,108,101,100,32,119,105,116,104,100,101,115,105,103,110,101,100,32,
-116,111,105,116,32,105,115,32,111,102,116,101,110,34,62,60,47,105,102,114,97,109
-,101,62,97,115,32,102,111,108,108,111,119,115,58,109,101,114,103,101,100,32,119,
-105,116,104,116,104,114,111,117,103,104,32,116,104,101,99,111,109,109,101,114,99
-,105,97,108,32,112,111,105,110,116,101,100,32,111,117,116,111,112,112,111,114,
-116,117,110,105,116,121,118,105,101,119,32,111,102,32,116,104,101,114,101,113,
-117,105,114,101,109,101,110,116,100,105,118,105,115,105,111,110,32,111,102,112,
-114,111,103,114,97,109,109,105,110,103,104,101,32,114,101,99,101,105,118,101,100
-,115,101,116,73,110,116,101,114,118,97,108,34,62,60,47,115,112,97,110,62,60,47,
-105,110,32,78,101,119,32,89,111,114,107,97,100,100,105,116,105,111,110,97,108,32
-,99,111,109,112,114,101,115,115,105,111,110,10,10,60,100,105,118,32,105,100,61,
-34,105,110,99,111,114,112,111,114,97,116,101,59,60,47,115,99,114,105,112,116,62,
-60,97,116,116,97,99,104,69,118,101,110,116,98,101,99,97,109,101,32,116,104,101,
-32,34,32,116,97,114,103,101,116,61,34,95,99,97,114,114,105,101,100,32,111,117,
-116,83,111,109,101,32,111,102,32,116,104,101,115,99,105,101,110,99,101,32,97,110
-,100,116,104,101,32,116,105,109,101,32,111,102,67,111,110,116,97,105,110,101,114
-,34,62,109,97,105,110,116,97,105,110,105,110,103,67,104,114,105,115,116,111,112,
-104,101,114,77,117,99,104,32,111,102,32,116,104,101,119,114,105,116,105,110,103,
-115,32,111,102,34,32,104,101,105,103,104,116,61,34,50,115,105,122,101,32,111,102
-,32,116,104,101,118,101,114,115,105,111,110,32,111,102,32,109,105,120,116,117,
-114,101,32,111,102,32,98,101,116,119,101,101,110,32,116,104,101,69,120,97,109,
-112,108,101,115,32,111,102,101,100,117,99,97,116,105,111,110,97,108,99,111,109,
-112,101,116,105,116,105,118,101,32,111,110,115,117,98,109,105,116,61,34,100,105,
-114,101,99,116,111,114,32,111,102,100,105,115,116,105,110,99,116,105,118,101,47,
-68,84,68,32,88,72,84,77,76,32,114,101,108,97,116,105,110,103,32,116,111,116,101,
-110,100,101,110,99,121,32,116,111,112,114,111,118,105,110,99,101,32,111,102,119,
-104,105,99,104,32,119,111,117,108,100,100,101,115,112,105,116,101,32,116,104,101
-,115,99,105,101,110,116,105,102,105,99,32,108,101,103,105,115,108,97,116,117,114
-,101,46,105,110,110,101,114,72,84,77,76,32,97,108,108,101,103,97,116,105,111,110
-,115,65,103,114,105,99,117,108,116,117,114,101,119,97,115,32,117,115,101,100,32,
-105,110,97,112,112,114,111,97,99,104,32,116,111,105,110,116,101,108,108,105,103,
-101,110,116,121,101,97,114,115,32,108,97,116,101,114,44,115,97,110,115,45,115,
-101,114,105,102,100,101,116,101,114,109,105,110,105,110,103,80,101,114,102,111,
-114,109,97,110,99,101,97,112,112,101,97,114,97,110,99,101,115,44,32,119,104,105,
-99,104,32,105,115,32,102,111,117,110,100,97,116,105,111,110,115,97,98,98,114,101
-,118,105,97,116,101,100,104,105,103,104,101,114,32,116,104,97,110,115,32,102,114
-,111,109,32,116,104,101,32,105,110,100,105,118,105,100,117,97,108,32,99,111,109,
-112,111,115,101,100,32,111,102,115,117,112,112,111,115,101,100,32,116,111,99,108
-,97,105,109,115,32,116,104,97,116,97,116,116,114,105,98,117,116,105,111,110,102,
-111,110,116,45,115,105,122,101,58,49,101,108,101,109,101,110,116,115,32,111,102,
-72,105,115,116,111,114,105,99,97,108,32,104,105,115,32,98,114,111,116,104,101,
-114,97,116,32,116,104,101,32,116,105,109,101,97,110,110,105,118,101,114,115,97,
-114,121,103,111,118,101,114,110,101,100,32,98,121,114,101,108,97,116,101,100,32,
-116,111,32,117,108,116,105,109,97,116,101,108,121,32,105,110,110,111,118,97,116,
-105,111,110,115,105,116,32,105,115,32,115,116,105,108,108,99,97,110,32,111,110,
-108,121,32,98,101,100,101,102,105,110,105,116,105,111,110,115,116,111,71,77,84,
-83,116,114,105,110,103,65,32,110,117,109,98,101,114,32,111,102,105,109,103,32,99
-,108,97,115,115,61,34,69,118,101,110,116,117,97,108,108,121,44,119,97,115,32,99,
-104,97,110,103,101,100,111,99,99,117,114,114,101,100,32,105,110,110,101,105,103,
-104,98,111,114,105,110,103,100,105,115,116,105,110,103,117,105,115,104,119,104,
-101,110,32,104,101,32,119,97,115,105,110,116,114,111,100,117,99,105,110,103,116,
-101,114,114,101,115,116,114,105,97,108,77,97,110,121,32,111,102,32,116,104,101,
-97,114,103,117,101,115,32,116,104,97,116,97,110,32,65,109,101,114,105,99,97,110,
-99,111,110,113,117,101,115,116,32,111,102,119,105,100,101,115,112,114,101,97,100
-,32,119,101,114,101,32,107,105,108,108,101,100,115,99,114,101,101,110,32,97,110,
-100,32,73,110,32,111,114,100,101,114,32,116,111,101,120,112,101,99,116,101,100,
-32,116,111,100,101,115,99,101,110,100,97,110,116,115,97,114,101,32,108,111,99,97
-,116,101,100,108,101,103,105,115,108,97,116,105,118,101,103,101,110,101,114,97,
-116,105,111,110,115,32,98,97,99,107,103,114,111,117,110,100,109,111,115,116,32,
-112,101,111,112,108,101,121,101,97,114,115,32,97,102,116,101,114,116,104,101,114
-,101,32,105,115,32,110,111,116,104,101,32,104,105,103,104,101,115,116,102,114,
-101,113,117,101,110,116,108,121,32,116,104,101,121,32,100,111,32,110,111,116,97,
-114,103,117,101,100,32,116,104,97,116,115,104,111,119,101,100,32,116,104,97,116,
-112,114,101,100,111,109,105,110,97,110,116,116,104,101,111,108,111,103,105,99,97
-,108,98,121,32,116,104,101,32,116,105,109,101,99,111,110,115,105,100,101,114,105
-,110,103,115,104,111,114,116,45,108,105,118,101,100,60,47,115,112,97,110,62,60,
-47,97,62,99,97,110,32,98,101,32,117,115,101,100,118,101,114,121,32,108,105,116,
-116,108,101,111,110,101,32,111,102,32,116,104,101,32,104,97,100,32,97,108,114,
-101,97,100,121,105,110,116,101,114,112,114,101,116,101,100,99,111,109,109,117,
-110,105,99,97,116,101,102,101,97,116,117,114,101,115,32,111,102,103,111,118,101,
-114,110,109,101,110,116,44,60,47,110,111,115,99,114,105,112,116,62,101,110,116,
-101,114,101,100,32,116,104,101,34,32,104,101,105,103,104,116,61,34,51,73,110,100
-,101,112,101,110,100,101,110,116,112,111,112,117,108,97,116,105,111,110,115,108,
-97,114,103,101,45,115,99,97,108,101,46,32,65,108,116,104,111,117,103,104,32,117,
-115,101,100,32,105,110,32,116,104,101,100,101,115,116,114,117,99,116,105,111,110
-,112,111,115,115,105,98,105,108,105,116,121,115,116,97,114,116,105,110,103,32,
-105,110,116,119,111,32,111,114,32,109,111,114,101,101,120,112,114,101,115,115,
-105,111,110,115,115,117,98,111,114,100,105,110,97,116,101,108,97,114,103,101,114
-,32,116,104,97,110,104,105,115,116,111,114,121,32,97,110,100,60,47,111,112,116,
-105,111,110,62,13,10,67,111,110,116,105,110,101,110,116,97,108,101,108,105,109,
-105,110,97,116,105,110,103,119,105,108,108,32,110,111,116,32,98,101,112,114,97,
-99,116,105,99,101,32,111,102,105,110,32,102,114,111,110,116,32,111,102,115,105,
-116,101,32,111,102,32,116,104,101,101,110,115,117,114,101,32,116,104,97,116,116,
-111,32,99,114,101,97,116,101,32,97,109,105,115,115,105,115,115,105,112,112,105,
-112,111,116,101,110,116,105,97,108,108,121,111,117,116,115,116,97,110,100,105,
-110,103,98,101,116,116,101,114,32,116,104,97,110,119,104,97,116,32,105,115,32,
-110,111,119,115,105,116,117,97,116,101,100,32,105,110,109,101,116,97,32,110,97,
-109,101,61,34,84,114,97,100,105,116,105,111,110,97,108,115,117,103,103,101,115,
-116,105,111,110,115,84,114,97,110,115,108,97,116,105,111,110,116,104,101,32,102,
-111,114,109,32,111,102,97,116,109,111,115,112,104,101,114,105,99,105,100,101,111
-,108,111,103,105,99,97,108,101,110,116,101,114,112,114,105,115,101,115,99,97,108
-,99,117,108,97,116,105,110,103,101,97,115,116,32,111,102,32,116,104,101,114,101,
-109,110,97,110,116,115,32,111,102,112,108,117,103,105,110,115,112,97,103,101,47,
-105,110,100,101,120,46,112,104,112,63,114,101,109,97,105,110,101,100,32,105,110,
-116,114,97,110,115,102,111,114,109,101,100,72,101,32,119,97,115,32,97,108,115,
-111,119,97,115,32,97,108,114,101,97,100,121,115,116,97,116,105,115,116,105,99,97
-,108,105,110,32,102,97,118,111,114,32,111,102,77,105,110,105,115,116,114,121,32,
-111,102,109,111,118,101,109,101,110,116,32,111,102,102,111,114,109,117,108,97,
-116,105,111,110,105,115,32,114,101,113,117,105,114,101,100,60,108,105,110,107,32
-,114,101,108,61,34,84,104,105,115,32,105,115,32,116,104,101,32,60,97,32,104,114,
-101,102,61,34,47,112,111,112,117,108,97,114,105,122,101,100,105,110,118,111,108,
-118,101,100,32,105,110,97,114,101,32,117,115,101,100,32,116,111,97,110,100,32,
-115,101,118,101,114,97,108,109,97,100,101,32,98,121,32,116,104,101,115,101,101,
-109,115,32,116,111,32,98,101,108,105,107,101,108,121,32,116,104,97,116,80,97,108
-,101,115,116,105,110,105,97,110,110,97,109,101,100,32,97,102,116,101,114,105,116
-,32,104,97,100,32,98,101,101,110,109,111,115,116,32,99,111,109,109,111,110,116,
-111,32,114,101,102,101,114,32,116,111,98,117,116,32,116,104,105,115,32,105,115,
-99,111,110,115,101,99,117,116,105,118,101,116,101,109,112,111,114,97,114,105,108
-,121,73,110,32,103,101,110,101,114,97,108,44,99,111,110,118,101,110,116,105,111,
-110,115,116,97,107,101,115,32,112,108,97,99,101,115,117,98,100,105,118,105,115,
-105,111,110,116,101,114,114,105,116,111,114,105,97,108,111,112,101,114,97,116,
-105,111,110,97,108,112,101,114,109,97,110,101,110,116,108,121,119,97,115,32,108,
-97,114,103,101,108,121,111,117,116,98,114,101,97,107,32,111,102,105,110,32,116,
-104,101,32,112,97,115,116,102,111,108,108,111,119,105,110,103,32,97,32,120,109,
-108,110,115,58,111,103,61,34,62,60,97,32,99,108,97,115,115,61,34,99,108,97,115,
-115,61,34,116,101,120,116,67,111,110,118,101,114,115,105,111,110,32,109,97,121,
-32,98,101,32,117,115,101,100,109,97,110,117,102,97,99,116,117,114,101,97,102,116
-,101,114,32,98,101,105,110,103,99,108,101,97,114,102,105,120,34,62,10,113,117,
-101,115,116,105,111,110,32,111,102,119,97,115,32,101,108,101,99,116,101,100,116,
-111,32,98,101,99,111,109,101,32,97,98,101,99,97,117,115,101,32,111,102,32,115,
-111,109,101,32,112,101,111,112,108,101,105,110,115,112,105,114,101,100,32,98,121
-,115,117,99,99,101,115,115,102,117,108,32,97,32,116,105,109,101,32,119,104,101,
-110,109,111,114,101,32,99,111,109,109,111,110,97,109,111,110,103,115,116,32,116,
-104,101,97,110,32,111,102,102,105,99,105,97,108,119,105,100,116,104,58,49,48,48,
-37,59,116,101,99,104,110,111,108,111,103,121,44,119,97,115,32,97,100,111,112,116
-,101,100,116,111,32,107,101,101,112,32,116,104,101,115,101,116,116,108,101,109,
-101,110,116,115,108,105,118,101,32,98,105,114,116,104,115,105,110,100,101,120,46
-,104,116,109,108,34,67,111,110,110,101,99,116,105,99,117,116,97,115,115,105,103,
-110,101,100,32,116,111,38,97,109,112,59,116,105,109,101,115,59,97,99,99,111,117,
-110,116,32,102,111,114,97,108,105,103,110,61,114,105,103,104,116,116,104,101,32,
-99,111,109,112,97,110,121,97,108,119,97,121,115,32,98,101,101,110,114,101,116,
-117,114,110,101,100,32,116,111,105,110,118,111,108,118,101,109,101,110,116,66,
-101,99,97,117,115,101,32,116,104,101,116,104,105,115,32,112,101,114,105,111,100,
-34,32,110,97,109,101,61,34,113,34,32,99,111,110,102,105,110,101,100,32,116,111,
-97,32,114,101,115,117,108,116,32,111,102,118,97,108,117,101,61,34,34,32,47,62,
-105,115,32,97,99,116,117,97,108,108,121,69,110,118,105,114,111,110,109,101,110,
-116,13,10,60,47,104,101,97,100,62,13,10,67,111,110,118,101,114,115,101,108,121,
-44,62,10,60,100,105,118,32,105,100,61,34,48,34,32,119,105,100,116,104,61,34,49,
-105,115,32,112,114,111,98,97,98,108,121,104,97,118,101,32,98,101,99,111,109,101,
-99,111,110,116,114,111,108,108,105,110,103,116,104,101,32,112,114,111,98,108,101
-,109,99,105,116,105,122,101,110,115,32,111,102,112,111,108,105,116,105,99,105,97
-,110,115,114,101,97,99,104,101,100,32,116,104,101,97,115,32,101,97,114,108,121,
-32,97,115,58,110,111,110,101,59,32,111,118,101,114,60,116,97,98,108,101,32,99,
-101,108,108,118,97,108,105,100,105,116,121,32,111,102,100,105,114,101,99,116,108
-,121,32,116,111,111,110,109,111,117,115,101,100,111,119,110,119,104,101,114,101,
-32,105,116,32,105,115,119,104,101,110,32,105,116,32,119,97,115,109,101,109,98,
-101,114,115,32,111,102,32,114,101,108,97,116,105,111,110,32,116,111,97,99,99,111
-,109,109,111,100,97,116,101,97,108,111,110,103,32,119,105,116,104,32,73,110,32,
-116,104,101,32,108,97,116,101,116,104,101,32,69,110,103,108,105,115,104,100,101,
-108,105,99,105,111,117,115,34,62,116,104,105,115,32,105,115,32,110,111,116,116,
-104,101,32,112,114,101,115,101,110,116,105,102,32,116,104,101,121,32,97,114,101,
-97,110,100,32,102,105,110,97,108,108,121,97,32,109,97,116,116,101,114,32,111,102
-,13,10,9,60,47,100,105,118,62,13,10,13,10,60,47,115,99,114,105,112,116,62,102,97
-,115,116,101,114,32,116,104,97,110,109,97,106,111,114,105,116,121,32,111,102,97,
-102,116,101,114,32,119,104,105,99,104,99,111,109,112,97,114,97,116,105,118,101,
-116,111,32,109,97,105,110,116,97,105,110,105,109,112,114,111,118,101,32,116,104,
-101,97,119,97,114,100,101,100,32,116,104,101,101,114,34,32,99,108,97,115,115,61,
-34,102,114,97,109,101,98,111,114,100,101,114,114,101,115,116,111,114,97,116,105,
-111,110,105,110,32,116,104,101,32,115,97,109,101,97,110,97,108,121,115,105,115,
-32,111,102,116,104,101,105,114,32,102,105,114,115,116,68,117,114,105,110,103,32,
-116,104,101,32,99,111,110,116,105,110,101,110,116,97,108,115,101,113,117,101,110
-,99,101,32,111,102,102,117,110,99,116,105,111,110,40,41,123,102,111,110,116,45,
-115,105,122,101,58,32,119,111,114,107,32,111,110,32,116,104,101,60,47,115,99,114
-,105,112,116,62,10,60,98,101,103,105,110,115,32,119,105,116,104,106,97,118,97,
-115,99,114,105,112,116,58,99,111,110,115,116,105,116,117,101,110,116,119,97,115,
-32,102,111,117,110,100,101,100,101,113,117,105,108,105,98,114,105,117,109,97,115
-,115,117,109,101,32,116,104,97,116,105,115,32,103,105,118,101,110,32,98,121,110,
-101,101,100,115,32,116,111,32,98,101,99,111,111,114,100,105,110,97,116,101,115,
-116,104,101,32,118,97,114,105,111,117,115,97,114,101,32,112,97,114,116,32,111,
-102,111,110,108,121,32,105,110,32,116,104,101,115,101,99,116,105,111,110,115,32,
-111,102,105,115,32,97,32,99,111,109,109,111,110,116,104,101,111,114,105,101,115,
-32,111,102,100,105,115,99,111,118,101,114,105,101,115,97,115,115,111,99,105,97,
-116,105,111,110,101,100,103,101,32,111,102,32,116,104,101,115,116,114,101,110,
-103,116,104,32,111,102,112,111,115,105,116,105,111,110,32,105,110,112,114,101,
-115,101,110,116,45,100,97,121,117,110,105,118,101,114,115,97,108,108,121,116,111
-,32,102,111,114,109,32,116,104,101,98,117,116,32,105,110,115,116,101,97,100,99,
-111,114,112,111,114,97,116,105,111,110,97,116,116,97,99,104,101,100,32,116,111,
-105,115,32,99,111,109,109,111,110,108,121,114,101,97,115,111,110,115,32,102,111,
-114,32,38,113,117,111,116,59,116,104,101,32,99,97,110,32,98,101,32,109,97,100,
-101,119,97,115,32,97,98,108,101,32,116,111,119,104,105,99,104,32,109,101,97,110,
-115,98,117,116,32,100,105,100,32,110,111,116,111,110,77,111,117,115,101,79,118,
-101,114,97,115,32,112,111,115,115,105,98,108,101,111,112,101,114,97,116,101,100,
-32,98,121,99,111,109,105,110,103,32,102,114,111,109,116,104,101,32,112,114,105,
-109,97,114,121,97,100,100,105,116,105,111,110,32,111,102,102,111,114,32,115,101,
-118,101,114,97,108,116,114,97,110,115,102,101,114,114,101,100,97,32,112,101,114,
-105,111,100,32,111,102,97,114,101,32,97,98,108,101,32,116,111,104,111,119,101,
-118,101,114,44,32,105,116,115,104,111,117,108,100,32,104,97,118,101,109,117,99,
-104,32,108,97,114,103,101,114,10,9,60,47,115,99,114,105,112,116,62,97,100,111,
-112,116,101,100,32,116,104,101,112,114,111,112,101,114,116,121,32,111,102,100,
-105,114,101,99,116,101,100,32,98,121,101,102,102,101,99,116,105,118,101,108,121,
-119,97,115,32,98,114,111,117,103,104,116,99,104,105,108,100,114,101,110,32,111,
-102,80,114,111,103,114,97,109,109,105,110,103,108,111,110,103,101,114,32,116,104
-,97,110,109,97,110,117,115,99,114,105,112,116,115,119,97,114,32,97,103,97,105,
-110,115,116,98,121,32,109,101,97,110,115,32,111,102,97,110,100,32,109,111,115,
-116,32,111,102,115,105,109,105,108,97,114,32,116,111,32,112,114,111,112,114,105,
-101,116,97,114,121,111,114,105,103,105,110,97,116,105,110,103,112,114,101,115,
-116,105,103,105,111,117,115,103,114,97,109,109,97,116,105,99,97,108,101,120,112,
-101,114,105,101,110,99,101,46,116,111,32,109,97,107,101,32,116,104,101,73,116,32
-,119,97,115,32,97,108,115,111,105,115,32,102,111,117,110,100,32,105,110,99,111,
-109,112,101,116,105,116,111,114,115,105,110,32,116,104,101,32,85,46,83,46,114,
-101,112,108,97,99,101,32,116,104,101,98,114,111,117,103,104,116,32,116,104,101,
-99,97,108,99,117,108,97,116,105,111,110,102,97,108,108,32,111,102,32,116,104,101
-,116,104,101,32,103,101,110,101,114,97,108,112,114,97,99,116,105,99,97,108,108,
-121,105,110,32,104,111,110,111,114,32,111,102,114,101,108,101,97,115,101,100,32,
-105,110,114,101,115,105,100,101,110,116,105,97,108,97,110,100,32,115,111,109,101
-,32,111,102,107,105,110,103,32,111,102,32,116,104,101,114,101,97,99,116,105,111,
-110,32,116,111,49,115,116,32,69,97,114,108,32,111,102,99,117,108,116,117,114,101
-,32,97,110,100,112,114,105,110,99,105,112,97,108,108,121,60,47,116,105,116,108,
-101,62,10,32,32,116,104,101,121,32,99,97,110,32,98,101,98,97,99,107,32,116,111,
-32,116,104,101,115,111,109,101,32,111,102,32,104,105,115,101,120,112,111,115,117
-,114,101,32,116,111,97,114,101,32,115,105,109,105,108,97,114,102,111,114,109,32,
-111,102,32,116,104,101,97,100,100,70,97,118,111,114,105,116,101,99,105,116,105,
-122,101,110,115,104,105,112,112,97,114,116,32,105,110,32,116,104,101,112,101,111
-,112,108,101,32,119,105,116,104,105,110,32,112,114,97,99,116,105,99,101,116,111,
-32,99,111,110,116,105,110,117,101,38,97,109,112,59,109,105,110,117,115,59,97,112
-,112,114,111,118,101,100,32,98,121,32,116,104,101,32,102,105,114,115,116,32,97,
-108,108,111,119,101,100,32,116,104,101,97,110,100,32,102,111,114,32,116,104,101,
-102,117,110,99,116,105,111,110,105,110,103,112,108,97,121,105,110,103,32,116,104
-,101,115,111,108,117,116,105,111,110,32,116,111,104,101,105,103,104,116,61,34,48
-,34,32,105,110,32,104,105,115,32,98,111,111,107,109,111,114,101,32,116,104,97,
-110,32,97,102,111,108,108,111,119,115,32,116,104,101,99,114,101,97,116,101,100,
-32,116,104,101,112,114,101,115,101,110,99,101,32,105,110,38,110,98,115,112,59,60
-,47,116,100,62,110,97,116,105,111,110,97,108,105,115,116,116,104,101,32,105,100,
-101,97,32,111,102,97,32,99,104,97,114,97,99,116,101,114,119,101,114,101,32,102,
-111,114,99,101,100,32,99,108,97,115,115,61,34,98,116,110,100,97,121,115,32,111,
-102,32,116,104,101,102,101,97,116,117,114,101,100,32,105,110,115,104,111,119,105
-,110,103,32,116,104,101,105,110,116,101,114,101,115,116,32,105,110,105,110,32,
-112,108,97,99,101,32,111,102,116,117,114,110,32,111,102,32,116,104,101,116,104,
-101,32,104,101,97,100,32,111,102,76,111,114,100,32,111,102,32,116,104,101,112,
-111,108,105,116,105,99,97,108,108,121,104,97,115,32,105,116,115,32,111,119,110,
-69,100,117,99,97,116,105,111,110,97,108,97,112,112,114,111,118,97,108,32,111,102
-,115,111,109,101,32,111,102,32,116,104,101,101,97,99,104,32,111,116,104,101,114,
-44,98,101,104,97,118,105,111,114,32,111,102,97,110,100,32,98,101,99,97,117,115,
-101,97,110,100,32,97,110,111,116,104,101,114,97,112,112,101,97,114,101,100,32,
-111,110,114,101,99,111,114,100,101,100,32,105,110,98,108,97,99,107,38,113,117,
-111,116,59,109,97,121,32,105,110,99,108,117,100,101,116,104,101,32,119,111,114,
-108,100,39,115,99,97,110,32,108,101,97,100,32,116,111,114,101,102,101,114,115,32
-,116,111,32,97,98,111,114,100,101,114,61,34,48,34,32,103,111,118,101,114,110,109
-,101,110,116,32,119,105,110,110,105,110,103,32,116,104,101,114,101,115,117,108,
-116,101,100,32,105,110,32,119,104,105,108,101,32,116,104,101,32,87,97,115,104,
-105,110,103,116,111,110,44,116,104,101,32,115,117,98,106,101,99,116,99,105,116,
-121,32,105,110,32,116,104,101,62,60,47,100,105,118,62,13,10,9,9,114,101,102,108,
-101,99,116,32,116,104,101,116,111,32,99,111,109,112,108,101,116,101,98,101,99,97
-,109,101,32,109,111,114,101,114,97,100,105,111,97,99,116,105,118,101,114,101,106
-,101,99,116,101,100,32,98,121,119,105,116,104,111,117,116,32,97,110,121,104,105,
-115,32,102,97,116,104,101,114,44,119,104,105,99,104,32,99,111,117,108,100,99,111
-,112,121,32,111,102,32,116,104,101,116,111,32,105,110,100,105,99,97,116,101,97,
-32,112,111,108,105,116,105,99,97,108,97,99,99,111,117,110,116,115,32,111,102,99,
-111,110,115,116,105,116,117,116,101,115,119,111,114,107,101,100,32,119,105,116,
-104,101,114,60,47,97,62,60,47,108,105,62,111,102,32,104,105,115,32,108,105,102,
-101,97,99,99,111,109,112,97,110,105,101,100,99,108,105,101,110,116,87,105,100,
-116,104,112,114,101,118,101,110,116,32,116,104,101,76,101,103,105,115,108,97,116
-,105,118,101,100,105,102,102,101,114,101,110,116,108,121,116,111,103,101,116,104
-,101,114,32,105,110,104,97,115,32,115,101,118,101,114,97,108,102,111,114,32,97,
-110,111,116,104,101,114,116,101,120,116,32,111,102,32,116,104,101,102,111,117,
-110,100,101,100,32,116,104,101,101,32,119,105,116,104,32,116,104,101,32,105,115,
-32,117,115,101,100,32,102,111,114,99,104,97,110,103,101,100,32,116,104,101,117,
-115,117,97,108,108,121,32,116,104,101,112,108,97,99,101,32,119,104,101,114,101,
-119,104,101,114,101,97,115,32,116,104,101,62,32,60,97,32,104,114,101,102,61,34,
-34,62,60,97,32,104,114,101,102,61,34,116,104,101,109,115,101,108,118,101,115,44,
-97,108,116,104,111,117,103,104,32,104,101,116,104,97,116,32,99,97,110,32,98,101,
-116,114,97,100,105,116,105,111,110,97,108,114,111,108,101,32,111,102,32,116,104,
-101,97,115,32,97,32,114,101,115,117,108,116,114,101,109,111,118,101,67,104,105,
-108,100,100,101,115,105,103,110,101,100,32,98,121,119,101,115,116,32,111,102,32,
-116,104,101,83,111,109,101,32,112,101,111,112,108,101,112,114,111,100,117,99,116
-,105,111,110,44,115,105,100,101,32,111,102,32,116,104,101,110,101,119,115,108,
-101,116,116,101,114,115,117,115,101,100,32,98,121,32,116,104,101,100,111,119,110
-,32,116,111,32,116,104,101,97,99,99,101,112,116,101,100,32,98,121,108,105,118,
-101,32,105,110,32,116,104,101,97,116,116,101,109,112,116,115,32,116,111,111,117,
-116,115,105,100,101,32,116,104,101,102,114,101,113,117,101,110,99,105,101,115,72
-,111,119,101,118,101,114,44,32,105,110,112,114,111,103,114,97,109,109,101,114,
-115,97,116,32,108,101,97,115,116,32,105,110,97,112,112,114,111,120,105,109,97,
-116,101,97,108,116,104,111,117,103,104,32,105,116,119,97,115,32,112,97,114,116,
-32,111,102,97,110,100,32,118,97,114,105,111,117,115,71,111,118,101,114,110,111,
-114,32,111,102,116,104,101,32,97,114,116,105,99,108,101,116,117,114,110,101,100,
-32,105,110,116,111,62,60,97,32,104,114,101,102,61,34,47,116,104,101,32,101,99,
-111,110,111,109,121,105,115,32,116,104,101,32,109,111,115,116,109,111,115,116,32
-,119,105,100,101,108,121,119,111,117,108,100,32,108,97,116,101,114,97,110,100,32
-,112,101,114,104,97,112,115,114,105,115,101,32,116,111,32,116,104,101,111,99,99,
-117,114,115,32,119,104,101,110,117,110,100,101,114,32,119,104,105,99,104,99,111,
-110,100,105,116,105,111,110,115,46,116,104,101,32,119,101,115,116,101,114,110,
-116,104,101,111,114,121,32,116,104,97,116,105,115,32,112,114,111,100,117,99,101,
-100,116,104,101,32,99,105,116,121,32,111,102,105,110,32,119,104,105,99,104,32,
-104,101,115,101,101,110,32,105,110,32,116,104,101,116,104,101,32,99,101,110,116,
-114,97,108,98,117,105,108,100,105,110,103,32,111,102,109,97,110,121,32,111,102,
-32,104,105,115,97,114,101,97,32,111,102,32,116,104,101,105,115,32,116,104,101,32
-,111,110,108,121,109,111,115,116,32,111,102,32,116,104,101,109,97,110,121,32,111
-,102,32,116,104,101,116,104,101,32,87,101,115,116,101,114,110,84,104,101,114,101
-,32,105,115,32,110,111,101,120,116,101,110,100,101,100,32,116,111,83,116,97,116,
-105,115,116,105,99,97,108,99,111,108,115,112,97,110,61,50,32,124,115,104,111,114
-,116,32,115,116,111,114,121,112,111,115,115,105,98,108,101,32,116,111,116,111,
-112,111,108,111,103,105,99,97,108,99,114,105,116,105,99,97,108,32,111,102,114,
-101,112,111,114,116,101,100,32,116,111,97,32,67,104,114,105,115,116,105,97,110,
-100,101,99,105,115,105,111,110,32,116,111,105,115,32,101,113,117,97,108,32,116,
-111,112,114,111,98,108,101,109,115,32,111,102,84,104,105,115,32,99,97,110,32,98,
-101,109,101,114,99,104,97,110,100,105,115,101,102,111,114,32,109,111,115,116,32,
-111,102,110,111,32,101,118,105,100,101,110,99,101,101,100,105,116,105,111,110,
-115,32,111,102,101,108,101,109,101,110,116,115,32,105,110,38,113,117,111,116,59,
-46,32,84,104,101,99,111,109,47,105,109,97,103,101,115,47,119,104,105,99,104,32,
-109,97,107,101,115,116,104,101,32,112,114,111,99,101,115,115,114,101,109,97,105,
-110,115,32,116,104,101,108,105,116,101,114,97,116,117,114,101,44,105,115,32,97,
-32,109,101,109,98,101,114,116,104,101,32,112,111,112,117,108,97,114,116,104,101,
-32,97,110,99,105,101,110,116,112,114,111,98,108,101,109,115,32,105,110,116,105,
-109,101,32,111,102,32,116,104,101,100,101,102,101,97,116,101,100,32,98,121,98,
-111,100,121,32,111,102,32,116,104,101,97,32,102,101,119,32,121,101,97,114,115,
-109,117,99,104,32,111,102,32,116,104,101,116,104,101,32,119,111,114,107,32,111,
-102,67,97,108,105,102,111,114,110,105,97,44,115,101,114,118,101,100,32,97,115,32
-,97,103,111,118,101,114,110,109,101,110,116,46,99,111,110,99,101,112,116,115,32,
-111,102,109,111,118,101,109,101,110,116,32,105,110,9,9,60,100,105,118,32,105,100
-,61,34,105,116,34,32,118,97,108,117,101,61,34,108,97,110,103,117,97,103,101,32,
-111,102,97,115,32,116,104,101,121,32,97,114,101,112,114,111,100,117,99,101,100,
-32,105,110,105,115,32,116,104,97,116,32,116,104,101,101,120,112,108,97,105,110,
-32,116,104,101,100,105,118,62,60,47,100,105,118,62,10,72,111,119,101,118,101,114
-,32,116,104,101,108,101,97,100,32,116,111,32,116,104,101,9,60,97,32,104,114,101,
-102,61,34,47,119,97,115,32,103,114,97,110,116,101,100,112,101,111,112,108,101,32
-,104,97,118,101,99,111,110,116,105,110,117,97,108,108,121,119,97,115,32,115,101,
-101,110,32,97,115,97,110,100,32,114,101,108,97,116,101,100,116,104,101,32,114,
-111,108,101,32,111,102,112,114,111,112,111,115,101,100,32,98,121,111,102,32,116,
-104,101,32,98,101,115,116,101,97,99,104,32,111,116,104,101,114,46,67,111,110,115
-,116,97,110,116,105,110,101,112,101,111,112,108,101,32,102,114,111,109,100,105,
-97,108,101,99,116,115,32,111,102,116,111,32,114,101,118,105,115,105,111,110,119,
-97,115,32,114,101,110,97,109,101,100,97,32,115,111,117,114,99,101,32,111,102,116
-,104,101,32,105,110,105,116,105,97,108,108,97,117,110,99,104,101,100,32,105,110,
-112,114,111,118,105,100,101,32,116,104,101,116,111,32,116,104,101,32,119,101,115
-,116,119,104,101,114,101,32,116,104,101,114,101,97,110,100,32,115,105,109,105,
-108,97,114,98,101,116,119,101,101,110,32,116,119,111,105,115,32,97,108,115,111,
-32,116,104,101,69,110,103,108,105,115,104,32,97,110,100,99,111,110,100,105,116,
-105,111,110,115,44,116,104,97,116,32,105,116,32,119,97,115,101,110,116,105,116,
-108,101,100,32,116,111,116,104,101,109,115,101,108,118,101,115,46,113,117,97,110
-,116,105,116,121,32,111,102,114,97,110,115,112,97,114,101,110,99,121,116,104,101
-,32,115,97,109,101,32,97,115,116,111,32,106,111,105,110,32,116,104,101,99,111,
-117,110,116,114,121,32,97,110,100,116,104,105,115,32,105,115,32,116,104,101,84,
-104,105,115,32,108,101,100,32,116,111,97,32,115,116,97,116,101,109,101,110,116,
-99,111,110,116,114,97,115,116,32,116,111,108,97,115,116,73,110,100,101,120,79,
-102,116,104,114,111,117,103,104,32,104,105,115,105,115,32,100,101,115,105,103,
-110,101,100,116,104,101,32,116,101,114,109,32,105,115,105,115,32,112,114,111,118
-,105,100,101,100,112,114,111,116,101,99,116,32,116,104,101,110,103,60,47,97,62,
-60,47,108,105,62,84,104,101,32,99,117,114,114,101,110,116,116,104,101,32,115,105
-,116,101,32,111,102,115,117,98,115,116,97,110,116,105,97,108,101,120,112,101,114
-,105,101,110,99,101,44,105,110,32,116,104,101,32,87,101,115,116,116,104,101,121,
-32,115,104,111,117,108,100,115,108,111,118,101,110,196,141,105,110,97,99,111,109
-,101,110,116,97,114,105,111,115,117,110,105,118,101,114,115,105,100,97,100,99,
-111,110,100,105,99,105,111,110,101,115,97,99,116,105,118,105,100,97,100,101,115,
-101,120,112,101,114,105,101,110,99,105,97,116,101,99,110,111,108,111,103,195,173
-,97,112,114,111,100,117,99,99,105,195,179,110,112,117,110,116,117,97,99,105,195,
-179,110,97,112,108,105,99,97,99,105,195,179,110,99,111,110,116,114,97,115,101,
-195,177,97,99,97,116,101,103,111,114,195,173,97,115,114,101,103,105,115,116,114,
-97,114,115,101,112,114,111,102,101,115,105,111,110,97,108,116,114,97,116,97,109,
-105,101,110,116,111,114,101,103,195,173,115,116,114,97,116,101,115,101,99,114,
-101,116,97,114,195,173,97,112,114,105,110,99,105,112,97,108,101,115,112,114,111,
-116,101,99,99,105,195,179,110,105,109,112,111,114,116,97,110,116,101,115,105,109
-,112,111,114,116,97,110,99,105,97,112,111,115,105,98,105,108,105,100,97,100,105,
-110,116,101,114,101,115,97,110,116,101,99,114,101,99,105,109,105,101,110,116,111
-,110,101,99,101,115,105,100,97,100,101,115,115,117,115,99,114,105,98,105,114,115
-,101,97,115,111,99,105,97,99,105,195,179,110,100,105,115,112,111,110,105,98,108,
-101,115,101,118,97,108,117,97,99,105,195,179,110,101,115,116,117,100,105,97,110,
-116,101,115,114,101,115,112,111,110,115,97,98,108,101,114,101,115,111,108,117,99
-,105,195,179,110,103,117,97,100,97,108,97,106,97,114,97,114,101,103,105,115,116,
-114,97,100,111,115,111,112,111,114,116,117,110,105,100,97,100,99,111,109,101,114
-,99,105,97,108,101,115,102,111,116,111,103,114,97,102,195,173,97,97,117,116,111,
-114,105,100,97,100,101,115,105,110,103,101,110,105,101,114,195,173,97,116,101,
-108,101,118,105,115,105,195,179,110,99,111,109,112,101,116,101,110,99,105,97,111
-,112,101,114,97,99,105,111,110,101,115,101,115,116,97,98,108,101,99,105,100,111,
-115,105,109,112,108,101,109,101,110,116,101,97,99,116,117,97,108,109,101,110,116
-,101,110,97,118,101,103,97,99,105,195,179,110,99,111,110,102,111,114,109,105,100
-,97,100,108,105,110,101,45,104,101,105,103,104,116,58,102,111,110,116,45,102,97,
-109,105,108,121,58,34,32,58,32,34,104,116,116,112,58,47,47,97,112,112,108,105,99
-,97,116,105,111,110,115,108,105,110,107,34,32,104,114,101,102,61,34,115,112,101,
-99,105,102,105,99,97,108,108,121,47,47,60,33,91,67,68,65,84,65,91,10,79,114,103,
-97,110,105,122,97,116,105,111,110,100,105,115,116,114,105,98,117,116,105,111,110
-,48,112,120,59,32,104,101,105,103,104,116,58,114,101,108,97,116,105,111,110,115,
-104,105,112,100,101,118,105,99,101,45,119,105,100,116,104,60,100,105,118,32,99,
-108,97,115,115,61,34,60,108,97,98,101,108,32,102,111,114,61,34,114,101,103,105,
-115,116,114,97,116,105,111,110,60,47,110,111,115,99,114,105,112,116,62,10,47,105
-,110,100,101,120,46,104,116,109,108,34,119,105,110,100,111,119,46,111,112,101,
-110,40,32,33,105,109,112,111,114,116,97,110,116,59,97,112,112,108,105,99,97,116,
-105,111,110,47,105,110,100,101,112,101,110,100,101,110,99,101,47,47,119,119,119,
-46,103,111,111,103,108,101,111,114,103,97,110,105,122,97,116,105,111,110,97,117,
-116,111,99,111,109,112,108,101,116,101,114,101,113,117,105,114,101,109,101,110,
-116,115,99,111,110,115,101,114,118,97,116,105,118,101,60,102,111,114,109,32,110,
-97,109,101,61,34,105,110,116,101,108,108,101,99,116,117,97,108,109,97,114,103,
-105,110,45,108,101,102,116,58,49,56,116,104,32,99,101,110,116,117,114,121,97,110
-,32,105,109,112,111,114,116,97,110,116,105,110,115,116,105,116,117,116,105,111,
-110,115,97,98,98,114,101,118,105,97,116,105,111,110,60,105,109,103,32,99,108,97,
-115,115,61,34,111,114,103,97,110,105,115,97,116,105,111,110,99,105,118,105,108,
-105,122,97,116,105,111,110,49,57,116,104,32,99,101,110,116,117,114,121,97,114,99
-,104,105,116,101,99,116,117,114,101,105,110,99,111,114,112,111,114,97,116,101,
-100,50,48,116,104,32,99,101,110,116,117,114,121,45,99,111,110,116,97,105,110,101
-,114,34,62,109,111,115,116,32,110,111,116,97,98,108,121,47,62,60,47,97,62,60,47,
-100,105,118,62,110,111,116,105,102,105,99,97,116,105,111,110,39,117,110,100,101,
-102,105,110,101,100,39,41,70,117,114,116,104,101,114,109,111,114,101,44,98,101,
-108,105,101,118,101,32,116,104,97,116,105,110,110,101,114,72,84,77,76,32,61,32,
-112,114,105,111,114,32,116,111,32,116,104,101,100,114,97,109,97,116,105,99,97,
-108,108,121,114,101,102,101,114,114,105,110,103,32,116,111,110,101,103,111,116,
-105,97,116,105,111,110,115,104,101,97,100,113,117,97,114,116,101,114,115,83,111,
-117,116,104,32,65,102,114,105,99,97,117,110,115,117,99,99,101,115,115,102,117,
-108,80,101,110,110,115,121,108,118,97,110,105,97,65,115,32,97,32,114,101,115,117
-,108,116,44,60,104,116,109,108,32,108,97,110,103,61,34,38,108,116,59,47,115,117,
-112,38,103,116,59,100,101,97,108,105,110,103,32,119,105,116,104,112,104,105,108,
-97,100,101,108,112,104,105,97,104,105,115,116,111,114,105,99,97,108,108,121,41,
-59,60,47,115,99,114,105,112,116,62,10,112,97,100,100,105,110,103,45,116,111,112,
-58,101,120,112,101,114,105,109,101,110,116,97,108,103,101,116,65,116,116,114,105
-,98,117,116,101,105,110,115,116,114,117,99,116,105,111,110,115,116,101,99,104,
-110,111,108,111,103,105,101,115,112,97,114,116,32,111,102,32,116,104,101,32,61,
-102,117,110,99,116,105,111,110,40,41,123,115,117,98,115,99,114,105,112,116,105,
-111,110,108,46,100,116,100,34,62,13,10,60,104,116,103,101,111,103,114,97,112,104
-,105,99,97,108,67,111,110,115,116,105,116,117,116,105,111,110,39,44,32,102,117,
-110,99,116,105,111,110,40,115,117,112,112,111,114,116,101,100,32,98,121,97,103,
-114,105,99,117,108,116,117,114,97,108,99,111,110,115,116,114,117,99,116,105,111,
-110,112,117,98,108,105,99,97,116,105,111,110,115,102,111,110,116,45,115,105,122,
-101,58,32,49,97,32,118,97,114,105,101,116,121,32,111,102,60,100,105,118,32,115,
-116,121,108,101,61,34,69,110,99,121,99,108,111,112,101,100,105,97,105,102,114,97
-,109,101,32,115,114,99,61,34,100,101,109,111,110,115,116,114,97,116,101,100,97,
-99,99,111,109,112,108,105,115,104,101,100,117,110,105,118,101,114,115,105,116,
-105,101,115,68,101,109,111,103,114,97,112,104,105,99,115,41,59,60,47,115,99,114,
-105,112,116,62,60,100,101,100,105,99,97,116,101,100,32,116,111,107,110,111,119,
-108,101,100,103,101,32,111,102,115,97,116,105,115,102,97,99,116,105,111,110,112,
-97,114,116,105,99,117,108,97,114,108,121,60,47,100,105,118,62,60,47,100,105,118,
-62,69,110,103,108,105,115,104,32,40,85,83,41,97,112,112,101,110,100,67,104,105,
-108,100,40,116,114,97,110,115,109,105,115,115,105,111,110,115,46,32,72,111,119,
-101,118,101,114,44,32,105,110,116,101,108,108,105,103,101,110,99,101,34,32,116,
-97,98,105,110,100,101,120,61,34,102,108,111,97,116,58,114,105,103,104,116,59,67,
-111,109,109,111,110,119,101,97,108,116,104,114,97,110,103,105,110,103,32,102,114
-,111,109,105,110,32,119,104,105,99,104,32,116,104,101,97,116,32,108,101,97,115,
-116,32,111,110,101,114,101,112,114,111,100,117,99,116,105,111,110,101,110,99,121
-,99,108,111,112,101,100,105,97,59,102,111,110,116,45,115,105,122,101,58,49,106,
-117,114,105,115,100,105,99,116,105,111,110,97,116,32,116,104,97,116,32,116,105,
-109,101,34,62,60,97,32,99,108,97,115,115,61,34,73,110,32,97,100,100,105,116,105,
-111,110,44,100,101,115,99,114,105,112,116,105,111,110,43,99,111,110,118,101,114,
-115,97,116,105,111,110,99,111,110,116,97,99,116,32,119,105,116,104,105,115,32,
-103,101,110,101,114,97,108,108,121,114,34,32,99,111,110,116,101,110,116,61,34,
-114,101,112,114,101,115,101,110,116,105,110,103,38,108,116,59,109,97,116,104,38,
-103,116,59,112,114,101,115,101,110,116,97,116,105,111,110,111,99,99,97,115,105,
-111,110,97,108,108,121,60,105,109,103,32,119,105,100,116,104,61,34,110,97,118,
-105,103,97,116,105,111,110,34,62,99,111,109,112,101,110,115,97,116,105,111,110,
-99,104,97,109,112,105,111,110,115,104,105,112,109,101,100,105,97,61,34,97,108,
-108,34,32,118,105,111,108,97,116,105,111,110,32,111,102,114,101,102,101,114,101,
-110,99,101,32,116,111,114,101,116,117,114,110,32,116,114,117,101,59,83,116,114,
-105,99,116,47,47,69,78,34,32,116,114,97,110,115,97,99,116,105,111,110,115,105,
-110,116,101,114,118,101,110,116,105,111,110,118,101,114,105,102,105,99,97,116,
-105,111,110,73,110,102,111,114,109,97,116,105,111,110,32,100,105,102,102,105,99,
-117,108,116,105,101,115,67,104,97,109,112,105,111,110,115,104,105,112,99,97,112,
-97,98,105,108,105,116,105,101,115,60,33,91,101,110,100,105,102,93,45,45,62,125,
-10,60,47,115,99,114,105,112,116,62,10,67,104,114,105,115,116,105,97,110,105,116,
-121,102,111,114,32,101,120,97,109,112,108,101,44,80,114,111,102,101,115,115,105,
-111,110,97,108,114,101,115,116,114,105,99,116,105,111,110,115,115,117,103,103,
-101,115,116,32,116,104,97,116,119,97,115,32,114,101,108,101,97,115,101,100,40,
-115,117,99,104,32,97,115,32,116,104,101,114,101,109,111,118,101,67,108,97,115,
-115,40,117,110,101,109,112,108,111,121,109,101,110,116,116,104,101,32,65,109,101
-,114,105,99,97,110,115,116,114,117,99,116,117,114,101,32,111,102,47,105,110,100,
-101,120,46,104,116,109,108,32,112,117,98,108,105,115,104,101,100,32,105,110,115,
-112,97,110,32,99,108,97,115,115,61,34,34,62,60,97,32,104,114,101,102,61,34,47,
-105,110,116,114,111,100,117,99,116,105,111,110,98,101,108,111,110,103,105,110,
-103,32,116,111,99,108,97,105,109,101,100,32,116,104,97,116,99,111,110,115,101,
-113,117,101,110,99,101,115,60,109,101,116,97,32,110,97,109,101,61,34,71,117,105,
-100,101,32,116,111,32,116,104,101,111,118,101,114,119,104,101,108,109,105,110,
-103,97,103,97,105,110,115,116,32,116,104,101,32,99,111,110,99,101,110,116,114,97
-,116,101,100,44,10,46,110,111,110,116,111,117,99,104,32,111,98,115,101,114,118,
-97,116,105,111,110,115,60,47,97,62,10,60,47,100,105,118,62,10,102,32,40,100,111,
-99,117,109,101,110,116,46,98,111,114,100,101,114,58,32,49,112,120,32,123,102,111
-,110,116,45,115,105,122,101,58,49,116,114,101,97,116,109,101,110,116,32,111,102,
-48,34,32,104,101,105,103,104,116,61,34,49,109,111,100,105,102,105,99,97,116,105,
-111,110,73,110,100,101,112,101,110,100,101,110,99,101,100,105,118,105,100,101,
-100,32,105,110,116,111,103,114,101,97,116,101,114,32,116,104,97,110,97,99,104,
-105,101,118,101,109,101,110,116,115,101,115,116,97,98,108,105,115,104,105,110,
-103,74,97,118,97,83,99,114,105,112,116,34,32,110,101,118,101,114,116,104,101,108
-,101,115,115,115,105,103,110,105,102,105,99,97,110,99,101,66,114,111,97,100,99,
-97,115,116,105,110,103,62,38,110,98,115,112,59,60,47,116,100,62,99,111,110,116,
-97,105,110,101,114,34,62,10,115,117,99,104,32,97,115,32,116,104,101,32,105,110,
-102,108,117,101,110,99,101,32,111,102,97,32,112,97,114,116,105,99,117,108,97,114
-,115,114,99,61,39,104,116,116,112,58,47,47,110,97,118,105,103,97,116,105,111,110
-,34,32,104,97,108,102,32,111,102,32,116,104,101,32,115,117,98,115,116,97,110,116
-,105,97,108,32,38,110,98,115,112,59,60,47,100,105,118,62,97,100,118,97,110,116,
-97,103,101,32,111,102,100,105,115,99,111,118,101,114,121,32,111,102,102,117,110,
-100,97,109,101,110,116,97,108,32,109,101,116,114,111,112,111,108,105,116,97,110,
-116,104,101,32,111,112,112,111,115,105,116,101,34,32,120,109,108,58,108,97,110,
-103,61,34,100,101,108,105,98,101,114,97,116,101,108,121,97,108,105,103,110,61,99
-,101,110,116,101,114,101,118,111,108,117,116,105,111,110,32,111,102,112,114,101,
-115,101,114,118,97,116,105,111,110,105,109,112,114,111,118,101,109,101,110,116,
-115,98,101,103,105,110,110,105,110,103,32,105,110,74,101,115,117,115,32,67,104,
-114,105,115,116,80,117,98,108,105,99,97,116,105,111,110,115,100,105,115,97,103,
-114,101,101,109,101,110,116,116,101,120,116,45,97,108,105,103,110,58,114,44,32,
-102,117,110,99,116,105,111,110,40,41,115,105,109,105,108,97,114,105,116,105,101,
-115,98,111,100,121,62,60,47,104,116,109,108,62,105,115,32,99,117,114,114,101,110
-,116,108,121,97,108,112,104,97,98,101,116,105,99,97,108,105,115,32,115,111,109,
-101,116,105,109,101,115,116,121,112,101,61,34,105,109,97,103,101,47,109,97,110,
-121,32,111,102,32,116,104,101,32,102,108,111,119,58,104,105,100,100,101,110,59,
-97,118,97,105,108,97,98,108,101,32,105,110,100,101,115,99,114,105,98,101,32,116,
-104,101,101,120,105,115,116,101,110,99,101,32,111,102,97,108,108,32,111,118,101,
-114,32,116,104,101,116,104,101,32,73,110,116,101,114,110,101,116,9,60,117,108,32
-,99,108,97,115,115,61,34,105,110,115,116,97,108,108,97,116,105,111,110,110,101,
-105,103,104,98,111,114,104,111,111,100,97,114,109,101,100,32,102,111,114,99,101,
-115,114,101,100,117,99,105,110,103,32,116,104,101,99,111,110,116,105,110,117,101
-,115,32,116,111,78,111,110,101,116,104,101,108,101,115,115,44,116,101,109,112,
-101,114,97,116,117,114,101,115,10,9,9,60,97,32,104,114,101,102,61,34,99,108,111,
-115,101,32,116,111,32,116,104,101,101,120,97,109,112,108,101,115,32,111,102,32,
-105,115,32,97,98,111,117,116,32,116,104,101,40,115,101,101,32,98,101,108,111,119
-,41,46,34,32,105,100,61,34,115,101,97,114,99,104,112,114,111,102,101,115,115,105
-,111,110,97,108,105,115,32,97,118,97,105,108,97,98,108,101,116,104,101,32,111,
-102,102,105,99,105,97,108,9,9,60,47,115,99,114,105,112,116,62,10,10,9,9,60,100,
-105,118,32,105,100,61,34,97,99,99,101,108,101,114,97,116,105,111,110,116,104,114
-,111,117,103,104,32,116,104,101,32,72,97,108,108,32,111,102,32,70,97,109,101,100
-,101,115,99,114,105,112,116,105,111,110,115,116,114,97,110,115,108,97,116,105,
-111,110,115,105,110,116,101,114,102,101,114,101,110,99,101,32,116,121,112,101,61
-,39,116,101,120,116,47,114,101,99,101,110,116,32,121,101,97,114,115,105,110,32,
-116,104,101,32,119,111,114,108,100,118,101,114,121,32,112,111,112,117,108,97,114
-,123,98,97,99,107,103,114,111,117,110,100,58,116,114,97,100,105,116,105,111,110,
-97,108,32,115,111,109,101,32,111,102,32,116,104,101,32,99,111,110,110,101,99,116
-,101,100,32,116,111,101,120,112,108,111,105,116,97,116,105,111,110,101,109,101,
-114,103,101,110,99,101,32,111,102,99,111,110,115,116,105,116,117,116,105,111,110
-,65,32,72,105,115,116,111,114,121,32,111,102,115,105,103,110,105,102,105,99,97,
-110,116,32,109,97,110,117,102,97,99,116,117,114,101,100,101,120,112,101,99,116,
-97,116,105,111,110,115,62,60,110,111,115,99,114,105,112,116,62,60,99,97,110,32,
-98,101,32,102,111,117,110,100,98,101,99,97,117,115,101,32,116,104,101,32,104,97,
-115,32,110,111,116,32,98,101,101,110,110,101,105,103,104,98,111,117,114,105,110,
-103,119,105,116,104,111,117,116,32,116,104,101,32,97,100,100,101,100,32,116,111,
-32,116,104,101,9,60,108,105,32,99,108,97,115,115,61,34,105,110,115,116,114,117,
-109,101,110,116,97,108,83,111,118,105,101,116,32,85,110,105,111,110,97,99,107,
-110,111,119,108,101,100,103,101,100,119,104,105,99,104,32,99,97,110,32,98,101,
-110,97,109,101,32,102,111,114,32,116,104,101,97,116,116,101,110,116,105,111,110,
-32,116,111,97,116,116,101,109,112,116,115,32,116,111,32,100,101,118,101,108,111,
-112,109,101,110,116,115,73,110,32,102,97,99,116,44,32,116,104,101,60,108,105,32,
-99,108,97,115,115,61,34,97,105,109,112,108,105,99,97,116,105,111,110,115,115,117
-,105,116,97,98,108,101,32,102,111,114,109,117,99,104,32,111,102,32,116,104,101,
-32,99,111,108,111,110,105,122,97,116,105,111,110,112,114,101,115,105,100,101,110
-,116,105,97,108,99,97,110,99,101,108,66,117,98,98,108,101,32,73,110,102,111,114,
-109,97,116,105,111,110,109,111,115,116,32,111,102,32,116,104,101,32,105,115,32,
-100,101,115,99,114,105,98,101,100,114,101,115,116,32,111,102,32,116,104,101,32,
-109,111,114,101,32,111,114,32,108,101,115,115,105,110,32,83,101,112,116,101,109,
-98,101,114,73,110,116,101,108,108,105,103,101,110,99,101,115,114,99,61,34,104,
-116,116,112,58,47,47,112,120,59,32,104,101,105,103,104,116,58,32,97,118,97,105,
-108,97,98,108,101,32,116,111,109,97,110,117,102,97,99,116,117,114,101,114,104,
-117,109,97,110,32,114,105,103,104,116,115,108,105,110,107,32,104,114,101,102,61,
-34,47,97,118,97,105,108,97,98,105,108,105,116,121,112,114,111,112,111,114,116,
-105,111,110,97,108,111,117,116,115,105,100,101,32,116,104,101,32,97,115,116,114,
-111,110,111,109,105,99,97,108,104,117,109,97,110,32,98,101,105,110,103,115,110,
-97,109,101,32,111,102,32,116,104,101,32,97,114,101,32,102,111,117,110,100,32,105
-,110,97,114,101,32,98,97,115,101,100,32,111,110,115,109,97,108,108,101,114,32,
-116,104,97,110,97,32,112,101,114,115,111,110,32,119,104,111,101,120,112,97,110,
-115,105,111,110,32,111,102,97,114,103,117,105,110,103,32,116,104,97,116,110,111,
-119,32,107,110,111,119,110,32,97,115,73,110,32,116,104,101,32,101,97,114,108,121
-,105,110,116,101,114,109,101,100,105,97,116,101,100,101,114,105,118,101,100,32,
-102,114,111,109,83,99,97,110,100,105,110,97,118,105,97,110,60,47,97,62,60,47,100
-,105,118,62,13,10,99,111,110,115,105,100,101,114,32,116,104,101,97,110,32,101,
-115,116,105,109,97,116,101,100,116,104,101,32,78,97,116,105,111,110,97,108,60,
-100,105,118,32,105,100,61,34,112,97,103,114,101,115,117,108,116,105,110,103,32,
-105,110,99,111,109,109,105,115,115,105,111,110,101,100,97,110,97,108,111,103,111
-,117,115,32,116,111,97,114,101,32,114,101,113,117,105,114,101,100,47,117,108,62,
-10,60,47,100,105,118,62,10,119,97,115,32,98,97,115,101,100,32,111,110,97,110,100
-,32,98,101,99,97,109,101,32,97,38,110,98,115,112,59,38,110,98,115,112,59,116,34,
-32,118,97,108,117,101,61,34,34,32,119,97,115,32,99,97,112,116,117,114,101,100,
-110,111,32,109,111,114,101,32,116,104,97,110,114,101,115,112,101,99,116,105,118,
-101,108,121,99,111,110,116,105,110,117,101,32,116,111,32,62,13,10,60,104,101,97,
-100,62,13,10,60,119,101,114,101,32,99,114,101,97,116,101,100,109,111,114,101,32,
-103,101,110,101,114,97,108,105,110,102,111,114,109,97,116,105,111,110,32,117,115
-,101,100,32,102,111,114,32,116,104,101,105,110,100,101,112,101,110,100,101,110,
-116,32,116,104,101,32,73,109,112,101,114,105,97,108,99,111,109,112,111,110,101,
-110,116,32,111,102,116,111,32,116,104,101,32,110,111,114,116,104,105,110,99,108,
-117,100,101,32,116,104,101,32,67,111,110,115,116,114,117,99,116,105,111,110,115,
-105,100,101,32,111,102,32,116,104,101,32,119,111,117,108,100,32,110,111,116,32,
-98,101,102,111,114,32,105,110,115,116,97,110,99,101,105,110,118,101,110,116,105,
-111,110,32,111,102,109,111,114,101,32,99,111,109,112,108,101,120,99,111,108,108,
-101,99,116,105,118,101,108,121,98,97,99,107,103,114,111,117,110,100,58,32,116,
-101,120,116,45,97,108,105,103,110,58,32,105,116,115,32,111,114,105,103,105,110,
-97,108,105,110,116,111,32,97,99,99,111,117,110,116,116,104,105,115,32,112,114,
-111,99,101,115,115,97,110,32,101,120,116,101,110,115,105,118,101,104,111,119,101
-,118,101,114,44,32,116,104,101,116,104,101,121,32,97,114,101,32,110,111,116,114,
-101,106,101,99,116,101,100,32,116,104,101,99,114,105,116,105,99,105,115,109,32,
-111,102,100,117,114,105,110,103,32,119,104,105,99,104,112,114,111,98,97,98,108,
-121,32,116,104,101,116,104,105,115,32,97,114,116,105,99,108,101,40,102,117,110,
-99,116,105,111,110,40,41,123,73,116,32,115,104,111,117,108,100,32,98,101,97,110,
-32,97,103,114,101,101,109,101,110,116,97,99,99,105,100,101,110,116,97,108,108,
-121,100,105,102,102,101,114,115,32,102,114,111,109,65,114,99,104,105,116,101,99,
-116,117,114,101,98,101,116,116,101,114,32,107,110,111,119,110,97,114,114,97,110,
-103,101,109,101,110,116,115,105,110,102,108,117,101,110,99,101,32,111,110,97,116
-,116,101,110,100,101,100,32,116,104,101,105,100,101,110,116,105,99,97,108,32,116
-,111,115,111,117,116,104,32,111,102,32,116,104,101,112,97,115,115,32,116,104,114
-,111,117,103,104,120,109,108,34,32,116,105,116,108,101,61,34,119,101,105,103,104
-,116,58,98,111,108,100,59,99,114,101,97,116,105,110,103,32,116,104,101,100,105,
-115,112,108,97,121,58,110,111,110,101,114,101,112,108,97,99,101,100,32,116,104,
-101,60,105,109,103,32,115,114,99,61,34,47,105,104,116,116,112,115,58,47,47,119,
-119,119,46,87,111,114,108,100,32,87,97,114,32,73,73,116,101,115,116,105,109,111,
-110,105,97,108,115,102,111,117,110,100,32,105,110,32,116,104,101,114,101,113,117
-,105,114,101,100,32,116,111,32,97,110,100,32,116,104,97,116,32,116,104,101,98,
-101,116,119,101,101,110,32,116,104,101,32,119,97,115,32,100,101,115,105,103,110,
-101,100,99,111,110,115,105,115,116,115,32,111,102,32,99,111,110,115,105,100,101,
-114,97,98,108,121,112,117,98,108,105,115,104,101,100,32,98,121,116,104,101,32,
-108,97,110,103,117,97,103,101,67,111,110,115,101,114,118,97,116,105,111,110,99,
-111,110,115,105,115,116,101,100,32,111,102,114,101,102,101,114,32,116,111,32,116
-,104,101,98,97,99,107,32,116,111,32,116,104,101,32,99,115,115,34,32,109,101,100,
-105,97,61,34,80,101,111,112,108,101,32,102,114,111,109,32,97,118,97,105,108,97,
-98,108,101,32,111,110,112,114,111,118,101,100,32,116,111,32,98,101,115,117,103,
-103,101,115,116,105,111,110,115,34,119,97,115,32,107,110,111,119,110,32,97,115,
-118,97,114,105,101,116,105,101,115,32,111,102,108,105,107,101,108,121,32,116,111
-,32,98,101,99,111,109,112,114,105,115,101,100,32,111,102,115,117,112,112,111,114
-,116,32,116,104,101,32,104,97,110,100,115,32,111,102,32,116,104,101,99,111,117,
-112,108,101,100,32,119,105,116,104,99,111,110,110,101,99,116,32,97,110,100,32,98
-,111,114,100,101,114,58,110,111,110,101,59,112,101,114,102,111,114,109,97,110,99
-,101,115,98,101,102,111,114,101,32,98,101,105,110,103,108,97,116,101,114,32,98,
-101,99,97,109,101,99,97,108,99,117,108,97,116,105,111,110,115,111,102,116,101,
-110,32,99,97,108,108,101,100,114,101,115,105,100,101,110,116,115,32,111,102,109,
-101,97,110,105,110,103,32,116,104,97,116,62,60,108,105,32,99,108,97,115,115,61,
-34,101,118,105,100,101,110,99,101,32,102,111,114,101,120,112,108,97,110,97,116,
-105,111,110,115,101,110,118,105,114,111,110,109,101,110,116,115,34,62,60,47,97,
-62,60,47,100,105,118,62,119,104,105,99,104,32,97,108,108,111,119,115,73,110,116,
-114,111,100,117,99,116,105,111,110,100,101,118,101,108,111,112,101,100,32,98,121
-,97,32,119,105,100,101,32,114,97,110,103,101,111,110,32,98,101,104,97,108,102,32
-,111,102,118,97,108,105,103,110,61,34,116,111,112,34,112,114,105,110,99,105,112,
-108,101,32,111,102,97,116,32,116,104,101,32,116,105,109,101,44,60,47,110,111,115
-,99,114,105,112,116,62,13,115,97,105,100,32,116,111,32,104,97,118,101,105,110,32
-,116,104,101,32,102,105,114,115,116,119,104,105,108,101,32,111,116,104,101,114,
-115,104,121,112,111,116,104,101,116,105,99,97,108,112,104,105,108,111,115,111,
-112,104,101,114,115,112,111,119,101,114,32,111,102,32,116,104,101,99,111,110,116
-,97,105,110,101,100,32,105,110,112,101,114,102,111,114,109,101,100,32,98,121,105
-,110,97,98,105,108,105,116,121,32,116,111,119,101,114,101,32,119,114,105,116,116
-,101,110,115,112,97,110,32,115,116,121,108,101,61,34,105,110,112,117,116,32,110,
-97,109,101,61,34,116,104,101,32,113,117,101,115,116,105,111,110,105,110,116,101,
-110,100,101,100,32,102,111,114,114,101,106,101,99,116,105,111,110,32,111,102,105
-,109,112,108,105,101,115,32,116,104,97,116,105,110,118,101,110,116,101,100,32,
-116,104,101,116,104,101,32,115,116,97,110,100,97,114,100,119,97,115,32,112,114,
-111,98,97,98,108,121,108,105,110,107,32,98,101,116,119,101,101,110,112,114,111,
-102,101,115,115,111,114,32,111,102,105,110,116,101,114,97,99,116,105,111,110,115
-,99,104,97,110,103,105,110,103,32,116,104,101,73,110,100,105,97,110,32,79,99,101
-,97,110,32,99,108,97,115,115,61,34,108,97,115,116,119,111,114,107,105,110,103,32
-,119,105,116,104,39,104,116,116,112,58,47,47,119,119,119,46,121,101,97,114,115,
-32,98,101,102,111,114,101,84,104,105,115,32,119,97,115,32,116,104,101,114,101,99
-,114,101,97,116,105,111,110,97,108,101,110,116,101,114,105,110,103,32,116,104,
-101,109,101,97,115,117,114,101,109,101,110,116,115,97,110,32,101,120,116,114,101
-,109,101,108,121,118,97,108,117,101,32,111,102,32,116,104,101,115,116,97,114,116
-,32,111,102,32,116,104,101,10,60,47,115,99,114,105,112,116,62,10,10,97,110,32,
-101,102,102,111,114,116,32,116,111,105,110,99,114,101,97,115,101,32,116,104,101,
-116,111,32,116,104,101,32,115,111,117,116,104,115,112,97,99,105,110,103,61,34,48
-,34,62,115,117,102,102,105,99,105,101,110,116,108,121,116,104,101,32,69,117,114,
-111,112,101,97,110,99,111,110,118,101,114,116,101,100,32,116,111,99,108,101,97,
-114,84,105,109,101,111,117,116,100,105,100,32,110,111,116,32,104,97,118,101,99,
-111,110,115,101,113,117,101,110,116,108,121,102,111,114,32,116,104,101,32,110,
-101,120,116,101,120,116,101,110,115,105,111,110,32,111,102,101,99,111,110,111,
-109,105,99,32,97,110,100,97,108,116,104,111,117,103,104,32,116,104,101,97,114,
-101,32,112,114,111,100,117,99,101,100,97,110,100,32,119,105,116,104,32,116,104,
-101,105,110,115,117,102,102,105,99,105,101,110,116,103,105,118,101,110,32,98,121
-,32,116,104,101,115,116,97,116,105,110,103,32,116,104,97,116,101,120,112,101,110
-,100,105,116,117,114,101,115,60,47,115,112,97,110,62,60,47,97,62,10,116,104,111,
-117,103,104,116,32,116,104,97,116,111,110,32,116,104,101,32,98,97,115,105,115,99
-,101,108,108,112,97,100,100,105,110,103,61,105,109,97,103,101,32,111,102,32,116,
-104,101,114,101,116,117,114,110,105,110,103,32,116,111,105,110,102,111,114,109,
-97,116,105,111,110,44,115,101,112,97,114,97,116,101,100,32,98,121,97,115,115,97,
-115,115,105,110,97,116,101,100,115,34,32,99,111,110,116,101,110,116,61,34,97,117
-,116,104,111,114,105,116,121,32,111,102,110,111,114,116,104,119,101,115,116,101,
-114,110,60,47,100,105,118,62,10,60,100,105,118,32,34,62,60,47,100,105,118,62,13,
-10,32,32,99,111,110,115,117,108,116,97,116,105,111,110,99,111,109,109,117,110,
-105,116,121,32,111,102,116,104,101,32,110,97,116,105,111,110,97,108,105,116,32,
-115,104,111,117,108,100,32,98,101,112,97,114,116,105,99,105,112,97,110,116,115,
-32,97,108,105,103,110,61,34,108,101,102,116,116,104,101,32,103,114,101,97,116,
-101,115,116,115,101,108,101,99,116,105,111,110,32,111,102,115,117,112,101,114,
-110,97,116,117,114,97,108,100,101,112,101,110,100,101,110,116,32,111,110,105,115
-,32,109,101,110,116,105,111,110,101,100,97,108,108,111,119,105,110,103,32,116,
-104,101,119,97,115,32,105,110,118,101,110,116,101,100,97,99,99,111,109,112,97,
-110,121,105,110,103,104,105,115,32,112,101,114,115,111,110,97,108,97,118,97,105,
-108,97,98,108,101,32,97,116,115,116,117,100,121,32,111,102,32,116,104,101,111,
-110,32,116,104,101,32,111,116,104,101,114,101,120,101,99,117,116,105,111,110,32,
-111,102,72,117,109,97,110,32,82,105,103,104,116,115,116,101,114,109,115,32,111,
-102,32,116,104,101,97,115,115,111,99,105,97,116,105,111,110,115,114,101,115,101,
-97,114,99,104,32,97,110,100,115,117,99,99,101,101,100,101,100,32,98,121,100,101,
-102,101,97,116,101,100,32,116,104,101,97,110,100,32,102,114,111,109,32,116,104,
-101,98,117,116,32,116,104,101,121,32,97,114,101,99,111,109,109,97,110,100,101,
-114,32,111,102,115,116,97,116,101,32,111,102,32,116,104,101,121,101,97,114,115,
-32,111,102,32,97,103,101,116,104,101,32,115,116,117,100,121,32,111,102,60,117,
-108,32,99,108,97,115,115,61,34,115,112,108,97,99,101,32,105,110,32,116,104,101,
-119,104,101,114,101,32,104,101,32,119,97,115,60,108,105,32,99,108,97,115,115,61,
-34,102,116,104,101,114,101,32,97,114,101,32,110,111,119,104,105,99,104,32,98,101
-,99,97,109,101,104,101,32,112,117,98,108,105,115,104,101,100,101,120,112,114,101
-,115,115,101,100,32,105,110,116,111,32,119,104,105,99,104,32,116,104,101,99,111,
-109,109,105,115,115,105,111,110,101,114,102,111,110,116,45,119,101,105,103,104,
-116,58,116,101,114,114,105,116,111,114,121,32,111,102,101,120,116,101,110,115,
-105,111,110,115,34,62,82,111,109,97,110,32,69,109,112,105,114,101,101,113,117,97
-,108,32,116,111,32,116,104,101,73,110,32,99,111,110,116,114,97,115,116,44,104,
-111,119,101,118,101,114,44,32,97,110,100,105,115,32,116,121,112,105,99,97,108,
-108,121,97,110,100,32,104,105,115,32,119,105,102,101,40,97,108,115,111,32,99,97,
-108,108,101,100,62,60,117,108,32,99,108,97,115,115,61,34,101,102,102,101,99,116,
-105,118,101,108,121,32,101,118,111,108,118,101,100,32,105,110,116,111,115,101,
-101,109,32,116,111,32,104,97,118,101,119,104,105,99,104,32,105,115,32,116,104,
-101,116,104,101,114,101,32,119,97,115,32,110,111,97,110,32,101,120,99,101,108,
-108,101,110,116,97,108,108,32,111,102,32,116,104,101,115,101,100,101,115,99,114,
-105,98,101,100,32,98,121,73,110,32,112,114,97,99,116,105,99,101,44,98,114,111,97
-,100,99,97,115,116,105,110,103,99,104,97,114,103,101,100,32,119,105,116,104,114,
-101,102,108,101,99,116,101,100,32,105,110,115,117,98,106,101,99,116,101,100,32,
-116,111,109,105,108,105,116,97,114,121,32,97,110,100,116,111,32,116,104,101,32,
-112,111,105,110,116,101,99,111,110,111,109,105,99,97,108,108,121,115,101,116,84,
-97,114,103,101,116,105,110,103,97,114,101,32,97,99,116,117,97,108,108,121,118,
-105,99,116,111,114,121,32,111,118,101,114,40,41,59,60,47,115,99,114,105,112,116,
-62,99,111,110,116,105,110,117,111,117,115,108,121,114,101,113,117,105,114,101,
-100,32,102,111,114,101,118,111,108,117,116,105,111,110,97,114,121,97,110,32,101,
-102,102,101,99,116,105,118,101,110,111,114,116,104,32,111,102,32,116,104,101,44,
-32,119,104,105,99,104,32,119,97,115,32,102,114,111,110,116,32,111,102,32,116,104
-,101,111,114,32,111,116,104,101,114,119,105,115,101,115,111,109,101,32,102,111,
-114,109,32,111,102,104,97,100,32,110,111,116,32,98,101,101,110,103,101,110,101,
-114,97,116,101,100,32,98,121,105,110,102,111,114,109,97,116,105,111,110,46,112,
-101,114,109,105,116,116,101,100,32,116,111,105,110,99,108,117,100,101,115,32,116
-,104,101,100,101,118,101,108,111,112,109,101,110,116,44,101,110,116,101,114,101,
-100,32,105,110,116,111,116,104,101,32,112,114,101,118,105,111,117,115,99,111,110
-,115,105,115,116,101,110,116,108,121,97,114,101,32,107,110,111,119,110,32,97,115
-,116,104,101,32,102,105,101,108,100,32,111,102,116,104,105,115,32,116,121,112,
-101,32,111,102,103,105,118,101,110,32,116,111,32,116,104,101,116,104,101,32,116,
-105,116,108,101,32,111,102,99,111,110,116,97,105,110,115,32,116,104,101,105,110,
-115,116,97,110,99,101,115,32,111,102,105,110,32,116,104,101,32,110,111,114,116,
-104,100,117,101,32,116,111,32,116,104,101,105,114,97,114,101,32,100,101,115,105,
-103,110,101,100,99,111,114,112,111,114,97,116,105,111,110,115,119,97,115,32,116,
-104,97,116,32,116,104,101,111,110,101,32,111,102,32,116,104,101,115,101,109,111,
-114,101,32,112,111,112,117,108,97,114,115,117,99,99,101,101,100,101,100,32,105,
-110,115,117,112,112,111,114,116,32,102,114,111,109,105,110,32,100,105,102,102,
-101,114,101,110,116,100,111,109,105,110,97,116,101,100,32,98,121,100,101,115,105
-,103,110,101,100,32,102,111,114,111,119,110,101,114,115,104,105,112,32,111,102,
-97,110,100,32,112,111,115,115,105,98,108,121,115,116,97,110,100,97,114,100,105,
-122,101,100,114,101,115,112,111,110,115,101,84,101,120,116,119,97,115,32,105,110
-,116,101,110,100,101,100,114,101,99,101,105,118,101,100,32,116,104,101,97,115,
-115,117,109,101,100,32,116,104,97,116,97,114,101,97,115,32,111,102,32,116,104,
-101,112,114,105,109,97,114,105,108,121,32,105,110,116,104,101,32,98,97,115,105,
-115,32,111,102,105,110,32,116,104,101,32,115,101,110,115,101,97,99,99,111,117,
-110,116,115,32,102,111,114,100,101,115,116,114,111,121,101,100,32,98,121,97,116,
-32,108,101,97,115,116,32,116,119,111,119,97,115,32,100,101,99,108,97,114,101,100
-,99,111,117,108,100,32,110,111,116,32,98,101,83,101,99,114,101,116,97,114,121,32
-,111,102,97,112,112,101,97,114,32,116,111,32,98,101,109,97,114,103,105,110,45,
-116,111,112,58,49,47,94,92,115,43,124,92,115,43,36,47,103,101,41,123,116,104,114
-,111,119,32,101,125,59,116,104,101,32,115,116,97,114,116,32,111,102,116,119,111,
-32,115,101,112,97,114,97,116,101,108,97,110,103,117,97,103,101,32,97,110,100,119
-,104,111,32,104,97,100,32,98,101,101,110,111,112,101,114,97,116,105,111,110,32,
-111,102,100,101,97,116,104,32,111,102,32,116,104,101,114,101,97,108,32,110,117,
-109,98,101,114,115,9,60,108,105,110,107,32,114,101,108,61,34,112,114,111,118,105
-,100,101,100,32,116,104,101,116,104,101,32,115,116,111,114,121,32,111,102,99,111
-,109,112,101,116,105,116,105,111,110,115,101,110,103,108,105,115,104,32,40,85,75
-,41,101,110,103,108,105,115,104,32,40,85,83,41,208,156,208,190,208,189,208,179,
-208,190,208,187,208,161,209,128,208,191,209,129,208,186,208,184,209,129,209,128,
-208,191,209,129,208,186,208,184,209,129,209,128,208,191,209,129,208,186,208,190,
-217,132,216,185,216,177,216,168,217,138,216,169,230,173,163,233,171,148,228,184,
-173,230,150,135,231,174,128,228,189,147,228,184,173,230,150,135,231,185,129,228,
-189,147,228,184,173,230,150,135,230,156,137,233,153,144,229,133,172,229,143,184,
-228,186,186,230,176,145,230,148,191,229,186,156,233,152,191,233,135,140,229,183,
-180,229,183,180,231,164,190,228,188,154,228,184,187,228,185,137,230,147,141,228,
-189,156,231,179,187,231,187,159,230,148,191,231,173,150,230,179,149,232,167,132,
-105,110,102,111,114,109,97,99,105,195,179,110,104,101,114,114,97,109,105,101,110
-,116,97,115,101,108,101,99,116,114,195,179,110,105,99,111,100,101,115,99,114,105
-,112,99,105,195,179,110,99,108,97,115,105,102,105,99,97,100,111,115,99,111,110,
-111,99,105,109,105,101,110,116,111,112,117,98,108,105,99,97,99,105,195,179,110,
-114,101,108,97,99,105,111,110,97,100,97,115,105,110,102,111,114,109,195,161,116,
-105,99,97,114,101,108,97,99,105,111,110,97,100,111,115,100,101,112,97,114,116,97
-,109,101,110,116,111,116,114,97,98,97,106,97,100,111,114,101,115,100,105,114,101
-,99,116,97,109,101,110,116,101,97,121,117,110,116,97,109,105,101,110,116,111,109
-,101,114,99,97,100,111,76,105,98,114,101,99,111,110,116,195,161,99,116,101,110,
-111,115,104,97,98,105,116,97,99,105,111,110,101,115,99,117,109,112,108,105,109,
-105,101,110,116,111,114,101,115,116,97,117,114,97,110,116,101,115,100,105,115,
-112,111,115,105,99,105,195,179,110,99,111,110,115,101,99,117,101,110,99,105,97,
-101,108,101,99,116,114,195,179,110,105,99,97,97,112,108,105,99,97,99,105,111,110
-,101,115,100,101,115,99,111,110,101,99,116,97,100,111,105,110,115,116,97,108,97,
-99,105,195,179,110,114,101,97,108,105,122,97,99,105,195,179,110,117,116,105,108,
-105,122,97,99,105,195,179,110,101,110,99,105,99,108,111,112,101,100,105,97,101,
-110,102,101,114,109,101,100,97,100,101,115,105,110,115,116,114,117,109,101,110,
-116,111,115,101,120,112,101,114,105,101,110,99,105,97,115,105,110,115,116,105,
-116,117,99,105,195,179,110,112,97,114,116,105,99,117,108,97,114,101,115,115,117,
-98,99,97,116,101,103,111,114,105,97,209,130,208,190,208,187,209,140,208,186,208,
-190,208,160,208,190,209,129,209,129,208,184,208,184,209,128,208,176,208,177,208,
-190,209,130,209,139,208,177,208,190,208,187,209,140,209,136,208,181,208,191,209,
-128,208,190,209,129,209,130,208,190,208,188,208,190,208,182,208,181,209,130,208,
-181,208,180,209,128,209,131,208,179,208,184,209,133,209,129,208,187,209,131,209,
-135,208,176,208,181,209,129,208,181,208,185,209,135,208,176,209,129,208,178,209,
-129,208,181,208,179,208,180,208,176,208,160,208,190,209,129,209,129,208,184,209,
-143,208,156,208,190,209,129,208,186,208,178,208,181,208,180,209,128,209,131,208,
-179,208,184,208,181,208,179,208,190,209,128,208,190,208,180,208,176,208,178,208,
-190,208,191,209,128,208,190,209,129,208,180,208,176,208,189,208,189,209,139,209,
-133,208,180,208,190,208,187,208,182,208,189,209,139,208,184,208,188,208,181,208,
-189,208,189,208,190,208,156,208,190,209,129,208,186,208,178,209,139,209,128,209,
-131,208,177,208,187,208,181,208,185,208,156,208,190,209,129,208,186,208,178,208,
-176,209,129,209,130,209,128,208,176,208,189,209,139,208,189,208,184,209,135,208,
-181,208,179,208,190,209,128,208,176,208,177,208,190,209,130,208,181,208,180,208,
-190,208,187,208,182,208,181,208,189,209,131,209,129,208,187,209,131,208,179,208,
-184,209,130,208,181,208,191,208,181,209,128,209,140,208,158,208,180,208,189,208,
-176,208,186,208,190,208,191,208,190,209,130,208,190,208,188,209,131,209,128,208,
-176,208,177,208,190,209,130,209,131,208,176,208,191,209,128,208,181,208,187,209,
-143,208,178,208,190,208,190,208,177,209,137,208,181,208,190,208,180,208,189,208,
-190,208,179,208,190,209,129,208,178,208,190,208,181,208,179,208,190,209,129,209,
-130,208,176,209,130,209,140,208,184,208,180,209,128,209,131,208,179,208,190,208,
-185,209,132,208,190,209,128,209,131,208,188,208,181,209,133,208,190,209,128,208,
-190,209,136,208,190,208,191,209,128,208,190,209,130,208,184,208,178,209,129,209,
-129,209,139,208,187,208,186,208,176,208,186,208,176,208,182,208,180,209,139,208,
-185,208,178,208,187,208,176,209,129,209,130,208,184,208,179,209,128,209,131,208,
-191,208,191,209,139,208,178,208,188,208,181,209,129,209,130,208,181,209,128,208,
-176,208,177,208,190,209,130,208,176,209,129,208,186,208,176,208,183,208,176,208,
-187,208,191,208,181,209,128,208,178,209,139,208,185,208,180,208,181,208,187,208,
-176,209,130,209,140,208,180,208,181,208,189,209,140,208,179,208,184,208,191,208,
-181,209,128,208,184,208,190,208,180,208,177,208,184,208,183,208,189,208,181,209,
-129,208,190,209,129,208,189,208,190,208,178,208,181,208,188,208,190,208,188,208,
-181,208,189,209,130,208,186,209,131,208,191,208,184,209,130,209,140,208,180,208,
-190,208,187,208,182,208,189,208,176,209,128,208,176,208,188,208,186,208,176,209,
-133,208,189,208,176,209,135,208,176,208,187,208,190,208,160,208,176,208,177,208,
-190,209,130,208,176,208,162,208,190,208,187,209,140,208,186,208,190,209,129,208,
-190,208,178,209,129,208,181,208,188,208,178,209,130,208,190,209,128,208,190,208,
-185,208,189,208,176,209,135,208,176,208,187,208,176,209,129,208,191,208,184,209,
-129,208,190,208,186,209,129,208,187,209,131,208,182,208,177,209,139,209,129,208,
-184,209,129,209,130,208,181,208,188,208,191,208,181,209,135,208,176,209,130,208,
-184,208,189,208,190,208,178,208,190,208,179,208,190,208,191,208,190,208,188,208,
-190,209,137,208,184,209,129,208,176,208,185,209,130,208,190,208,178,208,191,208,
-190,209,135,208,181,208,188,209,131,208,191,208,190,208,188,208,190,209,137,209,
-140,208,180,208,190,208,187,208,182,208,189,208,190,209,129,209,129,209,139,208,
-187,208,186,208,184,208,177,209,139,209,129,209,130,209,128,208,190,208,180,208,
-176,208,189,208,189,209,139,208,181,208,188,208,189,208,190,208,179,208,184,208,
-181,208,191,209,128,208,190,208,181,208,186,209,130,208,161,208,181,208,185,209,
-135,208,176,209,129,208,188,208,190,208,180,208,181,208,187,208,184,209,130,208,
-176,208,186,208,190,208,179,208,190,208,190,208,189,208,187,208,176,208,185,208,
-189,208,179,208,190,209,128,208,190,208,180,208,181,208,178,208,181,209,128,209,
-129,208,184,209,143,209,129,209,130,209,128,208,176,208,189,208,181,209,132,208,
-184,208,187,209,140,208,188,209,139,209,131,209,128,208,190,208,178,208,189,209,
-143,209,128,208,176,208,183,208,189,209,139,209,133,208,184,209,129,208,186,208,
-176,209,130,209,140,208,189,208,181,208,180,208,181,208,187,209,142,209,143,208,
-189,208,178,208,176,209,128,209,143,208,188,208,181,208,189,209,140,209,136,208,
-181,208,188,208,189,208,190,208,179,208,184,209,133,208,180,208,176,208,189,208,
-189,208,190,208,185,208,183,208,189,208,176,209,135,208,184,209,130,208,189,208,
-181,208,187,209,140,208,183,209,143,209,132,208,190,209,128,209,131,208,188,208,
-176,208,162,208,181,208,191,208,181,209,128,209,140,208,188,208,181,209,129,209,
-143,209,134,208,176,208,183,208,176,209,137,208,184,209,130,209,139,208,155,209,
-131,209,135,209,136,208,184,208,181,224,164,168,224,164,185,224,165,128,224,164,
-130,224,164,149,224,164,176,224,164,168,224,165,135,224,164,133,224,164,170,224,
-164,168,224,165,135,224,164,149,224,164,191,224,164,175,224,164,190,224,164,149,
-224,164,176,224,165,135,224,164,130,224,164,133,224,164,168,224,165,141,224,164,
-175,224,164,149,224,165,141,224,164,175,224,164,190,224,164,151,224,164,190,224,
-164,135,224,164,161,224,164,172,224,164,190,224,164,176,224,165,135,224,164,149,
-224,164,191,224,164,184,224,165,128,224,164,166,224,164,191,224,164,175,224,164,
-190,224,164,170,224,164,185,224,164,178,224,165,135,224,164,184,224,164,191,224,
-164,130,224,164,185,224,164,173,224,164,190,224,164,176,224,164,164,224,164,133,
-224,164,170,224,164,168,224,165,128,224,164,181,224,164,190,224,164,178,224,165,
-135,224,164,184,224,165,135,224,164,181,224,164,190,224,164,149,224,164,176,224,
-164,164,224,165,135,224,164,174,224,165,135,224,164,176,224,165,135,224,164,185,
-224,165,139,224,164,168,224,165,135,224,164,184,224,164,149,224,164,164,224,165,
-135,224,164,172,224,164,185,224,165,129,224,164,164,224,164,184,224,164,190,224,
-164,135,224,164,159,224,164,185,224,165,139,224,164,151,224,164,190,224,164,156,
-224,164,190,224,164,168,224,165,135,224,164,174,224,164,191,224,164,168,224,164,
-159,224,164,149,224,164,176,224,164,164,224,164,190,224,164,149,224,164,176,224,
-164,168,224,164,190,224,164,137,224,164,168,224,164,149,224,165,135,224,164,175,
-224,164,185,224,164,190,224,164,129,224,164,184,224,164,172,224,164,184,224,165,
-135,224,164,173,224,164,190,224,164,183,224,164,190,224,164,134,224,164,170,224,
-164,149,224,165,135,224,164,178,224,164,191,224,164,175,224,165,135,224,164,182,
-224,165,129,224,164,176,224,165,130,224,164,135,224,164,184,224,164,149,224,165,
-135,224,164,152,224,164,130,224,164,159,224,165,135,224,164,174,224,165,135,224,
-164,176,224,165,128,224,164,184,224,164,149,224,164,164,224,164,190,224,164,174,
-224,165,135,224,164,176,224,164,190,224,164,178,224,165,135,224,164,149,224,164,
-176,224,164,133,224,164,167,224,164,191,224,164,149,224,164,133,224,164,170,224,
-164,168,224,164,190,224,164,184,224,164,174,224,164,190,224,164,156,224,164,174,
-224,165,129,224,164,157,224,165,135,224,164,149,224,164,190,224,164,176,224,164,
-163,224,164,185,224,165,139,224,164,164,224,164,190,224,164,149,224,164,161,224,
-164,188,224,165,128,224,164,175,224,164,185,224,164,190,224,164,130,224,164,185,
-224,165,139,224,164,159,224,164,178,224,164,182,224,164,172,224,165,141,224,164,
-166,224,164,178,224,164,191,224,164,175,224,164,190,224,164,156,224,165,128,224,
-164,181,224,164,168,224,164,156,224,164,190,224,164,164,224,164,190,224,164,149,
-224,165,136,224,164,184,224,165,135,224,164,134,224,164,170,224,164,149,224,164,
-190,224,164,181,224,164,190,224,164,178,224,165,128,224,164,166,224,165,135,224,
-164,168,224,165,135,224,164,170,224,165,130,224,164,176,224,165,128,224,164,170,
-224,164,190,224,164,168,224,165,128,224,164,137,224,164,184,224,164,149,224,165,
-135,224,164,185,224,165,139,224,164,151,224,165,128,224,164,172,224,165,136,224,
-164,160,224,164,149,224,164,134,224,164,170,224,164,149,224,165,128,224,164,181,
-224,164,176,224,165,141,224,164,183,224,164,151,224,164,190,224,164,130,224,164,
-181,224,164,134,224,164,170,224,164,149,224,165,139,224,164,156,224,164,191,224,
-164,178,224,164,190,224,164,156,224,164,190,224,164,168,224,164,190,224,164,184,
-224,164,185,224,164,174,224,164,164,224,164,185,224,164,174,224,165,135,224,164,
-130,224,164,137,224,164,168,224,164,149,224,165,128,224,164,175,224,164,190,224,
-164,185,224,165,130,224,164,166,224,164,176,224,165,141,224,164,156,224,164,184,
-224,165,130,224,164,154,224,165,128,224,164,170,224,164,184,224,164,130,224,164,
-166,224,164,184,224,164,181,224,164,190,224,164,178,224,164,185,224,165,139,224,
-164,168,224,164,190,224,164,185,224,165,139,224,164,164,224,165,128,224,164,156,
-224,165,136,224,164,184,224,165,135,224,164,181,224,164,190,224,164,170,224,164,
-184,224,164,156,224,164,168,224,164,164,224,164,190,224,164,168,224,165,135,224,
-164,164,224,164,190,224,164,156,224,164,190,224,164,176,224,165,128,224,164,152,
-224,164,190,224,164,175,224,164,178,224,164,156,224,164,191,224,164,178,224,165,
-135,224,164,168,224,165,128,224,164,154,224,165,135,224,164,156,224,164,190,224,
-164,130,224,164,154,224,164,170,224,164,164,224,165,141,224,164,176,224,164,151,
-224,165,130,224,164,151,224,164,178,224,164,156,224,164,190,224,164,164,224,165,
-135,224,164,172,224,164,190,224,164,185,224,164,176,224,164,134,224,164,170,224,
-164,168,224,165,135,224,164,181,224,164,190,224,164,185,224,164,168,224,164,135,
-224,164,184,224,164,149,224,164,190,224,164,184,224,165,129,224,164,172,224,164,
-185,224,164,176,224,164,185,224,164,168,224,165,135,224,164,135,224,164,184,224,
-164,184,224,165,135,224,164,184,224,164,185,224,164,191,224,164,164,224,164,172,
-224,164,161,224,164,188,224,165,135,224,164,152,224,164,159,224,164,168,224,164,
-190,224,164,164,224,164,178,224,164,190,224,164,182,224,164,170,224,164,190,224,
-164,130,224,164,154,224,164,182,224,165,141,224,164,176,224,165,128,224,164,172,
-224,164,161,224,164,188,224,165,128,224,164,185,224,165,139,224,164,164,224,165,
-135,224,164,184,224,164,190,224,164,136,224,164,159,224,164,182,224,164,190,224,
-164,175,224,164,166,224,164,184,224,164,149,224,164,164,224,165,128,224,164,156,
-224,164,190,224,164,164,224,165,128,224,164,181,224,164,190,224,164,178,224,164,
-190,224,164,185,224,164,156,224,164,190,224,164,176,224,164,170,224,164,159,224,
-164,168,224,164,190,224,164,176,224,164,150,224,164,168,224,165,135,224,164,184,
-224,164,161,224,164,188,224,164,149,224,164,174,224,164,191,224,164,178,224,164,
-190,224,164,137,224,164,184,224,164,149,224,165,128,224,164,149,224,165,135,224,
-164,181,224,164,178,224,164,178,224,164,151,224,164,164,224,164,190,224,164,150,
-224,164,190,224,164,168,224,164,190,224,164,133,224,164,176,224,165,141,224,164,
-165,224,164,156,224,164,185,224,164,190,224,164,130,224,164,166,224,165,135,224,
-164,150,224,164,190,224,164,170,224,164,185,224,164,178,224,165,128,224,164,168,
-224,164,191,224,164,175,224,164,174,224,164,172,224,164,191,224,164,168,224,164,
-190,224,164,172,224,165,136,224,164,130,224,164,149,224,164,149,224,164,185,224,
-165,128,224,164,130,224,164,149,224,164,185,224,164,168,224,164,190,224,164,166,
-224,165,135,224,164,164,224,164,190,224,164,185,224,164,174,224,164,178,224,165,
-135,224,164,149,224,164,190,224,164,171,224,165,128,224,164,156,224,164,172,224,
-164,149,224,164,191,224,164,164,224,165,129,224,164,176,224,164,164,224,164,174,
-224,164,190,224,164,130,224,164,151,224,164,181,224,164,185,224,165,128,224,164,
-130,224,164,176,224,165,139,224,164,156,224,164,188,224,164,174,224,164,191,224,
-164,178,224,165,128,224,164,134,224,164,176,224,165,139,224,164,170,224,164,184,
-224,165,135,224,164,168,224,164,190,224,164,175,224,164,190,224,164,166,224,164,
-181,224,164,178,224,165,135,224,164,168,224,165,135,224,164,150,224,164,190,224,
-164,164,224,164,190,224,164,149,224,164,176,224,165,128,224,164,172,224,164,137,
-224,164,168,224,164,149,224,164,190,224,164,156,224,164,181,224,164,190,224,164,
-172,224,164,170,224,165,130,224,164,176,224,164,190,224,164,172,224,164,161,224,
-164,188,224,164,190,224,164,184,224,165,140,224,164,166,224,164,190,224,164,182,
-224,165,135,224,164,175,224,164,176,224,164,149,224,164,191,224,164,175,224,165,
-135,224,164,149,224,164,185,224,164,190,224,164,130,224,164,133,224,164,149,224,
-164,184,224,164,176,224,164,172,224,164,168,224,164,190,224,164,143,224,164,181,
-224,164,185,224,164,190,224,164,130,224,164,184,224,165,141,224,164,165,224,164,
-178,224,164,174,224,164,191,224,164,178,224,165,135,224,164,178,224,165,135,224,
-164,150,224,164,149,224,164,181,224,164,191,224,164,183,224,164,175,224,164,149,
-224,165,141,224,164,176,224,164,130,224,164,184,224,164,174,224,165,130,224,164,
-185,224,164,165,224,164,190,224,164,168,224,164,190,216,170,216,179,216,170,216,
-183,217,138,216,185,217,133,216,180,216,167,216,177,217,131,216,169,216,168,217,
-136,216,167,216,179,216,183,216,169,216,167,217,132,216,181,217,129,216,173,216,
-169,217,133,217,136,216,167,216,182,217,138,216,185,216,167,217,132,216,174,216,
-167,216,181,216,169,216,167,217,132,217,133,216,178,217,138,216,175,216,167,217,
-132,216,185,216,167,217,133,216,169,216,167,217,132,217,131,216,167,216,170,216,
-168,216,167,217,132,216,177,216,175,217,136,216,175,216,168,216,177,217,134,216,
-167,217,133,216,172,216,167,217,132,216,175,217,136,217,132,216,169,216,167,217,
-132,216,185,216,167,217,132,217,133,216,167,217,132,217,133,217,136,217,130,216,
-185,216,167,217,132,216,185,216,177,216,168,217,138,216,167,217,132,216,179,216,
-177,217,138,216,185,216,167,217,132,216,172,217,136,216,167,217,132,216,167,217,
-132,216,176,217,135,216,167,216,168,216,167,217,132,216,173,217,138,216,167,216,
-169,216,167,217,132,216,173,217,130,217,136,217,130,216,167,217,132,217,131,216,
-177,217,138,217,133,216,167,217,132,216,185,216,177,216,167,217,130,217,133,216,
-173,217,129,217,136,216,184,216,169,216,167,217,132,216,171,216,167,217,134,217,
-138,217,133,216,180,216,167,217,135,216,175,216,169,216,167,217,132,217,133,216,
-177,216,163,216,169,216,167,217,132,217,130,216,177,216,162,217,134,216,167,217,
-132,216,180,216,168,216,167,216,168,216,167,217,132,216,173,217,136,216,167,216,
-177,216,167,217,132,216,172,216,175,217,138,216,175,216,167,217,132,216,163,216,
-179,216,177,216,169,216,167,217,132,216,185,217,132,217,136,217,133,217,133,216,
-172,217,133,217,136,216,185,216,169,216,167,217,132,216,177,216,173,217,133,217,
-134,216,167,217,132,217,134,217,130,216,167,216,183,217,129,217,132,216,179,216,
-183,217,138,217,134,216,167,217,132,217,131,217,136,217,138,216,170,216,167,217,
-132,216,175,217,134,217,138,216,167,216,168,216,177,217,131,216,167,216,170,217,
-135,216,167,217,132,216,177,217,138,216,167,216,182,216,170,216,173,217,138,216,
-167,216,170,217,138,216,168,216,170,217,136,217,130,217,138,216,170,216,167,217,
-132,216,163,217,136,217,132,217,137,216,167,217,132,216,168,216,177,217,138,216,
-175,216,167,217,132,217,131,217,132,216,167,217,133,216,167,217,132,216,177,216,
-167,216,168,216,183,216,167,217,132,216,180,216,174,216,181,217,138,216,179,217,
-138,216,167,216,177,216,167,216,170,216,167,217,132,216,171,216,167,217,132,216,
-171,216,167,217,132,216,181,217,132,216,167,216,169,216,167,217,132,216,173,216,
-175,217,138,216,171,216,167,217,132,216,178,217,136,216,167,216,177,216,167,217,
-132,216,174,217,132,217,138,216,172,216,167,217,132,216,172,217,133,217,138,216,
-185,216,167,217,132,216,185,216,167,217,133,217,135,216,167,217,132,216,172,217,
-133,216,167,217,132,216,167,217,132,216,179,216,167,216,185,216,169,217,133,216,
-180,216,167,217,135,216,175,217,135,216,167,217,132,216,177,216,166,217,138,216,
-179,216,167,217,132,216,175,216,174,217,136,217,132,216,167,217,132,217,129,217,
-134,217,138,216,169,216,167,217,132,217,131,216,170,216,167,216,168,216,167,217,
-132,216,175,217,136,216,177,217,138,216,167,217,132,216,175,216,177,217,136,216,
-179,216,167,216,179,216,170,216,186,216,177,217,130,216,170,216,181,216,167,217,
-133,217,138,217,133,216,167,217,132,216,168,217,134,216,167,216,170,216,167,217,
-132,216,185,216,184,217,138,217,133,101,110,116,101,114,116,97,105,110,109,101,
-110,116,117,110,100,101,114,115,116,97,110,100,105,110,103,32,61,32,102,117,110,
-99,116,105,111,110,40,41,46,106,112,103,34,32,119,105,100,116,104,61,34,99,111,
-110,102,105,103,117,114,97,116,105,111,110,46,112,110,103,34,32,119,105,100,116,
-104,61,34,60,98,111,100,121,32,99,108,97,115,115,61,34,77,97,116,104,46,114,97,
-110,100,111,109,40,41,99,111,110,116,101,109,112,111,114,97,114,121,32,85,110,
-105,116,101,100,32,83,116,97,116,101,115,99,105,114,99,117,109,115,116,97,110,99
-,101,115,46,97,112,112,101,110,100,67,104,105,108,100,40,111,114,103,97,110,105,
-122,97,116,105,111,110,115,60,115,112,97,110,32,99,108,97,115,115,61,34,34,62,60
-,105,109,103,32,115,114,99,61,34,47,100,105,115,116,105,110,103,117,105,115,104,
-101,100,116,104,111,117,115,97,110,100,115,32,111,102,32,99,111,109,109,117,110,
-105,99,97,116,105,111,110,99,108,101,97,114,34,62,60,47,100,105,118,62,105,110,
-118,101,115,116,105,103,97,116,105,111,110,102,97,118,105,99,111,110,46,105,99,
-111,34,32,109,97,114,103,105,110,45,114,105,103,104,116,58,98,97,115,101,100,32,
-111,110,32,116,104,101,32,77,97,115,115,97,99,104,117,115,101,116,116,115,116,97
-,98,108,101,32,98,111,114,100,101,114,61,105,110,116,101,114,110,97,116,105,111,
-110,97,108,97,108,115,111,32,107,110,111,119,110,32,97,115,112,114,111,110,117,
-110,99,105,97,116,105,111,110,98,97,99,107,103,114,111,117,110,100,58,35,102,112
-,97,100,100,105,110,103,45,108,101,102,116,58,70,111,114,32,101,120,97,109,112,
-108,101,44,32,109,105,115,99,101,108,108,97,110,101,111,117,115,38,108,116,59,47
-,109,97,116,104,38,103,116,59,112,115,121,99,104,111,108,111,103,105,99,97,108,
-105,110,32,112,97,114,116,105,99,117,108,97,114,101,97,114,99,104,34,32,116,121,
-112,101,61,34,102,111,114,109,32,109,101,116,104,111,100,61,34,97,115,32,111,112
-,112,111,115,101,100,32,116,111,83,117,112,114,101,109,101,32,67,111,117,114,116
-,111,99,99,97,115,105,111,110,97,108,108,121,32,65,100,100,105,116,105,111,110,
-97,108,108,121,44,78,111,114,116,104,32,65,109,101,114,105,99,97,112,120,59,98,
-97,99,107,103,114,111,117,110,100,111,112,112,111,114,116,117,110,105,116,105,
-101,115,69,110,116,101,114,116,97,105,110,109,101,110,116,46,116,111,76,111,119,
-101,114,67,97,115,101,40,109,97,110,117,102,97,99,116,117,114,105,110,103,112,
-114,111,102,101,115,115,105,111,110,97,108,32,99,111,109,98,105,110,101,100,32,
-119,105,116,104,70,111,114,32,105,110,115,116,97,110,99,101,44,99,111,110,115,
-105,115,116,105,110,103,32,111,102,34,32,109,97,120,108,101,110,103,116,104,61,
-34,114,101,116,117,114,110,32,102,97,108,115,101,59,99,111,110,115,99,105,111,
-117,115,110,101,115,115,77,101,100,105,116,101,114,114,97,110,101,97,110,101,120
-,116,114,97,111,114,100,105,110,97,114,121,97,115,115,97,115,115,105,110,97,116,
-105,111,110,115,117,98,115,101,113,117,101,110,116,108,121,32,98,117,116,116,111
-,110,32,116,121,112,101,61,34,116,104,101,32,110,117,109,98,101,114,32,111,102,
-116,104,101,32,111,114,105,103,105,110,97,108,32,99,111,109,112,114,101,104,101,
-110,115,105,118,101,114,101,102,101,114,115,32,116,111,32,116,104,101,60,47,117,
-108,62,10,60,47,100,105,118,62,10,112,104,105,108,111,115,111,112,104,105,99,97,
-108,108,111,99,97,116,105,111,110,46,104,114,101,102,119,97,115,32,112,117,98,
-108,105,115,104,101,100,83,97,110,32,70,114,97,110,99,105,115,99,111,40,102,117,
-110,99,116,105,111,110,40,41,123,10,60,100,105,118,32,105,100,61,34,109,97,105,
-110,115,111,112,104,105,115,116,105,99,97,116,101,100,109,97,116,104,101,109,97,
-116,105,99,97,108,32,47,104,101,97,100,62,13,10,60,98,111,100,121,115,117,103,
-103,101,115,116,115,32,116,104,97,116,100,111,99,117,109,101,110,116,97,116,105,
-111,110,99,111,110,99,101,110,116,114,97,116,105,111,110,114,101,108,97,116,105,
-111,110,115,104,105,112,115,109,97,121,32,104,97,118,101,32,98,101,101,110,40,
-102,111,114,32,101,120,97,109,112,108,101,44,84,104,105,115,32,97,114,116,105,99
-,108,101,32,105,110,32,115,111,109,101,32,99,97,115,101,115,112,97,114,116,115,
-32,111,102,32,116,104,101,32,100,101,102,105,110,105,116,105,111,110,32,111,102,
-71,114,101,97,116,32,66,114,105,116,97,105,110,32,99,101,108,108,112,97,100,100,
-105,110,103,61,101,113,117,105,118,97,108,101,110,116,32,116,111,112,108,97,99,
-101,104,111,108,100,101,114,61,34,59,32,102,111,110,116,45,115,105,122,101,58,32
-,106,117,115,116,105,102,105,99,97,116,105,111,110,98,101,108,105,101,118,101,
-100,32,116,104,97,116,115,117,102,102,101,114,101,100,32,102,114,111,109,97,116,
-116,101,109,112,116,101,100,32,116,111,32,108,101,97,100,101,114,32,111,102,32,
-116,104,101,99,114,105,112,116,34,32,115,114,99,61,34,47,40,102,117,110,99,116,
-105,111,110,40,41,32,123,97,114,101,32,97,118,97,105,108,97,98,108,101,10,9,60,
-108,105,110,107,32,114,101,108,61,34,32,115,114,99,61,39,104,116,116,112,58,47,
-47,105,110,116,101,114,101,115,116,101,100,32,105,110,99,111,110,118,101,110,116
-,105,111,110,97,108,32,34,32,97,108,116,61,34,34,32,47,62,60,47,97,114,101,32,
-103,101,110,101,114,97,108,108,121,104,97,115,32,97,108,115,111,32,98,101,101,
-110,109,111,115,116,32,112,111,112,117,108,97,114,32,99,111,114,114,101,115,112,
-111,110,100,105,110,103,99,114,101,100,105,116,101,100,32,119,105,116,104,116,
-121,108,101,61,34,98,111,114,100,101,114,58,60,47,97,62,60,47,115,112,97,110,62,
-60,47,46,103,105,102,34,32,119,105,100,116,104,61,34,60,105,102,114,97,109,101,
-32,115,114,99,61,34,116,97,98,108,101,32,99,108,97,115,115,61,34,105,110,108,105
-,110,101,45,98,108,111,99,107,59,97,99,99,111,114,100,105,110,103,32,116,111,32,
-116,111,103,101,116,104,101,114,32,119,105,116,104,97,112,112,114,111,120,105,
-109,97,116,101,108,121,112,97,114,108,105,97,109,101,110,116,97,114,121,109,111,
-114,101,32,97,110,100,32,109,111,114,101,100,105,115,112,108,97,121,58,110,111,
-110,101,59,116,114,97,100,105,116,105,111,110,97,108,108,121,112,114,101,100,111
-,109,105,110,97,110,116,108,121,38,110,98,115,112,59,124,38,110,98,115,112,59,38
-,110,98,115,112,59,60,47,115,112,97,110,62,32,99,101,108,108,115,112,97,99,105,
-110,103,61,60,105,110,112,117,116,32,110,97,109,101,61,34,111,114,34,32,99,111,
-110,116,101,110,116,61,34,99,111,110,116,114,111,118,101,114,115,105,97,108,112,
-114,111,112,101,114,116,121,61,34,111,103,58,47,120,45,115,104,111,99,107,119,97
-,118,101,45,100,101,109,111,110,115,116,114,97,116,105,111,110,115,117,114,114,
-111,117,110,100,101,100,32,98,121,78,101,118,101,114,116,104,101,108,101,115,115
-,44,119,97,115,32,116,104,101,32,102,105,114,115,116,99,111,110,115,105,100,101,
-114,97,98,108,101,32,65,108,116,104,111,117,103,104,32,116,104,101,32,99,111,108
-,108,97,98,111,114,97,116,105,111,110,115,104,111,117,108,100,32,110,111,116,32,
-98,101,112,114,111,112,111,114,116,105,111,110,32,111,102,60,115,112,97,110,32,
-115,116,121,108,101,61,34,107,110,111,119,110,32,97,115,32,116,104,101,32,115,
-104,111,114,116,108,121,32,97,102,116,101,114,102,111,114,32,105,110,115,116,97,
-110,99,101,44,100,101,115,99,114,105,98,101,100,32,97,115,32,47,104,101,97,100,
-62,10,60,98,111,100,121,32,115,116,97,114,116,105,110,103,32,119,105,116,104,105
-,110,99,114,101,97,115,105,110,103,108,121,32,116,104,101,32,102,97,99,116,32,
-116,104,97,116,100,105,115,99,117,115,115,105,111,110,32,111,102,109,105,100,100
-,108,101,32,111,102,32,116,104,101,97,110,32,105,110,100,105,118,105,100,117,97,
-108,100,105,102,102,105,99,117,108,116,32,116,111,32,112,111,105,110,116,32,111,
-102,32,118,105,101,119,104,111,109,111,115,101,120,117,97,108,105,116,121,97,99,
-99,101,112,116,97,110,99,101,32,111,102,60,47,115,112,97,110,62,60,47,100,105,
-118,62,109,97,110,117,102,97,99,116,117,114,101,114,115,111,114,105,103,105,110,
-32,111,102,32,116,104,101,99,111,109,109,111,110,108,121,32,117,115,101,100,105,
-109,112,111,114,116,97,110,99,101,32,111,102,100,101,110,111,109,105,110,97,116,
-105,111,110,115,98,97,99,107,103,114,111,117,110,100,58,32,35,108,101,110,103,
-116,104,32,111,102,32,116,104,101,100,101,116,101,114,109,105,110,97,116,105,111
-,110,97,32,115,105,103,110,105,102,105,99,97,110,116,34,32,98,111,114,100,101,
-114,61,34,48,34,62,114,101,118,111,108,117,116,105,111,110,97,114,121,112,114,
-105,110,99,105,112,108,101,115,32,111,102,105,115,32,99,111,110,115,105,100,101,
-114,101,100,119,97,115,32,100,101,118,101,108,111,112,101,100,73,110,100,111,45,
-69,117,114,111,112,101,97,110,118,117,108,110,101,114,97,98,108,101,32,116,111,
-112,114,111,112,111,110,101,110,116,115,32,111,102,97,114,101,32,115,111,109,101
-,116,105,109,101,115,99,108,111,115,101,114,32,116,111,32,116,104,101,78,101,119
-,32,89,111,114,107,32,67,105,116,121,32,110,97,109,101,61,34,115,101,97,114,99,
-104,97,116,116,114,105,98,117,116,101,100,32,116,111,99,111,117,114,115,101,32,
-111,102,32,116,104,101,109,97,116,104,101,109,97,116,105,99,105,97,110,98,121,32
-,116,104,101,32,101,110,100,32,111,102,97,116,32,116,104,101,32,101,110,100,32,
-111,102,34,32,98,111,114,100,101,114,61,34,48,34,32,116,101,99,104,110,111,108,
-111,103,105,99,97,108,46,114,101,109,111,118,101,67,108,97,115,115,40,98,114,97,
-110,99,104,32,111,102,32,116,104,101,101,118,105,100,101,110,99,101,32,116,104,
-97,116,33,91,101,110,100,105,102,93,45,45,62,13,10,73,110,115,116,105,116,117,
-116,101,32,111,102,32,105,110,116,111,32,97,32,115,105,110,103,108,101,114,101,
-115,112,101,99,116,105,118,101,108,121,46,97,110,100,32,116,104,101,114,101,102,
-111,114,101,112,114,111,112,101,114,116,105,101,115,32,111,102,105,115,32,108,
-111,99,97,116,101,100,32,105,110,115,111,109,101,32,111,102,32,119,104,105,99,
-104,84,104,101,114,101,32,105,115,32,97,108,115,111,99,111,110,116,105,110,117,
-101,100,32,116,111,32,97,112,112,101,97,114,97,110,99,101,32,111,102,32,38,97,
-109,112,59,110,100,97,115,104,59,32,100,101,115,99,114,105,98,101,115,32,116,104
-,101,99,111,110,115,105,100,101,114,97,116,105,111,110,97,117,116,104,111,114,32
-,111,102,32,116,104,101,105,110,100,101,112,101,110,100,101,110,116,108,121,101,
-113,117,105,112,112,101,100,32,119,105,116,104,100,111,101,115,32,110,111,116,32
-,104,97,118,101,60,47,97,62,60,97,32,104,114,101,102,61,34,99,111,110,102,117,
-115,101,100,32,119,105,116,104,60,108,105,110,107,32,104,114,101,102,61,34,47,97
-,116,32,116,104,101,32,97,103,101,32,111,102,97,112,112,101,97,114,32,105,110,32
-,116,104,101,84,104,101,115,101,32,105,110,99,108,117,100,101,114,101,103,97,114
-,100,108,101,115,115,32,111,102,99,111,117,108,100,32,98,101,32,117,115,101,100,
-32,115,116,121,108,101,61,38,113,117,111,116,59,115,101,118,101,114,97,108,32,
-116,105,109,101,115,114,101,112,114,101,115,101,110,116,32,116,104,101,98,111,
-100,121,62,10,60,47,104,116,109,108,62,116,104,111,117,103,104,116,32,116,111,32
-,98,101,112,111,112,117,108,97,116,105,111,110,32,111,102,112,111,115,115,105,98
-,105,108,105,116,105,101,115,112,101,114,99,101,110,116,97,103,101,32,111,102,97
-,99,99,101,115,115,32,116,111,32,116,104,101,97,110,32,97,116,116,101,109,112,
-116,32,116,111,112,114,111,100,117,99,116,105,111,110,32,111,102,106,113,117,101
-,114,121,47,106,113,117,101,114,121,116,119,111,32,100,105,102,102,101,114,101,
-110,116,98,101,108,111,110,103,32,116,111,32,116,104,101,101,115,116,97,98,108,
-105,115,104,109,101,110,116,114,101,112,108,97,99,105,110,103,32,116,104,101,100
-,101,115,99,114,105,112,116,105,111,110,34,32,100,101,116,101,114,109,105,110,
-101,32,116,104,101,97,118,97,105,108,97,98,108,101,32,102,111,114,65,99,99,111,
-114,100,105,110,103,32,116,111,32,119,105,100,101,32,114,97,110,103,101,32,111,
-102,9,60,100,105,118,32,99,108,97,115,115,61,34,109,111,114,101,32,99,111,109,
-109,111,110,108,121,111,114,103,97,110,105,115,97,116,105,111,110,115,102,117,
-110,99,116,105,111,110,97,108,105,116,121,119,97,115,32,99,111,109,112,108,101,
-116,101,100,32,38,97,109,112,59,109,100,97,115,104,59,32,112,97,114,116,105,99,
-105,112,97,116,105,111,110,116,104,101,32,99,104,97,114,97,99,116,101,114,97,110
-,32,97,100,100,105,116,105,111,110,97,108,97,112,112,101,97,114,115,32,116,111,
-32,98,101,102,97,99,116,32,116,104,97,116,32,116,104,101,97,110,32,101,120,97,
-109,112,108,101,32,111,102,115,105,103,110,105,102,105,99,97,110,116,108,121,111
-,110,109,111,117,115,101,111,118,101,114,61,34,98,101,99,97,117,115,101,32,116,
-104,101,121,32,97,115,121,110,99,32,61,32,116,114,117,101,59,112,114,111,98,108,
-101,109,115,32,119,105,116,104,115,101,101,109,115,32,116,111,32,104,97,118,101,
-116,104,101,32,114,101,115,117,108,116,32,111,102,32,115,114,99,61,34,104,116,
-116,112,58,47,47,102,97,109,105,108,105,97,114,32,119,105,116,104,112,111,115,
-115,101,115,115,105,111,110,32,111,102,102,117,110,99,116,105,111,110,32,40,41,
-32,123,116,111,111,107,32,112,108,97,99,101,32,105,110,97,110,100,32,115,111,109
-,101,116,105,109,101,115,115,117,98,115,116,97,110,116,105,97,108,108,121,60,115
-,112,97,110,62,60,47,115,112,97,110,62,105,115,32,111,102,116,101,110,32,117,115
-,101,100,105,110,32,97,110,32,97,116,116,101,109,112,116,103,114,101,97,116,32,
-100,101,97,108,32,111,102,69,110,118,105,114,111,110,109,101,110,116,97,108,115,
-117,99,99,101,115,115,102,117,108,108,121,32,118,105,114,116,117,97,108,108,121,
-32,97,108,108,50,48,116,104,32,99,101,110,116,117,114,121,44,112,114,111,102,101
-,115,115,105,111,110,97,108,115,110,101,99,101,115,115,97,114,121,32,116,111,32,
-100,101,116,101,114,109,105,110,101,100,32,98,121,99,111,109,112,97,116,105,98,
-105,108,105,116,121,98,101,99,97,117,115,101,32,105,116,32,105,115,68,105,99,116
-,105,111,110,97,114,121,32,111,102,109,111,100,105,102,105,99,97,116,105,111,110
-,115,84,104,101,32,102,111,108,108,111,119,105,110,103,109,97,121,32,114,101,102
-,101,114,32,116,111,58,67,111,110,115,101,113,117,101,110,116,108,121,44,73,110,
-116,101,114,110,97,116,105,111,110,97,108,97,108,116,104,111,117,103,104,32,115,
-111,109,101,116,104,97,116,32,119,111,117,108,100,32,98,101,119,111,114,108,100,
-39,115,32,102,105,114,115,116,99,108,97,115,115,105,102,105,101,100,32,97,115,98
-,111,116,116,111,109,32,111,102,32,116,104,101,40,112,97,114,116,105,99,117,108,
-97,114,108,121,97,108,105,103,110,61,34,108,101,102,116,34,32,109,111,115,116,32
-,99,111,109,109,111,110,108,121,98,97,115,105,115,32,102,111,114,32,116,104,101,
-102,111,117,110,100,97,116,105,111,110,32,111,102,99,111,110,116,114,105,98,117,
-116,105,111,110,115,112,111,112,117,108,97,114,105,116,121,32,111,102,99,101,110
-,116,101,114,32,111,102,32,116,104,101,116,111,32,114,101,100,117,99,101,32,116,
-104,101,106,117,114,105,115,100,105,99,116,105,111,110,115,97,112,112,114,111,
-120,105,109,97,116,105,111,110,32,111,110,109,111,117,115,101,111,117,116,61,34,
-78,101,119,32,84,101,115,116,97,109,101,110,116,99,111,108,108,101,99,116,105,
-111,110,32,111,102,60,47,115,112,97,110,62,60,47,97,62,60,47,105,110,32,116,104,
-101,32,85,110,105,116,101,100,102,105,108,109,32,100,105,114,101,99,116,111,114,
-45,115,116,114,105,99,116,46,100,116,100,34,62,104,97,115,32,98,101,101,110,32,
-117,115,101,100,114,101,116,117,114,110,32,116,111,32,116,104,101,97,108,116,104
-,111,117,103,104,32,116,104,105,115,99,104,97,110,103,101,32,105,110,32,116,104,
-101,115,101,118,101,114,97,108,32,111,116,104,101,114,98,117,116,32,116,104,101,
-114,101,32,97,114,101,117,110,112,114,101,99,101,100,101,110,116,101,100,105,115
-,32,115,105,109,105,108,97,114,32,116,111,101,115,112,101,99,105,97,108,108,121,
-32,105,110,119,101,105,103,104,116,58,32,98,111,108,100,59,105,115,32,99,97,108,
-108,101,100,32,116,104,101,99,111,109,112,117,116,97,116,105,111,110,97,108,105,
-110,100,105,99,97,116,101,32,116,104,97,116,114,101,115,116,114,105,99,116,101,
-100,32,116,111,9,60,109,101,116,97,32,110,97,109,101,61,34,97,114,101,32,116,121
-,112,105,99,97,108,108,121,99,111,110,102,108,105,99,116,32,119,105,116,104,72,
-111,119,101,118,101,114,44,32,116,104,101,32,65,110,32,101,120,97,109,112,108,
-101,32,111,102,99,111,109,112,97,114,101,100,32,119,105,116,104,113,117,97,110,
-116,105,116,105,101,115,32,111,102,114,97,116,104,101,114,32,116,104,97,110,32,
-97,99,111,110,115,116,101,108,108,97,116,105,111,110,110,101,99,101,115,115,97,
-114,121,32,102,111,114,114,101,112,111,114,116,101,100,32,116,104,97,116,115,112
-,101,99,105,102,105,99,97,116,105,111,110,112,111,108,105,116,105,99,97,108,32,
-97,110,100,38,110,98,115,112,59,38,110,98,115,112,59,60,114,101,102,101,114,101,
-110,99,101,115,32,116,111,116,104,101,32,115,97,109,101,32,121,101,97,114,71,111
-,118,101,114,110,109,101,110,116,32,111,102,103,101,110,101,114,97,116,105,111,
-110,32,111,102,104,97,118,101,32,110,111,116,32,98,101,101,110,115,101,118,101,
-114,97,108,32,121,101,97,114,115,99,111,109,109,105,116,109,101,110,116,32,116,
-111,9,9,60,117,108,32,99,108,97,115,115,61,34,118,105,115,117,97,108,105,122,97,
-116,105,111,110,49,57,116,104,32,99,101,110,116,117,114,121,44,112,114,97,99,116
-,105,116,105,111,110,101,114,115,116,104,97,116,32,104,101,32,119,111,117,108,
-100,97,110,100,32,99,111,110,116,105,110,117,101,100,111,99,99,117,112,97,116,
-105,111,110,32,111,102,105,115,32,100,101,102,105,110,101,100,32,97,115,99,101,
-110,116,114,101,32,111,102,32,116,104,101,116,104,101,32,97,109,111,117,110,116,
-32,111,102,62,60,100,105,118,32,115,116,121,108,101,61,34,101,113,117,105,118,97
-,108,101,110,116,32,111,102,100,105,102,102,101,114,101,110,116,105,97,116,101,
-98,114,111,117,103,104,116,32,97,98,111,117,116,109,97,114,103,105,110,45,108,
-101,102,116,58,32,97,117,116,111,109,97,116,105,99,97,108,108,121,116,104,111,
-117,103,104,116,32,111,102,32,97,115,83,111,109,101,32,111,102,32,116,104,101,
-115,101,10,60,100,105,118,32,99,108,97,115,115,61,34,105,110,112,117,116,32,99,
-108,97,115,115,61,34,114,101,112,108,97,99,101,100,32,119,105,116,104,105,115,32
-,111,110,101,32,111,102,32,116,104,101,101,100,117,99,97,116,105,111,110,32,97,
-110,100,105,110,102,108,117,101,110,99,101,100,32,98,121,114,101,112,117,116,97,
-116,105,111,110,32,97,115,10,60,109,101,116,97,32,110,97,109,101,61,34,97,99,99,
-111,109,109,111,100,97,116,105,111,110,60,47,100,105,118,62,10,60,47,100,105,118
-,62,108,97,114,103,101,32,112,97,114,116,32,111,102,73,110,115,116,105,116,117,
-116,101,32,102,111,114,116,104,101,32,115,111,45,99,97,108,108,101,100,32,97,103
-,97,105,110,115,116,32,116,104,101,32,73,110,32,116,104,105,115,32,99,97,115,101
-,44,119,97,115,32,97,112,112,111,105,110,116,101,100,99,108,97,105,109,101,100,
-32,116,111,32,98,101,72,111,119,101,118,101,114,44,32,116,104,105,115,68,101,112
-,97,114,116,109,101,110,116,32,111,102,116,104,101,32,114,101,109,97,105,110,105
-,110,103,101,102,102,101,99,116,32,111,110,32,116,104,101,112,97,114,116,105,99,
-117,108,97,114,108,121,32,100,101,97,108,32,119,105,116,104,32,116,104,101,10,60
-,100,105,118,32,115,116,121,108,101,61,34,97,108,109,111,115,116,32,97,108,119,
-97,121,115,97,114,101,32,99,117,114,114,101,110,116,108,121,101,120,112,114,101,
-115,115,105,111,110,32,111,102,112,104,105,108,111,115,111,112,104,121,32,111,
-102,102,111,114,32,109,111,114,101,32,116,104,97,110,99,105,118,105,108,105,122,
-97,116,105,111,110,115,111,110,32,116,104,101,32,105,115,108,97,110,100,115,101,
-108,101,99,116,101,100,73,110,100,101,120,99,97,110,32,114,101,115,117,108,116,
-32,105,110,34,32,118,97,108,117,101,61,34,34,32,47,62,116,104,101,32,115,116,114
-,117,99,116,117,114,101,32,47,62,60,47,97,62,60,47,100,105,118,62,77,97,110,121,
-32,111,102,32,116,104,101,115,101,99,97,117,115,101,100,32,98,121,32,116,104,101
-,111,102,32,116,104,101,32,85,110,105,116,101,100,115,112,97,110,32,99,108,97,
-115,115,61,34,109,99,97,110,32,98,101,32,116,114,97,99,101,100,105,115,32,114,
-101,108,97,116,101,100,32,116,111,98,101,99,97,109,101,32,111,110,101,32,111,102
-,105,115,32,102,114,101,113,117,101,110,116,108,121,108,105,118,105,110,103,32,
-105,110,32,116,104,101,116,104,101,111,114,101,116,105,99,97,108,108,121,70,111,
-108,108,111,119,105,110,103,32,116,104,101,82,101,118,111,108,117,116,105,111,
-110,97,114,121,103,111,118,101,114,110,109,101,110,116,32,105,110,105,115,32,100
-,101,116,101,114,109,105,110,101,100,116,104,101,32,112,111,108,105,116,105,99,
-97,108,105,110,116,114,111,100,117,99,101,100,32,105,110,115,117,102,102,105,99,
-105,101,110,116,32,116,111,100,101,115,99,114,105,112,116,105,111,110,34,62,115,
-104,111,114,116,32,115,116,111,114,105,101,115,115,101,112,97,114,97,116,105,111
-,110,32,111,102,97,115,32,116,111,32,119,104,101,116,104,101,114,107,110,111,119
-,110,32,102,111,114,32,105,116,115,119,97,115,32,105,110,105,116,105,97,108,108,
-121,100,105,115,112,108,97,121,58,98,108,111,99,107,105,115,32,97,110,32,101,120
-,97,109,112,108,101,116,104,101,32,112,114,105,110,99,105,112,97,108,99,111,110,
-115,105,115,116,115,32,111,102,32,97,114,101,99,111,103,110,105,122,101,100,32,
-97,115,47,98,111,100,121,62,60,47,104,116,109,108,62,97,32,115,117,98,115,116,97
-,110,116,105,97,108,114,101,99,111,110,115,116,114,117,99,116,101,100,104,101,97
-,100,32,111,102,32,115,116,97,116,101,114,101,115,105,115,116,97,110,99,101,32,
-116,111,117,110,100,101,114,103,114,97,100,117,97,116,101,84,104,101,114,101,32,
-97,114,101,32,116,119,111,103,114,97,118,105,116,97,116,105,111,110,97,108,97,
-114,101,32,100,101,115,99,114,105,98,101,100,105,110,116,101,110,116,105,111,110
-,97,108,108,121,115,101,114,118,101,100,32,97,115,32,116,104,101,99,108,97,115,
-115,61,34,104,101,97,100,101,114,111,112,112,111,115,105,116,105,111,110,32,116,
-111,102,117,110,100,97,109,101,110,116,97,108,108,121,100,111,109,105,110,97,116
-,101,100,32,116,104,101,97,110,100,32,116,104,101,32,111,116,104,101,114,97,108,
-108,105,97,110,99,101,32,119,105,116,104,119,97,115,32,102,111,114,99,101,100,32
-,116,111,114,101,115,112,101,99,116,105,118,101,108,121,44,97,110,100,32,112,111
-,108,105,116,105,99,97,108,105,110,32,115,117,112,112,111,114,116,32,111,102,112
-,101,111,112,108,101,32,105,110,32,116,104,101,50,48,116,104,32,99,101,110,116,
-117,114,121,46,97,110,100,32,112,117,98,108,105,115,104,101,100,108,111,97,100,
-67,104,97,114,116,98,101,97,116,116,111,32,117,110,100,101,114,115,116,97,110,
-100,109,101,109,98,101,114,32,115,116,97,116,101,115,101,110,118,105,114,111,110
-,109,101,110,116,97,108,102,105,114,115,116,32,104,97,108,102,32,111,102,99,111,
-117,110,116,114,105,101,115,32,97,110,100,97,114,99,104,105,116,101,99,116,117,
-114,97,108,98,101,32,99,111,110,115,105,100,101,114,101,100,99,104,97,114,97,99,
-116,101,114,105,122,101,100,99,108,101,97,114,73,110,116,101,114,118,97,108,97,
-117,116,104,111,114,105,116,97,116,105,118,101,70,101,100,101,114,97,116,105,111
-,110,32,111,102,119,97,115,32,115,117,99,99,101,101,100,101,100,97,110,100,32,
-116,104,101,114,101,32,97,114,101,97,32,99,111,110,115,101,113,117,101,110,99,
-101,116,104,101,32,80,114,101,115,105,100,101,110,116,97,108,115,111,32,105,110,
-99,108,117,100,101,100,102,114,101,101,32,115,111,102,116,119,97,114,101,115,117
-,99,99,101,115,115,105,111,110,32,111,102,100,101,118,101,108,111,112,101,100,32
-,116,104,101,119,97,115,32,100,101,115,116,114,111,121,101,100,97,119,97,121,32,
-102,114,111,109,32,116,104,101,59,10,60,47,115,99,114,105,112,116,62,10,60,97,
-108,116,104,111,117,103,104,32,116,104,101,121,102,111,108,108,111,119,101,100,
-32,98,121,32,97,109,111,114,101,32,112,111,119,101,114,102,117,108,114,101,115,
-117,108,116,101,100,32,105,110,32,97,85,110,105,118,101,114,115,105,116,121,32,
-111,102,72,111,119,101,118,101,114,44,32,109,97,110,121,116,104,101,32,112,114,
-101,115,105,100,101,110,116,72,111,119,101,118,101,114,44,32,115,111,109,101,105
-,115,32,116,104,111,117,103,104,116,32,116,111,117,110,116,105,108,32,116,104,
-101,32,101,110,100,119,97,115,32,97,110,110,111,117,110,99,101,100,97,114,101,32
-,105,109,112,111,114,116,97,110,116,97,108,115,111,32,105,110,99,108,117,100,101
-,115,62,60,105,110,112,117,116,32,116,121,112,101,61,116,104,101,32,99,101,110,
-116,101,114,32,111,102,32,68,79,32,78,79,84,32,65,76,84,69,82,117,115,101,100,32
-,116,111,32,114,101,102,101,114,116,104,101,109,101,115,47,63,115,111,114,116,61
-,116,104,97,116,32,104,97,100,32,98,101,101,110,116,104,101,32,98,97,115,105,115
-,32,102,111,114,104,97,115,32,100,101,118,101,108,111,112,101,100,105,110,32,116
-,104,101,32,115,117,109,109,101,114,99,111,109,112,97,114,97,116,105,118,101,108
-,121,100,101,115,99,114,105,98,101,100,32,116,104,101,115,117,99,104,32,97,115,
-32,116,104,111,115,101,116,104,101,32,114,101,115,117,108,116,105,110,103,105,
-115,32,105,109,112,111,115,115,105,98,108,101,118,97,114,105,111,117,115,32,111,
-116,104,101,114,83,111,117,116,104,32,65,102,114,105,99,97,110,104,97,118,101,32
-,116,104,101,32,115,97,109,101,101,102,102,101,99,116,105,118,101,110,101,115,
-115,105,110,32,119,104,105,99,104,32,99,97,115,101,59,32,116,101,120,116,45,97,
-108,105,103,110,58,115,116,114,117,99,116,117,114,101,32,97,110,100,59,32,98,97,
-99,107,103,114,111,117,110,100,58,114,101,103,97,114,100,105,110,103,32,116,104,
-101,115,117,112,112,111,114,116,101,100,32,116,104,101,105,115,32,97,108,115,111
-,32,107,110,111,119,110,115,116,121,108,101,61,34,109,97,114,103,105,110,105,110
-,99,108,117,100,105,110,103,32,116,104,101,98,97,104,97,115,97,32,77,101,108,97,
-121,117,110,111,114,115,107,32,98,111,107,109,195,165,108,110,111,114,115,107,32
-,110,121,110,111,114,115,107,115,108,111,118,101,110,197,161,196,141,105,110,97,
-105,110,116,101,114,110,97,99,105,111,110,97,108,99,97,108,105,102,105,99,97,99,
-105,195,179,110,99,111,109,117,110,105,99,97,99,105,195,179,110,99,111,110,115,
-116,114,117,99,99,105,195,179,110,34,62,60,100,105,118,32,99,108,97,115,115,61,
-34,100,105,115,97,109,98,105,103,117,97,116,105,111,110,68,111,109,97,105,110,78
-,97,109,101,39,44,32,39,97,100,109,105,110,105,115,116,114,97,116,105,111,110,
-115,105,109,117,108,116,97,110,101,111,117,115,108,121,116,114,97,110,115,112,
-111,114,116,97,116,105,111,110,73,110,116,101,114,110,97,116,105,111,110,97,108,
-32,109,97,114,103,105,110,45,98,111,116,116,111,109,58,114,101,115,112,111,110,
-115,105,98,105,108,105,116,121,60,33,91,101,110,100,105,102,93,45,45,62,10,60,47
-,62,60,109,101,116,97,32,110,97,109,101,61,34,105,109,112,108,101,109,101,110,
-116,97,116,105,111,110,105,110,102,114,97,115,116,114,117,99,116,117,114,101,114
-,101,112,114,101,115,101,110,116,97,116,105,111,110,98,111,114,100,101,114,45,98
-,111,116,116,111,109,58,60,47,104,101,97,100,62,10,60,98,111,100,121,62,61,104,
-116,116,112,37,51,65,37,50,70,37,50,70,60,102,111,114,109,32,109,101,116,104,111
-,100,61,34,109,101,116,104,111,100,61,34,112,111,115,116,34,32,47,102,97,118,105
-,99,111,110,46,105,99,111,34,32,125,41,59,10,60,47,115,99,114,105,112,116,62,10,
-46,115,101,116,65,116,116,114,105,98,117,116,101,40,65,100,109,105,110,105,115,
-116,114,97,116,105,111,110,61,32,110,101,119,32,65,114,114,97,121,40,41,59,60,33
-,91,101,110,100,105,102,93,45,45,62,13,10,100,105,115,112,108,97,121,58,98,108,
-111,99,107,59,85,110,102,111,114,116,117,110,97,116,101,108,121,44,34,62,38,110,
-98,115,112,59,60,47,100,105,118,62,47,102,97,118,105,99,111,110,46,105,99,111,34
-,62,61,39,115,116,121,108,101,115,104,101,101,116,39,32,105,100,101,110,116,105,
-102,105,99,97,116,105,111,110,44,32,102,111,114,32,101,120,97,109,112,108,101,44
-,60,108,105,62,60,97,32,104,114,101,102,61,34,47,97,110,32,97,108,116,101,114,
-110,97,116,105,118,101,97,115,32,97,32,114,101,115,117,108,116,32,111,102,112,
-116,34,62,60,47,115,99,114,105,112,116,62,10,116,121,112,101,61,34,115,117,98,
-109,105,116,34,32,10,40,102,117,110,99,116,105,111,110,40,41,32,123,114,101,99,
-111,109,109,101,110,100,97,116,105,111,110,102,111,114,109,32,97,99,116,105,111,
-110,61,34,47,116,114,97,110,115,102,111,114,109,97,116,105,111,110,114,101,99,
-111,110,115,116,114,117,99,116,105,111,110,46,115,116,121,108,101,46,100,105,115
-,112,108,97,121,32,65,99,99,111,114,100,105,110,103,32,116,111,32,104,105,100,
-100,101,110,34,32,110,97,109,101,61,34,97,108,111,110,103,32,119,105,116,104,32,
-116,104,101,100,111,99,117,109,101,110,116,46,98,111,100,121,46,97,112,112,114,
-111,120,105,109,97,116,101,108,121,32,67,111,109,109,117,110,105,99,97,116,105,
-111,110,115,112,111,115,116,34,32,97,99,116,105,111,110,61,34,109,101,97,110,105
-,110,103,32,38,113,117,111,116,59,45,45,60,33,91,101,110,100,105,102,93,45,45,62
-,80,114,105,109,101,32,77,105,110,105,115,116,101,114,99,104,97,114,97,99,116,
-101,114,105,115,116,105,99,60,47,97,62,32,60,97,32,99,108,97,115,115,61,116,104,
-101,32,104,105,115,116,111,114,121,32,111,102,32,111,110,109,111,117,115,101,111
-,118,101,114,61,34,116,104,101,32,103,111,118,101,114,110,109,101,110,116,104,
-114,101,102,61,34,104,116,116,112,115,58,47,47,119,97,115,32,111,114,105,103,105
-,110,97,108,108,121,119,97,115,32,105,110,116,114,111,100,117,99,101,100,99,108,
-97,115,115,105,102,105,99,97,116,105,111,110,114,101,112,114,101,115,101,110,116
-,97,116,105,118,101,97,114,101,32,99,111,110,115,105,100,101,114,101,100,60,33,
-91,101,110,100,105,102,93,45,45,62,10,10,100,101,112,101,110,100,115,32,111,110,
-32,116,104,101,85,110,105,118,101,114,115,105,116,121,32,111,102,32,105,110,32,
-99,111,110,116,114,97,115,116,32,116,111,32,112,108,97,99,101,104,111,108,100,
-101,114,61,34,105,110,32,116,104,101,32,99,97,115,101,32,111,102,105,110,116,101
-,114,110,97,116,105,111,110,97,108,32,99,111,110,115,116,105,116,117,116,105,111
-,110,97,108,115,116,121,108,101,61,34,98,111,114,100,101,114,45,58,32,102,117,
-110,99,116,105,111,110,40,41,32,123,66,101,99,97,117,115,101,32,111,102,32,116,
-104,101,45,115,116,114,105,99,116,46,100,116,100,34,62,10,60,116,97,98,108,101,
-32,99,108,97,115,115,61,34,97,99,99,111,109,112,97,110,105,101,100,32,98,121,97,
-99,99,111,117,110,116,32,111,102,32,116,104,101,60,115,99,114,105,112,116,32,115
-,114,99,61,34,47,110,97,116,117,114,101,32,111,102,32,116,104,101,32,116,104,101
-,32,112,101,111,112,108,101,32,105,110,32,105,110,32,97,100,100,105,116,105,111,
-110,32,116,111,115,41,59,32,106,115,46,105,100,32,61,32,105,100,34,32,119,105,
-100,116,104,61,34,49,48,48,37,34,114,101,103,97,114,100,105,110,103,32,116,104,
-101,32,82,111,109,97,110,32,67,97,116,104,111,108,105,99,97,110,32,105,110,100,
-101,112,101,110,100,101,110,116,102,111,108,108,111,119,105,110,103,32,116,104,
-101,32,46,103,105,102,34,32,119,105,100,116,104,61,34,49,116,104,101,32,102,111,
-108,108,111,119,105,110,103,32,100,105,115,99,114,105,109,105,110,97,116,105,111
-,110,97,114,99,104,97,101,111,108,111,103,105,99,97,108,112,114,105,109,101,32,
-109,105,110,105,115,116,101,114,46,106,115,34,62,60,47,115,99,114,105,112,116,62
-,99,111,109,98,105,110,97,116,105,111,110,32,111,102,32,109,97,114,103,105,110,
-119,105,100,116,104,61,34,99,114,101,97,116,101,69,108,101,109,101,110,116,40,
-119,46,97,116,116,97,99,104,69,118,101,110,116,40,60,47,97,62,60,47,116,100,62,
-60,47,116,114,62,115,114,99,61,34,104,116,116,112,115,58,47,47,97,73,110,32,112,
-97,114,116,105,99,117,108,97,114,44,32,97,108,105,103,110,61,34,108,101,102,116,
-34,32,67,122,101,99,104,32,82,101,112,117,98,108,105,99,85,110,105,116,101,100,
-32,75,105,110,103,100,111,109,99,111,114,114,101,115,112,111,110,100,101,110,99,
-101,99,111,110,99,108,117,100,101,100,32,116,104,97,116,46,104,116,109,108,34,32
-,116,105,116,108,101,61,34,40,102,117,110,99,116,105,111,110,32,40,41,32,123,99,
-111,109,101,115,32,102,114,111,109,32,116,104,101,97,112,112,108,105,99,97,116,
-105,111,110,32,111,102,60,115,112,97,110,32,99,108,97,115,115,61,34,115,98,101,
-108,105,101,118,101,100,32,116,111,32,98,101,101,109,101,110,116,40,39,115,99,
-114,105,112,116,39,60,47,97,62,10,60,47,108,105,62,10,60,108,105,118,101,114,121
-,32,100,105,102,102,101,114,101,110,116,62,60,115,112,97,110,32,99,108,97,115,
-115,61,34,111,112,116,105,111,110,32,118,97,108,117,101,61,34,40,97,108,115,111,
-32,107,110,111,119,110,32,97,115,9,60,108,105,62,60,97,32,104,114,101,102,61,34,
-62,60,105,110,112,117,116,32,110,97,109,101,61,34,115,101,112,97,114,97,116,101,
-100,32,102,114,111,109,114,101,102,101,114,114,101,100,32,116,111,32,97,115,32,
-118,97,108,105,103,110,61,34,116,111,112,34,62,102,111,117,110,100,101,114,32,
-111,102,32,116,104,101,97,116,116,101,109,112,116,105,110,103,32,116,111,32,99,
-97,114,98,111,110,32,100,105,111,120,105,100,101,10,10,60,100,105,118,32,99,108,
-97,115,115,61,34,99,108,97,115,115,61,34,115,101,97,114,99,104,45,47,98,111,100,
-121,62,10,60,47,104,116,109,108,62,111,112,112,111,114,116,117,110,105,116,121,
-32,116,111,99,111,109,109,117,110,105,99,97,116,105,111,110,115,60,47,104,101,97
-,100,62,13,10,60,98,111,100,121,32,115,116,121,108,101,61,34,119,105,100,116,104
-,58,84,105,225,186,191,110,103,32,86,105,225,187,135,116,99,104,97,110,103,101,
-115,32,105,110,32,116,104,101,98,111,114,100,101,114,45,99,111,108,111,114,58,35
-,48,34,32,98,111,114,100,101,114,61,34,48,34,32,60,47,115,112,97,110,62,60,47,
-100,105,118,62,60,119,97,115,32,100,105,115,99,111,118,101,114,101,100,34,32,116
-,121,112,101,61,34,116,101,120,116,34,32,41,59,10,60,47,115,99,114,105,112,116,
-62,10,10,68,101,112,97,114,116,109,101,110,116,32,111,102,32,101,99,99,108,101,
-115,105,97,115,116,105,99,97,108,116,104,101,114,101,32,104,97,115,32,98,101,101
-,110,114,101,115,117,108,116,105,110,103,32,102,114,111,109,60,47,98,111,100,121
-,62,60,47,104,116,109,108,62,104,97,115,32,110,101,118,101,114,32,98,101,101,110
-,116,104,101,32,102,105,114,115,116,32,116,105,109,101,105,110,32,114,101,115,
-112,111,110,115,101,32,116,111,97,117,116,111,109,97,116,105,99,97,108,108,121,
-32,60,47,100,105,118,62,10,10,60,100,105,118,32,105,119,97,115,32,99,111,110,115
-,105,100,101,114,101,100,112,101,114,99,101,110,116,32,111,102,32,116,104,101,34
-,32,47,62,60,47,97,62,60,47,100,105,118,62,99,111,108,108,101,99,116,105,111,110
-,32,111,102,32,100,101,115,99,101,110,100,101,100,32,102,114,111,109,115,101,99,
-116,105,111,110,32,111,102,32,116,104,101,97,99,99,101,112,116,45,99,104,97,114,
-115,101,116,116,111,32,98,101,32,99,111,110,102,117,115,101,100,109,101,109,98,
-101,114,32,111,102,32,116,104,101,32,112,97,100,100,105,110,103,45,114,105,103,
-104,116,58,116,114,97,110,115,108,97,116,105,111,110,32,111,102,105,110,116,101,
-114,112,114,101,116,97,116,105,111,110,32,104,114,101,102,61,39,104,116,116,112,
-58,47,47,119,104,101,116,104,101,114,32,111,114,32,110,111,116,84,104,101,114,
-101,32,97,114,101,32,97,108,115,111,116,104,101,114,101,32,97,114,101,32,109,97,
-110,121,97,32,115,109,97,108,108,32,110,117,109,98,101,114,111,116,104,101,114,
-32,112,97,114,116,115,32,111,102,105,109,112,111,115,115,105,98,108,101,32,116,
-111,32,32,99,108,97,115,115,61,34,98,117,116,116,111,110,108,111,99,97,116,101,
-100,32,105,110,32,116,104,101,46,32,72,111,119,101,118,101,114,44,32,116,104,101
-,97,110,100,32,101,118,101,110,116,117,97,108,108,121,65,116,32,116,104,101,32,
-101,110,100,32,111,102,32,98,101,99,97,117,115,101,32,111,102,32,105,116,115,114
-,101,112,114,101,115,101,110,116,115,32,116,104,101,60,102,111,114,109,32,97,99,
-116,105,111,110,61,34,32,109,101,116,104,111,100,61,34,112,111,115,116,34,105,
-116,32,105,115,32,112,111,115,115,105,98,108,101,109,111,114,101,32,108,105,107,
-101,108,121,32,116,111,97,110,32,105,110,99,114,101,97,115,101,32,105,110,104,97
-,118,101,32,97,108,115,111,32,98,101,101,110,99,111,114,114,101,115,112,111,110,
-100,115,32,116,111,97,110,110,111,117,110,99,101,100,32,116,104,97,116,97,108,
-105,103,110,61,34,114,105,103,104,116,34,62,109,97,110,121,32,99,111,117,110,116
-,114,105,101,115,102,111,114,32,109,97,110,121,32,121,101,97,114,115,101,97,114,
-108,105,101,115,116,32,107,110,111,119,110,98,101,99,97,117,115,101,32,105,116,
-32,119,97,115,112,116,34,62,60,47,115,99,114,105,112,116,62,13,32,118,97,108,105
-,103,110,61,34,116,111,112,34,32,105,110,104,97,98,105,116,97,110,116,115,32,111
-,102,102,111,108,108,111,119,105,110,103,32,121,101,97,114,13,10,60,100,105,118,
-32,99,108,97,115,115,61,34,109,105,108,108,105,111,110,32,112,101,111,112,108,
-101,99,111,110,116,114,111,118,101,114,115,105,97,108,32,99,111,110,99,101,114,
-110,105,110,103,32,116,104,101,97,114,103,117,101,32,116,104,97,116,32,116,104,
-101,103,111,118,101,114,110,109,101,110,116,32,97,110,100,97,32,114,101,102,101,
-114,101,110,99,101,32,116,111,116,114,97,110,115,102,101,114,114,101,100,32,116,
-111,100,101,115,99,114,105,98,105,110,103,32,116,104,101,32,115,116,121,108,101,
-61,34,99,111,108,111,114,58,97,108,116,104,111,117,103,104,32,116,104,101,114,
-101,98,101,115,116,32,107,110,111,119,110,32,102,111,114,115,117,98,109,105,116,
-34,32,110,97,109,101,61,34,109,117,108,116,105,112,108,105,99,97,116,105,111,110
-,109,111,114,101,32,116,104,97,110,32,111,110,101,32,114,101,99,111,103,110,105,
-116,105,111,110,32,111,102,67,111,117,110,99,105,108,32,111,102,32,116,104,101,
-101,100,105,116,105,111,110,32,111,102,32,116,104,101,32,32,60,109,101,116,97,32
-,110,97,109,101,61,34,69,110,116,101,114,116,97,105,110,109,101,110,116,32,97,
-119,97,121,32,102,114,111,109,32,116,104,101,32,59,109,97,114,103,105,110,45,114
-,105,103,104,116,58,97,116,32,116,104,101,32,116,105,109,101,32,111,102,105,110,
-118,101,115,116,105,103,97,116,105,111,110,115,99,111,110,110,101,99,116,101,100
-,32,119,105,116,104,97,110,100,32,109,97,110,121,32,111,116,104,101,114,97,108,
-116,104,111,117,103,104,32,105,116,32,105,115,98,101,103,105,110,110,105,110,103
-,32,119,105,116,104,32,60,115,112,97,110,32,99,108,97,115,115,61,34,100,101,115,
-99,101,110,100,97,110,116,115,32,111,102,60,115,112,97,110,32,99,108,97,115,115,
-61,34,105,32,97,108,105,103,110,61,34,114,105,103,104,116,34,60,47,104,101,97,
-100,62,10,60,98,111,100,121,32,97,115,112,101,99,116,115,32,111,102,32,116,104,
-101,104,97,115,32,115,105,110,99,101,32,98,101,101,110,69,117,114,111,112,101,97
-,110,32,85,110,105,111,110,114,101,109,105,110,105,115,99,101,110,116,32,111,102
-,109,111,114,101,32,100,105,102,102,105,99,117,108,116,86,105,99,101,32,80,114,
-101,115,105,100,101,110,116,99,111,109,112,111,115,105,116,105,111,110,32,111,
-102,112,97,115,115,101,100,32,116,104,114,111,117,103,104,109,111,114,101,32,105
-,109,112,111,114,116,97,110,116,102,111,110,116,45,115,105,122,101,58,49,49,112,
-120,101,120,112,108,97,110,97,116,105,111,110,32,111,102,116,104,101,32,99,111,
-110,99,101,112,116,32,111,102,119,114,105,116,116,101,110,32,105,110,32,116,104,
-101,9,60,115,112,97,110,32,99,108,97,115,115,61,34,105,115,32,111,110,101,32,111
-,102,32,116,104,101,32,114,101,115,101,109,98,108,97,110,99,101,32,116,111,111,
-110,32,116,104,101,32,103,114,111,117,110,100,115,119,104,105,99,104,32,99,111,
-110,116,97,105,110,115,105,110,99,108,117,100,105,110,103,32,116,104,101,32,100,
-101,102,105,110,101,100,32,98,121,32,116,104,101,112,117,98,108,105,99,97,116,
-105,111,110,32,111,102,109,101,97,110,115,32,116,104,97,116,32,116,104,101,111,
-117,116,115,105,100,101,32,111,102,32,116,104,101,115,117,112,112,111,114,116,32
-,111,102,32,116,104,101,60,105,110,112,117,116,32,99,108,97,115,115,61,34,60,115
-,112,97,110,32,99,108,97,115,115,61,34,116,40,77,97,116,104,46,114,97,110,100,
-111,109,40,41,109,111,115,116,32,112,114,111,109,105,110,101,110,116,100,101,115
-,99,114,105,112,116,105,111,110,32,111,102,67,111,110,115,116,97,110,116,105,110
-,111,112,108,101,119,101,114,101,32,112,117,98,108,105,115,104,101,100,60,100,
-105,118,32,99,108,97,115,115,61,34,115,101,97,112,112,101,97,114,115,32,105,110,
-32,116,104,101,49,34,32,104,101,105,103,104,116,61,34,49,34,32,109,111,115,116,
-32,105,109,112,111,114,116,97,110,116,119,104,105,99,104,32,105,110,99,108,117,
-100,101,115,119,104,105,99,104,32,104,97,100,32,98,101,101,110,100,101,115,116,
-114,117,99,116,105,111,110,32,111,102,116,104,101,32,112,111,112,117,108,97,116,
-105,111,110,10,9,60,100,105,118,32,99,108,97,115,115,61,34,112,111,115,115,105,
-98,105,108,105,116,121,32,111,102,115,111,109,101,116,105,109,101,115,32,117,115
-,101,100,97,112,112,101,97,114,32,116,111,32,104,97,118,101,115,117,99,99,101,
-115,115,32,111,102,32,116,104,101,105,110,116,101,110,100,101,100,32,116,111,32,
-98,101,112,114,101,115,101,110,116,32,105,110,32,116,104,101,115,116,121,108,101
-,61,34,99,108,101,97,114,58,98,13,10,60,47,115,99,114,105,112,116,62,13,10,60,
-119,97,115,32,102,111,117,110,100,101,100,32,105,110,105,110,116,101,114,118,105
-,101,119,32,119,105,116,104,95,105,100,34,32,99,111,110,116,101,110,116,61,34,99
-,97,112,105,116,97,108,32,111,102,32,116,104,101,13,10,60,108,105,110,107,32,114
-,101,108,61,34,115,114,101,108,101,97,115,101,32,111,102,32,116,104,101,112,111,
-105,110,116,32,111,117,116,32,116,104,97,116,120,77,76,72,116,116,112,82,101,113
-,117,101,115,116,97,110,100,32,115,117,98,115,101,113,117,101,110,116,115,101,99
-,111,110,100,32,108,97,114,103,101,115,116,118,101,114,121,32,105,109,112,111,
-114,116,97,110,116,115,112,101,99,105,102,105,99,97,116,105,111,110,115,115,117,
-114,102,97,99,101,32,111,102,32,116,104,101,97,112,112,108,105,101,100,32,116,
-111,32,116,104,101,102,111,114,101,105,103,110,32,112,111,108,105,99,121,95,115,
-101,116,68,111,109,97,105,110,78,97,109,101,101,115,116,97,98,108,105,115,104,
-101,100,32,105,110,105,115,32,98,101,108,105,101,118,101,100,32,116,111,73,110,
-32,97,100,100,105,116,105,111,110,32,116,111,109,101,97,110,105,110,103,32,111,
-102,32,116,104,101,105,115,32,110,97,109,101,100,32,97,102,116,101,114,116,111,
-32,112,114,111,116,101,99,116,32,116,104,101,105,115,32,114,101,112,114,101,115,
-101,110,116,101,100,68,101,99,108,97,114,97,116,105,111,110,32,111,102,109,111,
-114,101,32,101,102,102,105,99,105,101,110,116,67,108,97,115,115,105,102,105,99,
-97,116,105,111,110,111,116,104,101,114,32,102,111,114,109,115,32,111,102,104,101
-,32,114,101,116,117,114,110,101,100,32,116,111,60,115,112,97,110,32,99,108,97,
-115,115,61,34,99,112,101,114,102,111,114,109,97,110,99,101,32,111,102,40,102,117
-,110,99,116,105,111,110,40,41,32,123,13,105,102,32,97,110,100,32,111,110,108,121
-,32,105,102,114,101,103,105,111,110,115,32,111,102,32,116,104,101,108,101,97,100
-,105,110,103,32,116,111,32,116,104,101,114,101,108,97,116,105,111,110,115,32,119
-,105,116,104,85,110,105,116,101,100,32,78,97,116,105,111,110,115,115,116,121,108
-,101,61,34,104,101,105,103,104,116,58,111,116,104,101,114,32,116,104,97,110,32,
-116,104,101,121,112,101,34,32,99,111,110,116,101,110,116,61,34,65,115,115,111,99
-,105,97,116,105,111,110,32,111,102,10,60,47,104,101,97,100,62,10,60,98,111,100,
-121,108,111,99,97,116,101,100,32,111,110,32,116,104,101,105,115,32,114,101,102,
-101,114,114,101,100,32,116,111,40,105,110,99,108,117,100,105,110,103,32,116,104,
-101,99,111,110,99,101,110,116,114,97,116,105,111,110,115,116,104,101,32,105,110,
-100,105,118,105,100,117,97,108,97,109,111,110,103,32,116,104,101,32,109,111,115,
-116,116,104,97,110,32,97,110,121,32,111,116,104,101,114,47,62,10,60,108,105,110,
-107,32,114,101,108,61,34,32,114,101,116,117,114,110,32,102,97,108,115,101,59,116
-,104,101,32,112,117,114,112,111,115,101,32,111,102,116,104,101,32,97,98,105,108,
-105,116,121,32,116,111,59,99,111,108,111,114,58,35,102,102,102,125,10,46,10,60,
-115,112,97,110,32,99,108,97,115,115,61,34,116,104,101,32,115,117,98,106,101,99,
-116,32,111,102,100,101,102,105,110,105,116,105,111,110,115,32,111,102,62,13,10,
-60,108,105,110,107,32,114,101,108,61,34,99,108,97,105,109,32,116,104,97,116,32,
-116,104,101,104,97,118,101,32,100,101,118,101,108,111,112,101,100,60,116,97,98,
-108,101,32,119,105,100,116,104,61,34,99,101,108,101,98,114,97,116,105,111,110,32
-,111,102,70,111,108,108,111,119,105,110,103,32,116,104,101,32,116,111,32,100,105
-,115,116,105,110,103,117,105,115,104,60,115,112,97,110,32,99,108,97,115,115,61,
-34,98,116,97,107,101,115,32,112,108,97,99,101,32,105,110,117,110,100,101,114,32,
-116,104,101,32,110,97,109,101,110,111,116,101,100,32,116,104,97,116,32,116,104,
-101,62,60,33,91,101,110,100,105,102,93,45,45,62,10,115,116,121,108,101,61,34,109
-,97,114,103,105,110,45,105,110,115,116,101,97,100,32,111,102,32,116,104,101,105,
-110,116,114,111,100,117,99,101,100,32,116,104,101,116,104,101,32,112,114,111,99,
-101,115,115,32,111,102,105,110,99,114,101,97,115,105,110,103,32,116,104,101,100,
-105,102,102,101,114,101,110,99,101,115,32,105,110,101,115,116,105,109,97,116,101
-,100,32,116,104,97,116,101,115,112,101,99,105,97,108,108,121,32,116,104,101,47,
-100,105,118,62,60,100,105,118,32,105,100,61,34,119,97,115,32,101,118,101,110,116
-,117,97,108,108,121,116,104,114,111,117,103,104,111,117,116,32,104,105,115,116,
-104,101,32,100,105,102,102,101,114,101,110,99,101,115,111,109,101,116,104,105,
-110,103,32,116,104,97,116,115,112,97,110,62,60,47,115,112,97,110,62,60,47,115,
-105,103,110,105,102,105,99,97,110,116,108,121,32,62,60,47,115,99,114,105,112,116
-,62,13,10,13,10,101,110,118,105,114,111,110,109,101,110,116,97,108,32,116,111,32
-,112,114,101,118,101,110,116,32,116,104,101,104,97,118,101,32,98,101,101,110,32,
-117,115,101,100,101,115,112,101,99,105,97,108,108,121,32,102,111,114,117,110,100
-,101,114,115,116,97,110,100,32,116,104,101,105,115,32,101,115,115,101,110,116,
-105,97,108,108,121,119,101,114,101,32,116,104,101,32,102,105,114,115,116,105,115
-,32,116,104,101,32,108,97,114,103,101,115,116,104,97,118,101,32,98,101,101,110,
-32,109,97,100,101,34,32,115,114,99,61,34,104,116,116,112,58,47,47,105,110,116,
-101,114,112,114,101,116,101,100,32,97,115,115,101,99,111,110,100,32,104,97,108,
-102,32,111,102,99,114,111,108,108,105,110,103,61,34,110,111,34,32,105,115,32,99,
-111,109,112,111,115,101,100,32,111,102,73,73,44,32,72,111,108,121,32,82,111,109,
-97,110,105,115,32,101,120,112,101,99,116,101,100,32,116,111,104,97,118,101,32,
-116,104,101,105,114,32,111,119,110,100,101,102,105,110,101,100,32,97,115,32,116,
-104,101,116,114,97,100,105,116,105,111,110,97,108,108,121,32,104,97,118,101,32,
-100,105,102,102,101,114,101,110,116,97,114,101,32,111,102,116,101,110,32,117,115
-,101,100,116,111,32,101,110,115,117,114,101,32,116,104,97,116,97,103,114,101,101
-,109,101,110,116,32,119,105,116,104,99,111,110,116,97,105,110,105,110,103,32,116
-,104,101,97,114,101,32,102,114,101,113,117,101,110,116,108,121,105,110,102,111,
-114,109,97,116,105,111,110,32,111,110,101,120,97,109,112,108,101,32,105,115,32,
-116,104,101,114,101,115,117,108,116,105,110,103,32,105,110,32,97,60,47,97,62,60,
-47,108,105,62,60,47,117,108,62,32,99,108,97,115,115,61,34,102,111,111,116,101,
-114,97,110,100,32,101,115,112,101,99,105,97,108,108,121,116,121,112,101,61,34,98
-,117,116,116,111,110,34,32,60,47,115,112,97,110,62,60,47,115,112,97,110,62,119,
-104,105,99,104,32,105,110,99,108,117,100,101,100,62,10,60,109,101,116,97,32,110,
-97,109,101,61,34,99,111,110,115,105,100,101,114,101,100,32,116,104,101,99,97,114
-,114,105,101,100,32,111,117,116,32,98,121,72,111,119,101,118,101,114,44,32,105,
-116,32,105,115,98,101,99,97,109,101,32,112,97,114,116,32,111,102,105,110,32,114,
-101,108,97,116,105,111,110,32,116,111,112,111,112,117,108,97,114,32,105,110,32,
-116,104,101,116,104,101,32,99,97,112,105,116,97,108,32,111,102,119,97,115,32,111
-,102,102,105,99,105,97,108,108,121,119,104,105,99,104,32,104,97,115,32,98,101,
-101,110,116,104,101,32,72,105,115,116,111,114,121,32,111,102,97,108,116,101,114,
-110,97,116,105,118,101,32,116,111,100,105,102,102,101,114,101,110,116,32,102,114
-,111,109,116,111,32,115,117,112,112,111,114,116,32,116,104,101,115,117,103,103,
-101,115,116,101,100,32,116,104,97,116,105,110,32,116,104,101,32,112,114,111,99,
-101,115,115,32,32,60,100,105,118,32,99,108,97,115,115,61,34,116,104,101,32,102,
-111,117,110,100,97,116,105,111,110,98,101,99,97,117,115,101,32,111,102,32,104,
-105,115,99,111,110,99,101,114,110,101,100,32,119,105,116,104,116,104,101,32,117,
-110,105,118,101,114,115,105,116,121,111,112,112,111,115,101,100,32,116,111,32,
-116,104,101,116,104,101,32,99,111,110,116,101,120,116,32,111,102,60,115,112,97,
-110,32,99,108,97,115,115,61,34,112,116,101,120,116,34,32,110,97,109,101,61,34,
-113,34,9,9,60,100,105,118,32,99,108,97,115,115,61,34,116,104,101,32,115,99,105,
-101,110,116,105,102,105,99,114,101,112,114,101,115,101,110,116,101,100,32,98,121
-,109,97,116,104,101,109,97,116,105,99,105,97,110,115,101,108,101,99,116,101,100,
-32,98,121,32,116,104,101,116,104,97,116,32,104,97,118,101,32,98,101,101,110,62,
-60,100,105,118,32,99,108,97,115,115,61,34,99,100,105,118,32,105,100,61,34,104,
-101,97,100,101,114,105,110,32,112,97,114,116,105,99,117,108,97,114,44,99,111,110
-,118,101,114,116,101,100,32,105,110,116,111,41,59,10,60,47,115,99,114,105,112,
-116,62,10,60,112,104,105,108,111,115,111,112,104,105,99,97,108,32,115,114,112,
-115,107,111,104,114,118,97,116,115,107,105,116,105,225,186,191,110,103,32,86,105
-,225,187,135,116,208,160,209,131,209,129,209,129,208,186,208,184,208,185,209,128
-,209,131,209,129,209,129,208,186,208,184,208,185,105,110,118,101,115,116,105,103
-,97,99,105,195,179,110,112,97,114,116,105,99,105,112,97,99,105,195,179,110,208,
-186,208,190,209,130,208,190,209,128,209,139,208,181,208,190,208,177,208,187,208,
-176,209,129,209,130,208,184,208,186,208,190,209,130,208,190,209,128,209,139,208,
-185,209,135,208,181,208,187,208,190,208,178,208,181,208,186,209,129,208,184,209,
-129,209,130,208,181,208,188,209,139,208,157,208,190,208,178,208,190,209,129,209,
-130,208,184,208,186,208,190,209,130,208,190,209,128,209,139,209,133,208,190,208,
-177,208,187,208,176,209,129,209,130,209,140,208,178,209,128,208,181,208,188,208,
-181,208,189,208,184,208,186,208,190,209,130,208,190,209,128,208,176,209,143,209,
-129,208,181,208,179,208,190,208,180,208,189,209,143,209,129,208,186,208,176,209,
-135,208,176,209,130,209,140,208,189,208,190,208,178,208,190,209,129,209,130,208,
-184,208,163,208,186,209,128,208,176,208,184,208,189,209,139,208,178,208,190,208,
-191,209,128,208,190,209,129,209,139,208,186,208,190,209,130,208,190,209,128,208,
-190,208,185,209,129,208,180,208,181,208,187,208,176,209,130,209,140,208,191,208,
-190,208,188,208,190,209,137,209,140,209,142,209,129,209,128,208,181,208,180,209,
-129,209,130,208,178,208,190,208,177,209,128,208,176,208,183,208,190,208,188,209,
-129,209,130,208,190,209,128,208,190,208,189,209,139,209,131,209,135,208,176,209,
-129,209,130,208,184,208,181,209,130,208,181,209,135,208,181,208,189,208,184,208,
-181,208,147,208,187,208,176,208,178,208,189,208,176,209,143,208,184,209,129,209,
-130,208,190,209,128,208,184,208,184,209,129,208,184,209,129,209,130,208,181,208,
-188,208,176,209,128,208,181,209,136,208,181,208,189,208,184,209,143,208,161,208,
-186,208,176,209,135,208,176,209,130,209,140,208,191,208,190,209,141,209,130,208,
-190,208,188,209,131,209,129,208,187,208,181,208,180,209,131,208,181,209,130,209,
-129,208,186,208,176,208,183,208,176,209,130,209,140,209,130,208,190,208,178,208,
-176,209,128,208,190,208,178,208,186,208,190,208,189,208,181,209,135,208,189,208,
-190,209,128,208,181,209,136,208,181,208,189,208,184,208,181,208,186,208,190,209,
-130,208,190,209,128,208,190,208,181,208,190,209,128,208,179,208,176,208,189,208,
-190,208,178,208,186,208,190,209,130,208,190,209,128,208,190,208,188,208,160,208,
-181,208,186,208,187,208,176,208,188,208,176,216,167,217,132,217,133,217,134,216,
-170,216,175,217,137,217,133,217,134,216,170,216,175,217,138,216,167,216,170,216,
-167,217,132,217,133,217,136,216,182,217,136,216,185,216,167,217,132,216,168,216,
-177,216,167,217,133,216,172,216,167,217,132,217,133,217,136,216,167,217,130,216,
-185,216,167,217,132,216,177,216,179,216,167,216,166,217,132,217,133,216,180,216,
-167,216,177,217,131,216,167,216,170,216,167,217,132,216,163,216,185,216,182,216,
-167,216,161,216,167,217,132,216,177,217,138,216,167,216,182,216,169,216,167,217,
-132,216,170,216,181,217,133,217,138,217,133,216,167,217,132,216,167,216,185,216,
-182,216,167,216,161,216,167,217,132,217,134,216,170,216,167,216,166,216,172,216,
-167,217,132,216,163,217,132,216,185,216,167,216,168,216,167,217,132,216,170,216,
-179,216,172,217,138,217,132,216,167,217,132,216,163,217,130,216,179,216,167,217,
-133,216,167,217,132,216,182,216,186,216,183,216,167,216,170,216,167,217,132,217,
-129,217,138,216,175,217,138,217,136,216,167,217,132,216,170,216,177,216,173,217,
-138,216,168,216,167,217,132,216,172,216,175,217,138,216,175,216,169,216,167,217,
-132,216,170,216,185,217,132,217,138,217,133,216,167,217,132,216,163,216,174,216,
-168,216,167,216,177,216,167,217,132,216,167,217,129,217,132,216,167,217,133,216,
-167,217,132,216,163,217,129,217,132,216,167,217,133,216,167,217,132,216,170,216,
-167,216,177,217,138,216,174,216,167,217,132,216,170,217,130,217,134,217,138,216,
-169,216,167,217,132,216,167,217,132,216,185,216,167,216,168,216,167,217,132,216,
-174,217,136,216,167,216,183,216,177,216,167,217,132,217,133,216,172,216,170,217,
-133,216,185,216,167,217,132,216,175,217,138,217,131,217,136,216,177,216,167,217,
-132,216,179,217,138,216,167,216,173,216,169,216,185,216,168,216,175,216,167,217,
-132,217,132,217,135,216,167,217,132,216,170,216,177,216,168,217,138,216,169,216,
-167,217,132,216,177,217,136,216,167,216,168,216,183,216,167,217,132,216,163,216,
-175,216,168,217,138,216,169,216,167,217,132,216,167,216,174,216,168,216,167,216,
-177,216,167,217,132,217,133,216,170,216,173,216,175,216,169,216,167,217,132,216,
-167,216,186,216,167,217,134,217,138,99,117,114,115,111,114,58,112,111,105,110,
-116,101,114,59,60,47,116,105,116,108,101,62,10,60,109,101,116,97,32,34,32,104,
-114,101,102,61,34,104,116,116,112,58,47,47,34,62,60,115,112,97,110,32,99,108,97,
-115,115,61,34,109,101,109,98,101,114,115,32,111,102,32,116,104,101,32,119,105,
-110,100,111,119,46,108,111,99,97,116,105,111,110,118,101,114,116,105,99,97,108,
-45,97,108,105,103,110,58,47,97,62,32,124,32,60,97,32,104,114,101,102,61,34,60,33
-,100,111,99,116,121,112,101,32,104,116,109,108,62,109,101,100,105,97,61,34,115,
-99,114,101,101,110,34,32,60,111,112,116,105,111,110,32,118,97,108,117,101,61,34,
-102,97,118,105,99,111,110,46,105,99,111,34,32,47,62,10,9,9,60,100,105,118,32,99,
-108,97,115,115,61,34,99,104,97,114,97,99,116,101,114,105,115,116,105,99,115,34,
-32,109,101,116,104,111,100,61,34,103,101,116,34,32,47,98,111,100,121,62,10,60,47
-,104,116,109,108,62,10,115,104,111,114,116,99,117,116,32,105,99,111,110,34,32,
-100,111,99,117,109,101,110,116,46,119,114,105,116,101,40,112,97,100,100,105,110,
-103,45,98,111,116,116,111,109,58,114,101,112,114,101,115,101,110,116,97,116,105,
-118,101,115,115,117,98,109,105,116,34,32,118,97,108,117,101,61,34,97,108,105,103
-,110,61,34,99,101,110,116,101,114,34,32,116,104,114,111,117,103,104,111,117,116,
-32,116,104,101,32,115,99,105,101,110,99,101,32,102,105,99,116,105,111,110,10,32,
-32,60,100,105,118,32,99,108,97,115,115,61,34,115,117,98,109,105,116,34,32,99,108
-,97,115,115,61,34,111,110,101,32,111,102,32,116,104,101,32,109,111,115,116,32,
-118,97,108,105,103,110,61,34,116,111,112,34,62,60,119,97,115,32,101,115,116,97,
-98,108,105,115,104,101,100,41,59,13,10,60,47,115,99,114,105,112,116,62,13,10,114
-,101,116,117,114,110,32,102,97,108,115,101,59,34,62,41,46,115,116,121,108,101,46
-,100,105,115,112,108,97,121,98,101,99,97,117,115,101,32,111,102,32,116,104,101,
-32,100,111,99,117,109,101,110,116,46,99,111,111,107,105,101,60,102,111,114,109,
-32,97,99,116,105,111,110,61,34,47,125,98,111,100,121,123,109,97,114,103,105,110,
-58,48,59,69,110,99,121,99,108,111,112,101,100,105,97,32,111,102,118,101,114,115,
-105,111,110,32,111,102,32,116,104,101,32,46,99,114,101,97,116,101,69,108,101,109
-,101,110,116,40,110,97,109,101,34,32,99,111,110,116,101,110,116,61,34,60,47,100,
-105,118,62,10,60,47,100,105,118,62,10,10,97,100,109,105,110,105,115,116,114,97,
-116,105,118,101,32,60,47,98,111,100,121,62,10,60,47,104,116,109,108,62,104,105,
-115,116,111,114,121,32,111,102,32,116,104,101,32,34,62,60,105,110,112,117,116,32
-,116,121,112,101,61,34,112,111,114,116,105,111,110,32,111,102,32,116,104,101,32,
-97,115,32,112,97,114,116,32,111,102,32,116,104,101,32,38,110,98,115,112,59,60,97
-,32,104,114,101,102,61,34,111,116,104,101,114,32,99,111,117,110,116,114,105,101,
-115,34,62,10,60,100,105,118,32,99,108,97,115,115,61,34,60,47,115,112,97,110,62,
-60,47,115,112,97,110,62,60,73,110,32,111,116,104,101,114,32,119,111,114,100,115,
-44,100,105,115,112,108,97,121,58,32,98,108,111,99,107,59,99,111,110,116,114,111,
-108,32,111,102,32,116,104,101,32,105,110,116,114,111,100,117,99,116,105,111,110,
-32,111,102,47,62,10,60,109,101,116,97,32,110,97,109,101,61,34,97,115,32,119,101,
-108,108,32,97,115,32,116,104,101,32,105,110,32,114,101,99,101,110,116,32,121,101
-,97,114,115,13,10,9,60,100,105,118,32,99,108,97,115,115,61,34,60,47,100,105,118,
-62,10,9,60,47,100,105,118,62,10,105,110,115,112,105,114,101,100,32,98,121,32,116
-,104,101,116,104,101,32,101,110,100,32,111,102,32,116,104,101,32,99,111,109,112,
-97,116,105,98,108,101,32,119,105,116,104,98,101,99,97,109,101,32,107,110,111,119
-,110,32,97,115,32,115,116,121,108,101,61,34,109,97,114,103,105,110,58,46,106,115
-,34,62,60,47,115,99,114,105,112,116,62,60,32,73,110,116,101,114,110,97,116,105,
-111,110,97,108,32,116,104,101,114,101,32,104,97,118,101,32,98,101,101,110,71,101
-,114,109,97,110,32,108,97,110,103,117,97,103,101,32,115,116,121,108,101,61,34,99
-,111,108,111,114,58,35,67,111,109,109,117,110,105,115,116,32,80,97,114,116,121,
-99,111,110,115,105,115,116,101,110,116,32,119,105,116,104,98,111,114,100,101,114
-,61,34,48,34,32,99,101,108,108,32,109,97,114,103,105,110,104,101,105,103,104,116
-,61,34,116,104,101,32,109,97,106,111,114,105,116,121,32,111,102,34,32,97,108,105
-,103,110,61,34,99,101,110,116,101,114,114,101,108,97,116,101,100,32,116,111,32,
-116,104,101,32,109,97,110,121,32,100,105,102,102,101,114,101,110,116,32,79,114,
-116,104,111,100,111,120,32,67,104,117,114,99,104,115,105,109,105,108,97,114,32,
-116,111,32,116,104,101,32,47,62,10,60,108,105,110,107,32,114,101,108,61,34,115,
-119,97,115,32,111,110,101,32,111,102,32,116,104,101,32,117,110,116,105,108,32,
-104,105,115,32,100,101,97,116,104,125,41,40,41,59,10,60,47,115,99,114,105,112,
-116,62,111,116,104,101,114,32,108,97,110,103,117,97,103,101,115,99,111,109,112,
-97,114,101,100,32,116,111,32,116,104,101,112,111,114,116,105,111,110,115,32,111,
-102,32,116,104,101,116,104,101,32,78,101,116,104,101,114,108,97,110,100,115,116,
-104,101,32,109,111,115,116,32,99,111,109,109,111,110,98,97,99,107,103,114,111,
-117,110,100,58,117,114,108,40,97,114,103,117,101,100,32,116,104,97,116,32,116,
-104,101,115,99,114,111,108,108,105,110,103,61,34,110,111,34,32,105,110,99,108,
-117,100,101,100,32,105,110,32,116,104,101,78,111,114,116,104,32,65,109,101,114,
-105,99,97,110,32,116,104,101,32,110,97,109,101,32,111,102,32,116,104,101,105,110
-,116,101,114,112,114,101,116,97,116,105,111,110,115,116,104,101,32,116,114,97,
-100,105,116,105,111,110,97,108,100,101,118,101,108,111,112,109,101,110,116,32,
-111,102,32,102,114,101,113,117,101,110,116,108,121,32,117,115,101,100,97,32,99,
-111,108,108,101,99,116,105,111,110,32,111,102,118,101,114,121,32,115,105,109,105
-,108,97,114,32,116,111,115,117,114,114,111,117,110,100,105,110,103,32,116,104,
-101,101,120,97,109,112,108,101,32,111,102,32,116,104,105,115,97,108,105,103,110,
-61,34,99,101,110,116,101,114,34,62,119,111,117,108,100,32,104,97,118,101,32,98,
-101,101,110,105,109,97,103,101,95,99,97,112,116,105,111,110,32,61,97,116,116,97,
-99,104,101,100,32,116,111,32,116,104,101,115,117,103,103,101,115,116,105,110,103
-,32,116,104,97,116,105,110,32,116,104,101,32,102,111,114,109,32,111,102,32,105,
-110,118,111,108,118,101,100,32,105,110,32,116,104,101,105,115,32,100,101,114,105
-,118,101,100,32,102,114,111,109,110,97,109,101,100,32,97,102,116,101,114,32,116,
-104,101,73,110,116,114,111,100,117,99,116,105,111,110,32,116,111,114,101,115,116
-,114,105,99,116,105,111,110,115,32,111,110,32,115,116,121,108,101,61,34,119,105,
-100,116,104,58,32,99,97,110,32,98,101,32,117,115,101,100,32,116,111,32,116,104,
-101,32,99,114,101,97,116,105,111,110,32,111,102,109,111,115,116,32,105,109,112,
-111,114,116,97,110,116,32,105,110,102,111,114,109,97,116,105,111,110,32,97,110,
-100,114,101,115,117,108,116,101,100,32,105,110,32,116,104,101,99,111,108,108,97,
-112,115,101,32,111,102,32,116,104,101,84,104,105,115,32,109,101,97,110,115,32,
-116,104,97,116,101,108,101,109,101,110,116,115,32,111,102,32,116,104,101,119,97,
-115,32,114,101,112,108,97,99,101,100,32,98,121,97,110,97,108,121,115,105,115,32,
-111,102,32,116,104,101,105,110,115,112,105,114,97,116,105,111,110,32,102,111,114
-,114,101,103,97,114,100,101,100,32,97,115,32,116,104,101,109,111,115,116,32,115,
-117,99,99,101,115,115,102,117,108,107,110,111,119,110,32,97,115,32,38,113,117,
-111,116,59,97,32,99,111,109,112,114,101,104,101,110,115,105,118,101,72,105,115,
-116,111,114,121,32,111,102,32,116,104,101,32,119,101,114,101,32,99,111,110,115,
-105,100,101,114,101,100,114,101,116,117,114,110,101,100,32,116,111,32,116,104,
-101,97,114,101,32,114,101,102,101,114,114,101,100,32,116,111,85,110,115,111,117,
-114,99,101,100,32,105,109,97,103,101,62,10,9,60,100,105,118,32,99,108,97,115,115
-,61,34,99,111,110,115,105,115,116,115,32,111,102,32,116,104,101,115,116,111,112,
-80,114,111,112,97,103,97,116,105,111,110,105,110,116,101,114,101,115,116,32,105,
-110,32,116,104,101,97,118,97,105,108,97,98,105,108,105,116,121,32,111,102,97,112
-,112,101,97,114,115,32,116,111,32,104,97,118,101,101,108,101,99,116,114,111,109,
-97,103,110,101,116,105,99,101,110,97,98,108,101,83,101,114,118,105,99,101,115,40
-,102,117,110,99,116,105,111,110,32,111,102,32,116,104,101,73,116,32,105,115,32,
-105,109,112,111,114,116,97,110,116,60,47,115,99,114,105,112,116,62,60,47,100,105
-,118,62,102,117,110,99,116,105,111,110,40,41,123,118,97,114,32,114,101,108,97,
-116,105,118,101,32,116,111,32,116,104,101,97,115,32,97,32,114,101,115,117,108,
-116,32,111,102,32,116,104,101,32,112,111,115,105,116,105,111,110,32,111,102,70,
-111,114,32,101,120,97,109,112,108,101,44,32,105,110,32,109,101,116,104,111,100,
-61,34,112,111,115,116,34,32,119,97,115,32,102,111,108,108,111,119,101,100,32,98,
-121,38,97,109,112,59,109,100,97,115,104,59,32,116,104,101,116,104,101,32,97,112,
-112,108,105,99,97,116,105,111,110,106,115,34,62,60,47,115,99,114,105,112,116,62,
-13,10,117,108,62,60,47,100,105,118,62,60,47,100,105,118,62,97,102,116,101,114,32
-,116,104,101,32,100,101,97,116,104,119,105,116,104,32,114,101,115,112,101,99,116
-,32,116,111,115,116,121,108,101,61,34,112,97,100,100,105,110,103,58,105,115,32,
-112,97,114,116,105,99,117,108,97,114,108,121,100,105,115,112,108,97,121,58,105,
-110,108,105,110,101,59,32,116,121,112,101,61,34,115,117,98,109,105,116,34,32,105
-,115,32,100,105,118,105,100,101,100,32,105,110,116,111,228,184,173,230,150,135,
-32,40,231,174,128,228,189,147,41,114,101,115,112,111,110,115,97,98,105,108,105,
-100,97,100,97,100,109,105,110,105,115,116,114,97,99,105,195,179,110,105,110,116,
-101,114,110,97,99,105,111,110,97,108,101,115,99,111,114,114,101,115,112,111,110,
-100,105,101,110,116,101,224,164,137,224,164,170,224,164,175,224,165,139,224,164,
-151,224,164,170,224,165,130,224,164,176,224,165,141,224,164,181,224,164,185,224,
-164,174,224,164,190,224,164,176,224,165,135,224,164,178,224,165,139,224,164,151,
-224,165,139,224,164,130,224,164,154,224,165,129,224,164,168,224,164,190,224,164,
-181,224,164,178,224,165,135,224,164,149,224,164,191,224,164,168,224,164,184,224,
-164,176,224,164,149,224,164,190,224,164,176,224,164,170,224,165,129,224,164,178,
-224,164,191,224,164,184,224,164,150,224,165,139,224,164,156,224,165,135,224,164,
-130,224,164,154,224,164,190,224,164,185,224,164,191,224,164,143,224,164,173,224,
-165,135,224,164,156,224,165,135,224,164,130,224,164,182,224,164,190,224,164,174,
-224,164,191,224,164,178,224,164,185,224,164,174,224,164,190,224,164,176,224,165,
-128,224,164,156,224,164,190,224,164,151,224,164,176,224,164,163,224,164,172,224,
-164,168,224,164,190,224,164,168,224,165,135,224,164,149,224,165,129,224,164,174,
-224,164,190,224,164,176,224,164,172,224,165,141,224,164,178,224,165,137,224,164,
-151,224,164,174,224,164,190,224,164,178,224,164,191,224,164,149,224,164,174,224,
-164,185,224,164,191,224,164,178,224,164,190,224,164,170,224,165,131,224,164,183,
-224,165,141,224,164,160,224,164,172,224,164,162,224,164,188,224,164,164,224,165,
-135,224,164,173,224,164,190,224,164,156,224,164,170,224,164,190,224,164,149,224,
-165,141,224,164,178,224,164,191,224,164,149,224,164,159,224,165,141,224,164,176,
-224,165,135,224,164,168,224,164,150,224,164,191,224,164,178,224,164,190,224,164,
-171,224,164,166,224,165,140,224,164,176,224,164,190,224,164,168,224,164,174,224,
-164,190,224,164,174,224,164,178,224,165,135,224,164,174,224,164,164,224,164,166,
-224,164,190,224,164,168,224,164,172,224,164,190,224,164,156,224,164,190,224,164,
-176,224,164,181,224,164,191,224,164,149,224,164,190,224,164,184,224,164,149,224,
-165,141,224,164,175,224,165,139,224,164,130,224,164,154,224,164,190,224,164,185,
-224,164,164,224,165,135,224,164,170,224,164,185,224,165,129,224,164,129,224,164,
-154,224,164,172,224,164,164,224,164,190,224,164,175,224,164,190,224,164,184,224,
-164,130,224,164,181,224,164,190,224,164,166,224,164,166,224,165,135,224,164,150,
-224,164,168,224,165,135,224,164,170,224,164,191,224,164,155,224,164,178,224,165,
-135,224,164,181,224,164,191,224,164,182,224,165,135,224,164,183,224,164,176,224,
-164,190,224,164,156,224,165,141,224,164,175,224,164,137,224,164,164,224,165,141,
-224,164,164,224,164,176,224,164,174,224,165,129,224,164,130,224,164,172,224,164,
-136,224,164,166,224,165,139,224,164,168,224,165,139,224,164,130,224,164,137,224,
-164,170,224,164,149,224,164,176,224,164,163,224,164,170,224,164,162,224,164,188,
-224,165,135,224,164,130,224,164,184,224,165,141,224,164,165,224,164,191,224,164,
-164,224,164,171,224,164,191,224,164,178,224,165,141,224,164,174,224,164,174,224,
-165,129,224,164,150,224,165,141,224,164,175,224,164,133,224,164,154,224,165,141,
-224,164,155,224,164,190,224,164,155,224,165,130,224,164,159,224,164,164,224,165,
-128,224,164,184,224,164,130,224,164,151,224,165,128,224,164,164,224,164,156,224,
-164,190,224,164,143,224,164,151,224,164,190,224,164,181,224,164,191,224,164,173,
-224,164,190,224,164,151,224,164,152,224,164,163,224,165,141,224,164,159,224,165,
-135,224,164,166,224,165,130,224,164,184,224,164,176,224,165,135,224,164,166,224,
-164,191,224,164,168,224,165,139,224,164,130,224,164,185,224,164,164,224,165,141,
-224,164,175,224,164,190,224,164,184,224,165,135,224,164,149,224,165,141,224,164,
-184,224,164,151,224,164,190,224,164,130,224,164,167,224,165,128,224,164,181,224,
-164,191,224,164,182,224,165,141,224,164,181,224,164,176,224,164,190,224,164,164,
-224,165,135,224,164,130,224,164,166,224,165,136,224,164,159,224,165,141,224,164,
-184,224,164,168,224,164,149,224,165,141,224,164,182,224,164,190,224,164,184,224,
-164,190,224,164,174,224,164,168,224,165,135,224,164,133,224,164,166,224,164,190,
-224,164,178,224,164,164,224,164,172,224,164,191,224,164,156,224,164,178,224,165,
-128,224,164,170,224,165,129,224,164,176,224,165,130,224,164,183,224,164,185,224,
-164,191,224,164,130,224,164,166,224,165,128,224,164,174,224,164,191,224,164,164,
-224,165,141,224,164,176,224,164,149,224,164,181,224,164,191,224,164,164,224,164,
-190,224,164,176,224,165,129,224,164,170,224,164,175,224,165,135,224,164,184,224,
-165,141,224,164,165,224,164,190,224,164,168,224,164,149,224,164,176,224,165,139,
-224,164,161,224,164,188,224,164,174,224,165,129,224,164,149,224,165,141,224,164,
-164,224,164,175,224,165,139,224,164,156,224,164,168,224,164,190,224,164,149,224,
-165,131,224,164,170,224,164,175,224,164,190,224,164,170,224,165,139,224,164,184,
-224,165,141,224,164,159,224,164,152,224,164,176,224,165,135,224,164,178,224,165,
-130,224,164,149,224,164,190,224,164,176,224,165,141,224,164,175,224,164,181,224,
-164,191,224,164,154,224,164,190,224,164,176,224,164,184,224,165,130,224,164,154,
-224,164,168,224,164,190,224,164,174,224,165,130,224,164,178,224,165,141,224,164,
-175,224,164,166,224,165,135,224,164,150,224,165,135,224,164,130,224,164,185,224,
-164,174,224,165,135,224,164,182,224,164,190,224,164,184,224,165,141,224,164,149,
-224,165,130,224,164,178,224,164,174,224,165,136,224,164,130,224,164,168,224,165,
-135,224,164,164,224,165,136,224,164,175,224,164,190,224,164,176,224,164,156,224,
-164,191,224,164,184,224,164,149,224,165,135,114,115,115,43,120,109,108,34,32,116
-,105,116,108,101,61,34,45,116,121,112,101,34,32,99,111,110,116,101,110,116,61,34
-,116,105,116,108,101,34,32,99,111,110,116,101,110,116,61,34,97,116,32,116,104,
-101,32,115,97,109,101,32,116,105,109,101,46,106,115,34,62,60,47,115,99,114,105,
-112,116,62,10,60,34,32,109,101,116,104,111,100,61,34,112,111,115,116,34,32,60,47
-,115,112,97,110,62,60,47,97,62,60,47,108,105,62,118,101,114,116,105,99,97,108,45
-,97,108,105,103,110,58,116,47,106,113,117,101,114,121,46,109,105,110,46,106,115,
-34,62,46,99,108,105,99,107,40,102,117,110,99,116,105,111,110,40,32,115,116,121,
-108,101,61,34,112,97,100,100,105,110,103,45,125,41,40,41,59,10,60,47,115,99,114,
-105,112,116,62,10,60,47,115,112,97,110,62,60,97,32,104,114,101,102,61,34,60,97,
-32,104,114,101,102,61,34,104,116,116,112,58,47,47,41,59,32,114,101,116,117,114,
-110,32,102,97,108,115,101,59,116,101,120,116,45,100,101,99,111,114,97,116,105,
-111,110,58,32,115,99,114,111,108,108,105,110,103,61,34,110,111,34,32,98,111,114,
-100,101,114,45,99,111,108,108,97,112,115,101,58,97,115,115,111,99,105,97,116,101
-,100,32,119,105,116,104,32,66,97,104,97,115,97,32,73,110,100,111,110,101,115,105
-,97,69,110,103,108,105,115,104,32,108,97,110,103,117,97,103,101,60,116,101,120,
-116,32,120,109,108,58,115,112,97,99,101,61,46,103,105,102,34,32,98,111,114,100,
-101,114,61,34,48,34,60,47,98,111,100,121,62,10,60,47,104,116,109,108,62,10,111,
-118,101,114,102,108,111,119,58,104,105,100,100,101,110,59,105,109,103,32,115,114
-,99,61,34,104,116,116,112,58,47,47,97,100,100,69,118,101,110,116,76,105,115,116,
-101,110,101,114,114,101,115,112,111,110,115,105,98,108,101,32,102,111,114,32,115
-,46,106,115,34,62,60,47,115,99,114,105,112,116,62,10,47,102,97,118,105,99,111,
-110,46,105,99,111,34,32,47,62,111,112,101,114,97,116,105,110,103,32,115,121,115,
-116,101,109,34,32,115,116,121,108,101,61,34,119,105,100,116,104,58,49,116,97,114
-,103,101,116,61,34,95,98,108,97,110,107,34,62,83,116,97,116,101,32,85,110,105,
-118,101,114,115,105,116,121,116,101,120,116,45,97,108,105,103,110,58,108,101,102
-,116,59,10,100,111,99,117,109,101,110,116,46,119,114,105,116,101,40,44,32,105,
-110,99,108,117,100,105,110,103,32,116,104,101,32,97,114,111,117,110,100,32,116,
-104,101,32,119,111,114,108,100,41,59,13,10,60,47,115,99,114,105,112,116,62,13,10
-,60,34,32,115,116,121,108,101,61,34,104,101,105,103,104,116,58,59,111,118,101,
-114,102,108,111,119,58,104,105,100,100,101,110,109,111,114,101,32,105,110,102,
-111,114,109,97,116,105,111,110,97,110,32,105,110,116,101,114,110,97,116,105,111,
-110,97,108,97,32,109,101,109,98,101,114,32,111,102,32,116,104,101,32,111,110,101
-,32,111,102,32,116,104,101,32,102,105,114,115,116,99,97,110,32,98,101,32,102,111
-,117,110,100,32,105,110,32,60,47,100,105,118,62,10,9,9,60,47,100,105,118,62,10,
-100,105,115,112,108,97,121,58,32,110,111,110,101,59,34,62,34,32,47,62,10,60,108,
-105,110,107,32,114,101,108,61,34,10,32,32,40,102,117,110,99,116,105,111,110,40,
-41,32,123,116,104,101,32,49,53,116,104,32,99,101,110,116,117,114,121,46,112,114,
-101,118,101,110,116,68,101,102,97,117,108,116,40,108,97,114,103,101,32,110,117,
-109,98,101,114,32,111,102,32,66,121,122,97,110,116,105,110,101,32,69,109,112,105
-,114,101,46,106,112,103,124,116,104,117,109,98,124,108,101,102,116,124,118,97,
-115,116,32,109,97,106,111,114,105,116,121,32,111,102,109,97,106,111,114,105,116,
-121,32,111,102,32,116,104,101,32,32,97,108,105,103,110,61,34,99,101,110,116,101,
-114,34,62,85,110,105,118,101,114,115,105,116,121,32,80,114,101,115,115,100,111,
-109,105,110,97,116,101,100,32,98,121,32,116,104,101,83,101,99,111,110,100,32,87,
-111,114,108,100,32,87,97,114,100,105,115,116,114,105,98,117,116,105,111,110,32,
-111,102,32,115,116,121,108,101,61,34,112,111,115,105,116,105,111,110,58,116,104,
-101,32,114,101,115,116,32,111,102,32,116,104,101,32,99,104,97,114,97,99,116,101,
-114,105,122,101,100,32,98,121,32,114,101,108,61,34,110,111,102,111,108,108,111,
-119,34,62,100,101,114,105,118,101,115,32,102,114,111,109,32,116,104,101,114,97,
-116,104,101,114,32,116,104,97,110,32,116,104,101,32,97,32,99,111,109,98,105,110,
-97,116,105,111,110,32,111,102,115,116,121,108,101,61,34,119,105,100,116,104,58,
-49,48,48,69,110,103,108,105,115,104,45,115,112,101,97,107,105,110,103,99,111,109
-,112,117,116,101,114,32,115,99,105,101,110,99,101,98,111,114,100,101,114,61,34,
-48,34,32,97,108,116,61,34,116,104,101,32,101,120,105,115,116,101,110,99,101,32,
-111,102,68,101,109,111,99,114,97,116,105,99,32,80,97,114,116,121,34,32,115,116,
-121,108,101,61,34,109,97,114,103,105,110,45,70,111,114,32,116,104,105,115,32,114
-,101,97,115,111,110,44,46,106,115,34,62,60,47,115,99,114,105,112,116,62,10,9,115
-,66,121,84,97,103,78,97,109,101,40,115,41,91,48,93,106,115,34,62,60,47,115,99,
-114,105,112,116,62,13,10,60,46,106,115,34,62,60,47,115,99,114,105,112,116,62,13,
-10,108,105,110,107,32,114,101,108,61,34,105,99,111,110,34,32,39,32,97,108,116,61
-,39,39,32,99,108,97,115,115,61,39,102,111,114,109,97,116,105,111,110,32,111,102,
-32,116,104,101,118,101,114,115,105,111,110,115,32,111,102,32,116,104,101,32,60,
-47,97,62,60,47,100,105,118,62,60,47,100,105,118,62,47,112,97,103,101,62,10,32,32
-,60,112,97,103,101,62,10,60,100,105,118,32,99,108,97,115,115,61,34,99,111,110,
-116,98,101,99,97,109,101,32,116,104,101,32,102,105,114,115,116,98,97,104,97,115,
-97,32,73,110,100,111,110,101,115,105,97,101,110,103,108,105,115,104,32,40,115,
-105,109,112,108,101,41,206,149,206,187,206,187,206,183,206,189,206,185,206,186,
-206,172,209,133,209,128,208,178,208,176,209,130,209,129,208,186,208,184,208,186,
-208,190,208,188,208,191,208,176,208,189,208,184,208,184,209,143,208,178,208,187,
-209,143,208,181,209,130,209,129,209,143,208,148,208,190,208,177,208,176,208,178,
-208,184,209,130,209,140,209,135,208,181,208,187,208,190,208,178,208,181,208,186,
-208,176,209,128,208,176,208,183,208,178,208,184,209,130,208,184,209,143,208,152,
-208,189,209,130,208,181,209,128,208,189,208,181,209,130,208,158,209,130,208,178,
-208,181,209,130,208,184,209,130,209,140,208,189,208,176,208,191,209,128,208,184,
-208,188,208,181,209,128,208,184,208,189,209,130,208,181,209,128,208,189,208,181,
-209,130,208,186,208,190,209,130,208,190,209,128,208,190,208,179,208,190,209,129,
-209,130,209,128,208,176,208,189,208,184,209,134,209,139,208,186,208,176,209,135,
-208,181,209,129,209,130,208,178,208,181,209,131,209,129,208,187,208,190,208,178,
-208,184,209,143,209,133,208,191,209,128,208,190,208,177,208,187,208,181,208,188,
-209,139,208,191,208,190,208,187,209,131,209,135,208,184,209,130,209,140,209,143,
-208,178,208,187,209,143,209,142,209,130,209,129,209,143,208,189,208,176,208,184,
-208,177,208,190,208,187,208,181,208,181,208,186,208,190,208,188,208,191,208,176,
-208,189,208,184,209,143,208,178,208,189,208,184,208,188,208,176,208,189,208,184,
-208,181,209,129,209,128,208,181,208,180,209,129,209,130,208,178,208,176,216,167,
-217,132,217,133,217,136,216,167,216,182,217,138,216,185,216,167,217,132,216,177,
-216,166,217,138,216,179,217,138,216,169,216,167,217,132,216,167,217,134,216,170,
-217,130,216,167,217,132,217,133,216,180,216,167,216,177,217,131,216,167,216,170,
-217,131,216,167,217,132,216,179,217,138,216,167,216,177,216,167,216,170,216,167,
-217,132,217,133,217,131,216,170,217,136,216,168,216,169,216,167,217,132,216,179,
-216,185,217,136,216,175,217,138,216,169,216,167,216,173,216,181,216,167,216,166,
-217,138,216,167,216,170,216,167,217,132,216,185,216,167,217,132,217,133,217,138,
-216,169,216,167,217,132,216,181,217,136,216,170,217,138,216,167,216,170,216,167,
-217,132,216,167,217,134,216,170,216,177,217,134,216,170,216,167,217,132,216,170,
-216,181,216,167,217,133,217,138,217,133,216,167,217,132,216,165,216,179,217,132,
-216,167,217,133,217,138,216,167,217,132,217,133,216,180,216,167,216,177,217,131,
-216,169,216,167,217,132,217,133,216,177,216,166,217,138,216,167,216,170,114,111,
-98,111,116,115,34,32,99,111,110,116,101,110,116,61,34,60,100,105,118,32,105,100,
-61,34,102,111,111,116,101,114,34,62,116,104,101,32,85,110,105,116,101,100,32,83,
-116,97,116,101,115,60,105,109,103,32,115,114,99,61,34,104,116,116,112,58,47,47,
-46,106,112,103,124,114,105,103,104,116,124,116,104,117,109,98,124,46,106,115,34,
-62,60,47,115,99,114,105,112,116,62,13,10,60,108,111,99,97,116,105,111,110,46,112
-,114,111,116,111,99,111,108,102,114,97,109,101,98,111,114,100,101,114,61,34,48,
-34,32,115,34,32,47,62,10,60,109,101,116,97,32,110,97,109,101,61,34,60,47,97,62,
-60,47,100,105,118,62,60,47,100,105,118,62,60,102,111,110,116,45,119,101,105,103,
-104,116,58,98,111,108,100,59,38,113,117,111,116,59,32,97,110,100,32,38,113,117,
-111,116,59,100,101,112,101,110,100,105,110,103,32,111,110,32,116,104,101,32,109,
-97,114,103,105,110,58,48,59,112,97,100,100,105,110,103,58,34,32,114,101,108,61,
-34,110,111,102,111,108,108,111,119,34,32,80,114,101,115,105,100,101,110,116,32,
-111,102,32,116,104,101,32,116,119,101,110,116,105,101,116,104,32,99,101,110,116,
-117,114,121,101,118,105,115,105,111,110,62,10,32,32,60,47,112,97,103,101,73,110,
-116,101,114,110,101,116,32,69,120,112,108,111,114,101,114,97,46,97,115,121,110,
-99,32,61,32,116,114,117,101,59,13,10,105,110,102,111,114,109,97,116,105,111,110,
-32,97,98,111,117,116,60,100,105,118,32,105,100,61,34,104,101,97,100,101,114,34,
-62,34,32,97,99,116,105,111,110,61,34,104,116,116,112,58,47,47,60,97,32,104,114,
-101,102,61,34,104,116,116,112,115,58,47,47,60,100,105,118,32,105,100,61,34,99,
-111,110,116,101,110,116,34,60,47,100,105,118,62,13,10,60,47,100,105,118,62,13,10
-,60,100,101,114,105,118,101,100,32,102,114,111,109,32,116,104,101,32,60,105,109,
-103,32,115,114,99,61,39,104,116,116,112,58,47,47,97,99,99,111,114,100,105,110,
-103,32,116,111,32,116,104,101,32,10,60,47,98,111,100,121,62,10,60,47,104,116,109
-,108,62,10,115,116,121,108,101,61,34,102,111,110,116,45,115,105,122,101,58,115,
-99,114,105,112,116,32,108,97,110,103,117,97,103,101,61,34,65,114,105,97,108,44,
-32,72,101,108,118,101,116,105,99,97,44,60,47,97,62,60,115,112,97,110,32,99,108,
-97,115,115,61,34,60,47,115,99,114,105,112,116,62,60,115,99,114,105,112,116,32,
-112,111,108,105,116,105,99,97,108,32,112,97,114,116,105,101,115,116,100,62,60,47
-,116,114,62,60,47,116,97,98,108,101,62,60,104,114,101,102,61,34,104,116,116,112,
-58,47,47,119,119,119,46,105,110,116,101,114,112,114,101,116,97,116,105,111,110,
-32,111,102,114,101,108,61,34,115,116,121,108,101,115,104,101,101,116,34,32,100,
-111,99,117,109,101,110,116,46,119,114,105,116,101,40,39,60,99,104,97,114,115,101
-,116,61,34,117,116,102,45,56,34,62,10,98,101,103,105,110,110,105,110,103,32,111,
-102,32,116,104,101,32,114,101,118,101,97,108,101,100,32,116,104,97,116,32,116,
-104,101,116,101,108,101,118,105,115,105,111,110,32,115,101,114,105,101,115,34,32
-,114,101,108,61,34,110,111,102,111,108,108,111,119,34,62,32,116,97,114,103,101,
-116,61,34,95,98,108,97,110,107,34,62,99,108,97,105,109,105,110,103,32,116,104,97
-,116,32,116,104,101,104,116,116,112,37,51,65,37,50,70,37,50,70,119,119,119,46,
-109,97,110,105,102,101,115,116,97,116,105,111,110,115,32,111,102,80,114,105,109,
-101,32,77,105,110,105,115,116,101,114,32,111,102,105,110,102,108,117,101,110,99,
-101,100,32,98,121,32,116,104,101,99,108,97,115,115,61,34,99,108,101,97,114,102,
-105,120,34,62,47,100,105,118,62,13,10,60,47,100,105,118,62,13,10,13,10,116,104,
-114,101,101,45,100,105,109,101,110,115,105,111,110,97,108,67,104,117,114,99,104,
-32,111,102,32,69,110,103,108,97,110,100,111,102,32,78,111,114,116,104,32,67,97,
-114,111,108,105,110,97,115,113,117,97,114,101,32,107,105,108,111,109,101,116,114
-,101,115,46,97,100,100,69,118,101,110,116,76,105,115,116,101,110,101,114,100,105
-,115,116,105,110,99,116,32,102,114,111,109,32,116,104,101,99,111,109,109,111,110
-,108,121,32,107,110,111,119,110,32,97,115,80,104,111,110,101,116,105,99,32,65,
-108,112,104,97,98,101,116,100,101,99,108,97,114,101,100,32,116,104,97,116,32,116
-,104,101,99,111,110,116,114,111,108,108,101,100,32,98,121,32,116,104,101,66,101,
-110,106,97,109,105,110,32,70,114,97,110,107,108,105,110,114,111,108,101,45,112,
-108,97,121,105,110,103,32,103,97,109,101,116,104,101,32,85,110,105,118,101,114,
-115,105,116,121,32,111,102,105,110,32,87,101,115,116,101,114,110,32,69,117,114,
-111,112,101,112,101,114,115,111,110,97,108,32,99,111,109,112,117,116,101,114,80,
-114,111,106,101,99,116,32,71,117,116,101,110,98,101,114,103,114,101,103,97,114,
-100,108,101,115,115,32,111,102,32,116,104,101,104,97,115,32,98,101,101,110,32,
-112,114,111,112,111,115,101,100,116,111,103,101,116,104,101,114,32,119,105,116,
-104,32,116,104,101,62,60,47,108,105,62,60,108,105,32,99,108,97,115,115,61,34,105
-,110,32,115,111,109,101,32,99,111,117,110,116,114,105,101,115,109,105,110,46,106
-,115,34,62,60,47,115,99,114,105,112,116,62,111,102,32,116,104,101,32,112,111,112
-,117,108,97,116,105,111,110,111,102,102,105,99,105,97,108,32,108,97,110,103,117,
-97,103,101,60,105,109,103,32,115,114,99,61,34,105,109,97,103,101,115,47,105,100,
-101,110,116,105,102,105,101,100,32,98,121,32,116,104,101,110,97,116,117,114,97,
-108,32,114,101,115,111,117,114,99,101,115,99,108,97,115,115,105,102,105,99,97,
-116,105,111,110,32,111,102,99,97,110,32,98,101,32,99,111,110,115,105,100,101,114
-,101,100,113,117,97,110,116,117,109,32,109,101,99,104,97,110,105,99,115,78,101,
-118,101,114,116,104,101,108,101,115,115,44,32,116,104,101,109,105,108,108,105,
-111,110,32,121,101,97,114,115,32,97,103,111,60,47,98,111,100,121,62,13,10,60,47,
-104,116,109,108,62,13,206,149,206,187,206,187,206,183,206,189,206,185,206,186,
-206,172,10,116,97,107,101,32,97,100,118,97,110,116,97,103,101,32,111,102,97,110,
-100,44,32,97,99,99,111,114,100,105,110,103,32,116,111,97,116,116,114,105,98,117,
-116,101,100,32,116,111,32,116,104,101,77,105,99,114,111,115,111,102,116,32,87,
-105,110,100,111,119,115,116,104,101,32,102,105,114,115,116,32,99,101,110,116,117
-,114,121,117,110,100,101,114,32,116,104,101,32,99,111,110,116,114,111,108,100,
-105,118,32,99,108,97,115,115,61,34,104,101,97,100,101,114,115,104,111,114,116,
-108,121,32,97,102,116,101,114,32,116,104,101,110,111,116,97,98,108,101,32,101,
-120,99,101,112,116,105,111,110,116,101,110,115,32,111,102,32,116,104,111,117,115
-,97,110,100,115,115,101,118,101,114,97,108,32,100,105,102,102,101,114,101,110,
-116,97,114,111,117,110,100,32,116,104,101,32,119,111,114,108,100,46,114,101,97,
-99,104,105,110,103,32,109,105,108,105,116,97,114,121,105,115,111,108,97,116,101,
-100,32,102,114,111,109,32,116,104,101,111,112,112,111,115,105,116,105,111,110,32
-,116,111,32,116,104,101,116,104,101,32,79,108,100,32,84,101,115,116,97,109,101,
-110,116,65,102,114,105,99,97,110,32,65,109,101,114,105,99,97,110,115,105,110,115
-,101,114,116,101,100,32,105,110,116,111,32,116,104,101,115,101,112,97,114,97,116
-,101,32,102,114,111,109,32,116,104,101,109,101,116,114,111,112,111,108,105,116,
-97,110,32,97,114,101,97,109,97,107,101,115,32,105,116,32,112,111,115,115,105,98,
-108,101,97,99,107,110,111,119,108,101,100,103,101,100,32,116,104,97,116,97,114,
-103,117,97,98,108,121,32,116,104,101,32,109,111,115,116,116,121,112,101,61,34,
-116,101,120,116,47,99,115,115,34,62,10,116,104,101,32,73,110,116,101,114,110,97,
-116,105,111,110,97,108,65,99,99,111,114,100,105,110,103,32,116,111,32,116,104,
-101,32,112,101,61,34,116,101,120,116,47,99,115,115,34,32,47,62,10,99,111,105,110
-,99,105,100,101,32,119,105,116,104,32,116,104,101,116,119,111,45,116,104,105,114
-,100,115,32,111,102,32,116,104,101,68,117,114,105,110,103,32,116,104,105,115,32,
-116,105,109,101,44,100,117,114,105,110,103,32,116,104,101,32,112,101,114,105,111
-,100,97,110,110,111,117,110,99,101,100,32,116,104,97,116,32,104,101,116,104,101,
-32,105,110,116,101,114,110,97,116,105,111,110,97,108,97,110,100,32,109,111,114,
-101,32,114,101,99,101,110,116,108,121,98,101,108,105,101,118,101,100,32,116,104,
-97,116,32,116,104,101,99,111,110,115,99,105,111,117,115,110,101,115,115,32,97,
-110,100,102,111,114,109,101,114,108,121,32,107,110,111,119,110,32,97,115,115,117
-,114,114,111,117,110,100,101,100,32,98,121,32,116,104,101,102,105,114,115,116,32
-,97,112,112,101,97,114,101,100,32,105,110,111,99,99,97,115,105,111,110,97,108,
-108,121,32,117,115,101,100,112,111,115,105,116,105,111,110,58,97,98,115,111,108,
-117,116,101,59,34,32,116,97,114,103,101,116,61,34,95,98,108,97,110,107,34,32,112
-,111,115,105,116,105,111,110,58,114,101,108,97,116,105,118,101,59,116,101,120,
-116,45,97,108,105,103,110,58,99,101,110,116,101,114,59,106,97,120,47,108,105,98,
-115,47,106,113,117,101,114,121,47,49,46,98,97,99,107,103,114,111,117,110,100,45,
-99,111,108,111,114,58,35,116,121,112,101,61,34,97,112,112,108,105,99,97,116,105,
-111,110,47,97,110,103,117,97,103,101,34,32,99,111,110,116,101,110,116,61,34,60,
-109,101,116,97,32,104,116,116,112,45,101,113,117,105,118,61,34,80,114,105,118,97
-,99,121,32,80,111,108,105,99,121,60,47,97,62,101,40,34,37,51,67,115,99,114,105,
-112,116,32,115,114,99,61,39,34,32,116,97,114,103,101,116,61,34,95,98,108,97,110,
-107,34,62,79,110,32,116,104,101,32,111,116,104,101,114,32,104,97,110,100,44,46,
-106,112,103,124,116,104,117,109,98,124,114,105,103,104,116,124,50,60,47,100,105,
-118,62,60,100,105,118,32,99,108,97,115,115,61,34,60,100,105,118,32,115,116,121,
-108,101,61,34,102,108,111,97,116,58,110,105,110,101,116,101,101,110,116,104,32,
-99,101,110,116,117,114,121,60,47,98,111,100,121,62,13,10,60,47,104,116,109,108,
-62,13,10,60,105,109,103,32,115,114,99,61,34,104,116,116,112,58,47,47,115,59,116,
-101,120,116,45,97,108,105,103,110,58,99,101,110,116,101,114,102,111,110,116,45,
-119,101,105,103,104,116,58,32,98,111,108,100,59,32,65,99,99,111,114,100,105,110,
-103,32,116,111,32,116,104,101,32,100,105,102,102,101,114,101,110,99,101,32,98,
-101,116,119,101,101,110,34,32,102,114,97,109,101,98,111,114,100,101,114,61,34,48
-,34,32,34,32,115,116,121,108,101,61,34,112,111,115,105,116,105,111,110,58,108,
-105,110,107,32,104,114,101,102,61,34,104,116,116,112,58,47,47,104,116,109,108,52
-,47,108,111,111,115,101,46,100,116,100,34,62,10,100,117,114,105,110,103,32,116,
-104,105,115,32,112,101,114,105,111,100,60,47,116,100,62,60,47,116,114,62,60,47,
-116,97,98,108,101,62,99,108,111,115,101,108,121,32,114,101,108,97,116,101,100,32
-,116,111,102,111,114,32,116,104,101,32,102,105,114,115,116,32,116,105,109,101,59
-,102,111,110,116,45,119,101,105,103,104,116,58,98,111,108,100,59,105,110,112,117
-,116,32,116,121,112,101,61,34,116,101,120,116,34,32,60,115,112,97,110,32,115,116
-,121,108,101,61,34,102,111,110,116,45,111,110,114,101,97,100,121,115,116,97,116,
-101,99,104,97,110,103,101,9,60,100,105,118,32,99,108,97,115,115,61,34,99,108,101
-,97,114,100,111,99,117,109,101,110,116,46,108,111,99,97,116,105,111,110,46,32,70
-,111,114,32,101,120,97,109,112,108,101,44,32,116,104,101,32,97,32,119,105,100,
-101,32,118,97,114,105,101,116,121,32,111,102,32,60,33,68,79,67,84,89,80,69,32,
-104,116,109,108,62,13,10,60,38,110,98,115,112,59,38,110,98,115,112,59,38,110,98,
-115,112,59,34,62,60,97,32,104,114,101,102,61,34,104,116,116,112,58,47,47,115,116
-,121,108,101,61,34,102,108,111,97,116,58,108,101,102,116,59,99,111,110,99,101,
-114,110,101,100,32,119,105,116,104,32,116,104,101,61,104,116,116,112,37,51,65,37
-,50,70,37,50,70,119,119,119,46,105,110,32,112,111,112,117,108,97,114,32,99,117,
-108,116,117,114,101,116,121,112,101,61,34,116,101,120,116,47,99,115,115,34,32,47
-,62,105,116,32,105,115,32,112,111,115,115,105,98,108,101,32,116,111,32,72,97,114
-,118,97,114,100,32,85,110,105,118,101,114,115,105,116,121,116,121,108,101,115,
-104,101,101,116,34,32,104,114,101,102,61,34,47,116,104,101,32,109,97,105,110,32,
-99,104,97,114,97,99,116,101,114,79,120,102,111,114,100,32,85,110,105,118,101,114
-,115,105,116,121,32,32,110,97,109,101,61,34,107,101,121,119,111,114,100,115,34,
-32,99,115,116,121,108,101,61,34,116,101,120,116,45,97,108,105,103,110,58,116,104
-,101,32,85,110,105,116,101,100,32,75,105,110,103,100,111,109,102,101,100,101,114
-,97,108,32,103,111,118,101,114,110,109,101,110,116,60,100,105,118,32,115,116,121
-,108,101,61,34,109,97,114,103,105,110,32,100,101,112,101,110,100,105,110,103,32,
-111,110,32,116,104,101,32,100,101,115,99,114,105,112,116,105,111,110,32,111,102,
-32,116,104,101,60,100,105,118,32,99,108,97,115,115,61,34,104,101,97,100,101,114,
-46,109,105,110,46,106,115,34,62,60,47,115,99,114,105,112,116,62,100,101,115,116,
-114,117,99,116,105,111,110,32,111,102,32,116,104,101,115,108,105,103,104,116,108
-,121,32,100,105,102,102,101,114,101,110,116,105,110,32,97,99,99,111,114,100,97,
-110,99,101,32,119,105,116,104,116,101,108,101,99,111,109,109,117,110,105,99,97,
-116,105,111,110,115,105,110,100,105,99,97,116,101,115,32,116,104,97,116,32,116,
-104,101,115,104,111,114,116,108,121,32,116,104,101,114,101,97,102,116,101,114,
-101,115,112,101,99,105,97,108,108,121,32,105,110,32,116,104,101,32,69,117,114,
-111,112,101,97,110,32,99,111,117,110,116,114,105,101,115,72,111,119,101,118,101,
-114,44,32,116,104,101,114,101,32,97,114,101,115,114,99,61,34,104,116,116,112,58,
-47,47,115,116,97,116,105,99,115,117,103,103,101,115,116,101,100,32,116,104,97,
-116,32,116,104,101,34,32,115,114,99,61,34,104,116,116,112,58,47,47,119,119,119,
-46,97,32,108,97,114,103,101,32,110,117,109,98,101,114,32,111,102,32,84,101,108,
-101,99,111,109,109,117,110,105,99,97,116,105,111,110,115,34,32,114,101,108,61,34
-,110,111,102,111,108,108,111,119,34,32,116,72,111,108,121,32,82,111,109,97,110,
-32,69,109,112,101,114,111,114,97,108,109,111,115,116,32,101,120,99,108,117,115,
-105,118,101,108,121,34,32,98,111,114,100,101,114,61,34,48,34,32,97,108,116,61,34
-,83,101,99,114,101,116,97,114,121,32,111,102,32,83,116,97,116,101,99,117,108,109
-,105,110,97,116,105,110,103,32,105,110,32,116,104,101,67,73,65,32,87,111,114,108
-,100,32,70,97,99,116,98,111,111,107,116,104,101,32,109,111,115,116,32,105,109,
-112,111,114,116,97,110,116,97,110,110,105,118,101,114,115,97,114,121,32,111,102,
-32,116,104,101,115,116,121,108,101,61,34,98,97,99,107,103,114,111,117,110,100,45
-,60,108,105,62,60,101,109,62,60,97,32,104,114,101,102,61,34,47,116,104,101,32,65
-,116,108,97,110,116,105,99,32,79,99,101,97,110,115,116,114,105,99,116,108,121,32
-,115,112,101,97,107,105,110,103,44,115,104,111,114,116,108,121,32,98,101,102,111
-,114,101,32,116,104,101,100,105,102,102,101,114,101,110,116,32,116,121,112,101,
-115,32,111,102,116,104,101,32,79,116,116,111,109,97,110,32,69,109,112,105,114,
-101,62,60,105,109,103,32,115,114,99,61,34,104,116,116,112,58,47,47,65,110,32,73,
-110,116,114,111,100,117,99,116,105,111,110,32,116,111,99,111,110,115,101,113,117
-,101,110,99,101,32,111,102,32,116,104,101,100,101,112,97,114,116,117,114,101,32,
-102,114,111,109,32,116,104,101,67,111,110,102,101,100,101,114,97,116,101,32,83,
-116,97,116,101,115,105,110,100,105,103,101,110,111,117,115,32,112,101,111,112,
-108,101,115,80,114,111,99,101,101,100,105,110,103,115,32,111,102,32,116,104,101,
-105,110,102,111,114,109,97,116,105,111,110,32,111,110,32,116,104,101,116,104,101
-,111,114,105,101,115,32,104,97,118,101,32,98,101,101,110,105,110,118,111,108,118
-,101,109,101,110,116,32,105,110,32,116,104,101,100,105,118,105,100,101,100,32,
-105,110,116,111,32,116,104,114,101,101,97,100,106,97,99,101,110,116,32,99,111,
-117,110,116,114,105,101,115,105,115,32,114,101,115,112,111,110,115,105,98,108,
-101,32,102,111,114,100,105,115,115,111,108,117,116,105,111,110,32,111,102,32,116
-,104,101,99,111,108,108,97,98,111,114,97,116,105,111,110,32,119,105,116,104,119,
-105,100,101,108,121,32,114,101,103,97,114,100,101,100,32,97,115,104,105,115,32,
-99,111,110,116,101,109,112,111,114,97,114,105,101,115,102,111,117,110,100,105,
-110,103,32,109,101,109,98,101,114,32,111,102,68,111,109,105,110,105,99,97,110,32
-,82,101,112,117,98,108,105,99,103,101,110,101,114,97,108,108,121,32,97,99,99,101
-,112,116,101,100,116,104,101,32,112,111,115,115,105,98,105,108,105,116,121,32,
-111,102,97,114,101,32,97,108,115,111,32,97,118,97,105,108,97,98,108,101,117,110,
-100,101,114,32,99,111,110,115,116,114,117,99,116,105,111,110,114,101,115,116,111
-,114,97,116,105,111,110,32,111,102,32,116,104,101,116,104,101,32,103,101,110,101
-,114,97,108,32,112,117,98,108,105,99,105,115,32,97,108,109,111,115,116,32,101,
-110,116,105,114,101,108,121,112,97,115,115,101,115,32,116,104,114,111,117,103,
-104,32,116,104,101,104,97,115,32,98,101,101,110,32,115,117,103,103,101,115,116,
-101,100,99,111,109,112,117,116,101,114,32,97,110,100,32,118,105,100,101,111,71,
-101,114,109,97,110,105,99,32,108,97,110,103,117,97,103,101,115,32,97,99,99,111,
-114,100,105,110,103,32,116,111,32,116,104,101,32,100,105,102,102,101,114,101,110
-,116,32,102,114,111,109,32,116,104,101,115,104,111,114,116,108,121,32,97,102,116
-,101,114,119,97,114,100,115,104,114,101,102,61,34,104,116,116,112,115,58,47,47,
-119,119,119,46,114,101,99,101,110,116,32,100,101,118,101,108,111,112,109,101,110
-,116,66,111,97,114,100,32,111,102,32,68,105,114,101,99,116,111,114,115,60,100,
-105,118,32,99,108,97,115,115,61,34,115,101,97,114,99,104,124,32,60,97,32,104,114
-,101,102,61,34,104,116,116,112,58,47,47,73,110,32,112,97,114,116,105,99,117,108,
-97,114,44,32,116,104,101,77,117,108,116,105,112,108,101,32,102,111,111,116,110,
-111,116,101,115,111,114,32,111,116,104,101,114,32,115,117,98,115,116,97,110,99,
-101,116,104,111,117,115,97,110,100,115,32,111,102,32,121,101,97,114,115,116,114,
-97,110,115,108,97,116,105,111,110,32,111,102,32,116,104,101,60,47,100,105,118,62
-,13,10,60,47,100,105,118,62,13,10,13,10,60,97,32,104,114,101,102,61,34,105,110,
-100,101,120,46,112,104,112,119,97,115,32,101,115,116,97,98,108,105,115,104,101,
-100,32,105,110,109,105,110,46,106,115,34,62,60,47,115,99,114,105,112,116,62,10,
-112,97,114,116,105,99,105,112,97,116,101,32,105,110,32,116,104,101,97,32,115,116
-,114,111,110,103,32,105,110,102,108,117,101,110,99,101,115,116,121,108,101,61,34
-,109,97,114,103,105,110,45,116,111,112,58,114,101,112,114,101,115,101,110,116,
-101,100,32,98,121,32,116,104,101,103,114,97,100,117,97,116,101,100,32,102,114,
-111,109,32,116,104,101,84,114,97,100,105,116,105,111,110,97,108,108,121,44,32,
-116,104,101,69,108,101,109,101,110,116,40,34,115,99,114,105,112,116,34,41,59,72,
-111,119,101,118,101,114,44,32,115,105,110,99,101,32,116,104,101,47,100,105,118,
-62,10,60,47,100,105,118,62,10,60,100,105,118,32,108,101,102,116,59,32,109,97,114
-,103,105,110,45,108,101,102,116,58,112,114,111,116,101,99,116,105,111,110,32,97,
-103,97,105,110,115,116,48,59,32,118,101,114,116,105,99,97,108,45,97,108,105,103,
-110,58,85,110,102,111,114,116,117,110,97,116,101,108,121,44,32,116,104,101,116,
-121,112,101,61,34,105,109,97,103,101,47,120,45,105,99,111,110,47,100,105,118,62,
-10,60,100,105,118,32,99,108,97,115,115,61,34,32,99,108,97,115,115,61,34,99,108,
-101,97,114,102,105,120,34,62,60,100,105,118,32,99,108,97,115,115,61,34,102,111,
-111,116,101,114,9,9,60,47,100,105,118,62,10,9,9,60,47,100,105,118,62,10,116,104,
-101,32,109,111,116,105,111,110,32,112,105,99,116,117,114,101,208,145,209,138,208
-,187,208,179,208,176,209,128,209,129,208,186,208,184,208,177,209,138,208,187,208
-,179,208,176,209,128,209,129,208,186,208,184,208,164,208,181,208,180,208,181,209
-,128,208,176,209,134,208,184,208,184,208,189,208,181,209,129,208,186,208,190,208
-,187,209,140,208,186,208,190,209,129,208,190,208,190,208,177,209,137,208,181,208
-,189,208,184,208,181,209,129,208,190,208,190,208,177,209,137,208,181,208,189,208
-,184,209,143,208,191,209,128,208,190,208,179,209,128,208,176,208,188,208,188,209
-,139,208,158,209,130,208,191,209,128,208,176,208,178,208,184,209,130,209,140,208
-,177,208,181,209,129,208,191,208,187,208,176,209,130,208,189,208,190,208,188,208
-,176,209,130,208,181,209,128,208,184,208,176,208,187,209,139,208,191,208,190,208
-,183,208,178,208,190,208,187,209,143,208,181,209,130,208,191,208,190,209,129,208
-,187,208,181,208,180,208,189,208,184,208,181,209,128,208,176,208,183,208,187,208
-,184,209,135,208,189,209,139,209,133,208,191,209,128,208,190,208,180,209,131,208
-,186,209,134,208,184,208,184,208,191,209,128,208,190,208,179,209,128,208,176,208
-,188,208,188,208,176,208,191,208,190,208,187,208,189,208,190,209,129,209,130,209
-,140,209,142,208,189,208,176,209,133,208,190,208,180,208,184,209,130,209,129,209
-,143,208,184,208,183,208,177,209,128,208,176,208,189,208,189,208,190,208,181,208
-,189,208,176,209,129,208,181,208,187,208,181,208,189,208,184,209,143,208,184,208
-,183,208,188,208,181,208,189,208,181,208,189,208,184,209,143,208,186,208,176,209
-,130,208,181,208,179,208,190,209,128,208,184,208,184,208,144,208,187,208,181,208
-,186,209,129,208,176,208,189,208,180,209,128,224,164,166,224,165,141,224,164,181
-,224,164,190,224,164,176,224,164,190,224,164,174,224,165,136,224,164,168,224,165
-,129,224,164,133,224,164,178,224,164,170,224,165,141,224,164,176,224,164,166,224
-,164,190,224,164,168,224,164,173,224,164,190,224,164,176,224,164,164,224,165,128
-,224,164,175,224,164,133,224,164,168,224,165,129,224,164,166,224,165,135,224,164
-,182,224,164,185,224,164,191,224,164,168,224,165,141,224,164,166,224,165,128,224
-,164,135,224,164,130,224,164,161,224,164,191,224,164,175,224,164,190,224,164,166
-,224,164,191,224,164,178,224,165,141,224,164,178,224,165,128,224,164,133,224,164
-,167,224,164,191,224,164,149,224,164,190,224,164,176,224,164,181,224,165,128,224
-,164,161,224,164,191,224,164,175,224,165,139,224,164,154,224,164,191,224,164,159
-,224,165,141,224,164,160,224,165,135,224,164,184,224,164,174,224,164,190,224,164
-,154,224,164,190,224,164,176,224,164,156,224,164,130,224,164,149,224,165,141,224
-,164,182,224,164,168,224,164,166,224,165,129,224,164,168,224,164,191,224,164,175
-,224,164,190,224,164,170,224,165,141,224,164,176,224,164,175,224,165,139,224,164
-,151,224,164,133,224,164,168,224,165,129,224,164,184,224,164,190,224,164,176,224
-,164,145,224,164,168,224,164,178,224,164,190,224,164,135,224,164,168,224,164,170
-,224,164,190,224,164,176,224,165,141,224,164,159,224,165,128,224,164,182,224,164
-,176,224,165,141,224,164,164,224,165,139,224,164,130,224,164,178,224,165,139,224
-,164,149,224,164,184,224,164,173,224,164,190,224,164,171,224,164,188,224,165,141
-,224,164,178,224,165,136,224,164,182,224,164,182,224,164,176,224,165,141,224,164
-,164,224,165,135,224,164,130,224,164,170,224,165,141,224,164,176,224,164,166,224
-,165,135,224,164,182,224,164,170,224,165,141,224,164,178,224,165,135,224,164,175
-,224,164,176,224,164,149,224,165,135,224,164,130,224,164,166,224,165,141,224,164
-,176,224,164,184,224,165,141,224,164,165,224,164,191,224,164,164,224,164,191,224
-,164,137,224,164,164,224,165,141,224,164,170,224,164,190,224,164,166,224,164,137
-,224,164,168,224,165,141,224,164,185,224,165,135,224,164,130,224,164,154,224,164
-,191,224,164,159,224,165,141,224,164,160,224,164,190,224,164,175,224,164,190,224
-,164,164,224,165,141,224,164,176,224,164,190,224,164,156,224,165,141,224,164,175
-,224,164,190,224,164,166,224,164,190,224,164,170,224,165,129,224,164,176,224,164
-,190,224,164,168,224,165,135,224,164,156,224,165,139,224,164,161,224,164,188,224
-,165,135,224,164,130,224,164,133,224,164,168,224,165,129,224,164,181,224,164,190
-,224,164,166,224,164,182,224,165,141,224,164,176,224,165,135,224,164,163,224,165
-,128,224,164,182,224,164,191,224,164,149,224,165,141,224,164,183,224,164,190,224
-,164,184,224,164,176,224,164,149,224,164,190,224,164,176,224,165,128,224,164,184
-,224,164,130,224,164,151,224,165,141,224,164,176,224,164,185,224,164,170,224,164
-,176,224,164,191,224,164,163,224,164,190,224,164,174,224,164,172,224,165,141,224
-,164,176,224,164,190,224,164,130,224,164,161,224,164,172,224,164,154,224,165,141
-,224,164,154,224,165,139,224,164,130,224,164,137,224,164,170,224,164,178,224,164
-,172,224,165,141,224,164,167,224,164,174,224,164,130,224,164,164,224,165,141,224
-,164,176,224,165,128,224,164,184,224,164,130,224,164,170,224,164,176,224,165,141
-,224,164,149,224,164,137,224,164,174,224,165,141,224,164,174,224,165,128,224,164
-,166,224,164,174,224,164,190,224,164,167,224,165,141,224,164,175,224,164,174,224
-,164,184,224,164,185,224,164,190,224,164,175,224,164,164,224,164,190,224,164,182
-,224,164,172,224,165,141,224,164,166,224,165,139,224,164,130,224,164,174,224,165
-,128,224,164,161,224,164,191,224,164,175,224,164,190,224,164,134,224,164,136,224
-,164,170,224,165,128,224,164,143,224,164,178,224,164,174,224,165,139,224,164,172
-,224,164,190,224,164,135,224,164,178,224,164,184,224,164,130,224,164,150,224,165
-,141,224,164,175,224,164,190,224,164,134,224,164,170,224,164,176,224,165,135,224
-,164,182,224,164,168,224,164,133,224,164,168,224,165,129,224,164,172,224,164,130
-,224,164,167,224,164,172,224,164,190,224,164,156,224,164,188,224,164,190,224,164
-,176,224,164,168,224,164,181,224,165,128,224,164,168,224,164,164,224,164,174,224
-,164,170,224,165,141,224,164,176,224,164,174,224,165,129,224,164,150,224,164,170
-,224,165,141,224,164,176,224,164,182,224,165,141,224,164,168,224,164,170,224,164
-,176,224,164,191,224,164,181,224,164,190,224,164,176,224,164,168,224,165,129,224
-,164,149,224,164,184,224,164,190,224,164,168,224,164,184,224,164,174,224,164,176
-,224,165,141,224,164,165,224,164,168,224,164,134,224,164,175,224,165,139,224,164
-,156,224,164,191,224,164,164,224,164,184,224,165,139,224,164,174,224,164,181,224
-,164,190,224,164,176,216,167,217,132,217,133,216,180,216,167,216,177,217,131,216
-,167,216,170,216,167,217,132,217,133,217,134,216,170,216,175,217,138,216,167,216
-,170,216,167,217,132,217,131,217,133,216,168,217,138,217,136,216,170,216,177,216
-,167,217,132,217,133,216,180,216,167,217,135,216,175,216,167,216,170,216,185,216
-,175,216,175,216,167,217,132,216,178,217,136,216,167,216,177,216,185,216,175,216
-,175,216,167,217,132,216,177,216,175,217,136,216,175,216,167,217,132,216,165,216
-,179,217,132,216,167,217,133,217,138,216,169,216,167,217,132,217,129,217,136,216
-,170,217,136,216,180,217,136,216,168,216,167,217,132,217,133,216,179,216,167,216
-,168,217,130,216,167,216,170,216,167,217,132,217,133,216,185,217,132,217,136,217
-,133,216,167,216,170,216,167,217,132,217,133,216,179,217,132,216,179,217,132,216
-,167,216,170,216,167,217,132,216,172,216,177,216,167,217,129,217,138,217,131,216
-,179,216,167,217,132,216,167,216,179,217,132,216,167,217,133,217,138,216,169,216
-,167,217,132,216,167,216,170,216,181,216,167,217,132,216,167,216,170,107,101,121
-,119,111,114,100,115,34,32,99,111,110,116,101,110,116,61,34,119,51,46,111,114,
-103,47,49,57,57,57,47,120,104,116,109,108,34,62,60,97,32,116,97,114,103,101,116,
-61,34,95,98,108,97,110,107,34,32,116,101,120,116,47,104,116,109,108,59,32,99,104
-,97,114,115,101,116,61,34,32,116,97,114,103,101,116,61,34,95,98,108,97,110,107,
-34,62,60,116,97,98,108,101,32,99,101,108,108,112,97,100,100,105,110,103,61,34,97
-,117,116,111,99,111,109,112,108,101,116,101,61,34,111,102,102,34,32,116,101,120,
-116,45,97,108,105,103,110,58,32,99,101,110,116,101,114,59,116,111,32,108,97,115,
-116,32,118,101,114,115,105,111,110,32,98,121,32,98,97,99,107,103,114,111,117,110
-,100,45,99,111,108,111,114,58,32,35,34,32,104,114,101,102,61,34,104,116,116,112,
-58,47,47,119,119,119,46,47,100,105,118,62,60,47,100,105,118,62,60,100,105,118,32
-,105,100,61,60,97,32,104,114,101,102,61,34,35,34,32,99,108,97,115,115,61,34,34,
-62,60,105,109,103,32,115,114,99,61,34,104,116,116,112,58,47,47,99,114,105,112,
-116,34,32,115,114,99,61,34,104,116,116,112,58,47,47,10,60,115,99,114,105,112,116
-,32,108,97,110,103,117,97,103,101,61,34,47,47,69,78,34,32,34,104,116,116,112,58,
-47,47,119,119,119,46,119,101,110,99,111,100,101,85,82,73,67,111,109,112,111,110,
-101,110,116,40,34,32,104,114,101,102,61,34,106,97,118,97,115,99,114,105,112,116,
-58,60,100,105,118,32,99,108,97,115,115,61,34,99,111,110,116,101,110,116,100,111,
-99,117,109,101,110,116,46,119,114,105,116,101,40,39,60,115,99,112,111,115,105,
-116,105,111,110,58,32,97,98,115,111,108,117,116,101,59,115,99,114,105,112,116,32
-,115,114,99,61,34,104,116,116,112,58,47,47,32,115,116,121,108,101,61,34,109,97,
-114,103,105,110,45,116,111,112,58,46,109,105,110,46,106,115,34,62,60,47,115,99,
-114,105,112,116,62,10,60,47,100,105,118,62,10,60,100,105,118,32,99,108,97,115,
-115,61,34,119,51,46,111,114,103,47,49,57,57,57,47,120,104,116,109,108,34,32,10,
-13,10,60,47,98,111,100,121,62,13,10,60,47,104,116,109,108,62,100,105,115,116,105
-,110,99,116,105,111,110,32,98,101,116,119,101,101,110,47,34,32,116,97,114,103,
-101,116,61,34,95,98,108,97,110,107,34,62,60,108,105,110,107,32,104,114,101,102,
-61,34,104,116,116,112,58,47,47,101,110,99,111,100,105,110,103,61,34,117,116,102,
-45,56,34,63,62,10,119,46,97,100,100,69,118,101,110,116,76,105,115,116,101,110,
-101,114,63,97,99,116,105,111,110,61,34,104,116,116,112,58,47,47,119,119,119,46,
-105,99,111,110,34,32,104,114,101,102,61,34,104,116,116,112,58,47,47,32,115,116,
-121,108,101,61,34,98,97,99,107,103,114,111,117,110,100,58,116,121,112,101,61,34,
-116,101,120,116,47,99,115,115,34,32,47,62,10,109,101,116,97,32,112,114,111,112,
-101,114,116,121,61,34,111,103,58,116,60,105,110,112,117,116,32,116,121,112,101,
-61,34,116,101,120,116,34,32,32,115,116,121,108,101,61,34,116,101,120,116,45,97,
-108,105,103,110,58,116,104,101,32,100,101,118,101,108,111,112,109,101,110,116,32
-,111,102,32,116,121,108,101,115,104,101,101,116,34,32,116,121,112,101,61,34,116,
-101,104,116,109,108,59,32,99,104,97,114,115,101,116,61,117,116,102,45,56,105,115
-,32,99,111,110,115,105,100,101,114,101,100,32,116,111,32,98,101,116,97,98,108,
-101,32,119,105,100,116,104,61,34,49,48,48,37,34,32,73,110,32,97,100,100,105,116,
-105,111,110,32,116,111,32,116,104,101,32,99,111,110,116,114,105,98,117,116,101,
-100,32,116,111,32,116,104,101,32,100,105,102,102,101,114,101,110,99,101,115,32,
-98,101,116,119,101,101,110,100,101,118,101,108,111,112,109,101,110,116,32,111,
-102,32,116,104,101,32,73,116,32,105,115,32,105,109,112,111,114,116,97,110,116,32
-,116,111,32,60,47,115,99,114,105,112,116,62,10,10,60,115,99,114,105,112,116,32,
-32,115,116,121,108,101,61,34,102,111,110,116,45,115,105,122,101,58,49,62,60,47,
-115,112,97,110,62,60,115,112,97,110,32,105,100,61,103,98,76,105,98,114,97,114,
-121,32,111,102,32,67,111,110,103,114,101,115,115,60,105,109,103,32,115,114,99,61
-,34,104,116,116,112,58,47,47,105,109,69,110,103,108,105,115,104,32,116,114,97,
-110,115,108,97,116,105,111,110,65,99,97,100,101,109,121,32,111,102,32,83,99,105,
-101,110,99,101,115,100,105,118,32,115,116,121,108,101,61,34,100,105,115,112,108,
-97,121,58,99,111,110,115,116,114,117,99,116,105,111,110,32,111,102,32,116,104,
-101,46,103,101,116,69,108,101,109,101,110,116,66,121,73,100,40,105,100,41,105,
-110,32,99,111,110,106,117,110,99,116,105,111,110,32,119,105,116,104,69,108,101,
-109,101,110,116,40,39,115,99,114,105,112,116,39,41,59,32,60,109,101,116,97,32,
-112,114,111,112,101,114,116,121,61,34,111,103,58,208,145,209,138,208,187,208,179
-,208,176,209,128,209,129,208,186,208,184,10,32,116,121,112,101,61,34,116,101,120
-,116,34,32,110,97,109,101,61,34,62,80,114,105,118,97,99,121,32,80,111,108,105,99
-,121,60,47,97,62,97,100,109,105,110,105,115,116,101,114,101,100,32,98,121,32,116
-,104,101,101,110,97,98,108,101,83,105,110,103,108,101,82,101,113,117,101,115,116
-,115,116,121,108,101,61,38,113,117,111,116,59,109,97,114,103,105,110,58,60,47,
-100,105,118,62,60,47,100,105,118,62,60,47,100,105,118,62,60,62,60,105,109,103,32
-,115,114,99,61,34,104,116,116,112,58,47,47,105,32,115,116,121,108,101,61,38,113,
-117,111,116,59,102,108,111,97,116,58,114,101,102,101,114,114,101,100,32,116,111,
-32,97,115,32,116,104,101,32,116,111,116,97,108,32,112,111,112,117,108,97,116,105
-,111,110,32,111,102,105,110,32,87,97,115,104,105,110,103,116,111,110,44,32,68,46
-,67,46,32,115,116,121,108,101,61,34,98,97,99,107,103,114,111,117,110,100,45,97,
-109,111,110,103,32,111,116,104,101,114,32,116,104,105,110,103,115,44,111,114,103
-,97,110,105,122,97,116,105,111,110,32,111,102,32,116,104,101,112,97,114,116,105,
-99,105,112,97,116,101,100,32,105,110,32,116,104,101,116,104,101,32,105,110,116,
-114,111,100,117,99,116,105,111,110,32,111,102,105,100,101,110,116,105,102,105,
-101,100,32,119,105,116,104,32,116,104,101,102,105,99,116,105,111,110,97,108,32,
-99,104,97,114,97,99,116,101,114,32,79,120,102,111,114,100,32,85,110,105,118,101,
-114,115,105,116,121,32,109,105,115,117,110,100,101,114,115,116,97,110,100,105,
-110,103,32,111,102,84,104,101,114,101,32,97,114,101,44,32,104,111,119,101,118,
-101,114,44,115,116,121,108,101,115,104,101,101,116,34,32,104,114,101,102,61,34,
-47,67,111,108,117,109,98,105,97,32,85,110,105,118,101,114,115,105,116,121,101,
-120,112,97,110,100,101,100,32,116,111,32,105,110,99,108,117,100,101,117,115,117,
-97,108,108,121,32,114,101,102,101,114,114,101,100,32,116,111,105,110,100,105,99,
-97,116,105,110,103,32,116,104,97,116,32,116,104,101,104,97,118,101,32,115,117,
-103,103,101,115,116,101,100,32,116,104,97,116,97,102,102,105,108,105,97,116,101,
-100,32,119,105,116,104,32,116,104,101,99,111,114,114,101,108,97,116,105,111,110,
-32,98,101,116,119,101,101,110,110,117,109,98,101,114,32,111,102,32,100,105,102,
-102,101,114,101,110,116,62,60,47,116,100,62,60,47,116,114,62,60,47,116,97,98,108
-,101,62,82,101,112,117,98,108,105,99,32,111,102,32,73,114,101,108,97,110,100,10,
-60,47,115,99,114,105,112,116,62,10,60,115,99,114,105,112,116,32,117,110,100,101,
-114,32,116,104,101,32,105,110,102,108,117,101,110,99,101,99,111,110,116,114,105,
-98,117,116,105,111,110,32,116,111,32,116,104,101,79,102,102,105,99,105,97,108,32
-,119,101,98,115,105,116,101,32,111,102,104,101,97,100,113,117,97,114,116,101,114
-,115,32,111,102,32,116,104,101,99,101,110,116,101,114,101,100,32,97,114,111,117,
-110,100,32,116,104,101,105,109,112,108,105,99,97,116,105,111,110,115,32,111,102,
-32,116,104,101,104,97,118,101,32,98,101,101,110,32,100,101,118,101,108,111,112,
-101,100,70,101,100,101,114,97,108,32,82,101,112,117,98,108,105,99,32,111,102,98,
-101,99,97,109,101,32,105,110,99,114,101,97,115,105,110,103,108,121,99,111,110,
-116,105,110,117,97,116,105,111,110,32,111,102,32,116,104,101,78,111,116,101,44,
-32,104,111,119,101,118,101,114,44,32,116,104,97,116,115,105,109,105,108,97,114,
-32,116,111,32,116,104,97,116,32,111,102,32,99,97,112,97,98,105,108,105,116,105,
-101,115,32,111,102,32,116,104,101,97,99,99,111,114,100,97,110,99,101,32,119,105,
-116,104,32,116,104,101,112,97,114,116,105,99,105,112,97,110,116,115,32,105,110,
-32,116,104,101,102,117,114,116,104,101,114,32,100,101,118,101,108,111,112,109,
-101,110,116,117,110,100,101,114,32,116,104,101,32,100,105,114,101,99,116,105,111
-,110,105,115,32,111,102,116,101,110,32,99,111,110,115,105,100,101,114,101,100,
-104,105,115,32,121,111,117,110,103,101,114,32,98,114,111,116,104,101,114,60,47,
-116,100,62,60,47,116,114,62,60,47,116,97,98,108,101,62,60,97,32,104,116,116,112,
-45,101,113,117,105,118,61,34,88,45,85,65,45,112,104,121,115,105,99,97,108,32,112
-,114,111,112,101,114,116,105,101,115,111,102,32,66,114,105,116,105,115,104,32,67
-,111,108,117,109,98,105,97,104,97,115,32,98,101,101,110,32,99,114,105,116,105,99
-,105,122,101,100,40,119,105,116,104,32,116,104,101,32,101,120,99,101,112,116,105
-,111,110,113,117,101,115,116,105,111,110,115,32,97,98,111,117,116,32,116,104,101
-,112,97,115,115,105,110,103,32,116,104,114,111,117,103,104,32,116,104,101,48,34,
-32,99,101,108,108,112,97,100,100,105,110,103,61,34,48,34,32,116,104,111,117,115,
-97,110,100,115,32,111,102,32,112,101,111,112,108,101,114,101,100,105,114,101,99,
-116,115,32,104,101,114,101,46,32,70,111,114,104,97,118,101,32,99,104,105,108,100
-,114,101,110,32,117,110,100,101,114,37,51,69,37,51,67,47,115,99,114,105,112,116,
-37,51,69,34,41,41,59,60,97,32,104,114,101,102,61,34,104,116,116,112,58,47,47,119
-,119,119,46,60,108,105,62,60,97,32,104,114,101,102,61,34,104,116,116,112,58,47,
-47,115,105,116,101,95,110,97,109,101,34,32,99,111,110,116,101,110,116,61,34,116,
-101,120,116,45,100,101,99,111,114,97,116,105,111,110,58,110,111,110,101,115,116,
-121,108,101,61,34,100,105,115,112,108,97,121,58,32,110,111,110,101,60,109,101,
-116,97,32,104,116,116,112,45,101,113,117,105,118,61,34,88,45,110,101,119,32,68,
-97,116,101,40,41,46,103,101,116,84,105,109,101,40,41,32,116,121,112,101,61,34,
-105,109,97,103,101,47,120,45,105,99,111,110,34,60,47,115,112,97,110,62,60,115,
-112,97,110,32,99,108,97,115,115,61,34,108,97,110,103,117,97,103,101,61,34,106,97
-,118,97,115,99,114,105,112,116,119,105,110,100,111,119,46,108,111,99,97,116,105,
-111,110,46,104,114,101,102,60,97,32,104,114,101,102,61,34,106,97,118,97,115,99,
-114,105,112,116,58,45,45,62,13,10,60,115,99,114,105,112,116,32,116,121,112,101,
-61,34,116,60,97,32,104,114,101,102,61,39,104,116,116,112,58,47,47,119,119,119,46
-,104,111,114,116,99,117,116,32,105,99,111,110,34,32,104,114,101,102,61,34,60,47,
-100,105,118,62,13,10,60,100,105,118,32,99,108,97,115,115,61,34,60,115,99,114,105
-,112,116,32,115,114,99,61,34,104,116,116,112,58,47,47,34,32,114,101,108,61,34,
-115,116,121,108,101,115,104,101,101,116,34,32,116,60,47,100,105,118,62,10,60,115
-,99,114,105,112,116,32,116,121,112,101,61,47,97,62,32,60,97,32,104,114,101,102,
-61,34,104,116,116,112,58,47,47,32,97,108,108,111,119,84,114,97,110,115,112,97,
-114,101,110,99,121,61,34,88,45,85,65,45,67,111,109,112,97,116,105,98,108,101,34,
-32,99,111,110,114,101,108,97,116,105,111,110,115,104,105,112,32,98,101,116,119,
-101,101,110,10,60,47,115,99,114,105,112,116,62,13,10,60,115,99,114,105,112,116,
-32,60,47,97,62,60,47,108,105,62,60,47,117,108,62,60,47,100,105,118,62,97,115,115
-,111,99,105,97,116,101,100,32,119,105,116,104,32,116,104,101,32,112,114,111,103,
-114,97,109,109,105,110,103,32,108,97,110,103,117,97,103,101,60,47,97,62,60,97,32
-,104,114,101,102,61,34,104,116,116,112,58,47,47,60,47,97,62,60,47,108,105,62,60,
-108,105,32,99,108,97,115,115,61,34,102,111,114,109,32,97,99,116,105,111,110,61,
-34,104,116,116,112,58,47,47,60,100,105,118,32,115,116,121,108,101,61,34,100,105,
-115,112,108,97,121,58,116,121,112,101,61,34,116,101,120,116,34,32,110,97,109,101
-,61,34,113,34,60,116,97,98,108,101,32,119,105,100,116,104,61,34,49,48,48,37,34,
-32,98,97,99,107,103,114,111,117,110,100,45,112,111,115,105,116,105,111,110,58,34
-,32,98,111,114,100,101,114,61,34,48,34,32,119,105,100,116,104,61,34,114,101,108,
-61,34,115,104,111,114,116,99,117,116,32,105,99,111,110,34,32,104,54,62,60,117,
-108,62,60,108,105,62,60,97,32,104,114,101,102,61,34,32,32,60,109,101,116,97,32,
-104,116,116,112,45,101,113,117,105,118,61,34,99,115,115,34,32,109,101,100,105,97
-,61,34,115,99,114,101,101,110,34,32,114,101,115,112,111,110,115,105,98,108,101,
-32,102,111,114,32,116,104,101,32,34,32,116,121,112,101,61,34,97,112,112,108,105,
-99,97,116,105,111,110,47,34,32,115,116,121,108,101,61,34,98,97,99,107,103,114,
-111,117,110,100,45,104,116,109,108,59,32,99,104,97,114,115,101,116,61,117,116,
-102,45,56,34,32,97,108,108,111,119,116,114,97,110,115,112,97,114,101,110,99,121,
-61,34,115,116,121,108,101,115,104,101,101,116,34,32,116,121,112,101,61,34,116,
-101,13,10,60,109,101,116,97,32,104,116,116,112,45,101,113,117,105,118,61,34,62,
-60,47,115,112,97,110,62,60,115,112,97,110,32,99,108,97,115,115,61,34,48,34,32,99
-,101,108,108,115,112,97,99,105,110,103,61,34,48,34,62,59,10,60,47,115,99,114,105
-,112,116,62,10,60,115,99,114,105,112,116,32,115,111,109,101,116,105,109,101,115,
-32,99,97,108,108,101,100,32,116,104,101,100,111,101,115,32,110,111,116,32,110,
-101,99,101,115,115,97,114,105,108,121,70,111,114,32,109,111,114,101,32,105,110,
-102,111,114,109,97,116,105,111,110,97,116,32,116,104,101,32,98,101,103,105,110,
-110,105,110,103,32,111,102,32,60,33,68,79,67,84,89,80,69,32,104,116,109,108,62,
-60,104,116,109,108,112,97,114,116,105,99,117,108,97,114,108,121,32,105,110,32,
-116,104,101,32,116,121,112,101,61,34,104,105,100,100,101,110,34,32,110,97,109,
-101,61,34,106,97,118,97,115,99,114,105,112,116,58,118,111,105,100,40,48,41,59,34
-,101,102,102,101,99,116,105,118,101,110,101,115,115,32,111,102,32,116,104,101,32
-,97,117,116,111,99,111,109,112,108,101,116,101,61,34,111,102,102,34,32,103,101,
-110,101,114,97,108,108,121,32,99,111,110,115,105,100,101,114,101,100,62,60,105,
-110,112,117,116,32,116,121,112,101,61,34,116,101,120,116,34,32,34,62,60,47,115,
-99,114,105,112,116,62,13,10,60,115,99,114,105,112,116,116,104,114,111,117,103,
-104,111,117,116,32,116,104,101,32,119,111,114,108,100,99,111,109,109,111,110,32,
-109,105,115,99,111,110,99,101,112,116,105,111,110,97,115,115,111,99,105,97,116,
-105,111,110,32,119,105,116,104,32,116,104,101,60,47,100,105,118,62,10,60,47,100,
-105,118,62,10,60,100,105,118,32,99,100,117,114,105,110,103,32,104,105,115,32,108
-,105,102,101,116,105,109,101,44,99,111,114,114,101,115,112,111,110,100,105,110,
-103,32,116,111,32,116,104,101,116,121,112,101,61,34,105,109,97,103,101,47,120,45
-,105,99,111,110,34,32,97,110,32,105,110,99,114,101,97,115,105,110,103,32,110,117
-,109,98,101,114,100,105,112,108,111,109,97,116,105,99,32,114,101,108,97,116,105,
-111,110,115,97,114,101,32,111,102,116,101,110,32,99,111,110,115,105,100,101,114,
-101,100,109,101,116,97,32,99,104,97,114,115,101,116,61,34,117,116,102,45,56,34,
-32,60,105,110,112,117,116,32,116,121,112,101,61,34,116,101,120,116,34,32,101,120
-,97,109,112,108,101,115,32,105,110,99,108,117,100,101,32,116,104,101,34,62,60,
-105,109,103,32,115,114,99,61,34,104,116,116,112,58,47,47,105,112,97,114,116,105,
-99,105,112,97,116,105,111,110,32,105,110,32,116,104,101,116,104,101,32,101,115,
-116,97,98,108,105,115,104,109,101,110,116,32,111,102,10,60,47,100,105,118,62,10,
-60,100,105,118,32,99,108,97,115,115,61,34,38,97,109,112,59,110,98,115,112,59,38,
-97,109,112,59,110,98,115,112,59,116,111,32,100,101,116,101,114,109,105,110,101,
-32,119,104,101,116,104,101,114,113,117,105,116,101,32,100,105,102,102,101,114,
-101,110,116,32,102,114,111,109,109,97,114,107,101,100,32,116,104,101,32,98,101,
-103,105,110,110,105,110,103,100,105,115,116,97,110,99,101,32,98,101,116,119,101,
-101,110,32,116,104,101,99,111,110,116,114,105,98,117,116,105,111,110,115,32,116,
-111,32,116,104,101,99,111,110,102,108,105,99,116,32,98,101,116,119,101,101,110,
-32,116,104,101,119,105,100,101,108,121,32,99,111,110,115,105,100,101,114,101,100
-,32,116,111,119,97,115,32,111,110,101,32,111,102,32,116,104,101,32,102,105,114,
-115,116,119,105,116,104,32,118,97,114,121,105,110,103,32,100,101,103,114,101,101
-,115,104,97,118,101,32,115,112,101,99,117,108,97,116,101,100,32,116,104,97,116,
-40,100,111,99,117,109,101,110,116,46,103,101,116,69,108,101,109,101,110,116,112,
-97,114,116,105,99,105,112,97,116,105,110,103,32,105,110,32,116,104,101,111,114,
-105,103,105,110,97,108,108,121,32,100,101,118,101,108,111,112,101,100,101,116,97
-,32,99,104,97,114,115,101,116,61,34,117,116,102,45,56,34,62,32,116,121,112,101,
-61,34,116,101,120,116,47,99,115,115,34,32,47,62,10,105,110,116,101,114,99,104,97
-,110,103,101,97,98,108,121,32,119,105,116,104,109,111,114,101,32,99,108,111,115,
-101,108,121,32,114,101,108,97,116,101,100,115,111,99,105,97,108,32,97,110,100,32
-,112,111,108,105,116,105,99,97,108,116,104,97,116,32,119,111,117,108,100,32,111,
-116,104,101,114,119,105,115,101,112,101,114,112,101,110,100,105,99,117,108,97,
-114,32,116,111,32,116,104,101,115,116,121,108,101,32,116,121,112,101,61,34,116,
-101,120,116,47,99,115,115,116,121,112,101,61,34,115,117,98,109,105,116,34,32,110
-,97,109,101,61,34,102,97,109,105,108,105,101,115,32,114,101,115,105,100,105,110,
-103,32,105,110,100,101,118,101,108,111,112,105,110,103,32,99,111,117,110,116,114
-,105,101,115,99,111,109,112,117,116,101,114,32,112,114,111,103,114,97,109,109,
-105,110,103,101,99,111,110,111,109,105,99,32,100,101,118,101,108,111,112,109,101
-,110,116,100,101,116,101,114,109,105,110,97,116,105,111,110,32,111,102,32,116,
-104,101,102,111,114,32,109,111,114,101,32,105,110,102,111,114,109,97,116,105,111
-,110,111,110,32,115,101,118,101,114,97,108,32,111,99,99,97,115,105,111,110,115,
-112,111,114,116,117,103,117,195,170,115,32,40,69,117,114,111,112,101,117,41,208,
-163,208,186,209,128,208,176,209,151,208,189,209,129,209,140,208,186,208,176,209,
-131,208,186,209,128,208,176,209,151,208,189,209,129,209,140,208,186,208,176,208,
-160,208,190,209,129,209,129,208,184,208,185,209,129,208,186,208,190,208,185,208,
-188,208,176,209,130,208,181,209,128,208,184,208,176,208,187,208,190,208,178,208,
-184,208,189,209,132,208,190,209,128,208,188,208,176,209,134,208,184,208,184,209,
-131,208,191,209,128,208,176,208,178,208,187,208,181,208,189,208,184,209,143,208,
-189,208,181,208,190,208,177,209,133,208,190,208,180,208,184,208,188,208,190,208,
-184,208,189,209,132,208,190,209,128,208,188,208,176,209,134,208,184,209,143,208,
-152,208,189,209,132,208,190,209,128,208,188,208,176,209,134,208,184,209,143,208,
-160,208,181,209,129,208,191,209,131,208,177,208,187,208,184,208,186,208,184,208,
-186,208,190,208,187,208,184,209,135,208,181,209,129,209,130,208,178,208,190,208,
-184,208,189,209,132,208,190,209,128,208,188,208,176,209,134,208,184,209,142,209,
-130,208,181,209,128,209,128,208,184,209,130,208,190,209,128,208,184,208,184,208,
-180,208,190,209,129,209,130,208,176,209,130,208,190,209,135,208,189,208,190,216,
-167,217,132,217,133,216,170,217,136,216,167,216,172,216,175,217,136,217,134,216,
-167,217,132,216,167,216,180,216,170,216,177,216,167,217,131,216,167,216,170,216,
-167,217,132,216,167,217,130,216,170,216,177,216,167,216,173,216,167,216,170,104,
-116,109,108,59,32,99,104,97,114,115,101,116,61,85,84,70,45,56,34,32,115,101,116,
-84,105,109,101,111,117,116,40,102,117,110,99,116,105,111,110,40,41,100,105,115,
-112,108,97,121,58,105,110,108,105,110,101,45,98,108,111,99,107,59,60,105,110,112
-,117,116,32,116,121,112,101,61,34,115,117,98,109,105,116,34,32,116,121,112,101,
-32,61,32,39,116,101,120,116,47,106,97,118,97,115,99,114,105,60,105,109,103,32,
-115,114,99,61,34,104,116,116,112,58,47,47,119,119,119,46,34,32,34,104,116,116,
-112,58,47,47,119,119,119,46,119,51,46,111,114,103,47,115,104,111,114,116,99,117,
-116,32,105,99,111,110,34,32,104,114,101,102,61,34,34,32,97,117,116,111,99,111,
-109,112,108,101,116,101,61,34,111,102,102,34,32,60,47,97,62,60,47,100,105,118,62
-,60,100,105,118,32,99,108,97,115,115,61,60,47,97,62,60,47,108,105,62,10,60,108,
-105,32,99,108,97,115,115,61,34,99,115,115,34,32,116,121,112,101,61,34,116,101,
-120,116,47,99,115,115,34,32,60,102,111,114,109,32,97,99,116,105,111,110,61,34,
-104,116,116,112,58,47,47,120,116,47,99,115,115,34,32,104,114,101,102,61,34,104,
-116,116,112,58,47,47,108,105,110,107,32,114,101,108,61,34,97,108,116,101,114,110
-,97,116,101,34,32,13,10,60,115,99,114,105,112,116,32,116,121,112,101,61,34,116,
-101,120,116,47,32,111,110,99,108,105,99,107,61,34,106,97,118,97,115,99,114,105,
-112,116,58,40,110,101,119,32,68,97,116,101,41,46,103,101,116,84,105,109,101,40,
-41,125,104,101,105,103,104,116,61,34,49,34,32,119,105,100,116,104,61,34,49,34,32
-,80,101,111,112,108,101,39,115,32,82,101,112,117,98,108,105,99,32,111,102,32,32,
-60,97,32,104,114,101,102,61,34,104,116,116,112,58,47,47,119,119,119,46,116,101,
-120,116,45,100,101,99,111,114,97,116,105,111,110,58,117,110,100,101,114,116,104,
-101,32,98,101,103,105,110,110,105,110,103,32,111,102,32,116,104,101,32,60,47,100
-,105,118,62,10,60,47,100,105,118,62,10,60,47,100,105,118,62,10,101,115,116,97,98
-,108,105,115,104,109,101,110,116,32,111,102,32,116,104,101,32,60,47,100,105,118,
-62,60,47,100,105,118,62,60,47,100,105,118,62,60,47,100,35,118,105,101,119,112,
-111,114,116,123,109,105,110,45,104,101,105,103,104,116,58,10,60,115,99,114,105,
-112,116,32,115,114,99,61,34,104,116,116,112,58,47,47,111,112,116,105,111,110,62,
-60,111,112,116,105,111,110,32,118,97,108,117,101,61,111,102,116,101,110,32,114,
-101,102,101,114,114,101,100,32,116,111,32,97,115,32,47,111,112,116,105,111,110,
-62,10,60,111,112,116,105,111,110,32,118,97,108,117,60,33,68,79,67,84,89,80,69,32
-,104,116,109,108,62,10,60,33,45,45,91,73,110,116,101,114,110,97,116,105,111,110,
-97,108,32,65,105,114,112,111,114,116,62,10,60,97,32,104,114,101,102,61,34,104,
-116,116,112,58,47,47,119,119,119,60,47,97,62,60,97,32,104,114,101,102,61,34,104,
-116,116,112,58,47,47,119,224,184,160,224,184,178,224,184,169,224,184,178,224,185
-,132,224,184,151,224,184,162,225,131,165,225,131,144,225,131,160,225,131,151,225
-,131,163,225,131,154,225,131,152,230,173,163,233,171,148,228,184,173,230,150,135
-,32,40,231,185,129,233,171,148,41,224,164,168,224,164,191,224,164,176,224,165,
-141,224,164,166,224,165,135,224,164,182,224,164,161,224,164,190,224,164,137,224,
-164,168,224,164,178,224,165,139,224,164,161,224,164,149,224,165,141,224,164,183,
-224,165,135,224,164,164,224,165,141,224,164,176,224,164,156,224,164,190,224,164,
-168,224,164,149,224,164,190,224,164,176,224,165,128,224,164,184,224,164,130,224,
-164,172,224,164,130,224,164,167,224,164,191,224,164,164,224,164,184,224,165,141,
-224,164,165,224,164,190,224,164,170,224,164,168,224,164,190,224,164,184,224,165,
-141,224,164,181,224,165,128,224,164,149,224,164,190,224,164,176,224,164,184,224,
-164,130,224,164,184,224,165,141,224,164,149,224,164,176,224,164,163,224,164,184,
-224,164,190,224,164,174,224,164,151,224,165,141,224,164,176,224,165,128,224,164,
-154,224,164,191,224,164,159,224,165,141,224,164,160,224,165,139,224,164,130,224,
-164,181,224,164,191,224,164,156,224,165,141,224,164,158,224,164,190,224,164,168,
-224,164,133,224,164,174,224,165,135,224,164,176,224,164,191,224,164,149,224,164,
-190,224,164,181,224,164,191,224,164,173,224,164,191,224,164,168,224,165,141,224,
-164,168,224,164,151,224,164,190,224,164,161,224,164,191,224,164,175,224,164,190,
-224,164,129,224,164,149,224,165,141,224,164,175,224,165,139,224,164,130,224,164,
-149,224,164,191,224,164,184,224,165,129,224,164,176,224,164,149,224,165,141,224,
-164,183,224,164,190,224,164,170,224,164,185,224,165,129,224,164,129,224,164,154,
-224,164,164,224,165,128,224,164,170,224,165,141,224,164,176,224,164,172,224,164,
-130,224,164,167,224,164,168,224,164,159,224,164,191,224,164,170,224,165,141,224,
-164,170,224,164,163,224,165,128,224,164,149,224,165,141,224,164,176,224,164,191,
-224,164,149,224,165,135,224,164,159,224,164,170,224,165,141,224,164,176,224,164,
-190,224,164,176,224,164,130,224,164,173,224,164,170,224,165,141,224,164,176,224,
-164,190,224,164,170,224,165,141,224,164,164,224,164,174,224,164,190,224,164,178,
-224,164,191,224,164,149,224,165,139,224,164,130,224,164,176,224,164,171,224,164,
-188,224,165,141,224,164,164,224,164,190,224,164,176,224,164,168,224,164,191,224,
-164,176,224,165,141,224,164,174,224,164,190,224,164,163,224,164,178,224,164,191,
-224,164,174,224,164,191,224,164,159,224,165,135,224,164,161,100,101,115,99,114,
-105,112,116,105,111,110,34,32,99,111,110,116,101,110,116,61,34,100,111,99,117,
-109,101,110,116,46,108,111,99,97,116,105,111,110,46,112,114,111,116,46,103,101,
-116,69,108,101,109,101,110,116,115,66,121,84,97,103,78,97,109,101,40,60,33,68,79
-,67,84,89,80,69,32,104,116,109,108,62,10,60,104,116,109,108,32,60,109,101,116,97
-,32,99,104,97,114,115,101,116,61,34,117,116,102,45,56,34,62,58,117,114,108,34,32
-,99,111,110,116,101,110,116,61,34,104,116,116,112,58,47,47,46,99,115,115,34,32,
-114,101,108,61,34,115,116,121,108,101,115,104,101,101,116,34,115,116,121,108,101
-,32,116,121,112,101,61,34,116,101,120,116,47,99,115,115,34,62,116,121,112,101,61
-,34,116,101,120,116,47,99,115,115,34,32,104,114,101,102,61,34,119,51,46,111,114,
-103,47,49,57,57,57,47,120,104,116,109,108,34,32,120,109,108,116,121,112,101,61,
-34,116,101,120,116,47,106,97,118,97,115,99,114,105,112,116,34,32,109,101,116,104
-,111,100,61,34,103,101,116,34,32,97,99,116,105,111,110,61,34,108,105,110,107,32,
-114,101,108,61,34,115,116,121,108,101,115,104,101,101,116,34,32,32,61,32,100,111
-,99,117,109,101,110,116,46,103,101,116,69,108,101,109,101,110,116,116,121,112,
-101,61,34,105,109,97,103,101,47,120,45,105,99,111,110,34,32,47,62,99,101,108,108
-,112,97,100,100,105,110,103,61,34,48,34,32,99,101,108,108,115,112,46,99,115,115,
-34,32,116,121,112,101,61,34,116,101,120,116,47,99,115,115,34,32,60,47,97,62,60,
-47,108,105,62,60,108,105,62,60,97,32,104,114,101,102,61,34,34,32,119,105,100,116
-,104,61,34,49,34,32,104,101,105,103,104,116,61,34,49,34,34,62,60,97,32,104,114,
-101,102,61,34,104,116,116,112,58,47,47,119,119,119,46,115,116,121,108,101,61,34,
-100,105,115,112,108,97,121,58,110,111,110,101,59,34,62,97,108,116,101,114,110,97
-,116,101,34,32,116,121,112,101,61,34,97,112,112,108,105,45,47,47,87,51,67,47,47,
-68,84,68,32,88,72,84,77,76,32,49,46,48,32,101,108,108,115,112,97,99,105,110,103,
-61,34,48,34,32,99,101,108,108,112,97,100,32,116,121,112,101,61,34,104,105,100,
-100,101,110,34,32,118,97,108,117,101,61,34,47,97,62,38,110,98,115,112,59,60,115,
-112,97,110,32,114,111,108,101,61,34,115,10,60,105,110,112,117,116,32,116,121,112
-,101,61,34,104,105,100,100,101,110,34,32,108,97,110,103,117,97,103,101,61,34,74,
-97,118,97,83,99,114,105,112,116,34,32,32,100,111,99,117,109,101,110,116,46,103,
-101,116,69,108,101,109,101,110,116,115,66,103,61,34,48,34,32,99,101,108,108,115,
-112,97,99,105,110,103,61,34,48,34,32,121,112,101,61,34,116,101,120,116,47,99,115
-,115,34,32,109,101,100,105,97,61,34,116,121,112,101,61,39,116,101,120,116,47,106
-,97,118,97,115,99,114,105,112,116,39,119,105,116,104,32,116,104,101,32,101,120,
-99,101,112,116,105,111,110,32,111,102,32,121,112,101,61,34,116,101,120,116,47,99
-,115,115,34,32,114,101,108,61,34,115,116,32,104,101,105,103,104,116,61,34,49,34,
-32,119,105,100,116,104,61,34,49,34,32,61,39,43,101,110,99,111,100,101,85,82,73,
-67,111,109,112,111,110,101,110,116,40,60,108,105,110,107,32,114,101,108,61,34,97
-,108,116,101,114,110,97,116,101,34,32,10,98,111,100,121,44,32,116,114,44,32,105,
-110,112,117,116,44,32,116,101,120,116,109,101,116,97,32,110,97,109,101,61,34,114
-,111,98,111,116,115,34,32,99,111,110,109,101,116,104,111,100,61,34,112,111,115,
-116,34,32,97,99,116,105,111,110,61,34,62,10,60,97,32,104,114,101,102,61,34,104,
-116,116,112,58,47,47,119,119,119,46,99,115,115,34,32,114,101,108,61,34,115,116,
-121,108,101,115,104,101,101,116,34,32,60,47,100,105,118,62,60,47,100,105,118,62,
-60,100,105,118,32,99,108,97,115,115,108,97,110,103,117,97,103,101,61,34,106,97,
-118,97,115,99,114,105,112,116,34,62,97,114,105,97,45,104,105,100,100,101,110,61,
-34,116,114,117,101,34,62,194,183,60,114,105,112,116,34,32,116,121,112,101,61,34,
-116,101,120,116,47,106,97,118,97,115,108,61,48,59,125,41,40,41,59,10,40,102,117,
-110,99,116,105,111,110,40,41,123,98,97,99,107,103,114,111,117,110,100,45,105,109
-,97,103,101,58,32,117,114,108,40,47,97,62,60,47,108,105,62,60,108,105,62,60,97,
-32,104,114,101,102,61,34,104,9,9,60,108,105,62,60,97,32,104,114,101,102,61,34,
-104,116,116,112,58,47,47,97,116,111,114,34,32,97,114,105,97,45,104,105,100,100,
-101,110,61,34,116,114,117,62,32,60,97,32,104,114,101,102,61,34,104,116,116,112,
-58,47,47,119,119,119,46,108,97,110,103,117,97,103,101,61,34,106,97,118,97,115,99
-,114,105,112,116,34,32,47,111,112,116,105,111,110,62,10,60,111,112,116,105,111,
-110,32,118,97,108,117,101,47,100,105,118,62,60,47,100,105,118,62,60,100,105,118,
-32,99,108,97,115,115,61,114,97,116,111,114,34,32,97,114,105,97,45,104,105,100,
-100,101,110,61,34,116,114,101,61,40,110,101,119,32,68,97,116,101,41,46,103,101,
-116,84,105,109,101,40,41,112,111,114,116,117,103,117,195,170,115,32,40,100,111,
-32,66,114,97,115,105,108,41,208,190,209,128,208,179,208,176,208,189,208,184,208,
-183,208,176,209,134,208,184,208,184,208,178,208,190,208,183,208,188,208,190,208,
-182,208,189,208,190,209,129,209,130,209,140,208,190,208,177,209,128,208,176,208,
-183,208,190,208,178,208,176,208,189,208,184,209,143,209,128,208,181,208,179,208,
-184,209,129,209,130,209,128,208,176,209,134,208,184,208,184,208,178,208,190,208,
-183,208,188,208,190,208,182,208,189,208,190,209,129,209,130,208,184,208,190,208,
-177,209,143,208,183,208,176,209,130,208,181,208,187,209,140,208,189,208,176,60,
-33,68,79,67,84,89,80,69,32,104,116,109,108,32,80,85,66,76,73,67,32,34,110,116,45
-,84,121,112,101,34,32,99,111,110,116,101,110,116,61,34,116,101,120,116,47,60,109
-,101,116,97,32,104,116,116,112,45,101,113,117,105,118,61,34,67,111,110,116,101,
-114,97,110,115,105,116,105,111,110,97,108,47,47,69,78,34,32,34,104,116,116,112,
-58,60,104,116,109,108,32,120,109,108,110,115,61,34,104,116,116,112,58,47,47,119,
-119,119,45,47,47,87,51,67,47,47,68,84,68,32,88,72,84,77,76,32,49,46,48,32,84,68,
-84,68,47,120,104,116,109,108,49,45,116,114,97,110,115,105,116,105,111,110,97,108
-,47,47,119,119,119,46,119,51,46,111,114,103,47,84,82,47,120,104,116,109,108,49,
-47,112,101,32,61,32,39,116,101,120,116,47,106,97,118,97,115,99,114,105,112,116,
-39,59,60,109,101,116,97,32,110,97,109,101,61,34,100,101,115,99,114,105,112,116,
-105,111,110,112,97,114,101,110,116,78,111,100,101,46,105,110,115,101,114,116,66,
-101,102,111,114,101,60,105,110,112,117,116,32,116,121,112,101,61,34,104,105,100,
-100,101,110,34,32,110,97,106,115,34,32,116,121,112,101,61,34,116,101,120,116,47,
-106,97,118,97,115,99,114,105,40,100,111,99,117,109,101,110,116,41,46,114,101,97,
-100,121,40,102,117,110,99,116,105,115,99,114,105,112,116,32,116,121,112,101,61,
-34,116,101,120,116,47,106,97,118,97,115,105,109,97,103,101,34,32,99,111,110,116,
-101,110,116,61,34,104,116,116,112,58,47,47,85,65,45,67,111,109,112,97,116,105,98
-,108,101,34,32,99,111,110,116,101,110,116,61,116,109,108,59,32,99,104,97,114,115
-,101,116,61,117,116,102,45,56,34,32,47,62,10,108,105,110,107,32,114,101,108,61,
-34,115,104,111,114,116,99,117,116,32,105,99,111,110,60,108,105,110,107,32,114,
-101,108,61,34,115,116,121,108,101,115,104,101,101,116,34,32,60,47,115,99,114,105
-,112,116,62,10,60,115,99,114,105,112,116,32,116,121,112,101,61,61,32,100,111,99,
-117,109,101,110,116,46,99,114,101,97,116,101,69,108,101,109,101,110,60,97,32,116
-,97,114,103,101,116,61,34,95,98,108,97,110,107,34,32,104,114,101,102,61,32,100,
-111,99,117,109,101,110,116,46,103,101,116,69,108,101,109,101,110,116,115,66,105,
-110,112,117,116,32,116,121,112,101,61,34,116,101,120,116,34,32,110,97,109,101,61
-,97,46,116,121,112,101,32,61,32,39,116,101,120,116,47,106,97,118,97,115,99,114,
-105,110,112,117,116,32,116,121,112,101,61,34,104,105,100,100,101,110,34,32,110,
-97,109,101,104,116,109,108,59,32,99,104,97,114,115,101,116,61,117,116,102,45,56,
-34,32,47,62,100,116,100,34,62,10,60,104,116,109,108,32,120,109,108,110,115,61,34
-,104,116,116,112,45,47,47,87,51,67,47,47,68,84,68,32,72,84,77,76,32,52,46,48,49,
-32,84,101,110,116,115,66,121,84,97,103,78,97,109,101,40,39,115,99,114,105,112,
-116,39,41,105,110,112,117,116,32,116,121,112,101,61,34,104,105,100,100,101,110,
-34,32,110,97,109,60,115,99,114,105,112,116,32,116,121,112,101,61,34,116,101,120,
-116,47,106,97,118,97,115,34,32,115,116,121,108,101,61,34,100,105,115,112,108,97,
-121,58,110,111,110,101,59,34,62,100,111,99,117,109,101,110,116,46,103,101,116,69
-,108,101,109,101,110,116,66,121,73,100,40,61,100,111,99,117,109,101,110,116,46,
-99,114,101,97,116,101,69,108,101,109,101,110,116,40,39,32,116,121,112,101,61,39,
-116,101,120,116,47,106,97,118,97,115,99,114,105,112,116,39,105,110,112,117,116,
-32,116,121,112,101,61,34,116,101,120,116,34,32,110,97,109,101,61,34,100,46,103,
-101,116,69,108,101,109,101,110,116,115,66,121,84,97,103,78,97,109,101,40,115,110
-,105,99,97,108,34,32,104,114,101,102,61,34,104,116,116,112,58,47,47,119,119,119,
-46,67,47,47,68,84,68,32,72,84,77,76,32,52,46,48,49,32,84,114,97,110,115,105,116,
-60,115,116,121,108,101,32,116,121,112,101,61,34,116,101,120,116,47,99,115,115,34
-,62,10,10,60,115,116,121,108,101,32,116,121,112,101,61,34,116,101,120,116,47,99,
-115,115,34,62,105,111,110,97,108,46,100,116,100,34,62,10,60,104,116,109,108,32,
-120,109,108,110,115,61,104,116,116,112,45,101,113,117,105,118,61,34,67,111,110,
-116,101,110,116,45,84,121,112,101,100,105,110,103,61,34,48,34,32,99,101,108,108,
-115,112,97,99,105,110,103,61,34,48,34,104,116,109,108,59,32,99,104,97,114,115,
-101,116,61,117,116,102,45,56,34,32,47,62,10,32,115,116,121,108,101,61,34,100,105
-,115,112,108,97,121,58,110,111,110,101,59,34,62,60,60,108,105,62,60,97,32,104,
-114,101,102,61,34,104,116,116,112,58,47,47,119,119,119,46,32,116,121,112,101,61,
-39,116,101,120,116,47,106,97,118,97,115,99,114,105,112,116,39,62,208,180,208,181
-,209,143,209,130,208,181,208,187,209,140,208,189,208,190,209,129,209,130,208,184
-,209,129,208,190,208,190,209,130,208,178,208,181,209,130,209,129,209,130,208,178
-,208,184,208,184,208,191,209,128,208,190,208,184,208,183,208,178,208,190,208,180
-,209,129,209,130,208,178,208,176,208,177,208,181,208,183,208,190,208,191,208,176
-,209,129,208,189,208,190,209,129,209,130,208,184,224,164,170,224,165,129,224,164
-,184,224,165,141,224,164,164,224,164,191,224,164,149,224,164,190,224,164,149,224
-,164,190,224,164,130,224,164,151,224,165,141,224,164,176,224,165,135,224,164,184
-,224,164,137,224,164,168,224,165,141,224,164,185,224,165,139,224,164,130,224,164
-,168,224,165,135,224,164,181,224,164,191,224,164,167,224,164,190,224,164,168,224
-,164,184,224,164,173,224,164,190,224,164,171,224,164,191,224,164,149,224,165,141
-,224,164,184,224,164,191,224,164,130,224,164,151,224,164,184,224,165,129,224,164
-,176,224,164,149,224,165,141,224,164,183,224,164,191,224,164,164,224,164,149,224
-,165,137,224,164,170,224,165,128,224,164,176,224,164,190,224,164,135,224,164,159
-,224,164,181,224,164,191,224,164,156,224,165,141,224,164,158,224,164,190,224,164
-,170,224,164,168,224,164,149,224,164,190,224,164,176,224,165,141,224,164,176,224
-,164,181,224,164,190,224,164,136,224,164,184,224,164,149,224,165,141,224,164,176
-,224,164,191,224,164,175,224,164,164,224,164,190
-}
-;
-#endif /* !BROTLI_EXTERNAL_DICTIONARY_DATA */
-
-static BrotliDictionary kBrotliDictionary = {
- /* size_bits_by_length */
- {
- 0, 0, 0, 0, 10, 10, 11, 11,
- 10, 10, 10, 10, 10, 9, 9, 8,
- 7, 7, 8, 7, 7, 6, 6, 5,
- 5, 0, 0, 0, 0, 0, 0, 0
- },
-
- /* offsets_by_length */
- {
- 0, 0, 0, 0, 0, 4096, 9216, 21504,
- 35840, 44032, 53248, 63488, 74752, 87040, 93696, 100864,
- 104704, 106752, 108928, 113536, 115968, 118528, 119872, 121280,
- 122016, 122784, 122784, 122784, 122784, 122784, 122784, 122784
- },
-
- /* data_size == sizeof(kBrotliDictionaryData) */
- 122784,
-
- /* data */
-#if defined(BROTLI_EXTERNAL_DICTIONARY_DATA)
- NULL
-#else
- kBrotliDictionaryData
-#endif
-};
-
-const BrotliDictionary* BrotliGetDictionary() {
- return &kBrotliDictionary;
-}
-
-void BrotliSetDictionaryData(const uint8_t* data) {
- if (!!data && !kBrotliDictionary.data) {
- kBrotliDictionary.data = data;
- }
-}
-
-#if defined(__cplusplus) || defined(c_plusplus)
-} /* extern "C" */
-#endif
diff --git a/BaseTools/Source/C/BrotliCompress/common/transform.c b/BaseTools/Source/C/BrotliCompress/common/transform.c
deleted file mode 100644
index aaac74b526d3..000000000000
--- a/BaseTools/Source/C/BrotliCompress/common/transform.c
+++ /dev/null
@@ -1,235 +0,0 @@
-/* Copyright 2013 Google Inc. All Rights Reserved.
-
- Distributed under MIT license.
- See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
-*/
-
-#include "./transform.h"
-
-#if defined(__cplusplus) || defined(c_plusplus)
-extern "C" {
-#endif
-
-/* RFC 7932 transforms string data */
-static const char kPrefixSuffix[217] =
- "\1 \2, \10 of the \4 of \2s \1.\5 and \4 "
-/* 0x _0 _2 __5 _E _3 _6 _8 _E */
- "in \1\"\4 to \2\">\1\n\2. \1]\5 for \3 a \6 "
-/* 2x _3_ _5 _A_ _D_ _F _2 _4 _A _E */
- "that \1\'\6 with \6 from \4 by \1(\6. T"
-/* 4x _5_ _7 _E _5 _A _C */
- "he \4 on \4 as \4 is \4ing \2\n\t\1:\3ed "
-/* 6x _3 _8 _D _2 _7_ _ _A _C */
- "\2=\"\4 at \3ly \1,\2=\'\5.com/\7. This \5"
-/* 8x _0 _ _3 _8 _C _E _ _1 _7 _F */
- " not \3er \3al \4ful \4ive \5less \4es"
-/* Ax _5 _9 _D _2 _7 _D */
- "t \4ize \2\xc2\xa0\4ous \5 the \2e \0";
-/* Cx _2 _7___ ___ _A _F _5 _8 */
-
-static const uint16_t kPrefixSuffixMap[50] = {
- 0x00, 0x02, 0x05, 0x0E, 0x13, 0x16, 0x18, 0x1E, 0x23, 0x25,
- 0x2A, 0x2D, 0x2F, 0x32, 0x34, 0x3A, 0x3E, 0x45, 0x47, 0x4E,
- 0x55, 0x5A, 0x5C, 0x63, 0x68, 0x6D, 0x72, 0x77, 0x7A, 0x7C,
- 0x80, 0x83, 0x88, 0x8C, 0x8E, 0x91, 0x97, 0x9F, 0xA5, 0xA9,
- 0xAD, 0xB2, 0xB7, 0xBD, 0xC2, 0xC7, 0xCA, 0xCF, 0xD5, 0xD8
-};
-
-/* RFC 7932 transforms */
-static const uint8_t kTransformsData[] = {
- 49, BROTLI_TRANSFORM_IDENTITY, 49,
- 49, BROTLI_TRANSFORM_IDENTITY, 0,
- 0, BROTLI_TRANSFORM_IDENTITY, 0,
- 49, BROTLI_TRANSFORM_OMIT_FIRST_1, 49,
- 49, BROTLI_TRANSFORM_UPPERCASE_FIRST, 0,
- 49, BROTLI_TRANSFORM_IDENTITY, 47,
- 0, BROTLI_TRANSFORM_IDENTITY, 49,
- 4, BROTLI_TRANSFORM_IDENTITY, 0,
- 49, BROTLI_TRANSFORM_IDENTITY, 3,
- 49, BROTLI_TRANSFORM_UPPERCASE_FIRST, 49,
- 49, BROTLI_TRANSFORM_IDENTITY, 6,
- 49, BROTLI_TRANSFORM_OMIT_FIRST_2, 49,
- 49, BROTLI_TRANSFORM_OMIT_LAST_1, 49,
- 1, BROTLI_TRANSFORM_IDENTITY, 0,
- 49, BROTLI_TRANSFORM_IDENTITY, 1,
- 0, BROTLI_TRANSFORM_UPPERCASE_FIRST, 0,
- 49, BROTLI_TRANSFORM_IDENTITY, 7,
- 49, BROTLI_TRANSFORM_IDENTITY, 9,
- 48, BROTLI_TRANSFORM_IDENTITY, 0,
- 49, BROTLI_TRANSFORM_IDENTITY, 8,
- 49, BROTLI_TRANSFORM_IDENTITY, 5,
- 49, BROTLI_TRANSFORM_IDENTITY, 10,
- 49, BROTLI_TRANSFORM_IDENTITY, 11,
- 49, BROTLI_TRANSFORM_OMIT_LAST_3, 49,
- 49, BROTLI_TRANSFORM_IDENTITY, 13,
- 49, BROTLI_TRANSFORM_IDENTITY, 14,
- 49, BROTLI_TRANSFORM_OMIT_FIRST_3, 49,
- 49, BROTLI_TRANSFORM_OMIT_LAST_2, 49,
- 49, BROTLI_TRANSFORM_IDENTITY, 15,
- 49, BROTLI_TRANSFORM_IDENTITY, 16,
- 0, BROTLI_TRANSFORM_UPPERCASE_FIRST, 49,
- 49, BROTLI_TRANSFORM_IDENTITY, 12,
- 5, BROTLI_TRANSFORM_IDENTITY, 49,
- 0, BROTLI_TRANSFORM_IDENTITY, 1,
- 49, BROTLI_TRANSFORM_OMIT_FIRST_4, 49,
- 49, BROTLI_TRANSFORM_IDENTITY, 18,
- 49, BROTLI_TRANSFORM_IDENTITY, 17,
- 49, BROTLI_TRANSFORM_IDENTITY, 19,
- 49, BROTLI_TRANSFORM_IDENTITY, 20,
- 49, BROTLI_TRANSFORM_OMIT_FIRST_5, 49,
- 49, BROTLI_TRANSFORM_OMIT_FIRST_6, 49,
- 47, BROTLI_TRANSFORM_IDENTITY, 49,
- 49, BROTLI_TRANSFORM_OMIT_LAST_4, 49,
- 49, BROTLI_TRANSFORM_IDENTITY, 22,
- 49, BROTLI_TRANSFORM_UPPERCASE_ALL, 49,
- 49, BROTLI_TRANSFORM_IDENTITY, 23,
- 49, BROTLI_TRANSFORM_IDENTITY, 24,
- 49, BROTLI_TRANSFORM_IDENTITY, 25,
- 49, BROTLI_TRANSFORM_OMIT_LAST_7, 49,
- 49, BROTLI_TRANSFORM_OMIT_LAST_1, 26,
- 49, BROTLI_TRANSFORM_IDENTITY, 27,
- 49, BROTLI_TRANSFORM_IDENTITY, 28,
- 0, BROTLI_TRANSFORM_IDENTITY, 12,
- 49, BROTLI_TRANSFORM_IDENTITY, 29,
- 49, BROTLI_TRANSFORM_OMIT_FIRST_9, 49,
- 49, BROTLI_TRANSFORM_OMIT_FIRST_7, 49,
- 49, BROTLI_TRANSFORM_OMIT_LAST_6, 49,
- 49, BROTLI_TRANSFORM_IDENTITY, 21,
- 49, BROTLI_TRANSFORM_UPPERCASE_FIRST, 1,
- 49, BROTLI_TRANSFORM_OMIT_LAST_8, 49,
- 49, BROTLI_TRANSFORM_IDENTITY, 31,
- 49, BROTLI_TRANSFORM_IDENTITY, 32,
- 47, BROTLI_TRANSFORM_IDENTITY, 3,
- 49, BROTLI_TRANSFORM_OMIT_LAST_5, 49,
- 49, BROTLI_TRANSFORM_OMIT_LAST_9, 49,
- 0, BROTLI_TRANSFORM_UPPERCASE_FIRST, 1,
- 49, BROTLI_TRANSFORM_UPPERCASE_FIRST, 8,
- 5, BROTLI_TRANSFORM_IDENTITY, 21,
- 49, BROTLI_TRANSFORM_UPPERCASE_ALL, 0,
- 49, BROTLI_TRANSFORM_UPPERCASE_FIRST, 10,
- 49, BROTLI_TRANSFORM_IDENTITY, 30,
- 0, BROTLI_TRANSFORM_IDENTITY, 5,
- 35, BROTLI_TRANSFORM_IDENTITY, 49,
- 47, BROTLI_TRANSFORM_IDENTITY, 2,
- 49, BROTLI_TRANSFORM_UPPERCASE_FIRST, 17,
- 49, BROTLI_TRANSFORM_IDENTITY, 36,
- 49, BROTLI_TRANSFORM_IDENTITY, 33,
- 5, BROTLI_TRANSFORM_IDENTITY, 0,
- 49, BROTLI_TRANSFORM_UPPERCASE_FIRST, 21,
- 49, BROTLI_TRANSFORM_UPPERCASE_FIRST, 5,
- 49, BROTLI_TRANSFORM_IDENTITY, 37,
- 0, BROTLI_TRANSFORM_IDENTITY, 30,
- 49, BROTLI_TRANSFORM_IDENTITY, 38,
- 0, BROTLI_TRANSFORM_UPPERCASE_ALL, 0,
- 49, BROTLI_TRANSFORM_IDENTITY, 39,
- 0, BROTLI_TRANSFORM_UPPERCASE_ALL, 49,
- 49, BROTLI_TRANSFORM_IDENTITY, 34,
- 49, BROTLI_TRANSFORM_UPPERCASE_ALL, 8,
- 49, BROTLI_TRANSFORM_UPPERCASE_FIRST, 12,
- 0, BROTLI_TRANSFORM_IDENTITY, 21,
- 49, BROTLI_TRANSFORM_IDENTITY, 40,
- 0, BROTLI_TRANSFORM_UPPERCASE_FIRST, 12,
- 49, BROTLI_TRANSFORM_IDENTITY, 41,
- 49, BROTLI_TRANSFORM_IDENTITY, 42,
- 49, BROTLI_TRANSFORM_UPPERCASE_ALL, 17,
- 49, BROTLI_TRANSFORM_IDENTITY, 43,
- 0, BROTLI_TRANSFORM_UPPERCASE_FIRST, 5,
- 49, BROTLI_TRANSFORM_UPPERCASE_ALL, 10,
- 0, BROTLI_TRANSFORM_IDENTITY, 34,
- 49, BROTLI_TRANSFORM_UPPERCASE_FIRST, 33,
- 49, BROTLI_TRANSFORM_IDENTITY, 44,
- 49, BROTLI_TRANSFORM_UPPERCASE_ALL, 5,
- 45, BROTLI_TRANSFORM_IDENTITY, 49,
- 0, BROTLI_TRANSFORM_IDENTITY, 33,
- 49, BROTLI_TRANSFORM_UPPERCASE_FIRST, 30,
- 49, BROTLI_TRANSFORM_UPPERCASE_ALL, 30,
- 49, BROTLI_TRANSFORM_IDENTITY, 46,
- 49, BROTLI_TRANSFORM_UPPERCASE_ALL, 1,
- 49, BROTLI_TRANSFORM_UPPERCASE_FIRST, 34,
- 0, BROTLI_TRANSFORM_UPPERCASE_FIRST, 33,
- 0, BROTLI_TRANSFORM_UPPERCASE_ALL, 30,
- 0, BROTLI_TRANSFORM_UPPERCASE_ALL, 1,
- 49, BROTLI_TRANSFORM_UPPERCASE_ALL, 33,
- 49, BROTLI_TRANSFORM_UPPERCASE_ALL, 21,
- 49, BROTLI_TRANSFORM_UPPERCASE_ALL, 12,
- 0, BROTLI_TRANSFORM_UPPERCASE_ALL, 5,
- 49, BROTLI_TRANSFORM_UPPERCASE_ALL, 34,
- 0, BROTLI_TRANSFORM_UPPERCASE_ALL, 12,
- 0, BROTLI_TRANSFORM_UPPERCASE_FIRST, 30,
- 0, BROTLI_TRANSFORM_UPPERCASE_ALL, 34,
- 0, BROTLI_TRANSFORM_UPPERCASE_FIRST, 34,
-};
-
-static BrotliTransforms kBrotliTransforms = {
- sizeof(kPrefixSuffix),
- (const uint8_t*)kPrefixSuffix,
- kPrefixSuffixMap,
- sizeof(kTransformsData) / (3 * sizeof(kTransformsData[0])),
- kTransformsData,
- {0, 12, 27, 23, 42, 63, 56, 48, 59, 64}
-};
-
-const BrotliTransforms* BrotliGetTransforms(void) {
- return &kBrotliTransforms;
-}
-
-static int ToUpperCase(uint8_t* p) {
- if (p[0] < 0xC0) {
- if (p[0] >= 'a' && p[0] <= 'z') {
- p[0] ^= 32;
- }
- return 1;
- }
- /* An overly simplified uppercasing model for UTF-8. */
- if (p[0] < 0xE0) {
- p[1] ^= 32;
- return 2;
- }
- /* An arbitrary transform for three byte characters. */
- p[2] ^= 5;
- return 3;
-}
-
-int BrotliTransformDictionaryWord(uint8_t* dst, const uint8_t* word, int len,
- const BrotliTransforms* transforms, int transfom_idx) {
- int idx = 0;
- const uint8_t* prefix = BROTLI_TRANSFORM_PREFIX(transforms, transfom_idx);
- uint8_t type = BROTLI_TRANSFORM_TYPE(transforms, transfom_idx);
- const uint8_t* suffix = BROTLI_TRANSFORM_SUFFIX(transforms, transfom_idx);
- {
- int prefix_len = *prefix++;
- while (prefix_len--) { dst[idx++] = *prefix++; }
- }
- {
- const int t = type;
- int i = 0;
- if (t <= BROTLI_TRANSFORM_OMIT_LAST_9) {
- len -= t;
- } else if (t >= BROTLI_TRANSFORM_OMIT_FIRST_1
- && t <= BROTLI_TRANSFORM_OMIT_FIRST_9) {
- int skip = t - (BROTLI_TRANSFORM_OMIT_FIRST_1 - 1);
- word += skip;
- len -= skip;
- }
- while (i < len) { dst[idx++] = word[i++]; }
- if (t == BROTLI_TRANSFORM_UPPERCASE_FIRST) {
- ToUpperCase(&dst[idx - len]);
- } else if (t == BROTLI_TRANSFORM_UPPERCASE_ALL) {
- uint8_t* uppercase = &dst[idx - len];
- while (len > 0) {
- int step = ToUpperCase(uppercase);
- uppercase += step;
- len -= step;
- }
- }
- }
- {
- int suffix_len = *suffix++;
- while (suffix_len--) { dst[idx++] = *suffix++; }
- return idx;
- }
-}
-
-#if defined(__cplusplus) || defined(c_plusplus)
-} /* extern "C" */
-#endif
diff --git a/BaseTools/Source/C/BrotliCompress/dec/bit_reader.c b/BaseTools/Source/C/BrotliCompress/dec/bit_reader.c
deleted file mode 100644
index 4d8bd8b2f619..000000000000
--- a/BaseTools/Source/C/BrotliCompress/dec/bit_reader.c
+++ /dev/null
@@ -1,48 +0,0 @@
-/* Copyright 2013 Google Inc. All Rights Reserved.
-
- Distributed under MIT license.
- See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
-*/
-
-/* Bit reading helpers */
-
-#include "./bit_reader.h"
-
-#include "../common/platform.h"
-#include <brotli/types.h>
-
-#if defined(__cplusplus) || defined(c_plusplus)
-extern "C" {
-#endif
-
-void BrotliInitBitReader(BrotliBitReader* const br) {
- br->val_ = 0;
- br->bit_pos_ = sizeof(br->val_) << 3;
-}
-
-BROTLI_BOOL BrotliWarmupBitReader(BrotliBitReader* const br) {
- size_t aligned_read_mask = (sizeof(br->val_) >> 1) - 1;
- /* Fixing alignment after unaligned BrotliFillWindow would result accumulator
- overflow. If unalignment is caused by BrotliSafeReadBits, then there is
- enough space in accumulator to fix alignment. */
- if (!BROTLI_ALIGNED_READ) {
- aligned_read_mask = 0;
- }
- if (BrotliGetAvailableBits(br) == 0) {
- if (!BrotliPullByte(br)) {
- return BROTLI_FALSE;
- }
- }
-
- while ((((size_t)br->next_in) & aligned_read_mask) != 0) {
- if (!BrotliPullByte(br)) {
- /* If we consumed all the input, we don't care about the alignment. */
- return BROTLI_TRUE;
- }
- }
- return BROTLI_TRUE;
-}
-
-#if defined(__cplusplus) || defined(c_plusplus)
-} /* extern "C" */
-#endif
diff --git a/BaseTools/Source/C/BrotliCompress/dec/decode.c b/BaseTools/Source/C/BrotliCompress/dec/decode.c
deleted file mode 100644
index eb67d8bbf86b..000000000000
--- a/BaseTools/Source/C/BrotliCompress/dec/decode.c
+++ /dev/null
@@ -1,2497 +0,0 @@
-/* Copyright 2013 Google Inc. All Rights Reserved.
-
- Distributed under MIT license.
- See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
-*/
-
-#include <brotli/decode.h>
-
-#if defined(__ARM_NEON__)
-#include <arm_neon.h>
-#endif
-
-#include <stdlib.h> /* free, malloc */
-#include <string.h> /* memcpy, memset */
-
-#include "../common/constants.h"
-#include "../common/context.h"
-#include "../common/dictionary.h"
-#include "../common/platform.h"
-#include "../common/transform.h"
-#include "../common/version.h"
-#include "./bit_reader.h"
-#include "./huffman.h"
-#include "./prefix.h"
-#include "./state.h"
-
-#if defined(__cplusplus) || defined(c_plusplus)
-extern "C" {
-#endif
-
-#define BROTLI_FAILURE(CODE) (BROTLI_DUMP(), CODE)
-
-#define BROTLI_LOG_UINT(name) \
- BROTLI_LOG(("[%s] %s = %lu\n", __func__, #name, (unsigned long)(name)))
-#define BROTLI_LOG_ARRAY_INDEX(array_name, idx) \
- BROTLI_LOG(("[%s] %s[%lu] = %lu\n", __func__, #array_name, \
- (unsigned long)(idx), (unsigned long)array_name[idx]))
-
-#define HUFFMAN_TABLE_BITS 8U
-#define HUFFMAN_TABLE_MASK 0xFF
-
-/* We need the slack region for the following reasons:
- - doing up to two 16-byte copies for fast backward copying
- - inserting transformed dictionary word (5 prefix + 24 base + 8 suffix) */
-static const uint32_t kRingBufferWriteAheadSlack = 42;
-
-static const uint8_t kCodeLengthCodeOrder[BROTLI_CODE_LENGTH_CODES] = {
- 1, 2, 3, 4, 0, 5, 17, 6, 16, 7, 8, 9, 10, 11, 12, 13, 14, 15,
-};
-
-/* Static prefix code for the complex code length code lengths. */
-static const uint8_t kCodeLengthPrefixLength[16] = {
- 2, 2, 2, 3, 2, 2, 2, 4, 2, 2, 2, 3, 2, 2, 2, 4,
-};
-
-static const uint8_t kCodeLengthPrefixValue[16] = {
- 0, 4, 3, 2, 0, 4, 3, 1, 0, 4, 3, 2, 0, 4, 3, 5,
-};
-
-BROTLI_BOOL BrotliDecoderSetParameter(
- BrotliDecoderState* state, BrotliDecoderParameter p, uint32_t value) {
- if (state->state != BROTLI_STATE_UNINITED) return BROTLI_FALSE;
- switch (p) {
- case BROTLI_DECODER_PARAM_DISABLE_RING_BUFFER_REALLOCATION:
- state->canny_ringbuffer_allocation = !!value ? 0 : 1;
- return BROTLI_TRUE;
-
- case BROTLI_DECODER_PARAM_LARGE_WINDOW:
- state->large_window = TO_BROTLI_BOOL(!!value);
- return BROTLI_TRUE;
-
- default: return BROTLI_FALSE;
- }
-}
-
-BrotliDecoderState* BrotliDecoderCreateInstance(
- brotli_alloc_func alloc_func, brotli_free_func free_func, void* opaque) {
- BrotliDecoderState* state = 0;
- if (!alloc_func && !free_func) {
- state = (BrotliDecoderState*)malloc(sizeof(BrotliDecoderState));
- } else if (alloc_func && free_func) {
- state = (BrotliDecoderState*)alloc_func(opaque, sizeof(BrotliDecoderState));
- }
- if (state == 0) {
- BROTLI_DUMP();
- return 0;
- }
- if (!BrotliDecoderStateInit(state, alloc_func, free_func, opaque)) {
- BROTLI_DUMP();
- if (!alloc_func && !free_func) {
- free(state);
- } else if (alloc_func && free_func) {
- free_func(opaque, state);
- }
- return 0;
- }
- return state;
-}
-
-/* Deinitializes and frees BrotliDecoderState instance. */
-void BrotliDecoderDestroyInstance(BrotliDecoderState* state) {
- if (!state) {
- return;
- } else {
- brotli_free_func free_func = state->free_func;
- void* opaque = state->memory_manager_opaque;
- BrotliDecoderStateCleanup(state);
- free_func(opaque, state);
- }
-}
-
-/* Saves error code and converts it to BrotliDecoderResult. */
-static BROTLI_NOINLINE BrotliDecoderResult SaveErrorCode(
- BrotliDecoderState* s, BrotliDecoderErrorCode e) {
- s->error_code = (int)e;
- switch (e) {
- case BROTLI_DECODER_SUCCESS:
- return BROTLI_DECODER_RESULT_SUCCESS;
-
- case BROTLI_DECODER_NEEDS_MORE_INPUT:
- return BROTLI_DECODER_RESULT_NEEDS_MORE_INPUT;
-
- case BROTLI_DECODER_NEEDS_MORE_OUTPUT:
- return BROTLI_DECODER_RESULT_NEEDS_MORE_OUTPUT;
-
- default:
- return BROTLI_DECODER_RESULT_ERROR;
- }
-}
-
-/* Decodes WBITS by reading 1 - 7 bits, or 0x11 for "Large Window Brotli".
- Precondition: bit-reader accumulator has at least 8 bits. */
-static BrotliDecoderErrorCode DecodeWindowBits(BrotliDecoderState* s,
- BrotliBitReader* br) {
- uint32_t n;
- BROTLI_BOOL large_window = s->large_window;
- s->large_window = BROTLI_FALSE;
- BrotliTakeBits(br, 1, &n);
- if (n == 0) {
- s->window_bits = 16;
- return BROTLI_DECODER_SUCCESS;
- }
- BrotliTakeBits(br, 3, &n);
- if (n != 0) {
- s->window_bits = 17 + n;
- return BROTLI_DECODER_SUCCESS;
- }
- BrotliTakeBits(br, 3, &n);
- if (n == 1) {
- if (large_window) {
- BrotliTakeBits(br, 1, &n);
- if (n == 1) {
- return BROTLI_FAILURE(BROTLI_DECODER_ERROR_FORMAT_WINDOW_BITS);
- }
- s->large_window = BROTLI_TRUE;
- return BROTLI_DECODER_SUCCESS;
- } else {
- return BROTLI_FAILURE(BROTLI_DECODER_ERROR_FORMAT_WINDOW_BITS);
- }
- }
- if (n != 0) {
- s->window_bits = 8 + n;
- return BROTLI_DECODER_SUCCESS;
- }
- s->window_bits = 17;
- return BROTLI_DECODER_SUCCESS;
-}
-
-static BROTLI_INLINE void memmove16(uint8_t* dst, uint8_t* src) {
-#if defined(__ARM_NEON__)
- vst1q_u8(dst, vld1q_u8(src));
-#else
- uint32_t buffer[4];
- memcpy(buffer, src, 16);
- memcpy(dst, buffer, 16);
-#endif
-}
-
-/* Decodes a number in the range [0..255], by reading 1 - 11 bits. */
-static BROTLI_NOINLINE BrotliDecoderErrorCode DecodeVarLenUint8(
- BrotliDecoderState* s, BrotliBitReader* br, uint32_t* value) {
- uint32_t bits;
- switch (s->substate_decode_uint8) {
- case BROTLI_STATE_DECODE_UINT8_NONE:
- if (BROTLI_PREDICT_FALSE(!BrotliSafeReadBits(br, 1, &bits))) {
- return BROTLI_DECODER_NEEDS_MORE_INPUT;
- }
- if (bits == 0) {
- *value = 0;
- return BROTLI_DECODER_SUCCESS;
- }
- /* Fall through. */
-
- case BROTLI_STATE_DECODE_UINT8_SHORT:
- if (BROTLI_PREDICT_FALSE(!BrotliSafeReadBits(br, 3, &bits))) {
- s->substate_decode_uint8 = BROTLI_STATE_DECODE_UINT8_SHORT;
- return BROTLI_DECODER_NEEDS_MORE_INPUT;
- }
- if (bits == 0) {
- *value = 1;
- s->substate_decode_uint8 = BROTLI_STATE_DECODE_UINT8_NONE;
- return BROTLI_DECODER_SUCCESS;
- }
- /* Use output value as a temporary storage. It MUST be persisted. */
- *value = bits;
- /* Fall through. */
-
- case BROTLI_STATE_DECODE_UINT8_LONG:
- if (BROTLI_PREDICT_FALSE(!BrotliSafeReadBits(br, *value, &bits))) {
- s->substate_decode_uint8 = BROTLI_STATE_DECODE_UINT8_LONG;
- return BROTLI_DECODER_NEEDS_MORE_INPUT;
- }
- *value = (1U << *value) + bits;
- s->substate_decode_uint8 = BROTLI_STATE_DECODE_UINT8_NONE;
- return BROTLI_DECODER_SUCCESS;
-
- default:
- return
- BROTLI_FAILURE(BROTLI_DECODER_ERROR_UNREACHABLE);
- }
-}
-
-/* Decodes a metablock length and flags by reading 2 - 31 bits. */
-static BrotliDecoderErrorCode BROTLI_NOINLINE DecodeMetaBlockLength(
- BrotliDecoderState* s, BrotliBitReader* br) {
- uint32_t bits;
- int i;
- for (;;) {
- switch (s->substate_metablock_header) {
- case BROTLI_STATE_METABLOCK_HEADER_NONE:
- if (!BrotliSafeReadBits(br, 1, &bits)) {
- return BROTLI_DECODER_NEEDS_MORE_INPUT;
- }
- s->is_last_metablock = bits ? 1 : 0;
- s->meta_block_remaining_len = 0;
- s->is_uncompressed = 0;
- s->is_metadata = 0;
- if (!s->is_last_metablock) {
- s->substate_metablock_header = BROTLI_STATE_METABLOCK_HEADER_NIBBLES;
- break;
- }
- s->substate_metablock_header = BROTLI_STATE_METABLOCK_HEADER_EMPTY;
- /* Fall through. */
-
- case BROTLI_STATE_METABLOCK_HEADER_EMPTY:
- if (!BrotliSafeReadBits(br, 1, &bits)) {
- return BROTLI_DECODER_NEEDS_MORE_INPUT;
- }
- if (bits) {
- s->substate_metablock_header = BROTLI_STATE_METABLOCK_HEADER_NONE;
- return BROTLI_DECODER_SUCCESS;
- }
- s->substate_metablock_header = BROTLI_STATE_METABLOCK_HEADER_NIBBLES;
- /* Fall through. */
-
- case BROTLI_STATE_METABLOCK_HEADER_NIBBLES:
- if (!BrotliSafeReadBits(br, 2, &bits)) {
- return BROTLI_DECODER_NEEDS_MORE_INPUT;
- }
- s->size_nibbles = (uint8_t)(bits + 4);
- s->loop_counter = 0;
- if (bits == 3) {
- s->is_metadata = 1;
- s->substate_metablock_header = BROTLI_STATE_METABLOCK_HEADER_RESERVED;
- break;
- }
- s->substate_metablock_header = BROTLI_STATE_METABLOCK_HEADER_SIZE;
- /* Fall through. */
-
- case BROTLI_STATE_METABLOCK_HEADER_SIZE:
- i = s->loop_counter;
- for (; i < (int)s->size_nibbles; ++i) {
- if (!BrotliSafeReadBits(br, 4, &bits)) {
- s->loop_counter = i;
- return BROTLI_DECODER_NEEDS_MORE_INPUT;
- }
- if (i + 1 == s->size_nibbles && s->size_nibbles > 4 && bits == 0) {
- return BROTLI_FAILURE(BROTLI_DECODER_ERROR_FORMAT_EXUBERANT_NIBBLE);
- }
- s->meta_block_remaining_len |= (int)(bits << (i * 4));
- }
- s->substate_metablock_header =
- BROTLI_STATE_METABLOCK_HEADER_UNCOMPRESSED;
- /* Fall through. */
-
- case BROTLI_STATE_METABLOCK_HEADER_UNCOMPRESSED:
- if (!s->is_last_metablock) {
- if (!BrotliSafeReadBits(br, 1, &bits)) {
- return BROTLI_DECODER_NEEDS_MORE_INPUT;
- }
- s->is_uncompressed = bits ? 1 : 0;
- }
- ++s->meta_block_remaining_len;
- s->substate_metablock_header = BROTLI_STATE_METABLOCK_HEADER_NONE;
- return BROTLI_DECODER_SUCCESS;
-
- case BROTLI_STATE_METABLOCK_HEADER_RESERVED:
- if (!BrotliSafeReadBits(br, 1, &bits)) {
- return BROTLI_DECODER_NEEDS_MORE_INPUT;
- }
- if (bits != 0) {
- return BROTLI_FAILURE(BROTLI_DECODER_ERROR_FORMAT_RESERVED);
- }
- s->substate_metablock_header = BROTLI_STATE_METABLOCK_HEADER_BYTES;
- /* Fall through. */
-
- case BROTLI_STATE_METABLOCK_HEADER_BYTES:
- if (!BrotliSafeReadBits(br, 2, &bits)) {
- return BROTLI_DECODER_NEEDS_MORE_INPUT;
- }
- if (bits == 0) {
- s->substate_metablock_header = BROTLI_STATE_METABLOCK_HEADER_NONE;
- return BROTLI_DECODER_SUCCESS;
- }
- s->size_nibbles = (uint8_t)bits;
- s->substate_metablock_header = BROTLI_STATE_METABLOCK_HEADER_METADATA;
- /* Fall through. */
-
- case BROTLI_STATE_METABLOCK_HEADER_METADATA:
- i = s->loop_counter;
- for (; i < (int)s->size_nibbles; ++i) {
- if (!BrotliSafeReadBits(br, 8, &bits)) {
- s->loop_counter = i;
- return BROTLI_DECODER_NEEDS_MORE_INPUT;
- }
- if (i + 1 == s->size_nibbles && s->size_nibbles > 1 && bits == 0) {
- return BROTLI_FAILURE(
- BROTLI_DECODER_ERROR_FORMAT_EXUBERANT_META_NIBBLE);
- }
- s->meta_block_remaining_len |= (int)(bits << (i * 8));
- }
- ++s->meta_block_remaining_len;
- s->substate_metablock_header = BROTLI_STATE_METABLOCK_HEADER_NONE;
- return BROTLI_DECODER_SUCCESS;
-
- default:
- return
- BROTLI_FAILURE(BROTLI_DECODER_ERROR_UNREACHABLE);
- }
- }
-}
-
-/* Decodes the Huffman code.
- This method doesn't read data from the bit reader, BUT drops the amount of
- bits that correspond to the decoded symbol.
- bits MUST contain at least 15 (BROTLI_HUFFMAN_MAX_CODE_LENGTH) valid bits. */
-static BROTLI_INLINE uint32_t DecodeSymbol(uint32_t bits,
- const HuffmanCode* table,
- BrotliBitReader* br) {
- table += bits & HUFFMAN_TABLE_MASK;
- if (table->bits > HUFFMAN_TABLE_BITS) {
- uint32_t nbits = table->bits - HUFFMAN_TABLE_BITS;
- BrotliDropBits(br, HUFFMAN_TABLE_BITS);
- table += table->value;
- table += (bits >> HUFFMAN_TABLE_BITS) & BitMask(nbits);
- }
- BrotliDropBits(br, table->bits);
- return table->value;
-}
-
-/* Reads and decodes the next Huffman code from bit-stream.
- This method peeks 16 bits of input and drops 0 - 15 of them. */
-static BROTLI_INLINE uint32_t ReadSymbol(const HuffmanCode* table,
- BrotliBitReader* br) {
- return DecodeSymbol(BrotliGet16BitsUnmasked(br), table, br);
-}
-
-/* Same as DecodeSymbol, but it is known that there is less than 15 bits of
- input are currently available. */
-static BROTLI_NOINLINE BROTLI_BOOL SafeDecodeSymbol(
- const HuffmanCode* table, BrotliBitReader* br, uint32_t* result) {
- uint32_t val;
- uint32_t available_bits = BrotliGetAvailableBits(br);
- if (available_bits == 0) {
- if (table->bits == 0) {
- *result = table->value;
- return BROTLI_TRUE;
- }
- return BROTLI_FALSE; /* No valid bits at all. */
- }
- val = (uint32_t)BrotliGetBitsUnmasked(br);
- table += val & HUFFMAN_TABLE_MASK;
- if (table->bits <= HUFFMAN_TABLE_BITS) {
- if (table->bits <= available_bits) {
- BrotliDropBits(br, table->bits);
- *result = table->value;
- return BROTLI_TRUE;
- } else {
- return BROTLI_FALSE; /* Not enough bits for the first level. */
- }
- }
- if (available_bits <= HUFFMAN_TABLE_BITS) {
- return BROTLI_FALSE; /* Not enough bits to move to the second level. */
- }
-
- /* Speculatively drop HUFFMAN_TABLE_BITS. */
- val = (val & BitMask(table->bits)) >> HUFFMAN_TABLE_BITS;
- available_bits -= HUFFMAN_TABLE_BITS;
- table += table->value + val;
- if (available_bits < table->bits) {
- return BROTLI_FALSE; /* Not enough bits for the second level. */
- }
-
- BrotliDropBits(br, HUFFMAN_TABLE_BITS + table->bits);
- *result = table->value;
- return BROTLI_TRUE;
-}
-
-static BROTLI_INLINE BROTLI_BOOL SafeReadSymbol(
- const HuffmanCode* table, BrotliBitReader* br, uint32_t* result) {
- uint32_t val;
- if (BROTLI_PREDICT_TRUE(BrotliSafeGetBits(br, 15, &val))) {
- *result = DecodeSymbol(val, table, br);
- return BROTLI_TRUE;
- }
- return SafeDecodeSymbol(table, br, result);
-}
-
-/* Makes a look-up in first level Huffman table. Peeks 8 bits. */
-static BROTLI_INLINE void PreloadSymbol(int safe,
- const HuffmanCode* table,
- BrotliBitReader* br,
- uint32_t* bits,
- uint32_t* value) {
- if (safe) {
- return;
- }
- table += BrotliGetBits(br, HUFFMAN_TABLE_BITS);
- *bits = table->bits;
- *value = table->value;
-}
-
-/* Decodes the next Huffman code using data prepared by PreloadSymbol.
- Reads 0 - 15 bits. Also peeks 8 following bits. */
-static BROTLI_INLINE uint32_t ReadPreloadedSymbol(const HuffmanCode* table,
- BrotliBitReader* br,
- uint32_t* bits,
- uint32_t* value) {
- uint32_t result = *value;
- if (BROTLI_PREDICT_FALSE(*bits > HUFFMAN_TABLE_BITS)) {
- uint32_t val = BrotliGet16BitsUnmasked(br);
- const HuffmanCode* ext = table + (val & HUFFMAN_TABLE_MASK) + *value;
- uint32_t mask = BitMask((*bits - HUFFMAN_TABLE_BITS));
- BrotliDropBits(br, HUFFMAN_TABLE_BITS);
- ext += (val >> HUFFMAN_TABLE_BITS) & mask;
- BrotliDropBits(br, ext->bits);
- result = ext->value;
- } else {
- BrotliDropBits(br, *bits);
- }
- PreloadSymbol(0, table, br, bits, value);
- return result;
-}
-
-static BROTLI_INLINE uint32_t Log2Floor(uint32_t x) {
- uint32_t result = 0;
- while (x) {
- x >>= 1;
- ++result;
- }
- return result;
-}
-
-/* Reads (s->symbol + 1) symbols.
- Totally 1..4 symbols are read, 1..11 bits each.
- The list of symbols MUST NOT contain duplicates. */
-static BrotliDecoderErrorCode ReadSimpleHuffmanSymbols(
- uint32_t alphabet_size, uint32_t max_symbol, BrotliDecoderState* s) {
- /* max_bits == 1..11; symbol == 0..3; 1..44 bits will be read. */
- BrotliBitReader* br = &s->br;
- uint32_t max_bits = Log2Floor(alphabet_size - 1);
- uint32_t i = s->sub_loop_counter;
- uint32_t num_symbols = s->symbol;
- while (i <= num_symbols) {
- uint32_t v;
- if (BROTLI_PREDICT_FALSE(!BrotliSafeReadBits(br, max_bits, &v))) {
- s->sub_loop_counter = i;
- s->substate_huffman = BROTLI_STATE_HUFFMAN_SIMPLE_READ;
- return BROTLI_DECODER_NEEDS_MORE_INPUT;
- }
- if (v >= max_symbol) {
- return
- BROTLI_FAILURE(BROTLI_DECODER_ERROR_FORMAT_SIMPLE_HUFFMAN_ALPHABET);
- }
- s->symbols_lists_array[i] = (uint16_t)v;
- BROTLI_LOG_UINT(s->symbols_lists_array[i]);
- ++i;
- }
-
- for (i = 0; i < num_symbols; ++i) {
- uint32_t k = i + 1;
- for (; k <= num_symbols; ++k) {
- if (s->symbols_lists_array[i] == s->symbols_lists_array[k]) {
- return BROTLI_FAILURE(BROTLI_DECODER_ERROR_FORMAT_SIMPLE_HUFFMAN_SAME);
- }
- }
- }
-
- return BROTLI_DECODER_SUCCESS;
-}
-
-/* Process single decoded symbol code length:
- A) reset the repeat variable
- B) remember code length (if it is not 0)
- C) extend corresponding index-chain
- D) reduce the Huffman space
- E) update the histogram */
-static BROTLI_INLINE void ProcessSingleCodeLength(uint32_t code_len,
- uint32_t* symbol, uint32_t* repeat, uint32_t* space,
- uint32_t* prev_code_len, uint16_t* symbol_lists,
- uint16_t* code_length_histo, int* next_symbol) {
- *repeat = 0;
- if (code_len != 0) { /* code_len == 1..15 */
- symbol_lists[next_symbol[code_len]] = (uint16_t)(*symbol);
- next_symbol[code_len] = (int)(*symbol);
- *prev_code_len = code_len;
- *space -= 32768U >> code_len;
- code_length_histo[code_len]++;
- BROTLI_LOG(("[ReadHuffmanCode] code_length[%d] = %d\n",
- (int)*symbol, (int)code_len));
- }
- (*symbol)++;
-}
-
-/* Process repeated symbol code length.
- A) Check if it is the extension of previous repeat sequence; if the decoded
- value is not BROTLI_REPEAT_PREVIOUS_CODE_LENGTH, then it is a new
- symbol-skip
- B) Update repeat variable
- C) Check if operation is feasible (fits alphabet)
- D) For each symbol do the same operations as in ProcessSingleCodeLength
-
- PRECONDITION: code_len == BROTLI_REPEAT_PREVIOUS_CODE_LENGTH or
- code_len == BROTLI_REPEAT_ZERO_CODE_LENGTH */
-static BROTLI_INLINE void ProcessRepeatedCodeLength(uint32_t code_len,
- uint32_t repeat_delta, uint32_t alphabet_size, uint32_t* symbol,
- uint32_t* repeat, uint32_t* space, uint32_t* prev_code_len,
- uint32_t* repeat_code_len, uint16_t* symbol_lists,
- uint16_t* code_length_histo, int* next_symbol) {
- uint32_t old_repeat;
- uint32_t extra_bits = 3; /* for BROTLI_REPEAT_ZERO_CODE_LENGTH */
- uint32_t new_len = 0; /* for BROTLI_REPEAT_ZERO_CODE_LENGTH */
- if (code_len == BROTLI_REPEAT_PREVIOUS_CODE_LENGTH) {
- new_len = *prev_code_len;
- extra_bits = 2;
- }
- if (*repeat_code_len != new_len) {
- *repeat = 0;
- *repeat_code_len = new_len;
- }
- old_repeat = *repeat;
- if (*repeat > 0) {
- *repeat -= 2;
- *repeat <<= extra_bits;
- }
- *repeat += repeat_delta + 3U;
- repeat_delta = *repeat - old_repeat;
- if (*symbol + repeat_delta > alphabet_size) {
- BROTLI_DUMP();
- *symbol = alphabet_size;
- *space = 0xFFFFF;
- return;
- }
- BROTLI_LOG(("[ReadHuffmanCode] code_length[%d..%d] = %d\n",
- (int)*symbol, (int)(*symbol + repeat_delta - 1), (int)*repeat_code_len));
- if (*repeat_code_len != 0) {
- unsigned last = *symbol + repeat_delta;
- int next = next_symbol[*repeat_code_len];
- do {
- symbol_lists[next] = (uint16_t)*symbol;
- next = (int)*symbol;
- } while (++(*symbol) != last);
- next_symbol[*repeat_code_len] = next;
- *space -= repeat_delta << (15 - *repeat_code_len);
- code_length_histo[*repeat_code_len] =
- (uint16_t)(code_length_histo[*repeat_code_len] + repeat_delta);
- } else {
- *symbol += repeat_delta;
- }
-}
-
-/* Reads and decodes symbol codelengths. */
-static BrotliDecoderErrorCode ReadSymbolCodeLengths(
- uint32_t alphabet_size, BrotliDecoderState* s) {
- BrotliBitReader* br = &s->br;
- uint32_t symbol = s->symbol;
- uint32_t repeat = s->repeat;
- uint32_t space = s->space;
- uint32_t prev_code_len = s->prev_code_len;
- uint32_t repeat_code_len = s->repeat_code_len;
- uint16_t* symbol_lists = s->symbol_lists;
- uint16_t* code_length_histo = s->code_length_histo;
- int* next_symbol = s->next_symbol;
- if (!BrotliWarmupBitReader(br)) {
- return BROTLI_DECODER_NEEDS_MORE_INPUT;
- }
- while (symbol < alphabet_size && space > 0) {
- const HuffmanCode* p = s->table;
- uint32_t code_len;
- if (!BrotliCheckInputAmount(br, BROTLI_SHORT_FILL_BIT_WINDOW_READ)) {
- s->symbol = symbol;
- s->repeat = repeat;
- s->prev_code_len = prev_code_len;
- s->repeat_code_len = repeat_code_len;
- s->space = space;
- return BROTLI_DECODER_NEEDS_MORE_INPUT;
- }
- BrotliFillBitWindow16(br);
- p += BrotliGetBitsUnmasked(br) &
- BitMask(BROTLI_HUFFMAN_MAX_CODE_LENGTH_CODE_LENGTH);
- BrotliDropBits(br, p->bits); /* Use 1..5 bits. */
- code_len = p->value; /* code_len == 0..17 */
- if (code_len < BROTLI_REPEAT_PREVIOUS_CODE_LENGTH) {
- ProcessSingleCodeLength(code_len, &symbol, &repeat, &space,
- &prev_code_len, symbol_lists, code_length_histo, next_symbol);
- } else { /* code_len == 16..17, extra_bits == 2..3 */
- uint32_t extra_bits =
- (code_len == BROTLI_REPEAT_PREVIOUS_CODE_LENGTH) ? 2 : 3;
- uint32_t repeat_delta =
- (uint32_t)BrotliGetBitsUnmasked(br) & BitMask(extra_bits);
- BrotliDropBits(br, extra_bits);
- ProcessRepeatedCodeLength(code_len, repeat_delta, alphabet_size,
- &symbol, &repeat, &space, &prev_code_len, &repeat_code_len,
- symbol_lists, code_length_histo, next_symbol);
- }
- }
- s->space = space;
- return BROTLI_DECODER_SUCCESS;
-}
-
-static BrotliDecoderErrorCode SafeReadSymbolCodeLengths(
- uint32_t alphabet_size, BrotliDecoderState* s) {
- BrotliBitReader* br = &s->br;
- BROTLI_BOOL get_byte = BROTLI_FALSE;
- while (s->symbol < alphabet_size && s->space > 0) {
- const HuffmanCode* p = s->table;
- uint32_t code_len;
- uint32_t available_bits;
- uint32_t bits = 0;
- if (get_byte && !BrotliPullByte(br)) return BROTLI_DECODER_NEEDS_MORE_INPUT;
- get_byte = BROTLI_FALSE;
- available_bits = BrotliGetAvailableBits(br);
- if (available_bits != 0) {
- bits = (uint32_t)BrotliGetBitsUnmasked(br);
- }
- p += bits & BitMask(BROTLI_HUFFMAN_MAX_CODE_LENGTH_CODE_LENGTH);
- if (p->bits > available_bits) {
- get_byte = BROTLI_TRUE;
- continue;
- }
- code_len = p->value; /* code_len == 0..17 */
- if (code_len < BROTLI_REPEAT_PREVIOUS_CODE_LENGTH) {
- BrotliDropBits(br, p->bits);
- ProcessSingleCodeLength(code_len, &s->symbol, &s->repeat, &s->space,
- &s->prev_code_len, s->symbol_lists, s->code_length_histo,
- s->next_symbol);
- } else { /* code_len == 16..17, extra_bits == 2..3 */
- uint32_t extra_bits = code_len - 14U;
- uint32_t repeat_delta = (bits >> p->bits) & BitMask(extra_bits);
- if (available_bits < p->bits + extra_bits) {
- get_byte = BROTLI_TRUE;
- continue;
- }
- BrotliDropBits(br, p->bits + extra_bits);
- ProcessRepeatedCodeLength(code_len, repeat_delta, alphabet_size,
- &s->symbol, &s->repeat, &s->space, &s->prev_code_len,
- &s->repeat_code_len, s->symbol_lists, s->code_length_histo,
- s->next_symbol);
- }
- }
- return BROTLI_DECODER_SUCCESS;
-}
-
-/* Reads and decodes 15..18 codes using static prefix code.
- Each code is 2..4 bits long. In total 30..72 bits are used. */
-static BrotliDecoderErrorCode ReadCodeLengthCodeLengths(BrotliDecoderState* s) {
- BrotliBitReader* br = &s->br;
- uint32_t num_codes = s->repeat;
- unsigned space = s->space;
- uint32_t i = s->sub_loop_counter;
- for (; i < BROTLI_CODE_LENGTH_CODES; ++i) {
- const uint8_t code_len_idx = kCodeLengthCodeOrder[i];
- uint32_t ix;
- uint32_t v;
- if (BROTLI_PREDICT_FALSE(!BrotliSafeGetBits(br, 4, &ix))) {
- uint32_t available_bits = BrotliGetAvailableBits(br);
- if (available_bits != 0) {
- ix = BrotliGetBitsUnmasked(br) & 0xF;
- } else {
- ix = 0;
- }
- if (kCodeLengthPrefixLength[ix] > available_bits) {
- s->sub_loop_counter = i;
- s->repeat = num_codes;
- s->space = space;
- s->substate_huffman = BROTLI_STATE_HUFFMAN_COMPLEX;
- return BROTLI_DECODER_NEEDS_MORE_INPUT;
- }
- }
- v = kCodeLengthPrefixValue[ix];
- BrotliDropBits(br, kCodeLengthPrefixLength[ix]);
- s->code_length_code_lengths[code_len_idx] = (uint8_t)v;
- BROTLI_LOG_ARRAY_INDEX(s->code_length_code_lengths, code_len_idx);
- if (v != 0) {
- space = space - (32U >> v);
- ++num_codes;
- ++s->code_length_histo[v];
- if (space - 1U >= 32U) {
- /* space is 0 or wrapped around. */
- break;
- }
- }
- }
- if (!(num_codes == 1 || space == 0)) {
- return BROTLI_FAILURE(BROTLI_DECODER_ERROR_FORMAT_CL_SPACE);
- }
- return BROTLI_DECODER_SUCCESS;
-}
-
-/* Decodes the Huffman tables.
- There are 2 scenarios:
- A) Huffman code contains only few symbols (1..4). Those symbols are read
- directly; their code lengths are defined by the number of symbols.
- For this scenario 4 - 49 bits will be read.
-
- B) 2-phase decoding:
- B.1) Small Huffman table is decoded; it is specified with code lengths
- encoded with predefined entropy code. 32 - 74 bits are used.
- B.2) Decoded table is used to decode code lengths of symbols in resulting
- Huffman table. In worst case 3520 bits are read. */
-static BrotliDecoderErrorCode ReadHuffmanCode(uint32_t alphabet_size,
- uint32_t max_symbol,
- HuffmanCode* table,
- uint32_t* opt_table_size,
- BrotliDecoderState* s) {
- BrotliBitReader* br = &s->br;
- /* Unnecessary masking, but might be good for safety. */
- alphabet_size &= 0x7FF;
- /* State machine. */
- for (;;) {
- switch (s->substate_huffman) {
- case BROTLI_STATE_HUFFMAN_NONE:
- if (!BrotliSafeReadBits(br, 2, &s->sub_loop_counter)) {
- return BROTLI_DECODER_NEEDS_MORE_INPUT;
- }
- BROTLI_LOG_UINT(s->sub_loop_counter);
- /* The value is used as follows:
- 1 for simple code;
- 0 for no skipping, 2 skips 2 code lengths, 3 skips 3 code lengths */
- if (s->sub_loop_counter != 1) {
- s->space = 32;
- s->repeat = 0; /* num_codes */
- memset(&s->code_length_histo[0], 0, sizeof(s->code_length_histo[0]) *
- (BROTLI_HUFFMAN_MAX_CODE_LENGTH_CODE_LENGTH + 1));
- memset(&s->code_length_code_lengths[0], 0,
- sizeof(s->code_length_code_lengths));
- s->substate_huffman = BROTLI_STATE_HUFFMAN_COMPLEX;
- continue;
- }
- /* Fall through. */
-
- case BROTLI_STATE_HUFFMAN_SIMPLE_SIZE:
- /* Read symbols, codes & code lengths directly. */
- if (!BrotliSafeReadBits(br, 2, &s->symbol)) { /* num_symbols */
- s->substate_huffman = BROTLI_STATE_HUFFMAN_SIMPLE_SIZE;
- return BROTLI_DECODER_NEEDS_MORE_INPUT;
- }
- s->sub_loop_counter = 0;
- /* Fall through. */
-
- case BROTLI_STATE_HUFFMAN_SIMPLE_READ: {
- BrotliDecoderErrorCode result =
- ReadSimpleHuffmanSymbols(alphabet_size, max_symbol, s);
- if (result != BROTLI_DECODER_SUCCESS) {
- return result;
- }
- }
- /* Fall through. */
-
- case BROTLI_STATE_HUFFMAN_SIMPLE_BUILD: {
- uint32_t table_size;
- if (s->symbol == 3) {
- uint32_t bits;
- if (!BrotliSafeReadBits(br, 1, &bits)) {
- s->substate_huffman = BROTLI_STATE_HUFFMAN_SIMPLE_BUILD;
- return BROTLI_DECODER_NEEDS_MORE_INPUT;
- }
- s->symbol += bits;
- }
- BROTLI_LOG_UINT(s->symbol);
- table_size = BrotliBuildSimpleHuffmanTable(
- table, HUFFMAN_TABLE_BITS, s->symbols_lists_array, s->symbol);
- if (opt_table_size) {
- *opt_table_size = table_size;
- }
- s->substate_huffman = BROTLI_STATE_HUFFMAN_NONE;
- return BROTLI_DECODER_SUCCESS;
- }
-
- /* Decode Huffman-coded code lengths. */
- case BROTLI_STATE_HUFFMAN_COMPLEX: {
- uint32_t i;
- BrotliDecoderErrorCode result = ReadCodeLengthCodeLengths(s);
- if (result != BROTLI_DECODER_SUCCESS) {
- return result;
- }
- BrotliBuildCodeLengthsHuffmanTable(s->table,
- s->code_length_code_lengths,
- s->code_length_histo);
- memset(&s->code_length_histo[0], 0, sizeof(s->code_length_histo));
- for (i = 0; i <= BROTLI_HUFFMAN_MAX_CODE_LENGTH; ++i) {
- s->next_symbol[i] = (int)i - (BROTLI_HUFFMAN_MAX_CODE_LENGTH + 1);
- s->symbol_lists[s->next_symbol[i]] = 0xFFFF;
- }
-
- s->symbol = 0;
- s->prev_code_len = BROTLI_INITIAL_REPEATED_CODE_LENGTH;
- s->repeat = 0;
- s->repeat_code_len = 0;
- s->space = 32768;
- s->substate_huffman = BROTLI_STATE_HUFFMAN_LENGTH_SYMBOLS;
- }
- /* Fall through. */
-
- case BROTLI_STATE_HUFFMAN_LENGTH_SYMBOLS: {
- uint32_t table_size;
- BrotliDecoderErrorCode result = ReadSymbolCodeLengths(max_symbol, s);
- if (result == BROTLI_DECODER_NEEDS_MORE_INPUT) {
- result = SafeReadSymbolCodeLengths(max_symbol, s);
- }
- if (result != BROTLI_DECODER_SUCCESS) {
- return result;
- }
-
- if (s->space != 0) {
- BROTLI_LOG(("[ReadHuffmanCode] space = %d\n", (int)s->space));
- return BROTLI_FAILURE(BROTLI_DECODER_ERROR_FORMAT_HUFFMAN_SPACE);
- }
- table_size = BrotliBuildHuffmanTable(
- table, HUFFMAN_TABLE_BITS, s->symbol_lists, s->code_length_histo);
- if (opt_table_size) {
- *opt_table_size = table_size;
- }
- s->substate_huffman = BROTLI_STATE_HUFFMAN_NONE;
- return BROTLI_DECODER_SUCCESS;
- }
-
- default:
- return
- BROTLI_FAILURE(BROTLI_DECODER_ERROR_UNREACHABLE);
- }
- }
-}
-
-/* Decodes a block length by reading 3..39 bits. */
-static BROTLI_INLINE uint32_t ReadBlockLength(const HuffmanCode* table,
- BrotliBitReader* br) {
- uint32_t code;
- uint32_t nbits;
- code = ReadSymbol(table, br);
- nbits = kBlockLengthPrefixCode[code].nbits; /* nbits == 2..24 */
- return kBlockLengthPrefixCode[code].offset + BrotliReadBits(br, nbits);
-}
-
-/* WARNING: if state is not BROTLI_STATE_READ_BLOCK_LENGTH_NONE, then
- reading can't be continued with ReadBlockLength. */
-static BROTLI_INLINE BROTLI_BOOL SafeReadBlockLength(
- BrotliDecoderState* s, uint32_t* result, const HuffmanCode* table,
- BrotliBitReader* br) {
- uint32_t index;
- if (s->substate_read_block_length == BROTLI_STATE_READ_BLOCK_LENGTH_NONE) {
- if (!SafeReadSymbol(table, br, &index)) {
- return BROTLI_FALSE;
- }
- } else {
- index = s->block_length_index;
- }
- {
- uint32_t bits;
- uint32_t nbits = kBlockLengthPrefixCode[index].nbits; /* nbits == 2..24 */
- if (!BrotliSafeReadBits(br, nbits, &bits)) {
- s->block_length_index = index;
- s->substate_read_block_length = BROTLI_STATE_READ_BLOCK_LENGTH_SUFFIX;
- return BROTLI_FALSE;
- }
- *result = kBlockLengthPrefixCode[index].offset + bits;
- s->substate_read_block_length = BROTLI_STATE_READ_BLOCK_LENGTH_NONE;
- return BROTLI_TRUE;
- }
-}
-
-/* Transform:
- 1) initialize list L with values 0, 1,... 255
- 2) For each input element X:
- 2.1) let Y = L[X]
- 2.2) remove X-th element from L
- 2.3) prepend Y to L
- 2.4) append Y to output
-
- In most cases max(Y) <= 7, so most of L remains intact.
- To reduce the cost of initialization, we reuse L, remember the upper bound
- of Y values, and reinitialize only first elements in L.
-
- Most of input values are 0 and 1. To reduce number of branches, we replace
- inner for loop with do-while. */
-static BROTLI_NOINLINE void InverseMoveToFrontTransform(
- uint8_t* v, uint32_t v_len, BrotliDecoderState* state) {
- /* Reinitialize elements that could have been changed. */
- uint32_t i = 1;
- uint32_t upper_bound = state->mtf_upper_bound;
- uint32_t* mtf = &state->mtf[1]; /* Make mtf[-1] addressable. */
- uint8_t* mtf_u8 = (uint8_t*)mtf;
- /* Load endian-aware constant. */
- const uint8_t b0123[4] = {0, 1, 2, 3};
- uint32_t pattern;
- memcpy(&pattern, &b0123, 4);
-
- /* Initialize list using 4 consequent values pattern. */
- mtf[0] = pattern;
- do {
- pattern += 0x04040404; /* Advance all 4 values by 4. */
- mtf[i] = pattern;
- i++;
- } while (i <= upper_bound);
-
- /* Transform the input. */
- upper_bound = 0;
- for (i = 0; i < v_len; ++i) {
- int index = v[i];
- uint8_t value = mtf_u8[index];
- upper_bound |= v[i];
- v[i] = value;
- mtf_u8[-1] = value;
- do {
- index--;
- mtf_u8[index + 1] = mtf_u8[index];
- } while (index >= 0);
- }
- /* Remember amount of elements to be reinitialized. */
- state->mtf_upper_bound = upper_bound >> 2;
-}
-
-/* Decodes a series of Huffman table using ReadHuffmanCode function. */
-static BrotliDecoderErrorCode HuffmanTreeGroupDecode(
- HuffmanTreeGroup* group, BrotliDecoderState* s) {
- if (s->substate_tree_group != BROTLI_STATE_TREE_GROUP_LOOP) {
- s->next = group->codes;
- s->htree_index = 0;
- s->substate_tree_group = BROTLI_STATE_TREE_GROUP_LOOP;
- }
- while (s->htree_index < group->num_htrees) {
- uint32_t table_size;
- BrotliDecoderErrorCode result =
- ReadHuffmanCode(group->alphabet_size, group->max_symbol,
- s->next, &table_size, s);
- if (result != BROTLI_DECODER_SUCCESS) return result;
- group->htrees[s->htree_index] = s->next;
- s->next += table_size;
- ++s->htree_index;
- }
- s->substate_tree_group = BROTLI_STATE_TREE_GROUP_NONE;
- return BROTLI_DECODER_SUCCESS;
-}
-
-/* Decodes a context map.
- Decoding is done in 4 phases:
- 1) Read auxiliary information (6..16 bits) and allocate memory.
- In case of trivial context map, decoding is finished at this phase.
- 2) Decode Huffman table using ReadHuffmanCode function.
- This table will be used for reading context map items.
- 3) Read context map items; "0" values could be run-length encoded.
- 4) Optionally, apply InverseMoveToFront transform to the resulting map. */
-static BrotliDecoderErrorCode DecodeContextMap(uint32_t context_map_size,
- uint32_t* num_htrees,
- uint8_t** context_map_arg,
- BrotliDecoderState* s) {
- BrotliBitReader* br = &s->br;
- BrotliDecoderErrorCode result = BROTLI_DECODER_SUCCESS;
-
- switch ((int)s->substate_context_map) {
- case BROTLI_STATE_CONTEXT_MAP_NONE:
- result = DecodeVarLenUint8(s, br, num_htrees);
- if (result != BROTLI_DECODER_SUCCESS) {
- return result;
- }
- (*num_htrees)++;
- s->context_index = 0;
- BROTLI_LOG_UINT(context_map_size);
- BROTLI_LOG_UINT(*num_htrees);
- *context_map_arg =
- (uint8_t*)BROTLI_DECODER_ALLOC(s, (size_t)context_map_size);
- if (*context_map_arg == 0) {
- return BROTLI_FAILURE(BROTLI_DECODER_ERROR_ALLOC_CONTEXT_MAP);
- }
- if (*num_htrees <= 1) {
- memset(*context_map_arg, 0, (size_t)context_map_size);
- return BROTLI_DECODER_SUCCESS;
- }
- s->substate_context_map = BROTLI_STATE_CONTEXT_MAP_READ_PREFIX;
- /* Fall through. */
-
- case BROTLI_STATE_CONTEXT_MAP_READ_PREFIX: {
- uint32_t bits;
- /* In next stage ReadHuffmanCode uses at least 4 bits, so it is safe
- to peek 4 bits ahead. */
- if (!BrotliSafeGetBits(br, 5, &bits)) {
- return BROTLI_DECODER_NEEDS_MORE_INPUT;
- }
- if ((bits & 1) != 0) { /* Use RLE for zeros. */
- s->max_run_length_prefix = (bits >> 1) + 1;
- BrotliDropBits(br, 5);
- } else {
- s->max_run_length_prefix = 0;
- BrotliDropBits(br, 1);
- }
- BROTLI_LOG_UINT(s->max_run_length_prefix);
- s->substate_context_map = BROTLI_STATE_CONTEXT_MAP_HUFFMAN;
- }
- /* Fall through. */
-
- case BROTLI_STATE_CONTEXT_MAP_HUFFMAN: {
- uint32_t alphabet_size = *num_htrees + s->max_run_length_prefix;
- result = ReadHuffmanCode(alphabet_size, alphabet_size,
- s->context_map_table, NULL, s);
- if (result != BROTLI_DECODER_SUCCESS) return result;
- s->code = 0xFFFF;
- s->substate_context_map = BROTLI_STATE_CONTEXT_MAP_DECODE;
- }
- /* Fall through. */
-
- case BROTLI_STATE_CONTEXT_MAP_DECODE: {
- uint32_t context_index = s->context_index;
- uint32_t max_run_length_prefix = s->max_run_length_prefix;
- uint8_t* context_map = *context_map_arg;
- uint32_t code = s->code;
- BROTLI_BOOL skip_preamble = (code != 0xFFFF);
- while (context_index < context_map_size || skip_preamble) {
- if (!skip_preamble) {
- if (!SafeReadSymbol(s->context_map_table, br, &code)) {
- s->code = 0xFFFF;
- s->context_index = context_index;
- return BROTLI_DECODER_NEEDS_MORE_INPUT;
- }
- BROTLI_LOG_UINT(code);
-
- if (code == 0) {
- context_map[context_index++] = 0;
- continue;
- }
- if (code > max_run_length_prefix) {
- context_map[context_index++] =
- (uint8_t)(code - max_run_length_prefix);
- continue;
- }
- } else {
- skip_preamble = BROTLI_FALSE;
- }
- /* RLE sub-stage. */
- {
- uint32_t reps;
- if (!BrotliSafeReadBits(br, code, &reps)) {
- s->code = code;
- s->context_index = context_index;
- return BROTLI_DECODER_NEEDS_MORE_INPUT;
- }
- reps += 1U << code;
- BROTLI_LOG_UINT(reps);
- if (context_index + reps > context_map_size) {
- return
- BROTLI_FAILURE(BROTLI_DECODER_ERROR_FORMAT_CONTEXT_MAP_REPEAT);
- }
- do {
- context_map[context_index++] = 0;
- } while (--reps);
- }
- }
- }
- /* Fall through. */
-
- case BROTLI_STATE_CONTEXT_MAP_TRANSFORM: {
- uint32_t bits;
- if (!BrotliSafeReadBits(br, 1, &bits)) {
- s->substate_context_map = BROTLI_STATE_CONTEXT_MAP_TRANSFORM;
- return BROTLI_DECODER_NEEDS_MORE_INPUT;
- }
- if (bits != 0) {
- InverseMoveToFrontTransform(*context_map_arg, context_map_size, s);
- }
- s->substate_context_map = BROTLI_STATE_CONTEXT_MAP_NONE;
- return BROTLI_DECODER_SUCCESS;
- }
-
- default:
- return
- BROTLI_FAILURE(BROTLI_DECODER_ERROR_UNREACHABLE);
- }
-}
-
-/* Decodes a command or literal and updates block type ring-buffer.
- Reads 3..54 bits. */
-static BROTLI_INLINE BROTLI_BOOL DecodeBlockTypeAndLength(
- int safe, BrotliDecoderState* s, int tree_type) {
- uint32_t max_block_type = s->num_block_types[tree_type];
- const HuffmanCode* type_tree = &s->block_type_trees[
- tree_type * BROTLI_HUFFMAN_MAX_SIZE_258];
- const HuffmanCode* len_tree = &s->block_len_trees[
- tree_type * BROTLI_HUFFMAN_MAX_SIZE_26];
- BrotliBitReader* br = &s->br;
- uint32_t* ringbuffer = &s->block_type_rb[tree_type * 2];
- uint32_t block_type;
- if (max_block_type <= 1) {
- return BROTLI_FALSE;
- }
-
- /* Read 0..15 + 3..39 bits. */
- if (!safe) {
- block_type = ReadSymbol(type_tree, br);
- s->block_length[tree_type] = ReadBlockLength(len_tree, br);
- } else {
- BrotliBitReaderState memento;
- BrotliBitReaderSaveState(br, &memento);
- if (!SafeReadSymbol(type_tree, br, &block_type)) return BROTLI_FALSE;
- if (!SafeReadBlockLength(s, &s->block_length[tree_type], len_tree, br)) {
- s->substate_read_block_length = BROTLI_STATE_READ_BLOCK_LENGTH_NONE;
- BrotliBitReaderRestoreState(br, &memento);
- return BROTLI_FALSE;
- }
- }
-
- if (block_type == 1) {
- block_type = ringbuffer[1] + 1;
- } else if (block_type == 0) {
- block_type = ringbuffer[0];
- } else {
- block_type -= 2;
- }
- if (block_type >= max_block_type) {
- block_type -= max_block_type;
- }
- ringbuffer[0] = ringbuffer[1];
- ringbuffer[1] = block_type;
- return BROTLI_TRUE;
-}
-
-static BROTLI_INLINE void DetectTrivialLiteralBlockTypes(
- BrotliDecoderState* s) {
- size_t i;
- for (i = 0; i < 8; ++i) s->trivial_literal_contexts[i] = 0;
- for (i = 0; i < s->num_block_types[0]; i++) {
- size_t offset = i << BROTLI_LITERAL_CONTEXT_BITS;
- size_t error = 0;
- size_t sample = s->context_map[offset];
- size_t j;
- for (j = 0; j < (1u << BROTLI_LITERAL_CONTEXT_BITS);) {
- BROTLI_REPEAT(4, error |= s->context_map[offset + j++] ^ sample;)
- }
- if (error == 0) {
- s->trivial_literal_contexts[i >> 5] |= 1u << (i & 31);
- }
- }
-}
-
-static BROTLI_INLINE void PrepareLiteralDecoding(BrotliDecoderState* s) {
- uint8_t context_mode;
- size_t trivial;
- uint32_t block_type = s->block_type_rb[1];
- uint32_t context_offset = block_type << BROTLI_LITERAL_CONTEXT_BITS;
- s->context_map_slice = s->context_map + context_offset;
- trivial = s->trivial_literal_contexts[block_type >> 5];
- s->trivial_literal_context = (trivial >> (block_type & 31)) & 1;
- s->literal_htree = s->literal_hgroup.htrees[s->context_map_slice[0]];
- context_mode = s->context_modes[block_type] & 3;
- s->context_lookup = BROTLI_CONTEXT_LUT(context_mode);
-}
-
-/* Decodes the block type and updates the state for literal context.
- Reads 3..54 bits. */
-static BROTLI_INLINE BROTLI_BOOL DecodeLiteralBlockSwitchInternal(
- int safe, BrotliDecoderState* s) {
- if (!DecodeBlockTypeAndLength(safe, s, 0)) {
- return BROTLI_FALSE;
- }
- PrepareLiteralDecoding(s);
- return BROTLI_TRUE;
-}
-
-static void BROTLI_NOINLINE DecodeLiteralBlockSwitch(BrotliDecoderState* s) {
- DecodeLiteralBlockSwitchInternal(0, s);
-}
-
-static BROTLI_BOOL BROTLI_NOINLINE SafeDecodeLiteralBlockSwitch(
- BrotliDecoderState* s) {
- return DecodeLiteralBlockSwitchInternal(1, s);
-}
-
-/* Block switch for insert/copy length.
- Reads 3..54 bits. */
-static BROTLI_INLINE BROTLI_BOOL DecodeCommandBlockSwitchInternal(
- int safe, BrotliDecoderState* s) {
- if (!DecodeBlockTypeAndLength(safe, s, 1)) {
- return BROTLI_FALSE;
- }
- s->htree_command = s->insert_copy_hgroup.htrees[s->block_type_rb[3]];
- return BROTLI_TRUE;
-}
-
-static void BROTLI_NOINLINE DecodeCommandBlockSwitch(BrotliDecoderState* s) {
- DecodeCommandBlockSwitchInternal(0, s);
-}
-
-static BROTLI_BOOL BROTLI_NOINLINE SafeDecodeCommandBlockSwitch(
- BrotliDecoderState* s) {
- return DecodeCommandBlockSwitchInternal(1, s);
-}
-
-/* Block switch for distance codes.
- Reads 3..54 bits. */
-static BROTLI_INLINE BROTLI_BOOL DecodeDistanceBlockSwitchInternal(
- int safe, BrotliDecoderState* s) {
- if (!DecodeBlockTypeAndLength(safe, s, 2)) {
- return BROTLI_FALSE;
- }
- s->dist_context_map_slice = s->dist_context_map +
- (s->block_type_rb[5] << BROTLI_DISTANCE_CONTEXT_BITS);
- s->dist_htree_index = s->dist_context_map_slice[s->distance_context];
- return BROTLI_TRUE;
-}
-
-static void BROTLI_NOINLINE DecodeDistanceBlockSwitch(BrotliDecoderState* s) {
- DecodeDistanceBlockSwitchInternal(0, s);
-}
-
-static BROTLI_BOOL BROTLI_NOINLINE SafeDecodeDistanceBlockSwitch(
- BrotliDecoderState* s) {
- return DecodeDistanceBlockSwitchInternal(1, s);
-}
-
-static size_t UnwrittenBytes(const BrotliDecoderState* s, BROTLI_BOOL wrap) {
- size_t pos = wrap && s->pos > s->ringbuffer_size ?
- (size_t)s->ringbuffer_size : (size_t)(s->pos);
- size_t partial_pos_rb = (s->rb_roundtrips * (size_t)s->ringbuffer_size) + pos;
- return partial_pos_rb - s->partial_pos_out;
-}
-
-/* Dumps output.
- Returns BROTLI_DECODER_NEEDS_MORE_OUTPUT only if there is more output to push
- and either ring-buffer is as big as window size, or |force| is true. */
-static BrotliDecoderErrorCode BROTLI_NOINLINE WriteRingBuffer(
- BrotliDecoderState* s, size_t* available_out, uint8_t** next_out,
- size_t* total_out, BROTLI_BOOL force) {
- uint8_t* start =
- s->ringbuffer + (s->partial_pos_out & (size_t)s->ringbuffer_mask);
- size_t to_write = UnwrittenBytes(s, BROTLI_TRUE);
- size_t num_written = *available_out;
- if (num_written > to_write) {
- num_written = to_write;
- }
- if (s->meta_block_remaining_len < 0) {
- return BROTLI_FAILURE(BROTLI_DECODER_ERROR_FORMAT_BLOCK_LENGTH_1);
- }
- if (next_out && !*next_out) {
- *next_out = start;
- } else {
- if (next_out) {
- memcpy(*next_out, start, num_written);
- *next_out += num_written;
- }
- }
- *available_out -= num_written;
- BROTLI_LOG_UINT(to_write);
- BROTLI_LOG_UINT(num_written);
- s->partial_pos_out += num_written;
- if (total_out) {
- *total_out = s->partial_pos_out;
- }
- if (num_written < to_write) {
- if (s->ringbuffer_size == (1 << s->window_bits) || force) {
- return BROTLI_DECODER_NEEDS_MORE_OUTPUT;
- } else {
- return BROTLI_DECODER_SUCCESS;
- }
- }
- /* Wrap ring buffer only if it has reached its maximal size. */
- if (s->ringbuffer_size == (1 << s->window_bits) &&
- s->pos >= s->ringbuffer_size) {
- s->pos -= s->ringbuffer_size;
- s->rb_roundtrips++;
- s->should_wrap_ringbuffer = (size_t)s->pos != 0 ? 1 : 0;
- }
- return BROTLI_DECODER_SUCCESS;
-}
-
-static void BROTLI_NOINLINE WrapRingBuffer(BrotliDecoderState* s) {
- if (s->should_wrap_ringbuffer) {
- memcpy(s->ringbuffer, s->ringbuffer_end, (size_t)s->pos);
- s->should_wrap_ringbuffer = 0;
- }
-}
-
-/* Allocates ring-buffer.
-
- s->ringbuffer_size MUST be updated by BrotliCalculateRingBufferSize before
- this function is called.
-
- Last two bytes of ring-buffer are initialized to 0, so context calculation
- could be done uniformly for the first two and all other positions. */
-static BROTLI_BOOL BROTLI_NOINLINE BrotliEnsureRingBuffer(
- BrotliDecoderState* s) {
- uint8_t* old_ringbuffer = s->ringbuffer;
- if (s->ringbuffer_size == s->new_ringbuffer_size) {
- return BROTLI_TRUE;
- }
-
- s->ringbuffer = (uint8_t*)BROTLI_DECODER_ALLOC(s,
- (size_t)(s->new_ringbuffer_size) + kRingBufferWriteAheadSlack);
- if (s->ringbuffer == 0) {
- /* Restore previous value. */
- s->ringbuffer = old_ringbuffer;
- return BROTLI_FALSE;
- }
- s->ringbuffer[s->new_ringbuffer_size - 2] = 0;
- s->ringbuffer[s->new_ringbuffer_size - 1] = 0;
-
- if (!!old_ringbuffer) {
- memcpy(s->ringbuffer, old_ringbuffer, (size_t)s->pos);
- BROTLI_DECODER_FREE(s, old_ringbuffer);
- }
-
- s->ringbuffer_size = s->new_ringbuffer_size;
- s->ringbuffer_mask = s->new_ringbuffer_size - 1;
- s->ringbuffer_end = s->ringbuffer + s->ringbuffer_size;
-
- return BROTLI_TRUE;
-}
-
-static BrotliDecoderErrorCode BROTLI_NOINLINE CopyUncompressedBlockToOutput(
- size_t* available_out, uint8_t** next_out, size_t* total_out,
- BrotliDecoderState* s) {
- /* TODO: avoid allocation for single uncompressed block. */
- if (!BrotliEnsureRingBuffer(s)) {
- return BROTLI_FAILURE(BROTLI_DECODER_ERROR_ALLOC_RING_BUFFER_1);
- }
-
- /* State machine */
- for (;;) {
- switch (s->substate_uncompressed) {
- case BROTLI_STATE_UNCOMPRESSED_NONE: {
- int nbytes = (int)BrotliGetRemainingBytes(&s->br);
- if (nbytes > s->meta_block_remaining_len) {
- nbytes = s->meta_block_remaining_len;
- }
- if (s->pos + nbytes > s->ringbuffer_size) {
- nbytes = s->ringbuffer_size - s->pos;
- }
- /* Copy remaining bytes from s->br.buf_ to ring-buffer. */
- BrotliCopyBytes(&s->ringbuffer[s->pos], &s->br, (size_t)nbytes);
- s->pos += nbytes;
- s->meta_block_remaining_len -= nbytes;
- if (s->pos < 1 << s->window_bits) {
- if (s->meta_block_remaining_len == 0) {
- return BROTLI_DECODER_SUCCESS;
- }
- return BROTLI_DECODER_NEEDS_MORE_INPUT;
- }
- s->substate_uncompressed = BROTLI_STATE_UNCOMPRESSED_WRITE;
- }
- /* Fall through. */
-
- case BROTLI_STATE_UNCOMPRESSED_WRITE: {
- BrotliDecoderErrorCode result;
- result = WriteRingBuffer(
- s, available_out, next_out, total_out, BROTLI_FALSE);
- if (result != BROTLI_DECODER_SUCCESS) {
- return result;
- }
- if (s->ringbuffer_size == 1 << s->window_bits) {
- s->max_distance = s->max_backward_distance;
- }
- s->substate_uncompressed = BROTLI_STATE_UNCOMPRESSED_NONE;
- break;
- }
- }
- }
- BROTLI_DCHECK(0); /* Unreachable */
-}
-
-/* Calculates the smallest feasible ring buffer.
-
- If we know the data size is small, do not allocate more ring buffer
- size than needed to reduce memory usage.
-
- When this method is called, metablock size and flags MUST be decoded. */
-static void BROTLI_NOINLINE BrotliCalculateRingBufferSize(
- BrotliDecoderState* s) {
- int window_size = 1 << s->window_bits;
- int new_ringbuffer_size = window_size;
- /* We need at least 2 bytes of ring buffer size to get the last two
- bytes for context from there */
- int min_size = s->ringbuffer_size ? s->ringbuffer_size : 1024;
- int output_size;
-
- /* If maximum is already reached, no further extension is retired. */
- if (s->ringbuffer_size == window_size) {
- return;
- }
-
- /* Metadata blocks does not touch ring buffer. */
- if (s->is_metadata) {
- return;
- }
-
- if (!s->ringbuffer) {
- output_size = 0;
- } else {
- output_size = s->pos;
- }
- output_size += s->meta_block_remaining_len;
- min_size = min_size < output_size ? output_size : min_size;
-
- if (!!s->canny_ringbuffer_allocation) {
- /* Reduce ring buffer size to save memory when server is unscrupulous.
- In worst case memory usage might be 1.5x bigger for a short period of
- ring buffer reallocation. */
- while ((new_ringbuffer_size >> 1) >= min_size) {
- new_ringbuffer_size >>= 1;
- }
- }
-
- s->new_ringbuffer_size = new_ringbuffer_size;
-}
-
-/* Reads 1..256 2-bit context modes. */
-static BrotliDecoderErrorCode ReadContextModes(BrotliDecoderState* s) {
- BrotliBitReader* br = &s->br;
- int i = s->loop_counter;
-
- while (i < (int)s->num_block_types[0]) {
- uint32_t bits;
- if (!BrotliSafeReadBits(br, 2, &bits)) {
- s->loop_counter = i;
- return BROTLI_DECODER_NEEDS_MORE_INPUT;
- }
- s->context_modes[i] = (uint8_t)bits;
- BROTLI_LOG_ARRAY_INDEX(s->context_modes, i);
- i++;
- }
- return BROTLI_DECODER_SUCCESS;
-}
-
-static BROTLI_INLINE void TakeDistanceFromRingBuffer(BrotliDecoderState* s) {
- if (s->distance_code == 0) {
- --s->dist_rb_idx;
- s->distance_code = s->dist_rb[s->dist_rb_idx & 3];
- /* Compensate double distance-ring-buffer roll for dictionary items. */
- s->distance_context = 1;
- } else {
- int distance_code = s->distance_code << 1;
- /* kDistanceShortCodeIndexOffset has 2-bit values from LSB:
- 3, 2, 1, 0, 3, 3, 3, 3, 3, 3, 2, 2, 2, 2, 2, 2 */
- const uint32_t kDistanceShortCodeIndexOffset = 0xAAAFFF1B;
- /* kDistanceShortCodeValueOffset has 2-bit values from LSB:
- -0, 0,-0, 0,-1, 1,-2, 2,-3, 3,-1, 1,-2, 2,-3, 3 */
- const uint32_t kDistanceShortCodeValueOffset = 0xFA5FA500;
- int v = (s->dist_rb_idx +
- (int)(kDistanceShortCodeIndexOffset >> distance_code)) & 0x3;
- s->distance_code = s->dist_rb[v];
- v = (int)(kDistanceShortCodeValueOffset >> distance_code) & 0x3;
- if ((distance_code & 0x3) != 0) {
- s->distance_code += v;
- } else {
- s->distance_code -= v;
- if (s->distance_code <= 0) {
- /* A huge distance will cause a BROTLI_FAILURE() soon.
- This is a little faster than failing here. */
- s->distance_code = 0x7FFFFFFF;
- }
- }
- }
-}
-
-static BROTLI_INLINE BROTLI_BOOL SafeReadBits(
- BrotliBitReader* const br, uint32_t n_bits, uint32_t* val) {
- if (n_bits != 0) {
- return BrotliSafeReadBits(br, n_bits, val);
- } else {
- *val = 0;
- return BROTLI_TRUE;
- }
-}
-
-/* Precondition: s->distance_code < 0. */
-static BROTLI_INLINE BROTLI_BOOL ReadDistanceInternal(
- int safe, BrotliDecoderState* s, BrotliBitReader* br) {
- int distval;
- BrotliBitReaderState memento;
- HuffmanCode* distance_tree = s->distance_hgroup.htrees[s->dist_htree_index];
- if (!safe) {
- s->distance_code = (int)ReadSymbol(distance_tree, br);
- } else {
- uint32_t code;
- BrotliBitReaderSaveState(br, &memento);
- if (!SafeReadSymbol(distance_tree, br, &code)) {
- return BROTLI_FALSE;
- }
- s->distance_code = (int)code;
- }
- /* Convert the distance code to the actual distance by possibly
- looking up past distances from the s->ringbuffer. */
- s->distance_context = 0;
- if ((s->distance_code & ~0xF) == 0) {
- TakeDistanceFromRingBuffer(s);
- --s->block_length[2];
- return BROTLI_TRUE;
- }
- distval = s->distance_code - (int)s->num_direct_distance_codes;
- if (distval >= 0) {
- uint32_t nbits;
- int postfix;
- int offset;
- if (!safe && (s->distance_postfix_bits == 0)) {
- nbits = ((uint32_t)distval >> 1) + 1;
- offset = ((2 + (distval & 1)) << nbits) - 4;
- s->distance_code = (int)s->num_direct_distance_codes + offset +
- (int)BrotliReadBits(br, nbits);
- } else {
- /* This branch also works well when s->distance_postfix_bits == 0. */
- uint32_t bits;
- postfix = distval & s->distance_postfix_mask;
- distval >>= s->distance_postfix_bits;
- nbits = ((uint32_t)distval >> 1) + 1;
- if (safe) {
- if (!SafeReadBits(br, nbits, &bits)) {
- s->distance_code = -1; /* Restore precondition. */
- BrotliBitReaderRestoreState(br, &memento);
- return BROTLI_FALSE;
- }
- } else {
- bits = BrotliReadBits(br, nbits);
- }
- offset = ((2 + (distval & 1)) << nbits) - 4;
- s->distance_code = (int)s->num_direct_distance_codes +
- ((offset + (int)bits) << s->distance_postfix_bits) + postfix;
- }
- }
- s->distance_code = s->distance_code - BROTLI_NUM_DISTANCE_SHORT_CODES + 1;
- --s->block_length[2];
- return BROTLI_TRUE;
-}
-
-static BROTLI_INLINE void ReadDistance(
- BrotliDecoderState* s, BrotliBitReader* br) {
- ReadDistanceInternal(0, s, br);
-}
-
-static BROTLI_INLINE BROTLI_BOOL SafeReadDistance(
- BrotliDecoderState* s, BrotliBitReader* br) {
- return ReadDistanceInternal(1, s, br);
-}
-
-static BROTLI_INLINE BROTLI_BOOL ReadCommandInternal(
- int safe, BrotliDecoderState* s, BrotliBitReader* br, int* insert_length) {
- uint32_t cmd_code;
- uint32_t insert_len_extra = 0;
- uint32_t copy_length;
- CmdLutElement v;
- BrotliBitReaderState memento;
- if (!safe) {
- cmd_code = ReadSymbol(s->htree_command, br);
- } else {
- BrotliBitReaderSaveState(br, &memento);
- if (!SafeReadSymbol(s->htree_command, br, &cmd_code)) {
- return BROTLI_FALSE;
- }
- }
- v = kCmdLut[cmd_code];
- s->distance_code = v.distance_code;
- s->distance_context = v.context;
- s->dist_htree_index = s->dist_context_map_slice[s->distance_context];
- *insert_length = v.insert_len_offset;
- if (!safe) {
- if (BROTLI_PREDICT_FALSE(v.insert_len_extra_bits != 0)) {
- insert_len_extra = BrotliReadBits(br, v.insert_len_extra_bits);
- }
- copy_length = BrotliReadBits(br, v.copy_len_extra_bits);
- } else {
- if (!SafeReadBits(br, v.insert_len_extra_bits, &insert_len_extra) ||
- !SafeReadBits(br, v.copy_len_extra_bits, ©_length)) {
- BrotliBitReaderRestoreState(br, &memento);
- return BROTLI_FALSE;
- }
- }
- s->copy_length = (int)copy_length + v.copy_len_offset;
- --s->block_length[1];
- *insert_length += (int)insert_len_extra;
- return BROTLI_TRUE;
-}
-
-static BROTLI_INLINE void ReadCommand(
- BrotliDecoderState* s, BrotliBitReader* br, int* insert_length) {
- ReadCommandInternal(0, s, br, insert_length);
-}
-
-static BROTLI_INLINE BROTLI_BOOL SafeReadCommand(
- BrotliDecoderState* s, BrotliBitReader* br, int* insert_length) {
- return ReadCommandInternal(1, s, br, insert_length);
-}
-
-static BROTLI_INLINE BROTLI_BOOL CheckInputAmount(
- int safe, BrotliBitReader* const br, size_t num) {
- if (safe) {
- return BROTLI_TRUE;
- }
- return BrotliCheckInputAmount(br, num);
-}
-
-#define BROTLI_SAFE(METHOD) \
- { \
- if (safe) { \
- if (!Safe##METHOD) { \
- result = BROTLI_DECODER_NEEDS_MORE_INPUT; \
- goto saveStateAndReturn; \
- } \
- } else { \
- METHOD; \
- } \
- }
-
-static BROTLI_INLINE BrotliDecoderErrorCode ProcessCommandsInternal(
- int safe, BrotliDecoderState* s) {
- int pos = s->pos;
- int i = s->loop_counter;
- BrotliDecoderErrorCode result = BROTLI_DECODER_SUCCESS;
- BrotliBitReader* br = &s->br;
-
- if (!CheckInputAmount(safe, br, 28)) {
- result = BROTLI_DECODER_NEEDS_MORE_INPUT;
- goto saveStateAndReturn;
- }
- if (!safe) {
- BROTLI_UNUSED(BrotliWarmupBitReader(br));
- }
-
- /* Jump into state machine. */
- if (s->state == BROTLI_STATE_COMMAND_BEGIN) {
- goto CommandBegin;
- } else if (s->state == BROTLI_STATE_COMMAND_INNER) {
- goto CommandInner;
- } else if (s->state == BROTLI_STATE_COMMAND_POST_DECODE_LITERALS) {
- goto CommandPostDecodeLiterals;
- } else if (s->state == BROTLI_STATE_COMMAND_POST_WRAP_COPY) {
- goto CommandPostWrapCopy;
- } else {
- return BROTLI_FAILURE(BROTLI_DECODER_ERROR_UNREACHABLE);
- }
-
-CommandBegin:
- if (safe) {
- s->state = BROTLI_STATE_COMMAND_BEGIN;
- }
- if (!CheckInputAmount(safe, br, 28)) { /* 156 bits + 7 bytes */
- s->state = BROTLI_STATE_COMMAND_BEGIN;
- result = BROTLI_DECODER_NEEDS_MORE_INPUT;
- goto saveStateAndReturn;
- }
- if (BROTLI_PREDICT_FALSE(s->block_length[1] == 0)) {
- BROTLI_SAFE(DecodeCommandBlockSwitch(s));
- goto CommandBegin;
- }
- /* Read the insert/copy length in the command. */
- BROTLI_SAFE(ReadCommand(s, br, &i));
- BROTLI_LOG(("[ProcessCommandsInternal] pos = %d insert = %d copy = %d\n",
- pos, i, s->copy_length));
- if (i == 0) {
- goto CommandPostDecodeLiterals;
- }
- s->meta_block_remaining_len -= i;
-
-CommandInner:
- if (safe) {
- s->state = BROTLI_STATE_COMMAND_INNER;
- }
- /* Read the literals in the command. */
- if (s->trivial_literal_context) {
- uint32_t bits;
- uint32_t value;
- PreloadSymbol(safe, s->literal_htree, br, &bits, &value);
- do {
- if (!CheckInputAmount(safe, br, 28)) { /* 162 bits + 7 bytes */
- s->state = BROTLI_STATE_COMMAND_INNER;
- result = BROTLI_DECODER_NEEDS_MORE_INPUT;
- goto saveStateAndReturn;
- }
- if (BROTLI_PREDICT_FALSE(s->block_length[0] == 0)) {
- BROTLI_SAFE(DecodeLiteralBlockSwitch(s));
- PreloadSymbol(safe, s->literal_htree, br, &bits, &value);
- if (!s->trivial_literal_context) goto CommandInner;
- }
- if (!safe) {
- s->ringbuffer[pos] =
- (uint8_t)ReadPreloadedSymbol(s->literal_htree, br, &bits, &value);
- } else {
- uint32_t literal;
- if (!SafeReadSymbol(s->literal_htree, br, &literal)) {
- result = BROTLI_DECODER_NEEDS_MORE_INPUT;
- goto saveStateAndReturn;
- }
- s->ringbuffer[pos] = (uint8_t)literal;
- }
- --s->block_length[0];
- BROTLI_LOG_ARRAY_INDEX(s->ringbuffer, pos);
- ++pos;
- if (BROTLI_PREDICT_FALSE(pos == s->ringbuffer_size)) {
- s->state = BROTLI_STATE_COMMAND_INNER_WRITE;
- --i;
- goto saveStateAndReturn;
- }
- } while (--i != 0);
- } else {
- uint8_t p1 = s->ringbuffer[(pos - 1) & s->ringbuffer_mask];
- uint8_t p2 = s->ringbuffer[(pos - 2) & s->ringbuffer_mask];
- do {
- const HuffmanCode* hc;
- uint8_t context;
- if (!CheckInputAmount(safe, br, 28)) { /* 162 bits + 7 bytes */
- s->state = BROTLI_STATE_COMMAND_INNER;
- result = BROTLI_DECODER_NEEDS_MORE_INPUT;
- goto saveStateAndReturn;
- }
- if (BROTLI_PREDICT_FALSE(s->block_length[0] == 0)) {
- BROTLI_SAFE(DecodeLiteralBlockSwitch(s));
- if (s->trivial_literal_context) goto CommandInner;
- }
- context = BROTLI_CONTEXT(p1, p2, s->context_lookup);
- BROTLI_LOG_UINT(context);
- hc = s->literal_hgroup.htrees[s->context_map_slice[context]];
- p2 = p1;
- if (!safe) {
- p1 = (uint8_t)ReadSymbol(hc, br);
- } else {
- uint32_t literal;
- if (!SafeReadSymbol(hc, br, &literal)) {
- result = BROTLI_DECODER_NEEDS_MORE_INPUT;
- goto saveStateAndReturn;
- }
- p1 = (uint8_t)literal;
- }
- s->ringbuffer[pos] = p1;
- --s->block_length[0];
- BROTLI_LOG_UINT(s->context_map_slice[context]);
- BROTLI_LOG_ARRAY_INDEX(s->ringbuffer, pos & s->ringbuffer_mask);
- ++pos;
- if (BROTLI_PREDICT_FALSE(pos == s->ringbuffer_size)) {
- s->state = BROTLI_STATE_COMMAND_INNER_WRITE;
- --i;
- goto saveStateAndReturn;
- }
- } while (--i != 0);
- }
- BROTLI_LOG_UINT(s->meta_block_remaining_len);
- if (BROTLI_PREDICT_FALSE(s->meta_block_remaining_len <= 0)) {
- s->state = BROTLI_STATE_METABLOCK_DONE;
- goto saveStateAndReturn;
- }
-
-CommandPostDecodeLiterals:
- if (safe) {
- s->state = BROTLI_STATE_COMMAND_POST_DECODE_LITERALS;
- }
- if (s->distance_code >= 0) {
- /* Implicit distance case. */
- s->distance_context = s->distance_code ? 0 : 1;
- --s->dist_rb_idx;
- s->distance_code = s->dist_rb[s->dist_rb_idx & 3];
- } else {
- /* Read distance code in the command, unless it was implicitly zero. */
- if (BROTLI_PREDICT_FALSE(s->block_length[2] == 0)) {
- BROTLI_SAFE(DecodeDistanceBlockSwitch(s));
- }
- BROTLI_SAFE(ReadDistance(s, br));
- }
- BROTLI_LOG(("[ProcessCommandsInternal] pos = %d distance = %d\n",
- pos, s->distance_code));
- if (s->max_distance != s->max_backward_distance) {
- s->max_distance =
- (pos < s->max_backward_distance) ? pos : s->max_backward_distance;
- }
- i = s->copy_length;
- /* Apply copy of LZ77 back-reference, or static dictionary reference if
- the distance is larger than the max LZ77 distance */
- if (s->distance_code > s->max_distance) {
- /* The maximum allowed distance is BROTLI_MAX_ALLOWED_DISTANCE = 0x7FFFFFFC.
- With this choice, no signed overflow can occur after decoding
- a special distance code (e.g., after adding 3 to the last distance). */
- if (s->distance_code > BROTLI_MAX_ALLOWED_DISTANCE) {
- BROTLI_LOG(("Invalid backward reference. pos: %d distance: %d "
- "len: %d bytes left: %d\n",
- pos, s->distance_code, i, s->meta_block_remaining_len));
- return BROTLI_FAILURE(BROTLI_DECODER_ERROR_FORMAT_DISTANCE);
- }
- if (i >= BROTLI_MIN_DICTIONARY_WORD_LENGTH &&
- i <= BROTLI_MAX_DICTIONARY_WORD_LENGTH) {
- int address = s->distance_code - s->max_distance - 1;
- const BrotliDictionary* words = s->dictionary;
- const BrotliTransforms* transforms = s->transforms;
- int offset = (int)s->dictionary->offsets_by_length[i];
- uint32_t shift = s->dictionary->size_bits_by_length[i];
-
- int mask = (int)BitMask(shift);
- int word_idx = address & mask;
- int transform_idx = address >> shift;
- /* Compensate double distance-ring-buffer roll. */
- s->dist_rb_idx += s->distance_context;
- offset += word_idx * i;
- if (BROTLI_PREDICT_FALSE(!words->data)) {
- return BROTLI_FAILURE(BROTLI_DECODER_ERROR_DICTIONARY_NOT_SET);
- }
- if (transform_idx < (int)transforms->num_transforms) {
- const uint8_t* word = &words->data[offset];
- int len = i;
- if (transform_idx == transforms->cutOffTransforms[0]) {
- memcpy(&s->ringbuffer[pos], word, (size_t)len);
- BROTLI_LOG(("[ProcessCommandsInternal] dictionary word: [%.*s]\n",
- len, word));
- } else {
- len = BrotliTransformDictionaryWord(&s->ringbuffer[pos], word, len,
- transforms, transform_idx);
- BROTLI_LOG(("[ProcessCommandsInternal] dictionary word: [%.*s],"
- " transform_idx = %d, transformed: [%.*s]\n",
- i, word, transform_idx, len, &s->ringbuffer[pos]));
- }
- pos += len;
- s->meta_block_remaining_len -= len;
- if (pos >= s->ringbuffer_size) {
- s->state = BROTLI_STATE_COMMAND_POST_WRITE_1;
- goto saveStateAndReturn;
- }
- } else {
- BROTLI_LOG(("Invalid backward reference. pos: %d distance: %d "
- "len: %d bytes left: %d\n",
- pos, s->distance_code, i, s->meta_block_remaining_len));
- return BROTLI_FAILURE(BROTLI_DECODER_ERROR_FORMAT_TRANSFORM);
- }
- } else {
- BROTLI_LOG(("Invalid backward reference. pos: %d distance: %d "
- "len: %d bytes left: %d\n",
- pos, s->distance_code, i, s->meta_block_remaining_len));
- return BROTLI_FAILURE(BROTLI_DECODER_ERROR_FORMAT_DICTIONARY);
- }
- } else {
- int src_start = (pos - s->distance_code) & s->ringbuffer_mask;
- uint8_t* copy_dst = &s->ringbuffer[pos];
- uint8_t* copy_src = &s->ringbuffer[src_start];
- int dst_end = pos + i;
- int src_end = src_start + i;
- /* Update the recent distances cache. */
- s->dist_rb[s->dist_rb_idx & 3] = s->distance_code;
- ++s->dist_rb_idx;
- s->meta_block_remaining_len -= i;
- /* There are 32+ bytes of slack in the ring-buffer allocation.
- Also, we have 16 short codes, that make these 16 bytes irrelevant
- in the ring-buffer. Let's copy over them as a first guess. */
- memmove16(copy_dst, copy_src);
- if (src_end > pos && dst_end > src_start) {
- /* Regions intersect. */
- goto CommandPostWrapCopy;
- }
- if (dst_end >= s->ringbuffer_size || src_end >= s->ringbuffer_size) {
- /* At least one region wraps. */
- goto CommandPostWrapCopy;
- }
- pos += i;
- if (i > 16) {
- if (i > 32) {
- memcpy(copy_dst + 16, copy_src + 16, (size_t)(i - 16));
- } else {
- /* This branch covers about 45% cases.
- Fixed size short copy allows more compiler optimizations. */
- memmove16(copy_dst + 16, copy_src + 16);
- }
- }
- }
- BROTLI_LOG_UINT(s->meta_block_remaining_len);
- if (s->meta_block_remaining_len <= 0) {
- /* Next metablock, if any. */
- s->state = BROTLI_STATE_METABLOCK_DONE;
- goto saveStateAndReturn;
- } else {
- goto CommandBegin;
- }
-CommandPostWrapCopy:
- {
- int wrap_guard = s->ringbuffer_size - pos;
- while (--i >= 0) {
- s->ringbuffer[pos] =
- s->ringbuffer[(pos - s->distance_code) & s->ringbuffer_mask];
- ++pos;
- if (BROTLI_PREDICT_FALSE(--wrap_guard == 0)) {
- s->state = BROTLI_STATE_COMMAND_POST_WRITE_2;
- goto saveStateAndReturn;
- }
- }
- }
- if (s->meta_block_remaining_len <= 0) {
- /* Next metablock, if any. */
- s->state = BROTLI_STATE_METABLOCK_DONE;
- goto saveStateAndReturn;
- } else {
- goto CommandBegin;
- }
-
-saveStateAndReturn:
- s->pos = pos;
- s->loop_counter = i;
- return result;
-}
-
-#undef BROTLI_SAFE
-
-static BROTLI_NOINLINE BrotliDecoderErrorCode ProcessCommands(
- BrotliDecoderState* s) {
- return ProcessCommandsInternal(0, s);
-}
-
-static BROTLI_NOINLINE BrotliDecoderErrorCode SafeProcessCommands(
- BrotliDecoderState* s) {
- return ProcessCommandsInternal(1, s);
-}
-
-/* Returns the maximum number of distance symbols which can only represent
- distances not exceeding BROTLI_MAX_ALLOWED_DISTANCE. */
-static uint32_t BrotliMaxDistanceSymbol(uint32_t ndirect, uint32_t npostfix) {
- static const uint32_t bound[BROTLI_MAX_NPOSTFIX + 1] = {0, 4, 12, 28};
- static const uint32_t diff[BROTLI_MAX_NPOSTFIX + 1] = {73, 126, 228, 424};
- uint32_t postfix = 1U << npostfix;
- if (ndirect < bound[npostfix]) {
- return ndirect + diff[npostfix] + postfix;
- } else if (ndirect > bound[npostfix] + postfix) {
- return ndirect + diff[npostfix];
- } else {
- return bound[npostfix] + diff[npostfix] + postfix;
- }
-}
-
-BrotliDecoderResult BrotliDecoderDecompress(
- size_t encoded_size, const uint8_t* encoded_buffer, size_t* decoded_size,
- uint8_t* decoded_buffer) {
- BrotliDecoderState s;
- BrotliDecoderResult result;
- size_t total_out = 0;
- size_t available_in = encoded_size;
- const uint8_t* next_in = encoded_buffer;
- size_t available_out = *decoded_size;
- uint8_t* next_out = decoded_buffer;
- if (!BrotliDecoderStateInit(&s, 0, 0, 0)) {
- return BROTLI_DECODER_RESULT_ERROR;
- }
- result = BrotliDecoderDecompressStream(
- &s, &available_in, &next_in, &available_out, &next_out, &total_out);
- *decoded_size = total_out;
- BrotliDecoderStateCleanup(&s);
- if (result != BROTLI_DECODER_RESULT_SUCCESS) {
- result = BROTLI_DECODER_RESULT_ERROR;
- }
- return result;
-}
-
-/* Invariant: input stream is never overconsumed:
- - invalid input implies that the whole stream is invalid -> any amount of
- input could be read and discarded
- - when result is "needs more input", then at least one more byte is REQUIRED
- to complete decoding; all input data MUST be consumed by decoder, so
- client could swap the input buffer
- - when result is "needs more output" decoder MUST ensure that it doesn't
- hold more than 7 bits in bit reader; this saves client from swapping input
- buffer ahead of time
- - when result is "success" decoder MUST return all unused data back to input
- buffer; this is possible because the invariant is held on enter */
-BrotliDecoderResult BrotliDecoderDecompressStream(
- BrotliDecoderState* s, size_t* available_in, const uint8_t** next_in,
- size_t* available_out, uint8_t** next_out, size_t* total_out) {
- BrotliDecoderErrorCode result = BROTLI_DECODER_SUCCESS;
- BrotliBitReader* br = &s->br;
- /* Ensure that |total_out| is set, even if no data will ever be pushed out. */
- if (total_out) {
- *total_out = s->partial_pos_out;
- }
- /* Do not try to process further in a case of unrecoverable error. */
- if ((int)s->error_code < 0) {
- return BROTLI_DECODER_RESULT_ERROR;
- }
- if (*available_out && (!next_out || !*next_out)) {
- return SaveErrorCode(
- s, BROTLI_FAILURE(BROTLI_DECODER_ERROR_INVALID_ARGUMENTS));
- }
- if (!*available_out) next_out = 0;
- if (s->buffer_length == 0) { /* Just connect bit reader to input stream. */
- br->avail_in = *available_in;
- br->next_in = *next_in;
- } else {
- /* At least one byte of input is required. More than one byte of input may
- be required to complete the transaction -> reading more data must be
- done in a loop -> do it in a main loop. */
- result = BROTLI_DECODER_NEEDS_MORE_INPUT;
- br->next_in = &s->buffer.u8[0];
- }
- /* State machine */
- for (;;) {
- if (result != BROTLI_DECODER_SUCCESS) {
- /* Error, needs more input/output. */
- if (result == BROTLI_DECODER_NEEDS_MORE_INPUT) {
- if (s->ringbuffer != 0) { /* Pro-actively push output. */
- BrotliDecoderErrorCode intermediate_result = WriteRingBuffer(s,
- available_out, next_out, total_out, BROTLI_TRUE);
- /* WriteRingBuffer checks s->meta_block_remaining_len validity. */
- if ((int)intermediate_result < 0) {
- result = intermediate_result;
- break;
- }
- }
- if (s->buffer_length != 0) { /* Used with internal buffer. */
- if (br->avail_in == 0) {
- /* Successfully finished read transaction.
- Accumulator contains less than 8 bits, because internal buffer
- is expanded byte-by-byte until it is enough to complete read. */
- s->buffer_length = 0;
- /* Switch to input stream and restart. */
- result = BROTLI_DECODER_SUCCESS;
- br->avail_in = *available_in;
- br->next_in = *next_in;
- continue;
- } else if (*available_in != 0) {
- /* Not enough data in buffer, but can take one more byte from
- input stream. */
- result = BROTLI_DECODER_SUCCESS;
- s->buffer.u8[s->buffer_length] = **next_in;
- s->buffer_length++;
- br->avail_in = s->buffer_length;
- (*next_in)++;
- (*available_in)--;
- /* Retry with more data in buffer. */
- continue;
- }
- /* Can't finish reading and no more input. */
- break;
- } else { /* Input stream doesn't contain enough input. */
- /* Copy tail to internal buffer and return. */
- *next_in = br->next_in;
- *available_in = br->avail_in;
- while (*available_in) {
- s->buffer.u8[s->buffer_length] = **next_in;
- s->buffer_length++;
- (*next_in)++;
- (*available_in)--;
- }
- break;
- }
- /* Unreachable. */
- }
-
- /* Fail or needs more output. */
-
- if (s->buffer_length != 0) {
- /* Just consumed the buffered input and produced some output. Otherwise
- it would result in "needs more input". Reset internal buffer. */
- s->buffer_length = 0;
- } else {
- /* Using input stream in last iteration. When decoder switches to input
- stream it has less than 8 bits in accumulator, so it is safe to
- return unused accumulator bits there. */
- BrotliBitReaderUnload(br);
- *available_in = br->avail_in;
- *next_in = br->next_in;
- }
- break;
- }
- switch (s->state) {
- case BROTLI_STATE_UNINITED:
- /* Prepare to the first read. */
- if (!BrotliWarmupBitReader(br)) {
- result = BROTLI_DECODER_NEEDS_MORE_INPUT;
- break;
- }
- /* Decode window size. */
- result = DecodeWindowBits(s, br); /* Reads 1..8 bits. */
- if (result != BROTLI_DECODER_SUCCESS) {
- break;
- }
- if (s->large_window) {
- s->state = BROTLI_STATE_LARGE_WINDOW_BITS;
- break;
- }
- s->state = BROTLI_STATE_INITIALIZE;
- break;
-
- case BROTLI_STATE_LARGE_WINDOW_BITS:
- if (!BrotliSafeReadBits(br, 6, &s->window_bits)) {
- result = BROTLI_DECODER_NEEDS_MORE_INPUT;
- break;
- }
- if (s->window_bits < BROTLI_LARGE_MIN_WBITS ||
- s->window_bits > BROTLI_LARGE_MAX_WBITS) {
- result = BROTLI_FAILURE(BROTLI_DECODER_ERROR_FORMAT_WINDOW_BITS);
- break;
- }
- s->state = BROTLI_STATE_INITIALIZE;
- /* Fall through. */
-
- case BROTLI_STATE_INITIALIZE:
- BROTLI_LOG_UINT(s->window_bits);
- /* Maximum distance, see section 9.1. of the spec. */
- s->max_backward_distance = (1 << s->window_bits) - BROTLI_WINDOW_GAP;
-
- /* Allocate memory for both block_type_trees and block_len_trees. */
- s->block_type_trees = (HuffmanCode*)BROTLI_DECODER_ALLOC(s,
- sizeof(HuffmanCode) * 3 *
- (BROTLI_HUFFMAN_MAX_SIZE_258 + BROTLI_HUFFMAN_MAX_SIZE_26));
- if (s->block_type_trees == 0) {
- result = BROTLI_FAILURE(BROTLI_DECODER_ERROR_ALLOC_BLOCK_TYPE_TREES);
- break;
- }
- s->block_len_trees =
- s->block_type_trees + 3 * BROTLI_HUFFMAN_MAX_SIZE_258;
-
- s->state = BROTLI_STATE_METABLOCK_BEGIN;
- /* Fall through. */
-
- case BROTLI_STATE_METABLOCK_BEGIN:
- BrotliDecoderStateMetablockBegin(s);
- BROTLI_LOG_UINT(s->pos);
- s->state = BROTLI_STATE_METABLOCK_HEADER;
- /* Fall through. */
-
- case BROTLI_STATE_METABLOCK_HEADER:
- result = DecodeMetaBlockLength(s, br); /* Reads 2 - 31 bits. */
- if (result != BROTLI_DECODER_SUCCESS) {
- break;
- }
- BROTLI_LOG_UINT(s->is_last_metablock);
- BROTLI_LOG_UINT(s->meta_block_remaining_len);
- BROTLI_LOG_UINT(s->is_metadata);
- BROTLI_LOG_UINT(s->is_uncompressed);
- if (s->is_metadata || s->is_uncompressed) {
- if (!BrotliJumpToByteBoundary(br)) {
- result = BROTLI_FAILURE(BROTLI_DECODER_ERROR_FORMAT_PADDING_1);
- break;
- }
- }
- if (s->is_metadata) {
- s->state = BROTLI_STATE_METADATA;
- break;
- }
- if (s->meta_block_remaining_len == 0) {
- s->state = BROTLI_STATE_METABLOCK_DONE;
- break;
- }
- BrotliCalculateRingBufferSize(s);
- if (s->is_uncompressed) {
- s->state = BROTLI_STATE_UNCOMPRESSED;
- break;
- }
- s->loop_counter = 0;
- s->state = BROTLI_STATE_HUFFMAN_CODE_0;
- break;
-
- case BROTLI_STATE_UNCOMPRESSED: {
- result = CopyUncompressedBlockToOutput(
- available_out, next_out, total_out, s);
- if (result != BROTLI_DECODER_SUCCESS) {
- break;
- }
- s->state = BROTLI_STATE_METABLOCK_DONE;
- break;
- }
-
- case BROTLI_STATE_METADATA:
- for (; s->meta_block_remaining_len > 0; --s->meta_block_remaining_len) {
- uint32_t bits;
- /* Read one byte and ignore it. */
- if (!BrotliSafeReadBits(br, 8, &bits)) {
- result = BROTLI_DECODER_NEEDS_MORE_INPUT;
- break;
- }
- }
- if (result == BROTLI_DECODER_SUCCESS) {
- s->state = BROTLI_STATE_METABLOCK_DONE;
- }
- break;
-
- case BROTLI_STATE_HUFFMAN_CODE_0:
- if (s->loop_counter >= 3) {
- s->state = BROTLI_STATE_METABLOCK_HEADER_2;
- break;
- }
- /* Reads 1..11 bits. */
- result = DecodeVarLenUint8(s, br, &s->num_block_types[s->loop_counter]);
- if (result != BROTLI_DECODER_SUCCESS) {
- break;
- }
- s->num_block_types[s->loop_counter]++;
- BROTLI_LOG_UINT(s->num_block_types[s->loop_counter]);
- if (s->num_block_types[s->loop_counter] < 2) {
- s->loop_counter++;
- break;
- }
- s->state = BROTLI_STATE_HUFFMAN_CODE_1;
- /* Fall through. */
-
- case BROTLI_STATE_HUFFMAN_CODE_1: {
- uint32_t alphabet_size = s->num_block_types[s->loop_counter] + 2;
- int tree_offset = s->loop_counter * BROTLI_HUFFMAN_MAX_SIZE_258;
- result = ReadHuffmanCode(alphabet_size, alphabet_size,
- &s->block_type_trees[tree_offset], NULL, s);
- if (result != BROTLI_DECODER_SUCCESS) break;
- s->state = BROTLI_STATE_HUFFMAN_CODE_2;
- }
- /* Fall through. */
-
- case BROTLI_STATE_HUFFMAN_CODE_2: {
- uint32_t alphabet_size = BROTLI_NUM_BLOCK_LEN_SYMBOLS;
- int tree_offset = s->loop_counter * BROTLI_HUFFMAN_MAX_SIZE_26;
- result = ReadHuffmanCode(alphabet_size, alphabet_size,
- &s->block_len_trees[tree_offset], NULL, s);
- if (result != BROTLI_DECODER_SUCCESS) break;
- s->state = BROTLI_STATE_HUFFMAN_CODE_3;
- }
- /* Fall through. */
-
- case BROTLI_STATE_HUFFMAN_CODE_3: {
- int tree_offset = s->loop_counter * BROTLI_HUFFMAN_MAX_SIZE_26;
- if (!SafeReadBlockLength(s, &s->block_length[s->loop_counter],
- &s->block_len_trees[tree_offset], br)) {
- result = BROTLI_DECODER_NEEDS_MORE_INPUT;
- break;
- }
- BROTLI_LOG_UINT(s->block_length[s->loop_counter]);
- s->loop_counter++;
- s->state = BROTLI_STATE_HUFFMAN_CODE_0;
- break;
- }
-
- case BROTLI_STATE_METABLOCK_HEADER_2: {
- uint32_t bits;
- if (!BrotliSafeReadBits(br, 6, &bits)) {
- result = BROTLI_DECODER_NEEDS_MORE_INPUT;
- break;
- }
- s->distance_postfix_bits = bits & BitMask(2);
- bits >>= 2;
- s->num_direct_distance_codes = BROTLI_NUM_DISTANCE_SHORT_CODES +
- (bits << s->distance_postfix_bits);
- BROTLI_LOG_UINT(s->num_direct_distance_codes);
- BROTLI_LOG_UINT(s->distance_postfix_bits);
- s->distance_postfix_mask = (int)BitMask(s->distance_postfix_bits);
- s->context_modes =
- (uint8_t*)BROTLI_DECODER_ALLOC(s, (size_t)s->num_block_types[0]);
- if (s->context_modes == 0) {
- result = BROTLI_FAILURE(BROTLI_DECODER_ERROR_ALLOC_CONTEXT_MODES);
- break;
- }
- s->loop_counter = 0;
- s->state = BROTLI_STATE_CONTEXT_MODES;
- }
- /* Fall through. */
-
- case BROTLI_STATE_CONTEXT_MODES:
- result = ReadContextModes(s);
- if (result != BROTLI_DECODER_SUCCESS) {
- break;
- }
- s->state = BROTLI_STATE_CONTEXT_MAP_1;
- /* Fall through. */
-
- case BROTLI_STATE_CONTEXT_MAP_1:
- result = DecodeContextMap(
- s->num_block_types[0] << BROTLI_LITERAL_CONTEXT_BITS,
- &s->num_literal_htrees, &s->context_map, s);
- if (result != BROTLI_DECODER_SUCCESS) {
- break;
- }
- DetectTrivialLiteralBlockTypes(s);
- s->state = BROTLI_STATE_CONTEXT_MAP_2;
- /* Fall through. */
-
- case BROTLI_STATE_CONTEXT_MAP_2: {
- uint32_t num_direct_codes =
- s->num_direct_distance_codes - BROTLI_NUM_DISTANCE_SHORT_CODES;
- uint32_t num_distance_codes = BROTLI_DISTANCE_ALPHABET_SIZE(
- s->distance_postfix_bits, num_direct_codes,
- (s->large_window ? BROTLI_LARGE_MAX_DISTANCE_BITS :
- BROTLI_MAX_DISTANCE_BITS));
- uint32_t max_distance_symbol = (s->large_window ?
- BrotliMaxDistanceSymbol(
- num_direct_codes, s->distance_postfix_bits) :
- num_distance_codes);
- BROTLI_BOOL allocation_success = BROTLI_TRUE;
- result = DecodeContextMap(
- s->num_block_types[2] << BROTLI_DISTANCE_CONTEXT_BITS,
- &s->num_dist_htrees, &s->dist_context_map, s);
- if (result != BROTLI_DECODER_SUCCESS) {
- break;
- }
- allocation_success &= BrotliDecoderHuffmanTreeGroupInit(
- s, &s->literal_hgroup, BROTLI_NUM_LITERAL_SYMBOLS,
- BROTLI_NUM_LITERAL_SYMBOLS, s->num_literal_htrees);
- allocation_success &= BrotliDecoderHuffmanTreeGroupInit(
- s, &s->insert_copy_hgroup, BROTLI_NUM_COMMAND_SYMBOLS,
- BROTLI_NUM_COMMAND_SYMBOLS, s->num_block_types[1]);
- allocation_success &= BrotliDecoderHuffmanTreeGroupInit(
- s, &s->distance_hgroup, num_distance_codes,
- max_distance_symbol, s->num_dist_htrees);
- if (!allocation_success) {
- return SaveErrorCode(s,
- BROTLI_FAILURE(BROTLI_DECODER_ERROR_ALLOC_TREE_GROUPS));
- }
- s->loop_counter = 0;
- s->state = BROTLI_STATE_TREE_GROUP;
- }
- /* Fall through. */
-
- case BROTLI_STATE_TREE_GROUP: {
- HuffmanTreeGroup* hgroup = NULL;
- switch (s->loop_counter) {
- case 0: hgroup = &s->literal_hgroup; break;
- case 1: hgroup = &s->insert_copy_hgroup; break;
- case 2: hgroup = &s->distance_hgroup; break;
- default: return SaveErrorCode(s, BROTLI_FAILURE(
- BROTLI_DECODER_ERROR_UNREACHABLE));
- }
- result = HuffmanTreeGroupDecode(hgroup, s);
- if (result != BROTLI_DECODER_SUCCESS) break;
- s->loop_counter++;
- if (s->loop_counter >= 3) {
- PrepareLiteralDecoding(s);
- s->dist_context_map_slice = s->dist_context_map;
- s->htree_command = s->insert_copy_hgroup.htrees[0];
- if (!BrotliEnsureRingBuffer(s)) {
- result = BROTLI_FAILURE(BROTLI_DECODER_ERROR_ALLOC_RING_BUFFER_2);
- break;
- }
- s->state = BROTLI_STATE_COMMAND_BEGIN;
- }
- break;
- }
-
- case BROTLI_STATE_COMMAND_BEGIN:
- /* Fall through. */
- case BROTLI_STATE_COMMAND_INNER:
- /* Fall through. */
- case BROTLI_STATE_COMMAND_POST_DECODE_LITERALS:
- /* Fall through. */
- case BROTLI_STATE_COMMAND_POST_WRAP_COPY:
- result = ProcessCommands(s);
- if (result == BROTLI_DECODER_NEEDS_MORE_INPUT) {
- result = SafeProcessCommands(s);
- }
- break;
-
- case BROTLI_STATE_COMMAND_INNER_WRITE:
- /* Fall through. */
- case BROTLI_STATE_COMMAND_POST_WRITE_1:
- /* Fall through. */
- case BROTLI_STATE_COMMAND_POST_WRITE_2:
- result = WriteRingBuffer(
- s, available_out, next_out, total_out, BROTLI_FALSE);
- if (result != BROTLI_DECODER_SUCCESS) {
- break;
- }
- WrapRingBuffer(s);
- if (s->ringbuffer_size == 1 << s->window_bits) {
- s->max_distance = s->max_backward_distance;
- }
- if (s->state == BROTLI_STATE_COMMAND_POST_WRITE_1) {
- if (s->meta_block_remaining_len == 0) {
- /* Next metablock, if any. */
- s->state = BROTLI_STATE_METABLOCK_DONE;
- } else {
- s->state = BROTLI_STATE_COMMAND_BEGIN;
- }
- break;
- } else if (s->state == BROTLI_STATE_COMMAND_POST_WRITE_2) {
- s->state = BROTLI_STATE_COMMAND_POST_WRAP_COPY;
- } else { /* BROTLI_STATE_COMMAND_INNER_WRITE */
- if (s->loop_counter == 0) {
- if (s->meta_block_remaining_len == 0) {
- s->state = BROTLI_STATE_METABLOCK_DONE;
- } else {
- s->state = BROTLI_STATE_COMMAND_POST_DECODE_LITERALS;
- }
- break;
- }
- s->state = BROTLI_STATE_COMMAND_INNER;
- }
- break;
-
- case BROTLI_STATE_METABLOCK_DONE:
- if (s->meta_block_remaining_len < 0) {
- result = BROTLI_FAILURE(BROTLI_DECODER_ERROR_FORMAT_BLOCK_LENGTH_2);
- break;
- }
- BrotliDecoderStateCleanupAfterMetablock(s);
- if (!s->is_last_metablock) {
- s->state = BROTLI_STATE_METABLOCK_BEGIN;
- break;
- }
- if (!BrotliJumpToByteBoundary(br)) {
- result = BROTLI_FAILURE(BROTLI_DECODER_ERROR_FORMAT_PADDING_2);
- break;
- }
- if (s->buffer_length == 0) {
- BrotliBitReaderUnload(br);
- *available_in = br->avail_in;
- *next_in = br->next_in;
- }
- s->state = BROTLI_STATE_DONE;
- /* Fall through. */
-
- case BROTLI_STATE_DONE:
- if (s->ringbuffer != 0) {
- result = WriteRingBuffer(
- s, available_out, next_out, total_out, BROTLI_TRUE);
- if (result != BROTLI_DECODER_SUCCESS) {
- break;
- }
- }
- return SaveErrorCode(s, result);
- }
- }
- return SaveErrorCode(s, result);
-}
-
-BROTLI_BOOL BrotliDecoderHasMoreOutput(const BrotliDecoderState* s) {
- /* After unrecoverable error remaining output is considered nonsensical. */
- if ((int)s->error_code < 0) {
- return BROTLI_FALSE;
- }
- return TO_BROTLI_BOOL(
- s->ringbuffer != 0 && UnwrittenBytes(s, BROTLI_FALSE) != 0);
-}
-
-const uint8_t* BrotliDecoderTakeOutput(BrotliDecoderState* s, size_t* size) {
- uint8_t* result = 0;
- size_t available_out = *size ? *size : 1u << 24;
- size_t requested_out = available_out;
- BrotliDecoderErrorCode status;
- if ((s->ringbuffer == 0) || ((int)s->error_code < 0)) {
- *size = 0;
- return 0;
- }
- WrapRingBuffer(s);
- status = WriteRingBuffer(s, &available_out, &result, 0, BROTLI_TRUE);
- /* Either WriteRingBuffer returns those "success" codes... */
- if (status == BROTLI_DECODER_SUCCESS ||
- status == BROTLI_DECODER_NEEDS_MORE_OUTPUT) {
- *size = requested_out - available_out;
- } else {
- /* ... or stream is broken. Normally this should be caught by
- BrotliDecoderDecompressStream, this is just a safeguard. */
- if ((int)status < 0) SaveErrorCode(s, status);
- *size = 0;
- result = 0;
- }
- return result;
-}
-
-BROTLI_BOOL BrotliDecoderIsUsed(const BrotliDecoderState* s) {
- return TO_BROTLI_BOOL(s->state != BROTLI_STATE_UNINITED ||
- BrotliGetAvailableBits(&s->br) != 0);
-}
-
-BROTLI_BOOL BrotliDecoderIsFinished(const BrotliDecoderState* s) {
- return TO_BROTLI_BOOL(s->state == BROTLI_STATE_DONE) &&
- !BrotliDecoderHasMoreOutput(s);
-}
-
-BrotliDecoderErrorCode BrotliDecoderGetErrorCode(const BrotliDecoderState* s) {
- return (BrotliDecoderErrorCode)s->error_code;
-}
-
-const char* BrotliDecoderErrorString(BrotliDecoderErrorCode c) {
- switch (c) {
-#define BROTLI_ERROR_CODE_CASE_(PREFIX, NAME, CODE) \
- case BROTLI_DECODER ## PREFIX ## NAME: return #NAME;
-#define BROTLI_NOTHING_
- BROTLI_DECODER_ERROR_CODES_LIST(BROTLI_ERROR_CODE_CASE_, BROTLI_NOTHING_)
-#undef BROTLI_ERROR_CODE_CASE_
-#undef BROTLI_NOTHING_
- default: return "INVALID";
- }
-}
-
-uint32_t BrotliDecoderVersion() {
- return BROTLI_VERSION;
-}
-
-#if defined(__cplusplus) || defined(c_plusplus)
-} /* extern "C" */
-#endif
diff --git a/BaseTools/Source/C/BrotliCompress/dec/huffman.c b/BaseTools/Source/C/BrotliCompress/dec/huffman.c
deleted file mode 100644
index 4ad0dc6bd0eb..000000000000
--- a/BaseTools/Source/C/BrotliCompress/dec/huffman.c
+++ /dev/null
@@ -1,356 +0,0 @@
-/* Copyright 2013 Google Inc. All Rights Reserved.
-
- Distributed under MIT license.
- See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
-*/
-
-/* Utilities for building Huffman decoding tables. */
-
-#include "./huffman.h"
-
-#include <string.h> /* memcpy, memset */
-
-#include "../common/constants.h"
-#include "../common/platform.h"
-#include <brotli/types.h>
-
-#if defined(__cplusplus) || defined(c_plusplus)
-extern "C" {
-#endif
-
-#define BROTLI_REVERSE_BITS_MAX 8
-
-#if defined(BROTLI_RBIT)
-#define BROTLI_REVERSE_BITS_BASE \
- ((sizeof(brotli_reg_t) << 3) - BROTLI_REVERSE_BITS_MAX)
-#else
-#define BROTLI_REVERSE_BITS_BASE 0
-static uint8_t kReverseBits[1 << BROTLI_REVERSE_BITS_MAX] = {
- 0x00, 0x80, 0x40, 0xC0, 0x20, 0xA0, 0x60, 0xE0,
- 0x10, 0x90, 0x50, 0xD0, 0x30, 0xB0, 0x70, 0xF0,
- 0x08, 0x88, 0x48, 0xC8, 0x28, 0xA8, 0x68, 0xE8,
- 0x18, 0x98, 0x58, 0xD8, 0x38, 0xB8, 0x78, 0xF8,
- 0x04, 0x84, 0x44, 0xC4, 0x24, 0xA4, 0x64, 0xE4,
- 0x14, 0x94, 0x54, 0xD4, 0x34, 0xB4, 0x74, 0xF4,
- 0x0C, 0x8C, 0x4C, 0xCC, 0x2C, 0xAC, 0x6C, 0xEC,
- 0x1C, 0x9C, 0x5C, 0xDC, 0x3C, 0xBC, 0x7C, 0xFC,
- 0x02, 0x82, 0x42, 0xC2, 0x22, 0xA2, 0x62, 0xE2,
- 0x12, 0x92, 0x52, 0xD2, 0x32, 0xB2, 0x72, 0xF2,
- 0x0A, 0x8A, 0x4A, 0xCA, 0x2A, 0xAA, 0x6A, 0xEA,
- 0x1A, 0x9A, 0x5A, 0xDA, 0x3A, 0xBA, 0x7A, 0xFA,
- 0x06, 0x86, 0x46, 0xC6, 0x26, 0xA6, 0x66, 0xE6,
- 0x16, 0x96, 0x56, 0xD6, 0x36, 0xB6, 0x76, 0xF6,
- 0x0E, 0x8E, 0x4E, 0xCE, 0x2E, 0xAE, 0x6E, 0xEE,
- 0x1E, 0x9E, 0x5E, 0xDE, 0x3E, 0xBE, 0x7E, 0xFE,
- 0x01, 0x81, 0x41, 0xC1, 0x21, 0xA1, 0x61, 0xE1,
- 0x11, 0x91, 0x51, 0xD1, 0x31, 0xB1, 0x71, 0xF1,
- 0x09, 0x89, 0x49, 0xC9, 0x29, 0xA9, 0x69, 0xE9,
- 0x19, 0x99, 0x59, 0xD9, 0x39, 0xB9, 0x79, 0xF9,
- 0x05, 0x85, 0x45, 0xC5, 0x25, 0xA5, 0x65, 0xE5,
- 0x15, 0x95, 0x55, 0xD5, 0x35, 0xB5, 0x75, 0xF5,
- 0x0D, 0x8D, 0x4D, 0xCD, 0x2D, 0xAD, 0x6D, 0xED,
- 0x1D, 0x9D, 0x5D, 0xDD, 0x3D, 0xBD, 0x7D, 0xFD,
- 0x03, 0x83, 0x43, 0xC3, 0x23, 0xA3, 0x63, 0xE3,
- 0x13, 0x93, 0x53, 0xD3, 0x33, 0xB3, 0x73, 0xF3,
- 0x0B, 0x8B, 0x4B, 0xCB, 0x2B, 0xAB, 0x6B, 0xEB,
- 0x1B, 0x9B, 0x5B, 0xDB, 0x3B, 0xBB, 0x7B, 0xFB,
- 0x07, 0x87, 0x47, 0xC7, 0x27, 0xA7, 0x67, 0xE7,
- 0x17, 0x97, 0x57, 0xD7, 0x37, 0xB7, 0x77, 0xF7,
- 0x0F, 0x8F, 0x4F, 0xCF, 0x2F, 0xAF, 0x6F, 0xEF,
- 0x1F, 0x9F, 0x5F, 0xDF, 0x3F, 0xBF, 0x7F, 0xFF
-};
-#endif /* BROTLI_RBIT */
-
-#define BROTLI_REVERSE_BITS_LOWEST \
- ((brotli_reg_t)1 << (BROTLI_REVERSE_BITS_MAX - 1 + BROTLI_REVERSE_BITS_BASE))
-
-/* Returns reverse(num >> BROTLI_REVERSE_BITS_BASE, BROTLI_REVERSE_BITS_MAX),
- where reverse(value, len) is the bit-wise reversal of the len least
- significant bits of value. */
-static BROTLI_INLINE brotli_reg_t BrotliReverseBits(brotli_reg_t num) {
-#if defined(BROTLI_RBIT)
- return BROTLI_RBIT(num);
-#else
- return kReverseBits[num];
-#endif
-}
-
-/* Stores code in table[0], table[step], table[2*step], ..., table[end] */
-/* Assumes that end is an integer multiple of step */
-static BROTLI_INLINE void ReplicateValue(HuffmanCode* table,
- int step, int end,
- HuffmanCode code) {
- do {
- end -= step;
- table[end] = code;
- } while (end > 0);
-}
-
-/* Returns the table width of the next 2nd level table. |count| is the histogram
- of bit lengths for the remaining symbols, |len| is the code length of the
- next processed symbol. */
-static BROTLI_INLINE int NextTableBitSize(const uint16_t* const count,
- int len, int root_bits) {
- int left = 1 << (len - root_bits);
- while (len < BROTLI_HUFFMAN_MAX_CODE_LENGTH) {
- left -= count[len];
- if (left <= 0) break;
- ++len;
- left <<= 1;
- }
- return len - root_bits;
-}
-
-void BrotliBuildCodeLengthsHuffmanTable(HuffmanCode* table,
- const uint8_t* const code_lengths,
- uint16_t* count) {
- HuffmanCode code; /* current table entry */
- int symbol; /* symbol index in original or sorted table */
- brotli_reg_t key; /* prefix code */
- brotli_reg_t key_step; /* prefix code addend */
- int step; /* step size to replicate values in current table */
- int table_size; /* size of current table */
- int sorted[BROTLI_CODE_LENGTH_CODES]; /* symbols sorted by code length */
- /* offsets in sorted table for each length */
- int offset[BROTLI_HUFFMAN_MAX_CODE_LENGTH_CODE_LENGTH + 1];
- int bits;
- int bits_count;
- BROTLI_DCHECK(BROTLI_HUFFMAN_MAX_CODE_LENGTH_CODE_LENGTH <=
- BROTLI_REVERSE_BITS_MAX);
-
- /* Generate offsets into sorted symbol table by code length. */
- symbol = -1;
- bits = 1;
- BROTLI_REPEAT(BROTLI_HUFFMAN_MAX_CODE_LENGTH_CODE_LENGTH, {
- symbol += count[bits];
- offset[bits] = symbol;
- bits++;
- });
- /* Symbols with code length 0 are placed after all other symbols. */
- offset[0] = BROTLI_CODE_LENGTH_CODES - 1;
-
- /* Sort symbols by length, by symbol order within each length. */
- symbol = BROTLI_CODE_LENGTH_CODES;
- do {
- BROTLI_REPEAT(6, {
- symbol--;
- sorted[offset[code_lengths[symbol]]--] = symbol;
- });
- } while (symbol != 0);
-
- table_size = 1 << BROTLI_HUFFMAN_MAX_CODE_LENGTH_CODE_LENGTH;
-
- /* Special case: all symbols but one have 0 code length. */
- if (offset[0] == 0) {
- code.bits = 0;
- code.value = (uint16_t)sorted[0];
- for (key = 0; key < (brotli_reg_t)table_size; ++key) {
- table[key] = code;
- }
- return;
- }
-
- /* Fill in table. */
- key = 0;
- key_step = BROTLI_REVERSE_BITS_LOWEST;
- symbol = 0;
- bits = 1;
- step = 2;
- do {
- code.bits = (uint8_t)bits;
- for (bits_count = count[bits]; bits_count != 0; --bits_count) {
- code.value = (uint16_t)sorted[symbol++];
- ReplicateValue(&table[BrotliReverseBits(key)], step, table_size, code);
- key += key_step;
- }
- step <<= 1;
- key_step >>= 1;
- } while (++bits <= BROTLI_HUFFMAN_MAX_CODE_LENGTH_CODE_LENGTH);
-}
-
-uint32_t BrotliBuildHuffmanTable(HuffmanCode* root_table,
- int root_bits,
- const uint16_t* const symbol_lists,
- uint16_t* count) {
- HuffmanCode code; /* current table entry */
- HuffmanCode* table; /* next available space in table */
- int len; /* current code length */
- int symbol; /* symbol index in original or sorted table */
- brotli_reg_t key; /* prefix code */
- brotli_reg_t key_step; /* prefix code addend */
- brotli_reg_t sub_key; /* 2nd level table prefix code */
- brotli_reg_t sub_key_step; /* 2nd level table prefix code addend */
- int step; /* step size to replicate values in current table */
- int table_bits; /* key length of current table */
- int table_size; /* size of current table */
- int total_size; /* sum of root table size and 2nd level table sizes */
- int max_length = -1;
- int bits;
- int bits_count;
-
- BROTLI_DCHECK(root_bits <= BROTLI_REVERSE_BITS_MAX);
- BROTLI_DCHECK(BROTLI_HUFFMAN_MAX_CODE_LENGTH - root_bits <=
- BROTLI_REVERSE_BITS_MAX);
-
- while (symbol_lists[max_length] == 0xFFFF) max_length--;
- max_length += BROTLI_HUFFMAN_MAX_CODE_LENGTH + 1;
-
- table = root_table;
- table_bits = root_bits;
- table_size = 1 << table_bits;
- total_size = table_size;
-
- /* Fill in the root table. Reduce the table size to if possible,
- and create the repetitions by memcpy. */
- if (table_bits > max_length) {
- table_bits = max_length;
- table_size = 1 << table_bits;
- }
- key = 0;
- key_step = BROTLI_REVERSE_BITS_LOWEST;
- bits = 1;
- step = 2;
- do {
- code.bits = (uint8_t)bits;
- symbol = bits - (BROTLI_HUFFMAN_MAX_CODE_LENGTH + 1);
- for (bits_count = count[bits]; bits_count != 0; --bits_count) {
- symbol = symbol_lists[symbol];
- code.value = (uint16_t)symbol;
- ReplicateValue(&table[BrotliReverseBits(key)], step, table_size, code);
- key += key_step;
- }
- step <<= 1;
- key_step >>= 1;
- } while (++bits <= table_bits);
-
- /* If root_bits != table_bits then replicate to fill the remaining slots. */
- while (total_size != table_size) {
- memcpy(&table[table_size], &table[0],
- (size_t)table_size * sizeof(table[0]));
- table_size <<= 1;
- }
-
- /* Fill in 2nd level tables and add pointers to root table. */
- key_step = BROTLI_REVERSE_BITS_LOWEST >> (root_bits - 1);
- sub_key = (BROTLI_REVERSE_BITS_LOWEST << 1);
- sub_key_step = BROTLI_REVERSE_BITS_LOWEST;
- for (len = root_bits + 1, step = 2; len <= max_length; ++len) {
- symbol = len - (BROTLI_HUFFMAN_MAX_CODE_LENGTH + 1);
- for (; count[len] != 0; --count[len]) {
- if (sub_key == (BROTLI_REVERSE_BITS_LOWEST << 1U)) {
- table += table_size;
- table_bits = NextTableBitSize(count, len, root_bits);
- table_size = 1 << table_bits;
- total_size += table_size;
- sub_key = BrotliReverseBits(key);
- key += key_step;
- root_table[sub_key].bits = (uint8_t)(table_bits + root_bits);
- root_table[sub_key].value =
- (uint16_t)(((size_t)(table - root_table)) - sub_key);
- sub_key = 0;
- }
- code.bits = (uint8_t)(len - root_bits);
- symbol = symbol_lists[symbol];
- code.value = (uint16_t)symbol;
- ReplicateValue(
- &table[BrotliReverseBits(sub_key)], step, table_size, code);
- sub_key += sub_key_step;
- }
- step <<= 1;
- sub_key_step >>= 1;
- }
- return (uint32_t)total_size;
-}
-
-uint32_t BrotliBuildSimpleHuffmanTable(HuffmanCode* table,
- int root_bits,
- uint16_t* val,
- uint32_t num_symbols) {
- uint32_t table_size = 1;
- const uint32_t goal_size = 1U << root_bits;
- switch (num_symbols) {
- case 0:
- table[0].bits = 0;
- table[0].value = val[0];
- break;
- case 1:
- table[0].bits = 1;
- table[1].bits = 1;
- if (val[1] > val[0]) {
- table[0].value = val[0];
- table[1].value = val[1];
- } else {
- table[0].value = val[1];
- table[1].value = val[0];
- }
- table_size = 2;
- break;
- case 2:
- table[0].bits = 1;
- table[0].value = val[0];
- table[2].bits = 1;
- table[2].value = val[0];
- if (val[2] > val[1]) {
- table[1].value = val[1];
- table[3].value = val[2];
- } else {
- table[1].value = val[2];
- table[3].value = val[1];
- }
- table[1].bits = 2;
- table[3].bits = 2;
- table_size = 4;
- break;
- case 3: {
- int i, k;
- for (i = 0; i < 3; ++i) {
- for (k = i + 1; k < 4; ++k) {
- if (val[k] < val[i]) {
- uint16_t t = val[k];
- val[k] = val[i];
- val[i] = t;
- }
- }
- }
- for (i = 0; i < 4; ++i) {
- table[i].bits = 2;
- }
- table[0].value = val[0];
- table[2].value = val[1];
- table[1].value = val[2];
- table[3].value = val[3];
- table_size = 4;
- break;
- }
- case 4: {
- int i;
- if (val[3] < val[2]) {
- uint16_t t = val[3];
- val[3] = val[2];
- val[2] = t;
- }
- for (i = 0; i < 7; ++i) {
- table[i].value = val[0];
- table[i].bits = (uint8_t)(1 + (i & 1));
- }
- table[1].value = val[1];
- table[3].value = val[2];
- table[5].value = val[1];
- table[7].value = val[3];
- table[3].bits = 3;
- table[7].bits = 3;
- table_size = 8;
- break;
- }
- }
- while (table_size != goal_size) {
- memcpy(&table[table_size], &table[0],
- (size_t)table_size * sizeof(table[0]));
- table_size <<= 1;
- }
- return goal_size;
-}
-
-#if defined(__cplusplus) || defined(c_plusplus)
-} /* extern "C" */
-#endif
diff --git a/BaseTools/Source/C/BrotliCompress/dec/state.c b/BaseTools/Source/C/BrotliCompress/dec/state.c
deleted file mode 100644
index 88ecfb68b684..000000000000
--- a/BaseTools/Source/C/BrotliCompress/dec/state.c
+++ /dev/null
@@ -1,164 +0,0 @@
-/* Copyright 2015 Google Inc. All Rights Reserved.
-
- Distributed under MIT license.
- See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
-*/
-
-#include "./state.h"
-
-#include <stdlib.h> /* free, malloc */
-
-#include <brotli/types.h>
-#include "./huffman.h"
-
-#if defined(__cplusplus) || defined(c_plusplus)
-extern "C" {
-#endif
-
-BROTLI_BOOL BrotliDecoderStateInit(BrotliDecoderState* s,
- brotli_alloc_func alloc_func, brotli_free_func free_func, void* opaque) {
- if (!alloc_func) {
- s->alloc_func = BrotliDefaultAllocFunc;
- s->free_func = BrotliDefaultFreeFunc;
- s->memory_manager_opaque = 0;
- } else {
- s->alloc_func = alloc_func;
- s->free_func = free_func;
- s->memory_manager_opaque = opaque;
- }
-
- s->error_code = 0; /* BROTLI_DECODER_NO_ERROR */
-
- BrotliInitBitReader(&s->br);
- s->state = BROTLI_STATE_UNINITED;
- s->large_window = 0;
- s->substate_metablock_header = BROTLI_STATE_METABLOCK_HEADER_NONE;
- s->substate_tree_group = BROTLI_STATE_TREE_GROUP_NONE;
- s->substate_context_map = BROTLI_STATE_CONTEXT_MAP_NONE;
- s->substate_uncompressed = BROTLI_STATE_UNCOMPRESSED_NONE;
- s->substate_huffman = BROTLI_STATE_HUFFMAN_NONE;
- s->substate_decode_uint8 = BROTLI_STATE_DECODE_UINT8_NONE;
- s->substate_read_block_length = BROTLI_STATE_READ_BLOCK_LENGTH_NONE;
-
- s->buffer_length = 0;
- s->loop_counter = 0;
- s->pos = 0;
- s->rb_roundtrips = 0;
- s->partial_pos_out = 0;
-
- s->block_type_trees = NULL;
- s->block_len_trees = NULL;
- s->ringbuffer = NULL;
- s->ringbuffer_size = 0;
- s->new_ringbuffer_size = 0;
- s->ringbuffer_mask = 0;
-
- s->context_map = NULL;
- s->context_modes = NULL;
- s->dist_context_map = NULL;
- s->context_map_slice = NULL;
- s->dist_context_map_slice = NULL;
-
- s->sub_loop_counter = 0;
-
- s->literal_hgroup.codes = NULL;
- s->literal_hgroup.htrees = NULL;
- s->insert_copy_hgroup.codes = NULL;
- s->insert_copy_hgroup.htrees = NULL;
- s->distance_hgroup.codes = NULL;
- s->distance_hgroup.htrees = NULL;
-
- s->is_last_metablock = 0;
- s->is_uncompressed = 0;
- s->is_metadata = 0;
- s->should_wrap_ringbuffer = 0;
- s->canny_ringbuffer_allocation = 1;
-
- s->window_bits = 0;
- s->max_distance = 0;
- s->dist_rb[0] = 16;
- s->dist_rb[1] = 15;
- s->dist_rb[2] = 11;
- s->dist_rb[3] = 4;
- s->dist_rb_idx = 0;
- s->block_type_trees = NULL;
- s->block_len_trees = NULL;
-
- /* Make small negative indexes addressable. */
- s->symbol_lists = &s->symbols_lists_array[BROTLI_HUFFMAN_MAX_CODE_LENGTH + 1];
-
- s->mtf_upper_bound = 63;
-
- s->dictionary = BrotliGetDictionary();
- s->transforms = BrotliGetTransforms();
-
- return BROTLI_TRUE;
-}
-
-void BrotliDecoderStateMetablockBegin(BrotliDecoderState* s) {
- s->meta_block_remaining_len = 0;
- s->block_length[0] = 1U << 24;
- s->block_length[1] = 1U << 24;
- s->block_length[2] = 1U << 24;
- s->num_block_types[0] = 1;
- s->num_block_types[1] = 1;
- s->num_block_types[2] = 1;
- s->block_type_rb[0] = 1;
- s->block_type_rb[1] = 0;
- s->block_type_rb[2] = 1;
- s->block_type_rb[3] = 0;
- s->block_type_rb[4] = 1;
- s->block_type_rb[5] = 0;
- s->context_map = NULL;
- s->context_modes = NULL;
- s->dist_context_map = NULL;
- s->context_map_slice = NULL;
- s->literal_htree = NULL;
- s->dist_context_map_slice = NULL;
- s->dist_htree_index = 0;
- s->context_lookup = NULL;
- s->literal_hgroup.codes = NULL;
- s->literal_hgroup.htrees = NULL;
- s->insert_copy_hgroup.codes = NULL;
- s->insert_copy_hgroup.htrees = NULL;
- s->distance_hgroup.codes = NULL;
- s->distance_hgroup.htrees = NULL;
-}
-
-void BrotliDecoderStateCleanupAfterMetablock(BrotliDecoderState* s) {
- BROTLI_DECODER_FREE(s, s->context_modes);
- BROTLI_DECODER_FREE(s, s->context_map);
- BROTLI_DECODER_FREE(s, s->dist_context_map);
- BROTLI_DECODER_FREE(s, s->literal_hgroup.htrees);
- BROTLI_DECODER_FREE(s, s->insert_copy_hgroup.htrees);
- BROTLI_DECODER_FREE(s, s->distance_hgroup.htrees);
-}
-
-void BrotliDecoderStateCleanup(BrotliDecoderState* s) {
- BrotliDecoderStateCleanupAfterMetablock(s);
-
- BROTLI_DECODER_FREE(s, s->ringbuffer);
- BROTLI_DECODER_FREE(s, s->block_type_trees);
-}
-
-BROTLI_BOOL BrotliDecoderHuffmanTreeGroupInit(BrotliDecoderState* s,
- HuffmanTreeGroup* group, uint32_t alphabet_size, uint32_t max_symbol,
- uint32_t ntrees) {
- /* Pack two allocations into one */
- const size_t max_table_size = kMaxHuffmanTableSize[(alphabet_size + 31) >> 5];
- const size_t code_size = sizeof(HuffmanCode) * ntrees * max_table_size;
- const size_t htree_size = sizeof(HuffmanCode*) * ntrees;
- /* Pointer alignment is, hopefully, wider than sizeof(HuffmanCode). */
- HuffmanCode** p = (HuffmanCode**)BROTLI_DECODER_ALLOC(s,
- code_size + htree_size);
- group->alphabet_size = (uint16_t)alphabet_size;
- group->max_symbol = (uint16_t)max_symbol;
- group->num_htrees = (uint16_t)ntrees;
- group->htrees = p;
- group->codes = (HuffmanCode*)(&p[ntrees]);
- return !!p;
-}
-
-#if defined(__cplusplus) || defined(c_plusplus)
-} /* extern "C" */
-#endif
diff --git a/BaseTools/Source/C/BrotliCompress/enc/backward_references.c b/BaseTools/Source/C/BrotliCompress/enc/backward_references.c
deleted file mode 100644
index d14679abcddc..000000000000
--- a/BaseTools/Source/C/BrotliCompress/enc/backward_references.c
+++ /dev/null
@@ -1,144 +0,0 @@
-/* Copyright 2013 Google Inc. All Rights Reserved.
-
- Distributed under MIT license.
- See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
-*/
-
-/* Function to find backward reference copies. */
-
-#include "./backward_references.h"
-
-#include "../common/constants.h"
-#include "../common/dictionary.h"
-#include "../common/platform.h"
-#include <brotli/types.h>
-#include "./command.h"
-#include "./dictionary_hash.h"
-#include "./memory.h"
-#include "./quality.h"
-
-#if defined(__cplusplus) || defined(c_plusplus)
-extern "C" {
-#endif
-
-static BROTLI_INLINE size_t ComputeDistanceCode(size_t distance,
- size_t max_distance,
- const int* dist_cache) {
- if (distance <= max_distance) {
- size_t distance_plus_3 = distance + 3;
- size_t offset0 = distance_plus_3 - (size_t)dist_cache[0];
- size_t offset1 = distance_plus_3 - (size_t)dist_cache[1];
- if (distance == (size_t)dist_cache[0]) {
- return 0;
- } else if (distance == (size_t)dist_cache[1]) {
- return 1;
- } else if (offset0 < 7) {
- return (0x9750468 >> (4 * offset0)) & 0xF;
- } else if (offset1 < 7) {
- return (0xFDB1ACE >> (4 * offset1)) & 0xF;
- } else if (distance == (size_t)dist_cache[2]) {
- return 2;
- } else if (distance == (size_t)dist_cache[3]) {
- return 3;
- }
- }
- return distance + BROTLI_NUM_DISTANCE_SHORT_CODES - 1;
-}
-
-#define EXPAND_CAT(a, b) CAT(a, b)
-#define CAT(a, b) a ## b
-#define FN(X) EXPAND_CAT(X, HASHER())
-#define EXPORT_FN(X) EXPAND_CAT(X, EXPAND_CAT(PREFIX(), HASHER()))
-
-#define PREFIX() N
-
-#define HASHER() H2
-/* NOLINTNEXTLINE(build/include) */
-#include "./backward_references_inc.h"
-#undef HASHER
-
-#define HASHER() H3
-/* NOLINTNEXTLINE(build/include) */
-#include "./backward_references_inc.h"
-#undef HASHER
-
-#define HASHER() H4
-/* NOLINTNEXTLINE(build/include) */
-#include "./backward_references_inc.h"
-#undef HASHER
-
-#define HASHER() H5
-/* NOLINTNEXTLINE(build/include) */
-#include "./backward_references_inc.h"
-#undef HASHER
-
-#define HASHER() H6
-/* NOLINTNEXTLINE(build/include) */
-#include "./backward_references_inc.h"
-#undef HASHER
-
-#define HASHER() H40
-/* NOLINTNEXTLINE(build/include) */
-#include "./backward_references_inc.h"
-#undef HASHER
-
-#define HASHER() H41
-/* NOLINTNEXTLINE(build/include) */
-#include "./backward_references_inc.h"
-#undef HASHER
-
-#define HASHER() H42
-/* NOLINTNEXTLINE(build/include) */
-#include "./backward_references_inc.h"
-#undef HASHER
-
-#define HASHER() H54
-/* NOLINTNEXTLINE(build/include) */
-#include "./backward_references_inc.h"
-#undef HASHER
-
-#define HASHER() H35
-/* NOLINTNEXTLINE(build/include) */
-#include "./backward_references_inc.h"
-#undef HASHER
-
-#define HASHER() H55
-/* NOLINTNEXTLINE(build/include) */
-#include "./backward_references_inc.h"
-#undef HASHER
-
-#define HASHER() H65
-/* NOLINTNEXTLINE(build/include) */
-#include "./backward_references_inc.h"
-#undef HASHER
-
-#undef PREFIX
-
-#undef EXPORT_FN
-#undef FN
-#undef CAT
-#undef EXPAND_CAT
-
-void BrotliCreateBackwardReferences(
- size_t num_bytes, size_t position, const uint8_t* ringbuffer,
- size_t ringbuffer_mask, const BrotliEncoderParams* params,
- HasherHandle hasher, int* dist_cache, size_t* last_insert_len,
- Command* commands, size_t* num_commands, size_t* num_literals) {
- switch (params->hasher.type) {
-#define CASE_(N) \
- case N: \
- CreateBackwardReferencesNH ## N( \
- num_bytes, position, ringbuffer, \
- ringbuffer_mask, params, hasher, dist_cache, \
- last_insert_len, commands, num_commands, num_literals); \
- return;
- FOR_GENERIC_HASHERS(CASE_)
-#undef CASE_
- default:
- break;
- }
-}
-
-#if defined(__cplusplus) || defined(c_plusplus)
-} /* extern "C" */
-#endif
diff --git a/BaseTools/Source/C/BrotliCompress/enc/backward_references_hq.c b/BaseTools/Source/C/BrotliCompress/enc/backward_references_hq.c
deleted file mode 100644
index 89320335ea32..000000000000
--- a/BaseTools/Source/C/BrotliCompress/enc/backward_references_hq.c
+++ /dev/null
@@ -1,830 +0,0 @@
-/* Copyright 2013 Google Inc. All Rights Reserved.
-
- Distributed under MIT license.
- See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
-*/
-
-/* Function to find backward reference copies. */
-
-#include "./backward_references_hq.h"
-
-#include <string.h> /* memcpy, memset */
-
-#include "../common/constants.h"
-#include "../common/platform.h"
-#include <brotli/types.h>
-#include "./command.h"
-#include "./fast_log.h"
-#include "./find_match_length.h"
-#include "./literal_cost.h"
-#include "./memory.h"
-#include "./params.h"
-#include "./prefix.h"
-#include "./quality.h"
-
-#if defined(__cplusplus) || defined(c_plusplus)
-extern "C" {
-#endif
-
-#define BROTLI_MAX_EFFECTIVE_DISTANCE_ALPHABET_SIZE 544
-
-static const float kInfinity = 1.7e38f; /* ~= 2 ^ 127 */
-
-static const uint32_t kDistanceCacheIndex[] = {
- 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1,
-};
-static const int kDistanceCacheOffset[] = {
- 0, 0, 0, 0, -1, 1, -2, 2, -3, 3, -1, 1, -2, 2, -3, 3
-};
-
-void BrotliInitZopfliNodes(ZopfliNode* array, size_t length) {
- ZopfliNode stub;
- size_t i;
- stub.length = 1;
- stub.distance = 0;
- stub.dcode_insert_length = 0;
- stub.u.cost = kInfinity;
- for (i = 0; i < length; ++i) array[i] = stub;
-}
-
-static BROTLI_INLINE uint32_t ZopfliNodeCopyLength(const ZopfliNode* self) {
- return self->length & 0x1FFFFFF;
-}
-
-static BROTLI_INLINE uint32_t ZopfliNodeLengthCode(const ZopfliNode* self) {
- const uint32_t modifier = self->length >> 25;
- return ZopfliNodeCopyLength(self) + 9u - modifier;
-}
-
-static BROTLI_INLINE uint32_t ZopfliNodeCopyDistance(const ZopfliNode* self) {
- return self->distance;
-}
-
-static BROTLI_INLINE uint32_t ZopfliNodeDistanceCode(const ZopfliNode* self) {
- const uint32_t short_code = self->dcode_insert_length >> 27;
- return short_code == 0 ?
- ZopfliNodeCopyDistance(self) + BROTLI_NUM_DISTANCE_SHORT_CODES - 1 :
- short_code - 1;
-}
-
-static BROTLI_INLINE uint32_t ZopfliNodeCommandLength(const ZopfliNode* self) {
- return ZopfliNodeCopyLength(self) + (self->dcode_insert_length & 0x7FFFFFF);
-}
-
-/* Histogram based cost model for zopflification. */
-typedef struct ZopfliCostModel {
- /* The insert and copy length symbols. */
- float cost_cmd_[BROTLI_NUM_COMMAND_SYMBOLS];
- float* cost_dist_;
- uint32_t distance_histogram_size;
- /* Cumulative costs of literals per position in the stream. */
- float* literal_costs_;
- float min_cost_cmd_;
- size_t num_bytes_;
-} ZopfliCostModel;
-
-static void InitZopfliCostModel(
- MemoryManager* m, ZopfliCostModel* self, const BrotliDistanceParams* dist,
- size_t num_bytes) {
- uint32_t distance_histogram_size = dist->alphabet_size;
- if (distance_histogram_size > BROTLI_MAX_EFFECTIVE_DISTANCE_ALPHABET_SIZE) {
- distance_histogram_size = BROTLI_MAX_EFFECTIVE_DISTANCE_ALPHABET_SIZE;
- }
- self->num_bytes_ = num_bytes;
- self->literal_costs_ = BROTLI_ALLOC(m, float, num_bytes + 2);
- self->cost_dist_ = BROTLI_ALLOC(m, float, dist->alphabet_size);
- self->distance_histogram_size = distance_histogram_size;
- if (BROTLI_IS_OOM(m)) return;
-}
-
-static void CleanupZopfliCostModel(MemoryManager* m, ZopfliCostModel* self) {
- BROTLI_FREE(m, self->literal_costs_);
- BROTLI_FREE(m, self->cost_dist_);
-}
-
-static void SetCost(const uint32_t* histogram, size_t histogram_size,
- BROTLI_BOOL literal_histogram, float* cost) {
- size_t sum = 0;
- size_t missing_symbol_sum;
- float log2sum;
- float missing_symbol_cost;
- size_t i;
- for (i = 0; i < histogram_size; i++) {
- sum += histogram[i];
- }
- log2sum = (float)FastLog2(sum);
- missing_symbol_sum = sum;
- if (!literal_histogram) {
- for (i = 0; i < histogram_size; i++) {
- if (histogram[i] == 0) missing_symbol_sum++;
- }
- }
- missing_symbol_cost = (float)FastLog2(missing_symbol_sum) + 2;
- for (i = 0; i < histogram_size; i++) {
- if (histogram[i] == 0) {
- cost[i] = missing_symbol_cost;
- continue;
- }
-
- /* Shannon bits for this symbol. */
- cost[i] = log2sum - (float)FastLog2(histogram[i]);
-
- /* Cannot be coded with less than 1 bit */
- if (cost[i] < 1) cost[i] = 1;
- }
-}
-
-static void ZopfliCostModelSetFromCommands(ZopfliCostModel* self,
- size_t position,
- const uint8_t* ringbuffer,
- size_t ringbuffer_mask,
- const Command* commands,
- size_t num_commands,
- size_t last_insert_len) {
- uint32_t histogram_literal[BROTLI_NUM_LITERAL_SYMBOLS];
- uint32_t histogram_cmd[BROTLI_NUM_COMMAND_SYMBOLS];
- uint32_t histogram_dist[BROTLI_MAX_EFFECTIVE_DISTANCE_ALPHABET_SIZE];
- float cost_literal[BROTLI_NUM_LITERAL_SYMBOLS];
- size_t pos = position - last_insert_len;
- float min_cost_cmd = kInfinity;
- size_t i;
- float* cost_cmd = self->cost_cmd_;
-
- memset(histogram_literal, 0, sizeof(histogram_literal));
- memset(histogram_cmd, 0, sizeof(histogram_cmd));
- memset(histogram_dist, 0, sizeof(histogram_dist));
-
- for (i = 0; i < num_commands; i++) {
- size_t inslength = commands[i].insert_len_;
- size_t copylength = CommandCopyLen(&commands[i]);
- size_t distcode = commands[i].dist_prefix_ & 0x3FF;
- size_t cmdcode = commands[i].cmd_prefix_;
- size_t j;
-
- histogram_cmd[cmdcode]++;
- if (cmdcode >= 128) histogram_dist[distcode]++;
-
- for (j = 0; j < inslength; j++) {
- histogram_literal[ringbuffer[(pos + j) & ringbuffer_mask]]++;
- }
-
- pos += inslength + copylength;
- }
-
- SetCost(histogram_literal, BROTLI_NUM_LITERAL_SYMBOLS, BROTLI_TRUE,
- cost_literal);
- SetCost(histogram_cmd, BROTLI_NUM_COMMAND_SYMBOLS, BROTLI_FALSE,
- cost_cmd);
- SetCost(histogram_dist, self->distance_histogram_size, BROTLI_FALSE,
- self->cost_dist_);
-
- for (i = 0; i < BROTLI_NUM_COMMAND_SYMBOLS; ++i) {
- min_cost_cmd = BROTLI_MIN(float, min_cost_cmd, cost_cmd[i]);
- }
- self->min_cost_cmd_ = min_cost_cmd;
-
- {
- float* literal_costs = self->literal_costs_;
- float literal_carry = 0.0;
- size_t num_bytes = self->num_bytes_;
- literal_costs[0] = 0.0;
- for (i = 0; i < num_bytes; ++i) {
- literal_carry +=
- cost_literal[ringbuffer[(position + i) & ringbuffer_mask]];
- literal_costs[i + 1] = literal_costs[i] + literal_carry;
- literal_carry -= literal_costs[i + 1] - literal_costs[i];
- }
- }
-}
-
-static void ZopfliCostModelSetFromLiteralCosts(ZopfliCostModel* self,
- size_t position,
- const uint8_t* ringbuffer,
- size_t ringbuffer_mask) {
- float* literal_costs = self->literal_costs_;
- float literal_carry = 0.0;
- float* cost_dist = self->cost_dist_;
- float* cost_cmd = self->cost_cmd_;
- size_t num_bytes = self->num_bytes_;
- size_t i;
- BrotliEstimateBitCostsForLiterals(position, num_bytes, ringbuffer_mask,
- ringbuffer, &literal_costs[1]);
- literal_costs[0] = 0.0;
- for (i = 0; i < num_bytes; ++i) {
- literal_carry += literal_costs[i + 1];
- literal_costs[i + 1] = literal_costs[i] + literal_carry;
- literal_carry -= literal_costs[i + 1] - literal_costs[i];
- }
- for (i = 0; i < BROTLI_NUM_COMMAND_SYMBOLS; ++i) {
- cost_cmd[i] = (float)FastLog2(11 + (uint32_t)i);
- }
- for (i = 0; i < self->distance_histogram_size; ++i) {
- cost_dist[i] = (float)FastLog2(20 + (uint32_t)i);
- }
- self->min_cost_cmd_ = (float)FastLog2(11);
-}
-
-static BROTLI_INLINE float ZopfliCostModelGetCommandCost(
- const ZopfliCostModel* self, uint16_t cmdcode) {
- return self->cost_cmd_[cmdcode];
-}
-
-static BROTLI_INLINE float ZopfliCostModelGetDistanceCost(
- const ZopfliCostModel* self, size_t distcode) {
- return self->cost_dist_[distcode];
-}
-
-static BROTLI_INLINE float ZopfliCostModelGetLiteralCosts(
- const ZopfliCostModel* self, size_t from, size_t to) {
- return self->literal_costs_[to] - self->literal_costs_[from];
-}
-
-static BROTLI_INLINE float ZopfliCostModelGetMinCostCmd(
- const ZopfliCostModel* self) {
- return self->min_cost_cmd_;
-}
-
-/* REQUIRES: len >= 2, start_pos <= pos */
-/* REQUIRES: cost < kInfinity, nodes[start_pos].cost < kInfinity */
-/* Maintains the "ZopfliNode array invariant". */
-static BROTLI_INLINE void UpdateZopfliNode(ZopfliNode* nodes, size_t pos,
- size_t start_pos, size_t len, size_t len_code, size_t dist,
- size_t short_code, float cost) {
- ZopfliNode* next = &nodes[pos + len];
- next->length = (uint32_t)(len | ((len + 9u - len_code) << 25));
- next->distance = (uint32_t)dist;
- next->dcode_insert_length = (uint32_t)(
- (short_code << 27) | (pos - start_pos));
- next->u.cost = cost;
-}
-
-typedef struct PosData {
- size_t pos;
- int distance_cache[4];
- float costdiff;
- float cost;
-} PosData;
-
-/* Maintains the smallest 8 cost difference together with their positions */
-typedef struct StartPosQueue {
- PosData q_[8];
- size_t idx_;
-} StartPosQueue;
-
-static BROTLI_INLINE void InitStartPosQueue(StartPosQueue* self) {
- self->idx_ = 0;
-}
-
-static size_t StartPosQueueSize(const StartPosQueue* self) {
- return BROTLI_MIN(size_t, self->idx_, 8);
-}
-
-static void StartPosQueuePush(StartPosQueue* self, const PosData* posdata) {
- size_t offset = ~(self->idx_++) & 7;
- size_t len = StartPosQueueSize(self);
- size_t i;
- PosData* q = self->q_;
- q[offset] = *posdata;
- /* Restore the sorted order. In the list of |len| items at most |len - 1|
- adjacent element comparisons / swaps are required. */
- for (i = 1; i < len; ++i) {
- if (q[offset & 7].costdiff > q[(offset + 1) & 7].costdiff) {
- BROTLI_SWAP(PosData, q, offset & 7, (offset + 1) & 7);
- }
- ++offset;
- }
-}
-
-static const PosData* StartPosQueueAt(const StartPosQueue* self, size_t k) {
- return &self->q_[(k - self->idx_) & 7];
-}
-
-/* Returns the minimum possible copy length that can improve the cost of any */
-/* future position. */
-static size_t ComputeMinimumCopyLength(const float start_cost,
- const ZopfliNode* nodes,
- const size_t num_bytes,
- const size_t pos) {
- /* Compute the minimum possible cost of reaching any future position. */
- float min_cost = start_cost;
- size_t len = 2;
- size_t next_len_bucket = 4;
- size_t next_len_offset = 10;
- while (pos + len <= num_bytes && nodes[pos + len].u.cost <= min_cost) {
- /* We already reached (pos + len) with no more cost than the minimum
- possible cost of reaching anything from this pos, so there is no point in
- looking for lengths <= len. */
- ++len;
- if (len == next_len_offset) {
- /* We reached the next copy length code bucket, so we add one more
- extra bit to the minimum cost. */
- min_cost += 1.0f;
- next_len_offset += next_len_bucket;
- next_len_bucket *= 2;
- }
- }
- return len;
-}
-
-/* REQUIRES: nodes[pos].cost < kInfinity
- REQUIRES: nodes[0..pos] satisfies that "ZopfliNode array invariant". */
-static uint32_t ComputeDistanceShortcut(const size_t block_start,
- const size_t pos,
- const size_t max_backward,
- const size_t gap,
- const ZopfliNode* nodes) {
- const size_t clen = ZopfliNodeCopyLength(&nodes[pos]);
- const size_t ilen = nodes[pos].dcode_insert_length & 0x7FFFFFF;
- const size_t dist = ZopfliNodeCopyDistance(&nodes[pos]);
- /* Since |block_start + pos| is the end position of the command, the copy part
- starts from |block_start + pos - clen|. Distances that are greater than
- this or greater than |max_backward| are static dictionary references, and
- do not update the last distances. Also distance code 0 (last distance)
- does not update the last distances. */
- if (pos == 0) {
- return 0;
- } else if (dist + clen <= block_start + pos + gap &&
- dist <= max_backward + gap &&
- ZopfliNodeDistanceCode(&nodes[pos]) > 0) {
- return (uint32_t)pos;
- } else {
- return nodes[pos - clen - ilen].u.shortcut;
- }
-}
-
-/* Fills in dist_cache[0..3] with the last four distances (as defined by
- Section 4. of the Spec) that would be used at (block_start + pos) if we
- used the shortest path of commands from block_start, computed from
- nodes[0..pos]. The last four distances at block_start are in
- starting_dist_cache[0..3].
- REQUIRES: nodes[pos].cost < kInfinity
- REQUIRES: nodes[0..pos] satisfies that "ZopfliNode array invariant". */
-static void ComputeDistanceCache(const size_t pos,
- const int* starting_dist_cache,
- const ZopfliNode* nodes,
- int* dist_cache) {
- int idx = 0;
- size_t p = nodes[pos].u.shortcut;
- while (idx < 4 && p > 0) {
- const size_t ilen = nodes[p].dcode_insert_length & 0x7FFFFFF;
- const size_t clen = ZopfliNodeCopyLength(&nodes[p]);
- const size_t dist = ZopfliNodeCopyDistance(&nodes[p]);
- dist_cache[idx++] = (int)dist;
- /* Because of prerequisite, p >= clen + ilen >= 2. */
- p = nodes[p - clen - ilen].u.shortcut;
- }
- for (; idx < 4; ++idx) {
- dist_cache[idx] = *starting_dist_cache++;
- }
-}
-
-/* Maintains "ZopfliNode array invariant" and pushes node to the queue, if it
- is eligible. */
-static void EvaluateNode(
- const size_t block_start, const size_t pos, const size_t max_backward_limit,
- const size_t gap, const int* starting_dist_cache,
- const ZopfliCostModel* model, StartPosQueue* queue, ZopfliNode* nodes) {
- /* Save cost, because ComputeDistanceCache invalidates it. */
- float node_cost = nodes[pos].u.cost;
- nodes[pos].u.shortcut = ComputeDistanceShortcut(
- block_start, pos, max_backward_limit, gap, nodes);
- if (node_cost <= ZopfliCostModelGetLiteralCosts(model, 0, pos)) {
- PosData posdata;
- posdata.pos = pos;
- posdata.cost = node_cost;
- posdata.costdiff = node_cost -
- ZopfliCostModelGetLiteralCosts(model, 0, pos);
- ComputeDistanceCache(
- pos, starting_dist_cache, nodes, posdata.distance_cache);
- StartPosQueuePush(queue, &posdata);
- }
-}
-
-/* Returns longest copy length. */
-static size_t UpdateNodes(
- const size_t num_bytes, const size_t block_start, const size_t pos,
- const uint8_t* ringbuffer, const size_t ringbuffer_mask,
- const BrotliEncoderParams* params, const size_t max_backward_limit,
- const int* starting_dist_cache, const size_t num_matches,
- const BackwardMatch* matches, const ZopfliCostModel* model,
- StartPosQueue* queue, ZopfliNode* nodes) {
- const size_t cur_ix = block_start + pos;
- const size_t cur_ix_masked = cur_ix & ringbuffer_mask;
- const size_t max_distance = BROTLI_MIN(size_t, cur_ix, max_backward_limit);
- const size_t max_len = num_bytes - pos;
- const size_t max_zopfli_len = MaxZopfliLen(params);
- const size_t max_iters = MaxZopfliCandidates(params);
- size_t min_len;
- size_t result = 0;
- size_t k;
- size_t gap = 0;
-
- EvaluateNode(block_start, pos, max_backward_limit, gap, starting_dist_cache,
- model, queue, nodes);
-
- {
- const PosData* posdata = StartPosQueueAt(queue, 0);
- float min_cost = (posdata->cost + ZopfliCostModelGetMinCostCmd(model) +
- ZopfliCostModelGetLiteralCosts(model, posdata->pos, pos));
- min_len = ComputeMinimumCopyLength(min_cost, nodes, num_bytes, pos);
- }
-
- /* Go over the command starting positions in order of increasing cost
- difference. */
- for (k = 0; k < max_iters && k < StartPosQueueSize(queue); ++k) {
- const PosData* posdata = StartPosQueueAt(queue, k);
- const size_t start = posdata->pos;
- const uint16_t inscode = GetInsertLengthCode(pos - start);
- const float start_costdiff = posdata->costdiff;
- const float base_cost = start_costdiff + (float)GetInsertExtra(inscode) +
- ZopfliCostModelGetLiteralCosts(model, 0, pos);
-
- /* Look for last distance matches using the distance cache from this
- starting position. */
- size_t best_len = min_len - 1;
- size_t j = 0;
- for (; j < BROTLI_NUM_DISTANCE_SHORT_CODES && best_len < max_len; ++j) {
- const size_t idx = kDistanceCacheIndex[j];
- const size_t backward =
- (size_t)(posdata->distance_cache[idx] + kDistanceCacheOffset[j]);
- size_t prev_ix = cur_ix - backward;
- size_t len = 0;
- uint8_t continuation = ringbuffer[cur_ix_masked + best_len];
- if (cur_ix_masked + best_len > ringbuffer_mask) {
- break;
- }
- if (BROTLI_PREDICT_FALSE(backward > max_distance + gap)) {
- continue;
- }
- if (backward <= max_distance) {
- if (prev_ix >= cur_ix) {
- continue;
- }
-
- prev_ix &= ringbuffer_mask;
- if (prev_ix + best_len > ringbuffer_mask ||
- continuation != ringbuffer[prev_ix + best_len]) {
- continue;
- }
- len = FindMatchLengthWithLimit(&ringbuffer[prev_ix],
- &ringbuffer[cur_ix_masked],
- max_len);
- } else {
- continue;
- }
- {
- const float dist_cost = base_cost +
- ZopfliCostModelGetDistanceCost(model, j);
- size_t l;
- for (l = best_len + 1; l <= len; ++l) {
- const uint16_t copycode = GetCopyLengthCode(l);
- const uint16_t cmdcode =
- CombineLengthCodes(inscode, copycode, j == 0);
- const float cost = (cmdcode < 128 ? base_cost : dist_cost) +
- (float)GetCopyExtra(copycode) +
- ZopfliCostModelGetCommandCost(model, cmdcode);
- if (cost < nodes[pos + l].u.cost) {
- UpdateZopfliNode(nodes, pos, start, l, l, backward, j + 1, cost);
- result = BROTLI_MAX(size_t, result, l);
- }
- best_len = l;
- }
- }
- }
-
- /* At higher iterations look only for new last distance matches, since
- looking only for new command start positions with the same distances
- does not help much. */
- if (k >= 2) continue;
-
- {
- /* Loop through all possible copy lengths at this position. */
- size_t len = min_len;
- for (j = 0; j < num_matches; ++j) {
- BackwardMatch match = matches[j];
- size_t dist = match.distance;
- BROTLI_BOOL is_dictionary_match =
- TO_BROTLI_BOOL(dist > max_distance + gap);
- /* We already tried all possible last distance matches, so we can use
- normal distance code here. */
- size_t dist_code = dist + BROTLI_NUM_DISTANCE_SHORT_CODES - 1;
- uint16_t dist_symbol;
- uint32_t distextra;
- uint32_t distnumextra;
- float dist_cost;
- size_t max_match_len;
- PrefixEncodeCopyDistance(
- dist_code, params->dist.num_direct_distance_codes,
- params->dist.distance_postfix_bits, &dist_symbol, &distextra);
- distnumextra = dist_symbol >> 10;
- dist_cost = base_cost + (float)distnumextra +
- ZopfliCostModelGetDistanceCost(model, dist_symbol & 0x3FF);
-
- /* Try all copy lengths up until the maximum copy length corresponding
- to this distance. If the distance refers to the static dictionary, or
- the maximum length is long enough, try only one maximum length. */
- max_match_len = BackwardMatchLength(&match);
- if (len < max_match_len &&
- (is_dictionary_match || max_match_len > max_zopfli_len)) {
- len = max_match_len;
- }
- for (; len <= max_match_len; ++len) {
- const size_t len_code =
- is_dictionary_match ? BackwardMatchLengthCode(&match) : len;
- const uint16_t copycode = GetCopyLengthCode(len_code);
- const uint16_t cmdcode = CombineLengthCodes(inscode, copycode, 0);
- const float cost = dist_cost + (float)GetCopyExtra(copycode) +
- ZopfliCostModelGetCommandCost(model, cmdcode);
- if (cost < nodes[pos + len].u.cost) {
- UpdateZopfliNode(nodes, pos, start, len, len_code, dist, 0, cost);
- result = BROTLI_MAX(size_t, result, len);
- }
- }
- }
- }
- }
- return result;
-}
-
-static size_t ComputeShortestPathFromNodes(size_t num_bytes,
- ZopfliNode* nodes) {
- size_t index = num_bytes;
- size_t num_commands = 0;
- while ((nodes[index].dcode_insert_length & 0x7FFFFFF) == 0 &&
- nodes[index].length == 1) --index;
- nodes[index].u.next = BROTLI_UINT32_MAX;
- while (index != 0) {
- size_t len = ZopfliNodeCommandLength(&nodes[index]);
- index -= len;
- nodes[index].u.next = (uint32_t)len;
- num_commands++;
- }
- return num_commands;
-}
-
-/* REQUIRES: nodes != NULL and len(nodes) >= num_bytes + 1 */
-void BrotliZopfliCreateCommands(const size_t num_bytes,
- const size_t block_start,
- const size_t max_backward_limit,
- const ZopfliNode* nodes,
- int* dist_cache,
- size_t* last_insert_len,
- const BrotliEncoderParams* params,
- Command* commands,
- size_t* num_literals) {
- size_t pos = 0;
- uint32_t offset = nodes[0].u.next;
- size_t i;
- size_t gap = 0;
- for (i = 0; offset != BROTLI_UINT32_MAX; i++) {
- const ZopfliNode* next = &nodes[pos + offset];
- size_t copy_length = ZopfliNodeCopyLength(next);
- size_t insert_length = next->dcode_insert_length & 0x7FFFFFF;
- pos += insert_length;
- offset = next->u.next;
- if (i == 0) {
- insert_length += *last_insert_len;
- *last_insert_len = 0;
- }
- {
- size_t distance = ZopfliNodeCopyDistance(next);
- size_t len_code = ZopfliNodeLengthCode(next);
- size_t max_distance =
- BROTLI_MIN(size_t, block_start + pos, max_backward_limit);
- BROTLI_BOOL is_dictionary = TO_BROTLI_BOOL(distance > max_distance + gap);
- size_t dist_code = ZopfliNodeDistanceCode(next);
- InitCommand(&commands[i], ¶ms->dist, insert_length,
- copy_length, (int)len_code - (int)copy_length, dist_code);
-
- if (!is_dictionary && dist_code > 0) {
- dist_cache[3] = dist_cache[2];
- dist_cache[2] = dist_cache[1];
- dist_cache[1] = dist_cache[0];
- dist_cache[0] = (int)distance;
- }
- }
-
- *num_literals += insert_length;
- pos += copy_length;
- }
- *last_insert_len += num_bytes - pos;
-}
-
-static size_t ZopfliIterate(size_t num_bytes,
- size_t position,
- const uint8_t* ringbuffer,
- size_t ringbuffer_mask,
- const BrotliEncoderParams* params,
- const size_t max_backward_limit,
- const size_t gap,
- const int* dist_cache,
- const ZopfliCostModel* model,
- const uint32_t* num_matches,
- const BackwardMatch* matches,
- ZopfliNode* nodes) {
- const size_t max_zopfli_len = MaxZopfliLen(params);
- StartPosQueue queue;
- size_t cur_match_pos = 0;
- size_t i;
- nodes[0].length = 0;
- nodes[0].u.cost = 0;
- InitStartPosQueue(&queue);
- for (i = 0; i + 3 < num_bytes; i++) {
- size_t skip = UpdateNodes(num_bytes, position, i, ringbuffer,
- ringbuffer_mask, params, max_backward_limit, dist_cache,
- num_matches[i], &matches[cur_match_pos], model, &queue, nodes);
- if (skip < BROTLI_LONG_COPY_QUICK_STEP) skip = 0;
- cur_match_pos += num_matches[i];
- if (num_matches[i] == 1 &&
- BackwardMatchLength(&matches[cur_match_pos - 1]) > max_zopfli_len) {
- skip = BROTLI_MAX(size_t,
- BackwardMatchLength(&matches[cur_match_pos - 1]), skip);
- }
- if (skip > 1) {
- skip--;
- while (skip) {
- i++;
- if (i + 3 >= num_bytes) break;
- EvaluateNode(position, i, max_backward_limit, gap, dist_cache, model,
- &queue, nodes);
- cur_match_pos += num_matches[i];
- skip--;
- }
- }
- }
- return ComputeShortestPathFromNodes(num_bytes, nodes);
-}
-
-/* REQUIRES: nodes != NULL and len(nodes) >= num_bytes + 1 */
-size_t BrotliZopfliComputeShortestPath(MemoryManager* m,
- size_t num_bytes, size_t position, const uint8_t* ringbuffer,
- size_t ringbuffer_mask, const BrotliEncoderParams* params,
- const size_t max_backward_limit, const int* dist_cache, HasherHandle hasher,
- ZopfliNode* nodes) {
- const size_t max_zopfli_len = MaxZopfliLen(params);
- ZopfliCostModel model;
- StartPosQueue queue;
- BackwardMatch matches[2 * (MAX_NUM_MATCHES_H10 + 64)];
- const size_t store_end = num_bytes >= StoreLookaheadH10() ?
- position + num_bytes - StoreLookaheadH10() + 1 : position;
- size_t i;
- size_t gap = 0;
- size_t lz_matches_offset = 0;
- nodes[0].length = 0;
- nodes[0].u.cost = 0;
- InitZopfliCostModel(m, &model, ¶ms->dist, num_bytes);
- if (BROTLI_IS_OOM(m)) return 0;
- ZopfliCostModelSetFromLiteralCosts(
- &model, position, ringbuffer, ringbuffer_mask);
- InitStartPosQueue(&queue);
- for (i = 0; i + HashTypeLengthH10() - 1 < num_bytes; i++) {
- const size_t pos = position + i;
- const size_t max_distance = BROTLI_MIN(size_t, pos, max_backward_limit);
- size_t skip;
- size_t num_matches = FindAllMatchesH10(hasher, ¶ms->dictionary,
- ringbuffer, ringbuffer_mask, pos, num_bytes - i, max_distance, gap,
- params, &matches[lz_matches_offset]);
- if (num_matches > 0 &&
- BackwardMatchLength(&matches[num_matches - 1]) > max_zopfli_len) {
- matches[0] = matches[num_matches - 1];
- num_matches = 1;
- }
- skip = UpdateNodes(num_bytes, position, i, ringbuffer, ringbuffer_mask,
- params, max_backward_limit, dist_cache, num_matches, matches, &model,
- &queue, nodes);
- if (skip < BROTLI_LONG_COPY_QUICK_STEP) skip = 0;
- if (num_matches == 1 && BackwardMatchLength(&matches[0]) > max_zopfli_len) {
- skip = BROTLI_MAX(size_t, BackwardMatchLength(&matches[0]), skip);
- }
- if (skip > 1) {
- /* Add the tail of the copy to the hasher. */
- StoreRangeH10(hasher, ringbuffer, ringbuffer_mask, pos + 1, BROTLI_MIN(
- size_t, pos + skip, store_end));
- skip--;
- while (skip) {
- i++;
- if (i + HashTypeLengthH10() - 1 >= num_bytes) break;
- EvaluateNode(position, i, max_backward_limit, gap, dist_cache, &model,
- &queue, nodes);
- skip--;
- }
- }
- }
- CleanupZopfliCostModel(m, &model);
- return ComputeShortestPathFromNodes(num_bytes, nodes);
-}
-
-void BrotliCreateZopfliBackwardReferences(MemoryManager* m,
- size_t num_bytes, size_t position, const uint8_t* ringbuffer,
- size_t ringbuffer_mask, const BrotliEncoderParams* params,
- HasherHandle hasher, int* dist_cache, size_t* last_insert_len,
- Command* commands, size_t* num_commands, size_t* num_literals) {
- const size_t max_backward_limit = BROTLI_MAX_BACKWARD_LIMIT(params->lgwin);
- ZopfliNode* nodes;
- nodes = BROTLI_ALLOC(m, ZopfliNode, num_bytes + 1);
- if (BROTLI_IS_OOM(m)) return;
- BrotliInitZopfliNodes(nodes, num_bytes + 1);
- *num_commands += BrotliZopfliComputeShortestPath(m,
- num_bytes, position, ringbuffer, ringbuffer_mask,
- params, max_backward_limit, dist_cache, hasher, nodes);
- if (BROTLI_IS_OOM(m)) return;
- BrotliZopfliCreateCommands(num_bytes, position, max_backward_limit, nodes,
- dist_cache, last_insert_len, params, commands, num_literals);
- BROTLI_FREE(m, nodes);
-}
-
-void BrotliCreateHqZopfliBackwardReferences(MemoryManager* m,
- size_t num_bytes, size_t position, const uint8_t* ringbuffer,
- size_t ringbuffer_mask, const BrotliEncoderParams* params,
- HasherHandle hasher, int* dist_cache, size_t* last_insert_len,
- Command* commands, size_t* num_commands, size_t* num_literals) {
- const size_t max_backward_limit = BROTLI_MAX_BACKWARD_LIMIT(params->lgwin);
- uint32_t* num_matches = BROTLI_ALLOC(m, uint32_t, num_bytes);
- size_t matches_size = 4 * num_bytes;
- const size_t store_end = num_bytes >= StoreLookaheadH10() ?
- position + num_bytes - StoreLookaheadH10() + 1 : position;
- size_t cur_match_pos = 0;
- size_t i;
- size_t orig_num_literals;
- size_t orig_last_insert_len;
- int orig_dist_cache[4];
- size_t orig_num_commands;
- ZopfliCostModel model;
- ZopfliNode* nodes;
- BackwardMatch* matches = BROTLI_ALLOC(m, BackwardMatch, matches_size);
- size_t gap = 0;
- size_t shadow_matches = 0;
- if (BROTLI_IS_OOM(m)) return;
- for (i = 0; i + HashTypeLengthH10() - 1 < num_bytes; ++i) {
- const size_t pos = position + i;
- size_t max_distance = BROTLI_MIN(size_t, pos, max_backward_limit);
- size_t max_length = num_bytes - i;
- size_t num_found_matches;
- size_t cur_match_end;
- size_t j;
- /* Ensure that we have enough free slots. */
- BROTLI_ENSURE_CAPACITY(m, BackwardMatch, matches, matches_size,
- cur_match_pos + MAX_NUM_MATCHES_H10 + shadow_matches);
- if (BROTLI_IS_OOM(m)) return;
- num_found_matches = FindAllMatchesH10(hasher,
- ¶ms->dictionary, ringbuffer, ringbuffer_mask, pos, max_length,
- max_distance, gap, params, &matches[cur_match_pos + shadow_matches]);
- cur_match_end = cur_match_pos + num_found_matches;
- for (j = cur_match_pos; j + 1 < cur_match_end; ++j) {
- BROTLI_DCHECK(BackwardMatchLength(&matches[j]) <=
- BackwardMatchLength(&matches[j + 1]));
- }
- num_matches[i] = (uint32_t)num_found_matches;
- if (num_found_matches > 0) {
- const size_t match_len = BackwardMatchLength(&matches[cur_match_end - 1]);
- if (match_len > MAX_ZOPFLI_LEN_QUALITY_11) {
- const size_t skip = match_len - 1;
- matches[cur_match_pos++] = matches[cur_match_end - 1];
- num_matches[i] = 1;
- /* Add the tail of the copy to the hasher. */
- StoreRangeH10(hasher, ringbuffer, ringbuffer_mask, pos + 1,
- BROTLI_MIN(size_t, pos + match_len, store_end));
- memset(&num_matches[i + 1], 0, skip * sizeof(num_matches[0]));
- i += skip;
- } else {
- cur_match_pos = cur_match_end;
- }
- }
- }
- orig_num_literals = *num_literals;
- orig_last_insert_len = *last_insert_len;
- memcpy(orig_dist_cache, dist_cache, 4 * sizeof(dist_cache[0]));
- orig_num_commands = *num_commands;
- nodes = BROTLI_ALLOC(m, ZopfliNode, num_bytes + 1);
- if (BROTLI_IS_OOM(m)) return;
- InitZopfliCostModel(m, &model, ¶ms->dist, num_bytes);
- if (BROTLI_IS_OOM(m)) return;
- for (i = 0; i < 2; i++) {
- BrotliInitZopfliNodes(nodes, num_bytes + 1);
- if (i == 0) {
- ZopfliCostModelSetFromLiteralCosts(
- &model, position, ringbuffer, ringbuffer_mask);
- } else {
- ZopfliCostModelSetFromCommands(&model, position, ringbuffer,
- ringbuffer_mask, commands, *num_commands - orig_num_commands,
- orig_last_insert_len);
- }
- *num_commands = orig_num_commands;
- *num_literals = orig_num_literals;
- *last_insert_len = orig_last_insert_len;
- memcpy(dist_cache, orig_dist_cache, 4 * sizeof(dist_cache[0]));
- *num_commands += ZopfliIterate(num_bytes, position, ringbuffer,
- ringbuffer_mask, params, max_backward_limit, gap, dist_cache,
- &model, num_matches, matches, nodes);
- BrotliZopfliCreateCommands(num_bytes, position, max_backward_limit,
- nodes, dist_cache, last_insert_len, params, commands, num_literals);
- }
- CleanupZopfliCostModel(m, &model);
- BROTLI_FREE(m, nodes);
- BROTLI_FREE(m, matches);
- BROTLI_FREE(m, num_matches);
-}
-
-#if defined(__cplusplus) || defined(c_plusplus)
-} /* extern "C" */
-#endif
diff --git a/BaseTools/Source/C/BrotliCompress/enc/bit_cost.c b/BaseTools/Source/C/BrotliCompress/enc/bit_cost.c
deleted file mode 100644
index c8ee842ce3b3..000000000000
--- a/BaseTools/Source/C/BrotliCompress/enc/bit_cost.c
+++ /dev/null
@@ -1,35 +0,0 @@
-/* Copyright 2013 Google Inc. All Rights Reserved.
-
- Distributed under MIT license.
- See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
-*/
-
-/* Functions to estimate the bit cost of Huffman trees. */
-
-#include "./bit_cost.h"
-
-#include "../common/constants.h"
-#include "../common/platform.h"
-#include <brotli/types.h>
-#include "./fast_log.h"
-#include "./histogram.h"
-
-#if defined(__cplusplus) || defined(c_plusplus)
-extern "C" {
-#endif
-
-#define FN(X) X ## Literal
-#include "./bit_cost_inc.h" /* NOLINT(build/include) */
-#undef FN
-
-#define FN(X) X ## Command
-#include "./bit_cost_inc.h" /* NOLINT(build/include) */
-#undef FN
-
-#define FN(X) X ## Distance
-#include "./bit_cost_inc.h" /* NOLINT(build/include) */
-#undef FN
-
-#if defined(__cplusplus) || defined(c_plusplus)
-} /* extern "C" */
-#endif
diff --git a/BaseTools/Source/C/BrotliCompress/enc/block_splitter.c b/BaseTools/Source/C/BrotliCompress/enc/block_splitter.c
deleted file mode 100644
index 344a629c7dce..000000000000
--- a/BaseTools/Source/C/BrotliCompress/enc/block_splitter.c
+++ /dev/null
@@ -1,194 +0,0 @@
-/* Copyright 2013 Google Inc. All Rights Reserved.
-
- Distributed under MIT license.
- See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
-*/
-
-/* Block split point selection utilities. */
-
-#include "./block_splitter.h"
-
-#include <string.h> /* memcpy, memset */
-
-#include "../common/platform.h"
-#include "./bit_cost.h"
-#include "./cluster.h"
-#include "./command.h"
-#include "./fast_log.h"
-#include "./histogram.h"
-#include "./memory.h"
-#include "./quality.h"
-
-#if defined(__cplusplus) || defined(c_plusplus)
-extern "C" {
-#endif
-
-static const size_t kMaxLiteralHistograms = 100;
-static const size_t kMaxCommandHistograms = 50;
-static const double kLiteralBlockSwitchCost = 28.1;
-static const double kCommandBlockSwitchCost = 13.5;
-static const double kDistanceBlockSwitchCost = 14.6;
-static const size_t kLiteralStrideLength = 70;
-static const size_t kCommandStrideLength = 40;
-static const size_t kSymbolsPerLiteralHistogram = 544;
-static const size_t kSymbolsPerCommandHistogram = 530;
-static const size_t kSymbolsPerDistanceHistogram = 544;
-static const size_t kMinLengthForBlockSplitting = 128;
-static const size_t kIterMulForRefining = 2;
-static const size_t kMinItersForRefining = 100;
-
-static size_t CountLiterals(const Command* cmds, const size_t num_commands) {
- /* Count how many we have. */
- size_t total_length = 0;
- size_t i;
- for (i = 0; i < num_commands; ++i) {
- total_length += cmds[i].insert_len_;
- }
- return total_length;
-}
-
-static void CopyLiteralsToByteArray(const Command* cmds,
- const size_t num_commands,
- const uint8_t* data,
- const size_t offset,
- const size_t mask,
- uint8_t* literals) {
- size_t pos = 0;
- size_t from_pos = offset & mask;
- size_t i;
- for (i = 0; i < num_commands; ++i) {
- size_t insert_len = cmds[i].insert_len_;
- if (from_pos + insert_len > mask) {
- size_t head_size = mask + 1 - from_pos;
- memcpy(literals + pos, data + from_pos, head_size);
- from_pos = 0;
- pos += head_size;
- insert_len -= head_size;
- }
- if (insert_len > 0) {
- memcpy(literals + pos, data + from_pos, insert_len);
- pos += insert_len;
- }
- from_pos = (from_pos + insert_len + CommandCopyLen(&cmds[i])) & mask;
- }
-}
-
-static BROTLI_INLINE uint32_t MyRand(uint32_t* seed) {
- /* Initial seed should be 7. In this case, loop length is (1 << 29). */
- *seed *= 16807U;
- return *seed;
-}
-
-static BROTLI_INLINE double BitCost(size_t count) {
- return count == 0 ? -2.0 : FastLog2(count);
-}
-
-#define HISTOGRAMS_PER_BATCH 64
-#define CLUSTERS_PER_BATCH 16
-
-#define FN(X) X ## Literal
-#define DataType uint8_t
-/* NOLINTNEXTLINE(build/include) */
-#include "./block_splitter_inc.h"
-#undef DataType
-#undef FN
-
-#define FN(X) X ## Command
-#define DataType uint16_t
-/* NOLINTNEXTLINE(build/include) */
-#include "./block_splitter_inc.h"
-#undef FN
-
-#define FN(X) X ## Distance
-/* NOLINTNEXTLINE(build/include) */
-#include "./block_splitter_inc.h"
-#undef DataType
-#undef FN
-
-void BrotliInitBlockSplit(BlockSplit* self) {
- self->num_types = 0;
- self->num_blocks = 0;
- self->types = 0;
- self->lengths = 0;
- self->types_alloc_size = 0;
- self->lengths_alloc_size = 0;
-}
-
-void BrotliDestroyBlockSplit(MemoryManager* m, BlockSplit* self) {
- BROTLI_FREE(m, self->types);
- BROTLI_FREE(m, self->lengths);
-}
-
-void BrotliSplitBlock(MemoryManager* m,
- const Command* cmds,
- const size_t num_commands,
- const uint8_t* data,
- const size_t pos,
- const size_t mask,
- const BrotliEncoderParams* params,
- BlockSplit* literal_split,
- BlockSplit* insert_and_copy_split,
- BlockSplit* dist_split) {
- {
- size_t literals_count = CountLiterals(cmds, num_commands);
- uint8_t* literals = BROTLI_ALLOC(m, uint8_t, literals_count);
- if (BROTLI_IS_OOM(m)) return;
- /* Create a continuous array of literals. */
- CopyLiteralsToByteArray(cmds, num_commands, data, pos, mask, literals);
- /* Create the block split on the array of literals.
- Literal histograms have alphabet size 256. */
- SplitByteVectorLiteral(
- m, literals, literals_count,
- kSymbolsPerLiteralHistogram, kMaxLiteralHistograms,
- kLiteralStrideLength, kLiteralBlockSwitchCost, params,
- literal_split);
- if (BROTLI_IS_OOM(m)) return;
- BROTLI_FREE(m, literals);
- }
-
- {
- /* Compute prefix codes for commands. */
- uint16_t* insert_and_copy_codes = BROTLI_ALLOC(m, uint16_t, num_commands);
- size_t i;
- if (BROTLI_IS_OOM(m)) return;
- for (i = 0; i < num_commands; ++i) {
- insert_and_copy_codes[i] = cmds[i].cmd_prefix_;
- }
- /* Create the block split on the array of command prefixes. */
- SplitByteVectorCommand(
- m, insert_and_copy_codes, num_commands,
- kSymbolsPerCommandHistogram, kMaxCommandHistograms,
- kCommandStrideLength, kCommandBlockSwitchCost, params,
- insert_and_copy_split);
- if (BROTLI_IS_OOM(m)) return;
- /* TODO: reuse for distances? */
- BROTLI_FREE(m, insert_and_copy_codes);
- }
-
- {
- /* Create a continuous array of distance prefixes. */
- uint16_t* distance_prefixes = BROTLI_ALLOC(m, uint16_t, num_commands);
- size_t j = 0;
- size_t i;
- if (BROTLI_IS_OOM(m)) return;
- for (i = 0; i < num_commands; ++i) {
- const Command* cmd = &cmds[i];
- if (CommandCopyLen(cmd) && cmd->cmd_prefix_ >= 128) {
- distance_prefixes[j++] = cmd->dist_prefix_ & 0x3FF;
- }
- }
- /* Create the block split on the array of distance prefixes. */
- SplitByteVectorDistance(
- m, distance_prefixes, j,
- kSymbolsPerDistanceHistogram, kMaxCommandHistograms,
- kCommandStrideLength, kDistanceBlockSwitchCost, params,
- dist_split);
- if (BROTLI_IS_OOM(m)) return;
- BROTLI_FREE(m, distance_prefixes);
- }
-}
-
-
-#if defined(__cplusplus) || defined(c_plusplus)
-} /* extern "C" */
-#endif
diff --git a/BaseTools/Source/C/BrotliCompress/enc/brotli_bit_stream.c b/BaseTools/Source/C/BrotliCompress/enc/brotli_bit_stream.c
deleted file mode 100644
index 50b10eda851b..000000000000
--- a/BaseTools/Source/C/BrotliCompress/enc/brotli_bit_stream.c
+++ /dev/null
@@ -1,1331 +0,0 @@
-/* Copyright 2014 Google Inc. All Rights Reserved.
-
- Distributed under MIT license.
- See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
-*/
-
-/* Brotli bit stream functions to support the low level format. There are no
- compression algorithms here, just the right ordering of bits to match the
- specs. */
-
-#include "./brotli_bit_stream.h"
-
-#include <string.h> /* memcpy, memset */
-
-#include "../common/constants.h"
-#include "../common/context.h"
-#include "../common/platform.h"
-#include <brotli/types.h>
-#include "./entropy_encode.h"
-#include "./entropy_encode_static.h"
-#include "./fast_log.h"
-#include "./histogram.h"
-#include "./memory.h"
-#include "./write_bits.h"
-
-#if defined(__cplusplus) || defined(c_plusplus)
-extern "C" {
-#endif
-
-#define MAX_HUFFMAN_TREE_SIZE (2 * BROTLI_NUM_COMMAND_SYMBOLS + 1)
-/* The maximum size of Huffman dictionary for distances assuming that
- NPOSTFIX = 0 and NDIRECT = 0. */
-#define MAX_SIMPLE_DISTANCE_ALPHABET_SIZE \
- BROTLI_DISTANCE_ALPHABET_SIZE(0, 0, BROTLI_LARGE_MAX_DISTANCE_BITS)
-/* MAX_SIMPLE_DISTANCE_ALPHABET_SIZE == 140 */
-
-/* Represents the range of values belonging to a prefix code:
- [offset, offset + 2^nbits) */
-typedef struct PrefixCodeRange {
- uint32_t offset;
- uint32_t nbits;
-} PrefixCodeRange;
-
-static const PrefixCodeRange
- kBlockLengthPrefixCode[BROTLI_NUM_BLOCK_LEN_SYMBOLS] = {
- { 1, 2}, { 5, 2}, { 9, 2}, {13, 2}, {17, 3}, { 25, 3}, { 33, 3},
- {41, 3}, {49, 4}, {65, 4}, {81, 4}, {97, 4}, {113, 5}, {145, 5},
- {177, 5}, { 209, 5}, { 241, 6}, { 305, 6}, { 369, 7}, { 497, 8},
- {753, 9}, {1265, 10}, {2289, 11}, {4337, 12}, {8433, 13}, {16625, 24}
-};
-
-static BROTLI_INLINE uint32_t BlockLengthPrefixCode(uint32_t len) {
- uint32_t code = (len >= 177) ? (len >= 753 ? 20 : 14) : (len >= 41 ? 7 : 0);
- while (code < (BROTLI_NUM_BLOCK_LEN_SYMBOLS - 1) &&
- len >= kBlockLengthPrefixCode[code + 1].offset) ++code;
- return code;
-}
-
-static BROTLI_INLINE void GetBlockLengthPrefixCode(uint32_t len, size_t* code,
- uint32_t* n_extra, uint32_t* extra) {
- *code = BlockLengthPrefixCode(len);
- *n_extra = kBlockLengthPrefixCode[*code].nbits;
- *extra = len - kBlockLengthPrefixCode[*code].offset;
-}
-
-typedef struct BlockTypeCodeCalculator {
- size_t last_type;
- size_t second_last_type;
-} BlockTypeCodeCalculator;
-
-static void InitBlockTypeCodeCalculator(BlockTypeCodeCalculator* self) {
- self->last_type = 1;
- self->second_last_type = 0;
-}
-
-static BROTLI_INLINE size_t NextBlockTypeCode(
- BlockTypeCodeCalculator* calculator, uint8_t type) {
- size_t type_code = (type == calculator->last_type + 1) ? 1u :
- (type == calculator->second_last_type) ? 0u : type + 2u;
- calculator->second_last_type = calculator->last_type;
- calculator->last_type = type;
- return type_code;
-}
-
-/* |nibblesbits| represents the 2 bits to encode MNIBBLES (0-3)
- REQUIRES: length > 0
- REQUIRES: length <= (1 << 24) */
-static void BrotliEncodeMlen(size_t length, uint64_t* bits,
- size_t* numbits, uint64_t* nibblesbits) {
- size_t lg = (length == 1) ? 1 : Log2FloorNonZero((uint32_t)(length - 1)) + 1;
- size_t mnibbles = (lg < 16 ? 16 : (lg + 3)) / 4;
- BROTLI_DCHECK(length > 0);
- BROTLI_DCHECK(length <= (1 << 24));
- BROTLI_DCHECK(lg <= 24);
- *nibblesbits = mnibbles - 4;
- *numbits = mnibbles * 4;
- *bits = length - 1;
-}
-
-static BROTLI_INLINE void StoreCommandExtra(
- const Command* cmd, size_t* storage_ix, uint8_t* storage) {
- uint32_t copylen_code = CommandCopyLenCode(cmd);
- uint16_t inscode = GetInsertLengthCode(cmd->insert_len_);
- uint16_t copycode = GetCopyLengthCode(copylen_code);
- uint32_t insnumextra = GetInsertExtra(inscode);
- uint64_t insextraval = cmd->insert_len_ - GetInsertBase(inscode);
- uint64_t copyextraval = copylen_code - GetCopyBase(copycode);
- uint64_t bits = (copyextraval << insnumextra) | insextraval;
- BrotliWriteBits(
- insnumextra + GetCopyExtra(copycode), bits, storage_ix, storage);
-}
-
-/* Data structure that stores almost everything that is needed to encode each
- block switch command. */
-typedef struct BlockSplitCode {
- BlockTypeCodeCalculator type_code_calculator;
- uint8_t type_depths[BROTLI_MAX_BLOCK_TYPE_SYMBOLS];
- uint16_t type_bits[BROTLI_MAX_BLOCK_TYPE_SYMBOLS];
- uint8_t length_depths[BROTLI_NUM_BLOCK_LEN_SYMBOLS];
- uint16_t length_bits[BROTLI_NUM_BLOCK_LEN_SYMBOLS];
-} BlockSplitCode;
-
-/* Stores a number between 0 and 255. */
-static void StoreVarLenUint8(size_t n, size_t* storage_ix, uint8_t* storage) {
- if (n == 0) {
- BrotliWriteBits(1, 0, storage_ix, storage);
- } else {
- size_t nbits = Log2FloorNonZero(n);
- BrotliWriteBits(1, 1, storage_ix, storage);
- BrotliWriteBits(3, nbits, storage_ix, storage);
- BrotliWriteBits(nbits, n - ((size_t)1 << nbits), storage_ix, storage);
- }
-}
-
-/* Stores the compressed meta-block header.
- REQUIRES: length > 0
- REQUIRES: length <= (1 << 24) */
-static void StoreCompressedMetaBlockHeader(BROTLI_BOOL is_final_block,
- size_t length,
- size_t* storage_ix,
- uint8_t* storage) {
- uint64_t lenbits;
- size_t nlenbits;
- uint64_t nibblesbits;
-
- /* Write ISLAST bit. */
- BrotliWriteBits(1, (uint64_t)is_final_block, storage_ix, storage);
- /* Write ISEMPTY bit. */
- if (is_final_block) {
- BrotliWriteBits(1, 0, storage_ix, storage);
- }
-
- BrotliEncodeMlen(length, &lenbits, &nlenbits, &nibblesbits);
- BrotliWriteBits(2, nibblesbits, storage_ix, storage);
- BrotliWriteBits(nlenbits, lenbits, storage_ix, storage);
-
- if (!is_final_block) {
- /* Write ISUNCOMPRESSED bit. */
- BrotliWriteBits(1, 0, storage_ix, storage);
- }
-}
-
-/* Stores the uncompressed meta-block header.
- REQUIRES: length > 0
- REQUIRES: length <= (1 << 24) */
-static void BrotliStoreUncompressedMetaBlockHeader(size_t length,
- size_t* storage_ix,
- uint8_t* storage) {
- uint64_t lenbits;
- size_t nlenbits;
- uint64_t nibblesbits;
-
- /* Write ISLAST bit.
- Uncompressed block cannot be the last one, so set to 0. */
- BrotliWriteBits(1, 0, storage_ix, storage);
- BrotliEncodeMlen(length, &lenbits, &nlenbits, &nibblesbits);
- BrotliWriteBits(2, nibblesbits, storage_ix, storage);
- BrotliWriteBits(nlenbits, lenbits, storage_ix, storage);
- /* Write ISUNCOMPRESSED bit. */
- BrotliWriteBits(1, 1, storage_ix, storage);
-}
-
-static void BrotliStoreHuffmanTreeOfHuffmanTreeToBitMask(
- const int num_codes, const uint8_t* code_length_bitdepth,
- size_t* storage_ix, uint8_t* storage) {
- static const uint8_t kStorageOrder[BROTLI_CODE_LENGTH_CODES] = {
- 1, 2, 3, 4, 0, 5, 17, 6, 16, 7, 8, 9, 10, 11, 12, 13, 14, 15
- };
- /* The bit lengths of the Huffman code over the code length alphabet
- are compressed with the following static Huffman code:
- Symbol Code
- ------ ----
- 0 00
- 1 1110
- 2 110
- 3 01
- 4 10
- 5 1111 */
- static const uint8_t kHuffmanBitLengthHuffmanCodeSymbols[6] = {
- 0, 7, 3, 2, 1, 15
- };
- static const uint8_t kHuffmanBitLengthHuffmanCodeBitLengths[6] = {
- 2, 4, 3, 2, 2, 4
- };
-
- size_t skip_some = 0; /* skips none. */
-
- /* Throw away trailing zeros: */
- size_t codes_to_store = BROTLI_CODE_LENGTH_CODES;
- if (num_codes > 1) {
- for (; codes_to_store > 0; --codes_to_store) {
- if (code_length_bitdepth[kStorageOrder[codes_to_store - 1]] != 0) {
- break;
- }
- }
- }
- if (code_length_bitdepth[kStorageOrder[0]] == 0 &&
- code_length_bitdepth[kStorageOrder[1]] == 0) {
- skip_some = 2; /* skips two. */
- if (code_length_bitdepth[kStorageOrder[2]] == 0) {
- skip_some = 3; /* skips three. */
- }
- }
- BrotliWriteBits(2, skip_some, storage_ix, storage);
- {
- size_t i;
- for (i = skip_some; i < codes_to_store; ++i) {
- size_t l = code_length_bitdepth[kStorageOrder[i]];
- BrotliWriteBits(kHuffmanBitLengthHuffmanCodeBitLengths[l],
- kHuffmanBitLengthHuffmanCodeSymbols[l], storage_ix, storage);
- }
- }
-}
-
-static void BrotliStoreHuffmanTreeToBitMask(
- const size_t huffman_tree_size, const uint8_t* huffman_tree,
- const uint8_t* huffman_tree_extra_bits, const uint8_t* code_length_bitdepth,
- const uint16_t* code_length_bitdepth_symbols,
- size_t* BROTLI_RESTRICT storage_ix, uint8_t* BROTLI_RESTRICT storage) {
- size_t i;
- for (i = 0; i < huffman_tree_size; ++i) {
- size_t ix = huffman_tree[i];
- BrotliWriteBits(code_length_bitdepth[ix], code_length_bitdepth_symbols[ix],
- storage_ix, storage);
- /* Extra bits */
- switch (ix) {
- case BROTLI_REPEAT_PREVIOUS_CODE_LENGTH:
- BrotliWriteBits(2, huffman_tree_extra_bits[i], storage_ix, storage);
- break;
- case BROTLI_REPEAT_ZERO_CODE_LENGTH:
- BrotliWriteBits(3, huffman_tree_extra_bits[i], storage_ix, storage);
- break;
- }
- }
-}
-
-static void StoreSimpleHuffmanTree(const uint8_t* depths,
- size_t symbols[4],
- size_t num_symbols,
- size_t max_bits,
- size_t* storage_ix, uint8_t* storage) {
- /* value of 1 indicates a simple Huffman code */
- BrotliWriteBits(2, 1, storage_ix, storage);
- BrotliWriteBits(2, num_symbols - 1, storage_ix, storage); /* NSYM - 1 */
-
- {
- /* Sort */
- size_t i;
- for (i = 0; i < num_symbols; i++) {
- size_t j;
- for (j = i + 1; j < num_symbols; j++) {
- if (depths[symbols[j]] < depths[symbols[i]]) {
- BROTLI_SWAP(size_t, symbols, j, i);
- }
- }
- }
- }
-
- if (num_symbols == 2) {
- BrotliWriteBits(max_bits, symbols[0], storage_ix, storage);
- BrotliWriteBits(max_bits, symbols[1], storage_ix, storage);
- } else if (num_symbols == 3) {
- BrotliWriteBits(max_bits, symbols[0], storage_ix, storage);
- BrotliWriteBits(max_bits, symbols[1], storage_ix, storage);
- BrotliWriteBits(max_bits, symbols[2], storage_ix, storage);
- } else {
- BrotliWriteBits(max_bits, symbols[0], storage_ix, storage);
- BrotliWriteBits(max_bits, symbols[1], storage_ix, storage);
- BrotliWriteBits(max_bits, symbols[2], storage_ix, storage);
- BrotliWriteBits(max_bits, symbols[3], storage_ix, storage);
- /* tree-select */
- BrotliWriteBits(1, depths[symbols[0]] == 1 ? 1 : 0, storage_ix, storage);
- }
-}
-
-/* num = alphabet size
- depths = symbol depths */
-void BrotliStoreHuffmanTree(const uint8_t* depths, size_t num,
- HuffmanTree* tree,
- size_t* storage_ix, uint8_t* storage) {
- /* Write the Huffman tree into the brotli-representation.
- The command alphabet is the largest, so this allocation will fit all
- alphabets. */
- uint8_t huffman_tree[BROTLI_NUM_COMMAND_SYMBOLS];
- uint8_t huffman_tree_extra_bits[BROTLI_NUM_COMMAND_SYMBOLS];
- size_t huffman_tree_size = 0;
- uint8_t code_length_bitdepth[BROTLI_CODE_LENGTH_CODES] = { 0 };
- uint16_t code_length_bitdepth_symbols[BROTLI_CODE_LENGTH_CODES];
- uint32_t huffman_tree_histogram[BROTLI_CODE_LENGTH_CODES] = { 0 };
- size_t i;
- int num_codes = 0;
- size_t code = 0;
-
- BROTLI_DCHECK(num <= BROTLI_NUM_COMMAND_SYMBOLS);
-
- BrotliWriteHuffmanTree(depths, num, &huffman_tree_size, huffman_tree,
- huffman_tree_extra_bits);
-
- /* Calculate the statistics of the Huffman tree in brotli-representation. */
- for (i = 0; i < huffman_tree_size; ++i) {
- ++huffman_tree_histogram[huffman_tree[i]];
- }
-
- for (i = 0; i < BROTLI_CODE_LENGTH_CODES; ++i) {
- if (huffman_tree_histogram[i]) {
- if (num_codes == 0) {
- code = i;
- num_codes = 1;
- } else if (num_codes == 1) {
- num_codes = 2;
- break;
- }
- }
- }
-
- /* Calculate another Huffman tree to use for compressing both the
- earlier Huffman tree with. */
- BrotliCreateHuffmanTree(huffman_tree_histogram, BROTLI_CODE_LENGTH_CODES,
- 5, tree, code_length_bitdepth);
- BrotliConvertBitDepthsToSymbols(code_length_bitdepth,
- BROTLI_CODE_LENGTH_CODES,
- code_length_bitdepth_symbols);
-
- /* Now, we have all the data, let's start storing it */
- BrotliStoreHuffmanTreeOfHuffmanTreeToBitMask(num_codes, code_length_bitdepth,
- storage_ix, storage);
-
- if (num_codes == 1) {
- code_length_bitdepth[code] = 0;
- }
-
- /* Store the real Huffman tree now. */
- BrotliStoreHuffmanTreeToBitMask(huffman_tree_size,
- huffman_tree,
- huffman_tree_extra_bits,
- code_length_bitdepth,
- code_length_bitdepth_symbols,
- storage_ix, storage);
-}
-
-/* Builds a Huffman tree from histogram[0:length] into depth[0:length] and
- bits[0:length] and stores the encoded tree to the bit stream. */
-static void BuildAndStoreHuffmanTree(const uint32_t* histogram,
- const size_t histogram_length,
- const size_t alphabet_size,
- HuffmanTree* tree,
- uint8_t* depth,
- uint16_t* bits,
- size_t* storage_ix,
- uint8_t* storage) {
- size_t count = 0;
- size_t s4[4] = { 0 };
- size_t i;
- size_t max_bits = 0;
- for (i = 0; i < histogram_length; i++) {
- if (histogram[i]) {
- if (count < 4) {
- s4[count] = i;
- } else if (count > 4) {
- break;
- }
- count++;
- }
- }
-
- {
- size_t max_bits_counter = alphabet_size - 1;
- while (max_bits_counter) {
- max_bits_counter >>= 1;
- ++max_bits;
- }
- }
-
- if (count <= 1) {
- BrotliWriteBits(4, 1, storage_ix, storage);
- BrotliWriteBits(max_bits, s4[0], storage_ix, storage);
- depth[s4[0]] = 0;
- bits[s4[0]] = 0;
- return;
- }
-
- memset(depth, 0, histogram_length * sizeof(depth[0]));
- BrotliCreateHuffmanTree(histogram, histogram_length, 15, tree, depth);
- BrotliConvertBitDepthsToSymbols(depth, histogram_length, bits);
-
- if (count <= 4) {
- StoreSimpleHuffmanTree(depth, s4, count, max_bits, storage_ix, storage);
- } else {
- BrotliStoreHuffmanTree(depth, histogram_length, tree, storage_ix, storage);
- }
-}
-
-static BROTLI_INLINE BROTLI_BOOL SortHuffmanTree(
- const HuffmanTree* v0, const HuffmanTree* v1) {
- return TO_BROTLI_BOOL(v0->total_count_ < v1->total_count_);
-}
-
-void BrotliBuildAndStoreHuffmanTreeFast(MemoryManager* m,
- const uint32_t* histogram,
- const size_t histogram_total,
- const size_t max_bits,
- uint8_t* depth, uint16_t* bits,
- size_t* storage_ix,
- uint8_t* storage) {
- size_t count = 0;
- size_t symbols[4] = { 0 };
- size_t length = 0;
- size_t total = histogram_total;
- while (total != 0) {
- if (histogram[length]) {
- if (count < 4) {
- symbols[count] = length;
- }
- ++count;
- total -= histogram[length];
- }
- ++length;
- }
-
- if (count <= 1) {
- BrotliWriteBits(4, 1, storage_ix, storage);
- BrotliWriteBits(max_bits, symbols[0], storage_ix, storage);
- depth[symbols[0]] = 0;
- bits[symbols[0]] = 0;
- return;
- }
-
- memset(depth, 0, length * sizeof(depth[0]));
- {
- const size_t max_tree_size = 2 * length + 1;
- HuffmanTree* tree = BROTLI_ALLOC(m, HuffmanTree, max_tree_size);
- uint32_t count_limit;
- if (BROTLI_IS_OOM(m)) return;
- for (count_limit = 1; ; count_limit *= 2) {
- HuffmanTree* node = tree;
- size_t l;
- for (l = length; l != 0;) {
- --l;
- if (histogram[l]) {
- if (BROTLI_PREDICT_TRUE(histogram[l] >= count_limit)) {
- InitHuffmanTree(node, histogram[l], -1, (int16_t)l);
- } else {
- InitHuffmanTree(node, count_limit, -1, (int16_t)l);
- }
- ++node;
- }
- }
- {
- const int n = (int)(node - tree);
- HuffmanTree sentinel;
- int i = 0; /* Points to the next leaf node. */
- int j = n + 1; /* Points to the next non-leaf node. */
- int k;
-
- SortHuffmanTreeItems(tree, (size_t)n, SortHuffmanTree);
- /* The nodes are:
- [0, n): the sorted leaf nodes that we start with.
- [n]: we add a sentinel here.
- [n + 1, 2n): new parent nodes are added here, starting from
- (n+1). These are naturally in ascending order.
- [2n]: we add a sentinel at the end as well.
- There will be (2n+1) elements at the end. */
- InitHuffmanTree(&sentinel, BROTLI_UINT32_MAX, -1, -1);
- *node++ = sentinel;
- *node++ = sentinel;
-
- for (k = n - 1; k > 0; --k) {
- int left, right;
- if (tree[i].total_count_ <= tree[j].total_count_) {
- left = i;
- ++i;
- } else {
- left = j;
- ++j;
- }
- if (tree[i].total_count_ <= tree[j].total_count_) {
- right = i;
- ++i;
- } else {
- right = j;
- ++j;
- }
- /* The sentinel node becomes the parent node. */
- node[-1].total_count_ =
- tree[left].total_count_ + tree[right].total_count_;
- node[-1].index_left_ = (int16_t)left;
- node[-1].index_right_or_value_ = (int16_t)right;
- /* Add back the last sentinel node. */
- *node++ = sentinel;
- }
- if (BrotliSetDepth(2 * n - 1, tree, depth, 14)) {
- /* We need to pack the Huffman tree in 14 bits. If this was not
- successful, add fake entities to the lowest values and retry. */
- break;
- }
- }
- }
- BROTLI_FREE(m, tree);
- }
- BrotliConvertBitDepthsToSymbols(depth, length, bits);
- if (count <= 4) {
- size_t i;
- /* value of 1 indicates a simple Huffman code */
- BrotliWriteBits(2, 1, storage_ix, storage);
- BrotliWriteBits(2, count - 1, storage_ix, storage); /* NSYM - 1 */
-
- /* Sort */
- for (i = 0; i < count; i++) {
- size_t j;
- for (j = i + 1; j < count; j++) {
- if (depth[symbols[j]] < depth[symbols[i]]) {
- BROTLI_SWAP(size_t, symbols, j, i);
- }
- }
- }
-
- if (count == 2) {
- BrotliWriteBits(max_bits, symbols[0], storage_ix, storage);
- BrotliWriteBits(max_bits, symbols[1], storage_ix, storage);
- } else if (count == 3) {
- BrotliWriteBits(max_bits, symbols[0], storage_ix, storage);
- BrotliWriteBits(max_bits, symbols[1], storage_ix, storage);
- BrotliWriteBits(max_bits, symbols[2], storage_ix, storage);
- } else {
- BrotliWriteBits(max_bits, symbols[0], storage_ix, storage);
- BrotliWriteBits(max_bits, symbols[1], storage_ix, storage);
- BrotliWriteBits(max_bits, symbols[2], storage_ix, storage);
- BrotliWriteBits(max_bits, symbols[3], storage_ix, storage);
- /* tree-select */
- BrotliWriteBits(1, depth[symbols[0]] == 1 ? 1 : 0, storage_ix, storage);
- }
- } else {
- uint8_t previous_value = 8;
- size_t i;
- /* Complex Huffman Tree */
- StoreStaticCodeLengthCode(storage_ix, storage);
-
- /* Actual RLE coding. */
- for (i = 0; i < length;) {
- const uint8_t value = depth[i];
- size_t reps = 1;
- size_t k;
- for (k = i + 1; k < length && depth[k] == value; ++k) {
- ++reps;
- }
- i += reps;
- if (value == 0) {
- BrotliWriteBits(kZeroRepsDepth[reps], kZeroRepsBits[reps],
- storage_ix, storage);
- } else {
- if (previous_value != value) {
- BrotliWriteBits(kCodeLengthDepth[value], kCodeLengthBits[value],
- storage_ix, storage);
- --reps;
- }
- if (reps < 3) {
- while (reps != 0) {
- reps--;
- BrotliWriteBits(kCodeLengthDepth[value], kCodeLengthBits[value],
- storage_ix, storage);
- }
- } else {
- reps -= 3;
- BrotliWriteBits(kNonZeroRepsDepth[reps], kNonZeroRepsBits[reps],
- storage_ix, storage);
- }
- previous_value = value;
- }
- }
- }
-}
-
-static size_t IndexOf(const uint8_t* v, size_t v_size, uint8_t value) {
- size_t i = 0;
- for (; i < v_size; ++i) {
- if (v[i] == value) return i;
- }
- return i;
-}
-
-static void MoveToFront(uint8_t* v, size_t index) {
- uint8_t value = v[index];
- size_t i;
- for (i = index; i != 0; --i) {
- v[i] = v[i - 1];
- }
- v[0] = value;
-}
-
-static void MoveToFrontTransform(const uint32_t* BROTLI_RESTRICT v_in,
- const size_t v_size,
- uint32_t* v_out) {
- size_t i;
- uint8_t mtf[256];
- uint32_t max_value;
- if (v_size == 0) {
- return;
- }
- max_value = v_in[0];
- for (i = 1; i < v_size; ++i) {
- if (v_in[i] > max_value) max_value = v_in[i];
- }
- BROTLI_DCHECK(max_value < 256u);
- for (i = 0; i <= max_value; ++i) {
- mtf[i] = (uint8_t)i;
- }
- {
- size_t mtf_size = max_value + 1;
- for (i = 0; i < v_size; ++i) {
- size_t index = IndexOf(mtf, mtf_size, (uint8_t)v_in[i]);
- BROTLI_DCHECK(index < mtf_size);
- v_out[i] = (uint32_t)index;
- MoveToFront(mtf, index);
- }
- }
-}
-
-/* Finds runs of zeros in v[0..in_size) and replaces them with a prefix code of
- the run length plus extra bits (lower 9 bits is the prefix code and the rest
- are the extra bits). Non-zero values in v[] are shifted by
- *max_length_prefix. Will not create prefix codes bigger than the initial
- value of *max_run_length_prefix. The prefix code of run length L is simply
- Log2Floor(L) and the number of extra bits is the same as the prefix code. */
-static void RunLengthCodeZeros(const size_t in_size,
- uint32_t* BROTLI_RESTRICT v, size_t* BROTLI_RESTRICT out_size,
- uint32_t* BROTLI_RESTRICT max_run_length_prefix) {
- uint32_t max_reps = 0;
- size_t i;
- uint32_t max_prefix;
- for (i = 0; i < in_size;) {
- uint32_t reps = 0;
- for (; i < in_size && v[i] != 0; ++i) ;
- for (; i < in_size && v[i] == 0; ++i) {
- ++reps;
- }
- max_reps = BROTLI_MAX(uint32_t, reps, max_reps);
- }
- max_prefix = max_reps > 0 ? Log2FloorNonZero(max_reps) : 0;
- max_prefix = BROTLI_MIN(uint32_t, max_prefix, *max_run_length_prefix);
- *max_run_length_prefix = max_prefix;
- *out_size = 0;
- for (i = 0; i < in_size;) {
- BROTLI_DCHECK(*out_size <= i);
- if (v[i] != 0) {
- v[*out_size] = v[i] + *max_run_length_prefix;
- ++i;
- ++(*out_size);
- } else {
- uint32_t reps = 1;
- size_t k;
- for (k = i + 1; k < in_size && v[k] == 0; ++k) {
- ++reps;
- }
- i += reps;
- while (reps != 0) {
- if (reps < (2u << max_prefix)) {
- uint32_t run_length_prefix = Log2FloorNonZero(reps);
- const uint32_t extra_bits = reps - (1u << run_length_prefix);
- v[*out_size] = run_length_prefix + (extra_bits << 9);
- ++(*out_size);
- break;
- } else {
- const uint32_t extra_bits = (1u << max_prefix) - 1u;
- v[*out_size] = max_prefix + (extra_bits << 9);
- reps -= (2u << max_prefix) - 1u;
- ++(*out_size);
- }
- }
- }
- }
-}
-
-#define SYMBOL_BITS 9
-
-static void EncodeContextMap(MemoryManager* m,
- const uint32_t* context_map,
- size_t context_map_size,
- size_t num_clusters,
- HuffmanTree* tree,
- size_t* storage_ix, uint8_t* storage) {
- size_t i;
- uint32_t* rle_symbols;
- uint32_t max_run_length_prefix = 6;
- size_t num_rle_symbols = 0;
- uint32_t histogram[BROTLI_MAX_CONTEXT_MAP_SYMBOLS];
- static const uint32_t kSymbolMask = (1u << SYMBOL_BITS) - 1u;
- uint8_t depths[BROTLI_MAX_CONTEXT_MAP_SYMBOLS];
- uint16_t bits[BROTLI_MAX_CONTEXT_MAP_SYMBOLS];
-
- StoreVarLenUint8(num_clusters - 1, storage_ix, storage);
-
- if (num_clusters == 1) {
- return;
- }
-
- rle_symbols = BROTLI_ALLOC(m, uint32_t, context_map_size);
- if (BROTLI_IS_OOM(m)) return;
- MoveToFrontTransform(context_map, context_map_size, rle_symbols);
- RunLengthCodeZeros(context_map_size, rle_symbols,
- &num_rle_symbols, &max_run_length_prefix);
- memset(histogram, 0, sizeof(histogram));
- for (i = 0; i < num_rle_symbols; ++i) {
- ++histogram[rle_symbols[i] & kSymbolMask];
- }
- {
- BROTLI_BOOL use_rle = TO_BROTLI_BOOL(max_run_length_prefix > 0);
- BrotliWriteBits(1, (uint64_t)use_rle, storage_ix, storage);
- if (use_rle) {
- BrotliWriteBits(4, max_run_length_prefix - 1, storage_ix, storage);
- }
- }
- BuildAndStoreHuffmanTree(histogram, num_clusters + max_run_length_prefix,
- num_clusters + max_run_length_prefix,
- tree, depths, bits, storage_ix, storage);
- for (i = 0; i < num_rle_symbols; ++i) {
- const uint32_t rle_symbol = rle_symbols[i] & kSymbolMask;
- const uint32_t extra_bits_val = rle_symbols[i] >> SYMBOL_BITS;
- BrotliWriteBits(depths[rle_symbol], bits[rle_symbol], storage_ix, storage);
- if (rle_symbol > 0 && rle_symbol <= max_run_length_prefix) {
- BrotliWriteBits(rle_symbol, extra_bits_val, storage_ix, storage);
- }
- }
- BrotliWriteBits(1, 1, storage_ix, storage); /* use move-to-front */
- BROTLI_FREE(m, rle_symbols);
-}
-
-/* Stores the block switch command with index block_ix to the bit stream. */
-static BROTLI_INLINE void StoreBlockSwitch(BlockSplitCode* code,
- const uint32_t block_len,
- const uint8_t block_type,
- BROTLI_BOOL is_first_block,
- size_t* storage_ix,
- uint8_t* storage) {
- size_t typecode = NextBlockTypeCode(&code->type_code_calculator, block_type);
- size_t lencode;
- uint32_t len_nextra;
- uint32_t len_extra;
- if (!is_first_block) {
- BrotliWriteBits(code->type_depths[typecode], code->type_bits[typecode],
- storage_ix, storage);
- }
- GetBlockLengthPrefixCode(block_len, &lencode, &len_nextra, &len_extra);
-
- BrotliWriteBits(code->length_depths[lencode], code->length_bits[lencode],
- storage_ix, storage);
- BrotliWriteBits(len_nextra, len_extra, storage_ix, storage);
-}
-
-/* Builds a BlockSplitCode data structure from the block split given by the
- vector of block types and block lengths and stores it to the bit stream. */
-static void BuildAndStoreBlockSplitCode(const uint8_t* types,
- const uint32_t* lengths,
- const size_t num_blocks,
- const size_t num_types,
- HuffmanTree* tree,
- BlockSplitCode* code,
- size_t* storage_ix,
- uint8_t* storage) {
- uint32_t type_histo[BROTLI_MAX_BLOCK_TYPE_SYMBOLS];
- uint32_t length_histo[BROTLI_NUM_BLOCK_LEN_SYMBOLS];
- size_t i;
- BlockTypeCodeCalculator type_code_calculator;
- memset(type_histo, 0, (num_types + 2) * sizeof(type_histo[0]));
- memset(length_histo, 0, sizeof(length_histo));
- InitBlockTypeCodeCalculator(&type_code_calculator);
- for (i = 0; i < num_blocks; ++i) {
- size_t type_code = NextBlockTypeCode(&type_code_calculator, types[i]);
- if (i != 0) ++type_histo[type_code];
- ++length_histo[BlockLengthPrefixCode(lengths[i])];
- }
- StoreVarLenUint8(num_types - 1, storage_ix, storage);
- if (num_types > 1) { /* TODO: else? could StoreBlockSwitch occur? */
- BuildAndStoreHuffmanTree(&type_histo[0], num_types + 2, num_types + 2, tree,
- &code->type_depths[0], &code->type_bits[0],
- storage_ix, storage);
- BuildAndStoreHuffmanTree(&length_histo[0], BROTLI_NUM_BLOCK_LEN_SYMBOLS,
- BROTLI_NUM_BLOCK_LEN_SYMBOLS,
- tree, &code->length_depths[0],
- &code->length_bits[0], storage_ix, storage);
- StoreBlockSwitch(code, lengths[0], types[0], 1, storage_ix, storage);
- }
-}
-
-/* Stores a context map where the histogram type is always the block type. */
-static void StoreTrivialContextMap(size_t num_types,
- size_t context_bits,
- HuffmanTree* tree,
- size_t* storage_ix,
- uint8_t* storage) {
- StoreVarLenUint8(num_types - 1, storage_ix, storage);
- if (num_types > 1) {
- size_t repeat_code = context_bits - 1u;
- size_t repeat_bits = (1u << repeat_code) - 1u;
- size_t alphabet_size = num_types + repeat_code;
- uint32_t histogram[BROTLI_MAX_CONTEXT_MAP_SYMBOLS];
- uint8_t depths[BROTLI_MAX_CONTEXT_MAP_SYMBOLS];
- uint16_t bits[BROTLI_MAX_CONTEXT_MAP_SYMBOLS];
- size_t i;
- memset(histogram, 0, alphabet_size * sizeof(histogram[0]));
- /* Write RLEMAX. */
- BrotliWriteBits(1, 1, storage_ix, storage);
- BrotliWriteBits(4, repeat_code - 1, storage_ix, storage);
- histogram[repeat_code] = (uint32_t)num_types;
- histogram[0] = 1;
- for (i = context_bits; i < alphabet_size; ++i) {
- histogram[i] = 1;
- }
- BuildAndStoreHuffmanTree(histogram, alphabet_size, alphabet_size,
- tree, depths, bits, storage_ix, storage);
- for (i = 0; i < num_types; ++i) {
- size_t code = (i == 0 ? 0 : i + context_bits - 1);
- BrotliWriteBits(depths[code], bits[code], storage_ix, storage);
- BrotliWriteBits(
- depths[repeat_code], bits[repeat_code], storage_ix, storage);
- BrotliWriteBits(repeat_code, repeat_bits, storage_ix, storage);
- }
- /* Write IMTF (inverse-move-to-front) bit. */
- BrotliWriteBits(1, 1, storage_ix, storage);
- }
-}
-
-/* Manages the encoding of one block category (literal, command or distance). */
-typedef struct BlockEncoder {
- size_t histogram_length_;
- size_t num_block_types_;
- const uint8_t* block_types_; /* Not owned. */
- const uint32_t* block_lengths_; /* Not owned. */
- size_t num_blocks_;
- BlockSplitCode block_split_code_;
- size_t block_ix_;
- size_t block_len_;
- size_t entropy_ix_;
- uint8_t* depths_;
- uint16_t* bits_;
-} BlockEncoder;
-
-static void InitBlockEncoder(BlockEncoder* self, size_t histogram_length,
- size_t num_block_types, const uint8_t* block_types,
- const uint32_t* block_lengths, const size_t num_blocks) {
- self->histogram_length_ = histogram_length;
- self->num_block_types_ = num_block_types;
- self->block_types_ = block_types;
- self->block_lengths_ = block_lengths;
- self->num_blocks_ = num_blocks;
- InitBlockTypeCodeCalculator(&self->block_split_code_.type_code_calculator);
- self->block_ix_ = 0;
- self->block_len_ = num_blocks == 0 ? 0 : block_lengths[0];
- self->entropy_ix_ = 0;
- self->depths_ = 0;
- self->bits_ = 0;
-}
-
-static void CleanupBlockEncoder(MemoryManager* m, BlockEncoder* self) {
- BROTLI_FREE(m, self->depths_);
- BROTLI_FREE(m, self->bits_);
-}
-
-/* Creates entropy codes of block lengths and block types and stores them
- to the bit stream. */
-static void BuildAndStoreBlockSwitchEntropyCodes(BlockEncoder* self,
- HuffmanTree* tree, size_t* storage_ix, uint8_t* storage) {
- BuildAndStoreBlockSplitCode(self->block_types_, self->block_lengths_,
- self->num_blocks_, self->num_block_types_, tree, &self->block_split_code_,
- storage_ix, storage);
-}
-
-/* Stores the next symbol with the entropy code of the current block type.
- Updates the block type and block length at block boundaries. */
-static void StoreSymbol(BlockEncoder* self, size_t symbol, size_t* storage_ix,
- uint8_t* storage) {
- if (self->block_len_ == 0) {
- size_t block_ix = ++self->block_ix_;
- uint32_t block_len = self->block_lengths_[block_ix];
- uint8_t block_type = self->block_types_[block_ix];
- self->block_len_ = block_len;
- self->entropy_ix_ = block_type * self->histogram_length_;
- StoreBlockSwitch(&self->block_split_code_, block_len, block_type, 0,
- storage_ix, storage);
- }
- --self->block_len_;
- {
- size_t ix = self->entropy_ix_ + symbol;
- BrotliWriteBits(self->depths_[ix], self->bits_[ix], storage_ix, storage);
- }
-}
-
-/* Stores the next symbol with the entropy code of the current block type and
- context value.
- Updates the block type and block length at block boundaries. */
-static void StoreSymbolWithContext(BlockEncoder* self, size_t symbol,
- size_t context, const uint32_t* context_map, size_t* storage_ix,
- uint8_t* storage, const size_t context_bits) {
- if (self->block_len_ == 0) {
- size_t block_ix = ++self->block_ix_;
- uint32_t block_len = self->block_lengths_[block_ix];
- uint8_t block_type = self->block_types_[block_ix];
- self->block_len_ = block_len;
- self->entropy_ix_ = (size_t)block_type << context_bits;
- StoreBlockSwitch(&self->block_split_code_, block_len, block_type, 0,
- storage_ix, storage);
- }
- --self->block_len_;
- {
- size_t histo_ix = context_map[self->entropy_ix_ + context];
- size_t ix = histo_ix * self->histogram_length_ + symbol;
- BrotliWriteBits(self->depths_[ix], self->bits_[ix], storage_ix, storage);
- }
-}
-
-#define FN(X) X ## Literal
-/* NOLINTNEXTLINE(build/include) */
-#include "./block_encoder_inc.h"
-#undef FN
-
-#define FN(X) X ## Command
-/* NOLINTNEXTLINE(build/include) */
-#include "./block_encoder_inc.h"
-#undef FN
-
-#define FN(X) X ## Distance
-/* NOLINTNEXTLINE(build/include) */
-#include "./block_encoder_inc.h"
-#undef FN
-
-static void JumpToByteBoundary(size_t* storage_ix, uint8_t* storage) {
- *storage_ix = (*storage_ix + 7u) & ~7u;
- storage[*storage_ix >> 3] = 0;
-}
-
-void BrotliStoreMetaBlock(MemoryManager* m,
- const uint8_t* input, size_t start_pos, size_t length, size_t mask,
- uint8_t prev_byte, uint8_t prev_byte2, BROTLI_BOOL is_last,
- const BrotliEncoderParams* params, ContextType literal_context_mode,
- const Command* commands, size_t n_commands, const MetaBlockSplit* mb,
- size_t* storage_ix, uint8_t* storage) {
-
- size_t pos = start_pos;
- size_t i;
- uint32_t num_distance_symbols = params->dist.alphabet_size;
- uint32_t num_effective_distance_symbols = num_distance_symbols;
- HuffmanTree* tree;
- ContextLut literal_context_lut = BROTLI_CONTEXT_LUT(literal_context_mode);
- BlockEncoder literal_enc;
- BlockEncoder command_enc;
- BlockEncoder distance_enc;
- const BrotliDistanceParams* dist = ¶ms->dist;
- if (params->large_window &&
- num_effective_distance_symbols > BROTLI_NUM_HISTOGRAM_DISTANCE_SYMBOLS) {
- num_effective_distance_symbols = BROTLI_NUM_HISTOGRAM_DISTANCE_SYMBOLS;
- }
-
- StoreCompressedMetaBlockHeader(is_last, length, storage_ix, storage);
-
- tree = BROTLI_ALLOC(m, HuffmanTree, MAX_HUFFMAN_TREE_SIZE);
- if (BROTLI_IS_OOM(m)) return;
- InitBlockEncoder(&literal_enc, BROTLI_NUM_LITERAL_SYMBOLS,
- mb->literal_split.num_types, mb->literal_split.types,
- mb->literal_split.lengths, mb->literal_split.num_blocks);
- InitBlockEncoder(&command_enc, BROTLI_NUM_COMMAND_SYMBOLS,
- mb->command_split.num_types, mb->command_split.types,
- mb->command_split.lengths, mb->command_split.num_blocks);
- InitBlockEncoder(&distance_enc, num_effective_distance_symbols,
- mb->distance_split.num_types, mb->distance_split.types,
- mb->distance_split.lengths, mb->distance_split.num_blocks);
-
- BuildAndStoreBlockSwitchEntropyCodes(&literal_enc, tree, storage_ix, storage);
- BuildAndStoreBlockSwitchEntropyCodes(&command_enc, tree, storage_ix, storage);
- BuildAndStoreBlockSwitchEntropyCodes(
- &distance_enc, tree, storage_ix, storage);
-
- BrotliWriteBits(2, dist->distance_postfix_bits, storage_ix, storage);
- BrotliWriteBits(
- 4, dist->num_direct_distance_codes >> dist->distance_postfix_bits,
- storage_ix, storage);
- for (i = 0; i < mb->literal_split.num_types; ++i) {
- BrotliWriteBits(2, literal_context_mode, storage_ix, storage);
- }
-
- if (mb->literal_context_map_size == 0) {
- StoreTrivialContextMap(mb->literal_histograms_size,
- BROTLI_LITERAL_CONTEXT_BITS, tree, storage_ix, storage);
- } else {
- EncodeContextMap(m,
- mb->literal_context_map, mb->literal_context_map_size,
- mb->literal_histograms_size, tree, storage_ix, storage);
- if (BROTLI_IS_OOM(m)) return;
- }
-
- if (mb->distance_context_map_size == 0) {
- StoreTrivialContextMap(mb->distance_histograms_size,
- BROTLI_DISTANCE_CONTEXT_BITS, tree, storage_ix, storage);
- } else {
- EncodeContextMap(m,
- mb->distance_context_map, mb->distance_context_map_size,
- mb->distance_histograms_size, tree, storage_ix, storage);
- if (BROTLI_IS_OOM(m)) return;
- }
-
- BuildAndStoreEntropyCodesLiteral(m, &literal_enc, mb->literal_histograms,
- mb->literal_histograms_size, BROTLI_NUM_LITERAL_SYMBOLS, tree,
- storage_ix, storage);
- if (BROTLI_IS_OOM(m)) return;
- BuildAndStoreEntropyCodesCommand(m, &command_enc, mb->command_histograms,
- mb->command_histograms_size, BROTLI_NUM_COMMAND_SYMBOLS, tree,
- storage_ix, storage);
- if (BROTLI_IS_OOM(m)) return;
- BuildAndStoreEntropyCodesDistance(m, &distance_enc, mb->distance_histograms,
- mb->distance_histograms_size, num_distance_symbols, tree,
- storage_ix, storage);
- if (BROTLI_IS_OOM(m)) return;
- BROTLI_FREE(m, tree);
-
- for (i = 0; i < n_commands; ++i) {
- const Command cmd = commands[i];
- size_t cmd_code = cmd.cmd_prefix_;
- StoreSymbol(&command_enc, cmd_code, storage_ix, storage);
- StoreCommandExtra(&cmd, storage_ix, storage);
- if (mb->literal_context_map_size == 0) {
- size_t j;
- for (j = cmd.insert_len_; j != 0; --j) {
- StoreSymbol(&literal_enc, input[pos & mask], storage_ix, storage);
- ++pos;
- }
- } else {
- size_t j;
- for (j = cmd.insert_len_; j != 0; --j) {
- size_t context =
- BROTLI_CONTEXT(prev_byte, prev_byte2, literal_context_lut);
- uint8_t literal = input[pos & mask];
- StoreSymbolWithContext(&literal_enc, literal, context,
- mb->literal_context_map, storage_ix, storage,
- BROTLI_LITERAL_CONTEXT_BITS);
- prev_byte2 = prev_byte;
- prev_byte = literal;
- ++pos;
- }
- }
- pos += CommandCopyLen(&cmd);
- if (CommandCopyLen(&cmd)) {
- prev_byte2 = input[(pos - 2) & mask];
- prev_byte = input[(pos - 1) & mask];
- if (cmd.cmd_prefix_ >= 128) {
- size_t dist_code = cmd.dist_prefix_ & 0x3FF;
- uint32_t distnumextra = cmd.dist_prefix_ >> 10;
- uint64_t distextra = cmd.dist_extra_;
- if (mb->distance_context_map_size == 0) {
- StoreSymbol(&distance_enc, dist_code, storage_ix, storage);
- } else {
- size_t context = CommandDistanceContext(&cmd);
- StoreSymbolWithContext(&distance_enc, dist_code, context,
- mb->distance_context_map, storage_ix, storage,
- BROTLI_DISTANCE_CONTEXT_BITS);
- }
- BrotliWriteBits(distnumextra, distextra, storage_ix, storage);
- }
- }
- }
- CleanupBlockEncoder(m, &distance_enc);
- CleanupBlockEncoder(m, &command_enc);
- CleanupBlockEncoder(m, &literal_enc);
- if (is_last) {
- JumpToByteBoundary(storage_ix, storage);
- }
-}
-
-static void BuildHistograms(const uint8_t* input,
- size_t start_pos,
- size_t mask,
- const Command* commands,
- size_t n_commands,
- HistogramLiteral* lit_histo,
- HistogramCommand* cmd_histo,
- HistogramDistance* dist_histo) {
- size_t pos = start_pos;
- size_t i;
- for (i = 0; i < n_commands; ++i) {
- const Command cmd = commands[i];
- size_t j;
- HistogramAddCommand(cmd_histo, cmd.cmd_prefix_);
- for (j = cmd.insert_len_; j != 0; --j) {
- HistogramAddLiteral(lit_histo, input[pos & mask]);
- ++pos;
- }
- pos += CommandCopyLen(&cmd);
- if (CommandCopyLen(&cmd) && cmd.cmd_prefix_ >= 128) {
- HistogramAddDistance(dist_histo, cmd.dist_prefix_ & 0x3FF);
- }
- }
-}
-
-static void StoreDataWithHuffmanCodes(const uint8_t* input,
- size_t start_pos,
- size_t mask,
- const Command* commands,
- size_t n_commands,
- const uint8_t* lit_depth,
- const uint16_t* lit_bits,
- const uint8_t* cmd_depth,
- const uint16_t* cmd_bits,
- const uint8_t* dist_depth,
- const uint16_t* dist_bits,
- size_t* storage_ix,
- uint8_t* storage) {
- size_t pos = start_pos;
- size_t i;
- for (i = 0; i < n_commands; ++i) {
- const Command cmd = commands[i];
- const size_t cmd_code = cmd.cmd_prefix_;
- size_t j;
- BrotliWriteBits(
- cmd_depth[cmd_code], cmd_bits[cmd_code], storage_ix, storage);
- StoreCommandExtra(&cmd, storage_ix, storage);
- for (j = cmd.insert_len_; j != 0; --j) {
- const uint8_t literal = input[pos & mask];
- BrotliWriteBits(
- lit_depth[literal], lit_bits[literal], storage_ix, storage);
- ++pos;
- }
- pos += CommandCopyLen(&cmd);
- if (CommandCopyLen(&cmd) && cmd.cmd_prefix_ >= 128) {
- const size_t dist_code = cmd.dist_prefix_ & 0x3FF;
- const uint32_t distnumextra = cmd.dist_prefix_ >> 10;
- const uint32_t distextra = cmd.dist_extra_;
- BrotliWriteBits(dist_depth[dist_code], dist_bits[dist_code],
- storage_ix, storage);
- BrotliWriteBits(distnumextra, distextra, storage_ix, storage);
- }
- }
-}
-
-void BrotliStoreMetaBlockTrivial(MemoryManager* m,
- const uint8_t* input, size_t start_pos, size_t length, size_t mask,
- BROTLI_BOOL is_last, const BrotliEncoderParams* params,
- const Command* commands, size_t n_commands,
- size_t* storage_ix, uint8_t* storage) {
- HistogramLiteral lit_histo;
- HistogramCommand cmd_histo;
- HistogramDistance dist_histo;
- uint8_t lit_depth[BROTLI_NUM_LITERAL_SYMBOLS];
- uint16_t lit_bits[BROTLI_NUM_LITERAL_SYMBOLS];
- uint8_t cmd_depth[BROTLI_NUM_COMMAND_SYMBOLS];
- uint16_t cmd_bits[BROTLI_NUM_COMMAND_SYMBOLS];
- uint8_t dist_depth[MAX_SIMPLE_DISTANCE_ALPHABET_SIZE];
- uint16_t dist_bits[MAX_SIMPLE_DISTANCE_ALPHABET_SIZE];
- HuffmanTree* tree;
- uint32_t num_distance_symbols = params->dist.alphabet_size;
-
- StoreCompressedMetaBlockHeader(is_last, length, storage_ix, storage);
-
- HistogramClearLiteral(&lit_histo);
- HistogramClearCommand(&cmd_histo);
- HistogramClearDistance(&dist_histo);
-
- BuildHistograms(input, start_pos, mask, commands, n_commands,
- &lit_histo, &cmd_histo, &dist_histo);
-
- BrotliWriteBits(13, 0, storage_ix, storage);
-
- tree = BROTLI_ALLOC(m, HuffmanTree, MAX_HUFFMAN_TREE_SIZE);
- if (BROTLI_IS_OOM(m)) return;
- BuildAndStoreHuffmanTree(lit_histo.data_, BROTLI_NUM_LITERAL_SYMBOLS,
- BROTLI_NUM_LITERAL_SYMBOLS, tree,
- lit_depth, lit_bits,
- storage_ix, storage);
- BuildAndStoreHuffmanTree(cmd_histo.data_, BROTLI_NUM_COMMAND_SYMBOLS,
- BROTLI_NUM_COMMAND_SYMBOLS, tree,
- cmd_depth, cmd_bits,
- storage_ix, storage);
- BuildAndStoreHuffmanTree(dist_histo.data_, MAX_SIMPLE_DISTANCE_ALPHABET_SIZE,
- num_distance_symbols, tree,
- dist_depth, dist_bits,
- storage_ix, storage);
- BROTLI_FREE(m, tree);
- StoreDataWithHuffmanCodes(input, start_pos, mask, commands,
- n_commands, lit_depth, lit_bits,
- cmd_depth, cmd_bits,
- dist_depth, dist_bits,
- storage_ix, storage);
- if (is_last) {
- JumpToByteBoundary(storage_ix, storage);
- }
-}
-
-void BrotliStoreMetaBlockFast(MemoryManager* m,
- const uint8_t* input, size_t start_pos, size_t length, size_t mask,
- BROTLI_BOOL is_last, const BrotliEncoderParams* params,
- const Command* commands, size_t n_commands,
- size_t* storage_ix, uint8_t* storage) {
- uint32_t num_distance_symbols = params->dist.alphabet_size;
- uint32_t distance_alphabet_bits =
- Log2FloorNonZero(num_distance_symbols - 1) + 1;
-
- StoreCompressedMetaBlockHeader(is_last, length, storage_ix, storage);
-
- BrotliWriteBits(13, 0, storage_ix, storage);
-
- if (n_commands <= 128) {
- uint32_t histogram[BROTLI_NUM_LITERAL_SYMBOLS] = { 0 };
- size_t pos = start_pos;
- size_t num_literals = 0;
- size_t i;
- uint8_t lit_depth[BROTLI_NUM_LITERAL_SYMBOLS];
- uint16_t lit_bits[BROTLI_NUM_LITERAL_SYMBOLS];
- for (i = 0; i < n_commands; ++i) {
- const Command cmd = commands[i];
- size_t j;
- for (j = cmd.insert_len_; j != 0; --j) {
- ++histogram[input[pos & mask]];
- ++pos;
- }
- num_literals += cmd.insert_len_;
- pos += CommandCopyLen(&cmd);
- }
- BrotliBuildAndStoreHuffmanTreeFast(m, histogram, num_literals,
- /* max_bits = */ 8,
- lit_depth, lit_bits,
- storage_ix, storage);
- if (BROTLI_IS_OOM(m)) return;
- StoreStaticCommandHuffmanTree(storage_ix, storage);
- StoreStaticDistanceHuffmanTree(storage_ix, storage);
- StoreDataWithHuffmanCodes(input, start_pos, mask, commands,
- n_commands, lit_depth, lit_bits,
- kStaticCommandCodeDepth,
- kStaticCommandCodeBits,
- kStaticDistanceCodeDepth,
- kStaticDistanceCodeBits,
- storage_ix, storage);
- } else {
- HistogramLiteral lit_histo;
- HistogramCommand cmd_histo;
- HistogramDistance dist_histo;
- uint8_t lit_depth[BROTLI_NUM_LITERAL_SYMBOLS];
- uint16_t lit_bits[BROTLI_NUM_LITERAL_SYMBOLS];
- uint8_t cmd_depth[BROTLI_NUM_COMMAND_SYMBOLS];
- uint16_t cmd_bits[BROTLI_NUM_COMMAND_SYMBOLS];
- uint8_t dist_depth[MAX_SIMPLE_DISTANCE_ALPHABET_SIZE];
- uint16_t dist_bits[MAX_SIMPLE_DISTANCE_ALPHABET_SIZE];
- HistogramClearLiteral(&lit_histo);
- HistogramClearCommand(&cmd_histo);
- HistogramClearDistance(&dist_histo);
- BuildHistograms(input, start_pos, mask, commands, n_commands,
- &lit_histo, &cmd_histo, &dist_histo);
- BrotliBuildAndStoreHuffmanTreeFast(m, lit_histo.data_,
- lit_histo.total_count_,
- /* max_bits = */ 8,
- lit_depth, lit_bits,
- storage_ix, storage);
- if (BROTLI_IS_OOM(m)) return;
- BrotliBuildAndStoreHuffmanTreeFast(m, cmd_histo.data_,
- cmd_histo.total_count_,
- /* max_bits = */ 10,
- cmd_depth, cmd_bits,
- storage_ix, storage);
- if (BROTLI_IS_OOM(m)) return;
- BrotliBuildAndStoreHuffmanTreeFast(m, dist_histo.data_,
- dist_histo.total_count_,
- /* max_bits = */
- distance_alphabet_bits,
- dist_depth, dist_bits,
- storage_ix, storage);
- if (BROTLI_IS_OOM(m)) return;
- StoreDataWithHuffmanCodes(input, start_pos, mask, commands,
- n_commands, lit_depth, lit_bits,
- cmd_depth, cmd_bits,
- dist_depth, dist_bits,
- storage_ix, storage);
- }
-
- if (is_last) {
- JumpToByteBoundary(storage_ix, storage);
- }
-}
-
-/* This is for storing uncompressed blocks (simple raw storage of
- bytes-as-bytes). */
-void BrotliStoreUncompressedMetaBlock(BROTLI_BOOL is_final_block,
- const uint8_t* BROTLI_RESTRICT input,
- size_t position, size_t mask,
- size_t len,
- size_t* BROTLI_RESTRICT storage_ix,
- uint8_t* BROTLI_RESTRICT storage) {
- size_t masked_pos = position & mask;
- BrotliStoreUncompressedMetaBlockHeader(len, storage_ix, storage);
- JumpToByteBoundary(storage_ix, storage);
-
- if (masked_pos + len > mask + 1) {
- size_t len1 = mask + 1 - masked_pos;
- memcpy(&storage[*storage_ix >> 3], &input[masked_pos], len1);
- *storage_ix += len1 << 3;
- len -= len1;
- masked_pos = 0;
- }
- memcpy(&storage[*storage_ix >> 3], &input[masked_pos], len);
- *storage_ix += len << 3;
-
- /* We need to clear the next 4 bytes to continue to be
- compatible with BrotliWriteBits. */
- BrotliWriteBitsPrepareStorage(*storage_ix, storage);
-
- /* Since the uncompressed block itself may not be the final block, add an
- empty one after this. */
- if (is_final_block) {
- BrotliWriteBits(1, 1, storage_ix, storage); /* islast */
- BrotliWriteBits(1, 1, storage_ix, storage); /* isempty */
- JumpToByteBoundary(storage_ix, storage);
- }
-}
-
-#if defined(__cplusplus) || defined(c_plusplus)
-} /* extern "C" */
-#endif
diff --git a/BaseTools/Source/C/BrotliCompress/enc/cluster.c b/BaseTools/Source/C/BrotliCompress/enc/cluster.c
deleted file mode 100644
index fdb4fa7d3ab2..000000000000
--- a/BaseTools/Source/C/BrotliCompress/enc/cluster.c
+++ /dev/null
@@ -1,56 +0,0 @@
-/* Copyright 2013 Google Inc. All Rights Reserved.
-
- Distributed under MIT license.
- See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
-*/
-
-/* Functions for clustering similar histograms together. */
-
-#include "./cluster.h"
-
-#include "../common/platform.h"
-#include <brotli/types.h>
-#include "./bit_cost.h" /* BrotliPopulationCost */
-#include "./fast_log.h"
-#include "./histogram.h"
-#include "./memory.h"
-
-#if defined(__cplusplus) || defined(c_plusplus)
-extern "C" {
-#endif
-
-static BROTLI_INLINE BROTLI_BOOL HistogramPairIsLess(
- const HistogramPair* p1, const HistogramPair* p2) {
- if (p1->cost_diff != p2->cost_diff) {
- return TO_BROTLI_BOOL(p1->cost_diff > p2->cost_diff);
- }
- return TO_BROTLI_BOOL((p1->idx2 - p1->idx1) > (p2->idx2 - p2->idx1));
-}
-
-/* Returns entropy reduction of the context map when we combine two clusters. */
-static BROTLI_INLINE double ClusterCostDiff(size_t size_a, size_t size_b) {
- size_t size_c = size_a + size_b;
- return (double)size_a * FastLog2(size_a) +
- (double)size_b * FastLog2(size_b) -
- (double)size_c * FastLog2(size_c);
-}
-
-#define CODE(X) X
-
-#define FN(X) X ## Literal
-#include "./cluster_inc.h" /* NOLINT(build/include) */
-#undef FN
-
-#define FN(X) X ## Command
-#include "./cluster_inc.h" /* NOLINT(build/include) */
-#undef FN
-
-#define FN(X) X ## Distance
-#include "./cluster_inc.h" /* NOLINT(build/include) */
-#undef FN
-
-#undef CODE
-
-#if defined(__cplusplus) || defined(c_plusplus)
-} /* extern "C" */
-#endif
diff --git a/BaseTools/Source/C/BrotliCompress/enc/compress_fragment.c b/BaseTools/Source/C/BrotliCompress/enc/compress_fragment.c
deleted file mode 100644
index ca61bc0a7f0d..000000000000
--- a/BaseTools/Source/C/BrotliCompress/enc/compress_fragment.c
+++ /dev/null
@@ -1,790 +0,0 @@
-/* Copyright 2015 Google Inc. All Rights Reserved.
-
- Distributed under MIT license.
- See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
-*/
-
-/* Function for fast encoding of an input fragment, independently from the input
- history. This function uses one-pass processing: when we find a backward
- match, we immediately emit the corresponding command and literal codes to
- the bit stream.
-
- Adapted from the CompressFragment() function in
- https://github.com/google/snappy/blob/master/snappy.cc */
-
-#include "./compress_fragment.h"
-
-#include <string.h> /* memcmp, memcpy, memset */
-
-#include "../common/constants.h"
-#include "../common/platform.h"
-#include <brotli/types.h>
-#include "./brotli_bit_stream.h"
-#include "./entropy_encode.h"
-#include "./fast_log.h"
-#include "./find_match_length.h"
-#include "./memory.h"
-#include "./write_bits.h"
-
-#if defined(__cplusplus) || defined(c_plusplus)
-extern "C" {
-#endif
-
-#define MAX_DISTANCE (long)BROTLI_MAX_BACKWARD_LIMIT(18)
-
-/* kHashMul32 multiplier has these properties:
- * The multiplier must be odd. Otherwise we may lose the highest bit.
- * No long streaks of ones or zeros.
- * There is no effort to ensure that it is a prime, the oddity is enough
- for this use.
- * The number has been tuned heuristically against compression benchmarks. */
-static const uint32_t kHashMul32 = 0x1E35A7BD;
-
-static BROTLI_INLINE uint32_t Hash(const uint8_t* p, size_t shift) {
- const uint64_t h = (BROTLI_UNALIGNED_LOAD64LE(p) << 24) * kHashMul32;
- return (uint32_t)(h >> shift);
-}
-
-static BROTLI_INLINE uint32_t HashBytesAtOffset(
- uint64_t v, int offset, size_t shift) {
- BROTLI_DCHECK(offset >= 0);
- BROTLI_DCHECK(offset <= 3);
- {
- const uint64_t h = ((v >> (8 * offset)) << 24) * kHashMul32;
- return (uint32_t)(h >> shift);
- }
-}
-
-static BROTLI_INLINE BROTLI_BOOL IsMatch(const uint8_t* p1, const uint8_t* p2) {
- return TO_BROTLI_BOOL(
- BrotliUnalignedRead32(p1) == BrotliUnalignedRead32(p2) &&
- p1[4] == p2[4]);
-}
-
-/* Builds a literal prefix code into "depths" and "bits" based on the statistics
- of the "input" string and stores it into the bit stream.
- Note that the prefix code here is built from the pre-LZ77 input, therefore
- we can only approximate the statistics of the actual literal stream.
- Moreover, for long inputs we build a histogram from a sample of the input
- and thus have to assign a non-zero depth for each literal.
- Returns estimated compression ratio millibytes/char for encoding given input
- with generated code. */
-static size_t BuildAndStoreLiteralPrefixCode(MemoryManager* m,
- const uint8_t* input,
- const size_t input_size,
- uint8_t depths[256],
- uint16_t bits[256],
- size_t* storage_ix,
- uint8_t* storage) {
- uint32_t histogram[256] = { 0 };
- size_t histogram_total;
- size_t i;
- if (input_size < (1 << 15)) {
- for (i = 0; i < input_size; ++i) {
- ++histogram[input[i]];
- }
- histogram_total = input_size;
- for (i = 0; i < 256; ++i) {
- /* We weigh the first 11 samples with weight 3 to account for the
- balancing effect of the LZ77 phase on the histogram. */
- const uint32_t adjust = 2 * BROTLI_MIN(uint32_t, histogram[i], 11u);
- histogram[i] += adjust;
- histogram_total += adjust;
- }
- } else {
- static const size_t kSampleRate = 29;
- for (i = 0; i < input_size; i += kSampleRate) {
- ++histogram[input[i]];
- }
- histogram_total = (input_size + kSampleRate - 1) / kSampleRate;
- for (i = 0; i < 256; ++i) {
- /* We add 1 to each population count to avoid 0 bit depths (since this is
- only a sample and we don't know if the symbol appears or not), and we
- weigh the first 11 samples with weight 3 to account for the balancing
- effect of the LZ77 phase on the histogram (more frequent symbols are
- more likely to be in backward references instead as literals). */
- const uint32_t adjust = 1 + 2 * BROTLI_MIN(uint32_t, histogram[i], 11u);
- histogram[i] += adjust;
- histogram_total += adjust;
- }
- }
- BrotliBuildAndStoreHuffmanTreeFast(m, histogram, histogram_total,
- /* max_bits = */ 8,
- depths, bits, storage_ix, storage);
- if (BROTLI_IS_OOM(m)) return 0;
- {
- size_t literal_ratio = 0;
- for (i = 0; i < 256; ++i) {
- if (histogram[i]) literal_ratio += histogram[i] * depths[i];
- }
- /* Estimated encoding ratio, millibytes per symbol. */
- return (literal_ratio * 125) / histogram_total;
- }
-}
-
-/* Builds a command and distance prefix code (each 64 symbols) into "depth" and
- "bits" based on "histogram" and stores it into the bit stream. */
-static void BuildAndStoreCommandPrefixCode(const uint32_t histogram[128],
- uint8_t depth[128], uint16_t bits[128], size_t* storage_ix,
- uint8_t* storage) {
- /* Tree size for building a tree over 64 symbols is 2 * 64 + 1. */
- HuffmanTree tree[129];
- uint8_t cmd_depth[BROTLI_NUM_COMMAND_SYMBOLS] = { 0 };
- uint16_t cmd_bits[64];
-
- BrotliCreateHuffmanTree(histogram, 64, 15, tree, depth);
- BrotliCreateHuffmanTree(&histogram[64], 64, 14, tree, &depth[64]);
- /* We have to jump through a few hoops here in order to compute
- the command bits because the symbols are in a different order than in
- the full alphabet. This looks complicated, but having the symbols
- in this order in the command bits saves a few branches in the Emit*
- functions. */
- memcpy(cmd_depth, depth, 24);
- memcpy(cmd_depth + 24, depth + 40, 8);
- memcpy(cmd_depth + 32, depth + 24, 8);
- memcpy(cmd_depth + 40, depth + 48, 8);
- memcpy(cmd_depth + 48, depth + 32, 8);
- memcpy(cmd_depth + 56, depth + 56, 8);
- BrotliConvertBitDepthsToSymbols(cmd_depth, 64, cmd_bits);
- memcpy(bits, cmd_bits, 48);
- memcpy(bits + 24, cmd_bits + 32, 16);
- memcpy(bits + 32, cmd_bits + 48, 16);
- memcpy(bits + 40, cmd_bits + 24, 16);
- memcpy(bits + 48, cmd_bits + 40, 16);
- memcpy(bits + 56, cmd_bits + 56, 16);
- BrotliConvertBitDepthsToSymbols(&depth[64], 64, &bits[64]);
- {
- /* Create the bit length array for the full command alphabet. */
- size_t i;
- memset(cmd_depth, 0, 64); /* only 64 first values were used */
- memcpy(cmd_depth, depth, 8);
- memcpy(cmd_depth + 64, depth + 8, 8);
- memcpy(cmd_depth + 128, depth + 16, 8);
- memcpy(cmd_depth + 192, depth + 24, 8);
- memcpy(cmd_depth + 384, depth + 32, 8);
- for (i = 0; i < 8; ++i) {
- cmd_depth[128 + 8 * i] = depth[40 + i];
- cmd_depth[256 + 8 * i] = depth[48 + i];
- cmd_depth[448 + 8 * i] = depth[56 + i];
- }
- BrotliStoreHuffmanTree(
- cmd_depth, BROTLI_NUM_COMMAND_SYMBOLS, tree, storage_ix, storage);
- }
- BrotliStoreHuffmanTree(&depth[64], 64, tree, storage_ix, storage);
-}
-
-/* REQUIRES: insertlen < 6210 */
-static BROTLI_INLINE void EmitInsertLen(size_t insertlen,
- const uint8_t depth[128],
- const uint16_t bits[128],
- uint32_t histo[128],
- size_t* storage_ix,
- uint8_t* storage) {
- if (insertlen < 6) {
- const size_t code = insertlen + 40;
- BrotliWriteBits(depth[code], bits[code], storage_ix, storage);
- ++histo[code];
- } else if (insertlen < 130) {
- const size_t tail = insertlen - 2;
- const uint32_t nbits = Log2FloorNonZero(tail) - 1u;
- const size_t prefix = tail >> nbits;
- const size_t inscode = (nbits << 1) + prefix + 42;
- BrotliWriteBits(depth[inscode], bits[inscode], storage_ix, storage);
- BrotliWriteBits(nbits, tail - (prefix << nbits), storage_ix, storage);
- ++histo[inscode];
- } else if (insertlen < 2114) {
- const size_t tail = insertlen - 66;
- const uint32_t nbits = Log2FloorNonZero(tail);
- const size_t code = nbits + 50;
- BrotliWriteBits(depth[code], bits[code], storage_ix, storage);
- BrotliWriteBits(nbits, tail - ((size_t)1 << nbits), storage_ix, storage);
- ++histo[code];
- } else {
- BrotliWriteBits(depth[61], bits[61], storage_ix, storage);
- BrotliWriteBits(12, insertlen - 2114, storage_ix, storage);
- ++histo[61];
- }
-}
-
-static BROTLI_INLINE void EmitLongInsertLen(size_t insertlen,
- const uint8_t depth[128],
- const uint16_t bits[128],
- uint32_t histo[128],
- size_t* storage_ix,
- uint8_t* storage) {
- if (insertlen < 22594) {
- BrotliWriteBits(depth[62], bits[62], storage_ix, storage);
- BrotliWriteBits(14, insertlen - 6210, storage_ix, storage);
- ++histo[62];
- } else {
- BrotliWriteBits(depth[63], bits[63], storage_ix, storage);
- BrotliWriteBits(24, insertlen - 22594, storage_ix, storage);
- ++histo[63];
- }
-}
-
-static BROTLI_INLINE void EmitCopyLen(size_t copylen,
- const uint8_t depth[128],
- const uint16_t bits[128],
- uint32_t histo[128],
- size_t* storage_ix,
- uint8_t* storage) {
- if (copylen < 10) {
- BrotliWriteBits(
- depth[copylen + 14], bits[copylen + 14], storage_ix, storage);
- ++histo[copylen + 14];
- } else if (copylen < 134) {
- const size_t tail = copylen - 6;
- const uint32_t nbits = Log2FloorNonZero(tail) - 1u;
- const size_t prefix = tail >> nbits;
- const size_t code = (nbits << 1) + prefix + 20;
- BrotliWriteBits(depth[code], bits[code], storage_ix, storage);
- BrotliWriteBits(nbits, tail - (prefix << nbits), storage_ix, storage);
- ++histo[code];
- } else if (copylen < 2118) {
- const size_t tail = copylen - 70;
- const uint32_t nbits = Log2FloorNonZero(tail);
- const size_t code = nbits + 28;
- BrotliWriteBits(depth[code], bits[code], storage_ix, storage);
- BrotliWriteBits(nbits, tail - ((size_t)1 << nbits), storage_ix, storage);
- ++histo[code];
- } else {
- BrotliWriteBits(depth[39], bits[39], storage_ix, storage);
- BrotliWriteBits(24, copylen - 2118, storage_ix, storage);
- ++histo[39];
- }
-}
-
-static BROTLI_INLINE void EmitCopyLenLastDistance(size_t copylen,
- const uint8_t depth[128],
- const uint16_t bits[128],
- uint32_t histo[128],
- size_t* storage_ix,
- uint8_t* storage) {
- if (copylen < 12) {
- BrotliWriteBits(depth[copylen - 4], bits[copylen - 4], storage_ix, storage);
- ++histo[copylen - 4];
- } else if (copylen < 72) {
- const size_t tail = copylen - 8;
- const uint32_t nbits = Log2FloorNonZero(tail) - 1;
- const size_t prefix = tail >> nbits;
- const size_t code = (nbits << 1) + prefix + 4;
- BrotliWriteBits(depth[code], bits[code], storage_ix, storage);
- BrotliWriteBits(nbits, tail - (prefix << nbits), storage_ix, storage);
- ++histo[code];
- } else if (copylen < 136) {
- const size_t tail = copylen - 8;
- const size_t code = (tail >> 5) + 30;
- BrotliWriteBits(depth[code], bits[code], storage_ix, storage);
- BrotliWriteBits(5, tail & 31, storage_ix, storage);
- BrotliWriteBits(depth[64], bits[64], storage_ix, storage);
- ++histo[code];
- ++histo[64];
- } else if (copylen < 2120) {
- const size_t tail = copylen - 72;
- const uint32_t nbits = Log2FloorNonZero(tail);
- const size_t code = nbits + 28;
- BrotliWriteBits(depth[code], bits[code], storage_ix, storage);
- BrotliWriteBits(nbits, tail - ((size_t)1 << nbits), storage_ix, storage);
- BrotliWriteBits(depth[64], bits[64], storage_ix, storage);
- ++histo[code];
- ++histo[64];
- } else {
- BrotliWriteBits(depth[39], bits[39], storage_ix, storage);
- BrotliWriteBits(24, copylen - 2120, storage_ix, storage);
- BrotliWriteBits(depth[64], bits[64], storage_ix, storage);
- ++histo[39];
- ++histo[64];
- }
-}
-
-static BROTLI_INLINE void EmitDistance(size_t distance,
- const uint8_t depth[128],
- const uint16_t bits[128],
- uint32_t histo[128],
- size_t* storage_ix, uint8_t* storage) {
- const size_t d = distance + 3;
- const uint32_t nbits = Log2FloorNonZero(d) - 1u;
- const size_t prefix = (d >> nbits) & 1;
- const size_t offset = (2 + prefix) << nbits;
- const size_t distcode = 2 * (nbits - 1) + prefix + 80;
- BrotliWriteBits(depth[distcode], bits[distcode], storage_ix, storage);
- BrotliWriteBits(nbits, d - offset, storage_ix, storage);
- ++histo[distcode];
-}
-
-static BROTLI_INLINE void EmitLiterals(const uint8_t* input, const size_t len,
- const uint8_t depth[256],
- const uint16_t bits[256],
- size_t* storage_ix, uint8_t* storage) {
- size_t j;
- for (j = 0; j < len; j++) {
- const uint8_t lit = input[j];
- BrotliWriteBits(depth[lit], bits[lit], storage_ix, storage);
- }
-}
-
-/* REQUIRES: len <= 1 << 24. */
-static void BrotliStoreMetaBlockHeader(
- size_t len, BROTLI_BOOL is_uncompressed, size_t* storage_ix,
- uint8_t* storage) {
- size_t nibbles = 6;
- /* ISLAST */
- BrotliWriteBits(1, 0, storage_ix, storage);
- if (len <= (1U << 16)) {
- nibbles = 4;
- } else if (len <= (1U << 20)) {
- nibbles = 5;
- }
- BrotliWriteBits(2, nibbles - 4, storage_ix, storage);
- BrotliWriteBits(nibbles * 4, len - 1, storage_ix, storage);
- /* ISUNCOMPRESSED */
- BrotliWriteBits(1, (uint64_t)is_uncompressed, storage_ix, storage);
-}
-
-static void UpdateBits(size_t n_bits, uint32_t bits, size_t pos,
- uint8_t* array) {
- while (n_bits > 0) {
- size_t byte_pos = pos >> 3;
- size_t n_unchanged_bits = pos & 7;
- size_t n_changed_bits = BROTLI_MIN(size_t, n_bits, 8 - n_unchanged_bits);
- size_t total_bits = n_unchanged_bits + n_changed_bits;
- uint32_t mask =
- (~((1u << total_bits) - 1u)) | ((1u << n_unchanged_bits) - 1u);
- uint32_t unchanged_bits = array[byte_pos] & mask;
- uint32_t changed_bits = bits & ((1u << n_changed_bits) - 1u);
- array[byte_pos] =
- (uint8_t)((changed_bits << n_unchanged_bits) | unchanged_bits);
- n_bits -= n_changed_bits;
- bits >>= n_changed_bits;
- pos += n_changed_bits;
- }
-}
-
-static void RewindBitPosition(const size_t new_storage_ix,
- size_t* storage_ix, uint8_t* storage) {
- const size_t bitpos = new_storage_ix & 7;
- const size_t mask = (1u << bitpos) - 1;
- storage[new_storage_ix >> 3] &= (uint8_t)mask;
- *storage_ix = new_storage_ix;
-}
-
-static BROTLI_BOOL ShouldMergeBlock(
- const uint8_t* data, size_t len, const uint8_t* depths) {
- size_t histo[256] = { 0 };
- static const size_t kSampleRate = 43;
- size_t i;
- for (i = 0; i < len; i += kSampleRate) {
- ++histo[data[i]];
- }
- {
- const size_t total = (len + kSampleRate - 1) / kSampleRate;
- double r = (FastLog2(total) + 0.5) * (double)total + 200;
- for (i = 0; i < 256; ++i) {
- r -= (double)histo[i] * (depths[i] + FastLog2(histo[i]));
- }
- return TO_BROTLI_BOOL(r >= 0.0);
- }
-}
-
-/* Acceptable loss for uncompressible speedup is 2% */
-#define MIN_RATIO 980
-
-static BROTLI_INLINE BROTLI_BOOL ShouldUseUncompressedMode(
- const uint8_t* metablock_start, const uint8_t* next_emit,
- const size_t insertlen, const size_t literal_ratio) {
- const size_t compressed = (size_t)(next_emit - metablock_start);
- if (compressed * 50 > insertlen) {
- return BROTLI_FALSE;
- } else {
- return TO_BROTLI_BOOL(literal_ratio > MIN_RATIO);
- }
-}
-
-static void EmitUncompressedMetaBlock(const uint8_t* begin, const uint8_t* end,
- const size_t storage_ix_start,
- size_t* storage_ix, uint8_t* storage) {
- const size_t len = (size_t)(end - begin);
- RewindBitPosition(storage_ix_start, storage_ix, storage);
- BrotliStoreMetaBlockHeader(len, 1, storage_ix, storage);
- *storage_ix = (*storage_ix + 7u) & ~7u;
- memcpy(&storage[*storage_ix >> 3], begin, len);
- *storage_ix += len << 3;
- storage[*storage_ix >> 3] = 0;
-}
-
-static uint32_t kCmdHistoSeed[128] = {
- 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 0, 0, 0, 0,
-};
-
-static BROTLI_INLINE void BrotliCompressFragmentFastImpl(
- MemoryManager* m, const uint8_t* input, size_t input_size,
- BROTLI_BOOL is_last, int* table, size_t table_bits, uint8_t cmd_depth[128],
- uint16_t cmd_bits[128], size_t* cmd_code_numbits, uint8_t* cmd_code,
- size_t* storage_ix, uint8_t* storage) {
- uint32_t cmd_histo[128];
- const uint8_t* ip_end;
-
- /* "next_emit" is a pointer to the first byte that is not covered by a
- previous copy. Bytes between "next_emit" and the start of the next copy or
- the end of the input will be emitted as literal bytes. */
- const uint8_t* next_emit = input;
- /* Save the start of the first block for position and distance computations.
- */
- const uint8_t* base_ip = input;
-
- static const size_t kFirstBlockSize = 3 << 15;
- static const size_t kMergeBlockSize = 1 << 16;
-
- const size_t kInputMarginBytes = BROTLI_WINDOW_GAP;
- const size_t kMinMatchLen = 5;
-
- const uint8_t* metablock_start = input;
- size_t block_size = BROTLI_MIN(size_t, input_size, kFirstBlockSize);
- size_t total_block_size = block_size;
- /* Save the bit position of the MLEN field of the meta-block header, so that
- we can update it later if we decide to extend this meta-block. */
- size_t mlen_storage_ix = *storage_ix + 3;
-
- uint8_t lit_depth[256];
- uint16_t lit_bits[256];
-
- size_t literal_ratio;
-
- const uint8_t* ip;
- int last_distance;
-
- const size_t shift = 64u - table_bits;
-
- BrotliStoreMetaBlockHeader(block_size, 0, storage_ix, storage);
- /* No block splits, no contexts. */
- BrotliWriteBits(13, 0, storage_ix, storage);
-
- literal_ratio = BuildAndStoreLiteralPrefixCode(
- m, input, block_size, lit_depth, lit_bits, storage_ix, storage);
- if (BROTLI_IS_OOM(m)) return;
-
- {
- /* Store the pre-compressed command and distance prefix codes. */
- size_t i;
- for (i = 0; i + 7 < *cmd_code_numbits; i += 8) {
- BrotliWriteBits(8, cmd_code[i >> 3], storage_ix, storage);
- }
- }
- BrotliWriteBits(*cmd_code_numbits & 7, cmd_code[*cmd_code_numbits >> 3],
- storage_ix, storage);
-
- emit_commands:
- /* Initialize the command and distance histograms. We will gather
- statistics of command and distance codes during the processing
- of this block and use it to update the command and distance
- prefix codes for the next block. */
- memcpy(cmd_histo, kCmdHistoSeed, sizeof(kCmdHistoSeed));
-
- /* "ip" is the input pointer. */
- ip = input;
- last_distance = -1;
- ip_end = input + block_size;
-
- if (BROTLI_PREDICT_TRUE(block_size >= kInputMarginBytes)) {
- /* For the last block, we need to keep a 16 bytes margin so that we can be
- sure that all distances are at most window size - 16.
- For all other blocks, we only need to keep a margin of 5 bytes so that
- we don't go over the block size with a copy. */
- const size_t len_limit = BROTLI_MIN(size_t, block_size - kMinMatchLen,
- input_size - kInputMarginBytes);
- const uint8_t* ip_limit = input + len_limit;
-
- uint32_t next_hash;
- for (next_hash = Hash(++ip, shift); ; ) {
- /* Step 1: Scan forward in the input looking for a 5-byte-long match.
- If we get close to exhausting the input then goto emit_remainder.
-
- Heuristic match skipping: If 32 bytes are scanned with no matches
- found, start looking only at every other byte. If 32 more bytes are
- scanned, look at every third byte, etc.. When a match is found,
- immediately go back to looking at every byte. This is a small loss
- (~5% performance, ~0.1% density) for compressible data due to more
- bookkeeping, but for non-compressible data (such as JPEG) it's a huge
- win since the compressor quickly "realizes" the data is incompressible
- and doesn't bother looking for matches everywhere.
-
- The "skip" variable keeps track of how many bytes there are since the
- last match; dividing it by 32 (i.e. right-shifting by five) gives the
- number of bytes to move ahead for each iteration. */
- uint32_t skip = 32;
-
- const uint8_t* next_ip = ip;
- const uint8_t* candidate;
- BROTLI_DCHECK(next_emit < ip);
-trawl:
- do {
- uint32_t hash = next_hash;
- uint32_t bytes_between_hash_lookups = skip++ >> 5;
- BROTLI_DCHECK(hash == Hash(next_ip, shift));
- ip = next_ip;
- next_ip = ip + bytes_between_hash_lookups;
- if (BROTLI_PREDICT_FALSE(next_ip > ip_limit)) {
- goto emit_remainder;
- }
- next_hash = Hash(next_ip, shift);
- candidate = ip - last_distance;
- if (IsMatch(ip, candidate)) {
- if (BROTLI_PREDICT_TRUE(candidate < ip)) {
- table[hash] = (int)(ip - base_ip);
- break;
- }
- }
- candidate = base_ip + table[hash];
- BROTLI_DCHECK(candidate >= base_ip);
- BROTLI_DCHECK(candidate < ip);
-
- table[hash] = (int)(ip - base_ip);
- } while (BROTLI_PREDICT_TRUE(!IsMatch(ip, candidate)));
-
- /* Check copy distance. If candidate is not feasible, continue search.
- Checking is done outside of hot loop to reduce overhead. */
- if (ip - candidate > MAX_DISTANCE) goto trawl;
-
- /* Step 2: Emit the found match together with the literal bytes from
- "next_emit" to the bit stream, and then see if we can find a next match
- immediately afterwards. Repeat until we find no match for the input
- without emitting some literal bytes. */
-
- {
- /* We have a 5-byte match at ip, and we need to emit bytes in
- [next_emit, ip). */
- const uint8_t* base = ip;
- size_t matched = 5 + FindMatchLengthWithLimit(
- candidate + 5, ip + 5, (size_t)(ip_end - ip) - 5);
- int distance = (int)(base - candidate); /* > 0 */
- size_t insert = (size_t)(base - next_emit);
- ip += matched;
- BROTLI_DCHECK(0 == memcmp(base, candidate, matched));
- if (BROTLI_PREDICT_TRUE(insert < 6210)) {
- EmitInsertLen(insert, cmd_depth, cmd_bits, cmd_histo,
- storage_ix, storage);
- } else if (ShouldUseUncompressedMode(metablock_start, next_emit, insert,
- literal_ratio)) {
- EmitUncompressedMetaBlock(metablock_start, base, mlen_storage_ix - 3,
- storage_ix, storage);
- input_size -= (size_t)(base - input);
- input = base;
- next_emit = input;
- goto next_block;
- } else {
- EmitLongInsertLen(insert, cmd_depth, cmd_bits, cmd_histo,
- storage_ix, storage);
- }
- EmitLiterals(next_emit, insert, lit_depth, lit_bits,
- storage_ix, storage);
- if (distance == last_distance) {
- BrotliWriteBits(cmd_depth[64], cmd_bits[64], storage_ix, storage);
- ++cmd_histo[64];
- } else {
- EmitDistance((size_t)distance, cmd_depth, cmd_bits,
- cmd_histo, storage_ix, storage);
- last_distance = distance;
- }
- EmitCopyLenLastDistance(matched, cmd_depth, cmd_bits, cmd_histo,
- storage_ix, storage);
-
- next_emit = ip;
- if (BROTLI_PREDICT_FALSE(ip >= ip_limit)) {
- goto emit_remainder;
- }
- /* We could immediately start working at ip now, but to improve
- compression we first update "table" with the hashes of some positions
- within the last copy. */
- {
- uint64_t input_bytes = BROTLI_UNALIGNED_LOAD64LE(ip - 3);
- uint32_t prev_hash = HashBytesAtOffset(input_bytes, 0, shift);
- uint32_t cur_hash = HashBytesAtOffset(input_bytes, 3, shift);
- table[prev_hash] = (int)(ip - base_ip - 3);
- prev_hash = HashBytesAtOffset(input_bytes, 1, shift);
- table[prev_hash] = (int)(ip - base_ip - 2);
- prev_hash = HashBytesAtOffset(input_bytes, 2, shift);
- table[prev_hash] = (int)(ip - base_ip - 1);
-
- candidate = base_ip + table[cur_hash];
- table[cur_hash] = (int)(ip - base_ip);
- }
- }
-
- while (IsMatch(ip, candidate)) {
- /* We have a 5-byte match at ip, and no need to emit any literal bytes
- prior to ip. */
- const uint8_t* base = ip;
- size_t matched = 5 + FindMatchLengthWithLimit(
- candidate + 5, ip + 5, (size_t)(ip_end - ip) - 5);
- if (ip - candidate > MAX_DISTANCE) break;
- ip += matched;
- last_distance = (int)(base - candidate); /* > 0 */
- BROTLI_DCHECK(0 == memcmp(base, candidate, matched));
- EmitCopyLen(matched, cmd_depth, cmd_bits, cmd_histo,
- storage_ix, storage);
- EmitDistance((size_t)last_distance, cmd_depth, cmd_bits,
- cmd_histo, storage_ix, storage);
-
- next_emit = ip;
- if (BROTLI_PREDICT_FALSE(ip >= ip_limit)) {
- goto emit_remainder;
- }
- /* We could immediately start working at ip now, but to improve
- compression we first update "table" with the hashes of some positions
- within the last copy. */
- {
- uint64_t input_bytes = BROTLI_UNALIGNED_LOAD64LE(ip - 3);
- uint32_t prev_hash = HashBytesAtOffset(input_bytes, 0, shift);
- uint32_t cur_hash = HashBytesAtOffset(input_bytes, 3, shift);
- table[prev_hash] = (int)(ip - base_ip - 3);
- prev_hash = HashBytesAtOffset(input_bytes, 1, shift);
- table[prev_hash] = (int)(ip - base_ip - 2);
- prev_hash = HashBytesAtOffset(input_bytes, 2, shift);
- table[prev_hash] = (int)(ip - base_ip - 1);
-
- candidate = base_ip + table[cur_hash];
- table[cur_hash] = (int)(ip - base_ip);
- }
- }
-
- next_hash = Hash(++ip, shift);
- }
- }
-
- emit_remainder:
- BROTLI_DCHECK(next_emit <= ip_end);
- input += block_size;
- input_size -= block_size;
- block_size = BROTLI_MIN(size_t, input_size, kMergeBlockSize);
-
- /* Decide if we want to continue this meta-block instead of emitting the
- last insert-only command. */
- if (input_size > 0 &&
- total_block_size + block_size <= (1 << 20) &&
- ShouldMergeBlock(input, block_size, lit_depth)) {
- BROTLI_DCHECK(total_block_size > (1 << 16));
- /* Update the size of the current meta-block and continue emitting commands.
- We can do this because the current size and the new size both have 5
- nibbles. */
- total_block_size += block_size;
- UpdateBits(20, (uint32_t)(total_block_size - 1), mlen_storage_ix, storage);
- goto emit_commands;
- }
-
- /* Emit the remaining bytes as literals. */
- if (next_emit < ip_end) {
- const size_t insert = (size_t)(ip_end - next_emit);
- if (BROTLI_PREDICT_TRUE(insert < 6210)) {
- EmitInsertLen(insert, cmd_depth, cmd_bits, cmd_histo,
- storage_ix, storage);
- EmitLiterals(next_emit, insert, lit_depth, lit_bits, storage_ix, storage);
- } else if (ShouldUseUncompressedMode(metablock_start, next_emit, insert,
- literal_ratio)) {
- EmitUncompressedMetaBlock(metablock_start, ip_end, mlen_storage_ix - 3,
- storage_ix, storage);
- } else {
- EmitLongInsertLen(insert, cmd_depth, cmd_bits, cmd_histo,
- storage_ix, storage);
- EmitLiterals(next_emit, insert, lit_depth, lit_bits,
- storage_ix, storage);
- }
- }
- next_emit = ip_end;
-
-next_block:
- /* If we have more data, write a new meta-block header and prefix codes and
- then continue emitting commands. */
- if (input_size > 0) {
- metablock_start = input;
- block_size = BROTLI_MIN(size_t, input_size, kFirstBlockSize);
- total_block_size = block_size;
- /* Save the bit position of the MLEN field of the meta-block header, so that
- we can update it later if we decide to extend this meta-block. */
- mlen_storage_ix = *storage_ix + 3;
- BrotliStoreMetaBlockHeader(block_size, 0, storage_ix, storage);
- /* No block splits, no contexts. */
- BrotliWriteBits(13, 0, storage_ix, storage);
- literal_ratio = BuildAndStoreLiteralPrefixCode(
- m, input, block_size, lit_depth, lit_bits, storage_ix, storage);
- if (BROTLI_IS_OOM(m)) return;
- BuildAndStoreCommandPrefixCode(cmd_histo, cmd_depth, cmd_bits,
- storage_ix, storage);
- goto emit_commands;
- }
-
- if (!is_last) {
- /* If this is not the last block, update the command and distance prefix
- codes for the next block and store the compressed forms. */
- cmd_code[0] = 0;
- *cmd_code_numbits = 0;
- BuildAndStoreCommandPrefixCode(cmd_histo, cmd_depth, cmd_bits,
- cmd_code_numbits, cmd_code);
- }
-}
-
-#define FOR_TABLE_BITS_(X) X(9) X(11) X(13) X(15)
-
-#define BAKE_METHOD_PARAM_(B) \
-static BROTLI_NOINLINE void BrotliCompressFragmentFastImpl ## B( \
- MemoryManager* m, const uint8_t* input, size_t input_size, \
- BROTLI_BOOL is_last, int* table, uint8_t cmd_depth[128], \
- uint16_t cmd_bits[128], size_t* cmd_code_numbits, uint8_t* cmd_code, \
- size_t* storage_ix, uint8_t* storage) { \
- BrotliCompressFragmentFastImpl(m, input, input_size, is_last, table, B, \
- cmd_depth, cmd_bits, cmd_code_numbits, cmd_code, storage_ix, storage); \
-}
-FOR_TABLE_BITS_(BAKE_METHOD_PARAM_)
-#undef BAKE_METHOD_PARAM_
-
-void BrotliCompressFragmentFast(
- MemoryManager* m, const uint8_t* input, size_t input_size,
- BROTLI_BOOL is_last, int* table, size_t table_size, uint8_t cmd_depth[128],
- uint16_t cmd_bits[128], size_t* cmd_code_numbits, uint8_t* cmd_code,
- size_t* storage_ix, uint8_t* storage) {
- const size_t initial_storage_ix = *storage_ix;
- const size_t table_bits = Log2FloorNonZero(table_size);
-
- if (input_size == 0) {
- BROTLI_DCHECK(is_last);
- BrotliWriteBits(1, 1, storage_ix, storage); /* islast */
- BrotliWriteBits(1, 1, storage_ix, storage); /* isempty */
- *storage_ix = (*storage_ix + 7u) & ~7u;
- return;
- }
-
- switch (table_bits) {
-#define CASE_(B) \
- case B: \
- BrotliCompressFragmentFastImpl ## B( \
- m, input, input_size, is_last, table, cmd_depth, cmd_bits, \
- cmd_code_numbits, cmd_code, storage_ix, storage); \
- break;
- FOR_TABLE_BITS_(CASE_)
-#undef CASE_
- default: BROTLI_DCHECK(0); break;
- }
-
- /* If output is larger than single uncompressed block, rewrite it. */
- if (*storage_ix - initial_storage_ix > 31 + (input_size << 3)) {
- EmitUncompressedMetaBlock(input, input + input_size, initial_storage_ix,
- storage_ix, storage);
- }
-
- if (is_last) {
- BrotliWriteBits(1, 1, storage_ix, storage); /* islast */
- BrotliWriteBits(1, 1, storage_ix, storage); /* isempty */
- *storage_ix = (*storage_ix + 7u) & ~7u;
- }
-}
-
-#undef FOR_TABLE_BITS_
-
-#if defined(__cplusplus) || defined(c_plusplus)
-} /* extern "C" */
-#endif
diff --git a/BaseTools/Source/C/BrotliCompress/enc/compress_fragment_two_pass.c b/BaseTools/Source/C/BrotliCompress/enc/compress_fragment_two_pass.c
deleted file mode 100644
index 0d4d3b597eb9..000000000000
--- a/BaseTools/Source/C/BrotliCompress/enc/compress_fragment_two_pass.c
+++ /dev/null
@@ -1,645 +0,0 @@
-/* Copyright 2015 Google Inc. All Rights Reserved.
-
- Distributed under MIT license.
- See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
-*/
-
-/* Function for fast encoding of an input fragment, independently from the input
- history. This function uses two-pass processing: in the first pass we save
- the found backward matches and literal bytes into a buffer, and in the
- second pass we emit them into the bit stream using prefix codes built based
- on the actual command and literal byte histograms. */
-
-#include "./compress_fragment_two_pass.h"
-
-#include <string.h> /* memcmp, memcpy, memset */
-
-#include "../common/constants.h"
-#include "../common/platform.h"
-#include <brotli/types.h>
-#include "./bit_cost.h"
-#include "./brotli_bit_stream.h"
-#include "./entropy_encode.h"
-#include "./fast_log.h"
-#include "./find_match_length.h"
-#include "./memory.h"
-#include "./write_bits.h"
-
-#if defined(__cplusplus) || defined(c_plusplus)
-extern "C" {
-#endif
-
-#define MAX_DISTANCE (long)BROTLI_MAX_BACKWARD_LIMIT(18)
-
-/* kHashMul32 multiplier has these properties:
- * The multiplier must be odd. Otherwise we may lose the highest bit.
- * No long streaks of ones or zeros.
- * There is no effort to ensure that it is a prime, the oddity is enough
- for this use.
- * The number has been tuned heuristically against compression benchmarks. */
-static const uint32_t kHashMul32 = 0x1E35A7BD;
-
-static BROTLI_INLINE uint32_t Hash(const uint8_t* p,
- size_t shift, size_t length) {
- const uint64_t h =
- (BROTLI_UNALIGNED_LOAD64LE(p) << ((8 - length) * 8)) * kHashMul32;
- return (uint32_t)(h >> shift);
-}
-
-static BROTLI_INLINE uint32_t HashBytesAtOffset(uint64_t v, size_t offset,
- size_t shift, size_t length) {
- BROTLI_DCHECK(offset <= 8 - length);
- {
- const uint64_t h = ((v >> (8 * offset)) << ((8 - length) * 8)) * kHashMul32;
- return (uint32_t)(h >> shift);
- }
-}
-
-static BROTLI_INLINE BROTLI_BOOL IsMatch(const uint8_t* p1, const uint8_t* p2,
- size_t length) {
- if (BrotliUnalignedRead32(p1) == BrotliUnalignedRead32(p2)) {
- if (length == 4) return BROTLI_TRUE;
- return TO_BROTLI_BOOL(p1[4] == p2[4] && p1[5] == p2[5]);
- }
- return BROTLI_FALSE;
-}
-
-/* Builds a command and distance prefix code (each 64 symbols) into "depth" and
- "bits" based on "histogram" and stores it into the bit stream. */
-static void BuildAndStoreCommandPrefixCode(
- const uint32_t histogram[128],
- uint8_t depth[128], uint16_t bits[128],
- size_t* storage_ix, uint8_t* storage) {
- /* Tree size for building a tree over 64 symbols is 2 * 64 + 1. */
- HuffmanTree tree[129];
- uint8_t cmd_depth[BROTLI_NUM_COMMAND_SYMBOLS] = { 0 };
- uint16_t cmd_bits[64];
- BrotliCreateHuffmanTree(histogram, 64, 15, tree, depth);
- BrotliCreateHuffmanTree(&histogram[64], 64, 14, tree, &depth[64]);
- /* We have to jump through a few hoops here in order to compute
- the command bits because the symbols are in a different order than in
- the full alphabet. This looks complicated, but having the symbols
- in this order in the command bits saves a few branches in the Emit*
- functions. */
- memcpy(cmd_depth, depth + 24, 24);
- memcpy(cmd_depth + 24, depth, 8);
- memcpy(cmd_depth + 32, depth + 48, 8);
- memcpy(cmd_depth + 40, depth + 8, 8);
- memcpy(cmd_depth + 48, depth + 56, 8);
- memcpy(cmd_depth + 56, depth + 16, 8);
- BrotliConvertBitDepthsToSymbols(cmd_depth, 64, cmd_bits);
- memcpy(bits, cmd_bits + 24, 16);
- memcpy(bits + 8, cmd_bits + 40, 16);
- memcpy(bits + 16, cmd_bits + 56, 16);
- memcpy(bits + 24, cmd_bits, 48);
- memcpy(bits + 48, cmd_bits + 32, 16);
- memcpy(bits + 56, cmd_bits + 48, 16);
- BrotliConvertBitDepthsToSymbols(&depth[64], 64, &bits[64]);
- {
- /* Create the bit length array for the full command alphabet. */
- size_t i;
- memset(cmd_depth, 0, 64); /* only 64 first values were used */
- memcpy(cmd_depth, depth + 24, 8);
- memcpy(cmd_depth + 64, depth + 32, 8);
- memcpy(cmd_depth + 128, depth + 40, 8);
- memcpy(cmd_depth + 192, depth + 48, 8);
- memcpy(cmd_depth + 384, depth + 56, 8);
- for (i = 0; i < 8; ++i) {
- cmd_depth[128 + 8 * i] = depth[i];
- cmd_depth[256 + 8 * i] = depth[8 + i];
- cmd_depth[448 + 8 * i] = depth[16 + i];
- }
- BrotliStoreHuffmanTree(
- cmd_depth, BROTLI_NUM_COMMAND_SYMBOLS, tree, storage_ix, storage);
- }
- BrotliStoreHuffmanTree(&depth[64], 64, tree, storage_ix, storage);
-}
-
-static BROTLI_INLINE void EmitInsertLen(
- uint32_t insertlen, uint32_t** commands) {
- if (insertlen < 6) {
- **commands = insertlen;
- } else if (insertlen < 130) {
- const uint32_t tail = insertlen - 2;
- const uint32_t nbits = Log2FloorNonZero(tail) - 1u;
- const uint32_t prefix = tail >> nbits;
- const uint32_t inscode = (nbits << 1) + prefix + 2;
- const uint32_t extra = tail - (prefix << nbits);
- **commands = inscode | (extra << 8);
- } else if (insertlen < 2114) {
- const uint32_t tail = insertlen - 66;
- const uint32_t nbits = Log2FloorNonZero(tail);
- const uint32_t code = nbits + 10;
- const uint32_t extra = tail - (1u << nbits);
- **commands = code | (extra << 8);
- } else if (insertlen < 6210) {
- const uint32_t extra = insertlen - 2114;
- **commands = 21 | (extra << 8);
- } else if (insertlen < 22594) {
- const uint32_t extra = insertlen - 6210;
- **commands = 22 | (extra << 8);
- } else {
- const uint32_t extra = insertlen - 22594;
- **commands = 23 | (extra << 8);
- }
- ++(*commands);
-}
-
-static BROTLI_INLINE void EmitCopyLen(size_t copylen, uint32_t** commands) {
- if (copylen < 10) {
- **commands = (uint32_t)(copylen + 38);
- } else if (copylen < 134) {
- const size_t tail = copylen - 6;
- const size_t nbits = Log2FloorNonZero(tail) - 1;
- const size_t prefix = tail >> nbits;
- const size_t code = (nbits << 1) + prefix + 44;
- const size_t extra = tail - (prefix << nbits);
- **commands = (uint32_t)(code | (extra << 8));
- } else if (copylen < 2118) {
- const size_t tail = copylen - 70;
- const size_t nbits = Log2FloorNonZero(tail);
- const size_t code = nbits + 52;
- const size_t extra = tail - ((size_t)1 << nbits);
- **commands = (uint32_t)(code | (extra << 8));
- } else {
- const size_t extra = copylen - 2118;
- **commands = (uint32_t)(63 | (extra << 8));
- }
- ++(*commands);
-}
-
-static BROTLI_INLINE void EmitCopyLenLastDistance(
- size_t copylen, uint32_t** commands) {
- if (copylen < 12) {
- **commands = (uint32_t)(copylen + 20);
- ++(*commands);
- } else if (copylen < 72) {
- const size_t tail = copylen - 8;
- const size_t nbits = Log2FloorNonZero(tail) - 1;
- const size_t prefix = tail >> nbits;
- const size_t code = (nbits << 1) + prefix + 28;
- const size_t extra = tail - (prefix << nbits);
- **commands = (uint32_t)(code | (extra << 8));
- ++(*commands);
- } else if (copylen < 136) {
- const size_t tail = copylen - 8;
- const size_t code = (tail >> 5) + 54;
- const size_t extra = tail & 31;
- **commands = (uint32_t)(code | (extra << 8));
- ++(*commands);
- **commands = 64;
- ++(*commands);
- } else if (copylen < 2120) {
- const size_t tail = copylen - 72;
- const size_t nbits = Log2FloorNonZero(tail);
- const size_t code = nbits + 52;
- const size_t extra = tail - ((size_t)1 << nbits);
- **commands = (uint32_t)(code | (extra << 8));
- ++(*commands);
- **commands = 64;
- ++(*commands);
- } else {
- const size_t extra = copylen - 2120;
- **commands = (uint32_t)(63 | (extra << 8));
- ++(*commands);
- **commands = 64;
- ++(*commands);
- }
-}
-
-static BROTLI_INLINE void EmitDistance(uint32_t distance, uint32_t** commands) {
- uint32_t d = distance + 3;
- uint32_t nbits = Log2FloorNonZero(d) - 1;
- const uint32_t prefix = (d >> nbits) & 1;
- const uint32_t offset = (2 + prefix) << nbits;
- const uint32_t distcode = 2 * (nbits - 1) + prefix + 80;
- uint32_t extra = d - offset;
- **commands = distcode | (extra << 8);
- ++(*commands);
-}
-
-/* REQUIRES: len <= 1 << 24. */
-static void BrotliStoreMetaBlockHeader(
- size_t len, BROTLI_BOOL is_uncompressed, size_t* storage_ix,
- uint8_t* storage) {
- size_t nibbles = 6;
- /* ISLAST */
- BrotliWriteBits(1, 0, storage_ix, storage);
- if (len <= (1U << 16)) {
- nibbles = 4;
- } else if (len <= (1U << 20)) {
- nibbles = 5;
- }
- BrotliWriteBits(2, nibbles - 4, storage_ix, storage);
- BrotliWriteBits(nibbles * 4, len - 1, storage_ix, storage);
- /* ISUNCOMPRESSED */
- BrotliWriteBits(1, (uint64_t)is_uncompressed, storage_ix, storage);
-}
-
-static BROTLI_INLINE void CreateCommands(const uint8_t* input,
- size_t block_size, size_t input_size, const uint8_t* base_ip, int* table,
- size_t table_bits, size_t min_match,
- uint8_t** literals, uint32_t** commands) {
- /* "ip" is the input pointer. */
- const uint8_t* ip = input;
- const size_t shift = 64u - table_bits;
- const uint8_t* ip_end = input + block_size;
- /* "next_emit" is a pointer to the first byte that is not covered by a
- previous copy. Bytes between "next_emit" and the start of the next copy or
- the end of the input will be emitted as literal bytes. */
- const uint8_t* next_emit = input;
-
- int last_distance = -1;
- const size_t kInputMarginBytes = BROTLI_WINDOW_GAP;
-
- if (BROTLI_PREDICT_TRUE(block_size >= kInputMarginBytes)) {
- /* For the last block, we need to keep a 16 bytes margin so that we can be
- sure that all distances are at most window size - 16.
- For all other blocks, we only need to keep a margin of 5 bytes so that
- we don't go over the block size with a copy. */
- const size_t len_limit = BROTLI_MIN(size_t, block_size - min_match,
- input_size - kInputMarginBytes);
- const uint8_t* ip_limit = input + len_limit;
-
- uint32_t next_hash;
- for (next_hash = Hash(++ip, shift, min_match); ; ) {
- /* Step 1: Scan forward in the input looking for a 6-byte-long match.
- If we get close to exhausting the input then goto emit_remainder.
-
- Heuristic match skipping: If 32 bytes are scanned with no matches
- found, start looking only at every other byte. If 32 more bytes are
- scanned, look at every third byte, etc.. When a match is found,
- immediately go back to looking at every byte. This is a small loss
- (~5% performance, ~0.1% density) for compressible data due to more
- bookkeeping, but for non-compressible data (such as JPEG) it's a huge
- win since the compressor quickly "realizes" the data is incompressible
- and doesn't bother looking for matches everywhere.
-
- The "skip" variable keeps track of how many bytes there are since the
- last match; dividing it by 32 (ie. right-shifting by five) gives the
- number of bytes to move ahead for each iteration. */
- uint32_t skip = 32;
-
- const uint8_t* next_ip = ip;
- const uint8_t* candidate;
-
- BROTLI_DCHECK(next_emit < ip);
-trawl:
- do {
- uint32_t hash = next_hash;
- uint32_t bytes_between_hash_lookups = skip++ >> 5;
- ip = next_ip;
- BROTLI_DCHECK(hash == Hash(ip, shift, min_match));
- next_ip = ip + bytes_between_hash_lookups;
- if (BROTLI_PREDICT_FALSE(next_ip > ip_limit)) {
- goto emit_remainder;
- }
- next_hash = Hash(next_ip, shift, min_match);
- candidate = ip - last_distance;
- if (IsMatch(ip, candidate, min_match)) {
- if (BROTLI_PREDICT_TRUE(candidate < ip)) {
- table[hash] = (int)(ip - base_ip);
- break;
- }
- }
- candidate = base_ip + table[hash];
- BROTLI_DCHECK(candidate >= base_ip);
- BROTLI_DCHECK(candidate < ip);
-
- table[hash] = (int)(ip - base_ip);
- } while (BROTLI_PREDICT_TRUE(!IsMatch(ip, candidate, min_match)));
-
- /* Check copy distance. If candidate is not feasible, continue search.
- Checking is done outside of hot loop to reduce overhead. */
- if (ip - candidate > MAX_DISTANCE) goto trawl;
-
- /* Step 2: Emit the found match together with the literal bytes from
- "next_emit", and then see if we can find a next match immediately
- afterwards. Repeat until we find no match for the input
- without emitting some literal bytes. */
-
- {
- /* We have a 6-byte match at ip, and we need to emit bytes in
- [next_emit, ip). */
- const uint8_t* base = ip;
- size_t matched = min_match + FindMatchLengthWithLimit(
- candidate + min_match, ip + min_match,
- (size_t)(ip_end - ip) - min_match);
- int distance = (int)(base - candidate); /* > 0 */
- int insert = (int)(base - next_emit);
- ip += matched;
- BROTLI_DCHECK(0 == memcmp(base, candidate, matched));
- EmitInsertLen((uint32_t)insert, commands);
- memcpy(*literals, next_emit, (size_t)insert);
- *literals += insert;
- if (distance == last_distance) {
- **commands = 64;
- ++(*commands);
- } else {
- EmitDistance((uint32_t)distance, commands);
- last_distance = distance;
- }
- EmitCopyLenLastDistance(matched, commands);
-
- next_emit = ip;
- if (BROTLI_PREDICT_FALSE(ip >= ip_limit)) {
- goto emit_remainder;
- }
- {
- /* We could immediately start working at ip now, but to improve
- compression we first update "table" with the hashes of some
- positions within the last copy. */
- uint64_t input_bytes;
- uint32_t cur_hash;
- uint32_t prev_hash;
- if (min_match == 4) {
- input_bytes = BROTLI_UNALIGNED_LOAD64LE(ip - 3);
- cur_hash = HashBytesAtOffset(input_bytes, 3, shift, min_match);
- prev_hash = HashBytesAtOffset(input_bytes, 0, shift, min_match);
- table[prev_hash] = (int)(ip - base_ip - 3);
- prev_hash = HashBytesAtOffset(input_bytes, 1, shift, min_match);
- table[prev_hash] = (int)(ip - base_ip - 2);
- prev_hash = HashBytesAtOffset(input_bytes, 0, shift, min_match);
- table[prev_hash] = (int)(ip - base_ip - 1);
- } else {
- input_bytes = BROTLI_UNALIGNED_LOAD64LE(ip - 5);
- prev_hash = HashBytesAtOffset(input_bytes, 0, shift, min_match);
- table[prev_hash] = (int)(ip - base_ip - 5);
- prev_hash = HashBytesAtOffset(input_bytes, 1, shift, min_match);
- table[prev_hash] = (int)(ip - base_ip - 4);
- prev_hash = HashBytesAtOffset(input_bytes, 2, shift, min_match);
- table[prev_hash] = (int)(ip - base_ip - 3);
- input_bytes = BROTLI_UNALIGNED_LOAD64LE(ip - 2);
- cur_hash = HashBytesAtOffset(input_bytes, 2, shift, min_match);
- prev_hash = HashBytesAtOffset(input_bytes, 0, shift, min_match);
- table[prev_hash] = (int)(ip - base_ip - 2);
- prev_hash = HashBytesAtOffset(input_bytes, 1, shift, min_match);
- table[prev_hash] = (int)(ip - base_ip - 1);
- }
-
- candidate = base_ip + table[cur_hash];
- table[cur_hash] = (int)(ip - base_ip);
- }
- }
-
- while (ip - candidate <= MAX_DISTANCE &&
- IsMatch(ip, candidate, min_match)) {
- /* We have a 6-byte match at ip, and no need to emit any
- literal bytes prior to ip. */
- const uint8_t* base = ip;
- size_t matched = min_match + FindMatchLengthWithLimit(
- candidate + min_match, ip + min_match,
- (size_t)(ip_end - ip) - min_match);
- ip += matched;
- last_distance = (int)(base - candidate); /* > 0 */
- BROTLI_DCHECK(0 == memcmp(base, candidate, matched));
- EmitCopyLen(matched, commands);
- EmitDistance((uint32_t)last_distance, commands);
-
- next_emit = ip;
- if (BROTLI_PREDICT_FALSE(ip >= ip_limit)) {
- goto emit_remainder;
- }
- {
- /* We could immediately start working at ip now, but to improve
- compression we first update "table" with the hashes of some
- positions within the last copy. */
- uint64_t input_bytes;
- uint32_t cur_hash;
- uint32_t prev_hash;
- if (min_match == 4) {
- input_bytes = BROTLI_UNALIGNED_LOAD64LE(ip - 3);
- cur_hash = HashBytesAtOffset(input_bytes, 3, shift, min_match);
- prev_hash = HashBytesAtOffset(input_bytes, 0, shift, min_match);
- table[prev_hash] = (int)(ip - base_ip - 3);
- prev_hash = HashBytesAtOffset(input_bytes, 1, shift, min_match);
- table[prev_hash] = (int)(ip - base_ip - 2);
- prev_hash = HashBytesAtOffset(input_bytes, 2, shift, min_match);
- table[prev_hash] = (int)(ip - base_ip - 1);
- } else {
- input_bytes = BROTLI_UNALIGNED_LOAD64LE(ip - 5);
- prev_hash = HashBytesAtOffset(input_bytes, 0, shift, min_match);
- table[prev_hash] = (int)(ip - base_ip - 5);
- prev_hash = HashBytesAtOffset(input_bytes, 1, shift, min_match);
- table[prev_hash] = (int)(ip - base_ip - 4);
- prev_hash = HashBytesAtOffset(input_bytes, 2, shift, min_match);
- table[prev_hash] = (int)(ip - base_ip - 3);
- input_bytes = BROTLI_UNALIGNED_LOAD64LE(ip - 2);
- cur_hash = HashBytesAtOffset(input_bytes, 2, shift, min_match);
- prev_hash = HashBytesAtOffset(input_bytes, 0, shift, min_match);
- table[prev_hash] = (int)(ip - base_ip - 2);
- prev_hash = HashBytesAtOffset(input_bytes, 1, shift, min_match);
- table[prev_hash] = (int)(ip - base_ip - 1);
- }
-
- candidate = base_ip + table[cur_hash];
- table[cur_hash] = (int)(ip - base_ip);
- }
- }
-
- next_hash = Hash(++ip, shift, min_match);
- }
- }
-
-emit_remainder:
- BROTLI_DCHECK(next_emit <= ip_end);
- /* Emit the remaining bytes as literals. */
- if (next_emit < ip_end) {
- const uint32_t insert = (uint32_t)(ip_end - next_emit);
- EmitInsertLen(insert, commands);
- memcpy(*literals, next_emit, insert);
- *literals += insert;
- }
-}
-
-static void StoreCommands(MemoryManager* m,
- const uint8_t* literals, const size_t num_literals,
- const uint32_t* commands, const size_t num_commands,
- size_t* storage_ix, uint8_t* storage) {
- static const uint32_t kNumExtraBits[128] = {
- 0, 0, 0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 7, 8, 9, 10, 12, 14, 24,
- 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4,
- 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 7, 8, 9, 10, 24,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8,
- 9, 9, 10, 10, 11, 11, 12, 12, 13, 13, 14, 14, 15, 15, 16, 16,
- 17, 17, 18, 18, 19, 19, 20, 20, 21, 21, 22, 22, 23, 23, 24, 24,
- };
- static const uint32_t kInsertOffset[24] = {
- 0, 1, 2, 3, 4, 5, 6, 8, 10, 14, 18, 26, 34, 50, 66, 98, 130, 194, 322, 578,
- 1090, 2114, 6210, 22594,
- };
-
- uint8_t lit_depths[256];
- uint16_t lit_bits[256];
- uint32_t lit_histo[256] = { 0 };
- uint8_t cmd_depths[128] = { 0 };
- uint16_t cmd_bits[128] = { 0 };
- uint32_t cmd_histo[128] = { 0 };
- size_t i;
- for (i = 0; i < num_literals; ++i) {
- ++lit_histo[literals[i]];
- }
- BrotliBuildAndStoreHuffmanTreeFast(m, lit_histo, num_literals,
- /* max_bits = */ 8,
- lit_depths, lit_bits,
- storage_ix, storage);
- if (BROTLI_IS_OOM(m)) return;
-
- for (i = 0; i < num_commands; ++i) {
- const uint32_t code = commands[i] & 0xFF;
- BROTLI_DCHECK(code < 128);
- ++cmd_histo[code];
- }
- cmd_histo[1] += 1;
- cmd_histo[2] += 1;
- cmd_histo[64] += 1;
- cmd_histo[84] += 1;
- BuildAndStoreCommandPrefixCode(cmd_histo, cmd_depths, cmd_bits,
- storage_ix, storage);
-
- for (i = 0; i < num_commands; ++i) {
- const uint32_t cmd = commands[i];
- const uint32_t code = cmd & 0xFF;
- const uint32_t extra = cmd >> 8;
- BROTLI_DCHECK(code < 128);
- BrotliWriteBits(cmd_depths[code], cmd_bits[code], storage_ix, storage);
- BrotliWriteBits(kNumExtraBits[code], extra, storage_ix, storage);
- if (code < 24) {
- const uint32_t insert = kInsertOffset[code] + extra;
- uint32_t j;
- for (j = 0; j < insert; ++j) {
- const uint8_t lit = *literals;
- BrotliWriteBits(lit_depths[lit], lit_bits[lit], storage_ix, storage);
- ++literals;
- }
- }
- }
-}
-
-/* Acceptable loss for uncompressible speedup is 2% */
-#define MIN_RATIO 0.98
-#define SAMPLE_RATE 43
-
-static BROTLI_BOOL ShouldCompress(
- const uint8_t* input, size_t input_size, size_t num_literals) {
- double corpus_size = (double)input_size;
- if (num_literals < MIN_RATIO * corpus_size) {
- return BROTLI_TRUE;
- } else {
- uint32_t literal_histo[256] = { 0 };
- const double max_total_bit_cost = corpus_size * 8 * MIN_RATIO / SAMPLE_RATE;
- size_t i;
- for (i = 0; i < input_size; i += SAMPLE_RATE) {
- ++literal_histo[input[i]];
- }
- return TO_BROTLI_BOOL(BitsEntropy(literal_histo, 256) < max_total_bit_cost);
- }
-}
-
-static void RewindBitPosition(const size_t new_storage_ix,
- size_t* storage_ix, uint8_t* storage) {
- const size_t bitpos = new_storage_ix & 7;
- const size_t mask = (1u << bitpos) - 1;
- storage[new_storage_ix >> 3] &= (uint8_t)mask;
- *storage_ix = new_storage_ix;
-}
-
-static void EmitUncompressedMetaBlock(const uint8_t* input, size_t input_size,
- size_t* storage_ix, uint8_t* storage) {
- BrotliStoreMetaBlockHeader(input_size, 1, storage_ix, storage);
- *storage_ix = (*storage_ix + 7u) & ~7u;
- memcpy(&storage[*storage_ix >> 3], input, input_size);
- *storage_ix += input_size << 3;
- storage[*storage_ix >> 3] = 0;
-}
-
-static BROTLI_INLINE void BrotliCompressFragmentTwoPassImpl(
- MemoryManager* m, const uint8_t* input, size_t input_size,
- BROTLI_BOOL is_last, uint32_t* command_buf, uint8_t* literal_buf,
- int* table, size_t table_bits, size_t min_match,
- size_t* storage_ix, uint8_t* storage) {
- /* Save the start of the first block for position and distance computations.
- */
- const uint8_t* base_ip = input;
- BROTLI_UNUSED(is_last);
-
- while (input_size > 0) {
- size_t block_size =
- BROTLI_MIN(size_t, input_size, kCompressFragmentTwoPassBlockSize);
- uint32_t* commands = command_buf;
- uint8_t* literals = literal_buf;
- size_t num_literals;
- CreateCommands(input, block_size, input_size, base_ip, table,
- table_bits, min_match, &literals, &commands);
- num_literals = (size_t)(literals - literal_buf);
- if (ShouldCompress(input, block_size, num_literals)) {
- const size_t num_commands = (size_t)(commands - command_buf);
- BrotliStoreMetaBlockHeader(block_size, 0, storage_ix, storage);
- /* No block splits, no contexts. */
- BrotliWriteBits(13, 0, storage_ix, storage);
- StoreCommands(m, literal_buf, num_literals, command_buf, num_commands,
- storage_ix, storage);
- if (BROTLI_IS_OOM(m)) return;
- } else {
- /* Since we did not find many backward references and the entropy of
- the data is close to 8 bits, we can simply emit an uncompressed block.
- This makes compression speed of uncompressible data about 3x faster. */
- EmitUncompressedMetaBlock(input, block_size, storage_ix, storage);
- }
- input += block_size;
- input_size -= block_size;
- }
-}
-
-#define FOR_TABLE_BITS_(X) \
- X(8) X(9) X(10) X(11) X(12) X(13) X(14) X(15) X(16) X(17)
-
-#define BAKE_METHOD_PARAM_(B) \
-static BROTLI_NOINLINE void BrotliCompressFragmentTwoPassImpl ## B( \
- MemoryManager* m, const uint8_t* input, size_t input_size, \
- BROTLI_BOOL is_last, uint32_t* command_buf, uint8_t* literal_buf, \
- int* table, size_t* storage_ix, uint8_t* storage) { \
- size_t min_match = (B <= 15) ? 4 : 6; \
- BrotliCompressFragmentTwoPassImpl(m, input, input_size, is_last, command_buf,\
- literal_buf, table, B, min_match, storage_ix, storage); \
-}
-FOR_TABLE_BITS_(BAKE_METHOD_PARAM_)
-#undef BAKE_METHOD_PARAM_
-
-void BrotliCompressFragmentTwoPass(
- MemoryManager* m, const uint8_t* input, size_t input_size,
- BROTLI_BOOL is_last, uint32_t* command_buf, uint8_t* literal_buf,
- int* table, size_t table_size, size_t* storage_ix, uint8_t* storage) {
- const size_t initial_storage_ix = *storage_ix;
- const size_t table_bits = Log2FloorNonZero(table_size);
- switch (table_bits) {
-#define CASE_(B) \
- case B: \
- BrotliCompressFragmentTwoPassImpl ## B( \
- m, input, input_size, is_last, command_buf, \
- literal_buf, table, storage_ix, storage); \
- break;
- FOR_TABLE_BITS_(CASE_)
-#undef CASE_
- default: BROTLI_DCHECK(0); break;
- }
-
- /* If output is larger than single uncompressed block, rewrite it. */
- if (*storage_ix - initial_storage_ix > 31 + (input_size << 3)) {
- RewindBitPosition(initial_storage_ix, storage_ix, storage);
- EmitUncompressedMetaBlock(input, input_size, storage_ix, storage);
- }
-
- if (is_last) {
- BrotliWriteBits(1, 1, storage_ix, storage); /* islast */
- BrotliWriteBits(1, 1, storage_ix, storage); /* isempty */
- *storage_ix = (*storage_ix + 7u) & ~7u;
- }
-}
-
-#undef FOR_TABLE_BITS_
-
-#if defined(__cplusplus) || defined(c_plusplus)
-} /* extern "C" */
-#endif
diff --git a/BaseTools/Source/C/BrotliCompress/enc/dictionary_hash.c b/BaseTools/Source/C/BrotliCompress/enc/dictionary_hash.c
deleted file mode 100644
index 03355c030372..000000000000
--- a/BaseTools/Source/C/BrotliCompress/enc/dictionary_hash.c
+++ /dev/null
@@ -1,1120 +0,0 @@
-/* Copyright 2015 Google Inc. All Rights Reserved.
-
- Distributed under MIT license.
- See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
-*/
-
-/* Hash table on the 4-byte prefixes of static dictionary words. */
-
-#include "../common/platform.h"
-#include "./dictionary_hash.h"
-
-#if defined(__cplusplus) || defined(c_plusplus)
-extern "C" {
-#endif
-
-BROTLI_INTERNAL const uint16_t kStaticDictionaryHash[32768] = {
-32072,0,0,0,0,0,0,0,0,21860,0,0,0,0,0,0,0,40486,0,0,0,0,0,45798,0,0,0,0,0,0,1292
-,0,0,0,0,4964,278,23717,0,19972,0,0,0,0,0,0,0,0,0,0,0,0,2126,16102,0,0,0,14437,0
-,0,0,0,0,0,0,26727,2253,0,0,17252,0,0,0,0,0,0,0,0,0,3622,0,0,0,0,22984,0,0,0,0,0
-,0,16647,0,34247,0,0,0,0,0,48486,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2511,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,19532,0,0,24004,0,0,0,9828,0
-,0,0,0,0,0,0,0,0,0,0,0,0,0,0,30853,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-,0,0,0,0,0,0,0,0,0,0,31974,0,0,0,0,0,0,0,0,20650,2404,0,20773,1677,9031,0,6404,0
-,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,51879,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6761,7206
-,0,0,21992,22983,0,0,3529,0,1864,0,0,0,0,0,0,11046,0,0,9641,0,0,0,6507,0,0,36934
-,21576,62375,0,0,0,0,0,0,0,0,0,8294,0,0,0,0,0,0,0,40807,0,0,0,39398,8136,0,0,0,0
-,0,0,0,8875,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7941,0,0,25609,0,0,0,936,
-3716,3213,15687,0,0,0,0,0,52519,0,17381,0,0,0,0,1320,5797,0,21029,0,0,6472,807,0
-,0,0,0,0,0,0,0,0,0,13545,0,0,0,3624,0,0,0,29674,30820,0,31237,0,6596,0,0,0,0,0,0
-,0,0,0,64070,0,0,0,0,0,0,0,0,0,0,0,22278,0,37446,0,0,0,0,7240,423,0,24612,21705,
-17636,0,0,0,0,0,0,1833,0,0,0,328,6021,0,0,0,19974,0,0,0,0,0,0,0,0,0,62119,4178,0
-,0,0,0,12100,8617,0,0,16900,0,36678,0,0,0,35366,0,51718,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,20998,0,62086,0,0,0,0,0,5542,0,0,0,0,0,0,0,0,0,0,0,14629,10952,25927,0,0,0
-,0,19849,0,0,0,0,0,0,0,30952,3046,14314,12998,0,0,0,15268,0,40582,30216,62118,0,
-0,0,20132,0,0,0,0,0,12005,0,0,0,52358,0,0,0,0,24778,0,44,33095,0,0,0,0,0,26372,0
-,0,0,0,0,3781,0,0,17928,9479,0,0,0,0,0,0,0,0,32297,28613,0,0,0,0,0,0,0,0,0,0,0,0
-,0,47174,11723,0,0,0,0,0,0,0,0,0,2536,55143,0,0,6410,0,0,0,0,0,0,0,0,56294,11914
-,0,529,0,30184,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8261,0,0,28808,58854,22633,
-965,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,64135,0,0,331,3684,0,1605,0,0,0,0,0,0,
-0,0,0,0,16650,37,0,23622,3144,15429,0,0,0,0,0,0,0,0,0,0,22443,69,0,0,0,0,0,0,0,0
-,17832,0,0,0,0,0,0,0,0,0,11113,0,0,0,0,18309,0,0,0,0,0,0,0,0,0,26630,0,0,25512,
-25895,0,0,0,0,0,0,0,0,0,0,0,16901,0,0,0,27558,0,0,9418,0,0,0,3508,0,0,0,0,0,0,0,
-0,37990,9289,8517,0,0,0,0,1578,1604,23944,0,0,14916,12781,0,0,0,0,0,0,0,12105,0,
-16617,0,0,0,0,0,0,0,0,0,0,0,0,21348,11240,28870,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,5772,0,0,27812,0,0,0,0,0,0,0,8324,0,0,0,0,0,0,0,0,0,0,16748,1157,0,0,18794,
-16324,25898,935,8333,0,0,0,0,0,0,0,0,18246,0,18086,0,46854,0,0,0,0,0,0,339,0,0,
-25188,12780,12166,6409,0,0,0,0,16516,0,27012,28395,0,0,0,0,0,0,0,1420,0,0,0,9768
-,52967,0,0,0,0,0,0,0,0,0,0,0,0,0,0,25163,324,0,0,0,0,0,0,0,0,0,64998,0,0,0,0,0,
-21893,0,0,0,0,0,47366,0,0,0,870,0,0,0,12646,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,26020,16360,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1809,0,0,0,6601,15878,0,0,0,0,0,
-29092,0,28516,0,0,0,0,0,0,0,0,0,21988,0,0,0,42950,0,0,0,0,0,0,0,0,0,0,5133,1318,
-0,0,0,0,0,0,0,0,0,0,0,54982,24904,0,0,0,0,0,0,0,0,0,0,51526,0,0,0,0,0,3685,0,0,0
-,0,10062,9412,0,0,0,31460,5708,6181,0,0,0,0,0,0,0,0,0,5575,0,0,0,0,0,0,0,0,0,0,
-27144,57478,0,0,0,0,0,0,7084,0,21993,53126,0,0,0,0,8397,0,0,5733,0,0,0,0,0,2116,
-0,24742,0,11271,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1133,0,4873,0,0,38310,0,0,0,0,0,
-0,0,0,0,0,0,0,17932,0,0,18053,0,0,0,25510,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,17798,0,
-26214,0,0,0,0,0,0,0,0,23016,17415,20392,164,0,0,0,0,0,0,0,0,0,0,0,3239,0,46119,0
-,0,0,28580,0,0,0,0,0,0,0,0,0,7621,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,41478,0,0,31016,
-55334,10056,1924,0,0,0,0,0,36614,0,36711,0,0,0,0,0,0,0,0,0,0,13994,59303,0,0,0,0
-,0,0,0,0,0,0,0,0,0,0,0,26501,0,5639,0,0,0,0,0,0,13897,1253,0,0,0,0,0,5095,0,0,0,
-28869,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8646,0,0,0,0,25641,17796,0,0,0,0,0,0,0,
-13316,620,6309,11819,0,0,0,0,0,0,0,0,0,904,1095,0,24229,0,0,28744,49703,0,23077,
-0,0,0,0,32392,0,0,0,0,35271,0,28740,5866,0,0,0,0,0,0,0,4361,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7917,8869,0,0,0,13924,0,0,0,0,
-0,41958,0,0,0,0,0,0,6766,13989,0,0,0,903,0,0,24010,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-,0,0,0,0,0,64390,0,22468,0,25861,0,0,0,0,23656,5317,0,0,0,0,0,0,23017,5445,16009
-,0,0,0,0,0,0,0,0,48006,10473,0,0,14404,0,0,0,42183,0,0,0,51270,0,0,10602,24132,0
-,0,0,0,0,43782,0,0,17834,0,0,0,25576,27205,0,0,0,0,0,0,0,0,29066,0,0,0,0,0,626,
-1988,14700,0,0,0,0,0,0,0,0,0,0,0,0,57670,0,0,0,0,0,0,0,0,0,44710,0,0,0,0,3848,
-7623,0,0,0,0,0,0,0,0,0,0,0,42374,0,0,0,0,0,0,0,0,19272,6436,0,0,5256,0,0,0,0,0,0
-,0,0,0,0,0,0,0,0,19685,0,0,0,0,0,0,0,0,0,0,0,0,0,39783,0,0,0,0,30984,0,0,0,0,0,0
-,28230,0,0,0,29028,10538,3205,0,0,0,0,0,0,0,0,0,0,0,5636,840,295,0,0,8488,8198,0
-,0,0,0,0,0,0,0,0,20580,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4074,19526,0,0,0,0,
-31144,64038,0,0,0,0,0,0,16716,0,0,0,0,0,0,0,0,0,0,0,17706,0,0,0,0,0,0,50630,0,
-50503,0,0,0,0,0,0,0,0,0,0,0,25446,0,0,0,13831,0,0,0,0,0,0,2696,4039,0,0,0,0,
-25288,0,12076,2054,0,48934,0,0,0,0,16969,59431,17259,35335,0,0,0,0,0,0,0,0,0,0,0
-,0,31275,0,0,0,1097,0,0,0,0,0,0,0,0,0,0,0,776,839,0,0,29386,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,5864,12134,0,0,0,0,0,0,0,25349,0,0,0,0,0,0,0,0,0,61447
-,0,0,0,0,0,0,0,0,0,24678,0,0,0,63335,0,28836,8142,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4494,0,0,0,0,0,14088,1188,0,16260,0,0,0,
-16421,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,276,0,0,17060,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,24076,29445,0,33543,0,4901,0
-,0,12522,0,0,62471,0,0,0,0,0,0,0,0,0,0,4046,0,0,0,0,20486,0,15460,2217,51719,0,0
-,0,0,0,23495,0,0,0,0,0,0,15370,0,15849,0,15113,0,0,0,0,0,0,0,0,27972,7337,0,0,0,
-0,30342,0,0,0,0,0,0,0,0,32299,23940,0,17766,0,0,0,0,0,0,6184,0,20904,0,0,0,0,0,0
-,0,0,0,0,31492,0,0,0,5509,0,0,0,0,0,0,0,0,2669,50182,0,0,12299,0,0,0,0,0,0,0,
-5257,28167,0,0,0,0,0,0,0,0,0,0,0,11750,3890,0,0,26500,0,0,0,0,0,0,0,49318,0,0,0,
-0,0,0,0,10981,0,0,0,0,0,0,0,0,17961,1831,0,0,0,0,0,0,0,29638,0,0,0,0,26473,0,
-6216,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,711,0,0,0,0,0,0,0,0,0,0,28683,39975
-,0,0,0,0,0,51654,0,0,0,27527,0,0,0,0,0,0,0,0,30859,3268,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,28772,0,18212,0,0,0,0,25448,65446,0,0,0,0,
-0,0,3337,1670,0,0,0,0,0,19332,0,0,0,0,24936,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1043,0
-,0,0,0,15814,0,21670,0,0,0,0,0,0,0,16263,0,0,0,0,0,0,0,0,0,32454,0,30630,0,0,
-20170,9926,0,0,0,18247,0,0,14376,0,2056,17191,0,0,0,0,0,0,0,7812,0,0,0,0,0,0,0,0
-,0,0,0,0,0,0,22474,52806,1588,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,10825,0,
-0,0,0,40934,0,0,0,0,0,0,0,28677,0,0,5714,0,0,0,0,0,0,0,0,0,0,0,0,0,25865,22246,0
-,0,0,0,17256,35751,0,0,0,0,0,0,0,0,8236,0,32108,0,0,0,43,14342,0,16517,0,0,30732
-,0,4012,133,0,40583,971,23942,0,0,27275,0,0,0,204,0,0,27140,7564,44327,27592,
-57958,0,0,0,0,22344,25701,0,0,0,0,0,0,0,19524,31755,0,0,28102,0,59111,0,0,0,0,0,
-0,0,12261,0,44934,0,0,0,0,31560,0,11114,0,0,0,0,0,0,0,0,0,0,0,18953,18311,0,
-45159,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2059,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-19399,0,0,0,0,0,0,0,0,0,0,0,0,0,58534,0,0,0,0,0,0,0,0,0,0,0,0,22411,23943,0,0,0,
-0,0,0,11690,0,0,4069,0,0,2668,6342,0,0,0,0,0,0,27658,1766,0,0,0,0,23240,56070,0,
-0,0,0,0,0,0,0,0,0,0,0,0,34119,0,24453,0,0,0,0,21867,0,17610,9894,0,0,27976,38790
-,0,0,0,43654,0,31559,12202,23142,0,0,0,50343,0,0,0,0,0,32806,0,0,0,0,0,0,0,0,0,0
-,0,0,0,0,0,0,0,0,0,49895,0,0,0,0,15786,4263,0,0,0,0,4746,3814,0,0,0,0,0,0,17192,
-453,17323,0,20328,4036,0,0,0,15844,0,0,0,0,27561,31940,32296,0,0,0,0,0,0,0,11499
-,11782,0,0,0,0,9738,50471,0,0,0,0,0,35430,0,0,0,0,0,29734,0,0,0,36551,0,0,0,0,
-9257,5606,0,13829,0,7015,0,0,0,0,0,25127,0,0,19051,0,0,0,0,0,0,0,0,0,0,0,0,0,
-2572,0,0,0,0,0,0,29797,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,42342,0,0,0,0,9293,
-0,17896,56038,4077,0,0,0,29899,37351,0,30823,0,8326,0,0,0,18342,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,18569,54054,0,0,0,0,0,0,0,0,0,37254,0,0,31433,
-61510,0,2022,0,0,0,0,0,25381,0,0,0,0,0,0,0,0,0,0,0,0,0,2149,25289,0,0,0,0,0,0,0,
-0,0,0,12516,14185,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8676,0,0,0,0,0
-,0,0,0,0,0,0,36486,0,0,0,0,10889,9607,0,28711,0,0,0,0,0,0,0,0,0,0,28490,0,0,0,0,
-26181,10283,1701,0,0,0,0,0,0,0,0,0,14980,0,7783,0,27846,0,0,0,56486,3892,0,0,0,
-5770,16583,0,26309,13422,20292,0,0,0,0,0,0,0,0,0,28742,0,0,0,0,14536,1158,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,25801,0,0,0,0,0,0,0,0,0,0,0,0,42438,0,3332,0,0
-,0,0,0,0,0,0,0,8327,0,0,0,0,0,0,0,0,0,0,0,0,17353,1447,0,0,8427,48518,1359,0,0,0
-,0,0,14986,0,32168,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9230,2791,0,0,0,0,0,0,0,0,
-16073,31623,4269,0,0,0,0,0,0,4519,0,0,27912,58950,0,0,0,0,0,0,0,0,8361,19812,0,0
-,0,0,6056,7877,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,21701,0,0,0,0,0,0,0,0,0,0,0
-,0,9128,1125,0,16548,0,0,0,0,0,0,0,0,0,0,17292,6854,21352,0,2380,0,0,4007,0,0,0,
-0,0,24357,4202,0,0,0,0,0,0,0,0,0,0,0,0,0,10664,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-,0,0,0,42823,3022,0,0,0,0,0,0,0,0,0,0,0,0,14373,0,20677,3304,2759,20522,64903,0,
-0,0,38,0,0,0,0,0,0,0,0,0,0,0,27814,2802,8870,3758,1255,0,0,0,0,0,0,0,0,30027,
-9510,0,0,0,0,17864,14855,0,0,0,0,0,0,0,0,0,0,23404,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-51462,0,0,0,0,0,0,0,45734,0,0,23467,32327,0,0,10826,52999,0,0,0,33222,31336,
-64326,0,0,0,0,0,0,0,32166,0,0,3891,0,0,0,7017,645,0,0,0,0,0,0,27915,46087,0,0,0,
-21863,0,34246,0,0,16715,0,0,0,0,14052,21416,0,0,0,0,0,0,0,0,39846,0,0,0,0,0,
-38982,0,0,17512,7460,0,0,0,0,0,0,0,0,0,15428,0,0,0,0,0,0,0,28356,0,0,0,0,0,0,0,0
-,0,0,0,0,0,0,0,0,0,0,0,25445,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11879,0,0,0,0,0,0
-,0,0,0,0,0,0,0,19911,0,20007,0,0,0,10855,943,0,0,10821,0,0,0,0,4170,0,0,0,0,0,0,
-0,0,0,9836,0,0,0,0,0,0,0,0,0,0,65415,0,0,0,0,0,0,0,0,9865,24646,0,0,0,0,0,40519,
-0,0,0,0,0,0,0,0,0,12804,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,22091,23655,0,0,0,0,0,0,
-0,31686,0,0,0,58599,0,0,0,0,0,0,0,0,0,0,0,0,0,19620,0,0,0,0,0,0,0,0,0,0,0,0,0,
-24421,0,28100,0,0,0,31268,0,3204,0,0,0,0,0,0,0,0,0,14822,0,0,0,0,19947,10182,0,0
-,9480,14821,4398,0,0,14532,0,0,0,48871,1873,0,0,0,0,0,0,0,589,1541,0,0,0,0,0,
-23333,0,0,0,14149,0,0,0,0,1296,14374,0,27300,0,0,0,0,0,0,7276,0,0,0,0,0,0,47718,
-0,0,0,0,0,0,0,0,0,0,5164,1765,0,14405,0,37574,1994,0,6636,0,0,0,0,0,0,0,0,27815,
-0,0,0,0,2568,6820,0,0,0,0,0,0,0,0,0,0,11336,26247,0,0,23912,0,0,0,30536,0,0,
-34342,0,17799,0,0,0,22149,0,6118,0,25732,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-,0,0,0,0,26600,5190,0,0,1142,0,0,0,0,0,0,0,0,39527,0,0,0,0,0,39494,0,0,0,0,0,0,0
-,0,0,0,3085,0,0,0,0,0,0,0,4786,0,0,0,28873,6532,0,0,26664,0,9193,11719,0,0,0,0,0
-,0,31752,64646,0,0,0,0,0,0,0,0,0,0,0,11397,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,25094,0
-,0,18153,20167,0,0,0,17254,0,0,878,0,0,0,0,0,0,0,0,0,0,24166,0,0,0,0,0,0,0,0,0,0
-,0,0,26059,0,0,0,0,0,0,0,0,0,0,0,0,0,31592,0,0,8167,24362,6212,0,34758,0,0,0,0,0
-,0,32520,0,0,44679,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,17989,8681,29222,0,0,0,
-0,0,0,0,0,10251,4902,1452,15207,0,0,0,0,0,0,0,22822,0,10469,0,0,0,0,0,0,19337,
-17670,107,11494,0,0,0,0,27305,2565,0,0,0,0,0,0,0,64518,200,28389,0,0,0,0,31208,0
-,30762,0,0,0,0,0,29321,60518,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3209,3237,
-12490,22663,0,0,0,18789,31464,16391,0,0,0,0,0,0,0,0,0,0,0,20646,0,0,0,27238,0,0,
-0,0,0,15940,4488,6951,0,0,0,46342,0,0,0,0,0,0,0,0,0,28965,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,20584,3367,0,25350,0,0,0,0,0,0,0,0,0,0,0,0,1814,0,0,0,0,0,0,0,0,0,0,17125,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,55943,0,0,0,0,0,24133,0,0,0,0,0,0,0,0,0,0,0,0,2929
-,0,0,50086,0,2918,25356,30052,115,11846,0,0,0,0,3056,0,0,0,0,17639,239,19815,0,0
-,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,36806,0,0,0,0,0,0,0,0,0,0,0,0,0,21479,0,0,0,0,0,
-28420,11786,4772,0,0,3368,36295,0,31463,0,0,14665,996,0,20582,0,0,0,9988,0,23685
-,0,0,0,52551,0,0,0,0,0,0,0,7556,0,0,0,0,0,0,0,1895,2186,0,0,0,0,0,27755,25447,0,
-0,0,0,31052,63270,0,0,0,0,0,0,0,36742,0,24804,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,31048,0,0,0,0,0,0,0,0,0,21290,2276,0,0,0,0,26475,0,0,0,0,0,0,0,0,0
-,0,15332,0,0,0,0,0,0,0,0,3176,19431,0,0,0,0,0,0,0,62726,0,0,0,25380,0,0,27883,
-1316,0,0,7724,3015,0,0,0,0,6697,0,0,47910,0,0,0,0,0,0,0,0,0,3141,0,0,0,14820,0,0
-,0,0,9326,0,0,0,0,0,0,0,0,0,0,31493,0,0,0,0,0,6566,0,0,0,0,0,0,6569,1348,0,25638
-,0,0,0,0,0,20324,0,0,17067,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11876,0,41030,0,0,0,26405
-,0,0,0,0,0,0,0,0,0,11431,28137,14950,0,10151,0,0,0,0,0,0,0,29574,0,0,0,0,27176,
-57446,0,0,0,0,28650,57574,1387,0,0,0,0,0,0,0,0,0,0,58247,0,0,0,0,0,0,0,16805,0,0
-,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3526,0,15781,0,5572,13352,0,0,0,0,0,18665
-,23463,0,0,0,0,0,0,15405,6885,0,0,0,0,15272,0,0,0,0,0,0,0,0,9861,0,0,0,0,0,0,0,0
-,9512,4037,0,0,11563,49639,0,0,0,0,0,0,27880,57830,0,0,0,0,0,41831,0,21924,0,0,0
-,0,0,0,0,25509,0,27462,0,18085,0,0,0,0,0,0,0,0,0,0,0,0,13898,8068,26441,0,0,0,0,
-0,0,25316,0,0,0,0,16298,7397,5706,19239,0,0,0,0,0,0,0,0,1392,50919,0,0,0,0,0,
-53863,0,0,0,0,1451,0,0,0,0,0,0,0,0,0,0,35847,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-,17801,15813,0,12740,0,0,0,32967,0,0,0,0,0,0,5389,0,0,0,0,0,0,0,0,0,0,31143,0,
-20548,0,0,0,0,0,0,0,0,0,51686,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-12109,19015,0,34983,0,21732,3600,0,0,0,0,47750,17288,43975,22857,47559,0,0,0,0,
-26408,48358,0,0,0,0,0,0,0,0,0,0,0,0,0,30470,0,0,23560,4581,0,22404,0,49286,0,0,0
-,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,49831,0,0,0,27525,31691,7,0,0,25835,0,0,0,0,0,
-4201,16485,0,20676,0,0,0,0,3753,23303,16264,3878,0,0,0,0,0,0,11434,0,0,0,0,0,0,
-7589,0,0,0,0,0,0,0,0,0,57095,0,0,0,0,0,0,0,0,0,0,0,22820,11146,49158,0,23623,0,0
-,0,0,0,0,0,13893,0,0,0,0,0,0,11722,60071,1258,0,0,0,0,0,0,18564,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,27945,0,0,0,0,5479,0,20006,17608,3431,10988,30180,0,0,0,0,0,0,0,
-24581,14,0,0,0,0,0,0,25572,0,0,0,28612,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,53543,0
-,0,0,0,0,0,0,0,0,0,0,33670,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8710,0,14116,0,0,116,
-292,0,0,0,37831,0,43078,0,0,0,0,0,0,0,0,21832,0,0,32134,783,0,0,30982,0,0,0,68,0
-,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5932,0,0,0,18505,
-15175,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3630,16965,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-,0,0,0,17797,0,0,0,0,0,0,520,42150,0,0,3122,0,0,0,22506,0,0,0,0,0,0,0,0,28550,0,
-0,0,50278,0,0,13641,5958,0,35238,0,0,0,0,0,0,0,0,29993,18724,0,0,0,0,0,0,0,0,0,0
-,0,0,0,0,0,0,20619,9319,0,0,0,0,23977,0,5193,0,0,12196,0,0,0,0,0,0,0,0,0,0,0,0,0
-,0,0,0,0,24390,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,20105,677,0,0,0,0
-,0,0,0,0,29419,0,0,0,0,0,0,0,0,0,20266,0,0,0,0,10631,0,0,0,0,0,0,0,0,0,47655,0,0
-,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,26628,12744,0,20648,0,0,0,432,0,0
-,0,0,0,0,0,0,0,0,646,0,25604,0,0,0,0,0,0,0,0,0,0,0,0,0,63782,0,0,0,0,24616,0,0,0
-,21291,0,0,0,0,0,0,0,0,0,0,45638,0,0,0,0,1931,0,0,0,20521,59975,0,20614,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,56231,0,0,0,0,0,29991,0,52871,0,20934,0,0,0,0,0,0,0,16871,
-0,0,0,0,0,0,0,0,0,0,0,0,0,7237,0,0,0,0,0,47558,0,0,0,0,0,0,0,0,0,0,0,10406,0,0,0
-,0,0,0,0,43046,0,0,2930,0,12936,0,0,0,0,0,0,0,0,0,0,0,0,31141,0,0,0,0,0,0,0,
-37639,0,17572,0,0,0,0,0,0,0,0,0,0,31240,0,0,0,0,0,688,0,0,0,0,0,1648,0,0,0,0,
-10055,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,146,0,0,0,0,0,0,0,0,0,6345,199,0,34982,0,0
-,0,0,0,0,0,0,0,0,0,0,0,56839,0,0,0,0,0,48902,0,13412,0,0,0,0,0,0,0,0,2441,4420,0
-,0,0,0,20428,933,0,0,0,0,0,0,0,45383,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-,0,0,0,0,0,54726,0,0,0,0,0,0,0,0,0,0,0,0,17036,741,0,0,0,0,0,0,0,27589,0,0,30282
-,18950,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2248,0,0,0,0,0,0,0,0,0,25993,0,0,0,
-2443,0,0,31622,0,14150,0,0,0,28679,0,0,0,0,0,0,15464,0,0,0,0,54694,0,0,0,0,0,0,
-3827,0,0,0,3756,0,9897,0,0,0,0,0,19082,31239,0,0,0,0,0,0,0,0,0,0,0,24580,0,0,0,0
-,0,0,0,0,0,16580,0,0,0,0,0,0,0,0,0,0,0,0,0,0,27625,0,0,0,784,4647,32652,0,0,
-63494,0,0,0,0,0,0,0,21062,0,0,0,0,0,0,0,0,0,0,3404,58470,0,32325,0,0,0,0,0,0,0,0
-,0,0,0,0,0,0,0,0,18634,2789,0,0,0,0,0,0,0,8548,0,0,0,22501,0,0,0,0,0,0,0,0,0,0,0
-,0,0,0,15881,0,0,0,0,35879,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7978,17956,0,0,0,
-0,0,0,0,24324,0,0,4937,0,0,0,8168,0,13420,10340,0,0,0,0,0,11780,0,0,0,0,0,0,0,0,
-0,0,16712,0,0,0,0,0,0,0,17640,17991,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,2953,0,0,0,0,0,0,0,9100,16806,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,30667,0,0,
-19013,0,0,0,0,0,0,205,15334,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1969,0,0,0,0,0,0,0,26248
-,52518,0,49798,0,0,0,0,0,0,0,9668,0,0,0,0,0,4742,0,0,21641,0,0,0,0,0,0,53574,0,0
-,0,0,0,0,5707,0,0,0,0,0,0,0,3018,12454,0,0,0,0,2920,262,0,0,0,0,0,0,0,0,0,0,3593
-,0,0,0,0,0,0,0,0,0,0,23910,0,0,0,0,0,0,0,55879,0,0,0,0,0,775,0,43270,5066,48967,
-0,0,22986,4165,8971,44838,0,0,0,0,0,62279,272,0,0,0,0,51430,0,0,0,0,0,0,28234,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,13349,0,0,0,51111,20265,13861,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,585,7494,0,0,0,0,0,0,0,0,21768,62407,0,0,0,0,7979,166,0,
-0,0,0,0,0,0,0,0,38918,0,56742,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16296,5767,0,0,0,0,0,0
-,0,32068,0,0,0,0,0,0,0,0,0,0,0,0,0,29796,0,0,0,0,0,0,0,0,23916,30183,0,58791,0,0
-,0,0,0,0,0,20518,0,0,0,0,8969,0,0,0,183,0,0,0,0,0,2314,17445,0,0,0,0,0,0,0,0,0,
-23748,0,0,8139,4839,27914,0,0,0,0,0,0,0,0,0,0,0,0,29478,0,0,16552,26663,0,53767,
-0,0,13960,8039,18696,0,0,0,0,0,0,0,0,0,0,0,782,16005,0,0,0,0,0,0,0,0,6258,56806,
-16456,12455,0,0,0,0,0,0,0,23780,0,0,0,0,0,0,9355,0,0,0,7273,41063,24780,57766,0,
-0,0,0,0,0,0,0,0,0,3820,2597,0,0,0,0,0,0,0,0,0,0,0,0,0,0,29225,61126,0,0,0,58439,
-15691,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,37190,22408,967,0,0,0,
-23078,26858,0,0,0,19753,0,0,0,0,0,0,0,0,0,5416,13702,0,0,0,0,0,52742,20394,38567
-,0,0,0,51079,0,0,136,8516,0,0,0,0,0,0,0,0,0,0,0,27588,0,0,0,0,0,0,0,0,0,0,531,0,
-0,0,0,0,0,0,0,0,8936,5031,12520,19334,0,0,22827,30247,28074,31140,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,27497,18148,20104,59079,0,0,0,0,0,0,0,0,0,24389,0,0,6125,0,0,0,0,
-9541,0,0,24553,29095,0,0,0,0,0,0,0,25444,0,0,9643,0,0,63047,0,0,0,0,0,0,0,0,0,
-39558,0,0,0,0,0,0,20620,11815,499,0,5128,2278,0,0,0,0,0,46310,0,0,0,0,0,0,0,0,
-23530,40166,2440,0,0,0,0,0,0,0,0,0,0,15174,0,0,0,0,0,0,0,0,0,0,26922,0,0,0,0,0,0
-,0,0,0,0,26758,0,0,0,0,0,51911,0,0,23532,0,0,0,0,51238,25737,44486,12622,0,0,0,0
-,0,0,3078,0,9253,0,0,1128,22023,0,0,0,21350,0,16420,0,0,0,0,0,0,0,65094,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,22532,0,48774,0,34503,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,9797,0,0,0,0,0,0,0,13797,0,38279,0,0,1738,0,489,46343,0,45382,0,0,0,0,0,0,
-0,0,0,29030,0,0,0,0,0,0,6220,56550,0,0,0,0,0,26885,0,28806,0,0,0,0,0,0,0,0,0,0,0
-,45958,0,0,0,0,20553,49927,0,0,0,0,0,0,3019,12358,0,0,0,0,0,0,0,0,0,0,26571,
-13319,0,0,653,23399,0,0,0,0,0,0,0,0,22316,0,0,21188,0,0,0,0,0,0,0,0,0,27556,0,0,
-0,0,0,0,0,27878,21483,27653,0,29701,237,0,10632,0,0,0,0,33766,0,0,0,0,0,0,31563,
-0,0,0,0,0,1416,2439,0,0,0,0,0,0,0,0,0,0,9611,0,0,0,0,0,0,0,5611,16581,26601,
-35462,0,0,0,26756,0,59271,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,26984,57734,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,7882,0,0,0,19528,6469,0,0,1161,0,0,0,7688,20935,425,0,
-0,0,0,0,0,0,0,12519,0,12902,0,0,0,0,0,0,0,0,0,0,2411,0,11725,26086,0,0,20201,0,0
-,0,0,0,0,0,0,11045,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,30471,0,0,0,0,0,0,0,0,0,0,0,
-21541,1141,21190,0,9188,0,0,0,0,0,0,0,0,0,0,0,0,0,0,184,1093,0,0,0,0,0,0,0,0,
-4842,0,13672,0,0,12230,0,0,0,10532,0,0,8937,0,0,0,0,0,0,0,0,0,0,28996,0,0,11720,
-26982,0,46182,0,43911,31754,0,1160,3940,0,20772,0,0,0,0,0,24549,0,32582,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,31845,0,0,0,0,0,0,0,2310,11788,0,0,43047,0,0,0,18853,0
-,0,0,0,0,0,0,0,0,63622,0,0,7048,17318,0,0,0,21957,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,1039,6279,0,0,0,0,0,0,0,0,0,0,0,0,0,12197,0,0,0,0,0,0,0,0,0,
-46470,0,0,24,19719,0,0,0,0,0,0,0,0,0,39335,0,0,0,0,0,0,0,0,0,0,21353,3846,0,0,0,
-0,0,0,0,36679,0,0,0,0,0,0,0,0,0,0,0,11268,0,0,0,0,0,9382,0,0,0,0,0,0,0,0,0,0,0,0
-,0,29926,0,33606,0,4708,2828,0,0,29543,0,0,0,0,0,29893,0,0,0,0,0,0,0,0,3663,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,10920,7111,0,0,0,0,0,0,0,0,0,0
-,9384,0,0,0,0,0,0,0,0,0,0,0,0,20388,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,37094,0,0,0,
-27110,0,0,0,0,0,0,21865,0,27753,30214,0,0,0,0,0,57895,0,0,0,0,0,0,0,0,0,0,12648,
-5446,0,0,0,0,0,0,0,0,0,0,19784,17124,0,52007,0,0,0,0,0,0,0,0,758,0,0,0,0,0,0,0,0
-,0,0,0,0,0,0,0,0,0,0,24900,0,0,0,0,0,1476,0,65031,0,0,1205,46663,0,30023,11625,
-1094,0,0,0,0,0,0,0,0,0,0,0,0,0,0,10058,0,0,0,0,0,0,28455,0,0,0,0,0,0,0,0,0,0,0,
-14788,0,0,0,0,16808,0,0,742,0,0,0,0,0,0,0,0,0,0,0,21636,0,0,0,0,0,0,0,0,0,0,0,0,
-15944,23207,0,0,0,0,247,0,0,0,0,24743,0,0,0,5252,0,0,0,0,0,0,0,0,29961,18660,
-21099,46791,0,7045,0,0,0,0,25707,0,0,17412,3828,0,0,0,0,0,0,0,0,0,0,0,5803,5637,
-0,38151,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,60103,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,853,0,0,0,0,0,0,30215,0,0,0,0,0,0,0,8741,0,0,0,0,0,27366,0,0,0,0,171,
-4070,0,0,0,0,0,0,0,0,24073,7366,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2184,5189,0,
-20932,1545,4996,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7684,0,0,0,0,0
-,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6313,0,0,0,0,0,0,0,30826,0,0,0,0,0,0,
-0,0,0,0,27463,0,0,0,0,0,0,0,0,0,0,21640,63303,0,0,3275,31111,0,0,0,0,0,0,0,11556
-,0,14756,0,0,0,15108,0,0,0,0,0,0,0,0,0,0,0,0,0,0,23914,28966,0,0,0,4965,0,0,0,0,
-0,0,0,0,0,0,10216,5223,0,0,0,0,0,0,0,0,0,27142,0,0,1173,20198,0,0,0,0,0,56614,0,
-0,0,0,0,4612,0,0,0,0,0,0,0,0,0,0,11822,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,17769,7910,
-0,0,31880,0,0,6055,0,0,0,0,0,0,0,0,0,0,8970,0,0,0,0,0,0,0,0,0,0,0,16840,23879,0,
-0,11051,0,0,0,32552,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,20842,13701,0,0,0,37191,7373,
-10471,17482,25348,0,0,0,38502,0,0,0,0,0,0,0,0,0,21509,6058,0,0,0,0,0,0,3173,0,0,
-0,9543,0,0,0,0,0,0,17768,12708,0,0,0,0,0,37030,0,0,0,0,0,0,0,0,0,0,12748,48743,0
-,11718,0,0,25194,0,0,0,9033,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5028,0,30118,0,0,0,0,0,
-42759,0,0,3720,0,0,0,0,0,0,25190,0,0,0,0,0,0,0,0,0,0,5450,5125,0,58086,0,0,0,0,0
-,27716,0,0,0,0,0,0,0,0,0,22052,0,0,0,0,26249,0,15947,3460,0,0,0,35814,0,0,0,7813
-,19500,32167,0,18597,0,0,0,0,0,28644,0,0,0,60743,0,0,0,0,0,29636,0,0,0,0,0,0,0,0
-,0,0,0,0,0,17220,15885,9414,9642,0,0,0,593,0,0,24228,0,0,0,0,0,40422,0,26244,0,
-23109,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,64902,0,0,0,0,3979,60007,0,0,0,28199
-,0,0,0,43142,0,0,0,0,0,0,0,29158,0,30532,0,0,0,0,13256,0,0,0,0,16549,0,0,0,0,0,
-26116,0,0,0,0,0,0,0,0,22825,0,0,0,0,0,0,0,1065,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-,0,0,0,0,18985,4805,0,0,0,0,0,17702,0,0,0,0,0,0,0,0,0,0,3468,0,0,0,0,13447,0,0,0
-,0,0,0,0,0,0,0,0,56871,0,0,1776,15780,0,0,2603,0,10280,31366,0,0,0,0,0,0,0,0,0,0
-,0,0,0,0,11592,3591,0,2372,0,0,0,0,0,0,0,20004,0,0,0,0,0,0,12072,518,0,0,1960,
-8999,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7178,32999,0,0,0,0,0,0,1641,0,0,0,0,0,0,0,6764,
-9893,490,4005,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,25258,5541,0,14053,306,20743,0,0,
-9422,0,0,0,0,0,0,0,11977,260,0,35175,0,0,0,0,0,0,0,18405,0,0,0,16582,0,0,0,22470
-,0,0,0,0,0,0,2792,0,0,0,14026,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14858,3909,0,0,0
-,57671,0,0,0,0,0,0,15979,0,0,0,2794,15239,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,26884,
-9070,0,0,0,0,51846,0,0,0,0,0,0,0,0,0,0,0,0,0,0,19499,37127,0,0,0,0,0,0,0,0,0,0,0
-,0,0,0,0,0,0,0,0,0,0,0,0,19205,10350,11910,0,0,0,0,15083,23108,0,0,0,0,0,0,0,0,0
-,0,0,0,0,0,0,0,169,0,0,0,0,0,0,0,0,0,0,0,15274,41735,0,56774,0,0,2825,0,14025,
-389,0,0,0,0,0,0,0,0,21482,31910,0,0,0,0,0,0,0,0,0,0,0,0,0,0,20456,710,0,0,25032,
-21797,0,0,0,0,0,0,0,0,0,0,32427,21252,0,30150,0,43174,0,0,0,0,0,0,0,0,0,0,0,0,
-11403,0,0,1029,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6892,9252,0,63206,
-3496,14406,0,0,0,0,0,0,0,0,0,0,22568,0,0,21253,0,0,0,0,0,0,0,39623,0,0,10189,0,0
-,0,0,0,0,0,0,0,0,0,0,0,30729,59910,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3305,0,0,0,0,0,0,
-0,0,0,7660,24871,0,838,0,0,0,0,0,0,0,0,0,0,0,0,12013,13252,0,551,0,0,0,43207,0,
-30567,0,0,0,0,0,0,0,0,28394,30724,0,0,0,0,0,0,0,0,0,0,22665,22725,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,29414,0,0,0,0,16074,8966,245,1445,0,0,0,0,24872,0,0,0,0,
-13124,0,35527,0,0,0,0,0,0,13259,10917,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-25191,0,0,0,13956,0,0,0,0,0,0,0,54631,19625,12070,3083,0,0,0,0,14436,0,0,0,0,0,0
-,0,0,0,0,0,0,0,21766,0,15463,29322,0,0,0,0,0,0,29990,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-,0,0,0,23653,0,0,0,0,0,0,0,0,2643,0,0,21223,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,4114,0,0,0,0,0,0,0,0,34790,0,0,0,0,0,0,0,16103,0,0,0,0,0,0,297,3620,3338,
-10372,0,14727,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,29924,22473,13895,
-15529,32455,30378,13540,0,28807,0,0,0,0,0,0,0,64582,18380,0,0,0,0,0,0,0,0,0,0,0,
-0,38598,0,0,0,0,0,0,0,0,1236,0,0,0,0,0,0,0,0,0,0,0,0,0,0,32710,0,0,0,0,4590,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,64935,0,0,0,0,0,0,0,0,0,0,0,0,16744,0,0,
-0,0,0,0,20005,0,0,13608,1191,0,0,0,62183,0,0,0,0,0,24484,0,0,0,0,0,0,0,0,0,0,
-17643,0,0,0,0,0,0,0,0,0,0,0,0,5380,0,0,32328,0,0,63814,0,0,0,2919,0,0,0,0,17034,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,60295,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,7690,486,0,0,0,39270,0,49094,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12555,0,0,0,0,0,0,0,0
-,0,0,0,0,20967,17993,12647,0,0,0,16036,32616,0,0,0,0,16294,8555,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,35174,0,0,0,0,0,0,30346,0,0,0,0,0,0,0,
-14797,3652,0,0,8268,12934,0,54950,0,0,0,0,2632,33959,0,23175,0,0,0,0,0,36262,0,0
-,0,0,0,0,32684,26918,0,32676,0,0,0,0,0,0,0,0,0,0,15625,11943,1206,0,0,0,0,18052,
-0,0,0,0,0,16422,0,0,0,26404,0,0,28777,0,0,24902,0,0,408,45351,0,35719,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,3658,17446,0,165,0,0,0,0,0,0,0,6151,0,0,24424,0,0,0,0,0,0,0,
-24170,24293,0,0,0,0,0,0,0,0,0,11847,0,39591,0,0,0,0,0,0,9549,2788,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1010,0,0,0,0,0,0,26055,31724,0,24233,
-1828,0,0,0,0,0,0,0,0,0,17284,0,0,0,0,19464,0,0,0,0,0,0,0,0,32452,0,0,0,28871,0,0
-,0,0,17704,53383,0,0,0,0,0,0,0,0,0,17892,1938,0,0,0,0,0,16362,0,0,21605,0,0,5003
-,0,0,0,0,0,0,22693,0,22342,0,0,0,55846,0,0,0,0,0,0,0,0,0,22853,0,0,0,0,0,0,0,0,
-6600,263,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,24836,0,0,0,0,0,0,0,0,0,
-40711,0,0,0,0,0,33894,0,0,0,0,0,0,13000,0,0,0,0,0,0,0,0,0,0,30308,0,0,0,0,0,0,
-5386,0,0,0,0,0,0,27844,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,17740,0,0,0,0
-,25093,29064,0,0,0,0,0,0,0,12680,11462,0,0,0,0,0,0,0,0,84,7303,0,0,0,0,0,0,0,0,0
-,0,0,27044,457,0,22924,58246,19016,0,2606,45703,0,5157,0,25028,0,0,0,0,0,0,0,0,0
-,0,0,0,0,0,0,0,0,0,0,0,2065,0,0,0,0,0,31946,0,0,0,0,0,0,0,0,0,0,0,0,33382,0,
-47878,0,0,0,0,0,0,0,0,25004,0,0,0,0,0,0,0,26153,35654,0,58055,30668,0,0,0,0,
-25988,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4456,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-,0,0,7560,20583,0,0,0,0,0,0,0,0,0,37510,0,0,0,0,0,0,0,0,0,42822,0,0,0,0,0,0,0,0,
-0,0,0,1733,0,0,0,8196,0,0,11241,0,30572,60326,0,15013,0,0,0,40646,0,23812,0,
-10022,0,0,0,0,0,0,0,0,12874,31015,0,0,0,0,0,0,1608,0,0,0,0,18308,0,0,0,0,27114,0
-,0,0,0,0,0,0,7944,1382,0,11813,0,0,0,0,0,0,0,0,0,0,0,0,0,24517,0,11621,0,0,0,0,0
-,0,0,0,0,0,0,21702,0,0,13100,8262,2644,7973,0,0,0,0,0,0,0,0,0,0,0,0,1033,12581,0
-,25221,0,0,0,40998,16301,62983,0,0,0,0,1263,9318,0,0,0,18854,0,0,1741,33895,0,0,
-0,0,0,0,26377,0,0,0,0,0,0,0,0,0,0,32165,0,51143,0,0,0,0,0,29412,0,0,0,0,0,0,0,0,
-1674,4230,0,0,0,0,0,10502,0,0,0,0,5545,0,0,0,0,0,2099,45158,0,0,0,0,0,0,0,0,0,0,
-14157,0,26955,0,0,0,0,0,0,0,0,0,17096,0,0,0,0,0,0,0,0,0,0,0,0,0,27050,6726,0,0,0
-,0,0,0,0,0,28554,0,0,7142,0,0,0,0,16936,0,0,0,25833,0,4399,6980,0,46214,0,0,0,0,
-0,10630,21164,0,0,0,0,0,0,0,2446,48551,0,0,0,0,0,0,0,0,0,0,0,13381,0,0,0,0,0,0,0
-,0,15400,12135,0,0,0,0,0,4774,586,0,0,0,0,0,0,0,0,23751,9736,4548,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,25577,29607,6250,1637,0,0,0,0,
-22024,0,0,0,0,22308,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,37414,24044,0,0,0,14474,29735,
-0,7077,0,45990,0,0,0,0,30568,40039,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-6150,0,4228,0,0,0,0,0,27687,0,0,0,0,0,0,0,24548,21513,1350,0,0,0,33607,0,0,0,0,0
-,0,0,0,11784,1414,0,0,0,0,0,0,0,18244,940,0,0,0,0,0,0,7270,0,0,0,0,0,0,0,0,0,0,0
-,0,0,0,0,16709,0,0,0,0,0,0,0,48935,0,0,0,0,0,0,23660,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-,53350,0,0,0,0,0,0,4236,16358,0,4422,6665,32644,0,0,744,18084,0,11014,0,0,0,0,0,
-29508,0,0,0,0,0,0,0,7686,0,0,13289,5478,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,12872,0,0,24134,1005,22916,0,31429,23400,0,0,0,0,0,0,0,28424,0,0,0,
-25706,27109,0,0,26345,0,0,0,0,0,0,25126,0,0,88,0,0,0,0,0,0,0,17032,0,0,21799,0,0
-,10060,0,12296,21892,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,20777,14311,0,58182,
-32232,0,10282,0,2121,11527,0,0,0,12325,0,0,0,0,0,0,0,28804,2344,8133,0,0,0,0,
-21864,62695,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2771,0,0,
-23204,0,0,0,0,0,6278,0,0,0,0,0,26597,0,0,0,0,23144,0,0,0,0,0,31816,20070,0,0,0,0
-,0,0,0,0,0,0,24456,2118,0,0,0,0,6570,1156,0,0,0,0,0,0,0,30406,0,0,0,28388,3572,0
-,0,26599,12426,5286,0,0,0,0,0,4967,0,0,0,0,0,0,0,0,0,0,0,0,0,0,24970,24167,0,0,0
-,0,28745,4678,0,0,0,0,0,0,0,1444,236,0,0,0,0,0,0,0,0,19428,0,0,0,0,0,0,2092,0,0,
-0,0,0,0,0,0,0,2827,0,0,0,0,0,19881,19204,0,11749,0,0,0,0,0,0,0,17958,0,17894,0,
-18726,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9190,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-,0,0,0,0,0,0,0,21510,5033,0,0,0,0,22855,0,0,0,0,0,14598,0,29605,0,0,0,0,0,0,0,0,
-617,0,0,0,0,47142,0,0,0,0,0,0,0,0,0,0,3627,0,0,0,0,0,0,0,0,0,0,0,0,0,2225,14823,
-0,0,2637,6182,78,15078,0,0,0,0,20264,0,0,0,0,0,0,36743,4140,44551,17352,25703,0,
-0,0,0,0,0,0,0,0,0,0,0,14024,0,0,0,0,0,0,28004,0,0,0,0,0,7588,0,0,0,0,0,0,0,2087,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,18028,0,0,0,300,14212,0,0,1386,40327,0,0,0,0
-,0,0,31082,0,0,22374,0,0,0,0,0,35718,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-26532,7756,0,0,18982,0,0,0,0,0,0,0,0,6440,1159,7180,0,0,0,0,0,0,45766,0,57798,0,
-16740,0,0,6802,60454,0,0,0,26470,0,0,0,0,0,65382,4362,7750,0,0,0,0,0,0,9096,4743
-,334,0,0,0,0,0,0,39974,0,0,0,25828,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3027,0,0,
-0,15816,0,0,0,0,0,0,0,0,48327,0,0,0,0,0,0,0,0,0,0,16168,41799,0,0,24458,8581,0,0
-,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12292,0,0,0,0,0,0,0,0,0,0
-,0,0,0,0,0,0,0,54503,0,0,0,0,5097,30852,18664,0,0,0,0,0,0,16484,0,0,27337,0,0,0,
-0,0,0,0,0,0,0,0,0,35942,0,0,0,0,0,0,0,4356,0,0,0,0,0,57030,0,0,1417,41191,0,0,0,
-0,0,23429,0,0,0,0,10024,21735,0,0,10126,0,0,0,0,19046,0,0,0,0,0,0,24105,4710,0,0
-,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4394,0,0,0,0,13253,0,56391,0,0,0,0,0,0,0,0,0,0,
-0,19174,0,0,0,0,0,0,0,0,0,55974,0,0,0,52070,0,15620,0,0,0,0,0,2660,0,0,0,0,21644
-,0,0,52455,0,0,0,0,0,0,0,0,0,8902,0,0,0,0,0,0,3116,0,464,34726,0,0,0,0,0,0,25003
-,12423,0,27172,1896,7335,0,0,0,0,0,35686,0,0,0,0,3472,0,0,0,0,22406,0,0,0,0,0,0,
-0,0,0,45254,0,0,0,0,0,0,0,0,0,0,0,0,0,21124,23594,33127,0,0,0,0,0,0,16684,22087,
-0,0,0,0,0,0,0,0,0,0,0,0,8714,0,0,0,0,0,0,0,0,0,0,55814,0,0,0,0,0,0,4109,23460,0,
-0,8874,0,0,0,0,0,0,0,0,0,147,0,0,0,0,0,0,0,0,0,0,0,0,0,29960,63398,1302,0,0,0,0,
-0,0,0,0,24806,0,0,0,0,0,0,0,0,0,9799,0,0,0,0,0,0,0,31333,0,0,0,0,0,19557,0,0,0,0
-,0,5701,0,0,0,63014,0,0,0,0,0,0,0,21254,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12484,0,0,
-0,48326,0,0,0,0,0,0,0,0,0,0,0,15783,0,0,1202,0,0,0,0,23174,0,0,0,0,0,0,0,0,0,0,0
-,0,0,0,0,0,0,0,0,0,0,0,3086,49191,0,0,5387,15141,0,0,0,3365,0,0,0,0,20076,14021,
-0,0,0,0,0,0,0,0,0,0,376,40198,0,0,0,52039,0,24932,0,0,0,0,808,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,9860,0,0,0,0,0,23719,0,21476,0,0,0,0,20776,4807,0,0,3177,16678,0,0,110
-,10853,0,0,0,17382,0,0,0,0,0,0,0,0,0,43462,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-,0,0,0,7500,4966,0,0,0,0,0,0,0,52102,0,24516,0,0,0,0,0,0,0,0,0,0,0,0,0,26535,0,0
-,0,46247,0,0,0,15557,0,0,0,0,76,52327,0,0,0,0,17866,0,0,0,0,0,0,0,0,0,0,46758,0,
-0,0,0,0,19173,0,0,0,0,0,0,0,0,0,44038,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2985,0
-,0,0,0,0,0,14310,0,0,2125,45831,0,0,0,0,0,0,9838,0,13227,19492,0,0,0,29764,0,0,0
-,0,686,30053,0,0,0,0,0,30789,139,20837,0,0,0,0,502,18533,0,0,0,0,0,19111,0,0,0,0
-,0,31396,0,0,0,17444,0,0,0,0,0,0,0,49862,0,0,0,0,0,0,0,0,0,0,0,0,0,0,25610,550,0
-,0,561,0,29034,0,0,0,3528,0,0,0,1715,14661,18,63463,0,0,0,0,0,0,0,0,0,0,14186,0,
-0,0,0,0,0,0,0,0,0,0,29578,59014,0,39430,0,0,0,0,2250,16612,0,31780,0,0,0,0,0,0,
-462,16967,0,29029,0,0,0,0,0,23462,0,0,0,0,0,0,0,0,1768,0,6025,16998,1804,0,0,
-54182,0,0,0,0,0,0,0,0,14124,0,6154,29702,0,0,0,0,0,7716,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,48807,0,8292,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16389,5933,0,
-14857,51303,0,0,0,0,0,0,0,0,0,0,0,35623,9097,23047,0,0,23112,0,0,0,0,0,438,0,0,0
-,0,0,0,0,151,9254,1390,0,0,0,0,0,0,54215,0,0,0,0,6187,0,0,0,0,13095,0,0,0,0,0,0,
-0,0,0,0,0,0,9866,0,0,59622,0,0,0,0,0,0,0,0,0,25286,0,0,23848,32069,0,0,0,0,0,0,0
-,0,0,9255,2187,15270,437,0,0,0,0,0,0,0,0,0,0,19493,0,0,0,0,0,0,0,0,0,0,0,11748,0
-,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16902,0,0,0,0,0,0,0,0,0,22212,1865,17543,0,
-0,0,0,0,0,21996,0,0,0,0,55975,0,0,0,0,0,0,0,0,32138,21156,0,0,0,0,0,0,14249,0,0,
-0,2388,0,0,0,0,6823,0,0,0,0,0,0,0,0,0,0,0,0,0,26694,0,0,6059,53511,0,0,0,0,0,0,0
-,49542,6159,0,0,0,0,0,0,0,0,0,0,0,0,0,1036,24036,0,2501,0,0,0,0,0,0,17419,51271,
-3377,15142,0,0,0,0,0,0,5007,62374,0,56935,0,0,0,0,0,0,0,0,0,0,0,24422,0,0,0,0,0,
-0,0,0,942,0,0,0,0,0,0,0,0,0,0,28263,0,0,0,0,0,0,0,15622,0,19749,0,0,1611,0,22219
-,48583,25129,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,17476,0,0,0,0,0,0,0,0,0,0,
-721,0,0,0,0,32518,0,0,0,18469,0,0,0,0,0,0,5896,29927,3657,23046,0,0,3214,0,0,0,0
-,0,0,0,0,0,112,0,0,0,0,0,3048,455,0,31012,0,0,0,0,0,0,0,23270,0,32677,0,0,0,0,0,
-38086,0,0,0,0,0,0,0,0,0,0,0,0,0,4900,0,0,0,0,0,0,0,0,0,25541,0,18788,0,0,22248,
-1351,0,61734,4524,30629,0,14887,242,29063,0,0,14408,4741,0,0,0,37318,0,0,0,0,0,0
-,0,0,0,0,0,0,8106,0,32107,0,0,0,0,0,0,0,0,0,0,0,1481,0,0,28132,0,25798,0,59783,0
-,0,0,0,0,59078,0,0,0,23366,0,0,0,0,0,0,0,30887,0,0,0,0,16200,0,0,0,335,0,0,0,714
-,0,0,0,0,0,0,0,0,0,0,0,0,0,30730,9478,0,0,0,0,0,0,0,0,0,0,0,18790,0,0,0,0,663,0,
-0,0,1034,31431,0,0,0,0,0,0,0,0,0,0,30120,0,0,0,0,13925,0,0,0,0,0,0,2280,13414,0,
-0,0,0,0,0,22028,23687,3017,11047,0,0,21738,18630,0,0,0,0,0,0,0,30246,0,0,0,0,0,0
-,0,0,0,0,0,0,17257,0,21896,63783,0,0,0,21094,0,18662,0,25700,0,22533,0,0,0,0,0,
-6341,5800,11111,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15399,
-12970,6501,0,0,3179,26438,0,0,0,0,0,0,0,15750,0,13062,0,0,0,0,0,0,0,0,0,0,142,0,
-0,0,0,21284,11177,4391,0,0,0,0,19595,40647,0,0,0,0,0,11877,0,0,0,26439,0,0,0,0,
-695,49126,27467,11972,0,0,0,0,0,0,9961,0,0,0,31722,62982,0,0,0,0,15817,52710,0,0
-,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,24614,0,0,0,0,0,20550,0,0,5034,3942,0,0,0,
-45927,0,0,0,0,0,0,0,0,0,0,2548,0,0,0,0,0,0,45606,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-,0,0,0,0,0,0,3405,12582,15563,54087,0,0,0,0,0,0,0,0,0,0,0,0,24202,5893,0,0,0,
-44230,0,0,0,5605,0,47782,0,32230,0,0,0,0,0,0,0,0,0,0,0,7014,0,0,0,0,16488,3175,0
-,27237,0,0,0,0,0,40902,0,0,0,0,0,0,0,32004,31434,0,24392,0,0,0,0,0,0,0,0,0,0,0,0
-,0,0,0,0,0,29130,58214,0,0,0,0,0,0,29002,0,0,0,0,0,0,0,0,0,0,55366,0,0,0,0,0,0,0
-,0,0,0,0,37926,0,0,0,0,0,0,0,0,1290,0,0,0,4713,0,0,0,0,0,0,0,0,0,0,0,0,0,20812,0
-,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1803,966,0,17700,0,0,654,19109,0,51655,0,0,0,0,0,
-10470,1584,0,0,0,0,0,0,0,2506,0,0,25159,4303,0,0,0,395,15879,0,0,0,0,0,0,0,0,0,0
-,1352,6535,0,19652,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4722,7909,0,0,0,0
-,30152,0,0,64742,0,0,0,0,0,0,2153,9125,0,0,279,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-,0,0,0,41894,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-,0,0,0,0,1328,17030,0,0,0,0,0,0,0,54151,0,0,0,0,1775,54535,0,0,0,0,31624,0,0,0,
-7150,0,0,0,0,0,0,0,1840,35943,0,0,0,0,0,56455,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-64486,0,0,0,51174,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4134
-,0,0,0,0,0,0,0,0,0,0,0,17092,0,0,0,0,0,0,0,0,0,0,0,0,12,16134,19883,39943,10281,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,44711,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-14125,2407,0,0,0,0,0,0,0,0,0,0,26921,0,0,0,0,0,22188,0,20810,10053,0,0,0,0,0,0,0
-,0,0,0,0,0,0,0,0,0,0,0,0,0,0,29220,0,0,0,0,0,0,0,0,0,0,0,0,0,0,28170,0,15208,0,0
-,32517,5736,19271,3562,10534,0,0,0,59655,0,0,0,0,27084,60422,0,0,24969,0,0,0,
-2636,0,0,0,0,26277,0,0,0,0,0,0,0,0,0,0,0,30596,3594,0,0,0,8362,14565,0,0,0,0,0,0
-,10793,12326,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5906,59686,0,0,23081,517,0,15556,0,0,0,
-8486,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,19877
-,0,0,0,0,0,0,0,0,7497,0,0,26085,0,0,23784,63591,6568,6310,0,0,0,0,0,0,0,0,0,
-10054,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7018,14470,18858,0,5641,10660,0,0,0,0,0,0,0,
-35526,1515,0,0,0,0,0,0,0,0,0,0,0,27656,0,0,9606,0,39590,0,0,0,0,0,0,0,0,0,0,0,
-53926,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,232,4327,12649,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-,0,0,0,0,0,0,0,0,0,0,0,0,20199,0,0,0,0,0,0,26730,0,0,0,19400,14695,0,31334,0,0,0
-,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,19589,0,0,0,0,0,0,0,0,5064,11908,0,27333,0,
-0,0,0,0,0,0,47751,0,0,0,26662,0,0,0,0,0,0,0,55655,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,6245,0,0,0,0,0,0,0,0,23368,63911,0,0,0,0,0,0,0,0,1974,0,0,0,0,0,0,0,
-8520,24037,0,0,0,0,0,0,0,26279,0,0,0,22886,0,0,0,27782,0,30694,0,0,0,0,0,0,0,0,0
-,0,0,33703,0,0,0,30405,0,34598,0,51047,0,0,0,0,1908,0,0,0,0,0,0,0,0,0,0,1511,
-21897,0,0,0,0,0,0,51398,0,24870,0,32647,0,0,0,35015,0,0,0,0,0,0,0,11204,0,0,0,0,
-0,0,7758,57991,0,0,0,30949,0,0,22,15140,9162,0,0,0,0,0,0,25540,20136,7108,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16427,10789,9805,0,0,0,0,0,0,0,0,0,4680,0,0,52679,
-0,0,0,0,0,14884,0,0,0,16804,0,0,0,0,0,0,9578,5287,0,0,0,0,0,0,0,34054,0,0,0,0,0,
-19076,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7627,55719,0,39463,14446,58374,0,0,0,0,23465,
-15845,0,0,0,0,0,38534,0,0,0,17893,10922,0,7176,678,0,0,0,0,0,0,0,0,3113,46279,0,
-0,0,0,0,0,0,23334,0,0,18088,23268,0,62342,0,0,0,16613,0,0,0,0,0,0,0,0,0,38182,0,
-0,0,0,0,0,25292,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,10344,71,6446,0,0,1893,0,0,
-1106,0,28680,30756,0,41126,0,0,1492,0,15341,0,0,0,0,17575,0,21220,0,0,0,0,0,
-25060,2088,21828,0,0,0,0,0,358,0,0,0,0,0,16708,0,0,0,1668,0,0,0,0,0,12260,0,0,0,
-0,0,0,0,0,4078,0,0,0,0,0,12713,6215,0,0,20329,0,0,0,0,0,0,0,0,0,0,31204,0,0,0,0,
-0,0,0,0,0,0,3732,0,1646,0,0,27460,0,34406,17128,14341,0,0,0,0,0,19527,0,0,0,0,0,
-0,0,0,0,0,6120,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8551,21546,10212,3020,
-2951,0,17638,0,0,6985,44999,2218,8197,0,0,30472,63366,0,26660,0,0,0,0,0,0,0,0,0,
-0,0,0,1265,0,0,0,0,0,0,0,2610,0,0,0,11278,20295,0,0,0,0,0,19780,0,0,0,0,0,0,2353
-,10852,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5421,24292,0,0,0,0,0,0,0,0,0,0,0,0,0,34407,0,
-0,0,0,0,0,15432,20774,0,0,0,0,0,0,0,0,12360,10757,0,0,0,33126,0,0,0,0,0,0,0,0,0,
-0,0,29573,0,2343,0,0,0,0,0,63079,0,0,0,0,0,0,0,0,0,43015,0,16038,0,0,0,0,0,0,0,0
-,1480,25573,0,0,0,0,0,0,0,8839,0,0,0,0,0,0,0,24645,0,0,0,0,0,0,0,0,0,0,0,0,0,
-5063,0,0,0,0,0,45830,0,0,0,0,0,0,0,0,0,0,823,0,0,64039,0,0,0,0,0,0,0,0,0,0,0,0,0
-,15300,0,0,0,0,0,0,2924,46759,6760,19268,0,0,0,0,0,0,0,0,0,34182,0,0,3977,18149,
-0,0,0,32199,0,0,0,0,0,0,0,0,0,23524,25994,0,0,10343,0,0,0,9733,0,0,0,0,0,0,0,0,0
-,4740,0,0,0,0,0,0,0,0,0,16741,0,0,4626,23367,0,0,31400,0,0,3557,0,0,4234,0,0,0,0
-,0,0,28486,0,0,0,0,0,14213,0,57191,0,0,0,0,0,0,0,0,0,0,240,0,0,0,0,65318,29832,0
-,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,29989,0,31846,0,0,8170,0,0,4421,27626,30884,0
-,0,20204,0,0,0,0,44614,534,20868,0,0,0,0,0,0,0,0,0,0,0,0,0,28710,0,10277,0,0,0,0
-,0,29511,0,19813,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,27020,0,0,0,0,0,0,53094
-,0,35207,0,0,0,37542,0,61766,8584,8037,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12488
-,22757,0,0,0,0,0,0,0,0,0,0,0,0,0,23814,0,0,0,0,0,0,0,0,0,19973,0,0,0,63943,0,0,0
-,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,36006,0,0,0,19012,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-,0,0,0,0,8580,0,0,0,0,0,0,0,18021,0,0,0,0,0,0,0,0,80,1254,0,0,0,42630,0,0,0,0,0,
-0,0,16262,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2124,25479,0,0,0,0,16873,0,0,0,0,3142,
-0,0,18443,0,0,0,0,0,3917,0,8841,1190,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-,0,20645,0,0,0,0,0,0,0,0,0,0,0,9284,0,0,24394,41351,0,0,0,42087,0,62566,0,0,0,0,
-0,0,0,0,0,0,6728,4199,0,0,0,0,25515,0,1231,0,374,15623,0,29956,0,14118,0,0,0,0,0
-,19047,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,31718,0,0,0,0,0,0,0,0,0,0,0,20900,0,16743,0
-,0,0,28902,0,0,0,0,0,0,0,0,0,0,0,0,2578,0,0,0,0,0,0,0,0,0,13838,0,0,10052,0,0,0,
-0,7432,43783,17097,0,0,0,0,0,873,0,0,0,398,0,0,0,0,0,0,0,0,0,8459,23559,0,53030,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,35750,0,4071,0,0,0,38662,0,41414,0,0,0,0,11656,0,0
-,0,0,0,4011,42695,0,0,0,0,0,0,0,0,0,0,0,0,0,0,25353,0,0,0,0,0,0,0,27177,22372,0,
-0,0,0,0,30980,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,46278,3976,12711
-,0,0,0,0,0,0,0,0,0,0,0,20517,0,0,0,0,0,0,0,0,0,0,0,0,4072,11078,0,0,16553,2405,0
-,0,0,0,0,0,0,0,2670,0,0,0,0,0,0,32998,0,0,0,0,0,0,0,47046,0,30533,0,0,11050,9734
-,13129,0,0,0,0,23494,0,0,0,0,0,58310,0,0,0,57543,0,0,0,0,0,0,0,0,0,0,0,0,0,454,0
-,0,0,0,0,0,5163,59687,2220,0,0,0,0,0,0,29510,0,0,0,0,0,0,0,0,0,0,0,17316,0,20069
-,0,0,0,0,0,0,0,0,0,5319,0,0,0,0,0,0,0,0,0,27174,0,0,0,0,0,0,0,22949,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,19208,0,0,0,0,0,0,20933,0,0,6026,8742,0,0,0,17380,0,13127,2797,0
-,0,30116,0,0,5963,8004,0,57126,0,0,0,0,0,42854,14792,30759,0,24964,0,0,0,0,0,0,0
-,0,0,0,0,0,0,0,0,0,0,16933,0,0,0,0,0,0,15176,40839,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-788,30341,0,0,0,0,21036,24102,0,0,0,0,30123,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-22597,31531,26789,0,59559,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9352,29863,0,0,0,0,0,0,0,0
-,0,24551,0,0,0,0,0,0,0,20516,0,0,0,39462,3665,0,28265,0,8778,64262,0,57414,9132,
-0,0,18276,0,0,0,0,0,0,0,0,0,0,26344,30725,524,19751,0,13796,0,0,0,0,0,0,0,0,0,0,
-18155,0,12841,0,74,24998,13579,1061,0,64199,0,0,8776,0,0,60231,0,25412,0,0,0,
-59143,0,0,0,0,0,0,14344,1510,0,0,0,38374,0,0,0,0,0,0,0,0,13353,0,0,0,0,0,0,0,0,0
-,0,9446,0,0,0,0,0,0,0,32613,0,0,0,0,0,0,0,0,0,0,0,0,0,19844,0,0,0,0,14859,0,0,0,
-0,6662,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14154,0,29770,0,0,0,0,0,
-16520,2182,0,0,0,0,0,36102,3340,0,0,0,0,0,0,0,0,25189,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,15720,0,0,0,0,0,0,22758,0,0,304,0,3243,14117,0,0,0,0,0,0,0,0,0,0,5130,
-12679,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,21733,10441,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,36103,0,0,0,0,0,23590,0,57479,0,0,0,0,0,0,0,0,0,0,0,0,10824,
-18372,0,0,0,0,0,35078,15722,12967,0,0,0,0,0,34599,0,0,0,0,0,0,0,0,0,0,0,0,0,
-53639,0,38630,0,0,0,0,0,0,31017,11333,0,0,0,0,19144,0,9513,0,0,0,0,0,0,0,0,56711
-,24042,0,1197,0,0,58502,0,0,0,0,0,0,0,0,0,8230,6121,18628,0,0,0,0,0,0,25290,0,0,
-0,0,0,1514,0,0,0,0,0,0,0,14378,9798,32363,0,0,0,0,0,9577,0,0,0,0,0,0,26788,0,0,0
-,0,0,0,330,10533,0,0,0,0,0,42246,0,0,0,0,0,0,5074,21028,0,38119,0,0,0,0,0,0,248,
-0,31176,62054,0,53287,0,0,0,0,271,0,0,0,0,0,0,0,0,0,0,0,0,0,9224,2117,0,0,0,0,
-15818,5607,0,52582,0,0,0,0,0,0,0,0,18248,24005,23018,0,0,0,0,0,0,0,0,0,0,0,0,0,
-427,0,0,39910,0,0,7080,11399,0,0,0,0,0,0,0,0,0,0,22220,57894,0,0,0,0,0,0,0,13156
-,0,1413,1007,0,0,0,0,21415,0,21543,0,0,0,0,0,0,0,0,0,41702,22538,9573,0,0,0,8806
-,0,0,6920,56359,0,0,0,0,0,0,0,0,0,0,0,42215,0,0,13708,0,0,0,0,0,0,0,0,0,0,16453,
-0,0,0,0,0,0,1582,1764,3282,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11653,0,0,0,0,12139,0,
-29482,31076,1673,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,40262,0,0,0,33862,0
-,0,0,0,0,20996,0,0,0,0,0,4615,0,0,0,0,0,0,0,0,0,0,0,43943,333,19367,0,0,0,0,0,0,
-0,26821,0,32389,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4936,11687,0,0,0,0,0,0,0,0,0,10885,0
-,0,0,0,0,25926,0,0,0,0,0,0,15851,0,0,0,0,0,0,0,0,0,8360,0,17130,7942,0,11460,0,0
-,0,0,0,0,0,0,0,0,0,0,0,0,0,18150,14248,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-22310,0,0,0,42758,0,0,0,0,0,0,0,0,29354,5574,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-,0,0,0,0,0,0,0,0,0,0,0,31109,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11236,0,0,0,0,0,0,0,0
-,0,0,0,0,0,9156,0,0,1801,14023,0,0,0,0,0,62406,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-23620,0,0,0,0,0,0,0,0,0,0,31018,65510,0,0,0,0,0,0,0,26182,0,0,0,0,0,0,0,27717,0,
-0,0,0,0,0,0,46950,0,0,0,0,0,0,0,0,0,0,0,0,0,31108,0,11366,0,0,0,3717,0,0,0,0,0,0
-,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8552,6054,3339,0,0,0,0,51622,0,
-0,0,0,0,0,0,3718,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,28358,0,2756,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,1462,0,0,27622,0,0,0,0,0,0,0,62502,14410,56743,0,0,0,0,0,0,0,0,0
-,0,0,0,0,0,0,0,0,0,0,0,0,0,12206,0,0,0,0,0,0,0,0,0,0,0,0,36550,0,38054,0,0,0,
-21221,0,0,0,0,0,0,0,27077,0,0,16906,0,12587,12101,0,0,0,0,0,0,10414,28775,21769,
-60167,0,56646,0,0,0,0,0,20740,0,0,0,0,0,0,5931,5351,0,65478,0,0,0,0,0,0,7977,
-52647,0,4868,0,0,0,55463,0,0,0,0,0,32197,0,0,0,0,0,13445,0,0,0,26631,0,0,0,0,0,
-11237,0,0,0,0,209,1285,0,0,1928,0,0,0,0,43334,23849,23172,0,0,0,0,0,0,0,0,24712,
-62439,8811,3463,20457,0,0,0,0,0,0,0,0,0,16008,56263,0,0,0,0,0,0,0,0,0,0,0,60358,
-22761,6565,0,0,30888,27686,0,0,0,17093,0,0,0,0,22121,0,0,0,7593,14182,0,28103,0,
-0,0,0,0,45126,0,0,0,0,0,0,0,0,0,0,0,0,0,31844,0,0,0,0,0,0,0,0,0,0,0,0,0,18500,0,
-0,0,0,28202,0,0,0,0,0,0,0,0,26308,0,29541,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-29572,0,0,0,21285,0,0,0,0,0,60839,0,0,0,0,0,30407,15949,2981,0,0,0,46439,0,0,0,0
-,0,23911,26505,25222,12811,5895,0,6343,0,0,0,0,0,0,0,0,0,0,0,31815,0,0,0,0,0,0,0
-,0,19688,10245,0,0,0,31301,26985,28964,0,0,0,0,0,0,0,0,27208,31172,0,0,0,0,216,0
-,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16292,0,0,0,0,0,8743,0,0,0,0,0,0,0,0,
-0,0,0,0,0,6438,0,0,0,33319,0,0,0,33286,0,0,0,0,0,0,0,0,0,22181,7499,24774,0,
-10756,0,44775,724,0,25768,25669,24873,5349,25257,0,0,54566,0,0,0,0,0,0,0,0,0,0,0
-,327,439,357,0,0,6536,8452,0,0,1802,0,0,61350,0,15045,0,0,0,0,0,0,0,0,0,0,0,
-38343,0,0,0,0,0,0,0,0,0,0,32491,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-22885,0,0,32073,0,0,0,9546,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,27748,0,0,23176,0,0,0
-,0,0,0,0,0,0,0,0,0,24583,0,0,0,0,0,34118,0,0,0,0,2158,0,5586,30340,0,0,0,0,0,0,0
-,0,0,0,0,0,0,24452,0,0,0,0,2409,4390,0,24196,0,0,0,0,0,0,32264,26948,20587,0,0,0
-,2155,0,0,0,0,0,0,0,0,0,0,0,4328,26276,0,0,0,0,0,0,0,0,23564,0,12458,11367,0,0,
-25162,0,0,0,0,0,0,65414,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,32966,0,0,0,
-34662,0,0,0,0,0,39238,0,0,0,0,11400,10214,266,12452,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,15173,0,0,0,13668,0,13222,0,23364,0,0,0,0,0,11941,0,0,0,0,0,0,0,0,0,
-25575,0,0,0,57383,0,0,0,10308,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,2865,9287,75,0,0,0,0,0,0,0,0,0,0,21508,22380,59526,0,0,0,23589,0,0,0,51590
-,0,0,0,0,0,0,0,0,0,0,0,4645,3980,28295,0,0,0,0,0,12388,0,0,0,0,0,0,0,0,0,0,0,
-21734,0,17607,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,41767,0,0,0,0,0,0,0,18436,0,0,0,0,0,
-0,0,21958,0,19430,0,0,1204,0,0,0,0,0,0,0,0,0,3240,55239,0,0,0,0,0,30660,0,0,0,
-28901,0,0,0,0,4716,0,0,0,0,0,0,0,0,0,0,0,11754,0,0,0,0,22086,0,22564,8749,0,0,
-28391,0,0,0,0,0,0,0,0,0,0,0,2886,0,0,0,0,0,0,0,29062,0,0,0,0,0,0,0,40358,0,0,
-15916,39526,0,13735,0,0,0,0,28938,0,407,4006,0,0,0,26916,0,0,0,0,0,27526,30280,0
-,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,24586,0,24649,5126,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8684,0,0,0,0,0,0,0,23019,0,22377,18599,0
-,0,0,0,0,0,0,0,0,0,27593,9735,0,20196,0,0,0,0,28168,48423,0,0,0,0,0,31399,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,13892,0,0,0,0,0,17606,0,0,15242,29767,26378,17701,0,0,
-14472,0,4840,0,0,0,0,0,0,24708,0,9349,4330,0,0,0,0,0,0,0,16137,0,0,34854,0,0,0,0
-,0,0,0,0,0,0,0,25063,0,0,0,0,0,0,6603,12583,0,0,0,0,0,0,0,0,7433,29188,0,0,0,0,0
-,31270,0,0,22920,3143,0,0,0,0,0,23461,0,0,0,0,0,0,0,0,618,0,0,0,0,21381,0,11524,
-0,0,0,0,0,0,21004,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,312,23239,0,0,0,0,0,0,0,0,0,0,0,
-0,2313,0,0,40614,0,0,14825,0,0,0,0,0,0,46535,0,41190,7853,0,31656,0,0,0,0,0,0,0,
-0,0,3433,5255,0,0,0,0,0,0,0,33958,0,0,0,0,72,15493,0,0,0,0,0,0,0,36070,0,0,0,0,0
-,0,0,14724,0,0,0,0,0,29828,0,0,0,0,0,0,0,18822,20008,0,0,0,0,2438,2952,0,0,0,0,0
-,0,0,0,0,0,0,0,0,3342,0,0,0,0,0,0,0,0,0,0,0,0,0,0,24420,0,19908,0,0,0,8101,0,
-17479,0,0,3530,0,8202,29319,0,0,1132,6789,0,0,23881,0,0,0,4810,0,0,46918,0,0,0,
-41574,0,0,0,0,0,0,0,0,0,48582,0,0,0,0,0,0,0,0,0,0,0,0,0,39334,0,0,0,26117,0,0,0,
-0,0,0,5100,0,0,0,0,0,23496,27813,4045,54918,0,0,0,0,0,0,6473,7428,0,0,0,0,6792,0
-,0,0,0,0,3560,32103,0,0,0,0,0,0,0,0,0,0,0,54790,0,0,6926,0,0,0,0,16518,0,0,0,0,0
-,20806,0,0,0,0,1841,3174,0,0,0,0,9612,18374,0,0,0,0,32744,0,0,9671,0,59879,0,
-23300,8073,0,0,14758,0,0,0,10342,0,0,0,0,0,0,24808,14759,0,0,0,0,0,0,5515,0,0,
-14852,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2354,23271,0,32740,0,0,0,0,0,0,0,0
-,0,0,18472,0,0,0,0,0,0,0,0,33190,0,0,0,0,0,0,0,0,8972,21669,0,0,0,0,0,0,0,0,0,0,
-0,25574,0,0,0,0,5096,0,14283,55367,0,0,0,0,0,0,0,0,0,12644,0,0,0,0,4651,0,0,0,0,
-0,0,0,661,0,0,13638,19466,0,0,0,0,0,31273,0,8010,0,0,0,0,0,3211,0,0,0,0,63430,0,
-0,0,0,0,15237,0,0,0,0,0,0,19018,2437,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14312,0
-,0,0,0,16836,0,0,471,35975,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-,6023,0,0,0,0,0,0,0,0,11593,9639,0,0,0,55783,0,5700,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,27908,0,26598,0,0,6667,6470,0,0,0,0,0,0,0,
-62534,0,0,0,0,16522,27911,0,0,10025,7172,0,0,779,0,360,17477,0,0,0,61991,7752,
-7717,1494,0,0,0,26569,40742,0,0,0,0,0,0,0,26406,10474,32196,0,0,0,0,0,50567,
-16521,11716,0,0,0,0,0,55558,0,0,0,0,0,0,0,0,0,0,0,61926,0,26436,0,0,0,0,4459,
-10598,0,0,0,0,0,0,0,0,0,0,0,9223,0,29318,0,0,0,0,0,60423,0,0,0,0,0,0,0,47078,0,
-50246,0,12612,0,0,0,0,0,0,0,61799,0,55015,0,21060,7309,0,0,0,0,0,11976,0,0,0,0,
-23527,0,0,0,0,0,0,10347,15942,0,34023,0,0,0,0,4969,0,0,0,0,0,0,0,0,28997,0,0,0,0
-,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,36454,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-3466,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,19716,
-28872,0,0,0,0,0,22152,0,0,0,0,0,0,26342,0,0,0,9764,0,0,0,0,0,0,0,21798,0,0,0,0,
-13,6853,32136,0,0,0,0,0,0,0,750,0,0,54502,0,0,0,0,0,0,0,0,0,46183,0,0,625,22854,
-0,0,0,0,2061,23588,0,0,11049,56262,0,0,18538,1509,0,0,17258,4453,0,0,0,0,12429,0
-,0,0,0,8102,0,0,0,0,0,0,8074,0,23852,0,0,0,0,0,0,0,0,0,0,0,16136,3428,0,27876,0,
-0,0,7332,0,0,0,0,0,28900,0,0,2284,0,0,17573,201,1508,0,0,0,0,0,0,0,0,0,31365,
-27688,22565,0,0,0,5159,0,0,0,0,4584,42599,0,0,0,44422,1068,23173,0,0,0,613,0,0,0
-,12645,0,0,0,0,0,27076,6732,0,0,0,3913,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-,0,0,0,0,0,0,0,0,0,0,0,22244,29992,15911,0,0,0,0,0,22982,0,0,0,0,0,0,0,50598,0,0
-,0,0,0,0,5161,1574,0,0,0,0,0,0,0,0,0,19108,0,0,0,35014,0,0,0,25956,29067,0,0,0,0
-,0,0,0,0,0,0,47079,0,0,0,0,0,0,0,0,0,0,1356,61927,0,0,0,64455,2122,64231,0,0,
-18763,0,0,0,0,0,0,0,0,0,907,34471,0,0,0,39078,0,0,1995,0,0,0,0,0,0,0,0,0,0,56518
-,0,0,0,0,0,0,0,0,0,0,0,0,822,0,15978,44423,0,0,3112,325,0,0,0,0,0,15397,0,0,0,0,
-0,0,0,0,0,0,1193,4294,4968,15559,0,46150,0,0,0,0,0,18917,0,0,0,0,0,0,9928,37543,
-0,0,0,0,13097,36999,0,0,0,15430,0,0,8424,29639,0,0,0,0,0,0,0,0,0,0,0,0,0,25734,0
-,0,0,0,0,0,0,0,0,0,0,0,0,40487,0,13284,0,11141,0,0,0,32388,0,0,0,0,0,0,0,0,0,0,0
-,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5298,57702,0,0,0,0,0,0,0,13060,0,0,0,0,0,0,
-8233,42278,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,36422,0,0,0,7972,0,0,0,
-18437,0,0,0,0,7406,0,0,0,9225,0,0,0,0,0,0,0,0,0,13865,47591,18220,53703,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2796,0,0,0,0,0,24940,17223,0,0,0
-,13221,0,0,0,0,0,0,0,0,0,0,15848,0,0,0,0,0,6122,1735,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-,0,0,0,0,16968,18151,0,0,0,0,0,47494,0,0,0,0,0,0,26089,19494,0,0,0,0,0,15494,0,0
-,0,0,0,0,0,0,0,0,28809,0,0,0,0,42727,0,55174,0,0,0,0,0,0,0,0,0,0,0,20485,0,0,0,0
-,0,0,0,0,0,0,0,58598,0,0,0,0,0,0,0,0,0,0,0,0,0,15172,0,0,0,0,0,0,0,0,0,35302,0,
-48135,20972,33094,0,0,0,0,0,9765,0,0,0,0,0,0,0,0,0,39559,0,0,13736,6950,0,0,0,0,
-23658,8903,0,0,0,0,0,0,0,22662,0,0,0,0,0,58886,7468,0,0,0,0,0,0,0,0,64550,0,0,0,
-0,0,47622,0,0,0,50886,0,0,0,0,0,57606,912,0,0,0,0,0,0,0,0,0,1449,0,1169,0,718,
-46151,12104,0,0,0,0,0,0,48230,0,0,0,0,0,0,0,0,0,0,1259,0,0,33734,23208,62567,0,
-65158,0,0,0,0,0,0,0,0,0,0,28684,59878,0,0,0,0,0,0,0,0,0,0,25769,0,0,0,0,65479,0,
-0,0,0,555,22789,0,19748,1769,10246,8680,0,0,0,0,0,0,0,0,0,14250,0,5899,3303,0,0,
-0,0,0,0,0,0,21097,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,21638,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,10795,0,0,0,16204,0,0,0,0,0,26986,2469,0,14660,0,0,0,0,0,45447,
-12234,3494,4555,10566,0,0,0,0,0,0,0,0,0,0,0,0,2801,0,0,0,15755,0,0,0,0,0,0,0,0,0
-,0,0,0,0,0,0,0,0,0,39654,0,0,0,0,0,0,6763,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-33574,0,10279,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,63527,0,0,3912,0,0,7492,0,0,0,35142,
-0,0,0,0,0,0,17576,8103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16713,4198,0,0,4782,0,0,0
-,0,0,0,0,0,0,0,0,0,0,0,16228,0,0,0,0,25961,20166,0,0,0,10980,0,0,0,0,0,14340,
-18922,14567,0,44199,0,0,0,0,0,0,0,18406,0,0,0,0,0,37606,0,0,0,0,0,0,0,0,0,20902,
-0,0,0,56358,0,38342,0,0,0,0,9514,36071,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,21700,0,0,
-5266,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1134,0,1453,0,0,0,0,0,3882,0,0,0,
-0,0,0,0,0,4004,0,0,0,51910,0,0,0,0,0,23076,4648,0,0,0,31051,25351,0,0,0,22884,0,
-0,0,0,0,63975,0,0,2376,16997,0,0,2096,0,0,0,3373,7046,0,0,0,0,0,0,0,30726,0,0,0,
-0,20,0,13707,614,0,0,12840,3079,0,0,0,0,0,51046,3729,0,32680,0,0,0,0,0,24008,
-62759,0,0,4745,0,0,0,0,0,0,0,0,0,0,0,0,0,2414,0,0,44262,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,24937,0,0,0,0,0,0,0,0,19140,0,13575,0,0,0,0,0,0,0,39110,0,0,0,28036,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,4261,0,0,0,0,5992,0,264,0,0,0,0,0,0,0,13739,0,21928,0,
-0,0,0,0,0,0,0,0,0,0,4232,15110,0,0,0,0,0,0,0,0,0,30022,0,0,27977,0,0,0,0,0,24776
-,0,0,0,0,0,2962,0,0,0,0,0,0,26564,22441,0,0,0,0,0,13640,11205,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,19305,1894,0,0,0,0,0,0,0,0,0,0,9389,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14119,
-5224,135,0,0,0,0,0,0,0,0,0,25796,0,0,0,0,0,0,7470,0,0,0,0,63815,0,55654,0,0,
-12584,0,1524,33223,0,0,0,9895,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11624,
-0,0,0,5614,0,0,0,0,0,0,0,21320,0,0,53607,0,51206,0,0,0,25863,0,0,0,0,0,0,0,0,0,0
-,0,8964,1740,0,0,0,0,0,0,0,0,13476,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7975,0,
-0,3306,8134,0,8389,48,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,25766,0,0,0,0,0,0,0,0,0,
-52166,0,0,0,0,0,0,0,0,0,0,0,0,0,21477,31112,31652,0,0,0,0,0,0,0,28452,0,0,0,
-44231,0,0,0,0,0,0,0,24805,0,0,0,0,0,0,0,0,0,0,12428,6471,0,0,0,0,525,17926,0,0,0
-,26919,0,0,18120,0,0,0,30024,0,0,0,0,0,0,0,0,0,0,29189,0,0,0,43559,0,0,0,0,0,0,
-19787,7557,0,59334,0,0,10184,6085,0,44039,0,0,0,0,0,0,0,11175,0,0,0,0,30440,
-63110,0,0,0,0,0,0,11017,0,0,0,0,0,0,0,0,27204,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,29126,0,0,0,0,0,0,0,0,0,0,0,0,0,0,622,0,5226,2727,0,15588,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4650,0,2675,0,0,32420,0,0,0,61511,0,0,
-5419,17829,2123,0,0,0,0,0,0,0,0,0,0,0,0,0,0,38183,2640,0,11274,14533,1842,0,0,
-42663,12681,3430,0,11845,0,0,0,0,0,0,0,0,0,6533,0,0,0,0,0,54598,0,0,0,0,0,0,0,0,
-0,0,0,0,12616,38535,0,0,0,0,0,32229,0,0,0,54279,0,48614,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,31401,0,0,0,0,34310,0,0,0,22788,0,52134,0,0,0,0,0,0,0,23302,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,40678,0,0,0,51463,535,0,0,0,0,15525,0,0,0,0,0,0,4904,869,0
-,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,63718,0,0,0,0,0,0,0,0,1678,0,692,0,0,0,
-0,0,0,0,0,0,26216,0,0,0,0,0,29355,0,0,0,0,25095,0,0,0,0,4335,0,0,0,0,0,14538,0,0
-,0,0,0,0,0,0,0,27273,55014,0,0,0,0,0,27271,0,0,0,0,0,30468,0,0,0,0,18186,0,0,0,0
-,0,14345,0,0,0,2152,0,0,0,0,0,0,0,0,0,0,0,0,0,0,58438,21034,0,23339,21318,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,21412,0,0,0,0,0,0,0,12869,0,0,4875,0,0,0,0,29191,0,0,0,0
-,0,0,1640,10247,0,14244,0,0,0,0,9867,0,0,0,0,0,12363,0,0,7653,0,0,4168,2663,0,
-4580,0,11143,0,0,0,0,0,0,0,30662,0,0,0,0,0,6724,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,13764,0,0,0,0,0,0,0,0,0,0,0,0,234,6821,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-,0,0,0,0,0,0,0,0,0,25639,0,0,0,0,0,0,0,0,0,29958,0,3461,0,0,0,0,0,0,0,0,0,28324,
-18795,7013,12746,11655,0,37287,0,0,10953,7718,9705,0,0,0,0,0,0,0,0,0,0,46534,0,0
-,0,0,0,0,0,0,0,0,8137,17988,0,25156,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,41415,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15784,6918,0,0,0,0,7019,10919,0,0,0,
-0,0,0,0,0,0,0,4171,55495,4940,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,22440,19333,0,0,
-28136,0,6249,21317,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,53414,0,0,0,57318,0,0,0
-,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,39303,0,0,0,0,0,19940,0,0,0,0,0,0,0,25543,0,0,0
-,0,0,0,0,0,0,0,0,0,2698,3911,0,0,0,26790,0,0,0,0,0,0,32424,0,0,18470,0,0,0,14726
-,29834,0,0,0,0,0,0,0,0,0,0,0,1000,4197,0,0,0,19366,0,0,0,39878,0,0,0,0,2185,8901
-,5288,9829,25000,0,0,0,0,0,0,1062,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,35622,0,
-0,23048,62503,6506,0,0,0,0,0,0,0,13609,10438,0,0,0,0,0,0,0,0,0,0,7723,42119,0,0,
-0,0,0,13317,0,0,0,41606,0,27111,0,0,21194,11461,0,0,0,0,26856,58342,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,20940,48710,0,0,0,0,0,0,5227,0,0,0,0,0,10061,31300,0,0,0,19236,0
-,0,0,0,0,30277,13896,0,0,0,12876,13159,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,428,
-46951,13134,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15462,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,21668,0,0,0,0,0,0,0,0,0,0,0,0,2249,0,0,0,0,44967,0,0,0,0
-,0,0,3465,0,0,0,0,0,0,0,0,0,0,0,0,0,0,24868,0,0,0,0,0,23909,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,2190,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16164,0,
-10437,0,0,5263,20102,20938,0,0,0,1192,1030,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-,0,21385,4870,0,0,0,0,0,0,0,0,0,0,0,18596,0,0,0,0,1422,4038,2858,0,0,0,0,0,0,0,0
-,48998,0,0,0,0,0,0,0,0,6508,37350,0,0,0,0,0,0,0,0,17001,39431,0,0,0,0,0,30182,0,
-21445,7403,28164,0,51750,0,0,0,62631,0,0,0,0,0,0,0,31206,0,0,0,0,0,0,0,0,0,0,0,
-7751,0,0,0,0,0,0,0,0,0,13477,0,0,456,26693,0,0,0,0,0,0,0,0,0,0,0,0,14890,0,0,0,0
-,0,26697,22022,13225,27364,0,0,0,18884,0,0,0,0,0,0,0,0,3659,0,0,0,0,0,0,0,0,0,0,
-0,1448,5413,0,0,0,0,0,0,0,0,0,0,0,6340,0,0,18091,18725,0,0,0,0,0,0,0,0,0,0,0,0,0
-,22118,0,0,0,18981,0,0,0,0,0,0,0,0,0,29223,3724,0,0,0,0,43526,0,0,0,25668,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,21545,9862,0,22692,32201,60646,0,7300,0,0,
-0,58887,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,19460,0,0,0,0,0,0,0,0,0,50342,0,
-65255,4360,17286,0,0,0,0,0,0,0,28708,0,0,30025,60102,0,0,0,0,0,0,0,0,0,47014,0,
-31973,0,9572,0,0,0,0,0,0,0,18501,0,0,0,0,0,14597,0,0,0,53735,5228,22183,0,0,0,0,
-0,0,1554,24164,0,0,0,0,0,0,0,0,0,0,0,0,10827,0,0,0,0,34918,0,0,0,0,22252,0,0,
-46855,0,0,0,0,0,31207,0,0,10733,0,0,63334,0,0,0,0,8616,50119,20169,12678,0,0,0,0
-,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,58087,20298,5,0,0,30920,0,0,0,0,0,0,0,296,13190,0
-,30663,0,0,18536,12228,0,6788,0,0,0,0,30890,21796,0,0,526,0,0,0,0,0,0,0,0,0,0,0,
-0,20965,0,0,0,0,2161,0,0,0,0,0,0,24038,0,0,0,0,13544,7398,0,0,32522,9605,0,0,0,0
-,3208,7590,0,0,0,43846,0,0,0,38663,0,0,0,0,0,39014,4142,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,6373,0,0,13676,0,0,0,0,30374,21288,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,22791,0,0,0,0,0,37958,0,0,0,0,0,0,0,0,0,0,9452,
-9990,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4841,0,0,0,0,18820,152,0,0,0,0,0,13260,3334,0,0
-,24234,8422,0,17957,0,0,0,10244,0,0,0,0,0,0,0,0,0,0,0,7204,0,0,0,0,1201,26151,0,
-31173,0,0,0,0,0,0,0,0,0,0,0,0,0,64838,4203,7525,521,0,18888,37031,0,0,0,0,0,0,0,
-0,7082,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4490,12487,0,0,0,0,0,0,0,36615,0,0,
-0,14854,0,0,0,0,0,0,0,0,0,0,0,0,6539,13029,9704,38983,0,0,0,0,168,10405,0,0,0,0,
-394,25607,0,57063,0,0,0,0,0,0,0,0,0,0,16141,19878,0,0,0,0,0,0,0,0,0,29446,0,
-12036,0,0,0,0,0,6982,18572,0,24584,14535,0,0,0,0,0,0,0,0,0,0,16,0,21642,0,0,0,0,
-0,0,5254,0,0,0,0,0,0,0,0,1622,0,0,0,0,0,0,0,0,0,0,0,0,0,3853,9126,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,7241,10982,0,0,0,0,0,0,0,0,0,0,0,0,0,0,950,0,0,57990,0,0,277,0
-,0,0,694,36007,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,42470,0,0,0,0,18409,
-51142,0,0,0,0,0,0,0,0,0,28646,0,0,0,30693,0,0,0,0,0,56295,5544,0,0,0,0,8518,8366
-,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,45670,0,0,
-9608,33062,0,0,0,0,0,0,0,0,0,0,0,18694,0,0,0,0,1672,23493,0,0,6955,7655,0,36134,
-0,0,0,0,0,0,0,0,23432,647,0,0,0,0,0,0,0,0,0,0,0,13382,0,0,0,19621,0,0,0,0,0,0,0,
-0,0,20228,0,0,2728,31495,0,0,0,0,29096,22213,235,35495,0,0,0,0,0,0,0,0,0,0,0,0,0
-,0,0,5348,0,0,0,0,8968,1989,0,0,1066,0,0,11492,5965,31367,0,0,0,0,0,0,0,0,0,0,0,
-18727,0,0,0,6757,0,0,10765,4646,0,36166,0,27943,0,0,26888,8420,0,0,0,0,0,0,0,0,0
-,29316,0,0,0,0,0,0,0,0,0,0,4975,0,0,0,14762,3111,0,0,0,0,0,43399,0,0,0,0,0,0,0,
-18980,0,0,0,0,0,44550,0,0,0,0,4051,0,0,0,0,37734,0,0,0,0,0,5188,0,0,0,0,0,24486,
-0,5989,0,41159,0,0,0,0,0,0,0,0,0,20326,0,0,747,6884,0,0,0,41798,0,0,3117,22919,0
-,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,21032,0,0,0,0,0,0,0,0,9574,0,0,0,0,0,0,
-4302,0,0,0,0,0,0,0,0,0,0,0,21068,34630,0,0,0,0,0,64071,0,0,0,0,0,0,26667,7943,0,
-0,0,0,0,52934,0,0,17002,0,0,0,0,0,0,20294,0,0,0,0,0,0,0,0,0,27301,18347,7974,0,0
-,0,0,0,0,0,0,16874,0,0,0,0,45414,0,0,0,0,0,0,648,1575,0,0,0,31749,0,0,0,23301,0,
-0,0,0,0,0,0,0,0,0,0,0,15912,50535,0,0,0,0,1993,8582,0,0,0,0,0,0,0,38438,0,0,0,0,
-0,0,0,0,0,0,0,0,15850,6183,0,0,0,0,3402,0,0,27494,0,0,749,0,0,0,0,0,0,0,26025,
-29606,0,0,7144,19622,30504,0,0,0,0,0,0,0,0,21316,0,0,0,0,0,0,0,0,0,21444,0,0,
-1289,6919,0,0,0,0,0,0,8299,0,0,0,14090,35655,0,0,0,0,0,0,0,0,2377,15206,0,0,6028
-,4452,0,25508,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,50310,0,0,0,0,1269,0,0,0,0,0,0,0,0,0
-,0,0,0,51014,0,0,0,0,0,0,0,9286,0,7429,0,0,28393,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-,0,0,0,16680,452,0,0,0,0,0,23718,0,0,0,31750,0,0,0,0,0,0,0,0,3568,0,0,13604,0,0,
-0,0,0,25255,0,0,0,50982,0,56582,0,0,7467,0,0,0,0,30181,0,0,0,0,0,0,0,30564,7208,
-7845,0,0,0,0,0,0,7726,0,0,0,0,62182,0,0,0,41094,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,22695,0,0,0,0,0,0,17736,0,0,0,0,0,0,0,0,50054,0,0,0,14180,0,0,0,0,
-0,0,8974,0,0,0,0,0,0,0,0,23332,0,0,0,11140,0,0,0,0,0,0,0,24262,27145,9540,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,26537,45510,6062,3879,0,0,20233,25991,0,0,17803,0,0,0,0,0,
-13962,5508,16971,27013,7437,31494,0,0,0,0,0,0,0,0,0,0,4714,0,0,0,0,0,0,0,0,17189
-,0,0,0,0,0,27492,0,0,26953,0,0,0,0,0,0,0,0,0,0,41319,0,0,0,0,0,0,0,0,0,0,0,47430
-,19596,12549,0,0,0,8390,1006,0,0,0,0,0,0,0,0,0,0,24100,17577,4,0,0,0,0,0,22277,0
-,0,0,0,0,0,0,26692,0,0,0,0,0,24676,0,0,0,0,0,0,0,0,0,0,0,0,0,29477,0,0,0,21573,0
-,0,0,0,0,0,0,0,0,0,9864,14214,0,0,0,0,0,0,25771,5766,0,0,8909,8679,0,0,6861,
-16166,0,38887,0,0,0,0,0,0,12392,8678,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-52646,1354,2950,0,14692,0,0,10572,49830,0,0,0,0,0,0,0,0,3626,582,0,0,0,55750,0,0
-,0,30885,0,0,0,0,0,0,0,0,0,0,0,0,0,5830,0,0,2090,0,0,0,0,0,0,0,0,0,0,0,0,31142,0
-,0,0,0,0,10503,0,0,18825,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-57158,0,0,30792,63526,0,0,0,9863,16267,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-,0,0,0,0,0,0,0,0,0,0,18824,0,0,0,0,0,0,19653,25388,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9292,0,0,0,0,0,0,0,0,0,0,36358,0,0,0,0,0,0,0,0,
-0,0,25480,23015,0,0,10440,6725,0,0,0,22436,24265,15109,0,0,0,62311,8906,34534,0,
-0,0,0,0,0,15913,1319,0,0,20296,1477,30760,0,25928,16772,0,0,1069,0,0,0,0,0,0,0,0
-,0,0,0,0,17029,0,31909,0,0,0,0,0,0,0,0,0,0,0,41638,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-,0,0,0,0,41542,0,21478,0,0,0,9796,0,0,0,0,0,0,0,0,0,0,22187,58343,0,0,0,24295,0,
-0,0,0,0,61831,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2833,5829,0,0,0,62855,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,16676,0,0,0,0,0,0,13577,27431,0,0,0,0,21480,10501,0,16932,
-0,0,0,0,0,22918,0,48294,2574,2150,0,0,0,0,1897,4518,0,0,0,0,0,0,25064,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,47942,0,0,0,0,10990,13767,
-25705,37863,21672,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,43430,1712,0,0,0,0,
-18886,0,0,0,0,0,0,0,0,0,0,0,0,0,10535,0,0,0,0,0,0,0,15012,0,0,0,0,0,0,0,0,0,0,
-14734,0,0,55782,0,0,30824,10886,0,0,0,0,0,51302,0,0,8012,0,0,0,0,0,20680,6981,0,
-57415,11,0,0,18277,0,14564,0,0,0,32390,0,0,0,0,0,0,0,0,0,0,0,0,19113,5158,0,
-11172,0,16774,0,0,0,0,0,0,0,0,0,0,0,0,10315,13830,0,0,0,0,0,0,10410,7141,0,0,0,0
-,0,18116,0,0,0,44615,15403,13958,0,1540,14632,19525,24201,19781,0,0,0,24165,0,
-38951,0,0,0,0,0,6308,0,0,0,0,0,0,0,0,0,0,0,0,0,0,17416,15749,3438,13255,0,0,0,0,
-0,0,0,0,0,0,0,32228,0,0,0,0,176,0,0,50566,0,0,0,0,0,0,0,0,0,0,0,0,0,21540,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,58982,0,0,0,0,0,0,0,0,0,5284,0,0,0,0,0,0,25897,28326,0,0
-,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15945,0,0,0,9804,293,0,0,0,0,0,0,0,13988,23082,4677
-,0,0,0,0,0,0,0,0,0,0,0,5670,0,0,0,0,0,0,0,44070,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,6405,0,30692,0,0,0,61702,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-,45926,0,15398,0,0,0,0,0,0,4554,2692,0,0,0,0,0,32485,0,0,0,10084,0,0,0,0,0,0,
-24297,0,0,0,0,0,0,0,0,22790,0,0,0,55110,0,0,0,0,0,0,0,0,0,0,0,0,7112,0,31530,
-45255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,40743,17226,22599,0,
-0,0,0,0,0,0,0,3695,0,0,0,0,0,0,0,0,0,0,56999,0,0,0,0,0,13799,3114,21287,1353,
-7591,0,0,0,8455,0,0,6824,0,0,0,0,0,0,0,14569,0,0,0,29000,0,0,0,0,0,0,0,0,0,0,0,0
-,0,0,0,19979,0,18376,0,0,0,0,0,0,0,0,0,0,0,0,11332,0,0,0,49863,0,0,0,0,0,0,0,0,0
-,0,0,0,0,0,2191,7527,23148,58022,0,0,0,30631,0,26565,0,0,0,0,0,0,0,0,0,0,0,0,754
-,0,0,15877,0,0,0,0,0,0,0,17510,7657,2821,0,0,0,0,0,0,0,0,0,41927,0,0,0,0,0,0,0,0
-,2569,34439,0,0,3790,0,0,0,15339,8775,0,0,0,0,0,0,0,0,0,0,0,15908,0,0,21419,8359
-,0,0,0,0,424,0,0,0,0,0,0,25318,8008,20551,0,0,0,45735,30058,30372,0,0,0,0,0,0,0,
-0,0,0,0,0,0,26180,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,31432,10567,0,0,0,0,
-17450,0,0,0,0,0,0,30310,0,38022,0,0,0,0,0,28932,0,0,0,0,0,43910,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,22180,12075,0,0,0,0,0,0,0,0,0,0,0,0,0,0,22247,0,0,22826,
-12359,0,0,0,0,4105,50407,0,0,0,0,0,0,13581,28583,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-,0,0,0,0,28936,0,0,0,0,0,17673,10310,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,905,57862,
-1580,0,0,0,0,58630,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,13479,0,0,
-14153,13286,0,0,9259,0,0,0,0,0,6606,3524,0,0,0,0,0,6567,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,631,49255,0,0,0,0,0,42886,0,38215,0,0,0,0,0,0,0,0,17580,
-0,0,0,0,0,0,0,0,55046,0,0,0,0,0,0,0,0,0,10213,0,0,0,0,3604,37767,0,0,0,0,0,0,0,0
-,0,0,0,30950,0,0,0,0,0,0,0,0,0,62087,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,23528,0
-,0,0,0,0,0,0,0,0,28715,4229,0,0,0,0,0,0,0,0,0,0,1226,26820,0,0,0,12133,6984,261,
-21130,32548,0,0,0,0,0,0,3565,12390,20713,28071,0,0,1706,25287,0,0,0,0,0,0,0,0,
-14670,0,0,0,0,0,0,30534,0,0,0,12615,0,43750,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,28228,
-0,0,0,0,0,0,0,45095,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1224,3975,10954,6375,0,0,0,0
-,0,0,0,0,0,0,23180,20100,0,0,0,0,25736,8519,0,0,0,0,0,6663,0,2534,0,0,0,0,0,0,0,
-0,23720,0,0,0,0,0,0,0,0,0,0,19398,0,47814,26281,49702,0,0,4332,12965,0,0,5704,
-3206,0,0,0,0,0,0,0,0,0,0,0,0,0,15396,0,0,0,44102,0,0,0,0,0,0,0,0,0,0,0,0,0,25317
-,1064,39271,27433,0,14952,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14308,0,0,0,0,0,0,2763
-,4100,0,0,0,0,0,0,18792,0,0,0,22154,32583,0,6244,0,0,0,0,0,0,0,49478,0,0,0,0,0,0
-,0,0,0,0,0,21894,0,0,11048,0,0,0,0,0,0,11685,0,53862,0,0,15114,0,13870,0,0,0,0,0
-,0,0,919,0,0,0,31916,0,22570,101,0,0,0,0,0,0,0,0,0,7333,0,0,0,0,3272,0,0,0,0,
-27718,32712,0,0,0,0,0,0,0,0,0,1782,0,3688,0,0,0,0,29862,0,0,0,0,0,0,0,22469,0,0,
-0,0,0,0,0,55302,850,15492,0,0,0,5927,19786,13350,0,25702,0,0,0,0,0,0,0,0,0,0,0,
-40390,0,0,0,0,0,0,0,0,0,0,0,0,0,20260,0,0,0,0,0,0,0,0,0,0,0,0,0,15335,8394,0,0,0
-,0,0,0,26566,0,0,0,0,843,2245,0,0,0,0,0,0,0,0,6959,0,20488,1638,0,0,11533,50759,
-0,0,0,0,0,20871,0,0,0,0,0,24519,0,0,0,0,9544,23591,0,0,0,0,0,0,0,0,0,0,20969,
-7109,29001,0,0,32422,31720,64294,0,0,0,0,16106,0,0,0,6930,4933,0,0,0,22917,0,
-27015,0,0,0,0,19880,8070,0,0,0,0,23945,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-3310,0,87,0,0,0,0,0,0,0,0,0,0,0,0,0,0,18439,0,0,0,20742,0,0,0,10597,0,0,0,0,0,0,
-0,0,0,0,0,0,20236,0,0,0,16584,3429,0,0,0,0,0,0,0,0,27241,0,0,0,0,16132,0,0,0,0,0
-,0,0,0,0,0,0,0,244,28261,0,0,0,0,0,0,0,29509,0,0,0,0,0,0,0,0,2921,31781,0,0,0,0,
-0,0,6408,4196,344,0,0,0,0,0,0,0,0,0,0,0,0,0,11689,45863,0,0,0,0,906,3301,0,0,
-25544,32421,0,0,0,0,0,0,0,0,1260,61607,0,27302,0,0,8682,16614,0,0,0,0,10830,0,0,
-9604,15049,13413,0,0,0,0,0,0,26761,0,0,0,0,0,0,61990,0,0,0,0,0,12580,0,0,11432,0
-,0,0,0,0,22507,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12389,0,0,0,0,0,0,
-2408,22661,14507,43239,0,9700,0,0,24714,0,0,0,0,0,0,0,0,23972,0,0,0,0,0,0,0,0,0,
-0,0,0,0,34086,0,0,22955,7238,0,0,0,0,0,28485,13806,20038,0,0,0,0,22602,0,0,0,
-1645,22340,0,0,0,0,0,0,0,0,0,0,0,26502,0,0,554,0,0,0,0,61735,0,0,0,0,0,0,0,0,0,0
-,0,0,0,0,0,0,0,2694,0,0,0,0,0,0,0,0,0,0,0,0,0,0,883,27879,15948,0,3242,57382,0,0
-,0,0,0,0,13930,0,0,0,0,0,30922,0,4137,52615,0,0,0,0,0,0,0,0,0,0,0,0,0,31911,
-16072,0,0,0,0,0,0,0,0,0,0,0,0,26340,0,61671,0,0,0,0,3145,56199,0,0,0,0,0,0,0,0,0
-,0,0,0,280,0,5131,33479,0,15751,0,0,0,0,0,0,4136,1446,0,0,0,0,0,0,11304,17863,0,
-0,0,0,0,25125,0,0,0,36646,6057,0,0,0,855,11301,0,0,0,0,0,64774,0,0,0,19397,0,0,0
-,0,0,0,0,0,0,0,0,0,0,0,0,0,1040,27367,0,0,0,0,0,0,0,0,0,0,0,0,0,64358,0,0,178,
-132,0,0,14763,24455,0,0,0,46374,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,46246,0,0,0,37382,
-0,0,0,7462,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8166,0,0,6921,0,0,0,9163,0,0,0,119,
-0,0,0,23146,17156,0,0,0,0,0,9127,0,0,0,17927,0,0,0,0,0,22084,0,0,0,0,0,39879,0,0
-,2035,0,1067,0,0,0,0,0,16652,59591,0,0,0,0,0,0,0,0,0,0,0,0,20171,0,0,0,0,17733,0
-,0,0,0,0,32037,0,0,0,0,0,14277,0,0,0,0,0,0,0,42022,0,0,26793,20358,0,0,0,0,0,0,0
-,0,0,0,0,0,0,0,0,0,8907,0,0,0,0,0,0,0,0,27780,0,0,0,0,32330,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,39399,0,9732,0,16199,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-,0,0,0,0,854,0,2984,45063,25418,26980,22539,0,9133,3653,15528,28743,4649,0,616,
-65127,0,0,0,61863,0,0,0,0,0,0,0,55303,0,0,0,0,0,0,0,0,23880,0,0,0,0,0,0,0,31848,
-62854,0,0,0,0,0,0,0,0,0,0,0,49606,0,27974,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,32580,0,0,0,26052,4043,0,0,40454,0,0,26056,30565,0,0,0,0,0,0,0,31398,0,0,0,0
-,0,0,0,0,29288,1797,0,0,3220,0,0,0,0,0,0,0,0,0,20427,0,0,0,0,23621,0,0,0,0,0,0,0
-,0,0,24261,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,35591,0,0,6862,0,0,0,4265,0,6285,
-5383,0,0,0,0,0,36870,0,39847,0,0,17224,5414,27882,58118,0,0,13224,4262,0,0,0,
-31302,0,0,1388,2982,11881,0,0,0,0,0,0,16837,809,0,24140,10724,0,0,0,0,5835,0,0,0
-,0,0,0,0,0,0,0,0,1256,19237,0,0,0,0,0,0,0,5796,11848,0,0,52870,11464,0,0,0,0,0,0
-,0,0,0,5645,9158,0,25223,0,0,0,0,0,39142,24968,8135,32104,28678,0,0,0,46311,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,23820,0,0,0,0,0,4050,0,1323,25220,0,0,0,20133,0,
-0,0,0,0,0,0,0,0,0,0,9381,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-,0,0,0,0,0,0,0,13444,1198,60806,0,0,0,0,17356,50247,30632,0,0,0,0,0,0,0,11944,
-999,0,0,0,0,4010,10404,0,0,0,0,0,0,10346,0,0,49510,0,0,0,0,0,0,0,0,0,0,0,0,0,
-38919,0,0,0,0,0,0,6351,60966,20137,487,0,0,0,0,0,0,655,2406,17387,43303,0,0,0,
-17063,0,0,213,0,0,0,0,0,0,17221,0,0,0,0,0,0,0,0,0,0,0,10820,0,0,0,0,369,6,0,0,
-9098,21093,0,31653,0,0,0,0,0,0,0,0,0,27143,0,0,16234,0,0,0,0,0,0,0,0,6020,31723,
-28293,0,0,0,0,1936,30695,0,0,0,0,0,52902,0,0,29512,10791,0,20420,0,0,16010,0,0,0
-,0,0,0,0,0,0,0,0,5324,0,0,0,0,0,0,0,0,0,0,0,0,13383,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,24328,0,0,0,0,0,0,40870,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,24648,0,0,0,0,0,0,0,7786,2852,0,0,0,0,0,0,0,0,0,44678,0,17925,0,0,105,53062,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,18762,0,0,40679,0,0,0,16165,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,20390,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,62310,1322,
-14247,0,0,0,0,0,0,0,0,1832,6052,0,0,11882,0,0,0,0,17668,0,28262,0,29542,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,28007,0,0,0,57223,
-1585,0,0,0,0,0,0,0,0,0,0,0,21162,0,0,62247,0,0,0,0,0,25414,0,0,0,0,0,0,0,0,0,0,0
-,0,0,0,0,0,0,0,0,0,0,0,0,36326,0,0,0,23845,0,0,0,0,0,0,0,2693,0,0,0,0,0,0,0,
-13125,0,31236,0,0,0,0,0,22502,0,0,0,0,0,0,5994,10309,0,0,0,7269,0,0,0,0,17929,0,
-1011,44647,0,0,0,0,0,14919,0,0,0,0,20586,5350,0,0,0,45702,0,13189,0,0,0,0,0,0,0,
-0,0,35782,17992,0,0,0,0,0,8203,0,0,0,0,0,0,56678,0,0,0,0,0,38087,4233,0,2127,0,0
-,0,0,0,0,0,0,0,0,10148,0,0,0,2021,0,0,0,0,0,0,0,47206,0,0,0,0,0,0,0,9220,0,0,0,0
-,19465,0,0,0,0,0,0,0,0,39206,0,38055,0,0,0,0,0,0,0,46982,0,0,0,0,0,22054,3850,0,
-0,0,0,0,0,0,55,0,10542,0,0,0,0,7239,0,0,0,0,0,59367,0,0,14761,0,0,0,0,43079,0,0,
-0,0,0,2726,0,0,9582,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,37478,0,
-0,0,31364,0,0,0,0,0,0,0,0,20393,8933,0,0,0,0,0,9380,0,0,0,0,16905,549,0,0,0,0,
-182,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1558,0,0,0,0,0,0,0,19242,0
-,0,0,0,0,0,24933,0,6276,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,42310,23595,
-24068,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,13191,6158,2567,0,0,268,47047,0,0,0,0,0,0,0,
-0,0,27940,0,0,0,0,0,26726,0,0,0,0,8200,1222,31562,0,0,0,0,0,0,0,0,0,2922,8231,
-8904,29157,0,0,0,0,0,0,0,0,23976,4836,0,0,0,0,0,0,0,0,0,0,0,0,31658,0,0,31685,0,
-0,2889,6213,0,0,0,0,0,13605,0,0,0,0,0,24772,0,0,0,0,0,0,0,0,0,0,20684,26468,
-24075,0,0,0,21193,0,715,679,0,0,0,0,0,0,3050,7654,0,0,0,13798,0,0,0,0,15,27973,0
-,0,8491,2086,0,0,0,43206,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,60391,0,0,0,0,0,0
-,0,25892,0,22276,0,34374,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,20165,0,0,25672,0
-,0,0,1811,24839,0,31044,0,0,25513,0,0,0,0,0,12810,0,0,62438,0,0,1325,0,364,3782,
-0,0,0,0,0,0,0,0,8042,19687,0,0,0,33415,0,0,0,0,0,0,0,0,0,0,0,7205,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,11844,0,0,0,0,3341,1543,6698,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-,0,0,0,0,0,0,0,0,0,0,0,0,29766,0,0,0,0,0,0,0,0,0,0,0,41158,0,24294,0,3844,12329,
-0,0,0,13738,0,0,0,0,0,0,0,0,26245,0,0,0,0,0,0,6378,0,343,4838,0,0,0,24358,11688,
-0,0,0,0,0,0,0,0,0,1489,34759,0,0,0,0,363,51974,1878,11013,0,0,32265,59782,0,0,0,
-28421,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,22756,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14089,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,29257,61222,0,30661,0,28327,0,0,0,0,0,0,0,0,0,0,0,0,0,
-27108,8843,0,9673,2084,0,0,0,16327,0,48455,0,0,0,0,0,0,4876,9316,0,0,0,0,0,0,0,0
-,0,0,0,0,9035,18852,0,0,0,0,0,0,0,0,0,0,0,0,0,4164,0,0,14827,1349,0,0,0,0,0,
-11909,0,0,0,0,0,0,0,0,0,21765,0,0,0,0,0,0,0,0,31272,63910,0,0,0,25924,0,0,0,0,0,
-0,0,0,0,44487,0,0,0,20612,0,0,27754,31428,0,0,0,0,0,0,0,17287,0,3943,0,0,0,63302
-,0,0,0,0,25256,19942,0,55142,0,39046,0,0,0,0,0,0,0,15367,0,0,0,0,0,0,0,0,0,0,0,
-28422,0,0,0,0,0,0,0,0,0,0,0,0,9576,63847,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-,0,0,25226,5734,0,0,0,0,0,0,13801,4997,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-,0,0,0,0,0,0,43942,1270,2566,6284,0,0,16230,0,0,0,20678,0,0,0,0,0,38855,0,0,0,0,
-29643,0,0,0,41,3655,0,0,0,0,0,14276,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,15686,0,0,0,15718,0,50694,0,0,16232,8007,0,0,0,5060,
-329,11591,51,0,0,0,0,0,0,0,0,0,13065,7302,27530,15366,0,24934,0,0,0,17828,0,0,
-4552,6311,0,0,0,0,0,0,0,0,0,0,0,47686,368,12103,10122,33830,0,0,599,18534,9579,
-49479,0,5668,0,0,0,0,0,0,0,0,0,13157,0,0,0,0,23274,14055,0,0,0,0,0,48903,0,0,0,0
-,0,0,1871,0,15434,0,0,0,16174,62470,0,0,0,0,0,0,0,0,0,0,0,7749,0,0,0,0,0,0,0,
-30501,0,0,0,0,25675,0,0,0,0,0,0,0,0,0,0,9285,0,0,25323,1669,0,0,0,0,0,0,0,0,0,0,
-0,3588,0,0,0,0,0,32902,0,0,4426,0,0,0,0,57959,0,0,0,0,0,0,29898,58278,0,0,0,0,
-11880,1220,0,0,0,41479,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,23141,0,0,0,0,0,0,0,0,0,0,0
-,0,0,42566,0,0,0,0,0,0,0,40167,9484,3493,0,0,0,0,0,21126,0,0,0,0,8649,18918,0,0,
-0,0,0,0,0,34886,2601,0,0,0,0,12518,0,0,0,0,7976,10311,0,0,0,0,0,0,0,45190,0,0,0,
-0,0,0,0,0,0,0,16842,20229,0,0,0,0,0,0,7528,4614,0,0,0,0,0,30086,0,0,0,1671,0,0,0
-,0,0,0,0,0,0,0,0,0,0,0,9896,6277,0,0,0,0,0,61191,0,41287,0,21956,0,0,20010,0,0,0
-,0,0,0,0,0,0,0,0,13195,0,0,0,0,1381,0,0,0,0,365,30951,24268,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,7044,0,0,0,0,0,0,0,0,0,0,27944,359,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-,0,0,28487,0,0,77,0,0,0,0,0,0,0,0,56775,12586,8421,0,0,0,0,0,0,26185,14599,0,0,
-8040,5702,12585,3109,0,0,0,0,0,21574,5388,0,0,0,0,0,0,0,5106,52454,0,0,0,0,0,0,0
-,0,1907,29895,0,6116,0,0,0,0,11081,5285,0,28069,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4104
-,0,0,0,0,0,0,41511,0,0,0,0,0,0,5262,0,0,0,503,4231,7720,34343,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7304,10374,1718,0,0,29127,0,0,0,0,0,0,0,0,23497,
-22567,6952,2340,0,0,0,0,0,0,0,0,20360,12453,0,45094,0,0,0,0,0,28582,0,0,0,0,680,
-0,0,0,0,0,0,0,0,0,0,0,0,0,23084,0,0,0,30696,0,0,0,0,45862,0,0,0,0,0,0,0,0,0,0,0,
-0,5580,6053,0,0,0,0,0,0,0,0,0,0,712,70,0,0,26091,11335,0,0,0,0,13612,0,13160,
-1926,435,51559,0,0,0,0,0,0,0,0,0,0,0,0,0,47302,19083,0,0,12742,0,1607,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,6155,37095,0,0,0,0,0,18948,7146,0,0,0,0,0,0,0,7848,
-2055,0,0,0,0,8910,0,19336,0,0,48070,8490,0,0,0,0,0,0,0,9932,56423,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,4133,0,0,0,0,0,0,0,0,0,43398,0,0,0,0,0,0,0,0,16173,0,0,0,0,0
-,0,0,32011,0,0,30918,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,26854,0,0,0,0,0,0,0,0,0,0,0,0
-,0,20389,0,0,0,0,0,0,0,0,0,0,0,0,0,0,18889,0,0,0,0,8965,0,0,0,44358,0,0,0,8997,0
-,34055,0,0,0,0,0,29350,0,0,501,17767,0,0,32457,60262,0,0,0,30886,0,0,3757,1063,0
-,0,0,25637,0,0,0,0,0,28068,0,26374,0,0,0,0,0,0,0,0,0,0,0,11684,0,0,0,0,0,0,24779
-,229,0,13766,0,0,7402,11525,0,0,0,0,0,0,0,0,26313,23686,0,0,29736,47527,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,27268,0,0,0,0,553,0,0,0,0,0,0,32038,0,0,0,0,1135,
-26596,0,0,12300,14631,0,0,0,43238,0,871,0,0,31496,0,8457,17669,0,12836,0,0,0,
-22726,0,38758,0,0,375,6564,0,0,0,0,0,0,0,0,0,0,0,0,170,18535,0,22948,0,0,32360,0
-,0,0,0,0,0,0,0,0,0,0,0,0,0,25764,0,0,0,0,0,0,0,0,0,0,0,15652,0,0,0,32774,0,0,0,0
-,0,0,0,0,0,28551,0,0,0,0,0,0,0,0,0,0,0,0,15145,0,0,0,21100,27654,0,0,0,0,0,0,
-4874,26215,0,1639,0,0,0,0,0,0,0,0,0,0,4169,0,0,0,0,0,7336,0,0,0,0,21572,0,0,0,0,
-0,0,0,0,0,24644,1675,2533,0,0,0,53318,0,13094,0,0,0,0,0,0,0,6246,0,22020,0,0,0,0
-,0,0,0,0,0,0,0,28453,5576,5124,0,0,0,0,0,0,0,0,0,0,0,0,0,27910,0,29382,18216,
-8583,0,0,0,39174,0,43558,0,0,0,0,0,0,0,0,0,11973,0,0,0,0,0,23397,0,0,0,0,6091,0,
-0,0,0,0,0,0,6474,16197,14217,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-,0,0,0,26728,0,567,48839,0,0,0,0,0,15271,0,0,31818,43974,2450,0,0,0,0,0,0,0,
-11368,9191,0,44454,0,0,0,0,0,0,14568,12293,0,0,0,8453,0,0,0,0,0,0,0,0,0,0,0,0,
-32040,0,0,0,0,0,0,0,0,0,0,0,0,902,0,0,0,27236,5612,11495,0,0,0,0,0,0,0,0,9194,
-23684,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,27430,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-26217,44870,0,0,0,0,0,0,5581,7173,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-52775,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,20968,18340,0,0,0,0,0,0,0,0,4107,11239
-,0,0,0,0,0,0,0,0,0,0,0,29381,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,21990,0,0,0,0
-,0,0,0,0,0,48806,0,0,0,32292,0,0,0,0,0,0,0,10884,0,0,0,0,0,0,0,0,0,0,27562,0,
-5643,0,0,0,0,0,0,0,0,0,3089,31525,0,19684,0,0,0,0,0,0,0,61415,0,0,0,0,0,36198,0,
-0,0,0,0,0,0,7908,0,0,0,0,872,743,0,0,0,0,0,0,0,0,1229,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,32484,0,0,0,0,0,34822,0,0,0,0,0,50726,0,0,0,0,7274,0,0,0,15304,
-11526,0,0,0,3047,0,0,0,0,0,0,22376,0,0,0,846,0,0,0,0,35815,0,0,0,23652,0,0,0,0,0
-,0,0,0,0,0,0,0,0,0,0,0,23721,2148,0,0,0,0,0,0,14856,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,1358,0,3082,0,0,0,848,10949,0,0,0,0,0,0,6504,0,0,14372,0,0,0,0,0,0
-,0,0,0,0,8201,9958,0,0,0,0,0,0,24266,0,0,0,0,0,0,0,0,26469,0,0,0,0,18604,2053,0,
-33511,0,0,0,0,0,9222,0,0,0,0,0,44006,0,0,0,0,0,0,0,0,0,0,0,41895,0,0,0,0,0,0,0,0
-,12044,390,0,0,0,0,0,4935,0,48646,0,56102,3052,16070,0,0,0,0,0,0,0,8612,9320,
-38311,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,500,0,0,0,0,42918,0,
-32550,0,0,0,0,0,0,0,0,27434,57926,17064,0,0,46502,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,26760,6756,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,624,0,5000,0,0,0,0,32293,0,
-0,0,0,0,0,0,0,0,0,0,0,0,26246,0,0,0,0,0,0,0,0,23,7301,0,0,0,36199,0,40838,0,0,0,
-0,0,0,0,0,0,0,0,0,27178,57350,0,0,12457,9317,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16810,0,0,0,14510,0,0,0,0,21319,0,0,0,13508,17,
-11365,0,0,0,0,5291,0,8329,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,27685,0,0,0,0,0,0,0,
-52006,0,0,0,7493,0,44263,0,0,0,0,0,0,0,0,9800,0,0,0,25676,61478,0,0,0,0,0,0,5773
-,0,0,0,0,41991,26057,0,0,0,0,0,0,0,0,0,0,22629,0,0,0,47783,362,1959,23468,0,0,0,
-10921,0,0,0,3150,0,0,0,0,0,0,0,0,0,0,0,32456,0,0,0,0,0,0,0,4559,3270,0,0,983,0,0
-,26343,0,33446,0,0,0,61767,0,48390,0,0,0,0,0,0,0,2790,0,39782,7849,0,0,0,0,0,0,0
-,1544,2183,0,0,0,0,0,0,0,0,4040,2471,20009,30020,0,0,11242,0,0,0,5578,53382,0,
-22631,0,0,0,0,0,0,0,0,0,0,0,12901,0,0,0,0,0,0,0,0,0,0,0,0,215,0,0,9030,0,0,0,0,0
-,0,265,1412,0,0,11626,3687,0,0,0,0,0,0,0,0,0,0,0,0,17449,24359,0,0,26729,40134,0
-,0,0,0,29768,61958,0,0,0,0,0,0,0,0,20908,0,0,0,0,0,11016,0,0,47462,21547,5926,0,
-0,14728,2983,24104,15301,0,0,0,0,0,32645,0,0,0,0,0,0,0,3300,0,0,0,15972,0,0,0,0,
-0,0,6634,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3076,0,30983,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,106,0,0,0,0,12775,0,0,0,0,7177,18022,0,0,0,0,0,22534,0,0,0,0,0,0,0,0,0,0,0,
-49894,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,27560,0,0,0,0,30278,10668,23877,0,
-0,0,0,0,0,0,29124,0,0,0,0,0,0,0,0,0,0,0,0,0,20870,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,44582,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,48454,0,0,0,0,6442,0,16330,22951,0,0
-,16904,0,0,0,0,644,0,0,0,40038,0,0,0,37222,0,0,0,9830,0,0,0,0,0,34919,0,0,0,0,0,
-0,0,0,0,0,0,13733,0,0,0,28196,0,0,0,0,0,19876,0,0,0,0,0,0,0,23558,0,11142,0,
-27781,0,0,0,0,13864,0,0,0,24682,47847,0,0,0,0,6890,0,0,0,0,0,3981,0,0,0,0,0,0,0,
-0,0,0,0,1772,0,0,0,0,0,0,0,3603,1991,0,27396,8652,0,18312,0,0,0,0,30054,0,0,0,0,
-0,0,0,11270,0,0,0,0,0,0,0,0,0,20708,0,0,0,0,338,0,0,0,0,0,0,0,7050,0,0,0,0,0,0,0
-,0,0,0,0,0,0,14862,0,0,3492,0,0,0,55878,0,0,0,16486,0,0,0,18119,0,0,0,0,0,0,2154
-,1284,0,0,23113,31751,0,0,29547,0,0,0,0,0,0,36647,0,0,0,0,0,0,0,0,0,0,0,18183,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,7913,0,0,0,0,20644,0,0,10508,0,0,0,0,0,0,0,0,0,0,0,0,
-43622,0,0,0,0,0,40966,0,0,0,0,0,0,0,0,0,0,246,901,11529,5191,0,0,0,0,0,0,0,0,0,0
-,0,24454,0,0,26665,27590,0,27397,0,0,0,0,0,0,23562,2949,0,0,30344,62214,0,47334,
-2026,18885,0,0,0,48678,0,0,0,22694,0,0,1972,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,15465,0,0,0,0,38822,0,0,0,0,945,32708,0,54791,0,14918,0,0,0,0,0,0,
-0,0,0,0,0,0,0,23396,0,0,0,0,0,0,5486,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7722,0,0,
-0,0,0,0,0,0,0,0,0,30856,64166,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,35206,0,0,0,30535,0,
-0,0,0,0,0,0,0,0,62663,0,0,1096,17574,31820,0,0,14375,4402,27207,0,0,21448,4676,0
-,0,0,0,16585,5094,0,0,0,0,0,0,0,0,4845,0,0,32870,0,0,0,0,0,0,0,0,0,0,31466,0,0,0
-,0,31783,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4522,16039,0,0,0,0,0,0,0,0,
-0,14469,0,0,0,0,0,0,0,0,0,0,7464,4773,0,0,0,0,0,0,0,0,18636,0,0,0,25640,0,0,0,0,
-0,0,2244,0,0,11818,0,1168,0,0,0,0,0,0,0,6540,23079,13770,7719,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,58150,528,
-34502,32682,0,0,12997,0,0,0,0,0,2214,0,0,0,0,0,58567,0,0,0,26375,0,0,0,0,0,0,0,0
-,0,26437,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,26121,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-,0,32005,22952,59047,0,13543,0,0,0,0,0,0,0,0,16328,0,0,33542,0,0,0,19782,0,0,0,
-16644,0,0,0,0,31688,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,10276,0,0,0,
-0,0,0,0,36327,0,0,29480,0,0,0,777,12709,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,27398,0,0,
-0,4455,9037,31397,0,9221,0,0,0,60487,20840,1796,0,0,0,0,0,0,0,0,8364,0,0,0,0,0,0
-,0,0,0,0,0,19752,44902,0,38566,0,0,18027,0,0,0,0,0,0,0,0,10662,0,0,0,0,0,11812,0
-,0,0,0,0,0,0,0,0,19910,0,0,0,45030,0,0,0,0,0,0,0,0,0,0,0,0,19978,5127,0,11620,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,19817,0,5579,9350,0,0,21002,19718,0,0,0,21926,0,0,0,0,0,0,0,0,0,0,0,0,0,20711,
-0,0,0,20197,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,40550,0,0,0,57510,0,0,0,53895,
-0,0,15017,0,17000,39367,2347,0,0,0,0,0,0,0,0,0,8588,0,0,0,0,0,3273,17862,3498,
-2085,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,19048,0,0,0,0,0,11978,58631,0,0,0,0
-,0,0,523,0,12969,198,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,28197,0,47846,0,0,0,0,0,0
-,0,0,0,4549,0,0,0,0,0,0,0,0,0,0,687,14917,748,8229,0,0,0,0,0,0,2476,12935,0,0,0,
-0,0,0,22792,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,27528,59142,0,0,20876,20134,0,0,0,
-0,440,12068,0,58951,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,48038,0,0,0,60999,0,0,0,0,
-0,0,0,0,0,0,0,0,0,15716,7498,5476,0,0,0,0,20202,37959,0,0,0,0,0,0,0,0,0,0,0,0,
-29801,0,5451,0,0,0,0,0,0,0,0,0,0,50790,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,24485,0
-,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,13573,0,0,22856,0,0,0,0,21927,0,0,0,0,0
-,0,9130,0,0,0,0,0,0,13732,0,0,0,0,0,0,0,0,0,0,2282,583,0,0,0,0,0,0,0,0,0,0,3726,
-26503,0,0,0,0,0,0,9258,0,0,0,0,0,0,0,0,21604,0,0,0,45574,0,0,0,0,0,20710,0,0,0,
-42694,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1163,6694,0,0,0,0,0,0,0,10948,0,0,0,29700,0,0,
-0,0,0,58823,3796,27399,20939,10180,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-19,29287,28649,14534,0,0,16428,45607,0,0,0,0,0,0,25322,0,4908,0,0,0,0,0,0,25476,
-29097,14246,11053,0,0,0,0,0,0,0,0,18502,0,0,0,44390,0,0,0,17765,0,0,0,0,0,0,
-24520,0,0,0,0,0,0,0,0,0,0,17319,0,0,0,0,0,0,0,0,0,0,0,0,0,28166,0,0,0,0,0,48198,
-0,0,31467,0,24585,0,0,0,0,18692,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,23596,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,7236,968,13637,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-3763,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14791,0,0,0,12324,0,12741,0,0,0
-,0,0,0,0,0,0,11108,0,0,0,0,4009,40295,20616,4357,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-15015,0,0,0,0,0,43751,0,0,0,0,0,0,0,0,0,0,0,23013,0,0,0,0,0,0,0,0,0,0,0,0,0,
-45542,0,0,0,0,0,0,0,0,0,23974,0,0,0,0,17480,20647,0,0,0,0,0,0,8876,0,0,40806,0,0
-,0,0,0,0,0,14502,17160,17764,0,0,31594,35431,0,0,2890,0,0,0,0,0,0,0,0,27524,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8228,0,56583,0,0,0,0,0,0,0,0,0,0,0,0,0
-,0,0,0,0,34278,0,0,0,0,0,0,0,0,0,0,0,0,0,2662,0,26724,0,0,0,0,0,0,0,64198,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,22281,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3049,
-54983,0,0,0,0,0,0,0,837,0,17604,0,0,0,0,0,28838,0,0,0,0,0,0,26312,0,0,3910,0,0,0
-,25830,0,0,0,0,0,8391,0,19845,19240,1092,0,0,5449,0,0,0,0,17188,0,0,0,0,0,0,0,0,
-0,10629,0,0,6671,61094,5832,8358,0,0,0,55078,0,0,0,0,0,29860,0,0,0,0,0,0,0,0,0,0
-,0,0,0,0,0,0,0,51494,0,28647,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,25989,0,0,30153,61318
-,0,0,0,0,0,0,0,24903,0,0,0,4388,0,42054,0,0,0,0,0,0,0,53158,0,0,0,0,0,0,0,50918,
-0,0,0,0,0,0,26251,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5929,2853,0,37126,
-7372,197,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2027,934,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,55686,0,0,5672,5447,0,62758,0,0,0,0,0,0,0,0,0,0,0,0,2923,0,556,1415,
-0,0,0,0,0,0,0,0,0,8645,0,9477,0,0,0,0,0,0,0,48742,0,0,0,0,0,0,0,0,0,0,24235,228,
-0,0,0,0,0,0,0,0,0,0,16970,18823,0,0,0,0,0,0,0,0,0,25158,0,0,0,0,0,18567,20072,
-2823,14313,1830,0,0,0,0,0,0,0,0,27048,23526,0,0,0,0,0,997,492,0,14730,16677,396,
-13574,0,0,0,41671,0,0,0,0,0,0,0,19045,0,0,0,421,17545,3110,0,0,0,0,0,0,0,0,0,0,0
-,0,0,0,0,47111,14475,56551,0,0,0,0,0,0,0,0,0,0,3697,0,0,0,0,0,0,49382,0,35559,0,
-0,0,0,40,0,11496,15621,0,8550,0,0,0,63462,0,0,0,0,0,0,0,36966,0,50406,0,46022,
-1001,0,0,12069,3249,0,0,0,0,0,0,0,0,0,0,0,0,0,15241,0,0,0,0,0,0,0,0,64743,0,0,0,
-0,0,58759,0,0,0,0,1136,26981,0,0,0,0,0,0,0,17732,0,0,0,17157,20011,6629,0,43879,
-0,0,0,13572,25128,10759,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,28676,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,875,24007,0,0,0,0,7628,0,0,0,0,0,12268,0,0,0,0,0,0,0,0,19300
-,23210,356,0,0,0,0,0,0,0,0,0,15236,0,0,0,0,0,49670,0,0,0,0,0,0,0,21764,0,0,0,0,0
-,0,0,0,0,0,0,0,0,0,0,0,13931,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,45799,0,0,436,3589,
-0,0,11402,0,0,0,0,0,0,0,0,0,0,62822,0,0,0,39814,588,0,0,0,0,0,0,27750,0,0,0,0,0,
-0,1609,22660,2346,18951,0,16068,0,0,0,0,0,0,5162,11110,0,0,0,0,15048,1060,0,7879
-,18280,326,0,14886,19656,0,7594,0,0,0,0,0,781,581,0,16198,0,0,0,0,0,0,1078,9892,
-0,0,0,0,0,0,0,0,0,0,4489,0,0,0,0,33798,0,0,0,54534,0,0,0,0,0,0,0,33158,0,0,0,0,0
-,0,0,0,0,42086,13834,2757,8456,16773,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3434,0,0,0,
-0,0,3946,29668,0,0,30634,36775,0,0,0,0,0,24901,0,16069,6280,0,0,0,0,41990,0,0,0,
-0,0,0,0,27365,0,0,0,0,0,0,0,0,0,0,1450,44807,0,0,0,32100,0,0,0,0,0,35110,0,0,0,0
-,0,0,0,0,17448,19591,0,0,0,0,0,0,0,0,0,0,0,0,1739,0,0,0,0,5511,0,0,0,32934,0,0,0
-,0,0,0,0,0,0,18180,0,0,0,23428,19754,0,0,31174,3021,31655,23464,0,0,0,0,0,0,
-57255,0,0,21292,64487,0,0,0,0,0,0,25802,9189,0,0,0,0,0,49254,0,0,0,0,0,0,0,0,0,0
-,5837,50023,0,0,0,0,0,0,0,0,0,15495,0,0,0,0,0,51942,0,0,0,0,0,0,0,0,28104,58662,
-0,50214,0,0,0,0,0,0,0,0,2988,0,22888,31812,0,0,0,0,0,2020,0,18916,0,0,0,0,0,0,0,
-23973,0,0,0,0,17516,11717,0,0,0,55911,0,0,0,0,0,0,0,2855,0,0,0,0,0,0,0,0,0,0,0,0
-,0,0,0,0,0,46822,0,24710,28586,0,0,0,1556,0,0,30117,0,0,22090,57127,3403,14087,0
-,0,0,0,0,0,0,0,0,0,1041,0,10633,6916,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,27269,0,0,13322,18055,0,29380,0,56454,0,0,120
-,0,0,8773,0,0,0,0,16040,0,0,0,0,0,0,0,27242,23781,0,1572,0,28134,0,0,1512,0,0,0,
-0,0,0,27684,0,38470,0,0,0,0,0,0,1513,8709,0,0,0,0,0,0,0,0,0,0,0,46566,0,0,0,0,
-28521,61159,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,24356,0,0,0,0,0,0,0,0,0,13028,0,
-5863,0,0,15693,0,0,0,0,0,0,0,1131,23398,0,0,0,0,0,0,0,26212,0,0,0,0,0,0,0,0,0,0,
-0,0,0,18404,0,0,0,0,1457,26183,0,0,2475,7110,0,0,0,0,27180,60166,0,0,0,20262,0,
-41862,0,0,0,0,0,0,0,0,0,0,2762,0,0,0,0,0,0,0,0,0,0,0,0,0,0,26148,0,0,0,0,0,0,0,0
-,0,28229,0,0,0,29254,0,0,0,0,0,0,0,0,0,0,27690,0,0,13636,12776,1862,0,0,0,0,0,0,
-17225,3271,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,28039,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-,0,0,0,0,0,0,0,0,0,4457,18117,0,2023,402,0,0,0,0,0,0,0,0,0,0,0,0,0,104,3654,0,0,
-0,0,0,0,0,0,18440,0,0,0,0,0,0,0,0,29861,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,22150,0,0,0,0,0,0,0,0,0,0,0,0,24074,0,0,0,0,0,0,0,0,12004,0,32358,
-0,0,3081,0,0,0,0,0,0,0,0,0,4749,0,0,0,0,0,0,0,0,0,0,0,10792,1799,21322,0,7880,
-12613,0,0,0,0,0,0,0,0,13993,0,0,0,16202,0,0,0,0,32102,0,37223,0,10500,0,0,0,0,0,
-0,0,0,32008,0,0,0,0,0,23816,3236,0,0,0,0,0,23237,0,0,5642,0,4684,294,0,0,0,0,0,0
-,0,0,0,0,0,0,0,0,0,0,0,0,0,26852,0,0,0,0,0,0,7148,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,7890,61798,939,0,0,56679,0,0,0,0,0,27078,202,5029,0,0,0,0,0,
-0,0,0,0,28005,0,0,15273,24741,5676,20452,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,55910,0,0
-,0,0,5069,27942,0,21092,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12517,0,0,0,0,0,0,
-0,0,0,0,0,0,21384,28260,0,2502,20108,0,0,0,0,0,0,0,0,0,0,0,0,46726,0,30790,0,0,0
-,0,0,14725,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1099,6372,0,0,0,12422,15182,0,8683,0,
-10665,19462,0,0,0,0,0,0,1590,0,31628,0,22632,19750,0,0,0,0,0,0,0,24198,0,0,0,0,0
-,50662,0,0,0,0,0,0,0,0,0,0,9131,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11015,0,0,0,0,0,0,0,
-0,16490,54695,0,0,0,0,0,0,0,0,12937,0,0,0,0,16004,0,0,0,0,0,0,0,0,0,2181,6923,0,
-0,0,0,0,0,0,15624,11302,0,0,5673,7559,0,0,14668,15684,0,0,0,0,0,0,24204,48134,0,
-24230,0,55527,0,0,3464,19141,0,0,0,0};
-
-#if defined(__cplusplus) || defined(c_plusplus)
-} /* extern "C" */
-#endif
diff --git a/BaseTools/Source/C/BrotliCompress/enc/encode.c b/BaseTools/Source/C/BrotliCompress/enc/encode.c
deleted file mode 100644
index 93824d620373..000000000000
--- a/BaseTools/Source/C/BrotliCompress/enc/encode.c
+++ /dev/null
@@ -1,1864 +0,0 @@
-/* Copyright 2013 Google Inc. All Rights Reserved.
-
- Distributed under MIT license.
- See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
-*/
-
-/* Implementation of Brotli compressor. */
-
-#include <brotli/encode.h>
-
-#include <stdlib.h> /* free, malloc */
-#include <string.h> /* memcpy, memset */
-
-#include "../common/constants.h"
-#include "../common/context.h"
-#include "../common/platform.h"
-#include "../common/version.h"
-#include "./backward_references.h"
-#include "./backward_references_hq.h"
-#include "./bit_cost.h"
-#include "./brotli_bit_stream.h"
-#include "./compress_fragment.h"
-#include "./compress_fragment_two_pass.h"
-#include "./encoder_dict.h"
-#include "./entropy_encode.h"
-#include "./fast_log.h"
-#include "./hash.h"
-#include "./histogram.h"
-#include "./memory.h"
-#include "./metablock.h"
-#include "./prefix.h"
-#include "./quality.h"
-#include "./ringbuffer.h"
-#include "./utf8_util.h"
-#include "./write_bits.h"
-
-#if defined(__cplusplus) || defined(c_plusplus)
-extern "C" {
-#endif
-
-#define COPY_ARRAY(dst, src) memcpy(dst, src, sizeof(src));
-
-typedef enum BrotliEncoderStreamState {
- /* Default state. */
- BROTLI_STREAM_PROCESSING = 0,
- /* Intermediate state; after next block is emitted, byte-padding should be
- performed before getting back to default state. */
- BROTLI_STREAM_FLUSH_REQUESTED = 1,
- /* Last metablock was produced; no more input is acceptable. */
- BROTLI_STREAM_FINISHED = 2,
- /* Flushing compressed block and writing meta-data block header. */
- BROTLI_STREAM_METADATA_HEAD = 3,
- /* Writing metadata block body. */
- BROTLI_STREAM_METADATA_BODY = 4
-} BrotliEncoderStreamState;
-
-typedef struct BrotliEncoderStateStruct {
- BrotliEncoderParams params;
-
- MemoryManager memory_manager_;
-
- HasherHandle hasher_;
- uint64_t input_pos_;
- RingBuffer ringbuffer_;
- size_t cmd_alloc_size_;
- Command* commands_;
- size_t num_commands_;
- size_t num_literals_;
- size_t last_insert_len_;
- uint64_t last_flush_pos_;
- uint64_t last_processed_pos_;
- int dist_cache_[BROTLI_NUM_DISTANCE_SHORT_CODES];
- int saved_dist_cache_[4];
- uint16_t last_bytes_;
- uint8_t last_bytes_bits_;
- uint8_t prev_byte_;
- uint8_t prev_byte2_;
- size_t storage_size_;
- uint8_t* storage_;
- /* Hash table for FAST_ONE_PASS_COMPRESSION_QUALITY mode. */
- int small_table_[1 << 10]; /* 4KiB */
- int* large_table_; /* Allocated only when needed */
- size_t large_table_size_;
- /* Command and distance prefix codes (each 64 symbols, stored back-to-back)
- used for the next block in FAST_ONE_PASS_COMPRESSION_QUALITY. The command
- prefix code is over a smaller alphabet with the following 64 symbols:
- 0 - 15: insert length code 0, copy length code 0 - 15, same distance
- 16 - 39: insert length code 0, copy length code 0 - 23
- 40 - 63: insert length code 0 - 23, copy length code 0
- Note that symbols 16 and 40 represent the same code in the full alphabet,
- but we do not use either of them in FAST_ONE_PASS_COMPRESSION_QUALITY. */
- uint8_t cmd_depths_[128];
- uint16_t cmd_bits_[128];
- /* The compressed form of the command and distance prefix codes for the next
- block in FAST_ONE_PASS_COMPRESSION_QUALITY. */
- uint8_t cmd_code_[512];
- size_t cmd_code_numbits_;
- /* Command and literal buffers for FAST_TWO_PASS_COMPRESSION_QUALITY. */
- uint32_t* command_buf_;
- uint8_t* literal_buf_;
-
- uint8_t* next_out_;
- size_t available_out_;
- size_t total_out_;
- /* Temporary buffer for padding flush bits or metadata block header / body. */
- union {
- uint64_t u64[2];
- uint8_t u8[16];
- } tiny_buf_;
- uint32_t remaining_metadata_bytes_;
- BrotliEncoderStreamState stream_state_;
-
- BROTLI_BOOL is_last_block_emitted_;
- BROTLI_BOOL is_initialized_;
-} BrotliEncoderStateStruct;
-
-static BROTLI_BOOL EnsureInitialized(BrotliEncoderState* s);
-
-static size_t InputBlockSize(BrotliEncoderState* s) {
- return (size_t)1 << s->params.lgblock;
-}
-
-static uint64_t UnprocessedInputSize(BrotliEncoderState* s) {
- return s->input_pos_ - s->last_processed_pos_;
-}
-
-static size_t RemainingInputBlockSize(BrotliEncoderState* s) {
- const uint64_t delta = UnprocessedInputSize(s);
- size_t block_size = InputBlockSize(s);
- if (delta >= block_size) return 0;
- return block_size - (size_t)delta;
-}
-
-BROTLI_BOOL BrotliEncoderSetParameter(
- BrotliEncoderState* state, BrotliEncoderParameter p, uint32_t value) {
- /* Changing parameters on the fly is not implemented yet. */
- if (state->is_initialized_) return BROTLI_FALSE;
- /* TODO: Validate/clamp parameters here. */
- switch (p) {
- case BROTLI_PARAM_MODE:
- state->params.mode = (BrotliEncoderMode)value;
- return BROTLI_TRUE;
-
- case BROTLI_PARAM_QUALITY:
- state->params.quality = (int)value;
- return BROTLI_TRUE;
-
- case BROTLI_PARAM_LGWIN:
- state->params.lgwin = (int)value;
- return BROTLI_TRUE;
-
- case BROTLI_PARAM_LGBLOCK:
- state->params.lgblock = (int)value;
- return BROTLI_TRUE;
-
- case BROTLI_PARAM_DISABLE_LITERAL_CONTEXT_MODELING:
- if ((value != 0) && (value != 1)) return BROTLI_FALSE;
- state->params.disable_literal_context_modeling = TO_BROTLI_BOOL(!!value);
- return BROTLI_TRUE;
-
- case BROTLI_PARAM_SIZE_HINT:
- state->params.size_hint = value;
- return BROTLI_TRUE;
-
- case BROTLI_PARAM_LARGE_WINDOW:
- state->params.large_window = TO_BROTLI_BOOL(!!value);
- return BROTLI_TRUE;
-
- case BROTLI_PARAM_NPOSTFIX:
- state->params.dist.distance_postfix_bits = value;
- return BROTLI_TRUE;
-
- case BROTLI_PARAM_NDIRECT:
- state->params.dist.num_direct_distance_codes = value;
- return BROTLI_TRUE;
-
- default: return BROTLI_FALSE;
- }
-}
-
-/* Wraps 64-bit input position to 32-bit ring-buffer position preserving
- "not-a-first-lap" feature. */
-static uint32_t WrapPosition(uint64_t position) {
- uint32_t result = (uint32_t)position;
- uint64_t gb = position >> 30;
- if (gb > 2) {
- /* Wrap every 2GiB; The first 3GB are continuous. */
- result = (result & ((1u << 30) - 1)) | ((uint32_t)((gb - 1) & 1) + 1) << 30;
- }
- return result;
-}
-
-static uint8_t* GetBrotliStorage(BrotliEncoderState* s, size_t size) {
- MemoryManager* m = &s->memory_manager_;
- if (s->storage_size_ < size) {
- BROTLI_FREE(m, s->storage_);
- s->storage_ = BROTLI_ALLOC(m, uint8_t, size);
- if (BROTLI_IS_OOM(m)) return NULL;
- s->storage_size_ = size;
- }
- return s->storage_;
-}
-
-static size_t HashTableSize(size_t max_table_size, size_t input_size) {
- size_t htsize = 256;
- while (htsize < max_table_size && htsize < input_size) {
- htsize <<= 1;
- }
- return htsize;
-}
-
-static int* GetHashTable(BrotliEncoderState* s, int quality,
- size_t input_size, size_t* table_size) {
- /* Use smaller hash table when input.size() is smaller, since we
- fill the table, incurring O(hash table size) overhead for
- compression, and if the input is short, we won't need that
- many hash table entries anyway. */
- MemoryManager* m = &s->memory_manager_;
- const size_t max_table_size = MaxHashTableSize(quality);
- size_t htsize = HashTableSize(max_table_size, input_size);
- int* table;
- BROTLI_DCHECK(max_table_size >= 256);
- if (quality == FAST_ONE_PASS_COMPRESSION_QUALITY) {
- /* Only odd shifts are supported by fast-one-pass. */
- if ((htsize & 0xAAAAA) == 0) {
- htsize <<= 1;
- }
- }
-
- if (htsize <= sizeof(s->small_table_) / sizeof(s->small_table_[0])) {
- table = s->small_table_;
- } else {
- if (htsize > s->large_table_size_) {
- s->large_table_size_ = htsize;
- BROTLI_FREE(m, s->large_table_);
- s->large_table_ = BROTLI_ALLOC(m, int, htsize);
- if (BROTLI_IS_OOM(m)) return 0;
- }
- table = s->large_table_;
- }
-
- *table_size = htsize;
- memset(table, 0, htsize * sizeof(*table));
- return table;
-}
-
-static void EncodeWindowBits(int lgwin, BROTLI_BOOL large_window,
- uint16_t* last_bytes, uint8_t* last_bytes_bits) {
- if (large_window) {
- *last_bytes = (uint16_t)(((lgwin & 0x3F) << 8) | 0x11);
- *last_bytes_bits = 14;
- } else {
- if (lgwin == 16) {
- *last_bytes = 0;
- *last_bytes_bits = 1;
- } else if (lgwin == 17) {
- *last_bytes = 1;
- *last_bytes_bits = 7;
- } else if (lgwin > 17) {
- *last_bytes = (uint16_t)(((lgwin - 17) << 1) | 0x01);
- *last_bytes_bits = 4;
- } else {
- *last_bytes = (uint16_t)(((lgwin - 8) << 4) | 0x01);
- *last_bytes_bits = 7;
- }
- }
-}
-
-/* Initializes the command and distance prefix codes for the first block. */
-static void InitCommandPrefixCodes(uint8_t cmd_depths[128],
- uint16_t cmd_bits[128],
- uint8_t cmd_code[512],
- size_t* cmd_code_numbits) {
- static const uint8_t kDefaultCommandDepths[128] = {
- 0, 4, 4, 5, 6, 6, 7, 7, 7, 7, 7, 8, 8, 8, 8, 8,
- 0, 0, 0, 4, 4, 4, 4, 4, 5, 5, 6, 6, 6, 6, 7, 7,
- 7, 7, 10, 10, 10, 10, 10, 10, 0, 4, 4, 5, 5, 5, 6, 6,
- 7, 8, 8, 9, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
- 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 6, 6, 6, 6, 6, 6, 5, 5, 5, 5, 5, 5, 4, 4, 4, 4,
- 4, 4, 4, 5, 5, 5, 5, 5, 5, 6, 6, 7, 7, 7, 8, 10,
- 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
- };
- static const uint16_t kDefaultCommandBits[128] = {
- 0, 0, 8, 9, 3, 35, 7, 71,
- 39, 103, 23, 47, 175, 111, 239, 31,
- 0, 0, 0, 4, 12, 2, 10, 6,
- 13, 29, 11, 43, 27, 59, 87, 55,
- 15, 79, 319, 831, 191, 703, 447, 959,
- 0, 14, 1, 25, 5, 21, 19, 51,
- 119, 159, 95, 223, 479, 991, 63, 575,
- 127, 639, 383, 895, 255, 767, 511, 1023,
- 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 27, 59, 7, 39, 23, 55, 30, 1, 17, 9, 25, 5, 0, 8, 4, 12,
- 2, 10, 6, 21, 13, 29, 3, 19, 11, 15, 47, 31, 95, 63, 127, 255,
- 767, 2815, 1791, 3839, 511, 2559, 1535, 3583, 1023, 3071, 2047, 4095,
- };
- static const uint8_t kDefaultCommandCode[] = {
- 0xff, 0x77, 0xd5, 0xbf, 0xe7, 0xde, 0xea, 0x9e, 0x51, 0x5d, 0xde, 0xc6,
- 0x70, 0x57, 0xbc, 0x58, 0x58, 0x58, 0xd8, 0xd8, 0x58, 0xd5, 0xcb, 0x8c,
- 0xea, 0xe0, 0xc3, 0x87, 0x1f, 0x83, 0xc1, 0x60, 0x1c, 0x67, 0xb2, 0xaa,
- 0x06, 0x83, 0xc1, 0x60, 0x30, 0x18, 0xcc, 0xa1, 0xce, 0x88, 0x54, 0x94,
- 0x46, 0xe1, 0xb0, 0xd0, 0x4e, 0xb2, 0xf7, 0x04, 0x00,
- };
- static const size_t kDefaultCommandCodeNumBits = 448;
- COPY_ARRAY(cmd_depths, kDefaultCommandDepths);
- COPY_ARRAY(cmd_bits, kDefaultCommandBits);
-
- /* Initialize the pre-compressed form of the command and distance prefix
- codes. */
- COPY_ARRAY(cmd_code, kDefaultCommandCode);
- *cmd_code_numbits = kDefaultCommandCodeNumBits;
-}
-
-/* Decide about the context map based on the ability of the prediction
- ability of the previous byte UTF8-prefix on the next byte. The
- prediction ability is calculated as Shannon entropy. Here we need
- Shannon entropy instead of 'BitsEntropy' since the prefix will be
- encoded with the remaining 6 bits of the following byte, and
- BitsEntropy will assume that symbol to be stored alone using Huffman
- coding. */
-static void ChooseContextMap(int quality,
- uint32_t* bigram_histo,
- size_t* num_literal_contexts,
- const uint32_t** literal_context_map) {
- static const uint32_t kStaticContextMapContinuation[64] = {
- 1, 1, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- };
- static const uint32_t kStaticContextMapSimpleUTF8[64] = {
- 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- };
-
- uint32_t monogram_histo[3] = { 0 };
- uint32_t two_prefix_histo[6] = { 0 };
- size_t total;
- size_t i;
- size_t dummy;
- double entropy[4];
- for (i = 0; i < 9; ++i) {
- monogram_histo[i % 3] += bigram_histo[i];
- two_prefix_histo[i % 6] += bigram_histo[i];
- }
- entropy[1] = ShannonEntropy(monogram_histo, 3, &dummy);
- entropy[2] = (ShannonEntropy(two_prefix_histo, 3, &dummy) +
- ShannonEntropy(two_prefix_histo + 3, 3, &dummy));
- entropy[3] = 0;
- for (i = 0; i < 3; ++i) {
- entropy[3] += ShannonEntropy(bigram_histo + 3 * i, 3, &dummy);
- }
-
- total = monogram_histo[0] + monogram_histo[1] + monogram_histo[2];
- BROTLI_DCHECK(total != 0);
- entropy[0] = 1.0 / (double)total;
- entropy[1] *= entropy[0];
- entropy[2] *= entropy[0];
- entropy[3] *= entropy[0];
-
- if (quality < MIN_QUALITY_FOR_HQ_CONTEXT_MODELING) {
- /* 3 context models is a bit slower, don't use it at lower qualities. */
- entropy[3] = entropy[1] * 10;
- }
- /* If expected savings by symbol are less than 0.2 bits, skip the
- context modeling -- in exchange for faster decoding speed. */
- if (entropy[1] - entropy[2] < 0.2 &&
- entropy[1] - entropy[3] < 0.2) {
- *num_literal_contexts = 1;
- } else if (entropy[2] - entropy[3] < 0.02) {
- *num_literal_contexts = 2;
- *literal_context_map = kStaticContextMapSimpleUTF8;
- } else {
- *num_literal_contexts = 3;
- *literal_context_map = kStaticContextMapContinuation;
- }
-}
-
-/* Decide if we want to use a more complex static context map containing 13
- context values, based on the entropy reduction of histograms over the
- first 5 bits of literals. */
-static BROTLI_BOOL ShouldUseComplexStaticContextMap(const uint8_t* input,
- size_t start_pos, size_t length, size_t mask, int quality, size_t size_hint,
- size_t* num_literal_contexts, const uint32_t** literal_context_map) {
- static const uint32_t kStaticContextMapComplexUTF8[64] = {
- 11, 11, 12, 12, /* 0 special */
- 0, 0, 0, 0, /* 4 lf */
- 1, 1, 9, 9, /* 8 space */
- 2, 2, 2, 2, /* !, first after space/lf and after something else. */
- 1, 1, 1, 1, /* " */
- 8, 3, 3, 3, /* % */
- 1, 1, 1, 1, /* ({[ */
- 2, 2, 2, 2, /* }]) */
- 8, 4, 4, 4, /* :; */
- 8, 7, 4, 4, /* . */
- 8, 0, 0, 0, /* > */
- 3, 3, 3, 3, /* [0..9] */
- 5, 5, 10, 5, /* [A-Z] */
- 5, 5, 10, 5,
- 6, 6, 6, 6, /* [a-z] */
- 6, 6, 6, 6,
- };
- BROTLI_UNUSED(quality);
- /* Try the more complex static context map only for long data. */
- if (size_hint < (1 << 20)) {
- return BROTLI_FALSE;
- } else {
- const size_t end_pos = start_pos + length;
- /* To make entropy calculations faster and to fit on the stack, we collect
- histograms over the 5 most significant bits of literals. One histogram
- without context and 13 additional histograms for each context value. */
- uint32_t combined_histo[32] = { 0 };
- uint32_t context_histo[13][32] = { { 0 } };
- uint32_t total = 0;
- double entropy[3];
- size_t dummy;
- size_t i;
- ContextLut utf8_lut = BROTLI_CONTEXT_LUT(CONTEXT_UTF8);
- for (; start_pos + 64 <= end_pos; start_pos += 4096) {
- const size_t stride_end_pos = start_pos + 64;
- uint8_t prev2 = input[start_pos & mask];
- uint8_t prev1 = input[(start_pos + 1) & mask];
- size_t pos;
- /* To make the analysis of the data faster we only examine 64 byte long
- strides at every 4kB intervals. */
- for (pos = start_pos + 2; pos < stride_end_pos; ++pos) {
- const uint8_t literal = input[pos & mask];
- const uint8_t context = (uint8_t)kStaticContextMapComplexUTF8[
- BROTLI_CONTEXT(prev1, prev2, utf8_lut)];
- ++total;
- ++combined_histo[literal >> 3];
- ++context_histo[context][literal >> 3];
- prev2 = prev1;
- prev1 = literal;
- }
- }
- entropy[1] = ShannonEntropy(combined_histo, 32, &dummy);
- entropy[2] = 0;
- for (i = 0; i < 13; ++i) {
- entropy[2] += ShannonEntropy(&context_histo[i][0], 32, &dummy);
- }
- entropy[0] = 1.0 / (double)total;
- entropy[1] *= entropy[0];
- entropy[2] *= entropy[0];
- /* The triggering heuristics below were tuned by compressing the individual
- files of the silesia corpus. If we skip this kind of context modeling
- for not very well compressible input (i.e. entropy using context modeling
- is 60% of maximal entropy) or if expected savings by symbol are less
- than 0.2 bits, then in every case when it triggers, the final compression
- ratio is improved. Note however that this heuristics might be too strict
- for some cases and could be tuned further. */
- if (entropy[2] > 3.0 || entropy[1] - entropy[2] < 0.2) {
- return BROTLI_FALSE;
- } else {
- *num_literal_contexts = 13;
- *literal_context_map = kStaticContextMapComplexUTF8;
- return BROTLI_TRUE;
- }
- }
-}
-
-static void DecideOverLiteralContextModeling(const uint8_t* input,
- size_t start_pos, size_t length, size_t mask, int quality, size_t size_hint,
- size_t* num_literal_contexts, const uint32_t** literal_context_map) {
- if (quality < MIN_QUALITY_FOR_CONTEXT_MODELING || length < 64) {
- return;
- } else if (ShouldUseComplexStaticContextMap(
- input, start_pos, length, mask, quality, size_hint,
- num_literal_contexts, literal_context_map)) {
- /* Context map was already set, nothing else to do. */
- } else {
- /* Gather bi-gram data of the UTF8 byte prefixes. To make the analysis of
- UTF8 data faster we only examine 64 byte long strides at every 4kB
- intervals. */
- const size_t end_pos = start_pos + length;
- uint32_t bigram_prefix_histo[9] = { 0 };
- for (; start_pos + 64 <= end_pos; start_pos += 4096) {
- static const int lut[4] = { 0, 0, 1, 2 };
- const size_t stride_end_pos = start_pos + 64;
- int prev = lut[input[start_pos & mask] >> 6] * 3;
- size_t pos;
- for (pos = start_pos + 1; pos < stride_end_pos; ++pos) {
- const uint8_t literal = input[pos & mask];
- ++bigram_prefix_histo[prev + lut[literal >> 6]];
- prev = lut[literal >> 6] * 3;
- }
- }
- ChooseContextMap(quality, &bigram_prefix_histo[0], num_literal_contexts,
- literal_context_map);
- }
-}
-
-static BROTLI_BOOL ShouldCompress(
- const uint8_t* data, const size_t mask, const uint64_t last_flush_pos,
- const size_t bytes, const size_t num_literals, const size_t num_commands) {
- if (num_commands < (bytes >> 8) + 2) {
- if (num_literals > 0.99 * (double)bytes) {
- uint32_t literal_histo[256] = { 0 };
- static const uint32_t kSampleRate = 13;
- static const double kMinEntropy = 7.92;
- const double bit_cost_threshold =
- (double)bytes * kMinEntropy / kSampleRate;
- size_t t = (bytes + kSampleRate - 1) / kSampleRate;
- uint32_t pos = (uint32_t)last_flush_pos;
- size_t i;
- for (i = 0; i < t; i++) {
- ++literal_histo[data[pos & mask]];
- pos += kSampleRate;
- }
- if (BitsEntropy(literal_histo, 256) > bit_cost_threshold) {
- return BROTLI_FALSE;
- }
- }
- }
- return BROTLI_TRUE;
-}
-
-/* Chooses the literal context mode for a metablock */
-static ContextType ChooseContextMode(const BrotliEncoderParams* params,
- const uint8_t* data, const size_t pos, const size_t mask,
- const size_t length) {
- /* We only do the computation for the option of something else than
- CONTEXT_UTF8 for the highest qualities */
- if (params->quality >= MIN_QUALITY_FOR_HQ_BLOCK_SPLITTING &&
- !BrotliIsMostlyUTF8(data, pos, mask, length, kMinUTF8Ratio)) {
- return CONTEXT_SIGNED;
- }
- return CONTEXT_UTF8;
-}
-
-static void WriteMetaBlockInternal(MemoryManager* m,
- const uint8_t* data,
- const size_t mask,
- const uint64_t last_flush_pos,
- const size_t bytes,
- const BROTLI_BOOL is_last,
- ContextType literal_context_mode,
- const BrotliEncoderParams* params,
- const uint8_t prev_byte,
- const uint8_t prev_byte2,
- const size_t num_literals,
- const size_t num_commands,
- Command* commands,
- const int* saved_dist_cache,
- int* dist_cache,
- size_t* storage_ix,
- uint8_t* storage) {
- const uint32_t wrapped_last_flush_pos = WrapPosition(last_flush_pos);
- uint16_t last_bytes;
- uint8_t last_bytes_bits;
- ContextLut literal_context_lut = BROTLI_CONTEXT_LUT(literal_context_mode);
- BrotliEncoderParams block_params = *params;
-
- if (bytes == 0) {
- /* Write the ISLAST and ISEMPTY bits. */
- BrotliWriteBits(2, 3, storage_ix, storage);
- *storage_ix = (*storage_ix + 7u) & ~7u;
- return;
- }
-
- if (!ShouldCompress(data, mask, last_flush_pos, bytes,
- num_literals, num_commands)) {
- /* Restore the distance cache, as its last update by
- CreateBackwardReferences is now unused. */
- memcpy(dist_cache, saved_dist_cache, 4 * sizeof(dist_cache[0]));
- BrotliStoreUncompressedMetaBlock(is_last, data,
- wrapped_last_flush_pos, mask, bytes,
- storage_ix, storage);
- return;
- }
-
- BROTLI_DCHECK(*storage_ix <= 14);
- last_bytes = (uint16_t)((storage[1] << 8) | storage[0]);
- last_bytes_bits = (uint8_t)(*storage_ix);
- if (params->quality <= MAX_QUALITY_FOR_STATIC_ENTROPY_CODES) {
- BrotliStoreMetaBlockFast(m, data, wrapped_last_flush_pos,
- bytes, mask, is_last, params,
- commands, num_commands,
- storage_ix, storage);
- if (BROTLI_IS_OOM(m)) return;
- } else if (params->quality < MIN_QUALITY_FOR_BLOCK_SPLIT) {
- BrotliStoreMetaBlockTrivial(m, data, wrapped_last_flush_pos,
- bytes, mask, is_last, params,
- commands, num_commands,
- storage_ix, storage);
- if (BROTLI_IS_OOM(m)) return;
- } else {
- MetaBlockSplit mb;
- InitMetaBlockSplit(&mb);
- if (params->quality < MIN_QUALITY_FOR_HQ_BLOCK_SPLITTING) {
- size_t num_literal_contexts = 1;
- const uint32_t* literal_context_map = NULL;
- if (!params->disable_literal_context_modeling) {
- DecideOverLiteralContextModeling(
- data, wrapped_last_flush_pos, bytes, mask, params->quality,
- params->size_hint, &num_literal_contexts,
- &literal_context_map);
- }
- BrotliBuildMetaBlockGreedy(m, data, wrapped_last_flush_pos, mask,
- prev_byte, prev_byte2, literal_context_lut, num_literal_contexts,
- literal_context_map, commands, num_commands, &mb);
- if (BROTLI_IS_OOM(m)) return;
- } else {
- BrotliBuildMetaBlock(m, data, wrapped_last_flush_pos, mask, &block_params,
- prev_byte, prev_byte2,
- commands, num_commands,
- literal_context_mode,
- &mb);
- if (BROTLI_IS_OOM(m)) return;
- }
- if (params->quality >= MIN_QUALITY_FOR_OPTIMIZE_HISTOGRAMS) {
- /* The number of distance symbols effectively used for distance
- histograms. It might be less than distance alphabet size
- for "Large Window Brotli" (32-bit). */
- uint32_t num_effective_dist_codes = block_params.dist.alphabet_size;
- if (num_effective_dist_codes > BROTLI_NUM_HISTOGRAM_DISTANCE_SYMBOLS) {
- num_effective_dist_codes = BROTLI_NUM_HISTOGRAM_DISTANCE_SYMBOLS;
- }
- BrotliOptimizeHistograms(num_effective_dist_codes, &mb);
- }
- BrotliStoreMetaBlock(m, data, wrapped_last_flush_pos, bytes, mask,
- prev_byte, prev_byte2,
- is_last,
- &block_params,
- literal_context_mode,
- commands, num_commands,
- &mb,
- storage_ix, storage);
- if (BROTLI_IS_OOM(m)) return;
- DestroyMetaBlockSplit(m, &mb);
- }
- if (bytes + 4 < (*storage_ix >> 3)) {
- /* Restore the distance cache and last byte. */
- memcpy(dist_cache, saved_dist_cache, 4 * sizeof(dist_cache[0]));
- storage[0] = (uint8_t)last_bytes;
- storage[1] = (uint8_t)(last_bytes >> 8);
- *storage_ix = last_bytes_bits;
- BrotliStoreUncompressedMetaBlock(is_last, data,
- wrapped_last_flush_pos, mask,
- bytes, storage_ix, storage);
- }
-}
-
-static void ChooseDistanceParams(BrotliEncoderParams* params) {
- uint32_t distance_postfix_bits = 0;
- uint32_t num_direct_distance_codes = 0;
-
- if (params->quality >= MIN_QUALITY_FOR_NONZERO_DISTANCE_PARAMS) {
- uint32_t ndirect_msb;
- if (params->mode == BROTLI_MODE_FONT) {
- distance_postfix_bits = 1;
- num_direct_distance_codes = 12;
- } else {
- distance_postfix_bits = params->dist.distance_postfix_bits;
- num_direct_distance_codes = params->dist.num_direct_distance_codes;
- }
- ndirect_msb = (num_direct_distance_codes >> distance_postfix_bits) & 0x0F;
- if (distance_postfix_bits > BROTLI_MAX_NPOSTFIX ||
- num_direct_distance_codes > BROTLI_MAX_NDIRECT ||
- (ndirect_msb << distance_postfix_bits) != num_direct_distance_codes) {
- distance_postfix_bits = 0;
- num_direct_distance_codes = 0;
- }
- }
-
- BrotliInitDistanceParams(
- params, distance_postfix_bits, num_direct_distance_codes);
-}
-
-static BROTLI_BOOL EnsureInitialized(BrotliEncoderState* s) {
- if (BROTLI_IS_OOM(&s->memory_manager_)) return BROTLI_FALSE;
- if (s->is_initialized_) return BROTLI_TRUE;
-
- SanitizeParams(&s->params);
- s->params.lgblock = ComputeLgBlock(&s->params);
- ChooseDistanceParams(&s->params);
-
- s->remaining_metadata_bytes_ = BROTLI_UINT32_MAX;
-
- RingBufferSetup(&s->params, &s->ringbuffer_);
-
- /* Initialize last byte with stream header. */
- {
- int lgwin = s->params.lgwin;
- if (s->params.quality == FAST_ONE_PASS_COMPRESSION_QUALITY ||
- s->params.quality == FAST_TWO_PASS_COMPRESSION_QUALITY) {
- lgwin = BROTLI_MAX(int, lgwin, 18);
- }
- EncodeWindowBits(lgwin, s->params.large_window,
- &s->last_bytes_, &s->last_bytes_bits_);
- }
-
- if (s->params.quality == FAST_ONE_PASS_COMPRESSION_QUALITY) {
- InitCommandPrefixCodes(s->cmd_depths_, s->cmd_bits_,
- s->cmd_code_, &s->cmd_code_numbits_);
- }
-
- s->is_initialized_ = BROTLI_TRUE;
- return BROTLI_TRUE;
-}
-
-static void BrotliEncoderInitParams(BrotliEncoderParams* params) {
- params->mode = BROTLI_DEFAULT_MODE;
- params->large_window = BROTLI_FALSE;
- params->quality = BROTLI_DEFAULT_QUALITY;
- params->lgwin = BROTLI_DEFAULT_WINDOW;
- params->lgblock = 0;
- params->size_hint = 0;
- params->disable_literal_context_modeling = BROTLI_FALSE;
- BrotliInitEncoderDictionary(¶ms->dictionary);
- params->dist.distance_postfix_bits = 0;
- params->dist.num_direct_distance_codes = 0;
- params->dist.alphabet_size =
- BROTLI_DISTANCE_ALPHABET_SIZE(0, 0, BROTLI_MAX_DISTANCE_BITS);
- params->dist.max_distance = BROTLI_MAX_DISTANCE;
-}
-
-static void BrotliEncoderInitState(BrotliEncoderState* s) {
- BrotliEncoderInitParams(&s->params);
- s->input_pos_ = 0;
- s->num_commands_ = 0;
- s->num_literals_ = 0;
- s->last_insert_len_ = 0;
- s->last_flush_pos_ = 0;
- s->last_processed_pos_ = 0;
- s->prev_byte_ = 0;
- s->prev_byte2_ = 0;
- s->storage_size_ = 0;
- s->storage_ = 0;
- s->hasher_ = NULL;
- s->large_table_ = NULL;
- s->large_table_size_ = 0;
- s->cmd_code_numbits_ = 0;
- s->command_buf_ = NULL;
- s->literal_buf_ = NULL;
- s->next_out_ = NULL;
- s->available_out_ = 0;
- s->total_out_ = 0;
- s->stream_state_ = BROTLI_STREAM_PROCESSING;
- s->is_last_block_emitted_ = BROTLI_FALSE;
- s->is_initialized_ = BROTLI_FALSE;
-
- RingBufferInit(&s->ringbuffer_);
-
- s->commands_ = 0;
- s->cmd_alloc_size_ = 0;
-
- /* Initialize distance cache. */
- s->dist_cache_[0] = 4;
- s->dist_cache_[1] = 11;
- s->dist_cache_[2] = 15;
- s->dist_cache_[3] = 16;
- /* Save the state of the distance cache in case we need to restore it for
- emitting an uncompressed block. */
- memcpy(s->saved_dist_cache_, s->dist_cache_, sizeof(s->saved_dist_cache_));
-}
-
-BrotliEncoderState* BrotliEncoderCreateInstance(
- brotli_alloc_func alloc_func, brotli_free_func free_func, void* opaque) {
- BrotliEncoderState* state = 0;
- if (!alloc_func && !free_func) {
- state = (BrotliEncoderState*)malloc(sizeof(BrotliEncoderState));
- } else if (alloc_func && free_func) {
- state = (BrotliEncoderState*)alloc_func(opaque, sizeof(BrotliEncoderState));
- }
- if (state == 0) {
- /* BROTLI_DUMP(); */
- return 0;
- }
- BrotliInitMemoryManager(
- &state->memory_manager_, alloc_func, free_func, opaque);
- BrotliEncoderInitState(state);
- return state;
-}
-
-static void BrotliEncoderCleanupState(BrotliEncoderState* s) {
- MemoryManager* m = &s->memory_manager_;
- if (BROTLI_IS_OOM(m)) {
- BrotliWipeOutMemoryManager(m);
- return;
- }
- BROTLI_FREE(m, s->storage_);
- BROTLI_FREE(m, s->commands_);
- RingBufferFree(m, &s->ringbuffer_);
- DestroyHasher(m, &s->hasher_);
- BROTLI_FREE(m, s->large_table_);
- BROTLI_FREE(m, s->command_buf_);
- BROTLI_FREE(m, s->literal_buf_);
-}
-
-/* Deinitializes and frees BrotliEncoderState instance. */
-void BrotliEncoderDestroyInstance(BrotliEncoderState* state) {
- if (!state) {
- return;
- } else {
- MemoryManager* m = &state->memory_manager_;
- brotli_free_func free_func = m->free_func;
- void* opaque = m->opaque;
- BrotliEncoderCleanupState(state);
- free_func(opaque, state);
- }
-}
-
-/*
- Copies the given input data to the internal ring buffer of the compressor.
- No processing of the data occurs at this time and this function can be
- called multiple times before calling WriteBrotliData() to process the
- accumulated input. At most input_block_size() bytes of input data can be
- copied to the ring buffer, otherwise the next WriteBrotliData() will fail.
- */
-static void CopyInputToRingBuffer(BrotliEncoderState* s,
- const size_t input_size,
- const uint8_t* input_buffer) {
- RingBuffer* ringbuffer_ = &s->ringbuffer_;
- MemoryManager* m = &s->memory_manager_;
- RingBufferWrite(m, input_buffer, input_size, ringbuffer_);
- if (BROTLI_IS_OOM(m)) return;
- s->input_pos_ += input_size;
-
- /* TL;DR: If needed, initialize 7 more bytes in the ring buffer to make the
- hashing not depend on uninitialized data. This makes compression
- deterministic and it prevents uninitialized memory warnings in Valgrind.
- Even without erasing, the output would be valid (but nondeterministic).
-
- Background information: The compressor stores short (at most 8 bytes)
- substrings of the input already read in a hash table, and detects
- repetitions by looking up such substrings in the hash table. If it
- can find a substring, it checks whether the substring is really there
- in the ring buffer (or it's just a hash collision). Should the hash
- table become corrupt, this check makes sure that the output is
- still valid, albeit the compression ratio would be bad.
-
- The compressor populates the hash table from the ring buffer as it's
- reading new bytes from the input. However, at the last few indexes of
- the ring buffer, there are not enough bytes to build full-length
- substrings from. Since the hash table always contains full-length
- substrings, we erase with dummy zeros here to make sure that those
- substrings will contain zeros at the end instead of uninitialized
- data.
-
- Please note that erasing is not necessary (because the
- memory region is already initialized since he ring buffer
- has a `tail' that holds a copy of the beginning,) so we
- skip erasing if we have already gone around at least once in
- the ring buffer.
-
- Only clear during the first round of ring-buffer writes. On
- subsequent rounds data in the ring-buffer would be affected. */
- if (ringbuffer_->pos_ <= ringbuffer_->mask_) {
- /* This is the first time when the ring buffer is being written.
- We clear 7 bytes just after the bytes that have been copied from
- the input buffer.
-
- The ring-buffer has a "tail" that holds a copy of the beginning,
- but only once the ring buffer has been fully written once, i.e.,
- pos <= mask. For the first time, we need to write values
- in this tail (where index may be larger than mask), so that
- we have exactly defined behavior and don't read uninitialized
- memory. Due to performance reasons, hashing reads data using a
- LOAD64, which can go 7 bytes beyond the bytes written in the
- ring-buffer. */
- memset(ringbuffer_->buffer_ + ringbuffer_->pos_, 0, 7);
- }
-}
-
-/* Marks all input as processed.
- Returns true if position wrapping occurs. */
-static BROTLI_BOOL UpdateLastProcessedPos(BrotliEncoderState* s) {
- uint32_t wrapped_last_processed_pos = WrapPosition(s->last_processed_pos_);
- uint32_t wrapped_input_pos = WrapPosition(s->input_pos_);
- s->last_processed_pos_ = s->input_pos_;
- return TO_BROTLI_BOOL(wrapped_input_pos < wrapped_last_processed_pos);
-}
-
-static void ExtendLastCommand(BrotliEncoderState* s, uint32_t* bytes,
- uint32_t* wrapped_last_processed_pos) {
- Command* last_command = &s->commands_[s->num_commands_ - 1];
- const uint8_t* data = s->ringbuffer_.buffer_;
- const uint32_t mask = s->ringbuffer_.mask_;
- uint64_t max_backward_distance =
- (((uint64_t)1) << s->params.lgwin) - BROTLI_WINDOW_GAP;
- uint64_t last_copy_len = last_command->copy_len_ & 0x1FFFFFF;
- uint64_t last_processed_pos = s->last_processed_pos_ - last_copy_len;
- uint64_t max_distance = last_processed_pos < max_backward_distance ?
- last_processed_pos : max_backward_distance;
- uint64_t cmd_dist = (uint64_t)s->dist_cache_[0];
- uint32_t distance_code = CommandRestoreDistanceCode(last_command,
- &s->params.dist);
- if (distance_code < BROTLI_NUM_DISTANCE_SHORT_CODES ||
- distance_code - (BROTLI_NUM_DISTANCE_SHORT_CODES - 1) == cmd_dist) {
- if (cmd_dist <= max_distance) {
- while (*bytes != 0 && data[*wrapped_last_processed_pos & mask] ==
- data[(*wrapped_last_processed_pos - cmd_dist) & mask]) {
- last_command->copy_len_++;
- (*bytes)--;
- (*wrapped_last_processed_pos)++;
- }
- }
- /* The copy length is at most the metablock size, and thus expressible. */
- GetLengthCode(last_command->insert_len_,
- (size_t)((int)(last_command->copy_len_ & 0x1FFFFFF) +
- (int)(last_command->copy_len_ >> 25)),
- TO_BROTLI_BOOL((last_command->dist_prefix_ & 0x3FF) == 0),
- &last_command->cmd_prefix_);
- }
-}
-
-/*
- Processes the accumulated input data and sets |*out_size| to the length of
- the new output meta-block, or to zero if no new output meta-block has been
- created (in this case the processed input data is buffered internally).
- If |*out_size| is positive, |*output| points to the start of the output
- data. If |is_last| or |force_flush| is BROTLI_TRUE, an output meta-block is
- always created. However, until |is_last| is BROTLI_TRUE encoder may retain up
- to 7 bits of the last byte of output. To force encoder to dump the remaining
- bits use WriteMetadata() to append an empty meta-data block.
- Returns BROTLI_FALSE if the size of the input data is larger than
- input_block_size().
- */
-static BROTLI_BOOL EncodeData(
- BrotliEncoderState* s, const BROTLI_BOOL is_last,
- const BROTLI_BOOL force_flush, size_t* out_size, uint8_t** output) {
- const uint64_t delta = UnprocessedInputSize(s);
- uint32_t bytes = (uint32_t)delta;
- uint32_t wrapped_last_processed_pos = WrapPosition(s->last_processed_pos_);
- uint8_t* data;
- uint32_t mask;
- MemoryManager* m = &s->memory_manager_;
- ContextType literal_context_mode;
-
- data = s->ringbuffer_.buffer_;
- mask = s->ringbuffer_.mask_;
-
- /* Adding more blocks after "last" block is forbidden. */
- if (s->is_last_block_emitted_) return BROTLI_FALSE;
- if (is_last) s->is_last_block_emitted_ = BROTLI_TRUE;
-
- if (delta > InputBlockSize(s)) {
- return BROTLI_FALSE;
- }
- if (s->params.quality == FAST_TWO_PASS_COMPRESSION_QUALITY &&
- !s->command_buf_) {
- s->command_buf_ =
- BROTLI_ALLOC(m, uint32_t, kCompressFragmentTwoPassBlockSize);
- s->literal_buf_ =
- BROTLI_ALLOC(m, uint8_t, kCompressFragmentTwoPassBlockSize);
- if (BROTLI_IS_OOM(m)) return BROTLI_FALSE;
- }
-
- if (s->params.quality == FAST_ONE_PASS_COMPRESSION_QUALITY ||
- s->params.quality == FAST_TWO_PASS_COMPRESSION_QUALITY) {
- uint8_t* storage;
- size_t storage_ix = s->last_bytes_bits_;
- size_t table_size;
- int* table;
-
- if (delta == 0 && !is_last) {
- /* We have no new input data and we don't have to finish the stream, so
- nothing to do. */
- *out_size = 0;
- return BROTLI_TRUE;
- }
- storage = GetBrotliStorage(s, 2 * bytes + 503);
- if (BROTLI_IS_OOM(m)) return BROTLI_FALSE;
- storage[0] = (uint8_t)s->last_bytes_;
- storage[1] = (uint8_t)(s->last_bytes_ >> 8);
- table = GetHashTable(s, s->params.quality, bytes, &table_size);
- if (BROTLI_IS_OOM(m)) return BROTLI_FALSE;
- if (s->params.quality == FAST_ONE_PASS_COMPRESSION_QUALITY) {
- BrotliCompressFragmentFast(
- m, &data[wrapped_last_processed_pos & mask],
- bytes, is_last,
- table, table_size,
- s->cmd_depths_, s->cmd_bits_,
- &s->cmd_code_numbits_, s->cmd_code_,
- &storage_ix, storage);
- if (BROTLI_IS_OOM(m)) return BROTLI_FALSE;
- } else {
- BrotliCompressFragmentTwoPass(
- m, &data[wrapped_last_processed_pos & mask],
- bytes, is_last,
- s->command_buf_, s->literal_buf_,
- table, table_size,
- &storage_ix, storage);
- if (BROTLI_IS_OOM(m)) return BROTLI_FALSE;
- }
- s->last_bytes_ = (uint16_t)(storage[storage_ix >> 3]);
- s->last_bytes_bits_ = storage_ix & 7u;
- UpdateLastProcessedPos(s);
- *output = &storage[0];
- *out_size = storage_ix >> 3;
- return BROTLI_TRUE;
- }
-
- {
- /* Theoretical max number of commands is 1 per 2 bytes. */
- size_t newsize = s->num_commands_ + bytes / 2 + 1;
- if (newsize > s->cmd_alloc_size_) {
- Command* new_commands;
- /* Reserve a bit more memory to allow merging with a next block
- without reallocation: that would impact speed. */
- newsize += (bytes / 4) + 16;
- s->cmd_alloc_size_ = newsize;
- new_commands = BROTLI_ALLOC(m, Command, newsize);
- if (BROTLI_IS_OOM(m)) return BROTLI_FALSE;
- if (s->commands_) {
- memcpy(new_commands, s->commands_, sizeof(Command) * s->num_commands_);
- BROTLI_FREE(m, s->commands_);
- }
- s->commands_ = new_commands;
- }
- }
-
- InitOrStitchToPreviousBlock(m, &s->hasher_, data, mask, &s->params,
- wrapped_last_processed_pos, bytes, is_last);
-
- literal_context_mode = ChooseContextMode(
- &s->params, data, WrapPosition(s->last_flush_pos_),
- mask, (size_t)(s->input_pos_ - s->last_flush_pos_));
-
- if (BROTLI_IS_OOM(m)) return BROTLI_FALSE;
-
- if (s->num_commands_ && s->last_insert_len_ == 0) {
- ExtendLastCommand(s, &bytes, &wrapped_last_processed_pos);
- }
-
- if (s->params.quality == ZOPFLIFICATION_QUALITY) {
- BROTLI_DCHECK(s->params.hasher.type == 10);
- BrotliCreateZopfliBackwardReferences(m,
- bytes, wrapped_last_processed_pos,
- data, mask, &s->params, s->hasher_, s->dist_cache_,
- &s->last_insert_len_, &s->commands_[s->num_commands_],
- &s->num_commands_, &s->num_literals_);
- if (BROTLI_IS_OOM(m)) return BROTLI_FALSE;
- } else if (s->params.quality == HQ_ZOPFLIFICATION_QUALITY) {
- BROTLI_DCHECK(s->params.hasher.type == 10);
- BrotliCreateHqZopfliBackwardReferences(m,
- bytes, wrapped_last_processed_pos,
- data, mask, &s->params, s->hasher_, s->dist_cache_,
- &s->last_insert_len_, &s->commands_[s->num_commands_],
- &s->num_commands_, &s->num_literals_);
- if (BROTLI_IS_OOM(m)) return BROTLI_FALSE;
- } else {
- BrotliCreateBackwardReferences(
- bytes, wrapped_last_processed_pos,
- data, mask, &s->params, s->hasher_, s->dist_cache_,
- &s->last_insert_len_, &s->commands_[s->num_commands_],
- &s->num_commands_, &s->num_literals_);
- }
-
- {
- const size_t max_length = MaxMetablockSize(&s->params);
- const size_t max_literals = max_length / 8;
- const size_t max_commands = max_length / 8;
- const size_t processed_bytes = (size_t)(s->input_pos_ - s->last_flush_pos_);
- /* If maximal possible additional block doesn't fit metablock, flush now. */
- /* TODO: Postpone decision until next block arrives? */
- const BROTLI_BOOL next_input_fits_metablock = TO_BROTLI_BOOL(
- processed_bytes + InputBlockSize(s) <= max_length);
- /* If block splitting is not used, then flush as soon as there is some
- amount of commands / literals produced. */
- const BROTLI_BOOL should_flush = TO_BROTLI_BOOL(
- s->params.quality < MIN_QUALITY_FOR_BLOCK_SPLIT &&
- s->num_literals_ + s->num_commands_ >= MAX_NUM_DELAYED_SYMBOLS);
- if (!is_last && !force_flush && !should_flush &&
- next_input_fits_metablock &&
- s->num_literals_ < max_literals &&
- s->num_commands_ < max_commands) {
- /* Merge with next input block. Everything will happen later. */
- if (UpdateLastProcessedPos(s)) {
- HasherReset(s->hasher_);
- }
- *out_size = 0;
- return BROTLI_TRUE;
- }
- }
-
- /* Create the last insert-only command. */
- if (s->last_insert_len_ > 0) {
- InitInsertCommand(&s->commands_[s->num_commands_++], s->last_insert_len_);
- s->num_literals_ += s->last_insert_len_;
- s->last_insert_len_ = 0;
- }
-
- if (!is_last && s->input_pos_ == s->last_flush_pos_) {
- /* We have no new input data and we don't have to finish the stream, so
- nothing to do. */
- *out_size = 0;
- return BROTLI_TRUE;
- }
- BROTLI_DCHECK(s->input_pos_ >= s->last_flush_pos_);
- BROTLI_DCHECK(s->input_pos_ > s->last_flush_pos_ || is_last);
- BROTLI_DCHECK(s->input_pos_ - s->last_flush_pos_ <= 1u << 24);
- {
- const uint32_t metablock_size =
- (uint32_t)(s->input_pos_ - s->last_flush_pos_);
- uint8_t* storage = GetBrotliStorage(s, 2 * metablock_size + 503);
- size_t storage_ix = s->last_bytes_bits_;
- if (BROTLI_IS_OOM(m)) return BROTLI_FALSE;
- storage[0] = (uint8_t)s->last_bytes_;
- storage[1] = (uint8_t)(s->last_bytes_ >> 8);
- WriteMetaBlockInternal(
- m, data, mask, s->last_flush_pos_, metablock_size, is_last,
- literal_context_mode, &s->params, s->prev_byte_, s->prev_byte2_,
- s->num_literals_, s->num_commands_, s->commands_, s->saved_dist_cache_,
- s->dist_cache_, &storage_ix, storage);
- if (BROTLI_IS_OOM(m)) return BROTLI_FALSE;
- s->last_bytes_ = (uint16_t)(storage[storage_ix >> 3]);
- s->last_bytes_bits_ = storage_ix & 7u;
- s->last_flush_pos_ = s->input_pos_;
- if (UpdateLastProcessedPos(s)) {
- HasherReset(s->hasher_);
- }
- if (s->last_flush_pos_ > 0) {
- s->prev_byte_ = data[((uint32_t)s->last_flush_pos_ - 1) & mask];
- }
- if (s->last_flush_pos_ > 1) {
- s->prev_byte2_ = data[(uint32_t)(s->last_flush_pos_ - 2) & mask];
- }
- s->num_commands_ = 0;
- s->num_literals_ = 0;
- /* Save the state of the distance cache in case we need to restore it for
- emitting an uncompressed block. */
- memcpy(s->saved_dist_cache_, s->dist_cache_, sizeof(s->saved_dist_cache_));
- *output = &storage[0];
- *out_size = storage_ix >> 3;
- return BROTLI_TRUE;
- }
-}
-
-/* Dumps remaining output bits and metadata header to |header|.
- Returns number of produced bytes.
- REQUIRED: |header| should be 8-byte aligned and at least 16 bytes long.
- REQUIRED: |block_size| <= (1 << 24). */
-static size_t WriteMetadataHeader(
- BrotliEncoderState* s, const size_t block_size, uint8_t* header) {
- size_t storage_ix;
- storage_ix = s->last_bytes_bits_;
- header[0] = (uint8_t)s->last_bytes_;
- header[1] = (uint8_t)(s->last_bytes_ >> 8);
- s->last_bytes_ = 0;
- s->last_bytes_bits_ = 0;
-
- BrotliWriteBits(1, 0, &storage_ix, header);
- BrotliWriteBits(2, 3, &storage_ix, header);
- BrotliWriteBits(1, 0, &storage_ix, header);
- if (block_size == 0) {
- BrotliWriteBits(2, 0, &storage_ix, header);
- } else {
- uint32_t nbits = (block_size == 1) ? 0 :
- (Log2FloorNonZero((uint32_t)block_size - 1) + 1);
- uint32_t nbytes = (nbits + 7) / 8;
- BrotliWriteBits(2, nbytes, &storage_ix, header);
- BrotliWriteBits(8 * nbytes, block_size - 1, &storage_ix, header);
- }
- return (storage_ix + 7u) >> 3;
-}
-
-static BROTLI_BOOL BrotliCompressBufferQuality10(
- int lgwin, size_t input_size, const uint8_t* input_buffer,
- size_t* encoded_size, uint8_t* encoded_buffer) {
- MemoryManager memory_manager;
- MemoryManager* m = &memory_manager;
-
- const size_t mask = BROTLI_SIZE_MAX >> 1;
- const size_t max_backward_limit = BROTLI_MAX_BACKWARD_LIMIT(lgwin);
- int dist_cache[4] = { 4, 11, 15, 16 };
- int saved_dist_cache[4] = { 4, 11, 15, 16 };
- BROTLI_BOOL ok = BROTLI_TRUE;
- const size_t max_out_size = *encoded_size;
- size_t total_out_size = 0;
- uint16_t last_bytes;
- uint8_t last_bytes_bits;
- HasherHandle hasher = NULL;
-
- const size_t hasher_eff_size =
- BROTLI_MIN(size_t, input_size, max_backward_limit + BROTLI_WINDOW_GAP);
-
- BrotliEncoderParams params;
-
- const int lgmetablock = BROTLI_MIN(int, 24, lgwin + 1);
- size_t max_block_size;
- const size_t max_metablock_size = (size_t)1 << lgmetablock;
- const size_t max_literals_per_metablock = max_metablock_size / 8;
- const size_t max_commands_per_metablock = max_metablock_size / 8;
- size_t metablock_start = 0;
- uint8_t prev_byte = 0;
- uint8_t prev_byte2 = 0;
-
- BrotliEncoderInitParams(¶ms);
- params.quality = 10;
- params.lgwin = lgwin;
- if (lgwin > BROTLI_MAX_WINDOW_BITS) {
- params.large_window = BROTLI_TRUE;
- }
- SanitizeParams(¶ms);
- params.lgblock = ComputeLgBlock(¶ms);
- ChooseDistanceParams(¶ms);
- max_block_size = (size_t)1 << params.lgblock;
-
- BrotliInitMemoryManager(m, 0, 0, 0);
-
- BROTLI_DCHECK(input_size <= mask + 1);
- EncodeWindowBits(lgwin, params.large_window, &last_bytes, &last_bytes_bits);
- InitOrStitchToPreviousBlock(m, &hasher, input_buffer, mask, ¶ms,
- 0, hasher_eff_size, BROTLI_TRUE);
- if (BROTLI_IS_OOM(m)) goto oom;
-
- while (ok && metablock_start < input_size) {
- const size_t metablock_end =
- BROTLI_MIN(size_t, input_size, metablock_start + max_metablock_size);
- const size_t expected_num_commands =
- (metablock_end - metablock_start) / 12 + 16;
- Command* commands = 0;
- size_t num_commands = 0;
- size_t last_insert_len = 0;
- size_t num_literals = 0;
- size_t metablock_size = 0;
- size_t cmd_alloc_size = 0;
- BROTLI_BOOL is_last;
- uint8_t* storage;
- size_t storage_ix;
-
- ContextType literal_context_mode = ChooseContextMode(¶ms,
- input_buffer, metablock_start, mask, metablock_end - metablock_start);
-
- size_t block_start;
- for (block_start = metablock_start; block_start < metablock_end; ) {
- size_t block_size =
- BROTLI_MIN(size_t, metablock_end - block_start, max_block_size);
- ZopfliNode* nodes = BROTLI_ALLOC(m, ZopfliNode, block_size + 1);
- size_t path_size;
- size_t new_cmd_alloc_size;
- if (BROTLI_IS_OOM(m)) goto oom;
- BrotliInitZopfliNodes(nodes, block_size + 1);
- StitchToPreviousBlockH10(hasher, block_size, block_start,
- input_buffer, mask);
- path_size = BrotliZopfliComputeShortestPath(m,
- block_size, block_start, input_buffer, mask, ¶ms,
- max_backward_limit, dist_cache, hasher, nodes);
- if (BROTLI_IS_OOM(m)) goto oom;
- /* We allocate a command buffer in the first iteration of this loop that
- will be likely big enough for the whole metablock, so that for most
- inputs we will not have to reallocate in later iterations. We do the
- allocation here and not before the loop, because if the input is small,
- this will be allocated after the Zopfli cost model is freed, so this
- will not increase peak memory usage.
- TODO: If the first allocation is too small, increase command
- buffer size exponentially. */
- new_cmd_alloc_size = BROTLI_MAX(size_t, expected_num_commands,
- num_commands + path_size + 1);
- if (cmd_alloc_size != new_cmd_alloc_size) {
- Command* new_commands = BROTLI_ALLOC(m, Command, new_cmd_alloc_size);
- if (BROTLI_IS_OOM(m)) goto oom;
- cmd_alloc_size = new_cmd_alloc_size;
- if (commands) {
- memcpy(new_commands, commands, sizeof(Command) * num_commands);
- BROTLI_FREE(m, commands);
- }
- commands = new_commands;
- }
- BrotliZopfliCreateCommands(block_size, block_start, max_backward_limit,
- &nodes[0], dist_cache, &last_insert_len,
- ¶ms, &commands[num_commands],
- &num_literals);
- num_commands += path_size;
- block_start += block_size;
- metablock_size += block_size;
- BROTLI_FREE(m, nodes);
- if (num_literals > max_literals_per_metablock ||
- num_commands > max_commands_per_metablock) {
- break;
- }
- }
-
- if (last_insert_len > 0) {
- InitInsertCommand(&commands[num_commands++], last_insert_len);
- num_literals += last_insert_len;
- }
-
- is_last = TO_BROTLI_BOOL(metablock_start + metablock_size == input_size);
- storage = NULL;
- storage_ix = last_bytes_bits;
-
- if (metablock_size == 0) {
- /* Write the ISLAST and ISEMPTY bits. */
- storage = BROTLI_ALLOC(m, uint8_t, 16);
- if (BROTLI_IS_OOM(m)) goto oom;
- storage[0] = (uint8_t)last_bytes;
- storage[1] = (uint8_t)(last_bytes >> 8);
- BrotliWriteBits(2, 3, &storage_ix, storage);
- storage_ix = (storage_ix + 7u) & ~7u;
- } else if (!ShouldCompress(input_buffer, mask, metablock_start,
- metablock_size, num_literals, num_commands)) {
- /* Restore the distance cache, as its last update by
- CreateBackwardReferences is now unused. */
- memcpy(dist_cache, saved_dist_cache, 4 * sizeof(dist_cache[0]));
- storage = BROTLI_ALLOC(m, uint8_t, metablock_size + 16);
- if (BROTLI_IS_OOM(m)) goto oom;
- storage[0] = (uint8_t)last_bytes;
- storage[1] = (uint8_t)(last_bytes >> 8);
- BrotliStoreUncompressedMetaBlock(is_last, input_buffer,
- metablock_start, mask, metablock_size,
- &storage_ix, storage);
- } else {
- MetaBlockSplit mb;
- BrotliEncoderParams block_params = params;
- InitMetaBlockSplit(&mb);
- BrotliBuildMetaBlock(m, input_buffer, metablock_start, mask,
- &block_params,
- prev_byte, prev_byte2,
- commands, num_commands,
- literal_context_mode,
- &mb);
- if (BROTLI_IS_OOM(m)) goto oom;
- {
- /* The number of distance symbols effectively used for distance
- histograms. It might be less than distance alphabet size
- for "Large Window Brotli" (32-bit). */
- uint32_t num_effective_dist_codes = block_params.dist.alphabet_size;
- if (num_effective_dist_codes > BROTLI_NUM_HISTOGRAM_DISTANCE_SYMBOLS) {
- num_effective_dist_codes = BROTLI_NUM_HISTOGRAM_DISTANCE_SYMBOLS;
- }
- BrotliOptimizeHistograms(num_effective_dist_codes, &mb);
- }
- storage = BROTLI_ALLOC(m, uint8_t, 2 * metablock_size + 503);
- if (BROTLI_IS_OOM(m)) goto oom;
- storage[0] = (uint8_t)last_bytes;
- storage[1] = (uint8_t)(last_bytes >> 8);
- BrotliStoreMetaBlock(m, input_buffer, metablock_start, metablock_size,
- mask, prev_byte, prev_byte2,
- is_last,
- &block_params,
- literal_context_mode,
- commands, num_commands,
- &mb,
- &storage_ix, storage);
- if (BROTLI_IS_OOM(m)) goto oom;
- if (metablock_size + 4 < (storage_ix >> 3)) {
- /* Restore the distance cache and last byte. */
- memcpy(dist_cache, saved_dist_cache, 4 * sizeof(dist_cache[0]));
- storage[0] = (uint8_t)last_bytes;
- storage[1] = (uint8_t)(last_bytes >> 8);
- storage_ix = last_bytes_bits;
- BrotliStoreUncompressedMetaBlock(is_last, input_buffer,
- metablock_start, mask,
- metablock_size, &storage_ix, storage);
- }
- DestroyMetaBlockSplit(m, &mb);
- }
- last_bytes = (uint16_t)(storage[storage_ix >> 3]);
- last_bytes_bits = storage_ix & 7u;
- metablock_start += metablock_size;
- if (metablock_start < input_size) {
- prev_byte = input_buffer[metablock_start - 1];
- prev_byte2 = input_buffer[metablock_start - 2];
- }
- /* Save the state of the distance cache in case we need to restore it for
- emitting an uncompressed block. */
- memcpy(saved_dist_cache, dist_cache, 4 * sizeof(dist_cache[0]));
-
- {
- const size_t out_size = storage_ix >> 3;
- total_out_size += out_size;
- if (total_out_size <= max_out_size) {
- memcpy(encoded_buffer, storage, out_size);
- encoded_buffer += out_size;
- } else {
- ok = BROTLI_FALSE;
- }
- }
- BROTLI_FREE(m, storage);
- BROTLI_FREE(m, commands);
- }
-
- *encoded_size = total_out_size;
- DestroyHasher(m, &hasher);
- return ok;
-
-oom:
- BrotliWipeOutMemoryManager(m);
- return BROTLI_FALSE;
-}
-
-size_t BrotliEncoderMaxCompressedSize(size_t input_size) {
- /* [window bits / empty metadata] + N * [uncompressed] + [last empty] */
- size_t num_large_blocks = input_size >> 14;
- size_t overhead = 2 + (4 * num_large_blocks) + 3 + 1;
- size_t result = input_size + overhead;
- if (input_size == 0) return 2;
- return (result < input_size) ? 0 : result;
-}
-
-/* Wraps data to uncompressed brotli stream with minimal window size.
- |output| should point at region with at least BrotliEncoderMaxCompressedSize
- addressable bytes.
- Returns the length of stream. */
-static size_t MakeUncompressedStream(
- const uint8_t* input, size_t input_size, uint8_t* output) {
- size_t size = input_size;
- size_t result = 0;
- size_t offset = 0;
- if (input_size == 0) {
- output[0] = 6;
- return 1;
- }
- output[result++] = 0x21; /* window bits = 10, is_last = false */
- output[result++] = 0x03; /* empty metadata, padding */
- while (size > 0) {
- uint32_t nibbles = 0;
- uint32_t chunk_size;
- uint32_t bits;
- chunk_size = (size > (1u << 24)) ? (1u << 24) : (uint32_t)size;
- if (chunk_size > (1u << 16)) nibbles = (chunk_size > (1u << 20)) ? 2 : 1;
- bits =
- (nibbles << 1) | ((chunk_size - 1) << 3) | (1u << (19 + 4 * nibbles));
- output[result++] = (uint8_t)bits;
- output[result++] = (uint8_t)(bits >> 8);
- output[result++] = (uint8_t)(bits >> 16);
- if (nibbles == 2) output[result++] = (uint8_t)(bits >> 24);
- memcpy(&output[result], &input[offset], chunk_size);
- result += chunk_size;
- offset += chunk_size;
- size -= chunk_size;
- }
- output[result++] = 3;
- return result;
-}
-
-BROTLI_BOOL BrotliEncoderCompress(
- int quality, int lgwin, BrotliEncoderMode mode, size_t input_size,
- const uint8_t* input_buffer, size_t* encoded_size,
- uint8_t* encoded_buffer) {
- BrotliEncoderState* s;
- size_t out_size = *encoded_size;
- const uint8_t* input_start = input_buffer;
- uint8_t* output_start = encoded_buffer;
- size_t max_out_size = BrotliEncoderMaxCompressedSize(input_size);
- if (out_size == 0) {
- /* Output buffer needs at least one byte. */
- return BROTLI_FALSE;
- }
- if (input_size == 0) {
- /* Handle the special case of empty input. */
- *encoded_size = 1;
- *encoded_buffer = 6;
- return BROTLI_TRUE;
- }
- if (quality == 10) {
- /* TODO: Implement this direct path for all quality levels. */
- const int lg_win = BROTLI_MIN(int, BROTLI_LARGE_MAX_WINDOW_BITS,
- BROTLI_MAX(int, 16, lgwin));
- int ok = BrotliCompressBufferQuality10(lg_win, input_size, input_buffer,
- encoded_size, encoded_buffer);
- if (!ok || (max_out_size && *encoded_size > max_out_size)) {
- goto fallback;
- }
- return BROTLI_TRUE;
- }
-
- s = BrotliEncoderCreateInstance(0, 0, 0);
- if (!s) {
- return BROTLI_FALSE;
- } else {
- size_t available_in = input_size;
- const uint8_t* next_in = input_buffer;
- size_t available_out = *encoded_size;
- uint8_t* next_out = encoded_buffer;
- size_t total_out = 0;
- BROTLI_BOOL result = BROTLI_FALSE;
- BrotliEncoderSetParameter(s, BROTLI_PARAM_QUALITY, (uint32_t)quality);
- BrotliEncoderSetParameter(s, BROTLI_PARAM_LGWIN, (uint32_t)lgwin);
- BrotliEncoderSetParameter(s, BROTLI_PARAM_MODE, (uint32_t)mode);
- BrotliEncoderSetParameter(s, BROTLI_PARAM_SIZE_HINT, (uint32_t)input_size);
- if (lgwin > BROTLI_MAX_WINDOW_BITS) {
- BrotliEncoderSetParameter(s, BROTLI_PARAM_LARGE_WINDOW, BROTLI_TRUE);
- }
- result = BrotliEncoderCompressStream(s, BROTLI_OPERATION_FINISH,
- &available_in, &next_in, &available_out, &next_out, &total_out);
- if (!BrotliEncoderIsFinished(s)) result = 0;
- *encoded_size = total_out;
- BrotliEncoderDestroyInstance(s);
- if (!result || (max_out_size && *encoded_size > max_out_size)) {
- goto fallback;
- }
- return BROTLI_TRUE;
- }
-fallback:
- *encoded_size = 0;
- if (!max_out_size) return BROTLI_FALSE;
- if (out_size >= max_out_size) {
- *encoded_size =
- MakeUncompressedStream(input_start, input_size, output_start);
- return BROTLI_TRUE;
- }
- return BROTLI_FALSE;
-}
-
-static void InjectBytePaddingBlock(BrotliEncoderState* s) {
- uint32_t seal = s->last_bytes_;
- size_t seal_bits = s->last_bytes_bits_;
- uint8_t* destination;
- s->last_bytes_ = 0;
- s->last_bytes_bits_ = 0;
- /* is_last = 0, data_nibbles = 11, reserved = 0, meta_nibbles = 00 */
- seal |= 0x6u << seal_bits;
- seal_bits += 6;
- /* If we have already created storage, then append to it.
- Storage is valid until next block is being compressed. */
- if (s->next_out_) {
- destination = s->next_out_ + s->available_out_;
- } else {
- destination = s->tiny_buf_.u8;
- s->next_out_ = destination;
- }
- destination[0] = (uint8_t)seal;
- if (seal_bits > 8) destination[1] = (uint8_t)(seal >> 8);
- if (seal_bits > 16) destination[2] = (uint8_t)(seal >> 16);
- s->available_out_ += (seal_bits + 7) >> 3;
-}
-
-/* Injects padding bits or pushes compressed data to output.
- Returns false if nothing is done. */
-static BROTLI_BOOL InjectFlushOrPushOutput(BrotliEncoderState* s,
- size_t* available_out, uint8_t** next_out, size_t* total_out) {
- if (s->stream_state_ == BROTLI_STREAM_FLUSH_REQUESTED &&
- s->last_bytes_bits_ != 0) {
- InjectBytePaddingBlock(s);
- return BROTLI_TRUE;
- }
-
- if (s->available_out_ != 0 && *available_out != 0) {
- size_t copy_output_size =
- BROTLI_MIN(size_t, s->available_out_, *available_out);
- memcpy(*next_out, s->next_out_, copy_output_size);
- *next_out += copy_output_size;
- *available_out -= copy_output_size;
- s->next_out_ += copy_output_size;
- s->available_out_ -= copy_output_size;
- s->total_out_ += copy_output_size;
- if (total_out) *total_out = s->total_out_;
- return BROTLI_TRUE;
- }
-
- return BROTLI_FALSE;
-}
-
-static void CheckFlushComplete(BrotliEncoderState* s) {
- if (s->stream_state_ == BROTLI_STREAM_FLUSH_REQUESTED &&
- s->available_out_ == 0) {
- s->stream_state_ = BROTLI_STREAM_PROCESSING;
- s->next_out_ = 0;
- }
-}
-
-static BROTLI_BOOL BrotliEncoderCompressStreamFast(
- BrotliEncoderState* s, BrotliEncoderOperation op, size_t* available_in,
- const uint8_t** next_in, size_t* available_out, uint8_t** next_out,
- size_t* total_out) {
- const size_t block_size_limit = (size_t)1 << s->params.lgwin;
- const size_t buf_size = BROTLI_MIN(size_t, kCompressFragmentTwoPassBlockSize,
- BROTLI_MIN(size_t, *available_in, block_size_limit));
- uint32_t* tmp_command_buf = NULL;
- uint32_t* command_buf = NULL;
- uint8_t* tmp_literal_buf = NULL;
- uint8_t* literal_buf = NULL;
- MemoryManager* m = &s->memory_manager_;
- if (s->params.quality != FAST_ONE_PASS_COMPRESSION_QUALITY &&
- s->params.quality != FAST_TWO_PASS_COMPRESSION_QUALITY) {
- return BROTLI_FALSE;
- }
- if (s->params.quality == FAST_TWO_PASS_COMPRESSION_QUALITY) {
- if (!s->command_buf_ && buf_size == kCompressFragmentTwoPassBlockSize) {
- s->command_buf_ =
- BROTLI_ALLOC(m, uint32_t, kCompressFragmentTwoPassBlockSize);
- s->literal_buf_ =
- BROTLI_ALLOC(m, uint8_t, kCompressFragmentTwoPassBlockSize);
- if (BROTLI_IS_OOM(m)) return BROTLI_FALSE;
- }
- if (s->command_buf_) {
- command_buf = s->command_buf_;
- literal_buf = s->literal_buf_;
- } else {
- tmp_command_buf = BROTLI_ALLOC(m, uint32_t, buf_size);
- tmp_literal_buf = BROTLI_ALLOC(m, uint8_t, buf_size);
- if (BROTLI_IS_OOM(m)) return BROTLI_FALSE;
- command_buf = tmp_command_buf;
- literal_buf = tmp_literal_buf;
- }
- }
-
- while (BROTLI_TRUE) {
- if (InjectFlushOrPushOutput(s, available_out, next_out, total_out)) {
- continue;
- }
-
- /* Compress block only when internal output buffer is empty, stream is not
- finished, there is no pending flush request, and there is either
- additional input or pending operation. */
- if (s->available_out_ == 0 &&
- s->stream_state_ == BROTLI_STREAM_PROCESSING &&
- (*available_in != 0 || op != BROTLI_OPERATION_PROCESS)) {
- size_t block_size = BROTLI_MIN(size_t, block_size_limit, *available_in);
- BROTLI_BOOL is_last =
- (*available_in == block_size) && (op == BROTLI_OPERATION_FINISH);
- BROTLI_BOOL force_flush =
- (*available_in == block_size) && (op == BROTLI_OPERATION_FLUSH);
- size_t max_out_size = 2 * block_size + 503;
- BROTLI_BOOL inplace = BROTLI_TRUE;
- uint8_t* storage = NULL;
- size_t storage_ix = s->last_bytes_bits_;
- size_t table_size;
- int* table;
-
- if (force_flush && block_size == 0) {
- s->stream_state_ = BROTLI_STREAM_FLUSH_REQUESTED;
- continue;
- }
- if (max_out_size <= *available_out) {
- storage = *next_out;
- } else {
- inplace = BROTLI_FALSE;
- storage = GetBrotliStorage(s, max_out_size);
- if (BROTLI_IS_OOM(m)) return BROTLI_FALSE;
- }
- storage[0] = (uint8_t)s->last_bytes_;
- storage[1] = (uint8_t)(s->last_bytes_ >> 8);
- table = GetHashTable(s, s->params.quality, block_size, &table_size);
- if (BROTLI_IS_OOM(m)) return BROTLI_FALSE;
-
- if (s->params.quality == FAST_ONE_PASS_COMPRESSION_QUALITY) {
- BrotliCompressFragmentFast(m, *next_in, block_size, is_last, table,
- table_size, s->cmd_depths_, s->cmd_bits_, &s->cmd_code_numbits_,
- s->cmd_code_, &storage_ix, storage);
- if (BROTLI_IS_OOM(m)) return BROTLI_FALSE;
- } else {
- BrotliCompressFragmentTwoPass(m, *next_in, block_size, is_last,
- command_buf, literal_buf, table, table_size,
- &storage_ix, storage);
- if (BROTLI_IS_OOM(m)) return BROTLI_FALSE;
- }
- *next_in += block_size;
- *available_in -= block_size;
- if (inplace) {
- size_t out_bytes = storage_ix >> 3;
- BROTLI_DCHECK(out_bytes <= *available_out);
- BROTLI_DCHECK((storage_ix & 7) == 0 || out_bytes < *available_out);
- *next_out += out_bytes;
- *available_out -= out_bytes;
- s->total_out_ += out_bytes;
- if (total_out) *total_out = s->total_out_;
- } else {
- size_t out_bytes = storage_ix >> 3;
- s->next_out_ = storage;
- s->available_out_ = out_bytes;
- }
- s->last_bytes_ = (uint16_t)(storage[storage_ix >> 3]);
- s->last_bytes_bits_ = storage_ix & 7u;
-
- if (force_flush) s->stream_state_ = BROTLI_STREAM_FLUSH_REQUESTED;
- if (is_last) s->stream_state_ = BROTLI_STREAM_FINISHED;
- continue;
- }
- break;
- }
- BROTLI_FREE(m, tmp_command_buf);
- BROTLI_FREE(m, tmp_literal_buf);
- CheckFlushComplete(s);
- return BROTLI_TRUE;
-}
-
-static BROTLI_BOOL ProcessMetadata(
- BrotliEncoderState* s, size_t* available_in, const uint8_t** next_in,
- size_t* available_out, uint8_t** next_out, size_t* total_out) {
- if (*available_in > (1u << 24)) return BROTLI_FALSE;
- /* Switch to metadata block workflow, if required. */
- if (s->stream_state_ == BROTLI_STREAM_PROCESSING) {
- s->remaining_metadata_bytes_ = (uint32_t)*available_in;
- s->stream_state_ = BROTLI_STREAM_METADATA_HEAD;
- }
- if (s->stream_state_ != BROTLI_STREAM_METADATA_HEAD &&
- s->stream_state_ != BROTLI_STREAM_METADATA_BODY) {
- return BROTLI_FALSE;
- }
-
- while (BROTLI_TRUE) {
- if (InjectFlushOrPushOutput(s, available_out, next_out, total_out)) {
- continue;
- }
- if (s->available_out_ != 0) break;
-
- if (s->input_pos_ != s->last_flush_pos_) {
- BROTLI_BOOL result = EncodeData(s, BROTLI_FALSE, BROTLI_TRUE,
- &s->available_out_, &s->next_out_);
- if (!result) return BROTLI_FALSE;
- continue;
- }
-
- if (s->stream_state_ == BROTLI_STREAM_METADATA_HEAD) {
- s->next_out_ = s->tiny_buf_.u8;
- s->available_out_ =
- WriteMetadataHeader(s, s->remaining_metadata_bytes_, s->next_out_);
- s->stream_state_ = BROTLI_STREAM_METADATA_BODY;
- continue;
- } else {
- /* Exit workflow only when there is no more input and no more output.
- Otherwise client may continue producing empty metadata blocks. */
- if (s->remaining_metadata_bytes_ == 0) {
- s->remaining_metadata_bytes_ = BROTLI_UINT32_MAX;
- s->stream_state_ = BROTLI_STREAM_PROCESSING;
- break;
- }
- if (*available_out) {
- /* Directly copy input to output. */
- uint32_t copy = (uint32_t)BROTLI_MIN(
- size_t, s->remaining_metadata_bytes_, *available_out);
- memcpy(*next_out, *next_in, copy);
- *next_in += copy;
- *available_in -= copy;
- s->remaining_metadata_bytes_ -= copy;
- *next_out += copy;
- *available_out -= copy;
- } else {
- /* This guarantees progress in "TakeOutput" workflow. */
- uint32_t copy = BROTLI_MIN(uint32_t, s->remaining_metadata_bytes_, 16);
- s->next_out_ = s->tiny_buf_.u8;
- memcpy(s->next_out_, *next_in, copy);
- *next_in += copy;
- *available_in -= copy;
- s->remaining_metadata_bytes_ -= copy;
- s->available_out_ = copy;
- }
- continue;
- }
- }
-
- return BROTLI_TRUE;
-}
-
-static void UpdateSizeHint(BrotliEncoderState* s, size_t available_in) {
- if (s->params.size_hint == 0) {
- uint64_t delta = UnprocessedInputSize(s);
- uint64_t tail = available_in;
- uint32_t limit = 1u << 30;
- uint32_t total;
- if ((delta >= limit) || (tail >= limit) || ((delta + tail) >= limit)) {
- total = limit;
- } else {
- total = (uint32_t)(delta + tail);
- }
- s->params.size_hint = total;
- }
-}
-
-BROTLI_BOOL BrotliEncoderCompressStream(
- BrotliEncoderState* s, BrotliEncoderOperation op, size_t* available_in,
- const uint8_t** next_in, size_t* available_out,uint8_t** next_out,
- size_t* total_out) {
- if (!EnsureInitialized(s)) return BROTLI_FALSE;
-
- /* Unfinished metadata block; check requirements. */
- if (s->remaining_metadata_bytes_ != BROTLI_UINT32_MAX) {
- if (*available_in != s->remaining_metadata_bytes_) return BROTLI_FALSE;
- if (op != BROTLI_OPERATION_EMIT_METADATA) return BROTLI_FALSE;
- }
-
- if (op == BROTLI_OPERATION_EMIT_METADATA) {
- UpdateSizeHint(s, 0); /* First data metablock might be emitted here. */
- return ProcessMetadata(
- s, available_in, next_in, available_out, next_out, total_out);
- }
-
- if (s->stream_state_ == BROTLI_STREAM_METADATA_HEAD ||
- s->stream_state_ == BROTLI_STREAM_METADATA_BODY) {
- return BROTLI_FALSE;
- }
-
- if (s->stream_state_ != BROTLI_STREAM_PROCESSING && *available_in != 0) {
- return BROTLI_FALSE;
- }
- if (s->params.quality == FAST_ONE_PASS_COMPRESSION_QUALITY ||
- s->params.quality == FAST_TWO_PASS_COMPRESSION_QUALITY) {
- return BrotliEncoderCompressStreamFast(s, op, available_in, next_in,
- available_out, next_out, total_out);
- }
- while (BROTLI_TRUE) {
- size_t remaining_block_size = RemainingInputBlockSize(s);
-
- if (remaining_block_size != 0 && *available_in != 0) {
- size_t copy_input_size =
- BROTLI_MIN(size_t, remaining_block_size, *available_in);
- CopyInputToRingBuffer(s, copy_input_size, *next_in);
- *next_in += copy_input_size;
- *available_in -= copy_input_size;
- continue;
- }
-
- if (InjectFlushOrPushOutput(s, available_out, next_out, total_out)) {
- continue;
- }
-
- /* Compress data only when internal output buffer is empty, stream is not
- finished and there is no pending flush request. */
- if (s->available_out_ == 0 &&
- s->stream_state_ == BROTLI_STREAM_PROCESSING) {
- if (remaining_block_size == 0 || op != BROTLI_OPERATION_PROCESS) {
- BROTLI_BOOL is_last = TO_BROTLI_BOOL(
- (*available_in == 0) && op == BROTLI_OPERATION_FINISH);
- BROTLI_BOOL force_flush = TO_BROTLI_BOOL(
- (*available_in == 0) && op == BROTLI_OPERATION_FLUSH);
- BROTLI_BOOL result;
- UpdateSizeHint(s, *available_in);
- result = EncodeData(s, is_last, force_flush,
- &s->available_out_, &s->next_out_);
- if (!result) return BROTLI_FALSE;
- if (force_flush) s->stream_state_ = BROTLI_STREAM_FLUSH_REQUESTED;
- if (is_last) s->stream_state_ = BROTLI_STREAM_FINISHED;
- continue;
- }
- }
- break;
- }
- CheckFlushComplete(s);
- return BROTLI_TRUE;
-}
-
-BROTLI_BOOL BrotliEncoderIsFinished(BrotliEncoderState* s) {
- return TO_BROTLI_BOOL(s->stream_state_ == BROTLI_STREAM_FINISHED &&
- !BrotliEncoderHasMoreOutput(s));
-}
-
-BROTLI_BOOL BrotliEncoderHasMoreOutput(BrotliEncoderState* s) {
- return TO_BROTLI_BOOL(s->available_out_ != 0);
-}
-
-const uint8_t* BrotliEncoderTakeOutput(BrotliEncoderState* s, size_t* size) {
- size_t consumed_size = s->available_out_;
- uint8_t* result = s->next_out_;
- if (*size) {
- consumed_size = BROTLI_MIN(size_t, *size, s->available_out_);
- }
- if (consumed_size) {
- s->next_out_ += consumed_size;
- s->available_out_ -= consumed_size;
- s->total_out_ += consumed_size;
- CheckFlushComplete(s);
- *size = consumed_size;
- } else {
- *size = 0;
- result = 0;
- }
- return result;
-}
-
-uint32_t BrotliEncoderVersion(void) {
- return BROTLI_VERSION;
-}
-
-#if defined(__cplusplus) || defined(c_plusplus)
-} /* extern "C" */
-#endif
diff --git a/BaseTools/Source/C/BrotliCompress/enc/encoder_dict.c b/BaseTools/Source/C/BrotliCompress/enc/encoder_dict.c
deleted file mode 100644
index 956d50c0b578..000000000000
--- a/BaseTools/Source/C/BrotliCompress/enc/encoder_dict.c
+++ /dev/null
@@ -1,32 +0,0 @@
-/* Copyright 2017 Google Inc. All Rights Reserved.
-
- Distributed under MIT license.
- See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
-*/
-
-#include "./encoder_dict.h"
-
-#include "../common/dictionary.h"
-#include "../common/transform.h"
-#include "./dictionary_hash.h"
-#include "./hash.h"
-
-#if defined(__cplusplus) || defined(c_plusplus)
-extern "C" {
-#endif
-
-void BrotliInitEncoderDictionary(BrotliEncoderDictionary* dict) {
- dict->words = BrotliGetDictionary();
-
- dict->hash_table = kStaticDictionaryHash;
- dict->buckets = kStaticDictionaryBuckets;
- dict->dict_words = kStaticDictionaryWords;
-
- dict->cutoffTransformsCount = kCutoffTransformsCount;
- dict->cutoffTransforms = kCutoffTransforms;
-
-}
-
-#if defined(__cplusplus) || defined(c_plusplus)
-} /* extern "C" */
-#endif
diff --git a/BaseTools/Source/C/BrotliCompress/enc/entropy_encode.c b/BaseTools/Source/C/BrotliCompress/enc/entropy_encode.c
deleted file mode 100644
index e3f0d2edaabe..000000000000
--- a/BaseTools/Source/C/BrotliCompress/enc/entropy_encode.c
+++ /dev/null
@@ -1,501 +0,0 @@
-/* Copyright 2010 Google Inc. All Rights Reserved.
-
- Distributed under MIT license.
- See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
-*/
-
-/* Entropy encoding (Huffman) utilities. */
-
-#include "./entropy_encode.h"
-
-#include <string.h> /* memset */
-
-#include "../common/constants.h"
-#include "../common/platform.h"
-#include <brotli/types.h>
-
-#if defined(__cplusplus) || defined(c_plusplus)
-extern "C" {
-#endif
-
-BROTLI_BOOL BrotliSetDepth(
- int p0, HuffmanTree* pool, uint8_t* depth, int max_depth) {
- int stack[16];
- int level = 0;
- int p = p0;
- BROTLI_DCHECK(max_depth <= 15);
- stack[0] = -1;
- while (BROTLI_TRUE) {
- if (pool[p].index_left_ >= 0) {
- level++;
- if (level > max_depth) return BROTLI_FALSE;
- stack[level] = pool[p].index_right_or_value_;
- p = pool[p].index_left_;
- continue;
- } else {
- depth[pool[p].index_right_or_value_] = (uint8_t)level;
- }
- while (level >= 0 && stack[level] == -1) level--;
- if (level < 0) return BROTLI_TRUE;
- p = stack[level];
- stack[level] = -1;
- }
-}
-
-/* Sort the root nodes, least popular first. */
-static BROTLI_INLINE BROTLI_BOOL SortHuffmanTree(
- const HuffmanTree* v0, const HuffmanTree* v1) {
- if (v0->total_count_ != v1->total_count_) {
- return TO_BROTLI_BOOL(v0->total_count_ < v1->total_count_);
- }
- return TO_BROTLI_BOOL(v0->index_right_or_value_ > v1->index_right_or_value_);
-}
-
-/* This function will create a Huffman tree.
-
- The catch here is that the tree cannot be arbitrarily deep.
- Brotli specifies a maximum depth of 15 bits for "code trees"
- and 7 bits for "code length code trees."
-
- count_limit is the value that is to be faked as the minimum value
- and this minimum value is raised until the tree matches the
- maximum length requirement.
-
- This algorithm is not of excellent performance for very long data blocks,
- especially when population counts are longer than 2**tree_limit, but
- we are not planning to use this with extremely long blocks.
-
- See http://en.wikipedia.org/wiki/Huffman_coding */
-void BrotliCreateHuffmanTree(const uint32_t* data,
- const size_t length,
- const int tree_limit,
- HuffmanTree* tree,
- uint8_t* depth) {
- uint32_t count_limit;
- HuffmanTree sentinel;
- InitHuffmanTree(&sentinel, BROTLI_UINT32_MAX, -1, -1);
- /* For block sizes below 64 kB, we never need to do a second iteration
- of this loop. Probably all of our block sizes will be smaller than
- that, so this loop is mostly of academic interest. If we actually
- would need this, we would be better off with the Katajainen algorithm. */
- for (count_limit = 1; ; count_limit *= 2) {
- size_t n = 0;
- size_t i;
- size_t j;
- size_t k;
- for (i = length; i != 0;) {
- --i;
- if (data[i]) {
- const uint32_t count = BROTLI_MAX(uint32_t, data[i], count_limit);
- InitHuffmanTree(&tree[n++], count, -1, (int16_t)i);
- }
- }
-
- if (n == 1) {
- depth[tree[0].index_right_or_value_] = 1; /* Only one element. */
- break;
- }
-
- SortHuffmanTreeItems(tree, n, SortHuffmanTree);
-
- /* The nodes are:
- [0, n): the sorted leaf nodes that we start with.
- [n]: we add a sentinel here.
- [n + 1, 2n): new parent nodes are added here, starting from
- (n+1). These are naturally in ascending order.
- [2n]: we add a sentinel at the end as well.
- There will be (2n+1) elements at the end. */
- tree[n] = sentinel;
- tree[n + 1] = sentinel;
-
- i = 0; /* Points to the next leaf node. */
- j = n + 1; /* Points to the next non-leaf node. */
- for (k = n - 1; k != 0; --k) {
- size_t left, right;
- if (tree[i].total_count_ <= tree[j].total_count_) {
- left = i;
- ++i;
- } else {
- left = j;
- ++j;
- }
- if (tree[i].total_count_ <= tree[j].total_count_) {
- right = i;
- ++i;
- } else {
- right = j;
- ++j;
- }
-
- {
- /* The sentinel node becomes the parent node. */
- size_t j_end = 2 * n - k;
- tree[j_end].total_count_ =
- tree[left].total_count_ + tree[right].total_count_;
- tree[j_end].index_left_ = (int16_t)left;
- tree[j_end].index_right_or_value_ = (int16_t)right;
-
- /* Add back the last sentinel node. */
- tree[j_end + 1] = sentinel;
- }
- }
- if (BrotliSetDepth((int)(2 * n - 1), &tree[0], depth, tree_limit)) {
- /* We need to pack the Huffman tree in tree_limit bits. If this was not
- successful, add fake entities to the lowest values and retry. */
- break;
- }
- }
-}
-
-static void Reverse(uint8_t* v, size_t start, size_t end) {
- --end;
- while (start < end) {
- uint8_t tmp = v[start];
- v[start] = v[end];
- v[end] = tmp;
- ++start;
- --end;
- }
-}
-
-static void BrotliWriteHuffmanTreeRepetitions(
- const uint8_t previous_value,
- const uint8_t value,
- size_t repetitions,
- size_t* tree_size,
- uint8_t* tree,
- uint8_t* extra_bits_data) {
- BROTLI_DCHECK(repetitions > 0);
- if (previous_value != value) {
- tree[*tree_size] = value;
- extra_bits_data[*tree_size] = 0;
- ++(*tree_size);
- --repetitions;
- }
- if (repetitions == 7) {
- tree[*tree_size] = value;
- extra_bits_data[*tree_size] = 0;
- ++(*tree_size);
- --repetitions;
- }
- if (repetitions < 3) {
- size_t i;
- for (i = 0; i < repetitions; ++i) {
- tree[*tree_size] = value;
- extra_bits_data[*tree_size] = 0;
- ++(*tree_size);
- }
- } else {
- size_t start = *tree_size;
- repetitions -= 3;
- while (BROTLI_TRUE) {
- tree[*tree_size] = BROTLI_REPEAT_PREVIOUS_CODE_LENGTH;
- extra_bits_data[*tree_size] = repetitions & 0x3;
- ++(*tree_size);
- repetitions >>= 2;
- if (repetitions == 0) {
- break;
- }
- --repetitions;
- }
- Reverse(tree, start, *tree_size);
- Reverse(extra_bits_data, start, *tree_size);
- }
-}
-
-static void BrotliWriteHuffmanTreeRepetitionsZeros(
- size_t repetitions,
- size_t* tree_size,
- uint8_t* tree,
- uint8_t* extra_bits_data) {
- if (repetitions == 11) {
- tree[*tree_size] = 0;
- extra_bits_data[*tree_size] = 0;
- ++(*tree_size);
- --repetitions;
- }
- if (repetitions < 3) {
- size_t i;
- for (i = 0; i < repetitions; ++i) {
- tree[*tree_size] = 0;
- extra_bits_data[*tree_size] = 0;
- ++(*tree_size);
- }
- } else {
- size_t start = *tree_size;
- repetitions -= 3;
- while (BROTLI_TRUE) {
- tree[*tree_size] = BROTLI_REPEAT_ZERO_CODE_LENGTH;
- extra_bits_data[*tree_size] = repetitions & 0x7;
- ++(*tree_size);
- repetitions >>= 3;
- if (repetitions == 0) {
- break;
- }
- --repetitions;
- }
- Reverse(tree, start, *tree_size);
- Reverse(extra_bits_data, start, *tree_size);
- }
-}
-
-void BrotliOptimizeHuffmanCountsForRle(size_t length, uint32_t* counts,
- uint8_t* good_for_rle) {
- size_t nonzero_count = 0;
- size_t stride;
- size_t limit;
- size_t sum;
- const size_t streak_limit = 1240;
- /* Let's make the Huffman code more compatible with RLE encoding. */
- size_t i;
- for (i = 0; i < length; i++) {
- if (counts[i]) {
- ++nonzero_count;
- }
- }
- if (nonzero_count < 16) {
- return;
- }
- while (length != 0 && counts[length - 1] == 0) {
- --length;
- }
- if (length == 0) {
- return; /* All zeros. */
- }
- /* Now counts[0..length - 1] does not have trailing zeros. */
- {
- size_t nonzeros = 0;
- uint32_t smallest_nonzero = 1 << 30;
- for (i = 0; i < length; ++i) {
- if (counts[i] != 0) {
- ++nonzeros;
- if (smallest_nonzero > counts[i]) {
- smallest_nonzero = counts[i];
- }
- }
- }
- if (nonzeros < 5) {
- /* Small histogram will model it well. */
- return;
- }
- if (smallest_nonzero < 4) {
- size_t zeros = length - nonzeros;
- if (zeros < 6) {
- for (i = 1; i < length - 1; ++i) {
- if (counts[i - 1] != 0 && counts[i] == 0 && counts[i + 1] != 0) {
- counts[i] = 1;
- }
- }
- }
- }
- if (nonzeros < 28) {
- return;
- }
- }
- /* 2) Let's mark all population counts that already can be encoded
- with an RLE code. */
- memset(good_for_rle, 0, length);
- {
- /* Let's not spoil any of the existing good RLE codes.
- Mark any seq of 0's that is longer as 5 as a good_for_rle.
- Mark any seq of non-0's that is longer as 7 as a good_for_rle. */
- uint32_t symbol = counts[0];
- size_t step = 0;
- for (i = 0; i <= length; ++i) {
- if (i == length || counts[i] != symbol) {
- if ((symbol == 0 && step >= 5) ||
- (symbol != 0 && step >= 7)) {
- size_t k;
- for (k = 0; k < step; ++k) {
- good_for_rle[i - k - 1] = 1;
- }
- }
- step = 1;
- if (i != length) {
- symbol = counts[i];
- }
- } else {
- ++step;
- }
- }
- }
- /* 3) Let's replace those population counts that lead to more RLE codes.
- Math here is in 24.8 fixed point representation. */
- stride = 0;
- limit = 256 * (counts[0] + counts[1] + counts[2]) / 3 + 420;
- sum = 0;
- for (i = 0; i <= length; ++i) {
- if (i == length || good_for_rle[i] ||
- (i != 0 && good_for_rle[i - 1]) ||
- (256 * counts[i] - limit + streak_limit) >= 2 * streak_limit) {
- if (stride >= 4 || (stride >= 3 && sum == 0)) {
- size_t k;
- /* The stride must end, collapse what we have, if we have enough (4). */
- size_t count = (sum + stride / 2) / stride;
- if (count == 0) {
- count = 1;
- }
- if (sum == 0) {
- /* Don't make an all zeros stride to be upgraded to ones. */
- count = 0;
- }
- for (k = 0; k < stride; ++k) {
- /* We don't want to change value at counts[i],
- that is already belonging to the next stride. Thus - 1. */
- counts[i - k - 1] = (uint32_t)count;
- }
- }
- stride = 0;
- sum = 0;
- if (i < length - 2) {
- /* All interesting strides have a count of at least 4, */
- /* at least when non-zeros. */
- limit = 256 * (counts[i] + counts[i + 1] + counts[i + 2]) / 3 + 420;
- } else if (i < length) {
- limit = 256 * counts[i];
- } else {
- limit = 0;
- }
- }
- ++stride;
- if (i != length) {
- sum += counts[i];
- if (stride >= 4) {
- limit = (256 * sum + stride / 2) / stride;
- }
- if (stride == 4) {
- limit += 120;
- }
- }
- }
-}
-
-static void DecideOverRleUse(const uint8_t* depth, const size_t length,
- BROTLI_BOOL* use_rle_for_non_zero,
- BROTLI_BOOL* use_rle_for_zero) {
- size_t total_reps_zero = 0;
- size_t total_reps_non_zero = 0;
- size_t count_reps_zero = 1;
- size_t count_reps_non_zero = 1;
- size_t i;
- for (i = 0; i < length;) {
- const uint8_t value = depth[i];
- size_t reps = 1;
- size_t k;
- for (k = i + 1; k < length && depth[k] == value; ++k) {
- ++reps;
- }
- if (reps >= 3 && value == 0) {
- total_reps_zero += reps;
- ++count_reps_zero;
- }
- if (reps >= 4 && value != 0) {
- total_reps_non_zero += reps;
- ++count_reps_non_zero;
- }
- i += reps;
- }
- *use_rle_for_non_zero =
- TO_BROTLI_BOOL(total_reps_non_zero > count_reps_non_zero * 2);
- *use_rle_for_zero = TO_BROTLI_BOOL(total_reps_zero > count_reps_zero * 2);
-}
-
-void BrotliWriteHuffmanTree(const uint8_t* depth,
- size_t length,
- size_t* tree_size,
- uint8_t* tree,
- uint8_t* extra_bits_data) {
- uint8_t previous_value = BROTLI_INITIAL_REPEATED_CODE_LENGTH;
- size_t i;
- BROTLI_BOOL use_rle_for_non_zero = BROTLI_FALSE;
- BROTLI_BOOL use_rle_for_zero = BROTLI_FALSE;
-
- /* Throw away trailing zeros. */
- size_t new_length = length;
- for (i = 0; i < length; ++i) {
- if (depth[length - i - 1] == 0) {
- --new_length;
- } else {
- break;
- }
- }
-
- /* First gather statistics on if it is a good idea to do RLE. */
- if (length > 50) {
- /* Find RLE coding for longer codes.
- Shorter codes seem not to benefit from RLE. */
- DecideOverRleUse(depth, new_length,
- &use_rle_for_non_zero, &use_rle_for_zero);
- }
-
- /* Actual RLE coding. */
- for (i = 0; i < new_length;) {
- const uint8_t value = depth[i];
- size_t reps = 1;
- if ((value != 0 && use_rle_for_non_zero) ||
- (value == 0 && use_rle_for_zero)) {
- size_t k;
- for (k = i + 1; k < new_length && depth[k] == value; ++k) {
- ++reps;
- }
- }
- if (value == 0) {
- BrotliWriteHuffmanTreeRepetitionsZeros(
- reps, tree_size, tree, extra_bits_data);
- } else {
- BrotliWriteHuffmanTreeRepetitions(previous_value,
- value, reps, tree_size,
- tree, extra_bits_data);
- previous_value = value;
- }
- i += reps;
- }
-}
-
-static uint16_t BrotliReverseBits(size_t num_bits, uint16_t bits) {
- static const size_t kLut[16] = { /* Pre-reversed 4-bit values. */
- 0x00, 0x08, 0x04, 0x0C, 0x02, 0x0A, 0x06, 0x0E,
- 0x01, 0x09, 0x05, 0x0D, 0x03, 0x0B, 0x07, 0x0F
- };
- size_t retval = kLut[bits & 0x0F];
- size_t i;
- for (i = 4; i < num_bits; i += 4) {
- retval <<= 4;
- bits = (uint16_t)(bits >> 4);
- retval |= kLut[bits & 0x0F];
- }
- retval >>= ((0 - num_bits) & 0x03);
- return (uint16_t)retval;
-}
-
-/* 0..15 are values for bits */
-#define MAX_HUFFMAN_BITS 16
-
-void BrotliConvertBitDepthsToSymbols(const uint8_t* depth,
- size_t len,
- uint16_t* bits) {
- /* In Brotli, all bit depths are [1..15]
- 0 bit depth means that the symbol does not exist. */
- uint16_t bl_count[MAX_HUFFMAN_BITS] = { 0 };
- uint16_t next_code[MAX_HUFFMAN_BITS];
- size_t i;
- int code = 0;
- for (i = 0; i < len; ++i) {
- ++bl_count[depth[i]];
- }
- bl_count[0] = 0;
- next_code[0] = 0;
- for (i = 1; i < MAX_HUFFMAN_BITS; ++i) {
- code = (code + bl_count[i - 1]) << 1;
- next_code[i] = (uint16_t)code;
- }
- for (i = 0; i < len; ++i) {
- if (depth[i]) {
- bits[i] = BrotliReverseBits(depth[i], next_code[depth[i]]++);
- }
- }
-}
-
-#if defined(__cplusplus) || defined(c_plusplus)
-} /* extern "C" */
-#endif
diff --git a/BaseTools/Source/C/BrotliCompress/enc/histogram.c b/BaseTools/Source/C/BrotliCompress/enc/histogram.c
deleted file mode 100644
index d3bfa3a79a80..000000000000
--- a/BaseTools/Source/C/BrotliCompress/enc/histogram.c
+++ /dev/null
@@ -1,100 +0,0 @@
-/* Copyright 2013 Google Inc. All Rights Reserved.
-
- Distributed under MIT license.
- See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
-*/
-
-/* Build per-context histograms of literals, commands and distance codes. */
-
-#include "./histogram.h"
-
-#include "../common/context.h"
-#include "./block_splitter.h"
-#include "./command.h"
-
-#if defined(__cplusplus) || defined(c_plusplus)
-extern "C" {
-#endif
-
-typedef struct BlockSplitIterator {
- const BlockSplit* split_; /* Not owned. */
- size_t idx_;
- size_t type_;
- size_t length_;
-} BlockSplitIterator;
-
-static void InitBlockSplitIterator(BlockSplitIterator* self,
- const BlockSplit* split) {
- self->split_ = split;
- self->idx_ = 0;
- self->type_ = 0;
- self->length_ = split->lengths ? split->lengths[0] : 0;
-}
-
-static void BlockSplitIteratorNext(BlockSplitIterator* self) {
- if (self->length_ == 0) {
- ++self->idx_;
- self->type_ = self->split_->types[self->idx_];
- self->length_ = self->split_->lengths[self->idx_];
- }
- --self->length_;
-}
-
-void BrotliBuildHistogramsWithContext(
- const Command* cmds, const size_t num_commands,
- const BlockSplit* literal_split, const BlockSplit* insert_and_copy_split,
- const BlockSplit* dist_split, const uint8_t* ringbuffer, size_t start_pos,
- size_t mask, uint8_t prev_byte, uint8_t prev_byte2,
- const ContextType* context_modes, HistogramLiteral* literal_histograms,
- HistogramCommand* insert_and_copy_histograms,
- HistogramDistance* copy_dist_histograms) {
- size_t pos = start_pos;
- BlockSplitIterator literal_it;
- BlockSplitIterator insert_and_copy_it;
- BlockSplitIterator dist_it;
- size_t i;
-
- InitBlockSplitIterator(&literal_it, literal_split);
- InitBlockSplitIterator(&insert_and_copy_it, insert_and_copy_split);
- InitBlockSplitIterator(&dist_it, dist_split);
- for (i = 0; i < num_commands; ++i) {
- const Command* cmd = &cmds[i];
- size_t j;
- BlockSplitIteratorNext(&insert_and_copy_it);
- HistogramAddCommand(&insert_and_copy_histograms[insert_and_copy_it.type_],
- cmd->cmd_prefix_);
- /* TODO: unwrap iterator blocks. */
- for (j = cmd->insert_len_; j != 0; --j) {
- size_t context;
- BlockSplitIteratorNext(&literal_it);
- context = literal_it.type_;
- if (context_modes) {
- ContextLut lut = BROTLI_CONTEXT_LUT(context_modes[context]);
- context = (context << BROTLI_LITERAL_CONTEXT_BITS) +
- BROTLI_CONTEXT(prev_byte, prev_byte2, lut);
- }
- HistogramAddLiteral(&literal_histograms[context],
- ringbuffer[pos & mask]);
- prev_byte2 = prev_byte;
- prev_byte = ringbuffer[pos & mask];
- ++pos;
- }
- pos += CommandCopyLen(cmd);
- if (CommandCopyLen(cmd)) {
- prev_byte2 = ringbuffer[(pos - 2) & mask];
- prev_byte = ringbuffer[(pos - 1) & mask];
- if (cmd->cmd_prefix_ >= 128) {
- size_t context;
- BlockSplitIteratorNext(&dist_it);
- context = (dist_it.type_ << BROTLI_DISTANCE_CONTEXT_BITS) +
- CommandDistanceContext(cmd);
- HistogramAddDistance(©_dist_histograms[context],
- cmd->dist_prefix_ & 0x3FF);
- }
- }
- }
-}
-
-#if defined(__cplusplus) || defined(c_plusplus)
-} /* extern "C" */
-#endif
diff --git a/BaseTools/Source/C/BrotliCompress/enc/literal_cost.c b/BaseTools/Source/C/BrotliCompress/enc/literal_cost.c
deleted file mode 100644
index de780dcc99b0..000000000000
--- a/BaseTools/Source/C/BrotliCompress/enc/literal_cost.c
+++ /dev/null
@@ -1,175 +0,0 @@
-/* Copyright 2013 Google Inc. All Rights Reserved.
-
- Distributed under MIT license.
- See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
-*/
-
-/* Literal cost model to allow backward reference replacement to be efficient.
-*/
-
-#include "./literal_cost.h"
-
-#include "../common/platform.h"
-#include <brotli/types.h>
-#include "./fast_log.h"
-#include "./utf8_util.h"
-
-#if defined(__cplusplus) || defined(c_plusplus)
-extern "C" {
-#endif
-
-static size_t UTF8Position(size_t last, size_t c, size_t clamp) {
- if (c < 128) {
- return 0; /* Next one is the 'Byte 1' again. */
- } else if (c >= 192) { /* Next one is the 'Byte 2' of utf-8 encoding. */
- return BROTLI_MIN(size_t, 1, clamp);
- } else {
- /* Let's decide over the last byte if this ends the sequence. */
- if (last < 0xE0) {
- return 0; /* Completed two or three byte coding. */
- } else { /* Next one is the 'Byte 3' of utf-8 encoding. */
- return BROTLI_MIN(size_t, 2, clamp);
- }
- }
-}
-
-static size_t DecideMultiByteStatsLevel(size_t pos, size_t len, size_t mask,
- const uint8_t* data) {
- size_t counts[3] = { 0 };
- size_t max_utf8 = 1; /* should be 2, but 1 compresses better. */
- size_t last_c = 0;
- size_t i;
- for (i = 0; i < len; ++i) {
- size_t c = data[(pos + i) & mask];
- ++counts[UTF8Position(last_c, c, 2)];
- last_c = c;
- }
- if (counts[2] < 500) {
- max_utf8 = 1;
- }
- if (counts[1] + counts[2] < 25) {
- max_utf8 = 0;
- }
- return max_utf8;
-}
-
-static void EstimateBitCostsForLiteralsUTF8(size_t pos, size_t len, size_t mask,
- const uint8_t* data, float* cost) {
- /* max_utf8 is 0 (normal ASCII single byte modeling),
- 1 (for 2-byte UTF-8 modeling), or 2 (for 3-byte UTF-8 modeling). */
- const size_t max_utf8 = DecideMultiByteStatsLevel(pos, len, mask, data);
- size_t histogram[3][256] = { { 0 } };
- size_t window_half = 495;
- size_t in_window = BROTLI_MIN(size_t, window_half, len);
- size_t in_window_utf8[3] = { 0 };
-
- size_t i;
- { /* Bootstrap histograms. */
- size_t last_c = 0;
- size_t utf8_pos = 0;
- for (i = 0; i < in_window; ++i) {
- size_t c = data[(pos + i) & mask];
- ++histogram[utf8_pos][c];
- ++in_window_utf8[utf8_pos];
- utf8_pos = UTF8Position(last_c, c, max_utf8);
- last_c = c;
- }
- }
-
- /* Compute bit costs with sliding window. */
- for (i = 0; i < len; ++i) {
- if (i >= window_half) {
- /* Remove a byte in the past. */
- size_t c =
- i < window_half + 1 ? 0 : data[(pos + i - window_half - 1) & mask];
- size_t last_c =
- i < window_half + 2 ? 0 : data[(pos + i - window_half - 2) & mask];
- size_t utf8_pos2 = UTF8Position(last_c, c, max_utf8);
- --histogram[utf8_pos2][data[(pos + i - window_half) & mask]];
- --in_window_utf8[utf8_pos2];
- }
- if (i + window_half < len) {
- /* Add a byte in the future. */
- size_t c = data[(pos + i + window_half - 1) & mask];
- size_t last_c = data[(pos + i + window_half - 2) & mask];
- size_t utf8_pos2 = UTF8Position(last_c, c, max_utf8);
- ++histogram[utf8_pos2][data[(pos + i + window_half) & mask]];
- ++in_window_utf8[utf8_pos2];
- }
- {
- size_t c = i < 1 ? 0 : data[(pos + i - 1) & mask];
- size_t last_c = i < 2 ? 0 : data[(pos + i - 2) & mask];
- size_t utf8_pos = UTF8Position(last_c, c, max_utf8);
- size_t masked_pos = (pos + i) & mask;
- size_t histo = histogram[utf8_pos][data[masked_pos]];
- double lit_cost;
- if (histo == 0) {
- histo = 1;
- }
- lit_cost = FastLog2(in_window_utf8[utf8_pos]) - FastLog2(histo);
- lit_cost += 0.02905;
- if (lit_cost < 1.0) {
- lit_cost *= 0.5;
- lit_cost += 0.5;
- }
- /* Make the first bytes more expensive -- seems to help, not sure why.
- Perhaps because the entropy source is changing its properties
- rapidly in the beginning of the file, perhaps because the beginning
- of the data is a statistical "anomaly". */
- if (i < 2000) {
- lit_cost += 0.7 - ((double)(2000 - i) / 2000.0 * 0.35);
- }
- cost[i] = (float)lit_cost;
- }
- }
-}
-
-void BrotliEstimateBitCostsForLiterals(size_t pos, size_t len, size_t mask,
- const uint8_t* data, float* cost) {
- if (BrotliIsMostlyUTF8(data, pos, mask, len, kMinUTF8Ratio)) {
- EstimateBitCostsForLiteralsUTF8(pos, len, mask, data, cost);
- return;
- } else {
- size_t histogram[256] = { 0 };
- size_t window_half = 2000;
- size_t in_window = BROTLI_MIN(size_t, window_half, len);
-
- /* Bootstrap histogram. */
- size_t i;
- for (i = 0; i < in_window; ++i) {
- ++histogram[data[(pos + i) & mask]];
- }
-
- /* Compute bit costs with sliding window. */
- for (i = 0; i < len; ++i) {
- size_t histo;
- if (i >= window_half) {
- /* Remove a byte in the past. */
- --histogram[data[(pos + i - window_half) & mask]];
- --in_window;
- }
- if (i + window_half < len) {
- /* Add a byte in the future. */
- ++histogram[data[(pos + i + window_half) & mask]];
- ++in_window;
- }
- histo = histogram[data[(pos + i) & mask]];
- if (histo == 0) {
- histo = 1;
- }
- {
- double lit_cost = FastLog2(in_window) - FastLog2(histo);
- lit_cost += 0.029;
- if (lit_cost < 1.0) {
- lit_cost *= 0.5;
- lit_cost += 0.5;
- }
- cost[i] = (float)lit_cost;
- }
- }
- }
-}
-
-#if defined(__cplusplus) || defined(c_plusplus)
-} /* extern "C" */
-#endif
diff --git a/BaseTools/Source/C/BrotliCompress/enc/memory.c b/BaseTools/Source/C/BrotliCompress/enc/memory.c
deleted file mode 100644
index f0b2f13f6472..000000000000
--- a/BaseTools/Source/C/BrotliCompress/enc/memory.c
+++ /dev/null
@@ -1,170 +0,0 @@
-/* Copyright 2015 Google Inc. All Rights Reserved.
-
- Distributed under MIT license.
- See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
-*/
-
-/* Algorithms for distributing the literals and commands of a metablock between
- block types and contexts. */
-
-#include "./memory.h"
-
-#include <stdlib.h> /* exit, free, malloc */
-#include <string.h> /* memcpy */
-
-#include "../common/platform.h"
-#include <brotli/types.h>
-
-#if defined(__cplusplus) || defined(c_plusplus)
-extern "C" {
-#endif
-
-#define MAX_PERM_ALLOCATED 128
-#define MAX_NEW_ALLOCATED 64
-#define MAX_NEW_FREED 64
-
-#define PERM_ALLOCATED_OFFSET 0
-#define NEW_ALLOCATED_OFFSET MAX_PERM_ALLOCATED
-#define NEW_FREED_OFFSET (MAX_PERM_ALLOCATED + MAX_NEW_ALLOCATED)
-
-void BrotliInitMemoryManager(
- MemoryManager* m, brotli_alloc_func alloc_func, brotli_free_func free_func,
- void* opaque) {
- if (!alloc_func) {
- m->alloc_func = BrotliDefaultAllocFunc;
- m->free_func = BrotliDefaultFreeFunc;
- m->opaque = 0;
- } else {
- m->alloc_func = alloc_func;
- m->free_func = free_func;
- m->opaque = opaque;
- }
-#if !defined(BROTLI_ENCODER_EXIT_ON_OOM)
- m->is_oom = BROTLI_FALSE;
- m->perm_allocated = 0;
- m->new_allocated = 0;
- m->new_freed = 0;
-#endif /* BROTLI_ENCODER_EXIT_ON_OOM */
-}
-
-#if defined(BROTLI_ENCODER_EXIT_ON_OOM)
-
-void* BrotliAllocate(MemoryManager* m, size_t n) {
- void* result = m->alloc_func(m->opaque, n);
- if (!result) exit(EXIT_FAILURE);
- return result;
-}
-
-void BrotliFree(MemoryManager* m, void* p) {
- m->free_func(m->opaque, p);
-}
-
-void BrotliWipeOutMemoryManager(MemoryManager* m) {
- BROTLI_UNUSED(m);
-}
-
-#else /* BROTLI_ENCODER_EXIT_ON_OOM */
-
-static void SortPointers(void** items, const size_t n) {
- /* Shell sort. */
- static const size_t gaps[] = {23, 10, 4, 1};
- int g = 0;
- for (; g < 4; ++g) {
- size_t gap = gaps[g];
- size_t i;
- for (i = gap; i < n; ++i) {
- size_t j = i;
- void* tmp = items[i];
- for (; j >= gap && tmp < items[j - gap]; j -= gap) {
- items[j] = items[j - gap];
- }
- items[j] = tmp;
- }
- }
-}
-
-static size_t Annihilate(void** a, size_t a_len, void** b, size_t b_len) {
- size_t a_read_index = 0;
- size_t b_read_index = 0;
- size_t a_write_index = 0;
- size_t b_write_index = 0;
- size_t annihilated = 0;
- while (a_read_index < a_len && b_read_index < b_len) {
- if (a[a_read_index] == b[b_read_index]) {
- a_read_index++;
- b_read_index++;
- annihilated++;
- } else if (a[a_read_index] < b[b_read_index]) {
- a[a_write_index++] = a[a_read_index++];
- } else {
- b[b_write_index++] = b[b_read_index++];
- }
- }
- while (a_read_index < a_len) a[a_write_index++] = a[a_read_index++];
- while (b_read_index < b_len) b[b_write_index++] = b[b_read_index++];
- return annihilated;
-}
-
-static void CollectGarbagePointers(MemoryManager* m) {
- size_t annihilated;
- SortPointers(m->pointers + NEW_ALLOCATED_OFFSET, m->new_allocated);
- SortPointers(m->pointers + NEW_FREED_OFFSET, m->new_freed);
- annihilated = Annihilate(
- m->pointers + NEW_ALLOCATED_OFFSET, m->new_allocated,
- m->pointers + NEW_FREED_OFFSET, m->new_freed);
- m->new_allocated -= annihilated;
- m->new_freed -= annihilated;
-
- if (m->new_freed != 0) {
- annihilated = Annihilate(
- m->pointers + PERM_ALLOCATED_OFFSET, m->perm_allocated,
- m->pointers + NEW_FREED_OFFSET, m->new_freed);
- m->perm_allocated -= annihilated;
- m->new_freed -= annihilated;
- BROTLI_DCHECK(m->new_freed == 0);
- }
-
- if (m->new_allocated != 0) {
- BROTLI_DCHECK(m->perm_allocated + m->new_allocated <= MAX_PERM_ALLOCATED);
- memcpy(m->pointers + PERM_ALLOCATED_OFFSET + m->perm_allocated,
- m->pointers + NEW_ALLOCATED_OFFSET,
- sizeof(void*) * m->new_allocated);
- m->perm_allocated += m->new_allocated;
- m->new_allocated = 0;
- SortPointers(m->pointers + PERM_ALLOCATED_OFFSET, m->perm_allocated);
- }
-}
-
-void* BrotliAllocate(MemoryManager* m, size_t n) {
- void* result = m->alloc_func(m->opaque, n);
- if (!result) {
- m->is_oom = BROTLI_TRUE;
- return NULL;
- }
- if (m->new_allocated == MAX_NEW_ALLOCATED) CollectGarbagePointers(m);
- m->pointers[NEW_ALLOCATED_OFFSET + (m->new_allocated++)] = result;
- return result;
-}
-
-void BrotliFree(MemoryManager* m, void* p) {
- if (!p) return;
- m->free_func(m->opaque, p);
- if (m->new_freed == MAX_NEW_FREED) CollectGarbagePointers(m);
- m->pointers[NEW_FREED_OFFSET + (m->new_freed++)] = p;
-}
-
-void BrotliWipeOutMemoryManager(MemoryManager* m) {
- size_t i;
- CollectGarbagePointers(m);
- /* Now all unfreed pointers are in perm-allocated list. */
- for (i = 0; i < m->perm_allocated; ++i) {
- m->free_func(m->opaque, m->pointers[PERM_ALLOCATED_OFFSET + i]);
- }
- m->perm_allocated = 0;
-}
-
-#endif /* BROTLI_ENCODER_EXIT_ON_OOM */
-
-#if defined(__cplusplus) || defined(c_plusplus)
-} /* extern "C" */
-#endif
diff --git a/BaseTools/Source/C/BrotliCompress/enc/metablock.c b/BaseTools/Source/C/BrotliCompress/enc/metablock.c
deleted file mode 100644
index 2fc3e28d02af..000000000000
--- a/BaseTools/Source/C/BrotliCompress/enc/metablock.c
+++ /dev/null
@@ -1,667 +0,0 @@
-/* Copyright 2015 Google Inc. All Rights Reserved.
-
- Distributed under MIT license.
- See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
-*/
-
-/* Algorithms for distributing the literals and commands of a metablock between
- block types and contexts. */
-
-#include "./metablock.h"
-
-#include "../common/constants.h"
-#include "../common/context.h"
-#include "../common/platform.h"
-#include <brotli/types.h>
-#include "./bit_cost.h"
-#include "./block_splitter.h"
-#include "./cluster.h"
-#include "./entropy_encode.h"
-#include "./histogram.h"
-#include "./memory.h"
-#include "./quality.h"
-
-#if defined(__cplusplus) || defined(c_plusplus)
-extern "C" {
-#endif
-
-void BrotliInitDistanceParams(BrotliEncoderParams* params,
- uint32_t npostfix, uint32_t ndirect) {
- BrotliDistanceParams* dist_params = ¶ms->dist;
- uint32_t alphabet_size, max_distance;
-
- dist_params->distance_postfix_bits = npostfix;
- dist_params->num_direct_distance_codes = ndirect;
-
- alphabet_size = BROTLI_DISTANCE_ALPHABET_SIZE(
- npostfix, ndirect, BROTLI_MAX_DISTANCE_BITS);
- max_distance = ndirect + (1U << (BROTLI_MAX_DISTANCE_BITS + npostfix + 2)) -
- (1U << (npostfix + 2));
-
- if (params->large_window) {
- static const uint32_t bound[BROTLI_MAX_NPOSTFIX + 1] = {0, 4, 12, 28};
- uint32_t postfix = 1U << npostfix;
- alphabet_size = BROTLI_DISTANCE_ALPHABET_SIZE(
- npostfix, ndirect, BROTLI_LARGE_MAX_DISTANCE_BITS);
- /* The maximum distance is set so that no distance symbol used can encode
- a distance larger than BROTLI_MAX_ALLOWED_DISTANCE with all
- its extra bits set. */
- if (ndirect < bound[npostfix]) {
- max_distance = BROTLI_MAX_ALLOWED_DISTANCE - (bound[npostfix] - ndirect);
- } else if (ndirect >= bound[npostfix] + postfix) {
- max_distance = (3U << 29) - 4 + (ndirect - bound[npostfix]);
- } else {
- max_distance = BROTLI_MAX_ALLOWED_DISTANCE;
- }
- }
-
- dist_params->alphabet_size = alphabet_size;
- dist_params->max_distance = max_distance;
-}
-
-static void RecomputeDistancePrefixes(Command* cmds,
- size_t num_commands,
- const BrotliDistanceParams* orig_params,
- const BrotliDistanceParams* new_params) {
- size_t i;
-
- if (orig_params->distance_postfix_bits == new_params->distance_postfix_bits &&
- orig_params->num_direct_distance_codes ==
- new_params->num_direct_distance_codes) {
- return;
- }
-
- for (i = 0; i < num_commands; ++i) {
- Command* cmd = &cmds[i];
- if (CommandCopyLen(cmd) && cmd->cmd_prefix_ >= 128) {
- PrefixEncodeCopyDistance(CommandRestoreDistanceCode(cmd, orig_params),
- new_params->num_direct_distance_codes,
- new_params->distance_postfix_bits,
- &cmd->dist_prefix_,
- &cmd->dist_extra_);
- }
- }
-}
-
-static BROTLI_BOOL ComputeDistanceCost(const Command* cmds,
- size_t num_commands,
- const BrotliDistanceParams* orig_params,
- const BrotliDistanceParams* new_params,
- double* cost) {
- size_t i;
- BROTLI_BOOL equal_params = BROTLI_FALSE;
- uint16_t dist_prefix;
- uint32_t dist_extra;
- double extra_bits = 0.0;
- HistogramDistance histo;
- HistogramClearDistance(&histo);
-
- if (orig_params->distance_postfix_bits == new_params->distance_postfix_bits &&
- orig_params->num_direct_distance_codes ==
- new_params->num_direct_distance_codes) {
- equal_params = BROTLI_TRUE;
- }
-
- for (i = 0; i < num_commands; i++) {
- const Command* cmd = &cmds[i];
- if (CommandCopyLen(cmd) && cmd->cmd_prefix_ >= 128) {
- if (equal_params) {
- dist_prefix = cmd->dist_prefix_;
- } else {
- uint32_t distance = CommandRestoreDistanceCode(cmd, orig_params);
- if (distance > new_params->max_distance) {
- return BROTLI_FALSE;
- }
- PrefixEncodeCopyDistance(distance,
- new_params->num_direct_distance_codes,
- new_params->distance_postfix_bits,
- &dist_prefix,
- &dist_extra);
- }
- HistogramAddDistance(&histo, dist_prefix & 0x3FF);
- extra_bits += dist_prefix >> 10;
- }
- }
-
- *cost = BrotliPopulationCostDistance(&histo) + extra_bits;
- return BROTLI_TRUE;
-}
-
-void BrotliBuildMetaBlock(MemoryManager* m,
- const uint8_t* ringbuffer,
- const size_t pos,
- const size_t mask,
- BrotliEncoderParams* params,
- uint8_t prev_byte,
- uint8_t prev_byte2,
- Command* cmds,
- size_t num_commands,
- ContextType literal_context_mode,
- MetaBlockSplit* mb) {
- /* Histogram ids need to fit in one byte. */
- static const size_t kMaxNumberOfHistograms = 256;
- HistogramDistance* distance_histograms;
- HistogramLiteral* literal_histograms;
- ContextType* literal_context_modes = NULL;
- size_t literal_histograms_size;
- size_t distance_histograms_size;
- size_t i;
- size_t literal_context_multiplier = 1;
- uint32_t npostfix;
- uint32_t ndirect_msb = 0;
- BROTLI_BOOL check_orig = BROTLI_TRUE;
- double best_dist_cost = 1e99;
- BrotliEncoderParams orig_params = *params;
- BrotliEncoderParams new_params = *params;
-
- for (npostfix = 0; npostfix <= BROTLI_MAX_NPOSTFIX; npostfix++) {
- for (; ndirect_msb < 16; ndirect_msb++) {
- uint32_t ndirect = ndirect_msb << npostfix;
- BROTLI_BOOL skip;
- double dist_cost;
- BrotliInitDistanceParams(&new_params, npostfix, ndirect);
- if (npostfix == orig_params.dist.distance_postfix_bits &&
- ndirect == orig_params.dist.num_direct_distance_codes) {
- check_orig = BROTLI_FALSE;
- }
- skip = !ComputeDistanceCost(
- cmds, num_commands,
- &orig_params.dist, &new_params.dist, &dist_cost);
- if (skip || (dist_cost > best_dist_cost)) {
- break;
- }
- best_dist_cost = dist_cost;
- params->dist = new_params.dist;
- }
- if (ndirect_msb > 0) ndirect_msb--;
- ndirect_msb /= 2;
- }
- if (check_orig) {
- double dist_cost;
- ComputeDistanceCost(cmds, num_commands,
- &orig_params.dist, &orig_params.dist, &dist_cost);
- if (dist_cost < best_dist_cost) {
- /* NB: currently unused; uncomment when more param tuning is added. */
- /* best_dist_cost = dist_cost; */
- params->dist = orig_params.dist;
- }
- }
- RecomputeDistancePrefixes(cmds, num_commands,
- &orig_params.dist, ¶ms->dist);
-
- BrotliSplitBlock(m, cmds, num_commands,
- ringbuffer, pos, mask, params,
- &mb->literal_split,
- &mb->command_split,
- &mb->distance_split);
- if (BROTLI_IS_OOM(m)) return;
-
- if (!params->disable_literal_context_modeling) {
- literal_context_multiplier = 1 << BROTLI_LITERAL_CONTEXT_BITS;
- literal_context_modes =
- BROTLI_ALLOC(m, ContextType, mb->literal_split.num_types);
- if (BROTLI_IS_OOM(m)) return;
- for (i = 0; i < mb->literal_split.num_types; ++i) {
- literal_context_modes[i] = literal_context_mode;
- }
- }
-
- literal_histograms_size =
- mb->literal_split.num_types * literal_context_multiplier;
- literal_histograms =
- BROTLI_ALLOC(m, HistogramLiteral, literal_histograms_size);
- if (BROTLI_IS_OOM(m)) return;
- ClearHistogramsLiteral(literal_histograms, literal_histograms_size);
-
- distance_histograms_size =
- mb->distance_split.num_types << BROTLI_DISTANCE_CONTEXT_BITS;
- distance_histograms =
- BROTLI_ALLOC(m, HistogramDistance, distance_histograms_size);
- if (BROTLI_IS_OOM(m)) return;
- ClearHistogramsDistance(distance_histograms, distance_histograms_size);
-
- BROTLI_DCHECK(mb->command_histograms == 0);
- mb->command_histograms_size = mb->command_split.num_types;
- mb->command_histograms =
- BROTLI_ALLOC(m, HistogramCommand, mb->command_histograms_size);
- if (BROTLI_IS_OOM(m)) return;
- ClearHistogramsCommand(mb->command_histograms, mb->command_histograms_size);
-
- BrotliBuildHistogramsWithContext(cmds, num_commands,
- &mb->literal_split, &mb->command_split, &mb->distance_split,
- ringbuffer, pos, mask, prev_byte, prev_byte2, literal_context_modes,
- literal_histograms, mb->command_histograms, distance_histograms);
- BROTLI_FREE(m, literal_context_modes);
-
- BROTLI_DCHECK(mb->literal_context_map == 0);
- mb->literal_context_map_size =
- mb->literal_split.num_types << BROTLI_LITERAL_CONTEXT_BITS;
- mb->literal_context_map =
- BROTLI_ALLOC(m, uint32_t, mb->literal_context_map_size);
- if (BROTLI_IS_OOM(m)) return;
-
- BROTLI_DCHECK(mb->literal_histograms == 0);
- mb->literal_histograms_size = mb->literal_context_map_size;
- mb->literal_histograms =
- BROTLI_ALLOC(m, HistogramLiteral, mb->literal_histograms_size);
- if (BROTLI_IS_OOM(m)) return;
-
- BrotliClusterHistogramsLiteral(m, literal_histograms, literal_histograms_size,
- kMaxNumberOfHistograms, mb->literal_histograms,
- &mb->literal_histograms_size, mb->literal_context_map);
- if (BROTLI_IS_OOM(m)) return;
- BROTLI_FREE(m, literal_histograms);
-
- if (params->disable_literal_context_modeling) {
- /* Distribute assignment to all contexts. */
- for (i = mb->literal_split.num_types; i != 0;) {
- size_t j = 0;
- i--;
- for (; j < (1 << BROTLI_LITERAL_CONTEXT_BITS); j++) {
- mb->literal_context_map[(i << BROTLI_LITERAL_CONTEXT_BITS) + j] =
- mb->literal_context_map[i];
- }
- }
- }
-
- BROTLI_DCHECK(mb->distance_context_map == 0);
- mb->distance_context_map_size =
- mb->distance_split.num_types << BROTLI_DISTANCE_CONTEXT_BITS;
- mb->distance_context_map =
- BROTLI_ALLOC(m, uint32_t, mb->distance_context_map_size);
- if (BROTLI_IS_OOM(m)) return;
-
- BROTLI_DCHECK(mb->distance_histograms == 0);
- mb->distance_histograms_size = mb->distance_context_map_size;
- mb->distance_histograms =
- BROTLI_ALLOC(m, HistogramDistance, mb->distance_histograms_size);
- if (BROTLI_IS_OOM(m)) return;
-
- BrotliClusterHistogramsDistance(m, distance_histograms,
- mb->distance_context_map_size,
- kMaxNumberOfHistograms,
- mb->distance_histograms,
- &mb->distance_histograms_size,
- mb->distance_context_map);
- if (BROTLI_IS_OOM(m)) return;
- BROTLI_FREE(m, distance_histograms);
-}
-
-#define FN(X) X ## Literal
-#include "./metablock_inc.h" /* NOLINT(build/include) */
-#undef FN
-
-#define FN(X) X ## Command
-#include "./metablock_inc.h" /* NOLINT(build/include) */
-#undef FN
-
-#define FN(X) X ## Distance
-#include "./metablock_inc.h" /* NOLINT(build/include) */
-#undef FN
-
-#define BROTLI_MAX_STATIC_CONTEXTS 13
-
-/* Greedy block splitter for one block category (literal, command or distance).
- Gathers histograms for all context buckets. */
-typedef struct ContextBlockSplitter {
- /* Alphabet size of particular block category. */
- size_t alphabet_size_;
- size_t num_contexts_;
- size_t max_block_types_;
- /* We collect at least this many symbols for each block. */
- size_t min_block_size_;
- /* We merge histograms A and B if
- entropy(A+B) < entropy(A) + entropy(B) + split_threshold_,
- where A is the current histogram and B is the histogram of the last or the
- second last block type. */
- double split_threshold_;
-
- size_t num_blocks_;
- BlockSplit* split_; /* not owned */
- HistogramLiteral* histograms_; /* not owned */
- size_t* histograms_size_; /* not owned */
-
- /* The number of symbols that we want to collect before deciding on whether
- or not to merge the block with a previous one or emit a new block. */
- size_t target_block_size_;
- /* The number of symbols in the current histogram. */
- size_t block_size_;
- /* Offset of the current histogram. */
- size_t curr_histogram_ix_;
- /* Offset of the histograms of the previous two block types. */
- size_t last_histogram_ix_[2];
- /* Entropy of the previous two block types. */
- double last_entropy_[2 * BROTLI_MAX_STATIC_CONTEXTS];
- /* The number of times we merged the current block with the last one. */
- size_t merge_last_count_;
-} ContextBlockSplitter;
-
-static void InitContextBlockSplitter(
- MemoryManager* m, ContextBlockSplitter* self, size_t alphabet_size,
- size_t num_contexts, size_t min_block_size, double split_threshold,
- size_t num_symbols, BlockSplit* split, HistogramLiteral** histograms,
- size_t* histograms_size) {
- size_t max_num_blocks = num_symbols / min_block_size + 1;
- size_t max_num_types;
- BROTLI_DCHECK(num_contexts <= BROTLI_MAX_STATIC_CONTEXTS);
-
- self->alphabet_size_ = alphabet_size;
- self->num_contexts_ = num_contexts;
- self->max_block_types_ = BROTLI_MAX_NUMBER_OF_BLOCK_TYPES / num_contexts;
- self->min_block_size_ = min_block_size;
- self->split_threshold_ = split_threshold;
- self->num_blocks_ = 0;
- self->split_ = split;
- self->histograms_size_ = histograms_size;
- self->target_block_size_ = min_block_size;
- self->block_size_ = 0;
- self->curr_histogram_ix_ = 0;
- self->merge_last_count_ = 0;
-
- /* We have to allocate one more histogram than the maximum number of block
- types for the current histogram when the meta-block is too big. */
- max_num_types =
- BROTLI_MIN(size_t, max_num_blocks, self->max_block_types_ + 1);
- BROTLI_ENSURE_CAPACITY(m, uint8_t,
- split->types, split->types_alloc_size, max_num_blocks);
- BROTLI_ENSURE_CAPACITY(m, uint32_t,
- split->lengths, split->lengths_alloc_size, max_num_blocks);
- if (BROTLI_IS_OOM(m)) return;
- split->num_blocks = max_num_blocks;
- if (BROTLI_IS_OOM(m)) return;
- BROTLI_DCHECK(*histograms == 0);
- *histograms_size = max_num_types * num_contexts;
- *histograms = BROTLI_ALLOC(m, HistogramLiteral, *histograms_size);
- self->histograms_ = *histograms;
- if (BROTLI_IS_OOM(m)) return;
- /* Clear only current histogram. */
- ClearHistogramsLiteral(&self->histograms_[0], num_contexts);
- self->last_histogram_ix_[0] = self->last_histogram_ix_[1] = 0;
-}
-
-/* Does either of three things:
- (1) emits the current block with a new block type;
- (2) emits the current block with the type of the second last block;
- (3) merges the current block with the last block. */
-static void ContextBlockSplitterFinishBlock(
- ContextBlockSplitter* self, MemoryManager* m, BROTLI_BOOL is_final) {
- BlockSplit* split = self->split_;
- const size_t num_contexts = self->num_contexts_;
- double* last_entropy = self->last_entropy_;
- HistogramLiteral* histograms = self->histograms_;
-
- if (self->block_size_ < self->min_block_size_) {
- self->block_size_ = self->min_block_size_;
- }
- if (self->num_blocks_ == 0) {
- size_t i;
- /* Create first block. */
- split->lengths[0] = (uint32_t)self->block_size_;
- split->types[0] = 0;
-
- for (i = 0; i < num_contexts; ++i) {
- last_entropy[i] =
- BitsEntropy(histograms[i].data_, self->alphabet_size_);
- last_entropy[num_contexts + i] = last_entropy[i];
- }
- ++self->num_blocks_;
- ++split->num_types;
- self->curr_histogram_ix_ += num_contexts;
- if (self->curr_histogram_ix_ < *self->histograms_size_) {
- ClearHistogramsLiteral(
- &self->histograms_[self->curr_histogram_ix_], self->num_contexts_);
- }
- self->block_size_ = 0;
- } else if (self->block_size_ > 0) {
- /* Try merging the set of histograms for the current block type with the
- respective set of histograms for the last and second last block types.
- Decide over the split based on the total reduction of entropy across
- all contexts. */
- double entropy[BROTLI_MAX_STATIC_CONTEXTS];
- HistogramLiteral* combined_histo =
- BROTLI_ALLOC(m, HistogramLiteral, 2 * num_contexts);
- double combined_entropy[2 * BROTLI_MAX_STATIC_CONTEXTS];
- double diff[2] = { 0.0 };
- size_t i;
- if (BROTLI_IS_OOM(m)) return;
- for (i = 0; i < num_contexts; ++i) {
- size_t curr_histo_ix = self->curr_histogram_ix_ + i;
- size_t j;
- entropy[i] = BitsEntropy(histograms[curr_histo_ix].data_,
- self->alphabet_size_);
- for (j = 0; j < 2; ++j) {
- size_t jx = j * num_contexts + i;
- size_t last_histogram_ix = self->last_histogram_ix_[j] + i;
- combined_histo[jx] = histograms[curr_histo_ix];
- HistogramAddHistogramLiteral(&combined_histo[jx],
- &histograms[last_histogram_ix]);
- combined_entropy[jx] = BitsEntropy(
- &combined_histo[jx].data_[0], self->alphabet_size_);
- diff[j] += combined_entropy[jx] - entropy[i] - last_entropy[jx];
- }
- }
-
- if (split->num_types < self->max_block_types_ &&
- diff[0] > self->split_threshold_ &&
- diff[1] > self->split_threshold_) {
- /* Create new block. */
- split->lengths[self->num_blocks_] = (uint32_t)self->block_size_;
- split->types[self->num_blocks_] = (uint8_t)split->num_types;
- self->last_histogram_ix_[1] = self->last_histogram_ix_[0];
- self->last_histogram_ix_[0] = split->num_types * num_contexts;
- for (i = 0; i < num_contexts; ++i) {
- last_entropy[num_contexts + i] = last_entropy[i];
- last_entropy[i] = entropy[i];
- }
- ++self->num_blocks_;
- ++split->num_types;
- self->curr_histogram_ix_ += num_contexts;
- if (self->curr_histogram_ix_ < *self->histograms_size_) {
- ClearHistogramsLiteral(
- &self->histograms_[self->curr_histogram_ix_], self->num_contexts_);
- }
- self->block_size_ = 0;
- self->merge_last_count_ = 0;
- self->target_block_size_ = self->min_block_size_;
- } else if (diff[1] < diff[0] - 20.0) {
- /* Combine this block with second last block. */
- split->lengths[self->num_blocks_] = (uint32_t)self->block_size_;
- split->types[self->num_blocks_] = split->types[self->num_blocks_ - 2];
- BROTLI_SWAP(size_t, self->last_histogram_ix_, 0, 1);
- for (i = 0; i < num_contexts; ++i) {
- histograms[self->last_histogram_ix_[0] + i] =
- combined_histo[num_contexts + i];
- last_entropy[num_contexts + i] = last_entropy[i];
- last_entropy[i] = combined_entropy[num_contexts + i];
- HistogramClearLiteral(&histograms[self->curr_histogram_ix_ + i]);
- }
- ++self->num_blocks_;
- self->block_size_ = 0;
- self->merge_last_count_ = 0;
- self->target_block_size_ = self->min_block_size_;
- } else {
- /* Combine this block with last block. */
- split->lengths[self->num_blocks_ - 1] += (uint32_t)self->block_size_;
- for (i = 0; i < num_contexts; ++i) {
- histograms[self->last_histogram_ix_[0] + i] = combined_histo[i];
- last_entropy[i] = combined_entropy[i];
- if (split->num_types == 1) {
- last_entropy[num_contexts + i] = last_entropy[i];
- }
- HistogramClearLiteral(&histograms[self->curr_histogram_ix_ + i]);
- }
- self->block_size_ = 0;
- if (++self->merge_last_count_ > 1) {
- self->target_block_size_ += self->min_block_size_;
- }
- }
- BROTLI_FREE(m, combined_histo);
- }
- if (is_final) {
- *self->histograms_size_ = split->num_types * num_contexts;
- split->num_blocks = self->num_blocks_;
- }
-}
-
-/* Adds the next symbol to the current block type and context. When the
- current block reaches the target size, decides on merging the block. */
-static void ContextBlockSplitterAddSymbol(
- ContextBlockSplitter* self, MemoryManager* m,
- size_t symbol, size_t context) {
- HistogramAddLiteral(&self->histograms_[self->curr_histogram_ix_ + context],
- symbol);
- ++self->block_size_;
- if (self->block_size_ == self->target_block_size_) {
- ContextBlockSplitterFinishBlock(self, m, /* is_final = */ BROTLI_FALSE);
- if (BROTLI_IS_OOM(m)) return;
- }
-}
-
-static void MapStaticContexts(MemoryManager* m,
- size_t num_contexts,
- const uint32_t* static_context_map,
- MetaBlockSplit* mb) {
- size_t i;
- BROTLI_DCHECK(mb->literal_context_map == 0);
- mb->literal_context_map_size =
- mb->literal_split.num_types << BROTLI_LITERAL_CONTEXT_BITS;
- mb->literal_context_map =
- BROTLI_ALLOC(m, uint32_t, mb->literal_context_map_size);
- if (BROTLI_IS_OOM(m)) return;
-
- for (i = 0; i < mb->literal_split.num_types; ++i) {
- uint32_t offset = (uint32_t)(i * num_contexts);
- size_t j;
- for (j = 0; j < (1u << BROTLI_LITERAL_CONTEXT_BITS); ++j) {
- mb->literal_context_map[(i << BROTLI_LITERAL_CONTEXT_BITS) + j] =
- offset + static_context_map[j];
- }
- }
-}
-
-static BROTLI_INLINE void BrotliBuildMetaBlockGreedyInternal(
- MemoryManager* m, const uint8_t* ringbuffer, size_t pos, size_t mask,
- uint8_t prev_byte, uint8_t prev_byte2, ContextLut literal_context_lut,
- const size_t num_contexts, const uint32_t* static_context_map,
- const Command* commands, size_t n_commands, MetaBlockSplit* mb) {
- union {
- BlockSplitterLiteral plain;
- ContextBlockSplitter ctx;
- } lit_blocks;
- BlockSplitterCommand cmd_blocks;
- BlockSplitterDistance dist_blocks;
- size_t num_literals = 0;
- size_t i;
- for (i = 0; i < n_commands; ++i) {
- num_literals += commands[i].insert_len_;
- }
-
- if (num_contexts == 1) {
- InitBlockSplitterLiteral(m, &lit_blocks.plain, 256, 512, 400.0,
- num_literals, &mb->literal_split, &mb->literal_histograms,
- &mb->literal_histograms_size);
- } else {
- InitContextBlockSplitter(m, &lit_blocks.ctx, 256, num_contexts, 512, 400.0,
- num_literals, &mb->literal_split, &mb->literal_histograms,
- &mb->literal_histograms_size);
- }
- if (BROTLI_IS_OOM(m)) return;
- InitBlockSplitterCommand(m, &cmd_blocks, BROTLI_NUM_COMMAND_SYMBOLS, 1024,
- 500.0, n_commands, &mb->command_split, &mb->command_histograms,
- &mb->command_histograms_size);
- if (BROTLI_IS_OOM(m)) return;
- InitBlockSplitterDistance(m, &dist_blocks, 64, 512, 100.0, n_commands,
- &mb->distance_split, &mb->distance_histograms,
- &mb->distance_histograms_size);
- if (BROTLI_IS_OOM(m)) return;
-
- for (i = 0; i < n_commands; ++i) {
- const Command cmd = commands[i];
- size_t j;
- BlockSplitterAddSymbolCommand(&cmd_blocks, cmd.cmd_prefix_);
- for (j = cmd.insert_len_; j != 0; --j) {
- uint8_t literal = ringbuffer[pos & mask];
- if (num_contexts == 1) {
- BlockSplitterAddSymbolLiteral(&lit_blocks.plain, literal);
- } else {
- size_t context =
- BROTLI_CONTEXT(prev_byte, prev_byte2, literal_context_lut);
- ContextBlockSplitterAddSymbol(&lit_blocks.ctx, m, literal,
- static_context_map[context]);
- if (BROTLI_IS_OOM(m)) return;
- }
- prev_byte2 = prev_byte;
- prev_byte = literal;
- ++pos;
- }
- pos += CommandCopyLen(&cmd);
- if (CommandCopyLen(&cmd)) {
- prev_byte2 = ringbuffer[(pos - 2) & mask];
- prev_byte = ringbuffer[(pos - 1) & mask];
- if (cmd.cmd_prefix_ >= 128) {
- BlockSplitterAddSymbolDistance(&dist_blocks, cmd.dist_prefix_ & 0x3FF);
- }
- }
- }
-
- if (num_contexts == 1) {
- BlockSplitterFinishBlockLiteral(
- &lit_blocks.plain, /* is_final = */ BROTLI_TRUE);
- } else {
- ContextBlockSplitterFinishBlock(
- &lit_blocks.ctx, m, /* is_final = */ BROTLI_TRUE);
- if (BROTLI_IS_OOM(m)) return;
- }
- BlockSplitterFinishBlockCommand(&cmd_blocks, /* is_final = */ BROTLI_TRUE);
- BlockSplitterFinishBlockDistance(&dist_blocks, /* is_final = */ BROTLI_TRUE);
-
- if (num_contexts > 1) {
- MapStaticContexts(m, num_contexts, static_context_map, mb);
- }
-}
-
-void BrotliBuildMetaBlockGreedy(MemoryManager* m,
- const uint8_t* ringbuffer,
- size_t pos,
- size_t mask,
- uint8_t prev_byte,
- uint8_t prev_byte2,
- ContextLut literal_context_lut,
- size_t num_contexts,
- const uint32_t* static_context_map,
- const Command* commands,
- size_t n_commands,
- MetaBlockSplit* mb) {
- if (num_contexts == 1) {
- BrotliBuildMetaBlockGreedyInternal(m, ringbuffer, pos, mask, prev_byte,
- prev_byte2, literal_context_lut, 1, NULL, commands, n_commands, mb);
- } else {
- BrotliBuildMetaBlockGreedyInternal(m, ringbuffer, pos, mask, prev_byte,
- prev_byte2, literal_context_lut, num_contexts, static_context_map,
- commands, n_commands, mb);
- }
-}
-
-void BrotliOptimizeHistograms(uint32_t num_distance_codes,
- MetaBlockSplit* mb) {
- uint8_t good_for_rle[BROTLI_NUM_COMMAND_SYMBOLS];
- size_t i;
- for (i = 0; i < mb->literal_histograms_size; ++i) {
- BrotliOptimizeHuffmanCountsForRle(256, mb->literal_histograms[i].data_,
- good_for_rle);
- }
- for (i = 0; i < mb->command_histograms_size; ++i) {
- BrotliOptimizeHuffmanCountsForRle(BROTLI_NUM_COMMAND_SYMBOLS,
- mb->command_histograms[i].data_,
- good_for_rle);
- }
- for (i = 0; i < mb->distance_histograms_size; ++i) {
- BrotliOptimizeHuffmanCountsForRle(num_distance_codes,
- mb->distance_histograms[i].data_,
- good_for_rle);
- }
-}
-
-#if defined(__cplusplus) || defined(c_plusplus)
-} /* extern "C" */
-#endif
diff --git a/BaseTools/Source/C/BrotliCompress/enc/static_dict.c b/BaseTools/Source/C/BrotliCompress/enc/static_dict.c
deleted file mode 100644
index bad13a7f1693..000000000000
--- a/BaseTools/Source/C/BrotliCompress/enc/static_dict.c
+++ /dev/null
@@ -1,486 +0,0 @@
-/* Copyright 2013 Google Inc. All Rights Reserved.
-
- Distributed under MIT license.
- See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
-*/
-
-#include "./static_dict.h"
-
-#include "../common/dictionary.h"
-#include "../common/platform.h"
-#include "../common/transform.h"
-#include "./encoder_dict.h"
-#include "./find_match_length.h"
-
-#if defined(__cplusplus) || defined(c_plusplus)
-extern "C" {
-#endif
-
-static BROTLI_INLINE uint32_t Hash(const uint8_t* data) {
- uint32_t h = BROTLI_UNALIGNED_LOAD32LE(data) * kDictHashMul32;
- /* The higher bits contain more mixture from the multiplication,
- so we take our results from there. */
- return h >> (32 - kDictNumBits);
-}
-
-static BROTLI_INLINE void AddMatch(size_t distance, size_t len, size_t len_code,
- uint32_t* matches) {
- uint32_t match = (uint32_t)((distance << 5) + len_code);
- matches[len] = BROTLI_MIN(uint32_t, matches[len], match);
-}
-
-static BROTLI_INLINE size_t DictMatchLength(const BrotliDictionary* dictionary,
- const uint8_t* data,
- size_t id,
- size_t len,
- size_t maxlen) {
- const size_t offset = dictionary->offsets_by_length[len] + len * id;
- return FindMatchLengthWithLimit(&dictionary->data[offset], data,
- BROTLI_MIN(size_t, len, maxlen));
-}
-
-static BROTLI_INLINE BROTLI_BOOL IsMatch(const BrotliDictionary* dictionary,
- DictWord w, const uint8_t* data, size_t max_length) {
- if (w.len > max_length) {
- return BROTLI_FALSE;
- } else {
- const size_t offset = dictionary->offsets_by_length[w.len] +
- (size_t)w.len * (size_t)w.idx;
- const uint8_t* dict = &dictionary->data[offset];
- if (w.transform == 0) {
- /* Match against base dictionary word. */
- return
- TO_BROTLI_BOOL(FindMatchLengthWithLimit(dict, data, w.len) == w.len);
- } else if (w.transform == 10) {
- /* Match against uppercase first transform.
- Note that there are only ASCII uppercase words in the lookup table. */
- return TO_BROTLI_BOOL(dict[0] >= 'a' && dict[0] <= 'z' &&
- (dict[0] ^ 32) == data[0] &&
- FindMatchLengthWithLimit(&dict[1], &data[1], w.len - 1u) ==
- w.len - 1u);
- } else {
- /* Match against uppercase all transform.
- Note that there are only ASCII uppercase words in the lookup table. */
- size_t i;
- for (i = 0; i < w.len; ++i) {
- if (dict[i] >= 'a' && dict[i] <= 'z') {
- if ((dict[i] ^ 32) != data[i]) return BROTLI_FALSE;
- } else {
- if (dict[i] != data[i]) return BROTLI_FALSE;
- }
- }
- return BROTLI_TRUE;
- }
- }
-}
-
-BROTLI_BOOL BrotliFindAllStaticDictionaryMatches(
- const BrotliEncoderDictionary* dictionary, const uint8_t* data,
- size_t min_length, size_t max_length, uint32_t* matches) {
- BROTLI_BOOL has_found_match = BROTLI_FALSE;
- {
- size_t offset = dictionary->buckets[Hash(data)];
- BROTLI_BOOL end = !offset;
- while (!end) {
- DictWord w = dictionary->dict_words[offset++];
- const size_t l = w.len & 0x1F;
- const size_t n = (size_t)1 << dictionary->words->size_bits_by_length[l];
- const size_t id = w.idx;
- end = !!(w.len & 0x80);
- w.len = (uint8_t)l;
- if (w.transform == 0) {
- const size_t matchlen =
- DictMatchLength(dictionary->words, data, id, l, max_length);
- const uint8_t* s;
- size_t minlen;
- size_t maxlen;
- size_t len;
- /* Transform "" + BROTLI_TRANSFORM_IDENTITY + "" */
- if (matchlen == l) {
- AddMatch(id, l, l, matches);
- has_found_match = BROTLI_TRUE;
- }
- /* Transforms "" + BROTLI_TRANSFORM_OMIT_LAST_1 + "" and
- "" + BROTLI_TRANSFORM_OMIT_LAST_1 + "ing " */
- if (matchlen >= l - 1) {
- AddMatch(id + 12 * n, l - 1, l, matches);
- if (l + 2 < max_length &&
- data[l - 1] == 'i' && data[l] == 'n' && data[l + 1] == 'g' &&
- data[l + 2] == ' ') {
- AddMatch(id + 49 * n, l + 3, l, matches);
- }
- has_found_match = BROTLI_TRUE;
- }
- /* Transform "" + BROTLI_TRANSFORM_OMIT_LAST_# + "" (# = 2 .. 9) */
- minlen = min_length;
- if (l > 9) minlen = BROTLI_MAX(size_t, minlen, l - 9);
- maxlen = BROTLI_MIN(size_t, matchlen, l - 2);
- for (len = minlen; len <= maxlen; ++len) {
- size_t cut = l - len;
- size_t transform_id = (cut << 2) +
- (size_t)((dictionary->cutoffTransforms >> (cut * 6)) & 0x3F);
- AddMatch(id + transform_id * n, len, l, matches);
- has_found_match = BROTLI_TRUE;
- }
- if (matchlen < l || l + 6 >= max_length) {
- continue;
- }
- s = &data[l];
- /* Transforms "" + BROTLI_TRANSFORM_IDENTITY + <suffix> */
- if (s[0] == ' ') {
- AddMatch(id + n, l + 1, l, matches);
- if (s[1] == 'a') {
- if (s[2] == ' ') {
- AddMatch(id + 28 * n, l + 3, l, matches);
- } else if (s[2] == 's') {
- if (s[3] == ' ') AddMatch(id + 46 * n, l + 4, l, matches);
- } else if (s[2] == 't') {
- if (s[3] == ' ') AddMatch(id + 60 * n, l + 4, l, matches);
- } else if (s[2] == 'n') {
- if (s[3] == 'd' && s[4] == ' ') {
- AddMatch(id + 10 * n, l + 5, l, matches);
- }
- }
- } else if (s[1] == 'b') {
- if (s[2] == 'y' && s[3] == ' ') {
- AddMatch(id + 38 * n, l + 4, l, matches);
- }
- } else if (s[1] == 'i') {
- if (s[2] == 'n') {
- if (s[3] == ' ') AddMatch(id + 16 * n, l + 4, l, matches);
- } else if (s[2] == 's') {
- if (s[3] == ' ') AddMatch(id + 47 * n, l + 4, l, matches);
- }
- } else if (s[1] == 'f') {
- if (s[2] == 'o') {
- if (s[3] == 'r' && s[4] == ' ') {
- AddMatch(id + 25 * n, l + 5, l, matches);
- }
- } else if (s[2] == 'r') {
- if (s[3] == 'o' && s[4] == 'm' && s[5] == ' ') {
- AddMatch(id + 37 * n, l + 6, l, matches);
- }
- }
- } else if (s[1] == 'o') {
- if (s[2] == 'f') {
- if (s[3] == ' ') AddMatch(id + 8 * n, l + 4, l, matches);
- } else if (s[2] == 'n') {
- if (s[3] == ' ') AddMatch(id + 45 * n, l + 4, l, matches);
- }
- } else if (s[1] == 'n') {
- if (s[2] == 'o' && s[3] == 't' && s[4] == ' ') {
- AddMatch(id + 80 * n, l + 5, l, matches);
- }
- } else if (s[1] == 't') {
- if (s[2] == 'h') {
- if (s[3] == 'e') {
- if (s[4] == ' ') AddMatch(id + 5 * n, l + 5, l, matches);
- } else if (s[3] == 'a') {
- if (s[4] == 't' && s[5] == ' ') {
- AddMatch(id + 29 * n, l + 6, l, matches);
- }
- }
- } else if (s[2] == 'o') {
- if (s[3] == ' ') AddMatch(id + 17 * n, l + 4, l, matches);
- }
- } else if (s[1] == 'w') {
- if (s[2] == 'i' && s[3] == 't' && s[4] == 'h' && s[5] == ' ') {
- AddMatch(id + 35 * n, l + 6, l, matches);
- }
- }
- } else if (s[0] == '"') {
- AddMatch(id + 19 * n, l + 1, l, matches);
- if (s[1] == '>') {
- AddMatch(id + 21 * n, l + 2, l, matches);
- }
- } else if (s[0] == '.') {
- AddMatch(id + 20 * n, l + 1, l, matches);
- if (s[1] == ' ') {
- AddMatch(id + 31 * n, l + 2, l, matches);
- if (s[2] == 'T' && s[3] == 'h') {
- if (s[4] == 'e') {
- if (s[5] == ' ') AddMatch(id + 43 * n, l + 6, l, matches);
- } else if (s[4] == 'i') {
- if (s[5] == 's' && s[6] == ' ') {
- AddMatch(id + 75 * n, l + 7, l, matches);
- }
- }
- }
- }
- } else if (s[0] == ',') {
- AddMatch(id + 76 * n, l + 1, l, matches);
- if (s[1] == ' ') {
- AddMatch(id + 14 * n, l + 2, l, matches);
- }
- } else if (s[0] == '\n') {
- AddMatch(id + 22 * n, l + 1, l, matches);
- if (s[1] == '\t') {
- AddMatch(id + 50 * n, l + 2, l, matches);
- }
- } else if (s[0] == ']') {
- AddMatch(id + 24 * n, l + 1, l, matches);
- } else if (s[0] == '\'') {
- AddMatch(id + 36 * n, l + 1, l, matches);
- } else if (s[0] == ':') {
- AddMatch(id + 51 * n, l + 1, l, matches);
- } else if (s[0] == '(') {
- AddMatch(id + 57 * n, l + 1, l, matches);
- } else if (s[0] == '=') {
- if (s[1] == '"') {
- AddMatch(id + 70 * n, l + 2, l, matches);
- } else if (s[1] == '\'') {
- AddMatch(id + 86 * n, l + 2, l, matches);
- }
- } else if (s[0] == 'a') {
- if (s[1] == 'l' && s[2] == ' ') {
- AddMatch(id + 84 * n, l + 3, l, matches);
- }
- } else if (s[0] == 'e') {
- if (s[1] == 'd') {
- if (s[2] == ' ') AddMatch(id + 53 * n, l + 3, l, matches);
- } else if (s[1] == 'r') {
- if (s[2] == ' ') AddMatch(id + 82 * n, l + 3, l, matches);
- } else if (s[1] == 's') {
- if (s[2] == 't' && s[3] == ' ') {
- AddMatch(id + 95 * n, l + 4, l, matches);
- }
- }
- } else if (s[0] == 'f') {
- if (s[1] == 'u' && s[2] == 'l' && s[3] == ' ') {
- AddMatch(id + 90 * n, l + 4, l, matches);
- }
- } else if (s[0] == 'i') {
- if (s[1] == 'v') {
- if (s[2] == 'e' && s[3] == ' ') {
- AddMatch(id + 92 * n, l + 4, l, matches);
- }
- } else if (s[1] == 'z') {
- if (s[2] == 'e' && s[3] == ' ') {
- AddMatch(id + 100 * n, l + 4, l, matches);
- }
- }
- } else if (s[0] == 'l') {
- if (s[1] == 'e') {
- if (s[2] == 's' && s[3] == 's' && s[4] == ' ') {
- AddMatch(id + 93 * n, l + 5, l, matches);
- }
- } else if (s[1] == 'y') {
- if (s[2] == ' ') AddMatch(id + 61 * n, l + 3, l, matches);
- }
- } else if (s[0] == 'o') {
- if (s[1] == 'u' && s[2] == 's' && s[3] == ' ') {
- AddMatch(id + 106 * n, l + 4, l, matches);
- }
- }
- } else {
- /* Set is_all_caps=0 for BROTLI_TRANSFORM_UPPERCASE_FIRST and
- is_all_caps=1 otherwise (BROTLI_TRANSFORM_UPPERCASE_ALL)
- transform. */
- const BROTLI_BOOL is_all_caps =
- TO_BROTLI_BOOL(w.transform != BROTLI_TRANSFORM_UPPERCASE_FIRST);
- const uint8_t* s;
- if (!IsMatch(dictionary->words, w, data, max_length)) {
- continue;
- }
- /* Transform "" + kUppercase{First,All} + "" */
- AddMatch(id + (is_all_caps ? 44 : 9) * n, l, l, matches);
- has_found_match = BROTLI_TRUE;
- if (l + 1 >= max_length) {
- continue;
- }
- /* Transforms "" + kUppercase{First,All} + <suffix> */
- s = &data[l];
- if (s[0] == ' ') {
- AddMatch(id + (is_all_caps ? 68 : 4) * n, l + 1, l, matches);
- } else if (s[0] == '"') {
- AddMatch(id + (is_all_caps ? 87 : 66) * n, l + 1, l, matches);
- if (s[1] == '>') {
- AddMatch(id + (is_all_caps ? 97 : 69) * n, l + 2, l, matches);
- }
- } else if (s[0] == '.') {
- AddMatch(id + (is_all_caps ? 101 : 79) * n, l + 1, l, matches);
- if (s[1] == ' ') {
- AddMatch(id + (is_all_caps ? 114 : 88) * n, l + 2, l, matches);
- }
- } else if (s[0] == ',') {
- AddMatch(id + (is_all_caps ? 112 : 99) * n, l + 1, l, matches);
- if (s[1] == ' ') {
- AddMatch(id + (is_all_caps ? 107 : 58) * n, l + 2, l, matches);
- }
- } else if (s[0] == '\'') {
- AddMatch(id + (is_all_caps ? 94 : 74) * n, l + 1, l, matches);
- } else if (s[0] == '(') {
- AddMatch(id + (is_all_caps ? 113 : 78) * n, l + 1, l, matches);
- } else if (s[0] == '=') {
- if (s[1] == '"') {
- AddMatch(id + (is_all_caps ? 105 : 104) * n, l + 2, l, matches);
- } else if (s[1] == '\'') {
- AddMatch(id + (is_all_caps ? 116 : 108) * n, l + 2, l, matches);
- }
- }
- }
- }
- }
- /* Transforms with prefixes " " and "." */
- if (max_length >= 5 && (data[0] == ' ' || data[0] == '.')) {
- BROTLI_BOOL is_space = TO_BROTLI_BOOL(data[0] == ' ');
- size_t offset = dictionary->buckets[Hash(&data[1])];
- BROTLI_BOOL end = !offset;
- while (!end) {
- DictWord w = dictionary->dict_words[offset++];
- const size_t l = w.len & 0x1F;
- const size_t n = (size_t)1 << dictionary->words->size_bits_by_length[l];
- const size_t id = w.idx;
- end = !!(w.len & 0x80);
- w.len = (uint8_t)l;
- if (w.transform == 0) {
- const uint8_t* s;
- if (!IsMatch(dictionary->words, w, &data[1], max_length - 1)) {
- continue;
- }
- /* Transforms " " + BROTLI_TRANSFORM_IDENTITY + "" and
- "." + BROTLI_TRANSFORM_IDENTITY + "" */
- AddMatch(id + (is_space ? 6 : 32) * n, l + 1, l, matches);
- has_found_match = BROTLI_TRUE;
- if (l + 2 >= max_length) {
- continue;
- }
- /* Transforms " " + BROTLI_TRANSFORM_IDENTITY + <suffix> and
- "." + BROTLI_TRANSFORM_IDENTITY + <suffix>
- */
- s = &data[l + 1];
- if (s[0] == ' ') {
- AddMatch(id + (is_space ? 2 : 77) * n, l + 2, l, matches);
- } else if (s[0] == '(') {
- AddMatch(id + (is_space ? 89 : 67) * n, l + 2, l, matches);
- } else if (is_space) {
- if (s[0] == ',') {
- AddMatch(id + 103 * n, l + 2, l, matches);
- if (s[1] == ' ') {
- AddMatch(id + 33 * n, l + 3, l, matches);
- }
- } else if (s[0] == '.') {
- AddMatch(id + 71 * n, l + 2, l, matches);
- if (s[1] == ' ') {
- AddMatch(id + 52 * n, l + 3, l, matches);
- }
- } else if (s[0] == '=') {
- if (s[1] == '"') {
- AddMatch(id + 81 * n, l + 3, l, matches);
- } else if (s[1] == '\'') {
- AddMatch(id + 98 * n, l + 3, l, matches);
- }
- }
- }
- } else if (is_space) {
- /* Set is_all_caps=0 for BROTLI_TRANSFORM_UPPERCASE_FIRST and
- is_all_caps=1 otherwise (BROTLI_TRANSFORM_UPPERCASE_ALL)
- transform. */
- const BROTLI_BOOL is_all_caps =
- TO_BROTLI_BOOL(w.transform != BROTLI_TRANSFORM_UPPERCASE_FIRST);
- const uint8_t* s;
- if (!IsMatch(dictionary->words, w, &data[1], max_length - 1)) {
- continue;
- }
- /* Transforms " " + kUppercase{First,All} + "" */
- AddMatch(id + (is_all_caps ? 85 : 30) * n, l + 1, l, matches);
- has_found_match = BROTLI_TRUE;
- if (l + 2 >= max_length) {
- continue;
- }
- /* Transforms " " + kUppercase{First,All} + <suffix> */
- s = &data[l + 1];
- if (s[0] == ' ') {
- AddMatch(id + (is_all_caps ? 83 : 15) * n, l + 2, l, matches);
- } else if (s[0] == ',') {
- if (!is_all_caps) {
- AddMatch(id + 109 * n, l + 2, l, matches);
- }
- if (s[1] == ' ') {
- AddMatch(id + (is_all_caps ? 111 : 65) * n, l + 3, l, matches);
- }
- } else if (s[0] == '.') {
- AddMatch(id + (is_all_caps ? 115 : 96) * n, l + 2, l, matches);
- if (s[1] == ' ') {
- AddMatch(id + (is_all_caps ? 117 : 91) * n, l + 3, l, matches);
- }
- } else if (s[0] == '=') {
- if (s[1] == '"') {
- AddMatch(id + (is_all_caps ? 110 : 118) * n, l + 3, l, matches);
- } else if (s[1] == '\'') {
- AddMatch(id + (is_all_caps ? 119 : 120) * n, l + 3, l, matches);
- }
- }
- }
- }
- }
- if (max_length >= 6) {
- /* Transforms with prefixes "e ", "s ", ", " and "\xC2\xA0" */
- if ((data[1] == ' ' &&
- (data[0] == 'e' || data[0] == 's' || data[0] == ',')) ||
- (data[0] == 0xC2 && data[1] == 0xA0)) {
- size_t offset = dictionary->buckets[Hash(&data[2])];
- BROTLI_BOOL end = !offset;
- while (!end) {
- DictWord w = dictionary->dict_words[offset++];
- const size_t l = w.len & 0x1F;
- const size_t n = (size_t)1 << dictionary->words->size_bits_by_length[l];
- const size_t id = w.idx;
- end = !!(w.len & 0x80);
- w.len = (uint8_t)l;
- if (w.transform == 0 &&
- IsMatch(dictionary->words, w, &data[2], max_length - 2)) {
- if (data[0] == 0xC2) {
- AddMatch(id + 102 * n, l + 2, l, matches);
- has_found_match = BROTLI_TRUE;
- } else if (l + 2 < max_length && data[l + 2] == ' ') {
- size_t t = data[0] == 'e' ? 18 : (data[0] == 's' ? 7 : 13);
- AddMatch(id + t * n, l + 3, l, matches);
- has_found_match = BROTLI_TRUE;
- }
- }
- }
- }
- }
- if (max_length >= 9) {
- /* Transforms with prefixes " the " and ".com/" */
- if ((data[0] == ' ' && data[1] == 't' && data[2] == 'h' &&
- data[3] == 'e' && data[4] == ' ') ||
- (data[0] == '.' && data[1] == 'c' && data[2] == 'o' &&
- data[3] == 'm' && data[4] == '/')) {
- size_t offset = dictionary->buckets[Hash(&data[5])];
- BROTLI_BOOL end = !offset;
- while (!end) {
- DictWord w = dictionary->dict_words[offset++];
- const size_t l = w.len & 0x1F;
- const size_t n = (size_t)1 << dictionary->words->size_bits_by_length[l];
- const size_t id = w.idx;
- end = !!(w.len & 0x80);
- w.len = (uint8_t)l;
- if (w.transform == 0 &&
- IsMatch(dictionary->words, w, &data[5], max_length - 5)) {
- AddMatch(id + (data[0] == ' ' ? 41 : 72) * n, l + 5, l, matches);
- has_found_match = BROTLI_TRUE;
- if (l + 5 < max_length) {
- const uint8_t* s = &data[l + 5];
- if (data[0] == ' ') {
- if (l + 8 < max_length &&
- s[0] == ' ' && s[1] == 'o' && s[2] == 'f' && s[3] == ' ') {
- AddMatch(id + 62 * n, l + 9, l, matches);
- if (l + 12 < max_length &&
- s[4] == 't' && s[5] == 'h' && s[6] == 'e' && s[7] == ' ') {
- AddMatch(id + 73 * n, l + 13, l, matches);
- }
- }
- }
- }
- }
- }
- }
- }
- return has_found_match;
-}
-
-#if defined(__cplusplus) || defined(c_plusplus)
-} /* extern "C" */
-#endif
diff --git a/BaseTools/Source/C/BrotliCompress/enc/utf8_util.c b/BaseTools/Source/C/BrotliCompress/enc/utf8_util.c
deleted file mode 100644
index 9d21aa9fa3ed..000000000000
--- a/BaseTools/Source/C/BrotliCompress/enc/utf8_util.c
+++ /dev/null
@@ -1,85 +0,0 @@
-/* Copyright 2013 Google Inc. All Rights Reserved.
-
- Distributed under MIT license.
- See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
-*/
-
-/* Heuristics for deciding about the UTF8-ness of strings. */
-
-#include "./utf8_util.h"
-
-#include <brotli/types.h>
-
-#if defined(__cplusplus) || defined(c_plusplus)
-extern "C" {
-#endif
-
-static size_t BrotliParseAsUTF8(
- int* symbol, const uint8_t* input, size_t size) {
- /* ASCII */
- if ((input[0] & 0x80) == 0) {
- *symbol = input[0];
- if (*symbol > 0) {
- return 1;
- }
- }
- /* 2-byte UTF8 */
- if (size > 1u &&
- (input[0] & 0xE0) == 0xC0 &&
- (input[1] & 0xC0) == 0x80) {
- *symbol = (((input[0] & 0x1F) << 6) |
- (input[1] & 0x3F));
- if (*symbol > 0x7F) {
- return 2;
- }
- }
- /* 3-byte UFT8 */
- if (size > 2u &&
- (input[0] & 0xF0) == 0xE0 &&
- (input[1] & 0xC0) == 0x80 &&
- (input[2] & 0xC0) == 0x80) {
- *symbol = (((input[0] & 0x0F) << 12) |
- ((input[1] & 0x3F) << 6) |
- (input[2] & 0x3F));
- if (*symbol > 0x7FF) {
- return 3;
- }
- }
- /* 4-byte UFT8 */
- if (size > 3u &&
- (input[0] & 0xF8) == 0xF0 &&
- (input[1] & 0xC0) == 0x80 &&
- (input[2] & 0xC0) == 0x80 &&
- (input[3] & 0xC0) == 0x80) {
- *symbol = (((input[0] & 0x07) << 18) |
- ((input[1] & 0x3F) << 12) |
- ((input[2] & 0x3F) << 6) |
- (input[3] & 0x3F));
- if (*symbol > 0xFFFF && *symbol <= 0x10FFFF) {
- return 4;
- }
- }
- /* Not UTF8, emit a special symbol above the UTF8-code space */
- *symbol = 0x110000 | input[0];
- return 1;
-}
-
-/* Returns 1 if at least min_fraction of the data is UTF8-encoded.*/
-BROTLI_BOOL BrotliIsMostlyUTF8(
- const uint8_t* data, const size_t pos, const size_t mask,
- const size_t length, const double min_fraction) {
- size_t size_utf8 = 0;
- size_t i = 0;
- while (i < length) {
- int symbol;
- size_t bytes_read =
- BrotliParseAsUTF8(&symbol, &data[(pos + i) & mask], length - i);
- i += bytes_read;
- if (symbol < 0x110000) size_utf8 += bytes_read;
- }
- return TO_BROTLI_BOOL(size_utf8 > min_fraction * (double)length);
-}
-
-#if defined(__cplusplus) || defined(c_plusplus)
-} /* extern "C" */
-#endif
diff --git a/BaseTools/Source/C/BrotliCompress/tools/brotli.c b/BaseTools/Source/C/BrotliCompress/tools/brotli.c
deleted file mode 100644
index b0246e1ecf86..000000000000
--- a/BaseTools/Source/C/BrotliCompress/tools/brotli.c
+++ /dev/null
@@ -1,1143 +0,0 @@
-/* Copyright 2014 Google Inc. All Rights Reserved.
-
- Distributed under MIT license.
- See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
-*/
-
-/* Command line interface for Brotli library. */
-
-#include <errno.h>
-#include <fcntl.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <sys/stat.h>
-#include <sys/types.h>
-#include <time.h>
-
-#include "../common/constants.h"
-#include "../common/version.h"
-#include <brotli/decode.h>
-#include <brotli/encode.h>
-
-#if !defined(_WIN32)
-#include <unistd.h>
-#include <utime.h>
-#define MAKE_BINARY(FILENO) (FILENO)
-#else
-#include <io.h>
-#include <share.h>
-#include <sys/utime.h>
-
-#define MAKE_BINARY(FILENO) (_setmode((FILENO), _O_BINARY), (FILENO))
-
-#if !defined(__MINGW32__)
-#define STDIN_FILENO _fileno(stdin)
-#define STDOUT_FILENO _fileno(stdout)
-#define S_IRUSR S_IREAD
-#define S_IWUSR S_IWRITE
-#endif
-
-#define fdopen _fdopen
-#define isatty _isatty
-#define unlink _unlink
-#define utimbuf _utimbuf
-#define utime _utime
-
-#define fopen ms_fopen
-#define open ms_open
-
-#define chmod(F, P) (0)
-#define chown(F, O, G) (0)
-
-#if defined(_MSC_VER) && (_MSC_VER >= 1400)
-#define fseek _fseeki64
-#define ftell _ftelli64
-#endif
-
-static FILE* ms_fopen(const char* filename, const char* mode) {
- FILE* result = 0;
- fopen_s(&result, filename, mode);
- return result;
-}
-
-static int ms_open(const char* filename, int oflag, int pmode) {
- int result = -1;
- _sopen_s(&result, filename, oflag | O_BINARY, _SH_DENYNO, pmode);
- return result;
-}
-#endif /* WIN32 */
-
-typedef enum {
- COMMAND_COMPRESS,
- COMMAND_DECOMPRESS,
- COMMAND_HELP,
- COMMAND_INVALID,
- COMMAND_TEST_INTEGRITY,
- COMMAND_NOOP,
- COMMAND_VERSION
-} Command;
-
-#define DEFAULT_LGWIN 24
-#define DEFAULT_SUFFIX ".br"
-#define MAX_OPTIONS 20
-#define DECODE_HEADER_SIZE 0x10
-#define GAP_MEM_BLOCK 0x1000
-
-typedef struct {
- /* Parameters */
- int gmem;
- int quality;
- int lgwin;
- BROTLI_BOOL force_overwrite;
- BROTLI_BOOL junk_source;
- BROTLI_BOOL copy_stat;
- BROTLI_BOOL verbose;
- BROTLI_BOOL write_to_stdout;
- BROTLI_BOOL test_integrity;
- BROTLI_BOOL decompress;
- BROTLI_BOOL large_window;
- const char* output_path;
- const char* suffix;
- int not_input_indices[MAX_OPTIONS];
- size_t longest_path_len;
- size_t input_count;
-
- /* Inner state */
- int argc;
- char** argv;
- char* modified_path; /* Storage for path with appended / cut suffix */
- int iterator;
- int ignore;
- BROTLI_BOOL iterator_error;
- uint8_t* buffer;
- uint8_t* input;
- uint8_t* output;
- const char* current_input_path;
- const char* current_output_path;
- int64_t input_file_length; /* -1, if impossible to calculate */
- FILE* fin;
- FILE* fout;
-
- /* I/O buffers */
- size_t available_in;
- const uint8_t* next_in;
- size_t available_out;
- uint8_t* next_out;
-} Context;
-
-/* Parse up to 5 decimal digits. */
-static BROTLI_BOOL ParseInt(const char* s, int low, int high, int* result) {
- int value = 0;
- int i;
- for (i = 0; i < 5; ++i) {
- char c = s[i];
- if (c == 0) break;
- if (s[i] < '0' || s[i] > '9') return BROTLI_FALSE;
- value = (10 * value) + (c - '0');
- }
- if (i == 0) return BROTLI_FALSE;
- if (i > 1 && s[0] == '0') return BROTLI_FALSE;
- if (s[i] != 0) return BROTLI_FALSE;
- if (value < low || value > high) return BROTLI_FALSE;
- *result = value;
- return BROTLI_TRUE;
-}
-
-/* Returns "base file name" or its tail, if it contains '/' or '\'. */
-static const char* FileName(const char* path) {
- const char* separator_position = strrchr(path, '/');
- if (separator_position) path = separator_position + 1;
- separator_position = strrchr(path, '\\');
- if (separator_position) path = separator_position + 1;
- return path;
-}
-
-/* Detect if the program name is a special alias that infers a command type. */
-static Command ParseAlias(const char* name) {
- /* TODO: cast name to lower case? */
- const char* unbrotli = "unbrotli";
- size_t unbrotli_len = strlen(unbrotli);
- name = FileName(name);
- /* Partial comparison. On Windows there could be ".exe" suffix. */
- if (strncmp(name, unbrotli, unbrotli_len) == 0) {
- char terminator = name[unbrotli_len];
- if (terminator == 0 || terminator == '.') return COMMAND_DECOMPRESS;
- }
- return COMMAND_COMPRESS;
-}
-
-static Command ParseParams(Context* params) {
- int argc = params->argc;
- char** argv = params->argv;
- int i;
- int next_option_index = 0;
- size_t input_count = 0;
- size_t longest_path_len = 1;
- BROTLI_BOOL command_set = BROTLI_FALSE;
- BROTLI_BOOL gmem_set = BROTLI_FALSE;
- BROTLI_BOOL quality_set = BROTLI_FALSE;
- BROTLI_BOOL output_set = BROTLI_FALSE;
- BROTLI_BOOL keep_set = BROTLI_FALSE;
- BROTLI_BOOL lgwin_set = BROTLI_FALSE;
- BROTLI_BOOL suffix_set = BROTLI_FALSE;
- BROTLI_BOOL after_dash_dash = BROTLI_FALSE;
- Command command = ParseAlias(argv[0]);
-
- for (i = 1; i < argc; ++i) {
- const char* arg = argv[i];
- /* C99 5.1.2.2.1: "members argv[0] through argv[argc-1] inclusive shall
- contain pointers to strings"; NULL and 0-length are not forbidden. */
- size_t arg_len = arg ? strlen(arg) : 0;
-
- if (arg_len == 0) {
- params->not_input_indices[next_option_index++] = i;
- continue;
- }
-
- /* Too many options. The expected longest option list is:
- "-q 0 -w 10 -o f -D d -S b -d -f -k -n -v --", i.e. 16 items in total.
- This check is an additional guard that is never triggered, but provides
- a guard for future changes. */
- if (next_option_index > (MAX_OPTIONS - 2)) {
- fprintf(stderr, "too many options passed\n");
- return COMMAND_INVALID;
- }
-
- /* Input file entry. */
- if (after_dash_dash || arg[0] != '-' || arg_len == 1) {
- input_count++;
- if (longest_path_len < arg_len) longest_path_len = arg_len;
- continue;
- }
-
- /* Not a file entry. */
- params->not_input_indices[next_option_index++] = i;
-
- /* '--' entry stop parsing arguments. */
- if (arg_len == 2 && arg[1] == '-') {
- after_dash_dash = BROTLI_TRUE;
- continue;
- }
-
- /* Simple / coalesced options. */
- if (arg[1] != '-') {
- size_t j;
- for (j = 1; j < arg_len; ++j) {
- char c = arg[j];
- if (c >= '0' && c <= '9') {
- if (quality_set) {
- fprintf(stderr, "quality already set\n");
- return COMMAND_INVALID;
- }
- quality_set = BROTLI_TRUE;
- params->quality = c - '0';
- continue;
- } else if (c == 'c') {
- if (output_set) {
- fprintf(stderr, "write to standard output already set\n");
- return COMMAND_INVALID;
- }
- output_set = BROTLI_TRUE;
- params->write_to_stdout = BROTLI_TRUE;
- continue;
- } else if (c == 'd') {
- if (command_set) {
- fprintf(stderr, "command already set when parsing -d\n");
- return COMMAND_INVALID;
- }
- command_set = BROTLI_TRUE;
- command = COMMAND_DECOMPRESS;
- continue;
- } else if (c == 'f') {
- if (params->force_overwrite) {
- fprintf(stderr, "force output overwrite already set\n");
- return COMMAND_INVALID;
- }
- params->force_overwrite = BROTLI_TRUE;
- continue;
- } else if (c == 'h') {
- /* Don't parse further. */
- return COMMAND_HELP;
- } else if (c == 'j' || c == 'k') {
- if (keep_set) {
- fprintf(stderr, "argument --rm / -j or --keep / -n already set\n");
- return COMMAND_INVALID;
- }
- keep_set = BROTLI_TRUE;
- params->junk_source = TO_BROTLI_BOOL(c == 'j');
- continue;
- } else if (c == 'n') {
- if (!params->copy_stat) {
- fprintf(stderr, "argument --no-copy-stat / -n already set\n");
- return COMMAND_INVALID;
- }
- params->copy_stat = BROTLI_FALSE;
- continue;
- } else if (c == 't') {
- if (command_set) {
- fprintf(stderr, "command already set when parsing -t\n");
- return COMMAND_INVALID;
- }
- command_set = BROTLI_TRUE;
- command = COMMAND_TEST_INTEGRITY;
- continue;
- } else if (c == 'v') {
- if (params->verbose) {
- fprintf(stderr, "argument --verbose / -v already set\n");
- return COMMAND_INVALID;
- }
- params->verbose = BROTLI_TRUE;
- continue;
- } else if (c == 'V') {
- /* Don't parse further. */
- return COMMAND_VERSION;
- } else if (c == 'Z') {
- if (quality_set) {
- fprintf(stderr, "quality already set\n");
- return COMMAND_INVALID;
- }
- quality_set = BROTLI_TRUE;
- params->quality = 11;
- continue;
- }
- /* o/q/w/D/S with parameter is expected */
- if (c != 'o' && c != 'q' && c != 'w' && c != 'D' && c != 'S') {
- fprintf(stderr, "invalid argument -%c\n", c);
- return COMMAND_INVALID;
- }
- if (j + 1 != arg_len) {
- fprintf(stderr, "expected parameter for argument -%c\n", c);
- return COMMAND_INVALID;
- }
- i++;
- if (i == argc || !argv[i] || argv[i][0] == 0) {
- fprintf(stderr, "expected parameter for argument -%c\n", c);
- return COMMAND_INVALID;
- }
- params->not_input_indices[next_option_index++] = i;
- if (c == 'o') {
- if (output_set) {
- fprintf(stderr, "write to standard output already set (-o)\n");
- return COMMAND_INVALID;
- }
- params->output_path = argv[i];
- } else if (c == 'g') {
- gmem_set = ParseInt(argv[i], 1, 0x10, ¶ms->gmem);
- if (!gmem_set) {
- fprintf(stderr, "error parsing gmem value [%s]\n", argv[i]);
- return COMMAND_INVALID;
- }
- } else if (c == 'q') {
- if (quality_set) {
- fprintf(stderr, "quality already set\n");
- return COMMAND_INVALID;
- }
- quality_set = ParseInt(argv[i], BROTLI_MIN_QUALITY,
- BROTLI_MAX_QUALITY, ¶ms->quality);
- if (!quality_set) {
- fprintf(stderr, "error parsing quality value [%s]\n", argv[i]);
- return COMMAND_INVALID;
- }
- } else if (c == 'w') {
- if (lgwin_set) {
- fprintf(stderr, "lgwin parameter already set\n");
- return COMMAND_INVALID;
- }
- lgwin_set = ParseInt(argv[i], 0,
- BROTLI_MAX_WINDOW_BITS, ¶ms->lgwin);
- if (!lgwin_set) {
- fprintf(stderr, "error parsing lgwin value [%s]\n", argv[i]);
- return COMMAND_INVALID;
- }
- if (params->lgwin != 0 && params->lgwin < BROTLI_MIN_WINDOW_BITS) {
- fprintf(stderr,
- "lgwin parameter (%d) smaller than the minimum (%d)\n",
- params->lgwin, BROTLI_MIN_WINDOW_BITS);
- return COMMAND_INVALID;
- }
- } else if (c == 'S') {
- if (suffix_set) {
- fprintf(stderr, "suffix already set\n");
- return COMMAND_INVALID;
- }
- suffix_set = BROTLI_TRUE;
- params->suffix = argv[i];
- }
- }
- } else { /* Double-dash. */
- arg = &arg[2];
- if (strcmp("best", arg) == 0) {
- if (quality_set) {
- fprintf(stderr, "quality already set\n");
- return COMMAND_INVALID;
- }
- quality_set = BROTLI_TRUE;
- params->quality = 11;
- } else if (strcmp("decompress", arg) == 0) {
- if (command_set) {
- fprintf(stderr, "command already set when parsing --decompress\n");
- return COMMAND_INVALID;
- }
- command_set = BROTLI_TRUE;
- command = COMMAND_DECOMPRESS;
- } else if (strcmp("force", arg) == 0) {
- if (params->force_overwrite) {
- fprintf(stderr, "force output overwrite already set\n");
- return COMMAND_INVALID;
- }
- params->force_overwrite = BROTLI_TRUE;
- } else if (strcmp("help", arg) == 0) {
- /* Don't parse further. */
- return COMMAND_HELP;
- } else if (strcmp("keep", arg) == 0) {
- if (keep_set) {
- fprintf(stderr, "argument --rm / -j or --keep / -n already set\n");
- return COMMAND_INVALID;
- }
- keep_set = BROTLI_TRUE;
- params->junk_source = BROTLI_FALSE;
- } else if (strcmp("no-copy-stat", arg) == 0) {
- if (!params->copy_stat) {
- fprintf(stderr, "argument --no-copy-stat / -n already set\n");
- return COMMAND_INVALID;
- }
- params->copy_stat = BROTLI_FALSE;
- } else if (strcmp("rm", arg) == 0) {
- if (keep_set) {
- fprintf(stderr, "argument --rm / -j or --keep / -n already set\n");
- return COMMAND_INVALID;
- }
- keep_set = BROTLI_TRUE;
- params->junk_source = BROTLI_TRUE;
- } else if (strcmp("stdout", arg) == 0) {
- if (output_set) {
- fprintf(stderr, "write to standard output already set\n");
- return COMMAND_INVALID;
- }
- output_set = BROTLI_TRUE;
- params->write_to_stdout = BROTLI_TRUE;
- } else if (strcmp("test", arg) == 0) {
- if (command_set) {
- fprintf(stderr, "command already set when parsing --test\n");
- return COMMAND_INVALID;
- }
- command_set = BROTLI_TRUE;
- command = COMMAND_TEST_INTEGRITY;
- } else if (strcmp("verbose", arg) == 0) {
- if (params->verbose) {
- fprintf(stderr, "argument --verbose / -v already set\n");
- return COMMAND_INVALID;
- }
- params->verbose = BROTLI_TRUE;
- } else if (strcmp("version", arg) == 0) {
- /* Don't parse further. */
- return COMMAND_VERSION;
- } else {
- /* key=value */
- const char* value = strrchr(arg, '=');
- size_t key_len;
- if (!value || value[1] == 0) {
- fprintf(stderr, "must pass the parameter as --%s=value\n", arg);
- return COMMAND_INVALID;
- }
- key_len = (size_t)(value - arg);
- value++;
- if (strncmp("lgwin", arg, key_len) == 0) {
- if (lgwin_set) {
- fprintf(stderr, "lgwin parameter already set\n");
- return COMMAND_INVALID;
- }
- lgwin_set = ParseInt(value, 0,
- BROTLI_MAX_WINDOW_BITS, ¶ms->lgwin);
- if (!lgwin_set) {
- fprintf(stderr, "error parsing lgwin value [%s]\n", value);
- return COMMAND_INVALID;
- }
- if (params->lgwin != 0 && params->lgwin < BROTLI_MIN_WINDOW_BITS) {
- fprintf(stderr,
- "lgwin parameter (%d) smaller than the minimum (%d)\n",
- params->lgwin, BROTLI_MIN_WINDOW_BITS);
- return COMMAND_INVALID;
- }
- } else if (strncmp("large_window", arg, key_len) == 0) {
- /* This option is intentionally not mentioned in help. */
- if (lgwin_set) {
- fprintf(stderr, "lgwin parameter already set\n");
- return COMMAND_INVALID;
- }
- lgwin_set = ParseInt(value, 0,
- BROTLI_LARGE_MAX_WINDOW_BITS, ¶ms->lgwin);
- if (!lgwin_set) {
- fprintf(stderr, "error parsing lgwin value [%s]\n", value);
- return COMMAND_INVALID;
- }
- if (params->lgwin != 0 && params->lgwin < BROTLI_MIN_WINDOW_BITS) {
- fprintf(stderr,
- "lgwin parameter (%d) smaller than the minimum (%d)\n",
- params->lgwin, BROTLI_MIN_WINDOW_BITS);
- return COMMAND_INVALID;
- }
- } else if (strncmp("output", arg, key_len) == 0) {
- if (output_set) {
- fprintf(stderr,
- "write to standard output already set (--output)\n");
- return COMMAND_INVALID;
- }
- params->output_path = value;
- } else if (strncmp("gap", arg, key_len) == 0) {
- gmem_set = ParseInt(value, 1, 0x10, ¶ms->gmem);
- if (!gmem_set) {
- fprintf(stderr, "error parsing gmem value [%s]\n", value);
- return COMMAND_INVALID;
- }
- } else if (strncmp("quality", arg, key_len) == 0) {
- if (quality_set) {
- fprintf(stderr, "quality already set\n");
- return COMMAND_INVALID;
- }
- quality_set = ParseInt(value, BROTLI_MIN_QUALITY,
- BROTLI_MAX_QUALITY, ¶ms->quality);
- if (!quality_set) {
- fprintf(stderr, "error parsing quality value [%s]\n", value);
- return COMMAND_INVALID;
- }
- } else if (strncmp("suffix", arg, key_len) == 0) {
- if (suffix_set) {
- fprintf(stderr, "suffix already set\n");
- return COMMAND_INVALID;
- }
- suffix_set = BROTLI_TRUE;
- params->suffix = value;
- } else {
- fprintf(stderr, "invalid parameter: [%s]\n", arg);
- return COMMAND_INVALID;
- }
- }
- }
- }
-
- params->input_count = input_count;
- params->longest_path_len = longest_path_len;
- params->decompress = (command == COMMAND_DECOMPRESS);
- params->test_integrity = (command == COMMAND_TEST_INTEGRITY);
-
- if (input_count > 1 && output_set) return COMMAND_INVALID;
- if (params->test_integrity) {
- if (params->output_path) return COMMAND_INVALID;
- if (params->write_to_stdout) return COMMAND_INVALID;
- }
- if (strchr(params->suffix, '/') || strchr(params->suffix, '\\')) {
- return COMMAND_INVALID;
- }
-
- return command;
-}
-
-static void PrintVersion(void) {
- int major = BROTLI_VERSION >> 24;
- int minor = (BROTLI_VERSION >> 12) & 0xFFF;
- int patch = BROTLI_VERSION & 0xFFF;
- fprintf(stdout, "brotli %d.%d.%d\n", major, minor, patch);
-}
-
-static void PrintHelp(const char* name, BROTLI_BOOL error) {
- FILE* media = error ? stderr : stdout;
- /* String is cut to pieces with length less than 509, to conform C90 spec. */
- fprintf(media,
-"Usage: %s [OPTION]... [FILE]...\n",
- name);
- fprintf(media,
-"Options:\n"
-" -# compression level (0-9)\n"
-" -c, --stdout write on standard output\n"
-" -d, --decompress decompress\n"
-" -f, --force force output file overwrite\n"
-" -h, --help display this help and exit\n");
- fprintf(media,
-" -j, --rm remove source file(s)\n"
-" -k, --keep keep source file(s) (default)\n"
-" -n, --no-copy-stat do not copy source file(s) attributes\n"
-" -o FILE, --output=FILE output file (only if 1 input file)\n");
- fprintf(media,
-" -g NUM, --gap=NUM scratch memory gap level (1-16)\n");
- fprintf(media,
-" -q NUM, --quality=NUM compression level (%d-%d)\n",
- BROTLI_MIN_QUALITY, BROTLI_MAX_QUALITY);
- fprintf(media,
-" -t, --test test compressed file integrity\n"
-" -v, --verbose verbose mode\n");
- fprintf(media,
-" -w NUM, --lgwin=NUM set LZ77 window size (0, %d-%d)\n",
- BROTLI_MIN_WINDOW_BITS, BROTLI_MAX_WINDOW_BITS);
- fprintf(media,
-" window size = 2**NUM - 16\n"
-" 0 lets compressor choose the optimal value\n");
- fprintf(media,
-" -S SUF, --suffix=SUF output file suffix (default:'%s')\n",
- DEFAULT_SUFFIX);
- fprintf(media,
-" -V, --version display version and exit\n"
-" -Z, --best use best compression level (11) (default)\n"
-"Simple options could be coalesced, i.e. '-9kf' is equivalent to '-9 -k -f'.\n"
-"With no FILE, or when FILE is -, read standard input.\n"
-"All arguments after '--' are treated as files.\n");
-}
-
-static const char* PrintablePath(const char* path) {
- return path ? path : "con";
-}
-
-static BROTLI_BOOL OpenInputFile(const char* input_path, FILE** f) {
- *f = NULL;
- if (!input_path) {
- *f = fdopen(MAKE_BINARY(STDIN_FILENO), "rb");
- return BROTLI_TRUE;
- }
- *f = fopen(input_path, "rb");
- if (!*f) {
- fprintf(stderr, "failed to open input file [%s]: %s\n",
- PrintablePath(input_path), strerror(errno));
- return BROTLI_FALSE;
- }
- return BROTLI_TRUE;
-}
-
-static BROTLI_BOOL OpenOutputFile(const char* output_path, FILE** f,
- BROTLI_BOOL force) {
- int fd;
- *f = NULL;
- if (!output_path) {
- *f = fdopen(MAKE_BINARY(STDOUT_FILENO), "wb");
- return BROTLI_TRUE;
- }
- fd = open(output_path, O_CREAT | (force ? 0 : O_EXCL) | O_WRONLY | O_TRUNC,
- S_IRUSR | S_IWUSR);
- if (fd < 0) {
- fd = open(output_path, (force ? 0 : O_EXCL) | O_WRONLY | O_TRUNC,
- S_IRUSR | S_IWUSR);
- if (fd < 0) {
- fprintf(stderr, "failed to open output file [%s]: %s\n",
- PrintablePath(output_path), strerror(errno));
- return BROTLI_FALSE;
- }
- }
-
- *f = fdopen(fd, "wb");
- if (!*f) {
- fprintf(stderr, "failed to open output file [%s]: %s\n",
- PrintablePath(output_path), strerror(errno));
- return BROTLI_FALSE;
- }
- return BROTLI_TRUE;
-}
-
-static int64_t FileSize(const char* path) {
- FILE* f = fopen(path, "rb");
- int64_t retval;
- if (f == NULL) {
- return -1;
- }
- if (fseek(f, 0L, SEEK_END) != 0) {
- fclose(f);
- return -1;
- }
- retval = ftell(f);
- if (fclose(f) != 0) {
- return -1;
- }
- return retval;
-}
-
-/* Copy file times and permissions.
- TODO: this is a "best effort" implementation; honest cross-platform
- fully featured implementation is way too hacky; add more hacks by request. */
-static void CopyStat(const char* input_path, const char* output_path) {
- struct stat statbuf;
- struct utimbuf times;
- int res;
- if (input_path == 0 || output_path == 0) {
- return;
- }
- if (stat(input_path, &statbuf) != 0) {
- return;
- }
- times.actime = statbuf.st_atime;
- times.modtime = statbuf.st_mtime;
- utime(output_path, ×);
- res = chmod(output_path, statbuf.st_mode & (S_IRWXU | S_IRWXG | S_IRWXO));
- if (res != 0) {
- fprintf(stderr, "setting access bits failed for [%s]: %s\n",
- PrintablePath(output_path), strerror(errno));
- }
- res = chown(output_path, (uid_t)-1, statbuf.st_gid);
- if (res != 0) {
- fprintf(stderr, "setting group failed for [%s]: %s\n",
- PrintablePath(output_path), strerror(errno));
- }
- res = chown(output_path, statbuf.st_uid, (gid_t)-1);
- if (res != 0) {
- fprintf(stderr, "setting user failed for [%s]: %s\n",
- PrintablePath(output_path), strerror(errno));
- }
-}
-
-int64_t input_file_length = 0;
-
-static BROTLI_BOOL NextFile(Context* context) {
- const char* arg;
- size_t arg_len;
-
- /* Iterator points to last used arg; increment to search for the next one. */
- context->iterator++;
-
- context->input_file_length = -1;
-
- /* No input path; read from console. */
- if (context->input_count == 0) {
- if (context->iterator > 1) return BROTLI_FALSE;
- context->current_input_path = NULL;
- /* Either write to the specified path, or to console. */
- context->current_output_path = context->output_path;
- return BROTLI_TRUE;
- }
-
- /* Skip option arguments. */
- while (context->iterator == context->not_input_indices[context->ignore]) {
- context->iterator++;
- context->ignore++;
- }
-
- /* All args are scanned already. */
- if (context->iterator >= context->argc) return BROTLI_FALSE;
-
- /* Iterator now points to the input file name. */
- arg = context->argv[context->iterator];
- arg_len = strlen(arg);
- /* Read from console. */
- if (arg_len == 1 && arg[0] == '-') {
- context->current_input_path = NULL;
- context->current_output_path = context->output_path;
- return BROTLI_TRUE;
- }
-
- if (context->current_input_path == NULL) {
- context->current_input_path = arg;
- }
- context->input_file_length = FileSize(context->current_input_path);
- context->current_output_path = context->output_path;
- if (!context->decompress) {
- input_file_length += context->input_file_length;
- }
-
- if (context->output_path) return BROTLI_TRUE;
- if (context->write_to_stdout) return BROTLI_TRUE;
-
- strcpy(context->modified_path, arg);
- context->current_output_path = context->modified_path;
- /* If output is not specified, input path suffix should match. */
- if (context->decompress) {
- size_t suffix_len = strlen(context->suffix);
- char* name = (char*)FileName(context->modified_path);
- char* name_suffix;
- size_t name_len = strlen(name);
- if (name_len < suffix_len + 1) {
- fprintf(stderr, "empty output file name for [%s] input file\n",
- PrintablePath(arg));
- context->iterator_error = BROTLI_TRUE;
- return BROTLI_FALSE;
- }
- name_suffix = name + name_len - suffix_len;
- if (strcmp(context->suffix, name_suffix) != 0) {
- fprintf(stderr, "input file [%s] suffix mismatch\n",
- PrintablePath(arg));
- context->iterator_error = BROTLI_TRUE;
- return BROTLI_FALSE;
- }
- name_suffix[0] = 0;
- return BROTLI_TRUE;
- } else {
- strcpy(context->modified_path + arg_len, context->suffix);
- return BROTLI_TRUE;
- }
-}
-
-static BROTLI_BOOL OpenFiles(Context* context) {
- BROTLI_BOOL is_ok = OpenInputFile(context->current_input_path, &context->fin);
- if (context->decompress) {
- //
- // skip the decoder data header
- //
- fseek(context->fin, DECODE_HEADER_SIZE, SEEK_SET);
- }
- if (!context->test_integrity && is_ok && context->fout == NULL) {
- is_ok = OpenOutputFile(
- context->current_output_path, &context->fout, context->force_overwrite);
- }
- if (!context->decompress) {
- //
- // append the decoder data header
- //
- fseek(context->fout, DECODE_HEADER_SIZE, SEEK_SET);
- }
- return is_ok;
-}
-
-static BROTLI_BOOL CloseFiles(Context* context, BROTLI_BOOL success) {
- BROTLI_BOOL is_ok = BROTLI_TRUE;
- if (!context->test_integrity && context->fout) {
- if (!success && context->current_output_path) {
- unlink(context->current_output_path);
- }
- if (fclose(context->fout) != 0) {
- if (success) {
- fprintf(stderr, "fclose failed [%s]: %s\n",
- PrintablePath(context->current_output_path), strerror(errno));
- }
- is_ok = BROTLI_FALSE;
- }
-
- /* TOCTOU violation, but otherwise it is impossible to set file times. */
- if (success && is_ok && context->copy_stat) {
- CopyStat(context->current_input_path, context->current_output_path);
- }
- }
-
- if (context->fin) {
- if (fclose(context->fin) != 0) {
- if (is_ok) {
- fprintf(stderr, "fclose failed [%s]: %s\n",
- PrintablePath(context->current_input_path), strerror(errno));
- }
- is_ok = BROTLI_FALSE;
- }
- }
- if (success && context->junk_source && context->current_input_path) {
- unlink(context->current_input_path);
- }
-
- context->fin = NULL;
- context->fout = NULL;
-
- return is_ok;
-}
-
-static const size_t kFileBufferSize = 1 << 16;
-
-static void InitializeBuffers(Context* context) {
- context->available_in = 0;
- context->next_in = NULL;
- context->available_out = kFileBufferSize;
- context->next_out = context->output;
-}
-
-static BROTLI_BOOL HasMoreInput(Context* context) {
- return feof(context->fin) ? BROTLI_FALSE : BROTLI_TRUE;
-}
-
-static BROTLI_BOOL ProvideInput(Context* context) {
- context->available_in =
- fread(context->input, 1, kFileBufferSize, context->fin);
- context->next_in = context->input;
- if (ferror(context->fin)) {
- fprintf(stderr, "failed to read input [%s]: %s\n",
- PrintablePath(context->current_input_path), strerror(errno));
- return BROTLI_FALSE;
- }
- return BROTLI_TRUE;
-}
-
-/* Internal: should be used only in Provide-/Flush-Output. */
-static BROTLI_BOOL WriteOutput(Context* context) {
- size_t out_size = (size_t)(context->next_out - context->output);
- if (out_size == 0) return BROTLI_TRUE;
- if (context->test_integrity) return BROTLI_TRUE;
-
- fwrite(context->output, 1, out_size, context->fout);
- if (ferror(context->fout)) {
- fprintf(stderr, "failed to write output [%s]: %s\n",
- PrintablePath(context->current_output_path), strerror(errno));
- return BROTLI_FALSE;
- }
- return BROTLI_TRUE;
-}
-
-static BROTLI_BOOL ProvideOutput(Context* context) {
- if (!WriteOutput(context)) return BROTLI_FALSE;
- context->available_out = kFileBufferSize;
- context->next_out = context->output;
- return BROTLI_TRUE;
-}
-
-static BROTLI_BOOL FlushOutput(Context* context) {
- if (!WriteOutput(context)) return BROTLI_FALSE;
- context->available_out = 0;
- return BROTLI_TRUE;
-}
-
-static BROTLI_BOOL DecompressFile(Context* context, BrotliDecoderState* s) {
- BrotliDecoderResult result = BROTLI_DECODER_RESULT_NEEDS_MORE_INPUT;
- InitializeBuffers(context);
- for (;;) {
- if (result == BROTLI_DECODER_RESULT_NEEDS_MORE_INPUT) {
- if (!HasMoreInput(context)) {
- fprintf(stderr, "corrupt input [%s]\n",
- PrintablePath(context->current_input_path));
- return BROTLI_FALSE;
- }
- if (!ProvideInput(context)) return BROTLI_FALSE;
- } else if (result == BROTLI_DECODER_RESULT_NEEDS_MORE_OUTPUT) {
- if (!ProvideOutput(context)) return BROTLI_FALSE;
- } else if (result == BROTLI_DECODER_RESULT_SUCCESS) {
- if (!FlushOutput(context)) return BROTLI_FALSE;
- if (context->available_in != 0 || HasMoreInput(context)) {
- fprintf(stderr, "corrupt input [%s]\n",
- PrintablePath(context->current_input_path));
- return BROTLI_FALSE;
- }
- return BROTLI_TRUE;
- } else {
- fprintf(stderr, "corrupt input [%s]\n",
- PrintablePath(context->current_input_path));
- return BROTLI_FALSE;
- }
-
- result = BrotliDecoderDecompressStream(s, &context->available_in,
- &context->next_in, &context->available_out, &context->next_out, 0);
- }
-}
-
-/* Default brotli_alloc_func */
-void* BrotliAllocFunc(void* opaque, size_t size) {
- *(size_t *)opaque = *(size_t *) opaque + size;
- return malloc(size);
-}
-
-/* Default brotli_free_func */
-void BrotliFreeFunc(void* opaque, void* address) {
- free(address);
-}
-
-size_t scratch_buffer_size = 0;
-
-static BROTLI_BOOL DecompressFiles(Context* context) {
- while (NextFile(context)) {
- BROTLI_BOOL is_ok = BROTLI_TRUE;
- BrotliDecoderState* s = BrotliDecoderCreateInstance(BrotliAllocFunc, BrotliFreeFunc, &scratch_buffer_size);
- if (!s) {
- fprintf(stderr, "out of memory\n");
- return BROTLI_FALSE;
- }
- /* This allows decoding "large-window" streams. Though it creates
- fragmentation (new builds decode streams that old builds don't),
- it is better from used experience perspective. */
- BrotliDecoderSetParameter(s, BROTLI_DECODER_PARAM_LARGE_WINDOW, 1u);
- is_ok = OpenFiles(context);
- if (is_ok && !context->current_input_path &&
- !context->force_overwrite && isatty(STDIN_FILENO)) {
- fprintf(stderr, "Use -h help. Use -f to force input from a terminal.\n");
- is_ok = BROTLI_FALSE;
- }
- if (is_ok) is_ok = DecompressFile(context, s);
- BrotliDecoderDestroyInstance(s);
- if (!CloseFiles(context, is_ok)) is_ok = BROTLI_FALSE;
- if (!is_ok) return BROTLI_FALSE;
- }
- return BROTLI_TRUE;
-}
-
-static BROTLI_BOOL CompressFile(Context* context, BrotliEncoderState* s) {
- BROTLI_BOOL is_eof = BROTLI_FALSE;
- InitializeBuffers(context);
- for (;;) {
- if (context->available_in == 0 && !is_eof) {
- if (!ProvideInput(context)) return BROTLI_FALSE;
- is_eof = !HasMoreInput(context);
- }
-
- if (!BrotliEncoderCompressStream(s,
- is_eof ? BROTLI_OPERATION_FINISH : BROTLI_OPERATION_PROCESS,
- &context->available_in, &context->next_in,
- &context->available_out, &context->next_out, NULL)) {
- /* Should detect OOM? */
- fprintf(stderr, "failed to compress data [%s]\n",
- PrintablePath(context->current_input_path));
- return BROTLI_FALSE;
- }
-
- if (context->available_out == 0) {
- if (!ProvideOutput(context)) return BROTLI_FALSE;
- }
-
- if (BrotliEncoderIsFinished(s)) {
- return FlushOutput(context);
- }
- }
-}
-
-static BROTLI_BOOL CompressFiles(Context* context) {
- while (NextFile(context)) {
- BROTLI_BOOL is_ok = BROTLI_TRUE;
- BrotliEncoderState* s = BrotliEncoderCreateInstance(NULL, NULL, NULL);
- if (!s) {
- fprintf(stderr, "out of memory\n");
- return BROTLI_FALSE;
- }
- BrotliEncoderSetParameter(s,
- BROTLI_PARAM_QUALITY, (uint32_t)context->quality);
- if (context->lgwin > 0) {
- /* Specified by user. */
- /* Do not enable "large-window" extension, if not required. */
- if (context->lgwin > BROTLI_MAX_WINDOW_BITS) {
- BrotliEncoderSetParameter(s, BROTLI_PARAM_LARGE_WINDOW, 1u);
- }
- BrotliEncoderSetParameter(s,
- BROTLI_PARAM_LGWIN, (uint32_t)context->lgwin);
- } else {
- /* 0, or not specified by user; could be chosen by compressor. */
- uint32_t lgwin = DEFAULT_LGWIN;
- /* Use file size to limit lgwin. */
- if (context->input_file_length >= 0) {
- int32_t size = 1 << BROTLI_MIN_WINDOW_BITS;
- lgwin = BROTLI_MIN_WINDOW_BITS;
- while (size < context->input_file_length) {
- size <<= 1;
- lgwin++;
- if (lgwin == BROTLI_MAX_WINDOW_BITS) break;
- }
- }
- BrotliEncoderSetParameter(s, BROTLI_PARAM_LGWIN, lgwin);
- }
- if (context->input_file_length > 0) {
- uint32_t size_hint = context->input_file_length < (1 << 30) ?
- (uint32_t)context->input_file_length : (1u << 30);
- BrotliEncoderSetParameter(s, BROTLI_PARAM_SIZE_HINT, size_hint);
- }
- is_ok = OpenFiles(context);
- if (is_ok && !context->current_output_path &&
- !context->force_overwrite && isatty(STDOUT_FILENO)) {
- fprintf(stderr, "Use -h help. Use -f to force output to a terminal.\n");
- is_ok = BROTLI_FALSE;
- }
- if (is_ok) is_ok = CompressFile(context, s);
- BrotliEncoderDestroyInstance(s);
- if (!CloseFiles(context, is_ok)) is_ok = BROTLI_FALSE;
- if (!is_ok) return BROTLI_FALSE;
- }
- return BROTLI_TRUE;
-}
-
-int main(int argc, char** argv) {
- Command command;
- Context context;
- Context context_dec;
- BROTLI_BOOL is_ok = BROTLI_TRUE;
- int i;
-
- context.quality = 11;
- context.lgwin = -1;
- context.gmem = 1;
- context.force_overwrite = BROTLI_FALSE;
- context.junk_source = BROTLI_FALSE;
- context.copy_stat = BROTLI_TRUE;
- context.test_integrity = BROTLI_FALSE;
- context.verbose = BROTLI_FALSE;
- context.write_to_stdout = BROTLI_FALSE;
- context.decompress = BROTLI_FALSE;
- context.large_window = BROTLI_FALSE;
- context.output_path = NULL;
- context.suffix = DEFAULT_SUFFIX;
- for (i = 0; i < MAX_OPTIONS; ++i) context.not_input_indices[i] = 0;
- context.longest_path_len = 1;
- context.input_count = 0;
-
- context.argc = argc;
- context.argv = argv;
- context.modified_path = NULL;
- context.iterator = 0;
- context.ignore = 0;
- context.iterator_error = BROTLI_FALSE;
- context.buffer = NULL;
- context.current_input_path = NULL;
- context.current_output_path = NULL;
- context.fin = NULL;
- context.fout = NULL;
-
- command = ParseParams(&context);
-
- if (command == COMMAND_COMPRESS || command == COMMAND_DECOMPRESS ||
- command == COMMAND_TEST_INTEGRITY) {
- if (is_ok) {
- size_t modified_path_len =
- context.longest_path_len + strlen(context.suffix) + 1;
- context.modified_path = (char*)malloc(modified_path_len);
- context.buffer = (uint8_t*)malloc(kFileBufferSize * 2);
- if (!context.modified_path || !context.buffer) {
- fprintf(stderr, "out of memory\n");
- is_ok = BROTLI_FALSE;
- } else {
- context.input = context.buffer;
- context.output = context.buffer + kFileBufferSize;
- }
- }
- }
-
- if (!is_ok) command = COMMAND_NOOP;
-
- switch (command) {
- case COMMAND_NOOP:
- break;
-
- case COMMAND_VERSION:
- PrintVersion();
- break;
-
- case COMMAND_COMPRESS:
- memcpy (&context_dec, &context, sizeof (context));
- is_ok = CompressFiles(&context);
- if (!is_ok) {
- break;
- }
- context_dec.decompress = BROTLI_TRUE;
- context_dec.input_count = 1;
- context_dec.current_input_path = context_dec.output_path;
- context_dec.fout = tmpfile ();
- is_ok = DecompressFiles(&context_dec);
- if (!is_ok) {
- break;
- }
- //
- // fill decoder header
- //
- context_dec.fout = fopen(context_dec.output_path, "rb+"); /* open output_path file and add in head info */
- fwrite(&input_file_length, 1, sizeof(int64_t), context_dec.fout);
- scratch_buffer_size += context.gmem * GAP_MEM_BLOCK; /* there is a memory gap between IA32 and X64 environment*/
- scratch_buffer_size += kFileBufferSize * 2;
- fwrite(&scratch_buffer_size, 1, sizeof(int64_t), context_dec.fout);
- if (fclose(context_dec.fout) != 0) {
- fprintf(stderr, "failed to update ouptut file: %s\n", context_dec.output_path);
- is_ok = 0;
- }
- break;
-
- case COMMAND_DECOMPRESS:
- case COMMAND_TEST_INTEGRITY:
- is_ok = DecompressFiles(&context);
- break;
-
- case COMMAND_HELP:
- case COMMAND_INVALID:
- default:
- is_ok = (command == COMMAND_HELP);
- PrintHelp(FileName(argv[0]), is_ok);
- break;
- }
-
- if (context.iterator_error) is_ok = BROTLI_FALSE;
-
- free(context.modified_path);
- free(context.buffer);
-
- if (!is_ok) exit(1);
- return 0;
-}
diff --git a/.gitmodules b/.gitmodules
index 8032dceecacc..1714b6c0a65e 100644
--- a/.gitmodules
+++ b/.gitmodules
@@ -10,3 +10,6 @@
[submodule "MdeModulePkg/Library/BrotliCustomDecompressLib/brotli"]
path = MdeModulePkg/Library/BrotliCustomDecompressLib/brotli
url = https://github.com/google/brotli
+[submodule "BaseTools/Source/C/BrotliCompress/brotli"]
+ path = BaseTools/Source/C/BrotliCompress/brotli
+ url = https://github.com/google/brotli
diff --git a/BaseTools/Source/C/BrotliCompress/GNUmakefile b/BaseTools/Source/C/BrotliCompress/GNUmakefile
index fdf713e8b236..9544837263ca 100644
--- a/BaseTools/Source/C/BrotliCompress/GNUmakefile
+++ b/BaseTools/Source/C/BrotliCompress/GNUmakefile
@@ -1,7 +1,7 @@
## @file
# GNU/Linux makefile for 'Brotli' module build.
#
-# Copyright (c) 2017 - 2018, Intel Corporation. All rights reserved.<BR>
+# Copyright (c) 2017 - 2020, Intel Corporation. All rights reserved.<BR>
# SPDX-License-Identifier: BSD-2-Clause-Patent
#
MAKEROOT ?= ..
@@ -9,33 +9,33 @@ MAKEROOT ?= ..
APPNAME = Brotli
OBJECTS = \
- tools/brotli.o \
- common/dictionary.o \
- common/transform.o \
- dec/bit_reader.o \
- dec/decode.o \
- dec/huffman.o \
- dec/state.o \
- enc/backward_references.o \
- enc/backward_references_hq.o \
- enc/bit_cost.o \
- enc/block_splitter.o \
- enc/brotli_bit_stream.o \
- enc/cluster.o \
- enc/compress_fragment.o \
- enc/compress_fragment_two_pass.o \
- enc/dictionary_hash.o \
- enc/encode.o \
- enc/encoder_dict.o \
- enc/entropy_encode.o \
- enc/histogram.o \
- enc/literal_cost.o \
- enc/memory.o \
- enc/metablock.o \
- enc/static_dict.o \
- enc/utf8_util.o
+ brotli/c/tools/brotli.o \
+ brotli/c/common/dictionary.o \
+ brotli/c/common/transform.o \
+ brotli/c/dec/bit_reader.o \
+ brotli/c/dec/decode.o \
+ brotli/c/dec/huffman.o \
+ brotli/c/dec/state.o \
+ brotli/c/enc/backward_references.o \
+ brotli/c/enc/backward_references_hq.o \
+ brotli/c/enc/bit_cost.o \
+ brotli/c/enc/block_splitter.o \
+ brotli/c/enc/brotli_bit_stream.o \
+ brotli/c/enc/cluster.o \
+ brotli/c/enc/compress_fragment.o \
+ brotli/c/enc/compress_fragment_two_pass.o \
+ brotli/c/enc/dictionary_hash.o \
+ brotli/c/enc/encode.o \
+ brotli/c/enc/encoder_dict.o \
+ brotli/c/enc/entropy_encode.o \
+ brotli/c/enc/histogram.o \
+ brotli/c/enc/literal_cost.o \
+ brotli/c/enc/memory.o \
+ brotli/c/enc/metablock.o \
+ brotli/c/enc/static_dict.o \
+ brotli/c/enc/utf8_util.o
include $(MAKEROOT)/Makefiles/app.makefile
-TOOL_INCLUDE = -I ./include
+TOOL_INCLUDE = -I ./brotli/c/include
LIBS += -lm
diff --git a/BaseTools/Source/C/BrotliCompress/LICENSE b/BaseTools/Source/C/BrotliCompress/LICENSE
deleted file mode 100644
index 49550fc2d06e..000000000000
--- a/BaseTools/Source/C/BrotliCompress/LICENSE
+++ /dev/null
@@ -1,19 +0,0 @@
-Copyright (c) 2009, 2010, 2013-2016 by the Brotli Authors.
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
-THE SOFTWARE.
diff --git a/BaseTools/Source/C/BrotliCompress/Makefile b/BaseTools/Source/C/BrotliCompress/Makefile
index 4c03b0e6df17..b805ff1e5870 100644
--- a/BaseTools/Source/C/BrotliCompress/Makefile
+++ b/BaseTools/Source/C/BrotliCompress/Makefile
@@ -1,46 +1,46 @@
## @file
# Windows makefile for 'Brotli' module build.
#
-# Copyright (c) 2017 - 2018, Intel Corporation. All rights reserved.<BR>
+# Copyright (c) 2017 - 2020, Intel Corporation. All rights reserved.<BR>
# SPDX-License-Identifier: BSD-2-Clause-Patent
#
!INCLUDE ..\Makefiles\ms.common
-INC = -I .\include $(INC)
+INC = -I .\brotli\c\include $(INC)
CFLAGS = $(CFLAGS) /W2
APPNAME = Brotli
#LIBS = $(LIB_PATH)\Common.lib
-COMMON_OBJ = common\dictionary.obj common\transform.obj
+COMMON_OBJ = brotli\c\common\dictionary.obj brotli\c\common\transform.obj
DEC_OBJ = \
- dec\bit_reader.obj \
- dec\decode.obj \
- dec\huffman.obj \
- dec\state.obj
+ brotli\c\dec\bit_reader.obj \
+ brotli\c\dec\decode.obj \
+ brotli\c\dec\huffman.obj \
+ brotli\c\dec\state.obj
ENC_OBJ = \
- enc\backward_references.obj \
- enc\backward_references_hq.obj \
- enc\bit_cost.obj \
- enc\block_splitter.obj \
- enc\brotli_bit_stream.obj \
- enc\cluster.obj \
- enc\compress_fragment.obj \
- enc\compress_fragment_two_pass.obj \
- enc\dictionary_hash.obj \
- enc\encode.obj \
- enc\encoder_dict.obj \
- enc\entropy_encode.obj \
- enc\histogram.obj \
- enc\literal_cost.obj \
- enc\memory.obj \
- enc\metablock.obj \
- enc\static_dict.obj \
- enc\utf8_util.obj
+ brotli\c\enc\backward_references.obj \
+ brotli\c\enc\backward_references_hq.obj \
+ brotli\c\enc\bit_cost.obj \
+ brotli\c\enc\block_splitter.obj \
+ brotli\c\enc\brotli_bit_stream.obj \
+ brotli\c\enc\cluster.obj \
+ brotli\c\enc\compress_fragment.obj \
+ brotli\c\enc\compress_fragment_two_pass.obj \
+ brotli\c\enc\dictionary_hash.obj \
+ brotli\c\enc\encode.obj \
+ brotli\c\enc\encoder_dict.obj \
+ brotli\c\enc\entropy_encode.obj \
+ brotli\c\enc\histogram.obj \
+ brotli\c\enc\literal_cost.obj \
+ brotli\c\enc\memory.obj \
+ brotli\c\enc\metablock.obj \
+ brotli\c\enc\static_dict.obj \
+ brotli\c\enc\utf8_util.obj
OBJECTS = \
- tools\brotli.obj \
+ brotli\c\tools\brotli.obj \
$(COMMON_OBJ) \
$(DEC_OBJ) \
$(ENC_OBJ)
diff --git a/BaseTools/Source/C/BrotliCompress/README.md b/BaseTools/Source/C/BrotliCompress/README.md
deleted file mode 100644
index 01848adc170a..000000000000
--- a/BaseTools/Source/C/BrotliCompress/README.md
+++ /dev/null
@@ -1,26 +0,0 @@
-### Introduction
-
-Brotli is a generic-purpose lossless compression algorithm that compresses data
-using a combination of a modern variant of the LZ77 algorithm, Huffman coding
-and 2nd order context modeling, with a compression ratio comparable to the best
-currently available general-purpose compression methods. It is similar in speed
-with deflate but offers more dense compression.
-
-The specification of the Brotli Compressed Data Format is defined in [RFC 7932](https://www.ietf.org/rfc/rfc7932.txt).
-
-Brotli is open-sourced under the MIT License, see the LICENSE file.
-
-Brotli mailing list:
-https://groups.google.com/forum/#!forum/brotli
-
-[![Build Status](https://travis-ci.org/google/brotli.svg?branch=master)](https://travis-ci.org/google/brotli)
-
-### Benchmarks
-* [Squash Compression Benchmark](https://quixdb.github.io/squash-benchmark/) / [Unstable Squash Compression Benchmark](https://quixdb.github.io/squash-benchmark/unstable/)
-* [Large Text Compression Benchmark](http://mattmahoney.net/dc/text.html)
-* [Lzturbo Benchmark](https://sites.google.com/site/powturbo/home/benchmark)
-
-### Related projects
-Independent [decoder](https://github.com/madler/brotli) implementation by Mark Adler, based entirely on format specification.
-
-JavaScript port of brotli [decoder](https://github.com/devongovett/brotli.js). Could be used directly via `npm install brotli`
diff --git a/BaseTools/Source/C/BrotliCompress/ReadMe.txt b/BaseTools/Source/C/BrotliCompress/ReadMe.txt
deleted file mode 100644
index 399ec38d4081..000000000000
--- a/BaseTools/Source/C/BrotliCompress/ReadMe.txt
+++ /dev/null
@@ -1,2 +0,0 @@
-It is based on the Brotli v1.0.6.
-Brotli was released on the website https://github.com/google/brotli.
diff --git a/BaseTools/Source/C/BrotliCompress/brotli b/BaseTools/Source/C/BrotliCompress/brotli
new file mode 160000
index 000000000000..666c3280cc11
--- /dev/null
+++ b/BaseTools/Source/C/BrotliCompress/brotli
@@ -0,0 +1 @@
+Subproject commit 666c3280cc11dc433c303d79a83d4ffbdd12cc8d
diff --git a/BaseTools/Source/C/BrotliCompress/common/constants.h b/BaseTools/Source/C/BrotliCompress/common/constants.h
deleted file mode 100644
index 1a29f035e899..000000000000
--- a/BaseTools/Source/C/BrotliCompress/common/constants.h
+++ /dev/null
@@ -1,64 +0,0 @@
-/* Copyright 2016 Google Inc. All Rights Reserved.
-
- Distributed under MIT license.
- See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
-*/
-
-#ifndef BROTLI_COMMON_CONSTANTS_H_
-#define BROTLI_COMMON_CONSTANTS_H_
-
-/* Specification: 7.3. Encoding of the context map */
-#define BROTLI_CONTEXT_MAP_MAX_RLE 16
-
-/* Specification: 2. Compressed representation overview */
-#define BROTLI_MAX_NUMBER_OF_BLOCK_TYPES 256
-
-/* Specification: 3.3. Alphabet sizes: insert-and-copy length */
-#define BROTLI_NUM_LITERAL_SYMBOLS 256
-#define BROTLI_NUM_COMMAND_SYMBOLS 704
-#define BROTLI_NUM_BLOCK_LEN_SYMBOLS 26
-#define BROTLI_MAX_CONTEXT_MAP_SYMBOLS (BROTLI_MAX_NUMBER_OF_BLOCK_TYPES + \
- BROTLI_CONTEXT_MAP_MAX_RLE)
-#define BROTLI_MAX_BLOCK_TYPE_SYMBOLS (BROTLI_MAX_NUMBER_OF_BLOCK_TYPES + 2)
-
-/* Specification: 3.5. Complex prefix codes */
-#define BROTLI_REPEAT_PREVIOUS_CODE_LENGTH 16
-#define BROTLI_REPEAT_ZERO_CODE_LENGTH 17
-#define BROTLI_CODE_LENGTH_CODES (BROTLI_REPEAT_ZERO_CODE_LENGTH + 1)
-/* "code length of 8 is repeated" */
-#define BROTLI_INITIAL_REPEATED_CODE_LENGTH 8
-
-/* "Large Window Brotli" */
-#define BROTLI_LARGE_MAX_DISTANCE_BITS 62U
-#define BROTLI_LARGE_MIN_WBITS 10
-#define BROTLI_LARGE_MAX_WBITS 30
-
-/* Specification: 4. Encoding of distances */
-#define BROTLI_NUM_DISTANCE_SHORT_CODES 16
-#define BROTLI_MAX_NPOSTFIX 3
-#define BROTLI_MAX_NDIRECT 120
-#define BROTLI_MAX_DISTANCE_BITS 24U
-#define BROTLI_DISTANCE_ALPHABET_SIZE(NPOSTFIX, NDIRECT, MAXNBITS) ( \
- BROTLI_NUM_DISTANCE_SHORT_CODES + (NDIRECT) + \
- ((MAXNBITS) << ((NPOSTFIX) + 1)))
-/* BROTLI_NUM_DISTANCE_SYMBOLS == 1128 */
-#define BROTLI_NUM_DISTANCE_SYMBOLS \
- BROTLI_DISTANCE_ALPHABET_SIZE( \
- BROTLI_MAX_NDIRECT, BROTLI_MAX_NPOSTFIX, BROTLI_LARGE_MAX_DISTANCE_BITS)
-#define BROTLI_MAX_DISTANCE 0x3FFFFFC
-#define BROTLI_MAX_ALLOWED_DISTANCE 0x7FFFFFFC
-
-/* 7.1. Context modes and context ID lookup for literals */
-/* "context IDs for literals are in the range of 0..63" */
-#define BROTLI_LITERAL_CONTEXT_BITS 6
-
-/* 7.2. Context ID for distances */
-#define BROTLI_DISTANCE_CONTEXT_BITS 2
-
-/* 9.1. Format of the Stream Header */
-/* Number of slack bytes for window size. Don't confuse
- with BROTLI_NUM_DISTANCE_SHORT_CODES. */
-#define BROTLI_WINDOW_GAP 16
-#define BROTLI_MAX_BACKWARD_LIMIT(W) (((size_t)1 << (W)) - BROTLI_WINDOW_GAP)
-
-#endif /* BROTLI_COMMON_CONSTANTS_H_ */
diff --git a/BaseTools/Source/C/BrotliCompress/common/context.h b/BaseTools/Source/C/BrotliCompress/common/context.h
deleted file mode 100644
index 7ffc640eafa4..000000000000
--- a/BaseTools/Source/C/BrotliCompress/common/context.h
+++ /dev/null
@@ -1,261 +0,0 @@
-/* Copyright 2013 Google Inc. All Rights Reserved.
-
- Distributed under MIT license.
- See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
-*/
-
-/* Lookup table to map the previous two bytes to a context id.
-
- There are four different context modeling modes defined here:
- CONTEXT_LSB6: context id is the least significant 6 bits of the last byte,
- CONTEXT_MSB6: context id is the most significant 6 bits of the last byte,
- CONTEXT_UTF8: second-order context model tuned for UTF8-encoded text,
- CONTEXT_SIGNED: second-order context model tuned for signed integers.
-
- If |p1| and |p2| are the previous two bytes, and |mode| is current context
- mode, we calculate the context as:
-
- context = ContextLut(mode)[p1] | ContextLut(mode)[p2 + 256].
-
- For CONTEXT_UTF8 mode, if the previous two bytes are ASCII characters
- (i.e. < 128), this will be equivalent to
-
- context = 4 * context1(p1) + context2(p2),
-
- where context1 is based on the previous byte in the following way:
-
- 0 : non-ASCII control
- 1 : \t, \n, \r
- 2 : space
- 3 : other punctuation
- 4 : " '
- 5 : %
- 6 : ( < [ {
- 7 : ) > ] }
- 8 : , ; :
- 9 : .
- 10 : =
- 11 : number
- 12 : upper-case vowel
- 13 : upper-case consonant
- 14 : lower-case vowel
- 15 : lower-case consonant
-
- and context2 is based on the second last byte:
-
- 0 : control, space
- 1 : punctuation
- 2 : upper-case letter, number
- 3 : lower-case letter
-
- If the last byte is ASCII, and the second last byte is not (in a valid UTF8
- stream it will be a continuation byte, value between 128 and 191), the
- context is the same as if the second last byte was an ASCII control or space.
-
- If the last byte is a UTF8 lead byte (value >= 192), then the next byte will
- be a continuation byte and the context id is 2 or 3 depending on the LSB of
- the last byte and to a lesser extent on the second last byte if it is ASCII.
-
- If the last byte is a UTF8 continuation byte, the second last byte can be:
- - continuation byte: the next byte is probably ASCII or lead byte (assuming
- 4-byte UTF8 characters are rare) and the context id is 0 or 1.
- - lead byte (192 - 207): next byte is ASCII or lead byte, context is 0 or 1
- - lead byte (208 - 255): next byte is continuation byte, context is 2 or 3
-
- The possible value combinations of the previous two bytes, the range of
- context ids and the type of the next byte is summarized in the table below:
-
- |--------\-----------------------------------------------------------------|
- | \ Last byte |
- | Second \---------------------------------------------------------------|
- | last byte \ ASCII | cont. byte | lead byte |
- | \ (0-127) | (128-191) | (192-) |
- |=============|===================|=====================|==================|
- | ASCII | next: ASCII/lead | not valid | next: cont. |
- | (0-127) | context: 4 - 63 | | context: 2 - 3 |
- |-------------|-------------------|---------------------|------------------|
- | cont. byte | next: ASCII/lead | next: ASCII/lead | next: cont. |
- | (128-191) | context: 4 - 63 | context: 0 - 1 | context: 2 - 3 |
- |-------------|-------------------|---------------------|------------------|
- | lead byte | not valid | next: ASCII/lead | not valid |
- | (192-207) | | context: 0 - 1 | |
- |-------------|-------------------|---------------------|------------------|
- | lead byte | not valid | next: cont. | not valid |
- | (208-) | | context: 2 - 3 | |
- |-------------|-------------------|---------------------|------------------|
-*/
-
-#ifndef BROTLI_COMMON_CONTEXT_H_
-#define BROTLI_COMMON_CONTEXT_H_
-
-#include <brotli/types.h>
-
-typedef enum ContextType {
- CONTEXT_LSB6 = 0,
- CONTEXT_MSB6 = 1,
- CONTEXT_UTF8 = 2,
- CONTEXT_SIGNED = 3
-} ContextType;
-
-/* Common context lookup table for all context modes. */
-static const uint8_t kContextLookup[2048] = {
- /* CONTEXT_LSB6, last byte. */
- 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
- 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,
- 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,
- 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63,
- 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
- 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,
- 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,
- 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63,
- 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
- 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,
- 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,
- 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63,
- 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
- 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,
- 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,
- 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63,
-
- /* CONTEXT_LSB6, second last byte, */
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* CONTEXT_MSB6, last byte. */
- 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3,
- 4, 4, 4, 4, 5, 5, 5, 5, 6, 6, 6, 6, 7, 7, 7, 7,
- 8, 8, 8, 8, 9, 9, 9, 9, 10, 10, 10, 10, 11, 11, 11, 11,
- 12, 12, 12, 12, 13, 13, 13, 13, 14, 14, 14, 14, 15, 15, 15, 15,
- 16, 16, 16, 16, 17, 17, 17, 17, 18, 18, 18, 18, 19, 19, 19, 19,
- 20, 20, 20, 20, 21, 21, 21, 21, 22, 22, 22, 22, 23, 23, 23, 23,
- 24, 24, 24, 24, 25, 25, 25, 25, 26, 26, 26, 26, 27, 27, 27, 27,
- 28, 28, 28, 28, 29, 29, 29, 29, 30, 30, 30, 30, 31, 31, 31, 31,
- 32, 32, 32, 32, 33, 33, 33, 33, 34, 34, 34, 34, 35, 35, 35, 35,
- 36, 36, 36, 36, 37, 37, 37, 37, 38, 38, 38, 38, 39, 39, 39, 39,
- 40, 40, 40, 40, 41, 41, 41, 41, 42, 42, 42, 42, 43, 43, 43, 43,
- 44, 44, 44, 44, 45, 45, 45, 45, 46, 46, 46, 46, 47, 47, 47, 47,
- 48, 48, 48, 48, 49, 49, 49, 49, 50, 50, 50, 50, 51, 51, 51, 51,
- 52, 52, 52, 52, 53, 53, 53, 53, 54, 54, 54, 54, 55, 55, 55, 55,
- 56, 56, 56, 56, 57, 57, 57, 57, 58, 58, 58, 58, 59, 59, 59, 59,
- 60, 60, 60, 60, 61, 61, 61, 61, 62, 62, 62, 62, 63, 63, 63, 63,
-
- /* CONTEXT_MSB6, second last byte, */
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
- /* CONTEXT_UTF8, last byte. */
- /* ASCII range. */
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 0, 0, 4, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 8, 12, 16, 12, 12, 20, 12, 16, 24, 28, 12, 12, 32, 12, 36, 12,
- 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 32, 32, 24, 40, 28, 12,
- 12, 48, 52, 52, 52, 48, 52, 52, 52, 48, 52, 52, 52, 52, 52, 48,
- 52, 52, 52, 52, 52, 48, 52, 52, 52, 52, 52, 24, 12, 28, 12, 12,
- 12, 56, 60, 60, 60, 56, 60, 60, 60, 56, 60, 60, 60, 60, 60, 56,
- 60, 60, 60, 60, 60, 56, 60, 60, 60, 60, 60, 24, 12, 28, 12, 0,
- /* UTF8 continuation byte range. */
- 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1,
- 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1,
- 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1,
- 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1,
- /* UTF8 lead byte range. */
- 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3,
- 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3,
- 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3,
- 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3,
-
- /* CONTEXT_UTF8 second last byte. */
- /* ASCII range. */
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1,
- 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1,
- 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
- 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 1, 1, 1, 0,
- /* UTF8 continuation byte range. */
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- /* UTF8 lead byte range. */
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
-
- /* CONTEXT_SIGNED, last byte, same as the above values shifted by 3 bits. */
- 0, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
- 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
- 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
- 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
- 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
- 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
- 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
- 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
- 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
- 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
- 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
- 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
- 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40,
- 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40,
- 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40,
- 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 56,
-
- /* CONTEXT_SIGNED, second last byte. */
- 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
- 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
- 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
- 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
- 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
- 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
- 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
- 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 7,
-};
-
-typedef const uint8_t* ContextLut;
-
-/* typeof(MODE) == ContextType; returns ContextLut */
-#define BROTLI_CONTEXT_LUT(MODE) (&kContextLookup[(MODE) << 9])
-
-/* typeof(LUT) == ContextLut */
-#define BROTLI_CONTEXT(P1, P2, LUT) ((LUT)[P1] | ((LUT) + 256)[P2])
-
-#endif /* BROTLI_COMMON_CONTEXT_H_ */
diff --git a/BaseTools/Source/C/BrotliCompress/common/dictionary.h b/BaseTools/Source/C/BrotliCompress/common/dictionary.h
deleted file mode 100644
index a68a1c54493e..000000000000
--- a/BaseTools/Source/C/BrotliCompress/common/dictionary.h
+++ /dev/null
@@ -1,64 +0,0 @@
-/* Copyright 2013 Google Inc. All Rights Reserved.
-
- Distributed under MIT license.
- See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
-*/
-
-/* Collection of static dictionary words. */
-
-#ifndef BROTLI_COMMON_DICTIONARY_H_
-#define BROTLI_COMMON_DICTIONARY_H_
-
-#include <brotli/port.h>
-#include <brotli/types.h>
-
-#if defined(__cplusplus) || defined(c_plusplus)
-extern "C" {
-#endif
-
-typedef struct BrotliDictionary {
- /**
- * Number of bits to encode index of dictionary word in a bucket.
- *
- * Specification: Appendix A. Static Dictionary Data
- *
- * Words in a dictionary are bucketed by length.
- * @c 0 means that there are no words of a given length.
- * Dictionary consists of words with length of [4..24] bytes.
- * Values at [0..3] and [25..31] indices should not be addressed.
- */
- uint8_t size_bits_by_length[32];
-
- /* assert(offset[i + 1] == offset[i] + (bits[i] ? (i << bits[i]) : 0)) */
- uint32_t offsets_by_length[32];
-
- /* assert(data_size == offsets_by_length[31]) */
- size_t data_size;
-
- /* Data array is not bound, and should obey to size_bits_by_length values.
- Specified size matches default (RFC 7932) dictionary. Its size is
- defined by data_size */
- const uint8_t* data;
-} BrotliDictionary;
-
-BROTLI_COMMON_API const BrotliDictionary* BrotliGetDictionary(void);
-
-/**
- * Sets dictionary data.
- *
- * When dictionary data is already set / present, this method is no-op.
- *
- * Dictionary data MUST be provided before BrotliGetDictionary is invoked.
- * This method is used ONLY in multi-client environment (e.g. C + Java),
- * to reduce storage by sharing single dictionary between implementations.
- */
-BROTLI_COMMON_API void BrotliSetDictionaryData(const uint8_t* data);
-
-#define BROTLI_MIN_DICTIONARY_WORD_LENGTH 4
-#define BROTLI_MAX_DICTIONARY_WORD_LENGTH 24
-
-#if defined(__cplusplus) || defined(c_plusplus)
-} /* extern "C" */
-#endif
-
-#endif /* BROTLI_COMMON_DICTIONARY_H_ */
diff --git a/BaseTools/Source/C/BrotliCompress/common/platform.h b/BaseTools/Source/C/BrotliCompress/common/platform.h
deleted file mode 100644
index b83ed6ca258a..000000000000
--- a/BaseTools/Source/C/BrotliCompress/common/platform.h
+++ /dev/null
@@ -1,558 +0,0 @@
-/* Copyright 2016 Google Inc. All Rights Reserved.
-
- Distributed under MIT license.
- See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
-*/
-
-/* Macros for compiler / platform specific features and build options.
-
- Build options are:
- * BROTLI_BUILD_32_BIT disables 64-bit optimizations
- * BROTLI_BUILD_64_BIT forces to use 64-bit optimizations
- * BROTLI_BUILD_BIG_ENDIAN forces to use big-endian optimizations
- * BROTLI_BUILD_ENDIAN_NEUTRAL disables endian-aware optimizations
- * BROTLI_BUILD_LITTLE_ENDIAN forces to use little-endian optimizations
- * BROTLI_BUILD_PORTABLE disables dangerous optimizations, like unaligned
- read and overlapping memcpy; this reduces decompression speed by 5%
- * BROTLI_BUILD_NO_RBIT disables "rbit" optimization for ARM CPUs
- * BROTLI_DEBUG dumps file name and line number when decoder detects stream
- or memory error
- * BROTLI_ENABLE_LOG enables asserts and dumps various state information
-*/
-
-#ifndef BROTLI_COMMON_PLATFORM_H_
-#define BROTLI_COMMON_PLATFORM_H_
-
-#include <string.h> /* memcpy */
-#include <stdlib.h> /* malloc, free */
-
-#include <brotli/port.h>
-#include <brotli/types.h>
-
-#if defined(OS_LINUX) || defined(OS_CYGWIN)
-#include <endian.h>
-#elif defined(OS_FREEBSD)
-#include <machine/endian.h>
-#elif defined(OS_MACOSX)
-#include <machine/endian.h>
-/* Let's try and follow the Linux convention */
-#define BROTLI_X_BYTE_ORDER BYTE_ORDER
-#define BROTLI_X_LITTLE_ENDIAN LITTLE_ENDIAN
-#define BROTLI_X_BIG_ENDIAN BIG_ENDIAN
-#endif
-
-#if defined(BROTLI_ENABLE_LOG) || defined(BROTLI_DEBUG)
-#include <assert.h>
-#include <stdio.h>
-#endif
-
-/* The following macros were borrowed from https://github.com/nemequ/hedley
- * with permission of original author - Evan Nemerson <evan@nemerson.com> */
-
-/* >>> >>> >>> hedley macros */
-
-/* Define "BROTLI_PREDICT_TRUE" and "BROTLI_PREDICT_FALSE" macros for capable
- compilers.
-
-To apply compiler hint, enclose the branching condition into macros, like this:
-
- if (BROTLI_PREDICT_TRUE(zero == 0)) {
- // main execution path
- } else {
- // compiler should place this code outside of main execution path
- }
-
-OR:
-
- if (BROTLI_PREDICT_FALSE(something_rare_or_unexpected_happens)) {
- // compiler should place this code outside of main execution path
- }
-
-*/
-#if BROTLI_GNUC_HAS_BUILTIN(__builtin_expect, 3, 0, 0) || \
- BROTLI_INTEL_VERSION_CHECK(16, 0, 0) || \
- BROTLI_SUNPRO_VERSION_CHECK(5, 12, 0) || \
- BROTLI_ARM_VERSION_CHECK(4, 1, 0) || \
- BROTLI_IBM_VERSION_CHECK(10, 1, 0) || \
- BROTLI_TI_VERSION_CHECK(7, 3, 0) || \
- BROTLI_TINYC_VERSION_CHECK(0, 9, 27)
-#define BROTLI_PREDICT_TRUE(x) (__builtin_expect(!!(x), 1))
-#define BROTLI_PREDICT_FALSE(x) (__builtin_expect(x, 0))
-#else
-#define BROTLI_PREDICT_FALSE(x) (x)
-#define BROTLI_PREDICT_TRUE(x) (x)
-#endif
-
-#if defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) && \
- !defined(__cplusplus)
-#define BROTLI_RESTRICT restrict
-#elif BROTLI_GNUC_VERSION_CHECK(3, 1, 0) || \
- BROTLI_MSVC_VERSION_CHECK(14, 0, 0) || \
- BROTLI_INTEL_VERSION_CHECK(16, 0, 0) || \
- BROTLI_ARM_VERSION_CHECK(4, 1, 0) || \
- BROTLI_IBM_VERSION_CHECK(10, 1, 0) || \
- BROTLI_PGI_VERSION_CHECK(17, 10, 0) || \
- BROTLI_TI_VERSION_CHECK(8, 0, 0) || \
- BROTLI_IAR_VERSION_CHECK(8, 0, 0) || \
- (BROTLI_SUNPRO_VERSION_CHECK(5, 14, 0) && defined(__cplusplus))
-#define BROTLI_RESTRICT __restrict
-#elif BROTLI_SUNPRO_VERSION_CHECK(5, 3, 0) && !defined(__cplusplus)
-#define BROTLI_RESTRICT _Restrict
-#else
-#define BROTLI_RESTRICT
-#endif
-
-#if (defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L)) || \
- (defined(__cplusplus) && (__cplusplus >= 199711L))
-#define BROTLI_MAYBE_INLINE inline
-#elif defined(__GNUC_STDC_INLINE__) || defined(__GNUC_GNU_INLINE__) || \
- BROTLI_ARM_VERSION_CHECK(6, 2, 0)
-#define BROTLI_MAYBE_INLINE __inline__
-#elif BROTLI_MSVC_VERSION_CHECK(12, 0, 0) || \
- BROTLI_ARM_VERSION_CHECK(4, 1, 0) || BROTLI_TI_VERSION_CHECK(8, 0, 0)
-#define BROTLI_MAYBE_INLINE __inline
-#else
-#define BROTLI_MAYBE_INLINE
-#endif
-
-#if BROTLI_GNUC_HAS_ATTRIBUTE(always_inline, 4, 0, 0) || \
- BROTLI_INTEL_VERSION_CHECK(16, 0, 0) || \
- BROTLI_SUNPRO_VERSION_CHECK(5, 11, 0) || \
- BROTLI_ARM_VERSION_CHECK(4, 1, 0) || \
- BROTLI_IBM_VERSION_CHECK(10, 1, 0) || \
- BROTLI_TI_VERSION_CHECK(8, 0, 0) || \
- (BROTLI_TI_VERSION_CHECK(7, 3, 0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__))
-#define BROTLI_INLINE BROTLI_MAYBE_INLINE __attribute__((__always_inline__))
-#elif BROTLI_MSVC_VERSION_CHECK(12, 0, 0)
-#define BROTLI_INLINE BROTLI_MAYBE_INLINE __forceinline
-#elif BROTLI_TI_VERSION_CHECK(7, 0, 0) && defined(__cplusplus)
-#define BROTLI_INLINE BROTLI_MAYBE_INLINE _Pragma("FUNC_ALWAYS_INLINE;")
-#elif BROTLI_IAR_VERSION_CHECK(8, 0, 0)
-#define BROTLI_INLINE BROTLI_MAYBE_INLINE _Pragma("inline=forced")
-#else
-#define BROTLI_INLINE BROTLI_MAYBE_INLINE
-#endif
-
-#if BROTLI_GNUC_HAS_ATTRIBUTE(noinline, 4, 0, 0) || \
- BROTLI_INTEL_VERSION_CHECK(16, 0, 0) || \
- BROTLI_SUNPRO_VERSION_CHECK(5, 11, 0) || \
- BROTLI_ARM_VERSION_CHECK(4, 1, 0) || \
- BROTLI_IBM_VERSION_CHECK(10, 1, 0) || \
- BROTLI_TI_VERSION_CHECK(8, 0, 0) || \
- (BROTLI_TI_VERSION_CHECK(7, 3, 0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__))
-#define BROTLI_NOINLINE __attribute__((__noinline__))
-#elif BROTLI_MSVC_VERSION_CHECK(13, 10, 0)
-#define BROTLI_NOINLINE __declspec(noinline)
-#elif BROTLI_PGI_VERSION_CHECK(10, 2, 0)
-#define BROTLI_NOINLINE _Pragma("noinline")
-#elif BROTLI_TI_VERSION_CHECK(6, 0, 0) && defined(__cplusplus)
-#define BROTLI_NOINLINE _Pragma("FUNC_CANNOT_INLINE;")
-#elif BROTLI_IAR_VERSION_CHECK(8, 0, 0)
-#define BROTLI_NOINLINE _Pragma("inline=never")
-#else
-#define BROTLI_NOINLINE
-#endif
-
-/* BROTLI_INTERNAL could be defined to override visibility, e.g. for tests. */
-#if !defined(BROTLI_INTERNAL)
-#if defined(_WIN32) || defined(__CYGWIN__)
-#define BROTLI_INTERNAL
-#elif BROTLI_GNUC_VERSION_CHECK(3, 3, 0) || \
- BROTLI_TI_VERSION_CHECK(8, 0, 0) || \
- BROTLI_INTEL_VERSION_CHECK(16, 0, 0) || \
- BROTLI_ARM_VERSION_CHECK(4, 1, 0) || \
- BROTLI_IBM_VERSION_CHECK(13, 1, 0) || \
- BROTLI_SUNPRO_VERSION_CHECK(5, 11, 0) || \
- (BROTLI_TI_VERSION_CHECK(7, 3, 0) && \
- defined(__TI_GNU_ATTRIBUTE_SUPPORT__) && defined(__TI_EABI__))
-#define BROTLI_INTERNAL __attribute__ ((visibility ("hidden")))
-#else
-#define BROTLI_INTERNAL
-#endif
-#endif
-
-/* <<< <<< <<< end of hedley macros. */
-
-#if BROTLI_GNUC_HAS_ATTRIBUTE(unused, 2, 7, 0) || \
- BROTLI_INTEL_VERSION_CHECK(16, 0, 0)
-#define BROTLI_UNUSED_FUNCTION static BROTLI_INLINE __attribute__ ((unused))
-#else
-#define BROTLI_UNUSED_FUNCTION static BROTLI_INLINE
-#endif
-
-#if (defined(__ARM_ARCH) && (__ARM_ARCH == 7)) || \
- (defined(M_ARM) && (M_ARM == 7))
-#define BROTLI_TARGET_ARMV7
-#endif /* ARMv7 */
-
-#if (defined(__ARM_ARCH) && (__ARM_ARCH == 8)) || \
- defined(__aarch64__) || defined(__ARM64_ARCH_8__)
-#define BROTLI_TARGET_ARMV8_ANY
-
-#if defined(__ARM_32BIT_STATE)
-#define BROTLI_TARGET_ARMV8_32
-#elif defined(__ARM_64BIT_STATE)
-#define BROTLI_TARGET_ARMV8_64
-#endif
-
-#endif /* ARMv8 */
-
-#if defined(__i386) || defined(_M_IX86)
-#define BROTLI_TARGET_X86
-#endif
-
-#if defined(__x86_64__) || defined(_M_X64)
-#define BROTLI_TARGET_X64
-#endif
-
-#if defined(__PPC64__)
-#define BROTLI_TARGET_POWERPC64
-#endif
-
-#if defined(__riscv) && defined(__riscv_xlen) && __riscv_xlen == 64
-#define BROTLI_TARGET_RISCV64
-#endif
-
-#if defined(BROTLI_BUILD_64_BIT)
-#define BROTLI_64_BITS 1
-#elif defined(BROTLI_BUILD_32_BIT)
-#define BROTLI_64_BITS 0
-#elif defined(BROTLI_TARGET_X64) || defined(BROTLI_TARGET_ARMV8_64) || \
- defined(BROTLI_TARGET_POWERPC64) || defined(BROTLI_TARGET_RISCV64)
-#define BROTLI_64_BITS 1
-#else
-#define BROTLI_64_BITS 0
-#endif
-
-#if (BROTLI_64_BITS)
-#define brotli_reg_t uint64_t
-#else
-#define brotli_reg_t uint32_t
-#endif
-
-#if defined(BROTLI_BUILD_BIG_ENDIAN)
-#define BROTLI_BIG_ENDIAN 1
-#elif defined(BROTLI_BUILD_LITTLE_ENDIAN)
-#define BROTLI_LITTLE_ENDIAN 1
-#elif defined(BROTLI_BUILD_ENDIAN_NEUTRAL)
-/* Just break elif chain. */
-#elif defined(__BYTE_ORDER__) && (__BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__)
-#define BROTLI_LITTLE_ENDIAN 1
-#elif defined(_WIN32) || defined(BROTLI_TARGET_X64)
-/* Win32 & x64 can currently always be assumed to be little endian */
-#define BROTLI_LITTLE_ENDIAN 1
-#elif defined(__BYTE_ORDER__) && (__BYTE_ORDER__ == __ORDER_BIG_ENDIAN__)
-#define BROTLI_BIG_ENDIAN 1
-#elif defined(BROTLI_X_BYTE_ORDER)
-#if BROTLI_X_BYTE_ORDER == BROTLI_X_LITTLE_ENDIAN
-#define BROTLI_LITTLE_ENDIAN 1
-#elif BROTLI_X_BYTE_ORDER == BROTLI_X_BIG_ENDIAN
-#define BROTLI_BIG_ENDIAN 1
-#endif
-#endif /* BROTLI_X_BYTE_ORDER */
-
-#if !defined(BROTLI_LITTLE_ENDIAN)
-#define BROTLI_LITTLE_ENDIAN 0
-#endif
-
-#if !defined(BROTLI_BIG_ENDIAN)
-#define BROTLI_BIG_ENDIAN 0
-#endif
-
-#if defined(BROTLI_X_BYTE_ORDER)
-#undef BROTLI_X_BYTE_ORDER
-#undef BROTLI_X_LITTLE_ENDIAN
-#undef BROTLI_X_BIG_ENDIAN
-#endif
-
-#if defined(BROTLI_BUILD_PORTABLE)
-#define BROTLI_ALIGNED_READ (!!1)
-#elif defined(BROTLI_TARGET_X86) || defined(BROTLI_TARGET_X64) || \
- defined(BROTLI_TARGET_ARMV7) || defined(BROTLI_TARGET_ARMV8_ANY) || \
- defined(BROTLI_TARGET_RISCV64)
-/* Allow unaligned read only for white-listed CPUs. */
-#define BROTLI_ALIGNED_READ (!!0)
-#else
-#define BROTLI_ALIGNED_READ (!!1)
-#endif
-
-#if BROTLI_ALIGNED_READ
-/* Portable unaligned memory access: read / write values via memcpy. */
-static BROTLI_INLINE uint16_t BrotliUnalignedRead16(const void* p) {
- uint16_t t;
- memcpy(&t, p, sizeof t);
- return t;
-}
-static BROTLI_INLINE uint32_t BrotliUnalignedRead32(const void* p) {
- uint32_t t;
- memcpy(&t, p, sizeof t);
- return t;
-}
-static BROTLI_INLINE uint64_t BrotliUnalignedRead64(const void* p) {
- uint64_t t;
- memcpy(&t, p, sizeof t);
- return t;
-}
-static BROTLI_INLINE void BrotliUnalignedWrite64(void* p, uint64_t v) {
- memcpy(p, &v, sizeof v);
-}
-#else /* BROTLI_ALIGNED_READ */
-/* Unaligned memory access is allowed: just cast pointer to requested type. */
-#if defined(ADDRESS_SANITIZER) || defined(THREAD_SANITIZER) || \
- defined(MEMORY_SANITIZER)
-/* Consider we have an unaligned load/store of 4 bytes from address 0x...05.
- AddressSanitizer will treat it as a 3-byte access to the range 05:07 and
- will miss a bug if 08 is the first unaddressable byte.
- ThreadSanitizer will also treat this as a 3-byte access to 05:07 and will
- miss a race between this access and some other accesses to 08.
- MemorySanitizer will correctly propagate the shadow on unaligned stores
- and correctly report bugs on unaligned loads, but it may not properly
- update and report the origin of the uninitialized memory.
- For all three tools, replacing an unaligned access with a tool-specific
- callback solves the problem. */
-#if defined(__cplusplus)
-extern "C" {
-#endif /* __cplusplus */
- uint16_t __sanitizer_unaligned_load16(const void* p);
- uint32_t __sanitizer_unaligned_load32(const void* p);
- uint64_t __sanitizer_unaligned_load64(const void* p);
- void __sanitizer_unaligned_store64(void* p, uint64_t v);
-#if defined(__cplusplus)
-} /* extern "C" */
-#endif /* __cplusplus */
-#define BrotliUnalignedRead16 __sanitizer_unaligned_load16
-#define BrotliUnalignedRead32 __sanitizer_unaligned_load32
-#define BrotliUnalignedRead64 __sanitizer_unaligned_load64
-#define BrotliUnalignedWrite64 __sanitizer_unaligned_store64
-#else
-static BROTLI_INLINE uint16_t BrotliUnalignedRead16(const void* p) {
- return *(const uint16_t*)p;
-}
-static BROTLI_INLINE uint32_t BrotliUnalignedRead32(const void* p) {
- return *(const uint32_t*)p;
-}
-#if (BROTLI_64_BITS)
-static BROTLI_INLINE uint64_t BrotliUnalignedRead64(const void* p) {
- return *(const uint64_t*)p;
-}
-static BROTLI_INLINE void BrotliUnalignedWrite64(void* p, uint64_t v) {
- *(uint64_t*)p = v;
-}
-#else /* BROTLI_64_BITS */
-/* Avoid emitting LDRD / STRD, which require properly aligned address. */
-/* If __attribute__(aligned) is available, use that. Otherwise, memcpy. */
-
-#if BROTLI_GNUC_HAS_ATTRIBUTE(aligned, 2, 7, 0)
-typedef __attribute__((aligned(1))) uint64_t brotli_unaligned_uint64_t;
-
-static BROTLI_INLINE uint64_t BrotliUnalignedRead64(const void* p) {
- return (uint64_t) ((brotli_unaligned_uint64_t*) p)[0];
-}
-static BROTLI_INLINE void BrotliUnalignedWrite64(void* p, uint64_t v) {
- brotli_unaligned_uint64_t* dwords = (brotli_unaligned_uint64_t*) p;
- dwords[0] = (brotli_unaligned_uint64_t) v;
-}
-#else /* BROTLI_GNUC_HAS_ATTRIBUTE(aligned, 2, 7, 0) */
-static BROTLI_INLINE uint64_t BrotliUnalignedRead64(const void* p) {
- uint64_t v;
- memcpy(&v, p, sizeof(uint64_t));
- return v;
-}
-
-static BROTLI_INLINE void BrotliUnalignedWrite64(void* p, uint64_t v) {
- memcpy(p, &v, sizeof(uint64_t));
-}
-#endif /* BROTLI_GNUC_HAS_ATTRIBUTE(aligned, 2, 7, 0) */
-#endif /* BROTLI_64_BITS */
-#endif /* ASAN / TSAN / MSAN */
-#endif /* BROTLI_ALIGNED_READ */
-
-#if BROTLI_LITTLE_ENDIAN
-/* Straight endianness. Just read / write values. */
-#define BROTLI_UNALIGNED_LOAD16LE BrotliUnalignedRead16
-#define BROTLI_UNALIGNED_LOAD32LE BrotliUnalignedRead32
-#define BROTLI_UNALIGNED_LOAD64LE BrotliUnalignedRead64
-#define BROTLI_UNALIGNED_STORE64LE BrotliUnalignedWrite64
-#elif BROTLI_BIG_ENDIAN /* BROTLI_LITTLE_ENDIAN */
-/* Explain compiler to byte-swap values. */
-#define BROTLI_BSWAP16_(V) ((uint16_t)( \
- (((V) & 0xFFU) << 8) | \
- (((V) >> 8) & 0xFFU)))
-static BROTLI_INLINE uint16_t BROTLI_UNALIGNED_LOAD16LE(const void* p) {
- uint16_t value = BrotliUnalignedRead16(p);
- return BROTLI_BSWAP16_(value);
-}
-#define BROTLI_BSWAP32_(V) ( \
- (((V) & 0xFFU) << 24) | (((V) & 0xFF00U) << 8) | \
- (((V) >> 8) & 0xFF00U) | (((V) >> 24) & 0xFFU))
-static BROTLI_INLINE uint32_t BROTLI_UNALIGNED_LOAD32LE(const void* p) {
- uint32_t value = BrotliUnalignedRead32(p);
- return BROTLI_BSWAP32_(value);
-}
-#define BROTLI_BSWAP64_(V) ( \
- (((V) & 0xFFU) << 56) | (((V) & 0xFF00U) << 40) | \
- (((V) & 0xFF0000U) << 24) | (((V) & 0xFF000000U) << 8) | \
- (((V) >> 8) & 0xFF000000U) | (((V) >> 24) & 0xFF0000U) | \
- (((V) >> 40) & 0xFF00U) | (((V) >> 56) & 0xFFU))
-static BROTLI_INLINE uint64_t BROTLI_UNALIGNED_LOAD64LE(const void* p) {
- uint64_t value = BrotliUnalignedRead64(p);
- return BROTLI_BSWAP64_(value);
-}
-static BROTLI_INLINE void BROTLI_UNALIGNED_STORE64LE(void* p, uint64_t v) {
- uint64_t value = BROTLI_BSWAP64_(v);
- BrotliUnalignedWrite64(p, value);
-}
-#else /* BROTLI_LITTLE_ENDIAN */
-/* Read / store values byte-wise; hopefully compiler will understand. */
-static BROTLI_INLINE uint16_t BROTLI_UNALIGNED_LOAD16LE(const void* p) {
- const uint8_t* in = (const uint8_t*)p;
- return (uint16_t)(in[0] | (in[1] << 8));
-}
-static BROTLI_INLINE uint32_t BROTLI_UNALIGNED_LOAD32LE(const void* p) {
- const uint8_t* in = (const uint8_t*)p;
- uint32_t value = (uint32_t)(in[0]);
- value |= (uint32_t)(in[1]) << 8;
- value |= (uint32_t)(in[2]) << 16;
- value |= (uint32_t)(in[3]) << 24;
- return value;
-}
-static BROTLI_INLINE uint64_t BROTLI_UNALIGNED_LOAD64LE(const void* p) {
- const uint8_t* in = (const uint8_t*)p;
- uint64_t value = (uint64_t)(in[0]);
- value |= (uint64_t)(in[1]) << 8;
- value |= (uint64_t)(in[2]) << 16;
- value |= (uint64_t)(in[3]) << 24;
- value |= (uint64_t)(in[4]) << 32;
- value |= (uint64_t)(in[5]) << 40;
- value |= (uint64_t)(in[6]) << 48;
- value |= (uint64_t)(in[7]) << 56;
- return value;
-}
-static BROTLI_INLINE void BROTLI_UNALIGNED_STORE64LE(void* p, uint64_t v) {
- uint8_t* out = (uint8_t*)p;
- out[0] = (uint8_t)v;
- out[1] = (uint8_t)(v >> 8);
- out[2] = (uint8_t)(v >> 16);
- out[3] = (uint8_t)(v >> 24);
- out[4] = (uint8_t)(v >> 32);
- out[5] = (uint8_t)(v >> 40);
- out[6] = (uint8_t)(v >> 48);
- out[7] = (uint8_t)(v >> 56);
-}
-#endif /* BROTLI_LITTLE_ENDIAN */
-
-/* BROTLI_IS_CONSTANT macros returns true for compile-time constants. */
-#if BROTLI_GNUC_HAS_BUILTIN(__builtin_constant_p, 3, 0, 1) || \
- BROTLI_INTEL_VERSION_CHECK(16, 0, 0)
-#define BROTLI_IS_CONSTANT(x) (!!__builtin_constant_p(x))
-#else
-#define BROTLI_IS_CONSTANT(x) (!!0)
-#endif
-
-#if defined(BROTLI_TARGET_ARMV7) || defined(BROTLI_TARGET_ARMV8_ANY)
-#define BROTLI_HAS_UBFX (!!1)
-#else
-#define BROTLI_HAS_UBFX (!!0)
-#endif
-
-#if defined(BROTLI_ENABLE_LOG)
-#define BROTLI_DCHECK(x) assert(x)
-#define BROTLI_LOG(x) printf x
-#else
-#define BROTLI_DCHECK(x)
-#define BROTLI_LOG(x)
-#endif
-
-#if defined(BROTLI_DEBUG) || defined(BROTLI_ENABLE_LOG)
-static BROTLI_INLINE void BrotliDump(const char* f, int l, const char* fn) {
- fprintf(stderr, "%s:%d (%s)\n", f, l, fn);
- fflush(stderr);
-}
-#define BROTLI_DUMP() BrotliDump(__FILE__, __LINE__, __FUNCTION__)
-#else
-#define BROTLI_DUMP() (void)(0)
-#endif
-
-/* TODO: add appropriate icc/sunpro/arm/ibm/ti checks. */
-#if (BROTLI_GNUC_VERSION_CHECK(3, 0, 0) || defined(__llvm__)) && \
- !defined(BROTLI_BUILD_NO_RBIT)
-#if defined(BROTLI_TARGET_ARMV7) || defined(BROTLI_TARGET_ARMV8_ANY)
-/* TODO: detect ARMv6T2 and enable this code for it. */
-static BROTLI_INLINE brotli_reg_t BrotliRBit(brotli_reg_t input) {
- brotli_reg_t output;
- __asm__("rbit %0, %1\n" : "=r"(output) : "r"(input));
- return output;
-}
-#define BROTLI_RBIT(x) BrotliRBit(x)
-#endif /* armv7 / armv8 */
-#endif /* gcc || clang */
-#if !defined(BROTLI_RBIT)
-static BROTLI_INLINE void BrotliRBit(void) { /* Should break build if used. */ }
-#endif /* BROTLI_RBIT */
-
-#define BROTLI_REPEAT(N, X) { \
- if ((N & 1) != 0) {X;} \
- if ((N & 2) != 0) {X; X;} \
- if ((N & 4) != 0) {X; X; X; X;} \
-}
-
-#define BROTLI_UNUSED(X) (void)(X)
-
-#define BROTLI_MIN_MAX(T) \
- static BROTLI_INLINE T brotli_min_ ## T (T a, T b) { return a < b ? a : b; } \
- static BROTLI_INLINE T brotli_max_ ## T (T a, T b) { return a > b ? a : b; }
-BROTLI_MIN_MAX(double) BROTLI_MIN_MAX(float) BROTLI_MIN_MAX(int)
-BROTLI_MIN_MAX(size_t) BROTLI_MIN_MAX(uint32_t) BROTLI_MIN_MAX(uint8_t)
-#undef BROTLI_MIN_MAX
-#define BROTLI_MIN(T, A, B) (brotli_min_ ## T((A), (B)))
-#define BROTLI_MAX(T, A, B) (brotli_max_ ## T((A), (B)))
-
-#define BROTLI_SWAP(T, A, I, J) { \
- T __brotli_swap_tmp = (A)[(I)]; \
- (A)[(I)] = (A)[(J)]; \
- (A)[(J)] = __brotli_swap_tmp; \
-}
-
-/* Default brotli_alloc_func */
-static void* BrotliDefaultAllocFunc(void* opaque, size_t size) {
- BROTLI_UNUSED(opaque);
- return malloc(size);
-}
-
-/* Default brotli_free_func */
-static void BrotliDefaultFreeFunc(void* opaque, void* address) {
- BROTLI_UNUSED(opaque);
- free(address);
-}
-
-BROTLI_UNUSED_FUNCTION void BrotliSuppressUnusedFunctions(void) {
- BROTLI_UNUSED(&BrotliSuppressUnusedFunctions);
- BROTLI_UNUSED(&BrotliUnalignedRead16);
- BROTLI_UNUSED(&BrotliUnalignedRead32);
- BROTLI_UNUSED(&BrotliUnalignedRead64);
- BROTLI_UNUSED(&BrotliUnalignedWrite64);
- BROTLI_UNUSED(&BROTLI_UNALIGNED_LOAD16LE);
- BROTLI_UNUSED(&BROTLI_UNALIGNED_LOAD32LE);
- BROTLI_UNUSED(&BROTLI_UNALIGNED_LOAD64LE);
- BROTLI_UNUSED(&BROTLI_UNALIGNED_STORE64LE);
- BROTLI_UNUSED(&BrotliRBit);
- BROTLI_UNUSED(&brotli_min_double);
- BROTLI_UNUSED(&brotli_max_double);
- BROTLI_UNUSED(&brotli_min_float);
- BROTLI_UNUSED(&brotli_max_float);
- BROTLI_UNUSED(&brotli_min_int);
- BROTLI_UNUSED(&brotli_max_int);
- BROTLI_UNUSED(&brotli_min_size_t);
- BROTLI_UNUSED(&brotli_max_size_t);
- BROTLI_UNUSED(&brotli_min_uint32_t);
- BROTLI_UNUSED(&brotli_max_uint32_t);
- BROTLI_UNUSED(&brotli_min_uint8_t);
- BROTLI_UNUSED(&brotli_max_uint8_t);
- BROTLI_UNUSED(&BrotliDefaultAllocFunc);
- BROTLI_UNUSED(&BrotliDefaultFreeFunc);
-#if defined(BROTLI_DEBUG) || defined(BROTLI_ENABLE_LOG)
- BROTLI_UNUSED(&BrotliDump);
-#endif
-}
-
-#endif /* BROTLI_COMMON_PLATFORM_H_ */
diff --git a/BaseTools/Source/C/BrotliCompress/common/transform.h b/BaseTools/Source/C/BrotliCompress/common/transform.h
deleted file mode 100644
index 8b42cd1807b0..000000000000
--- a/BaseTools/Source/C/BrotliCompress/common/transform.h
+++ /dev/null
@@ -1,80 +0,0 @@
-/* transforms is a part of ABI, but not API.
-
- It means that there are some functions that are supposed to be in "common"
- library, but header itself is not placed into include/brotli. This way,
- aforementioned functions will be available only to brotli internals.
- */
-
-#ifndef BROTLI_COMMON_TRANSFORM_H_
-#define BROTLI_COMMON_TRANSFORM_H_
-
-#include <brotli/port.h>
-#include <brotli/types.h>
-
-#if defined(__cplusplus) || defined(c_plusplus)
-extern "C" {
-#endif
-
-enum BrotliWordTransformType {
- BROTLI_TRANSFORM_IDENTITY = 0,
- BROTLI_TRANSFORM_OMIT_LAST_1 = 1,
- BROTLI_TRANSFORM_OMIT_LAST_2 = 2,
- BROTLI_TRANSFORM_OMIT_LAST_3 = 3,
- BROTLI_TRANSFORM_OMIT_LAST_4 = 4,
- BROTLI_TRANSFORM_OMIT_LAST_5 = 5,
- BROTLI_TRANSFORM_OMIT_LAST_6 = 6,
- BROTLI_TRANSFORM_OMIT_LAST_7 = 7,
- BROTLI_TRANSFORM_OMIT_LAST_8 = 8,
- BROTLI_TRANSFORM_OMIT_LAST_9 = 9,
- BROTLI_TRANSFORM_UPPERCASE_FIRST = 10,
- BROTLI_TRANSFORM_UPPERCASE_ALL = 11,
- BROTLI_TRANSFORM_OMIT_FIRST_1 = 12,
- BROTLI_TRANSFORM_OMIT_FIRST_2 = 13,
- BROTLI_TRANSFORM_OMIT_FIRST_3 = 14,
- BROTLI_TRANSFORM_OMIT_FIRST_4 = 15,
- BROTLI_TRANSFORM_OMIT_FIRST_5 = 16,
- BROTLI_TRANSFORM_OMIT_FIRST_6 = 17,
- BROTLI_TRANSFORM_OMIT_FIRST_7 = 18,
- BROTLI_TRANSFORM_OMIT_FIRST_8 = 19,
- BROTLI_TRANSFORM_OMIT_FIRST_9 = 20,
- BROTLI_NUM_TRANSFORM_TYPES /* Counts transforms, not a transform itself. */
-};
-
-#define BROTLI_TRANSFORMS_MAX_CUT_OFF BROTLI_TRANSFORM_OMIT_LAST_9
-
-typedef struct BrotliTransforms {
- uint16_t prefix_suffix_size;
- /* Last character must be null, so prefix_suffix_size must be at least 1. */
- const uint8_t* prefix_suffix;
- const uint16_t* prefix_suffix_map;
- uint32_t num_transforms;
- /* Each entry is a [prefix_id, transform, suffix_id] triplet. */
- const uint8_t* transforms;
- /* Indices of transforms like ["", BROTLI_TRANSFORM_OMIT_LAST_#, ""].
- 0-th element corresponds to ["", BROTLI_TRANSFORM_IDENTITY, ""].
- -1, if cut-off transform does not exist. */
- int16_t cutOffTransforms[BROTLI_TRANSFORMS_MAX_CUT_OFF + 1];
-} BrotliTransforms;
-
-/* T is BrotliTransforms*; result is uint8_t. */
-#define BROTLI_TRANSFORM_PREFIX_ID(T, I) ((T)->transforms[((I) * 3) + 0])
-#define BROTLI_TRANSFORM_TYPE(T, I) ((T)->transforms[((I) * 3) + 1])
-#define BROTLI_TRANSFORM_SUFFIX_ID(T, I) ((T)->transforms[((I) * 3) + 2])
-
-/* T is BrotliTransforms*; result is const uint8_t*. */
-#define BROTLI_TRANSFORM_PREFIX(T, I) (&(T)->prefix_suffix[ \
- (T)->prefix_suffix_map[BROTLI_TRANSFORM_PREFIX_ID(T, I)]])
-#define BROTLI_TRANSFORM_SUFFIX(T, I) (&(T)->prefix_suffix[ \
- (T)->prefix_suffix_map[BROTLI_TRANSFORM_SUFFIX_ID(T, I)]])
-
-BROTLI_COMMON_API const BrotliTransforms* BrotliGetTransforms(void);
-
-BROTLI_COMMON_API int BrotliTransformDictionaryWord(
- uint8_t* dst, const uint8_t* word, int len,
- const BrotliTransforms* transforms, int transform_idx);
-
-#if defined(__cplusplus) || defined(c_plusplus)
-} /* extern "C" */
-#endif
-
-#endif /* BROTLI_COMMON_TRANSFORM_H_ */
diff --git a/BaseTools/Source/C/BrotliCompress/common/version.h b/BaseTools/Source/C/BrotliCompress/common/version.h
deleted file mode 100644
index 8e94f4ffeacd..000000000000
--- a/BaseTools/Source/C/BrotliCompress/common/version.h
+++ /dev/null
@@ -1,26 +0,0 @@
-/* Copyright 2016 Google Inc. All Rights Reserved.
-
- Distributed under MIT license.
- See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
-*/
-
-/* Version definition. */
-
-#ifndef BROTLI_COMMON_VERSION_H_
-#define BROTLI_COMMON_VERSION_H_
-
-/* This macro should only be used when library is compiled together with client.
- If library is dynamically linked, use BrotliDecoderVersion and
- BrotliEncoderVersion methods. */
-
-/* Semantic version, calculated as (MAJOR << 24) | (MINOR << 12) | PATCH */
-#define BROTLI_VERSION 0x1000006
-
-/* This macro is used by build system to produce Libtool-friendly soname. See
- https://www.gnu.org/software/libtool/manual/html_node/Libtool-versioning.html
- */
-
-/* ABI version, calculated as (CURRENT << 24) | (REVISION << 12) | AGE */
-#define BROTLI_ABI_VERSION 0x1006000
-
-#endif /* BROTLI_COMMON_VERSION_H_ */
diff --git a/BaseTools/Source/C/BrotliCompress/dec/bit_reader.h b/BaseTools/Source/C/BrotliCompress/dec/bit_reader.h
deleted file mode 100644
index b13e33fea208..000000000000
--- a/BaseTools/Source/C/BrotliCompress/dec/bit_reader.h
+++ /dev/null
@@ -1,309 +0,0 @@
-/* Copyright 2013 Google Inc. All Rights Reserved.
-
- Distributed under MIT license.
- See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
-*/
-
-/* Bit reading helpers */
-
-#ifndef BROTLI_DEC_BIT_READER_H_
-#define BROTLI_DEC_BIT_READER_H_
-
-#include <string.h> /* memcpy */
-
-#include "../common/platform.h"
-#include <brotli/types.h>
-
-#if defined(__cplusplus) || defined(c_plusplus)
-extern "C" {
-#endif
-
-#define BROTLI_SHORT_FILL_BIT_WINDOW_READ (sizeof(brotli_reg_t) >> 1)
-
-static const uint32_t kBitMask[33] = { 0x00000000,
- 0x00000001, 0x00000003, 0x00000007, 0x0000000F,
- 0x0000001F, 0x0000003F, 0x0000007F, 0x000000FF,
- 0x000001FF, 0x000003FF, 0x000007FF, 0x00000FFF,
- 0x00001FFF, 0x00003FFF, 0x00007FFF, 0x0000FFFF,
- 0x0001FFFF, 0x0003FFFF, 0x0007FFFF, 0x000FFFFF,
- 0x001FFFFF, 0x003FFFFF, 0x007FFFFF, 0x00FFFFFF,
- 0x01FFFFFF, 0x03FFFFFF, 0x07FFFFFF, 0x0FFFFFFF,
- 0x1FFFFFFF, 0x3FFFFFFF, 0x7FFFFFFF, 0xFFFFFFFF
-};
-
-static BROTLI_INLINE uint32_t BitMask(uint32_t n) {
- if (BROTLI_IS_CONSTANT(n) || BROTLI_HAS_UBFX) {
- /* Masking with this expression turns to a single
- "Unsigned Bit Field Extract" UBFX instruction on ARM. */
- return ~((0xFFFFFFFFu) << n);
- } else {
- return kBitMask[n];
- }
-}
-
-typedef struct {
- brotli_reg_t val_; /* pre-fetched bits */
- uint32_t bit_pos_; /* current bit-reading position in val_ */
- const uint8_t* next_in; /* the byte we're reading from */
- size_t avail_in;
-} BrotliBitReader;
-
-typedef struct {
- brotli_reg_t val_;
- uint32_t bit_pos_;
- const uint8_t* next_in;
- size_t avail_in;
-} BrotliBitReaderState;
-
-/* Initializes the BrotliBitReader fields. */
-BROTLI_INTERNAL void BrotliInitBitReader(BrotliBitReader* const br);
-
-/* Ensures that accumulator is not empty.
- May consume up to sizeof(brotli_reg_t) - 1 bytes of input.
- Returns BROTLI_FALSE if data is required but there is no input available.
- For BROTLI_ALIGNED_READ this function also prepares bit reader for aligned
- reading. */
-BROTLI_INTERNAL BROTLI_BOOL BrotliWarmupBitReader(BrotliBitReader* const br);
-
-static BROTLI_INLINE void BrotliBitReaderSaveState(
- BrotliBitReader* const from, BrotliBitReaderState* to) {
- to->val_ = from->val_;
- to->bit_pos_ = from->bit_pos_;
- to->next_in = from->next_in;
- to->avail_in = from->avail_in;
-}
-
-static BROTLI_INLINE void BrotliBitReaderRestoreState(
- BrotliBitReader* const to, BrotliBitReaderState* from) {
- to->val_ = from->val_;
- to->bit_pos_ = from->bit_pos_;
- to->next_in = from->next_in;
- to->avail_in = from->avail_in;
-}
-
-static BROTLI_INLINE uint32_t BrotliGetAvailableBits(
- const BrotliBitReader* br) {
- return (BROTLI_64_BITS ? 64 : 32) - br->bit_pos_;
-}
-
-/* Returns amount of unread bytes the bit reader still has buffered from the
- BrotliInput, including whole bytes in br->val_. */
-static BROTLI_INLINE size_t BrotliGetRemainingBytes(BrotliBitReader* br) {
- return br->avail_in + (BrotliGetAvailableBits(br) >> 3);
-}
-
-/* Checks if there is at least |num| bytes left in the input ring-buffer
- (excluding the bits remaining in br->val_). */
-static BROTLI_INLINE BROTLI_BOOL BrotliCheckInputAmount(
- BrotliBitReader* const br, size_t num) {
- return TO_BROTLI_BOOL(br->avail_in >= num);
-}
-
-/* Guarantees that there are at least |n_bits| + 1 bits in accumulator.
- Precondition: accumulator contains at least 1 bit.
- |n_bits| should be in the range [1..24] for regular build. For portable
- non-64-bit little-endian build only 16 bits are safe to request. */
-static BROTLI_INLINE void BrotliFillBitWindow(
- BrotliBitReader* const br, uint32_t n_bits) {
-#if (BROTLI_64_BITS)
- if (!BROTLI_ALIGNED_READ && BROTLI_IS_CONSTANT(n_bits) && (n_bits <= 8)) {
- if (br->bit_pos_ >= 56) {
- br->val_ >>= 56;
- br->bit_pos_ ^= 56; /* here same as -= 56 because of the if condition */
- br->val_ |= BROTLI_UNALIGNED_LOAD64LE(br->next_in) << 8;
- br->avail_in -= 7;
- br->next_in += 7;
- }
- } else if (
- !BROTLI_ALIGNED_READ && BROTLI_IS_CONSTANT(n_bits) && (n_bits <= 16)) {
- if (br->bit_pos_ >= 48) {
- br->val_ >>= 48;
- br->bit_pos_ ^= 48; /* here same as -= 48 because of the if condition */
- br->val_ |= BROTLI_UNALIGNED_LOAD64LE(br->next_in) << 16;
- br->avail_in -= 6;
- br->next_in += 6;
- }
- } else {
- if (br->bit_pos_ >= 32) {
- br->val_ >>= 32;
- br->bit_pos_ ^= 32; /* here same as -= 32 because of the if condition */
- br->val_ |= ((uint64_t)BROTLI_UNALIGNED_LOAD32LE(br->next_in)) << 32;
- br->avail_in -= BROTLI_SHORT_FILL_BIT_WINDOW_READ;
- br->next_in += BROTLI_SHORT_FILL_BIT_WINDOW_READ;
- }
- }
-#else
- if (!BROTLI_ALIGNED_READ && BROTLI_IS_CONSTANT(n_bits) && (n_bits <= 8)) {
- if (br->bit_pos_ >= 24) {
- br->val_ >>= 24;
- br->bit_pos_ ^= 24; /* here same as -= 24 because of the if condition */
- br->val_ |= BROTLI_UNALIGNED_LOAD32LE(br->next_in) << 8;
- br->avail_in -= 3;
- br->next_in += 3;
- }
- } else {
- if (br->bit_pos_ >= 16) {
- br->val_ >>= 16;
- br->bit_pos_ ^= 16; /* here same as -= 16 because of the if condition */
- br->val_ |= ((uint32_t)BROTLI_UNALIGNED_LOAD16LE(br->next_in)) << 16;
- br->avail_in -= BROTLI_SHORT_FILL_BIT_WINDOW_READ;
- br->next_in += BROTLI_SHORT_FILL_BIT_WINDOW_READ;
- }
- }
-#endif
-}
-
-/* Mostly like BrotliFillBitWindow, but guarantees only 16 bits and reads no
- more than BROTLI_SHORT_FILL_BIT_WINDOW_READ bytes of input. */
-static BROTLI_INLINE void BrotliFillBitWindow16(BrotliBitReader* const br) {
- BrotliFillBitWindow(br, 17);
-}
-
-/* Tries to pull one byte of input to accumulator.
- Returns BROTLI_FALSE if there is no input available. */
-static BROTLI_INLINE BROTLI_BOOL BrotliPullByte(BrotliBitReader* const br) {
- if (br->avail_in == 0) {
- return BROTLI_FALSE;
- }
- br->val_ >>= 8;
-#if (BROTLI_64_BITS)
- br->val_ |= ((uint64_t)*br->next_in) << 56;
-#else
- br->val_ |= ((uint32_t)*br->next_in) << 24;
-#endif
- br->bit_pos_ -= 8;
- --br->avail_in;
- ++br->next_in;
- return BROTLI_TRUE;
-}
-
-/* Returns currently available bits.
- The number of valid bits could be calculated by BrotliGetAvailableBits. */
-static BROTLI_INLINE brotli_reg_t BrotliGetBitsUnmasked(
- BrotliBitReader* const br) {
- return br->val_ >> br->bit_pos_;
-}
-
-/* Like BrotliGetBits, but does not mask the result.
- The result contains at least 16 valid bits. */
-static BROTLI_INLINE uint32_t BrotliGet16BitsUnmasked(
- BrotliBitReader* const br) {
- BrotliFillBitWindow(br, 16);
- return (uint32_t)BrotliGetBitsUnmasked(br);
-}
-
-/* Returns the specified number of bits from |br| without advancing bit
- position. */
-static BROTLI_INLINE uint32_t BrotliGetBits(
- BrotliBitReader* const br, uint32_t n_bits) {
- BrotliFillBitWindow(br, n_bits);
- return (uint32_t)BrotliGetBitsUnmasked(br) & BitMask(n_bits);
-}
-
-/* Tries to peek the specified amount of bits. Returns BROTLI_FALSE, if there
- is not enough input. */
-static BROTLI_INLINE BROTLI_BOOL BrotliSafeGetBits(
- BrotliBitReader* const br, uint32_t n_bits, uint32_t* val) {
- while (BrotliGetAvailableBits(br) < n_bits) {
- if (!BrotliPullByte(br)) {
- return BROTLI_FALSE;
- }
- }
- *val = (uint32_t)BrotliGetBitsUnmasked(br) & BitMask(n_bits);
- return BROTLI_TRUE;
-}
-
-/* Advances the bit pos by |n_bits|. */
-static BROTLI_INLINE void BrotliDropBits(
- BrotliBitReader* const br, uint32_t n_bits) {
- br->bit_pos_ += n_bits;
-}
-
-static BROTLI_INLINE void BrotliBitReaderUnload(BrotliBitReader* br) {
- uint32_t unused_bytes = BrotliGetAvailableBits(br) >> 3;
- uint32_t unused_bits = unused_bytes << 3;
- br->avail_in += unused_bytes;
- br->next_in -= unused_bytes;
- if (unused_bits == sizeof(br->val_) << 3) {
- br->val_ = 0;
- } else {
- br->val_ <<= unused_bits;
- }
- br->bit_pos_ += unused_bits;
-}
-
-/* Reads the specified number of bits from |br| and advances the bit pos.
- Precondition: accumulator MUST contain at least |n_bits|. */
-static BROTLI_INLINE void BrotliTakeBits(
- BrotliBitReader* const br, uint32_t n_bits, uint32_t* val) {
- *val = (uint32_t)BrotliGetBitsUnmasked(br) & BitMask(n_bits);
- BROTLI_LOG(("[BrotliReadBits] %d %d %d val: %6x\n",
- (int)br->avail_in, (int)br->bit_pos_, (int)n_bits, (int)*val));
- BrotliDropBits(br, n_bits);
-}
-
-/* Reads the specified number of bits from |br| and advances the bit pos.
- Assumes that there is enough input to perform BrotliFillBitWindow. */
-static BROTLI_INLINE uint32_t BrotliReadBits(
- BrotliBitReader* const br, uint32_t n_bits) {
- if (BROTLI_64_BITS || (n_bits <= 16)) {
- uint32_t val;
- BrotliFillBitWindow(br, n_bits);
- BrotliTakeBits(br, n_bits, &val);
- return val;
- } else {
- uint32_t low_val;
- uint32_t high_val;
- BrotliFillBitWindow(br, 16);
- BrotliTakeBits(br, 16, &low_val);
- BrotliFillBitWindow(br, 8);
- BrotliTakeBits(br, n_bits - 16, &high_val);
- return low_val | (high_val << 16);
- }
-}
-
-/* Tries to read the specified amount of bits. Returns BROTLI_FALSE, if there
- is not enough input. |n_bits| MUST be positive. */
-static BROTLI_INLINE BROTLI_BOOL BrotliSafeReadBits(
- BrotliBitReader* const br, uint32_t n_bits, uint32_t* val) {
- while (BrotliGetAvailableBits(br) < n_bits) {
- if (!BrotliPullByte(br)) {
- return BROTLI_FALSE;
- }
- }
- BrotliTakeBits(br, n_bits, val);
- return BROTLI_TRUE;
-}
-
-/* Advances the bit reader position to the next byte boundary and verifies
- that any skipped bits are set to zero. */
-static BROTLI_INLINE BROTLI_BOOL BrotliJumpToByteBoundary(BrotliBitReader* br) {
- uint32_t pad_bits_count = BrotliGetAvailableBits(br) & 0x7;
- uint32_t pad_bits = 0;
- if (pad_bits_count != 0) {
- BrotliTakeBits(br, pad_bits_count, &pad_bits);
- }
- return TO_BROTLI_BOOL(pad_bits == 0);
-}
-
-/* Copies remaining input bytes stored in the bit reader to the output. Value
- |num| may not be larger than BrotliGetRemainingBytes. The bit reader must be
- warmed up again after this. */
-static BROTLI_INLINE void BrotliCopyBytes(uint8_t* dest,
- BrotliBitReader* br, size_t num) {
- while (BrotliGetAvailableBits(br) >= 8 && num > 0) {
- *dest = (uint8_t)BrotliGetBitsUnmasked(br);
- BrotliDropBits(br, 8);
- ++dest;
- --num;
- }
- memcpy(dest, br->next_in, num);
- br->avail_in -= num;
- br->next_in += num;
-}
-
-#if defined(__cplusplus) || defined(c_plusplus)
-} /* extern "C" */
-#endif
-
-#endif /* BROTLI_DEC_BIT_READER_H_ */
diff --git a/BaseTools/Source/C/BrotliCompress/dec/huffman.h b/BaseTools/Source/C/BrotliCompress/dec/huffman.h
deleted file mode 100644
index 5fc8c0224edc..000000000000
--- a/BaseTools/Source/C/BrotliCompress/dec/huffman.h
+++ /dev/null
@@ -1,72 +0,0 @@
-/* Copyright 2013 Google Inc. All Rights Reserved.
-
- Distributed under MIT license.
- See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
-*/
-
-/* Utilities for building Huffman decoding tables. */
-
-#ifndef BROTLI_DEC_HUFFMAN_H_
-#define BROTLI_DEC_HUFFMAN_H_
-
-#include "../common/platform.h"
-#include <brotli/types.h>
-
-#if defined(__cplusplus) || defined(c_plusplus)
-extern "C" {
-#endif
-
-#define BROTLI_HUFFMAN_MAX_CODE_LENGTH 15
-
-/* Maximum possible Huffman table size for an alphabet size of (index * 32),
- max code length 15 and root table bits 8. */
-static const uint16_t kMaxHuffmanTableSize[] = {
- 256, 402, 436, 468, 500, 534, 566, 598, 630, 662, 694, 726, 758, 790, 822,
- 854, 886, 920, 952, 984, 1016, 1048, 1080, 1112, 1144, 1176, 1208, 1240, 1272,
- 1304, 1336, 1368, 1400, 1432, 1464, 1496, 1528};
-/* BROTLI_NUM_BLOCK_LEN_SYMBOLS == 26 */
-#define BROTLI_HUFFMAN_MAX_SIZE_26 396
-/* BROTLI_MAX_BLOCK_TYPE_SYMBOLS == 258 */
-#define BROTLI_HUFFMAN_MAX_SIZE_258 632
-/* BROTLI_MAX_CONTEXT_MAP_SYMBOLS == 272 */
-#define BROTLI_HUFFMAN_MAX_SIZE_272 646
-
-#define BROTLI_HUFFMAN_MAX_CODE_LENGTH_CODE_LENGTH 5
-
-typedef struct {
- uint8_t bits; /* number of bits used for this symbol */
- uint16_t value; /* symbol value or table offset */
-} HuffmanCode;
-
-/* Builds Huffman lookup table assuming code lengths are in symbol order. */
-BROTLI_INTERNAL void BrotliBuildCodeLengthsHuffmanTable(HuffmanCode* root_table,
- const uint8_t* const code_lengths, uint16_t* count);
-
-/* Builds Huffman lookup table assuming code lengths are in symbol order.
- Returns size of resulting table. */
-BROTLI_INTERNAL uint32_t BrotliBuildHuffmanTable(HuffmanCode* root_table,
- int root_bits, const uint16_t* const symbol_lists, uint16_t* count_arg);
-
-/* Builds a simple Huffman table. The |num_symbols| parameter is to be
- interpreted as follows: 0 means 1 symbol, 1 means 2 symbols,
- 2 means 3 symbols, 3 means 4 symbols with lengths [2, 2, 2, 2],
- 4 means 4 symbols with lengths [1, 2, 3, 3]. */
-BROTLI_INTERNAL uint32_t BrotliBuildSimpleHuffmanTable(HuffmanCode* table,
- int root_bits, uint16_t* symbols, uint32_t num_symbols);
-
-/* Contains a collection of Huffman trees with the same alphabet size. */
-/* max_symbol is needed due to simple codes since log2(alphabet_size) could be
- greater than log2(max_symbol). */
-typedef struct {
- HuffmanCode** htrees;
- HuffmanCode* codes;
- uint16_t alphabet_size;
- uint16_t max_symbol;
- uint16_t num_htrees;
-} HuffmanTreeGroup;
-
-#if defined(__cplusplus) || defined(c_plusplus)
-} /* extern "C" */
-#endif
-
-#endif /* BROTLI_DEC_HUFFMAN_H_ */
diff --git a/BaseTools/Source/C/BrotliCompress/dec/prefix.h b/BaseTools/Source/C/BrotliCompress/dec/prefix.h
deleted file mode 100644
index 39cb45920831..000000000000
--- a/BaseTools/Source/C/BrotliCompress/dec/prefix.h
+++ /dev/null
@@ -1,750 +0,0 @@
-/* Copyright 2013 Google Inc. All Rights Reserved.
-
- Distributed under MIT license.
- See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
-*/
-
-/* Lookup tables to map prefix codes to value ranges. This is used during
- decoding of the block lengths, literal insertion lengths and copy lengths. */
-
-#ifndef BROTLI_DEC_PREFIX_H_
-#define BROTLI_DEC_PREFIX_H_
-
-#include "../common/constants.h"
-#include <brotli/types.h>
-
-/* Represents the range of values belonging to a prefix code:
- [offset, offset + 2^nbits) */
-struct PrefixCodeRange {
- uint16_t offset;
- uint8_t nbits;
-};
-
-static const struct PrefixCodeRange
- kBlockLengthPrefixCode[BROTLI_NUM_BLOCK_LEN_SYMBOLS] = {
- { 1, 2}, { 5, 2}, { 9, 2}, { 13, 2},
- { 17, 3}, { 25, 3}, { 33, 3}, { 41, 3},
- { 49, 4}, { 65, 4}, { 81, 4}, { 97, 4},
- { 113, 5}, { 145, 5}, { 177, 5}, { 209, 5},
- { 241, 6}, { 305, 6}, { 369, 7}, { 497, 8},
- { 753, 9}, { 1265, 10}, {2289, 11}, {4337, 12},
- {8433, 13}, {16625, 24}
-};
-
-typedef struct CmdLutElement {
- uint8_t insert_len_extra_bits;
- uint8_t copy_len_extra_bits;
- int8_t distance_code;
- uint8_t context;
- uint16_t insert_len_offset;
- uint16_t copy_len_offset;
-} CmdLutElement;
-
-static const CmdLutElement kCmdLut[BROTLI_NUM_COMMAND_SYMBOLS] = {
- { 0x00, 0x00, 0, 0x00, 0x0000, 0x0002 },
- { 0x00, 0x00, 0, 0x01, 0x0000, 0x0003 },
- { 0x00, 0x00, 0, 0x02, 0x0000, 0x0004 },
- { 0x00, 0x00, 0, 0x03, 0x0000, 0x0005 },
- { 0x00, 0x00, 0, 0x03, 0x0000, 0x0006 },
- { 0x00, 0x00, 0, 0x03, 0x0000, 0x0007 },
- { 0x00, 0x00, 0, 0x03, 0x0000, 0x0008 },
- { 0x00, 0x00, 0, 0x03, 0x0000, 0x0009 },
- { 0x00, 0x00, 0, 0x00, 0x0001, 0x0002 },
- { 0x00, 0x00, 0, 0x01, 0x0001, 0x0003 },
- { 0x00, 0x00, 0, 0x02, 0x0001, 0x0004 },
- { 0x00, 0x00, 0, 0x03, 0x0001, 0x0005 },
- { 0x00, 0x00, 0, 0x03, 0x0001, 0x0006 },
- { 0x00, 0x00, 0, 0x03, 0x0001, 0x0007 },
- { 0x00, 0x00, 0, 0x03, 0x0001, 0x0008 },
- { 0x00, 0x00, 0, 0x03, 0x0001, 0x0009 },
- { 0x00, 0x00, 0, 0x00, 0x0002, 0x0002 },
- { 0x00, 0x00, 0, 0x01, 0x0002, 0x0003 },
- { 0x00, 0x00, 0, 0x02, 0x0002, 0x0004 },
- { 0x00, 0x00, 0, 0x03, 0x0002, 0x0005 },
- { 0x00, 0x00, 0, 0x03, 0x0002, 0x0006 },
- { 0x00, 0x00, 0, 0x03, 0x0002, 0x0007 },
- { 0x00, 0x00, 0, 0x03, 0x0002, 0x0008 },
- { 0x00, 0x00, 0, 0x03, 0x0002, 0x0009 },
- { 0x00, 0x00, 0, 0x00, 0x0003, 0x0002 },
- { 0x00, 0x00, 0, 0x01, 0x0003, 0x0003 },
- { 0x00, 0x00, 0, 0x02, 0x0003, 0x0004 },
- { 0x00, 0x00, 0, 0x03, 0x0003, 0x0005 },
- { 0x00, 0x00, 0, 0x03, 0x0003, 0x0006 },
- { 0x00, 0x00, 0, 0x03, 0x0003, 0x0007 },
- { 0x00, 0x00, 0, 0x03, 0x0003, 0x0008 },
- { 0x00, 0x00, 0, 0x03, 0x0003, 0x0009 },
- { 0x00, 0x00, 0, 0x00, 0x0004, 0x0002 },
- { 0x00, 0x00, 0, 0x01, 0x0004, 0x0003 },
- { 0x00, 0x00, 0, 0x02, 0x0004, 0x0004 },
- { 0x00, 0x00, 0, 0x03, 0x0004, 0x0005 },
- { 0x00, 0x00, 0, 0x03, 0x0004, 0x0006 },
- { 0x00, 0x00, 0, 0x03, 0x0004, 0x0007 },
- { 0x00, 0x00, 0, 0x03, 0x0004, 0x0008 },
- { 0x00, 0x00, 0, 0x03, 0x0004, 0x0009 },
- { 0x00, 0x00, 0, 0x00, 0x0005, 0x0002 },
- { 0x00, 0x00, 0, 0x01, 0x0005, 0x0003 },
- { 0x00, 0x00, 0, 0x02, 0x0005, 0x0004 },
- { 0x00, 0x00, 0, 0x03, 0x0005, 0x0005 },
- { 0x00, 0x00, 0, 0x03, 0x0005, 0x0006 },
- { 0x00, 0x00, 0, 0x03, 0x0005, 0x0007 },
- { 0x00, 0x00, 0, 0x03, 0x0005, 0x0008 },
- { 0x00, 0x00, 0, 0x03, 0x0005, 0x0009 },
- { 0x01, 0x00, 0, 0x00, 0x0006, 0x0002 },
- { 0x01, 0x00, 0, 0x01, 0x0006, 0x0003 },
- { 0x01, 0x00, 0, 0x02, 0x0006, 0x0004 },
- { 0x01, 0x00, 0, 0x03, 0x0006, 0x0005 },
- { 0x01, 0x00, 0, 0x03, 0x0006, 0x0006 },
- { 0x01, 0x00, 0, 0x03, 0x0006, 0x0007 },
- { 0x01, 0x00, 0, 0x03, 0x0006, 0x0008 },
- { 0x01, 0x00, 0, 0x03, 0x0006, 0x0009 },
- { 0x01, 0x00, 0, 0x00, 0x0008, 0x0002 },
- { 0x01, 0x00, 0, 0x01, 0x0008, 0x0003 },
- { 0x01, 0x00, 0, 0x02, 0x0008, 0x0004 },
- { 0x01, 0x00, 0, 0x03, 0x0008, 0x0005 },
- { 0x01, 0x00, 0, 0x03, 0x0008, 0x0006 },
- { 0x01, 0x00, 0, 0x03, 0x0008, 0x0007 },
- { 0x01, 0x00, 0, 0x03, 0x0008, 0x0008 },
- { 0x01, 0x00, 0, 0x03, 0x0008, 0x0009 },
- { 0x00, 0x01, 0, 0x03, 0x0000, 0x000a },
- { 0x00, 0x01, 0, 0x03, 0x0000, 0x000c },
- { 0x00, 0x02, 0, 0x03, 0x0000, 0x000e },
- { 0x00, 0x02, 0, 0x03, 0x0000, 0x0012 },
- { 0x00, 0x03, 0, 0x03, 0x0000, 0x0016 },
- { 0x00, 0x03, 0, 0x03, 0x0000, 0x001e },
- { 0x00, 0x04, 0, 0x03, 0x0000, 0x0026 },
- { 0x00, 0x04, 0, 0x03, 0x0000, 0x0036 },
- { 0x00, 0x01, 0, 0x03, 0x0001, 0x000a },
- { 0x00, 0x01, 0, 0x03, 0x0001, 0x000c },
- { 0x00, 0x02, 0, 0x03, 0x0001, 0x000e },
- { 0x00, 0x02, 0, 0x03, 0x0001, 0x0012 },
- { 0x00, 0x03, 0, 0x03, 0x0001, 0x0016 },
- { 0x00, 0x03, 0, 0x03, 0x0001, 0x001e },
- { 0x00, 0x04, 0, 0x03, 0x0001, 0x0026 },
- { 0x00, 0x04, 0, 0x03, 0x0001, 0x0036 },
- { 0x00, 0x01, 0, 0x03, 0x0002, 0x000a },
- { 0x00, 0x01, 0, 0x03, 0x0002, 0x000c },
- { 0x00, 0x02, 0, 0x03, 0x0002, 0x000e },
- { 0x00, 0x02, 0, 0x03, 0x0002, 0x0012 },
- { 0x00, 0x03, 0, 0x03, 0x0002, 0x0016 },
- { 0x00, 0x03, 0, 0x03, 0x0002, 0x001e },
- { 0x00, 0x04, 0, 0x03, 0x0002, 0x0026 },
- { 0x00, 0x04, 0, 0x03, 0x0002, 0x0036 },
- { 0x00, 0x01, 0, 0x03, 0x0003, 0x000a },
- { 0x00, 0x01, 0, 0x03, 0x0003, 0x000c },
- { 0x00, 0x02, 0, 0x03, 0x0003, 0x000e },
- { 0x00, 0x02, 0, 0x03, 0x0003, 0x0012 },
- { 0x00, 0x03, 0, 0x03, 0x0003, 0x0016 },
- { 0x00, 0x03, 0, 0x03, 0x0003, 0x001e },
- { 0x00, 0x04, 0, 0x03, 0x0003, 0x0026 },
- { 0x00, 0x04, 0, 0x03, 0x0003, 0x0036 },
- { 0x00, 0x01, 0, 0x03, 0x0004, 0x000a },
- { 0x00, 0x01, 0, 0x03, 0x0004, 0x000c },
- { 0x00, 0x02, 0, 0x03, 0x0004, 0x000e },
- { 0x00, 0x02, 0, 0x03, 0x0004, 0x0012 },
- { 0x00, 0x03, 0, 0x03, 0x0004, 0x0016 },
- { 0x00, 0x03, 0, 0x03, 0x0004, 0x001e },
- { 0x00, 0x04, 0, 0x03, 0x0004, 0x0026 },
- { 0x00, 0x04, 0, 0x03, 0x0004, 0x0036 },
- { 0x00, 0x01, 0, 0x03, 0x0005, 0x000a },
- { 0x00, 0x01, 0, 0x03, 0x0005, 0x000c },
- { 0x00, 0x02, 0, 0x03, 0x0005, 0x000e },
- { 0x00, 0x02, 0, 0x03, 0x0005, 0x0012 },
- { 0x00, 0x03, 0, 0x03, 0x0005, 0x0016 },
- { 0x00, 0x03, 0, 0x03, 0x0005, 0x001e },
- { 0x00, 0x04, 0, 0x03, 0x0005, 0x0026 },
- { 0x00, 0x04, 0, 0x03, 0x0005, 0x0036 },
- { 0x01, 0x01, 0, 0x03, 0x0006, 0x000a },
- { 0x01, 0x01, 0, 0x03, 0x0006, 0x000c },
- { 0x01, 0x02, 0, 0x03, 0x0006, 0x000e },
- { 0x01, 0x02, 0, 0x03, 0x0006, 0x0012 },
- { 0x01, 0x03, 0, 0x03, 0x0006, 0x0016 },
- { 0x01, 0x03, 0, 0x03, 0x0006, 0x001e },
- { 0x01, 0x04, 0, 0x03, 0x0006, 0x0026 },
- { 0x01, 0x04, 0, 0x03, 0x0006, 0x0036 },
- { 0x01, 0x01, 0, 0x03, 0x0008, 0x000a },
- { 0x01, 0x01, 0, 0x03, 0x0008, 0x000c },
- { 0x01, 0x02, 0, 0x03, 0x0008, 0x000e },
- { 0x01, 0x02, 0, 0x03, 0x0008, 0x0012 },
- { 0x01, 0x03, 0, 0x03, 0x0008, 0x0016 },
- { 0x01, 0x03, 0, 0x03, 0x0008, 0x001e },
- { 0x01, 0x04, 0, 0x03, 0x0008, 0x0026 },
- { 0x01, 0x04, 0, 0x03, 0x0008, 0x0036 },
- { 0x00, 0x00, -1, 0x00, 0x0000, 0x0002 },
- { 0x00, 0x00, -1, 0x01, 0x0000, 0x0003 },
- { 0x00, 0x00, -1, 0x02, 0x0000, 0x0004 },
- { 0x00, 0x00, -1, 0x03, 0x0000, 0x0005 },
- { 0x00, 0x00, -1, 0x03, 0x0000, 0x0006 },
- { 0x00, 0x00, -1, 0x03, 0x0000, 0x0007 },
- { 0x00, 0x00, -1, 0x03, 0x0000, 0x0008 },
- { 0x00, 0x00, -1, 0x03, 0x0000, 0x0009 },
- { 0x00, 0x00, -1, 0x00, 0x0001, 0x0002 },
- { 0x00, 0x00, -1, 0x01, 0x0001, 0x0003 },
- { 0x00, 0x00, -1, 0x02, 0x0001, 0x0004 },
- { 0x00, 0x00, -1, 0x03, 0x0001, 0x0005 },
- { 0x00, 0x00, -1, 0x03, 0x0001, 0x0006 },
- { 0x00, 0x00, -1, 0x03, 0x0001, 0x0007 },
- { 0x00, 0x00, -1, 0x03, 0x0001, 0x0008 },
- { 0x00, 0x00, -1, 0x03, 0x0001, 0x0009 },
- { 0x00, 0x00, -1, 0x00, 0x0002, 0x0002 },
- { 0x00, 0x00, -1, 0x01, 0x0002, 0x0003 },
- { 0x00, 0x00, -1, 0x02, 0x0002, 0x0004 },
- { 0x00, 0x00, -1, 0x03, 0x0002, 0x0005 },
- { 0x00, 0x00, -1, 0x03, 0x0002, 0x0006 },
- { 0x00, 0x00, -1, 0x03, 0x0002, 0x0007 },
- { 0x00, 0x00, -1, 0x03, 0x0002, 0x0008 },
- { 0x00, 0x00, -1, 0x03, 0x0002, 0x0009 },
- { 0x00, 0x00, -1, 0x00, 0x0003, 0x0002 },
- { 0x00, 0x00, -1, 0x01, 0x0003, 0x0003 },
- { 0x00, 0x00, -1, 0x02, 0x0003, 0x0004 },
- { 0x00, 0x00, -1, 0x03, 0x0003, 0x0005 },
- { 0x00, 0x00, -1, 0x03, 0x0003, 0x0006 },
- { 0x00, 0x00, -1, 0x03, 0x0003, 0x0007 },
- { 0x00, 0x00, -1, 0x03, 0x0003, 0x0008 },
- { 0x00, 0x00, -1, 0x03, 0x0003, 0x0009 },
- { 0x00, 0x00, -1, 0x00, 0x0004, 0x0002 },
- { 0x00, 0x00, -1, 0x01, 0x0004, 0x0003 },
- { 0x00, 0x00, -1, 0x02, 0x0004, 0x0004 },
- { 0x00, 0x00, -1, 0x03, 0x0004, 0x0005 },
- { 0x00, 0x00, -1, 0x03, 0x0004, 0x0006 },
- { 0x00, 0x00, -1, 0x03, 0x0004, 0x0007 },
- { 0x00, 0x00, -1, 0x03, 0x0004, 0x0008 },
- { 0x00, 0x00, -1, 0x03, 0x0004, 0x0009 },
- { 0x00, 0x00, -1, 0x00, 0x0005, 0x0002 },
- { 0x00, 0x00, -1, 0x01, 0x0005, 0x0003 },
- { 0x00, 0x00, -1, 0x02, 0x0005, 0x0004 },
- { 0x00, 0x00, -1, 0x03, 0x0005, 0x0005 },
- { 0x00, 0x00, -1, 0x03, 0x0005, 0x0006 },
- { 0x00, 0x00, -1, 0x03, 0x0005, 0x0007 },
- { 0x00, 0x00, -1, 0x03, 0x0005, 0x0008 },
- { 0x00, 0x00, -1, 0x03, 0x0005, 0x0009 },
- { 0x01, 0x00, -1, 0x00, 0x0006, 0x0002 },
- { 0x01, 0x00, -1, 0x01, 0x0006, 0x0003 },
- { 0x01, 0x00, -1, 0x02, 0x0006, 0x0004 },
- { 0x01, 0x00, -1, 0x03, 0x0006, 0x0005 },
- { 0x01, 0x00, -1, 0x03, 0x0006, 0x0006 },
- { 0x01, 0x00, -1, 0x03, 0x0006, 0x0007 },
- { 0x01, 0x00, -1, 0x03, 0x0006, 0x0008 },
- { 0x01, 0x00, -1, 0x03, 0x0006, 0x0009 },
- { 0x01, 0x00, -1, 0x00, 0x0008, 0x0002 },
- { 0x01, 0x00, -1, 0x01, 0x0008, 0x0003 },
- { 0x01, 0x00, -1, 0x02, 0x0008, 0x0004 },
- { 0x01, 0x00, -1, 0x03, 0x0008, 0x0005 },
- { 0x01, 0x00, -1, 0x03, 0x0008, 0x0006 },
- { 0x01, 0x00, -1, 0x03, 0x0008, 0x0007 },
- { 0x01, 0x00, -1, 0x03, 0x0008, 0x0008 },
- { 0x01, 0x00, -1, 0x03, 0x0008, 0x0009 },
- { 0x00, 0x01, -1, 0x03, 0x0000, 0x000a },
- { 0x00, 0x01, -1, 0x03, 0x0000, 0x000c },
- { 0x00, 0x02, -1, 0x03, 0x0000, 0x000e },
- { 0x00, 0x02, -1, 0x03, 0x0000, 0x0012 },
- { 0x00, 0x03, -1, 0x03, 0x0000, 0x0016 },
- { 0x00, 0x03, -1, 0x03, 0x0000, 0x001e },
- { 0x00, 0x04, -1, 0x03, 0x0000, 0x0026 },
- { 0x00, 0x04, -1, 0x03, 0x0000, 0x0036 },
- { 0x00, 0x01, -1, 0x03, 0x0001, 0x000a },
- { 0x00, 0x01, -1, 0x03, 0x0001, 0x000c },
- { 0x00, 0x02, -1, 0x03, 0x0001, 0x000e },
- { 0x00, 0x02, -1, 0x03, 0x0001, 0x0012 },
- { 0x00, 0x03, -1, 0x03, 0x0001, 0x0016 },
- { 0x00, 0x03, -1, 0x03, 0x0001, 0x001e },
- { 0x00, 0x04, -1, 0x03, 0x0001, 0x0026 },
- { 0x00, 0x04, -1, 0x03, 0x0001, 0x0036 },
- { 0x00, 0x01, -1, 0x03, 0x0002, 0x000a },
- { 0x00, 0x01, -1, 0x03, 0x0002, 0x000c },
- { 0x00, 0x02, -1, 0x03, 0x0002, 0x000e },
- { 0x00, 0x02, -1, 0x03, 0x0002, 0x0012 },
- { 0x00, 0x03, -1, 0x03, 0x0002, 0x0016 },
- { 0x00, 0x03, -1, 0x03, 0x0002, 0x001e },
- { 0x00, 0x04, -1, 0x03, 0x0002, 0x0026 },
- { 0x00, 0x04, -1, 0x03, 0x0002, 0x0036 },
- { 0x00, 0x01, -1, 0x03, 0x0003, 0x000a },
- { 0x00, 0x01, -1, 0x03, 0x0003, 0x000c },
- { 0x00, 0x02, -1, 0x03, 0x0003, 0x000e },
- { 0x00, 0x02, -1, 0x03, 0x0003, 0x0012 },
- { 0x00, 0x03, -1, 0x03, 0x0003, 0x0016 },
- { 0x00, 0x03, -1, 0x03, 0x0003, 0x001e },
- { 0x00, 0x04, -1, 0x03, 0x0003, 0x0026 },
- { 0x00, 0x04, -1, 0x03, 0x0003, 0x0036 },
- { 0x00, 0x01, -1, 0x03, 0x0004, 0x000a },
- { 0x00, 0x01, -1, 0x03, 0x0004, 0x000c },
- { 0x00, 0x02, -1, 0x03, 0x0004, 0x000e },
- { 0x00, 0x02, -1, 0x03, 0x0004, 0x0012 },
- { 0x00, 0x03, -1, 0x03, 0x0004, 0x0016 },
- { 0x00, 0x03, -1, 0x03, 0x0004, 0x001e },
- { 0x00, 0x04, -1, 0x03, 0x0004, 0x0026 },
- { 0x00, 0x04, -1, 0x03, 0x0004, 0x0036 },
- { 0x00, 0x01, -1, 0x03, 0x0005, 0x000a },
- { 0x00, 0x01, -1, 0x03, 0x0005, 0x000c },
- { 0x00, 0x02, -1, 0x03, 0x0005, 0x000e },
- { 0x00, 0x02, -1, 0x03, 0x0005, 0x0012 },
- { 0x00, 0x03, -1, 0x03, 0x0005, 0x0016 },
- { 0x00, 0x03, -1, 0x03, 0x0005, 0x001e },
- { 0x00, 0x04, -1, 0x03, 0x0005, 0x0026 },
- { 0x00, 0x04, -1, 0x03, 0x0005, 0x0036 },
- { 0x01, 0x01, -1, 0x03, 0x0006, 0x000a },
- { 0x01, 0x01, -1, 0x03, 0x0006, 0x000c },
- { 0x01, 0x02, -1, 0x03, 0x0006, 0x000e },
- { 0x01, 0x02, -1, 0x03, 0x0006, 0x0012 },
- { 0x01, 0x03, -1, 0x03, 0x0006, 0x0016 },
- { 0x01, 0x03, -1, 0x03, 0x0006, 0x001e },
- { 0x01, 0x04, -1, 0x03, 0x0006, 0x0026 },
- { 0x01, 0x04, -1, 0x03, 0x0006, 0x0036 },
- { 0x01, 0x01, -1, 0x03, 0x0008, 0x000a },
- { 0x01, 0x01, -1, 0x03, 0x0008, 0x000c },
- { 0x01, 0x02, -1, 0x03, 0x0008, 0x000e },
- { 0x01, 0x02, -1, 0x03, 0x0008, 0x0012 },
- { 0x01, 0x03, -1, 0x03, 0x0008, 0x0016 },
- { 0x01, 0x03, -1, 0x03, 0x0008, 0x001e },
- { 0x01, 0x04, -1, 0x03, 0x0008, 0x0026 },
- { 0x01, 0x04, -1, 0x03, 0x0008, 0x0036 },
- { 0x02, 0x00, -1, 0x00, 0x000a, 0x0002 },
- { 0x02, 0x00, -1, 0x01, 0x000a, 0x0003 },
- { 0x02, 0x00, -1, 0x02, 0x000a, 0x0004 },
- { 0x02, 0x00, -1, 0x03, 0x000a, 0x0005 },
- { 0x02, 0x00, -1, 0x03, 0x000a, 0x0006 },
- { 0x02, 0x00, -1, 0x03, 0x000a, 0x0007 },
- { 0x02, 0x00, -1, 0x03, 0x000a, 0x0008 },
- { 0x02, 0x00, -1, 0x03, 0x000a, 0x0009 },
- { 0x02, 0x00, -1, 0x00, 0x000e, 0x0002 },
- { 0x02, 0x00, -1, 0x01, 0x000e, 0x0003 },
- { 0x02, 0x00, -1, 0x02, 0x000e, 0x0004 },
- { 0x02, 0x00, -1, 0x03, 0x000e, 0x0005 },
- { 0x02, 0x00, -1, 0x03, 0x000e, 0x0006 },
- { 0x02, 0x00, -1, 0x03, 0x000e, 0x0007 },
- { 0x02, 0x00, -1, 0x03, 0x000e, 0x0008 },
- { 0x02, 0x00, -1, 0x03, 0x000e, 0x0009 },
- { 0x03, 0x00, -1, 0x00, 0x0012, 0x0002 },
- { 0x03, 0x00, -1, 0x01, 0x0012, 0x0003 },
- { 0x03, 0x00, -1, 0x02, 0x0012, 0x0004 },
- { 0x03, 0x00, -1, 0x03, 0x0012, 0x0005 },
- { 0x03, 0x00, -1, 0x03, 0x0012, 0x0006 },
- { 0x03, 0x00, -1, 0x03, 0x0012, 0x0007 },
- { 0x03, 0x00, -1, 0x03, 0x0012, 0x0008 },
- { 0x03, 0x00, -1, 0x03, 0x0012, 0x0009 },
- { 0x03, 0x00, -1, 0x00, 0x001a, 0x0002 },
- { 0x03, 0x00, -1, 0x01, 0x001a, 0x0003 },
- { 0x03, 0x00, -1, 0x02, 0x001a, 0x0004 },
- { 0x03, 0x00, -1, 0x03, 0x001a, 0x0005 },
- { 0x03, 0x00, -1, 0x03, 0x001a, 0x0006 },
- { 0x03, 0x00, -1, 0x03, 0x001a, 0x0007 },
- { 0x03, 0x00, -1, 0x03, 0x001a, 0x0008 },
- { 0x03, 0x00, -1, 0x03, 0x001a, 0x0009 },
- { 0x04, 0x00, -1, 0x00, 0x0022, 0x0002 },
- { 0x04, 0x00, -1, 0x01, 0x0022, 0x0003 },
- { 0x04, 0x00, -1, 0x02, 0x0022, 0x0004 },
- { 0x04, 0x00, -1, 0x03, 0x0022, 0x0005 },
- { 0x04, 0x00, -1, 0x03, 0x0022, 0x0006 },
- { 0x04, 0x00, -1, 0x03, 0x0022, 0x0007 },
- { 0x04, 0x00, -1, 0x03, 0x0022, 0x0008 },
- { 0x04, 0x00, -1, 0x03, 0x0022, 0x0009 },
- { 0x04, 0x00, -1, 0x00, 0x0032, 0x0002 },
- { 0x04, 0x00, -1, 0x01, 0x0032, 0x0003 },
- { 0x04, 0x00, -1, 0x02, 0x0032, 0x0004 },
- { 0x04, 0x00, -1, 0x03, 0x0032, 0x0005 },
- { 0x04, 0x00, -1, 0x03, 0x0032, 0x0006 },
- { 0x04, 0x00, -1, 0x03, 0x0032, 0x0007 },
- { 0x04, 0x00, -1, 0x03, 0x0032, 0x0008 },
- { 0x04, 0x00, -1, 0x03, 0x0032, 0x0009 },
- { 0x05, 0x00, -1, 0x00, 0x0042, 0x0002 },
- { 0x05, 0x00, -1, 0x01, 0x0042, 0x0003 },
- { 0x05, 0x00, -1, 0x02, 0x0042, 0x0004 },
- { 0x05, 0x00, -1, 0x03, 0x0042, 0x0005 },
- { 0x05, 0x00, -1, 0x03, 0x0042, 0x0006 },
- { 0x05, 0x00, -1, 0x03, 0x0042, 0x0007 },
- { 0x05, 0x00, -1, 0x03, 0x0042, 0x0008 },
- { 0x05, 0x00, -1, 0x03, 0x0042, 0x0009 },
- { 0x05, 0x00, -1, 0x00, 0x0062, 0x0002 },
- { 0x05, 0x00, -1, 0x01, 0x0062, 0x0003 },
- { 0x05, 0x00, -1, 0x02, 0x0062, 0x0004 },
- { 0x05, 0x00, -1, 0x03, 0x0062, 0x0005 },
- { 0x05, 0x00, -1, 0x03, 0x0062, 0x0006 },
- { 0x05, 0x00, -1, 0x03, 0x0062, 0x0007 },
- { 0x05, 0x00, -1, 0x03, 0x0062, 0x0008 },
- { 0x05, 0x00, -1, 0x03, 0x0062, 0x0009 },
- { 0x02, 0x01, -1, 0x03, 0x000a, 0x000a },
- { 0x02, 0x01, -1, 0x03, 0x000a, 0x000c },
- { 0x02, 0x02, -1, 0x03, 0x000a, 0x000e },
- { 0x02, 0x02, -1, 0x03, 0x000a, 0x0012 },
- { 0x02, 0x03, -1, 0x03, 0x000a, 0x0016 },
- { 0x02, 0x03, -1, 0x03, 0x000a, 0x001e },
- { 0x02, 0x04, -1, 0x03, 0x000a, 0x0026 },
- { 0x02, 0x04, -1, 0x03, 0x000a, 0x0036 },
- { 0x02, 0x01, -1, 0x03, 0x000e, 0x000a },
- { 0x02, 0x01, -1, 0x03, 0x000e, 0x000c },
- { 0x02, 0x02, -1, 0x03, 0x000e, 0x000e },
- { 0x02, 0x02, -1, 0x03, 0x000e, 0x0012 },
- { 0x02, 0x03, -1, 0x03, 0x000e, 0x0016 },
- { 0x02, 0x03, -1, 0x03, 0x000e, 0x001e },
- { 0x02, 0x04, -1, 0x03, 0x000e, 0x0026 },
- { 0x02, 0x04, -1, 0x03, 0x000e, 0x0036 },
- { 0x03, 0x01, -1, 0x03, 0x0012, 0x000a },
- { 0x03, 0x01, -1, 0x03, 0x0012, 0x000c },
- { 0x03, 0x02, -1, 0x03, 0x0012, 0x000e },
- { 0x03, 0x02, -1, 0x03, 0x0012, 0x0012 },
- { 0x03, 0x03, -1, 0x03, 0x0012, 0x0016 },
- { 0x03, 0x03, -1, 0x03, 0x0012, 0x001e },
- { 0x03, 0x04, -1, 0x03, 0x0012, 0x0026 },
- { 0x03, 0x04, -1, 0x03, 0x0012, 0x0036 },
- { 0x03, 0x01, -1, 0x03, 0x001a, 0x000a },
- { 0x03, 0x01, -1, 0x03, 0x001a, 0x000c },
- { 0x03, 0x02, -1, 0x03, 0x001a, 0x000e },
- { 0x03, 0x02, -1, 0x03, 0x001a, 0x0012 },
- { 0x03, 0x03, -1, 0x03, 0x001a, 0x0016 },
- { 0x03, 0x03, -1, 0x03, 0x001a, 0x001e },
- { 0x03, 0x04, -1, 0x03, 0x001a, 0x0026 },
- { 0x03, 0x04, -1, 0x03, 0x001a, 0x0036 },
- { 0x04, 0x01, -1, 0x03, 0x0022, 0x000a },
- { 0x04, 0x01, -1, 0x03, 0x0022, 0x000c },
- { 0x04, 0x02, -1, 0x03, 0x0022, 0x000e },
- { 0x04, 0x02, -1, 0x03, 0x0022, 0x0012 },
- { 0x04, 0x03, -1, 0x03, 0x0022, 0x0016 },
- { 0x04, 0x03, -1, 0x03, 0x0022, 0x001e },
- { 0x04, 0x04, -1, 0x03, 0x0022, 0x0026 },
- { 0x04, 0x04, -1, 0x03, 0x0022, 0x0036 },
- { 0x04, 0x01, -1, 0x03, 0x0032, 0x000a },
- { 0x04, 0x01, -1, 0x03, 0x0032, 0x000c },
- { 0x04, 0x02, -1, 0x03, 0x0032, 0x000e },
- { 0x04, 0x02, -1, 0x03, 0x0032, 0x0012 },
- { 0x04, 0x03, -1, 0x03, 0x0032, 0x0016 },
- { 0x04, 0x03, -1, 0x03, 0x0032, 0x001e },
- { 0x04, 0x04, -1, 0x03, 0x0032, 0x0026 },
- { 0x04, 0x04, -1, 0x03, 0x0032, 0x0036 },
- { 0x05, 0x01, -1, 0x03, 0x0042, 0x000a },
- { 0x05, 0x01, -1, 0x03, 0x0042, 0x000c },
- { 0x05, 0x02, -1, 0x03, 0x0042, 0x000e },
- { 0x05, 0x02, -1, 0x03, 0x0042, 0x0012 },
- { 0x05, 0x03, -1, 0x03, 0x0042, 0x0016 },
- { 0x05, 0x03, -1, 0x03, 0x0042, 0x001e },
- { 0x05, 0x04, -1, 0x03, 0x0042, 0x0026 },
- { 0x05, 0x04, -1, 0x03, 0x0042, 0x0036 },
- { 0x05, 0x01, -1, 0x03, 0x0062, 0x000a },
- { 0x05, 0x01, -1, 0x03, 0x0062, 0x000c },
- { 0x05, 0x02, -1, 0x03, 0x0062, 0x000e },
- { 0x05, 0x02, -1, 0x03, 0x0062, 0x0012 },
- { 0x05, 0x03, -1, 0x03, 0x0062, 0x0016 },
- { 0x05, 0x03, -1, 0x03, 0x0062, 0x001e },
- { 0x05, 0x04, -1, 0x03, 0x0062, 0x0026 },
- { 0x05, 0x04, -1, 0x03, 0x0062, 0x0036 },
- { 0x00, 0x05, -1, 0x03, 0x0000, 0x0046 },
- { 0x00, 0x05, -1, 0x03, 0x0000, 0x0066 },
- { 0x00, 0x06, -1, 0x03, 0x0000, 0x0086 },
- { 0x00, 0x07, -1, 0x03, 0x0000, 0x00c6 },
- { 0x00, 0x08, -1, 0x03, 0x0000, 0x0146 },
- { 0x00, 0x09, -1, 0x03, 0x0000, 0x0246 },
- { 0x00, 0x0a, -1, 0x03, 0x0000, 0x0446 },
- { 0x00, 0x18, -1, 0x03, 0x0000, 0x0846 },
- { 0x00, 0x05, -1, 0x03, 0x0001, 0x0046 },
- { 0x00, 0x05, -1, 0x03, 0x0001, 0x0066 },
- { 0x00, 0x06, -1, 0x03, 0x0001, 0x0086 },
- { 0x00, 0x07, -1, 0x03, 0x0001, 0x00c6 },
- { 0x00, 0x08, -1, 0x03, 0x0001, 0x0146 },
- { 0x00, 0x09, -1, 0x03, 0x0001, 0x0246 },
- { 0x00, 0x0a, -1, 0x03, 0x0001, 0x0446 },
- { 0x00, 0x18, -1, 0x03, 0x0001, 0x0846 },
- { 0x00, 0x05, -1, 0x03, 0x0002, 0x0046 },
- { 0x00, 0x05, -1, 0x03, 0x0002, 0x0066 },
- { 0x00, 0x06, -1, 0x03, 0x0002, 0x0086 },
- { 0x00, 0x07, -1, 0x03, 0x0002, 0x00c6 },
- { 0x00, 0x08, -1, 0x03, 0x0002, 0x0146 },
- { 0x00, 0x09, -1, 0x03, 0x0002, 0x0246 },
- { 0x00, 0x0a, -1, 0x03, 0x0002, 0x0446 },
- { 0x00, 0x18, -1, 0x03, 0x0002, 0x0846 },
- { 0x00, 0x05, -1, 0x03, 0x0003, 0x0046 },
- { 0x00, 0x05, -1, 0x03, 0x0003, 0x0066 },
- { 0x00, 0x06, -1, 0x03, 0x0003, 0x0086 },
- { 0x00, 0x07, -1, 0x03, 0x0003, 0x00c6 },
- { 0x00, 0x08, -1, 0x03, 0x0003, 0x0146 },
- { 0x00, 0x09, -1, 0x03, 0x0003, 0x0246 },
- { 0x00, 0x0a, -1, 0x03, 0x0003, 0x0446 },
- { 0x00, 0x18, -1, 0x03, 0x0003, 0x0846 },
- { 0x00, 0x05, -1, 0x03, 0x0004, 0x0046 },
- { 0x00, 0x05, -1, 0x03, 0x0004, 0x0066 },
- { 0x00, 0x06, -1, 0x03, 0x0004, 0x0086 },
- { 0x00, 0x07, -1, 0x03, 0x0004, 0x00c6 },
- { 0x00, 0x08, -1, 0x03, 0x0004, 0x0146 },
- { 0x00, 0x09, -1, 0x03, 0x0004, 0x0246 },
- { 0x00, 0x0a, -1, 0x03, 0x0004, 0x0446 },
- { 0x00, 0x18, -1, 0x03, 0x0004, 0x0846 },
- { 0x00, 0x05, -1, 0x03, 0x0005, 0x0046 },
- { 0x00, 0x05, -1, 0x03, 0x0005, 0x0066 },
- { 0x00, 0x06, -1, 0x03, 0x0005, 0x0086 },
- { 0x00, 0x07, -1, 0x03, 0x0005, 0x00c6 },
- { 0x00, 0x08, -1, 0x03, 0x0005, 0x0146 },
- { 0x00, 0x09, -1, 0x03, 0x0005, 0x0246 },
- { 0x00, 0x0a, -1, 0x03, 0x0005, 0x0446 },
- { 0x00, 0x18, -1, 0x03, 0x0005, 0x0846 },
- { 0x01, 0x05, -1, 0x03, 0x0006, 0x0046 },
- { 0x01, 0x05, -1, 0x03, 0x0006, 0x0066 },
- { 0x01, 0x06, -1, 0x03, 0x0006, 0x0086 },
- { 0x01, 0x07, -1, 0x03, 0x0006, 0x00c6 },
- { 0x01, 0x08, -1, 0x03, 0x0006, 0x0146 },
- { 0x01, 0x09, -1, 0x03, 0x0006, 0x0246 },
- { 0x01, 0x0a, -1, 0x03, 0x0006, 0x0446 },
- { 0x01, 0x18, -1, 0x03, 0x0006, 0x0846 },
- { 0x01, 0x05, -1, 0x03, 0x0008, 0x0046 },
- { 0x01, 0x05, -1, 0x03, 0x0008, 0x0066 },
- { 0x01, 0x06, -1, 0x03, 0x0008, 0x0086 },
- { 0x01, 0x07, -1, 0x03, 0x0008, 0x00c6 },
- { 0x01, 0x08, -1, 0x03, 0x0008, 0x0146 },
- { 0x01, 0x09, -1, 0x03, 0x0008, 0x0246 },
- { 0x01, 0x0a, -1, 0x03, 0x0008, 0x0446 },
- { 0x01, 0x18, -1, 0x03, 0x0008, 0x0846 },
- { 0x06, 0x00, -1, 0x00, 0x0082, 0x0002 },
- { 0x06, 0x00, -1, 0x01, 0x0082, 0x0003 },
- { 0x06, 0x00, -1, 0x02, 0x0082, 0x0004 },
- { 0x06, 0x00, -1, 0x03, 0x0082, 0x0005 },
- { 0x06, 0x00, -1, 0x03, 0x0082, 0x0006 },
- { 0x06, 0x00, -1, 0x03, 0x0082, 0x0007 },
- { 0x06, 0x00, -1, 0x03, 0x0082, 0x0008 },
- { 0x06, 0x00, -1, 0x03, 0x0082, 0x0009 },
- { 0x07, 0x00, -1, 0x00, 0x00c2, 0x0002 },
- { 0x07, 0x00, -1, 0x01, 0x00c2, 0x0003 },
- { 0x07, 0x00, -1, 0x02, 0x00c2, 0x0004 },
- { 0x07, 0x00, -1, 0x03, 0x00c2, 0x0005 },
- { 0x07, 0x00, -1, 0x03, 0x00c2, 0x0006 },
- { 0x07, 0x00, -1, 0x03, 0x00c2, 0x0007 },
- { 0x07, 0x00, -1, 0x03, 0x00c2, 0x0008 },
- { 0x07, 0x00, -1, 0x03, 0x00c2, 0x0009 },
- { 0x08, 0x00, -1, 0x00, 0x0142, 0x0002 },
- { 0x08, 0x00, -1, 0x01, 0x0142, 0x0003 },
- { 0x08, 0x00, -1, 0x02, 0x0142, 0x0004 },
- { 0x08, 0x00, -1, 0x03, 0x0142, 0x0005 },
- { 0x08, 0x00, -1, 0x03, 0x0142, 0x0006 },
- { 0x08, 0x00, -1, 0x03, 0x0142, 0x0007 },
- { 0x08, 0x00, -1, 0x03, 0x0142, 0x0008 },
- { 0x08, 0x00, -1, 0x03, 0x0142, 0x0009 },
- { 0x09, 0x00, -1, 0x00, 0x0242, 0x0002 },
- { 0x09, 0x00, -1, 0x01, 0x0242, 0x0003 },
- { 0x09, 0x00, -1, 0x02, 0x0242, 0x0004 },
- { 0x09, 0x00, -1, 0x03, 0x0242, 0x0005 },
- { 0x09, 0x00, -1, 0x03, 0x0242, 0x0006 },
- { 0x09, 0x00, -1, 0x03, 0x0242, 0x0007 },
- { 0x09, 0x00, -1, 0x03, 0x0242, 0x0008 },
- { 0x09, 0x00, -1, 0x03, 0x0242, 0x0009 },
- { 0x0a, 0x00, -1, 0x00, 0x0442, 0x0002 },
- { 0x0a, 0x00, -1, 0x01, 0x0442, 0x0003 },
- { 0x0a, 0x00, -1, 0x02, 0x0442, 0x0004 },
- { 0x0a, 0x00, -1, 0x03, 0x0442, 0x0005 },
- { 0x0a, 0x00, -1, 0x03, 0x0442, 0x0006 },
- { 0x0a, 0x00, -1, 0x03, 0x0442, 0x0007 },
- { 0x0a, 0x00, -1, 0x03, 0x0442, 0x0008 },
- { 0x0a, 0x00, -1, 0x03, 0x0442, 0x0009 },
- { 0x0c, 0x00, -1, 0x00, 0x0842, 0x0002 },
- { 0x0c, 0x00, -1, 0x01, 0x0842, 0x0003 },
- { 0x0c, 0x00, -1, 0x02, 0x0842, 0x0004 },
- { 0x0c, 0x00, -1, 0x03, 0x0842, 0x0005 },
- { 0x0c, 0x00, -1, 0x03, 0x0842, 0x0006 },
- { 0x0c, 0x00, -1, 0x03, 0x0842, 0x0007 },
- { 0x0c, 0x00, -1, 0x03, 0x0842, 0x0008 },
- { 0x0c, 0x00, -1, 0x03, 0x0842, 0x0009 },
- { 0x0e, 0x00, -1, 0x00, 0x1842, 0x0002 },
- { 0x0e, 0x00, -1, 0x01, 0x1842, 0x0003 },
- { 0x0e, 0x00, -1, 0x02, 0x1842, 0x0004 },
- { 0x0e, 0x00, -1, 0x03, 0x1842, 0x0005 },
- { 0x0e, 0x00, -1, 0x03, 0x1842, 0x0006 },
- { 0x0e, 0x00, -1, 0x03, 0x1842, 0x0007 },
- { 0x0e, 0x00, -1, 0x03, 0x1842, 0x0008 },
- { 0x0e, 0x00, -1, 0x03, 0x1842, 0x0009 },
- { 0x18, 0x00, -1, 0x00, 0x5842, 0x0002 },
- { 0x18, 0x00, -1, 0x01, 0x5842, 0x0003 },
- { 0x18, 0x00, -1, 0x02, 0x5842, 0x0004 },
- { 0x18, 0x00, -1, 0x03, 0x5842, 0x0005 },
- { 0x18, 0x00, -1, 0x03, 0x5842, 0x0006 },
- { 0x18, 0x00, -1, 0x03, 0x5842, 0x0007 },
- { 0x18, 0x00, -1, 0x03, 0x5842, 0x0008 },
- { 0x18, 0x00, -1, 0x03, 0x5842, 0x0009 },
- { 0x02, 0x05, -1, 0x03, 0x000a, 0x0046 },
- { 0x02, 0x05, -1, 0x03, 0x000a, 0x0066 },
- { 0x02, 0x06, -1, 0x03, 0x000a, 0x0086 },
- { 0x02, 0x07, -1, 0x03, 0x000a, 0x00c6 },
- { 0x02, 0x08, -1, 0x03, 0x000a, 0x0146 },
- { 0x02, 0x09, -1, 0x03, 0x000a, 0x0246 },
- { 0x02, 0x0a, -1, 0x03, 0x000a, 0x0446 },
- { 0x02, 0x18, -1, 0x03, 0x000a, 0x0846 },
- { 0x02, 0x05, -1, 0x03, 0x000e, 0x0046 },
- { 0x02, 0x05, -1, 0x03, 0x000e, 0x0066 },
- { 0x02, 0x06, -1, 0x03, 0x000e, 0x0086 },
- { 0x02, 0x07, -1, 0x03, 0x000e, 0x00c6 },
- { 0x02, 0x08, -1, 0x03, 0x000e, 0x0146 },
- { 0x02, 0x09, -1, 0x03, 0x000e, 0x0246 },
- { 0x02, 0x0a, -1, 0x03, 0x000e, 0x0446 },
- { 0x02, 0x18, -1, 0x03, 0x000e, 0x0846 },
- { 0x03, 0x05, -1, 0x03, 0x0012, 0x0046 },
- { 0x03, 0x05, -1, 0x03, 0x0012, 0x0066 },
- { 0x03, 0x06, -1, 0x03, 0x0012, 0x0086 },
- { 0x03, 0x07, -1, 0x03, 0x0012, 0x00c6 },
- { 0x03, 0x08, -1, 0x03, 0x0012, 0x0146 },
- { 0x03, 0x09, -1, 0x03, 0x0012, 0x0246 },
- { 0x03, 0x0a, -1, 0x03, 0x0012, 0x0446 },
- { 0x03, 0x18, -1, 0x03, 0x0012, 0x0846 },
- { 0x03, 0x05, -1, 0x03, 0x001a, 0x0046 },
- { 0x03, 0x05, -1, 0x03, 0x001a, 0x0066 },
- { 0x03, 0x06, -1, 0x03, 0x001a, 0x0086 },
- { 0x03, 0x07, -1, 0x03, 0x001a, 0x00c6 },
- { 0x03, 0x08, -1, 0x03, 0x001a, 0x0146 },
- { 0x03, 0x09, -1, 0x03, 0x001a, 0x0246 },
- { 0x03, 0x0a, -1, 0x03, 0x001a, 0x0446 },
- { 0x03, 0x18, -1, 0x03, 0x001a, 0x0846 },
- { 0x04, 0x05, -1, 0x03, 0x0022, 0x0046 },
- { 0x04, 0x05, -1, 0x03, 0x0022, 0x0066 },
- { 0x04, 0x06, -1, 0x03, 0x0022, 0x0086 },
- { 0x04, 0x07, -1, 0x03, 0x0022, 0x00c6 },
- { 0x04, 0x08, -1, 0x03, 0x0022, 0x0146 },
- { 0x04, 0x09, -1, 0x03, 0x0022, 0x0246 },
- { 0x04, 0x0a, -1, 0x03, 0x0022, 0x0446 },
- { 0x04, 0x18, -1, 0x03, 0x0022, 0x0846 },
- { 0x04, 0x05, -1, 0x03, 0x0032, 0x0046 },
- { 0x04, 0x05, -1, 0x03, 0x0032, 0x0066 },
- { 0x04, 0x06, -1, 0x03, 0x0032, 0x0086 },
- { 0x04, 0x07, -1, 0x03, 0x0032, 0x00c6 },
- { 0x04, 0x08, -1, 0x03, 0x0032, 0x0146 },
- { 0x04, 0x09, -1, 0x03, 0x0032, 0x0246 },
- { 0x04, 0x0a, -1, 0x03, 0x0032, 0x0446 },
- { 0x04, 0x18, -1, 0x03, 0x0032, 0x0846 },
- { 0x05, 0x05, -1, 0x03, 0x0042, 0x0046 },
- { 0x05, 0x05, -1, 0x03, 0x0042, 0x0066 },
- { 0x05, 0x06, -1, 0x03, 0x0042, 0x0086 },
- { 0x05, 0x07, -1, 0x03, 0x0042, 0x00c6 },
- { 0x05, 0x08, -1, 0x03, 0x0042, 0x0146 },
- { 0x05, 0x09, -1, 0x03, 0x0042, 0x0246 },
- { 0x05, 0x0a, -1, 0x03, 0x0042, 0x0446 },
- { 0x05, 0x18, -1, 0x03, 0x0042, 0x0846 },
- { 0x05, 0x05, -1, 0x03, 0x0062, 0x0046 },
- { 0x05, 0x05, -1, 0x03, 0x0062, 0x0066 },
- { 0x05, 0x06, -1, 0x03, 0x0062, 0x0086 },
- { 0x05, 0x07, -1, 0x03, 0x0062, 0x00c6 },
- { 0x05, 0x08, -1, 0x03, 0x0062, 0x0146 },
- { 0x05, 0x09, -1, 0x03, 0x0062, 0x0246 },
- { 0x05, 0x0a, -1, 0x03, 0x0062, 0x0446 },
- { 0x05, 0x18, -1, 0x03, 0x0062, 0x0846 },
- { 0x06, 0x01, -1, 0x03, 0x0082, 0x000a },
- { 0x06, 0x01, -1, 0x03, 0x0082, 0x000c },
- { 0x06, 0x02, -1, 0x03, 0x0082, 0x000e },
- { 0x06, 0x02, -1, 0x03, 0x0082, 0x0012 },
- { 0x06, 0x03, -1, 0x03, 0x0082, 0x0016 },
- { 0x06, 0x03, -1, 0x03, 0x0082, 0x001e },
- { 0x06, 0x04, -1, 0x03, 0x0082, 0x0026 },
- { 0x06, 0x04, -1, 0x03, 0x0082, 0x0036 },
- { 0x07, 0x01, -1, 0x03, 0x00c2, 0x000a },
- { 0x07, 0x01, -1, 0x03, 0x00c2, 0x000c },
- { 0x07, 0x02, -1, 0x03, 0x00c2, 0x000e },
- { 0x07, 0x02, -1, 0x03, 0x00c2, 0x0012 },
- { 0x07, 0x03, -1, 0x03, 0x00c2, 0x0016 },
- { 0x07, 0x03, -1, 0x03, 0x00c2, 0x001e },
- { 0x07, 0x04, -1, 0x03, 0x00c2, 0x0026 },
- { 0x07, 0x04, -1, 0x03, 0x00c2, 0x0036 },
- { 0x08, 0x01, -1, 0x03, 0x0142, 0x000a },
- { 0x08, 0x01, -1, 0x03, 0x0142, 0x000c },
- { 0x08, 0x02, -1, 0x03, 0x0142, 0x000e },
- { 0x08, 0x02, -1, 0x03, 0x0142, 0x0012 },
- { 0x08, 0x03, -1, 0x03, 0x0142, 0x0016 },
- { 0x08, 0x03, -1, 0x03, 0x0142, 0x001e },
- { 0x08, 0x04, -1, 0x03, 0x0142, 0x0026 },
- { 0x08, 0x04, -1, 0x03, 0x0142, 0x0036 },
- { 0x09, 0x01, -1, 0x03, 0x0242, 0x000a },
- { 0x09, 0x01, -1, 0x03, 0x0242, 0x000c },
- { 0x09, 0x02, -1, 0x03, 0x0242, 0x000e },
- { 0x09, 0x02, -1, 0x03, 0x0242, 0x0012 },
- { 0x09, 0x03, -1, 0x03, 0x0242, 0x0016 },
- { 0x09, 0x03, -1, 0x03, 0x0242, 0x001e },
- { 0x09, 0x04, -1, 0x03, 0x0242, 0x0026 },
- { 0x09, 0x04, -1, 0x03, 0x0242, 0x0036 },
- { 0x0a, 0x01, -1, 0x03, 0x0442, 0x000a },
- { 0x0a, 0x01, -1, 0x03, 0x0442, 0x000c },
- { 0x0a, 0x02, -1, 0x03, 0x0442, 0x000e },
- { 0x0a, 0x02, -1, 0x03, 0x0442, 0x0012 },
- { 0x0a, 0x03, -1, 0x03, 0x0442, 0x0016 },
- { 0x0a, 0x03, -1, 0x03, 0x0442, 0x001e },
- { 0x0a, 0x04, -1, 0x03, 0x0442, 0x0026 },
- { 0x0a, 0x04, -1, 0x03, 0x0442, 0x0036 },
- { 0x0c, 0x01, -1, 0x03, 0x0842, 0x000a },
- { 0x0c, 0x01, -1, 0x03, 0x0842, 0x000c },
- { 0x0c, 0x02, -1, 0x03, 0x0842, 0x000e },
- { 0x0c, 0x02, -1, 0x03, 0x0842, 0x0012 },
- { 0x0c, 0x03, -1, 0x03, 0x0842, 0x0016 },
- { 0x0c, 0x03, -1, 0x03, 0x0842, 0x001e },
- { 0x0c, 0x04, -1, 0x03, 0x0842, 0x0026 },
- { 0x0c, 0x04, -1, 0x03, 0x0842, 0x0036 },
- { 0x0e, 0x01, -1, 0x03, 0x1842, 0x000a },
- { 0x0e, 0x01, -1, 0x03, 0x1842, 0x000c },
- { 0x0e, 0x02, -1, 0x03, 0x1842, 0x000e },
- { 0x0e, 0x02, -1, 0x03, 0x1842, 0x0012 },
- { 0x0e, 0x03, -1, 0x03, 0x1842, 0x0016 },
- { 0x0e, 0x03, -1, 0x03, 0x1842, 0x001e },
- { 0x0e, 0x04, -1, 0x03, 0x1842, 0x0026 },
- { 0x0e, 0x04, -1, 0x03, 0x1842, 0x0036 },
- { 0x18, 0x01, -1, 0x03, 0x5842, 0x000a },
- { 0x18, 0x01, -1, 0x03, 0x5842, 0x000c },
- { 0x18, 0x02, -1, 0x03, 0x5842, 0x000e },
- { 0x18, 0x02, -1, 0x03, 0x5842, 0x0012 },
- { 0x18, 0x03, -1, 0x03, 0x5842, 0x0016 },
- { 0x18, 0x03, -1, 0x03, 0x5842, 0x001e },
- { 0x18, 0x04, -1, 0x03, 0x5842, 0x0026 },
- { 0x18, 0x04, -1, 0x03, 0x5842, 0x0036 },
- { 0x06, 0x05, -1, 0x03, 0x0082, 0x0046 },
- { 0x06, 0x05, -1, 0x03, 0x0082, 0x0066 },
- { 0x06, 0x06, -1, 0x03, 0x0082, 0x0086 },
- { 0x06, 0x07, -1, 0x03, 0x0082, 0x00c6 },
- { 0x06, 0x08, -1, 0x03, 0x0082, 0x0146 },
- { 0x06, 0x09, -1, 0x03, 0x0082, 0x0246 },
- { 0x06, 0x0a, -1, 0x03, 0x0082, 0x0446 },
- { 0x06, 0x18, -1, 0x03, 0x0082, 0x0846 },
- { 0x07, 0x05, -1, 0x03, 0x00c2, 0x0046 },
- { 0x07, 0x05, -1, 0x03, 0x00c2, 0x0066 },
- { 0x07, 0x06, -1, 0x03, 0x00c2, 0x0086 },
- { 0x07, 0x07, -1, 0x03, 0x00c2, 0x00c6 },
- { 0x07, 0x08, -1, 0x03, 0x00c2, 0x0146 },
- { 0x07, 0x09, -1, 0x03, 0x00c2, 0x0246 },
- { 0x07, 0x0a, -1, 0x03, 0x00c2, 0x0446 },
- { 0x07, 0x18, -1, 0x03, 0x00c2, 0x0846 },
- { 0x08, 0x05, -1, 0x03, 0x0142, 0x0046 },
- { 0x08, 0x05, -1, 0x03, 0x0142, 0x0066 },
- { 0x08, 0x06, -1, 0x03, 0x0142, 0x0086 },
- { 0x08, 0x07, -1, 0x03, 0x0142, 0x00c6 },
- { 0x08, 0x08, -1, 0x03, 0x0142, 0x0146 },
- { 0x08, 0x09, -1, 0x03, 0x0142, 0x0246 },
- { 0x08, 0x0a, -1, 0x03, 0x0142, 0x0446 },
- { 0x08, 0x18, -1, 0x03, 0x0142, 0x0846 },
- { 0x09, 0x05, -1, 0x03, 0x0242, 0x0046 },
- { 0x09, 0x05, -1, 0x03, 0x0242, 0x0066 },
- { 0x09, 0x06, -1, 0x03, 0x0242, 0x0086 },
- { 0x09, 0x07, -1, 0x03, 0x0242, 0x00c6 },
- { 0x09, 0x08, -1, 0x03, 0x0242, 0x0146 },
- { 0x09, 0x09, -1, 0x03, 0x0242, 0x0246 },
- { 0x09, 0x0a, -1, 0x03, 0x0242, 0x0446 },
- { 0x09, 0x18, -1, 0x03, 0x0242, 0x0846 },
- { 0x0a, 0x05, -1, 0x03, 0x0442, 0x0046 },
- { 0x0a, 0x05, -1, 0x03, 0x0442, 0x0066 },
- { 0x0a, 0x06, -1, 0x03, 0x0442, 0x0086 },
- { 0x0a, 0x07, -1, 0x03, 0x0442, 0x00c6 },
- { 0x0a, 0x08, -1, 0x03, 0x0442, 0x0146 },
- { 0x0a, 0x09, -1, 0x03, 0x0442, 0x0246 },
- { 0x0a, 0x0a, -1, 0x03, 0x0442, 0x0446 },
- { 0x0a, 0x18, -1, 0x03, 0x0442, 0x0846 },
- { 0x0c, 0x05, -1, 0x03, 0x0842, 0x0046 },
- { 0x0c, 0x05, -1, 0x03, 0x0842, 0x0066 },
- { 0x0c, 0x06, -1, 0x03, 0x0842, 0x0086 },
- { 0x0c, 0x07, -1, 0x03, 0x0842, 0x00c6 },
- { 0x0c, 0x08, -1, 0x03, 0x0842, 0x0146 },
- { 0x0c, 0x09, -1, 0x03, 0x0842, 0x0246 },
- { 0x0c, 0x0a, -1, 0x03, 0x0842, 0x0446 },
- { 0x0c, 0x18, -1, 0x03, 0x0842, 0x0846 },
- { 0x0e, 0x05, -1, 0x03, 0x1842, 0x0046 },
- { 0x0e, 0x05, -1, 0x03, 0x1842, 0x0066 },
- { 0x0e, 0x06, -1, 0x03, 0x1842, 0x0086 },
- { 0x0e, 0x07, -1, 0x03, 0x1842, 0x00c6 },
- { 0x0e, 0x08, -1, 0x03, 0x1842, 0x0146 },
- { 0x0e, 0x09, -1, 0x03, 0x1842, 0x0246 },
- { 0x0e, 0x0a, -1, 0x03, 0x1842, 0x0446 },
- { 0x0e, 0x18, -1, 0x03, 0x1842, 0x0846 },
- { 0x18, 0x05, -1, 0x03, 0x5842, 0x0046 },
- { 0x18, 0x05, -1, 0x03, 0x5842, 0x0066 },
- { 0x18, 0x06, -1, 0x03, 0x5842, 0x0086 },
- { 0x18, 0x07, -1, 0x03, 0x5842, 0x00c6 },
- { 0x18, 0x08, -1, 0x03, 0x5842, 0x0146 },
- { 0x18, 0x09, -1, 0x03, 0x5842, 0x0246 },
- { 0x18, 0x0a, -1, 0x03, 0x5842, 0x0446 },
- { 0x18, 0x18, -1, 0x03, 0x5842, 0x0846 },
-};
-
-#endif /* BROTLI_DEC_PREFIX_H_ */
diff --git a/BaseTools/Source/C/BrotliCompress/dec/state.h b/BaseTools/Source/C/BrotliCompress/dec/state.h
deleted file mode 100644
index 814f95eee05a..000000000000
--- a/BaseTools/Source/C/BrotliCompress/dec/state.h
+++ /dev/null
@@ -1,258 +0,0 @@
-/* Copyright 2015 Google Inc. All Rights Reserved.
-
- Distributed under MIT license.
- See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
-*/
-
-/* Brotli state for partial streaming decoding. */
-
-#ifndef BROTLI_DEC_STATE_H_
-#define BROTLI_DEC_STATE_H_
-
-#include "../common/constants.h"
-#include "../common/dictionary.h"
-#include "../common/platform.h"
-#include "../common/transform.h"
-#include <brotli/types.h>
-#include "./bit_reader.h"
-#include "./huffman.h"
-
-#if defined(__cplusplus) || defined(c_plusplus)
-extern "C" {
-#endif
-
-typedef enum {
- BROTLI_STATE_UNINITED,
- BROTLI_STATE_LARGE_WINDOW_BITS,
- BROTLI_STATE_INITIALIZE,
- BROTLI_STATE_METABLOCK_BEGIN,
- BROTLI_STATE_METABLOCK_HEADER,
- BROTLI_STATE_METABLOCK_HEADER_2,
- BROTLI_STATE_CONTEXT_MODES,
- BROTLI_STATE_COMMAND_BEGIN,
- BROTLI_STATE_COMMAND_INNER,
- BROTLI_STATE_COMMAND_POST_DECODE_LITERALS,
- BROTLI_STATE_COMMAND_POST_WRAP_COPY,
- BROTLI_STATE_UNCOMPRESSED,
- BROTLI_STATE_METADATA,
- BROTLI_STATE_COMMAND_INNER_WRITE,
- BROTLI_STATE_METABLOCK_DONE,
- BROTLI_STATE_COMMAND_POST_WRITE_1,
- BROTLI_STATE_COMMAND_POST_WRITE_2,
- BROTLI_STATE_HUFFMAN_CODE_0,
- BROTLI_STATE_HUFFMAN_CODE_1,
- BROTLI_STATE_HUFFMAN_CODE_2,
- BROTLI_STATE_HUFFMAN_CODE_3,
- BROTLI_STATE_CONTEXT_MAP_1,
- BROTLI_STATE_CONTEXT_MAP_2,
- BROTLI_STATE_TREE_GROUP,
- BROTLI_STATE_DONE
-} BrotliRunningState;
-
-typedef enum {
- BROTLI_STATE_METABLOCK_HEADER_NONE,
- BROTLI_STATE_METABLOCK_HEADER_EMPTY,
- BROTLI_STATE_METABLOCK_HEADER_NIBBLES,
- BROTLI_STATE_METABLOCK_HEADER_SIZE,
- BROTLI_STATE_METABLOCK_HEADER_UNCOMPRESSED,
- BROTLI_STATE_METABLOCK_HEADER_RESERVED,
- BROTLI_STATE_METABLOCK_HEADER_BYTES,
- BROTLI_STATE_METABLOCK_HEADER_METADATA
-} BrotliRunningMetablockHeaderState;
-
-typedef enum {
- BROTLI_STATE_UNCOMPRESSED_NONE,
- BROTLI_STATE_UNCOMPRESSED_WRITE
-} BrotliRunningUncompressedState;
-
-typedef enum {
- BROTLI_STATE_TREE_GROUP_NONE,
- BROTLI_STATE_TREE_GROUP_LOOP
-} BrotliRunningTreeGroupState;
-
-typedef enum {
- BROTLI_STATE_CONTEXT_MAP_NONE,
- BROTLI_STATE_CONTEXT_MAP_READ_PREFIX,
- BROTLI_STATE_CONTEXT_MAP_HUFFMAN,
- BROTLI_STATE_CONTEXT_MAP_DECODE,
- BROTLI_STATE_CONTEXT_MAP_TRANSFORM
-} BrotliRunningContextMapState;
-
-typedef enum {
- BROTLI_STATE_HUFFMAN_NONE,
- BROTLI_STATE_HUFFMAN_SIMPLE_SIZE,
- BROTLI_STATE_HUFFMAN_SIMPLE_READ,
- BROTLI_STATE_HUFFMAN_SIMPLE_BUILD,
- BROTLI_STATE_HUFFMAN_COMPLEX,
- BROTLI_STATE_HUFFMAN_LENGTH_SYMBOLS
-} BrotliRunningHuffmanState;
-
-typedef enum {
- BROTLI_STATE_DECODE_UINT8_NONE,
- BROTLI_STATE_DECODE_UINT8_SHORT,
- BROTLI_STATE_DECODE_UINT8_LONG
-} BrotliRunningDecodeUint8State;
-
-typedef enum {
- BROTLI_STATE_READ_BLOCK_LENGTH_NONE,
- BROTLI_STATE_READ_BLOCK_LENGTH_SUFFIX
-} BrotliRunningReadBlockLengthState;
-
-struct BrotliDecoderStateStruct {
- BrotliRunningState state;
-
- /* This counter is reused for several disjoint loops. */
- int loop_counter;
-
- BrotliBitReader br;
-
- brotli_alloc_func alloc_func;
- brotli_free_func free_func;
- void* memory_manager_opaque;
-
- /* Temporary storage for remaining input. */
- union {
- uint64_t u64;
- uint8_t u8[8];
- } buffer;
- uint32_t buffer_length;
-
- int pos;
- int max_backward_distance;
- int max_distance;
- int ringbuffer_size;
- int ringbuffer_mask;
- int dist_rb_idx;
- int dist_rb[4];
- int error_code;
- uint32_t sub_loop_counter;
- uint8_t* ringbuffer;
- uint8_t* ringbuffer_end;
- HuffmanCode* htree_command;
- const uint8_t* context_lookup;
- uint8_t* context_map_slice;
- uint8_t* dist_context_map_slice;
-
- /* This ring buffer holds a few past copy distances that will be used by
- some special distance codes. */
- HuffmanTreeGroup literal_hgroup;
- HuffmanTreeGroup insert_copy_hgroup;
- HuffmanTreeGroup distance_hgroup;
- HuffmanCode* block_type_trees;
- HuffmanCode* block_len_trees;
- /* This is true if the literal context map histogram type always matches the
- block type. It is then not needed to keep the context (faster decoding). */
- int trivial_literal_context;
- /* Distance context is actual after command is decoded and before distance is
- computed. After distance computation it is used as a temporary variable. */
- int distance_context;
- int meta_block_remaining_len;
- uint32_t block_length_index;
- uint32_t block_length[3];
- uint32_t num_block_types[3];
- uint32_t block_type_rb[6];
- uint32_t distance_postfix_bits;
- uint32_t num_direct_distance_codes;
- int distance_postfix_mask;
- uint32_t num_dist_htrees;
- uint8_t* dist_context_map;
- HuffmanCode* literal_htree;
- uint8_t dist_htree_index;
- uint32_t repeat_code_len;
- uint32_t prev_code_len;
-
- int copy_length;
- int distance_code;
-
- /* For partial write operations. */
- size_t rb_roundtrips; /* how many times we went around the ring-buffer */
- size_t partial_pos_out; /* how much output to the user in total */
-
- /* For ReadHuffmanCode. */
- uint32_t symbol;
- uint32_t repeat;
- uint32_t space;
-
- HuffmanCode table[32];
- /* List of heads of symbol chains. */
- uint16_t* symbol_lists;
- /* Storage from symbol_lists. */
- uint16_t symbols_lists_array[BROTLI_HUFFMAN_MAX_CODE_LENGTH + 1 +
- BROTLI_NUM_COMMAND_SYMBOLS];
- /* Tails of symbol chains. */
- int next_symbol[32];
- uint8_t code_length_code_lengths[BROTLI_CODE_LENGTH_CODES];
- /* Population counts for the code lengths. */
- uint16_t code_length_histo[16];
-
- /* For HuffmanTreeGroupDecode. */
- int htree_index;
- HuffmanCode* next;
-
- /* For DecodeContextMap. */
- uint32_t context_index;
- uint32_t max_run_length_prefix;
- uint32_t code;
- HuffmanCode context_map_table[BROTLI_HUFFMAN_MAX_SIZE_272];
-
- /* For InverseMoveToFrontTransform. */
- uint32_t mtf_upper_bound;
- uint32_t mtf[64 + 1];
-
- /* Less used attributes are at the end of this struct. */
-
- /* States inside function calls. */
- BrotliRunningMetablockHeaderState substate_metablock_header;
- BrotliRunningTreeGroupState substate_tree_group;
- BrotliRunningContextMapState substate_context_map;
- BrotliRunningUncompressedState substate_uncompressed;
- BrotliRunningHuffmanState substate_huffman;
- BrotliRunningDecodeUint8State substate_decode_uint8;
- BrotliRunningReadBlockLengthState substate_read_block_length;
-
- unsigned int is_last_metablock : 1;
- unsigned int is_uncompressed : 1;
- unsigned int is_metadata : 1;
- unsigned int should_wrap_ringbuffer : 1;
- unsigned int canny_ringbuffer_allocation : 1;
- unsigned int large_window : 1;
- unsigned int size_nibbles : 8;
- uint32_t window_bits;
-
- int new_ringbuffer_size;
-
- uint32_t num_literal_htrees;
- uint8_t* context_map;
- uint8_t* context_modes;
-
- const BrotliDictionary* dictionary;
- const BrotliTransforms* transforms;
-
- uint32_t trivial_literal_contexts[8]; /* 256 bits */
-};
-
-typedef struct BrotliDecoderStateStruct BrotliDecoderStateInternal;
-#define BrotliDecoderState BrotliDecoderStateInternal
-
-BROTLI_INTERNAL BROTLI_BOOL BrotliDecoderStateInit(BrotliDecoderState* s,
- brotli_alloc_func alloc_func, brotli_free_func free_func, void* opaque);
-BROTLI_INTERNAL void BrotliDecoderStateCleanup(BrotliDecoderState* s);
-BROTLI_INTERNAL void BrotliDecoderStateMetablockBegin(BrotliDecoderState* s);
-BROTLI_INTERNAL void BrotliDecoderStateCleanupAfterMetablock(
- BrotliDecoderState* s);
-BROTLI_INTERNAL BROTLI_BOOL BrotliDecoderHuffmanTreeGroupInit(
- BrotliDecoderState* s, HuffmanTreeGroup* group, uint32_t alphabet_size,
- uint32_t max_symbol, uint32_t ntrees);
-
-#define BROTLI_DECODER_ALLOC(S, L) S->alloc_func(S->memory_manager_opaque, L)
-
-#define BROTLI_DECODER_FREE(S, X) { \
- S->free_func(S->memory_manager_opaque, X); \
- X = NULL; \
-}
-
-#if defined(__cplusplus) || defined(c_plusplus)
-} /* extern "C" */
-#endif
-
-#endif /* BROTLI_DEC_STATE_H_ */
diff --git a/BaseTools/Source/C/BrotliCompress/docs/brotli-comparison-study-2015-09-22.pdf b/BaseTools/Source/C/BrotliCompress/docs/brotli-comparison-study-2015-09-22.pdf
deleted file mode 100644
index 040f179e2bce8f5f7a2f407b2d61ab86824bbe8e..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 215208
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%0A(Nmlrom%n++A{@ubAd
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
diff --git a/BaseTools/Source/C/BrotliCompress/enc/backward_references.h b/BaseTools/Source/C/BrotliCompress/enc/backward_references.h
deleted file mode 100644
index fcef6bd92953..000000000000
--- a/BaseTools/Source/C/BrotliCompress/enc/backward_references.h
+++ /dev/null
@@ -1,38 +0,0 @@
-/* Copyright 2013 Google Inc. All Rights Reserved.
-
- Distributed under MIT license.
- See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
-*/
-
-/* Function to find backward reference copies. */
-
-#ifndef BROTLI_ENC_BACKWARD_REFERENCES_H_
-#define BROTLI_ENC_BACKWARD_REFERENCES_H_
-
-#include "../common/constants.h"
-#include "../common/dictionary.h"
-#include "../common/platform.h"
-#include <brotli/types.h>
-#include "./command.h"
-#include "./hash.h"
-#include "./quality.h"
-
-#if defined(__cplusplus) || defined(c_plusplus)
-extern "C" {
-#endif
-
-/* "commands" points to the next output command to write to, "*num_commands" is
- initially the total amount of commands output by previous
- CreateBackwardReferences calls, and must be incremented by the amount written
- by this call. */
-BROTLI_INTERNAL void BrotliCreateBackwardReferences(
- size_t num_bytes, size_t position, const uint8_t* ringbuffer,
- size_t ringbuffer_mask, const BrotliEncoderParams* params,
- HasherHandle hasher, int* dist_cache, size_t* last_insert_len,
- Command* commands, size_t* num_commands, size_t* num_literals);
-
-#if defined(__cplusplus) || defined(c_plusplus)
-} /* extern "C" */
-#endif
-
-#endif /* BROTLI_ENC_BACKWARD_REFERENCES_H_ */
diff --git a/BaseTools/Source/C/BrotliCompress/enc/backward_references_hq.h b/BaseTools/Source/C/BrotliCompress/enc/backward_references_hq.h
deleted file mode 100644
index 60b3b346b778..000000000000
--- a/BaseTools/Source/C/BrotliCompress/enc/backward_references_hq.h
+++ /dev/null
@@ -1,93 +0,0 @@
-/* Copyright 2013 Google Inc. All Rights Reserved.
-
- Distributed under MIT license.
- See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
-*/
-
-/* Function to find backward reference copies. */
-
-#ifndef BROTLI_ENC_BACKWARD_REFERENCES_HQ_H_
-#define BROTLI_ENC_BACKWARD_REFERENCES_HQ_H_
-
-#include "../common/constants.h"
-#include "../common/dictionary.h"
-#include "../common/platform.h"
-#include <brotli/types.h>
-#include "./command.h"
-#include "./hash.h"
-#include "./memory.h"
-#include "./quality.h"
-
-#if defined(__cplusplus) || defined(c_plusplus)
-extern "C" {
-#endif
-
-BROTLI_INTERNAL void BrotliCreateZopfliBackwardReferences(MemoryManager* m,
- size_t num_bytes, size_t position, const uint8_t* ringbuffer,
- size_t ringbuffer_mask, const BrotliEncoderParams* params,
- HasherHandle hasher, int* dist_cache, size_t* last_insert_len,
- Command* commands, size_t* num_commands, size_t* num_literals);
-
-BROTLI_INTERNAL void BrotliCreateHqZopfliBackwardReferences(MemoryManager* m,
- size_t num_bytes, size_t position, const uint8_t* ringbuffer,
- size_t ringbuffer_mask, const BrotliEncoderParams* params,
- HasherHandle hasher, int* dist_cache, size_t* last_insert_len,
- Command* commands, size_t* num_commands, size_t* num_literals);
-
-typedef struct ZopfliNode {
- /* Best length to get up to this byte (not including this byte itself)
- highest 7 bit is used to reconstruct the length code. */
- uint32_t length;
- /* Distance associated with the length. */
- uint32_t distance;
- /* Number of literal inserts before this copy; highest 5 bits contain
- distance short code + 1 (or zero if no short code). */
- uint32_t dcode_insert_length;
-
- /* This union holds information used by dynamic-programming. During forward
- pass |cost| it used to store the goal function. When node is processed its
- |cost| is invalidated in favor of |shortcut|. On path back-tracing pass
- |next| is assigned the offset to next node on the path. */
- union {
- /* Smallest cost to get to this byte from the beginning, as found so far. */
- float cost;
- /* Offset to the next node on the path. Equals to command_length() of the
- next node on the path. For last node equals to BROTLI_UINT32_MAX */
- uint32_t next;
- /* Node position that provides next distance for distance cache. */
- uint32_t shortcut;
- } u;
-} ZopfliNode;
-
-BROTLI_INTERNAL void BrotliInitZopfliNodes(ZopfliNode* array, size_t length);
-
-/* Computes the shortest path of commands from position to at most
- position + num_bytes.
-
- On return, path->size() is the number of commands found and path[i] is the
- length of the i-th command (copy length plus insert length).
- Note that the sum of the lengths of all commands can be less than num_bytes.
-
- On return, the nodes[0..num_bytes] array will have the following
- "ZopfliNode array invariant":
- For each i in [1..num_bytes], if nodes[i].cost < kInfinity, then
- (1) nodes[i].copy_length() >= 2
- (2) nodes[i].command_length() <= i and
- (3) nodes[i - nodes[i].command_length()].cost < kInfinity */
-BROTLI_INTERNAL size_t BrotliZopfliComputeShortestPath(MemoryManager* m,
- size_t num_bytes, size_t position, const uint8_t* ringbuffer,
- size_t ringbuffer_mask, const BrotliEncoderParams* params,
- const size_t max_backward_limit, const int* dist_cache, HasherHandle hasher,
- ZopfliNode* nodes);
-
-BROTLI_INTERNAL void BrotliZopfliCreateCommands(
- const size_t num_bytes, const size_t block_start,
- const size_t max_backward_limit, const ZopfliNode* nodes,
- int* dist_cache, size_t* last_insert_len, const BrotliEncoderParams* params,
- Command* commands, size_t* num_literals);
-
-#if defined(__cplusplus) || defined(c_plusplus)
-} /* extern "C" */
-#endif
-
-#endif /* BROTLI_ENC_BACKWARD_REFERENCES_HQ_H_ */
diff --git a/BaseTools/Source/C/BrotliCompress/enc/backward_references_inc.h b/BaseTools/Source/C/BrotliCompress/enc/backward_references_inc.h
deleted file mode 100644
index 39c6f823f8bd..000000000000
--- a/BaseTools/Source/C/BrotliCompress/enc/backward_references_inc.h
+++ /dev/null
@@ -1,153 +0,0 @@
-/* NOLINT(build/header_guard) */
-/* Copyright 2013 Google Inc. All Rights Reserved.
-
- Distributed under MIT license.
- See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
-*/
-
-/* template parameters: EXPORT_FN, FN */
-
-static BROTLI_NOINLINE void EXPORT_FN(CreateBackwardReferences)(
- size_t num_bytes, size_t position,
- const uint8_t* ringbuffer, size_t ringbuffer_mask,
- const BrotliEncoderParams* params, HasherHandle hasher, int* dist_cache,
- size_t* last_insert_len, Command* commands, size_t* num_commands,
- size_t* num_literals) {
- /* Set maximum distance, see section 9.1. of the spec. */
- const size_t max_backward_limit = BROTLI_MAX_BACKWARD_LIMIT(params->lgwin);
-
- const Command* const orig_commands = commands;
- size_t insert_length = *last_insert_len;
- const size_t pos_end = position + num_bytes;
- const size_t store_end = num_bytes >= FN(StoreLookahead)() ?
- position + num_bytes - FN(StoreLookahead)() + 1 : position;
-
- /* For speed up heuristics for random data. */
- const size_t random_heuristics_window_size =
- LiteralSpreeLengthForSparseSearch(params);
- size_t apply_random_heuristics = position + random_heuristics_window_size;
- const size_t gap = 0;
-
- /* Minimum score to accept a backward reference. */
- const score_t kMinScore = BROTLI_SCORE_BASE + 100;
-
- FN(PrepareDistanceCache)(hasher, dist_cache);
-
- while (position + FN(HashTypeLength)() < pos_end) {
- size_t max_length = pos_end - position;
- size_t max_distance = BROTLI_MIN(size_t, position, max_backward_limit);
- HasherSearchResult sr;
- sr.len = 0;
- sr.len_code_delta = 0;
- sr.distance = 0;
- sr.score = kMinScore;
- FN(FindLongestMatch)(hasher, ¶ms->dictionary,
- ringbuffer, ringbuffer_mask, dist_cache, position,
- max_length, max_distance, gap,
- params->dist.max_distance, &sr);
- if (sr.score > kMinScore) {
- /* Found a match. Let's look for something even better ahead. */
- int delayed_backward_references_in_row = 0;
- --max_length;
- for (;; --max_length) {
- const score_t cost_diff_lazy = 175;
- HasherSearchResult sr2;
- sr2.len = params->quality < MIN_QUALITY_FOR_EXTENSIVE_REFERENCE_SEARCH ?
- BROTLI_MIN(size_t, sr.len - 1, max_length) : 0;
- sr2.len_code_delta = 0;
- sr2.distance = 0;
- sr2.score = kMinScore;
- max_distance = BROTLI_MIN(size_t, position + 1, max_backward_limit);
- FN(FindLongestMatch)(hasher, ¶ms->dictionary,
- ringbuffer, ringbuffer_mask, dist_cache, position + 1, max_length,
- max_distance, gap, params->dist.max_distance, &sr2);
- if (sr2.score >= sr.score + cost_diff_lazy) {
- /* Ok, let's just write one byte for now and start a match from the
- next byte. */
- ++position;
- ++insert_length;
- sr = sr2;
- if (++delayed_backward_references_in_row < 4 &&
- position + FN(HashTypeLength)() < pos_end) {
- continue;
- }
- }
- break;
- }
- apply_random_heuristics =
- position + 2 * sr.len + random_heuristics_window_size;
- max_distance = BROTLI_MIN(size_t, position, max_backward_limit);
- {
- /* The first 16 codes are special short-codes,
- and the minimum offset is 1. */
- size_t distance_code =
- ComputeDistanceCode(sr.distance, max_distance + gap, dist_cache);
- if ((sr.distance <= (max_distance + gap)) && distance_code > 0) {
- dist_cache[3] = dist_cache[2];
- dist_cache[2] = dist_cache[1];
- dist_cache[1] = dist_cache[0];
- dist_cache[0] = (int)sr.distance;
- FN(PrepareDistanceCache)(hasher, dist_cache);
- }
- InitCommand(commands++, ¶ms->dist, insert_length,
- sr.len, sr.len_code_delta, distance_code);
- }
- *num_literals += insert_length;
- insert_length = 0;
- /* Put the hash keys into the table, if there are enough bytes left.
- Depending on the hasher implementation, it can push all positions
- in the given range or only a subset of them.
- Avoid hash poisoning with RLE data. */
- {
- size_t range_start = position + 2;
- size_t range_end = BROTLI_MIN(size_t, position + sr.len, store_end);
- if (sr.distance < (sr.len >> 2)) {
- range_start = BROTLI_MIN(size_t, range_end, BROTLI_MAX(size_t,
- range_start, position + sr.len - (sr.distance << 2)));
- }
- FN(StoreRange)(hasher, ringbuffer, ringbuffer_mask, range_start,
- range_end);
- }
- position += sr.len;
- } else {
- ++insert_length;
- ++position;
- /* If we have not seen matches for a long time, we can skip some
- match lookups. Unsuccessful match lookups are very very expensive
- and this kind of a heuristic speeds up compression quite
- a lot. */
- if (position > apply_random_heuristics) {
- /* Going through uncompressible data, jump. */
- if (position >
- apply_random_heuristics + 4 * random_heuristics_window_size) {
- /* It is quite a long time since we saw a copy, so we assume
- that this data is not compressible, and store hashes less
- often. Hashes of non compressible data are less likely to
- turn out to be useful in the future, too, so we store less of
- them to not to flood out the hash table of good compressible
- data. */
- const size_t kMargin =
- BROTLI_MAX(size_t, FN(StoreLookahead)() - 1, 4);
- size_t pos_jump =
- BROTLI_MIN(size_t, position + 16, pos_end - kMargin);
- for (; position < pos_jump; position += 4) {
- FN(Store)(hasher, ringbuffer, ringbuffer_mask, position);
- insert_length += 4;
- }
- } else {
- const size_t kMargin =
- BROTLI_MAX(size_t, FN(StoreLookahead)() - 1, 2);
- size_t pos_jump =
- BROTLI_MIN(size_t, position + 8, pos_end - kMargin);
- for (; position < pos_jump; position += 2) {
- FN(Store)(hasher, ringbuffer, ringbuffer_mask, position);
- insert_length += 2;
- }
- }
- }
- }
- }
- insert_length += pos_end - position;
- *last_insert_len = insert_length;
- *num_commands += (size_t)(commands - orig_commands);
-}
diff --git a/BaseTools/Source/C/BrotliCompress/enc/bit_cost.h b/BaseTools/Source/C/BrotliCompress/enc/bit_cost.h
deleted file mode 100644
index e7ab2eafe459..000000000000
--- a/BaseTools/Source/C/BrotliCompress/enc/bit_cost.h
+++ /dev/null
@@ -1,63 +0,0 @@
-/* Copyright 2013 Google Inc. All Rights Reserved.
-
- Distributed under MIT license.
- See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
-*/
-
-/* Functions to estimate the bit cost of Huffman trees. */
-
-#ifndef BROTLI_ENC_BIT_COST_H_
-#define BROTLI_ENC_BIT_COST_H_
-
-#include "../common/platform.h"
-#include <brotli/types.h>
-#include "./fast_log.h"
-#include "./histogram.h"
-
-#if defined(__cplusplus) || defined(c_plusplus)
-extern "C" {
-#endif
-
-static BROTLI_INLINE double ShannonEntropy(
- const uint32_t* population, size_t size, size_t* total) {
- size_t sum = 0;
- double retval = 0;
- const uint32_t* population_end = population + size;
- size_t p;
- if (size & 1) {
- goto odd_number_of_elements_left;
- }
- while (population < population_end) {
- p = *population++;
- sum += p;
- retval -= (double)p * FastLog2(p);
- odd_number_of_elements_left:
- p = *population++;
- sum += p;
- retval -= (double)p * FastLog2(p);
- }
- if (sum) retval += (double)sum * FastLog2(sum);
- *total = sum;
- return retval;
-}
-
-static BROTLI_INLINE double BitsEntropy(
- const uint32_t* population, size_t size) {
- size_t sum;
- double retval = ShannonEntropy(population, size, &sum);
- if (retval < sum) {
- /* At least one bit per literal is needed. */
- retval = (double)sum;
- }
- return retval;
-}
-
-BROTLI_INTERNAL double BrotliPopulationCostLiteral(const HistogramLiteral*);
-BROTLI_INTERNAL double BrotliPopulationCostCommand(const HistogramCommand*);
-BROTLI_INTERNAL double BrotliPopulationCostDistance(const HistogramDistance*);
-
-#if defined(__cplusplus) || defined(c_plusplus)
-} /* extern "C" */
-#endif
-
-#endif /* BROTLI_ENC_BIT_COST_H_ */
diff --git a/BaseTools/Source/C/BrotliCompress/enc/bit_cost_inc.h b/BaseTools/Source/C/BrotliCompress/enc/bit_cost_inc.h
deleted file mode 100644
index c96bddac0962..000000000000
--- a/BaseTools/Source/C/BrotliCompress/enc/bit_cost_inc.h
+++ /dev/null
@@ -1,127 +0,0 @@
-/* NOLINT(build/header_guard) */
-/* Copyright 2013 Google Inc. All Rights Reserved.
-
- Distributed under MIT license.
- See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
-*/
-
-/* template parameters: FN */
-
-#define HistogramType FN(Histogram)
-
-double FN(BrotliPopulationCost)(const HistogramType* histogram) {
- static const double kOneSymbolHistogramCost = 12;
- static const double kTwoSymbolHistogramCost = 20;
- static const double kThreeSymbolHistogramCost = 28;
- static const double kFourSymbolHistogramCost = 37;
- const size_t data_size = FN(HistogramDataSize)();
- int count = 0;
- size_t s[5];
- double bits = 0.0;
- size_t i;
- if (histogram->total_count_ == 0) {
- return kOneSymbolHistogramCost;
- }
- for (i = 0; i < data_size; ++i) {
- if (histogram->data_[i] > 0) {
- s[count] = i;
- ++count;
- if (count > 4) break;
- }
- }
- if (count == 1) {
- return kOneSymbolHistogramCost;
- }
- if (count == 2) {
- return (kTwoSymbolHistogramCost + (double)histogram->total_count_);
- }
- if (count == 3) {
- const uint32_t histo0 = histogram->data_[s[0]];
- const uint32_t histo1 = histogram->data_[s[1]];
- const uint32_t histo2 = histogram->data_[s[2]];
- const uint32_t histomax =
- BROTLI_MAX(uint32_t, histo0, BROTLI_MAX(uint32_t, histo1, histo2));
- return (kThreeSymbolHistogramCost +
- 2 * (histo0 + histo1 + histo2) - histomax);
- }
- if (count == 4) {
- uint32_t histo[4];
- uint32_t h23;
- uint32_t histomax;
- for (i = 0; i < 4; ++i) {
- histo[i] = histogram->data_[s[i]];
- }
- /* Sort */
- for (i = 0; i < 4; ++i) {
- size_t j;
- for (j = i + 1; j < 4; ++j) {
- if (histo[j] > histo[i]) {
- BROTLI_SWAP(uint32_t, histo, j, i);
- }
- }
- }
- h23 = histo[2] + histo[3];
- histomax = BROTLI_MAX(uint32_t, h23, histo[0]);
- return (kFourSymbolHistogramCost +
- 3 * h23 + 2 * (histo[0] + histo[1]) - histomax);
- }
-
- {
- /* In this loop we compute the entropy of the histogram and simultaneously
- build a simplified histogram of the code length codes where we use the
- zero repeat code 17, but we don't use the non-zero repeat code 16. */
- size_t max_depth = 1;
- uint32_t depth_histo[BROTLI_CODE_LENGTH_CODES] = { 0 };
- const double log2total = FastLog2(histogram->total_count_);
- for (i = 0; i < data_size;) {
- if (histogram->data_[i] > 0) {
- /* Compute -log2(P(symbol)) = -log2(count(symbol)/total_count) =
- = log2(total_count) - log2(count(symbol)) */
- double log2p = log2total - FastLog2(histogram->data_[i]);
- /* Approximate the bit depth by round(-log2(P(symbol))) */
- size_t depth = (size_t)(log2p + 0.5);
- bits += histogram->data_[i] * log2p;
- if (depth > 15) {
- depth = 15;
- }
- if (depth > max_depth) {
- max_depth = depth;
- }
- ++depth_histo[depth];
- ++i;
- } else {
- /* Compute the run length of zeros and add the appropriate number of 0
- and 17 code length codes to the code length code histogram. */
- uint32_t reps = 1;
- size_t k;
- for (k = i + 1; k < data_size && histogram->data_[k] == 0; ++k) {
- ++reps;
- }
- i += reps;
- if (i == data_size) {
- /* Don't add any cost for the last zero run, since these are encoded
- only implicitly. */
- break;
- }
- if (reps < 3) {
- depth_histo[0] += reps;
- } else {
- reps -= 2;
- while (reps > 0) {
- ++depth_histo[BROTLI_REPEAT_ZERO_CODE_LENGTH];
- /* Add the 3 extra bits for the 17 code length code. */
- bits += 3;
- reps >>= 3;
- }
- }
- }
- }
- /* Add the estimated encoding cost of the code length code histogram. */
- bits += (double)(18 + 2 * max_depth);
- /* Add the entropy of the code length code histogram. */
- bits += BitsEntropy(depth_histo, BROTLI_CODE_LENGTH_CODES);
- }
- return bits;
-}
-
-#undef HistogramType
diff --git a/BaseTools/Source/C/BrotliCompress/enc/block_encoder_inc.h b/BaseTools/Source/C/BrotliCompress/enc/block_encoder_inc.h
deleted file mode 100644
index ce7fd20cb3f4..000000000000
--- a/BaseTools/Source/C/BrotliCompress/enc/block_encoder_inc.h
+++ /dev/null
@@ -1,34 +0,0 @@
-/* NOLINT(build/header_guard) */
-/* Copyright 2014 Google Inc. All Rights Reserved.
-
- Distributed under MIT license.
- See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
-*/
-
-/* template parameters: FN */
-
-#define HistogramType FN(Histogram)
-
-/* Creates entropy codes for all block types and stores them to the bit
- stream. */
-static void FN(BuildAndStoreEntropyCodes)(MemoryManager* m, BlockEncoder* self,
- const HistogramType* histograms, const size_t histograms_size,
- const size_t alphabet_size, HuffmanTree* tree,
- size_t* storage_ix, uint8_t* storage) {
- const size_t table_size = histograms_size * self->histogram_length_;
- self->depths_ = BROTLI_ALLOC(m, uint8_t, table_size);
- self->bits_ = BROTLI_ALLOC(m, uint16_t, table_size);
- if (BROTLI_IS_OOM(m)) return;
-
- {
- size_t i;
- for (i = 0; i < histograms_size; ++i) {
- size_t ix = i * self->histogram_length_;
- BuildAndStoreHuffmanTree(&histograms[i].data_[0], self->histogram_length_,
- alphabet_size, tree, &self->depths_[ix], &self->bits_[ix],
- storage_ix, storage);
- }
- }
-}
-
-#undef HistogramType
diff --git a/BaseTools/Source/C/BrotliCompress/enc/block_splitter.h b/BaseTools/Source/C/BrotliCompress/enc/block_splitter.h
deleted file mode 100644
index aa6ebedc2cb8..000000000000
--- a/BaseTools/Source/C/BrotliCompress/enc/block_splitter.h
+++ /dev/null
@@ -1,51 +0,0 @@
-/* Copyright 2013 Google Inc. All Rights Reserved.
-
- Distributed under MIT license.
- See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
-*/
-
-/* Block split point selection utilities. */
-
-#ifndef BROTLI_ENC_BLOCK_SPLITTER_H_
-#define BROTLI_ENC_BLOCK_SPLITTER_H_
-
-#include "../common/platform.h"
-#include <brotli/types.h>
-#include "./command.h"
-#include "./memory.h"
-#include "./quality.h"
-
-#if defined(__cplusplus) || defined(c_plusplus)
-extern "C" {
-#endif
-
-typedef struct BlockSplit {
- size_t num_types; /* Amount of distinct types */
- size_t num_blocks; /* Amount of values in types and length */
- uint8_t* types;
- uint32_t* lengths;
-
- size_t types_alloc_size;
- size_t lengths_alloc_size;
-} BlockSplit;
-
-BROTLI_INTERNAL void BrotliInitBlockSplit(BlockSplit* self);
-BROTLI_INTERNAL void BrotliDestroyBlockSplit(MemoryManager* m,
- BlockSplit* self);
-
-BROTLI_INTERNAL void BrotliSplitBlock(MemoryManager* m,
- const Command* cmds,
- const size_t num_commands,
- const uint8_t* data,
- const size_t offset,
- const size_t mask,
- const BrotliEncoderParams* params,
- BlockSplit* literal_split,
- BlockSplit* insert_and_copy_split,
- BlockSplit* dist_split);
-
-#if defined(__cplusplus) || defined(c_plusplus)
-} /* extern "C" */
-#endif
-
-#endif /* BROTLI_ENC_BLOCK_SPLITTER_H_ */
diff --git a/BaseTools/Source/C/BrotliCompress/enc/block_splitter_inc.h b/BaseTools/Source/C/BrotliCompress/enc/block_splitter_inc.h
deleted file mode 100644
index 63c7ccf12975..000000000000
--- a/BaseTools/Source/C/BrotliCompress/enc/block_splitter_inc.h
+++ /dev/null
@@ -1,431 +0,0 @@
-/* NOLINT(build/header_guard) */
-/* Copyright 2013 Google Inc. All Rights Reserved.
-
- Distributed under MIT license.
- See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
-*/
-
-/* template parameters: FN, DataType */
-
-#define HistogramType FN(Histogram)
-
-static void FN(InitialEntropyCodes)(const DataType* data, size_t length,
- size_t stride,
- size_t num_histograms,
- HistogramType* histograms) {
- uint32_t seed = 7;
- size_t block_length = length / num_histograms;
- size_t i;
- FN(ClearHistograms)(histograms, num_histograms);
- for (i = 0; i < num_histograms; ++i) {
- size_t pos = length * i / num_histograms;
- if (i != 0) {
- pos += MyRand(&seed) % block_length;
- }
- if (pos + stride >= length) {
- pos = length - stride - 1;
- }
- FN(HistogramAddVector)(&histograms[i], data + pos, stride);
- }
-}
-
-static void FN(RandomSample)(uint32_t* seed,
- const DataType* data,
- size_t length,
- size_t stride,
- HistogramType* sample) {
- size_t pos = 0;
- if (stride >= length) {
- stride = length;
- } else {
- pos = MyRand(seed) % (length - stride + 1);
- }
- FN(HistogramAddVector)(sample, data + pos, stride);
-}
-
-static void FN(RefineEntropyCodes)(const DataType* data, size_t length,
- size_t stride,
- size_t num_histograms,
- HistogramType* histograms) {
- size_t iters =
- kIterMulForRefining * length / stride + kMinItersForRefining;
- uint32_t seed = 7;
- size_t iter;
- iters = ((iters + num_histograms - 1) / num_histograms) * num_histograms;
- for (iter = 0; iter < iters; ++iter) {
- HistogramType sample;
- FN(HistogramClear)(&sample);
- FN(RandomSample)(&seed, data, length, stride, &sample);
- FN(HistogramAddHistogram)(&histograms[iter % num_histograms], &sample);
- }
-}
-
-/* Assigns a block id from the range [0, num_histograms) to each data element
- in data[0..length) and fills in block_id[0..length) with the assigned values.
- Returns the number of blocks, i.e. one plus the number of block switches. */
-static size_t FN(FindBlocks)(const DataType* data, const size_t length,
- const double block_switch_bitcost,
- const size_t num_histograms,
- const HistogramType* histograms,
- double* insert_cost,
- double* cost,
- uint8_t* switch_signal,
- uint8_t* block_id) {
- const size_t data_size = FN(HistogramDataSize)();
- const size_t bitmaplen = (num_histograms + 7) >> 3;
- size_t num_blocks = 1;
- size_t i;
- size_t j;
- BROTLI_DCHECK(num_histograms <= 256);
- if (num_histograms <= 1) {
- for (i = 0; i < length; ++i) {
- block_id[i] = 0;
- }
- return 1;
- }
- memset(insert_cost, 0, sizeof(insert_cost[0]) * data_size * num_histograms);
- for (i = 0; i < num_histograms; ++i) {
- insert_cost[i] = FastLog2((uint32_t)histograms[i].total_count_);
- }
- for (i = data_size; i != 0;) {
- --i;
- for (j = 0; j < num_histograms; ++j) {
- insert_cost[i * num_histograms + j] =
- insert_cost[j] - BitCost(histograms[j].data_[i]);
- }
- }
- memset(cost, 0, sizeof(cost[0]) * num_histograms);
- memset(switch_signal, 0, sizeof(switch_signal[0]) * length * bitmaplen);
- /* After each iteration of this loop, cost[k] will contain the difference
- between the minimum cost of arriving at the current byte position using
- entropy code k, and the minimum cost of arriving at the current byte
- position. This difference is capped at the block switch cost, and if it
- reaches block switch cost, it means that when we trace back from the last
- position, we need to switch here. */
- for (i = 0; i < length; ++i) {
- const size_t byte_ix = i;
- size_t ix = byte_ix * bitmaplen;
- size_t insert_cost_ix = data[byte_ix] * num_histograms;
- double min_cost = 1e99;
- double block_switch_cost = block_switch_bitcost;
- size_t k;
- for (k = 0; k < num_histograms; ++k) {
- /* We are coding the symbol in data[byte_ix] with entropy code k. */
- cost[k] += insert_cost[insert_cost_ix + k];
- if (cost[k] < min_cost) {
- min_cost = cost[k];
- block_id[byte_ix] = (uint8_t)k;
- }
- }
- /* More blocks for the beginning. */
- if (byte_ix < 2000) {
- block_switch_cost *= 0.77 + 0.07 * (double)byte_ix / 2000;
- }
- for (k = 0; k < num_histograms; ++k) {
- cost[k] -= min_cost;
- if (cost[k] >= block_switch_cost) {
- const uint8_t mask = (uint8_t)(1u << (k & 7));
- cost[k] = block_switch_cost;
- BROTLI_DCHECK((k >> 3) < bitmaplen);
- switch_signal[ix + (k >> 3)] |= mask;
- }
- }
- }
- { /* Trace back from the last position and switch at the marked places. */
- size_t byte_ix = length - 1;
- size_t ix = byte_ix * bitmaplen;
- uint8_t cur_id = block_id[byte_ix];
- while (byte_ix > 0) {
- const uint8_t mask = (uint8_t)(1u << (cur_id & 7));
- BROTLI_DCHECK(((size_t)cur_id >> 3) < bitmaplen);
- --byte_ix;
- ix -= bitmaplen;
- if (switch_signal[ix + (cur_id >> 3)] & mask) {
- if (cur_id != block_id[byte_ix]) {
- cur_id = block_id[byte_ix];
- ++num_blocks;
- }
- }
- block_id[byte_ix] = cur_id;
- }
- }
- return num_blocks;
-}
-
-static size_t FN(RemapBlockIds)(uint8_t* block_ids, const size_t length,
- uint16_t* new_id, const size_t num_histograms) {
- static const uint16_t kInvalidId = 256;
- uint16_t next_id = 0;
- size_t i;
- for (i = 0; i < num_histograms; ++i) {
- new_id[i] = kInvalidId;
- }
- for (i = 0; i < length; ++i) {
- BROTLI_DCHECK(block_ids[i] < num_histograms);
- if (new_id[block_ids[i]] == kInvalidId) {
- new_id[block_ids[i]] = next_id++;
- }
- }
- for (i = 0; i < length; ++i) {
- block_ids[i] = (uint8_t)new_id[block_ids[i]];
- BROTLI_DCHECK(block_ids[i] < num_histograms);
- }
- BROTLI_DCHECK(next_id <= num_histograms);
- return next_id;
-}
-
-static void FN(BuildBlockHistograms)(const DataType* data, const size_t length,
- const uint8_t* block_ids,
- const size_t num_histograms,
- HistogramType* histograms) {
- size_t i;
- FN(ClearHistograms)(histograms, num_histograms);
- for (i = 0; i < length; ++i) {
- FN(HistogramAdd)(&histograms[block_ids[i]], data[i]);
- }
-}
-
-static void FN(ClusterBlocks)(MemoryManager* m,
- const DataType* data, const size_t length,
- const size_t num_blocks,
- uint8_t* block_ids,
- BlockSplit* split) {
- uint32_t* histogram_symbols = BROTLI_ALLOC(m, uint32_t, num_blocks);
- uint32_t* block_lengths = BROTLI_ALLOC(m, uint32_t, num_blocks);
- const size_t expected_num_clusters = CLUSTERS_PER_BATCH *
- (num_blocks + HISTOGRAMS_PER_BATCH - 1) / HISTOGRAMS_PER_BATCH;
- size_t all_histograms_size = 0;
- size_t all_histograms_capacity = expected_num_clusters;
- HistogramType* all_histograms =
- BROTLI_ALLOC(m, HistogramType, all_histograms_capacity);
- size_t cluster_size_size = 0;
- size_t cluster_size_capacity = expected_num_clusters;
- uint32_t* cluster_size = BROTLI_ALLOC(m, uint32_t, cluster_size_capacity);
- size_t num_clusters = 0;
- HistogramType* histograms = BROTLI_ALLOC(m, HistogramType,
- BROTLI_MIN(size_t, num_blocks, HISTOGRAMS_PER_BATCH));
- size_t max_num_pairs =
- HISTOGRAMS_PER_BATCH * HISTOGRAMS_PER_BATCH / 2;
- size_t pairs_capacity = max_num_pairs + 1;
- HistogramPair* pairs = BROTLI_ALLOC(m, HistogramPair, pairs_capacity);
- size_t pos = 0;
- uint32_t* clusters;
- size_t num_final_clusters;
- static const uint32_t kInvalidIndex = BROTLI_UINT32_MAX;
- uint32_t* new_index;
- size_t i;
- uint32_t sizes[HISTOGRAMS_PER_BATCH] = { 0 };
- uint32_t new_clusters[HISTOGRAMS_PER_BATCH] = { 0 };
- uint32_t symbols[HISTOGRAMS_PER_BATCH] = { 0 };
- uint32_t remap[HISTOGRAMS_PER_BATCH] = { 0 };
-
- if (BROTLI_IS_OOM(m)) return;
-
- memset(block_lengths, 0, num_blocks * sizeof(uint32_t));
-
- {
- size_t block_idx = 0;
- for (i = 0; i < length; ++i) {
- BROTLI_DCHECK(block_idx < num_blocks);
- ++block_lengths[block_idx];
- if (i + 1 == length || block_ids[i] != block_ids[i + 1]) {
- ++block_idx;
- }
- }
- BROTLI_DCHECK(block_idx == num_blocks);
- }
-
- for (i = 0; i < num_blocks; i += HISTOGRAMS_PER_BATCH) {
- const size_t num_to_combine =
- BROTLI_MIN(size_t, num_blocks - i, HISTOGRAMS_PER_BATCH);
- size_t num_new_clusters;
- size_t j;
- for (j = 0; j < num_to_combine; ++j) {
- size_t k;
- FN(HistogramClear)(&histograms[j]);
- for (k = 0; k < block_lengths[i + j]; ++k) {
- FN(HistogramAdd)(&histograms[j], data[pos++]);
- }
- histograms[j].bit_cost_ = FN(BrotliPopulationCost)(&histograms[j]);
- new_clusters[j] = (uint32_t)j;
- symbols[j] = (uint32_t)j;
- sizes[j] = 1;
- }
- num_new_clusters = FN(BrotliHistogramCombine)(
- histograms, sizes, symbols, new_clusters, pairs, num_to_combine,
- num_to_combine, HISTOGRAMS_PER_BATCH, max_num_pairs);
- BROTLI_ENSURE_CAPACITY(m, HistogramType, all_histograms,
- all_histograms_capacity, all_histograms_size + num_new_clusters);
- BROTLI_ENSURE_CAPACITY(m, uint32_t, cluster_size,
- cluster_size_capacity, cluster_size_size + num_new_clusters);
- if (BROTLI_IS_OOM(m)) return;
- for (j = 0; j < num_new_clusters; ++j) {
- all_histograms[all_histograms_size++] = histograms[new_clusters[j]];
- cluster_size[cluster_size_size++] = sizes[new_clusters[j]];
- remap[new_clusters[j]] = (uint32_t)j;
- }
- for (j = 0; j < num_to_combine; ++j) {
- histogram_symbols[i + j] = (uint32_t)num_clusters + remap[symbols[j]];
- }
- num_clusters += num_new_clusters;
- BROTLI_DCHECK(num_clusters == cluster_size_size);
- BROTLI_DCHECK(num_clusters == all_histograms_size);
- }
- BROTLI_FREE(m, histograms);
-
- max_num_pairs =
- BROTLI_MIN(size_t, 64 * num_clusters, (num_clusters / 2) * num_clusters);
- if (pairs_capacity < max_num_pairs + 1) {
- BROTLI_FREE(m, pairs);
- pairs = BROTLI_ALLOC(m, HistogramPair, max_num_pairs + 1);
- if (BROTLI_IS_OOM(m)) return;
- }
-
- clusters = BROTLI_ALLOC(m, uint32_t, num_clusters);
- if (BROTLI_IS_OOM(m)) return;
- for (i = 0; i < num_clusters; ++i) {
- clusters[i] = (uint32_t)i;
- }
- num_final_clusters = FN(BrotliHistogramCombine)(
- all_histograms, cluster_size, histogram_symbols, clusters, pairs,
- num_clusters, num_blocks, BROTLI_MAX_NUMBER_OF_BLOCK_TYPES,
- max_num_pairs);
- BROTLI_FREE(m, pairs);
- BROTLI_FREE(m, cluster_size);
-
- new_index = BROTLI_ALLOC(m, uint32_t, num_clusters);
- if (BROTLI_IS_OOM(m)) return;
- for (i = 0; i < num_clusters; ++i) new_index[i] = kInvalidIndex;
- pos = 0;
- {
- uint32_t next_index = 0;
- for (i = 0; i < num_blocks; ++i) {
- HistogramType histo;
- size_t j;
- uint32_t best_out;
- double best_bits;
- FN(HistogramClear)(&histo);
- for (j = 0; j < block_lengths[i]; ++j) {
- FN(HistogramAdd)(&histo, data[pos++]);
- }
- best_out = (i == 0) ? histogram_symbols[0] : histogram_symbols[i - 1];
- best_bits =
- FN(BrotliHistogramBitCostDistance)(&histo, &all_histograms[best_out]);
- for (j = 0; j < num_final_clusters; ++j) {
- const double cur_bits = FN(BrotliHistogramBitCostDistance)(
- &histo, &all_histograms[clusters[j]]);
- if (cur_bits < best_bits) {
- best_bits = cur_bits;
- best_out = clusters[j];
- }
- }
- histogram_symbols[i] = best_out;
- if (new_index[best_out] == kInvalidIndex) {
- new_index[best_out] = next_index++;
- }
- }
- }
- BROTLI_FREE(m, clusters);
- BROTLI_FREE(m, all_histograms);
- BROTLI_ENSURE_CAPACITY(
- m, uint8_t, split->types, split->types_alloc_size, num_blocks);
- BROTLI_ENSURE_CAPACITY(
- m, uint32_t, split->lengths, split->lengths_alloc_size, num_blocks);
- if (BROTLI_IS_OOM(m)) return;
- {
- uint32_t cur_length = 0;
- size_t block_idx = 0;
- uint8_t max_type = 0;
- for (i = 0; i < num_blocks; ++i) {
- cur_length += block_lengths[i];
- if (i + 1 == num_blocks ||
- histogram_symbols[i] != histogram_symbols[i + 1]) {
- const uint8_t id = (uint8_t)new_index[histogram_symbols[i]];
- split->types[block_idx] = id;
- split->lengths[block_idx] = cur_length;
- max_type = BROTLI_MAX(uint8_t, max_type, id);
- cur_length = 0;
- ++block_idx;
- }
- }
- split->num_blocks = block_idx;
- split->num_types = (size_t)max_type + 1;
- }
- BROTLI_FREE(m, new_index);
- BROTLI_FREE(m, block_lengths);
- BROTLI_FREE(m, histogram_symbols);
-}
-
-static void FN(SplitByteVector)(MemoryManager* m,
- const DataType* data, const size_t length,
- const size_t literals_per_histogram,
- const size_t max_histograms,
- const size_t sampling_stride_length,
- const double block_switch_cost,
- const BrotliEncoderParams* params,
- BlockSplit* split) {
- const size_t data_size = FN(HistogramDataSize)();
- size_t num_histograms = length / literals_per_histogram + 1;
- HistogramType* histograms;
- if (num_histograms > max_histograms) {
- num_histograms = max_histograms;
- }
- if (length == 0) {
- split->num_types = 1;
- return;
- } else if (length < kMinLengthForBlockSplitting) {
- BROTLI_ENSURE_CAPACITY(m, uint8_t,
- split->types, split->types_alloc_size, split->num_blocks + 1);
- BROTLI_ENSURE_CAPACITY(m, uint32_t,
- split->lengths, split->lengths_alloc_size, split->num_blocks + 1);
- if (BROTLI_IS_OOM(m)) return;
- split->num_types = 1;
- split->types[split->num_blocks] = 0;
- split->lengths[split->num_blocks] = (uint32_t)length;
- split->num_blocks++;
- return;
- }
- histograms = BROTLI_ALLOC(m, HistogramType, num_histograms);
- if (BROTLI_IS_OOM(m)) return;
- /* Find good entropy codes. */
- FN(InitialEntropyCodes)(data, length,
- sampling_stride_length,
- num_histograms, histograms);
- FN(RefineEntropyCodes)(data, length,
- sampling_stride_length,
- num_histograms, histograms);
- {
- /* Find a good path through literals with the good entropy codes. */
- uint8_t* block_ids = BROTLI_ALLOC(m, uint8_t, length);
- size_t num_blocks = 0;
- const size_t bitmaplen = (num_histograms + 7) >> 3;
- double* insert_cost = BROTLI_ALLOC(m, double, data_size * num_histograms);
- double* cost = BROTLI_ALLOC(m, double, num_histograms);
- uint8_t* switch_signal = BROTLI_ALLOC(m, uint8_t, length * bitmaplen);
- uint16_t* new_id = BROTLI_ALLOC(m, uint16_t, num_histograms);
- const size_t iters = params->quality < HQ_ZOPFLIFICATION_QUALITY ? 3 : 10;
- size_t i;
- if (BROTLI_IS_OOM(m)) return;
- for (i = 0; i < iters; ++i) {
- num_blocks = FN(FindBlocks)(data, length,
- block_switch_cost,
- num_histograms, histograms,
- insert_cost, cost, switch_signal,
- block_ids);
- num_histograms = FN(RemapBlockIds)(block_ids, length,
- new_id, num_histograms);
- FN(BuildBlockHistograms)(data, length, block_ids,
- num_histograms, histograms);
- }
- BROTLI_FREE(m, insert_cost);
- BROTLI_FREE(m, cost);
- BROTLI_FREE(m, switch_signal);
- BROTLI_FREE(m, new_id);
- BROTLI_FREE(m, histograms);
- FN(ClusterBlocks)(m, data, length, num_blocks, block_ids, split);
- if (BROTLI_IS_OOM(m)) return;
- BROTLI_FREE(m, block_ids);
- }
-}
-
-#undef HistogramType
diff --git a/BaseTools/Source/C/BrotliCompress/enc/brotli_bit_stream.h b/BaseTools/Source/C/BrotliCompress/enc/brotli_bit_stream.h
deleted file mode 100644
index 18556dc11044..000000000000
--- a/BaseTools/Source/C/BrotliCompress/enc/brotli_bit_stream.h
+++ /dev/null
@@ -1,84 +0,0 @@
-/* Copyright 2014 Google Inc. All Rights Reserved.
-
- Distributed under MIT license.
- See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
-*/
-
-/* Functions to convert brotli-related data structures into the
- brotli bit stream. The functions here operate under
- assumption that there is enough space in the storage, i.e., there are
- no out-of-range checks anywhere.
-
- These functions do bit addressing into a byte array. The byte array
- is called "storage" and the index to the bit is called storage_ix
- in function arguments. */
-
-#ifndef BROTLI_ENC_BROTLI_BIT_STREAM_H_
-#define BROTLI_ENC_BROTLI_BIT_STREAM_H_
-
-#include "../common/context.h"
-#include "../common/platform.h"
-#include <brotli/types.h>
-#include "./command.h"
-#include "./entropy_encode.h"
-#include "./memory.h"
-#include "./metablock.h"
-
-#if defined(__cplusplus) || defined(c_plusplus)
-extern "C" {
-#endif
-
-/* All Store functions here will use a storage_ix, which is always the bit
- position for the current storage. */
-
-BROTLI_INTERNAL void BrotliStoreHuffmanTree(const uint8_t* depths, size_t num,
- HuffmanTree* tree, size_t* storage_ix, uint8_t* storage);
-
-BROTLI_INTERNAL void BrotliBuildAndStoreHuffmanTreeFast(
- MemoryManager* m, const uint32_t* histogram, const size_t histogram_total,
- const size_t max_bits, uint8_t* depth, uint16_t* bits, size_t* storage_ix,
- uint8_t* storage);
-
-/* REQUIRES: length > 0 */
-/* REQUIRES: length <= (1 << 24) */
-BROTLI_INTERNAL void BrotliStoreMetaBlock(MemoryManager* m,
- const uint8_t* input, size_t start_pos, size_t length, size_t mask,
- uint8_t prev_byte, uint8_t prev_byte2, BROTLI_BOOL is_last,
- const BrotliEncoderParams* params, ContextType literal_context_mode,
- const Command* commands, size_t n_commands, const MetaBlockSplit* mb,
- size_t* storage_ix, uint8_t* storage);
-
-/* Stores the meta-block without doing any block splitting, just collects
- one histogram per block category and uses that for entropy coding.
- REQUIRES: length > 0
- REQUIRES: length <= (1 << 24) */
-BROTLI_INTERNAL void BrotliStoreMetaBlockTrivial(MemoryManager* m,
- const uint8_t* input, size_t start_pos, size_t length, size_t mask,
- BROTLI_BOOL is_last, const BrotliEncoderParams* params,
- const Command* commands, size_t n_commands,
- size_t* storage_ix, uint8_t* storage);
-
-/* Same as above, but uses static prefix codes for histograms with a only a few
- symbols, and uses static code length prefix codes for all other histograms.
- REQUIRES: length > 0
- REQUIRES: length <= (1 << 24) */
-BROTLI_INTERNAL void BrotliStoreMetaBlockFast(MemoryManager* m,
- const uint8_t* input, size_t start_pos, size_t length, size_t mask,
- BROTLI_BOOL is_last, const BrotliEncoderParams* params,
- const Command* commands, size_t n_commands,
- size_t* storage_ix, uint8_t* storage);
-
-/* This is for storing uncompressed blocks (simple raw storage of
- bytes-as-bytes).
- REQUIRES: length > 0
- REQUIRES: length <= (1 << 24) */
-BROTLI_INTERNAL void BrotliStoreUncompressedMetaBlock(
- BROTLI_BOOL is_final_block, const uint8_t* BROTLI_RESTRICT input,
- size_t position, size_t mask, size_t len,
- size_t* BROTLI_RESTRICT storage_ix, uint8_t* BROTLI_RESTRICT storage);
-
-#if defined(__cplusplus) || defined(c_plusplus)
-} /* extern "C" */
-#endif
-
-#endif /* BROTLI_ENC_BROTLI_BIT_STREAM_H_ */
diff --git a/BaseTools/Source/C/BrotliCompress/enc/cluster.h b/BaseTools/Source/C/BrotliCompress/enc/cluster.h
deleted file mode 100644
index b7ebec8c7841..000000000000
--- a/BaseTools/Source/C/BrotliCompress/enc/cluster.h
+++ /dev/null
@@ -1,48 +0,0 @@
-/* Copyright 2013 Google Inc. All Rights Reserved.
-
- Distributed under MIT license.
- See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
-*/
-
-/* Functions for clustering similar histograms together. */
-
-#ifndef BROTLI_ENC_CLUSTER_H_
-#define BROTLI_ENC_CLUSTER_H_
-
-#include "../common/platform.h"
-#include <brotli/types.h>
-#include "./histogram.h"
-#include "./memory.h"
-
-#if defined(__cplusplus) || defined(c_plusplus)
-extern "C" {
-#endif
-
-typedef struct HistogramPair {
- uint32_t idx1;
- uint32_t idx2;
- double cost_combo;
- double cost_diff;
-} HistogramPair;
-
-#define CODE(X) /* Declaration */;
-
-#define FN(X) X ## Literal
-#include "./cluster_inc.h" /* NOLINT(build/include) */
-#undef FN
-
-#define FN(X) X ## Command
-#include "./cluster_inc.h" /* NOLINT(build/include) */
-#undef FN
-
-#define FN(X) X ## Distance
-#include "./cluster_inc.h" /* NOLINT(build/include) */
-#undef FN
-
-#undef CODE
-
-#if defined(__cplusplus) || defined(c_plusplus)
-} /* extern "C" */
-#endif
-
-#endif /* BROTLI_ENC_CLUSTER_H_ */
diff --git a/BaseTools/Source/C/BrotliCompress/enc/cluster_inc.h b/BaseTools/Source/C/BrotliCompress/enc/cluster_inc.h
deleted file mode 100644
index b47e0dff0049..000000000000
--- a/BaseTools/Source/C/BrotliCompress/enc/cluster_inc.h
+++ /dev/null
@@ -1,317 +0,0 @@
-/* NOLINT(build/header_guard) */
-/* Copyright 2013 Google Inc. All Rights Reserved.
-
- Distributed under MIT license.
- See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
-*/
-
-/* template parameters: FN, CODE */
-
-#define HistogramType FN(Histogram)
-
-/* Computes the bit cost reduction by combining out[idx1] and out[idx2] and if
- it is below a threshold, stores the pair (idx1, idx2) in the *pairs queue. */
-BROTLI_INTERNAL void FN(BrotliCompareAndPushToQueue)(
- const HistogramType* out, const uint32_t* cluster_size, uint32_t idx1,
- uint32_t idx2, size_t max_num_pairs, HistogramPair* pairs,
- size_t* num_pairs) CODE({
- BROTLI_BOOL is_good_pair = BROTLI_FALSE;
- HistogramPair p;
- p.idx1 = p.idx2 = 0;
- p.cost_diff = p.cost_combo = 0;
- if (idx1 == idx2) {
- return;
- }
- if (idx2 < idx1) {
- uint32_t t = idx2;
- idx2 = idx1;
- idx1 = t;
- }
- p.idx1 = idx1;
- p.idx2 = idx2;
- p.cost_diff = 0.5 * ClusterCostDiff(cluster_size[idx1], cluster_size[idx2]);
- p.cost_diff -= out[idx1].bit_cost_;
- p.cost_diff -= out[idx2].bit_cost_;
-
- if (out[idx1].total_count_ == 0) {
- p.cost_combo = out[idx2].bit_cost_;
- is_good_pair = BROTLI_TRUE;
- } else if (out[idx2].total_count_ == 0) {
- p.cost_combo = out[idx1].bit_cost_;
- is_good_pair = BROTLI_TRUE;
- } else {
- double threshold = *num_pairs == 0 ? 1e99 :
- BROTLI_MAX(double, 0.0, pairs[0].cost_diff);
- HistogramType combo = out[idx1];
- double cost_combo;
- FN(HistogramAddHistogram)(&combo, &out[idx2]);
- cost_combo = FN(BrotliPopulationCost)(&combo);
- if (cost_combo < threshold - p.cost_diff) {
- p.cost_combo = cost_combo;
- is_good_pair = BROTLI_TRUE;
- }
- }
- if (is_good_pair) {
- p.cost_diff += p.cost_combo;
- if (*num_pairs > 0 && HistogramPairIsLess(&pairs[0], &p)) {
- /* Replace the top of the queue if needed. */
- if (*num_pairs < max_num_pairs) {
- pairs[*num_pairs] = pairs[0];
- ++(*num_pairs);
- }
- pairs[0] = p;
- } else if (*num_pairs < max_num_pairs) {
- pairs[*num_pairs] = p;
- ++(*num_pairs);
- }
- }
-})
-
-BROTLI_INTERNAL size_t FN(BrotliHistogramCombine)(HistogramType* out,
- uint32_t* cluster_size,
- uint32_t* symbols,
- uint32_t* clusters,
- HistogramPair* pairs,
- size_t num_clusters,
- size_t symbols_size,
- size_t max_clusters,
- size_t max_num_pairs) CODE({
- double cost_diff_threshold = 0.0;
- size_t min_cluster_size = 1;
- size_t num_pairs = 0;
-
- {
- /* We maintain a vector of histogram pairs, with the property that the pair
- with the maximum bit cost reduction is the first. */
- size_t idx1;
- for (idx1 = 0; idx1 < num_clusters; ++idx1) {
- size_t idx2;
- for (idx2 = idx1 + 1; idx2 < num_clusters; ++idx2) {
- FN(BrotliCompareAndPushToQueue)(out, cluster_size, clusters[idx1],
- clusters[idx2], max_num_pairs, &pairs[0], &num_pairs);
- }
- }
- }
-
- while (num_clusters > min_cluster_size) {
- uint32_t best_idx1;
- uint32_t best_idx2;
- size_t i;
- if (pairs[0].cost_diff >= cost_diff_threshold) {
- cost_diff_threshold = 1e99;
- min_cluster_size = max_clusters;
- continue;
- }
- /* Take the best pair from the top of heap. */
- best_idx1 = pairs[0].idx1;
- best_idx2 = pairs[0].idx2;
- FN(HistogramAddHistogram)(&out[best_idx1], &out[best_idx2]);
- out[best_idx1].bit_cost_ = pairs[0].cost_combo;
- cluster_size[best_idx1] += cluster_size[best_idx2];
- for (i = 0; i < symbols_size; ++i) {
- if (symbols[i] == best_idx2) {
- symbols[i] = best_idx1;
- }
- }
- for (i = 0; i < num_clusters; ++i) {
- if (clusters[i] == best_idx2) {
- memmove(&clusters[i], &clusters[i + 1],
- (num_clusters - i - 1) * sizeof(clusters[0]));
- break;
- }
- }
- --num_clusters;
- {
- /* Remove pairs intersecting the just combined best pair. */
- size_t copy_to_idx = 0;
- for (i = 0; i < num_pairs; ++i) {
- HistogramPair* p = &pairs[i];
- if (p->idx1 == best_idx1 || p->idx2 == best_idx1 ||
- p->idx1 == best_idx2 || p->idx2 == best_idx2) {
- /* Remove invalid pair from the queue. */
- continue;
- }
- if (HistogramPairIsLess(&pairs[0], p)) {
- /* Replace the top of the queue if needed. */
- HistogramPair front = pairs[0];
- pairs[0] = *p;
- pairs[copy_to_idx] = front;
- } else {
- pairs[copy_to_idx] = *p;
- }
- ++copy_to_idx;
- }
- num_pairs = copy_to_idx;
- }
-
- /* Push new pairs formed with the combined histogram to the heap. */
- for (i = 0; i < num_clusters; ++i) {
- FN(BrotliCompareAndPushToQueue)(out, cluster_size, best_idx1, clusters[i],
- max_num_pairs, &pairs[0], &num_pairs);
- }
- }
- return num_clusters;
-})
-
-/* What is the bit cost of moving histogram from cur_symbol to candidate. */
-BROTLI_INTERNAL double FN(BrotliHistogramBitCostDistance)(
- const HistogramType* histogram, const HistogramType* candidate) CODE({
- if (histogram->total_count_ == 0) {
- return 0.0;
- } else {
- HistogramType tmp = *histogram;
- FN(HistogramAddHistogram)(&tmp, candidate);
- return FN(BrotliPopulationCost)(&tmp) - candidate->bit_cost_;
- }
-})
-
-/* Find the best 'out' histogram for each of the 'in' histograms.
- When called, clusters[0..num_clusters) contains the unique values from
- symbols[0..in_size), but this property is not preserved in this function.
- Note: we assume that out[]->bit_cost_ is already up-to-date. */
-BROTLI_INTERNAL void FN(BrotliHistogramRemap)(const HistogramType* in,
- size_t in_size, const uint32_t* clusters, size_t num_clusters,
- HistogramType* out, uint32_t* symbols) CODE({
- size_t i;
- for (i = 0; i < in_size; ++i) {
- uint32_t best_out = i == 0 ? symbols[0] : symbols[i - 1];
- double best_bits =
- FN(BrotliHistogramBitCostDistance)(&in[i], &out[best_out]);
- size_t j;
- for (j = 0; j < num_clusters; ++j) {
- const double cur_bits =
- FN(BrotliHistogramBitCostDistance)(&in[i], &out[clusters[j]]);
- if (cur_bits < best_bits) {
- best_bits = cur_bits;
- best_out = clusters[j];
- }
- }
- symbols[i] = best_out;
- }
-
- /* Recompute each out based on raw and symbols. */
- for (i = 0; i < num_clusters; ++i) {
- FN(HistogramClear)(&out[clusters[i]]);
- }
- for (i = 0; i < in_size; ++i) {
- FN(HistogramAddHistogram)(&out[symbols[i]], &in[i]);
- }
-})
-
-/* Reorders elements of the out[0..length) array and changes values in
- symbols[0..length) array in the following way:
- * when called, symbols[] contains indexes into out[], and has N unique
- values (possibly N < length)
- * on return, symbols'[i] = f(symbols[i]) and
- out'[symbols'[i]] = out[symbols[i]], for each 0 <= i < length,
- where f is a bijection between the range of symbols[] and [0..N), and
- the first occurrences of values in symbols'[i] come in consecutive
- increasing order.
- Returns N, the number of unique values in symbols[]. */
-BROTLI_INTERNAL size_t FN(BrotliHistogramReindex)(MemoryManager* m,
- HistogramType* out, uint32_t* symbols, size_t length) CODE({
- static const uint32_t kInvalidIndex = BROTLI_UINT32_MAX;
- uint32_t* new_index = BROTLI_ALLOC(m, uint32_t, length);
- uint32_t next_index;
- HistogramType* tmp;
- size_t i;
- if (BROTLI_IS_OOM(m)) return 0;
- for (i = 0; i < length; ++i) {
- new_index[i] = kInvalidIndex;
- }
- next_index = 0;
- for (i = 0; i < length; ++i) {
- if (new_index[symbols[i]] == kInvalidIndex) {
- new_index[symbols[i]] = next_index;
- ++next_index;
- }
- }
- /* TODO: by using idea of "cycle-sort" we can avoid allocation of
- tmp and reduce the number of copying by the factor of 2. */
- tmp = BROTLI_ALLOC(m, HistogramType, next_index);
- if (BROTLI_IS_OOM(m)) return 0;
- next_index = 0;
- for (i = 0; i < length; ++i) {
- if (new_index[symbols[i]] == next_index) {
- tmp[next_index] = out[symbols[i]];
- ++next_index;
- }
- symbols[i] = new_index[symbols[i]];
- }
- BROTLI_FREE(m, new_index);
- for (i = 0; i < next_index; ++i) {
- out[i] = tmp[i];
- }
- BROTLI_FREE(m, tmp);
- return next_index;
-})
-
-BROTLI_INTERNAL void FN(BrotliClusterHistograms)(
- MemoryManager* m, const HistogramType* in, const size_t in_size,
- size_t max_histograms, HistogramType* out, size_t* out_size,
- uint32_t* histogram_symbols) CODE({
- uint32_t* cluster_size = BROTLI_ALLOC(m, uint32_t, in_size);
- uint32_t* clusters = BROTLI_ALLOC(m, uint32_t, in_size);
- size_t num_clusters = 0;
- const size_t max_input_histograms = 64;
- size_t pairs_capacity = max_input_histograms * max_input_histograms / 2;
- /* For the first pass of clustering, we allow all pairs. */
- HistogramPair* pairs = BROTLI_ALLOC(m, HistogramPair, pairs_capacity + 1);
- size_t i;
-
- if (BROTLI_IS_OOM(m)) return;
-
- for (i = 0; i < in_size; ++i) {
- cluster_size[i] = 1;
- }
-
- for (i = 0; i < in_size; ++i) {
- out[i] = in[i];
- out[i].bit_cost_ = FN(BrotliPopulationCost)(&in[i]);
- histogram_symbols[i] = (uint32_t)i;
- }
-
- for (i = 0; i < in_size; i += max_input_histograms) {
- size_t num_to_combine =
- BROTLI_MIN(size_t, in_size - i, max_input_histograms);
- size_t num_new_clusters;
- size_t j;
- for (j = 0; j < num_to_combine; ++j) {
- clusters[num_clusters + j] = (uint32_t)(i + j);
- }
- num_new_clusters =
- FN(BrotliHistogramCombine)(out, cluster_size,
- &histogram_symbols[i],
- &clusters[num_clusters], pairs,
- num_to_combine, num_to_combine,
- max_histograms, pairs_capacity);
- num_clusters += num_new_clusters;
- }
-
- {
- /* For the second pass, we limit the total number of histogram pairs.
- After this limit is reached, we only keep searching for the best pair. */
- size_t max_num_pairs = BROTLI_MIN(size_t,
- 64 * num_clusters, (num_clusters / 2) * num_clusters);
- BROTLI_ENSURE_CAPACITY(
- m, HistogramPair, pairs, pairs_capacity, max_num_pairs + 1);
- if (BROTLI_IS_OOM(m)) return;
-
- /* Collapse similar histograms. */
- num_clusters = FN(BrotliHistogramCombine)(out, cluster_size,
- histogram_symbols, clusters,
- pairs, num_clusters, in_size,
- max_histograms, max_num_pairs);
- }
- BROTLI_FREE(m, pairs);
- BROTLI_FREE(m, cluster_size);
- /* Find the optimal map from original histograms to the final ones. */
- FN(BrotliHistogramRemap)(in, in_size, clusters, num_clusters,
- out, histogram_symbols);
- BROTLI_FREE(m, clusters);
- /* Convert the context map to a canonical form. */
- *out_size = FN(BrotliHistogramReindex)(m, out, histogram_symbols, in_size);
- if (BROTLI_IS_OOM(m)) return;
-})
-
-#undef HistogramType
diff --git a/BaseTools/Source/C/BrotliCompress/enc/command.h b/BaseTools/Source/C/BrotliCompress/enc/command.h
deleted file mode 100644
index b8a66a44dc0b..000000000000
--- a/BaseTools/Source/C/BrotliCompress/enc/command.h
+++ /dev/null
@@ -1,190 +0,0 @@
-/* Copyright 2013 Google Inc. All Rights Reserved.
-
- Distributed under MIT license.
- See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
-*/
-
-/* This class models a sequence of literals and a backward reference copy. */
-
-#ifndef BROTLI_ENC_COMMAND_H_
-#define BROTLI_ENC_COMMAND_H_
-
-#include "../common/constants.h"
-#include "../common/platform.h"
-#include <brotli/types.h>
-#include "./fast_log.h"
-#include "./params.h"
-#include "./prefix.h"
-
-#if defined(__cplusplus) || defined(c_plusplus)
-extern "C" {
-#endif
-
-static uint32_t kInsBase[] = { 0, 1, 2, 3, 4, 5, 6, 8, 10, 14, 18, 26, 34, 50,
- 66, 98, 130, 194, 322, 578, 1090, 2114, 6210, 22594 };
-static uint32_t kInsExtra[] = { 0, 0, 0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4,
- 5, 5, 6, 7, 8, 9, 10, 12, 14, 24 };
-static uint32_t kCopyBase[] = { 2, 3, 4, 5, 6, 7, 8, 9, 10, 12, 14, 18, 22, 30,
- 38, 54, 70, 102, 134, 198, 326, 582, 1094, 2118 };
-static uint32_t kCopyExtra[] = { 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 2, 3, 3,
- 4, 4, 5, 5, 6, 7, 8, 9, 10, 24 };
-
-static BROTLI_INLINE uint16_t GetInsertLengthCode(size_t insertlen) {
- if (insertlen < 6) {
- return (uint16_t)insertlen;
- } else if (insertlen < 130) {
- uint32_t nbits = Log2FloorNonZero(insertlen - 2) - 1u;
- return (uint16_t)((nbits << 1) + ((insertlen - 2) >> nbits) + 2);
- } else if (insertlen < 2114) {
- return (uint16_t)(Log2FloorNonZero(insertlen - 66) + 10);
- } else if (insertlen < 6210) {
- return 21u;
- } else if (insertlen < 22594) {
- return 22u;
- } else {
- return 23u;
- }
-}
-
-static BROTLI_INLINE uint16_t GetCopyLengthCode(size_t copylen) {
- if (copylen < 10) {
- return (uint16_t)(copylen - 2);
- } else if (copylen < 134) {
- uint32_t nbits = Log2FloorNonZero(copylen - 6) - 1u;
- return (uint16_t)((nbits << 1) + ((copylen - 6) >> nbits) + 4);
- } else if (copylen < 2118) {
- return (uint16_t)(Log2FloorNonZero(copylen - 70) + 12);
- } else {
- return 23u;
- }
-}
-
-static BROTLI_INLINE uint16_t CombineLengthCodes(
- uint16_t inscode, uint16_t copycode, BROTLI_BOOL use_last_distance) {
- uint16_t bits64 =
- (uint16_t)((copycode & 0x7u) | ((inscode & 0x7u) << 3u));
- if (use_last_distance && inscode < 8u && copycode < 16u) {
- return (copycode < 8u) ? bits64 : (bits64 | 64u);
- } else {
- /* Specification: 5 Encoding of ... (last table) */
- /* offset = 2 * index, where index is in range [0..8] */
- uint32_t offset = 2u * ((copycode >> 3u) + 3u * (inscode >> 3u));
- /* All values in specification are K * 64,
- where K = [2, 3, 6, 4, 5, 8, 7, 9, 10],
- i + 1 = [1, 2, 3, 4, 5, 6, 7, 8, 9],
- K - i - 1 = [1, 1, 3, 0, 0, 2, 0, 1, 2] = D.
- All values in D require only 2 bits to encode.
- Magic constant is shifted 6 bits left, to avoid final multiplication. */
- offset = (offset << 5u) + 0x40u + ((0x520D40u >> offset) & 0xC0u);
- return (uint16_t)(offset | bits64);
- }
-}
-
-static BROTLI_INLINE void GetLengthCode(size_t insertlen, size_t copylen,
- BROTLI_BOOL use_last_distance,
- uint16_t* code) {
- uint16_t inscode = GetInsertLengthCode(insertlen);
- uint16_t copycode = GetCopyLengthCode(copylen);
- *code = CombineLengthCodes(inscode, copycode, use_last_distance);
-}
-
-static BROTLI_INLINE uint32_t GetInsertBase(uint16_t inscode) {
- return kInsBase[inscode];
-}
-
-static BROTLI_INLINE uint32_t GetInsertExtra(uint16_t inscode) {
- return kInsExtra[inscode];
-}
-
-static BROTLI_INLINE uint32_t GetCopyBase(uint16_t copycode) {
- return kCopyBase[copycode];
-}
-
-static BROTLI_INLINE uint32_t GetCopyExtra(uint16_t copycode) {
- return kCopyExtra[copycode];
-}
-
-typedef struct Command {
- uint32_t insert_len_;
- /* Stores copy_len in low 25 bits and copy_code - copy_len in high 7 bit. */
- uint32_t copy_len_;
- /* Stores distance extra bits. */
- uint32_t dist_extra_;
- uint16_t cmd_prefix_;
- /* Stores distance code in low 10 bits
- and number of extra bits in high 6 bits. */
- uint16_t dist_prefix_;
-} Command;
-
-/* distance_code is e.g. 0 for same-as-last short code, or 16 for offset 1. */
-static BROTLI_INLINE void InitCommand(Command* self,
- const BrotliDistanceParams* dist, size_t insertlen,
- size_t copylen, int copylen_code_delta, size_t distance_code) {
- /* Don't rely on signed int representation, use honest casts. */
- uint32_t delta = (uint8_t)((int8_t)copylen_code_delta);
- self->insert_len_ = (uint32_t)insertlen;
- self->copy_len_ = (uint32_t)(copylen | (delta << 25));
- /* The distance prefix and extra bits are stored in this Command as if
- npostfix and ndirect were 0, they are only recomputed later after the
- clustering if needed. */
- PrefixEncodeCopyDistance(
- distance_code, dist->num_direct_distance_codes,
- dist->distance_postfix_bits, &self->dist_prefix_, &self->dist_extra_);
- GetLengthCode(
- insertlen, (size_t)((int)copylen + copylen_code_delta),
- TO_BROTLI_BOOL((self->dist_prefix_ & 0x3FF) == 0), &self->cmd_prefix_);
-}
-
-static BROTLI_INLINE void InitInsertCommand(Command* self, size_t insertlen) {
- self->insert_len_ = (uint32_t)insertlen;
- self->copy_len_ = 4 << 25;
- self->dist_extra_ = 0;
- self->dist_prefix_ = BROTLI_NUM_DISTANCE_SHORT_CODES;
- GetLengthCode(insertlen, 4, BROTLI_FALSE, &self->cmd_prefix_);
-}
-
-static BROTLI_INLINE uint32_t CommandRestoreDistanceCode(
- const Command* self, const BrotliDistanceParams* dist) {
- if ((self->dist_prefix_ & 0x3FFu) <
- BROTLI_NUM_DISTANCE_SHORT_CODES + dist->num_direct_distance_codes) {
- return self->dist_prefix_ & 0x3FFu;
- } else {
- uint32_t dcode = self->dist_prefix_ & 0x3FFu;
- uint32_t nbits = self->dist_prefix_ >> 10;
- uint32_t extra = self->dist_extra_;
- uint32_t postfix_mask = (1U << dist->distance_postfix_bits) - 1U;
- uint32_t hcode = (dcode - dist->num_direct_distance_codes -
- BROTLI_NUM_DISTANCE_SHORT_CODES) >>
- dist->distance_postfix_bits;
- uint32_t lcode = (dcode - dist->num_direct_distance_codes -
- BROTLI_NUM_DISTANCE_SHORT_CODES) & postfix_mask;
- uint32_t offset = ((2U + (hcode & 1U)) << nbits) - 4U;
- return ((offset + extra) << dist->distance_postfix_bits) + lcode +
- dist->num_direct_distance_codes + BROTLI_NUM_DISTANCE_SHORT_CODES;
- }
-}
-
-static BROTLI_INLINE uint32_t CommandDistanceContext(const Command* self) {
- uint32_t r = self->cmd_prefix_ >> 6;
- uint32_t c = self->cmd_prefix_ & 7;
- if ((r == 0 || r == 2 || r == 4 || r == 7) && (c <= 2)) {
- return c;
- }
- return 3;
-}
-
-static BROTLI_INLINE uint32_t CommandCopyLen(const Command* self) {
- return self->copy_len_ & 0x1FFFFFF;
-}
-
-static BROTLI_INLINE uint32_t CommandCopyLenCode(const Command* self) {
- uint32_t modifier = self->copy_len_ >> 25;
- int32_t delta = (int8_t)((uint8_t)(modifier | ((modifier & 0x40) << 1)));
- return (uint32_t)((int32_t)(self->copy_len_ & 0x1FFFFFF) + delta);
-}
-
-#if defined(__cplusplus) || defined(c_plusplus)
-} /* extern "C" */
-#endif
-
-#endif /* BROTLI_ENC_COMMAND_H_ */
diff --git a/BaseTools/Source/C/BrotliCompress/enc/compress_fragment.h b/BaseTools/Source/C/BrotliCompress/enc/compress_fragment.h
deleted file mode 100644
index d4c34299ea2c..000000000000
--- a/BaseTools/Source/C/BrotliCompress/enc/compress_fragment.h
+++ /dev/null
@@ -1,61 +0,0 @@
-/* Copyright 2015 Google Inc. All Rights Reserved.
-
- Distributed under MIT license.
- See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
-*/
-
-/* Function for fast encoding of an input fragment, independently from the input
- history. This function uses one-pass processing: when we find a backward
- match, we immediately emit the corresponding command and literal codes to
- the bit stream. */
-
-#ifndef BROTLI_ENC_COMPRESS_FRAGMENT_H_
-#define BROTLI_ENC_COMPRESS_FRAGMENT_H_
-
-#include "../common/platform.h"
-#include <brotli/types.h>
-#include "./memory.h"
-
-#if defined(__cplusplus) || defined(c_plusplus)
-extern "C" {
-#endif
-
-/* Compresses "input" string to the "*storage" buffer as one or more complete
- meta-blocks, and updates the "*storage_ix" bit position.
-
- If "is_last" is 1, emits an additional empty last meta-block.
-
- "cmd_depth" and "cmd_bits" contain the command and distance prefix codes
- (see comment in encode.h) used for the encoding of this input fragment.
- If "is_last" is 0, they are updated to reflect the statistics
- of this input fragment, to be used for the encoding of the next fragment.
-
- "*cmd_code_numbits" is the number of bits of the compressed representation
- of the command and distance prefix codes, and "cmd_code" is an array of
- at least "(*cmd_code_numbits + 7) >> 3" size that contains the compressed
- command and distance prefix codes. If "is_last" is 0, these are also
- updated to represent the updated "cmd_depth" and "cmd_bits".
-
- REQUIRES: "input_size" is greater than zero, or "is_last" is 1.
- REQUIRES: "input_size" is less or equal to maximal metablock size (1 << 24).
- REQUIRES: All elements in "table[0..table_size-1]" are initialized to zero.
- REQUIRES: "table_size" is an odd (9, 11, 13, 15) power of two
- OUTPUT: maximal copy distance <= |input_size|
- OUTPUT: maximal copy distance <= BROTLI_MAX_BACKWARD_LIMIT(18) */
-BROTLI_INTERNAL void BrotliCompressFragmentFast(MemoryManager* m,
- const uint8_t* input,
- size_t input_size,
- BROTLI_BOOL is_last,
- int* table, size_t table_size,
- uint8_t cmd_depth[128],
- uint16_t cmd_bits[128],
- size_t* cmd_code_numbits,
- uint8_t* cmd_code,
- size_t* storage_ix,
- uint8_t* storage);
-
-#if defined(__cplusplus) || defined(c_plusplus)
-} /* extern "C" */
-#endif
-
-#endif /* BROTLI_ENC_COMPRESS_FRAGMENT_H_ */
diff --git a/BaseTools/Source/C/BrotliCompress/enc/compress_fragment_two_pass.h b/BaseTools/Source/C/BrotliCompress/enc/compress_fragment_two_pass.h
deleted file mode 100644
index c97e22cfcaba..000000000000
--- a/BaseTools/Source/C/BrotliCompress/enc/compress_fragment_two_pass.h
+++ /dev/null
@@ -1,54 +0,0 @@
-/* Copyright 2015 Google Inc. All Rights Reserved.
-
- Distributed under MIT license.
- See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
-*/
-
-/* Function for fast encoding of an input fragment, independently from the input
- history. This function uses two-pass processing: in the first pass we save
- the found backward matches and literal bytes into a buffer, and in the
- second pass we emit them into the bit stream using prefix codes built based
- on the actual command and literal byte histograms. */
-
-#ifndef BROTLI_ENC_COMPRESS_FRAGMENT_TWO_PASS_H_
-#define BROTLI_ENC_COMPRESS_FRAGMENT_TWO_PASS_H_
-
-#include "../common/platform.h"
-#include <brotli/types.h>
-#include "./memory.h"
-
-#if defined(__cplusplus) || defined(c_plusplus)
-extern "C" {
-#endif
-
-static const size_t kCompressFragmentTwoPassBlockSize = 1 << 17;
-
-/* Compresses "input" string to the "*storage" buffer as one or more complete
- meta-blocks, and updates the "*storage_ix" bit position.
-
- If "is_last" is 1, emits an additional empty last meta-block.
-
- REQUIRES: "input_size" is greater than zero, or "is_last" is 1.
- REQUIRES: "input_size" is less or equal to maximal metablock size (1 << 24).
- REQUIRES: "command_buf" and "literal_buf" point to at least
- kCompressFragmentTwoPassBlockSize long arrays.
- REQUIRES: All elements in "table[0..table_size-1]" are initialized to zero.
- REQUIRES: "table_size" is a power of two
- OUTPUT: maximal copy distance <= |input_size|
- OUTPUT: maximal copy distance <= BROTLI_MAX_BACKWARD_LIMIT(18) */
-BROTLI_INTERNAL void BrotliCompressFragmentTwoPass(MemoryManager* m,
- const uint8_t* input,
- size_t input_size,
- BROTLI_BOOL is_last,
- uint32_t* command_buf,
- uint8_t* literal_buf,
- int* table,
- size_t table_size,
- size_t* storage_ix,
- uint8_t* storage);
-
-#if defined(__cplusplus) || defined(c_plusplus)
-} /* extern "C" */
-#endif
-
-#endif /* BROTLI_ENC_COMPRESS_FRAGMENT_TWO_PASS_H_ */
diff --git a/BaseTools/Source/C/BrotliCompress/enc/dictionary_hash.h b/BaseTools/Source/C/BrotliCompress/enc/dictionary_hash.h
deleted file mode 100644
index ab31827c0bb0..000000000000
--- a/BaseTools/Source/C/BrotliCompress/enc/dictionary_hash.h
+++ /dev/null
@@ -1,24 +0,0 @@
-/* Copyright 2015 Google Inc. All Rights Reserved.
-
- Distributed under MIT license.
- See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
-*/
-
-/* Hash table on the 4-byte prefixes of static dictionary words. */
-
-#ifndef BROTLI_ENC_DICTIONARY_HASH_H_
-#define BROTLI_ENC_DICTIONARY_HASH_H_
-
-#include <brotli/types.h>
-
-#if defined(__cplusplus) || defined(c_plusplus)
-extern "C" {
-#endif
-
-extern const uint16_t kStaticDictionaryHash[32768];
-
-#if defined(__cplusplus) || defined(c_plusplus)
-} /* extern "C" */
-#endif
-
-#endif /* BROTLI_ENC_DICTIONARY_HASH_H_ */
diff --git a/BaseTools/Source/C/BrotliCompress/enc/encoder_dict.h b/BaseTools/Source/C/BrotliCompress/enc/encoder_dict.h
deleted file mode 100644
index 7c41ea055ac0..000000000000
--- a/BaseTools/Source/C/BrotliCompress/enc/encoder_dict.h
+++ /dev/null
@@ -1,41 +0,0 @@
-/* Copyright 2017 Google Inc. All Rights Reserved.
-
- Distributed under MIT license.
- See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
-*/
-
-#ifndef BROTLI_ENC_ENCODER_DICT_H_
-#define BROTLI_ENC_ENCODER_DICT_H_
-
-#include "../common/dictionary.h"
-#include "../common/platform.h"
-#include <brotli/types.h>
-#include "./static_dict_lut.h"
-
-#if defined(__cplusplus) || defined(c_plusplus)
-extern "C" {
-#endif
-
-/* Dictionary data (words and transforms) for 1 possible context */
-typedef struct BrotliEncoderDictionary {
- const BrotliDictionary* words;
-
- /* cut off for fast encoder */
- uint32_t cutoffTransformsCount;
- uint64_t cutoffTransforms;
-
- /* from dictionary_hash.h, for fast encoder */
- const uint16_t* hash_table;
-
- /* from static_dict_lut.h, for slow encoder */
- const uint16_t* buckets;
- const DictWord* dict_words;
-} BrotliEncoderDictionary;
-
-BROTLI_INTERNAL void BrotliInitEncoderDictionary(BrotliEncoderDictionary* dict);
-
-#if defined(__cplusplus) || defined(c_plusplus)
-} /* extern "C" */
-#endif
-
-#endif /* BROTLI_ENC_ENCODER_DICT_H_ */
diff --git a/BaseTools/Source/C/BrotliCompress/enc/entropy_encode.h b/BaseTools/Source/C/BrotliCompress/enc/entropy_encode.h
deleted file mode 100644
index 173d98336347..000000000000
--- a/BaseTools/Source/C/BrotliCompress/enc/entropy_encode.h
+++ /dev/null
@@ -1,122 +0,0 @@
-/* Copyright 2010 Google Inc. All Rights Reserved.
-
- Distributed under MIT license.
- See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
-*/
-
-/* Entropy encoding (Huffman) utilities. */
-
-#ifndef BROTLI_ENC_ENTROPY_ENCODE_H_
-#define BROTLI_ENC_ENTROPY_ENCODE_H_
-
-#include "../common/platform.h"
-#include <brotli/types.h>
-
-#if defined(__cplusplus) || defined(c_plusplus)
-extern "C" {
-#endif
-
-/* A node of a Huffman tree. */
-typedef struct HuffmanTree {
- uint32_t total_count_;
- int16_t index_left_;
- int16_t index_right_or_value_;
-} HuffmanTree;
-
-static BROTLI_INLINE void InitHuffmanTree(HuffmanTree* self, uint32_t count,
- int16_t left, int16_t right) {
- self->total_count_ = count;
- self->index_left_ = left;
- self->index_right_or_value_ = right;
-}
-
-/* Returns 1 is assignment of depths succeeded, otherwise 0. */
-BROTLI_INTERNAL BROTLI_BOOL BrotliSetDepth(
- int p, HuffmanTree* pool, uint8_t* depth, int max_depth);
-
-/* This function will create a Huffman tree.
-
- The (data,length) contains the population counts.
- The tree_limit is the maximum bit depth of the Huffman codes.
-
- The depth contains the tree, i.e., how many bits are used for
- the symbol.
-
- The actual Huffman tree is constructed in the tree[] array, which has to
- be at least 2 * length + 1 long.
-
- See http://en.wikipedia.org/wiki/Huffman_coding */
-BROTLI_INTERNAL void BrotliCreateHuffmanTree(const uint32_t* data,
- const size_t length,
- const int tree_limit,
- HuffmanTree* tree,
- uint8_t* depth);
-
-/* Change the population counts in a way that the consequent
- Huffman tree compression, especially its RLE-part will be more
- likely to compress this data more efficiently.
-
- length contains the size of the histogram.
- counts contains the population counts.
- good_for_rle is a buffer of at least length size */
-BROTLI_INTERNAL void BrotliOptimizeHuffmanCountsForRle(
- size_t length, uint32_t* counts, uint8_t* good_for_rle);
-
-/* Write a Huffman tree from bit depths into the bit-stream representation
- of a Huffman tree. The generated Huffman tree is to be compressed once
- more using a Huffman tree */
-BROTLI_INTERNAL void BrotliWriteHuffmanTree(const uint8_t* depth,
- size_t num,
- size_t* tree_size,
- uint8_t* tree,
- uint8_t* extra_bits_data);
-
-/* Get the actual bit values for a tree of bit depths. */
-BROTLI_INTERNAL void BrotliConvertBitDepthsToSymbols(const uint8_t* depth,
- size_t len,
- uint16_t* bits);
-
-/* Input size optimized Shell sort. */
-typedef BROTLI_BOOL (*HuffmanTreeComparator)(
- const HuffmanTree*, const HuffmanTree*);
-static BROTLI_INLINE void SortHuffmanTreeItems(HuffmanTree* items,
- const size_t n, HuffmanTreeComparator comparator) {
- static const size_t gaps[] = {132, 57, 23, 10, 4, 1};
- if (n < 13) {
- /* Insertion sort. */
- size_t i;
- for (i = 1; i < n; ++i) {
- HuffmanTree tmp = items[i];
- size_t k = i;
- size_t j = i - 1;
- while (comparator(&tmp, &items[j])) {
- items[k] = items[j];
- k = j;
- if (!j--) break;
- }
- items[k] = tmp;
- }
- return;
- } else {
- /* Shell sort. */
- int g = n < 57 ? 2 : 0;
- for (; g < 6; ++g) {
- size_t gap = gaps[g];
- size_t i;
- for (i = gap; i < n; ++i) {
- size_t j = i;
- HuffmanTree tmp = items[i];
- for (; j >= gap && comparator(&tmp, &items[j - gap]); j -= gap) {
- items[j] = items[j - gap];
- }
- items[j] = tmp;
- }
- }
- }
-}
-
-#if defined(__cplusplus) || defined(c_plusplus)
-} /* extern "C" */
-#endif
-
-#endif /* BROTLI_ENC_ENTROPY_ENCODE_H_ */
diff --git a/BaseTools/Source/C/BrotliCompress/enc/entropy_encode_static.h b/BaseTools/Source/C/BrotliCompress/enc/entropy_encode_static.h
deleted file mode 100644
index 3910af97ef8e..000000000000
--- a/BaseTools/Source/C/BrotliCompress/enc/entropy_encode_static.h
+++ /dev/null
@@ -1,539 +0,0 @@
-/* Copyright 2015 Google Inc. All Rights Reserved.
-
- Distributed under MIT license.
- See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
-*/
-
-/* Static entropy codes used for faster meta-block encoding. */
-
-#ifndef BROTLI_ENC_ENTROPY_ENCODE_STATIC_H_
-#define BROTLI_ENC_ENTROPY_ENCODE_STATIC_H_
-
-#include "../common/constants.h"
-#include "../common/platform.h"
-#include <brotli/types.h>
-#include "./write_bits.h"
-
-#if defined(__cplusplus) || defined(c_plusplus)
-extern "C" {
-#endif
-
-static const uint8_t kCodeLengthDepth[18] = {
- 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 5, 5, 0, 4, 4,
-};
-
-static const uint8_t kStaticCommandCodeDepth[BROTLI_NUM_COMMAND_SYMBOLS] = {
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
- 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
- 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
- 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
- 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
- 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
- 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
- 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
- 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
- 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
- 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
- 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
- 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
- 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
- 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
- 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
-};
-
-static const uint8_t kStaticDistanceCodeDepth[64] = {
- 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
- 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
- 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
- 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
-};
-
-static const uint32_t kCodeLengthBits[18] = {
- 0, 8, 4, 12, 2, 10, 6, 14, 1, 9, 5, 13, 3, 15, 31, 0, 11, 7,
-};
-
-static BROTLI_INLINE void StoreStaticCodeLengthCode(
- size_t* storage_ix, uint8_t* storage) {
- BrotliWriteBits(
- 40, BROTLI_MAKE_UINT64_T(0x0000FFu, 0x55555554u), storage_ix, storage);
-}
-
-static const uint64_t kZeroRepsBits[BROTLI_NUM_COMMAND_SYMBOLS] = {
- 0x00000000, 0x00000000, 0x00000000, 0x00000007, 0x00000017, 0x00000027,
- 0x00000037, 0x00000047, 0x00000057, 0x00000067, 0x00000077, 0x00000770,
- 0x00000b87, 0x00001387, 0x00001b87, 0x00002387, 0x00002b87, 0x00003387,
- 0x00003b87, 0x00000397, 0x00000b97, 0x00001397, 0x00001b97, 0x00002397,
- 0x00002b97, 0x00003397, 0x00003b97, 0x000003a7, 0x00000ba7, 0x000013a7,
- 0x00001ba7, 0x000023a7, 0x00002ba7, 0x000033a7, 0x00003ba7, 0x000003b7,
- 0x00000bb7, 0x000013b7, 0x00001bb7, 0x000023b7, 0x00002bb7, 0x000033b7,
- 0x00003bb7, 0x000003c7, 0x00000bc7, 0x000013c7, 0x00001bc7, 0x000023c7,
- 0x00002bc7, 0x000033c7, 0x00003bc7, 0x000003d7, 0x00000bd7, 0x000013d7,
- 0x00001bd7, 0x000023d7, 0x00002bd7, 0x000033d7, 0x00003bd7, 0x000003e7,
- 0x00000be7, 0x000013e7, 0x00001be7, 0x000023e7, 0x00002be7, 0x000033e7,
- 0x00003be7, 0x000003f7, 0x00000bf7, 0x000013f7, 0x00001bf7, 0x000023f7,
- 0x00002bf7, 0x000033f7, 0x00003bf7, 0x0001c387, 0x0005c387, 0x0009c387,
- 0x000dc387, 0x0011c387, 0x0015c387, 0x0019c387, 0x001dc387, 0x0001cb87,
- 0x0005cb87, 0x0009cb87, 0x000dcb87, 0x0011cb87, 0x0015cb87, 0x0019cb87,
- 0x001dcb87, 0x0001d387, 0x0005d387, 0x0009d387, 0x000dd387, 0x0011d387,
- 0x0015d387, 0x0019d387, 0x001dd387, 0x0001db87, 0x0005db87, 0x0009db87,
- 0x000ddb87, 0x0011db87, 0x0015db87, 0x0019db87, 0x001ddb87, 0x0001e387,
- 0x0005e387, 0x0009e387, 0x000de387, 0x0011e387, 0x0015e387, 0x0019e387,
- 0x001de387, 0x0001eb87, 0x0005eb87, 0x0009eb87, 0x000deb87, 0x0011eb87,
- 0x0015eb87, 0x0019eb87, 0x001deb87, 0x0001f387, 0x0005f387, 0x0009f387,
- 0x000df387, 0x0011f387, 0x0015f387, 0x0019f387, 0x001df387, 0x0001fb87,
- 0x0005fb87, 0x0009fb87, 0x000dfb87, 0x0011fb87, 0x0015fb87, 0x0019fb87,
- 0x001dfb87, 0x0001c397, 0x0005c397, 0x0009c397, 0x000dc397, 0x0011c397,
- 0x0015c397, 0x0019c397, 0x001dc397, 0x0001cb97, 0x0005cb97, 0x0009cb97,
- 0x000dcb97, 0x0011cb97, 0x0015cb97, 0x0019cb97, 0x001dcb97, 0x0001d397,
- 0x0005d397, 0x0009d397, 0x000dd397, 0x0011d397, 0x0015d397, 0x0019d397,
- 0x001dd397, 0x0001db97, 0x0005db97, 0x0009db97, 0x000ddb97, 0x0011db97,
- 0x0015db97, 0x0019db97, 0x001ddb97, 0x0001e397, 0x0005e397, 0x0009e397,
- 0x000de397, 0x0011e397, 0x0015e397, 0x0019e397, 0x001de397, 0x0001eb97,
- 0x0005eb97, 0x0009eb97, 0x000deb97, 0x0011eb97, 0x0015eb97, 0x0019eb97,
- 0x001deb97, 0x0001f397, 0x0005f397, 0x0009f397, 0x000df397, 0x0011f397,
- 0x0015f397, 0x0019f397, 0x001df397, 0x0001fb97, 0x0005fb97, 0x0009fb97,
- 0x000dfb97, 0x0011fb97, 0x0015fb97, 0x0019fb97, 0x001dfb97, 0x0001c3a7,
- 0x0005c3a7, 0x0009c3a7, 0x000dc3a7, 0x0011c3a7, 0x0015c3a7, 0x0019c3a7,
- 0x001dc3a7, 0x0001cba7, 0x0005cba7, 0x0009cba7, 0x000dcba7, 0x0011cba7,
- 0x0015cba7, 0x0019cba7, 0x001dcba7, 0x0001d3a7, 0x0005d3a7, 0x0009d3a7,
- 0x000dd3a7, 0x0011d3a7, 0x0015d3a7, 0x0019d3a7, 0x001dd3a7, 0x0001dba7,
- 0x0005dba7, 0x0009dba7, 0x000ddba7, 0x0011dba7, 0x0015dba7, 0x0019dba7,
- 0x001ddba7, 0x0001e3a7, 0x0005e3a7, 0x0009e3a7, 0x000de3a7, 0x0011e3a7,
- 0x0015e3a7, 0x0019e3a7, 0x001de3a7, 0x0001eba7, 0x0005eba7, 0x0009eba7,
- 0x000deba7, 0x0011eba7, 0x0015eba7, 0x0019eba7, 0x001deba7, 0x0001f3a7,
- 0x0005f3a7, 0x0009f3a7, 0x000df3a7, 0x0011f3a7, 0x0015f3a7, 0x0019f3a7,
- 0x001df3a7, 0x0001fba7, 0x0005fba7, 0x0009fba7, 0x000dfba7, 0x0011fba7,
- 0x0015fba7, 0x0019fba7, 0x001dfba7, 0x0001c3b7, 0x0005c3b7, 0x0009c3b7,
- 0x000dc3b7, 0x0011c3b7, 0x0015c3b7, 0x0019c3b7, 0x001dc3b7, 0x0001cbb7,
- 0x0005cbb7, 0x0009cbb7, 0x000dcbb7, 0x0011cbb7, 0x0015cbb7, 0x0019cbb7,
- 0x001dcbb7, 0x0001d3b7, 0x0005d3b7, 0x0009d3b7, 0x000dd3b7, 0x0011d3b7,
- 0x0015d3b7, 0x0019d3b7, 0x001dd3b7, 0x0001dbb7, 0x0005dbb7, 0x0009dbb7,
- 0x000ddbb7, 0x0011dbb7, 0x0015dbb7, 0x0019dbb7, 0x001ddbb7, 0x0001e3b7,
- 0x0005e3b7, 0x0009e3b7, 0x000de3b7, 0x0011e3b7, 0x0015e3b7, 0x0019e3b7,
- 0x001de3b7, 0x0001ebb7, 0x0005ebb7, 0x0009ebb7, 0x000debb7, 0x0011ebb7,
- 0x0015ebb7, 0x0019ebb7, 0x001debb7, 0x0001f3b7, 0x0005f3b7, 0x0009f3b7,
- 0x000df3b7, 0x0011f3b7, 0x0015f3b7, 0x0019f3b7, 0x001df3b7, 0x0001fbb7,
- 0x0005fbb7, 0x0009fbb7, 0x000dfbb7, 0x0011fbb7, 0x0015fbb7, 0x0019fbb7,
- 0x001dfbb7, 0x0001c3c7, 0x0005c3c7, 0x0009c3c7, 0x000dc3c7, 0x0011c3c7,
- 0x0015c3c7, 0x0019c3c7, 0x001dc3c7, 0x0001cbc7, 0x0005cbc7, 0x0009cbc7,
- 0x000dcbc7, 0x0011cbc7, 0x0015cbc7, 0x0019cbc7, 0x001dcbc7, 0x0001d3c7,
- 0x0005d3c7, 0x0009d3c7, 0x000dd3c7, 0x0011d3c7, 0x0015d3c7, 0x0019d3c7,
- 0x001dd3c7, 0x0001dbc7, 0x0005dbc7, 0x0009dbc7, 0x000ddbc7, 0x0011dbc7,
- 0x0015dbc7, 0x0019dbc7, 0x001ddbc7, 0x0001e3c7, 0x0005e3c7, 0x0009e3c7,
- 0x000de3c7, 0x0011e3c7, 0x0015e3c7, 0x0019e3c7, 0x001de3c7, 0x0001ebc7,
- 0x0005ebc7, 0x0009ebc7, 0x000debc7, 0x0011ebc7, 0x0015ebc7, 0x0019ebc7,
- 0x001debc7, 0x0001f3c7, 0x0005f3c7, 0x0009f3c7, 0x000df3c7, 0x0011f3c7,
- 0x0015f3c7, 0x0019f3c7, 0x001df3c7, 0x0001fbc7, 0x0005fbc7, 0x0009fbc7,
- 0x000dfbc7, 0x0011fbc7, 0x0015fbc7, 0x0019fbc7, 0x001dfbc7, 0x0001c3d7,
- 0x0005c3d7, 0x0009c3d7, 0x000dc3d7, 0x0011c3d7, 0x0015c3d7, 0x0019c3d7,
- 0x001dc3d7, 0x0001cbd7, 0x0005cbd7, 0x0009cbd7, 0x000dcbd7, 0x0011cbd7,
- 0x0015cbd7, 0x0019cbd7, 0x001dcbd7, 0x0001d3d7, 0x0005d3d7, 0x0009d3d7,
- 0x000dd3d7, 0x0011d3d7, 0x0015d3d7, 0x0019d3d7, 0x001dd3d7, 0x0001dbd7,
- 0x0005dbd7, 0x0009dbd7, 0x000ddbd7, 0x0011dbd7, 0x0015dbd7, 0x0019dbd7,
- 0x001ddbd7, 0x0001e3d7, 0x0005e3d7, 0x0009e3d7, 0x000de3d7, 0x0011e3d7,
- 0x0015e3d7, 0x0019e3d7, 0x001de3d7, 0x0001ebd7, 0x0005ebd7, 0x0009ebd7,
- 0x000debd7, 0x0011ebd7, 0x0015ebd7, 0x0019ebd7, 0x001debd7, 0x0001f3d7,
- 0x0005f3d7, 0x0009f3d7, 0x000df3d7, 0x0011f3d7, 0x0015f3d7, 0x0019f3d7,
- 0x001df3d7, 0x0001fbd7, 0x0005fbd7, 0x0009fbd7, 0x000dfbd7, 0x0011fbd7,
- 0x0015fbd7, 0x0019fbd7, 0x001dfbd7, 0x0001c3e7, 0x0005c3e7, 0x0009c3e7,
- 0x000dc3e7, 0x0011c3e7, 0x0015c3e7, 0x0019c3e7, 0x001dc3e7, 0x0001cbe7,
- 0x0005cbe7, 0x0009cbe7, 0x000dcbe7, 0x0011cbe7, 0x0015cbe7, 0x0019cbe7,
- 0x001dcbe7, 0x0001d3e7, 0x0005d3e7, 0x0009d3e7, 0x000dd3e7, 0x0011d3e7,
- 0x0015d3e7, 0x0019d3e7, 0x001dd3e7, 0x0001dbe7, 0x0005dbe7, 0x0009dbe7,
- 0x000ddbe7, 0x0011dbe7, 0x0015dbe7, 0x0019dbe7, 0x001ddbe7, 0x0001e3e7,
- 0x0005e3e7, 0x0009e3e7, 0x000de3e7, 0x0011e3e7, 0x0015e3e7, 0x0019e3e7,
- 0x001de3e7, 0x0001ebe7, 0x0005ebe7, 0x0009ebe7, 0x000debe7, 0x0011ebe7,
- 0x0015ebe7, 0x0019ebe7, 0x001debe7, 0x0001f3e7, 0x0005f3e7, 0x0009f3e7,
- 0x000df3e7, 0x0011f3e7, 0x0015f3e7, 0x0019f3e7, 0x001df3e7, 0x0001fbe7,
- 0x0005fbe7, 0x0009fbe7, 0x000dfbe7, 0x0011fbe7, 0x0015fbe7, 0x0019fbe7,
- 0x001dfbe7, 0x0001c3f7, 0x0005c3f7, 0x0009c3f7, 0x000dc3f7, 0x0011c3f7,
- 0x0015c3f7, 0x0019c3f7, 0x001dc3f7, 0x0001cbf7, 0x0005cbf7, 0x0009cbf7,
- 0x000dcbf7, 0x0011cbf7, 0x0015cbf7, 0x0019cbf7, 0x001dcbf7, 0x0001d3f7,
- 0x0005d3f7, 0x0009d3f7, 0x000dd3f7, 0x0011d3f7, 0x0015d3f7, 0x0019d3f7,
- 0x001dd3f7, 0x0001dbf7, 0x0005dbf7, 0x0009dbf7, 0x000ddbf7, 0x0011dbf7,
- 0x0015dbf7, 0x0019dbf7, 0x001ddbf7, 0x0001e3f7, 0x0005e3f7, 0x0009e3f7,
- 0x000de3f7, 0x0011e3f7, 0x0015e3f7, 0x0019e3f7, 0x001de3f7, 0x0001ebf7,
- 0x0005ebf7, 0x0009ebf7, 0x000debf7, 0x0011ebf7, 0x0015ebf7, 0x0019ebf7,
- 0x001debf7, 0x0001f3f7, 0x0005f3f7, 0x0009f3f7, 0x000df3f7, 0x0011f3f7,
- 0x0015f3f7, 0x0019f3f7, 0x001df3f7, 0x0001fbf7, 0x0005fbf7, 0x0009fbf7,
- 0x000dfbf7, 0x0011fbf7, 0x0015fbf7, 0x0019fbf7, 0x001dfbf7, 0x00e1c387,
- 0x02e1c387, 0x04e1c387, 0x06e1c387, 0x08e1c387, 0x0ae1c387, 0x0ce1c387,
- 0x0ee1c387, 0x00e5c387, 0x02e5c387, 0x04e5c387, 0x06e5c387, 0x08e5c387,
- 0x0ae5c387, 0x0ce5c387, 0x0ee5c387, 0x00e9c387, 0x02e9c387, 0x04e9c387,
- 0x06e9c387, 0x08e9c387, 0x0ae9c387, 0x0ce9c387, 0x0ee9c387, 0x00edc387,
- 0x02edc387, 0x04edc387, 0x06edc387, 0x08edc387, 0x0aedc387, 0x0cedc387,
- 0x0eedc387, 0x00f1c387, 0x02f1c387, 0x04f1c387, 0x06f1c387, 0x08f1c387,
- 0x0af1c387, 0x0cf1c387, 0x0ef1c387, 0x00f5c387, 0x02f5c387, 0x04f5c387,
- 0x06f5c387, 0x08f5c387, 0x0af5c387, 0x0cf5c387, 0x0ef5c387, 0x00f9c387,
- 0x02f9c387, 0x04f9c387, 0x06f9c387, 0x08f9c387, 0x0af9c387, 0x0cf9c387,
- 0x0ef9c387, 0x00fdc387, 0x02fdc387, 0x04fdc387, 0x06fdc387, 0x08fdc387,
- 0x0afdc387, 0x0cfdc387, 0x0efdc387, 0x00e1cb87, 0x02e1cb87, 0x04e1cb87,
- 0x06e1cb87, 0x08e1cb87, 0x0ae1cb87, 0x0ce1cb87, 0x0ee1cb87, 0x00e5cb87,
- 0x02e5cb87, 0x04e5cb87, 0x06e5cb87, 0x08e5cb87, 0x0ae5cb87, 0x0ce5cb87,
- 0x0ee5cb87, 0x00e9cb87, 0x02e9cb87, 0x04e9cb87, 0x06e9cb87, 0x08e9cb87,
- 0x0ae9cb87, 0x0ce9cb87, 0x0ee9cb87, 0x00edcb87, 0x02edcb87, 0x04edcb87,
- 0x06edcb87, 0x08edcb87, 0x0aedcb87, 0x0cedcb87, 0x0eedcb87, 0x00f1cb87,
- 0x02f1cb87, 0x04f1cb87, 0x06f1cb87, 0x08f1cb87, 0x0af1cb87, 0x0cf1cb87,
- 0x0ef1cb87, 0x00f5cb87, 0x02f5cb87, 0x04f5cb87, 0x06f5cb87, 0x08f5cb87,
- 0x0af5cb87, 0x0cf5cb87, 0x0ef5cb87, 0x00f9cb87, 0x02f9cb87, 0x04f9cb87,
- 0x06f9cb87, 0x08f9cb87,
-};
-
-static const uint32_t kZeroRepsDepth[BROTLI_NUM_COMMAND_SYMBOLS] = {
- 0, 4, 8, 7, 7, 7, 7, 7, 7, 7, 7, 11, 14, 14, 14, 14,
- 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
- 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
- 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
- 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 21, 21, 21, 21, 21,
- 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
- 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
- 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
- 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
- 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
- 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
- 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
- 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
- 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
- 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
- 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
- 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
- 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
- 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
- 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
- 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
- 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
- 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
- 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
- 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
- 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
- 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
- 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
- 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
- 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
- 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
- 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
- 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
- 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
- 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
- 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
- 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 28, 28, 28, 28, 28,
- 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
- 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
- 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
- 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
- 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
- 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
- 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
-};
-
-static const uint64_t kNonZeroRepsBits[BROTLI_NUM_COMMAND_SYMBOLS] = {
- 0x0000000b, 0x0000001b, 0x0000002b, 0x0000003b, 0x000002cb, 0x000006cb,
- 0x00000acb, 0x00000ecb, 0x000002db, 0x000006db, 0x00000adb, 0x00000edb,
- 0x000002eb, 0x000006eb, 0x00000aeb, 0x00000eeb, 0x000002fb, 0x000006fb,
- 0x00000afb, 0x00000efb, 0x0000b2cb, 0x0001b2cb, 0x0002b2cb, 0x0003b2cb,
- 0x0000b6cb, 0x0001b6cb, 0x0002b6cb, 0x0003b6cb, 0x0000bacb, 0x0001bacb,
- 0x0002bacb, 0x0003bacb, 0x0000becb, 0x0001becb, 0x0002becb, 0x0003becb,
- 0x0000b2db, 0x0001b2db, 0x0002b2db, 0x0003b2db, 0x0000b6db, 0x0001b6db,
- 0x0002b6db, 0x0003b6db, 0x0000badb, 0x0001badb, 0x0002badb, 0x0003badb,
- 0x0000bedb, 0x0001bedb, 0x0002bedb, 0x0003bedb, 0x0000b2eb, 0x0001b2eb,
- 0x0002b2eb, 0x0003b2eb, 0x0000b6eb, 0x0001b6eb, 0x0002b6eb, 0x0003b6eb,
- 0x0000baeb, 0x0001baeb, 0x0002baeb, 0x0003baeb, 0x0000beeb, 0x0001beeb,
- 0x0002beeb, 0x0003beeb, 0x0000b2fb, 0x0001b2fb, 0x0002b2fb, 0x0003b2fb,
- 0x0000b6fb, 0x0001b6fb, 0x0002b6fb, 0x0003b6fb, 0x0000bafb, 0x0001bafb,
- 0x0002bafb, 0x0003bafb, 0x0000befb, 0x0001befb, 0x0002befb, 0x0003befb,
- 0x002cb2cb, 0x006cb2cb, 0x00acb2cb, 0x00ecb2cb, 0x002db2cb, 0x006db2cb,
- 0x00adb2cb, 0x00edb2cb, 0x002eb2cb, 0x006eb2cb, 0x00aeb2cb, 0x00eeb2cb,
- 0x002fb2cb, 0x006fb2cb, 0x00afb2cb, 0x00efb2cb, 0x002cb6cb, 0x006cb6cb,
- 0x00acb6cb, 0x00ecb6cb, 0x002db6cb, 0x006db6cb, 0x00adb6cb, 0x00edb6cb,
- 0x002eb6cb, 0x006eb6cb, 0x00aeb6cb, 0x00eeb6cb, 0x002fb6cb, 0x006fb6cb,
- 0x00afb6cb, 0x00efb6cb, 0x002cbacb, 0x006cbacb, 0x00acbacb, 0x00ecbacb,
- 0x002dbacb, 0x006dbacb, 0x00adbacb, 0x00edbacb, 0x002ebacb, 0x006ebacb,
- 0x00aebacb, 0x00eebacb, 0x002fbacb, 0x006fbacb, 0x00afbacb, 0x00efbacb,
- 0x002cbecb, 0x006cbecb, 0x00acbecb, 0x00ecbecb, 0x002dbecb, 0x006dbecb,
- 0x00adbecb, 0x00edbecb, 0x002ebecb, 0x006ebecb, 0x00aebecb, 0x00eebecb,
- 0x002fbecb, 0x006fbecb, 0x00afbecb, 0x00efbecb, 0x002cb2db, 0x006cb2db,
- 0x00acb2db, 0x00ecb2db, 0x002db2db, 0x006db2db, 0x00adb2db, 0x00edb2db,
- 0x002eb2db, 0x006eb2db, 0x00aeb2db, 0x00eeb2db, 0x002fb2db, 0x006fb2db,
- 0x00afb2db, 0x00efb2db, 0x002cb6db, 0x006cb6db, 0x00acb6db, 0x00ecb6db,
- 0x002db6db, 0x006db6db, 0x00adb6db, 0x00edb6db, 0x002eb6db, 0x006eb6db,
- 0x00aeb6db, 0x00eeb6db, 0x002fb6db, 0x006fb6db, 0x00afb6db, 0x00efb6db,
- 0x002cbadb, 0x006cbadb, 0x00acbadb, 0x00ecbadb, 0x002dbadb, 0x006dbadb,
- 0x00adbadb, 0x00edbadb, 0x002ebadb, 0x006ebadb, 0x00aebadb, 0x00eebadb,
- 0x002fbadb, 0x006fbadb, 0x00afbadb, 0x00efbadb, 0x002cbedb, 0x006cbedb,
- 0x00acbedb, 0x00ecbedb, 0x002dbedb, 0x006dbedb, 0x00adbedb, 0x00edbedb,
- 0x002ebedb, 0x006ebedb, 0x00aebedb, 0x00eebedb, 0x002fbedb, 0x006fbedb,
- 0x00afbedb, 0x00efbedb, 0x002cb2eb, 0x006cb2eb, 0x00acb2eb, 0x00ecb2eb,
- 0x002db2eb, 0x006db2eb, 0x00adb2eb, 0x00edb2eb, 0x002eb2eb, 0x006eb2eb,
- 0x00aeb2eb, 0x00eeb2eb, 0x002fb2eb, 0x006fb2eb, 0x00afb2eb, 0x00efb2eb,
- 0x002cb6eb, 0x006cb6eb, 0x00acb6eb, 0x00ecb6eb, 0x002db6eb, 0x006db6eb,
- 0x00adb6eb, 0x00edb6eb, 0x002eb6eb, 0x006eb6eb, 0x00aeb6eb, 0x00eeb6eb,
- 0x002fb6eb, 0x006fb6eb, 0x00afb6eb, 0x00efb6eb, 0x002cbaeb, 0x006cbaeb,
- 0x00acbaeb, 0x00ecbaeb, 0x002dbaeb, 0x006dbaeb, 0x00adbaeb, 0x00edbaeb,
- 0x002ebaeb, 0x006ebaeb, 0x00aebaeb, 0x00eebaeb, 0x002fbaeb, 0x006fbaeb,
- 0x00afbaeb, 0x00efbaeb, 0x002cbeeb, 0x006cbeeb, 0x00acbeeb, 0x00ecbeeb,
- 0x002dbeeb, 0x006dbeeb, 0x00adbeeb, 0x00edbeeb, 0x002ebeeb, 0x006ebeeb,
- 0x00aebeeb, 0x00eebeeb, 0x002fbeeb, 0x006fbeeb, 0x00afbeeb, 0x00efbeeb,
- 0x002cb2fb, 0x006cb2fb, 0x00acb2fb, 0x00ecb2fb, 0x002db2fb, 0x006db2fb,
- 0x00adb2fb, 0x00edb2fb, 0x002eb2fb, 0x006eb2fb, 0x00aeb2fb, 0x00eeb2fb,
- 0x002fb2fb, 0x006fb2fb, 0x00afb2fb, 0x00efb2fb, 0x002cb6fb, 0x006cb6fb,
- 0x00acb6fb, 0x00ecb6fb, 0x002db6fb, 0x006db6fb, 0x00adb6fb, 0x00edb6fb,
- 0x002eb6fb, 0x006eb6fb, 0x00aeb6fb, 0x00eeb6fb, 0x002fb6fb, 0x006fb6fb,
- 0x00afb6fb, 0x00efb6fb, 0x002cbafb, 0x006cbafb, 0x00acbafb, 0x00ecbafb,
- 0x002dbafb, 0x006dbafb, 0x00adbafb, 0x00edbafb, 0x002ebafb, 0x006ebafb,
- 0x00aebafb, 0x00eebafb, 0x002fbafb, 0x006fbafb, 0x00afbafb, 0x00efbafb,
- 0x002cbefb, 0x006cbefb, 0x00acbefb, 0x00ecbefb, 0x002dbefb, 0x006dbefb,
- 0x00adbefb, 0x00edbefb, 0x002ebefb, 0x006ebefb, 0x00aebefb, 0x00eebefb,
- 0x002fbefb, 0x006fbefb, 0x00afbefb, 0x00efbefb, 0x0b2cb2cb, 0x1b2cb2cb,
- 0x2b2cb2cb, 0x3b2cb2cb, 0x0b6cb2cb, 0x1b6cb2cb, 0x2b6cb2cb, 0x3b6cb2cb,
- 0x0bacb2cb, 0x1bacb2cb, 0x2bacb2cb, 0x3bacb2cb, 0x0becb2cb, 0x1becb2cb,
- 0x2becb2cb, 0x3becb2cb, 0x0b2db2cb, 0x1b2db2cb, 0x2b2db2cb, 0x3b2db2cb,
- 0x0b6db2cb, 0x1b6db2cb, 0x2b6db2cb, 0x3b6db2cb, 0x0badb2cb, 0x1badb2cb,
- 0x2badb2cb, 0x3badb2cb, 0x0bedb2cb, 0x1bedb2cb, 0x2bedb2cb, 0x3bedb2cb,
- 0x0b2eb2cb, 0x1b2eb2cb, 0x2b2eb2cb, 0x3b2eb2cb, 0x0b6eb2cb, 0x1b6eb2cb,
- 0x2b6eb2cb, 0x3b6eb2cb, 0x0baeb2cb, 0x1baeb2cb, 0x2baeb2cb, 0x3baeb2cb,
- 0x0beeb2cb, 0x1beeb2cb, 0x2beeb2cb, 0x3beeb2cb, 0x0b2fb2cb, 0x1b2fb2cb,
- 0x2b2fb2cb, 0x3b2fb2cb, 0x0b6fb2cb, 0x1b6fb2cb, 0x2b6fb2cb, 0x3b6fb2cb,
- 0x0bafb2cb, 0x1bafb2cb, 0x2bafb2cb, 0x3bafb2cb, 0x0befb2cb, 0x1befb2cb,
- 0x2befb2cb, 0x3befb2cb, 0x0b2cb6cb, 0x1b2cb6cb, 0x2b2cb6cb, 0x3b2cb6cb,
- 0x0b6cb6cb, 0x1b6cb6cb, 0x2b6cb6cb, 0x3b6cb6cb, 0x0bacb6cb, 0x1bacb6cb,
- 0x2bacb6cb, 0x3bacb6cb, 0x0becb6cb, 0x1becb6cb, 0x2becb6cb, 0x3becb6cb,
- 0x0b2db6cb, 0x1b2db6cb, 0x2b2db6cb, 0x3b2db6cb, 0x0b6db6cb, 0x1b6db6cb,
- 0x2b6db6cb, 0x3b6db6cb, 0x0badb6cb, 0x1badb6cb, 0x2badb6cb, 0x3badb6cb,
- 0x0bedb6cb, 0x1bedb6cb, 0x2bedb6cb, 0x3bedb6cb, 0x0b2eb6cb, 0x1b2eb6cb,
- 0x2b2eb6cb, 0x3b2eb6cb, 0x0b6eb6cb, 0x1b6eb6cb, 0x2b6eb6cb, 0x3b6eb6cb,
- 0x0baeb6cb, 0x1baeb6cb, 0x2baeb6cb, 0x3baeb6cb, 0x0beeb6cb, 0x1beeb6cb,
- 0x2beeb6cb, 0x3beeb6cb, 0x0b2fb6cb, 0x1b2fb6cb, 0x2b2fb6cb, 0x3b2fb6cb,
- 0x0b6fb6cb, 0x1b6fb6cb, 0x2b6fb6cb, 0x3b6fb6cb, 0x0bafb6cb, 0x1bafb6cb,
- 0x2bafb6cb, 0x3bafb6cb, 0x0befb6cb, 0x1befb6cb, 0x2befb6cb, 0x3befb6cb,
- 0x0b2cbacb, 0x1b2cbacb, 0x2b2cbacb, 0x3b2cbacb, 0x0b6cbacb, 0x1b6cbacb,
- 0x2b6cbacb, 0x3b6cbacb, 0x0bacbacb, 0x1bacbacb, 0x2bacbacb, 0x3bacbacb,
- 0x0becbacb, 0x1becbacb, 0x2becbacb, 0x3becbacb, 0x0b2dbacb, 0x1b2dbacb,
- 0x2b2dbacb, 0x3b2dbacb, 0x0b6dbacb, 0x1b6dbacb, 0x2b6dbacb, 0x3b6dbacb,
- 0x0badbacb, 0x1badbacb, 0x2badbacb, 0x3badbacb, 0x0bedbacb, 0x1bedbacb,
- 0x2bedbacb, 0x3bedbacb, 0x0b2ebacb, 0x1b2ebacb, 0x2b2ebacb, 0x3b2ebacb,
- 0x0b6ebacb, 0x1b6ebacb, 0x2b6ebacb, 0x3b6ebacb, 0x0baebacb, 0x1baebacb,
- 0x2baebacb, 0x3baebacb, 0x0beebacb, 0x1beebacb, 0x2beebacb, 0x3beebacb,
- 0x0b2fbacb, 0x1b2fbacb, 0x2b2fbacb, 0x3b2fbacb, 0x0b6fbacb, 0x1b6fbacb,
- 0x2b6fbacb, 0x3b6fbacb, 0x0bafbacb, 0x1bafbacb, 0x2bafbacb, 0x3bafbacb,
- 0x0befbacb, 0x1befbacb, 0x2befbacb, 0x3befbacb, 0x0b2cbecb, 0x1b2cbecb,
- 0x2b2cbecb, 0x3b2cbecb, 0x0b6cbecb, 0x1b6cbecb, 0x2b6cbecb, 0x3b6cbecb,
- 0x0bacbecb, 0x1bacbecb, 0x2bacbecb, 0x3bacbecb, 0x0becbecb, 0x1becbecb,
- 0x2becbecb, 0x3becbecb, 0x0b2dbecb, 0x1b2dbecb, 0x2b2dbecb, 0x3b2dbecb,
- 0x0b6dbecb, 0x1b6dbecb, 0x2b6dbecb, 0x3b6dbecb, 0x0badbecb, 0x1badbecb,
- 0x2badbecb, 0x3badbecb, 0x0bedbecb, 0x1bedbecb, 0x2bedbecb, 0x3bedbecb,
- 0x0b2ebecb, 0x1b2ebecb, 0x2b2ebecb, 0x3b2ebecb, 0x0b6ebecb, 0x1b6ebecb,
- 0x2b6ebecb, 0x3b6ebecb, 0x0baebecb, 0x1baebecb, 0x2baebecb, 0x3baebecb,
- 0x0beebecb, 0x1beebecb, 0x2beebecb, 0x3beebecb, 0x0b2fbecb, 0x1b2fbecb,
- 0x2b2fbecb, 0x3b2fbecb, 0x0b6fbecb, 0x1b6fbecb, 0x2b6fbecb, 0x3b6fbecb,
- 0x0bafbecb, 0x1bafbecb, 0x2bafbecb, 0x3bafbecb, 0x0befbecb, 0x1befbecb,
- 0x2befbecb, 0x3befbecb, 0x0b2cb2db, 0x1b2cb2db, 0x2b2cb2db, 0x3b2cb2db,
- 0x0b6cb2db, 0x1b6cb2db, 0x2b6cb2db, 0x3b6cb2db, 0x0bacb2db, 0x1bacb2db,
- 0x2bacb2db, 0x3bacb2db, 0x0becb2db, 0x1becb2db, 0x2becb2db, 0x3becb2db,
- 0x0b2db2db, 0x1b2db2db, 0x2b2db2db, 0x3b2db2db, 0x0b6db2db, 0x1b6db2db,
- 0x2b6db2db, 0x3b6db2db, 0x0badb2db, 0x1badb2db, 0x2badb2db, 0x3badb2db,
- 0x0bedb2db, 0x1bedb2db, 0x2bedb2db, 0x3bedb2db, 0x0b2eb2db, 0x1b2eb2db,
- 0x2b2eb2db, 0x3b2eb2db, 0x0b6eb2db, 0x1b6eb2db, 0x2b6eb2db, 0x3b6eb2db,
- 0x0baeb2db, 0x1baeb2db, 0x2baeb2db, 0x3baeb2db, 0x0beeb2db, 0x1beeb2db,
- 0x2beeb2db, 0x3beeb2db, 0x0b2fb2db, 0x1b2fb2db, 0x2b2fb2db, 0x3b2fb2db,
- 0x0b6fb2db, 0x1b6fb2db, 0x2b6fb2db, 0x3b6fb2db, 0x0bafb2db, 0x1bafb2db,
- 0x2bafb2db, 0x3bafb2db, 0x0befb2db, 0x1befb2db, 0x2befb2db, 0x3befb2db,
- 0x0b2cb6db, 0x1b2cb6db, 0x2b2cb6db, 0x3b2cb6db, 0x0b6cb6db, 0x1b6cb6db,
- 0x2b6cb6db, 0x3b6cb6db, 0x0bacb6db, 0x1bacb6db, 0x2bacb6db, 0x3bacb6db,
- 0x0becb6db, 0x1becb6db, 0x2becb6db, 0x3becb6db, 0x0b2db6db, 0x1b2db6db,
- 0x2b2db6db, 0x3b2db6db, 0x0b6db6db, 0x1b6db6db, 0x2b6db6db, 0x3b6db6db,
- 0x0badb6db, 0x1badb6db, 0x2badb6db, 0x3badb6db, 0x0bedb6db, 0x1bedb6db,
- 0x2bedb6db, 0x3bedb6db, 0x0b2eb6db, 0x1b2eb6db, 0x2b2eb6db, 0x3b2eb6db,
- 0x0b6eb6db, 0x1b6eb6db, 0x2b6eb6db, 0x3b6eb6db, 0x0baeb6db, 0x1baeb6db,
- 0x2baeb6db, 0x3baeb6db,
-};
-
-static const uint32_t kNonZeroRepsDepth[BROTLI_NUM_COMMAND_SYMBOLS] = {
- 6, 6, 6, 6, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
- 12, 12, 12, 12, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
- 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
- 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
- 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
- 18, 18, 18, 18, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
- 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
- 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
- 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
- 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
- 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
- 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
- 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
- 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
- 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
- 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
- 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
- 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
- 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
- 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
- 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
- 24, 24, 24, 24, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,
- 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,
-};
-
-static const uint16_t kStaticCommandCodeBits[BROTLI_NUM_COMMAND_SYMBOLS] = {
- 0, 256, 128, 384, 64, 320, 192, 448,
- 32, 288, 160, 416, 96, 352, 224, 480,
- 16, 272, 144, 400, 80, 336, 208, 464,
- 48, 304, 176, 432, 112, 368, 240, 496,
- 8, 264, 136, 392, 72, 328, 200, 456,
- 40, 296, 168, 424, 104, 360, 232, 488,
- 24, 280, 152, 408, 88, 344, 216, 472,
- 56, 312, 184, 440, 120, 376, 248, 504,
- 4, 260, 132, 388, 68, 324, 196, 452,
- 36, 292, 164, 420, 100, 356, 228, 484,
- 20, 276, 148, 404, 84, 340, 212, 468,
- 52, 308, 180, 436, 116, 372, 244, 500,
- 12, 268, 140, 396, 76, 332, 204, 460,
- 44, 300, 172, 428, 108, 364, 236, 492,
- 28, 284, 156, 412, 92, 348, 220, 476,
- 60, 316, 188, 444, 124, 380, 252, 508,
- 2, 258, 130, 386, 66, 322, 194, 450,
- 34, 290, 162, 418, 98, 354, 226, 482,
- 18, 274, 146, 402, 82, 338, 210, 466,
- 50, 306, 178, 434, 114, 370, 242, 498,
- 10, 266, 138, 394, 74, 330, 202, 458,
- 42, 298, 170, 426, 106, 362, 234, 490,
- 26, 282, 154, 410, 90, 346, 218, 474,
- 58, 314, 186, 442, 122, 378, 250, 506,
- 6, 262, 134, 390, 70, 326, 198, 454,
- 38, 294, 166, 422, 102, 358, 230, 486,
- 22, 278, 150, 406, 86, 342, 214, 470,
- 54, 310, 182, 438, 118, 374, 246, 502,
- 14, 270, 142, 398, 78, 334, 206, 462,
- 46, 302, 174, 430, 110, 366, 238, 494,
- 30, 286, 158, 414, 94, 350, 222, 478,
- 62, 318, 190, 446, 126, 382, 254, 510,
- 1, 257, 129, 385, 65, 321, 193, 449,
- 33, 289, 161, 417, 97, 353, 225, 481,
- 17, 273, 145, 401, 81, 337, 209, 465,
- 49, 305, 177, 433, 113, 369, 241, 497,
- 9, 265, 137, 393, 73, 329, 201, 457,
- 41, 297, 169, 425, 105, 361, 233, 489,
- 25, 281, 153, 409, 89, 345, 217, 473,
- 57, 313, 185, 441, 121, 377, 249, 505,
- 5, 261, 133, 389, 69, 325, 197, 453,
- 37, 293, 165, 421, 101, 357, 229, 485,
- 21, 277, 149, 405, 85, 341, 213, 469,
- 53, 309, 181, 437, 117, 373, 245, 501,
- 13, 269, 141, 397, 77, 333, 205, 461,
- 45, 301, 173, 429, 109, 365, 237, 493,
- 29, 285, 157, 413, 93, 349, 221, 477,
- 61, 317, 189, 445, 125, 381, 253, 509,
- 3, 259, 131, 387, 67, 323, 195, 451,
- 35, 291, 163, 419, 99, 355, 227, 483,
- 19, 275, 147, 403, 83, 339, 211, 467,
- 51, 307, 179, 435, 115, 371, 243, 499,
- 11, 267, 139, 395, 75, 331, 203, 459,
- 43, 299, 171, 427, 107, 363, 235, 491,
- 27, 283, 155, 411, 91, 347, 219, 475,
- 59, 315, 187, 443, 123, 379, 251, 507,
- 7, 1031, 519, 1543, 263, 1287, 775, 1799,
- 135, 1159, 647, 1671, 391, 1415, 903, 1927,
- 71, 1095, 583, 1607, 327, 1351, 839, 1863,
- 199, 1223, 711, 1735, 455, 1479, 967, 1991,
- 39, 1063, 551, 1575, 295, 1319, 807, 1831,
- 167, 1191, 679, 1703, 423, 1447, 935, 1959,
- 103, 1127, 615, 1639, 359, 1383, 871, 1895,
- 231, 1255, 743, 1767, 487, 1511, 999, 2023,
- 23, 1047, 535, 1559, 279, 1303, 791, 1815,
- 151, 1175, 663, 1687, 407, 1431, 919, 1943,
- 87, 1111, 599, 1623, 343, 1367, 855, 1879,
- 215, 1239, 727, 1751, 471, 1495, 983, 2007,
- 55, 1079, 567, 1591, 311, 1335, 823, 1847,
- 183, 1207, 695, 1719, 439, 1463, 951, 1975,
- 119, 1143, 631, 1655, 375, 1399, 887, 1911,
- 247, 1271, 759, 1783, 503, 1527, 1015, 2039,
- 15, 1039, 527, 1551, 271, 1295, 783, 1807,
- 143, 1167, 655, 1679, 399, 1423, 911, 1935,
- 79, 1103, 591, 1615, 335, 1359, 847, 1871,
- 207, 1231, 719, 1743, 463, 1487, 975, 1999,
- 47, 1071, 559, 1583, 303, 1327, 815, 1839,
- 175, 1199, 687, 1711, 431, 1455, 943, 1967,
- 111, 1135, 623, 1647, 367, 1391, 879, 1903,
- 239, 1263, 751, 1775, 495, 1519, 1007, 2031,
- 31, 1055, 543, 1567, 287, 1311, 799, 1823,
- 159, 1183, 671, 1695, 415, 1439, 927, 1951,
- 95, 1119, 607, 1631, 351, 1375, 863, 1887,
- 223, 1247, 735, 1759, 479, 1503, 991, 2015,
- 63, 1087, 575, 1599, 319, 1343, 831, 1855,
- 191, 1215, 703, 1727, 447, 1471, 959, 1983,
- 127, 1151, 639, 1663, 383, 1407, 895, 1919,
- 255, 1279, 767, 1791, 511, 1535, 1023, 2047,
-};
-
-static BROTLI_INLINE void StoreStaticCommandHuffmanTree(
- size_t* storage_ix, uint8_t* storage) {
- BrotliWriteBits(
- 56, BROTLI_MAKE_UINT64_T(0x926244U, 0x16307003U), storage_ix, storage);
- BrotliWriteBits(3, 0x00000000U, storage_ix, storage);
-}
-
-static const uint16_t kStaticDistanceCodeBits[64] = {
- 0, 32, 16, 48, 8, 40, 24, 56, 4, 36, 20, 52, 12, 44, 28, 60,
- 2, 34, 18, 50, 10, 42, 26, 58, 6, 38, 22, 54, 14, 46, 30, 62,
- 1, 33, 17, 49, 9, 41, 25, 57, 5, 37, 21, 53, 13, 45, 29, 61,
- 3, 35, 19, 51, 11, 43, 27, 59, 7, 39, 23, 55, 15, 47, 31, 63,
-};
-
-static BROTLI_INLINE void StoreStaticDistanceHuffmanTree(
- size_t* storage_ix, uint8_t* storage) {
- BrotliWriteBits(28, 0x0369DC03u, storage_ix, storage);
-}
-
-#if defined(__cplusplus) || defined(c_plusplus)
-} /* extern "C" */
-#endif
-
-#endif /* BROTLI_ENC_ENTROPY_ENCODE_STATIC_H_ */
diff --git a/BaseTools/Source/C/BrotliCompress/enc/fast_log.h b/BaseTools/Source/C/BrotliCompress/enc/fast_log.h
deleted file mode 100644
index dabc45ee96b8..000000000000
--- a/BaseTools/Source/C/BrotliCompress/enc/fast_log.h
+++ /dev/null
@@ -1,147 +0,0 @@
-/* Copyright 2013 Google Inc. All Rights Reserved.
-
- Distributed under MIT license.
- See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
-*/
-
-/* Utilities for fast computation of logarithms. */
-
-#ifndef BROTLI_ENC_FAST_LOG_H_
-#define BROTLI_ENC_FAST_LOG_H_
-
-#include <math.h>
-
-#include "../common/platform.h"
-#include <brotli/types.h>
-
-#if defined(__cplusplus) || defined(c_plusplus)
-extern "C" {
-#endif
-
-static BROTLI_INLINE uint32_t Log2FloorNonZero(size_t n) {
- /* TODO: generalize and move to platform.h */
-#if BROTLI_GNUC_HAS_BUILTIN(__builtin_clz, 3, 4, 0) || \
- BROTLI_INTEL_VERSION_CHECK(16, 0, 0)
- return 31u ^ (uint32_t)__builtin_clz((uint32_t)n);
-#else
- uint32_t result = 0;
- while (n >>= 1) result++;
- return result;
-#endif
-}
-
-/* A lookup table for small values of log2(int) to be used in entropy
- computation.
-
- ", ".join(["%.16ff" % x for x in [0.0]+[log2(x) for x in range(1, 256)]]) */
-static const float kLog2Table[] = {
- 0.0000000000000000f, 0.0000000000000000f, 1.0000000000000000f,
- 1.5849625007211563f, 2.0000000000000000f, 2.3219280948873622f,
- 2.5849625007211561f, 2.8073549220576042f, 3.0000000000000000f,
- 3.1699250014423126f, 3.3219280948873626f, 3.4594316186372978f,
- 3.5849625007211565f, 3.7004397181410922f, 3.8073549220576037f,
- 3.9068905956085187f, 4.0000000000000000f, 4.0874628412503400f,
- 4.1699250014423122f, 4.2479275134435852f, 4.3219280948873626f,
- 4.3923174227787607f, 4.4594316186372973f, 4.5235619560570131f,
- 4.5849625007211570f, 4.6438561897747244f, 4.7004397181410926f,
- 4.7548875021634691f, 4.8073549220576037f, 4.8579809951275728f,
- 4.9068905956085187f, 4.9541963103868758f, 5.0000000000000000f,
- 5.0443941193584534f, 5.0874628412503400f, 5.1292830169449664f,
- 5.1699250014423122f, 5.2094533656289501f, 5.2479275134435852f,
- 5.2854022188622487f, 5.3219280948873626f, 5.3575520046180838f,
- 5.3923174227787607f, 5.4262647547020979f, 5.4594316186372973f,
- 5.4918530963296748f, 5.5235619560570131f, 5.5545888516776376f,
- 5.5849625007211570f, 5.6147098441152083f, 5.6438561897747244f,
- 5.6724253419714961f, 5.7004397181410926f, 5.7279204545631996f,
- 5.7548875021634691f, 5.7813597135246599f, 5.8073549220576046f,
- 5.8328900141647422f, 5.8579809951275719f, 5.8826430493618416f,
- 5.9068905956085187f, 5.9307373375628867f, 5.9541963103868758f,
- 5.9772799234999168f, 6.0000000000000000f, 6.0223678130284544f,
- 6.0443941193584534f, 6.0660891904577721f, 6.0874628412503400f,
- 6.1085244567781700f, 6.1292830169449672f, 6.1497471195046822f,
- 6.1699250014423122f, 6.1898245588800176f, 6.2094533656289510f,
- 6.2288186904958804f, 6.2479275134435861f, 6.2667865406949019f,
- 6.2854022188622487f, 6.3037807481771031f, 6.3219280948873617f,
- 6.3398500028846252f, 6.3575520046180847f, 6.3750394313469254f,
- 6.3923174227787598f, 6.4093909361377026f, 6.4262647547020979f,
- 6.4429434958487288f, 6.4594316186372982f, 6.4757334309663976f,
- 6.4918530963296748f, 6.5077946401986964f, 6.5235619560570131f,
- 6.5391588111080319f, 6.5545888516776376f, 6.5698556083309478f,
- 6.5849625007211561f, 6.5999128421871278f, 6.6147098441152092f,
- 6.6293566200796095f, 6.6438561897747253f, 6.6582114827517955f,
- 6.6724253419714952f, 6.6865005271832185f, 6.7004397181410917f,
- 6.7142455176661224f, 6.7279204545631988f, 6.7414669864011465f,
- 6.7548875021634691f, 6.7681843247769260f, 6.7813597135246599f,
- 6.7944158663501062f, 6.8073549220576037f, 6.8201789624151887f,
- 6.8328900141647422f, 6.8454900509443757f, 6.8579809951275719f,
- 6.8703647195834048f, 6.8826430493618416f, 6.8948177633079437f,
- 6.9068905956085187f, 6.9188632372745955f, 6.9307373375628867f,
- 6.9425145053392399f, 6.9541963103868758f, 6.9657842846620879f,
- 6.9772799234999168f, 6.9886846867721664f, 7.0000000000000000f,
- 7.0112272554232540f, 7.0223678130284544f, 7.0334230015374501f,
- 7.0443941193584534f, 7.0552824355011898f, 7.0660891904577721f,
- 7.0768155970508317f, 7.0874628412503400f, 7.0980320829605272f,
- 7.1085244567781700f, 7.1189410727235076f, 7.1292830169449664f,
- 7.1395513523987937f, 7.1497471195046822f, 7.1598713367783891f,
- 7.1699250014423130f, 7.1799090900149345f, 7.1898245588800176f,
- 7.1996723448363644f, 7.2094533656289492f, 7.2191685204621621f,
- 7.2288186904958804f, 7.2384047393250794f, 7.2479275134435861f,
- 7.2573878426926521f, 7.2667865406949019f, 7.2761244052742384f,
- 7.2854022188622487f, 7.2946207488916270f, 7.3037807481771031f,
- 7.3128829552843557f, 7.3219280948873617f, 7.3309168781146177f,
- 7.3398500028846243f, 7.3487281542310781f, 7.3575520046180847f,
- 7.3663222142458151f, 7.3750394313469254f, 7.3837042924740528f,
- 7.3923174227787607f, 7.4008794362821844f, 7.4093909361377026f,
- 7.4178525148858991f, 7.4262647547020979f, 7.4346282276367255f,
- 7.4429434958487288f, 7.4512111118323299f, 7.4594316186372973f,
- 7.4676055500829976f, 7.4757334309663976f, 7.4838157772642564f,
- 7.4918530963296748f, 7.4998458870832057f, 7.5077946401986964f,
- 7.5156998382840436f, 7.5235619560570131f, 7.5313814605163119f,
- 7.5391588111080319f, 7.5468944598876373f, 7.5545888516776376f,
- 7.5622424242210728f, 7.5698556083309478f, 7.5774288280357487f,
- 7.5849625007211561f, 7.5924570372680806f, 7.5999128421871278f,
- 7.6073303137496113f, 7.6147098441152075f, 7.6220518194563764f,
- 7.6293566200796095f, 7.6366246205436488f, 7.6438561897747244f,
- 7.6510516911789290f, 7.6582114827517955f, 7.6653359171851765f,
- 7.6724253419714952f, 7.6794800995054464f, 7.6865005271832185f,
- 7.6934869574993252f, 7.7004397181410926f, 7.7073591320808825f,
- 7.7142455176661224f, 7.7210991887071856f, 7.7279204545631996f,
- 7.7347096202258392f, 7.7414669864011465f, 7.7481928495894596f,
- 7.7548875021634691f, 7.7615512324444795f, 7.7681843247769260f,
- 7.7747870596011737f, 7.7813597135246608f, 7.7879025593914317f,
- 7.7944158663501062f, 7.8008998999203047f, 7.8073549220576037f,
- 7.8137811912170374f, 7.8201789624151887f, 7.8265484872909159f,
- 7.8328900141647422f, 7.8392037880969445f, 7.8454900509443757f,
- 7.8517490414160571f, 7.8579809951275719f, 7.8641861446542798f,
- 7.8703647195834048f, 7.8765169465650002f, 7.8826430493618425f,
- 7.8887432488982601f, 7.8948177633079446f, 7.9008668079807496f,
- 7.9068905956085187f, 7.9128893362299619f, 7.9188632372745955f,
- 7.9248125036057813f, 7.9307373375628867f, 7.9366379390025719f,
- 7.9425145053392399f, 7.9483672315846778f, 7.9541963103868758f,
- 7.9600019320680806f, 7.9657842846620870f, 7.9715435539507720f,
- 7.9772799234999168f, 7.9829935746943104f, 7.9886846867721664f,
- 7.9943534368588578f
-};
-
-#define LOG_2_INV 1.4426950408889634
-
-/* Faster logarithm for small integers, with the property of log2(0) == 0. */
-static BROTLI_INLINE double FastLog2(size_t v) {
- if (v < sizeof(kLog2Table) / sizeof(kLog2Table[0])) {
- return kLog2Table[v];
- }
-#if (defined(_MSC_VER) && _MSC_VER <= 1700) || \
- (defined(__ANDROID_API__) && __ANDROID_API__ < 18)
- /* Visual Studio 2012 and Android API levels < 18 do not have the log2()
- * function defined, so we use log() and a multiplication instead. */
- return log((double)v) * LOG_2_INV;
-#else
- return log2((double)v);
-#endif
-}
-
-#if defined(__cplusplus) || defined(c_plusplus)
-} /* extern "C" */
-#endif
-
-#endif /* BROTLI_ENC_FAST_LOG_H_ */
diff --git a/BaseTools/Source/C/BrotliCompress/enc/find_match_length.h b/BaseTools/Source/C/BrotliCompress/enc/find_match_length.h
deleted file mode 100644
index 6e1f44474baa..000000000000
--- a/BaseTools/Source/C/BrotliCompress/enc/find_match_length.h
+++ /dev/null
@@ -1,80 +0,0 @@
-/* Copyright 2010 Google Inc. All Rights Reserved.
-
- Distributed under MIT license.
- See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
-*/
-
-/* Function to find maximal matching prefixes of strings. */
-
-#ifndef BROTLI_ENC_FIND_MATCH_LENGTH_H_
-#define BROTLI_ENC_FIND_MATCH_LENGTH_H_
-
-#include "../common/platform.h"
-#include <brotli/types.h>
-
-#if defined(__cplusplus) || defined(c_plusplus)
-extern "C" {
-#endif
-
-/* Separate implementation for little-endian 64-bit targets, for speed. */
-#if defined(__GNUC__) && defined(_LP64) && defined(BROTLI_LITTLE_ENDIAN)
-
-static BROTLI_INLINE size_t FindMatchLengthWithLimit(const uint8_t* s1,
- const uint8_t* s2,
- size_t limit) {
- size_t matched = 0;
- size_t limit2 = (limit >> 3) + 1; /* + 1 is for pre-decrement in while */
- while (BROTLI_PREDICT_TRUE(--limit2)) {
- if (BROTLI_PREDICT_FALSE(BROTLI_UNALIGNED_LOAD64LE(s2) ==
- BROTLI_UNALIGNED_LOAD64LE(s1 + matched))) {
- s2 += 8;
- matched += 8;
- } else {
- uint64_t x = BROTLI_UNALIGNED_LOAD64LE(s2) ^
- BROTLI_UNALIGNED_LOAD64LE(s1 + matched);
- size_t matching_bits = (size_t)__builtin_ctzll(x);
- matched += matching_bits >> 3;
- return matched;
- }
- }
- limit = (limit & 7) + 1; /* + 1 is for pre-decrement in while */
- while (--limit) {
- if (BROTLI_PREDICT_TRUE(s1[matched] == *s2)) {
- ++s2;
- ++matched;
- } else {
- return matched;
- }
- }
- return matched;
-}
-#else
-static BROTLI_INLINE size_t FindMatchLengthWithLimit(const uint8_t* s1,
- const uint8_t* s2,
- size_t limit) {
- size_t matched = 0;
- const uint8_t* s2_limit = s2 + limit;
- const uint8_t* s2_ptr = s2;
- /* Find out how long the match is. We loop over the data 32 bits at a
- time until we find a 32-bit block that doesn't match; then we find
- the first non-matching bit and use that to calculate the total
- length of the match. */
- while (s2_ptr <= s2_limit - 4 &&
- BrotliUnalignedRead32(s2_ptr) ==
- BrotliUnalignedRead32(s1 + matched)) {
- s2_ptr += 4;
- matched += 4;
- }
- while ((s2_ptr < s2_limit) && (s1[matched] == *s2_ptr)) {
- ++s2_ptr;
- ++matched;
- }
- return matched;
-}
-#endif
-
-#if defined(__cplusplus) || defined(c_plusplus)
-} /* extern "C" */
-#endif
-
-#endif /* BROTLI_ENC_FIND_MATCH_LENGTH_H_ */
diff --git a/BaseTools/Source/C/BrotliCompress/enc/hash.h b/BaseTools/Source/C/BrotliCompress/enc/hash.h
deleted file mode 100644
index 9225d127ac58..000000000000
--- a/BaseTools/Source/C/BrotliCompress/enc/hash.h
+++ /dev/null
@@ -1,497 +0,0 @@
-/* Copyright 2010 Google Inc. All Rights Reserved.
-
- Distributed under MIT license.
- See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
-*/
-
-/* A (forgetful) hash table to the data seen by the compressor, to
- help create backward references to previous data. */
-
-#ifndef BROTLI_ENC_HASH_H_
-#define BROTLI_ENC_HASH_H_
-
-#include <string.h> /* memcmp, memset */
-
-#include "../common/constants.h"
-#include "../common/dictionary.h"
-#include "../common/platform.h"
-#include <brotli/types.h>
-#include "./encoder_dict.h"
-#include "./fast_log.h"
-#include "./find_match_length.h"
-#include "./memory.h"
-#include "./quality.h"
-#include "./static_dict.h"
-
-#if defined(__cplusplus) || defined(c_plusplus)
-extern "C" {
-#endif
-
-/* Pointer to hasher data.
- *
- * Excluding initialization and destruction, hasher can be passed as
- * HasherHandle by value.
- *
- * Typically hasher data consists of 3 sections:
- * * HasherCommon structure
- * * private structured hasher data, depending on hasher type
- * * private dynamic hasher data, depending on hasher type and parameters
- *
- * Using "define" instead of "typedef", because on MSVC __restrict does not work
- * on typedef pointer types. */
-#define HasherHandle uint8_t*
-
-typedef struct {
- BrotliHasherParams params;
-
- /* False if hasher needs to be "prepared" before use. */
- BROTLI_BOOL is_prepared_;
-
- size_t dict_num_lookups;
- size_t dict_num_matches;
-} HasherCommon;
-
-static BROTLI_INLINE HasherCommon* GetHasherCommon(HasherHandle handle) {
- return (HasherCommon*)handle;
-}
-
-#define score_t size_t
-
-static const uint32_t kCutoffTransformsCount = 10;
-/* 0, 12, 27, 23, 42, 63, 56, 48, 59, 64 */
-/* 0+0, 4+8, 8+19, 12+11, 16+26, 20+43, 24+32, 28+20, 32+27, 36+28 */
-static const uint64_t kCutoffTransforms =
- BROTLI_MAKE_UINT64_T(0x071B520A, 0xDA2D3200);
-
-typedef struct HasherSearchResult {
- size_t len;
- size_t distance;
- score_t score;
- int len_code_delta; /* == len_code - len */
-} HasherSearchResult;
-
-/* kHashMul32 multiplier has these properties:
- * The multiplier must be odd. Otherwise we may lose the highest bit.
- * No long streaks of ones or zeros.
- * There is no effort to ensure that it is a prime, the oddity is enough
- for this use.
- * The number has been tuned heuristically against compression benchmarks. */
-static const uint32_t kHashMul32 = 0x1E35A7BD;
-static const uint64_t kHashMul64 = BROTLI_MAKE_UINT64_T(0x1E35A7BD, 0x1E35A7BD);
-static const uint64_t kHashMul64Long =
- BROTLI_MAKE_UINT64_T(0x1FE35A7Bu, 0xD3579BD3u);
-
-static BROTLI_INLINE uint32_t Hash14(const uint8_t* data) {
- uint32_t h = BROTLI_UNALIGNED_LOAD32LE(data) * kHashMul32;
- /* The higher bits contain more mixture from the multiplication,
- so we take our results from there. */
- return h >> (32 - 14);
-}
-
-static BROTLI_INLINE void PrepareDistanceCache(
- int* BROTLI_RESTRICT distance_cache, const int num_distances) {
- if (num_distances > 4) {
- int last_distance = distance_cache[0];
- distance_cache[4] = last_distance - 1;
- distance_cache[5] = last_distance + 1;
- distance_cache[6] = last_distance - 2;
- distance_cache[7] = last_distance + 2;
- distance_cache[8] = last_distance - 3;
- distance_cache[9] = last_distance + 3;
- if (num_distances > 10) {
- int next_last_distance = distance_cache[1];
- distance_cache[10] = next_last_distance - 1;
- distance_cache[11] = next_last_distance + 1;
- distance_cache[12] = next_last_distance - 2;
- distance_cache[13] = next_last_distance + 2;
- distance_cache[14] = next_last_distance - 3;
- distance_cache[15] = next_last_distance + 3;
- }
- }
-}
-
-#define BROTLI_LITERAL_BYTE_SCORE 135
-#define BROTLI_DISTANCE_BIT_PENALTY 30
-/* Score must be positive after applying maximal penalty. */
-#define BROTLI_SCORE_BASE (BROTLI_DISTANCE_BIT_PENALTY * 8 * sizeof(size_t))
-
-/* Usually, we always choose the longest backward reference. This function
- allows for the exception of that rule.
-
- If we choose a backward reference that is further away, it will
- usually be coded with more bits. We approximate this by assuming
- log2(distance). If the distance can be expressed in terms of the
- last four distances, we use some heuristic constants to estimate
- the bits cost. For the first up to four literals we use the bit
- cost of the literals from the literal cost model, after that we
- use the average bit cost of the cost model.
-
- This function is used to sometimes discard a longer backward reference
- when it is not much longer and the bit cost for encoding it is more
- than the saved literals.
-
- backward_reference_offset MUST be positive. */
-static BROTLI_INLINE score_t BackwardReferenceScore(
- size_t copy_length, size_t backward_reference_offset) {
- return BROTLI_SCORE_BASE + BROTLI_LITERAL_BYTE_SCORE * (score_t)copy_length -
- BROTLI_DISTANCE_BIT_PENALTY * Log2FloorNonZero(backward_reference_offset);
-}
-
-static BROTLI_INLINE score_t BackwardReferenceScoreUsingLastDistance(
- size_t copy_length) {
- return BROTLI_LITERAL_BYTE_SCORE * (score_t)copy_length +
- BROTLI_SCORE_BASE + 15;
-}
-
-static BROTLI_INLINE score_t BackwardReferencePenaltyUsingLastDistance(
- size_t distance_short_code) {
- return (score_t)39 + ((0x1CA10 >> (distance_short_code & 0xE)) & 0xE);
-}
-
-static BROTLI_INLINE BROTLI_BOOL TestStaticDictionaryItem(
- const BrotliEncoderDictionary* dictionary, size_t item, const uint8_t* data,
- size_t max_length, size_t max_backward, size_t max_distance,
- HasherSearchResult* out) {
- size_t len;
- size_t word_idx;
- size_t offset;
- size_t matchlen;
- size_t backward;
- score_t score;
- len = item & 0x1F;
- word_idx = item >> 5;
- offset = dictionary->words->offsets_by_length[len] + len * word_idx;
- if (len > max_length) {
- return BROTLI_FALSE;
- }
-
- matchlen =
- FindMatchLengthWithLimit(data, &dictionary->words->data[offset], len);
- if (matchlen + dictionary->cutoffTransformsCount <= len || matchlen == 0) {
- return BROTLI_FALSE;
- }
- {
- size_t cut = len - matchlen;
- size_t transform_id = (cut << 2) +
- (size_t)((dictionary->cutoffTransforms >> (cut * 6)) & 0x3F);
- backward = max_backward + 1 + word_idx +
- (transform_id << dictionary->words->size_bits_by_length[len]);
- }
- if (backward > max_distance) {
- return BROTLI_FALSE;
- }
- score = BackwardReferenceScore(matchlen, backward);
- if (score < out->score) {
- return BROTLI_FALSE;
- }
- out->len = matchlen;
- out->len_code_delta = (int)len - (int)matchlen;
- out->distance = backward;
- out->score = score;
- return BROTLI_TRUE;
-}
-
-static BROTLI_INLINE void SearchInStaticDictionary(
- const BrotliEncoderDictionary* dictionary,
- HasherHandle handle, const uint8_t* data, size_t max_length,
- size_t max_backward, size_t max_distance,
- HasherSearchResult* out, BROTLI_BOOL shallow) {
- size_t key;
- size_t i;
- HasherCommon* self = GetHasherCommon(handle);
- if (self->dict_num_matches < (self->dict_num_lookups >> 7)) {
- return;
- }
- key = Hash14(data) << 1;
- for (i = 0; i < (shallow ? 1u : 2u); ++i, ++key) {
- size_t item = dictionary->hash_table[key];
- self->dict_num_lookups++;
- if (item != 0) {
- BROTLI_BOOL item_matches = TestStaticDictionaryItem(
- dictionary, item, data, max_length, max_backward, max_distance, out);
- if (item_matches) {
- self->dict_num_matches++;
- }
- }
- }
-}
-
-typedef struct BackwardMatch {
- uint32_t distance;
- uint32_t length_and_code;
-} BackwardMatch;
-
-static BROTLI_INLINE void InitBackwardMatch(BackwardMatch* self,
- size_t dist, size_t len) {
- self->distance = (uint32_t)dist;
- self->length_and_code = (uint32_t)(len << 5);
-}
-
-static BROTLI_INLINE void InitDictionaryBackwardMatch(BackwardMatch* self,
- size_t dist, size_t len, size_t len_code) {
- self->distance = (uint32_t)dist;
- self->length_and_code =
- (uint32_t)((len << 5) | (len == len_code ? 0 : len_code));
-}
-
-static BROTLI_INLINE size_t BackwardMatchLength(const BackwardMatch* self) {
- return self->length_and_code >> 5;
-}
-
-static BROTLI_INLINE size_t BackwardMatchLengthCode(const BackwardMatch* self) {
- size_t code = self->length_and_code & 31;
- return code ? code : BackwardMatchLength(self);
-}
-
-#define EXPAND_CAT(a, b) CAT(a, b)
-#define CAT(a, b) a ## b
-#define FN(X) EXPAND_CAT(X, HASHER())
-
-#define HASHER() H10
-#define BUCKET_BITS 17
-#define MAX_TREE_SEARCH_DEPTH 64
-#define MAX_TREE_COMP_LENGTH 128
-#include "./hash_to_binary_tree_inc.h" /* NOLINT(build/include) */
-#undef MAX_TREE_SEARCH_DEPTH
-#undef MAX_TREE_COMP_LENGTH
-#undef BUCKET_BITS
-#undef HASHER
-/* MAX_NUM_MATCHES == 64 + MAX_TREE_SEARCH_DEPTH */
-#define MAX_NUM_MATCHES_H10 128
-
-/* For BUCKET_SWEEP == 1, enabling the dictionary lookup makes compression
- a little faster (0.5% - 1%) and it compresses 0.15% better on small text
- and HTML inputs. */
-
-#define HASHER() H2
-#define BUCKET_BITS 16
-#define BUCKET_SWEEP 1
-#define HASH_LEN 5
-#define USE_DICTIONARY 1
-#include "./hash_longest_match_quickly_inc.h" /* NOLINT(build/include) */
-#undef BUCKET_SWEEP
-#undef USE_DICTIONARY
-#undef HASHER
-
-#define HASHER() H3
-#define BUCKET_SWEEP 2
-#define USE_DICTIONARY 0
-#include "./hash_longest_match_quickly_inc.h" /* NOLINT(build/include) */
-#undef USE_DICTIONARY
-#undef BUCKET_SWEEP
-#undef BUCKET_BITS
-#undef HASHER
-
-#define HASHER() H4
-#define BUCKET_BITS 17
-#define BUCKET_SWEEP 4
-#define USE_DICTIONARY 1
-#include "./hash_longest_match_quickly_inc.h" /* NOLINT(build/include) */
-#undef USE_DICTIONARY
-#undef HASH_LEN
-#undef BUCKET_SWEEP
-#undef BUCKET_BITS
-#undef HASHER
-
-#define HASHER() H5
-#include "./hash_longest_match_inc.h" /* NOLINT(build/include) */
-#undef HASHER
-
-#define HASHER() H6
-#include "./hash_longest_match64_inc.h" /* NOLINT(build/include) */
-#undef HASHER
-
-#define BUCKET_BITS 15
-
-#define NUM_LAST_DISTANCES_TO_CHECK 4
-#define NUM_BANKS 1
-#define BANK_BITS 16
-#define HASHER() H40
-#include "./hash_forgetful_chain_inc.h" /* NOLINT(build/include) */
-#undef HASHER
-#undef NUM_LAST_DISTANCES_TO_CHECK
-
-#define NUM_LAST_DISTANCES_TO_CHECK 10
-#define HASHER() H41
-#include "./hash_forgetful_chain_inc.h" /* NOLINT(build/include) */
-#undef HASHER
-#undef NUM_LAST_DISTANCES_TO_CHECK
-#undef NUM_BANKS
-#undef BANK_BITS
-
-#define NUM_LAST_DISTANCES_TO_CHECK 16
-#define NUM_BANKS 512
-#define BANK_BITS 9
-#define HASHER() H42
-#include "./hash_forgetful_chain_inc.h" /* NOLINT(build/include) */
-#undef HASHER
-#undef NUM_LAST_DISTANCES_TO_CHECK
-#undef NUM_BANKS
-#undef BANK_BITS
-
-#undef BUCKET_BITS
-
-#define HASHER() H54
-#define BUCKET_BITS 20
-#define BUCKET_SWEEP 4
-#define HASH_LEN 7
-#define USE_DICTIONARY 0
-#include "./hash_longest_match_quickly_inc.h" /* NOLINT(build/include) */
-#undef USE_DICTIONARY
-#undef HASH_LEN
-#undef BUCKET_SWEEP
-#undef BUCKET_BITS
-#undef HASHER
-
-/* fast large window hashers */
-
-#define HASHER() HROLLING_FAST
-#define CHUNKLEN 32
-#define JUMP 4
-#define NUMBUCKETS 16777216
-#define MASK ((NUMBUCKETS * 64) - 1)
-#include "./hash_rolling_inc.h" /* NOLINT(build/include) */
-#undef JUMP
-#undef HASHER
-
-
-#define HASHER() HROLLING
-#define JUMP 1
-#include "./hash_rolling_inc.h" /* NOLINT(build/include) */
-#undef MASK
-#undef NUMBUCKETS
-#undef JUMP
-#undef CHUNKLEN
-#undef HASHER
-
-#define HASHER() H35
-#define HASHER_A H3
-#define HASHER_B HROLLING_FAST
-#include "./hash_composite_inc.h" /* NOLINT(build/include) */
-#undef HASHER_A
-#undef HASHER_B
-#undef HASHER
-
-#define HASHER() H55
-#define HASHER_A H54
-#define HASHER_B HROLLING_FAST
-#include "./hash_composite_inc.h" /* NOLINT(build/include) */
-#undef HASHER_A
-#undef HASHER_B
-#undef HASHER
-
-#define HASHER() H65
-#define HASHER_A H6
-#define HASHER_B HROLLING
-#include "./hash_composite_inc.h" /* NOLINT(build/include) */
-#undef HASHER_A
-#undef HASHER_B
-#undef HASHER
-
-#undef FN
-#undef CAT
-#undef EXPAND_CAT
-
-#define FOR_GENERIC_HASHERS(H) H(2) H(3) H(4) H(5) H(6) H(40) H(41) H(42) H(54)\
- H(35) H(55) H(65)
-#define FOR_ALL_HASHERS(H) FOR_GENERIC_HASHERS(H) H(10)
-
-static BROTLI_INLINE void DestroyHasher(
- MemoryManager* m, HasherHandle* handle) {
- if (*handle == NULL) return;
- BROTLI_FREE(m, *handle);
-}
-
-static BROTLI_INLINE void HasherReset(HasherHandle handle) {
- if (handle == NULL) return;
- GetHasherCommon(handle)->is_prepared_ = BROTLI_FALSE;
-}
-
-static BROTLI_INLINE size_t HasherSize(const BrotliEncoderParams* params,
- BROTLI_BOOL one_shot, const size_t input_size) {
- size_t result = sizeof(HasherCommon);
- switch (params->hasher.type) {
-#define SIZE_(N) \
- case N: \
- result += HashMemAllocInBytesH ## N(params, one_shot, input_size); \
- break;
- FOR_ALL_HASHERS(SIZE_)
-#undef SIZE_
- default:
- break;
- }
- return result;
-}
-
-static BROTLI_INLINE void HasherSetup(MemoryManager* m, HasherHandle* handle,
- BrotliEncoderParams* params, const uint8_t* data, size_t position,
- size_t input_size, BROTLI_BOOL is_last) {
- HasherHandle self = NULL;
- HasherCommon* common = NULL;
- BROTLI_BOOL one_shot = (position == 0 && is_last);
- if (*handle == NULL) {
- size_t alloc_size;
- ChooseHasher(params, ¶ms->hasher);
- alloc_size = HasherSize(params, one_shot, input_size);
- self = BROTLI_ALLOC(m, uint8_t, alloc_size);
- if (BROTLI_IS_OOM(m)) return;
- *handle = self;
- common = GetHasherCommon(self);
- common->params = params->hasher;
- switch (common->params.type) {
-#define INITIALIZE_(N) \
- case N: \
- InitializeH ## N(*handle, params); \
- break;
- FOR_ALL_HASHERS(INITIALIZE_);
-#undef INITIALIZE_
- default:
- break;
- }
- HasherReset(*handle);
- }
-
- self = *handle;
- common = GetHasherCommon(self);
- if (!common->is_prepared_) {
- switch (common->params.type) {
-#define PREPARE_(N) \
- case N: \
- PrepareH ## N(self, one_shot, input_size, data); \
- break;
- FOR_ALL_HASHERS(PREPARE_)
-#undef PREPARE_
- default: break;
- }
- if (position == 0) {
- common->dict_num_lookups = 0;
- common->dict_num_matches = 0;
- }
- common->is_prepared_ = BROTLI_TRUE;
- }
-}
-
-static BROTLI_INLINE void InitOrStitchToPreviousBlock(
- MemoryManager* m, HasherHandle* handle, const uint8_t* data, size_t mask,
- BrotliEncoderParams* params, size_t position, size_t input_size,
- BROTLI_BOOL is_last) {
- HasherHandle self;
- HasherSetup(m, handle, params, data, position, input_size, is_last);
- if (BROTLI_IS_OOM(m)) return;
- self = *handle;
- switch (GetHasherCommon(self)->params.type) {
-#define INIT_(N) \
- case N: \
- StitchToPreviousBlockH ## N(self, input_size, position, data, mask); \
- break;
- FOR_ALL_HASHERS(INIT_)
-#undef INIT_
- default: break;
- }
-}
-
-#if defined(__cplusplus) || defined(c_plusplus)
-} /* extern "C" */
-#endif
-
-#endif /* BROTLI_ENC_HASH_H_ */
diff --git a/BaseTools/Source/C/BrotliCompress/enc/hash_composite_inc.h b/BaseTools/Source/C/BrotliCompress/enc/hash_composite_inc.h
deleted file mode 100644
index ec3e39c73fa2..000000000000
--- a/BaseTools/Source/C/BrotliCompress/enc/hash_composite_inc.h
+++ /dev/null
@@ -1,133 +0,0 @@
-/* NOLINT(build/header_guard) */
-/* Copyright 2018 Google Inc. All Rights Reserved.
-
- Distributed under MIT license.
- See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
-*/
-
-/* template parameters: FN, HASHER_A, HASHER_B */
-
-/* Composite hasher: This hasher allows to combine two other hashers, HASHER_A
- and HASHER_B. */
-
-#define HashComposite HASHER()
-
-#define FN_A(X) EXPAND_CAT(X, HASHER_A)
-#define FN_B(X) EXPAND_CAT(X, HASHER_B)
-
-static BROTLI_INLINE size_t FN(HashTypeLength)(void) {
- size_t a = FN_A(HashTypeLength)();
- size_t b = FN_B(HashTypeLength)();
- return a > b ? a : b;
-}
-
-static BROTLI_INLINE size_t FN(StoreLookahead)(void) {
- size_t a = FN_A(StoreLookahead)();
- size_t b = FN_B(StoreLookahead)();
- return a > b ? a : b;
-}
-
-typedef struct HashComposite {
- HasherHandle ha;
- HasherHandle hb;
- const BrotliEncoderParams* params;
-} HashComposite;
-
-static BROTLI_INLINE HashComposite* FN(Self)(HasherHandle handle) {
- return (HashComposite*)&(GetHasherCommon(handle)[1]);
-}
-
-static void FN(Initialize)(
- HasherHandle handle, const BrotliEncoderParams* params) {
- HashComposite* self = FN(Self)(handle);
- self->ha = 0;
- self->hb = 0;
- self->params = params;
- /* TODO: Initialize of the hashers is defered to Prepare (and params
- remembered here) because we don't get the one_shot and input_size params
- here that are needed to know the memory size of them. Instead provide
- those params to all hashers FN(Initialize) */
-}
-
-static void FN(Prepare)(HasherHandle handle, BROTLI_BOOL one_shot,
- size_t input_size, const uint8_t* data) {
- HashComposite* self = FN(Self)(handle);
- if (!self->ha) {
- HasherCommon* common_a;
- HasherCommon* common_b;
-
- self->ha = handle + sizeof(HasherCommon) + sizeof(HashComposite);
- common_a = (HasherCommon*)self->ha;
- common_a->params = self->params->hasher;
- common_a->is_prepared_ = BROTLI_FALSE;
- common_a->dict_num_lookups = 0;
- common_a->dict_num_matches = 0;
- FN_A(Initialize)(self->ha, self->params);
-
- self->hb = self->ha + sizeof(HasherCommon) + FN_A(HashMemAllocInBytes)(
- self->params, one_shot, input_size);
- common_b = (HasherCommon*)self->hb;
- common_b->params = self->params->hasher;
- common_b->is_prepared_ = BROTLI_FALSE;
- common_b->dict_num_lookups = 0;
- common_b->dict_num_matches = 0;
- FN_B(Initialize)(self->hb, self->params);
- }
- FN_A(Prepare)(self->ha, one_shot, input_size, data);
- FN_B(Prepare)(self->hb, one_shot, input_size, data);
-}
-
-static BROTLI_INLINE size_t FN(HashMemAllocInBytes)(
- const BrotliEncoderParams* params, BROTLI_BOOL one_shot,
- size_t input_size) {
- return sizeof(HashComposite) + 2 * sizeof(HasherCommon) +
- FN_A(HashMemAllocInBytes)(params, one_shot, input_size) +
- FN_B(HashMemAllocInBytes)(params, one_shot, input_size);
-}
-
-static BROTLI_INLINE void FN(Store)(HasherHandle BROTLI_RESTRICT handle,
- const uint8_t* BROTLI_RESTRICT data, const size_t mask, const size_t ix) {
- HashComposite* self = FN(Self)(handle);
- FN_A(Store)(self->ha, data, mask, ix);
- FN_B(Store)(self->hb, data, mask, ix);
-}
-
-static BROTLI_INLINE void FN(StoreRange)(HasherHandle handle,
- const uint8_t* data, const size_t mask, const size_t ix_start,
- const size_t ix_end) {
- HashComposite* self = FN(Self)(handle);
- FN_A(StoreRange)(self->ha, data, mask, ix_start, ix_end);
- FN_B(StoreRange)(self->hb, data, mask, ix_start, ix_end);
-}
-
-static BROTLI_INLINE void FN(StitchToPreviousBlock)(HasherHandle handle,
- size_t num_bytes, size_t position, const uint8_t* ringbuffer,
- size_t ring_buffer_mask) {
- HashComposite* self = FN(Self)(handle);
- FN_A(StitchToPreviousBlock)(self->ha, num_bytes, position, ringbuffer,
- ring_buffer_mask);
- FN_B(StitchToPreviousBlock)(self->hb, num_bytes, position, ringbuffer,
- ring_buffer_mask);
-}
-
-static BROTLI_INLINE void FN(PrepareDistanceCache)(
- HasherHandle handle, int* BROTLI_RESTRICT distance_cache) {
- HashComposite* self = FN(Self)(handle);
- FN_A(PrepareDistanceCache)(self->ha, distance_cache);
- FN_B(PrepareDistanceCache)(self->hb, distance_cache);
-}
-
-static BROTLI_INLINE void FN(FindLongestMatch)(HasherHandle handle,
- const BrotliEncoderDictionary* dictionary,
- const uint8_t* BROTLI_RESTRICT data, const size_t ring_buffer_mask,
- const int* BROTLI_RESTRICT distance_cache, const size_t cur_ix,
- const size_t max_length, const size_t max_backward, const size_t gap,
- const size_t max_distance, HasherSearchResult* BROTLI_RESTRICT out) {
- HashComposite* self = FN(Self)(handle);
- FN_A(FindLongestMatch)(self->ha, dictionary, data, ring_buffer_mask,
- distance_cache, cur_ix, max_length, max_backward, gap, max_distance, out);
- FN_B(FindLongestMatch)(self->hb, dictionary, data, ring_buffer_mask,
- distance_cache, cur_ix, max_length, max_backward, gap, max_distance, out);
-}
-
-#undef HashComposite
diff --git a/BaseTools/Source/C/BrotliCompress/enc/hash_forgetful_chain_inc.h b/BaseTools/Source/C/BrotliCompress/enc/hash_forgetful_chain_inc.h
deleted file mode 100644
index 9caf429db1d9..000000000000
--- a/BaseTools/Source/C/BrotliCompress/enc/hash_forgetful_chain_inc.h
+++ /dev/null
@@ -1,254 +0,0 @@
-/* NOLINT(build/header_guard) */
-/* Copyright 2016 Google Inc. All Rights Reserved.
-
- Distributed under MIT license.
- See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
-*/
-
-/* template parameters: FN, BUCKET_BITS, NUM_BANKS, BANK_BITS,
- NUM_LAST_DISTANCES_TO_CHECK */
-
-/* A (forgetful) hash table to the data seen by the compressor, to
- help create backward references to previous data.
-
- Hashes are stored in chains which are bucketed to groups. Group of chains
- share a storage "bank". When more than "bank size" chain nodes are added,
- oldest nodes are replaced; this way several chains may share a tail. */
-
-#define HashForgetfulChain HASHER()
-
-#define BANK_SIZE (1 << BANK_BITS)
-
-/* Number of hash buckets. */
-#define BUCKET_SIZE (1 << BUCKET_BITS)
-
-#define CAPPED_CHAINS 0
-
-static BROTLI_INLINE size_t FN(HashTypeLength)(void) { return 4; }
-static BROTLI_INLINE size_t FN(StoreLookahead)(void) { return 4; }
-
-/* HashBytes is the function that chooses the bucket to place the address in.*/
-static BROTLI_INLINE size_t FN(HashBytes)(const uint8_t* data) {
- const uint32_t h = BROTLI_UNALIGNED_LOAD32LE(data) * kHashMul32;
- /* The higher bits contain more mixture from the multiplication,
- so we take our results from there. */
- return h >> (32 - BUCKET_BITS);
-}
-
-typedef struct FN(Slot) {
- uint16_t delta;
- uint16_t next;
-} FN(Slot);
-
-typedef struct FN(Bank) {
- FN(Slot) slots[BANK_SIZE];
-} FN(Bank);
-
-typedef struct HashForgetfulChain {
- uint32_t addr[BUCKET_SIZE];
- uint16_t head[BUCKET_SIZE];
- /* Truncated hash used for quick rejection of "distance cache" candidates. */
- uint8_t tiny_hash[65536];
- FN(Bank) banks[NUM_BANKS];
- uint16_t free_slot_idx[NUM_BANKS];
- size_t max_hops;
-} HashForgetfulChain;
-
-static BROTLI_INLINE HashForgetfulChain* FN(Self)(HasherHandle handle) {
- return (HashForgetfulChain*)&(GetHasherCommon(handle)[1]);
-}
-
-static void FN(Initialize)(
- HasherHandle handle, const BrotliEncoderParams* params) {
- FN(Self)(handle)->max_hops =
- (params->quality > 6 ? 7u : 8u) << (params->quality - 4);
-}
-
-static void FN(Prepare)(HasherHandle handle, BROTLI_BOOL one_shot,
- size_t input_size, const uint8_t* data) {
- HashForgetfulChain* self = FN(Self)(handle);
- /* Partial preparation is 100 times slower (per socket). */
- size_t partial_prepare_threshold = BUCKET_SIZE >> 6;
- if (one_shot && input_size <= partial_prepare_threshold) {
- size_t i;
- for (i = 0; i < input_size; ++i) {
- size_t bucket = FN(HashBytes)(&data[i]);
- /* See InitEmpty comment. */
- self->addr[bucket] = 0xCCCCCCCC;
- self->head[bucket] = 0xCCCC;
- }
- } else {
- /* Fill |addr| array with 0xCCCCCCCC value. Because of wrapping, position
- processed by hasher never reaches 3GB + 64M; this makes all new chains
- to be terminated after the first node. */
- memset(self->addr, 0xCC, sizeof(self->addr));
- memset(self->head, 0, sizeof(self->head));
- }
- memset(self->tiny_hash, 0, sizeof(self->tiny_hash));
- memset(self->free_slot_idx, 0, sizeof(self->free_slot_idx));
-}
-
-static BROTLI_INLINE size_t FN(HashMemAllocInBytes)(
- const BrotliEncoderParams* params, BROTLI_BOOL one_shot,
- size_t input_size) {
- BROTLI_UNUSED(params);
- BROTLI_UNUSED(one_shot);
- BROTLI_UNUSED(input_size);
- return sizeof(HashForgetfulChain);
-}
-
-/* Look at 4 bytes at &data[ix & mask]. Compute a hash from these, and prepend
- node to corresponding chain; also update tiny_hash for current position. */
-static BROTLI_INLINE void FN(Store)(HasherHandle BROTLI_RESTRICT handle,
- const uint8_t* BROTLI_RESTRICT data, const size_t mask, const size_t ix) {
- HashForgetfulChain* self = FN(Self)(handle);
- const size_t key = FN(HashBytes)(&data[ix & mask]);
- const size_t bank = key & (NUM_BANKS - 1);
- const size_t idx = self->free_slot_idx[bank]++ & (BANK_SIZE - 1);
- size_t delta = ix - self->addr[key];
- self->tiny_hash[(uint16_t)ix] = (uint8_t)key;
- if (delta > 0xFFFF) delta = CAPPED_CHAINS ? 0 : 0xFFFF;
- self->banks[bank].slots[idx].delta = (uint16_t)delta;
- self->banks[bank].slots[idx].next = self->head[key];
- self->addr[key] = (uint32_t)ix;
- self->head[key] = (uint16_t)idx;
-}
-
-static BROTLI_INLINE void FN(StoreRange)(HasherHandle handle,
- const uint8_t* data, const size_t mask, const size_t ix_start,
- const size_t ix_end) {
- size_t i;
- for (i = ix_start; i < ix_end; ++i) {
- FN(Store)(handle, data, mask, i);
- }
-}
-
-static BROTLI_INLINE void FN(StitchToPreviousBlock)(HasherHandle handle,
- size_t num_bytes, size_t position, const uint8_t* ringbuffer,
- size_t ring_buffer_mask) {
- if (num_bytes >= FN(HashTypeLength)() - 1 && position >= 3) {
- /* Prepare the hashes for three last bytes of the last write.
- These could not be calculated before, since they require knowledge
- of both the previous and the current block. */
- FN(Store)(handle, ringbuffer, ring_buffer_mask, position - 3);
- FN(Store)(handle, ringbuffer, ring_buffer_mask, position - 2);
- FN(Store)(handle, ringbuffer, ring_buffer_mask, position - 1);
- }
-}
-
-static BROTLI_INLINE void FN(PrepareDistanceCache)(
- HasherHandle handle, int* BROTLI_RESTRICT distance_cache) {
- BROTLI_UNUSED(handle);
- PrepareDistanceCache(distance_cache, NUM_LAST_DISTANCES_TO_CHECK);
-}
-
-/* Find a longest backward match of &data[cur_ix] up to the length of
- max_length and stores the position cur_ix in the hash table.
-
- REQUIRES: FN(PrepareDistanceCache) must be invoked for current distance cache
- values; if this method is invoked repeatedly with the same distance
- cache values, it is enough to invoke FN(PrepareDistanceCache) once.
-
- Does not look for matches longer than max_length.
- Does not look for matches further away than max_backward.
- Writes the best match into |out|.
- |out|->score is updated only if a better match is found. */
-static BROTLI_INLINE void FN(FindLongestMatch)(HasherHandle handle,
- const BrotliEncoderDictionary* dictionary,
- const uint8_t* BROTLI_RESTRICT data, const size_t ring_buffer_mask,
- const int* BROTLI_RESTRICT distance_cache,
- const size_t cur_ix, const size_t max_length, const size_t max_backward,
- const size_t gap, const size_t max_distance,
- HasherSearchResult* BROTLI_RESTRICT out) {
- HashForgetfulChain* self = FN(Self)(handle);
- const size_t cur_ix_masked = cur_ix & ring_buffer_mask;
- /* Don't accept a short copy from far away. */
- score_t min_score = out->score;
- score_t best_score = out->score;
- size_t best_len = out->len;
- size_t i;
- const size_t key = FN(HashBytes)(&data[cur_ix_masked]);
- const uint8_t tiny_hash = (uint8_t)(key);
- out->len = 0;
- out->len_code_delta = 0;
- /* Try last distance first. */
- for (i = 0; i < NUM_LAST_DISTANCES_TO_CHECK; ++i) {
- const size_t backward = (size_t)distance_cache[i];
- size_t prev_ix = (cur_ix - backward);
- /* For distance code 0 we want to consider 2-byte matches. */
- if (i > 0 && self->tiny_hash[(uint16_t)prev_ix] != tiny_hash) continue;
- if (prev_ix >= cur_ix || backward > max_backward) {
- continue;
- }
- prev_ix &= ring_buffer_mask;
- {
- const size_t len = FindMatchLengthWithLimit(&data[prev_ix],
- &data[cur_ix_masked],
- max_length);
- if (len >= 2) {
- score_t score = BackwardReferenceScoreUsingLastDistance(len);
- if (best_score < score) {
- if (i != 0) score -= BackwardReferencePenaltyUsingLastDistance(i);
- if (best_score < score) {
- best_score = score;
- best_len = len;
- out->len = best_len;
- out->distance = backward;
- out->score = best_score;
- }
- }
- }
- }
- }
- {
- const size_t bank = key & (NUM_BANKS - 1);
- size_t backward = 0;
- size_t hops = self->max_hops;
- size_t delta = cur_ix - self->addr[key];
- size_t slot = self->head[key];
- while (hops--) {
- size_t prev_ix;
- size_t last = slot;
- backward += delta;
- if (backward > max_backward || (CAPPED_CHAINS && !delta)) break;
- prev_ix = (cur_ix - backward) & ring_buffer_mask;
- slot = self->banks[bank].slots[last].next;
- delta = self->banks[bank].slots[last].delta;
- if (cur_ix_masked + best_len > ring_buffer_mask ||
- prev_ix + best_len > ring_buffer_mask ||
- data[cur_ix_masked + best_len] != data[prev_ix + best_len]) {
- continue;
- }
- {
- const size_t len = FindMatchLengthWithLimit(&data[prev_ix],
- &data[cur_ix_masked],
- max_length);
- if (len >= 4) {
- /* Comparing for >= 3 does not change the semantics, but just saves
- for a few unnecessary binary logarithms in backward reference
- score, since we are not interested in such short matches. */
- score_t score = BackwardReferenceScore(len, backward);
- if (best_score < score) {
- best_score = score;
- best_len = len;
- out->len = best_len;
- out->distance = backward;
- out->score = best_score;
- }
- }
- }
- }
- FN(Store)(handle, data, ring_buffer_mask, cur_ix);
- }
- if (out->score == min_score) {
- SearchInStaticDictionary(dictionary,
- handle, &data[cur_ix_masked], max_length, max_backward + gap,
- max_distance, out, BROTLI_FALSE);
- }
-}
-
-#undef BANK_SIZE
-#undef BUCKET_SIZE
-#undef CAPPED_CHAINS
-
-#undef HashForgetfulChain
diff --git a/BaseTools/Source/C/BrotliCompress/enc/hash_longest_match64_inc.h b/BaseTools/Source/C/BrotliCompress/enc/hash_longest_match64_inc.h
deleted file mode 100644
index 3a01f0d3f1a0..000000000000
--- a/BaseTools/Source/C/BrotliCompress/enc/hash_longest_match64_inc.h
+++ /dev/null
@@ -1,266 +0,0 @@
-/* NOLINT(build/header_guard) */
-/* Copyright 2010 Google Inc. All Rights Reserved.
-
- Distributed under MIT license.
- See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
-*/
-
-/* template parameters: FN */
-
-/* A (forgetful) hash table to the data seen by the compressor, to
- help create backward references to previous data.
-
- This is a hash map of fixed size (bucket_size_) to a ring buffer of
- fixed size (block_size_). The ring buffer contains the last block_size_
- index positions of the given hash key in the compressed data. */
-
-#define HashLongestMatch HASHER()
-
-static BROTLI_INLINE size_t FN(HashTypeLength)(void) { return 8; }
-static BROTLI_INLINE size_t FN(StoreLookahead)(void) { return 8; }
-
-/* HashBytes is the function that chooses the bucket to place the address in. */
-static BROTLI_INLINE uint32_t FN(HashBytes)(const uint8_t* data,
- const uint64_t mask,
- const int shift) {
- const uint64_t h = (BROTLI_UNALIGNED_LOAD64LE(data) & mask) * kHashMul64Long;
- /* The higher bits contain more mixture from the multiplication,
- so we take our results from there. */
- return (uint32_t)(h >> shift);
-}
-
-typedef struct HashLongestMatch {
- /* Number of hash buckets. */
- size_t bucket_size_;
- /* Only block_size_ newest backward references are kept,
- and the older are forgotten. */
- size_t block_size_;
- /* Left-shift for computing hash bucket index from hash value. */
- int hash_shift_;
- /* Mask for selecting the next 4-8 bytes of input */
- uint64_t hash_mask_;
- /* Mask for accessing entries in a block (in a ring-buffer manner). */
- uint32_t block_mask_;
-
- /* --- Dynamic size members --- */
-
- /* Number of entries in a particular bucket. */
- /* uint16_t num[bucket_size]; */
-
- /* Buckets containing block_size_ of backward references. */
- /* uint32_t* buckets[bucket_size * block_size]; */
-} HashLongestMatch;
-
-static BROTLI_INLINE HashLongestMatch* FN(Self)(HasherHandle handle) {
- return (HashLongestMatch*)&(GetHasherCommon(handle)[1]);
-}
-
-static BROTLI_INLINE uint16_t* FN(Num)(HashLongestMatch* self) {
- return (uint16_t*)(&self[1]);
-}
-
-static BROTLI_INLINE uint32_t* FN(Buckets)(HashLongestMatch* self) {
- return (uint32_t*)(&FN(Num)(self)[self->bucket_size_]);
-}
-
-static void FN(Initialize)(
- HasherHandle handle, const BrotliEncoderParams* params) {
- HasherCommon* common = GetHasherCommon(handle);
- HashLongestMatch* self = FN(Self)(handle);
- BROTLI_UNUSED(params);
- self->hash_shift_ = 64 - common->params.bucket_bits;
- self->hash_mask_ = (~((uint64_t)0U)) >> (64 - 8 * common->params.hash_len);
- self->bucket_size_ = (size_t)1 << common->params.bucket_bits;
- self->block_size_ = (size_t)1 << common->params.block_bits;
- self->block_mask_ = (uint32_t)(self->block_size_ - 1);
-}
-
-static void FN(Prepare)(HasherHandle handle, BROTLI_BOOL one_shot,
- size_t input_size, const uint8_t* data) {
- HashLongestMatch* self = FN(Self)(handle);
- uint16_t* num = FN(Num)(self);
- /* Partial preparation is 100 times slower (per socket). */
- size_t partial_prepare_threshold = self->bucket_size_ >> 6;
- if (one_shot && input_size <= partial_prepare_threshold) {
- size_t i;
- for (i = 0; i < input_size; ++i) {
- const uint32_t key = FN(HashBytes)(&data[i], self->hash_mask_,
- self->hash_shift_);
- num[key] = 0;
- }
- } else {
- memset(num, 0, self->bucket_size_ * sizeof(num[0]));
- }
-}
-
-static BROTLI_INLINE size_t FN(HashMemAllocInBytes)(
- const BrotliEncoderParams* params, BROTLI_BOOL one_shot,
- size_t input_size) {
- size_t bucket_size = (size_t)1 << params->hasher.bucket_bits;
- size_t block_size = (size_t)1 << params->hasher.block_bits;
- BROTLI_UNUSED(one_shot);
- BROTLI_UNUSED(input_size);
- return sizeof(HashLongestMatch) + bucket_size * (2 + 4 * block_size);
-}
-
-/* Look at 4 bytes at &data[ix & mask].
- Compute a hash from these, and store the value of ix at that position. */
-static BROTLI_INLINE void FN(Store)(HasherHandle handle, const uint8_t* data,
- const size_t mask, const size_t ix) {
- HashLongestMatch* self = FN(Self)(handle);
- uint16_t* num = FN(Num)(self);
- const uint32_t key = FN(HashBytes)(&data[ix & mask], self->hash_mask_,
- self->hash_shift_);
- const size_t minor_ix = num[key] & self->block_mask_;
- const size_t offset =
- minor_ix + (key << GetHasherCommon(handle)->params.block_bits);
- FN(Buckets)(self)[offset] = (uint32_t)ix;
- ++num[key];
-}
-
-static BROTLI_INLINE void FN(StoreRange)(HasherHandle handle,
- const uint8_t* data, const size_t mask, const size_t ix_start,
- const size_t ix_end) {
- size_t i;
- for (i = ix_start; i < ix_end; ++i) {
- FN(Store)(handle, data, mask, i);
- }
-}
-
-static BROTLI_INLINE void FN(StitchToPreviousBlock)(HasherHandle handle,
- size_t num_bytes, size_t position, const uint8_t* ringbuffer,
- size_t ringbuffer_mask) {
- if (num_bytes >= FN(HashTypeLength)() - 1 && position >= 3) {
- /* Prepare the hashes for three last bytes of the last write.
- These could not be calculated before, since they require knowledge
- of both the previous and the current block. */
- FN(Store)(handle, ringbuffer, ringbuffer_mask, position - 3);
- FN(Store)(handle, ringbuffer, ringbuffer_mask, position - 2);
- FN(Store)(handle, ringbuffer, ringbuffer_mask, position - 1);
- }
-}
-
-static BROTLI_INLINE void FN(PrepareDistanceCache)(
- HasherHandle handle, int* BROTLI_RESTRICT distance_cache) {
- PrepareDistanceCache(distance_cache,
- GetHasherCommon(handle)->params.num_last_distances_to_check);
-}
-
-/* Find a longest backward match of &data[cur_ix] up to the length of
- max_length and stores the position cur_ix in the hash table.
-
- REQUIRES: FN(PrepareDistanceCache) must be invoked for current distance cache
- values; if this method is invoked repeatedly with the same distance
- cache values, it is enough to invoke FN(PrepareDistanceCache) once.
-
- Does not look for matches longer than max_length.
- Does not look for matches further away than max_backward.
- Writes the best match into |out|.
- |out|->score is updated only if a better match is found. */
-static BROTLI_INLINE void FN(FindLongestMatch)(HasherHandle handle,
- const BrotliEncoderDictionary* dictionary,
- const uint8_t* BROTLI_RESTRICT data, const size_t ring_buffer_mask,
- const int* BROTLI_RESTRICT distance_cache, const size_t cur_ix,
- const size_t max_length, const size_t max_backward, const size_t gap,
- const size_t max_distance, HasherSearchResult* BROTLI_RESTRICT out) {
- HasherCommon* common = GetHasherCommon(handle);
- HashLongestMatch* self = FN(Self)(handle);
- uint16_t* num = FN(Num)(self);
- uint32_t* buckets = FN(Buckets)(self);
- const size_t cur_ix_masked = cur_ix & ring_buffer_mask;
- /* Don't accept a short copy from far away. */
- score_t min_score = out->score;
- score_t best_score = out->score;
- size_t best_len = out->len;
- size_t i;
- out->len = 0;
- out->len_code_delta = 0;
- /* Try last distance first. */
- for (i = 0; i < (size_t)common->params.num_last_distances_to_check; ++i) {
- const size_t backward = (size_t)distance_cache[i];
- size_t prev_ix = (size_t)(cur_ix - backward);
- if (prev_ix >= cur_ix) {
- continue;
- }
- if (BROTLI_PREDICT_FALSE(backward > max_backward)) {
- continue;
- }
- prev_ix &= ring_buffer_mask;
-
- if (cur_ix_masked + best_len > ring_buffer_mask ||
- prev_ix + best_len > ring_buffer_mask ||
- data[cur_ix_masked + best_len] != data[prev_ix + best_len]) {
- continue;
- }
- {
- const size_t len = FindMatchLengthWithLimit(&data[prev_ix],
- &data[cur_ix_masked],
- max_length);
- if (len >= 3 || (len == 2 && i < 2)) {
- /* Comparing for >= 2 does not change the semantics, but just saves for
- a few unnecessary binary logarithms in backward reference score,
- since we are not interested in such short matches. */
- score_t score = BackwardReferenceScoreUsingLastDistance(len);
- if (best_score < score) {
- if (i != 0) score -= BackwardReferencePenaltyUsingLastDistance(i);
- if (best_score < score) {
- best_score = score;
- best_len = len;
- out->len = best_len;
- out->distance = backward;
- out->score = best_score;
- }
- }
- }
- }
- }
- {
- const uint32_t key = FN(HashBytes)(
- &data[cur_ix_masked], self->hash_mask_, self->hash_shift_);
- uint32_t* BROTLI_RESTRICT bucket =
- &buckets[key << common->params.block_bits];
- const size_t down =
- (num[key] > self->block_size_) ?
- (num[key] - self->block_size_) : 0u;
- for (i = num[key]; i > down;) {
- size_t prev_ix = bucket[--i & self->block_mask_];
- const size_t backward = cur_ix - prev_ix;
- if (BROTLI_PREDICT_FALSE(backward > max_backward)) {
- break;
- }
- prev_ix &= ring_buffer_mask;
- if (cur_ix_masked + best_len > ring_buffer_mask ||
- prev_ix + best_len > ring_buffer_mask ||
- data[cur_ix_masked + best_len] != data[prev_ix + best_len]) {
- continue;
- }
- {
- const size_t len = FindMatchLengthWithLimit(&data[prev_ix],
- &data[cur_ix_masked],
- max_length);
- if (len >= 4) {
- /* Comparing for >= 3 does not change the semantics, but just saves
- for a few unnecessary binary logarithms in backward reference
- score, since we are not interested in such short matches. */
- score_t score = BackwardReferenceScore(len, backward);
- if (best_score < score) {
- best_score = score;
- best_len = len;
- out->len = best_len;
- out->distance = backward;
- out->score = best_score;
- }
- }
- }
- }
- bucket[num[key] & self->block_mask_] = (uint32_t)cur_ix;
- ++num[key];
- }
- if (min_score == out->score) {
- SearchInStaticDictionary(dictionary,
- handle, &data[cur_ix_masked], max_length, max_backward + gap,
- max_distance, out, BROTLI_FALSE);
- }
-}
-
-#undef HashLongestMatch
diff --git a/BaseTools/Source/C/BrotliCompress/enc/hash_longest_match_inc.h b/BaseTools/Source/C/BrotliCompress/enc/hash_longest_match_inc.h
deleted file mode 100644
index 108a7faaccb1..000000000000
--- a/BaseTools/Source/C/BrotliCompress/enc/hash_longest_match_inc.h
+++ /dev/null
@@ -1,258 +0,0 @@
-/* NOLINT(build/header_guard) */
-/* Copyright 2010 Google Inc. All Rights Reserved.
-
- Distributed under MIT license.
- See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
-*/
-
-/* template parameters: FN */
-
-/* A (forgetful) hash table to the data seen by the compressor, to
- help create backward references to previous data.
-
- This is a hash map of fixed size (bucket_size_) to a ring buffer of
- fixed size (block_size_). The ring buffer contains the last block_size_
- index positions of the given hash key in the compressed data. */
-
-#define HashLongestMatch HASHER()
-
-static BROTLI_INLINE size_t FN(HashTypeLength)(void) { return 4; }
-static BROTLI_INLINE size_t FN(StoreLookahead)(void) { return 4; }
-
-/* HashBytes is the function that chooses the bucket to place the address in. */
-static uint32_t FN(HashBytes)(const uint8_t* data, const int shift) {
- uint32_t h = BROTLI_UNALIGNED_LOAD32LE(data) * kHashMul32;
- /* The higher bits contain more mixture from the multiplication,
- so we take our results from there. */
- return (uint32_t)(h >> shift);
-}
-
-typedef struct HashLongestMatch {
- /* Number of hash buckets. */
- size_t bucket_size_;
- /* Only block_size_ newest backward references are kept,
- and the older are forgotten. */
- size_t block_size_;
- /* Left-shift for computing hash bucket index from hash value. */
- int hash_shift_;
- /* Mask for accessing entries in a block (in a ring-buffer manner). */
- uint32_t block_mask_;
-
- /* --- Dynamic size members --- */
-
- /* Number of entries in a particular bucket. */
- /* uint16_t num[bucket_size]; */
-
- /* Buckets containing block_size_ of backward references. */
- /* uint32_t* buckets[bucket_size * block_size]; */
-} HashLongestMatch;
-
-static BROTLI_INLINE HashLongestMatch* FN(Self)(HasherHandle handle) {
- return (HashLongestMatch*)&(GetHasherCommon(handle)[1]);
-}
-
-static BROTLI_INLINE uint16_t* FN(Num)(HashLongestMatch* self) {
- return (uint16_t*)(&self[1]);
-}
-
-static BROTLI_INLINE uint32_t* FN(Buckets)(HashLongestMatch* self) {
- return (uint32_t*)(&FN(Num)(self)[self->bucket_size_]);
-}
-
-static void FN(Initialize)(
- HasherHandle handle, const BrotliEncoderParams* params) {
- HasherCommon* common = GetHasherCommon(handle);
- HashLongestMatch* self = FN(Self)(handle);
- BROTLI_UNUSED(params);
- self->hash_shift_ = 32 - common->params.bucket_bits;
- self->bucket_size_ = (size_t)1 << common->params.bucket_bits;
- self->block_size_ = (size_t)1 << common->params.block_bits;
- self->block_mask_ = (uint32_t)(self->block_size_ - 1);
-}
-
-static void FN(Prepare)(HasherHandle handle, BROTLI_BOOL one_shot,
- size_t input_size, const uint8_t* data) {
- HashLongestMatch* self = FN(Self)(handle);
- uint16_t* num = FN(Num)(self);
- /* Partial preparation is 100 times slower (per socket). */
- size_t partial_prepare_threshold = self->bucket_size_ >> 6;
- if (one_shot && input_size <= partial_prepare_threshold) {
- size_t i;
- for (i = 0; i < input_size; ++i) {
- const uint32_t key = FN(HashBytes)(&data[i], self->hash_shift_);
- num[key] = 0;
- }
- } else {
- memset(num, 0, self->bucket_size_ * sizeof(num[0]));
- }
-}
-
-static BROTLI_INLINE size_t FN(HashMemAllocInBytes)(
- const BrotliEncoderParams* params, BROTLI_BOOL one_shot,
- size_t input_size) {
- size_t bucket_size = (size_t)1 << params->hasher.bucket_bits;
- size_t block_size = (size_t)1 << params->hasher.block_bits;
- BROTLI_UNUSED(one_shot);
- BROTLI_UNUSED(input_size);
- return sizeof(HashLongestMatch) + bucket_size * (2 + 4 * block_size);
-}
-
-/* Look at 4 bytes at &data[ix & mask].
- Compute a hash from these, and store the value of ix at that position. */
-static BROTLI_INLINE void FN(Store)(HasherHandle handle, const uint8_t* data,
- const size_t mask, const size_t ix) {
- HashLongestMatch* self = FN(Self)(handle);
- uint16_t* num = FN(Num)(self);
- const uint32_t key = FN(HashBytes)(&data[ix & mask], self->hash_shift_);
- const size_t minor_ix = num[key] & self->block_mask_;
- const size_t offset =
- minor_ix + (key << GetHasherCommon(handle)->params.block_bits);
- FN(Buckets)(self)[offset] = (uint32_t)ix;
- ++num[key];
-}
-
-static BROTLI_INLINE void FN(StoreRange)(HasherHandle handle,
- const uint8_t* data, const size_t mask, const size_t ix_start,
- const size_t ix_end) {
- size_t i;
- for (i = ix_start; i < ix_end; ++i) {
- FN(Store)(handle, data, mask, i);
- }
-}
-
-static BROTLI_INLINE void FN(StitchToPreviousBlock)(HasherHandle handle,
- size_t num_bytes, size_t position, const uint8_t* ringbuffer,
- size_t ringbuffer_mask) {
- if (num_bytes >= FN(HashTypeLength)() - 1 && position >= 3) {
- /* Prepare the hashes for three last bytes of the last write.
- These could not be calculated before, since they require knowledge
- of both the previous and the current block. */
- FN(Store)(handle, ringbuffer, ringbuffer_mask, position - 3);
- FN(Store)(handle, ringbuffer, ringbuffer_mask, position - 2);
- FN(Store)(handle, ringbuffer, ringbuffer_mask, position - 1);
- }
-}
-
-static BROTLI_INLINE void FN(PrepareDistanceCache)(
- HasherHandle handle, int* BROTLI_RESTRICT distance_cache) {
- PrepareDistanceCache(distance_cache,
- GetHasherCommon(handle)->params.num_last_distances_to_check);
-}
-
-/* Find a longest backward match of &data[cur_ix] up to the length of
- max_length and stores the position cur_ix in the hash table.
-
- REQUIRES: FN(PrepareDistanceCache) must be invoked for current distance cache
- values; if this method is invoked repeatedly with the same distance
- cache values, it is enough to invoke FN(PrepareDistanceCache) once.
-
- Does not look for matches longer than max_length.
- Does not look for matches further away than max_backward.
- Writes the best match into |out|.
- |out|->score is updated only if a better match is found. */
-static BROTLI_INLINE void FN(FindLongestMatch)(HasherHandle handle,
- const BrotliEncoderDictionary* dictionary,
- const uint8_t* BROTLI_RESTRICT data, const size_t ring_buffer_mask,
- const int* BROTLI_RESTRICT distance_cache, const size_t cur_ix,
- const size_t max_length, const size_t max_backward, const size_t gap,
- const size_t max_distance, HasherSearchResult* BROTLI_RESTRICT out) {
- HasherCommon* common = GetHasherCommon(handle);
- HashLongestMatch* self = FN(Self)(handle);
- uint16_t* num = FN(Num)(self);
- uint32_t* buckets = FN(Buckets)(self);
- const size_t cur_ix_masked = cur_ix & ring_buffer_mask;
- /* Don't accept a short copy from far away. */
- score_t min_score = out->score;
- score_t best_score = out->score;
- size_t best_len = out->len;
- size_t i;
- out->len = 0;
- out->len_code_delta = 0;
- /* Try last distance first. */
- for (i = 0; i < (size_t)common->params.num_last_distances_to_check; ++i) {
- const size_t backward = (size_t)distance_cache[i];
- size_t prev_ix = (size_t)(cur_ix - backward);
- if (prev_ix >= cur_ix) {
- continue;
- }
- if (BROTLI_PREDICT_FALSE(backward > max_backward)) {
- continue;
- }
- prev_ix &= ring_buffer_mask;
-
- if (cur_ix_masked + best_len > ring_buffer_mask ||
- prev_ix + best_len > ring_buffer_mask ||
- data[cur_ix_masked + best_len] != data[prev_ix + best_len]) {
- continue;
- }
- {
- const size_t len = FindMatchLengthWithLimit(&data[prev_ix],
- &data[cur_ix_masked],
- max_length);
- if (len >= 3 || (len == 2 && i < 2)) {
- /* Comparing for >= 2 does not change the semantics, but just saves for
- a few unnecessary binary logarithms in backward reference score,
- since we are not interested in such short matches. */
- score_t score = BackwardReferenceScoreUsingLastDistance(len);
- if (best_score < score) {
- if (i != 0) score -= BackwardReferencePenaltyUsingLastDistance(i);
- if (best_score < score) {
- best_score = score;
- best_len = len;
- out->len = best_len;
- out->distance = backward;
- out->score = best_score;
- }
- }
- }
- }
- }
- {
- const uint32_t key =
- FN(HashBytes)(&data[cur_ix_masked], self->hash_shift_);
- uint32_t* BROTLI_RESTRICT bucket =
- &buckets[key << common->params.block_bits];
- const size_t down =
- (num[key] > self->block_size_) ? (num[key] - self->block_size_) : 0u;
- for (i = num[key]; i > down;) {
- size_t prev_ix = bucket[--i & self->block_mask_];
- const size_t backward = cur_ix - prev_ix;
- if (BROTLI_PREDICT_FALSE(backward > max_backward)) {
- break;
- }
- prev_ix &= ring_buffer_mask;
- if (cur_ix_masked + best_len > ring_buffer_mask ||
- prev_ix + best_len > ring_buffer_mask ||
- data[cur_ix_masked + best_len] != data[prev_ix + best_len]) {
- continue;
- }
- {
- const size_t len = FindMatchLengthWithLimit(&data[prev_ix],
- &data[cur_ix_masked],
- max_length);
- if (len >= 4) {
- /* Comparing for >= 3 does not change the semantics, but just saves
- for a few unnecessary binary logarithms in backward reference
- score, since we are not interested in such short matches. */
- score_t score = BackwardReferenceScore(len, backward);
- if (best_score < score) {
- best_score = score;
- best_len = len;
- out->len = best_len;
- out->distance = backward;
- out->score = best_score;
- }
- }
- }
- }
- bucket[num[key] & self->block_mask_] = (uint32_t)cur_ix;
- ++num[key];
- }
- if (min_score == out->score) {
- SearchInStaticDictionary(dictionary,
- handle, &data[cur_ix_masked], max_length, max_backward + gap,
- max_distance, out, BROTLI_FALSE);
- }
-}
-
-#undef HashLongestMatch
diff --git a/BaseTools/Source/C/BrotliCompress/enc/hash_longest_match_quickly_inc.h b/BaseTools/Source/C/BrotliCompress/enc/hash_longest_match_quickly_inc.h
deleted file mode 100644
index 49338f97db48..000000000000
--- a/BaseTools/Source/C/BrotliCompress/enc/hash_longest_match_quickly_inc.h
+++ /dev/null
@@ -1,235 +0,0 @@
-/* NOLINT(build/header_guard) */
-/* Copyright 2010 Google Inc. All Rights Reserved.
-
- Distributed under MIT license.
- See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
-*/
-
-/* template parameters: FN, BUCKET_BITS, BUCKET_SWEEP, HASH_LEN,
- USE_DICTIONARY
- */
-
-#define HashLongestMatchQuickly HASHER()
-
-#define BUCKET_SIZE (1 << BUCKET_BITS)
-
-#define HASH_MAP_SIZE (4 << BUCKET_BITS)
-
-static BROTLI_INLINE size_t FN(HashTypeLength)(void) { return 8; }
-static BROTLI_INLINE size_t FN(StoreLookahead)(void) { return 8; }
-
-/* HashBytes is the function that chooses the bucket to place
- the address in. The HashLongestMatch and HashLongestMatchQuickly
- classes have separate, different implementations of hashing. */
-static uint32_t FN(HashBytes)(const uint8_t* data) {
- const uint64_t h = ((BROTLI_UNALIGNED_LOAD64LE(data) << (64 - 8 * HASH_LEN)) *
- kHashMul64);
- /* The higher bits contain more mixture from the multiplication,
- so we take our results from there. */
- return (uint32_t)(h >> (64 - BUCKET_BITS));
-}
-
-/* A (forgetful) hash table to the data seen by the compressor, to
- help create backward references to previous data.
-
- This is a hash map of fixed size (BUCKET_SIZE). Starting from the
- given index, BUCKET_SWEEP buckets are used to store values of a key. */
-typedef struct HashLongestMatchQuickly {
- uint32_t buckets_[BUCKET_SIZE + BUCKET_SWEEP];
-} HashLongestMatchQuickly;
-
-static BROTLI_INLINE HashLongestMatchQuickly* FN(Self)(HasherHandle handle) {
- return (HashLongestMatchQuickly*)&(GetHasherCommon(handle)[1]);
-}
-
-static void FN(Initialize)(
- HasherHandle handle, const BrotliEncoderParams* params) {
- BROTLI_UNUSED(handle);
- BROTLI_UNUSED(params);
-}
-
-static void FN(Prepare)(HasherHandle handle, BROTLI_BOOL one_shot,
- size_t input_size, const uint8_t* data) {
- HashLongestMatchQuickly* self = FN(Self)(handle);
- /* Partial preparation is 100 times slower (per socket). */
- size_t partial_prepare_threshold = HASH_MAP_SIZE >> 7;
- if (one_shot && input_size <= partial_prepare_threshold) {
- size_t i;
- for (i = 0; i < input_size; ++i) {
- const uint32_t key = FN(HashBytes)(&data[i]);
- memset(&self->buckets_[key], 0, BUCKET_SWEEP * sizeof(self->buckets_[0]));
- }
- } else {
- /* It is not strictly necessary to fill this buffer here, but
- not filling will make the results of the compression stochastic
- (but correct). This is because random data would cause the
- system to find accidentally good backward references here and there. */
- memset(&self->buckets_[0], 0, sizeof(self->buckets_));
- }
-}
-
-static BROTLI_INLINE size_t FN(HashMemAllocInBytes)(
- const BrotliEncoderParams* params, BROTLI_BOOL one_shot,
- size_t input_size) {
- BROTLI_UNUSED(params);
- BROTLI_UNUSED(one_shot);
- BROTLI_UNUSED(input_size);
- return sizeof(HashLongestMatchQuickly);
-}
-
-/* Look at 5 bytes at &data[ix & mask].
- Compute a hash from these, and store the value somewhere within
- [ix .. ix+3]. */
-static BROTLI_INLINE void FN(Store)(HasherHandle handle,
- const uint8_t* data, const size_t mask, const size_t ix) {
- const uint32_t key = FN(HashBytes)(&data[ix & mask]);
- /* Wiggle the value with the bucket sweep range. */
- const uint32_t off = (ix >> 3) % BUCKET_SWEEP;
- FN(Self)(handle)->buckets_[key + off] = (uint32_t)ix;
-}
-
-static BROTLI_INLINE void FN(StoreRange)(HasherHandle handle,
- const uint8_t* data, const size_t mask, const size_t ix_start,
- const size_t ix_end) {
- size_t i;
- for (i = ix_start; i < ix_end; ++i) {
- FN(Store)(handle, data, mask, i);
- }
-}
-
-static BROTLI_INLINE void FN(StitchToPreviousBlock)(
- HasherHandle handle, size_t num_bytes, size_t position,
- const uint8_t* ringbuffer, size_t ringbuffer_mask) {
- if (num_bytes >= FN(HashTypeLength)() - 1 && position >= 3) {
- /* Prepare the hashes for three last bytes of the last write.
- These could not be calculated before, since they require knowledge
- of both the previous and the current block. */
- FN(Store)(handle, ringbuffer, ringbuffer_mask, position - 3);
- FN(Store)(handle, ringbuffer, ringbuffer_mask, position - 2);
- FN(Store)(handle, ringbuffer, ringbuffer_mask, position - 1);
- }
-}
-
-static BROTLI_INLINE void FN(PrepareDistanceCache)(
- HasherHandle handle, int* BROTLI_RESTRICT distance_cache) {
- BROTLI_UNUSED(handle);
- BROTLI_UNUSED(distance_cache);
-}
-
-/* Find a longest backward match of &data[cur_ix & ring_buffer_mask]
- up to the length of max_length and stores the position cur_ix in the
- hash table.
-
- Does not look for matches longer than max_length.
- Does not look for matches further away than max_backward.
- Writes the best match into |out|.
- |out|->score is updated only if a better match is found. */
-static BROTLI_INLINE void FN(FindLongestMatch)(
- HasherHandle handle, const BrotliEncoderDictionary* dictionary,
- const uint8_t* BROTLI_RESTRICT data,
- const size_t ring_buffer_mask, const int* BROTLI_RESTRICT distance_cache,
- const size_t cur_ix, const size_t max_length, const size_t max_backward,
- const size_t gap, const size_t max_distance,
- HasherSearchResult* BROTLI_RESTRICT out) {
- HashLongestMatchQuickly* self = FN(Self)(handle);
- const size_t best_len_in = out->len;
- const size_t cur_ix_masked = cur_ix & ring_buffer_mask;
- const uint32_t key = FN(HashBytes)(&data[cur_ix_masked]);
- int compare_char = data[cur_ix_masked + best_len_in];
- score_t min_score = out->score;
- score_t best_score = out->score;
- size_t best_len = best_len_in;
- size_t cached_backward = (size_t)distance_cache[0];
- size_t prev_ix = cur_ix - cached_backward;
- out->len_code_delta = 0;
- if (prev_ix < cur_ix) {
- prev_ix &= (uint32_t)ring_buffer_mask;
- if (compare_char == data[prev_ix + best_len]) {
- size_t len = FindMatchLengthWithLimit(&data[prev_ix],
- &data[cur_ix_masked],
- max_length);
- if (len >= 4) {
- const score_t score = BackwardReferenceScoreUsingLastDistance(len);
- if (best_score < score) {
- best_score = score;
- best_len = len;
- out->len = len;
- out->distance = cached_backward;
- out->score = best_score;
- compare_char = data[cur_ix_masked + best_len];
- if (BUCKET_SWEEP == 1) {
- self->buckets_[key] = (uint32_t)cur_ix;
- return;
- }
- }
- }
- }
- }
- if (BUCKET_SWEEP == 1) {
- size_t backward;
- size_t len;
- /* Only one to look for, don't bother to prepare for a loop. */
- prev_ix = self->buckets_[key];
- self->buckets_[key] = (uint32_t)cur_ix;
- backward = cur_ix - prev_ix;
- prev_ix &= (uint32_t)ring_buffer_mask;
- if (compare_char != data[prev_ix + best_len_in]) {
- return;
- }
- if (BROTLI_PREDICT_FALSE(backward == 0 || backward > max_backward)) {
- return;
- }
- len = FindMatchLengthWithLimit(&data[prev_ix],
- &data[cur_ix_masked],
- max_length);
- if (len >= 4) {
- const score_t score = BackwardReferenceScore(len, backward);
- if (best_score < score) {
- out->len = len;
- out->distance = backward;
- out->score = score;
- return;
- }
- }
- } else {
- uint32_t* bucket = self->buckets_ + key;
- int i;
- prev_ix = *bucket++;
- for (i = 0; i < BUCKET_SWEEP; ++i, prev_ix = *bucket++) {
- const size_t backward = cur_ix - prev_ix;
- size_t len;
- prev_ix &= (uint32_t)ring_buffer_mask;
- if (compare_char != data[prev_ix + best_len]) {
- continue;
- }
- if (BROTLI_PREDICT_FALSE(backward == 0 || backward > max_backward)) {
- continue;
- }
- len = FindMatchLengthWithLimit(&data[prev_ix],
- &data[cur_ix_masked],
- max_length);
- if (len >= 4) {
- const score_t score = BackwardReferenceScore(len, backward);
- if (best_score < score) {
- best_score = score;
- best_len = len;
- out->len = best_len;
- out->distance = backward;
- out->score = score;
- compare_char = data[cur_ix_masked + best_len];
- }
- }
- }
- }
- if (USE_DICTIONARY && min_score == out->score) {
- SearchInStaticDictionary(dictionary,
- handle, &data[cur_ix_masked], max_length, max_backward + gap,
- max_distance, out, BROTLI_TRUE);
- }
- self->buckets_[key + ((cur_ix >> 3) % BUCKET_SWEEP)] = (uint32_t)cur_ix;
-}
-
-#undef HASH_MAP_SIZE
-#undef BUCKET_SIZE
-
-#undef HashLongestMatchQuickly
diff --git a/BaseTools/Source/C/BrotliCompress/enc/hash_rolling_inc.h b/BaseTools/Source/C/BrotliCompress/enc/hash_rolling_inc.h
deleted file mode 100644
index b8e3b21b5e33..000000000000
--- a/BaseTools/Source/C/BrotliCompress/enc/hash_rolling_inc.h
+++ /dev/null
@@ -1,215 +0,0 @@
-/* NOLINT(build/header_guard) */
-/* Copyright 2018 Google Inc. All Rights Reserved.
-
- Distributed under MIT license.
- See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
-*/
-
-/* template parameters: FN, JUMP, NUMBUCKETS, MASK, CHUNKLEN */
-/* NUMBUCKETS / (MASK + 1) = probability of storing and using hash code. */
-/* JUMP = skip bytes for speedup */
-
-/* Rolling hash for long distance long string matches. Stores one position
- per bucket, bucket key is computed over a long region. */
-
-#define HashRolling HASHER()
-
-static const uint32_t FN(kRollingHashMul32) = 69069;
-static const uint32_t FN(kInvalidPos) = 0xffffffff;
-
-/* This hasher uses a longer forward length, but returning a higher value here
- will hurt compression by the main hasher when combined with a composite
- hasher. The hasher tests for forward itself instead. */
-static BROTLI_INLINE size_t FN(HashTypeLength)(void) { return 4; }
-static BROTLI_INLINE size_t FN(StoreLookahead)(void) { return 4; }
-
-/* Computes a code from a single byte. A lookup table of 256 values could be
- used, but simply adding 1 works about as good. */
-static uint32_t FN(HashByte)(uint8_t byte) {
- return (uint32_t)byte + 1u;
-}
-
-static uint32_t FN(HashRollingFunctionInitial)(uint32_t state, uint8_t add,
- uint32_t factor) {
- return (uint32_t)(factor * state + FN(HashByte)(add));
-}
-
-static uint32_t FN(HashRollingFunction)(uint32_t state, uint8_t add,
- uint8_t rem, uint32_t factor,
- uint32_t factor_remove) {
- return (uint32_t)(factor * state +
- FN(HashByte)(add) - factor_remove * FN(HashByte)(rem));
-}
-
-typedef struct HashRolling {
- uint32_t state;
- uint32_t* table;
- size_t next_ix;
-
- uint32_t chunk_len;
- uint32_t factor;
- uint32_t factor_remove;
-} HashRolling;
-
-static BROTLI_INLINE HashRolling* FN(Self)(HasherHandle handle) {
- return (HashRolling*)&(GetHasherCommon(handle)[1]);
-}
-
-static void FN(Initialize)(
- HasherHandle handle, const BrotliEncoderParams* params) {
- HashRolling* self = FN(Self)(handle);
- size_t i;
- self->state = 0;
- self->next_ix = 0;
-
- self->factor = FN(kRollingHashMul32);
-
- /* Compute the factor of the oldest byte to remove: factor**steps modulo
- 0xffffffff (the multiplications rely on 32-bit overflow) */
- self->factor_remove = 1;
- for (i = 0; i < CHUNKLEN; i += JUMP) {
- self->factor_remove *= self->factor;
- }
-
- self->table = (uint32_t*)((HasherHandle)self + sizeof(HashRolling));
- for (i = 0; i < NUMBUCKETS; i++) {
- self->table[i] = FN(kInvalidPos);
- }
-
- BROTLI_UNUSED(params);
-}
-
-static void FN(Prepare)(HasherHandle handle, BROTLI_BOOL one_shot,
- size_t input_size, const uint8_t* data) {
- HashRolling* self = FN(Self)(handle);
- size_t i;
- /* Too small size, cannot use this hasher. */
- if (input_size < CHUNKLEN) return;
- self->state = 0;
- for (i = 0; i < CHUNKLEN; i += JUMP) {
- self->state = FN(HashRollingFunctionInitial)(
- self->state, data[i], self->factor);
- }
- BROTLI_UNUSED(one_shot);
-}
-
-static BROTLI_INLINE size_t FN(HashMemAllocInBytes)(
- const BrotliEncoderParams* params, BROTLI_BOOL one_shot,
- size_t input_size) {
- return sizeof(HashRolling) + NUMBUCKETS * sizeof(uint32_t);
- BROTLI_UNUSED(params);
- BROTLI_UNUSED(one_shot);
- BROTLI_UNUSED(input_size);
-}
-
-static BROTLI_INLINE void FN(Store)(HasherHandle BROTLI_RESTRICT handle,
- const uint8_t* BROTLI_RESTRICT data, const size_t mask, const size_t ix) {
- BROTLI_UNUSED(handle);
- BROTLI_UNUSED(data);
- BROTLI_UNUSED(mask);
- BROTLI_UNUSED(ix);
-}
-
-static BROTLI_INLINE void FN(StoreRange)(HasherHandle handle,
- const uint8_t* data, const size_t mask, const size_t ix_start,
- const size_t ix_end) {
- BROTLI_UNUSED(handle);
- BROTLI_UNUSED(data);
- BROTLI_UNUSED(mask);
- BROTLI_UNUSED(ix_start);
- BROTLI_UNUSED(ix_end);
-}
-
-static BROTLI_INLINE void FN(StitchToPreviousBlock)(HasherHandle handle,
- size_t num_bytes, size_t position, const uint8_t* ringbuffer,
- size_t ring_buffer_mask) {
- /* In this case we must re-initialize the hasher from scratch from the
- current position. */
- HashRolling* self = FN(Self)(handle);
- size_t position_masked;
- size_t available = num_bytes;
- if ((position & (JUMP - 1)) != 0) {
- size_t diff = JUMP - (position & (JUMP - 1));
- available = (diff > available) ? 0 : (available - diff);
- position += diff;
- }
- position_masked = position & ring_buffer_mask;
- /* wrapping around ringbuffer not handled. */
- if (available > ring_buffer_mask - position_masked) {
- available = ring_buffer_mask - position_masked;
- }
-
- FN(Prepare)(handle, BROTLI_FALSE, available,
- ringbuffer + (position & ring_buffer_mask));
- self->next_ix = position;
- BROTLI_UNUSED(num_bytes);
-}
-
-static BROTLI_INLINE void FN(PrepareDistanceCache)(
- HasherHandle handle, int* BROTLI_RESTRICT distance_cache) {
- BROTLI_UNUSED(handle);
- BROTLI_UNUSED(distance_cache);
-}
-
-static BROTLI_INLINE void FN(FindLongestMatch)(HasherHandle handle,
- const BrotliEncoderDictionary* dictionary,
- const uint8_t* BROTLI_RESTRICT data, const size_t ring_buffer_mask,
- const int* BROTLI_RESTRICT distance_cache, const size_t cur_ix,
- const size_t max_length, const size_t max_backward, const size_t gap,
- const size_t max_distance, HasherSearchResult* BROTLI_RESTRICT out) {
- HashRolling* self = FN(Self)(handle);
- const size_t cur_ix_masked = cur_ix & ring_buffer_mask;
- size_t pos = self->next_ix;
-
- if ((cur_ix & (JUMP - 1)) != 0) return;
-
- /* Not enough lookahead */
- if (max_length < CHUNKLEN) return;
-
- for (pos = self->next_ix; pos <= cur_ix; pos += JUMP) {
- uint32_t code = self->state & MASK;
-
- uint8_t rem = data[pos & ring_buffer_mask];
- uint8_t add = data[(pos + CHUNKLEN) & ring_buffer_mask];
- size_t found_ix = FN(kInvalidPos);
-
- self->state = FN(HashRollingFunction)(
- self->state, add, rem, self->factor, self->factor_remove);
-
- if (code < NUMBUCKETS) {
- found_ix = self->table[code];
- self->table[code] = (uint32_t)pos;
- if (pos == cur_ix && found_ix != FN(kInvalidPos)) {
- /* The cast to 32-bit makes backward distances up to 4GB work even
- if cur_ix is above 4GB, despite using 32-bit values in the table. */
- size_t backward = (uint32_t)(cur_ix - found_ix);
- if (backward <= max_backward) {
- const size_t found_ix_masked = found_ix & ring_buffer_mask;
- const size_t len = FindMatchLengthWithLimit(&data[found_ix_masked],
- &data[cur_ix_masked],
- max_length);
- if (len >= 4 && len > out->len) {
- score_t score = BackwardReferenceScore(len, backward);
- if (score > out->score) {
- out->len = len;
- out->distance = backward;
- out->score = score;
- out->len_code_delta = 0;
- }
- }
- }
- }
- }
- }
-
- self->next_ix = cur_ix + JUMP;
-
- /* NOTE: this hasher does not search in the dictionary. It is used as
- backup-hasher, the main hasher already searches in it. */
- BROTLI_UNUSED(dictionary);
- BROTLI_UNUSED(distance_cache);
- BROTLI_UNUSED(gap);
- BROTLI_UNUSED(max_distance);
-}
-
-#undef HashRolling
diff --git a/BaseTools/Source/C/BrotliCompress/enc/hash_to_binary_tree_inc.h b/BaseTools/Source/C/BrotliCompress/enc/hash_to_binary_tree_inc.h
deleted file mode 100644
index 09c2642030b0..000000000000
--- a/BaseTools/Source/C/BrotliCompress/enc/hash_to_binary_tree_inc.h
+++ /dev/null
@@ -1,327 +0,0 @@
-/* NOLINT(build/header_guard) */
-/* Copyright 2016 Google Inc. All Rights Reserved.
-
- Distributed under MIT license.
- See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
-*/
-
-/* template parameters: FN, BUCKET_BITS, MAX_TREE_COMP_LENGTH,
- MAX_TREE_SEARCH_DEPTH */
-
-/* A (forgetful) hash table where each hash bucket contains a binary tree of
- sequences whose first 4 bytes share the same hash code.
- Each sequence is MAX_TREE_COMP_LENGTH long and is identified by its starting
- position in the input data. The binary tree is sorted by the lexicographic
- order of the sequences, and it is also a max-heap with respect to the
- starting positions. */
-
-#define HashToBinaryTree HASHER()
-
-#define BUCKET_SIZE (1 << BUCKET_BITS)
-
-static BROTLI_INLINE size_t FN(HashTypeLength)(void) { return 4; }
-static BROTLI_INLINE size_t FN(StoreLookahead)(void) {
- return MAX_TREE_COMP_LENGTH;
-}
-
-static uint32_t FN(HashBytes)(const uint8_t* data) {
- uint32_t h = BROTLI_UNALIGNED_LOAD32LE(data) * kHashMul32;
- /* The higher bits contain more mixture from the multiplication,
- so we take our results from there. */
- return h >> (32 - BUCKET_BITS);
-}
-
-typedef struct HashToBinaryTree {
- /* The window size minus 1 */
- size_t window_mask_;
-
- /* Hash table that maps the 4-byte hashes of the sequence to the last
- position where this hash was found, which is the root of the binary
- tree of sequences that share this hash bucket. */
- uint32_t buckets_[BUCKET_SIZE];
-
- /* A position used to mark a non-existent sequence, i.e. a tree is empty if
- its root is at invalid_pos_ and a node is a leaf if both its children
- are at invalid_pos_. */
- uint32_t invalid_pos_;
-
- /* --- Dynamic size members --- */
-
- /* The union of the binary trees of each hash bucket. The root of the tree
- corresponding to a hash is a sequence starting at buckets_[hash] and
- the left and right children of a sequence starting at pos are
- forest_[2 * pos] and forest_[2 * pos + 1]. */
- /* uint32_t forest[2 * num_nodes] */
-} HashToBinaryTree;
-
-static BROTLI_INLINE HashToBinaryTree* FN(Self)(HasherHandle handle) {
- return (HashToBinaryTree*)&(GetHasherCommon(handle)[1]);
-}
-
-static BROTLI_INLINE uint32_t* FN(Forest)(HashToBinaryTree* self) {
- return (uint32_t*)(&self[1]);
-}
-
-static void FN(Initialize)(
- HasherHandle handle, const BrotliEncoderParams* params) {
- HashToBinaryTree* self = FN(Self)(handle);
- self->window_mask_ = (1u << params->lgwin) - 1u;
- self->invalid_pos_ = (uint32_t)(0 - self->window_mask_);
-}
-
-static void FN(Prepare)(HasherHandle handle, BROTLI_BOOL one_shot,
- size_t input_size, const uint8_t* data) {
- HashToBinaryTree* self = FN(Self)(handle);
- uint32_t invalid_pos = self->invalid_pos_;
- uint32_t i;
- BROTLI_UNUSED(data);
- BROTLI_UNUSED(one_shot);
- BROTLI_UNUSED(input_size);
- for (i = 0; i < BUCKET_SIZE; i++) {
- self->buckets_[i] = invalid_pos;
- }
-}
-
-static BROTLI_INLINE size_t FN(HashMemAllocInBytes)(
- const BrotliEncoderParams* params, BROTLI_BOOL one_shot,
- size_t input_size) {
- size_t num_nodes = (size_t)1 << params->lgwin;
- if (one_shot && input_size < num_nodes) {
- num_nodes = input_size;
- }
- return sizeof(HashToBinaryTree) + 2 * sizeof(uint32_t) * num_nodes;
-}
-
-static BROTLI_INLINE size_t FN(LeftChildIndex)(HashToBinaryTree* self,
- const size_t pos) {
- return 2 * (pos & self->window_mask_);
-}
-
-static BROTLI_INLINE size_t FN(RightChildIndex)(HashToBinaryTree* self,
- const size_t pos) {
- return 2 * (pos & self->window_mask_) + 1;
-}
-
-/* Stores the hash of the next 4 bytes and in a single tree-traversal, the
- hash bucket's binary tree is searched for matches and is re-rooted at the
- current position.
-
- If less than MAX_TREE_COMP_LENGTH data is available, the hash bucket of the
- current position is searched for matches, but the state of the hash table
- is not changed, since we can not know the final sorting order of the
- current (incomplete) sequence.
-
- This function must be called with increasing cur_ix positions. */
-static BROTLI_INLINE BackwardMatch* FN(StoreAndFindMatches)(
- HashToBinaryTree* self, const uint8_t* const BROTLI_RESTRICT data,
- const size_t cur_ix, const size_t ring_buffer_mask, const size_t max_length,
- const size_t max_backward, size_t* const BROTLI_RESTRICT best_len,
- BackwardMatch* BROTLI_RESTRICT matches) {
- const size_t cur_ix_masked = cur_ix & ring_buffer_mask;
- const size_t max_comp_len =
- BROTLI_MIN(size_t, max_length, MAX_TREE_COMP_LENGTH);
- const BROTLI_BOOL should_reroot_tree =
- TO_BROTLI_BOOL(max_length >= MAX_TREE_COMP_LENGTH);
- const uint32_t key = FN(HashBytes)(&data[cur_ix_masked]);
- uint32_t* forest = FN(Forest)(self);
- size_t prev_ix = self->buckets_[key];
- /* The forest index of the rightmost node of the left subtree of the new
- root, updated as we traverse and re-root the tree of the hash bucket. */
- size_t node_left = FN(LeftChildIndex)(self, cur_ix);
- /* The forest index of the leftmost node of the right subtree of the new
- root, updated as we traverse and re-root the tree of the hash bucket. */
- size_t node_right = FN(RightChildIndex)(self, cur_ix);
- /* The match length of the rightmost node of the left subtree of the new
- root, updated as we traverse and re-root the tree of the hash bucket. */
- size_t best_len_left = 0;
- /* The match length of the leftmost node of the right subtree of the new
- root, updated as we traverse and re-root the tree of the hash bucket. */
- size_t best_len_right = 0;
- size_t depth_remaining;
- if (should_reroot_tree) {
- self->buckets_[key] = (uint32_t)cur_ix;
- }
- for (depth_remaining = MAX_TREE_SEARCH_DEPTH; ; --depth_remaining) {
- const size_t backward = cur_ix - prev_ix;
- const size_t prev_ix_masked = prev_ix & ring_buffer_mask;
- if (backward == 0 || backward > max_backward || depth_remaining == 0) {
- if (should_reroot_tree) {
- forest[node_left] = self->invalid_pos_;
- forest[node_right] = self->invalid_pos_;
- }
- break;
- }
- {
- const size_t cur_len = BROTLI_MIN(size_t, best_len_left, best_len_right);
- size_t len;
- BROTLI_DCHECK(cur_len <= MAX_TREE_COMP_LENGTH);
- len = cur_len +
- FindMatchLengthWithLimit(&data[cur_ix_masked + cur_len],
- &data[prev_ix_masked + cur_len],
- max_length - cur_len);
- BROTLI_DCHECK(
- 0 == memcmp(&data[cur_ix_masked], &data[prev_ix_masked], len));
- if (matches && len > *best_len) {
- *best_len = len;
- InitBackwardMatch(matches++, backward, len);
- }
- if (len >= max_comp_len) {
- if (should_reroot_tree) {
- forest[node_left] = forest[FN(LeftChildIndex)(self, prev_ix)];
- forest[node_right] = forest[FN(RightChildIndex)(self, prev_ix)];
- }
- break;
- }
- if (data[cur_ix_masked + len] > data[prev_ix_masked + len]) {
- best_len_left = len;
- if (should_reroot_tree) {
- forest[node_left] = (uint32_t)prev_ix;
- }
- node_left = FN(RightChildIndex)(self, prev_ix);
- prev_ix = forest[node_left];
- } else {
- best_len_right = len;
- if (should_reroot_tree) {
- forest[node_right] = (uint32_t)prev_ix;
- }
- node_right = FN(LeftChildIndex)(self, prev_ix);
- prev_ix = forest[node_right];
- }
- }
- }
- return matches;
-}
-
-/* Finds all backward matches of &data[cur_ix & ring_buffer_mask] up to the
- length of max_length and stores the position cur_ix in the hash table.
-
- Sets *num_matches to the number of matches found, and stores the found
- matches in matches[0] to matches[*num_matches - 1]. The matches will be
- sorted by strictly increasing length and (non-strictly) increasing
- distance. */
-static BROTLI_INLINE size_t FN(FindAllMatches)(HasherHandle handle,
- const BrotliEncoderDictionary* dictionary, const uint8_t* data,
- const size_t ring_buffer_mask, const size_t cur_ix,
- const size_t max_length, const size_t max_backward, const size_t gap,
- const BrotliEncoderParams* params, BackwardMatch* matches) {
- BackwardMatch* const orig_matches = matches;
- const size_t cur_ix_masked = cur_ix & ring_buffer_mask;
- size_t best_len = 1;
- const size_t short_match_max_backward =
- params->quality != HQ_ZOPFLIFICATION_QUALITY ? 16 : 64;
- size_t stop = cur_ix - short_match_max_backward;
- uint32_t dict_matches[BROTLI_MAX_STATIC_DICTIONARY_MATCH_LEN + 1];
- size_t i;
- if (cur_ix < short_match_max_backward) { stop = 0; }
- for (i = cur_ix - 1; i > stop && best_len <= 2; --i) {
- size_t prev_ix = i;
- const size_t backward = cur_ix - prev_ix;
- if (BROTLI_PREDICT_FALSE(backward > max_backward)) {
- break;
- }
- prev_ix &= ring_buffer_mask;
- if (data[cur_ix_masked] != data[prev_ix] ||
- data[cur_ix_masked + 1] != data[prev_ix + 1]) {
- continue;
- }
- {
- const size_t len =
- FindMatchLengthWithLimit(&data[prev_ix], &data[cur_ix_masked],
- max_length);
- if (len > best_len) {
- best_len = len;
- InitBackwardMatch(matches++, backward, len);
- }
- }
- }
- if (best_len < max_length) {
- matches = FN(StoreAndFindMatches)(FN(Self)(handle), data, cur_ix,
- ring_buffer_mask, max_length, max_backward, &best_len, matches);
- }
- for (i = 0; i <= BROTLI_MAX_STATIC_DICTIONARY_MATCH_LEN; ++i) {
- dict_matches[i] = kInvalidMatch;
- }
- {
- size_t minlen = BROTLI_MAX(size_t, 4, best_len + 1);
- if (BrotliFindAllStaticDictionaryMatches(dictionary,
- &data[cur_ix_masked], minlen, max_length, &dict_matches[0])) {
- size_t maxlen = BROTLI_MIN(
- size_t, BROTLI_MAX_STATIC_DICTIONARY_MATCH_LEN, max_length);
- size_t l;
- for (l = minlen; l <= maxlen; ++l) {
- uint32_t dict_id = dict_matches[l];
- if (dict_id < kInvalidMatch) {
- size_t distance = max_backward + gap + (dict_id >> 5) + 1;
- if (distance <= params->dist.max_distance) {
- InitDictionaryBackwardMatch(matches++, distance, l, dict_id & 31);
- }
- }
- }
- }
- }
- return (size_t)(matches - orig_matches);
-}
-
-/* Stores the hash of the next 4 bytes and re-roots the binary tree at the
- current sequence, without returning any matches.
- REQUIRES: ix + MAX_TREE_COMP_LENGTH <= end-of-current-block */
-static BROTLI_INLINE void FN(Store)(HasherHandle handle, const uint8_t* data,
- const size_t mask, const size_t ix) {
- HashToBinaryTree* self = FN(Self)(handle);
- /* Maximum distance is window size - 16, see section 9.1. of the spec. */
- const size_t max_backward = self->window_mask_ - BROTLI_WINDOW_GAP + 1;
- FN(StoreAndFindMatches)(self, data, ix, mask, MAX_TREE_COMP_LENGTH,
- max_backward, NULL, NULL);
-}
-
-static BROTLI_INLINE void FN(StoreRange)(HasherHandle handle,
- const uint8_t* data, const size_t mask, const size_t ix_start,
- const size_t ix_end) {
- size_t i = ix_start;
- size_t j = ix_start;
- if (ix_start + 63 <= ix_end) {
- i = ix_end - 63;
- }
- if (ix_start + 512 <= i) {
- for (; j < i; j += 8) {
- FN(Store)(handle, data, mask, j);
- }
- }
- for (; i < ix_end; ++i) {
- FN(Store)(handle, data, mask, i);
- }
-}
-
-static BROTLI_INLINE void FN(StitchToPreviousBlock)(HasherHandle handle,
- size_t num_bytes, size_t position, const uint8_t* ringbuffer,
- size_t ringbuffer_mask) {
- HashToBinaryTree* self = FN(Self)(handle);
- if (num_bytes >= FN(HashTypeLength)() - 1 &&
- position >= MAX_TREE_COMP_LENGTH) {
- /* Store the last `MAX_TREE_COMP_LENGTH - 1` positions in the hasher.
- These could not be calculated before, since they require knowledge
- of both the previous and the current block. */
- const size_t i_start = position - MAX_TREE_COMP_LENGTH + 1;
- const size_t i_end = BROTLI_MIN(size_t, position, i_start + num_bytes);
- size_t i;
- for (i = i_start; i < i_end; ++i) {
- /* Maximum distance is window size - 16, see section 9.1. of the spec.
- Furthermore, we have to make sure that we don't look further back
- from the start of the next block than the window size, otherwise we
- could access already overwritten areas of the ring-buffer. */
- const size_t max_backward =
- self->window_mask_ - BROTLI_MAX(size_t,
- BROTLI_WINDOW_GAP - 1,
- position - i);
- /* We know that i + MAX_TREE_COMP_LENGTH <= position + num_bytes, i.e. the
- end of the current block and that we have at least
- MAX_TREE_COMP_LENGTH tail in the ring-buffer. */
- FN(StoreAndFindMatches)(self, ringbuffer, i, ringbuffer_mask,
- MAX_TREE_COMP_LENGTH, max_backward, NULL, NULL);
- }
- }
-}
-
-#undef BUCKET_SIZE
-
-#undef HashToBinaryTree
diff --git a/BaseTools/Source/C/BrotliCompress/enc/histogram.h b/BaseTools/Source/C/BrotliCompress/enc/histogram.h
deleted file mode 100644
index c08a4cac2bfa..000000000000
--- a/BaseTools/Source/C/BrotliCompress/enc/histogram.h
+++ /dev/null
@@ -1,63 +0,0 @@
-/* Copyright 2013 Google Inc. All Rights Reserved.
-
- Distributed under MIT license.
- See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
-*/
-
-/* Models the histograms of literals, commands and distance codes. */
-
-#ifndef BROTLI_ENC_HISTOGRAM_H_
-#define BROTLI_ENC_HISTOGRAM_H_
-
-#include <string.h> /* memset */
-
-#include "../common/constants.h"
-#include "../common/context.h"
-#include "../common/platform.h"
-#include <brotli/types.h>
-#include "./block_splitter.h"
-#include "./command.h"
-
-#if defined(__cplusplus) || defined(c_plusplus)
-extern "C" {
-#endif
-
-/* The distance symbols effectively used by "Large Window Brotli" (32-bit). */
-#define BROTLI_NUM_HISTOGRAM_DISTANCE_SYMBOLS 544
-
-#define FN(X) X ## Literal
-#define DATA_SIZE BROTLI_NUM_LITERAL_SYMBOLS
-#define DataType uint8_t
-#include "./histogram_inc.h" /* NOLINT(build/include) */
-#undef DataType
-#undef DATA_SIZE
-#undef FN
-
-#define FN(X) X ## Command
-#define DataType uint16_t
-#define DATA_SIZE BROTLI_NUM_COMMAND_SYMBOLS
-#include "./histogram_inc.h" /* NOLINT(build/include) */
-#undef DATA_SIZE
-#undef FN
-
-#define FN(X) X ## Distance
-#define DATA_SIZE BROTLI_NUM_HISTOGRAM_DISTANCE_SYMBOLS
-#include "./histogram_inc.h" /* NOLINT(build/include) */
-#undef DataType
-#undef DATA_SIZE
-#undef FN
-
-BROTLI_INTERNAL void BrotliBuildHistogramsWithContext(
- const Command* cmds, const size_t num_commands,
- const BlockSplit* literal_split, const BlockSplit* insert_and_copy_split,
- const BlockSplit* dist_split, const uint8_t* ringbuffer, size_t pos,
- size_t mask, uint8_t prev_byte, uint8_t prev_byte2,
- const ContextType* context_modes, HistogramLiteral* literal_histograms,
- HistogramCommand* insert_and_copy_histograms,
- HistogramDistance* copy_dist_histograms);
-
-#if defined(__cplusplus) || defined(c_plusplus)
-} /* extern "C" */
-#endif
-
-#endif /* BROTLI_ENC_HISTOGRAM_H_ */
diff --git a/BaseTools/Source/C/BrotliCompress/enc/histogram_inc.h b/BaseTools/Source/C/BrotliCompress/enc/histogram_inc.h
deleted file mode 100644
index a9d2e7018d60..000000000000
--- a/BaseTools/Source/C/BrotliCompress/enc/histogram_inc.h
+++ /dev/null
@@ -1,51 +0,0 @@
-/* NOLINT(build/header_guard) */
-/* Copyright 2013 Google Inc. All Rights Reserved.
-
- Distributed under MIT license.
- See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
-*/
-
-/* template parameters: Histogram, DATA_SIZE, DataType */
-
-/* A simple container for histograms of data in blocks. */
-
-typedef struct FN(Histogram) {
- uint32_t data_[DATA_SIZE];
- size_t total_count_;
- double bit_cost_;
-} FN(Histogram);
-
-static BROTLI_INLINE void FN(HistogramClear)(FN(Histogram)* self) {
- memset(self->data_, 0, sizeof(self->data_));
- self->total_count_ = 0;
- self->bit_cost_ = HUGE_VAL;
-}
-
-static BROTLI_INLINE void FN(ClearHistograms)(
- FN(Histogram)* array, size_t length) {
- size_t i;
- for (i = 0; i < length; ++i) FN(HistogramClear)(array + i);
-}
-
-static BROTLI_INLINE void FN(HistogramAdd)(FN(Histogram)* self, size_t val) {
- ++self->data_[val];
- ++self->total_count_;
-}
-
-static BROTLI_INLINE void FN(HistogramAddVector)(FN(Histogram)* self,
- const DataType* p, size_t n) {
- self->total_count_ += n;
- n += 1;
- while (--n) ++self->data_[*p++];
-}
-
-static BROTLI_INLINE void FN(HistogramAddHistogram)(FN(Histogram)* self,
- const FN(Histogram)* v) {
- size_t i;
- self->total_count_ += v->total_count_;
- for (i = 0; i < DATA_SIZE; ++i) {
- self->data_[i] += v->data_[i];
- }
-}
-
-static BROTLI_INLINE size_t FN(HistogramDataSize)(void) { return DATA_SIZE; }
diff --git a/BaseTools/Source/C/BrotliCompress/enc/literal_cost.h b/BaseTools/Source/C/BrotliCompress/enc/literal_cost.h
deleted file mode 100644
index 4891a26d5012..000000000000
--- a/BaseTools/Source/C/BrotliCompress/enc/literal_cost.h
+++ /dev/null
@@ -1,30 +0,0 @@
-/* Copyright 2013 Google Inc. All Rights Reserved.
-
- Distributed under MIT license.
- See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
-*/
-
-/* Literal cost model to allow backward reference replacement to be efficient.
-*/
-
-#ifndef BROTLI_ENC_LITERAL_COST_H_
-#define BROTLI_ENC_LITERAL_COST_H_
-
-#include "../common/platform.h"
-#include <brotli/types.h>
-
-#if defined(__cplusplus) || defined(c_plusplus)
-extern "C" {
-#endif
-
-/* Estimates how many bits the literals in the interval [pos, pos + len) in the
- ring-buffer (data, mask) will take entropy coded and writes these estimates
- to the cost[0..len) array. */
-BROTLI_INTERNAL void BrotliEstimateBitCostsForLiterals(
- size_t pos, size_t len, size_t mask, const uint8_t* data, float* cost);
-
-#if defined(__cplusplus) || defined(c_plusplus)
-} /* extern "C" */
-#endif
-
-#endif /* BROTLI_ENC_LITERAL_COST_H_ */
diff --git a/BaseTools/Source/C/BrotliCompress/enc/memory.h b/BaseTools/Source/C/BrotliCompress/enc/memory.h
deleted file mode 100644
index 2bd4d0c872a6..000000000000
--- a/BaseTools/Source/C/BrotliCompress/enc/memory.h
+++ /dev/null
@@ -1,102 +0,0 @@
-/* Copyright 2016 Google Inc. All Rights Reserved.
-
- Distributed under MIT license.
- See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
-*/
-
-/* Macros for memory management. */
-
-#ifndef BROTLI_ENC_MEMORY_H_
-#define BROTLI_ENC_MEMORY_H_
-
-#include <string.h> /* memcpy */
-
-#include "../common/platform.h"
-#include <brotli/types.h>
-
-#if defined(__cplusplus) || defined(c_plusplus)
-extern "C" {
-#endif
-
-#if !defined(BROTLI_ENCODER_CLEANUP_ON_OOM) && \
- !defined(BROTLI_ENCODER_EXIT_ON_OOM)
-#define BROTLI_ENCODER_EXIT_ON_OOM
-#endif
-
-typedef struct MemoryManager {
- brotli_alloc_func alloc_func;
- brotli_free_func free_func;
- void* opaque;
-#if !defined(BROTLI_ENCODER_EXIT_ON_OOM)
- BROTLI_BOOL is_oom;
- size_t perm_allocated;
- size_t new_allocated;
- size_t new_freed;
- void* pointers[256];
-#endif /* BROTLI_ENCODER_EXIT_ON_OOM */
-} MemoryManager;
-
-BROTLI_INTERNAL void BrotliInitMemoryManager(
- MemoryManager* m, brotli_alloc_func alloc_func, brotli_free_func free_func,
- void* opaque);
-
-BROTLI_INTERNAL void* BrotliAllocate(MemoryManager* m, size_t n);
-#define BROTLI_ALLOC(M, T, N) \
- ((N) > 0 ? ((T*)BrotliAllocate((M), (N) * sizeof(T))) : NULL)
-
-BROTLI_INTERNAL void BrotliFree(MemoryManager* m, void* p);
-#define BROTLI_FREE(M, P) { \
- BrotliFree((M), (P)); \
- P = NULL; \
-}
-
-#if defined(BROTLI_ENCODER_EXIT_ON_OOM)
-#define BROTLI_IS_OOM(M) (!!0)
-#else /* BROTLI_ENCODER_EXIT_ON_OOM */
-#define BROTLI_IS_OOM(M) (!!(M)->is_oom)
-#endif /* BROTLI_ENCODER_EXIT_ON_OOM */
-
-BROTLI_INTERNAL void BrotliWipeOutMemoryManager(MemoryManager* m);
-
-/*
-Dynamically grows array capacity to at least the requested size
-M: MemoryManager
-T: data type
-A: array
-C: capacity
-R: requested size
-*/
-#define BROTLI_ENSURE_CAPACITY(M, T, A, C, R) { \
- if (C < (R)) { \
- size_t _new_size = (C == 0) ? (R) : C; \
- T* new_array; \
- while (_new_size < (R)) _new_size *= 2; \
- new_array = BROTLI_ALLOC((M), T, _new_size); \
- if (!BROTLI_IS_OOM(M) && C != 0) \
- memcpy(new_array, A, C * sizeof(T)); \
- BROTLI_FREE((M), A); \
- A = new_array; \
- C = _new_size; \
- } \
-}
-
-/*
-Appends value and dynamically grows array capacity when needed
-M: MemoryManager
-T: data type
-A: array
-C: array capacity
-S: array size
-V: value to append
-*/
-#define BROTLI_ENSURE_CAPACITY_APPEND(M, T, A, C, S, V) { \
- (S)++; \
- BROTLI_ENSURE_CAPACITY(M, T, A, C, S); \
- A[(S) - 1] = (V); \
-}
-
-#if defined(__cplusplus) || defined(c_plusplus)
-} /* extern "C" */
-#endif
-
-#endif /* BROTLI_ENC_MEMORY_H_ */
diff --git a/BaseTools/Source/C/BrotliCompress/enc/metablock.h b/BaseTools/Source/C/BrotliCompress/enc/metablock.h
deleted file mode 100644
index e35c98554f7a..000000000000
--- a/BaseTools/Source/C/BrotliCompress/enc/metablock.h
+++ /dev/null
@@ -1,105 +0,0 @@
-/* Copyright 2015 Google Inc. All Rights Reserved.
-
- Distributed under MIT license.
- See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
-*/
-
-/* Algorithms for distributing the literals and commands of a metablock between
- block types and contexts. */
-
-#ifndef BROTLI_ENC_METABLOCK_H_
-#define BROTLI_ENC_METABLOCK_H_
-
-#include "../common/context.h"
-#include "../common/platform.h"
-#include <brotli/types.h>
-#include "./block_splitter.h"
-#include "./command.h"
-#include "./histogram.h"
-#include "./memory.h"
-#include "./quality.h"
-
-#if defined(__cplusplus) || defined(c_plusplus)
-extern "C" {
-#endif
-
-typedef struct MetaBlockSplit {
- BlockSplit literal_split;
- BlockSplit command_split;
- BlockSplit distance_split;
- uint32_t* literal_context_map;
- size_t literal_context_map_size;
- uint32_t* distance_context_map;
- size_t distance_context_map_size;
- HistogramLiteral* literal_histograms;
- size_t literal_histograms_size;
- HistogramCommand* command_histograms;
- size_t command_histograms_size;
- HistogramDistance* distance_histograms;
- size_t distance_histograms_size;
-} MetaBlockSplit;
-
-static BROTLI_INLINE void InitMetaBlockSplit(MetaBlockSplit* mb) {
- BrotliInitBlockSplit(&mb->literal_split);
- BrotliInitBlockSplit(&mb->command_split);
- BrotliInitBlockSplit(&mb->distance_split);
- mb->literal_context_map = 0;
- mb->literal_context_map_size = 0;
- mb->distance_context_map = 0;
- mb->distance_context_map_size = 0;
- mb->literal_histograms = 0;
- mb->literal_histograms_size = 0;
- mb->command_histograms = 0;
- mb->command_histograms_size = 0;
- mb->distance_histograms = 0;
- mb->distance_histograms_size = 0;
-}
-
-static BROTLI_INLINE void DestroyMetaBlockSplit(
- MemoryManager* m, MetaBlockSplit* mb) {
- BrotliDestroyBlockSplit(m, &mb->literal_split);
- BrotliDestroyBlockSplit(m, &mb->command_split);
- BrotliDestroyBlockSplit(m, &mb->distance_split);
- BROTLI_FREE(m, mb->literal_context_map);
- BROTLI_FREE(m, mb->distance_context_map);
- BROTLI_FREE(m, mb->literal_histograms);
- BROTLI_FREE(m, mb->command_histograms);
- BROTLI_FREE(m, mb->distance_histograms);
-}
-
-/* Uses the slow shortest-path block splitter and does context clustering.
- The distance parameters are dynamically selected based on the commands
- which get recomputed under the new distance parameters. The new distance
- parameters are stored into *params. */
-BROTLI_INTERNAL void BrotliBuildMetaBlock(MemoryManager* m,
- const uint8_t* ringbuffer,
- const size_t pos,
- const size_t mask,
- BrotliEncoderParams* params,
- uint8_t prev_byte,
- uint8_t prev_byte2,
- Command* cmds,
- size_t num_commands,
- ContextType literal_context_mode,
- MetaBlockSplit* mb);
-
-/* Uses a fast greedy block splitter that tries to merge current block with the
- last or the second last block and uses a static context clustering which
- is the same for all block types. */
-BROTLI_INTERNAL void BrotliBuildMetaBlockGreedy(
- MemoryManager* m, const uint8_t* ringbuffer, size_t pos, size_t mask,
- uint8_t prev_byte, uint8_t prev_byte2, ContextLut literal_context_lut,
- size_t num_contexts, const uint32_t* static_context_map,
- const Command* commands, size_t n_commands, MetaBlockSplit* mb);
-
-BROTLI_INTERNAL void BrotliOptimizeHistograms(uint32_t num_distance_codes,
- MetaBlockSplit* mb);
-
-BROTLI_INTERNAL void BrotliInitDistanceParams(BrotliEncoderParams* params,
- uint32_t npostfix, uint32_t ndirect);
-
-#if defined(__cplusplus) || defined(c_plusplus)
-} /* extern "C" */
-#endif
-
-#endif /* BROTLI_ENC_METABLOCK_H_ */
diff --git a/BaseTools/Source/C/BrotliCompress/enc/metablock_inc.h b/BaseTools/Source/C/BrotliCompress/enc/metablock_inc.h
deleted file mode 100644
index c6b1c50b32ce..000000000000
--- a/BaseTools/Source/C/BrotliCompress/enc/metablock_inc.h
+++ /dev/null
@@ -1,183 +0,0 @@
-/* NOLINT(build/header_guard) */
-/* Copyright 2015 Google Inc. All Rights Reserved.
-
- Distributed under MIT license.
- See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
-*/
-
-/* template parameters: FN */
-
-#define HistogramType FN(Histogram)
-
-/* Greedy block splitter for one block category (literal, command or distance).
-*/
-typedef struct FN(BlockSplitter) {
- /* Alphabet size of particular block category. */
- size_t alphabet_size_;
- /* We collect at least this many symbols for each block. */
- size_t min_block_size_;
- /* We merge histograms A and B if
- entropy(A+B) < entropy(A) + entropy(B) + split_threshold_,
- where A is the current histogram and B is the histogram of the last or the
- second last block type. */
- double split_threshold_;
-
- size_t num_blocks_;
- BlockSplit* split_; /* not owned */
- HistogramType* histograms_; /* not owned */
- size_t* histograms_size_; /* not owned */
-
- /* The number of symbols that we want to collect before deciding on whether
- or not to merge the block with a previous one or emit a new block. */
- size_t target_block_size_;
- /* The number of symbols in the current histogram. */
- size_t block_size_;
- /* Offset of the current histogram. */
- size_t curr_histogram_ix_;
- /* Offset of the histograms of the previous two block types. */
- size_t last_histogram_ix_[2];
- /* Entropy of the previous two block types. */
- double last_entropy_[2];
- /* The number of times we merged the current block with the last one. */
- size_t merge_last_count_;
-} FN(BlockSplitter);
-
-static void FN(InitBlockSplitter)(
- MemoryManager* m, FN(BlockSplitter)* self, size_t alphabet_size,
- size_t min_block_size, double split_threshold, size_t num_symbols,
- BlockSplit* split, HistogramType** histograms, size_t* histograms_size) {
- size_t max_num_blocks = num_symbols / min_block_size + 1;
- /* We have to allocate one more histogram than the maximum number of block
- types for the current histogram when the meta-block is too big. */
- size_t max_num_types =
- BROTLI_MIN(size_t, max_num_blocks, BROTLI_MAX_NUMBER_OF_BLOCK_TYPES + 1);
- self->alphabet_size_ = alphabet_size;
- self->min_block_size_ = min_block_size;
- self->split_threshold_ = split_threshold;
- self->num_blocks_ = 0;
- self->split_ = split;
- self->histograms_size_ = histograms_size;
- self->target_block_size_ = min_block_size;
- self->block_size_ = 0;
- self->curr_histogram_ix_ = 0;
- self->merge_last_count_ = 0;
- BROTLI_ENSURE_CAPACITY(m, uint8_t,
- split->types, split->types_alloc_size, max_num_blocks);
- BROTLI_ENSURE_CAPACITY(m, uint32_t,
- split->lengths, split->lengths_alloc_size, max_num_blocks);
- if (BROTLI_IS_OOM(m)) return;
- self->split_->num_blocks = max_num_blocks;
- BROTLI_DCHECK(*histograms == 0);
- *histograms_size = max_num_types;
- *histograms = BROTLI_ALLOC(m, HistogramType, *histograms_size);
- self->histograms_ = *histograms;
- if (BROTLI_IS_OOM(m)) return;
- /* Clear only current histogram. */
- FN(HistogramClear)(&self->histograms_[0]);
- self->last_histogram_ix_[0] = self->last_histogram_ix_[1] = 0;
-}
-
-/* Does either of three things:
- (1) emits the current block with a new block type;
- (2) emits the current block with the type of the second last block;
- (3) merges the current block with the last block. */
-static void FN(BlockSplitterFinishBlock)(
- FN(BlockSplitter)* self, BROTLI_BOOL is_final) {
- BlockSplit* split = self->split_;
- double* last_entropy = self->last_entropy_;
- HistogramType* histograms = self->histograms_;
- self->block_size_ =
- BROTLI_MAX(size_t, self->block_size_, self->min_block_size_);
- if (self->num_blocks_ == 0) {
- /* Create first block. */
- split->lengths[0] = (uint32_t)self->block_size_;
- split->types[0] = 0;
- last_entropy[0] =
- BitsEntropy(histograms[0].data_, self->alphabet_size_);
- last_entropy[1] = last_entropy[0];
- ++self->num_blocks_;
- ++split->num_types;
- ++self->curr_histogram_ix_;
- if (self->curr_histogram_ix_ < *self->histograms_size_)
- FN(HistogramClear)(&histograms[self->curr_histogram_ix_]);
- self->block_size_ = 0;
- } else if (self->block_size_ > 0) {
- double entropy = BitsEntropy(histograms[self->curr_histogram_ix_].data_,
- self->alphabet_size_);
- HistogramType combined_histo[2];
- double combined_entropy[2];
- double diff[2];
- size_t j;
- for (j = 0; j < 2; ++j) {
- size_t last_histogram_ix = self->last_histogram_ix_[j];
- combined_histo[j] = histograms[self->curr_histogram_ix_];
- FN(HistogramAddHistogram)(&combined_histo[j],
- &histograms[last_histogram_ix]);
- combined_entropy[j] = BitsEntropy(
- &combined_histo[j].data_[0], self->alphabet_size_);
- diff[j] = combined_entropy[j] - entropy - last_entropy[j];
- }
-
- if (split->num_types < BROTLI_MAX_NUMBER_OF_BLOCK_TYPES &&
- diff[0] > self->split_threshold_ &&
- diff[1] > self->split_threshold_) {
- /* Create new block. */
- split->lengths[self->num_blocks_] = (uint32_t)self->block_size_;
- split->types[self->num_blocks_] = (uint8_t)split->num_types;
- self->last_histogram_ix_[1] = self->last_histogram_ix_[0];
- self->last_histogram_ix_[0] = (uint8_t)split->num_types;
- last_entropy[1] = last_entropy[0];
- last_entropy[0] = entropy;
- ++self->num_blocks_;
- ++split->num_types;
- ++self->curr_histogram_ix_;
- if (self->curr_histogram_ix_ < *self->histograms_size_)
- FN(HistogramClear)(&histograms[self->curr_histogram_ix_]);
- self->block_size_ = 0;
- self->merge_last_count_ = 0;
- self->target_block_size_ = self->min_block_size_;
- } else if (diff[1] < diff[0] - 20.0) {
- /* Combine this block with second last block. */
- split->lengths[self->num_blocks_] = (uint32_t)self->block_size_;
- split->types[self->num_blocks_] = split->types[self->num_blocks_ - 2];
- BROTLI_SWAP(size_t, self->last_histogram_ix_, 0, 1);
- histograms[self->last_histogram_ix_[0]] = combined_histo[1];
- last_entropy[1] = last_entropy[0];
- last_entropy[0] = combined_entropy[1];
- ++self->num_blocks_;
- self->block_size_ = 0;
- FN(HistogramClear)(&histograms[self->curr_histogram_ix_]);
- self->merge_last_count_ = 0;
- self->target_block_size_ = self->min_block_size_;
- } else {
- /* Combine this block with last block. */
- split->lengths[self->num_blocks_ - 1] += (uint32_t)self->block_size_;
- histograms[self->last_histogram_ix_[0]] = combined_histo[0];
- last_entropy[0] = combined_entropy[0];
- if (split->num_types == 1) {
- last_entropy[1] = last_entropy[0];
- }
- self->block_size_ = 0;
- FN(HistogramClear)(&histograms[self->curr_histogram_ix_]);
- if (++self->merge_last_count_ > 1) {
- self->target_block_size_ += self->min_block_size_;
- }
- }
- }
- if (is_final) {
- *self->histograms_size_ = split->num_types;
- split->num_blocks = self->num_blocks_;
- }
-}
-
-/* Adds the next symbol to the current histogram. When the current histogram
- reaches the target size, decides on merging the block. */
-static void FN(BlockSplitterAddSymbol)(FN(BlockSplitter)* self, size_t symbol) {
- FN(HistogramAdd)(&self->histograms_[self->curr_histogram_ix_], symbol);
- ++self->block_size_;
- if (self->block_size_ == self->target_block_size_) {
- FN(BlockSplitterFinishBlock)(self, /* is_final = */ BROTLI_FALSE);
- }
-}
-
-#undef HistogramType
diff --git a/BaseTools/Source/C/BrotliCompress/enc/params.h b/BaseTools/Source/C/BrotliCompress/enc/params.h
deleted file mode 100644
index 96fed343ccbd..000000000000
--- a/BaseTools/Source/C/BrotliCompress/enc/params.h
+++ /dev/null
@@ -1,44 +0,0 @@
-/* Copyright 2017 Google Inc. All Rights Reserved.
-
- Distributed under MIT license.
- See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
-*/
-
-/* Parameters for the Brotli encoder with chosen quality levels. */
-
-#ifndef BROTLI_ENC_PARAMS_H_
-#define BROTLI_ENC_PARAMS_H_
-
-#include <brotli/encode.h>
-#include "./encoder_dict.h"
-
-typedef struct BrotliHasherParams {
- int type;
- int bucket_bits;
- int block_bits;
- int hash_len;
- int num_last_distances_to_check;
-} BrotliHasherParams;
-
-typedef struct BrotliDistanceParams {
- uint32_t distance_postfix_bits;
- uint32_t num_direct_distance_codes;
- uint32_t alphabet_size;
- size_t max_distance;
-} BrotliDistanceParams;
-
-/* Encoding parameters */
-typedef struct BrotliEncoderParams {
- BrotliEncoderMode mode;
- int quality;
- int lgwin;
- int lgblock;
- size_t size_hint;
- BROTLI_BOOL disable_literal_context_modeling;
- BROTLI_BOOL large_window;
- BrotliHasherParams hasher;
- BrotliDistanceParams dist;
- BrotliEncoderDictionary dictionary;
-} BrotliEncoderParams;
-
-#endif /* BROTLI_ENC_PARAMS_H_ */
diff --git a/BaseTools/Source/C/BrotliCompress/enc/prefix.h b/BaseTools/Source/C/BrotliCompress/enc/prefix.h
deleted file mode 100644
index e52edd1faa78..000000000000
--- a/BaseTools/Source/C/BrotliCompress/enc/prefix.h
+++ /dev/null
@@ -1,53 +0,0 @@
-/* Copyright 2013 Google Inc. All Rights Reserved.
-
- Distributed under MIT license.
- See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
-*/
-
-/* Functions for encoding of integers into prefix codes the amount of extra
- bits, and the actual values of the extra bits. */
-
-#ifndef BROTLI_ENC_PREFIX_H_
-#define BROTLI_ENC_PREFIX_H_
-
-#include "../common/constants.h"
-#include "../common/platform.h"
-#include <brotli/types.h>
-#include "./fast_log.h"
-
-#if defined(__cplusplus) || defined(c_plusplus)
-extern "C" {
-#endif
-
-/* Here distance_code is an intermediate code, i.e. one of the special codes or
- the actual distance increased by BROTLI_NUM_DISTANCE_SHORT_CODES - 1. */
-static BROTLI_INLINE void PrefixEncodeCopyDistance(size_t distance_code,
- size_t num_direct_codes,
- size_t postfix_bits,
- uint16_t* code,
- uint32_t* extra_bits) {
- if (distance_code < BROTLI_NUM_DISTANCE_SHORT_CODES + num_direct_codes) {
- *code = (uint16_t)distance_code;
- *extra_bits = 0;
- return;
- } else {
- size_t dist = ((size_t)1 << (postfix_bits + 2u)) +
- (distance_code - BROTLI_NUM_DISTANCE_SHORT_CODES - num_direct_codes);
- size_t bucket = Log2FloorNonZero(dist) - 1;
- size_t postfix_mask = (1u << postfix_bits) - 1;
- size_t postfix = dist & postfix_mask;
- size_t prefix = (dist >> bucket) & 1;
- size_t offset = (2 + prefix) << bucket;
- size_t nbits = bucket - postfix_bits;
- *code = (uint16_t)((nbits << 10) |
- (BROTLI_NUM_DISTANCE_SHORT_CODES + num_direct_codes +
- ((2 * (nbits - 1) + prefix) << postfix_bits) + postfix));
- *extra_bits = (uint32_t)((dist - offset) >> postfix_bits);
- }
-}
-
-#if defined(__cplusplus) || defined(c_plusplus)
-} /* extern "C" */
-#endif
-
-#endif /* BROTLI_ENC_PREFIX_H_ */
diff --git a/BaseTools/Source/C/BrotliCompress/enc/quality.h b/BaseTools/Source/C/BrotliCompress/enc/quality.h
deleted file mode 100644
index 072bf8f156e4..000000000000
--- a/BaseTools/Source/C/BrotliCompress/enc/quality.h
+++ /dev/null
@@ -1,165 +0,0 @@
-/* Copyright 2016 Google Inc. All Rights Reserved.
-
- Distributed under MIT license.
- See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
-*/
-
-/* Constants and formulas that affect speed-ratio trade-offs and thus define
- quality levels. */
-
-#ifndef BROTLI_ENC_QUALITY_H_
-#define BROTLI_ENC_QUALITY_H_
-
-#include "../common/platform.h"
-#include <brotli/encode.h>
-#include "./params.h"
-
-#define FAST_ONE_PASS_COMPRESSION_QUALITY 0
-#define FAST_TWO_PASS_COMPRESSION_QUALITY 1
-#define ZOPFLIFICATION_QUALITY 10
-#define HQ_ZOPFLIFICATION_QUALITY 11
-
-#define MAX_QUALITY_FOR_STATIC_ENTROPY_CODES 2
-#define MIN_QUALITY_FOR_BLOCK_SPLIT 4
-#define MIN_QUALITY_FOR_NONZERO_DISTANCE_PARAMS 4
-#define MIN_QUALITY_FOR_OPTIMIZE_HISTOGRAMS 4
-#define MIN_QUALITY_FOR_EXTENSIVE_REFERENCE_SEARCH 5
-#define MIN_QUALITY_FOR_CONTEXT_MODELING 5
-#define MIN_QUALITY_FOR_HQ_CONTEXT_MODELING 7
-#define MIN_QUALITY_FOR_HQ_BLOCK_SPLITTING 10
-
-/* For quality below MIN_QUALITY_FOR_BLOCK_SPLIT there is no block splitting,
- so we buffer at most this much literals and commands. */
-#define MAX_NUM_DELAYED_SYMBOLS 0x2FFF
-
-/* Returns hash-table size for quality levels 0 and 1. */
-static BROTLI_INLINE size_t MaxHashTableSize(int quality) {
- return quality == FAST_ONE_PASS_COMPRESSION_QUALITY ? 1 << 15 : 1 << 17;
-}
-
-/* The maximum length for which the zopflification uses distinct distances. */
-#define MAX_ZOPFLI_LEN_QUALITY_10 150
-#define MAX_ZOPFLI_LEN_QUALITY_11 325
-
-/* Do not thoroughly search when a long copy is found. */
-#define BROTLI_LONG_COPY_QUICK_STEP 16384
-
-static BROTLI_INLINE size_t MaxZopfliLen(const BrotliEncoderParams* params) {
- return params->quality <= 10 ?
- MAX_ZOPFLI_LEN_QUALITY_10 :
- MAX_ZOPFLI_LEN_QUALITY_11;
-}
-
-/* Number of best candidates to evaluate to expand Zopfli chain. */
-static BROTLI_INLINE size_t MaxZopfliCandidates(
- const BrotliEncoderParams* params) {
- return params->quality <= 10 ? 1 : 5;
-}
-
-static BROTLI_INLINE void SanitizeParams(BrotliEncoderParams* params) {
- params->quality = BROTLI_MIN(int, BROTLI_MAX_QUALITY,
- BROTLI_MAX(int, BROTLI_MIN_QUALITY, params->quality));
- if (params->quality <= MAX_QUALITY_FOR_STATIC_ENTROPY_CODES) {
- params->large_window = BROTLI_FALSE;
- }
- if (params->lgwin < BROTLI_MIN_WINDOW_BITS) {
- params->lgwin = BROTLI_MIN_WINDOW_BITS;
- } else {
- int max_lgwin = params->large_window ? BROTLI_LARGE_MAX_WINDOW_BITS :
- BROTLI_MAX_WINDOW_BITS;
- if (params->lgwin > max_lgwin) params->lgwin = max_lgwin;
- }
-}
-
-/* Returns optimized lg_block value. */
-static BROTLI_INLINE int ComputeLgBlock(const BrotliEncoderParams* params) {
- int lgblock = params->lgblock;
- if (params->quality == FAST_ONE_PASS_COMPRESSION_QUALITY ||
- params->quality == FAST_TWO_PASS_COMPRESSION_QUALITY) {
- lgblock = params->lgwin;
- } else if (params->quality < MIN_QUALITY_FOR_BLOCK_SPLIT) {
- lgblock = 14;
- } else if (lgblock == 0) {
- lgblock = 16;
- if (params->quality >= 9 && params->lgwin > lgblock) {
- lgblock = BROTLI_MIN(int, 18, params->lgwin);
- }
- } else {
- lgblock = BROTLI_MIN(int, BROTLI_MAX_INPUT_BLOCK_BITS,
- BROTLI_MAX(int, BROTLI_MIN_INPUT_BLOCK_BITS, lgblock));
- }
- return lgblock;
-}
-
-/* Returns log2 of the size of main ring buffer area.
- Allocate at least lgwin + 1 bits for the ring buffer so that the newly
- added block fits there completely and we still get lgwin bits and at least
- read_block_size_bits + 1 bits because the copy tail length needs to be
- smaller than ring-buffer size. */
-static BROTLI_INLINE int ComputeRbBits(const BrotliEncoderParams* params) {
- return 1 + BROTLI_MAX(int, params->lgwin, params->lgblock);
-}
-
-static BROTLI_INLINE size_t MaxMetablockSize(
- const BrotliEncoderParams* params) {
- int bits =
- BROTLI_MIN(int, ComputeRbBits(params), BROTLI_MAX_INPUT_BLOCK_BITS);
- return (size_t)1 << bits;
-}
-
-/* When searching for backward references and have not seen matches for a long
- time, we can skip some match lookups. Unsuccessful match lookups are very
- expensive and this kind of a heuristic speeds up compression quite a lot.
- At first 8 byte strides are taken and every second byte is put to hasher.
- After 4x more literals stride by 16 bytes, every put 4-th byte to hasher.
- Applied only to qualities 2 to 9. */
-static BROTLI_INLINE size_t LiteralSpreeLengthForSparseSearch(
- const BrotliEncoderParams* params) {
- return params->quality < 9 ? 64 : 512;
-}
-
-static BROTLI_INLINE void ChooseHasher(const BrotliEncoderParams* params,
- BrotliHasherParams* hparams) {
- if (params->quality > 9) {
- hparams->type = 10;
- } else if (params->quality == 4 && params->size_hint >= (1 << 20)) {
- hparams->type = 54;
- } else if (params->quality < 5) {
- hparams->type = params->quality;
- } else if (params->lgwin <= 16) {
- hparams->type = params->quality < 7 ? 40 : params->quality < 9 ? 41 : 42;
- } else if (params->size_hint >= (1 << 20) && params->lgwin >= 19) {
- hparams->type = 6;
- hparams->block_bits = params->quality - 1;
- hparams->bucket_bits = 15;
- hparams->hash_len = 5;
- hparams->num_last_distances_to_check =
- params->quality < 7 ? 4 : params->quality < 9 ? 10 : 16;
- } else {
- hparams->type = 5;
- hparams->block_bits = params->quality - 1;
- hparams->bucket_bits = params->quality < 7 ? 14 : 15;
- hparams->num_last_distances_to_check =
- params->quality < 7 ? 4 : params->quality < 9 ? 10 : 16;
- }
-
- if (params->lgwin > 24) {
- /* Different hashers for large window brotli: not for qualities <= 2,
- these are too fast for large window. Not for qualities >= 10: their
- hasher already works well with large window. So the changes are:
- H3 --> H35: for quality 3.
- H54 --> H55: for quality 4 with size hint > 1MB
- H6 --> H65: for qualities 5, 6, 7, 8, 9. */
- if (hparams->type == 3) {
- hparams->type = 35;
- }
- if (hparams->type == 54) {
- hparams->type = 55;
- }
- if (hparams->type == 6) {
- hparams->type = 65;
- }
- }
-}
-
-#endif /* BROTLI_ENC_QUALITY_H_ */
diff --git a/BaseTools/Source/C/BrotliCompress/enc/ringbuffer.h b/BaseTools/Source/C/BrotliCompress/enc/ringbuffer.h
deleted file mode 100644
index fe63270b3f9a..000000000000
--- a/BaseTools/Source/C/BrotliCompress/enc/ringbuffer.h
+++ /dev/null
@@ -1,164 +0,0 @@
-/* Copyright 2013 Google Inc. All Rights Reserved.
-
- Distributed under MIT license.
- See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
-*/
-
-/* Sliding window over the input data. */
-
-#ifndef BROTLI_ENC_RINGBUFFER_H_
-#define BROTLI_ENC_RINGBUFFER_H_
-
-#include <string.h> /* memcpy */
-
-#include "../common/platform.h"
-#include <brotli/types.h>
-#include "./memory.h"
-#include "./quality.h"
-
-#if defined(__cplusplus) || defined(c_plusplus)
-extern "C" {
-#endif
-
-/* A RingBuffer(window_bits, tail_bits) contains `1 << window_bits' bytes of
- data in a circular manner: writing a byte writes it to:
- `position() % (1 << window_bits)'.
- For convenience, the RingBuffer array contains another copy of the
- first `1 << tail_bits' bytes:
- buffer_[i] == buffer_[i + (1 << window_bits)], if i < (1 << tail_bits),
- and another copy of the last two bytes:
- buffer_[-1] == buffer_[(1 << window_bits) - 1] and
- buffer_[-2] == buffer_[(1 << window_bits) - 2]. */
-typedef struct RingBuffer {
- /* Size of the ring-buffer is (1 << window_bits) + tail_size_. */
- const uint32_t size_;
- const uint32_t mask_;
- const uint32_t tail_size_;
- const uint32_t total_size_;
-
- uint32_t cur_size_;
- /* Position to write in the ring buffer. */
- uint32_t pos_;
- /* The actual ring buffer containing the copy of the last two bytes, the data,
- and the copy of the beginning as a tail. */
- uint8_t* data_;
- /* The start of the ring-buffer. */
- uint8_t* buffer_;
-} RingBuffer;
-
-static BROTLI_INLINE void RingBufferInit(RingBuffer* rb) {
- rb->cur_size_ = 0;
- rb->pos_ = 0;
- rb->data_ = 0;
- rb->buffer_ = 0;
-}
-
-static BROTLI_INLINE void RingBufferSetup(
- const BrotliEncoderParams* params, RingBuffer* rb) {
- int window_bits = ComputeRbBits(params);
- int tail_bits = params->lgblock;
- *(uint32_t*)&rb->size_ = 1u << window_bits;
- *(uint32_t*)&rb->mask_ = (1u << window_bits) - 1;
- *(uint32_t*)&rb->tail_size_ = 1u << tail_bits;
- *(uint32_t*)&rb->total_size_ = rb->size_ + rb->tail_size_;
-}
-
-static BROTLI_INLINE void RingBufferFree(MemoryManager* m, RingBuffer* rb) {
- BROTLI_FREE(m, rb->data_);
-}
-
-/* Allocates or re-allocates data_ to the given length + plus some slack
- region before and after. Fills the slack regions with zeros. */
-static BROTLI_INLINE void RingBufferInitBuffer(
- MemoryManager* m, const uint32_t buflen, RingBuffer* rb) {
- static const size_t kSlackForEightByteHashingEverywhere = 7;
- uint8_t* new_data = BROTLI_ALLOC(
- m, uint8_t, 2 + buflen + kSlackForEightByteHashingEverywhere);
- size_t i;
- if (BROTLI_IS_OOM(m)) return;
- if (rb->data_) {
- memcpy(new_data, rb->data_,
- 2 + rb->cur_size_ + kSlackForEightByteHashingEverywhere);
- BROTLI_FREE(m, rb->data_);
- }
- rb->data_ = new_data;
- rb->cur_size_ = buflen;
- rb->buffer_ = rb->data_ + 2;
- rb->buffer_[-2] = rb->buffer_[-1] = 0;
- for (i = 0; i < kSlackForEightByteHashingEverywhere; ++i) {
- rb->buffer_[rb->cur_size_ + i] = 0;
- }
-}
-
-static BROTLI_INLINE void RingBufferWriteTail(
- const uint8_t* bytes, size_t n, RingBuffer* rb) {
- const size_t masked_pos = rb->pos_ & rb->mask_;
- if (BROTLI_PREDICT_FALSE(masked_pos < rb->tail_size_)) {
- /* Just fill the tail buffer with the beginning data. */
- const size_t p = rb->size_ + masked_pos;
- memcpy(&rb->buffer_[p], bytes,
- BROTLI_MIN(size_t, n, rb->tail_size_ - masked_pos));
- }
-}
-
-/* Push bytes into the ring buffer. */
-static BROTLI_INLINE void RingBufferWrite(
- MemoryManager* m, const uint8_t* bytes, size_t n, RingBuffer* rb) {
- if (rb->pos_ == 0 && n < rb->tail_size_) {
- /* Special case for the first write: to process the first block, we don't
- need to allocate the whole ring-buffer and we don't need the tail
- either. However, we do this memory usage optimization only if the
- first write is less than the tail size, which is also the input block
- size, otherwise it is likely that other blocks will follow and we
- will need to reallocate to the full size anyway. */
- rb->pos_ = (uint32_t)n;
- RingBufferInitBuffer(m, rb->pos_, rb);
- if (BROTLI_IS_OOM(m)) return;
- memcpy(rb->buffer_, bytes, n);
- return;
- }
- if (rb->cur_size_ < rb->total_size_) {
- /* Lazily allocate the full buffer. */
- RingBufferInitBuffer(m, rb->total_size_, rb);
- if (BROTLI_IS_OOM(m)) return;
- /* Initialize the last two bytes to zero, so that we don't have to worry
- later when we copy the last two bytes to the first two positions. */
- rb->buffer_[rb->size_ - 2] = 0;
- rb->buffer_[rb->size_ - 1] = 0;
- }
- {
- const size_t masked_pos = rb->pos_ & rb->mask_;
- /* The length of the writes is limited so that we do not need to worry
- about a write */
- RingBufferWriteTail(bytes, n, rb);
- if (BROTLI_PREDICT_TRUE(masked_pos + n <= rb->size_)) {
- /* A single write fits. */
- memcpy(&rb->buffer_[masked_pos], bytes, n);
- } else {
- /* Split into two writes.
- Copy into the end of the buffer, including the tail buffer. */
- memcpy(&rb->buffer_[masked_pos], bytes,
- BROTLI_MIN(size_t, n, rb->total_size_ - masked_pos));
- /* Copy into the beginning of the buffer */
- memcpy(&rb->buffer_[0], bytes + (rb->size_ - masked_pos),
- n - (rb->size_ - masked_pos));
- }
- }
- {
- BROTLI_BOOL not_first_lap = (rb->pos_ & (1u << 31)) != 0;
- uint32_t rb_pos_mask = (1u << 31) - 1;
- rb->buffer_[-2] = rb->buffer_[rb->size_ - 2];
- rb->buffer_[-1] = rb->buffer_[rb->size_ - 1];
- rb->pos_ = (rb->pos_ & rb_pos_mask) + (uint32_t)(n & rb_pos_mask);
- if (not_first_lap) {
- /* Wrap, but preserve not-a-first-lap feature. */
- rb->pos_ |= 1u << 31;
- }
- }
-}
-
-#if defined(__cplusplus) || defined(c_plusplus)
-} /* extern "C" */
-#endif
-
-#endif /* BROTLI_ENC_RINGBUFFER_H_ */
diff --git a/BaseTools/Source/C/BrotliCompress/enc/static_dict.h b/BaseTools/Source/C/BrotliCompress/enc/static_dict.h
deleted file mode 100644
index aafc68ff9e02..000000000000
--- a/BaseTools/Source/C/BrotliCompress/enc/static_dict.h
+++ /dev/null
@@ -1,40 +0,0 @@
-/* Copyright 2013 Google Inc. All Rights Reserved.
-
- Distributed under MIT license.
- See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
-*/
-
-/* Class to model the static dictionary. */
-
-#ifndef BROTLI_ENC_STATIC_DICT_H_
-#define BROTLI_ENC_STATIC_DICT_H_
-
-#include "../common/dictionary.h"
-#include "../common/platform.h"
-#include <brotli/types.h>
-#include "./encoder_dict.h"
-
-#if defined(__cplusplus) || defined(c_plusplus)
-extern "C" {
-#endif
-
-#define BROTLI_MAX_STATIC_DICTIONARY_MATCH_LEN 37
-static const uint32_t kInvalidMatch = 0xFFFFFFF;
-
-/* Matches data against static dictionary words, and for each length l,
- for which a match is found, updates matches[l] to be the minimum possible
- (distance << 5) + len_code.
- Returns 1 if matches have been found, otherwise 0.
- Prerequisites:
- matches array is at least BROTLI_MAX_STATIC_DICTIONARY_MATCH_LEN + 1 long
- all elements are initialized to kInvalidMatch */
-BROTLI_INTERNAL BROTLI_BOOL BrotliFindAllStaticDictionaryMatches(
- const BrotliEncoderDictionary* dictionary,
- const uint8_t* data, size_t min_length, size_t max_length,
- uint32_t* matches);
-
-#if defined(__cplusplus) || defined(c_plusplus)
-} /* extern "C" */
-#endif
-
-#endif /* BROTLI_ENC_STATIC_DICT_H_ */
diff --git a/BaseTools/Source/C/BrotliCompress/enc/static_dict_lut.h b/BaseTools/Source/C/BrotliCompress/enc/static_dict_lut.h
deleted file mode 100644
index 88f8b342eabd..000000000000
--- a/BaseTools/Source/C/BrotliCompress/enc/static_dict_lut.h
+++ /dev/null
@@ -1,5864 +0,0 @@
-/* Copyright 2015 Google Inc. All Rights Reserved.
-
- Distributed under MIT license.
- See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
-*/
-
-/* Lookup table for static dictionary and transforms. */
-
-#ifndef BROTLI_ENC_STATIC_DICT_LUT_H_
-#define BROTLI_ENC_STATIC_DICT_LUT_H_
-
-#include <brotli/types.h>
-
-#if defined(__cplusplus) || defined(c_plusplus)
-extern "C" {
-#endif
-
-typedef struct DictWord {
- /* Highest bit is used to indicate end of bucket. */
- uint8_t len;
- uint8_t transform;
- uint16_t idx;
-} DictWord;
-
-static const int kDictNumBits = 15;
-static const uint32_t kDictHashMul32 = 0x1E35A7BD;
-
-static const uint16_t kStaticDictionaryBuckets[32768] = {
-1,0,0,0,0,0,0,0,0,3,6,0,0,0,0,0,20,0,0,0,21,0,22,0,0,0,0,0,0,0,0,23,0,0,25,0,29,
-0,53,0,0,0,0,0,0,55,0,0,0,0,0,0,61,76,0,0,0,94,0,0,0,0,0,0,96,0,97,0,98,0,0,0,0,
-0,0,0,99,101,106,108,0,0,0,0,0,110,0,111,112,0,113,118,124,0,0,0,0,0,125,128,0,0
-,0,0,129,0,0,131,0,0,0,0,0,0,132,0,0,135,0,0,0,137,0,0,0,0,0,138,139,0,0,0,0,0,0
-,0,142,143,144,0,0,0,0,0,145,0,0,0,146,149,151,152,0,0,153,0,0,0,0,0,0,0,0,0,0,0
-,0,0,0,0,154,0,0,0,0,0,0,155,0,0,0,0,160,182,0,0,0,0,0,0,183,0,0,0,188,189,0,0,
-192,0,0,0,0,0,0,194,0,0,0,0,0,0,0,0,197,202,209,0,0,210,0,224,0,0,0,225,0,0,0,0,
-0,0,0,0,0,0,231,0,0,0,232,0,240,0,0,242,0,0,0,0,0,0,0,0,0,0,0,244,0,0,0,246,0,0,
-249,251,253,0,0,0,0,0,258,0,0,261,263,0,0,0,267,0,0,268,0,269,0,0,0,0,0,0,0,0,0,
-271,0,0,0,0,0,0,272,0,273,0,277,0,278,286,0,0,0,0,287,0,289,290,291,0,0,0,295,0,
-0,296,297,0,0,0,0,0,0,0,0,0,0,298,0,0,0,299,0,0,305,0,324,0,0,0,0,0,327,0,328,
-329,0,0,0,0,336,0,0,340,0,341,342,343,0,0,346,0,348,0,0,0,0,0,0,349,351,0,0,355,
-0,363,0,364,0,368,369,0,370,0,0,0,0,0,0,0,372,0,0,0,0,0,0,0,0,0,0,0,373,0,375,0,
-0,0,0,376,377,0,0,394,395,396,0,0,398,0,0,0,0,400,0,0,408,0,0,0,0,420,0,0,0,0,0,
-0,421,0,0,422,423,0,0,429,435,436,442,0,0,443,0,444,445,453,456,0,457,0,0,0,0,0,
-458,0,0,0,459,0,0,0,460,0,462,463,465,0,0,0,0,0,0,466,469,0,0,0,0,0,0,470,0,0,0,
-474,0,476,0,0,0,0,483,0,485,0,0,0,486,0,0,488,491,492,0,0,497,499,500,0,501,0,0,
-0,505,0,0,506,0,0,0,507,0,0,0,509,0,0,0,0,511,512,519,0,0,0,0,0,0,529,530,0,0,0,
-534,0,0,0,0,543,0,0,0,0,0,0,0,0,0,553,0,0,0,0,557,560,0,0,0,0,0,0,561,0,564,0,0,
-0,0,0,0,565,566,0,575,0,619,0,620,0,0,623,624,0,0,0,625,0,0,626,627,0,0,628,0,0,
-0,0,630,0,631,0,0,0,0,0,0,0,0,0,641,0,0,0,0,643,656,668,0,0,0,673,0,0,0,674,0,0,
-0,0,0,0,0,0,682,0,687,0,690,0,693,699,700,0,0,0,0,0,0,704,705,0,0,0,0,707,710,0,
-711,0,0,0,0,726,0,0,729,0,0,0,730,731,0,0,0,0,0,752,0,0,0,762,0,763,0,0,767,0,0,
-0,770,774,0,0,775,0,0,0,0,0,0,0,0,0,0,776,0,0,0,777,783,0,0,0,785,788,0,0,0,0,
-790,0,0,0,793,0,0,0,0,794,0,0,804,819,821,0,827,0,0,0,834,0,0,835,0,0,0,841,0,
-844,0,850,851,859,0,860,0,0,0,0,0,0,0,874,0,876,0,877,890,0,0,0,0,0,0,0,0,893,
-894,898,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,899,0,0,0,900,904,906,0,0,0,907,0,908,909,
-0,910,0,0,0,0,911,0,0,0,0,0,916,0,0,0,922,925,0,930,0,934,0,0,0,0,0,943,0,0,944,
-0,953,954,0,0,0,0,0,0,955,0,962,963,0,0,976,0,0,977,978,979,980,0,981,0,0,0,0,
-984,0,0,985,0,0,987,989,991,0,0,0,0,0,0,0,0,0,992,0,0,0,993,0,0,0,0,0,0,996,0,0,
-0,1000,0,0,0,0,0,1002,0,0,0,0,1005,1007,0,0,0,1009,0,0,0,1010,0,0,0,0,0,0,1011,0
-,1012,0,0,0,0,1014,1016,0,0,0,1020,0,1021,0,0,0,0,1022,0,0,0,1024,0,0,0,0,0,0,
-1025,0,0,1026,1027,0,0,0,0,0,1031,0,1033,0,0,0,0,1034,0,0,0,1037,1040,0,0,0,1042
-,1043,0,0,1053,0,1054,0,0,1057,0,0,0,1058,0,0,1060,0,0,0,0,0,0,0,1061,0,0,1062,0
-,0,0,0,1063,0,0,0,0,1064,0,0,0,0,0,1065,0,0,0,0,1066,1067,0,0,0,1069,1070,1072,0
-,0,0,0,0,0,1073,0,1075,0,0,0,0,0,0,1080,1084,0,0,0,0,1088,0,0,0,0,0,0,1094,0,
-1095,0,1107,0,0,0,1112,1114,0,1119,0,1122,0,0,1126,0,1129,0,1130,0,0,0,0,0,1132,
-0,0,0,0,0,0,1144,0,0,1145,1146,0,1148,1149,0,0,1150,1151,0,0,0,0,1152,0,1153,0,0
-,0,0,0,1154,0,1163,0,0,0,1164,0,0,0,0,0,1165,0,1167,0,1170,0,0,0,0,0,1171,1172,0
-,0,0,0,0,0,0,0,1173,1175,1177,0,1186,0,0,0,0,0,0,0,0,0,0,1195,0,0,1221,0,0,1224,
-0,0,1227,0,0,0,0,0,1228,1229,0,0,1230,0,0,0,0,0,0,0,0,0,1231,0,0,0,1233,0,0,1243
-,1244,1246,1248,0,0,0,0,1254,1255,1258,1259,0,0,0,1260,0,0,1261,0,0,0,1262,1264,
-0,0,1265,0,0,0,0,0,0,0,0,0,0,0,0,1266,0,1267,0,0,0,0,1273,1274,1276,1289,0,0,
-1291,1292,1293,0,0,1294,1295,1296,0,0,0,0,1302,0,1304,0,0,0,0,0,0,0,0,0,1311,
-1312,0,1314,0,1316,1320,1321,0,0,0,0,0,0,0,1322,1323,1324,0,1335,0,1336,0,0,0,0,
-1341,1342,0,1346,0,1357,0,0,0,1358,1360,0,0,0,0,0,0,1361,0,0,0,1362,1365,0,1366,
-0,0,0,0,0,0,0,1379,0,0,0,0,0,0,0,0,0,0,0,0,1386,0,1388,0,0,0,0,0,0,0,0,0,0,0,0,0
-,0,1395,0,0,0,0,1403,0,1405,0,0,1407,0,0,0,0,0,1408,1409,0,1410,0,0,0,1412,1413,
-1416,0,0,1429,1451,0,0,1454,0,0,0,0,0,0,0,1455,0,0,0,0,0,0,0,1456,0,0,0,0,1459,
-1460,1461,1475,0,0,0,0,0,0,1477,0,1480,0,1481,0,0,1486,0,0,1495,0,0,0,1496,0,0,
-1498,1499,1501,1520,1521,0,0,0,1526,0,0,0,0,1528,1529,0,1533,1536,0,0,0,1537,
-1538,1549,0,1550,1558,1559,1572,0,1573,0,0,0,0,0,0,0,0,0,1575,0,0,0,0,0,1579,0,
-1599,0,1603,0,1604,0,1605,0,0,0,0,0,1608,1610,0,0,0,0,1611,0,1615,0,1616,1618,0,
-1619,0,0,1622,0,0,0,0,1634,0,0,0,1635,0,0,0,1641,0,0,0,0,0,0,0,0,0,1643,0,0,0,
-1650,0,0,1652,0,0,0,0,0,1653,0,0,0,1654,0,0,0,0,1655,0,1662,0,0,1663,1664,0,0,
-1668,0,0,1669,1670,0,1672,1673,0,0,0,0,0,1674,0,0,0,1675,1676,1680,0,1682,0,0,
-1687,0,0,0,0,0,1704,0,0,1705,0,0,1721,0,0,0,0,1734,1735,0,0,0,0,1737,0,0,0,0,
-1739,0,0,1740,0,0,0,0,0,0,0,0,0,0,1741,1743,0,0,0,0,1745,0,0,0,1749,0,0,0,1751,0
-,0,0,0,0,0,1760,0,0,0,0,1765,0,0,0,0,0,1784,0,1785,1787,0,0,0,0,1788,1789,0,0,0,
-0,1790,1791,1793,0,1798,1799,0,0,0,0,1801,0,1803,1805,0,0,0,1806,1811,0,1812,
-1814,0,1821,0,0,0,0,0,1822,1833,0,0,0,0,0,0,1848,0,0,0,0,0,0,1857,0,0,0,1859,0,0
-,0,0,1861,0,0,0,0,0,0,0,1866,0,1921,1925,0,0,0,1929,1930,0,0,0,0,0,0,0,0,0,1931,
-0,0,0,0,1932,0,0,0,1934,0,0,0,0,0,0,0,0,1946,0,0,1948,0,0,0,0,1950,0,1957,0,1958
-,0,0,0,0,0,1965,1967,0,0,0,0,1968,0,1969,0,1971,1972,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-,0,1973,0,0,0,0,1975,0,0,0,0,1976,1979,0,1982,0,0,0,0,1984,1988,0,0,0,0,1990,
-2004,2008,0,0,0,2012,2013,0,0,0,0,0,0,0,0,0,0,2015,0,2016,2017,0,0,0,0,2021,0,0,
-2025,0,0,0,0,0,2029,2036,2040,0,2042,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2043,0,0,0,0,0,
-2045,0,0,0,0,0,0,0,2046,2047,0,2048,2049,0,2059,0,0,2063,0,2064,2065,0,0,2066,0,
-0,0,0,0,0,2069,0,0,0,0,2070,0,2071,0,2072,0,0,0,0,2080,2082,2083,0,0,0,0,0,2085,
-0,2086,2088,2089,2105,0,0,0,0,2107,0,0,2116,2117,0,2120,0,0,2122,0,0,0,0,0,2123,
-0,0,2125,2127,2128,0,0,0,2130,0,0,0,2137,2139,2140,2141,0,0,0,0,0,0,0,0,0,2144,
-2145,0,0,2146,2149,0,0,0,0,2150,0,0,2151,2158,0,2159,0,2160,0,0,0,0,0,0,2161,
-2162,0,0,2194,2202,0,0,0,0,0,0,2205,2217,0,2220,0,2221,0,2222,2224,0,0,0,0,2237,
-0,0,0,0,0,2238,0,2239,2241,0,0,2242,0,0,0,0,0,2243,0,0,0,0,0,0,2252,0,0,2253,0,0
-,0,2257,2258,0,0,0,2260,0,0,0,0,0,0,0,2262,0,2264,0,0,0,0,0,2269,2270,0,0,0,0,0,
-0,0,0,0,2271,0,2273,0,0,0,0,2277,0,0,0,0,2278,0,0,0,0,2279,0,2280,0,2283,0,0,0,0
-,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2287,0,0,0,0,0,0,0,2289,2290,0,0,0,0,2291,0,2292,0,
-0,0,2293,2295,2296,0,0,0,0,0,0,0,2298,0,0,0,0,0,2303,0,2305,0,0,2306,0,2307,0,0,
-0,0,0,0,0,0,0,0,0,0,2313,2314,2315,2316,0,0,2318,0,2319,0,2322,0,0,2323,0,2324,0
-,2326,0,0,0,0,0,0,0,2335,0,2336,2338,2339,0,2340,0,0,0,2355,0,2375,0,2382,2386,0
-,2387,0,0,2394,0,0,0,0,2395,0,2397,0,0,0,0,0,2398,0,0,0,0,0,0,0,2399,2402,2404,
-2408,2411,0,0,0,2413,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2415,0,0,2416,2417,2419,0,2420,
-0,0,0,0,0,2425,0,0,0,2426,0,0,0,0,0,0,0,0,0,0,0,0,2427,2428,0,2429,0,0,2430,2434
-,0,2436,0,0,0,0,0,0,2441,2442,0,2445,0,0,2446,2457,0,2459,0,0,2462,0,2464,0,2477
-,0,2478,2486,0,0,0,2491,0,0,2493,0,0,2494,0,2495,0,2513,2523,0,0,0,0,2524,0,0,0,
-0,0,0,2528,2529,2530,0,0,2531,0,2533,0,0,2534,2535,0,2536,2537,0,2538,0,2539,
-2540,0,0,0,2545,2546,0,0,0,0,0,0,0,2548,0,0,2549,0,2550,2555,0,0,0,0,0,2557,0,
-2560,0,0,0,0,0,0,0,0,0,0,0,2561,0,2576,0,0,0,0,0,0,0,0,0,2577,2578,0,0,0,2579,0,
-0,0,0,0,0,0,2580,0,0,0,0,2581,0,0,0,0,2583,0,2584,0,2588,2590,0,0,0,2591,0,0,0,0
-,2593,2594,0,2595,0,2601,2602,0,0,2603,0,2605,0,0,0,2606,2607,2611,0,2615,0,0,0,
-2617,0,0,0,0,0,0,0,0,0,0,0,0,0,2619,0,0,2620,0,0,0,2621,0,2623,0,2625,0,0,2628,
-2629,0,0,2635,2636,2637,0,0,2639,0,0,0,2642,0,0,0,0,2643,0,2644,0,2649,0,0,0,0,0
-,0,2655,2656,0,0,2657,0,0,0,0,0,2658,0,0,0,0,0,2659,0,0,0,0,2664,2685,0,2687,0,
-2688,0,0,2689,0,0,2694,0,2695,0,0,2698,0,2701,2706,0,0,0,2707,0,2709,2710,2711,0
-,0,0,2720,2730,2735,0,0,0,0,2738,2740,0,0,0,0,2747,0,0,0,0,0,0,2748,0,0,2749,0,0
-,0,0,0,2750,0,0,2752,2754,0,0,0,0,0,2758,0,0,0,0,2762,0,0,0,0,2763,0,0,0,0,0,0,0
-,2764,2767,0,0,0,0,2768,0,0,2770,0,0,0,0,0,0,0,2771,0,0,0,0,0,0,0,0,0,2772,0,0,0
-,0,0,2773,2776,0,0,2783,0,0,2784,0,2789,0,2790,0,0,0,2792,0,0,0,0,0,0,0,0,0,0,
-2793,2795,0,0,0,0,0,0,2796,0,0,0,0,0,0,2797,2799,0,0,0,0,2803,0,0,0,0,2806,0,
-2807,2808,2817,2819,0,0,0,0,0,2821,0,0,0,0,2822,2823,0,0,0,0,0,0,0,2824,0,0,2828
-,0,2834,0,0,0,0,0,0,2836,0,2838,0,0,2839,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2841,
-0,0,0,2842,0,0,0,0,0,2843,2844,0,0,0,0,2846,0,0,2847,0,2849,0,2853,0,0,0,0,0,
-2857,0,0,0,0,2858,0,2859,0,0,2860,0,2862,2868,0,0,0,0,2875,0,2876,0,0,2877,2878,
-2884,2889,2890,0,0,2891,0,0,2892,0,0,0,2906,2912,0,2913,0,0,0,0,0,0,0,0,2916,0,
-2934,0,0,0,0,0,2935,0,0,0,0,2939,0,2940,0,0,0,0,0,0,0,2941,0,0,0,2946,0,2949,0,0
-,2950,2954,2955,0,0,0,2959,2961,0,0,2962,0,2963,0,0,0,0,0,0,2964,2965,2966,2967,
-0,0,0,0,0,0,0,2969,0,0,0,0,0,2970,2975,0,2982,2983,2984,0,0,0,0,0,2989,0,0,2990,
-0,0,0,0,0,0,0,2991,0,0,0,0,0,0,0,0,2998,0,3000,3001,0,0,3002,0,0,0,3003,0,0,3012
-,0,0,3022,0,0,3024,0,0,3025,3027,0,0,0,3030,0,0,0,0,3034,3035,0,0,3036,0,3039,0,
-3049,0,0,3050,0,0,0,0,0,0,3051,0,3053,0,0,0,0,3057,0,3058,0,0,0,0,0,0,0,0,3063,0
-,0,3073,3074,3078,3079,0,3080,3086,0,0,0,0,0,0,0,0,3087,0,3092,0,3095,0,3099,0,0
-,0,3100,0,3101,3102,0,3122,0,0,0,3124,0,3125,0,0,0,0,0,0,3132,3134,0,0,3136,0,0,
-0,0,0,0,0,3147,0,0,3149,0,0,0,0,0,3150,3151,3152,0,0,0,0,3158,0,0,3160,0,0,3161,
-0,0,3162,0,3163,3166,3168,0,0,3169,3170,0,0,3171,0,0,0,0,0,0,0,3182,0,3184,0,0,
-3188,0,0,3194,0,0,0,0,0,0,3204,0,0,0,0,3209,0,0,0,0,0,0,0,0,0,0,0,3216,3217,0,0,
-0,0,0,0,0,3219,0,0,3220,3222,0,3223,0,0,0,0,3224,0,3225,3226,0,3228,3233,0,3239,
-3241,3242,0,0,3251,3252,3253,3255,0,0,0,0,0,0,0,0,3260,0,0,3261,0,0,0,3267,0,0,0
-,0,0,0,0,0,3271,0,0,0,3278,0,3282,0,0,0,3284,0,0,0,3285,3286,0,0,0,0,0,0,0,3287,
-3292,0,0,0,0,3294,3296,0,0,3299,3300,3301,0,3302,0,0,0,0,0,3304,3306,0,0,0,0,0,0
-,3308,0,0,0,0,0,0,0,0,0,3311,0,0,0,0,0,0,0,0,3312,3314,3315,0,3318,0,0,0,0,0,0,0
-,0,3319,0,0,0,0,0,3321,0,0,0,0,0,0,0,0,0,3322,0,0,3324,3325,0,0,3326,0,0,3328,
-3329,3331,0,0,3335,0,0,3337,0,3338,0,0,0,0,3343,3347,0,0,0,3348,0,0,3351,0,0,0,0
-,0,0,3354,0,0,0,0,0,0,0,0,0,0,3355,0,0,3365,3366,3367,0,0,0,0,0,0,3368,3369,0,
-3370,0,0,3373,0,0,3376,0,0,3377,0,3379,3387,0,0,0,0,0,3390,0,0,0,0,0,0,0,3402,0,
-3403,3436,3437,3439,0,0,3441,0,0,0,3442,0,0,3449,0,0,0,3450,0,0,0,0,0,0,0,3451,0
-,0,3452,0,3453,3456,0,3457,0,0,3458,0,3459,0,0,0,0,0,0,0,0,0,3460,0,0,3469,3470,
-0,0,3475,0,0,0,3480,3487,3489,0,3490,0,0,3491,3499,0,3500,0,0,3501,0,0,0,3502,0,
-3514,0,0,0,3516,3517,0,0,0,3518,0,0,0,0,3520,3521,3522,0,0,3526,3530,0,0,0,0,
-3531,0,0,0,0,3536,0,0,0,0,0,0,0,3539,3541,0,0,3542,3544,0,3547,3548,0,0,3550,0,
-3553,0,0,0,0,0,0,0,3554,0,3555,0,3558,0,3559,0,0,0,0,0,0,0,0,3563,0,3581,0,0,0,
-3599,0,0,0,3600,0,3601,0,3602,3603,0,0,3606,3608,0,3610,3611,0,0,0,0,0,0,0,0,0,
-3612,3616,3619,0,0,0,0,0,0,0,0,0,0,0,0,0,3624,3628,0,3629,3634,3635,0,0,0,0,0,0,
-3636,0,3637,0,0,3638,3651,0,0,0,0,0,0,3652,3653,0,0,0,0,3656,3657,0,0,0,0,0,3658
-,0,0,0,0,3659,0,3661,3663,3664,0,3665,0,3692,0,0,0,3694,3696,0,0,0,0,0,0,0,0,0,0
-,0,0,3698,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3700,0,0,3701,0,0,0,3708,3709,0,0,0,3711
-,3712,0,0,0,0,0,3723,0,3724,3725,0,0,3726,0,0,0,0,0,0,3728,3729,0,3734,3735,3737
-,0,0,0,3743,0,3745,0,0,3746,0,0,3747,3748,0,3757,0,3759,3766,3767,0,3768,0,0,0,0
-,3769,0,0,3771,0,3774,0,0,0,0,0,0,3775,0,0,0,0,0,0,3776,0,3777,3786,0,3788,3789,
-0,0,0,0,0,0,0,0,0,3791,0,3811,0,0,0,0,0,3814,3815,3816,3820,0,0,0,0,0,0,0,3821,0
-,0,3825,0,0,0,0,3835,0,0,3848,3849,0,0,0,0,3850,3851,3853,0,0,0,0,3859,0,3860,
-3862,0,0,0,0,0,3863,0,0,0,0,0,0,0,0,3873,0,3874,0,3875,3886,0,3887,0,0,0,0,3892,
-3913,0,3914,0,0,0,3925,3931,0,0,0,0,3934,3941,3942,0,0,0,0,3943,0,0,0,3944,0,0,0
-,0,0,3945,0,3947,0,0,0,3956,3957,0,0,0,0,0,0,0,0,0,3958,0,3959,3965,0,0,0,0,3966
-,0,0,0,3967,0,0,0,3968,3974,0,0,0,0,0,3975,3977,3978,0,0,0,0,3980,0,3985,0,0,0,0
-,0,0,0,0,3986,4011,0,0,4017,0,0,0,0,0,0,0,0,0,0,0,4018,0,0,0,0,4019,0,4023,0,0,0
-,4027,4028,0,0,0,0,0,0,0,0,4031,4034,0,0,4035,4037,4039,4040,0,0,0,0,0,4059,0,
-4060,4061,0,4062,4063,4066,0,0,4072,0,0,0,0,0,0,0,0,0,0,0,0,0,4088,0,0,0,0,0,
-4091,0,0,0,0,4094,4095,0,0,4096,0,0,0,0,0,4098,4099,0,0,0,4101,0,4104,0,0,0,4105
-,4108,0,4113,0,0,4115,4116,0,4126,0,0,4127,0,0,0,0,0,0,0,4128,4132,4133,0,4134,0
-,0,0,4137,0,0,4141,0,0,0,0,4144,4146,4147,0,0,0,0,4148,0,0,4311,0,0,0,4314,4329,
-0,4331,4332,0,4333,0,4334,0,0,0,4335,0,4336,0,0,0,4337,0,0,0,4342,4345,4346,4350
-,0,4351,4352,0,4354,4355,0,0,4364,0,0,0,0,4369,0,0,0,4373,0,4374,0,0,0,0,4377,0,
-0,0,0,4378,0,0,0,4380,0,0,0,4381,4382,0,0,0,0,0,0,0,4384,0,0,0,0,4385,0,0,0,4386
-,0,0,0,4391,4398,0,0,0,0,4407,4409,0,0,0,0,4410,0,0,4411,0,4414,4415,4418,0,4427
-,4428,4430,0,4431,0,4448,0,0,0,0,0,4449,0,0,0,4451,4452,0,4453,4454,0,4456,0,0,0
-,0,0,0,0,4459,0,4463,0,0,0,0,0,4466,0,4467,0,4469,0,0,0,0,0,0,0,0,0,0,0,0,0,4470
-,4471,0,4473,0,0,4475,0,0,0,0,4477,4478,0,0,0,4479,4481,0,4482,0,4484,0,0,0,0,0,
-0,0,4486,0,0,4488,0,0,4497,0,4508,0,0,4510,4511,0,4520,4523,0,4524,0,4525,0,4527
-,0,0,4528,0,0,0,0,4530,0,4531,0,0,4532,0,0,0,4533,0,0,0,0,0,4535,0,0,0,4536,0,0,
-0,0,0,4541,4543,4544,4545,4547,0,4548,0,0,0,0,4550,4551,0,4553,0,0,0,0,4562,0,0,
-4571,0,0,0,4574,0,0,0,4575,0,4576,0,4577,0,0,0,4581,0,0,0,0,0,4582,0,0,4586,0,0,
-0,4588,0,0,4597,0,4598,0,0,0,0,4616,4617,0,4618,0,0,0,0,4619,0,4620,0,0,4621,0,
-4624,0,0,0,0,0,4625,0,0,0,0,4657,0,4659,0,4667,0,0,0,4668,4670,0,4672,0,0,0,0,0,
-4673,4676,0,0,0,0,4687,0,0,0,0,4697,0,0,0,0,4699,0,4701,0,0,0,0,4702,0,0,4706,0,
-0,4713,0,0,0,4714,4715,4716,0,0,0,0,0,0,0,0,0,0,0,0,4717,0,0,4720,0,4721,4729,
-4735,0,0,0,4737,0,0,0,4739,0,0,0,4740,0,0,0,4741,0,0,0,0,0,4742,0,4745,4746,4747
-,0,0,0,0,0,0,0,0,4748,0,0,0,4749,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4751,
-4786,0,4787,0,4788,4796,0,0,4797,4798,0,4799,4806,4807,0,0,0,0,4809,4810,0,0,0,0
-,0,0,4811,0,0,0,0,0,4812,0,4813,0,0,4815,0,4821,4822,0,0,0,0,4823,0,0,0,0,0,0,0,
-0,0,0,4824,0,0,0,0,4826,0,0,0,4828,0,4829,0,0,0,4843,0,0,4847,0,4853,4855,4858,0
-,0,0,0,0,4859,0,4864,0,0,4879,0,0,0,0,4880,0,0,0,0,4881,0,4882,0,0,0,0,0,0,0,0,0
-,4883,0,0,0,0,4884,0,0,0,0,0,4886,4887,4888,4894,4896,0,4902,0,0,4905,0,0,4915,0
-,0,0,0,0,0,0,4916,4917,4919,4921,0,0,0,0,0,4926,0,0,0,0,4927,0,0,0,0,0,0,0,0,
-4929,0,4930,4931,0,4938,0,4952,0,4953,4957,4960,4964,0,0,0,0,0,0,0,5019,5020,
-5022,0,0,0,0,0,5023,0,0,0,5024,0,0,0,5025,0,0,0,0,5028,0,0,0,0,5029,5030,5031,0,
-5033,0,0,0,0,0,0,0,0,0,5034,5035,0,5036,0,0,5037,0,0,0,0,5038,0,0,5039,0,0,0,
-5041,5042,0,0,0,0,5044,5049,5054,0,5055,0,5057,0,0,0,5060,0,0,0,0,0,5063,0,5064,
-5065,0,5067,0,0,0,5068,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5076,0,0,0,0,0,0,
-0,5077,0,0,5078,5080,0,0,5083,0,0,0,0,0,0,0,0,5085,0,0,0,0,0,0,5098,5099,5101,
-5105,5107,0,5108,0,5109,0,0,0,0,0,0,0,5110,0,0,0,0,0,5117,5118,0,5121,0,5122,0,0
-,5130,0,0,0,5137,0,0,0,5148,0,0,0,0,0,0,0,5151,5154,0,0,0,5155,0,0,5156,5159,
-5161,0,0,0,0,5162,0,0,0,0,5163,5164,0,5166,0,0,0,0,0,0,0,0,0,0,5167,0,0,0,5172,0
-,0,0,0,0,0,5178,5179,0,0,5190,0,0,5191,5192,5194,0,0,5198,5201,0,0,0,0,0,5203,0,
-5206,5209,0,0,0,0,0,0,5213,0,5214,5216,0,0,0,0,0,5217,0,0,0,0,0,0,0,0,5218,5219,
-0,5231,0,0,5244,5249,0,5254,0,5255,0,0,5257,0,0,0,0,0,5258,0,5260,5270,0,5277,0,
-0,0,0,0,0,5280,5281,5282,5283,0,0,0,0,0,5284,0,5285,0,0,0,0,0,5287,5288,0,0,0,0,
-0,0,0,0,0,0,5289,5291,0,0,5294,0,0,5295,0,0,0,0,0,0,0,5304,0,0,5306,5307,5308,0,
-5309,0,0,5310,0,0,0,0,5311,5312,0,5313,0,0,0,0,0,5316,0,0,0,5317,0,0,0,0,0,0,0,0
-,0,5325,0,0,0,0,0,0,5326,0,5327,5329,0,5332,0,0,0,0,5338,0,0,0,0,0,0,0,0,5340,0,
-0,5341,0,0,0,5342,0,5343,5344,0,0,5345,0,0,0,0,0,0,5347,5348,0,0,0,0,0,0,0,0,0,
-5349,0,5350,0,5354,0,0,0,0,5358,0,0,5359,0,0,5361,0,0,5365,0,5367,0,5373,0,0,0,
-5379,0,0,0,5380,0,0,0,5382,0,5384,0,0,0,0,0,0,5385,0,0,0,0,5387,0,0,0,0,0,0,5388
-,5390,5393,0,0,0,0,0,0,0,0,0,0,0,5396,0,0,0,0,5397,5402,0,0,0,0,0,5403,0,0,0,
-5404,5405,0,0,0,0,0,0,0,0,0,0,0,0,5406,0,0,0,0,5410,0,0,5411,0,5415,0,0,0,0,5416
-,5434,0,0,0,0,0,0,0,0,0,0,0,5438,0,5440,0,0,0,0,0,0,5441,5442,0,0,0,5443,5444,
-5447,0,0,5448,5449,5451,0,0,0,5456,5457,0,0,0,5459,0,0,0,5461,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,5464,0,5466,0,0,5467,0,5470,0,0,5473,0,0,5474,0,0,5476,0,0,0,0,0,0,0,0
-,0,0,0,5477,0,0,0,0,0,0,0,5484,0,0,5485,5486,0,0,0,0,0,5488,0,0,0,0,0,0,0,5489,0
-,0,0,0,0,5507,0,0,0,5510,0,5511,0,0,5512,0,0,0,5513,0,5515,0,0,5516,5517,0,5518,
-0,0,5522,0,0,0,0,0,5534,5535,0,0,5536,0,5538,0,0,5543,0,5544,0,0,5545,0,5547,0,
-5557,0,0,5558,0,5560,5567,0,0,0,0,5568,0,0,0,5571,5573,0,5574,0,5575,0,0,0,0,
-5577,0,0,5598,0,0,0,0,0,0,0,0,0,5600,5609,0,0,0,0,5610,0,0,5612,0,5624,0,5625,0,
-0,0,5629,0,5641,0,5642,5643,0,0,0,0,0,0,5651,0,0,0,5652,5653,0,5661,5662,5678,0,
-5679,0,0,0,0,5685,5686,0,0,0,0,0,5690,5692,0,5703,0,0,0,0,0,5706,0,0,0,0,5707,0,
-0,0,0,0,0,5708,0,0,5709,0,5710,0,0,0,5712,0,5733,0,5734,5735,0,0,5744,5751,0,0,0
-,0,0,0,0,0,0,0,0,0,5752,0,5754,0,0,0,0,0,0,5757,5758,0,5760,5761,0,0,0,0,5763,
-5764,5765,0,5766,0,5767,5768,0,5770,0,0,0,0,5776,5780,0,0,0,0,5782,0,0,0,0,5784,
-0,0,5788,0,0,0,0,0,0,0,0,0,0,0,5797,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5799,0,0,5801,
-0,0,0,5811,0,0,0,0,0,0,5816,0,0,5827,0,0,0,0,0,0,0,0,5830,5831,0,0,5832,0,0,5833
-,0,5835,5844,5845,0,5846,0,0,0,0,0,5850,0,0,0,0,0,5852,0,5855,5857,0,0,5859,0,
-5861,0,0,5863,0,5865,0,0,0,5873,5875,0,0,0,5877,0,5879,0,0,0,5888,0,0,5889,5891,
-0,5894,0,0,0,0,0,0,5895,0,5897,0,0,0,0,0,0,5907,0,5911,0,0,5912,0,5913,5922,5924
-,0,5927,5928,0,0,0,0,5929,5930,0,5933,0,0,0,0,5949,0,0,5951,0,0,0,0,0,0,0,0,5953
-,0,0,5954,0,5959,5960,5961,0,5964,0,0,0,5976,5978,5987,5990,0,0,0,0,0,5991,0,
-5992,0,0,0,5994,5995,0,0,5996,0,0,6001,6003,0,0,0,0,6007,0,0,0,0,0,6008,0,0,6009
-,0,6010,0,0,0,6011,6015,0,6017,0,6019,0,6023,0,0,0,0,0,0,0,6025,0,0,0,0,0,0,0,0,
-0,0,6026,0,6030,0,0,6032,0,0,0,6033,6038,6040,0,0,0,6041,6045,0,0,6046,0,0,6053,
-0,0,6054,0,6055,0,0,0,0,0,0,6057,0,6063,0,0,0,6064,0,6066,6071,6072,0,0,0,0,0,0,
-6075,6076,0,0,6077,0,0,0,0,0,0,0,0,0,6078,6079,0,0,0,0,0,0,0,0,6080,0,6083,0,0,0
-,0,0,6084,0,0,6088,0,6089,0,0,6093,6105,0,0,6107,0,6110,0,0,0,6111,6125,6126,0,0
-,0,6129,0,0,0,0,6130,0,0,0,6131,6134,0,0,0,0,0,0,6142,0,0,0,0,0,6144,0,0,6146,
-6151,6153,0,6156,0,6163,0,6180,6181,0,0,0,0,0,6182,0,0,0,0,6184,6195,0,0,6206,0,
-6208,0,0,6212,6213,6214,0,6215,0,0,0,6228,0,0,0,6234,0,0,0,0,0,0,6235,6240,0,
-6242,6243,6244,0,6250,6255,0,0,0,0,0,6257,0,0,0,6258,6278,0,6284,0,0,0,6285,0,0,
-0,0,0,0,0,0,6286,0,0,0,6320,0,0,6322,6332,0,0,0,0,0,0,0,0,6334,0,0,0,0,0,0,0,
-6335,0,0,6337,0,6338,0,6339,6340,0,0,6356,6357,6369,0,0,0,6370,6371,6372,0,6373,
-0,0,0,0,0,6376,0,0,0,0,0,6382,6383,6384,0,0,0,0,6386,0,6389,6397,6400,6411,0,
-6414,0,0,0,0,0,0,0,6415,6416,0,0,0,0,0,0,6417,0,0,0,0,6418,0,0,0,0,0,0,0,6420,0,
-6421,6423,6425,0,6429,6430,0,6433,6438,0,0,0,0,0,0,0,0,0,0,6439,6440,0,0,6441,0,
-0,6444,0,0,0,0,6446,0,0,0,0,6447,6448,0,0,6450,0,0,0,6454,0,0,6455,0,6461,0,0,0,
-0,0,0,6462,0,0,6463,0,6464,0,6465,6467,0,0,0,6468,0,6479,6480,0,0,0,0,0,0,0,6481
-,0,0,6485,6487,0,0,0,0,0,0,6493,0,0,0,0,0,0,0,0,6494,6495,6496,0,0,0,0,0,6498,0,
-0,0,6507,6508,0,0,0,0,0,0,0,0,0,0,6511,6512,0,0,0,0,6513,0,0,0,6514,0,0,0,0,0,
-6516,0,0,6517,6518,0,0,0,6519,6520,6521,0,6523,0,0,0,0,6524,6528,0,6530,0,0,6532
-,0,6578,0,0,0,6583,0,6584,0,0,0,6587,0,0,0,6590,0,6591,0,0,0,0,0,6592,0,0,0,0,
-6593,6594,0,0,0,0,0,6599,6600,0,0,6601,6602,6604,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-6608,0,0,0,0,0,0,0,0,6610,6611,0,6615,0,6616,6618,6620,0,6637,0,0,0,0,6639,0,0,0
-,0,6641,0,6642,0,0,0,6647,0,6660,6663,0,6664,0,6666,6669,0,6675,6676,6677,0,0,0,
-0,0,0,0,0,0,6678,0,0,0,6679,0,6680,0,0,0,0,0,0,0,6693,0,0,0,0,0,0,0,0,0,6704,
-6705,6706,0,0,6711,6713,0,0,0,0,0,6716,0,0,0,6717,0,6719,6724,0,0,0,0,0,0,0,0,
-6725,6726,0,0,0,0,0,6728,6729,6735,0,6737,6742,0,0,6743,6750,0,6751,0,0,6752,
-6753,0,0,0,0,0,0,6754,0,0,0,0,0,6756,0,0,0,0,0,0,6763,0,0,6764,6765,0,0,0,6770,0
-,0,0,6776,6780,0,6781,0,0,0,6783,0,6784,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-6785,0,0,0,6792,0,0,0,6793,0,0,6802,0,0,0,0,0,6803,0,0,0,6804,0,0,0,6812,0,0,
-6823,0,6824,6839,0,0,0,0,6852,0,0,6854,0,6856,6857,0,0,0,0,0,0,0,0,0,6867,0,6868
-,6870,6872,0,0,0,6873,6874,0,0,0,0,0,6875,0,0,6877,0,0,0,0,0,0,0,6878,0,0,0,6879
-,0,6880,0,0,0,0,0,0,0,0,0,0,6887,0,6888,6891,6893,0,6895,0,0,0,0,0,0,0,0,6899,0,
-0,0,0,6901,0,0,0,0,6910,0,6911,0,0,6912,0,0,6913,6914,0,0,0,6915,0,0,0,6916,6919
-,0,0,0,0,0,0,6924,0,6925,0,0,0,6926,6927,6928,0,6929,0,6930,0,0,6931,6935,0,6936
-,0,0,0,0,6939,6940,6941,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6942,6948,6949,0,0,0,0,0,0
-,0,6952,6954,6963,6965,6966,0,0,6967,6968,0,0,0,0,0,0,0,0,0,6969,0,0,6970,6979,0
-,0,6980,0,0,6983,0,0,0,0,0,6984,0,0,0,0,0,0,0,6988,6990,6992,0,0,0,0,0,0,0,6995,
-0,0,0,7012,0,0,0,0,0,0,0,0,0,7019,0,0,0,0,0,0,0,0,7021,0,0,7022,7023,7028,0,7030
-,7033,0,0,0,0,0,0,7038,0,0,0,0,0,0,0,0,0,0,7039,0,0,0,0,0,7046,0,7047,0,0,0,0,0,
-0,0,0,0,0,0,7048,7052,0,0,0,0,0,7054,0,7060,0,0,0,0,7061,0,7065,0,0,0,0,7067,
-7069,0,7070,7071,7072,0,0,7078,0,7080,7081,0,7083,0,0,0,7084,7087,7088,0,0,7090,
-0,7093,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7107,0,0,7108,0,0,0,0,0,0,0,0,7110,0,7114,0
-,0,0,0,0,0,0,7115,0,7116,0,0,0,0,0,7117,0,0,7118,0,0,7124,0,7125,0,0,7126,0,0,0,
-0,7128,0,0,0,0,0,7129,0,7130,0,7132,7133,0,0,7134,0,0,7139,0,7148,7150,0,0,0,0,
-7152,0,0,0,7153,7156,7157,0,0,0,0,0,7158,0,0,0,0,0,0,0,0,0,0,7163,7165,7169,0,
-7171,0,0,0,0,0,0,0,0,0,7172,0,7173,7181,0,0,0,0,0,7182,7185,0,0,0,0,7187,0,7201,
-7204,0,0,0,0,0,7206,7207,0,0,0,0,7211,7216,0,7218,0,0,0,0,7226,7228,7230,7232,
-7233,7235,7237,0,0,0,0,7238,7241,0,7242,0,0,7247,0,0,0,7266,0,0,0,0,0,0,0,7289,0
-,0,7290,7291,0,0,7292,0,7297,0,0,0,0,0,0,0,0,0,0,7300,0,7301,0,0,0,0,0,0,0,0,0,0
-,0,0,7302,0,0,0,0,7305,0,0,0,0,7307,0,7308,0,7310,0,7335,0,0,0,0,0,0,0,7337,0,
-7343,7347,0,0,0,0,0,7348,0,7349,7350,7352,7354,0,0,0,0,7357,0,7358,7366,0,7367,
-7368,0,0,7373,0,0,0,7374,0,0,0,0,0,0,0,7376,0,0,0,7377,0,0,0,0,0,7378,0,7379,
-7380,0,0,0,0,0,7383,0,0,7386,0,0,0,0,7398,0,0,0,7399,7400,0,7401,0,0,0,0,0,0,0,
-7402,0,0,0,0,0,7405,0,0,0,0,0,7406,0,0,0,0,0,0,0,0,7421,7427,7429,0,0,0,7435,0,0
-,7436,0,0,0,7437,0,0,0,0,0,0,7438,7443,0,7446,0,7448,0,0,0,0,0,0,0,0,0,0,7456,0,
-0,0,0,0,7457,0,0,7461,0,0,0,0,0,7462,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7463,7466,7472,
-0,7476,0,0,7490,0,7491,0,0,7493,0,0,0,7498,7499,0,0,7508,0,0,0,0,0,7512,0,0,0,
-7513,7514,7516,0,0,0,0,7518,0,0,7519,7521,7522,0,0,0,7526,0,0,7529,0,0,7531,0,
-7536,0,7538,0,7539,0,0,7541,7542,7546,0,0,0,0,0,7547,0,7548,0,0,0,0,0,7550,0,0,
-7552,7553,0,0,0,0,0,0,0,0,0,0,7554,7563,0,7573,0,0,0,0,0,0,7574,7576,0,7578,7581
-,7583,0,0,0,7584,0,7587,0,0,0,0,0,7589,0,0,0,7594,0,0,7595,0,0,7600,7602,7610,0,
-0,0,0,0,7612,0,7613,7614,0,0,7615,0,0,7616,0,7620,0,7621,7622,0,7623,0,0,0,0,
-7626,0,0,0,0,7627,7629,7631,0,0,7633,0,0,0,0,0,7639,0,7640,7642,0,0,7643,0,0,0,0
-,7644,0,0,0,0,0,0,0,7645,0,0,0,0,0,7661,7662,7663,7665,0,7666,0,7667,0,7684,7688
-,7690,0,7691,0,0,0,0,0,0,7692,0,0,7700,0,7707,0,7708,0,7709,0,7721,0,0,0,7722,0,
-7724,0,0,0,0,0,0,7729,7731,0,7732,0,7733,7735,0,0,0,0,0,0,0,7739,0,0,7741,7745,0
-,7748,0,0,0,7751,0,0,0,7752,0,0,0,0,0,0,0,7753,0,0,7756,0,7757,0,7759,0,7760,0,0
-,0,0,7761,7768,0,0,7769,0,0,7770,0,0,7771,0,0,7772,0,0,7773,0,0,0,0,0,7778,7783,
-0,0,0,0,0,7784,7785,0,7790,0,0,0,0,7792,0,7798,0,0,0,0,0,7799,0,7810,0,0,7813,0,
-7814,0,7816,0,7818,7824,7825,7826,0,7828,7830,0,0,0,7840,0,7842,0,7843,0,0,0,0,
-7844,0,0,0,0,0,0,0,7846,0,0,0,0,0,7856,7857,7858,7862,0,7865,0,0,7866,0,0,7913,0
-,0,0,0,7914,0,0,7915,7917,7918,7919,0,7920,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7921,
-7922,0,7924,0,0,7925,0,0,7927,0,7930,7935,0,0,7937,0,0,0,0,0,0,7939,0,7940,0,0,0
-,0,0,7941,0,0,0,0,7945,0,0,0,0,7949,0,0,0,0,0,0,0,0,7950,0,7953,0,0,0,0,0,0,0,
-7968,0,0,0,0,7969,7972,7992,0,7993,0,0,0,0,0,0,0,0,0,0,0,7994,0,0,0,0,8007,8008,
-0,0,0,0,0,0,0,0,0,0,0,0,8010,0,0,0,8012,0,0,0,0,0,0,0,0,8018,0,8028,8029,0,0,
-8030,0,0,8032,8033,0,0,8034,8036,0,0,0,0,0,0,0,0,0,0,8037,0,0,0,8043,8052,8059,
-8060,0,0,8061,0,0,0,8062,0,8063,0,8064,0,8066,8068,0,0,0,8080,8081,0,8089,0,0,0,
-0,0,8092,0,0,0,0,0,0,8093,8110,0,0,0,0,0,0,0,8111,0,0,0,0,0,8112,8115,0,8117,0,0
-,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8120,8121,8122,8128,8129,8130,8131,0,0,8139,0,0,
-8144,0,0,0,0,8145,8146,8153,0,0,0,0,0,0,0,0,8154,0,8157,8160,8162,0,8164,8165,0,
-0,0,0,8166,8167,0,0,8179,0,0,0,8185,0,0,0,8186,0,0,8187,0,0,0,8188,0,0,0,0,0,
-8204,0,0,0,0,8210,0,0,0,0,0,8213,0,8214,0,0,8215,0,0,0,0,0,0,8218,0,0,0,0,0,0,0,
-0,0,8219,0,8221,0,0,8222,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8225,0,0,0,8233,0,0,
-8242,0,0,0,0,0,0,0,0,0,0,0,8247,0,8248,8252,0,8256,8257,0,0,8261,0,8264,8265,0,0
-,0,0,8267,0,0,0,8269,0,0,0,0,0,0,0,0,0,8270,0,0,0,8278,0,8279,8283,0,0,8285,8286
-,8289,8292,0,0,0,0,8293,8295,8299,8300,8301,0,0,0,0,0,0,8304,8307,0,0,0,0,0,0,0,
-8321,0,0,0,8322,8323,8325,8326,8327,0,0,8332,8338,0,0,8340,0,0,0,0,0,8350,0,0,
-8351,0,8354,8355,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8360,8372,0,0,0,0,0,0,0,0,8377,0,0,
-0,0,8380,0,0,0,8383,0,8384,0,0,0,0,8386,8392,0,0,8394,0,0,0,0,0,0,0,8396,8397,0,
-8398,0,8399,0,0,0,0,0,8400,0,8401,8410,8411,0,8412,8413,8422,0,0,0,0,8423,0,0,0,
-0,8424,0,0,8425,0,0,0,0,0,0,0,8441,8442,0,0,0,0,0,0,8443,0,0,8444,0,8447,0,0,0,0
-,8451,0,8458,0,8462,0,0,8468,0,8469,0,0,0,8470,0,8473,8479,8480,0,0,0,0,8481,
-8483,0,0,0,0,0,0,0,0,0,8484,0,0,8490,0,0,0,0,0,0,8491,8493,8494,0,8528,0,0,0,0,0
-,0,0,8530,0,0,0,0,0,0,0,0,8534,8538,8540,0,0,8541,0,0,8545,0,8557,0,0,8569,8570,
-0,0,8571,8574,8575,8579,0,8583,0,0,0,0,8591,0,0,0,0,0,0,0,0,8606,0,8607,0,0,0,0,
-0,0,0,0,0,8608,0,0,8609,0,0,0,8610,0,0,0,8611,0,0,8613,8617,8621,0,0,8622,0,8623
-,0,8624,8625,0,0,0,0,0,0,0,0,0,8637,8638,8639,8650,0,0,0,0,8652,8654,8655,0,0,0,
-0,0,0,0,0,0,0,8656,0,0,0,0,0,8657,0,0,0,0,0,0,0,0,0,8658,0,0,8659,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,8660,0,0,0,0,0,0,8661,8663,8664,0,0,0,0,8665,0,8669,0,
-0,0,0,0,0,0,8671,8674,0,8684,0,8686,0,0,0,8689,0,0,0,8690,0,8706,0,0,0,0,0,0,0,0
-,0,0,0,8710,0,8711,8713,8714,8724,8727,8728,8733,8736,0,8737,8739,0,0,0,0,8742,
-8743,8745,8754,0,0,0,0,8756,0,0,0,0,0,0,8757,8760,0,0,0,0,0,8762,8763,8764,0,
-8766,8769,8770,8773,0,8774,0,8779,0,0,0,0,8780,0,0,8781,0,0,8783,0,0,0,0,0,0,0,0
-,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8784,0,0,0,0,0,0,0,0,8785,0,0,0,0,8786,0,0,0,0,8788
-,8790,0,0,0,8803,0,8813,8814,0,0,0,0,0,8815,8816,0,0,0,0,8818,0,0,0,0,8822,8828,
-8829,0,8831,0,0,0,0,8833,0,0,0,8834,0,0,0,8835,0,8836,0,0,0,8837,0,0,0,0,0,0,
-8838,8839,0,0,0,0,0,0,0,0,0,0,0,8840,0,0,0,8841,0,8842,0,0,0,8846,0,0,0,0,0,0,0,
-8847,0,8848,0,0,8864,0,0,8866,0,0,8870,8872,0,0,8873,8874,0,0,0,0,0,0,8875,0,
-8876,0,0,0,0,8896,8900,0,0,0,0,8901,0,0,0,0,0,8904,0,8907,0,0,0,0,8911,8912,8913
-,0,0,0,8914,0,8915,0,0,0,0,0,0,0,0,0,0,0,0,8916,0,0,0,8929,0,0,0,0,0,0,0,0,0,0,
-8930,0,8932,0,8943,0,0,0,8945,8947,0,0,0,0,8949,0,8950,0,8954,8957,0,0,8970,0,0,
-0,0,8971,0,8996,0,0,0,0,8997,9000,0,0,0,0,9001,9002,0,9004,9009,9024,0,0,0,0,0,0
-,0,0,0,0,0,0,9027,9082,0,0,9083,9089,0,0,0,0,0,0,9090,0,0,0,9092,0,0,9093,0,9095
-,0,0,9096,9097,9101,9102,0,0,0,0,0,0,0,0,9112,0,0,0,0,0,0,9114,0,0,9120,0,9121,
-9122,0,0,0,9123,9124,0,0,9125,0,0,9126,0,9127,0,0,9129,9131,0,0,0,9132,0,0,9136,
-0,9144,0,0,9148,0,0,0,0,0,0,9149,0,9152,9163,0,0,9165,0,0,0,0,0,0,0,0,0,0,0,0,0,
-9166,0,9169,0,0,0,0,0,0,0,9170,0,0,0,0,9172,0,9174,9175,9176,0,9177,0,0,0,0,0,0,
-0,0,9186,0,9187,0,0,0,9188,9189,0,0,9190,0,0,0,0,9191,0,0,0,9193,0,0,0,0,9197,
-9198,0,0,0,9208,9211,0,0,0,0,9216,9217,0,9220,0,0,0,0,9221,9222,9223,0,9224,9225
-,0,0,9227,0,9228,9229,0,0,9230,0,9232,0,9233,0,0,0,0,0,9234,9235,0,0,9237,0,0,0,
-0,0,0,0,0,9238,9240,0,0,9241,0,0,0,0,9244,0,0,0,0,9247,0,0,0,0,0,0,0,0,0,0,9248,
-0,0,0,9249,0,0,0,0,0,9250,0,0,0,0,9251,0,0,9252,9255,0,0,0,9256,0,0,0,0,0,0,0,
-9257,0,0,9258,0,0,0,0,0,0,9259,0,0,0,0,0,9262,9263,0,0,9265,9266,0,0,0,0,0,0,0,0
-,9268,9271,0,0,0,0,0,0,0,0,0,9273,0,0,0,9276,9277,9279,0,0,0,0,0,0,0,9280,0,0,
-9293,0,0,0,0,0,9297,9301,0,0,0,0,0,0,0,0,0,0,0,9308,9309,9313,9321,9322,0,9326,
-9327,0,0,9477,0,9479,0,0,0,0,9482,0,0,0,9483,0,9484,0,0,0,0,0,0,0,0,0,9485,0,0,
-9486,0,0,0,9489,0,0,0,0,9490,9491,0,0,0,0,9493,0,9495,9496,0,0,0,0,0,0,0,0,9500,
-0,9502,0,0,0,0,0,9504,9507,0,9509,0,9511,0,0,9513,0,0,0,0,0,0,0,0,9515,0,0,0,0,0
-,0,9516,9517,0,0,0,0,9532,0,0,9533,0,0,9538,0,9539,9540,0,0,0,0,9541,0,0,0,9542,
-0,0,0,0,0,0,0,0,9544,9545,0,9546,0,0,0,0,0,0,9547,9548,0,0,0,9550,0,9557,0,9558,
-0,9561,0,9563,9570,0,9572,9574,9575,0,0,0,9577,9592,0,0,9596,0,0,0,9598,0,9600,0
-,9601,0,0,0,0,0,0,9608,0,9638,9639,0,0,0,0,0,0,0,9641,0,0,9643,9644,9645,9646,0,
-0,0,9648,0,0,0,0,0,0,0,9650,9654,0,0,0,0,0,0,0,0,9655,0,0,0,0,0,9656,0,9657,0,0,
-0,0,9658,0,0,9659,0,0,9664,0,0,9665,0,9667,9669,0,0,0,0,0,0,0,0,0,0,0,0,9671,0,
-9673,9681,0,0,0,0,9682,9683,9684,0,0,0,0,9686,9698,0,0,9700,9701,9702,0,9703,
-9717,0,0,0,0,9718,0,9726,0,0,0,0,9727,0,0,0,9728,0,9742,0,9744,0,0,0,9750,0,9754
-,9755,0,0,0,0,0,9756,0,9757,9768,0,9769,0,0,0,9770,9771,0,9773,0,9774,0,9775,0,0
-,0,9776,9777,9784,0,0,0,9786,0,9789,0,0,0,0,9793,9794,0,0,0,9808,0,0,0,0,0,9811,
-0,0,0,0,0,0,0,0,0,0,0,0,9812,0,9820,0,9823,0,9828,0,0,0,0,9830,0,0,9833,9836,0,0
-,0,9840,0,0,0,9841,0,0,9842,0,9845,0,0,0,9847,9848,0,0,9855,0,0,0,0,0,0,9856,
-9863,9865,0,0,0,0,0,0,0,0,9866,9867,9868,9873,9875,0,0,0,0,0,0,9880,0,9886,0,0,0
-,9887,0,0,9891,0,0,0,0,0,0,0,9906,9907,9908,0,0,0,9909,0,0,0,0,0,0,9910,0,0,0,0,
-9913,0,0,0,0,9914,0,0,0,0,0,9922,0,0,0,0,9923,9925,0,0,0,0,0,0,9930,0,0,0,9931,0
-,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9932,0,9939,0,0,9940,9962,9966,0,9969,9970,0,0,9974
-,0,9979,9981,9982,0,0,0,9985,0,0,0,0,0,0,9987,0,0,0,0,0,0,0,9988,9993,0,0,9994,0
-,0,0,9997,0,10004,0,0,0,0,0,10007,10019,10020,10022,0,0,0,10031,0,0,0,0,0,10032,
-0,0,10034,0,10036,0,0,0,0,10038,0,10039,10040,10041,10042,0,0,0,0,0,10043,0,0,0,
-0,0,10045,10054,0,0,0,0,10055,0,0,10057,10058,0,0,0,0,0,0,10059,0,0,0,0,0,0,0,
-10060,0,0,0,0,0,0,0,10063,0,10066,0,0,0,10070,0,10072,0,0,10076,10077,0,0,10084,
-0,10087,10090,10091,0,0,0,10094,10097,0,0,0,0,0,0,10098,0,0,0,0,0,0,10103,0,
-10104,0,10108,0,0,0,0,0,0,0,0,10120,0,0,0,10122,0,0,10125,0,0,0,0,10127,10128,0,
-0,10134,0,10135,10136,0,10137,0,0,10147,0,10149,10150,0,0,10156,0,10158,10159,
-10160,10168,0,0,10171,0,10173,0,0,0,10176,0,0,0,0,10177,0,0,0,0,10178,0,0,0,0,
-10194,0,10202,0,0,10203,10204,0,10205,10206,0,10207,0,0,0,0,10209,0,0,0,0,0,0,0,
-10213,0,0,0,0,0,0,10217,0,10229,0,10230,10231,0,0,10232,0,0,10237,10238,10244,0,
-0,0,0,0,10250,0,10252,0,0,0,0,0,0,10255,0,0,10257,0,0,0,0,0,0,10258,0,10259,0,0,
-0,0,0,0,0,0,10260,0,0,0,0,0,0,0,10284,10288,10289,0,0,0,10290,0,10296,0,0,0,0,0,
-10297,0,0,0,0,0,0,10298,0,0,0,0,10299,10303,0,0,0,0,0,10306,0,0,0,10307,0,10308,
-0,0,0,0,10311,0,0,0,0,0,0,0,10315,10317,0,0,0,10318,10319,0,10321,0,10326,0,
-10328,0,0,0,0,10329,0,0,10331,0,10332,0,0,0,0,0,0,10334,0,0,10335,10338,0,0,0,0,
-0,10339,10349,0,0,0,0,0,0,10351,0,10353,0,0,0,0,0,0,10362,0,10368,0,10369,0,0,0,
-10372,10373,0,0,0,0,0,10374,0,0,0,10375,0,10376,0,0,10386,10388,10390,0,0,0,0,0,
-0,0,10391,0,0,10392,10394,0,0,10396,0,10397,0,10403,0,0,0,0,0,0,0,0,10404,0,
-10405,10410,0,0,10411,0,10412,0,0,0,0,0,0,0,10421,10422,10423,0,0,0,0,0,0,0,0,0,
-10425,0,0,10427,0,0,10430,0,0,0,0,0,10432,0,10433,10434,0,0,0,0,10436,10437,0,
-10438,0,10439,0,10444,10446,0,0,0,0,0,10448,0,0,0,0,0,10449,0,0,0,0,0,0,0,10451,
-0,10453,0,0,0,10454,10457,0,0,10459,0,10469,0,0,0,0,0,10472,10481,0,0,0,0,0,
-10482,10483,0,10492,0,0,0,0,0,0,0,0,0,0,10499,0,0,0,10502,0,0,10510,0,10521,
-10524,0,0,10525,10526,10528,0,0,0,0,0,0,0,0,10530,0,0,0,0,10533,0,10534,0,0,0,0,
-0,0,0,0,0,0,10535,10536,0,0,10544,0,10553,10556,0,10557,10559,0,0,0,0,0,10562,
-10563,10564,0,10565,0,0,0,10566,0,10567,0,0,0,0,10575,0,0,10576,0,10578,0,0,0,0,
-0,0,0,0,0,0,10585,10586,10587,10589,0,10590,0,0,10594,0,0,0,0,0,10598,0,0,10601,
-0,0,0,10602,0,10603,0,10604,0,10605,0,0,10607,0,10626,0,10627,0,0,0,0,0,10629,
-10630,10631,0,0,0,10646,0,0,0,10647,0,10650,0,10651,0,0,0,10652,10653,10655,0,
-10658,0,0,10659,0,10667,0,0,0,0,10669,0,0,0,0,0,0,0,0,0,10670,0,0,0,10671,0,0,0,
-0,10672,10673,0,10674,0,0,0,10676,0,0,0,0,0,0,10678,0,10682,0,0,10692,0,10697,0,
-0,0,0,10698,0,0,0,10700,0,0,0,0,0,10703,0,10704,0,0,0,0,0,0,0,10705,0,10715,
-10718,10720,0,0,10722,0,0,0,0,0,0,0,0,10723,0,0,0,0,10726,0,0,0,0,0,10727,10730,
-10743,0,0,0,0,0,0,10744,0,0,10745,0,0,0,0,0,0,10748,0,0,0,0,10750,0,0,10752,
-10753,0,0,0,10756,0,0,0,0,0,0,10758,0,0,0,10759,0,10769,0,0,10772,0,0,0,0,0,0,
-10773,0,0,0,10777,0,0,10779,0,0,0,0,0,0,0,0,10780,10784,0,0,0,10789,0,0,0,10791,
-0,0,0,0,0,0,0,0,0,10795,0,0,10796,0,10808,0,10809,0,0,0,10810,0,0,0,10812,0,0,
-10814,0,0,0,0,0,0,0,0,0,10815,0,0,0,0,10816,10817,0,0,0,0,10819,0,10820,0,0,0,0,
-10821,10822,10823,0,10826,10849,0,0,0,0,10850,0,0,10852,0,10853,0,0,10856,0,0,
-10857,10858,10859,10860,0,0,0,0,0,0,10863,0,10866,10867,10872,10890,0,0,10891,
-10892,0,0,0,0,0,10893,0,0,0,10896,10899,0,0,10900,10902,0,0,0,0,0,10903,0,0,0,0,
-0,0,0,0,0,0,0,0,10905,0,10906,0,0,0,0,10908,10911,0,10912,0,0,10916,0,0,0,0,0,
-10917,0,10918,0,0,0,10923,0,0,0,0,0,10924,0,0,10928,10929,0,0,10930,0,0,0,10932,
-0,0,0,0,10939,0,0,10945,0,0,0,10947,0,0,10948,0,0,0,0,0,0,0,0,0,0,0,0,10958,0,
-10960,10962,0,0,10964,0,0,0,10966,0,0,0,0,0,0,0,0,0,0,10967,0,0,0,10968,0,0,0,
-10973,0,0,0,0,0,10975,0,0,0,10976,10978,0,0,10982,10984,10987,0,0,10988,0,10989,
-0,0,10991,0,0,0,0,10992,0,0,0,10993,0,10995,0,0,0,10996,10997,0,0,0,10998,0,
-10999,0,11001,0,0,0,0,0,0,11010,11012,0,11013,11016,11017,0,0,11019,11020,11021,
-0,0,0,0,0,0,0,0,0,0,0,0,11022,0,0,11023,11029,0,0,0,0,11031,0,0,0,11034,0,0,0,0,
-11055,0,0,0,0,0,11056,11060,0,0,0,0,0,0,11061,0,0,11064,11065,0,11066,0,11069,0,
-11085,0,0,0,0,0,11086,0,0,0,11088,0,0,0,11094,0,0,0,11095,11096,0,0,0,0,0,0,
-11097,11098,0,0,0,0,0,0,11099,0,0,11102,11108,0,0,0,11109,0,11114,11119,0,11131,
-0,0,0,11142,0,0,11143,0,11146,0,11147,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11148,0,
-11149,11152,11153,11154,0,11156,0,11157,0,0,0,11158,0,0,11159,11160,0,0,0,0,0,0,
-0,0,0,0,0,0,11163,0,0,11164,11166,0,0,0,11172,11174,0,0,0,11176,0,0,0,0,0,11182,
-11183,0,0,0,11184,11187,0,0,11188,11189,0,0,0,0,0,0,11194,0,0,0,0,0,0,0,11200,
-11202,0,0,0,0,0,0,11203,0,11204,0,0,0,0,0,11205,0,0,0,11206,0,11207,0,0,11209,0,
-11211,0,11214,0,0,11231,0,0,0,11293,11295,0,0,11296,11297,11302,0,0,0,11307,0,0,
-0,0,11309,11310,0,11311,0,0,0,11313,0,11314,0,0,0,0,11334,0,11338,0,0,0,11339,0,
-0,0,0,0,11340,0,11341,11342,0,11344,0,11345,0,0,0,11348,11349,0,0,11350,0,0,0,
-11355,0,0,0,0,0,0,11356,0,11357,11370,0,0,11371,0,11374,11376,0,0,0,11377,0,0,
-11378,11383,0,11386,11399,0,11400,11406,0,0,0,11408,0,0,11409,11412,0,0,0,0,
-11417,0,0,0,11418,0,11421,0,11426,11429,0,0,0,0,0,11430,0,11437,0,11438,0,0,0,0,
-0,11440,11453,0,0,0,0,0,0,11454,0,0,0,0,11455,0,0,11456,11460,11461,11463,0,
-11469,0,11473,0,0,0,0,11474,0,0,0,11475,0,11476,11477,11480,0,0,0,0,11481,0,0,
-11484,0,0,11487,0,0,0,0,0,0,0,0,0,0,11497,0,0,11502,0,11509,0,0,11510,11511,
-11513,0,0,0,0,0,0,0,0,0,0,11515,0,0,0,0,11516,0,11520,11521,0,0,0,0,0,0,0,0,0,0,
-0,11529,11530,11531,11534,0,0,11543,0,0,0,0,0,11547,0,11548,0,0,0,0,0,11552,
-11556,0,11557,0,0,11559,0,11560,0,0,0,0,0,0,11561,0,0,11563,11564,0,11565,0,0,0,
-0,11567,0,0,0,11569,0,11574,0,11575,0,0,0,11577,0,11578,0,0,0,11580,11581,0,0,0,
-11582,11584,0,0,0,0,0,0,0,11587,0,11588,11591,0,11595,0,0,0,0,0,0,0,0,11596,0,
-11597,0,0,0,0,11598,11601,0,0,0,11602,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11603,
-11604,0,11606,0,0,11608,0,0,0,0,11610,0,0,11611,0,0,0,0,11613,0,11622,0,0,0,
-11623,0,0,0,0,11625,0,0,11626,11627,11628,11630,0,0,0,0,0,0,11639,0,0,11646,0,
-11648,11649,0,11650,0,0,0,0,0,0,0,0,0,11651,0,0,11652,11653,11656,0,0,11677,
-11679,0,0,0,0,11680,0,0,11681,0,11685,0,0,0,0,0,0,0,0,11688,0,0,0,11716,0,11719,
-0,0,0,0,0,11721,0,0,11724,11743,0,0,0,0,0,0,0,0,11745,11748,11750,0,0,0,0,0,
-11751,0,0,0,11752,11754,0,11755,0,0,0,0,0,0,0,11759,0,0,0,0,0,0,11760,0,0,0,
-11761,0,0,0,0,0,0,11766,11767,0,11772,11773,0,11774,0,0,11775,0,11777,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,11778,11780,0,0,0,0,0,0,0,11783,0,11784,0,0,0,11785,
-0,0,0,11786,0,0,0,0,11788,0,0,11789,11791,11792,0,0,0,0,11795,11834,11835,11836,
-0,0,11837,0,0,0,11838,0,0,11846,11851,0,11852,0,11869,0,0,0,11871,0,0,0,11872,
-11874,0,0,0,0,0,0,11875,0,11876,11877,0,0,0,0,0,0,0,0,0,0,11883,0,0,0,0,0,0,0,
-11884,0,11885,0,11886,0,0,11887,0,11894,11895,11897,11909,11910,0,11912,11918,0,
-0,11920,0,11922,11924,11927,11928,0,0,0,0,11929,0,11934,0,0,0,0,0,11941,11943,
-11944,0,11945,0,0,0,0,11948,11949,0,0,0,0,11953,0,11954,0,11955,0,11956,0,0,0,0,
-0,11957,0,0,11959,0,0,0,0,0,0,0,0,11961,0,0,0,0,0,11978,0,0,0,11979,11980,11986,
-11987,0,11992,0,0,0,0,0,11993,0,0,0,11994,0,11999,12004,12005,12006,0,0,0,0,0,
-12011,0,0,12012,12014,0,0,12015,0,0,12019,12028,0,0,12029,0,0,12032,12033,0,0,0,
-0,12034,0,12041,12043,0,0,12044,0,0,0,0,0,0,0,12046,0,0,0,0,0,0,0,12054,12055,0,
-12056,0,0,0,12060,12064,0,0,0,0,0,12065,12067,12068,0,0,0,0,0,0,0,0,12074,0,0,0,
-12075,12076,0,0,0,12079,0,12081,12086,12087,0,0,12088,0,0,0,0,12089,0,12092,0,0,
-0,0,12097,0,0,0,0,0,0,0,0,12098,0,0,0,0,0,0,0,0,0,0,0,0,0,12102,12103,12104,
-12111,0,0,12114,12116,0,0,0,12118,0,0,0,12119,12120,12128,0,0,0,0,12130,0,0,0,0,
-0,0,12131,0,0,0,12132,12134,0,0,0,0,12137,0,12139,0,12141,0,0,12142,0,0,0,12144,
-0,0,0,0,0,12145,0,12148,0,12153,0,0,0,0,12154,12171,12173,0,0,0,12175,0,0,0,0,
-12178,0,0,0,0,0,0,0,12183,0,0,0,0,0,0,0,0,12184,0,0,0,12186,0,0,0,0,0,12187,
-12188,0,0,12189,0,12196,0,12197,0,0,12198,0,12201,0,0,0,0,12203,0,12209,0,0,0,0,
-12210,12211,12212,12213,0,12217,12218,0,0,0,0,0,0,0,0,0,12222,0,0,0,0,0,0,0,
-12223,0,0,12229,0,0,0,0,12233,0,0,0,0,12234,0,0,12236,12242,0,0,0,12243,0,0,0,
-12244,12253,0,12254,12256,0,12257,0,0,12275,0,0,0,0,0,12277,0,0,0,0,0,12278,0,
-12289,0,0,12290,0,12292,12293,0,0,12294,0,12295,0,0,12296,0,12297,0,12298,0,0,0,
-0,12301,0,0,0,0,0,0,0,0,0,0,0,0,0,12309,0,12338,12340,0,0,0,0,12341,0,0,0,0,0,0,
-0,0,12342,12343,0,12344,0,0,0,0,0,0,0,0,0,12345,0,0,0,0,0,0,0,0,12346,0,0,0,0,
-12348,0,0,0,0,0,0,0,0,0,0,0,0,12350,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12351,0,12355,
-12356,12357,0,0,12367,12370,12371,0,0,0,0,0,12372,12376,0,0,0,0,0,0,0,0,12379,0,
-12382,0,12383,0,0,12384,0,0,0,0,12393,0,0,12394,0,0,0,0,12398,12403,0,0,12404,0,
-0,0,0,0,0,0,0,0,0,0,0,0,12410,0,0,0,12411,0,0,0,12412,0,0,0,0,12420,0,12421,0,0,
-0,0,0,12423,0,12425,12429,0,0,0,12431,12432,0,0,0,0,0,0,0,0,0,0,0,0,12434,0,0,0,
-0,0,12435,12436,0,0,0,0,0,0,0,0,12437,0,0,0,0,0,12438,0,0,0,0,0,0,0,0,12445,0,0,
-0,12450,12451,0,0,0,0,0,0,0,0,12452,12475,0,0,12493,12494,0,0,0,12495,0,0,0,0,
-12496,12502,12509,0,0,0,0,12510,0,12512,12513,0,0,0,0,12514,0,0,0,12515,0,12520,
-0,0,0,12524,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12527,0,0,0,12528,0,0,0,12529,0,0,0,
-0,0,12530,0,12535,0,0,12536,0,12538,0,0,0,0,0,0,0,0,0,0,0,0,12540,0,12548,0,0,0,
-0,0,12550,0,0,0,12551,12552,0,0,0,12554,0,0,0,0,0,0,0,0,12555,0,0,12562,0,12565,
-0,12566,0,0,0,0,0,0,0,0,0,0,0,0,12569,0,0,0,12571,12574,0,0,0,0,0,0,0,12577,0,0,
-0,0,0,0,0,12578,12579,12603,0,12608,0,0,12611,0,12612,0,12615,0,12625,0,0,0,0,
-12627,12646,0,12648,0,0,12657,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12670,0,0,12671,0,
-12673,12677,0,0,0,0,0,0,0,0,0,0,0,12679,0,12681,0,12682,12693,0,12694,0,12697,0,
-12701,0,0,0,12703,12704,0,0,0,0,12707,12737,0,0,12739,0,0,12740,0,0,12742,12743,
-0,0,0,0,0,0,0,0,0,12745,0,12746,12747,0,12748,0,0,12759,12767,0,0,0,0,12773,0,
-12774,12778,0,0,0,0,0,0,0,12779,0,0,0,0,0,12780,12793,0,12824,0,12825,0,12836,0,
-0,0,0,12839,0,12842,0,0,0,0,0,0,0,0,0,0,0,0,12843,12845,0,12846,0,0,0,0,12847,0,
-0,12850,12852,12853,0,0,0,12854,0,0,0,12855,0,12856,0,12858,0,0,12859,0,12862,0,
-12863,0,0,12866,0,12869,12872,12873,0,0,0,0,0,0,0,0,0,12875,0,12877,0,0,12878,0,
-0,0,0,0,0,0,0,0,12884,12885,12888,0,12889,0,0,0,0,12893,0,0,0,12895,12896,12898,
-0,0,0,0,0,0,0,12902,0,12909,12910,0,12926,0,12928,0,0,0,12929,0,12930,0,0,0,0,
-12931,0,12932,12933,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12934,0,12942,0,0,0,0,12944,
-0,0,0,0,0,0,0,0,12946,0,0,12948,0,0,12949,0,0,0,0,12950,0,0,0,0,12951,0,12952,0,
-12953,0,0,0,12954,12958,12959,0,0,0,0,0,12960,12964,0,0,0,0,0,12966,0,0,0,0,0,0,
-0,0,12970,0,12971,0,0,0,0,0,0,12972,0,0,12982,0,0,0,12984,12985,0,12986,12996,
-12997,13001,13002,0,0,0,0,13004,0,0,13005,0,0,13007,13009,0,13017,0,0,0,13020,0,
-13021,0,0,0,0,0,0,0,0,0,0,13022,0,0,0,0,0,0,0,0,13024,13027,0,0,0,0,0,13028,0,0,
-13029,0,0,0,0,0,0,0,13032,0,13037,0,0,0,0,0,0,13040,0,0,13041,0,0,0,13043,13044,
-13046,0,0,0,0,13047,0,0,0,0,0,0,0,13049,13054,0,13056,0,0,13060,13061,0,0,0,0,0,
-13067,0,0,13068,0,13071,0,0,0,0,0,13077,13078,0,0,0,0,0,13079,13080,13081,0,
-13082,0,0,0,13085,0,0,0,0,0,0,0,13086,0,13087,13088,0,0,0,0,0,13094,0,13099,0,
-13100,0,0,0,13101,0,13125,13126,13128,13129,0,0,13130,0,13131,0,0,0,0,0,0,13134,
-0,0,0,0,0,0,0,0,0,0,0,13150,0,13168,0,0,0,0,0,0,0,0,0,13169,0,0,13170,0,0,0,0,
-13174,0,0,0,13176,0,0,0,0,0,13177,0,13178,13183,13187,0,0,0,13189,0,0,13190,0,0,
-13191,0,0,13206,0,0,0,13207,0,0,0,0,0,0,0,0,0,0,13212,0,0,13219,13232,0,0,0,
-13241,0,13249,13253,0,0,0,0,0,13255,13259,0,13260,13261,0,13262,0,13272,0,0,0,0,
-13276,0,0,0,0,13277,13299,0,0,13301,13302,0,0,13303,0,0,13305,0,13310,0,0,0,
-13311,0,0,0,0,13325,0,13328,0,0,0,13329,0,0,0,0,0,0,13330,0,0,13331,0,13335,0,0,
-13342,0,0,0,0,0,13343,0,13354,0,13362,0,13366,13367,13369,0,0,13371,13372,0,
-13373,13374,0,13376,0,13380,13381,13386,0,13387,13388,0,13389,13391,13395,0,0,0,
-0,0,13401,13409,0,13410,0,0,0,0,13420,0,0,0,0,0,13422,0,0,0,0,13423,0,0,0,0,
-13425,0,0,0,0,0,13427,0,0,0,13428,0,0,13430,13438,0,13439,0,13445,0,13448,13449,
-0,0,0,0,0,0,13451,0,13457,0,0,0,0,13458,13459,0,13460,0,0,0,0,13464,13465,13466,
-13470,0,13471,13472,13474,13475,0,13476,0,0,13478,13479,0,13481,0,0,0,0,13487,0,
-13490,0,13493,0,0,13494,0,0,13495,0,0,0,0,0,0,0,0,0,0,0,0,0,0,13496,13497,0,
-13500,0,0,13516,13522,0,0,13525,13528,0,0,0,13530,13535,0,13537,13539,0,13540,0,
-13543,0,13544,0,0,0,0,0,0,13545,0,0,0,0,0,0,13547,0,0,0,13549,13555,0,0,0,13556,
-13557,0,0,0,0,0,0,0,13558,0,13563,0,0,0,0,13564,0,0,0,0,0,0,0,0,13566,0,0,0,0,0,
-0,13569,0,0,13571,0,0,0,0,13573,0,0,0,0,0,0,13578,0,0,0,0,0,0,0,0,0,0,13581,0,
-13586,0,13595,0,13600,0,0,0,0,0,0,0,0,13601,13603,0,13604,13605,13606,13607,0,0,
-13617,13618,0,0,0,0,0,0,0,13623,0,13625,13627,0,0,0,0,0,0,0,0,13629,0,0,0,13634,
-0,0,0,13638,0,0,0,0,0,0,0,0,13654,0,0,0,0,0,0,0,0,0,0,13656,0,13659,0,0,13660,0,
-0,13662,0,0,0,13663,0,13664,0,0,0,0,0,13668,0,13669,13671,0,0,13672,0,0,0,0,0,0,
-13675,13685,0,13686,0,0,0,13687,0,0,0,13692,13694,13697,0,0,0,13702,0,0,0,0,0,
-13705,0,0,0,0,13707,0,0,0,13714,0,0,0,0,0,0,0,0,0,13715,0,13716,13717,0,0,13719,
-13724,13730,13731,0,0,0,0,0,0,0,0,13732,0,0,0,0,0,0,0,13734,0,13736,0,0,13737,
-13738,13747,0,13751,0,0,13752,0,0,0,13753,0,13757,0,0,13762,13763,0,13764,13765,
-0,13766,0,0,13767,0,0,0,13768,0,0,0,0,0,0,0,13769,0,0,13772,0,13775,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,13776,13778,13787,0,0,0,13797,0,13798,0,13801,0,13804,
-13806,0,0,0,0,13816,13817,0,0,0,0,0,0,0,0,0,0,0,0,0,13834,0,13836,0,0,13838,0,0,
-13839,0,13840,0,0,0,0,13842,0,0,0,0,0,0,13843,0,0,0,0,0,0,0,0,0,13845,0,0,0,0,0,
-13858,0,0,13860,0,0,13861,0,0,13862,13863,0,13868,0,13869,13870,0,0,0,0,0,0,0,0,
-0,0,13872,0,0,0,0,13873,13878,0,0,0,0,0,0,0,0,0,0,13886,0,13888,13889,13890,0,0,
-13891,13894,0,13897,13899,13900,13904,0,0,13906,0,0,0,13909,0,0,0,13910,0,0,0,
-13911,0,0,0,0,0,13912,13917,0,0,0,0,13918,0,13919,0,0,13920,0,0,0,13921,0,0,
-13922,0,0,0,0,0,0,0,13924,0,13927,0,0,0,0,0,13932,0,13933,0,13934,0,0,13935,0,
-13944,0,0,0,13954,0,0,13955,0,0,0,0,13956,0,13957,0,13967,13969,0,0,0,0,0,0,0,0,
-0,0,0,0,13970,13990,0,13991,13994,0,13995,0,0,0,0,13996,0,0,13999,0,0,0,14018,0,
-14019,0,14021,0,0,0,0,0,0,14041,0,0,0,0,0,0,0,0,14043,0,0,0,0,14046,0,0,0,14048,
-14049,0,0,0,0,0,0,0,0,0,0,14051,0,0,14052,14056,0,14063,0,14064,14066,0,0,14067,
-0,0,0,0,0,0,0,0,0,14068,0,0,0,14072,0,14074,14075,0,14076,14079,14085,14086,
-14087,14093,0,0,0,0,14095,0,0,0,0,0,0,14096,14097,0,0,0,0,0,0,0,14098,0,14102,0,
-0,0,0,0,14103,0,0,0,14104,0,0,14105,0,0,0,14107,14108,0,0,14109,0,0,0,0,0,0,0,0,
-14117,0,0,0,0,14118,0,0,0,0,14119,0,0,14120,0,0,14121,0,14122,14127,0,14128,
-14136,0,0,14138,0,14140,0,0,0,14141,14142,0,0,0,0,14146,0,0,14149,0,14151,0,0,0,
-14152,0,0,14153,0,0,0,0,0,0,0,0,0,14154,0,14156,14157,0,0,14159,0,14161,0,0,0,0,
-14162,0,0,0,0,0,0,14163,0,0,14173,0,0,0,0,0,0,14174,0,0,14176,0,0,14178,0,0,
-14179,14181,0,0,14182,14185,14187,0,14190,0,0,14197,0,0,0,0,0,0,0,0,0,0,0,0,
-14198,0,0,0,0,0,0,14199,14200,0,0,0,14204,0,0,14208,0,0,0,0,0,0,0,0,0,0,0,14231,
-0,0,0,0,0,0,0,0,0,14234,0,0,14235,0,0,0,14240,14241,0,0,0,14246,0,0,0,14247,0,
-14250,0,0,14251,0,0,14254,0,0,14256,0,0,0,14260,0,14261,0,0,0,0,14262,14267,
-14269,0,0,14277,0,0,14278,0,14279,14282,0,0,0,14283,0,0,0,14284,14285,0,0,0,0,
-14286,0,0,0,14288,0,0,0,14289,0,14290,0,14293,14301,14302,14304,14305,0,14307,0,
-14308,14309,0,0,0,0,0,0,0,0,0,0,0,14311,14312,0,0,14317,0,0,0,0,0,0,0,14318,0,0,
-0,0,14320,0,0,0,0,14321,14322,0,0,0,0,0,14326,14329,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-14330,14331,0,0,0,0,14332,0,0,0,14333,0,0,14337,14340,0,14341,0,0,14342,0,14345,
-14346,0,0,14347,0,14362,0,0,0,0,0,14364,14365,14371,0,14373,0,0,14374,0,14379,0,
-14400,0,0,0,0,0,14401,0,0,14405,0,14406,0,14408,14409,0,0,0,14417,0,0,14424,0,0,
-0,0,0,0,0,0,0,14430,0,0,0,14431,0,0,14435,0,14440,0,0,0,0,0,0,14442,0,0,14443,0,
-0,0,0,0,14446,0,0,0,0,0,0,0,14454,0,14457,0,14460,0,0,14466,0,0,0,0,0,14467,0,0,
-0,0,0,0,14469,0,14477,0,0,0,0,0,0,14478,14482,0,0,0,14483,0,0,0,14485,14486,0,0,
-0,14487,14488,14489,14492,14493,14494,14495,14496,14497,0,14499,0,14501,0,0,0,0,
-0,0,0,0,0,0,14502,0,14507,14512,14513,14514,0,0,0,0,0,0,0,0,0,0,0,14515,14526,
-14530,0,14537,0,14544,0,14547,0,0,14548,14550,14551,0,0,14552,0,0,0,14553,0,
-14554,0,0,0,0,14556,14564,0,0,14565,14566,0,0,0,0,0,0,14568,0,0,14569,0,0,0,
-14571,14576,0,0,14577,14578,14579,0,0,14580,0,0,0,0,14582,0,0,0,0,0,0,0,0,0,0,0,
-0,14583,0,0,0,0,0,14587,0,14588,0,0,14600,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,14601,0,0,14604,14605,14611,0,14613,0,0,0,0,14615,0,0,0,0,0,0,14627,0,14628,0,
-0,0,0,14631,0,14633,14634,0,0,0,0,14635,0,0,0,0,0,0,0,0,14636,0,0,14639,14642,0,
-0,0,0,14644,0,0,0,0,14645,14646,0,14653,0,0,14654,0,14658,0,14661,0,0,0,14665,0,
-0,0,14668,0,0,0,0,0,0,0,0,0,14669,0,0,14670,0,0,0,14680,0,0,14681,0,0,0,0,0,
-14682,14683,0,0,0,0,14686,0,0,0,0,14687,14697,0,0,0,0,14699,14705,14711,0,0,0,0,
-0,0,0,0,0,0,14712,0,0,0,14713,0,0,0,0,14719,0,14720,14721,14726,0,0,0,14728,
-14729,0,0,0,0,14731,0,0,0,0,0,0,0,14733,14736,14737,0,0,14740,14742,0,0,0,14744,
-14753,0,0,0,0,14755,14758,14760,0,0,0,0,0,14761,14762,14765,14771,0,14772,0,
-14773,14774,0,0,14775,0,0,14776,0,0,0,0,14777,0,14779,0,0,14782,0,0,14785,14786,
-14788,0,0,0,0,0,14795,0,0,0,0,0,0,14798,0,14803,14804,14806,0,0,0,14809,0,0,0,0,
-0,0,14810,0,0,0,0,14811,0,14812,0,0,0,0,0,14815,0,0,0,0,0,0,0,0,14816,0,14818,0,
-0,0,0,0,0,14819,0,14820,0,14823,0,0,0,14824,0,0,14826,14827,0,0,0,0,0,0,0,0,0,0,
-0,0,14830,0,0,0,0,0,14833,0,14845,0,0,0,0,0,14846,0,0,14847,14871,0,14873,0,
-14876,0,14877,14878,14880,0,0,0,0,0,14881,0,14882,14894,0,0,0,0,14895,0,14907,0,
-14908,0,0,0,0,0,0,0,14911,0,0,0,0,14920,0,0,14931,0,14932,14934,14935,0,0,14936,
-0,14945,0,0,0,0,0,0,0,14947,0,0,14948,14949,14951,0,0,14952,0,0,0,14964,14973,0,
-0,14990,0,0,0,0,14995,0,0,14998,15001,0,0,15002,15020,0,0,0,0,0,0,15021,0,15022,
-0,0,0,0,15023,0,0,15025,15029,15033,0,0,0,15034,0,0,0,15035,0,0,0,0,0,15043,
-15044,0,0,0,15045,15046,15048,15050,0,15065,0,0,0,0,15066,0,0,15075,15082,15084,
-0,0,15085,15086,0,0,0,0,0,0,0,0,15088,0,0,0,15089,0,0,0,0,15094,0,15096,0,15097,
-0,15100,0,0,15102,0,0,0,0,0,0,0,0,15105,0,0,15106,0,15109,15113,0,0,0,15115,0,
-15118,0,0,0,0,0,0,15119,0,0,15120,0,0,0,0,0,15123,15129,0,0,0,15130,0,15131,0,0,
-15134,0,15135,0,0,0,15137,15138,0,0,0,0,0,0,15139,0,0,0,0,0,15140,0,0,15154,
-15162,0,15169,15170,0,15175,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15177,0,15178,15179,0,
-0,0,0,0,15183,0,0,0,0,0,0,0,0,0,0,0,0,15185,15187,0,15194,15195,15196,0,0,0,0,0,
-0,0,15204,0,0,0,0,15206,0,0,0,0,0,15207,0,0,0,0,0,0,0,0,0,15213,0,15214,0,0,0,0,
-0,0,0,15232,0,0,0,0,15234,0,15238,15240,0,15248,0,0,0,0,15250,15251,0,0,0,0,0,0,
-0,15252,0,0,0,15255,15262,15266,0,0,0,15267,0,0,0,15277,15279,0,0,0,15280,15281,
-15282,0,0,0,0,0,15285,0,0,0,0,15289,0,0,15291,0,0,0,0,0,0,0,15296,15297,0,0,
-15304,0,0,0,0,15306,0,0,0,0,0,0,15307,15308,0,15309,0,0,15311,0,0,15312,15313,0,
-0,0,0,0,0,0,0,0,0,0,0,15314,15317,0,0,0,15318,15319,0,0,0,0,15320,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,15321,0,0,0,0,0,15324,0,15325,15326,0,15330,0,0,0,0,15334,0,
-15335,0,15341,0,0,15342,0,0,15343,15344,0,0,0,0,15345,0,0,0,0,15347,0,0,15348,
-15349,15350,0,15356,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15357,0,15358,0,0,0,0,0,0,0,
-15359,15360,15364,0,15380,0,0,0,0,0,15392,0,0,15393,0,15395,0,0,0,0,0,0,0,0,
-15396,0,0,15397,15398,0,0,0,0,0,0,0,0,0,15399,0,15400,0,0,0,15402,0,15405,15410,
-0,0,0,0,15411,0,0,0,15412,0,15416,0,0,0,0,0,0,0,15428,0,15435,0,0,15438,0,0,0,0,
-15439,0,0,0,15440,0,0,0,15441,15449,15451,0,0,0,0,0,0,0,15452,0,0,15455,0,0,0,
-15456,0,0,15458,0,15460,15461,0,0,0,0,0,15462,15464,0,15465,0,0,15466,0,0,15467,
-0,0,0,0,0,15468,0,0,0,0,15481,0,0,15484,0,15485,15486,0,0,0,15487,0,0,0,0,0,
-15488,0,15492,15498,0,0,0,15499,0,0,0,15500,0,15501,0,0,15512,0,15522,0,0,0,
-15524,0,15525,15526,0,0,15527,0,0,15545,15546,0,15548,15552,0,15553,0,0,0,15554,
-0,15555,0,15557,15565,15573,15577,15578,0,15582,0,15583,0,0,0,0,0,0,0,0,0,0,0,0,
-0,15586,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15588,0,0,0,0,0,15589,0,0,0,0,0,0,0,15593,
-15594,0,0,0,0,15595,0,0,0,0,0,0,15596,0,0,0,15597,0,0,0,0,15600,0,0,15601,0,0,0,
-0,15602,15603,0,0,0,0,0,0,15604,0,15609,0,0,15612,0,0,15613,0,0,15615,15617,
-15618,0,0,15620,0,15636,15637,0,0,15649,0,0,0,0,0,0,0,15650,0,0,15651,0,0,0,
-15656,0,15658,0,0,0,15664,0,0,15665,0,0,15668,0,0,0,0,0,15669,0,0,15674,0,0,
-15675,0,0,0,0,15676,0,0,0,0,0,0,0,0,0,0,0,15677,0,0,0,0,15678,0,0,0,0,0,15679,0,
-0,15681,0,15686,0,0,0,0,15687,0,15688,0,0,15690,0,0,0,15697,0,15699,15700,0,0,0,
-0,0,0,0,0,0,15701,0,15702,15703,0,15704,0,15705,0,15707,0,15709,0,15712,15716,0,
-15717,0,15718,15720,0,0,0,0,0,15724,0,0,0,15725,0,15726,0,0,0,15740,0,15745,
-15746,0,0,15747,0,15748,0,0,0,0,0,15749,0,0,0,15752,0,15753,0,0,0,0,0,0,15759,0,
-0,0,15765,0,0,0,0,0,0,0,0,0,15767,0,0,0,15771,0,0,15784,0,0,0,0,15785,15790,
-15791,0,0,15792,0,0,0,15807,0,15811,0,0,0,0,0,0,0,0,0,0,0,0,15818,0,0,0,15819,0,
-0,0,0,15821,0,0,0,0,0,15822,15824,0,0,15827,0,0,15829,15831,0,15832,0,0,15833,0,
-15835,15838,15839,15843,0,0,0,0,0,0,0,0,0,0,0,15844,0,0,0,0,15845,15851,15856,0,
-0,0,0,0,0,0,15858,15860,0,15861,0,0,0,15864,0,0,0,0,15865,0,0,0,0,0,0,15866,0,
-15872,0,0,15876,0,0,0,0,15877,15878,15883,15885,0,0,15888,0,0,0,0,0,15889,15890,
-0,0,0,0,0,0,0,0,15892,0,0,0,0,0,0,0,15893,0,0,15894,0,0,0,15895,0,15896,15897,0,
-15898,15901,15902,0,15911,15915,0,15916,0,15924,15935,0,15937,0,0,0,0,0,15950,0,
-0,0,0,0,0,0,15958,0,0,0,15961,0,0,15966,0,15967,0,0,15977,0,0,15978,0,0,15981,
-15982,15983,0,0,0,0,0,0,0,15986,0,0,0,15990,0,15991,15995,15998,0,15999,0,16000,
-0,0,0,0,16008,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16009,16011,0,16013,0,0,0,0,
-0,0,0,0,16014,0,0,16015,16023,16024,16025,0,0,16026,0,16030,0,16032,0,16033,0,0,
-0,0,0,0,16035,16036,16037,0,0,0,0,0,16039,0,0,0,0,16041,0,0,0,0,0,16043,16044,0,
-0,16047,0,0,0,16048,0,0,16049,16050,16052,0,0,0,0,0,16055,0,0,0,0,0,0,0,0,16056,
-0,0,0,0,0,0,0,16058,16060,16061,0,0,16063,0,0,16064,0,0,0,16067,16068,0,0,16069,
-16078,0,0,0,16079,0,0,0,16080,0,16081,0,0,0,16088,0,0,0,0,0,0,0,0,0,0,0,16089,
-16093,0,16097,0,16103,0,16104,16105,0,0,16256,0,0,16259,0,0,0,0,0,0,0,16260,
-16261,0,0,16262,0,0,16263,0,16268,0,0,0,0,0,0,0,16269,0,0,16270,16273,0,16274,0,
-0,0,0,16275,16276,16277,16280,0,0,0,16281,16284,0,0,0,16286,0,16289,0,0,0,0,0,0,
-0,0,0,16290,0,0,0,0,16291,0,0,0,0,0,0,0,16292,0,0,0,0,0,0,0,0,16293,16295,16297,
-0,16302,0,16304,0,16305,0,16306,0,0,0,0,0,0,0,0,0,0,0,0,16307,16308,16312,0,0,0,
-0,0,0,16313,16315,0,16318,0,0,0,16321,0,0,0,0,0,0,0,16326,16333,16336,0,0,0,0,
-16337,16340,0,0,0,0,0,16345,0,0,16346,0,0,0,0,0,0,0,0,0,16347,0,0,16348,0,0,0,0,
-16349,0,0,0,16350,0,16357,0,0,0,0,16359,16360,0,0,0,0,16362,16363,16364,16365,0,
-0,16366,0,0,0,0,16367,16368,0,16369,16374,0,0,0,0,0,0,0,16376,0,0,0,0,16378,
-16379,0,16380,0,0,0,16381,16383,0,0,0,0,0,16390,0,0,0,16399,0,16402,16404,16406,
-16407,0,0,0,16409,16411,0,0,0,0,16412,0,16413,16415,16423,0,0,0,0,0,16424,0,0,0,
-16428,16434,16435,16449,0,16450,16451,0,0,0,16453,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-16454,0,0,16456,16458,0,0,16459,0,0,16460,0,0,0,0,16462,0,16463,0,0,16466,0,0,0,
-0,0,16479,0,0,16480,0,16481,16484,0,0,0,0,0,0,0,0,0,0,16485,0,0,0,0,0,0,16489,0,
-0,0,0,0,16491,0,0,16498,0,0,16503,0,16505,0,0,0,0,0,0,0,0,16506,0,0,0,16508,
-16509,0,0,0,0,0,0,0,0,16511,16513,0,0,0,16516,0,16517,0,16519,0,16529,0,0,16531,
-0,0,0,0,0,0,16534,0,0,16541,16542,0,0,0,0,0,0,0,0,0,16543,16547,16548,0,0,0,
-16551,0,16552,0,0,0,16553,0,0,16558,0,0,16562,16565,0,0,0,16570,0,0,0,16573,
-16585,0,0,0,16586,16587,16595,0,16596,0,16598,0,0,0,16600,0,0,0,0,0,0,0,0,0,0,0,
-0,0,16601,0,0,0,0,16603,0,0,0,0,0,0,0,16604,16612,0,0,0,0,16613,0,16618,0,0,0,
-16640,0,0,16641,0,0,0,0,0,0,16645,0,0,0,0,16646,0,0,0,0,0,0,16651,0,0,0,0,16653,
-16654,0,0,0,16655,0,0,16656,16667,0,0,0,0,16671,0,16672,0,0,0,16673,0,0,0,0,0,
-16676,0,16686,0,0,0,0,16689,0,16690,0,16692,0,16693,0,16694,0,16696,0,0,0,16705,
-0,0,0,0,0,0,16707,0,0,0,16709,0,0,0,0,16711,0,16712,16713,0,0,0,16715,0,0,0,0,
-16716,0,0,0,0,0,0,0,0,0,16718,16724,0,0,16726,16727,0,0,0,0,0,0,0,16728,0,16729,
-0,0,16730,0,0,0,0,0,16731,0,0,0,16732,0,0,0,0,16734,16738,0,0,0,0,0,0,0,0,16743,
-0,0,16745,0,0,0,0,0,16749,0,16752,0,0,0,0,16756,0,0,16758,0,16759,0,0,0,0,0,
-16760,0,0,0,0,0,0,0,16762,0,16769,0,16770,0,16772,0,0,0,16777,16780,0,0,0,0,0,0,
-16781,0,0,16782,0,16784,0,0,16785,16787,16792,0,0,16794,0,0,0,16798,0,0,16809,0,
-0,16814,16816,16817,0,16819,0,0,0,0,0,0,0,0,0,0,16820,0,0,16836,16839,0,0,16841,
-16851,16857,0,0,16858,16859,0,0,16860,0,0,0,0,0,0,0,0,16862,0,16863,0,0,0,0,0,0,
-0,16864,0,0,0,0,0,0,0,16876,0,16881,16882,0,16885,16886,0,16887,0,0,0,16889,
-16891,0,0,0,0,0,16894,16895,0,0,0,0,0,0,0,0,0,0,0,16897,0,16898,0,0,0,0,0,16913,
-0,0,16924,16925,16926,0,0,16927,0,0,0,16937,16938,0,0,0,16940,16941,0,0,0,16942,
-16945,0,16946,16949,16950,0,0,0,16952,16955,0,0,0,16965,0,16969,0,0,16975,0,0,
-16976,0,0,0,0,16978,0,0,16981,0,16983,16989,0,0,0,0,16990,0,0,16991,0,0,0,16993,
-0,16994,16996,17000,0,0,0,0,0,17002,17004,0,17006,0,0,17007,0,0,0,0,17008,17013,
-17014,0,0,0,0,0,0,0,0,0,17021,0,17031,0,0,0,0,0,17033,17036,0,17038,0,0,17039,0,
-17045,0,0,17046,17047,0,0,0,0,17048,0,17049,17050,0,17051,17053,0,17054,0,17055,
-0,0,0,0,0,17063,0,0,17064,0,0,0,0,0,0,0,17065,0,0,17068,0,0,0,0,0,17072,0,0,0,0,
-0,0,17073,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,17074,0,17080,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,17081,17083,17084,0,0,0,17085,0,0,0,0,17092,0,0,0,0,0,0,0,
-0,0,17093,0,17095,17102,0,0,0,0,0,0,17103,0,0,17105,0,17107,0,0,0,0,17114,0,0,0,
-0,0,17115,17125,17127,0,0,17128,0,0,0,17129,17130,0,17131,0,0,0,0,0,17132,17135,
-17145,0,0,0,0,0,0,0,0,17146,0,17147,0,17148,0,0,0,0,0,0,17149,17150,0,17151,
-17153,0,17155,0,0,0,0,17163,17171,0,17174,0,0,0,0,17179,0,0,17182,17185,0,0,0,0,
-0,17186,0,0,17188,0,0,0,0,0,0,0,17189,17191,0,17194,0,0,0,0,0,0,0,0,0,17195,
-17196,17203,17204,0,0,17205,17217,0,0,0,0,0,17218,0,0,0,0,17219,0,17220,0,17221,
-0,0,17230,0,0,0,0,0,17236,0,17238,17239,0,0,0,17241,17244,0,0,17245,0,17248,0,0,
-17251,0,17252,0,0,17264,0,17266,0,0,0,17268,0,0,0,0,17271,17272,0,17273,0,17295,
-0,17302,0,17305,0,0,0,17306,0,0,0,0,0,0,0,17308,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-17309,0,17310,17313,0,0,0,0,17314,17315,0,17317,0,0,0,0,17318,0,0,0,0,0,0,0,
-17320,0,0,0,0,0,0,17334,0,17344,17348,0,0,0,17350,17351,0,0,17353,0,0,17354,0,0,
-0,0,0,0,0,0,0,17355,0,0,0,0,0,0,17356,17357,0,0,17359,0,0,0,17371,0,17372,0,0,0,
-17393,0,0,0,0,17394,0,0,0,0,0,17395,0,0,17399,0,0,0,17401,17417,0,17418,0,17419,
-0,0,0,0,0,17422,17423,0,0,0,0,0,17424,0,0,0,0,0,17428,17429,17433,0,0,0,17437,0,
-0,17441,0,0,17442,0,0,17453,0,0,0,0,0,0,0,0,17454,17456,17462,0,0,17466,0,0,
-17468,0,0,17469,0,0,0,0,17470,0,17475,0,0,0,0,0,17479,0,0,0,17483,17484,0,17485,
-0,17486,0,17491,17492,0,0,17493,0,17494,17495,0,0,0,17496,0,0,0,17497,0,0,0,
-17502,0,0,0,0,0,17503,0,17505,0,17507,0,0,0,17512,17513,17514,0,0,17515,0,0,0,
-17519,0,0,0,17522,0,0,17523,0,0,0,0,0,0,0,0,0,17527,0,0,0,17528,0,0,0,17534,0,0,
-0,0,17536,0,0,0,17539,0,17540,17543,17549,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,17556,
-0,0,17558,0,17559,0,0,17560,0,0,0,17563,0,0,0,0,0,0,17564,0,0,17565,17566,0,
-17567,0,0,0,0,0,0,17569,17570,0,17575,0,0,0,0,0,0,0,0,0,0,0,17581,0,0,0,17582,
-17583,0,17586,0,0,17587,0,0,0,0,0,0,0,17588,0,0,0,0,17596,17597,0,0,17598,17600,
-0,0,0,0,0,0,17601,0,0,0,17604,0,0,17605,0,0,17607,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,17612,0,0,17618,0,17621,17622,0,0,0,0,17623,0,0,17624,0,0,17630,0,0,
-17631,17633,17634,0,0,0,0,0,0,0,17635,0,0,17636,0,0,17637,0,17638,0,17640,0,0,0,
-0,0,0,0,0,0,0,17641,0,0,0,0,0,0,0,0,0,0,17643,0,0,0,0,17645,0,0,0,0,0,0,0,0,
-17646,17662,0,0,0,0,0,0,0,0,0,17663,17664,0,17665,17666,0,0,0,17669,17671,17673,
-0,17679,0,0,0,0,0,0,0,17684,0,0,0,17686,0,17714,0,0,17720,17722,17726,0,0,17728,
-0,0,17729,0,0,0,17732,0,17733,0,17734,0,0,0,17735,0,0,0,0,17737,0,0,0,0,17739,0,
-0,0,17741,17742,0,0,0,0,17743,17744,17745,0,0,0,17749,0,17750,17751,17752,17754,
-17761,17762,0,17763,0,17766,0,17772,0,0,0,0,0,17775,0,0,0,0,0,0,0,17776,0,0,
-17777,0,0,17778,17779,0,17782,17783,0,0,0,0,0,0,0,0,0,0,17784,0,0,0,0,0,0,0,
-17821,0,0,0,17822,0,0,0,17823,17825,0,0,0,0,0,17826,17831,17832,17833,0,0,17845,
-0,0,0,17846,0,0,0,17848,17850,17854,0,17855,0,0,17859,0,0,0,0,0,0,17860,17861,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,17870,17871,0,0,0,0,0,0,17872,0,0,0,17879,0,
-0,0,17881,17883,0,17884,0,17885,0,0,17886,0,0,17887,17891,17953,0,0,0,0,17954,0,
-0,17955,0,17968,0,0,17972,0,0,0,0,0,17974,0,0,0,0,17976,17978,0,0,17983,0,0,0,0,
-18003,0,0,0,0,0,18007,0,0,0,0,0,18009,0,0,0,0,0,0,0,18010,0,0,0,0,0,0,18012,0,0,
-18014,0,0,0,18015,0,0,0,18016,0,18017,0,0,0,18030,0,0,0,0,0,0,0,18031,0,0,18036,
-18037,18038,0,0,18049,18056,0,18057,18058,0,18059,0,0,0,0,0,0,0,0,18062,0,0,0,0,
-18064,0,0,0,0,0,0,0,0,18067,0,0,0,18068,0,0,18075,0,0,18078,18093,18094,0,0,0,0,
-0,0,0,0,18097,0,0,0,0,0,18098,18100,0,0,0,18108,0,18111,0,0,18112,0,18113,0,0,
-18115,18116,0,18118,0,0,0,0,18121,0,0,0,0,18123,0,0,0,0,0,0,0,0,0,18124,0,0,0,0,
-18125,18126,0,18127,0,0,18128,18135,0,0,0,0,0,0,0,0,0,18150,0,0,0,0,0,18151,
-18152,0,0,18156,18164,0,18166,18171,0,0,0,0,0,0,0,0,0,18172,18183,0,18184,0,0,0,
-0,18185,0,18187,0,0,0,0,0,18188,0,0,0,0,0,0,0,0,18189,0,0,18190,0,0,18191,18192,
-0,0,18194,18195,18196,0,0,0,18197,0,18203,0,18204,0,0,0,0,18205,0,0,0,18207,
-18208,0,0,18214,0,0,0,18215,18216,0,0,0,18220,0,0,18222,0,0,0,0,0,18223,0,18225,
-18231,0,18234,0,18235,0,0,0,0,18240,0,0,18241,18242,0,0,0,0,0,18243,18251,0,
-18253,0,18254,0,0,0,18266,0,0,0,0,0,0,18269,18270,18271,18273,18281,0,0,0,0,0,0,
-0,0,0,0,0,0,18282,0,18283,0,18284,0,0,0,0,0,0,18285,0,18287,18289,0,0,18290,0,0,
-0,0,18308,0,0,0,18310,0,0,0,0,0,0,0,0,0,0,0,0,18311,0,18312,18313,0,18315,0,0,
-18316,18320,0,18331,0,18332,0,18336,0,0,0,0,18337,0,18340,0,0,0,0,0,0,0,0,0,
-18341,0,18344,18345,0,18346,0,0,0,0,0,18348,0,18351,0,0,18356,0,0,0,0,0,0,18357,
-0,0,0,0,0,18367,0,0,0,18368,0,18369,0,18370,18371,0,0,0,18437,18444,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,18445,18450,0,0,0,0,18451,0,18452,0,0,0,18453,0,0,0,0,0,18455,0,
-0,0,18456,0,18457,0,18460,0,0,18461,0,0,0,0,0,0,0,0,18466,0,0,18467,0,0,0,0,
-18473,0,0,0,18476,0,18477,0,0,0,18478,18479,18480,0,0,0,18485,0,0,0,18486,0,0,0,
-0,0,0,18488,18490,0,0,0,0,0,0,18491,0,0,0,0,0,18495,0,0,18496,0,0,0,0,0,0,18505,
-0,18521,0,18522,18523,0,0,0,18525,18526,0,0,0,0,0,18527,0,0,0,0,18532,18533,0,
-18534,0,0,0,0,0,0,18535,18537,0,18538,0,0,0,0,0,0,18540,18541,18542,18543,0,
-18546,0,0,0,0,18553,18556,0,0,18558,0,0,18569,18571,0,0,0,18572,0,18574,0,0,0,0,
-18586,0,0,0,0,0,18588,0,0,18589,0,0,0,0,0,0,18590,0,18592,0,0,0,0,18594,0,0,0,
-18596,0,0,18597,18598,0,0,18601,0,0,0,0,18602,0,0,0,18603,18604,0,18605,0,0,0,0,
-18608,0,0,18611,0,0,0,0,0,0,0,0,0,18612,0,18616,0,0,18617,18619,0,0,0,18628,0,0,
-0,18629,0,0,18630,0,0,0,0,0,0,0,18631,0,18632,0,0,18635,18637,0,0,0,0,0,0,18641,
-18643,18648,0,18652,0,0,18653,0,18655,18656,0,0,0,18657,0,0,18666,18674,0,0,0,0,
-18677,18684,18685,0,0,18686,0,0,18690,0,0,0,0,0,0,0,18695,18696,0,0,0,0,0,0,0,0,
-0,0,18697,0,0,18700,0,0,0,0,0,0,18702,0,18708,0,0,18709,0,18710,0,0,18711,0,
-18714,0,0,18718,0,0,0,0,0,0,18719,0,0,18722,0,18726,0,0,0,0,0,0,0,0,0,0,0,0,0,
-18731,0,0,0,0,0,18739,18741,0,0,18742,0,18743,18744,18746,18748,0,18752,18753,0,
-0,18754,18763,0,18765,0,0,0,18766,0,0,0,18769,0,0,0,0,0,18773,18778,18779,18781,
-0,0,18784,18787,0,18788,0,18793,0,0,0,0,0,0,18795,0,0,18800,0,0,0,0,0,18801,
-18804,0,0,0,0,0,0,0,18806,0,0,0,18811,18815,18816,0,0,0,0,18825,0,0,18827,18829,
-0,0,18830,0,0,0,0,18831,0,0,18832,0,0,0,0,18833,0,18840,0,18841,0,18842,0,0,0,0,
-18843,0,18844,0,0,0,0,0,0,18845,18846,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-18848,0,0,0,18853,18860,0,0,18862,18866,0,0,18867,18869,0,0,18874,18881,18891,0,
-0,0,0,0,0,0,0,0,0,18892,0,0,0,0,0,0,0,0,18895,0,18896,0,0,0,18900,0,0,0,18901,0,
-18902,18915,18916,0,0,0,0,0,0,0,0,18919,0,0,0,0,0,18920,0,0,0,18921,18929,0,0,0,
-0,18930,0,0,0,0,0,0,18932,0,0,0,0,18934,18942,0,0,0,18951,18957,0,0,0,0,18958,0,
-0,0,0,18959,18960,0,0,18961,0,0,18962,0,0,0,0,18963,18964,0,0,0,18965,0,18967,0,
-0,0,0,0,0,0,0,0,18968,0,18969,0,18970,18973,18976,0,0,0,0,0,0,18977,0,0,0,18981,
-0,0,0,18990,0,18998,0,0,0,0,0,18999,19003,0,0,19005,0,0,0,19006,0,0,0,0,0,0,
-19008,19011,0,0,19018,0,0,19019,0,19024,0,19031,19032,0,19039,0,19041,19050,0,0,
-0,19051,19055,19056,0,19059,19063,19064,0,0,19088,0,0,0,19093,19094,0,0,0,0,
-19095,0,19096,0,0,0,19097,0,0,19098,0,19099,19100,0,0,19103,0,0,0,0,0,0,0,19111,
-0,0,0,0,0,0,19112,0,0,0,19116,19117,0,19121,19122,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,19123,19124,0,0,0,0,0,0,0,19125,19126,0,19128,0,0,0,0,0,0,0,0,0,0,
-19129,19130,19131,19132,0,0,19146,0,0,19147,19156,19158,0,0,0,0,0,0,0,0,19182,
-19185,0,0,19187,0,0,0,19193,0,0,0,0,0,19194,0,19197,0,0,0,0,19198,0,0,0,0,0,0,0,
-0,0,0,19202,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,19203,0,19205,19210,
-0,0,0,19213,0,19218,0,0,0,19223,19229,0,0,19230,0,0,19231,19232,19233,19239,0,0,
-0,0,0,19240,0,19248,19249,0,0,0,0,19254,0,19256,19258,19259,0,0,19261,0,19266,0,
-0,0,19272,0,19278,19281,19282,0,0,0,0,0,0,0,0,0,0,0,0,19283,0,0,19284,0,0,19285,
-19287,0,0,0,0,0,0,0,0,0,0,0,0,0,0,19288,19291,0,19292,0,0,0,0,19297,0,19298,0,0,
-0,0,19302,19303,0,0,0,0,19304,19305,0,0,0,0,19314,0,0,19315,0,0,19321,0,0,0,0,0,
-0,0,19322,0,19333,0,19334,19335,0,19336,19337,0,0,0,0,0,0,0,0,0,0,0,19346,0,0,
-19353,0,19354,19362,0,19366,19367,0,0,19369,0,19375,0,19377,19380,19388,0,0,0,0,
-0,19389,19390,0,0,0,0,19392,0,0,0,0,0,19402,0,0,0,0,0,0,0,0,19412,0,0,19413,
-19422,0,19424,0,0,0,19425,0,0,0,19428,0,0,0,0,19431,0,0,0,0,0,19432,0,0,0,0,0,
-19448,19459,0,0,19461,0,19462,19463,0,19467,19474,19482,0,0,0,0,19494,0,0,0,0,
-19501,0,0,0,0,0,0,0,0,0,0,19502,19504,0,0,0,0,0,0,0,19505,0,0,0,0,19506,19507,0,
-0,0,19508,0,0,19511,0,0,19514,0,19515,0,19516,0,19518,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,19530,0,19537,19538,0,19543,19546,0,19547,19551,0,0,0,0,0,0,19552,
-19553,0,0,0,0,0,0,0,0,0,0,0,0,19555,0,0,19556,0,0,0,0,0,0,0,0,0,0,0,0,19560,
-19561,0,0,19562,0,0,0,0,0,0,19565,19567,0,19568,0,0,0,19569,19570,0,19578,0,0,0,
-0,19580,0,0,0,0,19581,19584,0,0,0,0,0,0,0,19585,19586,0,0,0,19587,19588,0,19589,
-0,0,0,0,0,0,19592,19593,19599,0,19600,0,0,19604,0,0,19605,0,19606,19608,19610,0,
-19613,19614,0,0,0,0,0,0,19616,19617,0,0,19618,0,0,19619,0,0,0,19620,19621,19631,
-0,0,19632,19634,19636,0,19643,0,0,19644,19658,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,19659,0,0,0,0,0,0,0,0,0,0,0,19675,19677,0,0,0,0,19679,0,19683,0,19684,0,0,
-0,0,0,0,19687,0,0,0,0,0,0,0,0,19688,19689,19692,0,0,0,0,0,0,0,19695,19697,0,0,0,
-0,0,19698,19699,0,0,19700,0,19702,0,0,19703,0,0,0,0,0,0,19704,19708,0,19710,0,
-19713,0,0,0,19715,0,0,0,0,19718,0,0,0,0,0,0,0,19720,0,19722,0,0,19725,0,0,0,0,0,
-0,0,0,0,0,0,0,0,19730,0,0,0,0,0,19731,0,19734,19735,19739,0,0,19740,0,19741,0,0,
-0,19746,0,0,19747,0,19771,0,0,0,0,0,0,0,0,19772,19775,0,0,0,0,0,0,19778,0,0,0,0,
-0,19779,0,0,19780,19790,0,19791,0,0,19792,0,0,0,19793,0,0,19796,19797,0,0,0,
-19799,0,0,0,19801,0,0,0,0,19803,0,19804,0,19805,0,0,19807,0,0,0,19808,0,0,0,0,0,
-0,19809,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,19816,0,19821,0,19822,19830,19831,0,0,
-0,19833,0,0,0,0,0,0,0,0,0,0,19838,0,0,0,0,19839,0,0,19843,0,0,0,0,19845,0,0,0,0,
-19847,0,0,19848,0,19849,0,0,0,0,0,0,0,19851,0,0,0,19854,0,0,0,0,0,0,0,0,0,19864,
-0,19865,0,19866,0,0,0,0,0,0,0,19868,0,0,19870,0,0,19871,0,0,19872,19873,19875,0,
-19880,19882,19884,0,0,19885,19886,19888,0,0,0,0,0,0,0,0,0,0,0,0,19890,19892,
-19893,0,0,19894,0,0,0,19895,0,19896,19902,0,0,19903,0,0,19905,0,0,0,19906,0,
-19908,0,19909,19911,0,0,0,19913,19920,0,19938,19939,19940,0,0,0,0,0,0,0,19942,0,
-19943,0,19945,0,0,0,19951,19952,19954,19960,0,19965,0,19971,0,0,0,0,0,19975,0,
-19976,0,19990,0,0,19991,0,19993,0,19995,0,0,0,19998,19999,20001,0,20003,20005,0,
-20011,20012,0,0,0,0,0,0,20014,0,20020,0,0,0,0,20021,0,0,0,0,0,20023,20024,0,0,0,
-0,0,20025,0,0,20027,0,0,20029,0,0,20032,0,0,0,0,20044,20045,0,20048,20049,0,0,
-20050,0,20052,0,0,20054,20057,0,0,0,0,0,0,0,0,0,20059,0,0,20061,0,20062,0,20064,
-0,0,20066,0,0,20067,0,0,0,0,20069,0,0,0,0,0,0,20070,20071,0,0,0,0,0,0,0,0,0,0,0,
-20072,0,0,20073,20074,0,0,0,0,0,20075,0,20078,0,0,0,0,20080,0,20081,0,0,0,0,0,0,
-20095,0,20098,0,0,0,0,0,0,0,20107,0,0,0,0,0,0,0,0,20112,0,0,0,20113,20114,0,0,0,
-20115,20123,20124,0,0,0,20131,20133,20134,0,0,0,0,20136,0,0,20137,20138,20150,0,
-20152,0,0,0,20153,0,0,20154,0,0,0,20158,0,20163,0,0,20164,0,0,0,0,0,0,0,20166,0,
-20168,0,20170,0,20175,0,0,20178,0,0,0,0,20223,0,0,0,0,20224,0,20226,0,0,20230,0,
-20231,0,0,0,0,20232,0,0,20233,20234,0,20244,0,20247,0,0,0,0,0,0,20249,0,0,0,
-20250,0,0,0,0,20251,0,20253,0,20254,0,0,0,0,20256,0,0,20264,0,0,0,0,20266,0,0,0,
-20278,0,0,20279,20282,0,0,0,0,0,20283,0,20284,0,20285,0,20287,20290,0,0,0,0,
-20292,0,0,0,0,20293,20297,0,0,0,0,0,0,20299,0,20300,20303,0,0,0,0,0,0,20307,0,0,
-20308,0,20309,0,20310,0,0,0,0,0,0,20312,0,0,0,20314,0,0,0,0,20315,20316,0,20322,
-0,0,0,0,0,0,20339,0,0,0,20342,0,0,0,0,20352,0,0,0,0,0,0,0,0,0,0,20362,0,0,20365,
-0,20375,20377,0,0,0,0,0,0,0,0,0,0,0,20378,20379,0,20380,0,0,20381,0,20382,0,
-20383,0,20388,0,0,0,0,0,0,0,0,0,0,0,0,0,0,20390,20392,20393,0,0,20395,0,0,0,0,0,
-20396,0,0,0,0,0,0,0,0,20398,20415,0,0,0,20417,0,0,20420,0,0,20426,20428,0,20431,
-0,0,20432,0,20433,20434,20435,0,0,0,0,20440,0,0,0,0,0,20442,0,20443,0,20446,0,0,
-0,0,20448,0,20451,0,0,0,0,0,0,0,0,0,20452,20453,0,0,20454,0,0,0,0,0,0,20457,0,
-20458,0,0,0,20465,0,0,0,0,0,20469,0,0,0,20473,0,20476,0,0,0,0,0,0,0,0,20477,0,0,
-20485,0,0,20486,0,0,20487,0,20496,0,20497,0,0,20498,0,0,0,0,0,0,0,0,0,0,20499,
-20500,0,20501,0,0,0,0,0,20520,20527,0,20529,0,0,0,0,20539,0,0,20540,0,0,0,20543,
-0,0,0,20546,0,0,0,0,0,20548,0,0,20563,0,0,20564,0,20566,0,0,0,0,0,20589,0,0,0,0,
-20590,0,0,20593,20594,0,0,0,0,20595,0,20597,20598,0,0,0,20618,20620,0,0,0,0,
-20621,0,0,0,0,20627,0,0,0,0,0,20628,0,0,0,20629,0,20630,0,0,20639,0,0,0,0,0,
-20707,0,0,20709,0,0,0,20713,20714,0,0,0,0,0,20724,20725,0,0,0,0,20726,20728,
-20729,0,20733,0,20734,0,20735,20736,0,20737,0,0,20744,0,20745,0,20748,0,0,20749,
-0,0,0,0,0,0,0,0,20750,0,0,0,0,20754,0,0,0,20761,0,0,20763,0,0,0,0,0,0,0,20766,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,20767,0,0,0,0,20768,0,20769,20777,0,0,0,0,0,0,20785,0,
-0,0,20786,20795,20801,0,20802,0,20807,0,0,20808,0,0,20810,0,0,20811,0,20812,0,0,
-0,0,0,20813,0,0,20818,20820,20821,0,0,0,20822,0,20823,0,0,0,20826,0,0,0,0,0,0,0,
-20829,20830,20831,0,20832,20836,0,0,20839,0,0,20840,20842,0,20843,0,20844,0,
-20854,0,0,0,20855,0,0,0,0,20856,0,0,0,20869,0,0,20871,0,0,0,0,0,0,0,20873,0,0,0,
-0,0,20876,0,0,0,0,0,20880,0,0,20882,0,0,0,0,20883,20884,0,0,20890,0,0,0,0,0,0,0,
-0,0,20891,0,0,0,0,0,20905,0,20906,20910,0,0,20912,20915,0,0,0,0,0,20916,0,20917,
-0,20919,20920,20922,0,20927,0,20928,20929,20930,0,0,20935,0,0,20939,0,0,20941,0,
-0,0,20943,0,0,0,20946,20947,0,0,0,0,0,20950,0,20954,0,0,20955,20964,0,0,20967,0,
-0,0,0,0,20973,20975,0,0,0,20984,0,20987,20988,0,0,0,0,0,20989,0,0,0,20995,0,
-20998,0,20999,0,0,0,0,21000,21001,0,0,0,0,21008,0,21010,0,21016,0,0,0,21017,
-21018,0,0,0,0,0,21021,21026,21027,21028,0,0,21029,0,0,0,0,0,21030,0,0,0,0,0,0,0,
-0,0,0,0,0,0,21031,21032,0,0,0,0,0,21037,0,0,21038,0,0,0,0,0,0,0,0,0,21039,0,
-21041,0,21046,21047,0,0,0,21049,21053,0,0,21057,21064,21065,0,0,21066,21067,0,0,
-0,21069,0,0,0,21071,21072,0,0,21073,0,21074,0,0,21078,0,0,0,0,21079,0,0,21080,
-21081,0,0,21086,21087,0,21089,0,0,0,0,0,0,0,21091,0,21093,0,21094,0,0,0,0,0,0,0,
-0,21095,0,0,0,0,0,21096,0,21098,0,0,0,0,0,0,0,21099,0,0,21100,21101,21102,0,0,0,
-0,0,21103,0,21104,0,0,0,0,0,21105,21108,21109,0,0,21112,21113,0,0,0,0,0,0,21115,
-21122,21123,0,0,0,0,0,21125,0,0,0,0,0,0,0,0,21129,21131,0,0,21134,0,0,0,21137,
-21142,0,21143,0,0,21144,0,21145,21146,0,21152,21154,21155,21156,0,0,0,21160,0,0,
-0,0,0,0,21161,0,21164,0,21166,0,0,0,0,21170,0,0,0,0,21171,0,0,21172,0,21174,0,
-21175,0,0,0,0,0,21176,21179,21188,0,0,0,21189,0,0,21190,0,0,0,21192,0,0,21193,0,
-0,0,21198,0,21212,0,0,21213,0,0,0,0,0,0,21215,21216,0,0,21223,21225,0,21226,0,0,
-0,0,21227,21228,0,0,21229,0,0,0,0,21230,21236,0,0,0,0,0,0,0,0,0,0,0,0,0,21237,0,
-0,21238,21239,0,0,0,0,21256,0,0,0,0,0,21257,0,0,0,0,0,0,0,21259,0,0,0,21263,0,
-21272,0,21274,0,21282,0,0,0,0,0,0,0,0,21283,0,0,0,0,0,0,0,0,21294,0,0,21297,0,0,
-0,0,21298,0,0,0,21299,0,21300,21302,0,21316,0,21318,21322,21323,0,21324,0,21326,
-0,0,0,21327,21328,0,0,0,21352,0,0,21354,21361,0,0,0,0,0,0,0,0,0,0,0,0,0,21362,0,
-0,0,21363,0,0,0,0,0,0,0,0,0,21366,0,0,21367,21372,21374,0,0,0,21375,21377,0,
-21378,0,0,0,21380,0,0,0,0,0,0,0,0,0,0,21381,0,0,0,0,0,0,21382,0,21383,0,0,21384,
-0,0,21385,0,0,0,0,21389,21390,0,0,0,0,0,0,0,0,0,0,0,0,0,21397,21398,0,0,0,0,0,0,
-0,0,0,0,21399,0,21400,0,0,0,0,21402,0,0,0,21403,21404,0,21405,21406,0,0,0,21407,
-0,0,0,0,0,0,0,0,0,0,0,0,21408,0,0,0,0,21409,0,21421,0,21422,0,0,0,21425,21428,0,
-0,0,0,21429,0,0,0,0,0,21433,0,0,0,0,0,0,0,0,0,0,21434,0,21443,0,21444,21449,0,
-21452,0,21453,21454,0,0,0,21457,0,0,21458,0,0,0,21460,21461,0,0,21464,0,0,0,
-21473,21478,0,0,21479,0,0,21481,21483,0,0,0,0,0,0,0,0,21484,0,0,21485,21486,0,0,
-21488,0,0,0,0,0,0,21523,0,0,21525,0,0,0,0,0,0,0,21526,0,0,0,0,0,0,21529,21530,0,
-0,21531,0,0,21533,0,0,21539,21564,0,21567,0,0,0,0,0,0,0,0,21575,0,0,0,0,21577,0,
-0,0,0,0,21591,0,0,21604,0,0,0,0,0,0,0,0,0,21605,0,21606,0,0,21617,21618,21619,
-21620,0,0,0,0,0,0,0,0,0,0,0,0,0,21623,0,0,0,0,21631,0,21635,0,0,0,0,21639,21646,
-21653,21662,0,0,21663,21664,0,21666,0,0,21667,0,21670,21672,21673,0,21674,21683,
-0,0,0,0,0,21684,0,21694,0,0,0,0,21695,21700,0,21703,0,21704,0,0,21709,0,0,0,
-21710,0,0,0,0,0,0,0,0,21711,0,0,0,21712,0,21717,0,21730,0,0,0,21731,21733,0,0,0,
-0,21737,21741,21742,0,21747,0,0,0,21749,0,0,0,0,0,0,0,0,0,0,0,0,0,21750,0,0,0,0,
-0,21752,0,0,0,0,21753,0,0,0,0,0,0,21755,21756,0,21757,0,0,0,0,0,0,21760,0,0,
-21763,0,0,0,0,0,0,0,0,0,21764,0,0,21766,0,0,21767,0,0,0,0,0,0,0,0,0,21773,0,
-21774,0,0,21775,0,0,0,0,21776,0,0,21777,0,0,0,0,0,0,0,0,0,21780,21787,21788,
-21791,0,0,0,21797,0,0,0,0,0,21805,0,0,0,0,21806,0,21807,21809,0,21810,21811,0,
-21817,21819,21820,0,21823,0,21824,0,0,21825,0,0,21826,21832,0,0,0,0,0,21833,
-21848,21849,0,0,21867,21870,21871,21873,0,0,0,21874,0,0,0,0,0,0,0,0,0,21875,0,
-21878,0,0,0,21879,0,21881,21886,0,0,0,0,21887,0,0,21888,21894,21895,21897,0,
-21901,0,21904,0,0,21906,0,0,0,21909,21910,21911,0,0,21912,0,0,21913,21914,21915,
-0,21919,0,0,0,0,0,0,0,21921,0,0,21922,21933,21939,0,0,0,0,0,0,0,0,0,0,0,21944,0,
-0,0,0,0,21945,0,21947,0,0,0,0,0,0,0,0,0,0,21949,0,0,0,21950,0,0,0,0,0,0,0,0,0,0,
-0,0,0,21951,0,21952,0,0,0,0,0,0,0,0,0,21954,21957,0,0,0,0,21958,0,21959,0,0,0,0,
-0,0,21962,21963,0,0,0,0,0,0,0,0,21964,21965,0,0,21969,21970,0,0,0,21974,0,0,
-21980,21981,0,21982,0,0,0,0,0,21985,0,21988,0,21992,0,21999,0,0,0,0,0,0,22001,0,
-22002,0,0,0,0,0,0,22003,0,0,0,0,0,22004,0,0,0,22008,0,22009,22015,0,0,22016,0,0,
-0,22017,22019,0,0,0,0,0,0,0,0,0,22020,0,0,0,0,0,0,0,0,0,0,22021,22037,0,22039,0,
-0,0,22040,0,0,0,22048,22049,0,0,22053,22055,22056,22059,0,0,22060,22061,0,0,
-22064,0,0,0,0,22066,0,0,0,0,0,0,0,22073,0,0,0,22074,22075,0,0,0,0,0,0,0,22076,0,
-0,0,0,22077,22084,22099,0,0,0,0,0,0,0,22104,0,0,22107,0,22108,0,22109,0,22110,0,
-0,0,0,0,0,0,22111,22119,0,22120,22122,0,0,0,0,22125,0,0,0,22128,22129,0,0,0,0,0,
-0,22141,0,0,0,22142,0,0,22144,22146,0,22148,22149,22151,22154,0,0,0,22162,0,0,0,
-0,22164,22177,0,0,0,0,22179,0,22182,22183,0,0,22184,22188,0,0,0,0,0,0,0,0,22190,
-0,22194,22201,0,0,22208,0,22209,0,22212,0,0,22215,0,22223,22231,0,0,22232,0,
-22234,0,0,22235,22236,0,22237,0,22240,0,0,0,0,0,22241,0,0,0,22242,22246,22247,0,
-0,0,22259,22268,0,22269,0,0,0,0,0,0,0,22270,0,0,0,0,22271,0,22272,0,22277,0,0,0,
-0,0,22278,22280,22283,22286,0,0,22287,22289,0,0,22290,0,22293,0,0,0,0,0,0,0,0,0,
-0,22295,0,22301,22302,0,0,0,22305,0,22308,0,0,0,0,0,0,0,0,0,0,22315,0,0,0,22317,
-0,22334,0,0,0,22335,0,0,0,0,0,22336,0,22338,22344,0,22347,22349,0,22350,0,0,0,0,
-0,0,0,22357,0,0,0,0,0,22358,0,0,0,0,0,0,0,0,0,0,22359,22360,0,0,0,0,0,0,0,0,
-22361,22366,0,0,22369,0,22370,22373,0,0,0,0,0,22375,0,22377,0,0,0,0,0,22378,0,0,
-0,0,22381,0,0,0,0,22382,0,22383,0,0,0,0,0,0,0,0,0,22391,0,0,22392,22395,22396,
-22402,0,0,0,0,0,0,0,0,0,0,0,0,0,22405,0,0,22406,0,0,22408,0,0,22409,22410,0,0,0,
-0,0,0,22424,0,0,0,0,22426,0,0,0,22427,0,22428,0,22432,0,22435,22442,22443,0,0,0,
-0,22444,0,0,0,0,0,22446,0,22454,0,22455,0,0,0,22465,0,22470,0,22471,0,0,0,0,
-22472,22473,0,22487,0,0,0,22488,0,0,0,0,22489,0,0,22499,0,0,0,0,0,0,22514,0,0,
-22515,0,0,0,0,0,0,0,22516,0,0,0,22517,22520,0,0,0,22534,0,0,22535,0,0,22536,0,
-22540,22553,0,22555,0,0,0,0,22561,0,0,22562,0,0,0,0,0,0,0,0,0,0,0,22566,0,0,0,0,
-22567,22568,0,0,22575,0,22579,0,22582,22583,22585,0,0,0,0,0,22586,0,0,22587,0,0,
-22590,0,0,0,0,0,22591,0,22592,0,0,0,0,0,22593,0,22602,0,0,22604,0,0,22609,0,0,
-22618,0,0,0,0,0,0,22619,0,22624,22625,0,0,22638,0,0,0,0,0,22639,0,0,22640,0,0,0,
-0,0,0,0,22644,0,22645,22647,0,0,0,0,22652,22653,0,0,0,22654,0,22655,0,0,0,22656,
-0,0,0,0,0,0,0,0,0,0,22673,22675,22676,0,0,22678,22679,0,22691,0,0,0,0,0,0,0,
-22693,0,0,22696,0,22699,22707,22708,0,0,0,0,0,0,0,0,22718,0,22719,0,0,0,0,22723,
-0,0,0,22724,22725,0,0,0,0,0,0,0,0,0,0,0,0,0,0,22726,22728,0,0,0,0,0,0,0,0,22729,
-0,0,22731,0,0,0,0,22732,22735,22736,0,0,0,0,22739,0,22749,0,0,22751,0,0,0,0,0,0,
-0,0,0,0,0,22758,0,0,0,0,0,22760,0,0,0,0,0,22764,22765,22766,0,22768,0,0,0,0,0,
-22769,22770,0,0,0,0,0,0,22771,0,0,22772,22775,0,22776,22777,22780,0,0,22782,
-22784,0,22787,0,22789,22796,0,0,0,0,0,22798,0,0,0,0,0,0,22802,0,22803,22804,0,0,
-0,0,0,0,0,0,0,0,22805,0,0,22810,22811,22814,22816,0,22825,22826,0,22831,22833,0,
-0,0,0,0,0,0,0,0,22834,0,22836,22838,0,22839,0,0,0,0,0,22840,0,22847,0,0,0,0,0,
-22856,22857,0,22858,22859,0,0,22862,0,0,22864,0,0,0,0,22865,0,0,0,0,0,0,0,0,0,0,
-0,22866,0,22867,22868,0,0,0,0,22869,0,22871,0,22872,0,22873,22881,22882,22884,
-22885,0,0,0,0,0,0,0,22886,22887,0,22894,0,22895,0,0,0,22900,0,22901,0,0,0,0,
-22904,0,0,0,0,22905,22907,0,0,0,22915,22917,0,0,22918,0,0,0,22920,0,0,0,22929,
-22930,0,0,0,22941,22942,0,0,0,22943,0,0,0,22944,0,0,0,0,0,0,0,22946,0,22947,0,0,
-22954,0,22956,0,0,22962,0,0,0,0,0,0,0,22963,0,0,22964,0,0,0,0,0,0,0,22965,0,
-22968,0,0,0,22969,0,0,0,0,0,22970,0,22971,0,0,0,0,0,22978,0,0,22979,0,22987,0,0,
-22989,0,0,0,0,0,0,22990,0,23005,0,0,0,0,0,0,0,23006,23007,23008,0,0,23023,23024,
-23029,0,0,0,0,23030,0,0,0,0,0,23032,0,0,0,0,0,23035,0,0,0,0,23038,0,0,0,23048,0,
-23049,23052,23053,23060,23061,0,23063,0,0,0,0,23067,23068,0,0,0,23069,23073,0,0,
-0,23127,0,23128,0,0,0,0,0,23129,0,23138,23141,0,23149,0,0,23150,0,0,0,23152,0,0,
-0,0,0,0,0,0,23154,0,0,0,0,23157,23159,23160,0,0,0,0,0,0,0,0,0,0,0,0,23180,0,0,0,
-0,23181,0,0,23188,0,23189,0,0,0,0,0,0,0,0,0,0,0,0,23195,0,0,23196,23199,0,0,0,0,
-0,0,0,0,0,23202,0,23204,0,23207,0,23209,23210,0,0,0,0,0,0,23227,23229,0,0,23230,
-23234,23238,0,0,0,23245,23246,23248,0,0,0,0,23249,23254,0,0,0,23265,0,0,0,0,0,0,
-0,23268,0,23276,0,0,0,0,23277,0,23297,0,23298,0,0,0,0,23299,0,23302,0,0,23303,
-23312,0,0,23314,0,23320,0,0,0,0,23324,0,23325,0,23328,0,23334,0,0,0,23337,0,0,0,
-0,23343,23344,23346,0,23348,0,0,0,0,0,0,0,0,23353,0,0,0,0,23355,0,23356,23358,0,
-0,0,23359,23360,0,23361,0,23367,0,23369,0,0,23373,0,23378,23379,0,23382,23383,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,23387,0,0,0,0,0,0,23388,23390,0,0,23393,23398,0,0,0,
-23399,0,0,0,23400,0,0,0,0,23401,0,0,0,23415,0,0,0,0,0,0,0,0,23416,0,23422,0,
-23443,23444,0,0,0,0,23448,0,23454,0,0,0,0,0,0,23456,0,0,23458,23464,0,0,0,0,0,0,
-23465,0,0,0,23470,23471,0,0,23472,0,0,0,23473,23496,0,0,0,0,0,0,0,0,23497,0,
-23499,0,0,23502,0,0,23503,0,0,23513,0,0,23515,0,0,0,23517,0,0,0,0,23518,23519,
-23521,23524,0,23525,23528,23539,0,0,0,0,0,23541,0,0,23544,0,0,23556,0,0,23557,0,
-0,0,0,0,0,0,0,0,0,0,0,0,23559,0,23560,0,0,23561,0,0,23566,0,0,0,0,0,23568,23569,
-23570,0,0,0,0,23571,0,23574,0,0,0,0,0,0,0,0,0,0,0,23575,0,23579,0,0,23581,0,0,0,
-0,0,0,23587,0,0,0,0,0,0,0,23596,23598,0,0,0,0,23602,23606,0,0,23607,0,23608,0,0,
-0,23614,23616,0,0,0,0,0,23618,0,0,23619,0,0,0,0,23621,23626,0,23627,0,0,0,0,0,0,
-0,23629,0,23630,0,0,0,0,23634,0,23636,0,0,0,0,0,0,23638,0,0,0,0,23640,23667,0,
-23669,0,0,0,23681,0,0,0,0,0,0,0,23682,0,23683,0,0,0,0,0,23684,0,0,0,23685,23689,
-0,23693,23694,23700,0,23702,0,23709,0,0,0,0,0,0,0,23712,0,0,0,0,0,23714,0,0,
-23715,0,0,0,0,23718,0,0,23720,0,0,0,0,23722,0,0,0,23726,23729,0,23741,23746,0,
-23748,0,0,0,0,23749,0,0,0,0,0,23750,0,0,0,0,23751,0,23753,0,0,0,0,23757,23765,0,
-0,0,23770,0,0,0,0,0,0,0,23771,0,23772,23781,0,0,23796,0,0,0,0,23798,0,23799,0,0,
-0,23802,0,0,23806,0,23807,0,0,23808,0,23809,0,23819,0,0,0,23821,0,23827,0,0,0,
-23829,0,0,0,0,0,0,0,23830,0,0,0,0,0,0,23832,23833,23834,23835,0,0,0,0,23837,
-23838,0,0,0,0,0,23846,0,0,0,0,0,0,23847,0,0,0,0,0,23879,23881,0,0,23882,23883,
-23895,0,23899,0,0,0,0,23901,0,0,0,0,0,0,23902,0,0,0,0,0,23903,23905,0,23906,0,
-23907,23918,23919,23920,0,23922,0,23924,0,23927,0,23934,0,23937,23941,0,23942,
-23946,0,0,0,0,0,23955,23956,23958,0,0,0,0,0,0,23959,0,23962,23965,0,23966,0,0,0,
-0,23967,23968,0,0,23973,0,0,23974,0,0,0,0,23975,0,23976,0,0,0,0,0,0,0,0,0,0,0,0,
-0,23977,0,0,0,0,0,0,0,0,23980,0,0,23984,0,23985,0,0,23987,0,0,23988,23990,23991,
-0,0,0,0,0,0,23992,0,0,0,0,0,0,0,0,23994,0,0,0,23998,0,0,0,0,0,0,0,0,0,23999,0,0,
-24003,0,24004,0,24006,0,0,0,24007,0,0,24008,0,0,0,0,0,0,0,24009,0,0,24010,0,0,
-24011,0,0,24013,24014,0,0,24015,24016,24027,0,24028,24029,0,24030,0,0,0,0,0,
-24033,24034,0,24035,0,0,24036,0,0,24044,0,24048,24049,24063,24067,0,24068,24070,
-0,0,24071,24078,24087,0,24090,0,0,0,24095,0,24098,24101,24104,24106,0,24107,0,0,
-0,24108,0,0,0,0,24110,24111,0,24113,0,0,24115,24120,0,0,0,0,0,0,24124,0,24125,0,
-24126,0,24127,0,0,0,0,0,24135,0,0,24136,0,24137,24142,0,0,0,24146,0,0,24147,
-24149,24154,0,24163,0,0,0,24165,24166,24167,0,0,0,0,0,0,0,0,0,0,24169,24170,
-24175,0,0,0,24178,0,0,24179,0,0,24181,0,24184,24197,0,24201,24204,0,0,0,0,0,0,
-24206,24212,24220,0,0,0,24224,0,0,0,0,0,0,0,0,24226,0,24234,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,24235,0,24236,0,0,0,0,0,24239,24240,24241,0,0,24248,0,0,24249,0,
-24251,0,0,0,0,0,0,24253,0,24268,0,0,0,24269,0,24271,24272,0,0,0,0,24273,0,0,
-24274,0,0,24279,0,0,0,0,0,0,0,24280,0,24293,24294,0,0,0,0,0,0,24296,0,0,24323,0,
-0,0,24329,24330,24331,24339,0,24351,0,0,24369,24370,0,0,0,24371,0,0,0,0,24372,
-24373,24374,0,0,0,0,0,24378,0,0,0,0,24379,0,24381,0,24383,24389,0,24390,0,0,
-24394,24395,24400,0,0,0,24401,24402,0,24406,0,0,0,24411,0,0,0,24415,0,24416,0,0,
-0,0,0,24417,0,24419,0,24422,0,24423,24428,0,24435,0,0,0,24439,0,0,0,24440,24442,
-24446,0,0,0,24447,24448,24449,24452,0,0,0,0,24453,24457,0,0,24458,24459,24460,0,
-24465,0,0,0,0,0,0,0,24470,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,24471,0,24473,
-24474,24475,24476,0,24478,0,0,0,0,24480,0,0,0,0,0,0,0,0,0,0,24481,0,0,0,0,0,0,0,
-0,0,0,24482,24485,0,0,0,0,24486,0,0,0,24488,0,0,0,24494,0,0,0,0,24497,0,0,24498,
-0,0,0,24499,24506,0,0,0,24507,0,0,24511,0,0,24513,24514,0,0,0,0,0,24517,0,24518,
-0,24520,0,24521,24524,24525,0,0,0,0,0,24527,0,0,0,0,0,0,0,0,0,0,0,0,0,0,24528,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,24537,24539,0,24540,0,0,0,24548,0,0,0,0,0,24549,
-24550,0,0,0,24553,24554,0,24555,0,24556,0,24558,0,0,0,0,0,24560,0,0,0,24561,0,0,
-0,0,0,24562,0,0,0,0,0,0,0,0,0,0,0,0,0,24567,0,0,0,0,0,24569,0,0,0,24574,0,24575,
-0,0,0,0,0,0,0,0,0,0,0,24577,24581,0,24584,0,0,0,0,0,24585,0,0,0,0,0,24586,0,0,
-24587,0,24588,0,0,0,0,0,0,0,0,0,0,24590,24591,0,0,0,0,24592,0,0,0,0,0,0,0,24594,
-0,0,0,0,0,0,0,24596,24597,0,0,0,0,24602,24603,0,0,0,0,24604,0,0,24605,0,24610,0,
-0,24611,0,0,0,0,24612,24615,24616,24624,0,0,0,24627,0,24638,24639,0,0,0,0,24640,
-0,0,0,24655,24656,24657,0,0,0,0,0,0,0,0,24662,0,24663,24664,0,0,0,0,0,24665,0,0,
-0,0,24667,0,0,0,0,0,0,24668,24669,0,24670,24674,0,0,0,24675,0,24678,0,0,24679,0,
-0,0,24681,0,24683,0,0,0,0,24684,0,24685,0,0,24686,0,0,24688,24689,0,0,0,0,24690,
-24691,0,0,0,0,0,0,0,24697,0,24698,0,0,0,0,0,0,0,0,24709,0,0,0,0,0,24710,0,24712,
-0,0,0,0,0,0,24713,24714,0,24715,0,24716,24718,0,24719,0,0,0,0,24720,0,0,24725,0,
-0,24738,0,24749,24750,0,0,0,24752,0,0,0,24753,0,0,0,24758,0,0,0,0,0,24762,0,
-24763,0,0,0,0,0,0,0,24764,0,0,0,0,0,24765,24767,24768,0,24772,0,0,0,0,24773,0,0,
-0,0,24777,0,0,0,0,0,24785,0,24786,24788,0,0,0,24789,0,0,0,0,24794,24798,0,24799,
-24800,0,0,0,24803,0,24804,24806,0,24807,0,0,0,24810,0,0,0,0,0,0,24827,24828,0,
-24835,0,0,0,0,0,0,24836,0,0,0,0,0,24839,0,24843,24844,0,0,0,0,0,0,0,0,0,0,24847,
-0,0,24848,0,0,0,0,0,0,24849,0,24850,24851,0,0,0,24852,0,24853,0,0,0,0,0,0,0,0,0,
-24854,0,24855,0,0,24868,0,0,0,24883,0,0,0,24884,0,24895,24897,0,0,0,0,0,24899,0,
-0,0,0,0,24900,0,24913,0,0,0,0,0,0,24914,0,0,24917,24930,24931,0,0,0,24932,0,0,
-24939,0,0,24942,0,0,0,0,0,0,0,0,0,24945,24950,0,24951,0,0,24953,0,0,0,24954,0,
-24959,0,0,0,24961,0,0,24962,0,24964,24968,24970,24972,0,0,0,0,0,24976,0,0,0,
-24977,0,24982,0,0,24983,0,0,24984,0,0,0,24993,0,0,0,24994,0,0,25001,0,0,0,25003,
-0,0,25018,0,0,25023,0,0,0,25034,0,0,25035,25036,0,25037,0,0,0,0,0,0,0,25039,0,0,
-0,0,0,25040,0,0,0,0,0,0,0,25042,0,0,25043,25045,0,0,0,0,0,0,25049,0,0,25051,0,
-25052,25053,0,0,25054,0,0,0,25055,0,0,0,0,25057,25059,0,0,25060,25064,0,25065,
-25069,25070,0,0,0,0,25072,0,25073,0,25090,0,0,25092,25093,25101,0,0,0,0,0,0,
-25105,25108,0,0,25113,0,0,25115,25116,0,0,0,0,0,0,25117,0,0,0,25120,25121,0,0,0,
-0,0,0,0,25125,0,0,0,25126,0,25130,25134,0,25139,0,25143,0,0,0,25151,0,25161,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,25163,0,0,0,0,0,0,0,25174,0,25175,0,25207,0,0,
-0,25209,0,0,0,0,25213,0,25219,0,25223,0,25225,0,0,0,25227,0,0,0,25228,0,0,0,
-25229,0,0,0,0,0,0,0,25231,25233,0,0,0,0,25237,25239,0,0,0,25243,0,0,0,25252,0,
-25257,25258,0,0,0,0,25260,25265,0,25268,0,0,25273,25324,0,25325,0,25326,0,0,0,0,
-0,0,0,0,25327,0,0,0,0,0,25328,0,0,0,0,0,0,25332,0,0,0,25333,0,0,0,25336,25337,
-25338,0,0,25343,0,25350,0,0,0,0,0,0,0,25352,0,25354,0,25375,0,25379,0,0,0,0,
-25384,0,0,0,0,0,0,0,0,0,25386,0,25388,0,25390,0,0,25399,0,0,25401,0,0,0,25402,0,
-0,0,25407,0,0,0,0,0,0,0,0,0,0,0,25413,25415,0,0,25417,0,0,0,0,0,0,0,25419,0,0,0,
-25421,0,0,0,25424,0,0,0,0,25433,0,0,0,0,0,0,0,0,0,25435,0,0,0,0,0,0,25436,0,0,0,
-25437,0,0,25440,0,0,0,0,0,0,25442,0,0,25443,0,25446,0,0,25449,0,0,0,25450,0,0,0,
-0,25452,0,25453,25454,25455,0,0,0,25456,0,25457,0,0,0,25459,0,25461,0,25468,0,0,
-0,0,0,0,0,0,25469,0,0,0,0,0,25471,0,0,0,0,0,25474,0,0,0,0,0,0,0,0,25475,0,0,0,0,
-25477,0,0,0,0,25483,0,0,0,0,0,25484,0,0,0,0,0,0,0,0,0,0,0,0,25485,0,25497,0,0,
-25498,0,25504,0,25510,0,25512,0,0,25513,25514,0,0,0,0,0,0,25517,25518,25519,0,
-25520,0,0,0,0,0,0,0,25521,0,25522,25527,25534,0,25536,0,25537,0,0,25548,25550,0,
-0,25551,0,25552,0,0,0,0,0,25554,0,25555,0,25556,25557,25568,0,0,0,25570,25571,0,
-0,0,0,0,0,25574,0,0,0,0,25579,0,0,0,25581,0,0,0,25582,0,0,0,0,0,0,0,0,0,25588,0,
-0,0,0,25589,0,0,0,0,25590,0,25591,25592,25593,0,25594,0,0,0,25596,0,25597,25615,
-0,0,0,0,0,25618,0,0,0,0,25619,25623,0,0,25629,0,0,25631,0,0,0,25635,25636,0,0,
-25649,0,0,0,0,25654,0,0,0,25661,25663,0,0,25671,0,0,25678,25698,0,25699,25702,
-25703,0,0,0,0,0,0,0,0,25704,0,0,0,0,0,25706,0,0,25710,0,25711,0,25712,0,25715,
-25716,25717,0,0,25718,25728,25732,0,0,0,25734,0,0,0,0,0,0,0,0,0,25737,0,0,25739,
-0,0,0,25740,0,25741,25745,0,25746,0,25748,25772,25778,0,0,0,0,0,25780,0,0,0,0,
-25781,0,25782,25784,25785,0,0,0,25789,0,0,0,0,0,0,25797,25801,0,0,0,25808,25809,
-0,0,25811,25814,25815,0,0,25817,0,0,0,0,0,0,0,0,25820,0,0,0,0,25832,25833,0,0,0,
-25846,0,0,0,25847,25848,0,0,0,0,0,0,0,0,0,25849,25850,0,0,25851,0,0,25852,0,
-25862,0,0,0,25863,25865,0,0,0,0,0,0,0,25867,25868,0,25869,25874,0,25875,0,25876,
-25877,0,0,0,0,25878,25902,0,0,0,0,0,0,0,25903,25904,25905,0,0,0,25908,25909,0,0,
-0,0,25910,0,0,0,0,0,0,0,25912,0,25913,0,0,0,0,0,0,0,0,25914,0,0,25916,0,0,0,0,0,
-25917,25927,0,0,0,0,25928,0,0,25930,0,0,0,25933,0,0,25938,25942,0,0,0,0,0,0,0,
-25945,0,25950,0,25956,0,0,25961,25962,0,0,25963,0,25964,25965,25966,0,0,0,0,0,
-25967,0,0,0,0,25968,0,0,0,25969,25971,0,0,0,0,0,25973,25975,0,0,0,0,0,0,0,25978,
-0,25981,0,0,0,25982,0,0,0,25984,0,0,0,0,0,0,0,25993,0,0,0,0,0,0,0,0,0,0,0,0,0,
-26002,0,0,0,26005,0,0,0,26006,26007,0,0,26014,26015,26016,0,0,0,0,0,0,26017,
-26018,26020,0,26022,26023,0,0,0,26024,26028,0,26029,26033,26034,26044,0,0,0,0,0,
-26046,0,0,26047,0,0,26049,0,26050,0,26051,0,0,0,0,0,26053,0,0,0,0,26054,26059,0,
-0,0,0,0,0,26060,0,26066,0,0,0,0,0,0,0,0,0,0,0,0,26067,0,26069,0,0,26071,0,0,0,
-26073,0,26074,26077,0,0,0,0,26078,0,0,0,26079,0,26090,0,0,26094,0,0,0,0,0,0,0,0,
-26095,0,0,0,0,0,0,0,0,0,0,0,26096,26101,0,26107,26122,0,26124,0,0,26125,0,0,0,0,
-0,0,26136,26141,26155,0,0,0,0,0,0,0,0,0,26164,26166,0,0,0,26167,0,26170,26171,0,
-0,26172,0,0,26174,0,0,0,0,0,0,0,0,0,0,0,0,0,26175,0,0,0,26176,26177,0,26321,
-26322,0,26323,0,0,26324,0,0,0,0,0,0,0,26325,0,26331,0,0,0,0,0,0,26335,0,0,0,
-26350,0,0,0,26379,0,0,26382,26383,26385,0,0,26392,26406,0,0,0,0,26411,0,0,0,0,0,
-26412,0,0,26420,0,0,26423,0,26424,26426,26432,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-26435,0,26436,0,0,0,0,0,26441,0,26444,0,0,0,26446,0,0,0,0,26447,0,0,0,0,26449,0,
-26450,26452,0,26453,26454,0,0,0,26455,0,0,0,26456,0,0,26458,0,0,26460,0,26463,0,
-0,0,0,0,0,0,0,26464,26470,0,0,0,0,0,0,0,0,0,26473,0,0,26474,0,0,0,0,0,0,0,26475,
-0,0,0,0,0,0,0,26477,0,26485,0,0,26486,0,26487,0,0,26488,26493,26494,0,0,26495,0,
-26497,26504,26506,0,0,0,0,0,26507,0,0,0,0,0,26509,0,0,26510,0,0,0,0,0,0,0,0,0,0,
-0,0,0,26512,0,26513,26515,0,0,0,26518,0,0,0,26519,0,26524,26526,0,0,0,26527,0,
-26532,0,26533,26537,26558,0,0,0,26559,0,0,0,26571,0,0,26573,0,26588,0,26593,0,0,
-0,0,0,0,26603,0,26604,0,0,0,0,0,0,0,0,0,0,26606,0,0,0,0,0,0,0,26607,26609,26611,
-26614,0,0,0,26616,26620,0,26621,0,0,0,0,0,26627,0,26629,0,0,26630,0,0,26632,
-26643,0,0,0,26644,0,0,0,0,0,0,0,0,0,26646,26647,0,0,0,26650,0,0,26656,0,0,0,0,
-26663,26670,26671,0,0,0,26685,26686,26687,0,26689,0,0,0,0,26744,0,26745,0,26747,
-26748,0,26749,26750,26751,0,0,0,0,26752,26755,0,0,0,26756,26769,0,0,0,26774,0,0,
-0,0,0,26775,0,26777,26778,0,26786,0,0,0,26787,0,0,0,0,0,0,0,0,0,0,0,0,0,26788,0,
-0,26789,0,0,0,0,0,26791,0,26792,26793,0,0,0,26794,0,26797,26798,0,0,0,26800,0,0,
-26803,0,26804,0,0,0,0,0,0,0,0,0,26805,0,0,26808,0,0,26809,0,0,0,0,0,0,0,26812,0,
-26825,0,0,0,0,0,0,0,26826,0,0,26827,26829,26834,0,0,0,0,26835,0,0,26849,0,26851,
-0,0,0,0,0,0,0,0,0,26852,0,26853,26857,0,26858,0,26859,0,0,0,0,0,0,0,26876,0,
-26878,26882,26883,0,0,0,0,26890,26894,0,0,0,0,26895,26896,0,0,0,0,0,26900,0,0,0,
-0,0,0,0,26911,26913,26914,26915,26916,26919,0,0,0,26921,26922,0,0,26925,0,0,0,
-26928,0,0,26929,26930,0,0,0,26931,0,26932,0,0,0,0,0,26933,0,0,0,0,0,0,26937,0,0,
-26943,0,0,26944,0,0,0,26946,0,0,0,0,0,0,0,26956,0,26958,0,0,26963,0,0,0,0,0,0,0,
-26965,0,26969,26970,26972,0,0,0,0,0,26973,0,26974,0,26978,0,26980,0,0,0,0,0,0,
-26982,0,26986,26987,0,26990,0,0,0,0,27003,27006,0,0,27007,27010,27012,27013,0,0,
-0,0,0,0,0,0,27014,27015,27018,0,27019,0,0,0,0,0,27025,0,0,0,27026,0,0,0,0,27029,
-27030,27031,27034,0,0,27036,27037,0,0,0,27038,27042,0,0,0,27044,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,27045,0,0,0,0,0,0,0,27046,0,0,0,0,0,0,0,27047,27049,0,27050,0,0,0,
-27051,27052,0,27055,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,27056,27058,27059,0,
-27061,0,27064,0,0,0,0,0,27069,0,0,27070,0,0,0,0,0,0,0,27072,0,0,0,0,0,0,0,0,
-27076,0,0,0,0,0,27078,0,27079,0,0,0,27081,0,0,0,0,0,0,27082,0,27083,27086,0,0,0,
-0,27087,0,0,0,0,0,27088,27090,0,27094,0,0,27095,0,27099,27102,0,0,0,27103,0,0,0,
-0,27105,0,0,0,27106,0,0,0,0,0,0,27107,0,0,0,0,27108,27117,0,0,0,0,27118,0,0,
-27124,0,27126,0,0,27130,27131,0,0,0,0,0,0,27147,0,0,0,0,27148,27149,0,0,0,0,
-27150,27151,0,27152,0,27159,0,0,0,27164,0,0,0,0,0,0,0,27175,0,27189,0,0,27191,0,
-27193,0,27195,0,27198,0,0,0,0,0,27200,0,0,0,0,27202,0,0,0,0,27203,0,0,27204,0,0,
-27206,0,27207,0,0,0,0,27209,0,0,0,27213,0,0,27216,27219,27220,27222,27223,0,
-27224,0,27225,27226,0,0,27233,0,0,0,0,27235,0,27237,0,27238,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,27239,0,27242,27243,0,27250,0,0,0,27251,0,27253,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,27254,27255,27258,0,0,0,27259,0,0,0,0,0,0,27267,0,27276,27278,
-0,0,0,0,0,0,0,0,0,27296,27297,27301,0,0,0,0,0,0,27302,0,0,0,0,0,0,27312,27313,0,
-0,0,0,0,27318,0,27320,0,27329,0,27330,27331,0,27332,0,0,0,0,27340,0,0,0,27348,0,
-0,0,0,0,0,27350,0,27351,0,0,0,0,27355,0,0,27358,27359,27361,0,0,0,27365,0,27367,
-0,27376,27378,0,0,27379,0,0,0,0,0,0,27396,0,27397,27404,0,0,0,0,0,27408,0,0,0,0,
-27453,0,0,0,27456,0,0,0,27458,0,0,0,0,0,0,0,27459,0,0,0,27460,0,0,27461,0,27465,
-27467,0,0,27469,0,27470,0,27471,0,27477,27482,0,0,0,0,0,0,27484,0,0,0,0,0,0,
-27485,0,0,0,0,0,27493,0,27494,27502,0,0,0,0,0,0,0,0,0,0,0,0,27511,27532,0,0,0,
-27533,27545,0,0,0,27546,0,0,0,0,0,0,0,0,0,0,27547,0,0,27549,27550,0,27551,0,0,0,
-0,0,0,0,27555,0,0,27571,0,27573,27574,27575,27577,0,27578,0,0,27579,27585,0,0,0,
-0,0,27586,0,0,27588,27589,0,0,0,0,27596,0,0,27600,0,0,0,0,0,0,0,0,0,0,0,27608,0,
-0,0,0,0,0,0,0,0,0,0,27610,0,0,0,27618,0,0,27620,0,0,0,27631,0,0,27632,27634,0,
-27636,27638,0,0,0,27643,0,27644,27649,0,0,0,0,0,0,0,0,0,0,0,0,0,27651,27660,0,
-27661,0,0,0,0,0,0,0,27662,0,0,27664,0,27665,0,0,0,27669,0,27671,0,0,0,27673,
-27674,0,0,0,27682,0,0,0,27711,0,27712,27713,27719,27720,0,0,27728,0,27729,0,0,0,
-0,0,0,0,0,0,27731,0,0,27732,0,27733,0,27738,0,0,0,27742,0,0,0,27743,27744,0,0,0,
-0,0,0,27745,27746,0,0,0,27747,27748,27751,27752,0,0,0,27768,27770,0,0,0,27774,
-27775,0,27776,27777,0,0,27781,0,27784,0,27786,0,0,27791,0,27792,27793,27804,0,
-27812,27813,0,0,0,0,0,0,0,0,27814,0,27825,0,27827,0,0,0,0,27828,27861,27862,0,0,
-0,27864,0,0,0,27865,27884,0,27889,0,0,0,0,0,27890,0,27891,0,0,0,27892,0,0,0,0,0,
-27897,27898,0,0,27899,0,0,0,27901,27905,0,0,27920,0,0,27921,0,27922,0,0,0,27931,
-27934,0,0,0,0,0,0,0,0,0,0,27941,0,27942,0,27945,0,27947,27954,0,0,0,0,27960,
-27963,0,0,0,0,0,0,0,0,27964,27965,0,0,0,27967,0,27969,27975,0,27976,27977,0,
-27981,0,27983,28051,28052,0,0,0,0,0,28056,0,0,0,0,0,0,28058,28059,0,0,28061,0,0,
-0,0,0,0,0,28063,0,0,0,0,0,0,28066,0,0,0,0,0,0,28069,28070,28072,0,28073,0,0,
-28074,0,0,0,0,28075,0,0,0,0,0,0,0,28078,0,0,0,0,28085,0,0,0,0,28086,0,0,0,0,0,0,
-28088,0,0,0,0,0,0,0,0,28090,0,28097,28114,28115,0,0,0,0,0,0,0,28116,0,0,0,0,0,
-28118,0,28129,0,28131,0,0,28135,0,0,0,28140,28141,0,0,0,28146,0,0,0,0,28152,0,0,
-0,0,28155,28157,28161,0,0,0,0,28166,0,28167,0,0,0,0,0,0,0,0,0,0,0,28172,0,0,0,0,
-0,0,28173,0,0,28175,0,0,0,0,0,0,0,0,0,28178,28188,0,28190,0,0,0,0,0,28191,0,
-28193,28206,0,0,28207,28209,0,28211,0,28213,0,0,0,28215,28216,28217,0,28222,0,
-28223,28225,0,0,0,28226,0,28227,28229,28232,0,0,0,0,0,0,0,0,0,28235,0,28241,0,0,
-28242,0,0,0,0,28243,0,0,0,28245,0,0,0,28248,28250,0,28251,28252,0,0,0,0,0,0,
-28253,0,0,28254,28255,0,0,28256,0,0,28258,0,0,0,0,0,28259,0,0,28260,0,0,28261,0,
-0,0,0,28262,28263,0,0,28264,0,0,0,28266,0,28268,28269,0,28270,28272,28274,0,
-28277,28278,0,0,0,28279,0,28280,28281,28283,0,28292,0,28294,0,28297,0,0,0,0,
-28299,0,0,0,0,0,28300,0,0,0,0,0,0,0,28301,0,0,0,0,0,0,0,0,0,0,0,0,0,28302,28303,
-0,0,0,0,28304,0,0,28305,0,28312,0,28313,28314,0,0,0,0,0,0,28315,0,0,0,28320,
-28321,0,0,28328,0,0,0,28329,28338,0,28339,0,0,28344,0,0,0,0,0,0,0,0,28347,0,0,0,
-0,0,0,0,0,28348,0,0,0,0,0,28411,0,28412,28413,0,28416,0,0,0,28420,0,0,0,0,0,
-28421,0,0,0,0,28423,0,0,0,28424,0,0,28428,0,0,0,0,0,28429,0,0,0,28431,28434,0,
-28458,0,0,0,0,0,0,0,0,0,0,0,28464,0,0,0,0,28465,0,28467,0,0,0,0,0,0,28471,0,0,0,
-0,28474,0,28480,0,28481,0,0,28485,0,0,0,0,28486,28488,0,0,28489,0,0,0,0,28492,0,
-0,0,28495,0,28497,0,28499,0,0,0,0,28500,0,0,28502,28503,0,0,0,28508,0,0,0,28510,
-0,0,28512,28513,28514,28521,0,28526,0,28527,28528,0,0,0,0,28529,0,0,28532,0,0,
-28537,28538,0,0,0,28539,0,28548,0,28553,28554,0,0,0,0,0,0,0,0,0,0,0,0,28560,
-28563,0,0,28564,0,0,0,0,28565,0,0,0,0,0,0,0,28566,28568,0,0,0,0,0,0,28569,0,0,0,
-28570,0,28572,28573,0,0,0,0,28575,0,0,0,0,28576,28581,28588,0,0,28589,0,0,0,
-28590,28595,0,28598,0,0,28601,0,0,28605,0,0,0,0,28614,28615,28619,0,0,0,0,0,0,
-28620,0,28626,0,0,28628,0,28631,0,28632,0,0,0,0,0,0,28635,0,0,0,28637,28638,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,28639,0,28643,0,0,28652,0,0,0,28662,0,
-28670,28671,0,0,0,0,0,0,0,0,0,28672,28673,28675,28676,0,0,0,0,0,0,0,28691,0,0,0,
-28695,0,0,0,28696,0,28697,28698,0,28705,0,28707,28708,28710,0,0,0,0,0,0,0,28711,
-28728,0,0,0,28736,0,0,0,28737,0,0,0,0,0,0,0,0,0,28738,0,28739,0,28741,0,0,28742,
-0,0,0,0,0,0,0,0,0,0,0,28745,0,0,0,0,0,0,28749,28750,28752,28754,28756,0,28757,0,
-0,0,0,28759,28760,0,0,0,0,0,0,28762,0,0,0,28764,0,0,0,0,0,0,28766,0,28767,28768,
-0,0,0,0,28769,28770,0,0,0,0,0,0,0,0,0,0,0,0,0,28771,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,28772,0,28773,0,28782,0,0,0,0,0,0,28784,0,28785,0,28786,0,0,0,28787,0,0,0,
-28797,0,0,0,0,0,0,28799,0,0,28801,0,0,0,0,28802,0,28805,0,0,28806,0,0,28807,0,0,
-0,0,0,0,0,28808,0,0,0,0,0,28810,28812,0,0,28816,28819,0,0,28821,0,28826,0,0,0,
-28842,28852,0,0,28853,0,28854,28855,0,0,0,28857,0,0,0,28858,0,28867,28868,28869,
-0,0,0,28874,28880,28882,28890,28892,0,0,0,0,0,0,0,28895,0,0,0,28898,28899,0,0,0,
-28900,0,0,28904,0,28906,0,0,0,0,28907,0,0,0,0,0,0,28908,0,0,0,28910,0,28914,0,0,
-0,0,0,0,0,28915,28916,28919,0,0,28920,0,28921,0,0,0,0,0,0,0,0,28924,0,0,0,0,
-28926,28929,0,0,0,28930,0,28936,0,28939,0,0,0,0,28942,0,0,0,0,0,0,28956,0,0,0,
-28966,0,0,0,0,28967,0,0,0,0,0,0,0,0,0,28968,0,28971,0,28975,28976,0,28982,28983,
-0,0,28984,28989,28996,28997,28998,0,0,0,0,0,0,28999,0,0,0,0,0,29000,0,29001,0,0,
-0,29009,0,0,29011,0,0,29021,0,0,0,0,29024,0,29025,0,0,0,0,0,29026,0,0,0,29036,0,
-0,0,29037,0,0,0,0,29038,0,29045,0,29047,0,0,0,0,0,0,0,0,0,29051,0,0,0,29054,
-29056,29062,0,29070,29082,0,0,0,29083,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,29084,0,0,
-0,0,29085,29088,0,0,0,0,0,0,0,29090,29097,0,0,0,29103,0,0,0,0,0,0,0,0,29105,0,0,
-0,0,0,29107,0,29109,0,0,0,29115,0,0,29120,0,0,29138,29140,0,0,0,0,0,0,0,0,0,
-29152,0,29160,29174,0,29176,0,0,29180,0,29181,0,0,0,0,0,0,0,0,29228,0,0,29229,0,
-0,29230,0,0,0,0,0,0,0,0,0,0,29234,0,0,0,29241,0,29245,0,29248,0,29250,29256,
-29280,0,29282,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,29285,0,0,29286,29291,29292,0,0,0,0,
-29294,0,29295,0,0,0,0,0,29296,29297,29298,29300,0,29302,0,0,29304,29307,0,29312,
-0,0,0,29322,0,0,29323,0,0,29324,29326,29328,0,29335,0,0,0,0,0,0,0,29338,29339,0,
-0,0,0,0,29341,29343,0,0,0,0,29344,0,0,0,0,0,29345,0,0,0,0,29346,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,29347,29348,29349,0,0,29354,0,0,29355,0,0,0,0,0,0,0,0,29357,0,0,
-0,0,29364,0,29365,0,0,0,0,0,0,0,29366,0,0,29368,0,0,0,0,0,0,0,0,29378,0,29381,0,
-0,0,0,0,0,0,0,29386,0,0,0,0,0,0,29389,0,0,0,29390,0,0,29391,29397,0,29398,29412,
-29414,29418,29419,0,0,0,0,0,0,0,29420,0,0,0,0,0,0,0,29423,0,0,0,29435,0,0,0,
-29437,0,0,29439,0,29441,0,0,0,0,29443,0,29446,29450,29452,0,0,0,0,0,29456,0,0,0,
-0,0,29461,0,0,0,29464,0,0,0,0,0,0,0,0,29468,0,29473,0,0,0,29486,0,0,0,29490,0,0,
-0,29491,29492,0,0,29497,0,0,0,29498,0,29499,0,29502,29505,0,29509,0,0,0,29510,0,
-0,0,29512,0,0,0,29516,0,0,0,0,0,0,0,0,29518,0,29519,0,0,0,0,0,29520,29521,29529,
-0,0,0,0,0,0,0,0,29530,0,0,29531,29538,0,29540,0,0,0,29542,0,29543,29544,29547,0,
-0,29548,0,0,0,29549,0,0,0,29550,0,0,29552,0,0,0,0,29558,29561,0,29562,29564,0,0,
-29565,0,0,29566,0,0,0,0,0,0,0,0,0,0,29578,29584,29586,29591,0,0,0,0,29593,29594,
-0,0,29597,0,0,29613,0,29614,0,29615,0,0,0,0,29616,29617,0,0,29625,0,0,0,29632,0,
-0,0,0,0,0,0,29633,0,0,0,0,0,29634,29635,29637,0,29638,0,29641,29643,0,0,0,0,0,0,
-29644,0,29645,0,29649,0,0,0,29650,0,29653,0,0,0,0,0,0,0,0,0,0,0,0,0,0,29656,
-29659,0,0,29660,0,0,0,29661,0,0,0,0,0,29664,0,0,0,29671,29673,0,0,0,0,0,0,0,
-29675,0,29677,29679,0,0,29684,0,0,0,0,0,29685,0,0,0,29687,0,0,0,29688,0,29689,
-29690,29700,0,29701,0,0,0,29702,0,29706,0,0,0,0,0,0,0,29720,0,29721,0,29727,0,
-29733,29734,0,29750,29761,0,29763,0,0,0,0,0,29764,0,0,29765,0,0,0,29771,0,0,0,0,
-0,0,0,0,0,0,0,0,29772,0,0,0,29773,29774,29775,0,0,0,0,0,0,0,0,0,0,0,29822,0,0,0,
-29824,0,29825,0,0,0,0,0,29827,0,0,0,0,0,0,0,0,29829,0,29832,29834,0,0,29835,0,0,
-29837,29838,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,29843,0,0,0,0,29844,29845,0,0,0,
-0,0,0,0,0,0,29849,0,0,29869,29872,29890,29905,0,0,0,0,0,29907,29921,0,29922,0,0,
-29923,29926,29944,29946,0,0,0,0,0,0,0,29947,29948,0,0,0,29951,0,0,0,0,0,29953,0,
-0,29956,0,29957,0,0,29962,0,0,0,0,29971,0,0,0,29972,0,0,0,0,0,29978,0,29979,
-29992,30007,30008,30010,0,0,0,30013,0,0,0,0,30014,30016,0,0,0,0,0,0,0,0,0,0,0,
-30017,0,0,0,0,0,30023,30031,0,0,30033,0,0,0,0,0,0,0,0,0,0,30034,0,30038,0,30039,
-0,30040,0,0,0,0,0,0,30067,30068,0,0,0,30069,0,30072,0,0,0,30073,0,0,0,0,30075,0,
-0,0,0,0,0,30079,0,0,30080,0,0,0,0,0,30082,0,0,0,0,0,0,0,0,0,0,0,30084,30090,0,0,
-30091,0,0,0,0,30098,30118,0,30119,0,30121,30130,0,0,0,0,0,0,0,0,0,0,0,0,0,30131,
-30132,30133,0,0,0,0,0,0,30135,0,0,0,0,0,0,0,0,0,0,0,30136,0,0,30137,30138,0,0,0,
-30139,30146,0,0,0,0,0,30147,0,0,30148,30151,0,0,0,30168,0,30172,30173,0,0,0,0,0,
-0,0,0,30180,30181,0,30192,0,0,0,0,0,0,0,30194,30196,0,0,30199,0,0,30202,0,0,0,0,
-30203,0,0,0,0,0,0,0,0,0,0,30213,0,0,0,30216,0,0,30217,0,0,0,30218,0,0,0,0,30219,
-0,30220,0,30222,30227,0,0,0,0,0,30231,0,0,30233,30235,0,0,0,0,30238,0,30240,
-30243,30245,0,30250,30252,0,0,0,30269,0,0,30271,30272,0,0,0,30278,30280,0,0,
-30282,0,30284,0,30294,0,0,0,0,30295,30296,0,0,0,0,0,30298,30299,30302,30304,
-30306,0,0,0,0,0,0,30316,30317,0,0,0,30318,0,0,0,30319,0,30320,30322,30326,0,0,0,
-0,0,30327,0,30332,30348,30349,0,0,30356,0,0,0,0,0,0,0,0,30357,0,30358,0,30359,
-30360,0,0,30365,30366,30378,0,0,0,0,30379,0,0,30381,0,30385,0,30388,30397,0,0,0,
-30401,0,0,0,0,30403,0,0,0,0,0,30404,0,0,30405,0,30406,30408,0,30409,0,30410,0,0,
-0,30417,0,0,30418,30419,0,30420,0,30424,0,0,0,30427,30430,30432,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,30433,0,0,0,0,0,0,0,30436,0,30437,30438,0,30441,30442,0,0,
-0,30445,0,0,0,0,30452,30456,30457,0,0,0,30458,0,30464,0,0,0,0,0,0,30467,0,30469,
-0,0,0,0,0,30477,0,0,30484,0,0,0,0,0,30485,0,0,0,0,0,30486,30487,30497,30498,0,0,
-0,0,0,0,0,0,0,0,30505,0,30508,0,0,0,30509,30510,0,30514,30516,0,0,0,0,0,0,0,0,0,
-0,0,30523,0,30524,0,30525,0,0,0,0,30537,0,0,30538,0,0,0,0,0,30553,0,0,30555,
-30556,30558,30559,30560,0,0,30561,0,30562,0,0,0,0,0,0,0,0,30563,30570,30571,0,
-30586,30587,0,0,30590,0,0,30594,0,0,0,0,30611,30612,30623,30634,0,0,30636,30640,
-30655,30656,0,30657,0,0,30658,30669,0,30670,0,30676,30678,0,0,0,0,0,0,0,30679,0,
-0,0,0,0,0,0,0,0,0,0,30695,0,0,30698,0,0,0,0,30700,0,0,0,0,30701,0,30702,30703,0,
-0,0,0,30707,0,0,0,30709,0,0,30710,30719,30729,0,0,0,0,0,0,0,0,0,30731,0,0,30733,
-0,0,0,30734,0,0,0,0,0,30736,30737,0,0,0,30740,0,0,0,30743,0,30746,0,30747,30748,
-0,0,30751,30752,30753,0,0,0,30754,0,0,30760,0,0,0,0,0,0,0,30763,0,30764,0,0,
-30766,0,30769,30770,30771,30774,30777,0,0,30779,30780,30781,0,0,0,0,30790,0,0,0,
-30792,0,0,0,0,30810,0,0,0,0,0,0,0,30812,30819,0,0,30823,30824,0,30825,0,30827,0,
-0,0,0,0,0,30828,0,0,30830,0,0,0,30834,0,30835,0,30837,30838,0,30845,0,0,0,0,0,
-30846,30847,0,0,30849,0,30851,0,0,0,0,0,30852,30858,0,0,30859,0,30865,0,0,30866,
-0,0,30868,0,0,30869,0,0,0,30881,30883,0,0,0,0,0,30889,0,30891,0,0,0,0,30894,0,
-30895,0,30897,0,30898,0,0,0,30904,30906,0,30909,0,0,0,0,0,0,30910,0,0,0,30915,
-30933,30942,0,0,0,0,30943,0,0,30945,0,0,0,0,0,0,30946,0,0,30947,0,0,30955,30956,
-0,0,30960,0,0,30961,30962,30966,0,0,30969,30974,0,0,0,30976,0,0,30977,0,30978,
-30982,0,0,0,0,0,0,0,30994,30995,30998,0,31000,0,0,31001,0,0,31003,31005,0,0,
-31006,31011,0,0,31014,0,31016,0,0,0,0,31018,0,0,31020,31023,31024,31025,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,31027,31028,31029,0,0,0,0,0,0,31032,0,0,0,0,0,0,0,0,0,0,0,
-31036,31037,31038,0,0,0,31041,31043,31045,0,31047,0,0,0,31048,0,31049,0,0,0,
-31053,31054,31055,0,0,31063,0,0,0,0,0,31066,0,31068,31071,0,0,0,31072,31073,0,0,
-0,0,31075,0,0,31076,0,0,0,31077,31079,0,31080,0,0,0,0,0,0,0,0,0,0,31087,0,31142,
-0,31144,0,0,31145,31146,31147,0,0,0,0,0,0,0,0,0,0,0,0,0,0,31149,0,31151,31152,0,
-0,0,0,0,0,0,31162,31171,31174,31175,0,0,0,31176,0,0,0,0,0,0,0,31179,0,0,0,31186,
-0,0,0,31192,31195,0,0,31196,0,0,0,0,0,0,0,0,31198,0,0,0,0,0,31199,0,0,0,31205,0,
-0,0,0,31211,31215,0,0,0,0,31231,0,31232,0,0,0,0,0,0,0,0,0,0,31233,31236,31253,0,
-31254,0,0,0,0,0,0,31255,0,0,31257,0,0,0,0,0,0,0,0,0,31258,31259,0,0,31260,0,
-31261,0,0,0,0,0,31262,31263,0,0,31264,0,31266,0,31267,0,0,0,0,0,31281,0,31282,0,
-31284,0,0,31285,31287,31288,0,0,31290,0,0,0,31292,31295,0,31299,0,31300,0,0,0,0,
-0,31302,0,0,0,0,31303,0,0,0,0,0,0,31304,0,0,0,0,0,31305,31308,31309,31315,0,
-31317,0,0,0,0,0,31323,0,31324,0,0,0,0,0,31325,31327,0,0,31331,0,0,0,0,0,31333,0,
-0,0,0,0,31336,0,0,31337,0,0,0,0,0,0,31338,0,0,0,0,0,0,0,0,0,0,0,0,31339,0,0,0,0,
-0,0,0,31342,0,0,0,0,31345,0,0,0,0,0,0,0,0,31347,0,0,0,0,0,0,31348,0,0,31350,
-31351,0,31352,0,0,31354,0,0,0,0,31355,0,0,31356,0,0,0,0,0,0,0,0,0,0,31363,0,
-31372,0,0,31373,0,0,0,0,0,0,0,0,0,31376,0,31388,0,31389,0,31392,0,31401,0,31405,
-31407,31408,0,31409,0,0,0,0,0,0,31413,31415,0,0,0,31416,31418,0,0,0,0,0,0,31422,
-31423,0,0,31424,0,31425,31432,0,0,0,0,0,0,0,0,0,31433,0,0,0,0,0,0,0,0,31434,0,0,
-0,0,0,0,31435,0,0,0,0,31438,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,31442,0,31444,0,
-31448,0,0,31451,0,0,0,0,31452,0,31461,31465,0,0,31466,0,0,31467,0,0,31468,0,0,0,
-31469,31473,0,31476,0,0,0,0,31489,31490,0,0,0,0,0,0,0,31492,31493,31494,0,0,0,0,
-31501,31504,31505,0,0,0,0,0,0,0,0,0,31509,0,0,0,0,31510,0,0,31511,0,0,31513,0,0,
-0,0,0,0,0,0,0,31514,0,31522,31536,31539,31540,0,31541,0,0,0,0,0,0,31546,31553,
-31559,0,0,0,31560,31561,31562,0,0,31564,31567,0,31569,0,0,0,31570,0,0,0,0,31571,
-0,0,0,0,0,0,31572,31574,31580,31581,0,0,31582,31584,31585,31586,31595,0,31596,0,
-0,0,0,31597,0,31599,0,31600,31601,0,0,31603,31604,0,0,31608,31610,0,0,0,31611,0,
-31615,0,0,0,0,31616,0,0,0,0,0,0,31617,0,0,0,0,0,31618,0,0,0,0,0,0,31621,0,0,0,0,
-0,0,0,0,0,31622,31625,0,0,0,0,31627,0,31641,0,0,31642,0,0,31643,0,0,0,0,0,0,0,0,
-0,31644,0,31646,0,0,0,0,31648,0,0,0,31652,0,0,0,31657,0,0,31676,0,0,0,0,0,0,0,
-31689,31691,31692,0,31694,0,0,0,31696,0,31702,0,31703,0};
-
-static const DictWord kStaticDictionaryWords[31705] = {
-{0,0,0},{8,0,1002},{136,0,1015},{4,0,683},{4,10,325},{138,10,125},{7,11,572},{9,
-11,592},{11,11,680},{11,11,842},{11,11,924},{12,11,356},{12,11,550},{13,11,317},
-{13,11,370},{13,11,469},{13,11,471},{14,11,397},{18,11,69},{146,11,145},{134,0,
-1265},{136,11,534},{134,0,1431},{11,0,138},{140,0,40},{4,0,155},{7,0,1689},{4,10
-,718},{135,10,1216},{4,0,245},{5,0,151},{5,0,741},{6,0,1147},{7,0,498},{7,0,870}
-,{7,0,1542},{12,0,213},{14,0,36},{14,0,391},{17,0,111},{18,0,6},{18,0,46},{18,0,
-151},{19,0,36},{20,0,32},{20,0,56},{20,0,69},{20,0,102},{21,0,4},{22,0,8},{22,0,
-10},{22,0,14},{150,0,31},{4,0,624},{135,0,1752},{5,10,124},{5,10,144},{6,10,548}
-,{7,10,15},{7,10,153},{137,10,629},{6,0,503},{9,0,586},{13,0,468},{14,0,66},{16,
-0,58},{7,10,1531},{8,10,416},{9,10,275},{10,10,100},{11,10,658},{11,10,979},{12,
-10,86},{14,10,207},{15,10,20},{143,10,25},{5,0,603},{7,0,1212},{9,0,565},{14,0,
-301},{5,10,915},{6,10,1783},{7,10,211},{7,10,1353},{9,10,83},{10,10,376},{10,10,
-431},{11,10,543},{12,10,664},{13,10,280},{13,10,428},{14,10,128},{17,10,52},{145
-,10,81},{4,0,492},{133,0,451},{135,0,835},{141,0,70},{132,0,539},{7,11,748},{139
-,11,700},{7,11,1517},{11,11,597},{14,11,76},{14,11,335},{148,11,33},{6,0,113},{
-135,0,436},{4,10,338},{133,10,400},{136,0,718},{133,11,127},{133,11,418},{6,0,
-1505},{7,0,520},{6,11,198},{11,10,892},{140,11,83},{4,10,221},{5,10,659},{5,10,
-989},{7,10,697},{7,10,1211},{138,10,284},{135,0,1070},{5,11,276},{6,11,55},{135,
-11,1369},{134,0,1515},{6,11,1752},{136,11,726},{138,10,507},{15,0,78},{4,10,188}
-,{135,10,805},{5,10,884},{139,10,991},{133,11,764},{134,10,1653},{6,11,309},{7,
-11,331},{138,11,550},{135,11,1861},{132,11,348},{135,11,986},{135,11,1573},{12,0
-,610},{13,0,431},{144,0,59},{9,11,799},{140,10,166},{134,0,1530},{132,0,750},{
-132,0,307},{133,0,964},{6,11,194},{7,11,133},{10,11,493},{10,11,570},{139,11,664
-},{5,11,24},{5,11,569},{6,11,3},{6,11,119},{6,11,143},{6,11,440},{7,11,295},{7,
-11,599},{7,11,1686},{7,11,1854},{8,11,424},{9,11,43},{9,11,584},{9,11,760},{10,
-11,148},{10,11,328},{11,11,159},{11,11,253},{11,11,506},{12,11,487},{12,11,531},
-{144,11,33},{136,10,760},{5,11,14},{5,11,892},{6,11,283},{7,11,234},{136,11,537}
-,{135,11,1251},{4,11,126},{8,11,635},{147,11,34},{4,11,316},{135,11,1561},{6,0,
-999},{6,0,1310},{137,11,861},{4,11,64},{5,11,352},{5,11,720},{6,11,368},{139,11,
-359},{4,0,75},{5,0,180},{6,0,500},{7,0,58},{7,0,710},{10,0,645},{136,10,770},{
-133,0,649},{6,0,276},{7,0,282},{7,0,879},{7,0,924},{8,0,459},{9,0,599},{9,0,754}
-,{11,0,574},{12,0,128},{12,0,494},{13,0,52},{13,0,301},{15,0,30},{143,0,132},{
-132,0,200},{4,10,89},{5,10,489},{6,10,315},{7,10,553},{7,10,1745},{138,10,243},{
-135,11,1050},{7,0,1621},{6,10,1658},{9,10,3},{10,10,154},{11,10,641},{13,10,85},
-{13,10,201},{141,10,346},{6,11,175},{137,11,289},{5,11,432},{133,11,913},{6,0,
-225},{137,0,211},{7,0,718},{8,0,687},{139,0,374},{4,10,166},{133,10,505},{9,0,
-110},{134,10,1670},{8,0,58},{9,0,724},{11,0,809},{13,0,113},{145,0,72},{6,0,345}
-,{7,0,1247},{144,11,82},{5,11,931},{134,11,1698},{8,0,767},{8,0,803},{9,0,301},{
-137,0,903},{139,0,203},{134,0,1154},{7,0,1949},{136,0,674},{134,0,259},{135,0,
-1275},{5,11,774},{6,11,1637},{6,11,1686},{134,11,1751},{134,0,1231},{7,10,445},{
-8,10,307},{8,10,704},{10,10,41},{10,10,439},{11,10,237},{11,10,622},{140,10,201}
-,{136,0,254},{6,11,260},{135,11,1484},{139,0,277},{135,10,1977},{4,10,189},{5,10
-,713},{6,11,573},{136,10,57},{138,10,371},{132,10,552},{134,11,344},{133,0,248},
-{9,0,800},{10,0,693},{11,0,482},{11,0,734},{11,0,789},{134,11,240},{4,0,116},{5,
-0,95},{5,0,445},{7,0,1688},{8,0,29},{9,0,272},{11,0,509},{11,0,915},{4,11,292},{
-4,11,736},{5,11,871},{6,11,171},{6,11,1689},{7,11,1324},{7,11,1944},{9,11,415},{
-9,11,580},{14,11,230},{146,11,68},{7,0,490},{13,0,100},{143,0,75},{135,0,1641},{
-133,0,543},{7,11,209},{8,11,661},{10,11,42},{11,11,58},{12,11,58},{12,11,118},{
-141,11,32},{5,0,181},{8,0,41},{6,11,63},{135,11,920},{133,0,657},{133,11,793},{
-138,0,709},{7,0,25},{8,0,202},{138,0,536},{5,11,665},{135,10,1788},{145,10,49},{
-9,0,423},{140,0,89},{5,11,67},{6,11,62},{6,11,374},{135,11,1391},{8,0,113},{9,0,
-877},{10,0,554},{11,0,83},{12,0,136},{19,0,109},{9,11,790},{140,11,47},{138,10,
-661},{4,0,963},{10,0,927},{14,0,442},{135,10,1945},{133,0,976},{132,0,206},{4,11
-,391},{135,11,1169},{134,0,2002},{6,0,696},{134,0,1008},{134,0,1170},{132,11,271
-},{7,0,13},{8,0,226},{10,0,537},{11,0,570},{11,0,605},{11,0,799},{11,0,804},{12,
-0,85},{12,0,516},{12,0,623},{13,0,112},{13,0,361},{14,0,77},{14,0,78},{17,0,28},
-{19,0,110},{140,11,314},{132,0,769},{134,0,1544},{4,0,551},{137,0,678},{5,10,84}
-,{134,10,163},{9,0,57},{9,0,459},{10,0,425},{11,0,119},{12,0,184},{12,0,371},{13
-,0,358},{145,0,51},{5,0,188},{5,0,814},{8,0,10},{9,0,421},{9,0,729},{10,0,609},{
-11,0,689},{4,11,253},{5,10,410},{5,11,544},{7,11,300},{137,11,340},{134,0,624},{
-138,11,321},{135,0,1941},{18,0,130},{5,10,322},{8,10,186},{9,10,262},{10,10,187}
-,{142,10,208},{5,11,53},{5,11,541},{6,11,94},{6,11,499},{7,11,230},{139,11,321},
-{133,10,227},{4,0,378},{4,11,920},{5,11,25},{5,11,790},{6,11,457},{135,11,853},{
-137,0,269},{132,0,528},{134,0,1146},{7,10,1395},{8,10,486},{9,10,236},{9,10,878}
-,{10,10,218},{11,10,95},{19,10,17},{147,10,31},{7,10,2043},{8,10,672},{141,10,
-448},{134,0,1105},{134,0,1616},{134,11,1765},{140,11,163},{5,10,412},{133,11,822
-},{132,11,634},{6,0,656},{134,11,1730},{134,0,1940},{5,0,104},{6,0,173},{135,0,
-1631},{136,10,562},{6,11,36},{7,11,658},{8,11,454},{147,11,86},{5,0,457},{134,10
-,1771},{7,0,810},{8,0,138},{8,0,342},{9,0,84},{10,0,193},{11,0,883},{140,0,359},
-{9,0,620},{135,10,1190},{137,10,132},{7,11,975},{137,11,789},{6,0,95},{6,0,1934}
-,{136,0,967},{141,11,335},{6,0,406},{10,0,409},{10,0,447},{11,0,44},{140,0,100},
-{4,10,317},{135,10,1279},{132,0,477},{134,0,1268},{6,0,1941},{8,0,944},{5,10,63}
-,{133,10,509},{132,0,629},{132,11,104},{4,0,246},{133,0,375},{6,0,1636},{132,10,
-288},{135,11,1614},{9,0,49},{10,0,774},{8,10,89},{8,10,620},{11,10,628},{12,10,
-322},{143,10,124},{4,0,282},{7,0,1034},{11,0,398},{11,0,634},{12,0,1},{12,0,79},
-{12,0,544},{14,0,237},{17,0,10},{146,0,20},{132,0,824},{7,11,45},{9,11,542},{9,
-11,566},{138,11,728},{5,0,118},{5,0,499},{6,0,476},{6,0,665},{6,0,1176},{6,0,
-1196},{7,0,600},{7,0,888},{135,0,1096},{7,0,296},{7,0,596},{8,0,560},{8,0,586},{
-9,0,612},{11,0,304},{12,0,46},{13,0,89},{14,0,112},{145,0,122},{5,0,894},{6,0,
-1772},{9,0,1009},{138,10,120},{5,11,533},{7,11,755},{138,11,780},{151,10,1},{6,0
-,1474},{7,11,87},{142,11,288},{139,0,366},{137,10,461},{7,11,988},{7,11,1939},{9
-,11,64},{9,11,502},{12,11,7},{12,11,34},{13,11,12},{13,11,234},{147,11,77},{7,0,
-1599},{7,0,1723},{8,0,79},{8,0,106},{8,0,190},{8,0,302},{8,0,383},{8,0,713},{9,0
-,119},{9,0,233},{9,0,419},{9,0,471},{10,0,181},{10,0,406},{11,0,57},{11,0,85},{
-11,0,120},{11,0,177},{11,0,296},{11,0,382},{11,0,454},{11,0,758},{11,0,999},{12,
-0,27},{12,0,98},{12,0,131},{12,0,245},{12,0,312},{12,0,446},{12,0,454},{13,0,25}
-,{13,0,98},{13,0,426},{13,0,508},{14,0,70},{14,0,163},{14,0,272},{14,0,277},{14,
-0,370},{15,0,95},{15,0,138},{15,0,167},{17,0,38},{148,0,96},{135,10,1346},{10,0,
-200},{19,0,2},{151,0,22},{135,11,141},{134,10,85},{134,0,1759},{138,0,372},{145,
-0,16},{8,0,943},{132,11,619},{139,11,88},{5,11,246},{8,11,189},{9,11,355},{9,11,
-512},{10,11,124},{10,11,453},{11,11,143},{11,11,416},{11,11,859},{141,11,341},{5
-,0,258},{134,0,719},{6,0,1798},{6,0,1839},{8,0,900},{10,0,874},{10,0,886},{12,0,
-698},{12,0,732},{12,0,770},{16,0,106},{18,0,163},{18,0,170},{18,0,171},{152,0,20
-},{9,0,707},{11,0,326},{11,0,339},{12,0,423},{12,0,502},{20,0,62},{9,11,707},{11
-,11,326},{11,11,339},{12,11,423},{12,11,502},{148,11,62},{5,0,30},{7,0,495},{8,0
-,134},{9,0,788},{140,0,438},{133,11,678},{5,10,279},{6,10,235},{7,10,468},{8,10,
-446},{9,10,637},{10,10,717},{11,10,738},{140,10,514},{5,11,35},{6,11,287},{7,11,
-862},{7,11,1886},{138,11,179},{7,0,1948},{7,0,2004},{132,11,517},{5,10,17},{6,10
-,371},{137,10,528},{4,0,115},{5,0,669},{6,0,407},{8,0,311},{11,0,10},{141,0,5},{
-137,0,381},{5,0,50},{6,0,439},{7,0,780},{135,0,1040},{136,11,667},{11,11,403},{
-146,11,83},{5,0,1},{6,0,81},{138,0,520},{134,0,738},{5,0,482},{8,0,98},{9,0,172}
-,{10,0,360},{10,0,700},{10,0,822},{11,0,302},{11,0,778},{12,0,50},{12,0,127},{12
-,0,396},{13,0,62},{13,0,328},{14,0,122},{147,0,72},{9,11,157},{10,11,131},{140,
-11,72},{135,11,714},{135,11,539},{5,0,2},{6,0,512},{7,0,797},{7,0,1494},{8,0,253
-},{8,0,589},{9,0,77},{10,0,1},{10,0,129},{10,0,225},{11,0,118},{11,0,226},{11,0,
-251},{11,0,430},{11,0,701},{11,0,974},{11,0,982},{12,0,64},{12,0,260},{12,0,488}
-,{140,0,690},{5,11,394},{7,11,367},{7,11,487},{7,11,857},{7,11,1713},{8,11,246},
-{9,11,537},{10,11,165},{12,11,219},{140,11,561},{136,0,557},{5,10,779},{5,10,807
-},{6,10,1655},{134,10,1676},{4,10,196},{5,10,558},{133,10,949},{11,11,827},{12,
-11,56},{14,11,34},{143,11,148},{137,0,347},{133,0,572},{134,0,832},{4,0,12},{7,0
-,504},{7,0,522},{7,0,809},{8,0,797},{141,0,88},{4,10,752},{133,11,449},{7,11,86}
-,{8,11,103},{145,11,69},{7,11,2028},{138,11,641},{5,0,528},{6,11,1},{142,11,2},{
-134,0,861},{10,0,294},{4,10,227},{5,10,159},{5,10,409},{7,10,80},{10,10,479},{12
-,10,418},{14,10,50},{14,10,249},{142,10,295},{7,10,1470},{8,10,66},{8,10,137},{8
-,10,761},{9,10,638},{11,10,80},{11,10,212},{11,10,368},{11,10,418},{12,10,8},{13
-,10,15},{16,10,61},{17,10,59},{19,10,28},{148,10,84},{20,0,109},{135,11,1148},{6
-,11,277},{7,11,1274},{7,11,1386},{7,11,1392},{12,11,129},{146,11,87},{6,11,187},
-{7,11,39},{7,11,1203},{8,11,380},{8,11,542},{14,11,117},{149,11,28},{134,0,1187}
-,{5,0,266},{9,0,290},{9,0,364},{10,0,293},{11,0,606},{142,0,45},{6,11,297},{7,11
-,793},{139,11,938},{4,0,50},{6,0,594},{9,0,121},{10,0,49},{10,0,412},{139,0,834}
-,{136,0,748},{7,11,464},{8,11,438},{11,11,105},{11,11,363},{12,11,231},{14,11,
-386},{15,11,102},{148,11,75},{132,0,466},{13,0,399},{14,0,337},{6,10,38},{7,10,
-1220},{8,10,185},{8,10,256},{9,10,22},{9,10,331},{10,10,738},{11,10,205},{11,10,
-540},{11,10,746},{13,10,465},{142,10,194},{9,0,378},{141,0,162},{137,0,519},{4,
-10,159},{6,10,115},{7,10,252},{7,10,257},{7,10,1928},{8,10,69},{9,10,384},{10,10
-,91},{10,10,615},{12,10,375},{14,10,235},{18,10,117},{147,10,123},{5,11,604},{5,
-10,911},{136,10,278},{132,0,667},{8,0,351},{9,0,322},{4,10,151},{135,10,1567},{
-134,0,902},{133,10,990},{12,0,180},{5,10,194},{7,10,1662},{137,10,90},{4,0,869},
-{134,0,1996},{134,0,813},{133,10,425},{137,11,761},{132,0,260},{133,10,971},{5,
-11,20},{6,11,298},{7,11,659},{7,11,1366},{137,11,219},{4,0,39},{5,0,36},{7,0,
-1843},{8,0,407},{11,0,144},{140,0,523},{4,0,510},{10,0,587},{139,10,752},{7,0,29
-},{7,0,66},{7,0,1980},{10,0,487},{138,0,809},{13,0,260},{14,0,82},{18,0,63},{137
-,10,662},{5,10,72},{6,10,264},{7,10,21},{7,10,46},{7,10,2013},{8,10,215},{8,10,
-513},{10,10,266},{139,10,22},{134,0,570},{6,0,565},{7,0,1667},{4,11,439},{10,10,
-95},{11,10,603},{12,11,242},{13,10,443},{14,10,160},{143,10,4},{134,0,1464},{134
-,10,431},{9,0,372},{15,0,2},{19,0,10},{19,0,18},{5,10,874},{6,10,1677},{143,10,0
-},{132,0,787},{6,0,380},{12,0,399},{21,0,19},{7,10,939},{7,10,1172},{7,10,1671},
-{9,10,540},{10,10,696},{11,10,265},{11,10,732},{11,10,928},{11,10,937},{141,10,
-438},{137,0,200},{132,11,233},{132,0,516},{134,11,577},{132,0,844},{11,0,887},{
-14,0,365},{142,0,375},{132,11,482},{8,0,821},{140,0,44},{7,0,1655},{136,0,305},{
-5,10,682},{135,10,1887},{135,11,346},{132,10,696},{4,0,10},{7,0,917},{139,0,786}
-,{5,11,795},{6,11,1741},{8,11,417},{137,11,782},{4,0,1016},{134,0,2031},{5,0,684
-},{4,10,726},{133,10,630},{6,0,1021},{134,0,1480},{8,10,802},{136,10,838},{134,0
-,27},{134,0,395},{135,11,622},{7,11,625},{135,11,1750},{4,11,203},{135,11,1936},
-{6,10,118},{7,10,215},{7,10,1521},{140,10,11},{132,0,813},{136,0,511},{7,10,615}
-,{138,10,251},{135,10,1044},{145,0,56},{133,10,225},{6,0,342},{6,0,496},{8,0,275
-},{137,0,206},{4,0,909},{133,0,940},{132,0,891},{7,11,311},{9,11,308},{140,11,
-255},{4,10,370},{5,10,756},{135,10,1326},{4,0,687},{134,0,1596},{134,0,1342},{6,
-10,1662},{7,10,48},{8,10,771},{10,10,116},{13,10,104},{14,10,105},{14,10,184},{
-15,10,168},{19,10,92},{148,10,68},{138,10,209},{4,11,400},{5,11,267},{135,11,232
-},{151,11,12},{6,0,41},{141,0,160},{141,11,314},{134,0,1718},{136,0,778},{142,11
-,261},{134,0,1610},{133,0,115},{132,0,294},{14,0,314},{132,10,120},{132,0,983},{
-5,0,193},{140,0,178},{138,10,429},{5,10,820},{135,10,931},{6,0,994},{6,0,1051},{
-6,0,1439},{7,0,174},{133,11,732},{4,11,100},{7,11,679},{8,11,313},{138,10,199},{
-6,10,151},{6,10,1675},{7,10,383},{151,10,10},{6,0,1796},{8,0,848},{8,0,867},{8,0
-,907},{10,0,855},{140,0,703},{140,0,221},{4,0,122},{5,0,796},{5,0,952},{6,0,1660
-},{6,0,1671},{8,0,567},{9,0,687},{9,0,742},{10,0,686},{11,0,682},{11,0,909},{140
-,0,281},{5,11,362},{5,11,443},{6,11,318},{7,11,1019},{139,11,623},{5,11,463},{
-136,11,296},{11,0,583},{13,0,262},{6,10,1624},{12,10,422},{142,10,360},{5,0,179}
-,{7,0,1095},{135,0,1213},{4,10,43},{4,11,454},{5,10,344},{133,10,357},{4,0,66},{
-7,0,722},{135,0,904},{134,0,773},{7,0,352},{133,10,888},{5,11,48},{5,11,404},{6,
-11,557},{7,11,458},{8,11,597},{10,11,455},{10,11,606},{11,11,49},{11,11,548},{12
-,11,476},{13,11,18},{141,11,450},{134,11,418},{132,10,711},{5,11,442},{135,11,
-1984},{141,0,35},{137,0,152},{134,0,1197},{135,11,1093},{137,11,203},{137,10,440
-},{10,0,592},{10,0,753},{12,0,317},{12,0,355},{12,0,465},{12,0,469},{12,0,560},{
-12,0,578},{141,0,243},{133,0,564},{134,0,797},{5,10,958},{133,10,987},{5,11,55},
-{7,11,376},{140,11,161},{133,11,450},{134,0,556},{134,0,819},{11,10,276},{142,10
-,293},{7,0,544},{138,0,61},{8,0,719},{4,10,65},{5,10,479},{5,10,1004},{7,10,1913
-},{8,10,317},{9,10,302},{10,10,612},{141,10,22},{4,0,5},{5,0,498},{8,0,637},{9,0
-,521},{4,11,213},{4,10,261},{7,11,223},{7,10,510},{136,11,80},{5,0,927},{7,0,101
-},{4,10,291},{7,11,381},{7,11,806},{7,11,820},{8,11,354},{8,11,437},{8,11,787},{
-9,10,515},{9,11,657},{10,11,58},{10,11,339},{10,11,749},{11,11,914},{12,10,152},
-{12,11,162},{12,10,443},{13,11,75},{13,10,392},{14,11,106},{14,11,198},{14,11,
-320},{14,10,357},{14,11,413},{146,11,43},{6,0,1153},{7,0,1441},{136,11,747},{4,0
-,893},{5,0,780},{133,0,893},{138,11,654},{133,11,692},{133,0,238},{134,11,191},{
-4,10,130},{135,10,843},{6,0,1296},{5,10,42},{5,10,879},{7,10,245},{7,10,324},{7,
-10,1532},{11,10,463},{11,10,472},{13,10,363},{144,10,52},{134,0,1729},{6,0,1999}
-,{136,0,969},{4,10,134},{133,10,372},{4,0,60},{7,0,941},{7,0,1800},{8,0,314},{9,
-0,700},{139,0,487},{134,0,1144},{6,11,162},{7,11,1960},{136,11,831},{132,11,706}
-,{135,0,1147},{138,11,426},{138,11,89},{7,0,1853},{138,0,437},{136,0,419},{135,
-10,1634},{133,0,828},{5,0,806},{7,0,176},{7,0,178},{7,0,1240},{7,0,1976},{132,10
-,644},{135,11,1877},{5,11,420},{135,11,1449},{4,0,51},{5,0,39},{6,0,4},{7,0,591}
-,{7,0,849},{7,0,951},{7,0,1613},{7,0,1760},{7,0,1988},{9,0,434},{10,0,754},{11,0
-,25},{139,0,37},{10,11,57},{138,11,277},{135,10,540},{132,11,204},{135,0,159},{
-139,11,231},{133,0,902},{7,0,928},{7,11,366},{9,11,287},{12,11,199},{12,11,556},
-{140,11,577},{6,10,623},{136,10,789},{4,10,908},{5,10,359},{5,10,508},{6,10,1723
-},{7,10,343},{7,10,1996},{135,10,2026},{134,0,270},{4,10,341},{135,10,480},{5,11
-,356},{135,11,224},{11,11,588},{11,11,864},{11,11,968},{143,11,160},{132,0,556},
-{137,0,801},{132,0,416},{142,0,372},{5,0,152},{5,0,197},{7,0,340},{7,0,867},{10,
-0,548},{10,0,581},{11,0,6},{12,0,3},{12,0,19},{14,0,110},{142,0,289},{139,0,369}
-,{7,11,630},{9,11,567},{11,11,150},{11,11,444},{141,11,119},{134,11,539},{7,10,
-1995},{8,10,299},{11,10,890},{140,10,674},{7,0,34},{7,0,190},{8,0,28},{8,0,141},
-{8,0,444},{8,0,811},{9,0,468},{11,0,334},{12,0,24},{12,0,386},{140,0,576},{133,0
-,757},{7,0,1553},{136,0,898},{133,0,721},{136,0,1012},{4,0,789},{5,0,647},{135,0
-,1102},{132,0,898},{10,0,183},{4,10,238},{5,10,503},{6,10,179},{7,10,2003},{8,10
-,381},{8,10,473},{9,10,149},{10,10,788},{15,10,45},{15,10,86},{20,10,110},{150,
-10,57},{9,0,136},{19,0,107},{4,10,121},{5,10,156},{5,10,349},{10,10,605},{142,10
-,342},{4,11,235},{135,11,255},{4,11,194},{5,11,584},{6,11,384},{7,11,583},{10,11
-,761},{11,11,760},{139,11,851},{6,10,80},{6,10,1694},{7,10,173},{7,10,1974},{9,
-10,547},{10,10,730},{14,10,18},{150,10,39},{4,10,923},{134,10,1711},{5,0,277},{
-141,0,247},{132,0,435},{133,11,562},{134,0,1311},{5,11,191},{137,11,271},{132,10
-,595},{7,11,1537},{14,11,96},{143,11,73},{5,0,437},{7,0,502},{7,0,519},{7,0,1122
-},{7,0,1751},{14,0,211},{6,10,459},{7,10,1753},{7,10,1805},{8,10,658},{9,10,1},{
-11,10,959},{141,10,446},{6,0,814},{4,11,470},{5,11,473},{6,11,153},{7,11,1503},{
-7,11,1923},{10,11,701},{11,11,132},{11,11,168},{11,11,227},{11,11,320},{11,11,
-436},{11,11,525},{11,11,855},{12,11,41},{12,11,286},{13,11,103},{13,11,284},{14,
-11,255},{14,11,262},{15,11,117},{143,11,127},{5,0,265},{6,0,212},{135,0,28},{138
-,0,750},{133,11,327},{6,11,552},{7,11,1754},{137,11,604},{134,0,2012},{132,0,702
-},{5,11,80},{6,11,405},{7,11,403},{7,11,1502},{7,11,1626},{8,11,456},{9,11,487},
-{9,11,853},{9,11,889},{10,11,309},{11,11,721},{11,11,994},{12,11,430},{141,11,
-165},{5,0,808},{135,0,2045},{5,0,166},{8,0,739},{140,0,511},{134,10,490},{4,11,
-453},{5,11,887},{6,11,535},{8,11,6},{136,11,543},{4,0,119},{5,0,170},{5,0,447},{
-7,0,1708},{7,0,1889},{9,0,357},{9,0,719},{12,0,486},{140,0,596},{137,0,500},{7,
-10,250},{136,10,507},{132,10,158},{6,0,809},{134,0,1500},{9,0,327},{11,0,350},{
-11,0,831},{13,0,352},{4,10,140},{7,10,362},{8,10,209},{9,10,10},{9,10,503},{9,10
-,614},{10,10,689},{11,10,327},{11,10,725},{12,10,252},{12,10,583},{13,10,192},{
-14,10,269},{14,10,356},{148,10,50},{135,11,741},{4,0,450},{7,0,1158},{19,10,1},{
-19,10,26},{150,10,9},{6,0,597},{135,0,1318},{134,0,1602},{6,10,228},{7,10,1341},
-{9,10,408},{138,10,343},{7,0,1375},{7,0,1466},{138,0,331},{132,0,754},{132,10,
-557},{5,11,101},{6,11,88},{6,11,543},{7,11,1677},{9,11,100},{10,11,677},{14,11,
-169},{14,11,302},{14,11,313},{15,11,48},{143,11,84},{134,0,1368},{4,11,310},{9,
-11,795},{10,11,733},{11,11,451},{12,11,249},{14,11,115},{14,11,286},{143,11,100}
-,{132,10,548},{10,0,557},{7,10,197},{8,10,142},{8,10,325},{9,10,150},{9,10,596},
-{10,10,353},{11,10,74},{11,10,315},{12,10,662},{12,10,681},{14,10,423},{143,10,
-141},{133,11,587},{5,0,850},{136,0,799},{10,0,908},{12,0,701},{12,0,757},{142,0,
-466},{4,0,62},{5,0,275},{18,0,19},{6,10,399},{6,10,579},{7,10,692},{7,10,846},{7
-,10,1015},{7,10,1799},{8,10,403},{9,10,394},{10,10,133},{12,10,4},{12,10,297},{
-12,10,452},{16,10,81},{18,10,25},{21,10,14},{22,10,12},{151,10,18},{12,0,459},{7
-,10,1546},{11,10,299},{142,10,407},{132,10,177},{132,11,498},{7,11,217},{8,11,
-140},{138,11,610},{5,10,411},{135,10,653},{134,0,1802},{7,10,439},{10,10,727},{
-11,10,260},{139,10,684},{133,11,905},{11,11,580},{142,11,201},{134,0,1397},{5,10
-,208},{7,10,753},{135,10,1528},{7,0,238},{7,0,2033},{8,0,120},{8,0,188},{8,0,659
-},{9,0,598},{10,0,466},{12,0,342},{12,0,588},{13,0,503},{14,0,246},{143,0,92},{
-135,11,1041},{4,11,456},{7,11,105},{7,11,358},{7,11,1637},{8,11,643},{139,11,483
-},{6,0,1318},{134,0,1324},{4,0,201},{7,0,1744},{8,0,602},{11,0,247},{11,0,826},{
-17,0,65},{133,10,242},{8,0,164},{146,0,62},{133,10,953},{139,10,802},{133,0,615}
-,{7,11,1566},{8,11,269},{9,11,212},{9,11,718},{14,11,15},{14,11,132},{142,11,227
-},{133,10,290},{132,10,380},{5,10,52},{7,10,277},{9,10,368},{139,10,791},{135,0,
-1243},{133,11,539},{11,11,919},{141,11,409},{136,0,968},{133,11,470},{134,0,882}
-,{132,0,907},{5,0,100},{10,0,329},{12,0,416},{149,0,29},{10,10,138},{139,10,476}
-,{5,10,725},{5,10,727},{6,11,91},{7,11,435},{135,10,1811},{4,11,16},{5,11,316},{
-5,11,842},{6,11,370},{6,11,1778},{8,11,166},{11,11,812},{12,11,206},{12,11,351},
-{14,11,418},{16,11,15},{16,11,34},{18,11,3},{19,11,3},{19,11,7},{20,11,4},{149,
-11,21},{132,0,176},{5,0,636},{5,0,998},{7,0,9},{7,0,1508},{8,0,26},{9,0,317},{9,
-0,358},{10,0,210},{10,0,292},{10,0,533},{11,0,555},{12,0,526},{12,0,607},{13,0,
-263},{13,0,459},{142,0,271},{6,0,256},{8,0,265},{4,10,38},{7,10,307},{7,10,999},
-{7,10,1481},{7,10,1732},{7,10,1738},{9,10,414},{11,10,316},{12,10,52},{13,10,420
-},{147,10,100},{135,10,1296},{4,11,611},{133,11,606},{4,0,643},{142,11,21},{133,
-11,715},{133,10,723},{6,0,610},{135,11,597},{10,0,127},{141,0,27},{6,0,1995},{6,
-0,2001},{8,0,119},{136,0,973},{4,11,149},{138,11,368},{12,0,522},{4,11,154},{5,
-10,109},{6,10,1784},{7,11,1134},{7,10,1895},{8,11,105},{12,10,296},{140,10,302},
-{4,11,31},{6,11,429},{7,11,962},{9,11,458},{139,11,691},{10,0,553},{11,0,876},{
-13,0,193},{13,0,423},{14,0,166},{19,0,84},{4,11,312},{5,10,216},{7,10,1879},{9,
-10,141},{9,10,270},{9,10,679},{10,10,159},{11,10,197},{12,10,538},{12,10,559},{
-14,10,144},{14,10,167},{143,10,67},{134,0,1582},{7,0,1578},{135,11,1578},{137,10
-,81},{132,11,236},{134,10,391},{134,0,795},{7,10,322},{136,10,249},{5,11,836},{5
-,11,857},{6,11,1680},{7,11,59},{147,11,53},{135,0,432},{10,11,68},{139,11,494},{
-4,11,81},{139,11,867},{7,0,126},{136,0,84},{142,11,280},{5,11,282},{8,11,650},{9
-,11,295},{9,11,907},{138,11,443},{136,0,790},{5,10,632},{138,10,526},{6,0,64},{
-12,0,377},{13,0,309},{14,0,141},{14,0,429},{14,11,141},{142,11,429},{134,0,1529}
-,{6,0,321},{7,0,1857},{9,0,530},{19,0,99},{7,10,948},{7,10,1042},{8,10,235},{8,
-10,461},{9,10,453},{10,10,354},{145,10,77},{7,0,1104},{11,0,269},{11,0,539},{11,
-0,627},{11,0,706},{11,0,975},{12,0,248},{12,0,434},{12,0,600},{12,0,622},{13,0,
-297},{13,0,485},{14,0,69},{14,0,409},{143,0,108},{4,10,362},{7,10,52},{7,10,303}
-,{10,11,70},{12,11,26},{14,11,17},{14,11,178},{15,11,34},{149,11,12},{11,0,977},
-{141,0,507},{9,0,34},{139,0,484},{5,10,196},{6,10,486},{7,10,212},{8,10,309},{
-136,10,346},{6,0,1700},{7,0,26},{7,0,293},{7,0,382},{7,0,1026},{7,0,1087},{7,0,
-2027},{8,0,24},{8,0,114},{8,0,252},{8,0,727},{8,0,729},{9,0,30},{9,0,199},{9,0,
-231},{9,0,251},{9,0,334},{9,0,361},{9,0,712},{10,0,55},{10,0,60},{10,0,232},{10,
-0,332},{10,0,384},{10,0,396},{10,0,504},{10,0,542},{10,0,652},{11,0,20},{11,0,48
-},{11,0,207},{11,0,291},{11,0,298},{11,0,342},{11,0,365},{11,0,394},{11,0,620},{
-11,0,705},{11,0,1017},{12,0,123},{12,0,340},{12,0,406},{12,0,643},{13,0,61},{13,
-0,269},{13,0,311},{13,0,319},{13,0,486},{14,0,234},{15,0,62},{15,0,85},{16,0,71}
-,{18,0,119},{20,0,105},{135,10,1912},{4,11,71},{5,11,376},{7,11,119},{138,11,665
-},{10,0,918},{10,0,926},{4,10,686},{136,11,55},{138,10,625},{136,10,706},{132,11
-,479},{4,10,30},{133,10,43},{6,0,379},{7,0,270},{8,0,176},{8,0,183},{9,0,432},{9
-,0,661},{12,0,247},{12,0,617},{18,0,125},{7,11,607},{8,11,99},{152,11,4},{5,0,
-792},{133,0,900},{4,11,612},{133,11,561},{4,11,41},{4,10,220},{5,11,74},{7,10,
-1535},{7,11,1627},{11,11,871},{140,11,619},{135,0,1920},{7,11,94},{11,11,329},{
-11,11,965},{12,11,241},{14,11,354},{15,11,22},{148,11,63},{9,11,209},{137,11,300
-},{134,0,771},{135,0,1979},{4,0,901},{133,0,776},{142,0,254},{133,11,98},{9,11,
-16},{141,11,386},{133,11,984},{4,11,182},{6,11,205},{135,11,220},{7,10,1725},{7,
-10,1774},{138,10,393},{5,10,263},{134,10,414},{4,11,42},{9,11,205},{9,11,786},{
-138,11,659},{14,0,140},{148,0,41},{8,0,440},{10,0,359},{6,10,178},{6,11,289},{6,
-10,1750},{7,11,1670},{9,10,690},{10,10,155},{10,10,373},{11,10,698},{12,11,57},{
-13,10,155},{20,10,93},{151,11,4},{4,0,37},{5,0,334},{7,0,1253},{151,11,25},{4,0,
-508},{4,11,635},{5,10,97},{137,10,393},{139,11,533},{4,0,640},{133,0,513},{134,
-10,1639},{132,11,371},{4,11,272},{7,11,836},{7,11,1651},{145,11,89},{5,11,825},{
-6,11,444},{6,11,1640},{136,11,308},{4,10,191},{7,10,934},{8,10,647},{145,10,97},
-{12,0,246},{15,0,162},{19,0,64},{20,0,8},{20,0,95},{22,0,24},{152,0,17},{4,0,533
-},{5,10,165},{9,10,346},{138,10,655},{5,11,737},{139,10,885},{133,10,877},{8,10,
-128},{139,10,179},{137,11,307},{140,0,752},{133,0,920},{135,0,1048},{5,0,153},{6
-,0,580},{6,10,1663},{7,10,132},{7,10,1154},{7,10,1415},{7,10,1507},{12,10,493},{
-15,10,105},{151,10,15},{5,10,459},{7,10,1073},{8,10,241},{136,10,334},{138,0,391
-},{135,0,1952},{133,11,525},{8,11,641},{11,11,388},{140,11,580},{142,0,126},{134
-,0,640},{132,0,483},{7,0,1616},{9,0,69},{6,10,324},{6,10,520},{7,10,338},{7,10,
-1729},{8,10,228},{139,10,750},{5,11,493},{134,11,528},{135,0,734},{4,11,174},{
-135,11,911},{138,0,480},{9,0,495},{146,0,104},{135,10,705},{9,0,472},{4,10,73},{
-6,10,612},{7,10,927},{7,10,1330},{7,10,1822},{8,10,217},{9,10,765},{9,10,766},{
-10,10,408},{11,10,51},{11,10,793},{12,10,266},{15,10,158},{20,10,89},{150,10,32}
-,{7,11,548},{137,11,58},{4,11,32},{5,11,215},{6,11,269},{7,11,1782},{7,11,1892},
-{10,11,16},{11,11,822},{11,11,954},{141,11,481},{132,0,874},{9,0,229},{5,10,389}
-,{136,10,636},{7,11,1749},{136,11,477},{134,0,948},{5,11,308},{135,11,1088},{4,0
-,748},{139,0,1009},{136,10,21},{6,0,555},{135,0,485},{5,11,126},{8,11,297},{9,11
-,366},{9,11,445},{12,11,53},{12,11,374},{141,11,492},{7,11,1551},{139,11,361},{
-136,0,193},{136,0,472},{8,0,653},{13,0,93},{147,0,14},{132,0,984},{132,11,175},{
-5,0,172},{6,0,1971},{132,11,685},{149,11,8},{133,11,797},{13,0,83},{5,10,189},{7
-,10,442},{7,10,443},{8,10,281},{12,10,174},{141,10,261},{134,0,1568},{133,11,565
-},{139,0,384},{133,0,260},{7,0,758},{7,0,880},{7,0,1359},{9,0,164},{9,0,167},{10
-,0,156},{10,0,588},{12,0,101},{14,0,48},{15,0,70},{6,10,2},{7,10,1262},{7,10,
-1737},{8,10,22},{8,10,270},{8,10,612},{9,10,312},{9,10,436},{10,10,311},{10,10,
-623},{11,10,72},{11,10,330},{11,10,455},{12,10,321},{12,10,504},{12,10,530},{12,
-10,543},{13,10,17},{13,10,156},{13,10,334},{17,10,60},{148,10,64},{4,11,252},{7,
-11,1068},{10,11,434},{11,11,228},{11,11,426},{13,11,231},{18,11,106},{148,11,87}
-,{7,10,354},{10,10,410},{139,10,815},{6,0,367},{7,10,670},{7,10,1327},{8,10,411}
-,{8,10,435},{9,10,653},{9,10,740},{10,10,385},{11,10,222},{11,10,324},{11,10,829
-},{140,10,611},{7,0,1174},{6,10,166},{135,10,374},{146,0,121},{132,0,828},{5,11,
-231},{138,11,509},{7,11,601},{9,11,277},{9,11,674},{10,11,178},{10,11,257},{10,
-11,418},{11,11,531},{11,11,544},{11,11,585},{12,11,113},{12,11,475},{13,11,99},{
-142,11,428},{134,0,1541},{135,11,1779},{5,0,343},{134,10,398},{135,10,50},{135,
-11,1683},{4,0,440},{7,0,57},{8,0,167},{8,0,375},{9,0,82},{9,0,561},{9,0,744},{10
-,0,620},{137,11,744},{134,0,926},{6,10,517},{7,10,1159},{10,10,621},{139,10,192}
-,{137,0,827},{8,0,194},{136,0,756},{10,10,223},{139,10,645},{7,10,64},{136,10,
-245},{4,11,399},{5,11,119},{5,11,494},{7,11,751},{137,11,556},{132,0,808},{135,0
-,22},{7,10,1763},{140,10,310},{5,0,639},{7,0,1249},{11,0,896},{134,11,584},{134,
-0,1614},{135,0,860},{135,11,1121},{5,10,129},{6,10,61},{135,10,947},{4,0,102},{7
-,0,815},{7,0,1699},{139,0,964},{13,10,505},{141,10,506},{139,10,1000},{132,11,
-679},{132,0,899},{132,0,569},{5,11,694},{137,11,714},{136,0,795},{6,0,2045},{139
-,11,7},{6,0,52},{9,0,104},{9,0,559},{12,0,308},{147,0,87},{4,0,301},{132,0,604},
-{133,10,637},{136,0,779},{5,11,143},{5,11,769},{6,11,1760},{7,11,682},{7,11,1992
-},{136,11,736},{137,10,590},{147,0,32},{137,11,527},{5,10,280},{135,10,1226},{
-134,0,494},{6,0,677},{6,0,682},{134,0,1044},{133,10,281},{135,10,1064},{7,0,508}
-,{133,11,860},{6,11,422},{7,11,0},{7,11,1544},{9,11,577},{11,11,990},{12,11,141}
-,{12,11,453},{13,11,47},{141,11,266},{134,0,1014},{5,11,515},{137,11,131},{134,0
-,957},{132,11,646},{6,0,310},{7,0,1849},{8,0,72},{8,0,272},{8,0,431},{9,0,12},{9
-,0,376},{10,0,563},{10,0,630},{10,0,796},{10,0,810},{11,0,367},{11,0,599},{11,0,
-686},{140,0,672},{7,0,570},{4,11,396},{7,10,120},{7,11,728},{8,10,489},{9,11,117
-},{9,10,319},{10,10,820},{11,10,1004},{12,10,379},{12,10,679},{13,10,117},{13,11
-,202},{13,10,412},{14,10,25},{15,10,52},{15,10,161},{16,10,47},{20,11,51},{149,
-10,2},{6,11,121},{6,11,124},{6,11,357},{7,11,1138},{7,11,1295},{8,11,162},{139,
-11,655},{8,0,449},{4,10,937},{5,10,801},{136,11,449},{139,11,958},{6,0,181},{7,0
-,537},{8,0,64},{9,0,127},{10,0,496},{12,0,510},{141,0,384},{138,11,253},{4,0,244
-},{135,0,233},{133,11,237},{132,10,365},{6,0,1650},{10,0,702},{139,0,245},{5,10,
-7},{139,10,774},{13,0,463},{20,0,49},{13,11,463},{148,11,49},{4,10,734},{5,10,
-662},{134,10,430},{4,10,746},{135,10,1090},{5,10,360},{136,10,237},{137,0,338},{
-143,11,10},{7,11,571},{138,11,366},{134,0,1279},{9,11,513},{10,11,22},{10,11,39}
-,{12,11,122},{140,11,187},{133,0,896},{146,0,178},{134,0,695},{137,0,808},{134,
-11,587},{7,11,107},{7,11,838},{8,11,550},{138,11,401},{7,0,1117},{136,0,539},{4,
-10,277},{5,10,608},{6,10,493},{7,10,457},{140,10,384},{133,11,768},{12,0,257},{7
-,10,27},{135,10,316},{140,0,1003},{4,0,207},{5,0,586},{5,0,676},{6,0,448},{8,0,
-244},{11,0,1},{13,0,3},{16,0,54},{17,0,4},{18,0,13},{133,10,552},{4,10,401},{137
-,10,264},{5,0,516},{7,0,1883},{135,11,1883},{12,0,960},{132,11,894},{5,0,4},{5,0
-,810},{6,0,13},{6,0,538},{6,0,1690},{6,0,1726},{7,0,499},{7,0,1819},{8,0,148},{8
-,0,696},{8,0,791},{12,0,125},{143,0,9},{135,0,1268},{11,0,30},{14,0,315},{9,10,
-543},{10,10,524},{12,10,524},{16,10,18},{20,10,26},{148,10,65},{6,0,748},{4,10,
-205},{5,10,623},{7,10,104},{136,10,519},{11,0,542},{139,0,852},{140,0,6},{132,0,
-848},{7,0,1385},{11,0,582},{11,0,650},{11,0,901},{11,0,949},{12,0,232},{12,0,236
-},{13,0,413},{13,0,501},{18,0,116},{7,10,579},{9,10,41},{9,10,244},{9,10,669},{
-10,10,5},{11,10,861},{11,10,951},{139,10,980},{4,0,945},{6,0,1811},{6,0,1845},{6
-,0,1853},{6,0,1858},{8,0,862},{12,0,782},{12,0,788},{18,0,160},{148,0,117},{132,
-10,717},{4,0,925},{5,0,803},{8,0,698},{138,0,828},{134,0,1416},{132,0,610},{139,
-0,992},{6,0,878},{134,0,1477},{135,0,1847},{138,11,531},{137,11,539},{134,11,272
-},{133,0,383},{134,0,1404},{132,10,489},{4,11,9},{5,11,128},{7,11,368},{11,11,
-480},{148,11,3},{136,0,986},{9,0,660},{138,0,347},{135,10,892},{136,11,682},{7,0
-,572},{9,0,592},{11,0,680},{12,0,356},{140,0,550},{7,0,1411},{138,11,527},{4,11,
-2},{7,11,545},{135,11,894},{137,10,473},{11,0,64},{7,11,481},{7,10,819},{9,10,26
-},{9,10,392},{9,11,792},{10,10,152},{10,10,226},{12,10,276},{12,10,426},{12,10,
-589},{13,10,460},{15,10,97},{19,10,48},{148,10,104},{135,10,51},{136,11,445},{
-136,11,646},{135,0,606},{132,10,674},{6,0,1829},{134,0,1830},{132,10,770},{5,10,
-79},{7,10,1027},{7,10,1477},{139,10,52},{5,11,530},{142,11,113},{134,10,1666},{7
-,0,748},{139,0,700},{134,10,195},{133,10,789},{9,0,87},{10,0,365},{4,10,251},{4,
-10,688},{7,10,513},{135,10,1284},{136,11,111},{133,0,127},{6,0,198},{140,0,83},{
-133,11,556},{133,10,889},{4,10,160},{5,10,330},{7,10,1434},{136,10,174},{5,0,276
-},{6,0,55},{7,0,1369},{138,0,864},{8,11,16},{140,11,568},{6,0,1752},{136,0,726},
-{135,0,1066},{133,0,764},{6,11,186},{137,11,426},{11,0,683},{139,11,683},{6,0,
-309},{7,0,331},{138,0,550},{133,10,374},{6,0,1212},{6,0,1852},{7,0,1062},{8,0,
-874},{8,0,882},{138,0,936},{132,11,585},{134,0,1364},{7,0,986},{133,10,731},{6,0
-,723},{6,0,1408},{138,0,381},{135,0,1573},{134,0,1025},{4,10,626},{5,10,642},{6,
-10,425},{10,10,202},{139,10,141},{4,11,93},{5,11,252},{6,11,229},{7,11,291},{9,
-11,550},{139,11,644},{137,11,749},{137,11,162},{132,11,381},{135,0,1559},{6,0,
-194},{7,0,133},{10,0,493},{10,0,570},{139,0,664},{5,0,24},{5,0,569},{6,0,3},{6,0
-,119},{6,0,143},{6,0,440},{7,0,295},{7,0,599},{7,0,1686},{7,0,1854},{8,0,424},{9
-,0,43},{9,0,584},{9,0,760},{10,0,148},{10,0,328},{11,0,159},{11,0,253},{11,0,506
-},{12,0,487},{140,0,531},{6,0,661},{134,0,1517},{136,10,835},{151,10,17},{5,0,14
-},{5,0,892},{6,0,283},{7,0,234},{136,0,537},{139,0,541},{4,0,126},{8,0,635},{147
-,0,34},{4,0,316},{4,0,495},{135,0,1561},{4,11,187},{5,11,184},{5,11,690},{7,11,
-1869},{138,11,756},{139,11,783},{4,0,998},{137,0,861},{136,0,1009},{139,11,292},
-{5,11,21},{6,11,77},{6,11,157},{7,11,974},{7,11,1301},{7,11,1339},{7,11,1490},{7
-,11,1873},{137,11,628},{7,11,1283},{9,11,227},{9,11,499},{10,11,341},{11,11,325}
-,{11,11,408},{14,11,180},{15,11,144},{18,11,47},{147,11,49},{4,0,64},{5,0,352},{
-5,0,720},{6,0,368},{139,0,359},{5,10,384},{8,10,455},{140,10,48},{5,10,264},{134
-,10,184},{7,0,1577},{10,0,304},{10,0,549},{12,0,365},{13,0,220},{13,0,240},{142,
-0,33},{134,0,1107},{134,0,929},{135,0,1142},{6,0,175},{137,0,289},{5,0,432},{133
-,0,913},{6,0,279},{7,0,219},{5,10,633},{135,10,1323},{7,0,785},{7,10,359},{8,10,
-243},{140,10,175},{139,0,595},{132,10,105},{8,11,398},{9,11,681},{139,11,632},{
-140,0,80},{5,0,931},{134,0,1698},{142,11,241},{134,11,20},{134,0,1323},{11,0,526
-},{11,0,939},{141,0,290},{5,0,774},{6,0,780},{6,0,1637},{6,0,1686},{6,0,1751},{8
-,0,559},{141,0,109},{141,0,127},{7,0,1167},{11,0,934},{13,0,391},{17,0,76},{135,
-11,709},{135,0,963},{6,0,260},{135,0,1484},{134,0,573},{4,10,758},{139,11,941},{
-135,10,1649},{145,11,36},{4,0,292},{137,0,580},{4,0,736},{5,0,871},{6,0,1689},{
-135,0,1944},{7,11,945},{11,11,713},{139,11,744},{134,0,1164},{135,11,937},{6,0,
-1922},{9,0,982},{15,0,173},{15,0,178},{15,0,200},{18,0,189},{18,0,207},{21,0,47}
-,{135,11,1652},{7,0,1695},{139,10,128},{6,0,63},{135,0,920},{133,0,793},{143,11,
-134},{133,10,918},{5,0,67},{6,0,62},{6,0,374},{135,0,1391},{9,0,790},{12,0,47},{
-4,11,579},{5,11,226},{5,11,323},{135,11,960},{10,11,784},{141,11,191},{4,0,391},
-{135,0,1169},{137,0,443},{13,11,232},{146,11,35},{132,10,340},{132,0,271},{137,
-11,313},{5,11,973},{137,11,659},{134,0,1140},{6,11,135},{135,11,1176},{4,0,253},
-{5,0,544},{7,0,300},{137,0,340},{7,0,897},{5,10,985},{7,10,509},{145,10,96},{138
-,11,735},{135,10,1919},{138,0,890},{5,0,818},{134,0,1122},{5,0,53},{5,0,541},{6,
-0,94},{6,0,499},{7,0,230},{139,0,321},{4,0,920},{5,0,25},{5,0,790},{6,0,457},{7,
-0,853},{8,0,788},{142,11,31},{132,10,247},{135,11,314},{132,0,468},{7,0,243},{6,
-10,337},{7,10,494},{8,10,27},{8,10,599},{138,10,153},{4,10,184},{5,10,390},{7,10
-,618},{7,10,1456},{139,10,710},{134,0,870},{134,0,1238},{134,0,1765},{10,0,853},
-{10,0,943},{14,0,437},{14,0,439},{14,0,443},{14,0,446},{14,0,452},{14,0,469},{14
-,0,471},{14,0,473},{16,0,93},{16,0,102},{16,0,110},{148,0,121},{4,0,605},{7,0,
-518},{7,0,1282},{7,0,1918},{10,0,180},{139,0,218},{133,0,822},{4,0,634},{11,0,
-916},{142,0,419},{6,11,281},{7,11,6},{8,11,282},{8,11,480},{8,11,499},{9,11,198}
-,{10,11,143},{10,11,169},{10,11,211},{10,11,417},{10,11,574},{11,11,147},{11,11,
-395},{12,11,75},{12,11,407},{12,11,608},{13,11,500},{142,11,251},{134,0,898},{6,
-0,36},{7,0,658},{8,0,454},{150,11,48},{133,11,674},{135,11,1776},{4,11,419},{10,
-10,227},{11,10,497},{11,10,709},{140,10,415},{6,10,360},{7,10,1664},{136,10,478}
-,{137,0,806},{12,11,508},{14,11,102},{14,11,226},{144,11,57},{135,11,1123},{4,11
-,138},{7,11,1012},{7,11,1280},{137,11,76},{5,11,29},{140,11,638},{136,10,699},{
-134,0,1326},{132,0,104},{135,11,735},{132,10,739},{134,0,1331},{7,0,260},{135,11
-,260},{135,11,1063},{7,0,45},{9,0,542},{9,0,566},{10,0,728},{137,10,869},{4,10,
-67},{5,10,422},{7,10,1037},{7,10,1289},{7,10,1555},{9,10,741},{145,10,108},{139,
-0,263},{134,0,1516},{14,0,146},{15,0,42},{16,0,23},{17,0,86},{146,0,17},{138,0,
-468},{136,0,1005},{4,11,17},{5,11,23},{7,11,995},{11,11,383},{11,11,437},{12,11,
-460},{140,11,532},{7,0,87},{142,0,288},{138,10,96},{135,11,626},{144,10,26},{7,0
-,988},{7,0,1939},{9,0,64},{9,0,502},{12,0,22},{12,0,34},{13,0,12},{13,0,234},{
-147,0,77},{13,0,133},{8,10,203},{11,10,823},{11,10,846},{12,10,482},{13,10,277},
-{13,10,302},{13,10,464},{14,10,205},{142,10,221},{4,10,449},{133,10,718},{135,0,
-141},{6,0,1842},{136,0,872},{8,11,70},{12,11,171},{141,11,272},{4,10,355},{6,10,
-311},{9,10,256},{138,10,404},{132,0,619},{137,0,261},{10,11,233},{10,10,758},{
-139,11,76},{5,0,246},{8,0,189},{9,0,355},{9,0,512},{10,0,124},{10,0,453},{11,0,
-143},{11,0,416},{11,0,859},{141,0,341},{134,11,442},{133,10,827},{5,10,64},{140,
-10,581},{4,10,442},{7,10,1047},{7,10,1352},{135,10,1643},{134,11,1709},{5,0,678}
-,{6,0,305},{7,0,775},{7,0,1065},{133,10,977},{11,11,69},{12,11,105},{12,11,117},
-{13,11,213},{14,11,13},{14,11,62},{14,11,177},{14,11,421},{15,11,19},{146,11,141
-},{137,11,309},{5,0,35},{7,0,862},{7,0,1886},{138,0,179},{136,0,285},{132,0,517}
-,{7,11,976},{9,11,146},{10,11,206},{10,11,596},{13,11,218},{142,11,153},{132,10,
-254},{6,0,214},{12,0,540},{4,10,275},{7,10,1219},{140,10,376},{8,0,667},{11,0,
-403},{146,0,83},{12,0,74},{10,11,648},{11,11,671},{143,11,46},{135,0,125},{134,
-10,1753},{133,0,761},{6,0,912},{4,11,518},{6,10,369},{6,10,502},{7,10,1036},{7,
-11,1136},{8,10,348},{9,10,452},{10,10,26},{11,10,224},{11,10,387},{11,10,772},{
-12,10,95},{12,10,629},{13,10,195},{13,10,207},{13,10,241},{14,10,260},{14,10,270
-},{143,10,140},{10,0,131},{140,0,72},{132,10,269},{5,10,480},{7,10,532},{7,10,
-1197},{7,10,1358},{8,10,291},{11,10,349},{142,10,396},{8,11,689},{137,11,863},{8
-,0,333},{138,0,182},{4,11,18},{7,11,145},{7,11,444},{7,11,1278},{8,11,49},{8,11,
-400},{9,11,71},{9,11,250},{10,11,459},{12,11,160},{144,11,24},{14,11,35},{142,11
-,191},{135,11,1864},{135,0,1338},{148,10,15},{14,0,94},{15,0,65},{16,0,4},{16,0,
-77},{16,0,80},{145,0,5},{12,11,82},{143,11,36},{133,11,1010},{133,0,449},{133,0,
-646},{7,0,86},{8,0,103},{135,10,657},{7,0,2028},{138,0,641},{136,10,533},{134,0,
-1},{139,11,970},{5,11,87},{7,11,313},{7,11,1103},{10,11,112},{10,11,582},{11,11,
-389},{11,11,813},{12,11,385},{13,11,286},{14,11,124},{146,11,108},{6,0,869},{132
-,11,267},{6,0,277},{7,0,1274},{7,0,1386},{146,0,87},{6,0,187},{7,0,39},{7,0,1203
-},{8,0,380},{14,0,117},{149,0,28},{4,10,211},{4,10,332},{5,10,335},{6,10,238},{7
-,10,269},{7,10,811},{7,10,1797},{8,10,836},{9,10,507},{141,10,242},{4,0,785},{5,
-0,368},{6,0,297},{7,0,793},{139,0,938},{7,0,464},{8,0,558},{11,0,105},{12,0,231}
-,{14,0,386},{15,0,102},{148,0,75},{133,10,1009},{8,0,877},{140,0,731},{139,11,
-289},{10,11,249},{139,11,209},{132,11,561},{134,0,1608},{132,11,760},{134,0,1429
-},{9,11,154},{140,11,485},{5,10,228},{6,10,203},{7,10,156},{8,10,347},{137,10,
-265},{7,0,1010},{11,0,733},{11,0,759},{13,0,34},{14,0,427},{146,0,45},{7,10,1131
-},{135,10,1468},{136,11,255},{7,0,1656},{9,0,369},{10,0,338},{10,0,490},{11,0,
-154},{11,0,545},{11,0,775},{13,0,77},{141,0,274},{133,11,621},{134,0,1038},{4,11
-,368},{135,11,641},{6,0,2010},{8,0,979},{8,0,985},{10,0,951},{138,0,1011},{134,0
-,1005},{19,0,121},{5,10,291},{5,10,318},{7,10,765},{9,10,389},{140,10,548},{5,0,
-20},{6,0,298},{7,0,659},{137,0,219},{7,0,1440},{11,0,854},{11,0,872},{11,0,921},
-{12,0,551},{13,0,472},{142,0,367},{5,0,490},{6,0,615},{6,0,620},{135,0,683},{6,0
-,1070},{134,0,1597},{139,0,522},{132,0,439},{136,0,669},{6,0,766},{6,0,1143},{6,
-0,1245},{10,10,525},{139,10,82},{9,11,92},{147,11,91},{6,0,668},{134,0,1218},{6,
-11,525},{9,11,876},{140,11,284},{132,0,233},{136,0,547},{132,10,422},{5,10,355},
-{145,10,0},{6,11,300},{135,11,1515},{4,0,482},{137,10,905},{4,0,886},{7,0,346},{
-133,11,594},{133,10,865},{5,10,914},{134,10,1625},{135,0,334},{5,0,795},{6,0,
-1741},{133,10,234},{135,10,1383},{6,11,1641},{136,11,820},{135,0,371},{7,11,1313
-},{138,11,660},{135,10,1312},{135,0,622},{7,0,625},{135,0,1750},{135,0,339},{4,0
-,203},{135,0,1936},{15,0,29},{16,0,38},{15,11,29},{144,11,38},{5,0,338},{135,0,
-1256},{135,10,1493},{10,0,130},{6,10,421},{7,10,61},{7,10,1540},{138,10,501},{6,
-11,389},{7,11,149},{9,11,142},{138,11,94},{137,10,341},{11,0,678},{12,0,307},{
-142,10,98},{6,11,8},{7,11,1881},{136,11,91},{135,0,2044},{6,0,770},{6,0,802},{6,
-0,812},{7,0,311},{9,0,308},{12,0,255},{6,10,102},{7,10,72},{15,10,142},{147,10,
-67},{151,10,30},{135,10,823},{135,0,1266},{135,11,1746},{135,10,1870},{4,0,400},
-{5,0,267},{135,0,232},{7,11,24},{11,11,542},{139,11,852},{135,11,1739},{4,11,503
-},{135,11,1661},{5,11,130},{7,11,1314},{9,11,610},{10,11,718},{11,11,601},{11,11
-,819},{11,11,946},{140,11,536},{10,11,149},{11,11,280},{142,11,336},{7,0,739},{
-11,0,690},{7,11,1946},{8,10,48},{8,10,88},{8,10,582},{8,10,681},{9,10,373},{9,10
-,864},{11,10,157},{11,10,843},{148,10,27},{134,0,990},{4,10,88},{5,10,137},{5,10
-,174},{5,10,777},{6,10,1664},{6,10,1725},{7,10,77},{7,10,426},{7,10,1317},{7,10,
-1355},{8,10,126},{8,10,563},{9,10,523},{9,10,750},{10,10,310},{10,10,836},{11,10
-,42},{11,10,318},{11,10,731},{12,10,68},{12,10,92},{12,10,507},{12,10,692},{13,
-10,81},{13,10,238},{13,10,374},{14,10,436},{18,10,138},{19,10,78},{19,10,111},{
-20,10,55},{20,10,77},{148,10,92},{141,10,418},{7,0,1831},{132,10,938},{6,0,776},
-{134,0,915},{138,10,351},{5,11,348},{6,11,522},{6,10,1668},{7,10,1499},{8,10,117
-},{9,10,314},{138,10,174},{135,10,707},{132,0,613},{133,10,403},{132,11,392},{5,
-11,433},{9,11,633},{139,11,629},{133,0,763},{132,0,878},{132,0,977},{132,0,100},
-{6,0,463},{4,10,44},{5,10,311},{7,10,639},{7,10,762},{7,10,1827},{9,10,8},{9,10,
-462},{148,10,83},{134,11,234},{4,10,346},{7,10,115},{9,10,180},{9,10,456},{138,
-10,363},{5,0,362},{5,0,443},{6,0,318},{7,0,1019},{139,0,623},{5,0,463},{8,0,296}
-,{7,11,140},{7,11,1950},{8,11,680},{11,11,817},{147,11,88},{7,11,1222},{138,11,
-386},{142,0,137},{132,0,454},{7,0,1914},{6,11,5},{7,10,1051},{9,10,545},{11,11,
-249},{12,11,313},{16,11,66},{145,11,26},{135,0,1527},{145,0,58},{148,11,59},{5,0
-,48},{5,0,404},{6,0,557},{7,0,458},{8,0,597},{10,0,455},{10,0,606},{11,0,49},{11
-,0,548},{12,0,476},{13,0,18},{141,0,450},{5,11,963},{134,11,1773},{133,0,729},{
-138,11,586},{5,0,442},{135,0,1984},{134,0,449},{144,0,40},{4,0,853},{7,11,180},{
-8,11,509},{136,11,792},{6,10,185},{7,10,1899},{9,10,875},{139,10,673},{134,11,
-524},{12,0,227},{4,10,327},{5,10,478},{7,10,1332},{136,10,753},{6,0,1491},{5,10,
-1020},{133,10,1022},{4,10,103},{133,10,401},{132,11,931},{4,10,499},{135,10,1421
-},{5,0,55},{7,0,376},{140,0,161},{133,0,450},{6,0,1174},{134,0,1562},{10,0,62},{
-13,0,400},{135,11,1837},{140,0,207},{135,0,869},{4,11,773},{5,11,618},{137,11,
-756},{132,10,96},{4,0,213},{7,0,223},{8,0,80},{135,10,968},{4,11,90},{5,11,337},
-{5,11,545},{7,11,754},{9,11,186},{10,11,72},{10,11,782},{11,11,513},{11,11,577},
-{11,11,610},{11,11,889},{11,11,961},{12,11,354},{12,11,362},{12,11,461},{12,11,
-595},{13,11,79},{143,11,121},{7,0,381},{7,0,806},{7,0,820},{8,0,354},{8,0,437},{
-8,0,787},{9,0,657},{10,0,58},{10,0,339},{10,0,749},{11,0,914},{12,0,162},{13,0,
-75},{14,0,106},{14,0,198},{14,0,320},{14,0,413},{146,0,43},{136,0,747},{136,0,
-954},{134,0,1073},{135,0,556},{7,11,151},{9,11,329},{139,11,254},{5,0,692},{134,
-0,1395},{6,10,563},{137,10,224},{134,0,191},{132,0,804},{9,11,187},{10,11,36},{
-17,11,44},{146,11,64},{7,11,165},{7,11,919},{136,11,517},{4,11,506},{5,11,295},{
-7,11,1680},{15,11,14},{144,11,5},{4,0,706},{6,0,162},{7,0,1960},{136,0,831},{135
-,11,1376},{7,11,987},{9,11,688},{10,11,522},{11,11,788},{140,11,566},{150,0,35},
-{138,0,426},{135,0,1235},{135,11,1741},{7,11,389},{7,11,700},{7,11,940},{8,11,
-514},{9,11,116},{9,11,535},{10,11,118},{11,11,107},{11,11,148},{11,11,922},{12,
-11,254},{12,11,421},{142,11,238},{134,0,1234},{132,11,743},{4,10,910},{5,10,832}
-,{135,11,1335},{141,0,96},{135,11,185},{146,0,149},{4,0,204},{137,0,902},{4,11,
-784},{133,11,745},{136,0,833},{136,0,949},{7,0,366},{9,0,287},{12,0,199},{12,0,
-556},{12,0,577},{5,11,81},{7,11,146},{7,11,1342},{7,11,1446},{8,11,53},{8,11,561
-},{8,11,694},{8,11,754},{9,11,97},{9,11,115},{9,11,894},{10,11,462},{10,11,813},
-{11,11,230},{11,11,657},{11,11,699},{11,11,748},{12,11,119},{12,11,200},{12,11,
-283},{14,11,273},{145,11,15},{5,11,408},{137,11,747},{9,11,498},{140,11,181},{6,
-0,2020},{136,0,992},{5,0,356},{135,0,224},{134,0,784},{7,0,630},{9,0,567},{11,0,
-150},{11,0,444},{13,0,119},{8,10,528},{137,10,348},{134,0,539},{4,10,20},{133,10
-,616},{142,0,27},{7,11,30},{8,11,86},{8,11,315},{8,11,700},{9,11,576},{9,11,858}
-,{11,11,310},{11,11,888},{11,11,904},{12,11,361},{141,11,248},{138,11,839},{134,
-0,755},{134,0,1063},{7,10,1091},{135,10,1765},{134,11,428},{7,11,524},{8,11,169}
-,{8,11,234},{9,11,480},{138,11,646},{139,0,814},{7,11,1462},{139,11,659},{4,10,
-26},{5,10,429},{6,10,245},{7,10,704},{7,10,1379},{135,10,1474},{7,11,1205},{138,
-11,637},{139,11,803},{132,10,621},{136,0,987},{4,11,266},{8,11,4},{9,11,39},{10,
-11,166},{11,11,918},{12,11,635},{20,11,10},{22,11,27},{150,11,43},{4,0,235},{135
-,0,255},{4,0,194},{5,0,584},{6,0,384},{7,0,583},{10,0,761},{11,0,760},{139,0,851
-},{133,10,542},{134,0,1086},{133,10,868},{8,0,1016},{136,0,1018},{7,0,1396},{7,
-11,1396},{136,10,433},{135,10,1495},{138,10,215},{141,10,124},{7,11,157},{8,11,
-279},{9,11,759},{16,11,31},{16,11,39},{16,11,75},{18,11,24},{20,11,42},{152,11,1
-},{5,0,562},{134,11,604},{134,0,913},{5,0,191},{137,0,271},{4,0,470},{6,0,153},{
-7,0,1503},{7,0,1923},{10,0,701},{11,0,132},{11,0,227},{11,0,320},{11,0,436},{11,
-0,525},{11,0,855},{11,0,873},{12,0,41},{12,0,286},{13,0,103},{13,0,284},{14,0,
-255},{14,0,262},{15,0,117},{143,0,127},{7,0,475},{12,0,45},{147,10,112},{132,11,
-567},{137,11,859},{6,0,713},{6,0,969},{6,0,1290},{134,0,1551},{133,0,327},{6,0,
-552},{6,0,1292},{7,0,1754},{137,0,604},{4,0,223},{6,0,359},{11,0,3},{13,0,108},{
-14,0,89},{16,0,22},{5,11,762},{7,11,1880},{9,11,680},{139,11,798},{5,0,80},{6,0,
-405},{7,0,403},{7,0,1502},{8,0,456},{9,0,487},{9,0,853},{9,0,889},{10,0,309},{11
-,0,721},{11,0,994},{12,0,430},{141,0,165},{133,11,298},{132,10,647},{134,0,2016}
-,{18,10,10},{146,11,10},{4,0,453},{5,0,887},{6,0,535},{8,0,6},{8,0,543},{136,0,
-826},{136,0,975},{10,0,961},{138,0,962},{138,10,220},{6,0,1891},{6,0,1893},{9,0,
-916},{9,0,965},{9,0,972},{12,0,801},{12,0,859},{12,0,883},{15,0,226},{149,0,51},
-{132,10,109},{135,11,267},{7,11,92},{7,11,182},{8,11,453},{9,11,204},{11,11,950}
-,{12,11,94},{12,11,644},{16,11,20},{16,11,70},{16,11,90},{147,11,55},{134,10,
-1746},{6,11,71},{7,11,845},{7,11,1308},{8,11,160},{137,11,318},{5,0,101},{6,0,88
-},{7,0,263},{7,0,628},{7,0,1677},{8,0,349},{9,0,100},{10,0,677},{14,0,169},{14,0
-,302},{14,0,313},{15,0,48},{15,0,84},{7,11,237},{8,11,664},{9,11,42},{9,11,266},
-{9,11,380},{9,11,645},{10,11,177},{138,11,276},{138,11,69},{4,0,310},{7,0,708},{
-7,0,996},{9,0,795},{10,0,390},{10,0,733},{11,0,451},{12,0,249},{14,0,115},{14,0,
-286},{143,0,100},{5,0,587},{4,10,40},{10,10,67},{11,10,117},{11,10,768},{139,10,
-935},{6,0,1942},{7,0,512},{136,0,983},{7,10,992},{8,10,301},{9,10,722},{12,10,63
-},{13,10,29},{14,10,161},{143,10,18},{136,11,76},{139,10,923},{134,0,645},{134,0
-,851},{4,0,498},{132,11,293},{7,0,217},{8,0,140},{10,0,610},{14,11,352},{17,11,
-53},{18,11,146},{18,11,152},{19,11,11},{150,11,54},{134,0,1448},{138,11,841},{
-133,0,905},{4,11,605},{7,11,518},{7,11,1282},{7,11,1918},{10,11,180},{139,11,218
-},{139,11,917},{135,10,825},{140,10,328},{4,0,456},{7,0,105},{7,0,358},{7,0,1637
-},{8,0,643},{139,0,483},{134,0,792},{6,11,96},{135,11,1426},{137,11,691},{4,11,
-651},{133,11,289},{7,11,688},{8,11,35},{9,11,511},{10,11,767},{147,11,118},{150,
-0,56},{5,0,243},{5,0,535},{6,10,204},{10,10,320},{10,10,583},{13,10,502},{14,10,
-72},{14,10,274},{14,10,312},{14,10,344},{15,10,159},{16,10,62},{16,10,69},{17,10
-,30},{18,10,42},{18,10,53},{18,10,84},{18,10,140},{19,10,68},{19,10,85},{20,10,5
-},{20,10,45},{20,10,101},{22,10,7},{150,10,20},{4,10,558},{6,10,390},{7,10,162},
-{7,10,689},{9,10,360},{138,10,653},{146,11,23},{135,0,1748},{5,10,856},{6,10,
-1672},{6,10,1757},{134,10,1781},{5,0,539},{5,0,754},{6,0,876},{132,11,704},{135,
-11,1078},{5,10,92},{10,10,736},{140,10,102},{17,0,91},{5,10,590},{137,10,213},{
-134,0,1565},{6,0,91},{135,0,435},{4,0,939},{140,0,792},{134,0,1399},{4,0,16},{5,
-0,316},{5,0,842},{6,0,370},{6,0,1778},{8,0,166},{11,0,812},{12,0,206},{12,0,351}
-,{14,0,418},{16,0,15},{16,0,34},{18,0,3},{19,0,3},{19,0,7},{20,0,4},{21,0,21},{4
-,11,720},{133,11,306},{144,0,95},{133,11,431},{132,11,234},{135,0,551},{4,0,999}
-,{6,0,1966},{134,0,2042},{7,0,619},{10,0,547},{11,0,122},{12,0,601},{15,0,7},{
-148,0,20},{5,11,464},{6,11,236},{7,11,276},{7,11,696},{7,11,914},{7,11,1108},{7,
-11,1448},{9,11,15},{9,11,564},{10,11,14},{12,11,565},{13,11,449},{14,11,53},{15,
-11,13},{16,11,64},{145,11,41},{6,0,884},{6,0,1019},{134,0,1150},{6,11,1767},{12,
-11,194},{145,11,107},{136,10,503},{133,11,840},{7,0,671},{134,10,466},{132,0,888
-},{4,0,149},{138,0,368},{4,0,154},{7,0,1134},{136,0,105},{135,0,983},{9,11,642},
-{11,11,236},{142,11,193},{4,0,31},{6,0,429},{7,0,962},{9,0,458},{139,0,691},{6,0
-,643},{134,0,1102},{132,0,312},{4,11,68},{5,11,634},{6,11,386},{7,11,794},{8,11,
-273},{9,11,563},{10,11,105},{10,11,171},{11,11,94},{139,11,354},{133,0,740},{135
-,0,1642},{4,11,95},{7,11,416},{8,11,211},{139,11,830},{132,0,236},{138,10,241},{
-7,11,731},{13,11,20},{143,11,11},{5,0,836},{5,0,857},{6,0,1680},{135,0,59},{10,0
-,68},{11,0,494},{152,11,6},{4,0,81},{139,0,867},{135,0,795},{133,11,689},{4,0,
-1001},{5,0,282},{6,0,1932},{6,0,1977},{6,0,1987},{6,0,1992},{8,0,650},{8,0,919},
-{8,0,920},{8,0,923},{8,0,926},{8,0,927},{8,0,931},{8,0,939},{8,0,947},{8,0,956},
-{8,0,997},{9,0,907},{10,0,950},{10,0,953},{10,0,954},{10,0,956},{10,0,958},{10,0
-,959},{10,0,964},{10,0,970},{10,0,972},{10,0,973},{10,0,975},{10,0,976},{10,0,
-980},{10,0,981},{10,0,984},{10,0,988},{10,0,990},{10,0,995},{10,0,999},{10,0,
-1002},{10,0,1003},{10,0,1005},{10,0,1006},{10,0,1008},{10,0,1009},{10,0,1012},{
-10,0,1014},{10,0,1015},{10,0,1019},{10,0,1020},{10,0,1022},{12,0,959},{12,0,961}
-,{12,0,962},{12,0,963},{12,0,964},{12,0,965},{12,0,967},{12,0,968},{12,0,969},{
-12,0,970},{12,0,971},{12,0,972},{12,0,973},{12,0,974},{12,0,975},{12,0,976},{12,
-0,977},{12,0,979},{12,0,981},{12,0,982},{12,0,983},{12,0,984},{12,0,985},{12,0,
-986},{12,0,987},{12,0,989},{12,0,990},{12,0,992},{12,0,993},{12,0,995},{12,0,998
-},{12,0,999},{12,0,1000},{12,0,1001},{12,0,1002},{12,0,1004},{12,0,1005},{12,0,
-1006},{12,0,1007},{12,0,1008},{12,0,1009},{12,0,1010},{12,0,1011},{12,0,1012},{
-12,0,1014},{12,0,1015},{12,0,1016},{12,0,1017},{12,0,1018},{12,0,1019},{12,0,
-1022},{12,0,1023},{14,0,475},{14,0,477},{14,0,478},{14,0,479},{14,0,480},{14,0,
-482},{14,0,483},{14,0,484},{14,0,485},{14,0,486},{14,0,487},{14,0,488},{14,0,489
-},{14,0,490},{14,0,491},{14,0,492},{14,0,493},{14,0,494},{14,0,495},{14,0,496},{
-14,0,497},{14,0,498},{14,0,499},{14,0,500},{14,0,501},{14,0,502},{14,0,503},{14,
-0,504},{14,0,506},{14,0,507},{14,0,508},{14,0,509},{14,0,510},{14,0,511},{16,0,
-113},{16,0,114},{16,0,115},{16,0,117},{16,0,118},{16,0,119},{16,0,121},{16,0,122
-},{16,0,123},{16,0,124},{16,0,125},{16,0,126},{16,0,127},{18,0,242},{18,0,243},{
-18,0,244},{18,0,245},{18,0,248},{18,0,249},{18,0,250},{18,0,251},{18,0,252},{18,
-0,253},{18,0,254},{18,0,255},{20,0,125},{20,0,126},{148,0,127},{7,11,1717},{7,11
-,1769},{138,11,546},{7,11,1127},{7,11,1572},{10,11,297},{10,11,422},{11,11,764},
-{11,11,810},{12,11,264},{13,11,102},{13,11,300},{13,11,484},{14,11,147},{14,11,
-229},{17,11,71},{18,11,118},{147,11,120},{6,0,1148},{134,0,1586},{132,0,775},{
-135,10,954},{133,11,864},{133,11,928},{138,11,189},{135,10,1958},{6,10,549},{8,
-10,34},{8,10,283},{9,10,165},{138,10,475},{5,10,652},{5,10,701},{135,10,449},{
-135,11,695},{4,10,655},{7,10,850},{17,10,75},{146,10,137},{140,11,682},{133,11,
-523},{8,0,970},{136,10,670},{136,11,555},{7,11,76},{8,11,44},{9,11,884},{10,11,
-580},{11,11,399},{11,11,894},{15,11,122},{18,11,144},{147,11,61},{6,10,159},{6,
-10,364},{7,10,516},{7,10,1439},{137,10,518},{4,0,71},{5,0,376},{7,0,119},{138,0,
-665},{141,10,151},{11,0,827},{14,0,34},{143,0,148},{133,11,518},{4,0,479},{135,
-11,1787},{135,11,1852},{135,10,993},{7,0,607},{136,0,99},{134,0,1960},{132,0,793
-},{4,0,41},{5,0,74},{7,0,1627},{11,0,871},{140,0,619},{7,0,94},{11,0,329},{11,0,
-965},{12,0,241},{14,0,354},{15,0,22},{148,0,63},{7,10,501},{9,10,111},{10,10,141
-},{11,10,332},{13,10,43},{13,10,429},{14,10,130},{14,10,415},{145,10,102},{9,0,
-209},{137,0,300},{134,0,1497},{138,11,255},{4,11,934},{5,11,138},{136,11,610},{
-133,0,98},{6,0,1316},{10,11,804},{138,11,832},{8,11,96},{9,11,36},{10,11,607},{
-11,11,423},{11,11,442},{12,11,309},{14,11,199},{15,11,90},{145,11,110},{132,0,
-463},{5,10,149},{136,10,233},{133,10,935},{4,11,652},{8,11,320},{9,11,13},{9,11,
-398},{9,11,727},{10,11,75},{10,11,184},{10,11,230},{10,11,564},{10,11,569},{11,
-11,973},{12,11,70},{12,11,189},{13,11,57},{13,11,257},{22,11,6},{150,11,16},{142
-,0,291},{12,10,582},{146,10,131},{136,10,801},{133,0,984},{145,11,116},{4,11,692
-},{133,11,321},{4,0,182},{6,0,205},{135,0,220},{4,0,42},{9,0,205},{9,0,786},{138
-,0,659},{6,0,801},{11,11,130},{140,11,609},{132,0,635},{5,11,345},{135,11,1016},
-{139,0,533},{132,0,371},{4,0,272},{135,0,836},{6,0,1282},{135,11,1100},{5,0,825}
-,{134,0,1640},{135,11,1325},{133,11,673},{4,11,287},{133,11,1018},{135,0,357},{6
-,0,467},{137,0,879},{7,0,317},{135,0,569},{6,0,924},{134,0,1588},{5,11,34},{5,10
-,406},{10,11,724},{12,11,444},{13,11,354},{18,11,32},{23,11,24},{23,11,31},{152,
-11,5},{6,0,1795},{6,0,1835},{6,0,1836},{6,0,1856},{8,0,844},{8,0,849},{8,0,854},
-{8,0,870},{8,0,887},{10,0,852},{138,0,942},{6,10,69},{135,10,117},{137,0,307},{4
-,0,944},{6,0,1799},{6,0,1825},{10,0,848},{10,0,875},{10,0,895},{10,0,899},{10,0,
-902},{140,0,773},{11,0,43},{13,0,72},{141,0,142},{135,10,1830},{134,11,382},{4,
-10,432},{135,10,824},{132,11,329},{7,0,1820},{139,11,124},{133,10,826},{133,0,
-525},{132,11,906},{7,11,1940},{136,11,366},{138,11,10},{4,11,123},{4,11,649},{5,
-11,605},{7,11,1509},{136,11,36},{6,0,110},{135,0,1681},{133,0,493},{133,11,767},
-{4,0,174},{135,0,911},{138,11,786},{8,0,417},{137,0,782},{133,10,1000},{7,0,733}
-,{137,0,583},{4,10,297},{6,10,529},{7,10,152},{7,10,713},{7,10,1845},{8,10,710},
-{8,10,717},{12,10,639},{140,10,685},{4,0,32},{5,0,215},{6,0,269},{7,0,1782},{7,0
-,1892},{10,0,16},{11,0,822},{11,0,954},{141,0,481},{4,11,273},{5,11,658},{133,11
-,995},{136,0,477},{134,11,72},{135,11,1345},{5,0,308},{7,0,1088},{4,10,520},{135
-,10,575},{133,11,589},{5,0,126},{8,0,297},{9,0,366},{140,0,374},{7,0,1551},{139,
-0,361},{5,11,117},{6,11,514},{6,11,541},{7,11,1164},{7,11,1436},{8,11,220},{8,11
-,648},{10,11,688},{139,11,560},{133,11,686},{4,0,946},{6,0,1807},{8,0,871},{10,0
-,854},{10,0,870},{10,0,888},{10,0,897},{10,0,920},{12,0,722},{12,0,761},{12,0,
-763},{12,0,764},{14,0,454},{14,0,465},{16,0,107},{18,0,167},{18,0,168},{146,0,
-172},{132,0,175},{135,0,1307},{132,0,685},{135,11,1834},{133,0,797},{6,0,745},{6
-,0,858},{134,0,963},{133,0,565},{5,10,397},{6,10,154},{7,11,196},{7,10,676},{8,
-10,443},{8,10,609},{9,10,24},{9,10,325},{10,10,35},{10,11,765},{11,11,347},{11,
-10,535},{11,11,552},{11,11,576},{11,10,672},{11,11,790},{11,10,1018},{12,11,263}
-,{12,10,637},{13,11,246},{13,11,270},{13,11,395},{14,11,74},{14,11,176},{14,11,
-190},{14,11,398},{14,11,412},{15,11,32},{15,11,63},{16,10,30},{16,11,88},{147,11
-,105},{13,11,84},{141,11,122},{4,0,252},{7,0,1068},{10,0,434},{11,0,228},{11,0,
-426},{13,0,231},{18,0,106},{148,0,87},{137,0,826},{4,11,589},{139,11,282},{5,11,
-381},{135,11,1792},{132,0,791},{5,0,231},{10,0,509},{133,10,981},{7,0,601},{9,0,
-277},{9,0,674},{10,0,178},{10,0,418},{10,0,571},{11,0,531},{12,0,113},{12,0,475}
-,{13,0,99},{142,0,428},{4,10,56},{7,11,616},{7,10,1791},{8,10,607},{8,10,651},{
-10,11,413},{11,10,465},{11,10,835},{12,10,337},{141,10,480},{7,0,1591},{144,0,43
-},{9,10,158},{138,10,411},{135,0,1683},{8,0,289},{11,0,45},{12,0,278},{140,0,537
-},{6,11,120},{7,11,1188},{7,11,1710},{8,11,286},{9,11,667},{11,11,592},{139,11,
-730},{136,10,617},{135,0,1120},{135,11,1146},{139,10,563},{4,11,352},{4,10,369},
-{135,11,687},{143,11,38},{4,0,399},{5,0,119},{5,0,494},{7,0,751},{9,0,556},{14,
-11,179},{15,11,151},{150,11,11},{4,11,192},{5,11,49},{6,11,200},{6,11,293},{6,11
-,1696},{135,11,488},{4,0,398},{133,0,660},{7,0,1030},{134,10,622},{135,11,595},{
-141,0,168},{132,11,147},{7,0,973},{10,10,624},{142,10,279},{132,10,363},{132,0,
-642},{133,11,934},{134,0,1615},{7,11,505},{135,11,523},{7,0,594},{7,0,851},{7,0,
-1858},{9,0,411},{9,0,574},{9,0,666},{9,0,737},{10,0,346},{10,0,712},{11,0,246},{
-11,0,432},{11,0,517},{11,0,647},{11,0,679},{11,0,727},{12,0,304},{12,0,305},{12,
-0,323},{12,0,483},{12,0,572},{12,0,593},{12,0,602},{13,0,95},{13,0,101},{13,0,
-171},{13,0,315},{13,0,378},{13,0,425},{13,0,475},{14,0,63},{14,0,380},{14,0,384}
-,{15,0,133},{18,0,112},{148,0,72},{135,0,1093},{132,0,679},{8,0,913},{10,0,903},
-{10,0,915},{12,0,648},{12,0,649},{14,0,455},{16,0,112},{138,11,438},{137,0,203},
-{134,10,292},{134,0,1492},{7,0,1374},{8,0,540},{5,10,177},{6,10,616},{7,10,827},
-{9,10,525},{138,10,656},{135,0,1486},{9,0,714},{138,10,31},{136,0,825},{134,0,
-1511},{132,11,637},{134,0,952},{4,10,161},{133,10,631},{5,0,143},{5,0,769},{6,0,
-1760},{7,0,682},{7,0,1992},{136,0,736},{132,0,700},{134,0,1540},{132,11,777},{9,
-11,867},{138,11,837},{7,0,1557},{135,10,1684},{133,0,860},{6,0,422},{7,0,0},{7,0
-,1544},{9,0,605},{11,0,990},{12,0,235},{12,0,453},{13,0,47},{13,0,266},{9,10,469
-},{9,10,709},{12,10,512},{14,10,65},{145,10,12},{11,0,807},{10,10,229},{11,10,73
-},{139,10,376},{6,11,170},{7,11,1080},{8,11,395},{8,11,487},{11,11,125},{141,11,
-147},{5,0,515},{137,0,131},{7,0,1605},{11,0,962},{146,0,139},{132,0,646},{4,0,
-396},{7,0,728},{9,0,117},{13,0,202},{148,0,51},{6,0,121},{6,0,124},{6,0,357},{7,
-0,1138},{7,0,1295},{8,0,162},{8,0,508},{11,0,655},{4,11,535},{6,10,558},{7,10,
-651},{8,11,618},{9,10,0},{10,10,34},{139,10,1008},{135,11,1245},{138,0,357},{150
-,11,23},{133,0,237},{135,0,1784},{7,10,1832},{138,10,374},{132,0,713},{132,11,46
-},{6,0,1536},{10,0,348},{5,11,811},{6,11,1679},{6,11,1714},{135,11,2032},{11,11,
-182},{142,11,195},{6,0,523},{7,0,738},{7,10,771},{7,10,1731},{9,10,405},{138,10,
-421},{7,11,1458},{9,11,407},{139,11,15},{6,11,34},{7,11,69},{7,11,640},{7,11,
-1089},{8,11,708},{8,11,721},{9,11,363},{9,11,643},{10,11,628},{148,11,98},{133,0
-,434},{135,0,1877},{7,0,571},{138,0,366},{5,10,881},{133,10,885},{9,0,513},{10,0
-,25},{10,0,39},{12,0,122},{140,0,187},{132,0,580},{5,10,142},{134,10,546},{132,
-11,462},{137,0,873},{5,10,466},{11,10,571},{12,10,198},{13,10,283},{14,10,186},{
-15,10,21},{143,10,103},{7,0,171},{4,10,185},{5,10,257},{5,10,839},{5,10,936},{9,
-10,399},{10,10,258},{10,10,395},{10,10,734},{11,10,1014},{12,10,23},{13,10,350},
-{14,10,150},{147,10,6},{134,0,625},{7,0,107},{7,0,838},{8,0,550},{138,0,401},{5,
-11,73},{6,11,23},{134,11,338},{4,0,943},{6,0,1850},{12,0,713},{142,0,434},{11,0,
-588},{11,0,864},{11,0,936},{11,0,968},{12,0,73},{12,0,343},{12,0,394},{13,0,275}
-,{14,0,257},{15,0,160},{7,10,404},{7,10,1377},{7,10,1430},{7,10,2017},{8,10,149}
-,{8,10,239},{8,10,512},{8,10,793},{8,10,818},{9,10,474},{9,10,595},{10,10,122},{
-10,10,565},{10,10,649},{10,10,783},{11,10,239},{11,10,295},{11,10,447},{11,10,
-528},{11,10,639},{11,10,800},{12,10,25},{12,10,157},{12,10,316},{12,10,390},{12,
-10,391},{12,10,395},{12,10,478},{12,10,503},{12,10,592},{12,10,680},{13,10,50},{
-13,10,53},{13,10,132},{13,10,198},{13,10,322},{13,10,415},{13,10,511},{14,10,71}
-,{14,10,395},{15,10,71},{15,10,136},{17,10,123},{18,10,93},{147,10,58},{133,0,
-768},{11,0,103},{142,0,0},{136,10,712},{132,0,799},{132,0,894},{7,11,725},{8,11,
-498},{139,11,268},{135,11,1798},{135,11,773},{141,11,360},{4,10,377},{152,10,13}
-,{135,0,1673},{132,11,583},{134,0,1052},{133,11,220},{140,11,69},{132,11,544},{4
-,10,180},{135,10,1906},{134,0,272},{4,0,441},{134,0,1421},{4,0,9},{5,0,128},{7,0
-,368},{11,0,480},{148,0,3},{5,11,176},{6,11,437},{6,11,564},{11,11,181},{141,11,
-183},{132,10,491},{7,0,1182},{141,11,67},{6,0,1346},{4,10,171},{138,10,234},{4,
-10,586},{7,10,1186},{138,10,631},{136,0,682},{134,0,1004},{15,0,24},{143,11,24},
-{134,0,968},{4,0,2},{6,0,742},{6,0,793},{7,0,545},{7,0,894},{9,10,931},{10,10,
-334},{148,10,71},{136,11,600},{133,10,765},{9,0,769},{140,0,185},{4,11,790},{5,
-11,273},{134,11,394},{7,0,474},{137,0,578},{4,11,135},{6,11,127},{7,11,1185},{7,
-11,1511},{8,11,613},{11,11,5},{12,11,133},{12,11,495},{12,11,586},{14,11,385},{
-15,11,118},{17,11,20},{146,11,98},{133,10,424},{5,0,530},{142,0,113},{6,11,230},
-{7,11,961},{7,11,1085},{136,11,462},{7,11,1954},{137,11,636},{136,10,714},{149,
-11,6},{135,10,685},{9,10,420},{10,10,269},{10,10,285},{10,10,576},{11,10,397},{
-13,10,175},{145,10,90},{132,10,429},{5,0,556},{5,11,162},{136,11,68},{132,11,654
-},{4,11,156},{7,11,998},{7,11,1045},{7,11,1860},{9,11,48},{9,11,692},{11,11,419}
-,{139,11,602},{6,0,1317},{8,0,16},{9,0,825},{12,0,568},{7,11,1276},{8,11,474},{
-137,11,652},{18,0,97},{7,10,18},{7,10,699},{7,10,1966},{8,10,752},{9,10,273},{9,
-10,412},{9,10,703},{10,10,71},{10,10,427},{138,10,508},{10,0,703},{7,11,1454},{
-138,11,703},{4,10,53},{5,10,186},{135,10,752},{134,0,892},{134,0,1571},{8,10,575
-},{10,10,289},{139,10,319},{6,0,186},{137,0,426},{134,0,1101},{132,10,675},{132,
-0,585},{6,0,1870},{137,0,937},{152,11,10},{9,11,197},{10,11,300},{12,11,473},{13
-,11,90},{141,11,405},{4,0,93},{5,0,252},{6,0,229},{7,0,291},{9,0,550},{139,0,644
-},{137,0,749},{9,0,162},{6,10,209},{8,10,468},{9,10,210},{11,10,36},{12,10,28},{
-12,10,630},{13,10,21},{13,10,349},{14,10,7},{145,10,13},{132,0,381},{132,11,606}
-,{4,10,342},{135,10,1179},{7,11,1587},{7,11,1707},{10,11,528},{139,11,504},{12,
-11,39},{13,11,265},{141,11,439},{4,10,928},{133,10,910},{7,10,1838},{7,11,1978},
-{136,11,676},{6,0,762},{6,0,796},{134,0,956},{4,10,318},{4,10,496},{7,10,856},{
-139,10,654},{137,11,242},{4,11,361},{133,11,315},{132,11,461},{132,11,472},{132,
-0,857},{5,0,21},{6,0,77},{6,0,157},{7,0,974},{7,0,1301},{7,0,1339},{7,0,1490},{7
-,0,1873},{9,0,628},{7,10,915},{8,10,247},{147,10,0},{4,10,202},{5,10,382},{6,10,
-454},{7,10,936},{7,10,1803},{8,10,758},{9,10,375},{9,10,895},{10,10,743},{10,10,
-792},{11,10,978},{11,10,1012},{142,10,109},{7,11,617},{10,11,498},{11,11,501},{
-12,11,16},{140,11,150},{7,10,1150},{7,10,1425},{7,10,1453},{10,11,747},{140,10,
-513},{133,11,155},{11,0,919},{141,0,409},{138,10,791},{10,0,633},{139,11,729},{7
-,11,163},{8,11,319},{9,11,402},{10,11,24},{10,11,681},{11,11,200},{11,11,567},{
-12,11,253},{12,11,410},{142,11,219},{5,11,475},{7,11,1780},{9,11,230},{11,11,297
-},{11,11,558},{14,11,322},{147,11,76},{7,0,332},{6,10,445},{137,10,909},{135,11,
-1956},{136,11,274},{134,10,578},{135,0,1489},{135,11,1848},{5,11,944},{134,11,
-1769},{132,11,144},{136,10,766},{4,0,832},{135,10,541},{8,0,398},{9,0,681},{139,
-0,632},{136,0,645},{9,0,791},{10,0,93},{16,0,13},{17,0,23},{18,0,135},{19,0,12},
-{20,0,1},{20,0,12},{148,0,14},{6,11,247},{137,11,555},{134,0,20},{132,0,800},{
-135,0,1841},{139,10,983},{137,10,768},{132,10,584},{141,11,51},{6,0,1993},{4,11,
-620},{138,11,280},{136,0,769},{11,0,290},{11,0,665},{7,11,1810},{11,11,866},{12,
-11,103},{13,11,495},{17,11,67},{147,11,74},{134,0,1426},{139,0,60},{4,10,326},{
-135,10,1770},{7,0,1874},{9,0,641},{132,10,226},{6,0,644},{5,10,426},{8,10,30},{9
-,10,2},{11,10,549},{147,10,122},{5,11,428},{138,11,442},{135,11,1871},{135,0,
-1757},{147,10,117},{135,0,937},{135,0,1652},{6,0,654},{134,0,1476},{133,11,99},{
-135,0,527},{132,10,345},{4,10,385},{4,11,397},{7,10,265},{135,10,587},{4,0,579},
-{5,0,226},{5,0,323},{135,0,960},{134,0,1486},{8,11,502},{144,11,9},{4,10,347},{5
-,10,423},{5,10,996},{135,10,1329},{7,11,727},{146,11,73},{4,11,485},{7,11,353},{
-7,10,1259},{7,11,1523},{9,10,125},{139,10,65},{6,0,325},{5,10,136},{6,11,366},{7
-,11,1384},{7,11,1601},{136,10,644},{138,11,160},{6,0,1345},{137,11,282},{18,0,91
-},{147,0,70},{136,0,404},{4,11,157},{133,11,471},{133,0,973},{6,0,135},{135,0,
-1176},{8,11,116},{11,11,551},{142,11,159},{4,0,549},{4,10,433},{133,10,719},{136
-,0,976},{5,11,160},{7,11,363},{7,11,589},{10,11,170},{141,11,55},{144,0,21},{144
-,0,51},{135,0,314},{135,10,1363},{4,11,108},{7,11,405},{10,11,491},{139,11,498},
-{146,0,4},{4,10,555},{8,10,536},{10,10,288},{139,10,1005},{135,11,1005},{6,0,281
-},{7,0,6},{8,0,282},{8,0,480},{8,0,499},{9,0,198},{10,0,143},{10,0,169},{10,0,
-211},{10,0,417},{10,0,574},{11,0,147},{11,0,395},{12,0,75},{12,0,407},{12,0,608}
-,{13,0,500},{142,0,251},{6,0,1093},{6,0,1405},{9,10,370},{138,10,90},{4,11,926},
-{133,11,983},{135,0,1776},{134,0,1528},{132,0,419},{132,11,538},{6,11,294},{7,11
-,1267},{136,11,624},{135,11,1772},{138,11,301},{4,10,257},{135,10,2031},{4,0,138
-},{7,0,1012},{7,0,1280},{9,0,76},{135,10,1768},{132,11,757},{5,0,29},{140,0,638}
-,{7,11,655},{135,11,1844},{7,0,1418},{6,11,257},{135,11,1522},{8,11,469},{138,11
-,47},{142,11,278},{6,10,83},{6,10,1733},{135,10,1389},{11,11,204},{11,11,243},{
-140,11,293},{135,11,1875},{6,0,1710},{135,0,2038},{137,11,299},{4,0,17},{5,0,23}
-,{7,0,995},{11,0,383},{11,0,437},{12,0,460},{140,0,532},{133,0,862},{137,10,696}
-,{6,0,592},{138,0,946},{138,11,599},{7,10,1718},{9,10,95},{9,10,274},{10,10,279}
-,{10,10,317},{10,10,420},{11,10,303},{11,10,808},{12,10,134},{12,10,367},{13,10,
-149},{13,10,347},{14,10,349},{14,10,406},{18,10,22},{18,10,89},{18,10,122},{147,
-10,47},{8,0,70},{12,0,171},{141,0,272},{133,10,26},{132,10,550},{137,0,812},{10,
-0,233},{139,0,76},{134,0,988},{134,0,442},{136,10,822},{7,0,896},{4,10,902},{5,
-10,809},{134,10,122},{5,11,150},{7,11,106},{8,11,603},{9,11,593},{9,11,634},{10,
-11,44},{10,11,173},{11,11,462},{11,11,515},{13,11,216},{13,11,288},{142,11,400},
-{136,0,483},{135,10,262},{6,0,1709},{133,10,620},{4,10,34},{5,10,574},{7,10,279}
-,{7,10,1624},{136,10,601},{137,10,170},{147,0,119},{12,11,108},{141,11,291},{11,
-0,69},{12,0,105},{12,0,117},{13,0,213},{14,0,13},{14,0,62},{14,0,177},{14,0,421}
-,{15,0,19},{146,0,141},{137,0,309},{11,11,278},{142,11,73},{7,0,608},{7,0,976},{
-9,0,146},{10,0,206},{10,0,596},{13,0,218},{142,0,153},{133,10,332},{6,10,261},{8
-,10,182},{139,10,943},{4,11,493},{144,11,55},{134,10,1721},{132,0,768},{4,10,933
-},{133,10,880},{7,11,555},{7,11,1316},{7,11,1412},{7,11,1839},{9,11,192},{9,11,
-589},{11,11,241},{11,11,676},{11,11,811},{11,11,891},{12,11,140},{12,11,346},{12
-,11,479},{13,11,30},{13,11,49},{13,11,381},{14,11,188},{15,11,150},{16,11,76},{
-18,11,30},{148,11,52},{4,0,518},{135,0,1136},{6,11,568},{7,11,112},{7,11,1804},{
-8,11,362},{8,11,410},{8,11,830},{9,11,514},{11,11,649},{142,11,157},{135,11,673}
-,{8,0,689},{137,0,863},{4,0,18},{7,0,145},{7,0,444},{7,0,1278},{8,0,49},{8,0,400
-},{9,0,71},{9,0,250},{10,0,459},{12,0,160},{16,0,24},{132,11,625},{140,0,1020},{
-4,0,997},{6,0,1946},{6,0,1984},{134,0,1998},{6,11,16},{6,11,158},{7,11,43},{7,11
-,129},{7,11,181},{8,11,276},{8,11,377},{10,11,523},{11,11,816},{12,11,455},{13,
-11,303},{142,11,135},{133,10,812},{134,0,658},{4,11,1},{7,11,1143},{7,11,1463},{
-8,11,61},{9,11,207},{9,11,390},{9,11,467},{139,11,836},{150,11,26},{140,0,106},{
-6,0,1827},{10,0,931},{18,0,166},{20,0,114},{4,10,137},{7,10,1178},{7,11,1319},{
-135,10,1520},{133,0,1010},{4,11,723},{5,11,895},{7,11,1031},{8,11,199},{8,11,340
-},{9,11,153},{9,11,215},{10,11,21},{10,11,59},{10,11,80},{10,11,224},{11,11,229}
-,{11,11,652},{12,11,192},{13,11,146},{142,11,91},{132,11,295},{6,11,619},{7,11,
-898},{7,11,1092},{8,11,485},{18,11,28},{147,11,116},{137,11,51},{6,10,1661},{7,
-10,1975},{7,10,2009},{135,10,2011},{5,11,309},{140,11,211},{5,0,87},{7,0,313},{7
-,0,1103},{10,0,208},{10,0,582},{11,0,389},{11,0,813},{12,0,385},{13,0,286},{14,0
-,124},{146,0,108},{5,11,125},{8,11,77},{138,11,15},{132,0,267},{133,0,703},{137,
-11,155},{133,11,439},{11,11,164},{140,11,76},{9,0,496},{5,10,89},{7,10,1915},{9,
-10,185},{9,10,235},{10,10,64},{10,10,270},{10,10,403},{10,10,469},{10,10,529},{
-10,10,590},{11,10,140},{11,10,860},{13,10,1},{13,10,422},{14,10,341},{14,10,364}
-,{17,10,93},{18,10,113},{19,10,97},{147,10,113},{133,10,695},{135,0,1121},{5,10,
-6},{6,10,183},{7,10,680},{7,10,978},{7,10,1013},{7,10,1055},{12,10,230},{13,10,
-172},{146,10,29},{4,11,8},{7,11,1152},{7,11,1153},{7,11,1715},{9,11,374},{10,11,
-478},{139,11,648},{135,11,1099},{6,10,29},{139,10,63},{4,0,561},{10,0,249},{139,
-0,209},{132,0,760},{7,11,799},{138,11,511},{136,11,87},{9,0,154},{140,0,485},{
-136,0,255},{132,0,323},{140,0,419},{132,10,311},{134,10,1740},{4,0,368},{135,0,
-641},{7,10,170},{8,10,90},{8,10,177},{8,10,415},{11,10,714},{142,10,281},{4,11,
-69},{5,11,122},{9,11,656},{138,11,464},{5,11,849},{134,11,1633},{8,0,522},{142,0
-,328},{11,10,91},{13,10,129},{15,10,101},{145,10,125},{7,0,562},{8,0,551},{4,10,
-494},{6,10,74},{7,10,44},{11,11,499},{12,10,17},{15,10,5},{148,10,11},{4,10,276}
-,{133,10,296},{9,0,92},{147,0,91},{4,10,7},{5,10,90},{5,10,158},{6,10,542},{7,10
-,221},{7,10,1574},{9,10,490},{10,10,540},{11,10,443},{139,10,757},{6,0,525},{6,0
-,1976},{8,0,806},{9,0,876},{140,0,284},{5,11,859},{7,10,588},{7,11,1160},{8,11,
-107},{9,10,175},{9,11,291},{9,11,439},{10,10,530},{10,11,663},{11,11,609},{140,
-11,197},{7,11,168},{13,11,196},{141,11,237},{139,0,958},{133,0,594},{135,10,580}
-,{7,10,88},{136,10,627},{6,0,479},{6,0,562},{7,0,1060},{13,0,6},{5,10,872},{6,10
-,57},{7,10,471},{9,10,447},{137,10,454},{136,11,413},{145,11,19},{4,11,117},{6,
-11,372},{7,11,1905},{142,11,323},{4,11,722},{139,11,471},{17,0,61},{5,10,31},{
-134,10,614},{8,10,330},{140,10,477},{7,10,1200},{138,10,460},{6,10,424},{135,10,
-1866},{6,0,1641},{136,0,820},{6,0,1556},{134,0,1618},{9,11,5},{12,11,216},{12,11
-,294},{12,11,298},{12,11,400},{12,11,518},{13,11,229},{143,11,139},{15,11,155},{
-144,11,79},{4,0,302},{135,0,1766},{5,10,13},{134,10,142},{6,0,148},{7,0,1313},{7
-,10,116},{8,10,322},{8,10,755},{9,10,548},{10,10,714},{11,10,884},{141,10,324},{
-137,0,676},{9,11,88},{139,11,270},{5,11,12},{7,11,375},{137,11,438},{134,0,1674}
-,{7,10,1472},{135,10,1554},{11,0,178},{7,10,1071},{7,10,1541},{7,10,1767},{7,10,
-1806},{11,10,162},{11,10,242},{12,10,605},{15,10,26},{144,10,44},{6,0,389},{7,0,
-149},{9,0,142},{138,0,94},{140,11,71},{145,10,115},{6,0,8},{7,0,1881},{8,0,91},{
-11,11,966},{12,11,287},{13,11,342},{13,11,402},{15,11,110},{143,11,163},{4,11,
-258},{136,11,639},{6,11,22},{7,11,903},{138,11,577},{133,11,681},{135,10,1111},{
-135,11,1286},{9,0,112},{8,10,1},{138,10,326},{5,10,488},{6,10,527},{7,10,489},{7
-,10,1636},{8,10,121},{8,10,144},{8,10,359},{9,10,193},{9,10,241},{9,10,336},{9,
-10,882},{11,10,266},{11,10,372},{11,10,944},{12,10,401},{140,10,641},{4,11,664},
-{133,11,804},{6,0,747},{134,0,1015},{135,0,1746},{9,10,31},{10,10,244},{10,10,
-699},{12,10,149},{141,10,497},{133,10,377},{135,0,24},{6,0,1352},{5,11,32},{145,
-10,101},{7,0,1530},{10,0,158},{13,0,13},{13,0,137},{13,0,258},{14,0,111},{14,0,
-225},{14,0,253},{14,0,304},{14,0,339},{14,0,417},{146,0,33},{4,0,503},{135,0,
-1661},{5,0,130},{6,0,845},{7,0,1314},{9,0,610},{10,0,718},{11,0,601},{11,0,819},
-{11,0,946},{140,0,536},{10,0,149},{11,0,280},{142,0,336},{134,0,1401},{135,0,
-1946},{8,0,663},{144,0,8},{134,0,1607},{135,10,2023},{4,11,289},{7,11,629},{7,11
-,1698},{7,11,1711},{140,11,215},{6,11,450},{136,11,109},{10,0,882},{10,0,883},{
-10,0,914},{138,0,928},{133,10,843},{136,11,705},{132,10,554},{133,10,536},{5,0,
-417},{9,10,79},{11,10,625},{145,10,7},{7,11,1238},{142,11,37},{4,0,392},{135,0,
-1597},{5,0,433},{9,0,633},{11,0,629},{132,10,424},{7,10,336},{136,10,785},{134,
-11,355},{6,0,234},{7,0,769},{9,0,18},{138,0,358},{4,10,896},{134,10,1777},{138,
-11,323},{7,0,140},{7,0,1950},{8,0,680},{11,0,817},{147,0,88},{7,0,1222},{138,0,
-386},{139,11,908},{11,0,249},{12,0,313},{16,0,66},{145,0,26},{134,0,5},{7,10,750
-},{9,10,223},{11,10,27},{11,10,466},{12,10,624},{14,10,265},{146,10,61},{134,11,
-26},{134,0,1216},{5,0,963},{134,0,1773},{4,11,414},{5,11,467},{9,11,654},{10,11,
-451},{12,11,59},{141,11,375},{135,11,17},{4,10,603},{133,10,661},{4,10,11},{6,10
-,128},{7,10,231},{7,10,1533},{138,10,725},{135,11,955},{7,0,180},{8,0,509},{136,
-0,792},{132,10,476},{132,0,1002},{133,11,538},{135,10,1807},{132,0,931},{7,0,943
-},{11,0,614},{140,0,747},{135,0,1837},{9,10,20},{10,10,324},{10,10,807},{139,10,
-488},{134,0,641},{6,11,280},{10,11,502},{11,11,344},{140,11,38},{5,11,45},{7,11,
-1161},{11,11,448},{11,11,880},{13,11,139},{13,11,407},{15,11,16},{17,11,95},{18,
-11,66},{18,11,88},{18,11,123},{149,11,7},{9,0,280},{138,0,134},{22,0,22},{23,0,5
-},{151,0,29},{136,11,777},{4,0,90},{5,0,545},{7,0,754},{9,0,186},{10,0,72},{10,0
-,782},{11,0,577},{11,0,610},{11,0,960},{12,0,354},{12,0,362},{12,0,595},{4,11,
-410},{135,11,521},{135,11,1778},{5,10,112},{6,10,103},{134,10,150},{138,10,356},
-{132,0,742},{7,0,151},{9,0,329},{139,0,254},{8,0,853},{8,0,881},{8,0,911},{8,0,
-912},{10,0,872},{12,0,741},{12,0,742},{152,0,18},{4,11,573},{136,11,655},{6,0,
-921},{134,0,934},{9,0,187},{10,0,36},{11,0,1016},{17,0,44},{146,0,64},{7,0,833},
-{136,0,517},{4,0,506},{5,0,295},{135,0,1680},{4,10,708},{8,10,15},{9,10,50},{9,
-10,386},{11,10,18},{11,10,529},{140,10,228},{7,0,251},{7,0,1701},{8,0,436},{4,10
-,563},{7,10,592},{7,10,637},{7,10,770},{8,10,463},{9,10,60},{9,10,335},{9,10,904
-},{10,10,73},{11,10,434},{12,10,585},{13,10,331},{18,10,110},{148,10,60},{132,10
-,502},{136,0,584},{6,10,347},{138,10,161},{7,0,987},{9,0,688},{10,0,522},{11,0,
-788},{12,0,137},{12,0,566},{14,0,9},{14,0,24},{14,0,64},{7,11,899},{142,11,325},
-{4,0,214},{5,0,500},{5,10,102},{6,10,284},{7,10,1079},{7,10,1423},{7,10,1702},{8
-,10,470},{9,10,554},{9,10,723},{139,10,333},{7,10,246},{135,10,840},{6,10,10},{8
-,10,571},{9,10,739},{143,10,91},{133,10,626},{146,0,195},{134,0,1775},{7,0,389},
-{7,0,700},{7,0,940},{8,0,514},{9,0,116},{9,0,535},{10,0,118},{11,0,107},{11,0,
-148},{11,0,922},{12,0,254},{12,0,421},{142,0,238},{5,10,18},{6,10,526},{13,10,24
-},{13,10,110},{19,10,5},{147,10,44},{132,0,743},{11,0,292},{4,10,309},{5,10,462}
-,{7,10,970},{135,10,1097},{22,10,30},{150,10,33},{139,11,338},{135,11,1598},{7,0
-,1283},{9,0,227},{11,0,325},{11,0,408},{14,0,180},{146,0,47},{4,0,953},{6,0,1805
-},{6,0,1814},{6,0,1862},{140,0,774},{6,11,611},{135,11,1733},{135,11,1464},{5,0,
-81},{7,0,146},{7,0,1342},{8,0,53},{8,0,561},{8,0,694},{8,0,754},{9,0,115},{9,0,
-179},{9,0,894},{10,0,462},{10,0,813},{11,0,230},{11,0,657},{11,0,699},{11,0,748}
-,{12,0,119},{12,0,200},{12,0,283},{142,0,273},{5,0,408},{6,0,789},{6,0,877},{6,0
-,1253},{6,0,1413},{137,0,747},{134,10,1704},{135,11,663},{6,0,1910},{6,0,1915},{
-6,0,1923},{9,0,913},{9,0,928},{9,0,950},{9,0,954},{9,0,978},{9,0,993},{12,0,812}
-,{12,0,819},{12,0,831},{12,0,833},{12,0,838},{12,0,909},{12,0,928},{12,0,931},{
-12,0,950},{15,0,186},{15,0,187},{15,0,195},{15,0,196},{15,0,209},{15,0,215},{15,
-0,236},{15,0,241},{15,0,249},{15,0,253},{18,0,180},{18,0,221},{18,0,224},{18,0,
-227},{18,0,229},{149,0,60},{7,0,1826},{135,0,1938},{11,0,490},{18,0,143},{5,10,
-86},{7,10,743},{9,10,85},{10,10,281},{10,10,432},{12,10,251},{13,10,118},{142,10
-,378},{5,10,524},{133,10,744},{141,11,442},{10,10,107},{140,10,436},{135,11,503}
-,{134,0,1162},{132,10,927},{7,0,30},{8,0,86},{8,0,315},{8,0,700},{9,0,576},{9,0,
-858},{10,0,414},{11,0,310},{11,0,888},{11,0,904},{12,0,361},{13,0,248},{13,0,371
-},{14,0,142},{12,10,670},{146,10,94},{134,0,721},{4,11,113},{5,11,163},{5,11,735
-},{7,11,1009},{7,10,1149},{9,11,9},{9,10,156},{9,11,771},{12,11,90},{13,11,138},
-{13,11,410},{143,11,128},{138,0,839},{133,10,778},{137,0,617},{133,10,502},{8,10
-,196},{10,10,283},{139,10,406},{6,0,428},{7,0,524},{8,0,169},{8,0,234},{9,0,480}
-,{138,0,646},{133,10,855},{134,0,1648},{7,0,1205},{138,0,637},{7,0,1596},{4,11,
-935},{133,11,823},{5,11,269},{7,11,434},{7,11,891},{8,11,339},{9,11,702},{11,11,
-594},{11,11,718},{145,11,100},{7,11,878},{9,11,485},{141,11,264},{4,0,266},{8,0,
-4},{9,0,39},{10,0,166},{11,0,918},{12,0,635},{20,0,10},{22,0,27},{22,0,43},{22,0
-,52},{134,11,1713},{7,10,1400},{9,10,446},{138,10,45},{135,11,900},{132,0,862},{
-134,0,1554},{135,11,1033},{19,0,16},{147,11,16},{135,11,1208},{7,0,157},{136,0,
-279},{6,0,604},{136,0,391},{13,10,455},{15,10,99},{15,10,129},{144,10,68},{135,
-10,172},{7,0,945},{11,0,713},{139,0,744},{4,0,973},{10,0,877},{10,0,937},{10,0,
-938},{140,0,711},{139,0,1022},{132,10,568},{142,11,143},{4,0,567},{9,0,859},{132
-,10,732},{7,0,1846},{136,0,628},{136,10,733},{133,0,762},{4,10,428},{135,10,1789
-},{10,0,784},{13,0,191},{7,10,2015},{140,10,665},{133,0,298},{7,0,633},{7,0,905}
-,{7,0,909},{7,0,1538},{9,0,767},{140,0,636},{138,10,806},{132,0,795},{139,0,301}
-,{135,0,1970},{5,11,625},{135,11,1617},{135,11,275},{7,11,37},{8,11,425},{8,11,
-693},{9,11,720},{10,11,380},{10,11,638},{11,11,273},{11,11,307},{11,11,473},{12,
-11,61},{143,11,43},{135,11,198},{134,0,1236},{7,0,369},{12,0,644},{12,0,645},{
-144,0,90},{19,0,15},{149,0,27},{6,0,71},{7,0,845},{8,0,160},{9,0,318},{6,10,1623
-},{134,10,1681},{134,0,1447},{134,0,1255},{138,0,735},{8,0,76},{132,11,168},{6,
-10,1748},{8,10,715},{9,10,802},{10,10,46},{10,10,819},{13,10,308},{14,10,351},{
-14,10,363},{146,10,67},{135,11,91},{6,0,474},{4,10,63},{133,10,347},{133,10,749}
-,{138,0,841},{133,10,366},{6,0,836},{132,11,225},{135,0,1622},{135,10,89},{140,0
-,735},{134,0,1601},{138,11,145},{6,0,1390},{137,0,804},{142,0,394},{6,11,15},{7,
-11,70},{10,11,240},{147,11,93},{6,0,96},{135,0,1426},{4,0,651},{133,0,289},{7,11
-,956},{7,10,977},{7,11,1157},{7,11,1506},{7,11,1606},{7,11,1615},{7,11,1619},{7,
-11,1736},{7,11,1775},{8,11,590},{9,11,324},{9,11,736},{9,11,774},{9,11,776},{9,
-11,784},{10,11,567},{10,11,708},{11,11,518},{11,11,613},{11,11,695},{11,11,716},
-{11,11,739},{11,11,770},{11,11,771},{11,11,848},{11,11,857},{11,11,931},{11,11,
-947},{12,11,326},{12,11,387},{12,11,484},{12,11,528},{12,11,552},{12,11,613},{13
-,11,189},{13,11,256},{13,11,340},{13,11,432},{13,11,436},{13,11,440},{13,11,454}
-,{14,11,174},{14,11,220},{14,11,284},{14,11,390},{145,11,121},{7,0,688},{8,0,35}
-,{9,0,511},{10,0,767},{147,0,118},{134,0,667},{4,0,513},{5,10,824},{133,10,941},
-{7,10,440},{8,10,230},{139,10,106},{134,0,2034},{135,11,1399},{143,11,66},{135,
-11,1529},{4,11,145},{6,11,176},{7,11,395},{9,11,562},{144,11,28},{132,11,501},{
-132,0,704},{134,0,1524},{7,0,1078},{134,11,464},{6,11,509},{10,11,82},{20,11,91}
-,{151,11,13},{4,0,720},{133,0,306},{133,0,431},{7,0,1196},{4,10,914},{5,10,800},
-{133,10,852},{135,11,1189},{10,0,54},{141,10,115},{7,10,564},{142,10,168},{5,0,
-464},{6,0,236},{7,0,696},{7,0,914},{7,0,1108},{7,0,1448},{9,0,15},{9,0,564},{10,
-0,14},{12,0,565},{13,0,449},{14,0,53},{15,0,13},{16,0,64},{17,0,41},{4,10,918},{
-133,10,876},{6,0,1418},{134,10,1764},{4,10,92},{133,10,274},{134,0,907},{4,11,
-114},{8,10,501},{9,11,492},{13,11,462},{142,11,215},{4,11,77},{5,11,361},{6,11,
-139},{6,11,401},{6,11,404},{7,11,413},{7,11,715},{7,11,1716},{11,11,279},{12,11,
-179},{12,11,258},{13,11,244},{142,11,358},{6,0,1767},{12,0,194},{145,0,107},{134
-,11,1717},{5,10,743},{142,11,329},{4,10,49},{7,10,280},{135,10,1633},{5,0,840},{
-7,11,1061},{8,11,82},{11,11,250},{12,11,420},{141,11,184},{135,11,724},{134,0,
-900},{136,10,47},{134,0,1436},{144,11,0},{6,0,675},{7,0,1008},{7,0,1560},{9,0,
-642},{11,0,236},{14,0,193},{5,10,272},{5,10,908},{5,10,942},{8,10,197},{9,10,47}
-,{11,10,538},{139,10,742},{4,0,68},{5,0,628},{5,0,634},{6,0,386},{7,0,794},{8,0,
-273},{9,0,563},{10,0,105},{10,0,171},{11,0,94},{139,0,354},{135,10,1911},{137,10
-,891},{4,0,95},{6,0,1297},{6,0,1604},{7,0,416},{139,0,830},{6,11,513},{135,11,
-1052},{7,0,731},{13,0,20},{143,0,11},{137,11,899},{10,0,850},{140,0,697},{4,0,
-662},{7,11,1417},{12,11,382},{17,11,48},{152,11,12},{133,0,736},{132,0,861},{4,
-10,407},{132,10,560},{141,10,490},{6,11,545},{7,11,565},{7,11,1669},{10,11,114},
-{11,11,642},{140,11,618},{6,0,871},{134,0,1000},{5,0,864},{10,0,648},{11,0,671},
-{15,0,46},{133,11,5},{133,0,928},{11,0,90},{13,0,7},{4,10,475},{11,10,35},{13,10
-,71},{13,10,177},{142,10,422},{136,0,332},{135,11,192},{134,0,1055},{136,11,763}
-,{11,0,986},{140,0,682},{7,0,76},{8,0,44},{9,0,884},{10,0,580},{11,0,399},{11,0,
-894},{143,0,122},{135,11,1237},{135,10,636},{11,0,300},{6,10,222},{7,10,1620},{8
-,10,409},{137,10,693},{4,11,87},{5,11,250},{10,11,601},{13,11,298},{13,11,353},{
-141,11,376},{5,0,518},{10,0,340},{11,0,175},{149,0,16},{140,0,771},{6,0,1108},{
-137,0,831},{132,0,836},{135,0,1852},{4,0,957},{6,0,1804},{8,0,842},{8,0,843},{8,
-0,851},{8,0,855},{140,0,767},{135,11,814},{4,11,57},{7,11,1195},{7,11,1438},{7,
-11,1548},{7,11,1835},{7,11,1904},{9,11,757},{10,11,604},{139,11,519},{133,10,882
-},{138,0,246},{4,0,934},{5,0,202},{8,0,610},{7,11,1897},{12,11,290},{13,11,80},{
-13,11,437},{145,11,74},{8,0,96},{9,0,36},{10,0,607},{10,0,804},{10,0,832},{11,0,
-423},{11,0,442},{12,0,309},{14,0,199},{15,0,90},{145,0,110},{132,10,426},{7,0,
-654},{8,0,240},{6,10,58},{7,10,745},{7,10,1969},{8,10,675},{9,10,479},{9,10,731}
-,{10,10,330},{10,10,593},{10,10,817},{11,10,32},{11,10,133},{11,10,221},{145,10,
-68},{9,0,13},{9,0,398},{9,0,727},{10,0,75},{10,0,184},{10,0,230},{10,0,564},{10,
-0,569},{11,0,973},{12,0,70},{12,0,189},{13,0,57},{141,0,257},{4,11,209},{135,11,
-902},{7,0,391},{137,10,538},{134,0,403},{6,11,303},{7,11,335},{7,11,1437},{7,11,
-1668},{8,11,553},{8,11,652},{8,11,656},{9,11,558},{11,11,743},{149,11,18},{132,
-11,559},{11,0,75},{142,0,267},{6,0,815},{141,11,2},{141,0,366},{137,0,631},{133,
-11,1017},{5,0,345},{135,0,1016},{133,11,709},{134,11,1745},{133,10,566},{7,0,952
-},{6,10,48},{9,10,139},{10,10,399},{11,10,469},{12,10,634},{141,10,223},{133,0,
-673},{9,0,850},{7,11,8},{136,11,206},{6,0,662},{149,0,35},{4,0,287},{133,0,1018}
-,{6,10,114},{7,10,1224},{7,10,1556},{136,10,3},{8,10,576},{137,10,267},{4,0,884}
-,{5,0,34},{10,0,724},{12,0,444},{13,0,354},{18,0,32},{23,0,24},{23,0,31},{152,0,
-5},{133,10,933},{132,11,776},{138,0,151},{136,0,427},{134,0,382},{132,0,329},{9,
-0,846},{10,0,827},{138,11,33},{9,0,279},{10,0,407},{14,0,84},{22,0,18},{135,11,
-1297},{136,11,406},{132,0,906},{136,0,366},{134,0,843},{134,0,1443},{135,0,1372}
-,{138,0,992},{4,0,123},{5,0,605},{7,0,1509},{136,0,36},{132,0,649},{8,11,175},{
-10,11,168},{138,11,573},{133,0,767},{134,0,1018},{135,11,1305},{12,10,30},{13,10
-,148},{14,10,87},{14,10,182},{16,10,42},{148,10,70},{134,11,607},{4,0,273},{5,0,
-658},{133,0,995},{6,0,72},{139,11,174},{10,0,483},{12,0,368},{7,10,56},{7,10,
-1989},{8,10,337},{8,10,738},{9,10,600},{13,10,447},{142,10,92},{5,11,784},{138,
-10,666},{135,0,1345},{139,11,882},{134,0,1293},{133,0,589},{134,0,1988},{5,0,117
-},{6,0,514},{6,0,541},{7,0,1164},{7,0,1436},{8,0,220},{8,0,648},{10,0,688},{139,
-0,560},{136,0,379},{5,0,686},{7,10,866},{135,10,1163},{132,10,328},{9,11,14},{9,
-11,441},{10,11,306},{139,11,9},{4,10,101},{135,10,1171},{5,10,833},{136,10,744},
-{5,11,161},{7,11,839},{135,11,887},{7,0,196},{10,0,765},{11,0,347},{11,0,552},{
-11,0,790},{12,0,263},{13,0,246},{13,0,270},{13,0,395},{14,0,176},{14,0,190},{14,
-0,398},{14,0,412},{15,0,32},{15,0,63},{16,0,88},{147,0,105},{6,10,9},{6,10,397},
-{7,10,53},{7,10,1742},{10,10,632},{11,10,828},{140,10,146},{5,0,381},{135,0,1792
-},{134,0,1452},{135,11,429},{8,0,367},{10,0,760},{14,0,79},{20,0,17},{152,0,0},{
-7,0,616},{138,0,413},{11,10,417},{12,10,223},{140,10,265},{7,11,1611},{13,11,14}
-,{15,11,44},{19,11,13},{148,11,76},{135,0,1229},{6,0,120},{7,0,1188},{7,0,1710},
-{8,0,286},{9,0,667},{11,0,592},{139,0,730},{135,11,1814},{135,0,1146},{4,10,186}
-,{5,10,157},{8,10,168},{138,10,6},{4,0,352},{135,0,687},{4,0,192},{5,0,49},{6,0,
-200},{6,0,293},{6,0,1696},{135,0,1151},{133,10,875},{5,10,773},{5,10,991},{6,10,
-1635},{134,10,1788},{7,10,111},{136,10,581},{6,0,935},{134,0,1151},{134,0,1050},
-{132,0,650},{132,0,147},{11,0,194},{12,0,62},{12,0,88},{11,11,194},{12,11,62},{
-140,11,88},{6,0,339},{135,0,923},{134,10,1747},{7,11,643},{136,11,236},{133,0,
-934},{7,10,1364},{7,10,1907},{141,10,158},{132,10,659},{4,10,404},{135,10,675},{
-7,11,581},{9,11,644},{137,11,699},{13,0,211},{14,0,133},{14,0,204},{15,0,64},{15
-,0,69},{15,0,114},{16,0,10},{19,0,23},{19,0,35},{19,0,39},{19,0,51},{19,0,71},{
-19,0,75},{152,0,15},{133,10,391},{5,11,54},{135,11,1513},{7,0,222},{8,0,341},{5,
-10,540},{134,10,1697},{134,10,78},{132,11,744},{136,0,293},{137,11,701},{7,11,
-930},{10,11,402},{10,11,476},{13,11,452},{18,11,55},{147,11,104},{132,0,637},{
-133,10,460},{8,11,50},{137,11,624},{132,11,572},{134,0,1159},{4,10,199},{139,10,
-34},{134,0,847},{134,10,388},{6,11,43},{7,11,38},{8,11,248},{9,11,504},{138,11,
-513},{9,0,683},{4,10,511},{6,10,608},{9,10,333},{10,10,602},{11,10,441},{11,10,
-723},{11,10,976},{140,10,357},{9,0,867},{138,0,837},{6,0,944},{135,11,326},{135,
-0,1809},{5,10,938},{7,11,783},{136,10,707},{133,11,766},{133,11,363},{6,0,170},{
-7,0,1080},{8,0,395},{8,0,487},{141,0,147},{6,11,258},{140,11,409},{4,0,535},{8,0
-,618},{5,11,249},{148,11,82},{6,0,1379},{149,11,15},{135,0,1625},{150,0,23},{5,
-11,393},{6,11,378},{7,11,1981},{9,11,32},{9,11,591},{10,11,685},{10,11,741},{142
-,11,382},{133,11,788},{7,11,1968},{10,11,19},{139,11,911},{7,11,1401},{135,11,
-1476},{4,11,61},{5,11,58},{5,11,171},{5,11,635},{5,11,683},{5,11,700},{6,11,291}
-,{6,11,566},{7,11,1650},{11,11,523},{12,11,273},{12,11,303},{15,11,39},{143,11,
-111},{6,10,469},{7,10,1709},{138,10,515},{4,0,778},{134,11,589},{132,0,46},{5,0,
-811},{6,0,1679},{6,0,1714},{135,0,2032},{7,0,1458},{9,0,407},{11,0,15},{12,0,651
-},{149,0,37},{7,0,938},{132,10,500},{6,0,34},{7,0,69},{7,0,1089},{7,0,1281},{8,0
-,708},{8,0,721},{9,0,363},{148,0,98},{10,11,231},{147,11,124},{7,11,726},{152,11
-,9},{5,10,68},{134,10,383},{136,11,583},{4,11,917},{133,11,1005},{11,10,216},{
-139,10,340},{135,11,1675},{8,0,441},{10,0,314},{143,0,3},{132,11,919},{4,10,337}
-,{6,10,353},{7,10,1934},{8,10,488},{137,10,429},{7,0,889},{7,10,1795},{8,10,259}
-,{9,10,135},{9,10,177},{9,10,860},{10,10,825},{11,10,115},{11,10,370},{11,10,405
-},{11,10,604},{12,10,10},{12,10,667},{12,10,669},{13,10,76},{14,10,310},{15,10,
-76},{15,10,147},{148,10,23},{4,10,15},{4,11,255},{5,10,22},{5,11,302},{6,11,132}
-,{6,10,244},{7,10,40},{7,11,128},{7,10,200},{7,11,283},{7,10,906},{7,10,1199},{7
-,11,1299},{9,10,616},{10,11,52},{10,11,514},{10,10,716},{11,10,635},{11,10,801},
-{11,11,925},{12,10,458},{13,11,92},{142,11,309},{132,0,462},{137,11,173},{135,10
-,1735},{8,0,525},{5,10,598},{7,10,791},{8,10,108},{137,10,123},{5,0,73},{6,0,23}
-,{134,0,338},{132,0,676},{132,10,683},{7,0,725},{8,0,498},{139,0,268},{12,0,21},
-{151,0,7},{135,0,773},{4,10,155},{135,10,1689},{4,0,164},{5,0,730},{5,10,151},{5
-,10,741},{6,11,210},{7,10,498},{7,10,870},{7,10,1542},{12,10,213},{14,10,36},{14
-,10,391},{17,10,111},{18,10,6},{18,10,46},{18,10,151},{19,10,36},{20,10,32},{20,
-10,56},{20,10,69},{20,10,102},{21,10,4},{22,10,8},{22,10,10},{22,10,14},{150,10,
-31},{4,10,624},{135,10,1752},{4,0,583},{9,0,936},{15,0,214},{18,0,199},{24,0,26}
-,{134,11,588},{7,0,1462},{11,0,659},{4,11,284},{134,11,223},{133,0,220},{139,0,
-803},{132,0,544},{4,10,492},{133,10,451},{16,0,98},{148,0,119},{4,11,218},{7,11,
-526},{143,11,137},{135,10,835},{4,11,270},{5,11,192},{6,11,332},{7,11,1322},{13,
-11,9},{13,10,70},{14,11,104},{142,11,311},{132,10,539},{140,11,661},{5,0,176},{6
-,0,437},{6,0,564},{11,0,181},{141,0,183},{135,0,1192},{6,10,113},{135,10,436},{
-136,10,718},{135,10,520},{135,0,1878},{140,11,196},{7,11,379},{8,11,481},{137,11
-,377},{5,11,1003},{6,11,149},{137,11,746},{8,11,262},{9,11,627},{10,11,18},{11,
-11,214},{11,11,404},{11,11,457},{11,11,780},{11,11,849},{11,11,913},{13,11,330},
-{13,11,401},{142,11,200},{149,0,26},{136,11,304},{132,11,142},{135,0,944},{4,0,
-790},{5,0,273},{134,0,394},{134,0,855},{4,0,135},{6,0,127},{7,0,1185},{7,0,1511}
-,{8,0,613},{11,0,5},{12,0,336},{12,0,495},{12,0,586},{12,0,660},{12,0,668},{14,0
-,385},{15,0,118},{17,0,20},{146,0,98},{6,0,230},{9,0,752},{18,0,109},{12,10,610}
-,{13,10,431},{144,10,59},{7,0,1954},{135,11,925},{4,11,471},{5,11,51},{6,11,602}
-,{8,11,484},{10,11,195},{140,11,159},{132,10,307},{136,11,688},{132,11,697},{7,
-11,812},{7,11,1261},{7,11,1360},{9,11,632},{140,11,352},{5,0,162},{8,0,68},{133,
-10,964},{4,0,654},{136,11,212},{4,0,156},{7,0,998},{7,0,1045},{7,0,1860},{9,0,48
-},{9,0,692},{11,0,419},{139,0,602},{133,11,221},{4,11,373},{5,11,283},{6,11,480}
-,{135,11,609},{142,11,216},{132,0,240},{6,11,192},{9,11,793},{145,11,55},{4,10,
-75},{5,10,180},{6,10,500},{7,10,58},{7,10,710},{138,10,645},{4,11,132},{5,11,69}
-,{5,10,649},{135,11,1242},{6,10,276},{7,10,282},{7,10,879},{7,10,924},{8,10,459}
-,{9,10,599},{9,10,754},{11,10,574},{12,10,128},{12,10,494},{13,10,52},{13,10,301
-},{15,10,30},{143,10,132},{132,10,200},{4,11,111},{135,11,302},{9,0,197},{10,0,
-300},{12,0,473},{13,0,90},{141,0,405},{132,11,767},{6,11,42},{7,11,1416},{7,11,
-1590},{7,11,2005},{8,11,131},{8,11,466},{9,11,672},{13,11,252},{148,11,103},{8,0
-,958},{8,0,999},{10,0,963},{138,0,1001},{135,10,1621},{135,0,858},{4,0,606},{137
-,11,444},{6,11,44},{136,11,368},{139,11,172},{4,11,570},{133,11,120},{139,11,624
-},{7,0,1978},{8,0,676},{6,10,225},{137,10,211},{7,0,972},{11,0,102},{136,10,687}
-,{6,11,227},{135,11,1589},{8,10,58},{9,10,724},{11,10,809},{13,10,113},{145,10,
-72},{4,0,361},{133,0,315},{132,0,461},{6,10,345},{135,10,1247},{132,0,472},{8,10
-,767},{8,10,803},{9,10,301},{137,10,903},{135,11,1333},{135,11,477},{7,10,1949},
-{136,10,674},{6,0,905},{138,0,747},{133,0,155},{134,10,259},{7,0,163},{8,0,319},
-{9,0,402},{10,0,24},{10,0,681},{11,0,200},{12,0,253},{12,0,410},{142,0,219},{5,0
-,475},{7,0,1780},{9,0,230},{11,0,297},{11,0,558},{14,0,322},{19,0,76},{6,11,1667
-},{7,11,2036},{138,11,600},{136,10,254},{6,0,848},{135,0,1956},{6,11,511},{140,
-11,132},{5,11,568},{6,11,138},{135,11,1293},{6,0,631},{137,0,838},{149,0,36},{4,
-11,565},{8,11,23},{136,11,827},{5,0,944},{134,0,1769},{4,0,144},{6,0,842},{6,0,
-1400},{4,11,922},{133,11,1023},{133,10,248},{9,10,800},{10,10,693},{11,10,482},{
-11,10,734},{139,10,789},{7,11,1002},{139,11,145},{4,10,116},{5,10,95},{5,10,445}
-,{7,10,1688},{8,10,29},{9,10,272},{11,10,509},{139,10,915},{14,0,369},{146,0,72}
-,{135,10,1641},{132,11,740},{133,10,543},{140,11,116},{6,0,247},{9,0,555},{5,10,
-181},{136,10,41},{133,10,657},{136,0,996},{138,10,709},{7,0,189},{8,10,202},{138
-,10,536},{136,11,402},{4,11,716},{141,11,31},{10,0,280},{138,0,797},{9,10,423},{
-140,10,89},{8,10,113},{9,10,877},{10,10,554},{11,10,83},{12,10,136},{147,10,109}
-,{133,10,976},{7,0,746},{132,10,206},{136,0,526},{139,0,345},{136,0,1017},{8,11,
-152},{9,11,53},{9,11,268},{9,11,901},{10,11,518},{10,11,829},{11,11,188},{13,11,
-74},{14,11,46},{15,11,17},{15,11,33},{17,11,40},{18,11,36},{19,11,20},{22,11,1},
-{152,11,2},{133,11,736},{136,11,532},{5,0,428},{138,0,651},{135,11,681},{135,0,
-1162},{7,0,327},{13,0,230},{17,0,113},{8,10,226},{10,10,537},{11,10,570},{11,10,
-605},{11,10,799},{11,10,804},{12,10,85},{12,10,516},{12,10,623},{12,11,677},{13,
-10,361},{14,10,77},{14,10,78},{147,10,110},{4,0,792},{7,0,1717},{10,0,546},{132,
-10,769},{4,11,684},{136,11,384},{132,10,551},{134,0,1203},{9,10,57},{9,10,459},{
-10,10,425},{11,10,119},{12,10,184},{12,10,371},{13,10,358},{145,10,51},{5,0,672}
-,{5,10,814},{8,10,10},{9,10,421},{9,10,729},{10,10,609},{139,10,689},{138,0,189}
-,{134,10,624},{7,11,110},{7,11,188},{8,11,290},{8,11,591},{9,11,382},{9,11,649},
-{11,11,71},{11,11,155},{11,11,313},{12,11,5},{13,11,325},{142,11,287},{133,0,99}
-,{6,0,1053},{135,0,298},{7,11,360},{7,11,425},{9,11,66},{9,11,278},{138,11,644},
-{4,0,397},{136,0,555},{137,10,269},{132,10,528},{4,11,900},{133,11,861},{6,0,
-1157},{5,11,254},{7,11,985},{136,11,73},{7,11,1959},{136,11,683},{12,0,398},{20,
-0,39},{21,0,11},{150,0,41},{4,0,485},{7,0,353},{135,0,1523},{6,0,366},{7,0,1384}
-,{135,0,1601},{138,0,787},{137,0,282},{5,10,104},{6,10,173},{135,10,1631},{139,
-11,146},{4,0,157},{133,0,471},{134,0,941},{132,11,725},{7,0,1336},{8,10,138},{8,
-10,342},{9,10,84},{10,10,193},{11,10,883},{140,10,359},{134,11,196},{136,0,116},
-{133,11,831},{134,0,787},{134,10,95},{6,10,406},{10,10,409},{10,10,447},{11,10,
-44},{140,10,100},{5,0,160},{7,0,363},{7,0,589},{10,0,170},{141,0,55},{134,0,1815
-},{132,0,866},{6,0,889},{6,0,1067},{6,0,1183},{4,11,321},{134,11,569},{5,11,848}
-,{134,11,66},{4,11,36},{6,10,1636},{7,11,1387},{10,11,205},{11,11,755},{141,11,
-271},{132,0,689},{9,0,820},{4,10,282},{7,10,1034},{11,10,398},{11,10,634},{12,10
-,1},{12,10,79},{12,10,544},{14,10,237},{17,10,10},{146,10,20},{4,0,108},{7,0,804
-},{139,0,498},{132,11,887},{6,0,1119},{135,11,620},{6,11,165},{138,11,388},{5,0,
-244},{5,10,499},{6,10,476},{7,10,600},{7,10,888},{135,10,1096},{140,0,609},{135,
-0,1005},{4,0,412},{133,0,581},{4,11,719},{135,11,155},{7,10,296},{7,10,596},{8,
-10,560},{8,10,586},{9,10,612},{11,10,304},{12,10,46},{13,10,89},{14,10,112},{145
-,10,122},{4,0,895},{133,0,772},{142,11,307},{135,0,1898},{4,0,926},{133,0,983},{
-4,11,353},{6,11,146},{6,11,1789},{7,11,288},{7,11,990},{7,11,1348},{9,11,665},{9
-,11,898},{11,11,893},{142,11,212},{132,0,538},{133,11,532},{6,0,294},{7,0,1267},
-{8,0,624},{141,0,496},{7,0,1325},{4,11,45},{135,11,1257},{138,0,301},{9,0,298},{
-12,0,291},{13,0,276},{14,0,6},{17,0,18},{21,0,32},{7,10,1599},{7,10,1723},{8,10,
-79},{8,10,106},{8,10,190},{8,10,302},{8,10,383},{8,10,713},{9,10,119},{9,10,233}
-,{9,10,419},{9,10,471},{10,10,181},{10,10,406},{11,10,57},{11,10,85},{11,10,120}
-,{11,10,177},{11,10,296},{11,10,382},{11,10,454},{11,10,758},{11,10,999},{12,10,
-27},{12,10,131},{12,10,245},{12,10,312},{12,10,446},{12,10,454},{13,10,98},{13,
-10,426},{13,10,508},{14,10,163},{14,10,272},{14,10,277},{14,10,370},{15,10,95},{
-15,10,138},{15,10,167},{17,10,38},{148,10,96},{132,0,757},{134,0,1263},{4,0,820}
-,{134,10,1759},{133,0,722},{136,11,816},{138,10,372},{145,10,16},{134,0,1039},{4
-,0,991},{134,0,2028},{133,10,258},{7,0,1875},{139,0,124},{6,11,559},{6,11,1691},
-{135,11,586},{5,0,324},{7,0,881},{8,10,134},{9,10,788},{140,10,438},{7,11,1823},
-{139,11,693},{6,0,1348},{134,0,1545},{134,0,911},{132,0,954},{8,0,329},{8,0,414}
-,{7,10,1948},{135,10,2004},{5,0,517},{6,10,439},{7,10,780},{135,10,1040},{132,0,
-816},{5,10,1},{6,10,81},{138,10,520},{9,0,713},{10,0,222},{5,10,482},{8,10,98},{
-10,10,700},{10,10,822},{11,10,302},{11,10,778},{12,10,50},{12,10,127},{12,10,396
-},{13,10,62},{13,10,328},{14,10,122},{147,10,72},{137,0,33},{5,10,2},{7,10,1494}
-,{136,10,589},{6,10,512},{7,10,797},{8,10,253},{9,10,77},{10,10,1},{10,11,108},{
-10,10,129},{10,10,225},{11,11,116},{11,10,118},{11,10,226},{11,10,251},{11,10,
-430},{11,10,701},{11,10,974},{11,10,982},{12,10,64},{12,10,260},{12,10,488},{140
-,10,690},{134,11,456},{133,11,925},{5,0,150},{7,0,106},{7,0,774},{8,0,603},{9,0,
-593},{9,0,634},{10,0,44},{10,0,173},{11,0,462},{11,0,515},{13,0,216},{13,0,288},
-{142,0,400},{137,10,347},{5,0,748},{134,0,553},{12,0,108},{141,0,291},{7,0,420},
-{4,10,12},{7,10,522},{7,10,809},{8,10,797},{141,10,88},{6,11,193},{7,11,240},{7,
-11,1682},{10,11,51},{10,11,640},{11,11,410},{13,11,82},{14,11,247},{14,11,331},{
-142,11,377},{133,10,528},{135,0,1777},{4,0,493},{144,0,55},{136,11,633},{139,0,
-81},{6,0,980},{136,0,321},{148,10,109},{5,10,266},{9,10,290},{9,10,364},{10,10,
-293},{11,10,606},{142,10,45},{6,0,568},{7,0,112},{7,0,1804},{8,0,362},{8,0,410},
-{8,0,830},{9,0,514},{11,0,649},{142,0,157},{4,0,74},{6,0,510},{6,10,594},{9,10,
-121},{10,10,49},{10,10,412},{139,10,834},{134,0,838},{136,10,748},{132,10,466},{
-132,0,625},{135,11,1443},{4,11,237},{135,11,514},{9,10,378},{141,10,162},{6,0,16
-},{6,0,158},{7,0,43},{7,0,129},{7,0,181},{8,0,276},{8,0,377},{10,0,523},{11,0,
-816},{12,0,455},{13,0,303},{142,0,135},{135,0,281},{4,0,1},{7,0,1143},{7,0,1463}
-,{8,0,61},{9,0,207},{9,0,390},{9,0,467},{139,0,836},{6,11,392},{7,11,65},{135,11
-,2019},{132,10,667},{4,0,723},{5,0,895},{7,0,1031},{8,0,199},{8,0,340},{9,0,153}
-,{9,0,215},{10,0,21},{10,0,59},{10,0,80},{10,0,224},{10,0,838},{11,0,229},{11,0,
-652},{12,0,192},{13,0,146},{142,0,91},{132,0,295},{137,0,51},{9,11,222},{10,11,
-43},{139,11,900},{5,0,309},{140,0,211},{5,0,125},{8,0,77},{138,0,15},{136,11,604
-},{138,0,789},{5,0,173},{4,10,39},{7,10,1843},{8,10,407},{11,10,144},{140,10,523
-},{138,11,265},{133,0,439},{132,10,510},{7,0,648},{7,0,874},{11,0,164},{12,0,76}
-,{18,0,9},{7,10,1980},{10,10,487},{138,10,809},{12,0,111},{14,0,294},{19,0,45},{
-13,10,260},{146,10,63},{133,11,549},{134,10,570},{4,0,8},{7,0,1152},{7,0,1153},{
-7,0,1715},{9,0,374},{10,0,478},{139,0,648},{135,0,1099},{5,0,575},{6,0,354},{135
-,0,701},{7,11,36},{8,11,201},{136,11,605},{4,10,787},{136,11,156},{6,0,518},{149
-,11,13},{140,11,224},{134,0,702},{132,10,516},{5,11,724},{10,11,305},{11,11,151}
-,{12,11,33},{12,11,121},{12,11,381},{17,11,3},{17,11,27},{17,11,78},{18,11,18},{
-19,11,54},{149,11,5},{8,0,87},{4,11,523},{5,11,638},{11,10,887},{14,10,365},{142
-,10,375},{138,0,438},{136,10,821},{135,11,1908},{6,11,242},{7,11,227},{7,11,1581
-},{8,11,104},{9,11,113},{9,11,220},{9,11,427},{10,11,74},{10,11,239},{11,11,579}
-,{11,11,1023},{13,11,4},{13,11,204},{13,11,316},{18,11,95},{148,11,86},{4,0,69},
-{5,0,122},{5,0,849},{6,0,1633},{9,0,656},{138,0,464},{7,0,1802},{4,10,10},{139,
-10,786},{135,11,861},{139,0,499},{7,0,476},{7,0,1592},{138,0,87},{133,10,684},{4
-,0,840},{134,10,27},{142,0,283},{6,0,1620},{7,11,1328},{136,11,494},{5,0,859},{7
-,0,1160},{8,0,107},{9,0,291},{9,0,439},{10,0,663},{11,0,609},{140,0,197},{7,11,
-1306},{8,11,505},{9,11,482},{10,11,126},{11,11,225},{12,11,347},{12,11,449},{13,
-11,19},{142,11,218},{5,11,268},{10,11,764},{12,11,120},{13,11,39},{145,11,127},{
-145,10,56},{7,11,1672},{10,11,472},{11,11,189},{143,11,51},{6,10,342},{6,10,496}
-,{8,10,275},{137,10,206},{133,0,600},{4,0,117},{6,0,372},{7,0,1905},{142,0,323},
-{4,10,909},{5,10,940},{135,11,1471},{132,10,891},{4,0,722},{139,0,471},{4,11,384
-},{135,11,1022},{132,10,687},{9,0,5},{12,0,216},{12,0,294},{12,0,298},{12,0,400}
-,{12,0,518},{13,0,229},{143,0,139},{135,11,1703},{7,11,1602},{10,11,698},{12,11,
-212},{141,11,307},{6,10,41},{141,10,160},{135,11,1077},{9,11,159},{11,11,28},{
-140,11,603},{4,0,514},{7,0,1304},{138,0,477},{134,0,1774},{9,0,88},{139,0,270},{
-5,0,12},{7,0,375},{9,0,438},{134,10,1718},{132,11,515},{136,10,778},{8,11,632},{
-8,11,697},{137,11,854},{6,0,362},{6,0,997},{146,0,51},{7,0,816},{7,0,1241},{9,0,
-283},{9,0,520},{10,0,213},{10,0,307},{10,0,463},{10,0,671},{10,0,746},{11,0,401}
-,{11,0,794},{12,0,517},{18,0,107},{147,0,115},{133,10,115},{150,11,28},{4,11,136
-},{133,11,551},{142,10,314},{132,0,258},{6,0,22},{7,0,903},{7,0,1963},{8,0,639},
-{138,0,577},{5,0,681},{8,0,782},{13,0,130},{17,0,84},{5,10,193},{140,10,178},{9,
-11,17},{138,11,291},{7,11,1287},{9,11,44},{10,11,552},{10,11,642},{11,11,839},{
-12,11,274},{12,11,275},{12,11,372},{13,11,91},{142,11,125},{135,10,174},{4,0,664
-},{5,0,804},{139,0,1013},{134,0,942},{6,0,1349},{6,0,1353},{6,0,1450},{7,11,1518
-},{139,11,694},{11,0,356},{4,10,122},{5,10,796},{5,10,952},{6,10,1660},{6,10,
-1671},{8,10,567},{9,10,687},{9,10,742},{10,10,686},{11,10,682},{140,10,281},{5,0
-,32},{6,11,147},{7,11,886},{9,11,753},{138,11,268},{5,10,179},{7,10,1095},{135,
-10,1213},{4,10,66},{7,10,722},{135,10,904},{135,10,352},{9,11,245},{138,11,137},
-{4,0,289},{7,0,629},{7,0,1698},{7,0,1711},{12,0,215},{133,11,414},{6,0,1975},{
-135,11,1762},{6,0,450},{136,0,109},{141,10,35},{134,11,599},{136,0,705},{133,0,
-664},{134,11,1749},{11,11,402},{12,11,109},{12,11,431},{13,11,179},{13,11,206},{
-14,11,175},{14,11,217},{16,11,3},{148,11,53},{135,0,1238},{134,11,1627},{132,11,
-488},{13,0,318},{10,10,592},{10,10,753},{12,10,317},{12,10,355},{12,10,465},{12,
-10,469},{12,10,560},{140,10,578},{133,10,564},{132,11,83},{140,11,676},{6,0,1872
-},{6,0,1906},{6,0,1907},{9,0,934},{9,0,956},{9,0,960},{9,0,996},{12,0,794},{12,0
-,876},{12,0,880},{12,0,918},{15,0,230},{18,0,234},{18,0,238},{21,0,38},{149,0,62
-},{134,10,556},{134,11,278},{137,0,103},{7,10,544},{8,10,719},{138,10,61},{4,10,
-5},{5,10,498},{8,10,637},{137,10,521},{7,0,777},{12,0,229},{12,0,239},{15,0,12},
-{12,11,229},{12,11,239},{143,11,12},{6,0,26},{7,11,388},{7,11,644},{139,11,781},
-{7,11,229},{8,11,59},{9,11,190},{9,11,257},{10,11,378},{140,11,191},{133,10,927}
-,{135,10,1441},{4,10,893},{5,10,780},{133,10,893},{4,0,414},{5,0,467},{9,0,654},
-{10,0,451},{12,0,59},{141,0,375},{142,0,173},{135,0,17},{7,0,1350},{133,10,238},
-{135,0,955},{4,0,960},{10,0,887},{12,0,753},{18,0,161},{18,0,162},{152,0,19},{
-136,11,344},{6,10,1729},{137,11,288},{132,11,660},{4,0,217},{5,0,710},{7,0,760},
-{7,0,1926},{9,0,428},{9,0,708},{10,0,254},{10,0,296},{10,0,720},{11,0,109},{11,0
-,255},{12,0,165},{12,0,315},{13,0,107},{13,0,203},{14,0,54},{14,0,99},{14,0,114}
-,{14,0,388},{16,0,85},{17,0,9},{17,0,33},{20,0,25},{20,0,28},{20,0,29},{21,0,9},
-{21,0,10},{21,0,34},{22,0,17},{4,10,60},{7,10,1800},{8,10,314},{9,10,700},{139,
-10,487},{7,11,1035},{138,11,737},{7,11,690},{9,11,217},{9,11,587},{140,11,521},{
-6,0,919},{7,11,706},{7,11,1058},{138,11,538},{7,10,1853},{138,10,437},{136,10,
-419},{6,0,280},{10,0,502},{11,0,344},{140,0,38},{5,0,45},{7,0,1161},{11,0,448},{
-11,0,880},{13,0,139},{13,0,407},{15,0,16},{17,0,95},{18,0,66},{18,0,88},{18,0,
-123},{149,0,7},{11,11,92},{11,11,196},{11,11,409},{11,11,450},{11,11,666},{11,11
-,777},{12,11,262},{13,11,385},{13,11,393},{15,11,115},{16,11,45},{145,11,82},{
-136,0,777},{134,11,1744},{4,0,410},{7,0,521},{133,10,828},{134,0,673},{7,0,1110}
-,{7,0,1778},{7,10,176},{135,10,178},{5,10,806},{7,11,268},{7,10,1976},{136,11,
-569},{4,11,733},{9,11,194},{10,11,92},{11,11,198},{12,11,84},{12,11,87},{13,11,
-128},{144,11,74},{5,0,341},{7,0,1129},{11,0,414},{4,10,51},{6,10,4},{7,10,591},{
-7,10,849},{7,10,951},{7,10,1613},{7,10,1760},{7,10,1988},{9,10,434},{10,10,754},
-{11,10,25},{139,10,37},{133,10,902},{135,10,928},{135,0,787},{132,0,436},{134,10
-,270},{7,0,1587},{135,0,1707},{6,0,377},{7,0,1025},{9,0,613},{145,0,104},{7,11,
-982},{7,11,1361},{10,11,32},{143,11,56},{139,0,96},{132,0,451},{132,10,416},{142
-,10,372},{5,10,152},{5,10,197},{7,11,306},{7,10,340},{7,10,867},{10,10,548},{10,
-10,581},{11,10,6},{12,10,3},{12,10,19},{14,10,110},{142,10,289},{134,0,680},{134
-,11,609},{7,0,483},{7,10,190},{8,10,28},{8,10,141},{8,10,444},{8,10,811},{9,10,
-468},{11,10,334},{12,10,24},{12,10,386},{140,10,576},{10,0,916},{133,10,757},{5,
-10,721},{135,10,1553},{133,11,178},{134,0,937},{132,10,898},{133,0,739},{147,0,
-82},{135,0,663},{146,0,128},{5,10,277},{141,10,247},{134,0,1087},{132,10,435},{6
-,11,381},{7,11,645},{7,11,694},{136,11,546},{7,0,503},{135,0,1885},{6,0,1965},{8
-,0,925},{138,0,955},{4,0,113},{5,0,163},{5,0,735},{7,0,1009},{9,0,9},{9,0,771},{
-12,0,90},{13,0,138},{13,0,410},{143,0,128},{4,0,324},{138,0,104},{7,0,460},{5,10
-,265},{134,10,212},{133,11,105},{7,11,261},{7,11,1107},{7,11,1115},{7,11,1354},{
-7,11,1588},{7,11,1705},{7,11,1902},{9,11,465},{10,11,248},{10,11,349},{10,11,647
-},{11,11,527},{11,11,660},{11,11,669},{12,11,529},{141,11,305},{5,11,438},{9,11,
-694},{12,11,627},{141,11,210},{152,11,11},{4,0,935},{133,0,823},{132,10,702},{5,
-0,269},{7,0,434},{7,0,891},{8,0,339},{9,0,702},{11,0,594},{11,0,718},{17,0,100},
-{5,10,808},{135,10,2045},{7,0,1014},{9,0,485},{141,0,264},{134,0,1713},{7,0,1810
-},{11,0,866},{12,0,103},{13,0,495},{140,11,233},{4,0,423},{10,0,949},{138,0,1013
-},{135,0,900},{8,11,25},{138,11,826},{5,10,166},{8,10,739},{140,10,511},{134,0,
-2018},{7,11,1270},{139,11,612},{4,10,119},{5,10,170},{5,10,447},{7,10,1708},{7,
-10,1889},{9,10,357},{9,10,719},{12,10,486},{140,10,596},{12,0,574},{140,11,574},
-{132,11,308},{6,0,964},{6,0,1206},{134,0,1302},{4,10,450},{135,10,1158},{135,11,
-150},{136,11,649},{14,0,213},{148,0,38},{9,11,45},{9,11,311},{141,11,42},{134,11
-,521},{7,10,1375},{7,10,1466},{138,10,331},{132,10,754},{5,11,339},{7,11,1442},{
-14,11,3},{15,11,41},{147,11,66},{136,11,378},{134,0,1022},{5,10,850},{136,10,799
-},{142,0,143},{135,0,2029},{134,11,1628},{8,0,523},{150,0,34},{5,0,625},{135,0,
-1617},{7,0,275},{7,10,238},{7,10,2033},{8,10,120},{8,10,188},{8,10,659},{9,10,
-598},{10,10,466},{12,10,342},{12,10,588},{13,10,503},{14,10,246},{143,10,92},{7,
-0,37},{8,0,425},{8,0,693},{9,0,720},{10,0,380},{10,0,638},{11,0,273},{11,0,473},
-{12,0,61},{143,0,43},{135,11,829},{135,0,1943},{132,0,765},{5,11,486},{135,11,
-1349},{7,11,1635},{8,11,17},{10,11,217},{138,11,295},{4,10,201},{7,10,1744},{8,
-10,602},{11,10,247},{11,10,826},{145,10,65},{138,11,558},{11,0,551},{142,0,159},
-{8,10,164},{146,10,62},{139,11,176},{132,0,168},{136,0,1010},{134,0,1994},{135,0
-,91},{138,0,532},{135,10,1243},{135,0,1884},{132,10,907},{5,10,100},{10,10,329},
-{12,10,416},{149,10,29},{134,11,447},{132,10,176},{5,10,636},{5,10,998},{7,10,9}
-,{7,10,1508},{8,10,26},{9,10,317},{9,10,358},{10,10,210},{10,10,292},{10,10,533}
-,{11,10,555},{12,10,526},{12,10,607},{13,10,263},{13,10,459},{142,10,271},{4,11,
-609},{135,11,756},{6,0,15},{7,0,70},{10,0,240},{147,0,93},{4,11,930},{133,11,947
-},{134,0,1227},{134,0,1534},{133,11,939},{133,11,962},{5,11,651},{8,11,170},{9,
-11,61},{9,11,63},{10,11,23},{10,11,37},{10,11,834},{11,11,4},{11,11,187},{11,11,
-281},{11,11,503},{11,11,677},{12,11,96},{12,11,130},{12,11,244},{14,11,5},{14,11
-,40},{14,11,162},{14,11,202},{146,11,133},{4,11,406},{5,11,579},{12,11,492},{150
-,11,15},{139,0,392},{6,10,610},{10,10,127},{141,10,27},{7,0,655},{7,0,1844},{136
-,10,119},{4,0,145},{6,0,176},{7,0,395},{137,0,562},{132,0,501},{140,11,145},{136
-,0,1019},{134,0,509},{139,0,267},{6,11,17},{7,11,16},{7,11,1001},{7,11,1982},{9,
-11,886},{10,11,489},{10,11,800},{11,11,782},{12,11,320},{13,11,467},{14,11,145},
-{14,11,387},{143,11,119},{145,11,17},{6,0,1099},{133,11,458},{7,11,1983},{8,11,0
-},{8,11,171},{9,11,120},{9,11,732},{10,11,473},{11,11,656},{11,11,998},{18,11,0}
-,{18,11,2},{147,11,21},{12,11,427},{146,11,38},{10,0,948},{138,0,968},{7,10,126}
-,{136,10,84},{136,10,790},{4,0,114},{9,0,492},{13,0,462},{142,0,215},{6,10,64},{
-12,10,377},{141,10,309},{4,0,77},{5,0,361},{6,0,139},{6,0,401},{6,0,404},{7,0,
-413},{7,0,715},{7,0,1716},{11,0,279},{12,0,179},{12,0,258},{13,0,244},{142,0,358
-},{134,0,1717},{7,0,772},{7,0,1061},{7,0,1647},{8,0,82},{11,0,250},{11,0,607},{
-12,0,311},{12,0,420},{13,0,184},{13,0,367},{7,10,1104},{11,10,269},{11,10,539},{
-11,10,627},{11,10,706},{11,10,975},{12,10,248},{12,10,434},{12,10,600},{12,10,
-622},{13,10,297},{13,10,485},{14,10,69},{14,10,409},{143,10,108},{135,0,724},{4,
-11,512},{4,11,519},{133,11,342},{134,0,1133},{145,11,29},{11,10,977},{141,10,507
-},{6,0,841},{6,0,1042},{6,0,1194},{10,0,993},{140,0,1021},{6,11,31},{7,11,491},{
-7,11,530},{8,11,592},{9,10,34},{11,11,53},{11,10,484},{11,11,779},{12,11,167},{
-12,11,411},{14,11,14},{14,11,136},{15,11,72},{16,11,17},{144,11,72},{4,0,1021},{
-6,0,2037},{133,11,907},{7,0,373},{8,0,335},{8,0,596},{9,0,488},{6,10,1700},{7,10
-,293},{7,10,382},{7,10,1026},{7,10,1087},{7,10,2027},{8,10,252},{8,10,727},{8,10
-,729},{9,10,30},{9,10,199},{9,10,231},{9,10,251},{9,10,334},{9,10,361},{9,10,712
-},{10,10,55},{10,10,60},{10,10,232},{10,10,332},{10,10,384},{10,10,396},{10,10,
-504},{10,10,542},{10,10,652},{11,10,20},{11,10,48},{11,10,207},{11,10,291},{11,
-10,298},{11,10,342},{11,10,365},{11,10,394},{11,10,620},{11,10,705},{11,10,1017}
-,{12,10,123},{12,10,340},{12,10,406},{12,10,643},{13,10,61},{13,10,269},{13,10,
-311},{13,10,319},{13,10,486},{14,10,234},{15,10,62},{15,10,85},{16,10,71},{18,10
-,119},{148,10,105},{150,0,37},{4,11,208},{5,11,106},{6,11,531},{8,11,408},{9,11,
-188},{138,11,572},{132,0,564},{6,0,513},{135,0,1052},{132,0,825},{9,0,899},{140,
-11,441},{134,0,778},{133,11,379},{7,0,1417},{12,0,382},{17,0,48},{152,0,12},{132
-,11,241},{7,0,1116},{6,10,379},{7,10,270},{8,10,176},{8,10,183},{9,10,432},{9,10
-,661},{12,10,247},{12,10,617},{146,10,125},{5,10,792},{133,10,900},{6,0,545},{7,
-0,565},{7,0,1669},{10,0,114},{11,0,642},{140,0,618},{133,0,5},{138,11,7},{132,11
-,259},{135,0,192},{134,0,701},{136,0,763},{135,10,1979},{4,10,901},{133,10,776},
-{10,0,755},{147,0,29},{133,0,759},{4,11,173},{5,11,312},{5,11,512},{135,11,1285}
-,{7,11,1603},{7,11,1691},{9,11,464},{11,11,195},{12,11,279},{12,11,448},{14,11,
-11},{147,11,102},{7,0,370},{7,0,1007},{7,0,1177},{135,0,1565},{135,0,1237},{4,0,
-87},{5,0,250},{141,0,298},{4,11,452},{5,11,583},{5,11,817},{6,11,433},{7,11,593}
-,{7,11,720},{7,11,1378},{8,11,161},{9,11,284},{10,11,313},{139,11,886},{4,11,547
-},{135,11,1409},{136,11,722},{4,10,37},{5,10,334},{135,10,1253},{132,10,508},{12
-,0,107},{146,0,31},{8,11,420},{139,11,193},{135,0,814},{135,11,409},{140,0,991},
-{4,0,57},{7,0,1195},{7,0,1438},{7,0,1548},{7,0,1835},{7,0,1904},{9,0,757},{10,0,
-604},{139,0,519},{132,0,540},{138,11,308},{132,10,533},{136,0,608},{144,11,65},{
-4,0,1014},{134,0,2029},{4,0,209},{7,0,902},{5,11,1002},{136,11,745},{134,0,2030}
-,{6,0,303},{7,0,335},{7,0,1437},{7,0,1668},{8,0,553},{8,0,652},{8,0,656},{9,0,
-558},{11,0,743},{149,0,18},{5,11,575},{6,11,354},{135,11,701},{4,11,239},{6,11,
-477},{7,11,1607},{11,11,68},{139,11,617},{132,0,559},{8,0,527},{18,0,60},{147,0,
-24},{133,10,920},{138,0,511},{133,0,1017},{133,0,675},{138,10,391},{11,0,156},{
-135,10,1952},{138,11,369},{132,11,367},{133,0,709},{6,0,698},{134,0,887},{142,10
-,126},{134,0,1745},{132,10,483},{13,11,299},{142,11,75},{133,0,714},{7,0,8},{136
-,0,206},{138,10,480},{4,11,694},{9,10,495},{146,10,104},{7,11,1248},{11,11,621},
-{139,11,702},{140,11,687},{132,0,776},{139,10,1009},{135,0,1272},{134,0,1059},{8
-,10,653},{13,10,93},{147,10,14},{135,11,213},{136,0,406},{133,10,172},{132,0,947
-},{8,0,175},{10,0,168},{138,0,573},{132,0,870},{6,0,1567},{151,11,28},{134,11,
-472},{5,10,260},{136,11,132},{4,11,751},{11,11,390},{140,11,32},{4,11,409},{133,
-11,78},{12,0,554},{6,11,473},{145,11,105},{133,0,784},{8,0,908},{136,11,306},{
-139,0,882},{6,0,358},{7,0,1393},{8,0,396},{10,0,263},{14,0,154},{16,0,48},{17,0,
-8},{7,11,1759},{8,11,396},{10,11,263},{14,11,154},{16,11,48},{145,11,8},{13,11,
-163},{13,11,180},{18,11,78},{148,11,35},{14,0,32},{18,0,85},{20,0,2},{152,0,16},
-{7,0,228},{10,0,770},{8,10,167},{8,10,375},{9,10,82},{9,10,561},{138,10,620},{
-132,0,845},{9,0,14},{9,0,441},{10,0,306},{139,0,9},{11,0,966},{12,0,287},{13,0,
-342},{13,0,402},{15,0,110},{15,0,163},{8,10,194},{136,10,756},{134,0,1578},{4,0,
-967},{6,0,1820},{6,0,1847},{140,0,716},{136,0,594},{7,0,1428},{7,0,1640},{7,0,
-1867},{9,0,169},{9,0,182},{9,0,367},{9,0,478},{9,0,506},{9,0,551},{9,0,557},{9,0
-,648},{9,0,697},{9,0,705},{9,0,725},{9,0,787},{9,0,794},{10,0,198},{10,0,214},{
-10,0,267},{10,0,275},{10,0,456},{10,0,551},{10,0,561},{10,0,613},{10,0,627},{10,
-0,668},{10,0,675},{10,0,691},{10,0,695},{10,0,707},{10,0,715},{11,0,183},{11,0,
-201},{11,0,244},{11,0,262},{11,0,352},{11,0,439},{11,0,493},{11,0,572},{11,0,591
-},{11,0,608},{11,0,611},{11,0,646},{11,0,674},{11,0,711},{11,0,751},{11,0,761},{
-11,0,776},{11,0,785},{11,0,850},{11,0,853},{11,0,862},{11,0,865},{11,0,868},{11,
-0,875},{11,0,898},{11,0,902},{11,0,903},{11,0,910},{11,0,932},{11,0,942},{11,0,
-957},{11,0,967},{11,0,972},{12,0,148},{12,0,195},{12,0,220},{12,0,237},{12,0,318
-},{12,0,339},{12,0,393},{12,0,445},{12,0,450},{12,0,474},{12,0,505},{12,0,509},{
-12,0,533},{12,0,591},{12,0,594},{12,0,597},{12,0,621},{12,0,633},{12,0,642},{13,
-0,59},{13,0,60},{13,0,145},{13,0,239},{13,0,250},{13,0,329},{13,0,344},{13,0,365
-},{13,0,372},{13,0,387},{13,0,403},{13,0,414},{13,0,456},{13,0,470},{13,0,478},{
-13,0,483},{13,0,489},{14,0,55},{14,0,57},{14,0,81},{14,0,90},{14,0,148},{14,0,
-239},{14,0,266},{14,0,321},{14,0,326},{14,0,327},{14,0,330},{14,0,347},{14,0,355
-},{14,0,401},{14,0,404},{14,0,411},{14,0,414},{14,0,416},{14,0,420},{15,0,61},{
-15,0,74},{15,0,87},{15,0,88},{15,0,94},{15,0,96},{15,0,116},{15,0,149},{15,0,154
-},{16,0,50},{16,0,63},{16,0,73},{17,0,2},{17,0,66},{17,0,92},{17,0,103},{17,0,
-112},{17,0,120},{18,0,50},{18,0,54},{18,0,82},{18,0,86},{18,0,90},{18,0,111},{18
-,0,115},{18,0,156},{19,0,40},{19,0,79},{20,0,78},{21,0,22},{135,11,883},{5,0,161
-},{135,0,839},{4,0,782},{13,11,293},{142,11,56},{133,11,617},{139,11,50},{135,10
-,22},{145,0,64},{5,10,639},{7,10,1249},{139,10,896},{138,0,998},{135,11,2042},{4
-,11,546},{142,11,233},{6,0,1043},{134,0,1574},{134,0,1496},{4,10,102},{7,10,815}
-,{7,10,1699},{139,10,964},{12,0,781},{142,0,461},{4,11,313},{133,11,577},{6,0,
-639},{6,0,1114},{137,0,817},{8,11,184},{141,11,433},{7,0,1814},{135,11,935},{10,
-0,997},{140,0,958},{4,0,812},{137,11,625},{132,10,899},{136,10,795},{5,11,886},{
-6,11,46},{6,11,1790},{7,11,14},{7,11,732},{7,11,1654},{8,11,95},{8,11,327},{8,11
-,616},{10,11,598},{10,11,769},{11,11,134},{11,11,747},{12,11,378},{142,11,97},{
-136,0,139},{6,10,52},{9,10,104},{9,10,559},{12,10,308},{147,10,87},{133,11,1021}
-,{132,10,604},{132,10,301},{136,10,779},{7,0,643},{136,0,236},{132,11,153},{134,
-0,1172},{147,10,32},{133,11,798},{6,0,1338},{132,11,587},{6,11,598},{7,11,42},{8
-,11,695},{10,11,212},{11,11,158},{14,11,196},{145,11,85},{135,10,508},{5,11,957}
-,{5,11,1008},{135,11,249},{4,11,129},{135,11,465},{5,0,54},{7,11,470},{7,11,1057
-},{7,11,1201},{9,11,755},{11,11,906},{140,11,527},{7,11,908},{146,11,7},{5,11,
-148},{136,11,450},{144,11,1},{4,0,256},{135,0,1488},{9,0,351},{6,10,310},{7,10,
-1849},{8,10,72},{8,10,272},{8,10,431},{9,10,12},{10,10,563},{10,10,630},{10,10,
-796},{10,10,810},{11,10,367},{11,10,599},{11,10,686},{140,10,672},{6,0,1885},{6,
-0,1898},{6,0,1899},{140,0,955},{4,0,714},{133,0,469},{6,0,1270},{134,0,1456},{
-132,0,744},{6,0,313},{7,10,537},{8,10,64},{9,10,127},{10,10,496},{12,10,510},{
-141,10,384},{4,11,217},{4,10,244},{5,11,710},{7,10,233},{7,11,1926},{9,11,428},{
-9,11,708},{10,11,254},{10,11,296},{10,11,720},{11,11,109},{11,11,255},{12,11,165
-},{12,11,315},{13,11,107},{13,11,203},{14,11,54},{14,11,99},{14,11,114},{14,11,
-388},{16,11,85},{17,11,9},{17,11,33},{20,11,25},{20,11,28},{20,11,29},{21,11,9},
-{21,11,10},{21,11,34},{150,11,17},{138,0,402},{7,0,969},{146,0,55},{8,0,50},{137
-,0,624},{134,0,1355},{132,0,572},{134,10,1650},{10,10,702},{139,10,245},{10,0,
-847},{142,0,445},{6,0,43},{7,0,38},{8,0,248},{138,0,513},{133,0,369},{137,10,338
-},{133,0,766},{133,0,363},{133,10,896},{8,11,392},{11,11,54},{13,11,173},{13,11,
-294},{148,11,7},{134,0,678},{7,11,1230},{136,11,531},{6,0,258},{140,0,409},{5,0,
-249},{148,0,82},{7,10,1117},{136,10,539},{5,0,393},{6,0,378},{7,0,1981},{9,0,32}
-,{9,0,591},{10,0,685},{10,0,741},{142,0,382},{133,0,788},{134,0,1281},{134,0,
-1295},{7,0,1968},{141,0,509},{4,0,61},{5,0,58},{5,0,171},{5,0,683},{6,0,291},{6,
-0,566},{7,0,1650},{11,0,523},{12,0,273},{12,0,303},{15,0,39},{143,0,111},{6,0,
-706},{134,0,1283},{134,0,589},{135,11,1433},{133,11,435},{7,0,1059},{13,0,54},{5
-,10,4},{5,10,810},{6,10,13},{6,10,538},{6,10,1690},{6,10,1726},{7,10,1819},{8,10
-,148},{8,10,696},{8,10,791},{12,10,125},{143,10,9},{135,10,1268},{5,11,85},{6,11
-,419},{7,11,134},{7,11,305},{7,11,361},{7,11,1337},{8,11,71},{140,11,519},{137,0
-,824},{140,11,688},{5,11,691},{7,11,345},{7,10,1385},{9,11,94},{11,10,582},{11,
-10,650},{11,10,901},{11,10,949},{12,11,169},{12,10,232},{12,10,236},{13,10,413},
-{13,10,501},{146,10,116},{4,0,917},{133,0,1005},{7,0,1598},{5,11,183},{6,11,582}
-,{9,11,344},{10,11,679},{140,11,435},{4,10,925},{5,10,803},{8,10,698},{138,10,
-828},{132,0,919},{135,11,511},{139,10,992},{4,0,255},{5,0,302},{6,0,132},{7,0,
-128},{7,0,283},{7,0,1299},{10,0,52},{10,0,514},{11,0,925},{13,0,92},{142,0,309},
-{134,0,1369},{135,10,1847},{134,0,328},{7,11,1993},{136,11,684},{133,10,383},{
-137,0,173},{134,11,583},{134,0,1411},{19,0,65},{5,11,704},{8,11,357},{10,11,745}
-,{14,11,426},{17,11,94},{147,11,57},{9,10,660},{138,10,347},{4,11,179},{5,11,198
-},{133,11,697},{7,11,347},{7,11,971},{8,11,181},{138,11,711},{141,0,442},{11,0,
-842},{11,0,924},{13,0,317},{13,0,370},{13,0,469},{13,0,471},{14,0,397},{18,0,69}
-,{18,0,145},{7,10,572},{9,10,592},{11,10,680},{12,10,356},{140,10,550},{14,11,19
-},{14,11,28},{144,11,29},{136,0,534},{4,11,243},{5,11,203},{7,11,19},{7,11,71},{
-7,11,113},{10,11,405},{11,11,357},{142,11,240},{6,0,210},{10,0,845},{138,0,862},
-{7,11,1351},{9,11,581},{10,11,639},{11,11,453},{140,11,584},{7,11,1450},{139,11,
-99},{10,0,892},{12,0,719},{144,0,105},{4,0,284},{6,0,223},{134,11,492},{5,11,134
-},{6,11,408},{6,11,495},{135,11,1593},{136,0,529},{137,0,807},{4,0,218},{7,0,526
-},{143,0,137},{6,0,1444},{142,11,4},{132,11,665},{4,0,270},{5,0,192},{6,0,332},{
-7,0,1322},{4,11,248},{7,11,137},{137,11,349},{140,0,661},{7,0,1517},{11,0,597},{
-14,0,76},{14,0,335},{20,0,33},{7,10,748},{139,10,700},{5,11,371},{135,11,563},{
-146,11,57},{133,10,127},{133,0,418},{4,11,374},{7,11,547},{7,11,1700},{7,11,1833
-},{139,11,858},{6,10,198},{140,10,83},{7,11,1812},{13,11,259},{13,11,356},{14,11
-,242},{147,11,114},{7,0,379},{8,0,481},{9,0,377},{5,10,276},{6,10,55},{135,10,
-1369},{138,11,286},{5,0,1003},{6,0,149},{6,10,1752},{136,10,726},{8,0,262},{9,0,
-627},{10,0,18},{11,0,214},{11,0,404},{11,0,457},{11,0,780},{11,0,913},{13,0,401}
-,{14,0,200},{6,11,1647},{7,11,1552},{7,11,2010},{9,11,494},{137,11,509},{135,0,
-742},{136,0,304},{132,0,142},{133,10,764},{6,10,309},{7,10,331},{138,10,550},{
-135,10,1062},{6,11,123},{7,11,214},{7,10,986},{9,11,728},{10,11,157},{11,11,346}
-,{11,11,662},{143,11,106},{135,10,1573},{7,0,925},{137,0,799},{4,0,471},{5,0,51}
-,{6,0,602},{8,0,484},{138,0,195},{136,0,688},{132,0,697},{6,0,1169},{6,0,1241},{
-6,10,194},{7,10,133},{10,10,493},{10,10,570},{139,10,664},{140,0,751},{7,0,929},
-{10,0,452},{11,0,878},{16,0,33},{5,10,24},{5,10,569},{6,10,3},{6,10,119},{6,10,
-143},{6,10,440},{7,10,599},{7,10,1686},{7,10,1854},{8,10,424},{9,10,43},{9,10,
-584},{9,10,760},{10,10,328},{11,10,159},{11,10,253},{12,10,487},{140,10,531},{4,
-11,707},{13,11,106},{18,11,49},{147,11,41},{5,0,221},{5,11,588},{134,11,393},{
-134,0,1437},{6,11,211},{7,11,1690},{11,11,486},{140,11,369},{5,10,14},{5,10,892}
-,{6,10,283},{7,10,234},{136,10,537},{4,0,988},{136,0,955},{135,0,1251},{4,10,126
-},{8,10,635},{147,10,34},{4,10,316},{135,10,1561},{137,10,861},{4,10,64},{5,10,
-352},{5,10,720},{6,10,368},{139,10,359},{134,0,192},{4,0,132},{5,0,69},{135,0,
-1242},{7,10,1577},{10,10,304},{10,10,549},{12,10,365},{13,10,220},{13,10,240},{
-142,10,33},{4,0,111},{7,0,865},{134,11,219},{5,11,582},{6,11,1646},{7,11,99},{7,
-11,1962},{7,11,1986},{8,11,515},{8,11,773},{9,11,23},{9,11,491},{12,11,620},{14,
-11,52},{145,11,50},{132,0,767},{7,11,568},{148,11,21},{6,0,42},{7,0,1416},{7,0,
-2005},{8,0,131},{8,0,466},{9,0,672},{13,0,252},{20,0,103},{133,11,851},{135,0,
-1050},{6,10,175},{137,10,289},{5,10,432},{133,10,913},{6,0,44},{136,0,368},{135,
-11,784},{132,0,570},{133,0,120},{139,10,595},{140,0,29},{6,0,227},{135,0,1589},{
-4,11,98},{7,11,1365},{9,11,422},{9,11,670},{10,11,775},{11,11,210},{13,11,26},{
-13,11,457},{141,11,476},{140,10,80},{5,10,931},{134,10,1698},{133,0,522},{134,0,
-1120},{135,0,1529},{12,0,739},{14,0,448},{142,0,467},{11,10,526},{11,10,939},{
-141,10,290},{5,10,774},{6,10,1637},{6,10,1686},{134,10,1751},{6,0,1667},{135,0,
-2036},{7,10,1167},{11,10,934},{13,10,391},{145,10,76},{137,11,147},{6,10,260},{7
-,10,1484},{11,11,821},{12,11,110},{12,11,153},{18,11,41},{150,11,19},{6,0,511},{
-12,0,132},{134,10,573},{5,0,568},{6,0,138},{135,0,1293},{132,0,1020},{8,0,258},{
-9,0,208},{137,0,359},{4,0,565},{8,0,23},{136,0,827},{134,0,344},{4,0,922},{5,0,
-1023},{13,11,477},{14,11,120},{148,11,61},{134,0,240},{5,11,209},{6,11,30},{11,
-11,56},{139,11,305},{6,0,171},{7,0,1002},{7,0,1324},{9,0,415},{14,0,230},{18,0,
-68},{4,10,292},{4,10,736},{5,10,871},{6,10,1689},{7,10,1944},{137,10,580},{9,11,
-635},{139,11,559},{4,11,150},{5,11,303},{134,11,327},{6,10,63},{135,10,920},{133
-,10,793},{8,11,192},{10,11,78},{10,11,555},{11,11,308},{13,11,359},{147,11,95},{
-135,11,786},{135,11,1712},{136,0,402},{6,0,754},{6,11,1638},{7,11,79},{7,11,496}
-,{9,11,138},{10,11,336},{11,11,12},{12,11,412},{12,11,440},{142,11,305},{4,0,716
-},{141,0,31},{133,0,982},{8,0,691},{8,0,731},{5,10,67},{6,10,62},{6,10,374},{135
-,10,1391},{9,10,790},{140,10,47},{139,11,556},{151,11,1},{7,11,204},{7,11,415},{
-8,11,42},{10,11,85},{11,11,33},{11,11,564},{12,11,571},{149,11,1},{8,0,888},{7,
-11,610},{135,11,1501},{4,10,391},{135,10,1169},{5,0,847},{9,0,840},{138,0,803},{
-137,0,823},{134,0,785},{8,0,152},{9,0,53},{9,0,268},{9,0,901},{10,0,518},{10,0,
-829},{11,0,188},{13,0,74},{14,0,46},{15,0,17},{15,0,33},{17,0,40},{18,0,36},{19,
-0,20},{22,0,1},{152,0,2},{4,11,3},{5,11,247},{5,11,644},{7,11,744},{7,11,1207},{
-7,11,1225},{7,11,1909},{146,11,147},{136,0,532},{135,0,681},{132,10,271},{140,0,
-314},{140,0,677},{4,0,684},{136,0,384},{5,11,285},{9,11,67},{13,11,473},{143,11,
-82},{4,10,253},{5,10,544},{7,10,300},{137,10,340},{7,0,110},{7,0,447},{8,0,290},
-{8,0,591},{9,0,382},{9,0,649},{11,0,71},{11,0,155},{11,0,313},{12,0,5},{13,0,325
-},{142,0,287},{134,0,1818},{136,0,1007},{138,0,321},{7,0,360},{7,0,425},{9,0,66}
-,{9,0,278},{138,0,644},{133,10,818},{5,0,385},{5,10,541},{6,10,94},{6,10,499},{7
-,10,230},{139,10,321},{4,10,920},{5,10,25},{5,10,790},{6,10,457},{7,10,853},{136
-,10,788},{4,0,900},{133,0,861},{5,0,254},{7,0,985},{136,0,73},{7,0,1959},{136,0,
-683},{134,10,1765},{133,10,822},{132,10,634},{4,11,29},{6,11,532},{7,11,1628},{7
-,11,1648},{9,11,303},{9,11,350},{10,11,433},{11,11,97},{11,11,557},{11,11,745},{
-12,11,289},{12,11,335},{12,11,348},{12,11,606},{13,11,116},{13,11,233},{13,11,
-466},{14,11,181},{14,11,209},{14,11,232},{14,11,236},{14,11,300},{16,11,41},{148
-,11,97},{19,0,86},{6,10,36},{7,10,658},{136,10,454},{135,11,1692},{132,0,725},{5
-,11,501},{7,11,1704},{9,11,553},{11,11,520},{12,11,557},{141,11,249},{134,0,196}
-,{133,0,831},{136,0,723},{7,0,1897},{13,0,80},{13,0,437},{145,0,74},{4,0,992},{6
-,0,627},{136,0,994},{135,11,1294},{132,10,104},{5,0,848},{6,0,66},{136,0,764},{4
-,0,36},{7,0,1387},{10,0,205},{139,0,755},{6,0,1046},{134,0,1485},{134,0,950},{
-132,0,887},{14,0,450},{148,0,111},{7,0,620},{7,0,831},{9,10,542},{9,10,566},{138
-,10,728},{6,0,165},{138,0,388},{139,10,263},{4,0,719},{135,0,155},{138,10,468},{
-6,11,453},{144,11,36},{134,11,129},{5,0,533},{7,0,755},{138,0,780},{134,0,1465},
-{4,0,353},{6,0,146},{6,0,1789},{7,0,427},{7,0,990},{7,0,1348},{9,0,665},{9,0,898
-},{11,0,893},{142,0,212},{7,10,87},{142,10,288},{4,0,45},{135,0,1257},{12,0,7},{
-7,10,988},{7,10,1939},{9,10,64},{9,10,502},{12,10,34},{13,10,12},{13,10,234},{
-147,10,77},{4,0,607},{5,11,60},{6,11,504},{7,11,614},{7,11,1155},{140,11,0},{135
-,10,141},{8,11,198},{11,11,29},{140,11,534},{140,0,65},{136,0,816},{132,10,619},
-{139,0,88},{5,10,246},{8,10,189},{9,10,355},{9,10,512},{10,10,124},{10,10,453},{
-11,10,143},{11,10,416},{11,10,859},{141,10,341},{4,11,379},{135,11,1397},{4,0,
-600},{137,0,621},{133,0,367},{134,0,561},{6,0,559},{134,0,1691},{6,0,585},{134,
-11,585},{135,11,1228},{4,11,118},{5,10,678},{6,11,274},{6,11,361},{7,11,75},{141
-,11,441},{135,11,1818},{137,11,841},{5,0,573},{6,0,287},{7,10,862},{7,10,1886},{
-138,10,179},{132,10,517},{140,11,693},{5,11,314},{6,11,221},{7,11,419},{10,11,
-650},{11,11,396},{12,11,156},{13,11,369},{14,11,333},{145,11,47},{140,10,540},{
-136,10,667},{11,10,403},{146,10,83},{6,0,672},{133,10,761},{9,0,157},{10,10,131}
-,{140,10,72},{7,0,714},{134,11,460},{134,0,456},{133,0,925},{5,11,682},{135,11,
-1887},{136,11,510},{136,11,475},{133,11,1016},{9,0,19},{7,11,602},{8,11,179},{10
-,11,781},{140,11,126},{6,11,329},{138,11,111},{6,0,822},{134,0,1473},{144,11,86}
-,{11,0,113},{139,11,113},{5,11,821},{134,11,1687},{133,10,449},{7,0,463},{17,0,
-69},{136,10,103},{7,10,2028},{138,10,641},{6,0,193},{7,0,240},{7,0,1682},{10,0,
-51},{10,0,640},{11,0,410},{13,0,82},{14,0,247},{14,0,331},{142,0,377},{6,0,471},
-{11,0,411},{142,0,2},{5,11,71},{7,11,1407},{9,11,388},{9,11,704},{10,11,261},{10
-,11,619},{11,11,547},{11,11,619},{143,11,157},{136,0,633},{135,0,1148},{6,0,554}
-,{7,0,1392},{12,0,129},{7,10,1274},{7,10,1386},{7,11,2008},{9,11,337},{10,11,517
-},{146,10,87},{7,0,803},{8,0,542},{6,10,187},{7,10,1203},{8,10,380},{14,10,117},
-{149,10,28},{6,10,297},{7,10,793},{139,10,938},{8,0,438},{11,0,363},{7,10,464},{
-11,10,105},{12,10,231},{14,10,386},{15,10,102},{148,10,75},{5,11,16},{6,11,86},{
-6,11,603},{7,11,292},{7,11,561},{8,11,257},{8,11,382},{9,11,721},{9,11,778},{11,
-11,581},{140,11,466},{6,0,717},{4,11,486},{133,11,491},{132,0,875},{132,11,72},{
-6,11,265},{135,11,847},{4,0,237},{135,0,514},{6,0,392},{7,0,65},{135,0,2019},{
-140,11,261},{135,11,922},{137,11,404},{12,0,563},{14,0,101},{18,0,129},{7,10,
-1010},{11,10,733},{11,10,759},{13,10,34},{146,10,45},{7,10,1656},{9,10,369},{10,
-10,338},{10,10,490},{11,10,154},{11,10,545},{11,10,775},{13,10,77},{141,10,274},
-{4,0,444},{10,0,146},{140,0,9},{139,11,163},{7,0,1260},{135,0,1790},{9,0,222},{
-10,0,43},{139,0,900},{137,11,234},{138,0,971},{137,0,761},{134,0,699},{136,11,
-434},{6,0,1116},{7,0,1366},{5,10,20},{6,11,197},{6,10,298},{7,10,659},{8,11,205}
-,{137,10,219},{132,11,490},{11,11,820},{150,11,51},{7,10,1440},{11,10,854},{11,
-10,872},{11,10,921},{12,10,551},{13,10,472},{142,10,367},{140,11,13},{132,0,829}
-,{12,0,242},{132,10,439},{136,10,669},{6,0,593},{6,11,452},{7,11,312},{138,11,
-219},{4,11,333},{9,11,176},{12,11,353},{141,11,187},{7,0,36},{8,0,201},{136,0,
-605},{140,0,224},{132,10,233},{134,0,1430},{134,0,1806},{4,0,523},{133,0,638},{6
-,0,1889},{9,0,958},{9,0,971},{9,0,976},{12,0,796},{12,0,799},{12,0,808},{12,0,
-835},{12,0,836},{12,0,914},{12,0,946},{15,0,216},{15,0,232},{18,0,183},{18,0,187
-},{18,0,194},{18,0,212},{18,0,232},{149,0,49},{132,10,482},{6,0,827},{134,0,1434
-},{135,10,346},{134,0,2043},{6,0,242},{7,0,227},{7,0,1581},{8,0,104},{9,0,113},{
-9,0,220},{9,0,427},{10,0,136},{10,0,239},{11,0,579},{11,0,1023},{13,0,4},{13,0,
-204},{13,0,316},{148,0,86},{134,11,1685},{7,0,148},{8,0,284},{141,0,63},{142,0,
-10},{135,11,584},{134,0,1249},{7,0,861},{135,10,334},{5,10,795},{6,10,1741},{137
-,11,70},{132,0,807},{7,11,135},{8,11,7},{8,11,62},{9,11,243},{10,11,658},{10,11,
-697},{11,11,456},{139,11,756},{9,11,395},{138,11,79},{137,11,108},{147,0,94},{
-136,0,494},{135,11,631},{135,10,622},{7,0,1510},{135,10,1750},{4,10,203},{135,10
-,1936},{7,11,406},{7,11,459},{8,11,606},{139,11,726},{7,0,1306},{8,0,505},{9,0,
-482},{10,0,126},{11,0,225},{12,0,347},{12,0,449},{13,0,19},{14,0,218},{142,0,435
-},{5,0,268},{10,0,764},{12,0,120},{13,0,39},{145,0,127},{142,11,68},{11,10,678},
-{140,10,307},{12,11,268},{12,11,640},{142,11,119},{135,10,2044},{133,11,612},{4,
-11,372},{7,11,482},{8,11,158},{9,11,602},{9,11,615},{10,11,245},{10,11,678},{10,
-11,744},{11,11,248},{139,11,806},{7,10,311},{9,10,308},{140,10,255},{4,0,384},{
-135,0,1022},{5,11,854},{135,11,1991},{135,10,1266},{4,10,400},{5,10,267},{135,10
-,232},{135,0,1703},{9,0,159},{11,0,661},{140,0,603},{4,0,964},{14,0,438},{14,0,
-444},{14,0,456},{22,0,60},{22,0,63},{9,11,106},{9,11,163},{9,11,296},{10,11,167}
-,{10,11,172},{10,11,777},{139,11,16},{136,0,583},{132,0,515},{8,0,632},{8,0,697}
-,{137,0,854},{5,11,195},{135,11,1685},{6,0,1123},{134,0,1365},{134,11,328},{7,11
-,1997},{8,11,730},{139,11,1006},{4,0,136},{133,0,551},{134,0,1782},{7,0,1287},{9
-,0,44},{10,0,552},{10,0,642},{11,0,839},{12,0,274},{12,0,275},{12,0,372},{13,0,
-91},{142,0,125},{5,11,751},{11,11,797},{140,11,203},{133,0,732},{7,0,679},{8,0,
-313},{4,10,100},{135,11,821},{10,0,361},{142,0,316},{134,0,595},{6,0,147},{7,0,
-886},{9,0,753},{138,0,268},{5,10,362},{5,10,443},{6,10,318},{7,10,1019},{139,10,
-623},{5,10,463},{136,10,296},{4,10,454},{5,11,950},{5,11,994},{134,11,351},{138,
-0,137},{5,10,48},{5,10,404},{6,10,557},{7,10,458},{8,10,597},{10,10,455},{10,10,
-606},{11,10,49},{11,10,548},{12,10,476},{13,10,18},{141,10,450},{133,0,414},{135
-,0,1762},{5,11,421},{135,11,47},{5,10,442},{135,10,1984},{134,0,599},{134,0,1749
-},{134,0,1627},{4,0,488},{132,11,350},{137,11,751},{132,0,83},{140,0,676},{133,
-11,967},{7,0,1639},{5,10,55},{140,10,161},{4,11,473},{7,11,623},{8,11,808},{9,11
-,871},{9,11,893},{11,11,38},{11,11,431},{12,11,112},{12,11,217},{12,11,243},{12,
-11,562},{12,11,683},{13,11,141},{13,11,197},{13,11,227},{13,11,406},{13,11,487},
-{14,11,156},{14,11,203},{14,11,224},{14,11,256},{18,11,58},{150,11,0},{133,10,
-450},{7,11,736},{139,11,264},{134,0,278},{4,11,222},{7,11,286},{136,11,629},{135
-,10,869},{140,0,97},{144,0,14},{134,0,1085},{4,10,213},{7,10,223},{136,10,80},{7
-,0,388},{7,0,644},{139,0,781},{132,0,849},{7,0,229},{8,0,59},{9,0,190},{10,0,378
-},{140,0,191},{7,10,381},{7,10,806},{7,10,820},{8,10,354},{8,10,437},{8,10,787},
-{9,10,657},{10,10,58},{10,10,339},{10,10,749},{11,10,914},{12,10,162},{13,10,75}
-,{14,10,106},{14,10,198},{14,10,320},{14,10,413},{146,10,43},{141,11,306},{136,
-10,747},{134,0,1115},{16,0,94},{16,0,108},{136,11,146},{6,0,700},{6,0,817},{134,
-0,1002},{133,10,692},{4,11,465},{135,11,1663},{134,10,191},{6,0,1414},{135,11,
-913},{132,0,660},{7,0,1035},{138,0,737},{6,10,162},{7,10,1960},{136,10,831},{132
-,10,706},{7,0,690},{9,0,217},{9,0,587},{140,0,521},{138,10,426},{135,10,1235},{6
-,11,82},{7,11,138},{7,11,517},{9,11,673},{139,11,238},{138,0,272},{5,11,495},{7,
-11,834},{9,11,733},{139,11,378},{134,0,1744},{132,0,1011},{7,11,828},{142,11,116
-},{4,0,733},{9,0,194},{10,0,92},{11,0,198},{12,0,84},{13,0,128},{133,11,559},{10
-,0,57},{10,0,277},{6,11,21},{6,11,1737},{7,11,1444},{136,11,224},{4,10,204},{137
-,10,902},{136,10,833},{11,0,348},{12,0,99},{18,0,1},{18,0,11},{19,0,4},{7,10,366
-},{9,10,287},{12,10,199},{12,10,556},{140,10,577},{6,0,1981},{136,0,936},{21,0,
-33},{150,0,40},{5,11,519},{138,11,204},{5,10,356},{135,10,224},{134,0,775},{135,
-0,306},{7,10,630},{9,10,567},{11,10,150},{11,10,444},{141,10,119},{5,0,979},{134
-,10,539},{133,0,611},{4,11,402},{135,11,1679},{5,0,178},{7,11,2},{8,11,323},{136
-,11,479},{5,11,59},{135,11,672},{4,0,1010},{6,0,1969},{138,11,237},{133,11,412},
-{146,11,34},{7,11,1740},{146,11,48},{134,0,664},{139,10,814},{4,11,85},{135,11,
-549},{133,11,94},{133,11,457},{132,0,390},{134,0,1510},{4,10,235},{135,10,255},{
-4,10,194},{5,10,584},{6,11,11},{6,10,384},{7,11,187},{7,10,583},{10,10,761},{11,
-10,760},{139,10,851},{4,11,522},{139,11,802},{135,0,493},{10,11,776},{13,11,345}
-,{142,11,425},{146,0,37},{4,11,52},{135,11,661},{134,0,724},{134,0,829},{133,11,
-520},{133,10,562},{4,11,281},{5,11,38},{7,11,194},{7,11,668},{7,11,1893},{137,11
-,397},{5,10,191},{137,10,271},{7,0,1537},{14,0,96},{143,0,73},{5,0,473},{11,0,
-168},{4,10,470},{6,10,153},{7,10,1503},{7,10,1923},{10,10,701},{11,10,132},{11,
-10,227},{11,10,320},{11,10,436},{11,10,525},{11,10,855},{12,10,41},{12,10,286},{
-13,10,103},{13,10,284},{14,10,255},{14,10,262},{15,10,117},{143,10,127},{133,0,
-105},{5,0,438},{9,0,694},{12,0,627},{141,0,210},{133,10,327},{6,10,552},{7,10,
-1754},{137,10,604},{134,0,1256},{152,0,11},{5,11,448},{11,11,98},{139,11,524},{7
-,0,1626},{5,10,80},{6,10,405},{7,10,403},{7,10,1502},{8,10,456},{9,10,487},{9,10
-,853},{9,10,889},{10,10,309},{11,10,721},{11,10,994},{12,10,430},{13,10,165},{14
-,11,16},{146,11,44},{132,0,779},{8,0,25},{138,0,826},{4,10,453},{5,10,887},{6,10
-,535},{8,10,6},{8,10,543},{136,10,826},{137,11,461},{140,11,632},{132,0,308},{
-135,0,741},{132,0,671},{7,0,150},{8,0,649},{136,0,1020},{9,0,99},{6,11,336},{8,
-11,552},{9,11,285},{10,11,99},{139,11,568},{134,0,521},{5,0,339},{14,0,3},{15,0,
-41},{15,0,166},{147,0,66},{6,11,423},{7,11,665},{7,11,1210},{9,11,218},{141,11,
-222},{6,0,543},{5,10,101},{5,11,256},{6,10,88},{7,10,1677},{9,10,100},{10,10,677
-},{14,10,169},{14,10,302},{14,10,313},{15,10,48},{143,10,84},{4,10,310},{7,10,
-708},{7,10,996},{9,10,795},{10,10,390},{10,10,733},{11,10,451},{12,10,249},{14,
-10,115},{14,10,286},{143,10,100},{133,10,587},{13,11,417},{14,11,129},{143,11,15
-},{134,0,1358},{136,11,554},{132,10,498},{7,10,217},{8,10,140},{138,10,610},{135
-,11,989},{135,11,634},{6,0,155},{140,0,234},{135,11,462},{132,11,618},{134,0,
-1628},{132,0,766},{4,11,339},{5,10,905},{135,11,259},{135,0,829},{4,11,759},{141
-,11,169},{7,0,1445},{4,10,456},{7,10,358},{7,10,1637},{8,10,643},{139,10,483},{5
-,0,486},{135,0,1349},{5,11,688},{135,11,712},{7,0,1635},{8,0,17},{10,0,217},{10,
-0,295},{12,0,2},{140,11,2},{138,0,558},{150,10,56},{4,11,278},{5,11,465},{135,11
-,1367},{136,11,482},{133,10,535},{6,0,1362},{6,0,1461},{10,11,274},{10,11,625},{
-139,11,530},{5,0,599},{5,11,336},{6,11,341},{6,11,478},{6,11,1763},{136,11,386},
-{7,10,1748},{137,11,151},{134,0,1376},{133,10,539},{135,11,73},{135,11,1971},{
-139,11,283},{9,0,93},{139,0,474},{6,10,91},{135,10,435},{6,0,447},{5,11,396},{
-134,11,501},{4,10,16},{5,10,316},{5,10,842},{6,10,370},{6,10,1778},{8,10,166},{
-11,10,812},{12,10,206},{12,10,351},{14,10,418},{16,10,15},{16,10,34},{18,10,3},{
-19,10,3},{19,10,7},{20,10,4},{149,10,21},{7,0,577},{7,0,1432},{9,0,475},{9,0,505
-},{9,0,526},{9,0,609},{9,0,689},{9,0,726},{9,0,735},{9,0,738},{10,0,556},{10,0,
-674},{10,0,684},{11,0,89},{11,0,202},{11,0,272},{11,0,380},{11,0,415},{11,0,505}
-,{11,0,537},{11,0,550},{11,0,562},{11,0,640},{11,0,667},{11,0,688},{11,0,847},{
-11,0,927},{11,0,930},{11,0,940},{12,0,144},{12,0,325},{12,0,329},{12,0,389},{12,
-0,403},{12,0,451},{12,0,515},{12,0,604},{12,0,616},{12,0,626},{13,0,66},{13,0,
-131},{13,0,167},{13,0,236},{13,0,368},{13,0,411},{13,0,434},{13,0,453},{13,0,461
-},{13,0,474},{14,0,59},{14,0,60},{14,0,139},{14,0,152},{14,0,276},{14,0,353},{14
-,0,402},{15,0,28},{15,0,81},{15,0,123},{15,0,152},{18,0,136},{148,0,88},{4,11,
-929},{133,11,799},{136,11,46},{142,0,307},{4,0,609},{7,0,756},{9,0,544},{11,0,
-413},{144,0,25},{10,0,687},{7,10,619},{10,10,547},{11,10,122},{140,10,601},{4,0,
-930},{133,0,947},{133,0,939},{142,0,21},{4,11,892},{133,11,770},{133,0,962},{5,0
-,651},{8,0,170},{9,0,61},{9,0,63},{10,0,23},{10,0,37},{10,0,834},{11,0,4},{11,0,
-187},{11,0,281},{11,0,503},{11,0,677},{12,0,96},{12,0,130},{12,0,244},{14,0,5},{
-14,0,40},{14,0,162},{14,0,202},{146,0,133},{4,0,406},{5,0,579},{12,0,492},{150,0
-,15},{135,11,158},{135,0,597},{132,0,981},{132,10,888},{4,10,149},{138,10,368},{
-132,0,545},{4,10,154},{7,10,1134},{136,10,105},{135,11,2001},{134,0,1558},{4,10,
-31},{6,10,429},{7,10,962},{9,10,458},{139,10,691},{132,10,312},{135,10,1642},{6,
-0,17},{6,0,1304},{7,0,16},{7,0,1001},{9,0,886},{10,0,489},{10,0,800},{11,0,782},
-{12,0,320},{13,0,467},{14,0,145},{14,0,387},{143,0,119},{135,0,1982},{17,0,17},{
-7,11,1461},{140,11,91},{4,10,236},{132,11,602},{138,0,907},{136,0,110},{7,0,272}
-,{19,0,53},{5,10,836},{5,10,857},{134,10,1680},{5,0,458},{7,11,1218},{136,11,303
-},{7,0,1983},{8,0,0},{8,0,171},{9,0,120},{9,0,732},{10,0,473},{11,0,656},{11,0,
-998},{18,0,0},{18,0,2},{19,0,21},{10,10,68},{139,10,494},{137,11,662},{4,11,13},
-{5,11,567},{7,11,1498},{9,11,124},{11,11,521},{140,11,405},{4,10,81},{139,10,867
-},{135,11,1006},{7,11,800},{7,11,1783},{138,11,12},{9,0,295},{10,0,443},{5,10,
-282},{8,10,650},{137,10,907},{132,11,735},{4,11,170},{4,10,775},{135,11,323},{6,
-0,1844},{10,0,924},{11,11,844},{12,11,104},{140,11,625},{5,11,304},{7,11,1403},{
-140,11,498},{134,0,1232},{4,0,519},{10,0,70},{12,0,26},{14,0,17},{14,0,178},{15,
-0,34},{149,0,12},{132,0,993},{4,11,148},{133,11,742},{6,0,31},{7,0,491},{7,0,530
-},{8,0,592},{11,0,53},{11,0,779},{12,0,167},{12,0,411},{14,0,14},{14,0,136},{15,
-0,72},{16,0,17},{144,0,72},{133,0,907},{134,0,733},{133,11,111},{4,10,71},{5,10,
-376},{7,10,119},{138,10,665},{136,0,55},{8,0,430},{136,11,430},{4,0,208},{5,0,
-106},{6,0,531},{8,0,408},{9,0,188},{138,0,572},{12,0,56},{11,10,827},{14,10,34},
-{143,10,148},{134,0,1693},{133,11,444},{132,10,479},{140,0,441},{9,0,449},{10,0,
-192},{138,0,740},{134,0,928},{4,0,241},{7,10,607},{136,10,99},{8,11,123},{15,11,
-6},{144,11,7},{6,11,285},{8,11,654},{11,11,749},{12,11,190},{12,11,327},{13,11,
-120},{13,11,121},{13,11,327},{15,11,47},{146,11,40},{4,10,41},{5,10,74},{7,10,
-1627},{11,10,871},{140,10,619},{7,0,1525},{11,10,329},{11,10,965},{12,10,241},{
-14,10,354},{15,10,22},{148,10,63},{132,0,259},{135,11,183},{9,10,209},{137,10,
-300},{5,11,937},{135,11,100},{133,10,98},{4,0,173},{5,0,312},{5,0,512},{135,0,
-1285},{141,0,185},{7,0,1603},{7,0,1691},{9,0,464},{11,0,195},{12,0,279},{12,0,
-448},{14,0,11},{147,0,102},{135,0,1113},{133,10,984},{4,0,452},{5,0,583},{135,0,
-720},{4,0,547},{5,0,817},{6,0,433},{7,0,593},{7,0,1378},{8,0,161},{9,0,284},{10,
-0,313},{139,0,886},{8,0,722},{4,10,182},{6,10,205},{135,10,220},{150,0,13},{4,10
-,42},{9,10,205},{9,10,786},{138,10,659},{6,0,289},{7,0,1670},{12,0,57},{151,0,4}
-,{132,10,635},{14,0,43},{146,0,21},{139,10,533},{135,0,1694},{8,0,420},{139,0,
-193},{135,0,409},{132,10,371},{4,10,272},{135,10,836},{5,10,825},{134,10,1640},{
-5,11,251},{5,11,956},{8,11,268},{9,11,214},{146,11,142},{138,0,308},{6,0,1863},{
-141,11,37},{137,10,879},{7,10,317},{135,10,569},{132,11,294},{134,0,790},{5,0,
-1002},{136,0,745},{5,11,346},{5,11,711},{136,11,390},{135,0,289},{5,0,504},{11,0
-,68},{137,10,307},{4,0,239},{6,0,477},{7,0,1607},{139,0,617},{149,0,13},{133,0,
-609},{133,11,624},{5,11,783},{7,11,1998},{135,11,2047},{133,10,525},{132,0,367},
-{132,11,594},{6,0,528},{133,10,493},{4,10,174},{135,10,911},{8,10,417},{137,10,
-782},{132,0,694},{7,0,548},{137,0,58},{4,10,32},{5,10,215},{6,10,269},{7,10,1782
-},{7,10,1892},{10,10,16},{11,10,822},{11,10,954},{141,10,481},{140,0,687},{7,0,
-1749},{136,10,477},{132,11,569},{133,10,308},{135,10,1088},{4,0,661},{138,0,1004
-},{5,11,37},{6,11,39},{6,11,451},{7,11,218},{7,11,667},{7,11,1166},{7,11,1687},{
-8,11,662},{144,11,2},{9,0,445},{12,0,53},{13,0,492},{5,10,126},{8,10,297},{9,10,
-366},{140,10,374},{7,10,1551},{139,10,361},{148,0,74},{134,11,508},{135,0,213},{
-132,10,175},{132,10,685},{6,0,760},{6,0,834},{134,0,1248},{7,11,453},{7,11,635},
-{7,11,796},{8,11,331},{9,11,328},{9,11,330},{9,11,865},{10,11,119},{10,11,235},{
-11,11,111},{11,11,129},{11,11,240},{12,11,31},{12,11,66},{12,11,222},{12,11,269}
-,{12,11,599},{12,11,689},{13,11,186},{13,11,364},{142,11,345},{7,0,1672},{139,0,
-189},{133,10,797},{133,10,565},{6,0,1548},{6,11,98},{7,11,585},{135,11,702},{9,0
-,968},{15,0,192},{149,0,56},{4,10,252},{6,11,37},{7,11,299},{7,10,1068},{7,11,
-1666},{8,11,195},{8,11,316},{9,11,178},{9,11,276},{9,11,339},{9,11,536},{10,11,
-102},{10,11,362},{10,10,434},{10,11,785},{11,11,55},{11,11,149},{11,10,228},{11,
-10,426},{11,11,773},{13,10,231},{13,11,416},{13,11,419},{14,11,38},{14,11,41},{
-14,11,210},{18,10,106},{148,10,87},{4,0,751},{11,0,390},{140,0,32},{4,0,409},{
-133,0,78},{11,11,458},{12,11,15},{140,11,432},{7,0,1602},{10,0,257},{10,0,698},{
-11,0,544},{11,0,585},{12,0,212},{13,0,307},{5,10,231},{7,10,601},{9,10,277},{9,
-10,674},{10,10,178},{10,10,418},{10,10,509},{11,10,531},{12,10,113},{12,10,475},
-{13,10,99},{142,10,428},{6,0,473},{145,0,105},{6,0,1949},{15,0,156},{133,11,645}
-,{7,10,1591},{144,10,43},{135,0,1779},{135,10,1683},{4,11,290},{135,11,1356},{
-134,0,763},{6,11,70},{7,11,1292},{10,11,762},{139,11,288},{142,0,29},{140,11,428
-},{7,0,883},{7,11,131},{7,11,422},{8,11,210},{140,11,573},{134,0,488},{4,10,399}
-,{5,10,119},{5,10,494},{7,10,751},{137,10,556},{133,0,617},{132,11,936},{139,0,
-50},{7,0,1518},{139,0,694},{137,0,785},{4,0,546},{135,0,2042},{7,11,716},{13,11,
-97},{141,11,251},{132,11,653},{145,0,22},{134,0,1016},{4,0,313},{133,0,577},{136
-,11,657},{8,0,184},{141,0,433},{135,0,935},{6,0,720},{9,0,114},{146,11,80},{12,0
-,186},{12,0,292},{14,0,100},{18,0,70},{7,10,594},{7,10,851},{7,10,1858},{9,10,
-411},{9,10,574},{9,10,666},{9,10,737},{10,10,346},{10,10,712},{11,10,246},{11,10
-,432},{11,10,517},{11,10,647},{11,10,679},{11,10,727},{12,10,304},{12,10,305},{
-12,10,323},{12,10,483},{12,10,572},{12,10,593},{12,10,602},{13,10,95},{13,10,101
-},{13,10,171},{13,10,315},{13,10,378},{13,10,425},{13,10,475},{14,10,63},{14,10,
-380},{14,10,384},{15,10,133},{18,10,112},{148,10,72},{135,10,1093},{135,11,1836}
-,{132,10,679},{137,10,203},{11,0,402},{12,0,109},{12,0,431},{13,0,179},{13,0,206
-},{14,0,217},{16,0,3},{148,0,53},{7,11,1368},{8,11,232},{8,11,361},{10,11,682},{
-138,11,742},{137,10,714},{5,0,886},{6,0,46},{6,0,1790},{7,0,14},{7,0,732},{7,0,
-1654},{8,0,95},{8,0,327},{8,0,616},{9,0,892},{10,0,598},{10,0,769},{11,0,134},{
-11,0,747},{12,0,378},{14,0,97},{137,11,534},{4,0,969},{136,10,825},{137,11,27},{
-6,0,727},{142,11,12},{133,0,1021},{134,0,1190},{134,11,1657},{5,10,143},{5,10,
-769},{6,10,1760},{7,10,682},{7,10,1992},{136,10,736},{132,0,153},{135,11,127},{
-133,0,798},{132,0,587},{6,0,598},{7,0,42},{8,0,695},{10,0,212},{11,0,158},{14,0,
-196},{145,0,85},{133,10,860},{6,0,1929},{134,0,1933},{5,0,957},{5,0,1008},{9,0,
-577},{12,0,141},{6,10,422},{7,10,0},{7,10,1544},{8,11,364},{11,10,990},{12,10,
-453},{13,10,47},{141,10,266},{134,0,1319},{4,0,129},{135,0,465},{7,0,470},{7,0,
-1057},{7,0,1201},{9,0,755},{11,0,906},{140,0,527},{7,0,908},{146,0,7},{5,0,148},
-{136,0,450},{5,10,515},{137,10,131},{7,10,1605},{11,10,962},{146,10,139},{132,10
-,646},{134,0,1166},{4,10,396},{7,10,728},{9,10,117},{13,10,202},{148,10,51},{6,
-10,121},{6,10,124},{6,10,357},{7,10,1138},{7,10,1295},{8,10,162},{139,10,655},{
-14,0,374},{142,11,374},{138,0,253},{139,0,1003},{5,11,909},{9,11,849},{138,11,
-805},{133,10,237},{7,11,525},{7,11,1579},{8,11,497},{136,11,573},{137,0,46},{132
-,0,879},{134,0,806},{135,0,1868},{6,0,1837},{134,0,1846},{6,0,730},{134,0,881},{
-7,0,965},{7,0,1460},{7,0,1604},{7,11,193},{7,11,397},{7,11,1105},{8,11,124},{8,
-11,619},{9,11,305},{10,11,264},{11,11,40},{12,11,349},{13,11,134},{13,11,295},{
-14,11,155},{15,11,120},{146,11,105},{136,0,506},{143,0,10},{4,11,262},{7,11,342}
-,{7,10,571},{7,10,1877},{10,10,366},{141,11,23},{133,11,641},{10,0,22},{9,10,513
-},{10,10,39},{12,10,122},{140,10,187},{135,11,1431},{150,11,49},{4,11,99},{6,11,
-250},{6,11,346},{8,11,127},{138,11,81},{6,0,2014},{8,0,928},{10,0,960},{10,0,979
-},{140,0,996},{134,0,296},{132,11,915},{5,11,75},{9,11,517},{10,11,470},{12,11,
-155},{141,11,224},{137,10,873},{4,0,854},{140,11,18},{134,0,587},{7,10,107},{7,
-10,838},{8,10,550},{138,10,401},{11,0,636},{15,0,145},{17,0,34},{19,0,50},{23,0,
-20},{11,10,588},{11,10,864},{11,10,968},{143,10,160},{135,11,216},{7,0,982},{10,
-0,32},{143,0,56},{133,10,768},{133,11,954},{6,11,304},{7,11,1114},{8,11,418},{10
-,11,345},{11,11,341},{11,11,675},{141,11,40},{9,11,410},{139,11,425},{136,0,941}
-,{5,0,435},{132,10,894},{5,0,85},{6,0,419},{7,0,134},{7,0,305},{7,0,361},{7,0,
-1337},{8,0,71},{140,0,519},{140,0,688},{135,0,740},{5,0,691},{7,0,345},{9,0,94},
-{140,0,169},{5,0,183},{6,0,582},{10,0,679},{140,0,435},{134,11,14},{6,0,945},{
-135,0,511},{134,11,1708},{5,11,113},{6,11,243},{7,11,1865},{11,11,161},{16,11,37
-},{145,11,99},{132,11,274},{137,0,539},{7,0,1993},{8,0,684},{134,10,272},{6,0,
-659},{134,0,982},{4,10,9},{5,10,128},{7,10,368},{11,10,480},{148,10,3},{134,0,
-583},{132,0,803},{133,0,704},{4,0,179},{5,0,198},{133,0,697},{7,0,347},{7,0,971}
-,{8,0,181},{10,0,711},{135,11,166},{136,10,682},{4,10,2},{7,10,545},{7,10,894},{
-136,11,521},{135,0,481},{132,0,243},{5,0,203},{7,0,19},{7,0,71},{7,0,113},{10,0,
-405},{11,0,357},{142,0,240},{5,11,725},{5,11,727},{135,11,1811},{6,0,826},{137,
-11,304},{7,0,1450},{139,0,99},{133,11,654},{134,0,492},{5,0,134},{6,0,408},{6,0,
-495},{7,0,1593},{6,11,273},{10,11,188},{13,11,377},{146,11,77},{9,10,769},{140,
-10,185},{135,11,410},{142,0,4},{4,0,665},{134,11,1785},{4,0,248},{7,0,137},{137,
-0,349},{5,10,530},{142,10,113},{7,0,1270},{139,0,612},{132,11,780},{5,0,371},{
-135,0,563},{135,0,826},{6,0,1535},{23,0,21},{151,0,23},{4,0,374},{7,0,547},{7,0,
-1700},{7,0,1833},{139,0,858},{133,10,556},{7,11,612},{8,11,545},{8,11,568},{8,11
-,642},{9,11,717},{10,11,541},{10,11,763},{11,11,449},{12,11,489},{13,11,153},{13
-,11,296},{14,11,138},{14,11,392},{15,11,50},{16,11,6},{16,11,12},{148,11,9},{9,0
-,311},{141,0,42},{8,10,16},{140,10,568},{6,0,1968},{6,0,2027},{138,0,991},{6,0,
-1647},{7,0,1552},{7,0,2010},{9,0,494},{137,0,509},{133,11,948},{6,10,186},{137,
-10,426},{134,0,769},{134,0,642},{132,10,585},{6,0,123},{7,0,214},{9,0,728},{10,0
-,157},{11,0,346},{11,0,662},{143,0,106},{142,11,381},{135,0,1435},{4,11,532},{5,
-11,706},{135,11,662},{5,11,837},{134,11,1651},{4,10,93},{5,10,252},{6,10,229},{7
-,10,291},{9,10,550},{139,10,644},{148,0,79},{137,10,749},{134,0,1425},{137,10,
-162},{4,11,362},{7,11,52},{7,11,303},{140,11,166},{132,10,381},{4,11,330},{7,11,
-933},{7,11,2012},{136,11,292},{135,11,767},{4,0,707},{5,0,588},{6,0,393},{13,0,
-106},{18,0,49},{147,0,41},{6,0,211},{7,0,1690},{11,0,486},{140,0,369},{137,11,
-883},{4,11,703},{135,11,207},{4,0,187},{5,0,184},{5,0,690},{7,0,1869},{10,0,756}
-,{139,0,783},{132,11,571},{134,0,1382},{5,0,175},{6,10,77},{6,10,157},{7,10,974}
-,{7,10,1301},{7,10,1339},{7,10,1490},{7,10,1873},{137,10,628},{134,0,1493},{5,11
-,873},{133,11,960},{134,0,1007},{12,11,93},{12,11,501},{13,11,362},{14,11,151},{
-15,11,40},{15,11,59},{16,11,46},{17,11,25},{18,11,14},{18,11,134},{19,11,25},{19
-,11,69},{20,11,16},{20,11,19},{20,11,66},{21,11,23},{21,11,25},{150,11,42},{11,
-10,919},{141,10,409},{134,0,219},{5,0,582},{6,0,1646},{7,0,99},{7,0,1962},{7,0,
-1986},{8,0,515},{8,0,773},{9,0,23},{9,0,491},{12,0,620},{142,0,93},{133,0,851},{
-5,11,33},{134,11,470},{135,11,1291},{134,0,1278},{135,11,1882},{135,10,1489},{
-132,0,1000},{138,0,982},{8,0,762},{8,0,812},{137,0,910},{6,11,47},{7,11,90},{7,
-11,664},{7,11,830},{7,11,1380},{7,11,2025},{8,11,448},{136,11,828},{4,0,98},{4,0
-,940},{6,0,1819},{6,0,1834},{6,0,1841},{7,0,1365},{8,0,859},{8,0,897},{8,0,918},
-{9,0,422},{9,0,670},{10,0,775},{10,0,894},{10,0,909},{10,0,910},{10,0,935},{11,0
-,210},{12,0,750},{12,0,755},{13,0,26},{13,0,457},{13,0,476},{16,0,100},{16,0,109
-},{18,0,173},{18,0,175},{8,10,398},{9,10,681},{139,10,632},{9,11,417},{137,11,
-493},{136,10,645},{138,0,906},{134,0,1730},{134,10,20},{133,11,1019},{134,0,1185
-},{10,0,40},{136,10,769},{9,0,147},{134,11,208},{140,0,650},{5,0,209},{6,0,30},{
-11,0,56},{139,0,305},{132,0,553},{138,11,344},{6,11,68},{7,11,398},{7,11,448},{7
-,11,1629},{7,11,1813},{8,11,387},{8,11,442},{9,11,710},{10,11,282},{138,11,722},
-{5,0,597},{14,0,20},{142,11,20},{135,0,1614},{135,10,1757},{4,0,150},{5,0,303},{
-6,0,327},{135,10,937},{16,0,49},{7,10,1652},{144,11,49},{8,0,192},{10,0,78},{141
-,0,359},{135,0,786},{143,0,134},{6,0,1638},{7,0,79},{7,0,496},{9,0,138},{10,0,
-336},{11,0,12},{12,0,412},{12,0,440},{142,0,305},{136,11,491},{4,10,579},{5,10,
-226},{5,10,323},{135,10,960},{7,0,204},{7,0,415},{8,0,42},{10,0,85},{139,0,564},
-{132,0,614},{4,11,403},{5,11,441},{7,11,450},{11,11,101},{12,11,193},{141,11,430
-},{135,11,1927},{135,11,1330},{4,0,3},{5,0,247},{5,0,644},{7,0,744},{7,0,1207},{
-7,0,1225},{7,0,1909},{146,0,147},{136,0,942},{4,0,1019},{134,0,2023},{5,11,679},
-{133,10,973},{5,0,285},{9,0,67},{13,0,473},{143,0,82},{7,11,328},{137,11,326},{
-151,0,8},{6,10,135},{135,10,1176},{135,11,1128},{134,0,1309},{135,11,1796},{135,
-10,314},{4,11,574},{7,11,350},{7,11,1024},{8,11,338},{9,11,677},{10,11,808},{139
-,11,508},{7,11,818},{17,11,14},{17,11,45},{18,11,75},{148,11,18},{146,10,4},{135
-,11,1081},{4,0,29},{6,0,532},{7,0,1628},{7,0,1648},{9,0,350},{10,0,433},{11,0,97
-},{11,0,557},{11,0,745},{12,0,289},{12,0,335},{12,0,348},{12,0,606},{13,0,116},{
-13,0,233},{13,0,466},{14,0,181},{14,0,209},{14,0,232},{14,0,236},{14,0,300},{16,
-0,41},{148,0,97},{7,0,318},{6,10,281},{8,10,282},{8,10,480},{8,10,499},{9,10,198
-},{10,10,143},{10,10,169},{10,10,211},{10,10,417},{10,10,574},{11,10,147},{11,10
-,395},{12,10,75},{12,10,407},{12,10,608},{13,10,500},{142,10,251},{135,11,1676},
-{135,11,2037},{135,0,1692},{5,0,501},{7,0,1704},{9,0,553},{11,0,520},{12,0,557},
-{141,0,249},{6,0,1527},{14,0,324},{15,0,55},{15,0,80},{14,11,324},{15,11,55},{
-143,11,80},{135,10,1776},{8,0,988},{137,11,297},{132,10,419},{142,0,223},{139,11
-,234},{7,0,1123},{12,0,508},{14,0,102},{14,0,226},{144,0,57},{4,10,138},{7,10,
-1012},{7,10,1280},{137,10,76},{7,0,1764},{5,10,29},{140,10,638},{134,0,2015},{
-134,0,1599},{138,11,56},{6,11,306},{7,11,1140},{7,11,1340},{8,11,133},{138,11,
-449},{139,11,1011},{6,10,1710},{135,10,2038},{7,11,1763},{140,11,310},{6,0,129},
-{4,10,17},{5,10,23},{7,10,995},{11,10,383},{11,10,437},{12,10,460},{140,10,532},
-{5,11,329},{136,11,260},{133,10,862},{132,0,534},{6,0,811},{135,0,626},{132,11,
-657},{4,0,25},{5,0,60},{6,0,504},{7,0,614},{7,0,1155},{12,0,0},{152,11,7},{7,0,
-1248},{11,0,621},{139,0,702},{137,0,321},{8,10,70},{12,10,171},{141,10,272},{10,
-10,233},{139,10,76},{4,0,379},{7,0,1397},{134,10,442},{5,11,66},{7,11,1896},{136
-,11,288},{134,11,1643},{134,10,1709},{4,11,21},{5,11,91},{5,11,570},{5,11,648},{
-5,11,750},{5,11,781},{6,11,54},{6,11,112},{6,11,402},{6,11,1732},{7,11,315},{7,
-11,749},{7,11,1347},{7,11,1900},{9,11,78},{9,11,508},{10,11,611},{11,11,510},{11
-,11,728},{13,11,36},{14,11,39},{16,11,83},{17,11,124},{148,11,30},{4,0,118},{6,0
-,274},{6,0,361},{7,0,75},{141,0,441},{10,11,322},{10,11,719},{139,11,407},{147,
-10,119},{12,11,549},{14,11,67},{147,11,60},{11,10,69},{12,10,105},{12,10,117},{
-13,10,213},{14,10,13},{14,10,62},{14,10,177},{14,10,421},{15,10,19},{146,10,141}
-,{9,0,841},{137,10,309},{7,10,608},{7,10,976},{8,11,125},{8,11,369},{8,11,524},{
-9,10,146},{10,10,206},{10,11,486},{10,10,596},{11,11,13},{11,11,381},{11,11,736}
-,{11,11,766},{11,11,845},{13,11,114},{13,10,218},{13,11,292},{14,11,47},{142,10,
-153},{12,0,693},{135,11,759},{5,0,314},{6,0,221},{7,0,419},{10,0,650},{11,0,396}
-,{12,0,156},{13,0,369},{14,0,333},{145,0,47},{6,11,1684},{6,11,1731},{7,11,356},
-{7,11,1932},{8,11,54},{8,11,221},{9,11,225},{9,11,356},{10,11,77},{10,11,446},{
-10,11,731},{12,11,404},{141,11,491},{132,11,375},{4,10,518},{135,10,1136},{4,0,
-913},{4,11,411},{11,11,643},{140,11,115},{4,11,80},{133,11,44},{8,10,689},{137,
-10,863},{138,0,880},{4,10,18},{7,10,145},{7,10,444},{7,10,1278},{8,10,49},{8,10,
-400},{9,10,71},{9,10,250},{10,10,459},{12,10,160},{144,10,24},{136,0,475},{5,0,
-1016},{5,11,299},{135,11,1083},{7,0,602},{8,0,179},{10,0,781},{140,0,126},{6,0,
-329},{138,0,111},{135,0,1864},{4,11,219},{7,11,1761},{137,11,86},{6,0,1888},{6,0
-,1892},{6,0,1901},{6,0,1904},{9,0,953},{9,0,985},{9,0,991},{9,0,1001},{12,0,818}
-,{12,0,846},{12,0,847},{12,0,861},{12,0,862},{12,0,873},{12,0,875},{12,0,877},{
-12,0,879},{12,0,881},{12,0,884},{12,0,903},{12,0,915},{12,0,926},{12,0,939},{15,
-0,182},{15,0,219},{15,0,255},{18,0,191},{18,0,209},{18,0,211},{149,0,41},{5,11,
-328},{135,11,918},{137,0,780},{12,0,82},{143,0,36},{133,10,1010},{5,0,821},{134,
-0,1687},{133,11,514},{132,0,956},{134,0,1180},{10,0,112},{5,10,87},{7,10,313},{7
-,10,1103},{10,10,582},{11,10,389},{11,10,813},{12,10,385},{13,10,286},{14,10,124
-},{146,10,108},{5,0,71},{7,0,1407},{9,0,704},{10,0,261},{10,0,619},{11,0,547},{
-11,0,619},{143,0,157},{4,0,531},{5,0,455},{5,11,301},{6,11,571},{14,11,49},{146,
-11,102},{132,10,267},{6,0,385},{7,0,2008},{9,0,337},{138,0,517},{133,11,726},{
-133,11,364},{4,11,76},{7,11,1550},{9,11,306},{9,11,430},{9,11,663},{10,11,683},{
-11,11,427},{11,11,753},{12,11,334},{12,11,442},{14,11,258},{14,11,366},{143,11,
-131},{6,0,1865},{6,0,1879},{6,0,1881},{6,0,1894},{6,0,1908},{9,0,915},{9,0,926},
-{9,0,940},{9,0,943},{9,0,966},{9,0,980},{9,0,989},{9,0,1005},{9,0,1010},{12,0,
-813},{12,0,817},{12,0,840},{12,0,843},{12,0,855},{12,0,864},{12,0,871},{12,0,872
-},{12,0,899},{12,0,905},{12,0,924},{15,0,171},{15,0,181},{15,0,224},{15,0,235},{
-15,0,251},{146,0,184},{137,11,52},{5,0,16},{6,0,86},{6,0,603},{7,0,292},{7,0,561
-},{8,0,257},{8,0,382},{9,0,721},{9,0,778},{11,0,581},{140,0,466},{4,0,486},{5,0,
-491},{135,10,1121},{4,0,72},{6,0,265},{135,0,1300},{135,11,1183},{10,10,249},{
-139,10,209},{132,10,561},{137,11,519},{4,11,656},{4,10,760},{135,11,779},{9,10,
-154},{140,10,485},{135,11,1793},{135,11,144},{136,10,255},{133,0,621},{4,10,368}
-,{135,10,641},{135,11,1373},{7,11,554},{7,11,605},{141,11,10},{137,0,234},{5,0,
-815},{6,0,1688},{134,0,1755},{5,11,838},{5,11,841},{134,11,1649},{7,0,1987},{7,0
-,2040},{136,0,743},{133,11,1012},{6,0,197},{136,0,205},{6,0,314},{134,11,314},{
-144,11,53},{6,11,251},{7,11,365},{7,11,1357},{7,11,1497},{8,11,154},{141,11,281}
-,{133,11,340},{6,0,452},{7,0,312},{138,0,219},{138,0,589},{4,0,333},{9,0,176},{
-12,0,353},{141,0,187},{9,10,92},{147,10,91},{134,0,1110},{11,0,47},{139,11,495},
-{6,10,525},{8,10,806},{9,10,876},{140,10,284},{8,11,261},{9,11,144},{9,11,466},{
-10,11,370},{12,11,470},{13,11,144},{142,11,348},{137,11,897},{8,0,863},{8,0,864}
-,{8,0,868},{8,0,884},{10,0,866},{10,0,868},{10,0,873},{10,0,911},{10,0,912},{10,
-0,944},{12,0,727},{6,11,248},{9,11,546},{10,11,535},{11,11,681},{141,11,135},{6,
-0,300},{135,0,1515},{134,0,1237},{139,10,958},{133,10,594},{140,11,250},{134,0,
-1685},{134,11,567},{7,0,135},{8,0,7},{8,0,62},{9,0,243},{10,0,658},{10,0,697},{
-11,0,456},{139,0,756},{9,0,395},{138,0,79},{6,10,1641},{136,10,820},{4,10,302},{
-135,10,1766},{134,11,174},{135,10,1313},{135,0,631},{134,10,1674},{134,11,395},{
-138,0,835},{7,0,406},{7,0,459},{8,0,606},{139,0,726},{134,11,617},{134,0,979},{6
-,10,389},{7,10,149},{9,10,142},{138,10,94},{5,11,878},{133,11,972},{6,10,8},{7,
-10,1881},{8,10,91},{136,11,511},{133,0,612},{132,11,351},{4,0,372},{7,0,482},{8,
-0,158},{9,0,602},{9,0,615},{10,0,245},{10,0,678},{10,0,744},{11,0,248},{139,0,
-806},{5,0,854},{135,0,1991},{132,11,286},{135,11,344},{7,11,438},{7,11,627},{7,
-11,1516},{8,11,40},{9,11,56},{9,11,294},{10,11,30},{10,11,259},{11,11,969},{146,
-11,148},{135,0,1492},{5,11,259},{7,11,414},{7,11,854},{142,11,107},{135,10,1746}
-,{6,0,833},{134,0,998},{135,10,24},{6,0,750},{135,0,1739},{4,10,503},{135,10,
-1661},{5,10,130},{7,10,1314},{9,10,610},{10,10,718},{11,10,601},{11,10,819},{11,
-10,946},{140,10,536},{10,10,149},{11,10,280},{142,10,336},{132,11,738},{135,10,
-1946},{5,0,195},{135,0,1685},{7,0,1997},{8,0,730},{139,0,1006},{151,11,17},{133,
-11,866},{14,0,463},{14,0,470},{150,0,61},{5,0,751},{8,0,266},{11,0,578},{4,10,
-392},{135,10,1597},{5,10,433},{9,10,633},{139,10,629},{135,0,821},{6,0,715},{134
-,0,1325},{133,11,116},{6,0,868},{132,11,457},{134,0,959},{6,10,234},{138,11,199}
-,{7,0,1053},{7,10,1950},{8,10,680},{11,10,817},{147,10,88},{7,10,1222},{138,10,
-386},{5,0,950},{5,0,994},{6,0,351},{134,0,1124},{134,0,1081},{7,0,1595},{6,10,5}
-,{11,10,249},{12,10,313},{16,10,66},{145,10,26},{148,0,59},{5,11,527},{6,11,189}
-,{135,11,859},{5,10,963},{6,10,1773},{11,11,104},{11,11,554},{15,11,60},{143,11,
-125},{135,0,47},{137,0,684},{134,11,116},{134,0,1606},{134,0,777},{7,0,1020},{8,
-10,509},{136,10,792},{135,0,1094},{132,0,350},{133,11,487},{4,11,86},{5,11,667},
-{5,11,753},{6,11,316},{6,11,455},{135,11,946},{7,0,1812},{13,0,259},{13,0,356},{
-14,0,242},{147,0,114},{132,10,931},{133,0,967},{4,0,473},{7,0,623},{8,0,808},{9,
-0,871},{9,0,893},{11,0,38},{11,0,431},{12,0,112},{12,0,217},{12,0,243},{12,0,562
-},{12,0,663},{12,0,683},{13,0,141},{13,0,197},{13,0,227},{13,0,406},{13,0,487},{
-14,0,156},{14,0,203},{14,0,224},{14,0,256},{18,0,58},{150,0,0},{138,0,286},{7,10
-,943},{139,10,614},{135,10,1837},{150,11,45},{132,0,798},{4,0,222},{7,0,286},{
-136,0,629},{4,11,79},{7,11,1773},{10,11,450},{11,11,589},{13,11,332},{13,11,493}
-,{14,11,183},{14,11,334},{14,11,362},{14,11,368},{14,11,376},{14,11,379},{19,11,
-90},{19,11,103},{19,11,127},{148,11,90},{5,0,337},{11,0,513},{11,0,889},{11,0,
-961},{12,0,461},{13,0,79},{15,0,121},{4,10,90},{5,10,545},{7,10,754},{9,10,186},
-{10,10,72},{10,10,782},{11,10,577},{11,10,610},{12,10,354},{12,10,362},{140,10,
-595},{141,0,306},{136,0,146},{7,0,1646},{9,10,329},{11,10,254},{141,11,124},{4,0
-,465},{135,0,1663},{132,0,525},{133,11,663},{10,0,299},{18,0,74},{9,10,187},{11,
-10,1016},{145,10,44},{7,0,165},{7,0,919},{4,10,506},{136,10,517},{5,10,295},{135
-,10,1680},{133,11,846},{134,0,1064},{5,11,378},{7,11,1402},{7,11,1414},{8,11,465
-},{9,11,286},{10,11,185},{10,11,562},{10,11,635},{11,11,31},{11,11,393},{12,11,
-456},{13,11,312},{18,11,65},{18,11,96},{147,11,89},{132,0,596},{7,10,987},{9,10,
-688},{10,10,522},{11,10,788},{140,10,566},{6,0,82},{7,0,138},{7,0,517},{7,0,1741
-},{11,0,238},{4,11,648},{134,10,1775},{7,0,1233},{7,10,700},{7,10,940},{8,10,514
-},{9,10,116},{9,10,535},{10,10,118},{11,10,107},{11,10,148},{11,10,922},{12,10,
-254},{12,10,421},{142,10,238},{4,0,962},{6,0,1824},{8,0,894},{12,0,708},{12,0,
-725},{14,0,451},{20,0,94},{22,0,59},{150,0,62},{5,11,945},{6,11,1656},{6,11,1787
-},{7,11,167},{8,11,824},{9,11,391},{10,11,375},{139,11,185},{5,0,495},{7,0,834},
-{9,0,733},{139,0,378},{4,10,743},{135,11,1273},{6,0,1204},{7,11,1645},{8,11,352}
-,{137,11,249},{139,10,292},{133,0,559},{132,11,152},{9,0,499},{10,0,341},{15,0,
-144},{19,0,49},{7,10,1283},{9,10,227},{11,10,325},{11,10,408},{14,10,180},{146,
-10,47},{6,0,21},{6,0,1737},{7,0,1444},{136,0,224},{133,11,1006},{7,0,1446},{9,0,
-97},{17,0,15},{5,10,81},{7,10,146},{7,10,1342},{8,10,53},{8,10,561},{8,10,694},{
-8,10,754},{9,10,115},{9,10,894},{10,10,462},{10,10,813},{11,10,230},{11,10,657},
-{11,10,699},{11,10,748},{12,10,119},{12,10,200},{12,10,283},{142,10,273},{5,10,
-408},{137,10,747},{135,11,431},{135,11,832},{6,0,729},{134,0,953},{4,0,727},{8,0
-,565},{5,11,351},{7,11,264},{136,11,565},{134,0,1948},{5,0,519},{5,11,40},{7,11,
-598},{7,11,1638},{8,11,78},{9,11,166},{9,11,640},{9,11,685},{9,11,773},{11,11,
-215},{13,11,65},{14,11,172},{14,11,317},{145,11,6},{8,11,60},{9,11,343},{139,11,
-769},{137,11,455},{134,0,1193},{140,0,790},{7,11,1951},{8,11,765},{8,11,772},{
-140,11,671},{7,11,108},{8,11,219},{8,11,388},{9,11,639},{9,11,775},{11,11,275},{
-140,11,464},{132,11,468},{7,10,30},{8,10,86},{8,10,315},{8,10,700},{9,10,576},{9
-,10,858},{11,10,310},{11,10,888},{11,10,904},{12,10,361},{141,10,248},{5,11,15},
-{6,11,56},{7,11,1758},{8,11,500},{9,11,730},{11,11,331},{13,11,150},{142,11,282}
-,{4,0,402},{7,0,2},{8,0,323},{136,0,479},{138,10,839},{11,0,580},{142,0,201},{5,
-0,59},{135,0,672},{137,10,617},{146,0,34},{134,11,1886},{4,0,961},{136,0,896},{6
-,0,1285},{5,11,205},{6,11,438},{137,11,711},{134,10,428},{7,10,524},{8,10,169},{
-8,10,234},{9,10,480},{138,10,646},{148,0,46},{141,0,479},{133,11,534},{6,0,2019}
-,{134,10,1648},{4,0,85},{7,0,549},{7,10,1205},{138,10,637},{4,0,663},{5,0,94},{7
-,11,235},{7,11,1475},{15,11,68},{146,11,120},{6,11,443},{9,11,237},{9,11,571},{9
-,11,695},{10,11,139},{11,11,715},{12,11,417},{141,11,421},{132,0,783},{4,0,682},
-{8,0,65},{9,10,39},{10,10,166},{11,10,918},{12,10,635},{20,10,10},{22,10,27},{22
-,10,43},{150,10,52},{6,0,11},{135,0,187},{132,0,522},{4,0,52},{135,0,661},{4,0,
-383},{133,0,520},{135,11,546},{11,0,343},{142,0,127},{4,11,578},{7,10,157},{7,11
-,624},{7,11,916},{8,10,279},{10,11,256},{11,11,87},{139,11,703},{134,10,604},{4,
-0,281},{5,0,38},{7,0,194},{7,0,668},{7,0,1893},{137,0,397},{7,10,945},{11,10,713
-},{139,10,744},{139,10,1022},{9,0,635},{139,0,559},{5,11,923},{7,11,490},{12,11,
-553},{13,11,100},{14,11,118},{143,11,75},{132,0,975},{132,10,567},{137,10,859},{
-7,10,1846},{7,11,1846},{8,10,628},{136,11,628},{148,0,116},{138,11,750},{14,0,51
-},{14,11,51},{15,11,7},{148,11,20},{132,0,858},{134,0,1075},{4,11,924},{133,10,
-762},{136,0,535},{133,0,448},{10,10,784},{141,10,191},{133,10,298},{7,0,610},{
-135,0,1501},{7,10,633},{7,10,905},{7,10,909},{7,10,1538},{9,10,767},{140,10,636}
-,{4,11,265},{7,11,807},{135,11,950},{5,11,93},{12,11,267},{144,11,26},{136,0,191
-},{139,10,301},{135,10,1970},{135,0,267},{4,0,319},{5,0,699},{138,0,673},{6,0,
-336},{7,0,92},{7,0,182},{8,0,453},{8,0,552},{9,0,204},{9,0,285},{10,0,99},{11,0,
-568},{11,0,950},{12,0,94},{16,0,20},{16,0,70},{19,0,55},{12,10,644},{144,10,90},
-{6,0,551},{7,0,1308},{7,10,845},{7,11,994},{8,10,160},{137,10,318},{19,11,1},{19
-,11,26},{150,11,9},{7,0,1406},{9,0,218},{141,0,222},{5,0,256},{138,0,69},{5,11,
-233},{5,11,320},{6,11,140},{7,11,330},{136,11,295},{6,0,1980},{136,0,952},{4,0,
-833},{137,11,678},{133,11,978},{4,11,905},{6,11,1701},{137,11,843},{138,10,735},
-{136,10,76},{17,0,39},{148,0,36},{18,0,81},{146,11,81},{14,0,352},{17,0,53},{18,
-0,146},{18,0,152},{19,0,11},{150,0,54},{135,0,634},{138,10,841},{132,0,618},{4,0
-,339},{7,0,259},{17,0,73},{4,11,275},{140,11,376},{132,11,509},{7,11,273},{139,
-11,377},{4,0,759},{13,0,169},{137,10,804},{6,10,96},{135,10,1426},{4,10,651},{
-133,10,289},{7,0,1075},{8,10,35},{9,10,511},{10,10,767},{147,10,118},{6,0,649},{
-6,0,670},{136,0,482},{5,0,336},{6,0,341},{6,0,478},{6,0,1763},{136,0,386},{5,11,
-802},{7,11,2021},{8,11,805},{14,11,94},{15,11,65},{16,11,4},{16,11,77},{16,11,80
-},{145,11,5},{6,0,1035},{5,11,167},{5,11,899},{6,11,410},{137,11,777},{134,11,
-1705},{5,0,924},{133,0,969},{132,10,704},{135,0,73},{135,11,10},{135,10,1078},{5
-,11,11},{6,11,117},{6,11,485},{7,11,1133},{9,11,582},{9,11,594},{11,11,21},{11,
-11,818},{12,11,535},{141,11,86},{135,0,1971},{4,11,264},{7,11,1067},{8,11,204},{
-8,11,385},{139,11,953},{6,0,1458},{135,0,1344},{5,0,396},{134,0,501},{4,10,720},
-{133,10,306},{4,0,929},{5,0,799},{8,0,46},{8,0,740},{133,10,431},{7,11,646},{7,
-11,1730},{11,11,446},{141,11,178},{7,0,276},{5,10,464},{6,10,236},{7,10,696},{7,
-10,914},{7,10,1108},{7,10,1448},{9,10,15},{9,10,564},{10,10,14},{12,10,565},{13,
-10,449},{14,10,53},{15,10,13},{16,10,64},{145,10,41},{4,0,892},{133,0,770},{6,10
-,1767},{12,10,194},{145,10,107},{135,0,158},{5,10,840},{138,11,608},{134,0,1432}
-,{138,11,250},{8,11,794},{9,11,400},{10,11,298},{142,11,228},{151,0,25},{7,11,
-1131},{135,11,1468},{135,0,2001},{9,10,642},{11,10,236},{142,10,193},{4,10,68},{
-5,10,634},{6,10,386},{7,10,794},{8,10,273},{9,10,563},{10,10,105},{10,10,171},{
-11,10,94},{139,10,354},{136,11,724},{132,0,478},{11,11,512},{13,11,205},{19,11,
-30},{22,11,36},{151,11,19},{7,0,1461},{140,0,91},{6,11,190},{7,11,768},{135,11,
-1170},{4,0,602},{8,0,211},{4,10,95},{7,10,416},{139,10,830},{7,10,731},{13,10,20
-},{143,10,11},{6,0,1068},{135,0,1872},{4,0,13},{5,0,567},{7,0,1498},{9,0,124},{
-11,0,521},{12,0,405},{135,11,1023},{135,0,1006},{132,0,735},{138,0,812},{4,0,170
-},{135,0,323},{6,11,137},{9,11,75},{9,11,253},{10,11,194},{138,11,444},{5,0,304}
-,{7,0,1403},{5,10,864},{10,10,648},{11,10,671},{143,10,46},{135,11,1180},{133,10
-,928},{4,0,148},{133,0,742},{11,10,986},{140,10,682},{133,0,523},{135,11,1743},{
-7,0,730},{18,0,144},{19,0,61},{8,10,44},{9,10,884},{10,10,580},{11,10,399},{11,
-10,894},{143,10,122},{5,11,760},{7,11,542},{8,11,135},{136,11,496},{136,0,981},{
-133,0,111},{10,0,132},{11,0,191},{11,0,358},{139,0,460},{7,11,319},{7,11,355},{7
-,11,763},{10,11,389},{145,11,43},{134,0,890},{134,0,1420},{136,11,557},{133,10,
-518},{133,0,444},{135,0,1787},{135,10,1852},{8,0,123},{15,0,6},{144,0,7},{6,0,
-2041},{10,11,38},{139,11,784},{136,0,932},{5,0,937},{135,0,100},{6,0,995},{4,11,
-58},{5,11,286},{6,11,319},{7,11,402},{7,11,1254},{7,11,1903},{8,11,356},{140,11,
-408},{4,11,389},{9,11,181},{9,11,255},{10,11,8},{10,11,29},{10,11,816},{11,11,
-311},{11,11,561},{12,11,67},{141,11,181},{138,0,255},{5,0,138},{4,10,934},{136,
-10,610},{4,0,965},{10,0,863},{138,0,898},{10,10,804},{138,10,832},{12,0,631},{8,
-10,96},{9,10,36},{10,10,607},{11,10,423},{11,10,442},{12,10,309},{14,10,199},{15
-,10,90},{145,10,110},{134,0,1394},{4,0,652},{8,0,320},{22,0,6},{22,0,16},{9,10,
-13},{9,10,398},{9,10,727},{10,10,75},{10,10,184},{10,10,230},{10,10,564},{10,10,
-569},{11,10,973},{12,10,70},{12,10,189},{13,10,57},{141,10,257},{6,0,897},{134,0
-,1333},{4,0,692},{133,0,321},{133,11,373},{135,0,922},{5,0,619},{133,0,698},{137
-,10,631},{5,10,345},{135,10,1016},{9,0,957},{9,0,1018},{12,0,828},{12,0,844},{12
-,0,897},{12,0,901},{12,0,943},{15,0,180},{18,0,197},{18,0,200},{18,0,213},{18,0,
-214},{146,0,226},{5,0,917},{134,0,1659},{135,0,1100},{134,0,1173},{134,0,1930},{
-5,0,251},{5,0,956},{8,0,268},{9,0,214},{146,0,142},{133,10,673},{137,10,850},{4,
-10,287},{133,10,1018},{132,11,672},{5,0,346},{5,0,711},{8,0,390},{11,11,752},{
-139,11,885},{5,10,34},{10,10,724},{12,10,444},{13,10,354},{18,10,32},{23,10,24},
-{23,10,31},{152,10,5},{4,11,710},{134,11,606},{134,0,744},{134,10,382},{133,11,
-145},{4,10,329},{7,11,884},{140,11,124},{4,11,467},{5,11,405},{134,11,544},{9,10
-,846},{138,10,827},{133,0,624},{9,11,372},{15,11,2},{19,11,10},{147,11,18},{4,11
-,387},{135,11,1288},{5,0,783},{7,0,1998},{135,0,2047},{132,10,906},{136,10,366},
-{135,11,550},{4,10,123},{4,10,649},{5,10,605},{7,10,1509},{136,10,36},{134,0,
-1125},{132,0,594},{133,10,767},{135,11,1227},{136,11,467},{4,11,576},{135,11,
-1263},{4,0,268},{7,0,1534},{135,11,1534},{4,10,273},{5,10,658},{5,11,919},{5,10,
-995},{134,11,1673},{133,0,563},{134,10,72},{135,10,1345},{4,11,82},{5,11,333},{5
-,11,904},{6,11,207},{7,11,325},{7,11,1726},{8,11,101},{10,11,778},{139,11,220},{
-5,0,37},{6,0,39},{6,0,451},{7,0,218},{7,0,667},{7,0,1166},{7,0,1687},{8,0,662},{
-16,0,2},{133,10,589},{134,0,1332},{133,11,903},{134,0,508},{5,10,117},{6,10,514}
-,{6,10,541},{7,10,1164},{7,10,1436},{8,10,220},{8,10,648},{10,10,688},{11,10,560
-},{140,11,147},{6,11,555},{135,11,485},{133,10,686},{7,0,453},{7,0,635},{7,0,796
-},{8,0,331},{9,0,330},{9,0,865},{10,0,119},{10,0,235},{11,0,111},{11,0,129},{11,
-0,240},{12,0,31},{12,0,66},{12,0,222},{12,0,269},{12,0,599},{12,0,684},{12,0,689
-},{12,0,691},{142,0,345},{135,0,1834},{4,11,705},{7,11,615},{138,11,251},{136,11
-,345},{137,0,527},{6,0,98},{7,0,702},{135,0,991},{11,0,576},{14,0,74},{7,10,196}
-,{10,10,765},{11,10,347},{11,10,552},{11,10,790},{12,10,263},{13,10,246},{13,10,
-270},{13,10,395},{14,10,176},{14,10,190},{14,10,398},{14,10,412},{15,10,32},{15,
-10,63},{16,10,88},{147,10,105},{134,11,90},{13,0,84},{141,0,122},{6,0,37},{7,0,
-299},{7,0,1666},{8,0,195},{8,0,316},{9,0,178},{9,0,276},{9,0,339},{9,0,536},{10,
-0,102},{10,0,362},{10,0,785},{11,0,55},{11,0,149},{11,0,773},{13,0,416},{13,0,
-419},{14,0,38},{14,0,41},{142,0,210},{5,10,381},{135,10,1792},{7,11,813},{12,11,
-497},{141,11,56},{7,10,616},{138,10,413},{133,0,645},{6,11,125},{135,11,1277},{
-132,0,290},{6,0,70},{7,0,1292},{10,0,762},{139,0,288},{6,10,120},{7,10,1188},{7,
-10,1710},{8,10,286},{9,10,667},{11,10,592},{139,10,730},{135,11,1784},{7,0,1315}
-,{135,11,1315},{134,0,1955},{135,10,1146},{7,0,131},{7,0,422},{8,0,210},{140,0,
-573},{4,10,352},{135,10,687},{139,0,797},{143,0,38},{14,0,179},{15,0,151},{150,0
-,11},{7,0,488},{4,10,192},{5,10,49},{6,10,200},{6,10,293},{134,10,1696},{132,0,
-936},{135,11,703},{6,11,160},{7,11,1106},{9,11,770},{10,11,618},{11,11,112},{140
-,11,413},{5,0,453},{134,0,441},{135,0,595},{132,10,650},{132,10,147},{6,0,991},{
-6,0,1182},{12,11,271},{145,11,109},{133,10,934},{140,11,221},{132,0,653},{7,0,
-505},{135,0,523},{134,0,903},{135,11,479},{7,11,304},{9,11,646},{9,11,862},{10,
-11,262},{11,11,696},{12,11,208},{15,11,79},{147,11,108},{146,0,80},{135,11,981},
-{142,0,432},{132,0,314},{137,11,152},{7,0,1368},{8,0,232},{8,0,361},{10,0,682},{
-138,0,742},{135,11,1586},{9,0,534},{4,11,434},{11,11,663},{12,11,210},{13,11,166
-},{13,11,310},{14,11,373},{147,11,43},{7,11,1091},{135,11,1765},{6,11,550},{135,
-11,652},{137,0,27},{142,0,12},{4,10,637},{5,11,553},{7,11,766},{138,11,824},{7,
-11,737},{8,11,298},{136,11,452},{7,0,736},{139,0,264},{134,0,1657},{133,11,292},
-{138,11,135},{6,0,844},{134,0,1117},{135,0,127},{9,10,867},{138,10,837},{6,0,
-1184},{134,0,1208},{134,0,1294},{136,0,364},{6,0,1415},{7,0,1334},{11,0,125},{6,
-10,170},{7,11,393},{8,10,395},{8,10,487},{10,11,603},{11,11,206},{141,10,147},{
-137,11,748},{4,11,912},{137,11,232},{4,10,535},{136,10,618},{137,0,792},{7,11,
-1973},{136,11,716},{135,11,98},{5,0,909},{9,0,849},{138,0,805},{4,0,630},{132,0,
-699},{5,11,733},{14,11,103},{150,10,23},{12,11,158},{18,11,8},{19,11,62},{20,11,
-6},{22,11,4},{23,11,2},{151,11,9},{132,0,968},{132,10,778},{132,10,46},{5,10,811
-},{6,10,1679},{6,10,1714},{135,10,2032},{6,0,1446},{7,10,1458},{9,10,407},{139,
-10,15},{7,0,206},{7,0,397},{7,0,621},{7,0,640},{8,0,124},{8,0,619},{9,0,305},{9,
-0,643},{10,0,264},{10,0,628},{11,0,40},{12,0,349},{13,0,134},{13,0,295},{14,0,
-155},{15,0,120},{18,0,105},{6,10,34},{7,10,1089},{8,10,708},{8,10,721},{9,10,363
-},{148,10,98},{4,0,262},{5,0,641},{135,0,342},{137,11,72},{4,0,99},{6,0,250},{6,
-0,346},{8,0,127},{138,0,81},{132,0,915},{5,0,75},{9,0,517},{10,0,470},{12,0,155}
-,{141,0,224},{132,10,462},{11,11,600},{11,11,670},{141,11,245},{142,0,83},{5,10,
-73},{6,10,23},{134,10,338},{6,0,1031},{139,11,923},{7,11,164},{7,11,1571},{9,11,
-107},{140,11,225},{134,0,1470},{133,0,954},{6,0,304},{8,0,418},{10,0,345},{11,0,
-341},{139,0,675},{9,0,410},{139,0,425},{4,11,27},{5,11,484},{5,11,510},{6,11,434
-},{7,11,1000},{7,11,1098},{8,11,2},{136,11,200},{134,0,734},{140,11,257},{7,10,
-725},{8,10,498},{139,10,268},{134,0,1822},{135,0,1798},{135,10,773},{132,11,460}
-,{4,11,932},{133,11,891},{134,0,14},{132,10,583},{7,10,1462},{8,11,625},{139,10,
-659},{5,0,113},{6,0,243},{6,0,1708},{7,0,1865},{11,0,161},{16,0,37},{17,0,99},{
-133,10,220},{134,11,76},{5,11,461},{135,11,1925},{140,0,69},{8,11,92},{137,11,
-221},{139,10,803},{132,10,544},{4,0,274},{134,0,922},{132,0,541},{5,0,627},{6,10
-,437},{6,10,564},{11,10,181},{141,10,183},{135,10,1192},{7,0,166},{132,11,763},{
-133,11,253},{134,0,849},{9,11,73},{10,11,110},{14,11,185},{145,11,119},{5,11,212
-},{12,11,35},{141,11,382},{133,0,717},{137,0,304},{136,0,600},{133,0,654},{6,0,
-273},{10,0,188},{13,0,377},{146,0,77},{4,10,790},{5,10,273},{134,10,394},{132,0,
-543},{135,0,410},{11,0,98},{11,0,524},{141,0,87},{132,0,941},{135,11,1175},{4,0,
-250},{7,0,1612},{11,0,186},{12,0,133},{6,10,127},{7,10,1511},{8,10,613},{12,10,
-495},{12,10,586},{12,10,660},{12,10,668},{14,10,385},{15,10,118},{17,10,20},{146
-,10,98},{6,0,1785},{133,11,816},{134,0,1339},{7,0,961},{7,0,1085},{7,0,1727},{8,
-0,462},{6,10,230},{135,11,1727},{9,0,636},{135,10,1954},{132,0,780},{5,11,869},{
-5,11,968},{6,11,1626},{8,11,734},{136,11,784},{4,11,542},{6,11,1716},{6,11,1727}
-,{7,11,1082},{7,11,1545},{8,11,56},{8,11,118},{8,11,412},{8,11,564},{9,11,888},{
-9,11,908},{10,11,50},{10,11,423},{11,11,685},{11,11,697},{11,11,933},{12,11,299}
-,{13,11,126},{13,11,136},{13,11,170},{141,11,190},{134,11,226},{4,11,232},{9,11,
-202},{10,11,474},{140,11,433},{137,11,500},{5,0,529},{136,10,68},{132,10,654},{4
-,10,156},{7,10,998},{7,10,1045},{7,10,1860},{9,10,48},{9,10,692},{11,10,419},{
-139,10,602},{7,0,1276},{8,0,474},{9,0,652},{6,11,108},{7,11,1003},{7,11,1181},{
-136,11,343},{7,11,1264},{7,11,1678},{11,11,945},{12,11,341},{12,11,471},{140,11,
-569},{134,11,1712},{5,0,948},{12,0,468},{19,0,96},{148,0,24},{4,11,133},{7,11,
-711},{7,11,1298},{7,11,1585},{135,11,1929},{6,0,753},{140,0,657},{139,0,941},{6,
-11,99},{7,11,1808},{145,11,57},{6,11,574},{7,11,428},{7,11,1250},{10,11,669},{11
-,11,485},{11,11,840},{12,11,300},{142,11,250},{4,0,532},{5,0,706},{135,0,662},{5
-,0,837},{6,0,1651},{139,0,985},{7,0,1861},{9,10,197},{10,10,300},{12,10,473},{13
-,10,90},{141,10,405},{137,11,252},{6,11,323},{135,11,1564},{4,0,330},{4,0,863},{
-7,0,933},{7,0,2012},{8,0,292},{7,11,461},{8,11,775},{138,11,435},{132,10,606},{4
-,11,655},{7,11,850},{17,11,75},{146,11,137},{135,0,767},{7,10,1978},{136,10,676}
-,{132,0,641},{135,11,1559},{134,0,1233},{137,0,242},{17,0,114},{4,10,361},{133,
-10,315},{137,0,883},{132,10,461},{138,0,274},{134,0,2008},{134,0,1794},{4,0,703}
-,{135,0,207},{12,0,285},{132,10,472},{132,0,571},{5,0,873},{5,0,960},{8,0,823},{
-9,0,881},{136,11,577},{7,0,617},{10,0,498},{11,0,501},{12,0,16},{140,0,150},{138
-,10,747},{132,0,431},{133,10,155},{11,0,283},{11,0,567},{7,10,163},{8,10,319},{9
-,10,402},{10,10,24},{10,10,681},{11,10,200},{12,10,253},{12,10,410},{142,10,219}
-,{4,11,413},{5,11,677},{8,11,432},{140,11,280},{9,0,401},{5,10,475},{7,10,1780},
-{11,10,297},{11,10,558},{14,10,322},{147,10,76},{6,0,781},{9,0,134},{10,0,2},{10
-,0,27},{10,0,333},{11,0,722},{143,0,1},{5,0,33},{6,0,470},{139,0,424},{135,0,
-2006},{12,0,783},{135,10,1956},{136,0,274},{135,0,1882},{132,0,794},{135,0,1848}
-,{5,10,944},{134,10,1769},{6,0,47},{7,0,90},{7,0,664},{7,0,830},{7,0,1380},{7,0,
-2025},{8,0,448},{136,0,828},{132,10,144},{134,0,1199},{4,11,395},{139,11,762},{
-135,11,1504},{9,0,417},{137,0,493},{9,11,174},{10,11,164},{11,11,440},{11,11,841
-},{143,11,98},{134,11,426},{139,11,1002},{134,0,295},{134,0,816},{6,10,247},{137
-,10,555},{133,0,1019},{4,0,620},{5,11,476},{10,10,280},{138,10,797},{139,0,464},
-{5,11,76},{6,11,458},{6,11,497},{7,11,764},{7,11,868},{9,11,658},{10,11,594},{11
-,11,173},{11,11,566},{12,11,20},{12,11,338},{141,11,200},{134,0,208},{4,11,526},
-{7,11,1029},{135,11,1054},{132,11,636},{6,11,233},{7,11,660},{7,11,1124},{17,11,
-31},{19,11,22},{151,11,14},{10,0,442},{133,10,428},{10,0,930},{140,0,778},{6,0,
-68},{7,0,448},{7,0,1629},{7,0,1769},{7,0,1813},{8,0,442},{8,0,516},{9,0,710},{10
-,0,282},{10,0,722},{7,10,1717},{138,10,546},{134,0,1128},{11,0,844},{12,0,104},{
-140,0,625},{4,11,432},{135,11,824},{138,10,189},{133,0,787},{133,10,99},{4,11,
-279},{7,11,301},{137,11,362},{8,0,491},{4,10,397},{136,10,555},{4,11,178},{133,
-11,399},{134,0,711},{144,0,9},{4,0,403},{5,0,441},{7,0,450},{10,0,840},{11,0,101
-},{12,0,193},{141,0,430},{135,11,1246},{12,10,398},{20,10,39},{21,10,11},{150,10
-,41},{4,10,485},{7,10,353},{135,10,1523},{6,10,366},{7,10,1384},{7,10,1601},{135
-,11,1912},{7,0,396},{10,0,160},{135,11,396},{137,10,282},{134,11,1692},{4,10,157
-},{5,10,471},{6,11,202},{10,11,448},{11,11,208},{12,11,360},{17,11,117},{17,11,
-118},{18,11,27},{148,11,67},{133,0,679},{137,0,326},{136,10,116},{7,11,872},{10,
-11,516},{139,11,167},{132,11,224},{5,11,546},{7,11,35},{8,11,11},{8,11,12},{9,11
-,315},{9,11,533},{10,11,802},{11,11,166},{12,11,525},{142,11,243},{7,0,1128},{
-135,11,1920},{5,11,241},{8,11,242},{9,11,451},{10,11,667},{11,11,598},{140,11,
-429},{6,0,737},{5,10,160},{7,10,363},{7,10,589},{10,10,170},{141,10,55},{135,0,
-1796},{142,11,254},{4,0,574},{7,0,350},{7,0,1024},{8,0,338},{9,0,677},{138,0,808
-},{134,0,1096},{137,11,516},{7,0,405},{10,0,491},{4,10,108},{4,11,366},{139,10,
-498},{11,11,337},{142,11,303},{134,11,1736},{7,0,1081},{140,11,364},{7,10,1005},
-{140,10,609},{7,0,1676},{4,10,895},{133,10,772},{135,0,2037},{6,0,1207},{11,11,
-916},{142,11,419},{14,11,140},{148,11,41},{6,11,331},{136,11,623},{9,0,944},{9,0
-,969},{9,0,1022},{12,0,913},{12,0,936},{15,0,177},{15,0,193},{4,10,926},{133,10,
-983},{5,0,354},{135,11,506},{8,0,598},{9,0,664},{138,0,441},{4,11,640},{133,11,
-513},{137,0,297},{132,10,538},{6,10,294},{7,10,1267},{136,10,624},{7,0,1772},{7,
-11,1888},{8,11,289},{11,11,45},{12,11,278},{140,11,537},{135,10,1325},{138,0,751
-},{141,0,37},{134,0,1828},{132,10,757},{132,11,394},{6,0,257},{135,0,1522},{4,0,
-582},{9,0,191},{135,11,1931},{7,11,574},{7,11,1719},{137,11,145},{132,11,658},{
-10,0,790},{132,11,369},{9,11,781},{10,11,144},{11,11,385},{13,11,161},{13,11,228
-},{13,11,268},{148,11,107},{8,0,469},{10,0,47},{136,11,374},{6,0,306},{7,0,1140}
-,{7,0,1340},{8,0,133},{138,0,449},{139,0,1011},{7,10,1875},{139,10,124},{4,11,
-344},{6,11,498},{139,11,323},{137,0,299},{132,0,837},{133,11,906},{5,0,329},{8,0
-,260},{138,0,10},{134,0,1320},{4,0,657},{146,0,158},{135,0,1191},{152,0,7},{6,0,
-1939},{8,0,974},{138,0,996},{135,0,1665},{11,11,126},{139,11,287},{143,0,8},{14,
-11,149},{14,11,399},{143,11,57},{5,0,66},{7,0,1896},{136,0,288},{7,0,175},{10,0,
-494},{5,10,150},{8,10,603},{9,10,593},{9,10,634},{10,10,173},{11,10,462},{11,10,
-515},{13,10,216},{13,10,288},{142,10,400},{134,0,1643},{136,11,21},{4,0,21},{5,0
-,91},{5,0,648},{5,0,750},{5,0,781},{6,0,54},{6,0,112},{6,0,402},{6,0,1732},{7,0,
-315},{7,0,749},{7,0,1427},{7,0,1900},{9,0,78},{9,0,508},{10,0,611},{10,0,811},{
-11,0,510},{11,0,728},{13,0,36},{14,0,39},{16,0,83},{17,0,124},{148,0,30},{4,0,
-668},{136,0,570},{10,0,322},{10,0,719},{139,0,407},{135,11,1381},{136,11,193},{
-12,10,108},{141,10,291},{132,11,616},{136,11,692},{8,0,125},{8,0,369},{8,0,524},
-{10,0,486},{11,0,13},{11,0,381},{11,0,736},{11,0,766},{11,0,845},{13,0,114},{13,
-0,292},{142,0,47},{134,0,1247},{6,0,1684},{6,0,1731},{7,0,356},{8,0,54},{8,0,221
-},{9,0,225},{9,0,356},{10,0,77},{10,0,446},{10,0,731},{12,0,404},{141,0,491},{
-135,10,1777},{4,11,305},{4,10,493},{144,10,55},{4,0,951},{6,0,1809},{6,0,1849},{
-8,0,846},{8,0,866},{8,0,899},{10,0,896},{12,0,694},{142,0,468},{5,11,214},{7,11,
-603},{8,11,611},{9,11,686},{10,11,88},{11,11,459},{11,11,496},{12,11,463},{12,11
-,590},{13,11,0},{142,11,214},{132,0,411},{4,0,80},{133,0,44},{140,11,74},{143,0,
-31},{7,0,669},{6,10,568},{7,10,1804},{8,10,362},{8,10,410},{8,10,830},{9,10,514}
-,{11,10,649},{142,10,157},{7,0,673},{134,11,1703},{132,10,625},{134,0,1303},{5,0
-,299},{135,0,1083},{138,0,704},{6,0,275},{7,0,408},{6,10,158},{7,10,129},{7,10,
-181},{8,10,276},{8,10,377},{10,10,523},{11,10,816},{12,10,455},{13,10,303},{142,
-10,135},{4,0,219},{7,0,367},{7,0,1713},{7,0,1761},{9,0,86},{9,0,537},{10,0,165},
-{12,0,219},{140,0,561},{8,0,216},{4,10,1},{4,11,737},{6,11,317},{7,10,1143},{7,
-10,1463},{9,10,207},{9,10,390},{9,10,467},{10,11,98},{11,11,294},{11,10,836},{12
-,11,60},{12,11,437},{13,11,64},{13,11,380},{142,11,430},{6,11,1758},{8,11,520},{
-9,11,345},{9,11,403},{142,11,350},{5,11,47},{10,11,242},{138,11,579},{5,11,139},
-{7,11,1168},{138,11,539},{135,0,1319},{4,10,295},{4,10,723},{5,10,895},{7,10,
-1031},{8,10,199},{8,10,340},{9,10,153},{9,10,215},{10,10,21},{10,10,59},{10,10,
-80},{10,10,224},{10,10,838},{11,10,229},{11,10,652},{12,10,192},{13,10,146},{142
-,10,91},{140,0,428},{137,10,51},{133,0,514},{5,10,309},{140,10,211},{6,0,1010},{
-5,10,125},{8,10,77},{138,10,15},{4,0,55},{5,0,301},{6,0,571},{142,0,49},{146,0,
-102},{136,11,370},{4,11,107},{7,11,613},{8,11,358},{8,11,439},{8,11,504},{9,11,
-501},{10,11,383},{139,11,477},{132,11,229},{133,0,364},{133,10,439},{4,11,903},{
-135,11,1816},{11,0,379},{140,10,76},{4,0,76},{4,0,971},{7,0,1550},{9,0,306},{9,0
-,430},{9,0,663},{10,0,683},{10,0,921},{11,0,427},{11,0,753},{12,0,334},{12,0,442
-},{14,0,258},{14,0,366},{143,0,131},{137,0,52},{4,11,47},{6,11,373},{7,11,452},{
-7,11,543},{7,11,1714},{7,11,1856},{9,11,6},{11,11,257},{139,11,391},{4,10,8},{7,
-10,1152},{7,10,1153},{7,10,1715},{9,10,374},{10,10,478},{139,10,648},{4,11,785},
-{133,11,368},{135,10,1099},{135,11,860},{5,11,980},{134,11,1754},{134,0,1258},{6
-,0,1058},{6,0,1359},{7,11,536},{7,11,1331},{136,11,143},{4,0,656},{135,0,779},{
-136,10,87},{5,11,19},{6,11,533},{146,11,126},{7,0,144},{138,10,438},{5,11,395},{
-5,11,951},{134,11,1776},{135,0,1373},{7,0,554},{7,0,605},{141,0,10},{4,10,69},{5
-,10,122},{9,10,656},{138,10,464},{5,10,849},{134,10,1633},{5,0,838},{5,0,841},{
-134,0,1649},{133,0,1012},{139,10,499},{7,10,476},{7,10,1592},{138,10,87},{6,0,
-251},{7,0,365},{7,0,1357},{7,0,1497},{8,0,154},{141,0,281},{132,11,441},{132,11,
-695},{7,11,497},{9,11,387},{147,11,81},{133,0,340},{14,10,283},{142,11,283},{134
-,0,810},{135,11,1894},{139,0,495},{5,11,284},{6,11,49},{6,11,350},{7,11,1},{7,11
-,377},{7,11,1693},{8,11,18},{8,11,678},{9,11,161},{9,11,585},{9,11,671},{9,11,
-839},{11,11,912},{141,11,427},{5,10,859},{7,10,1160},{8,10,107},{9,10,291},{9,10
-,439},{10,10,663},{11,10,609},{140,10,197},{8,0,261},{9,0,144},{9,0,466},{10,0,
-370},{12,0,470},{13,0,144},{142,0,348},{137,0,897},{6,0,248},{9,0,546},{10,0,535
-},{11,0,681},{141,0,135},{4,0,358},{135,0,1496},{134,0,567},{136,0,445},{4,10,
-117},{6,10,372},{7,10,1905},{142,10,323},{4,10,722},{139,10,471},{6,0,697},{134,
-0,996},{7,11,2007},{9,11,101},{9,11,450},{10,11,66},{10,11,842},{11,11,536},{140
-,11,587},{132,0,577},{134,0,1336},{9,10,5},{12,10,216},{12,10,294},{12,10,298},{
-12,10,400},{12,10,518},{13,10,229},{143,10,139},{6,0,174},{138,0,917},{134,10,
-1774},{5,10,12},{7,10,375},{9,10,88},{9,10,438},{11,11,62},{139,10,270},{134,11,
-1766},{6,11,0},{7,11,84},{7,10,816},{7,10,1241},{9,10,283},{9,10,520},{10,10,213
-},{10,10,307},{10,10,463},{10,10,671},{10,10,746},{11,10,401},{11,10,794},{11,11
-,895},{12,10,517},{17,11,11},{18,10,107},{147,10,115},{5,0,878},{133,0,972},{6,
-11,1665},{7,11,256},{7,11,1388},{138,11,499},{4,10,258},{136,10,639},{4,11,22},{
-5,11,10},{6,10,22},{7,11,848},{7,10,903},{7,10,1963},{8,11,97},{138,10,577},{5,
-10,681},{136,10,782},{133,11,481},{132,0,351},{4,10,664},{5,10,804},{139,10,1013
-},{6,11,134},{7,11,437},{7,11,959},{9,11,37},{14,11,285},{14,11,371},{144,11,60}
-,{7,11,486},{8,11,155},{11,11,93},{140,11,164},{132,0,286},{7,0,438},{7,0,627},{
-7,0,1516},{8,0,40},{9,0,56},{9,0,294},{10,0,30},{11,0,969},{11,0,995},{146,0,148
-},{5,11,591},{135,11,337},{134,0,1950},{133,10,32},{138,11,500},{5,11,380},{5,11
-,650},{136,11,310},{4,11,364},{7,11,1156},{7,11,1187},{137,11,409},{4,0,738},{
-134,11,482},{4,11,781},{6,11,487},{7,11,926},{8,11,263},{139,11,500},{135,11,418
-},{6,0,2047},{10,0,969},{4,10,289},{7,10,629},{7,10,1698},{7,10,1711},{140,10,
-215},{6,10,450},{136,10,109},{134,0,818},{136,10,705},{133,0,866},{4,11,94},{135
-,11,1265},{132,11,417},{134,0,1467},{135,10,1238},{4,0,972},{6,0,1851},{134,0,
-1857},{134,0,355},{133,0,116},{132,0,457},{135,11,1411},{4,11,408},{4,11,741},{
-135,11,500},{134,10,26},{142,11,137},{5,0,527},{6,0,189},{7,0,859},{136,0,267},{
-11,0,104},{11,0,554},{15,0,60},{143,0,125},{134,0,1613},{4,10,414},{5,10,467},{9
-,10,654},{10,10,451},{12,10,59},{141,10,375},{135,10,17},{134,0,116},{135,11,541
-},{135,10,955},{6,11,73},{135,11,177},{133,11,576},{134,0,886},{133,0,487},{4,0,
-86},{5,0,667},{5,0,753},{6,0,316},{6,0,455},{135,0,946},{142,11,231},{150,0,45},
-{134,0,863},{134,0,1953},{6,10,280},{10,10,502},{11,10,344},{140,10,38},{4,0,79}
-,{7,0,1773},{10,0,450},{11,0,589},{13,0,332},{13,0,493},{14,0,183},{14,0,334},{
-14,0,362},{14,0,368},{14,0,376},{14,0,379},{19,0,90},{19,0,103},{19,0,127},{148,
-0,90},{5,10,45},{7,10,1161},{11,10,448},{11,10,880},{13,10,139},{13,10,407},{15,
-10,16},{17,10,95},{18,10,66},{18,10,88},{18,10,123},{149,10,7},{136,10,777},{4,
-10,410},{135,10,521},{135,10,1778},{135,11,538},{142,0,381},{133,11,413},{134,0,
-1142},{6,0,1189},{136,11,495},{5,0,663},{6,0,1962},{134,0,2003},{7,11,54},{8,11,
-312},{10,11,191},{10,11,614},{140,11,567},{132,10,436},{133,0,846},{10,0,528},{
-11,0,504},{7,10,1587},{135,10,1707},{5,0,378},{8,0,465},{9,0,286},{10,0,185},{10
-,0,562},{10,0,635},{11,0,31},{11,0,393},{13,0,312},{18,0,65},{18,0,96},{147,0,89
-},{7,0,899},{14,0,325},{6,11,468},{7,11,567},{7,11,1478},{8,11,530},{142,11,290}
-,{7,0,1880},{9,0,680},{139,0,798},{134,0,1770},{132,0,648},{150,11,35},{5,0,945}
-,{6,0,1656},{6,0,1787},{7,0,167},{8,0,824},{9,0,391},{10,0,375},{139,0,185},{6,
-11,484},{135,11,822},{134,0,2046},{7,0,1645},{8,0,352},{137,0,249},{132,0,152},{
-6,0,611},{135,0,1733},{6,11,1724},{135,11,2022},{133,0,1006},{141,11,96},{5,0,
-420},{135,0,1449},{146,11,149},{135,0,832},{135,10,663},{133,0,351},{5,0,40},{7,
-0,598},{7,0,1638},{8,0,78},{9,0,166},{9,0,640},{9,0,685},{9,0,773},{11,0,215},{
-13,0,65},{14,0,172},{14,0,317},{145,0,6},{8,0,60},{9,0,343},{139,0,769},{134,0,
-1354},{132,0,724},{137,0,745},{132,11,474},{7,0,1951},{8,0,765},{8,0,772},{140,0
-,671},{7,0,108},{8,0,219},{8,0,388},{9,0,775},{11,0,275},{140,0,464},{137,0,639}
-,{135,10,503},{133,11,366},{5,0,15},{6,0,56},{7,0,1758},{8,0,500},{9,0,730},{11,
-0,331},{13,0,150},{14,0,282},{5,11,305},{9,11,560},{141,11,208},{4,10,113},{5,10
-,163},{5,10,735},{7,10,1009},{9,10,9},{9,10,771},{12,10,90},{13,10,138},{13,10,
-410},{143,10,128},{4,10,324},{138,10,104},{135,11,466},{142,11,27},{134,0,1886},
-{5,0,205},{6,0,438},{9,0,711},{4,11,480},{6,11,167},{6,11,302},{6,11,1642},{7,11
-,130},{7,11,656},{7,11,837},{7,11,1547},{7,11,1657},{8,11,429},{9,11,228},{10,11
-,643},{13,11,289},{13,11,343},{147,11,101},{134,0,865},{6,0,2025},{136,0,965},{7
-,11,278},{10,11,739},{11,11,708},{141,11,348},{133,0,534},{135,11,1922},{137,0,
-691},{4,10,935},{133,10,823},{6,0,443},{9,0,237},{9,0,571},{9,0,695},{10,0,139},
-{11,0,715},{12,0,417},{141,0,421},{5,10,269},{7,10,434},{7,10,891},{8,10,339},{9
-,10,702},{11,10,594},{11,10,718},{145,10,100},{6,0,1555},{7,0,878},{9,10,485},{
-141,10,264},{134,10,1713},{7,10,1810},{11,10,866},{12,10,103},{141,10,495},{135,
-10,900},{6,0,1410},{9,11,316},{139,11,256},{4,0,995},{135,0,1033},{132,0,578},{
-10,0,881},{12,0,740},{12,0,743},{140,0,759},{132,0,822},{133,0,923},{142,10,143}
-,{135,11,1696},{6,11,363},{7,11,1955},{136,11,725},{132,0,924},{133,0,665},{135,
-10,2029},{135,0,1901},{4,0,265},{6,0,1092},{6,0,1417},{7,0,807},{135,0,950},{5,0
-,93},{12,0,267},{141,0,498},{135,0,1451},{5,11,813},{135,11,2046},{5,10,625},{
-135,10,1617},{135,0,747},{6,0,788},{137,0,828},{7,0,184},{11,0,307},{11,0,400},{
-15,0,130},{5,11,712},{7,11,1855},{8,10,425},{8,10,693},{9,10,720},{10,10,380},{
-10,10,638},{11,11,17},{11,10,473},{12,10,61},{13,11,321},{144,11,67},{135,0,198}
-,{6,11,320},{7,11,781},{7,11,1921},{9,11,55},{10,11,186},{10,11,273},{10,11,664}
-,{10,11,801},{11,11,996},{11,11,997},{13,11,157},{142,11,170},{136,11,271},{135,
-0,994},{7,11,103},{7,11,863},{11,11,184},{14,11,299},{145,11,62},{11,10,551},{
-142,10,159},{5,0,233},{5,0,320},{6,0,140},{8,0,295},{8,0,615},{136,11,615},{133,
-0,978},{4,0,905},{6,0,1701},{137,0,843},{132,10,168},{4,0,974},{8,0,850},{12,0,
-709},{12,0,768},{140,0,786},{135,10,91},{152,0,6},{138,10,532},{135,10,1884},{
-132,0,509},{6,0,1307},{135,0,273},{5,11,77},{7,11,1455},{10,11,843},{19,11,73},{
-150,11,5},{132,11,458},{135,11,1420},{6,11,109},{138,11,382},{6,0,201},{6,11,330
-},{7,10,70},{7,11,1084},{10,10,240},{11,11,142},{147,10,93},{7,0,1041},{140,11,
-328},{133,11,354},{134,0,1040},{133,0,693},{134,0,774},{139,0,234},{132,0,336},{
-7,0,1399},{139,10,392},{20,0,22},{148,11,22},{5,0,802},{7,0,2021},{136,0,805},{5
-,0,167},{5,0,899},{6,0,410},{137,0,777},{137,0,789},{134,0,1705},{7,10,655},{135
-,10,1844},{4,10,145},{6,10,176},{7,10,395},{137,10,562},{132,10,501},{135,0,10},
-{5,0,11},{6,0,117},{6,0,485},{7,0,1133},{9,0,582},{9,0,594},{10,0,82},{11,0,21},
-{11,0,818},{12,0,535},{13,0,86},{20,0,91},{23,0,13},{134,10,509},{4,0,264},{7,0,
-1067},{8,0,204},{8,0,385},{139,0,953},{139,11,737},{138,0,56},{134,0,1917},{133,
-0,470},{10,11,657},{14,11,297},{142,11,361},{135,11,412},{7,0,1198},{7,11,1198},
-{8,11,556},{14,11,123},{14,11,192},{143,11,27},{7,11,1985},{14,11,146},{15,11,42
-},{16,11,23},{17,11,86},{146,11,17},{11,0,1015},{136,11,122},{4,10,114},{9,10,
-492},{13,10,462},{142,10,215},{4,10,77},{5,10,361},{6,10,139},{6,10,401},{6,10,
-404},{7,10,413},{7,10,715},{7,10,1716},{11,10,279},{12,10,179},{12,10,258},{13,
-10,244},{142,10,358},{134,10,1717},{7,10,1061},{8,10,82},{11,10,250},{12,10,420}
-,{141,10,184},{133,0,715},{135,10,724},{9,0,919},{9,0,922},{9,0,927},{9,0,933},{
-9,0,962},{9,0,1000},{9,0,1002},{9,0,1021},{12,0,890},{12,0,907},{12,0,930},{15,0
-,207},{15,0,228},{15,0,238},{149,0,61},{8,0,794},{9,0,400},{10,0,298},{142,0,228
-},{5,11,430},{5,11,932},{6,11,131},{7,11,417},{9,11,522},{11,11,314},{141,11,390
-},{132,0,867},{8,0,724},{132,11,507},{137,11,261},{4,11,343},{133,11,511},{6,0,
-190},{7,0,768},{135,0,1170},{6,10,513},{135,10,1052},{7,11,455},{138,11,591},{
-134,0,1066},{137,10,899},{14,0,67},{147,0,60},{4,0,948},{18,0,174},{146,0,176},{
-135,0,1023},{7,10,1417},{12,10,382},{17,10,48},{152,10,12},{134,11,575},{132,0,
-764},{6,10,545},{7,10,565},{7,10,1669},{10,10,114},{11,10,642},{140,10,618},{6,0
-,137},{9,0,75},{9,0,253},{10,0,194},{138,0,444},{4,0,756},{133,10,5},{8,0,1008},
-{135,10,192},{132,0,842},{11,0,643},{12,0,115},{136,10,763},{139,0,67},{133,10,
-759},{4,0,821},{5,0,760},{7,0,542},{8,0,135},{8,0,496},{135,11,580},{7,10,370},{
-7,10,1007},{7,10,1177},{135,10,1565},{135,10,1237},{140,0,736},{7,0,319},{7,0,
-355},{7,0,763},{10,0,389},{145,0,43},{8,11,333},{138,11,182},{4,10,87},{5,10,250
-},{141,10,298},{138,0,786},{134,0,2044},{8,11,330},{140,11,477},{135,11,1338},{
-132,11,125},{134,0,1030},{134,0,1083},{132,11,721},{135,10,814},{7,11,776},{8,11
-,145},{147,11,56},{134,0,1226},{4,10,57},{7,10,1195},{7,10,1438},{7,10,1548},{7,
-10,1835},{7,10,1904},{9,10,757},{10,10,604},{139,10,519},{7,11,792},{8,11,147},{
-10,11,821},{139,11,1021},{137,11,797},{4,0,58},{5,0,286},{6,0,319},{7,0,402},{7,
-0,1254},{7,0,1903},{8,0,356},{140,0,408},{4,0,389},{4,0,815},{9,0,181},{9,0,255}
-,{10,0,8},{10,0,29},{10,0,816},{11,0,311},{11,0,561},{12,0,67},{141,0,181},{7,11
-,1472},{135,11,1554},{7,11,1071},{7,11,1541},{7,11,1767},{7,11,1806},{7,11,1999}
-,{9,11,248},{10,11,400},{11,11,162},{11,11,178},{11,11,242},{12,11,605},{15,11,
-26},{144,11,44},{5,11,168},{5,11,930},{8,11,74},{9,11,623},{12,11,500},{12,11,
-579},{13,11,41},{143,11,93},{6,11,220},{7,11,1101},{141,11,105},{5,0,474},{7,0,
-507},{4,10,209},{7,11,507},{135,10,902},{132,0,427},{6,0,413},{7,10,335},{7,10,
-1437},{7,10,1668},{8,10,553},{8,10,652},{8,10,656},{9,10,558},{11,10,743},{149,
-10,18},{132,0,730},{6,11,19},{7,11,1413},{139,11,428},{133,0,373},{132,10,559},{
-7,11,96},{8,11,401},{137,11,896},{7,0,799},{7,0,1972},{5,10,1017},{138,10,511},{
-135,0,1793},{7,11,1961},{7,11,1965},{8,11,702},{136,11,750},{8,11,150},{8,11,737
-},{140,11,366},{132,0,322},{133,10,709},{8,11,800},{9,11,148},{9,11,872},{9,11,
-890},{11,11,309},{11,11,1001},{13,11,267},{141,11,323},{134,10,1745},{7,0,290},{
-136,10,206},{7,0,1651},{145,0,89},{139,0,2},{132,0,672},{6,0,1860},{8,0,905},{10
-,0,844},{10,0,846},{10,0,858},{12,0,699},{12,0,746},{140,0,772},{135,11,424},{
-133,11,547},{133,0,737},{5,11,490},{6,11,615},{6,11,620},{135,11,683},{6,0,746},
-{134,0,1612},{132,10,776},{9,11,385},{149,11,17},{133,0,145},{135,10,1272},{7,0,
-884},{140,0,124},{4,0,387},{135,0,1288},{5,11,133},{136,10,406},{136,11,187},{6,
-0,679},{8,11,8},{138,11,0},{135,0,550},{135,11,798},{136,11,685},{7,11,1086},{
-145,11,46},{8,10,175},{10,10,168},{138,10,573},{135,0,1305},{4,0,576},{135,0,
-1263},{6,0,686},{134,0,1563},{134,0,607},{5,0,919},{134,0,1673},{148,0,37},{8,11
-,774},{10,11,670},{140,11,51},{133,10,784},{139,10,882},{4,0,82},{5,0,333},{5,0,
-904},{6,0,207},{7,0,325},{7,0,1726},{8,0,101},{10,0,778},{139,0,220},{135,11,371
-},{132,0,958},{133,0,903},{4,11,127},{5,11,350},{6,11,356},{8,11,426},{9,11,572}
-,{10,11,247},{139,11,312},{140,0,147},{6,11,59},{7,11,885},{9,11,603},{141,11,
-397},{10,0,367},{9,10,14},{9,10,441},{139,10,9},{11,10,966},{12,10,287},{13,10,
-342},{13,10,402},{15,10,110},{143,10,163},{134,0,690},{132,0,705},{9,0,651},{11,
-0,971},{13,0,273},{7,10,1428},{7,10,1640},{7,10,1867},{9,10,169},{9,10,182},{9,
-10,367},{9,10,478},{9,10,506},{9,10,551},{9,10,557},{9,10,648},{9,10,697},{9,10,
-705},{9,10,725},{9,10,787},{9,10,794},{10,10,198},{10,10,214},{10,10,267},{10,10
-,275},{10,10,456},{10,10,551},{10,10,561},{10,10,613},{10,10,627},{10,10,668},{
-10,10,675},{10,10,691},{10,10,695},{10,10,707},{10,10,715},{11,10,183},{11,10,
-201},{11,10,262},{11,10,352},{11,10,439},{11,10,493},{11,10,572},{11,10,591},{11
-,10,608},{11,10,611},{11,10,646},{11,10,674},{11,10,711},{11,10,751},{11,10,761}
-,{11,10,776},{11,10,785},{11,10,850},{11,10,853},{11,10,862},{11,10,865},{11,10,
-868},{11,10,875},{11,10,898},{11,10,902},{11,10,903},{11,10,910},{11,10,932},{11
-,10,942},{11,10,957},{11,10,967},{11,10,972},{12,10,148},{12,10,195},{12,10,220}
-,{12,10,237},{12,10,318},{12,10,339},{12,10,393},{12,10,445},{12,10,450},{12,10,
-474},{12,10,505},{12,10,509},{12,10,533},{12,10,591},{12,10,594},{12,10,597},{12
-,10,621},{12,10,633},{12,10,642},{13,10,59},{13,10,60},{13,10,145},{13,10,239},{
-13,10,250},{13,10,329},{13,10,344},{13,10,365},{13,10,372},{13,10,387},{13,10,
-403},{13,10,414},{13,10,456},{13,10,470},{13,10,478},{13,10,483},{13,10,489},{14
-,10,55},{14,10,57},{14,10,81},{14,10,90},{14,10,148},{14,10,239},{14,10,266},{14
-,10,321},{14,10,326},{14,10,327},{14,10,330},{14,10,347},{14,10,355},{14,10,401}
-,{14,10,404},{14,10,411},{14,10,414},{14,10,416},{14,10,420},{15,10,61},{15,10,
-74},{15,10,87},{15,10,88},{15,10,94},{15,10,96},{15,10,116},{15,10,149},{15,10,
-154},{16,10,50},{16,10,63},{16,10,73},{17,10,2},{17,10,66},{17,10,92},{17,10,103
-},{17,10,112},{17,10,120},{18,10,50},{18,10,54},{18,10,82},{18,10,86},{18,10,90}
-,{18,10,111},{18,10,115},{18,10,156},{19,10,40},{19,10,79},{20,10,78},{149,10,22
-},{7,0,887},{5,10,161},{135,10,839},{142,11,98},{134,0,90},{138,11,356},{135,11,
-441},{6,11,111},{7,11,4},{8,11,163},{8,11,776},{138,11,566},{134,0,908},{134,0,
-1261},{7,0,813},{12,0,497},{141,0,56},{134,0,1235},{135,0,429},{135,11,1994},{
-138,0,904},{6,0,125},{7,0,1277},{137,0,772},{151,0,12},{4,0,841},{5,0,386},{133,
-11,386},{5,11,297},{135,11,1038},{6,0,860},{6,0,1069},{135,11,309},{136,0,946},{
-135,10,1814},{141,11,418},{136,11,363},{10,0,768},{139,0,787},{22,11,30},{150,11
-,33},{6,0,160},{7,0,1106},{9,0,770},{11,0,112},{140,0,413},{11,11,216},{139,11,
-340},{136,10,139},{135,11,1390},{135,11,808},{132,11,280},{12,0,271},{17,0,109},
-{7,10,643},{136,10,236},{140,11,54},{4,11,421},{133,11,548},{11,0,719},{12,0,36}
-,{141,0,337},{7,0,581},{9,0,644},{137,0,699},{11,11,511},{13,11,394},{14,11,298}
-,{14,11,318},{146,11,103},{7,0,304},{9,0,646},{9,0,862},{11,0,696},{12,0,208},{
-15,0,79},{147,0,108},{4,0,631},{7,0,1126},{135,0,1536},{135,11,1527},{8,0,880},{
-10,0,869},{138,0,913},{7,0,1513},{5,10,54},{6,11,254},{9,11,109},{138,11,103},{
-135,0,981},{133,11,729},{132,10,744},{132,0,434},{134,0,550},{7,0,930},{10,0,476
-},{13,0,452},{19,0,104},{6,11,1630},{10,10,402},{146,10,55},{5,0,553},{138,0,824
-},{136,0,452},{8,0,151},{137,10,624},{132,10,572},{132,0,772},{133,11,671},{133,
-0,292},{138,0,135},{132,11,889},{140,11,207},{9,0,504},{6,10,43},{7,10,38},{8,10
-,248},{138,10,513},{6,0,1089},{135,11,1910},{4,11,627},{133,11,775},{135,0,783},
-{133,10,766},{133,10,363},{7,0,387},{135,11,387},{7,0,393},{10,0,603},{11,0,206}
-,{7,11,202},{11,11,362},{11,11,948},{140,11,388},{6,11,507},{7,11,451},{8,11,389
-},{12,11,490},{13,11,16},{13,11,215},{13,11,351},{18,11,132},{147,11,125},{4,0,
-912},{9,0,232},{135,11,841},{6,10,258},{140,10,409},{5,10,249},{148,10,82},{136,
-11,566},{6,0,977},{135,11,1214},{7,0,1973},{136,0,716},{135,0,98},{133,0,733},{5
-,11,912},{134,11,1695},{5,10,393},{6,10,378},{7,10,1981},{9,10,32},{9,10,591},{
-10,10,685},{10,10,741},{142,10,382},{133,10,788},{10,0,19},{11,0,911},{7,10,1968
-},{141,10,509},{5,0,668},{5,11,236},{6,11,572},{8,11,492},{11,11,618},{144,11,56
-},{135,11,1789},{4,0,360},{5,0,635},{5,0,700},{5,10,58},{5,10,171},{5,10,683},{6
-,10,291},{6,10,566},{7,10,1650},{11,10,523},{12,10,273},{12,10,303},{15,10,39},{
-143,10,111},{133,0,901},{134,10,589},{5,11,190},{136,11,318},{140,0,656},{7,0,
-726},{152,0,9},{4,10,917},{133,10,1005},{135,10,1598},{134,11,491},{4,10,919},{
-133,11,434},{137,0,72},{6,0,1269},{6,0,1566},{134,0,1621},{9,0,463},{10,0,595},{
-4,10,255},{5,10,302},{6,10,132},{7,10,128},{7,10,283},{7,10,1299},{10,10,52},{10
-,10,514},{11,10,925},{13,10,92},{142,10,309},{135,0,1454},{134,0,1287},{11,0,600
-},{13,0,245},{137,10,173},{136,0,989},{7,0,164},{7,0,1571},{9,0,107},{140,0,225}
-,{6,0,1061},{141,10,442},{4,0,27},{5,0,484},{5,0,510},{6,0,434},{7,0,1000},{7,0,
-1098},{136,0,2},{7,11,85},{7,11,247},{8,11,585},{10,11,163},{138,11,316},{11,11,
-103},{142,11,0},{134,0,1127},{4,0,460},{134,0,852},{134,10,210},{4,0,932},{133,0
-,891},{6,0,588},{147,11,83},{8,0,625},{4,10,284},{134,10,223},{134,0,76},{8,0,92
-},{137,0,221},{4,11,124},{10,11,457},{11,11,121},{11,11,169},{11,11,422},{11,11,
-870},{12,11,214},{13,11,389},{14,11,187},{143,11,77},{9,11,618},{138,11,482},{4,
-10,218},{7,10,526},{143,10,137},{13,0,9},{14,0,104},{14,0,311},{4,10,270},{5,10,
-192},{6,10,332},{135,10,1322},{140,10,661},{135,11,1193},{6,11,107},{7,11,638},{
-7,11,1632},{137,11,396},{132,0,763},{4,0,622},{5,11,370},{134,11,1756},{133,0,
-253},{135,0,546},{9,0,73},{10,0,110},{14,0,185},{17,0,119},{133,11,204},{7,0,624
-},{7,0,916},{10,0,256},{139,0,87},{7,10,379},{8,10,481},{137,10,377},{5,0,212},{
-12,0,35},{13,0,382},{5,11,970},{134,11,1706},{9,0,746},{5,10,1003},{134,10,149},
-{10,0,150},{11,0,849},{13,0,330},{8,10,262},{9,10,627},{11,10,214},{11,10,404},{
-11,10,457},{11,10,780},{11,10,913},{13,10,401},{142,10,200},{134,0,1466},{135,11
-,3},{6,0,1299},{4,11,35},{5,11,121},{5,11,483},{5,11,685},{6,11,489},{7,11,1204}
-,{136,11,394},{135,10,742},{4,10,142},{136,10,304},{4,11,921},{133,11,1007},{134
-,0,1518},{6,0,1229},{135,0,1175},{133,0,816},{12,0,159},{4,10,471},{4,11,712},{5
-,10,51},{6,10,602},{7,10,925},{8,10,484},{138,10,195},{134,11,1629},{5,0,869},{5
-,0,968},{6,0,1626},{8,0,734},{136,0,784},{4,0,542},{6,0,1716},{6,0,1727},{7,0,
-1082},{7,0,1545},{8,0,56},{8,0,118},{8,0,412},{8,0,564},{9,0,888},{9,0,908},{10,
-0,50},{10,0,423},{11,0,685},{11,0,697},{11,0,933},{12,0,299},{13,0,126},{13,0,
-136},{13,0,170},{13,0,190},{136,10,688},{132,10,697},{4,0,232},{9,0,202},{10,0,
-474},{140,0,433},{136,0,212},{6,0,108},{7,0,1003},{7,0,1181},{8,0,111},{136,0,
-343},{5,10,221},{135,11,1255},{133,11,485},{134,0,1712},{142,0,216},{5,0,643},{6
-,0,516},{4,11,285},{5,11,317},{6,11,301},{7,11,7},{8,11,153},{10,11,766},{11,11,
-468},{12,11,467},{141,11,143},{4,0,133},{7,0,711},{7,0,1298},{135,0,1585},{134,0
-,650},{135,11,512},{6,0,99},{7,0,1808},{145,0,57},{6,0,246},{6,0,574},{7,0,428},
-{9,0,793},{10,0,669},{11,0,485},{11,0,840},{12,0,300},{14,0,250},{145,0,55},{4,
-10,132},{5,10,69},{135,10,1242},{136,0,1023},{7,0,302},{132,10,111},{135,0,1871}
-,{132,0,728},{9,0,252},{132,10,767},{6,0,461},{7,0,1590},{7,10,1416},{7,10,2005}
-,{8,10,131},{8,10,466},{9,10,672},{13,10,252},{148,10,103},{6,0,323},{135,0,1564
-},{7,0,461},{136,0,775},{6,10,44},{136,10,368},{139,0,172},{132,0,464},{4,10,570
-},{133,10,120},{137,11,269},{6,10,227},{135,10,1589},{6,11,1719},{6,11,1735},{7,
-11,2016},{7,11,2020},{8,11,837},{137,11,852},{7,0,727},{146,0,73},{132,0,1023},{
-135,11,852},{135,10,1529},{136,0,577},{138,11,568},{134,0,1037},{8,11,67},{138,
-11,419},{4,0,413},{5,0,677},{8,0,432},{140,0,280},{10,0,600},{6,10,1667},{7,11,
-967},{7,10,2036},{141,11,11},{6,10,511},{140,10,132},{6,0,799},{5,10,568},{6,10,
-138},{135,10,1293},{8,0,159},{4,10,565},{136,10,827},{7,0,646},{7,0,1730},{11,0,
-446},{141,0,178},{4,10,922},{133,10,1023},{135,11,11},{132,0,395},{11,0,145},{
-135,10,1002},{9,0,174},{10,0,164},{11,0,440},{11,0,514},{11,0,841},{15,0,98},{
-149,0,20},{134,0,426},{10,0,608},{139,0,1002},{7,11,320},{8,11,51},{12,11,481},{
-12,11,570},{148,11,106},{9,0,977},{9,0,983},{132,11,445},{138,0,250},{139,0,100}
-,{6,0,1982},{136,10,402},{133,11,239},{4,10,716},{141,10,31},{5,0,476},{7,11,83}
-,{7,11,1990},{8,11,130},{139,11,720},{8,10,691},{136,10,731},{5,11,123},{6,11,
-530},{7,11,348},{135,11,1419},{5,0,76},{6,0,458},{6,0,497},{7,0,868},{9,0,658},{
-10,0,594},{11,0,173},{11,0,566},{12,0,20},{12,0,338},{141,0,200},{9,11,139},{10,
-11,399},{11,11,469},{12,11,634},{141,11,223},{9,10,840},{138,10,803},{133,10,847
-},{11,11,223},{140,11,168},{132,11,210},{8,0,447},{9,10,53},{9,10,268},{9,10,901
-},{10,10,518},{10,10,829},{11,10,188},{13,10,74},{14,10,46},{15,10,17},{15,10,33
-},{17,10,40},{18,10,36},{19,10,20},{22,10,1},{152,10,2},{4,0,526},{7,0,1029},{
-135,0,1054},{19,11,59},{150,11,2},{4,0,636},{6,0,1875},{6,0,1920},{9,0,999},{12,
-0,807},{12,0,825},{15,0,179},{15,0,190},{18,0,182},{136,10,532},{6,0,1699},{7,0,
-660},{7,0,1124},{17,0,31},{19,0,22},{151,0,14},{135,10,681},{132,11,430},{140,10
-,677},{4,10,684},{136,10,384},{132,11,756},{133,11,213},{7,0,188},{7,10,110},{8,
-10,290},{8,10,591},{9,10,382},{9,10,649},{11,10,71},{11,10,155},{11,10,313},{12,
-10,5},{13,10,325},{142,10,287},{7,10,360},{7,10,425},{9,10,66},{9,10,278},{138,
-10,644},{142,11,164},{4,0,279},{7,0,301},{137,0,362},{134,11,586},{135,0,1743},{
-4,0,178},{133,0,399},{4,10,900},{133,10,861},{5,10,254},{7,10,985},{136,10,73},{
-133,11,108},{7,10,1959},{136,10,683},{133,11,219},{4,11,193},{5,11,916},{7,11,
-364},{10,11,398},{10,11,726},{11,11,317},{11,11,626},{12,11,142},{12,11,288},{12
-,11,678},{13,11,313},{15,11,113},{18,11,114},{21,11,30},{150,11,53},{6,11,241},{
-7,11,907},{8,11,832},{9,11,342},{10,11,729},{11,11,284},{11,11,445},{11,11,651},
-{11,11,863},{13,11,398},{146,11,99},{132,0,872},{134,0,831},{134,0,1692},{6,0,
-202},{6,0,1006},{9,0,832},{10,0,636},{11,0,208},{12,0,360},{17,0,118},{18,0,27},
-{20,0,67},{137,11,734},{132,10,725},{7,11,993},{138,11,666},{134,0,1954},{134,10
-,196},{7,0,872},{10,0,516},{139,0,167},{133,10,831},{4,11,562},{9,11,254},{139,
-11,879},{137,0,313},{4,0,224},{132,11,786},{11,0,24},{12,0,170},{136,10,723},{5,
-0,546},{7,0,35},{8,0,11},{8,0,12},{9,0,315},{9,0,533},{10,0,802},{11,0,166},{12,
-0,525},{142,0,243},{7,0,1937},{13,10,80},{13,10,437},{145,10,74},{5,0,241},{8,0,
-242},{9,0,451},{10,0,667},{11,0,598},{140,0,429},{150,0,46},{6,0,1273},{137,0,
-830},{5,10,848},{6,10,66},{136,10,764},{6,0,825},{134,0,993},{4,0,1006},{10,0,
-327},{13,0,271},{4,10,36},{7,10,1387},{139,10,755},{134,0,1023},{135,0,1580},{4,
-0,366},{137,0,516},{132,10,887},{6,0,1736},{135,0,1891},{6,11,216},{7,11,901},{7
-,11,1343},{136,11,493},{6,10,165},{138,10,388},{7,11,341},{139,11,219},{4,10,719
-},{135,10,155},{134,0,1935},{132,0,826},{6,0,331},{6,0,1605},{8,0,623},{11,0,139
-},{139,0,171},{135,11,1734},{10,11,115},{11,11,420},{12,11,154},{13,11,404},{14,
-11,346},{15,11,54},{143,11,112},{7,0,288},{4,10,353},{6,10,146},{6,10,1789},{7,
-10,990},{7,10,1348},{9,10,665},{9,10,898},{11,10,893},{142,10,212},{6,0,916},{
-134,0,1592},{7,0,1888},{4,10,45},{135,10,1257},{5,11,1011},{136,11,701},{139,11,
-596},{4,11,54},{5,11,666},{7,11,1039},{7,11,1130},{9,11,195},{138,11,302},{134,0
-,1471},{134,0,1570},{132,0,394},{140,10,65},{136,10,816},{135,0,1931},{7,0,574},
-{135,0,1719},{134,11,467},{132,0,658},{9,0,781},{10,0,144},{11,0,385},{13,0,161}
-,{13,0,228},{13,0,268},{20,0,107},{134,11,1669},{136,0,374},{135,0,735},{4,0,344
-},{6,0,498},{139,0,323},{7,0,586},{7,0,1063},{6,10,559},{134,10,1691},{137,0,155
-},{133,0,906},{7,11,122},{9,11,259},{10,11,84},{11,11,470},{12,11,541},{141,11,
-379},{134,0,1139},{10,0,108},{139,0,116},{134,10,456},{133,10,925},{5,11,82},{5,
-11,131},{7,11,1755},{8,11,31},{9,11,168},{9,11,764},{139,11,869},{134,11,605},{5
-,11,278},{137,11,68},{4,11,163},{5,11,201},{5,11,307},{5,11,310},{6,11,335},{7,
-11,284},{136,11,165},{135,11,1660},{6,11,33},{135,11,1244},{4,0,616},{136,11,483
-},{8,0,857},{8,0,902},{8,0,910},{10,0,879},{12,0,726},{4,11,199},{139,11,34},{
-136,0,692},{6,10,193},{7,10,240},{7,10,1682},{10,10,51},{10,10,640},{11,10,410},
-{13,10,82},{14,10,247},{14,10,331},{142,10,377},{6,0,823},{134,0,983},{139,10,
-411},{132,0,305},{136,10,633},{138,11,203},{134,0,681},{6,11,326},{7,11,677},{
-137,11,425},{5,0,214},{7,0,603},{8,0,611},{9,0,686},{10,0,88},{11,0,459},{11,0,
-496},{12,0,463},{12,0,590},{141,0,0},{136,0,1004},{142,0,23},{134,0,1703},{147,
-11,8},{145,11,56},{135,0,1443},{4,10,237},{135,10,514},{6,0,714},{145,0,19},{5,
-11,358},{7,11,473},{7,11,1184},{10,11,662},{13,11,212},{13,11,304},{13,11,333},{
-145,11,98},{4,0,737},{10,0,98},{11,0,294},{12,0,60},{12,0,437},{13,0,64},{13,0,
-380},{142,0,430},{6,10,392},{7,10,65},{135,10,2019},{6,0,1758},{8,0,520},{9,0,
-345},{9,0,403},{142,0,350},{5,0,47},{10,0,242},{138,0,579},{5,0,139},{7,0,1168},
-{138,0,539},{134,0,1459},{13,0,388},{141,11,388},{134,0,253},{7,10,1260},{135,10
-,1790},{10,0,252},{9,10,222},{139,10,900},{140,0,745},{133,11,946},{4,0,107},{7,
-0,613},{8,0,439},{8,0,504},{9,0,501},{10,0,383},{139,0,477},{135,11,1485},{132,0
-,871},{7,11,411},{7,11,590},{8,11,631},{9,11,323},{10,11,355},{11,11,491},{12,11
-,143},{12,11,402},{13,11,73},{14,11,408},{15,11,107},{146,11,71},{132,0,229},{
-132,0,903},{140,0,71},{133,0,549},{4,0,47},{6,0,373},{7,0,452},{7,0,543},{7,0,
-1828},{7,0,1856},{9,0,6},{11,0,257},{139,0,391},{7,11,1467},{8,11,328},{10,11,
-544},{11,11,955},{13,11,320},{145,11,83},{5,0,980},{134,0,1754},{136,0,865},{5,0
-,705},{137,0,606},{7,0,161},{8,10,201},{136,10,605},{143,11,35},{5,11,835},{6,11
-,483},{140,10,224},{7,0,536},{7,0,1331},{136,0,143},{134,0,1388},{5,0,724},{10,0
-,305},{11,0,151},{12,0,33},{12,0,121},{12,0,381},{17,0,3},{17,0,27},{17,0,78},{
-18,0,18},{19,0,54},{149,0,5},{4,10,523},{133,10,638},{5,0,19},{134,0,533},{5,0,
-395},{5,0,951},{134,0,1776},{135,0,1908},{132,0,846},{10,0,74},{11,0,663},{12,0,
-210},{13,0,166},{13,0,310},{14,0,373},{18,0,95},{19,0,43},{6,10,242},{7,10,227},
-{7,10,1581},{8,10,104},{9,10,113},{9,10,220},{9,10,427},{10,10,239},{11,10,579},
-{11,10,1023},{13,10,4},{13,10,204},{13,10,316},{148,10,86},{9,11,716},{11,11,108
-},{13,11,123},{14,11,252},{19,11,38},{21,11,3},{151,11,11},{8,0,372},{9,0,122},{
-138,0,175},{132,11,677},{7,11,1374},{136,11,540},{135,10,861},{132,0,695},{7,0,
-497},{9,0,387},{147,0,81},{136,0,937},{134,0,718},{7,0,1328},{136,10,494},{132,
-11,331},{6,0,1581},{133,11,747},{5,0,284},{6,0,49},{6,0,350},{7,0,1},{7,0,377},{
-7,0,1693},{8,0,18},{8,0,678},{9,0,161},{9,0,585},{9,0,671},{9,0,839},{11,0,912},
-{141,0,427},{7,10,1306},{8,10,505},{9,10,482},{10,10,126},{11,10,225},{12,10,347
-},{12,10,449},{13,10,19},{14,10,218},{142,10,435},{10,10,764},{12,10,120},{13,10
-,39},{145,10,127},{4,0,597},{133,10,268},{134,0,1094},{4,0,1008},{134,0,1973},{
-132,0,811},{139,0,908},{135,0,1471},{133,11,326},{4,10,384},{135,10,1022},{7,0,
-1935},{8,0,324},{12,0,42},{4,11,691},{7,11,1935},{8,11,324},{9,11,35},{10,11,680
-},{11,11,364},{12,11,42},{13,11,357},{146,11,16},{135,0,2014},{7,0,2007},{9,0,
-101},{9,0,450},{10,0,66},{10,0,842},{11,0,536},{12,0,587},{6,11,32},{7,11,385},{
-7,11,757},{7,11,1916},{8,11,37},{8,11,94},{8,11,711},{9,11,541},{10,11,162},{10,
-11,795},{11,11,989},{11,11,1010},{12,11,14},{142,11,308},{139,0,586},{135,10,
-1703},{7,0,1077},{11,0,28},{9,10,159},{140,10,603},{6,0,1221},{136,10,583},{6,11
-,152},{6,11,349},{6,11,1682},{7,11,1252},{8,11,112},{9,11,435},{9,11,668},{10,11
-,290},{10,11,319},{10,11,815},{11,11,180},{11,11,837},{12,11,240},{13,11,152},{
-13,11,219},{142,11,158},{139,0,62},{132,10,515},{8,10,632},{8,10,697},{137,10,
-854},{134,0,1766},{132,11,581},{6,11,126},{7,11,573},{8,11,397},{142,11,44},{150
-,0,28},{11,0,670},{22,0,25},{4,10,136},{133,10,551},{6,0,1665},{7,0,256},{7,0,
-1388},{138,0,499},{4,0,22},{5,0,10},{7,0,1576},{136,0,97},{134,10,1782},{5,0,481
-},{7,10,1287},{9,10,44},{10,10,552},{10,10,642},{11,10,839},{12,10,274},{12,10,
-275},{12,10,372},{13,10,91},{142,10,125},{133,11,926},{7,11,1232},{137,11,531},{
-6,0,134},{7,0,437},{7,0,1824},{9,0,37},{14,0,285},{142,0,371},{7,0,486},{8,0,155
-},{11,0,93},{140,0,164},{6,0,1391},{134,0,1442},{133,11,670},{133,0,591},{6,10,
-147},{7,10,886},{7,11,1957},{9,10,753},{138,10,268},{5,0,380},{5,0,650},{7,0,
-1173},{136,0,310},{4,0,364},{7,0,1156},{7,0,1187},{137,0,409},{135,11,1621},{134
-,0,482},{133,11,506},{4,0,781},{6,0,487},{7,0,926},{8,0,263},{139,0,500},{138,10
-,137},{135,11,242},{139,11,96},{133,10,414},{135,10,1762},{134,0,804},{5,11,834}
-,{7,11,1202},{8,11,14},{9,11,481},{137,11,880},{134,10,599},{4,0,94},{135,0,1265
-},{4,0,415},{132,0,417},{5,0,348},{6,0,522},{6,10,1749},{7,11,1526},{138,11,465}
-,{134,10,1627},{132,0,1012},{132,10,488},{4,11,357},{6,11,172},{7,11,143},{137,
-11,413},{4,10,83},{4,11,590},{146,11,76},{140,10,676},{7,11,287},{8,11,355},{9,
-11,293},{137,11,743},{134,10,278},{6,0,1803},{18,0,165},{24,0,21},{5,11,169},{7,
-11,333},{136,11,45},{12,10,97},{140,11,97},{4,0,408},{4,0,741},{135,0,500},{132,
-11,198},{7,10,388},{7,10,644},{139,10,781},{4,11,24},{5,11,140},{5,11,185},{7,11
-,1500},{11,11,565},{139,11,838},{6,0,1321},{9,0,257},{7,10,229},{8,10,59},{9,10,
-190},{10,10,378},{140,10,191},{4,11,334},{133,11,593},{135,11,1885},{134,0,1138}
-,{4,0,249},{6,0,73},{135,0,177},{133,0,576},{142,0,231},{137,0,288},{132,10,660}
-,{7,10,1035},{138,10,737},{135,0,1487},{6,0,989},{9,0,433},{7,10,690},{9,10,587}
-,{140,10,521},{7,0,1264},{7,0,1678},{11,0,945},{12,0,341},{12,0,471},{140,0,569}
-,{132,11,709},{133,11,897},{5,11,224},{13,11,174},{146,11,52},{135,11,1840},{134
-,10,1744},{12,0,87},{16,0,74},{4,10,733},{9,10,194},{10,10,92},{11,10,198},{12,
-10,84},{141,10,128},{140,0,779},{135,0,538},{4,11,608},{133,11,497},{133,0,413},
-{7,11,1375},{7,11,1466},{138,11,331},{136,0,495},{6,11,540},{136,11,136},{7,0,54
-},{8,0,312},{10,0,191},{10,0,614},{140,0,567},{6,0,468},{7,0,567},{7,0,1478},{8,
-0,530},{14,0,290},{133,11,999},{4,11,299},{7,10,306},{135,11,1004},{142,11,296},
-{134,0,1484},{133,10,979},{6,0,609},{9,0,815},{12,11,137},{14,11,9},{14,11,24},{
-142,11,64},{133,11,456},{6,0,484},{135,0,822},{133,10,178},{136,11,180},{132,11,
-755},{137,0,900},{135,0,1335},{6,0,1724},{135,0,2022},{135,11,1139},{5,0,640},{
-132,10,390},{6,0,1831},{138,11,633},{135,11,566},{4,11,890},{5,11,805},{5,11,819
-},{5,11,961},{6,11,396},{6,11,1631},{6,11,1678},{7,11,1967},{7,11,2041},{9,11,
-630},{11,11,8},{11,11,1019},{12,11,176},{13,11,225},{14,11,292},{149,11,24},{132
-,0,474},{134,0,1103},{135,0,1504},{134,0,1576},{6,0,961},{6,0,1034},{140,0,655},
-{11,11,514},{149,11,20},{5,0,305},{135,11,1815},{7,11,1505},{10,11,190},{10,11,
-634},{11,11,792},{12,11,358},{140,11,447},{5,11,0},{6,11,536},{7,11,604},{13,11,
-445},{145,11,126},{7,0,1236},{133,10,105},{4,0,480},{6,0,217},{6,0,302},{6,0,
-1642},{7,0,130},{7,0,837},{7,0,1321},{7,0,1547},{7,0,1657},{8,0,429},{9,0,228},{
-13,0,289},{13,0,343},{19,0,101},{6,11,232},{6,11,412},{7,11,1074},{8,11,9},{8,11
-,157},{8,11,786},{9,11,196},{9,11,352},{9,11,457},{10,11,337},{11,11,232},{11,11
-,877},{12,11,480},{140,11,546},{5,10,438},{7,11,958},{9,10,694},{12,10,627},{13,
-11,38},{141,10,210},{4,11,382},{136,11,579},{7,0,278},{10,0,739},{11,0,708},{141
-,0,348},{4,11,212},{135,11,1206},{135,11,1898},{6,0,708},{6,0,1344},{152,10,11},
-{137,11,768},{134,0,1840},{140,0,233},{8,10,25},{138,10,826},{6,0,2017},{133,11,
-655},{6,0,1488},{139,11,290},{132,10,308},{134,0,1590},{134,0,1800},{134,0,1259}
-,{16,0,28},{6,11,231},{7,11,95},{136,11,423},{133,11,300},{135,10,150},{136,10,
-649},{7,11,1874},{137,11,641},{6,11,237},{7,11,611},{8,11,100},{9,11,416},{11,11
-,335},{12,11,173},{146,11,101},{137,0,45},{134,10,521},{17,0,36},{14,11,26},{146
-,11,150},{7,0,1442},{14,0,22},{5,10,339},{15,10,41},{15,10,166},{147,10,66},{8,0
-,378},{6,11,581},{135,11,1119},{134,0,1507},{147,11,117},{139,0,39},{134,0,1054}
-,{6,0,363},{7,0,1955},{136,0,725},{134,0,2036},{133,11,199},{6,0,1871},{9,0,935}
-,{9,0,961},{9,0,1004},{9,0,1016},{12,0,805},{12,0,852},{12,0,853},{12,0,869},{12
-,0,882},{12,0,896},{12,0,906},{12,0,917},{12,0,940},{15,0,170},{15,0,176},{15,0,
-188},{15,0,201},{15,0,205},{15,0,212},{15,0,234},{15,0,244},{18,0,181},{18,0,193
-},{18,0,196},{18,0,201},{18,0,202},{18,0,210},{18,0,217},{18,0,235},{18,0,236},{
-18,0,237},{21,0,54},{21,0,55},{21,0,58},{21,0,59},{152,0,22},{134,10,1628},{137,
-0,805},{5,0,813},{135,0,2046},{142,11,42},{5,0,712},{6,0,1240},{11,0,17},{13,0,
-321},{144,0,67},{132,0,617},{135,10,829},{6,0,320},{7,0,781},{7,0,1921},{9,0,55}
-,{10,0,186},{10,0,273},{10,0,664},{10,0,801},{11,0,996},{11,0,997},{13,0,157},{
-142,0,170},{136,0,271},{5,10,486},{135,10,1349},{18,11,91},{147,11,70},{10,0,445
-},{7,10,1635},{8,10,17},{138,10,295},{136,11,404},{7,0,103},{7,0,863},{11,0,184}
-,{145,0,62},{138,10,558},{137,0,659},{6,11,312},{6,11,1715},{10,11,584},{11,11,
-546},{11,11,692},{12,11,259},{12,11,295},{13,11,46},{141,11,154},{134,0,676},{
-132,11,588},{4,11,231},{5,11,61},{6,11,104},{7,11,729},{7,11,964},{7,11,1658},{
-140,11,414},{6,11,263},{138,11,757},{11,0,337},{142,0,303},{135,11,1363},{132,11
-,320},{140,0,506},{134,10,447},{5,0,77},{7,0,1455},{10,0,843},{147,0,73},{7,10,
-577},{7,10,1432},{9,10,475},{9,10,505},{9,10,526},{9,10,609},{9,10,689},{9,10,
-726},{9,10,735},{9,10,738},{10,10,556},{10,10,674},{10,10,684},{11,10,89},{11,10
-,202},{11,10,272},{11,10,380},{11,10,415},{11,10,505},{11,10,537},{11,10,550},{
-11,10,562},{11,10,640},{11,10,667},{11,10,688},{11,10,847},{11,10,927},{11,10,
-930},{11,10,940},{12,10,144},{12,10,325},{12,10,329},{12,10,389},{12,10,403},{12
-,10,451},{12,10,515},{12,10,604},{12,10,616},{12,10,626},{13,10,66},{13,10,131},
-{13,10,167},{13,10,236},{13,10,368},{13,10,411},{13,10,434},{13,10,453},{13,10,
-461},{13,10,474},{14,10,59},{14,10,60},{14,10,139},{14,10,152},{14,10,276},{14,
-10,353},{14,10,402},{15,10,28},{15,10,81},{15,10,123},{15,10,152},{18,10,136},{
-148,10,88},{132,0,458},{135,0,1420},{6,0,109},{10,0,382},{4,11,405},{4,10,609},{
-7,10,756},{7,11,817},{9,10,544},{11,10,413},{14,11,58},{14,10,307},{16,10,25},{
-17,11,37},{146,11,124},{6,0,330},{7,0,1084},{11,0,142},{133,11,974},{4,10,930},{
-133,10,947},{5,10,939},{142,11,394},{16,0,91},{145,0,87},{5,11,235},{5,10,962},{
-7,11,1239},{11,11,131},{140,11,370},{11,0,492},{5,10,651},{8,10,170},{9,10,61},{
-9,10,63},{10,10,23},{10,10,37},{10,10,834},{11,10,4},{11,10,281},{11,10,503},{11
-,10,677},{12,10,96},{12,10,130},{12,10,244},{14,10,5},{14,10,40},{14,10,162},{14
-,10,202},{146,10,133},{4,10,406},{5,10,579},{12,10,492},{150,10,15},{9,11,137},{
-138,11,221},{134,0,1239},{11,0,211},{140,0,145},{7,11,390},{138,11,140},{135,11,
-1418},{135,11,1144},{134,0,1049},{7,0,321},{6,10,17},{7,10,1001},{7,10,1982},{9,
-10,886},{10,10,489},{10,10,800},{11,10,782},{12,10,320},{13,10,467},{14,10,145},
-{14,10,387},{143,10,119},{145,10,17},{5,11,407},{11,11,489},{19,11,37},{20,11,73
-},{150,11,38},{133,10,458},{135,0,1985},{7,10,1983},{8,10,0},{8,10,171},{9,10,
-120},{9,10,732},{10,10,473},{11,10,656},{11,10,998},{18,10,0},{18,10,2},{147,10,
-21},{5,11,325},{7,11,1483},{8,11,5},{8,11,227},{9,11,105},{10,11,585},{140,11,
-614},{136,0,122},{132,0,234},{135,11,1196},{6,0,976},{6,0,1098},{134,0,1441},{7,
-0,253},{136,0,549},{6,11,621},{13,11,504},{144,11,19},{132,10,519},{5,0,430},{5,
-0,932},{6,0,131},{7,0,417},{9,0,522},{11,0,314},{141,0,390},{14,0,149},{14,0,399
-},{143,0,57},{5,10,907},{6,10,31},{6,11,218},{7,10,491},{7,10,530},{8,10,592},{
-11,10,53},{11,10,779},{12,10,167},{12,10,411},{14,10,14},{14,10,136},{15,10,72},
-{16,10,17},{144,10,72},{140,11,330},{7,11,454},{7,11,782},{136,11,768},{132,0,
-507},{10,11,676},{140,11,462},{6,0,630},{9,0,811},{4,10,208},{5,10,106},{6,10,
-531},{8,10,408},{9,10,188},{138,10,572},{4,0,343},{5,0,511},{134,10,1693},{134,
-11,164},{132,0,448},{7,0,455},{138,0,591},{135,0,1381},{12,10,441},{150,11,50},{
-9,10,449},{10,10,192},{138,10,740},{6,0,575},{132,10,241},{134,0,1175},{134,0,
-653},{134,0,1761},{134,0,1198},{132,10,259},{6,11,343},{7,11,195},{9,11,226},{10
-,11,197},{10,11,575},{11,11,502},{139,11,899},{7,0,1127},{7,0,1572},{10,0,297},{
-10,0,422},{11,0,764},{11,0,810},{12,0,264},{13,0,102},{13,0,300},{13,0,484},{14,
-0,147},{14,0,229},{17,0,71},{18,0,118},{147,0,120},{135,11,666},{132,0,678},{4,
-10,173},{5,10,312},{5,10,512},{135,10,1285},{7,10,1603},{7,10,1691},{9,10,464},{
-11,10,195},{12,10,279},{12,10,448},{14,10,11},{147,10,102},{16,0,99},{146,0,164}
-,{7,11,1125},{9,11,143},{11,11,61},{14,11,405},{150,11,21},{137,11,260},{4,10,
-452},{5,10,583},{5,10,817},{6,10,433},{7,10,593},{7,10,720},{7,10,1378},{8,10,
-161},{9,10,284},{10,10,313},{139,10,886},{132,10,547},{136,10,722},{14,0,35},{
-142,0,191},{141,0,45},{138,0,121},{132,0,125},{134,0,1622},{133,11,959},{8,10,
-420},{139,10,193},{132,0,721},{135,10,409},{136,0,145},{7,0,792},{8,0,147},{10,0
-,821},{11,0,970},{11,0,1021},{136,11,173},{134,11,266},{132,0,715},{7,0,1999},{
-138,10,308},{133,0,531},{5,0,168},{5,0,930},{8,0,74},{9,0,623},{12,0,500},{140,0
-,579},{144,0,65},{138,11,246},{6,0,220},{7,0,1101},{13,0,105},{142,11,314},{5,10
-,1002},{136,10,745},{134,0,960},{20,0,0},{148,11,0},{4,0,1005},{4,10,239},{6,10,
-477},{7,10,1607},{11,10,68},{139,10,617},{6,0,19},{7,0,1413},{139,0,428},{149,10
-,13},{7,0,96},{8,0,401},{8,0,703},{9,0,896},{136,11,300},{134,0,1595},{145,0,116
-},{136,0,1021},{7,0,1961},{7,0,1965},{7,0,2030},{8,0,150},{8,0,702},{8,0,737},{8
-,0,750},{140,0,366},{11,11,75},{142,11,267},{132,10,367},{8,0,800},{9,0,148},{9,
-0,872},{9,0,890},{11,0,309},{11,0,1001},{13,0,267},{13,0,323},{5,11,427},{5,11,
-734},{7,11,478},{136,11,52},{7,11,239},{11,11,217},{142,11,165},{132,11,323},{
-140,11,419},{13,0,299},{142,0,75},{6,11,87},{6,11,1734},{7,11,20},{7,11,1056},{8
-,11,732},{9,11,406},{9,11,911},{138,11,694},{134,0,1383},{132,10,694},{133,11,
-613},{137,0,779},{4,0,598},{140,10,687},{6,0,970},{135,0,424},{133,0,547},{7,11,
-32},{7,11,984},{8,11,85},{8,11,709},{9,11,579},{9,11,847},{9,11,856},{10,11,799}
-,{11,11,258},{11,11,1007},{12,11,331},{12,11,615},{13,11,188},{13,11,435},{14,11
-,8},{15,11,165},{16,11,27},{148,11,40},{6,0,1222},{134,0,1385},{132,0,876},{138,
-11,151},{135,10,213},{4,11,167},{135,11,82},{133,0,133},{6,11,24},{7,11,74},{7,
-11,678},{137,11,258},{5,11,62},{6,11,534},{7,11,684},{7,11,1043},{7,11,1072},{8,
-11,280},{8,11,541},{8,11,686},{10,11,519},{11,11,252},{140,11,282},{136,0,187},{
-8,0,8},{10,0,0},{10,0,818},{139,0,988},{132,11,359},{11,0,429},{15,0,51},{135,10
-,1672},{136,0,685},{5,11,211},{7,11,88},{136,11,627},{134,0,472},{136,0,132},{6,
-11,145},{141,11,336},{4,10,751},{11,10,390},{140,10,32},{6,0,938},{6,0,1060},{4,
-11,263},{4,10,409},{133,10,78},{137,0,874},{8,0,774},{10,0,670},{12,0,51},{4,11,
-916},{6,10,473},{7,10,1602},{10,10,698},{12,10,212},{13,10,307},{145,10,105},{
-146,0,92},{143,10,156},{132,0,830},{137,0,701},{4,11,599},{6,11,1634},{7,11,5},{
-7,11,55},{7,11,67},{7,11,97},{7,11,691},{7,11,979},{7,11,1697},{8,11,207},{8,11,
-214},{8,11,231},{8,11,294},{8,11,336},{8,11,428},{8,11,451},{8,11,460},{8,11,471
-},{8,11,622},{8,11,626},{8,11,679},{8,11,759},{8,11,829},{9,11,11},{9,11,246},{9
-,11,484},{9,11,573},{9,11,706},{9,11,762},{9,11,798},{9,11,855},{9,11,870},{9,11
-,912},{10,11,303},{10,11,335},{10,11,424},{10,11,461},{10,11,543},{10,11,759},{
-10,11,814},{11,11,59},{11,11,199},{11,11,235},{11,11,475},{11,11,590},{11,11,929
-},{11,11,963},{12,11,114},{12,11,182},{12,11,226},{12,11,332},{12,11,439},{12,11
-,575},{12,11,598},{13,11,8},{13,11,125},{13,11,194},{13,11,287},{14,11,197},{14,
-11,383},{15,11,53},{17,11,63},{19,11,46},{19,11,98},{19,11,106},{148,11,85},{4,0
-,127},{5,0,350},{6,0,356},{8,0,426},{9,0,572},{10,0,247},{139,0,312},{134,0,1215
-},{6,0,59},{9,0,603},{13,0,397},{7,11,1853},{138,11,437},{134,0,1762},{147,11,
-126},{135,10,883},{13,0,293},{142,0,56},{133,10,617},{139,10,50},{5,11,187},{7,
-10,1518},{139,10,694},{135,0,441},{6,0,111},{7,0,4},{8,0,163},{8,0,776},{138,0,
-566},{132,0,806},{4,11,215},{9,11,38},{10,11,3},{11,11,23},{11,11,127},{139,11,
-796},{14,0,233},{4,10,546},{135,10,2042},{135,0,1994},{134,0,1739},{135,11,1530}
-,{136,0,393},{5,0,297},{7,0,1038},{14,0,359},{19,0,52},{148,0,47},{135,0,309},{4
-,10,313},{133,10,577},{8,10,184},{141,10,433},{135,10,935},{12,10,186},{12,10,
-292},{14,10,100},{146,10,70},{136,0,363},{14,0,175},{11,10,402},{12,10,109},{12,
-10,431},{13,10,179},{13,10,206},{14,10,217},{16,10,3},{148,10,53},{5,10,886},{6,
-10,46},{6,10,1790},{7,10,14},{7,10,732},{7,10,1654},{8,10,95},{8,10,327},{8,10,
-616},{9,10,892},{10,10,598},{10,10,769},{11,10,134},{11,10,747},{12,10,378},{142
-,10,97},{136,0,666},{135,0,1675},{6,0,655},{134,0,1600},{135,0,808},{133,10,1021
-},{4,11,28},{5,11,440},{7,11,248},{11,11,833},{140,11,344},{134,11,1654},{132,0,
-280},{140,0,54},{4,0,421},{133,0,548},{132,10,153},{6,11,339},{135,11,923},{133,
-11,853},{133,10,798},{132,10,587},{6,11,249},{7,11,1234},{139,11,573},{6,10,598}
-,{7,10,42},{8,10,695},{10,10,212},{11,10,158},{14,10,196},{145,10,85},{7,0,249},
-{5,10,957},{133,10,1008},{4,10,129},{135,10,465},{6,0,254},{7,0,842},{7,0,1659},
-{9,0,109},{10,0,103},{7,10,908},{7,10,1201},{9,10,755},{11,10,906},{12,10,527},{
-146,10,7},{5,0,262},{136,10,450},{144,0,1},{10,11,201},{142,11,319},{7,11,49},{7
-,11,392},{8,11,20},{8,11,172},{8,11,690},{9,11,383},{9,11,845},{10,11,48},{11,11
-,293},{11,11,832},{11,11,920},{141,11,221},{5,11,858},{133,11,992},{134,0,805},{
-139,10,1003},{6,0,1630},{134,11,307},{7,11,1512},{135,11,1794},{6,11,268},{137,
-11,62},{135,10,1868},{133,0,671},{4,0,989},{8,0,972},{136,0,998},{132,11,423},{
-132,0,889},{135,0,1382},{135,0,1910},{7,10,965},{7,10,1460},{135,10,1604},{4,0,
-627},{5,0,775},{138,11,106},{134,11,348},{7,0,202},{11,0,362},{11,0,948},{140,0,
-388},{138,11,771},{6,11,613},{136,11,223},{6,0,560},{7,0,451},{8,0,389},{12,0,
-490},{13,0,16},{13,0,215},{13,0,351},{18,0,132},{147,0,125},{135,0,841},{136,0,
-566},{136,0,938},{132,11,670},{5,0,912},{6,0,1695},{140,11,55},{9,11,40},{139,11
-,136},{7,0,1361},{7,10,982},{10,10,32},{143,10,56},{11,11,259},{140,11,270},{5,0
-,236},{6,0,572},{8,0,492},{11,0,618},{144,0,56},{8,11,572},{9,11,310},{9,11,682}
-,{137,11,698},{134,0,1854},{5,0,190},{136,0,318},{133,10,435},{135,0,1376},{4,11
-,296},{6,11,352},{7,11,401},{7,11,1410},{7,11,1594},{7,11,1674},{8,11,63},{8,11,
-660},{137,11,74},{7,0,349},{5,10,85},{6,10,419},{7,10,305},{7,10,361},{7,10,1337
-},{8,10,71},{140,10,519},{4,11,139},{4,11,388},{140,11,188},{6,0,1972},{6,0,2013
-},{8,0,951},{10,0,947},{10,0,974},{10,0,1018},{142,0,476},{140,10,688},{135,10,
-740},{5,10,691},{7,10,345},{9,10,94},{140,10,169},{9,0,344},{5,10,183},{6,10,582
-},{10,10,679},{140,10,435},{135,10,511},{132,0,850},{8,11,441},{10,11,314},{143,
-11,3},{7,10,1993},{136,10,684},{4,11,747},{6,11,290},{6,10,583},{7,11,649},{7,11
-,1479},{135,11,1583},{133,11,232},{133,10,704},{134,0,910},{4,10,179},{5,10,198}
-,{133,10,697},{7,10,347},{7,10,971},{8,10,181},{138,10,711},{136,11,525},{14,0,
-19},{14,0,28},{144,0,29},{7,0,85},{7,0,247},{8,0,585},{138,0,163},{4,0,487},{7,
-11,472},{7,11,1801},{10,11,748},{141,11,458},{4,10,243},{5,10,203},{7,10,19},{7,
-10,71},{7,10,113},{10,10,405},{11,10,357},{142,10,240},{7,10,1450},{139,10,99},{
-132,11,425},{138,0,145},{147,0,83},{6,10,492},{137,11,247},{4,0,1013},{134,0,
-2033},{5,10,134},{6,10,408},{6,10,495},{135,10,1593},{135,0,1922},{134,11,1768},
-{4,0,124},{10,0,457},{11,0,121},{11,0,169},{11,0,870},{11,0,874},{12,0,214},{14,
-0,187},{143,0,77},{5,0,557},{135,0,1457},{139,0,66},{5,11,943},{6,11,1779},{142,
-10,4},{4,10,248},{4,10,665},{7,10,137},{137,10,349},{7,0,1193},{5,11,245},{6,11,
-576},{7,11,582},{136,11,225},{144,0,82},{7,10,1270},{139,10,612},{5,0,454},{10,0
-,352},{138,11,352},{18,0,57},{5,10,371},{135,10,563},{135,0,1333},{6,0,107},{7,0
-,638},{7,0,1632},{9,0,396},{134,11,610},{5,0,370},{134,0,1756},{4,10,374},{7,10,
-547},{7,10,1700},{7,10,1833},{139,10,858},{133,0,204},{6,0,1305},{9,10,311},{141
-,10,42},{5,0,970},{134,0,1706},{6,10,1647},{7,10,1552},{7,10,2010},{9,10,494},{
-137,10,509},{13,11,455},{15,11,99},{15,11,129},{144,11,68},{135,0,3},{4,0,35},{5
-,0,121},{5,0,483},{5,0,685},{6,0,489},{6,0,782},{6,0,1032},{7,0,1204},{136,0,394
-},{4,0,921},{133,0,1007},{8,11,360},{138,11,63},{135,0,1696},{134,0,1519},{132,
-11,443},{135,11,944},{6,10,123},{7,10,214},{9,10,728},{10,10,157},{11,10,346},{
-11,10,662},{143,10,106},{137,0,981},{135,10,1435},{134,0,1072},{132,0,712},{134,
-0,1629},{134,0,728},{4,11,298},{137,11,483},{6,0,1177},{6,0,1271},{5,11,164},{7,
-11,121},{142,11,189},{7,0,1608},{4,10,707},{5,10,588},{6,10,393},{13,10,106},{18
-,10,49},{147,10,41},{23,0,16},{151,11,16},{6,10,211},{7,10,1690},{11,10,486},{
-140,10,369},{133,0,485},{19,11,15},{149,11,27},{4,11,172},{9,11,611},{10,11,436}
-,{12,11,673},{141,11,255},{5,11,844},{10,11,484},{11,11,754},{12,11,457},{14,11,
-171},{14,11,389},{146,11,153},{4,0,285},{5,0,27},{5,0,317},{6,0,301},{7,0,7},{8,
-0,153},{10,0,766},{11,0,468},{12,0,467},{141,0,143},{134,0,1462},{9,11,263},{10,
-11,147},{138,11,492},{133,11,537},{6,0,1945},{6,0,1986},{6,0,1991},{134,0,2038},
-{134,10,219},{137,11,842},{14,0,52},{17,0,50},{5,10,582},{6,10,1646},{7,10,99},{
-7,10,1962},{7,10,1986},{8,10,515},{8,10,773},{9,10,23},{9,10,491},{12,10,620},{
-142,10,93},{138,11,97},{20,0,21},{20,0,44},{133,10,851},{136,0,819},{139,0,917},
-{5,11,230},{5,11,392},{6,11,420},{8,10,762},{8,10,812},{9,11,568},{9,10,910},{
-140,11,612},{135,0,784},{15,0,135},{143,11,135},{10,0,454},{140,0,324},{4,11,0},
-{5,11,41},{7,11,1459},{7,11,1469},{7,11,1618},{7,11,1859},{9,11,549},{139,11,905
-},{4,10,98},{7,10,1365},{9,10,422},{9,10,670},{10,10,775},{11,10,210},{13,10,26}
-,{13,10,457},{141,10,476},{6,0,1719},{6,0,1735},{7,0,2016},{7,0,2020},{8,0,837},
-{137,0,852},{133,11,696},{135,0,852},{132,0,952},{134,10,1730},{132,11,771},{138
-,0,568},{137,0,448},{139,0,146},{8,0,67},{138,0,419},{133,11,921},{137,10,147},{
-134,0,1826},{10,0,657},{14,0,297},{142,0,361},{6,0,666},{6,0,767},{134,0,1542},{
-139,0,729},{6,11,180},{7,11,1137},{8,11,751},{139,11,805},{4,11,183},{7,11,271},
-{11,11,824},{11,11,952},{13,11,278},{13,11,339},{13,11,482},{14,11,424},{148,11,
-99},{4,0,669},{5,11,477},{5,11,596},{6,11,505},{7,11,1221},{11,11,907},{12,11,
-209},{141,11,214},{135,11,1215},{5,0,402},{6,10,30},{11,10,56},{139,10,305},{7,
-11,564},{142,11,168},{139,0,152},{7,0,912},{135,10,1614},{4,10,150},{5,10,303},{
-134,10,327},{7,0,320},{8,0,51},{9,0,868},{10,0,833},{12,0,481},{12,0,570},{148,0
-,106},{132,0,445},{7,11,274},{11,11,263},{11,11,479},{11,11,507},{140,11,277},{
-10,0,555},{11,0,308},{19,0,95},{6,11,1645},{8,10,192},{10,10,78},{141,10,359},{
-135,10,786},{6,11,92},{6,11,188},{7,11,1269},{7,11,1524},{7,11,1876},{10,11,228}
-,{139,11,1020},{4,11,459},{133,11,966},{11,0,386},{6,10,1638},{7,10,79},{7,10,
-496},{9,10,138},{10,10,336},{12,10,412},{12,10,440},{142,10,305},{133,0,239},{7,
-0,83},{7,0,1990},{8,0,130},{139,0,720},{138,11,709},{4,0,143},{5,0,550},{133,0,
-752},{5,0,123},{6,0,530},{7,0,348},{135,0,1419},{135,0,2024},{6,11,18},{7,11,179
-},{7,11,721},{7,11,932},{8,11,548},{8,11,757},{9,11,54},{9,11,65},{9,11,532},{9,
-11,844},{10,11,113},{10,11,117},{10,11,236},{10,11,315},{10,11,430},{10,11,798},
-{11,11,153},{11,11,351},{11,11,375},{12,11,78},{12,11,151},{12,11,392},{14,11,
-248},{143,11,23},{7,10,204},{7,10,415},{8,10,42},{10,10,85},{139,10,564},{134,0,
-958},{133,11,965},{132,0,210},{135,11,1429},{138,11,480},{134,11,182},{139,11,
-345},{10,11,65},{10,11,488},{138,11,497},{4,10,3},{5,10,247},{5,10,644},{7,10,
-744},{7,10,1207},{7,10,1225},{7,10,1909},{146,10,147},{132,0,430},{5,10,285},{9,
-10,67},{13,10,473},{143,10,82},{144,11,16},{7,11,1162},{9,11,588},{10,11,260},{
-151,10,8},{133,0,213},{138,0,7},{135,0,801},{134,11,1786},{135,11,308},{6,0,936}
-,{134,0,1289},{133,0,108},{132,0,885},{133,0,219},{139,0,587},{4,0,193},{5,0,916
-},{6,0,1041},{7,0,364},{10,0,398},{10,0,726},{11,0,317},{11,0,626},{12,0,142},{
-12,0,288},{12,0,678},{13,0,313},{15,0,113},{146,0,114},{135,0,1165},{6,0,241},{9
-,0,342},{10,0,729},{11,0,284},{11,0,445},{11,0,651},{11,0,863},{13,0,398},{146,0
-,99},{7,0,907},{136,0,832},{9,0,303},{4,10,29},{6,10,532},{7,10,1628},{7,10,1648
-},{9,10,350},{10,10,433},{11,10,97},{11,10,557},{11,10,745},{12,10,289},{12,10,
-335},{12,10,348},{12,10,606},{13,10,116},{13,10,233},{13,10,466},{14,10,181},{14
-,10,209},{14,10,232},{14,10,236},{14,10,300},{16,10,41},{148,10,97},{7,11,423},{
-7,10,1692},{136,11,588},{6,0,931},{134,0,1454},{5,10,501},{7,10,1704},{9,10,553}
-,{11,10,520},{12,10,557},{141,10,249},{136,11,287},{4,0,562},{9,0,254},{139,0,
-879},{132,0,786},{14,11,32},{18,11,85},{20,11,2},{152,11,16},{135,0,1294},{7,11,
-723},{135,11,1135},{6,0,216},{7,0,901},{7,0,1343},{8,0,493},{134,11,403},{7,11,
-719},{8,11,809},{136,11,834},{5,11,210},{6,11,213},{7,11,60},{10,11,364},{139,11
-,135},{7,0,341},{11,0,219},{5,11,607},{8,11,326},{136,11,490},{4,11,701},{5,11,
-472},{5,11,639},{7,11,1249},{9,11,758},{139,11,896},{135,11,380},{135,11,1947},{
-139,0,130},{135,0,1734},{10,0,115},{11,0,420},{12,0,154},{13,0,404},{14,0,346},{
-143,0,54},{134,10,129},{4,11,386},{7,11,41},{8,11,405},{9,11,497},{11,11,110},{
-11,11,360},{15,11,37},{144,11,84},{141,11,282},{5,11,46},{7,11,1452},{7,11,1480}
-,{8,11,634},{140,11,472},{4,11,524},{136,11,810},{10,11,238},{141,11,33},{133,0,
-604},{5,0,1011},{136,0,701},{8,0,856},{8,0,858},{8,0,879},{12,0,702},{142,0,447}
-,{4,0,54},{5,0,666},{7,0,1039},{7,0,1130},{9,0,195},{138,0,302},{4,10,25},{5,10,
-60},{6,10,504},{7,10,614},{7,10,1155},{140,10,0},{7,10,1248},{11,10,621},{139,10
-,702},{133,11,997},{137,10,321},{134,0,1669},{134,0,1791},{4,10,379},{135,10,
-1397},{138,11,372},{5,11,782},{5,11,829},{134,11,1738},{135,0,1228},{4,10,118},{
-6,10,274},{6,10,361},{7,10,75},{141,10,441},{132,0,623},{9,11,279},{10,11,407},{
-14,11,84},{150,11,18},{137,10,841},{135,0,798},{140,10,693},{5,10,314},{6,10,221
-},{7,10,419},{10,10,650},{11,10,396},{12,10,156},{13,10,369},{14,10,333},{145,10
-,47},{135,11,1372},{7,0,122},{9,0,259},{10,0,84},{11,0,470},{12,0,541},{141,0,
-379},{134,0,837},{8,0,1013},{4,11,78},{5,11,96},{5,11,182},{7,11,1724},{7,11,
-1825},{10,11,394},{10,11,471},{11,11,532},{14,11,340},{145,11,88},{134,0,577},{
-135,11,1964},{132,10,913},{134,0,460},{8,0,891},{10,0,901},{10,0,919},{10,0,932}
-,{12,0,715},{12,0,728},{12,0,777},{14,0,457},{144,0,103},{5,0,82},{5,0,131},{7,0
-,1755},{8,0,31},{9,0,168},{9,0,764},{139,0,869},{136,10,475},{6,0,605},{5,10,
-1016},{9,11,601},{9,11,619},{10,11,505},{10,11,732},{11,11,355},{140,11,139},{7,
-10,602},{8,10,179},{10,10,781},{140,10,126},{134,0,1246},{6,10,329},{138,10,111}
-,{6,11,215},{7,11,1028},{7,11,1473},{7,11,1721},{9,11,424},{138,11,779},{5,0,278
-},{137,0,68},{6,0,932},{6,0,1084},{144,0,86},{4,0,163},{5,0,201},{5,0,307},{5,0,
-310},{6,0,335},{7,0,284},{7,0,1660},{136,0,165},{136,0,781},{134,0,707},{6,0,33}
-,{135,0,1244},{5,10,821},{6,11,67},{6,10,1687},{7,11,258},{7,11,1630},{9,11,354}
-,{9,11,675},{10,11,830},{14,11,80},{145,11,80},{6,11,141},{7,11,225},{9,11,59},{
-9,11,607},{10,11,312},{11,11,687},{12,11,555},{13,11,373},{13,11,494},{148,11,58
-},{134,0,1113},{9,0,388},{5,10,71},{7,10,1407},{9,10,704},{10,10,261},{10,10,619
-},{11,10,547},{11,10,619},{143,10,157},{7,0,1953},{136,0,720},{138,0,203},{7,10,
-2008},{9,10,337},{138,10,517},{6,0,326},{7,0,677},{137,0,425},{139,11,81},{7,0,
-1316},{7,0,1412},{7,0,1839},{9,0,589},{11,0,241},{11,0,676},{11,0,811},{11,0,891
-},{12,0,140},{12,0,346},{12,0,479},{13,0,140},{13,0,381},{14,0,188},{18,0,30},{
-148,0,108},{5,0,416},{6,10,86},{6,10,603},{7,10,292},{7,10,561},{8,10,257},{8,10
-,382},{9,10,721},{9,10,778},{11,10,581},{140,10,466},{4,10,486},{133,10,491},{
-134,0,1300},{132,10,72},{7,0,847},{6,10,265},{7,11,430},{139,11,46},{5,11,602},{
-6,11,106},{7,11,1786},{7,11,1821},{7,11,2018},{9,11,418},{137,11,763},{5,0,358},
-{7,0,535},{7,0,1184},{10,0,662},{13,0,212},{13,0,304},{13,0,333},{145,0,98},{5,
-11,65},{6,11,416},{7,11,1720},{7,11,1924},{8,11,677},{10,11,109},{11,11,14},{11,
-11,70},{11,11,569},{11,11,735},{15,11,153},{148,11,80},{6,0,1823},{8,0,839},{8,0
-,852},{8,0,903},{10,0,940},{12,0,707},{140,0,775},{135,11,1229},{6,0,1522},{140,
-0,654},{136,11,595},{139,0,163},{141,0,314},{132,0,978},{4,0,601},{6,0,2035},{
-137,10,234},{5,10,815},{6,10,1688},{134,10,1755},{133,0,946},{136,0,434},{6,10,
-197},{136,10,205},{7,0,411},{7,0,590},{8,0,631},{9,0,323},{10,0,355},{11,0,491},
-{12,0,143},{12,0,402},{13,0,73},{14,0,408},{15,0,107},{146,0,71},{7,0,1467},{8,0
-,328},{10,0,544},{11,0,955},{12,0,13},{13,0,320},{145,0,83},{142,0,410},{11,0,
-511},{13,0,394},{14,0,298},{14,0,318},{146,0,103},{6,10,452},{7,10,312},{138,10,
-219},{138,10,589},{4,10,333},{9,10,176},{12,10,353},{141,10,187},{135,11,329},{
-132,11,469},{5,0,835},{134,0,483},{134,11,1743},{5,11,929},{6,11,340},{8,11,376}
-,{136,11,807},{134,10,1685},{132,0,677},{5,11,218},{7,11,1610},{138,11,83},{5,11
-,571},{135,11,1842},{132,11,455},{137,0,70},{135,0,1405},{7,10,135},{8,10,7},{8,
-10,62},{9,10,243},{10,10,658},{10,10,697},{11,10,456},{139,10,756},{9,10,395},{
-138,10,79},{137,0,108},{6,11,161},{7,11,372},{137,11,597},{132,11,349},{132,0,
-777},{132,0,331},{135,10,631},{133,0,747},{6,11,432},{6,11,608},{139,11,322},{
-138,10,835},{5,11,468},{7,11,1809},{10,11,325},{11,11,856},{12,11,345},{143,11,
-104},{133,11,223},{7,10,406},{7,10,459},{8,10,606},{139,10,726},{132,11,566},{
-142,0,68},{4,11,59},{135,11,1394},{6,11,436},{139,11,481},{4,11,48},{5,11,271},{
-135,11,953},{139,11,170},{5,11,610},{136,11,457},{133,11,755},{135,11,1217},{133
-,10,612},{132,11,197},{132,0,505},{4,10,372},{7,10,482},{8,10,158},{9,10,602},{9
-,10,615},{10,10,245},{10,10,678},{10,10,744},{11,10,248},{139,10,806},{133,0,326
-},{5,10,854},{135,10,1991},{4,0,691},{146,0,16},{6,0,628},{9,0,35},{10,0,680},{
-10,0,793},{11,0,364},{13,0,357},{143,0,164},{138,0,654},{6,0,32},{7,0,385},{7,0,
-757},{7,0,1916},{8,0,37},{8,0,94},{8,0,711},{9,0,541},{10,0,162},{10,0,795},{11,
-0,989},{11,0,1010},{12,0,14},{142,0,308},{133,11,217},{6,0,152},{6,0,349},{6,0,
-1682},{7,0,1252},{8,0,112},{9,0,435},{9,0,668},{10,0,290},{10,0,319},{10,0,815},
-{11,0,180},{11,0,837},{12,0,240},{13,0,152},{13,0,219},{142,0,158},{4,0,581},{
-134,0,726},{5,10,195},{135,10,1685},{6,0,126},{7,0,573},{8,0,397},{142,0,44},{
-138,0,89},{7,10,1997},{8,10,730},{139,10,1006},{134,0,1531},{134,0,1167},{5,0,
-926},{12,0,203},{133,10,751},{4,11,165},{7,11,1398},{135,11,1829},{7,0,1232},{
-137,0,531},{135,10,821},{134,0,943},{133,0,670},{4,0,880},{139,0,231},{134,0,
-1617},{135,0,1957},{5,11,9},{7,11,297},{7,11,966},{140,11,306},{6,0,975},{134,0,
-985},{5,10,950},{5,10,994},{134,10,351},{12,11,21},{151,11,7},{5,11,146},{6,11,
-411},{138,11,721},{7,0,242},{135,0,1942},{6,11,177},{135,11,467},{5,0,421},{7,10
-,47},{137,10,684},{5,0,834},{7,0,1202},{8,0,14},{9,0,481},{137,0,880},{138,0,465
-},{6,0,688},{9,0,834},{132,10,350},{132,0,855},{4,0,357},{6,0,172},{7,0,143},{
-137,0,413},{133,11,200},{132,0,590},{7,10,1812},{13,10,259},{13,10,356},{14,10,
-242},{147,10,114},{133,10,967},{11,0,114},{4,10,473},{7,10,623},{8,10,808},{9,10
-,871},{9,10,893},{11,10,431},{12,10,112},{12,10,217},{12,10,243},{12,10,562},{12
-,10,663},{12,10,683},{13,10,141},{13,10,197},{13,10,227},{13,10,406},{13,10,487}
-,{14,10,156},{14,10,203},{14,10,224},{14,10,256},{18,10,58},{150,10,0},{138,10,
-286},{4,10,222},{7,10,286},{136,10,629},{5,0,169},{7,0,333},{136,0,45},{134,11,
-481},{132,0,198},{4,0,24},{5,0,140},{5,0,185},{7,0,1500},{11,0,565},{11,0,838},{
-4,11,84},{7,11,1482},{10,11,76},{138,11,142},{133,0,585},{141,10,306},{133,11,
-1015},{4,11,315},{5,11,507},{135,11,1370},{136,10,146},{6,0,691},{134,0,1503},{4
-,0,334},{133,0,593},{4,10,465},{135,10,1663},{142,11,173},{135,0,913},{12,0,116}
-,{134,11,1722},{134,0,1360},{132,0,802},{8,11,222},{8,11,476},{9,11,238},{11,11,
-516},{11,11,575},{15,11,109},{146,11,100},{6,0,308},{9,0,673},{7,10,138},{7,10,
-517},{139,10,238},{132,0,709},{6,0,1876},{6,0,1895},{9,0,994},{9,0,1006},{12,0,
-829},{12,0,888},{12,0,891},{146,0,185},{148,10,94},{4,0,228},{133,0,897},{7,0,
-1840},{5,10,495},{7,10,834},{9,10,733},{139,10,378},{133,10,559},{6,10,21},{6,10
-,1737},{7,10,1444},{136,10,224},{4,0,608},{133,0,497},{6,11,40},{135,11,1781},{
-134,0,1573},{135,0,2039},{6,0,540},{136,0,136},{4,0,897},{5,0,786},{133,10,519},
-{6,0,1878},{6,0,1884},{9,0,938},{9,0,948},{9,0,955},{9,0,973},{9,0,1012},{12,0,
-895},{12,0,927},{143,0,254},{134,0,1469},{133,0,999},{4,0,299},{135,0,1004},{4,0
-,745},{133,0,578},{136,11,574},{133,0,456},{134,0,1457},{7,0,1679},{132,10,402},
-{7,0,693},{8,0,180},{12,0,163},{8,10,323},{136,10,479},{11,10,580},{142,10,201},
-{5,10,59},{135,10,672},{132,11,354},{146,10,34},{4,0,755},{135,11,1558},{7,0,
-1740},{146,0,48},{4,10,85},{135,10,549},{139,0,338},{133,10,94},{134,0,1091},{
-135,11,469},{12,0,695},{12,0,704},{20,0,113},{5,11,830},{14,11,338},{148,11,81},
-{135,0,1464},{6,10,11},{135,10,187},{135,0,975},{13,0,335},{132,10,522},{134,0,
-1979},{5,11,496},{135,11,203},{4,10,52},{135,10,661},{7,0,1566},{8,0,269},{9,0,
-212},{9,0,718},{14,0,15},{14,0,132},{142,0,227},{4,0,890},{5,0,805},{5,0,819},{5
-,0,961},{6,0,396},{6,0,1631},{6,0,1678},{7,0,1967},{7,0,2041},{9,0,630},{11,0,8}
-,{11,0,1019},{12,0,176},{13,0,225},{14,0,292},{21,0,24},{4,10,383},{133,10,520},
-{134,11,547},{135,11,1748},{5,11,88},{137,11,239},{146,11,128},{7,11,650},{135,
-11,1310},{4,10,281},{5,10,38},{7,10,194},{7,10,668},{7,10,1893},{137,10,397},{
-135,0,1815},{9,10,635},{139,10,559},{7,0,1505},{10,0,190},{10,0,634},{11,0,792},
-{12,0,358},{140,0,447},{5,0,0},{6,0,536},{7,0,604},{13,0,445},{145,0,126},{7,11,
-1076},{9,11,80},{11,11,78},{11,11,421},{11,11,534},{140,11,545},{8,0,966},{10,0,
-1023},{14,11,369},{146,11,72},{135,11,1641},{6,0,232},{6,0,412},{7,0,1074},{8,0,
-9},{8,0,157},{8,0,786},{9,0,196},{9,0,352},{9,0,457},{10,0,337},{11,0,232},{11,0
-,877},{12,0,480},{140,0,546},{135,0,958},{4,0,382},{136,0,579},{4,0,212},{135,0,
-1206},{4,11,497},{5,11,657},{135,11,1584},{132,0,681},{8,0,971},{138,0,965},{5,
-10,448},{136,10,535},{14,0,16},{146,0,44},{11,0,584},{11,0,616},{14,0,275},{11,
-11,584},{11,11,616},{142,11,275},{136,11,13},{7,10,610},{135,10,1501},{7,11,642}
-,{8,11,250},{11,11,123},{11,11,137},{13,11,48},{142,11,95},{133,0,655},{17,0,67}
-,{147,0,74},{134,0,751},{134,0,1967},{6,0,231},{136,0,423},{5,0,300},{138,0,1016
-},{4,10,319},{5,10,699},{138,10,673},{6,0,237},{7,0,611},{8,0,100},{9,0,416},{11
-,0,335},{12,0,173},{18,0,101},{6,10,336},{8,10,552},{9,10,285},{10,10,99},{139,
-10,568},{134,0,1370},{7,10,1406},{9,10,218},{141,10,222},{133,10,256},{135,0,
-1208},{14,11,213},{148,11,38},{6,0,1219},{135,11,1642},{13,0,417},{14,0,129},{
-143,0,15},{10,11,545},{140,11,301},{17,10,39},{148,10,36},{133,0,199},{4,11,904}
-,{133,11,794},{12,0,427},{146,0,38},{134,0,949},{8,0,665},{135,10,634},{132,10,
-618},{135,10,259},{132,10,339},{133,11,761},{141,10,169},{132,10,759},{5,0,688},
-{7,0,539},{135,0,712},{7,11,386},{138,11,713},{134,0,1186},{6,11,7},{6,11,35},{7
-,11,147},{7,11,1069},{7,11,1568},{7,11,1575},{7,11,1917},{8,11,43},{8,11,208},{9
-,11,128},{9,11,866},{10,11,20},{11,11,981},{147,11,33},{7,11,893},{8,10,482},{
-141,11,424},{6,0,312},{6,0,1715},{10,0,584},{11,0,546},{11,0,692},{12,0,259},{12
-,0,295},{13,0,46},{141,0,154},{5,10,336},{6,10,341},{6,10,478},{6,10,1763},{136,
-10,386},{137,0,151},{132,0,588},{152,0,4},{6,11,322},{9,11,552},{11,11,274},{13,
-11,209},{13,11,499},{14,11,85},{15,11,126},{145,11,70},{135,10,73},{4,0,231},{5,
-0,61},{6,0,104},{7,0,729},{7,0,964},{7,0,1658},{140,0,414},{6,0,263},{138,0,757}
-,{135,10,1971},{4,0,612},{133,0,561},{132,0,320},{135,10,1344},{8,11,83},{8,11,
-817},{9,11,28},{9,11,29},{9,11,885},{10,11,387},{11,11,633},{11,11,740},{13,11,
-235},{13,11,254},{15,11,143},{143,11,146},{5,10,396},{134,10,501},{140,11,49},{
-132,0,225},{4,10,929},{5,10,799},{8,10,46},{136,10,740},{4,0,405},{7,0,817},{14,
-0,58},{17,0,37},{146,0,124},{133,0,974},{4,11,412},{133,11,581},{4,10,892},{133,
-10,770},{4,0,996},{134,0,2026},{4,0,527},{5,0,235},{7,0,1239},{11,0,131},{140,0,
-370},{9,0,16},{13,0,386},{135,11,421},{7,0,956},{7,0,1157},{7,0,1506},{7,0,1606}
-,{7,0,1615},{7,0,1619},{7,0,1736},{7,0,1775},{8,0,590},{9,0,324},{9,0,736},{9,0,
-774},{9,0,776},{9,0,784},{10,0,567},{10,0,708},{11,0,518},{11,0,613},{11,0,695},
-{11,0,716},{11,0,739},{11,0,770},{11,0,771},{11,0,848},{11,0,857},{11,0,931},{11
-,0,947},{12,0,326},{12,0,387},{12,0,484},{12,0,528},{12,0,552},{12,0,613},{13,0,
-189},{13,0,256},{13,0,340},{13,0,432},{13,0,436},{13,0,440},{13,0,454},{14,0,174
-},{14,0,220},{14,0,284},{14,0,390},{145,0,121},{135,10,158},{9,0,137},{138,0,221
-},{4,11,110},{10,11,415},{10,11,597},{142,11,206},{141,11,496},{135,11,205},{151
-,10,25},{135,11,778},{7,11,1656},{7,10,2001},{9,11,369},{10,11,338},{10,11,490},
-{11,11,154},{11,11,545},{11,11,775},{13,11,77},{141,11,274},{4,11,444},{10,11,
-146},{140,11,9},{7,0,390},{138,0,140},{135,0,1144},{134,0,464},{7,10,1461},{140,
-10,91},{132,10,602},{4,11,283},{135,11,1194},{5,0,407},{11,0,204},{11,0,243},{11
-,0,489},{12,0,293},{19,0,37},{20,0,73},{150,0,38},{7,0,1218},{136,0,303},{5,0,
-325},{8,0,5},{8,0,227},{9,0,105},{10,0,585},{12,0,614},{4,10,13},{5,10,567},{7,
-10,1498},{9,10,124},{11,10,521},{140,10,405},{135,10,1006},{7,0,800},{10,0,12},{
-134,11,1720},{135,0,1783},{132,10,735},{138,10,812},{4,10,170},{135,10,323},{6,0
-,621},{13,0,504},{144,0,89},{5,10,304},{135,10,1403},{137,11,216},{6,0,920},{6,0
-,1104},{9,11,183},{139,11,286},{4,0,376},{133,10,742},{134,0,218},{8,0,641},{11,
-0,388},{140,0,580},{7,0,454},{7,0,782},{8,0,768},{140,0,686},{137,11,33},{133,10
-,111},{144,0,0},{10,0,676},{140,0,462},{6,0,164},{136,11,735},{133,10,444},{150,
-0,50},{7,11,1862},{12,11,491},{12,11,520},{13,11,383},{14,11,244},{146,11,12},{5
-,11,132},{9,11,486},{9,11,715},{10,11,458},{11,11,373},{11,11,668},{11,11,795},{
-11,11,897},{12,11,272},{12,11,424},{12,11,539},{12,11,558},{14,11,245},{14,11,
-263},{14,11,264},{14,11,393},{142,11,403},{8,10,123},{15,10,6},{144,10,7},{6,0,
-285},{8,0,654},{11,0,749},{12,0,190},{12,0,327},{13,0,120},{13,0,121},{13,0,327}
-,{15,0,47},{146,0,40},{5,11,8},{6,11,89},{6,11,400},{7,11,1569},{7,11,1623},{7,
-11,1850},{8,11,218},{8,11,422},{9,11,570},{138,11,626},{6,11,387},{7,11,882},{
-141,11,111},{6,0,343},{7,0,195},{9,0,226},{10,0,197},{10,0,575},{11,0,502},{11,0
-,899},{6,11,224},{7,11,877},{137,11,647},{5,10,937},{135,10,100},{135,11,790},{
-150,0,29},{147,0,8},{134,0,1812},{149,0,8},{135,11,394},{7,0,1125},{9,0,143},{11
-,0,61},{14,0,405},{150,0,21},{10,11,755},{147,11,29},{9,11,378},{141,11,162},{
-135,10,922},{5,10,619},{133,10,698},{134,0,1327},{6,0,1598},{137,0,575},{9,11,
-569},{12,11,12},{12,11,81},{12,11,319},{13,11,69},{14,11,259},{16,11,87},{17,11,
-1},{17,11,21},{17,11,24},{18,11,15},{18,11,56},{18,11,59},{18,11,127},{18,11,154
-},{19,11,19},{148,11,31},{6,0,895},{135,11,1231},{5,0,959},{7,11,124},{136,11,38
-},{5,11,261},{7,11,78},{7,11,199},{8,11,815},{9,11,126},{138,11,342},{5,10,917},
-{134,10,1659},{7,0,1759},{5,11,595},{135,11,1863},{136,0,173},{134,0,266},{142,0
-,261},{132,11,628},{5,10,251},{5,10,956},{8,10,268},{9,10,214},{146,10,142},{7,
-11,266},{136,11,804},{135,11,208},{6,11,79},{7,11,1021},{135,11,1519},{11,11,704
-},{141,11,396},{5,10,346},{5,10,711},{136,10,390},{136,11,741},{134,11,376},{134
-,0,1427},{6,0,1033},{6,0,1217},{136,0,300},{133,10,624},{6,11,100},{7,11,244},{7
-,11,632},{7,11,1609},{8,11,178},{8,11,638},{141,11,58},{6,0,584},{5,10,783},{7,
-10,1998},{135,10,2047},{5,0,427},{5,0,734},{7,0,478},{136,0,52},{7,0,239},{11,0,
-217},{142,0,165},{134,0,1129},{6,0,168},{6,0,1734},{7,0,20},{7,0,1056},{8,0,732}
-,{9,0,406},{9,0,911},{138,0,694},{132,10,594},{133,11,791},{7,11,686},{8,11,33},
-{8,11,238},{10,11,616},{11,11,467},{11,11,881},{13,11,217},{13,11,253},{142,11,
-268},{137,11,476},{134,0,418},{133,0,613},{132,0,632},{132,11,447},{7,0,32},{7,0
-,984},{8,0,85},{8,0,709},{9,0,579},{9,0,847},{9,0,856},{10,0,799},{11,0,258},{11
-,0,1007},{12,0,331},{12,0,615},{13,0,188},{13,0,435},{14,0,8},{15,0,165},{16,0,
-27},{20,0,40},{144,11,35},{4,11,128},{5,11,415},{6,11,462},{7,11,294},{7,11,578}
-,{10,11,710},{139,11,86},{5,0,694},{136,0,909},{7,0,1109},{11,0,7},{5,10,37},{6,
-10,39},{6,10,451},{7,10,218},{7,10,1166},{7,10,1687},{8,10,662},{144,10,2},{136,
-11,587},{6,11,427},{7,11,1018},{138,11,692},{4,11,195},{6,10,508},{135,11,802},{
-4,0,167},{135,0,82},{5,0,62},{6,0,24},{6,0,534},{7,0,74},{7,0,678},{7,0,684},{7,
-0,1043},{7,0,1072},{8,0,280},{8,0,541},{8,0,686},{9,0,258},{10,0,519},{11,0,252}
-,{140,0,282},{138,0,33},{4,0,359},{133,11,738},{7,0,980},{9,0,328},{13,0,186},{
-13,0,364},{7,10,635},{7,10,796},{8,10,331},{9,10,330},{9,10,865},{10,10,119},{10
-,10,235},{11,10,111},{11,10,129},{11,10,240},{12,10,31},{12,10,66},{12,10,222},{
-12,10,269},{12,10,599},{12,10,684},{12,10,689},{12,10,691},{142,10,345},{137,10,
-527},{6,0,596},{7,0,585},{135,10,702},{134,11,1683},{133,0,211},{6,0,145},{141,0
-,336},{134,0,1130},{7,0,873},{6,10,37},{7,10,1666},{8,10,195},{8,10,316},{9,10,
-178},{9,10,276},{9,10,339},{9,10,536},{10,10,102},{10,10,362},{10,10,785},{11,10
-,55},{11,10,149},{11,10,773},{13,10,416},{13,10,419},{14,10,38},{14,10,41},{142,
-10,210},{8,0,840},{136,0,841},{132,0,263},{5,11,3},{8,11,578},{9,11,118},{10,11,
-705},{12,11,383},{141,11,279},{132,0,916},{133,11,229},{133,10,645},{15,0,155},{
-16,0,79},{8,11,102},{10,11,578},{10,11,672},{12,11,496},{13,11,408},{14,11,121},
-{145,11,106},{4,0,599},{5,0,592},{6,0,1634},{7,0,5},{7,0,55},{7,0,67},{7,0,97},{
-7,0,691},{7,0,979},{7,0,1600},{7,0,1697},{8,0,207},{8,0,214},{8,0,231},{8,0,294}
-,{8,0,336},{8,0,428},{8,0,471},{8,0,622},{8,0,626},{8,0,679},{8,0,759},{8,0,829}
-,{9,0,11},{9,0,246},{9,0,484},{9,0,573},{9,0,706},{9,0,762},{9,0,798},{9,0,855},
-{9,0,870},{9,0,912},{10,0,303},{10,0,335},{10,0,424},{10,0,461},{10,0,543},{10,0
-,759},{10,0,814},{11,0,59},{11,0,199},{11,0,235},{11,0,590},{11,0,631},{11,0,929
-},{11,0,963},{11,0,987},{12,0,114},{12,0,182},{12,0,226},{12,0,332},{12,0,439},{
-12,0,575},{12,0,598},{12,0,675},{13,0,8},{13,0,125},{13,0,194},{13,0,287},{14,0,
-197},{14,0,383},{15,0,53},{17,0,63},{19,0,46},{19,0,98},{19,0,106},{148,0,85},{7
-,0,1356},{132,10,290},{6,10,70},{7,10,1292},{10,10,762},{139,10,288},{150,11,55}
-,{4,0,593},{8,11,115},{8,11,350},{9,11,489},{10,11,128},{11,11,306},{12,11,373},
-{14,11,30},{17,11,79},{147,11,80},{135,11,1235},{134,0,1392},{4,11,230},{133,11,
-702},{147,0,126},{7,10,131},{7,10,422},{8,10,210},{140,10,573},{134,0,1179},{139
-,11,435},{139,10,797},{134,11,1728},{4,0,162},{18,11,26},{19,11,42},{20,11,43},{
-21,11,0},{23,11,27},{152,11,14},{132,10,936},{6,0,765},{5,10,453},{134,10,441},{
-133,0,187},{135,0,1286},{6,0,635},{6,0,904},{6,0,1210},{134,0,1489},{4,0,215},{8
-,0,890},{9,0,38},{10,0,923},{11,0,23},{11,0,127},{139,0,796},{6,0,1165},{134,0,
-1306},{7,0,716},{13,0,97},{141,0,251},{132,10,653},{136,0,657},{146,10,80},{5,11
-,622},{7,11,1032},{11,11,26},{11,11,213},{11,11,707},{12,11,380},{13,11,226},{
-141,11,355},{6,0,299},{5,11,70},{6,11,334},{9,11,171},{11,11,637},{12,11,202},{
-14,11,222},{145,11,42},{142,0,134},{4,11,23},{5,11,313},{5,11,1014},{6,11,50},{6
-,11,51},{7,11,142},{7,11,384},{9,11,783},{139,11,741},{4,11,141},{7,11,559},{8,
-11,640},{9,11,460},{12,11,183},{141,11,488},{136,11,614},{7,10,1368},{8,10,232},
-{8,10,361},{10,10,682},{138,10,742},{137,10,534},{6,0,1082},{140,0,658},{137,10,
-27},{135,0,2002},{142,10,12},{4,0,28},{5,0,440},{7,0,248},{11,0,833},{140,0,344}
-,{7,10,736},{139,10,264},{134,10,1657},{134,0,1654},{138,0,531},{5,11,222},{9,11
-,140},{138,11,534},{6,0,634},{6,0,798},{134,0,840},{138,11,503},{135,10,127},{
-133,0,853},{5,11,154},{7,11,1491},{10,11,379},{138,11,485},{6,0,249},{7,0,1234},
-{139,0,573},{133,11,716},{7,11,1570},{140,11,542},{136,10,364},{138,0,527},{4,11
-,91},{5,11,388},{5,11,845},{6,11,206},{6,11,252},{6,11,365},{7,11,136},{7,11,531
-},{8,11,264},{136,11,621},{134,0,1419},{135,11,1441},{7,0,49},{7,0,392},{8,0,20}
-,{8,0,172},{8,0,690},{9,0,383},{9,0,845},{10,0,48},{11,0,293},{11,0,832},{11,0,
-920},{11,0,984},{141,0,221},{5,0,858},{133,0,992},{5,0,728},{137,10,792},{5,10,
-909},{9,10,849},{138,10,805},{7,0,525},{7,0,1579},{8,0,497},{136,0,573},{6,0,268
-},{137,0,62},{135,11,576},{134,0,1201},{5,11,771},{5,11,863},{5,11,898},{6,11,
-1632},{6,11,1644},{134,11,1780},{133,11,331},{7,0,193},{7,0,1105},{10,0,495},{7,
-10,397},{8,10,124},{8,10,619},{9,10,305},{11,10,40},{12,10,349},{13,10,134},{13,
-10,295},{14,10,155},{15,10,120},{146,10,105},{138,0,106},{6,0,859},{5,11,107},{7
-,11,201},{136,11,518},{6,11,446},{135,11,1817},{13,0,23},{4,10,262},{135,10,342}
-,{133,10,641},{137,11,851},{6,0,925},{137,0,813},{132,11,504},{6,0,613},{136,0,
-223},{4,10,99},{6,10,250},{6,10,346},{8,10,127},{138,10,81},{136,0,953},{132,10,
-915},{139,11,892},{5,10,75},{9,10,517},{10,10,470},{12,10,155},{141,10,224},{4,0
-,666},{7,0,1017},{7,11,996},{138,11,390},{5,11,883},{133,11,975},{14,10,83},{142
-,11,83},{4,0,670},{5,11,922},{134,11,1707},{135,0,216},{9,0,40},{11,0,136},{135,
-11,787},{5,10,954},{5,11,993},{7,11,515},{137,11,91},{139,0,259},{7,0,1114},{9,0
-,310},{9,0,682},{10,0,440},{13,0,40},{6,10,304},{8,10,418},{11,10,341},{139,10,
-675},{14,0,296},{9,10,410},{139,10,425},{10,11,377},{12,11,363},{13,11,68},{13,
-11,94},{14,11,108},{142,11,306},{7,0,1401},{135,0,1476},{4,0,296},{6,0,475},{7,0
-,401},{7,0,1410},{7,0,1594},{7,0,1674},{8,0,63},{8,0,660},{137,0,74},{4,0,139},{
-4,0,388},{140,0,188},{132,0,797},{132,11,766},{5,11,103},{7,11,921},{8,11,580},{
-8,11,593},{8,11,630},{138,11,28},{4,11,911},{5,11,867},{133,11,1013},{134,10,14}
-,{134,0,1572},{134,10,1708},{21,0,39},{5,10,113},{6,10,243},{7,10,1865},{11,10,
-161},{16,10,37},{145,10,99},{7,11,1563},{141,11,182},{5,11,135},{6,11,519},{7,11
-,1722},{10,11,271},{11,11,261},{145,11,54},{132,10,274},{134,0,1594},{4,11,300},
-{5,11,436},{135,11,484},{4,0,747},{6,0,290},{7,0,649},{7,0,1479},{135,0,1583},{
-133,11,535},{147,11,82},{133,0,232},{137,0,887},{135,10,166},{136,0,521},{4,0,14
-},{7,0,472},{7,0,1801},{10,0,748},{141,0,458},{134,0,741},{134,0,992},{16,0,111}
-,{137,10,304},{4,0,425},{5,11,387},{7,11,557},{12,11,547},{142,11,86},{135,11,
-1747},{5,10,654},{135,11,1489},{7,0,789},{4,11,6},{5,11,708},{136,11,75},{6,10,
-273},{10,10,188},{13,10,377},{146,10,77},{6,0,1593},{4,11,303},{7,11,619},{10,11
-,547},{10,11,687},{11,11,122},{140,11,601},{134,0,1768},{135,10,410},{138,11,772
-},{11,0,233},{139,10,524},{5,0,943},{134,0,1779},{134,10,1785},{136,11,529},{132
-,0,955},{5,0,245},{6,0,576},{7,0,582},{136,0,225},{132,10,780},{142,0,241},{134,
-0,1943},{4,11,106},{7,11,310},{7,11,1785},{10,11,690},{139,11,717},{134,0,1284},
-{5,11,890},{133,11,988},{6,11,626},{142,11,431},{10,11,706},{145,11,32},{137,11,
-332},{132,11,698},{135,0,709},{5,10,948},{138,11,17},{136,0,554},{134,0,1564},{
-139,10,941},{132,0,443},{134,0,909},{134,11,84},{142,0,280},{4,10,532},{5,10,706
-},{135,10,662},{132,0,729},{5,10,837},{6,10,1651},{139,10,985},{135,10,1861},{4,
-0,348},{152,11,3},{5,11,986},{6,11,130},{7,11,1582},{8,11,458},{10,11,101},{10,
-11,318},{138,11,823},{134,0,758},{4,0,298},{137,0,848},{4,10,330},{7,10,933},{7,
-10,2012},{136,10,292},{7,11,1644},{137,11,129},{6,0,1422},{9,0,829},{135,10,767}
-,{5,0,164},{7,0,121},{142,0,189},{7,0,812},{7,0,1261},{7,0,1360},{9,0,632},{140,
-0,352},{135,11,1788},{139,0,556},{135,11,997},{145,10,114},{4,0,172},{9,0,611},{
-10,0,436},{12,0,673},{13,0,255},{137,10,883},{11,0,530},{138,10,274},{133,0,844}
-,{134,0,984},{13,0,232},{18,0,35},{4,10,703},{135,10,207},{132,10,571},{9,0,263}
-,{10,0,147},{138,0,492},{7,11,1756},{137,11,98},{5,10,873},{5,10,960},{8,10,823}
-,{137,10,881},{133,0,537},{132,0,859},{7,11,1046},{139,11,160},{137,0,842},{139,
-10,283},{5,10,33},{6,10,470},{139,10,424},{6,11,45},{7,11,433},{8,11,129},{9,11,
-21},{10,11,392},{11,11,79},{12,11,499},{13,11,199},{141,11,451},{135,0,1291},{
-135,10,1882},{7,11,558},{136,11,353},{134,0,1482},{5,0,230},{5,0,392},{6,0,420},
-{9,0,568},{140,0,612},{6,0,262},{7,10,90},{7,10,664},{7,10,830},{7,10,1380},{7,
-10,2025},{8,11,81},{8,10,448},{8,10,828},{9,11,189},{9,11,201},{11,11,478},{11,
-11,712},{141,11,338},{142,0,31},{5,11,353},{151,11,26},{132,0,753},{4,0,0},{5,0,
-41},{7,0,1459},{7,0,1469},{7,0,1859},{9,0,549},{139,0,905},{9,10,417},{137,10,
-493},{135,11,1113},{133,0,696},{141,11,448},{134,10,295},{132,0,834},{4,0,771},{
-5,10,1019},{6,11,25},{7,11,855},{7,11,1258},{144,11,32},{134,0,1076},{133,0,921}
-,{133,0,674},{4,11,4},{7,11,1118},{7,11,1320},{7,11,1706},{8,11,277},{9,11,622},
-{10,11,9},{11,11,724},{12,11,350},{12,11,397},{13,11,28},{13,11,159},{15,11,89},
-{18,11,5},{19,11,9},{20,11,34},{150,11,47},{134,10,208},{6,0,444},{136,0,308},{6
-,0,180},{7,0,1137},{8,0,751},{139,0,805},{4,0,183},{7,0,271},{11,0,824},{11,0,
-952},{13,0,278},{13,0,339},{13,0,482},{14,0,424},{148,0,99},{7,11,317},{135,11,
-569},{4,0,19},{5,0,477},{5,0,596},{6,0,505},{7,0,1221},{11,0,907},{12,0,209},{
-141,0,214},{135,0,1215},{6,0,271},{7,0,398},{8,0,387},{10,0,344},{7,10,448},{7,
-10,1629},{7,10,1813},{8,10,442},{9,10,710},{10,10,282},{138,10,722},{11,10,844},
-{12,10,104},{140,10,625},{134,11,255},{133,10,787},{134,0,1645},{11,11,956},{151
-,11,3},{6,0,92},{6,0,188},{7,0,209},{7,0,1269},{7,0,1524},{7,0,1876},{8,0,661},{
-10,0,42},{10,0,228},{11,0,58},{11,0,1020},{12,0,58},{12,0,118},{141,0,32},{4,0,
-459},{133,0,966},{4,11,536},{7,11,1141},{10,11,723},{139,11,371},{140,0,330},{
-134,0,1557},{7,11,285},{135,11,876},{136,10,491},{135,11,560},{6,0,18},{7,0,179}
-,{7,0,932},{8,0,548},{8,0,757},{9,0,54},{9,0,65},{9,0,532},{9,0,844},{10,0,113},
-{10,0,117},{10,0,315},{10,0,560},{10,0,622},{10,0,798},{11,0,153},{11,0,351},{11
-,0,375},{12,0,78},{12,0,151},{12,0,392},{12,0,666},{14,0,248},{143,0,23},{6,0,
-1742},{132,11,690},{4,10,403},{5,10,441},{7,10,450},{10,10,840},{11,10,101},{12,
-10,193},{141,10,430},{133,0,965},{134,0,182},{10,0,65},{10,0,488},{138,0,497},{
-135,11,1346},{6,0,973},{6,0,1158},{10,11,200},{19,11,2},{151,11,22},{4,11,190},{
-133,11,554},{133,10,679},{7,0,328},{137,10,326},{133,11,1001},{9,0,588},{138,0,
-260},{133,11,446},{135,10,1128},{135,10,1796},{147,11,119},{134,0,1786},{6,0,
-1328},{6,0,1985},{8,0,962},{138,0,1017},{135,0,308},{11,0,508},{4,10,574},{7,10,
-350},{7,10,1024},{8,10,338},{9,10,677},{138,10,808},{138,11,752},{135,10,1081},{
-137,11,96},{7,10,1676},{135,10,2037},{136,0,588},{132,11,304},{133,0,614},{140,0
-,793},{136,0,287},{137,10,297},{141,10,37},{6,11,53},{6,11,199},{7,11,1408},{8,
-11,32},{8,11,93},{9,11,437},{10,11,397},{10,11,629},{11,11,593},{11,11,763},{13,
-11,326},{145,11,35},{134,11,105},{9,11,320},{10,11,506},{138,11,794},{5,11,114},
-{5,11,255},{141,11,285},{140,0,290},{7,11,2035},{8,11,19},{9,11,89},{138,11,831}
-,{134,0,1136},{7,0,719},{8,0,796},{8,0,809},{8,0,834},{6,10,306},{7,10,1140},{7,
-10,1340},{8,10,133},{138,10,449},{139,10,1011},{5,0,210},{6,0,213},{7,0,60},{10,
-0,364},{139,0,135},{5,0,607},{8,0,326},{136,0,490},{138,11,176},{132,0,701},{5,0
-,472},{7,0,380},{137,0,758},{135,0,1947},{6,0,1079},{138,0,278},{138,11,391},{5,
-10,329},{8,10,260},{139,11,156},{4,0,386},{7,0,41},{8,0,405},{8,0,728},{9,0,497}
-,{11,0,110},{11,0,360},{15,0,37},{144,0,84},{5,0,46},{7,0,1452},{7,0,1480},{8,0,
-634},{140,0,472},{136,0,961},{4,0,524},{136,0,810},{10,0,238},{141,0,33},{132,10
-,657},{152,10,7},{133,0,532},{5,0,997},{135,10,1665},{7,11,594},{7,11,851},{7,11
-,1858},{9,11,411},{9,11,574},{9,11,666},{9,11,737},{10,11,346},{10,11,712},{11,
-11,246},{11,11,432},{11,11,517},{11,11,647},{11,11,679},{11,11,727},{12,11,304},
-{12,11,305},{12,11,323},{12,11,483},{12,11,572},{12,11,593},{12,11,602},{13,11,
-95},{13,11,101},{13,11,171},{13,11,315},{13,11,378},{13,11,425},{13,11,475},{14,
-11,63},{14,11,380},{14,11,384},{15,11,133},{18,11,112},{148,11,72},{5,11,955},{
-136,11,814},{134,0,1301},{5,10,66},{7,10,1896},{136,10,288},{133,11,56},{134,10,
-1643},{6,0,1298},{148,11,100},{5,0,782},{5,0,829},{6,0,671},{6,0,1156},{6,0,1738
-},{137,11,621},{4,0,306},{5,0,570},{7,0,1347},{5,10,91},{5,10,648},{5,10,750},{5
-,10,781},{6,10,54},{6,10,112},{6,10,402},{6,10,1732},{7,10,315},{7,10,749},{7,10
-,1900},{9,10,78},{9,10,508},{10,10,611},{10,10,811},{11,10,510},{11,10,728},{13,
-10,36},{14,10,39},{16,10,83},{17,10,124},{148,10,30},{8,10,570},{9,11,477},{141,
-11,78},{4,11,639},{10,11,4},{10,10,322},{10,10,719},{11,10,407},{11,11,638},{12,
-11,177},{148,11,57},{7,0,1823},{139,0,693},{7,0,759},{5,11,758},{8,10,125},{8,10
-,369},{8,10,524},{10,10,486},{11,10,13},{11,10,381},{11,10,736},{11,10,766},{11,
-10,845},{13,10,114},{13,10,292},{142,10,47},{7,0,1932},{6,10,1684},{6,10,1731},{
-7,10,356},{8,10,54},{8,10,221},{9,10,225},{9,10,356},{10,10,77},{10,10,446},{10,
-10,731},{12,10,404},{141,10,491},{135,11,552},{135,11,1112},{4,0,78},{5,0,96},{5
-,0,182},{6,0,1257},{7,0,1724},{7,0,1825},{10,0,394},{10,0,471},{11,0,532},{14,0,
-340},{145,0,88},{139,11,328},{135,0,1964},{132,10,411},{4,10,80},{5,10,44},{137,
-11,133},{5,11,110},{6,11,169},{6,11,1702},{7,11,400},{8,11,538},{9,11,184},{9,11
-,524},{140,11,218},{4,0,521},{5,10,299},{7,10,1083},{140,11,554},{6,11,133},{9,
-11,353},{12,11,628},{146,11,79},{6,0,215},{7,0,584},{7,0,1028},{7,0,1473},{7,0,
-1721},{9,0,424},{138,0,779},{7,0,857},{7,0,1209},{7,10,1713},{9,10,537},{10,10,
-165},{12,10,219},{140,10,561},{4,10,219},{6,11,93},{7,11,1422},{7,10,1761},{7,11
-,1851},{8,11,673},{9,10,86},{9,11,529},{140,11,43},{137,11,371},{136,0,671},{5,0
-,328},{135,0,918},{132,0,529},{9,11,25},{10,11,467},{138,11,559},{4,11,335},{135
-,11,942},{134,0,716},{134,0,1509},{6,0,67},{7,0,258},{7,0,1630},{9,0,354},{9,0,
-675},{10,0,830},{14,0,80},{17,0,80},{140,10,428},{134,0,1112},{6,0,141},{7,0,225
-},{9,0,59},{9,0,607},{10,0,312},{11,0,687},{12,0,555},{13,0,373},{13,0,494},{148
-,0,58},{133,10,514},{8,11,39},{10,11,773},{11,11,84},{12,11,205},{142,11,1},{8,0
-,783},{5,11,601},{133,11,870},{136,11,594},{4,10,55},{5,10,301},{6,10,571},{14,
-10,49},{146,10,102},{132,11,181},{134,11,1652},{133,10,364},{4,11,97},{5,11,147}
-,{6,11,286},{7,11,1362},{141,11,176},{4,10,76},{7,10,1550},{9,10,306},{9,10,430}
-,{9,10,663},{10,10,683},{11,10,427},{11,10,753},{12,10,334},{12,10,442},{14,10,
-258},{14,10,366},{143,10,131},{137,10,52},{6,0,955},{134,0,1498},{6,11,375},{7,
-11,169},{7,11,254},{136,11,780},{7,0,430},{11,0,46},{14,0,343},{142,11,343},{135
-,0,1183},{5,0,602},{7,0,2018},{9,0,418},{9,0,803},{135,11,1447},{8,0,677},{135,
-11,1044},{139,11,285},{4,10,656},{135,10,779},{135,10,144},{5,11,629},{135,11,
-1549},{135,10,1373},{138,11,209},{7,10,554},{7,10,605},{141,10,10},{5,10,838},{5
-,10,841},{134,10,1649},{133,10,1012},{6,0,1357},{134,0,1380},{144,0,53},{6,0,590
-},{7,10,365},{7,10,1357},{7,10,1497},{8,10,154},{141,10,281},{133,10,340},{132,
-11,420},{135,0,329},{147,11,32},{4,0,469},{10,11,429},{139,10,495},{8,10,261},{9
-,10,144},{9,10,466},{10,10,370},{12,10,470},{13,10,144},{142,10,348},{142,0,460}
-,{4,11,325},{9,10,897},{138,11,125},{6,0,1743},{6,10,248},{9,10,546},{10,10,535}
-,{11,10,681},{141,10,135},{4,0,990},{5,0,929},{6,0,340},{8,0,376},{8,0,807},{8,0
-,963},{8,0,980},{138,0,1007},{134,0,1603},{140,0,250},{4,11,714},{133,11,469},{
-134,10,567},{136,10,445},{5,0,218},{7,0,1610},{8,0,646},{10,0,83},{11,11,138},{
-140,11,40},{7,0,1512},{135,0,1794},{135,11,1216},{11,0,0},{16,0,78},{132,11,718}
-,{133,0,571},{132,0,455},{134,0,1012},{5,11,124},{5,11,144},{6,11,548},{7,11,15}
-,{7,11,153},{137,11,629},{142,11,10},{6,11,75},{7,11,1531},{8,11,416},{9,11,240}
-,{9,11,275},{10,11,100},{11,11,658},{11,11,979},{12,11,86},{13,11,468},{14,11,66
-},{14,11,207},{15,11,20},{15,11,25},{144,11,58},{132,10,577},{5,11,141},{5,11,
-915},{6,11,1783},{7,11,211},{7,11,698},{7,11,1353},{9,11,83},{9,11,281},{10,11,
-376},{10,11,431},{11,11,543},{12,11,664},{13,11,280},{13,11,428},{14,11,61},{14,
-11,128},{17,11,52},{145,11,81},{6,0,161},{7,0,372},{137,0,597},{132,0,349},{10,
-11,702},{139,11,245},{134,0,524},{134,10,174},{6,0,432},{9,0,751},{139,0,322},{
-147,11,94},{4,11,338},{133,11,400},{5,0,468},{10,0,325},{11,0,856},{12,0,345},{
-143,0,104},{133,0,223},{132,0,566},{4,11,221},{5,11,659},{5,11,989},{7,11,697},{
-7,11,1211},{138,11,284},{135,11,1070},{4,0,59},{135,0,1394},{6,0,436},{11,0,481}
-,{5,10,878},{133,10,972},{4,0,48},{5,0,271},{135,0,953},{5,0,610},{136,0,457},{4
-,0,773},{5,0,618},{137,0,756},{133,0,755},{135,0,1217},{138,11,507},{132,10,351}
-,{132,0,197},{143,11,78},{4,11,188},{7,11,805},{11,11,276},{142,11,293},{5,11,
-884},{139,11,991},{132,10,286},{10,0,259},{10,0,428},{7,10,438},{7,10,627},{7,10
-,1516},{8,10,40},{9,10,56},{9,10,294},{11,10,969},{11,10,995},{146,10,148},{4,0,
-356},{5,0,217},{5,0,492},{5,0,656},{8,0,544},{136,11,544},{5,0,259},{6,0,1230},{
-7,0,414},{7,0,854},{142,0,107},{132,0,1007},{15,0,14},{144,0,5},{6,0,1580},{132,
-10,738},{132,11,596},{132,0,673},{133,10,866},{6,0,1843},{135,11,1847},{4,0,165}
-,{7,0,1398},{135,0,1829},{135,11,1634},{147,11,65},{6,0,885},{6,0,1009},{137,0,
-809},{133,10,116},{132,10,457},{136,11,770},{9,0,498},{12,0,181},{10,11,361},{
-142,11,316},{134,11,595},{5,0,9},{7,0,297},{7,0,966},{140,0,306},{4,11,89},{5,11
-,489},{6,11,315},{7,11,553},{7,11,1745},{138,11,243},{134,0,1487},{132,0,437},{5
-,0,146},{6,0,411},{138,0,721},{5,10,527},{6,10,189},{135,10,859},{11,10,104},{11
-,10,554},{15,10,60},{143,10,125},{6,11,1658},{9,11,3},{10,11,154},{11,11,641},{
-13,11,85},{13,11,201},{141,11,346},{6,0,177},{135,0,467},{134,0,1377},{134,10,
-116},{136,11,645},{4,11,166},{5,11,505},{6,11,1670},{137,11,110},{133,10,487},{4
-,10,86},{5,10,667},{5,10,753},{6,10,316},{6,10,455},{135,10,946},{133,0,200},{
-132,0,959},{6,0,1928},{134,0,1957},{139,11,203},{150,10,45},{4,10,79},{7,10,1773
-},{10,10,450},{11,10,589},{13,10,332},{13,10,493},{14,10,183},{14,10,334},{14,10
-,362},{14,10,368},{14,10,376},{14,10,379},{19,10,90},{19,10,103},{19,10,127},{
-148,10,90},{6,0,1435},{135,11,1275},{134,0,481},{7,11,445},{8,11,307},{8,11,704}
-,{10,11,41},{10,11,439},{11,11,237},{11,11,622},{140,11,201},{135,11,869},{4,0,
-84},{7,0,1482},{10,0,76},{138,0,142},{11,11,277},{144,11,14},{135,11,1977},{4,11
-,189},{5,11,713},{136,11,57},{133,0,1015},{138,11,371},{4,0,315},{5,0,507},{135,
-0,1370},{4,11,552},{142,10,381},{9,0,759},{16,0,31},{16,0,39},{16,0,75},{18,0,24
-},{20,0,42},{152,0,1},{134,0,712},{134,0,1722},{133,10,663},{133,10,846},{8,0,
-222},{8,0,476},{9,0,238},{11,0,516},{11,0,575},{15,0,109},{146,0,100},{7,0,1402}
-,{7,0,1414},{12,0,456},{5,10,378},{8,10,465},{9,10,286},{10,10,185},{10,10,562},
-{10,10,635},{11,10,31},{11,10,393},{13,10,312},{18,10,65},{18,10,96},{147,10,89}
-,{4,0,986},{6,0,1958},{6,0,2032},{8,0,934},{138,0,985},{7,10,1880},{9,10,680},{
-139,10,798},{134,10,1770},{145,11,49},{132,11,614},{132,10,648},{5,10,945},{6,10
-,1656},{6,10,1787},{7,10,167},{8,10,824},{9,10,391},{10,10,375},{139,10,185},{
-138,11,661},{7,0,1273},{135,11,1945},{7,0,706},{7,0,1058},{138,0,538},{7,10,1645
-},{8,10,352},{137,10,249},{132,10,152},{11,0,92},{11,0,196},{11,0,409},{11,0,450
-},{11,0,666},{11,0,777},{12,0,262},{13,0,385},{13,0,393},{15,0,115},{16,0,45},{
-145,0,82},{133,10,1006},{6,0,40},{135,0,1781},{9,11,614},{139,11,327},{5,10,420}
-,{135,10,1449},{135,0,431},{10,0,97},{135,10,832},{6,0,423},{7,0,665},{135,0,
-1210},{7,0,237},{8,0,664},{9,0,42},{9,0,266},{9,0,380},{9,0,645},{10,0,177},{138
-,0,276},{7,0,264},{133,10,351},{8,0,213},{5,10,40},{7,10,598},{7,10,1638},{9,10,
-166},{9,10,640},{9,10,685},{9,10,773},{11,10,215},{13,10,65},{14,10,172},{14,10,
-317},{145,10,6},{5,11,84},{134,11,163},{8,10,60},{9,10,343},{139,10,769},{137,0,
-455},{133,11,410},{8,0,906},{12,0,700},{12,0,706},{140,0,729},{21,11,33},{150,11
-,40},{7,10,1951},{8,10,765},{8,10,772},{140,10,671},{7,10,108},{8,10,219},{8,10,
-388},{9,10,639},{9,10,775},{11,10,275},{140,10,464},{5,11,322},{7,11,1941},{8,11
-,186},{9,11,262},{10,11,187},{14,11,208},{146,11,130},{139,0,624},{8,0,574},{5,
-11,227},{140,11,29},{7,11,1546},{11,11,299},{142,11,407},{5,10,15},{6,10,56},{7,
-10,1758},{8,10,500},{9,10,730},{11,10,331},{13,10,150},{142,10,282},{7,11,1395},
-{8,11,486},{9,11,236},{9,11,878},{10,11,218},{11,11,95},{19,11,17},{147,11,31},{
-135,11,2043},{4,0,354},{146,11,4},{140,11,80},{135,0,1558},{134,10,1886},{5,10,
-205},{6,10,438},{137,10,711},{133,11,522},{133,10,534},{7,0,235},{7,0,1475},{15,
-0,68},{146,0,120},{137,10,691},{4,0,942},{6,0,1813},{8,0,917},{10,0,884},{12,0,
-696},{12,0,717},{12,0,723},{12,0,738},{12,0,749},{12,0,780},{16,0,97},{146,0,169
-},{6,10,443},{8,11,562},{9,10,237},{9,10,571},{9,10,695},{10,10,139},{11,10,715}
-,{12,10,417},{141,10,421},{135,0,957},{133,0,830},{134,11,1771},{146,0,23},{5,0,
-496},{6,0,694},{7,0,203},{7,11,1190},{137,11,620},{137,11,132},{6,0,547},{134,0,
-1549},{8,11,258},{9,11,208},{137,11,359},{4,0,864},{5,0,88},{137,0,239},{135,11,
-493},{4,11,317},{135,11,1279},{132,11,477},{4,10,578},{5,11,63},{133,11,509},{7,
-0,650},{135,0,1310},{7,0,1076},{9,0,80},{11,0,78},{11,0,421},{11,0,534},{140,0,
-545},{132,11,288},{12,0,553},{14,0,118},{133,10,923},{7,0,274},{11,0,479},{139,0
-,507},{8,11,89},{8,11,620},{9,11,49},{10,11,774},{11,11,628},{12,11,322},{143,11
-,124},{4,0,497},{135,0,1584},{7,0,261},{7,0,1115},{7,0,1354},{7,0,1404},{7,0,
-1588},{7,0,1705},{7,0,1902},{9,0,465},{10,0,248},{10,0,349},{10,0,647},{11,0,527
-},{11,0,660},{11,0,669},{12,0,529},{13,0,305},{132,10,924},{133,10,665},{136,0,
-13},{6,0,791},{138,11,120},{7,0,642},{8,0,250},{11,0,123},{11,0,137},{13,0,48},{
-142,0,95},{4,10,265},{7,10,807},{135,10,950},{5,10,93},{140,10,267},{135,0,1429}
-,{4,0,949},{10,0,885},{10,0,891},{10,0,900},{10,0,939},{12,0,760},{142,0,449},{
-139,11,366},{132,0,818},{134,11,85},{135,10,994},{7,0,330},{5,10,233},{5,10,320}
-,{6,10,140},{136,10,295},{4,0,1004},{8,0,982},{136,0,993},{133,10,978},{4,10,905
-},{6,10,1701},{137,10,843},{10,0,545},{140,0,301},{6,0,947},{134,0,1062},{134,0,
-1188},{4,0,904},{5,0,794},{152,10,6},{134,0,1372},{135,11,608},{5,11,279},{6,11,
-235},{7,11,468},{8,11,446},{9,11,637},{10,11,717},{11,11,738},{140,11,514},{132,
-10,509},{5,11,17},{6,11,371},{137,11,528},{132,0,693},{4,11,115},{5,11,669},{6,
-11,407},{8,11,311},{11,11,10},{141,11,5},{11,0,377},{7,10,273},{137,11,381},{135
-,0,695},{7,0,386},{138,0,713},{135,10,1041},{134,0,1291},{6,0,7},{6,0,35},{7,0,
-147},{7,0,1069},{7,0,1568},{7,0,1575},{7,0,1917},{8,0,43},{8,0,208},{9,0,128},{9
-,0,866},{10,0,20},{11,0,981},{147,0,33},{7,0,893},{141,0,424},{139,10,234},{150,
-11,56},{5,11,779},{5,11,807},{6,11,1655},{134,11,1676},{5,10,802},{7,10,2021},{
-136,10,805},{4,11,196},{5,10,167},{5,11,558},{5,10,899},{5,11,949},{6,10,410},{
-137,10,777},{137,10,789},{134,10,1705},{8,0,904},{140,0,787},{6,0,322},{9,0,552}
-,{11,0,274},{13,0,209},{13,0,499},{14,0,85},{15,0,126},{145,0,70},{135,10,10},{5
-,10,11},{6,10,117},{6,10,485},{7,10,1133},{9,10,582},{9,10,594},{11,10,21},{11,
-10,818},{12,10,535},{141,10,86},{4,10,264},{7,10,1067},{8,10,204},{8,10,385},{
-139,10,953},{132,11,752},{138,10,56},{133,10,470},{6,0,1808},{8,0,83},{8,0,742},
-{8,0,817},{9,0,28},{9,0,29},{9,0,885},{10,0,387},{11,0,633},{11,0,740},{13,0,235
-},{13,0,254},{15,0,143},{143,0,146},{140,0,49},{134,0,1832},{4,11,227},{5,11,159
-},{5,11,409},{7,11,80},{10,11,294},{10,11,479},{12,11,418},{14,11,50},{14,11,249
-},{142,11,295},{7,11,1470},{8,11,66},{8,11,137},{8,11,761},{9,11,638},{11,11,80}
-,{11,11,212},{11,11,368},{11,11,418},{12,11,8},{13,11,15},{16,11,61},{17,11,59},
-{19,11,28},{148,11,84},{139,10,1015},{138,11,468},{135,0,421},{6,0,415},{7,0,
-1049},{137,0,442},{6,11,38},{7,11,1220},{8,11,185},{8,11,256},{9,11,22},{9,11,
-331},{10,11,738},{11,11,205},{11,11,540},{11,11,746},{13,11,399},{13,11,465},{14
-,11,88},{142,11,194},{139,0,289},{133,10,715},{4,0,110},{10,0,415},{10,0,597},{
-142,0,206},{4,11,159},{6,11,115},{7,11,252},{7,11,257},{7,11,1928},{8,11,69},{9,
-11,384},{10,11,91},{10,11,615},{12,11,375},{14,11,235},{18,11,117},{147,11,123},
-{5,11,911},{136,11,278},{7,0,205},{7,0,2000},{8,10,794},{9,10,400},{10,10,298},{
-142,10,228},{135,11,1774},{4,11,151},{7,11,1567},{8,11,351},{137,11,322},{136,10
-,724},{133,11,990},{7,0,1539},{11,0,512},{13,0,205},{19,0,30},{22,0,36},{23,0,19
-},{135,11,1539},{5,11,194},{7,11,1662},{9,11,90},{140,11,180},{6,10,190},{7,10,
-768},{135,10,1170},{134,0,1340},{4,0,283},{135,0,1194},{133,11,425},{133,11,971}
-,{12,0,549},{14,10,67},{147,10,60},{135,10,1023},{134,0,1720},{138,11,587},{5,11
-,72},{6,11,264},{7,11,21},{7,11,46},{7,11,2013},{8,11,215},{8,11,513},{10,11,266
-},{139,11,22},{5,0,319},{135,0,534},{6,10,137},{9,10,75},{9,10,253},{10,10,194},
-{138,10,444},{7,0,1180},{20,0,112},{6,11,239},{7,11,118},{10,11,95},{11,11,603},
-{13,11,443},{14,11,160},{143,11,4},{134,11,431},{5,11,874},{6,11,1677},{11,10,
-643},{12,10,115},{143,11,0},{134,0,967},{6,11,65},{7,11,939},{7,11,1172},{7,11,
-1671},{9,11,540},{10,11,696},{11,11,265},{11,11,732},{11,11,928},{11,11,937},{12
-,11,399},{13,11,438},{149,11,19},{137,11,200},{135,0,1940},{5,10,760},{7,10,542}
-,{8,10,135},{136,10,496},{140,11,44},{7,11,1655},{136,11,305},{7,10,319},{7,10,
-355},{7,10,763},{10,10,389},{145,10,43},{136,0,735},{138,10,786},{137,11,19},{
-132,11,696},{5,0,132},{9,0,486},{9,0,715},{10,0,458},{11,0,373},{11,0,668},{11,0
-,795},{11,0,897},{12,0,272},{12,0,424},{12,0,539},{12,0,558},{14,0,245},{14,0,
-263},{14,0,264},{14,0,393},{142,0,403},{10,0,38},{139,0,784},{132,0,838},{4,11,
-302},{135,11,1766},{133,0,379},{5,0,8},{6,0,89},{6,0,400},{7,0,1569},{7,0,1623},
-{7,0,1850},{8,0,218},{8,0,422},{9,0,570},{10,0,626},{4,11,726},{133,11,630},{4,0
-,1017},{138,0,660},{6,0,387},{7,0,882},{141,0,111},{6,0,224},{7,0,877},{137,0,
-647},{4,10,58},{5,10,286},{6,10,319},{7,10,402},{7,10,1254},{7,10,1903},{8,10,
-356},{140,10,408},{135,0,790},{9,0,510},{10,0,53},{4,10,389},{9,10,181},{10,10,
-29},{10,10,816},{11,10,311},{11,10,561},{12,10,67},{141,10,181},{142,0,458},{6,
-11,118},{7,11,215},{7,11,1521},{140,11,11},{134,0,954},{135,0,394},{134,0,1367},
-{5,11,225},{133,10,373},{132,0,882},{7,0,1409},{135,10,1972},{135,10,1793},{4,11
-,370},{5,11,756},{135,11,1326},{150,11,13},{7,11,354},{10,11,410},{139,11,815},{
-6,11,1662},{7,11,48},{8,11,771},{10,11,116},{13,11,104},{14,11,105},{14,11,184},
-{15,11,168},{19,11,92},{148,11,68},{7,0,124},{136,0,38},{5,0,261},{7,0,78},{7,0,
-199},{8,0,815},{9,0,126},{10,0,342},{140,0,647},{4,0,628},{140,0,724},{7,0,266},
-{8,0,804},{7,10,1651},{145,10,89},{135,0,208},{134,0,1178},{6,0,79},{135,0,1519}
-,{132,10,672},{133,10,737},{136,0,741},{132,11,120},{4,0,710},{6,0,376},{134,0,
-606},{134,0,1347},{134,0,1494},{6,0,850},{6,0,1553},{137,0,821},{5,10,145},{134,
-11,593},{7,0,1311},{140,0,135},{4,0,467},{5,0,405},{134,0,544},{5,11,820},{135,
-11,931},{6,0,100},{7,0,244},{7,0,632},{7,0,1609},{8,0,178},{8,0,638},{141,0,58},
-{4,10,387},{135,10,1288},{6,11,151},{6,11,1675},{7,11,383},{151,11,10},{132,0,
-481},{135,10,550},{134,0,1378},{6,11,1624},{11,11,11},{12,11,422},{13,11,262},{
-142,11,360},{133,0,791},{4,11,43},{5,11,344},{133,11,357},{7,0,1227},{140,0,978}
-,{7,0,686},{8,0,33},{8,0,238},{10,0,616},{11,0,467},{11,0,881},{13,0,217},{13,0,
-253},{142,0,268},{137,0,857},{8,0,467},{8,0,1006},{7,11,148},{8,11,284},{141,11,
-63},{4,10,576},{135,10,1263},{133,11,888},{5,10,919},{134,10,1673},{20,10,37},{
-148,11,37},{132,0,447},{132,11,711},{4,0,128},{5,0,415},{6,0,462},{7,0,294},{7,0
-,578},{10,0,710},{139,0,86},{4,10,82},{5,10,333},{5,10,904},{6,10,207},{7,10,325
-},{7,10,1726},{8,10,101},{10,10,778},{139,10,220},{136,0,587},{137,11,440},{133,
-10,903},{6,0,427},{7,0,1018},{138,0,692},{4,0,195},{135,0,802},{140,10,147},{134
-,0,1546},{134,0,684},{132,10,705},{136,0,345},{11,11,678},{140,11,307},{133,0,
-365},{134,0,1683},{4,11,65},{5,11,479},{5,11,1004},{7,11,1913},{8,11,317},{9,11,
-302},{10,11,612},{141,11,22},{138,0,472},{4,11,261},{135,11,510},{134,10,90},{
-142,0,433},{151,0,28},{4,11,291},{7,11,101},{9,11,515},{12,11,152},{12,11,443},{
-13,11,392},{142,11,357},{140,0,997},{5,0,3},{8,0,578},{9,0,118},{10,0,705},{141,
-0,279},{135,11,1266},{7,10,813},{12,10,497},{141,10,56},{133,0,229},{6,10,125},{
-135,10,1277},{8,0,102},{10,0,578},{10,0,672},{12,0,496},{13,0,408},{14,0,121},{
-17,0,106},{151,10,12},{6,0,866},{134,0,1080},{136,0,1022},{4,11,130},{135,11,843
-},{5,11,42},{5,11,879},{7,11,245},{7,11,324},{7,11,1532},{11,11,463},{11,11,472}
-,{13,11,363},{144,11,52},{150,0,55},{8,0,115},{8,0,350},{9,0,489},{10,0,128},{11
-,0,306},{12,0,373},{14,0,30},{17,0,79},{19,0,80},{4,11,134},{133,11,372},{134,0,
-657},{134,0,933},{135,11,1147},{4,0,230},{133,0,702},{134,0,1728},{4,0,484},{18,
-0,26},{19,0,42},{20,0,43},{21,0,0},{23,0,27},{152,0,14},{7,0,185},{135,0,703},{6
-,0,417},{10,0,618},{7,10,1106},{9,10,770},{11,10,112},{140,10,413},{134,0,803},{
-132,11,644},{134,0,1262},{7,11,540},{12,10,271},{145,10,109},{135,11,123},{132,0
-,633},{134,11,623},{4,11,908},{5,11,359},{5,11,508},{6,11,1723},{7,11,343},{7,11
-,1996},{135,11,2026},{135,0,479},{10,0,262},{7,10,304},{9,10,646},{9,10,862},{11
-,10,696},{12,10,208},{15,10,79},{147,10,108},{4,11,341},{135,11,480},{134,0,830}
-,{5,0,70},{5,0,622},{6,0,334},{7,0,1032},{9,0,171},{11,0,26},{11,0,213},{11,0,
-637},{11,0,707},{12,0,202},{12,0,380},{13,0,226},{13,0,355},{14,0,222},{145,0,42
-},{135,10,981},{143,0,217},{137,11,114},{4,0,23},{4,0,141},{5,0,313},{5,0,1014},
-{6,0,50},{6,0,51},{7,0,142},{7,0,384},{7,0,559},{8,0,640},{9,0,460},{9,0,783},{
-11,0,741},{12,0,183},{141,0,488},{141,0,360},{7,0,1586},{7,11,1995},{8,11,299},{
-11,11,890},{140,11,674},{132,10,434},{7,0,652},{134,10,550},{7,0,766},{5,10,553}
-,{138,10,824},{7,0,737},{8,0,298},{136,10,452},{4,11,238},{5,11,503},{6,11,179},
-{7,11,2003},{8,11,381},{8,11,473},{9,11,149},{10,11,183},{15,11,45},{143,11,86},
-{133,10,292},{5,0,222},{9,0,655},{138,0,534},{138,10,135},{4,11,121},{5,11,156},
-{5,11,349},{9,11,136},{10,11,605},{14,11,342},{147,11,107},{137,0,906},{6,0,1013
-},{134,0,1250},{6,0,1956},{6,0,2009},{8,0,991},{144,0,120},{135,11,1192},{138,0,
-503},{5,0,154},{7,0,1491},{10,0,379},{138,0,485},{6,0,1867},{6,0,1914},{6,0,1925
-},{9,0,917},{9,0,925},{9,0,932},{9,0,951},{9,0,1007},{9,0,1013},{12,0,806},{12,0
-,810},{12,0,814},{12,0,816},{12,0,824},{12,0,832},{12,0,837},{12,0,863},{12,0,
-868},{12,0,870},{12,0,889},{12,0,892},{12,0,900},{12,0,902},{12,0,908},{12,0,933
-},{12,0,942},{12,0,949},{12,0,954},{15,0,175},{15,0,203},{15,0,213},{15,0,218},{
-15,0,225},{15,0,231},{15,0,239},{15,0,248},{15,0,252},{18,0,190},{18,0,204},{18,
-0,215},{18,0,216},{18,0,222},{18,0,225},{18,0,230},{18,0,239},{18,0,241},{21,0,
-42},{21,0,43},{21,0,44},{21,0,45},{21,0,46},{21,0,53},{24,0,27},{152,0,31},{133,
-0,716},{135,0,844},{4,0,91},{5,0,388},{5,0,845},{6,0,206},{6,0,252},{6,0,365},{7
-,0,136},{7,0,531},{136,0,621},{7,10,393},{10,10,603},{139,10,206},{6,11,80},{6,
-11,1694},{7,11,173},{7,11,1974},{9,11,547},{10,11,730},{14,11,18},{150,11,39},{
-137,0,748},{4,11,923},{134,11,1711},{4,10,912},{137,10,232},{7,10,98},{7,10,1973
-},{136,10,716},{14,0,103},{133,10,733},{132,11,595},{12,0,158},{18,0,8},{19,0,62
-},{20,0,6},{22,0,4},{23,0,2},{23,0,9},{5,11,240},{6,11,459},{7,11,12},{7,11,114}
-,{7,11,502},{7,11,1751},{7,11,1753},{7,11,1805},{8,11,658},{9,11,1},{11,11,959},
-{13,11,446},{142,11,211},{135,0,576},{5,0,771},{5,0,863},{5,0,898},{6,0,648},{6,
-0,1632},{6,0,1644},{134,0,1780},{133,0,331},{7,11,633},{7,11,905},{7,11,909},{7,
-11,1538},{9,11,767},{140,11,636},{140,0,632},{5,0,107},{7,0,201},{136,0,518},{6,
-0,446},{7,0,1817},{134,11,490},{9,0,851},{141,0,510},{7,11,250},{8,11,506},{136,
-11,507},{4,0,504},{137,10,72},{132,11,158},{4,11,140},{7,11,362},{8,11,209},{9,
-11,10},{9,11,160},{9,11,503},{10,11,689},{11,11,350},{11,11,553},{11,11,725},{12
-,11,252},{12,11,583},{13,11,192},{13,11,352},{14,11,269},{14,11,356},{148,11,50}
-,{6,11,597},{135,11,1318},{135,10,1454},{5,0,883},{5,0,975},{8,0,392},{148,0,7},
-{6,11,228},{7,11,1341},{9,11,408},{138,11,343},{11,11,348},{11,10,600},{12,11,99
-},{13,10,245},{18,11,1},{18,11,11},{147,11,4},{134,11,296},{5,0,922},{134,0,1707
-},{132,11,557},{4,11,548},{7,10,164},{7,10,1571},{9,10,107},{140,10,225},{7,11,
-197},{8,11,142},{8,11,325},{9,11,150},{9,11,596},{10,11,350},{10,11,353},{11,11,
-74},{11,11,315},{14,11,423},{143,11,141},{5,0,993},{7,0,515},{137,0,91},{4,0,131
-},{8,0,200},{5,10,484},{5,10,510},{6,10,434},{7,10,1000},{7,10,1098},{136,10,2},
-{152,0,10},{4,11,62},{5,11,83},{6,11,399},{6,11,579},{7,11,692},{7,11,846},{7,11
-,1015},{7,11,1799},{8,11,403},{9,11,394},{10,11,133},{12,11,4},{12,11,297},{12,
-11,452},{16,11,81},{18,11,19},{18,11,25},{21,11,14},{22,11,12},{151,11,18},{140,
-11,459},{132,11,177},{7,0,1433},{9,0,365},{137,11,365},{132,10,460},{5,0,103},{6
-,0,2004},{7,0,921},{8,0,580},{8,0,593},{8,0,630},{10,0,28},{5,11,411},{135,11,
-653},{4,10,932},{133,10,891},{4,0,911},{5,0,867},{5,0,1013},{7,0,2034},{8,0,798}
-,{136,0,813},{7,11,439},{10,11,727},{11,11,260},{139,11,684},{136,10,625},{5,11,
-208},{7,11,753},{135,11,1528},{5,0,461},{7,0,1925},{12,0,39},{13,0,265},{13,0,
-439},{134,10,76},{6,0,853},{8,10,92},{137,10,221},{5,0,135},{6,0,519},{7,0,1722}
-,{10,0,271},{11,0,261},{145,0,54},{139,11,814},{14,0,338},{148,0,81},{4,0,300},{
-133,0,436},{5,0,419},{5,0,687},{7,0,864},{9,0,470},{135,11,864},{9,0,836},{133,
-11,242},{134,0,1937},{4,10,763},{133,11,953},{132,10,622},{132,0,393},{133,10,
-253},{8,0,357},{10,0,745},{14,0,426},{17,0,94},{19,0,57},{135,10,546},{5,11,615}
-,{146,11,37},{9,10,73},{10,10,110},{14,10,185},{145,10,119},{11,0,703},{7,10,624
-},{7,10,916},{10,10,256},{139,10,87},{133,11,290},{5,10,212},{12,10,35},{141,10,
-382},{132,11,380},{5,11,52},{7,11,277},{9,11,368},{139,11,791},{133,0,387},{10,
-11,138},{139,11,476},{4,0,6},{5,0,708},{136,0,75},{7,0,1351},{9,0,581},{10,0,639
-},{11,0,453},{140,0,584},{132,0,303},{138,0,772},{135,10,1175},{4,0,749},{5,10,
-816},{6,11,256},{7,11,307},{7,11,999},{7,11,1481},{7,11,1732},{7,11,1738},{8,11,
-265},{9,11,414},{11,11,316},{12,11,52},{13,11,420},{147,11,100},{135,11,1296},{6
-,0,1065},{5,10,869},{5,10,968},{6,10,1626},{8,10,734},{136,10,784},{4,10,542},{6
-,10,1716},{6,10,1727},{7,10,1082},{7,10,1545},{8,10,56},{8,10,118},{8,10,412},{8
-,10,564},{9,10,888},{9,10,908},{10,10,50},{10,10,423},{11,10,685},{11,10,697},{
-11,10,933},{12,10,299},{13,10,126},{13,10,136},{13,10,170},{141,10,190},{134,0,
-226},{4,0,106},{7,0,310},{11,0,717},{133,11,723},{5,0,890},{5,0,988},{4,10,232},
-{9,10,202},{10,10,474},{140,10,433},{6,0,626},{142,0,431},{10,0,706},{150,0,44},
-{13,0,51},{6,10,108},{7,10,1003},{7,10,1181},{8,10,111},{136,10,343},{132,0,698}
-,{5,11,109},{6,11,1784},{7,11,1895},{12,11,296},{140,11,302},{134,0,828},{134,10
-,1712},{138,0,17},{7,0,1929},{4,10,133},{5,11,216},{7,10,711},{7,10,1298},{7,10,
-1585},{7,11,1879},{9,11,141},{9,11,270},{9,11,679},{10,11,159},{10,11,553},{11,
-11,197},{11,11,438},{12,11,538},{12,11,559},{13,11,193},{13,11,423},{14,11,144},
-{14,11,166},{14,11,167},{15,11,67},{147,11,84},{141,11,127},{7,11,1872},{137,11,
-81},{6,10,99},{7,10,1808},{145,10,57},{134,11,391},{5,0,689},{6,0,84},{7,0,1250}
-,{6,10,574},{7,10,428},{10,10,669},{11,10,485},{11,10,840},{12,10,300},{142,10,
-250},{7,11,322},{136,11,249},{7,11,432},{135,11,1649},{135,10,1871},{137,10,252}
-,{6,11,155},{140,11,234},{7,0,871},{19,0,27},{147,11,27},{140,0,498},{5,0,986},{
-6,0,130},{138,0,823},{6,0,1793},{7,0,1582},{8,0,458},{10,0,101},{10,0,318},{10,0
-,945},{12,0,734},{16,0,104},{18,0,177},{6,10,323},{135,10,1564},{5,11,632},{138,
-11,526},{10,0,435},{7,10,461},{136,10,775},{6,11,144},{7,11,948},{7,11,1042},{7,
-11,1857},{8,11,235},{8,11,461},{9,11,453},{9,11,530},{10,11,354},{17,11,77},{19,
-11,99},{148,11,79},{138,0,966},{7,0,1644},{137,0,129},{135,0,997},{136,0,502},{5
-,11,196},{6,11,486},{7,11,212},{8,11,309},{136,11,346},{7,10,727},{146,10,73},{
-132,0,823},{132,11,686},{135,0,1927},{4,0,762},{7,0,1756},{137,0,98},{136,10,577
-},{24,0,8},{4,11,30},{5,11,43},{152,11,8},{7,0,1046},{139,0,160},{7,0,492},{4,10
-,413},{5,10,677},{7,11,492},{8,10,432},{140,10,280},{6,0,45},{7,0,433},{8,0,129}
-,{9,0,21},{10,0,392},{11,0,79},{12,0,499},{13,0,199},{141,0,451},{7,0,558},{136,
-0,353},{4,11,220},{7,11,1535},{9,11,93},{139,11,474},{7,10,646},{7,10,1730},{11,
-10,446},{141,10,178},{133,0,785},{134,0,1145},{8,0,81},{9,0,189},{9,0,201},{11,0
-,478},{11,0,712},{141,0,338},{5,0,353},{151,0,26},{11,0,762},{132,10,395},{134,0
-,2024},{4,0,611},{133,0,606},{9,10,174},{10,10,164},{11,10,440},{11,10,841},{143
-,10,98},{134,10,426},{10,10,608},{139,10,1002},{138,10,250},{6,0,25},{7,0,855},{
-7,0,1258},{144,0,32},{7,11,1725},{138,11,393},{5,11,263},{134,11,414},{6,0,2011}
-,{133,10,476},{4,0,4},{7,0,1118},{7,0,1320},{7,0,1706},{8,0,277},{9,0,622},{10,0
-,9},{11,0,724},{12,0,350},{12,0,397},{13,0,28},{13,0,159},{15,0,89},{18,0,5},{19
-,0,9},{20,0,34},{22,0,47},{6,11,178},{6,11,1750},{8,11,251},{9,11,690},{10,11,
-155},{10,11,196},{10,11,373},{11,11,698},{13,11,155},{148,11,93},{5,11,97},{137,
-11,393},{7,0,764},{11,0,461},{12,0,172},{5,10,76},{6,10,458},{6,10,497},{7,10,
-868},{9,10,658},{10,10,594},{11,10,566},{12,10,338},{141,10,200},{134,0,1449},{
-138,11,40},{134,11,1639},{134,0,1445},{6,0,1168},{4,10,526},{7,10,1029},{135,10,
-1054},{4,11,191},{7,11,934},{8,11,647},{145,11,97},{132,10,636},{6,0,233},{7,10,
-660},{7,10,1124},{17,10,31},{19,10,22},{151,10,14},{6,10,1699},{136,11,110},{12,
-11,246},{15,11,162},{19,11,64},{20,11,8},{20,11,95},{22,11,24},{152,11,17},{5,11
-,165},{9,11,346},{138,11,655},{5,11,319},{135,11,534},{134,0,255},{9,0,216},{8,
-11,128},{139,11,179},{9,0,183},{139,0,286},{11,0,956},{151,0,3},{4,0,536},{7,0,
-1141},{10,0,723},{139,0,371},{4,10,279},{7,10,301},{137,10,362},{7,0,285},{5,11,
-57},{6,11,101},{6,11,1663},{7,11,132},{7,11,1048},{7,11,1154},{7,11,1415},{7,11,
-1507},{12,11,493},{15,11,105},{151,11,15},{5,11,459},{7,11,1073},{7,10,1743},{8,
-11,241},{136,11,334},{4,10,178},{133,10,399},{135,0,560},{132,0,690},{135,0,1246
-},{18,0,157},{147,0,63},{10,0,599},{11,0,33},{12,0,571},{149,0,1},{6,11,324},{6,
-11,520},{7,11,338},{7,11,1616},{7,11,1729},{8,11,228},{9,11,69},{139,11,750},{7,
-0,1862},{12,0,491},{12,0,520},{13,0,383},{142,0,244},{135,11,734},{134,10,1692},
-{10,0,448},{11,0,630},{17,0,117},{6,10,202},{7,11,705},{12,10,360},{17,10,118},{
-18,10,27},{148,10,67},{4,11,73},{6,11,612},{7,11,927},{7,11,1822},{8,11,217},{9,
-11,472},{9,11,765},{9,11,766},{10,11,408},{11,11,51},{11,11,793},{12,11,266},{15
-,11,158},{20,11,89},{150,11,32},{4,0,190},{133,0,554},{133,0,1001},{5,11,389},{8
-,11,636},{137,11,229},{5,0,446},{7,10,872},{10,10,516},{139,10,167},{137,10,313}
-,{132,10,224},{134,0,1313},{5,10,546},{7,10,35},{8,10,11},{8,10,12},{9,10,315},{
-9,10,533},{10,10,802},{11,10,166},{12,10,525},{142,10,243},{6,0,636},{137,0,837}
-,{5,10,241},{8,10,242},{9,10,451},{10,10,667},{11,10,598},{140,10,429},{22,10,46
-},{150,11,46},{136,11,472},{11,0,278},{142,0,73},{141,11,185},{132,0,868},{134,0
-,972},{4,10,366},{137,10,516},{138,0,1010},{5,11,189},{6,10,1736},{7,11,442},{7,
-11,443},{8,11,281},{12,11,174},{13,11,83},{141,11,261},{139,11,384},{6,11,2},{7,
-11,191},{7,11,446},{7,11,758},{7,11,1262},{7,11,1737},{8,11,22},{8,11,270},{8,11
-,612},{9,11,4},{9,11,167},{9,11,312},{9,11,436},{10,11,156},{10,11,216},{10,11,
-311},{10,11,623},{11,11,72},{11,11,330},{11,11,455},{12,11,101},{12,11,321},{12,
-11,504},{12,11,530},{12,11,543},{13,11,17},{13,11,156},{13,11,334},{14,11,48},{
-15,11,70},{17,11,60},{148,11,64},{6,10,331},{136,10,623},{135,0,1231},{132,0,304
-},{6,11,60},{7,11,670},{7,11,1327},{8,11,411},{8,11,435},{9,11,653},{9,11,740},{
-10,11,385},{11,11,222},{11,11,324},{11,11,829},{140,11,611},{7,0,506},{6,11,166}
-,{7,11,374},{135,11,1174},{14,11,43},{146,11,21},{135,11,1694},{135,10,1888},{5,
-11,206},{134,11,398},{135,11,50},{150,0,26},{6,0,53},{6,0,199},{7,0,1408},{8,0,
-32},{8,0,93},{10,0,397},{10,0,629},{11,0,593},{11,0,763},{13,0,326},{145,0,35},{
-134,0,105},{132,10,394},{4,0,843},{138,0,794},{11,0,704},{141,0,396},{5,0,114},{
-5,0,255},{141,0,285},{6,0,619},{7,0,898},{7,0,1092},{8,0,485},{18,0,28},{19,0,
-116},{135,10,1931},{9,0,145},{7,10,574},{135,10,1719},{7,0,2035},{8,0,19},{9,0,
-89},{138,0,831},{132,10,658},{6,11,517},{7,11,1159},{10,11,621},{139,11,192},{7,
-0,1933},{7,11,1933},{9,10,781},{10,10,144},{11,10,385},{13,10,161},{13,10,228},{
-13,10,268},{148,10,107},{136,10,374},{10,11,223},{139,11,645},{135,0,1728},{7,11
-,64},{7,11,289},{136,11,245},{4,10,344},{6,10,498},{139,10,323},{136,0,746},{135
-,10,1063},{137,10,155},{4,0,987},{6,0,1964},{6,0,1974},{6,0,1990},{136,0,995},{
-133,11,609},{133,10,906},{134,0,1550},{134,0,874},{5,11,129},{6,11,61},{135,11,
-947},{4,0,1018},{6,0,1938},{6,0,2021},{134,0,2039},{132,0,814},{11,0,126},{139,0
-,287},{134,0,1264},{5,0,955},{136,0,814},{141,11,506},{132,11,314},{6,0,981},{
-139,11,1000},{5,0,56},{8,0,892},{8,0,915},{140,0,776},{148,0,100},{10,0,4},{10,0
-,13},{11,0,638},{148,0,57},{148,11,74},{5,0,738},{132,10,616},{133,11,637},{136,
-10,692},{133,0,758},{132,10,305},{137,11,590},{5,11,280},{135,11,1226},{134,11,
-494},{135,0,1112},{133,11,281},{13,0,44},{14,0,214},{5,10,214},{7,10,603},{8,10,
-611},{9,10,686},{10,10,88},{11,10,459},{11,10,496},{12,10,463},{140,10,590},{139
-,0,328},{135,11,1064},{137,0,133},{7,0,168},{13,0,196},{141,0,237},{134,10,1703}
-,{134,0,1152},{135,0,1245},{5,0,110},{6,0,169},{6,0,1702},{7,0,400},{8,0,538},{9
-,0,184},{9,0,524},{140,0,218},{6,0,1816},{10,0,871},{12,0,769},{140,0,785},{132,
-11,630},{7,11,33},{7,11,120},{8,11,489},{9,11,319},{10,11,820},{11,11,1004},{12,
-11,379},{13,11,117},{13,11,412},{14,11,25},{15,11,52},{15,11,161},{16,11,47},{
-149,11,2},{6,0,133},{8,0,413},{9,0,353},{139,0,993},{145,10,19},{4,11,937},{133,
-11,801},{134,0,978},{6,0,93},{6,0,1508},{7,0,1422},{7,0,1851},{8,0,673},{9,0,529
-},{140,0,43},{6,0,317},{10,0,512},{4,10,737},{11,10,294},{12,10,60},{12,10,437},
-{13,10,64},{13,10,380},{142,10,430},{9,0,371},{7,11,1591},{144,11,43},{6,10,1758
-},{8,10,520},{9,10,345},{9,10,403},{142,10,350},{5,0,526},{10,10,242},{138,10,
-579},{9,0,25},{10,0,467},{138,0,559},{5,10,139},{7,10,1168},{138,10,539},{4,0,
-335},{135,0,942},{140,0,754},{132,11,365},{11,0,182},{142,0,195},{142,11,29},{5,
-11,7},{139,11,774},{4,11,746},{135,11,1090},{8,0,39},{10,0,773},{11,0,84},{12,0,
-205},{142,0,1},{5,0,601},{5,0,870},{5,11,360},{136,11,237},{132,0,181},{136,0,
-370},{134,0,1652},{8,0,358},{4,10,107},{7,10,613},{8,10,439},{8,10,504},{9,10,
-501},{10,10,383},{139,10,477},{132,10,229},{137,11,785},{4,0,97},{5,0,147},{6,0,
-286},{7,0,1362},{141,0,176},{6,0,537},{7,0,788},{7,0,1816},{132,10,903},{140,10,
-71},{6,0,743},{134,0,1223},{6,0,375},{7,0,169},{7,0,254},{8,0,780},{135,11,1493}
-,{7,0,1714},{4,10,47},{6,10,373},{7,10,452},{7,10,543},{7,10,1856},{9,10,6},{11,
-10,257},{139,10,391},{6,0,896},{136,0,1003},{135,0,1447},{137,11,341},{5,10,980}
-,{134,10,1754},{145,11,22},{4,11,277},{5,11,608},{6,11,493},{7,11,457},{140,11,
-384},{7,10,536},{7,10,1331},{136,10,143},{140,0,744},{7,11,27},{135,11,316},{18,
-0,126},{5,10,19},{134,10,533},{4,0,788},{11,0,41},{5,11,552},{5,11,586},{5,11,
-676},{6,11,448},{8,11,244},{11,11,1},{11,11,41},{13,11,3},{16,11,54},{17,11,4},{
-146,11,13},{4,0,985},{6,0,1801},{4,11,401},{137,11,264},{5,10,395},{5,10,951},{
-134,10,1776},{5,0,629},{135,0,1549},{11,10,663},{12,10,210},{13,10,166},{13,10,
-310},{14,10,373},{147,10,43},{9,11,543},{10,11,524},{11,11,30},{12,11,524},{14,
-11,315},{16,11,18},{20,11,26},{148,11,65},{4,11,205},{5,11,623},{7,11,104},{136,
-11,519},{5,0,293},{134,0,601},{7,11,579},{9,11,41},{9,11,244},{9,11,669},{10,11,
-5},{11,11,861},{11,11,951},{139,11,980},{132,11,717},{132,10,695},{7,10,497},{9,
-10,387},{147,10,81},{132,0,420},{142,0,37},{6,0,1134},{6,0,1900},{12,0,830},{12,
-0,878},{12,0,894},{15,0,221},{143,0,245},{132,11,489},{7,0,1570},{140,0,542},{8,
-0,933},{136,0,957},{6,0,1371},{7,0,31},{8,0,373},{5,10,284},{6,10,49},{6,10,350}
-,{7,10,377},{7,10,1693},{8,10,678},{9,10,161},{9,10,585},{9,10,671},{9,10,839},{
-11,10,912},{141,10,427},{135,11,892},{4,0,325},{138,0,125},{139,11,47},{132,10,
-597},{138,0,323},{6,0,1547},{7,11,1605},{9,11,473},{11,11,962},{146,11,139},{139
-,10,908},{7,11,819},{9,11,26},{9,11,392},{10,11,152},{10,11,226},{11,11,19},{12,
-11,276},{12,11,426},{12,11,589},{13,11,460},{15,11,97},{19,11,48},{148,11,104},{
-135,11,51},{4,0,718},{135,0,1216},{6,0,1896},{6,0,1905},{6,0,1912},{9,0,947},{9,
-0,974},{12,0,809},{12,0,850},{12,0,858},{12,0,874},{12,0,887},{12,0,904},{12,0,
-929},{12,0,948},{12,0,952},{15,0,198},{15,0,206},{15,0,220},{15,0,227},{15,0,247
-},{18,0,188},{21,0,48},{21,0,50},{24,0,25},{24,0,29},{7,11,761},{7,11,1051},{137
-,11,545},{5,0,124},{5,0,144},{6,0,548},{7,0,15},{7,0,153},{137,0,629},{135,11,
-606},{135,10,2014},{7,10,2007},{9,11,46},{9,10,101},{9,10,450},{10,10,66},{10,10
-,842},{11,10,536},{140,10,587},{6,0,75},{7,0,1531},{8,0,416},{9,0,240},{9,0,275}
-,{10,0,100},{11,0,658},{11,0,979},{12,0,86},{14,0,207},{15,0,20},{143,0,25},{5,0
-,141},{5,0,915},{6,0,1783},{7,0,211},{7,0,698},{7,0,1353},{9,0,83},{9,0,281},{10
-,0,376},{10,0,431},{11,0,543},{12,0,664},{13,0,280},{13,0,428},{14,0,61},{14,0,
-128},{17,0,52},{145,0,81},{132,11,674},{135,0,533},{149,0,6},{132,11,770},{133,0
-,538},{5,11,79},{7,11,1027},{7,11,1477},{139,11,52},{139,10,62},{4,0,338},{133,0
-,400},{5,11,789},{134,11,195},{4,11,251},{4,11,688},{7,11,513},{7,11,1284},{9,11
-,87},{138,11,365},{134,10,1766},{6,0,0},{7,0,84},{11,0,895},{145,0,11},{139,0,
-892},{4,0,221},{5,0,659},{7,0,697},{7,0,1211},{138,0,284},{133,0,989},{133,11,
-889},{4,11,160},{5,11,330},{7,11,1434},{136,11,174},{6,10,1665},{7,10,256},{7,10
-,1388},{10,10,499},{139,10,670},{7,0,848},{4,10,22},{5,10,10},{136,10,97},{138,0
-,507},{133,10,481},{4,0,188},{135,0,805},{5,0,884},{6,0,732},{139,0,991},{135,11
-,968},{11,11,636},{15,11,145},{17,11,34},{19,11,50},{151,11,20},{7,0,959},{16,0,
-60},{6,10,134},{7,10,437},{9,10,37},{14,10,285},{142,10,371},{7,10,486},{8,10,
-155},{11,10,93},{140,10,164},{134,0,1653},{7,0,337},{133,10,591},{6,0,1989},{8,0
-,922},{8,0,978},{133,11,374},{132,0,638},{138,0,500},{133,11,731},{5,10,380},{5,
-10,650},{136,10,310},{138,11,381},{4,10,364},{7,10,1156},{7,10,1187},{137,10,409
-},{137,11,224},{140,0,166},{134,10,482},{4,11,626},{5,11,642},{6,11,425},{10,11,
-202},{139,11,141},{4,10,781},{6,10,487},{7,10,926},{8,10,263},{139,10,500},{135,
-0,418},{4,10,94},{135,10,1265},{136,0,760},{132,10,417},{136,11,835},{5,10,348},
-{134,10,522},{6,0,1277},{134,0,1538},{139,11,541},{135,11,1597},{5,11,384},{8,11
-,455},{140,11,48},{136,0,770},{5,11,264},{134,11,184},{4,0,89},{5,0,489},{6,0,
-315},{7,0,553},{7,0,1745},{138,0,243},{4,10,408},{4,10,741},{135,10,500},{134,0,
-1396},{133,0,560},{6,0,1658},{9,0,3},{10,0,154},{11,0,641},{13,0,85},{13,0,201},
-{141,0,346},{135,11,1595},{5,11,633},{6,11,28},{7,11,219},{135,11,1323},{9,11,
-769},{140,11,185},{135,11,785},{7,11,359},{8,11,243},{140,11,175},{138,0,586},{7
-,0,1271},{134,10,73},{132,11,105},{4,0,166},{5,0,505},{134,0,1670},{133,10,576},
-{4,11,324},{138,11,104},{142,10,231},{6,0,637},{7,10,1264},{7,10,1678},{11,10,
-945},{12,10,341},{12,10,471},{12,10,569},{23,11,21},{151,11,23},{8,11,559},{141,
-11,109},{134,0,1947},{7,0,445},{8,0,307},{8,0,704},{10,0,41},{10,0,439},{11,0,
-237},{11,0,622},{140,0,201},{135,11,963},{135,0,1977},{4,0,189},{5,0,713},{136,0
-,57},{138,0,371},{135,10,538},{132,0,552},{6,0,883},{133,10,413},{6,0,923},{132,
-11,758},{138,11,215},{136,10,495},{7,10,54},{8,10,312},{10,10,191},{10,10,614},{
-140,10,567},{7,11,351},{139,11,128},{7,0,875},{6,10,468},{7,10,1478},{8,10,530},
-{142,10,290},{135,0,1788},{17,0,49},{133,11,918},{12,11,398},{20,11,39},{21,11,
-11},{150,11,41},{10,0,661},{6,10,484},{135,10,822},{135,0,1945},{134,0,794},{137
-,10,900},{135,10,1335},{6,10,1724},{135,10,2022},{132,11,340},{134,0,1135},{4,0,
-784},{133,0,745},{5,0,84},{134,0,163},{133,0,410},{4,0,976},{5,11,985},{7,11,509
-},{7,11,529},{145,11,96},{132,10,474},{134,0,703},{135,11,1919},{5,0,322},{8,0,
-186},{9,0,262},{10,0,187},{142,0,208},{135,10,1504},{133,0,227},{9,0,560},{13,0,
-208},{133,10,305},{132,11,247},{7,0,1395},{8,0,486},{9,0,236},{9,0,878},{10,0,
-218},{11,0,95},{19,0,17},{147,0,31},{7,0,2043},{8,0,672},{141,0,448},{4,11,184},
-{5,11,390},{6,11,337},{7,11,23},{7,11,494},{7,11,618},{7,11,1456},{8,11,27},{8,
-11,599},{10,11,153},{139,11,710},{135,0,466},{135,10,1236},{6,0,167},{7,0,186},{
-7,0,656},{10,0,643},{4,10,480},{6,10,302},{6,10,1642},{7,10,837},{7,10,1547},{7,
-10,1657},{8,10,429},{9,10,228},{13,10,289},{13,10,343},{147,10,101},{134,0,1428}
-,{134,0,1440},{5,0,412},{7,10,278},{10,10,739},{11,10,708},{141,10,348},{134,0,
-1118},{136,0,562},{148,11,46},{9,0,316},{139,0,256},{134,0,1771},{135,0,1190},{
-137,0,132},{10,11,227},{11,11,497},{11,11,709},{140,11,415},{143,0,66},{6,11,360
-},{7,11,1664},{136,11,478},{144,10,28},{4,0,317},{135,0,1279},{5,0,63},{133,0,
-509},{136,11,699},{145,10,36},{134,0,1475},{11,11,343},{142,11,127},{132,11,739}
-,{132,0,288},{135,11,1757},{8,0,89},{8,0,620},{9,0,608},{11,0,628},{12,0,322},{
-143,0,124},{134,0,1225},{7,0,1189},{4,11,67},{5,11,422},{6,10,363},{7,11,1037},{
-7,11,1289},{7,11,1555},{7,10,1955},{8,10,725},{9,11,741},{145,11,108},{134,0,
-1468},{6,0,689},{134,0,1451},{138,0,120},{151,0,1},{137,10,805},{142,0,329},{5,
-10,813},{135,10,2046},{135,0,226},{138,11,96},{7,0,1855},{5,10,712},{11,10,17},{
-13,10,321},{144,10,67},{9,0,461},{6,10,320},{7,10,781},{7,10,1921},{9,10,55},{10
-,10,186},{10,10,273},{10,10,664},{10,10,801},{11,10,996},{11,10,997},{13,10,157}
-,{142,10,170},{8,11,203},{8,10,271},{11,11,823},{11,11,846},{12,11,482},{13,11,
-133},{13,11,277},{13,11,302},{13,11,464},{14,11,205},{142,11,221},{135,0,1346},{
-4,11,449},{133,11,718},{134,0,85},{14,0,299},{7,10,103},{7,10,863},{11,10,184},{
-145,10,62},{4,11,355},{6,11,311},{9,11,256},{138,11,404},{137,10,659},{138,11,
-758},{133,11,827},{5,11,64},{140,11,581},{134,0,1171},{4,11,442},{7,11,1047},{7,
-11,1352},{135,11,1643},{132,0,980},{5,11,977},{6,11,288},{7,11,528},{135,11,1065
-},{5,0,279},{6,0,235},{7,0,468},{8,0,446},{9,0,637},{10,0,717},{11,0,738},{140,0
-,514},{132,0,293},{11,10,337},{142,10,303},{136,11,285},{5,0,17},{6,0,371},{9,0,
-528},{12,0,364},{132,11,254},{5,10,77},{7,10,1455},{10,10,843},{147,10,73},{150,
-0,5},{132,10,458},{6,11,12},{7,11,1219},{145,11,73},{135,10,1420},{6,10,109},{
-138,10,382},{135,11,125},{6,10,330},{7,10,1084},{139,10,142},{6,11,369},{6,11,
-502},{7,11,1036},{8,11,348},{9,11,452},{10,11,26},{11,11,224},{11,11,387},{11,11
-,772},{12,11,95},{12,11,629},{13,11,195},{13,11,207},{13,11,241},{14,11,260},{14
-,11,270},{143,11,140},{132,11,269},{5,11,480},{7,11,532},{7,11,1197},{7,11,1358}
-,{8,11,291},{11,11,349},{142,11,396},{150,0,48},{10,0,601},{13,0,353},{141,0,376
-},{5,0,779},{5,0,807},{6,0,1655},{134,0,1676},{142,11,223},{4,0,196},{5,0,558},{
-133,0,949},{148,11,15},{135,11,1764},{134,0,1322},{132,0,752},{139,0,737},{135,
-11,657},{136,11,533},{135,0,412},{4,0,227},{5,0,159},{5,0,409},{7,0,80},{8,0,556
-},{10,0,479},{12,0,418},{14,0,50},{14,0,123},{14,0,192},{14,0,249},{14,0,295},{
-143,0,27},{7,0,1470},{8,0,66},{8,0,137},{8,0,761},{9,0,638},{11,0,80},{11,0,212}
-,{11,0,368},{11,0,418},{12,0,8},{13,0,15},{16,0,61},{17,0,59},{19,0,28},{148,0,
-84},{135,10,1985},{4,11,211},{4,11,332},{5,11,335},{6,11,238},{7,11,269},{7,11,
-811},{7,11,1797},{8,10,122},{8,11,836},{9,11,507},{141,11,242},{6,0,683},{134,0,
-1252},{4,0,873},{132,10,234},{134,0,835},{6,0,38},{7,0,1220},{8,0,185},{8,0,256}
-,{9,0,22},{9,0,331},{10,0,738},{11,0,205},{11,0,540},{11,0,746},{13,0,465},{14,0
-,88},{142,0,194},{138,0,986},{5,11,1009},{12,11,582},{146,11,131},{4,0,159},{6,0
-,115},{7,0,252},{7,0,257},{7,0,1928},{8,0,69},{9,0,384},{10,0,91},{10,0,615},{12
-,0,375},{14,0,235},{18,0,117},{147,0,123},{133,0,911},{136,0,278},{5,10,430},{5,
-10,932},{6,10,131},{7,10,417},{9,10,522},{11,10,314},{141,10,390},{14,10,149},{
-14,10,399},{143,10,57},{4,0,151},{7,0,1567},{136,0,749},{5,11,228},{6,11,203},{7
-,11,156},{8,11,347},{137,11,265},{132,10,507},{10,0,989},{140,0,956},{133,0,990}
-,{5,0,194},{6,0,927},{7,0,1662},{9,0,90},{140,0,564},{4,10,343},{133,10,511},{
-133,0,425},{7,10,455},{138,10,591},{4,0,774},{7,11,476},{7,11,1592},{138,11,87},
-{5,0,971},{135,10,1381},{5,11,318},{147,11,121},{5,11,291},{7,11,765},{9,11,389}
-,{140,11,548},{134,10,575},{4,0,827},{12,0,646},{12,0,705},{12,0,712},{140,0,714
-},{139,0,752},{137,0,662},{5,0,72},{6,0,264},{7,0,21},{7,0,46},{7,0,2013},{8,0,
-215},{8,0,513},{10,0,266},{139,0,22},{139,11,522},{6,0,239},{7,0,118},{10,0,95},
-{11,0,603},{13,0,443},{14,0,160},{143,0,4},{6,0,431},{134,0,669},{7,10,1127},{7,
-10,1572},{10,10,297},{10,10,422},{11,10,764},{11,10,810},{12,10,264},{13,10,102}
-,{13,10,300},{13,10,484},{14,10,147},{14,10,229},{17,10,71},{18,10,118},{147,10,
-120},{5,0,874},{6,0,1677},{15,0,0},{10,11,525},{139,11,82},{6,0,65},{7,0,939},{7
-,0,1172},{7,0,1671},{9,0,540},{10,0,696},{11,0,265},{11,0,732},{11,0,928},{11,0,
-937},{141,0,438},{134,0,1350},{136,11,547},{132,11,422},{5,11,355},{145,11,0},{
-137,11,905},{5,0,682},{135,0,1887},{132,0,809},{4,0,696},{133,11,865},{6,0,1074}
-,{6,0,1472},{14,10,35},{142,10,191},{5,11,914},{134,11,1625},{133,11,234},{135,
-11,1383},{137,11,780},{132,10,125},{4,0,726},{133,0,630},{8,0,802},{136,0,838},{
-132,10,721},{6,0,1337},{7,0,776},{19,0,56},{136,10,145},{132,0,970},{7,10,792},{
-8,10,147},{10,10,821},{139,10,1021},{139,10,970},{8,0,940},{137,0,797},{135,11,
-1312},{9,0,248},{10,0,400},{7,11,816},{7,11,1241},{7,10,1999},{9,11,283},{9,11,
-520},{10,11,213},{10,11,307},{10,11,463},{10,11,671},{10,11,746},{11,11,401},{11
-,11,794},{12,11,517},{18,11,107},{147,11,115},{6,0,1951},{134,0,2040},{135,11,
-339},{13,0,41},{15,0,93},{5,10,168},{5,10,930},{8,10,74},{9,10,623},{12,10,500},
-{140,10,579},{6,0,118},{7,0,215},{7,0,1521},{140,0,11},{6,10,220},{7,10,1101},{
-141,10,105},{6,11,421},{7,11,61},{7,11,1540},{10,11,11},{138,11,501},{7,0,615},{
-138,0,251},{140,11,631},{135,0,1044},{6,10,19},{7,10,1413},{139,10,428},{133,0,
-225},{7,10,96},{8,10,401},{8,10,703},{137,10,896},{145,10,116},{6,11,102},{7,11,
-72},{15,11,142},{147,11,67},{7,10,1961},{7,10,1965},{8,10,702},{136,10,750},{7,
-10,2030},{8,10,150},{8,10,737},{12,10,366},{151,11,30},{4,0,370},{5,0,756},{7,0,
-1326},{135,11,823},{8,10,800},{9,10,148},{9,10,872},{9,10,890},{11,10,309},{11,
-10,1001},{13,10,267},{141,10,323},{6,0,1662},{7,0,48},{8,0,771},{10,0,116},{13,0
-,104},{14,0,105},{14,0,184},{15,0,168},{19,0,92},{148,0,68},{10,0,209},{135,11,
-1870},{7,11,68},{8,11,48},{8,11,88},{8,11,582},{8,11,681},{9,11,373},{9,11,864},
-{11,11,157},{11,11,336},{11,11,843},{148,11,27},{134,0,930},{4,11,88},{5,11,137}
-,{5,11,174},{5,11,777},{6,11,1664},{6,11,1725},{7,11,77},{7,11,426},{7,11,1317},
-{7,11,1355},{8,11,126},{8,11,563},{9,11,523},{9,11,750},{10,11,310},{10,11,836},
-{11,11,42},{11,11,318},{11,11,731},{12,11,68},{12,11,92},{12,11,507},{12,11,692}
-,{13,11,81},{13,11,238},{13,11,374},{18,11,138},{19,11,78},{19,11,111},{20,11,55
-},{20,11,77},{148,11,92},{4,11,938},{135,11,1831},{5,10,547},{7,10,424},{8,11,
-617},{138,11,351},{6,0,1286},{6,11,1668},{7,11,1499},{8,11,117},{9,11,314},{138,
-11,174},{6,0,759},{6,0,894},{7,11,707},{139,11,563},{4,0,120},{135,0,1894},{9,0,
-385},{149,0,17},{138,0,429},{133,11,403},{5,0,820},{135,0,931},{10,0,199},{133,
-10,133},{6,0,151},{6,0,1675},{7,0,383},{151,0,10},{6,0,761},{136,10,187},{8,0,
-365},{10,10,0},{10,10,818},{139,10,988},{4,11,44},{5,11,311},{6,11,156},{7,11,
-639},{7,11,762},{7,11,1827},{9,11,8},{9,11,462},{148,11,83},{4,11,346},{7,11,115
-},{9,11,180},{9,11,456},{138,11,363},{136,10,685},{7,0,1086},{145,0,46},{6,0,
-1624},{11,0,11},{12,0,422},{13,0,444},{142,0,360},{6,0,1020},{6,0,1260},{134,0,
-1589},{4,0,43},{5,0,344},{5,0,357},{14,0,472},{150,0,58},{6,0,1864},{6,0,1866},{
-6,0,1868},{6,0,1869},{6,0,1874},{6,0,1877},{6,0,1903},{6,0,1911},{9,0,920},{9,0,
-921},{9,0,924},{9,0,946},{9,0,959},{9,0,963},{9,0,970},{9,0,997},{9,0,1008},{9,0
-,1017},{12,0,795},{12,0,797},{12,0,798},{12,0,800},{12,0,803},{12,0,811},{12,0,
-820},{12,0,821},{12,0,839},{12,0,841},{12,0,848},{12,0,911},{12,0,921},{12,0,922
-},{12,0,925},{12,0,937},{12,0,944},{12,0,945},{12,0,953},{15,0,184},{15,0,191},{
-15,0,199},{15,0,237},{15,0,240},{15,0,243},{15,0,246},{18,0,203},{21,0,40},{21,0
-,52},{21,0,57},{24,0,23},{24,0,28},{152,0,30},{134,0,725},{145,11,58},{133,0,888
-},{137,10,874},{4,0,711},{8,10,774},{10,10,670},{140,10,51},{144,11,40},{6,11,
-185},{7,11,1899},{139,11,673},{137,10,701},{137,0,440},{4,11,327},{5,11,478},{7,
-11,1332},{8,11,753},{140,11,227},{4,10,127},{5,10,350},{6,10,356},{8,10,426},{9,
-10,572},{10,10,247},{139,10,312},{5,11,1020},{133,11,1022},{4,11,103},{133,11,
-401},{6,0,1913},{6,0,1926},{6,0,1959},{9,0,914},{9,0,939},{9,0,952},{9,0,979},{9
-,0,990},{9,0,998},{9,0,1003},{9,0,1023},{12,0,827},{12,0,834},{12,0,845},{12,0,
-912},{12,0,935},{12,0,951},{15,0,172},{15,0,174},{18,0,198},{149,0,63},{5,0,958}
-,{5,0,987},{4,11,499},{135,11,1421},{7,0,885},{6,10,59},{6,10,1762},{9,10,603},{
-141,10,397},{10,11,62},{141,11,164},{4,0,847},{135,0,326},{11,0,276},{142,0,293}
-,{4,0,65},{5,0,479},{5,0,1004},{7,0,1913},{8,0,317},{9,0,302},{10,0,612},{13,0,
-22},{132,11,96},{4,0,261},{135,0,510},{135,0,1514},{6,10,111},{7,10,4},{8,10,163
-},{8,10,776},{138,10,566},{4,0,291},{9,0,515},{12,0,152},{12,0,443},{13,0,392},{
-142,0,357},{7,11,399},{135,11,1492},{4,0,589},{139,0,282},{6,11,563},{135,10,
-1994},{5,10,297},{135,10,1038},{4,0,130},{7,0,843},{135,0,1562},{5,0,42},{5,0,
-879},{7,0,245},{7,0,324},{7,0,1532},{11,0,463},{11,0,472},{13,0,363},{144,0,52},
-{4,0,134},{133,0,372},{133,0,680},{136,10,363},{6,0,1997},{8,0,935},{136,0,977},
-{4,0,810},{135,0,1634},{135,10,1675},{7,0,1390},{4,11,910},{133,11,832},{7,10,
-808},{8,11,266},{139,11,578},{132,0,644},{4,0,982},{138,0,867},{132,10,280},{135
-,0,540},{140,10,54},{135,0,123},{134,0,1978},{4,10,421},{133,10,548},{6,0,623},{
-136,0,789},{4,0,908},{5,0,359},{5,0,508},{6,0,1723},{7,0,343},{7,0,1996},{135,0,
-2026},{134,0,1220},{4,0,341},{135,0,480},{6,10,254},{9,10,109},{138,10,103},{134
-,0,888},{8,11,528},{137,11,348},{7,0,1995},{8,0,299},{11,0,890},{12,0,674},{4,11
-,20},{133,11,616},{135,11,1094},{134,10,1630},{4,0,238},{5,0,503},{6,0,179},{7,0
-,2003},{8,0,381},{8,0,473},{9,0,149},{10,0,788},{15,0,45},{15,0,86},{20,0,110},{
-150,0,57},{133,10,671},{4,11,26},{5,11,429},{6,11,245},{7,11,704},{7,11,1379},{
-135,11,1474},{4,0,121},{5,0,156},{5,0,349},{9,0,431},{10,0,605},{142,0,342},{7,
-11,943},{139,11,614},{132,10,889},{132,11,621},{7,10,1382},{7,11,1382},{135,10,
-1910},{132,10,627},{133,10,775},{133,11,542},{133,11,868},{136,11,433},{6,0,1373
-},{7,0,1011},{11,10,362},{11,10,948},{140,10,388},{6,0,80},{7,0,173},{9,0,547},{
-10,0,730},{14,0,18},{22,0,39},{135,11,1495},{6,0,1694},{135,0,1974},{140,0,196},
-{4,0,923},{6,0,507},{6,0,1711},{7,10,451},{8,10,389},{12,10,490},{13,10,16},{13,
-10,215},{13,10,351},{18,10,132},{147,10,125},{6,0,646},{134,0,1047},{135,10,841}
-,{136,10,566},{6,0,1611},{135,0,1214},{139,0,926},{132,11,525},{132,0,595},{5,0,
-240},{6,0,459},{7,0,12},{7,0,114},{7,0,949},{7,0,1753},{7,0,1805},{8,0,658},{9,0
-,1},{11,0,959},{141,0,446},{5,10,912},{134,10,1695},{132,0,446},{7,11,62},{12,11
-,45},{147,11,112},{5,10,236},{6,10,572},{8,10,492},{11,10,618},{144,10,56},{5,10
-,190},{136,10,318},{135,10,1376},{4,11,223},{6,11,359},{11,11,3},{13,11,108},{14
-,11,89},{144,11,22},{132,11,647},{134,0,490},{134,0,491},{134,0,1584},{135,11,
-685},{138,11,220},{7,0,250},{136,0,507},{132,0,158},{4,0,140},{7,0,362},{8,0,209
-},{9,0,10},{9,0,160},{9,0,503},{9,0,614},{10,0,689},{11,0,327},{11,0,553},{11,0,
-725},{11,0,767},{12,0,252},{12,0,583},{13,0,192},{14,0,269},{14,0,356},{148,0,50
-},{19,0,1},{19,0,26},{150,0,9},{132,11,109},{6,0,228},{7,0,1341},{9,0,408},{138,
-0,343},{4,0,373},{5,0,283},{6,0,480},{7,0,609},{10,0,860},{138,0,878},{6,0,779},
-{134,0,1209},{4,0,557},{7,11,263},{7,11,628},{136,11,349},{132,0,548},{7,0,197},
-{8,0,142},{8,0,325},{9,0,150},{9,0,596},{10,0,350},{10,0,353},{11,0,74},{11,0,
-315},{12,0,662},{12,0,681},{14,0,423},{143,0,141},{4,11,40},{10,11,67},{11,11,
-117},{11,11,768},{139,11,935},{7,11,992},{8,11,301},{9,11,722},{12,11,63},{13,11
-,29},{14,11,161},{143,11,18},{6,0,1490},{138,11,532},{5,0,580},{7,0,378},{7,0,
-674},{7,0,1424},{15,0,83},{16,0,11},{15,11,83},{144,11,11},{6,0,1057},{6,0,1335}
-,{10,0,316},{7,10,85},{7,10,247},{8,10,585},{138,10,163},{4,0,169},{5,0,83},{6,0
-,399},{6,0,579},{6,0,1513},{7,0,692},{7,0,846},{7,0,1015},{7,0,1799},{8,0,403},{
-9,0,394},{10,0,133},{12,0,4},{12,0,297},{12,0,452},{16,0,81},{18,0,25},{21,0,14}
-,{22,0,12},{151,0,18},{134,0,1106},{7,0,1546},{11,0,299},{142,0,407},{134,0,1192
-},{132,0,177},{5,0,411},{135,0,653},{7,0,439},{10,0,727},{11,0,260},{139,0,684},
-{138,10,145},{147,10,83},{5,0,208},{7,0,753},{135,0,1528},{137,11,617},{135,10,
-1922},{135,11,825},{11,0,422},{13,0,389},{4,10,124},{10,10,457},{11,10,121},{11,
-10,169},{11,10,870},{12,10,214},{14,10,187},{143,10,77},{11,0,615},{15,0,58},{11
-,11,615},{143,11,58},{9,0,618},{138,0,482},{6,0,1952},{6,0,1970},{142,0,505},{7,
-10,1193},{135,11,1838},{133,0,242},{135,10,1333},{6,10,107},{7,10,638},{7,10,
-1632},{137,10,396},{133,0,953},{5,10,370},{134,10,1756},{5,11,28},{6,11,204},{10
-,11,320},{10,11,583},{13,11,502},{14,11,72},{14,11,274},{14,11,312},{14,11,344},
-{15,11,159},{16,11,62},{16,11,69},{17,11,30},{18,11,42},{18,11,53},{18,11,84},{
-18,11,140},{19,11,68},{19,11,85},{20,11,5},{20,11,45},{20,11,101},{22,11,7},{150
-,11,20},{4,11,558},{6,11,390},{7,11,162},{7,11,689},{9,11,360},{138,11,653},{11,
-0,802},{141,0,67},{133,10,204},{133,0,290},{5,10,970},{134,10,1706},{132,0,380},
-{5,0,52},{7,0,277},{9,0,368},{139,0,791},{5,11,856},{6,11,1672},{6,11,1757},{6,
-11,1781},{7,11,1150},{7,11,1425},{7,11,1453},{140,11,513},{5,11,92},{7,10,3},{10
-,11,736},{140,11,102},{4,0,112},{5,0,653},{5,10,483},{5,10,685},{6,10,489},{7,10
-,1204},{136,10,394},{132,10,921},{6,0,1028},{133,10,1007},{5,11,590},{9,11,213},
-{145,11,91},{135,10,1696},{10,0,138},{139,0,476},{5,0,725},{5,0,727},{135,0,1811
-},{4,0,979},{6,0,1821},{6,0,1838},{8,0,876},{8,0,883},{8,0,889},{8,0,893},{8,0,
-895},{10,0,934},{12,0,720},{14,0,459},{148,0,123},{135,11,551},{4,0,38},{6,0,435
-},{7,0,307},{7,0,999},{7,0,1481},{7,0,1732},{7,0,1738},{8,0,371},{9,0,414},{11,0
-,316},{12,0,52},{13,0,420},{147,0,100},{135,0,1296},{132,10,712},{134,10,1629},{
-133,0,723},{134,0,651},{136,11,191},{9,11,791},{10,11,93},{11,11,301},{16,11,13}
-,{17,11,23},{18,11,135},{19,11,12},{20,11,1},{20,11,12},{148,11,14},{136,11,503}
-,{6,11,466},{135,11,671},{6,0,1200},{134,0,1330},{135,0,1255},{134,0,986},{5,0,
-109},{6,0,1784},{7,0,1895},{12,0,296},{140,0,302},{135,11,983},{133,10,485},{134
-,0,660},{134,0,800},{5,0,216},{5,0,294},{6,0,591},{7,0,1879},{9,0,141},{9,0,270}
-,{9,0,679},{10,0,159},{11,0,197},{11,0,438},{12,0,538},{12,0,559},{14,0,144},{14
-,0,167},{15,0,67},{4,10,285},{5,10,317},{6,10,301},{7,10,7},{8,10,153},{10,10,
-766},{11,10,468},{12,10,467},{141,10,143},{136,0,945},{134,0,1090},{137,0,81},{
-12,11,468},{19,11,96},{148,11,24},{134,0,391},{138,11,241},{7,0,322},{136,0,249}
-,{134,0,1412},{135,11,795},{5,0,632},{138,0,526},{136,10,819},{6,0,144},{7,0,948
-},{7,0,1042},{8,0,235},{8,0,461},{9,0,453},{9,0,796},{10,0,354},{17,0,77},{135,
-11,954},{139,10,917},{6,0,940},{134,0,1228},{4,0,362},{7,0,52},{135,0,303},{6,11
-,549},{8,11,34},{8,11,283},{9,11,165},{138,11,475},{7,11,370},{7,11,1007},{7,11,
-1177},{135,11,1565},{5,11,652},{5,11,701},{135,11,449},{5,0,196},{6,0,486},{7,0,
-212},{8,0,309},{136,0,346},{6,10,1719},{6,10,1735},{7,10,2016},{7,10,2020},{8,10
-,837},{137,10,852},{6,11,159},{6,11,364},{7,11,516},{7,11,1439},{137,11,518},{
-135,0,1912},{135,0,1290},{132,0,686},{141,11,151},{138,0,625},{136,0,706},{138,
-10,568},{139,0,412},{4,0,30},{133,0,43},{8,10,67},{138,10,419},{7,0,967},{141,0,
-11},{12,0,758},{14,0,441},{142,0,462},{10,10,657},{14,10,297},{142,10,361},{139,
-10,729},{4,0,220},{135,0,1535},{7,11,501},{9,11,111},{10,11,141},{11,11,332},{13
-,11,43},{13,11,429},{14,11,130},{14,11,415},{145,11,102},{4,0,950},{6,0,1859},{7
-,0,11},{8,0,873},{12,0,710},{12,0,718},{12,0,748},{12,0,765},{148,0,124},{5,11,
-149},{5,11,935},{136,11,233},{142,11,291},{134,0,1579},{7,0,890},{8,10,51},{9,10
-,868},{10,10,833},{12,10,481},{12,10,570},{148,10,106},{141,0,2},{132,10,445},{
-136,11,801},{135,0,1774},{7,0,1725},{138,0,393},{5,0,263},{134,0,414},{132,11,
-322},{133,10,239},{7,0,456},{7,10,1990},{8,10,130},{139,10,720},{137,0,818},{5,
-10,123},{6,10,530},{7,10,348},{135,10,1419},{135,10,2024},{6,0,178},{6,0,1750},{
-8,0,251},{9,0,690},{10,0,155},{10,0,196},{10,0,373},{11,0,698},{13,0,155},{148,0
-,93},{5,0,97},{137,0,393},{134,0,674},{11,0,223},{140,0,168},{132,10,210},{139,
-11,464},{6,0,1639},{146,0,159},{139,11,2},{7,0,934},{8,0,647},{17,0,97},{19,0,59
-},{150,0,2},{132,0,191},{5,0,165},{9,0,346},{10,0,655},{11,0,885},{4,10,430},{
-135,11,357},{133,0,877},{5,10,213},{133,11,406},{8,0,128},{139,0,179},{6,11,69},
-{135,11,117},{135,0,1297},{11,11,43},{13,11,72},{141,11,142},{135,11,1830},{142,
-0,164},{5,0,57},{6,0,101},{6,0,586},{6,0,1663},{7,0,132},{7,0,1154},{7,0,1415},{
-7,0,1507},{12,0,493},{15,0,105},{151,0,15},{5,0,459},{7,0,1073},{8,0,241},{136,0
-,334},{133,11,826},{133,10,108},{5,10,219},{10,11,132},{11,11,191},{11,11,358},{
-139,11,460},{6,0,324},{6,0,520},{7,0,338},{7,0,1729},{8,0,228},{139,0,750},{21,0
-,30},{22,0,53},{4,10,193},{5,10,916},{7,10,364},{10,10,398},{10,10,726},{11,10,
-317},{11,10,626},{12,10,142},{12,10,288},{12,10,678},{13,10,313},{15,10,113},{
-146,10,114},{6,11,110},{135,11,1681},{135,0,910},{6,10,241},{7,10,907},{8,10,832
-},{9,10,342},{10,10,729},{11,10,284},{11,10,445},{11,10,651},{11,10,863},{13,10,
-398},{146,10,99},{7,0,705},{9,0,734},{5,11,1000},{7,11,733},{137,11,583},{4,0,73
-},{6,0,612},{7,0,927},{7,0,1822},{8,0,217},{9,0,765},{9,0,766},{10,0,408},{11,0,
-51},{11,0,793},{12,0,266},{15,0,158},{20,0,89},{150,0,32},{7,0,1330},{4,11,297},
-{6,11,529},{7,11,152},{7,11,713},{7,11,1845},{8,11,710},{8,11,717},{140,11,639},
-{5,0,389},{136,0,636},{134,0,1409},{4,10,562},{9,10,254},{139,10,879},{134,0,893
-},{132,10,786},{4,11,520},{135,11,575},{136,0,21},{140,0,721},{136,0,959},{7,11,
-1428},{7,11,1640},{9,11,169},{9,11,182},{9,11,367},{9,11,478},{9,11,506},{9,11,
-551},{9,11,648},{9,11,651},{9,11,697},{9,11,705},{9,11,725},{9,11,787},{9,11,794
-},{10,11,198},{10,11,214},{10,11,267},{10,11,275},{10,11,456},{10,11,551},{10,11
-,561},{10,11,613},{10,11,627},{10,11,668},{10,11,675},{10,11,691},{10,11,695},{
-10,11,707},{10,11,715},{11,11,183},{11,11,201},{11,11,244},{11,11,262},{11,11,
-352},{11,11,439},{11,11,493},{11,11,572},{11,11,591},{11,11,608},{11,11,611},{11
-,11,646},{11,11,674},{11,11,711},{11,11,751},{11,11,761},{11,11,776},{11,11,785}
-,{11,11,850},{11,11,853},{11,11,862},{11,11,865},{11,11,868},{11,11,898},{11,11,
-902},{11,11,903},{11,11,910},{11,11,932},{11,11,942},{11,11,957},{11,11,967},{11
-,11,972},{12,11,148},{12,11,195},{12,11,220},{12,11,237},{12,11,318},{12,11,339}
-,{12,11,393},{12,11,445},{12,11,450},{12,11,474},{12,11,509},{12,11,533},{12,11,
-591},{12,11,594},{12,11,597},{12,11,621},{12,11,633},{12,11,642},{13,11,59},{13,
-11,60},{13,11,145},{13,11,239},{13,11,250},{13,11,273},{13,11,329},{13,11,344},{
-13,11,365},{13,11,372},{13,11,387},{13,11,403},{13,11,414},{13,11,456},{13,11,
-478},{13,11,483},{13,11,489},{14,11,55},{14,11,57},{14,11,81},{14,11,90},{14,11,
-148},{14,11,239},{14,11,266},{14,11,321},{14,11,326},{14,11,327},{14,11,330},{14
-,11,347},{14,11,355},{14,11,401},{14,11,411},{14,11,414},{14,11,416},{14,11,420}
-,{15,11,61},{15,11,74},{15,11,87},{15,11,88},{15,11,94},{15,11,96},{15,11,116},{
-15,11,149},{15,11,154},{16,11,50},{16,11,63},{16,11,73},{17,11,2},{17,11,66},{17
-,11,92},{17,11,103},{17,11,112},{18,11,50},{18,11,54},{18,11,82},{18,11,86},{18,
-11,90},{18,11,111},{18,11,115},{18,11,156},{19,11,40},{19,11,79},{20,11,78},{149
-,11,22},{137,11,170},{134,0,1433},{135,11,1307},{139,11,411},{5,0,189},{7,0,442}
-,{7,0,443},{8,0,281},{12,0,174},{141,0,261},{6,10,216},{7,10,901},{7,10,1343},{
-136,10,493},{5,11,397},{6,11,154},{7,10,341},{7,11,676},{8,11,443},{8,11,609},{9
-,11,24},{9,11,325},{10,11,35},{11,10,219},{11,11,535},{11,11,672},{11,11,1018},{
-12,11,637},{144,11,30},{6,0,2},{7,0,191},{7,0,446},{7,0,1262},{7,0,1737},{8,0,22
-},{8,0,270},{8,0,612},{9,0,4},{9,0,312},{9,0,436},{9,0,626},{10,0,216},{10,0,311
-},{10,0,521},{10,0,623},{11,0,72},{11,0,330},{11,0,455},{12,0,321},{12,0,504},{
-12,0,530},{12,0,543},{13,0,17},{13,0,156},{13,0,334},{14,0,131},{17,0,60},{148,0
-,64},{7,0,354},{10,0,410},{139,0,815},{139,10,130},{7,10,1734},{137,11,631},{12,
-0,425},{15,0,112},{10,10,115},{11,10,420},{13,10,404},{14,10,346},{143,10,54},{6
-,0,60},{6,0,166},{7,0,374},{7,0,670},{7,0,1327},{8,0,411},{8,0,435},{9,0,653},{9
-,0,740},{10,0,385},{11,0,222},{11,0,324},{11,0,829},{140,0,611},{7,0,1611},{13,0
-,14},{15,0,44},{19,0,13},{148,0,76},{133,11,981},{4,11,56},{7,11,1791},{8,11,607
-},{8,11,651},{11,11,465},{11,11,835},{12,11,337},{141,11,480},{6,0,1478},{5,10,
-1011},{136,10,701},{139,0,596},{5,0,206},{134,0,398},{4,10,54},{5,10,666},{7,10,
-1039},{7,10,1130},{9,10,195},{138,10,302},{7,0,50},{9,11,158},{138,11,411},{135,
-11,1120},{6,0,517},{7,0,1159},{10,0,621},{11,0,192},{134,10,1669},{4,0,592},{6,0
-,600},{135,0,1653},{10,0,223},{139,0,645},{136,11,139},{7,0,64},{136,0,245},{142
-,0,278},{6,11,622},{135,11,1030},{136,0,604},{134,0,1502},{138,0,265},{141,11,
-168},{7,0,1763},{140,0,310},{7,10,798},{139,11,719},{7,11,160},{10,11,624},{142,
-11,279},{132,11,363},{7,10,122},{9,10,259},{10,10,84},{11,10,470},{12,10,541},{
-141,10,379},{5,0,129},{6,0,61},{135,0,947},{134,0,1356},{135,11,1191},{13,0,505}
-,{141,0,506},{11,0,1000},{5,10,82},{5,10,131},{7,10,1755},{8,10,31},{9,10,168},{
-9,10,764},{139,10,869},{134,0,966},{134,10,605},{134,11,292},{5,11,177},{6,11,
-616},{7,11,827},{9,11,525},{138,11,656},{135,11,1486},{138,11,31},{5,10,278},{
-137,10,68},{4,10,163},{5,10,201},{5,10,307},{5,10,310},{6,10,335},{7,10,284},{
-136,10,165},{6,0,839},{135,10,1660},{136,10,781},{6,10,33},{135,10,1244},{133,0,
-637},{4,11,161},{133,11,631},{137,0,590},{7,10,1953},{136,10,720},{5,0,280},{7,0
-,1226},{138,10,203},{134,0,1386},{5,0,281},{6,0,1026},{6,10,326},{7,10,677},{137
-,10,425},{7,11,1557},{135,11,1684},{135,0,1064},{9,11,469},{9,11,709},{12,11,512
-},{14,11,65},{145,11,12},{134,0,917},{10,11,229},{11,11,73},{11,11,376},{139,11,
-433},{7,0,555},{9,0,192},{13,0,30},{13,0,49},{15,0,150},{16,0,76},{20,0,52},{7,
-10,1316},{7,10,1412},{7,10,1839},{9,10,589},{11,10,241},{11,10,676},{11,10,811},
-{11,10,891},{12,10,140},{12,10,346},{12,10,479},{13,10,381},{14,10,188},{146,10,
-30},{149,0,15},{6,0,1882},{6,0,1883},{6,0,1897},{9,0,945},{9,0,1014},{9,0,1020},
-{12,0,823},{12,0,842},{12,0,866},{12,0,934},{15,0,242},{146,0,208},{6,0,965},{
-134,0,1499},{7,0,33},{7,0,120},{8,0,489},{9,0,319},{10,0,820},{11,0,1004},{12,0,
-379},{12,0,679},{13,0,117},{13,0,412},{14,0,25},{15,0,52},{15,0,161},{16,0,47},{
-149,0,2},{6,11,558},{7,11,651},{8,11,421},{9,11,0},{138,11,34},{4,0,937},{5,0,
-801},{7,0,473},{5,10,358},{7,10,1184},{10,10,662},{13,10,212},{13,10,304},{13,10
-,333},{145,10,98},{132,0,877},{6,0,693},{134,0,824},{132,0,365},{7,11,1832},{138
-,11,374},{5,0,7},{139,0,774},{4,0,734},{5,0,662},{134,0,430},{4,0,746},{135,0,
-1090},{5,0,360},{8,0,237},{10,0,231},{147,0,124},{138,11,348},{6,11,6},{7,11,81}
-,{7,11,771},{7,11,1731},{9,11,405},{138,11,421},{6,0,740},{137,0,822},{133,10,
-946},{7,0,1485},{136,0,929},{7,10,411},{8,10,631},{9,10,323},{10,10,355},{11,10,
-491},{12,10,143},{12,10,402},{13,10,73},{14,10,408},{15,10,107},{146,10,71},{135
-,10,590},{5,11,881},{133,11,885},{150,11,25},{4,0,852},{5,11,142},{134,11,546},{
-7,10,1467},{8,10,328},{10,10,544},{11,10,955},{13,10,320},{145,10,83},{9,0,17},{
-10,0,291},{11,10,511},{13,10,394},{14,10,298},{14,10,318},{146,10,103},{5,11,466
-},{11,11,571},{12,11,198},{13,11,283},{14,11,186},{15,11,21},{143,11,103},{134,0
-,1001},{4,11,185},{5,11,257},{5,11,839},{5,11,936},{7,11,171},{9,11,399},{10,11,
-258},{10,11,395},{10,11,734},{11,11,1014},{12,11,23},{13,11,350},{14,11,150},{
-147,11,6},{143,0,35},{132,0,831},{5,10,835},{134,10,483},{4,0,277},{5,0,608},{6,
-0,493},{7,0,457},{12,0,384},{7,11,404},{7,11,1377},{7,11,1430},{7,11,2017},{8,11
-,149},{8,11,239},{8,11,512},{8,11,793},{8,11,818},{9,11,474},{9,11,595},{10,11,
-122},{10,11,565},{10,11,649},{10,11,783},{11,11,239},{11,11,295},{11,11,447},{11
-,11,528},{11,11,639},{11,11,800},{11,11,936},{12,11,25},{12,11,73},{12,11,77},{
-12,11,157},{12,11,316},{12,11,390},{12,11,391},{12,11,394},{12,11,395},{12,11,
-478},{12,11,503},{12,11,592},{12,11,680},{13,11,50},{13,11,53},{13,11,132},{13,
-11,198},{13,11,275},{13,11,322},{13,11,415},{14,11,71},{14,11,257},{14,11,395},{
-15,11,71},{15,11,136},{17,11,123},{18,11,93},{147,11,58},{134,0,1351},{7,0,27},{
-135,0,316},{136,11,712},{136,0,984},{133,0,552},{137,0,264},{132,0,401},{6,0,710
-},{6,0,1111},{134,0,1343},{134,0,1211},{9,0,543},{10,0,524},{11,0,108},{11,0,653
-},{12,0,524},{13,0,123},{14,0,252},{16,0,18},{19,0,38},{20,0,26},{20,0,65},{21,0
-,3},{151,0,11},{4,0,205},{5,0,623},{7,0,104},{8,0,519},{137,0,716},{132,10,677},
-{4,11,377},{152,11,13},{135,11,1673},{7,0,579},{9,0,41},{9,0,244},{9,0,669},{10,
-0,5},{11,0,861},{11,0,951},{139,0,980},{132,0,717},{136,0,1011},{132,0,805},{4,
-11,180},{135,11,1906},{132,10,777},{132,10,331},{132,0,489},{6,0,1024},{4,11,491
-},{133,10,747},{135,11,1182},{4,11,171},{138,11,234},{4,11,586},{7,11,1186},{138
-,11,631},{135,0,892},{135,11,336},{9,11,931},{10,11,334},{148,11,71},{137,0,473}
-,{6,0,864},{12,0,659},{139,11,926},{7,0,819},{9,0,26},{9,0,392},{10,0,152},{10,0
-,226},{11,0,19},{12,0,276},{12,0,426},{12,0,589},{13,0,460},{15,0,97},{19,0,48},
-{148,0,104},{135,0,51},{133,10,326},{4,10,691},{146,10,16},{9,0,130},{11,0,765},
-{10,10,680},{10,10,793},{141,10,357},{133,11,765},{8,0,229},{6,10,32},{7,10,385}
-,{7,10,757},{7,10,1916},{8,10,94},{8,10,711},{9,10,541},{10,10,162},{10,10,795},
-{11,10,989},{11,10,1010},{12,10,14},{142,10,308},{7,11,474},{137,11,578},{132,0,
-674},{132,0,770},{5,0,79},{7,0,1027},{7,0,1477},{139,0,52},{133,11,424},{134,0,
-1666},{6,0,409},{6,10,349},{6,10,1682},{7,10,1252},{8,10,112},{8,11,714},{9,10,
-435},{9,10,668},{10,10,290},{10,10,319},{10,10,815},{11,10,180},{11,10,837},{12,
-10,240},{13,10,152},{13,10,219},{142,10,158},{5,0,789},{134,0,195},{4,0,251},{4,
-0,688},{7,0,513},{135,0,1284},{132,10,581},{9,11,420},{10,11,269},{10,11,285},{
-10,11,576},{11,11,397},{13,11,175},{145,11,90},{6,10,126},{7,10,573},{8,10,397},
-{142,10,44},{132,11,429},{133,0,889},{4,0,160},{5,0,330},{7,0,1434},{136,0,174},
-{7,11,18},{7,11,699},{7,11,1966},{8,11,752},{9,11,273},{9,11,412},{9,11,703},{10
-,11,71},{10,11,427},{10,11,508},{146,11,97},{6,0,872},{134,0,899},{133,10,926},{
-134,0,1126},{134,0,918},{4,11,53},{5,11,186},{135,11,752},{7,0,268},{136,0,569},
-{134,0,1224},{6,0,1361},{7,10,1232},{137,10,531},{8,11,575},{10,11,289},{139,11,
-319},{133,10,670},{132,11,675},{133,0,374},{135,10,1957},{133,0,731},{11,0,190},
-{15,0,49},{11,11,190},{143,11,49},{4,0,626},{5,0,506},{5,0,642},{6,0,425},{10,0,
-202},{139,0,141},{137,0,444},{7,10,242},{135,10,1942},{6,11,209},{8,11,468},{9,
-11,210},{11,11,36},{12,11,28},{12,11,630},{13,11,21},{13,11,349},{14,11,7},{145,
-11,13},{4,11,342},{135,11,1179},{5,10,834},{7,10,1202},{8,10,14},{9,10,481},{137
-,10,880},{4,11,928},{133,11,910},{4,11,318},{4,11,496},{7,11,856},{139,11,654},{
-136,0,835},{7,0,1526},{138,10,465},{151,0,17},{135,0,477},{4,10,357},{6,10,172},
-{7,10,143},{137,10,413},{6,0,1374},{138,0,994},{18,0,76},{132,10,590},{7,0,287},
-{8,0,355},{9,0,293},{137,0,743},{134,0,1389},{7,11,915},{8,11,247},{147,11,0},{4
-,11,202},{5,11,382},{6,11,454},{7,11,936},{7,11,1803},{8,11,758},{9,11,375},{9,
-11,895},{10,11,743},{10,11,792},{11,11,978},{11,11,1012},{142,11,109},{5,0,384},
-{8,0,455},{140,0,48},{132,11,390},{5,10,169},{7,10,333},{136,10,45},{5,0,264},{
-134,0,184},{138,11,791},{133,11,717},{132,10,198},{6,11,445},{7,11,332},{137,11,
-909},{136,0,1001},{4,10,24},{5,10,140},{5,10,185},{7,10,1500},{11,10,565},{139,
-10,838},{134,11,578},{5,0,633},{6,0,28},{135,0,1323},{132,0,851},{136,11,267},{7
-,0,359},{8,0,243},{140,0,175},{4,10,334},{133,10,593},{141,11,87},{136,11,766},{
-10,0,287},{12,0,138},{10,11,287},{140,11,138},{4,0,105},{132,0,740},{140,10,116}
-,{134,0,857},{135,11,1841},{6,0,1402},{137,0,819},{132,11,584},{132,10,709},{133
-,10,897},{5,0,224},{13,0,174},{146,0,52},{135,10,1840},{4,10,608},{133,10,497},{
-139,11,60},{4,0,758},{135,0,1649},{4,11,226},{4,11,326},{135,11,1770},{5,11,426}
-,{8,11,30},{9,11,2},{11,11,549},{147,11,122},{135,10,2039},{6,10,540},{136,10,
-136},{4,0,573},{8,0,655},{4,10,897},{133,10,786},{7,0,351},{139,0,128},{133,10,
-999},{4,10,299},{135,10,1004},{133,0,918},{132,11,345},{4,11,385},{7,11,265},{
-135,11,587},{133,10,456},{136,10,180},{6,0,687},{134,0,1537},{4,11,347},{5,11,
-423},{5,11,996},{135,11,1329},{132,10,755},{7,11,1259},{9,11,125},{11,11,65},{
-140,11,285},{5,11,136},{6,11,136},{136,11,644},{134,0,1525},{4,0,1009},{135,0,
-1139},{139,10,338},{132,0,340},{135,10,1464},{8,0,847},{10,0,861},{10,0,876},{10
-,0,889},{10,0,922},{10,0,929},{10,0,933},{12,0,784},{140,0,791},{139,0,176},{9,
-11,134},{10,11,2},{10,11,27},{10,11,333},{11,11,722},{143,11,1},{4,11,433},{133,
-11,719},{5,0,985},{7,0,509},{7,0,529},{145,0,96},{132,0,615},{4,10,890},{5,10,
-805},{5,10,819},{5,10,961},{6,10,396},{6,10,1631},{6,10,1678},{7,10,1967},{7,10,
-2041},{9,10,630},{11,10,8},{11,10,1019},{12,10,176},{13,10,225},{14,10,292},{149
-,10,24},{135,0,1919},{134,0,1131},{144,11,21},{144,11,51},{135,10,1815},{4,0,247
-},{7,10,1505},{10,10,190},{10,10,634},{11,10,792},{12,10,358},{140,10,447},{5,10
-,0},{6,10,536},{7,10,604},{13,10,445},{145,10,126},{4,0,184},{5,0,390},{6,0,337}
-,{7,0,23},{7,0,494},{7,0,618},{7,0,1456},{8,0,27},{8,0,599},{10,0,153},{139,0,
-710},{6,10,232},{6,10,412},{7,10,1074},{8,10,9},{8,10,157},{8,10,786},{9,10,196}
-,{9,10,352},{9,10,457},{10,10,337},{11,10,232},{11,10,877},{12,10,480},{140,10,
-546},{13,0,38},{135,10,958},{4,10,382},{136,10,579},{4,10,212},{135,10,1206},{4,
-11,555},{8,11,536},{138,11,288},{11,11,139},{139,11,171},{9,11,370},{138,11,90},
-{132,0,1015},{134,0,1088},{5,10,655},{135,11,977},{134,0,1585},{17,10,67},{147,
-10,74},{10,0,227},{11,0,497},{11,0,709},{140,0,415},{6,0,360},{7,0,1664},{136,0,
-478},{7,0,95},{6,10,231},{136,10,423},{140,11,65},{4,11,257},{135,11,2031},{135,
-11,1768},{133,10,300},{139,11,211},{136,0,699},{6,10,237},{7,10,611},{8,10,100},
-{9,10,416},{11,10,335},{12,10,173},{146,10,101},{14,0,26},{146,0,150},{6,0,581},
-{135,0,1119},{135,10,1208},{132,0,739},{6,11,83},{6,11,1733},{135,11,1389},{137,
-0,869},{4,0,67},{5,0,422},{7,0,1037},{7,0,1289},{7,0,1555},{9,0,741},{145,0,108}
-,{133,10,199},{12,10,427},{146,10,38},{136,0,464},{142,0,42},{10,0,96},{8,11,501
-},{137,11,696},{134,11,592},{4,0,512},{4,0,966},{5,0,342},{6,0,1855},{8,0,869},{
-8,0,875},{8,0,901},{144,0,26},{8,0,203},{11,0,823},{11,0,846},{12,0,482},{13,0,
-277},{13,0,302},{13,0,464},{14,0,205},{142,0,221},{4,0,449},{133,0,718},{7,11,
-1718},{9,11,95},{9,11,274},{10,11,279},{10,11,317},{10,11,420},{11,11,303},{11,
-11,808},{12,11,134},{12,11,367},{13,11,149},{13,11,347},{14,11,349},{14,11,406},
-{18,11,22},{18,11,89},{18,11,122},{147,11,47},{133,11,26},{4,0,355},{6,0,311},{9
-,0,256},{138,0,404},{132,11,550},{10,0,758},{6,10,312},{6,10,1715},{10,10,584},{
-11,10,546},{11,10,692},{12,10,259},{12,10,295},{13,10,46},{141,10,154},{136,11,
-822},{5,0,827},{4,11,902},{5,11,809},{6,11,122},{135,11,896},{5,0,64},{140,0,581
-},{4,0,442},{6,0,739},{7,0,1047},{7,0,1352},{7,0,1643},{7,11,1911},{9,11,449},{
-10,11,192},{138,11,740},{135,11,262},{132,10,588},{133,11,620},{5,0,977},{6,0,
-288},{7,0,528},{4,11,34},{5,11,574},{7,11,279},{7,11,1624},{136,11,601},{6,0,
-1375},{4,10,231},{5,10,61},{6,10,104},{7,10,729},{7,10,964},{7,10,1658},{140,10,
-414},{6,10,263},{138,10,757},{132,10,320},{4,0,254},{7,0,1309},{5,11,332},{135,
-11,1309},{6,11,261},{8,11,182},{139,11,943},{132,10,225},{6,0,12},{135,0,1219},{
-4,0,275},{12,0,376},{6,11,1721},{141,11,490},{4,11,933},{133,11,880},{6,0,951},{
-6,0,1109},{6,0,1181},{7,0,154},{4,10,405},{7,10,817},{14,10,58},{17,10,37},{146,
-10,124},{6,0,1520},{133,10,974},{134,0,1753},{6,0,369},{6,0,502},{7,0,1036},{8,0
-,348},{9,0,452},{10,0,26},{11,0,224},{11,0,387},{11,0,772},{12,0,95},{12,0,629},
-{13,0,195},{13,0,207},{13,0,241},{14,0,260},{14,0,270},{143,0,140},{132,0,269},{
-5,0,480},{7,0,532},{7,0,1197},{7,0,1358},{8,0,291},{11,0,349},{142,0,396},{5,10,
-235},{7,10,1239},{11,10,131},{140,10,370},{7,10,956},{7,10,1157},{7,10,1506},{7,
-10,1606},{7,10,1615},{7,10,1619},{7,10,1736},{7,10,1775},{8,10,590},{9,10,324},{
-9,10,736},{9,10,774},{9,10,776},{9,10,784},{10,10,567},{10,10,708},{11,10,518},{
-11,10,613},{11,10,695},{11,10,716},{11,10,739},{11,10,770},{11,10,771},{11,10,
-848},{11,10,857},{11,10,931},{11,10,947},{12,10,326},{12,10,387},{12,10,484},{12
-,10,528},{12,10,552},{12,10,613},{13,10,189},{13,10,256},{13,10,340},{13,10,432}
-,{13,10,436},{13,10,440},{13,10,454},{14,10,174},{14,10,220},{14,10,284},{14,10,
-390},{145,10,121},{8,11,598},{9,11,664},{138,11,441},{9,10,137},{138,10,221},{
-133,11,812},{148,0,15},{134,0,1341},{6,0,1017},{4,11,137},{7,11,1178},{135,11,
-1520},{7,10,390},{138,10,140},{7,11,1260},{135,11,1790},{137,11,191},{135,10,
-1144},{6,0,1810},{7,0,657},{8,0,886},{10,0,857},{14,0,440},{144,0,96},{8,0,533},
-{6,11,1661},{7,11,1975},{7,11,2009},{135,11,2011},{6,0,1453},{134,10,464},{132,
-11,715},{5,10,407},{11,10,204},{11,10,243},{11,10,489},{12,10,293},{19,10,37},{
-20,10,73},{150,10,38},{133,11,703},{4,0,211},{7,0,1483},{5,10,325},{8,10,5},{8,
-10,227},{9,10,105},{10,10,585},{140,10,614},{4,0,332},{5,0,335},{6,0,238},{7,0,
-269},{7,0,811},{7,0,1797},{8,0,836},{9,0,507},{141,0,242},{5,11,89},{7,11,1915},
-{9,11,185},{9,11,235},{9,11,496},{10,11,64},{10,11,270},{10,11,403},{10,11,469},
-{10,11,529},{10,11,590},{11,11,140},{11,11,860},{13,11,1},{13,11,422},{14,11,341
-},{14,11,364},{17,11,93},{18,11,113},{19,11,97},{147,11,113},{133,11,695},{16,0,
-19},{5,11,6},{6,11,183},{6,10,621},{7,11,680},{7,11,978},{7,11,1013},{7,11,1055}
-,{12,11,230},{13,11,172},{13,10,504},{146,11,29},{136,0,156},{133,0,1009},{6,11,
-29},{139,11,63},{134,0,820},{134,10,218},{7,10,454},{7,10,782},{8,10,768},{140,
-10,686},{5,0,228},{6,0,203},{7,0,156},{8,0,347},{9,0,265},{18,0,39},{20,0,54},{
-21,0,31},{22,0,3},{23,0,0},{15,11,8},{18,11,39},{20,11,54},{21,11,31},{22,11,3},
-{151,11,0},{7,0,1131},{135,0,1468},{144,10,0},{134,0,1276},{10,10,676},{140,10,
-462},{132,11,311},{134,11,1740},{7,11,170},{8,11,90},{8,11,177},{8,11,415},{11,
-11,714},{142,11,281},{134,10,164},{6,0,1792},{138,0,849},{150,10,50},{5,0,291},{
-5,0,318},{7,0,765},{9,0,389},{12,0,548},{8,11,522},{142,11,328},{11,11,91},{13,
-11,129},{15,11,101},{145,11,125},{4,11,494},{6,11,74},{7,11,44},{7,11,407},{8,11
-,551},{12,11,17},{15,11,5},{148,11,11},{4,11,276},{133,11,296},{6,10,343},{7,10,
-195},{7,11,1777},{9,10,226},{10,10,197},{10,10,575},{11,10,502},{139,10,899},{10
-,0,525},{139,0,82},{14,0,453},{4,11,7},{5,11,90},{5,11,158},{6,11,542},{7,11,221
-},{7,11,1574},{9,11,490},{10,11,540},{11,11,443},{139,11,757},{135,0,666},{22,10
-,29},{150,11,29},{4,0,422},{147,10,8},{5,0,355},{145,0,0},{6,0,1873},{9,0,918},{
-7,11,588},{9,11,175},{138,11,530},{143,11,31},{11,0,165},{7,10,1125},{9,10,143},
-{14,10,405},{150,10,21},{9,0,260},{137,0,905},{5,11,872},{6,11,57},{6,11,479},{6
-,11,562},{7,11,471},{7,11,1060},{9,11,447},{9,11,454},{141,11,6},{138,11,704},{
-133,0,865},{5,0,914},{134,0,1625},{133,0,234},{7,0,1383},{5,11,31},{6,11,614},{
-145,11,61},{7,11,1200},{138,11,460},{6,11,424},{135,11,1866},{136,0,306},{5,10,
-959},{12,11,30},{13,11,148},{14,11,87},{14,11,182},{16,11,42},{18,11,92},{148,11
-,70},{6,0,1919},{6,0,1921},{9,0,923},{9,0,930},{9,0,941},{9,0,949},{9,0,987},{9,
-0,988},{9,0,992},{12,0,802},{12,0,815},{12,0,856},{12,0,885},{12,0,893},{12,0,
-898},{12,0,919},{12,0,920},{12,0,941},{12,0,947},{15,0,183},{15,0,185},{15,0,189
-},{15,0,197},{15,0,202},{15,0,233},{18,0,218},{18,0,219},{18,0,233},{143,11,156}
-,{135,10,1759},{136,10,173},{13,0,163},{13,0,180},{18,0,78},{20,0,35},{5,11,13},
-{134,11,142},{134,10,266},{6,11,97},{7,11,116},{8,11,322},{8,11,755},{9,11,548},
-{10,11,714},{11,11,884},{141,11,324},{135,0,1312},{9,0,814},{137,11,676},{133,0,
-707},{135,0,1493},{6,0,421},{7,0,61},{7,0,1540},{10,0,11},{138,0,501},{12,0,733}
-,{12,0,766},{7,11,866},{135,11,1163},{137,0,341},{142,0,98},{145,11,115},{135,11
-,1111},{136,10,300},{136,0,1014},{8,11,1},{9,11,112},{138,11,326},{132,11,730},{
-5,11,488},{6,11,527},{7,11,489},{7,11,1636},{8,11,121},{8,11,144},{8,11,359},{9,
-11,193},{9,11,241},{9,11,336},{9,11,882},{11,11,266},{11,11,372},{11,11,944},{12
-,11,401},{140,11,641},{6,0,971},{134,0,1121},{6,0,102},{7,0,72},{15,0,142},{147,
-0,67},{151,0,30},{135,0,823},{134,0,1045},{5,10,427},{5,10,734},{7,10,478},{136,
-10,52},{7,0,1930},{11,10,217},{142,10,165},{6,0,1512},{135,0,1870},{9,11,31},{10
-,11,244},{10,11,699},{12,11,149},{141,11,497},{133,11,377},{145,11,101},{10,11,
-158},{13,11,13},{13,11,137},{13,11,258},{14,11,111},{14,11,225},{14,11,253},{14,
-11,304},{14,11,339},{14,11,417},{146,11,33},{6,0,87},{6,10,1734},{7,10,20},{7,10
-,1056},{8,10,732},{9,10,406},{9,10,911},{138,10,694},{134,0,1243},{137,0,245},{7
-,0,68},{8,0,48},{8,0,88},{8,0,582},{8,0,681},{9,0,373},{9,0,864},{11,0,157},{11,
-0,336},{11,0,843},{148,0,27},{8,11,663},{144,11,8},{133,10,613},{4,0,88},{5,0,
-137},{5,0,174},{5,0,777},{6,0,1664},{6,0,1725},{7,0,77},{7,0,426},{7,0,1317},{7,
-0,1355},{8,0,126},{8,0,563},{9,0,523},{9,0,750},{10,0,310},{10,0,836},{11,0,42},
-{11,0,318},{11,0,731},{12,0,68},{12,0,92},{12,0,507},{12,0,692},{13,0,81},{13,0,
-238},{13,0,374},{14,0,436},{18,0,138},{19,0,78},{19,0,111},{20,0,55},{20,0,77},{
-148,0,92},{141,0,418},{4,0,938},{137,0,625},{138,0,351},{5,11,843},{7,10,32},{7,
-10,984},{8,10,85},{8,10,709},{9,10,579},{9,10,847},{9,10,856},{10,10,799},{11,10
-,258},{11,10,1007},{12,10,331},{12,10,615},{13,10,188},{13,10,435},{14,10,8},{15
-,10,165},{16,10,27},{148,10,40},{6,0,1668},{7,0,1499},{8,0,117},{9,0,314},{138,0
-,174},{135,0,707},{132,11,554},{133,11,536},{5,0,403},{5,11,207},{9,11,79},{11,
-11,625},{145,11,7},{132,11,424},{136,11,785},{4,10,167},{135,10,82},{9,0,7},{23,
-0,6},{9,11,7},{151,11,6},{6,0,282},{5,10,62},{6,10,534},{7,10,74},{7,10,678},{7,
-10,684},{7,10,1043},{7,10,1072},{8,10,280},{8,10,541},{8,10,686},{9,10,258},{10,
-10,519},{11,10,252},{140,10,282},{138,10,33},{132,10,359},{4,0,44},{5,0,311},{6,
-0,156},{7,0,639},{7,0,762},{7,0,1827},{9,0,8},{9,0,462},{148,0,83},{7,11,769},{9
-,11,18},{138,11,358},{4,0,346},{7,0,115},{9,0,180},{9,0,456},{10,0,363},{4,11,
-896},{134,11,1777},{133,10,211},{7,0,761},{7,0,1051},{137,0,545},{6,10,145},{141
-,10,336},{7,11,750},{9,11,223},{11,11,27},{11,11,466},{12,11,624},{14,11,265},{
-146,11,61},{6,0,752},{6,0,768},{6,0,1195},{6,0,1254},{6,0,1619},{137,0,835},{6,0
-,1936},{8,0,930},{136,0,960},{132,10,263},{132,11,249},{12,0,653},{132,10,916},{
-4,11,603},{133,11,661},{8,0,344},{4,11,11},{6,11,128},{7,11,231},{7,11,1533},{
-138,11,725},{134,0,1483},{134,0,875},{6,0,185},{7,0,1899},{9,0,875},{139,0,673},
-{15,10,155},{144,10,79},{7,0,93},{7,0,210},{7,0,1223},{8,0,451},{8,0,460},{11,0,
-353},{11,0,475},{4,10,599},{6,10,1634},{7,10,67},{7,10,691},{7,10,979},{7,10,
-1697},{8,10,207},{8,10,214},{8,10,231},{8,10,294},{8,10,336},{8,10,428},{8,10,
-471},{8,10,622},{8,10,626},{8,10,679},{8,10,759},{8,10,829},{9,10,11},{9,10,246}
-,{9,10,484},{9,10,573},{9,10,706},{9,10,762},{9,10,798},{9,10,855},{9,10,870},{9
-,10,912},{10,10,303},{10,10,335},{10,10,424},{10,10,461},{10,10,543},{10,10,759}
-,{10,10,814},{11,10,59},{11,10,235},{11,10,590},{11,10,929},{11,10,963},{11,10,
-987},{12,10,114},{12,10,182},{12,10,226},{12,10,332},{12,10,439},{12,10,575},{12
-,10,598},{12,10,675},{13,10,8},{13,10,125},{13,10,194},{13,10,287},{14,10,197},{
-14,10,383},{15,10,53},{17,10,63},{19,10,46},{19,10,98},{19,10,106},{148,10,85},{
-132,11,476},{4,0,327},{5,0,478},{7,0,1332},{136,0,753},{5,0,1020},{133,0,1022},{
-135,11,1807},{4,0,103},{133,0,401},{4,0,499},{135,0,1421},{10,0,207},{13,0,164},
-{147,10,126},{9,11,20},{10,11,324},{139,11,488},{132,0,96},{9,11,280},{138,11,
-134},{135,0,968},{133,10,187},{135,10,1286},{5,11,112},{6,11,103},{134,11,150},{
-8,0,914},{10,0,3},{4,10,215},{9,10,38},{11,10,23},{11,10,127},{139,10,796},{135,
-0,399},{6,0,563},{137,0,224},{6,0,704},{134,0,1214},{4,11,708},{8,11,15},{9,11,
-50},{9,11,386},{11,11,18},{11,11,529},{140,11,228},{4,11,563},{7,11,109},{7,11,
-592},{7,11,637},{7,11,770},{7,11,1701},{8,11,436},{8,11,463},{9,11,60},{9,11,335
-},{9,11,904},{10,11,73},{11,11,434},{12,11,585},{13,11,331},{18,11,110},{148,11,
-60},{134,0,1559},{132,11,502},{6,11,347},{138,11,161},{4,11,33},{5,11,102},{5,11
-,500},{6,11,284},{7,11,1079},{7,11,1423},{7,11,1702},{8,11,470},{9,11,554},{9,11
-,723},{139,11,333},{7,11,246},{135,11,840},{6,11,10},{8,11,571},{9,11,739},{143,
-11,91},{8,0,861},{10,0,905},{12,0,730},{12,0,789},{133,11,626},{134,0,946},{5,0,
-746},{12,0,333},{14,0,332},{12,11,333},{142,11,332},{5,11,18},{6,11,526},{13,11,
-24},{13,11,110},{19,11,5},{147,11,44},{4,0,910},{5,0,832},{135,10,2002},{10,11,
-768},{139,11,787},{4,11,309},{5,11,462},{7,11,970},{135,11,1097},{4,10,28},{5,10
-,440},{7,10,248},{11,10,833},{140,10,344},{134,10,1654},{6,0,632},{6,0,652},{6,0
-,1272},{6,0,1384},{134,0,1560},{134,11,1704},{6,0,1393},{133,10,853},{6,10,249},
-{7,10,1234},{139,10,573},{5,11,86},{7,11,743},{9,11,85},{10,11,281},{10,11,432},
-{11,11,490},{12,11,251},{13,11,118},{14,11,378},{146,11,143},{5,11,524},{133,11,
-744},{134,0,1514},{10,0,201},{142,0,319},{7,0,717},{10,0,510},{7,10,392},{8,10,
-20},{8,10,172},{8,10,690},{9,10,383},{9,10,845},{11,10,293},{11,10,832},{11,10,
-920},{11,10,984},{141,10,221},{134,0,1381},{5,10,858},{133,10,992},{8,0,528},{
-137,0,348},{10,11,107},{140,11,436},{4,0,20},{133,0,616},{134,0,1251},{132,11,
-927},{10,11,123},{12,11,670},{13,11,371},{14,11,142},{146,11,94},{134,0,1163},{7
-,11,1149},{137,11,156},{134,0,307},{133,11,778},{7,0,1091},{135,0,1765},{5,11,
-502},{6,10,268},{137,10,62},{8,11,196},{10,11,283},{139,11,406},{4,0,26},{5,0,
-429},{6,0,245},{7,0,704},{7,0,1379},{135,0,1474},{133,11,855},{132,0,881},{4,0,
-621},{135,11,1596},{7,11,1400},{9,11,446},{138,11,45},{6,0,736},{138,10,106},{
-133,0,542},{134,0,348},{133,0,868},{136,0,433},{135,0,1495},{138,0,771},{6,10,
-613},{136,10,223},{138,0,215},{141,0,124},{136,11,391},{135,11,172},{132,10,670}
-,{140,0,55},{9,10,40},{139,10,136},{7,0,62},{147,0,112},{132,0,856},{132,11,568}
-,{12,0,270},{139,10,259},{8,0,572},{137,0,698},{4,11,732},{9,10,310},{137,10,682
-},{142,10,296},{134,0,939},{136,11,733},{135,11,1435},{7,10,1401},{135,10,1476},
-{6,0,352},{4,10,296},{7,10,401},{7,10,1410},{7,10,1594},{7,10,1674},{8,10,63},{8
-,10,660},{137,10,74},{4,11,428},{133,11,668},{4,10,139},{4,10,388},{140,10,188},
-{7,11,2015},{140,11,665},{132,0,647},{146,0,10},{138,0,220},{142,0,464},{132,0,
-109},{134,0,1746},{6,0,515},{4,10,747},{6,11,1623},{6,11,1681},{7,10,649},{7,10,
-1479},{135,10,1583},{133,10,232},{135,0,566},{137,10,887},{4,0,40},{10,0,67},{11
-,0,117},{11,0,768},{139,0,935},{132,0,801},{7,0,992},{8,0,301},{9,0,722},{12,0,
-63},{13,0,29},{14,0,161},{143,0,18},{139,0,923},{6,11,1748},{8,11,715},{9,11,802
-},{10,11,46},{10,11,819},{13,11,308},{14,11,351},{14,11,363},{146,11,67},{137,11
-,745},{7,0,1145},{4,10,14},{7,10,1801},{10,10,748},{141,10,458},{4,11,63},{5,11,
-347},{134,11,474},{135,0,568},{4,10,425},{7,11,577},{7,11,1432},{9,11,475},{9,11
-,505},{9,11,526},{9,11,609},{9,11,689},{9,11,726},{9,11,735},{9,11,738},{10,11,
-556},{10,11,674},{10,11,684},{11,11,89},{11,11,202},{11,11,272},{11,11,380},{11,
-11,415},{11,11,505},{11,11,537},{11,11,550},{11,11,562},{11,11,640},{11,11,667},
-{11,11,688},{11,11,847},{11,11,927},{11,11,930},{11,11,940},{12,11,144},{12,11,
-325},{12,11,329},{12,11,389},{12,11,403},{12,11,451},{12,11,515},{12,11,604},{12
-,11,616},{12,11,626},{13,11,66},{13,11,131},{13,11,167},{13,11,236},{13,11,368},
-{13,11,411},{13,11,434},{13,11,453},{13,11,461},{13,11,474},{14,11,59},{14,11,60
-},{14,11,139},{14,11,152},{14,11,276},{14,11,353},{14,11,402},{15,11,28},{15,11,
-81},{15,11,123},{15,11,152},{18,11,136},{148,11,88},{137,0,247},{135,11,1622},{9
-,11,544},{11,11,413},{144,11,25},{4,0,645},{7,0,825},{6,10,1768},{135,11,89},{
-140,0,328},{5,10,943},{134,10,1779},{134,0,1363},{5,10,245},{6,10,576},{7,10,582
-},{136,10,225},{134,0,1280},{5,11,824},{133,11,941},{7,11,440},{8,11,230},{139,
-11,106},{5,0,28},{6,0,204},{10,0,320},{10,0,583},{13,0,502},{14,0,72},{14,0,274}
-,{14,0,312},{14,0,344},{15,0,159},{16,0,62},{16,0,69},{17,0,30},{18,0,42},{18,0,
-53},{18,0,84},{18,0,140},{19,0,68},{19,0,85},{20,0,5},{20,0,45},{20,0,101},{22,0
-,7},{150,0,20},{4,0,558},{6,0,390},{7,0,162},{7,0,689},{9,0,360},{138,0,653},{
-134,0,764},{6,0,862},{137,0,833},{5,0,856},{6,0,1672},{6,0,1757},{134,0,1781},{5
-,0,92},{10,0,736},{140,0,102},{6,0,1927},{6,0,1944},{8,0,924},{8,0,948},{10,0,
-967},{138,0,978},{134,0,1479},{5,0,590},{8,0,360},{9,0,213},{138,0,63},{134,0,
-1521},{6,0,709},{134,0,891},{132,10,443},{13,0,477},{14,0,120},{148,0,61},{4,11,
-914},{5,11,800},{133,11,852},{10,11,54},{141,11,115},{4,11,918},{133,11,876},{
-139,11,152},{4,11,92},{133,11,274},{135,11,1901},{9,11,800},{10,11,693},{11,11,
-482},{11,11,734},{139,11,789},{9,0,483},{132,10,298},{6,0,1213},{141,11,498},{
-135,11,1451},{133,11,743},{4,0,1022},{10,0,1000},{12,0,957},{12,0,980},{12,0,
-1013},{14,0,481},{144,0,116},{8,0,503},{17,0,29},{4,11,49},{7,11,280},{135,11,
-1633},{135,0,1712},{134,0,466},{136,11,47},{5,10,164},{7,10,121},{142,10,189},{7
-,10,812},{7,10,1261},{7,10,1360},{9,10,632},{140,10,352},{139,10,556},{132,0,731
-},{5,11,272},{5,11,908},{5,11,942},{7,11,1008},{7,11,1560},{8,11,197},{9,11,47},
-{11,11,538},{139,11,742},{4,10,172},{9,10,611},{10,10,436},{12,10,673},{141,10,
-255},{133,10,844},{10,0,484},{11,0,754},{12,0,457},{14,0,171},{14,0,389},{146,0,
-153},{9,10,263},{10,10,147},{138,10,492},{137,11,891},{138,0,241},{133,10,537},{
-6,0,2005},{136,0,964},{137,10,842},{151,11,8},{4,11,407},{132,11,560},{135,11,
-1884},{6,0,1100},{134,0,1242},{135,0,954},{5,10,230},{5,10,392},{6,10,420},{9,10
-,568},{140,10,612},{4,11,475},{11,11,35},{11,11,90},{13,11,7},{13,11,71},{13,11,
-177},{142,11,422},{136,11,332},{135,0,1958},{6,0,549},{8,0,34},{8,0,283},{9,0,
-165},{138,0,475},{10,0,952},{12,0,966},{140,0,994},{5,0,652},{5,0,701},{135,0,
-449},{4,0,655},{7,0,850},{17,0,75},{146,0,137},{4,0,146},{7,0,1618},{8,0,670},{5
-,10,41},{7,10,1459},{7,10,1469},{7,10,1859},{9,10,549},{139,10,905},{133,10,696}
-,{6,0,159},{6,0,364},{7,0,516},{137,0,518},{135,0,1439},{6,11,222},{7,11,636},{7
-,11,1620},{8,11,409},{9,11,693},{139,11,77},{13,0,151},{141,11,45},{6,0,1027},{4
-,11,336},{132,10,771},{139,11,392},{10,11,121},{11,11,175},{149,11,16},{8,0,950}
-,{138,0,983},{133,10,921},{135,0,993},{6,10,180},{7,10,1137},{8,10,751},{139,10,
-805},{7,0,501},{9,0,111},{10,0,141},{11,0,332},{13,0,43},{13,0,429},{14,0,130},{
-14,0,415},{145,0,102},{4,10,183},{5,11,882},{7,10,271},{11,10,824},{11,10,952},{
-13,10,278},{13,10,339},{13,10,482},{14,10,424},{148,10,99},{4,10,19},{5,10,477},
-{5,10,596},{6,10,505},{7,10,1221},{11,10,907},{12,10,209},{141,10,214},{135,10,
-1215},{133,0,452},{132,11,426},{5,0,149},{136,0,233},{133,0,935},{6,11,58},{7,11
-,654},{7,11,745},{7,11,1969},{8,11,240},{8,11,675},{9,11,479},{9,11,731},{10,11,
-330},{10,11,593},{10,11,817},{11,11,32},{11,11,133},{11,11,221},{145,11,68},{12,
-0,582},{18,0,131},{7,11,102},{137,11,538},{136,0,801},{134,10,1645},{132,0,70},{
-6,10,92},{6,10,188},{7,10,1269},{7,10,1524},{7,10,1876},{10,10,228},{139,10,1020
-},{4,10,459},{133,10,966},{138,0,369},{16,0,36},{140,10,330},{141,11,366},{7,0,
-721},{10,0,236},{12,0,204},{6,10,18},{7,10,932},{8,10,757},{9,10,54},{9,10,65},{
-9,10,844},{10,10,113},{10,10,315},{10,10,798},{11,10,153},{12,10,151},{12,10,392
-},{12,10,666},{142,10,248},{7,0,241},{10,0,430},{8,10,548},{9,10,532},{10,10,117
-},{11,10,351},{11,10,375},{143,10,23},{134,10,1742},{133,10,965},{133,11,566},{6
-,11,48},{135,11,63},{134,10,182},{10,10,65},{10,10,488},{138,10,497},{6,11,114},
-{7,11,1224},{7,11,1556},{136,11,3},{134,0,1817},{8,11,576},{137,11,267},{6,0,
-1078},{144,0,16},{9,10,588},{138,10,260},{138,0,1021},{5,0,406},{134,0,2022},{
-133,11,933},{6,0,69},{135,0,117},{7,0,1830},{136,11,427},{4,0,432},{135,0,824},{
-134,10,1786},{133,0,826},{139,11,67},{133,11,759},{135,10,308},{137,0,816},{133,
-0,1000},{4,0,297},{6,0,529},{7,0,152},{7,0,713},{7,0,1845},{8,0,710},{8,0,717},{
-12,0,639},{140,0,685},{7,0,423},{136,10,588},{136,10,287},{136,0,510},{134,0,
-1048},{6,0,618},{7,11,56},{7,11,1989},{8,11,337},{8,11,738},{9,11,600},{10,11,
-483},{12,11,37},{13,11,447},{142,11,92},{4,0,520},{135,0,575},{8,0,990},{138,0,
-977},{135,11,774},{9,11,347},{11,11,24},{140,11,170},{136,11,379},{140,10,290},{
-132,11,328},{4,0,321},{134,0,569},{4,11,101},{135,11,1171},{7,0,723},{7,0,1135},
-{5,11,833},{136,11,744},{7,10,719},{8,10,809},{136,10,834},{8,0,921},{136,10,796
-},{5,10,210},{6,10,213},{7,10,60},{10,10,364},{139,10,135},{5,0,397},{6,0,154},{
-7,0,676},{8,0,443},{8,0,609},{9,0,24},{9,0,325},{10,0,35},{11,0,535},{11,0,672},
-{11,0,1018},{12,0,637},{16,0,30},{5,10,607},{8,10,326},{136,10,490},{4,10,701},{
-5,10,472},{6,11,9},{6,11,397},{7,11,53},{7,11,1742},{9,10,758},{10,11,632},{11,
-11,828},{140,11,146},{135,10,380},{135,10,1947},{148,11,109},{10,10,278},{138,11
-,278},{134,0,856},{7,0,139},{4,10,386},{8,10,405},{8,10,728},{9,10,497},{11,10,
-110},{11,10,360},{15,10,37},{144,10,84},{141,0,282},{133,0,981},{5,0,288},{7,10,
-1452},{7,10,1480},{8,10,634},{140,10,472},{7,0,1890},{8,11,367},{10,11,760},{14,
-11,79},{20,11,17},{152,11,0},{4,10,524},{136,10,810},{4,0,56},{7,0,1791},{8,0,
-607},{8,0,651},{11,0,465},{11,0,835},{12,0,337},{141,0,480},{10,10,238},{141,10,
-33},{11,11,417},{12,11,223},{140,11,265},{9,0,158},{10,0,411},{140,0,261},{133,
-10,532},{133,10,997},{12,11,186},{12,11,292},{14,11,100},{146,11,70},{6,0,1403},
-{136,0,617},{134,0,1205},{139,0,563},{4,0,242},{134,0,333},{4,11,186},{5,11,157}
-,{8,11,168},{138,11,6},{132,0,369},{133,11,875},{5,10,782},{5,10,829},{134,10,
-1738},{134,0,622},{135,11,1272},{6,0,1407},{7,11,111},{136,11,581},{7,10,1823},{
-139,10,693},{7,0,160},{10,0,624},{142,0,279},{132,0,363},{10,11,589},{12,11,111}
-,{13,11,260},{14,11,82},{18,11,63},{147,11,45},{7,11,1364},{7,11,1907},{141,11,
-158},{4,11,404},{4,11,659},{135,11,675},{13,11,211},{14,11,133},{14,11,204},{15,
-11,64},{15,11,69},{15,11,114},{16,11,10},{19,11,23},{19,11,35},{19,11,39},{19,11
-,51},{19,11,71},{19,11,75},{152,11,15},{4,10,78},{5,10,96},{5,10,182},{7,10,1724
-},{7,10,1825},{10,10,394},{10,10,471},{11,10,532},{14,10,340},{145,10,88},{135,
-10,1964},{133,11,391},{11,11,887},{14,11,365},{142,11,375},{5,11,540},{6,11,1697
-},{7,11,222},{136,11,341},{134,11,78},{9,0,601},{9,0,619},{10,0,505},{10,0,732},
-{11,0,355},{140,0,139},{134,0,292},{139,0,174},{5,0,177},{6,0,616},{7,0,827},{9,
-0,525},{138,0,656},{10,0,31},{6,10,215},{7,10,1028},{7,10,1473},{7,10,1721},{9,
-10,424},{138,10,779},{135,10,584},{136,11,293},{134,0,685},{135,11,1868},{133,11
-,460},{7,0,647},{6,10,67},{7,10,1630},{9,10,354},{9,10,675},{10,10,830},{14,10,
-80},{145,10,80},{4,0,161},{133,0,631},{6,10,141},{7,10,225},{9,10,59},{9,10,607}
-,{10,10,312},{11,10,687},{12,10,555},{13,10,373},{13,10,494},{148,10,58},{7,11,
-965},{7,11,1460},{135,11,1604},{136,10,783},{134,11,388},{6,0,722},{6,0,1267},{4
-,11,511},{9,11,333},{9,11,379},{10,11,602},{11,11,441},{11,11,723},{11,11,976},{
-140,11,357},{134,0,1797},{135,0,1684},{9,0,469},{9,0,709},{12,0,512},{14,0,65},{
-17,0,12},{5,11,938},{136,11,707},{7,0,1230},{136,0,531},{10,0,229},{11,0,73},{11
-,0,376},{139,0,433},{12,0,268},{12,0,640},{142,0,119},{7,10,430},{139,10,46},{6,
-0,558},{7,0,651},{8,0,421},{9,0,0},{10,0,34},{139,0,1008},{6,0,106},{7,0,1786},{
-7,0,1821},{9,0,102},{9,0,763},{5,10,602},{7,10,2018},{137,10,418},{5,0,65},{6,0,
-416},{7,0,1720},{7,0,1924},{10,0,109},{11,0,14},{11,0,70},{11,0,569},{11,0,735},
-{15,0,153},{20,0,80},{136,10,677},{135,11,1625},{137,11,772},{136,0,595},{6,11,
-469},{7,11,1709},{138,11,515},{7,0,1832},{138,0,374},{9,0,106},{9,0,163},{9,0,
-296},{10,0,167},{10,0,172},{10,0,777},{139,0,16},{6,0,6},{7,0,81},{7,0,771},{7,0
-,1731},{9,0,405},{138,0,421},{4,11,500},{135,11,938},{5,11,68},{134,11,383},{5,0
-,881},{133,0,885},{6,0,854},{6,0,1132},{6,0,1495},{6,0,1526},{6,0,1533},{134,0,
-1577},{4,11,337},{6,11,353},{7,11,1934},{8,11,488},{137,11,429},{7,11,236},{7,11
-,1795},{8,11,259},{9,11,135},{9,11,177},{10,11,825},{11,11,115},{11,11,370},{11,
-11,405},{11,11,604},{12,11,10},{12,11,667},{12,11,669},{13,11,76},{14,11,310},{
-15,11,76},{15,11,147},{148,11,23},{5,0,142},{134,0,546},{4,11,15},{5,11,22},{6,
-11,244},{7,11,40},{7,11,200},{7,11,906},{7,11,1199},{9,11,616},{10,11,716},{11,
-11,635},{11,11,801},{140,11,458},{5,0,466},{11,0,571},{12,0,198},{13,0,283},{14,
-0,186},{15,0,21},{15,0,103},{135,10,329},{4,0,185},{5,0,257},{5,0,839},{5,0,936}
-,{9,0,399},{10,0,258},{10,0,395},{10,0,734},{11,0,1014},{12,0,23},{13,0,350},{14
-,0,150},{19,0,6},{135,11,1735},{12,11,36},{141,11,337},{5,11,598},{7,11,791},{8,
-11,108},{137,11,123},{132,10,469},{7,0,404},{7,0,1377},{7,0,1430},{7,0,2017},{8,
-0,149},{8,0,239},{8,0,512},{8,0,793},{8,0,818},{9,0,474},{9,0,595},{10,0,122},{
-10,0,565},{10,0,649},{10,0,783},{11,0,239},{11,0,295},{11,0,447},{11,0,528},{11,
-0,639},{11,0,800},{12,0,25},{12,0,77},{12,0,157},{12,0,256},{12,0,316},{12,0,390
-},{12,0,391},{12,0,395},{12,0,478},{12,0,503},{12,0,592},{12,0,680},{13,0,50},{
-13,0,53},{13,0,132},{13,0,198},{13,0,322},{13,0,415},{13,0,511},{14,0,71},{14,0,
-395},{15,0,71},{15,0,136},{17,0,123},{18,0,93},{147,0,58},{136,0,712},{134,10,
-1743},{5,10,929},{6,10,340},{8,10,376},{136,10,807},{6,0,1848},{8,0,860},{10,0,
-856},{10,0,859},{10,0,925},{10,0,941},{140,0,762},{6,0,629},{6,0,906},{9,0,810},
-{140,0,652},{5,10,218},{7,10,1610},{138,10,83},{7,10,1512},{135,10,1794},{4,0,
-377},{24,0,13},{4,11,155},{7,11,1689},{11,10,0},{144,10,78},{4,11,164},{5,11,151
-},{5,11,730},{5,11,741},{7,11,498},{7,11,870},{7,11,1542},{12,11,213},{14,11,36}
-,{14,11,391},{17,11,111},{18,11,6},{18,11,46},{18,11,151},{19,11,36},{20,11,32},
-{20,11,56},{20,11,69},{20,11,102},{21,11,4},{22,11,8},{22,11,10},{22,11,14},{150
-,11,31},{7,0,1842},{133,10,571},{4,10,455},{4,11,624},{135,11,1752},{134,0,1501}
-,{4,11,492},{5,11,451},{6,10,161},{7,10,372},{137,10,597},{132,10,349},{4,0,180}
-,{135,0,1906},{135,11,835},{141,11,70},{132,0,491},{137,10,751},{6,10,432},{139,
-10,322},{4,0,171},{138,0,234},{6,11,113},{135,11,436},{4,0,586},{7,0,1186},{138,
-0,631},{5,10,468},{10,10,325},{11,10,856},{12,10,345},{143,10,104},{5,10,223},{
-10,11,592},{10,11,753},{12,11,317},{12,11,355},{12,11,465},{12,11,469},{12,11,
-560},{12,11,578},{141,11,243},{132,10,566},{135,11,520},{4,10,59},{135,10,1394},
-{6,10,436},{139,10,481},{9,0,931},{10,0,334},{20,0,71},{4,10,48},{5,10,271},{7,
-10,953},{135,11,1878},{11,0,170},{5,10,610},{136,10,457},{133,10,755},{6,0,1587}
-,{135,10,1217},{4,10,197},{149,11,26},{133,11,585},{137,11,521},{133,0,765},{133
-,10,217},{139,11,586},{133,0,424},{9,11,752},{12,11,610},{13,11,431},{16,11,59},
-{146,11,109},{136,0,714},{7,0,685},{132,11,307},{9,0,420},{10,0,269},{10,0,285},
-{10,0,576},{11,0,397},{13,0,175},{145,0,90},{132,0,429},{133,11,964},{9,11,463},
-{138,11,595},{7,0,18},{7,0,699},{7,0,1966},{8,0,752},{9,0,273},{9,0,412},{9,0,
-703},{10,0,71},{10,0,427},{138,0,508},{4,10,165},{7,10,1398},{135,10,1829},{4,0,
-53},{5,0,186},{7,0,752},{7,0,828},{142,0,116},{8,0,575},{10,0,289},{139,0,319},{
-132,0,675},{134,0,1424},{4,11,75},{5,11,180},{6,11,500},{7,11,58},{7,11,710},{
-138,11,645},{133,11,649},{6,11,276},{7,11,282},{7,11,879},{7,11,924},{8,11,459},
-{9,11,599},{9,11,754},{11,11,574},{12,11,128},{12,11,494},{13,11,52},{13,11,301}
-,{15,11,30},{143,11,132},{6,0,647},{134,0,1095},{5,10,9},{7,10,297},{7,10,966},{
-140,10,306},{132,11,200},{134,0,1334},{5,10,146},{6,10,411},{138,10,721},{6,0,
-209},{6,0,1141},{6,0,1288},{8,0,468},{9,0,210},{11,0,36},{12,0,28},{12,0,630},{
-13,0,21},{13,0,349},{14,0,7},{145,0,13},{6,10,177},{135,10,467},{4,0,342},{135,0
-,1179},{10,11,454},{140,11,324},{4,0,928},{133,0,910},{7,0,1838},{6,11,225},{137
-,11,211},{16,0,101},{20,0,115},{20,0,118},{148,0,122},{4,0,496},{135,0,856},{4,0
-,318},{11,0,654},{7,11,718},{139,11,102},{8,11,58},{9,11,724},{11,11,809},{13,11
-,113},{145,11,72},{5,10,200},{6,11,345},{135,11,1247},{8,11,767},{8,11,803},{9,
-11,301},{137,11,903},{7,0,915},{8,0,247},{19,0,0},{7,11,1949},{136,11,674},{4,0,
-202},{5,0,382},{6,0,454},{7,0,936},{7,0,1803},{8,0,758},{9,0,375},{9,0,895},{10,
-0,743},{10,0,792},{11,0,978},{11,0,1012},{142,0,109},{7,0,1150},{7,0,1425},{7,0,
-1453},{140,0,513},{134,11,259},{138,0,791},{11,0,821},{12,0,110},{12,0,153},{18,
-0,41},{150,0,19},{134,10,481},{132,0,796},{6,0,445},{9,0,909},{136,11,254},{10,0
-,776},{13,0,345},{142,0,425},{4,10,84},{7,10,1482},{10,10,76},{138,10,142},{135,
-11,742},{6,0,578},{133,10,1015},{6,0,1387},{4,10,315},{5,10,507},{135,10,1370},{
-4,0,438},{133,0,555},{136,0,766},{133,11,248},{134,10,1722},{4,11,116},{5,11,95}
-,{5,11,445},{7,11,1688},{8,11,29},{9,11,272},{11,11,509},{139,11,915},{135,0,541
-},{133,11,543},{8,10,222},{8,10,476},{9,10,238},{11,10,516},{11,10,575},{15,10,
-109},{146,10,100},{6,0,880},{134,0,1191},{5,11,181},{136,11,41},{134,0,1506},{
-132,11,681},{7,11,25},{8,11,202},{138,11,536},{139,0,983},{137,0,768},{132,0,584
-},{9,11,423},{140,11,89},{8,11,113},{9,11,877},{10,11,554},{11,11,83},{12,11,136
-},{147,11,109},{7,10,706},{7,10,1058},{138,10,538},{133,11,976},{4,11,206},{135,
-11,746},{136,11,526},{140,0,737},{11,10,92},{11,10,196},{11,10,409},{11,10,450},
-{11,10,666},{11,10,777},{12,10,262},{13,10,385},{13,10,393},{15,10,115},{16,10,
-45},{145,10,82},{4,0,226},{4,0,326},{7,0,1770},{4,11,319},{5,11,699},{138,11,673
-},{6,10,40},{135,10,1781},{5,0,426},{8,0,30},{9,0,2},{11,0,549},{147,0,122},{6,0
-,1161},{134,0,1329},{138,10,97},{6,10,423},{7,10,665},{135,10,1210},{7,11,13},{8
-,11,226},{10,11,537},{11,11,570},{11,11,605},{11,11,799},{11,11,804},{12,11,85},
-{12,11,516},{12,11,623},{13,11,112},{13,11,361},{14,11,77},{14,11,78},{17,11,28}
-,{147,11,110},{132,11,769},{132,11,551},{132,11,728},{147,0,117},{9,11,57},{9,11
-,459},{10,11,425},{11,11,119},{12,11,184},{12,11,371},{13,11,358},{145,11,51},{5
-,11,188},{5,11,814},{8,11,10},{9,11,421},{9,11,729},{10,11,609},{139,11,689},{
-134,11,624},{135,11,298},{135,0,462},{4,0,345},{139,10,624},{136,10,574},{4,0,
-385},{7,0,265},{135,0,587},{6,0,808},{132,11,528},{133,0,398},{132,10,354},{4,0,
-347},{5,0,423},{5,0,996},{135,0,1329},{135,10,1558},{7,0,1259},{9,0,125},{139,0,
-65},{5,0,136},{6,0,136},{136,0,644},{5,11,104},{6,11,173},{135,11,1631},{135,0,
-469},{133,10,830},{4,0,278},{5,0,465},{135,0,1367},{7,11,810},{8,11,138},{8,11,
-342},{9,11,84},{10,11,193},{11,11,883},{140,11,359},{5,10,496},{135,10,203},{4,0
-,433},{133,0,719},{6,11,95},{134,10,547},{5,10,88},{137,10,239},{6,11,406},{10,
-11,409},{10,11,447},{11,11,44},{140,11,100},{134,0,1423},{7,10,650},{135,10,1310
-},{134,0,749},{135,11,1243},{135,0,1363},{6,0,381},{7,0,645},{7,0,694},{8,0,546}
-,{7,10,1076},{9,10,80},{11,10,78},{11,10,421},{11,10,534},{140,10,545},{134,11,
-1636},{135,11,1344},{12,0,277},{7,10,274},{11,10,479},{139,10,507},{6,0,705},{6,
-0,783},{6,0,1275},{6,0,1481},{4,11,282},{7,11,1034},{11,11,398},{11,11,634},{12,
-11,1},{12,11,79},{12,11,544},{14,11,237},{17,11,10},{146,11,20},{134,0,453},{4,0
-,555},{8,0,536},{10,0,288},{11,0,1005},{4,10,497},{135,10,1584},{5,11,118},{5,11
-,499},{6,11,476},{7,11,600},{7,11,888},{135,11,1096},{138,0,987},{7,0,1107},{7,
-10,261},{7,10,1115},{7,10,1354},{7,10,1588},{7,10,1705},{7,10,1902},{9,10,465},{
-10,10,248},{10,10,349},{10,10,647},{11,10,527},{11,10,660},{11,10,669},{12,10,
-529},{141,10,305},{7,11,296},{7,11,596},{8,11,560},{8,11,586},{9,11,612},{11,11,
-100},{11,11,304},{12,11,46},{13,11,89},{14,11,112},{145,11,122},{9,0,370},{138,0
-,90},{136,10,13},{132,0,860},{7,10,642},{8,10,250},{11,10,123},{11,10,137},{13,
-10,48},{142,10,95},{135,10,1429},{137,11,321},{132,0,257},{135,0,2031},{7,0,1768
-},{7,11,1599},{7,11,1723},{8,11,79},{8,11,106},{8,11,190},{8,11,302},{8,11,383},
-{9,11,119},{9,11,233},{9,11,298},{9,11,419},{9,11,471},{10,11,181},{10,11,406},{
-11,11,57},{11,11,85},{11,11,120},{11,11,177},{11,11,296},{11,11,382},{11,11,454}
-,{11,11,758},{11,11,999},{12,11,27},{12,11,98},{12,11,131},{12,11,245},{12,11,
-312},{12,11,446},{12,11,454},{13,11,25},{13,11,98},{13,11,426},{13,11,508},{14,
-11,6},{14,11,163},{14,11,272},{14,11,277},{14,11,370},{15,11,95},{15,11,138},{15
-,11,167},{17,11,18},{17,11,38},{20,11,96},{149,11,32},{5,11,722},{134,11,1759},{
-145,11,16},{6,0,1071},{134,0,1561},{10,10,545},{140,10,301},{6,0,83},{6,0,1733},
-{135,0,1389},{4,0,835},{135,0,1818},{133,11,258},{4,10,904},{133,10,794},{134,0,
-2006},{5,11,30},{7,11,495},{8,11,134},{9,11,788},{140,11,438},{135,11,2004},{137
-,0,696},{5,11,50},{6,11,439},{7,11,780},{135,11,1040},{7,11,772},{7,11,1104},{7,
-11,1647},{11,11,269},{11,11,539},{11,11,607},{11,11,627},{11,11,706},{11,11,975}
-,{12,11,248},{12,11,311},{12,11,434},{12,11,600},{12,11,622},{13,11,297},{13,11,
-367},{13,11,485},{14,11,69},{14,11,409},{143,11,108},{5,11,1},{6,11,81},{138,11,
-520},{7,0,1718},{9,0,95},{9,0,274},{10,0,279},{10,0,317},{10,0,420},{11,0,303},{
-11,0,808},{12,0,134},{12,0,367},{13,0,149},{13,0,347},{14,0,349},{14,0,406},{18,
-0,22},{18,0,89},{18,0,122},{147,0,47},{5,11,482},{8,11,98},{9,11,172},{10,11,222
-},{10,11,700},{10,11,822},{11,11,302},{11,11,778},{12,11,50},{12,11,127},{12,11,
-396},{13,11,62},{13,11,328},{14,11,122},{147,11,72},{7,10,386},{138,10,713},{6,
-10,7},{6,10,35},{7,10,147},{7,10,1069},{7,10,1568},{7,10,1575},{7,10,1917},{8,10
-,43},{8,10,208},{9,10,128},{9,10,866},{10,10,20},{11,10,981},{147,10,33},{133,0,
-26},{132,0,550},{5,11,2},{7,11,1494},{136,11,589},{6,11,512},{7,11,797},{8,11,
-253},{9,11,77},{10,11,1},{10,11,129},{10,11,225},{11,11,118},{11,11,226},{11,11,
-251},{11,11,430},{11,11,701},{11,11,974},{11,11,982},{12,11,64},{12,11,260},{12,
-11,488},{140,11,690},{7,10,893},{141,10,424},{134,0,901},{136,0,822},{4,0,902},{
-5,0,809},{134,0,122},{6,0,807},{134,0,1366},{7,0,262},{5,11,748},{134,11,553},{
-133,0,620},{4,0,34},{5,0,574},{7,0,279},{7,0,1624},{136,0,601},{9,0,170},{6,10,
-322},{9,10,552},{11,10,274},{13,10,209},{13,10,499},{14,10,85},{15,10,126},{145,
-10,70},{132,0,537},{4,11,12},{7,11,420},{7,11,522},{7,11,809},{8,11,797},{141,11
-,88},{133,0,332},{8,10,83},{8,10,742},{8,10,817},{9,10,28},{9,10,29},{9,10,885},
-{10,10,387},{11,10,633},{11,10,740},{13,10,235},{13,10,254},{15,10,143},{143,10,
-146},{6,0,1909},{9,0,964},{12,0,822},{12,0,854},{12,0,865},{12,0,910},{12,0,938}
-,{15,0,169},{15,0,208},{15,0,211},{18,0,205},{18,0,206},{18,0,220},{18,0,223},{
-152,0,24},{140,10,49},{5,11,528},{135,11,1580},{6,0,261},{8,0,182},{139,0,943},{
-134,0,1721},{4,0,933},{133,0,880},{136,11,321},{5,11,266},{9,11,290},{9,11,364},
-{10,11,293},{11,11,606},{142,11,45},{6,0,1609},{4,11,50},{6,11,510},{6,11,594},{
-9,11,121},{10,11,49},{10,11,412},{139,11,834},{7,0,895},{136,11,748},{132,11,466
-},{4,10,110},{10,10,415},{10,10,597},{142,10,206},{133,0,812},{135,11,281},{6,0,
-1890},{6,0,1902},{6,0,1916},{9,0,929},{9,0,942},{9,0,975},{9,0,984},{9,0,986},{9
-,0,1011},{9,0,1019},{12,0,804},{12,0,851},{12,0,867},{12,0,916},{12,0,923},{15,0
-,194},{15,0,204},{15,0,210},{15,0,222},{15,0,223},{15,0,229},{15,0,250},{18,0,
-179},{18,0,186},{18,0,192},{7,10,205},{135,10,2000},{132,11,667},{135,0,778},{4,
-0,137},{7,0,1178},{135,0,1520},{134,0,1314},{4,11,242},{134,11,333},{6,0,1661},{
-7,0,1975},{7,0,2009},{135,0,2011},{134,0,1591},{4,10,283},{135,10,1194},{11,0,
-820},{150,0,51},{4,11,39},{5,11,36},{7,11,1843},{8,11,407},{11,11,144},{140,11,
-523},{134,10,1720},{4,11,510},{7,11,29},{7,11,66},{7,11,1980},{10,11,487},{10,11
-,809},{146,11,9},{5,0,89},{7,0,1915},{9,0,185},{9,0,235},{10,0,64},{10,0,270},{
-10,0,403},{10,0,469},{10,0,529},{10,0,590},{11,0,140},{11,0,860},{13,0,1},{13,0,
-422},{14,0,341},{14,0,364},{17,0,93},{18,0,113},{19,0,97},{147,0,113},{133,0,695
-},{6,0,987},{134,0,1160},{5,0,6},{6,0,183},{7,0,680},{7,0,978},{7,0,1013},{7,0,
-1055},{12,0,230},{13,0,172},{146,0,29},{134,11,570},{132,11,787},{134,11,518},{6
-,0,29},{139,0,63},{132,11,516},{136,11,821},{132,0,311},{134,0,1740},{7,0,170},{
-8,0,90},{8,0,177},{8,0,415},{11,0,714},{14,0,281},{136,10,735},{134,0,1961},{135
-,11,1405},{4,11,10},{7,11,917},{139,11,786},{5,10,132},{9,10,486},{9,10,715},{10
-,10,458},{11,10,373},{11,10,668},{11,10,795},{11,10,897},{12,10,272},{12,10,424}
-,{12,10,539},{12,10,558},{14,10,245},{14,10,263},{14,10,264},{14,10,393},{142,10
-,403},{11,0,91},{13,0,129},{15,0,101},{145,0,125},{135,0,1132},{4,0,494},{6,0,74
-},{7,0,44},{7,0,407},{12,0,17},{15,0,5},{148,0,11},{133,10,379},{5,0,270},{5,11,
-684},{6,10,89},{6,10,400},{7,10,1569},{7,10,1623},{7,10,1850},{8,10,218},{8,10,
-422},{9,10,570},{138,10,626},{4,0,276},{133,0,296},{6,0,1523},{134,11,27},{6,10,
-387},{7,10,882},{141,10,111},{6,10,224},{7,10,877},{137,10,647},{135,10,790},{4,
-0,7},{5,0,90},{5,0,158},{6,0,542},{7,0,221},{7,0,1574},{9,0,490},{10,0,540},{11,
-0,443},{139,0,757},{7,0,588},{9,0,175},{138,0,530},{135,10,394},{142,11,23},{134
-,0,786},{135,0,580},{7,0,88},{136,0,627},{5,0,872},{6,0,57},{7,0,471},{9,0,447},
-{137,0,454},{6,11,342},{6,11,496},{8,11,275},{137,11,206},{4,11,909},{133,11,940
-},{6,0,735},{132,11,891},{8,0,845},{8,0,916},{135,10,1409},{5,0,31},{134,0,614},
-{11,0,458},{12,0,15},{140,0,432},{8,0,330},{140,0,477},{4,0,530},{5,0,521},{7,0,
-1200},{10,0,460},{132,11,687},{6,0,424},{135,0,1866},{9,0,569},{12,0,12},{12,0,
-81},{12,0,319},{13,0,69},{14,0,259},{16,0,87},{17,0,1},{17,0,21},{17,0,24},{18,0
-,15},{18,0,56},{18,0,59},{18,0,127},{18,0,154},{19,0,19},{148,0,31},{7,0,1302},{
-136,10,38},{134,11,253},{5,10,261},{7,10,78},{7,10,199},{8,10,815},{9,10,126},{
-138,10,342},{5,0,595},{135,0,1863},{6,11,41},{141,11,160},{5,0,13},{134,0,142},{
-6,0,97},{7,0,116},{8,0,322},{8,0,755},{9,0,548},{10,0,714},{11,0,884},{13,0,324}
-,{7,11,1304},{138,11,477},{132,10,628},{134,11,1718},{7,10,266},{136,10,804},{
-135,10,208},{7,0,1021},{6,10,79},{135,10,1519},{7,0,1472},{135,0,1554},{6,11,362
-},{146,11,51},{7,0,1071},{7,0,1541},{7,0,1767},{7,0,1806},{11,0,162},{11,0,242},
-{11,0,452},{12,0,605},{15,0,26},{144,0,44},{136,10,741},{133,11,115},{145,0,115}
-,{134,10,376},{6,0,1406},{134,0,1543},{5,11,193},{12,11,178},{13,11,130},{145,11
-,84},{135,0,1111},{8,0,1},{9,0,650},{10,0,326},{5,11,705},{137,11,606},{5,0,488}
-,{6,0,527},{7,0,489},{7,0,1636},{8,0,121},{8,0,144},{8,0,359},{9,0,193},{9,0,241
-},{9,0,336},{9,0,882},{11,0,266},{11,0,372},{11,0,944},{12,0,401},{140,0,641},{
-135,11,174},{6,0,267},{7,10,244},{7,10,632},{7,10,1609},{8,10,178},{8,10,638},{
-141,10,58},{134,0,1983},{134,0,1155},{134,0,1575},{134,0,1438},{9,0,31},{10,0,
-244},{10,0,699},{12,0,149},{141,0,497},{133,0,377},{4,11,122},{5,11,796},{5,11,
-952},{6,11,1660},{6,11,1671},{8,11,567},{9,11,687},{9,11,742},{10,11,686},{11,11
-,356},{11,11,682},{140,11,281},{145,0,101},{11,11,0},{144,11,78},{5,11,179},{5,
-10,791},{7,11,1095},{135,11,1213},{8,11,372},{9,11,122},{138,11,175},{7,10,686},
-{8,10,33},{8,10,238},{10,10,616},{11,10,467},{11,10,881},{13,10,217},{13,10,253}
-,{142,10,268},{9,0,476},{4,11,66},{7,11,722},{135,11,904},{7,11,352},{137,11,684
-},{135,0,2023},{135,0,1836},{132,10,447},{5,0,843},{144,0,35},{137,11,779},{141,
-11,35},{4,10,128},{5,10,415},{6,10,462},{7,10,294},{7,10,578},{10,10,710},{139,
-10,86},{132,0,554},{133,0,536},{136,10,587},{5,0,207},{9,0,79},{11,0,625},{145,0
-,7},{7,0,1371},{6,10,427},{138,10,692},{4,0,424},{4,10,195},{135,10,802},{8,0,
-785},{133,11,564},{135,0,336},{4,0,896},{6,0,1777},{134,11,556},{137,11,103},{
-134,10,1683},{7,11,544},{8,11,719},{138,11,61},{138,10,472},{4,11,5},{5,11,498},
-{136,11,637},{7,0,750},{9,0,223},{11,0,27},{11,0,466},{12,0,624},{14,0,265},{146
-,0,61},{12,0,238},{18,0,155},{12,11,238},{146,11,155},{151,10,28},{133,11,927},{
-12,0,383},{5,10,3},{8,10,578},{9,10,118},{10,10,705},{141,10,279},{4,11,893},{5,
-11,780},{133,11,893},{4,0,603},{133,0,661},{4,0,11},{6,0,128},{7,0,231},{7,0,
-1533},{10,0,725},{5,10,229},{5,11,238},{135,11,1350},{8,10,102},{10,10,578},{10,
-10,672},{12,10,496},{13,10,408},{14,10,121},{145,10,106},{132,0,476},{134,0,1552
-},{134,11,1729},{8,10,115},{8,10,350},{9,10,489},{10,10,128},{11,10,306},{12,10,
-373},{14,10,30},{17,10,79},{19,10,80},{150,10,55},{135,0,1807},{4,0,680},{4,11,
-60},{7,11,760},{7,11,1800},{8,11,314},{9,11,700},{139,11,487},{4,10,230},{5,10,
-702},{148,11,94},{132,11,228},{139,0,435},{9,0,20},{10,0,324},{10,0,807},{139,0,
-488},{6,10,1728},{136,11,419},{4,10,484},{18,10,26},{19,10,42},{20,10,43},{21,10
-,0},{23,10,27},{152,10,14},{135,0,1431},{133,11,828},{5,0,112},{6,0,103},{6,0,
-150},{7,0,1303},{9,0,292},{10,0,481},{20,0,13},{7,11,176},{7,11,178},{7,11,1110}
-,{10,11,481},{148,11,13},{138,0,356},{4,11,51},{5,11,39},{6,11,4},{7,11,591},{7,
-11,849},{7,11,951},{7,11,1129},{7,11,1613},{7,11,1760},{7,11,1988},{9,11,434},{
-10,11,754},{11,11,25},{11,11,37},{139,11,414},{6,0,1963},{134,0,2000},{132,10,
-633},{6,0,1244},{133,11,902},{135,11,928},{140,0,18},{138,0,204},{135,11,1173},{
-134,0,867},{4,0,708},{8,0,15},{9,0,50},{9,0,386},{11,0,18},{11,0,529},{140,0,228
-},{134,11,270},{4,0,563},{7,0,109},{7,0,592},{7,0,637},{7,0,770},{8,0,463},{9,0,
-60},{9,0,335},{9,0,904},{10,0,73},{11,0,434},{12,0,585},{13,0,331},{18,0,110},{
-148,0,60},{132,0,502},{14,11,359},{19,11,52},{148,11,47},{6,11,377},{7,11,1025},
-{9,11,613},{145,11,104},{6,0,347},{10,0,161},{5,10,70},{5,10,622},{6,10,334},{7,
-10,1032},{9,10,171},{11,10,26},{11,10,213},{11,10,637},{11,10,707},{12,10,202},{
-12,10,380},{13,10,226},{13,10,355},{14,10,222},{145,10,42},{132,11,416},{4,0,33}
-,{5,0,102},{6,0,284},{7,0,1079},{7,0,1423},{7,0,1702},{8,0,470},{9,0,554},{9,0,
-723},{11,0,333},{142,11,372},{5,11,152},{5,11,197},{7,11,340},{7,11,867},{10,11,
-548},{10,11,581},{11,11,6},{12,11,3},{12,11,19},{14,11,110},{142,11,289},{7,0,
-246},{135,0,840},{6,0,10},{8,0,571},{9,0,739},{143,0,91},{6,0,465},{7,0,1465},{4
-,10,23},{4,10,141},{5,10,313},{5,10,1014},{6,10,50},{7,10,142},{7,10,559},{8,10,
-640},{9,10,460},{9,10,783},{11,10,741},{12,10,183},{141,10,488},{133,0,626},{136
-,0,614},{138,0,237},{7,11,34},{7,11,190},{8,11,28},{8,11,141},{8,11,444},{8,11,
-811},{9,11,468},{11,11,334},{12,11,24},{12,11,386},{140,11,576},{133,11,757},{5,
-0,18},{6,0,526},{13,0,24},{13,0,110},{19,0,5},{147,0,44},{6,0,506},{134,11,506},
-{135,11,1553},{4,0,309},{5,0,462},{7,0,970},{7,0,1097},{22,0,30},{22,0,33},{7,11
-,1385},{11,11,582},{11,11,650},{11,11,901},{11,11,949},{12,11,232},{12,11,236},{
-13,11,413},{13,11,501},{146,11,116},{9,0,140},{5,10,222},{138,10,534},{6,0,1056}
-,{137,10,906},{134,0,1704},{138,10,503},{134,0,1036},{5,10,154},{7,10,1491},{10,
-10,379},{138,10,485},{4,11,383},{133,10,716},{134,0,1315},{5,0,86},{7,0,743},{9,
-0,85},{10,0,281},{10,0,432},{11,0,825},{12,0,251},{13,0,118},{142,0,378},{8,0,
-264},{4,10,91},{5,10,388},{5,10,845},{6,10,206},{6,10,252},{6,10,365},{7,10,136}
-,{7,10,531},{136,10,621},{5,0,524},{133,0,744},{5,11,277},{141,11,247},{132,11,
-435},{10,0,107},{140,0,436},{132,0,927},{10,0,123},{12,0,670},{146,0,94},{7,0,
-1149},{9,0,156},{138,0,957},{5,11,265},{6,11,212},{135,11,28},{133,0,778},{133,0
-,502},{8,0,196},{10,0,283},{139,0,406},{135,10,576},{136,11,535},{134,0,1312},{5
-,10,771},{5,10,863},{5,10,898},{6,10,1632},{6,10,1644},{134,10,1780},{5,0,855},{
-5,10,331},{135,11,1487},{132,11,702},{5,11,808},{135,11,2045},{7,0,1400},{9,0,
-446},{138,0,45},{140,10,632},{132,0,1003},{5,11,166},{8,11,739},{140,11,511},{5,
-10,107},{7,10,201},{136,10,518},{6,10,446},{135,10,1817},{134,0,1532},{134,0,
-1097},{4,11,119},{5,11,170},{5,11,447},{7,11,1708},{7,11,1889},{9,11,357},{9,11,
-719},{12,11,486},{140,11,596},{9,10,851},{141,10,510},{7,0,612},{8,0,545},{8,0,
-568},{8,0,642},{9,0,717},{10,0,541},{10,0,763},{11,0,449},{12,0,489},{13,0,153},
-{13,0,296},{14,0,138},{14,0,392},{15,0,50},{16,0,6},{16,0,12},{20,0,9},{132,10,
-504},{4,11,450},{135,11,1158},{11,0,54},{13,0,173},{13,0,294},{5,10,883},{5,10,
-975},{8,10,392},{148,10,7},{13,0,455},{15,0,99},{15,0,129},{144,0,68},{135,0,172
-},{132,11,754},{5,10,922},{134,10,1707},{134,0,1029},{17,11,39},{148,11,36},{4,0
-,568},{5,10,993},{7,10,515},{137,10,91},{132,0,732},{10,0,617},{138,11,617},{134
-,0,974},{7,0,989},{10,0,377},{12,0,363},{13,0,68},{13,0,94},{14,0,108},{142,0,
-306},{136,0,733},{132,0,428},{7,0,1789},{135,11,1062},{7,0,2015},{140,0,665},{
-135,10,1433},{5,0,287},{7,10,921},{8,10,580},{8,10,593},{8,10,630},{138,10,28},{
-138,0,806},{4,10,911},{5,10,867},{5,10,1013},{7,10,2034},{8,10,798},{136,10,813}
-,{134,0,1539},{8,11,523},{150,11,34},{135,11,740},{7,11,238},{7,11,2033},{8,11,
-120},{8,11,188},{8,11,659},{9,11,598},{10,11,466},{12,11,342},{12,11,588},{13,11
-,503},{14,11,246},{143,11,92},{7,0,1563},{141,0,182},{5,10,135},{6,10,519},{7,10
-,1722},{10,10,271},{11,10,261},{145,10,54},{14,10,338},{148,10,81},{7,0,484},{4,
-10,300},{133,10,436},{145,11,114},{6,0,1623},{134,0,1681},{133,11,640},{4,11,201
-},{7,11,1744},{8,11,602},{11,11,247},{11,11,826},{145,11,65},{8,11,164},{146,11,
-62},{6,0,1833},{6,0,1861},{136,0,878},{134,0,1569},{8,10,357},{10,10,745},{14,10
-,426},{17,10,94},{147,10,57},{12,0,93},{12,0,501},{13,0,362},{14,0,151},{15,0,40
-},{15,0,59},{16,0,46},{17,0,25},{18,0,14},{18,0,134},{19,0,25},{19,0,69},{20,0,
-16},{20,0,19},{20,0,66},{21,0,23},{21,0,25},{150,0,42},{6,0,1748},{8,0,715},{9,0
-,802},{10,0,46},{10,0,819},{13,0,308},{14,0,351},{14,0,363},{146,0,67},{132,0,
-994},{4,0,63},{133,0,347},{132,0,591},{133,0,749},{7,11,1577},{10,11,304},{10,11
-,549},{11,11,424},{12,11,365},{13,11,220},{13,11,240},{142,11,33},{133,0,366},{7
-,0,557},{12,0,547},{14,0,86},{133,10,387},{135,0,1747},{132,11,907},{5,11,100},{
-10,11,329},{12,11,416},{149,11,29},{4,10,6},{5,10,708},{136,10,75},{7,10,1351},{
-9,10,581},{10,10,639},{11,10,453},{140,10,584},{7,0,89},{132,10,303},{138,10,772
-},{132,11,176},{5,11,636},{5,11,998},{8,11,26},{137,11,358},{7,11,9},{7,11,1508}
-,{9,11,317},{10,11,210},{10,11,292},{10,11,533},{11,11,555},{12,11,526},{12,11,
-607},{13,11,263},{13,11,459},{142,11,271},{134,0,1463},{6,0,772},{6,0,1137},{139
-,11,595},{7,0,977},{139,11,66},{138,0,893},{20,0,48},{148,11,48},{5,0,824},{133,
-0,941},{134,11,295},{7,0,1543},{7,0,1785},{10,0,690},{4,10,106},{139,10,717},{7,
-0,440},{8,0,230},{139,0,106},{5,10,890},{133,10,988},{6,10,626},{142,10,431},{10
-,11,127},{141,11,27},{17,0,32},{10,10,706},{150,10,44},{132,0,216},{137,0,332},{
-4,10,698},{136,11,119},{139,11,267},{138,10,17},{11,11,526},{11,11,939},{141,11,
-290},{7,11,1167},{11,11,934},{13,11,391},{145,11,76},{139,11,39},{134,10,84},{4,
-0,914},{5,0,800},{133,0,852},{10,0,416},{141,0,115},{7,0,564},{142,0,168},{4,0,
-918},{133,0,876},{134,0,1764},{152,0,3},{4,0,92},{5,0,274},{7,11,126},{136,11,84
-},{140,10,498},{136,11,790},{8,0,501},{5,10,986},{6,10,130},{7,10,1582},{8,10,
-458},{10,10,101},{10,10,318},{138,10,823},{6,11,64},{12,11,377},{141,11,309},{5,
-0,743},{138,0,851},{4,0,49},{7,0,280},{135,0,1633},{134,0,879},{136,0,47},{7,10,
-1644},{137,10,129},{132,0,865},{134,0,1202},{9,11,34},{139,11,484},{135,10,997},
-{5,0,272},{5,0,908},{5,0,942},{8,0,197},{9,0,47},{11,0,538},{139,0,742},{6,11,
-1700},{7,11,26},{7,11,293},{7,11,382},{7,11,1026},{7,11,1087},{7,11,2027},{8,11,
-24},{8,11,114},{8,11,252},{8,11,727},{8,11,729},{9,11,30},{9,11,199},{9,11,231},
-{9,11,251},{9,11,334},{9,11,361},{9,11,488},{9,11,712},{10,11,55},{10,11,60},{10
-,11,232},{10,11,332},{10,11,384},{10,11,396},{10,11,504},{10,11,542},{10,11,652}
-,{11,11,20},{11,11,48},{11,11,207},{11,11,291},{11,11,298},{11,11,342},{11,11,
-365},{11,11,394},{11,11,620},{11,11,705},{11,11,1017},{12,11,123},{12,11,340},{
-12,11,406},{12,11,643},{13,11,61},{13,11,269},{13,11,311},{13,11,319},{13,11,486
-},{14,11,234},{15,11,62},{15,11,85},{16,11,71},{18,11,119},{148,11,105},{6,0,
-1455},{150,11,37},{135,10,1927},{135,0,1911},{137,0,891},{7,10,1756},{137,10,98}
-,{7,10,1046},{139,10,160},{132,0,761},{6,11,379},{7,11,270},{7,11,1116},{8,11,
-176},{8,11,183},{9,11,432},{9,11,661},{12,11,247},{12,11,617},{146,11,125},{6,10
-,45},{7,10,433},{8,10,129},{9,10,21},{10,10,392},{11,10,79},{12,10,499},{13,10,
-199},{141,10,451},{4,0,407},{5,11,792},{133,11,900},{132,0,560},{135,0,183},{13,
-0,490},{7,10,558},{136,10,353},{4,0,475},{6,0,731},{11,0,35},{13,0,71},{13,0,177
-},{14,0,422},{133,10,785},{8,10,81},{9,10,189},{9,10,201},{11,10,478},{11,10,712
-},{141,10,338},{4,0,418},{4,0,819},{133,10,353},{151,10,26},{4,11,901},{133,11,
-776},{132,0,575},{7,0,818},{16,0,92},{17,0,14},{17,0,45},{18,0,75},{148,0,18},{6
-,0,222},{7,0,636},{7,0,1620},{8,0,409},{9,0,693},{139,0,77},{6,10,25},{7,10,855}
-,{7,10,1258},{144,10,32},{6,0,1880},{6,0,1887},{6,0,1918},{6,0,1924},{9,0,967},{
-9,0,995},{9,0,1015},{12,0,826},{12,0,849},{12,0,857},{12,0,860},{12,0,886},{12,0
-,932},{18,0,228},{18,0,231},{146,0,240},{134,0,633},{134,0,1308},{4,11,37},{5,11
-,334},{135,11,1253},{10,0,86},{4,10,4},{7,10,1118},{7,10,1320},{7,10,1706},{8,10
-,277},{9,10,622},{11,10,724},{12,10,350},{12,10,397},{13,10,28},{13,10,159},{15,
-10,89},{18,10,5},{19,10,9},{20,10,34},{150,10,47},{132,11,508},{137,11,448},{12,
-11,107},{146,11,31},{132,0,817},{134,0,663},{133,0,882},{134,0,914},{132,11,540}
-,{132,11,533},{136,11,608},{8,0,885},{138,0,865},{132,0,426},{6,0,58},{7,0,745},
-{7,0,1969},{8,0,399},{8,0,675},{9,0,479},{9,0,731},{10,0,330},{10,0,593},{10,0,
-817},{11,0,32},{11,0,133},{11,0,221},{145,0,68},{134,10,255},{7,0,102},{137,0,
-538},{137,10,216},{7,11,253},{136,11,549},{135,11,912},{9,10,183},{139,10,286},{
-11,10,956},{151,10,3},{8,11,527},{18,11,60},{147,11,24},{4,10,536},{7,10,1141},{
-10,10,723},{139,10,371},{133,11,920},{7,0,876},{135,10,285},{135,10,560},{132,10
-,690},{142,11,126},{11,10,33},{12,10,571},{149,10,1},{133,0,566},{9,0,139},{10,0
-,399},{11,0,469},{12,0,634},{13,0,223},{132,11,483},{6,0,48},{135,0,63},{18,0,12
-},{7,10,1862},{12,10,491},{12,10,520},{13,10,383},{142,10,244},{135,11,1665},{
-132,11,448},{9,11,495},{146,11,104},{6,0,114},{7,0,1224},{7,0,1556},{136,0,3},{4
-,10,190},{133,10,554},{8,0,576},{9,0,267},{133,10,1001},{133,10,446},{133,0,933}
-,{139,11,1009},{8,11,653},{13,11,93},{147,11,14},{6,0,692},{6,0,821},{134,0,1077
-},{5,11,172},{135,11,801},{138,0,752},{4,0,375},{134,0,638},{134,0,1011},{140,11
-,540},{9,0,96},{133,11,260},{139,11,587},{135,10,1231},{12,0,30},{13,0,148},{14,
-0,87},{14,0,182},{16,0,42},{20,0,70},{132,10,304},{6,0,1398},{7,0,56},{7,0,1989}
-,{8,0,337},{8,0,738},{9,0,600},{12,0,37},{13,0,447},{142,0,92},{138,0,666},{5,0,
-394},{7,0,487},{136,0,246},{9,0,437},{6,10,53},{6,10,199},{7,10,1408},{8,10,32},
-{8,10,93},{10,10,397},{10,10,629},{11,10,593},{11,10,763},{13,10,326},{145,10,35
-},{134,10,105},{9,0,320},{10,0,506},{138,10,794},{7,11,57},{8,11,167},{8,11,375}
-,{9,11,82},{9,11,561},{10,11,620},{10,11,770},{11,10,704},{141,10,396},{6,0,1003
-},{5,10,114},{5,10,255},{141,10,285},{7,0,866},{135,0,1163},{133,11,531},{132,0,
-328},{7,10,2035},{8,10,19},{9,10,89},{138,10,831},{8,11,194},{136,11,756},{136,0
-,1000},{5,11,453},{134,11,441},{4,0,101},{5,0,833},{7,0,1171},{136,0,744},{133,0
-,726},{136,10,746},{138,0,176},{6,0,9},{6,0,397},{7,0,53},{7,0,1742},{10,0,632},
-{11,0,828},{140,0,146},{135,11,22},{145,11,64},{132,0,839},{11,0,417},{12,0,223}
-,{140,0,265},{4,11,102},{7,11,815},{7,11,1699},{139,11,964},{5,10,955},{136,10,
-814},{6,0,1931},{6,0,2007},{18,0,246},{146,0,247},{8,0,198},{11,0,29},{140,0,534
-},{135,0,1771},{6,0,846},{7,11,1010},{11,11,733},{11,11,759},{12,11,563},{13,11,
-34},{14,11,101},{18,11,45},{146,11,129},{4,0,186},{5,0,157},{8,0,168},{138,0,6},
-{132,11,899},{133,10,56},{148,10,100},{133,0,875},{5,0,773},{5,0,991},{6,0,1635}
-,{134,0,1788},{6,0,1274},{9,0,477},{141,0,78},{4,0,639},{7,0,111},{8,0,581},{12,
-0,177},{6,11,52},{9,11,104},{9,11,559},{10,10,4},{10,10,13},{11,10,638},{12,11,
-308},{19,11,87},{148,10,57},{132,11,604},{4,11,301},{133,10,738},{133,10,758},{
-134,0,1747},{7,11,1440},{11,11,854},{11,11,872},{11,11,921},{12,11,551},{13,11,
-472},{142,11,367},{7,0,1364},{7,0,1907},{141,0,158},{134,0,873},{4,0,404},{4,0,
-659},{7,0,552},{135,0,675},{135,10,1112},{139,10,328},{7,11,508},{137,10,133},{
-133,0,391},{5,10,110},{6,10,169},{6,10,1702},{7,10,400},{8,10,538},{9,10,184},{9
-,10,524},{140,10,218},{6,11,310},{7,11,1849},{8,11,72},{8,11,272},{8,11,431},{9,
-11,12},{9,11,351},{10,11,563},{10,11,630},{10,11,810},{11,11,367},{11,11,599},{
-11,11,686},{140,11,672},{5,0,540},{6,0,1697},{136,0,668},{132,0,883},{134,0,78},
-{12,0,628},{18,0,79},{6,10,133},{9,10,353},{139,10,993},{6,11,181},{7,11,537},{8
-,11,64},{9,11,127},{10,11,496},{12,11,510},{141,11,384},{6,10,93},{7,10,1422},{7
-,10,1851},{8,10,673},{9,10,529},{140,10,43},{137,10,371},{134,0,1460},{134,0,962
-},{4,11,244},{135,11,233},{9,10,25},{10,10,467},{138,10,559},{4,10,335},{135,10,
-942},{133,0,460},{135,11,334},{134,11,1650},{4,0,199},{139,0,34},{5,10,601},{8,
-10,39},{10,10,773},{11,10,84},{12,10,205},{142,10,1},{133,10,870},{134,0,388},{
-14,0,474},{148,0,120},{133,11,369},{139,0,271},{4,0,511},{9,0,333},{9,0,379},{10
-,0,602},{11,0,441},{11,0,723},{11,0,976},{12,0,357},{132,10,181},{134,0,608},{
-134,10,1652},{22,0,49},{137,11,338},{140,0,988},{134,0,617},{5,0,938},{136,0,707
-},{132,10,97},{5,10,147},{6,10,286},{7,10,1362},{141,10,176},{6,0,756},{134,0,
-1149},{133,11,896},{6,10,375},{7,10,169},{7,10,254},{136,10,780},{134,0,1583},{
-135,10,1447},{139,0,285},{7,11,1117},{8,11,393},{136,11,539},{135,0,344},{6,0,
-469},{7,0,1709},{138,0,515},{5,10,629},{135,10,1549},{5,11,4},{5,11,810},{6,11,
-13},{6,11,538},{6,11,1690},{6,11,1726},{7,11,499},{7,11,1819},{8,11,148},{8,11,
-696},{8,11,791},{12,11,125},{13,11,54},{143,11,9},{135,11,1268},{137,0,404},{132
-,0,500},{5,0,68},{134,0,383},{11,0,216},{139,0,340},{4,11,925},{5,11,803},{8,11,
-698},{138,11,828},{4,0,337},{6,0,353},{7,0,1934},{8,0,488},{137,0,429},{7,0,236}
-,{7,0,1795},{8,0,259},{9,0,135},{9,0,177},{9,0,860},{10,0,825},{11,0,115},{11,0,
-370},{11,0,405},{11,0,604},{12,0,10},{12,0,667},{12,0,669},{13,0,76},{14,0,310},
-{15,0,76},{15,0,147},{148,0,23},{4,0,15},{4,0,490},{5,0,22},{6,0,244},{7,0,40},{
-7,0,200},{7,0,906},{7,0,1199},{9,0,616},{10,0,716},{11,0,635},{11,0,801},{140,0,
-458},{12,0,756},{132,10,420},{134,0,1504},{6,0,757},{133,11,383},{6,0,1266},{135
-,0,1735},{5,0,598},{7,0,791},{8,0,108},{9,0,123},{7,10,1570},{140,10,542},{142,
-11,410},{9,11,660},{138,11,347}
-};
-
-#if defined(__cplusplus) || defined(c_plusplus)
-} /* extern "C" */
-#endif
-
-#endif /* BROTLI_ENC_STATIC_DICT_LUT_H_ */
diff --git a/BaseTools/Source/C/BrotliCompress/enc/utf8_util.h b/BaseTools/Source/C/BrotliCompress/enc/utf8_util.h
deleted file mode 100644
index 8d1cf5555974..000000000000
--- a/BaseTools/Source/C/BrotliCompress/enc/utf8_util.h
+++ /dev/null
@@ -1,32 +0,0 @@
-/* Copyright 2013 Google Inc. All Rights Reserved.
-
- Distributed under MIT license.
- See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
-*/
-
-/* Heuristics for deciding about the UTF8-ness of strings. */
-
-#ifndef BROTLI_ENC_UTF8_UTIL_H_
-#define BROTLI_ENC_UTF8_UTIL_H_
-
-#include "../common/platform.h"
-#include <brotli/types.h>
-
-#if defined(__cplusplus) || defined(c_plusplus)
-extern "C" {
-#endif
-
-static const double kMinUTF8Ratio = 0.75;
-
-/* Returns 1 if at least min_fraction of the bytes between pos and
- pos + length in the (data, mask) ring-buffer is UTF8-encoded, otherwise
- returns 0. */
-BROTLI_INTERNAL BROTLI_BOOL BrotliIsMostlyUTF8(
- const uint8_t* data, const size_t pos, const size_t mask,
- const size_t length, const double min_fraction);
-
-#if defined(__cplusplus) || defined(c_plusplus)
-} /* extern "C" */
-#endif
-
-#endif /* BROTLI_ENC_UTF8_UTIL_H_ */
diff --git a/BaseTools/Source/C/BrotliCompress/enc/write_bits.h b/BaseTools/Source/C/BrotliCompress/enc/write_bits.h
deleted file mode 100644
index 1269b2895077..000000000000
--- a/BaseTools/Source/C/BrotliCompress/enc/write_bits.h
+++ /dev/null
@@ -1,85 +0,0 @@
-/* Copyright 2010 Google Inc. All Rights Reserved.
-
- Distributed under MIT license.
- See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
-*/
-
-/* Write bits into a byte array. */
-
-#ifndef BROTLI_ENC_WRITE_BITS_H_
-#define BROTLI_ENC_WRITE_BITS_H_
-
-#include "../common/platform.h"
-#include <brotli/types.h>
-
-#if defined(__cplusplus) || defined(c_plusplus)
-extern "C" {
-#endif
-
-/*#define BIT_WRITER_DEBUG */
-
-/* This function writes bits into bytes in increasing addresses, and within
- a byte least-significant-bit first.
-
- The function can write up to 56 bits in one go with WriteBits
- Example: let's assume that 3 bits (Rs below) have been written already:
-
- BYTE-0 BYTE+1 BYTE+2
-
- 0000 0RRR 0000 0000 0000 0000
-
- Now, we could write 5 or less bits in MSB by just sifting by 3
- and OR'ing to BYTE-0.
-
- For n bits, we take the last 5 bits, OR that with high bits in BYTE-0,
- and locate the rest in BYTE+1, BYTE+2, etc. */
-static BROTLI_INLINE void BrotliWriteBits(size_t n_bits,
- uint64_t bits,
- size_t* BROTLI_RESTRICT pos,
- uint8_t* BROTLI_RESTRICT array) {
-#if defined(BROTLI_LITTLE_ENDIAN)
- /* This branch of the code can write up to 56 bits at a time,
- 7 bits are lost by being perhaps already in *p and at least
- 1 bit is needed to initialize the bit-stream ahead (i.e. if 7
- bits are in *p and we write 57 bits, then the next write will
- access a byte that was never initialized). */
- uint8_t* p = &array[*pos >> 3];
- uint64_t v = (uint64_t)(*p); /* Zero-extend 8 to 64 bits. */
- BROTLI_LOG(("WriteBits %2d 0x%08x%08x %10d\n", (int)n_bits,
- (uint32_t)(bits >> 32), (uint32_t)(bits & 0xFFFFFFFF),
- (int)*pos));
- BROTLI_DCHECK((bits >> n_bits) == 0);
- BROTLI_DCHECK(n_bits <= 56);
- v |= bits << (*pos & 7);
- BROTLI_UNALIGNED_STORE64LE(p, v); /* Set some bits. */
- *pos += n_bits;
-#else
- /* implicit & 0xFF is assumed for uint8_t arithmetics */
- uint8_t* array_pos = &array[*pos >> 3];
- const size_t bits_reserved_in_first_byte = (*pos & 7);
- size_t bits_left_to_write;
- bits <<= bits_reserved_in_first_byte;
- *array_pos++ |= (uint8_t)bits;
- for (bits_left_to_write = n_bits + bits_reserved_in_first_byte;
- bits_left_to_write >= 9;
- bits_left_to_write -= 8) {
- bits >>= 8;
- *array_pos++ = (uint8_t)bits;
- }
- *array_pos = 0;
- *pos += n_bits;
-#endif
-}
-
-static BROTLI_INLINE void BrotliWriteBitsPrepareStorage(
- size_t pos, uint8_t* array) {
- BROTLI_LOG(("WriteBitsPrepareStorage %10d\n", (int)pos));
- BROTLI_DCHECK((pos & 7) == 0);
- array[pos >> 3] = 0;
-}
-
-#if defined(__cplusplus) || defined(c_plusplus)
-} /* extern "C" */
-#endif
-
-#endif /* BROTLI_ENC_WRITE_BITS_H_ */
diff --git a/BaseTools/Source/C/BrotliCompress/include/brotli/decode.h b/BaseTools/Source/C/BrotliCompress/include/brotli/decode.h
deleted file mode 100644
index 2cd17250d9d8..000000000000
--- a/BaseTools/Source/C/BrotliCompress/include/brotli/decode.h
+++ /dev/null
@@ -1,344 +0,0 @@
-/* Copyright 2013 Google Inc. All Rights Reserved.
-
- Distributed under MIT license.
- See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
-*/
-
-/**
- * @file
- * API for Brotli decompression.
- */
-
-#ifndef BROTLI_DEC_DECODE_H_
-#define BROTLI_DEC_DECODE_H_
-
-#include <brotli/port.h>
-#include <brotli/types.h>
-
-#if defined(__cplusplus) || defined(c_plusplus)
-extern "C" {
-#endif
-
-/**
- * Opaque structure that holds decoder state.
- *
- * Allocated and initialized with ::BrotliDecoderCreateInstance.
- * Cleaned up and deallocated with ::BrotliDecoderDestroyInstance.
- */
-typedef struct BrotliDecoderStateStruct BrotliDecoderState;
-
-/**
- * Result type for ::BrotliDecoderDecompress and
- * ::BrotliDecoderDecompressStream functions.
- */
-typedef enum {
- /** Decoding error, e.g. corrupted input or memory allocation problem. */
- BROTLI_DECODER_RESULT_ERROR = 0,
- /** Decoding successfully completed. */
- BROTLI_DECODER_RESULT_SUCCESS = 1,
- /** Partially done; should be called again with more input. */
- BROTLI_DECODER_RESULT_NEEDS_MORE_INPUT = 2,
- /** Partially done; should be called again with more output. */
- BROTLI_DECODER_RESULT_NEEDS_MORE_OUTPUT = 3
-} BrotliDecoderResult;
-
-/**
- * Template that evaluates items of ::BrotliDecoderErrorCode.
- *
- * Example: @code {.cpp}
- * // Log Brotli error code.
- * switch (brotliDecoderErrorCode) {
- * #define CASE_(PREFIX, NAME, CODE) \
- * case BROTLI_DECODER ## PREFIX ## NAME: \
- * LOG(INFO) << "error code:" << #NAME; \
- * break;
- * #define NEWLINE_
- * BROTLI_DECODER_ERROR_CODES_LIST(CASE_, NEWLINE_)
- * #undef CASE_
- * #undef NEWLINE_
- * default: LOG(FATAL) << "unknown brotli error code";
- * }
- * @endcode
- */
-#define BROTLI_DECODER_ERROR_CODES_LIST(BROTLI_ERROR_CODE, SEPARATOR) \
- BROTLI_ERROR_CODE(_, NO_ERROR, 0) SEPARATOR \
- /* Same as BrotliDecoderResult values */ \
- BROTLI_ERROR_CODE(_, SUCCESS, 1) SEPARATOR \
- BROTLI_ERROR_CODE(_, NEEDS_MORE_INPUT, 2) SEPARATOR \
- BROTLI_ERROR_CODE(_, NEEDS_MORE_OUTPUT, 3) SEPARATOR \
- \
- /* Errors caused by invalid input */ \
- BROTLI_ERROR_CODE(_ERROR_FORMAT_, EXUBERANT_NIBBLE, -1) SEPARATOR \
- BROTLI_ERROR_CODE(_ERROR_FORMAT_, RESERVED, -2) SEPARATOR \
- BROTLI_ERROR_CODE(_ERROR_FORMAT_, EXUBERANT_META_NIBBLE, -3) SEPARATOR \
- BROTLI_ERROR_CODE(_ERROR_FORMAT_, SIMPLE_HUFFMAN_ALPHABET, -4) SEPARATOR \
- BROTLI_ERROR_CODE(_ERROR_FORMAT_, SIMPLE_HUFFMAN_SAME, -5) SEPARATOR \
- BROTLI_ERROR_CODE(_ERROR_FORMAT_, CL_SPACE, -6) SEPARATOR \
- BROTLI_ERROR_CODE(_ERROR_FORMAT_, HUFFMAN_SPACE, -7) SEPARATOR \
- BROTLI_ERROR_CODE(_ERROR_FORMAT_, CONTEXT_MAP_REPEAT, -8) SEPARATOR \
- BROTLI_ERROR_CODE(_ERROR_FORMAT_, BLOCK_LENGTH_1, -9) SEPARATOR \
- BROTLI_ERROR_CODE(_ERROR_FORMAT_, BLOCK_LENGTH_2, -10) SEPARATOR \
- BROTLI_ERROR_CODE(_ERROR_FORMAT_, TRANSFORM, -11) SEPARATOR \
- BROTLI_ERROR_CODE(_ERROR_FORMAT_, DICTIONARY, -12) SEPARATOR \
- BROTLI_ERROR_CODE(_ERROR_FORMAT_, WINDOW_BITS, -13) SEPARATOR \
- BROTLI_ERROR_CODE(_ERROR_FORMAT_, PADDING_1, -14) SEPARATOR \
- BROTLI_ERROR_CODE(_ERROR_FORMAT_, PADDING_2, -15) SEPARATOR \
- BROTLI_ERROR_CODE(_ERROR_FORMAT_, DISTANCE, -16) SEPARATOR \
- \
- /* -17..-18 codes are reserved */ \
- \
- BROTLI_ERROR_CODE(_ERROR_, DICTIONARY_NOT_SET, -19) SEPARATOR \
- BROTLI_ERROR_CODE(_ERROR_, INVALID_ARGUMENTS, -20) SEPARATOR \
- \
- /* Memory allocation problems */ \
- BROTLI_ERROR_CODE(_ERROR_ALLOC_, CONTEXT_MODES, -21) SEPARATOR \
- /* Literal, insert and distance trees together */ \
- BROTLI_ERROR_CODE(_ERROR_ALLOC_, TREE_GROUPS, -22) SEPARATOR \
- /* -23..-24 codes are reserved for distinct tree groups */ \
- BROTLI_ERROR_CODE(_ERROR_ALLOC_, CONTEXT_MAP, -25) SEPARATOR \
- BROTLI_ERROR_CODE(_ERROR_ALLOC_, RING_BUFFER_1, -26) SEPARATOR \
- BROTLI_ERROR_CODE(_ERROR_ALLOC_, RING_BUFFER_2, -27) SEPARATOR \
- /* -28..-29 codes are reserved for dynamic ring-buffer allocation */ \
- BROTLI_ERROR_CODE(_ERROR_ALLOC_, BLOCK_TYPE_TREES, -30) SEPARATOR \
- \
- /* "Impossible" states */ \
- BROTLI_ERROR_CODE(_ERROR_, UNREACHABLE, -31)
-
-/**
- * Error code for detailed logging / production debugging.
- *
- * See ::BrotliDecoderGetErrorCode and ::BROTLI_LAST_ERROR_CODE.
- */
-typedef enum {
-#define BROTLI_COMMA_ ,
-#define BROTLI_ERROR_CODE_ENUM_ITEM_(PREFIX, NAME, CODE) \
- BROTLI_DECODER ## PREFIX ## NAME = CODE
- BROTLI_DECODER_ERROR_CODES_LIST(BROTLI_ERROR_CODE_ENUM_ITEM_, BROTLI_COMMA_)
-} BrotliDecoderErrorCode;
-#undef BROTLI_ERROR_CODE_ENUM_ITEM_
-#undef BROTLI_COMMA_
-
-/**
- * The value of the last error code, negative integer.
- *
- * All other error code values are in the range from ::BROTLI_LAST_ERROR_CODE
- * to @c -1. There are also 4 other possible non-error codes @c 0 .. @c 3 in
- * ::BrotliDecoderErrorCode enumeration.
- */
-#define BROTLI_LAST_ERROR_CODE BROTLI_DECODER_ERROR_UNREACHABLE
-
-/** Options to be used with ::BrotliDecoderSetParameter. */
-typedef enum BrotliDecoderParameter {
- /**
- * Disable "canny" ring buffer allocation strategy.
- *
- * Ring buffer is allocated according to window size, despite the real size of
- * the content.
- */
- BROTLI_DECODER_PARAM_DISABLE_RING_BUFFER_REALLOCATION = 0,
- /**
- * Flag that determines if "Large Window Brotli" is used.
- */
- BROTLI_DECODER_PARAM_LARGE_WINDOW = 1
-} BrotliDecoderParameter;
-
-/**
- * Sets the specified parameter to the given decoder instance.
- *
- * @param state decoder instance
- * @param param parameter to set
- * @param value new parameter value
- * @returns ::BROTLI_FALSE if parameter is unrecognized, or value is invalid
- * @returns ::BROTLI_TRUE if value is accepted
- */
-BROTLI_DEC_API BROTLI_BOOL BrotliDecoderSetParameter(
- BrotliDecoderState* state, BrotliDecoderParameter param, uint32_t value);
-
-/**
- * Creates an instance of ::BrotliDecoderState and initializes it.
- *
- * The instance can be used once for decoding and should then be destroyed with
- * ::BrotliDecoderDestroyInstance, it cannot be reused for a new decoding
- * session.
- *
- * @p alloc_func and @p free_func @b MUST be both zero or both non-zero. In the
- * case they are both zero, default memory allocators are used. @p opaque is
- * passed to @p alloc_func and @p free_func when they are called. @p free_func
- * has to return without doing anything when asked to free a NULL pointer.
- *
- * @param alloc_func custom memory allocation function
- * @param free_func custom memory free function
- * @param opaque custom memory manager handle
- * @returns @c 0 if instance can not be allocated or initialized
- * @returns pointer to initialized ::BrotliDecoderState otherwise
- */
-BROTLI_DEC_API BrotliDecoderState* BrotliDecoderCreateInstance(
- brotli_alloc_func alloc_func, brotli_free_func free_func, void* opaque);
-
-/**
- * Deinitializes and frees ::BrotliDecoderState instance.
- *
- * @param state decoder instance to be cleaned up and deallocated
- */
-BROTLI_DEC_API void BrotliDecoderDestroyInstance(BrotliDecoderState* state);
-
-/**
- * Performs one-shot memory-to-memory decompression.
- *
- * Decompresses the data in @p encoded_buffer into @p decoded_buffer, and sets
- * @p *decoded_size to the decompressed length.
- *
- * @param encoded_size size of @p encoded_buffer
- * @param encoded_buffer compressed data buffer with at least @p encoded_size
- * addressable bytes
- * @param[in, out] decoded_size @b in: size of @p decoded_buffer; \n
- * @b out: length of decompressed data written to
- * @p decoded_buffer
- * @param decoded_buffer decompressed data destination buffer
- * @returns ::BROTLI_DECODER_RESULT_ERROR if input is corrupted, memory
- * allocation failed, or @p decoded_buffer is not large enough;
- * @returns ::BROTLI_DECODER_RESULT_SUCCESS otherwise
- */
-BROTLI_DEC_API BrotliDecoderResult BrotliDecoderDecompress(
- size_t encoded_size,
- const uint8_t encoded_buffer[BROTLI_ARRAY_PARAM(encoded_size)],
- size_t* decoded_size,
- uint8_t decoded_buffer[BROTLI_ARRAY_PARAM(*decoded_size)]);
-
-/**
- * Decompresses the input stream to the output stream.
- *
- * The values @p *available_in and @p *available_out must specify the number of
- * bytes addressable at @p *next_in and @p *next_out respectively.
- * When @p *available_out is @c 0, @p next_out is allowed to be @c NULL.
- *
- * After each call, @p *available_in will be decremented by the amount of input
- * bytes consumed, and the @p *next_in pointer will be incremented by that
- * amount. Similarly, @p *available_out will be decremented by the amount of
- * output bytes written, and the @p *next_out pointer will be incremented by
- * that amount.
- *
- * @p total_out, if it is not a null-pointer, will be set to the number
- * of bytes decompressed since the last @p state initialization.
- *
- * @note Input is never overconsumed, so @p next_in and @p available_in could be
- * passed to the next consumer after decoding is complete.
- *
- * @param state decoder instance
- * @param[in, out] available_in @b in: amount of available input; \n
- * @b out: amount of unused input
- * @param[in, out] next_in pointer to the next compressed byte
- * @param[in, out] available_out @b in: length of output buffer; \n
- * @b out: remaining size of output buffer
- * @param[in, out] next_out output buffer cursor;
- * can be @c NULL if @p available_out is @c 0
- * @param[out] total_out number of bytes decompressed so far; can be @c NULL
- * @returns ::BROTLI_DECODER_RESULT_ERROR if input is corrupted, memory
- * allocation failed, arguments were invalid, etc.;
- * use ::BrotliDecoderGetErrorCode to get detailed error code
- * @returns ::BROTLI_DECODER_RESULT_NEEDS_MORE_INPUT decoding is blocked until
- * more input data is provided
- * @returns ::BROTLI_DECODER_RESULT_NEEDS_MORE_OUTPUT decoding is blocked until
- * more output space is provided
- * @returns ::BROTLI_DECODER_RESULT_SUCCESS decoding is finished, no more
- * input might be consumed and no more output will be produced
- */
-BROTLI_DEC_API BrotliDecoderResult BrotliDecoderDecompressStream(
- BrotliDecoderState* state, size_t* available_in, const uint8_t** next_in,
- size_t* available_out, uint8_t** next_out, size_t* total_out);
-
-/**
- * Checks if decoder has more output.
- *
- * @param state decoder instance
- * @returns ::BROTLI_TRUE, if decoder has some unconsumed output
- * @returns ::BROTLI_FALSE otherwise
- */
-BROTLI_DEC_API BROTLI_BOOL BrotliDecoderHasMoreOutput(
- const BrotliDecoderState* state);
-
-/**
- * Acquires pointer to internal output buffer.
- *
- * This method is used to make language bindings easier and more efficient:
- * -# push data to ::BrotliDecoderDecompressStream,
- * until ::BROTLI_DECODER_RESULT_NEEDS_MORE_OUTPUT is reported
- * -# use ::BrotliDecoderTakeOutput to peek bytes and copy to language-specific
- * entity
- *
- * Also this could be useful if there is an output stream that is able to
- * consume all the provided data (e.g. when data is saved to file system).
- *
- * @attention After every call to ::BrotliDecoderTakeOutput @p *size bytes of
- * output are considered consumed for all consecutive calls to the
- * instance methods; returned pointer becomes invalidated as well.
- *
- * @note Decoder output is not guaranteed to be contiguous. This means that
- * after the size-unrestricted call to ::BrotliDecoderTakeOutput,
- * immediate next call to ::BrotliDecoderTakeOutput may return more data.
- *
- * @param state decoder instance
- * @param[in, out] size @b in: number of bytes caller is ready to take, @c 0 if
- * any amount could be handled; \n
- * @b out: amount of data pointed by returned pointer and
- * considered consumed; \n
- * out value is never greater than in value, unless it is @c 0
- * @returns pointer to output data
- */
-BROTLI_DEC_API const uint8_t* BrotliDecoderTakeOutput(
- BrotliDecoderState* state, size_t* size);
-
-/**
- * Checks if instance has already consumed input.
- *
- * Instance that returns ::BROTLI_FALSE is considered "fresh" and could be
- * reused.
- *
- * @param state decoder instance
- * @returns ::BROTLI_TRUE if decoder has already used some input bytes
- * @returns ::BROTLI_FALSE otherwise
- */
-BROTLI_DEC_API BROTLI_BOOL BrotliDecoderIsUsed(const BrotliDecoderState* state);
-
-/**
- * Checks if decoder instance reached the final state.
- *
- * @param state decoder instance
- * @returns ::BROTLI_TRUE if decoder is in a state where it reached the end of
- * the input and produced all of the output
- * @returns ::BROTLI_FALSE otherwise
- */
-BROTLI_DEC_API BROTLI_BOOL BrotliDecoderIsFinished(
- const BrotliDecoderState* state);
-
-/**
- * Acquires a detailed error code.
- *
- * Should be used only after ::BrotliDecoderDecompressStream returns
- * ::BROTLI_DECODER_RESULT_ERROR.
- *
- * See also ::BrotliDecoderErrorString
- *
- * @param state decoder instance
- * @returns last saved error code
- */
-BROTLI_DEC_API BrotliDecoderErrorCode BrotliDecoderGetErrorCode(
- const BrotliDecoderState* state);
-
-/**
- * Converts error code to a c-string.
- */
-BROTLI_DEC_API const char* BrotliDecoderErrorString(BrotliDecoderErrorCode c);
-
-/**
- * Gets a decoder library version.
- *
- * Look at BROTLI_VERSION for more information.
- */
-BROTLI_DEC_API uint32_t BrotliDecoderVersion(void);
-
-#if defined(__cplusplus) || defined(c_plusplus)
-} /* extern "C" */
-#endif
-
-#endif /* BROTLI_DEC_DECODE_H_ */
diff --git a/BaseTools/Source/C/BrotliCompress/include/brotli/encode.h b/BaseTools/Source/C/BrotliCompress/include/brotli/encode.h
deleted file mode 100644
index b26fa4278c10..000000000000
--- a/BaseTools/Source/C/BrotliCompress/include/brotli/encode.h
+++ /dev/null
@@ -1,427 +0,0 @@
-/* Copyright 2013 Google Inc. All Rights Reserved.
-
- Distributed under MIT license.
- See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
-*/
-
-/**
- * @file
- * API for Brotli compression.
- */
-
-#ifndef BROTLI_ENC_ENCODE_H_
-#define BROTLI_ENC_ENCODE_H_
-
-#include <brotli/port.h>
-#include <brotli/types.h>
-
-#if defined(__cplusplus) || defined(c_plusplus)
-extern "C" {
-#endif
-
-/** Minimal value for ::BROTLI_PARAM_LGWIN parameter. */
-#define BROTLI_MIN_WINDOW_BITS 10
-/**
- * Maximal value for ::BROTLI_PARAM_LGWIN parameter.
- *
- * @note equal to @c BROTLI_MAX_DISTANCE_BITS constant.
- */
-#define BROTLI_MAX_WINDOW_BITS 24
-/**
- * Maximal value for ::BROTLI_PARAM_LGWIN parameter
- * in "Large Window Brotli" (32-bit).
- */
-#define BROTLI_LARGE_MAX_WINDOW_BITS 30
-/** Minimal value for ::BROTLI_PARAM_LGBLOCK parameter. */
-#define BROTLI_MIN_INPUT_BLOCK_BITS 16
-/** Maximal value for ::BROTLI_PARAM_LGBLOCK parameter. */
-#define BROTLI_MAX_INPUT_BLOCK_BITS 24
-/** Minimal value for ::BROTLI_PARAM_QUALITY parameter. */
-#define BROTLI_MIN_QUALITY 0
-/** Maximal value for ::BROTLI_PARAM_QUALITY parameter. */
-#define BROTLI_MAX_QUALITY 11
-
-/** Options for ::BROTLI_PARAM_MODE parameter. */
-typedef enum BrotliEncoderMode {
- /**
- * Default compression mode.
- *
- * In this mode compressor does not know anything in advance about the
- * properties of the input.
- */
- BROTLI_MODE_GENERIC = 0,
- /** Compression mode for UTF-8 formatted text input. */
- BROTLI_MODE_TEXT = 1,
- /** Compression mode used in WOFF 2.0. */
- BROTLI_MODE_FONT = 2
-} BrotliEncoderMode;
-
-/** Default value for ::BROTLI_PARAM_QUALITY parameter. */
-#define BROTLI_DEFAULT_QUALITY 11
-/** Default value for ::BROTLI_PARAM_LGWIN parameter. */
-#define BROTLI_DEFAULT_WINDOW 22
-/** Default value for ::BROTLI_PARAM_MODE parameter. */
-#define BROTLI_DEFAULT_MODE BROTLI_MODE_GENERIC
-
-/** Operations that can be performed by streaming encoder. */
-typedef enum BrotliEncoderOperation {
- /**
- * Process input.
- *
- * Encoder may postpone producing output, until it has processed enough input.
- */
- BROTLI_OPERATION_PROCESS = 0,
- /**
- * Produce output for all processed input.
- *
- * Actual flush is performed when input stream is depleted and there is enough
- * space in output stream. This means that client should repeat
- * ::BROTLI_OPERATION_FLUSH operation until @p available_in becomes @c 0, and
- * ::BrotliEncoderHasMoreOutput returns ::BROTLI_FALSE. If output is acquired
- * via ::BrotliEncoderTakeOutput, then operation should be repeated after
- * output buffer is drained.
- *
- * @warning Until flush is complete, client @b SHOULD @b NOT swap,
- * reduce or extend input stream.
- *
- * When flush is complete, output data will be sufficient for decoder to
- * reproduce all the given input.
- */
- BROTLI_OPERATION_FLUSH = 1,
- /**
- * Finalize the stream.
- *
- * Actual finalization is performed when input stream is depleted and there is
- * enough space in output stream. This means that client should repeat
- * ::BROTLI_OPERATION_FINISH operation until @p available_in becomes @c 0, and
- * ::BrotliEncoderHasMoreOutput returns ::BROTLI_FALSE. If output is acquired
- * via ::BrotliEncoderTakeOutput, then operation should be repeated after
- * output buffer is drained.
- *
- * @warning Until finalization is complete, client @b SHOULD @b NOT swap,
- * reduce or extend input stream.
- *
- * Helper function ::BrotliEncoderIsFinished checks if stream is finalized and
- * output fully dumped.
- *
- * Adding more input data to finalized stream is impossible.
- */
- BROTLI_OPERATION_FINISH = 2,
- /**
- * Emit metadata block to stream.
- *
- * Metadata is opaque to Brotli: neither encoder, nor decoder processes this
- * data or relies on it. It may be used to pass some extra information from
- * encoder client to decoder client without interfering with main data stream.
- *
- * @note Encoder may emit empty metadata blocks internally, to pad encoded
- * stream to byte boundary.
- *
- * @warning Until emitting metadata is complete client @b SHOULD @b NOT swap,
- * reduce or extend input stream.
- *
- * @warning The whole content of input buffer is considered to be the content
- * of metadata block. Do @b NOT @e append metadata to input stream,
- * before it is depleted with other operations.
- *
- * Stream is soft-flushed before metadata block is emitted. Metadata block
- * @b MUST be no longer than than 16MiB.
- */
- BROTLI_OPERATION_EMIT_METADATA = 3
-} BrotliEncoderOperation;
-
-/** Options to be used with ::BrotliEncoderSetParameter. */
-typedef enum BrotliEncoderParameter {
- /**
- * Tune encoder for specific input.
- *
- * ::BrotliEncoderMode enumerates all available values.
- */
- BROTLI_PARAM_MODE = 0,
- /**
- * The main compression speed-density lever.
- *
- * The higher the quality, the slower the compression. Range is
- * from ::BROTLI_MIN_QUALITY to ::BROTLI_MAX_QUALITY.
- */
- BROTLI_PARAM_QUALITY = 1,
- /**
- * Recommended sliding LZ77 window size.
- *
- * Encoder may reduce this value, e.g. if input is much smaller than
- * window size.
- *
- * Window size is `(1 << value) - 16`.
- *
- * Range is from ::BROTLI_MIN_WINDOW_BITS to ::BROTLI_MAX_WINDOW_BITS.
- */
- BROTLI_PARAM_LGWIN = 2,
- /**
- * Recommended input block size.
- *
- * Encoder may reduce this value, e.g. if input is much smaller than input
- * block size.
- *
- * Range is from ::BROTLI_MIN_INPUT_BLOCK_BITS to
- * ::BROTLI_MAX_INPUT_BLOCK_BITS.
- *
- * @note Bigger input block size allows better compression, but consumes more
- * memory. \n The rough formula of memory used for temporary input
- * storage is `3 << lgBlock`.
- */
- BROTLI_PARAM_LGBLOCK = 3,
- /**
- * Flag that affects usage of "literal context modeling" format feature.
- *
- * This flag is a "decoding-speed vs compression ratio" trade-off.
- */
- BROTLI_PARAM_DISABLE_LITERAL_CONTEXT_MODELING = 4,
- /**
- * Estimated total input size for all ::BrotliEncoderCompressStream calls.
- *
- * The default value is 0, which means that the total input size is unknown.
- */
- BROTLI_PARAM_SIZE_HINT = 5,
- /**
- * Flag that determines if "Large Window Brotli" is used.
- */
- BROTLI_PARAM_LARGE_WINDOW = 6,
- /**
- * Recommended number of postfix bits (NPOSTFIX).
- *
- * Encoder may change this value.
- *
- * Range is from 0 to ::BROTLI_MAX_NPOSTFIX.
- */
- BROTLI_PARAM_NPOSTFIX = 7,
- /**
- * Recommended number of direct distance codes (NDIRECT).
- *
- * Encoder may change this value.
- *
- * Range is from 0 to (15 << NPOSTFIX) in steps of (1 << NPOSTFIX).
- */
- BROTLI_PARAM_NDIRECT = 8
-} BrotliEncoderParameter;
-
-/**
- * Opaque structure that holds encoder state.
- *
- * Allocated and initialized with ::BrotliEncoderCreateInstance.
- * Cleaned up and deallocated with ::BrotliEncoderDestroyInstance.
- */
-typedef struct BrotliEncoderStateStruct BrotliEncoderState;
-
-/**
- * Sets the specified parameter to the given encoder instance.
- *
- * @param state encoder instance
- * @param param parameter to set
- * @param value new parameter value
- * @returns ::BROTLI_FALSE if parameter is unrecognized, or value is invalid
- * @returns ::BROTLI_FALSE if value of parameter can not be changed at current
- * encoder state (e.g. when encoding is started, window size might be
- * already encoded and therefore it is impossible to change it)
- * @returns ::BROTLI_TRUE if value is accepted
- * @warning invalid values might be accepted in case they would not break
- * encoding process.
- */
-BROTLI_ENC_API BROTLI_BOOL BrotliEncoderSetParameter(
- BrotliEncoderState* state, BrotliEncoderParameter param, uint32_t value);
-
-/**
- * Creates an instance of ::BrotliEncoderState and initializes it.
- *
- * @p alloc_func and @p free_func @b MUST be both zero or both non-zero. In the
- * case they are both zero, default memory allocators are used. @p opaque is
- * passed to @p alloc_func and @p free_func when they are called. @p free_func
- * has to return without doing anything when asked to free a NULL pointer.
- *
- * @param alloc_func custom memory allocation function
- * @param free_func custom memory free function
- * @param opaque custom memory manager handle
- * @returns @c 0 if instance can not be allocated or initialized
- * @returns pointer to initialized ::BrotliEncoderState otherwise
- */
-BROTLI_ENC_API BrotliEncoderState* BrotliEncoderCreateInstance(
- brotli_alloc_func alloc_func, brotli_free_func free_func, void* opaque);
-
-/**
- * Deinitializes and frees ::BrotliEncoderState instance.
- *
- * @param state decoder instance to be cleaned up and deallocated
- */
-BROTLI_ENC_API void BrotliEncoderDestroyInstance(BrotliEncoderState* state);
-
-/**
- * Calculates the output size bound for the given @p input_size.
- *
- * @warning Result is only valid if quality is at least @c 2 and, in
- * case ::BrotliEncoderCompressStream was used, no flushes
- * (::BROTLI_OPERATION_FLUSH) were performed.
- *
- * @param input_size size of projected input
- * @returns @c 0 if result does not fit @c size_t
- */
-BROTLI_ENC_API size_t BrotliEncoderMaxCompressedSize(size_t input_size);
-
-/**
- * Performs one-shot memory-to-memory compression.
- *
- * Compresses the data in @p input_buffer into @p encoded_buffer, and sets
- * @p *encoded_size to the compressed length.
- *
- * @note If ::BrotliEncoderMaxCompressedSize(@p input_size) returns non-zero
- * value, then output is guaranteed to be no longer than that.
- *
- * @param quality quality parameter value, e.g. ::BROTLI_DEFAULT_QUALITY
- * @param lgwin lgwin parameter value, e.g. ::BROTLI_DEFAULT_WINDOW
- * @param mode mode parameter value, e.g. ::BROTLI_DEFAULT_MODE
- * @param input_size size of @p input_buffer
- * @param input_buffer input data buffer with at least @p input_size
- * addressable bytes
- * @param[in, out] encoded_size @b in: size of @p encoded_buffer; \n
- * @b out: length of compressed data written to
- * @p encoded_buffer, or @c 0 if compression fails
- * @param encoded_buffer compressed data destination buffer
- * @returns ::BROTLI_FALSE in case of compression error
- * @returns ::BROTLI_FALSE if output buffer is too small
- * @returns ::BROTLI_TRUE otherwise
- */
-BROTLI_ENC_API BROTLI_BOOL BrotliEncoderCompress(
- int quality, int lgwin, BrotliEncoderMode mode, size_t input_size,
- const uint8_t input_buffer[BROTLI_ARRAY_PARAM(input_size)],
- size_t* encoded_size,
- uint8_t encoded_buffer[BROTLI_ARRAY_PARAM(*encoded_size)]);
-
-/**
- * Compresses input stream to output stream.
- *
- * The values @p *available_in and @p *available_out must specify the number of
- * bytes addressable at @p *next_in and @p *next_out respectively.
- * When @p *available_out is @c 0, @p next_out is allowed to be @c NULL.
- *
- * After each call, @p *available_in will be decremented by the amount of input
- * bytes consumed, and the @p *next_in pointer will be incremented by that
- * amount. Similarly, @p *available_out will be decremented by the amount of
- * output bytes written, and the @p *next_out pointer will be incremented by
- * that amount.
- *
- * @p total_out, if it is not a null-pointer, will be set to the number
- * of bytes compressed since the last @p state initialization.
- *
- *
- *
- * Internally workflow consists of 3 tasks:
- * -# (optionally) copy input data to internal buffer
- * -# actually compress data and (optionally) store it to internal buffer
- * -# (optionally) copy compressed bytes from internal buffer to output stream
- *
- * Whenever all 3 tasks can't move forward anymore, or error occurs, this
- * method returns the control flow to caller.
- *
- * @p op is used to perform flush, finish the stream, or inject metadata block.
- * See ::BrotliEncoderOperation for more information.
- *
- * Flushing the stream means forcing encoding of all input passed to encoder and
- * completing the current output block, so it could be fully decoded by stream
- * decoder. To perform flush set @p op to ::BROTLI_OPERATION_FLUSH.
- * Under some circumstances (e.g. lack of output stream capacity) this operation
- * would require several calls to ::BrotliEncoderCompressStream. The method must
- * be called again until both input stream is depleted and encoder has no more
- * output (see ::BrotliEncoderHasMoreOutput) after the method is called.
- *
- * Finishing the stream means encoding of all input passed to encoder and
- * adding specific "final" marks, so stream decoder could determine that stream
- * is complete. To perform finish set @p op to ::BROTLI_OPERATION_FINISH.
- * Under some circumstances (e.g. lack of output stream capacity) this operation
- * would require several calls to ::BrotliEncoderCompressStream. The method must
- * be called again until both input stream is depleted and encoder has no more
- * output (see ::BrotliEncoderHasMoreOutput) after the method is called.
- *
- * @warning When flushing and finishing, @p op should not change until operation
- * is complete; input stream should not be swapped, reduced or
- * extended as well.
- *
- * @param state encoder instance
- * @param op requested operation
- * @param[in, out] available_in @b in: amount of available input; \n
- * @b out: amount of unused input
- * @param[in, out] next_in pointer to the next input byte
- * @param[in, out] available_out @b in: length of output buffer; \n
- * @b out: remaining size of output buffer
- * @param[in, out] next_out compressed output buffer cursor;
- * can be @c NULL if @p available_out is @c 0
- * @param[out] total_out number of bytes produced so far; can be @c NULL
- * @returns ::BROTLI_FALSE if there was an error
- * @returns ::BROTLI_TRUE otherwise
- */
-BROTLI_ENC_API BROTLI_BOOL BrotliEncoderCompressStream(
- BrotliEncoderState* state, BrotliEncoderOperation op, size_t* available_in,
- const uint8_t** next_in, size_t* available_out, uint8_t** next_out,
- size_t* total_out);
-
-/**
- * Checks if encoder instance reached the final state.
- *
- * @param state encoder instance
- * @returns ::BROTLI_TRUE if encoder is in a state where it reached the end of
- * the input and produced all of the output
- * @returns ::BROTLI_FALSE otherwise
- */
-BROTLI_ENC_API BROTLI_BOOL BrotliEncoderIsFinished(BrotliEncoderState* state);
-
-/**
- * Checks if encoder has more output.
- *
- * @param state encoder instance
- * @returns ::BROTLI_TRUE, if encoder has some unconsumed output
- * @returns ::BROTLI_FALSE otherwise
- */
-BROTLI_ENC_API BROTLI_BOOL BrotliEncoderHasMoreOutput(
- BrotliEncoderState* state);
-
-/**
- * Acquires pointer to internal output buffer.
- *
- * This method is used to make language bindings easier and more efficient:
- * -# push data to ::BrotliEncoderCompressStream,
- * until ::BrotliEncoderHasMoreOutput returns BROTL_TRUE
- * -# use ::BrotliEncoderTakeOutput to peek bytes and copy to language-specific
- * entity
- *
- * Also this could be useful if there is an output stream that is able to
- * consume all the provided data (e.g. when data is saved to file system).
- *
- * @attention After every call to ::BrotliEncoderTakeOutput @p *size bytes of
- * output are considered consumed for all consecutive calls to the
- * instance methods; returned pointer becomes invalidated as well.
- *
- * @note Encoder output is not guaranteed to be contiguous. This means that
- * after the size-unrestricted call to ::BrotliEncoderTakeOutput,
- * immediate next call to ::BrotliEncoderTakeOutput may return more data.
- *
- * @param state encoder instance
- * @param[in, out] size @b in: number of bytes caller is ready to take, @c 0 if
- * any amount could be handled; \n
- * @b out: amount of data pointed by returned pointer and
- * considered consumed; \n
- * out value is never greater than in value, unless it is @c 0
- * @returns pointer to output data
- */
-BROTLI_ENC_API const uint8_t* BrotliEncoderTakeOutput(
- BrotliEncoderState* state, size_t* size);
-
-
-/**
- * Gets an encoder library version.
- *
- * Look at BROTLI_VERSION for more information.
- */
-BROTLI_ENC_API uint32_t BrotliEncoderVersion(void);
-
-#if defined(__cplusplus) || defined(c_plusplus)
-} /* extern "C" */
-#endif
-
-#endif /* BROTLI_ENC_ENCODE_H_ */
diff --git a/BaseTools/Source/C/BrotliCompress/include/brotli/port.h b/BaseTools/Source/C/BrotliCompress/include/brotli/port.h
deleted file mode 100644
index 6e439987b547..000000000000
--- a/BaseTools/Source/C/BrotliCompress/include/brotli/port.h
+++ /dev/null
@@ -1,274 +0,0 @@
-/* Copyright 2016 Google Inc. All Rights Reserved.
-
- Distributed under MIT license.
- See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
-*/
-
-/* Macros for compiler / platform specific API declarations. */
-
-#ifndef BROTLI_COMMON_PORT_H_
-#define BROTLI_COMMON_PORT_H_
-
-/* The following macros were borrowed from https://github.com/nemequ/hedley
- * with permission of original author - Evan Nemerson <evan@nemerson.com> */
-
-/* >>> >>> >>> hedley macros */
-
-#define BROTLI_MAKE_VERSION(major, minor, revision) \
- (((major) * 1000000) + ((minor) * 1000) + (revision))
-
-#if defined(__GNUC__) && defined(__GNUC_PATCHLEVEL__)
-#define BROTLI_GNUC_VERSION \
- BROTLI_MAKE_VERSION(__GNUC__, __GNUC_MINOR__, __GNUC_PATCHLEVEL__)
-#elif defined(__GNUC__)
-#define BROTLI_GNUC_VERSION BROTLI_MAKE_VERSION(__GNUC__, __GNUC_MINOR__, 0)
-#endif
-
-#if defined(BROTLI_GNUC_VERSION)
-#define BROTLI_GNUC_VERSION_CHECK(major, minor, patch) \
- (BROTLI_GNUC_VERSION >= BROTLI_MAKE_VERSION(major, minor, patch))
-#else
-#define BROTLI_GNUC_VERSION_CHECK(major, minor, patch) (0)
-#endif
-
-#if defined(_MSC_FULL_VER) && (_MSC_FULL_VER >= 140000000)
-#define BROTLI_MSVC_VERSION \
- BROTLI_MAKE_VERSION((_MSC_FULL_VER / 10000000), \
- (_MSC_FULL_VER % 10000000) / 100000, \
- (_MSC_FULL_VER % 100000) / 100)
-#elif defined(_MSC_FULL_VER)
-#define BROTLI_MSVC_VERSION \
- BROTLI_MAKE_VERSION((_MSC_FULL_VER / 1000000), \
- (_MSC_FULL_VER % 1000000) / 10000, \
- (_MSC_FULL_VER % 10000) / 10)
-#elif defined(_MSC_VER)
-#define BROTLI_MSVC_VERSION \
- BROTLI_MAKE_VERSION(_MSC_VER / 100, _MSC_VER % 100, 0)
-#endif
-
-#if !defined(_MSC_VER)
-#define BROTLI_MSVC_VERSION_CHECK(major, minor, patch) (0)
-#elif defined(_MSC_VER) && (_MSC_VER >= 1400)
-#define BROTLI_MSVC_VERSION_CHECK(major, minor, patch) \
- (_MSC_FULL_VER >= ((major * 10000000) + (minor * 100000) + (patch)))
-#elif defined(_MSC_VER) && (_MSC_VER >= 1200)
-#define BROTLI_MSVC_VERSION_CHECK(major, minor, patch) \
- (_MSC_FULL_VER >= ((major * 1000000) + (minor * 10000) + (patch)))
-#else
-#define BROTLI_MSVC_VERSION_CHECK(major, minor, patch) \
- (_MSC_VER >= ((major * 100) + (minor)))
-#endif
-
-#if defined(__INTEL_COMPILER) && defined(__INTEL_COMPILER_UPDATE)
-#define BROTLI_INTEL_VERSION \
- BROTLI_MAKE_VERSION(__INTEL_COMPILER / 100, \
- __INTEL_COMPILER % 100, \
- __INTEL_COMPILER_UPDATE)
-#elif defined(__INTEL_COMPILER)
-#define BROTLI_INTEL_VERSION \
- BROTLI_MAKE_VERSION(__INTEL_COMPILER / 100, __INTEL_COMPILER % 100, 0)
-#endif
-
-#if defined(BROTLI_INTEL_VERSION)
-#define BROTLI_INTEL_VERSION_CHECK(major, minor, patch) \
- (BROTLI_INTEL_VERSION >= BROTLI_MAKE_VERSION(major, minor, patch))
-#else
-#define BROTLI_INTEL_VERSION_CHECK(major, minor, patch) (0)
-#endif
-
-#if defined(__PGI) && \
- defined(__PGIC__) && defined(__PGIC_MINOR__) && defined(__PGIC_PATCHLEVEL__)
-#define BROTLI_PGI_VERSION \
- BROTLI_MAKE_VERSION(__PGIC__, __PGIC_MINOR__, __PGIC_PATCHLEVEL__)
-#endif
-
-#if defined(BROTLI_PGI_VERSION)
-#define BROTLI_PGI_VERSION_CHECK(major, minor, patch) \
- (BROTLI_PGI_VERSION >= BROTLI_MAKE_VERSION(major, minor, patch))
-#else
-#define BROTLI_PGI_VERSION_CHECK(major, minor, patch) (0)
-#endif
-
-#if defined(__SUNPRO_C) && (__SUNPRO_C > 0x1000)
-#define BROTLI_SUNPRO_VERSION \
- BROTLI_MAKE_VERSION( \
- (((__SUNPRO_C >> 16) & 0xf) * 10) + ((__SUNPRO_C >> 12) & 0xf), \
- (((__SUNPRO_C >> 8) & 0xf) * 10) + ((__SUNPRO_C >> 4) & 0xf), \
- (__SUNPRO_C & 0xf) * 10)
-#elif defined(__SUNPRO_C)
-#define BROTLI_SUNPRO_VERSION \
- BROTLI_MAKE_VERSION((__SUNPRO_C >> 8) & 0xf, \
- (__SUNPRO_C >> 4) & 0xf, \
- (__SUNPRO_C) & 0xf)
-#elif defined(__SUNPRO_CC) && (__SUNPRO_CC > 0x1000)
-#define BROTLI_SUNPRO_VERSION \
- BROTLI_MAKE_VERSION( \
- (((__SUNPRO_CC >> 16) & 0xf) * 10) + ((__SUNPRO_CC >> 12) & 0xf), \
- (((__SUNPRO_CC >> 8) & 0xf) * 10) + ((__SUNPRO_CC >> 4) & 0xf), \
- (__SUNPRO_CC & 0xf) * 10)
-#elif defined(__SUNPRO_CC)
-#define BROTLI_SUNPRO_VERSION \
- BROTLI_MAKE_VERSION((__SUNPRO_CC >> 8) & 0xf, \
- (__SUNPRO_CC >> 4) & 0xf, \
- (__SUNPRO_CC) & 0xf)
-#endif
-
-#if defined(BROTLI_SUNPRO_VERSION)
-#define BROTLI_SUNPRO_VERSION_CHECK(major, minor, patch) \
- (BROTLI_SUNPRO_VERSION >= BROTLI_MAKE_VERSION(major, minor, patch))
-#else
-#define BROTLI_SUNPRO_VERSION_CHECK(major, minor, patch) (0)
-#endif
-
-#if defined(__CC_ARM) && defined(__ARMCOMPILER_VERSION)
-#define BROTLI_ARM_VERSION \
- BROTLI_MAKE_VERSION((__ARMCOMPILER_VERSION / 1000000), \
- (__ARMCOMPILER_VERSION % 1000000) / 10000, \
- (__ARMCOMPILER_VERSION % 10000) / 100)
-#elif defined(__CC_ARM) && defined(__ARMCC_VERSION)
-#define BROTLI_ARM_VERSION \
- BROTLI_MAKE_VERSION((__ARMCC_VERSION / 1000000), \
- (__ARMCC_VERSION % 1000000) / 10000, \
- (__ARMCC_VERSION % 10000) / 100)
-#endif
-
-#if defined(BROTLI_ARM_VERSION)
-#define BROTLI_ARM_VERSION_CHECK(major, minor, patch) \
- (BROTLI_ARM_VERSION >= BROTLI_MAKE_VERSION(major, minor, patch))
-#else
-#define BROTLI_ARM_VERSION_CHECK(major, minor, patch) (0)
-#endif
-
-#if defined(__ibmxl__)
-#define BROTLI_IBM_VERSION \
- BROTLI_MAKE_VERSION(__ibmxl_version__, \
- __ibmxl_release__, \
- __ibmxl_modification__)
-#elif defined(__xlC__) && defined(__xlC_ver__)
-#define BROTLI_IBM_VERSION \
- BROTLI_MAKE_VERSION(__xlC__ >> 8, __xlC__ & 0xff, (__xlC_ver__ >> 8) & 0xff)
-#elif defined(__xlC__)
-#define BROTLI_IBM_VERSION BROTLI_MAKE_VERSION(__xlC__ >> 8, __xlC__ & 0xff, 0)
-#endif
-
-#if defined(BROTLI_IBM_VERSION)
-#define BROTLI_IBM_VERSION_CHECK(major, minor, patch) \
- (BROTLI_IBM_VERSION >= BROTLI_MAKE_VERSION(major, minor, patch))
-#else
-#define BROTLI_IBM_VERSION_CHECK(major, minor, patch) (0)
-#endif
-
-#if defined(__TI_COMPILER_VERSION__)
-#define BROTLI_TI_VERSION \
- BROTLI_MAKE_VERSION((__TI_COMPILER_VERSION__ / 1000000), \
- (__TI_COMPILER_VERSION__ % 1000000) / 1000, \
- (__TI_COMPILER_VERSION__ % 1000))
-#endif
-
-#if defined(BROTLI_TI_VERSION)
-#define BROTLI_TI_VERSION_CHECK(major, minor, patch) \
- (BROTLI_TI_VERSION >= BROTLI_MAKE_VERSION(major, minor, patch))
-#else
-#define BROTLI_TI_VERSION_CHECK(major, minor, patch) (0)
-#endif
-
-#if defined(__IAR_SYSTEMS_ICC__)
-#if __VER__ > 1000
-#define BROTLI_IAR_VERSION \
- BROTLI_MAKE_VERSION((__VER__ / 1000000), \
- (__VER__ / 1000) % 1000, \
- (__VER__ % 1000))
-#else
-#define BROTLI_IAR_VERSION BROTLI_MAKE_VERSION(VER / 100, __VER__ % 100, 0)
-#endif
-#endif
-
-#if defined(BROTLI_IAR_VERSION)
-#define BROTLI_IAR_VERSION_CHECK(major, minor, patch) \
- (BROTLI_IAR_VERSION >= BROTLI_MAKE_VERSION(major, minor, patch))
-#else
-#define BROTLI_IAR_VERSION_CHECK(major, minor, patch) (0)
-#endif
-
-#if defined(__TINYC__)
-#define BROTLI_TINYC_VERSION \
- BROTLI_MAKE_VERSION(__TINYC__ / 1000, (__TINYC__ / 100) % 10, __TINYC__ % 100)
-#endif
-
-#if defined(BROTLI_TINYC_VERSION)
-#define BROTLI_TINYC_VERSION_CHECK(major, minor, patch) \
- (BROTLI_TINYC_VERSION >= BROTLI_MAKE_VERSION(major, minor, patch))
-#else
-#define BROTLI_TINYC_VERSION_CHECK(major, minor, patch) (0)
-#endif
-
-#if defined(__has_attribute)
-#define BROTLI_GNUC_HAS_ATTRIBUTE(attribute, major, minor, patch) \
- __has_attribute(attribute)
-#else
-#define BROTLI_GNUC_HAS_ATTRIBUTE(attribute, major, minor, patch) \
- BROTLI_GNUC_VERSION_CHECK(major, minor, patch)
-#endif
-
-#if defined(__has_builtin)
-#define BROTLI_GNUC_HAS_BUILTIN(builtin, major, minor, patch) \
- __has_builtin(builtin)
-#else
-#define BROTLI_GNUC_HAS_BUILTIN(builtin, major, minor, patch) \
- BROTLI_GNUC_VERSION_CHECK(major, minor, patch)
-#endif
-
-#if defined(_WIN32) || defined(__CYGWIN__)
-#define BROTLI_PUBLIC
-#elif BROTLI_GNUC_VERSION_CHECK(3, 3, 0) || \
- BROTLI_TI_VERSION_CHECK(8, 0, 0) || \
- BROTLI_INTEL_VERSION_CHECK(16, 0, 0) || \
- BROTLI_ARM_VERSION_CHECK(4, 1, 0) || \
- BROTLI_IBM_VERSION_CHECK(13, 1, 0) || \
- BROTLI_SUNPRO_VERSION_CHECK(5, 11, 0) || \
- (BROTLI_TI_VERSION_CHECK(7, 3, 0) && \
- defined(__TI_GNU_ATTRIBUTE_SUPPORT__) && defined(__TI_EABI__))
-#define BROTLI_PUBLIC __attribute__ ((visibility ("default")))
-#else
-#define BROTLI_PUBLIC
-#endif
-
-#if defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) && \
- !defined(__STDC_NO_VLA__) && !defined(__cplusplus) && \
- !defined(__PGI) && !defined(__PGIC__) && !defined(__TINYC__)
-#define BROTLI_ARRAY_PARAM(name) (name)
-#else
-#define BROTLI_ARRAY_PARAM(name)
-#endif
-
-/* <<< <<< <<< end of hedley macros. */
-
-#if defined(BROTLI_SHARED_COMPILATION)
-#if defined(_WIN32)
-#if defined(BROTLICOMMON_SHARED_COMPILATION)
-#define BROTLI_COMMON_API __declspec(dllexport)
-#else
-#define BROTLI_COMMON_API __declspec(dllimport)
-#endif /* BROTLICOMMON_SHARED_COMPILATION */
-#if defined(BROTLIDEC_SHARED_COMPILATION)
-#define BROTLI_DEC_API __declspec(dllexport)
-#else
-#define BROTLI_DEC_API __declspec(dllimport)
-#endif /* BROTLIDEC_SHARED_COMPILATION */
-#if defined(BROTLIENC_SHARED_COMPILATION)
-#define BROTLI_ENC_API __declspec(dllexport)
-#else
-#define BROTLI_ENC_API __declspec(dllimport)
-#endif /* BROTLIENC_SHARED_COMPILATION */
-#else /* _WIN32 */
-#define BROTLI_COMMON_API BROTLI_PUBLIC
-#define BROTLI_DEC_API BROTLI_PUBLIC
-#define BROTLI_ENC_API BROTLI_PUBLIC
-#endif /* _WIN32 */
-#else /* BROTLI_SHARED_COMPILATION */
-#define BROTLI_COMMON_API
-#define BROTLI_DEC_API
-#define BROTLI_ENC_API
-#endif
-
-#endif /* BROTLI_COMMON_PORT_H_ */
diff --git a/BaseTools/Source/C/BrotliCompress/include/brotli/types.h b/BaseTools/Source/C/BrotliCompress/include/brotli/types.h
deleted file mode 100644
index 513e701af96d..000000000000
--- a/BaseTools/Source/C/BrotliCompress/include/brotli/types.h
+++ /dev/null
@@ -1,83 +0,0 @@
-/* Copyright 2013 Google Inc. All Rights Reserved.
-
- Distributed under MIT license.
- See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
-*/
-
-/**
- * @file
- * Common types used in decoder and encoder API.
- */
-
-#ifndef BROTLI_COMMON_TYPES_H_
-#define BROTLI_COMMON_TYPES_H_
-
-#include <stddef.h> /* for size_t */
-
-#if defined(_MSC_VER) && (_MSC_VER < 1600)
-typedef __int8 int8_t;
-typedef unsigned __int8 uint8_t;
-typedef __int16 int16_t;
-typedef unsigned __int16 uint16_t;
-typedef __int32 int32_t;
-typedef unsigned __int32 uint32_t;
-typedef unsigned __int64 uint64_t;
-typedef __int64 int64_t;
-#else
-#include <stdint.h>
-#endif /* defined(_MSC_VER) && (_MSC_VER < 1600) */
-
-/**
- * A portable @c bool replacement.
- *
- * ::BROTLI_BOOL is a "documentation" type: actually it is @c int, but in API it
- * denotes a type, whose only values are ::BROTLI_TRUE and ::BROTLI_FALSE.
- *
- * ::BROTLI_BOOL values passed to Brotli should either be ::BROTLI_TRUE or
- * ::BROTLI_FALSE, or be a result of ::TO_BROTLI_BOOL macros.
- *
- * ::BROTLI_BOOL values returned by Brotli should not be tested for equality
- * with @c true, @c false, ::BROTLI_TRUE, ::BROTLI_FALSE, but rather should be
- * evaluated, for example: @code{.cpp}
- * if (SomeBrotliFunction(encoder, BROTLI_TRUE) &&
- * !OtherBrotliFunction(decoder, BROTLI_FALSE)) {
- * bool x = !!YetAnotherBrotliFunction(encoder, TO_BROLTI_BOOL(2 * 2 == 4));
- * DoSomething(x);
- * }
- * @endcode
- */
-#define BROTLI_BOOL int
-/** Portable @c true replacement. */
-#define BROTLI_TRUE 1
-/** Portable @c false replacement. */
-#define BROTLI_FALSE 0
-/** @c bool to ::BROTLI_BOOL conversion macros. */
-#define TO_BROTLI_BOOL(X) (!!(X) ? BROTLI_TRUE : BROTLI_FALSE)
-
-#define BROTLI_MAKE_UINT64_T(high, low) ((((uint64_t)(high)) << 32) | low)
-
-#define BROTLI_UINT32_MAX (~((uint32_t)0))
-#define BROTLI_SIZE_MAX (~((size_t)0))
-
-/**
- * Allocating function pointer type.
- *
- * @param opaque custom memory manager handle provided by client
- * @param size requested memory region size; can not be @c 0
- * @returns @c 0 in the case of failure
- * @returns a valid pointer to a memory region of at least @p size bytes
- * long otherwise
- */
-typedef void* (*brotli_alloc_func)(void* opaque, size_t size);
-
-/**
- * Deallocating function pointer type.
- *
- * This function @b SHOULD do nothing if @p address is @c 0.
- *
- * @param opaque custom memory manager handle provided by client
- * @param address memory region pointer returned by ::brotli_alloc_func, or @c 0
- */
-typedef void (*brotli_free_func)(void* opaque, void* address);
-
-#endif /* BROTLI_COMMON_TYPES_H_ */
diff --git a/BaseTools/Source/C/BrotliCompress/tools/brotli.md b/BaseTools/Source/C/BrotliCompress/tools/brotli.md
deleted file mode 100644
index c029869bced7..000000000000
--- a/BaseTools/Source/C/BrotliCompress/tools/brotli.md
+++ /dev/null
@@ -1,107 +0,0 @@
-brotli(1) -- brotli, unbrotli - compress or decompress files
-================================================================
-
-SYNOPSIS
---------
-
-`brotli` [*OPTION|FILE*]...
-
-`unbrotli` is equivalent to `brotli --decompress`
-
-DESCRIPTION
------------
-`brotli` is a generic-purpose lossless compression algorithm that compresses
-data using a combination of a modern variant of the **LZ77** algorithm, Huffman
-coding and 2-nd order context modeling, with a compression ratio comparable to
-the best currently available general-purpose compression methods. It is similar
-in speed with deflate but offers more dense compression.
-
-`brotli` command line syntax similar to `gzip (1)` and `zstd (1)`.
-Unlike `gzip (1)`, source files are preserved by default. It is possible to
-remove them after processing by using the `--rm` _option_.
-
-Arguments that look like "`--name`" or "`--name=value`" are _options_. Every
-_option_ has a short form "`-x`" or "`-x value`". Multiple short form _options_
-could be coalesced:
-
-* "`--decompress --stdout --suffix=.b`" works the same as
-* "`-d -s -S .b`" and
-* "`-dsS .b`"
-
-`brotli` has 3 operation modes:
-
-* default mode is compression;
-* `--decompress` option activates decompression mode;
-* `--test` option switches to integrity test mode; this option is equivalent to
- "`--decompress --stdout`" except that the decompressed data is discarded
- instead of being written to standard output.
-
-Every non-option argument is a _file_ entry. If no _files_ are given or _file_
-is "`-`", `brotli` reads from standard input. All arguments after "`--`" are
-_file_ entries.
-
-Unless `--stdout` or `--output` is specified, _files_ are written to a new file
-whose name is derived from the source _file_ name:
-
-* when compressing, a suffix is appended to the source filename to
- get the target filename
-* when decompressing, a suffix is removed from the source filename to
- get the target filename
-
-Default suffix is `.br`, but it could be specified with `--suffix` option.
-
-Conflicting or duplicate _options_ are not allowed.
-
-OPTIONS
--------
-
-* `-#`:
- compression level (0-9); bigger values cause denser, but slower compression
-* `-c`, `--stdout`:
- write on standard output
-* `-d`, `--decompress`:
- decompress mode
-* `-f`, `--force`:
- force output file overwrite
-* `-h`, `--help`:
- display this help and exit
-* `-j`, `--rm`:
- remove source file(s); `gzip (1)`-like behaviour
-* `-k`, `--keep`:
- keep source file(s); `zstd (1)`-like behaviour
-* `-n`, `--no-copy-stat`:
- do not copy source file(s) attributes
-* `-o FILE`, `--output=FILE`
- output file; valid only if there is a single input entry
-* `-q NUM`, `--quality=NUM`:
- compression level (0-11); bigger values cause denser, but slower compression
-* `-t`, `--test`:
- test file integrity mode
-* `-v`, `--verbose`:
- increase output verbosity
-* `-w NUM`, `--lgwin=NUM`:
- set LZ77 window size (0, 10-24) (default: 22); window size is
- `(2**NUM - 16)`; 0 lets compressor decide over the optimal value; bigger
- windows size improve density; decoder might require up to window size
- memory to operate
-* `-S SUF`, `--suffix=SUF`:
- output file suffix (default: `.br`)
-* `-V`, `--version`:
- display version and exit
-* `-Z`, `--best`:
- use best compression level (default); same as "`-q 11`"
-
-SEE ALSO
---------
-
-`brotli` file format is defined in
-[RFC 7932](https://www.ietf.org/rfc/rfc7932.txt).
-
-`brotli` is open-sourced under the
-[MIT License](https://opensource.org/licenses/MIT).
-
-Mailing list: https://groups.google.com/forum/#!forum/brotli
-
-BUGS
-----
-Report bugs at: https://github.com/google/brotli/issues
diff --git a/Readme.md b/Readme.md
index 4a4775db85fd..31a56b4913d5 100644
--- a/Readme.md
+++ b/Readme.md
@@ -57,7 +57,7 @@ for the UEFI and PI specifications from www.uefi.org.
The majority of the content in the EDK II open source project uses a
[BSD-2-Clause Plus Patent License](License.txt). The EDK II open source project
contains the following components that are covered by additional licenses:
-* [BaseTools/Source/C/BrotliCompress](BaseTools/Source/C/BrotliCompress/LICENSE)
+* [BaseTools/Source/C/BrotliCompress/brotli](https://github.com/google/brotli/blob/master/LICENSE)
* [MdeModulePkg/Library/BrotliCustomDecompressLib/brotli](https://github.com/google/brotli/blob/master/LICENSE)
* [BaseTools/Source/C/LzmaCompress](BaseTools/Source/C/LzmaCompress/LZMA-SDK-README.txt)
* [MdeModulePkg/Library/LzmaCustomDecompressLib](MdeModulePkg/Library/LzmaCustomDecompressLib/LZMA-SDK-README.txt)
@@ -200,6 +200,7 @@ as possible as we can. Currently EDK II contains the following submodules
- CryptoPkg/Library/OpensslLib/openssl
- ArmPkg/Library/ArmSoftFloatLib/berkeley-softfloat-3
- MdeModulePkg/Library/BrotliCustomDecompressLib/brotli
+- BaseTools/Source/C/BrotliCompress/brotli
ArmSoftFloatLib is actually required by OpensslLib. It's inevitable
in openssl-1.1.1 (since stable201905) for floating point parameter
--
2.18.0.windows.1
^ permalink raw reply related [flat|nested] 6+ messages in thread
* Re: [edk2-devel] [PATCH 2/2] BaseTools: Make brotli a submodule
2020-03-05 8:28 ` [edk2-devel] " Bob Feng
@ 2020-03-09 5:30 ` Zhang, Shenglei
0 siblings, 0 replies; 6+ messages in thread
From: Zhang, Shenglei @ 2020-03-09 5:30 UTC (permalink / raw)
To: Feng, Bob C, devel@edk2.groups.io; +Cc: Gao, Liming
Hi Bob,
Please refer to the newly added comment in BZ.
https://bugzilla.tianocore.org/show_bug.cgi?id=2558
Thanks,
Shenglei
> -----Original Message-----
> From: Feng, Bob C
> Sent: Thursday, March 5, 2020 4:29 PM
> To: devel@edk2.groups.io; Feng, Bob C <bob.c.feng@intel.com>; Zhang,
> Shenglei <shenglei.zhang@intel.com>
> Cc: Gao, Liming <liming.gao@intel.com>
> Subject: RE: [edk2-devel] [PATCH 2/2] BaseTools: Make brotli a submodule
>
> Shenglei,
>
> Would you also add comment in BZ why we need change to submodule way?
>
> Thanks,
> Bob
>
> -----Original Message-----
> From: devel@edk2.groups.io [mailto:devel@edk2.groups.io] On Behalf Of
> Bob Feng
> Sent: Thursday, March 5, 2020 4:04 PM
> To: Zhang, Shenglei <shenglei.zhang@intel.com>; devel@edk2.groups.io
> Cc: Gao, Liming <liming.gao@intel.com>
> Subject: Re: [edk2-devel] [PATCH 2/2] BaseTools: Make brotli a submodule
>
> Shenglei,
>
> Please update BZ status as IN_PROGRESS and add patch link.
>
> Thanks,
> Bob
>
> -----Original Message-----
> From: Zhang, Shenglei
> Sent: Monday, March 2, 2020 11:20 AM
> To: devel@edk2.groups.io
> Cc: Feng, Bob C <bob.c.feng@intel.com>; Gao, Liming <liming.gao@intel.com>
> Subject: [PATCH 2/2] BaseTools: Make brotli a submodule
>
> Use submodule way to access brotli in BaseTools based on
> brotli version 666c3280cc11dc433c303d79a83d4ffbdd12cc8d.
> https://bugzilla.tianocore.org/show_bug.cgi?id=2558
>
> Cc: Bob Feng <bob.c.feng@intel.com>
> Cc: Liming Gao <liming.gao@intel.com>
> Signed-off-by: Shenglei Zhang <shenglei.zhang@intel.com>
> ---
> .../C/BrotliCompress/common/dictionary.c | 5905 -----------------
> .../C/BrotliCompress/common/transform.c | 235 -
> .../Source/C/BrotliCompress/dec/bit_reader.c | 48 -
> .../Source/C/BrotliCompress/dec/decode.c | 2497 -------
> .../Source/C/BrotliCompress/dec/huffman.c | 356 -
> BaseTools/Source/C/BrotliCompress/dec/state.c | 164 -
> .../BrotliCompress/enc/backward_references.c | 144 -
> .../enc/backward_references_hq.c | 830 ---
> .../Source/C/BrotliCompress/enc/bit_cost.c | 35 -
> .../C/BrotliCompress/enc/block_splitter.c | 194 -
> .../C/BrotliCompress/enc/brotli_bit_stream.c | 1331 ----
> .../Source/C/BrotliCompress/enc/cluster.c | 56 -
> .../C/BrotliCompress/enc/compress_fragment.c | 790 ---
> .../enc/compress_fragment_two_pass.c | 645 --
> .../C/BrotliCompress/enc/dictionary_hash.c | 1120 ----
> .../Source/C/BrotliCompress/enc/encode.c | 1864 ------
> .../C/BrotliCompress/enc/encoder_dict.c | 32 -
> .../C/BrotliCompress/enc/entropy_encode.c | 501 --
> .../Source/C/BrotliCompress/enc/histogram.c | 100 -
> .../C/BrotliCompress/enc/literal_cost.c | 175 -
> .../Source/C/BrotliCompress/enc/memory.c | 170 -
> .../Source/C/BrotliCompress/enc/metablock.c | 667 --
> .../Source/C/BrotliCompress/enc/static_dict.c | 486 --
> .../Source/C/BrotliCompress/enc/utf8_util.c | 85 -
> .../Source/C/BrotliCompress/tools/brotli.c | 1143 ----
> .gitmodules | 3 +
> BaseTools/Source/C/BrotliCompress/GNUmakefile | 54 +-
> BaseTools/Source/C/BrotliCompress/LICENSE | 19 -
> BaseTools/Source/C/BrotliCompress/Makefile | 52 +-
> BaseTools/Source/C/BrotliCompress/README.md | 26 -
> BaseTools/Source/C/BrotliCompress/ReadMe.txt | 2 -
> BaseTools/Source/C/BrotliCompress/brotli | 1 +
> .../C/BrotliCompress/common/constants.h | 64 -
> .../Source/C/BrotliCompress/common/context.h | 261 -
> .../C/BrotliCompress/common/dictionary.h | 64 -
> .../Source/C/BrotliCompress/common/platform.h | 558 --
> .../C/BrotliCompress/common/transform.h | 80 -
> .../Source/C/BrotliCompress/common/version.h | 26 -
> .../Source/C/BrotliCompress/dec/bit_reader.h | 309 -
> .../Source/C/BrotliCompress/dec/huffman.h | 72 -
> .../Source/C/BrotliCompress/dec/prefix.h | 750 ---
> BaseTools/Source/C/BrotliCompress/dec/state.h | 258 -
> .../brotli-comparison-study-2015-09-22.pdf | Bin 215208 -> 0 bytes
> .../BrotliCompress/enc/backward_references.h | 38 -
> .../enc/backward_references_hq.h | 93 -
> .../enc/backward_references_inc.h | 153 -
> .../Source/C/BrotliCompress/enc/bit_cost.h | 63 -
> .../C/BrotliCompress/enc/bit_cost_inc.h | 127 -
> .../C/BrotliCompress/enc/block_encoder_inc.h | 34 -
> .../C/BrotliCompress/enc/block_splitter.h | 51 -
> .../C/BrotliCompress/enc/block_splitter_inc.h | 431 --
> .../C/BrotliCompress/enc/brotli_bit_stream.h | 84 -
> .../Source/C/BrotliCompress/enc/cluster.h | 48 -
> .../Source/C/BrotliCompress/enc/cluster_inc.h | 317 -
> .../Source/C/BrotliCompress/enc/command.h | 190 -
> .../C/BrotliCompress/enc/compress_fragment.h | 61 -
> .../enc/compress_fragment_two_pass.h | 54 -
> .../C/BrotliCompress/enc/dictionary_hash.h | 24 -
> .../C/BrotliCompress/enc/encoder_dict.h | 41 -
> .../C/BrotliCompress/enc/entropy_encode.h | 122 -
> .../enc/entropy_encode_static.h | 539 --
> .../Source/C/BrotliCompress/enc/fast_log.h | 147 -
> .../C/BrotliCompress/enc/find_match_length.h | 80 -
> BaseTools/Source/C/BrotliCompress/enc/hash.h | 497 --
> .../C/BrotliCompress/enc/hash_composite_inc.h | 133 -
> .../enc/hash_forgetful_chain_inc.h | 254 -
> .../enc/hash_longest_match64_inc.h | 266 -
> .../enc/hash_longest_match_inc.h | 258 -
> .../enc/hash_longest_match_quickly_inc.h | 235 -
> .../C/BrotliCompress/enc/hash_rolling_inc.h | 215 -
> .../enc/hash_to_binary_tree_inc.h | 327 -
> .../Source/C/BrotliCompress/enc/histogram.h | 63 -
> .../C/BrotliCompress/enc/histogram_inc.h | 51 -
> .../C/BrotliCompress/enc/literal_cost.h | 30 -
> .../Source/C/BrotliCompress/enc/memory.h | 102 -
> .../Source/C/BrotliCompress/enc/metablock.h | 105 -
> .../C/BrotliCompress/enc/metablock_inc.h | 183 -
> .../Source/C/BrotliCompress/enc/params.h | 44 -
> .../Source/C/BrotliCompress/enc/prefix.h | 53 -
> .../Source/C/BrotliCompress/enc/quality.h | 165 -
> .../Source/C/BrotliCompress/enc/ringbuffer.h | 164 -
> .../Source/C/BrotliCompress/enc/static_dict.h | 40 -
> .../C/BrotliCompress/enc/static_dict_lut.h | 5864 ----------------
> .../Source/C/BrotliCompress/enc/utf8_util.h | 32 -
> .../Source/C/BrotliCompress/enc/write_bits.h | 85 -
> .../C/BrotliCompress/include/brotli/decode.h | 344 -
> .../C/BrotliCompress/include/brotli/encode.h | 427 --
> .../C/BrotliCompress/include/brotli/port.h | 274 -
> .../C/BrotliCompress/include/brotli/types.h | 83 -
> .../Source/C/BrotliCompress/tools/brotli.md | 107 -
> Readme.md | 3 +-
> 91 files changed, 59 insertions(+), 35214 deletions(-)
> delete mode 100644
> BaseTools/Source/C/BrotliCompress/common/dictionary.c
> delete mode 100644
> BaseTools/Source/C/BrotliCompress/common/transform.c
> delete mode 100644 BaseTools/Source/C/BrotliCompress/dec/bit_reader.c
> delete mode 100644 BaseTools/Source/C/BrotliCompress/dec/decode.c
> delete mode 100644 BaseTools/Source/C/BrotliCompress/dec/huffman.c
> delete mode 100644 BaseTools/Source/C/BrotliCompress/dec/state.c
> delete mode 100644
> BaseTools/Source/C/BrotliCompress/enc/backward_references.c
> delete mode 100644
> BaseTools/Source/C/BrotliCompress/enc/backward_references_hq.c
> delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/bit_cost.c
> delete mode 100644
> BaseTools/Source/C/BrotliCompress/enc/block_splitter.c
> delete mode 100644
> BaseTools/Source/C/BrotliCompress/enc/brotli_bit_stream.c
> delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/cluster.c
> delete mode 100644
> BaseTools/Source/C/BrotliCompress/enc/compress_fragment.c
> delete mode 100644
> BaseTools/Source/C/BrotliCompress/enc/compress_fragment_two_pass.c
> delete mode 100644
> BaseTools/Source/C/BrotliCompress/enc/dictionary_hash.c
> delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/encode.c
> delete mode 100644
> BaseTools/Source/C/BrotliCompress/enc/encoder_dict.c
> delete mode 100644
> BaseTools/Source/C/BrotliCompress/enc/entropy_encode.c
> delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/histogram.c
> delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/literal_cost.c
> delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/memory.c
> delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/metablock.c
> delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/static_dict.c
> delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/utf8_util.c
> delete mode 100644 BaseTools/Source/C/BrotliCompress/tools/brotli.c
> delete mode 100644 BaseTools/Source/C/BrotliCompress/LICENSE
> delete mode 100644 BaseTools/Source/C/BrotliCompress/README.md
> delete mode 100644 BaseTools/Source/C/BrotliCompress/ReadMe.txt
> create mode 160000 BaseTools/Source/C/BrotliCompress/brotli
> delete mode 100644
> BaseTools/Source/C/BrotliCompress/common/constants.h
> delete mode 100644
> BaseTools/Source/C/BrotliCompress/common/context.h
> delete mode 100644
> BaseTools/Source/C/BrotliCompress/common/dictionary.h
> delete mode 100644
> BaseTools/Source/C/BrotliCompress/common/platform.h
> delete mode 100644
> BaseTools/Source/C/BrotliCompress/common/transform.h
> delete mode 100644
> BaseTools/Source/C/BrotliCompress/common/version.h
> delete mode 100644 BaseTools/Source/C/BrotliCompress/dec/bit_reader.h
> delete mode 100644 BaseTools/Source/C/BrotliCompress/dec/huffman.h
> delete mode 100644 BaseTools/Source/C/BrotliCompress/dec/prefix.h
> delete mode 100644 BaseTools/Source/C/BrotliCompress/dec/state.h
> delete mode 100644 BaseTools/Source/C/BrotliCompress/docs/brotli-
> comparison-study-2015-09-22.pdf
> delete mode 100644
> BaseTools/Source/C/BrotliCompress/enc/backward_references.h
> delete mode 100644
> BaseTools/Source/C/BrotliCompress/enc/backward_references_hq.h
> delete mode 100644
> BaseTools/Source/C/BrotliCompress/enc/backward_references_inc.h
> delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/bit_cost.h
> delete mode 100644
> BaseTools/Source/C/BrotliCompress/enc/bit_cost_inc.h
> delete mode 100644
> BaseTools/Source/C/BrotliCompress/enc/block_encoder_inc.h
> delete mode 100644
> BaseTools/Source/C/BrotliCompress/enc/block_splitter.h
> delete mode 100644
> BaseTools/Source/C/BrotliCompress/enc/block_splitter_inc.h
> delete mode 100644
> BaseTools/Source/C/BrotliCompress/enc/brotli_bit_stream.h
> delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/cluster.h
> delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/cluster_inc.h
> delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/command.h
> delete mode 100644
> BaseTools/Source/C/BrotliCompress/enc/compress_fragment.h
> delete mode 100644
> BaseTools/Source/C/BrotliCompress/enc/compress_fragment_two_pass.h
> delete mode 100644
> BaseTools/Source/C/BrotliCompress/enc/dictionary_hash.h
> delete mode 100644
> BaseTools/Source/C/BrotliCompress/enc/encoder_dict.h
> delete mode 100644
> BaseTools/Source/C/BrotliCompress/enc/entropy_encode.h
> delete mode 100644
> BaseTools/Source/C/BrotliCompress/enc/entropy_encode_static.h
> delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/fast_log.h
> delete mode 100644
> BaseTools/Source/C/BrotliCompress/enc/find_match_length.h
> delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/hash.h
> delete mode 100644
> BaseTools/Source/C/BrotliCompress/enc/hash_composite_inc.h
> delete mode 100644
> BaseTools/Source/C/BrotliCompress/enc/hash_forgetful_chain_inc.h
> delete mode 100644
> BaseTools/Source/C/BrotliCompress/enc/hash_longest_match64_inc.h
> delete mode 100644
> BaseTools/Source/C/BrotliCompress/enc/hash_longest_match_inc.h
> delete mode 100644
> BaseTools/Source/C/BrotliCompress/enc/hash_longest_match_quickly_inc.
> h
> delete mode 100644
> BaseTools/Source/C/BrotliCompress/enc/hash_rolling_inc.h
> delete mode 100644
> BaseTools/Source/C/BrotliCompress/enc/hash_to_binary_tree_inc.h
> delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/histogram.h
> delete mode 100644
> BaseTools/Source/C/BrotliCompress/enc/histogram_inc.h
> delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/literal_cost.h
> delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/memory.h
> delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/metablock.h
> delete mode 100644
> BaseTools/Source/C/BrotliCompress/enc/metablock_inc.h
> delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/params.h
> delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/prefix.h
> delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/quality.h
> delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/ringbuffer.h
> delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/static_dict.h
> delete mode 100644
> BaseTools/Source/C/BrotliCompress/enc/static_dict_lut.h
> delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/utf8_util.h
> delete mode 100644 BaseTools/Source/C/BrotliCompress/enc/write_bits.h
> delete mode 100644
> BaseTools/Source/C/BrotliCompress/include/brotli/decode.h
> delete mode 100644
> BaseTools/Source/C/BrotliCompress/include/brotli/encode.h
> delete mode 100644
> BaseTools/Source/C/BrotliCompress/include/brotli/port.h
> delete mode 100644
> BaseTools/Source/C/BrotliCompress/include/brotli/types.h
> delete mode 100644 BaseTools/Source/C/BrotliCompress/tools/brotli.md
>
> diff --git a/BaseTools/Source/C/BrotliCompress/common/dictionary.c
> b/BaseTools/Source/C/BrotliCompress/common/dictionary.c
> deleted file mode 100644
> index 7fd076194825..000000000000
> --- a/BaseTools/Source/C/BrotliCompress/common/dictionary.c
> +++ /dev/null
> @@ -1,5905 +0,0 @@
> -/* Copyright 2013 Google Inc. All Rights Reserved.
> -
> - Distributed under MIT license.
> - See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
> -*/
> -
> -#include "./dictionary.h"
> -
> -#if defined(__cplusplus) || defined(c_plusplus)
> -extern "C" {
> -#endif
> -
> -#ifndef BROTLI_EXTERNAL_DICTIONARY_DATA
> -static const uint8_t kBrotliDictionaryData[] =
> -{
> -
> 116,105,109,101,100,111,119,110,108,105,102,101,108,101,102,116,98,97,99,10
> 7,99,
> -
> 111,100,101,100,97,116,97,115,104,111,119,111,110,108,121,115,105,116,101,9
> 9,105
> -
> ,116,121,111,112,101,110,106,117,115,116,108,105,107,101,102,114,101,101,11
> 9,111
> -
> ,114,107,116,101,120,116,121,101,97,114,111,118,101,114,98,111,100,121,108,
> 111,
> -
> 118,101,102,111,114,109,98,111,111,107,112,108,97,121,108,105,118,101,108,1
> 05,
> -
> 110,101,104,101,108,112,104,111,109,101,115,105,100,101,109,111,114,101,11
> 9,111,
> -
> 114,100,108,111,110,103,116,104,101,109,118,105,101,119,102,105,110,100,11
> 2,97,
> -
> 103,101,100,97,121,115,102,117,108,108,104,101,97,100,116,101,114,109,101,9
> 7,99,
> -
> 104,97,114,101,97,102,114,111,109,116,114,117,101,109,97,114,107,97,98,108,
> 101,
> -
> 117,112,111,110,104,105,103,104,100,97,116,101,108,97,110,100,110,101,119,1
> 15,
> -
> 101,118,101,110,110,101,120,116,99,97,115,101,98,111,116,104,112,111,115,11
> 6,117
> -
> ,115,101,100,109,97,100,101,104,97,110,100,104,101,114,101,119,104,97,116,1
> 10,97
> -
> ,109,101,76,105,110,107,98,108,111,103,115,105,122,101,98,97,115,101,104,10
> 1,108
> -
> ,100,109,97,107,101,109,97,105,110,117,115,101,114,39,41,32,43,104,111,108,1
> 00,
> -
> 101,110,100,115,119,105,116,104,78,101,119,115,114,101,97,100,119,101,114,1
> 01,
> -
> 115,105,103,110,116,97,107,101,104,97,118,101,103,97,109,101,115,101,101,11
> 0,99,
> -
> 97,108,108,112,97,116,104,119,101,108,108,112,108,117,115,109,101,110,117,1
> 02,
> -
> 105,108,109,112,97,114,116,106,111,105,110,116,104,105,115,108,105,115,116,
> 103,
> -
> 111,111,100,110,101,101,100,119,97,121,115,119,101,115,116,106,111,98,115,1
> 09,
> -
> 105,110,100,97,108,115,111,108,111,103,111,114,105,99,104,117,115,101,115,1
> 08,97
> -
> ,115,116,116,101,97,109,97,114,109,121,102,111,111,100,107,105,110,103,119,
> 105,
> -
> 108,108,101,97,115,116,119,97,114,100,98,101,115,116,102,105,114,101,80,97,
> 103,
> -
> 101,107,110,111,119,97,119,97,121,46,112,110,103,109,111,118,101,116,104,97
> ,110,
> -
> 108,111,97,100,103,105,118,101,115,101,108,102,110,111,116,101,109,117,99,1
> 04,
> -
> 102,101,101,100,109,97,110,121,114,111,99,107,105,99,111,110,111,110,99,101
> ,108,
> -
> 111,111,107,104,105,100,101,100,105,101,100,72,111,109,101,114,117,108,101,
> 104,
> -
> 111,115,116,97,106,97,120,105,110,102,111,99,108,117,98,108,97,119,115,108,
> 101,
> -
> 115,115,104,97,108,102,115,111,109,101,115,117,99,104,122,111,110,101,49,48
> ,48,
> -
> 37,111,110,101,115,99,97,114,101,84,105,109,101,114,97,99,101,98,108,117,10
> 1,102
> -
> ,111,117,114,119,101,101,107,102,97,99,101,104,111,112,101,103,97,118,101,1
> 04,97
> -
> ,114,100,108,111,115,116,119,104,101,110,112,97,114,107,107,101,112,116,112
> ,97,
> -
> 115,115,115,104,105,112,114,111,111,109,72,84,77,76,112,108,97,110,84,121,1
> 12,
> -
> 101,100,111,110,101,115,97,118,101,107,101,101,112,102,108,97,103,108,105,1
> 10,
> -
> 107,115,111,108,100,102,105,118,101,116,111,111,107,114,97,116,101,116,111,
> 119,
> -
> 110,106,117,109,112,116,104,117,115,100,97,114,107,99,97,114,100,102,105,10
> 8,101
> -
> ,102,101,97,114,115,116,97,121,107,105,108,108,116,104,97,116,102,97,108,10
> 8,97,
> -
> 117,116,111,101,118,101,114,46,99,111,109,116,97,108,107,115,104,111,112,11
> 8,111
> -
> ,116,101,100,101,101,112,109,111,100,101,114,101,115,116,116,117,114,110,98
> ,111,
> -
> 114,110,98,97,110,100,102,101,108,108,114,111,115,101,117,114,108,40,115,10
> 7,105
> -
> ,110,114,111,108,101,99,111,109,101,97,99,116,115,97,103,101,115,109,101,10
> 1,116
> -
> ,103,111,108,100,46,106,112,103,105,116,101,109,118,97,114,121,102,101,108,
> 116,
> -
> 116,104,101,110,115,101,110,100,100,114,111,112,86,105,101,119,99,111,112,1
> 21,49
> -
> ,46,48,34,60,47,97,62,115,116,111,112,101,108,115,101,108,105,101,115,116,11
> 1,
> -
> 117,114,112,97,99,107,46,103,105,102,112,97,115,116,99,115,115,63,103,114,9
> 7,121
> -
> ,109,101,97,110,38,103,116,59,114,105,100,101,115,104,111,116,108,97,116,10
> 1,115
> -
> ,97,105,100,114,111,97,100,118,97,114,32,102,101,101,108,106,111,104,110,11
> 4,105
> -
> ,99,107,112,111,114,116,102,97,115,116,39,85,65,45,100,101,97,100,60,47,98,6
> 2,
> -
> 112,111,111,114,98,105,108,108,116,121,112,101,85,46,83,46,119,111,111,100,
> 109,
> -
> 117,115,116,50,112,120,59,73,110,102,111,114,97,110,107,119,105,100,101,119
> ,97,
> -
> 110,116,119,97,108,108,108,101,97,100,91,48,93,59,112,97,117,108,119,97,118,
> 101,
> -
> 115,117,114,101,36,40,39,35,119,97,105,116,109,97,115,115,97,114,109,115,10
> 3,111
> -
> ,101,115,103,97,105,110,108,97,110,103,112,97,105,100,33,45,45,32,108,111,99
> ,107
> -
> ,117,110,105,116,114,111,111,116,119,97,108,107,102,105,114,109,119,105,102
> ,101,
> -
> 120,109,108,34,115,111,110,103,116,101,115,116,50,48,112,120,107,105,110,10
> 0,114
> -
> ,111,119,115,116,111,111,108,102,111,110,116,109,97,105,108,115,97,102,101,
> 115,
> -
> 116,97,114,109,97,112,115,99,111,114,101,114,97,105,110,102,108,111,119,98,
> 97,98
> -
> ,121,115,112,97,110,115,97,121,115,52,112,120,59,54,112,120,59,97,114,116,11
> 5,
> -
> 102,111,111,116,114,101,97,108,119,105,107,105,104,101,97,116,115,116,101,1
> 12,
> -
> 116,114,105,112,111,114,103,47,108,97,107,101,119,101,97,107,116,111,108,10
> 0,70,
> -
> 111,114,109,99,97,115,116,102,97,110,115,98,97,110,107,118,101,114,121,114,
> 117,
> -
> 110,115,106,117,108,121,116,97,115,107,49,112,120,59,103,111,97,108,103,114
> ,101,
> -
> 119,115,108,111,119,101,100,103,101,105,100,61,34,115,101,116,115,53,112,12
> 0,59,
> -
> 46,106,115,63,52,48,112,120,105,102,32,40,115,111,111,110,115,101,97,116,11
> 0,111
> -
> ,110,101,116,117,98,101,122,101,114,111,115,101,110,116,114,101,101,100,102
> ,97,
> -
> 99,116,105,110,116,111,103,105,102,116,104,97,114,109,49,56,112,120,99,97,1
> 09,
> -
> 101,104,105,108,108,98,111,108,100,122,111,111,109,118,111,105,100,101,97,1
> 15,
> -
> 121,114,105,110,103,102,105,108,108,112,101,97,107,105,110,105,116,99,111,1
> 15,
> -
> 116,51,112,120,59,106,97,99,107,116,97,103,115,98,105,116,115,114,111,108,1
> 08,
> -
> 101,100,105,116,107,110,101,119,110,101,97,114,60,33,45,45,103,114,111,119,
> 74,83
> -
> ,79,78,100,117,116,121,78,97,109,101,115,97,108,101,121,111,117,32,108,111,1
> 16,
> -
> 115,112,97,105,110,106,97,122,122,99,111,108,100,101,121,101,115,102,105,11
> 5,104
> -
> ,119,119,119,46,114,105,115,107,116,97,98,115,112,114,101,118,49,48,112,120,
> 114,
> -
> 105,115,101,50,53,112,120,66,108,117,101,100,105,110,103,51,48,48,44,98,97,1
> 08,
> -
> 108,102,111,114,100,101,97,114,110,119,105,108,100,98,111,120,46,102,97,105
> ,114,
> -
> 108,97,99,107,118,101,114,115,112,97,105,114,106,117,110,101,116,101,99,104
> ,105,
> -
> 102,40,33,112,105,99,107,101,118,105,108,36,40,34,35,119,97,114,109,108,111,
> 114,
> -
> 100,100,111,101,115,112,117,108,108,44,48,48,48,105,100,101,97,100,114,97,1
> 19,
> -
> 104,117,103,101,115,112,111,116,102,117,110,100,98,117,114,110,104,114,101,
> 102,
> -
> 99,101,108,108,107,101,121,115,116,105,99,107,104,111,117,114,108,111,115,1
> 15,
> -
> 102,117,101,108,49,50,112,120,115,117,105,116,100,101,97,108,82,83,83,34,97,
> 103,
> -
> 101,100,103,114,101,121,71,69,84,34,101,97,115,101,97,105,109,115,103,105,1
> 14,
> -
> 108,97,105,100,115,56,112,120,59,110,97,118,121,103,114,105,100,116,105,112
> ,115,
> -
> 35,57,57,57,119,97,114,115,108,97,100,121,99,97,114,115,41,59,32,125,112,104
> ,112
> -
> ,63,104,101,108,108,116,97,108,108,119,104,111,109,122,104,58,229,42,47,13,1
> 0,32
> -
> ,49,48,48,104,97,108,108,46,10,10,65,55,112,120,59,112,117,115,104,99,104,97,
> 116
> -
> ,48,112,120,59,99,114,101,119,42,47,60,47,104,97,115,104,55,53,112,120,102,1
> 08,
> -
> 97,116,114,97,114,101,32,38,38,32,116,101,108,108,99,97,109,112,111,110,116,
> 111,
> -
> 108,97,105,100,109,105,115,115,115,107,105,112,116,101,110,116,102,105,110,
> 101,
> -
> 109,97,108,101,103,101,116,115,112,108,111,116,52,48,48,44,13,10,13,10,99,11
> 1,
> -
> 111,108,102,101,101,116,46,112,104,112,60,98,114,62,101,114,105,99,109,111,
> 115,
> -
> 116,103,117,105,100,98,101,108,108,100,101,115,99,104,97,105,114,109,97,116
> ,104,
> -
> 97,116,111,109,47,105,109,103,38,35,56,50,108,117,99,107,99,101,110,116,48,4
> 8,48
> -
> ,59,116,105,110,121,103,111,110,101,104,116,109,108,115,101,108,108,100,114
> ,117,
> -
> 103,70,82,69,69,110,111,100,101,110,105,99,107,63,105,100,61,108,111,115,10
> 1,110
> -
> ,117,108,108,118,97,115,116,119,105,110,100,82,83,83,32,119,101,97,114,114,1
> 01,
> -
> 108,121,98,101,101,110,115,97,109,101,100,117,107,101,110,97,115,97,99,97,1
> 12,
> -
> 101,119,105,115,104,103,117,108,102,84,50,51,58,104,105,116,115,115,108,111
> ,116,
> -
> 103,97,116,101,107,105,99,107,98,108,117,114,116,104,101,121,49,53,112,120,
> 39,39
> -
> ,41,59,41,59,34,62,109,115,105,101,119,105,110,115,98,105,114,100,115,111,11
> 4,
> -
> 116,98,101,116,97,115,101,101,107,84,49,56,58,111,114,100,115,116,114,101,1
> 01,
> -
> 109,97,108,108,54,48,112,120,102,97,114,109,226,128,153,115,98,111,121,115,
> 91,48
> -
> ,93,46,39,41,59,34,80,79,83,84,98,101,97,114,107,105,100,115,41,59,125,125,10
> 9,
> -
> 97,114,121,116,101,110,100,40,85,75,41,113,117,97,100,122,104,58,230,45,115,
> 105,
> -
> 122,45,45,45,45,112,114,111,112,39,41,59,13,108,105,102,116,84,49,57,58,118,
> 105,
> -
> 99,101,97,110,100,121,100,101,98,116,62,82,83,83,112,111,111,108,110,101,99,
> 107,
> -
> 98,108,111,119,84,49,54,58,100,111,111,114,101,118,97,108,84,49,55,58,108,10
> 1,
> -
> 116,115,102,97,105,108,111,114,97,108,112,111,108,108,110,111,118,97,99,111
> ,108,
> -
> 115,103,101,110,101,32,226,128,148,115,111,102,116,114,111,109,101,116,105,
> 108,
> -
> 108,114,111,115,115,60,104,51,62,112,111,117,114,102,97,100,101,112,105,110
> ,107,
> -
> 60,116,114,62,109,105,110,105,41,124,33,40,109,105,110,101,122,104,58,232,9
> 8,97,
> -
> 114,115,104,101,97,114,48,48,41,59,109,105,108,107,32,45,45,62,105,114,111,1
> 10,
> -
> 102,114,101,100,100,105,115,107,119,101,110,116,115,111,105,108,112,117,11
> 6,115,
> -
> 47,106,115,47,104,111,108,121,84,50,50,58,73,83,66,78,84,50,48,58,97,100,97,1
> 09,
> -
> 115,101,101,115,60,104,50,62,106,115,111,110,39,44,32,39,99,111,110,116,84,5
> 0,49
> -
> ,58,32,82,83,83,108,111,111,112,97,115,105,97,109,111,111,110,60,47,112,62,1
> 15,
> -
> 111,117,108,76,73,78,69,102,111,114,116,99,97,114,116,84,49,52,58,60,104,49,
> 62,
> -
> 56,48,112,120,33,45,45,60,57,112,120,59,84,48,52,58,109,105,107,101,58,52,54,
> 90,
> -
> 110,105,99,101,105,110,99,104,89,111,114,107,114,105,99,101,122,104,58,228,
> 39,41
> -
> ,41,59,112,117,114,101,109,97,103,101,112,97,114,97,116,111,110,101,98,111,1
> 10,
> -
> 100,58,51,55,90,95,111,102,95,39,93,41,59,48,48,48,44,122,104,58,231,116,97,1
> 10,
> -
> 107,121,97,114,100,98,111,119,108,98,117,115,104,58,53,54,90,74,97,118,97,51
> ,48,
> -
> 112,120,10,124,125,10,37,67,51,37,58,51,52,90,106,101,102,102,69,88,80,73,99,
> 97,
> -
> 115,104,118,105,115,97,103,111,108,102,115,110,111,119,122,104,58,233,113,1
> 17,
> -
> 101,114,46,99,115,115,115,105,99,107,109,101,97,116,109,105,110,46,98,105,1
> 10,
> -
> 100,100,101,108,108,104,105,114,101,112,105,99,115,114,101,110,116,58,51,54
> ,90,
> -
> 72,84,84,80,45,50,48,49,102,111,116,111,119,111,108,102,69,78,68,32,120,98,1
> 11,
> -
> 120,58,53,52,90,66,79,68,89,100,105,99,107,59,10,125,10,101,120,105,116,58,5
> 1,53
> -
> ,90,118,97,114,115,98,101,97,116,39,125,41,59,100,105,101,116,57,57,57,59,97,
> 110
> -
> ,110,101,125,125,60,47,91,105,93,46,76,97,110,103,107,109,194,178,119,105,11
> 4,
> -
> 101,116,111,121,115,97,100,100,115,115,101,97,108,97,108,101,120,59,10,9,12
> 5,101
> -
> ,99,104,111,110,105,110,101,46,111,114,103,48,48,53,41,116,111,110,121,106,1
> 01,
> -
> 119,115,115,97,110,100,108,101,103,115,114,111,111,102,48,48,48,41,32,50,48,
> 48,
> -
> 119,105,110,101,103,101,97,114,100,111,103,115,98,111,111,116,103,97,114,12
> 1,99,
> -
> 117,116,115,116,121,108,101,116,101,109,112,116,105,111,110,46,120,109,108,
> 99,
> -
> 111,99,107,103,97,110,103,36,40,39,46,53,48,112,120,80,104,46,68,109,105,115
> ,99,
> -
> 97,108,97,110,108,111,97,110,100,101,115,107,109,105,108,101,114,121,97,110
> ,117,
> -
> 110,105,120,100,105,115,99,41,59,125,10,100,117,115,116,99,108,105,112,41,4
> 6,10,
> -
> 10,55,48,112,120,45,50,48,48,68,86,68,115,55,93,62,60,116,97,112,101,100,101,
> 109
> -
> ,111,105,43,43,41,119,97,103,101,101,117,114,111,112,104,105,108,111,112,11
> 6,115
> -
> ,104,111,108,101,70,65,81,115,97,115,105,110,45,50,54,84,108,97,98,115,112,1
> 01,
> -
> 116,115,85,82,76,32,98,117,108,107,99,111,111,107,59,125,13,10,72,69,65,68,9
> 1,48
> -
> ,93,41,97,98,98,114,106,117,97,110,40,49,57,56,108,101,115,104,116,119,105,1
> 10,
> -
> 60,47,105,62,115,111,110,121,103,117,121,115,102,117,99,107,112,105,112,101
> ,124,
> -
> 45,10,33,48,48,50,41,110,100,111,119,91,49,93,59,91,93,59,10,76,111,103,32,11
> 5,
> -
> 97,108,116,13,10,9,9,98,97,110,103,116,114,105,109,98,97,116,104,41,123,13,1
> 0,48
> -
> ,48,112,120,10,125,41,59,107,111,58,236,102,101,101,115,97,100,62,13,115,58,
> 47,
> -
> 47,32,91,93,59,116,111,108,108,112,108,117,103,40,41,123,10,123,13,10,32,46,
> 106,
> -
> 115,39,50,48,48,112,100,117,97,108,98,111,97,116,46,74,80,71,41,59,10,125,11
> 3,
> -
> 117,111,116,41,59,10,10,39,41,59,10,13,10,125,13,50,48,49,52,50,48,49,53,50,4
> 8,
> -
> 49,54,50,48,49,55,50,48,49,56,50,48,49,57,50,48,50,48,50,48,50,49,50,48,50,50,
> 50
> -
> ,48,50,51,50,48,50,52,50,48,50,53,50,48,50,54,50,48,50,55,50,48,50,56,50,48,50,
> -
> 57,50,48,51,48,50,48,51,49,50,48,51,50,50,48,51,51,50,48,51,52,50,48,51,53,50,
> 48
> -
> ,51,54,50,48,51,55,50,48,49,51,50,48,49,50,50,48,49,49,50,48,49,48,50,48,48,57,
> -
> 50,48,48,56,50,48,48,55,50,48,48,54,50,48,48,53,50,48,48,52,50,48,48,51,50,48,
> 48
> -
> ,50,50,48,48,49,50,48,48,48,49,57,57,57,49,57,57,56,49,57,57,55,49,57,57,54,49,
> -
> 57,57,53,49,57,57,52,49,57,57,51,49,57,57,50,49,57,57,49,49,57,57,48,49,57,56,
> 57
> -
> ,49,57,56,56,49,57,56,55,49,57,56,54,49,57,56,53,49,57,56,52,49,57,56,51,49,57,
> -
> 56,50,49,57,56,49,49,57,56,48,49,57,55,57,49,57,55,56,49,57,55,55,49,57,55,54,
> 49
> -
> ,57,55,53,49,57,55,52,49,57,55,51,49,57,55,50,49,57,55,49,49,57,55,48,49,57,54,
> -
> 57,49,57,54,56,49,57,54,55,49,57,54,54,49,57,54,53,49,57,54,52,49,57,54,51,49,
> 57
> -
> ,54,50,49,57,54,49,49,57,54,48,49,57,53,57,49,57,53,56,49,57,53,55,49,57,53,54,
> -
> 49,57,53,53,49,57,53,52,49,57,53,51,49,57,53,50,49,57,53,49,49,57,53,48,49,48,
> 48
> -
> ,48,49,48,50,52,49,51,57,52,48,48,48,48,57,57,57,57,99,111,109,111,109,195,16
> 1,
> -
> 115,101,115,116,101,101,115,116,97,112,101,114,111,116,111,100,111,104,97,9
> 9,101
> -
> ,99,97,100,97,97,195,177,111,98,105,101,110,100,195,173,97,97,115,195,173,11
> 8,
> -
> 105,100,97,99,97,115,111,111,116,114,111,102,111,114,111,115,111,108,111,11
> 1,116
> -
> ,114,97,99,117,97,108,100,105,106,111,115,105,100,111,103,114,97,110,116,10
> 5,112
> -
> ,111,116,101,109,97,100,101,98,101,97,108,103,111,113,117,195,169,101,115,1
> 16,
> -
> 111,110,97,100,97,116,114,101,115,112,111,99,111,99,97,115,97,98,97,106,111,
> 116,
> -
> 111,100,97,115,105,110,111,97,103,117,97,112,117,101,115,117,110,111,115,97
> ,110,
> -
> 116,101,100,105,99,101,108,117,105,115,101,108,108,97,109,97,121,111,122,11
> 1,110
> -
> ,97,97,109,111,114,112,105,115,111,111,98,114,97,99,108,105,99,101,108,108,1
> 11,
> -
> 100,105,111,115,104,111,114,97,99,97,115,105,208,183,208,176,208,189,208,17
> 6,208
> -
> ,190,208,188,209,128,208,176,209,128,209,131,209,130,208,176,208,189,208,18
> 1,208
> -
> ,191,208,190,208,190,209,130,208,184,208,183,208,189,208,190,208,180,208,19
> 0,209
> -
> ,130,208,190,208,182,208,181,208,190,208,189,208,184,209,133,208,157,208,17
> 6,208
> -
> ,181,208,181,208,177,209,139,208,188,209,139,208,146,209,139,209,129,208,19
> 0,208
> -
> ,178,209,139,208,178,208,190,208,157,208,190,208,190,208,177,208,159,208,19
> 0,208
> -
> ,187,208,184,208,189,208,184,208,160,208,164,208,157,208,181,208,156,209,13
> 9,209
> -
> ,130,209,139,208,158,208,189,208,184,208,188,208,180,208,176,208,151,208,17
> 6,208
> -
> ,148,208,176,208,157,209,131,208,158,208,177,209,130,208,181,208,152,208,18
> 3,208
> -
> ,181,208,185,208,189,209,131,208,188,208,188,208,162,209,139,209,131,208,18
> 2,217
> -
> ,129,217,138,216,163,217,134,217,133,216,167,217,133,216,185,217,131,217,13
> 2,216
> -
> ,163,217,136,216,177,216,175,217,138,216,167,217,129,217,137,217,135,217,13
> 6,217
> -
> ,132,217,133,217,132,217,131,216,167,217,136,217,132,217,135,216,168,216,17
> 9,216
> -
> ,167,217,132,216,165,217,134,217,135,217,138,216,163,217,138,217,130,216,17
> 5,217
> -
> ,135,217,132,216,171,217,133,216,168,217,135,217,132,217,136,217,132,217,13
> 8,216
> -
> ,168,217,132,216,167,217,138,216,168,217,131,216,180,217,138,216,167,217,13
> 3,216
> -
> ,163,217,133,217,134,216,170,216,168,217,138,217,132,217,134,216,173,216,16
> 8,217
> -
> ,135,217,133,217,133,216,180,217,136,216,180,102,105,114,115,116,118,105,10
> 0,101
> -
> ,111,108,105,103,104,116,119,111,114,108,100,109,101,100,105,97,119,104,105
> ,116,
> -
> 101,99,108,111,115,101,98,108,97,99,107,114,105,103,104,116,115,109,97,108,
> 108,
> -
> 98,111,111,107,115,112,108,97,99,101,109,117,115,105,99,102,105,101,108,100
> ,111,
> -
> 114,100,101,114,112,111,105,110,116,118,97,108,117,101,108,101,118,101,108,
> 116,
> -
> 97,98,108,101,98,111,97,114,100,104,111,117,115,101,103,114,111,117,112,119
> ,111,
> -
> 114,107,115,121,101,97,114,115,115,116,97,116,101,116,111,100,97,121,119,97
> ,116,
> -
> 101,114,115,116,97,114,116,115,116,121,108,101,100,101,97,116,104,112,111,1
> 19,
> -
> 101,114,112,104,111,110,101,110,105,103,104,116,101,114,114,111,114,105,11
> 0,112,
> -
> 117,116,97,98,111,117,116,116,101,114,109,115,116,105,116,108,101,116,111,1
> 11,
> -
> 108,115,101,118,101,110,116,108,111,99,97,108,116,105,109,101,115,108,97,11
> 4,103
> -
> ,101,119,111,114,100,115,103,97,109,101,115,115,104,111,114,116,115,112,97,
> 99,
> -
> 101,102,111,99,117,115,99,108,101,97,114,109,111,100,101,108,98,108,111,99,
> 107,
> -
> 103,117,105,100,101,114,97,100,105,111,115,104,97,114,101,119,111,109,101,1
> 10,97
> -
> ,103,97,105,110,109,111,110,101,121,105,109,97,103,101,110,97,109,101,115,1
> 21,
> -
> 111,117,110,103,108,105,110,101,115,108,97,116,101,114,99,111,108,111,114,1
> 03,
> -
> 114,101,101,110,102,114,111,110,116,38,97,109,112,59,119,97,116,99,104,102,
> 111,
> -
> 114,99,101,112,114,105,99,101,114,117,108,101,115,98,101,103,105,110,97,102
> ,116,
> -
> 101,114,118,105,115,105,116,105,115,115,117,101,97,114,101,97,115,98,101,10
> 8,111
> -
> ,119,105,110,100,101,120,116,111,116,97,108,104,111,117,114,115,108,97,98,1
> 01,
> -
> 108,112,114,105,110,116,112,114,101,115,115,98,117,105,108,116,108,105,110,
> 107,
> -
> 115,115,112,101,101,100,115,116,117,100,121,116,114,97,100,101,102,111,117,
> 110,
> -
> 100,115,101,110,115,101,117,110,100,101,114,115,104,111,119,110,102,111,11
> 4,109,
> -
> 115,114,97,110,103,101,97,100,100,101,100,115,116,105,108,108,109,111,118,1
> 01,
> -
> 100,116,97,107,101,110,97,98,111,118,101,102,108,97,115,104,102,105,120,101
> ,100,
> -
> 111,102,116,101,110,111,116,104,101,114,118,105,101,119,115,99,104,101,99,1
> 07,
> -
> 108,101,103,97,108,114,105,118,101,114,105,116,101,109,115,113,117,105,99,1
> 07,
> -
> 115,104,97,112,101,104,117,109,97,110,101,120,105,115,116,103,111,105,110,1
> 03,
> -
> 109,111,118,105,101,116,104,105,114,100,98,97,115,105,99,112,101,97,99,101,
> 115,
> -
> 116,97,103,101,119,105,100,116,104,108,111,103,105,110,105,100,101,97,115,1
> 19,
> -
> 114,111,116,101,112,97,103,101,115,117,115,101,114,115,100,114,105,118,101,
> 115,
> -
> 116,111,114,101,98,114,101,97,107,115,111,117,116,104,118,111,105,99,101,11
> 5,105
> -
> ,116,101,115,109,111,110,116,104,119,104,101,114,101,98,117,105,108,100,119
> ,104,
> -
> 105,99,104,101,97,114,116,104,102,111,114,117,109,116,104,114,101,101,115,1
> 12,
> -
> 111,114,116,112,97,114,116,121,67,108,105,99,107,108,111,119,101,114,108,10
> 5,118
> -
> ,101,115,99,108,97,115,115,108,97,121,101,114,101,110,116,114,121,115,116,1
> 11,
> -
> 114,121,117,115,97,103,101,115,111,117,110,100,99,111,117,114,116,121,111,1
> 17,
> -
> 114,32,98,105,114,116,104,112,111,112,117,112,116,121,112,101,115,97,112,11
> 2,108
> -
> ,121,73,109,97,103,101,98,101,105,110,103,117,112,112,101,114,110,111,116,1
> 01,
> -
> 115,101,118,101,114,121,115,104,111,119,115,109,101,97,110,115,101,120,116,
> 114,
> -
> 97,109,97,116,99,104,116,114,97,99,107,107,110,111,119,110,101,97,114,108,1
> 21,98
> -
> ,101,103,97,110,115,117,112,101,114,112,97,112,101,114,110,111,114,116,104,
> 108,
> -
> 101,97,114,110,103,105,118,101,110,110,97,109,101,100,101,110,100,101,100,8
> 4,101
> -
> ,114,109,115,112,97,114,116,115,71,114,111,117,112,98,114,97,110,100,117,11
> 5,105
> -
> ,110,103,119,111,109,97,110,102,97,108,115,101,114,101,97,100,121,97,117,10
> 0,105
> -
> ,111,116,97,107,101,115,119,104,105,108,101,46,99,111,109,47,108,105,118,10
> 1,100
> -
> ,99,97,115,101,115,100,97,105,108,121,99,104,105,108,100,103,114,101,97,116,
> 106,
> -
> 117,100,103,101,116,104,111,115,101,117,110,105,116,115,110,101,118,101,11
> 4,98,
> -
> 114,111,97,100,99,111,97,115,116,99,111,118,101,114,97,112,112,108,101,102,
> 105,
> -
> 108,101,115,99,121,99,108,101,115,99,101,110,101,112,108,97,110,115,99,108,
> 105,
> -
> 99,107,119,114,105,116,101,113,117,101,101,110,112,105,101,99,101,101,109,9
> 7,105
> -
> ,108,102,114,97,109,101,111,108,100,101,114,112,104,111,116,111,108,105,109
> ,105,
> -
> 116,99,97,99,104,101,99,105,118,105,108,115,99,97,108,101,101,110,116,101,1
> 14,
> -
> 116,104,101,109,101,116,104,101,114,101,116,111,117,99,104,98,111,117,110,1
> 00,
> -
> 114,111,121,97,108,97,115,107,101,100,119,104,111,108,101,115,105,110,99,10
> 1,115
> -
> ,116,111,99,107,32,110,97,109,101,102,97,105,116,104,104,101,97,114,116,101,
> 109,
> -
> 112,116,121,111,102,102,101,114,115,99,111,112,101,111,119,110,101,100,109,
> 105,
> -
> 103,104,116,97,108,98,117,109,116,104,105,110,107,98,108,111,111,100,97,114
> ,114,
> -
> 97,121,109,97,106,111,114,116,114,117,115,116,99,97,110,111,110,117,110,105
> ,111,
> -
> 110,99,111,117,110,116,118,97,108,105,100,115,116,111,110,101,83,116,121,10
> 8,101
> -
> ,76,111,103,105,110,104,97,112,112,121,111,99,99,117,114,108,101,102,116,58,
> 102,
> -
> 114,101,115,104,113,117,105,116,101,102,105,108,109,115,103,114,97,100,101,
> 110,
> -
> 101,101,100,115,117,114,98,97,110,102,105,103,104,116,98,97,115,105,115,104
> ,111,
> -
> 118,101,114,97,117,116,111,59,114,111,117,116,101,46,104,116,109,108,109,10
> 5,120
> -
> ,101,100,102,105,110,97,108,89,111,117,114,32,115,108,105,100,101,116,111,1
> 12,
> -
> 105,99,98,114,111,119,110,97,108,111,110,101,100,114,97,119,110,115,112,108
> ,105,
> -
> 116,114,101,97,99,104,82,105,103,104,116,100,97,116,101,115,109,97,114,99,1
> 04,
> -
> 113,117,111,116,101,103,111,111,100,115,76,105,110,107,115,100,111,117,98,1
> 16,97
> -
> ,115,121,110,99,116,104,117,109,98,97,108,108,111,119,99,104,105,101,102,12
> 1,111
> -
> ,117,116,104,110,111,118,101,108,49,48,112,120,59,115,101,114,118,101,117,1
> 10,
> -
> 116,105,108,104,97,110,100,115,67,104,101,99,107,83,112,97,99,101,113,117,1
> 01,
> -
> 114,121,106,97,109,101,115,101,113,117,97,108,116,119,105,99,101,48,44,48,4
> 8,48,
> -
> 83,116,97,114,116,112,97,110,101,108,115,111,110,103,115,114,111,117,110,10
> 0,101
> -
> ,105,103,104,116,115,104,105,102,116,119,111,114,116,104,112,111,115,116,11
> 5,108
> -
> ,101,97,100,115,119,101,101,107,115,97,118,111,105,100,116,104,101,115,101,
> 109,
> -
> 105,108,101,115,112,108,97,110,101,115,109,97,114,116,97,108,112,104,97,112
> ,108,
> -
> 97,110,116,109,97,114,107,115,114,97,116,101,115,112,108,97,121,115,99,108,
> 97,
> -
> 105,109,115,97,108,101,115,116,101,120,116,115,115,116,97,114,115,119,114,1
> 11,
> -
> 110,103,60,47,104,51,62,116,104,105,110,103,46,111,114,103,47,109,117,108,1
> 16,
> -
> 105,104,101,97,114,100,80,111,119,101,114,115,116,97,110,100,116,111,107,10
> 1,110
> -
> ,115,111,108,105,100,40,116,104,105,115,98,114,105,110,103,115,104,105,112,
> 115,
> -
> 115,116,97,102,102,116,114,105,101,100,99,97,108,108,115,102,117,108,108,12
> 1,102
> -
> ,97,99,116,115,97,103,101,110,116,84,104,105,115,32,47,47,45,45,62,97,100,10
> 9,
> -
> 105,110,101,103,121,112,116,69,118,101,110,116,49,53,112,120,59,69,109,97,1
> 05,
> -
> 108,116,114,117,101,34,99,114,111,115,115,115,112,101,110,116,98,108,111,10
> 3,115
> -
> ,98,111,120,34,62,110,111,116,101,100,108,101,97,118,101,99,104,105,110,97,1
> 15,
> -
> 105,122,101,115,103,117,101,115,116,60,47,104,52,62,114,111,98,111,116,104,
> 101,
> -
> 97,118,121,116,114,117,101,44,115,101,118,101,110,103,114,97,110,100,99,114
> ,105,
> -
> 109,101,115,105,103,110,115,97,119,97,114,101,100,97,110,99,101,112,104,97,
> 115,
> -
> 101,62,60,33,45,45,101,110,95,85,83,38,35,51,57,59,50,48,48,112,120,95,110,97,
> -
> 109,101,108,97,116,105,110,101,110,106,111,121,97,106,97,120,46,97,116,105,
> 111,
> -
> 110,115,109,105,116,104,85,46,83,46,32,104,111,108,100,115,112,101,116,101,
> 114,
> -
> 105,110,100,105,97,110,97,118,34,62,99,104,97,105,110,115,99,111,114,101,99,
> 111,
> -
> 109,101,115,100,111,105,110,103,112,114,105,111,114,83,104,97,114,101,49,57
> ,57,
> -
> 48,115,114,111,109,97,110,108,105,115,116,115,106,97,112,97,110,102,97,108,
> 108,
> -
> 115,116,114,105,97,108,111,119,110,101,114,97,103,114,101,101,60,47,104,50,
> 62,97
> -
> ,98,117,115,101,97,108,101,114,116,111,112,101,114,97,34,45,47,47,87,99,97,1
> 14,
> -
> 100,115,104,105,108,108,115,116,101,97,109,115,80,104,111,116,111,116,114,1
> 17,
> -
> 116,104,99,108,101,97,110,46,112,104,112,63,115,97,105,110,116,109,101,116,
> 97,
> -
> 108,108,111,117,105,115,109,101,97,110,116,112,114,111,111,102,98,114,105,1
> 01,
> -
> 102,114,111,119,34,62,103,101,110,114,101,116,114,117,99,107,108,111,111,10
> 7,115
> -
> ,86,97,108,117,101,70,114,97,109,101,46,110,101,116,47,45,45,62,10,60,116,11
> 4,
> -
> 121,32,123,10,118,97,114,32,109,97,107,101,115,99,111,115,116,115,112,108,9
> 7,105
> -
> ,110,97,100,117,108,116,113,117,101,115,116,116,114,97,105,110,108,97,98,11
> 1,114
> -
> ,104,101,108,112,115,99,97,117,115,101,109,97,103,105,99,109,111,116,111,11
> 4,116
> -
> ,104,101,105,114,50,53,48,112,120,108,101,97,115,116,115,116,101,112,115,67,
> 111,
> -
> 117,110,116,99,111,117,108,100,103,108,97,115,115,115,105,100,101,115,102,1
> 17,
> -
> 110,100,115,104,111,116,101,108,97,119,97,114,100,109,111,117,116,104,109,1
> 11,
> -
> 118,101,115,112,97,114,105,115,103,105,118,101,115,100,117,116,99,104,116,1
> 01,
> -
> 120,97,115,102,114,117,105,116,110,117,108,108,44,124,124,91,93,59,116,111,
> 112,
> -
> 34,62,10,60,33,45,45,80,79,83,84,34,111,99,101,97,110,60,98,114,47,62,102,108,
> -
> 111,111,114,115,112,101,97,107,100,101,112,116,104,32,115,105,122,101,98,97
> ,110,
> -
> 107,115,99,97,116,99,104,99,104,97,114,116,50,48,112,120,59,97,108,105,103,1
> 10,
> -
> 100,101,97,108,115,119,111,117,108,100,53,48,112,120,59,117,114,108,61,34,1
> 12,97
> -
> ,114,107,115,109,111,117,115,101,77,111,115,116,32,46,46,46,60,47,97,109,111
> ,110
> -
> ,103,98,114,97,105,110,98,111,100,121,32,110,111,110,101,59,98,97,115,101,10
> 0,99
> -
> ,97,114,114,121,100,114,97,102,116,114,101,102,101,114,112,97,103,101,95,10
> 4,111
> -
> ,109,101,46,109,101,116,101,114,100,101,108,97,121,100,114,101,97,109,112,1
> 14,
> -
> 111,118,101,106,111,105,110,116,60,47,116,114,62,100,114,117,103,115,60,33,
> 45,45
> -
> ,32,97,112,114,105,108,105,100,101,97,108,97,108,108,101,110,101,120,97,99,1
> 16,
> -
> 102,111,114,116,104,99,111,100,101,115,108,111,103,105,99,86,105,101,119,32
> ,115,
> -
> 101,101,109,115,98,108,97,110,107,112,111,114,116,115,32,40,50,48,48,115,97,
> 118,
> -
> 101,100,95,108,105,110,107,103,111,97,108,115,103,114,97,110,116,103,114,10
> 1,101
> -
> ,107,104,111,109,101,115,114,105,110,103,115,114,97,116,101,100,51,48,112,1
> 20,59
> -
> ,119,104,111,115,101,112,97,114,115,101,40,41,59,34,32,66,108,111,99,107,108
> ,105
> -
> ,110,117,120,106,111,110,101,115,112,105,120,101,108,39,41,59,34,62,41,59,10
> 5,
> -
> 102,40,45,108,101,102,116,100,97,118,105,100,104,111,114,115,101,70,111,99,
> 117,
> -
> 115,114,97,105,115,101,98,111,120,101,115,84,114,97,99,107,101,109,101,110,
> 116,
> -
> 60,47,101,109,62,98,97,114,34,62,46,115,114,99,61,116,111,119,101,114,97,108
> ,116
> -
> ,61,34,99,97,98,108,101,104,101,110,114,121,50,52,112,120,59,115,101,116,117
> ,112
> -
> ,105,116,97,108,121,115,104,97,114,112,109,105,110,111,114,116,97,115,116,1
> 01,
> -
> 119,97,110,116,115,116,104,105,115,46,114,101,115,101,116,119,104,101,101,1
> 08,
> -
> 103,105,114,108,115,47,99,115,115,47,49,48,48,37,59,99,108,117,98,115,115,11
> 6,
> -
> 117,102,102,98,105,98,108,101,118,111,116,101,115,32,49,48,48,48,107,111,11
> 4,101
> -
> ,97,125,41,59,13,10,98,97,110,100,115,113,117,101,117,101,61,32,123,125,59,5
> 6,48
> -
> ,112,120,59,99,107,105,110,103,123,13,10,9,9,97,104,101,97,100,99,108,111,99,
> 107
> -
> ,105,114,105,115,104,108,105,107,101,32,114,97,116,105,111,115,116,97,116,1
> 15,70
> -
> ,111,114,109,34,121,97,104,111,111,41,91,48,93,59,65,98,111,117,116,102,105,
> 110,
> -
> 100,115,60,47,104,49,62,100,101,98,117,103,116,97,115,107,115,85,82,76,32,61
> ,99,
> -
> 101,108,108,115,125,41,40,41,59,49,50,112,120,59,112,114,105,109,101,116,10
> 1,108
> -
> ,108,115,116,117,114,110,115,48,120,54,48,48,46,106,112,103,34,115,112,97,10
> 5,
> -
> 110,98,101,97,99,104,116,97,120,101,115,109,105,99,114,111,97,110,103,101,1
> 08,45
> -
> ,45,62,60,47,103,105,102,116,115,115,116,101,118,101,45,108,105,110,107,98,1
> 11,
> -
> 100,121,46,125,41,59,10,9,109,111,117,110,116,32,40,49,57,57,70,65,81,60,47,1
> 14,
> -
> 111,103,101,114,102,114,97,110,107,67,108,97,115,115,50,56,112,120,59,102,1
> 01,
> -
> 101,100,115,60,104,49,62,60,115,99,111,116,116,116,101,115,116,115,50,50,11
> 2,120
> -
> ,59,100,114,105,110,107,41,32,124,124,32,108,101,119,105,115,115,104,97,108,
> 108,
> -
> 35,48,51,57,59,32,102,111,114,32,108,111,118,101,100,119,97,115,116,101,48,4
> 8,
> -
> 112,120,59,106,97,58,227,130,115,105,109,111,110,60,102,111,110,116,114,101
> ,112,
> -
> 108,121,109,101,101,116,115,117,110,116,101,114,99,104,101,97,112,116,105,1
> 03,
> -
> 104,116,66,114,97,110,100,41,32,33,61,32,100,114,101,115,115,99,108,105,112,
> 115,
> -
> 114,111,111,109,115,111,110,107,101,121,109,111,98,105,108,109,97,105,110,4
> 6,78,
> -
> 97,109,101,32,112,108,97,116,101,102,117,110,110,121,116,114,101,101,115,99
> ,111,
> -
> 109,47,34,49,46,106,112,103,119,109,111,100,101,112,97,114,97,109,83,84,65,8
> 2,84
> -
> ,108,101,102,116,32,105,100,100,101,110,44,32,50,48,49,41,59,10,125,10,102,1
> 11,
> -
> 114,109,46,118,105,114,117,115,99,104,97,105,114,116,114,97,110,115,119,111
> ,114,
> -
> 115,116,80,97,103,101,115,105,116,105,111,110,112,97,116,99,104,60,33,45,45,
> 10,
> -
> 111,45,99,97,99,102,105,114,109,115,116,111,117,114,115,44,48,48,48,32,97,11
> 5,
> -
> 105,97,110,105,43,43,41,123,97,100,111,98,101,39,41,91,48,93,105,100,61,49,4
> 8,98
> -
> ,111,116,104,59,109,101,110,117,32,46,50,46,109,105,46,112,110,103,34,107,10
> 1,
> -
> 118,105,110,99,111,97,99,104,67,104,105,108,100,98,114,117,99,101,50,46,106,
> 112,
> -
> 103,85,82,76,41,43,46,106,112,103,124,115,117,105,116,101,115,108,105,99,10
> 1,104
> -
> ,97,114,114,121,49,50,48,34,32,115,119,101,101,116,116,114,62,13,10,110,97,1
> 09,
> -
> 101,61,100,105,101,103,111,112,97,103,101,32,115,119,105,115,115,45,45,62,1
> 0,10,
> -
> 35,102,102,102,59,34,62,76,111,103,46,99,111,109,34,116,114,101,97,116,115,1
> 04,
> -
> 101,101,116,41,32,38,38,32,49,52,112,120,59,115,108,101,101,112,110,116,101,
> 110,
> -
> 116,102,105,108,101,100,106,97,58,227,131,105,100,61,34,99,78,97,109,101,34,
> 119,
> -
> 111,114,115,101,115,104,111,116,115,45,98,111,120,45,100,101,108,116,97,10,
> 38,
> -
> 108,116,59,98,101,97,114,115,58,52,56,90,60,100,97,116,97,45,114,117,114,97,
> 108,
> -
> 60,47,97,62,32,115,112,101,110,100,98,97,107,101,114,115,104,111,112,115,61,
> 32,
> -
> 34,34,59,112,104,112,34,62,99,116,105,111,110,49,51,112,120,59,98,114,105,97
> ,110
> -
> ,104,101,108,108,111,115,105,122,101,61,111,61,37,50,70,32,106,111,105,110,1
> 09,
> -
> 97,121,98,101,60,105,109,103,32,105,109,103,34,62,44,32,102,106,115,105,109,
> 103,
> -
> 34,32,34,41,91,48,93,77,84,111,112,66,84,121,112,101,34,110,101,119,108,121,
> 68,
> -
> 97,110,115,107,99,122,101,99,104,116,114,97,105,108,107,110,111,119,115,60,
> 47,
> -
> 104,53,62,102,97,113,34,62,122,104,45,99,110,49,48,41,59,10,45,49,34,41,59,11
> 6,
> -
> 121,112,101,61,98,108,117,101,115,116,114,117,108,121,100,97,118,105,115,46
> ,106,
> -
> 115,39,59,62,13,10,60,33,115,116,101,101,108,32,121,111,117,32,104,50,62,13,
> 10,
> -
> 102,111,114,109,32,106,101,115,117,115,49,48,48,37,32,109,101,110,117,46,13,
> 10,9
> -
> ,13,10,119,97,108,101,115,114,105,115,107,115,117,109,101,110,116,100,100,1
> 05,
> -
> 110,103,98,45,108,105,107,116,101,97,99,104,103,105,102,34,32,118,101,103,9
> 7,115
> -
> ,100,97,110,115,107,101,101,115,116,105,115,104,113,105,112,115,117,111,109
> ,105,
> -
> 115,111,98,114,101,100,101,115,100,101,101,110,116,114,101,116,111,100,111,
> 115,
> -
> 112,117,101,100,101,97,195,177,111,115,101,115,116,195,161,116,105,101,110,
> 101,
> -
> 104,97,115,116,97,111,116,114,111,115,112,97,114,116,101,100,111,110,100,10
> 1,110
> -
> ,117,101,118,111,104,97,99,101,114,102,111,114,109,97,109,105,115,109,111,1
> 09,
> -
> 101,106,111,114,109,117,110,100,111,97,113,117,195,173,100,195,173,97,115,1
> 15,
> -
> 195,179,108,111,97,121,117,100,97,102,101,99,104,97,116,111,100,97,115,116,
> 97,
> -
> 110,116,111,109,101,110,111,115,100,97,116,111,115,111,116,114,97,115,115,1
> 05,
> -
> 116,105,111,109,117,99,104,111,97,104,111,114,97,108,117,103,97,114,109,97,
> 121,
> -
> 111,114,101,115,116,111,115,104,111,114,97,115,116,101,110,101,114,97,110,1
> 16,
> -
> 101,115,102,111,116,111,115,101,115,116,97,115,112,97,195,173,115,110,117,1
> 01,
> -
> 118,97,115,97,108,117,100,102,111,114,111,115,109,101,100,105,111,113,117,1
> 05,
> -
> 101,110,109,101,115,101,115,112,111,100,101,114,99,104,105,108,101,115,101,
> 114,
> -
> 195,161,118,101,99,101,115,100,101,99,105,114,106,111,115,195,169,101,115,1
> 16,97
> -
> ,114,118,101,110,116,97,103,114,117,112,111,104,101,99,104,111,101,108,108,
> 111,
> -
> 115,116,101,110,103,111,97,109,105,103,111,99,111,115,97,115,110,105,118,10
> 1,108
> -
> ,103,101,110,116,101,109,105,115,109,97,97,105,114,101,115,106,117,108,105,
> 111,
> -
> 116,101,109,97,115,104,97,99,105,97,102,97,118,111,114,106,117,110,105,111,
> 108,
> -
> 105,98,114,101,112,117,110,116,111,98,117,101,110,111,97,117,116,111,114,97
> ,98,
> -
> 114,105,108,98,117,101,110,97,116,101,120,116,111,109,97,114,122,111,115,97
> ,98,
> -
> 101,114,108,105,115,116,97,108,117,101,103,111,99,195,179,109,111,101,110,1
> 01,
> -
> 114,111,106,117,101,103,111,112,101,114,195,186,104,97,98,101,114,101,115,1
> 16,
> -
> 111,121,110,117,110,99,97,109,117,106,101,114,118,97,108,111,114,102,117,10
> 1,114
> -
> ,97,108,105,98,114,111,103,117,115,116,97,105,103,117,97,108,118,111,116,11
> 1,115
> -
> ,99,97,115,111,115,103,117,195,173,97,112,117,101,100,111,115,111,109,111,1
> 15,97
> -
> ,118,105,115,111,117,115,116,101,100,100,101,98,101,110,110,111,99,104,101,
> 98,
> -
> 117,115,99,97,102,97,108,116,97,101,117,114,111,115,115,101,114,105,101,100
> ,105,
> -
> 99,104,111,99,117,114,115,111,99,108,97,118,101,99,97,115,97,115,108,101,19
> 5,179
> -
> ,110,112,108,97,122,111,108,97,114,103,111,111,98,114,97,115,118,105,115,11
> 6,97,
> -
> 97,112,111,121,111,106,117,110,116,111,116,114,97,116,97,118,105,115,116,11
> 1,99,
> -
> 114,101,97,114,99,97,109,112,111,104,101,109,111,115,99,105,110,99,111,99,9
> 7,114
> -
> ,103,111,112,105,115,111,115,111,114,100,101,110,104,97,99,101,110,195,161,
> 114,
> -
> 101,97,100,105,115,99,111,112,101,100,114,111,99,101,114,99,97,112,117,101,
> 100,
> -
> 97,112,97,112,101,108,109,101,110,111,114,195,186,116,105,108,99,108,97,114
> ,111,
> -
> 106,111,114,103,101,99,97,108,108,101,112,111,110,101,114,116,97,114,100,10
> 1,110
> -
> ,97,100,105,101,109,97,114,99,97,115,105,103,117,101,101,108,108,97,115,115,
> 105,
> -
> 103,108,111,99,111,99,104,101,109,111,116,111,115,109,97,100,114,101,99,108
> ,97,
> -
> 115,101,114,101,115,116,111,110,105,195,177,111,113,117,101,100,97,112,97,1
> 15,97
> -
> ,114,98,97,110,99,111,104,105,106,111,115,118,105,97,106,101,112,97,98,108,1
> 11,
> -
> 195,169,115,116,101,118,105,101,110,101,114,101,105,110,111,100,101,106,97,
> 114,
> -
> 102,111,110,100,111,99,97,110,97,108,110,111,114,116,101,108,101,116,114,97
> ,99,
> -
> 97,117,115,97,116,111,109,97,114,109,97,110,111,115,108,117,110,101,115,97,
> 117,
> -
> 116,111,115,118,105,108,108,97,118,101,110,100,111,112,101,115,97,114,116,1
> 05,
> -
> 112,111,115,116,101,110,103,97,109,97,114,99,111,108,108,101,118,97,112,97,
> 100,
> -
> 114,101,117,110,105,100,111,118,97,109,111,115,122,111,110,97,115,97,109,98
> ,111,
> -
> 115,98,97,110,100,97,109,97,114,105,97,97,98,117,115,111,109,117,99,104,97,1
> 15,
> -
> 117,98,105,114,114,105,111,106,97,118,105,118,105,114,103,114,97,100,111,99
> ,104,
> -
> 105,99,97,97,108,108,195,173,106,111,118,101,110,100,105,99,104,97,101,115,
> 116,
> -
> 97,110,116,97,108,101,115,115,97,108,105,114,115,117,101,108,111,112,101,11
> 5,111
> -
> ,115,102,105,110,101,115,108,108,97,109,97,98,117,115,99,111,195,169,115,11
> 6,97,
> -
> 108,108,101,103,97,110,101,103,114,111,112,108,97,122,97,104,117,109,111,11
> 4,112
> -
> ,97,103,97,114,106,117,110,116,97,100,111,98,108,101,105,115,108,97,115,98,1
> 11,
> -
> 108,115,97,98,97,195,177,111,104,97,98,108,97,108,117,99,104,97,195,129,114,
> 101,
> -
> 97,100,105,99,101,110,106,117,103,97,114,110,111,116,97,115,118,97,108,108,
> 101,
> -
> 97,108,108,195,161,99,97,114,103,97,100,111,108,111,114,97,98,97,106,111,10
> 1,115
> -
> ,116,195,169,103,117,115,116,111,109,101,110,116,101,109,97,114,105,111,102
> ,105,
> -
> 114,109,97,99,111,115,116,111,102,105,99,104,97,112,108,97,116,97,104,111,1
> 03,97
> -
> ,114,97,114,116,101,115,108,101,121,101,115,97,113,117,101,108,109,117,115,
> 101,
> -
> 111,98,97,115,101,115,112,111,99,111,115,109,105,116,97,100,99,105,101,108,
> 111,
> -
> 99,104,105,99,111,109,105,101,100,111,103,97,110,97,114,115,97,110,116,111,
> 101,
> -
> 116,97,112,97,100,101,98,101,115,112,108,97,121,97,114,101,100,101,115,115,
> 105,
> -
> 101,116,101,99,111,114,116,101,99,111,114,101,97,100,117,100,97,115,100,101
> ,115,
> -
> 101,111,118,105,101,106,111,100,101,115,101,97,97,103,117,97,115,38,113,117
> ,111,
> -
> 116,59,100,111,109,97,105,110,99,111,109,109,111,110,115,116,97,116,117,115
> ,101,
> -
> 118,101,110,116,115,109,97,115,116,101,114,115,121,115,116,101,109,97,99,11
> 6,105
> -
> ,111,110,98,97,110,110,101,114,114,101,109,111,118,101,115,99,114,111,108,1
> 08,
> -
> 117,112,100,97,116,101,103,108,111,98,97,108,109,101,100,105,117,109,102,10
> 5,108
> -
> ,116,101,114,110,117,109,98,101,114,99,104,97,110,103,101,114,101,115,117,1
> 08,
> -
> 116,112,117,98,108,105,99,115,99,114,101,101,110,99,104,111,111,115,101,110
> ,111,
> -
> 114,109,97,108,116,114,97,118,101,108,105,115,115,117,101,115,115,111,117,1
> 14,99
> -
> ,101,116,97,114,103,101,116,115,112,114,105,110,103,109,111,100,117,108,101
> ,109,
> -
> 111,98,105,108,101,115,119,105,116,99,104,112,104,111,116,111,115,98,111,11
> 4,100
> -
> ,101,114,114,101,103,105,111,110,105,116,115,101,108,102,115,111,99,105,97,
> 108,
> -
> 97,99,116,105,118,101,99,111,108,117,109,110,114,101,99,111,114,100,102,111
> ,108,
> -
> 108,111,119,116,105,116,108,101,62,101,105,116,104,101,114,108,101,110,103,
> 116,
> -
> 104,102,97,109,105,108,121,102,114,105,101,110,100,108,97,121,111,117,116,9
> 7,117
> -
> ,116,104,111,114,99,114,101,97,116,101,114,101,118,105,101,119,115,117,109,
> 109,
> -
> 101,114,115,101,114,118,101,114,112,108,97,121,101,100,112,108,97,121,101,1
> 14,
> -
> 101,120,112,97,110,100,112,111,108,105,99,121,102,111,114,109,97,116,100,11
> 1,117
> -
> ,98,108,101,112,111,105,110,116,115,115,101,114,105,101,115,112,101,114,115
> ,111,
> -
> 110,108,105,118,105,110,103,100,101,115,105,103,110,109,111,110,116,104,11
> 5,102,
> -
> 111,114,99,101,115,117,110,105,113,117,101,119,101,105,103,104,116,112,101,
> 111,
> -
> 112,108,101,101,110,101,114,103,121,110,97,116,117,114,101,115,101,97,114,9
> 9,104
> -
> ,102,105,103,117,114,101,104,97,118,105,110,103,99,117,115,116,111,109,111,
> 102,
> -
> 102,115,101,116,108,101,116,116,101,114,119,105,110,100,111,119,115,117,98,
> 109,
> -
> 105,116,114,101,110,100,101,114,103,114,111,117,112,115,117,112,108,111,97,
> 100,
> -
> 104,101,97,108,116,104,109,101,116,104,111,100,118,105,100,101,111,115,115,
> 99,
> -
> 104,111,111,108,102,117,116,117,114,101,115,104,97,100,111,119,100,101,98,9
> 7,116
> -
> ,101,118,97,108,117,101,115,79,98,106,101,99,116,111,116,104,101,114,115,11
> 4,105
> -
> ,103,104,116,115,108,101,97,103,117,101,99,104,114,111,109,101,115,105,109,
> 112,
> -
> 108,101,110,111,116,105,99,101,115,104,97,114,101,100,101,110,100,105,110,1
> 03,
> -
> 115,101,97,115,111,110,114,101,112,111,114,116,111,110,108,105,110,101,115,
> 113,
> -
> 117,97,114,101,98,117,116,116,111,110,105,109,97,103,101,115,101,110,97,98,
> 108,
> -
> 101,109,111,118,105,110,103,108,97,116,101,115,116,119,105,110,116,101,114,
> 70,
> -
> 114,97,110,99,101,112,101,114,105,111,100,115,116,114,111,110,103,114,101,1
> 12,
> -
> 101,97,116,76,111,110,100,111,110,100,101,116,97,105,108,102,111,114,109,10
> 1,100
> -
> ,100,101,109,97,110,100,115,101,99,117,114,101,112,97,115,115,101,100,116,1
> 11,
> -
> 103,103,108,101,112,108,97,99,101,115,100,101,118,105,99,101,115,116,97,116
> ,105,
> -
> 99,99,105,116,105,101,115,115,116,114,101,97,109,121,101,108,108,111,119,97
> ,116,
> -
> 116,97,99,107,115,116,114,101,101,116,102,108,105,103,104,116,104,105,100,1
> 00,
> -
> 101,110,105,110,102,111,34,62,111,112,101,110,101,100,117,115,101,102,117,1
> 08,
> -
> 118,97,108,108,101,121,99,97,117,115,101,115,108,101,97,100,101,114,115,101
> ,99,
> -
> 114,101,116,115,101,99,111,110,100,100,97,109,97,103,101,115,112,111,114,11
> 6,115
> -
> ,101,120,99,101,112,116,114,97,116,105,110,103,115,105,103,110,101,100,116,
> 104,
> -
> 105,110,103,115,101,102,102,101,99,116,102,105,101,108,100,115,115,116,97,1
> 16,
> -
> 101,115,111,102,102,105,99,101,118,105,115,117,97,108,101,100,105,116,111,1
> 14,
> -
> 118,111,108,117,109,101,82,101,112,111,114,116,109,117,115,101,117,109,109,
> 111,
> -
> 118,105,101,115,112,97,114,101,110,116,97,99,99,101,115,115,109,111,115,116
> ,108,
> -
> 121,109,111,116,104,101,114,34,32,105,100,61,34,109,97,114,107,101,116,103,
> 114,
> -
> 111,117,110,100,99,104,97,110,99,101,115,117,114,118,101,121,98,101,102,111
> ,114,
> -
> 101,115,121,109,98,111,108,109,111,109,101,110,116,115,112,101,101,99,104,1
> 09,
> -
> 111,116,105,111,110,105,110,115,105,100,101,109,97,116,116,101,114,67,101,1
> 10,
> -
> 116,101,114,111,98,106,101,99,116,101,120,105,115,116,115,109,105,100,100,1
> 08,
> -
> 101,69,117,114,111,112,101,103,114,111,119,116,104,108,101,103,97,99,121,10
> 9,97,
> -
> 110,110,101,114,101,110,111,117,103,104,99,97,114,101,101,114,97,110,115,11
> 9,101
> -
> ,114,111,114,105,103,105,110,112,111,114,116,97,108,99,108,105,101,110,116,
> 115,
> -
> 101,108,101,99,116,114,97,110,100,111,109,99,108,111,115,101,100,116,111,11
> 2,105
> -
> ,99,115,99,111,109,105,110,103,102,97,116,104,101,114,111,112,116,105,111,1
> 10,
> -
> 115,105,109,112,108,121,114,97,105,115,101,100,101,115,99,97,112,101,99,104
> ,111,
> -
> 115,101,110,99,104,117,114,99,104,100,101,102,105,110,101,114,101,97,115,11
> 1,110
> -
> ,99,111,114,110,101,114,111,117,116,112,117,116,109,101,109,111,114,121,105
> ,102,
> -
> 114,97,109,101,112,111,108,105,99,101,109,111,100,101,108,115,78,117,109,98
> ,101,
> -
> 114,100,117,114,105,110,103,111,102,102,101,114,115,115,116,121,108,101,11
> 5,107,
> -
> 105,108,108,101,100,108,105,115,116,101,100,99,97,108,108,101,100,115,105,1
> 08,
> -
> 118,101,114,109,97,114,103,105,110,100,101,108,101,116,101,98,101,116,116,1
> 01,
> -
> 114,98,114,111,119,115,101,108,105,109,105,116,115,71,108,111,98,97,108,115
> ,105,
> -
> 110,103,108,101,119,105,100,103,101,116,99,101,110,116,101,114,98,117,100,1
> 03,
> -
> 101,116,110,111,119,114,97,112,99,114,101,100,105,116,99,108,97,105,109,115
> ,101,
> -
> 110,103,105,110,101,115,97,102,101,116,121,99,104,111,105,99,101,115,112,10
> 5,114
> -
> ,105,116,45,115,116,121,108,101,115,112,114,101,97,100,109,97,107,105,110,1
> 03,
> -
> 110,101,101,100,101,100,114,117,115,115,105,97,112,108,101,97,115,101,101,1
> 20,
> -
> 116,101,110,116,83,99,114,105,112,116,98,114,111,107,101,110,97,108,108,111
> ,119,
> -
> 115,99,104,97,114,103,101,100,105,118,105,100,101,102,97,99,116,111,114,109
> ,101,
> -
> 109,98,101,114,45,98,97,115,101,100,116,104,101,111,114,121,99,111,110,102,
> 105,
> -
> 103,97,114,111,117,110,100,119,111,114,107,101,100,104,101,108,112,101,100,
> 67,
> -
> 104,117,114,99,104,105,109,112,97,99,116,115,104,111,117,108,100,97,108,119
> ,97,
> -
> 121,115,108,111,103,111,34,32,98,111,116,116,111,109,108,105,115,116,34,62,
> 41,
> -
> 123,118,97,114,32,112,114,101,102,105,120,111,114,97,110,103,101,72,101,97,
> 100,
> -
> 101,114,46,112,117,115,104,40,99,111,117,112,108,101,103,97,114,100,101,110
> ,98,
> -
> 114,105,100,103,101,108,97,117,110,99,104,82,101,118,105,101,119,116,97,107
> ,105,
> -
> 110,103,118,105,115,105,111,110,108,105,116,116,108,101,100,97,116,105,110,
> 103,
> -
> 66,117,116,116,111,110,98,101,97,117,116,121,116,104,101,109,101,115,102,11
> 1,114
> -
> ,103,111,116,83,101,97,114,99,104,97,110,99,104,111,114,97,108,109,111,115,1
> 16,
> -
> 108,111,97,100,101,100,67,104,97,110,103,101,114,101,116,117,114,110,115,11
> 6,114
> -
> ,105,110,103,114,101,108,111,97,100,77,111,98,105,108,101,105,110,99,111,10
> 9,101
> -
> ,115,117,112,112,108,121,83,111,117,114,99,101,111,114,100,101,114,115,118,
> 105,
> -
> 101,119,101,100,38,110,98,115,112,59,99,111,117,114,115,101,65,98,111,117,1
> 16,32
> -
> ,105,115,108,97,110,100,60,104,116,109,108,32,99,111,111,107,105,101,110,97,
> 109,
> -
> 101,61,34,97,109,97,122,111,110,109,111,100,101,114,110,97,100,118,105,99,1
> 01,
> -
> 105,110,60,47,97,62,58,32,84,104,101,32,100,105,97,108,111,103,104,111,117,1
> 15,
> -
> 101,115,66,69,71,73,78,32,77,101,120,105,99,111,115,116,97,114,116,115,99,10
> 1,
> -
> 110,116,114,101,104,101,105,103,104,116,97,100,100,105,110,103,73,115,108,9
> 7,110
> -
> ,100,97,115,115,101,116,115,69,109,112,105,114,101,83,99,104,111,111,108,10
> 1,102
> -
> ,102,111,114,116,100,105,114,101,99,116,110,101,97,114,108,121,109,97,110,1
> 17,97
> -
> ,108,83,101,108,101,99,116,46,10,10,79,110,101,106,111,105,110,101,100,109,1
> 01,
> -
> 110,117,34,62,80,104,105,108,105,112,97,119,97,114,100,115,104,97,110,100,1
> 08,
> -
> 101,105,109,112,111,114,116,79,102,102,105,99,101,114,101,103,97,114,100,11
> 5,107
> -
> ,105,108,108,115,110,97,116,105,111,110,83,112,111,114,116,115,100,101,103,
> 114,
> -
> 101,101,119,101,101,107,108,121,32,40,101,46,103,46,98,101,104,105,110,100,
> 100,
> -
> 111,99,116,111,114,108,111,103,103,101,100,117,110,105,116,101,100,60,47,98
> ,62,
> -
> 60,47,98,101,103,105,110,115,112,108,97,110,116,115,97,115,115,105,115,116,
> 97,
> -
> 114,116,105,115,116,105,115,115,117,101,100,51,48,48,112,120,124,99,97,110,
> 97,
> -
> 100,97,97,103,101,110,99,121,115,99,104,101,109,101,114,101,109,97,105,110,
> 66,
> -
> 114,97,122,105,108,115,97,109,112,108,101,108,111,103,111,34,62,98,101,121,
> 111,
> -
> 110,100,45,115,99,97,108,101,97,99,99,101,112,116,115,101,114,118,101,100,1
> 09,97
> -
> ,114,105,110,101,70,111,111,116,101,114,99,97,109,101,114,97,60,47,104,49,62
> ,10,
> -
> 95,102,111,114,109,34,108,101,97,118,101,115,115,116,114,101,115,115,34,32,
> 47,62
> -
> ,13,10,46,103,105,102,34,32,111,110,108,111,97,100,108,111,97,100,101,114,79
> ,120
> -
> ,102,111,114,100,115,105,115,116,101,114,115,117,114,118,105,118,108,105,11
> 5,116
> -
> ,101,110,102,101,109,97,108,101,68,101,115,105,103,110,115,105,122,101,61,3
> 4,97,
> -
> 112,112,101,97,108,116,101,120,116,34,62,108,101,118,101,108,115,116,104,97
> ,110,
> -
> 107,115,104,105,103,104,101,114,102,111,114,99,101,100,97,110,105,109,97,10
> 8,97,
> -
> 110,121,111,110,101,65,102,114,105,99,97,97,103,114,101,101,100,114,101,99,
> 101,
> -
> 110,116,80,101,111,112,108,101,60,98,114,32,47,62,119,111,110,100,101,114,1
> 12,
> -
> 114,105,99,101,115,116,117,114,110,101,100,124,124,32,123,125,59,109,97,105
> ,110,
> -
> 34,62,105,110,108,105,110,101,115,117,110,100,97,121,119,114,97,112,34,62,1
> 02,97
> -
> ,105,108,101,100,99,101,110,115,117,115,109,105,110,117,116,101,98,101,97,9
> 9,111
> -
> ,110,113,117,111,116,101,115,49,53,48,112,120,124,101,115,116,97,116,101,11
> 4,101
> -
> ,109,111,116,101,101,109,97,105,108,34,108,105,110,107,101,100,114,105,103,
> 104,
> -
> 116,59,115,105,103,110,97,108,102,111,114,109,97,108,49,46,104,116,109,108,
> 115,
> -
> 105,103,110,117,112,112,114,105,110,99,101,102,108,111,97,116,58,46,112,110
> ,103,
> -
> 34,32,102,111,114,117,109,46,65,99,99,101,115,115,112,97,112,101,114,115,11
> 5,111
> -
> ,117,110,100,115,101,120,116,101,110,100,72,101,105,103,104,116,115,108,105
> ,100,
> -
> 101,114,85,84,70,45,56,34,38,97,109,112,59,32,66,101,102,111,114,101,46,32,8
> 7,
> -
> 105,116,104,115,116,117,100,105,111,111,119,110,101,114,115,109,97,110,97,1
> 03,
> -
> 101,112,114,111,102,105,116,106,81,117,101,114,121,97,110,110,117,97,108,11
> 2,97,
> -
> 114,97,109,115,98,111,117,103,104,116,102,97,109,111,117,115,103,111,111,10
> 3,108
> -
> ,101,108,111,110,103,101,114,105,43,43,41,32,123,105,115,114,97,101,108,115,
> 97,
> -
> 121,105,110,103,100,101,99,105,100,101,104,111,109,101,34,62,104,101,97,100
> ,101,
> -
> 114,101,110,115,117,114,101,98,114,97,110,99,104,112,105,101,99,101,115,98,
> 108,
> -
> 111,99,107,59,115,116,97,116,101,100,116,111,112,34,62,60,114,97,99,105,110,
> 103,
> -
> 114,101,115,105,122,101,45,45,38,103,116,59,112,97,99,105,116,121,115,101,1
> 20,
> -
> 117,97,108,98,117,114,101,97,117,46,106,112,103,34,32,49,48,44,48,48,48,111,
> 98,
> -
> 116,97,105,110,116,105,116,108,101,115,97,109,111,117,110,116,44,32,73,110,
> 99,46
> -
> ,99,111,109,101,100,121,109,101,110,117,34,32,108,121,114,105,99,115,116,11
> 1,100
> -
> ,97,121,46,105,110,100,101,101,100,99,111,117,110,116,121,95,108,111,103,11
> 1,46,
> -
> 70,97,109,105,108,121,108,111,111,107,101,100,77,97,114,107,101,116,108,115
> ,101,
> -
> 32,105,102,80,108,97,121,101,114,116,117,114,107,101,121,41,59,118,97,114,3
> 2,102
> -
> ,111,114,101,115,116,103,105,118,105,110,103,101,114,114,111,114,115,68,111
> ,109,
> -
> 97,105,110,125,101,108,115,101,123,105,110,115,101,114,116,66,108,111,103,6
> 0,47,
> -
> 102,111,111,116,101,114,108,111,103,105,110,46,102,97,115,116,101,114,97,10
> 3,101
> -
> ,110,116,115,60,98,111,100,121,32,49,48,112,120,32,48,112,114,97,103,109,97,
> 102,
> -
> 114,105,100,97,121,106,117,110,105,111,114,100,111,108,108,97,114,112,108,9
> 7,99,
> -
> 101,100,99,111,118,101,114,115,112,108,117,103,105,110,53,44,48,48,48,32,11
> 2,97,
> -
> 103,101,34,62,98,111,115,116,111,110,46,116,101,115,116,40,97,118,97,116,97,
> 114,
> -
> 116,101,115,116,101,100,95,99,111,117,110,116,102,111,114,117,109,115,115,9
> 9,104
> -
> ,101,109,97,105,110,100,101,120,44,102,105,108,108,101,100,115,104,97,114,1
> 01,
> -
> 115,114,101,97,100,101,114,97,108,101,114,116,40,97,112,112,101,97,114,83,1
> 17,98
> -
> ,109,105,116,108,105,110,101,34,62,98,111,100,121,34,62,10,42,32,84,104,101,
> 84,
> -
> 104,111,117,103,104,115,101,101,105,110,103,106,101,114,115,101,121,78,101,
> 119,
> -
> 115,60,47,118,101,114,105,102,121,101,120,112,101,114,116,105,110,106,117,1
> 14,
> -
> 121,119,105,100,116,104,61,67,111,111,107,105,101,83,84,65,82,84,32,97,99,11
> 4,
> -
> 111,115,115,95,105,109,97,103,101,116,104,114,101,97,100,110,97,116,105,118
> ,101,
> -
> 112,111,99,107,101,116,98,111,120,34,62,10,83,121,115,116,101,109,32,68,97,1
> 18,
> -
> 105,100,99,97,110,99,101,114,116,97,98,108,101,115,112,114,111,118,101,100,
> 65,
> -
> 112,114,105,108,32,114,101,97,108,108,121,100,114,105,118,101,114,105,116,1
> 01,
> -
> 109,34,62,109,111,114,101,34,62,98,111,97,114,100,115,99,111,108,111,114,11
> 5,99,
> -
> 97,109,112,117,115,102,105,114,115,116,32,124,124,32,91,93,59,109,101,100,1
> 05,97
> -
> ,46,103,117,105,116,97,114,102,105,110,105,115,104,119,105,100,116,104,58,1
> 15,
> -
> 104,111,119,101,100,79,116,104,101,114,32,46,112,104,112,34,32,97,115,115,1
> 17,
> -
> 109,101,108,97,121,101,114,115,119,105,108,115,111,110,115,116,111,114,101,
> 115,
> -
> 114,101,108,105,101,102,115,119,101,100,101,110,67,117,115,116,111,109,101,
> 97,
> -
> 115,105,108,121,32,121,111,117,114,32,83,116,114,105,110,103,10,10,87,104,1
> 05,
> -
> 108,116,97,121,108,111,114,99,108,101,97,114,58,114,101,115,111,114,116,102
> ,114,
> -
> 101,110,99,104,116,104,111,117,103,104,34,41,32,43,32,34,60,98,111,100,121,6
> 2,98
> -
> ,117,121,105,110,103,98,114,97,110,100,115,77,101,109,98,101,114,110,97,109,
> 101,
> -
> 34,62,111,112,112,105,110,103,115,101,99,116,111,114,53,112,120,59,34,62,11
> 8,115
> -
> ,112,97,99,101,112,111,115,116,101,114,109,97,106,111,114,32,99,111,102,102,
> 101,
> -
> 101,109,97,114,116,105,110,109,97,116,117,114,101,104,97,112,112,101,110,60
> ,47,
> -
> 110,97,118,62,107,97,110,115,97,115,108,105,110,107,34,62,73,109,97,103,101,
> 115,
> -
> 61,102,97,108,115,101,119,104,105,108,101,32,104,115,112,97,99,101,48,38,97,
> 109,
> -
> 112,59,32,10,10,73,110,32,32,112,111,119,101,114,80,111,108,115,107,105,45,9
> 9,
> -
> 111,108,111,114,106,111,114,100,97,110,66,111,116,116,111,109,83,116,97,114
> ,116,
> -
> 32,45,99,111,117,110,116,50,46,104,116,109,108,110,101,119,115,34,62,48,49,4
> 6,
> -
> 106,112,103,79,110,108,105,110,101,45,114,105,103,104,116,109,105,108,108,1
> 01,
> -
> 114,115,101,110,105,111,114,73,83,66,78,32,48,48,44,48,48,48,32,103,117,105,
> 100,
> -
> 101,115,118,97,108,117,101,41,101,99,116,105,111,110,114,101,112,97,105,114
> ,46,
> -
> 120,109,108,34,32,32,114,105,103,104,116,115,46,104,116,109,108,45,98,108,1
> 11,99
> -
> ,107,114,101,103,69,120,112,58,104,111,118,101,114,119,105,116,104,105,110,
> 118,
> -
> 105,114,103,105,110,112,104,111,110,101,115,60,47,116,114,62,13,117,115,105
> ,110,
> -
> 103,32,10,9,118,97,114,32,62,39,41,59,10,9,60,47,116,100,62,10,60,47,116,114,
> 62,
> -
> 10,98,97,104,97,115,97,98,114,97,115,105,108,103,97,108,101,103,111,109,97,1
> 03,
> -
> 121,97,114,112,111,108,115,107,105,115,114,112,115,107,105,216,177,216,175,
> 217,
> -
> 136,228,184,173,230,150,135,231,174,128,228,189,147,231,185,129,233,171,14
> 8,228,
> -
> 191,161,230,129,175,228,184,173,229,155,189,230,136,145,228,187,172,228,18
> 4,128,
> -
> 228,184,170,229,133,172,229,143,184,231,174,161,231,144,134,232,174,186,22
> 9,157,
> -
> 155,229,143,175,228,187,165,230,156,141,229,138,161,230,151,182,233,151,18
> 0,228,
> -
> 184,170,228,186,186,228,186,167,229,147,129,232,135,170,229,183,177,228,18
> 8,129,
> -
> 228,184,154,230,159,165,231,156,139,229,183,165,228,189,156,232,129,148,23
> 1,179,
> -
> 187,230,178,161,230,156,137,231,189,145,231,171,153,230,137,128,230,156,13
> 7,232,
> -
> 175,132,232,174,186,228,184,173,229,191,131,230,150,135,231,171,160,231,14
> 8,168,
> -
> 230,136,183,233,166,150,233,161,181,228,189,156,232,128,133,230,138,128,23
> 0,156,
> -
> 175,233,151,174,233,162,152,231,155,184,229,133,179,228,184,139,232,189,18
> 9,230,
> -
> 144,156,231,180,162,228,189,191,231,148,168,232,189,175,228,187,182,229,15
> 6,168,
> -
> 231,186,191,228,184,187,233,162,152,232,181,132,230,150,153,232,167,134,23
> 3,162,
> -
> 145,229,155,158,229,164,141,230,179,168,229,134,140,231,189,145,231,187,15
> 6,230,
> -
> 148,182,232,151,143,229,134,133,229,174,185,230,142,168,232,141,144,229,18
> 4,130,
> -
> 229,156,186,230,182,136,230,129,175,231,169,186,233,151,180,229,143,145,22
> 9,184,
> -
> 131,228,187,128,228,185,136,229,165,189,229,143,139,231,148,159,230,180,18
> 7,229,
> -
> 155,190,231,137,135,229,143,145,229,177,149,229,166,130,230,158,156,230,13
> 7,139,
> -
> 230,156,186,230,150,176,233,151,187,230,156,128,230,150,176,230,150,185,22
> 9,188,
> -
> 143,229,140,151,228,186,172,230,143,144,228,190,155,229,133,179,228,186,14
> 2,230,
> -
> 155,180,229,164,154,232,191,153,228,184,170,231,179,187,231,187,159,231,15
> 9,165,
> -
> 233,129,147,230,184,184,230,136,143,229,185,191,229,145,138,229,133,182,22
> 8,187,
> -
> 150,229,143,145,232,161,168,229,174,137,229,133,168,231,172,172,228,184,12
> 8,228,
> -
> 188,154,229,145,152,232,191,155,232,161,140,231,130,185,229,135,187,231,13
> 7,136,
> -
> 230,157,131,231,148,181,229,173,144,228,184,150,231,149,140,232,174,190,23
> 2,174,
> -
> 161,229,133,141,232,180,185,230,149,153,232,130,178,229,138,160,229,133,16
> 5,230,
> -
> 180,187,229,138,168,228,187,150,228,187,172,229,149,134,229,147,129,229,14
> 1,154,
> -
> 229,174,162,231,142,176,229,156,168,228,184,138,230,181,183,229,166,130,22
> 8,189,
> -
> 149,229,183,178,231,187,143,231,149,153,232,168,128,232,175,166,231,187,13
> 4,231,
> -
> 164,190,229,140,186,231,153,187,229,189,149,230,156,172,231,171,153,233,15
> 6,128,
> -
> 232,166,129,228,187,183,230,160,188,230,148,175,230,140,129,229,155,189,23
> 3,153,
> -
> 133,233,147,190,230,142,165,229,155,189,229,174,182,229,187,186,232,174,19
> 0,230,
> -
> 156,139,229,143,139,233,152,133,232,175,187,230,179,149,229,190,139,228,18
> 9,141,
> -
> 231,189,174,231,187,143,230,181,142,233,128,137,230,139,169,232,191,153,23
> 0,160,
> -
> 183,229,189,147,229,137,141,229,136,134,231,177,187,230,142,146,232,161,14
> 0,229,
> -
> 155,160,228,184,186,228,186,164,230,152,147,230,156,128,229,144,142,233,15
> 9,179,
> -
> 228,185,144,228,184,141,232,131,189,233,128,154,232,191,135,232,161,140,22
> 8,184,
> -
> 154,231,167,145,230,138,128,229,143,175,232,131,189,232,174,190,229,164,13
> 5,229,
> -
> 144,136,228,189,156,229,164,167,229,174,182,231,164,190,228,188,154,231,16
> 0,148,
> -
> 231,169,182,228,184,147,228,184,154,229,133,168,233,131,168,233,161,185,23
> 1,155,
> -
> 174,232,191,153,233,135,140,232,191,152,230,152,175,229,188,128,229,167,13
> 9,230,
> -
> 131,133,229,134,181,231,148,181,232,132,145,230,150,135,228,187,182,229,14
> 7,129,
> -
> 231,137,140,229,184,174,229,138,169,230,150,135,229,140,150,232,181,132,23
> 0,186,
> -
> 144,229,164,167,229,173,166,229,173,166,228,185,160,229,156,176,229,157,12
> 8,230,
> -
> 181,143,232,167,136,230,138,149,232,181,132,229,183,165,231,168,139,232,16
> 6,129,
> -
> 230,177,130,230,128,142,228,185,136,230,151,182,229,128,153,229,138,159,23
> 2,131,
> -
> 189,228,184,187,232,166,129,231,155,174,229,137,141,232,181,132,232,174,17
> 5,229,
> -
> 159,142,229,184,130,230,150,185,230,179,149,231,148,181,229,189,177,230,13
> 9,155,
> -
> 232,129,152,229,163,176,230,152,142,228,187,187,228,189,149,229,129,165,22
> 9,186,
> -
> 183,230,149,176,230,141,174,231,190,142,229,155,189,230,177,189,232,189,16
> 6,228,
> -
> 187,139,231,187,141,228,189,134,230,152,175,228,186,164,230,181,129,231,14
> 8,159,
> -
> 228,186,167,230,137,128,228,187,165,231,148,181,232,175,157,230,152,190,23
> 1,164,
> -
> 186,228,184,128,228,186,155,229,141,149,228,189,141,228,186,186,229,145,15
> 2,229,
> -
> 136,134,230,158,144,229,156,176,229,155,190,230,151,133,230,184,184,229,18
> 3,165,
> -
> 229,133,183,229,173,166,231,148,159,231,179,187,229,136,151,231,189,145,22
> 9,143,
> -
> 139,229,184,150,229,173,144,229,175,134,231,160,129,233,162,145,233,129,14
> 7,230,
> -
> 142,167,229,136,182,229,156,176,229,140,186,229,159,186,230,156,172,229,13
> 3,168,
> -
> 229,155,189,231,189,145,228,184,138,233,135,141,232,166,129,231,172,172,22
> 8,186,
> -
> 140,229,150,156,230,172,162,232,191,155,229,133,165,229,143,139,230,131,13
> 3,232,
> -
> 191,153,228,186,155,232,128,131,232,175,149,229,143,145,231,142,176,229,15
> 9,185,
> -
> 232,174,173,228,187,165,228,184,138,230,148,191,229,186,156,230,136,144,22
> 8,184,
> -
> 186,231,142,175,229,162,131,233,166,153,230,184,175,229,144,140,230,151,18
> 2,229,
> -
> 168,177,228,185,144,229,143,145,233,128,129,228,184,128,229,174,154,229,18
> 8,128,
> -
> 229,143,145,228,189,156,229,147,129,230,160,135,229,135,134,230,172,162,23
> 2,191,
> -
> 142,232,167,163,229,134,179,229,156,176,230,150,185,228,184,128,228,184,13
> 9,228,
> -
> 187,165,229,143,138,232,180,163,228,187,187,230,136,150,232,128,133,229,17
> 4,162,
> -
> 230,136,183,228,187,163,232,161,168,231,167,175,229,136,134,229,165,179,22
> 8,186,
> -
> 186,230,149,176,231,160,129,233,148,128,229,148,174,229,135,186,231,142,17
> 6,231,
> -
> 166,187,231,186,191,229,186,148,231,148,168,229,136,151,232,161,168,228,18
> 4,141,
> -
> 229,144,140,231,188,150,232,190,145,231,187,159,232,174,161,230,159,165,23
> 2,175,
> -
> 162,228,184,141,232,166,129,230,156,137,229,133,179,230,156,186,230,158,13
> 2,229,
> -
> 190,136,229,164,154,230,146,173,230,148,190,231,187,132,231,187,135,230,14
> 8,191,
> -
> 231,173,150,231,155,180,230,142,165,232,131,189,229,138,155,230,157,165,23
> 0,186,
> -
> 144,230,153,130,233,150,147,231,156,139,229,136,176,231,131,173,233,151,16
> 8,229,
> -
> 133,179,233,148,174,228,184,147,229,140,186,233,157,158,229,184,184,232,13
> 9,177,
> -
> 232,175,173,231,153,190,229,186,166,229,184,140,230,156,155,231,190,142,22
> 9,165,
> -
> 179,230,175,148,232,190,131,231,159,165,232,175,134,232,167,132,229,174,15
> 4,229,
> -
> 187,186,232,174,174,233,131,168,233,151,168,230,132,143,232,167,129,231,17
> 8,190,
> -
> 229,189,169,230,151,165,230,156,172,230,143,144,233,171,152,229,143,145,23
> 2,168,
> -
> 128,230,150,185,233,157,162,229,159,186,233,135,145,229,164,132,231,144,13
> 4,230,
> -
> 157,131,233,153,144,229,189,177,231,137,135,233,147,182,232,161,140,232,19
> 1,152,
> -
> 230,156,137,229,136,134,228,186,171,231,137,169,229,147,129,231,187,143,23
> 2,144,
> -
> 165,230,183,187,229,138,160,228,184,147,229,174,182,232,191,153,231,167,14
> 1,232,
> -
> 175,157,233,162,152,232,181,183,230,157,165,228,184,154,229,138,161,229,13
> 3,172,
> -
> 229,145,138,232,174,176,229,189,149,231,174,128,228,187,139,232,180,168,23
> 3,135,
> -
> 143,231,148,183,228,186,186,229,189,177,229,147,141,229,188,149,231,148,16
> 8,230,
> -
> 138,165,229,145,138,233,131,168,229,136,134,229,191,171,233,128,159,229,14
> 6,168,
> -
> 232,175,162,230,151,182,229,176,154,230,179,168,230,132,143,231,148,179,23
> 2,175,
> -
> 183,229,173,166,230,160,161,229,186,148,232,175,165,229,142,134,229,143,17
> 8,229,
> -
> 143,170,230,152,175,232,191,148,229,155,158,232,180,173,228,185,176,229,14
> 4,141,
> -
> 231,167,176,228,184,186,228,186,134,230,136,144,229,138,159,232,175,180,23
> 0,152,
> -
> 142,228,190,155,229,186,148,229,173,169,229,173,144,228,184,147,233,162,15
> 2,231,
> -
> 168,139,229,186,143,228,184,128,232,136,172,230,156,131,229,147,161,229,14
> 3,170,
> -
> 230,156,137,229,133,182,229,174,131,228,191,157,230,138,164,232,128,140,22
> 8,184,
> -
> 148,228,187,138,229,164,169,231,170,151,229,143,163,229,138,168,230,128,12
> 9,231,
> -
> 138,182,230,128,129,231,137,185,229,136,171,232,174,164,228,184,186,229,19
> 1,133,
> -
> 233,161,187,230,155,180,230,150,176,229,176,143,232,175,180,230,136,145,22
> 9,128,
> -
> 145,228,189,156,228,184,186,229,170,146,228,189,147,229,140,133,230,139,17
> 2,233,
> -
> 130,163,228,185,136,228,184,128,230,160,183,229,155,189,229,134,133,230,15
> 2,175,
> -
> 229,144,166,230,160,185,230,141,174,231,148,181,232,167,134,229,173,166,23
> 3,153,
> -
> 162,229,133,183,230,156,137,232,191,135,231,168,139,231,148,177,228,186,14
> 2,228,
> -
> 186,186,230,137,141,229,135,186,230,157,165,228,184,141,232,191,135,230,17
> 3,163,
> -
> 229,156,168,230,152,142,230,152,159,230,149,133,228,186,139,229,133,179,23
> 1,179,
> -
> 187,230,160,135,233,162,152,229,149,134,229,138,161,232,190,147,229,133,16
> 5,228,
> -
> 184,128,231,155,180,229,159,186,231,161,128,230,149,153,229,173,166,228,18
> 6,134,
> -
> 232,167,163,229,187,186,231,173,145,231,187,147,230,158,156,229,133,168,23
> 1,144,
> -
> 131,233,128,154,231,159,165,232,174,161,229,136,146,229,175,185,228,186,14
> 2,232,
> -
> 137,186,230,156,175,231,155,184,229,134,140,229,143,145,231,148,159,231,15
> 6,159,
> -
> 231,154,132,229,187,186,231,171,139,231,173,137,231,186,167,231,177,187,22
> 9,158,
> -
> 139,231,187,143,233,170,140,229,174,158,231,142,176,229,136,182,228,189,15
> 6,230,
> -
> 157,165,232,135,170,230,160,135,231,173,190,228,187,165,228,184,139,229,14
> 2,159,
> -
> 229,136,155,230,151,160,230,179,149,229,133,182,228,184,173,229,128,139,22
> 8,186,
> -
> 186,228,184,128,229,136,135,230,140,135,229,141,151,229,133,179,233,151,17
> 3,233,
> -
> 155,134,229,155,162,231,172,172,228,184,137,229,133,179,230,179,168,229,15
> 5,160,
> -
> 230,173,164,231,133,167,231,137,135,230,183,177,229,156,179,229,149,134,22
> 8,184,
> -
> 154,229,185,191,229,183,158,230,151,165,230,156,159,233,171,152,231,186,16
> 7,230,
> -
> 156,128,232,191,145,231,187,188,229,144,136,232,161,168,231,164,186,228,18
> 4,147,
> -
> 232,190,145,232,161,140,228,184,186,228,186,164,233,128,154,232,175,132,22
> 8,187,
> -
> 183,232,167,137,229,190,151,231,178,190,229,141,142,229,174,182,229,186,17
> 3,229,
> -
> 174,140,230,136,144,230,132,159,232,167,137,229,174,137,232,163,133,229,19
> 0,151,
> -
> 229,136,176,233,130,174,228,187,182,229,136,182,229,186,166,233,163,159,22
> 9,147,
> -
> 129,232,153,189,231,132,182,232,189,172,232,189,189,230,138,165,228,187,18
> 3,232,
> -
> 174,176,232,128,133,230,150,185,230,161,136,232,161,140,230,148,191,228,18
> 6,186,
> -
> 230,176,145,231,148,168,229,147,129,228,184,156,232,165,191,230,143,144,22
> 9,135,
> -
> 186,233,133,146,229,186,151,231,132,182,229,144,142,228,187,152,230,172,19
> 0,231,
> -
> 131,173,231,130,185,228,187,165,229,137,141,229,174,140,229,133,168,229,14
> 3,145,
> -
> 229,184,150,232,174,190,231,189,174,233,162,134,229,175,188,229,183,165,22
> 8,184,
> -
> 154,229,140,187,233,153,162,231,156,139,231,156,139,231,187,143,229,133,18
> 4,229,
> -
> 142,159,229,155,160,229,185,179,229,143,176,229,144,132,231,167,141,229,16
> 2,158,
> -
> 229,138,160,230,157,144,230,150,153,230,150,176,229,162,158,228,185,139,22
> 9,144,
> -
> 142,232,129,140,228,184,154,230,149,136,230,158,156,228,187,138,229,185,18
> 0,232,
> -
> 174,186,230,150,135,230,136,145,229,155,189,229,145,138,232,175,137,231,13
> 7,136,
> -
> 228,184,187,228,191,174,230,148,185,229,143,130,228,184,142,230,137,147,22
> 9,141,
> -
> 176,229,191,171,228,185,144,230,156,186,230,162,176,232,167,130,231,130,18
> 5,229,
> -
> 173,152,229,156,168,231,178,190,231,165,158,232,142,183,229,190,151,229,13
> 6,169,
> -
> 231,148,168,231,187,167,231,187,173,228,189,160,228,187,172,232,191,153,22
> 8,185,
> -
> 136,230,168,161,229,188,143,232,175,173,232,168,128,232,131,189,229,164,15
> 9,233,
> -
> 155,133,232,153,142,230,147,141,228,189,156,233,163,142,230,160,188,228,18
> 4,128,
> -
> 232,181,183,231,167,145,229,173,166,228,189,147,232,130,178,231,159,173,22
> 8,191,
> -
> 161,230,157,161,228,187,182,230,178,187,231,150,151,232,191,144,229,138,16
> 8,228,
> -
> 186,167,228,184,154,228,188,154,232,174,174,229,175,188,232,136,170,229,13
> 3,136,
> -
> 231,148,159,232,129,148,231,155,159,229,143,175,230,152,175,229,149,143,23
> 3,161,
> -
> 140,231,187,147,230,158,132,228,189,156,231,148,168,232,176,131,230,159,16
> 5,232,
> -
> 179,135,230,150,153,232,135,170,229,138,168,232,180,159,232,180,163,229,13
> 4,156,
> -
> 228,184,154,232,174,191,233,151,174,229,174,158,230,150,189,230,142,165,22
> 9,143,
> -
> 151,232,174,168,232,174,186,233,130,163,228,184,170,229,143,141,233,166,13
> 6,229,
> -
> 138,160,229,188,186,229,165,179,230,128,167,232,140,131,229,155,180,230,15
> 6,141,
> -
> 229,139,153,228,188,145,233,151,178,228,187,138,230,151,165,229,174,162,23
> 0,156,
> -
> 141,232,167,128,231,156,139,229,143,130,229,138,160,231,154,132,232,175,15
> 7,228,
> -
> 184,128,231,130,185,228,191,157,232,175,129,229,155,190,228,185,166,230,15
> 6,137,
> -
> 230,149,136,230,181,139,232,175,149,231,167,187,229,138,168,230,137,141,23
> 2,131,
> -
> 189,229,134,179,229,174,154,232,130,161,231,165,168,228,184,141,230,150,17
> 3,233,
> -
> 156,128,230,177,130,228,184,141,229,190,151,229,138,158,230,179,149,228,18
> 5,139,
> -
> 233,151,180,233,135,135,231,148,168,232,144,165,233,148,128,230,138,149,23
> 2,175,
> -
> 137,231,155,174,230,160,135,231,136,177,230,131,133,230,145,132,229,189,17
> 7,230,
> -
> 156,137,228,186,155,232,164,135,232,163,189,230,150,135,229,173,166,230,15
> 6,186,
> -
> 228,188,154,230,149,176,229,173,151,232,163,133,228,191,174,232,180,173,23
> 1,137,
> -
> 169,229,134,156,230,157,145,229,133,168,233,157,162,231,178,190,229,147,12
> 9,229,
> -
> 133,182,229,174,158,228,186,139,230,131,133,230,176,180,229,185,179,230,14
> 3,144,
> -
> 231,164,186,228,184,138,229,184,130,232,176,162,232,176,162,230,153,174,23
> 3,128,
> -
> 154,230,149,153,229,184,136,228,184,138,228,188,160,231,177,187,229,136,17
> 1,230,
> -
> 173,140,230,155,178,230,139,165,230,156,137,229,136,155,230,150,176,233,13
> 3,141,
> -
> 228,187,182,229,143,170,232,166,129,230,151,182,228,187,163,232,179,135,23
> 2,168,
> -
> 138,232,190,190,229,136,176,228,186,186,231,148,159,232,174,162,233,152,13
> 3,232,
> -
> 128,129,229,184,136,229,177,149,231,164,186,229,191,131,231,144,134,232,18
> 0,180,
> -
> 229,173,144,231,182,178,231,171,153,228,184,187,233,161,140,232,135,170,23
> 1,132,
> -
> 182,231,186,167,229,136,171,231,174,128,229,141,149,230,148,185,233,157,16
> 9,233,
> -
> 130,163,228,186,155,230,157,165,232,175,180,230,137,147,229,188,128,228,18
> 7,163,
> -
> 231,160,129,229,136,160,233,153,164,232,175,129,229,136,184,232,138,130,23
> 1,155,
> -
> 174,233,135,141,231,130,185,230,172,161,230,149,184,229,164,154,229,176,14
> 5,232,
> -
> 167,132,229,136,146,232,181,132,233,135,145,230,137,190,229,136,176,228,18
> 7,165,
> -
> 229,144,142,229,164,167,229,133,168,228,184,187,233,161,181,230,156,128,22
> 8,189,
> -
> 179,229,155,158,231,173,148,229,164,169,228,184,139,228,191,157,233,154,15
> 6,231,
> -
> 142,176,228,187,163,230,163,128,230,159,165,230,138,149,231,165,168,229,17
> 6,143,
> -
> 230,151,182,230,178,146,230,156,137,230,173,163,229,184,184,231,148,154,23
> 2,135,
> -
> 179,228,187,163,231,144,134,231,155,174,229,189,149,229,133,172,229,188,12
> 8,229,
> -
> 164,141,229,136,182,233,135,145,232,158,141,229,185,184,231,166,143,231,13
> 7,136,
> -
> 230,156,172,229,189,162,230,136,144,229,135,134,229,164,135,232,161,140,23
> 0,131,
> -
> 133,229,155,158,229,136,176,230,128,157,230,131,179,230,128,142,230,160,18
> 3,229,
> -
> 141,143,232,174,174,232,174,164,232,175,129,230,156,128,229,165,189,228,18
> 6,167,
> -
> 231,148,159,230,140,137,231,133,167,230,156,141,232,163,133,229,185,191,22
> 8,184,
> -
> 156,229,138,168,230,188,171,233,135,135,232,180,173,230,150,176,230,137,13
> 9,231,
> -
> 187,132,229,155,190,233,157,162,230,157,191,229,143,130,232,128,131,230,14
> 8,191,
> -
> 230,178,187,229,174,185,230,152,147,229,164,169,229,156,176,229,138,170,22
> 9,138,
> -
> 155,228,186,186,228,187,172,229,141,135,231,186,167,233,128,159,229,186,16
> 6,228,
> -
> 186,186,231,137,169,232,176,131,230,149,180,230,181,129,232,161,140,233,12
> 8,160,
> -
> 230,136,144,230,150,135,229,173,151,233,159,169,229,155,189,232,180,184,23
> 0,152,
> -
> 147,229,188,128,229,177,149,231,155,184,233,151,156,232,161,168,231,142,17
> 6,229,
> -
> 189,177,232,167,134,229,166,130,230,173,164,231,190,142,229,174,185,229,16
> 4,167,
> -
> 229,176,143,230,138,165,233,129,147,230,157,161,230,172,190,229,191,131,23
> 0,131,
> -
> 133,232,174,184,229,164,154,230,179,149,232,167,132,229,174,182,229,177,13
> 3,228,
> -
> 185,166,229,186,151,232,191,158,230,142,165,231,171,139,229,141,179,228,18
> 4,190,
> -
> 230,138,165,230,138,128,229,183,167,229,165,165,232,191,144,231,153,187,22
> 9,133,
> -
> 165,228,187,165,230,157,165,231,144,134,232,174,186,228,186,139,228,187,18
> 2,232,
> -
> 135,170,231,148,177,228,184,173,229,141,142,229,138,158,229,133,172,229,16
> 6,136,
> -
> 229,166,136,231,156,159,230,173,163,228,184,141,233,148,153,229,133,168,23
> 0,150,
> -
> 135,229,144,136,229,144,140,228,187,183,229,128,188,229,136,171,228,186,18
> 6,231,
> -
> 155,145,231,157,163,229,133,183,228,189,147,228,184,150,231,186,170,229,15
> 5,162,
> -
> 233,152,159,229,136,155,228,184,154,230,137,191,230,139,133,229,162,158,23
> 3,149,
> -
> 191,230,156,137,228,186,186,228,191,157,230,140,129,229,149,134,229,174,18
> 2,231,
> -
> 187,180,228,191,174,229,143,176,230,185,190,229,183,166,229,143,179,232,13
> 0,161,
> -
> 228,187,189,231,173,148,230,161,136,229,174,158,233,153,133,231,148,181,22
> 8,191,
> -
> 161,231,187,143,231,144,134,231,148,159,229,145,189,229,174,163,228,188,16
> 0,228,
> -
> 187,187,229,138,161,230,173,163,229,188,143,231,137,185,232,137,178,228,18
> 4,139,
> -
> 230,157,165,229,141,143,228,188,154,229,143,170,232,131,189,229,189,147,23
> 1,132,
> -
> 182,233,135,141,230,150,176,229,133,167,229,174,185,230,140,135,229,175,18
> 8,232,
> -
> 191,144,232,161,140,230,151,165,229,191,151,232,179,163,229,174,182,232,18
> 2,133,
> -
> 232,191,135,229,156,159,229,156,176,230,181,153,230,177,159,230,148,175,22
> 8,187,
> -
> 152,230,142,168,229,135,186,231,171,153,233,149,191,230,157,173,229,183,15
> 8,230,
> -
> 137,167,232,161,140,229,136,182,233,128,160,228,185,139,228,184,128,230,14
> 2,168,
> -
> 229,185,191,231,142,176,229,156,186,230,143,143,232,191,176,229,143,152,22
> 9,140,
> -
> 150,228,188,160,231,187,159,230,173,140,230,137,139,228,191,157,233,153,16
> 9,232,
> -
> 175,190,231,168,139,229,140,187,231,150,151,231,187,143,232,191,135,232,19
> 1,135,
> -
> 229,142,187,228,185,139,229,137,141,230,148,182,229,133,165,229,185,180,22
> 9,186,
> -
> 166,230,157,130,229,191,151,231,190,142,228,184,189,230,156,128,233,171,15
> 2,231,
> -
> 153,187,233,153,134,230,156,170,230,157,165,229,138,160,229,183,165,229,13
> 3,141,
> -
> 232,180,163,230,149,153,231,168,139,231,137,136,229,157,151,232,186,171,22
> 8,189,
> -
> 147,233,135,141,229,186,134,229,135,186,229,148,174,230,136,144,230,156,17
> 2,229,
> -
> 189,162,229,188,143,229,156,159,232,177,134,229,135,186,229,131,185,228,18
> 4,156,
> -
> 230,150,185,233,130,174,231,174,177,229,141,151,228,186,172,230,177,130,23
> 2,129,
> -
> 140,229,143,150,229,190,151,232,129,140,228,189,141,231,155,184,228,191,16
> 1,233,
> -
> 161,181,233,157,162,229,136,134,233,146,159,231,189,145,233,161,181,231,16
> 1,174,
> -
> 229,174,154,229,155,190,228,190,139,231,189,145,229,157,128,231,167,175,23
> 0,158,
> -
> 129,233,148,153,232,175,175,231,155,174,231,154,132,229,174,157,232,180,15
> 7,230,
> -
> 156,186,229,133,179,233,163,142,233,153,169,230,142,136,230,157,131,231,15
> 1,133,
> -
> 230,175,146,229,174,160,231,137,169,233,153,164,228,186,134,232,169,149,23
> 2,171,
> -
> 150,231,150,190,231,151,133,229,143,138,230,151,182,230,177,130,232,180,17
> 3,231,
> -
> 171,153,231,130,185,229,132,191,231,171,165,230,175,143,229,164,169,228,18
> 4,173,
> -
> 229,164,174,232,174,164,232,175,134,230,175,143,228,184,170,229,164,169,23
> 0,180,
> -
> 165,229,173,151,228,189,147,229,143,176,231,129,163,231,187,180,230,138,16
> 4,230,
> -
> 156,172,233,161,181,228,184,170,230,128,167,229,174,152,230,150,185,229,18
> 4,184,
> -
> 232,167,129,231,155,184,230,156,186,230,136,152,231,149,165,229,186,148,22
> 9,189,
> -
> 147,229,190,139,229,184,136,230,150,185,228,190,191,230,160,161,229,155,17
> 3,232,
> -
> 130,161,229,184,130,230,136,191,229,177,139,230,160,143,231,155,174,229,14
> 5,152,
> -
> 229,183,165,229,175,188,232,135,180,231,170,129,231,132,182,233,129,147,22
> 9,133,
> -
> 183,230,156,172,231,189,145,231,187,147,229,144,136,230,161,163,230,161,13
> 6,229,
> -
> 138,179,229,138,168,229,143,166,229,164,150,231,190,142,229,133,131,229,18
> 8,149,
> -
> 232,181,183,230,148,185,229,143,152,231,172,172,229,155,155,228,188,154,23
> 2,174,
> -
> 161,232,170,170,230,152,142,233,154,144,231,167,129,229,174,157,229,174,15
> 7,232,
> -
> 167,132,232,140,131,230,182,136,232,180,185,229,133,177,229,144,140,229,19
> 1,152,
> -
> 232,174,176,228,189,147,231,179,187,229,184,166,230,157,165,229,144,141,22
> 9,173,
> -
> 151,231,153,188,232,161,168,229,188,128,230,148,190,229,138,160,231,155,15
> 9,229,
> -
> 143,151,229,136,176,228,186,140,230,137,139,229,164,167,233,135,143,230,13
> 6,144,
> -
> 228,186,186,230,149,176,233,135,143,229,133,177,228,186,171,229,140,186,22
> 9,159,
> -
> 159,229,165,179,229,173,169,229,142,159,229,136,153,230,137,128,229,156,16
> 8,231,
> -
> 187,147,230,157,159,233,128,154,228,191,161,232,182,133,231,186,167,233,13
> 3,141,
> -
> 231,189,174,229,189,147,230,151,182,228,188,152,231,167,128,230,128,167,23
> 0,132,
> -
> 159,230,136,191,228,186,167,233,129,138,230,136,178,229,135,186,229,143,16
> 3,230,
> -
> 143,144,228,186,164,229,176,177,228,184,154,228,191,157,229,129,165,231,16
> 8,139,
> -
> 229,186,166,229,143,130,230,149,176,228,186,139,228,184,154,230,149,180,22
> 8,184,
> -
> 170,229,177,177,228,184,156,230,131,133,230,132,159,231,137,185,230,174,13
> 8,229,
> -
> 136,134,233,161,158,230,144,156,229,176,139,229,177,158,228,186,142,233,15
> 1,168,
> -
> 230,136,183,232,180,162,229,138,161,229,163,176,233,159,179,229,143,138,22
> 9,133,
> -
> 182,232,180,162,231,187,143,229,157,154,230,140,129,229,185,178,233,131,16
> 8,230,
> -
> 136,144,231,171,139,229,136,169,231,155,138,232,128,131,232,153,145,230,13
> 6,144,
> -
> 233,131,189,229,140,133,232,163,133,231,148,168,230,136,182,230,175,148,23
> 2,181,
> -
> 155,230,150,135,230,152,142,230,139,155,229,149,134,229,174,140,230,149,18
> 0,231,
> -
> 156,159,230,152,175,231,156,188,231,157,155,228,188,153,228,188,180,229,16
> 8,129,
> -
> 230,156,155,233,162,134,229,159,159,229,141,171,231,148,159,228,188,152,23
> 0,131,
> -
> 160,232,171,150,229,163,135,229,133,172,229,133,177,232,137,175,229,165,18
> 9,229,
> -
> 133,133,229,136,134,231,172,166,229,144,136,233,153,132,228,187,182,231,13
> 7,185,
> -
> 231,130,185,228,184,141,229,143,175,232,139,177,230,150,135,232,181,132,22
> 8,186,
> -
> 167,230,160,185,230,156,172,230,152,142,230,152,190,229,175,134,231,162,18
> 8,229,
> -
> 133,172,228,188,151,230,176,145,230,151,143,230,155,180,229,138,160,228,18
> 6,171,
> -
> 229,143,151,229,144,140,229,173,166,229,144,175,229,138,168,233,128,130,22
> 9,144,
> -
> 136,229,142,159,230,157,165,233,151,174,231,173,148,230,156,172,230,150,13
> 5,231,
> -
> 190,142,233,163,159,231,187,191,232,137,178,231,168,179,229,174,154,231,18
> 7,136,
> -
> 228,186,142,231,148,159,231,137,169,228,190,155,230,177,130,230,144,156,23
> 1,139,
> -
> 144,229,138,155,233,135,143,228,184,165,233,135,141,230,176,184,232,191,15
> 6,229,
> -
> 134,153,231,156,159,230,156,137,233,153,144,231,171,158,228,186,137,229,17
> 5,185,
> -
> 232,177,161,232,180,185,231,148,168,228,184,141,229,165,189,231,187,157,22
> 9,175,
> -
> 185,229,141,129,229,136,134,228,191,131,232,191,155,231,130,185,232,175,13
> 2,229,
> -
> 189,177,233,159,179,228,188,152,229,138,191,228,184,141,229,176,145,230,17
> 2,163,
> -
> 232,181,143,229,185,182,228,184,148,230,156,137,231,130,185,230,150,185,22
> 9,144,
> -
> 145,229,133,168,230,150,176,228,191,161,231,148,168,232,174,190,230,150,18
> 9,229,
> -
> 189,162,232,177,161,232,181,132,230,160,188,231,170,129,231,160,180,233,15
> 4,143,
> -
> 231,157,128,233,135,141,229,164,167,228,186,142,230,152,175,230,175,149,22
> 8,184,
> -
> 154,230,153,186,232,131,189,229,140,150,229,183,165,229,174,140,231,190,14
> 2,229,
> -
> 149,134,229,159,142,231,187,159,228,184,128,229,135,186,231,137,136,230,13
> 7,147,
> -
> 233,128,160,231,148,162,229,147,129,230,166,130,229,134,181,231,148,168,22
> 8,186,
> -
> 142,228,191,157,231,149,153,229,155,160,231,180,160,228,184,173,229,156,13
> 9,229,
> -
> 173,152,229,130,168,232,180,180,229,155,190,230,156,128,230,132,155,233,14
> 9,191,
> -
> 230,156,159,229,143,163,228,187,183,231,144,134,232,180,162,229,159,186,22
> 9,156,
> -
> 176,229,174,137,230,142,146,230,173,166,230,177,137,233,135,140,233,157,16
> 2,229,
> -
> 136,155,229,187,186,229,164,169,231,169,186,233,166,150,229,133,136,229,17
> 4,140,
> -
> 229,150,132,233,169,177,229,138,168,228,184,139,233,157,162,228,184,141,22
> 9,134,
> -
> 141,232,175,154,228,191,161,230,132,143,228,185,137,233,152,179,229,133,13
> 7,232,
> -
> 139,177,229,155,189,230,188,130,228,186,174,229,134,155,228,186,139,231,14
> 2,169,
> -
> 229,174,182,231,190,164,228,188,151,229,134,156,230,176,145,229,141,179,22
> 9,143,
> -
> 175,229,144,141,231,168,177,229,174,182,229,133,183,229,138,168,231,148,18
> 7,230,
> -
> 131,179,229,136,176,230,179,168,230,152,142,229,176,143,229,173,166,230,12
> 8,167,
> -
> 232,131,189,232,128,131,231,160,148,231,161,172,228,187,182,232,167,130,23
> 1,156,
> -
> 139,230,184,133,230,165,154,230,144,158,231,172,145,233,166,150,233,160,12
> 9,233,
> -
> 187,132,233,135,145,233,128,130,231,148,168,230,177,159,232,139,143,231,15
> 6,159,
> -
> 229,174,158,228,184,187,231,174,161,233,152,182,230,174,181,232,168,187,22
> 9,134,
> -
> 138,231,191,187,232,175,145,230,157,131,229,136,169,229,129,154,229,165,18
> 9,228,
> -
> 188,188,228,185,142,233,128,154,232,174,175,230,150,189,229,183,165,231,13
> 9,128,
> -
> 230,133,139,228,185,159,232,174,184,231,142,175,228,191,157,229,159,185,22
> 9,133,
> -
> 187,230,166,130,229,191,181,229,164,167,229,158,139,230,156,186,231,165,16
> 8,231,
> -
> 144,134,232,167,163,229,140,191,229,144,141,99,117,97,110,100,111,101,110,1
> 18,
> -
> 105,97,114,109,97,100,114,105,100,98,117,115,99,97,114,105,110,105,99,105,1
> 11,
> -
> 116,105,101,109,112,111,112,111,114,113,117,101,99,117,101,110,116,97,101,1
> 15,
> -
> 116,97,100,111,112,117,101,100,101,110,106,117,101,103,111,115,99,111,110,1
> 16,
> -
> 114,97,101,115,116,195,161,110,110,111,109,98,114,101,116,105,101,110,101,1
> 10,
> -
> 112,101,114,102,105,108,109,97,110,101,114,97,97,109,105,103,111,115,99,105
> ,117,
> -
> 100,97,100,99,101,110,116,114,111,97,117,110,113,117,101,112,117,101,100,10
> 1,115
> -
> ,100,101,110,116,114,111,112,114,105,109,101,114,112,114,101,99,105,111,115
> ,101,
> -
> 103,195,186,110,98,117,101,110,111,115,118,111,108,118,101,114,112,117,110,
> 116,
> -
> 111,115,115,101,109,97,110,97,104,97,98,195,173,97,97,103,111,115,116,111,1
> 10,
> -
> 117,101,118,111,115,117,110,105,100,111,115,99,97,114,108,111,115,101,113,1
> 17,
> -
> 105,112,111,110,105,195,177,111,115,109,117,99,104,111,115,97,108,103,117,1
> 10,97
> -
> ,99,111,114,114,101,111,105,109,97,103,101,110,112,97,114,116,105,114,97,11
> 4,114
> -
> ,105,98,97,109,97,114,195,173,97,104,111,109,98,114,101,101,109,112,108,101,
> 111,
> -
> 118,101,114,100,97,100,99,97,109,98,105,111,109,117,99,104,97,115,102,117,1
> 01,
> -
> 114,111,110,112,97,115,97,100,111,108,195,173,110,101,97,112,97,114,101,99,
> 101,
> -
> 110,117,101,118,97,115,99,117,114,115,111,115,101,115,116,97,98,97,113,117,
> 105,
> -
> 101,114,111,108,105,98,114,111,115,99,117,97,110,116,111,97,99,99,101,115,1
> 11,
> -
> 109,105,103,117,101,108,118,97,114,105,111,115,99,117,97,116,114,111,116,10
> 5,101
> -
> ,110,101,115,103,114,117,112,111,115,115,101,114,195,161,110,101,117,114,11
> 1,112
> -
> ,97,109,101,100,105,111,115,102,114,101,110,116,101,97,99,101,114,99,97,100,
> 101,
> -
> 109,195,161,115,111,102,101,114,116,97,99,111,99,104,101,115,109,111,100,10
> 1,108
> -
> ,111,105,116,97,108,105,97,108,101,116,114,97,115,97,108,103,195,186,110,99,
> 111,
> -
> 109,112,114,97,99,117,97,108,101,115,101,120,105,115,116,101,99,117,101,114
> ,112,
> -
> 111,115,105,101,110,100,111,112,114,101,110,115,97,108,108,101,103,97,114,1
> 18,
> -
> 105,97,106,101,115,100,105,110,101,114,111,109,117,114,99,105,97,112,111,10
> 0,114
> -
> ,195,161,112,117,101,115,116,111,100,105,97,114,105,111,112,117,101,98,108,
> 111,
> -
> 113,117,105,101,114,101,109,97,110,117,101,108,112,114,111,112,105,111,99,1
> 14,
> -
> 105,115,105,115,99,105,101,114,116,111,115,101,103,117,114,111,109,117,101,
> 114,
> -
> 116,101,102,117,101,110,116,101,99,101,114,114,97,114,103,114,97,110,100,10
> 1,101
> -
> ,102,101,99,116,111,112,97,114,116,101,115,109,101,100,105,100,97,112,114,1
> 11,
> -
> 112,105,97,111,102,114,101,99,101,116,105,101,114,114,97,101,45,109,97,105,
> 108,
> -
> 118,97,114,105,97,115,102,111,114,109,97,115,102,117,116,117,114,111,111,98
> ,106,
> -
> 101,116,111,115,101,103,117,105,114,114,105,101,115,103,111,110,111,114,10
> 9,97,
> -
> 115,109,105,115,109,111,115,195,186,110,105,99,111,99,97,109,105,110,111,11
> 5,105
> -
> ,116,105,111,115,114,97,122,195,179,110,100,101,98,105,100,111,112,114,117,
> 101,
> -
> 98,97,116,111,108,101,100,111,116,101,110,195,173,97,106,101,115,195,186,11
> 5,101
> -
> ,115,112,101,114,111,99,111,99,105,110,97,111,114,105,103,101,110,116,105,1
> 01,
> -
> 110,100,97,99,105,101,110,116,111,99,195,161,100,105,122,104,97,98,108,97,1
> 14,
> -
> 115,101,114,195,173,97,108,97,116,105,110,97,102,117,101,114,122,97,101,115
> ,116,
> -
> 105,108,111,103,117,101,114,114,97,101,110,116,114,97,114,195,169,120,105,1
> 16,
> -
> 111,108,195,179,112,101,122,97,103,101,110,100,97,118,195,173,100,101,111,1
> 01,
> -
> 118,105,116,97,114,112,97,103,105,110,97,109,101,116,114,111,115,106,97,118
> ,105,
> -
> 101,114,112,97,100,114,101,115,102,195,161,99,105,108,99,97,98,101,122,97,1
> 95,
> -
> 161,114,101,97,115,115,97,108,105,100,97,101,110,118,195,173,111,106,97,112
> ,195,
> -
> 179,110,97,98,117,115,111,115,98,105,101,110,101,115,116,101,120,116,111,11
> 5,108
> -
> ,108,101,118,97,114,112,117,101,100,97,110,102,117,101,114,116,101,99,111,1
> 09,
> -
> 195,186,110,99,108,97,115,101,115,104,117,109,97,110,111,116,101,110,105,10
> 0,111
> -
> ,98,105,108,98,97,111,117,110,105,100,97,100,101,115,116,195,161,115,101,10
> 0,105
> -
> ,116,97,114,99,114,101,97,100,111,208,180,208,187,209,143,209,135,209,130,2
> 08,
> -
> 190,208,186,208,176,208,186,208,184,208,187,208,184,209,141,209,130,208,19
> 0,208,
> -
> 178,209,129,208,181,208,181,208,179,208,190,208,191,209,128,208,184,209,13
> 0,208,
> -
> 176,208,186,208,181,209,137,208,181,209,131,208,182,208,181,208,154,208,17
> 6,208,
> -
> 186,208,177,208,181,208,183,208,177,209,139,208,187,208,190,208,189,208,18
> 4,208,
> -
> 146,209,129,208,181,208,191,208,190,208,180,208,173,209,130,208,190,209,13
> 0,208,
> -
> 190,208,188,209,135,208,181,208,188,208,189,208,181,209,130,208,187,208,18
> 1,209,
> -
> 130,209,128,208,176,208,183,208,190,208,189,208,176,208,179,208,180,208,18
> 1,208,
> -
> 188,208,189,208,181,208,148,208,187,209,143,208,159,209,128,208,184,208,18
> 9,208,
> -
> 176,209,129,208,189,208,184,209,133,209,130,208,181,208,188,208,186,209,13
> 0,208,
> -
> 190,208,179,208,190,208,180,208,178,208,190,209,130,209,130,208,176,208,18
> 8,208,
> -
> 161,208,168,208,144,208,188,208,176,209,143,208,167,209,130,208,190,208,17
> 8,208,
> -
> 176,209,129,208,178,208,176,208,188,208,181,208,188,209,131,208,162,208,17
> 6,208,
> -
> 186,208,180,208,178,208,176,208,189,208,176,208,188,209,141,209,130,208,18
> 4,209,
> -
> 141,209,130,209,131,208,146,208,176,208,188,209,130,208,181,209,133,208,19
> 1,209,
> -
> 128,208,190,209,130,209,131,209,130,208,189,208,176,208,180,208,180,208,18
> 9,209,
> -
> 143,208,146,208,190,209,130,209,130,209,128,208,184,208,189,208,181,208,18
> 5,208,
> -
> 146,208,176,209,129,208,189,208,184,208,188,209,129,208,176,208,188,209,13
> 0,208,
> -
> 190,209,130,209,128,209,131,208,177,208,158,208,189,208,184,208,188,208,18
> 4,209,
> -
> 128,208,189,208,181,208,181,208,158,208,158,208,158,208,187,208,184,209,13
> 4,209,
> -
> 141,209,130,208,176,208,158,208,189,208,176,208,189,208,181,208,188,208,18
> 0,208,
> -
> 190,208,188,208,188,208,190,208,185,208,180,208,178,208,181,208,190,208,18
> 9,208,
> -
> 190,209,129,209,131,208,180,224,164,149,224,165,135,224,164,185,224,165,13
> 6,224,
> -
> 164,149,224,165,128,224,164,184,224,165,135,224,164,149,224,164,190,224,16
> 4,149,
> -
> 224,165,139,224,164,148,224,164,176,224,164,170,224,164,176,224,164,168,22
> 4,165,
> -
> 135,224,164,143,224,164,149,224,164,149,224,164,191,224,164,173,224,165,12
> 8,224,
> -
> 164,135,224,164,184,224,164,149,224,164,176,224,164,164,224,165,139,224,16
> 4,185,
> -
> 224,165,139,224,164,134,224,164,170,224,164,185,224,165,128,224,164,175,22
> 4,164,
> -
> 185,224,164,175,224,164,190,224,164,164,224,164,149,224,164,165,224,164,19
> 0,106,
> -
> 97,103,114,97,110,224,164,134,224,164,156,224,164,156,224,165,139,224,164,1
> 33,
> -
> 224,164,172,224,164,166,224,165,139,224,164,151,224,164,136,224,164,156,22
> 4,164,
> -
> 190,224,164,151,224,164,143,224,164,185,224,164,174,224,164,135,224,164,16
> 8,224,
> -
> 164,181,224,164,185,224,164,175,224,165,135,224,164,165,224,165,135,224,16
> 4,165,
> -
> 224,165,128,224,164,152,224,164,176,224,164,156,224,164,172,224,164,166,22
> 4,165,
> -
> 128,224,164,149,224,164,136,224,164,156,224,165,128,224,164,181,224,165,13
> 5,224,
> -
> 164,168,224,164,136,224,164,168,224,164,143,224,164,185,224,164,176,224,16
> 4,137,
> -
> 224,164,184,224,164,174,224,165,135,224,164,149,224,164,174,224,164,181,22
> 4,165,
> -
> 139,224,164,178,224,165,135,224,164,184,224,164,172,224,164,174,224,164,13
> 6,224,
> -
> 164,166,224,165,135,224,164,147,224,164,176,224,164,134,224,164,174,224,16
> 4,172,
> -
> 224,164,184,224,164,173,224,164,176,224,164,172,224,164,168,224,164,154,22
> 4,164,
> -
> 178,224,164,174,224,164,168,224,164,134,224,164,151,224,164,184,224,165,12
> 8,224,
> -
> 164,178,224,165,128,216,185,217,132,217,137,216,165,217,132,217,137,217,13
> 5,216,
> -
> 176,216,167,216,162,216,174,216,177,216,185,216,175,216,175,216,167,217,13
> 2,217,
> -
> 137,217,135,216,176,217,135,216,181,217,136,216,177,216,186,217,138,216,17
> 7,217,
> -
> 131,216,167,217,134,217,136,217,132,216,167,216,168,217,138,217,134,216,18
> 5,216,
> -
> 177,216,182,216,176,217,132,217,131,217,135,217,134,216,167,217,138,217,13
> 6,217,
> -
> 133,217,130,216,167,217,132,216,185,217,132,217,138,216,167,217,134,216,16
> 7,217,
> -
> 132,217,131,217,134,216,173,216,170,217,137,217,130,216,168,217,132,217,13
> 6,216,
> -
> 173,216,169,216,167,216,174,216,177,217,129,217,130,216,183,216,185,216,16
> 8,216,
> -
> 175,216,177,217,131,217,134,216,165,216,176,216,167,217,131,217,133,216,16
> 7,216,
> -
> 167,216,173,216,175,216,165,217,132,216,167,217,129,217,138,217,135,216,16
> 8,216,
> -
> 185,216,182,217,131,217,138,217,129,216,168,216,173,216,171,217,136,217,13
> 3,217,
> -
> 134,217,136,217,135,217,136,216,163,217,134,216,167,216,172,216,175,216,16
> 7,217,
> -
> 132,217,135,216,167,216,179,217,132,217,133,216,185,217,134,216,175,217,13
> 2,217,
> -
> 138,216,179,216,185,216,168,216,177,216,181,217,132,217,137,217,133,217,13
> 4,216,
> -
> 176,216,168,217,135,216,167,216,163,217,134,217,135,217,133,216,171,217,13
> 2,217,
> -
> 131,217,134,216,170,216,167,217,132,216,167,216,173,217,138,216,171,217,13
> 3,216,
> -
> 181,216,177,216,180,216,177,216,173,216,173,217,136,217,132,217,136,217,12
> 9,217,
> -
> 138,216,167,216,176,216,167,217,132,217,131,217,132,217,133,216,177,216,16
> 9,216,
> -
> 167,217,134,216,170,216,167,217,132,217,129,216,163,216,168,217,136,216,17
> 4,216,
> -
> 167,216,181,216,163,217,134,216,170,216,167,217,134,217,135,216,167,217,13
> 2,217,
> -
> 138,216,185,216,182,217,136,217,136,217,130,216,175,216,167,216,168,217,13
> 4,216,
> -
> 174,217,138,216,177,216,168,217,134,216,170,217,132,217,131,217,133,216,18
> 0,216,
> -
> 167,216,161,217,136,217,135,217,138,216,167,216,168,217,136,217,130,216,18
> 1,216,
> -
> 181,217,136,217,133,216,167,216,177,217,130,217,133,216,163,216,173,216,17
> 5,217,
> -
> 134,216,173,217,134,216,185,216,175,217,133,216,177,216,163,217,138,216,16
> 7,216,
> -
> 173,216,169,217,131,216,170,216,168,216,175,217,136,217,134,217,138,216,17
> 2,216,
> -
> 168,217,133,217,134,217,135,216,170,216,173,216,170,216,172,217,135,216,16
> 9,216,
> -
> 179,217,134,216,169,217,138,216,170,217,133,217,131,216,177,216,169,216,18
> 6,216,
> -
> 178,216,169,217,134,217,129,216,179,216,168,217,138,216,170,217,132,217,13
> 2,217,
> -
> 135,217,132,217,134,216,167,216,170,217,132,217,131,217,130,217,132,216,16
> 8,217,
> -
> 132,217,133,216,167,216,185,217,134,217,135,216,163,217,136,217,132,216,18
> 0,217,
> -
> 138,216,161,217,134,217,136,216,177,216,163,217,133,216,167,217,129,217,13
> 8,217,
> -
> 131,216,168,217,131,217,132,216,176,216,167,216,170,216,177,216,170,216,16
> 8,216,
> -
> 168,216,163,217,134,217,135,217,133,216,179,216,167,217,134,217,131,216,16
> 8,217,
> -
> 138,216,185,217,129,217,130,216,175,216,173,216,179,217,134,217,132,217,13
> 5,217,
> -
> 133,216,180,216,185,216,177,216,163,217,135,217,132,216,180,217,135,216,17
> 7,217,
> -
> 130,216,183,216,177,216,183,217,132,216,168,112,114,111,102,105,108,101,11
> 5,101,
> -
> 114,118,105,99,101,100,101,102,97,117,108,116,104,105,109,115,101,108,102,1
> 00,
> -
> 101,116,97,105,108,115,99,111,110,116,101,110,116,115,117,112,112,111,114,1
> 16,
> -
> 115,116,97,114,116,101,100,109,101,115,115,97,103,101,115,117,99,99,101,115
> ,115,
> -
> 102,97,115,104,105,111,110,60,116,105,116,108,101,62,99,111,117,110,116,114
> ,121,
> -
> 97,99,99,111,117,110,116,99,114,101,97,116,101,100,115,116,111,114,105,101,
> 115,
> -
> 114,101,115,117,108,116,115,114,117,110,110,105,110,103,112,114,111,99,101,
> 115,
> -
> 115,119,114,105,116,105,110,103,111,98,106,101,99,116,115,118,105,115,105,9
> 8,108
> -
> ,101,119,101,108,99,111,109,101,97,114,116,105,99,108,101,117,110,107,110,1
> 11,
> -
> 119,110,110,101,116,119,111,114,107,99,111,109,112,97,110,121,100,121,110,9
> 7,109
> -
> ,105,99,98,114,111,119,115,101,114,112,114,105,118,97,99,121,112,114,111,98,
> 108,
> -
> 101,109,83,101,114,118,105,99,101,114,101,115,112,101,99,116,100,105,115,11
> 2,108
> -
> ,97,121,114,101,113,117,101,115,116,114,101,115,101,114,118,101,119,101,98,
> 115,
> -
> 105,116,101,104,105,115,116,111,114,121,102,114,105,101,110,100,115,111,11
> 2,116,
> -
> 105,111,110,115,119,111,114,107,105,110,103,118,101,114,115,105,111,110,10
> 9,105,
> -
> 108,108,105,111,110,99,104,97,110,110,101,108,119,105,110,100,111,119,46,97
> ,100,
> -
> 100,114,101,115,115,118,105,115,105,116,101,100,119,101,97,116,104,101,114,
> 99,
> -
> 111,114,114,101,99,116,112,114,111,100,117,99,116,101,100,105,114,101,99,11
> 6,102
> -
> ,111,114,119,97,114,100,121,111,117,32,99,97,110,114,101,109,111,118,101,10
> 0,115
> -
> ,117,98,106,101,99,116,99,111,110,116,114,111,108,97,114,99,104,105,118,101,
> 99,
> -
> 117,114,114,101,110,116,114,101,97,100,105,110,103,108,105,98,114,97,114,12
> 1,108
> -
> ,105,109,105,116,101,100,109,97,110,97,103,101,114,102,117,114,116,104,101,
> 114,
> -
> 115,117,109,109,97,114,121,109,97,99,104,105,110,101,109,105,110,117,116,10
> 1,115
> -
> ,112,114,105,118,97,116,101,99,111,110,116,101,120,116,112,114,111,103,114,
> 97,
> -
> 109,115,111,99,105,101,116,121,110,117,109,98,101,114,115,119,114,105,116,1
> 16,
> -
> 101,110,101,110,97,98,108,101,100,116,114,105,103,103,101,114,115,111,117,1
> 14,99
> -
> ,101,115,108,111,97,100,105,110,103,101,108,101,109,101,110,116,112,97,114,
> 116,
> -
> 110,101,114,102,105,110,97,108,108,121,112,101,114,102,101,99,116,109,101,9
> 7,110
> -
> ,105,110,103,115,121,115,116,101,109,115,107,101,101,112,105,110,103,99,117
> ,108,
> -
> 116,117,114,101,38,113,117,111,116,59,44,106,111,117,114,110,97,108,112,114
> ,111,
> -
> 106,101,99,116,115,117,114,102,97,99,101,115,38,113,117,111,116,59,101,120,
> 112,
> -
> 105,114,101,115,114,101,118,105,101,119,115,98,97,108,97,110,99,101,69,110,
> 103,
> -
> 108,105,115,104,67,111,110,116,101,110,116,116,104,114,111,117,103,104,80,1
> 08,
> -
> 101,97,115,101,32,111,112,105,110,105,111,110,99,111,110,116,97,99,116,97,1
> 18,
> -
> 101,114,97,103,101,112,114,105,109,97,114,121,118,105,108,108,97,103,101,83
> ,112,
> -
> 97,110,105,115,104,103,97,108,108,101,114,121,100,101,99,108,105,110,101,10
> 9,101
> -
> ,101,116,105,110,103,109,105,115,115,105,111,110,112,111,112,117,108,97,114
> ,113,
> -
> 117,97,108,105,116,121,109,101,97,115,117,114,101,103,101,110,101,114,97,10
> 8,115
> -
> ,112,101,99,105,101,115,115,101,115,115,105,111,110,115,101,99,116,105,111,
> 110,
> -
> 119,114,105,116,101,114,115,99,111,117,110,116,101,114,105,110,105,116,105,
> 97,
> -
> 108,114,101,112,111,114,116,115,102,105,103,117,114,101,115,109,101,109,98,
> 101,
> -
> 114,115,104,111,108,100,105,110,103,100,105,115,112,117,116,101,101,97,114,
> 108,
> -
> 105,101,114,101,120,112,114,101,115,115,100,105,103,105,116,97,108,112,105,
> 99,
> -
> 116,117,114,101,65,110,111,116,104,101,114,109,97,114,114,105,101,100,116,1
> 14,97
> -
> ,102,102,105,99,108,101,97,100,105,110,103,99,104,97,110,103,101,100,99,101,
> 110,
> -
> 116,114,97,108,118,105,99,116,111,114,121,105,109,97,103,101,115,47,114,101
> ,97,
> -
> 115,111,110,115,115,116,117,100,105,101,115,102,101,97,116,117,114,101,108,
> 105,
> -
> 115,116,105,110,103,109,117,115,116,32,98,101,115,99,104,111,111,108,115,86
> ,101,
> -
> 114,115,105,111,110,117,115,117,97,108,108,121,101,112,105,115,111,100,101,
> 112,
> -
> 108,97,121,105,110,103,103,114,111,119,105,110,103,111,98,118,105,111,117,1
> 15,
> -
> 111,118,101,114,108,97,121,112,114,101,115,101,110,116,97,99,116,105,111,11
> 0,115
> -
> ,60,47,117,108,62,13,10,119,114,97,112,112,101,114,97,108,114,101,97,100,121
> ,99,
> -
> 101,114,116,97,105,110,114,101,97,108,105,116,121,115,116,111,114,97,103,10
> 1,97,
> -
> 110,111,116,104,101,114,100,101,115,107,116,111,112,111,102,102,101,114,10
> 1,100,
> -
> 112,97,116,116,101,114,110,117,110,117,115,117,97,108,68,105,103,105,116,97
> ,108,
> -
> 99,97,112,105,116,97,108,87,101,98,115,105,116,101,102,97,105,108,117,114,1
> 01,99
> -
> ,111,110,110,101,99,116,114,101,100,117,99,101,100,65,110,100,114,111,105,1
> 00,
> -
> 100,101,99,97,100,101,115,114,101,103,117,108,97,114,32,38,97,109,112,59,32,
> 97,
> -
> 110,105,109,97,108,115,114,101,108,101,97,115,101,65,117,116,111,109,97,116
> ,103,
> -
> 101,116,116,105,110,103,109,101,116,104,111,100,115,110,111,116,104,105,11
> 0,103,
> -
> 80,111,112,117,108,97,114,99,97,112,116,105,111,110,108,101,116,116,101,114
> ,115,
> -
> 99,97,112,116,117,114,101,115,99,105,101,110,99,101,108,105,99,101,110,115,
> 101,
> -
> 99,104,97,110,103,101,115,69,110,103,108,97,110,100,61,49,38,97,109,112,59,7
> 2,
> -
> 105,115,116,111,114,121,32,61,32,110,101,119,32,67,101,110,116,114,97,108,1
> 17,
> -
> 112,100,97,116,101,100,83,112,101,99,105,97,108,78,101,116,119,111,114,107,
> 114,
> -
> 101,113,117,105,114,101,99,111,109,109,101,110,116,119,97,114,110,105,110,1
> 03,67
> -
> ,111,108,108,101,103,101,116,111,111,108,98,97,114,114,101,109,97,105,110,1
> 15,98
> -
> ,101,99,97,117,115,101,101,108,101,99,116,101,100,68,101,117,116,115,99,104,
> 102,
> -
> 105,110,97,110,99,101,119,111,114,107,101,114,115,113,117,105,99,107,108,12
> 1,98,
> -
> 101,116,119,101,101,110,101,120,97,99,116,108,121,115,101,116,116,105,110,1
> 03,
> -
> 100,105,115,101,97,115,101,83,111,99,105,101,116,121,119,101,97,112,111,110
> ,115,
> -
> 101,120,104,105,98,105,116,38,108,116,59,33,45,45,67,111,110,116,114,111,10
> 8,99,
> -
> 108,97,115,115,101,115,99,111,118,101,114,101,100,111,117,116,108,105,110,1
> 01,97
> -
> ,116,116,97,99,107,115,100,101,118,105,99,101,115,40,119,105,110,100,111,11
> 9,112
> -
> ,117,114,112,111,115,101,116,105,116,108,101,61,34,77,111,98,105,108,101,32,
> 107,
> -
> 105,108,108,105,110,103,115,104,111,119,105,110,103,73,116,97,108,105,97,11
> 0,100
> -
> ,114,111,112,112,101,100,104,101,97,118,105,108,121,101,102,102,101,99,116,
> 115,
> -
> 45,49,39,93,41,59,10,99,111,110,102,105,114,109,67,117,114,114,101,110,116,9
> 7,
> -
> 100,118,97,110,99,101,115,104,97,114,105,110,103,111,112,101,110,105,110,10
> 3,100
> -
> ,114,97,119,105,110,103,98,105,108,108,105,111,110,111,114,100,101,114,101,
> 100,
> -
> 71,101,114,109,97,110,121,114,101,108,97,116,101,100,60,47,102,111,114,109,
> 62,
> -
> 105,110,99,108,117,100,101,119,104,101,116,104,101,114,100,101,102,105,110,
> 101,
> -
> 100,83,99,105,101,110,99,101,99,97,116,97,108,111,103,65,114,116,105,99,108,
> 101,
> -
> 98,117,116,116,111,110,115,108,97,114,103,101,115,116,117,110,105,102,111,1
> 14,
> -
> 109,106,111,117,114,110,101,121,115,105,100,101,98,97,114,67,104,105,99,97,
> 103,
> -
> 111,104,111,108,105,100,97,121,71,101,110,101,114,97,108,112,97,115,115,97,
> 103,
> -
> 101,44,38,113,117,111,116,59,97,110,105,109,97,116,101,102,101,101,108,105,
> 110,
> -
> 103,97,114,114,105,118,101,100,112,97,115,115,105,110,103,110,97,116,117,11
> 4,97,
> -
> 108,114,111,117,103,104,108,121,46,10,10,84,104,101,32,98,117,116,32,110,11
> 1,116
> -
> ,100,101,110,115,105,116,121,66,114,105,116,97,105,110,67,104,105,110,101,1
> 15,
> -
> 101,108,97,99,107,32,111,102,116,114,105,98,117,116,101,73,114,101,108,97,1
> 10,
> -
> 100,34,32,100,97,116,97,45,102,97,99,116,111,114,115,114,101,99,101,105,118,
> 101,
> -
> 116,104,97,116,32,105,115,76,105,98,114,97,114,121,104,117,115,98,97,110,10
> 0,105
> -
> ,110,32,102,97,99,116,97,102,102,97,105,114,115,67,104,97,114,108,101,115,11
> 4,97
> -
> ,100,105,99,97,108,98,114,111,117,103,104,116,102,105,110,100,105,110,103,1
> 08,97
> -
> ,110,100,105,110,103,58,108,97,110,103,61,34,114,101,116,117,114,110,32,108,
> 101,
> -
> 97,100,101,114,115,112,108,97,110,110,101,100,112,114,101,109,105,117,109,1
> 12,97
> -
> ,99,107,97,103,101,65,109,101,114,105,99,97,69,100,105,116,105,111,110,93,38
> ,113
> -
> ,117,111,116,59,77,101,115,115,97,103,101,110,101,101,100,32,116,111,118,97,
> 108,
> -
> 117,101,61,34,99,111,109,112,108,101,120,108,111,111,107,105,110,103,115,11
> 6,97,
> -
> 116,105,111,110,98,101,108,105,101,118,101,115,109,97,108,108,101,114,45,10
> 9,111
> -
> ,98,105,108,101,114,101,99,111,114,100,115,119,97,110,116,32,116,111,107,10
> 5,110
> -
> ,100,32,111,102,70,105,114,101,102,111,120,121,111,117,32,97,114,101,115,10
> 5,109
> -
> ,105,108,97,114,115,116,117,100,105,101,100,109,97,120,105,109,117,109,104,
> 101,
> -
> 97,100,105,110,103,114,97,112,105,100,108,121,99,108,105,109,97,116,101,107
> ,105,
> -
> 110,103,100,111,109,101,109,101,114,103,101,100,97,109,111,117,110,116,115,
> 102,
> -
> 111,117,110,100,101,100,112,105,111,110,101,101,114,102,111,114,109,117,10
> 8,97,
> -
> 100,121,110,97,115,116,121,104,111,119,32,116,111,32,83,117,112,112,111,114
> ,116,
> -
> 114,101,118,101,110,117,101,101,99,111,110,111,109,121,82,101,115,117,108,1
> 16,
> -
> 115,98,114,111,116,104,101,114,115,111,108,100,105,101,114,108,97,114,103,1
> 01,
> -
> 108,121,99,97,108,108,105,110,103,46,38,113,117,111,116,59,65,99,99,111,117,
> 110,
> -
> 116,69,100,119,97,114,100,32,115,101,103,109,101,110,116,82,111,98,101,114,
> 116,
> -
> 32,101,102,102,111,114,116,115,80,97,99,105,102,105,99,108,101,97,114,110,1
> 01,
> -
> 100,117,112,32,119,105,116,104,104,101,105,103,104,116,58,119,101,32,104,97
> ,118,
> -
> 101,65,110,103,101,108,101,115,110,97,116,105,111,110,115,95,115,101,97,114
> ,99,
> -
> 104,97,112,112,108,105,101,100,97,99,113,117,105,114,101,109,97,115,115,105
> ,118,
> -
> 101,103,114,97,110,116,101,100,58,32,102,97,108,115,101,116,114,101,97,116,
> 101,
> -
> 100,98,105,103,103,101,115,116,98,101,110,101,102,105,116,100,114,105,118,1
> 05,
> -
> 110,103,83,116,117,100,105,101,115,109,105,110,105,109,117,109,112,101,114,
> 104,
> -
> 97,112,115,109,111,114,110,105,110,103,115,101,108,108,105,110,103,105,115,
> 32,
> -
> 117,115,101,100,114,101,118,101,114,115,101,118,97,114,105,97,110,116,32,11
> 4,111
> -
> ,108,101,61,34,109,105,115,115,105,110,103,97,99,104,105,101,118,101,112,11
> 4,111
> -
> ,109,111,116,101,115,116,117,100,101,110,116,115,111,109,101,111,110,101,10
> 1,120
> -
> ,116,114,101,109,101,114,101,115,116,111,114,101,98,111,116,116,111,109,58,
> 101,
> -
> 118,111,108,118,101,100,97,108,108,32,116,104,101,115,105,116,101,109,97,11
> 2,101
> -
> ,110,103,108,105,115,104,119,97,121,32,116,111,32,32,65,117,103,117,115,116,
> 115,
> -
> 121,109,98,111,108,115,67,111,109,112,97,110,121,109,97,116,116,101,114,115
> ,109,
> -
> 117,115,105,99,97,108,97,103,97,105,110,115,116,115,101,114,118,105,110,103
> ,125,
> -
> 41,40,41,59,13,10,112,97,121,109,101,110,116,116,114,111,117,98,108,101,99,1
> 11,
> -
> 110,99,101,112,116,99,111,109,112,97,114,101,112,97,114,101,110,116,115,112
> ,108,
> -
> 97,121,101,114,115,114,101,103,105,111,110,115,109,111,110,105,116,111,114,
> 32,39
> -
> ,39,84,104,101,32,119,105,110,110,105,110,103,101,120,112,108,111,114,101,9
> 7,100
> -
> ,97,112,116,101,100,71,97,108,108,101,114,121,112,114,111,100,117,99,101,97,
> 98,
> -
> 105,108,105,116,121,101,110,104,97,110,99,101,99,97,114,101,101,114,115,41,
> 46,32
> -
> ,84,104,101,32,99,111,108,108,101,99,116,83,101,97,114,99,104,32,97,110,99,1
> 05,
> -
> 101,110,116,101,120,105,115,116,101,100,102,111,111,116,101,114,32,104,97,1
> 10,
> -
> 100,108,101,114,112,114,105,110,116,101,100,99,111,110,115,111,108,101,69,9
> 7,115
> -
> ,116,101,114,110,101,120,112,111,114,116,115,119,105,110,100,111,119,115,67
> ,104,
> -
> 97,110,110,101,108,105,108,108,101,103,97,108,110,101,117,116,114,97,108,11
> 5,117
> -
> ,103,103,101,115,116,95,104,101,97,100,101,114,115,105,103,110,105,110,103,
> 46,
> -
> 104,116,109,108,34,62,115,101,116,116,108,101,100,119,101,115,116,101,114,1
> 10,99
> -
> ,97,117,115,105,110,103,45,119,101,98,107,105,116,99,108,97,105,109,101,100,
> 74,
> -
> 117,115,116,105,99,101,99,104,97,112,116,101,114,118,105,99,116,105,109,115
> ,84,
> -
> 104,111,109,97,115,32,109,111,122,105,108,108,97,112,114,111,109,105,115,10
> 1,112
> -
> ,97,114,116,105,101,115,101,100,105,116,105,111,110,111,117,116,115,105,100
> ,101,
> -
> 58,102,97,108,115,101,44,104,117,110,100,114,101,100,79,108,121,109,112,105
> ,99,
> -
> 95,98,117,116,116,111,110,97,117,116,104,111,114,115,114,101,97,99,104,101,
> 100,
> -
> 99,104,114,111,110,105,99,100,101,109,97,110,100,115,115,101,99,111,110,100
> ,115,
> -
> 112,114,111,116,101,99,116,97,100,111,112,116,101,100,112,114,101,112,97,11
> 4,101
> -
> ,110,101,105,116,104,101,114,103,114,101,97,116,108,121,103,114,101,97,116,
> 101,
> -
> 114,111,118,101,114,97,108,108,105,109,112,114,111,118,101,99,111,109,109,9
> 7,110
> -
> ,100,115,112,101,99,105,97,108,115,101,97,114,99,104,46,119,111,114,115,104,
> 105,
> -
> 112,102,117,110,100,105,110,103,116,104,111,117,103,104,116,104,105,103,10
> 4,101,
> -
> 115,116,105,110,115,116,101,97,100,117,116,105,108,105,116,121,113,117,97,1
> 14,
> -
> 116,101,114,67,117,108,116,117,114,101,116,101,115,116,105,110,103,99,108,1
> 01,97
> -
> ,114,108,121,101,120,112,111,115,101,100,66,114,111,119,115,101,114,108,105
> ,98,
> -
> 101,114,97,108,125,32,99,97,116,99,104,80,114,111,106,101,99,116,101,120,97,
> 109,
> -
> 112,108,101,104,105,100,101,40,41,59,70,108,111,114,105,100,97,97,110,115,1
> 19,
> -
> 101,114,115,97,108,108,111,119,101,100,69,109,112,101,114,111,114,100,101,1
> 02,
> -
> 101,110,115,101,115,101,114,105,111,117,115,102,114,101,101,100,111,109,83,
> 101,
> -
> 118,101,114,97,108,45,98,117,116,116,111,110,70,117,114,116,104,101,114,111
> ,117,
> -
> 116,32,111,102,32,33,61,32,110,117,108,108,116,114,97,105,110,101,100,68,10
> 1,110
> -
> ,109,97,114,107,118,111,105,100,40,48,41,47,97,108,108,46,106,115,112,114,10
> 1,
> -
> 118,101,110,116,82,101,113,117,101,115,116,83,116,101,112,104,101,110,10,10
> ,87,
> -
> 104,101,110,32,111,98,115,101,114,118,101,60,47,104,50,62,13,10,77,111,100,1
> 01,
> -
> 114,110,32,112,114,111,118,105,100,101,34,32,97,108,116,61,34,98,111,114,10
> 0,101
> -
> ,114,115,46,10,10,70,111,114,32,10,10,77,97,110,121,32,97,114,116,105,115,11
> 6,
> -
> 115,112,111,119,101,114,101,100,112,101,114,102,111,114,109,102,105,99,116,
> 105,
> -
> 111,110,116,121,112,101,32,111,102,109,101,100,105,99,97,108,116,105,99,107
> ,101,
> -
> 116,115,111,112,112,111,115,101,100,67,111,117,110,99,105,108,119,105,116,1
> 10,
> -
> 101,115,115,106,117,115,116,105,99,101,71,101,111,114,103,101,32,66,101,108
> ,103,
> -
> 105,117,109,46,46,46,60,47,97,62,116,119,105,116,116,101,114,110,111,116,97,
> 98,
> -
> 108,121,119,97,105,116,105,110,103,119,97,114,102,97,114,101,32,79,116,104,
> 101,
> -
> 114,32,114,97,110,107,105,110,103,112,104,114,97,115,101,115,109,101,110,11
> 6,105
> -
> ,111,110,115,117,114,118,105,118,101,115,99,104,111,108,97,114,60,47,112,62,
> 13,
> -
> 10,32,67,111,117,110,116,114,121,105,103,110,111,114,101,100,108,111,115,11
> 5,32,
> -
> 111,102,106,117,115,116,32,97,115,71,101,111,114,103,105,97,115,116,114,97,
> 110,
> -
> 103,101,60,104,101,97,100,62,60,115,116,111,112,112,101,100,49,39,93,41,59,1
> 3,10
> -
> ,105,115,108,97,110,100,115,110,111,116,97,98,108,101,98,111,114,100,101,11
> 4,58,
> -
> 108,105,115,116,32,111,102,99,97,114,114,105,101,100,49,48,48,44,48,48,48,60
> ,47,
> -
> 104,51,62,10,32,115,101,118,101,114,97,108,98,101,99,111,109,101,115,115,10
> 1,108
> -
> ,101,99,116,32,119,101,100,100,105,110,103,48,48,46,104,116,109,108,109,111,
> 110,
> -
> 97,114,99,104,111,102,102,32,116,104,101,116,101,97,99,104,101,114,104,105,
> 103,
> -
> 104,108,121,32,98,105,111,108,111,103,121,108,105,102,101,32,111,102,111,11
> 4,32,
> -
> 101,118,101,110,114,105,115,101,32,111,102,38,114,97,113,117,111,59,112,108
> ,117,
> -
> 115,111,110,101,104,117,110,116,105,110,103,40,116,104,111,117,103,104,68,1
> 11,
> -
> 117,103,108,97,115,106,111,105,110,105,110,103,99,105,114,99,108,101,115,70
> ,111,
> -
> 114,32,116,104,101,65,110,99,105,101,110,116,86,105,101,116,110,97,109,118,
> 101,
> -
> 104,105,99,108,101,115,117,99,104,32,97,115,99,114,121,115,116,97,108,118,9
> 7,108
> -
> ,117,101,32,61,87,105,110,100,111,119,115,101,110,106,111,121,101,100,97,32,
> 115,
> -
> 109,97,108,108,97,115,115,117,109,101,100,60,97,32,105,100,61,34,102,111,11
> 4,101
> -
> ,105,103,110,32,65,108,108,32,114,105,104,111,119,32,116,104,101,68,105,115,
> 112,
> -
> 108,97,121,114,101,116,105,114,101,100,104,111,119,101,118,101,114,104,105,
> 100,
> -
> 100,101,110,59,98,97,116,116,108,101,115,115,101,101,107,105,110,103,99,97,
> 98,
> -
> 105,110,101,116,119,97,115,32,110,111,116,108,111,111,107,32,97,116,99,111,
> 110,
> -
> 100,117,99,116,103,101,116,32,116,104,101,74,97,110,117,97,114,121,104,97,1
> 12,
> -
> 112,101,110,115,116,117,114,110,105,110,103,97,58,104,111,118,101,114,79,11
> 0,108
> -
> ,105,110,101,32,70,114,101,110,99,104,32,108,97,99,107,105,110,103,116,121,1
> 12,
> -
> 105,99,97,108,101,120,116,114,97,99,116,101,110,101,109,105,101,115,101,118
> ,101,
> -
> 110,32,105,102,103,101,110,101,114,97,116,100,101,99,105,100,101,100,97,114
> ,101,
> -
> 32,110,111,116,47,115,101,97,114,99,104,98,101,108,105,101,102,115,45,105,1
> 09,97
> -
> ,103,101,58,108,111,99,97,116,101,100,115,116,97,116,105,99,46,108,111,103,1
> 05,
> -
> 110,34,62,99,111,110,118,101,114,116,118,105,111,108,101,110,116,101,110,11
> 6,101
> -
> ,114,101,100,102,105,114,115,116,34,62,99,105,114,99,117,105,116,70,105,110,
> 108,
> -
> 97,110,100,99,104,101,109,105,115,116,115,104,101,32,119,97,115,49,48,112,1
> 20,59
> -
> ,34,62,97,115,32,115,117,99,104,100,105,118,105,100,101,100,60,47,115,112,97
> ,110
> -
> ,62,119,105,108,108,32,98,101,108,105,110,101,32,111,102,97,32,103,114,101,9
> 7,
> -
> 116,109,121,115,116,101,114,121,47,105,110,100,101,120,46,102,97,108,108,10
> 5,110
> -
> ,103,100,117,101,32,116,111,32,114,97,105,108,119,97,121,99,111,108,108,101,
> 103,
> -
> 101,109,111,110,115,116,101,114,100,101,115,99,101,110,116,105,116,32,119,1
> 05,
> -
> 116,104,110,117,99,108,101,97,114,74,101,119,105,115,104,32,112,114,111,116
> ,101,
> -
> 115,116,66,114,105,116,105,115,104,102,108,111,119,101,114,115,112,114,101,
> 100,
> -
> 105,99,116,114,101,102,111,114,109,115,98,117,116,116,111,110,32,119,104,11
> 1,32,
> -
> 119,97,115,108,101,99,116,117,114,101,105,110,115,116,97,110,116,115,117,10
> 5,99,
> -
> 105,100,101,103,101,110,101,114,105,99,112,101,114,105,111,100,115,109,97,1
> 14,
> -
> 107,101,116,115,83,111,99,105,97,108,32,102,105,115,104,105,110,103,99,111,
> 109,
> -
> 98,105,110,101,103,114,97,112,104,105,99,119,105,110,110,101,114,115,60,98,
> 114,
> -
> 32,47,62,60,98,121,32,116,104,101,32,78,97,116,117,114,97,108,80,114,105,118
> ,97,
> -
> 99,121,99,111,111,107,105,101,115,111,117,116,99,111,109,101,114,101,115,11
> 1,108
> -
> ,118,101,83,119,101,100,105,115,104,98,114,105,101,102,108,121,80,101,114,1
> 15,
> -
> 105,97,110,115,111,32,109,117,99,104,67,101,110,116,117,114,121,100,101,112
> ,105,
> -
> 99,116,115,99,111,108,117,109,110,115,104,111,117,115,105,110,103,115,99,11
> 4,105
> -
> ,112,116,115,110,101,120,116,32,116,111,98,101,97,114,105,110,103,109,97,11
> 2,112
> -
> ,105,110,103,114,101,118,105,115,101,100,106,81,117,101,114,121,40,45,119,1
> 05,
> -
> 100,116,104,58,116,105,116,108,101,34,62,116,111,111,108,116,105,112,83,101
> ,99,
> -
> 116,105,111,110,100,101,115,105,103,110,115,84,117,114,107,105,115,104,121,
> 111,
> -
> 117,110,103,101,114,46,109,97,116,99,104,40,125,41,40,41,59,10,10,98,117,114
> ,110
> -
> ,105,110,103,111,112,101,114,97,116,101,100,101,103,114,101,101,115,115,111
> ,117,
> -
> 114,99,101,61,82,105,99,104,97,114,100,99,108,111,115,101,108,121,112,108,9
> 7,115
> -
> ,116,105,99,101,110,116,114,105,101,115,60,47,116,114,62,13,10,99,111,108,11
> 1,
> -
> 114,58,35,117,108,32,105,100,61,34,112,111,115,115,101,115,115,114,111,108,
> 108,
> -
> 105,110,103,112,104,121,115,105,99,115,102,97,105,108,105,110,103,101,120,1
> 01,99
> -
> ,117,116,101,99,111,110,116,101,115,116,108,105,110,107,32,116,111,68,101,1
> 02,97
> -
> ,117,108,116,60,98,114,32,47,62,10,58,32,116,114,117,101,44,99,104,97,114,11
> 6,
> -
> 101,114,116,111,117,114,105,115,109,99,108,97,115,115,105,99,112,114,111,99
> ,101,
> -
> 101,100,101,120,112,108,97,105,110,60,47,104,49,62,13,10,111,110,108,105,11
> 0,101
> -
> ,46,63,120,109,108,32,118,101,104,101,108,112,105,110,103,100,105,97,109,11
> 1,110
> -
> ,100,117,115,101,32,116,104,101,97,105,114,108,105,110,101,101,110,100,32,4
> 5,45,
> -
> 62,41,46,97,116,116,114,40,114,101,97,100,101,114,115,104,111,115,116,105,1
> 10,
> -
> 103,35,102,102,102,102,102,102,114,101,97,108,105,122,101,86,105,110,99,101
> ,110,
> -
> 116,115,105,103,110,97,108,115,32,115,114,99,61,34,47,80,114,111,100,117,99,
> 116,
> -
> 100,101,115,112,105,116,101,100,105,118,101,114,115,101,116,101,108,108,10
> 5,110,
> -
> 103,80,117,98,108,105,99,32,104,101,108,100,32,105,110,74,111,115,101,112,1
> 04,32
> -
> ,116,104,101,97,116,114,101,97,102,102,101,99,116,115,60,115,116,121,108,10
> 1,62,
> -
> 97,32,108,97,114,103,101,100,111,101,115,110,39,116,108,97,116,101,114,44,3
> 2,69,
> -
> 108,101,109,101,110,116,102,97,118,105,99,111,110,99,114,101,97,116,111,114
> ,72,
> -
> 117,110,103,97,114,121,65,105,114,112,111,114,116,115,101,101,32,116,104,10
> 1,115
> -
> ,111,32,116,104,97,116,77,105,99,104,97,101,108,83,121,115,116,101,109,115,8
> 0,
> -
> 114,111,103,114,97,109,115,44,32,97,110,100,32,32,119,105,100,116,104,61,10
> 1,38,
> -
> 113,117,111,116,59,116,114,97,100,105,110,103,108,101,102,116,34,62,10,112,
> 101,
> -
> 114,115,111,110,115,71,111,108,100,101,110,32,65,102,102,97,105,114,115,103
> ,114,
> -
> 97,109,109,97,114,102,111,114,109,105,110,103,100,101,115,116,114,111,121,1
> 05,
> -
> 100,101,97,32,111,102,99,97,115,101,32,111,102,111,108,100,101,115,116,32,1
> 16,
> -
> 104,105,115,32,105,115,46,115,114,99,32,61,32,99,97,114,116,111,111,110,114,
> 101,
> -
> 103,105,115,116,114,67,111,109,109,111,110,115,77,117,115,108,105,109,115,8
> 7,104
> -
> ,97,116,32,105,115,105,110,32,109,97,110,121,109,97,114,107,105,110,103,114,
> 101,
> -
> 118,101,97,108,115,73,110,100,101,101,100,44,101,113,117,97,108,108,121,47,
> 115,
> -
> 104,111,119,95,97,111,117,116,100,111,111,114,101,115,99,97,112,101,40,65,1
> 17,
> -
> 115,116,114,105,97,103,101,110,101,116,105,99,115,121,115,116,101,109,44,73
> ,110,
> -
> 32,116,104,101,32,115,105,116,116,105,110,103,72,101,32,97,108,115,111,73,1
> 15,
> -
> 108,97,110,100,115,65,99,97,100,101,109,121,10,9,9,60,33,45,45,68,97,110,105,
> 101
> -
> ,108,32,98,105,110,100,105,110,103,98,108,111,99,107,34,62,105,109,112,111,1
> 15,
> -
> 101,100,117,116,105,108,105,122,101,65,98,114,97,104,97,109,40,101,120,99,1
> 01,
> -
> 112,116,123,119,105,100,116,104,58,112,117,116,116,105,110,103,41,46,104,11
> 6,109
> -
> ,108,40,124,124,32,91,93,59,10,68,65,84,65,91,32,42,107,105,116,99,104,101,11
> 0,
> -
> 109,111,117,110,116,101,100,97,99,116,117,97,108,32,100,105,97,108,101,99,1
> 16,
> -
> 109,97,105,110,108,121,32,95,98,108,97,110,107,39,105,110,115,116,97,108,10
> 8,101
> -
> ,120,112,101,114,116,115,105,102,40,116,121,112,101,73,116,32,97,108,115,11
> 1,38,
> -
> 99,111,112,121,59,32,34,62,84,101,114,109,115,98,111,114,110,32,105,110,79,1
> 12,
> -
> 116,105,111,110,115,101,97,115,116,101,114,110,116,97,108,107,105,110,103,9
> 9,111
> -
> ,110,99,101,114,110,103,97,105,110,101,100,32,111,110,103,111,105,110,103,1
> 06,
> -
> 117,115,116,105,102,121,99,114,105,116,105,99,115,102,97,99,116,111,114,121
> ,105,
> -
> 116,115,32,111,119,110,97,115,115,97,117,108,116,105,110,118,105,116,101,10
> 0,108
> -
> ,97,115,116,105,110,103,104,105,115,32,111,119,110,104,114,101,102,61,34,47,
> 34,
> -
> 32,114,101,108,61,34,100,101,118,101,108,111,112,99,111,110,99,101,114,116,
> 100,
> -
> 105,97,103,114,97,109,100,111,108,108,97,114,115,99,108,117,115,116,101,114
> ,112,
> -
> 104,112,63,105,100,61,97,108,99,111,104,111,108,41,59,125,41,40,41,59,117,11
> 5,
> -
> 105,110,103,32,97,62,60,115,112,97,110,62,118,101,115,115,101,108,115,114,1
> 01,
> -
> 118,105,118,97,108,65,100,100,114,101,115,115,97,109,97,116,101,117,114,97,
> 110,
> -
> 100,114,111,105,100,97,108,108,101,103,101,100,105,108,108,110,101,115,115,
> 119,
> -
> 97,108,107,105,110,103,99,101,110,116,101,114,115,113,117,97,108,105,102,12
> 1,109
> -
> ,97,116,99,104,101,115,117,110,105,102,105,101,100,101,120,116,105,110,99,1
> 16,68
> -
> ,101,102,101,110,115,101,100,105,101,100,32,105,110,10,9,60,33,45,45,32,99,1
> 17,
> -
> 115,116,111,109,115,108,105,110,107,105,110,103,76,105,116,116,108,101,32,6
> 6,111
> -
> ,111,107,32,111,102,101,118,101,110,105,110,103,109,105,110,46,106,115,63,9
> 7,114
> -
> ,101,32,116,104,101,107,111,110,116,97,107,116,116,111,100,97,121,39,115,46,
> 104,
> -
> 116,109,108,34,32,116,97,114,103,101,116,61,119,101,97,114,105,110,103,65,1
> 08,
> -
> 108,32,82,105,103,59,10,125,41,40,41,59,114,97,105,115,105,110,103,32,65,108
> ,115
> -
> ,111,44,32,99,114,117,99,105,97,108,97,98,111,117,116,34,62,100,101,99,108,9
> 7,
> -
> 114,101,45,45,62,10,60,115,99,102,105,114,101,102,111,120,97,115,32,109,117,
> 99,
> -
> 104,97,112,112,108,105,101,115,105,110,100,101,120,44,32,115,44,32,98,117,1
> 16,32
> -
> ,116,121,112,101,32,61,32,10,13,10,60,33,45,45,116,111,119,97,114,100,115,82,
> 101
> -
> ,99,111,114,100,115,80,114,105,118,97,116,101,70,111,114,101,105,103,110,80,
> 114,
> -
> 101,109,105,101,114,99,104,111,105,99,101,115,86,105,114,116,117,97,108,114
> ,101,
> -
> 116,117,114,110,115,67,111,109,109,101,110,116,80,111,119,101,114,101,100,1
> 05,
> -
> 110,108,105,110,101,59,112,111,118,101,114,116,121,99,104,97,109,98,101,114
> ,76,
> -
> 105,118,105,110,103,32,118,111,108,117,109,101,115,65,110,116,104,111,110,1
> 21,
> -
> 108,111,103,105,110,34,32,82,101,108,97,116,101,100,69,99,111,110,111,109,1
> 21,
> -
> 114,101,97,99,104,101,115,99,117,116,116,105,110,103,103,114,97,118,105,116
> ,121,
> -
> 108,105,102,101,32,105,110,67,104,97,112,116,101,114,45,115,104,97,100,111,
> 119,
> -
> 78,111,116,97,98,108,101,60,47,116,100,62,13,10,32,114,101,116,117,114,110,1
> 15,
> -
> 116,97,100,105,117,109,119,105,100,103,101,116,115,118,97,114,121,105,110,1
> 03,
> -
> 116,114,97,118,101,108,115,104,101,108,100,32,98,121,119,104,111,32,97,114,
> 101,
> -
> 119,111,114,107,32,105,110,102,97,99,117,108,116,121,97,110,103,117,108,97,
> 114,
> -
> 119,104,111,32,104,97,100,97,105,114,112,111,114,116,116,111,119,110,32,111
> ,102,
> -
> 10,10,83,111,109,101,32,39,99,108,105,99,107,39,99,104,97,114,103,101,115,10
> 7,
> -
> 101,121,119,111,114,100,105,116,32,119,105,108,108,99,105,116,121,32,111,10
> 2,40,
> -
> 116,104,105,115,41,59,65,110,100,114,101,119,32,117,110,105,113,117,101,32,
> 99,
> -
> 104,101,99,107,101,100,111,114,32,109,111,114,101,51,48,48,112,120,59,32,11
> 4,101
> -
> ,116,117,114,110,59,114,115,105,111,110,61,34,112,108,117,103,105,110,115,1
> 19,
> -
> 105,116,104,105,110,32,104,101,114,115,101,108,102,83,116,97,116,105,111,11
> 0,70,
> -
> 101,100,101,114,97,108,118,101,110,116,117,114,101,112,117,98,108,105,115,1
> 04,
> -
> 115,101,110,116,32,116,111,116,101,110,115,105,111,110,97,99,116,114,101,11
> 5,115
> -
> ,99,111,109,101,32,116,111,102,105,110,103,101,114,115,68,117,107,101,32,11
> 1,102
> -
> ,112,101,111,112,108,101,44,101,120,112,108,111,105,116,119,104,97,116,32,1
> 05,
> -
> 115,104,97,114,109,111,110,121,97,32,109,97,106,111,114,34,58,34,104,116,11
> 6,112
> -
> ,105,110,32,104,105,115,32,109,101,110,117,34,62,10,109,111,110,116,104,108,
> 121,
> -
> 111,102,102,105,99,101,114,99,111,117,110,99,105,108,103,97,105,110,105,110
> ,103,
> -
> 101,118,101,110,32,105,110,83,117,109,109,97,114,121,100,97,116,101,32,111,
> 102,
> -
> 108,111,121,97,108,116,121,102,105,116,110,101,115,115,97,110,100,32,119,97
> ,115,
> -
> 101,109,112,101,114,111,114,115,117,112,114,101,109,101,83,101,99,111,110,1
> 00,32
> -
> ,104,101,97,114,105,110,103,82,117,115,115,105,97,110,108,111,110,103,101,1
> 15,
> -
> 116,65,108,98,101,114,116,97,108,97,116,101,114,97,108,115,101,116,32,111,1
> 02,32
> -
> ,115,109,97,108,108,34,62,46,97,112,112,101,110,100,100,111,32,119,105,116,1
> 04,
> -
> 102,101,100,101,114,97,108,98,97,110,107,32,111,102,98,101,110,101,97,116,1
> 04,68
> -
> ,101,115,112,105,116,101,67,97,112,105,116,97,108,103,114,111,117,110,100,1
> 15,41
> -
> ,44,32,97,110,100,32,112,101,114,99,101,110,116,105,116,32,102,114,111,109,9
> 9,
> -
> 108,111,115,105,110,103,99,111,110,116,97,105,110,73,110,115,116,101,97,100
> ,102,
> -
> 105,102,116,101,101,110,97,115,32,119,101,108,108,46,121,97,104,111,111,46,
> 114,
> -
> 101,115,112,111,110,100,102,105,103,104,116,101,114,111,98,115,99,117,114,1
> 01,
> -
> 114,101,102,108,101,99,116,111,114,103,97,110,105,99,61,32,77,97,116,104,46,
> 101,
> -
> 100,105,116,105,110,103,111,110,108,105,110,101,32,112,97,100,100,105,110,1
> 03,97
> -
> ,32,119,104,111,108,101,111,110,101,114,114,111,114,121,101,97,114,32,111,1
> 02,
> -
> 101,110,100,32,111,102,32,98,97,114,114,105,101,114,119,104,101,110,32,105,
> 116,
> -
> 104,101,97,100,101,114,32,104,111,109,101,32,111,102,114,101,115,117,109,10
> 1,100
> -
> ,114,101,110,97,109,101,100,115,116,114,111,110,103,62,104,101,97,116,105,1
> 10,
> -
> 103,114,101,116,97,105,110,115,99,108,111,117,100,102,114,119,97,121,32,111
> ,102,
> -
> 32,77,97,114,99,104,32,49,107,110,111,119,105,110,103,105,110,32,112,97,114,
> 116,
> -
> 66,101,116,119,101,101,110,108,101,115,115,111,110,115,99,108,111,115,101,1
> 15,
> -
> 116,118,105,114,116,117,97,108,108,105,110,107,115,34,62,99,114,111,115,115
> ,101,
> -
> 100,69,78,68,32,45,45,62,102,97,109,111,117,115,32,97,119,97,114,100,101,100
> ,76,
> -
> 105,99,101,110,115,101,72,101,97,108,116,104,32,102,97,105,114,108,121,32,1
> 19,
> -
> 101,97,108,116,104,121,109,105,110,105,109,97,108,65,102,114,105,99,97,110,
> 99,
> -
> 111,109,112,101,116,101,108,97,98,101,108,34,62,115,105,110,103,105,110,103
> ,102,
> -
> 97,114,109,101,114,115,66,114,97,115,105,108,41,100,105,115,99,117,115,115,
> 114,
> -
> 101,112,108,97,99,101,71,114,101,103,111,114,121,102,111,110,116,32,99,111,
> 112,
> -
> 117,114,115,117,101,100,97,112,112,101,97,114,115,109,97,107,101,32,117,112
> ,114,
> -
> 111,117,110,100,101,100,98,111,116,104,32,111,102,98,108,111,99,107,101,100
> ,115,
> -
> 97,119,32,116,104,101,111,102,102,105,99,101,115,99,111,108,111,117,114,115
> ,105,
> -
> 102,40,100,111,99,117,119,104,101,110,32,104,101,101,110,102,111,114,99,101
> ,112,
> -
> 117,115,104,40,102,117,65,117,103,117,115,116,32,85,84,70,45,56,34,62,70,97,
> 110,
> -
> 116,97,115,121,105,110,32,109,111,115,116,105,110,106,117,114,101,100,85,11
> 5,117
> -
> ,97,108,108,121,102,97,114,109,105,110,103,99,108,111,115,117,114,101,111,9
> 8,106
> -
> ,101,99,116,32,100,101,102,101,110,99,101,117,115,101,32,111,102,32,77,101,1
> 00,
> -
> 105,99,97,108,60,98,111,100,121,62,10,101,118,105,100,101,110,116,98,101,32,
> 117,
> -
> 115,101,100,107,101,121,67,111,100,101,115,105,120,116,101,101,110,73,115,1
> 08,97
> -
> ,109,105,99,35,48,48,48,48,48,48,101,110,116,105,114,101,32,119,105,100,101,
> 108,
> -
> 121,32,97,99,116,105,118,101,32,40,116,121,112,101,111,102,111,110,101,32,9
> 9,97,
> -
> 110,99,111,108,111,114,32,61,115,112,101,97,107,101,114,101,120,116,101,110
> ,100,
> -
> 115,80,104,121,115,105,99,115,116,101,114,114,97,105,110,60,116,98,111,100,
> 121,
> -
> 62,102,117,110,101,114,97,108,118,105,101,119,105,110,103,109,105,100,100,1
> 08,
> -
> 101,32,99,114,105,99,107,101,116,112,114,111,112,104,101,116,115,104,105,10
> 2,116
> -
> ,101,100,100,111,99,116,111,114,115,82,117,115,115,101,108,108,32,116,97,11
> 4,103
> -
> ,101,116,99,111,109,112,97,99,116,97,108,103,101,98,114,97,115,111,99,105,97
> ,108
> -
> ,45,98,117,108,107,32,111,102,109,97,110,32,97,110,100,60,47,116,100,62,10,3
> 2,
> -
> 104,101,32,108,101,102,116,41,46,118,97,108,40,41,102,97,108,115,101,41,59,1
> 08,
> -
> 111,103,105,99,97,108,98,97,110,107,105,110,103,104,111,109,101,32,116,111,
> 110,
> -
> 97,109,105,110,103,32,65,114,105,122,111,110,97,99,114,101,100,105,116,115,
> 41,59
> -
> ,10,125,41,59,10,102,111,117,110,100,101,114,105,110,32,116,117,114,110,67,1
> 11,
> -
> 108,108,105,110,115,98,101,102,111,114,101,32,66,117,116,32,116,104,101,99,
> 104,
> -
> 97,114,103,101,100,84,105,116,108,101,34,62,67,97,112,116,97,105,110,115,11
> 2,101
> -
> ,108,108,101,100,103,111,100,100,101,115,115,84,97,103,32,45,45,62,65,100,10
> 0,
> -
> 105,110,103,58,98,117,116,32,119,97,115,82,101,99,101,110,116,32,112,97,116,
> 105,
> -
> 101,110,116,98,97,99,107,32,105,110,61,102,97,108,115,101,38,76,105,110,99,1
> 11,
> -
> 108,110,119,101,32,107,110,111,119,67,111,117,110,116,101,114,74,117,100,97
> ,105,
> -
> 115,109,115,99,114,105,112,116,32,97,108,116,101,114,101,100,39,93,41,59,10,
> 32,
> -
> 32,104,97,115,32,116,104,101,117,110,99,108,101,97,114,69,118,101,110,116,3
> 9,44,
> -
> 98,111,116,104,32,105,110,110,111,116,32,97,108,108,10,10,60,33,45,45,32,112
> ,108
> -
> ,97,99,105,110,103,104,97,114,100,32,116,111,32,99,101,110,116,101,114,115,1
> 11,
> -
> 114,116,32,111,102,99,108,105,101,110,116,115,115,116,114,101,101,116,115,6
> 6,101
> -
> ,114,110,97,114,100,97,115,115,101,114,116,115,116,101,110,100,32,116,111,1
> 02,97
> -
> ,110,116,97,115,121,100,111,119,110,32,105,110,104,97,114,98,111,117,114,70,
> 114,
> -
> 101,101,100,111,109,106,101,119,101,108,114,121,47,97,98,111,117,116,46,46,
> 115,
> -
> 101,97,114,99,104,108,101,103,101,110,100,115,105,115,32,109,97,100,101,109
> ,111,
> -
> 100,101,114,110,32,111,110,108,121,32,111,110,111,110,108,121,32,116,111,10
> 5,109
> -
> ,97,103,101,34,32,108,105,110,101,97,114,32,112,97,105,110,116,101,114,97,11
> 0,
> -
> 100,32,110,111,116,114,97,114,101,108,121,32,97,99,114,111,110,121,109,100,
> 101,
> -
> 108,105,118,101,114,115,104,111,114,116,101,114,48,48,38,97,109,112,59,97,1
> 15,32
> -
> ,109,97,110,121,119,105,100,116,104,61,34,47,42,32,60,33,91,67,116,105,116,1
> 08,
> -
> 101,32,61,111,102,32,116,104,101,32,108,111,119,101,115,116,32,112,105,99,1
> 07,
> -
> 101,100,32,101,115,99,97,112,101,100,117,115,101,115,32,111,102,112,101,111
> ,112,
> -
> 108,101,115,32,80,117,98,108,105,99,77,97,116,116,104,101,119,116,97,99,116,
> 105,
> -
> 99,115,100,97,109,97,103,101,100,119,97,121,32,102,111,114,108,97,119,115,3
> 2,111
> -
> ,102,101,97,115,121,32,116,111,32,119,105,110,100,111,119,115,116,114,111,1
> 10,
> -
> 103,32,32,115,105,109,112,108,101,125,99,97,116,99,104,40,115,101,118,101,1
> 10,
> -
> 116,104,105,110,102,111,98,111,120,119,101,110,116,32,116,111,112,97,105,11
> 0,116
> -
> ,101,100,99,105,116,105,122,101,110,73,32,100,111,110,39,116,114,101,116,11
> 4,101
> -
> ,97,116,46,32,83,111,109,101,32,119,119,46,34,41,59,10,98,111,109,98,105,110,
> 103
> -
> ,109,97,105,108,116,111,58,109,97,100,101,32,105,110,46,32,77,97,110,121,32,
> 99,
> -
> 97,114,114,105,101,115,124,124,123,125,59,119,105,119,111,114,107,32,111,10
> 2,115
> -
> ,121,110,111,110,121,109,100,101,102,101,97,116,115,102,97,118,111,114,101,
> 100,
> -
> 111,112,116,105,99,97,108,112,97,103,101,84,114,97,117,110,108,101,115,115,
> 32,
> -
> 115,101,110,100,105,110,103,108,101,102,116,34,62,60,99,111,109,83,99,111,1
> 14,65
> -
> ,108,108,32,116,104,101,106,81,117,101,114,121,46,116,111,117,114,105,115,1
> 16,67
> -
> ,108,97,115,115,105,99,102,97,108,115,101,34,32,87,105,108,104,101,108,109,1
> 15,
> -
> 117,98,117,114,98,115,103,101,110,117,105,110,101,98,105,115,104,111,112,11
> 5,46,
> -
> 115,112,108,105,116,40,103,108,111,98,97,108,32,102,111,108,108,111,119,115
> ,98,
> -
> 111,100,121,32,111,102,110,111,109,105,110,97,108,67,111,110,116,97,99,116,
> 115,
> -
> 101,99,117,108,97,114,108,101,102,116,32,116,111,99,104,105,101,102,108,121
> ,45,
> -
> 104,105,100,100,101,110,45,98,97,110,110,101,114,60,47,108,105,62,10,10,46,3
> 2,87
> -
> ,104,101,110,32,105,110,32,98,111,116,104,100,105,115,109,105,115,115,69,12
> 0,112
> -
> ,108,111,114,101,97,108,119,97,121,115,32,118,105,97,32,116,104,101,115,112,
> 97,
> -
> 195,177,111,108,119,101,108,102,97,114,101,114,117,108,105,110,103,32,97,11
> 4,114
> -
> ,97,110,103,101,99,97,112,116,97,105,110,104,105,115,32,115,111,110,114,117,
> 108,
> -
> 101,32,111,102,104,101,32,116,111,111,107,105,116,115,101,108,102,44,61,48,
> 38,97
> -
> ,109,112,59,40,99,97,108,108,101,100,115,97,109,112,108,101,115,116,111,32,1
> 09,
> -
> 97,107,101,99,111,109,47,112,97,103,77,97,114,116,105,110,32,75,101,110,110,
> 101,
> -
> 100,121,97,99,99,101,112,116,115,102,117,108,108,32,111,102,104,97,110,100,
> 108,
> -
> 101,100,66,101,115,105,100,101,115,47,47,45,45,62,60,47,97,98,108,101,32,116
> ,111
> -
> ,116,97,114,103,101,116,115,101,115,115,101,110,99,101,104,105,109,32,116,1
> 11,32
> -
> ,105,116,115,32,98,121,32,99,111,109,109,111,110,46,109,105,110,101,114,97,1
> 08,
> -
> 116,111,32,116,97,107,101,119,97,121,115,32,116,111,115,46,111,114,103,47,1
> 08,97
> -
> ,100,118,105,115,101,100,112,101,110,97,108,116,121,115,105,109,112,108,101
> ,58,
> -
> 105,102,32,116,104,101,121,76,101,116,116,101,114,115,97,32,115,104,111,114
> ,116,
> -
> 72,101,114,98,101,114,116,115,116,114,105,107,101,115,32,103,114,111,117,11
> 2,115
> -
> ,46,108,101,110,103,116,104,102,108,105,103,104,116,115,111,118,101,114,108
> ,97,
> -
> 112,115,108,111,119,108,121,32,108,101,115,115,101,114,32,115,111,99,105,97
> ,108,
> -
> 32,60,47,112,62,10,9,9,105,116,32,105,110,116,111,114,97,110,107,101,100,32,
> 114,
> -
> 97,116,101,32,111,102,117,108,62,13,10,32,32,97,116,116,101,109,112,116,112,
> 97,
> -
> 105,114,32,111,102,109,97,107,101,32,105,116,75,111,110,116,97,107,116,65,1
> 10,
> -
> 116,111,110,105,111,104,97,118,105,110,103,32,114,97,116,105,110,103,115,32
> ,97,
> -
> 99,116,105,118,101,115,116,114,101,97,109,115,116,114,97,112,112,101,100,34
> ,41,
> -
> 46,99,115,115,40,104,111,115,116,105,108,101,108,101,97,100,32,116,111,108,
> 105,
> -
> 116,116,108,101,32,103,114,111,117,112,115,44,80,105,99,116,117,114,101,45,
> 45,62
> -
> ,13,10,13,10,32,114,111,119,115,61,34,32,111,98,106,101,99,116,105,110,118,1
> 01,
> -
> 114,115,101,60,102,111,111,116,101,114,67,117,115,116,111,109,86,62,60,92,4
> 7,115
> -
> ,99,114,115,111,108,118,105,110,103,67,104,97,109,98,101,114,115,108,97,118,
> 101,
> -
> 114,121,119,111,117,110,100,101,100,119,104,101,114,101,97,115,33,61,32,39,
> 117,
> -
> 110,100,102,111,114,32,97,108,108,112,97,114,116,108,121,32,45,114,105,103,
> 104,
> -
> 116,58,65,114,97,98,105,97,110,98,97,99,107,101,100,32,99,101,110,116,117,11
> 4,
> -
> 121,117,110,105,116,32,111,102,109,111,98,105,108,101,45,69,117,114,111,112
> ,101,
> -
> 44,105,115,32,104,111,109,101,114,105,115,107,32,111,102,100,101,115,105,11
> 4,101
> -
> ,100,67,108,105,110,116,111,110,99,111,115,116,32,111,102,97,103,101,32,111,
> 102,
> -
> 32,98,101,99,111,109,101,32,110,111,110,101,32,111,102,112,38,113,117,111,1
> 16,59
> -
> ,77,105,100,100,108,101,32,101,97,100,39,41,91,48,67,114,105,116,105,99,115,
> 115,
> -
> 116,117,100,105,111,115,62,38,99,111,112,121,59,103,114,111,117,112,34,62,9
> 7,115
> -
> ,115,101,109,98,108,109,97,107,105,110,103,32,112,114,101,115,115,101,100,1
> 19,
> -
> 105,100,103,101,116,46,112,115,58,34,32,63,32,114,101,98,117,105,108,116,98,
> 121,
> -
> 32,115,111,109,101,70,111,114,109,101,114,32,101,100,105,116,111,114,115,10
> 0,101
> -
> ,108,97,121,101,100,67,97,110,111,110,105,99,104,97,100,32,116,104,101,112,1
> 17,
> -
> 115,104,105,110,103,99,108,97,115,115,61,34,98,117,116,32,97,114,101,112,97,
> 114,
> -
> 116,105,97,108,66,97,98,121,108,111,110,98,111,116,116,111,109,32,99,97,114,
> 114,
> -
> 105,101,114,67,111,109,109,97,110,100,105,116,115,32,117,115,101,65,115,32,
> 119,
> -
> 105,116,104,99,111,117,114,115,101,115,97,32,116,104,105,114,100,100,101,11
> 0,111
> -
> ,116,101,115,97,108,115,111,32,105,110,72,111,117,115,116,111,110,50,48,112,
> 120,
> -
> 59,34,62,97,99,99,117,115,101,100,100,111,117,98,108,101,32,103,111,97,108,3
> 2,
> -
> 111,102,70,97,109,111,117,115,32,41,46,98,105,110,100,40,112,114,105,101,11
> 5,116
> -
> ,115,32,79,110,108,105,110,101,105,110,32,74,117,108,121,115,116,32,43,32,34
> ,103
> -
> ,99,111,110,115,117,108,116,100,101,99,105,109,97,108,104,101,108,112,102,1
> 17,
> -
> 108,114,101,118,105,118,101,100,105,115,32,118,101,114,121,114,39,43,39,105
> ,112,
> -
> 116,108,111,115,105,110,103,32,102,101,109,97,108,101,115,105,115,32,97,108
> ,115,
> -
> 111,115,116,114,105,110,103,115,100,97,121,115,32,111,102,97,114,114,105,11
> 8,97,
> -
> 108,102,117,116,117,114,101,32,60,111,98,106,101,99,116,102,111,114,99,105,
> 110,
> -
> 103,83,116,114,105,110,103,40,34,32,47,62,10,9,9,104,101,114,101,32,105,115,
> 101,
> -
> 110,99,111,100,101,100,46,32,32,84,104,101,32,98,97,108,108,111,111,110,100,
> 111,
> -
> 110,101,32,98,121,47,99,111,109,109,111,110,98,103,99,111,108,111,114,108,9
> 7,119
> -
> ,32,111,102,32,73,110,100,105,97,110,97,97,118,111,105,100,101,100,98,117,11
> 6,32
> -
> ,116,104,101,50,112,120,32,51,112,120,106,113,117,101,114,121,46,97,102,116,
> 101,
> -
> 114,32,97,112,111,108,105,99,121,46,109,101,110,32,97,110,100,102,111,111,1
> 16,
> -
> 101,114,45,61,32,116,114,117,101,59,102,111,114,32,117,115,101,115,99,114,1
> 01,
> -
> 101,110,46,73,110,100,105,97,110,32,105,109,97,103,101,32,61,102,97,109,105,
> 108,
> -
> 121,44,104,116,116,112,58,47,47,32,38,110,98,115,112,59,100,114,105,118,101,
> 114,
> -
> 115,101,116,101,114,110,97,108,115,97,109,101,32,97,115,110,111,116,105,99,
> 101,
> -
> 100,118,105,101,119,101,114,115,125,41,40,41,59,10,32,105,115,32,109,111,11
> 4,101
> -
> ,115,101,97,115,111,110,115,102,111,114,109,101,114,32,116,104,101,32,110,1
> 01,
> -
> 119,105,115,32,106,117,115,116,99,111,110,115,101,110,116,32,83,101,97,114,
> 99,
> -
> 104,119,97,115,32,116,104,101,119,104,121,32,116,104,101,115,104,105,112,11
> 2,101
> -
> ,100,98,114,62,60,98,114,62,119,105,100,116,104,58,32,104,101,105,103,104,11
> 6,61
> -
> ,109,97,100,101,32,111,102,99,117,105,115,105,110,101,105,115,32,116,104,97,
> 116,
> -
> 97,32,118,101,114,121,32,65,100,109,105,114,97,108,32,102,105,120,101,100,5
> 9,110
> -
> ,111,114,109,97,108,32,77,105,115,115,105,111,110,80,114,101,115,115,44,32,1
> 11,
> -
> 110,116,97,114,105,111,99,104,97,114,115,101,116,116,114,121,32,116,111,32,
> 105,
> -
> 110,118,97,100,101,100,61,34,116,114,117,101,34,115,112,97,99,105,110,103,1
> 05,
> -
> 115,32,109,111,115,116,97,32,109,111,114,101,32,116,111,116,97,108,108,121,
> 102,
> -
> 97,108,108,32,111,102,125,41,59,13,10,32,32,105,109,109,101,110,115,101,116,
> 105,
> -
> 109,101,32,105,110,115,101,116,32,111,117,116,115,97,116,105,115,102,121,11
> 6,111
> -
> ,32,102,105,110,100,100,111,119,110,32,116,111,108,111,116,32,111,102,32,80,
> 108,
> -
> 97,121,101,114,115,105,110,32,74,117,110,101,113,117,97,110,116,117,109,110
> ,111,
> -
> 116,32,116,104,101,116,105,109,101,32,116,111,100,105,115,116,97,110,116,70
> ,105,
> -
> 110,110,105,115,104,115,114,99,32,61,32,40,115,105,110,103,108,101,32,104,1
> 01,
> -
> 108,112,32,111,102,71,101,114,109,97,110,32,108,97,119,32,97,110,100,108,97,
> 98,
> -
> 101,108,101,100,102,111,114,101,115,116,115,99,111,111,107,105,110,103,115,
> 112,
> -
> 97,99,101,34,62,104,101,97,100,101,114,45,119,101,108,108,32,97,115,83,116,9
> 7,
> -
> 110,108,101,121,98,114,105,100,103,101,115,47,103,108,111,98,97,108,67,114,
> 111,
> -
> 97,116,105,97,32,65,98,111,117,116,32,91,48,93,59,10,32,32,105,116,44,32,97,1
> 10,
> -
> 100,103,114,111,117,112,101,100,98,101,105,110,103,32,97,41,123,116,104,114
> ,111,
> -
> 119,104,101,32,109,97,100,101,108,105,103,104,116,101,114,101,116,104,105,9
> 9,97,
> -
> 108,70,70,70,70,70,70,34,98,111,116,116,111,109,34,108,105,107,101,32,97,32,
> 101,
> -
> 109,112,108,111,121,115,108,105,118,101,32,105,110,97,115,32,115,101,101,11
> 0,112
> -
> ,114,105,110,116,101,114,109,111,115,116,32,111,102,117,98,45,108,105,110,1
> 07,
> -
> 114,101,106,101,99,116,115,97,110,100,32,117,115,101,105,109,97,103,101,34,
> 62,
> -
> 115,117,99,99,101,101,100,102,101,101,100,105,110,103,78,117,99,108,101,97,
> 114,
> -
> 105,110,102,111,114,109,97,116,111,32,104,101,108,112,87,111,109,101,110,39
> ,115,
> -
> 78,101,105,116,104,101,114,77,101,120,105,99,97,110,112,114,111,116,101,105
> ,110,
> -
> 60,116,97,98,108,101,32,98,121,32,109,97,110,121,104,101,97,108,116,104,121,
> 108,
> -
> 97,119,115,117,105,116,100,101,118,105,115,101,100,46,112,117,115,104,40,12
> 3,115
> -
> ,101,108,108,101,114,115,115,105,109,112,108,121,32,84,104,114,111,117,103,
> 104,
> -
> 46,99,111,111,107,105,101,32,73,109,97,103,101,40,111,108,100,101,114,34,62,
> 117,
> -
> 115,46,106,115,34,62,32,83,105,110,99,101,32,117,110,105,118,101,114,115,10
> 8,97,
> -
> 114,103,101,114,32,111,112,101,110,32,116,111,33,45,45,32,101,110,100,108,1
> 05,
> -
> 101,115,32,105,110,39,93,41,59,13,10,32,32,109,97,114,107,101,116,119,104,11
> 1,32
> -
> ,105,115,32,40,34,68,79,77,67,111,109,97,110,97,103,101,100,111,110,101,32,1
> 02,
> -
> 111,114,116,121,112,101,111,102,32,75,105,110,103,100,111,109,112,114,111,1
> 02,
> -
> 105,116,115,112,114,111,112,111,115,101,116,111,32,115,104,111,119,99,101,1
> 10,
> -
> 116,101,114,59,109,97,100,101,32,105,116,100,114,101,115,115,101,100,119,10
> 1,114
> -
> ,101,32,105,110,109,105,120,116,117,114,101,112,114,101,99,105,115,101,97,1
> 14,
> -
> 105,115,105,110,103,115,114,99,32,61,32,39,109,97,107,101,32,97,32,115,101,9
> 9,
> -
> 117,114,101,100,66,97,112,116,105,115,116,118,111,116,105,110,103,32,10,9,9,
> 118,
> -
> 97,114,32,77,97,114,99,104,32,50,103,114,101,119,32,117,112,67,108,105,109,9
> 7,
> -
> 116,101,46,114,101,109,111,118,101,115,107,105,108,108,101,100,119,97,121,3
> 2,116
> -
> ,104,101,60,47,104,101,97,100,62,102,97,99,101,32,111,102,97,99,116,105,110,
> 103,
> -
> 32,114,105,103,104,116,34,62,116,111,32,119,111,114,107,114,101,100,117,99,
> 101,
> -
> 115,104,97,115,32,104,97,100,101,114,101,99,116,101,100,115,104,111,119,40,
> 41,59
> -
> ,97,99,116,105,111,110,61,98,111,111,107,32,111,102,97,110,32,97,114,101,97,
> 61,
> -
> 61,32,34,104,116,116,60,104,101,97,100,101,114,10,60,104,116,109,108,62,99,1
> 11,
> -
> 110,102,111,114,109,102,97,99,105,110,103,32,99,111,111,107,105,101,46,114,
> 101,
> -
> 108,121,32,111,110,104,111,115,116,101,100,32,46,99,117,115,116,111,109,104
> ,101,
> -
> 32,119,101,110,116,98,117,116,32,102,111,114,115,112,114,101,97,100,32,70,9
> 7,109
> -
> ,105,108,121,32,97,32,109,101,97,110,115,111,117,116,32,116,104,101,102,111,
> 114,
> -
> 117,109,115,46,102,111,111,116,97,103,101,34,62,77,111,98,105,108,67,108,10
> 1,109
> -
> ,101,110,116,115,34,32,105,100,61,34,97,115,32,104,105,103,104,105,110,116,1
> 01,
> -
> 110,115,101,45,45,62,60,33,45,45,102,101,109,97,108,101,32,105,115,32,115,10
> 1,
> -
> 101,110,105,109,112,108,105,101,100,115,101,116,32,116,104,101,97,32,115,11
> 6,97,
> -
> 116,101,97,110,100,32,104,105,115,102,97,115,116,101,115,116,98,101,115,105
> ,100,
> -
> 101,115,98,117,116,116,111,110,95,98,111,117,110,100,101,100,34,62,60,105,1
> 09,
> -
> 103,32,73,110,102,111,98,111,120,101,118,101,110,116,115,44,97,32,121,111,1
> 17,
> -
> 110,103,97,110,100,32,97,114,101,78,97,116,105,118,101,32,99,104,101,97,112,
> 101,
> -
> 114,84,105,109,101,111,117,116,97,110,100,32,104,97,115,101,110,103,105,110
> ,101,
> -
> 115,119,111,110,32,116,104,101,40,109,111,115,116,108,121,114,105,103,104,1
> 16,58
> -
> ,32,102,105,110,100,32,97,32,45,98,111,116,116,111,109,80,114,105,110,99,101
> ,32,
> -
> 97,114,101,97,32,111,102,109,111,114,101,32,111,102,115,101,97,114,99,104,9
> 5,110
> -
> ,97,116,117,114,101,44,108,101,103,97,108,108,121,112,101,114,105,111,100,4
> 4,108
> -
> ,97,110,100,32,111,102,111,114,32,119,105,116,104,105,110,100,117,99,101,10
> 0,112
> -
> ,114,111,118,105,110,103,109,105,115,115,105,108,101,108,111,99,97,108,108,
> 121,
> -
> 65,103,97,105,110,115,116,116,104,101,32,119,97,121,107,38,113,117,111,116,
> 59,
> -
> 112,120,59,34,62,13,10,112,117,115,104,101,100,32,97,98,97,110,100,111,110,1
> 10,
> -
> 117,109,101,114,97,108,67,101,114,116,97,105,110,73,110,32,116,104,105,115,
> 109,
> -
> 111,114,101,32,105,110,111,114,32,115,111,109,101,110,97,109,101,32,105,115
> ,97,
> -
> 110,100,44,32,105,110,99,114,111,119,110,101,100,73,83,66,78,32,48,45,99,114
> ,101
> -
> ,97,116,101,115,79,99,116,111,98,101,114,109,97,121,32,110,111,116,99,101,11
> 0,
> -
> 116,101,114,32,108,97,116,101,32,105,110,68,101,102,101,110,99,101,101,110,
> 97,99
> -
> ,116,101,100,119,105,115,104,32,116,111,98,114,111,97,100,108,121,99,111,11
> 1,108
> -
> ,105,110,103,111,110,108,111,97,100,61,105,116,46,32,84,104,101,114,101,99,1
> 11,
> -
> 118,101,114,77,101,109,98,101,114,115,104,101,105,103,104,116,32,97,115,115
> ,117,
> -
> 109,101,115,60,104,116,109,108,62,10,112,101,111,112,108,101,46,105,110,32,
> 111,
> -
> 110,101,32,61,119,105,110,100,111,119,102,111,111,116,101,114,95,97,32,103,
> 111,
> -
> 111,100,32,114,101,107,108,97,109,97,111,116,104,101,114,115,44,116,111,32,
> 116,
> -
> 104,105,115,95,99,111,111,107,105,101,112,97,110,101,108,34,62,76,111,110,1
> 00,
> -
> 111,110,44,100,101,102,105,110,101,115,99,114,117,115,104,101,100,98,97,112
> ,116,
> -
> 105,115,109,99,111,97,115,116,97,108,115,116,97,116,117,115,32,116,105,116,
> 108,
> -
> 101,34,32,109,111,118,101,32,116,111,108,111,115,116,32,105,110,98,101,116,
> 116,
> -
> 101,114,32,105,109,112,108,105,101,115,114,105,118,97,108,114,121,115,101,1
> 14,
> -
> 118,101,114,115,32,83,121,115,116,101,109,80,101,114,104,97,112,115,101,115
> ,32,
> -
> 97,110,100,32,99,111,110,116,101,110,100,102,108,111,119,105,110,103,108,97
> ,115,
> -
> 116,101,100,32,114,105,115,101,32,105,110,71,101,110,101,115,105,115,118,10
> 5,101
> -
> ,119,32,111,102,114,105,115,105,110,103,32,115,101,101,109,32,116,111,98,11
> 7,116
> -
> ,32,105,110,32,98,97,99,107,105,110,103,104,101,32,119,105,108,108,103,105,1
> 18,
> -
> 101,110,32,97,103,105,118,105,110,103,32,99,105,116,105,101,115,46,102,108,
> 111,
> -
> 119,32,111,102,32,76,97,116,101,114,32,97,108,108,32,98,117,116,72,105,103,1
> 04,
> -
> 119,97,121,111,110,108,121,32,98,121,115,105,103,110,32,111,102,104,101,32,
> 100,
> -
> 111,101,115,100,105,102,102,101,114,115,98,97,116,116,101,114,121,38,97,109
> ,112,
> -
> 59,108,97,115,105,110,103,108,101,115,116,104,114,101,97,116,115,105,110,11
> 6,101
> -
> ,103,101,114,116,97,107,101,32,111,110,114,101,102,117,115,101,100,99,97,10
> 8,108
> -
> ,101,100,32,61,85,83,38,97,109,112,83,101,101,32,116,104,101,110,97,116,105,
> 118,
> -
> 101,115,98,121,32,116,104,105,115,115,121,115,116,101,109,46,104,101,97,100
> ,32,
> -
> 111,102,58,104,111,118,101,114,44,108,101,115,98,105,97,110,115,117,114,110
> ,97,
> -
> 109,101,97,110,100,32,97,108,108,99,111,109,109,111,110,47,104,101,97,100,1
> 01,
> -
> 114,95,95,112,97,114,97,109,115,72,97,114,118,97,114,100,47,112,105,120,101,
> 108,
> -
> 46,114,101,109,111,118,97,108,115,111,32,108,111,110,103,114,111,108,101,32
> ,111,
> -
> 102,106,111,105,110,116,108,121,115,107,121,115,99,114,97,85,110,105,99,111
> ,100,
> -
> 101,98,114,32,47,62,13,10,65,116,108,97,110,116,97,110,117,99,108,101,117,11
> 5,67
> -
> ,111,117,110,116,121,44,112,117,114,101,108,121,32,99,111,117,110,116,34,62,
> 101,
> -
> 97,115,105,108,121,32,98,117,105,108,100,32,97,111,110,99,108,105,99,107,97,
> 32,
> -
> 103,105,118,101,110,112,111,105,110,116,101,114,104,38,113,117,111,116,59,1
> 01,
> -
> 118,101,110,116,115,32,101,108,115,101,32,123,10,100,105,116,105,111,110,11
> 5,110
> -
> ,111,119,32,116,104,101,44,32,119,105,116,104,32,109,97,110,32,119,104,111,1
> 11,
> -
> 114,103,47,87,101,98,111,110,101,32,97,110,100,99,97,118,97,108,114,121,72,1
> 01,
> -
> 32,100,105,101,100,115,101,97,116,116,108,101,48,48,44,48,48,48,32,123,119,1
> 05,
> -
> 110,100,111,119,104,97,118,101,32,116,111,105,102,40,119,105,110,100,97,110
> ,100,
> -
> 32,105,116,115,115,111,108,101,108,121,32,109,38,113,117,111,116,59,114,101
> ,110,
> -
> 101,119,101,100,68,101,116,114,111,105,116,97,109,111,110,103,115,116,101,1
> 05,
> -
> 116,104,101,114,32,116,104,101,109,32,105,110,83,101,110,97,116,111,114,85,
> 115,
> -
> 60,47,97,62,60,75,105,110,103,32,111,102,70,114,97,110,99,105,115,45,112,114
> ,111
> -
> ,100,117,99,104,101,32,117,115,101,100,97,114,116,32,97,110,100,104,105,109,
> 32,
> -
> 97,110,100,117,115,101,100,32,98,121,115,99,111,114,105,110,103,97,116,32,1
> 04,
> -
> 111,109,101,116,111,32,104,97,118,101,114,101,108,97,116,101,115,105,98,105
> ,108,
> -
> 105,116,121,102,97,99,116,105,111,110,66,117,102,102,97,108,111,108,105,110
> ,107,
> -
> 34,62,60,119,104,97,116,32,104,101,102,114,101,101,32,116,111,67,105,116,12
> 1,32,
> -
> 111,102,99,111,109,101,32,105,110,115,101,99,116,111,114,115,99,111,117,110
> ,116,
> -
> 101,100,111,110,101,32,100,97,121,110,101,114,118,111,117,115,115,113,117,9
> 7,114
> -
> ,101,32,125,59,105,102,40,103,111,105,110,32,119,104,97,116,105,109,103,34,3
> 2,97
> -
> ,108,105,115,32,111,110,108,121,115,101,97,114,99,104,47,116,117,101,115,10
> 0,97,
> -
> 121,108,111,111,115,101,108,121,83,111,108,111,109,111,110,115,101,120,117,
> 97,
> -
> 108,32,45,32,60,97,32,104,114,109,101,100,105,117,109,34,68,79,32,78,79,84,3
> 2,70
> -
> ,114,97,110,99,101,44,119,105,116,104,32,97,32,119,97,114,32,97,110,100,115,
> 101,
> -
> 99,111,110,100,32,116,97,107,101,32,97,32,62,13,10,13,10,13,10,109,97,114,10
> 7,
> -
> 101,116,46,104,105,103,104,119,97,121,100,111,110,101,32,105,110,99,116,105
> ,118,
> -
> 105,116,121,34,108,97,115,116,34,62,111,98,108,105,103,101,100,114,105,115,
> 101,
> -
> 32,116,111,34,117,110,100,101,102,105,109,97,100,101,32,116,111,32,69,97,11
> 4,108
> -
> ,121,32,112,114,97,105,115,101,100,105,110,32,105,116,115,32,102,111,114,32,
> 104,
> -
> 105,115,97,116,104,108,101,116,101,74,117,112,105,116,101,114,89,97,104,111
> ,111,
> -
> 33,32,116,101,114,109,101,100,32,115,111,32,109,97,110,121,114,101,97,108,1
> 08,
> -
> 121,32,115,46,32,84,104,101,32,97,32,119,111,109,97,110,63,118,97,108,117,10
> 1,61
> -
> ,100,105,114,101,99,116,32,114,105,103,104,116,34,32,98,105,99,121,99,108,10
> 1,97
> -
> ,99,105,110,103,61,34,100,97,121,32,97,110,100,115,116,97,116,105,110,103,82
> ,97,
> -
> 116,104,101,114,44,104,105,103,104,101,114,32,79,102,102,105,99,101,32,97,1
> 14,
> -
> 101,32,110,111,119,116,105,109,101,115,44,32,119,104,101,110,32,97,32,112,9
> 7,121
> -
> ,32,102,111,114,111,110,32,116,104,105,115,45,108,105,110,107,34,62,59,98,11
> 1,
> -
> 114,100,101,114,97,114,111,117,110,100,32,97,110,110,117,97,108,32,116,104,
> 101,
> -
> 32,78,101,119,112,117,116,32,116,104,101,46,99,111,109,34,32,116,97,107,105,
> 110,
> -
> 32,116,111,97,32,98,114,105,101,102,40,105,110,32,116,104,101,103,114,111,1
> 17,
> -
> 112,115,46,59,32,119,105,100,116,104,101,110,122,121,109,101,115,115,105,10
> 9,112
> -
> ,108,101,32,105,110,32,108,97,116,101,123,114,101,116,117,114,110,116,104,1
> 01,
> -
> 114,97,112,121,97,32,112,111,105,110,116,98,97,110,110,105,110,103,105,110,
> 107,
> -
> 115,34,62,10,40,41,59,34,32,114,101,97,32,112,108,97,99,101,92,117,48,48,51,6
> 7,
> -
> 97,97,98,111,117,116,32,97,116,114,62,13,10,9,9,99,99,111,117,110,116,32,103,
> 105
> -
> ,118,101,115,32,97,60,83,67,82,73,80,84,82,97,105,108,119,97,121,116,104,101,
> 109
> -
> ,101,115,47,116,111,111,108,98,111,120,66,121,73,100,40,34,120,104,117,109,9
> 7,
> -
> 110,115,44,119,97,116,99,104,101,115,105,110,32,115,111,109,101,32,105,102,
> 32,40
> -
> ,119,105,99,111,109,105,110,103,32,102,111,114,109,97,116,115,32,85,110,100,
> 101,
> -
> 114,32,98,117,116,32,104,97,115,104,97,110,100,101,100,32,109,97,100,101,32,
> 98,
> -
> 121,116,104,97,110,32,105,110,102,101,97,114,32,111,102,100,101,110,111,116
> ,101,
> -
> 100,47,105,102,114,97,109,101,108,101,102,116,32,105,110,118,111,108,116,97
> ,103,
> -
> 101,105,110,32,101,97,99,104,97,38,113,117,111,116,59,98,97,115,101,32,111,1
> 02,
> -
> 73,110,32,109,97,110,121,117,110,100,101,114,103,111,114,101,103,105,109,10
> 1,115
> -
> ,97,99,116,105,111,110,32,60,47,112,62,13,10,60,117,115,116,111,109,86,97,59,
> 38,
> -
> 103,116,59,60,47,105,109,112,111,114,116,115,111,114,32,116,104,97,116,109,
> 111,
> -
> 115,116,108,121,32,38,97,109,112,59,114,101,32,115,105,122,101,61,34,60,47,9
> 7,62
> -
> ,60,47,104,97,32,99,108,97,115,115,112,97,115,115,105,118,101,72,111,115,116
> ,32,
> -
> 61,32,87,104,101,116,104,101,114,102,101,114,116,105,108,101,86,97,114,105,
> 111,
> -
> 117,115,61,91,93,59,40,102,117,99,97,109,101,114,97,115,47,62,60,47,116,100,
> 62,
> -
> 97,99,116,115,32,97,115,73,110,32,115,111,109,101,62,13,10,13,10,60,33,111,1
> 14,
> -
> 103,97,110,105,115,32,60,98,114,32,47,62,66,101,105,106,105,110,103,99,97,11
> 6,97
> -
> ,108,195,160,100,101,117,116,115,99,104,101,117,114,111,112,101,117,101,117
> ,115,
> -
> 107,97,114,97,103,97,101,105,108,103,101,115,118,101,110,115,107,97,101,115
> ,112,
> -
> 97,195,177,97,109,101,110,115,97,106,101,117,115,117,97,114,105,111,116,114
> ,97,
> -
> 98,97,106,111,109,195,169,120,105,99,111,112,195,161,103,105,110,97,115,105
> ,101,
> -
> 109,112,114,101,115,105,115,116,101,109,97,111,99,116,117,98,114,101,100,11
> 7,114
> -
> ,97,110,116,101,97,195,177,97,100,105,114,101,109,112,114,101,115,97,109,11
> 1,109
> -
> ,101,110,116,111,110,117,101,115,116,114,111,112,114,105,109,101,114,97,116
> ,114,
> -
> 97,118,195,169,115,103,114,97,99,105,97,115,110,117,101,115,116,114,97,112,
> 114,
> -
> 111,99,101,115,111,101,115,116,97,100,111,115,99,97,108,105,100,97,100,112,
> 101,
> -
> 114,115,111,110,97,110,195,186,109,101,114,111,97,99,117,101,114,100,111,10
> 9,195
> -
> ,186,115,105,99,97,109,105,101,109,98,114,111,111,102,101,114,116,97,115,97,
> 108,
> -
> 103,117,110,111,115,112,97,195,173,115,101,115,101,106,101,109,112,108,111,
> 100,
> -
> 101,114,101,99,104,111,97,100,101,109,195,161,115,112,114,105,118,97,100,11
> 1,97,
> -
> 103,114,101,103,97,114,101,110,108,97,99,101,115,112,111,115,105,98,108,101
> ,104,
> -
> 111,116,101,108,101,115,115,101,118,105,108,108,97,112,114,105,109,101,114,
> 111,
> -
> 195,186,108,116,105,109,111,101,118,101,110,116,111,115,97,114,99,104,105,1
> 18,
> -
> 111,99,117,108,116,117,114,97,109,117,106,101,114,101,115,101,110,116,114,9
> 7,100
> -
> ,97,97,110,117,110,99,105,111,101,109,98,97,114,103,111,109,101,114,99,97,10
> 0,
> -
> 111,103,114,97,110,100,101,115,101,115,116,117,100,105,111,109,101,106,111,
> 114,
> -
> 101,115,102,101,98,114,101,114,111,100,105,115,101,195,177,111,116,117,114,
> 105,
> -
> 115,109,111,99,195,179,100,105,103,111,112,111,114,116,97,100,97,101,115,11
> 2,97,
> -
> 99,105,111,102,97,109,105,108,105,97,97,110,116,111,110,105,111,112,101,114
> ,109,
> -
> 105,116,101,103,117,97,114,100,97,114,97,108,103,117,110,97,115,112,114,101
> ,99,
> -
> 105,111,115,97,108,103,117,105,101,110,115,101,110,116,105,100,111,118,105,
> 115,
> -
> 105,116,97,115,116,195,173,116,117,108,111,99,111,110,111,99,101,114,115,10
> 1,103
> -
> ,117,110,100,111,99,111,110,115,101,106,111,102,114,97,110,99,105,97,109,10
> 5,110
> -
> ,117,116,111,115,115,101,103,117,110,100,97,116,101,110,101,109,111,115,101
> ,102,
> -
> 101,99,116,111,115,109,195,161,108,97,103,97,115,101,115,105,195,179,110,11
> 4,101
> -
> ,118,105,115,116,97,103,114,97,110,97,100,97,99,111,109,112,114,97,114,105,1
> 10,
> -
> 103,114,101,115,111,103,97,114,99,195,173,97,97,99,99,105,195,179,110,101,9
> 9,117
> -
> ,97,100,111,114,113,117,105,101,110,101,115,105,110,99,108,117,115,111,100,
> 101,
> -
> 98,101,114,195,161,109,97,116,101,114,105,97,104,111,109,98,114,101,115,109
> ,117,
> -
> 101,115,116,114,97,112,111,100,114,195,173,97,109,97,195,177,97,110,97,195,
> 186,
> -
> 108,116,105,109,97,101,115,116,97,109,111,115,111,102,105,99,105,97,108,116
> ,97,
> -
> 109,98,105,101,110,110,105,110,103,195,186,110,115,97,108,117,100,111,115,1
> 12,
> -
> 111,100,101,109,111,115,109,101,106,111,114,97,114,112,111,115,105,116,105,
> 111,
> -
> 110,98,117,115,105,110,101,115,115,104,111,109,101,112,97,103,101,115,101,9
> 9,117
> -
> ,114,105,116,121,108,97,110,103,117,97,103,101,115,116,97,110,100,97,114,10
> 0,99,
> -
> 97,109,112,97,105,103,110,102,101,97,116,117,114,101,115,99,97,116,101,103,
> 111,
> -
> 114,121,101,120,116,101,114,110,97,108,99,104,105,108,100,114,101,110,114,1
> 01,
> -
> 115,101,114,118,101,100,114,101,115,101,97,114,99,104,101,120,99,104,97,110
> ,103,
> -
> 101,102,97,118,111,114,105,116,101,116,101,109,112,108,97,116,101,109,105,1
> 08,
> -
> 105,116,97,114,121,105,110,100,117,115,116,114,121,115,101,114,118,105,99,1
> 01,
> -
> 115,109,97,116,101,114,105,97,108,112,114,111,100,117,99,116,115,122,45,105
> ,110,
> -
> 100,101,120,58,99,111,109,109,101,110,116,115,115,111,102,116,119,97,114,10
> 1,99,
> -
> 111,109,112,108,101,116,101,99,97,108,101,110,100,97,114,112,108,97,116,102
> ,111,
> -
> 114,109,97,114,116,105,99,108,101,115,114,101,113,117,105,114,101,100,109,1
> 11,
> -
> 118,101,109,101,110,116,113,117,101,115,116,105,111,110,98,117,105,108,100,
> 105,
> -
> 110,103,112,111,108,105,116,105,99,115,112,111,115,115,105,98,108,101,114,1
> 01,
> -
> 108,105,103,105,111,110,112,104,121,115,105,99,97,108,102,101,101,100,98,97
> ,99,
> -
> 107,114,101,103,105,115,116,101,114,112,105,99,116,117,114,101,115,100,105,
> 115,
> -
> 97,98,108,101,100,112,114,111,116,111,99,111,108,97,117,100,105,101,110,99,
> 101,
> -
> 115,101,116,116,105,110,103,115,97,99,116,105,118,105,116,121,101,108,101,1
> 09,
> -
> 101,110,116,115,108,101,97,114,110,105,110,103,97,110,121,116,104,105,110,1
> 03,97
> -
> ,98,115,116,114,97,99,116,112,114,111,103,114,101,115,115,111,118,101,114,1
> 18,
> -
> 105,101,119,109,97,103,97,122,105,110,101,101,99,111,110,111,109,105,99,116
> ,114,
> -
> 97,105,110,105,110,103,112,114,101,115,115,117,114,101,118,97,114,105,111,1
> 17,
> -
> 115,32,60,115,116,114,111,110,103,62,112,114,111,112,101,114,116,121,115,10
> 4,111
> -
> ,112,112,105,110,103,116,111,103,101,116,104,101,114,97,100,118,97,110,99,1
> 01,
> -
> 100,98,101,104,97,118,105,111,114,100,111,119,110,108,111,97,100,102,101,97
> ,116,
> -
> 117,114,101,100,102,111,111,116,98,97,108,108,115,101,108,101,99,116,101,10
> 0,76,
> -
> 97,110,103,117,97,103,101,100,105,115,116,97,110,99,101,114,101,109,101,109
> ,98,
> -
> 101,114,116,114,97,99,107,105,110,103,112,97,115,115,119,111,114,100,109,11
> 1,100
> -
> ,105,102,105,101,100,115,116,117,100,101,110,116,115,100,105,114,101,99,116
> ,108,
> -
> 121,102,105,103,104,116,105,110,103,110,111,114,116,104,101,114,110,100,97,
> 116,
> -
> 97,98,97,115,101,102,101,115,116,105,118,97,108,98,114,101,97,107,105,110,1
> 03,
> -
> 108,111,99,97,116,105,111,110,105,110,116,101,114,110,101,116,100,114,111,1
> 12,
> -
> 100,111,119,110,112,114,97,99,116,105,99,101,101,118,105,100,101,110,99,101
> ,102,
> -
> 117,110,99,116,105,111,110,109,97,114,114,105,97,103,101,114,101,115,112,11
> 1,110
> -
> ,115,101,112,114,111,98,108,101,109,115,110,101,103,97,116,105,118,101,112,
> 114,
> -
> 111,103,114,97,109,115,97,110,97,108,121,115,105,115,114,101,108,101,97,115
> ,101,
> -
> 100,98,97,110,110,101,114,34,62,112,117,114,99,104,97,115,101,112,111,108,1
> 05,99
> -
> ,105,101,115,114,101,103,105,111,110,97,108,99,114,101,97,116,105,118,101,9
> 7,114
> -
> ,103,117,109,101,110,116,98,111,111,107,109,97,114,107,114,101,102,101,114,
> 114,
> -
> 101,114,99,104,101,109,105,99,97,108,100,105,118,105,115,105,111,110,99,97,
> 108,
> -
> 108,98,97,99,107,115,101,112,97,114,97,116,101,112,114,111,106,101,99,116,1
> 15,99
> -
> ,111,110,102,108,105,99,116,104,97,114,100,119,97,114,101,105,110,116,101,1
> 14,
> -
> 101,115,116,100,101,108,105,118,101,114,121,109,111,117,110,116,97,105,110,
> 111,
> -
> 98,116,97,105,110,101,100,61,32,102,97,108,115,101,59,102,111,114,40,118,97,
> 114,
> -
> 32,97,99,99,101,112,116,101,100,99,97,112,97,99,105,116,121,99,111,109,112,1
> 17,
> -
> 116,101,114,105,100,101,110,116,105,116,121,97,105,114,99,114,97,102,116,10
> 1,109
> -
> ,112,108,111,121,101,100,112,114,111,112,111,115,101,100,100,111,109,101,11
> 5,116
> -
> ,105,99,105,110,99,108,117,100,101,115,112,114,111,118,105,100,101,100,104,
> 111,
> -
> 115,112,105,116,97,108,118,101,114,116,105,99,97,108,99,111,108,108,97,112,
> 115,
> -
> 101,97,112,112,114,111,97,99,104,112,97,114,116,110,101,114,115,108,111,103
> ,111,
> -
> 34,62,60,97,100,97,117,103,104,116,101,114,97,117,116,104,111,114,34,32,99,1
> 17,
> -
> 108,116,117,114,97,108,102,97,109,105,108,105,101,115,47,105,109,97,103,101
> ,115,
> -
> 47,97,115,115,101,109,98,108,121,112,111,119,101,114,102,117,108,116,101,97
> ,99,
> -
> 104,105,110,103,102,105,110,105,115,104,101,100,100,105,115,116,114,105,99,
> 116,
> -
> 99,114,105,116,105,99,97,108,99,103,105,45,98,105,110,47,112,117,114,112,11
> 1,115
> -
> ,101,115,114,101,113,117,105,114,101,115,101,108,101,99,116,105,111,110,98,
> 101,
> -
> 99,111,109,105,110,103,112,114,111,118,105,100,101,115,97,99,97,100,101,109
> ,105,
> -
> 99,101,120,101,114,99,105,115,101,97,99,116,117,97,108,108,121,109,101,100,
> 105,
> -
> 99,105,110,101,99,111,110,115,116,97,110,116,97,99,99,105,100,101,110,116,7
> 7,97,
> -
> 103,97,122,105,110,101,100,111,99,117,109,101,110,116,115,116,97,114,116,10
> 5,110
> -
> ,103,98,111,116,116,111,109,34,62,111,98,115,101,114,118,101,100,58,32,38,11
> 3,
> -
> 117,111,116,59,101,120,116,101,110,100,101,100,112,114,101,118,105,111,117,
> 115,
> -
> 83,111,102,116,119,97,114,101,99,117,115,116,111,109,101,114,100,101,99,105
> ,115,
> -
> 105,111,110,115,116,114,101,110,103,116,104,100,101,116,97,105,108,101,100,
> 115,
> -
> 108,105,103,104,116,108,121,112,108,97,110,110,105,110,103,116,101,120,116,
> 97,
> -
> 114,101,97,99,117,114,114,101,110,99,121,101,118,101,114,121,111,110,101,11
> 5,116
> -
> ,114,97,105,103,104,116,116,114,97,110,115,102,101,114,112,111,115,105,116,
> 105,
> -
> 118,101,112,114,111,100,117,99,101,100,104,101,114,105,116,97,103,101,115,1
> 04,
> -
> 105,112,112,105,110,103,97,98,115,111,108,117,116,101,114,101,99,101,105,11
> 8,101
> -
> ,100,114,101,108,101,118,97,110,116,98,117,116,116,111,110,34,32,118,105,11
> 1,108
> -
> ,101,110,99,101,97,110,121,119,104,101,114,101,98,101,110,101,102,105,116,1
> 15,
> -
> 108,97,117,110,99,104,101,100,114,101,99,101,110,116,108,121,97,108,108,105
> ,97,
> -
> 110,99,101,102,111,108,108,111,119,101,100,109,117,108,116,105,112,108,101,
> 98,
> -
> 117,108,108,101,116,105,110,105,110,99,108,117,100,101,100,111,99,99,117,11
> 4,114
> -
> ,101,100,105,110,116,101,114,110,97,108,36,40,116,104,105,115,41,46,114,101,
> 112,
> -
> 117,98,108,105,99,62,60,116,114,62,60,116,100,99,111,110,103,114,101,115,11
> 5,114
> -
> ,101,99,111,114,100,101,100,117,108,116,105,109,97,116,101,115,111,108,117,
> 116,
> -
> 105,111,110,60,117,108,32,105,100,61,34,100,105,115,99,111,118,101,114,72,1
> 11,
> -
> 109,101,60,47,97,62,119,101,98,115,105,116,101,115,110,101,116,119,111,114,
> 107,
> -
> 115,97,108,116,104,111,117,103,104,101,110,116,105,114,101,108,121,109,101,
> 109,
> -
> 111,114,105,97,108,109,101,115,115,97,103,101,115,99,111,110,116,105,110,11
> 7,101
> -
> ,97,99,116,105,118,101,34,62,115,111,109,101,119,104,97,116,118,105,99,116,1
> 11,
> -
> 114,105,97,87,101,115,116,101,114,110,32,32,116,105,116,108,101,61,34,76,11
> 1,99,
> -
> 97,116,105,111,110,99,111,110,116,114,97,99,116,118,105,115,105,116,111,114
> ,115,
> -
> 68,111,119,110,108,111,97,100,119,105,116,104,111,117,116,32,114,105,103,10
> 4,116
> -
> ,34,62,10,109,101,97,115,117,114,101,115,119,105,100,116,104,32,61,32,118,97
> ,114
> -
> ,105,97,98,108,101,105,110,118,111,108,118,101,100,118,105,114,103,105,110,
> 105,
> -
> 97,110,111,114,109,97,108,108,121,104,97,112,112,101,110,101,100,97,99,99,1
> 11,
> -
> 117,110,116,115,115,116,97,110,100,105,110,103,110,97,116,105,111,110,97,10
> 8,82,
> -
> 101,103,105,115,116,101,114,112,114,101,112,97,114,101,100,99,111,110,116,1
> 14,
> -
> 111,108,115,97,99,99,117,114,97,116,101,98,105,114,116,104,100,97,121,115,1
> 16,
> -
> 114,97,116,101,103,121,111,102,102,105,99,105,97,108,103,114,97,112,104,105
> ,99,
> -
> 115,99,114,105,109,105,110,97,108,112,111,115,115,105,98,108,121,99,111,110
> ,115,
> -
> 117,109,101,114,80,101,114,115,111,110,97,108,115,112,101,97,107,105,110,10
> 3,118
> -
> ,97,108,105,100,97,116,101,97,99,104,105,101,118,101,100,46,106,112,103,34,3
> 2,47
> -
> ,62,109,97,99,104,105,110,101,115,60,47,104,50,62,10,32,32,107,101,121,119,1
> 11,
> -
> 114,100,115,102,114,105,101,110,100,108,121,98,114,111,116,104,101,114,115,
> 99,
> -
> 111,109,98,105,110,101,100,111,114,105,103,105,110,97,108,99,111,109,112,11
> 1,115
> -
> ,101,100,101,120,112,101,99,116,101,100,97,100,101,113,117,97,116,101,112,9
> 7,107
> -
> ,105,115,116,97,110,102,111,108,108,111,119,34,32,118,97,108,117,97,98,108,1
> 01,
> -
> 60,47,108,97,98,101,108,62,114,101,108,97,116,105,118,101,98,114,105,110,10
> 3,105
> -
> ,110,103,105,110,99,114,101,97,115,101,103,111,118,101,114,110,111,114,112,
> 108,
> -
> 117,103,105,110,115,47,76,105,115,116,32,111,102,32,72,101,97,100,101,114,3
> 4,62,
> -
> 34,32,110,97,109,101,61,34,32,40,38,113,117,111,116,59,103,114,97,100,117,97
> ,116
> -
> ,101,60,47,104,101,97,100,62,10,99,111,109,109,101,114,99,101,109,97,108,97,
> 121,
> -
> 115,105,97,100,105,114,101,99,116,111,114,109,97,105,110,116,97,105,110,59,
> 104,
> -
> 101,105,103,104,116,58,115,99,104,101,100,117,108,101,99,104,97,110,103,105
> ,110,
> -
> 103,98,97,99,107,32,116,111,32,99,97,116,104,111,108,105,99,112,97,116,116,1
> 01,
> -
> 114,110,115,99,111,108,111,114,58,32,35,103,114,101,97,116,101,115,116,115,
> 117,
> -
> 112,112,108,105,101,115,114,101,108,105,97,98,108,101,60,47,117,108,62,10,9,
> 9,60
> -
> ,115,101,108,101,99,116,32,99,105,116,105,122,101,110,115,99,108,111,116,10
> 4,105
> -
> ,110,103,119,97,116,99,104,105,110,103,60,108,105,32,105,100,61,34,115,112,1
> 01,
> -
> 99,105,102,105,99,99,97,114,114,121,105,110,103,115,101,110,116,101,110,99,
> 101,
> -
> 60,99,101,110,116,101,114,62,99,111,110,116,114,97,115,116,116,104,105,110,
> 107,
> -
> 105,110,103,99,97,116,99,104,40,101,41,115,111,117,116,104,101,114,110,77,1
> 05,99
> -
> ,104,97,101,108,32,109,101,114,99,104,97,110,116,99,97,114,111,117,115,101,1
> 08,
> -
> 112,97,100,100,105,110,103,58,105,110,116,101,114,105,111,114,46,115,112,10
> 8,105
> -
> ,116,40,34,108,105,122,97,116,105,111,110,79,99,116,111,98,101,114,32,41,123
> ,114
> -
> ,101,116,117,114,110,105,109,112,114,111,118,101,100,45,45,38,103,116,59,10,
> 10,
> -
> 99,111,118,101,114,97,103,101,99,104,97,105,114,109,97,110,46,112,110,103,3
> 4,32,
> -
> 47,62,115,117,98,106,101,99,116,115,82,105,99,104,97,114,100,32,119,104,97,1
> 16,
> -
> 101,118,101,114,112,114,111,98,97,98,108,121,114,101,99,111,118,101,114,121
> ,98,
> -
> 97,115,101,98,97,108,108,106,117,100,103,109,101,110,116,99,111,110,110,101
> ,99,
> -
> 116,46,46,99,115,115,34,32,47,62,32,119,101,98,115,105,116,101,114,101,112,1
> 11,
> -
> 114,116,101,100,100,101,102,97,117,108,116,34,47,62,60,47,97,62,13,10,101,10
> 8,
> -
> 101,99,116,114,105,99,115,99,111,116,108,97,110,100,99,114,101,97,116,105,1
> 11,
> -
> 110,113,117,97,110,116,105,116,121,46,32,73,83,66,78,32,48,100,105,100,32,11
> 0,
> -
> 111,116,32,105,110,115,116,97,110,99,101,45,115,101,97,114,99,104,45,34,32,1
> 08,
> -
> 97,110,103,61,34,115,112,101,97,107,101,114,115,67,111,109,112,117,116,101,
> 114,
> -
> 99,111,110,116,97,105,110,115,97,114,99,104,105,118,101,115,109,105,110,105
> ,115,
> -
> 116,101,114,114,101,97,99,116,105,111,110,100,105,115,99,111,117,110,116,73
> ,116,
> -
> 97,108,105,97,110,111,99,114,105,116,101,114,105,97,115,116,114,111,110,103
> ,108,
> -
> 121,58,32,39,104,116,116,112,58,39,115,99,114,105,112,116,39,99,111,118,101,
> 114,
> -
> 105,110,103,111,102,102,101,114,105,110,103,97,112,112,101,97,114,101,100,6
> 6,114
> -
> ,105,116,105,115,104,32,105,100,101,110,116,105,102,121,70,97,99,101,98,111,
> 111,
> -
> 107,110,117,109,101,114,111,117,115,118,101,104,105,99,108,101,115,99,111,1
> 10,99
> -
> ,101,114,110,115,65,109,101,114,105,99,97,110,104,97,110,100,108,105,110,10
> 3,100
> -
> ,105,118,32,105,100,61,34,87,105,108,108,105,97,109,32,112,114,111,118,105,1
> 00,
> -
> 101,114,95,99,111,110,116,101,110,116,97,99,99,117,114,97,99,121,115,101,99,
> 116,
> -
> 105,111,110,32,97,110,100,101,114,115,111,110,102,108,101,120,105,98,108,10
> 1,67,
> -
> 97,116,101,103,111,114,121,108,97,119,114,101,110,99,101,60,115,99,114,105,
> 112,
> -
> 116,62,108,97,121,111,117,116,61,34,97,112,112,114,111,118,101,100,32,109,9
> 7,120
> -
> ,105,109,117,109,104,101,97,100,101,114,34,62,60,47,116,97,98,108,101,62,83,
> 101,
> -
> 114,118,105,99,101,115,104,97,109,105,108,116,111,110,99,117,114,114,101,11
> 0,116
> -
> ,32,99,97,110,97,100,105,97,110,99,104,97,110,110,101,108,115,47,116,104,101
> ,109
> -
> ,101,115,47,47,97,114,116,105,99,108,101,111,112,116,105,111,110,97,108,112,
> 111,
> -
> 114,116,117,103,97,108,118,97,108,117,101,61,34,34,105,110,116,101,114,118,
> 97,
> -
> 108,119,105,114,101,108,101,115,115,101,110,116,105,116,108,101,100,97,103,
> 101,
> -
> 110,99,105,101,115,83,101,97,114,99,104,34,32,109,101,97,115,117,114,101,10
> 0,116
> -
> ,104,111,117,115,97,110,100,115,112,101,110,100,105,110,103,38,104,101,108,
> 108,
> -
> 105,112,59,110,101,119,32,68,97,116,101,34,32,115,105,122,101,61,34,112,97,1
> 03,
> -
> 101,78,97,109,101,109,105,100,100,108,101,34,32,34,32,47,62,60,47,97,62,104,
> 105,
> -
> 100,100,101,110,34,62,115,101,113,117,101,110,99,101,112,101,114,115,111,11
> 0,97,
> -
> 108,111,118,101,114,102,108,111,119,111,112,105,110,105,111,110,115,105,10
> 8,108,
> -
> 105,110,111,105,115,108,105,110,107,115,34,62,10,9,60,116,105,116,108,101,6
> 2,118
> -
> ,101,114,115,105,111,110,115,115,97,116,117,114,100,97,121,116,101,114,109,
> 105,
> -
> 110,97,108,105,116,101,109,112,114,111,112,101,110,103,105,110,101,101,114,
> 115,
> -
> 101,99,116,105,111,110,115,100,101,115,105,103,110,101,114,112,114,111,112,
> 111,
> -
> 115,97,108,61,34,102,97,108,115,101,34,69,115,112,97,195,177,111,108,114,10
> 1,108
> -
> ,101,97,115,101,115,115,117,98,109,105,116,34,32,101,114,38,113,117,111,116,
> 59,
> -
> 97,100,100,105,116,105,111,110,115,121,109,112,116,111,109,115,111,114,105,
> 101,
> -
> 110,116,101,100,114,101,115,111,117,114,99,101,114,105,103,104,116,34,62,60
> ,112,
> -
> 108,101,97,115,117,114,101,115,116,97,116,105,111,110,115,104,105,115,116,1
> 11,
> -
> 114,121,46,108,101,97,118,105,110,103,32,32,98,111,114,100,101,114,61,99,11
> 1,110
> -
> ,116,101,110,116,115,99,101,110,116,101,114,34,62,46,10,10,83,111,109,101,32
> ,100
> -
> ,105,114,101,99,116,101,100,115,117,105,116,97,98,108,101,98,117,108,103,97,
> 114,
> -
> 105,97,46,115,104,111,119,40,41,59,100,101,115,105,103,110,101,100,71,101,1
> 10,
> -
> 101,114,97,108,32,99,111,110,99,101,112,116,115,69,120,97,109,112,108,101,1
> 15,
> -
> 119,105,108,108,105,97,109,115,79,114,105,103,105,110,97,108,34,62,60,115,1
> 12,97
> -
> ,110,62,115,101,97,114,99,104,34,62,111,112,101,114,97,116,111,114,114,101,1
> 13,
> -
> 117,101,115,116,115,97,32,38,113,117,111,116,59,97,108,108,111,119,105,110,
> 103,
> -
> 68,111,99,117,109,101,110,116,114,101,118,105,115,105,111,110,46,32,10,10,8
> 4,104
> -
> ,101,32,121,111,117,114,115,101,108,102,67,111,110,116,97,99,116,32,109,105,
> 99,
> -
> 104,105,103,97,110,69,110,103,108,105,115,104,32,99,111,108,117,109,98,105,
> 97,
> -
> 112,114,105,111,114,105,116,121,112,114,105,110,116,105,110,103,100,114,10
> 5,110,
> -
> 107,105,110,103,102,97,99,105,108,105,116,121,114,101,116,117,114,110,101,1
> 00,67
> -
> ,111,110,116,101,110,116,32,111,102,102,105,99,101,114,115,82,117,115,115,1
> 05,97
> -
> ,110,32,103,101,110,101,114,97,116,101,45,56,56,53,57,45,49,34,105,110,100,1
> 05,
> -
> 99,97,116,101,102,97,109,105,108,105,97,114,32,113,117,97,108,105,116,121,1
> 09,97
> -
> ,114,103,105,110,58,48,32,99,111,110,116,101,110,116,118,105,101,119,112,11
> 1,114
> -
> ,116,99,111,110,116,97,99,116,115,45,116,105,116,108,101,34,62,112,111,114,1
> 16,
> -
> 97,98,108,101,46,108,101,110,103,116,104,32,101,108,105,103,105,98,108,101,
> 105,
> -
> 110,118,111,108,118,101,115,97,116,108,97,110,116,105,99,111,110,108,111,97
> ,100,
> -
> 61,34,100,101,102,97,117,108,116,46,115,117,112,112,108,105,101,100,112,97,
> 121,
> -
> 109,101,110,116,115,103,108,111,115,115,97,114,121,10,10,65,102,116,101,114
> ,32,
> -
> 103,117,105,100,97,110,99,101,60,47,116,100,62,60,116,100,101,110,99,111,10
> 0,105
> -
> ,110,103,109,105,100,100,108,101,34,62,99,97,109,101,32,116,111,32,100,105,1
> 15,
> -
> 112,108,97,121,115,115,99,111,116,116,105,115,104,106,111,110,97,116,104,97
> ,110,
> -
> 109,97,106,111,114,105,116,121,119,105,100,103,101,116,115,46,99,108,105,11
> 0,105
> -
> ,99,97,108,116,104,97,105,108,97,110,100,116,101,97,99,104,101,114,115,60,10
> 4,
> -
> 101,97,100,62,10,9,97,102,102,101,99,116,101,100,115,117,112,112,111,114,11
> 6,115
> -
> ,112,111,105,110,116,101,114,59,116,111,83,116,114,105,110,103,60,47,115,10
> 9,97,
> -
> 108,108,62,111,107,108,97,104,111,109,97,119,105,108,108,32,98,101,32,105,1
> 10,
> -
> 118,101,115,116,111,114,48,34,32,97,108,116,61,34,104,111,108,105,100,97,12
> 1,115
> -
> ,82,101,115,111,117,114,99,101,108,105,99,101,110,115,101,100,32,40,119,104,
> 105,
> -
> 99,104,32,46,32,65,102,116,101,114,32,99,111,110,115,105,100,101,114,118,10
> 5,115
> -
> ,105,116,105,110,103,101,120,112,108,111,114,101,114,112,114,105,109,97,114
> ,121,
> -
> 32,115,101,97,114,99,104,34,32,97,110,100,114,111,105,100,34,113,117,105,99,
> 107,
> -
> 108,121,32,109,101,101,116,105,110,103,115,101,115,116,105,109,97,116,101,5
> 9,114
> -
> ,101,116,117,114,110,32,59,99,111,108,111,114,58,35,32,104,101,105,103,104,1
> 16,
> -
> 61,97,112,112,114,111,118,97,108,44,32,38,113,117,111,116,59,32,99,104,101,9
> 9,
> -
> 107,101,100,46,109,105,110,46,106,115,34,109,97,103,110,101,116,105,99,62,6
> 0,47,
> -
> 97,62,60,47,104,102,111,114,101,99,97,115,116,46,32,87,104,105,108,101,32,11
> 6,
> -
> 104,117,114,115,100,97,121,100,118,101,114,116,105,115,101,38,101,97,99,117
> ,116,
> -
> 101,59,104,97,115,67,108,97,115,115,101,118,97,108,117,97,116,101,111,114,1
> 00,
> -
> 101,114,105,110,103,101,120,105,115,116,105,110,103,112,97,116,105,101,110,
> 116,
> -
> 115,32,79,110,108,105,110,101,32,99,111,108,111,114,97,100,111,79,112,116,1
> 05,
> -
> 111,110,115,34,99,97,109,112,98,101,108,108,60,33,45,45,32,101,110,100,60,47
> ,115
> -
> ,112,97,110,62,60,60,98,114,32,47,62,13,10,95,112,111,112,117,112,115,124,11
> 5,99
> -
> ,105,101,110,99,101,115,44,38,113,117,111,116,59,32,113,117,97,108,105,116,1
> 21,
> -
> 32,87,105,110,100,111,119,115,32,97,115,115,105,103,110,101,100,104,101,105
> ,103,
> -
> 104,116,58,32,60,98,32,99,108,97,115,115,108,101,38,113,117,111,116,59,32,11
> 8,97
> -
> ,108,117,101,61,34,32,67,111,109,112,97,110,121,101,120,97,109,112,108,101,1
> 15,
> -
> 60,105,102,114,97,109,101,32,98,101,108,105,101,118,101,115,112,114,101,115
> ,101,
> -
> 110,116,115,109,97,114,115,104,97,108,108,112,97,114,116,32,111,102,32,112,
> 114,
> -
> 111,112,101,114,108,121,41,46,10,10,84,104,101,32,116,97,120,111,110,111,10
> 9,121
> -
> ,109,117,99,104,32,111,102,32,60,47,115,112,97,110,62,10,34,32,100,97,116,97,
> 45,
> -
> 115,114,116,117,103,117,195,170,115,115,99,114,111,108,108,84,111,32,112,11
> 4,111
> -
> ,106,101,99,116,60,104,101,97,100,62,13,10,97,116,116,111,114,110,101,121,10
> 1,
> -
> 109,112,104,97,115,105,115,115,112,111,110,115,111,114,115,102,97,110,99,12
> 1,98,
> -
> 111,120,119,111,114,108,100,39,115,32,119,105,108,100,108,105,102,101,99,10
> 4,101
> -
> ,99,107,101,100,61,115,101,115,115,105,111,110,115,112,114,111,103,114,97,1
> 09,
> -
> 109,112,120,59,102,111,110,116,45,32,80,114,111,106,101,99,116,106,111,117,
> 114,
> -
> 110,97,108,115,98,101,108,105,101,118,101,100,118,97,99,97,116,105,111,110,
> 116,
> -
> 104,111,109,112,115,111,110,108,105,103,104,116,105,110,103,97,110,100,32,1
> 16,
> -
> 104,101,32,115,112,101,99,105,97,108,32,98,111,114,100,101,114,61,48,99,104,
> 101,
> -
> 99,107,105,110,103,60,47,116,98,111,100,121,62,60,98,117,116,116,111,110,32,
> 67,
> -
> 111,109,112,108,101,116,101,99,108,101,97,114,102,105,120,10,60,104,101,97,
> 100,
> -
> 62,10,97,114,116,105,99,108,101,32,60,115,101,99,116,105,111,110,102,105,11
> 0,100
> -
> ,105,110,103,115,114,111,108,101,32,105,110,32,112,111,112,117,108,97,114,3
> 2,32,
> -
> 79,99,116,111,98,101,114,119,101,98,115,105,116,101,32,101,120,112,111,115,
> 117,
> -
> 114,101,117,115,101,100,32,116,111,32,32,99,104,97,110,103,101,115,111,112,
> 101,
> -
> 114,97,116,101,100,99,108,105,99,107,105,110,103,101,110,116,101,114,105,11
> 0,103
> -
> ,99,111,109,109,97,110,100,115,105,110,102,111,114,109,101,100,32,110,117,1
> 09,98
> -
> ,101,114,115,32,32,60,47,100,105,118,62,99,114,101,97,116,105,110,103,111,11
> 0,83
> -
> ,117,98,109,105,116,109,97,114,121,108,97,110,100,99,111,108,108,101,103,10
> 1,115
> -
> ,97,110,97,108,121,116,105,99,108,105,115,116,105,110,103,115,99,111,110,11
> 6,97,
> -
> 99,116,46,108,111,103,103,101,100,73,110,97,100,118,105,115,111,114,121,115
> ,105,
> -
> 98,108,105,110,103,115,99,111,110,116,101,110,116,34,115,38,113,117,111,116
> ,59,
> -
> 41,115,46,32,84,104,105,115,32,112,97,99,107,97,103,101,115,99,104,101,99,10
> 7,98
> -
> ,111,120,115,117,103,103,101,115,116,115,112,114,101,103,110,97,110,116,116
> ,111,
> -
> 109,111,114,114,111,119,115,112,97,99,105,110,103,61,105,99,111,110,46,112,
> 110,
> -
> 103,106,97,112,97,110,101,115,101,99,111,100,101,98,97,115,101,98,117,116,1
> 16,
> -
> 111,110,34,62,103,97,109,98,108,105,110,103,115,117,99,104,32,97,115,32,44,3
> 2,
> -
> 119,104,105,108,101,32,60,47,115,112,97,110,62,32,109,105,115,115,111,117,1
> 14,
> -
> 105,115,112,111,114,116,105,110,103,116,111,112,58,49,112,120,32,46,60,47,1
> 15,
> -
> 112,97,110,62,116,101,110,115,105,111,110,115,119,105,100,116,104,61,34,50,
> 108,
> -
> 97,122,121,108,111,97,100,110,111,118,101,109,98,101,114,117,115,101,100,32
> ,105,
> -
> 110,32,104,101,105,103,104,116,61,34,99,114,105,112,116,34,62,10,38,110,98,1
> 15,
> -
> 112,59,60,47,60,116,114,62,60,116,100,32,104,101,105,103,104,116,58,50,47,11
> 2,
> -
> 114,111,100,117,99,116,99,111,117,110,116,114,121,32,105,110,99,108,117,100
> ,101,
> -
> 32,102,111,111,116,101,114,34,32,38,108,116,59,33,45,45,32,116,105,116,108,1
> 01,
> -
> 34,62,60,47,106,113,117,101,114,121,46,60,47,102,111,114,109,62,10,40,231,17
> 4,
> -
> 128,228,189,147,41,40,231,185,129,233,171,148,41,104,114,118,97,116,115,107
> ,105,
> -
> 105,116,97,108,105,97,110,111,114,111,109,195,162,110,196,131,116,195,188,1
> 14,
> -
> 107,195,167,101,216,167,216,177,216,175,217,136,116,97,109,98,105,195,169,1
> 10,
> -
> 110,111,116,105,99,105,97,115,109,101,110,115,97,106,101,115,112,101,114,11
> 5,111
> -
> ,110,97,115,100,101,114,101,99,104,111,115,110,97,99,105,111,110,97,108,115,
> 101,
> -
> 114,118,105,99,105,111,99,111,110,116,97,99,116,111,117,115,117,97,114,105,
> 111,
> -
> 115,112,114,111,103,114,97,109,97,103,111,98,105,101,114,110,111,101,109,11
> 2,114
> -
> ,101,115,97,115,97,110,117,110,99,105,111,115,118,97,108,101,110,99,105,97,9
> 9,
> -
> 111,108,111,109,98,105,97,100,101,115,112,117,195,169,115,100,101,112,111,1
> 14,
> -
> 116,101,115,112,114,111,121,101,99,116,111,112,114,111,100,117,99,116,111,1
> 12,
> -
> 195,186,98,108,105,99,111,110,111,115,111,116,114,111,115,104,105,115,116,1
> 11,
> -
> 114,105,97,112,114,101,115,101,110,116,101,109,105,108,108,111,110,101,115,
> 109,
> -
> 101,100,105,97,110,116,101,112,114,101,103,117,110,116,97,97,110,116,101,11
> 4,105
> -
> ,111,114,114,101,99,117,114,115,111,115,112,114,111,98,108,101,109,97,115,9
> 7,110
> -
> ,116,105,97,103,111,110,117,101,115,116,114,111,115,111,112,105,110,105,195
> ,179,
> -
> 110,105,109,112,114,105,109,105,114,109,105,101,110,116,114,97,115,97,109,1
> 95,
> -
> 169,114,105,99,97,118,101,110,100,101,100,111,114,115,111,99,105,101,100,97
> ,100,
> -
> 114,101,115,112,101,99,116,111,114,101,97,108,105,122,97,114,114,101,103,10
> 5,115
> -
> ,116,114,111,112,97,108,97,98,114,97,115,105,110,116,101,114,195,169,115,10
> 1,110
> -
> ,116,111,110,99,101,115,101,115,112,101,99,105,97,108,109,105,101,109,98,11
> 4,111
> -
> ,115,114,101,97,108,105,100,97,100,99,195,179,114,100,111,98,97,122,97,114,9
> 7,
> -
> 103,111,122,97,112,195,161,103,105,110,97,115,115,111,99,105,97,108,101,115
> ,98,
> -
> 108,111,113,117,101,97,114,103,101,115,116,105,195,179,110,97,108,113,117,1
> 05,
> -
> 108,101,114,115,105,115,116,101,109,97,115,99,105,101,110,99,105,97,115,99,
> 111,
> -
> 109,112,108,101,116,111,118,101,114,115,105,195,179,110,99,111,109,112,108,
> 101,
> -
> 116,97,101,115,116,117,100,105,111,115,112,195,186,98,108,105,99,97,111,98,
> 106,
> -
> 101,116,105,118,111,97,108,105,99,97,110,116,101,98,117,115,99,97,100,111,1
> 14,99
> -
> ,97,110,116,105,100,97,100,101,110,116,114,97,100,97,115,97,99,99,105,111,11
> 0,
> -
> 101,115,97,114,99,104,105,118,111,115,115,117,112,101,114,105,111,114,109,9
> 7,121
> -
> ,111,114,195,173,97,97,108,101,109,97,110,105,97,102,117,110,99,105,195,179,
> 110,
> -
> 195,186,108,116,105,109,111,115,104,97,99,105,101,110,100,111,97,113,117,10
> 1,108
> -
> ,108,111,115,101,100,105,99,105,195,179,110,102,101,114,110,97,110,100,111,
> 97,
> -
> 109,98,105,101,110,116,101,102,97,99,101,98,111,111,107,110,117,101,115,116
> ,114,
> -
> 97,115,99,108,105,101,110,116,101,115,112,114,111,99,101,115,111,115,98,97,
> 115,
> -
> 116,97,110,116,101,112,114,101,115,101,110,116,97,114,101,112,111,114,116,9
> 7,114
> -
> ,99,111,110,103,114,101,115,111,112,117,98,108,105,99,97,114,99,111,109,101,
> 114,
> -
> 99,105,111,99,111,110,116,114,97,116,111,106,195,179,118,101,110,101,115,10
> 0,105
> -
> ,115,116,114,105,116,111,116,195,169,99,110,105,99,97,99,111,110,106,117,11
> 0,116
> -
> ,111,101,110,101,114,103,195,173,97,116,114,97,98,97,106,97,114,97,115,116,1
> 17,
> -
> 114,105,97,115,114,101,99,105,101,110,116,101,117,116,105,108,105,122,97,11
> 4,98,
> -
> 111,108,101,116,195,173,110,115,97,108,118,97,100,111,114,99,111,114,114,10
> 1,99,
> -
> 116,97,116,114,97,98,97,106,111,115,112,114,105,109,101,114,111,115,110,101
> ,103,
> -
> 111,99,105,111,115,108,105,98,101,114,116,97,100,100,101,116,97,108,108,101
> ,115,
> -
> 112,97,110,116,97,108,108,97,112,114,195,179,120,105,109,111,97,108,109,101
> ,114,
> -
> 195,173,97,97,110,105,109,97,108,101,115,113,117,105,195,169,110,101,115,99
> ,111,
> -
> 114,97,122,195,179,110,115,101,99,99,105,195,179,110,98,117,115,99,97,110,1
> 00,
> -
> 111,111,112,99,105,111,110,101,115,101,120,116,101,114,105,111,114,99,111,1
> 10,99
> -
> ,101,112,116,111,116,111,100,97,118,195,173,97,103,97,108,101,114,195,173,9
> 7,101
> -
> ,115,99,114,105,98,105,114,109,101,100,105,99,105,110,97,108,105,99,101,110,
> 99,
> -
> 105,97,99,111,110,115,117,108,116,97,97,115,112,101,99,116,111,115,99,114,1
> 95,
> -
> 173,116,105,99,97,100,195,179,108,97,114,101,115,106,117,115,116,105,99,105
> ,97,
> -
> 100,101,98,101,114,195,161,110,112,101,114,195,173,111,100,111,110,101,99,1
> 01,
> -
> 115,105,116,97,109,97,110,116,101,110,101,114,112,101,113,117,101,195,177,1
> 11,
> -
> 114,101,99,105,98,105,100,97,116,114,105,98,117,110,97,108,116,101,110,101,
> 114,
> -
> 105,102,101,99,97,110,99,105,195,179,110,99,97,110,97,114,105,97,115,100,10
> 1,115
> -
> ,99,97,114,103,97,100,105,118,101,114,115,111,115,109,97,108,108,111,114,99,
> 97,
> -
> 114,101,113,117,105,101,114,101,116,195,169,99,110,105,99,111,100,101,98,10
> 1,114
> -
> ,195,173,97,118,105,118,105,101,110,100,97,102,105,110,97,110,122,97,115,97,
> 100,
> -
> 101,108,97,110,116,101,102,117,110,99,105,111,110,97,99,111,110,115,101,106
> ,111,
> -
> 115,100,105,102,195,173,99,105,108,99,105,117,100,97,100,101,115,97,110,116
> ,105,
> -
> 103,117,97,115,97,118,97,110,122,97,100,97,116,195,169,114,109,105,110,111,
> 117,
> -
> 110,105,100,97,100,101,115,115,195,161,110,99,104,101,122,99,97,109,112,97,
> 195,
> -
> 177,97,115,111,102,116,111,110,105,99,114,101,118,105,115,116,97,115,99,111
> ,110,
> -
> 116,105,101,110,101,115,101,99,116,111,114,101,115,109,111,109,101,110,116,
> 111,
> -
> 115,102,97,99,117,108,116,97,100,99,114,195,169,100,105,116,111,100,105,118
> ,101,
> -
> 114,115,97,115,115,117,112,117,101,115,116,111,102,97,99,116,111,114,101,11
> 5,115
> -
> ,101,103,117,110,100,111,115,112,101,113,117,101,195,177,97,208,179,208,190
> ,208,
> -
> 180,208,176,208,181,209,129,208,187,208,184,208,181,209,129,209,130,209,14
> 0,208,
> -
> 177,209,139,208,187,208,190,208,177,209,139,209,130,209,140,209,141,209,13
> 0,208,
> -
> 190,208,188,208,149,209,129,208,187,208,184,209,130,208,190,208,179,208,19
> 0,208,
> -
> 188,208,181,208,189,209,143,208,178,209,129,208,181,209,133,209,141,209,13
> 0,208,
> -
> 190,208,185,208,180,208,176,208,182,208,181,208,177,209,139,208,187,208,18
> 4,208,
> -
> 179,208,190,208,180,209,131,208,180,208,181,208,189,209,140,209,141,209,13
> 0,208,
> -
> 190,209,130,208,177,209,139,208,187,208,176,209,129,208,181,208,177,209,14
> 3,208,
> -
> 190,208,180,208,184,208,189,209,129,208,181,208,177,208,181,208,189,208,17
> 6,208,
> -
> 180,208,190,209,129,208,176,208,185,209,130,209,132,208,190,209,130,208,19
> 0,208,
> -
> 189,208,181,208,179,208,190,209,129,208,178,208,190,208,184,209,129,208,17
> 8,208,
> -
> 190,208,185,208,184,208,179,209,128,209,139,209,130,208,190,208,182,208,18
> 1,208,
> -
> 178,209,129,208,181,208,188,209,129,208,178,208,190,209,142,208,187,208,18
> 4,209,
> -
> 136,209,140,209,141,209,130,208,184,209,133,208,191,208,190,208,186,208,17
> 6,208,
> -
> 180,208,189,208,181,208,185,208,180,208,190,208,188,208,176,208,188,208,18
> 4,209,
> -
> 128,208,176,208,187,208,184,208,177,208,190,209,130,208,181,208,188,209,13
> 1,209,
> -
> 133,208,190,209,130,209,143,208,180,208,178,209,131,209,133,209,129,208,18
> 1,209,
> -
> 130,208,184,208,187,209,142,208,180,208,184,208,180,208,181,208,187,208,19
> 0,208,
> -
> 188,208,184,209,128,208,181,209,130,208,181,208,177,209,143,209,129,208,17
> 8,208,
> -
> 190,208,181,208,178,208,184,208,180,208,181,209,135,208,181,208,179,208,19
> 0,209,
> -
> 141,209,130,208,184,208,188,209,129,209,135,208,181,209,130,209,130,208,18
> 1,208,
> -
> 188,209,139,209,134,208,181,208,189,209,139,209,129,209,130,208,176,208,18
> 7,208,
> -
> 178,208,181,208,180,209,140,209,130,208,181,208,188,208,181,208,178,208,19
> 0,208,
> -
> 180,209,139,209,130,208,181,208,177,208,181,208,178,209,139,209,136,208,18
> 1,208,
> -
> 189,208,176,208,188,208,184,209,130,208,184,208,191,208,176,209,130,208,19
> 0,208,
> -
> 188,209,131,208,191,209,128,208,176,208,178,208,187,208,184,209,134,208,17
> 6,208,
> -
> 190,208,180,208,189,208,176,208,179,208,190,208,180,209,139,208,183,208,18
> 9,208,
> -
> 176,209,142,208,188,208,190,208,179,209,131,208,180,209,128,209,131,208,17
> 9,208,
> -
> 178,209,129,208,181,208,185,208,184,208,180,208,181,209,130,208,186,208,18
> 4,208,
> -
> 189,208,190,208,190,208,180,208,189,208,190,208,180,208,181,208,187,208,17
> 6,208,
> -
> 180,208,181,208,187,208,181,209,129,209,128,208,190,208,186,208,184,209,14
> 2,208,
> -
> 189,209,143,208,178,208,181,209,129,209,140,208,149,209,129,209,130,209,14
> 0,209,
> -
> 128,208,176,208,183,208,176,208,189,208,176,209,136,208,184,216,167,217,13
> 2,217,
> -
> 132,217,135,216,167,217,132,216,170,217,138,216,172,217,133,217,138,216,18
> 5,216,
> -
> 174,216,167,216,181,216,169,216,167,217,132,216,176,217,138,216,185,217,13
> 2,217,
> -
> 138,217,135,216,172,216,175,217,138,216,175,216,167,217,132,216,162,217,13
> 4,216,
> -
> 167,217,132,216,177,216,175,216,170,216,173,217,131,217,133,216,181,217,12
> 9,216,
> -
> 173,216,169,217,131,216,167,217,134,216,170,216,167,217,132,217,132,217,13
> 8,217,
> -
> 138,217,131,217,136,217,134,216,180,216,168,217,131,216,169,217,129,217,13
> 8,217,
> -
> 135,216,167,216,168,217,134,216,167,216,170,216,173,217,136,216,167,216,16
> 1,216,
> -
> 163,217,131,216,171,216,177,216,174,217,132,216,167,217,132,216,167,217,13
> 2,216,
> -
> 173,216,168,216,175,217,132,217,138,217,132,216,175,216,177,217,136,216,17
> 9,216,
> -
> 167,216,182,216,186,216,183,216,170,217,131,217,136,217,134,217,135,217,13
> 4,216,
> -
> 167,217,131,216,179,216,167,216,173,216,169,217,134,216,167,216,175,217,13
> 8,216,
> -
> 167,217,132,216,183,216,168,216,185,217,132,217,138,217,131,216,180,217,13
> 1,216,
> -
> 177,216,167,217,138,217,133,217,131,217,134,217,133,217,134,217,135,216,16
> 7,216,
> -
> 180,216,177,217,131,216,169,216,177,216,166,217,138,216,179,217,134,216,18
> 0,217,
> -
> 138,216,183,217,133,216,167,216,176,216,167,216,167,217,132,217,129,217,13
> 4,216,
> -
> 180,216,168,216,167,216,168,216,170,216,185,216,168,216,177,216,177,216,17
> 3,217,
> -
> 133,216,169,217,131,216,167,217,129,216,169,217,138,217,130,217,136,217,13
> 2,217,
> -
> 133,216,177,217,131,216,178,217,131,217,132,217,133,216,169,216,163,216,17
> 3,217,
> -
> 133,216,175,217,130,217,132,216,168,217,138,217,138,216,185,217,134,217,13
> 8,216,
> -
> 181,217,136,216,177,216,169,216,183,216,177,217,138,217,130,216,180,216,16
> 7,216,
> -
> 177,217,131,216,172,217,136,216,167,217,132,216,163,216,174,216,177,217,13
> 7,217,
> -
> 133,216,185,217,134,216,167,216,167,216,168,216,173,216,171,216,185,216,17
> 7,217,
> -
> 136,216,182,216,168,216,180,217,131,217,132,217,133,216,179,216,172,217,13
> 2,216,
> -
> 168,217,134,216,167,217,134,216,174,216,167,217,132,216,175,217,131,216,17
> 0,216,
> -
> 167,216,168,217,131,217,132,217,138,216,169,216,168,216,175,217,136,217,13
> 4,216,
> -
> 163,217,138,216,182,216,167,217,138,217,136,216,172,216,175,217,129,216,17
> 7,217,
> -
> 138,217,130,217,131,216,170,216,168,216,170,216,163,217,129,216,182,217,13
> 2,217,
> -
> 133,216,183,216,168,216,174,216,167,217,131,216,171,216,177,216,168,216,16
> 7,216,
> -
> 177,217,131,216,167,217,129,216,182,217,132,216,167,216,173,217,132,217,13
> 7,217,
> -
> 134,217,129,216,179,217,135,216,163,217,138,216,167,217,133,216,177,216,17
> 5,217,
> -
> 136,216,175,216,163,217,134,217,135,216,167,216,175,217,138,217,134,216,16
> 7,216,
> -
> 167,217,132,216,167,217,134,217,133,216,185,216,177,216,182,216,170,216,18
> 5,217,
> -
> 132,217,133,216,175,216,167,216,174,217,132,217,133,217,133,217,131,217,13
> 4,0,0,
> -0,0,0,0,0,0,1,0,1,0,1,0,1,0,2,0,2,0,2,0,2,0,4,0,4,0,4,0,4,0,0,1,2,3,4,5,6,7,7,6,
> -
> 5,4,3,2,1,0,8,9,10,11,12,13,14,15,15,14,13,12,11,10,9,8,16,17,18,19,20,21,22,23,
> -
> 23,22,21,20,19,18,17,16,24,25,26,27,28,29,30,31,31,30,29,28,27,26,25,24,255,2
> 55,
> -255,255,0,0,0,0,0,0,0,0,255,255,255,255,1,0,0,0,2,0,0,0,2,0,0,0,1,0,0,0,1,0,0,0,
> -3,0,0,0,255,255,0,1,0,0,0,1,0,0,255,255,0,1,0,0,0,8,0,8,0,8,0,8,0,0,0,1,0,2,0,3,
> -
> 0,4,0,5,0,6,0,7,114,101,115,111,117,114,99,101,115,99,111,117,110,116,114,105,
> -
> 101,115,113,117,101,115,116,105,111,110,115,101,113,117,105,112,109,101,11
> 0,116,
> -
> 99,111,109,109,117,110,105,116,121,97,118,97,105,108,97,98,108,101,104,105,
> 103,
> -
> 104,108,105,103,104,116,68,84,68,47,120,104,116,109,108,109,97,114,107,101,
> 116,
> -
> 105,110,103,107,110,111,119,108,101,100,103,101,115,111,109,101,116,104,10
> 5,110,
> -
> 103,99,111,110,116,97,105,110,101,114,100,105,114,101,99,116,105,111,110,11
> 5,117
> -
> ,98,115,99,114,105,98,101,97,100,118,101,114,116,105,115,101,99,104,97,114,9
> 7,99
> -
> ,116,101,114,34,32,118,97,108,117,101,61,34,60,47,115,101,108,101,99,116,62,
> 65,
> -
> 117,115,116,114,97,108,105,97,34,32,99,108,97,115,115,61,34,115,105,116,117,
> 97,
> -
> 116,105,111,110,97,117,116,104,111,114,105,116,121,102,111,108,108,111,119,
> 105,
> -
> 110,103,112,114,105,109,97,114,105,108,121,111,112,101,114,97,116,105,111,1
> 10,99
> -
> ,104,97,108,108,101,110,103,101,100,101,118,101,108,111,112,101,100,97,110,
> 111,
> -
> 110,121,109,111,117,115,102,117,110,99,116,105,111,110,32,102,117,110,99,11
> 6,105
> -
> ,111,110,115,99,111,109,112,97,110,105,101,115,115,116,114,117,99,116,117,1
> 14,
> -
> 101,97,103,114,101,101,109,101,110,116,34,32,116,105,116,108,101,61,34,112,
> 111,
> -
> 116,101,110,116,105,97,108,101,100,117,99,97,116,105,111,110,97,114,103,117
> ,109,
> -
> 101,110,116,115,115,101,99,111,110,100,97,114,121,99,111,112,121,114,105,10
> 3,104
> -
> ,116,108,97,110,103,117,97,103,101,115,101,120,99,108,117,115,105,118,101,9
> 9,111
> -
> ,110,100,105,116,105,111,110,60,47,102,111,114,109,62,13,10,115,116,97,116,1
> 01,
> -
> 109,101,110,116,97,116,116,101,110,116,105,111,110,66,105,111,103,114,97,11
> 2,104
> -
> ,121,125,32,101,108,115,101,32,123,10,115,111,108,117,116,105,111,110,115,1
> 19,
> -
> 104,101,110,32,116,104,101,32,65,110,97,108,121,116,105,99,115,116,101,109,
> 112,
> -
> 108,97,116,101,115,100,97,110,103,101,114,111,117,115,115,97,116,101,108,10
> 8,105
> -
> ,116,101,100,111,99,117,109,101,110,116,115,112,117,98,108,105,115,104,101,
> 114,
> -
> 105,109,112,111,114,116,97,110,116,112,114,111,116,111,116,121,112,101,105,
> 110,
> -
> 102,108,117,101,110,99,101,38,114,97,113,117,111,59,60,47,101,102,102,101,9
> 9,116
> -
> ,105,118,101,103,101,110,101,114,97,108,108,121,116,114,97,110,115,102,111,
> 114,
> -
> 109,98,101,97,117,116,105,102,117,108,116,114,97,110,115,112,111,114,116,11
> 1,114
> -
> ,103,97,110,105,122,101,100,112,117,98,108,105,115,104,101,100,112,114,111,
> 109,
> -
> 105,110,101,110,116,117,110,116,105,108,32,116,104,101,116,104,117,109,98,1
> 10,97
> -
> ,105,108,78,97,116,105,111,110,97,108,32,46,102,111,99,117,115,40,41,59,111,
> 118,
> -
> 101,114,32,116,104,101,32,109,105,103,114,97,116,105,111,110,97,110,110,111
> ,117,
> -
> 110,99,101,100,102,111,111,116,101,114,34,62,10,101,120,99,101,112,116,105,
> 111,
> -
> 110,108,101,115,115,32,116,104,97,110,101,120,112,101,110,115,105,118,101,1
> 02,
> -
> 111,114,109,97,116,105,111,110,102,114,97,109,101,119,111,114,107,116,101,1
> 14,
> -
> 114,105,116,111,114,121,110,100,105,99,97,116,105,111,110,99,117,114,114,10
> 1,110
> -
> ,116,108,121,99,108,97,115,115,78,97,109,101,99,114,105,116,105,99,105,115,1
> 09,
> -
> 116,114,97,100,105,116,105,111,110,101,108,115,101,119,104,101,114,101,65,1
> 08,
> -
> 101,120,97,110,100,101,114,97,112,112,111,105,110,116,101,100,109,97,116,10
> 1,114
> -
> ,105,97,108,115,98,114,111,97,100,99,97,115,116,109,101,110,116,105,111,110,
> 101,
> -
> 100,97,102,102,105,108,105,97,116,101,60,47,111,112,116,105,111,110,62,116,
> 114,
> -
> 101,97,116,109,101,110,116,100,105,102,102,101,114,101,110,116,47,100,101,1
> 02,97
> -
> ,117,108,116,46,80,114,101,115,105,100,101,110,116,111,110,99,108,105,99,10
> 7,61,
> -
> 34,98,105,111,103,114,97,112,104,121,111,116,104,101,114,119,105,115,101,11
> 2,101
> -
> ,114,109,97,110,101,110,116,70,114,97,110,195,167,97,105,115,72,111,108,108,
> 121,
> -
> 119,111,111,100,101,120,112,97,110,115,105,111,110,115,116,97,110,100,97,11
> 4,100
> -
> ,115,60,47,115,116,121,108,101,62,10,114,101,100,117,99,116,105,111,110,68,1
> 01,
> -
> 99,101,109,98,101,114,32,112,114,101,102,101,114,114,101,100,67,97,109,98,1
> 14,
> -
> 105,100,103,101,111,112,112,111,110,101,110,116,115,66,117,115,105,110,101,
> 115,
> -
> 115,32,99,111,110,102,117,115,105,111,110,62,10,60,116,105,116,108,101,62,1
> 12,
> -
> 114,101,115,101,110,116,101,100,101,120,112,108,97,105,110,101,100,100,111,
> 101,
> -
> 115,32,110,111,116,32,119,111,114,108,100,119,105,100,101,105,110,116,101,1
> 14,
> -
> 102,97,99,101,112,111,115,105,116,105,111,110,115,110,101,119,115,112,97,11
> 2,101
> -
> ,114,60,47,116,97,98,108,101,62,10,109,111,117,110,116,97,105,110,115,108,10
> 5,
> -
> 107,101,32,116,104,101,32,101,115,115,101,110,116,105,97,108,102,105,110,97
> ,110,
> -
> 99,105,97,108,115,101,108,101,99,116,105,111,110,97,99,116,105,111,110,61,3
> 4,47,
> -
> 97,98,97,110,100,111,110,101,100,69,100,117,99,97,116,105,111,110,112,97,11
> 4,115
> -
> ,101,73,110,116,40,115,116,97,98,105,108,105,116,121,117,110,97,98,108,101,3
> 2,
> -
> 116,111,60,47,116,105,116,108,101,62,10,114,101,108,97,116,105,111,110,115,
> 78,
> -
> 111,116,101,32,116,104,97,116,101,102,102,105,99,105,101,110,116,112,101,11
> 4,102
> -
> ,111,114,109,101,100,116,119,111,32,121,101,97,114,115,83,105,110,99,101,32,
> 116,
> -
> 104,101,116,104,101,114,101,102,111,114,101,119,114,97,112,112,101,114,34,6
> 2,97,
> -
> 108,116,101,114,110,97,116,101,105,110,99,114,101,97,115,101,100,66,97,116,
> 116,
> -
> 108,101,32,111,102,112,101,114,99,101,105,118,101,100,116,114,121,105,110,1
> 03,32
> -
> ,116,111,110,101,99,101,115,115,97,114,121,112,111,114,116,114,97,121,101,1
> 00,
> -
> 101,108,101,99,116,105,111,110,115,69,108,105,122,97,98,101,116,104,60,47,1
> 05,
> -
> 102,114,97,109,101,62,100,105,115,99,111,118,101,114,121,105,110,115,117,11
> 4,97,
> -
> 110,99,101,115,46,108,101,110,103,116,104,59,108,101,103,101,110,100,97,114
> ,121,
> -
> 71,101,111,103,114,97,112,104,121,99,97,110,100,105,100,97,116,101,99,111,1
> 14,
> -
> 112,111,114,97,116,101,115,111,109,101,116,105,109,101,115,115,101,114,118,
> 105,
> -
> 99,101,115,46,105,110,104,101,114,105,116,101,100,60,47,115,116,114,111,110
> ,103,
> -
> 62,67,111,109,109,117,110,105,116,121,114,101,108,105,103,105,111,117,115,1
> 08,
> -
> 111,99,97,116,105,111,110,115,67,111,109,109,105,116,116,101,101,98,117,105
> ,108,
> -
> 100,105,110,103,115,116,104,101,32,119,111,114,108,100,110,111,32,108,111,1
> 10,
> -
> 103,101,114,98,101,103,105,110,110,105,110,103,114,101,102,101,114,101,110,
> 99,
> -
> 101,99,97,110,110,111,116,32,98,101,102,114,101,113,117,101,110,99,121,116,
> 121,
> -
> 112,105,99,97,108,108,121,105,110,116,111,32,116,104,101,32,114,101,108,97,
> 116,
> -
> 105,118,101,59,114,101,99,111,114,100,105,110,103,112,114,101,115,105,100,1
> 01,
> -
> 110,116,105,110,105,116,105,97,108,108,121,116,101,99,104,110,105,113,117,1
> 01,
> -
> 116,104,101,32,111,116,104,101,114,105,116,32,99,97,110,32,98,101,101,120,1
> 05,
> -
> 115,116,101,110,99,101,117,110,100,101,114,108,105,110,101,116,104,105,115,
> 32,
> -
> 116,105,109,101,116,101,108,101,112,104,111,110,101,105,116,101,109,115,99,
> 111,
> -
> 112,101,112,114,97,99,116,105,99,101,115,97,100,118,97,110,116,97,103,101,4
> 1,59,
> -
> 114,101,116,117,114,110,32,70,111,114,32,111,116,104,101,114,112,114,111,11
> 8,105
> -
> ,100,105,110,103,100,101,109,111,99,114,97,99,121,98,111,116,104,32,116,104,
> 101,
> -
> 32,101,120,116,101,110,115,105,118,101,115,117,102,102,101,114,105,110,103,
> 115,
> -
> 117,112,112,111,114,116,101,100,99,111,109,112,117,116,101,114,115,32,102,1
> 17,
> -
> 110,99,116,105,111,110,112,114,97,99,116,105,99,97,108,115,97,105,100,32,11
> 6,104
> -
> ,97,116,105,116,32,109,97,121,32,98,101,69,110,103,108,105,115,104,60,47,102
> ,114
> -
> ,111,109,32,116,104,101,32,115,99,104,101,100,117,108,101,100,100,111,119,1
> 10,
> -
> 108,111,97,100,115,60,47,108,97,98,101,108,62,10,115,117,115,112,101,99,116,
> 101,
> -
> 100,109,97,114,103,105,110,58,32,48,115,112,105,114,105,116,117,97,108,60,4
> 7,104
> -
> ,101,97,100,62,10,10,109,105,99,114,111,115,111,102,116,103,114,97,100,117,9
> 7,
> -
> 108,108,121,100,105,115,99,117,115,115,101,100,104,101,32,98,101,99,97,109,
> 101,
> -
> 101,120,101,99,117,116,105,118,101,106,113,117,101,114,121,46,106,115,104,1
> 11,
> -
> 117,115,101,104,111,108,100,99,111,110,102,105,114,109,101,100,112,117,114,
> 99,
> -
> 104,97,115,101,100,108,105,116,101,114,97,108,108,121,100,101,115,116,114,1
> 11,
> -
> 121,101,100,117,112,32,116,111,32,116,104,101,118,97,114,105,97,116,105,111
> ,110,
> -
> 114,101,109,97,105,110,105,110,103,105,116,32,105,115,32,110,111,116,99,101
> ,110,
> -
> 116,117,114,105,101,115,74,97,112,97,110,101,115,101,32,97,109,111,110,103,
> 32,
> -
> 116,104,101,99,111,109,112,108,101,116,101,100,97,108,103,111,114,105,116,1
> 04,
> -
> 109,105,110,116,101,114,101,115,116,115,114,101,98,101,108,108,105,111,110,
> 117,
> -
> 110,100,101,102,105,110,101,100,101,110,99,111,117,114,97,103,101,114,101,1
> 15,
> -
> 105,122,97,98,108,101,105,110,118,111,108,118,105,110,103,115,101,110,115,1
> 05,
> -
> 116,105,118,101,117,110,105,118,101,114,115,97,108,112,114,111,118,105,115,
> 105,
> -
> 111,110,40,97,108,116,104,111,117,103,104,102,101,97,116,117,114,105,110,10
> 3,99,
> -
> 111,110,100,117,99,116,101,100,41,44,32,119,104,105,99,104,32,99,111,110,11
> 6,105
> -
> ,110,117,101,100,45,104,101,97,100,101,114,34,62,70,101,98,114,117,97,114,12
> 1,32
> -
> ,110,117,109,101,114,111,117,115,32,111,118,101,114,102,108,111,119,58,99,1
> 11,
> -
> 109,112,111,110,101,110,116,102,114,97,103,109,101,110,116,115,101,120,99,1
> 01,
> -
> 108,108,101,110,116,99,111,108,115,112,97,110,61,34,116,101,99,104,110,105,
> 99,97
> -
> ,108,110,101,97,114,32,116,104,101,32,65,100,118,97,110,99,101,100,32,115,11
> 1,
> -
> 117,114,99,101,32,111,102,101,120,112,114,101,115,115,101,100,72,111,110,10
> 3,32,
> -
> 75,111,110,103,32,70,97,99,101,98,111,111,107,109,117,108,116,105,112,108,1
> 01,32
> -
> ,109,101,99,104,97,110,105,115,109,101,108,101,118,97,116,105,111,110,111,1
> 02,
> -
> 102,101,110,115,105,118,101,60,47,102,111,114,109,62,10,9,115,112,111,110,1
> 15,
> -
> 111,114,101,100,100,111,99,117,109,101,110,116,46,111,114,32,38,113,117,111
> ,116,
> -
> 59,116,104,101,114,101,32,97,114,101,116,104,111,115,101,32,119,104,111,109
> ,111,
> -
> 118,101,109,101,110,116,115,112,114,111,99,101,115,115,101,115,100,105,102,
> 102,
> -
> 105,99,117,108,116,115,117,98,109,105,116,116,101,100,114,101,99,111,109,10
> 9,101
> -
> ,110,100,99,111,110,118,105,110,99,101,100,112,114,111,109,111,116,105,110,
> 103,
> -
> 34,32,119,105,100,116,104,61,34,46,114,101,112,108,97,99,101,40,99,108,97,11
> 5,
> -
> 115,105,99,97,108,99,111,97,108,105,116,105,111,110,104,105,115,32,102,105,
> 114,
> -
> 115,116,100,101,99,105,115,105,111,110,115,97,115,115,105,115,116,97,110,11
> 6,105
> -
> ,110,100,105,99,97,116,101,100,101,118,111,108,117,116,105,111,110,45,119,1
> 14,97
> -
> ,112,112,101,114,34,101,110,111,117,103,104,32,116,111,97,108,111,110,103,3
> 2,116
> -
> ,104,101,100,101,108,105,118,101,114,101,100,45,45,62,13,10,60,33,45,45,65,1
> 09,
> -
> 101,114,105,99,97,110,32,112,114,111,116,101,99,116,101,100,78,111,118,101,
> 109,
> -
> 98,101,114,32,60,47,115,116,121,108,101,62,60,102,117,114,110,105,116,117,1
> 14,
> -
> 101,73,110,116,101,114,110,101,116,32,32,111,110,98,108,117,114,61,34,115,1
> 17,
> -
> 115,112,101,110,100,101,100,114,101,99,105,112,105,101,110,116,98,97,115,10
> 1,100
> -
> ,32,111,110,32,77,111,114,101,111,118,101,114,44,97,98,111,108,105,115,104,1
> 01,
> -
> 100,99,111,108,108,101,99,116,101,100,119,101,114,101,32,109,97,100,101,101
> ,109,
> -
> 111,116,105,111,110,97,108,101,109,101,114,103,101,110,99,121,110,97,114,11
> 4,97,
> -
> 116,105,118,101,97,100,118,111,99,97,116,101,115,112,120,59,98,111,114,100,
> 101,
> -
> 114,99,111,109,109,105,116,116,101,100,100,105,114,61,34,108,116,114,34,101
> ,109,
> -
> 112,108,111,121,101,101,115,114,101,115,101,97,114,99,104,46,32,115,101,108
> ,101,
> -
> 99,116,101,100,115,117,99,99,101,115,115,111,114,99,117,115,116,111,109,101
> ,114,
> -
> 115,100,105,115,112,108,97,121,101,100,83,101,112,116,101,109,98,101,114,97
> ,100,
> -
> 100,67,108,97,115,115,40,70,97,99,101,98,111,111,107,32,115,117,103,103,101,
> 115,
> -
> 116,101,100,97,110,100,32,108,97,116,101,114,111,112,101,114,97,116,105,110
> ,103,
> -
> 101,108,97,98,111,114,97,116,101,83,111,109,101,116,105,109,101,115,73,110,
> 115,
> -
> 116,105,116,117,116,101,99,101,114,116,97,105,110,108,121,105,110,115,116,9
> 7,108
> -
> ,108,101,100,102,111,108,108,111,119,101,114,115,74,101,114,117,115,97,108,
> 101,
> -
> 109,116,104,101,121,32,104,97,118,101,99,111,109,112,117,116,105,110,103,10
> 3,101
> -
> ,110,101,114,97,116,101,100,112,114,111,118,105,110,99,101,115,103,117,97,1
> 14,97
> -
> ,110,116,101,101,97,114,98,105,116,114,97,114,121,114,101,99,111,103,110,10
> 5,122
> -
> ,101,119,97,110,116,101,100,32,116,111,112,120,59,119,105,100,116,104,58,11
> 6,104
> -
> ,101,111,114,121,32,111,102,98,101,104,97,118,105,111,117,114,87,104,105,10
> 8,101
> -
> ,32,116,104,101,101,115,116,105,109,97,116,101,100,98,101,103,97,110,32,116,
> 111,
> -
> 32,105,116,32,98,101,99,97,109,101,109,97,103,110,105,116,117,100,101,109,1
> 17,
> -
> 115,116,32,104,97,118,101,109,111,114,101,32,116,104,97,110,68,105,114,101,
> 99,
> -
> 116,111,114,121,101,120,116,101,110,115,105,111,110,115,101,99,114,101,116,
> 97,
> -
> 114,121,110,97,116,117,114,97,108,108,121,111,99,99,117,114,114,105,110,103
> ,118,
> -
> 97,114,105,97,98,108,101,115,103,105,118,101,110,32,116,104,101,112,108,97,
> 116,
> -
> 102,111,114,109,46,60,47,108,97,98,101,108,62,60,102,97,105,108,101,100,32,1
> 16,
> -
> 111,99,111,109,112,111,117,110,100,115,107,105,110,100,115,32,111,102,32,11
> 5,111
> -
> ,99,105,101,116,105,101,115,97,108,111,110,103,115,105,100,101,32,45,45,38,1
> 03,
> -
> 116,59,10,10,115,111,117,116,104,119,101,115,116,116,104,101,32,114,105,103
> ,104,
> -
> 116,114,97,100,105,97,116,105,111,110,109,97,121,32,104,97,118,101,32,117,1
> 10,
> -
> 101,115,99,97,112,101,40,115,112,111,107,101,110,32,105,110,34,32,104,114,1
> 01,
> -
> 102,61,34,47,112,114,111,103,114,97,109,109,101,111,110,108,121,32,116,104,
> 101,
> -
> 32,99,111,109,101,32,102,114,111,109,100,105,114,101,99,116,111,114,121,98,
> 117,
> -
> 114,105,101,100,32,105,110,97,32,115,105,109,105,108,97,114,116,104,101,121
> ,32,
> -
> 119,101,114,101,60,47,102,111,110,116,62,60,47,78,111,114,119,101,103,105,9
> 7,110
> -
> ,115,112,101,99,105,102,105,101,100,112,114,111,100,117,99,105,110,103,112,
> 97,
> -
> 115,115,101,110,103,101,114,40,110,101,119,32,68,97,116,101,116,101,109,112
> ,111,
> -
> 114,97,114,121,102,105,99,116,105,111,110,97,108,65,102,116,101,114,32,116,
> 104,
> -
> 101,101,113,117,97,116,105,111,110,115,100,111,119,110,108,111,97,100,46,11
> 4,101
> -
> ,103,117,108,97,114,108,121,100,101,118,101,108,111,112,101,114,97,98,111,1
> 18,
> -
> 101,32,116,104,101,108,105,110,107,101,100,32,116,111,112,104,101,110,111,1
> 09,
> -
> 101,110,97,112,101,114,105,111,100,32,111,102,116,111,111,108,116,105,112,3
> 4,62,
> -
> 115,117,98,115,116,97,110,99,101,97,117,116,111,109,97,116,105,99,97,115,11
> 2,101
> -
> ,99,116,32,111,102,65,109,111,110,103,32,116,104,101,99,111,110,110,101,99,1
> 16,
> -
> 101,100,101,115,116,105,109,97,116,101,115,65,105,114,32,70,111,114,99,101,
> 115,
> -
> 121,115,116,101,109,32,111,102,111,98,106,101,99,116,105,118,101,105,109,10
> 9,101
> -
> ,100,105,97,116,101,109,97,107,105,110,103,32,105,116,112,97,105,110,116,10
> 5,110
> -
> ,103,115,99,111,110,113,117,101,114,101,100,97,114,101,32,115,116,105,108,1
> 08,
> -
> 112,114,111,99,101,100,117,114,101,103,114,111,119,116,104,32,111,102,104,1
> 01,97
> -
> ,100,101,100,32,98,121,69,117,114,111,112,101,97,110,32,100,105,118,105,115,
> 105,
> -
> 111,110,115,109,111,108,101,99,117,108,101,115,102,114,97,110,99,104,105,11
> 5,101
> -
> ,105,110,116,101,110,116,105,111,110,97,116,116,114,97,99,116,101,100,99,10
> 4,105
> -
> ,108,100,104,111,111,100,97,108,115,111,32,117,115,101,100,100,101,100,105,
> 99,97
> -
> ,116,101,100,115,105,110,103,97,112,111,114,101,100,101,103,114,101,101,32,
> 111,
> -
> 102,102,97,116,104,101,114,32,111,102,99,111,110,102,108,105,99,116,115,60,
> 47,97
> -
> ,62,60,47,112,62,10,99,97,109,101,32,102,114,111,109,119,101,114,101,32,117,
> 115,
> -
> 101,100,110,111,116,101,32,116,104,97,116,114,101,99,101,105,118,105,110,10
> 3,69,
> -
> 120,101,99,117,116,105,118,101,101,118,101,110,32,109,111,114,101,97,99,99,
> 101,
> -
> 115,115,32,116,111,99,111,109,109,97,110,100,101,114,80,111,108,105,116,105
> ,99,
> -
> 97,108,109,117,115,105,99,105,97,110,115,100,101,108,105,99,105,111,117,115
> ,112,
> -
> 114,105,115,111,110,101,114,115,97,100,118,101,110,116,32,111,102,85,84,70,
> 45,56
> -
> ,34,32,47,62,60,33,91,67,68,65,84,65,91,34,62,67,111,110,116,97,99,116,83,111,
> -
> 117,116,104,101,114,110,32,98,103,99,111,108,111,114,61,34,115,101,114,105,
> 101,
> -
> 115,32,111,102,46,32,73,116,32,119,97,115,32,105,110,32,69,117,114,111,112,1
> 01,
> -
> 112,101,114,109,105,116,116,101,100,118,97,108,105,100,97,116,101,46,97,112
> ,112,
> -
> 101,97,114,105,110,103,111,102,102,105,99,105,97,108,115,115,101,114,105,11
> 1,117
> -
> ,115,108,121,45,108,97,110,103,117,97,103,101,105,110,105,116,105,97,116,10
> 1,100
> -
> ,101,120,116,101,110,100,105,110,103,108,111,110,103,45,116,101,114,109,105
> ,110,
> -
> 102,108,97,116,105,111,110,115,117,99,104,32,116,104,97,116,103,101,116,67,
> 111,
> -
> 111,107,105,101,109,97,114,107,101,100,32,98,121,60,47,98,117,116,116,111,1
> 10,62
> -
> ,105,109,112,108,101,109,101,110,116,98,117,116,32,105,116,32,105,115,105,1
> 10,99
> -
> ,114,101,97,115,101,115,100,111,119,110,32,116,104,101,32,114,101,113,117,1
> 05,
> -
> 114,105,110,103,100,101,112,101,110,100,101,110,116,45,45,62,10,60,33,45,45,
> 32,
> -
> 105,110,116,101,114,118,105,101,119,87,105,116,104,32,116,104,101,32,99,111
> ,112,
> -
> 105,101,115,32,111,102,99,111,110,115,101,110,115,117,115,119,97,115,32,98,
> 117,
> -
> 105,108,116,86,101,110,101,122,117,101,108,97,40,102,111,114,109,101,114,10
> 8,121
> -
> ,116,104,101,32,115,116,97,116,101,112,101,114,115,111,110,110,101,108,115,
> 116,
> -
> 114,97,116,101,103,105,99,102,97,118,111,117,114,32,111,102,105,110,118,101
> ,110,
> -
> 116,105,111,110,87,105,107,105,112,101,100,105,97,99,111,110,116,105,110,10
> 1,110
> -
> ,116,118,105,114,116,117,97,108,108,121,119,104,105,99,104,32,119,97,115,11
> 2,114
> -
> ,105,110,99,105,112,108,101,67,111,109,112,108,101,116,101,32,105,100,101,1
> 10,
> -
> 116,105,99,97,108,115,104,111,119,32,116,104,97,116,112,114,105,109,105,116
> ,105,
> -
> 118,101,97,119,97,121,32,102,114,111,109,109,111,108,101,99,117,108,97,114,
> 112,
> -
> 114,101,99,105,115,101,108,121,100,105,115,115,111,108,118,101,100,85,110,1
> 00,
> -
> 101,114,32,116,104,101,118,101,114,115,105,111,110,61,34,62,38,110,98,115,1
> 12,59
> -
> ,60,47,73,116,32,105,115,32,116,104,101,32,84,104,105,115,32,105,115,32,119,
> 105,
> -
> 108,108,32,104,97,118,101,111,114,103,97,110,105,115,109,115,115,111,109,10
> 1,32,
> -
> 116,105,109,101,70,114,105,101,100,114,105,99,104,119,97,115,32,102,105,114
> ,115,
> -
> 116,116,104,101,32,111,110,108,121,32,102,97,99,116,32,116,104,97,116,102,1
> 11,
> -
> 114,109,32,105,100,61,34,112,114,101,99,101,100,105,110,103,84,101,99,104,1
> 10,
> -
> 105,99,97,108,112,104,121,115,105,99,105,115,116,111,99,99,117,114,115,32,1
> 05,
> -
> 110,110,97,118,105,103,97,116,111,114,115,101,99,116,105,111,110,34,62,115,
> 112,
> -
> 97,110,32,105,100,61,34,115,111,117,103,104,116,32,116,111,98,101,108,111,1
> 19,32
> -
> ,116,104,101,115,117,114,118,105,118,105,110,103,125,60,47,115,116,121,108,
> 101,
> -
> 62,104,105,115,32,100,101,97,116,104,97,115,32,105,110,32,116,104,101,99,97,
> 117,
> -
> 115,101,100,32,98,121,112,97,114,116,105,97,108,108,121,101,120,105,115,116
> ,105,
> -
> 110,103,32,117,115,105,110,103,32,116,104,101,119,97,115,32,103,105,118,101
> ,110,
> -
> 97,32,108,105,115,116,32,111,102,108,101,118,101,108,115,32,111,102,110,111
> ,116,
> -
> 105,111,110,32,111,102,79,102,102,105,99,105,97,108,32,100,105,115,109,105,
> 115,
> -
> 115,101,100,115,99,105,101,110,116,105,115,116,114,101,115,101,109,98,108,1
> 01,
> -
> 115,100,117,112,108,105,99,97,116,101,101,120,112,108,111,115,105,118,101,1
> 14,
> -
> 101,99,111,118,101,114,101,100,97,108,108,32,111,116,104,101,114,103,97,108
> ,108,
> -
> 101,114,105,101,115,123,112,97,100,100,105,110,103,58,112,101,111,112,108,1
> 01,32
> -
> ,111,102,114,101,103,105,111,110,32,111,102,97,100,100,114,101,115,115,101,
> 115,
> -
> 97,115,115,111,99,105,97,116,101,105,109,103,32,97,108,116,61,34,105,110,32,
> 109,
> -
> 111,100,101,114,110,115,104,111,117,108,100,32,98,101,109,101,116,104,111,1
> 00,32
> -
> ,111,102,114,101,112,111,114,116,105,110,103,116,105,109,101,115,116,97,109
> ,112,
> -
> 110,101,101,100,101,100,32,116,111,116,104,101,32,71,114,101,97,116,114,101
> ,103,
> -
> 97,114,100,105,110,103,115,101,101,109,101,100,32,116,111,118,105,101,119,1
> 01,
> -
> 100,32,97,115,105,109,112,97,99,116,32,111,110,105,100,101,97,32,116,104,97,
> 116,
> -
> 116,104,101,32,87,111,114,108,100,104,101,105,103,104,116,32,111,102,101,12
> 0,112
> -
> ,97,110,100,105,110,103,84,104,101,115,101,32,97,114,101,99,117,114,114,101,
> 110,
> -
> 116,34,62,99,97,114,101,102,117,108,108,121,109,97,105,110,116,97,105,110,1
> 15,99
> -
> ,104,97,114,103,101,32,111,102,67,108,97,115,115,105,99,97,108,97,100,100,11
> 4,
> -
> 101,115,115,101,100,112,114,101,100,105,99,116,101,100,111,119,110,101,114,
> 115,
> -
> 104,105,112,60,100,105,118,32,105,100,61,34,114,105,103,104,116,34,62,13,10,
> 114,
> -
> 101,115,105,100,101,110,99,101,108,101,97,118,101,32,116,104,101,99,111,110
> ,116,
> -
> 101,110,116,34,62,97,114,101,32,111,102,116,101,110,32,32,125,41,40,41,59,13
> ,10,
> -
> 112,114,111,98,97,98,108,121,32,80,114,111,102,101,115,115,111,114,45,98,11
> 7,116
> -
> ,116,111,110,34,32,114,101,115,112,111,110,100,101,100,115,97,121,115,32,11
> 6,104
> -
> ,97,116,104,97,100,32,116,111,32,98,101,112,108,97,99,101,100,32,105,110,72,
> 117,
> -
> 110,103,97,114,105,97,110,115,116,97,116,117,115,32,111,102,115,101,114,118
> ,101,
> -
> 115,32,97,115,85,110,105,118,101,114,115,97,108,101,120,101,99,117,116,105,
> 111,
> -
> 110,97,103,103,114,101,103,97,116,101,102,111,114,32,119,104,105,99,104,105
> ,110,
> -
> 102,101,99,116,105,111,110,97,103,114,101,101,100,32,116,111,104,111,119,10
> 1,118
> -
> ,101,114,44,32,112,111,112,117,108,97,114,34,62,112,108,97,99,101,100,32,111
> ,110
> -
> ,99,111,110,115,116,114,117,99,116,101,108,101,99,116,111,114,97,108,115,12
> 1,109
> -
> ,98,111,108,32,111,102,105,110,99,108,117,100,105,110,103,114,101,116,117,1
> 14,
> -
> 110,32,116,111,97,114,99,104,105,116,101,99,116,67,104,114,105,115,116,105,
> 97,
> -
> 110,112,114,101,118,105,111,117,115,32,108,105,118,105,110,103,32,105,110,1
> 01,97
> -
> ,115,105,101,114,32,116,111,112,114,111,102,101,115,115,111,114,10,38,108,1
> 16,59
> -
> ,33,45,45,32,101,102,102,101,99,116,32,111,102,97,110,97,108,121,116,105,99,
> 115,
> -
> 119,97,115,32,116,97,107,101,110,119,104,101,114,101,32,116,104,101,116,111
> ,111,
> -
> 107,32,111,118,101,114,98,101,108,105,101,102,32,105,110,65,102,114,105,107
> ,97,
> -
> 97,110,115,97,115,32,102,97,114,32,97,115,112,114,101,118,101,110,116,101,1
> 00,
> -
> 119,111,114,107,32,119,105,116,104,97,32,115,112,101,99,105,97,108,60,102,1
> 05,
> -
> 101,108,100,115,101,116,67,104,114,105,115,116,109,97,115,82,101,116,114,10
> 5,101
> -
> ,118,101,100,10,10,73,110,32,116,104,101,32,98,97,99,107,32,105,110,116,111,
> 110,
> -
> 111,114,116,104,101,97,115,116,109,97,103,97,122,105,110,101,115,62,60,115,
> 116,
> -
> 114,111,110,103,62,99,111,109,109,105,116,116,101,101,103,111,118,101,114,1
> 10,
> -
> 105,110,103,103,114,111,117,112,115,32,111,102,115,116,111,114,101,100,32,1
> 05,
> -
> 110,101,115,116,97,98,108,105,115,104,97,32,103,101,110,101,114,97,108,105,
> 116,
> -
> 115,32,102,105,114,115,116,116,104,101,105,114,32,111,119,110,112,111,112,1
> 17,
> -
> 108,97,116,101,100,97,110,32,111,98,106,101,99,116,67,97,114,105,98,98,101,9
> 7,
> -
> 110,97,108,108,111,119,32,116,104,101,100,105,115,116,114,105,99,116,115,11
> 9,105
> -
> ,115,99,111,110,115,105,110,108,111,99,97,116,105,111,110,46,59,32,119,105,1
> 00,
> -
> 116,104,58,32,105,110,104,97,98,105,116,101,100,83,111,99,105,97,108,105,11
> 5,116
> -
> ,74,97,110,117,97,114,121,32,49,60,47,102,111,111,116,101,114,62,115,105,109
> ,105
> -
> ,108,97,114,108,121,99,104,111,105,99,101,32,111,102,116,104,101,32,115,97,1
> 09,
> -
> 101,32,115,112,101,99,105,102,105,99,32,98,117,115,105,110,101,115,115,32,8
> 4,104
> -
> ,101,32,102,105,114,115,116,46,108,101,110,103,116,104,59,32,100,101,115,10
> 5,114
> -
> ,101,32,116,111,100,101,97,108,32,119,105,116,104,115,105,110,99,101,32,116,
> 104,
> -
> 101,117,115,101,114,65,103,101,110,116,99,111,110,99,101,105,118,101,100,10
> 5,110
> -
> ,100,101,120,46,112,104,112,97,115,32,38,113,117,111,116,59,101,110,103,97,1
> 03,
> -
> 101,32,105,110,114,101,99,101,110,116,108,121,44,102,101,119,32,121,101,97,
> 114,
> -
> 115,119,101,114,101,32,97,108,115,111,10,60,104,101,97,100,62,10,60,101,100,
> 105,
> -
> 116,101,100,32,98,121,97,114,101,32,107,110,111,119,110,99,105,116,105,101,
> 115,
> -
> 32,105,110,97,99,99,101,115,115,107,101,121,99,111,110,100,101,109,110,101,
> 100,
> -
> 97,108,115,111,32,104,97,118,101,115,101,114,118,105,99,101,115,44,102,97,1
> 09,
> -
> 105,108,121,32,111,102,83,99,104,111,111,108,32,111,102,99,111,110,118,101,
> 114,
> -
> 116,101,100,110,97,116,117,114,101,32,111,102,32,108,97,110,103,117,97,103,
> 101,
> -
> 109,105,110,105,115,116,101,114,115,60,47,111,98,106,101,99,116,62,116,104,
> 101,
> -
> 114,101,32,105,115,32,97,32,112,111,112,117,108,97,114,115,101,113,117,101,
> 110,
> -
> 99,101,115,97,100,118,111,99,97,116,101,100,84,104,101,121,32,119,101,114,1
> 01,97
> -
> ,110,121,32,111,116,104,101,114,108,111,99,97,116,105,111,110,61,101,110,11
> 6,101
> -
> ,114,32,116,104,101,109,117,99,104,32,109,111,114,101,114,101,102,108,101,9
> 9,116
> -
> ,101,100,119,97,115,32,110,97,109,101,100,111,114,105,103,105,110,97,108,32,
> 97,
> -
> 32,116,121,112,105,99,97,108,119,104,101,110,32,116,104,101,121,101,110,103
> ,105,
> -
> 110,101,101,114,115,99,111,117,108,100,32,110,111,116,114,101,115,105,100,1
> 01,
> -
> 110,116,115,119,101,100,110,101,115,100,97,121,116,104,101,32,116,104,105,1
> 14,
> -
> 100,32,112,114,111,100,117,99,116,115,74,97,110,117,97,114,121,32,50,119,10
> 4,97,
> -
> 116,32,116,104,101,121,97,32,99,101,114,116,97,105,110,114,101,97,99,116,10
> 5,111
> -
> ,110,115,112,114,111,99,101,115,115,111,114,97,102,116,101,114,32,104,105,1
> 15,
> -
> 116,104,101,32,108,97,115,116,32,99,111,110,116,97,105,110,101,100,34,62,60,
> 47,
> -
> 100,105,118,62,10,60,47,97,62,60,47,116,100,62,100,101,112,101,110,100,32,11
> 1,
> -
> 110,115,101,97,114,99,104,34,62,10,112,105,101,99,101,115,32,111,102,99,111,
> 109,
> -
> 112,101,116,105,110,103,82,101,102,101,114,101,110,99,101,116,101,110,110,1
> 01,
> -
> 115,115,101,101,119,104,105,99,104,32,104,97,115,32,118,101,114,115,105,111
> ,110,
> -
> 61,60,47,115,112,97,110,62,32,60,60,47,104,101,97,100,101,114,62,103,105,118
> ,101
> -
> ,115,32,116,104,101,104,105,115,116,111,114,105,97,110,118,97,108,117,101,6
> 1,34,
> -
> 34,62,112,97,100,100,105,110,103,58,48,118,105,101,119,32,116,104,97,116,11
> 6,111
> -
> ,103,101,116,104,101,114,44,116,104,101,32,109,111,115,116,32,119,97,115,32,
> 102,
> -
> 111,117,110,100,115,117,98,115,101,116,32,111,102,97,116,116,97,99,107,32,1
> 11,
> -
> 110,99,104,105,108,100,114,101,110,44,112,111,105,110,116,115,32,111,102,11
> 2,101
> -
> ,114,115,111,110,97,108,32,112,111,115,105,116,105,111,110,58,97,108,108,10
> 1,103
> -
> ,101,100,108,121,67,108,101,118,101,108,97,110,100,119,97,115,32,108,97,116,
> 101,
> -
> 114,97,110,100,32,97,102,116,101,114,97,114,101,32,103,105,118,101,110,119,
> 97,
> -
> 115,32,115,116,105,108,108,115,99,114,111,108,108,105,110,103,100,101,115,1
> 05,
> -
> 103,110,32,111,102,109,97,107,101,115,32,116,104,101,109,117,99,104,32,108,
> 101,
> -
> 115,115,65,109,101,114,105,99,97,110,115,46,10,10,65,102,116,101,114,32,44,3
> 2,98
> -
> ,117,116,32,116,104,101,77,117,115,101,117,109,32,111,102,108,111,117,105,1
> 15,
> -
> 105,97,110,97,40,102,114,111,109,32,116,104,101,109,105,110,110,101,115,111
> ,116,
> -
> 97,112,97,114,116,105,99,108,101,115,97,32,112,114,111,99,101,115,115,68,11
> 1,109
> -
> ,105,110,105,99,97,110,118,111,108,117,109,101,32,111,102,114,101,116,117,1
> 14,
> -
> 110,105,110,103,100,101,102,101,110,115,105,118,101,48,48,112,120,124,114,1
> 05,
> -
> 103,104,109,97,100,101,32,102,114,111,109,109,111,117,115,101,111,118,101,1
> 14,34
> -
> ,32,115,116,121,108,101,61,34,115,116,97,116,101,115,32,111,102,40,119,104,1
> 05,
> -
> 99,104,32,105,115,99,111,110,116,105,110,117,101,115,70,114,97,110,99,105,1
> 15,99
> -
> ,111,98,117,105,108,100,105,110,103,32,119,105,116,104,111,117,116,32,97,11
> 9,105
> -
> ,116,104,32,115,111,109,101,119,104,111,32,119,111,117,108,100,97,32,102,11
> 1,114
> -
> ,109,32,111,102,97,32,112,97,114,116,32,111,102,98,101,102,111,114,101,32,10
> 5,
> -
> 116,107,110,111,119,110,32,97,115,32,32,83,101,114,118,105,99,101,115,108,1
> 11,99
> -
> ,97,116,105,111,110,32,97,110,100,32,111,102,116,101,110,109,101,97,115,117,
> 114,
> -
> 105,110,103,97,110,100,32,105,116,32,105,115,112,97,112,101,114,98,97,99,10
> 7,118
> -
> ,97,108,117,101,115,32,111,102,13,10,60,116,105,116,108,101,62,61,32,119,105
> ,110
> -
> ,100,111,119,46,100,101,116,101,114,109,105,110,101,101,114,38,113,117,111,
> 116,
> -
> 59,32,112,108,97,121,101,100,32,98,121,97,110,100,32,101,97,114,108,121,60,4
> 7,99
> -
> ,101,110,116,101,114,62,102,114,111,109,32,116,104,105,115,116,104,101,32,1
> 16,
> -
> 104,114,101,101,112,111,119,101,114,32,97,110,100,111,102,32,38,113,117,111
> ,116,
> -
> 59,105,110,110,101,114,72,84,77,76,60,97,32,104,114,101,102,61,34,121,58,105
> ,110
> -
> ,108,105,110,101,59,67,104,117,114,99,104,32,111,102,116,104,101,32,101,118,
> 101,
> -
> 110,116,118,101,114,121,32,104,105,103,104,111,102,102,105,99,105,97,108,32
> ,45,
> -
> 104,101,105,103,104,116,58,32,99,111,110,116,101,110,116,61,34,47,99,103,10
> 5,45,
> -
> 98,105,110,47,116,111,32,99,114,101,97,116,101,97,102,114,105,107,97,97,110,
> 115,
> -
> 101,115,112,101,114,97,110,116,111,102,114,97,110,195,167,97,105,115,108,97
> ,116,
> -
> 118,105,101,197,161,117,108,105,101,116,117,118,105,197,179,196,140,101,19
> 7,161,
> -
> 116,105,110,97,196,141,101,197,161,116,105,110,97,224,185,132,224,184,151,2
> 24,
> -
> 184,162,230,151,165,230,156,172,232,170,158,231,174,128,228,189,147,229,17
> 3,151,
> -
> 231,185,129,233,171,148,229,173,151,237,149,156,234,181,173,236,150,180,22
> 8,184,
> -
> 186,228,187,128,228,185,136,232,174,161,231,174,151,230,156,186,231,172,14
> 8,232,
> -
> 174,176,230,156,172,232,168,142,232,171,150,229,141,128,230,156,141,229,13
> 8,161,
> -
> 229,153,168,228,186,146,232,129,148,231,189,145,230,136,191,229,156,176,22
> 8,186,
> -
> 167,228,191,177,228,185,144,233,131,168,229,135,186,231,137,136,231,164,19
> 0,230,
> -
> 142,146,232,161,140,230,166,156,233,131,168,232,144,189,230,160,188,232,19
> 1,155,
> -
> 228,184,128,230,173,165,230,148,175,228,187,152,229,174,157,233,170,140,23
> 2,175,
> -
> 129,231,160,129,229,167,148,229,145,152,228,188,154,230,149,176,230,141,17
> 4,229,
> -
> 186,147,230,182,136,232,180,185,232,128,133,229,138,158,229,133,172,229,17
> 4,164,
> -
> 232,174,168,232,174,186,229,140,186,230,183,177,229,156,179,229,184,130,23
> 0,146,
> -
> 173,230,148,190,229,153,168,229,140,151,228,186,172,229,184,130,229,164,16
> 7,229,
> -
> 173,166,231,148,159,232,182,138,230,157,165,232,182,138,231,174,161,231,14
> 4,134,
> -
> 229,145,152,228,191,161,230,129,175,231,189,145,115,101,114,118,105,99,105,
> 111,
> -
> 115,97,114,116,195,173,99,117,108,111,97,114,103,101,110,116,105,110,97,98,
> 97,
> -
> 114,99,101,108,111,110,97,99,117,97,108,113,117,105,101,114,112,117,98,108,
> 105,
> -
> 99,97,100,111,112,114,111,100,117,99,116,111,115,112,111,108,195,173,116,10
> 5,99,
> -
> 97,114,101,115,112,117,101,115,116,97,119,105,107,105,112,101,100,105,97,11
> 5,105
> -
> ,103,117,105,101,110,116,101,98,195,186,115,113,117,101,100,97,99,111,109,1
> 17,
> -
> 110,105,100,97,100,115,101,103,117,114,105,100,97,100,112,114,105,110,99,10
> 5,112
> -
> ,97,108,112,114,101,103,117,110,116,97,115,99,111,110,116,101,110,105,100,1
> 11,
> -
> 114,101,115,112,111,110,100,101,114,118,101,110,101,122,117,101,108,97,112,
> 114,
> -
> 111,98,108,101,109,97,115,100,105,99,105,101,109,98,114,101,114,101,108,97,
> 99,
> -
> 105,195,179,110,110,111,118,105,101,109,98,114,101,115,105,109,105,108,97,1
> 14,
> -
> 101,115,112,114,111,121,101,99,116,111,115,112,114,111,103,114,97,109,97,11
> 5,105
> -
> ,110,115,116,105,116,117,116,111,97,99,116,105,118,105,100,97,100,101,110,9
> 9,117
> -
> ,101,110,116,114,97,101,99,111,110,111,109,195,173,97,105,109,195,161,103,1
> 01,
> -
> 110,101,115,99,111,110,116,97,99,116,97,114,100,101,115,99,97,114,103,97,11
> 4,110
> -
> ,101,99,101,115,97,114,105,111,97,116,101,110,99,105,195,179,110,116,101,10
> 8,195
> -
> ,169,102,111,110,111,99,111,109,105,115,105,195,179,110,99,97,110,99,105,11
> 1,110
> -
> ,101,115,99,97,112,97,99,105,100,97,100,101,110,99,111,110,116,114,97,114,97
> ,110
> -
> ,195,161,108,105,115,105,115,102,97,118,111,114,105,116,111,115,116,195,169
> ,114,
> -
> 109,105,110,111,115,112,114,111,118,105,110,99,105,97,101,116,105,113,117,1
> 01,
> -
> 116,97,115,101,108,101,109,101,110,116,111,115,102,117,110,99,105,111,110,1
> 01,
> -
> 115,114,101,115,117,108,116,97,100,111,99,97,114,195,161,99,116,101,114,112
> ,114,
> -
> 111,112,105,101,100,97,100,112,114,105,110,99,105,112,105,111,110,101,99,10
> 1,115
> -
> ,105,100,97,100,109,117,110,105,99,105,112,97,108,99,114,101,97,99,105,195,1
> 79,
> -
> 110,100,101,115,99,97,114,103,97,115,112,114,101,115,101,110,99,105,97,99,1
> 11,
> -
> 109,101,114,99,105,97,108,111,112,105,110,105,111,110,101,115,101,106,101,1
> 14,99
> -
> ,105,99,105,111,101,100,105,116,111,114,105,97,108,115,97,108,97,109,97,110,
> 99,
> -
> 97,103,111,110,122,195,161,108,101,122,100,111,99,117,109,101,110,116,111,1
> 12,
> -
> 101,108,195,173,99,117,108,97,114,101,99,105,101,110,116,101,115,103,101,11
> 0,101
> -
> ,114,97,108,101,115,116,97,114,114,97,103,111,110,97,112,114,195,161,99,116,
> 105,
> -
> 99,97,110,111,118,101,100,97,100,101,115,112,114,111,112,117,101,115,116,97
> ,112,
> -
> 97,99,105,101,110,116,101,115,116,195,169,99,110,105,99,97,115,111,98,106,1
> 01,
> -
> 116,105,118,111,115,99,111,110,116,97,99,116,111,115,224,164,174,224,165,13
> 5,224
> -
> ,164,130,224,164,178,224,164,191,224,164,143,224,164,185,224,165,136,224,16
> 4,130
> -
> ,224,164,151,224,164,175,224,164,190,224,164,184,224,164,190,224,164,165,22
> 4,164
> -
> ,143,224,164,181,224,164,130,224,164,176,224,164,185,224,165,135,224,164,14
> 9,224
> -
> ,165,139,224,164,136,224,164,149,224,165,129,224,164,155,224,164,176,224,16
> 4,185
> -
> ,224,164,190,224,164,172,224,164,190,224,164,166,224,164,149,224,164,185,22
> 4,164
> -
> ,190,224,164,184,224,164,173,224,165,128,224,164,185,224,165,129,224,164,14
> 3,224
> -
> ,164,176,224,164,185,224,165,128,224,164,174,224,165,136,224,164,130,224,16
> 4,166
> -
> ,224,164,191,224,164,168,224,164,172,224,164,190,224,164,164,100,105,112,10
> 8,111
> -
> ,100,111,99,115,224,164,184,224,164,174,224,164,175,224,164,176,224,165,130
> ,224,
> -
> 164,170,224,164,168,224,164,190,224,164,174,224,164,170,224,164,164,224,16
> 4,190,
> -
> 224,164,171,224,164,191,224,164,176,224,164,148,224,164,184,224,164,164,22
> 4,164,
> -
> 164,224,164,176,224,164,185,224,164,178,224,165,139,224,164,151,224,164,18
> 5,224,
> -
> 165,129,224,164,134,224,164,172,224,164,190,224,164,176,224,164,166,224,16
> 5,135,
> -
> 224,164,182,224,164,185,224,165,129,224,164,136,224,164,150,224,165,135,22
> 4,164,
> -
> 178,224,164,175,224,164,166,224,164,191,224,164,149,224,164,190,224,164,17
> 4,224,
> -
> 164,181,224,165,135,224,164,172,224,164,164,224,165,128,224,164,168,224,16
> 4,172,
> -
> 224,165,128,224,164,154,224,164,174,224,165,140,224,164,164,224,164,184,22
> 4,164,
> -
> 190,224,164,178,224,164,178,224,165,135,224,164,150,224,164,156,224,165,13
> 7,224,
> -
> 164,172,224,164,174,224,164,166,224,164,166,224,164,164,224,164,165,224,16
> 4,190,
> -
> 224,164,168,224,164,185,224,165,128,224,164,182,224,164,185,224,164,176,22
> 4,164,
> -
> 133,224,164,178,224,164,151,224,164,149,224,164,173,224,165,128,224,164,16
> 8,224,
> -
> 164,151,224,164,176,224,164,170,224,164,190,224,164,184,224,164,176,224,16
> 4,190,
> -
> 224,164,164,224,164,149,224,164,191,224,164,143,224,164,137,224,164,184,22
> 4,165,
> -
> 135,224,164,151,224,164,175,224,165,128,224,164,185,224,165,130,224,164,12
> 9,224,
> -
> 164,134,224,164,151,224,165,135,224,164,159,224,165,128,224,164,174,224,16
> 4,150,
> -
> 224,165,139,224,164,156,224,164,149,224,164,190,224,164,176,224,164,133,22
> 4,164,
> -
> 173,224,165,128,224,164,151,224,164,175,224,165,135,224,164,164,224,165,12
> 9,224,
> -
> 164,174,224,164,181,224,165,139,224,164,159,224,164,166,224,165,135,224,16
> 4,130,
> -
> 224,164,133,224,164,151,224,164,176,224,164,144,224,164,184,224,165,135,22
> 4,164,
> -
> 174,224,165,135,224,164,178,224,164,178,224,164,151,224,164,190,224,164,18
> 5,224,
> -
> 164,190,224,164,178,224,164,138,224,164,170,224,164,176,224,164,154,224,16
> 4,190,
> -
> 224,164,176,224,164,144,224,164,184,224,164,190,224,164,166,224,165,135,22
> 4,164,
> -
> 176,224,164,156,224,164,191,224,164,184,224,164,166,224,164,191,224,164,17
> 8,224,
> -
> 164,172,224,164,130,224,164,166,224,164,172,224,164,168,224,164,190,224,16
> 4,185,
> -
> 224,165,130,224,164,130,224,164,178,224,164,190,224,164,150,224,164,156,22
> 4,165,
> -
> 128,224,164,164,224,164,172,224,164,159,224,164,168,224,164,174,224,164,19
> 1,224,
> -
> 164,178,224,164,135,224,164,184,224,165,135,224,164,134,224,164,168,224,16
> 5,135,
> -
> 224,164,168,224,164,175,224,164,190,224,164,149,224,165,129,224,164,178,22
> 4,164,
> -
> 178,224,165,137,224,164,151,224,164,173,224,164,190,224,164,151,224,164,17
> 6,224,
> -
> 165,135,224,164,178,224,164,156,224,164,151,224,164,185,224,164,176,224,16
> 4,190,
> -
> 224,164,174,224,164,178,224,164,151,224,165,135,224,164,170,224,165,135,22
> 4,164,
> -
> 156,224,164,185,224,164,190,224,164,165,224,164,135,224,164,184,224,165,12
> 8,224,
> -
> 164,184,224,164,185,224,165,128,224,164,149,224,164,178,224,164,190,224,16
> 4,160,
> -
> 224,165,128,224,164,149,224,164,185,224,164,190,224,164,129,224,164,166,22
> 4,165,
> -
> 130,224,164,176,224,164,164,224,164,185,224,164,164,224,164,184,224,164,19
> 0,224,
> -
> 164,164,224,164,175,224,164,190,224,164,166,224,164,134,224,164,175,224,16
> 4,190,
> -
> 224,164,170,224,164,190,224,164,149,224,164,149,224,165,140,224,164,168,22
> 4,164,
> -
> 182,224,164,190,224,164,174,224,164,166,224,165,135,224,164,150,224,164,17
> 5,224,
> -
> 164,185,224,165,128,224,164,176,224,164,190,224,164,175,224,164,150,224,16
> 5,129,
> -
> 224,164,166,224,164,178,224,164,151,224,165,128,99,97,116,101,103,111,114,1
> 05,
> -
> 101,115,101,120,112,101,114,105,101,110,99,101,60,47,116,105,116,108,101,62
> ,13,
> -
> 10,67,111,112,121,114,105,103,104,116,32,106,97,118,97,115,99,114,105,112,1
> 16,99
> -
> ,111,110,100,105,116,105,111,110,115,101,118,101,114,121,116,104,105,110,10
> 3,60,
> -
> 112,32,99,108,97,115,115,61,34,116,101,99,104,110,111,108,111,103,121,98,97,
> 99,
> -
> 107,103,114,111,117,110,100,60,97,32,99,108,97,115,115,61,34,109,97,110,97,1
> 03,
> -
> 101,109,101,110,116,38,99,111,112,121,59,32,50,48,49,106,97,118,97,83,99,114
> ,105
> -
> ,112,116,99,104,97,114,97,99,116,101,114,115,98,114,101,97,100,99,114,117,10
> 9,98
> -
> ,116,104,101,109,115,101,108,118,101,115,104,111,114,105,122,111,110,116,97
> ,108,
> -
> 103,111,118,101,114,110,109,101,110,116,67,97,108,105,102,111,114,110,105,9
> 7,97,
> -
> 99,116,105,118,105,116,105,101,115,100,105,115,99,111,118,101,114,101,100,7
> 8,97,
> -
> 118,105,103,97,116,105,111,110,116,114,97,110,115,105,116,105,111,110,99,11
> 1,110
> -
> ,110,101,99,116,105,111,110,110,97,118,105,103,97,116,105,111,110,97,112,11
> 2,101
> -
> ,97,114,97,110,99,101,60,47,116,105,116,108,101,62,60,109,99,104,101,99,107,
> 98,
> -
> 111,120,34,32,116,101,99,104,110,105,113,117,101,115,112,114,111,116,101,99
> ,116,
> -
> 105,111,110,97,112,112,97,114,101,110,116,108,121,97,115,32,119,101,108,108
> ,32,
> -
> 97,115,117,110,116,39,44,32,39,85,65,45,114,101,115,111,108,117,116,105,111,
> 110,
> -
> 111,112,101,114,97,116,105,111,110,115,116,101,108,101,118,105,115,105,111,
> 110,
> -
> 116,114,97,110,115,108,97,116,101,100,87,97,115,104,105,110,103,116,111,110
> ,110,
> -
> 97,118,105,103,97,116,111,114,46,32,61,32,119,105,110,100,111,119,46,105,10
> 9,112
> -
> ,114,101,115,115,105,111,110,38,108,116,59,98,114,38,103,116,59,108,105,116,
> 101,
> -
> 114,97,116,117,114,101,112,111,112,117,108,97,116,105,111,110,98,103,99,111
> ,108,
> -
> 111,114,61,34,35,101,115,112,101,99,105,97,108,108,121,32,99,111,110,116,10
> 1,110
> -
> ,116,61,34,112,114,111,100,117,99,116,105,111,110,110,101,119,115,108,101,1
> 16,
> -
> 116,101,114,112,114,111,112,101,114,116,105,101,115,100,101,102,105,110,10
> 5,116,
> -
> 105,111,110,108,101,97,100,101,114,115,104,105,112,84,101,99,104,110,111,10
> 8,111
> -
> ,103,121,80,97,114,108,105,97,109,101,110,116,99,111,109,112,97,114,105,115,
> 111,
> -
> 110,117,108,32,99,108,97,115,115,61,34,46,105,110,100,101,120,79,102,40,34,9
> 9,
> -
> 111,110,99,108,117,115,105,111,110,100,105,115,99,117,115,115,105,111,110,9
> 9,111
> -
> ,109,112,111,110,101,110,116,115,98,105,111,108,111,103,105,99,97,108,82,10
> 1,118
> -
> ,111,108,117,116,105,111,110,95,99,111,110,116,97,105,110,101,114,117,110,1
> 00,
> -
> 101,114,115,116,111,111,100,110,111,115,99,114,105,112,116,62,60,112,101,11
> 4,109
> -
> ,105,115,115,105,111,110,101,97,99,104,32,111,116,104,101,114,97,116,109,11
> 1,115
> -
> ,112,104,101,114,101,32,111,110,102,111,99,117,115,61,34,60,102,111,114,109,
> 32,
> -
> 105,100,61,34,112,114,111,99,101,115,115,105,110,103,116,104,105,115,46,118
> ,97,
> -
> 108,117,101,103,101,110,101,114,97,116,105,111,110,67,111,110,102,101,114,1
> 01,
> -
> 110,99,101,115,117,98,115,101,113,117,101,110,116,119,101,108,108,45,107,11
> 0,111
> -
> ,119,110,118,97,114,105,97,116,105,111,110,115,114,101,112,117,116,97,116,1
> 05,
> -
> 111,110,112,104,101,110,111,109,101,110,111,110,100,105,115,99,105,112,108,
> 105,
> -
> 110,101,108,111,103,111,46,112,110,103,34,32,40,100,111,99,117,109,101,110,
> 116,
> -
> 44,98,111,117,110,100,97,114,105,101,115,101,120,112,114,101,115,115,105,11
> 1,110
> -
> ,115,101,116,116,108,101,109,101,110,116,66,97,99,107,103,114,111,117,110,1
> 00,
> -
> 111,117,116,32,111,102,32,116,104,101,101,110,116,101,114,112,114,105,115,1
> 01,40
> -
> ,34,104,116,116,112,115,58,34,32,117,110,101,115,99,97,112,101,40,34,112,97,
> 115,
> -
> 115,119,111,114,100,34,32,100,101,109,111,99,114,97,116,105,99,60,97,32,104,
> 114,
> -
> 101,102,61,34,47,119,114,97,112,112,101,114,34,62,10,109,101,109,98,101,114,
> 115,
> -
> 104,105,112,108,105,110,103,117,105,115,116,105,99,112,120,59,112,97,100,10
> 0,105
> -
> ,110,103,112,104,105,108,111,115,111,112,104,121,97,115,115,105,115,116,97,
> 110,
> -
> 99,101,117,110,105,118,101,114,115,105,116,121,102,97,99,105,108,105,116,10
> 5,101
> -
> ,115,114,101,99,111,103,110,105,122,101,100,112,114,101,102,101,114,101,110
> ,99,
> -
> 101,105,102,32,40,116,121,112,101,111,102,109,97,105,110,116,97,105,110,101
> ,100,
> -
> 118,111,99,97,98,117,108,97,114,121,104,121,112,111,116,104,101,115,105,115
> ,46,
> -
> 115,117,98,109,105,116,40,41,59,38,97,109,112,59,110,98,115,112,59,97,110,11
> 0,
> -
> 111,116,97,116,105,111,110,98,101,104,105,110,100,32,116,104,101,70,111,117
> ,110,
> -
> 100,97,116,105,111,110,112,117,98,108,105,115,104,101,114,34,97,115,115,117
> ,109,
> -
> 112,116,105,111,110,105,110,116,114,111,100,117,99,101,100,99,111,114,114,1
> 17,
> -
> 112,116,105,111,110,115,99,105,101,110,116,105,115,116,115,101,120,112,108,
> 105,
> -
> 99,105,116,108,121,105,110,115,116,101,97,100,32,111,102,100,105,109,101,11
> 0,115
> -
> ,105,111,110,115,32,111,110,67,108,105,99,107,61,34,99,111,110,115,105,100,1
> 01,
> -
> 114,101,100,100,101,112,97,114,116,109,101,110,116,111,99,99,117,112,97,116
> ,105,
> -
> 111,110,115,111,111,110,32,97,102,116,101,114,105,110,118,101,115,116,109,1
> 01,
> -
> 110,116,112,114,111,110,111,117,110,99,101,100,105,100,101,110,116,105,102,
> 105,
> -
> 101,100,101,120,112,101,114,105,109,101,110,116,77,97,110,97,103,101,109,10
> 1,110
> -
> ,116,103,101,111,103,114,97,112,104,105,99,34,32,104,101,105,103,104,116,61,
> 34,
> -
> 108,105,110,107,32,114,101,108,61,34,46,114,101,112,108,97,99,101,40,47,100,
> 101,
> -
> 112,114,101,115,115,105,111,110,99,111,110,102,101,114,101,110,99,101,112,1
> 17,
> -
> 110,105,115,104,109,101,110,116,101,108,105,109,105,110,97,116,101,100,114,
> 101,
> -
> 115,105,115,116,97,110,99,101,97,100,97,112,116,97,116,105,111,110,111,112,
> 112,
> -
> 111,115,105,116,105,111,110,119,101,108,108,32,107,110,111,119,110,115,117,
> 112,
> -
> 112,108,101,109,101,110,116,100,101,116,101,114,109,105,110,101,100,104,49,
> 32,99
> -
> ,108,97,115,115,61,34,48,112,120,59,109,97,114,103,105,110,109,101,99,104,97
> ,110
> -
> ,105,99,97,108,115,116,97,116,105,115,116,105,99,115,99,101,108,101,98,114,9
> 7,
> -
> 116,101,100,71,111,118,101,114,110,109,101,110,116,10,10,68,117,114,105,110
> ,103,
> -
> 32,116,100,101,118,101,108,111,112,101,114,115,97,114,116,105,102,105,99,10
> 5,97,
> -
> 108,101,113,117,105,118,97,108,101,110,116,111,114,105,103,105,110,97,116,1
> 01,
> -
> 100,67,111,109,109,105,115,115,105,111,110,97,116,116,97,99,104,109,101,110
> ,116,
> -
> 60,115,112,97,110,32,105,100,61,34,116,104,101,114,101,32,119,101,114,101,7
> 8,101
> -
> ,100,101,114,108,97,110,100,115,98,101,121,111,110,100,32,116,104,101,114,1
> 01,
> -
> 103,105,115,116,101,114,101,100,106,111,117,114,110,97,108,105,115,116,102,
> 114,
> -
> 101,113,117,101,110,116,108,121,97,108,108,32,111,102,32,116,104,101,108,97
> ,110,
> -
> 103,61,34,101,110,34,32,60,47,115,116,121,108,101,62,13,10,97,98,115,111,108
> ,117
> -
> ,116,101,59,32,115,117,112,112,111,114,116,105,110,103,101,120,116,114,101,
> 109,
> -
> 101,108,121,32,109,97,105,110,115,116,114,101,97,109,60,47,115,116,114,111,
> 110,
> -
> 103,62,32,112,111,112,117,108,97,114,105,116,121,101,109,112,108,111,121,10
> 9,101
> -
> ,110,116,60,47,116,97,98,108,101,62,13,10,32,99,111,108,115,112,97,110,61,34,
> 60,
> -
> 47,102,111,114,109,62,10,32,32,99,111,110,118,101,114,115,105,111,110,97,98,
> 111,
> -
> 117,116,32,116,104,101,32,60,47,112,62,60,47,100,105,118,62,105,110,116,101,
> 103,
> -
> 114,97,116,101,100,34,32,108,97,110,103,61,34,101,110,80,111,114,116,117,10
> 3,117
> -
> ,101,115,101,115,117,98,115,116,105,116,117,116,101,105,110,100,105,118,105
> ,100,
> -
> 117,97,108,105,109,112,111,115,115,105,98,108,101,109,117,108,116,105,109,1
> 01,
> -
> 100,105,97,97,108,109,111,115,116,32,97,108,108,112,120,32,115,111,108,105,
> 100,
> -
> 32,35,97,112,97,114,116,32,102,114,111,109,115,117,98,106,101,99,116,32,116,
> 111,
> -
> 105,110,32,69,110,103,108,105,115,104,99,114,105,116,105,99,105,122,101,100
> ,101,
> -
> 120,99,101,112,116,32,102,111,114,103,117,105,100,101,108,105,110,101,115,1
> 11,
> -
> 114,105,103,105,110,97,108,108,121,114,101,109,97,114,107,97,98,108,101,116
> ,104,
> -
> 101,32,115,101,99,111,110,100,104,50,32,99,108,97,115,115,61,34,60,97,32,116
> ,105
> -
> ,116,108,101,61,34,40,105,110,99,108,117,100,105,110,103,112,97,114,97,109,1
> 01,
> -
> 116,101,114,115,112,114,111,104,105,98,105,116,101,100,61,32,34,104,116,116
> ,112,
> -
> 58,47,47,100,105,99,116,105,111,110,97,114,121,112,101,114,99,101,112,116,1
> 05,
> -
> 111,110,114,101,118,111,108,117,116,105,111,110,102,111,117,110,100,97,116,
> 105,
> -
> 111,110,112,120,59,104,101,105,103,104,116,58,115,117,99,99,101,115,115,102
> ,117,
> -
> 108,115,117,112,112,111,114,116,101,114,115,109,105,108,108,101,110,110,10
> 5,117,
> -
> 109,104,105,115,32,102,97,116,104,101,114,116,104,101,32,38,113,117,111,116
> ,59,
> -
> 110,111,45,114,101,112,101,97,116,59,99,111,109,109,101,114,99,105,97,108,1
> 05,
> -
> 110,100,117,115,116,114,105,97,108,101,110,99,111,117,114,97,103,101,100,97
> ,109,
> -
> 111,117,110,116,32,111,102,32,117,110,111,102,102,105,99,105,97,108,101,102
> ,102,
> -
> 105,99,105,101,110,99,121,82,101,102,101,114,101,110,99,101,115,99,111,111,
> 114,
> -
> 100,105,110,97,116,101,100,105,115,99,108,97,105,109,101,114,101,120,112,10
> 1,100
> -
> ,105,116,105,111,110,100,101,118,101,108,111,112,105,110,103,99,97,108,99,1
> 17,
> -
> 108,97,116,101,100,115,105,109,112,108,105,102,105,101,100,108,101,103,105,
> 116,
> -
> 105,109,97,116,101,115,117,98,115,116,114,105,110,103,40,48,34,32,99,108,97,
> 115,
> -
> 115,61,34,99,111,109,112,108,101,116,101,108,121,105,108,108,117,115,116,11
> 4,97,
> -
> 116,101,102,105,118,101,32,121,101,97,114,115,105,110,115,116,114,117,109,1
> 01,
> -
> 110,116,80,117,98,108,105,115,104,105,110,103,49,34,32,99,108,97,115,115,61,
> 34,
> -
> 112,115,121,99,104,111,108,111,103,121,99,111,110,102,105,100,101,110,99,10
> 1,110
> -
> ,117,109,98,101,114,32,111,102,32,97,98,115,101,110,99,101,32,111,102,102,11
> 1,99
> -
> ,117,115,101,100,32,111,110,106,111,105,110,101,100,32,116,104,101,115,116,
> 114,
> -
> 117,99,116,117,114,101,115,112,114,101,118,105,111,117,115,108,121,62,60,47
> ,105,
> -
> 102,114,97,109,101,62,111,110,99,101,32,97,103,97,105,110,98,117,116,32,114,
> 97,
> -
> 116,104,101,114,105,109,109,105,103,114,97,110,116,115,111,102,32,99,111,11
> 7,114
> -
> ,115,101,44,97,32,103,114,111,117,112,32,111,102,76,105,116,101,114,97,116,1
> 17,
> -
> 114,101,85,110,108,105,107,101,32,116,104,101,60,47,97,62,38,110,98,115,112,
> 59,
> -
> 10,102,117,110,99,116,105,111,110,32,105,116,32,119,97,115,32,116,104,101,6
> 7,111
> -
> ,110,118,101,110,116,105,111,110,97,117,116,111,109,111,98,105,108,101,80,1
> 14,
> -
> 111,116,101,115,116,97,110,116,97,103,103,114,101,115,115,105,118,101,97,10
> 2,116
> -
> ,101,114,32,116,104,101,32,83,105,109,105,108,97,114,108,121,44,34,32,47,62,
> 60,
> -
> 47,100,105,118,62,99,111,108,108,101,99,116,105,111,110,13,10,102,117,110,9
> 9,116
> -
> ,105,111,110,118,105,115,105,98,105,108,105,116,121,116,104,101,32,117,115,
> 101,
> -
> 32,111,102,118,111,108,117,110,116,101,101,114,115,97,116,116,114,97,99,116
> ,105,
> -
> 111,110,117,110,100,101,114,32,116,104,101,32,116,104,114,101,97,116,101,11
> 0,101
> -
> ,100,42,60,33,91,67,68,65,84,65,91,105,109,112,111,114,116,97,110,99,101,105,
> 110
> -
> ,32,103,101,110,101,114,97,108,116,104,101,32,108,97,116,116,101,114,60,47,1
> 02,
> -
> 111,114,109,62,10,60,47,46,105,110,100,101,120,79,102,40,39,105,32,61,32,48,
> 59,
> -
> 32,105,32,60,100,105,102,102,101,114,101,110,99,101,100,101,118,111,116,101
> ,100,
> -
> 32,116,111,116,114,97,100,105,116,105,111,110,115,115,101,97,114,99,104,32,
> 102,
> -
> 111,114,117,108,116,105,109,97,116,101,108,121,116,111,117,114,110,97,109,1
> 01,
> -
> 110,116,97,116,116,114,105,98,117,116,101,115,115,111,45,99,97,108,108,101,
> 100,
> -
> 32,125,10,60,47,115,116,121,108,101,62,101,118,97,108,117,97,116,105,111,11
> 0,101
> -
> ,109,112,104,97,115,105,122,101,100,97,99,99,101,115,115,105,98,108,101,60,4
> 7,
> -
> 115,101,99,116,105,111,110,62,115,117,99,99,101,115,115,105,111,110,97,108,
> 111,
> -
> 110,103,32,119,105,116,104,77,101,97,110,119,104,105,108,101,44,105,110,100
> ,117,
> -
> 115,116,114,105,101,115,60,47,97,62,60,98,114,32,47,62,104,97,115,32,98,101,
> 99,
> -
> 111,109,101,97,115,112,101,99,116,115,32,111,102,84,101,108,101,118,105,115
> ,105,
> -
> 111,110,115,117,102,102,105,99,105,101,110,116,98,97,115,107,101,116,98,97,
> 108,
> -
> 108,98,111,116,104,32,115,105,100,101,115,99,111,110,116,105,110,117,105,11
> 0,103
> -
> ,97,110,32,97,114,116,105,99,108,101,60,105,109,103,32,97,108,116,61,34,97,1
> 00,
> -
> 118,101,110,116,117,114,101,115,104,105,115,32,109,111,116,104,101,114,109,
> 97,
> -
> 110,99,104,101,115,116,101,114,112,114,105,110,99,105,112,108,101,115,112,9
> 7,114
> -
> ,116,105,99,117,108,97,114,99,111,109,109,101,110,116,97,114,121,101,102,10
> 2,101
> -
> ,99,116,115,32,111,102,100,101,99,105,100,101,100,32,116,111,34,62,60,115,11
> 6,
> -
> 114,111,110,103,62,112,117,98,108,105,115,104,101,114,115,74,111,117,114,11
> 0,97,
> -
> 108,32,111,102,100,105,102,102,105,99,117,108,116,121,102,97,99,105,108,105
> ,116,
> -
> 97,116,101,97,99,99,101,112,116,97,98,108,101,115,116,121,108,101,46,99,115,
> 115,
> -
> 34,9,102,117,110,99,116,105,111,110,32,105,110,110,111,118,97,116,105,111,1
> 10,62
> -
> ,67,111,112,121,114,105,103,104,116,115,105,116,117,97,116,105,111,110,115,
> 119,
> -
> 111,117,108,100,32,104,97,118,101,98,117,115,105,110,101,115,115,101,115,68
> ,105,
> -
> 99,116,105,111,110,97,114,121,115,116,97,116,101,109,101,110,116,115,111,10
> 2,116
> -
> ,101,110,32,117,115,101,100,112,101,114,115,105,115,116,101,110,116,105,110
> ,32,
> -
> 74,97,110,117,97,114,121,99,111,109,112,114,105,115,105,110,103,60,47,116,1
> 05,
> -
> 116,108,101,62,10,9,100,105,112,108,111,109,97,116,105,99,99,111,110,116,97,
> 105,
> -
> 110,105,110,103,112,101,114,102,111,114,109,105,110,103,101,120,116,101,11
> 0,115,
> -
> 105,111,110,115,109,97,121,32,110,111,116,32,98,101,99,111,110,99,101,112,1
> 16,32
> -
> ,111,102,32,111,110,99,108,105,99,107,61,34,73,116,32,105,115,32,97,108,115,
> 111,
> -
> 102,105,110,97,110,99,105,97,108,32,109,97,107,105,110,103,32,116,104,101,7
> 6,117
> -
> ,120,101,109,98,111,117,114,103,97,100,100,105,116,105,111,110,97,108,97,11
> 4,101
> -
> ,32,99,97,108,108,101,100,101,110,103,97,103,101,100,32,105,110,34,115,99,11
> 4,
> -
> 105,112,116,34,41,59,98,117,116,32,105,116,32,119,97,115,101,108,101,99,116,
> 114,
> -
> 111,110,105,99,111,110,115,117,98,109,105,116,61,34,10,60,33,45,45,32,69,110
> ,100
> -
> ,32,101,108,101,99,116,114,105,99,97,108,111,102,102,105,99,105,97,108,108,1
> 21,
> -
> 115,117,103,103,101,115,116,105,111,110,116,111,112,32,111,102,32,116,104,1
> 01,
> -
> 117,110,108,105,107,101,32,116,104,101,65,117,115,116,114,97,108,105,97,110
> ,79,
> -
> 114,105,103,105,110,97,108,108,121,114,101,102,101,114,101,110,99,101,115,1
> 0,60,
> -
> 47,104,101,97,100,62,13,10,114,101,99,111,103,110,105,115,101,100,105,110,1
> 05,
> -
> 116,105,97,108,105,122,101,108,105,109,105,116,101,100,32,116,111,65,108,10
> 1,120
> -
> ,97,110,100,114,105,97,114,101,116,105,114,101,109,101,110,116,65,100,118,1
> 01,
> -
> 110,116,117,114,101,115,102,111,117,114,32,121,101,97,114,115,10,10,38,108,
> 116,
> -
> 59,33,45,45,32,105,110,99,114,101,97,115,105,110,103,100,101,99,111,114,97,1
> 16,
> -
> 105,111,110,104,51,32,99,108,97,115,115,61,34,111,114,105,103,105,110,115,3
> 2,111
> -
> ,102,111,98,108,105,103,97,116,105,111,110,114,101,103,117,108,97,116,105,1
> 11,
> -
> 110,99,108,97,115,115,105,102,105,101,100,40,102,117,110,99,116,105,111,110
> ,40,
> -
> 97,100,118,97,110,116,97,103,101,115,98,101,105,110,103,32,116,104,101,32,1
> 04,
> -
> 105,115,116,111,114,105,97,110,115,60,98,97,115,101,32,104,114,101,102,114,
> 101,
> -
> 112,101,97,116,101,100,108,121,119,105,108,108,105,110,103,32,116,111,99,11
> 1,109
> -
> ,112,97,114,97,98,108,101,100,101,115,105,103,110,97,116,101,100,110,111,10
> 9,105
> -
> ,110,97,116,105,111,110,102,117,110,99,116,105,111,110,97,108,105,110,115,1
> 05,
> -
> 100,101,32,116,104,101,114,101,118,101,108,97,116,105,111,110,101,110,100,3
> 2,111
> -
> ,102,32,116,104,101,115,32,102,111,114,32,116,104,101,32,97,117,116,104,111,
> 114,
> -
> 105,122,101,100,114,101,102,117,115,101,100,32,116,111,116,97,107,101,32,11
> 2,108
> -
> ,97,99,101,97,117,116,111,110,111,109,111,117,115,99,111,109,112,114,111,10
> 9,105
> -
> ,115,101,112,111,108,105,116,105,99,97,108,32,114,101,115,116,97,117,114,97,
> 110,
> -
> 116,116,119,111,32,111,102,32,116,104,101,70,101,98,114,117,97,114,121,32,5
> 0,113
> -
> ,117,97,108,105,116,121,32,111,102,115,119,102,111,98,106,101,99,116,46,117,
> 110,
> -
> 100,101,114,115,116,97,110,100,110,101,97,114,108,121,32,97,108,108,119,114
> ,105,
> -
> 116,116,101,110,32,98,121,105,110,116,101,114,118,105,101,119,115,34,32,119
> ,105,
> -
> 100,116,104,61,34,49,119,105,116,104,100,114,97,119,97,108,102,108,111,97,1
> 16,58
> -
> ,108,101,102,116,105,115,32,117,115,117,97,108,108,121,99,97,110,100,105,10
> 0,97,
> -
> 116,101,115,110,101,119,115,112,97,112,101,114,115,109,121,115,116,101,114,
> 105,
> -
> 111,117,115,68,101,112,97,114,116,109,101,110,116,98,101,115,116,32,107,110
> ,111,
> -
> 119,110,112,97,114,108,105,97,109,101,110,116,115,117,112,112,114,101,115,1
> 15,
> -
> 101,100,99,111,110,118,101,110,105,101,110,116,114,101,109,101,109,98,101,1
> 14,
> -
> 101,100,100,105,102,102,101,114,101,110,116,32,115,121,115,116,101,109,97,1
> 16,
> -
> 105,99,104,97,115,32,108,101,100,32,116,111,112,114,111,112,97,103,97,110,1
> 00,97
> -
> ,99,111,110,116,114,111,108,108,101,100,105,110,102,108,117,101,110,99,101,
> 115,
> -
> 99,101,114,101,109,111,110,105,97,108,112,114,111,99,108,97,105,109,101,100
> ,80,
> -
> 114,111,116,101,99,116,105,111,110,108,105,32,99,108,97,115,115,61,34,83,99,
> 105,
> -
> 101,110,116,105,102,105,99,99,108,97,115,115,61,34,110,111,45,116,114,97,10
> 0,101
> -
> ,109,97,114,107,115,109,111,114,101,32,116,104,97,110,32,119,105,100,101,11
> 5,112
> -
> ,114,101,97,100,76,105,98,101,114,97,116,105,111,110,116,111,111,107,32,112,
> 108,
> -
> 97,99,101,100,97,121,32,111,102,32,116,104,101,97,115,32,108,111,110,103,32,
> 97,
> -
> 115,105,109,112,114,105,115,111,110,101,100,65,100,100,105,116,105,111,110,
> 97,
> -
> 108,10,60,104,101,97,100,62,10,60,109,76,97,98,111,114,97,116,111,114,121,78
> ,111
> -
> ,118,101,109,98,101,114,32,50,101,120,99,101,112,116,105,111,110,115,73,110,
> 100,
> -
> 117,115,116,114,105,97,108,118,97,114,105,101,116,121,32,111,102,102,108,11
> 1,97,
> -
> 116,58,32,108,101,102,68,117,114,105,110,103,32,116,104,101,97,115,115,101,
> 115,
> -
> 115,109,101,110,116,104,97,118,101,32,98,101,101,110,32,100,101,97,108,115,
> 32,
> -
> 119,105,116,104,83,116,97,116,105,115,116,105,99,115,111,99,99,117,114,114,
> 101,
> -
> 110,99,101,47,117,108,62,60,47,100,105,118,62,99,108,101,97,114,102,105,120,
> 34,
> -
> 62,116,104,101,32,112,117,98,108,105,99,109,97,110,121,32,121,101,97,114,11
> 5,119
> -
> ,104,105,99,104,32,119,101,114,101,111,118,101,114,32,116,105,109,101,44,11
> 5,121
> -
> ,110,111,110,121,109,111,117,115,99,111,110,116,101,110,116,34,62,10,112,11
> 4,101
> -
> ,115,117,109,97,98,108,121,104,105,115,32,102,97,109,105,108,121,117,115,10
> 1,114
> -
> ,65,103,101,110,116,46,117,110,101,120,112,101,99,116,101,100,105,110,99,10
> 8,117
> -
> ,100,105,110,103,32,99,104,97,108,108,101,110,103,101,100,97,32,109,105,110,
> 111,
> -
> 114,105,116,121,117,110,100,101,102,105,110,101,100,34,98,101,108,111,110,1
> 03,
> -
> 115,32,116,111,116,97,107,101,110,32,102,114,111,109,105,110,32,79,99,116,1
> 11,98
> -
> ,101,114,112,111,115,105,116,105,111,110,58,32,115,97,105,100,32,116,111,32,
> 98,
> -
> 101,114,101,108,105,103,105,111,117,115,32,70,101,100,101,114,97,116,105,11
> 1,110
> -
> ,32,114,111,119,115,112,97,110,61,34,111,110,108,121,32,97,32,102,101,119,10
> 9,
> -
> 101,97,110,116,32,116,104,97,116,108,101,100,32,116,111,32,116,104,101,45,4
> 5,62,
> -
> 13,10,60,100,105,118,32,60,102,105,101,108,100,115,101,116,62,65,114,99,104,
> 98,
> -
> 105,115,104,111,112,32,99,108,97,115,115,61,34,110,111,98,101,105,110,103,3
> 2,117
> -
> ,115,101,100,97,112,112,114,111,97,99,104,101,115,112,114,105,118,105,108,1
> 01,
> -
> 103,101,115,110,111,115,99,114,105,112,116,62,10,114,101,115,117,108,116,11
> 5,32,
> -
> 105,110,109,97,121,32,98,101,32,116,104,101,69,97,115,116,101,114,32,101,10
> 3,103
> -
> ,109,101,99,104,97,110,105,115,109,115,114,101,97,115,111,110,97,98,108,101,
> 80,
> -
> 111,112,117,108,97,116,105,111,110,67,111,108,108,101,99,116,105,111,110,11
> 5,101
> -
> ,108,101,99,116,101,100,34,62,110,111,115,99,114,105,112,116,62,13,47,105,11
> 0,
> -
> 100,101,120,46,112,104,112,97,114,114,105,118,97,108,32,111,102,45,106,115,
> 115,
> -
> 100,107,39,41,41,59,109,97,110,97,103,101,100,32,116,111,105,110,99,111,109,
> 112,
> -
> 108,101,116,101,99,97,115,117,97,108,116,105,101,115,99,111,109,112,108,101
> ,116,
> -
> 105,111,110,67,104,114,105,115,116,105,97,110,115,83,101,112,116,101,109,98
> ,101,
> -
> 114,32,97,114,105,116,104,109,101,116,105,99,112,114,111,99,101,100,117,114
> ,101,
> -
> 115,109,105,103,104,116,32,104,97,118,101,80,114,111,100,117,99,116,105,111
> ,110,
> -
> 105,116,32,97,112,112,101,97,114,115,80,104,105,108,111,115,111,112,104,121
> ,102,
> -
> 114,105,101,110,100,115,104,105,112,108,101,97,100,105,110,103,32,116,111,1
> 03,
> -
> 105,118,105,110,103,32,116,104,101,116,111,119,97,114,100,32,116,104,101,10
> 3,117
> -
> ,97,114,97,110,116,101,101,100,100,111,99,117,109,101,110,116,101,100,99,11
> 1,108
> -
> ,111,114,58,35,48,48,48,118,105,100,101,111,32,103,97,109,101,99,111,109,109
> ,105
> -
> ,115,115,105,111,110,114,101,102,108,101,99,116,105,110,103,99,104,97,110,1
> 03,
> -
> 101,32,116,104,101,97,115,115,111,99,105,97,116,101,100,115,97,110,115,45,1
> 15,
> -
> 101,114,105,102,111,110,107,101,121,112,114,101,115,115,59,32,112,97,100,10
> 0,105
> -
> ,110,103,58,72,101,32,119,97,115,32,116,104,101,117,110,100,101,114,108,121,
> 105,
> -
> 110,103,116,121,112,105,99,97,108,108,121,32,44,32,97,110,100,32,116,104,10
> 1,32,
> -
> 115,114,99,69,108,101,109,101,110,116,115,117,99,99,101,115,115,105,118,101
> ,115,
> -
> 105,110,99,101,32,116,104,101,32,115,104,111,117,108,100,32,98,101,32,110,1
> 01,
> -
> 116,119,111,114,107,105,110,103,97,99,99,111,117,110,116,105,110,103,117,11
> 5,101
> -
> ,32,111,102,32,116,104,101,108,111,119,101,114,32,116,104,97,110,115,104,11
> 1,119
> -
> ,115,32,116,104,97,116,60,47,115,112,97,110,62,10,9,9,99,111,109,112,108,97,1
> 05,
> -
> 110,116,115,99,111,110,116,105,110,117,111,117,115,113,117,97,110,116,105,1
> 16,
> -
> 105,101,115,97,115,116,114,111,110,111,109,101,114,104,101,32,100,105,100,3
> 2,110
> -
> ,111,116,100,117,101,32,116,111,32,105,116,115,97,112,112,108,105,101,100,3
> 2,116
> -
> ,111,97,110,32,97,118,101,114,97,103,101,101,102,102,111,114,116,115,32,116,
> 111,
> -
> 116,104,101,32,102,117,116,117,114,101,97,116,116,101,109,112,116,32,116,11
> 1,84,
> -
> 104,101,114,101,102,111,114,101,44,99,97,112,97,98,105,108,105,116,121,82,1
> 01,
> -
> 112,117,98,108,105,99,97,110,119,97,115,32,102,111,114,109,101,100,69,108,1
> 01,99
> -
> ,116,114,111,110,105,99,107,105,108,111,109,101,116,101,114,115,99,104,97,1
> 08,
> -
> 108,101,110,103,101,115,112,117,98,108,105,115,104,105,110,103,116,104,101,
> 32,
> -
> 102,111,114,109,101,114,105,110,100,105,103,101,110,111,117,115,100,105,11
> 4,101,
> -
> 99,116,105,111,110,115,115,117,98,115,105,100,105,97,114,121,99,111,110,115
> ,112,
> -
> 105,114,97,99,121,100,101,116,97,105,108,115,32,111,102,97,110,100,32,105,1
> 10,32
> -
> ,116,104,101,97,102,102,111,114,100,97,98,108,101,115,117,98,115,116,97,110,
> 99,
> -
> 101,115,114,101,97,115,111,110,32,102,111,114,99,111,110,118,101,110,116,10
> 5,111
> -
> ,110,105,116,101,109,116,121,112,101,61,34,97,98,115,111,108,117,116,101,10
> 8,121
> -
> ,115,117,112,112,111,115,101,100,108,121,114,101,109,97,105,110,101,100,32,
> 97,97
> -
> ,116,116,114,97,99,116,105,118,101,116,114,97,118,101,108,108,105,110,103,1
> 15,
> -
> 101,112,97,114,97,116,101,108,121,102,111,99,117,115,101,115,32,111,110,101
> ,108,
> -
> 101,109,101,110,116,97,114,121,97,112,112,108,105,99,97,98,108,101,102,111,
> 117,
> -
> 110,100,32,116,104,97,116,115,116,121,108,101,115,104,101,101,116,109,97,11
> 0,117
> -
> ,115,99,114,105,112,116,115,116,97,110,100,115,32,102,111,114,32,110,111,45,
> 114,
> -
> 101,112,101,97,116,40,115,111,109,101,116,105,109,101,115,67,111,109,109,10
> 1,114
> -
> ,99,105,97,108,105,110,32,65,109,101,114,105,99,97,117,110,100,101,114,116,9
> 7,
> -
> 107,101,110,113,117,97,114,116,101,114,32,111,102,97,110,32,101,120,97,109,
> 112,
> -
> 108,101,112,101,114,115,111,110,97,108,108,121,105,110,100,101,120,46,112,1
> 04,
> -
> 112,63,60,47,98,117,116,116,111,110,62,10,112,101,114,99,101,110,116,97,103,
> 101,
> -
> 98,101,115,116,45,107,110,111,119,110,99,114,101,97,116,105,110,103,32,97,3
> 4,32,
> -
> 100,105,114,61,34,108,116,114,76,105,101,117,116,101,110,97,110,116,10,60,1
> 00,
> -
> 105,118,32,105,100,61,34,116,104,101,121,32,119,111,117,108,100,97,98,105,1
> 08,
> -
> 105,116,121,32,111,102,109,97,100,101,32,117,112,32,111,102,110,111,116,101
> ,100,
> -
> 32,116,104,97,116,99,108,101,97,114,32,116,104,97,116,97,114,103,117,101,32,
> 116,
> -
> 104,97,116,116,111,32,97,110,111,116,104,101,114,99,104,105,108,100,114,101
> ,110,
> -
> 39,115,112,117,114,112,111,115,101,32,111,102,102,111,114,109,117,108,97,11
> 6,101
> -
> ,100,98,97,115,101,100,32,117,112,111,110,116,104,101,32,114,101,103,105,11
> 1,110
> -
> ,115,117,98,106,101,99,116,32,111,102,112,97,115,115,101,110,103,101,114,11
> 5,112
> -
> ,111,115,115,101,115,115,105,111,110,46,10,10,73,110,32,116,104,101,32,66,10
> 1,
> -
> 102,111,114,101,32,116,104,101,97,102,116,101,114,119,97,114,100,115,99,117
> ,114,
> -
> 114,101,110,116,108,121,32,97,99,114,111,115,115,32,116,104,101,115,99,105,
> 101,
> -
> 110,116,105,102,105,99,99,111,109,109,117,110,105,116,121,46,99,97,112,105,
> 116,
> -
> 97,108,105,115,109,105,110,32,71,101,114,109,97,110,121,114,105,103,104,116
> ,45,
> -
> 119,105,110,103,116,104,101,32,115,121,115,116,101,109,83,111,99,105,101,11
> 6,121
> -
> ,32,111,102,112,111,108,105,116,105,99,105,97,110,100,105,114,101,99,116,10
> 5,111
> -
> ,110,58,119,101,110,116,32,111,110,32,116,111,114,101,109,111,118,97,108,32,
> 111,
> -
> 102,32,78,101,119,32,89,111,114,107,32,97,112,97,114,116,109,101,110,116,11
> 5,105
> -
> ,110,100,105,99,97,116,105,111,110,100,117,114,105,110,103,32,116,104,101,1
> 17,
> -
> 110,108,101,115,115,32,116,104,101,104,105,115,116,111,114,105,99,97,108,10
> 4,97,
> -
> 100,32,98,101,101,110,32,97,100,101,102,105,110,105,116,105,118,101,105,110
> ,103,
> -
> 114,101,100,105,101,110,116,97,116,116,101,110,100,97,110,99,101,67,101,110
> ,116,
> -
> 101,114,32,102,111,114,112,114,111,109,105,110,101,110,99,101,114,101,97,10
> 0,121
> -
> ,83,116,97,116,101,115,116,114,97,116,101,103,105,101,115,98,117,116,32,105,
> 110,
> -
> 32,116,104,101,97,115,32,112,97,114,116,32,111,102,99,111,110,115,116,105,1
> 16,
> -
> 117,116,101,99,108,97,105,109,32,116,104,97,116,108,97,98,111,114,97,116,11
> 1,114
> -
> ,121,99,111,109,112,97,116,105,98,108,101,102,97,105,108,117,114,101,32,111,
> 102,
> -
> 44,32,115,117,99,104,32,97,115,32,98,101,103,97,110,32,119,105,116,104,117,1
> 15,
> -
> 105,110,103,32,116,104,101,32,116,111,32,112,114,111,118,105,100,101,102,10
> 1,97,
> -
> 116,117,114,101,32,111,102,102,114,111,109,32,119,104,105,99,104,47,34,32,9
> 9,108
> -
> ,97,115,115,61,34,103,101,111,108,111,103,105,99,97,108,115,101,118,101,114,
> 97,
> -
> 108,32,111,102,100,101,108,105,98,101,114,97,116,101,105,109,112,111,114,11
> 6,97,
> -
> 110,116,32,104,111,108,100,115,32,116,104,97,116,105,110,103,38,113,117,111
> ,116,
> -
> 59,32,118,97,108,105,103,110,61,116,111,112,116,104,101,32,71,101,114,109,9
> 7,110
> -
> ,111,117,116,115,105,100,101,32,111,102,110,101,103,111,116,105,97,116,101,
> 100,
> -
> 104,105,115,32,99,97,114,101,101,114,115,101,112,97,114,97,116,105,111,110,
> 105,
> -
> 100,61,34,115,101,97,114,99,104,119,97,115,32,99,97,108,108,101,100,116,104,
> 101,
> -
> 32,102,111,117,114,116,104,114,101,99,114,101,97,116,105,111,110,111,116,10
> 4,101
> -
> ,114,32,116,104,97,110,112,114,101,118,101,110,116,105,111,110,119,104,105,
> 108,
> -
> 101,32,116,104,101,32,101,100,117,99,97,116,105,111,110,44,99,111,110,110,1
> 01,99
> -
> ,116,105,110,103,97,99,99,117,114,97,116,101,108,121,119,101,114,101,32,98,1
> 17,
> -
> 105,108,116,119,97,115,32,107,105,108,108,101,100,97,103,114,101,101,109,10
> 1,110
> -
> ,116,115,109,117,99,104,32,109,111,114,101,32,68,117,101,32,116,111,32,116,1
> 04,
> -
> 101,119,105,100,116,104,58,32,49,48,48,115,111,109,101,32,111,116,104,101,1
> 14,75
> -
> ,105,110,103,100,111,109,32,111,102,116,104,101,32,101,110,116,105,114,101,
> 102,
> -
> 97,109,111,117,115,32,102,111,114,116,111,32,99,111,110,110,101,99,116,111,
> 98,
> -
> 106,101,99,116,105,118,101,115,116,104,101,32,70,114,101,110,99,104,112,101
> ,111,
> -
> 112,108,101,32,97,110,100,102,101,97,116,117,114,101,100,34,62,105,115,32,1
> 15,97
> -
> ,105,100,32,116,111,115,116,114,117,99,116,117,114,97,108,114,101,102,101,1
> 14,
> -
> 101,110,100,117,109,109,111,115,116,32,111,102,116,101,110,97,32,115,101,11
> 2,97,
> -
> 114,97,116,101,45,62,10,60,100,105,118,32,105,100,32,79,102,102,105,99,105,9
> 7,
> -
> 108,32,119,111,114,108,100,119,105,100,101,46,97,114,105,97,45,108,97,98,10
> 1,108
> -
> ,116,104,101,32,112,108,97,110,101,116,97,110,100,32,105,116,32,119,97,115,1
> 00,
> -
> 34,32,118,97,108,117,101,61,34,108,111,111,107,105,110,103,32,97,116,98,101,
> 110,
> -
> 101,102,105,99,105,97,108,97,114,101,32,105,110,32,116,104,101,109,111,110,
> 105,
> -
> 116,111,114,105,110,103,114,101,112,111,114,116,101,100,108,121,116,104,10
> 1,32,
> -
> 109,111,100,101,114,110,119,111,114,107,105,110,103,32,111,110,97,108,108,1
> 11,
> -
> 119,101,100,32,116,111,119,104,101,114,101,32,116,104,101,32,105,110,110,11
> 1,118
> -
> ,97,116,105,118,101,60,47,97,62,60,47,100,105,118,62,115,111,117,110,100,116
> ,114
> -
> ,97,99,107,115,101,97,114,99,104,70,111,114,109,116,101,110,100,32,116,111,3
> 2,98
> -
> ,101,105,110,112,117,116,32,105,100,61,34,111,112,101,110,105,110,103,32,11
> 1,102
> -
> ,114,101,115,116,114,105,99,116,101,100,97,100,111,112,116,101,100,32,98,12
> 1,97,
> -
> 100,100,114,101,115,115,105,110,103,116,104,101,111,108,111,103,105,97,110,
> 109,
> -
> 101,116,104,111,100,115,32,111,102,118,97,114,105,97,110,116,32,111,102,67,
> 104,
> -
> 114,105,115,116,105,97,110,32,118,101,114,121,32,108,97,114,103,101,97,117,
> 116,
> -
> 111,109,111,116,105,118,101,98,121,32,102,97,114,32,116,104,101,114,97,110,
> 103,
> -
> 101,32,102,114,111,109,112,117,114,115,117,105,116,32,111,102,102,111,108,1
> 08,
> -
> 111,119,32,116,104,101,98,114,111,117,103,104,116,32,116,111,105,110,32,69,
> 110,
> -
> 103,108,97,110,100,97,103,114,101,101,32,116,104,97,116,97,99,99,117,115,10
> 1,100
> -
> ,32,111,102,99,111,109,101,115,32,102,114,111,109,112,114,101,118,101,110,1
> 16,
> -
> 105,110,103,100,105,118,32,115,116,121,108,101,61,104,105,115,32,111,114,32
> ,104,
> -
> 101,114,116,114,101,109,101,110,100,111,117,115,102,114,101,101,100,111,10
> 9,32,
> -
> 111,102,99,111,110,99,101,114,110,105,110,103,48,32,49,101,109,32,49,101,10
> 9,59,
> -
> 66,97,115,107,101,116,98,97,108,108,47,115,116,121,108,101,46,99,115,115,97,
> 110,
> -
> 32,101,97,114,108,105,101,114,101,118,101,110,32,97,102,116,101,114,47,34,3
> 2,116
> -
> ,105,116,108,101,61,34,46,99,111,109,47,105,110,100,101,120,116,97,107,105,1
> 10,
> -
> 103,32,116,104,101,112,105,116,116,115,98,117,114,103,104,99,111,110,116,10
> 1,110
> -
> ,116,34,62,13,60,115,99,114,105,112,116,62,40,102,116,117,114,110,101,100,32
> ,111
> -
> ,117,116,104,97,118,105,110,103,32,116,104,101,60,47,115,112,97,110,62,13,10
> ,32,
> -
> 111,99,99,97,115,105,111,110,97,108,98,101,99,97,117,115,101,32,105,116,115,
> 116,
> -
> 97,114,116,101,100,32,116,111,112,104,121,115,105,99,97,108,108,121,62,60,4
> 7,100
> -
> ,105,118,62,10,32,32,99,114,101,97,116,101,100,32,98,121,67,117,114,114,101,
> 110,
> -
> 116,108,121,44,32,98,103,99,111,108,111,114,61,34,116,97,98,105,110,100,101,
> 120,
> -
> 61,34,100,105,115,97,115,116,114,111,117,115,65,110,97,108,121,116,105,99,1
> 15,32
> -
> ,97,108,115,111,32,104,97,115,32,97,62,60,100,105,118,32,105,100,61,34,60,47,
> 115
> -
> ,116,121,108,101,62,10,60,99,97,108,108,101,100,32,102,111,114,115,105,110,1
> 03,
> -
> 101,114,32,97,110,100,46,115,114,99,32,61,32,34,47,47,118,105,111,108,97,116
> ,105
> -
> ,111,110,115,116,104,105,115,32,112,111,105,110,116,99,111,110,115,116,97,1
> 10,
> -
> 116,108,121,105,115,32,108,111,99,97,116,101,100,114,101,99,111,114,100,105
> ,110,
> -
> 103,115,100,32,102,114,111,109,32,116,104,101,110,101,100,101,114,108,97,11
> 0,100
> -
> ,115,112,111,114,116,117,103,117,195,170,115,215,162,215,145,215,168,215,15
> 3,215
> -
> ,170,217,129,216,167,216,177,216,179,219,140,100,101,115,97,114,114,111,108
> ,108,
> -
> 111,99,111,109,101,110,116,97,114,105,111,101,100,117,99,97,99,105,195,179,
> 110,
> -
> 115,101,112,116,105,101,109,98,114,101,114,101,103,105,115,116,114,97,100,1
> 11,
> -
> 100,105,114,101,99,99,105,195,179,110,117,98,105,99,97,99,105,195,179,110,1
> 12,
> -
> 117,98,108,105,99,105,100,97,100,114,101,115,112,117,101,115,116,97,115,114
> ,101,
> -
> 115,117,108,116,97,100,111,115,105,109,112,111,114,116,97,110,116,101,114,1
> 01,
> -
> 115,101,114,118,97,100,111,115,97,114,116,195,173,99,117,108,111,115,100,10
> 5,102
> -
> ,101,114,101,110,116,101,115,115,105,103,117,105,101,110,116,101,115,114,10
> 1,112
> -
> ,195,186,98,108,105,99,97,115,105,116,117,97,99,105,195,179,110,109,105,110,
> 105,
> -
> 115,116,101,114,105,111,112,114,105,118,97,99,105,100,97,100,100,105,114,10
> 1,99,
> -
> 116,111,114,105,111,102,111,114,109,97,99,105,195,179,110,112,111,98,108,97
> ,99,
> -
> 105,195,179,110,112,114,101,115,105,100,101,110,116,101,99,111,110,116,101,
> 110,
> -
> 105,100,111,115,97,99,99,101,115,111,114,105,111,115,116,101,99,104,110,111
> ,114,
> -
> 97,116,105,112,101,114,115,111,110,97,108,101,115,99,97,116,101,103,111,114
> ,195,
> -
> 173,97,101,115,112,101,99,105,97,108,101,115,100,105,115,112,111,110,105,98
> ,108,
> -
> 101,97,99,116,117,97,108,105,100,97,100,114,101,102,101,114,101,110,99,105,
> 97,
> -
> 118,97,108,108,97,100,111,108,105,100,98,105,98,108,105,111,116,101,99,97,1
> 14,
> -
> 101,108,97,99,105,111,110,101,115,99,97,108,101,110,100,97,114,105,111,112,
> 111,
> -
> 108,195,173,116,105,99,97,115,97,110,116,101,114,105,111,114,101,115,100,11
> 1,99,
> -
> 117,109,101,110,116,111,115,110,97,116,117,114,97,108,101,122,97,109,97,116
> ,101,
> -
> 114,105,97,108,101,115,100,105,102,101,114,101,110,99,105,97,101,99,111,110
> ,195,
> -
> 179,109,105,99,97,116,114,97,110,115,112,111,114,116,101,114,111,100,114,19
> 5,173
> -
> ,103,117,101,122,112,97,114,116,105,99,105,112,97,114,101,110,99,117,101,11
> 0,116
> -
> ,114,97,110,100,105,115,99,117,115,105,195,179,110,101,115,116,114,117,99,1
> 16,
> -
> 117,114,97,102,117,110,100,97,99,105,195,179,110,102,114,101,99,117,101,110
> ,116,
> -
> 101,115,112,101,114,109,97,110,101,110,116,101,116,111,116,97,108,109,101,1
> 10,
> -
> 116,101,208,188,208,190,208,182,208,189,208,190,208,177,209,131,208,180,20
> 8,181,
> -
> 209,130,208,188,208,190,208,182,208,181,209,130,208,178,209,128,208,181,20
> 8,188,
> -
> 209,143,209,130,208,176,208,186,208,182,208,181,209,135,209,130,208,190,20
> 8,177,
> -
> 209,139,208,177,208,190,208,187,208,181,208,181,208,190,209,135,208,181,20
> 8,189,
> -
> 209,140,209,141,209,130,208,190,208,179,208,190,208,186,208,190,208,179,20
> 8,180,
> -
> 208,176,208,191,208,190,209,129,208,187,208,181,208,178,209,129,208,181,20
> 8,179,
> -
> 208,190,209,129,208,176,208,185,209,130,208,181,209,135,208,181,209,128,20
> 8,181,
> -
> 208,183,208,188,208,190,208,179,209,131,209,130,209,129,208,176,208,185,20
> 9,130,
> -
> 208,176,208,182,208,184,208,183,208,189,208,184,208,188,208,181,208,182,20
> 8,180,
> -
> 209,131,208,177,209,131,208,180,209,131,209,130,208,159,208,190,208,184,20
> 9,129,
> -
> 208,186,208,183,208,180,208,181,209,129,209,140,208,178,208,184,208,180,20
> 8,181,
> -
> 208,190,209,129,208,178,209,143,208,183,208,184,208,189,209,131,208,182,20
> 8,189,
> -
> 208,190,209,129,208,178,208,190,208,181,208,185,208,187,209,142,208,180,20
> 8,181,
> -
> 208,185,208,191,208,190,209,128,208,189,208,190,208,188,208,189,208,190,20
> 8,179,
> -
> 208,190,208,180,208,181,209,130,208,181,208,185,209,129,208,178,208,190,20
> 8,184,
> -
> 209,133,208,191,209,128,208,176,208,178,208,176,209,130,208,176,208,186,20
> 8,190,
> -
> 208,185,208,188,208,181,209,129,209,130,208,190,208,184,208,188,208,181,20
> 8,181,
> -
> 209,130,208,182,208,184,208,183,208,189,209,140,208,190,208,180,208,189,20
> 8,190,
> -
> 208,185,208,187,209,131,209,135,209,136,208,181,208,191,208,181,209,128,20
> 8,181,
> -
> 208,180,209,135,208,176,209,129,209,130,208,184,209,135,208,176,209,129,20
> 9,130,
> -
> 209,140,209,128,208,176,208,177,208,190,209,130,208,189,208,190,208,178,20
> 9,139,
> -
> 209,133,208,191,209,128,208,176,208,178,208,190,209,129,208,190,208,177,20
> 8,190,
> -
> 208,185,208,191,208,190,209,130,208,190,208,188,208,188,208,181,208,189,20
> 8,181,
> -
> 208,181,209,135,208,184,209,129,208,187,208,181,208,189,208,190,208,178,20
> 9,139,
> -
> 208,181,209,131,209,129,208,187,209,131,208,179,208,190,208,186,208,190,20
> 8,187,
> -
> 208,190,208,189,208,176,208,183,208,176,208,180,209,130,208,176,208,186,20
> 8,190,
> -
> 208,181,209,130,208,190,208,179,208,180,208,176,208,191,208,190,209,135,20
> 9,130,
> -
> 208,184,208,159,208,190,209,129,208,187,208,181,209,130,208,176,208,186,20
> 8,184,
> -
> 208,181,208,189,208,190,208,178,209,139,208,185,209,129,209,130,208,190,20
> 8,184,
> -
> 209,130,209,130,208,176,208,186,208,184,209,133,209,129,209,128,208,176,20
> 8,183,
> -
> 209,131,208,161,208,176,208,189,208,186,209,130,209,132,208,190,209,128,20
> 9,131,
> -
> 208,188,208,154,208,190,208,179,208,180,208,176,208,186,208,189,208,184,20
> 8,179,
> -
> 208,184,209,129,208,187,208,190,208,178,208,176,208,189,208,176,209,136,20
> 8,181,
> -
> 208,185,208,189,208,176,208,185,209,130,208,184,209,129,208,178,208,190,20
> 8,184,
> -
> 208,188,209,129,208,178,209,143,208,183,209,140,208,187,209,142,208,177,20
> 8,190,
> -
> 208,185,209,135,208,176,209,129,209,130,208,190,209,129,209,128,208,181,20
> 8,180,
> -
> 208,184,208,154,209,128,208,190,208,188,208,181,208,164,208,190,209,128,20
> 9,131,
> -
> 208,188,209,128,209,139,208,189,208,186,208,181,209,129,209,130,208,176,20
> 8,187,
> -
> 208,184,208,191,208,190,208,184,209,129,208,186,209,130,209,139,209,129,20
> 9,143,
> -
> 209,135,208,188,208,181,209,129,209,143,209,134,209,134,208,181,208,189,20
> 9,130,
> -
> 209,128,209,130,209,128,209,131,208,180,208,176,209,129,208,176,208,188,20
> 9,139,
> -
> 209,133,209,128,209,139,208,189,208,186,208,176,208,157,208,190,208,178,20
> 9,139,
> -
> 208,185,209,135,208,176,209,129,208,190,208,178,208,188,208,181,209,129,20
> 9,130,
> -
> 208,176,209,132,208,184,208,187,209,140,208,188,208,188,208,176,209,128,20
> 9,130,
> -
> 208,176,209,129,209,130,209,128,208,176,208,189,208,188,208,181,209,129,20
> 9,130,
> -
> 208,181,209,130,208,181,208,186,209,129,209,130,208,189,208,176,209,136,20
> 8,184,
> -
> 209,133,208,188,208,184,208,189,209,131,209,130,208,184,208,188,208,181,20
> 8,189,
> -
> 208,184,208,184,208,188,208,181,209,142,209,130,208,189,208,190,208,188,20
> 8,181,
> -
> 209,128,208,179,208,190,209,128,208,190,208,180,209,129,208,176,208,188,20
> 8,190,
> -
> 208,188,209,141,209,130,208,190,208,188,209,131,208,186,208,190,208,189,20
> 9,134,
> -
> 208,181,209,129,208,178,208,190,208,181,208,188,208,186,208,176,208,186,20
> 8,190,
> -
> 208,185,208,144,209,128,209,133,208,184,208,178,217,133,217,134,216,170,21
> 6,175,
> -
> 217,137,216,165,216,177,216,179,216,167,217,132,216,177,216,179,216,167,21
> 7,132,
> -
> 216,169,216,167,217,132,216,185,216,167,217,133,217,131,216,170,216,168,21
> 7,135,
> -
> 216,167,216,168,216,177,216,167,217,133,216,172,216,167,217,132,217,138,21
> 7,136,
> -
> 217,133,216,167,217,132,216,181,217,136,216,177,216,172,216,175,217,138,21
> 6,175,
> -
> 216,169,216,167,217,132,216,185,216,182,217,136,216,165,216,182,216,167,21
> 7,129,
> -
> 216,169,216,167,217,132,217,130,216,179,217,133,216,167,217,132,216,185,21
> 6,167,
> -
> 216,168,216,170,216,173,217,133,217,138,217,132,217,133,217,132,217,129,21
> 6,167,
> -
> 216,170,217,133,217,132,216,170,217,130,217,137,216,170,216,185,216,175,21
> 7,138,
> -
> 217,132,216,167,217,132,216,180,216,185,216,177,216,163,216,174,216,168,21
> 6,167,
> -
> 216,177,216,170,216,183,217,136,217,138,216,177,216,185,217,132,217,138,21
> 7,131,
> -
> 217,133,216,165,216,177,217,129,216,167,217,130,216,183,217,132,216,168,21
> 6,167,
> -
> 216,170,216,167,217,132,217,132,216,186,216,169,216,170,216,177,216,170,21
> 7,138,
> -
> 216,168,216,167,217,132,217,134,216,167,216,179,216,167,217,132,216,180,21
> 7,138,
> -
> 216,174,217,133,217,134,216,170,216,175,217,138,216,167,217,132,216,185,21
> 6,177,
> -
> 216,168,216,167,217,132,217,130,216,181,216,181,216,167,217,129,217,132,21
> 6,167,
> -
> 217,133,216,185,217,132,217,138,217,135,216,167,216,170,216,173,216,175,21
> 7,138,
> -
> 216,171,216,167,217,132,217,132,217,135,217,133,216,167,217,132,216,185,21
> 7,133,
> -
> 217,132,217,133,217,131,216,170,216,168,216,169,217,138,217,133,217,131,21
> 7,134,
> -
> 217,131,216,167,217,132,216,183,217,129,217,132,217,129,217,138,216,175,21
> 7,138,
> -
> 217,136,216,165,216,175,216,167,216,177,216,169,216,170,216,167,216,177,21
> 7,138,
> -
> 216,174,216,167,217,132,216,181,216,173,216,169,216,170,216,179,216,172,21
> 7,138,
> -
> 217,132,216,167,217,132,217,136,217,130,216,170,216,185,217,134,216,175,21
> 7,133,
> -
> 216,167,217,133,216,175,217,138,217,134,216,169,216,170,216,181,217,133,21
> 7,138,
> -
> 217,133,216,163,216,177,216,180,217,138,217,129,216,167,217,132,216,176,21
> 7,138,
> -
> 217,134,216,185,216,177,216,168,217,138,216,169,216,168,217,136,216,167,21
> 6,168,
> -
> 216,169,216,163,217,132,216,185,216,167,216,168,216,167,217,132,216,179,21
> 7,129,
> -
> 216,177,217,133,216,180,216,167,217,131,217,132,216,170,216,185,216,167,21
> 7,132,
> -
> 217,137,216,167,217,132,216,163,217,136,217,132,216,167,217,132,216,179,21
> 7,134,
> -
> 216,169,216,172,216,167,217,133,216,185,216,169,216,167,217,132,216,181,21
> 6,173,
> -
> 217,129,216,167,217,132,216,175,217,138,217,134,217,131,217,132,217,133,21
> 6,167,
> -
> 216,170,216,167,217,132,216,174,216,167,216,181,216,167,217,132,217,133,21
> 7,132,
> -
> 217,129,216,163,216,185,216,182,216,167,216,161,217,131,216,170,216,167,21
> 6,168,
> -
> 216,169,216,167,217,132,216,174,217,138,216,177,216,177,216,179,216,167,21
> 6,166,
> -
> 217,132,216,167,217,132,217,130,217,132,216,168,216,167,217,132,216,163,21
> 6,175,
> -
> 216,168,217,133,217,130,216,167,216,183,216,185,217,133,216,177,216,167,21
> 6,179,
> -
> 217,132,217,133,217,134,216,183,217,130,216,169,216,167,217,132,217,131,21
> 6,170,
> -
> 216,168,216,167,217,132,216,177,216,172,217,132,216,167,216,180,216,170,21
> 6,177,
> -
> 217,131,216,167,217,132,217,130,216,175,217,133,217,138,216,185,216,183,21
> 7,138,
> -
> 217,131,115,66,121,84,97,103,78,97,109,101,40,46,106,112,103,34,32,97,108,11
> 6,61
> -
> ,34,49,112,120,32,115,111,108,105,100,32,35,46,103,105,102,34,32,97,108,116,
> 61,
> -
> 34,116,114,97,110,115,112,97,114,101,110,116,105,110,102,111,114,109,97,116
> ,105,
> -
> 111,110,97,112,112,108,105,99,97,116,105,111,110,34,32,111,110,99,108,105,9
> 9,107
> -
> ,61,34,101,115,116,97,98,108,105,115,104,101,100,97,100,118,101,114,116,105,
> 115,
> -
> 105,110,103,46,112,110,103,34,32,97,108,116,61,34,101,110,118,105,114,111,1
> 10,
> -
> 109,101,110,116,112,101,114,102,111,114,109,97,110,99,101,97,112,112,114,11
> 1,112
> -
> ,114,105,97,116,101,38,97,109,112,59,109,100,97,115,104,59,105,109,109,101,1
> 00,
> -
> 105,97,116,101,108,121,60,47,115,116,114,111,110,103,62,60,47,114,97,116,10
> 4,101
> -
> ,114,32,116,104,97,110,116,101,109,112,101,114,97,116,117,114,101,100,101,1
> 18,
> -
> 101,108,111,112,109,101,110,116,99,111,109,112,101,116,105,116,105,111,110,
> 112,
> -
> 108,97,99,101,104,111,108,100,101,114,118,105,115,105,98,105,108,105,116,12
> 1,58,
> -
> 99,111,112,121,114,105,103,104,116,34,62,48,34,32,104,101,105,103,104,116,6
> 1,34,
> -
> 101,118,101,110,32,116,104,111,117,103,104,114,101,112,108,97,99,101,109,10
> 1,110
> -
> ,116,100,101,115,116,105,110,97,116,105,111,110,67,111,114,112,111,114,97,1
> 16,
> -
> 105,111,110,60,117,108,32,99,108,97,115,115,61,34,65,115,115,111,99,105,97,1
> 16,
> -
> 105,111,110,105,110,100,105,118,105,100,117,97,108,115,112,101,114,115,112,
> 101,
> -
> 99,116,105,118,101,115,101,116,84,105,109,101,111,117,116,40,117,114,108,40
> ,104,
> -
> 116,116,112,58,47,47,109,97,116,104,101,109,97,116,105,99,115,109,97,114,10
> 3,105
> -
> ,110,45,116,111,112,58,101,118,101,110,116,117,97,108,108,121,32,100,101,11
> 5,99,
> -
> 114,105,112,116,105,111,110,41,32,110,111,45,114,101,112,101,97,116,99,111,
> 108,
> -
> 108,101,99,116,105,111,110,115,46,74,80,71,124,116,104,117,109,98,124,112,9
> 7,114
> -
> ,116,105,99,105,112,97,116,101,47,104,101,97,100,62,60,98,111,100,121,102,10
> 8,
> -
> 111,97,116,58,108,101,102,116,59,60,108,105,32,99,108,97,115,115,61,34,104,1
> 17,
> -
> 110,100,114,101,100,115,32,111,102,10,10,72,111,119,101,118,101,114,44,32,9
> 9,111
> -
> ,109,112,111,115,105,116,105,111,110,99,108,101,97,114,58,98,111,116,104,59,
> 99,
> -
> 111,111,112,101,114,97,116,105,111,110,119,105,116,104,105,110,32,116,104,1
> 01,32
> -
> ,108,97,98,101,108,32,102,111,114,61,34,98,111,114,100,101,114,45,116,111,11
> 2,58
> -
> ,78,101,119,32,90,101,97,108,97,110,100,114,101,99,111,109,109,101,110,100,1
> 01,
> -
> 100,112,104,111,116,111,103,114,97,112,104,121,105,110,116,101,114,101,115,
> 116,
> -
> 105,110,103,38,108,116,59,115,117,112,38,103,116,59,99,111,110,116,114,111,
> 118,
> -
> 101,114,115,121,78,101,116,104,101,114,108,97,110,100,115,97,108,116,101,11
> 4,110
> -
> ,97,116,105,118,101,109,97,120,108,101,110,103,116,104,61,34,115,119,105,11
> 6,122
> -
> ,101,114,108,97,110,100,68,101,118,101,108,111,112,109,101,110,116,101,115,
> 115,
> -
> 101,110,116,105,97,108,108,121,10,10,65,108,116,104,111,117,103,104,32,60,4
> 7,116
> -
> ,101,120,116,97,114,101,97,62,116,104,117,110,100,101,114,98,105,114,100,11
> 4,101
> -
> ,112,114,101,115,101,110,116,101,100,38,97,109,112,59,110,100,97,115,104,59,
> 115,
> -
> 112,101,99,117,108,97,116,105,111,110,99,111,109,109,117,110,105,116,105,10
> 1,115
> -
> ,108,101,103,105,115,108,97,116,105,111,110,101,108,101,99,116,114,111,110,
> 105,
> -
> 99,115,10,9,60,100,105,118,32,105,100,61,34,105,108,108,117,115,116,114,97,1
> 16,
> -
> 101,100,101,110,103,105,110,101,101,114,105,110,103,116,101,114,114,105,11
> 6,111,
> -
> 114,105,101,115,97,117,116,104,111,114,105,116,105,101,115,100,105,115,116,
> 114,
> -
> 105,98,117,116,101,100,54,34,32,104,101,105,103,104,116,61,34,115,97,110,11
> 5,45,
> -
> 115,101,114,105,102,59,99,97,112,97,98,108,101,32,111,102,32,100,105,115,97,
> 112,
> -
> 112,101,97,114,101,100,105,110,116,101,114,97,99,116,105,118,101,108,111,11
> 1,107
> -
> ,105,110,103,32,102,111,114,105,116,32,119,111,117,108,100,32,98,101,65,102,
> 103,
> -
> 104,97,110,105,115,116,97,110,119,97,115,32,99,114,101,97,116,101,100,77,97,
> 116,
> -
> 104,46,102,108,111,111,114,40,115,117,114,114,111,117,110,100,105,110,103,9
> 9,97,
> -
> 110,32,97,108,115,111,32,98,101,111,98,115,101,114,118,97,116,105,111,110,1
> 09,97
> -
> ,105,110,116,101,110,97,110,99,101,101,110,99,111,117,110,116,101,114,101,1
> 00,60
> -
> ,104,50,32,99,108,97,115,115,61,34,109,111,114,101,32,114,101,99,101,110,116
> ,105
> -
> ,116,32,104,97,115,32,98,101,101,110,105,110,118,97,115,105,111,110,32,111,1
> 02,
> -
> 41,46,103,101,116,84,105,109,101,40,41,102,117,110,100,97,109,101,110,116,9
> 7,108
> -
> ,68,101,115,112,105,116,101,32,116,104,101,34,62,60,100,105,118,32,105,100,6
> 1,34
> -
> ,105,110,115,112,105,114,97,116,105,111,110,101,120,97,109,105,110,97,116,1
> 05,
> -
> 111,110,112,114,101,112,97,114,97,116,105,111,110,101,120,112,108,97,110,97
> ,116,
> -
> 105,111,110,60,105,110,112,117,116,32,105,100,61,34,60,47,97,62,60,47,115,11
> 2,97
> -
> ,110,62,118,101,114,115,105,111,110,115,32,111,102,105,110,115,116,114,117,
> 109,
> -
> 101,110,116,115,98,101,102,111,114,101,32,116,104,101,32,32,61,32,39,104,11
> 6,116
> -
> ,112,58,47,47,68,101,115,99,114,105,112,116,105,111,110,114,101,108,97,116,1
> 05,
> -
> 118,101,108,121,32,46,115,117,98,115,116,114,105,110,103,40,101,97,99,104,3
> 2,111
> -
> ,102,32,116,104,101,101,120,112,101,114,105,109,101,110,116,115,105,110,102
> ,108,
> -
> 117,101,110,116,105,97,108,105,110,116,101,103,114,97,116,105,111,110,109,9
> 7,110
> -
> ,121,32,112,101,111,112,108,101,100,117,101,32,116,111,32,116,104,101,32,99,
> 111,
> -
> 109,98,105,110,97,116,105,111,110,100,111,32,110,111,116,32,104,97,118,101,
> 77,
> -
> 105,100,100,108,101,32,69,97,115,116,60,110,111,115,99,114,105,112,116,62,6
> 0,99,
> -
> 111,112,121,114,105,103,104,116,34,32,112,101,114,104,97,112,115,32,116,104
> ,101,
> -
> 105,110,115,116,105,116,117,116,105,111,110,105,110,32,68,101,99,101,109,98
> ,101,
> -
> 114,97,114,114,97,110,103,101,109,101,110,116,109,111,115,116,32,102,97,109
> ,111,
> -
> 117,115,112,101,114,115,111,110,97,108,105,116,121,99,114,101,97,116,105,11
> 1,110
> -
> ,32,111,102,108,105,109,105,116,97,116,105,111,110,115,101,120,99,108,117,1
> 15,
> -
> 105,118,101,108,121,115,111,118,101,114,101,105,103,110,116,121,45,99,111,1
> 10,
> -
> 116,101,110,116,34,62,10,60,116,100,32,99,108,97,115,115,61,34,117,110,100,1
> 01,
> -
> 114,103,114,111,117,110,100,112,97,114,97,108,108,101,108,32,116,111,100,11
> 1,99,
> -
> 116,114,105,110,101,32,111,102,111,99,99,117,112,105,101,100,32,98,121,116,
> 101,
> -
> 114,109,105,110,111,108,111,103,121,82,101,110,97,105,115,115,97,110,99,101
> ,97,
> -
> 32,110,117,109,98,101,114,32,111,102,115,117,112,112,111,114,116,32,102,111
> ,114,
> -
> 101,120,112,108,111,114,97,116,105,111,110,114,101,99,111,103,110,105,116,1
> 05,
> -
> 111,110,112,114,101,100,101,99,101,115,115,111,114,60,105,109,103,32,115,11
> 4,99,
> -
> 61,34,47,60,104,49,32,99,108,97,115,115,61,34,112,117,98,108,105,99,97,116,1
> 05,
> -
> 111,110,109,97,121,32,97,108,115,111,32,98,101,115,112,101,99,105,97,108,10
> 5,122
> -
> ,101,100,60,47,102,105,101,108,100,115,101,116,62,112,114,111,103,114,101,1
> 15,
> -
> 115,105,118,101,109,105,108,108,105,111,110,115,32,111,102,115,116,97,116,1
> 01,
> -
> 115,32,116,104,97,116,101,110,102,111,114,99,101,109,101,110,116,97,114,111
> ,117,
> -
> 110,100,32,116,104,101,32,111,110,101,32,97,110,111,116,104,101,114,46,112,
> 97,
> -
> 114,101,110,116,78,111,100,101,97,103,114,105,99,117,108,116,117,114,101,65
> ,108,
> -
> 116,101,114,110,97,116,105,118,101,114,101,115,101,97,114,99,104,101,114,11
> 5,116
> -
> ,111,119,97,114,100,115,32,116,104,101,77,111,115,116,32,111,102,32,116,104,
> 101,
> -
> 109,97,110,121,32,111,116,104,101,114,32,40,101,115,112,101,99,105,97,108,1
> 08,
> -
> 121,60,116,100,32,119,105,100,116,104,61,34,59,119,105,100,116,104,58,49,48,
> 48,
> -
> 37,105,110,100,101,112,101,110,100,101,110,116,60,104,51,32,99,108,97,115,1
> 15,61
> -
> ,34,32,111,110,99,104,97,110,103,101,61,34,41,46,97,100,100,67,108,97,115,11
> 5,40
> -
> ,105,110,116,101,114,97,99,116,105,111,110,79,110,101,32,111,102,32,116,104,
> 101,
> -
> 32,100,97,117,103,104,116,101,114,32,111,102,97,99,99,101,115,115,111,114,1
> 05,
> -
> 101,115,98,114,97,110,99,104,101,115,32,111,102,13,10,60,100,105,118,32,105,
> 100,
> -
> 61,34,116,104,101,32,108,97,114,103,101,115,116,100,101,99,108,97,114,97,11
> 6,105
> -
> ,111,110,114,101,103,117,108,97,116,105,111,110,115,73,110,102,111,114,109,
> 97,
> -
> 116,105,111,110,116,114,97,110,115,108,97,116,105,111,110,100,111,99,117,10
> 9,101
> -
> ,110,116,97,114,121,105,110,32,111,114,100,101,114,32,116,111,34,62,10,60,10
> 4,
> -
> 101,97,100,62,10,60,34,32,104,101,105,103,104,116,61,34,49,97,99,114,111,115
> ,115
> -
> ,32,116,104,101,32,111,114,105,101,110,116,97,116,105,111,110,41,59,60,47,11
> 5,99
> -
> ,114,105,112,116,62,105,109,112,108,101,109,101,110,116,101,100,99,97,110,3
> 2,98,
> -
> 101,32,115,101,101,110,116,104,101,114,101,32,119,97,115,32,97,100,101,109,
> 111,
> -
> 110,115,116,114,97,116,101,99,111,110,116,97,105,110,101,114,34,62,99,111,1
> 10,
> -
> 110,101,99,116,105,111,110,115,116,104,101,32,66,114,105,116,105,115,104,11
> 9,97,
> -
> 115,32,119,114,105,116,116,101,110,33,105,109,112,111,114,116,97,110,116,59
> ,112,
> -
> 120,59,32,109,97,114,103,105,110,45,102,111,108,108,111,119,101,100,32,98,1
> 21,97
> -
> ,98,105,108,105,116,121,32,116,111,32,99,111,109,112,108,105,99,97,116,101,1
> 00,
> -
> 100,117,114,105,110,103,32,116,104,101,32,105,109,109,105,103,114,97,116,10
> 5,111
> -
> ,110,97,108,115,111,32,99,97,108,108,101,100,60,104,52,32,99,108,97,115,115,
> 61,
> -
> 34,100,105,115,116,105,110,99,116,105,111,110,114,101,112,108,97,99,101,100
> ,32,
> -
> 98,121,103,111,118,101,114,110,109,101,110,116,115,108,111,99,97,116,105,11
> 1,110
> -
> ,32,111,102,105,110,32,78,111,118,101,109,98,101,114,119,104,101,116,104,10
> 1,114
> -
> ,32,116,104,101,60,47,112,62,10,60,47,100,105,118,62,97,99,113,117,105,115,1
> 05,
> -
> 116,105,111,110,99,97,108,108,101,100,32,116,104,101,32,112,101,114,115,101
> ,99,
> -
> 117,116,105,111,110,100,101,115,105,103,110,97,116,105,111,110,123,102,111,
> 110,
> -
> 116,45,115,105,122,101,58,97,112,112,101,97,114,101,100,32,105,110,105,110,
> 118,
> -
> 101,115,116,105,103,97,116,101,101,120,112,101,114,105,101,110,99,101,100,1
> 09,
> -
> 111,115,116,32,108,105,107,101,108,121,119,105,100,101,108,121,32,117,115,1
> 01,
> -
> 100,100,105,115,99,117,115,115,105,111,110,115,112,114,101,115,101,110,99,1
> 01,32
> -
> ,111,102,32,40,100,111,99,117,109,101,110,116,46,101,120,116,101,110,115,10
> 5,118
> -
> ,101,108,121,73,116,32,104,97,115,32,98,101,101,110,105,116,32,100,111,101,1
> 15,
> -
> 32,110,111,116,99,111,110,116,114,97,114,121,32,116,111,105,110,104,97,98,1
> 05,
> -
> 116,97,110,116,115,105,109,112,114,111,118,101,109,101,110,116,115,99,104,1
> 11,
> -
> 108,97,114,115,104,105,112,99,111,110,115,117,109,112,116,105,111,110,105,1
> 10,
> -
> 115,116,114,117,99,116,105,111,110,102,111,114,32,101,120,97,109,112,108,10
> 1,111
> -
> ,110,101,32,111,114,32,109,111,114,101,112,120,59,32,112,97,100,100,105,110,
> 103,
> -
> 116,104,101,32,99,117,114,114,101,110,116,97,32,115,101,114,105,101,115,32,
> 111,
> -
> 102,97,114,101,32,117,115,117,97,108,108,121,114,111,108,101,32,105,110,32,
> 116,
> -
> 104,101,112,114,101,118,105,111,117,115,108,121,32,100,101,114,105,118,97,1
> 16,
> -
> 105,118,101,115,101,118,105,100,101,110,99,101,32,111,102,101,120,112,101,1
> 14,
> -
> 105,101,110,99,101,115,99,111,108,111,114,115,99,104,101,109,101,115,116,97
> ,116,
> -
> 101,100,32,116,104,97,116,99,101,114,116,105,102,105,99,97,116,101,60,47,97,
> 62,
> -
> 60,47,100,105,118,62,10,32,115,101,108,101,99,116,101,100,61,34,104,105,103,
> 104,
> -
> 32,115,99,104,111,111,108,114,101,115,112,111,110,115,101,32,116,111,99,111
> ,109,
> -
> 102,111,114,116,97,98,108,101,97,100,111,112,116,105,111,110,32,111,102,116
> ,104,
> -
> 114,101,101,32,121,101,97,114,115,116,104,101,32,99,111,117,110,116,114,121
> ,105,
> -
> 110,32,70,101,98,114,117,97,114,121,115,111,32,116,104,97,116,32,116,104,10
> 1,112
> -
> ,101,111,112,108,101,32,119,104,111,32,112,114,111,118,105,100,101,100,32,9
> 8,121
> -
> ,60,112,97,114,97,109,32,110,97,109,101,97,102,102,101,99,116,101,100,32,98,
> 121,
> -
> 105,110,32,116,101,114,109,115,32,111,102,97,112,112,111,105,110,116,109,10
> 1,110
> -
> ,116,73,83,79,45,56,56,53,57,45,49,34,119,97,115,32,98,111,114,110,32,105,110,
> -
> 104,105,115,116,111,114,105,99,97,108,32,114,101,103,97,114,100,101,100,32,
> 97,
> -
> 115,109,101,97,115,117,114,101,109,101,110,116,105,115,32,98,97,115,101,100
> ,32,
> -
> 111,110,32,97,110,100,32,111,116,104,101,114,32,58,32,102,117,110,99,116,10
> 5,111
> -
> ,110,40,115,105,103,110,105,102,105,99,97,110,116,99,101,108,101,98,114,97,1
> 16,
> -
> 105,111,110,116,114,97,110,115,109,105,116,116,101,100,47,106,115,47,106,11
> 3,117
> -
> ,101,114,121,46,105,115,32,107,110,111,119,110,32,97,115,116,104,101,111,11
> 4,101
> -
> ,116,105,99,97,108,32,116,97,98,105,110,100,101,120,61,34,105,116,32,99,111,
> 117,
> -
> 108,100,32,98,101,60,110,111,115,99,114,105,112,116,62,10,104,97,118,105,11
> 0,103
> -
> ,32,98,101,101,110,13,10,60,104,101,97,100,62,13,10,60,32,38,113,117,111,116,
> 59,
> -
> 84,104,101,32,99,111,109,112,105,108,97,116,105,111,110,104,101,32,104,97,1
> 00,32
> -
> ,98,101,101,110,112,114,111,100,117,99,101,100,32,98,121,112,104,105,108,11
> 1,115
> -
> ,111,112,104,101,114,99,111,110,115,116,114,117,99,116,101,100,105,110,116,
> 101,
> -
> 110,100,101,100,32,116,111,97,109,111,110,103,32,111,116,104,101,114,99,111
> ,109,
> -
> 112,97,114,101,100,32,116,111,116,111,32,115,97,121,32,116,104,97,116,69,11
> 0,103
> -
> ,105,110,101,101,114,105,110,103,97,32,100,105,102,102,101,114,101,110,116,
> 114,
> -
> 101,102,101,114,114,101,100,32,116,111,100,105,102,102,101,114,101,110,99,1
> 01,
> -
> 115,98,101,108,105,101,102,32,116,104,97,116,112,104,111,116,111,103,114,97
> ,112,
> -
> 104,115,105,100,101,110,116,105,102,121,105,110,103,72,105,115,116,111,114,
> 121,
> -
> 32,111,102,32,82,101,112,117,98,108,105,99,32,111,102,110,101,99,101,115,11
> 5,97,
> -
> 114,105,108,121,112,114,111,98,97,98,105,108,105,116,121,116,101,99,104,110
> ,105,
> -
> 99,97,108,108,121,108,101,97,118,105,110,103,32,116,104,101,115,112,101,99,
> 116,
> -
> 97,99,117,108,97,114,102,114,97,99,116,105,111,110,32,111,102,101,108,101,9
> 9,116
> -
> ,114,105,99,105,116,121,104,101,97,100,32,111,102,32,116,104,101,114,101,11
> 5,116
> -
> ,97,117,114,97,110,116,115,112,97,114,116,110,101,114,115,104,105,112,101,1
> 09,
> -
> 112,104,97,115,105,115,32,111,110,109,111,115,116,32,114,101,99,101,110,116
> ,115,
> -
> 104,97,114,101,32,119,105,116,104,32,115,97,121,105,110,103,32,116,104,97,1
> 16,
> -
> 102,105,108,108,101,100,32,119,105,116,104,100,101,115,105,103,110,101,100,
> 32,
> -
> 116,111,105,116,32,105,115,32,111,102,116,101,110,34,62,60,47,105,102,114,9
> 7,109
> -
> ,101,62,97,115,32,102,111,108,108,111,119,115,58,109,101,114,103,101,100,32,
> 119,
> -
> 105,116,104,116,104,114,111,117,103,104,32,116,104,101,99,111,109,109,101,1
> 14,99
> -
> ,105,97,108,32,112,111,105,110,116,101,100,32,111,117,116,111,112,112,111,1
> 14,
> -
> 116,117,110,105,116,121,118,105,101,119,32,111,102,32,116,104,101,114,101,1
> 13,
> -
> 117,105,114,101,109,101,110,116,100,105,118,105,115,105,111,110,32,111,102,
> 112,
> -
> 114,111,103,114,97,109,109,105,110,103,104,101,32,114,101,99,101,105,118,10
> 1,100
> -
> ,115,101,116,73,110,116,101,114,118,97,108,34,62,60,47,115,112,97,110,62,60,
> 47,
> -
> 105,110,32,78,101,119,32,89,111,114,107,97,100,100,105,116,105,111,110,97,1
> 08,32
> -
> ,99,111,109,112,114,101,115,115,105,111,110,10,10,60,100,105,118,32,105,100,
> 61,
> -
> 34,105,110,99,111,114,112,111,114,97,116,101,59,60,47,115,99,114,105,112,11
> 6,62,
> -
> 60,97,116,116,97,99,104,69,118,101,110,116,98,101,99,97,109,101,32,116,104,1
> 01,
> -
> 32,34,32,116,97,114,103,101,116,61,34,95,99,97,114,114,105,101,100,32,111,11
> 7,
> -
> 116,83,111,109,101,32,111,102,32,116,104,101,115,99,105,101,110,99,101,32,9
> 7,110
> -
> ,100,116,104,101,32,116,105,109,101,32,111,102,67,111,110,116,97,105,110,10
> 1,114
> -
> ,34,62,109,97,105,110,116,97,105,110,105,110,103,67,104,114,105,115,116,111,
> 112,
> -
> 104,101,114,77,117,99,104,32,111,102,32,116,104,101,119,114,105,116,105,110
> ,103,
> -
> 115,32,111,102,34,32,104,101,105,103,104,116,61,34,50,115,105,122,101,32,11
> 1,102
> -
> ,32,116,104,101,118,101,114,115,105,111,110,32,111,102,32,109,105,120,116,1
> 17,
> -
> 114,101,32,111,102,32,98,101,116,119,101,101,110,32,116,104,101,69,120,97,1
> 09,
> -
> 112,108,101,115,32,111,102,101,100,117,99,97,116,105,111,110,97,108,99,111,
> 109,
> -
> 112,101,116,105,116,105,118,101,32,111,110,115,117,98,109,105,116,61,34,100
> ,105,
> -
> 114,101,99,116,111,114,32,111,102,100,105,115,116,105,110,99,116,105,118,10
> 1,47,
> -
> 68,84,68,32,88,72,84,77,76,32,114,101,108,97,116,105,110,103,32,116,111,116,
> 101,
> -
> 110,100,101,110,99,121,32,116,111,112,114,111,118,105,110,99,101,32,111,102
> ,119,
> -
> 104,105,99,104,32,119,111,117,108,100,100,101,115,112,105,116,101,32,116,10
> 4,101
> -
> ,115,99,105,101,110,116,105,102,105,99,32,108,101,103,105,115,108,97,116,11
> 7,114
> -
> ,101,46,105,110,110,101,114,72,84,77,76,32,97,108,108,101,103,97,116,105,111
> ,110
> -
> ,115,65,103,114,105,99,117,108,116,117,114,101,119,97,115,32,117,115,101,10
> 0,32,
> -
> 105,110,97,112,112,114,111,97,99,104,32,116,111,105,110,116,101,108,108,105
> ,103,
> -
> 101,110,116,121,101,97,114,115,32,108,97,116,101,114,44,115,97,110,115,45,1
> 15,
> -
> 101,114,105,102,100,101,116,101,114,109,105,110,105,110,103,80,101,114,102,
> 111,
> -
> 114,109,97,110,99,101,97,112,112,101,97,114,97,110,99,101,115,44,32,119,104,
> 105,
> -
> 99,104,32,105,115,32,102,111,117,110,100,97,116,105,111,110,115,97,98,98,11
> 4,101
> -
> ,118,105,97,116,101,100,104,105,103,104,101,114,32,116,104,97,110,115,32,10
> 2,114
> -
> ,111,109,32,116,104,101,32,105,110,100,105,118,105,100,117,97,108,32,99,111,
> 109,
> -
> 112,111,115,101,100,32,111,102,115,117,112,112,111,115,101,100,32,116,111,9
> 9,108
> -
> ,97,105,109,115,32,116,104,97,116,97,116,116,114,105,98,117,116,105,111,110,
> 102,
> -
> 111,110,116,45,115,105,122,101,58,49,101,108,101,109,101,110,116,115,32,111
> ,102,
> -
> 72,105,115,116,111,114,105,99,97,108,32,104,105,115,32,98,114,111,116,104,1
> 01,
> -
> 114,97,116,32,116,104,101,32,116,105,109,101,97,110,110,105,118,101,114,115
> ,97,
> -
> 114,121,103,111,118,101,114,110,101,100,32,98,121,114,101,108,97,116,101,10
> 0,32,
> -
> 116,111,32,117,108,116,105,109,97,116,101,108,121,32,105,110,110,111,118,97
> ,116,
> -
> 105,111,110,115,105,116,32,105,115,32,115,116,105,108,108,99,97,110,32,111,
> 110,
> -
> 108,121,32,98,101,100,101,102,105,110,105,116,105,111,110,115,116,111,71,77
> ,84,
> -
> 83,116,114,105,110,103,65,32,110,117,109,98,101,114,32,111,102,105,109,103,
> 32,99
> -
> ,108,97,115,115,61,34,69,118,101,110,116,117,97,108,108,121,44,119,97,115,32
> ,99,
> -
> 104,97,110,103,101,100,111,99,99,117,114,114,101,100,32,105,110,110,101,105
> ,103,
> -
> 104,98,111,114,105,110,103,100,105,115,116,105,110,103,117,105,115,104,119,
> 104,
> -
> 101,110,32,104,101,32,119,97,115,105,110,116,114,111,100,117,99,105,110,103
> ,116,
> -
> 101,114,114,101,115,116,114,105,97,108,77,97,110,121,32,111,102,32,116,104,
> 101,
> -
> 97,114,103,117,101,115,32,116,104,97,116,97,110,32,65,109,101,114,105,99,97,
> 110,
> -
> 99,111,110,113,117,101,115,116,32,111,102,119,105,100,101,115,112,114,101,9
> 7,100
> -
> ,32,119,101,114,101,32,107,105,108,108,101,100,115,99,114,101,101,110,32,97,
> 110,
> -
> 100,32,73,110,32,111,114,100,101,114,32,116,111,101,120,112,101,99,116,101,
> 100,
> -
> 32,116,111,100,101,115,99,101,110,100,97,110,116,115,97,114,101,32,108,111,
> 99,97
> -
> ,116,101,100,108,101,103,105,115,108,97,116,105,118,101,103,101,110,101,114
> ,97,
> -
> 116,105,111,110,115,32,98,97,99,107,103,114,111,117,110,100,109,111,115,116
> ,32,
> -
> 112,101,111,112,108,101,121,101,97,114,115,32,97,102,116,101,114,116,104,10
> 1,114
> -
> ,101,32,105,115,32,110,111,116,104,101,32,104,105,103,104,101,115,116,102,1
> 14,
> -
> 101,113,117,101,110,116,108,121,32,116,104,101,121,32,100,111,32,110,111,11
> 6,97,
> -
> 114,103,117,101,100,32,116,104,97,116,115,104,111,119,101,100,32,116,104,97
> ,116,
> -
> 112,114,101,100,111,109,105,110,97,110,116,116,104,101,111,108,111,103,105,
> 99,97
> -
> ,108,98,121,32,116,104,101,32,116,105,109,101,99,111,110,115,105,100,101,11
> 4,105
> -
> ,110,103,115,104,111,114,116,45,108,105,118,101,100,60,47,115,112,97,110,62,
> 60,
> -
> 47,97,62,99,97,110,32,98,101,32,117,115,101,100,118,101,114,121,32,108,105,1
> 16,
> -
> 116,108,101,111,110,101,32,111,102,32,116,104,101,32,104,97,100,32,97,108,1
> 14,
> -
> 101,97,100,121,105,110,116,101,114,112,114,101,116,101,100,99,111,109,109,1
> 17,
> -
> 110,105,99,97,116,101,102,101,97,116,117,114,101,115,32,111,102,103,111,118
> ,101,
> -
> 114,110,109,101,110,116,44,60,47,110,111,115,99,114,105,112,116,62,101,110,
> 116,
> -
> 101,114,101,100,32,116,104,101,34,32,104,101,105,103,104,116,61,34,51,73,11
> 0,100
> -
> ,101,112,101,110,100,101,110,116,112,111,112,117,108,97,116,105,111,110,115
> ,108,
> -
> 97,114,103,101,45,115,99,97,108,101,46,32,65,108,116,104,111,117,103,104,32,
> 117,
> -
> 115,101,100,32,105,110,32,116,104,101,100,101,115,116,114,117,99,116,105,11
> 1,110
> -
> ,112,111,115,115,105,98,105,108,105,116,121,115,116,97,114,116,105,110,103,
> 32,
> -
> 105,110,116,119,111,32,111,114,32,109,111,114,101,101,120,112,114,101,115,1
> 15,
> -
> 105,111,110,115,115,117,98,111,114,100,105,110,97,116,101,108,97,114,103,10
> 1,114
> -
> ,32,116,104,97,110,104,105,115,116,111,114,121,32,97,110,100,60,47,111,112,1
> 16,
> -
> 105,111,110,62,13,10,67,111,110,116,105,110,101,110,116,97,108,101,108,105,
> 109,
> -
> 105,110,97,116,105,110,103,119,105,108,108,32,110,111,116,32,98,101,112,114
> ,97,
> -
> 99,116,105,99,101,32,111,102,105,110,32,102,114,111,110,116,32,111,102,115,
> 105,
> -
> 116,101,32,111,102,32,116,104,101,101,110,115,117,114,101,32,116,104,97,116
> ,116,
> -
> 111,32,99,114,101,97,116,101,32,97,109,105,115,115,105,115,115,105,112,112,
> 105,
> -
> 112,111,116,101,110,116,105,97,108,108,121,111,117,116,115,116,97,110,100,1
> 05,
> -
> 110,103,98,101,116,116,101,114,32,116,104,97,110,119,104,97,116,32,105,115,
> 32,
> -
> 110,111,119,115,105,116,117,97,116,101,100,32,105,110,109,101,116,97,32,110
> ,97,
> -
> 109,101,61,34,84,114,97,100,105,116,105,111,110,97,108,115,117,103,103,101,
> 115,
> -
> 116,105,111,110,115,84,114,97,110,115,108,97,116,105,111,110,116,104,101,32
> ,102,
> -
> 111,114,109,32,111,102,97,116,109,111,115,112,104,101,114,105,99,105,100,10
> 1,111
> -
> ,108,111,103,105,99,97,108,101,110,116,101,114,112,114,105,115,101,115,99,9
> 7,108
> -
> ,99,117,108,97,116,105,110,103,101,97,115,116,32,111,102,32,116,104,101,114,
> 101,
> -
> 109,110,97,110,116,115,32,111,102,112,108,117,103,105,110,115,112,97,103,10
> 1,47,
> -
> 105,110,100,101,120,46,112,104,112,63,114,101,109,97,105,110,101,100,32,105
> ,110,
> -
> 116,114,97,110,115,102,111,114,109,101,100,72,101,32,119,97,115,32,97,108,1
> 15,
> -
> 111,119,97,115,32,97,108,114,101,97,100,121,115,116,97,116,105,115,116,105,
> 99,97
> -
> ,108,105,110,32,102,97,118,111,114,32,111,102,77,105,110,105,115,116,114,12
> 1,32,
> -
> 111,102,109,111,118,101,109,101,110,116,32,111,102,102,111,114,109,117,108,
> 97,
> -
> 116,105,111,110,105,115,32,114,101,113,117,105,114,101,100,60,108,105,110,1
> 07,32
> -
> ,114,101,108,61,34,84,104,105,115,32,105,115,32,116,104,101,32,60,97,32,104,
> 114,
> -
> 101,102,61,34,47,112,111,112,117,108,97,114,105,122,101,100,105,110,118,111
> ,108,
> -
> 118,101,100,32,105,110,97,114,101,32,117,115,101,100,32,116,111,97,110,100,
> 32,
> -
> 115,101,118,101,114,97,108,109,97,100,101,32,98,121,32,116,104,101,115,101,
> 101,
> -
> 109,115,32,116,111,32,98,101,108,105,107,101,108,121,32,116,104,97,116,80,9
> 7,108
> -
> ,101,115,116,105,110,105,97,110,110,97,109,101,100,32,97,102,116,101,114,10
> 5,116
> -
> ,32,104,97,100,32,98,101,101,110,109,111,115,116,32,99,111,109,109,111,110,1
> 16,
> -
> 111,32,114,101,102,101,114,32,116,111,98,117,116,32,116,104,105,115,32,105,
> 115,
> -
> 99,111,110,115,101,99,117,116,105,118,101,116,101,109,112,111,114,97,114,10
> 5,108
> -
> ,121,73,110,32,103,101,110,101,114,97,108,44,99,111,110,118,101,110,116,105,
> 111,
> -
> 110,115,116,97,107,101,115,32,112,108,97,99,101,115,117,98,100,105,118,105,
> 115,
> -
> 105,111,110,116,101,114,114,105,116,111,114,105,97,108,111,112,101,114,97,1
> 16,
> -
> 105,111,110,97,108,112,101,114,109,97,110,101,110,116,108,121,119,97,115,32
> ,108,
> -
> 97,114,103,101,108,121,111,117,116,98,114,101,97,107,32,111,102,105,110,32,
> 116,
> -
> 104,101,32,112,97,115,116,102,111,108,108,111,119,105,110,103,32,97,32,120,
> 109,
> -
> 108,110,115,58,111,103,61,34,62,60,97,32,99,108,97,115,115,61,34,99,108,97,1
> 15,
> -
> 115,61,34,116,101,120,116,67,111,110,118,101,114,115,105,111,110,32,109,97,
> 121,
> -
> 32,98,101,32,117,115,101,100,109,97,110,117,102,97,99,116,117,114,101,97,10
> 2,116
> -
> ,101,114,32,98,101,105,110,103,99,108,101,97,114,102,105,120,34,62,10,113,11
> 7,
> -
> 101,115,116,105,111,110,32,111,102,119,97,115,32,101,108,101,99,116,101,100
> ,116,
> -
> 111,32,98,101,99,111,109,101,32,97,98,101,99,97,117,115,101,32,111,102,32,11
> 5,
> -
> 111,109,101,32,112,101,111,112,108,101,105,110,115,112,105,114,101,100,32,9
> 8,121
> -
> ,115,117,99,99,101,115,115,102,117,108,32,97,32,116,105,109,101,32,119,104,1
> 01,
> -
> 110,109,111,114,101,32,99,111,109,109,111,110,97,109,111,110,103,115,116,32
> ,116,
> -
> 104,101,97,110,32,111,102,102,105,99,105,97,108,119,105,100,116,104,58,49,4
> 8,48,
> -
> 37,59,116,101,99,104,110,111,108,111,103,121,44,119,97,115,32,97,100,111,11
> 2,116
> -
> ,101,100,116,111,32,107,101,101,112,32,116,104,101,115,101,116,116,108,101,
> 109,
> -
> 101,110,116,115,108,105,118,101,32,98,105,114,116,104,115,105,110,100,101,1
> 20,46
> -
> ,104,116,109,108,34,67,111,110,110,101,99,116,105,99,117,116,97,115,115,105,
> 103,
> -
> 110,101,100,32,116,111,38,97,109,112,59,116,105,109,101,115,59,97,99,99,111,
> 117,
> -
> 110,116,32,102,111,114,97,108,105,103,110,61,114,105,103,104,116,116,104,10
> 1,32,
> -
> 99,111,109,112,97,110,121,97,108,119,97,121,115,32,98,101,101,110,114,101,1
> 16,
> -
> 117,114,110,101,100,32,116,111,105,110,118,111,108,118,101,109,101,110,116,
> 66,
> -
> 101,99,97,117,115,101,32,116,104,101,116,104,105,115,32,112,101,114,105,111
> ,100,
> -
> 34,32,110,97,109,101,61,34,113,34,32,99,111,110,102,105,110,101,100,32,116,1
> 11,
> -
> 97,32,114,101,115,117,108,116,32,111,102,118,97,108,117,101,61,34,34,32,47,6
> 2,
> -
> 105,115,32,97,99,116,117,97,108,108,121,69,110,118,105,114,111,110,109,101,
> 110,
> -
> 116,13,10,60,47,104,101,97,100,62,13,10,67,111,110,118,101,114,115,101,108,1
> 21,
> -
> 44,62,10,60,100,105,118,32,105,100,61,34,48,34,32,119,105,100,116,104,61,34,
> 49,
> -
> 105,115,32,112,114,111,98,97,98,108,121,104,97,118,101,32,98,101,99,111,109,
> 101,
> -
> 99,111,110,116,114,111,108,108,105,110,103,116,104,101,32,112,114,111,98,10
> 8,101
> -
> ,109,99,105,116,105,122,101,110,115,32,111,102,112,111,108,105,116,105,99,1
> 05,97
> -
> ,110,115,114,101,97,99,104,101,100,32,116,104,101,97,115,32,101,97,114,108,1
> 21,
> -
> 32,97,115,58,110,111,110,101,59,32,111,118,101,114,60,116,97,98,108,101,32,9
> 9,
> -
> 101,108,108,118,97,108,105,100,105,116,121,32,111,102,100,105,114,101,99,11
> 6,108
> -
> ,121,32,116,111,111,110,109,111,117,115,101,100,111,119,110,119,104,101,114
> ,101,
> -
> 32,105,116,32,105,115,119,104,101,110,32,105,116,32,119,97,115,109,101,109,
> 98,
> -
> 101,114,115,32,111,102,32,114,101,108,97,116,105,111,110,32,116,111,97,99,9
> 9,111
> -
> ,109,109,111,100,97,116,101,97,108,111,110,103,32,119,105,116,104,32,73,110,
> 32,
> -
> 116,104,101,32,108,97,116,101,116,104,101,32,69,110,103,108,105,115,104,100
> ,101,
> -
> 108,105,99,105,111,117,115,34,62,116,104,105,115,32,105,115,32,110,111,116,
> 116,
> -
> 104,101,32,112,114,101,115,101,110,116,105,102,32,116,104,101,121,32,97,114
> ,101,
> -
> 97,110,100,32,102,105,110,97,108,108,121,97,32,109,97,116,116,101,114,32,11
> 1,102
> -
> ,13,10,9,60,47,100,105,118,62,13,10,13,10,60,47,115,99,114,105,112,116,62,102
> ,97
> -
> ,115,116,101,114,32,116,104,97,110,109,97,106,111,114,105,116,121,32,111,10
> 2,97,
> -
> 102,116,101,114,32,119,104,105,99,104,99,111,109,112,97,114,97,116,105,118,
> 101,
> -
> 116,111,32,109,97,105,110,116,97,105,110,105,109,112,114,111,118,101,32,116
> ,104,
> -
> 101,97,119,97,114,100,101,100,32,116,104,101,101,114,34,32,99,108,97,115,11
> 5,61,
> -
> 34,102,114,97,109,101,98,111,114,100,101,114,114,101,115,116,111,114,97,116
> ,105,
> -
> 111,110,105,110,32,116,104,101,32,115,97,109,101,97,110,97,108,121,115,105,
> 115,
> -
> 32,111,102,116,104,101,105,114,32,102,105,114,115,116,68,117,114,105,110,10
> 3,32,
> -
> 116,104,101,32,99,111,110,116,105,110,101,110,116,97,108,115,101,113,117,10
> 1,110
> -
> ,99,101,32,111,102,102,117,110,99,116,105,111,110,40,41,123,102,111,110,116,
> 45,
> -
> 115,105,122,101,58,32,119,111,114,107,32,111,110,32,116,104,101,60,47,115,9
> 9,114
> -
> ,105,112,116,62,10,60,98,101,103,105,110,115,32,119,105,116,104,106,97,118,9
> 7,
> -
> 115,99,114,105,112,116,58,99,111,110,115,116,105,116,117,101,110,116,119,97
> ,115,
> -
> 32,102,111,117,110,100,101,100,101,113,117,105,108,105,98,114,105,117,109,9
> 7,115
> -
> ,115,117,109,101,32,116,104,97,116,105,115,32,103,105,118,101,110,32,98,121,
> 110,
> -
> 101,101,100,115,32,116,111,32,98,101,99,111,111,114,100,105,110,97,116,101,
> 115,
> -
> 116,104,101,32,118,97,114,105,111,117,115,97,114,101,32,112,97,114,116,32,1
> 11,
> -
> 102,111,110,108,121,32,105,110,32,116,104,101,115,101,99,116,105,111,110,11
> 5,32,
> -
> 111,102,105,115,32,97,32,99,111,109,109,111,110,116,104,101,111,114,105,101
> ,115,
> -
> 32,111,102,100,105,115,99,111,118,101,114,105,101,115,97,115,115,111,99,105
> ,97,
> -
> 116,105,111,110,101,100,103,101,32,111,102,32,116,104,101,115,116,114,101,1
> 10,
> -
> 103,116,104,32,111,102,112,111,115,105,116,105,111,110,32,105,110,112,114,1
> 01,
> -
> 115,101,110,116,45,100,97,121,117,110,105,118,101,114,115,97,108,108,121,11
> 6,111
> -
> ,32,102,111,114,109,32,116,104,101,98,117,116,32,105,110,115,116,101,97,100,
> 99,
> -
> 111,114,112,111,114,97,116,105,111,110,97,116,116,97,99,104,101,100,32,116,
> 111,
> -
> 105,115,32,99,111,109,109,111,110,108,121,114,101,97,115,111,110,115,32,102
> ,111,
> -
> 114,32,38,113,117,111,116,59,116,104,101,32,99,97,110,32,98,101,32,109,97,10
> 0,
> -
> 101,119,97,115,32,97,98,108,101,32,116,111,119,104,105,99,104,32,109,101,97,
> 110,
> -
> 115,98,117,116,32,100,105,100,32,110,111,116,111,110,77,111,117,115,101,79,
> 118,
> -
> 101,114,97,115,32,112,111,115,115,105,98,108,101,111,112,101,114,97,116,101
> ,100,
> -
> 32,98,121,99,111,109,105,110,103,32,102,114,111,109,116,104,101,32,112,114,
> 105,
> -
> 109,97,114,121,97,100,100,105,116,105,111,110,32,111,102,102,111,114,32,115
> ,101,
> -
> 118,101,114,97,108,116,114,97,110,115,102,101,114,114,101,100,97,32,112,101
> ,114,
> -
> 105,111,100,32,111,102,97,114,101,32,97,98,108,101,32,116,111,104,111,119,1
> 01,
> -
> 118,101,114,44,32,105,116,115,104,111,117,108,100,32,104,97,118,101,109,117
> ,99,
> -
> 104,32,108,97,114,103,101,114,10,9,60,47,115,99,114,105,112,116,62,97,100,11
> 1,
> -
> 112,116,101,100,32,116,104,101,112,114,111,112,101,114,116,121,32,111,102,1
> 00,
> -
> 105,114,101,99,116,101,100,32,98,121,101,102,102,101,99,116,105,118,101,108
> ,121,
> -
> 119,97,115,32,98,114,111,117,103,104,116,99,104,105,108,100,114,101,110,32,
> 111,
> -
> 102,80,114,111,103,114,97,109,109,105,110,103,108,111,110,103,101,114,32,11
> 6,104
> -
> ,97,110,109,97,110,117,115,99,114,105,112,116,115,119,97,114,32,97,103,97,10
> 5,
> -
> 110,115,116,98,121,32,109,101,97,110,115,32,111,102,97,110,100,32,109,111,1
> 15,
> -
> 116,32,111,102,115,105,109,105,108,97,114,32,116,111,32,112,114,111,112,114
> ,105,
> -
> 101,116,97,114,121,111,114,105,103,105,110,97,116,105,110,103,112,114,101,1
> 15,
> -
> 116,105,103,105,111,117,115,103,114,97,109,109,97,116,105,99,97,108,101,120
> ,112,
> -
> 101,114,105,101,110,99,101,46,116,111,32,109,97,107,101,32,116,104,101,73,1
> 16,32
> -
> ,119,97,115,32,97,108,115,111,105,115,32,102,111,117,110,100,32,105,110,99,1
> 11,
> -
> 109,112,101,116,105,116,111,114,115,105,110,32,116,104,101,32,85,46,83,46,1
> 14,
> -
> 101,112,108,97,99,101,32,116,104,101,98,114,111,117,103,104,116,32,116,104,
> 101,
> -
> 99,97,108,99,117,108,97,116,105,111,110,102,97,108,108,32,111,102,32,116,10
> 4,101
> -
> ,116,104,101,32,103,101,110,101,114,97,108,112,114,97,99,116,105,99,97,108,1
> 08,
> -
> 121,105,110,32,104,111,110,111,114,32,111,102,114,101,108,101,97,115,101,10
> 0,32,
> -
> 105,110,114,101,115,105,100,101,110,116,105,97,108,97,110,100,32,115,111,10
> 9,101
> -
> ,32,111,102,107,105,110,103,32,111,102,32,116,104,101,114,101,97,99,116,105,
> 111,
> -
> 110,32,116,111,49,115,116,32,69,97,114,108,32,111,102,99,117,108,116,117,11
> 4,101
> -
> ,32,97,110,100,112,114,105,110,99,105,112,97,108,108,121,60,47,116,105,116,1
> 08,
> -
> 101,62,10,32,32,116,104,101,121,32,99,97,110,32,98,101,98,97,99,107,32,116,1
> 11,
> -
> 32,116,104,101,115,111,109,101,32,111,102,32,104,105,115,101,120,112,111,11
> 5,117
> -
> ,114,101,32,116,111,97,114,101,32,115,105,109,105,108,97,114,102,111,114,10
> 9,32,
> -
> 111,102,32,116,104,101,97,100,100,70,97,118,111,114,105,116,101,99,105,116,
> 105,
> -
> 122,101,110,115,104,105,112,112,97,114,116,32,105,110,32,116,104,101,112,10
> 1,111
> -
> ,112,108,101,32,119,105,116,104,105,110,32,112,114,97,99,116,105,99,101,116,
> 111,
> -
> 32,99,111,110,116,105,110,117,101,38,97,109,112,59,109,105,110,117,115,59,9
> 7,112
> -
> ,112,114,111,118,101,100,32,98,121,32,116,104,101,32,102,105,114,115,116,32,
> 97,
> -
> 108,108,111,119,101,100,32,116,104,101,97,110,100,32,102,111,114,32,116,104
> ,101,
> -
> 102,117,110,99,116,105,111,110,105,110,103,112,108,97,121,105,110,103,32,11
> 6,104
> -
> ,101,115,111,108,117,116,105,111,110,32,116,111,104,101,105,103,104,116,61,
> 34,48
> -
> ,34,32,105,110,32,104,105,115,32,98,111,111,107,109,111,114,101,32,116,104,9
> 7,
> -
> 110,32,97,102,111,108,108,111,119,115,32,116,104,101,99,114,101,97,116,101,
> 100,
> -
> 32,116,104,101,112,114,101,115,101,110,99,101,32,105,110,38,110,98,115,112,
> 59,60
> -
> ,47,116,100,62,110,97,116,105,111,110,97,108,105,115,116,116,104,101,32,105,
> 100,
> -
> 101,97,32,111,102,97,32,99,104,97,114,97,99,116,101,114,119,101,114,101,32,1
> 02,
> -
> 111,114,99,101,100,32,99,108,97,115,115,61,34,98,116,110,100,97,121,115,32,1
> 11,
> -
> 102,32,116,104,101,102,101,97,116,117,114,101,100,32,105,110,115,104,111,11
> 9,105
> -
> ,110,103,32,116,104,101,105,110,116,101,114,101,115,116,32,105,110,105,110,
> 32,
> -
> 112,108,97,99,101,32,111,102,116,117,114,110,32,111,102,32,116,104,101,116,
> 104,
> -
> 101,32,104,101,97,100,32,111,102,76,111,114,100,32,111,102,32,116,104,101,1
> 12,
> -
> 111,108,105,116,105,99,97,108,108,121,104,97,115,32,105,116,115,32,111,119,
> 110,
> -
> 69,100,117,99,97,116,105,111,110,97,108,97,112,112,114,111,118,97,108,32,11
> 1,102
> -
> ,115,111,109,101,32,111,102,32,116,104,101,101,97,99,104,32,111,116,104,101,
> 114,
> -
> 44,98,101,104,97,118,105,111,114,32,111,102,97,110,100,32,98,101,99,97,117,1
> 15,
> -
> 101,97,110,100,32,97,110,111,116,104,101,114,97,112,112,101,97,114,101,100,
> 32,
> -
> 111,110,114,101,99,111,114,100,101,100,32,105,110,98,108,97,99,107,38,113,1
> 17,
> -
> 111,116,59,109,97,121,32,105,110,99,108,117,100,101,116,104,101,32,119,111,
> 114,
> -
> 108,100,39,115,99,97,110,32,108,101,97,100,32,116,111,114,101,102,101,114,1
> 15,32
> -
> ,116,111,32,97,98,111,114,100,101,114,61,34,48,34,32,103,111,118,101,114,110
> ,109
> -
> ,101,110,116,32,119,105,110,110,105,110,103,32,116,104,101,114,101,115,117,
> 108,
> -
> 116,101,100,32,105,110,32,119,104,105,108,101,32,116,104,101,32,87,97,115,1
> 04,
> -
> 105,110,103,116,111,110,44,116,104,101,32,115,117,98,106,101,99,116,99,105,
> 116,
> -
> 121,32,105,110,32,116,104,101,62,60,47,100,105,118,62,13,10,9,9,114,101,102,
> 108,
> -
> 101,99,116,32,116,104,101,116,111,32,99,111,109,112,108,101,116,101,98,101,
> 99,97
> -
> ,109,101,32,109,111,114,101,114,97,100,105,111,97,99,116,105,118,101,114,10
> 1,106
> -
> ,101,99,116,101,100,32,98,121,119,105,116,104,111,117,116,32,97,110,121,104,
> 105,
> -
> 115,32,102,97,116,104,101,114,44,119,104,105,99,104,32,99,111,117,108,100,9
> 9,111
> -
> ,112,121,32,111,102,32,116,104,101,116,111,32,105,110,100,105,99,97,116,101,
> 97,
> -
> 32,112,111,108,105,116,105,99,97,108,97,99,99,111,117,110,116,115,32,111,10
> 2,99,
> -
> 111,110,115,116,105,116,117,116,101,115,119,111,114,107,101,100,32,119,105,
> 116,
> -
> 104,101,114,60,47,97,62,60,47,108,105,62,111,102,32,104,105,115,32,108,105,1
> 02,
> -
> 101,97,99,99,111,109,112,97,110,105,101,100,99,108,105,101,110,116,87,105,1
> 00,
> -
> 116,104,112,114,101,118,101,110,116,32,116,104,101,76,101,103,105,115,108,9
> 7,116
> -
> ,105,118,101,100,105,102,102,101,114,101,110,116,108,121,116,111,103,101,11
> 6,104
> -
> ,101,114,32,105,110,104,97,115,32,115,101,118,101,114,97,108,102,111,114,32,
> 97,
> -
> 110,111,116,104,101,114,116,101,120,116,32,111,102,32,116,104,101,102,111,1
> 17,
> -
> 110,100,101,100,32,116,104,101,101,32,119,105,116,104,32,116,104,101,32,105
> ,115,
> -
> 32,117,115,101,100,32,102,111,114,99,104,97,110,103,101,100,32,116,104,101,
> 117,
> -
> 115,117,97,108,108,121,32,116,104,101,112,108,97,99,101,32,119,104,101,114,
> 101,
> -
> 119,104,101,114,101,97,115,32,116,104,101,62,32,60,97,32,104,114,101,102,61,
> 34,
> -
> 34,62,60,97,32,104,114,101,102,61,34,116,104,101,109,115,101,108,118,101,11
> 5,44,
> -
> 97,108,116,104,111,117,103,104,32,104,101,116,104,97,116,32,99,97,110,32,98,
> 101,
> -
> 116,114,97,100,105,116,105,111,110,97,108,114,111,108,101,32,111,102,32,116
> ,104,
> -
> 101,97,115,32,97,32,114,101,115,117,108,116,114,101,109,111,118,101,67,104,
> 105,
> -
> 108,100,100,101,115,105,103,110,101,100,32,98,121,119,101,115,116,32,111,10
> 2,32,
> -
> 116,104,101,83,111,109,101,32,112,101,111,112,108,101,112,114,111,100,117,9
> 9,116
> -
> ,105,111,110,44,115,105,100,101,32,111,102,32,116,104,101,110,101,119,115,1
> 08,
> -
> 101,116,116,101,114,115,117,115,101,100,32,98,121,32,116,104,101,100,111,11
> 9,110
> -
> ,32,116,111,32,116,104,101,97,99,99,101,112,116,101,100,32,98,121,108,105,11
> 8,
> -
> 101,32,105,110,32,116,104,101,97,116,116,101,109,112,116,115,32,116,111,111
> ,117,
> -
> 116,115,105,100,101,32,116,104,101,102,114,101,113,117,101,110,99,105,101,1
> 15,72
> -
> ,111,119,101,118,101,114,44,32,105,110,112,114,111,103,114,97,109,109,101,1
> 14,
> -
> 115,97,116,32,108,101,97,115,116,32,105,110,97,112,112,114,111,120,105,109,
> 97,
> -
> 116,101,97,108,116,104,111,117,103,104,32,105,116,119,97,115,32,112,97,114,
> 116,
> -
> 32,111,102,97,110,100,32,118,97,114,105,111,117,115,71,111,118,101,114,110,
> 111,
> -
> 114,32,111,102,116,104,101,32,97,114,116,105,99,108,101,116,117,114,110,101
> ,100,
> -
> 32,105,110,116,111,62,60,97,32,104,114,101,102,61,34,47,116,104,101,32,101,9
> 9,
> -
> 111,110,111,109,121,105,115,32,116,104,101,32,109,111,115,116,109,111,115,1
> 16,32
> -
> ,119,105,100,101,108,121,119,111,117,108,100,32,108,97,116,101,114,97,110,1
> 00,32
> -
> ,112,101,114,104,97,112,115,114,105,115,101,32,116,111,32,116,104,101,111,9
> 9,99,
> -
> 117,114,115,32,119,104,101,110,117,110,100,101,114,32,119,104,105,99,104,99
> ,111,
> -
> 110,100,105,116,105,111,110,115,46,116,104,101,32,119,101,115,116,101,114,1
> 10,
> -
> 116,104,101,111,114,121,32,116,104,97,116,105,115,32,112,114,111,100,117,99
> ,101,
> -
> 100,116,104,101,32,99,105,116,121,32,111,102,105,110,32,119,104,105,99,104,
> 32,
> -
> 104,101,115,101,101,110,32,105,110,32,116,104,101,116,104,101,32,99,101,110
> ,116,
> -
> 114,97,108,98,117,105,108,100,105,110,103,32,111,102,109,97,110,121,32,111,
> 102,
> -
> 32,104,105,115,97,114,101,97,32,111,102,32,116,104,101,105,115,32,116,104,1
> 01,32
> -
> ,111,110,108,121,109,111,115,116,32,111,102,32,116,104,101,109,97,110,121,3
> 2,111
> -
> ,102,32,116,104,101,116,104,101,32,87,101,115,116,101,114,110,84,104,101,11
> 4,101
> -
> ,32,105,115,32,110,111,101,120,116,101,110,100,101,100,32,116,111,83,116,97,
> 116,
> -
> 105,115,116,105,99,97,108,99,111,108,115,112,97,110,61,50,32,124,115,104,11
> 1,114
> -
> ,116,32,115,116,111,114,121,112,111,115,115,105,98,108,101,32,116,111,116,1
> 11,
> -
> 112,111,108,111,103,105,99,97,108,99,114,105,116,105,99,97,108,32,111,102,1
> 14,
> -
> 101,112,111,114,116,101,100,32,116,111,97,32,67,104,114,105,115,116,105,97,
> 110,
> -
> 100,101,99,105,115,105,111,110,32,116,111,105,115,32,101,113,117,97,108,32,
> 116,
> -
> 111,112,114,111,98,108,101,109,115,32,111,102,84,104,105,115,32,99,97,110,3
> 2,98,
> -
> 101,109,101,114,99,104,97,110,100,105,115,101,102,111,114,32,109,111,115,11
> 6,32,
> -
> 111,102,110,111,32,101,118,105,100,101,110,99,101,101,100,105,116,105,111,1
> 10,
> -
> 115,32,111,102,101,108,101,109,101,110,116,115,32,105,110,38,113,117,111,11
> 6,59,
> -
> 46,32,84,104,101,99,111,109,47,105,109,97,103,101,115,47,119,104,105,99,104,
> 32,
> -
> 109,97,107,101,115,116,104,101,32,112,114,111,99,101,115,115,114,101,109,97
> ,105,
> -
> 110,115,32,116,104,101,108,105,116,101,114,97,116,117,114,101,44,105,115,32
> ,97,
> -
> 32,109,101,109,98,101,114,116,104,101,32,112,111,112,117,108,97,114,116,104
> ,101,
> -
> 32,97,110,99,105,101,110,116,112,114,111,98,108,101,109,115,32,105,110,116,
> 105,
> -
> 109,101,32,111,102,32,116,104,101,100,101,102,101,97,116,101,100,32,98,121,
> 98,
> -
> 111,100,121,32,111,102,32,116,104,101,97,32,102,101,119,32,121,101,97,114,1
> 15,
> -
> 109,117,99,104,32,111,102,32,116,104,101,116,104,101,32,119,111,114,107,32,
> 111,
> -
> 102,67,97,108,105,102,111,114,110,105,97,44,115,101,114,118,101,100,32,97,1
> 15,32
> -
> ,97,103,111,118,101,114,110,109,101,110,116,46,99,111,110,99,101,112,116,11
> 5,32,
> -
> 111,102,109,111,118,101,109,101,110,116,32,105,110,9,9,60,100,105,118,32,10
> 5,100
> -
> ,61,34,105,116,34,32,118,97,108,117,101,61,34,108,97,110,103,117,97,103,101,
> 32,
> -
> 111,102,97,115,32,116,104,101,121,32,97,114,101,112,114,111,100,117,99,101,
> 100,
> -
> 32,105,110,105,115,32,116,104,97,116,32,116,104,101,101,120,112,108,97,105,
> 110,
> -
> 32,116,104,101,100,105,118,62,60,47,100,105,118,62,10,72,111,119,101,118,10
> 1,114
> -
> ,32,116,104,101,108,101,97,100,32,116,111,32,116,104,101,9,60,97,32,104,114,
> 101,
> -
> 102,61,34,47,119,97,115,32,103,114,97,110,116,101,100,112,101,111,112,108,1
> 01,32
> -
> ,104,97,118,101,99,111,110,116,105,110,117,97,108,108,121,119,97,115,32,115,
> 101,
> -
> 101,110,32,97,115,97,110,100,32,114,101,108,97,116,101,100,116,104,101,32,1
> 14,
> -
> 111,108,101,32,111,102,112,114,111,112,111,115,101,100,32,98,121,111,102,32
> ,116,
> -
> 104,101,32,98,101,115,116,101,97,99,104,32,111,116,104,101,114,46,67,111,11
> 0,115
> -
> ,116,97,110,116,105,110,101,112,101,111,112,108,101,32,102,114,111,109,100,
> 105,
> -
> 97,108,101,99,116,115,32,111,102,116,111,32,114,101,118,105,115,105,111,110
> ,119,
> -
> 97,115,32,114,101,110,97,109,101,100,97,32,115,111,117,114,99,101,32,111,10
> 2,116
> -
> ,104,101,32,105,110,105,116,105,97,108,108,97,117,110,99,104,101,100,32,105,
> 110,
> -
> 112,114,111,118,105,100,101,32,116,104,101,116,111,32,116,104,101,32,119,10
> 1,115
> -
> ,116,119,104,101,114,101,32,116,104,101,114,101,97,110,100,32,115,105,109,1
> 05,
> -
> 108,97,114,98,101,116,119,101,101,110,32,116,119,111,105,115,32,97,108,115,
> 111,
> -
> 32,116,104,101,69,110,103,108,105,115,104,32,97,110,100,99,111,110,100,105,
> 116,
> -
> 105,111,110,115,44,116,104,97,116,32,105,116,32,119,97,115,101,110,116,105,
> 116,
> -
> 108,101,100,32,116,111,116,104,101,109,115,101,108,118,101,115,46,113,117,9
> 7,110
> -
> ,116,105,116,121,32,111,102,114,97,110,115,112,97,114,101,110,99,121,116,10
> 4,101
> -
> ,32,115,97,109,101,32,97,115,116,111,32,106,111,105,110,32,116,104,101,99,11
> 1,
> -
> 117,110,116,114,121,32,97,110,100,116,104,105,115,32,105,115,32,116,104,101
> ,84,
> -
> 104,105,115,32,108,101,100,32,116,111,97,32,115,116,97,116,101,109,101,110,
> 116,
> -
> 99,111,110,116,114,97,115,116,32,116,111,108,97,115,116,73,110,100,101,120,
> 79,
> -
> 102,116,104,114,111,117,103,104,32,104,105,115,105,115,32,100,101,115,105,1
> 03,
> -
> 110,101,100,116,104,101,32,116,101,114,109,32,105,115,105,115,32,112,114,11
> 1,118
> -
> ,105,100,101,100,112,114,111,116,101,99,116,32,116,104,101,110,103,60,47,97,
> 62,
> -
> 60,47,108,105,62,84,104,101,32,99,117,114,114,101,110,116,116,104,101,32,11
> 5,105
> -
> ,116,101,32,111,102,115,117,98,115,116,97,110,116,105,97,108,101,120,112,10
> 1,114
> -
> ,105,101,110,99,101,44,105,110,32,116,104,101,32,87,101,115,116,116,104,101,
> 121,
> -
> 32,115,104,111,117,108,100,115,108,111,118,101,110,196,141,105,110,97,99,11
> 1,109
> -
> ,101,110,116,97,114,105,111,115,117,110,105,118,101,114,115,105,100,97,100,
> 99,
> -
> 111,110,100,105,99,105,111,110,101,115,97,99,116,105,118,105,100,97,100,101
> ,115,
> -
> 101,120,112,101,114,105,101,110,99,105,97,116,101,99,110,111,108,111,103,19
> 5,173
> -
> ,97,112,114,111,100,117,99,99,105,195,179,110,112,117,110,116,117,97,99,105,
> 195,
> -
> 179,110,97,112,108,105,99,97,99,105,195,179,110,99,111,110,116,114,97,115,1
> 01,
> -
> 195,177,97,99,97,116,101,103,111,114,195,173,97,115,114,101,103,105,115,116
> ,114,
> -
> 97,114,115,101,112,114,111,102,101,115,105,111,110,97,108,116,114,97,116,97
> ,109,
> -
> 105,101,110,116,111,114,101,103,195,173,115,116,114,97,116,101,115,101,99,1
> 14,
> -
> 101,116,97,114,195,173,97,112,114,105,110,99,105,112,97,108,101,115,112,114
> ,111,
> -
> 116,101,99,99,105,195,179,110,105,109,112,111,114,116,97,110,116,101,115,10
> 5,109
> -
> ,112,111,114,116,97,110,99,105,97,112,111,115,105,98,105,108,105,100,97,100,
> 105,
> -
> 110,116,101,114,101,115,97,110,116,101,99,114,101,99,105,109,105,101,110,11
> 6,111
> -
> ,110,101,99,101,115,105,100,97,100,101,115,115,117,115,99,114,105,98,105,11
> 4,115
> -
> ,101,97,115,111,99,105,97,99,105,195,179,110,100,105,115,112,111,110,105,98,
> 108,
> -
> 101,115,101,118,97,108,117,97,99,105,195,179,110,101,115,116,117,100,105,97
> ,110,
> -
> 116,101,115,114,101,115,112,111,110,115,97,98,108,101,114,101,115,111,108,1
> 17,99
> -
> ,105,195,179,110,103,117,97,100,97,108,97,106,97,114,97,114,101,103,105,115,
> 116,
> -
> 114,97,100,111,115,111,112,111,114,116,117,110,105,100,97,100,99,111,109,10
> 1,114
> -
> ,99,105,97,108,101,115,102,111,116,111,103,114,97,102,195,173,97,97,117,116,
> 111,
> -
> 114,105,100,97,100,101,115,105,110,103,101,110,105,101,114,195,173,97,116,1
> 01,
> -
> 108,101,118,105,115,105,195,179,110,99,111,109,112,101,116,101,110,99,105,9
> 7,111
> -
> ,112,101,114,97,99,105,111,110,101,115,101,115,116,97,98,108,101,99,105,100,
> 111,
> -
> 115,105,109,112,108,101,109,101,110,116,101,97,99,116,117,97,108,109,101,11
> 0,116
> -
> ,101,110,97,118,101,103,97,99,105,195,179,110,99,111,110,102,111,114,109,10
> 5,100
> -
> ,97,100,108,105,110,101,45,104,101,105,103,104,116,58,102,111,110,116,45,10
> 2,97,
> -
> 109,105,108,121,58,34,32,58,32,34,104,116,116,112,58,47,47,97,112,112,108,10
> 5,99
> -
> ,97,116,105,111,110,115,108,105,110,107,34,32,104,114,101,102,61,34,115,112,
> 101,
> -
> 99,105,102,105,99,97,108,108,121,47,47,60,33,91,67,68,65,84,65,91,10,79,114,1
> 03,
> -
> 97,110,105,122,97,116,105,111,110,100,105,115,116,114,105,98,117,116,105,11
> 1,110
> -
> ,48,112,120,59,32,104,101,105,103,104,116,58,114,101,108,97,116,105,111,110,
> 115,
> -
> 104,105,112,100,101,118,105,99,101,45,119,105,100,116,104,60,100,105,118,32
> ,99,
> -
> 108,97,115,115,61,34,60,108,97,98,101,108,32,102,111,114,61,34,114,101,103,1
> 05,
> -
> 115,116,114,97,116,105,111,110,60,47,110,111,115,99,114,105,112,116,62,10,4
> 7,105
> -
> ,110,100,101,120,46,104,116,109,108,34,119,105,110,100,111,119,46,111,112,1
> 01,
> -
> 110,40,32,33,105,109,112,111,114,116,97,110,116,59,97,112,112,108,105,99,97,
> 116,
> -
> 105,111,110,47,105,110,100,101,112,101,110,100,101,110,99,101,47,47,119,119
> ,119,
> -
> 46,103,111,111,103,108,101,111,114,103,97,110,105,122,97,116,105,111,110,97
> ,117,
> -
> 116,111,99,111,109,112,108,101,116,101,114,101,113,117,105,114,101,109,101,
> 110,
> -
> 116,115,99,111,110,115,101,114,118,97,116,105,118,101,60,102,111,114,109,32
> ,110,
> -
> 97,109,101,61,34,105,110,116,101,108,108,101,99,116,117,97,108,109,97,114,1
> 03,
> -
> 105,110,45,108,101,102,116,58,49,56,116,104,32,99,101,110,116,117,114,121,9
> 7,110
> -
> ,32,105,109,112,111,114,116,97,110,116,105,110,115,116,105,116,117,116,105,
> 111,
> -
> 110,115,97,98,98,114,101,118,105,97,116,105,111,110,60,105,109,103,32,99,10
> 8,97,
> -
> 115,115,61,34,111,114,103,97,110,105,115,97,116,105,111,110,99,105,118,105,
> 108,
> -
> 105,122,97,116,105,111,110,49,57,116,104,32,99,101,110,116,117,114,121,97,1
> 14,99
> -
> ,104,105,116,101,99,116,117,114,101,105,110,99,111,114,112,111,114,97,116,1
> 01,
> -
> 100,50,48,116,104,32,99,101,110,116,117,114,121,45,99,111,110,116,97,105,11
> 0,101
> -
> ,114,34,62,109,111,115,116,32,110,111,116,97,98,108,121,47,62,60,47,97,62,60,
> 47,
> -
> 100,105,118,62,110,111,116,105,102,105,99,97,116,105,111,110,39,117,110,100
> ,101,
> -
> 102,105,110,101,100,39,41,70,117,114,116,104,101,114,109,111,114,101,44,98,
> 101,
> -
> 108,105,101,118,101,32,116,104,97,116,105,110,110,101,114,72,84,77,76,32,61,
> 32,
> -
> 112,114,105,111,114,32,116,111,32,116,104,101,100,114,97,109,97,116,105,99,
> 97,
> -
> 108,108,121,114,101,102,101,114,114,105,110,103,32,116,111,110,101,103,111,
> 116,
> -
> 105,97,116,105,111,110,115,104,101,97,100,113,117,97,114,116,101,114,115,83
> ,111,
> -
> 117,116,104,32,65,102,114,105,99,97,117,110,115,117,99,99,101,115,115,102,1
> 17,
> -
> 108,80,101,110,110,115,121,108,118,97,110,105,97,65,115,32,97,32,114,101,11
> 5,117
> -
> ,108,116,44,60,104,116,109,108,32,108,97,110,103,61,34,38,108,116,59,47,115,
> 117,
> -
> 112,38,103,116,59,100,101,97,108,105,110,103,32,119,105,116,104,112,104,105
> ,108,
> -
> 97,100,101,108,112,104,105,97,104,105,115,116,111,114,105,99,97,108,108,121
> ,41,
> -
> 59,60,47,115,99,114,105,112,116,62,10,112,97,100,100,105,110,103,45,116,111,
> 112,
> -
> 58,101,120,112,101,114,105,109,101,110,116,97,108,103,101,116,65,116,116,11
> 4,105
> -
> ,98,117,116,101,105,110,115,116,114,117,99,116,105,111,110,115,116,101,99,1
> 04,
> -
> 110,111,108,111,103,105,101,115,112,97,114,116,32,111,102,32,116,104,101,32
> ,61,
> -
> 102,117,110,99,116,105,111,110,40,41,123,115,117,98,115,99,114,105,112,116,
> 105,
> -
> 111,110,108,46,100,116,100,34,62,13,10,60,104,116,103,101,111,103,114,97,11
> 2,104
> -
> ,105,99,97,108,67,111,110,115,116,105,116,117,116,105,111,110,39,44,32,102,1
> 17,
> -
> 110,99,116,105,111,110,40,115,117,112,112,111,114,116,101,100,32,98,121,97,
> 103,
> -
> 114,105,99,117,108,116,117,114,97,108,99,111,110,115,116,114,117,99,116,105
> ,111,
> -
> 110,112,117,98,108,105,99,97,116,105,111,110,115,102,111,110,116,45,115,105
> ,122,
> -
> 101,58,32,49,97,32,118,97,114,105,101,116,121,32,111,102,60,100,105,118,32,1
> 15,
> -
> 116,121,108,101,61,34,69,110,99,121,99,108,111,112,101,100,105,97,105,102,1
> 14,97
> -
> ,109,101,32,115,114,99,61,34,100,101,109,111,110,115,116,114,97,116,101,100,
> 97,
> -
> 99,99,111,109,112,108,105,115,104,101,100,117,110,105,118,101,114,115,105,1
> 16,
> -
> 105,101,115,68,101,109,111,103,114,97,112,104,105,99,115,41,59,60,47,115,99,
> 114,
> -
> 105,112,116,62,60,100,101,100,105,99,97,116,101,100,32,116,111,107,110,111,
> 119,
> -
> 108,101,100,103,101,32,111,102,115,97,116,105,115,102,97,99,116,105,111,110
> ,112,
> -
> 97,114,116,105,99,117,108,97,114,108,121,60,47,100,105,118,62,60,47,100,105,
> 118,
> -
> 62,69,110,103,108,105,115,104,32,40,85,83,41,97,112,112,101,110,100,67,104,1
> 05,
> -
> 108,100,40,116,114,97,110,115,109,105,115,115,105,111,110,115,46,32,72,111,
> 119,
> -
> 101,118,101,114,44,32,105,110,116,101,108,108,105,103,101,110,99,101,34,32,
> 116,
> -
> 97,98,105,110,100,101,120,61,34,102,108,111,97,116,58,114,105,103,104,116,5
> 9,67,
> -
> 111,109,109,111,110,119,101,97,108,116,104,114,97,110,103,105,110,103,32,10
> 2,114
> -
> ,111,109,105,110,32,119,104,105,99,104,32,116,104,101,97,116,32,108,101,97,1
> 15,
> -
> 116,32,111,110,101,114,101,112,114,111,100,117,99,116,105,111,110,101,110,9
> 9,121
> -
> ,99,108,111,112,101,100,105,97,59,102,111,110,116,45,115,105,122,101,58,49,1
> 06,
> -
> 117,114,105,115,100,105,99,116,105,111,110,97,116,32,116,104,97,116,32,116,
> 105,
> -
> 109,101,34,62,60,97,32,99,108,97,115,115,61,34,73,110,32,97,100,100,105,116,
> 105,
> -
> 111,110,44,100,101,115,99,114,105,112,116,105,111,110,43,99,111,110,118,101
> ,114,
> -
> 115,97,116,105,111,110,99,111,110,116,97,99,116,32,119,105,116,104,105,115,
> 32,
> -
> 103,101,110,101,114,97,108,108,121,114,34,32,99,111,110,116,101,110,116,61,
> 34,
> -
> 114,101,112,114,101,115,101,110,116,105,110,103,38,108,116,59,109,97,116,10
> 4,38,
> -
> 103,116,59,112,114,101,115,101,110,116,97,116,105,111,110,111,99,99,97,115,
> 105,
> -
> 111,110,97,108,108,121,60,105,109,103,32,119,105,100,116,104,61,34,110,97,1
> 18,
> -
> 105,103,97,116,105,111,110,34,62,99,111,109,112,101,110,115,97,116,105,111,
> 110,
> -
> 99,104,97,109,112,105,111,110,115,104,105,112,109,101,100,105,97,61,34,97,1
> 08,
> -
> 108,34,32,118,105,111,108,97,116,105,111,110,32,111,102,114,101,102,101,114
> ,101,
> -
> 110,99,101,32,116,111,114,101,116,117,114,110,32,116,114,117,101,59,83,116,
> 114,
> -
> 105,99,116,47,47,69,78,34,32,116,114,97,110,115,97,99,116,105,111,110,115,10
> 5,
> -
> 110,116,101,114,118,101,110,116,105,111,110,118,101,114,105,102,105,99,97,1
> 16,
> -
> 105,111,110,73,110,102,111,114,109,97,116,105,111,110,32,100,105,102,102,10
> 5,99,
> -
> 117,108,116,105,101,115,67,104,97,109,112,105,111,110,115,104,105,112,99,97
> ,112,
> -
> 97,98,105,108,105,116,105,101,115,60,33,91,101,110,100,105,102,93,45,45,62,1
> 25,
> -
> 10,60,47,115,99,114,105,112,116,62,10,67,104,114,105,115,116,105,97,110,105,
> 116,
> -
> 121,102,111,114,32,101,120,97,109,112,108,101,44,80,114,111,102,101,115,115
> ,105,
> -
> 111,110,97,108,114,101,115,116,114,105,99,116,105,111,110,115,115,117,103,1
> 03,
> -
> 101,115,116,32,116,104,97,116,119,97,115,32,114,101,108,101,97,115,101,100,
> 40,
> -
> 115,117,99,104,32,97,115,32,116,104,101,114,101,109,111,118,101,67,108,97,1
> 15,
> -
> 115,40,117,110,101,109,112,108,111,121,109,101,110,116,116,104,101,32,65,10
> 9,101
> -
> ,114,105,99,97,110,115,116,114,117,99,116,117,114,101,32,111,102,47,105,110,
> 100,
> -
> 101,120,46,104,116,109,108,32,112,117,98,108,105,115,104,101,100,32,105,110
> ,115,
> -
> 112,97,110,32,99,108,97,115,115,61,34,34,62,60,97,32,104,114,101,102,61,34,4
> 7,
> -
> 105,110,116,114,111,100,117,99,116,105,111,110,98,101,108,111,110,103,105,1
> 10,
> -
> 103,32,116,111,99,108,97,105,109,101,100,32,116,104,97,116,99,111,110,115,1
> 01,
> -
> 113,117,101,110,99,101,115,60,109,101,116,97,32,110,97,109,101,61,34,71,117,
> 105,
> -
> 100,101,32,116,111,32,116,104,101,111,118,101,114,119,104,101,108,109,105,1
> 10,
> -
> 103,97,103,97,105,110,115,116,32,116,104,101,32,99,111,110,99,101,110,116,1
> 14,97
> -
> ,116,101,100,44,10,46,110,111,110,116,111,117,99,104,32,111,98,115,101,114,1
> 18,
> -
> 97,116,105,111,110,115,60,47,97,62,10,60,47,100,105,118,62,10,102,32,40,100,
> 111,
> -
> 99,117,109,101,110,116,46,98,111,114,100,101,114,58,32,49,112,120,32,123,10
> 2,111
> -
> ,110,116,45,115,105,122,101,58,49,116,114,101,97,116,109,101,110,116,32,111,
> 102,
> -
> 48,34,32,104,101,105,103,104,116,61,34,49,109,111,100,105,102,105,99,97,116,
> 105,
> -
> 111,110,73,110,100,101,112,101,110,100,101,110,99,101,100,105,118,105,100,1
> 01,
> -
> 100,32,105,110,116,111,103,114,101,97,116,101,114,32,116,104,97,110,97,99,1
> 04,
> -
> 105,101,118,101,109,101,110,116,115,101,115,116,97,98,108,105,115,104,105,1
> 10,
> -
> 103,74,97,118,97,83,99,114,105,112,116,34,32,110,101,118,101,114,116,104,10
> 1,108
> -
> ,101,115,115,115,105,103,110,105,102,105,99,97,110,99,101,66,114,111,97,100,
> 99,
> -
> 97,115,116,105,110,103,62,38,110,98,115,112,59,60,47,116,100,62,99,111,110,1
> 16,
> -
> 97,105,110,101,114,34,62,10,115,117,99,104,32,97,115,32,116,104,101,32,105,1
> 10,
> -
> 102,108,117,101,110,99,101,32,111,102,97,32,112,97,114,116,105,99,117,108,9
> 7,114
> -
> ,115,114,99,61,39,104,116,116,112,58,47,47,110,97,118,105,103,97,116,105,111
> ,110
> -
> ,34,32,104,97,108,102,32,111,102,32,116,104,101,32,115,117,98,115,116,97,110
> ,116
> -
> ,105,97,108,32,38,110,98,115,112,59,60,47,100,105,118,62,97,100,118,97,110,1
> 16,
> -
> 97,103,101,32,111,102,100,105,115,99,111,118,101,114,121,32,111,102,102,117
> ,110,
> -
> 100,97,109,101,110,116,97,108,32,109,101,116,114,111,112,111,108,105,116,97
> ,110,
> -
> 116,104,101,32,111,112,112,111,115,105,116,101,34,32,120,109,108,58,108,97,
> 110,
> -
> 103,61,34,100,101,108,105,98,101,114,97,116,101,108,121,97,108,105,103,110,
> 61,99
> -
> ,101,110,116,101,114,101,118,111,108,117,116,105,111,110,32,111,102,112,114
> ,101,
> -
> 115,101,114,118,97,116,105,111,110,105,109,112,114,111,118,101,109,101,110,
> 116,
> -
> 115,98,101,103,105,110,110,105,110,103,32,105,110,74,101,115,117,115,32,67,
> 104,
> -
> 114,105,115,116,80,117,98,108,105,99,97,116,105,111,110,115,100,105,115,97,
> 103,
> -
> 114,101,101,109,101,110,116,116,101,120,116,45,97,108,105,103,110,58,114,44
> ,32,
> -
> 102,117,110,99,116,105,111,110,40,41,115,105,109,105,108,97,114,105,116,105
> ,101,
> -
> 115,98,111,100,121,62,60,47,104,116,109,108,62,105,115,32,99,117,114,114,10
> 1,110
> -
> ,116,108,121,97,108,112,104,97,98,101,116,105,99,97,108,105,115,32,115,111,1
> 09,
> -
> 101,116,105,109,101,115,116,121,112,101,61,34,105,109,97,103,101,47,109,97,
> 110,
> -
> 121,32,111,102,32,116,104,101,32,102,108,111,119,58,104,105,100,100,101,110
> ,59,
> -
> 97,118,97,105,108,97,98,108,101,32,105,110,100,101,115,99,114,105,98,101,32,
> 116,
> -
> 104,101,101,120,105,115,116,101,110,99,101,32,111,102,97,108,108,32,111,118
> ,101,
> -
> 114,32,116,104,101,116,104,101,32,73,110,116,101,114,110,101,116,9,60,117,1
> 08,32
> -
> ,99,108,97,115,115,61,34,105,110,115,116,97,108,108,97,116,105,111,110,110,1
> 01,
> -
> 105,103,104,98,111,114,104,111,111,100,97,114,109,101,100,32,102,111,114,99
> ,101,
> -
> 115,114,101,100,117,99,105,110,103,32,116,104,101,99,111,110,116,105,110,11
> 7,101
> -
> ,115,32,116,111,78,111,110,101,116,104,101,108,101,115,115,44,116,101,109,1
> 12,
> -
> 101,114,97,116,117,114,101,115,10,9,9,60,97,32,104,114,101,102,61,34,99,108,
> 111,
> -
> 115,101,32,116,111,32,116,104,101,101,120,97,109,112,108,101,115,32,111,102
> ,32,
> -
> 105,115,32,97,98,111,117,116,32,116,104,101,40,115,101,101,32,98,101,108,11
> 1,119
> -
> ,41,46,34,32,105,100,61,34,115,101,97,114,99,104,112,114,111,102,101,115,115
> ,105
> -
> ,111,110,97,108,105,115,32,97,118,97,105,108,97,98,108,101,116,104,101,32,11
> 1,
> -
> 102,102,105,99,105,97,108,9,9,60,47,115,99,114,105,112,116,62,10,10,9,9,60,10
> 0,
> -
> 105,118,32,105,100,61,34,97,99,99,101,108,101,114,97,116,105,111,110,116,10
> 4,114
> -
> ,111,117,103,104,32,116,104,101,32,72,97,108,108,32,111,102,32,70,97,109,101
> ,100
> -
> ,101,115,99,114,105,112,116,105,111,110,115,116,114,97,110,115,108,97,116,1
> 05,
> -
> 111,110,115,105,110,116,101,114,102,101,114,101,110,99,101,32,116,121,112,1
> 01,61
> -
> ,39,116,101,120,116,47,114,101,99,101,110,116,32,121,101,97,114,115,105,110,
> 32,
> -
> 116,104,101,32,119,111,114,108,100,118,101,114,121,32,112,111,112,117,108,9
> 7,114
> -
> ,123,98,97,99,107,103,114,111,117,110,100,58,116,114,97,100,105,116,105,111,
> 110,
> -
> 97,108,32,115,111,109,101,32,111,102,32,116,104,101,32,99,111,110,110,101,9
> 9,116
> -
> ,101,100,32,116,111,101,120,112,108,111,105,116,97,116,105,111,110,101,109,
> 101,
> -
> 114,103,101,110,99,101,32,111,102,99,111,110,115,116,105,116,117,116,105,11
> 1,110
> -
> ,65,32,72,105,115,116,111,114,121,32,111,102,115,105,103,110,105,102,105,99,
> 97,
> -
> 110,116,32,109,97,110,117,102,97,99,116,117,114,101,100,101,120,112,101,99,
> 116,
> -
> 97,116,105,111,110,115,62,60,110,111,115,99,114,105,112,116,62,60,99,97,110,
> 32,
> -
> 98,101,32,102,111,117,110,100,98,101,99,97,117,115,101,32,116,104,101,32,10
> 4,97,
> -
> 115,32,110,111,116,32,98,101,101,110,110,101,105,103,104,98,111,117,114,105
> ,110,
> -
> 103,119,105,116,104,111,117,116,32,116,104,101,32,97,100,100,101,100,32,116
> ,111,
> -
> 32,116,104,101,9,60,108,105,32,99,108,97,115,115,61,34,105,110,115,116,114,1
> 17,
> -
> 109,101,110,116,97,108,83,111,118,105,101,116,32,85,110,105,111,110,97,99,1
> 07,
> -
> 110,111,119,108,101,100,103,101,100,119,104,105,99,104,32,99,97,110,32,98,1
> 01,
> -
> 110,97,109,101,32,102,111,114,32,116,104,101,97,116,116,101,110,116,105,111
> ,110,
> -
> 32,116,111,97,116,116,101,109,112,116,115,32,116,111,32,100,101,118,101,108
> ,111,
> -
> 112,109,101,110,116,115,73,110,32,102,97,99,116,44,32,116,104,101,60,108,10
> 5,32,
> -
> 99,108,97,115,115,61,34,97,105,109,112,108,105,99,97,116,105,111,110,115,11
> 5,117
> -
> ,105,116,97,98,108,101,32,102,111,114,109,117,99,104,32,111,102,32,116,104,1
> 01,
> -
> 32,99,111,108,111,110,105,122,97,116,105,111,110,112,114,101,115,105,100,10
> 1,110
> -
> ,116,105,97,108,99,97,110,99,101,108,66,117,98,98,108,101,32,73,110,102,111,
> 114,
> -
> 109,97,116,105,111,110,109,111,115,116,32,111,102,32,116,104,101,32,105,115
> ,32,
> -
> 100,101,115,99,114,105,98,101,100,114,101,115,116,32,111,102,32,116,104,101
> ,32,
> -
> 109,111,114,101,32,111,114,32,108,101,115,115,105,110,32,83,101,112,116,101
> ,109,
> -
> 98,101,114,73,110,116,101,108,108,105,103,101,110,99,101,115,114,99,61,34,1
> 04,
> -
> 116,116,112,58,47,47,112,120,59,32,104,101,105,103,104,116,58,32,97,118,97,1
> 05,
> -
> 108,97,98,108,101,32,116,111,109,97,110,117,102,97,99,116,117,114,101,114,1
> 04,
> -
> 117,109,97,110,32,114,105,103,104,116,115,108,105,110,107,32,104,114,101,10
> 2,61,
> -
> 34,47,97,118,97,105,108,97,98,105,108,105,116,121,112,114,111,112,111,114,1
> 16,
> -
> 105,111,110,97,108,111,117,116,115,105,100,101,32,116,104,101,32,97,115,116
> ,114,
> -
> 111,110,111,109,105,99,97,108,104,117,109,97,110,32,98,101,105,110,103,115,
> 110,
> -
> 97,109,101,32,111,102,32,116,104,101,32,97,114,101,32,102,111,117,110,100,3
> 2,105
> -
> ,110,97,114,101,32,98,97,115,101,100,32,111,110,115,109,97,108,108,101,114,3
> 2,
> -
> 116,104,97,110,97,32,112,101,114,115,111,110,32,119,104,111,101,120,112,97,
> 110,
> -
> 115,105,111,110,32,111,102,97,114,103,117,105,110,103,32,116,104,97,116,110
> ,111,
> -
> 119,32,107,110,111,119,110,32,97,115,73,110,32,116,104,101,32,101,97,114,10
> 8,121
> -
> ,105,110,116,101,114,109,101,100,105,97,116,101,100,101,114,105,118,101,100
> ,32,
> -
> 102,114,111,109,83,99,97,110,100,105,110,97,118,105,97,110,60,47,97,62,60,47
> ,100
> -
> ,105,118,62,13,10,99,111,110,115,105,100,101,114,32,116,104,101,97,110,32,10
> 1,
> -
> 115,116,105,109,97,116,101,100,116,104,101,32,78,97,116,105,111,110,97,108,
> 60,
> -
> 100,105,118,32,105,100,61,34,112,97,103,114,101,115,117,108,116,105,110,103
> ,32,
> -
> 105,110,99,111,109,109,105,115,115,105,111,110,101,100,97,110,97,108,111,10
> 3,111
> -
> ,117,115,32,116,111,97,114,101,32,114,101,113,117,105,114,101,100,47,117,10
> 8,62,
> -
> 10,60,47,100,105,118,62,10,119,97,115,32,98,97,115,101,100,32,111,110,97,110
> ,100
> -
> ,32,98,101,99,97,109,101,32,97,38,110,98,115,112,59,38,110,98,115,112,59,116,
> 34,
> -
> 32,118,97,108,117,101,61,34,34,32,119,97,115,32,99,97,112,116,117,114,101,10
> 0,
> -
> 110,111,32,109,111,114,101,32,116,104,97,110,114,101,115,112,101,99,116,105
> ,118,
> -
> 101,108,121,99,111,110,116,105,110,117,101,32,116,111,32,62,13,10,60,104,10
> 1,97,
> -
> 100,62,13,10,60,119,101,114,101,32,99,114,101,97,116,101,100,109,111,114,10
> 1,32,
> -
> 103,101,110,101,114,97,108,105,110,102,111,114,109,97,116,105,111,110,32,11
> 7,115
> -
> ,101,100,32,102,111,114,32,116,104,101,105,110,100,101,112,101,110,100,101,
> 110,
> -
> 116,32,116,104,101,32,73,109,112,101,114,105,97,108,99,111,109,112,111,110,
> 101,
> -
> 110,116,32,111,102,116,111,32,116,104,101,32,110,111,114,116,104,105,110,99
> ,108,
> -
> 117,100,101,32,116,104,101,32,67,111,110,115,116,114,117,99,116,105,111,110
> ,115,
> -
> 105,100,101,32,111,102,32,116,104,101,32,119,111,117,108,100,32,110,111,116
> ,32,
> -
> 98,101,102,111,114,32,105,110,115,116,97,110,99,101,105,110,118,101,110,116
> ,105,
> -
> 111,110,32,111,102,109,111,114,101,32,99,111,109,112,108,101,120,99,111,108
> ,108,
> -
> 101,99,116,105,118,101,108,121,98,97,99,107,103,114,111,117,110,100,58,32,1
> 16,
> -
> 101,120,116,45,97,108,105,103,110,58,32,105,116,115,32,111,114,105,103,105,
> 110,
> -
> 97,108,105,110,116,111,32,97,99,99,111,117,110,116,116,104,105,115,32,112,1
> 14,
> -
> 111,99,101,115,115,97,110,32,101,120,116,101,110,115,105,118,101,104,111,11
> 9,101
> -
> ,118,101,114,44,32,116,104,101,116,104,101,121,32,97,114,101,32,110,111,116,
> 114,
> -
> 101,106,101,99,116,101,100,32,116,104,101,99,114,105,116,105,99,105,115,109
> ,32,
> -
> 111,102,100,117,114,105,110,103,32,119,104,105,99,104,112,114,111,98,97,98,
> 108,
> -
> 121,32,116,104,101,116,104,105,115,32,97,114,116,105,99,108,101,40,102,117,
> 110,
> -
> 99,116,105,111,110,40,41,123,73,116,32,115,104,111,117,108,100,32,98,101,97,
> 110,
> -
> 32,97,103,114,101,101,109,101,110,116,97,99,99,105,100,101,110,116,97,108,1
> 08,
> -
> 121,100,105,102,102,101,114,115,32,102,114,111,109,65,114,99,104,105,116,10
> 1,99,
> -
> 116,117,114,101,98,101,116,116,101,114,32,107,110,111,119,110,97,114,114,97
> ,110,
> -
> 103,101,109,101,110,116,115,105,110,102,108,117,101,110,99,101,32,111,110,9
> 7,116
> -
> ,116,101,110,100,101,100,32,116,104,101,105,100,101,110,116,105,99,97,108,3
> 2,116
> -
> ,111,115,111,117,116,104,32,111,102,32,116,104,101,112,97,115,115,32,116,10
> 4,114
> -
> ,111,117,103,104,120,109,108,34,32,116,105,116,108,101,61,34,119,101,105,10
> 3,104
> -
> ,116,58,98,111,108,100,59,99,114,101,97,116,105,110,103,32,116,104,101,100,1
> 05,
> -
> 115,112,108,97,121,58,110,111,110,101,114,101,112,108,97,99,101,100,32,116,
> 104,
> -
> 101,60,105,109,103,32,115,114,99,61,34,47,105,104,116,116,112,115,58,47,47,1
> 19,
> -
> 119,119,46,87,111,114,108,100,32,87,97,114,32,73,73,116,101,115,116,105,109,
> 111,
> -
> 110,105,97,108,115,102,111,117,110,100,32,105,110,32,116,104,101,114,101,11
> 3,117
> -
> ,105,114,101,100,32,116,111,32,97,110,100,32,116,104,97,116,32,116,104,101,9
> 8,
> -
> 101,116,119,101,101,110,32,116,104,101,32,119,97,115,32,100,101,115,105,103
> ,110,
> -
> 101,100,99,111,110,115,105,115,116,115,32,111,102,32,99,111,110,115,105,100
> ,101,
> -
> 114,97,98,108,121,112,117,98,108,105,115,104,101,100,32,98,121,116,104,101,
> 32,
> -
> 108,97,110,103,117,97,103,101,67,111,110,115,101,114,118,97,116,105,111,110
> ,99,
> -
> 111,110,115,105,115,116,101,100,32,111,102,114,101,102,101,114,32,116,111,3
> 2,116
> -
> ,104,101,98,97,99,107,32,116,111,32,116,104,101,32,99,115,115,34,32,109,101,
> 100,
> -
> 105,97,61,34,80,101,111,112,108,101,32,102,114,111,109,32,97,118,97,105,108,
> 97,
> -
> 98,108,101,32,111,110,112,114,111,118,101,100,32,116,111,32,98,101,115,117,
> 103,
> -
> 103,101,115,116,105,111,110,115,34,119,97,115,32,107,110,111,119,110,32,97,
> 115,
> -
> 118,97,114,105,101,116,105,101,115,32,111,102,108,105,107,101,108,121,32,11
> 6,111
> -
> ,32,98,101,99,111,109,112,114,105,115,101,100,32,111,102,115,117,112,112,11
> 1,114
> -
> ,116,32,116,104,101,32,104,97,110,100,115,32,111,102,32,116,104,101,99,111,1
> 17,
> -
> 112,108,101,100,32,119,105,116,104,99,111,110,110,101,99,116,32,97,110,100,
> 32,98
> -
> ,111,114,100,101,114,58,110,111,110,101,59,112,101,114,102,111,114,109,97,1
> 10,99
> -
> ,101,115,98,101,102,111,114,101,32,98,101,105,110,103,108,97,116,101,114,32,
> 98,
> -
> 101,99,97,109,101,99,97,108,99,117,108,97,116,105,111,110,115,111,102,116,1
> 01,
> -
> 110,32,99,97,108,108,101,100,114,101,115,105,100,101,110,116,115,32,111,102
> ,109,
> -
> 101,97,110,105,110,103,32,116,104,97,116,62,60,108,105,32,99,108,97,115,115,
> 61,
> -
> 34,101,118,105,100,101,110,99,101,32,102,111,114,101,120,112,108,97,110,97,
> 116,
> -
> 105,111,110,115,101,110,118,105,114,111,110,109,101,110,116,115,34,62,60,47
> ,97,
> -
> 62,60,47,100,105,118,62,119,104,105,99,104,32,97,108,108,111,119,115,73,110,
> 116,
> -
> 114,111,100,117,99,116,105,111,110,100,101,118,101,108,111,112,101,100,32,9
> 8,121
> -
> ,97,32,119,105,100,101,32,114,97,110,103,101,111,110,32,98,101,104,97,108,10
> 2,32
> -
> ,111,102,118,97,108,105,103,110,61,34,116,111,112,34,112,114,105,110,99,105,
> 112,
> -
> 108,101,32,111,102,97,116,32,116,104,101,32,116,105,109,101,44,60,47,110,11
> 1,115
> -
> ,99,114,105,112,116,62,13,115,97,105,100,32,116,111,32,104,97,118,101,105,11
> 0,32
> -
> ,116,104,101,32,102,105,114,115,116,119,104,105,108,101,32,111,116,104,101,
> 114,
> -
> 115,104,121,112,111,116,104,101,116,105,99,97,108,112,104,105,108,111,115,1
> 11,
> -
> 112,104,101,114,115,112,111,119,101,114,32,111,102,32,116,104,101,99,111,11
> 0,116
> -
> ,97,105,110,101,100,32,105,110,112,101,114,102,111,114,109,101,100,32,98,12
> 1,105
> -
> ,110,97,98,105,108,105,116,121,32,116,111,119,101,114,101,32,119,114,105,11
> 6,116
> -
> ,101,110,115,112,97,110,32,115,116,121,108,101,61,34,105,110,112,117,116,32,
> 110,
> -
> 97,109,101,61,34,116,104,101,32,113,117,101,115,116,105,111,110,105,110,116
> ,101,
> -
> 110,100,101,100,32,102,111,114,114,101,106,101,99,116,105,111,110,32,111,10
> 2,105
> -
> ,109,112,108,105,101,115,32,116,104,97,116,105,110,118,101,110,116,101,100,
> 32,
> -
> 116,104,101,116,104,101,32,115,116,97,110,100,97,114,100,119,97,115,32,112,
> 114,
> -
> 111,98,97,98,108,121,108,105,110,107,32,98,101,116,119,101,101,110,112,114,
> 111,
> -
> 102,101,115,115,111,114,32,111,102,105,110,116,101,114,97,99,116,105,111,11
> 0,115
> -
> ,99,104,97,110,103,105,110,103,32,116,104,101,73,110,100,105,97,110,32,79,99
> ,101
> -
> ,97,110,32,99,108,97,115,115,61,34,108,97,115,116,119,111,114,107,105,110,10
> 3,32
> -
> ,119,105,116,104,39,104,116,116,112,58,47,47,119,119,119,46,121,101,97,114,1
> 15,
> -
> 32,98,101,102,111,114,101,84,104,105,115,32,119,97,115,32,116,104,101,114,1
> 01,99
> -
> ,114,101,97,116,105,111,110,97,108,101,110,116,101,114,105,110,103,32,116,1
> 04,
> -
> 101,109,101,97,115,117,114,101,109,101,110,116,115,97,110,32,101,120,116,11
> 4,101
> -
> ,109,101,108,121,118,97,108,117,101,32,111,102,32,116,104,101,115,116,97,11
> 4,116
> -
> ,32,111,102,32,116,104,101,10,60,47,115,99,114,105,112,116,62,10,10,97,110,3
> 2,
> -
> 101,102,102,111,114,116,32,116,111,105,110,99,114,101,97,115,101,32,116,104
> ,101,
> -
> 116,111,32,116,104,101,32,115,111,117,116,104,115,112,97,99,105,110,103,61,
> 34,48
> -
> ,34,62,115,117,102,102,105,99,105,101,110,116,108,121,116,104,101,32,69,117,
> 114,
> -
> 111,112,101,97,110,99,111,110,118,101,114,116,101,100,32,116,111,99,108,101
> ,97,
> -
> 114,84,105,109,101,111,117,116,100,105,100,32,110,111,116,32,104,97,118,101
> ,99,
> -
> 111,110,115,101,113,117,101,110,116,108,121,102,111,114,32,116,104,101,32,1
> 10,
> -
> 101,120,116,101,120,116,101,110,115,105,111,110,32,111,102,101,99,111,110,1
> 11,
> -
> 109,105,99,32,97,110,100,97,108,116,104,111,117,103,104,32,116,104,101,97,1
> 14,
> -
> 101,32,112,114,111,100,117,99,101,100,97,110,100,32,119,105,116,104,32,116,
> 104,
> -
> 101,105,110,115,117,102,102,105,99,105,101,110,116,103,105,118,101,110,32,9
> 8,121
> -
> ,32,116,104,101,115,116,97,116,105,110,103,32,116,104,97,116,101,120,112,10
> 1,110
> -
> ,100,105,116,117,114,101,115,60,47,115,112,97,110,62,60,47,97,62,10,116,104,
> 111,
> -
> 117,103,104,116,32,116,104,97,116,111,110,32,116,104,101,32,98,97,115,105,1
> 15,99
> -
> ,101,108,108,112,97,100,100,105,110,103,61,105,109,97,103,101,32,111,102,32,
> 116,
> -
> 104,101,114,101,116,117,114,110,105,110,103,32,116,111,105,110,102,111,114,
> 109,
> -
> 97,116,105,111,110,44,115,101,112,97,114,97,116,101,100,32,98,121,97,115,11
> 5,97,
> -
> 115,115,105,110,97,116,101,100,115,34,32,99,111,110,116,101,110,116,61,34,9
> 7,117
> -
> ,116,104,111,114,105,116,121,32,111,102,110,111,114,116,104,119,101,115,116
> ,101,
> -
> 114,110,60,47,100,105,118,62,10,60,100,105,118,32,34,62,60,47,100,105,118,62
> ,13,
> -
> 10,32,32,99,111,110,115,117,108,116,97,116,105,111,110,99,111,109,109,117,1
> 10,
> -
> 105,116,121,32,111,102,116,104,101,32,110,97,116,105,111,110,97,108,105,116
> ,32,
> -
> 115,104,111,117,108,100,32,98,101,112,97,114,116,105,99,105,112,97,110,116,
> 115,
> -
> 32,97,108,105,103,110,61,34,108,101,102,116,116,104,101,32,103,114,101,97,1
> 16,
> -
> 101,115,116,115,101,108,101,99,116,105,111,110,32,111,102,115,117,112,101,1
> 14,
> -
> 110,97,116,117,114,97,108,100,101,112,101,110,100,101,110,116,32,111,110,10
> 5,115
> -
> ,32,109,101,110,116,105,111,110,101,100,97,108,108,111,119,105,110,103,32,1
> 16,
> -
> 104,101,119,97,115,32,105,110,118,101,110,116,101,100,97,99,99,111,109,112,
> 97,
> -
> 110,121,105,110,103,104,105,115,32,112,101,114,115,111,110,97,108,97,118,97
> ,105,
> -
> 108,97,98,108,101,32,97,116,115,116,117,100,121,32,111,102,32,116,104,101,1
> 11,
> -
> 110,32,116,104,101,32,111,116,104,101,114,101,120,101,99,117,116,105,111,11
> 0,32,
> -
> 111,102,72,117,109,97,110,32,82,105,103,104,116,115,116,101,114,109,115,32,
> 111,
> -
> 102,32,116,104,101,97,115,115,111,99,105,97,116,105,111,110,115,114,101,115
> ,101,
> -
> 97,114,99,104,32,97,110,100,115,117,99,99,101,101,100,101,100,32,98,121,100,
> 101,
> -
> 102,101,97,116,101,100,32,116,104,101,97,110,100,32,102,114,111,109,32,116,
> 104,
> -
> 101,98,117,116,32,116,104,101,121,32,97,114,101,99,111,109,109,97,110,100,1
> 01,
> -
> 114,32,111,102,115,116,97,116,101,32,111,102,32,116,104,101,121,101,97,114,
> 115,
> -
> 32,111,102,32,97,103,101,116,104,101,32,115,116,117,100,121,32,111,102,60,1
> 17,
> -
> 108,32,99,108,97,115,115,61,34,115,112,108,97,99,101,32,105,110,32,116,104,1
> 01,
> -
> 119,104,101,114,101,32,104,101,32,119,97,115,60,108,105,32,99,108,97,115,11
> 5,61,
> -
> 34,102,116,104,101,114,101,32,97,114,101,32,110,111,119,104,105,99,104,32,9
> 8,101
> -
> ,99,97,109,101,104,101,32,112,117,98,108,105,115,104,101,100,101,120,112,11
> 4,101
> -
> ,115,115,101,100,32,105,110,116,111,32,119,104,105,99,104,32,116,104,101,99,
> 111,
> -
> 109,109,105,115,115,105,111,110,101,114,102,111,110,116,45,119,101,105,103,
> 104,
> -
> 116,58,116,101,114,114,105,116,111,114,121,32,111,102,101,120,116,101,110,1
> 15,
> -
> 105,111,110,115,34,62,82,111,109,97,110,32,69,109,112,105,114,101,101,113,1
> 17,97
> -
> ,108,32,116,111,32,116,104,101,73,110,32,99,111,110,116,114,97,115,116,44,10
> 4,
> -
> 111,119,101,118,101,114,44,32,97,110,100,105,115,32,116,121,112,105,99,97,1
> 08,
> -
> 108,121,97,110,100,32,104,105,115,32,119,105,102,101,40,97,108,115,111,32,9
> 9,97,
> -
> 108,108,101,100,62,60,117,108,32,99,108,97,115,115,61,34,101,102,102,101,99,
> 116,
> -
> 105,118,101,108,121,32,101,118,111,108,118,101,100,32,105,110,116,111,115,1
> 01,
> -
> 101,109,32,116,111,32,104,97,118,101,119,104,105,99,104,32,105,115,32,116,1
> 04,
> -
> 101,116,104,101,114,101,32,119,97,115,32,110,111,97,110,32,101,120,99,101,1
> 08,
> -
> 108,101,110,116,97,108,108,32,111,102,32,116,104,101,115,101,100,101,115,99
> ,114,
> -
> 105,98,101,100,32,98,121,73,110,32,112,114,97,99,116,105,99,101,44,98,114,11
> 1,97
> -
> ,100,99,97,115,116,105,110,103,99,104,97,114,103,101,100,32,119,105,116,104,
> 114,
> -
> 101,102,108,101,99,116,101,100,32,105,110,115,117,98,106,101,99,116,101,100
> ,32,
> -
> 116,111,109,105,108,105,116,97,114,121,32,97,110,100,116,111,32,116,104,101
> ,32,
> -
> 112,111,105,110,116,101,99,111,110,111,109,105,99,97,108,108,121,115,101,11
> 6,84,
> -
> 97,114,103,101,116,105,110,103,97,114,101,32,97,99,116,117,97,108,108,121,1
> 18,
> -
> 105,99,116,111,114,121,32,111,118,101,114,40,41,59,60,47,115,99,114,105,112,
> 116,
> -
> 62,99,111,110,116,105,110,117,111,117,115,108,121,114,101,113,117,105,114,1
> 01,
> -
> 100,32,102,111,114,101,118,111,108,117,116,105,111,110,97,114,121,97,110,32
> ,101,
> -
> 102,102,101,99,116,105,118,101,110,111,114,116,104,32,111,102,32,116,104,10
> 1,44,
> -
> 32,119,104,105,99,104,32,119,97,115,32,102,114,111,110,116,32,111,102,32,11
> 6,104
> -
> ,101,111,114,32,111,116,104,101,114,119,105,115,101,115,111,109,101,32,102,
> 111,
> -
> 114,109,32,111,102,104,97,100,32,110,111,116,32,98,101,101,110,103,101,110,
> 101,
> -
> 114,97,116,101,100,32,98,121,105,110,102,111,114,109,97,116,105,111,110,46,
> 112,
> -
> 101,114,109,105,116,116,101,100,32,116,111,105,110,99,108,117,100,101,115,3
> 2,116
> -
> ,104,101,100,101,118,101,108,111,112,109,101,110,116,44,101,110,116,101,114
> ,101,
> -
> 100,32,105,110,116,111,116,104,101,32,112,114,101,118,105,111,117,115,99,11
> 1,110
> -
> ,115,105,115,116,101,110,116,108,121,97,114,101,32,107,110,111,119,110,32,9
> 7,115
> -
> ,116,104,101,32,102,105,101,108,100,32,111,102,116,104,105,115,32,116,121,1
> 12,
> -
> 101,32,111,102,103,105,118,101,110,32,116,111,32,116,104,101,116,104,101,32
> ,116,
> -
> 105,116,108,101,32,111,102,99,111,110,116,97,105,110,115,32,116,104,101,105
> ,110,
> -
> 115,116,97,110,99,101,115,32,111,102,105,110,32,116,104,101,32,110,111,114,
> 116,
> -
> 104,100,117,101,32,116,111,32,116,104,101,105,114,97,114,101,32,100,101,115
> ,105,
> -
> 103,110,101,100,99,111,114,112,111,114,97,116,105,111,110,115,119,97,115,32
> ,116,
> -
> 104,97,116,32,116,104,101,111,110,101,32,111,102,32,116,104,101,115,101,109
> ,111,
> -
> 114,101,32,112,111,112,117,108,97,114,115,117,99,99,101,101,100,101,100,32,
> 105,
> -
> 110,115,117,112,112,111,114,116,32,102,114,111,109,105,110,32,100,105,102,1
> 02,
> -
> 101,114,101,110,116,100,111,109,105,110,97,116,101,100,32,98,121,100,101,11
> 5,105
> -
> ,103,110,101,100,32,102,111,114,111,119,110,101,114,115,104,105,112,32,111,
> 102,
> -
> 97,110,100,32,112,111,115,115,105,98,108,121,115,116,97,110,100,97,114,100,
> 105,
> -
> 122,101,100,114,101,115,112,111,110,115,101,84,101,120,116,119,97,115,32,10
> 5,110
> -
> ,116,101,110,100,101,100,114,101,99,101,105,118,101,100,32,116,104,101,97,1
> 15,
> -
> 115,117,109,101,100,32,116,104,97,116,97,114,101,97,115,32,111,102,32,116,1
> 04,
> -
> 101,112,114,105,109,97,114,105,108,121,32,105,110,116,104,101,32,98,97,115,
> 105,
> -
> 115,32,111,102,105,110,32,116,104,101,32,115,101,110,115,101,97,99,99,111,1
> 17,
> -
> 110,116,115,32,102,111,114,100,101,115,116,114,111,121,101,100,32,98,121,97
> ,116,
> -
> 32,108,101,97,115,116,32,116,119,111,119,97,115,32,100,101,99,108,97,114,10
> 1,100
> -
> ,99,111,117,108,100,32,110,111,116,32,98,101,83,101,99,114,101,116,97,114,12
> 1,32
> -
> ,111,102,97,112,112,101,97,114,32,116,111,32,98,101,109,97,114,103,105,110,4
> 5,
> -
> 116,111,112,58,49,47,94,92,115,43,124,92,115,43,36,47,103,101,41,123,116,104
> ,114
> -
> ,111,119,32,101,125,59,116,104,101,32,115,116,97,114,116,32,111,102,116,119,
> 111,
> -
> 32,115,101,112,97,114,97,116,101,108,97,110,103,117,97,103,101,32,97,110,10
> 0,119
> -
> ,104,111,32,104,97,100,32,98,101,101,110,111,112,101,114,97,116,105,111,110,
> 32,
> -
> 111,102,100,101,97,116,104,32,111,102,32,116,104,101,114,101,97,108,32,110,
> 117,
> -
> 109,98,101,114,115,9,60,108,105,110,107,32,114,101,108,61,34,112,114,111,11
> 8,105
> -
> ,100,101,100,32,116,104,101,116,104,101,32,115,116,111,114,121,32,111,102,9
> 9,111
> -
> ,109,112,101,116,105,116,105,111,110,115,101,110,103,108,105,115,104,32,40,
> 85,75
> -
> ,41,101,110,103,108,105,115,104,32,40,85,83,41,208,156,208,190,208,189,208,1
> 79,
> -
> 208,190,208,187,208,161,209,128,208,191,209,129,208,186,208,184,209,129,20
> 9,128,
> -
> 208,191,209,129,208,186,208,184,209,129,209,128,208,191,209,129,208,186,20
> 8,190,
> -
> 217,132,216,185,216,177,216,168,217,138,216,169,230,173,163,233,171,148,22
> 8,184,
> -
> 173,230,150,135,231,174,128,228,189,147,228,184,173,230,150,135,231,185,12
> 9,228,
> -
> 189,147,228,184,173,230,150,135,230,156,137,233,153,144,229,133,172,229,14
> 3,184,
> -
> 228,186,186,230,176,145,230,148,191,229,186,156,233,152,191,233,135,140,22
> 9,183,
> -
> 180,229,183,180,231,164,190,228,188,154,228,184,187,228,185,137,230,147,14
> 1,228,
> -
> 189,156,231,179,187,231,187,159,230,148,191,231,173,150,230,179,149,232,16
> 7,132,
> -
> 105,110,102,111,114,109,97,99,105,195,179,110,104,101,114,114,97,109,105,10
> 1,110
> -
> ,116,97,115,101,108,101,99,116,114,195,179,110,105,99,111,100,101,115,99,11
> 4,105
> -
> ,112,99,105,195,179,110,99,108,97,115,105,102,105,99,97,100,111,115,99,111,1
> 10,
> -
> 111,99,105,109,105,101,110,116,111,112,117,98,108,105,99,97,99,105,195,179,
> 110,
> -
> 114,101,108,97,99,105,111,110,97,100,97,115,105,110,102,111,114,109,195,161
> ,116,
> -
> 105,99,97,114,101,108,97,99,105,111,110,97,100,111,115,100,101,112,97,114,1
> 16,97
> -
> ,109,101,110,116,111,116,114,97,98,97,106,97,100,111,114,101,115,100,105,11
> 4,101
> -
> ,99,116,97,109,101,110,116,101,97,121,117,110,116,97,109,105,101,110,116,11
> 1,109
> -
> ,101,114,99,97,100,111,76,105,98,114,101,99,111,110,116,195,161,99,116,101,1
> 10,
> -
> 111,115,104,97,98,105,116,97,99,105,111,110,101,115,99,117,109,112,108,105,
> 109,
> -
> 105,101,110,116,111,114,101,115,116,97,117,114,97,110,116,101,115,100,105,1
> 15,
> -
> 112,111,115,105,99,105,195,179,110,99,111,110,115,101,99,117,101,110,99,105
> ,97,
> -
> 101,108,101,99,116,114,195,179,110,105,99,97,97,112,108,105,99,97,99,105,11
> 1,110
> -
> ,101,115,100,101,115,99,111,110,101,99,116,97,100,111,105,110,115,116,97,10
> 8,97,
> -
> 99,105,195,179,110,114,101,97,108,105,122,97,99,105,195,179,110,117,116,105
> ,108,
> -
> 105,122,97,99,105,195,179,110,101,110,99,105,99,108,111,112,101,100,105,97,
> 101,
> -
> 110,102,101,114,109,101,100,97,100,101,115,105,110,115,116,114,117,109,101,
> 110,
> -
> 116,111,115,101,120,112,101,114,105,101,110,99,105,97,115,105,110,115,116,1
> 05,
> -
> 116,117,99,105,195,179,110,112,97,114,116,105,99,117,108,97,114,101,115,115
> ,117,
> -
> 98,99,97,116,101,103,111,114,105,97,209,130,208,190,208,187,209,140,208,186
> ,208,
> -
> 190,208,160,208,190,209,129,209,129,208,184,208,184,209,128,208,176,208,17
> 7,208,
> -
> 190,209,130,209,139,208,177,208,190,208,187,209,140,209,136,208,181,208,19
> 1,209,
> -
> 128,208,190,209,129,209,130,208,190,208,188,208,190,208,182,208,181,209,13
> 0,208,
> -
> 181,208,180,209,128,209,131,208,179,208,184,209,133,209,129,208,187,209,13
> 1,209,
> -
> 135,208,176,208,181,209,129,208,181,208,185,209,135,208,176,209,129,208,17
> 8,209,
> -
> 129,208,181,208,179,208,180,208,176,208,160,208,190,209,129,209,129,208,18
> 4,209,
> -
> 143,208,156,208,190,209,129,208,186,208,178,208,181,208,180,209,128,209,13
> 1,208,
> -
> 179,208,184,208,181,208,179,208,190,209,128,208,190,208,180,208,176,208,17
> 8,208,
> -
> 190,208,191,209,128,208,190,209,129,208,180,208,176,208,189,208,189,209,13
> 9,209,
> -
> 133,208,180,208,190,208,187,208,182,208,189,209,139,208,184,208,188,208,18
> 1,208,
> -
> 189,208,189,208,190,208,156,208,190,209,129,208,186,208,178,209,139,209,12
> 8,209,
> -
> 131,208,177,208,187,208,181,208,185,208,156,208,190,209,129,208,186,208,17
> 8,208,
> -
> 176,209,129,209,130,209,128,208,176,208,189,209,139,208,189,208,184,209,13
> 5,208,
> -
> 181,208,179,208,190,209,128,208,176,208,177,208,190,209,130,208,181,208,18
> 0,208,
> -
> 190,208,187,208,182,208,181,208,189,209,131,209,129,208,187,209,131,208,17
> 9,208,
> -
> 184,209,130,208,181,208,191,208,181,209,128,209,140,208,158,208,180,208,18
> 9,208,
> -
> 176,208,186,208,190,208,191,208,190,209,130,208,190,208,188,209,131,209,12
> 8,208,
> -
> 176,208,177,208,190,209,130,209,131,208,176,208,191,209,128,208,181,208,18
> 7,209,
> -
> 143,208,178,208,190,208,190,208,177,209,137,208,181,208,190,208,180,208,18
> 9,208,
> -
> 190,208,179,208,190,209,129,208,178,208,190,208,181,208,179,208,190,209,12
> 9,209,
> -
> 130,208,176,209,130,209,140,208,184,208,180,209,128,209,131,208,179,208,19
> 0,208,
> -
> 185,209,132,208,190,209,128,209,131,208,188,208,181,209,133,208,190,209,12
> 8,208,
> -
> 190,209,136,208,190,208,191,209,128,208,190,209,130,208,184,208,178,209,12
> 9,209,
> -
> 129,209,139,208,187,208,186,208,176,208,186,208,176,208,182,208,180,209,13
> 9,208,
> -
> 185,208,178,208,187,208,176,209,129,209,130,208,184,208,179,209,128,209,13
> 1,208,
> -
> 191,208,191,209,139,208,178,208,188,208,181,209,129,209,130,208,181,209,12
> 8,208,
> -
> 176,208,177,208,190,209,130,208,176,209,129,208,186,208,176,208,183,208,17
> 6,208,
> -
> 187,208,191,208,181,209,128,208,178,209,139,208,185,208,180,208,181,208,18
> 7,208,
> -
> 176,209,130,209,140,208,180,208,181,208,189,209,140,208,179,208,184,208,19
> 1,208,
> -
> 181,209,128,208,184,208,190,208,180,208,177,208,184,208,183,208,189,208,18
> 1,209,
> -
> 129,208,190,209,129,208,189,208,190,208,178,208,181,208,188,208,190,208,18
> 8,208,
> -
> 181,208,189,209,130,208,186,209,131,208,191,208,184,209,130,209,140,208,18
> 0,208,
> -
> 190,208,187,208,182,208,189,208,176,209,128,208,176,208,188,208,186,208,17
> 6,209,
> -
> 133,208,189,208,176,209,135,208,176,208,187,208,190,208,160,208,176,208,17
> 7,208,
> -
> 190,209,130,208,176,208,162,208,190,208,187,209,140,208,186,208,190,209,12
> 9,208,
> -
> 190,208,178,209,129,208,181,208,188,208,178,209,130,208,190,209,128,208,19
> 0,208,
> -
> 185,208,189,208,176,209,135,208,176,208,187,208,176,209,129,208,191,208,18
> 4,209,
> -
> 129,208,190,208,186,209,129,208,187,209,131,208,182,208,177,209,139,209,12
> 9,208,
> -
> 184,209,129,209,130,208,181,208,188,208,191,208,181,209,135,208,176,209,13
> 0,208,
> -
> 184,208,189,208,190,208,178,208,190,208,179,208,190,208,191,208,190,208,18
> 8,208,
> -
> 190,209,137,208,184,209,129,208,176,208,185,209,130,208,190,208,178,208,19
> 1,208,
> -
> 190,209,135,208,181,208,188,209,131,208,191,208,190,208,188,208,190,209,13
> 7,209,
> -
> 140,208,180,208,190,208,187,208,182,208,189,208,190,209,129,209,129,209,13
> 9,208,
> -
> 187,208,186,208,184,208,177,209,139,209,129,209,130,209,128,208,190,208,18
> 0,208,
> -
> 176,208,189,208,189,209,139,208,181,208,188,208,189,208,190,208,179,208,18
> 4,208,
> -
> 181,208,191,209,128,208,190,208,181,208,186,209,130,208,161,208,181,208,18
> 5,209,
> -
> 135,208,176,209,129,208,188,208,190,208,180,208,181,208,187,208,184,209,13
> 0,208,
> -
> 176,208,186,208,190,208,179,208,190,208,190,208,189,208,187,208,176,208,18
> 5,208,
> -
> 189,208,179,208,190,209,128,208,190,208,180,208,181,208,178,208,181,209,12
> 8,209,
> -
> 129,208,184,209,143,209,129,209,130,209,128,208,176,208,189,208,181,209,13
> 2,208,
> -
> 184,208,187,209,140,208,188,209,139,209,131,209,128,208,190,208,178,208,18
> 9,209,
> -
> 143,209,128,208,176,208,183,208,189,209,139,209,133,208,184,209,129,208,18
> 6,208,
> -
> 176,209,130,209,140,208,189,208,181,208,180,208,181,208,187,209,142,209,14
> 3,208,
> -
> 189,208,178,208,176,209,128,209,143,208,188,208,181,208,189,209,140,209,13
> 6,208,
> -
> 181,208,188,208,189,208,190,208,179,208,184,209,133,208,180,208,176,208,18
> 9,208,
> -
> 189,208,190,208,185,208,183,208,189,208,176,209,135,208,184,209,130,208,18
> 9,208,
> -
> 181,208,187,209,140,208,183,209,143,209,132,208,190,209,128,209,131,208,18
> 8,208,
> -
> 176,208,162,208,181,208,191,208,181,209,128,209,140,208,188,208,181,209,12
> 9,209,
> -
> 143,209,134,208,176,208,183,208,176,209,137,208,184,209,130,209,139,208,15
> 5,209,
> -
> 131,209,135,209,136,208,184,208,181,224,164,168,224,164,185,224,165,128,22
> 4,164,
> -
> 130,224,164,149,224,164,176,224,164,168,224,165,135,224,164,133,224,164,17
> 0,224,
> -
> 164,168,224,165,135,224,164,149,224,164,191,224,164,175,224,164,190,224,16
> 4,149,
> -
> 224,164,176,224,165,135,224,164,130,224,164,133,224,164,168,224,165,141,22
> 4,164,
> -
> 175,224,164,149,224,165,141,224,164,175,224,164,190,224,164,151,224,164,19
> 0,224,
> -
> 164,135,224,164,161,224,164,172,224,164,190,224,164,176,224,165,135,224,16
> 4,149,
> -
> 224,164,191,224,164,184,224,165,128,224,164,166,224,164,191,224,164,175,22
> 4,164,
> -
> 190,224,164,170,224,164,185,224,164,178,224,165,135,224,164,184,224,164,19
> 1,224,
> -
> 164,130,224,164,185,224,164,173,224,164,190,224,164,176,224,164,164,224,16
> 4,133,
> -
> 224,164,170,224,164,168,224,165,128,224,164,181,224,164,190,224,164,178,22
> 4,165,
> -
> 135,224,164,184,224,165,135,224,164,181,224,164,190,224,164,149,224,164,17
> 6,224,
> -
> 164,164,224,165,135,224,164,174,224,165,135,224,164,176,224,165,135,224,16
> 4,185,
> -
> 224,165,139,224,164,168,224,165,135,224,164,184,224,164,149,224,164,164,22
> 4,165,
> -
> 135,224,164,172,224,164,185,224,165,129,224,164,164,224,164,184,224,164,19
> 0,224,
> -
> 164,135,224,164,159,224,164,185,224,165,139,224,164,151,224,164,190,224,16
> 4,156,
> -
> 224,164,190,224,164,168,224,165,135,224,164,174,224,164,191,224,164,168,22
> 4,164,
> -
> 159,224,164,149,224,164,176,224,164,164,224,164,190,224,164,149,224,164,17
> 6,224,
> -
> 164,168,224,164,190,224,164,137,224,164,168,224,164,149,224,165,135,224,16
> 4,175,
> -
> 224,164,185,224,164,190,224,164,129,224,164,184,224,164,172,224,164,184,22
> 4,165,
> -
> 135,224,164,173,224,164,190,224,164,183,224,164,190,224,164,134,224,164,17
> 0,224,
> -
> 164,149,224,165,135,224,164,178,224,164,191,224,164,175,224,165,135,224,16
> 4,182,
> -
> 224,165,129,224,164,176,224,165,130,224,164,135,224,164,184,224,164,149,22
> 4,165,
> -
> 135,224,164,152,224,164,130,224,164,159,224,165,135,224,164,174,224,165,13
> 5,224,
> -
> 164,176,224,165,128,224,164,184,224,164,149,224,164,164,224,164,190,224,16
> 4,174,
> -
> 224,165,135,224,164,176,224,164,190,224,164,178,224,165,135,224,164,149,22
> 4,164,
> -
> 176,224,164,133,224,164,167,224,164,191,224,164,149,224,164,133,224,164,17
> 0,224,
> -
> 164,168,224,164,190,224,164,184,224,164,174,224,164,190,224,164,156,224,16
> 4,174,
> -
> 224,165,129,224,164,157,224,165,135,224,164,149,224,164,190,224,164,176,22
> 4,164,
> -
> 163,224,164,185,224,165,139,224,164,164,224,164,190,224,164,149,224,164,16
> 1,224,
> -
> 164,188,224,165,128,224,164,175,224,164,185,224,164,190,224,164,130,224,16
> 4,185,
> -
> 224,165,139,224,164,159,224,164,178,224,164,182,224,164,172,224,165,141,22
> 4,164,
> -
> 166,224,164,178,224,164,191,224,164,175,224,164,190,224,164,156,224,165,12
> 8,224,
> -
> 164,181,224,164,168,224,164,156,224,164,190,224,164,164,224,164,190,224,16
> 4,149,
> -
> 224,165,136,224,164,184,224,165,135,224,164,134,224,164,170,224,164,149,22
> 4,164,
> -
> 190,224,164,181,224,164,190,224,164,178,224,165,128,224,164,166,224,165,13
> 5,224,
> -
> 164,168,224,165,135,224,164,170,224,165,130,224,164,176,224,165,128,224,16
> 4,170,
> -
> 224,164,190,224,164,168,224,165,128,224,164,137,224,164,184,224,164,149,22
> 4,165,
> -
> 135,224,164,185,224,165,139,224,164,151,224,165,128,224,164,172,224,165,13
> 6,224,
> -
> 164,160,224,164,149,224,164,134,224,164,170,224,164,149,224,165,128,224,16
> 4,181,
> -
> 224,164,176,224,165,141,224,164,183,224,164,151,224,164,190,224,164,130,22
> 4,164,
> -
> 181,224,164,134,224,164,170,224,164,149,224,165,139,224,164,156,224,164,19
> 1,224,
> -
> 164,178,224,164,190,224,164,156,224,164,190,224,164,168,224,164,190,224,16
> 4,184,
> -
> 224,164,185,224,164,174,224,164,164,224,164,185,224,164,174,224,165,135,22
> 4,164,
> -
> 130,224,164,137,224,164,168,224,164,149,224,165,128,224,164,175,224,164,19
> 0,224,
> -
> 164,185,224,165,130,224,164,166,224,164,176,224,165,141,224,164,156,224,16
> 4,184,
> -
> 224,165,130,224,164,154,224,165,128,224,164,170,224,164,184,224,164,130,22
> 4,164,
> -
> 166,224,164,184,224,164,181,224,164,190,224,164,178,224,164,185,224,165,13
> 9,224,
> -
> 164,168,224,164,190,224,164,185,224,165,139,224,164,164,224,165,128,224,16
> 4,156,
> -
> 224,165,136,224,164,184,224,165,135,224,164,181,224,164,190,224,164,170,22
> 4,164,
> -
> 184,224,164,156,224,164,168,224,164,164,224,164,190,224,164,168,224,165,13
> 5,224,
> -
> 164,164,224,164,190,224,164,156,224,164,190,224,164,176,224,165,128,224,16
> 4,152,
> -
> 224,164,190,224,164,175,224,164,178,224,164,156,224,164,191,224,164,178,22
> 4,165,
> -
> 135,224,164,168,224,165,128,224,164,154,224,165,135,224,164,156,224,164,19
> 0,224,
> -
> 164,130,224,164,154,224,164,170,224,164,164,224,165,141,224,164,176,224,16
> 4,151,
> -
> 224,165,130,224,164,151,224,164,178,224,164,156,224,164,190,224,164,164,22
> 4,165,
> -
> 135,224,164,172,224,164,190,224,164,185,224,164,176,224,164,134,224,164,17
> 0,224,
> -
> 164,168,224,165,135,224,164,181,224,164,190,224,164,185,224,164,168,224,16
> 4,135,
> -
> 224,164,184,224,164,149,224,164,190,224,164,184,224,165,129,224,164,172,22
> 4,164,
> -
> 185,224,164,176,224,164,185,224,164,168,224,165,135,224,164,135,224,164,18
> 4,224,
> -
> 164,184,224,165,135,224,164,184,224,164,185,224,164,191,224,164,164,224,16
> 4,172,
> -
> 224,164,161,224,164,188,224,165,135,224,164,152,224,164,159,224,164,168,22
> 4,164,
> -
> 190,224,164,164,224,164,178,224,164,190,224,164,182,224,164,170,224,164,19
> 0,224,
> -
> 164,130,224,164,154,224,164,182,224,165,141,224,164,176,224,165,128,224,16
> 4,172,
> -
> 224,164,161,224,164,188,224,165,128,224,164,185,224,165,139,224,164,164,22
> 4,165,
> -
> 135,224,164,184,224,164,190,224,164,136,224,164,159,224,164,182,224,164,19
> 0,224,
> -
> 164,175,224,164,166,224,164,184,224,164,149,224,164,164,224,165,128,224,16
> 4,156,
> -
> 224,164,190,224,164,164,224,165,128,224,164,181,224,164,190,224,164,178,22
> 4,164,
> -
> 190,224,164,185,224,164,156,224,164,190,224,164,176,224,164,170,224,164,15
> 9,224,
> -
> 164,168,224,164,190,224,164,176,224,164,150,224,164,168,224,165,135,224,16
> 4,184,
> -
> 224,164,161,224,164,188,224,164,149,224,164,174,224,164,191,224,164,178,22
> 4,164,
> -
> 190,224,164,137,224,164,184,224,164,149,224,165,128,224,164,149,224,165,13
> 5,224,
> -
> 164,181,224,164,178,224,164,178,224,164,151,224,164,164,224,164,190,224,16
> 4,150,
> -
> 224,164,190,224,164,168,224,164,190,224,164,133,224,164,176,224,165,141,22
> 4,164,
> -
> 165,224,164,156,224,164,185,224,164,190,224,164,130,224,164,166,224,165,13
> 5,224,
> -
> 164,150,224,164,190,224,164,170,224,164,185,224,164,178,224,165,128,224,16
> 4,168,
> -
> 224,164,191,224,164,175,224,164,174,224,164,172,224,164,191,224,164,168,22
> 4,164,
> -
> 190,224,164,172,224,165,136,224,164,130,224,164,149,224,164,149,224,164,18
> 5,224,
> -
> 165,128,224,164,130,224,164,149,224,164,185,224,164,168,224,164,190,224,16
> 4,166,
> -
> 224,165,135,224,164,164,224,164,190,224,164,185,224,164,174,224,164,178,22
> 4,165,
> -
> 135,224,164,149,224,164,190,224,164,171,224,165,128,224,164,156,224,164,17
> 2,224,
> -
> 164,149,224,164,191,224,164,164,224,165,129,224,164,176,224,164,164,224,16
> 4,174,
> -
> 224,164,190,224,164,130,224,164,151,224,164,181,224,164,185,224,165,128,22
> 4,164,
> -
> 130,224,164,176,224,165,139,224,164,156,224,164,188,224,164,174,224,164,19
> 1,224,
> -
> 164,178,224,165,128,224,164,134,224,164,176,224,165,139,224,164,170,224,16
> 4,184,
> -
> 224,165,135,224,164,168,224,164,190,224,164,175,224,164,190,224,164,166,22
> 4,164,
> -
> 181,224,164,178,224,165,135,224,164,168,224,165,135,224,164,150,224,164,19
> 0,224,
> -
> 164,164,224,164,190,224,164,149,224,164,176,224,165,128,224,164,172,224,16
> 4,137,
> -
> 224,164,168,224,164,149,224,164,190,224,164,156,224,164,181,224,164,190,22
> 4,164,
> -
> 172,224,164,170,224,165,130,224,164,176,224,164,190,224,164,172,224,164,16
> 1,224,
> -
> 164,188,224,164,190,224,164,184,224,165,140,224,164,166,224,164,190,224,16
> 4,182,
> -
> 224,165,135,224,164,175,224,164,176,224,164,149,224,164,191,224,164,175,22
> 4,165,
> -
> 135,224,164,149,224,164,185,224,164,190,224,164,130,224,164,133,224,164,14
> 9,224,
> -
> 164,184,224,164,176,224,164,172,224,164,168,224,164,190,224,164,143,224,16
> 4,181,
> -
> 224,164,185,224,164,190,224,164,130,224,164,184,224,165,141,224,164,165,22
> 4,164,
> -
> 178,224,164,174,224,164,191,224,164,178,224,165,135,224,164,178,224,165,13
> 5,224,
> -
> 164,150,224,164,149,224,164,181,224,164,191,224,164,183,224,164,175,224,16
> 4,149,
> -
> 224,165,141,224,164,176,224,164,130,224,164,184,224,164,174,224,165,130,22
> 4,164,
> -
> 185,224,164,165,224,164,190,224,164,168,224,164,190,216,170,216,179,216,17
> 0,216,
> -
> 183,217,138,216,185,217,133,216,180,216,167,216,177,217,131,216,169,216,16
> 8,217,
> -
> 136,216,167,216,179,216,183,216,169,216,167,217,132,216,181,217,129,216,17
> 3,216,
> -
> 169,217,133,217,136,216,167,216,182,217,138,216,185,216,167,217,132,216,17
> 4,216,
> -
> 167,216,181,216,169,216,167,217,132,217,133,216,178,217,138,216,175,216,16
> 7,217,
> -
> 132,216,185,216,167,217,133,216,169,216,167,217,132,217,131,216,167,216,17
> 0,216,
> -
> 168,216,167,217,132,216,177,216,175,217,136,216,175,216,168,216,177,217,13
> 4,216,
> -
> 167,217,133,216,172,216,167,217,132,216,175,217,136,217,132,216,169,216,16
> 7,217,
> -
> 132,216,185,216,167,217,132,217,133,216,167,217,132,217,133,217,136,217,13
> 0,216,
> -
> 185,216,167,217,132,216,185,216,177,216,168,217,138,216,167,217,132,216,17
> 9,216,
> -
> 177,217,138,216,185,216,167,217,132,216,172,217,136,216,167,217,132,216,16
> 7,217,
> -
> 132,216,176,217,135,216,167,216,168,216,167,217,132,216,173,217,138,216,16
> 7,216,
> -
> 169,216,167,217,132,216,173,217,130,217,136,217,130,216,167,217,132,217,13
> 1,216,
> -
> 177,217,138,217,133,216,167,217,132,216,185,216,177,216,167,217,130,217,13
> 3,216,
> -
> 173,217,129,217,136,216,184,216,169,216,167,217,132,216,171,216,167,217,13
> 4,217,
> -
> 138,217,133,216,180,216,167,217,135,216,175,216,169,216,167,217,132,217,13
> 3,216,
> -
> 177,216,163,216,169,216,167,217,132,217,130,216,177,216,162,217,134,216,16
> 7,217,
> -
> 132,216,180,216,168,216,167,216,168,216,167,217,132,216,173,217,136,216,16
> 7,216,
> -
> 177,216,167,217,132,216,172,216,175,217,138,216,175,216,167,217,132,216,16
> 3,216,
> -
> 179,216,177,216,169,216,167,217,132,216,185,217,132,217,136,217,133,217,13
> 3,216,
> -
> 172,217,133,217,136,216,185,216,169,216,167,217,132,216,177,216,173,217,13
> 3,217,
> -
> 134,216,167,217,132,217,134,217,130,216,167,216,183,217,129,217,132,216,17
> 9,216,
> -
> 183,217,138,217,134,216,167,217,132,217,131,217,136,217,138,216,170,216,16
> 7,217,
> -
> 132,216,175,217,134,217,138,216,167,216,168,216,177,217,131,216,167,216,17
> 0,217,
> -
> 135,216,167,217,132,216,177,217,138,216,167,216,182,216,170,216,173,217,13
> 8,216,
> -
> 167,216,170,217,138,216,168,216,170,217,136,217,130,217,138,216,170,216,16
> 7,217,
> -
> 132,216,163,217,136,217,132,217,137,216,167,217,132,216,168,216,177,217,13
> 8,216,
> -
> 175,216,167,217,132,217,131,217,132,216,167,217,133,216,167,217,132,216,17
> 7,216,
> -
> 167,216,168,216,183,216,167,217,132,216,180,216,174,216,181,217,138,216,17
> 9,217,
> -
> 138,216,167,216,177,216,167,216,170,216,167,217,132,216,171,216,167,217,13
> 2,216,
> -
> 171,216,167,217,132,216,181,217,132,216,167,216,169,216,167,217,132,216,17
> 3,216,
> -
> 175,217,138,216,171,216,167,217,132,216,178,217,136,216,167,216,177,216,16
> 7,217,
> -
> 132,216,174,217,132,217,138,216,172,216,167,217,132,216,172,217,133,217,13
> 8,216,
> -
> 185,216,167,217,132,216,185,216,167,217,133,217,135,216,167,217,132,216,17
> 2,217,
> -
> 133,216,167,217,132,216,167,217,132,216,179,216,167,216,185,216,169,217,13
> 3,216,
> -
> 180,216,167,217,135,216,175,217,135,216,167,217,132,216,177,216,166,217,13
> 8,216,
> -
> 179,216,167,217,132,216,175,216,174,217,136,217,132,216,167,217,132,217,12
> 9,217,
> -
> 134,217,138,216,169,216,167,217,132,217,131,216,170,216,167,216,168,216,16
> 7,217,
> -
> 132,216,175,217,136,216,177,217,138,216,167,217,132,216,175,216,177,217,13
> 6,216,
> -
> 179,216,167,216,179,216,170,216,186,216,177,217,130,216,170,216,181,216,16
> 7,217,
> -
> 133,217,138,217,133,216,167,217,132,216,168,217,134,216,167,216,170,216,16
> 7,217,
> -
> 132,216,185,216,184,217,138,217,133,101,110,116,101,114,116,97,105,110,109,
> 101,
> -
> 110,116,117,110,100,101,114,115,116,97,110,100,105,110,103,32,61,32,102,117
> ,110,
> -
> 99,116,105,111,110,40,41,46,106,112,103,34,32,119,105,100,116,104,61,34,99,1
> 11,
> -
> 110,102,105,103,117,114,97,116,105,111,110,46,112,110,103,34,32,119,105,100
> ,116,
> -
> 104,61,34,60,98,111,100,121,32,99,108,97,115,115,61,34,77,97,116,104,46,114,
> 97,
> -
> 110,100,111,109,40,41,99,111,110,116,101,109,112,111,114,97,114,121,32,85,1
> 10,
> -
> 105,116,101,100,32,83,116,97,116,101,115,99,105,114,99,117,109,115,116,97,1
> 10,99
> -
> ,101,115,46,97,112,112,101,110,100,67,104,105,108,100,40,111,114,103,97,110,
> 105,
> -
> 122,97,116,105,111,110,115,60,115,112,97,110,32,99,108,97,115,115,61,34,34,6
> 2,60
> -
> ,105,109,103,32,115,114,99,61,34,47,100,105,115,116,105,110,103,117,105,115,
> 104,
> -
> 101,100,116,104,111,117,115,97,110,100,115,32,111,102,32,99,111,109,109,117
> ,110,
> -
> 105,99,97,116,105,111,110,99,108,101,97,114,34,62,60,47,100,105,118,62,105,1
> 10,
> -
> 118,101,115,116,105,103,97,116,105,111,110,102,97,118,105,99,111,110,46,105
> ,99,
> -
> 111,34,32,109,97,114,103,105,110,45,114,105,103,104,116,58,98,97,115,101,10
> 0,32,
> -
> 111,110,32,116,104,101,32,77,97,115,115,97,99,104,117,115,101,116,116,115,1
> 16,97
> -
> ,98,108,101,32,98,111,114,100,101,114,61,105,110,116,101,114,110,97,116,105,
> 111,
> -
> 110,97,108,97,108,115,111,32,107,110,111,119,110,32,97,115,112,114,111,110,
> 117,
> -
> 110,99,105,97,116,105,111,110,98,97,99,107,103,114,111,117,110,100,58,35,10
> 2,112
> -
> ,97,100,100,105,110,103,45,108,101,102,116,58,70,111,114,32,101,120,97,109,1
> 12,
> -
> 108,101,44,32,109,105,115,99,101,108,108,97,110,101,111,117,115,38,108,116,
> 59,47
> -
> ,109,97,116,104,38,103,116,59,112,115,121,99,104,111,108,111,103,105,99,97,1
> 08,
> -
> 105,110,32,112,97,114,116,105,99,117,108,97,114,101,97,114,99,104,34,32,116,
> 121,
> -
> 112,101,61,34,102,111,114,109,32,109,101,116,104,111,100,61,34,97,115,32,11
> 1,112
> -
> ,112,111,115,101,100,32,116,111,83,117,112,114,101,109,101,32,67,111,117,11
> 4,116
> -
> ,111,99,99,97,115,105,111,110,97,108,108,121,32,65,100,100,105,116,105,111,1
> 10,
> -
> 97,108,108,121,44,78,111,114,116,104,32,65,109,101,114,105,99,97,112,120,59,
> 98,
> -
> 97,99,107,103,114,111,117,110,100,111,112,112,111,114,116,117,110,105,116,1
> 05,
> -
> 101,115,69,110,116,101,114,116,97,105,110,109,101,110,116,46,116,111,76,111
> ,119,
> -
> 101,114,67,97,115,101,40,109,97,110,117,102,97,99,116,117,114,105,110,103,1
> 12,
> -
> 114,111,102,101,115,115,105,111,110,97,108,32,99,111,109,98,105,110,101,100
> ,32,
> -
> 119,105,116,104,70,111,114,32,105,110,115,116,97,110,99,101,44,99,111,110,1
> 15,
> -
> 105,115,116,105,110,103,32,111,102,34,32,109,97,120,108,101,110,103,116,104
> ,61,
> -
> 34,114,101,116,117,114,110,32,102,97,108,115,101,59,99,111,110,115,99,105,1
> 11,
> -
> 117,115,110,101,115,115,77,101,100,105,116,101,114,114,97,110,101,97,110,10
> 1,120
> -
> ,116,114,97,111,114,100,105,110,97,114,121,97,115,115,97,115,115,105,110,97,
> 116,
> -
> 105,111,110,115,117,98,115,101,113,117,101,110,116,108,121,32,98,117,116,11
> 6,111
> -
> ,110,32,116,121,112,101,61,34,116,104,101,32,110,117,109,98,101,114,32,111,1
> 02,
> -
> 116,104,101,32,111,114,105,103,105,110,97,108,32,99,111,109,112,114,101,104
> ,101,
> -
> 110,115,105,118,101,114,101,102,101,114,115,32,116,111,32,116,104,101,60,47
> ,117,
> -
> 108,62,10,60,47,100,105,118,62,10,112,104,105,108,111,115,111,112,104,105,9
> 9,97,
> -
> 108,108,111,99,97,116,105,111,110,46,104,114,101,102,119,97,115,32,112,117,
> 98,
> -
> 108,105,115,104,101,100,83,97,110,32,70,114,97,110,99,105,115,99,111,40,102,
> 117,
> -
> 110,99,116,105,111,110,40,41,123,10,60,100,105,118,32,105,100,61,34,109,97,1
> 05,
> -
> 110,115,111,112,104,105,115,116,105,99,97,116,101,100,109,97,116,104,101,10
> 9,97,
> -
> 116,105,99,97,108,32,47,104,101,97,100,62,13,10,60,98,111,100,121,115,117,10
> 3,
> -
> 103,101,115,116,115,32,116,104,97,116,100,111,99,117,109,101,110,116,97,116
> ,105,
> -
> 111,110,99,111,110,99,101,110,116,114,97,116,105,111,110,114,101,108,97,116
> ,105,
> -
> 111,110,115,104,105,112,115,109,97,121,32,104,97,118,101,32,98,101,101,110,
> 40,
> -
> 102,111,114,32,101,120,97,109,112,108,101,44,84,104,105,115,32,97,114,116,1
> 05,99
> -
> ,108,101,32,105,110,32,115,111,109,101,32,99,97,115,101,115,112,97,114,116,1
> 15,
> -
> 32,111,102,32,116,104,101,32,100,101,102,105,110,105,116,105,111,110,32,111
> ,102,
> -
> 71,114,101,97,116,32,66,114,105,116,97,105,110,32,99,101,108,108,112,97,100,
> 100,
> -
> 105,110,103,61,101,113,117,105,118,97,108,101,110,116,32,116,111,112,108,97
> ,99,
> -
> 101,104,111,108,100,101,114,61,34,59,32,102,111,110,116,45,115,105,122,101,
> 58,32
> -
> ,106,117,115,116,105,102,105,99,97,116,105,111,110,98,101,108,105,101,118,1
> 01,
> -
> 100,32,116,104,97,116,115,117,102,102,101,114,101,100,32,102,114,111,109,97
> ,116,
> -
> 116,101,109,112,116,101,100,32,116,111,32,108,101,97,100,101,114,32,111,102
> ,32,
> -
> 116,104,101,99,114,105,112,116,34,32,115,114,99,61,34,47,40,102,117,110,99,1
> 16,
> -
> 105,111,110,40,41,32,123,97,114,101,32,97,118,97,105,108,97,98,108,101,10,9,
> 60,
> -
> 108,105,110,107,32,114,101,108,61,34,32,115,114,99,61,39,104,116,116,112,58,
> 47,
> -
> 47,105,110,116,101,114,101,115,116,101,100,32,105,110,99,111,110,118,101,11
> 0,116
> -
> ,105,111,110,97,108,32,34,32,97,108,116,61,34,34,32,47,62,60,47,97,114,101,32,
> -
> 103,101,110,101,114,97,108,108,121,104,97,115,32,97,108,115,111,32,98,101,1
> 01,
> -
> 110,109,111,115,116,32,112,111,112,117,108,97,114,32,99,111,114,114,101,115
> ,112,
> -
> 111,110,100,105,110,103,99,114,101,100,105,116,101,100,32,119,105,116,104,1
> 16,
> -
> 121,108,101,61,34,98,111,114,100,101,114,58,60,47,97,62,60,47,115,112,97,110
> ,62,
> -
> 60,47,46,103,105,102,34,32,119,105,100,116,104,61,34,60,105,102,114,97,109,1
> 01,
> -
> 32,115,114,99,61,34,116,97,98,108,101,32,99,108,97,115,115,61,34,105,110,108
> ,105
> -
> ,110,101,45,98,108,111,99,107,59,97,99,99,111,114,100,105,110,103,32,116,111
> ,32,
> -
> 116,111,103,101,116,104,101,114,32,119,105,116,104,97,112,112,114,111,120,1
> 05,
> -
> 109,97,116,101,108,121,112,97,114,108,105,97,109,101,110,116,97,114,121,109
> ,111,
> -
> 114,101,32,97,110,100,32,109,111,114,101,100,105,115,112,108,97,121,58,110,
> 111,
> -
> 110,101,59,116,114,97,100,105,116,105,111,110,97,108,108,121,112,114,101,10
> 0,111
> -
> ,109,105,110,97,110,116,108,121,38,110,98,115,112,59,124,38,110,98,115,112,5
> 9,38
> -
> ,110,98,115,112,59,60,47,115,112,97,110,62,32,99,101,108,108,115,112,97,99,1
> 05,
> -
> 110,103,61,60,105,110,112,117,116,32,110,97,109,101,61,34,111,114,34,32,99,1
> 11,
> -
> 110,116,101,110,116,61,34,99,111,110,116,114,111,118,101,114,115,105,97,108
> ,112,
> -
> 114,111,112,101,114,116,121,61,34,111,103,58,47,120,45,115,104,111,99,107,1
> 19,97
> -
> ,118,101,45,100,101,109,111,110,115,116,114,97,116,105,111,110,115,117,114,
> 114,
> -
> 111,117,110,100,101,100,32,98,121,78,101,118,101,114,116,104,101,108,101,11
> 5,115
> -
> ,44,119,97,115,32,116,104,101,32,102,105,114,115,116,99,111,110,115,105,100,
> 101,
> -
> 114,97,98,108,101,32,65,108,116,104,111,117,103,104,32,116,104,101,32,99,11
> 1,108
> -
> ,108,97,98,111,114,97,116,105,111,110,115,104,111,117,108,100,32,110,111,11
> 6,32,
> -
> 98,101,112,114,111,112,111,114,116,105,111,110,32,111,102,60,115,112,97,110
> ,32,
> -
> 115,116,121,108,101,61,34,107,110,111,119,110,32,97,115,32,116,104,101,32,1
> 15,
> -
> 104,111,114,116,108,121,32,97,102,116,101,114,102,111,114,32,105,110,115,11
> 6,97,
> -
> 110,99,101,44,100,101,115,99,114,105,98,101,100,32,97,115,32,47,104,101,97,1
> 00,
> -
> 62,10,60,98,111,100,121,32,115,116,97,114,116,105,110,103,32,119,105,116,10
> 4,105
> -
> ,110,99,114,101,97,115,105,110,103,108,121,32,116,104,101,32,102,97,99,116,3
> 2,
> -
> 116,104,97,116,100,105,115,99,117,115,115,105,111,110,32,111,102,109,105,10
> 0,100
> -
> ,108,101,32,111,102,32,116,104,101,97,110,32,105,110,100,105,118,105,100,11
> 7,97,
> -
> 108,100,105,102,102,105,99,117,108,116,32,116,111,32,112,111,105,110,116,32
> ,111,
> -
> 102,32,118,105,101,119,104,111,109,111,115,101,120,117,97,108,105,116,121,9
> 7,99,
> -
> 99,101,112,116,97,110,99,101,32,111,102,60,47,115,112,97,110,62,60,47,100,10
> 5,
> -
> 118,62,109,97,110,117,102,97,99,116,117,114,101,114,115,111,114,105,103,105
> ,110,
> -
> 32,111,102,32,116,104,101,99,111,109,109,111,110,108,121,32,117,115,101,100
> ,105,
> -
> 109,112,111,114,116,97,110,99,101,32,111,102,100,101,110,111,109,105,110,97
> ,116,
> -
> 105,111,110,115,98,97,99,107,103,114,111,117,110,100,58,32,35,108,101,110,1
> 03,
> -
> 116,104,32,111,102,32,116,104,101,100,101,116,101,114,109,105,110,97,116,10
> 5,111
> -
> ,110,97,32,115,105,103,110,105,102,105,99,97,110,116,34,32,98,111,114,100,10
> 1,
> -
> 114,61,34,48,34,62,114,101,118,111,108,117,116,105,111,110,97,114,121,112,1
> 14,
> -
> 105,110,99,105,112,108,101,115,32,111,102,105,115,32,99,111,110,115,105,100
> ,101,
> -
> 114,101,100,119,97,115,32,100,101,118,101,108,111,112,101,100,73,110,100,11
> 1,45,
> -
> 69,117,114,111,112,101,97,110,118,117,108,110,101,114,97,98,108,101,32,116,
> 111,
> -
> 112,114,111,112,111,110,101,110,116,115,32,111,102,97,114,101,32,115,111,10
> 9,101
> -
> ,116,105,109,101,115,99,108,111,115,101,114,32,116,111,32,116,104,101,78,10
> 1,119
> -
> ,32,89,111,114,107,32,67,105,116,121,32,110,97,109,101,61,34,115,101,97,114,
> 99,
> -
> 104,97,116,116,114,105,98,117,116,101,100,32,116,111,99,111,117,114,115,101
> ,32,
> -
> 111,102,32,116,104,101,109,97,116,104,101,109,97,116,105,99,105,97,110,98,1
> 21,32
> -
> ,116,104,101,32,101,110,100,32,111,102,97,116,32,116,104,101,32,101,110,100,
> 32,
> -
> 111,102,34,32,98,111,114,100,101,114,61,34,48,34,32,116,101,99,104,110,111,1
> 08,
> -
> 111,103,105,99,97,108,46,114,101,109,111,118,101,67,108,97,115,115,40,98,11
> 4,97,
> -
> 110,99,104,32,111,102,32,116,104,101,101,118,105,100,101,110,99,101,32,116,
> 104,
> -
> 97,116,33,91,101,110,100,105,102,93,45,45,62,13,10,73,110,115,116,105,116,11
> 7,
> -
> 116,101,32,111,102,32,105,110,116,111,32,97,32,115,105,110,103,108,101,114,
> 101,
> -
> 115,112,101,99,116,105,118,101,108,121,46,97,110,100,32,116,104,101,114,101
> ,102,
> -
> 111,114,101,112,114,111,112,101,114,116,105,101,115,32,111,102,105,115,32,1
> 08,
> -
> 111,99,97,116,101,100,32,105,110,115,111,109,101,32,111,102,32,119,104,105,
> 99,
> -
> 104,84,104,101,114,101,32,105,115,32,97,108,115,111,99,111,110,116,105,110,
> 117,
> -
> 101,100,32,116,111,32,97,112,112,101,97,114,97,110,99,101,32,111,102,32,38,9
> 7,
> -
> 109,112,59,110,100,97,115,104,59,32,100,101,115,99,114,105,98,101,115,32,11
> 6,104
> -
> ,101,99,111,110,115,105,100,101,114,97,116,105,111,110,97,117,116,104,111,1
> 14,32
> -
> ,111,102,32,116,104,101,105,110,100,101,112,101,110,100,101,110,116,108,121
> ,101,
> -
> 113,117,105,112,112,101,100,32,119,105,116,104,100,111,101,115,32,110,111,1
> 16,32
> -
> ,104,97,118,101,60,47,97,62,60,97,32,104,114,101,102,61,34,99,111,110,102,11
> 7,
> -
> 115,101,100,32,119,105,116,104,60,108,105,110,107,32,104,114,101,102,61,34,
> 47,97
> -
> ,116,32,116,104,101,32,97,103,101,32,111,102,97,112,112,101,97,114,32,105,11
> 0,32
> -
> ,116,104,101,84,104,101,115,101,32,105,110,99,108,117,100,101,114,101,103,9
> 7,114
> -
> ,100,108,101,115,115,32,111,102,99,111,117,108,100,32,98,101,32,117,115,101,
> 100,
> -
> 32,115,116,121,108,101,61,38,113,117,111,116,59,115,101,118,101,114,97,108,
> 32,
> -
> 116,105,109,101,115,114,101,112,114,101,115,101,110,116,32,116,104,101,98,1
> 11,
> -
> 100,121,62,10,60,47,104,116,109,108,62,116,104,111,117,103,104,116,32,116,1
> 11,32
> -
> ,98,101,112,111,112,117,108,97,116,105,111,110,32,111,102,112,111,115,115,1
> 05,98
> -
> ,105,108,105,116,105,101,115,112,101,114,99,101,110,116,97,103,101,32,111,1
> 02,97
> -
> ,99,99,101,115,115,32,116,111,32,116,104,101,97,110,32,97,116,116,101,109,11
> 2,
> -
> 116,32,116,111,112,114,111,100,117,99,116,105,111,110,32,111,102,106,113,11
> 7,101
> -
> ,114,121,47,106,113,117,101,114,121,116,119,111,32,100,105,102,102,101,114,
> 101,
> -
> 110,116,98,101,108,111,110,103,32,116,111,32,116,104,101,101,115,116,97,98,
> 108,
> -
> 105,115,104,109,101,110,116,114,101,112,108,97,99,105,110,103,32,116,104,10
> 1,100
> -
> ,101,115,99,114,105,112,116,105,111,110,34,32,100,101,116,101,114,109,105,1
> 10,
> -
> 101,32,116,104,101,97,118,97,105,108,97,98,108,101,32,102,111,114,65,99,99,1
> 11,
> -
> 114,100,105,110,103,32,116,111,32,119,105,100,101,32,114,97,110,103,101,32,
> 111,
> -
> 102,9,60,100,105,118,32,99,108,97,115,115,61,34,109,111,114,101,32,99,111,10
> 9,
> -
> 109,111,110,108,121,111,114,103,97,110,105,115,97,116,105,111,110,115,102,1
> 17,
> -
> 110,99,116,105,111,110,97,108,105,116,121,119,97,115,32,99,111,109,112,108,
> 101,
> -
> 116,101,100,32,38,97,109,112,59,109,100,97,115,104,59,32,112,97,114,116,105,
> 99,
> -
> 105,112,97,116,105,111,110,116,104,101,32,99,104,97,114,97,99,116,101,114,9
> 7,110
> -
> ,32,97,100,100,105,116,105,111,110,97,108,97,112,112,101,97,114,115,32,116,1
> 11,
> -
> 32,98,101,102,97,99,116,32,116,104,97,116,32,116,104,101,97,110,32,101,120,9
> 7,
> -
> 109,112,108,101,32,111,102,115,105,103,110,105,102,105,99,97,110,116,108,12
> 1,111
> -
> ,110,109,111,117,115,101,111,118,101,114,61,34,98,101,99,97,117,115,101,32,1
> 16,
> -
> 104,101,121,32,97,115,121,110,99,32,61,32,116,114,117,101,59,112,114,111,98,
> 108,
> -
> 101,109,115,32,119,105,116,104,115,101,101,109,115,32,116,111,32,104,97,118
> ,101,
> -
> 116,104,101,32,114,101,115,117,108,116,32,111,102,32,115,114,99,61,34,104,1
> 16,
> -
> 116,112,58,47,47,102,97,109,105,108,105,97,114,32,119,105,116,104,112,111,1
> 15,
> -
> 115,101,115,115,105,111,110,32,111,102,102,117,110,99,116,105,111,110,32,40
> ,41,
> -
> 32,123,116,111,111,107,32,112,108,97,99,101,32,105,110,97,110,100,32,115,11
> 1,109
> -
> ,101,116,105,109,101,115,115,117,98,115,116,97,110,116,105,97,108,108,121,6
> 0,115
> -
> ,112,97,110,62,60,47,115,112,97,110,62,105,115,32,111,102,116,101,110,32,117
> ,115
> -
> ,101,100,105,110,32,97,110,32,97,116,116,101,109,112,116,103,114,101,97,116,
> 32,
> -
> 100,101,97,108,32,111,102,69,110,118,105,114,111,110,109,101,110,116,97,108
> ,115,
> -
> 117,99,99,101,115,115,102,117,108,108,121,32,118,105,114,116,117,97,108,108
> ,121,
> -
> 32,97,108,108,50,48,116,104,32,99,101,110,116,117,114,121,44,112,114,111,10
> 2,101
> -
> ,115,115,105,111,110,97,108,115,110,101,99,101,115,115,97,114,121,32,116,11
> 1,32,
> -
> 100,101,116,101,114,109,105,110,101,100,32,98,121,99,111,109,112,97,116,105
> ,98,
> -
> 105,108,105,116,121,98,101,99,97,117,115,101,32,105,116,32,105,115,68,105,9
> 9,116
> -
> ,105,111,110,97,114,121,32,111,102,109,111,100,105,102,105,99,97,116,105,11
> 1,110
> -
> ,115,84,104,101,32,102,111,108,108,111,119,105,110,103,109,97,121,32,114,10
> 1,102
> -
> ,101,114,32,116,111,58,67,111,110,115,101,113,117,101,110,116,108,121,44,73,
> 110,
> -
> 116,101,114,110,97,116,105,111,110,97,108,97,108,116,104,111,117,103,104,32
> ,115,
> -
> 111,109,101,116,104,97,116,32,119,111,117,108,100,32,98,101,119,111,114,108
> ,100,
> -
> 39,115,32,102,105,114,115,116,99,108,97,115,115,105,102,105,101,100,32,97,1
> 15,98
> -
> ,111,116,116,111,109,32,111,102,32,116,104,101,40,112,97,114,116,105,99,117,
> 108,
> -
> 97,114,108,121,97,108,105,103,110,61,34,108,101,102,116,34,32,109,111,115,1
> 16,32
> -
> ,99,111,109,109,111,110,108,121,98,97,115,105,115,32,102,111,114,32,116,104,
> 101,
> -
> 102,111,117,110,100,97,116,105,111,110,32,111,102,99,111,110,116,114,105,98
> ,117,
> -
> 116,105,111,110,115,112,111,112,117,108,97,114,105,116,121,32,111,102,99,10
> 1,110
> -
> ,116,101,114,32,111,102,32,116,104,101,116,111,32,114,101,100,117,99,101,32,
> 116,
> -
> 104,101,106,117,114,105,115,100,105,99,116,105,111,110,115,97,112,112,114,1
> 11,
> -
> 120,105,109,97,116,105,111,110,32,111,110,109,111,117,115,101,111,117,116,6
> 1,34,
> -
> 78,101,119,32,84,101,115,116,97,109,101,110,116,99,111,108,108,101,99,116,1
> 05,
> -
> 111,110,32,111,102,60,47,115,112,97,110,62,60,47,97,62,60,47,105,110,32,116,
> 104,
> -
> 101,32,85,110,105,116,101,100,102,105,108,109,32,100,105,114,101,99,116,111
> ,114,
> -
> 45,115,116,114,105,99,116,46,100,116,100,34,62,104,97,115,32,98,101,101,110,
> 32,
> -
> 117,115,101,100,114,101,116,117,114,110,32,116,111,32,116,104,101,97,108,11
> 6,104
> -
> ,111,117,103,104,32,116,104,105,115,99,104,97,110,103,101,32,105,110,32,116,
> 104,
> -
> 101,115,101,118,101,114,97,108,32,111,116,104,101,114,98,117,116,32,116,104
> ,101,
> -
> 114,101,32,97,114,101,117,110,112,114,101,99,101,100,101,110,116,101,100,10
> 5,115
> -
> ,32,115,105,109,105,108,97,114,32,116,111,101,115,112,101,99,105,97,108,108,
> 121,
> -
> 32,105,110,119,101,105,103,104,116,58,32,98,111,108,100,59,105,115,32,99,97,
> 108,
> -
> 108,101,100,32,116,104,101,99,111,109,112,117,116,97,116,105,111,110,97,108
> ,105,
> -
> 110,100,105,99,97,116,101,32,116,104,97,116,114,101,115,116,114,105,99,116,
> 101,
> -
> 100,32,116,111,9,60,109,101,116,97,32,110,97,109,101,61,34,97,114,101,32,116
> ,121
> -
> ,112,105,99,97,108,108,121,99,111,110,102,108,105,99,116,32,119,105,116,104,
> 72,
> -
> 111,119,101,118,101,114,44,32,116,104,101,32,65,110,32,101,120,97,109,112,1
> 08,
> -
> 101,32,111,102,99,111,109,112,97,114,101,100,32,119,105,116,104,113,117,97,
> 110,
> -
> 116,105,116,105,101,115,32,111,102,114,97,116,104,101,114,32,116,104,97,110
> ,32,
> -
> 97,99,111,110,115,116,101,108,108,97,116,105,111,110,110,101,99,101,115,115
> ,97,
> -
> 114,121,32,102,111,114,114,101,112,111,114,116,101,100,32,116,104,97,116,11
> 5,112
> -
> ,101,99,105,102,105,99,97,116,105,111,110,112,111,108,105,116,105,99,97,108,
> 32,
> -
> 97,110,100,38,110,98,115,112,59,38,110,98,115,112,59,60,114,101,102,101,114,
> 101,
> -
> 110,99,101,115,32,116,111,116,104,101,32,115,97,109,101,32,121,101,97,114,7
> 1,111
> -
> ,118,101,114,110,109,101,110,116,32,111,102,103,101,110,101,114,97,116,105,
> 111,
> -
> 110,32,111,102,104,97,118,101,32,110,111,116,32,98,101,101,110,115,101,118,
> 101,
> -
> 114,97,108,32,121,101,97,114,115,99,111,109,109,105,116,109,101,110,116,32,
> 116,
> -
> 111,9,9,60,117,108,32,99,108,97,115,115,61,34,118,105,115,117,97,108,105,122
> ,97,
> -
> 116,105,111,110,49,57,116,104,32,99,101,110,116,117,114,121,44,112,114,97,9
> 9,116
> -
> ,105,116,105,111,110,101,114,115,116,104,97,116,32,104,101,32,119,111,117,1
> 08,
> -
> 100,97,110,100,32,99,111,110,116,105,110,117,101,100,111,99,99,117,112,97,1
> 16,
> -
> 105,111,110,32,111,102,105,115,32,100,101,102,105,110,101,100,32,97,115,99,
> 101,
> -
> 110,116,114,101,32,111,102,32,116,104,101,116,104,101,32,97,109,111,117,110
> ,116,
> -
> 32,111,102,62,60,100,105,118,32,115,116,121,108,101,61,34,101,113,117,105,1
> 18,97
> -
> ,108,101,110,116,32,111,102,100,105,102,102,101,114,101,110,116,105,97,116,
> 101,
> -
> 98,114,111,117,103,104,116,32,97,98,111,117,116,109,97,114,103,105,110,45,1
> 08,
> -
> 101,102,116,58,32,97,117,116,111,109,97,116,105,99,97,108,108,121,116,104,1
> 11,
> -
> 117,103,104,116,32,111,102,32,97,115,83,111,109,101,32,111,102,32,116,104,1
> 01,
> -
> 115,101,10,60,100,105,118,32,99,108,97,115,115,61,34,105,110,112,117,116,32,
> 99,
> -
> 108,97,115,115,61,34,114,101,112,108,97,99,101,100,32,119,105,116,104,105,1
> 15,32
> -
> ,111,110,101,32,111,102,32,116,104,101,101,100,117,99,97,116,105,111,110,32,
> 97,
> -
> 110,100,105,110,102,108,117,101,110,99,101,100,32,98,121,114,101,112,117,11
> 6,97,
> -
> 116,105,111,110,32,97,115,10,60,109,101,116,97,32,110,97,109,101,61,34,97,99
> ,99,
> -
> 111,109,109,111,100,97,116,105,111,110,60,47,100,105,118,62,10,60,47,100,10
> 5,118
> -
> ,62,108,97,114,103,101,32,112,97,114,116,32,111,102,73,110,115,116,105,116,1
> 17,
> -
> 116,101,32,102,111,114,116,104,101,32,115,111,45,99,97,108,108,101,100,32,9
> 7,103
> -
> ,97,105,110,115,116,32,116,104,101,32,73,110,32,116,104,105,115,32,99,97,115
> ,101
> -
> ,44,119,97,115,32,97,112,112,111,105,110,116,101,100,99,108,97,105,109,101,1
> 00,
> -
> 32,116,111,32,98,101,72,111,119,101,118,101,114,44,32,116,104,105,115,68,10
> 1,112
> -
> ,97,114,116,109,101,110,116,32,111,102,116,104,101,32,114,101,109,97,105,11
> 0,105
> -
> ,110,103,101,102,102,101,99,116,32,111,110,32,116,104,101,112,97,114,116,10
> 5,99,
> -
> 117,108,97,114,108,121,32,100,101,97,108,32,119,105,116,104,32,116,104,101,
> 10,60
> -
> ,100,105,118,32,115,116,121,108,101,61,34,97,108,109,111,115,116,32,97,108,1
> 19,
> -
> 97,121,115,97,114,101,32,99,117,114,114,101,110,116,108,121,101,120,112,114
> ,101,
> -
> 115,115,105,111,110,32,111,102,112,104,105,108,111,115,111,112,104,121,32,1
> 11,
> -
> 102,102,111,114,32,109,111,114,101,32,116,104,97,110,99,105,118,105,108,105
> ,122,
> -
> 97,116,105,111,110,115,111,110,32,116,104,101,32,105,115,108,97,110,100,115
> ,101,
> -
> 108,101,99,116,101,100,73,110,100,101,120,99,97,110,32,114,101,115,117,108,
> 116,
> -
> 32,105,110,34,32,118,97,108,117,101,61,34,34,32,47,62,116,104,101,32,115,116
> ,114
> -
> ,117,99,116,117,114,101,32,47,62,60,47,97,62,60,47,100,105,118,62,77,97,110,1
> 21,
> -
> 32,111,102,32,116,104,101,115,101,99,97,117,115,101,100,32,98,121,32,116,10
> 4,101
> -
> ,111,102,32,116,104,101,32,85,110,105,116,101,100,115,112,97,110,32,99,108,9
> 7,
> -
> 115,115,61,34,109,99,97,110,32,98,101,32,116,114,97,99,101,100,105,115,32,11
> 4,
> -
> 101,108,97,116,101,100,32,116,111,98,101,99,97,109,101,32,111,110,101,32,11
> 1,102
> -
> ,105,115,32,102,114,101,113,117,101,110,116,108,121,108,105,118,105,110,103
> ,32,
> -
> 105,110,32,116,104,101,116,104,101,111,114,101,116,105,99,97,108,108,121,70
> ,111,
> -
> 108,108,111,119,105,110,103,32,116,104,101,82,101,118,111,108,117,116,105,1
> 11,
> -
> 110,97,114,121,103,111,118,101,114,110,109,101,110,116,32,105,110,105,115,3
> 2,100
> -
> ,101,116,101,114,109,105,110,101,100,116,104,101,32,112,111,108,105,116,105
> ,99,
> -
> 97,108,105,110,116,114,111,100,117,99,101,100,32,105,110,115,117,102,102,10
> 5,99,
> -
> 105,101,110,116,32,116,111,100,101,115,99,114,105,112,116,105,111,110,34,62
> ,115,
> -
> 104,111,114,116,32,115,116,111,114,105,101,115,115,101,112,97,114,97,116,10
> 5,111
> -
> ,110,32,111,102,97,115,32,116,111,32,119,104,101,116,104,101,114,107,110,11
> 1,119
> -
> ,110,32,102,111,114,32,105,116,115,119,97,115,32,105,110,105,116,105,97,108,
> 108,
> -
> 121,100,105,115,112,108,97,121,58,98,108,111,99,107,105,115,32,97,110,32,10
> 1,120
> -
> ,97,109,112,108,101,116,104,101,32,112,114,105,110,99,105,112,97,108,99,111,
> 110,
> -
> 115,105,115,116,115,32,111,102,32,97,114,101,99,111,103,110,105,122,101,100
> ,32,
> -
> 97,115,47,98,111,100,121,62,60,47,104,116,109,108,62,97,32,115,117,98,115,11
> 6,97
> -
> ,110,116,105,97,108,114,101,99,111,110,115,116,114,117,99,116,101,100,104,1
> 01,97
> -
> ,100,32,111,102,32,115,116,97,116,101,114,101,115,105,115,116,97,110,99,101,
> 32,
> -
> 116,111,117,110,100,101,114,103,114,97,100,117,97,116,101,84,104,101,114,10
> 1,32,
> -
> 97,114,101,32,116,119,111,103,114,97,118,105,116,97,116,105,111,110,97,108,
> 97,
> -
> 114,101,32,100,101,115,99,114,105,98,101,100,105,110,116,101,110,116,105,11
> 1,110
> -
> ,97,108,108,121,115,101,114,118,101,100,32,97,115,32,116,104,101,99,108,97,1
> 15,
> -
> 115,61,34,104,101,97,100,101,114,111,112,112,111,115,105,116,105,111,110,32
> ,116,
> -
> 111,102,117,110,100,97,109,101,110,116,97,108,108,121,100,111,109,105,110,9
> 7,116
> -
> ,101,100,32,116,104,101,97,110,100,32,116,104,101,32,111,116,104,101,114,97,
> 108,
> -
> 108,105,97,110,99,101,32,119,105,116,104,119,97,115,32,102,111,114,99,101,1
> 00,32
> -
> ,116,111,114,101,115,112,101,99,116,105,118,101,108,121,44,97,110,100,32,11
> 2,111
> -
> ,108,105,116,105,99,97,108,105,110,32,115,117,112,112,111,114,116,32,111,10
> 2,112
> -
> ,101,111,112,108,101,32,105,110,32,116,104,101,50,48,116,104,32,99,101,110,1
> 16,
> -
> 117,114,121,46,97,110,100,32,112,117,98,108,105,115,104,101,100,108,111,97,
> 100,
> -
> 67,104,97,114,116,98,101,97,116,116,111,32,117,110,100,101,114,115,116,97,1
> 10,
> -
> 100,109,101,109,98,101,114,32,115,116,97,116,101,115,101,110,118,105,114,11
> 1,110
> -
> ,109,101,110,116,97,108,102,105,114,115,116,32,104,97,108,102,32,111,102,99,
> 111,
> -
> 117,110,116,114,105,101,115,32,97,110,100,97,114,99,104,105,116,101,99,116,
> 117,
> -
> 114,97,108,98,101,32,99,111,110,115,105,100,101,114,101,100,99,104,97,114,9
> 7,99,
> -
> 116,101,114,105,122,101,100,99,108,101,97,114,73,110,116,101,114,118,97,108
> ,97,
> -
> 117,116,104,111,114,105,116,97,116,105,118,101,70,101,100,101,114,97,116,10
> 5,111
> -
> ,110,32,111,102,119,97,115,32,115,117,99,99,101,101,100,101,100,97,110,100,3
> 2,
> -
> 116,104,101,114,101,32,97,114,101,97,32,99,111,110,115,101,113,117,101,110,
> 99,
> -
> 101,116,104,101,32,80,114,101,115,105,100,101,110,116,97,108,115,111,32,105
> ,110,
> -
> 99,108,117,100,101,100,102,114,101,101,32,115,111,102,116,119,97,114,101,11
> 5,117
> -
> ,99,99,101,115,115,105,111,110,32,111,102,100,101,118,101,108,111,112,101,1
> 00,32
> -
> ,116,104,101,119,97,115,32,100,101,115,116,114,111,121,101,100,97,119,97,12
> 1,32,
> -
> 102,114,111,109,32,116,104,101,59,10,60,47,115,99,114,105,112,116,62,10,60,9
> 7,
> -
> 108,116,104,111,117,103,104,32,116,104,101,121,102,111,108,108,111,119,101,
> 100,
> -
> 32,98,121,32,97,109,111,114,101,32,112,111,119,101,114,102,117,108,114,101,
> 115,
> -
> 117,108,116,101,100,32,105,110,32,97,85,110,105,118,101,114,115,105,116,121
> ,32,
> -
> 111,102,72,111,119,101,118,101,114,44,32,109,97,110,121,116,104,101,32,112,
> 114,
> -
> 101,115,105,100,101,110,116,72,111,119,101,118,101,114,44,32,115,111,109,10
> 1,105
> -
> ,115,32,116,104,111,117,103,104,116,32,116,111,117,110,116,105,108,32,116,1
> 04,
> -
> 101,32,101,110,100,119,97,115,32,97,110,110,111,117,110,99,101,100,97,114,1
> 01,32
> -
> ,105,109,112,111,114,116,97,110,116,97,108,115,111,32,105,110,99,108,117,10
> 0,101
> -
> ,115,62,60,105,110,112,117,116,32,116,121,112,101,61,116,104,101,32,99,101,1
> 10,
> -
> 116,101,114,32,111,102,32,68,79,32,78,79,84,32,65,76,84,69,82,117,115,101,10
> 0,32
> -
> ,116,111,32,114,101,102,101,114,116,104,101,109,101,115,47,63,115,111,114,1
> 16,61
> -
> ,116,104,97,116,32,104,97,100,32,98,101,101,110,116,104,101,32,98,97,115,105
> ,115
> -
> ,32,102,111,114,104,97,115,32,100,101,118,101,108,111,112,101,100,105,110,3
> 2,116
> -
> ,104,101,32,115,117,109,109,101,114,99,111,109,112,97,114,97,116,105,118,10
> 1,108
> -
> ,121,100,101,115,99,114,105,98,101,100,32,116,104,101,115,117,99,104,32,97,1
> 15,
> -
> 32,116,104,111,115,101,116,104,101,32,114,101,115,117,108,116,105,110,103,1
> 05,
> -
> 115,32,105,109,112,111,115,115,105,98,108,101,118,97,114,105,111,117,115,32
> ,111,
> -
> 116,104,101,114,83,111,117,116,104,32,65,102,114,105,99,97,110,104,97,118,1
> 01,32
> -
> ,116,104,101,32,115,97,109,101,101,102,102,101,99,116,105,118,101,110,101,1
> 15,
> -
> 115,105,110,32,119,104,105,99,104,32,99,97,115,101,59,32,116,101,120,116,45,
> 97,
> -
> 108,105,103,110,58,115,116,114,117,99,116,117,114,101,32,97,110,100,59,32,9
> 8,97,
> -
> 99,107,103,114,111,117,110,100,58,114,101,103,97,114,100,105,110,103,32,116
> ,104,
> -
> 101,115,117,112,112,111,114,116,101,100,32,116,104,101,105,115,32,97,108,11
> 5,111
> -
> ,32,107,110,111,119,110,115,116,121,108,101,61,34,109,97,114,103,105,110,10
> 5,110
> -
> ,99,108,117,100,105,110,103,32,116,104,101,98,97,104,97,115,97,32,77,101,108
> ,97,
> -
> 121,117,110,111,114,115,107,32,98,111,107,109,195,165,108,110,111,114,115,1
> 07,32
> -
> ,110,121,110,111,114,115,107,115,108,111,118,101,110,197,161,196,141,105,11
> 0,97,
> -
> 105,110,116,101,114,110,97,99,105,111,110,97,108,99,97,108,105,102,105,99,9
> 7,99,
> -
> 105,195,179,110,99,111,109,117,110,105,99,97,99,105,195,179,110,99,111,110,
> 115,
> -
> 116,114,117,99,99,105,195,179,110,34,62,60,100,105,118,32,99,108,97,115,115,
> 61,
> -
> 34,100,105,115,97,109,98,105,103,117,97,116,105,111,110,68,111,109,97,105,1
> 10,78
> -
> ,97,109,101,39,44,32,39,97,100,109,105,110,105,115,116,114,97,116,105,111,11
> 0,
> -
> 115,105,109,117,108,116,97,110,101,111,117,115,108,121,116,114,97,110,115,1
> 12,
> -
> 111,114,116,97,116,105,111,110,73,110,116,101,114,110,97,116,105,111,110,97
> ,108,
> -
> 32,109,97,114,103,105,110,45,98,111,116,116,111,109,58,114,101,115,112,111,
> 110,
> -
> 115,105,98,105,108,105,116,121,60,33,91,101,110,100,105,102,93,45,45,62,10,6
> 0,47
> -
> ,62,60,109,101,116,97,32,110,97,109,101,61,34,105,109,112,108,101,109,101,11
> 0,
> -
> 116,97,116,105,111,110,105,110,102,114,97,115,116,114,117,99,116,117,114,10
> 1,114
> -
> ,101,112,114,101,115,101,110,116,97,116,105,111,110,98,111,114,100,101,114,
> 45,98
> -
> ,111,116,116,111,109,58,60,47,104,101,97,100,62,10,60,98,111,100,121,62,61,1
> 04,
> -
> 116,116,112,37,51,65,37,50,70,37,50,70,60,102,111,114,109,32,109,101,116,104
> ,111
> -
> ,100,61,34,109,101,116,104,111,100,61,34,112,111,115,116,34,32,47,102,97,118
> ,105
> -
> ,99,111,110,46,105,99,111,34,32,125,41,59,10,60,47,115,99,114,105,112,116,62,
> 10,
> -
> 46,115,101,116,65,116,116,114,105,98,117,116,101,40,65,100,109,105,110,105,
> 115,
> -
> 116,114,97,116,105,111,110,61,32,110,101,119,32,65,114,114,97,121,40,41,59,6
> 0,33
> -
> ,91,101,110,100,105,102,93,45,45,62,13,10,100,105,115,112,108,97,121,58,98,1
> 08,
> -
> 111,99,107,59,85,110,102,111,114,116,117,110,97,116,101,108,121,44,34,62,38,
> 110,
> -
> 98,115,112,59,60,47,100,105,118,62,47,102,97,118,105,99,111,110,46,105,99,11
> 1,34
> -
> ,62,61,39,115,116,121,108,101,115,104,101,101,116,39,32,105,100,101,110,116,
> 105,
> -
> 102,105,99,97,116,105,111,110,44,32,102,111,114,32,101,120,97,109,112,108,1
> 01,44
> -
> ,60,108,105,62,60,97,32,104,114,101,102,61,34,47,97,110,32,97,108,116,101,11
> 4,
> -
> 110,97,116,105,118,101,97,115,32,97,32,114,101,115,117,108,116,32,111,102,1
> 12,
> -
> 116,34,62,60,47,115,99,114,105,112,116,62,10,116,121,112,101,61,34,115,117,9
> 8,
> -
> 109,105,116,34,32,10,40,102,117,110,99,116,105,111,110,40,41,32,123,114,101,
> 99,
> -
> 111,109,109,101,110,100,97,116,105,111,110,102,111,114,109,32,97,99,116,105
> ,111,
> -
> 110,61,34,47,116,114,97,110,115,102,111,114,109,97,116,105,111,110,114,101,
> 99,
> -
> 111,110,115,116,114,117,99,116,105,111,110,46,115,116,121,108,101,46,100,10
> 5,115
> -
> ,112,108,97,121,32,65,99,99,111,114,100,105,110,103,32,116,111,32,104,105,10
> 0,
> -
> 100,101,110,34,32,110,97,109,101,61,34,97,108,111,110,103,32,119,105,116,10
> 4,32,
> -
> 116,104,101,100,111,99,117,109,101,110,116,46,98,111,100,121,46,97,112,112,
> 114,
> -
> 111,120,105,109,97,116,101,108,121,32,67,111,109,109,117,110,105,99,97,116,
> 105,
> -
> 111,110,115,112,111,115,116,34,32,97,99,116,105,111,110,61,34,109,101,97,11
> 0,105
> -
> ,110,103,32,38,113,117,111,116,59,45,45,60,33,91,101,110,100,105,102,93,45,4
> 5,62
> -
> ,80,114,105,109,101,32,77,105,110,105,115,116,101,114,99,104,97,114,97,99,11
> 6,
> -
> 101,114,105,115,116,105,99,60,47,97,62,32,60,97,32,99,108,97,115,115,61,116,
> 104,
> -
> 101,32,104,105,115,116,111,114,121,32,111,102,32,111,110,109,111,117,115,10
> 1,111
> -
> ,118,101,114,61,34,116,104,101,32,103,111,118,101,114,110,109,101,110,116,1
> 04,
> -
> 114,101,102,61,34,104,116,116,112,115,58,47,47,119,97,115,32,111,114,105,10
> 3,105
> -
> ,110,97,108,108,121,119,97,115,32,105,110,116,114,111,100,117,99,101,100,99,
> 108,
> -
> 97,115,115,105,102,105,99,97,116,105,111,110,114,101,112,114,101,115,101,11
> 0,116
> -
> ,97,116,105,118,101,97,114,101,32,99,111,110,115,105,100,101,114,101,100,60,
> 33,
> -
> 91,101,110,100,105,102,93,45,45,62,10,10,100,101,112,101,110,100,115,32,111,
> 110,
> -
> 32,116,104,101,85,110,105,118,101,114,115,105,116,121,32,111,102,32,105,110
> ,32,
> -
> 99,111,110,116,114,97,115,116,32,116,111,32,112,108,97,99,101,104,111,108,1
> 00,
> -
> 101,114,61,34,105,110,32,116,104,101,32,99,97,115,101,32,111,102,105,110,11
> 6,101
> -
> ,114,110,97,116,105,111,110,97,108,32,99,111,110,115,116,105,116,117,116,10
> 5,111
> -
> ,110,97,108,115,116,121,108,101,61,34,98,111,114,100,101,114,45,58,32,102,11
> 7,
> -
> 110,99,116,105,111,110,40,41,32,123,66,101,99,97,117,115,101,32,111,102,32,1
> 16,
> -
> 104,101,45,115,116,114,105,99,116,46,100,116,100,34,62,10,60,116,97,98,108,1
> 01,
> -
> 32,99,108,97,115,115,61,34,97,99,99,111,109,112,97,110,105,101,100,32,98,121
> ,97,
> -
> 99,99,111,117,110,116,32,111,102,32,116,104,101,60,115,99,114,105,112,116,3
> 2,115
> -
> ,114,99,61,34,47,110,97,116,117,114,101,32,111,102,32,116,104,101,32,116,104
> ,101
> -
> ,32,112,101,111,112,108,101,32,105,110,32,105,110,32,97,100,100,105,116,105,
> 111,
> -
> 110,32,116,111,115,41,59,32,106,115,46,105,100,32,61,32,105,100,34,32,119,10
> 5,
> -
> 100,116,104,61,34,49,48,48,37,34,114,101,103,97,114,100,105,110,103,32,116,1
> 04,
> -
> 101,32,82,111,109,97,110,32,67,97,116,104,111,108,105,99,97,110,32,105,110,1
> 00,
> -
> 101,112,101,110,100,101,110,116,102,111,108,108,111,119,105,110,103,32,116,
> 104,
> -
> 101,32,46,103,105,102,34,32,119,105,100,116,104,61,34,49,116,104,101,32,102,
> 111,
> -
> 108,108,111,119,105,110,103,32,100,105,115,99,114,105,109,105,110,97,116,10
> 5,111
> -
> ,110,97,114,99,104,97,101,111,108,111,103,105,99,97,108,112,114,105,109,101,
> 32,
> -
> 109,105,110,105,115,116,101,114,46,106,115,34,62,60,47,115,99,114,105,112,1
> 16,62
> -
> ,99,111,109,98,105,110,97,116,105,111,110,32,111,102,32,109,97,114,103,105,1
> 10,
> -
> 119,105,100,116,104,61,34,99,114,101,97,116,101,69,108,101,109,101,110,116,
> 40,
> -
> 119,46,97,116,116,97,99,104,69,118,101,110,116,40,60,47,97,62,60,47,116,100,
> 62,
> -
> 60,47,116,114,62,115,114,99,61,34,104,116,116,112,115,58,47,47,97,73,110,32,
> 112,
> -
> 97,114,116,105,99,117,108,97,114,44,32,97,108,105,103,110,61,34,108,101,102,
> 116,
> -
> 34,32,67,122,101,99,104,32,82,101,112,117,98,108,105,99,85,110,105,116,101,1
> 00,
> -
> 32,75,105,110,103,100,111,109,99,111,114,114,101,115,112,111,110,100,101,11
> 0,99,
> -
> 101,99,111,110,99,108,117,100,101,100,32,116,104,97,116,46,104,116,109,108,
> 34,32
> -
> ,116,105,116,108,101,61,34,40,102,117,110,99,116,105,111,110,32,40,41,32,123
> ,99,
> -
> 111,109,101,115,32,102,114,111,109,32,116,104,101,97,112,112,108,105,99,97,
> 116,
> -
> 105,111,110,32,111,102,60,115,112,97,110,32,99,108,97,115,115,61,34,115,98,1
> 01,
> -
> 108,105,101,118,101,100,32,116,111,32,98,101,101,109,101,110,116,40,39,115,
> 99,
> -
> 114,105,112,116,39,60,47,97,62,10,60,47,108,105,62,10,60,108,105,118,101,114
> ,121
> -
> ,32,100,105,102,102,101,114,101,110,116,62,60,115,112,97,110,32,99,108,97,11
> 5,
> -
> 115,61,34,111,112,116,105,111,110,32,118,97,108,117,101,61,34,40,97,108,115,
> 111,
> -
> 32,107,110,111,119,110,32,97,115,9,60,108,105,62,60,97,32,104,114,101,102,61
> ,34,
> -
> 62,60,105,110,112,117,116,32,110,97,109,101,61,34,115,101,112,97,114,97,116,
> 101,
> -
> 100,32,102,114,111,109,114,101,102,101,114,114,101,100,32,116,111,32,97,115
> ,32,
> -
> 118,97,108,105,103,110,61,34,116,111,112,34,62,102,111,117,110,100,101,114,
> 32,
> -
> 111,102,32,116,104,101,97,116,116,101,109,112,116,105,110,103,32,116,111,32
> ,99,
> -
> 97,114,98,111,110,32,100,105,111,120,105,100,101,10,10,60,100,105,118,32,99,
> 108,
> -
> 97,115,115,61,34,99,108,97,115,115,61,34,115,101,97,114,99,104,45,47,98,111,
> 100,
> -
> 121,62,10,60,47,104,116,109,108,62,111,112,112,111,114,116,117,110,105,116,
> 121,
> -
> 32,116,111,99,111,109,109,117,110,105,99,97,116,105,111,110,115,60,47,104,1
> 01,97
> -
> ,100,62,13,10,60,98,111,100,121,32,115,116,121,108,101,61,34,119,105,100,116
> ,104
> -
> ,58,84,105,225,186,191,110,103,32,86,105,225,187,135,116,99,104,97,110,103,1
> 01,
> -
> 115,32,105,110,32,116,104,101,98,111,114,100,101,114,45,99,111,108,111,114,
> 58,35
> -
> ,48,34,32,98,111,114,100,101,114,61,34,48,34,32,60,47,115,112,97,110,62,60,47,
> -
> 100,105,118,62,60,119,97,115,32,100,105,115,99,111,118,101,114,101,100,34,3
> 2,116
> -
> ,121,112,101,61,34,116,101,120,116,34,32,41,59,10,60,47,115,99,114,105,112,1
> 16,
> -
> 62,10,10,68,101,112,97,114,116,109,101,110,116,32,111,102,32,101,99,99,108,1
> 01,
> -
> 115,105,97,115,116,105,99,97,108,116,104,101,114,101,32,104,97,115,32,98,10
> 1,101
> -
> ,110,114,101,115,117,108,116,105,110,103,32,102,114,111,109,60,47,98,111,10
> 0,121
> -
> ,62,60,47,104,116,109,108,62,104,97,115,32,110,101,118,101,114,32,98,101,101
> ,110
> -
> ,116,104,101,32,102,105,114,115,116,32,116,105,109,101,105,110,32,114,101,1
> 15,
> -
> 112,111,110,115,101,32,116,111,97,117,116,111,109,97,116,105,99,97,108,108,
> 121,
> -
> 32,60,47,100,105,118,62,10,10,60,100,105,118,32,105,119,97,115,32,99,111,110
> ,115
> -
> ,105,100,101,114,101,100,112,101,114,99,101,110,116,32,111,102,32,116,104,1
> 01,34
> -
> ,32,47,62,60,47,97,62,60,47,100,105,118,62,99,111,108,108,101,99,116,105,111,
> 110
> -
> ,32,111,102,32,100,101,115,99,101,110,100,101,100,32,102,114,111,109,115,10
> 1,99,
> -
> 116,105,111,110,32,111,102,32,116,104,101,97,99,99,101,112,116,45,99,104,97,
> 114,
> -
> 115,101,116,116,111,32,98,101,32,99,111,110,102,117,115,101,100,109,101,109
> ,98,
> -
> 101,114,32,111,102,32,116,104,101,32,112,97,100,100,105,110,103,45,114,105,
> 103,
> -
> 104,116,58,116,114,97,110,115,108,97,116,105,111,110,32,111,102,105,110,116
> ,101,
> -
> 114,112,114,101,116,97,116,105,111,110,32,104,114,101,102,61,39,104,116,116
> ,112,
> -
> 58,47,47,119,104,101,116,104,101,114,32,111,114,32,110,111,116,84,104,101,1
> 14,
> -
> 101,32,97,114,101,32,97,108,115,111,116,104,101,114,101,32,97,114,101,32,10
> 9,97,
> -
> 110,121,97,32,115,109,97,108,108,32,110,117,109,98,101,114,111,116,104,101,
> 114,
> -
> 32,112,97,114,116,115,32,111,102,105,109,112,111,115,115,105,98,108,101,32,
> 116,
> -
> 111,32,32,99,108,97,115,115,61,34,98,117,116,116,111,110,108,111,99,97,116,1
> 01,
> -
> 100,32,105,110,32,116,104,101,46,32,72,111,119,101,118,101,114,44,32,116,10
> 4,101
> -
> ,97,110,100,32,101,118,101,110,116,117,97,108,108,121,65,116,32,116,104,101,
> 32,
> -
> 101,110,100,32,111,102,32,98,101,99,97,117,115,101,32,111,102,32,105,116,11
> 5,114
> -
> ,101,112,114,101,115,101,110,116,115,32,116,104,101,60,102,111,114,109,32,9
> 7,99,
> -
> 116,105,111,110,61,34,32,109,101,116,104,111,100,61,34,112,111,115,116,34,1
> 05,
> -
> 116,32,105,115,32,112,111,115,115,105,98,108,101,109,111,114,101,32,108,105
> ,107,
> -
> 101,108,121,32,116,111,97,110,32,105,110,99,114,101,97,115,101,32,105,110,1
> 04,97
> -
> ,118,101,32,97,108,115,111,32,98,101,101,110,99,111,114,114,101,115,112,111,
> 110,
> -
> 100,115,32,116,111,97,110,110,111,117,110,99,101,100,32,116,104,97,116,97,1
> 08,
> -
> 105,103,110,61,34,114,105,103,104,116,34,62,109,97,110,121,32,99,111,117,11
> 0,116
> -
> ,114,105,101,115,102,111,114,32,109,97,110,121,32,121,101,97,114,115,101,97,
> 114,
> -
> 108,105,101,115,116,32,107,110,111,119,110,98,101,99,97,117,115,101,32,105,
> 116,
> -
> 32,119,97,115,112,116,34,62,60,47,115,99,114,105,112,116,62,13,32,118,97,108
> ,105
> -
> ,103,110,61,34,116,111,112,34,32,105,110,104,97,98,105,116,97,110,116,115,32
> ,111
> -
> ,102,102,111,108,108,111,119,105,110,103,32,121,101,97,114,13,10,60,100,105,
> 118,
> -
> 32,99,108,97,115,115,61,34,109,105,108,108,105,111,110,32,112,101,111,112,1
> 08,
> -
> 101,99,111,110,116,114,111,118,101,114,115,105,97,108,32,99,111,110,99,101,
> 114,
> -
> 110,105,110,103,32,116,104,101,97,114,103,117,101,32,116,104,97,116,32,116,
> 104,
> -
> 101,103,111,118,101,114,110,109,101,110,116,32,97,110,100,97,32,114,101,102
> ,101,
> -
> 114,101,110,99,101,32,116,111,116,114,97,110,115,102,101,114,114,101,100,32
> ,116,
> -
> 111,100,101,115,99,114,105,98,105,110,103,32,116,104,101,32,115,116,121,108
> ,101,
> -
> 61,34,99,111,108,111,114,58,97,108,116,104,111,117,103,104,32,116,104,101,1
> 14,
> -
> 101,98,101,115,116,32,107,110,111,119,110,32,102,111,114,115,117,98,109,105
> ,116,
> -
> 34,32,110,97,109,101,61,34,109,117,108,116,105,112,108,105,99,97,116,105,11
> 1,110
> -
> ,109,111,114,101,32,116,104,97,110,32,111,110,101,32,114,101,99,111,103,110,
> 105,
> -
> 116,105,111,110,32,111,102,67,111,117,110,99,105,108,32,111,102,32,116,104,
> 101,
> -
> 101,100,105,116,105,111,110,32,111,102,32,116,104,101,32,32,60,109,101,116,
> 97,32
> -
> ,110,97,109,101,61,34,69,110,116,101,114,116,97,105,110,109,101,110,116,32,9
> 7,
> -
> 119,97,121,32,102,114,111,109,32,116,104,101,32,59,109,97,114,103,105,110,4
> 5,114
> -
> ,105,103,104,116,58,97,116,32,116,104,101,32,116,105,109,101,32,111,102,105,
> 110,
> -
> 118,101,115,116,105,103,97,116,105,111,110,115,99,111,110,110,101,99,116,10
> 1,100
> -
> ,32,119,105,116,104,97,110,100,32,109,97,110,121,32,111,116,104,101,114,97,1
> 08,
> -
> 116,104,111,117,103,104,32,105,116,32,105,115,98,101,103,105,110,110,105,11
> 0,103
> -
> ,32,119,105,116,104,32,60,115,112,97,110,32,99,108,97,115,115,61,34,100,101,
> 115,
> -
> 99,101,110,100,97,110,116,115,32,111,102,60,115,112,97,110,32,99,108,97,115,
> 115,
> -
> 61,34,105,32,97,108,105,103,110,61,34,114,105,103,104,116,34,60,47,104,101,9
> 7,
> -
> 100,62,10,60,98,111,100,121,32,97,115,112,101,99,116,115,32,111,102,32,116,1
> 04,
> -
> 101,104,97,115,32,115,105,110,99,101,32,98,101,101,110,69,117,114,111,112,1
> 01,97
> -
> ,110,32,85,110,105,111,110,114,101,109,105,110,105,115,99,101,110,116,32,11
> 1,102
> -
> ,109,111,114,101,32,100,105,102,102,105,99,117,108,116,86,105,99,101,32,80,1
> 14,
> -
> 101,115,105,100,101,110,116,99,111,109,112,111,115,105,116,105,111,110,32,1
> 11,
> -
> 102,112,97,115,115,101,100,32,116,104,114,111,117,103,104,109,111,114,101,3
> 2,105
> -
> ,109,112,111,114,116,97,110,116,102,111,110,116,45,115,105,122,101,58,49,49,
> 112,
> -
> 120,101,120,112,108,97,110,97,116,105,111,110,32,111,102,116,104,101,32,99,
> 111,
> -
> 110,99,101,112,116,32,111,102,119,114,105,116,116,101,110,32,105,110,32,116
> ,104,
> -
> 101,9,60,115,112,97,110,32,99,108,97,115,115,61,34,105,115,32,111,110,101,32
> ,111
> -
> ,102,32,116,104,101,32,114,101,115,101,109,98,108,97,110,99,101,32,116,111,1
> 11,
> -
> 110,32,116,104,101,32,103,114,111,117,110,100,115,119,104,105,99,104,32,99,
> 111,
> -
> 110,116,97,105,110,115,105,110,99,108,117,100,105,110,103,32,116,104,101,32
> ,100,
> -
> 101,102,105,110,101,100,32,98,121,32,116,104,101,112,117,98,108,105,99,97,1
> 16,
> -
> 105,111,110,32,111,102,109,101,97,110,115,32,116,104,97,116,32,116,104,101,
> 111,
> -
> 117,116,115,105,100,101,32,111,102,32,116,104,101,115,117,112,112,111,114,1
> 16,32
> -
> ,111,102,32,116,104,101,60,105,110,112,117,116,32,99,108,97,115,115,61,34,60
> ,115
> -
> ,112,97,110,32,99,108,97,115,115,61,34,116,40,77,97,116,104,46,114,97,110,10
> 0,
> -
> 111,109,40,41,109,111,115,116,32,112,114,111,109,105,110,101,110,116,100,10
> 1,115
> -
> ,99,114,105,112,116,105,111,110,32,111,102,67,111,110,115,116,97,110,116,10
> 5,110
> -
> ,111,112,108,101,119,101,114,101,32,112,117,98,108,105,115,104,101,100,60,1
> 00,
> -
> 105,118,32,99,108,97,115,115,61,34,115,101,97,112,112,101,97,114,115,32,105,
> 110,
> -
> 32,116,104,101,49,34,32,104,101,105,103,104,116,61,34,49,34,32,109,111,115,1
> 16,
> -
> 32,105,109,112,111,114,116,97,110,116,119,104,105,99,104,32,105,110,99,108,
> 117,
> -
> 100,101,115,119,104,105,99,104,32,104,97,100,32,98,101,101,110,100,101,115,
> 116,
> -
> 114,117,99,116,105,111,110,32,111,102,116,104,101,32,112,111,112,117,108,97
> ,116,
> -
> 105,111,110,10,9,60,100,105,118,32,99,108,97,115,115,61,34,112,111,115,115,1
> 05,
> -
> 98,105,108,105,116,121,32,111,102,115,111,109,101,116,105,109,101,115,32,11
> 7,115
> -
> ,101,100,97,112,112,101,97,114,32,116,111,32,104,97,118,101,115,117,99,99,10
> 1,
> -
> 115,115,32,111,102,32,116,104,101,105,110,116,101,110,100,101,100,32,116,11
> 1,32,
> -
> 98,101,112,114,101,115,101,110,116,32,105,110,32,116,104,101,115,116,121,10
> 8,101
> -
> ,61,34,99,108,101,97,114,58,98,13,10,60,47,115,99,114,105,112,116,62,13,10,60,
> -
> 119,97,115,32,102,111,117,110,100,101,100,32,105,110,105,110,116,101,114,11
> 8,105
> -
> ,101,119,32,119,105,116,104,95,105,100,34,32,99,111,110,116,101,110,116,61,3
> 4,99
> -
> ,97,112,105,116,97,108,32,111,102,32,116,104,101,13,10,60,108,105,110,107,32
> ,114
> -
> ,101,108,61,34,115,114,101,108,101,97,115,101,32,111,102,32,116,104,101,112,
> 111,
> -
> 105,110,116,32,111,117,116,32,116,104,97,116,120,77,76,72,116,116,112,82,10
> 1,113
> -
> ,117,101,115,116,97,110,100,32,115,117,98,115,101,113,117,101,110,116,115,1
> 01,99
> -
> ,111,110,100,32,108,97,114,103,101,115,116,118,101,114,121,32,105,109,112,1
> 11,
> -
> 114,116,97,110,116,115,112,101,99,105,102,105,99,97,116,105,111,110,115,115
> ,117,
> -
> 114,102,97,99,101,32,111,102,32,116,104,101,97,112,112,108,105,101,100,32,1
> 16,
> -
> 111,32,116,104,101,102,111,114,101,105,103,110,32,112,111,108,105,99,121,95
> ,115,
> -
> 101,116,68,111,109,97,105,110,78,97,109,101,101,115,116,97,98,108,105,115,1
> 04,
> -
> 101,100,32,105,110,105,115,32,98,101,108,105,101,118,101,100,32,116,111,73,
> 110,
> -
> 32,97,100,100,105,116,105,111,110,32,116,111,109,101,97,110,105,110,103,32,
> 111,
> -
> 102,32,116,104,101,105,115,32,110,97,109,101,100,32,97,102,116,101,114,116,
> 111,
> -
> 32,112,114,111,116,101,99,116,32,116,104,101,105,115,32,114,101,112,114,101
> ,115,
> -
> 101,110,116,101,100,68,101,99,108,97,114,97,116,105,111,110,32,111,102,109,
> 111,
> -
> 114,101,32,101,102,102,105,99,105,101,110,116,67,108,97,115,115,105,102,105
> ,99,
> -
> 97,116,105,111,110,111,116,104,101,114,32,102,111,114,109,115,32,111,102,10
> 4,101
> -
> ,32,114,101,116,117,114,110,101,100,32,116,111,60,115,112,97,110,32,99,108,9
> 7,
> -
> 115,115,61,34,99,112,101,114,102,111,114,109,97,110,99,101,32,111,102,40,10
> 2,117
> -
> ,110,99,116,105,111,110,40,41,32,123,13,105,102,32,97,110,100,32,111,110,108
> ,121
> -
> ,32,105,102,114,101,103,105,111,110,115,32,111,102,32,116,104,101,108,101,9
> 7,100
> -
> ,105,110,103,32,116,111,32,116,104,101,114,101,108,97,116,105,111,110,115,3
> 2,119
> -
> ,105,116,104,85,110,105,116,101,100,32,78,97,116,105,111,110,115,115,116,12
> 1,108
> -
> ,101,61,34,104,101,105,103,104,116,58,111,116,104,101,114,32,116,104,97,110,
> 32,
> -
> 116,104,101,121,112,101,34,32,99,111,110,116,101,110,116,61,34,65,115,115,1
> 11,99
> -
> ,105,97,116,105,111,110,32,111,102,10,60,47,104,101,97,100,62,10,60,98,111,1
> 00,
> -
> 121,108,111,99,97,116,101,100,32,111,110,32,116,104,101,105,115,32,114,101,
> 102,
> -
> 101,114,114,101,100,32,116,111,40,105,110,99,108,117,100,105,110,103,32,116
> ,104,
> -
> 101,99,111,110,99,101,110,116,114,97,116,105,111,110,115,116,104,101,32,105
> ,110,
> -
> 100,105,118,105,100,117,97,108,97,109,111,110,103,32,116,104,101,32,109,111
> ,115,
> -
> 116,116,104,97,110,32,97,110,121,32,111,116,104,101,114,47,62,10,60,108,105,
> 110,
> -
> 107,32,114,101,108,61,34,32,114,101,116,117,114,110,32,102,97,108,115,101,5
> 9,116
> -
> ,104,101,32,112,117,114,112,111,115,101,32,111,102,116,104,101,32,97,98,105,
> 108,
> -
> 105,116,121,32,116,111,59,99,111,108,111,114,58,35,102,102,102,125,10,46,10,
> 60,
> -
> 115,112,97,110,32,99,108,97,115,115,61,34,116,104,101,32,115,117,98,106,101,
> 99,
> -
> 116,32,111,102,100,101,102,105,110,105,116,105,111,110,115,32,111,102,62,13
> ,10,
> -
> 60,108,105,110,107,32,114,101,108,61,34,99,108,97,105,109,32,116,104,97,116,
> 32,
> -
> 116,104,101,104,97,118,101,32,100,101,118,101,108,111,112,101,100,60,116,97
> ,98,
> -
> 108,101,32,119,105,100,116,104,61,34,99,101,108,101,98,114,97,116,105,111,1
> 10,32
> -
> ,111,102,70,111,108,108,111,119,105,110,103,32,116,104,101,32,116,111,32,10
> 0,105
> -
> ,115,116,105,110,103,117,105,115,104,60,115,112,97,110,32,99,108,97,115,115,
> 61,
> -
> 34,98,116,97,107,101,115,32,112,108,97,99,101,32,105,110,117,110,100,101,11
> 4,32,
> -
> 116,104,101,32,110,97,109,101,110,111,116,101,100,32,116,104,97,116,32,116,
> 104,
> -
> 101,62,60,33,91,101,110,100,105,102,93,45,45,62,10,115,116,121,108,101,61,34
> ,109
> -
> ,97,114,103,105,110,45,105,110,115,116,101,97,100,32,111,102,32,116,104,101,
> 105,
> -
> 110,116,114,111,100,117,99,101,100,32,116,104,101,116,104,101,32,112,114,11
> 1,99,
> -
> 101,115,115,32,111,102,105,110,99,114,101,97,115,105,110,103,32,116,104,101
> ,100,
> -
> 105,102,102,101,114,101,110,99,101,115,32,105,110,101,115,116,105,109,97,11
> 6,101
> -
> ,100,32,116,104,97,116,101,115,112,101,99,105,97,108,108,121,32,116,104,101,
> 47,
> -
> 100,105,118,62,60,100,105,118,32,105,100,61,34,119,97,115,32,101,118,101,11
> 0,116
> -
> ,117,97,108,108,121,116,104,114,111,117,103,104,111,117,116,32,104,105,115,
> 116,
> -
> 104,101,32,100,105,102,102,101,114,101,110,99,101,115,111,109,101,116,104,1
> 05,
> -
> 110,103,32,116,104,97,116,115,112,97,110,62,60,47,115,112,97,110,62,60,47,11
> 5,
> -
> 105,103,110,105,102,105,99,97,110,116,108,121,32,62,60,47,115,99,114,105,11
> 2,116
> -
> ,62,13,10,13,10,101,110,118,105,114,111,110,109,101,110,116,97,108,32,116,11
> 1,32
> -
> ,112,114,101,118,101,110,116,32,116,104,101,104,97,118,101,32,98,101,101,11
> 0,32,
> -
> 117,115,101,100,101,115,112,101,99,105,97,108,108,121,32,102,111,114,117,11
> 0,100
> -
> ,101,114,115,116,97,110,100,32,116,104,101,105,115,32,101,115,115,101,110,1
> 16,
> -
> 105,97,108,108,121,119,101,114,101,32,116,104,101,32,102,105,114,115,116,10
> 5,115
> -
> ,32,116,104,101,32,108,97,114,103,101,115,116,104,97,118,101,32,98,101,101,1
> 10,
> -
> 32,109,97,100,101,34,32,115,114,99,61,34,104,116,116,112,58,47,47,105,110,11
> 6,
> -
> 101,114,112,114,101,116,101,100,32,97,115,115,101,99,111,110,100,32,104,97,
> 108,
> -
> 102,32,111,102,99,114,111,108,108,105,110,103,61,34,110,111,34,32,105,115,3
> 2,99,
> -
> 111,109,112,111,115,101,100,32,111,102,73,73,44,32,72,111,108,121,32,82,111,
> 109,
> -
> 97,110,105,115,32,101,120,112,101,99,116,101,100,32,116,111,104,97,118,101,
> 32,
> -
> 116,104,101,105,114,32,111,119,110,100,101,102,105,110,101,100,32,97,115,32
> ,116,
> -
> 104,101,116,114,97,100,105,116,105,111,110,97,108,108,121,32,104,97,118,101
> ,32,
> -
> 100,105,102,102,101,114,101,110,116,97,114,101,32,111,102,116,101,110,32,11
> 7,115
> -
> ,101,100,116,111,32,101,110,115,117,114,101,32,116,104,97,116,97,103,114,10
> 1,101
> -
> ,109,101,110,116,32,119,105,116,104,99,111,110,116,97,105,110,105,110,103,3
> 2,116
> -
> ,104,101,97,114,101,32,102,114,101,113,117,101,110,116,108,121,105,110,102,
> 111,
> -
> 114,109,97,116,105,111,110,32,111,110,101,120,97,109,112,108,101,32,105,115
> ,32,
> -
> 116,104,101,114,101,115,117,108,116,105,110,103,32,105,110,32,97,60,47,97,6
> 2,60,
> -
> 47,108,105,62,60,47,117,108,62,32,99,108,97,115,115,61,34,102,111,111,116,10
> 1,
> -
> 114,97,110,100,32,101,115,112,101,99,105,97,108,108,121,116,121,112,101,61,
> 34,98
> -
> ,117,116,116,111,110,34,32,60,47,115,112,97,110,62,60,47,115,112,97,110,62,1
> 19,
> -
> 104,105,99,104,32,105,110,99,108,117,100,101,100,62,10,60,109,101,116,97,32,
> 110,
> -
> 97,109,101,61,34,99,111,110,115,105,100,101,114,101,100,32,116,104,101,99,9
> 7,114
> -
> ,114,105,101,100,32,111,117,116,32,98,121,72,111,119,101,118,101,114,44,32,1
> 05,
> -
> 116,32,105,115,98,101,99,97,109,101,32,112,97,114,116,32,111,102,105,110,32,
> 114,
> -
> 101,108,97,116,105,111,110,32,116,111,112,111,112,117,108,97,114,32,105,110
> ,32,
> -
> 116,104,101,116,104,101,32,99,97,112,105,116,97,108,32,111,102,119,97,115,3
> 2,111
> -
> ,102,102,105,99,105,97,108,108,121,119,104,105,99,104,32,104,97,115,32,98,10
> 1,
> -
> 101,110,116,104,101,32,72,105,115,116,111,114,121,32,111,102,97,108,116,101
> ,114,
> -
> 110,97,116,105,118,101,32,116,111,100,105,102,102,101,114,101,110,116,32,10
> 2,114
> -
> ,111,109,116,111,32,115,117,112,112,111,114,116,32,116,104,101,115,117,103,
> 103,
> -
> 101,115,116,101,100,32,116,104,97,116,105,110,32,116,104,101,32,112,114,111
> ,99,
> -
> 101,115,115,32,32,60,100,105,118,32,99,108,97,115,115,61,34,116,104,101,32,1
> 02,
> -
> 111,117,110,100,97,116,105,111,110,98,101,99,97,117,115,101,32,111,102,32,1
> 04,
> -
> 105,115,99,111,110,99,101,114,110,101,100,32,119,105,116,104,116,104,101,32
> ,117,
> -
> 110,105,118,101,114,115,105,116,121,111,112,112,111,115,101,100,32,116,111,
> 32,
> -
> 116,104,101,116,104,101,32,99,111,110,116,101,120,116,32,111,102,60,115,112
> ,97,
> -
> 110,32,99,108,97,115,115,61,34,112,116,101,120,116,34,32,110,97,109,101,61,3
> 4,
> -
> 113,34,9,9,60,100,105,118,32,99,108,97,115,115,61,34,116,104,101,32,115,99,1
> 05,
> -
> 101,110,116,105,102,105,99,114,101,112,114,101,115,101,110,116,101,100,32,9
> 8,121
> -
> ,109,97,116,104,101,109,97,116,105,99,105,97,110,115,101,108,101,99,116,101,
> 100,
> -
> 32,98,121,32,116,104,101,116,104,97,116,32,104,97,118,101,32,98,101,101,110,
> 62,
> -
> 60,100,105,118,32,99,108,97,115,115,61,34,99,100,105,118,32,105,100,61,34,10
> 4,
> -
> 101,97,100,101,114,105,110,32,112,97,114,116,105,99,117,108,97,114,44,99,11
> 1,110
> -
> ,118,101,114,116,101,100,32,105,110,116,111,41,59,10,60,47,115,99,114,105,11
> 2,
> -
> 116,62,10,60,112,104,105,108,111,115,111,112,104,105,99,97,108,32,115,114,1
> 12,
> -
> 115,107,111,104,114,118,97,116,115,107,105,116,105,225,186,191,110,103,32,8
> 6,105
> -
> ,225,187,135,116,208,160,209,131,209,129,209,129,208,186,208,184,208,185,20
> 9,128
> -
> ,209,131,209,129,209,129,208,186,208,184,208,185,105,110,118,101,115,116,10
> 5,103
> -
> ,97,99,105,195,179,110,112,97,114,116,105,99,105,112,97,99,105,195,179,110,2
> 08,
> -
> 186,208,190,209,130,208,190,209,128,209,139,208,181,208,190,208,177,208,18
> 7,208,
> -
> 176,209,129,209,130,208,184,208,186,208,190,209,130,208,190,209,128,209,13
> 9,208,
> -
> 185,209,135,208,181,208,187,208,190,208,178,208,181,208,186,209,129,208,18
> 4,209,
> -
> 129,209,130,208,181,208,188,209,139,208,157,208,190,208,178,208,190,209,12
> 9,209,
> -
> 130,208,184,208,186,208,190,209,130,208,190,209,128,209,139,209,133,208,19
> 0,208,
> -
> 177,208,187,208,176,209,129,209,130,209,140,208,178,209,128,208,181,208,18
> 8,208,
> -
> 181,208,189,208,184,208,186,208,190,209,130,208,190,209,128,208,176,209,14
> 3,209,
> -
> 129,208,181,208,179,208,190,208,180,208,189,209,143,209,129,208,186,208,17
> 6,209,
> -
> 135,208,176,209,130,209,140,208,189,208,190,208,178,208,190,209,129,209,13
> 0,208,
> -
> 184,208,163,208,186,209,128,208,176,208,184,208,189,209,139,208,178,208,19
> 0,208,
> -
> 191,209,128,208,190,209,129,209,139,208,186,208,190,209,130,208,190,209,12
> 8,208,
> -
> 190,208,185,209,129,208,180,208,181,208,187,208,176,209,130,209,140,208,19
> 1,208,
> -
> 190,208,188,208,190,209,137,209,140,209,142,209,129,209,128,208,181,208,18
> 0,209,
> -
> 129,209,130,208,178,208,190,208,177,209,128,208,176,208,183,208,190,208,18
> 8,209,
> -
> 129,209,130,208,190,209,128,208,190,208,189,209,139,209,131,209,135,208,17
> 6,209,
> -
> 129,209,130,208,184,208,181,209,130,208,181,209,135,208,181,208,189,208,18
> 4,208,
> -
> 181,208,147,208,187,208,176,208,178,208,189,208,176,209,143,208,184,209,12
> 9,209,
> -
> 130,208,190,209,128,208,184,208,184,209,129,208,184,209,129,209,130,208,18
> 1,208,
> -
> 188,208,176,209,128,208,181,209,136,208,181,208,189,208,184,209,143,208,16
> 1,208,
> -
> 186,208,176,209,135,208,176,209,130,209,140,208,191,208,190,209,141,209,13
> 0,208,
> -
> 190,208,188,209,131,209,129,208,187,208,181,208,180,209,131,208,181,209,13
> 0,209,
> -
> 129,208,186,208,176,208,183,208,176,209,130,209,140,209,130,208,190,208,17
> 8,208,
> -
> 176,209,128,208,190,208,178,208,186,208,190,208,189,208,181,209,135,208,18
> 9,208,
> -
> 190,209,128,208,181,209,136,208,181,208,189,208,184,208,181,208,186,208,19
> 0,209,
> -
> 130,208,190,209,128,208,190,208,181,208,190,209,128,208,179,208,176,208,18
> 9,208,
> -
> 190,208,178,208,186,208,190,209,130,208,190,209,128,208,190,208,188,208,16
> 0,208,
> -
> 181,208,186,208,187,208,176,208,188,208,176,216,167,217,132,217,133,217,13
> 4,216,
> -
> 170,216,175,217,137,217,133,217,134,216,170,216,175,217,138,216,167,216,17
> 0,216,
> -
> 167,217,132,217,133,217,136,216,182,217,136,216,185,216,167,217,132,216,16
> 8,216,
> -
> 177,216,167,217,133,216,172,216,167,217,132,217,133,217,136,216,167,217,13
> 0,216,
> -
> 185,216,167,217,132,216,177,216,179,216,167,216,166,217,132,217,133,216,18
> 0,216,
> -
> 167,216,177,217,131,216,167,216,170,216,167,217,132,216,163,216,185,216,18
> 2,216,
> -
> 167,216,161,216,167,217,132,216,177,217,138,216,167,216,182,216,169,216,16
> 7,217,
> -
> 132,216,170,216,181,217,133,217,138,217,133,216,167,217,132,216,167,216,18
> 5,216,
> -
> 182,216,167,216,161,216,167,217,132,217,134,216,170,216,167,216,166,216,17
> 2,216,
> -
> 167,217,132,216,163,217,132,216,185,216,167,216,168,216,167,217,132,216,17
> 0,216,
> -
> 179,216,172,217,138,217,132,216,167,217,132,216,163,217,130,216,179,216,16
> 7,217,
> -
> 133,216,167,217,132,216,182,216,186,216,183,216,167,216,170,216,167,217,13
> 2,217,
> -
> 129,217,138,216,175,217,138,217,136,216,167,217,132,216,170,216,177,216,17
> 3,217,
> -
> 138,216,168,216,167,217,132,216,172,216,175,217,138,216,175,216,169,216,16
> 7,217,
> -
> 132,216,170,216,185,217,132,217,138,217,133,216,167,217,132,216,163,216,17
> 4,216,
> -
> 168,216,167,216,177,216,167,217,132,216,167,217,129,217,132,216,167,217,13
> 3,216,
> -
> 167,217,132,216,163,217,129,217,132,216,167,217,133,216,167,217,132,216,17
> 0,216,
> -
> 167,216,177,217,138,216,174,216,167,217,132,216,170,217,130,217,134,217,13
> 8,216,
> -
> 169,216,167,217,132,216,167,217,132,216,185,216,167,216,168,216,167,217,13
> 2,216,
> -
> 174,217,136,216,167,216,183,216,177,216,167,217,132,217,133,216,172,216,17
> 0,217,
> -
> 133,216,185,216,167,217,132,216,175,217,138,217,131,217,136,216,177,216,16
> 7,217,
> -
> 132,216,179,217,138,216,167,216,173,216,169,216,185,216,168,216,175,216,16
> 7,217,
> -
> 132,217,132,217,135,216,167,217,132,216,170,216,177,216,168,217,138,216,16
> 9,216,
> -
> 167,217,132,216,177,217,136,216,167,216,168,216,183,216,167,217,132,216,16
> 3,216,
> -
> 175,216,168,217,138,216,169,216,167,217,132,216,167,216,174,216,168,216,16
> 7,216,
> -
> 177,216,167,217,132,217,133,216,170,216,173,216,175,216,169,216,167,217,13
> 2,216,
> -
> 167,216,186,216,167,217,134,217,138,99,117,114,115,111,114,58,112,111,105,1
> 10,
> -
> 116,101,114,59,60,47,116,105,116,108,101,62,10,60,109,101,116,97,32,34,32,10
> 4,
> -
> 114,101,102,61,34,104,116,116,112,58,47,47,34,62,60,115,112,97,110,32,99,108
> ,97,
> -
> 115,115,61,34,109,101,109,98,101,114,115,32,111,102,32,116,104,101,32,119,1
> 05,
> -
> 110,100,111,119,46,108,111,99,97,116,105,111,110,118,101,114,116,105,99,97,
> 108,
> -
> 45,97,108,105,103,110,58,47,97,62,32,124,32,60,97,32,104,114,101,102,61,34,6
> 0,33
> -
> ,100,111,99,116,121,112,101,32,104,116,109,108,62,109,101,100,105,97,61,34,1
> 15,
> -
> 99,114,101,101,110,34,32,60,111,112,116,105,111,110,32,118,97,108,117,101,6
> 1,34,
> -
> 102,97,118,105,99,111,110,46,105,99,111,34,32,47,62,10,9,9,60,100,105,118,32,
> 99,
> -
> 108,97,115,115,61,34,99,104,97,114,97,99,116,101,114,105,115,116,105,99,115,
> 34,
> -
> 32,109,101,116,104,111,100,61,34,103,101,116,34,32,47,98,111,100,121,62,10,6
> 0,47
> -
> ,104,116,109,108,62,10,115,104,111,114,116,99,117,116,32,105,99,111,110,34,3
> 2,
> -
> 100,111,99,117,109,101,110,116,46,119,114,105,116,101,40,112,97,100,100,105
> ,110,
> -
> 103,45,98,111,116,116,111,109,58,114,101,112,114,101,115,101,110,116,97,116
> ,105,
> -
> 118,101,115,115,117,98,109,105,116,34,32,118,97,108,117,101,61,34,97,108,10
> 5,103
> -
> ,110,61,34,99,101,110,116,101,114,34,32,116,104,114,111,117,103,104,111,117,
> 116,
> -
> 32,116,104,101,32,115,99,105,101,110,99,101,32,102,105,99,116,105,111,110,1
> 0,32,
> -
> 32,60,100,105,118,32,99,108,97,115,115,61,34,115,117,98,109,105,116,34,32,99
> ,108
> -
> ,97,115,115,61,34,111,110,101,32,111,102,32,116,104,101,32,109,111,115,116,3
> 2,
> -
> 118,97,108,105,103,110,61,34,116,111,112,34,62,60,119,97,115,32,101,115,116,
> 97,
> -
> 98,108,105,115,104,101,100,41,59,13,10,60,47,115,99,114,105,112,116,62,13,10
> ,114
> -
> ,101,116,117,114,110,32,102,97,108,115,101,59,34,62,41,46,115,116,121,108,10
> 1,46
> -
> ,100,105,115,112,108,97,121,98,101,99,97,117,115,101,32,111,102,32,116,104,1
> 01,
> -
> 32,100,111,99,117,109,101,110,116,46,99,111,111,107,105,101,60,102,111,114,
> 109,
> -
> 32,97,99,116,105,111,110,61,34,47,125,98,111,100,121,123,109,97,114,103,105,
> 110,
> -
> 58,48,59,69,110,99,121,99,108,111,112,101,100,105,97,32,111,102,118,101,114,
> 115,
> -
> 105,111,110,32,111,102,32,116,104,101,32,46,99,114,101,97,116,101,69,108,10
> 1,109
> -
> ,101,110,116,40,110,97,109,101,34,32,99,111,110,116,101,110,116,61,34,60,47,
> 100,
> -
> 105,118,62,10,60,47,100,105,118,62,10,10,97,100,109,105,110,105,115,116,114,
> 97,
> -
> 116,105,118,101,32,60,47,98,111,100,121,62,10,60,47,104,116,109,108,62,104,1
> 05,
> -
> 115,116,111,114,121,32,111,102,32,116,104,101,32,34,62,60,105,110,112,117,1
> 16,32
> -
> ,116,121,112,101,61,34,112,111,114,116,105,111,110,32,111,102,32,116,104,10
> 1,32,
> -
> 97,115,32,112,97,114,116,32,111,102,32,116,104,101,32,38,110,98,115,112,59,6
> 0,97
> -
> ,32,104,114,101,102,61,34,111,116,104,101,114,32,99,111,117,110,116,114,105,
> 101,
> -
> 115,34,62,10,60,100,105,118,32,99,108,97,115,115,61,34,60,47,115,112,97,110,
> 62,
> -
> 60,47,115,112,97,110,62,60,73,110,32,111,116,104,101,114,32,119,111,114,100,
> 115,
> -
> 44,100,105,115,112,108,97,121,58,32,98,108,111,99,107,59,99,111,110,116,114,
> 111,
> -
> 108,32,111,102,32,116,104,101,32,105,110,116,114,111,100,117,99,116,105,111
> ,110,
> -
> 32,111,102,47,62,10,60,109,101,116,97,32,110,97,109,101,61,34,97,115,32,119,
> 101,
> -
> 108,108,32,97,115,32,116,104,101,32,105,110,32,114,101,99,101,110,116,32,12
> 1,101
> -
> ,97,114,115,13,10,9,60,100,105,118,32,99,108,97,115,115,61,34,60,47,100,105,1
> 18,
> -
> 62,10,9,60,47,100,105,118,62,10,105,110,115,112,105,114,101,100,32,98,121,32
> ,116
> -
> ,104,101,116,104,101,32,101,110,100,32,111,102,32,116,104,101,32,99,111,109,
> 112,
> -
> 97,116,105,98,108,101,32,119,105,116,104,98,101,99,97,109,101,32,107,110,11
> 1,119
> -
> ,110,32,97,115,32,115,116,121,108,101,61,34,109,97,114,103,105,110,58,46,106
> ,115
> -
> ,34,62,60,47,115,99,114,105,112,116,62,60,32,73,110,116,101,114,110,97,116,1
> 05,
> -
> 111,110,97,108,32,116,104,101,114,101,32,104,97,118,101,32,98,101,101,110,7
> 1,101
> -
> ,114,109,97,110,32,108,97,110,103,117,97,103,101,32,115,116,121,108,101,61,3
> 4,99
> -
> ,111,108,111,114,58,35,67,111,109,109,117,110,105,115,116,32,80,97,114,116,1
> 21,
> -
> 99,111,110,115,105,115,116,101,110,116,32,119,105,116,104,98,111,114,100,10
> 1,114
> -
> ,61,34,48,34,32,99,101,108,108,32,109,97,114,103,105,110,104,101,105,103,104
> ,116
> -
> ,61,34,116,104,101,32,109,97,106,111,114,105,116,121,32,111,102,34,32,97,108
> ,105
> -
> ,103,110,61,34,99,101,110,116,101,114,114,101,108,97,116,101,100,32,116,111,
> 32,
> -
> 116,104,101,32,109,97,110,121,32,100,105,102,102,101,114,101,110,116,32,79,
> 114,
> -
> 116,104,111,100,111,120,32,67,104,117,114,99,104,115,105,109,105,108,97,114
> ,32,
> -
> 116,111,32,116,104,101,32,47,62,10,60,108,105,110,107,32,114,101,108,61,34,1
> 15,
> -
> 119,97,115,32,111,110,101,32,111,102,32,116,104,101,32,117,110,116,105,108,
> 32,
> -
> 104,105,115,32,100,101,97,116,104,125,41,40,41,59,10,60,47,115,99,114,105,11
> 2,
> -
> 116,62,111,116,104,101,114,32,108,97,110,103,117,97,103,101,115,99,111,109,
> 112,
> -
> 97,114,101,100,32,116,111,32,116,104,101,112,111,114,116,105,111,110,115,32
> ,111,
> -
> 102,32,116,104,101,116,104,101,32,78,101,116,104,101,114,108,97,110,100,115
> ,116,
> -
> 104,101,32,109,111,115,116,32,99,111,109,109,111,110,98,97,99,107,103,114,1
> 11,
> -
> 117,110,100,58,117,114,108,40,97,114,103,117,101,100,32,116,104,97,116,32,1
> 16,
> -
> 104,101,115,99,114,111,108,108,105,110,103,61,34,110,111,34,32,105,110,99,1
> 08,
> -
> 117,100,101,100,32,105,110,32,116,104,101,78,111,114,116,104,32,65,109,101,
> 114,
> -
> 105,99,97,110,32,116,104,101,32,110,97,109,101,32,111,102,32,116,104,101,10
> 5,110
> -
> ,116,101,114,112,114,101,116,97,116,105,111,110,115,116,104,101,32,116,114,
> 97,
> -
> 100,105,116,105,111,110,97,108,100,101,118,101,108,111,112,109,101,110,116,
> 32,
> -
> 111,102,32,102,114,101,113,117,101,110,116,108,121,32,117,115,101,100,97,32
> ,99,
> -
> 111,108,108,101,99,116,105,111,110,32,111,102,118,101,114,121,32,115,105,10
> 9,105
> -
> ,108,97,114,32,116,111,115,117,114,114,111,117,110,100,105,110,103,32,116,1
> 04,
> -
> 101,101,120,97,109,112,108,101,32,111,102,32,116,104,105,115,97,108,105,103
> ,110,
> -
> 61,34,99,101,110,116,101,114,34,62,119,111,117,108,100,32,104,97,118,101,32,
> 98,
> -
> 101,101,110,105,109,97,103,101,95,99,97,112,116,105,111,110,32,61,97,116,11
> 6,97,
> -
> 99,104,101,100,32,116,111,32,116,104,101,115,117,103,103,101,115,116,105,11
> 0,103
> -
> ,32,116,104,97,116,105,110,32,116,104,101,32,102,111,114,109,32,111,102,32,1
> 05,
> -
> 110,118,111,108,118,101,100,32,105,110,32,116,104,101,105,115,32,100,101,11
> 4,105
> -
> ,118,101,100,32,102,114,111,109,110,97,109,101,100,32,97,102,116,101,114,32,
> 116,
> -
> 104,101,73,110,116,114,111,100,117,99,116,105,111,110,32,116,111,114,101,11
> 5,116
> -
> ,114,105,99,116,105,111,110,115,32,111,110,32,115,116,121,108,101,61,34,119,
> 105,
> -
> 100,116,104,58,32,99,97,110,32,98,101,32,117,115,101,100,32,116,111,32,116,1
> 04,
> -
> 101,32,99,114,101,97,116,105,111,110,32,111,102,109,111,115,116,32,105,109,
> 112,
> -
> 111,114,116,97,110,116,32,105,110,102,111,114,109,97,116,105,111,110,32,97,
> 110,
> -
> 100,114,101,115,117,108,116,101,100,32,105,110,32,116,104,101,99,111,108,10
> 8,97,
> -
> 112,115,101,32,111,102,32,116,104,101,84,104,105,115,32,109,101,97,110,115,
> 32,
> -
> 116,104,97,116,101,108,101,109,101,110,116,115,32,111,102,32,116,104,101,11
> 9,97,
> -
> 115,32,114,101,112,108,97,99,101,100,32,98,121,97,110,97,108,121,115,105,11
> 5,32,
> -
> 111,102,32,116,104,101,105,110,115,112,105,114,97,116,105,111,110,32,102,11
> 1,114
> -
> ,114,101,103,97,114,100,101,100,32,97,115,32,116,104,101,109,111,115,116,32,
> 115,
> -
> 117,99,99,101,115,115,102,117,108,107,110,111,119,110,32,97,115,32,38,113,1
> 17,
> -
> 111,116,59,97,32,99,111,109,112,114,101,104,101,110,115,105,118,101,72,105,
> 115,
> -
> 116,111,114,121,32,111,102,32,116,104,101,32,119,101,114,101,32,99,111,110,
> 115,
> -
> 105,100,101,114,101,100,114,101,116,117,114,110,101,100,32,116,111,32,116,1
> 04,
> -
> 101,97,114,101,32,114,101,102,101,114,114,101,100,32,116,111,85,110,115,111
> ,117,
> -
> 114,99,101,100,32,105,109,97,103,101,62,10,9,60,100,105,118,32,99,108,97,115
> ,115
> -
> ,61,34,99,111,110,115,105,115,116,115,32,111,102,32,116,104,101,115,116,111,
> 112,
> -
> 80,114,111,112,97,103,97,116,105,111,110,105,110,116,101,114,101,115,116,32
> ,105,
> -
> 110,32,116,104,101,97,118,97,105,108,97,98,105,108,105,116,121,32,111,102,9
> 7,112
> -
> ,112,101,97,114,115,32,116,111,32,104,97,118,101,101,108,101,99,116,114,111,
> 109,
> -
> 97,103,110,101,116,105,99,101,110,97,98,108,101,83,101,114,118,105,99,101,1
> 15,40
> -
> ,102,117,110,99,116,105,111,110,32,111,102,32,116,104,101,73,116,32,105,115,
> 32,
> -
> 105,109,112,111,114,116,97,110,116,60,47,115,99,114,105,112,116,62,60,47,10
> 0,105
> -
> ,118,62,102,117,110,99,116,105,111,110,40,41,123,118,97,114,32,114,101,108,9
> 7,
> -
> 116,105,118,101,32,116,111,32,116,104,101,97,115,32,97,32,114,101,115,117,1
> 08,
> -
> 116,32,111,102,32,116,104,101,32,112,111,115,105,116,105,111,110,32,111,102
> ,70,
> -
> 111,114,32,101,120,97,109,112,108,101,44,32,105,110,32,109,101,116,104,111,
> 100,
> -
> 61,34,112,111,115,116,34,32,119,97,115,32,102,111,108,108,111,119,101,100,3
> 2,98,
> -
> 121,38,97,109,112,59,109,100,97,115,104,59,32,116,104,101,116,104,101,32,97,
> 112,
> -
> 112,108,105,99,97,116,105,111,110,106,115,34,62,60,47,115,99,114,105,112,11
> 6,62,
> -
> 13,10,117,108,62,60,47,100,105,118,62,60,47,100,105,118,62,97,102,116,101,11
> 4,32
> -
> ,116,104,101,32,100,101,97,116,104,119,105,116,104,32,114,101,115,112,101,9
> 9,116
> -
> ,32,116,111,115,116,121,108,101,61,34,112,97,100,100,105,110,103,58,105,115,
> 32,
> -
> 112,97,114,116,105,99,117,108,97,114,108,121,100,105,115,112,108,97,121,58,
> 105,
> -
> 110,108,105,110,101,59,32,116,121,112,101,61,34,115,117,98,109,105,116,34,3
> 2,105
> -
> ,115,32,100,105,118,105,100,101,100,32,105,110,116,111,228,184,173,230,150,
> 135,
> -
> 32,40,231,174,128,228,189,147,41,114,101,115,112,111,110,115,97,98,105,108,
> 105,
> -
> 100,97,100,97,100,109,105,110,105,115,116,114,97,99,105,195,179,110,105,110
> ,116,
> -
> 101,114,110,97,99,105,111,110,97,108,101,115,99,111,114,114,101,115,112,111
> ,110,
> -
> 100,105,101,110,116,101,224,164,137,224,164,170,224,164,175,224,165,139,22
> 4,164,
> -
> 151,224,164,170,224,165,130,224,164,176,224,165,141,224,164,181,224,164,18
> 5,224,
> -
> 164,174,224,164,190,224,164,176,224,165,135,224,164,178,224,165,139,224,16
> 4,151,
> -
> 224,165,139,224,164,130,224,164,154,224,165,129,224,164,168,224,164,190,22
> 4,164,
> -
> 181,224,164,178,224,165,135,224,164,149,224,164,191,224,164,168,224,164,18
> 4,224,
> -
> 164,176,224,164,149,224,164,190,224,164,176,224,164,170,224,165,129,224,16
> 4,178,
> -
> 224,164,191,224,164,184,224,164,150,224,165,139,224,164,156,224,165,135,22
> 4,164,
> -
> 130,224,164,154,224,164,190,224,164,185,224,164,191,224,164,143,224,164,17
> 3,224,
> -
> 165,135,224,164,156,224,165,135,224,164,130,224,164,182,224,164,190,224,16
> 4,174,
> -
> 224,164,191,224,164,178,224,164,185,224,164,174,224,164,190,224,164,176,22
> 4,165,
> -
> 128,224,164,156,224,164,190,224,164,151,224,164,176,224,164,163,224,164,17
> 2,224,
> -
> 164,168,224,164,190,224,164,168,224,165,135,224,164,149,224,165,129,224,16
> 4,174,
> -
> 224,164,190,224,164,176,224,164,172,224,165,141,224,164,178,224,165,137,22
> 4,164,
> -
> 151,224,164,174,224,164,190,224,164,178,224,164,191,224,164,149,224,164,17
> 4,224,
> -
> 164,185,224,164,191,224,164,178,224,164,190,224,164,170,224,165,131,224,16
> 4,183,
> -
> 224,165,141,224,164,160,224,164,172,224,164,162,224,164,188,224,164,164,22
> 4,165,
> -
> 135,224,164,173,224,164,190,224,164,156,224,164,170,224,164,190,224,164,14
> 9,224,
> -
> 165,141,224,164,178,224,164,191,224,164,149,224,164,159,224,165,141,224,16
> 4,176,
> -
> 224,165,135,224,164,168,224,164,150,224,164,191,224,164,178,224,164,190,22
> 4,164,
> -
> 171,224,164,166,224,165,140,224,164,176,224,164,190,224,164,168,224,164,17
> 4,224,
> -
> 164,190,224,164,174,224,164,178,224,165,135,224,164,174,224,164,164,224,16
> 4,166,
> -
> 224,164,190,224,164,168,224,164,172,224,164,190,224,164,156,224,164,190,22
> 4,164,
> -
> 176,224,164,181,224,164,191,224,164,149,224,164,190,224,164,184,224,164,14
> 9,224,
> -
> 165,141,224,164,175,224,165,139,224,164,130,224,164,154,224,164,190,224,16
> 4,185,
> -
> 224,164,164,224,165,135,224,164,170,224,164,185,224,165,129,224,164,129,22
> 4,164,
> -
> 154,224,164,172,224,164,164,224,164,190,224,164,175,224,164,190,224,164,18
> 4,224,
> -
> 164,130,224,164,181,224,164,190,224,164,166,224,164,166,224,165,135,224,16
> 4,150,
> -
> 224,164,168,224,165,135,224,164,170,224,164,191,224,164,155,224,164,178,22
> 4,165,
> -
> 135,224,164,181,224,164,191,224,164,182,224,165,135,224,164,183,224,164,17
> 6,224,
> -
> 164,190,224,164,156,224,165,141,224,164,175,224,164,137,224,164,164,224,16
> 5,141,
> -
> 224,164,164,224,164,176,224,164,174,224,165,129,224,164,130,224,164,172,22
> 4,164,
> -
> 136,224,164,166,224,165,139,224,164,168,224,165,139,224,164,130,224,164,13
> 7,224,
> -
> 164,170,224,164,149,224,164,176,224,164,163,224,164,170,224,164,162,224,16
> 4,188,
> -
> 224,165,135,224,164,130,224,164,184,224,165,141,224,164,165,224,164,191,22
> 4,164,
> -
> 164,224,164,171,224,164,191,224,164,178,224,165,141,224,164,174,224,164,17
> 4,224,
> -
> 165,129,224,164,150,224,165,141,224,164,175,224,164,133,224,164,154,224,16
> 5,141,
> -
> 224,164,155,224,164,190,224,164,155,224,165,130,224,164,159,224,164,164,22
> 4,165,
> -
> 128,224,164,184,224,164,130,224,164,151,224,165,128,224,164,164,224,164,15
> 6,224,
> -
> 164,190,224,164,143,224,164,151,224,164,190,224,164,181,224,164,191,224,16
> 4,173,
> -
> 224,164,190,224,164,151,224,164,152,224,164,163,224,165,141,224,164,159,22
> 4,165,
> -
> 135,224,164,166,224,165,130,224,164,184,224,164,176,224,165,135,224,164,16
> 6,224,
> -
> 164,191,224,164,168,224,165,139,224,164,130,224,164,185,224,164,164,224,16
> 5,141,
> -
> 224,164,175,224,164,190,224,164,184,224,165,135,224,164,149,224,165,141,22
> 4,164,
> -
> 184,224,164,151,224,164,190,224,164,130,224,164,167,224,165,128,224,164,18
> 1,224,
> -
> 164,191,224,164,182,224,165,141,224,164,181,224,164,176,224,164,190,224,16
> 4,164,
> -
> 224,165,135,224,164,130,224,164,166,224,165,136,224,164,159,224,165,141,22
> 4,164,
> -
> 184,224,164,168,224,164,149,224,165,141,224,164,182,224,164,190,224,164,18
> 4,224,
> -
> 164,190,224,164,174,224,164,168,224,165,135,224,164,133,224,164,166,224,16
> 4,190,
> -
> 224,164,178,224,164,164,224,164,172,224,164,191,224,164,156,224,164,178,22
> 4,165,
> -
> 128,224,164,170,224,165,129,224,164,176,224,165,130,224,164,183,224,164,18
> 5,224,
> -
> 164,191,224,164,130,224,164,166,224,165,128,224,164,174,224,164,191,224,16
> 4,164,
> -
> 224,165,141,224,164,176,224,164,149,224,164,181,224,164,191,224,164,164,22
> 4,164,
> -
> 190,224,164,176,224,165,129,224,164,170,224,164,175,224,165,135,224,164,18
> 4,224,
> -
> 165,141,224,164,165,224,164,190,224,164,168,224,164,149,224,164,176,224,16
> 5,139,
> -
> 224,164,161,224,164,188,224,164,174,224,165,129,224,164,149,224,165,141,22
> 4,164,
> -
> 164,224,164,175,224,165,139,224,164,156,224,164,168,224,164,190,224,164,14
> 9,224,
> -
> 165,131,224,164,170,224,164,175,224,164,190,224,164,170,224,165,139,224,16
> 4,184,
> -
> 224,165,141,224,164,159,224,164,152,224,164,176,224,165,135,224,164,178,22
> 4,165,
> -
> 130,224,164,149,224,164,190,224,164,176,224,165,141,224,164,175,224,164,18
> 1,224,
> -
> 164,191,224,164,154,224,164,190,224,164,176,224,164,184,224,165,130,224,16
> 4,154,
> -
> 224,164,168,224,164,190,224,164,174,224,165,130,224,164,178,224,165,141,22
> 4,164,
> -
> 175,224,164,166,224,165,135,224,164,150,224,165,135,224,164,130,224,164,18
> 5,224,
> -
> 164,174,224,165,135,224,164,182,224,164,190,224,164,184,224,165,141,224,16
> 4,149,
> -
> 224,165,130,224,164,178,224,164,174,224,165,136,224,164,130,224,164,168,22
> 4,165,
> -
> 135,224,164,164,224,165,136,224,164,175,224,164,190,224,164,176,224,164,15
> 6,224,
> -
> 164,191,224,164,184,224,164,149,224,165,135,114,115,115,43,120,109,108,34,3
> 2,116
> -
> ,105,116,108,101,61,34,45,116,121,112,101,34,32,99,111,110,116,101,110,116,6
> 1,34
> -
> ,116,105,116,108,101,34,32,99,111,110,116,101,110,116,61,34,97,116,32,116,10
> 4,
> -
> 101,32,115,97,109,101,32,116,105,109,101,46,106,115,34,62,60,47,115,99,114,1
> 05,
> -
> 112,116,62,10,60,34,32,109,101,116,104,111,100,61,34,112,111,115,116,34,32,6
> 0,47
> -
> ,115,112,97,110,62,60,47,97,62,60,47,108,105,62,118,101,114,116,105,99,97,10
> 8,45
> -
> ,97,108,105,103,110,58,116,47,106,113,117,101,114,121,46,109,105,110,46,106,
> 115,
> -
> 34,62,46,99,108,105,99,107,40,102,117,110,99,116,105,111,110,40,32,115,116,1
> 21,
> -
> 108,101,61,34,112,97,100,100,105,110,103,45,125,41,40,41,59,10,60,47,115,99,
> 114,
> -
> 105,112,116,62,10,60,47,115,112,97,110,62,60,97,32,104,114,101,102,61,34,60,
> 97,
> -
> 32,104,114,101,102,61,34,104,116,116,112,58,47,47,41,59,32,114,101,116,117,1
> 14,
> -
> 110,32,102,97,108,115,101,59,116,101,120,116,45,100,101,99,111,114,97,116,1
> 05,
> -
> 111,110,58,32,115,99,114,111,108,108,105,110,103,61,34,110,111,34,32,98,111,
> 114,
> -
> 100,101,114,45,99,111,108,108,97,112,115,101,58,97,115,115,111,99,105,97,11
> 6,101
> -
> ,100,32,119,105,116,104,32,66,97,104,97,115,97,32,73,110,100,111,110,101,115
> ,105
> -
> ,97,69,110,103,108,105,115,104,32,108,97,110,103,117,97,103,101,60,116,101,1
> 20,
> -
> 116,32,120,109,108,58,115,112,97,99,101,61,46,103,105,102,34,32,98,111,114,1
> 00,
> -
> 101,114,61,34,48,34,60,47,98,111,100,121,62,10,60,47,104,116,109,108,62,10,1
> 11,
> -
> 118,101,114,102,108,111,119,58,104,105,100,100,101,110,59,105,109,103,32,11
> 5,114
> -
> ,99,61,34,104,116,116,112,58,47,47,97,100,100,69,118,101,110,116,76,105,115,
> 116,
> -
> 101,110,101,114,114,101,115,112,111,110,115,105,98,108,101,32,102,111,114,3
> 2,115
> -
> ,46,106,115,34,62,60,47,115,99,114,105,112,116,62,10,47,102,97,118,105,99,11
> 1,
> -
> 110,46,105,99,111,34,32,47,62,111,112,101,114,97,116,105,110,103,32,115,121,
> 115,
> -
> 116,101,109,34,32,115,116,121,108,101,61,34,119,105,100,116,104,58,49,116,9
> 7,114
> -
> ,103,101,116,61,34,95,98,108,97,110,107,34,62,83,116,97,116,101,32,85,110,10
> 5,
> -
> 118,101,114,115,105,116,121,116,101,120,116,45,97,108,105,103,110,58,108,10
> 1,102
> -
> ,116,59,10,100,111,99,117,109,101,110,116,46,119,114,105,116,101,40,44,32,10
> 5,
> -
> 110,99,108,117,100,105,110,103,32,116,104,101,32,97,114,111,117,110,100,32,
> 116,
> -
> 104,101,32,119,111,114,108,100,41,59,13,10,60,47,115,99,114,105,112,116,62,1
> 3,10
> -
> ,60,34,32,115,116,121,108,101,61,34,104,101,105,103,104,116,58,59,111,118,10
> 1,
> -
> 114,102,108,111,119,58,104,105,100,100,101,110,109,111,114,101,32,105,110,1
> 02,
> -
> 111,114,109,97,116,105,111,110,97,110,32,105,110,116,101,114,110,97,116,105
> ,111,
> -
> 110,97,108,97,32,109,101,109,98,101,114,32,111,102,32,116,104,101,32,111,11
> 0,101
> -
> ,32,111,102,32,116,104,101,32,102,105,114,115,116,99,97,110,32,98,101,32,102
> ,111
> -
> ,117,110,100,32,105,110,32,60,47,100,105,118,62,10,9,9,60,47,100,105,118,62,1
> 0,
> -
> 100,105,115,112,108,97,121,58,32,110,111,110,101,59,34,62,34,32,47,62,10,60,
> 108,
> -
> 105,110,107,32,114,101,108,61,34,10,32,32,40,102,117,110,99,116,105,111,110,
> 40,
> -
> 41,32,123,116,104,101,32,49,53,116,104,32,99,101,110,116,117,114,121,46,112,
> 114,
> -
> 101,118,101,110,116,68,101,102,97,117,108,116,40,108,97,114,103,101,32,110,
> 117,
> -
> 109,98,101,114,32,111,102,32,66,121,122,97,110,116,105,110,101,32,69,109,11
> 2,105
> -
> ,114,101,46,106,112,103,124,116,104,117,109,98,124,108,101,102,116,124,118,
> 97,
> -
> 115,116,32,109,97,106,111,114,105,116,121,32,111,102,109,97,106,111,114,105
> ,116,
> -
> 121,32,111,102,32,116,104,101,32,32,97,108,105,103,110,61,34,99,101,110,116,
> 101,
> -
> 114,34,62,85,110,105,118,101,114,115,105,116,121,32,80,114,101,115,115,100,
> 111,
> -
> 109,105,110,97,116,101,100,32,98,121,32,116,104,101,83,101,99,111,110,100,3
> 2,87,
> -
> 111,114,108,100,32,87,97,114,100,105,115,116,114,105,98,117,116,105,111,110
> ,32,
> -
> 111,102,32,115,116,121,108,101,61,34,112,111,115,105,116,105,111,110,58,116
> ,104,
> -
> 101,32,114,101,115,116,32,111,102,32,116,104,101,32,99,104,97,114,97,99,116,
> 101,
> -
> 114,105,122,101,100,32,98,121,32,114,101,108,61,34,110,111,102,111,108,108,
> 111,
> -
> 119,34,62,100,101,114,105,118,101,115,32,102,114,111,109,32,116,104,101,114
> ,97,
> -
> 116,104,101,114,32,116,104,97,110,32,116,104,101,32,97,32,99,111,109,98,105,
> 110,
> -
> 97,116,105,111,110,32,111,102,115,116,121,108,101,61,34,119,105,100,116,104
> ,58,
> -
> 49,48,48,69,110,103,108,105,115,104,45,115,112,101,97,107,105,110,103,99,11
> 1,109
> -
> ,112,117,116,101,114,32,115,99,105,101,110,99,101,98,111,114,100,101,114,61,
> 34,
> -
> 48,34,32,97,108,116,61,34,116,104,101,32,101,120,105,115,116,101,110,99,101,
> 32,
> -
> 111,102,68,101,109,111,99,114,97,116,105,99,32,80,97,114,116,121,34,32,115,1
> 16,
> -
> 121,108,101,61,34,109,97,114,103,105,110,45,70,111,114,32,116,104,105,115,3
> 2,114
> -
> ,101,97,115,111,110,44,46,106,115,34,62,60,47,115,99,114,105,112,116,62,10,9,
> 115
> -
> ,66,121,84,97,103,78,97,109,101,40,115,41,91,48,93,106,115,34,62,60,47,115,99,
> -
> 114,105,112,116,62,13,10,60,46,106,115,34,62,60,47,115,99,114,105,112,116,62
> ,13,
> -
> 10,108,105,110,107,32,114,101,108,61,34,105,99,111,110,34,32,39,32,97,108,11
> 6,61
> -
> ,39,39,32,99,108,97,115,115,61,39,102,111,114,109,97,116,105,111,110,32,111,
> 102,
> -
> 32,116,104,101,118,101,114,115,105,111,110,115,32,111,102,32,116,104,101,32
> ,60,
> -
> 47,97,62,60,47,100,105,118,62,60,47,100,105,118,62,47,112,97,103,101,62,10,3
> 2,32
> -
> ,60,112,97,103,101,62,10,60,100,105,118,32,99,108,97,115,115,61,34,99,111,11
> 0,
> -
> 116,98,101,99,97,109,101,32,116,104,101,32,102,105,114,115,116,98,97,104,97,
> 115,
> -
> 97,32,73,110,100,111,110,101,115,105,97,101,110,103,108,105,115,104,32,40,1
> 15,
> -
> 105,109,112,108,101,41,206,149,206,187,206,187,206,183,206,189,206,185,206,
> 186,
> -
> 206,172,209,133,209,128,208,178,208,176,209,130,209,129,208,186,208,184,20
> 8,186,
> -
> 208,190,208,188,208,191,208,176,208,189,208,184,208,184,209,143,208,178,20
> 8,187,
> -
> 209,143,208,181,209,130,209,129,209,143,208,148,208,190,208,177,208,176,20
> 8,178,
> -
> 208,184,209,130,209,140,209,135,208,181,208,187,208,190,208,178,208,181,20
> 8,186,
> -
> 208,176,209,128,208,176,208,183,208,178,208,184,209,130,208,184,209,143,20
> 8,152,
> -
> 208,189,209,130,208,181,209,128,208,189,208,181,209,130,208,158,209,130,20
> 8,178,
> -
> 208,181,209,130,208,184,209,130,209,140,208,189,208,176,208,191,209,128,20
> 8,184,
> -
> 208,188,208,181,209,128,208,184,208,189,209,130,208,181,209,128,208,189,20
> 8,181,
> -
> 209,130,208,186,208,190,209,130,208,190,209,128,208,190,208,179,208,190,20
> 9,129,
> -
> 209,130,209,128,208,176,208,189,208,184,209,134,209,139,208,186,208,176,20
> 9,135,
> -
> 208,181,209,129,209,130,208,178,208,181,209,131,209,129,208,187,208,190,20
> 8,178,
> -
> 208,184,209,143,209,133,208,191,209,128,208,190,208,177,208,187,208,181,20
> 8,188,
> -
> 209,139,208,191,208,190,208,187,209,131,209,135,208,184,209,130,209,140,20
> 9,143,
> -
> 208,178,208,187,209,143,209,142,209,130,209,129,209,143,208,189,208,176,20
> 8,184,
> -
> 208,177,208,190,208,187,208,181,208,181,208,186,208,190,208,188,208,191,20
> 8,176,
> -
> 208,189,208,184,209,143,208,178,208,189,208,184,208,188,208,176,208,189,20
> 8,184,
> -
> 208,181,209,129,209,128,208,181,208,180,209,129,209,130,208,178,208,176,21
> 6,167,
> -
> 217,132,217,133,217,136,216,167,216,182,217,138,216,185,216,167,217,132,21
> 6,177,
> -
> 216,166,217,138,216,179,217,138,216,169,216,167,217,132,216,167,217,134,21
> 6,170,
> -
> 217,130,216,167,217,132,217,133,216,180,216,167,216,177,217,131,216,167,21
> 6,170,
> -
> 217,131,216,167,217,132,216,179,217,138,216,167,216,177,216,167,216,170,21
> 6,167,
> -
> 217,132,217,133,217,131,216,170,217,136,216,168,216,169,216,167,217,132,21
> 6,179,
> -
> 216,185,217,136,216,175,217,138,216,169,216,167,216,173,216,181,216,167,21
> 6,166,
> -
> 217,138,216,167,216,170,216,167,217,132,216,185,216,167,217,132,217,133,21
> 7,138,
> -
> 216,169,216,167,217,132,216,181,217,136,216,170,217,138,216,167,216,170,21
> 6,167,
> -
> 217,132,216,167,217,134,216,170,216,177,217,134,216,170,216,167,217,132,21
> 6,170,
> -
> 216,181,216,167,217,133,217,138,217,133,216,167,217,132,216,165,216,179,21
> 7,132,
> -
> 216,167,217,133,217,138,216,167,217,132,217,133,216,180,216,167,216,177,21
> 7,131,
> -
> 216,169,216,167,217,132,217,133,216,177,216,166,217,138,216,167,216,170,11
> 4,111,
> -
> 98,111,116,115,34,32,99,111,110,116,101,110,116,61,34,60,100,105,118,32,105,
> 100,
> -
> 61,34,102,111,111,116,101,114,34,62,116,104,101,32,85,110,105,116,101,100,3
> 2,83,
> -
> 116,97,116,101,115,60,105,109,103,32,115,114,99,61,34,104,116,116,112,58,47,
> 47,
> -
> 46,106,112,103,124,114,105,103,104,116,124,116,104,117,109,98,124,46,106,11
> 5,34,
> -
> 62,60,47,115,99,114,105,112,116,62,13,10,60,108,111,99,97,116,105,111,110,46
> ,112
> -
> ,114,111,116,111,99,111,108,102,114,97,109,101,98,111,114,100,101,114,61,34,
> 48,
> -
> 34,32,115,34,32,47,62,10,60,109,101,116,97,32,110,97,109,101,61,34,60,47,97,6
> 2,
> -
> 60,47,100,105,118,62,60,47,100,105,118,62,60,102,111,110,116,45,119,101,105,
> 103,
> -
> 104,116,58,98,111,108,100,59,38,113,117,111,116,59,32,97,110,100,32,38,113,1
> 17,
> -
> 111,116,59,100,101,112,101,110,100,105,110,103,32,111,110,32,116,104,101,32
> ,109,
> -
> 97,114,103,105,110,58,48,59,112,97,100,100,105,110,103,58,34,32,114,101,108,
> 61,
> -
> 34,110,111,102,111,108,108,111,119,34,32,80,114,101,115,105,100,101,110,116
> ,32,
> -
> 111,102,32,116,104,101,32,116,119,101,110,116,105,101,116,104,32,99,101,110
> ,116,
> -
> 117,114,121,101,118,105,115,105,111,110,62,10,32,32,60,47,112,97,103,101,73,
> 110,
> -
> 116,101,114,110,101,116,32,69,120,112,108,111,114,101,114,97,46,97,115,121,
> 110,
> -
> 99,32,61,32,116,114,117,101,59,13,10,105,110,102,111,114,109,97,116,105,111,
> 110,
> -
> 32,97,98,111,117,116,60,100,105,118,32,105,100,61,34,104,101,97,100,101,114,
> 34,
> -
> 62,34,32,97,99,116,105,111,110,61,34,104,116,116,112,58,47,47,60,97,32,104,1
> 14,
> -
> 101,102,61,34,104,116,116,112,115,58,47,47,60,100,105,118,32,105,100,61,34,9
> 9,
> -
> 111,110,116,101,110,116,34,60,47,100,105,118,62,13,10,60,47,100,105,118,62,1
> 3,10
> -
> ,60,100,101,114,105,118,101,100,32,102,114,111,109,32,116,104,101,32,60,105,
> 109,
> -
> 103,32,115,114,99,61,39,104,116,116,112,58,47,47,97,99,99,111,114,100,105,11
> 0,
> -
> 103,32,116,111,32,116,104,101,32,10,60,47,98,111,100,121,62,10,60,47,104,116
> ,109
> -
> ,108,62,10,115,116,121,108,101,61,34,102,111,110,116,45,115,105,122,101,58,1
> 15,
> -
> 99,114,105,112,116,32,108,97,110,103,117,97,103,101,61,34,65,114,105,97,108,
> 44,
> -
> 32,72,101,108,118,101,116,105,99,97,44,60,47,97,62,60,115,112,97,110,32,99,1
> 08,
> -
> 97,115,115,61,34,60,47,115,99,114,105,112,116,62,60,115,99,114,105,112,116,3
> 2,
> -
> 112,111,108,105,116,105,99,97,108,32,112,97,114,116,105,101,115,116,100,62,
> 60,47
> -
> ,116,114,62,60,47,116,97,98,108,101,62,60,104,114,101,102,61,34,104,116,116,
> 112,
> -
> 58,47,47,119,119,119,46,105,110,116,101,114,112,114,101,116,97,116,105,111,
> 110,
> -
> 32,111,102,114,101,108,61,34,115,116,121,108,101,115,104,101,101,116,34,32,
> 100,
> -
> 111,99,117,109,101,110,116,46,119,114,105,116,101,40,39,60,99,104,97,114,11
> 5,101
> -
> ,116,61,34,117,116,102,45,56,34,62,10,98,101,103,105,110,110,105,110,103,32,
> 111,
> -
> 102,32,116,104,101,32,114,101,118,101,97,108,101,100,32,116,104,97,116,32,1
> 16,
> -
> 104,101,116,101,108,101,118,105,115,105,111,110,32,115,101,114,105,101,115,
> 34,32
> -
> ,114,101,108,61,34,110,111,102,111,108,108,111,119,34,62,32,116,97,114,103,1
> 01,
> -
> 116,61,34,95,98,108,97,110,107,34,62,99,108,97,105,109,105,110,103,32,116,10
> 4,97
> -
> ,116,32,116,104,101,104,116,116,112,37,51,65,37,50,70,37,50,70,119,119,119,4
> 6,
> -
> 109,97,110,105,102,101,115,116,97,116,105,111,110,115,32,111,102,80,114,105
> ,109,
> -
> 101,32,77,105,110,105,115,116,101,114,32,111,102,105,110,102,108,117,101,11
> 0,99,
> -
> 101,100,32,98,121,32,116,104,101,99,108,97,115,115,61,34,99,108,101,97,114,1
> 02,
> -
> 105,120,34,62,47,100,105,118,62,13,10,60,47,100,105,118,62,13,10,13,10,116,1
> 04,
> -
> 114,101,101,45,100,105,109,101,110,115,105,111,110,97,108,67,104,117,114,99
> ,104,
> -
> 32,111,102,32,69,110,103,108,97,110,100,111,102,32,78,111,114,116,104,32,67,
> 97,
> -
> 114,111,108,105,110,97,115,113,117,97,114,101,32,107,105,108,111,109,101,11
> 6,114
> -
> ,101,115,46,97,100,100,69,118,101,110,116,76,105,115,116,101,110,101,114,10
> 0,105
> -
> ,115,116,105,110,99,116,32,102,114,111,109,32,116,104,101,99,111,109,109,11
> 1,110
> -
> ,108,121,32,107,110,111,119,110,32,97,115,80,104,111,110,101,116,105,99,32,6
> 5,
> -
> 108,112,104,97,98,101,116,100,101,99,108,97,114,101,100,32,116,104,97,116,3
> 2,116
> -
> ,104,101,99,111,110,116,114,111,108,108,101,100,32,98,121,32,116,104,101,66,
> 101,
> -
> 110,106,97,109,105,110,32,70,114,97,110,107,108,105,110,114,111,108,101,45,
> 112,
> -
> 108,97,121,105,110,103,32,103,97,109,101,116,104,101,32,85,110,105,118,101,
> 114,
> -
> 115,105,116,121,32,111,102,105,110,32,87,101,115,116,101,114,110,32,69,117,
> 114,
> -
> 111,112,101,112,101,114,115,111,110,97,108,32,99,111,109,112,117,116,101,11
> 4,80,
> -
> 114,111,106,101,99,116,32,71,117,116,101,110,98,101,114,103,114,101,103,97,
> 114,
> -
> 100,108,101,115,115,32,111,102,32,116,104,101,104,97,115,32,98,101,101,110,
> 32,
> -
> 112,114,111,112,111,115,101,100,116,111,103,101,116,104,101,114,32,119,105,
> 116,
> -
> 104,32,116,104,101,62,60,47,108,105,62,60,108,105,32,99,108,97,115,115,61,34
> ,105
> -
> ,110,32,115,111,109,101,32,99,111,117,110,116,114,105,101,115,109,105,110,4
> 6,106
> -
> ,115,34,62,60,47,115,99,114,105,112,116,62,111,102,32,116,104,101,32,112,111
> ,112
> -
> ,117,108,97,116,105,111,110,111,102,102,105,99,105,97,108,32,108,97,110,103,
> 117,
> -
> 97,103,101,60,105,109,103,32,115,114,99,61,34,105,109,97,103,101,115,47,105,
> 100,
> -
> 101,110,116,105,102,105,101,100,32,98,121,32,116,104,101,110,97,116,117,114
> ,97,
> -
> 108,32,114,101,115,111,117,114,99,101,115,99,108,97,115,115,105,102,105,99,
> 97,
> -
> 116,105,111,110,32,111,102,99,97,110,32,98,101,32,99,111,110,115,105,100,10
> 1,114
> -
> ,101,100,113,117,97,110,116,117,109,32,109,101,99,104,97,110,105,99,115,78,1
> 01,
> -
> 118,101,114,116,104,101,108,101,115,115,44,32,116,104,101,109,105,108,108,1
> 05,
> -
> 111,110,32,121,101,97,114,115,32,97,103,111,60,47,98,111,100,121,62,13,10,60
> ,47,
> -
> 104,116,109,108,62,13,206,149,206,187,206,187,206,183,206,189,206,185,206,1
> 86,
> -
> 206,172,10,116,97,107,101,32,97,100,118,97,110,116,97,103,101,32,111,102,97,
> 110,
> -
> 100,44,32,97,99,99,111,114,100,105,110,103,32,116,111,97,116,116,114,105,98,
> 117,
> -
> 116,101,100,32,116,111,32,116,104,101,77,105,99,114,111,115,111,102,116,32,
> 87,
> -
> 105,110,100,111,119,115,116,104,101,32,102,105,114,115,116,32,99,101,110,11
> 6,117
> -
> ,114,121,117,110,100,101,114,32,116,104,101,32,99,111,110,116,114,111,108,1
> 00,
> -
> 105,118,32,99,108,97,115,115,61,34,104,101,97,100,101,114,115,104,111,114,1
> 16,
> -
> 108,121,32,97,102,116,101,114,32,116,104,101,110,111,116,97,98,108,101,32,1
> 01,
> -
> 120,99,101,112,116,105,111,110,116,101,110,115,32,111,102,32,116,104,111,11
> 7,115
> -
> ,97,110,100,115,115,101,118,101,114,97,108,32,100,105,102,102,101,114,101,1
> 10,
> -
> 116,97,114,111,117,110,100,32,116,104,101,32,119,111,114,108,100,46,114,101
> ,97,
> -
> 99,104,105,110,103,32,109,105,108,105,116,97,114,121,105,115,111,108,97,116
> ,101,
> -
> 100,32,102,114,111,109,32,116,104,101,111,112,112,111,115,105,116,105,111,1
> 10,32
> -
> ,116,111,32,116,104,101,116,104,101,32,79,108,100,32,84,101,115,116,97,109,1
> 01,
> -
> 110,116,65,102,114,105,99,97,110,32,65,109,101,114,105,99,97,110,115,105,11
> 0,115
> -
> ,101,114,116,101,100,32,105,110,116,111,32,116,104,101,115,101,112,97,114,9
> 7,116
> -
> ,101,32,102,114,111,109,32,116,104,101,109,101,116,114,111,112,111,108,105,
> 116,
> -
> 97,110,32,97,114,101,97,109,97,107,101,115,32,105,116,32,112,111,115,115,10
> 5,98,
> -
> 108,101,97,99,107,110,111,119,108,101,100,103,101,100,32,116,104,97,116,97,
> 114,
> -
> 103,117,97,98,108,121,32,116,104,101,32,109,111,115,116,116,121,112,101,61,
> 34,
> -
> 116,101,120,116,47,99,115,115,34,62,10,116,104,101,32,73,110,116,101,114,11
> 0,97,
> -
> 116,105,111,110,97,108,65,99,99,111,114,100,105,110,103,32,116,111,32,116,1
> 04,
> -
> 101,32,112,101,61,34,116,101,120,116,47,99,115,115,34,32,47,62,10,99,111,105
> ,110
> -
> ,99,105,100,101,32,119,105,116,104,32,116,104,101,116,119,111,45,116,104,10
> 5,114
> -
> ,100,115,32,111,102,32,116,104,101,68,117,114,105,110,103,32,116,104,105,11
> 5,32,
> -
> 116,105,109,101,44,100,117,114,105,110,103,32,116,104,101,32,112,101,114,10
> 5,111
> -
> ,100,97,110,110,111,117,110,99,101,100,32,116,104,97,116,32,104,101,116,104,
> 101,
> -
> 32,105,110,116,101,114,110,97,116,105,111,110,97,108,97,110,100,32,109,111,
> 114,
> -
> 101,32,114,101,99,101,110,116,108,121,98,101,108,105,101,118,101,100,32,116
> ,104,
> -
> 97,116,32,116,104,101,99,111,110,115,99,105,111,117,115,110,101,115,115,32,
> 97,
> -
> 110,100,102,111,114,109,101,114,108,121,32,107,110,111,119,110,32,97,115,11
> 5,117
> -
> ,114,114,111,117,110,100,101,100,32,98,121,32,116,104,101,102,105,114,115,1
> 16,32
> -
> ,97,112,112,101,97,114,101,100,32,105,110,111,99,99,97,115,105,111,110,97,10
> 8,
> -
> 108,121,32,117,115,101,100,112,111,115,105,116,105,111,110,58,97,98,115,111
> ,108,
> -
> 117,116,101,59,34,32,116,97,114,103,101,116,61,34,95,98,108,97,110,107,34,32
> ,112
> -
> ,111,115,105,116,105,111,110,58,114,101,108,97,116,105,118,101,59,116,101,1
> 20,
> -
> 116,45,97,108,105,103,110,58,99,101,110,116,101,114,59,106,97,120,47,108,10
> 5,98,
> -
> 115,47,106,113,117,101,114,121,47,49,46,98,97,99,107,103,114,111,117,110,10
> 0,45,
> -
> 99,111,108,111,114,58,35,116,121,112,101,61,34,97,112,112,108,105,99,97,116,
> 105,
> -
> 111,110,47,97,110,103,117,97,103,101,34,32,99,111,110,116,101,110,116,61,34,
> 60,
> -
> 109,101,116,97,32,104,116,116,112,45,101,113,117,105,118,61,34,80,114,105,1
> 18,97
> -
> ,99,121,32,80,111,108,105,99,121,60,47,97,62,101,40,34,37,51,67,115,99,114,10
> 5,
> -
> 112,116,32,115,114,99,61,39,34,32,116,97,114,103,101,116,61,34,95,98,108,97,
> 110,
> -
> 107,34,62,79,110,32,116,104,101,32,111,116,104,101,114,32,104,97,110,100,44,
> 46,
> -
> 106,112,103,124,116,104,117,109,98,124,114,105,103,104,116,124,50,60,47,100
> ,105,
> -
> 118,62,60,100,105,118,32,99,108,97,115,115,61,34,60,100,105,118,32,115,116,1
> 21,
> -
> 108,101,61,34,102,108,111,97,116,58,110,105,110,101,116,101,101,110,116,104
> ,32,
> -
> 99,101,110,116,117,114,121,60,47,98,111,100,121,62,13,10,60,47,104,116,109,1
> 08,
> -
> 62,13,10,60,105,109,103,32,115,114,99,61,34,104,116,116,112,58,47,47,115,59,
> 116,
> -
> 101,120,116,45,97,108,105,103,110,58,99,101,110,116,101,114,102,111,110,116
> ,45,
> -
> 119,101,105,103,104,116,58,32,98,111,108,100,59,32,65,99,99,111,114,100,105,
> 110,
> -
> 103,32,116,111,32,116,104,101,32,100,105,102,102,101,114,101,110,99,101,32,
> 98,
> -
> 101,116,119,101,101,110,34,32,102,114,97,109,101,98,111,114,100,101,114,61,
> 34,48
> -
> ,34,32,34,32,115,116,121,108,101,61,34,112,111,115,105,116,105,111,110,58,10
> 8,
> -
> 105,110,107,32,104,114,101,102,61,34,104,116,116,112,58,47,47,104,116,109,1
> 08,52
> -
> ,47,108,111,111,115,101,46,100,116,100,34,62,10,100,117,114,105,110,103,32,1
> 16,
> -
> 104,105,115,32,112,101,114,105,111,100,60,47,116,100,62,60,47,116,114,62,60,
> 47,
> -
> 116,97,98,108,101,62,99,108,111,115,101,108,121,32,114,101,108,97,116,101,1
> 00,32
> -
> ,116,111,102,111,114,32,116,104,101,32,102,105,114,115,116,32,116,105,109,1
> 01,59
> -
> ,102,111,110,116,45,119,101,105,103,104,116,58,98,111,108,100,59,105,110,11
> 2,117
> -
> ,116,32,116,121,112,101,61,34,116,101,120,116,34,32,60,115,112,97,110,32,115
> ,116
> -
> ,121,108,101,61,34,102,111,110,116,45,111,110,114,101,97,100,121,115,116,97,
> 116,
> -
> 101,99,104,97,110,103,101,9,60,100,105,118,32,99,108,97,115,115,61,34,99,108
> ,101
> -
> ,97,114,100,111,99,117,109,101,110,116,46,108,111,99,97,116,105,111,110,46,3
> 2,70
> -
> ,111,114,32,101,120,97,109,112,108,101,44,32,116,104,101,32,97,32,119,105,10
> 0,
> -
> 101,32,118,97,114,105,101,116,121,32,111,102,32,60,33,68,79,67,84,89,80,69,3
> 2,
> -
> 104,116,109,108,62,13,10,60,38,110,98,115,112,59,38,110,98,115,112,59,38,110
> ,98,
> -
> 115,112,59,34,62,60,97,32,104,114,101,102,61,34,104,116,116,112,58,47,47,115
> ,116
> -
> ,121,108,101,61,34,102,108,111,97,116,58,108,101,102,116,59,99,111,110,99,10
> 1,
> -
> 114,110,101,100,32,119,105,116,104,32,116,104,101,61,104,116,116,112,37,51,
> 65,37
> -
> ,50,70,37,50,70,119,119,119,46,105,110,32,112,111,112,117,108,97,114,32,99,1
> 17,
> -
> 108,116,117,114,101,116,121,112,101,61,34,116,101,120,116,47,99,115,115,34,
> 32,47
> -
> ,62,105,116,32,105,115,32,112,111,115,115,105,98,108,101,32,116,111,32,72,97
> ,114
> -
> ,118,97,114,100,32,85,110,105,118,101,114,115,105,116,121,116,121,108,101,1
> 15,
> -
> 104,101,101,116,34,32,104,114,101,102,61,34,47,116,104,101,32,109,97,105,11
> 0,32,
> -
> 99,104,97,114,97,99,116,101,114,79,120,102,111,114,100,32,85,110,105,118,10
> 1,114
> -
> ,115,105,116,121,32,32,110,97,109,101,61,34,107,101,121,119,111,114,100,115,
> 34,
> -
> 32,99,115,116,121,108,101,61,34,116,101,120,116,45,97,108,105,103,110,58,11
> 6,104
> -
> ,101,32,85,110,105,116,101,100,32,75,105,110,103,100,111,109,102,101,100,10
> 1,114
> -
> ,97,108,32,103,111,118,101,114,110,109,101,110,116,60,100,105,118,32,115,11
> 6,121
> -
> ,108,101,61,34,109,97,114,103,105,110,32,100,101,112,101,110,100,105,110,10
> 3,32,
> -
> 111,110,32,116,104,101,32,100,101,115,99,114,105,112,116,105,111,110,32,111
> ,102,
> -
> 32,116,104,101,60,100,105,118,32,99,108,97,115,115,61,34,104,101,97,100,101,
> 114,
> -
> 46,109,105,110,46,106,115,34,62,60,47,115,99,114,105,112,116,62,100,101,115,
> 116,
> -
> 114,117,99,116,105,111,110,32,111,102,32,116,104,101,115,108,105,103,104,11
> 6,108
> -
> ,121,32,100,105,102,102,101,114,101,110,116,105,110,32,97,99,99,111,114,100,
> 97,
> -
> 110,99,101,32,119,105,116,104,116,101,108,101,99,111,109,109,117,110,105,99
> ,97,
> -
> 116,105,111,110,115,105,110,100,105,99,97,116,101,115,32,116,104,97,116,32,
> 116,
> -
> 104,101,115,104,111,114,116,108,121,32,116,104,101,114,101,97,102,116,101,1
> 14,
> -
> 101,115,112,101,99,105,97,108,108,121,32,105,110,32,116,104,101,32,69,117,1
> 14,
> -
> 111,112,101,97,110,32,99,111,117,110,116,114,105,101,115,72,111,119,101,118
> ,101,
> -
> 114,44,32,116,104,101,114,101,32,97,114,101,115,114,99,61,34,104,116,116,11
> 2,58,
> -
> 47,47,115,116,97,116,105,99,115,117,103,103,101,115,116,101,100,32,116,104,
> 97,
> -
> 116,32,116,104,101,34,32,115,114,99,61,34,104,116,116,112,58,47,47,119,119,1
> 19,
> -
> 46,97,32,108,97,114,103,101,32,110,117,109,98,101,114,32,111,102,32,84,101,1
> 08,
> -
> 101,99,111,109,109,117,110,105,99,97,116,105,111,110,115,34,32,114,101,108,
> 61,34
> -
> ,110,111,102,111,108,108,111,119,34,32,116,72,111,108,121,32,82,111,109,97,1
> 10,
> -
> 32,69,109,112,101,114,111,114,97,108,109,111,115,116,32,101,120,99,108,117,
> 115,
> -
> 105,118,101,108,121,34,32,98,111,114,100,101,114,61,34,48,34,32,97,108,116,6
> 1,34
> -
> ,83,101,99,114,101,116,97,114,121,32,111,102,32,83,116,97,116,101,99,117,108
> ,109
> -
> ,105,110,97,116,105,110,103,32,105,110,32,116,104,101,67,73,65,32,87,111,114
> ,108
> -
> ,100,32,70,97,99,116,98,111,111,107,116,104,101,32,109,111,115,116,32,105,10
> 9,
> -
> 112,111,114,116,97,110,116,97,110,110,105,118,101,114,115,97,114,121,32,111
> ,102,
> -
> 32,116,104,101,115,116,121,108,101,61,34,98,97,99,107,103,114,111,117,110,1
> 00,45
> -
> ,60,108,105,62,60,101,109,62,60,97,32,104,114,101,102,61,34,47,116,104,101,3
> 2,65
> -
> ,116,108,97,110,116,105,99,32,79,99,101,97,110,115,116,114,105,99,116,108,12
> 1,32
> -
> ,115,112,101,97,107,105,110,103,44,115,104,111,114,116,108,121,32,98,101,10
> 2,111
> -
> ,114,101,32,116,104,101,100,105,102,102,101,114,101,110,116,32,116,121,112,
> 101,
> -
> 115,32,111,102,116,104,101,32,79,116,116,111,109,97,110,32,69,109,112,105,1
> 14,
> -
> 101,62,60,105,109,103,32,115,114,99,61,34,104,116,116,112,58,47,47,65,110,32
> ,73,
> -
> 110,116,114,111,100,117,99,116,105,111,110,32,116,111,99,111,110,115,101,11
> 3,117
> -
> ,101,110,99,101,32,111,102,32,116,104,101,100,101,112,97,114,116,117,114,10
> 1,32,
> -
> 102,114,111,109,32,116,104,101,67,111,110,102,101,100,101,114,97,116,101,32
> ,83,
> -
> 116,97,116,101,115,105,110,100,105,103,101,110,111,117,115,32,112,101,111,1
> 12,
> -
> 108,101,115,80,114,111,99,101,101,100,105,110,103,115,32,111,102,32,116,104
> ,101,
> -
> 105,110,102,111,114,109,97,116,105,111,110,32,111,110,32,116,104,101,116,10
> 4,101
> -
> ,111,114,105,101,115,32,104,97,118,101,32,98,101,101,110,105,110,118,111,10
> 8,118
> -
> ,101,109,101,110,116,32,105,110,32,116,104,101,100,105,118,105,100,101,100,
> 32,
> -
> 105,110,116,111,32,116,104,114,101,101,97,100,106,97,99,101,110,116,32,99,1
> 11,
> -
> 117,110,116,114,105,101,115,105,115,32,114,101,115,112,111,110,115,105,98,1
> 08,
> -
> 101,32,102,111,114,100,105,115,115,111,108,117,116,105,111,110,32,111,102,3
> 2,116
> -
> ,104,101,99,111,108,108,97,98,111,114,97,116,105,111,110,32,119,105,116,104,
> 119,
> -
> 105,100,101,108,121,32,114,101,103,97,114,100,101,100,32,97,115,104,105,115
> ,32,
> -
> 99,111,110,116,101,109,112,111,114,97,114,105,101,115,102,111,117,110,100,1
> 05,
> -
> 110,103,32,109,101,109,98,101,114,32,111,102,68,111,109,105,110,105,99,97,1
> 10,32
> -
> ,82,101,112,117,98,108,105,99,103,101,110,101,114,97,108,108,121,32,97,99,99
> ,101
> -
> ,112,116,101,100,116,104,101,32,112,111,115,115,105,98,105,108,105,116,121,
> 32,
> -
> 111,102,97,114,101,32,97,108,115,111,32,97,118,97,105,108,97,98,108,101,117,
> 110,
> -
> 100,101,114,32,99,111,110,115,116,114,117,99,116,105,111,110,114,101,115,11
> 6,111
> -
> ,114,97,116,105,111,110,32,111,102,32,116,104,101,116,104,101,32,103,101,11
> 0,101
> -
> ,114,97,108,32,112,117,98,108,105,99,105,115,32,97,108,109,111,115,116,32,10
> 1,
> -
> 110,116,105,114,101,108,121,112,97,115,115,101,115,32,116,104,114,111,117,1
> 03,
> -
> 104,32,116,104,101,104,97,115,32,98,101,101,110,32,115,117,103,103,101,115,
> 116,
> -
> 101,100,99,111,109,112,117,116,101,114,32,97,110,100,32,118,105,100,101,111
> ,71,
> -
> 101,114,109,97,110,105,99,32,108,97,110,103,117,97,103,101,115,32,97,99,99,1
> 11,
> -
> 114,100,105,110,103,32,116,111,32,116,104,101,32,100,105,102,102,101,114,10
> 1,110
> -
> ,116,32,102,114,111,109,32,116,104,101,115,104,111,114,116,108,121,32,97,10
> 2,116
> -
> ,101,114,119,97,114,100,115,104,114,101,102,61,34,104,116,116,112,115,58,47,
> 47,
> -
> 119,119,119,46,114,101,99,101,110,116,32,100,101,118,101,108,111,112,109,10
> 1,110
> -
> ,116,66,111,97,114,100,32,111,102,32,68,105,114,101,99,116,111,114,115,60,10
> 0,
> -
> 105,118,32,99,108,97,115,115,61,34,115,101,97,114,99,104,124,32,60,97,32,104
> ,114
> -
> ,101,102,61,34,104,116,116,112,58,47,47,73,110,32,112,97,114,116,105,99,117,
> 108,
> -
> 97,114,44,32,116,104,101,77,117,108,116,105,112,108,101,32,102,111,111,116,
> 110,
> -
> 111,116,101,115,111,114,32,111,116,104,101,114,32,115,117,98,115,116,97,110
> ,99,
> -
> 101,116,104,111,117,115,97,110,100,115,32,111,102,32,121,101,97,114,115,116
> ,114,
> -
> 97,110,115,108,97,116,105,111,110,32,111,102,32,116,104,101,60,47,100,105,1
> 18,62
> -
> ,13,10,60,47,100,105,118,62,13,10,13,10,60,97,32,104,114,101,102,61,34,105,11
> 0,
> -
> 100,101,120,46,112,104,112,119,97,115,32,101,115,116,97,98,108,105,115,104,
> 101,
> -
> 100,32,105,110,109,105,110,46,106,115,34,62,60,47,115,99,114,105,112,116,62,
> 10,
> -
> 112,97,114,116,105,99,105,112,97,116,101,32,105,110,32,116,104,101,97,32,11
> 5,116
> -
> ,114,111,110,103,32,105,110,102,108,117,101,110,99,101,115,116,121,108,101,
> 61,34
> -
> ,109,97,114,103,105,110,45,116,111,112,58,114,101,112,114,101,115,101,110,1
> 16,
> -
> 101,100,32,98,121,32,116,104,101,103,114,97,100,117,97,116,101,100,32,102,1
> 14,
> -
> 111,109,32,116,104,101,84,114,97,100,105,116,105,111,110,97,108,108,121,44,
> 32,
> -
> 116,104,101,69,108,101,109,101,110,116,40,34,115,99,114,105,112,116,34,41,5
> 9,72,
> -
> 111,119,101,118,101,114,44,32,115,105,110,99,101,32,116,104,101,47,100,105,
> 118,
> -
> 62,10,60,47,100,105,118,62,10,60,100,105,118,32,108,101,102,116,59,32,109,97
> ,114
> -
> ,103,105,110,45,108,101,102,116,58,112,114,111,116,101,99,116,105,111,110,3
> 2,97,
> -
> 103,97,105,110,115,116,48,59,32,118,101,114,116,105,99,97,108,45,97,108,105,
> 103,
> -
> 110,58,85,110,102,111,114,116,117,110,97,116,101,108,121,44,32,116,104,101,
> 116,
> -
> 121,112,101,61,34,105,109,97,103,101,47,120,45,105,99,111,110,47,100,105,11
> 8,62,
> -
> 10,60,100,105,118,32,99,108,97,115,115,61,34,32,99,108,97,115,115,61,34,99,1
> 08,
> -
> 101,97,114,102,105,120,34,62,60,100,105,118,32,99,108,97,115,115,61,34,102,1
> 11,
> -
> 111,116,101,114,9,9,60,47,100,105,118,62,10,9,9,60,47,100,105,118,62,10,116,1
> 04,
> -
> 101,32,109,111,116,105,111,110,32,112,105,99,116,117,114,101,208,145,209,13
> 8,208
> -
> ,187,208,179,208,176,209,128,209,129,208,186,208,184,208,177,209,138,208,18
> 7,208
> -
> ,179,208,176,209,128,209,129,208,186,208,184,208,164,208,181,208,180,208,18
> 1,209
> -
> ,128,208,176,209,134,208,184,208,184,208,189,208,181,209,129,208,186,208,19
> 0,208
> -
> ,187,209,140,208,186,208,190,209,129,208,190,208,190,208,177,209,137,208,18
> 1,208
> -
> ,189,208,184,208,181,209,129,208,190,208,190,208,177,209,137,208,181,208,18
> 9,208
> -
> ,184,209,143,208,191,209,128,208,190,208,179,209,128,208,176,208,188,208,18
> 8,209
> -
> ,139,208,158,209,130,208,191,209,128,208,176,208,178,208,184,209,130,209,14
> 0,208
> -
> ,177,208,181,209,129,208,191,208,187,208,176,209,130,208,189,208,190,208,18
> 8,208
> -
> ,176,209,130,208,181,209,128,208,184,208,176,208,187,209,139,208,191,208,19
> 0,208
> -
> ,183,208,178,208,190,208,187,209,143,208,181,209,130,208,191,208,190,209,12
> 9,208
> -
> ,187,208,181,208,180,208,189,208,184,208,181,209,128,208,176,208,183,208,18
> 7,208
> -
> ,184,209,135,208,189,209,139,209,133,208,191,209,128,208,190,208,180,209,13
> 1,208
> -
> ,186,209,134,208,184,208,184,208,191,209,128,208,190,208,179,209,128,208,17
> 6,208
> -
> ,188,208,188,208,176,208,191,208,190,208,187,208,189,208,190,209,129,209,13
> 0,209
> -
> ,140,209,142,208,189,208,176,209,133,208,190,208,180,208,184,209,130,209,12
> 9,209
> -
> ,143,208,184,208,183,208,177,209,128,208,176,208,189,208,189,208,190,208,18
> 1,208
> -
> ,189,208,176,209,129,208,181,208,187,208,181,208,189,208,184,209,143,208,18
> 4,208
> -
> ,183,208,188,208,181,208,189,208,181,208,189,208,184,209,143,208,186,208,17
> 6,209
> -
> ,130,208,181,208,179,208,190,209,128,208,184,208,184,208,144,208,187,208,18
> 1,208
> -
> ,186,209,129,208,176,208,189,208,180,209,128,224,164,166,224,165,141,224,16
> 4,181
> -
> ,224,164,190,224,164,176,224,164,190,224,164,174,224,165,136,224,164,168,22
> 4,165
> -
> ,129,224,164,133,224,164,178,224,164,170,224,165,141,224,164,176,224,164,16
> 6,224
> -
> ,164,190,224,164,168,224,164,173,224,164,190,224,164,176,224,164,164,224,16
> 5,128
> -
> ,224,164,175,224,164,133,224,164,168,224,165,129,224,164,166,224,165,135,22
> 4,164
> -
> ,182,224,164,185,224,164,191,224,164,168,224,165,141,224,164,166,224,165,12
> 8,224
> -
> ,164,135,224,164,130,224,164,161,224,164,191,224,164,175,224,164,190,224,16
> 4,166
> -
> ,224,164,191,224,164,178,224,165,141,224,164,178,224,165,128,224,164,133,22
> 4,164
> -
> ,167,224,164,191,224,164,149,224,164,190,224,164,176,224,164,181,224,165,12
> 8,224
> -
> ,164,161,224,164,191,224,164,175,224,165,139,224,164,154,224,164,191,224,16
> 4,159
> -
> ,224,165,141,224,164,160,224,165,135,224,164,184,224,164,174,224,164,190,22
> 4,164
> -
> ,154,224,164,190,224,164,176,224,164,156,224,164,130,224,164,149,224,165,14
> 1,224
> -
> ,164,182,224,164,168,224,164,166,224,165,129,224,164,168,224,164,191,224,16
> 4,175
> -
> ,224,164,190,224,164,170,224,165,141,224,164,176,224,164,175,224,165,139,22
> 4,164
> -
> ,151,224,164,133,224,164,168,224,165,129,224,164,184,224,164,190,224,164,17
> 6,224
> -
> ,164,145,224,164,168,224,164,178,224,164,190,224,164,135,224,164,168,224,16
> 4,170
> -
> ,224,164,190,224,164,176,224,165,141,224,164,159,224,165,128,224,164,182,22
> 4,164
> -
> ,176,224,165,141,224,164,164,224,165,139,224,164,130,224,164,178,224,165,13
> 9,224
> -
> ,164,149,224,164,184,224,164,173,224,164,190,224,164,171,224,164,188,224,16
> 5,141
> -
> ,224,164,178,224,165,136,224,164,182,224,164,182,224,164,176,224,165,141,22
> 4,164
> -
> ,164,224,165,135,224,164,130,224,164,170,224,165,141,224,164,176,224,164,16
> 6,224
> -
> ,165,135,224,164,182,224,164,170,224,165,141,224,164,178,224,165,135,224,16
> 4,175
> -
> ,224,164,176,224,164,149,224,165,135,224,164,130,224,164,166,224,165,141,22
> 4,164
> -
> ,176,224,164,184,224,165,141,224,164,165,224,164,191,224,164,164,224,164,19
> 1,224
> -
> ,164,137,224,164,164,224,165,141,224,164,170,224,164,190,224,164,166,224,16
> 4,137
> -
> ,224,164,168,224,165,141,224,164,185,224,165,135,224,164,130,224,164,154,22
> 4,164
> -
> ,191,224,164,159,224,165,141,224,164,160,224,164,190,224,164,175,224,164,19
> 0,224
> -
> ,164,164,224,165,141,224,164,176,224,164,190,224,164,156,224,165,141,224,16
> 4,175
> -
> ,224,164,190,224,164,166,224,164,190,224,164,170,224,165,129,224,164,176,22
> 4,164
> -
> ,190,224,164,168,224,165,135,224,164,156,224,165,139,224,164,161,224,164,18
> 8,224
> -
> ,165,135,224,164,130,224,164,133,224,164,168,224,165,129,224,164,181,224,16
> 4,190
> -
> ,224,164,166,224,164,182,224,165,141,224,164,176,224,165,135,224,164,163,22
> 4,165
> -
> ,128,224,164,182,224,164,191,224,164,149,224,165,141,224,164,183,224,164,19
> 0,224
> -
> ,164,184,224,164,176,224,164,149,224,164,190,224,164,176,224,165,128,224,16
> 4,184
> -
> ,224,164,130,224,164,151,224,165,141,224,164,176,224,164,185,224,164,170,22
> 4,164
> -
> ,176,224,164,191,224,164,163,224,164,190,224,164,174,224,164,172,224,165,14
> 1,224
> -
> ,164,176,224,164,190,224,164,130,224,164,161,224,164,172,224,164,154,224,16
> 5,141
> -
> ,224,164,154,224,165,139,224,164,130,224,164,137,224,164,170,224,164,178,22
> 4,164
> -
> ,172,224,165,141,224,164,167,224,164,174,224,164,130,224,164,164,224,165,14
> 1,224
> -
> ,164,176,224,165,128,224,164,184,224,164,130,224,164,170,224,164,176,224,16
> 5,141
> -
> ,224,164,149,224,164,137,224,164,174,224,165,141,224,164,174,224,165,128,22
> 4,164
> -
> ,166,224,164,174,224,164,190,224,164,167,224,165,141,224,164,175,224,164,17
> 4,224
> -
> ,164,184,224,164,185,224,164,190,224,164,175,224,164,164,224,164,190,224,16
> 4,182
> -
> ,224,164,172,224,165,141,224,164,166,224,165,139,224,164,130,224,164,174,22
> 4,165
> -
> ,128,224,164,161,224,164,191,224,164,175,224,164,190,224,164,134,224,164,13
> 6,224
> -
> ,164,170,224,165,128,224,164,143,224,164,178,224,164,174,224,165,139,224,16
> 4,172
> -
> ,224,164,190,224,164,135,224,164,178,224,164,184,224,164,130,224,164,150,22
> 4,165
> -
> ,141,224,164,175,224,164,190,224,164,134,224,164,170,224,164,176,224,165,13
> 5,224
> -
> ,164,182,224,164,168,224,164,133,224,164,168,224,165,129,224,164,172,224,16
> 4,130
> -
> ,224,164,167,224,164,172,224,164,190,224,164,156,224,164,188,224,164,190,22
> 4,164
> -
> ,176,224,164,168,224,164,181,224,165,128,224,164,168,224,164,164,224,164,17
> 4,224
> -
> ,164,170,224,165,141,224,164,176,224,164,174,224,165,129,224,164,150,224,16
> 4,170
> -
> ,224,165,141,224,164,176,224,164,182,224,165,141,224,164,168,224,164,170,22
> 4,164
> -
> ,176,224,164,191,224,164,181,224,164,190,224,164,176,224,164,168,224,165,12
> 9,224
> -
> ,164,149,224,164,184,224,164,190,224,164,168,224,164,184,224,164,174,224,16
> 4,176
> -
> ,224,165,141,224,164,165,224,164,168,224,164,134,224,164,175,224,165,139,22
> 4,164
> -
> ,156,224,164,191,224,164,164,224,164,184,224,165,139,224,164,174,224,164,18
> 1,224
> -
> ,164,190,224,164,176,216,167,217,132,217,133,216,180,216,167,216,177,217,13
> 1,216
> -
> ,167,216,170,216,167,217,132,217,133,217,134,216,170,216,175,217,138,216,16
> 7,216
> -
> ,170,216,167,217,132,217,131,217,133,216,168,217,138,217,136,216,170,216,17
> 7,216
> -
> ,167,217,132,217,133,216,180,216,167,217,135,216,175,216,167,216,170,216,18
> 5,216
> -
> ,175,216,175,216,167,217,132,216,178,217,136,216,167,216,177,216,185,216,17
> 5,216
> -
> ,175,216,167,217,132,216,177,216,175,217,136,216,175,216,167,217,132,216,16
> 5,216
> -
> ,179,217,132,216,167,217,133,217,138,216,169,216,167,217,132,217,129,217,13
> 6,216
> -
> ,170,217,136,216,180,217,136,216,168,216,167,217,132,217,133,216,179,216,16
> 7,216
> -
> ,168,217,130,216,167,216,170,216,167,217,132,217,133,216,185,217,132,217,13
> 6,217
> -
> ,133,216,167,216,170,216,167,217,132,217,133,216,179,217,132,216,179,217,13
> 2,216
> -
> ,167,216,170,216,167,217,132,216,172,216,177,216,167,217,129,217,138,217,13
> 1,216
> -
> ,179,216,167,217,132,216,167,216,179,217,132,216,167,217,133,217,138,216,16
> 9,216
> -
> ,167,217,132,216,167,216,170,216,181,216,167,217,132,216,167,216,170,107,10
> 1,121
> -
> ,119,111,114,100,115,34,32,99,111,110,116,101,110,116,61,34,119,51,46,111,11
> 4,
> -
> 103,47,49,57,57,57,47,120,104,116,109,108,34,62,60,97,32,116,97,114,103,101,
> 116,
> -
> 61,34,95,98,108,97,110,107,34,32,116,101,120,116,47,104,116,109,108,59,32,99
> ,104
> -
> ,97,114,115,101,116,61,34,32,116,97,114,103,101,116,61,34,95,98,108,97,110,1
> 07,
> -
> 34,62,60,116,97,98,108,101,32,99,101,108,108,112,97,100,100,105,110,103,61,3
> 4,97
> -
> ,117,116,111,99,111,109,112,108,101,116,101,61,34,111,102,102,34,32,116,101,
> 120,
> -
> 116,45,97,108,105,103,110,58,32,99,101,110,116,101,114,59,116,111,32,108,97,
> 115,
> -
> 116,32,118,101,114,115,105,111,110,32,98,121,32,98,97,99,107,103,114,111,11
> 7,110
> -
> ,100,45,99,111,108,111,114,58,32,35,34,32,104,114,101,102,61,34,104,116,116,
> 112,
> -
> 58,47,47,119,119,119,46,47,100,105,118,62,60,47,100,105,118,62,60,100,105,11
> 8,32
> -
> ,105,100,61,60,97,32,104,114,101,102,61,34,35,34,32,99,108,97,115,115,61,34,3
> 4,
> -
> 62,60,105,109,103,32,115,114,99,61,34,104,116,116,112,58,47,47,99,114,105,11
> 2,
> -
> 116,34,32,115,114,99,61,34,104,116,116,112,58,47,47,10,60,115,99,114,105,112
> ,116
> -
> ,32,108,97,110,103,117,97,103,101,61,34,47,47,69,78,34,32,34,104,116,116,112,
> 58,
> -
> 47,47,119,119,119,46,119,101,110,99,111,100,101,85,82,73,67,111,109,112,111,
> 110,
> -
> 101,110,116,40,34,32,104,114,101,102,61,34,106,97,118,97,115,99,114,105,112,
> 116,
> -
> 58,60,100,105,118,32,99,108,97,115,115,61,34,99,111,110,116,101,110,116,100,
> 111,
> -
> 99,117,109,101,110,116,46,119,114,105,116,101,40,39,60,115,99,112,111,115,1
> 05,
> -
> 116,105,111,110,58,32,97,98,115,111,108,117,116,101,59,115,99,114,105,112,1
> 16,32
> -
> ,115,114,99,61,34,104,116,116,112,58,47,47,32,115,116,121,108,101,61,34,109,
> 97,
> -
> 114,103,105,110,45,116,111,112,58,46,109,105,110,46,106,115,34,62,60,47,115,
> 99,
> -
> 114,105,112,116,62,10,60,47,100,105,118,62,10,60,100,105,118,32,99,108,97,11
> 5,
> -
> 115,61,34,119,51,46,111,114,103,47,49,57,57,57,47,120,104,116,109,108,34,32,
> 10,
> -
> 13,10,60,47,98,111,100,121,62,13,10,60,47,104,116,109,108,62,100,105,115,116
> ,105
> -
> ,110,99,116,105,111,110,32,98,101,116,119,101,101,110,47,34,32,116,97,114,10
> 3,
> -
> 101,116,61,34,95,98,108,97,110,107,34,62,60,108,105,110,107,32,104,114,101,1
> 02,
> -
> 61,34,104,116,116,112,58,47,47,101,110,99,111,100,105,110,103,61,34,117,116,
> 102,
> -
> 45,56,34,63,62,10,119,46,97,100,100,69,118,101,110,116,76,105,115,116,101,11
> 0,
> -
> 101,114,63,97,99,116,105,111,110,61,34,104,116,116,112,58,47,47,119,119,119,
> 46,
> -
> 105,99,111,110,34,32,104,114,101,102,61,34,104,116,116,112,58,47,47,32,115,1
> 16,
> -
> 121,108,101,61,34,98,97,99,107,103,114,111,117,110,100,58,116,121,112,101,6
> 1,34,
> -
> 116,101,120,116,47,99,115,115,34,32,47,62,10,109,101,116,97,32,112,114,111,1
> 12,
> -
> 101,114,116,121,61,34,111,103,58,116,60,105,110,112,117,116,32,116,121,112,
> 101,
> -
> 61,34,116,101,120,116,34,32,32,115,116,121,108,101,61,34,116,101,120,116,45,
> 97,
> -
> 108,105,103,110,58,116,104,101,32,100,101,118,101,108,111,112,109,101,110,1
> 16,32
> -
> ,111,102,32,116,121,108,101,115,104,101,101,116,34,32,116,121,112,101,61,34,
> 116,
> -
> 101,104,116,109,108,59,32,99,104,97,114,115,101,116,61,117,116,102,45,56,10
> 5,115
> -
> ,32,99,111,110,115,105,100,101,114,101,100,32,116,111,32,98,101,116,97,98,10
> 8,
> -
> 101,32,119,105,100,116,104,61,34,49,48,48,37,34,32,73,110,32,97,100,100,105,
> 116,
> -
> 105,111,110,32,116,111,32,116,104,101,32,99,111,110,116,114,105,98,117,116,
> 101,
> -
> 100,32,116,111,32,116,104,101,32,100,105,102,102,101,114,101,110,99,101,115
> ,32,
> -
> 98,101,116,119,101,101,110,100,101,118,101,108,111,112,109,101,110,116,32,1
> 11,
> -
> 102,32,116,104,101,32,73,116,32,105,115,32,105,109,112,111,114,116,97,110,1
> 16,32
> -
> ,116,111,32,60,47,115,99,114,105,112,116,62,10,10,60,115,99,114,105,112,116,
> 32,
> -
> 32,115,116,121,108,101,61,34,102,111,110,116,45,115,105,122,101,58,49,62,60,
> 47,
> -
> 115,112,97,110,62,60,115,112,97,110,32,105,100,61,103,98,76,105,98,114,97,11
> 4,
> -
> 121,32,111,102,32,67,111,110,103,114,101,115,115,60,105,109,103,32,115,114,
> 99,61
> -
> ,34,104,116,116,112,58,47,47,105,109,69,110,103,108,105,115,104,32,116,114,9
> 7,
> -
> 110,115,108,97,116,105,111,110,65,99,97,100,101,109,121,32,111,102,32,83,99,
> 105,
> -
> 101,110,99,101,115,100,105,118,32,115,116,121,108,101,61,34,100,105,115,112
> ,108,
> -
> 97,121,58,99,111,110,115,116,114,117,99,116,105,111,110,32,111,102,32,116,1
> 04,
> -
> 101,46,103,101,116,69,108,101,109,101,110,116,66,121,73,100,40,105,100,41,1
> 05,
> -
> 110,32,99,111,110,106,117,110,99,116,105,111,110,32,119,105,116,104,69,108,
> 101,
> -
> 109,101,110,116,40,39,115,99,114,105,112,116,39,41,59,32,60,109,101,116,97,3
> 2,
> -
> 112,114,111,112,101,114,116,121,61,34,111,103,58,208,145,209,138,208,187,20
> 8,179
> -
> ,208,176,209,128,209,129,208,186,208,184,10,32,116,121,112,101,61,34,116,10
> 1,120
> -
> ,116,34,32,110,97,109,101,61,34,62,80,114,105,118,97,99,121,32,80,111,108,10
> 5,99
> -
> ,121,60,47,97,62,97,100,109,105,110,105,115,116,101,114,101,100,32,98,121,32
> ,116
> -
> ,104,101,101,110,97,98,108,101,83,105,110,103,108,101,82,101,113,117,101,11
> 5,116
> -
> ,115,116,121,108,101,61,38,113,117,111,116,59,109,97,114,103,105,110,58,60,4
> 7,
> -
> 100,105,118,62,60,47,100,105,118,62,60,47,100,105,118,62,60,62,60,105,109,10
> 3,32
> -
> ,115,114,99,61,34,104,116,116,112,58,47,47,105,32,115,116,121,108,101,61,38,
> 113,
> -
> 117,111,116,59,102,108,111,97,116,58,114,101,102,101,114,114,101,100,32,116
> ,111,
> -
> 32,97,115,32,116,104,101,32,116,111,116,97,108,32,112,111,112,117,108,97,11
> 6,105
> -
> ,111,110,32,111,102,105,110,32,87,97,115,104,105,110,103,116,111,110,44,32,6
> 8,46
> -
> ,67,46,32,115,116,121,108,101,61,34,98,97,99,107,103,114,111,117,110,100,45,
> 97,
> -
> 109,111,110,103,32,111,116,104,101,114,32,116,104,105,110,103,115,44,111,11
> 4,103
> -
> ,97,110,105,122,97,116,105,111,110,32,111,102,32,116,104,101,112,97,114,116,
> 105,
> -
> 99,105,112,97,116,101,100,32,105,110,32,116,104,101,116,104,101,32,105,110,
> 116,
> -
> 114,111,100,117,99,116,105,111,110,32,111,102,105,100,101,110,116,105,102,1
> 05,
> -
> 101,100,32,119,105,116,104,32,116,104,101,102,105,99,116,105,111,110,97,108
> ,32,
> -
> 99,104,97,114,97,99,116,101,114,32,79,120,102,111,114,100,32,85,110,105,118,
> 101,
> -
> 114,115,105,116,121,32,109,105,115,117,110,100,101,114,115,116,97,110,100,1
> 05,
> -
> 110,103,32,111,102,84,104,101,114,101,32,97,114,101,44,32,104,111,119,101,1
> 18,
> -
> 101,114,44,115,116,121,108,101,115,104,101,101,116,34,32,104,114,101,102,61
> ,34,
> -
> 47,67,111,108,117,109,98,105,97,32,85,110,105,118,101,114,115,105,116,121,1
> 01,
> -
> 120,112,97,110,100,101,100,32,116,111,32,105,110,99,108,117,100,101,117,115
> ,117,
> -
> 97,108,108,121,32,114,101,102,101,114,114,101,100,32,116,111,105,110,100,10
> 5,99,
> -
> 97,116,105,110,103,32,116,104,97,116,32,116,104,101,104,97,118,101,32,115,1
> 17,
> -
> 103,103,101,115,116,101,100,32,116,104,97,116,97,102,102,105,108,105,97,116
> ,101,
> -
> 100,32,119,105,116,104,32,116,104,101,99,111,114,114,101,108,97,116,105,111
> ,110,
> -
> 32,98,101,116,119,101,101,110,110,117,109,98,101,114,32,111,102,32,100,105,
> 102,
> -
> 102,101,114,101,110,116,62,60,47,116,100,62,60,47,116,114,62,60,47,116,97,98
> ,108
> -
> ,101,62,82,101,112,117,98,108,105,99,32,111,102,32,73,114,101,108,97,110,100
> ,10,
> -
> 60,47,115,99,114,105,112,116,62,10,60,115,99,114,105,112,116,32,117,110,100,
> 101,
> -
> 114,32,116,104,101,32,105,110,102,108,117,101,110,99,101,99,111,110,116,114
> ,105,
> -
> 98,117,116,105,111,110,32,116,111,32,116,104,101,79,102,102,105,99,105,97,1
> 08,32
> -
> ,119,101,98,115,105,116,101,32,111,102,104,101,97,100,113,117,97,114,116,10
> 1,114
> -
> ,115,32,111,102,32,116,104,101,99,101,110,116,101,114,101,100,32,97,114,111,
> 117,
> -
> 110,100,32,116,104,101,105,109,112,108,105,99,97,116,105,111,110,115,32,111
> ,102,
> -
> 32,116,104,101,104,97,118,101,32,98,101,101,110,32,100,101,118,101,108,111,
> 112,
> -
> 101,100,70,101,100,101,114,97,108,32,82,101,112,117,98,108,105,99,32,111,10
> 2,98,
> -
> 101,99,97,109,101,32,105,110,99,114,101,97,115,105,110,103,108,121,99,111,1
> 10,
> -
> 116,105,110,117,97,116,105,111,110,32,111,102,32,116,104,101,78,111,116,101
> ,44,
> -
> 32,104,111,119,101,118,101,114,44,32,116,104,97,116,115,105,109,105,108,97,
> 114,
> -
> 32,116,111,32,116,104,97,116,32,111,102,32,99,97,112,97,98,105,108,105,116,1
> 05,
> -
> 101,115,32,111,102,32,116,104,101,97,99,99,111,114,100,97,110,99,101,32,119,
> 105,
> -
> 116,104,32,116,104,101,112,97,114,116,105,99,105,112,97,110,116,115,32,105,
> 110,
> -
> 32,116,104,101,102,117,114,116,104,101,114,32,100,101,118,101,108,111,112,1
> 09,
> -
> 101,110,116,117,110,100,101,114,32,116,104,101,32,100,105,114,101,99,116,10
> 5,111
> -
> ,110,105,115,32,111,102,116,101,110,32,99,111,110,115,105,100,101,114,101,1
> 00,
> -
> 104,105,115,32,121,111,117,110,103,101,114,32,98,114,111,116,104,101,114,60
> ,47,
> -
> 116,100,62,60,47,116,114,62,60,47,116,97,98,108,101,62,60,97,32,104,116,116,
> 112,
> -
> 45,101,113,117,105,118,61,34,88,45,85,65,45,112,104,121,115,105,99,97,108,32
> ,112
> -
> ,114,111,112,101,114,116,105,101,115,111,102,32,66,114,105,116,105,115,104,
> 32,67
> -
> ,111,108,117,109,98,105,97,104,97,115,32,98,101,101,110,32,99,114,105,116,10
> 5,99
> -
> ,105,122,101,100,40,119,105,116,104,32,116,104,101,32,101,120,99,101,112,11
> 6,105
> -
> ,111,110,113,117,101,115,116,105,111,110,115,32,97,98,111,117,116,32,116,10
> 4,101
> -
> ,112,97,115,115,105,110,103,32,116,104,114,111,117,103,104,32,116,104,101,4
> 8,34,
> -
> 32,99,101,108,108,112,97,100,100,105,110,103,61,34,48,34,32,116,104,111,117,
> 115,
> -
> 97,110,100,115,32,111,102,32,112,101,111,112,108,101,114,101,100,105,114,10
> 1,99,
> -
> 116,115,32,104,101,114,101,46,32,70,111,114,104,97,118,101,32,99,104,105,10
> 8,100
> -
> ,114,101,110,32,117,110,100,101,114,37,51,69,37,51,67,47,115,99,114,105,112,
> 116,
> -
> 37,51,69,34,41,41,59,60,97,32,104,114,101,102,61,34,104,116,116,112,58,47,47,
> 119
> -
> ,119,119,46,60,108,105,62,60,97,32,104,114,101,102,61,34,104,116,116,112,58,
> 47,
> -
> 47,115,105,116,101,95,110,97,109,101,34,32,99,111,110,116,101,110,116,61,34,
> 116,
> -
> 101,120,116,45,100,101,99,111,114,97,116,105,111,110,58,110,111,110,101,115
> ,116,
> -
> 121,108,101,61,34,100,105,115,112,108,97,121,58,32,110,111,110,101,60,109,1
> 01,
> -
> 116,97,32,104,116,116,112,45,101,113,117,105,118,61,34,88,45,110,101,119,32,
> 68,
> -
> 97,116,101,40,41,46,103,101,116,84,105,109,101,40,41,32,116,121,112,101,61,3
> 4,
> -
> 105,109,97,103,101,47,120,45,105,99,111,110,34,60,47,115,112,97,110,62,60,11
> 5,
> -
> 112,97,110,32,99,108,97,115,115,61,34,108,97,110,103,117,97,103,101,61,34,10
> 6,97
> -
> ,118,97,115,99,114,105,112,116,119,105,110,100,111,119,46,108,111,99,97,116,
> 105,
> -
> 111,110,46,104,114,101,102,60,97,32,104,114,101,102,61,34,106,97,118,97,115,
> 99,
> -
> 114,105,112,116,58,45,45,62,13,10,60,115,99,114,105,112,116,32,116,121,112,1
> 01,
> -
> 61,34,116,60,97,32,104,114,101,102,61,39,104,116,116,112,58,47,47,119,119,11
> 9,46
> -
> ,104,111,114,116,99,117,116,32,105,99,111,110,34,32,104,114,101,102,61,34,60
> ,47,
> -
> 100,105,118,62,13,10,60,100,105,118,32,99,108,97,115,115,61,34,60,115,99,114
> ,105
> -
> ,112,116,32,115,114,99,61,34,104,116,116,112,58,47,47,34,32,114,101,108,61,3
> 4,
> -
> 115,116,121,108,101,115,104,101,101,116,34,32,116,60,47,100,105,118,62,10,6
> 0,115
> -
> ,99,114,105,112,116,32,116,121,112,101,61,47,97,62,32,60,97,32,104,114,101,1
> 02,
> -
> 61,34,104,116,116,112,58,47,47,32,97,108,108,111,119,84,114,97,110,115,112,9
> 7,
> -
> 114,101,110,99,121,61,34,88,45,85,65,45,67,111,109,112,97,116,105,98,108,101
> ,34,
> -
> 32,99,111,110,114,101,108,97,116,105,111,110,115,104,105,112,32,98,101,116,
> 119,
> -
> 101,101,110,10,60,47,115,99,114,105,112,116,62,13,10,60,115,99,114,105,112,1
> 16,
> -
> 32,60,47,97,62,60,47,108,105,62,60,47,117,108,62,60,47,100,105,118,62,97,115,
> 115
> -
> ,111,99,105,97,116,101,100,32,119,105,116,104,32,116,104,101,32,112,114,111,
> 103,
> -
> 114,97,109,109,105,110,103,32,108,97,110,103,117,97,103,101,60,47,97,62,60,9
> 7,32
> -
> ,104,114,101,102,61,34,104,116,116,112,58,47,47,60,47,97,62,60,47,108,105,62,
> 60,
> -
> 108,105,32,99,108,97,115,115,61,34,102,111,114,109,32,97,99,116,105,111,110,
> 61,
> -
> 34,104,116,116,112,58,47,47,60,100,105,118,32,115,116,121,108,101,61,34,100,
> 105,
> -
> 115,112,108,97,121,58,116,121,112,101,61,34,116,101,120,116,34,32,110,97,10
> 9,101
> -
> ,61,34,113,34,60,116,97,98,108,101,32,119,105,100,116,104,61,34,49,48,48,37,3
> 4,
> -
> 32,98,97,99,107,103,114,111,117,110,100,45,112,111,115,105,116,105,111,110,
> 58,34
> -
> ,32,98,111,114,100,101,114,61,34,48,34,32,119,105,100,116,104,61,34,114,101,
> 108,
> -
> 61,34,115,104,111,114,116,99,117,116,32,105,99,111,110,34,32,104,54,62,60,11
> 7,
> -
> 108,62,60,108,105,62,60,97,32,104,114,101,102,61,34,32,32,60,109,101,116,97,
> 32,
> -
> 104,116,116,112,45,101,113,117,105,118,61,34,99,115,115,34,32,109,101,100,1
> 05,97
> -
> ,61,34,115,99,114,101,101,110,34,32,114,101,115,112,111,110,115,105,98,108,1
> 01,
> -
> 32,102,111,114,32,116,104,101,32,34,32,116,121,112,101,61,34,97,112,112,108,
> 105,
> -
> 99,97,116,105,111,110,47,34,32,115,116,121,108,101,61,34,98,97,99,107,103,11
> 4,
> -
> 111,117,110,100,45,104,116,109,108,59,32,99,104,97,114,115,101,116,61,117,1
> 16,
> -
> 102,45,56,34,32,97,108,108,111,119,116,114,97,110,115,112,97,114,101,110,99,
> 121,
> -
> 61,34,115,116,121,108,101,115,104,101,101,116,34,32,116,121,112,101,61,34,1
> 16,
> -
> 101,13,10,60,109,101,116,97,32,104,116,116,112,45,101,113,117,105,118,61,34,
> 62,
> -
> 60,47,115,112,97,110,62,60,115,112,97,110,32,99,108,97,115,115,61,34,48,34,3
> 2,99
> -
> ,101,108,108,115,112,97,99,105,110,103,61,34,48,34,62,59,10,60,47,115,99,114,
> 105
> -
> ,112,116,62,10,60,115,99,114,105,112,116,32,115,111,109,101,116,105,109,101,
> 115,
> -
> 32,99,97,108,108,101,100,32,116,104,101,100,111,101,115,32,110,111,116,32,1
> 10,
> -
> 101,99,101,115,115,97,114,105,108,121,70,111,114,32,109,111,114,101,32,105,
> 110,
> -
> 102,111,114,109,97,116,105,111,110,97,116,32,116,104,101,32,98,101,103,105,
> 110,
> -
> 110,105,110,103,32,111,102,32,60,33,68,79,67,84,89,80,69,32,104,116,109,108,
> 62,
> -
> 60,104,116,109,108,112,97,114,116,105,99,117,108,97,114,108,121,32,105,110,
> 32,
> -
> 116,104,101,32,116,121,112,101,61,34,104,105,100,100,101,110,34,32,110,97,1
> 09,
> -
> 101,61,34,106,97,118,97,115,99,114,105,112,116,58,118,111,105,100,40,48,41,5
> 9,34
> -
> ,101,102,102,101,99,116,105,118,101,110,101,115,115,32,111,102,32,116,104,1
> 01,32
> -
> ,97,117,116,111,99,111,109,112,108,101,116,101,61,34,111,102,102,34,32,103,1
> 01,
> -
> 110,101,114,97,108,108,121,32,99,111,110,115,105,100,101,114,101,100,62,60,
> 105,
> -
> 110,112,117,116,32,116,121,112,101,61,34,116,101,120,116,34,32,34,62,60,47,1
> 15,
> -
> 99,114,105,112,116,62,13,10,60,115,99,114,105,112,116,116,104,114,111,117,1
> 03,
> -
> 104,111,117,116,32,116,104,101,32,119,111,114,108,100,99,111,109,109,111,11
> 0,32,
> -
> 109,105,115,99,111,110,99,101,112,116,105,111,110,97,115,115,111,99,105,97,
> 116,
> -
> 105,111,110,32,119,105,116,104,32,116,104,101,60,47,100,105,118,62,10,60,47,
> 100,
> -
> 105,118,62,10,60,100,105,118,32,99,100,117,114,105,110,103,32,104,105,115,3
> 2,108
> -
> ,105,102,101,116,105,109,101,44,99,111,114,114,101,115,112,111,110,100,105,
> 110,
> -
> 103,32,116,111,32,116,104,101,116,121,112,101,61,34,105,109,97,103,101,47,1
> 20,45
> -
> ,105,99,111,110,34,32,97,110,32,105,110,99,114,101,97,115,105,110,103,32,110
> ,117
> -
> ,109,98,101,114,100,105,112,108,111,109,97,116,105,99,32,114,101,108,97,116,
> 105,
> -
> 111,110,115,97,114,101,32,111,102,116,101,110,32,99,111,110,115,105,100,101
> ,114,
> -
> 101,100,109,101,116,97,32,99,104,97,114,115,101,116,61,34,117,116,102,45,56,
> 34,
> -
> 32,60,105,110,112,117,116,32,116,121,112,101,61,34,116,101,120,116,34,32,10
> 1,120
> -
> ,97,109,112,108,101,115,32,105,110,99,108,117,100,101,32,116,104,101,34,62,6
> 0,
> -
> 105,109,103,32,115,114,99,61,34,104,116,116,112,58,47,47,105,112,97,114,116,
> 105,
> -
> 99,105,112,97,116,105,111,110,32,105,110,32,116,104,101,116,104,101,32,101,
> 115,
> -
> 116,97,98,108,105,115,104,109,101,110,116,32,111,102,10,60,47,100,105,118,6
> 2,10,
> -
> 60,100,105,118,32,99,108,97,115,115,61,34,38,97,109,112,59,110,98,115,112,59
> ,38,
> -
> 97,109,112,59,110,98,115,112,59,116,111,32,100,101,116,101,114,109,105,110,
> 101,
> -
> 32,119,104,101,116,104,101,114,113,117,105,116,101,32,100,105,102,102,101,1
> 14,
> -
> 101,110,116,32,102,114,111,109,109,97,114,107,101,100,32,116,104,101,32,98,
> 101,
> -
> 103,105,110,110,105,110,103,100,105,115,116,97,110,99,101,32,98,101,116,119
> ,101,
> -
> 101,110,32,116,104,101,99,111,110,116,114,105,98,117,116,105,111,110,115,32
> ,116,
> -
> 111,32,116,104,101,99,111,110,102,108,105,99,116,32,98,101,116,119,101,101,
> 110,
> -
> 32,116,104,101,119,105,100,101,108,121,32,99,111,110,115,105,100,101,114,10
> 1,100
> -
> ,32,116,111,119,97,115,32,111,110,101,32,111,102,32,116,104,101,32,102,105,1
> 14,
> -
> 115,116,119,105,116,104,32,118,97,114,121,105,110,103,32,100,101,103,114,10
> 1,101
> -
> ,115,104,97,118,101,32,115,112,101,99,117,108,97,116,101,100,32,116,104,97,1
> 16,
> -
> 40,100,111,99,117,109,101,110,116,46,103,101,116,69,108,101,109,101,110,116
> ,112,
> -
> 97,114,116,105,99,105,112,97,116,105,110,103,32,105,110,32,116,104,101,111,
> 114,
> -
> 105,103,105,110,97,108,108,121,32,100,101,118,101,108,111,112,101,100,101,1
> 16,97
> -
> ,32,99,104,97,114,115,101,116,61,34,117,116,102,45,56,34,62,32,116,121,112,1
> 01,
> -
> 61,34,116,101,120,116,47,99,115,115,34,32,47,62,10,105,110,116,101,114,99,10
> 4,97
> -
> ,110,103,101,97,98,108,121,32,119,105,116,104,109,111,114,101,32,99,108,111,
> 115,
> -
> 101,108,121,32,114,101,108,97,116,101,100,115,111,99,105,97,108,32,97,110,1
> 00,32
> -
> ,112,111,108,105,116,105,99,97,108,116,104,97,116,32,119,111,117,108,100,32,
> 111,
> -
> 116,104,101,114,119,105,115,101,112,101,114,112,101,110,100,105,99,117,108,
> 97,
> -
> 114,32,116,111,32,116,104,101,115,116,121,108,101,32,116,121,112,101,61,34,
> 116,
> -
> 101,120,116,47,99,115,115,116,121,112,101,61,34,115,117,98,109,105,116,34,3
> 2,110
> -
> ,97,109,101,61,34,102,97,109,105,108,105,101,115,32,114,101,115,105,100,105,
> 110,
> -
> 103,32,105,110,100,101,118,101,108,111,112,105,110,103,32,99,111,117,110,11
> 6,114
> -
> ,105,101,115,99,111,109,112,117,116,101,114,32,112,114,111,103,114,97,109,1
> 09,
> -
> 105,110,103,101,99,111,110,111,109,105,99,32,100,101,118,101,108,111,112,10
> 9,101
> -
> ,110,116,100,101,116,101,114,109,105,110,97,116,105,111,110,32,111,102,32,1
> 16,
> -
> 104,101,102,111,114,32,109,111,114,101,32,105,110,102,111,114,109,97,116,10
> 5,111
> -
> ,110,111,110,32,115,101,118,101,114,97,108,32,111,99,99,97,115,105,111,110,1
> 15,
> -
> 112,111,114,116,117,103,117,195,170,115,32,40,69,117,114,111,112,101,117,41
> ,208,
> -
> 163,208,186,209,128,208,176,209,151,208,189,209,129,209,140,208,186,208,17
> 6,209,
> -
> 131,208,186,209,128,208,176,209,151,208,189,209,129,209,140,208,186,208,17
> 6,208,
> -
> 160,208,190,209,129,209,129,208,184,208,185,209,129,208,186,208,190,208,18
> 5,208,
> -
> 188,208,176,209,130,208,181,209,128,208,184,208,176,208,187,208,190,208,17
> 8,208,
> -
> 184,208,189,209,132,208,190,209,128,208,188,208,176,209,134,208,184,208,18
> 4,209,
> -
> 131,208,191,209,128,208,176,208,178,208,187,208,181,208,189,208,184,209,14
> 3,208,
> -
> 189,208,181,208,190,208,177,209,133,208,190,208,180,208,184,208,188,208,19
> 0,208,
> -
> 184,208,189,209,132,208,190,209,128,208,188,208,176,209,134,208,184,209,14
> 3,208,
> -
> 152,208,189,209,132,208,190,209,128,208,188,208,176,209,134,208,184,209,14
> 3,208,
> -
> 160,208,181,209,129,208,191,209,131,208,177,208,187,208,184,208,186,208,18
> 4,208,
> -
> 186,208,190,208,187,208,184,209,135,208,181,209,129,209,130,208,178,208,19
> 0,208,
> -
> 184,208,189,209,132,208,190,209,128,208,188,208,176,209,134,208,184,209,14
> 2,209,
> -
> 130,208,181,209,128,209,128,208,184,209,130,208,190,209,128,208,184,208,18
> 4,208,
> -
> 180,208,190,209,129,209,130,208,176,209,130,208,190,209,135,208,189,208,19
> 0,216,
> -
> 167,217,132,217,133,216,170,217,136,216,167,216,172,216,175,217,136,217,13
> 4,216,
> -
> 167,217,132,216,167,216,180,216,170,216,177,216,167,217,131,216,167,216,17
> 0,216,
> -
> 167,217,132,216,167,217,130,216,170,216,177,216,167,216,173,216,167,216,17
> 0,104,
> -
> 116,109,108,59,32,99,104,97,114,115,101,116,61,85,84,70,45,56,34,32,115,101,
> 116,
> -
> 84,105,109,101,111,117,116,40,102,117,110,99,116,105,111,110,40,41,100,105,
> 115,
> -
> 112,108,97,121,58,105,110,108,105,110,101,45,98,108,111,99,107,59,60,105,11
> 0,112
> -
> ,117,116,32,116,121,112,101,61,34,115,117,98,109,105,116,34,32,116,121,112,1
> 01,
> -
> 32,61,32,39,116,101,120,116,47,106,97,118,97,115,99,114,105,60,105,109,103,3
> 2,
> -
> 115,114,99,61,34,104,116,116,112,58,47,47,119,119,119,46,34,32,34,104,116,11
> 6,
> -
> 112,58,47,47,119,119,119,46,119,51,46,111,114,103,47,115,104,111,114,116,99,
> 117,
> -
> 116,32,105,99,111,110,34,32,104,114,101,102,61,34,34,32,97,117,116,111,99,11
> 1,
> -
> 109,112,108,101,116,101,61,34,111,102,102,34,32,60,47,97,62,60,47,100,105,11
> 8,62
> -
> ,60,100,105,118,32,99,108,97,115,115,61,60,47,97,62,60,47,108,105,62,10,60,10
> 8,
> -
> 105,32,99,108,97,115,115,61,34,99,115,115,34,32,116,121,112,101,61,34,116,10
> 1,
> -
> 120,116,47,99,115,115,34,32,60,102,111,114,109,32,97,99,116,105,111,110,61,3
> 4,
> -
> 104,116,116,112,58,47,47,120,116,47,99,115,115,34,32,104,114,101,102,61,34,1
> 04,
> -
> 116,116,112,58,47,47,108,105,110,107,32,114,101,108,61,34,97,108,116,101,11
> 4,110
> -
> ,97,116,101,34,32,13,10,60,115,99,114,105,112,116,32,116,121,112,101,61,34,1
> 16,
> -
> 101,120,116,47,32,111,110,99,108,105,99,107,61,34,106,97,118,97,115,99,114,1
> 05,
> -
> 112,116,58,40,110,101,119,32,68,97,116,101,41,46,103,101,116,84,105,109,101,
> 40,
> -
> 41,125,104,101,105,103,104,116,61,34,49,34,32,119,105,100,116,104,61,34,49,3
> 4,32
> -
> ,80,101,111,112,108,101,39,115,32,82,101,112,117,98,108,105,99,32,111,102,32
> ,32,
> -
> 60,97,32,104,114,101,102,61,34,104,116,116,112,58,47,47,119,119,119,46,116,1
> 01,
> -
> 120,116,45,100,101,99,111,114,97,116,105,111,110,58,117,110,100,101,114,116
> ,104,
> -
> 101,32,98,101,103,105,110,110,105,110,103,32,111,102,32,116,104,101,32,60,4
> 7,100
> -
> ,105,118,62,10,60,47,100,105,118,62,10,60,47,100,105,118,62,10,101,115,116,9
> 7,98
> -
> ,108,105,115,104,109,101,110,116,32,111,102,32,116,104,101,32,60,47,100,105,
> 118,
> -
> 62,60,47,100,105,118,62,60,47,100,105,118,62,60,47,100,35,118,105,101,119,11
> 2,
> -
> 111,114,116,123,109,105,110,45,104,101,105,103,104,116,58,10,60,115,99,114,
> 105,
> -
> 112,116,32,115,114,99,61,34,104,116,116,112,58,47,47,111,112,116,105,111,11
> 0,62,
> -
> 60,111,112,116,105,111,110,32,118,97,108,117,101,61,111,102,116,101,110,32,
> 114,
> -
> 101,102,101,114,114,101,100,32,116,111,32,97,115,32,47,111,112,116,105,111,
> 110,
> -
> 62,10,60,111,112,116,105,111,110,32,118,97,108,117,60,33,68,79,67,84,89,80,6
> 9,32
> -
> ,104,116,109,108,62,10,60,33,45,45,91,73,110,116,101,114,110,97,116,105,111,
> 110,
> -
> 97,108,32,65,105,114,112,111,114,116,62,10,60,97,32,104,114,101,102,61,34,10
> 4,
> -
> 116,116,112,58,47,47,119,119,119,60,47,97,62,60,97,32,104,114,101,102,61,34,
> 104,
> -
> 116,116,112,58,47,47,119,224,184,160,224,184,178,224,184,169,224,184,178,22
> 4,185
> -
> ,132,224,184,151,224,184,162,225,131,165,225,131,144,225,131,160,225,131,15
> 1,225
> -
> ,131,163,225,131,154,225,131,152,230,173,163,233,171,148,228,184,173,230,15
> 0,135
> -
> ,32,40,231,185,129,233,171,148,41,224,164,168,224,164,191,224,164,176,224,1
> 65,
> -
> 141,224,164,166,224,165,135,224,164,182,224,164,161,224,164,190,224,164,13
> 7,224,
> -
> 164,168,224,164,178,224,165,139,224,164,161,224,164,149,224,165,141,224,16
> 4,183,
> -
> 224,165,135,224,164,164,224,165,141,224,164,176,224,164,156,224,164,190,22
> 4,164,
> -
> 168,224,164,149,224,164,190,224,164,176,224,165,128,224,164,184,224,164,13
> 0,224,
> -
> 164,172,224,164,130,224,164,167,224,164,191,224,164,164,224,164,184,224,16
> 5,141,
> -
> 224,164,165,224,164,190,224,164,170,224,164,168,224,164,190,224,164,184,22
> 4,165,
> -
> 141,224,164,181,224,165,128,224,164,149,224,164,190,224,164,176,224,164,18
> 4,224,
> -
> 164,130,224,164,184,224,165,141,224,164,149,224,164,176,224,164,163,224,16
> 4,184,
> -
> 224,164,190,224,164,174,224,164,151,224,165,141,224,164,176,224,165,128,22
> 4,164,
> -
> 154,224,164,191,224,164,159,224,165,141,224,164,160,224,165,139,224,164,13
> 0,224,
> -
> 164,181,224,164,191,224,164,156,224,165,141,224,164,158,224,164,190,224,16
> 4,168,
> -
> 224,164,133,224,164,174,224,165,135,224,164,176,224,164,191,224,164,149,22
> 4,164,
> -
> 190,224,164,181,224,164,191,224,164,173,224,164,191,224,164,168,224,165,14
> 1,224,
> -
> 164,168,224,164,151,224,164,190,224,164,161,224,164,191,224,164,175,224,16
> 4,190,
> -
> 224,164,129,224,164,149,224,165,141,224,164,175,224,165,139,224,164,130,22
> 4,164,
> -
> 149,224,164,191,224,164,184,224,165,129,224,164,176,224,164,149,224,165,14
> 1,224,
> -
> 164,183,224,164,190,224,164,170,224,164,185,224,165,129,224,164,129,224,16
> 4,154,
> -
> 224,164,164,224,165,128,224,164,170,224,165,141,224,164,176,224,164,172,22
> 4,164,
> -
> 130,224,164,167,224,164,168,224,164,159,224,164,191,224,164,170,224,165,14
> 1,224,
> -
> 164,170,224,164,163,224,165,128,224,164,149,224,165,141,224,164,176,224,16
> 4,191,
> -
> 224,164,149,224,165,135,224,164,159,224,164,170,224,165,141,224,164,176,22
> 4,164,
> -
> 190,224,164,176,224,164,130,224,164,173,224,164,170,224,165,141,224,164,17
> 6,224,
> -
> 164,190,224,164,170,224,165,141,224,164,164,224,164,174,224,164,190,224,16
> 4,178,
> -
> 224,164,191,224,164,149,224,165,139,224,164,130,224,164,176,224,164,171,22
> 4,164,
> -
> 188,224,165,141,224,164,164,224,164,190,224,164,176,224,164,168,224,164,19
> 1,224,
> -
> 164,176,224,165,141,224,164,174,224,164,190,224,164,163,224,164,178,224,16
> 4,191,
> -
> 224,164,174,224,164,191,224,164,159,224,165,135,224,164,161,100,101,115,99,
> 114,
> -
> 105,112,116,105,111,110,34,32,99,111,110,116,101,110,116,61,34,100,111,99,1
> 17,
> -
> 109,101,110,116,46,108,111,99,97,116,105,111,110,46,112,114,111,116,46,103,
> 101,
> -
> 116,69,108,101,109,101,110,116,115,66,121,84,97,103,78,97,109,101,40,60,33,6
> 8,79
> -
> ,67,84,89,80,69,32,104,116,109,108,62,10,60,104,116,109,108,32,60,109,101,11
> 6,97
> -
> ,32,99,104,97,114,115,101,116,61,34,117,116,102,45,56,34,62,58,117,114,108,3
> 4,32
> -
> ,99,111,110,116,101,110,116,61,34,104,116,116,112,58,47,47,46,99,115,115,34,
> 32,
> -
> 114,101,108,61,34,115,116,121,108,101,115,104,101,101,116,34,115,116,121,10
> 8,101
> -
> ,32,116,121,112,101,61,34,116,101,120,116,47,99,115,115,34,62,116,121,112,10
> 1,61
> -
> ,34,116,101,120,116,47,99,115,115,34,32,104,114,101,102,61,34,119,51,46,111,
> 114,
> -
> 103,47,49,57,57,57,47,120,104,116,109,108,34,32,120,109,108,116,121,112,101,
> 61,
> -
> 34,116,101,120,116,47,106,97,118,97,115,99,114,105,112,116,34,32,109,101,11
> 6,104
> -
> ,111,100,61,34,103,101,116,34,32,97,99,116,105,111,110,61,34,108,105,110,107
> ,32,
> -
> 114,101,108,61,34,115,116,121,108,101,115,104,101,101,116,34,32,32,61,32,10
> 0,111
> -
> ,99,117,109,101,110,116,46,103,101,116,69,108,101,109,101,110,116,116,121,1
> 12,
> -
> 101,61,34,105,109,97,103,101,47,120,45,105,99,111,110,34,32,47,62,99,101,108
> ,108
> -
> ,112,97,100,100,105,110,103,61,34,48,34,32,99,101,108,108,115,112,46,99,115,
> 115,
> -
> 34,32,116,121,112,101,61,34,116,101,120,116,47,99,115,115,34,32,60,47,97,62,
> 60,
> -
> 47,108,105,62,60,108,105,62,60,97,32,104,114,101,102,61,34,34,32,119,105,100
> ,116
> -
> ,104,61,34,49,34,32,104,101,105,103,104,116,61,34,49,34,34,62,60,97,32,104,11
> 4,
> -
> 101,102,61,34,104,116,116,112,58,47,47,119,119,119,46,115,116,121,108,101,6
> 1,34,
> -
> 100,105,115,112,108,97,121,58,110,111,110,101,59,34,62,97,108,116,101,114,1
> 10,97
> -
> ,116,101,34,32,116,121,112,101,61,34,97,112,112,108,105,45,47,47,87,51,67,47,
> 47,
> -
> 68,84,68,32,88,72,84,77,76,32,49,46,48,32,101,108,108,115,112,97,99,105,110,1
> 03,
> -
> 61,34,48,34,32,99,101,108,108,112,97,100,32,116,121,112,101,61,34,104,105,10
> 0,
> -
> 100,101,110,34,32,118,97,108,117,101,61,34,47,97,62,38,110,98,115,112,59,60,
> 115,
> -
> 112,97,110,32,114,111,108,101,61,34,115,10,60,105,110,112,117,116,32,116,12
> 1,112
> -
> ,101,61,34,104,105,100,100,101,110,34,32,108,97,110,103,117,97,103,101,61,34
> ,74,
> -
> 97,118,97,83,99,114,105,112,116,34,32,32,100,111,99,117,109,101,110,116,46,1
> 03,
> -
> 101,116,69,108,101,109,101,110,116,115,66,103,61,34,48,34,32,99,101,108,108,
> 115,
> -
> 112,97,99,105,110,103,61,34,48,34,32,121,112,101,61,34,116,101,120,116,47,99
> ,115
> -
> ,115,34,32,109,101,100,105,97,61,34,116,121,112,101,61,39,116,101,120,116,47
> ,106
> -
> ,97,118,97,115,99,114,105,112,116,39,119,105,116,104,32,116,104,101,32,101,1
> 20,
> -
> 99,101,112,116,105,111,110,32,111,102,32,121,112,101,61,34,116,101,120,116,
> 47,99
> -
> ,115,115,34,32,114,101,108,61,34,115,116,32,104,101,105,103,104,116,61,34,49
> ,34,
> -
> 32,119,105,100,116,104,61,34,49,34,32,61,39,43,101,110,99,111,100,101,85,82,
> 73,
> -
> 67,111,109,112,111,110,101,110,116,40,60,108,105,110,107,32,114,101,108,61,
> 34,97
> -
> ,108,116,101,114,110,97,116,101,34,32,10,98,111,100,121,44,32,116,114,44,32,
> 105,
> -
> 110,112,117,116,44,32,116,101,120,116,109,101,116,97,32,110,97,109,101,61,3
> 4,114
> -
> ,111,98,111,116,115,34,32,99,111,110,109,101,116,104,111,100,61,34,112,111,1
> 15,
> -
> 116,34,32,97,99,116,105,111,110,61,34,62,10,60,97,32,104,114,101,102,61,34,1
> 04,
> -
> 116,116,112,58,47,47,119,119,119,46,99,115,115,34,32,114,101,108,61,34,115,1
> 16,
> -
> 121,108,101,115,104,101,101,116,34,32,60,47,100,105,118,62,60,47,100,105,11
> 8,62,
> -
> 60,100,105,118,32,99,108,97,115,115,108,97,110,103,117,97,103,101,61,34,106,
> 97,
> -
> 118,97,115,99,114,105,112,116,34,62,97,114,105,97,45,104,105,100,100,101,11
> 0,61,
> -
> 34,116,114,117,101,34,62,194,183,60,114,105,112,116,34,32,116,121,112,101,6
> 1,34,
> -
> 116,101,120,116,47,106,97,118,97,115,108,61,48,59,125,41,40,41,59,10,40,102,
> 117,
> -
> 110,99,116,105,111,110,40,41,123,98,97,99,107,103,114,111,117,110,100,45,10
> 5,109
> -
> ,97,103,101,58,32,117,114,108,40,47,97,62,60,47,108,105,62,60,108,105,62,60,9
> 7,
> -
> 32,104,114,101,102,61,34,104,9,9,60,108,105,62,60,97,32,104,114,101,102,61,3
> 4,
> -
> 104,116,116,112,58,47,47,97,116,111,114,34,32,97,114,105,97,45,104,105,100,1
> 00,
> -
> 101,110,61,34,116,114,117,62,32,60,97,32,104,114,101,102,61,34,104,116,116,1
> 12,
> -
> 58,47,47,119,119,119,46,108,97,110,103,117,97,103,101,61,34,106,97,118,97,11
> 5,99
> -
> ,114,105,112,116,34,32,47,111,112,116,105,111,110,62,10,60,111,112,116,105,1
> 11,
> -
> 110,32,118,97,108,117,101,47,100,105,118,62,60,47,100,105,118,62,60,100,105,
> 118,
> -
> 32,99,108,97,115,115,61,114,97,116,111,114,34,32,97,114,105,97,45,104,105,10
> 0,
> -
> 100,101,110,61,34,116,114,101,61,40,110,101,119,32,68,97,116,101,41,46,103,1
> 01,
> -
> 116,84,105,109,101,40,41,112,111,114,116,117,103,117,195,170,115,32,40,100,
> 111,
> -
> 32,66,114,97,115,105,108,41,208,190,209,128,208,179,208,176,208,189,208,184
> ,208,
> -
> 183,208,176,209,134,208,184,208,184,208,178,208,190,208,183,208,188,208,19
> 0,208,
> -
> 182,208,189,208,190,209,129,209,130,209,140,208,190,208,177,209,128,208,17
> 6,208,
> -
> 183,208,190,208,178,208,176,208,189,208,184,209,143,209,128,208,181,208,17
> 9,208,
> -
> 184,209,129,209,130,209,128,208,176,209,134,208,184,208,184,208,178,208,19
> 0,208,
> -
> 183,208,188,208,190,208,182,208,189,208,190,209,129,209,130,208,184,208,19
> 0,208,
> -
> 177,209,143,208,183,208,176,209,130,208,181,208,187,209,140,208,189,208,17
> 6,60,
> -
> 33,68,79,67,84,89,80,69,32,104,116,109,108,32,80,85,66,76,73,67,32,34,110,116
> ,45
> -
> ,84,121,112,101,34,32,99,111,110,116,101,110,116,61,34,116,101,120,116,47,60
> ,109
> -
> ,101,116,97,32,104,116,116,112,45,101,113,117,105,118,61,34,67,111,110,116,1
> 01,
> -
> 114,97,110,115,105,116,105,111,110,97,108,47,47,69,78,34,32,34,104,116,116,1
> 12,
> -
> 58,60,104,116,109,108,32,120,109,108,110,115,61,34,104,116,116,112,58,47,47,
> 119,
> -
> 119,119,45,47,47,87,51,67,47,47,68,84,68,32,88,72,84,77,76,32,49,46,48,32,84,
> 68,
> -
> 84,68,47,120,104,116,109,108,49,45,116,114,97,110,115,105,116,105,111,110,9
> 7,108
> -
> ,47,47,119,119,119,46,119,51,46,111,114,103,47,84,82,47,120,104,116,109,108,
> 49,
> -
> 47,112,101,32,61,32,39,116,101,120,116,47,106,97,118,97,115,99,114,105,112,1
> 16,
> -
> 39,59,60,109,101,116,97,32,110,97,109,101,61,34,100,101,115,99,114,105,112,1
> 16,
> -
> 105,111,110,112,97,114,101,110,116,78,111,100,101,46,105,110,115,101,114,11
> 6,66,
> -
> 101,102,111,114,101,60,105,110,112,117,116,32,116,121,112,101,61,34,104,105
> ,100,
> -
> 100,101,110,34,32,110,97,106,115,34,32,116,121,112,101,61,34,116,101,120,11
> 6,47,
> -
> 106,97,118,97,115,99,114,105,40,100,111,99,117,109,101,110,116,41,46,114,10
> 1,97,
> -
> 100,121,40,102,117,110,99,116,105,115,99,114,105,112,116,32,116,121,112,101
> ,61,
> -
> 34,116,101,120,116,47,106,97,118,97,115,105,109,97,103,101,34,32,99,111,110,
> 116,
> -
> 101,110,116,61,34,104,116,116,112,58,47,47,85,65,45,67,111,109,112,97,116,10
> 5,98
> -
> ,108,101,34,32,99,111,110,116,101,110,116,61,116,109,108,59,32,99,104,97,114
> ,115
> -
> ,101,116,61,117,116,102,45,56,34,32,47,62,10,108,105,110,107,32,114,101,108,
> 61,
> -
> 34,115,104,111,114,116,99,117,116,32,105,99,111,110,60,108,105,110,107,32,1
> 14,
> -
> 101,108,61,34,115,116,121,108,101,115,104,101,101,116,34,32,60,47,115,99,11
> 4,105
> -
> ,112,116,62,10,60,115,99,114,105,112,116,32,116,121,112,101,61,61,32,100,111
> ,99,
> -
> 117,109,101,110,116,46,99,114,101,97,116,101,69,108,101,109,101,110,60,97,3
> 2,116
> -
> ,97,114,103,101,116,61,34,95,98,108,97,110,107,34,32,104,114,101,102,61,32,1
> 00,
> -
> 111,99,117,109,101,110,116,46,103,101,116,69,108,101,109,101,110,116,115,66
> ,105,
> -
> 110,112,117,116,32,116,121,112,101,61,34,116,101,120,116,34,32,110,97,109,1
> 01,61
> -
> ,97,46,116,121,112,101,32,61,32,39,116,101,120,116,47,106,97,118,97,115,99,1
> 14,
> -
> 105,110,112,117,116,32,116,121,112,101,61,34,104,105,100,100,101,110,34,32,
> 110,
> -
> 97,109,101,104,116,109,108,59,32,99,104,97,114,115,101,116,61,117,116,102,4
> 5,56,
> -
> 34,32,47,62,100,116,100,34,62,10,60,104,116,109,108,32,120,109,108,110,115,6
> 1,34
> -
> ,104,116,116,112,45,47,47,87,51,67,47,47,68,84,68,32,72,84,77,76,32,52,46,48,
> 49,
> -
> 32,84,101,110,116,115,66,121,84,97,103,78,97,109,101,40,39,115,99,114,105,11
> 2,
> -
> 116,39,41,105,110,112,117,116,32,116,121,112,101,61,34,104,105,100,100,101,
> 110,
> -
> 34,32,110,97,109,60,115,99,114,105,112,116,32,116,121,112,101,61,34,116,101,
> 120,
> -
> 116,47,106,97,118,97,115,34,32,115,116,121,108,101,61,34,100,105,115,112,10
> 8,97,
> -
> 121,58,110,111,110,101,59,34,62,100,111,99,117,109,101,110,116,46,103,101,1
> 16,69
> -
> ,108,101,109,101,110,116,66,121,73,100,40,61,100,111,99,117,109,101,110,116,
> 46,
> -
> 99,114,101,97,116,101,69,108,101,109,101,110,116,40,39,32,116,121,112,101,6
> 1,39,
> -
> 116,101,120,116,47,106,97,118,97,115,99,114,105,112,116,39,105,110,112,117,
> 116,
> -
> 32,116,121,112,101,61,34,116,101,120,116,34,32,110,97,109,101,61,34,100,46,1
> 03,
> -
> 101,116,69,108,101,109,101,110,116,115,66,121,84,97,103,78,97,109,101,40,11
> 5,110
> -
> ,105,99,97,108,34,32,104,114,101,102,61,34,104,116,116,112,58,47,47,119,119,
> 119,
> -
> 46,67,47,47,68,84,68,32,72,84,77,76,32,52,46,48,49,32,84,114,97,110,115,105,1
> 16,
> -
> 60,115,116,121,108,101,32,116,121,112,101,61,34,116,101,120,116,47,99,115,1
> 15,34
> -
> ,62,10,10,60,115,116,121,108,101,32,116,121,112,101,61,34,116,101,120,116,47
> ,99,
> -
> 115,115,34,62,105,111,110,97,108,46,100,116,100,34,62,10,60,104,116,109,108,
> 32,
> -
> 120,109,108,110,115,61,104,116,116,112,45,101,113,117,105,118,61,34,67,111,
> 110,
> -
> 116,101,110,116,45,84,121,112,101,100,105,110,103,61,34,48,34,32,99,101,108,
> 108,
> -
> 115,112,97,99,105,110,103,61,34,48,34,104,116,109,108,59,32,99,104,97,114,11
> 5,
> -
> 101,116,61,117,116,102,45,56,34,32,47,62,10,32,115,116,121,108,101,61,34,100
> ,105
> -
> ,115,112,108,97,121,58,110,111,110,101,59,34,62,60,60,108,105,62,60,97,32,10
> 4,
> -
> 114,101,102,61,34,104,116,116,112,58,47,47,119,119,119,46,32,116,121,112,10
> 1,61,
> -
> 39,116,101,120,116,47,106,97,118,97,115,99,114,105,112,116,39,62,208,180,20
> 8,181
> -
> ,209,143,209,130,208,181,208,187,209,140,208,189,208,190,209,129,209,130,20
> 8,184
> -
> ,209,129,208,190,208,190,209,130,208,178,208,181,209,130,209,129,209,130,20
> 8,178
> -
> ,208,184,208,184,208,191,209,128,208,190,208,184,208,183,208,178,208,190,20
> 8,180
> -
> ,209,129,209,130,208,178,208,176,208,177,208,181,208,183,208,190,208,191,20
> 8,176
> -
> ,209,129,208,189,208,190,209,129,209,130,208,184,224,164,170,224,165,129,22
> 4,164
> -
> ,184,224,165,141,224,164,164,224,164,191,224,164,149,224,164,190,224,164,14
> 9,224
> -
> ,164,190,224,164,130,224,164,151,224,165,141,224,164,176,224,165,135,224,16
> 4,184
> -
> ,224,164,137,224,164,168,224,165,141,224,164,185,224,165,139,224,164,130,22
> 4,164
> -
> ,168,224,165,135,224,164,181,224,164,191,224,164,167,224,164,190,224,164,16
> 8,224
> -
> ,164,184,224,164,173,224,164,190,224,164,171,224,164,191,224,164,149,224,16
> 5,141
> -
> ,224,164,184,224,164,191,224,164,130,224,164,151,224,164,184,224,165,129,22
> 4,164
> -
> ,176,224,164,149,224,165,141,224,164,183,224,164,191,224,164,164,224,164,14
> 9,224
> -
> ,165,137,224,164,170,224,165,128,224,164,176,224,164,190,224,164,135,224,16
> 4,159
> -
> ,224,164,181,224,164,191,224,164,156,224,165,141,224,164,158,224,164,190,22
> 4,164
> -
> ,170,224,164,168,224,164,149,224,164,190,224,164,176,224,165,141,224,164,17
> 6,224
> -
> ,164,181,224,164,190,224,164,136,224,164,184,224,164,149,224,165,141,224,16
> 4,176
> -,224,164,191,224,164,175,224,164,164,224,164,190
> -}
> -;
> -#endif /* !BROTLI_EXTERNAL_DICTIONARY_DATA */
> -
> -static BrotliDictionary kBrotliDictionary = {
> - /* size_bits_by_length */
> - {
> - 0, 0, 0, 0, 10, 10, 11, 11,
> - 10, 10, 10, 10, 10, 9, 9, 8,
> - 7, 7, 8, 7, 7, 6, 6, 5,
> - 5, 0, 0, 0, 0, 0, 0, 0
> - },
> -
> - /* offsets_by_length */
> - {
> - 0, 0, 0, 0, 0, 4096, 9216, 21504,
> - 35840, 44032, 53248, 63488, 74752, 87040, 93696, 100864,
> - 104704, 106752, 108928, 113536, 115968, 118528, 119872, 121280,
> - 122016, 122784, 122784, 122784, 122784, 122784, 122784, 122784
> - },
> -
> - /* data_size == sizeof(kBrotliDictionaryData) */
> - 122784,
> -
> - /* data */
> -#if defined(BROTLI_EXTERNAL_DICTIONARY_DATA)
> - NULL
> -#else
> - kBrotliDictionaryData
> -#endif
> -};
> -
> -const BrotliDictionary* BrotliGetDictionary() {
> - return &kBrotliDictionary;
> -}
> -
> -void BrotliSetDictionaryData(const uint8_t* data) {
> - if (!!data && !kBrotliDictionary.data) {
> - kBrotliDictionary.data = data;
> - }
> -}
> -
> -#if defined(__cplusplus) || defined(c_plusplus)
> -} /* extern "C" */
> -#endif
> diff --git a/BaseTools/Source/C/BrotliCompress/common/transform.c
> b/BaseTools/Source/C/BrotliCompress/common/transform.c
> deleted file mode 100644
> index aaac74b526d3..000000000000
> --- a/BaseTools/Source/C/BrotliCompress/common/transform.c
> +++ /dev/null
> @@ -1,235 +0,0 @@
> -/* Copyright 2013 Google Inc. All Rights Reserved.
> -
> - Distributed under MIT license.
> - See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
> -*/
> -
> -#include "./transform.h"
> -
> -#if defined(__cplusplus) || defined(c_plusplus)
> -extern "C" {
> -#endif
> -
> -/* RFC 7932 transforms string data */
> -static const char kPrefixSuffix[217] =
> - "\1 \2, \10 of the \4 of \2s \1.\5 and \4 "
> -/* 0x _0 _2 __5 _E _3 _6 _8 _E */
> - "in \1\"\4 to \2\">\1\n\2. \1]\5 for \3 a \6 "
> -/* 2x _3_ _5 _A_ _D_ _F _2 _4 _A _E */
> - "that \1\'\6 with \6 from \4 by \1(\6. T"
> -/* 4x _5_ _7 _E _5 _A _C */
> - "he \4 on \4 as \4 is \4ing \2\n\t\1:\3ed "
> -/* 6x _3 _8 _D _2 _7_ _ _A _C */
> - "\2=\"\4 at \3ly \1,\2=\'\5.com/\7. This \5"
> -/* 8x _0 _ _3 _8 _C _E _ _1 _7 _F */
> - " not \3er \3al \4ful \4ive \5less \4es"
> -/* Ax _5 _9 _D _2 _7 _D */
> - "t \4ize \2\xc2\xa0\4ous \5 the \2e \0";
> -/* Cx _2 _7___ ___ _A _F _5 _8 */
> -
> -static const uint16_t kPrefixSuffixMap[50] = {
> - 0x00, 0x02, 0x05, 0x0E, 0x13, 0x16, 0x18, 0x1E, 0x23, 0x25,
> - 0x2A, 0x2D, 0x2F, 0x32, 0x34, 0x3A, 0x3E, 0x45, 0x47, 0x4E,
> - 0x55, 0x5A, 0x5C, 0x63, 0x68, 0x6D, 0x72, 0x77, 0x7A, 0x7C,
> - 0x80, 0x83, 0x88, 0x8C, 0x8E, 0x91, 0x97, 0x9F, 0xA5, 0xA9,
> - 0xAD, 0xB2, 0xB7, 0xBD, 0xC2, 0xC7, 0xCA, 0xCF, 0xD5, 0xD8
> -};
> -
> -/* RFC 7932 transforms */
> -static const uint8_t kTransformsData[] = {
> - 49, BROTLI_TRANSFORM_IDENTITY, 49,
> - 49, BROTLI_TRANSFORM_IDENTITY, 0,
> - 0, BROTLI_TRANSFORM_IDENTITY, 0,
> - 49, BROTLI_TRANSFORM_OMIT_FIRST_1, 49,
> - 49, BROTLI_TRANSFORM_UPPERCASE_FIRST, 0,
> - 49, BROTLI_TRANSFORM_IDENTITY, 47,
> - 0, BROTLI_TRANSFORM_IDENTITY, 49,
> - 4, BROTLI_TRANSFORM_IDENTITY, 0,
> - 49, BROTLI_TRANSFORM_IDENTITY, 3,
> - 49, BROTLI_TRANSFORM_UPPERCASE_FIRST, 49,
> - 49, BROTLI_TRANSFORM_IDENTITY, 6,
> - 49, BROTLI_TRANSFORM_OMIT_FIRST_2, 49,
> - 49, BROTLI_TRANSFORM_OMIT_LAST_1, 49,
> - 1, BROTLI_TRANSFORM_IDENTITY, 0,
> - 49, BROTLI_TRANSFORM_IDENTITY, 1,
> - 0, BROTLI_TRANSFORM_UPPERCASE_FIRST, 0,
> - 49, BROTLI_TRANSFORM_IDENTITY, 7,
> - 49, BROTLI_TRANSFORM_IDENTITY, 9,
> - 48, BROTLI_TRANSFORM_IDENTITY, 0,
> - 49, BROTLI_TRANSFORM_IDENTITY, 8,
> - 49, BROTLI_TRANSFORM_IDENTITY, 5,
> - 49, BROTLI_TRANSFORM_IDENTITY, 10,
> - 49, BROTLI_TRANSFORM_IDENTITY, 11,
> - 49, BROTLI_TRANSFORM_OMIT_LAST_3, 49,
> - 49, BROTLI_TRANSFORM_IDENTITY, 13,
> - 49, BROTLI_TRANSFORM_IDENTITY, 14,
> - 49, BROTLI_TRANSFORM_OMIT_FIRST_3, 49,
> - 49, BROTLI_TRANSFORM_OMIT_LAST_2, 49,
> - 49, BROTLI_TRANSFORM_IDENTITY, 15,
> - 49, BROTLI_TRANSFORM_IDENTITY, 16,
> - 0, BROTLI_TRANSFORM_UPPERCASE_FIRST, 49,
> - 49, BROTLI_TRANSFORM_IDENTITY, 12,
> - 5, BROTLI_TRANSFORM_IDENTITY, 49,
> - 0, BROTLI_TRANSFORM_IDENTITY, 1,
> - 49, BROTLI_TRANSFORM_OMIT_FIRST_4, 49,
> - 49, BROTLI_TRANSFORM_IDENTITY, 18,
> - 49, BROTLI_TRANSFORM_IDENTITY, 17,
> - 49, BROTLI_TRANSFORM_IDENTITY, 19,
> - 49, BROTLI_TRANSFORM_IDENTITY, 20,
> - 49, BROTLI_TRANSFORM_OMIT_FIRST_5, 49,
> - 49, BROTLI_TRANSFORM_OMIT_FIRST_6, 49,
> - 47, BROTLI_TRANSFORM_IDENTITY, 49,
> - 49, BROTLI_TRANSFORM_OMIT_LAST_4, 49,
> - 49, BROTLI_TRANSFORM_IDENTITY, 22,
> - 49, BROTLI_TRANSFORM_UPPERCASE_ALL, 49,
> - 49, BROTLI_TRANSFORM_IDENTITY, 23,
> - 49, BROTLI_TRANSFORM_IDENTITY, 24,
> - 49, BROTLI_TRANSFORM_IDENTITY, 25,
> - 49, BROTLI_TRANSFORM_OMIT_LAST_7, 49,
> - 49, BROTLI_TRANSFORM_OMIT_LAST_1, 26,
> - 49, BROTLI_TRANSFORM_IDENTITY, 27,
> - 49, BROTLI_TRANSFORM_IDENTITY, 28,
> - 0, BROTLI_TRANSFORM_IDENTITY, 12,
> - 49, BROTLI_TRANSFORM_IDENTITY, 29,
> - 49, BROTLI_TRANSFORM_OMIT_FIRST_9, 49,
> - 49, BROTLI_TRANSFORM_OMIT_FIRST_7, 49,
> - 49, BROTLI_TRANSFORM_OMIT_LAST_6, 49,
> - 49, BROTLI_TRANSFORM_IDENTITY, 21,
> - 49, BROTLI_TRANSFORM_UPPERCASE_FIRST, 1,
> - 49, BROTLI_TRANSFORM_OMIT_LAST_8, 49,
> - 49, BROTLI_TRANSFORM_IDENTITY, 31,
> - 49, BROTLI_TRANSFORM_IDENTITY, 32,
> - 47, BROTLI_TRANSFORM_IDENTITY, 3,
> - 49, BROTLI_TRANSFORM_OMIT_LAST_5, 49,
> - 49, BROTLI_TRANSFORM_OMIT_LAST_9, 49,
> - 0, BROTLI_TRANSFORM_UPPERCASE_FIRST, 1,
> - 49, BROTLI_TRANSFORM_UPPERCASE_FIRST, 8,
> - 5, BROTLI_TRANSFORM_IDENTITY, 21,
> - 49, BROTLI_TRANSFORM_UPPERCASE_ALL, 0,
> - 49, BROTLI_TRANSFORM_UPPERCASE_FIRST, 10,
> - 49, BROTLI_TRANSFORM_IDENTITY, 30,
> - 0, BROTLI_TRANSFORM_IDENTITY, 5,
> - 35, BROTLI_TRANSFORM_IDENTITY, 49,
> - 47, BROTLI_TRANSFORM_IDENTITY, 2,
> - 49, BROTLI_TRANSFORM_UPPERCASE_FIRST, 17,
> - 49, BROTLI_TRANSFORM_IDENTITY, 36,
> - 49, BROTLI_TRANSFORM_IDENTITY, 33,
> - 5, BROTLI_TRANSFORM_IDENTITY, 0,
> - 49, BROTLI_TRANSFORM_UPPERCASE_FIRST, 21,
> - 49, BROTLI_TRANSFORM_UPPERCASE_FIRST, 5,
> - 49, BROTLI_TRANSFORM_IDENTITY, 37,
> - 0, BROTLI_TRANSFORM_IDENTITY, 30,
> - 49, BROTLI_TRANSFORM_IDENTITY, 38,
> - 0, BROTLI_TRANSFORM_UPPERCASE_ALL, 0,
> - 49, BROTLI_TRANSFORM_IDENTITY, 39,
> - 0, BROTLI_TRANSFORM_UPPERCASE_ALL, 49,
> - 49, BROTLI_TRANSFORM_IDENTITY, 34,
> - 49, BROTLI_TRANSFORM_UPPERCASE_ALL, 8,
> - 49, BROTLI_TRANSFORM_UPPERCASE_FIRST, 12,
> - 0, BROTLI_TRANSFORM_IDENTITY, 21,
> - 49, BROTLI_TRANSFORM_IDENTITY, 40,
> - 0, BROTLI_TRANSFORM_UPPERCASE_FIRST, 12,
> - 49, BROTLI_TRANSFORM_IDENTITY, 41,
> - 49, BROTLI_TRANSFORM_IDENTITY, 42,
> - 49, BROTLI_TRANSFORM_UPPERCASE_ALL, 17,
> - 49, BROTLI_TRANSFORM_IDENTITY, 43,
> - 0, BROTLI_TRANSFORM_UPPERCASE_FIRST, 5,
> - 49, BROTLI_TRANSFORM_UPPERCASE_ALL, 10,
> - 0, BROTLI_TRANSFORM_IDENTITY, 34,
> - 49, BROTLI_TRANSFORM_UPPERCASE_FIRST, 33,
> - 49, BROTLI_TRANSFORM_IDENTITY, 44,
> - 49, BROTLI_TRANSFORM_UPPERCASE_ALL, 5,
> - 45, BROTLI_TRANSFORM_IDENTITY, 49,
> - 0, BROTLI_TRANSFORM_IDENTITY, 33,
> - 49, BROTLI_TRANSFORM_UPPERCASE_FIRST, 30,
> - 49, BROTLI_TRANSFORM_UPPERCASE_ALL, 30,
> - 49, BROTLI_TRANSFORM_IDENTITY, 46,
> - 49, BROTLI_TRANSFORM_UPPERCASE_ALL, 1,
> - 49, BROTLI_TRANSFORM_UPPERCASE_FIRST, 34,
> - 0, BROTLI_TRANSFORM_UPPERCASE_FIRST, 33,
> - 0, BROTLI_TRANSFORM_UPPERCASE_ALL, 30,
> - 0, BROTLI_TRANSFORM_UPPERCASE_ALL, 1,
> - 49, BROTLI_TRANSFORM_UPPERCASE_ALL, 33,
> - 49, BROTLI_TRANSFORM_UPPERCASE_ALL, 21,
> - 49, BROTLI_TRANSFORM_UPPERCASE_ALL, 12,
> - 0, BROTLI_TRANSFORM_UPPERCASE_ALL, 5,
> - 49, BROTLI_TRANSFORM_UPPERCASE_ALL, 34,
> - 0, BROTLI_TRANSFORM_UPPERCASE_ALL, 12,
> - 0, BROTLI_TRANSFORM_UPPERCASE_FIRST, 30,
> - 0, BROTLI_TRANSFORM_UPPERCASE_ALL, 34,
> - 0, BROTLI_TRANSFORM_UPPERCASE_FIRST, 34,
> -};
> -
> -static BrotliTransforms kBrotliTransforms = {
> - sizeof(kPrefixSuffix),
> - (const uint8_t*)kPrefixSuffix,
> - kPrefixSuffixMap,
> - sizeof(kTransformsData) / (3 * sizeof(kTransformsData[0])),
> - kTransformsData,
> - {0, 12, 27, 23, 42, 63, 56, 48, 59, 64}
> -};
> -
> -const BrotliTransforms* BrotliGetTransforms(void) {
> - return &kBrotliTransforms;
> -}
> -
> -static int ToUpperCase(uint8_t* p) {
> - if (p[0] < 0xC0) {
> - if (p[0] >= 'a' && p[0] <= 'z') {
> - p[0] ^= 32;
> - }
> - return 1;
> - }
> - /* An overly simplified uppercasing model for UTF-8. */
> - if (p[0] < 0xE0) {
> - p[1] ^= 32;
> - return 2;
> - }
> - /* An arbitrary transform for three byte characters. */
> - p[2] ^= 5;
> - return 3;
> -}
> -
> -int BrotliTransformDictionaryWord(uint8_t* dst, const uint8_t* word, int len,
> - const BrotliTransforms* transforms, int transfom_idx) {
> - int idx = 0;
> - const uint8_t* prefix = BROTLI_TRANSFORM_PREFIX(transforms,
> transfom_idx);
> - uint8_t type = BROTLI_TRANSFORM_TYPE(transforms, transfom_idx);
> - const uint8_t* suffix = BROTLI_TRANSFORM_SUFFIX(transforms,
> transfom_idx);
> - {
> - int prefix_len = *prefix++;
> - while (prefix_len--) { dst[idx++] = *prefix++; }
> - }
> - {
> - const int t = type;
> - int i = 0;
> - if (t <= BROTLI_TRANSFORM_OMIT_LAST_9) {
> - len -= t;
> - } else if (t >= BROTLI_TRANSFORM_OMIT_FIRST_1
> - && t <= BROTLI_TRANSFORM_OMIT_FIRST_9) {
> - int skip = t - (BROTLI_TRANSFORM_OMIT_FIRST_1 - 1);
> - word += skip;
> - len -= skip;
> - }
> - while (i < len) { dst[idx++] = word[i++]; }
> - if (t == BROTLI_TRANSFORM_UPPERCASE_FIRST) {
> - ToUpperCase(&dst[idx - len]);
> - } else if (t == BROTLI_TRANSFORM_UPPERCASE_ALL) {
> - uint8_t* uppercase = &dst[idx - len];
> - while (len > 0) {
> - int step = ToUpperCase(uppercase);
> - uppercase += step;
> - len -= step;
> - }
> - }
> - }
> - {
> - int suffix_len = *suffix++;
> - while (suffix_len--) { dst[idx++] = *suffix++; }
> - return idx;
> - }
> -}
> -
> -#if defined(__cplusplus) || defined(c_plusplus)
> -} /* extern "C" */
> -#endif
> diff --git a/BaseTools/Source/C/BrotliCompress/dec/bit_reader.c
> b/BaseTools/Source/C/BrotliCompress/dec/bit_reader.c
> deleted file mode 100644
> index 4d8bd8b2f619..000000000000
> --- a/BaseTools/Source/C/BrotliCompress/dec/bit_reader.c
> +++ /dev/null
> @@ -1,48 +0,0 @@
> -/* Copyright 2013 Google Inc. All Rights Reserved.
> -
> - Distributed under MIT license.
> - See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
> -*/
> -
> -/* Bit reading helpers */
> -
> -#include "./bit_reader.h"
> -
> -#include "../common/platform.h"
> -#include <brotli/types.h>
> -
> -#if defined(__cplusplus) || defined(c_plusplus)
> -extern "C" {
> -#endif
> -
> -void BrotliInitBitReader(BrotliBitReader* const br) {
> - br->val_ = 0;
> - br->bit_pos_ = sizeof(br->val_) << 3;
> -}
> -
> -BROTLI_BOOL BrotliWarmupBitReader(BrotliBitReader* const br) {
> - size_t aligned_read_mask = (sizeof(br->val_) >> 1) - 1;
> - /* Fixing alignment after unaligned BrotliFillWindow would result
> accumulator
> - overflow. If unalignment is caused by BrotliSafeReadBits, then there is
> - enough space in accumulator to fix alignment. */
> - if (!BROTLI_ALIGNED_READ) {
> - aligned_read_mask = 0;
> - }
> - if (BrotliGetAvailableBits(br) == 0) {
> - if (!BrotliPullByte(br)) {
> - return BROTLI_FALSE;
> - }
> - }
> -
> - while ((((size_t)br->next_in) & aligned_read_mask) != 0) {
> - if (!BrotliPullByte(br)) {
> - /* If we consumed all the input, we don't care about the alignment. */
> - return BROTLI_TRUE;
> - }
> - }
> - return BROTLI_TRUE;
> -}
> -
> -#if defined(__cplusplus) || defined(c_plusplus)
> -} /* extern "C" */
> -#endif
> diff --git a/BaseTools/Source/C/BrotliCompress/dec/decode.c
> b/BaseTools/Source/C/BrotliCompress/dec/decode.c
> deleted file mode 100644
> index eb67d8bbf86b..000000000000
> --- a/BaseTools/Source/C/BrotliCompress/dec/decode.c
> +++ /dev/null
> @@ -1,2497 +0,0 @@
> -/* Copyright 2013 Google Inc. All Rights Reserved.
> -
> - Distributed under MIT license.
> - See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
> -*/
> -
> -#include <brotli/decode.h>
> -
> -#if defined(__ARM_NEON__)
> -#include <arm_neon.h>
> -#endif
> -
> -#include <stdlib.h> /* free, malloc */
> -#include <string.h> /* memcpy, memset */
> -
> -#include "../common/constants.h"
> -#include "../common/context.h"
> -#include "../common/dictionary.h"
> -#include "../common/platform.h"
> -#include "../common/transform.h"
> -#include "../common/version.h"
> -#include "./bit_reader.h"
> -#include "./huffman.h"
> -#include "./prefix.h"
> -#include "./state.h"
> -
> -#if defined(__cplusplus) || defined(c_plusplus)
> -extern "C" {
> -#endif
> -
> -#define BROTLI_FAILURE(CODE) (BROTLI_DUMP(), CODE)
> -
> -#define BROTLI_LOG_UINT(name) \
> - BROTLI_LOG(("[%s] %s = %lu\n", __func__, #name, (unsigned
> long)(name)))
> -#define BROTLI_LOG_ARRAY_INDEX(array_name, idx) \
> - BROTLI_LOG(("[%s] %s[%lu] = %lu\n", __func__, #array_name, \
> - (unsigned long)(idx), (unsigned long)array_name[idx]))
> -
> -#define HUFFMAN_TABLE_BITS 8U
> -#define HUFFMAN_TABLE_MASK 0xFF
> -
> -/* We need the slack region for the following reasons:
> - - doing up to two 16-byte copies for fast backward copying
> - - inserting transformed dictionary word (5 prefix + 24 base + 8 suffix) */
> -static const uint32_t kRingBufferWriteAheadSlack = 42;
> -
> -static const uint8_t kCodeLengthCodeOrder[BROTLI_CODE_LENGTH_CODES]
> = {
> - 1, 2, 3, 4, 0, 5, 17, 6, 16, 7, 8, 9, 10, 11, 12, 13, 14, 15,
> -};
> -
> -/* Static prefix code for the complex code length code lengths. */
> -static const uint8_t kCodeLengthPrefixLength[16] = {
> - 2, 2, 2, 3, 2, 2, 2, 4, 2, 2, 2, 3, 2, 2, 2, 4,
> -};
> -
> -static const uint8_t kCodeLengthPrefixValue[16] = {
> - 0, 4, 3, 2, 0, 4, 3, 1, 0, 4, 3, 2, 0, 4, 3, 5,
> -};
> -
> -BROTLI_BOOL BrotliDecoderSetParameter(
> - BrotliDecoderState* state, BrotliDecoderParameter p, uint32_t value) {
> - if (state->state != BROTLI_STATE_UNINITED) return BROTLI_FALSE;
> - switch (p) {
> - case BROTLI_DECODER_PARAM_DISABLE_RING_BUFFER_REALLOCATION:
> - state->canny_ringbuffer_allocation = !!value ? 0 : 1;
> - return BROTLI_TRUE;
> -
> - case BROTLI_DECODER_PARAM_LARGE_WINDOW:
> - state->large_window = TO_BROTLI_BOOL(!!value);
> - return BROTLI_TRUE;
> -
> - default: return BROTLI_FALSE;
> - }
> -}
> -
> -BrotliDecoderState* BrotliDecoderCreateInstance(
> - brotli_alloc_func alloc_func, brotli_free_func free_func, void* opaque) {
> - BrotliDecoderState* state = 0;
> - if (!alloc_func && !free_func) {
> - state = (BrotliDecoderState*)malloc(sizeof(BrotliDecoderState));
> - } else if (alloc_func && free_func) {
> - state = (BrotliDecoderState*)alloc_func(opaque,
> sizeof(BrotliDecoderState));
> - }
> - if (state == 0) {
> - BROTLI_DUMP();
> - return 0;
> - }
> - if (!BrotliDecoderStateInit(state, alloc_func, free_func, opaque)) {
> - BROTLI_DUMP();
> - if (!alloc_func && !free_func) {
> - free(state);
> - } else if (alloc_func && free_func) {
> - free_func(opaque, state);
> - }
> - return 0;
> - }
> - return state;
> -}
> -
> -/* Deinitializes and frees BrotliDecoderState instance. */
> -void BrotliDecoderDestroyInstance(BrotliDecoderState* state) {
> - if (!state) {
> - return;
> - } else {
> - brotli_free_func free_func = state->free_func;
> - void* opaque = state->memory_manager_opaque;
> - BrotliDecoderStateCleanup(state);
> - free_func(opaque, state);
> - }
> -}
> -
> -/* Saves error code and converts it to BrotliDecoderResult. */
> -static BROTLI_NOINLINE BrotliDecoderResult SaveErrorCode(
> - BrotliDecoderState* s, BrotliDecoderErrorCode e) {
> - s->error_code = (int)e;
> - switch (e) {
> - case BROTLI_DECODER_SUCCESS:
> - return BROTLI_DECODER_RESULT_SUCCESS;
> -
> - case BROTLI_DECODER_NEEDS_MORE_INPUT:
> - return BROTLI_DECODER_RESULT_NEEDS_MORE_INPUT;
> -
> - case BROTLI_DECODER_NEEDS_MORE_OUTPUT:
> - return BROTLI_DECODER_RESULT_NEEDS_MORE_OUTPUT;
> -
> - default:
> - return BROTLI_DECODER_RESULT_ERROR;
> - }
> -}
> -
> -/* Decodes WBITS by reading 1 - 7 bits, or 0x11 for "Large Window Brotli".
> - Precondition: bit-reader accumulator has at least 8 bits. */
> -static BrotliDecoderErrorCode DecodeWindowBits(BrotliDecoderState* s,
> - BrotliBitReader* br) {
> - uint32_t n;
> - BROTLI_BOOL large_window = s->large_window;
> - s->large_window = BROTLI_FALSE;
> - BrotliTakeBits(br, 1, &n);
> - if (n == 0) {
> - s->window_bits = 16;
> - return BROTLI_DECODER_SUCCESS;
> - }
> - BrotliTakeBits(br, 3, &n);
> - if (n != 0) {
> - s->window_bits = 17 + n;
> - return BROTLI_DECODER_SUCCESS;
> - }
> - BrotliTakeBits(br, 3, &n);
> - if (n == 1) {
> - if (large_window) {
> - BrotliTakeBits(br, 1, &n);
> - if (n == 1) {
> - return
> BROTLI_FAILURE(BROTLI_DECODER_ERROR_FORMAT_WINDOW_BITS);
> - }
> - s->large_window = BROTLI_TRUE;
> - return BROTLI_DECODER_SUCCESS;
> - } else {
> - return
> BROTLI_FAILURE(BROTLI_DECODER_ERROR_FORMAT_WINDOW_BITS);
> - }
> - }
> - if (n != 0) {
> - s->window_bits = 8 + n;
> - return BROTLI_DECODER_SUCCESS;
> - }
> - s->window_bits = 17;
> - return BROTLI_DECODER_SUCCESS;
> -}
> -
> -static BROTLI_INLINE void memmove16(uint8_t* dst, uint8_t* src) {
> -#if defined(__ARM_NEON__)
> - vst1q_u8(dst, vld1q_u8(src));
> -#else
> - uint32_t buffer[4];
> - memcpy(buffer, src, 16);
> - memcpy(dst, buffer, 16);
> -#endif
> -}
> -
> -/* Decodes a number in the range [0..255], by reading 1 - 11 bits. */
> -static BROTLI_NOINLINE BrotliDecoderErrorCode DecodeVarLenUint8(
> - BrotliDecoderState* s, BrotliBitReader* br, uint32_t* value) {
> - uint32_t bits;
> - switch (s->substate_decode_uint8) {
> - case BROTLI_STATE_DECODE_UINT8_NONE:
> - if (BROTLI_PREDICT_FALSE(!BrotliSafeReadBits(br, 1, &bits))) {
> - return BROTLI_DECODER_NEEDS_MORE_INPUT;
> - }
> - if (bits == 0) {
> - *value = 0;
> - return BROTLI_DECODER_SUCCESS;
> - }
> - /* Fall through. */
> -
> - case BROTLI_STATE_DECODE_UINT8_SHORT:
> - if (BROTLI_PREDICT_FALSE(!BrotliSafeReadBits(br, 3, &bits))) {
> - s->substate_decode_uint8 = BROTLI_STATE_DECODE_UINT8_SHORT;
> - return BROTLI_DECODER_NEEDS_MORE_INPUT;
> - }
> - if (bits == 0) {
> - *value = 1;
> - s->substate_decode_uint8 = BROTLI_STATE_DECODE_UINT8_NONE;
> - return BROTLI_DECODER_SUCCESS;
> - }
> - /* Use output value as a temporary storage. It MUST be persisted. */
> - *value = bits;
> - /* Fall through. */
> -
> - case BROTLI_STATE_DECODE_UINT8_LONG:
> - if (BROTLI_PREDICT_FALSE(!BrotliSafeReadBits(br, *value, &bits))) {
> - s->substate_decode_uint8 = BROTLI_STATE_DECODE_UINT8_LONG;
> - return BROTLI_DECODER_NEEDS_MORE_INPUT;
> - }
> - *value = (1U << *value) + bits;
> - s->substate_decode_uint8 = BROTLI_STATE_DECODE_UINT8_NONE;
> - return BROTLI_DECODER_SUCCESS;
> -
> - default:
> - return
> - BROTLI_FAILURE(BROTLI_DECODER_ERROR_UNREACHABLE);
> - }
> -}
> -
> -/* Decodes a metablock length and flags by reading 2 - 31 bits. */
> -static BrotliDecoderErrorCode BROTLI_NOINLINE DecodeMetaBlockLength(
> - BrotliDecoderState* s, BrotliBitReader* br) {
> - uint32_t bits;
> - int i;
> - for (;;) {
> - switch (s->substate_metablock_header) {
> - case BROTLI_STATE_METABLOCK_HEADER_NONE:
> - if (!BrotliSafeReadBits(br, 1, &bits)) {
> - return BROTLI_DECODER_NEEDS_MORE_INPUT;
> - }
> - s->is_last_metablock = bits ? 1 : 0;
> - s->meta_block_remaining_len = 0;
> - s->is_uncompressed = 0;
> - s->is_metadata = 0;
> - if (!s->is_last_metablock) {
> - s->substate_metablock_header =
> BROTLI_STATE_METABLOCK_HEADER_NIBBLES;
> - break;
> - }
> - s->substate_metablock_header =
> BROTLI_STATE_METABLOCK_HEADER_EMPTY;
> - /* Fall through. */
> -
> - case BROTLI_STATE_METABLOCK_HEADER_EMPTY:
> - if (!BrotliSafeReadBits(br, 1, &bits)) {
> - return BROTLI_DECODER_NEEDS_MORE_INPUT;
> - }
> - if (bits) {
> - s->substate_metablock_header =
> BROTLI_STATE_METABLOCK_HEADER_NONE;
> - return BROTLI_DECODER_SUCCESS;
> - }
> - s->substate_metablock_header =
> BROTLI_STATE_METABLOCK_HEADER_NIBBLES;
> - /* Fall through. */
> -
> - case BROTLI_STATE_METABLOCK_HEADER_NIBBLES:
> - if (!BrotliSafeReadBits(br, 2, &bits)) {
> - return BROTLI_DECODER_NEEDS_MORE_INPUT;
> - }
> - s->size_nibbles = (uint8_t)(bits + 4);
> - s->loop_counter = 0;
> - if (bits == 3) {
> - s->is_metadata = 1;
> - s->substate_metablock_header =
> BROTLI_STATE_METABLOCK_HEADER_RESERVED;
> - break;
> - }
> - s->substate_metablock_header =
> BROTLI_STATE_METABLOCK_HEADER_SIZE;
> - /* Fall through. */
> -
> - case BROTLI_STATE_METABLOCK_HEADER_SIZE:
> - i = s->loop_counter;
> - for (; i < (int)s->size_nibbles; ++i) {
> - if (!BrotliSafeReadBits(br, 4, &bits)) {
> - s->loop_counter = i;
> - return BROTLI_DECODER_NEEDS_MORE_INPUT;
> - }
> - if (i + 1 == s->size_nibbles && s->size_nibbles > 4 && bits == 0) {
> - return
> BROTLI_FAILURE(BROTLI_DECODER_ERROR_FORMAT_EXUBERANT_NIBBLE);
> - }
> - s->meta_block_remaining_len |= (int)(bits << (i * 4));
> - }
> - s->substate_metablock_header =
> - BROTLI_STATE_METABLOCK_HEADER_UNCOMPRESSED;
> - /* Fall through. */
> -
> - case BROTLI_STATE_METABLOCK_HEADER_UNCOMPRESSED:
> - if (!s->is_last_metablock) {
> - if (!BrotliSafeReadBits(br, 1, &bits)) {
> - return BROTLI_DECODER_NEEDS_MORE_INPUT;
> - }
> - s->is_uncompressed = bits ? 1 : 0;
> - }
> - ++s->meta_block_remaining_len;
> - s->substate_metablock_header =
> BROTLI_STATE_METABLOCK_HEADER_NONE;
> - return BROTLI_DECODER_SUCCESS;
> -
> - case BROTLI_STATE_METABLOCK_HEADER_RESERVED:
> - if (!BrotliSafeReadBits(br, 1, &bits)) {
> - return BROTLI_DECODER_NEEDS_MORE_INPUT;
> - }
> - if (bits != 0) {
> - return
> BROTLI_FAILURE(BROTLI_DECODER_ERROR_FORMAT_RESERVED);
> - }
> - s->substate_metablock_header =
> BROTLI_STATE_METABLOCK_HEADER_BYTES;
> - /* Fall through. */
> -
> - case BROTLI_STATE_METABLOCK_HEADER_BYTES:
> - if (!BrotliSafeReadBits(br, 2, &bits)) {
> - return BROTLI_DECODER_NEEDS_MORE_INPUT;
> - }
> - if (bits == 0) {
> - s->substate_metablock_header =
> BROTLI_STATE_METABLOCK_HEADER_NONE;
> - return BROTLI_DECODER_SUCCESS;
> - }
> - s->size_nibbles = (uint8_t)bits;
> - s->substate_metablock_header =
> BROTLI_STATE_METABLOCK_HEADER_METADATA;
> - /* Fall through. */
> -
> - case BROTLI_STATE_METABLOCK_HEADER_METADATA:
> - i = s->loop_counter;
> - for (; i < (int)s->size_nibbles; ++i) {
> - if (!BrotliSafeReadBits(br, 8, &bits)) {
> - s->loop_counter = i;
> - return BROTLI_DECODER_NEEDS_MORE_INPUT;
> - }
> - if (i + 1 == s->size_nibbles && s->size_nibbles > 1 && bits == 0) {
> - return BROTLI_FAILURE(
> - BROTLI_DECODER_ERROR_FORMAT_EXUBERANT_META_NIBBLE);
> - }
> - s->meta_block_remaining_len |= (int)(bits << (i * 8));
> - }
> - ++s->meta_block_remaining_len;
> - s->substate_metablock_header =
> BROTLI_STATE_METABLOCK_HEADER_NONE;
> - return BROTLI_DECODER_SUCCESS;
> -
> - default:
> - return
> - BROTLI_FAILURE(BROTLI_DECODER_ERROR_UNREACHABLE);
> - }
> - }
> -}
> -
> -/* Decodes the Huffman code.
> - This method doesn't read data from the bit reader, BUT drops the amount
> of
> - bits that correspond to the decoded symbol.
> - bits MUST contain at least 15 (BROTLI_HUFFMAN_MAX_CODE_LENGTH)
> valid bits. */
> -static BROTLI_INLINE uint32_t DecodeSymbol(uint32_t bits,
> - const HuffmanCode* table,
> - BrotliBitReader* br) {
> - table += bits & HUFFMAN_TABLE_MASK;
> - if (table->bits > HUFFMAN_TABLE_BITS) {
> - uint32_t nbits = table->bits - HUFFMAN_TABLE_BITS;
> - BrotliDropBits(br, HUFFMAN_TABLE_BITS);
> - table += table->value;
> - table += (bits >> HUFFMAN_TABLE_BITS) & BitMask(nbits);
> - }
> - BrotliDropBits(br, table->bits);
> - return table->value;
> -}
> -
> -/* Reads and decodes the next Huffman code from bit-stream.
> - This method peeks 16 bits of input and drops 0 - 15 of them. */
> -static BROTLI_INLINE uint32_t ReadSymbol(const HuffmanCode* table,
> - BrotliBitReader* br) {
> - return DecodeSymbol(BrotliGet16BitsUnmasked(br), table, br);
> -}
> -
> -/* Same as DecodeSymbol, but it is known that there is less than 15 bits of
> - input are currently available. */
> -static BROTLI_NOINLINE BROTLI_BOOL SafeDecodeSymbol(
> - const HuffmanCode* table, BrotliBitReader* br, uint32_t* result) {
> - uint32_t val;
> - uint32_t available_bits = BrotliGetAvailableBits(br);
> - if (available_bits == 0) {
> - if (table->bits == 0) {
> - *result = table->value;
> - return BROTLI_TRUE;
> - }
> - return BROTLI_FALSE; /* No valid bits at all. */
> - }
> - val = (uint32_t)BrotliGetBitsUnmasked(br);
> - table += val & HUFFMAN_TABLE_MASK;
> - if (table->bits <= HUFFMAN_TABLE_BITS) {
> - if (table->bits <= available_bits) {
> - BrotliDropBits(br, table->bits);
> - *result = table->value;
> - return BROTLI_TRUE;
> - } else {
> - return BROTLI_FALSE; /* Not enough bits for the first level. */
> - }
> - }
> - if (available_bits <= HUFFMAN_TABLE_BITS) {
> - return BROTLI_FALSE; /* Not enough bits to move to the second level. */
> - }
> -
> - /* Speculatively drop HUFFMAN_TABLE_BITS. */
> - val = (val & BitMask(table->bits)) >> HUFFMAN_TABLE_BITS;
> - available_bits -= HUFFMAN_TABLE_BITS;
> - table += table->value + val;
> - if (available_bits < table->bits) {
> - return BROTLI_FALSE; /* Not enough bits for the second level. */
> - }
> -
> - BrotliDropBits(br, HUFFMAN_TABLE_BITS + table->bits);
> - *result = table->value;
> - return BROTLI_TRUE;
> -}
> -
> -static BROTLI_INLINE BROTLI_BOOL SafeReadSymbol(
> - const HuffmanCode* table, BrotliBitReader* br, uint32_t* result) {
> - uint32_t val;
> - if (BROTLI_PREDICT_TRUE(BrotliSafeGetBits(br, 15, &val))) {
> - *result = DecodeSymbol(val, table, br);
> - return BROTLI_TRUE;
> - }
> - return SafeDecodeSymbol(table, br, result);
> -}
> -
> -/* Makes a look-up in first level Huffman table. Peeks 8 bits. */
> -static BROTLI_INLINE void PreloadSymbol(int safe,
> - const HuffmanCode* table,
> - BrotliBitReader* br,
> - uint32_t* bits,
> - uint32_t* value) {
> - if (safe) {
> - return;
> - }
> - table += BrotliGetBits(br, HUFFMAN_TABLE_BITS);
> - *bits = table->bits;
> - *value = table->value;
> -}
> -
> -/* Decodes the next Huffman code using data prepared by PreloadSymbol.
> - Reads 0 - 15 bits. Also peeks 8 following bits. */
> -static BROTLI_INLINE uint32_t ReadPreloadedSymbol(const HuffmanCode*
> table,
> - BrotliBitReader* br,
> - uint32_t* bits,
> - uint32_t* value) {
> - uint32_t result = *value;
> - if (BROTLI_PREDICT_FALSE(*bits > HUFFMAN_TABLE_BITS)) {
> - uint32_t val = BrotliGet16BitsUnmasked(br);
> - const HuffmanCode* ext = table + (val & HUFFMAN_TABLE_MASK) +
> *value;
> - uint32_t mask = BitMask((*bits - HUFFMAN_TABLE_BITS));
> - BrotliDropBits(br, HUFFMAN_TABLE_BITS);
> - ext += (val >> HUFFMAN_TABLE_BITS) & mask;
> - BrotliDropBits(br, ext->bits);
> - result = ext->value;
> - } else {
> - BrotliDropBits(br, *bits);
> - }
> - PreloadSymbol(0, table, br, bits, value);
> - return result;
> -}
> -
> -static BROTLI_INLINE uint32_t Log2Floor(uint32_t x) {
> - uint32_t result = 0;
> - while (x) {
> - x >>= 1;
> - ++result;
> - }
> - return result;
> -}
> -
> -/* Reads (s->symbol + 1) symbols.
> - Totally 1..4 symbols are read, 1..11 bits each.
> - The list of symbols MUST NOT contain duplicates. */
> -static BrotliDecoderErrorCode ReadSimpleHuffmanSymbols(
> - uint32_t alphabet_size, uint32_t max_symbol, BrotliDecoderState* s) {
> - /* max_bits == 1..11; symbol == 0..3; 1..44 bits will be read. */
> - BrotliBitReader* br = &s->br;
> - uint32_t max_bits = Log2Floor(alphabet_size - 1);
> - uint32_t i = s->sub_loop_counter;
> - uint32_t num_symbols = s->symbol;
> - while (i <= num_symbols) {
> - uint32_t v;
> - if (BROTLI_PREDICT_FALSE(!BrotliSafeReadBits(br, max_bits, &v))) {
> - s->sub_loop_counter = i;
> - s->substate_huffman = BROTLI_STATE_HUFFMAN_SIMPLE_READ;
> - return BROTLI_DECODER_NEEDS_MORE_INPUT;
> - }
> - if (v >= max_symbol) {
> - return
> -
> BROTLI_FAILURE(BROTLI_DECODER_ERROR_FORMAT_SIMPLE_HUFFMAN_A
> LPHABET);
> - }
> - s->symbols_lists_array[i] = (uint16_t)v;
> - BROTLI_LOG_UINT(s->symbols_lists_array[i]);
> - ++i;
> - }
> -
> - for (i = 0; i < num_symbols; ++i) {
> - uint32_t k = i + 1;
> - for (; k <= num_symbols; ++k) {
> - if (s->symbols_lists_array[i] == s->symbols_lists_array[k]) {
> - return
> BROTLI_FAILURE(BROTLI_DECODER_ERROR_FORMAT_SIMPLE_HUFFMAN_S
> AME);
> - }
> - }
> - }
> -
> - return BROTLI_DECODER_SUCCESS;
> -}
> -
> -/* Process single decoded symbol code length:
> - A) reset the repeat variable
> - B) remember code length (if it is not 0)
> - C) extend corresponding index-chain
> - D) reduce the Huffman space
> - E) update the histogram */
> -static BROTLI_INLINE void ProcessSingleCodeLength(uint32_t code_len,
> - uint32_t* symbol, uint32_t* repeat, uint32_t* space,
> - uint32_t* prev_code_len, uint16_t* symbol_lists,
> - uint16_t* code_length_histo, int* next_symbol) {
> - *repeat = 0;
> - if (code_len != 0) { /* code_len == 1..15 */
> - symbol_lists[next_symbol[code_len]] = (uint16_t)(*symbol);
> - next_symbol[code_len] = (int)(*symbol);
> - *prev_code_len = code_len;
> - *space -= 32768U >> code_len;
> - code_length_histo[code_len]++;
> - BROTLI_LOG(("[ReadHuffmanCode] code_length[%d] = %d\n",
> - (int)*symbol, (int)code_len));
> - }
> - (*symbol)++;
> -}
> -
> -/* Process repeated symbol code length.
> - A) Check if it is the extension of previous repeat sequence; if the decoded
> - value is not BROTLI_REPEAT_PREVIOUS_CODE_LENGTH, then it is a new
> - symbol-skip
> - B) Update repeat variable
> - C) Check if operation is feasible (fits alphabet)
> - D) For each symbol do the same operations as in
> ProcessSingleCodeLength
> -
> - PRECONDITION: code_len == BROTLI_REPEAT_PREVIOUS_CODE_LENGTH
> or
> - code_len == BROTLI_REPEAT_ZERO_CODE_LENGTH */
> -static BROTLI_INLINE void ProcessRepeatedCodeLength(uint32_t code_len,
> - uint32_t repeat_delta, uint32_t alphabet_size, uint32_t* symbol,
> - uint32_t* repeat, uint32_t* space, uint32_t* prev_code_len,
> - uint32_t* repeat_code_len, uint16_t* symbol_lists,
> - uint16_t* code_length_histo, int* next_symbol) {
> - uint32_t old_repeat;
> - uint32_t extra_bits = 3; /* for BROTLI_REPEAT_ZERO_CODE_LENGTH */
> - uint32_t new_len = 0; /* for BROTLI_REPEAT_ZERO_CODE_LENGTH */
> - if (code_len == BROTLI_REPEAT_PREVIOUS_CODE_LENGTH) {
> - new_len = *prev_code_len;
> - extra_bits = 2;
> - }
> - if (*repeat_code_len != new_len) {
> - *repeat = 0;
> - *repeat_code_len = new_len;
> - }
> - old_repeat = *repeat;
> - if (*repeat > 0) {
> - *repeat -= 2;
> - *repeat <<= extra_bits;
> - }
> - *repeat += repeat_delta + 3U;
> - repeat_delta = *repeat - old_repeat;
> - if (*symbol + repeat_delta > alphabet_size) {
> - BROTLI_DUMP();
> - *symbol = alphabet_size;
> - *space = 0xFFFFF;
> - return;
> - }
> - BROTLI_LOG(("[ReadHuffmanCode] code_length[%d..%d] = %d\n",
> - (int)*symbol, (int)(*symbol + repeat_delta - 1), (int)*repeat_code_len));
> - if (*repeat_code_len != 0) {
> - unsigned last = *symbol + repeat_delta;
> - int next = next_symbol[*repeat_code_len];
> - do {
> - symbol_lists[next] = (uint16_t)*symbol;
> - next = (int)*symbol;
> - } while (++(*symbol) != last);
> - next_symbol[*repeat_code_len] = next;
> - *space -= repeat_delta << (15 - *repeat_code_len);
> - code_length_histo[*repeat_code_len] =
> - (uint16_t)(code_length_histo[*repeat_code_len] + repeat_delta);
> - } else {
> - *symbol += repeat_delta;
> - }
> -}
> -
> -/* Reads and decodes symbol codelengths. */
> -static BrotliDecoderErrorCode ReadSymbolCodeLengths(
> - uint32_t alphabet_size, BrotliDecoderState* s) {
> - BrotliBitReader* br = &s->br;
> - uint32_t symbol = s->symbol;
> - uint32_t repeat = s->repeat;
> - uint32_t space = s->space;
> - uint32_t prev_code_len = s->prev_code_len;
> - uint32_t repeat_code_len = s->repeat_code_len;
> - uint16_t* symbol_lists = s->symbol_lists;
> - uint16_t* code_length_histo = s->code_length_histo;
> - int* next_symbol = s->next_symbol;
> - if (!BrotliWarmupBitReader(br)) {
> - return BROTLI_DECODER_NEEDS_MORE_INPUT;
> - }
> - while (symbol < alphabet_size && space > 0) {
> - const HuffmanCode* p = s->table;
> - uint32_t code_len;
> - if (!BrotliCheckInputAmount(br,
> BROTLI_SHORT_FILL_BIT_WINDOW_READ)) {
> - s->symbol = symbol;
> - s->repeat = repeat;
> - s->prev_code_len = prev_code_len;
> - s->repeat_code_len = repeat_code_len;
> - s->space = space;
> - return BROTLI_DECODER_NEEDS_MORE_INPUT;
> - }
> - BrotliFillBitWindow16(br);
> - p += BrotliGetBitsUnmasked(br) &
> - BitMask(BROTLI_HUFFMAN_MAX_CODE_LENGTH_CODE_LENGTH);
> - BrotliDropBits(br, p->bits); /* Use 1..5 bits. */
> - code_len = p->value; /* code_len == 0..17 */
> - if (code_len < BROTLI_REPEAT_PREVIOUS_CODE_LENGTH) {
> - ProcessSingleCodeLength(code_len, &symbol, &repeat, &space,
> - &prev_code_len, symbol_lists, code_length_histo, next_symbol);
> - } else { /* code_len == 16..17, extra_bits == 2..3 */
> - uint32_t extra_bits =
> - (code_len == BROTLI_REPEAT_PREVIOUS_CODE_LENGTH) ? 2 : 3;
> - uint32_t repeat_delta =
> - (uint32_t)BrotliGetBitsUnmasked(br) & BitMask(extra_bits);
> - BrotliDropBits(br, extra_bits);
> - ProcessRepeatedCodeLength(code_len, repeat_delta, alphabet_size,
> - &symbol, &repeat, &space, &prev_code_len, &repeat_code_len,
> - symbol_lists, code_length_histo, next_symbol);
> - }
> - }
> - s->space = space;
> - return BROTLI_DECODER_SUCCESS;
> -}
> -
> -static BrotliDecoderErrorCode SafeReadSymbolCodeLengths(
> - uint32_t alphabet_size, BrotliDecoderState* s) {
> - BrotliBitReader* br = &s->br;
> - BROTLI_BOOL get_byte = BROTLI_FALSE;
> - while (s->symbol < alphabet_size && s->space > 0) {
> - const HuffmanCode* p = s->table;
> - uint32_t code_len;
> - uint32_t available_bits;
> - uint32_t bits = 0;
> - if (get_byte && !BrotliPullByte(br)) return
> BROTLI_DECODER_NEEDS_MORE_INPUT;
> - get_byte = BROTLI_FALSE;
> - available_bits = BrotliGetAvailableBits(br);
> - if (available_bits != 0) {
> - bits = (uint32_t)BrotliGetBitsUnmasked(br);
> - }
> - p += bits &
> BitMask(BROTLI_HUFFMAN_MAX_CODE_LENGTH_CODE_LENGTH);
> - if (p->bits > available_bits) {
> - get_byte = BROTLI_TRUE;
> - continue;
> - }
> - code_len = p->value; /* code_len == 0..17 */
> - if (code_len < BROTLI_REPEAT_PREVIOUS_CODE_LENGTH) {
> - BrotliDropBits(br, p->bits);
> - ProcessSingleCodeLength(code_len, &s->symbol, &s->repeat, &s->space,
> - &s->prev_code_len, s->symbol_lists, s->code_length_histo,
> - s->next_symbol);
> - } else { /* code_len == 16..17, extra_bits == 2..3 */
> - uint32_t extra_bits = code_len - 14U;
> - uint32_t repeat_delta = (bits >> p->bits) & BitMask(extra_bits);
> - if (available_bits < p->bits + extra_bits) {
> - get_byte = BROTLI_TRUE;
> - continue;
> - }
> - BrotliDropBits(br, p->bits + extra_bits);
> - ProcessRepeatedCodeLength(code_len, repeat_delta, alphabet_size,
> - &s->symbol, &s->repeat, &s->space, &s->prev_code_len,
> - &s->repeat_code_len, s->symbol_lists, s->code_length_histo,
> - s->next_symbol);
> - }
> - }
> - return BROTLI_DECODER_SUCCESS;
> -}
> -
> -/* Reads and decodes 15..18 codes using static prefix code.
> - Each code is 2..4 bits long. In total 30..72 bits are used. */
> -static BrotliDecoderErrorCode
> ReadCodeLengthCodeLengths(BrotliDecoderState* s) {
> - BrotliBitReader* br = &s->br;
> - uint32_t num_codes = s->repeat;
> - unsigned space = s->space;
> - uint32_t i = s->sub_loop_counter;
> - for (; i < BROTLI_CODE_LENGTH_CODES; ++i) {
> - const uint8_t code_len_idx = kCodeLengthCodeOrder[i];
> - uint32_t ix;
> - uint32_t v;
> - if (BROTLI_PREDICT_FALSE(!BrotliSafeGetBits(br, 4, &ix))) {
> - uint32_t available_bits = BrotliGetAvailableBits(br);
> - if (available_bits != 0) {
> - ix = BrotliGetBitsUnmasked(br) & 0xF;
> - } else {
> - ix = 0;
> - }
> - if (kCodeLengthPrefixLength[ix] > available_bits) {
> - s->sub_loop_counter = i;
> - s->repeat = num_codes;
> - s->space = space;
> - s->substate_huffman = BROTLI_STATE_HUFFMAN_COMPLEX;
> - return BROTLI_DECODER_NEEDS_MORE_INPUT;
> - }
> - }
> - v = kCodeLengthPrefixValue[ix];
> - BrotliDropBits(br, kCodeLengthPrefixLength[ix]);
> - s->code_length_code_lengths[code_len_idx] = (uint8_t)v;
> - BROTLI_LOG_ARRAY_INDEX(s->code_length_code_lengths,
> code_len_idx);
> - if (v != 0) {
> - space = space - (32U >> v);
> - ++num_codes;
> - ++s->code_length_histo[v];
> - if (space - 1U >= 32U) {
> - /* space is 0 or wrapped around. */
> - break;
> - }
> - }
> - }
> - if (!(num_codes == 1 || space == 0)) {
> - return BROTLI_FAILURE(BROTLI_DECODER_ERROR_FORMAT_CL_SPACE);
> - }
> - return BROTLI_DECODER_SUCCESS;
> -}
> -
> -/* Decodes the Huffman tables.
> - There are 2 scenarios:
> - A) Huffman code contains only few symbols (1..4). Those symbols are read
> - directly; their code lengths are defined by the number of symbols.
> - For this scenario 4 - 49 bits will be read.
> -
> - B) 2-phase decoding:
> - B.1) Small Huffman table is decoded; it is specified with code lengths
> - encoded with predefined entropy code. 32 - 74 bits are used.
> - B.2) Decoded table is used to decode code lengths of symbols in resulting
> - Huffman table. In worst case 3520 bits are read. */
> -static BrotliDecoderErrorCode ReadHuffmanCode(uint32_t alphabet_size,
> - uint32_t max_symbol,
> - HuffmanCode* table,
> - uint32_t* opt_table_size,
> - BrotliDecoderState* s) {
> - BrotliBitReader* br = &s->br;
> - /* Unnecessary masking, but might be good for safety. */
> - alphabet_size &= 0x7FF;
> - /* State machine. */
> - for (;;) {
> - switch (s->substate_huffman) {
> - case BROTLI_STATE_HUFFMAN_NONE:
> - if (!BrotliSafeReadBits(br, 2, &s->sub_loop_counter)) {
> - return BROTLI_DECODER_NEEDS_MORE_INPUT;
> - }
> - BROTLI_LOG_UINT(s->sub_loop_counter);
> - /* The value is used as follows:
> - 1 for simple code;
> - 0 for no skipping, 2 skips 2 code lengths, 3 skips 3 code lengths */
> - if (s->sub_loop_counter != 1) {
> - s->space = 32;
> - s->repeat = 0; /* num_codes */
> - memset(&s->code_length_histo[0], 0, sizeof(s->code_length_histo[0])
> *
> - (BROTLI_HUFFMAN_MAX_CODE_LENGTH_CODE_LENGTH + 1));
> - memset(&s->code_length_code_lengths[0], 0,
> - sizeof(s->code_length_code_lengths));
> - s->substate_huffman = BROTLI_STATE_HUFFMAN_COMPLEX;
> - continue;
> - }
> - /* Fall through. */
> -
> - case BROTLI_STATE_HUFFMAN_SIMPLE_SIZE:
> - /* Read symbols, codes & code lengths directly. */
> - if (!BrotliSafeReadBits(br, 2, &s->symbol)) { /* num_symbols */
> - s->substate_huffman = BROTLI_STATE_HUFFMAN_SIMPLE_SIZE;
> - return BROTLI_DECODER_NEEDS_MORE_INPUT;
> - }
> - s->sub_loop_counter = 0;
> - /* Fall through. */
> -
> - case BROTLI_STATE_HUFFMAN_SIMPLE_READ: {
> - BrotliDecoderErrorCode result =
> - ReadSimpleHuffmanSymbols(alphabet_size, max_symbol, s);
> - if (result != BROTLI_DECODER_SUCCESS) {
> - return result;
> - }
> - }
> - /* Fall through. */
> -
> - case BROTLI_STATE_HUFFMAN_SIMPLE_BUILD: {
> - uint32_t table_size;
> - if (s->symbol == 3) {
> - uint32_t bits;
> - if (!BrotliSafeReadBits(br, 1, &bits)) {
> - s->substate_huffman = BROTLI_STATE_HUFFMAN_SIMPLE_BUILD;
> - return BROTLI_DECODER_NEEDS_MORE_INPUT;
> - }
> - s->symbol += bits;
> - }
> - BROTLI_LOG_UINT(s->symbol);
> - table_size = BrotliBuildSimpleHuffmanTable(
> - table, HUFFMAN_TABLE_BITS, s->symbols_lists_array, s->symbol);
> - if (opt_table_size) {
> - *opt_table_size = table_size;
> - }
> - s->substate_huffman = BROTLI_STATE_HUFFMAN_NONE;
> - return BROTLI_DECODER_SUCCESS;
> - }
> -
> - /* Decode Huffman-coded code lengths. */
> - case BROTLI_STATE_HUFFMAN_COMPLEX: {
> - uint32_t i;
> - BrotliDecoderErrorCode result = ReadCodeLengthCodeLengths(s);
> - if (result != BROTLI_DECODER_SUCCESS) {
> - return result;
> - }
> - BrotliBuildCodeLengthsHuffmanTable(s->table,
> - s->code_length_code_lengths,
> - s->code_length_histo);
> - memset(&s->code_length_histo[0], 0, sizeof(s->code_length_histo));
> - for (i = 0; i <= BROTLI_HUFFMAN_MAX_CODE_LENGTH; ++i) {
> - s->next_symbol[i] = (int)i - (BROTLI_HUFFMAN_MAX_CODE_LENGTH +
> 1);
> - s->symbol_lists[s->next_symbol[i]] = 0xFFFF;
> - }
> -
> - s->symbol = 0;
> - s->prev_code_len = BROTLI_INITIAL_REPEATED_CODE_LENGTH;
> - s->repeat = 0;
> - s->repeat_code_len = 0;
> - s->space = 32768;
> - s->substate_huffman = BROTLI_STATE_HUFFMAN_LENGTH_SYMBOLS;
> - }
> - /* Fall through. */
> -
> - case BROTLI_STATE_HUFFMAN_LENGTH_SYMBOLS: {
> - uint32_t table_size;
> - BrotliDecoderErrorCode result = ReadSymbolCodeLengths(max_symbol,
> s);
> - if (result == BROTLI_DECODER_NEEDS_MORE_INPUT) {
> - result = SafeReadSymbolCodeLengths(max_symbol, s);
> - }
> - if (result != BROTLI_DECODER_SUCCESS) {
> - return result;
> - }
> -
> - if (s->space != 0) {
> - BROTLI_LOG(("[ReadHuffmanCode] space = %d\n", (int)s->space));
> - return
> BROTLI_FAILURE(BROTLI_DECODER_ERROR_FORMAT_HUFFMAN_SPACE);
> - }
> - table_size = BrotliBuildHuffmanTable(
> - table, HUFFMAN_TABLE_BITS, s->symbol_lists, s->code_length_histo);
> - if (opt_table_size) {
> - *opt_table_size = table_size;
> - }
> - s->substate_huffman = BROTLI_STATE_HUFFMAN_NONE;
> - return BROTLI_DECODER_SUCCESS;
> - }
> -
> - default:
> - return
> - BROTLI_FAILURE(BROTLI_DECODER_ERROR_UNREACHABLE);
> - }
> - }
> -}
> -
> -/* Decodes a block length by reading 3..39 bits. */
> -static BROTLI_INLINE uint32_t ReadBlockLength(const HuffmanCode* table,
> - BrotliBitReader* br) {
> - uint32_t code;
> - uint32_t nbits;
> - code = ReadSymbol(table, br);
> - nbits = kBlockLengthPrefixCode[code].nbits; /* nbits == 2..24 */
> - return kBlockLengthPrefixCode[code].offset + BrotliReadBits(br, nbits);
> -}
> -
> -/* WARNING: if state is not BROTLI_STATE_READ_BLOCK_LENGTH_NONE,
> then
> - reading can't be continued with ReadBlockLength. */
> -static BROTLI_INLINE BROTLI_BOOL SafeReadBlockLength(
> - BrotliDecoderState* s, uint32_t* result, const HuffmanCode* table,
> - BrotliBitReader* br) {
> - uint32_t index;
> - if (s->substate_read_block_length ==
> BROTLI_STATE_READ_BLOCK_LENGTH_NONE) {
> - if (!SafeReadSymbol(table, br, &index)) {
> - return BROTLI_FALSE;
> - }
> - } else {
> - index = s->block_length_index;
> - }
> - {
> - uint32_t bits;
> - uint32_t nbits = kBlockLengthPrefixCode[index].nbits; /* nbits == 2..24 */
> - if (!BrotliSafeReadBits(br, nbits, &bits)) {
> - s->block_length_index = index;
> - s->substate_read_block_length =
> BROTLI_STATE_READ_BLOCK_LENGTH_SUFFIX;
> - return BROTLI_FALSE;
> - }
> - *result = kBlockLengthPrefixCode[index].offset + bits;
> - s->substate_read_block_length =
> BROTLI_STATE_READ_BLOCK_LENGTH_NONE;
> - return BROTLI_TRUE;
> - }
> -}
> -
> -/* Transform:
> - 1) initialize list L with values 0, 1,... 255
> - 2) For each input element X:
> - 2.1) let Y = L[X]
> - 2.2) remove X-th element from L
> - 2.3) prepend Y to L
> - 2.4) append Y to output
> -
> - In most cases max(Y) <= 7, so most of L remains intact.
> - To reduce the cost of initialization, we reuse L, remember the upper
> bound
> - of Y values, and reinitialize only first elements in L.
> -
> - Most of input values are 0 and 1. To reduce number of branches, we
> replace
> - inner for loop with do-while. */
> -static BROTLI_NOINLINE void InverseMoveToFrontTransform(
> - uint8_t* v, uint32_t v_len, BrotliDecoderState* state) {
> - /* Reinitialize elements that could have been changed. */
> - uint32_t i = 1;
> - uint32_t upper_bound = state->mtf_upper_bound;
> - uint32_t* mtf = &state->mtf[1]; /* Make mtf[-1] addressable. */
> - uint8_t* mtf_u8 = (uint8_t*)mtf;
> - /* Load endian-aware constant. */
> - const uint8_t b0123[4] = {0, 1, 2, 3};
> - uint32_t pattern;
> - memcpy(&pattern, &b0123, 4);
> -
> - /* Initialize list using 4 consequent values pattern. */
> - mtf[0] = pattern;
> - do {
> - pattern += 0x04040404; /* Advance all 4 values by 4. */
> - mtf[i] = pattern;
> - i++;
> - } while (i <= upper_bound);
> -
> - /* Transform the input. */
> - upper_bound = 0;
> - for (i = 0; i < v_len; ++i) {
> - int index = v[i];
> - uint8_t value = mtf_u8[index];
> - upper_bound |= v[i];
> - v[i] = value;
> - mtf_u8[-1] = value;
> - do {
> - index--;
> - mtf_u8[index + 1] = mtf_u8[index];
> - } while (index >= 0);
> - }
> - /* Remember amount of elements to be reinitialized. */
> - state->mtf_upper_bound = upper_bound >> 2;
> -}
> -
> -/* Decodes a series of Huffman table using ReadHuffmanCode function. */
> -static BrotliDecoderErrorCode HuffmanTreeGroupDecode(
> - HuffmanTreeGroup* group, BrotliDecoderState* s) {
> - if (s->substate_tree_group != BROTLI_STATE_TREE_GROUP_LOOP) {
> - s->next = group->codes;
> - s->htree_index = 0;
> - s->substate_tree_group = BROTLI_STATE_TREE_GROUP_LOOP;
> - }
> - while (s->htree_index < group->num_htrees) {
> - uint32_t table_size;
> - BrotliDecoderErrorCode result =
> - ReadHuffmanCode(group->alphabet_size, group->max_symbol,
> - s->next, &table_size, s);
> - if (result != BROTLI_DECODER_SUCCESS) return result;
> - group->htrees[s->htree_index] = s->next;
> - s->next += table_size;
> - ++s->htree_index;
> - }
> - s->substate_tree_group = BROTLI_STATE_TREE_GROUP_NONE;
> - return BROTLI_DECODER_SUCCESS;
> -}
> -
> -/* Decodes a context map.
> - Decoding is done in 4 phases:
> - 1) Read auxiliary information (6..16 bits) and allocate memory.
> - In case of trivial context map, decoding is finished at this phase.
> - 2) Decode Huffman table using ReadHuffmanCode function.
> - This table will be used for reading context map items.
> - 3) Read context map items; "0" values could be run-length encoded.
> - 4) Optionally, apply InverseMoveToFront transform to the resulting map.
> */
> -static BrotliDecoderErrorCode DecodeContextMap(uint32_t
> context_map_size,
> - uint32_t* num_htrees,
> - uint8_t** context_map_arg,
> - BrotliDecoderState* s) {
> - BrotliBitReader* br = &s->br;
> - BrotliDecoderErrorCode result = BROTLI_DECODER_SUCCESS;
> -
> - switch ((int)s->substate_context_map) {
> - case BROTLI_STATE_CONTEXT_MAP_NONE:
> - result = DecodeVarLenUint8(s, br, num_htrees);
> - if (result != BROTLI_DECODER_SUCCESS) {
> - return result;
> - }
> - (*num_htrees)++;
> - s->context_index = 0;
> - BROTLI_LOG_UINT(context_map_size);
> - BROTLI_LOG_UINT(*num_htrees);
> - *context_map_arg =
> - (uint8_t*)BROTLI_DECODER_ALLOC(s, (size_t)context_map_size);
> - if (*context_map_arg == 0) {
> - return
> BROTLI_FAILURE(BROTLI_DECODER_ERROR_ALLOC_CONTEXT_MAP);
> - }
> - if (*num_htrees <= 1) {
> - memset(*context_map_arg, 0, (size_t)context_map_size);
> - return BROTLI_DECODER_SUCCESS;
> - }
> - s->substate_context_map =
> BROTLI_STATE_CONTEXT_MAP_READ_PREFIX;
> - /* Fall through. */
> -
> - case BROTLI_STATE_CONTEXT_MAP_READ_PREFIX: {
> - uint32_t bits;
> - /* In next stage ReadHuffmanCode uses at least 4 bits, so it is safe
> - to peek 4 bits ahead. */
> - if (!BrotliSafeGetBits(br, 5, &bits)) {
> - return BROTLI_DECODER_NEEDS_MORE_INPUT;
> - }
> - if ((bits & 1) != 0) { /* Use RLE for zeros. */
> - s->max_run_length_prefix = (bits >> 1) + 1;
> - BrotliDropBits(br, 5);
> - } else {
> - s->max_run_length_prefix = 0;
> - BrotliDropBits(br, 1);
> - }
> - BROTLI_LOG_UINT(s->max_run_length_prefix);
> - s->substate_context_map = BROTLI_STATE_CONTEXT_MAP_HUFFMAN;
> - }
> - /* Fall through. */
> -
> - case BROTLI_STATE_CONTEXT_MAP_HUFFMAN: {
> - uint32_t alphabet_size = *num_htrees + s->max_run_length_prefix;
> - result = ReadHuffmanCode(alphabet_size, alphabet_size,
> - s->context_map_table, NULL, s);
> - if (result != BROTLI_DECODER_SUCCESS) return result;
> - s->code = 0xFFFF;
> - s->substate_context_map = BROTLI_STATE_CONTEXT_MAP_DECODE;
> - }
> - /* Fall through. */
> -
> - case BROTLI_STATE_CONTEXT_MAP_DECODE: {
> - uint32_t context_index = s->context_index;
> - uint32_t max_run_length_prefix = s->max_run_length_prefix;
> - uint8_t* context_map = *context_map_arg;
> - uint32_t code = s->code;
> - BROTLI_BOOL skip_preamble = (code != 0xFFFF);
> - while (context_index < context_map_size || skip_preamble) {
> - if (!skip_preamble) {
> - if (!SafeReadSymbol(s->context_map_table, br, &code)) {
> - s->code = 0xFFFF;
> - s->context_index = context_index;
> - return BROTLI_DECODER_NEEDS_MORE_INPUT;
> - }
> - BROTLI_LOG_UINT(code);
> -
> - if (code == 0) {
> - context_map[context_index++] = 0;
> - continue;
> - }
> - if (code > max_run_length_prefix) {
> - context_map[context_index++] =
> - (uint8_t)(code - max_run_length_prefix);
> - continue;
> - }
> - } else {
> - skip_preamble = BROTLI_FALSE;
> - }
> - /* RLE sub-stage. */
> - {
> - uint32_t reps;
> - if (!BrotliSafeReadBits(br, code, &reps)) {
> - s->code = code;
> - s->context_index = context_index;
> - return BROTLI_DECODER_NEEDS_MORE_INPUT;
> - }
> - reps += 1U << code;
> - BROTLI_LOG_UINT(reps);
> - if (context_index + reps > context_map_size) {
> - return
> -
> BROTLI_FAILURE(BROTLI_DECODER_ERROR_FORMAT_CONTEXT_MAP_REPE
> AT);
> - }
> - do {
> - context_map[context_index++] = 0;
> - } while (--reps);
> - }
> - }
> - }
> - /* Fall through. */
> -
> - case BROTLI_STATE_CONTEXT_MAP_TRANSFORM: {
> - uint32_t bits;
> - if (!BrotliSafeReadBits(br, 1, &bits)) {
> - s->substate_context_map =
> BROTLI_STATE_CONTEXT_MAP_TRANSFORM;
> - return BROTLI_DECODER_NEEDS_MORE_INPUT;
> - }
> - if (bits != 0) {
> - InverseMoveToFrontTransform(*context_map_arg, context_map_size,
> s);
> - }
> - s->substate_context_map = BROTLI_STATE_CONTEXT_MAP_NONE;
> - return BROTLI_DECODER_SUCCESS;
> - }
> -
> - default:
> - return
> - BROTLI_FAILURE(BROTLI_DECODER_ERROR_UNREACHABLE);
> - }
> -}
> -
> -/* Decodes a command or literal and updates block type ring-buffer.
> - Reads 3..54 bits. */
> -static BROTLI_INLINE BROTLI_BOOL DecodeBlockTypeAndLength(
> - int safe, BrotliDecoderState* s, int tree_type) {
> - uint32_t max_block_type = s->num_block_types[tree_type];
> - const HuffmanCode* type_tree = &s->block_type_trees[
> - tree_type * BROTLI_HUFFMAN_MAX_SIZE_258];
> - const HuffmanCode* len_tree = &s->block_len_trees[
> - tree_type * BROTLI_HUFFMAN_MAX_SIZE_26];
> - BrotliBitReader* br = &s->br;
> - uint32_t* ringbuffer = &s->block_type_rb[tree_type * 2];
> - uint32_t block_type;
> - if (max_block_type <= 1) {
> - return BROTLI_FALSE;
> - }
> -
> - /* Read 0..15 + 3..39 bits. */
> - if (!safe) {
> - block_type = ReadSymbol(type_tree, br);
> - s->block_length[tree_type] = ReadBlockLength(len_tree, br);
> - } else {
> - BrotliBitReaderState memento;
> - BrotliBitReaderSaveState(br, &memento);
> - if (!SafeReadSymbol(type_tree, br, &block_type)) return BROTLI_FALSE;
> - if (!SafeReadBlockLength(s, &s->block_length[tree_type], len_tree, br)) {
> - s->substate_read_block_length =
> BROTLI_STATE_READ_BLOCK_LENGTH_NONE;
> - BrotliBitReaderRestoreState(br, &memento);
> - return BROTLI_FALSE;
> - }
> - }
> -
> - if (block_type == 1) {
> - block_type = ringbuffer[1] + 1;
> - } else if (block_type == 0) {
> - block_type = ringbuffer[0];
> - } else {
> - block_type -= 2;
> - }
> - if (block_type >= max_block_type) {
> - block_type -= max_block_type;
> - }
> - ringbuffer[0] = ringbuffer[1];
> - ringbuffer[1] = block_type;
> - return BROTLI_TRUE;
> -}
> -
> -static BROTLI_INLINE void DetectTrivialLiteralBlockTypes(
> - BrotliDecoderState* s) {
> - size_t i;
> - for (i = 0; i < 8; ++i) s->trivial_literal_contexts[i] = 0;
> - for (i = 0; i < s->num_block_types[0]; i++) {
> - size_t offset = i << BROTLI_LITERAL_CONTEXT_BITS;
> - size_t error = 0;
> - size_t sample = s->context_map[offset];
> - size_t j;
> - for (j = 0; j < (1u << BROTLI_LITERAL_CONTEXT_BITS);) {
> - BROTLI_REPEAT(4, error |= s->context_map[offset + j++] ^ sample;)
> - }
> - if (error == 0) {
> - s->trivial_literal_contexts[i >> 5] |= 1u << (i & 31);
> - }
> - }
> -}
> -
> -static BROTLI_INLINE void PrepareLiteralDecoding(BrotliDecoderState* s) {
> - uint8_t context_mode;
> - size_t trivial;
> - uint32_t block_type = s->block_type_rb[1];
> - uint32_t context_offset = block_type << BROTLI_LITERAL_CONTEXT_BITS;
> - s->context_map_slice = s->context_map + context_offset;
> - trivial = s->trivial_literal_contexts[block_type >> 5];
> - s->trivial_literal_context = (trivial >> (block_type & 31)) & 1;
> - s->literal_htree = s->literal_hgroup.htrees[s->context_map_slice[0]];
> - context_mode = s->context_modes[block_type] & 3;
> - s->context_lookup = BROTLI_CONTEXT_LUT(context_mode);
> -}
> -
> -/* Decodes the block type and updates the state for literal context.
> - Reads 3..54 bits. */
> -static BROTLI_INLINE BROTLI_BOOL DecodeLiteralBlockSwitchInternal(
> - int safe, BrotliDecoderState* s) {
> - if (!DecodeBlockTypeAndLength(safe, s, 0)) {
> - return BROTLI_FALSE;
> - }
> - PrepareLiteralDecoding(s);
> - return BROTLI_TRUE;
> -}
> -
> -static void BROTLI_NOINLINE DecodeLiteralBlockSwitch(BrotliDecoderState*
> s) {
> - DecodeLiteralBlockSwitchInternal(0, s);
> -}
> -
> -static BROTLI_BOOL BROTLI_NOINLINE SafeDecodeLiteralBlockSwitch(
> - BrotliDecoderState* s) {
> - return DecodeLiteralBlockSwitchInternal(1, s);
> -}
> -
> -/* Block switch for insert/copy length.
> - Reads 3..54 bits. */
> -static BROTLI_INLINE BROTLI_BOOL DecodeCommandBlockSwitchInternal(
> - int safe, BrotliDecoderState* s) {
> - if (!DecodeBlockTypeAndLength(safe, s, 1)) {
> - return BROTLI_FALSE;
> - }
> - s->htree_command = s->insert_copy_hgroup.htrees[s->block_type_rb[3]];
> - return BROTLI_TRUE;
> -}
> -
> -static void BROTLI_NOINLINE
> DecodeCommandBlockSwitch(BrotliDecoderState* s) {
> - DecodeCommandBlockSwitchInternal(0, s);
> -}
> -
> -static BROTLI_BOOL BROTLI_NOINLINE SafeDecodeCommandBlockSwitch(
> - BrotliDecoderState* s) {
> - return DecodeCommandBlockSwitchInternal(1, s);
> -}
> -
> -/* Block switch for distance codes.
> - Reads 3..54 bits. */
> -static BROTLI_INLINE BROTLI_BOOL DecodeDistanceBlockSwitchInternal(
> - int safe, BrotliDecoderState* s) {
> - if (!DecodeBlockTypeAndLength(safe, s, 2)) {
> - return BROTLI_FALSE;
> - }
> - s->dist_context_map_slice = s->dist_context_map +
> - (s->block_type_rb[5] << BROTLI_DISTANCE_CONTEXT_BITS);
> - s->dist_htree_index = s->dist_context_map_slice[s->distance_context];
> - return BROTLI_TRUE;
> -}
> -
> -static void BROTLI_NOINLINE
> DecodeDistanceBlockSwitch(BrotliDecoderState* s) {
> - DecodeDistanceBlockSwitchInternal(0, s);
> -}
> -
> -static BROTLI_BOOL BROTLI_NOINLINE SafeDecodeDistanceBlockSwitch(
> - BrotliDecoderState* s) {
> - return DecodeDistanceBlockSwitchInternal(1, s);
> -}
> -
> -static size_t UnwrittenBytes(const BrotliDecoderState* s, BROTLI_BOOL
> wrap) {
> - size_t pos = wrap && s->pos > s->ringbuffer_size ?
> - (size_t)s->ringbuffer_size : (size_t)(s->pos);
> - size_t partial_pos_rb = (s->rb_roundtrips * (size_t)s->ringbuffer_size) +
> pos;
> - return partial_pos_rb - s->partial_pos_out;
> -}
> -
> -/* Dumps output.
> - Returns BROTLI_DECODER_NEEDS_MORE_OUTPUT only if there is more
> output to push
> - and either ring-buffer is as big as window size, or |force| is true. */
> -static BrotliDecoderErrorCode BROTLI_NOINLINE WriteRingBuffer(
> - BrotliDecoderState* s, size_t* available_out, uint8_t** next_out,
> - size_t* total_out, BROTLI_BOOL force) {
> - uint8_t* start =
> - s->ringbuffer + (s->partial_pos_out & (size_t)s->ringbuffer_mask);
> - size_t to_write = UnwrittenBytes(s, BROTLI_TRUE);
> - size_t num_written = *available_out;
> - if (num_written > to_write) {
> - num_written = to_write;
> - }
> - if (s->meta_block_remaining_len < 0) {
> - return
> BROTLI_FAILURE(BROTLI_DECODER_ERROR_FORMAT_BLOCK_LENGTH_1);
> - }
> - if (next_out && !*next_out) {
> - *next_out = start;
> - } else {
> - if (next_out) {
> - memcpy(*next_out, start, num_written);
> - *next_out += num_written;
> - }
> - }
> - *available_out -= num_written;
> - BROTLI_LOG_UINT(to_write);
> - BROTLI_LOG_UINT(num_written);
> - s->partial_pos_out += num_written;
> - if (total_out) {
> - *total_out = s->partial_pos_out;
> - }
> - if (num_written < to_write) {
> - if (s->ringbuffer_size == (1 << s->window_bits) || force) {
> - return BROTLI_DECODER_NEEDS_MORE_OUTPUT;
> - } else {
> - return BROTLI_DECODER_SUCCESS;
> - }
> - }
> - /* Wrap ring buffer only if it has reached its maximal size. */
> - if (s->ringbuffer_size == (1 << s->window_bits) &&
> - s->pos >= s->ringbuffer_size) {
> - s->pos -= s->ringbuffer_size;
> - s->rb_roundtrips++;
> - s->should_wrap_ringbuffer = (size_t)s->pos != 0 ? 1 : 0;
> - }
> - return BROTLI_DECODER_SUCCESS;
> -}
> -
> -static void BROTLI_NOINLINE WrapRingBuffer(BrotliDecoderState* s) {
> - if (s->should_wrap_ringbuffer) {
> - memcpy(s->ringbuffer, s->ringbuffer_end, (size_t)s->pos);
> - s->should_wrap_ringbuffer = 0;
> - }
> -}
> -
> -/* Allocates ring-buffer.
> -
> - s->ringbuffer_size MUST be updated by BrotliCalculateRingBufferSize
> before
> - this function is called.
> -
> - Last two bytes of ring-buffer are initialized to 0, so context calculation
> - could be done uniformly for the first two and all other positions. */
> -static BROTLI_BOOL BROTLI_NOINLINE BrotliEnsureRingBuffer(
> - BrotliDecoderState* s) {
> - uint8_t* old_ringbuffer = s->ringbuffer;
> - if (s->ringbuffer_size == s->new_ringbuffer_size) {
> - return BROTLI_TRUE;
> - }
> -
> - s->ringbuffer = (uint8_t*)BROTLI_DECODER_ALLOC(s,
> - (size_t)(s->new_ringbuffer_size) + kRingBufferWriteAheadSlack);
> - if (s->ringbuffer == 0) {
> - /* Restore previous value. */
> - s->ringbuffer = old_ringbuffer;
> - return BROTLI_FALSE;
> - }
> - s->ringbuffer[s->new_ringbuffer_size - 2] = 0;
> - s->ringbuffer[s->new_ringbuffer_size - 1] = 0;
> -
> - if (!!old_ringbuffer) {
> - memcpy(s->ringbuffer, old_ringbuffer, (size_t)s->pos);
> - BROTLI_DECODER_FREE(s, old_ringbuffer);
> - }
> -
> - s->ringbuffer_size = s->new_ringbuffer_size;
> - s->ringbuffer_mask = s->new_ringbuffer_size - 1;
> - s->ringbuffer_end = s->ringbuffer + s->ringbuffer_size;
> -
> - return BROTLI_TRUE;
> -}
> -
> -static BrotliDecoderErrorCode BROTLI_NOINLINE
> CopyUncompressedBlockToOutput(
> - size_t* available_out, uint8_t** next_out, size_t* total_out,
> - BrotliDecoderState* s) {
> - /* TODO: avoid allocation for single uncompressed block. */
> - if (!BrotliEnsureRingBuffer(s)) {
> - return
> BROTLI_FAILURE(BROTLI_DECODER_ERROR_ALLOC_RING_BUFFER_1);
> - }
> -
> - /* State machine */
> - for (;;) {
> - switch (s->substate_uncompressed) {
> - case BROTLI_STATE_UNCOMPRESSED_NONE: {
> - int nbytes = (int)BrotliGetRemainingBytes(&s->br);
> - if (nbytes > s->meta_block_remaining_len) {
> - nbytes = s->meta_block_remaining_len;
> - }
> - if (s->pos + nbytes > s->ringbuffer_size) {
> - nbytes = s->ringbuffer_size - s->pos;
> - }
> - /* Copy remaining bytes from s->br.buf_ to ring-buffer. */
> - BrotliCopyBytes(&s->ringbuffer[s->pos], &s->br, (size_t)nbytes);
> - s->pos += nbytes;
> - s->meta_block_remaining_len -= nbytes;
> - if (s->pos < 1 << s->window_bits) {
> - if (s->meta_block_remaining_len == 0) {
> - return BROTLI_DECODER_SUCCESS;
> - }
> - return BROTLI_DECODER_NEEDS_MORE_INPUT;
> - }
> - s->substate_uncompressed = BROTLI_STATE_UNCOMPRESSED_WRITE;
> - }
> - /* Fall through. */
> -
> - case BROTLI_STATE_UNCOMPRESSED_WRITE: {
> - BrotliDecoderErrorCode result;
> - result = WriteRingBuffer(
> - s, available_out, next_out, total_out, BROTLI_FALSE);
> - if (result != BROTLI_DECODER_SUCCESS) {
> - return result;
> - }
> - if (s->ringbuffer_size == 1 << s->window_bits) {
> - s->max_distance = s->max_backward_distance;
> - }
> - s->substate_uncompressed = BROTLI_STATE_UNCOMPRESSED_NONE;
> - break;
> - }
> - }
> - }
> - BROTLI_DCHECK(0); /* Unreachable */
> -}
> -
> -/* Calculates the smallest feasible ring buffer.
> -
> - If we know the data size is small, do not allocate more ring buffer
> - size than needed to reduce memory usage.
> -
> - When this method is called, metablock size and flags MUST be decoded. */
> -static void BROTLI_NOINLINE BrotliCalculateRingBufferSize(
> - BrotliDecoderState* s) {
> - int window_size = 1 << s->window_bits;
> - int new_ringbuffer_size = window_size;
> - /* We need at least 2 bytes of ring buffer size to get the last two
> - bytes for context from there */
> - int min_size = s->ringbuffer_size ? s->ringbuffer_size : 1024;
> - int output_size;
> -
> - /* If maximum is already reached, no further extension is retired. */
> - if (s->ringbuffer_size == window_size) {
> - return;
> - }
> -
> - /* Metadata blocks does not touch ring buffer. */
> - if (s->is_metadata) {
> - return;
> - }
> -
> - if (!s->ringbuffer) {
> - output_size = 0;
> - } else {
> - output_size = s->pos;
> - }
> - output_size += s->meta_block_remaining_len;
> - min_size = min_size < output_size ? output_size : min_size;
> -
> - if (!!s->canny_ringbuffer_allocation) {
> - /* Reduce ring buffer size to save memory when server is unscrupulous.
> - In worst case memory usage might be 1.5x bigger for a short period of
> - ring buffer reallocation. */
> - while ((new_ringbuffer_size >> 1) >= min_size) {
> - new_ringbuffer_size >>= 1;
> - }
> - }
> -
> - s->new_ringbuffer_size = new_ringbuffer_size;
> -}
> -
> -/* Reads 1..256 2-bit context modes. */
> -static BrotliDecoderErrorCode ReadContextModes(BrotliDecoderState* s) {
> - BrotliBitReader* br = &s->br;
> - int i = s->loop_counter;
> -
> - while (i < (int)s->num_block_types[0]) {
> - uint32_t bits;
> - if (!BrotliSafeReadBits(br, 2, &bits)) {
> - s->loop_counter = i;
> - return BROTLI_DECODER_NEEDS_MORE_INPUT;
> - }
> - s->context_modes[i] = (uint8_t)bits;
> - BROTLI_LOG_ARRAY_INDEX(s->context_modes, i);
> - i++;
> - }
> - return BROTLI_DECODER_SUCCESS;
> -}
> -
> -static BROTLI_INLINE void
> TakeDistanceFromRingBuffer(BrotliDecoderState* s) {
> - if (s->distance_code == 0) {
> - --s->dist_rb_idx;
> - s->distance_code = s->dist_rb[s->dist_rb_idx & 3];
> - /* Compensate double distance-ring-buffer roll for dictionary items. */
> - s->distance_context = 1;
> - } else {
> - int distance_code = s->distance_code << 1;
> - /* kDistanceShortCodeIndexOffset has 2-bit values from LSB:
> - 3, 2, 1, 0, 3, 3, 3, 3, 3, 3, 2, 2, 2, 2, 2, 2 */
> - const uint32_t kDistanceShortCodeIndexOffset = 0xAAAFFF1B;
> - /* kDistanceShortCodeValueOffset has 2-bit values from LSB:
> - -0, 0,-0, 0,-1, 1,-2, 2,-3, 3,-1, 1,-2, 2,-3, 3 */
> - const uint32_t kDistanceShortCodeValueOffset = 0xFA5FA500;
> - int v = (s->dist_rb_idx +
> - (int)(kDistanceShortCodeIndexOffset >> distance_code)) & 0x3;
> - s->distance_code = s->dist_rb[v];
> - v = (int)(kDistanceShortCodeValueOffset >> distance_code) & 0x3;
> - if ((distance_code & 0x3) != 0) {
> - s->distance_code += v;
> - } else {
> - s->distance_code -= v;
> - if (s->distance_code <= 0) {
> - /* A huge distance will cause a BROTLI_FAILURE() soon.
> - This is a little faster than failing here. */
> - s->distance_code = 0x7FFFFFFF;
> - }
> - }
> - }
> -}
> -
> -static BROTLI_INLINE BROTLI_BOOL SafeReadBits(
> - BrotliBitReader* const br, uint32_t n_bits, uint32_t* val) {
> - if (n_bits != 0) {
> - return BrotliSafeReadBits(br, n_bits, val);
> - } else {
> - *val = 0;
> - return BROTLI_TRUE;
> - }
> -}
> -
> -/* Precondition: s->distance_code < 0. */
> -static BROTLI_INLINE BROTLI_BOOL ReadDistanceInternal(
> - int safe, BrotliDecoderState* s, BrotliBitReader* br) {
> - int distval;
> - BrotliBitReaderState memento;
> - HuffmanCode* distance_tree = s->distance_hgroup.htrees[s-
> >dist_htree_index];
> - if (!safe) {
> - s->distance_code = (int)ReadSymbol(distance_tree, br);
> - } else {
> - uint32_t code;
> - BrotliBitReaderSaveState(br, &memento);
> - if (!SafeReadSymbol(distance_tree, br, &code)) {
> - return BROTLI_FALSE;
> - }
> - s->distance_code = (int)code;
> - }
> - /* Convert the distance code to the actual distance by possibly
> - looking up past distances from the s->ringbuffer. */
> - s->distance_context = 0;
> - if ((s->distance_code & ~0xF) == 0) {
> - TakeDistanceFromRingBuffer(s);
> - --s->block_length[2];
> - return BROTLI_TRUE;
> - }
> - distval = s->distance_code - (int)s->num_direct_distance_codes;
> - if (distval >= 0) {
> - uint32_t nbits;
> - int postfix;
> - int offset;
> - if (!safe && (s->distance_postfix_bits == 0)) {
> - nbits = ((uint32_t)distval >> 1) + 1;
> - offset = ((2 + (distval & 1)) << nbits) - 4;
> - s->distance_code = (int)s->num_direct_distance_codes + offset +
> - (int)BrotliReadBits(br, nbits);
> - } else {
> - /* This branch also works well when s->distance_postfix_bits == 0. */
> - uint32_t bits;
> - postfix = distval & s->distance_postfix_mask;
> - distval >>= s->distance_postfix_bits;
> - nbits = ((uint32_t)distval >> 1) + 1;
> - if (safe) {
> - if (!SafeReadBits(br, nbits, &bits)) {
> - s->distance_code = -1; /* Restore precondition. */
> - BrotliBitReaderRestoreState(br, &memento);
> - return BROTLI_FALSE;
> - }
> - } else {
> - bits = BrotliReadBits(br, nbits);
> - }
> - offset = ((2 + (distval & 1)) << nbits) - 4;
> - s->distance_code = (int)s->num_direct_distance_codes +
> - ((offset + (int)bits) << s->distance_postfix_bits) + postfix;
> - }
> - }
> - s->distance_code = s->distance_code -
> BROTLI_NUM_DISTANCE_SHORT_CODES + 1;
> - --s->block_length[2];
> - return BROTLI_TRUE;
> -}
> -
> -static BROTLI_INLINE void ReadDistance(
> - BrotliDecoderState* s, BrotliBitReader* br) {
> - ReadDistanceInternal(0, s, br);
> -}
> -
> -static BROTLI_INLINE BROTLI_BOOL SafeReadDistance(
> - BrotliDecoderState* s, BrotliBitReader* br) {
> - return ReadDistanceInternal(1, s, br);
> -}
> -
> -static BROTLI_INLINE BROTLI_BOOL ReadCommandInternal(
> - int safe, BrotliDecoderState* s, BrotliBitReader* br, int* insert_length) {
> - uint32_t cmd_code;
> - uint32_t insert_len_extra = 0;
> - uint32_t copy_length;
> - CmdLutElement v;
> - BrotliBitReaderState memento;
> - if (!safe) {
> - cmd_code = ReadSymbol(s->htree_command, br);
> - } else {
> - BrotliBitReaderSaveState(br, &memento);
> - if (!SafeReadSymbol(s->htree_command, br, &cmd_code)) {
> - return BROTLI_FALSE;
> - }
> - }
> - v = kCmdLut[cmd_code];
> - s->distance_code = v.distance_code;
> - s->distance_context = v.context;
> - s->dist_htree_index = s->dist_context_map_slice[s->distance_context];
> - *insert_length = v.insert_len_offset;
> - if (!safe) {
> - if (BROTLI_PREDICT_FALSE(v.insert_len_extra_bits != 0)) {
> - insert_len_extra = BrotliReadBits(br, v.insert_len_extra_bits);
> - }
> - copy_length = BrotliReadBits(br, v.copy_len_extra_bits);
> - } else {
> - if (!SafeReadBits(br, v.insert_len_extra_bits, &insert_len_extra) ||
> - !SafeReadBits(br, v.copy_len_extra_bits, ©_length)) {
> - BrotliBitReaderRestoreState(br, &memento);
> - return BROTLI_FALSE;
> - }
> - }
> - s->copy_length = (int)copy_length + v.copy_len_offset;
> - --s->block_length[1];
> - *insert_length += (int)insert_len_extra;
> - return BROTLI_TRUE;
> -}
> -
> -static BROTLI_INLINE void ReadCommand(
> - BrotliDecoderState* s, BrotliBitReader* br, int* insert_length) {
> - ReadCommandInternal(0, s, br, insert_length);
> -}
> -
> -static BROTLI_INLINE BROTLI_BOOL SafeReadCommand(
> - BrotliDecoderState* s, BrotliBitReader* br, int* insert_length) {
> - return ReadCommandInternal(1, s, br, insert_length);
> -}
> -
> -static BROTLI_INLINE BROTLI_BOOL CheckInputAmount(
> - int safe, BrotliBitReader* const br, size_t num) {
> - if (safe) {
> - return BROTLI_TRUE;
> - }
> - return BrotliCheckInputAmount(br, num);
> -}
> -
> -#define BROTLI_SAFE(METHOD) \
> - { \
> - if (safe) { \
> - if (!Safe##METHOD) { \
> - result = BROTLI_DECODER_NEEDS_MORE_INPUT; \
> - goto saveStateAndReturn; \
> - } \
> - } else { \
> - METHOD; \
> - } \
> - }
> -
> -static BROTLI_INLINE BrotliDecoderErrorCode ProcessCommandsInternal(
> - int safe, BrotliDecoderState* s) {
> - int pos = s->pos;
> - int i = s->loop_counter;
> - BrotliDecoderErrorCode result = BROTLI_DECODER_SUCCESS;
> - BrotliBitReader* br = &s->br;
> -
> - if (!CheckInputAmount(safe, br, 28)) {
> - result = BROTLI_DECODER_NEEDS_MORE_INPUT;
> - goto saveStateAndReturn;
> - }
> - if (!safe) {
> - BROTLI_UNUSED(BrotliWarmupBitReader(br));
> - }
> -
> - /* Jump into state machine. */
> - if (s->state == BROTLI_STATE_COMMAND_BEGIN) {
> - goto CommandBegin;
> - } else if (s->state == BROTLI_STATE_COMMAND_INNER) {
> - goto CommandInner;
> - } else if (s->state == BROTLI_STATE_COMMAND_POST_DECODE_LITERALS)
> {
> - goto CommandPostDecodeLiterals;
> - } else if (s->state == BROTLI_STATE_COMMAND_POST_WRAP_COPY) {
> - goto CommandPostWrapCopy;
> - } else {
> - return BROTLI_FAILURE(BROTLI_DECODER_ERROR_UNREACHABLE);
> - }
> -
> -CommandBegin:
> - if (safe) {
> - s->state = BROTLI_STATE_COMMAND_BEGIN;
> - }
> - if (!CheckInputAmount(safe, br, 28)) { /* 156 bits + 7 bytes */
> - s->state = BROTLI_STATE_COMMAND_BEGIN;
> - result = BROTLI_DECODER_NEEDS_MORE_INPUT;
> - goto saveStateAndReturn;
> - }
> - if (BROTLI_PREDICT_FALSE(s->block_length[1] == 0)) {
> - BROTLI_SAFE(DecodeCommandBlockSwitch(s));
> - goto CommandBegin;
> - }
> - /* Read the insert/copy length in the command. */
> - BROTLI_SAFE(ReadCommand(s, br, &i));
> - BROTLI_LOG(("[ProcessCommandsInternal] pos = %d insert = %d copy
> = %d\n",
> - pos, i, s->copy_length));
> - if (i == 0) {
> - goto CommandPostDecodeLiterals;
> - }
> - s->meta_block_remaining_len -= i;
> -
> -CommandInner:
> - if (safe) {
> - s->state = BROTLI_STATE_COMMAND_INNER;
> - }
> - /* Read the literals in the command. */
> - if (s->trivial_literal_context) {
> - uint32_t bits;
> - uint32_t value;
> - PreloadSymbol(safe, s->literal_htree, br, &bits, &value);
> - do {
> - if (!CheckInputAmount(safe, br, 28)) { /* 162 bits + 7 bytes */
> - s->state = BROTLI_STATE_COMMAND_INNER;
> - result = BROTLI_DECODER_NEEDS_MORE_INPUT;
> - goto saveStateAndReturn;
> - }
> - if (BROTLI_PREDICT_FALSE(s->block_length[0] == 0)) {
> - BROTLI_SAFE(DecodeLiteralBlockSwitch(s));
> - PreloadSymbol(safe, s->literal_htree, br, &bits, &value);
> - if (!s->trivial_literal_context) goto CommandInner;
> - }
> - if (!safe) {
> - s->ringbuffer[pos] =
> - (uint8_t)ReadPreloadedSymbol(s->literal_htree, br, &bits, &value);
> - } else {
> - uint32_t literal;
> - if (!SafeReadSymbol(s->literal_htree, br, &literal)) {
> - result = BROTLI_DECODER_NEEDS_MORE_INPUT;
> - goto saveStateAndReturn;
> - }
> - s->ringbuffer[pos] = (uint8_t)literal;
> - }
> - --s->block_length[0];
> - BROTLI_LOG_ARRAY_INDEX(s->ringbuffer, pos);
> - ++pos;
> - if (BROTLI_PREDICT_FALSE(pos == s->ringbuffer_size)) {
> - s->state = BROTLI_STATE_COMMAND_INNER_WRITE;
> - --i;
> - goto saveStateAndReturn;
> - }
> - } while (--i != 0);
> - } else {
> - uint8_t p1 = s->ringbuffer[(pos - 1) & s->ringbuffer_mask];
> - uint8_t p2 = s->ringbuffer[(pos - 2) & s->ringbuffer_mask];
> - do {
> - const HuffmanCode* hc;
> - uint8_t context;
> - if (!CheckInputAmount(safe, br, 28)) { /* 162 bits + 7 bytes */
> - s->state = BROTLI_STATE_COMMAND_INNER;
> - result = BROTLI_DECODER_NEEDS_MORE_INPUT;
> - goto saveStateAndReturn;
> - }
> - if (BROTLI_PREDICT_FALSE(s->block_length[0] == 0)) {
> - BROTLI_SAFE(DecodeLiteralBlockSwitch(s));
> - if (s->trivial_literal_context) goto CommandInner;
> - }
> - context = BROTLI_CONTEXT(p1, p2, s->context_lookup);
> - BROTLI_LOG_UINT(context);
> - hc = s->literal_hgroup.htrees[s->context_map_slice[context]];
> - p2 = p1;
> - if (!safe) {
> - p1 = (uint8_t)ReadSymbol(hc, br);
> - } else {
> - uint32_t literal;
> - if (!SafeReadSymbol(hc, br, &literal)) {
> - result = BROTLI_DECODER_NEEDS_MORE_INPUT;
> - goto saveStateAndReturn;
> - }
> - p1 = (uint8_t)literal;
> - }
> - s->ringbuffer[pos] = p1;
> - --s->block_length[0];
> - BROTLI_LOG_UINT(s->context_map_slice[context]);
> - BROTLI_LOG_ARRAY_INDEX(s->ringbuffer, pos & s->ringbuffer_mask);
> - ++pos;
> - if (BROTLI_PREDICT_FALSE(pos == s->ringbuffer_size)) {
> - s->state = BROTLI_STATE_COMMAND_INNER_WRITE;
> - --i;
> - goto saveStateAndReturn;
> - }
> - } while (--i != 0);
> - }
> - BROTLI_LOG_UINT(s->meta_block_remaining_len);
> - if (BROTLI_PREDICT_FALSE(s->meta_block_remaining_len <= 0)) {
> - s->state = BROTLI_STATE_METABLOCK_DONE;
> - goto saveStateAndReturn;
> - }
> -
> -CommandPostDecodeLiterals:
> - if (safe) {
> - s->state = BROTLI_STATE_COMMAND_POST_DECODE_LITERALS;
> - }
> - if (s->distance_code >= 0) {
> - /* Implicit distance case. */
> - s->distance_context = s->distance_code ? 0 : 1;
> - --s->dist_rb_idx;
> - s->distance_code = s->dist_rb[s->dist_rb_idx & 3];
> - } else {
> - /* Read distance code in the command, unless it was implicitly zero. */
> - if (BROTLI_PREDICT_FALSE(s->block_length[2] == 0)) {
> - BROTLI_SAFE(DecodeDistanceBlockSwitch(s));
> - }
> - BROTLI_SAFE(ReadDistance(s, br));
> - }
> - BROTLI_LOG(("[ProcessCommandsInternal] pos = %d distance = %d\n",
> - pos, s->distance_code));
> - if (s->max_distance != s->max_backward_distance) {
> - s->max_distance =
> - (pos < s->max_backward_distance) ? pos : s->max_backward_distance;
> - }
> - i = s->copy_length;
> - /* Apply copy of LZ77 back-reference, or static dictionary reference if
> - the distance is larger than the max LZ77 distance */
> - if (s->distance_code > s->max_distance) {
> - /* The maximum allowed distance is BROTLI_MAX_ALLOWED_DISTANCE =
> 0x7FFFFFFC.
> - With this choice, no signed overflow can occur after decoding
> - a special distance code (e.g., after adding 3 to the last distance). */
> - if (s->distance_code > BROTLI_MAX_ALLOWED_DISTANCE) {
> - BROTLI_LOG(("Invalid backward reference. pos: %d distance: %d "
> - "len: %d bytes left: %d\n",
> - pos, s->distance_code, i, s->meta_block_remaining_len));
> - return BROTLI_FAILURE(BROTLI_DECODER_ERROR_FORMAT_DISTANCE);
> - }
> - if (i >= BROTLI_MIN_DICTIONARY_WORD_LENGTH &&
> - i <= BROTLI_MAX_DICTIONARY_WORD_LENGTH) {
> - int address = s->distance_code - s->max_distance - 1;
> - const BrotliDictionary* words = s->dictionary;
> - const BrotliTransforms* transforms = s->transforms;
> - int offset = (int)s->dictionary->offsets_by_length[i];
> - uint32_t shift = s->dictionary->size_bits_by_length[i];
> -
> - int mask = (int)BitMask(shift);
> - int word_idx = address & mask;
> - int transform_idx = address >> shift;
> - /* Compensate double distance-ring-buffer roll. */
> - s->dist_rb_idx += s->distance_context;
> - offset += word_idx * i;
> - if (BROTLI_PREDICT_FALSE(!words->data)) {
> - return
> BROTLI_FAILURE(BROTLI_DECODER_ERROR_DICTIONARY_NOT_SET);
> - }
> - if (transform_idx < (int)transforms->num_transforms) {
> - const uint8_t* word = &words->data[offset];
> - int len = i;
> - if (transform_idx == transforms->cutOffTransforms[0]) {
> - memcpy(&s->ringbuffer[pos], word, (size_t)len);
> - BROTLI_LOG(("[ProcessCommandsInternal] dictionary word: [%.*s]\n",
> - len, word));
> - } else {
> - len = BrotliTransformDictionaryWord(&s->ringbuffer[pos], word, len,
> - transforms, transform_idx);
> - BROTLI_LOG(("[ProcessCommandsInternal] dictionary word: [%.*s],"
> - " transform_idx = %d, transformed: [%.*s]\n",
> - i, word, transform_idx, len, &s->ringbuffer[pos]));
> - }
> - pos += len;
> - s->meta_block_remaining_len -= len;
> - if (pos >= s->ringbuffer_size) {
> - s->state = BROTLI_STATE_COMMAND_POST_WRITE_1;
> - goto saveStateAndReturn;
> - }
> - } else {
> - BROTLI_LOG(("Invalid backward reference. pos: %d distance: %d "
> - "len: %d bytes left: %d\n",
> - pos, s->distance_code, i, s->meta_block_remaining_len));
> - return
> BROTLI_FAILURE(BROTLI_DECODER_ERROR_FORMAT_TRANSFORM);
> - }
> - } else {
> - BROTLI_LOG(("Invalid backward reference. pos: %d distance: %d "
> - "len: %d bytes left: %d\n",
> - pos, s->distance_code, i, s->meta_block_remaining_len));
> - return
> BROTLI_FAILURE(BROTLI_DECODER_ERROR_FORMAT_DICTIONARY);
> - }
> - } else {
> - int src_start = (pos - s->distance_code) & s->ringbuffer_mask;
> - uint8_t* copy_dst = &s->ringbuffer[pos];
> - uint8_t* copy_src = &s->ringbuffer[src_start];
> - int dst_end = pos + i;
> - int src_end = src_start + i;
> - /* Update the recent distances cache. */
> - s->dist_rb[s->dist_rb_idx & 3] = s->distance_code;
> - ++s->dist_rb_idx;
> - s->meta_block_remaining_len -= i;
> - /* There are 32+ bytes of slack in the ring-buffer allocation.
> - Also, we have 16 short codes, that make these 16 bytes irrelevant
> - in the ring-buffer. Let's copy over them as a first guess. */
> - memmove16(copy_dst, copy_src);
> - if (src_end > pos && dst_end > src_start) {
> - /* Regions intersect. */
> - goto CommandPostWrapCopy;
> - }
> - if (dst_end >= s->ringbuffer_size || src_end >= s->ringbuffer_size) {
> - /* At least one region wraps. */
> - goto CommandPostWrapCopy;
> - }
> - pos += i;
> - if (i > 16) {
> - if (i > 32) {
> - memcpy(copy_dst + 16, copy_src + 16, (size_t)(i - 16));
> - } else {
> - /* This branch covers about 45% cases.
> - Fixed size short copy allows more compiler optimizations. */
> - memmove16(copy_dst + 16, copy_src + 16);
> - }
> - }
> - }
> - BROTLI_LOG_UINT(s->meta_block_remaining_len);
> - if (s->meta_block_remaining_len <= 0) {
> - /* Next metablock, if any. */
> - s->state = BROTLI_STATE_METABLOCK_DONE;
> - goto saveStateAndReturn;
> - } else {
> - goto CommandBegin;
> - }
> -CommandPostWrapCopy:
> - {
> - int wrap_guard = s->ringbuffer_size - pos;
> - while (--i >= 0) {
> - s->ringbuffer[pos] =
> - s->ringbuffer[(pos - s->distance_code) & s->ringbuffer_mask];
> - ++pos;
> - if (BROTLI_PREDICT_FALSE(--wrap_guard == 0)) {
> - s->state = BROTLI_STATE_COMMAND_POST_WRITE_2;
> - goto saveStateAndReturn;
> - }
> - }
> - }
> - if (s->meta_block_remaining_len <= 0) {
> - /* Next metablock, if any. */
> - s->state = BROTLI_STATE_METABLOCK_DONE;
> - goto saveStateAndReturn;
> - } else {
> - goto CommandBegin;
> - }
> -
> -saveStateAndReturn:
> - s->pos = pos;
> - s->loop_counter = i;
> - return result;
> -}
> -
> -#undef BROTLI_SAFE
> -
> -static BROTLI_NOINLINE BrotliDecoderErrorCode ProcessCommands(
> - BrotliDecoderState* s) {
> - return ProcessCommandsInternal(0, s);
> -}
> -
> -static BROTLI_NOINLINE BrotliDecoderErrorCode SafeProcessCommands(
> - BrotliDecoderState* s) {
> - return ProcessCommandsInternal(1, s);
> -}
> -
> -/* Returns the maximum number of distance symbols which can only
> represent
> - distances not exceeding BROTLI_MAX_ALLOWED_DISTANCE. */
> -static uint32_t BrotliMaxDistanceSymbol(uint32_t ndirect, uint32_t npostfix)
> {
> - static const uint32_t bound[BROTLI_MAX_NPOSTFIX + 1] = {0, 4, 12, 28};
> - static const uint32_t diff[BROTLI_MAX_NPOSTFIX + 1] = {73, 126, 228, 424};
> - uint32_t postfix = 1U << npostfix;
> - if (ndirect < bound[npostfix]) {
> - return ndirect + diff[npostfix] + postfix;
> - } else if (ndirect > bound[npostfix] + postfix) {
> - return ndirect + diff[npostfix];
> - } else {
> - return bound[npostfix] + diff[npostfix] + postfix;
> - }
> -}
> -
> -BrotliDecoderResult BrotliDecoderDecompress(
> - size_t encoded_size, const uint8_t* encoded_buffer, size_t*
> decoded_size,
> - uint8_t* decoded_buffer) {
> - BrotliDecoderState s;
> - BrotliDecoderResult result;
> - size_t total_out = 0;
> - size_t available_in = encoded_size;
> - const uint8_t* next_in = encoded_buffer;
> - size_t available_out = *decoded_size;
> - uint8_t* next_out = decoded_buffer;
> - if (!BrotliDecoderStateInit(&s, 0, 0, 0)) {
> - return BROTLI_DECODER_RESULT_ERROR;
> - }
> - result = BrotliDecoderDecompressStream(
> - &s, &available_in, &next_in, &available_out, &next_out, &total_out);
> - *decoded_size = total_out;
> - BrotliDecoderStateCleanup(&s);
> - if (result != BROTLI_DECODER_RESULT_SUCCESS) {
> - result = BROTLI_DECODER_RESULT_ERROR;
> - }
> - return result;
> -}
> -
> -/* Invariant: input stream is never overconsumed:
> - - invalid input implies that the whole stream is invalid -> any amount of
> - input could be read and discarded
> - - when result is "needs more input", then at least one more byte is
> REQUIRED
> - to complete decoding; all input data MUST be consumed by decoder, so
> - client could swap the input buffer
> - - when result is "needs more output" decoder MUST ensure that it
> doesn't
> - hold more than 7 bits in bit reader; this saves client from swapping input
> - buffer ahead of time
> - - when result is "success" decoder MUST return all unused data back to
> input
> - buffer; this is possible because the invariant is held on enter */
> -BrotliDecoderResult BrotliDecoderDecompressStream(
> - BrotliDecoderState* s, size_t* available_in, const uint8_t** next_in,
> - size_t* available_out, uint8_t** next_out, size_t* total_out) {
> - BrotliDecoderErrorCode result = BROTLI_DECODER_SUCCESS;
> - BrotliBitReader* br = &s->br;
> - /* Ensure that |total_out| is set, even if no data will ever be pushed out.
> */
> - if (total_out) {
> - *total_out = s->partial_pos_out;
> - }
> - /* Do not try to process further in a case of unrecoverable error. */
> - if ((int)s->error_code < 0) {
> - return BROTLI_DECODER_RESULT_ERROR;
> - }
> - if (*available_out && (!next_out || !*next_out)) {
> - return SaveErrorCode(
> - s, BROTLI_FAILURE(BROTLI_DECODER_ERROR_INVALID_ARGUMENTS));
> - }
> - if (!*available_out) next_out = 0;
> - if (s->buffer_length == 0) { /* Just connect bit reader to input stream. */
> - br->avail_in = *available_in;
> - br->next_in = *next_in;
> - } else {
> - /* At least one byte of input is required. More than one byte of input may
> - be required to complete the transaction -> reading more data must be
> - done in a loop -> do it in a main loop. */
> - result = BROTLI_DECODER_NEEDS_MORE_INPUT;
> - br->next_in = &s->buffer.u8[0];
> - }
> - /* State machine */
> - for (;;) {
> - if (result != BROTLI_DECODER_SUCCESS) {
> - /* Error, needs more input/output. */
> - if (result == BROTLI_DECODER_NEEDS_MORE_INPUT) {
> - if (s->ringbuffer != 0) { /* Pro-actively push output. */
> - BrotliDecoderErrorCode intermediate_result = WriteRingBuffer(s,
> - available_out, next_out, total_out, BROTLI_TRUE);
> - /* WriteRingBuffer checks s->meta_block_remaining_len validity. */
> - if ((int)intermediate_result < 0) {
> - result = intermediate_result;
> - break;
> - }
> - }
> - if (s->buffer_length != 0) { /* Used with internal buffer. */
> - if (br->avail_in == 0) {
> - /* Successfully finished read transaction.
> - Accumulator contains less than 8 bits, because internal buffer
> - is expanded byte-by-byte until it is enough to complete read. */
> - s->buffer_length = 0;
> - /* Switch to input stream and restart. */
> - result = BROTLI_DECODER_SUCCESS;
> - br->avail_in = *available_in;
> - br->next_in = *next_in;
> - continue;
> - } else if (*available_in != 0) {
> - /* Not enough data in buffer, but can take one more byte from
> - input stream. */
> - result = BROTLI_DECODER_SUCCESS;
> - s->buffer.u8[s->buffer_length] = **next_in;
> - s->buffer_length++;
> - br->avail_in = s->buffer_length;
> - (*next_in)++;
> - (*available_in)--;
> - /* Retry with more data in buffer. */
> - continue;
> - }
> - /* Can't finish reading and no more input. */
> - break;
> - } else { /* Input stream doesn't contain enough input. */
> - /* Copy tail to internal buffer and return. */
> - *next_in = br->next_in;
> - *available_in = br->avail_in;
> - while (*available_in) {
> - s->buffer.u8[s->buffer_length] = **next_in;
> - s->buffer_length++;
> - (*next_in)++;
> - (*available_in)--;
> - }
> - break;
> - }
> - /* Unreachable. */
> - }
> -
> - /* Fail or needs more output. */
> -
> - if (s->buffer_length != 0) {
> - /* Just consumed the buffered input and produced some output.
> Otherwise
> - it would result in "needs more input". Reset internal buffer. */
> - s->buffer_length = 0;
> - } else {
> - /* Using input stream in last iteration. When decoder switches to input
> - stream it has less than 8 bits in accumulator, so it is safe to
> - return unused accumulator bits there. */
> - BrotliBitReaderUnload(br);
> - *available_in = br->avail_in;
> - *next_in = br->next_in;
> - }
> - break;
> - }
> - switch (s->state) {
> - case BROTLI_STATE_UNINITED:
> - /* Prepare to the first read. */
> - if (!BrotliWarmupBitReader(br)) {
> - result = BROTLI_DECODER_NEEDS_MORE_INPUT;
> - break;
> - }
> - /* Decode window size. */
> - result = DecodeWindowBits(s, br); /* Reads 1..8 bits. */
> - if (result != BROTLI_DECODER_SUCCESS) {
> - break;
> - }
> - if (s->large_window) {
> - s->state = BROTLI_STATE_LARGE_WINDOW_BITS;
> - break;
> - }
> - s->state = BROTLI_STATE_INITIALIZE;
> - break;
> -
> - case BROTLI_STATE_LARGE_WINDOW_BITS:
> - if (!BrotliSafeReadBits(br, 6, &s->window_bits)) {
> - result = BROTLI_DECODER_NEEDS_MORE_INPUT;
> - break;
> - }
> - if (s->window_bits < BROTLI_LARGE_MIN_WBITS ||
> - s->window_bits > BROTLI_LARGE_MAX_WBITS) {
> - result =
> BROTLI_FAILURE(BROTLI_DECODER_ERROR_FORMAT_WINDOW_BITS);
> - break;
> - }
> - s->state = BROTLI_STATE_INITIALIZE;
> - /* Fall through. */
> -
> - case BROTLI_STATE_INITIALIZE:
> - BROTLI_LOG_UINT(s->window_bits);
> - /* Maximum distance, see section 9.1. of the spec. */
> - s->max_backward_distance = (1 << s->window_bits) -
> BROTLI_WINDOW_GAP;
> -
> - /* Allocate memory for both block_type_trees and block_len_trees. */
> - s->block_type_trees = (HuffmanCode*)BROTLI_DECODER_ALLOC(s,
> - sizeof(HuffmanCode) * 3 *
> - (BROTLI_HUFFMAN_MAX_SIZE_258 +
> BROTLI_HUFFMAN_MAX_SIZE_26));
> - if (s->block_type_trees == 0) {
> - result =
> BROTLI_FAILURE(BROTLI_DECODER_ERROR_ALLOC_BLOCK_TYPE_TREES);
> - break;
> - }
> - s->block_len_trees =
> - s->block_type_trees + 3 * BROTLI_HUFFMAN_MAX_SIZE_258;
> -
> - s->state = BROTLI_STATE_METABLOCK_BEGIN;
> - /* Fall through. */
> -
> - case BROTLI_STATE_METABLOCK_BEGIN:
> - BrotliDecoderStateMetablockBegin(s);
> - BROTLI_LOG_UINT(s->pos);
> - s->state = BROTLI_STATE_METABLOCK_HEADER;
> - /* Fall through. */
> -
> - case BROTLI_STATE_METABLOCK_HEADER:
> - result = DecodeMetaBlockLength(s, br); /* Reads 2 - 31 bits. */
> - if (result != BROTLI_DECODER_SUCCESS) {
> - break;
> - }
> - BROTLI_LOG_UINT(s->is_last_metablock);
> - BROTLI_LOG_UINT(s->meta_block_remaining_len);
> - BROTLI_LOG_UINT(s->is_metadata);
> - BROTLI_LOG_UINT(s->is_uncompressed);
> - if (s->is_metadata || s->is_uncompressed) {
> - if (!BrotliJumpToByteBoundary(br)) {
> - result =
> BROTLI_FAILURE(BROTLI_DECODER_ERROR_FORMAT_PADDING_1);
> - break;
> - }
> - }
> - if (s->is_metadata) {
> - s->state = BROTLI_STATE_METADATA;
> - break;
> - }
> - if (s->meta_block_remaining_len == 0) {
> - s->state = BROTLI_STATE_METABLOCK_DONE;
> - break;
> - }
> - BrotliCalculateRingBufferSize(s);
> - if (s->is_uncompressed) {
> - s->state = BROTLI_STATE_UNCOMPRESSED;
> - break;
> - }
> - s->loop_counter = 0;
> - s->state = BROTLI_STATE_HUFFMAN_CODE_0;
> - break;
> -
> - case BROTLI_STATE_UNCOMPRESSED: {
> - result = CopyUncompressedBlockToOutput(
> - available_out, next_out, total_out, s);
> - if (result != BROTLI_DECODER_SUCCESS) {
> - break;
> - }
> - s->state = BROTLI_STATE_METABLOCK_DONE;
> - break;
> - }
> -
> - case BROTLI_STATE_METADATA:
> - for (; s->meta_block_remaining_len > 0; --s-
> >meta_block_remaining_len) {
> - uint32_t bits;
> - /* Read one byte and ignore it. */
> - if (!BrotliSafeReadBits(br, 8, &bits)) {
> - result = BROTLI_DECODER_NEEDS_MORE_INPUT;
> - break;
> - }
> - }
> - if (result == BROTLI_DECODER_SUCCESS) {
> - s->state = BROTLI_STATE_METABLOCK_DONE;
> - }
> - break;
> -
> - case BROTLI_STATE_HUFFMAN_CODE_0:
> - if (s->loop_counter >= 3) {
> - s->state = BROTLI_STATE_METABLOCK_HEADER_2;
> - break;
> - }
> - /* Reads 1..11 bits. */
> - result = DecodeVarLenUint8(s, br, &s->num_block_types[s-
> >loop_counter]);
> - if (result != BROTLI_DECODER_SUCCESS) {
> - break;
> - }
> - s->num_block_types[s->loop_counter]++;
> - BROTLI_LOG_UINT(s->num_block_types[s->loop_counter]);
> - if (s->num_block_types[s->loop_counter] < 2) {
> - s->loop_counter++;
> - break;
> - }
> - s->state = BROTLI_STATE_HUFFMAN_CODE_1;
> - /* Fall through. */
> -
> - case BROTLI_STATE_HUFFMAN_CODE_1: {
> - uint32_t alphabet_size = s->num_block_types[s->loop_counter] + 2;
> - int tree_offset = s->loop_counter * BROTLI_HUFFMAN_MAX_SIZE_258;
> - result = ReadHuffmanCode(alphabet_size, alphabet_size,
> - &s->block_type_trees[tree_offset], NULL, s);
> - if (result != BROTLI_DECODER_SUCCESS) break;
> - s->state = BROTLI_STATE_HUFFMAN_CODE_2;
> - }
> - /* Fall through. */
> -
> - case BROTLI_STATE_HUFFMAN_CODE_2: {
> - uint32_t alphabet_size = BROTLI_NUM_BLOCK_LEN_SYMBOLS;
> - int tree_offset = s->loop_counter * BROTLI_HUFFMAN_MAX_SIZE_26;
> - result = ReadHuffmanCode(alphabet_size, alphabet_size,
> - &s->block_len_trees[tree_offset], NULL, s);
> - if (result != BROTLI_DECODER_SUCCESS) break;
> - s->state = BROTLI_STATE_HUFFMAN_CODE_3;
> - }
> - /* Fall through. */
> -
> - case BROTLI_STATE_HUFFMAN_CODE_3: {
> - int tree_offset = s->loop_counter * BROTLI_HUFFMAN_MAX_SIZE_26;
> - if (!SafeReadBlockLength(s, &s->block_length[s->loop_counter],
> - &s->block_len_trees[tree_offset], br)) {
> - result = BROTLI_DECODER_NEEDS_MORE_INPUT;
> - break;
> - }
> - BROTLI_LOG_UINT(s->block_length[s->loop_counter]);
> - s->loop_counter++;
> - s->state = BROTLI_STATE_HUFFMAN_CODE_0;
> - break;
> - }
> -
> - case BROTLI_STATE_METABLOCK_HEADER_2: {
> - uint32_t bits;
> - if (!BrotliSafeReadBits(br, 6, &bits)) {
> - result = BROTLI_DECODER_NEEDS_MORE_INPUT;
> - break;
> - }
> - s->distance_postfix_bits = bits & BitMask(2);
> - bits >>= 2;
> - s->num_direct_distance_codes =
> BROTLI_NUM_DISTANCE_SHORT_CODES +
> - (bits << s->distance_postfix_bits);
> - BROTLI_LOG_UINT(s->num_direct_distance_codes);
> - BROTLI_LOG_UINT(s->distance_postfix_bits);
> - s->distance_postfix_mask = (int)BitMask(s->distance_postfix_bits);
> - s->context_modes =
> - (uint8_t*)BROTLI_DECODER_ALLOC(s, (size_t)s-
> >num_block_types[0]);
> - if (s->context_modes == 0) {
> - result =
> BROTLI_FAILURE(BROTLI_DECODER_ERROR_ALLOC_CONTEXT_MODES);
> - break;
> - }
> - s->loop_counter = 0;
> - s->state = BROTLI_STATE_CONTEXT_MODES;
> - }
> - /* Fall through. */
> -
> - case BROTLI_STATE_CONTEXT_MODES:
> - result = ReadContextModes(s);
> - if (result != BROTLI_DECODER_SUCCESS) {
> - break;
> - }
> - s->state = BROTLI_STATE_CONTEXT_MAP_1;
> - /* Fall through. */
> -
> - case BROTLI_STATE_CONTEXT_MAP_1:
> - result = DecodeContextMap(
> - s->num_block_types[0] << BROTLI_LITERAL_CONTEXT_BITS,
> - &s->num_literal_htrees, &s->context_map, s);
> - if (result != BROTLI_DECODER_SUCCESS) {
> - break;
> - }
> - DetectTrivialLiteralBlockTypes(s);
> - s->state = BROTLI_STATE_CONTEXT_MAP_2;
> - /* Fall through. */
> -
> - case BROTLI_STATE_CONTEXT_MAP_2: {
> - uint32_t num_direct_codes =
> - s->num_direct_distance_codes -
> BROTLI_NUM_DISTANCE_SHORT_CODES;
> - uint32_t num_distance_codes = BROTLI_DISTANCE_ALPHABET_SIZE(
> - s->distance_postfix_bits, num_direct_codes,
> - (s->large_window ? BROTLI_LARGE_MAX_DISTANCE_BITS :
> - BROTLI_MAX_DISTANCE_BITS));
> - uint32_t max_distance_symbol = (s->large_window ?
> - BrotliMaxDistanceSymbol(
> - num_direct_codes, s->distance_postfix_bits) :
> - num_distance_codes);
> - BROTLI_BOOL allocation_success = BROTLI_TRUE;
> - result = DecodeContextMap(
> - s->num_block_types[2] << BROTLI_DISTANCE_CONTEXT_BITS,
> - &s->num_dist_htrees, &s->dist_context_map, s);
> - if (result != BROTLI_DECODER_SUCCESS) {
> - break;
> - }
> - allocation_success &= BrotliDecoderHuffmanTreeGroupInit(
> - s, &s->literal_hgroup, BROTLI_NUM_LITERAL_SYMBOLS,
> - BROTLI_NUM_LITERAL_SYMBOLS, s->num_literal_htrees);
> - allocation_success &= BrotliDecoderHuffmanTreeGroupInit(
> - s, &s->insert_copy_hgroup, BROTLI_NUM_COMMAND_SYMBOLS,
> - BROTLI_NUM_COMMAND_SYMBOLS, s->num_block_types[1]);
> - allocation_success &= BrotliDecoderHuffmanTreeGroupInit(
> - s, &s->distance_hgroup, num_distance_codes,
> - max_distance_symbol, s->num_dist_htrees);
> - if (!allocation_success) {
> - return SaveErrorCode(s,
> - BROTLI_FAILURE(BROTLI_DECODER_ERROR_ALLOC_TREE_GROUPS));
> - }
> - s->loop_counter = 0;
> - s->state = BROTLI_STATE_TREE_GROUP;
> - }
> - /* Fall through. */
> -
> - case BROTLI_STATE_TREE_GROUP: {
> - HuffmanTreeGroup* hgroup = NULL;
> - switch (s->loop_counter) {
> - case 0: hgroup = &s->literal_hgroup; break;
> - case 1: hgroup = &s->insert_copy_hgroup; break;
> - case 2: hgroup = &s->distance_hgroup; break;
> - default: return SaveErrorCode(s, BROTLI_FAILURE(
> - BROTLI_DECODER_ERROR_UNREACHABLE));
> - }
> - result = HuffmanTreeGroupDecode(hgroup, s);
> - if (result != BROTLI_DECODER_SUCCESS) break;
> - s->loop_counter++;
> - if (s->loop_counter >= 3) {
> - PrepareLiteralDecoding(s);
> - s->dist_context_map_slice = s->dist_context_map;
> - s->htree_command = s->insert_copy_hgroup.htrees[0];
> - if (!BrotliEnsureRingBuffer(s)) {
> - result =
> BROTLI_FAILURE(BROTLI_DECODER_ERROR_ALLOC_RING_BUFFER_2);
> - break;
> - }
> - s->state = BROTLI_STATE_COMMAND_BEGIN;
> - }
> - break;
> - }
> -
> - case BROTLI_STATE_COMMAND_BEGIN:
> - /* Fall through. */
> - case BROTLI_STATE_COMMAND_INNER:
> - /* Fall through. */
> - case BROTLI_STATE_COMMAND_POST_DECODE_LITERALS:
> - /* Fall through. */
> - case BROTLI_STATE_COMMAND_POST_WRAP_COPY:
> - result = ProcessCommands(s);
> - if (result == BROTLI_DECODER_NEEDS_MORE_INPUT) {
> - result = SafeProcessCommands(s);
> - }
> - break;
> -
> - case BROTLI_STATE_COMMAND_INNER_WRITE:
> - /* Fall through. */
> - case BROTLI_STATE_COMMAND_POST_WRITE_1:
> - /* Fall through. */
> - case BROTLI_STATE_COMMAND_POST_WRITE_2:
> - result = WriteRingBuffer(
> - s, available_out, next_out, total_out, BROTLI_FALSE);
> - if (result != BROTLI_DECODER_SUCCESS) {
> - break;
> - }
> - WrapRingBuffer(s);
> - if (s->ringbuffer_size == 1 << s->window_bits) {
> - s->max_distance = s->max_backward_distance;
> - }
> - if (s->state == BROTLI_STATE_COMMAND_POST_WRITE_1) {
> - if (s->meta_block_remaining_len == 0) {
> - /* Next metablock, if any. */
> - s->state = BROTLI_STATE_METABLOCK_DONE;
> - } else {
> - s->state = BROTLI_STATE_COMMAND_BEGIN;
> - }
> - break;
> - } else if (s->state == BROTLI_STATE_COMMAND_POST_WRITE_2) {
> - s->state = BROTLI_STATE_COMMAND_POST_WRAP_COPY;
> - } else { /* BROTLI_STATE_COMMAND_INNER_WRITE */
> - if (s->loop_counter == 0) {
> - if (s->meta_block_remaining_len == 0) {
> - s->state = BROTLI_STATE_METABLOCK_DONE;
> - } else {
> - s->state = BROTLI_STATE_COMMAND_POST_DECODE_LITERALS;
> - }
> - break;
> - }
> - s->state = BROTLI_STATE_COMMAND_INNER;
> - }
> - break;
> -
> - case BROTLI_STATE_METABLOCK_DONE:
> - if (s->meta_block_remaining_len < 0) {
> - result =
> BROTLI_FAILURE(BROTLI_DECODER_ERROR_FORMAT_BLOCK_LENGTH_2);
> - break;
> - }
> - BrotliDecoderStateCleanupAfterMetablock(s);
> - if (!s->is_last_metablock) {
> - s->state = BROTLI_STATE_METABLOCK_BEGIN;
> - break;
> - }
> - if (!BrotliJumpToByteBoundary(br)) {
> - result =
> BROTLI_FAILURE(BROTLI_DECODER_ERROR_FORMAT_PADDING_2);
> - break;
> - }
> - if (s->buffer_length == 0) {
> - BrotliBitReaderUnload(br);
> - *available_in = br->avail_in;
> - *next_in = br->next_in;
> - }
> - s->state = BROTLI_STATE_DONE;
> - /* Fall through. */
> -
> - case BROTLI_STATE_DONE:
> - if (s->ringbuffer != 0) {
> - result = WriteRingBuffer(
> - s, available_out, next_out, total_out, BROTLI_TRUE);
> - if (result != BROTLI_DECODER_SUCCESS) {
> - break;
> - }
> - }
> - return SaveErrorCode(s, result);
> - }
> - }
> - return SaveErrorCode(s, result);
> -}
> -
> -BROTLI_BOOL BrotliDecoderHasMoreOutput(const BrotliDecoderState* s) {
> - /* After unrecoverable error remaining output is considered nonsensical.
> */
> - if ((int)s->error_code < 0) {
> - return BROTLI_FALSE;
> - }
> - return TO_BROTLI_BOOL(
> - s->ringbuffer != 0 && UnwrittenBytes(s, BROTLI_FALSE) != 0);
> -}
> -
> -const uint8_t* BrotliDecoderTakeOutput(BrotliDecoderState* s, size_t* size)
> {
> - uint8_t* result = 0;
> - size_t available_out = *size ? *size : 1u << 24;
> - size_t requested_out = available_out;
> - BrotliDecoderErrorCode status;
> - if ((s->ringbuffer == 0) || ((int)s->error_code < 0)) {
> - *size = 0;
> - return 0;
> - }
> - WrapRingBuffer(s);
> - status = WriteRingBuffer(s, &available_out, &result, 0, BROTLI_TRUE);
> - /* Either WriteRingBuffer returns those "success" codes... */
> - if (status == BROTLI_DECODER_SUCCESS ||
> - status == BROTLI_DECODER_NEEDS_MORE_OUTPUT) {
> - *size = requested_out - available_out;
> - } else {
> - /* ... or stream is broken. Normally this should be caught by
> - BrotliDecoderDecompressStream, this is just a safeguard. */
> - if ((int)status < 0) SaveErrorCode(s, status);
> - *size = 0;
> - result = 0;
> - }
> - return result;
> -}
> -
> -BROTLI_BOOL BrotliDecoderIsUsed(const BrotliDecoderState* s) {
> - return TO_BROTLI_BOOL(s->state != BROTLI_STATE_UNINITED ||
> - BrotliGetAvailableBits(&s->br) != 0);
> -}
> -
> -BROTLI_BOOL BrotliDecoderIsFinished(const BrotliDecoderState* s) {
> - return TO_BROTLI_BOOL(s->state == BROTLI_STATE_DONE) &&
> - !BrotliDecoderHasMoreOutput(s);
> -}
> -
> -BrotliDecoderErrorCode BrotliDecoderGetErrorCode(const
> BrotliDecoderState* s) {
> - return (BrotliDecoderErrorCode)s->error_code;
> -}
> -
> -const char* BrotliDecoderErrorString(BrotliDecoderErrorCode c) {
> - switch (c) {
> -#define BROTLI_ERROR_CODE_CASE_(PREFIX, NAME, CODE) \
> - case BROTLI_DECODER ## PREFIX ## NAME: return #NAME;
> -#define BROTLI_NOTHING_
> - BROTLI_DECODER_ERROR_CODES_LIST(BROTLI_ERROR_CODE_CASE_,
> BROTLI_NOTHING_)
> -#undef BROTLI_ERROR_CODE_CASE_
> -#undef BROTLI_NOTHING_
> - default: return "INVALID";
> - }
> -}
> -
> -uint32_t BrotliDecoderVersion() {
> - return BROTLI_VERSION;
> -}
> -
> -#if defined(__cplusplus) || defined(c_plusplus)
> -} /* extern "C" */
> -#endif
> diff --git a/BaseTools/Source/C/BrotliCompress/dec/huffman.c
> b/BaseTools/Source/C/BrotliCompress/dec/huffman.c
> deleted file mode 100644
> index 4ad0dc6bd0eb..000000000000
> --- a/BaseTools/Source/C/BrotliCompress/dec/huffman.c
> +++ /dev/null
> @@ -1,356 +0,0 @@
> -/* Copyright 2013 Google Inc. All Rights Reserved.
> -
> - Distributed under MIT license.
> - See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
> -*/
> -
> -/* Utilities for building Huffman decoding tables. */
> -
> -#include "./huffman.h"
> -
> -#include <string.h> /* memcpy, memset */
> -
> -#include "../common/constants.h"
> -#include "../common/platform.h"
> -#include <brotli/types.h>
> -
> -#if defined(__cplusplus) || defined(c_plusplus)
> -extern "C" {
> -#endif
> -
> -#define BROTLI_REVERSE_BITS_MAX 8
> -
> -#if defined(BROTLI_RBIT)
> -#define BROTLI_REVERSE_BITS_BASE \
> - ((sizeof(brotli_reg_t) << 3) - BROTLI_REVERSE_BITS_MAX)
> -#else
> -#define BROTLI_REVERSE_BITS_BASE 0
> -static uint8_t kReverseBits[1 << BROTLI_REVERSE_BITS_MAX] = {
> - 0x00, 0x80, 0x40, 0xC0, 0x20, 0xA0, 0x60, 0xE0,
> - 0x10, 0x90, 0x50, 0xD0, 0x30, 0xB0, 0x70, 0xF0,
> - 0x08, 0x88, 0x48, 0xC8, 0x28, 0xA8, 0x68, 0xE8,
> - 0x18, 0x98, 0x58, 0xD8, 0x38, 0xB8, 0x78, 0xF8,
> - 0x04, 0x84, 0x44, 0xC4, 0x24, 0xA4, 0x64, 0xE4,
> - 0x14, 0x94, 0x54, 0xD4, 0x34, 0xB4, 0x74, 0xF4,
> - 0x0C, 0x8C, 0x4C, 0xCC, 0x2C, 0xAC, 0x6C, 0xEC,
> - 0x1C, 0x9C, 0x5C, 0xDC, 0x3C, 0xBC, 0x7C, 0xFC,
> - 0x02, 0x82, 0x42, 0xC2, 0x22, 0xA2, 0x62, 0xE2,
> - 0x12, 0x92, 0x52, 0xD2, 0x32, 0xB2, 0x72, 0xF2,
> - 0x0A, 0x8A, 0x4A, 0xCA, 0x2A, 0xAA, 0x6A, 0xEA,
> - 0x1A, 0x9A, 0x5A, 0xDA, 0x3A, 0xBA, 0x7A, 0xFA,
> - 0x06, 0x86, 0x46, 0xC6, 0x26, 0xA6, 0x66, 0xE6,
> - 0x16, 0x96, 0x56, 0xD6, 0x36, 0xB6, 0x76, 0xF6,
> - 0x0E, 0x8E, 0x4E, 0xCE, 0x2E, 0xAE, 0x6E, 0xEE,
> - 0x1E, 0x9E, 0x5E, 0xDE, 0x3E, 0xBE, 0x7E, 0xFE,
> - 0x01, 0x81, 0x41, 0xC1, 0x21, 0xA1, 0x61, 0xE1,
> - 0x11, 0x91, 0x51, 0xD1, 0x31, 0xB1, 0x71, 0xF1,
> - 0x09, 0x89, 0x49, 0xC9, 0x29, 0xA9, 0x69, 0xE9,
> - 0x19, 0x99, 0x59, 0xD9, 0x39, 0xB9, 0x79, 0xF9,
> - 0x05, 0x85, 0x45, 0xC5, 0x25, 0xA5, 0x65, 0xE5,
> - 0x15, 0x95, 0x55, 0xD5, 0x35, 0xB5, 0x75, 0xF5,
> - 0x0D, 0x8D, 0x4D, 0xCD, 0x2D, 0xAD, 0x6D, 0xED,
> - 0x1D, 0x9D, 0x5D, 0xDD, 0x3D, 0xBD, 0x7D, 0xFD,
> - 0x03, 0x83, 0x43, 0xC3, 0x23, 0xA3, 0x63, 0xE3,
> - 0x13, 0x93, 0x53, 0xD3, 0x33, 0xB3, 0x73, 0xF3,
> - 0x0B, 0x8B, 0x4B, 0xCB, 0x2B, 0xAB, 0x6B, 0xEB,
> - 0x1B, 0x9B, 0x5B, 0xDB, 0x3B, 0xBB, 0x7B, 0xFB,
> - 0x07, 0x87, 0x47, 0xC7, 0x27, 0xA7, 0x67, 0xE7,
> - 0x17, 0x97, 0x57, 0xD7, 0x37, 0xB7, 0x77, 0xF7,
> - 0x0F, 0x8F, 0x4F, 0xCF, 0x2F, 0xAF, 0x6F, 0xEF,
> - 0x1F, 0x9F, 0x5F, 0xDF, 0x3F, 0xBF, 0x7F, 0xFF
> -};
> -#endif /* BROTLI_RBIT */
> -
> -#define BROTLI_REVERSE_BITS_LOWEST \
> - ((brotli_reg_t)1 << (BROTLI_REVERSE_BITS_MAX - 1 +
> BROTLI_REVERSE_BITS_BASE))
> -
> -/* Returns reverse(num >> BROTLI_REVERSE_BITS_BASE,
> BROTLI_REVERSE_BITS_MAX),
> - where reverse(value, len) is the bit-wise reversal of the len least
> - significant bits of value. */
> -static BROTLI_INLINE brotli_reg_t BrotliReverseBits(brotli_reg_t num) {
> -#if defined(BROTLI_RBIT)
> - return BROTLI_RBIT(num);
> -#else
> - return kReverseBits[num];
> -#endif
> -}
> -
> -/* Stores code in table[0], table[step], table[2*step], ..., table[end] */
> -/* Assumes that end is an integer multiple of step */
> -static BROTLI_INLINE void ReplicateValue(HuffmanCode* table,
> - int step, int end,
> - HuffmanCode code) {
> - do {
> - end -= step;
> - table[end] = code;
> - } while (end > 0);
> -}
> -
> -/* Returns the table width of the next 2nd level table. |count| is the
> histogram
> - of bit lengths for the remaining symbols, |len| is the code length of the
> - next processed symbol. */
> -static BROTLI_INLINE int NextTableBitSize(const uint16_t* const count,
> - int len, int root_bits) {
> - int left = 1 << (len - root_bits);
> - while (len < BROTLI_HUFFMAN_MAX_CODE_LENGTH) {
> - left -= count[len];
> - if (left <= 0) break;
> - ++len;
> - left <<= 1;
> - }
> - return len - root_bits;
> -}
> -
> -void BrotliBuildCodeLengthsHuffmanTable(HuffmanCode* table,
> - const uint8_t* const code_lengths,
> - uint16_t* count) {
> - HuffmanCode code; /* current table entry */
> - int symbol; /* symbol index in original or sorted table */
> - brotli_reg_t key; /* prefix code */
> - brotli_reg_t key_step; /* prefix code addend */
> - int step; /* step size to replicate values in current table */
> - int table_size; /* size of current table */
> - int sorted[BROTLI_CODE_LENGTH_CODES]; /* symbols sorted by code
> length */
> - /* offsets in sorted table for each length */
> - int offset[BROTLI_HUFFMAN_MAX_CODE_LENGTH_CODE_LENGTH + 1];
> - int bits;
> - int bits_count;
> - BROTLI_DCHECK(BROTLI_HUFFMAN_MAX_CODE_LENGTH_CODE_LENGTH
> <=
> - BROTLI_REVERSE_BITS_MAX);
> -
> - /* Generate offsets into sorted symbol table by code length. */
> - symbol = -1;
> - bits = 1;
> - BROTLI_REPEAT(BROTLI_HUFFMAN_MAX_CODE_LENGTH_CODE_LENGTH,
> {
> - symbol += count[bits];
> - offset[bits] = symbol;
> - bits++;
> - });
> - /* Symbols with code length 0 are placed after all other symbols. */
> - offset[0] = BROTLI_CODE_LENGTH_CODES - 1;
> -
> - /* Sort symbols by length, by symbol order within each length. */
> - symbol = BROTLI_CODE_LENGTH_CODES;
> - do {
> - BROTLI_REPEAT(6, {
> - symbol--;
> - sorted[offset[code_lengths[symbol]]--] = symbol;
> - });
> - } while (symbol != 0);
> -
> - table_size = 1 << BROTLI_HUFFMAN_MAX_CODE_LENGTH_CODE_LENGTH;
> -
> - /* Special case: all symbols but one have 0 code length. */
> - if (offset[0] == 0) {
> - code.bits = 0;
> - code.value = (uint16_t)sorted[0];
> - for (key = 0; key < (brotli_reg_t)table_size; ++key) {
> - table[key] = code;
> - }
> - return;
> - }
> -
> - /* Fill in table. */
> - key = 0;
> - key_step = BROTLI_REVERSE_BITS_LOWEST;
> - symbol = 0;
> - bits = 1;
> - step = 2;
> - do {
> - code.bits = (uint8_t)bits;
> - for (bits_count = count[bits]; bits_count != 0; --bits_count) {
> - code.value = (uint16_t)sorted[symbol++];
> - ReplicateValue(&table[BrotliReverseBits(key)], step, table_size, code);
> - key += key_step;
> - }
> - step <<= 1;
> - key_step >>= 1;
> - } while (++bits <=
> BROTLI_HUFFMAN_MAX_CODE_LENGTH_CODE_LENGTH);
> -}
> -
> -uint32_t BrotliBuildHuffmanTable(HuffmanCode* root_table,
> - int root_bits,
> - const uint16_t* const symbol_lists,
> - uint16_t* count) {
> - HuffmanCode code; /* current table entry */
> - HuffmanCode* table; /* next available space in table */
> - int len; /* current code length */
> - int symbol; /* symbol index in original or sorted table */
> - brotli_reg_t key; /* prefix code */
> - brotli_reg_t key_step; /* prefix code addend */
> - brotli_reg_t sub_key; /* 2nd level table prefix code */
> - brotli_reg_t sub_key_step; /* 2nd level table prefix code addend */
> - int step; /* step size to replicate values in current table */
> - int table_bits; /* key length of current table */
> - int table_size; /* size of current table */
> - int total_size; /* sum of root table size and 2nd level table sizes */
> - int max_length = -1;
> - int bits;
> - int bits_count;
> -
> - BROTLI_DCHECK(root_bits <= BROTLI_REVERSE_BITS_MAX);
> - BROTLI_DCHECK(BROTLI_HUFFMAN_MAX_CODE_LENGTH - root_bits <=
> - BROTLI_REVERSE_BITS_MAX);
> -
> - while (symbol_lists[max_length] == 0xFFFF) max_length--;
> - max_length += BROTLI_HUFFMAN_MAX_CODE_LENGTH + 1;
> -
> - table = root_table;
> - table_bits = root_bits;
> - table_size = 1 << table_bits;
> - total_size = table_size;
> -
> - /* Fill in the root table. Reduce the table size to if possible,
> - and create the repetitions by memcpy. */
> - if (table_bits > max_length) {
> - table_bits = max_length;
> - table_size = 1 << table_bits;
> - }
> - key = 0;
> - key_step = BROTLI_REVERSE_BITS_LOWEST;
> - bits = 1;
> - step = 2;
> - do {
> - code.bits = (uint8_t)bits;
> - symbol = bits - (BROTLI_HUFFMAN_MAX_CODE_LENGTH + 1);
> - for (bits_count = count[bits]; bits_count != 0; --bits_count) {
> - symbol = symbol_lists[symbol];
> - code.value = (uint16_t)symbol;
> - ReplicateValue(&table[BrotliReverseBits(key)], step, table_size, code);
> - key += key_step;
> - }
> - step <<= 1;
> - key_step >>= 1;
> - } while (++bits <= table_bits);
> -
> - /* If root_bits != table_bits then replicate to fill the remaining slots. */
> - while (total_size != table_size) {
> - memcpy(&table[table_size], &table[0],
> - (size_t)table_size * sizeof(table[0]));
> - table_size <<= 1;
> - }
> -
> - /* Fill in 2nd level tables and add pointers to root table. */
> - key_step = BROTLI_REVERSE_BITS_LOWEST >> (root_bits - 1);
> - sub_key = (BROTLI_REVERSE_BITS_LOWEST << 1);
> - sub_key_step = BROTLI_REVERSE_BITS_LOWEST;
> - for (len = root_bits + 1, step = 2; len <= max_length; ++len) {
> - symbol = len - (BROTLI_HUFFMAN_MAX_CODE_LENGTH + 1);
> - for (; count[len] != 0; --count[len]) {
> - if (sub_key == (BROTLI_REVERSE_BITS_LOWEST << 1U)) {
> - table += table_size;
> - table_bits = NextTableBitSize(count, len, root_bits);
> - table_size = 1 << table_bits;
> - total_size += table_size;
> - sub_key = BrotliReverseBits(key);
> - key += key_step;
> - root_table[sub_key].bits = (uint8_t)(table_bits + root_bits);
> - root_table[sub_key].value =
> - (uint16_t)(((size_t)(table - root_table)) - sub_key);
> - sub_key = 0;
> - }
> - code.bits = (uint8_t)(len - root_bits);
> - symbol = symbol_lists[symbol];
> - code.value = (uint16_t)symbol;
> - ReplicateValue(
> - &table[BrotliReverseBits(sub_key)], step, table_size, code);
> - sub_key += sub_key_step;
> - }
> - step <<= 1;
> - sub_key_step >>= 1;
> - }
> - return (uint32_t)total_size;
> -}
> -
> -uint32_t BrotliBuildSimpleHuffmanTable(HuffmanCode* table,
> - int root_bits,
> - uint16_t* val,
> - uint32_t num_symbols) {
> - uint32_t table_size = 1;
> - const uint32_t goal_size = 1U << root_bits;
> - switch (num_symbols) {
> - case 0:
> - table[0].bits = 0;
> - table[0].value = val[0];
> - break;
> - case 1:
> - table[0].bits = 1;
> - table[1].bits = 1;
> - if (val[1] > val[0]) {
> - table[0].value = val[0];
> - table[1].value = val[1];
> - } else {
> - table[0].value = val[1];
> - table[1].value = val[0];
> - }
> - table_size = 2;
> - break;
> - case 2:
> - table[0].bits = 1;
> - table[0].value = val[0];
> - table[2].bits = 1;
> - table[2].value = val[0];
> - if (val[2] > val[1]) {
> - table[1].value = val[1];
> - table[3].value = val[2];
> - } else {
> - table[1].value = val[2];
> - table[3].value = val[1];
> - }
> - table[1].bits = 2;
> - table[3].bits = 2;
> - table_size = 4;
> - break;
> - case 3: {
> - int i, k;
> - for (i = 0; i < 3; ++i) {
> - for (k = i + 1; k < 4; ++k) {
> - if (val[k] < val[i]) {
> - uint16_t t = val[k];
> - val[k] = val[i];
> - val[i] = t;
> - }
> - }
> - }
> - for (i = 0; i < 4; ++i) {
> - table[i].bits = 2;
> - }
> - table[0].value = val[0];
> - table[2].value = val[1];
> - table[1].value = val[2];
> - table[3].value = val[3];
> - table_size = 4;
> - break;
> - }
> - case 4: {
> - int i;
> - if (val[3] < val[2]) {
> - uint16_t t = val[3];
> - val[3] = val[2];
> - val[2] = t;
> - }
> - for (i = 0; i < 7; ++i) {
> - table[i].value = val[0];
> - table[i].bits = (uint8_t)(1 + (i & 1));
> - }
> - table[1].value = val[1];
> - table[3].value = val[2];
> - table[5].value = val[1];
> - table[7].value = val[3];
> - table[3].bits = 3;
> - table[7].bits = 3;
> - table_size = 8;
> - break;
> - }
> - }
> - while (table_size != goal_size) {
> - memcpy(&table[table_size], &table[0],
> - (size_t)table_size * sizeof(table[0]));
> - table_size <<= 1;
> - }
> - return goal_size;
> -}
> -
> -#if defined(__cplusplus) || defined(c_plusplus)
> -} /* extern "C" */
> -#endif
> diff --git a/BaseTools/Source/C/BrotliCompress/dec/state.c
> b/BaseTools/Source/C/BrotliCompress/dec/state.c
> deleted file mode 100644
> index 88ecfb68b684..000000000000
> --- a/BaseTools/Source/C/BrotliCompress/dec/state.c
> +++ /dev/null
> @@ -1,164 +0,0 @@
> -/* Copyright 2015 Google Inc. All Rights Reserved.
> -
> - Distributed under MIT license.
> - See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
> -*/
> -
> -#include "./state.h"
> -
> -#include <stdlib.h> /* free, malloc */
> -
> -#include <brotli/types.h>
> -#include "./huffman.h"
> -
> -#if defined(__cplusplus) || defined(c_plusplus)
> -extern "C" {
> -#endif
> -
> -BROTLI_BOOL BrotliDecoderStateInit(BrotliDecoderState* s,
> - brotli_alloc_func alloc_func, brotli_free_func free_func, void* opaque) {
> - if (!alloc_func) {
> - s->alloc_func = BrotliDefaultAllocFunc;
> - s->free_func = BrotliDefaultFreeFunc;
> - s->memory_manager_opaque = 0;
> - } else {
> - s->alloc_func = alloc_func;
> - s->free_func = free_func;
> - s->memory_manager_opaque = opaque;
> - }
> -
> - s->error_code = 0; /* BROTLI_DECODER_NO_ERROR */
> -
> - BrotliInitBitReader(&s->br);
> - s->state = BROTLI_STATE_UNINITED;
> - s->large_window = 0;
> - s->substate_metablock_header =
> BROTLI_STATE_METABLOCK_HEADER_NONE;
> - s->substate_tree_group = BROTLI_STATE_TREE_GROUP_NONE;
> - s->substate_context_map = BROTLI_STATE_CONTEXT_MAP_NONE;
> - s->substate_uncompressed = BROTLI_STATE_UNCOMPRESSED_NONE;
> - s->substate_huffman = BROTLI_STATE_HUFFMAN_NONE;
> - s->substate_decode_uint8 = BROTLI_STATE_DECODE_UINT8_NONE;
> - s->substate_read_block_length =
> BROTLI_STATE_READ_BLOCK_LENGTH_NONE;
> -
> - s->buffer_length = 0;
> - s->loop_counter = 0;
> - s->pos = 0;
> - s->rb_roundtrips = 0;
> - s->partial_pos_out = 0;
> -
> - s->block_type_trees = NULL;
> - s->block_len_trees = NULL;
> - s->ringbuffer = NULL;
> - s->ringbuffer_size = 0;
> - s->new_ringbuffer_size = 0;
> - s->ringbuffer_mask = 0;
> -
> - s->context_map = NULL;
> - s->context_modes = NULL;
> - s->dist_context_map = NULL;
> - s->context_map_slice = NULL;
> - s->dist_context_map_slice = NULL;
> -
> - s->sub_loop_counter = 0;
> -
> - s->literal_hgroup.codes = NULL;
> - s->literal_hgroup.htrees = NULL;
> - s->insert_copy_hgroup.codes = NULL;
> - s->insert_copy_hgroup.htrees = NULL;
> - s->distance_hgroup.codes = NULL;
> - s->distance_hgroup.htrees = NULL;
> -
> - s->is_last_metablock = 0;
> - s->is_uncompressed = 0;
> - s->is_metadata = 0;
> - s->should_wrap_ringbuffer = 0;
> - s->canny_ringbuffer_allocation = 1;
> -
> - s->window_bits = 0;
> - s->max_distance = 0;
> - s->dist_rb[0] = 16;
> - s->dist_rb[1] = 15;
> - s->dist_rb[2] = 11;
> - s->dist_rb[3] = 4;
> - s->dist_rb_idx = 0;
> - s->block_type_trees = NULL;
> - s->block_len_trees = NULL;
> -
> - /* Make small negative indexes addressable. */
> - s->symbol_lists = &s-
> >symbols_lists_array[BROTLI_HUFFMAN_MAX_CODE_LENGTH + 1];
> -
> - s->mtf_upper_bound = 63;
> -
> - s->dictionary = BrotliGetDictionary();
> - s->transforms = BrotliGetTransforms();
> -
> - return BROTLI_TRUE;
> -}
> -
> -void BrotliDecoderStateMetablockBegin(BrotliDecoderState* s) {
> - s->meta_block_remaining_len = 0;
> - s->block_length[0] = 1U << 24;
> - s->block_length[1] = 1U << 24;
> - s->block_length[2] = 1U << 24;
> - s->num_block_types[0] = 1;
> - s->num_block_types[1] = 1;
> - s->num_block_types[2] = 1;
> - s->block_type_rb[0] = 1;
> - s->block_type_rb[1] = 0;
> - s->block_type_rb[2] = 1;
> - s->block_type_rb[3] = 0;
> - s->block_type_rb[4] = 1;
> - s->block_type_rb[5] = 0;
> - s->context_map = NULL;
> - s->context_modes = NULL;
> - s->dist_context_map = NULL;
> - s->context_map_slice = NULL;
> - s->literal_htree = NULL;
> - s->dist_context_map_slice = NULL;
> - s->dist_htree_index = 0;
> - s->context_lookup = NULL;
> - s->literal_hgroup.codes = NULL;
> - s->literal_hgroup.htrees = NULL;
> - s->insert_copy_hgroup.codes = NULL;
> - s->insert_copy_hgroup.htrees = NULL;
> - s->distance_hgroup.codes = NULL;
> - s->distance_hgroup.htrees = NULL;
> -}
> -
> -void BrotliDecoderStateCleanupAfterMetablock(BrotliDecoderState* s) {
> - BROTLI_DECODER_FREE(s, s->context_modes);
> - BROTLI_DECODER_FREE(s, s->context_map);
> - BROTLI_DECODER_FREE(s, s->dist_context_map);
> - BROTLI_DECODER_FREE(s, s->literal_hgroup.htrees);
> - BROTLI_DECODER_FREE(s, s->insert_copy_hgroup.htrees);
> - BROTLI_DECODER_FREE(s, s->distance_hgroup.htrees);
> -}
> -
> -void BrotliDecoderStateCleanup(BrotliDecoderState* s) {
> - BrotliDecoderStateCleanupAfterMetablock(s);
> -
> - BROTLI_DECODER_FREE(s, s->ringbuffer);
> - BROTLI_DECODER_FREE(s, s->block_type_trees);
> -}
> -
> -BROTLI_BOOL BrotliDecoderHuffmanTreeGroupInit(BrotliDecoderState* s,
> - HuffmanTreeGroup* group, uint32_t alphabet_size, uint32_t max_symbol,
> - uint32_t ntrees) {
> - /* Pack two allocations into one */
> - const size_t max_table_size = kMaxHuffmanTableSize[(alphabet_size +
> 31) >> 5];
> - const size_t code_size = sizeof(HuffmanCode) * ntrees * max_table_size;
> - const size_t htree_size = sizeof(HuffmanCode*) * ntrees;
> - /* Pointer alignment is, hopefully, wider than sizeof(HuffmanCode). */
> - HuffmanCode** p = (HuffmanCode**)BROTLI_DECODER_ALLOC(s,
> - code_size + htree_size);
> - group->alphabet_size = (uint16_t)alphabet_size;
> - group->max_symbol = (uint16_t)max_symbol;
> - group->num_htrees = (uint16_t)ntrees;
> - group->htrees = p;
> - group->codes = (HuffmanCode*)(&p[ntrees]);
> - return !!p;
> -}
> -
> -#if defined(__cplusplus) || defined(c_plusplus)
> -} /* extern "C" */
> -#endif
> diff --git a/BaseTools/Source/C/BrotliCompress/enc/backward_references.c
> b/BaseTools/Source/C/BrotliCompress/enc/backward_references.c
> deleted file mode 100644
> index d14679abcddc..000000000000
> --- a/BaseTools/Source/C/BrotliCompress/enc/backward_references.c
> +++ /dev/null
> @@ -1,144 +0,0 @@
> -/* Copyright 2013 Google Inc. All Rights Reserved.
> -
> - Distributed under MIT license.
> - See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
> -*/
> -
> -/* Function to find backward reference copies. */
> -
> -#include "./backward_references.h"
> -
> -#include "../common/constants.h"
> -#include "../common/dictionary.h"
> -#include "../common/platform.h"
> -#include <brotli/types.h>
> -#include "./command.h"
> -#include "./dictionary_hash.h"
> -#include "./memory.h"
> -#include "./quality.h"
> -
> -#if defined(__cplusplus) || defined(c_plusplus)
> -extern "C" {
> -#endif
> -
> -static BROTLI_INLINE size_t ComputeDistanceCode(size_t distance,
> - size_t max_distance,
> - const int* dist_cache) {
> - if (distance <= max_distance) {
> - size_t distance_plus_3 = distance + 3;
> - size_t offset0 = distance_plus_3 - (size_t)dist_cache[0];
> - size_t offset1 = distance_plus_3 - (size_t)dist_cache[1];
> - if (distance == (size_t)dist_cache[0]) {
> - return 0;
> - } else if (distance == (size_t)dist_cache[1]) {
> - return 1;
> - } else if (offset0 < 7) {
> - return (0x9750468 >> (4 * offset0)) & 0xF;
> - } else if (offset1 < 7) {
> - return (0xFDB1ACE >> (4 * offset1)) & 0xF;
> - } else if (distance == (size_t)dist_cache[2]) {
> - return 2;
> - } else if (distance == (size_t)dist_cache[3]) {
> - return 3;
> - }
> - }
> - return distance + BROTLI_NUM_DISTANCE_SHORT_CODES - 1;
> -}
> -
> -#define EXPAND_CAT(a, b) CAT(a, b)
> -#define CAT(a, b) a ## b
> -#define FN(X) EXPAND_CAT(X, HASHER())
> -#define EXPORT_FN(X) EXPAND_CAT(X, EXPAND_CAT(PREFIX(), HASHER()))
> -
> -#define PREFIX() N
> -
> -#define HASHER() H2
> -/* NOLINTNEXTLINE(build/include) */
> -#include "./backward_references_inc.h"
> -#undef HASHER
> -
> -#define HASHER() H3
> -/* NOLINTNEXTLINE(build/include) */
> -#include "./backward_references_inc.h"
> -#undef HASHER
> -
> -#define HASHER() H4
> -/* NOLINTNEXTLINE(build/include) */
> -#include "./backward_references_inc.h"
> -#undef HASHER
> -
> -#define HASHER() H5
> -/* NOLINTNEXTLINE(build/include) */
> -#include "./backward_references_inc.h"
> -#undef HASHER
> -
> -#define HASHER() H6
> -/* NOLINTNEXTLINE(build/include) */
> -#include "./backward_references_inc.h"
> -#undef HASHER
> -
> -#define HASHER() H40
> -/* NOLINTNEXTLINE(build/include) */
> -#include "./backward_references_inc.h"
> -#undef HASHER
> -
> -#define HASHER() H41
> -/* NOLINTNEXTLINE(build/include) */
> -#include "./backward_references_inc.h"
> -#undef HASHER
> -
> -#define HASHER() H42
> -/* NOLINTNEXTLINE(build/include) */
> -#include "./backward_references_inc.h"
> -#undef HASHER
> -
> -#define HASHER() H54
> -/* NOLINTNEXTLINE(build/include) */
> -#include "./backward_references_inc.h"
> -#undef HASHER
> -
> -#define HASHER() H35
> -/* NOLINTNEXTLINE(build/include) */
> -#include "./backward_references_inc.h"
> -#undef HASHER
> -
> -#define HASHER() H55
> -/* NOLINTNEXTLINE(build/include) */
> -#include "./backward_references_inc.h"
> -#undef HASHER
> -
> -#define HASHER() H65
> -/* NOLINTNEXTLINE(build/include) */
> -#include "./backward_references_inc.h"
> -#undef HASHER
> -
> -#undef PREFIX
> -
> -#undef EXPORT_FN
> -#undef FN
> -#undef CAT
> -#undef EXPAND_CAT
> -
> -void BrotliCreateBackwardReferences(
> - size_t num_bytes, size_t position, const uint8_t* ringbuffer,
> - size_t ringbuffer_mask, const BrotliEncoderParams* params,
> - HasherHandle hasher, int* dist_cache, size_t* last_insert_len,
> - Command* commands, size_t* num_commands, size_t* num_literals) {
> - switch (params->hasher.type) {
> -#define CASE_(N) \
> - case N: \
> - CreateBackwardReferencesNH ## N( \
> - num_bytes, position, ringbuffer, \
> - ringbuffer_mask, params, hasher, dist_cache, \
> - last_insert_len, commands, num_commands, num_literals); \
> - return;
> - FOR_GENERIC_HASHERS(CASE_)
> -#undef CASE_
> - default:
> - break;
> - }
> -}
> -
> -#if defined(__cplusplus) || defined(c_plusplus)
> -} /* extern "C" */
> -#endif
> diff --git
> a/BaseTools/Source/C/BrotliCompress/enc/backward_references_hq.c
> b/BaseTools/Source/C/BrotliCompress/enc/backward_references_hq.c
> deleted file mode 100644
> index 89320335ea32..000000000000
> --- a/BaseTools/Source/C/BrotliCompress/enc/backward_references_hq.c
> +++ /dev/null
> @@ -1,830 +0,0 @@
> -/* Copyright 2013 Google Inc. All Rights Reserved.
> -
> - Distributed under MIT license.
> - See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
> -*/
> -
> -/* Function to find backward reference copies. */
> -
> -#include "./backward_references_hq.h"
> -
> -#include <string.h> /* memcpy, memset */
> -
> -#include "../common/constants.h"
> -#include "../common/platform.h"
> -#include <brotli/types.h>
> -#include "./command.h"
> -#include "./fast_log.h"
> -#include "./find_match_length.h"
> -#include "./literal_cost.h"
> -#include "./memory.h"
> -#include "./params.h"
> -#include "./prefix.h"
> -#include "./quality.h"
> -
> -#if defined(__cplusplus) || defined(c_plusplus)
> -extern "C" {
> -#endif
> -
> -#define BROTLI_MAX_EFFECTIVE_DISTANCE_ALPHABET_SIZE 544
> -
> -static const float kInfinity = 1.7e38f; /* ~= 2 ^ 127 */
> -
> -static const uint32_t kDistanceCacheIndex[] = {
> - 0, 1, 2, 3, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1,
> -};
> -static const int kDistanceCacheOffset[] = {
> - 0, 0, 0, 0, -1, 1, -2, 2, -3, 3, -1, 1, -2, 2, -3, 3
> -};
> -
> -void BrotliInitZopfliNodes(ZopfliNode* array, size_t length) {
> - ZopfliNode stub;
> - size_t i;
> - stub.length = 1;
> - stub.distance = 0;
> - stub.dcode_insert_length = 0;
> - stub.u.cost = kInfinity;
> - for (i = 0; i < length; ++i) array[i] = stub;
> -}
> -
> -static BROTLI_INLINE uint32_t ZopfliNodeCopyLength(const ZopfliNode*
> self) {
> - return self->length & 0x1FFFFFF;
> -}
> -
> -static BROTLI_INLINE uint32_t ZopfliNodeLengthCode(const ZopfliNode*
> self) {
> - const uint32_t modifier = self->length >> 25;
> - return ZopfliNodeCopyLength(self) + 9u - modifier;
> -}
> -
> -static BROTLI_INLINE uint32_t ZopfliNodeCopyDistance(const ZopfliNode*
> self) {
> - return self->distance;
> -}
> -
> -static BROTLI_INLINE uint32_t ZopfliNodeDistanceCode(const ZopfliNode*
> self) {
> - const uint32_t short_code = self->dcode_insert_length >> 27;
> - return short_code == 0 ?
> - ZopfliNodeCopyDistance(self) +
> BROTLI_NUM_DISTANCE_SHORT_CODES - 1 :
> - short_code - 1;
> -}
> -
> -static BROTLI_INLINE uint32_t ZopfliNodeCommandLength(const
> ZopfliNode* self) {
> - return ZopfliNodeCopyLength(self) + (self->dcode_insert_length &
> 0x7FFFFFF);
> -}
> -
> -/* Histogram based cost model for zopflification. */
> -typedef struct ZopfliCostModel {
> - /* The insert and copy length symbols. */
> - float cost_cmd_[BROTLI_NUM_COMMAND_SYMBOLS];
> - float* cost_dist_;
> - uint32_t distance_histogram_size;
> - /* Cumulative costs of literals per position in the stream. */
> - float* literal_costs_;
> - float min_cost_cmd_;
> - size_t num_bytes_;
> -} ZopfliCostModel;
> -
> -static void InitZopfliCostModel(
> - MemoryManager* m, ZopfliCostModel* self, const BrotliDistanceParams*
> dist,
> - size_t num_bytes) {
> - uint32_t distance_histogram_size = dist->alphabet_size;
> - if (distance_histogram_size >
> BROTLI_MAX_EFFECTIVE_DISTANCE_ALPHABET_SIZE) {
> - distance_histogram_size =
> BROTLI_MAX_EFFECTIVE_DISTANCE_ALPHABET_SIZE;
> - }
> - self->num_bytes_ = num_bytes;
> - self->literal_costs_ = BROTLI_ALLOC(m, float, num_bytes + 2);
> - self->cost_dist_ = BROTLI_ALLOC(m, float, dist->alphabet_size);
> - self->distance_histogram_size = distance_histogram_size;
> - if (BROTLI_IS_OOM(m)) return;
> -}
> -
> -static void CleanupZopfliCostModel(MemoryManager* m,
> ZopfliCostModel* self) {
> - BROTLI_FREE(m, self->literal_costs_);
> - BROTLI_FREE(m, self->cost_dist_);
> -}
> -
> -static void SetCost(const uint32_t* histogram, size_t histogram_size,
> - BROTLI_BOOL literal_histogram, float* cost) {
> - size_t sum = 0;
> - size_t missing_symbol_sum;
> - float log2sum;
> - float missing_symbol_cost;
> - size_t i;
> - for (i = 0; i < histogram_size; i++) {
> - sum += histogram[i];
> - }
> - log2sum = (float)FastLog2(sum);
> - missing_symbol_sum = sum;
> - if (!literal_histogram) {
> - for (i = 0; i < histogram_size; i++) {
> - if (histogram[i] == 0) missing_symbol_sum++;
> - }
> - }
> - missing_symbol_cost = (float)FastLog2(missing_symbol_sum) + 2;
> - for (i = 0; i < histogram_size; i++) {
> - if (histogram[i] == 0) {
> - cost[i] = missing_symbol_cost;
> - continue;
> - }
> -
> - /* Shannon bits for this symbol. */
> - cost[i] = log2sum - (float)FastLog2(histogram[i]);
> -
> - /* Cannot be coded with less than 1 bit */
> - if (cost[i] < 1) cost[i] = 1;
> - }
> -}
> -
> -static void ZopfliCostModelSetFromCommands(ZopfliCostModel* self,
> - size_t position,
> - const uint8_t* ringbuffer,
> - size_t ringbuffer_mask,
> - const Command* commands,
> - size_t num_commands,
> - size_t last_insert_len) {
> - uint32_t histogram_literal[BROTLI_NUM_LITERAL_SYMBOLS];
> - uint32_t histogram_cmd[BROTLI_NUM_COMMAND_SYMBOLS];
> - uint32_t
> histogram_dist[BROTLI_MAX_EFFECTIVE_DISTANCE_ALPHABET_SIZE];
> - float cost_literal[BROTLI_NUM_LITERAL_SYMBOLS];
> - size_t pos = position - last_insert_len;
> - float min_cost_cmd = kInfinity;
> - size_t i;
> - float* cost_cmd = self->cost_cmd_;
> -
> - memset(histogram_literal, 0, sizeof(histogram_literal));
> - memset(histogram_cmd, 0, sizeof(histogram_cmd));
> - memset(histogram_dist, 0, sizeof(histogram_dist));
> -
> - for (i = 0; i < num_commands; i++) {
> - size_t inslength = commands[i].insert_len_;
> - size_t copylength = CommandCopyLen(&commands[i]);
> - size_t distcode = commands[i].dist_prefix_ & 0x3FF;
> - size_t cmdcode = commands[i].cmd_prefix_;
> - size_t j;
> -
> - histogram_cmd[cmdcode]++;
> - if (cmdcode >= 128) histogram_dist[distcode]++;
> -
> - for (j = 0; j < inslength; j++) {
> - histogram_literal[ringbuffer[(pos + j) & ringbuffer_mask]]++;
> - }
> -
> - pos += inslength + copylength;
> - }
> -
> - SetCost(histogram_literal, BROTLI_NUM_LITERAL_SYMBOLS, BROTLI_TRUE,
> - cost_literal);
> - SetCost(histogram_cmd, BROTLI_NUM_COMMAND_SYMBOLS,
> BROTLI_FALSE,
> - cost_cmd);
> - SetCost(histogram_dist, self->distance_histogram_size, BROTLI_FALSE,
> - self->cost_dist_);
> -
> - for (i = 0; i < BROTLI_NUM_COMMAND_SYMBOLS; ++i) {
> - min_cost_cmd = BROTLI_MIN(float, min_cost_cmd, cost_cmd[i]);
> - }
> - self->min_cost_cmd_ = min_cost_cmd;
> -
> - {
> - float* literal_costs = self->literal_costs_;
> - float literal_carry = 0.0;
> - size_t num_bytes = self->num_bytes_;
> - literal_costs[0] = 0.0;
> - for (i = 0; i < num_bytes; ++i) {
> - literal_carry +=
> - cost_literal[ringbuffer[(position + i) & ringbuffer_mask]];
> - literal_costs[i + 1] = literal_costs[i] + literal_carry;
> - literal_carry -= literal_costs[i + 1] - literal_costs[i];
> - }
> - }
> -}
> -
> -static void ZopfliCostModelSetFromLiteralCosts(ZopfliCostModel* self,
> - size_t position,
> - const uint8_t* ringbuffer,
> - size_t ringbuffer_mask) {
> - float* literal_costs = self->literal_costs_;
> - float literal_carry = 0.0;
> - float* cost_dist = self->cost_dist_;
> - float* cost_cmd = self->cost_cmd_;
> - size_t num_bytes = self->num_bytes_;
> - size_t i;
> - BrotliEstimateBitCostsForLiterals(position, num_bytes, ringbuffer_mask,
> - ringbuffer, &literal_costs[1]);
> - literal_costs[0] = 0.0;
> - for (i = 0; i < num_bytes; ++i) {
> - literal_carry += literal_costs[i + 1];
> - literal_costs[i + 1] = literal_costs[i] + literal_carry;
> - literal_carry -= literal_costs[i + 1] - literal_costs[i];
> - }
> - for (i = 0; i < BROTLI_NUM_COMMAND_SYMBOLS; ++i) {
> - cost_cmd[i] = (float)FastLog2(11 + (uint32_t)i);
> - }
> - for (i = 0; i < self->distance_histogram_size; ++i) {
> - cost_dist[i] = (float)FastLog2(20 + (uint32_t)i);
> - }
> - self->min_cost_cmd_ = (float)FastLog2(11);
> -}
> -
> -static BROTLI_INLINE float ZopfliCostModelGetCommandCost(
> - const ZopfliCostModel* self, uint16_t cmdcode) {
> - return self->cost_cmd_[cmdcode];
> -}
> -
> -static BROTLI_INLINE float ZopfliCostModelGetDistanceCost(
> - const ZopfliCostModel* self, size_t distcode) {
> - return self->cost_dist_[distcode];
> -}
> -
> -static BROTLI_INLINE float ZopfliCostModelGetLiteralCosts(
> - const ZopfliCostModel* self, size_t from, size_t to) {
> - return self->literal_costs_[to] - self->literal_costs_[from];
> -}
> -
> -static BROTLI_INLINE float ZopfliCostModelGetMinCostCmd(
> - const ZopfliCostModel* self) {
> - return self->min_cost_cmd_;
> -}
> -
> -/* REQUIRES: len >= 2, start_pos <= pos */
> -/* REQUIRES: cost < kInfinity, nodes[start_pos].cost < kInfinity */
> -/* Maintains the "ZopfliNode array invariant". */
> -static BROTLI_INLINE void UpdateZopfliNode(ZopfliNode* nodes, size_t pos,
> - size_t start_pos, size_t len, size_t len_code, size_t dist,
> - size_t short_code, float cost) {
> - ZopfliNode* next = &nodes[pos + len];
> - next->length = (uint32_t)(len | ((len + 9u - len_code) << 25));
> - next->distance = (uint32_t)dist;
> - next->dcode_insert_length = (uint32_t)(
> - (short_code << 27) | (pos - start_pos));
> - next->u.cost = cost;
> -}
> -
> -typedef struct PosData {
> - size_t pos;
> - int distance_cache[4];
> - float costdiff;
> - float cost;
> -} PosData;
> -
> -/* Maintains the smallest 8 cost difference together with their positions */
> -typedef struct StartPosQueue {
> - PosData q_[8];
> - size_t idx_;
> -} StartPosQueue;
> -
> -static BROTLI_INLINE void InitStartPosQueue(StartPosQueue* self) {
> - self->idx_ = 0;
> -}
> -
> -static size_t StartPosQueueSize(const StartPosQueue* self) {
> - return BROTLI_MIN(size_t, self->idx_, 8);
> -}
> -
> -static void StartPosQueuePush(StartPosQueue* self, const PosData*
> posdata) {
> - size_t offset = ~(self->idx_++) & 7;
> - size_t len = StartPosQueueSize(self);
> - size_t i;
> - PosData* q = self->q_;
> - q[offset] = *posdata;
> - /* Restore the sorted order. In the list of |len| items at most |len - 1|
> - adjacent element comparisons / swaps are required. */
> - for (i = 1; i < len; ++i) {
> - if (q[offset & 7].costdiff > q[(offset + 1) & 7].costdiff) {
> - BROTLI_SWAP(PosData, q, offset & 7, (offset + 1) & 7);
> - }
> - ++offset;
> - }
> -}
> -
> -static const PosData* StartPosQueueAt(const StartPosQueue* self, size_t k)
> {
> - return &self->q_[(k - self->idx_) & 7];
> -}
> -
> -/* Returns the minimum possible copy length that can improve the cost of
> any */
> -/* future position. */
> -static size_t ComputeMinimumCopyLength(const float start_cost,
> - const ZopfliNode* nodes,
> - const size_t num_bytes,
> - const size_t pos) {
> - /* Compute the minimum possible cost of reaching any future position. */
> - float min_cost = start_cost;
> - size_t len = 2;
> - size_t next_len_bucket = 4;
> - size_t next_len_offset = 10;
> - while (pos + len <= num_bytes && nodes[pos + len].u.cost <= min_cost) {
> - /* We already reached (pos + len) with no more cost than the minimum
> - possible cost of reaching anything from this pos, so there is no point in
> - looking for lengths <= len. */
> - ++len;
> - if (len == next_len_offset) {
> - /* We reached the next copy length code bucket, so we add one more
> - extra bit to the minimum cost. */
> - min_cost += 1.0f;
> - next_len_offset += next_len_bucket;
> - next_len_bucket *= 2;
> - }
> - }
> - return len;
> -}
> -
> -/* REQUIRES: nodes[pos].cost < kInfinity
> - REQUIRES: nodes[0..pos] satisfies that "ZopfliNode array invariant". */
> -static uint32_t ComputeDistanceShortcut(const size_t block_start,
> - const size_t pos,
> - const size_t max_backward,
> - const size_t gap,
> - const ZopfliNode* nodes) {
> - const size_t clen = ZopfliNodeCopyLength(&nodes[pos]);
> - const size_t ilen = nodes[pos].dcode_insert_length & 0x7FFFFFF;
> - const size_t dist = ZopfliNodeCopyDistance(&nodes[pos]);
> - /* Since |block_start + pos| is the end position of the command, the copy
> part
> - starts from |block_start + pos - clen|. Distances that are greater than
> - this or greater than |max_backward| are static dictionary references, and
> - do not update the last distances. Also distance code 0 (last distance)
> - does not update the last distances. */
> - if (pos == 0) {
> - return 0;
> - } else if (dist + clen <= block_start + pos + gap &&
> - dist <= max_backward + gap &&
> - ZopfliNodeDistanceCode(&nodes[pos]) > 0) {
> - return (uint32_t)pos;
> - } else {
> - return nodes[pos - clen - ilen].u.shortcut;
> - }
> -}
> -
> -/* Fills in dist_cache[0..3] with the last four distances (as defined by
> - Section 4. of the Spec) that would be used at (block_start + pos) if we
> - used the shortest path of commands from block_start, computed from
> - nodes[0..pos]. The last four distances at block_start are in
> - starting_dist_cache[0..3].
> - REQUIRES: nodes[pos].cost < kInfinity
> - REQUIRES: nodes[0..pos] satisfies that "ZopfliNode array invariant". */
> -static void ComputeDistanceCache(const size_t pos,
> - const int* starting_dist_cache,
> - const ZopfliNode* nodes,
> - int* dist_cache) {
> - int idx = 0;
> - size_t p = nodes[pos].u.shortcut;
> - while (idx < 4 && p > 0) {
> - const size_t ilen = nodes[p].dcode_insert_length & 0x7FFFFFF;
> - const size_t clen = ZopfliNodeCopyLength(&nodes[p]);
> - const size_t dist = ZopfliNodeCopyDistance(&nodes[p]);
> - dist_cache[idx++] = (int)dist;
> - /* Because of prerequisite, p >= clen + ilen >= 2. */
> - p = nodes[p - clen - ilen].u.shortcut;
> - }
> - for (; idx < 4; ++idx) {
> - dist_cache[idx] = *starting_dist_cache++;
> - }
> -}
> -
> -/* Maintains "ZopfliNode array invariant" and pushes node to the queue, if
> it
> - is eligible. */
> -static void EvaluateNode(
> - const size_t block_start, const size_t pos, const size_t
> max_backward_limit,
> - const size_t gap, const int* starting_dist_cache,
> - const ZopfliCostModel* model, StartPosQueue* queue, ZopfliNode*
> nodes) {
> - /* Save cost, because ComputeDistanceCache invalidates it. */
> - float node_cost = nodes[pos].u.cost;
> - nodes[pos].u.shortcut = ComputeDistanceShortcut(
> - block_start, pos, max_backward_limit, gap, nodes);
> - if (node_cost <= ZopfliCostModelGetLiteralCosts(model, 0, pos)) {
> - PosData posdata;
> - posdata.pos = pos;
> - posdata.cost = node_cost;
> - posdata.costdiff = node_cost -
> - ZopfliCostModelGetLiteralCosts(model, 0, pos);
> - ComputeDistanceCache(
> - pos, starting_dist_cache, nodes, posdata.distance_cache);
> - StartPosQueuePush(queue, &posdata);
> - }
> -}
> -
> -/* Returns longest copy length. */
> -static size_t UpdateNodes(
> - const size_t num_bytes, const size_t block_start, const size_t pos,
> - const uint8_t* ringbuffer, const size_t ringbuffer_mask,
> - const BrotliEncoderParams* params, const size_t max_backward_limit,
> - const int* starting_dist_cache, const size_t num_matches,
> - const BackwardMatch* matches, const ZopfliCostModel* model,
> - StartPosQueue* queue, ZopfliNode* nodes) {
> - const size_t cur_ix = block_start + pos;
> - const size_t cur_ix_masked = cur_ix & ringbuffer_mask;
> - const size_t max_distance = BROTLI_MIN(size_t, cur_ix,
> max_backward_limit);
> - const size_t max_len = num_bytes - pos;
> - const size_t max_zopfli_len = MaxZopfliLen(params);
> - const size_t max_iters = MaxZopfliCandidates(params);
> - size_t min_len;
> - size_t result = 0;
> - size_t k;
> - size_t gap = 0;
> -
> - EvaluateNode(block_start, pos, max_backward_limit, gap,
> starting_dist_cache,
> - model, queue, nodes);
> -
> - {
> - const PosData* posdata = StartPosQueueAt(queue, 0);
> - float min_cost = (posdata->cost +
> ZopfliCostModelGetMinCostCmd(model) +
> - ZopfliCostModelGetLiteralCosts(model, posdata->pos, pos));
> - min_len = ComputeMinimumCopyLength(min_cost, nodes, num_bytes,
> pos);
> - }
> -
> - /* Go over the command starting positions in order of increasing cost
> - difference. */
> - for (k = 0; k < max_iters && k < StartPosQueueSize(queue); ++k) {
> - const PosData* posdata = StartPosQueueAt(queue, k);
> - const size_t start = posdata->pos;
> - const uint16_t inscode = GetInsertLengthCode(pos - start);
> - const float start_costdiff = posdata->costdiff;
> - const float base_cost = start_costdiff + (float)GetInsertExtra(inscode) +
> - ZopfliCostModelGetLiteralCosts(model, 0, pos);
> -
> - /* Look for last distance matches using the distance cache from this
> - starting position. */
> - size_t best_len = min_len - 1;
> - size_t j = 0;
> - for (; j < BROTLI_NUM_DISTANCE_SHORT_CODES && best_len < max_len;
> ++j) {
> - const size_t idx = kDistanceCacheIndex[j];
> - const size_t backward =
> - (size_t)(posdata->distance_cache[idx] + kDistanceCacheOffset[j]);
> - size_t prev_ix = cur_ix - backward;
> - size_t len = 0;
> - uint8_t continuation = ringbuffer[cur_ix_masked + best_len];
> - if (cur_ix_masked + best_len > ringbuffer_mask) {
> - break;
> - }
> - if (BROTLI_PREDICT_FALSE(backward > max_distance + gap)) {
> - continue;
> - }
> - if (backward <= max_distance) {
> - if (prev_ix >= cur_ix) {
> - continue;
> - }
> -
> - prev_ix &= ringbuffer_mask;
> - if (prev_ix + best_len > ringbuffer_mask ||
> - continuation != ringbuffer[prev_ix + best_len]) {
> - continue;
> - }
> - len = FindMatchLengthWithLimit(&ringbuffer[prev_ix],
> - &ringbuffer[cur_ix_masked],
> - max_len);
> - } else {
> - continue;
> - }
> - {
> - const float dist_cost = base_cost +
> - ZopfliCostModelGetDistanceCost(model, j);
> - size_t l;
> - for (l = best_len + 1; l <= len; ++l) {
> - const uint16_t copycode = GetCopyLengthCode(l);
> - const uint16_t cmdcode =
> - CombineLengthCodes(inscode, copycode, j == 0);
> - const float cost = (cmdcode < 128 ? base_cost : dist_cost) +
> - (float)GetCopyExtra(copycode) +
> - ZopfliCostModelGetCommandCost(model, cmdcode);
> - if (cost < nodes[pos + l].u.cost) {
> - UpdateZopfliNode(nodes, pos, start, l, l, backward, j + 1, cost);
> - result = BROTLI_MAX(size_t, result, l);
> - }
> - best_len = l;
> - }
> - }
> - }
> -
> - /* At higher iterations look only for new last distance matches, since
> - looking only for new command start positions with the same distances
> - does not help much. */
> - if (k >= 2) continue;
> -
> - {
> - /* Loop through all possible copy lengths at this position. */
> - size_t len = min_len;
> - for (j = 0; j < num_matches; ++j) {
> - BackwardMatch match = matches[j];
> - size_t dist = match.distance;
> - BROTLI_BOOL is_dictionary_match =
> - TO_BROTLI_BOOL(dist > max_distance + gap);
> - /* We already tried all possible last distance matches, so we can use
> - normal distance code here. */
> - size_t dist_code = dist + BROTLI_NUM_DISTANCE_SHORT_CODES - 1;
> - uint16_t dist_symbol;
> - uint32_t distextra;
> - uint32_t distnumextra;
> - float dist_cost;
> - size_t max_match_len;
> - PrefixEncodeCopyDistance(
> - dist_code, params->dist.num_direct_distance_codes,
> - params->dist.distance_postfix_bits, &dist_symbol, &distextra);
> - distnumextra = dist_symbol >> 10;
> - dist_cost = base_cost + (float)distnumextra +
> - ZopfliCostModelGetDistanceCost(model, dist_symbol & 0x3FF);
> -
> - /* Try all copy lengths up until the maximum copy length corresponding
> - to this distance. If the distance refers to the static dictionary, or
> - the maximum length is long enough, try only one maximum length. */
> - max_match_len = BackwardMatchLength(&match);
> - if (len < max_match_len &&
> - (is_dictionary_match || max_match_len > max_zopfli_len)) {
> - len = max_match_len;
> - }
> - for (; len <= max_match_len; ++len) {
> - const size_t len_code =
> - is_dictionary_match ? BackwardMatchLengthCode(&match) : len;
> - const uint16_t copycode = GetCopyLengthCode(len_code);
> - const uint16_t cmdcode = CombineLengthCodes(inscode, copycode, 0);
> - const float cost = dist_cost + (float)GetCopyExtra(copycode) +
> - ZopfliCostModelGetCommandCost(model, cmdcode);
> - if (cost < nodes[pos + len].u.cost) {
> - UpdateZopfliNode(nodes, pos, start, len, len_code, dist, 0, cost);
> - result = BROTLI_MAX(size_t, result, len);
> - }
> - }
> - }
> - }
> - }
> - return result;
> -}
> -
> -static size_t ComputeShortestPathFromNodes(size_t num_bytes,
> - ZopfliNode* nodes) {
> - size_t index = num_bytes;
> - size_t num_commands = 0;
> - while ((nodes[index].dcode_insert_length & 0x7FFFFFF) == 0 &&
> - nodes[index].length == 1) --index;
> - nodes[index].u.next = BROTLI_UINT32_MAX;
> - while (index != 0) {
> - size_t len = ZopfliNodeCommandLength(&nodes[index]);
> - index -= len;
> - nodes[index].u.next = (uint32_t)len;
> - num_commands++;
> - }
> - return num_commands;
> -}
> -
> -/* REQUIRES: nodes != NULL and len(nodes) >= num_bytes + 1 */
> -void BrotliZopfliCreateCommands(const size_t num_bytes,
> - const size_t block_start,
> - const size_t max_backward_limit,
> - const ZopfliNode* nodes,
> - int* dist_cache,
> - size_t* last_insert_len,
> - const BrotliEncoderParams* params,
> - Command* commands,
> - size_t* num_literals) {
> - size_t pos = 0;
> - uint32_t offset = nodes[0].u.next;
> - size_t i;
> - size_t gap = 0;
> - for (i = 0; offset != BROTLI_UINT32_MAX; i++) {
> - const ZopfliNode* next = &nodes[pos + offset];
> - size_t copy_length = ZopfliNodeCopyLength(next);
> - size_t insert_length = next->dcode_insert_length & 0x7FFFFFF;
> - pos += insert_length;
> - offset = next->u.next;
> - if (i == 0) {
> - insert_length += *last_insert_len;
> - *last_insert_len = 0;
> - }
> - {
> - size_t distance = ZopfliNodeCopyDistance(next);
> - size_t len_code = ZopfliNodeLengthCode(next);
> - size_t max_distance =
> - BROTLI_MIN(size_t, block_start + pos, max_backward_limit);
> - BROTLI_BOOL is_dictionary = TO_BROTLI_BOOL(distance > max_distance
> + gap);
> - size_t dist_code = ZopfliNodeDistanceCode(next);
> - InitCommand(&commands[i], ¶ms->dist, insert_length,
> - copy_length, (int)len_code - (int)copy_length, dist_code);
> -
> - if (!is_dictionary && dist_code > 0) {
> - dist_cache[3] = dist_cache[2];
> - dist_cache[2] = dist_cache[1];
> - dist_cache[1] = dist_cache[0];
> - dist_cache[0] = (int)distance;
> - }
> - }
> -
> - *num_literals += insert_length;
> - pos += copy_length;
> - }
> - *last_insert_len += num_bytes - pos;
> -}
> -
> -static size_t ZopfliIterate(size_t num_bytes,
> - size_t position,
> - const uint8_t* ringbuffer,
> - size_t ringbuffer_mask,
> - const BrotliEncoderParams* params,
> - const size_t max_backward_limit,
> - const size_t gap,
> - const int* dist_cache,
> - const ZopfliCostModel* model,
> - const uint32_t* num_matches,
> - const BackwardMatch* matches,
> - ZopfliNode* nodes) {
> - const size_t max_zopfli_len = MaxZopfliLen(params);
> - StartPosQueue queue;
> - size_t cur_match_pos = 0;
> - size_t i;
> - nodes[0].length = 0;
> - nodes[0].u.cost = 0;
> - InitStartPosQueue(&queue);
> - for (i = 0; i + 3 < num_bytes; i++) {
> - size_t skip = UpdateNodes(num_bytes, position, i, ringbuffer,
> - ringbuffer_mask, params, max_backward_limit, dist_cache,
> - num_matches[i], &matches[cur_match_pos], model, &queue, nodes);
> - if (skip < BROTLI_LONG_COPY_QUICK_STEP) skip = 0;
> - cur_match_pos += num_matches[i];
> - if (num_matches[i] == 1 &&
> - BackwardMatchLength(&matches[cur_match_pos - 1]) >
> max_zopfli_len) {
> - skip = BROTLI_MAX(size_t,
> - BackwardMatchLength(&matches[cur_match_pos - 1]), skip);
> - }
> - if (skip > 1) {
> - skip--;
> - while (skip) {
> - i++;
> - if (i + 3 >= num_bytes) break;
> - EvaluateNode(position, i, max_backward_limit, gap, dist_cache, model,
> - &queue, nodes);
> - cur_match_pos += num_matches[i];
> - skip--;
> - }
> - }
> - }
> - return ComputeShortestPathFromNodes(num_bytes, nodes);
> -}
> -
> -/* REQUIRES: nodes != NULL and len(nodes) >= num_bytes + 1 */
> -size_t BrotliZopfliComputeShortestPath(MemoryManager* m,
> - size_t num_bytes, size_t position, const uint8_t* ringbuffer,
> - size_t ringbuffer_mask, const BrotliEncoderParams* params,
> - const size_t max_backward_limit, const int* dist_cache, HasherHandle
> hasher,
> - ZopfliNode* nodes) {
> - const size_t max_zopfli_len = MaxZopfliLen(params);
> - ZopfliCostModel model;
> - StartPosQueue queue;
> - BackwardMatch matches[2 * (MAX_NUM_MATCHES_H10 + 64)];
> - const size_t store_end = num_bytes >= StoreLookaheadH10() ?
> - position + num_bytes - StoreLookaheadH10() + 1 : position;
> - size_t i;
> - size_t gap = 0;
> - size_t lz_matches_offset = 0;
> - nodes[0].length = 0;
> - nodes[0].u.cost = 0;
> - InitZopfliCostModel(m, &model, ¶ms->dist, num_bytes);
> - if (BROTLI_IS_OOM(m)) return 0;
> - ZopfliCostModelSetFromLiteralCosts(
> - &model, position, ringbuffer, ringbuffer_mask);
> - InitStartPosQueue(&queue);
> - for (i = 0; i + HashTypeLengthH10() - 1 < num_bytes; i++) {
> - const size_t pos = position + i;
> - const size_t max_distance = BROTLI_MIN(size_t, pos,
> max_backward_limit);
> - size_t skip;
> - size_t num_matches = FindAllMatchesH10(hasher, ¶ms->dictionary,
> - ringbuffer, ringbuffer_mask, pos, num_bytes - i, max_distance, gap,
> - params, &matches[lz_matches_offset]);
> - if (num_matches > 0 &&
> - BackwardMatchLength(&matches[num_matches - 1]) > max_zopfli_len)
> {
> - matches[0] = matches[num_matches - 1];
> - num_matches = 1;
> - }
> - skip = UpdateNodes(num_bytes, position, i, ringbuffer, ringbuffer_mask,
> - params, max_backward_limit, dist_cache, num_matches, matches,
> &model,
> - &queue, nodes);
> - if (skip < BROTLI_LONG_COPY_QUICK_STEP) skip = 0;
> - if (num_matches == 1 && BackwardMatchLength(&matches[0]) >
> max_zopfli_len) {
> - skip = BROTLI_MAX(size_t, BackwardMatchLength(&matches[0]), skip);
> - }
> - if (skip > 1) {
> - /* Add the tail of the copy to the hasher. */
> - StoreRangeH10(hasher, ringbuffer, ringbuffer_mask, pos + 1,
> BROTLI_MIN(
> - size_t, pos + skip, store_end));
> - skip--;
> - while (skip) {
> - i++;
> - if (i + HashTypeLengthH10() - 1 >= num_bytes) break;
> - EvaluateNode(position, i, max_backward_limit, gap, dist_cache, &model,
> - &queue, nodes);
> - skip--;
> - }
> - }
> - }
> - CleanupZopfliCostModel(m, &model);
> - return ComputeShortestPathFromNodes(num_bytes, nodes);
> -}
> -
> -void BrotliCreateZopfliBackwardReferences(MemoryManager* m,
> - size_t num_bytes, size_t position, const uint8_t* ringbuffer,
> - size_t ringbuffer_mask, const BrotliEncoderParams* params,
> - HasherHandle hasher, int* dist_cache, size_t* last_insert_len,
> - Command* commands, size_t* num_commands, size_t* num_literals) {
> - const size_t max_backward_limit =
> BROTLI_MAX_BACKWARD_LIMIT(params->lgwin);
> - ZopfliNode* nodes;
> - nodes = BROTLI_ALLOC(m, ZopfliNode, num_bytes + 1);
> - if (BROTLI_IS_OOM(m)) return;
> - BrotliInitZopfliNodes(nodes, num_bytes + 1);
> - *num_commands += BrotliZopfliComputeShortestPath(m,
> - num_bytes, position, ringbuffer, ringbuffer_mask,
> - params, max_backward_limit, dist_cache, hasher, nodes);
> - if (BROTLI_IS_OOM(m)) return;
> - BrotliZopfliCreateCommands(num_bytes, position, max_backward_limit,
> nodes,
> - dist_cache, last_insert_len, params, commands, num_literals);
> - BROTLI_FREE(m, nodes);
> -}
> -
> -void BrotliCreateHqZopfliBackwardReferences(MemoryManager* m,
> - size_t num_bytes, size_t position, const uint8_t* ringbuffer,
> - size_t ringbuffer_mask, const BrotliEncoderParams* params,
> - HasherHandle hasher, int* dist_cache, size_t* last_insert_len,
> - Command* commands, size_t* num_commands, size_t* num_literals) {
> - const size_t max_backward_limit =
> BROTLI_MAX_BACKWARD_LIMIT(params->lgwin);
> - uint32_t* num_matches = BROTLI_ALLOC(m, uint32_t, num_bytes);
> - size_t matches_size = 4 * num_bytes;
> - const size_t store_end = num_bytes >= StoreLookaheadH10() ?
> - position + num_bytes - StoreLookaheadH10() + 1 : position;
> - size_t cur_match_pos = 0;
> - size_t i;
> - size_t orig_num_literals;
> - size_t orig_last_insert_len;
> - int orig_dist_cache[4];
> - size_t orig_num_commands;
> - ZopfliCostModel model;
> - ZopfliNode* nodes;
> - BackwardMatch* matches = BROTLI_ALLOC(m, BackwardMatch,
> matches_size);
> - size_t gap = 0;
> - size_t shadow_matches = 0;
> - if (BROTLI_IS_OOM(m)) return;
> - for (i = 0; i + HashTypeLengthH10() - 1 < num_bytes; ++i) {
> - const size_t pos = position + i;
> - size_t max_distance = BROTLI_MIN(size_t, pos, max_backward_limit);
> - size_t max_length = num_bytes - i;
> - size_t num_found_matches;
> - size_t cur_match_end;
> - size_t j;
> - /* Ensure that we have enough free slots. */
> - BROTLI_ENSURE_CAPACITY(m, BackwardMatch, matches, matches_size,
> - cur_match_pos + MAX_NUM_MATCHES_H10 + shadow_matches);
> - if (BROTLI_IS_OOM(m)) return;
> - num_found_matches = FindAllMatchesH10(hasher,
> - ¶ms->dictionary, ringbuffer, ringbuffer_mask, pos, max_length,
> - max_distance, gap, params, &matches[cur_match_pos +
> shadow_matches]);
> - cur_match_end = cur_match_pos + num_found_matches;
> - for (j = cur_match_pos; j + 1 < cur_match_end; ++j) {
> - BROTLI_DCHECK(BackwardMatchLength(&matches[j]) <=
> - BackwardMatchLength(&matches[j + 1]));
> - }
> - num_matches[i] = (uint32_t)num_found_matches;
> - if (num_found_matches > 0) {
> - const size_t match_len =
> BackwardMatchLength(&matches[cur_match_end - 1]);
> - if (match_len > MAX_ZOPFLI_LEN_QUALITY_11) {
> - const size_t skip = match_len - 1;
> - matches[cur_match_pos++] = matches[cur_match_end - 1];
> - num_matches[i] = 1;
> - /* Add the tail of the copy to the hasher. */
> - StoreRangeH10(hasher, ringbuffer, ringbuffer_mask, pos + 1,
> - BROTLI_MIN(size_t, pos + match_len, store_end));
> - memset(&num_matches[i + 1], 0, skip * sizeof(num_matches[0]));
> - i += skip;
> - } else {
> - cur_match_pos = cur_match_end;
> - }
> - }
> - }
> - orig_num_literals = *num_literals;
> - orig_last_insert_len = *last_insert_len;
> - memcpy(orig_dist_cache, dist_cache, 4 * sizeof(dist_cache[0]));
> - orig_num_commands = *num_commands;
> - nodes = BROTLI_ALLOC(m, ZopfliNode, num_bytes + 1);
> - if (BROTLI_IS_OOM(m)) return;
> - InitZopfliCostModel(m, &model, ¶ms->dist, num_bytes);
> - if (BROTLI_IS_OOM(m)) return;
> - for (i = 0; i < 2; i++) {
> - BrotliInitZopfliNodes(nodes, num_bytes + 1);
> - if (i == 0) {
> - ZopfliCostModelSetFromLiteralCosts(
> - &model, position, ringbuffer, ringbuffer_mask);
> - } else {
> - ZopfliCostModelSetFromCommands(&model, position, ringbuffer,
> - ringbuffer_mask, commands, *num_commands -
> orig_num_commands,
> - orig_last_insert_len);
> - }
> - *num_commands = orig_num_commands;
> - *num_literals = orig_num_literals;
> - *last_insert_len = orig_last_insert_len;
> - memcpy(dist_cache, orig_dist_cache, 4 * sizeof(dist_cache[0]));
> - *num_commands += ZopfliIterate(num_bytes, position, ringbuffer,
> - ringbuffer_mask, params, max_backward_limit, gap, dist_cache,
> - &model, num_matches, matches, nodes);
> - BrotliZopfliCreateCommands(num_bytes, position, max_backward_limit,
> - nodes, dist_cache, last_insert_len, params, commands, num_literals);
> - }
> - CleanupZopfliCostModel(m, &model);
> - BROTLI_FREE(m, nodes);
> - BROTLI_FREE(m, matches);
> - BROTLI_FREE(m, num_matches);
> -}
> -
> -#if defined(__cplusplus) || defined(c_plusplus)
> -} /* extern "C" */
> -#endif
> diff --git a/BaseTools/Source/C/BrotliCompress/enc/bit_cost.c
> b/BaseTools/Source/C/BrotliCompress/enc/bit_cost.c
> deleted file mode 100644
> index c8ee842ce3b3..000000000000
> --- a/BaseTools/Source/C/BrotliCompress/enc/bit_cost.c
> +++ /dev/null
> @@ -1,35 +0,0 @@
> -/* Copyright 2013 Google Inc. All Rights Reserved.
> -
> - Distributed under MIT license.
> - See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
> -*/
> -
> -/* Functions to estimate the bit cost of Huffman trees. */
> -
> -#include "./bit_cost.h"
> -
> -#include "../common/constants.h"
> -#include "../common/platform.h"
> -#include <brotli/types.h>
> -#include "./fast_log.h"
> -#include "./histogram.h"
> -
> -#if defined(__cplusplus) || defined(c_plusplus)
> -extern "C" {
> -#endif
> -
> -#define FN(X) X ## Literal
> -#include "./bit_cost_inc.h" /* NOLINT(build/include) */
> -#undef FN
> -
> -#define FN(X) X ## Command
> -#include "./bit_cost_inc.h" /* NOLINT(build/include) */
> -#undef FN
> -
> -#define FN(X) X ## Distance
> -#include "./bit_cost_inc.h" /* NOLINT(build/include) */
> -#undef FN
> -
> -#if defined(__cplusplus) || defined(c_plusplus)
> -} /* extern "C" */
> -#endif
> diff --git a/BaseTools/Source/C/BrotliCompress/enc/block_splitter.c
> b/BaseTools/Source/C/BrotliCompress/enc/block_splitter.c
> deleted file mode 100644
> index 344a629c7dce..000000000000
> --- a/BaseTools/Source/C/BrotliCompress/enc/block_splitter.c
> +++ /dev/null
> @@ -1,194 +0,0 @@
> -/* Copyright 2013 Google Inc. All Rights Reserved.
> -
> - Distributed under MIT license.
> - See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
> -*/
> -
> -/* Block split point selection utilities. */
> -
> -#include "./block_splitter.h"
> -
> -#include <string.h> /* memcpy, memset */
> -
> -#include "../common/platform.h"
> -#include "./bit_cost.h"
> -#include "./cluster.h"
> -#include "./command.h"
> -#include "./fast_log.h"
> -#include "./histogram.h"
> -#include "./memory.h"
> -#include "./quality.h"
> -
> -#if defined(__cplusplus) || defined(c_plusplus)
> -extern "C" {
> -#endif
> -
> -static const size_t kMaxLiteralHistograms = 100;
> -static const size_t kMaxCommandHistograms = 50;
> -static const double kLiteralBlockSwitchCost = 28.1;
> -static const double kCommandBlockSwitchCost = 13.5;
> -static const double kDistanceBlockSwitchCost = 14.6;
> -static const size_t kLiteralStrideLength = 70;
> -static const size_t kCommandStrideLength = 40;
> -static const size_t kSymbolsPerLiteralHistogram = 544;
> -static const size_t kSymbolsPerCommandHistogram = 530;
> -static const size_t kSymbolsPerDistanceHistogram = 544;
> -static const size_t kMinLengthForBlockSplitting = 128;
> -static const size_t kIterMulForRefining = 2;
> -static const size_t kMinItersForRefining = 100;
> -
> -static size_t CountLiterals(const Command* cmds, const size_t
> num_commands) {
> - /* Count how many we have. */
> - size_t total_length = 0;
> - size_t i;
> - for (i = 0; i < num_commands; ++i) {
> - total_length += cmds[i].insert_len_;
> - }
> - return total_length;
> -}
> -
> -static void CopyLiteralsToByteArray(const Command* cmds,
> - const size_t num_commands,
> - const uint8_t* data,
> - const size_t offset,
> - const size_t mask,
> - uint8_t* literals) {
> - size_t pos = 0;
> - size_t from_pos = offset & mask;
> - size_t i;
> - for (i = 0; i < num_commands; ++i) {
> - size_t insert_len = cmds[i].insert_len_;
> - if (from_pos + insert_len > mask) {
> - size_t head_size = mask + 1 - from_pos;
> - memcpy(literals + pos, data + from_pos, head_size);
> - from_pos = 0;
> - pos += head_size;
> - insert_len -= head_size;
> - }
> - if (insert_len > 0) {
> - memcpy(literals + pos, data + from_pos, insert_len);
> - pos += insert_len;
> - }
> - from_pos = (from_pos + insert_len + CommandCopyLen(&cmds[i])) &
> mask;
> - }
> -}
> -
> -static BROTLI_INLINE uint32_t MyRand(uint32_t* seed) {
> - /* Initial seed should be 7. In this case, loop length is (1 << 29). */
> - *seed *= 16807U;
> - return *seed;
> -}
> -
> -static BROTLI_INLINE double BitCost(size_t count) {
> - return count == 0 ? -2.0 : FastLog2(count);
> -}
> -
> -#define HISTOGRAMS_PER_BATCH 64
> -#define CLUSTERS_PER_BATCH 16
> -
> -#define FN(X) X ## Literal
> -#define DataType uint8_t
> -/* NOLINTNEXTLINE(build/include) */
> -#include "./block_splitter_inc.h"
> -#undef DataType
> -#undef FN
> -
> -#define FN(X) X ## Command
> -#define DataType uint16_t
> -/* NOLINTNEXTLINE(build/include) */
> -#include "./block_splitter_inc.h"
> -#undef FN
> -
> -#define FN(X) X ## Distance
> -/* NOLINTNEXTLINE(build/include) */
> -#include "./block_splitter_inc.h"
> -#undef DataType
> -#undef FN
> -
> -void BrotliInitBlockSplit(BlockSplit* self) {
> - self->num_types = 0;
> - self->num_blocks = 0;
> - self->types = 0;
> - self->lengths = 0;
> - self->types_alloc_size = 0;
> - self->lengths_alloc_size = 0;
> -}
> -
> -void BrotliDestroyBlockSplit(MemoryManager* m, BlockSplit* self) {
> - BROTLI_FREE(m, self->types);
> - BROTLI_FREE(m, self->lengths);
> -}
> -
> -void BrotliSplitBlock(MemoryManager* m,
> - const Command* cmds,
> - const size_t num_commands,
> - const uint8_t* data,
> - const size_t pos,
> - const size_t mask,
> - const BrotliEncoderParams* params,
> - BlockSplit* literal_split,
> - BlockSplit* insert_and_copy_split,
> - BlockSplit* dist_split) {
> - {
> - size_t literals_count = CountLiterals(cmds, num_commands);
> - uint8_t* literals = BROTLI_ALLOC(m, uint8_t, literals_count);
> - if (BROTLI_IS_OOM(m)) return;
> - /* Create a continuous array of literals. */
> - CopyLiteralsToByteArray(cmds, num_commands, data, pos, mask, literals);
> - /* Create the block split on the array of literals.
> - Literal histograms have alphabet size 256. */
> - SplitByteVectorLiteral(
> - m, literals, literals_count,
> - kSymbolsPerLiteralHistogram, kMaxLiteralHistograms,
> - kLiteralStrideLength, kLiteralBlockSwitchCost, params,
> - literal_split);
> - if (BROTLI_IS_OOM(m)) return;
> - BROTLI_FREE(m, literals);
> - }
> -
> - {
> - /* Compute prefix codes for commands. */
> - uint16_t* insert_and_copy_codes = BROTLI_ALLOC(m, uint16_t,
> num_commands);
> - size_t i;
> - if (BROTLI_IS_OOM(m)) return;
> - for (i = 0; i < num_commands; ++i) {
> - insert_and_copy_codes[i] = cmds[i].cmd_prefix_;
> - }
> - /* Create the block split on the array of command prefixes. */
> - SplitByteVectorCommand(
> - m, insert_and_copy_codes, num_commands,
> - kSymbolsPerCommandHistogram, kMaxCommandHistograms,
> - kCommandStrideLength, kCommandBlockSwitchCost, params,
> - insert_and_copy_split);
> - if (BROTLI_IS_OOM(m)) return;
> - /* TODO: reuse for distances? */
> - BROTLI_FREE(m, insert_and_copy_codes);
> - }
> -
> - {
> - /* Create a continuous array of distance prefixes. */
> - uint16_t* distance_prefixes = BROTLI_ALLOC(m, uint16_t,
> num_commands);
> - size_t j = 0;
> - size_t i;
> - if (BROTLI_IS_OOM(m)) return;
> - for (i = 0; i < num_commands; ++i) {
> - const Command* cmd = &cmds[i];
> - if (CommandCopyLen(cmd) && cmd->cmd_prefix_ >= 128) {
> - distance_prefixes[j++] = cmd->dist_prefix_ & 0x3FF;
> - }
> - }
> - /* Create the block split on the array of distance prefixes. */
> - SplitByteVectorDistance(
> - m, distance_prefixes, j,
> - kSymbolsPerDistanceHistogram, kMaxCommandHistograms,
> - kCommandStrideLength, kDistanceBlockSwitchCost, params,
> - dist_split);
> - if (BROTLI_IS_OOM(m)) return;
> - BROTLI_FREE(m, distance_prefixes);
> - }
> -}
> -
> -
> -#if defined(__cplusplus) || defined(c_plusplus)
> -} /* extern "C" */
> -#endif
> diff --git a/BaseTools/Source/C/BrotliCompress/enc/brotli_bit_stream.c
> b/BaseTools/Source/C/BrotliCompress/enc/brotli_bit_stream.c
> deleted file mode 100644
> index 50b10eda851b..000000000000
> --- a/BaseTools/Source/C/BrotliCompress/enc/brotli_bit_stream.c
> +++ /dev/null
> @@ -1,1331 +0,0 @@
> -/* Copyright 2014 Google Inc. All Rights Reserved.
> -
> - Distributed under MIT license.
> - See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
> -*/
> -
> -/* Brotli bit stream functions to support the low level format. There are no
> - compression algorithms here, just the right ordering of bits to match the
> - specs. */
> -
> -#include "./brotli_bit_stream.h"
> -
> -#include <string.h> /* memcpy, memset */
> -
> -#include "../common/constants.h"
> -#include "../common/context.h"
> -#include "../common/platform.h"
> -#include <brotli/types.h>
> -#include "./entropy_encode.h"
> -#include "./entropy_encode_static.h"
> -#include "./fast_log.h"
> -#include "./histogram.h"
> -#include "./memory.h"
> -#include "./write_bits.h"
> -
> -#if defined(__cplusplus) || defined(c_plusplus)
> -extern "C" {
> -#endif
> -
> -#define MAX_HUFFMAN_TREE_SIZE (2 *
> BROTLI_NUM_COMMAND_SYMBOLS + 1)
> -/* The maximum size of Huffman dictionary for distances assuming that
> - NPOSTFIX = 0 and NDIRECT = 0. */
> -#define MAX_SIMPLE_DISTANCE_ALPHABET_SIZE \
> - BROTLI_DISTANCE_ALPHABET_SIZE(0, 0,
> BROTLI_LARGE_MAX_DISTANCE_BITS)
> -/* MAX_SIMPLE_DISTANCE_ALPHABET_SIZE == 140 */
> -
> -/* Represents the range of values belonging to a prefix code:
> - [offset, offset + 2^nbits) */
> -typedef struct PrefixCodeRange {
> - uint32_t offset;
> - uint32_t nbits;
> -} PrefixCodeRange;
> -
> -static const PrefixCodeRange
> - kBlockLengthPrefixCode[BROTLI_NUM_BLOCK_LEN_SYMBOLS] = {
> - { 1, 2}, { 5, 2}, { 9, 2}, {13, 2}, {17, 3}, { 25, 3}, { 33, 3},
> - {41, 3}, {49, 4}, {65, 4}, {81, 4}, {97, 4}, {113, 5}, {145, 5},
> - {177, 5}, { 209, 5}, { 241, 6}, { 305, 6}, { 369, 7}, { 497, 8},
> - {753, 9}, {1265, 10}, {2289, 11}, {4337, 12}, {8433, 13}, {16625, 24}
> -};
> -
> -static BROTLI_INLINE uint32_t BlockLengthPrefixCode(uint32_t len) {
> - uint32_t code = (len >= 177) ? (len >= 753 ? 20 : 14) : (len >= 41 ? 7 : 0);
> - while (code < (BROTLI_NUM_BLOCK_LEN_SYMBOLS - 1) &&
> - len >= kBlockLengthPrefixCode[code + 1].offset) ++code;
> - return code;
> -}
> -
> -static BROTLI_INLINE void GetBlockLengthPrefixCode(uint32_t len, size_t*
> code,
> - uint32_t* n_extra, uint32_t* extra) {
> - *code = BlockLengthPrefixCode(len);
> - *n_extra = kBlockLengthPrefixCode[*code].nbits;
> - *extra = len - kBlockLengthPrefixCode[*code].offset;
> -}
> -
> -typedef struct BlockTypeCodeCalculator {
> - size_t last_type;
> - size_t second_last_type;
> -} BlockTypeCodeCalculator;
> -
> -static void InitBlockTypeCodeCalculator(BlockTypeCodeCalculator* self) {
> - self->last_type = 1;
> - self->second_last_type = 0;
> -}
> -
> -static BROTLI_INLINE size_t NextBlockTypeCode(
> - BlockTypeCodeCalculator* calculator, uint8_t type) {
> - size_t type_code = (type == calculator->last_type + 1) ? 1u :
> - (type == calculator->second_last_type) ? 0u : type + 2u;
> - calculator->second_last_type = calculator->last_type;
> - calculator->last_type = type;
> - return type_code;
> -}
> -
> -/* |nibblesbits| represents the 2 bits to encode MNIBBLES (0-3)
> - REQUIRES: length > 0
> - REQUIRES: length <= (1 << 24) */
> -static void BrotliEncodeMlen(size_t length, uint64_t* bits,
> - size_t* numbits, uint64_t* nibblesbits) {
> - size_t lg = (length == 1) ? 1 : Log2FloorNonZero((uint32_t)(length - 1)) + 1;
> - size_t mnibbles = (lg < 16 ? 16 : (lg + 3)) / 4;
> - BROTLI_DCHECK(length > 0);
> - BROTLI_DCHECK(length <= (1 << 24));
> - BROTLI_DCHECK(lg <= 24);
> - *nibblesbits = mnibbles - 4;
> - *numbits = mnibbles * 4;
> - *bits = length - 1;
> -}
> -
> -static BROTLI_INLINE void StoreCommandExtra(
> - const Command* cmd, size_t* storage_ix, uint8_t* storage) {
> - uint32_t copylen_code = CommandCopyLenCode(cmd);
> - uint16_t inscode = GetInsertLengthCode(cmd->insert_len_);
> - uint16_t copycode = GetCopyLengthCode(copylen_code);
> - uint32_t insnumextra = GetInsertExtra(inscode);
> - uint64_t insextraval = cmd->insert_len_ - GetInsertBase(inscode);
> - uint64_t copyextraval = copylen_code - GetCopyBase(copycode);
> - uint64_t bits = (copyextraval << insnumextra) | insextraval;
> - BrotliWriteBits(
> - insnumextra + GetCopyExtra(copycode), bits, storage_ix, storage);
> -}
> -
> -/* Data structure that stores almost everything that is needed to encode
> each
> - block switch command. */
> -typedef struct BlockSplitCode {
> - BlockTypeCodeCalculator type_code_calculator;
> - uint8_t type_depths[BROTLI_MAX_BLOCK_TYPE_SYMBOLS];
> - uint16_t type_bits[BROTLI_MAX_BLOCK_TYPE_SYMBOLS];
> - uint8_t length_depths[BROTLI_NUM_BLOCK_LEN_SYMBOLS];
> - uint16_t length_bits[BROTLI_NUM_BLOCK_LEN_SYMBOLS];
> -} BlockSplitCode;
> -
> -/* Stores a number between 0 and 255. */
> -static void StoreVarLenUint8(size_t n, size_t* storage_ix, uint8_t* storage) {
> - if (n == 0) {
> - BrotliWriteBits(1, 0, storage_ix, storage);
> - } else {
> - size_t nbits = Log2FloorNonZero(n);
> - BrotliWriteBits(1, 1, storage_ix, storage);
> - BrotliWriteBits(3, nbits, storage_ix, storage);
> - BrotliWriteBits(nbits, n - ((size_t)1 << nbits), storage_ix, storage);
> - }
> -}
> -
> -/* Stores the compressed meta-block header.
> - REQUIRES: length > 0
> - REQUIRES: length <= (1 << 24) */
> -static void StoreCompressedMetaBlockHeader(BROTLI_BOOL is_final_block,
> - size_t length,
> - size_t* storage_ix,
> - uint8_t* storage) {
> - uint64_t lenbits;
> - size_t nlenbits;
> - uint64_t nibblesbits;
> -
> - /* Write ISLAST bit. */
> - BrotliWriteBits(1, (uint64_t)is_final_block, storage_ix, storage);
> - /* Write ISEMPTY bit. */
> - if (is_final_block) {
> - BrotliWriteBits(1, 0, storage_ix, storage);
> - }
> -
> - BrotliEncodeMlen(length, &lenbits, &nlenbits, &nibblesbits);
> - BrotliWriteBits(2, nibblesbits, storage_ix, storage);
> - BrotliWriteBits(nlenbits, lenbits, storage_ix, storage);
> -
> - if (!is_final_block) {
> - /* Write ISUNCOMPRESSED bit. */
> - BrotliWriteBits(1, 0, storage_ix, storage);
> - }
> -}
> -
> -/* Stores the uncompressed meta-block header.
> - REQUIRES: length > 0
> - REQUIRES: length <= (1 << 24) */
> -static void BrotliStoreUncompressedMetaBlockHeader(size_t length,
> - size_t* storage_ix,
> - uint8_t* storage) {
> - uint64_t lenbits;
> - size_t nlenbits;
> - uint64_t nibblesbits;
> -
> - /* Write ISLAST bit.
> - Uncompressed block cannot be the last one, so set to 0. */
> - BrotliWriteBits(1, 0, storage_ix, storage);
> - BrotliEncodeMlen(length, &lenbits, &nlenbits, &nibblesbits);
> - BrotliWriteBits(2, nibblesbits, storage_ix, storage);
> - BrotliWriteBits(nlenbits, lenbits, storage_ix, storage);
> - /* Write ISUNCOMPRESSED bit. */
> - BrotliWriteBits(1, 1, storage_ix, storage);
> -}
> -
> -static void BrotliStoreHuffmanTreeOfHuffmanTreeToBitMask(
> - const int num_codes, const uint8_t* code_length_bitdepth,
> - size_t* storage_ix, uint8_t* storage) {
> - static const uint8_t kStorageOrder[BROTLI_CODE_LENGTH_CODES] = {
> - 1, 2, 3, 4, 0, 5, 17, 6, 16, 7, 8, 9, 10, 11, 12, 13, 14, 15
> - };
> - /* The bit lengths of the Huffman code over the code length alphabet
> - are compressed with the following static Huffman code:
> - Symbol Code
> - ------ ----
> - 0 00
> - 1 1110
> - 2 110
> - 3 01
> - 4 10
> - 5 1111 */
> - static const uint8_t kHuffmanBitLengthHuffmanCodeSymbols[6] = {
> - 0, 7, 3, 2, 1, 15
> - };
> - static const uint8_t kHuffmanBitLengthHuffmanCodeBitLengths[6] = {
> - 2, 4, 3, 2, 2, 4
> - };
> -
> - size_t skip_some = 0; /* skips none. */
> -
> - /* Throw away trailing zeros: */
> - size_t codes_to_store = BROTLI_CODE_LENGTH_CODES;
> - if (num_codes > 1) {
> - for (; codes_to_store > 0; --codes_to_store) {
> - if (code_length_bitdepth[kStorageOrder[codes_to_store - 1]] != 0) {
> - break;
> - }
> - }
> - }
> - if (code_length_bitdepth[kStorageOrder[0]] == 0 &&
> - code_length_bitdepth[kStorageOrder[1]] == 0) {
> - skip_some = 2; /* skips two. */
> - if (code_length_bitdepth[kStorageOrder[2]] == 0) {
> - skip_some = 3; /* skips three. */
> - }
> - }
> - BrotliWriteBits(2, skip_some, storage_ix, storage);
> - {
> - size_t i;
> - for (i = skip_some; i < codes_to_store; ++i) {
> - size_t l = code_length_bitdepth[kStorageOrder[i]];
> - BrotliWriteBits(kHuffmanBitLengthHuffmanCodeBitLengths[l],
> - kHuffmanBitLengthHuffmanCodeSymbols[l], storage_ix, storage);
> - }
> - }
> -}
> -
> -static void BrotliStoreHuffmanTreeToBitMask(
> - const size_t huffman_tree_size, const uint8_t* huffman_tree,
> - const uint8_t* huffman_tree_extra_bits, const uint8_t*
> code_length_bitdepth,
> - const uint16_t* code_length_bitdepth_symbols,
> - size_t* BROTLI_RESTRICT storage_ix, uint8_t* BROTLI_RESTRICT storage) {
> - size_t i;
> - for (i = 0; i < huffman_tree_size; ++i) {
> - size_t ix = huffman_tree[i];
> - BrotliWriteBits(code_length_bitdepth[ix],
> code_length_bitdepth_symbols[ix],
> - storage_ix, storage);
> - /* Extra bits */
> - switch (ix) {
> - case BROTLI_REPEAT_PREVIOUS_CODE_LENGTH:
> - BrotliWriteBits(2, huffman_tree_extra_bits[i], storage_ix, storage);
> - break;
> - case BROTLI_REPEAT_ZERO_CODE_LENGTH:
> - BrotliWriteBits(3, huffman_tree_extra_bits[i], storage_ix, storage);
> - break;
> - }
> - }
> -}
> -
> -static void StoreSimpleHuffmanTree(const uint8_t* depths,
> - size_t symbols[4],
> - size_t num_symbols,
> - size_t max_bits,
> - size_t* storage_ix, uint8_t* storage) {
> - /* value of 1 indicates a simple Huffman code */
> - BrotliWriteBits(2, 1, storage_ix, storage);
> - BrotliWriteBits(2, num_symbols - 1, storage_ix, storage); /* NSYM - 1 */
> -
> - {
> - /* Sort */
> - size_t i;
> - for (i = 0; i < num_symbols; i++) {
> - size_t j;
> - for (j = i + 1; j < num_symbols; j++) {
> - if (depths[symbols[j]] < depths[symbols[i]]) {
> - BROTLI_SWAP(size_t, symbols, j, i);
> - }
> - }
> - }
> - }
> -
> - if (num_symbols == 2) {
> - BrotliWriteBits(max_bits, symbols[0], storage_ix, storage);
> - BrotliWriteBits(max_bits, symbols[1], storage_ix, storage);
> - } else if (num_symbols == 3) {
> - BrotliWriteBits(max_bits, symbols[0], storage_ix, storage);
> - BrotliWriteBits(max_bits, symbols[1], storage_ix, storage);
> - BrotliWriteBits(max_bits, symbols[2], storage_ix, storage);
> - } else {
> - BrotliWriteBits(max_bits, symbols[0], storage_ix, storage);
> - BrotliWriteBits(max_bits, symbols[1], storage_ix, storage);
> - BrotliWriteBits(max_bits, symbols[2], storage_ix, storage);
> - BrotliWriteBits(max_bits, symbols[3], storage_ix, storage);
> - /* tree-select */
> - BrotliWriteBits(1, depths[symbols[0]] == 1 ? 1 : 0, storage_ix, storage);
> - }
> -}
> -
> -/* num = alphabet size
> - depths = symbol depths */
> -void BrotliStoreHuffmanTree(const uint8_t* depths, size_t num,
> - HuffmanTree* tree,
> - size_t* storage_ix, uint8_t* storage) {
> - /* Write the Huffman tree into the brotli-representation.
> - The command alphabet is the largest, so this allocation will fit all
> - alphabets. */
> - uint8_t huffman_tree[BROTLI_NUM_COMMAND_SYMBOLS];
> - uint8_t huffman_tree_extra_bits[BROTLI_NUM_COMMAND_SYMBOLS];
> - size_t huffman_tree_size = 0;
> - uint8_t code_length_bitdepth[BROTLI_CODE_LENGTH_CODES] = { 0 };
> - uint16_t code_length_bitdepth_symbols[BROTLI_CODE_LENGTH_CODES];
> - uint32_t huffman_tree_histogram[BROTLI_CODE_LENGTH_CODES] = { 0 };
> - size_t i;
> - int num_codes = 0;
> - size_t code = 0;
> -
> - BROTLI_DCHECK(num <= BROTLI_NUM_COMMAND_SYMBOLS);
> -
> - BrotliWriteHuffmanTree(depths, num, &huffman_tree_size,
> huffman_tree,
> - huffman_tree_extra_bits);
> -
> - /* Calculate the statistics of the Huffman tree in brotli-representation. */
> - for (i = 0; i < huffman_tree_size; ++i) {
> - ++huffman_tree_histogram[huffman_tree[i]];
> - }
> -
> - for (i = 0; i < BROTLI_CODE_LENGTH_CODES; ++i) {
> - if (huffman_tree_histogram[i]) {
> - if (num_codes == 0) {
> - code = i;
> - num_codes = 1;
> - } else if (num_codes == 1) {
> - num_codes = 2;
> - break;
> - }
> - }
> - }
> -
> - /* Calculate another Huffman tree to use for compressing both the
> - earlier Huffman tree with. */
> - BrotliCreateHuffmanTree(huffman_tree_histogram,
> BROTLI_CODE_LENGTH_CODES,
> - 5, tree, code_length_bitdepth);
> - BrotliConvertBitDepthsToSymbols(code_length_bitdepth,
> - BROTLI_CODE_LENGTH_CODES,
> - code_length_bitdepth_symbols);
> -
> - /* Now, we have all the data, let's start storing it */
> - BrotliStoreHuffmanTreeOfHuffmanTreeToBitMask(num_codes,
> code_length_bitdepth,
> - storage_ix, storage);
> -
> - if (num_codes == 1) {
> - code_length_bitdepth[code] = 0;
> - }
> -
> - /* Store the real Huffman tree now. */
> - BrotliStoreHuffmanTreeToBitMask(huffman_tree_size,
> - huffman_tree,
> - huffman_tree_extra_bits,
> - code_length_bitdepth,
> - code_length_bitdepth_symbols,
> - storage_ix, storage);
> -}
> -
> -/* Builds a Huffman tree from histogram[0:length] into depth[0:length] and
> - bits[0:length] and stores the encoded tree to the bit stream. */
> -static void BuildAndStoreHuffmanTree(const uint32_t* histogram,
> - const size_t histogram_length,
> - const size_t alphabet_size,
> - HuffmanTree* tree,
> - uint8_t* depth,
> - uint16_t* bits,
> - size_t* storage_ix,
> - uint8_t* storage) {
> - size_t count = 0;
> - size_t s4[4] = { 0 };
> - size_t i;
> - size_t max_bits = 0;
> - for (i = 0; i < histogram_length; i++) {
> - if (histogram[i]) {
> - if (count < 4) {
> - s4[count] = i;
> - } else if (count > 4) {
> - break;
> - }
> - count++;
> - }
> - }
> -
> - {
> - size_t max_bits_counter = alphabet_size - 1;
> - while (max_bits_counter) {
> - max_bits_counter >>= 1;
> - ++max_bits;
> - }
> - }
> -
> - if (count <= 1) {
> - BrotliWriteBits(4, 1, storage_ix, storage);
> - BrotliWriteBits(max_bits, s4[0], storage_ix, storage);
> - depth[s4[0]] = 0;
> - bits[s4[0]] = 0;
> - return;
> - }
> -
> - memset(depth, 0, histogram_length * sizeof(depth[0]));
> - BrotliCreateHuffmanTree(histogram, histogram_length, 15, tree, depth);
> - BrotliConvertBitDepthsToSymbols(depth, histogram_length, bits);
> -
> - if (count <= 4) {
> - StoreSimpleHuffmanTree(depth, s4, count, max_bits, storage_ix, storage);
> - } else {
> - BrotliStoreHuffmanTree(depth, histogram_length, tree, storage_ix,
> storage);
> - }
> -}
> -
> -static BROTLI_INLINE BROTLI_BOOL SortHuffmanTree(
> - const HuffmanTree* v0, const HuffmanTree* v1) {
> - return TO_BROTLI_BOOL(v0->total_count_ < v1->total_count_);
> -}
> -
> -void BrotliBuildAndStoreHuffmanTreeFast(MemoryManager* m,
> - const uint32_t* histogram,
> - const size_t histogram_total,
> - const size_t max_bits,
> - uint8_t* depth, uint16_t* bits,
> - size_t* storage_ix,
> - uint8_t* storage) {
> - size_t count = 0;
> - size_t symbols[4] = { 0 };
> - size_t length = 0;
> - size_t total = histogram_total;
> - while (total != 0) {
> - if (histogram[length]) {
> - if (count < 4) {
> - symbols[count] = length;
> - }
> - ++count;
> - total -= histogram[length];
> - }
> - ++length;
> - }
> -
> - if (count <= 1) {
> - BrotliWriteBits(4, 1, storage_ix, storage);
> - BrotliWriteBits(max_bits, symbols[0], storage_ix, storage);
> - depth[symbols[0]] = 0;
> - bits[symbols[0]] = 0;
> - return;
> - }
> -
> - memset(depth, 0, length * sizeof(depth[0]));
> - {
> - const size_t max_tree_size = 2 * length + 1;
> - HuffmanTree* tree = BROTLI_ALLOC(m, HuffmanTree, max_tree_size);
> - uint32_t count_limit;
> - if (BROTLI_IS_OOM(m)) return;
> - for (count_limit = 1; ; count_limit *= 2) {
> - HuffmanTree* node = tree;
> - size_t l;
> - for (l = length; l != 0;) {
> - --l;
> - if (histogram[l]) {
> - if (BROTLI_PREDICT_TRUE(histogram[l] >= count_limit)) {
> - InitHuffmanTree(node, histogram[l], -1, (int16_t)l);
> - } else {
> - InitHuffmanTree(node, count_limit, -1, (int16_t)l);
> - }
> - ++node;
> - }
> - }
> - {
> - const int n = (int)(node - tree);
> - HuffmanTree sentinel;
> - int i = 0; /* Points to the next leaf node. */
> - int j = n + 1; /* Points to the next non-leaf node. */
> - int k;
> -
> - SortHuffmanTreeItems(tree, (size_t)n, SortHuffmanTree);
> - /* The nodes are:
> - [0, n): the sorted leaf nodes that we start with.
> - [n]: we add a sentinel here.
> - [n + 1, 2n): new parent nodes are added here, starting from
> - (n+1). These are naturally in ascending order.
> - [2n]: we add a sentinel at the end as well.
> - There will be (2n+1) elements at the end. */
> - InitHuffmanTree(&sentinel, BROTLI_UINT32_MAX, -1, -1);
> - *node++ = sentinel;
> - *node++ = sentinel;
> -
> - for (k = n - 1; k > 0; --k) {
> - int left, right;
> - if (tree[i].total_count_ <= tree[j].total_count_) {
> - left = i;
> - ++i;
> - } else {
> - left = j;
> - ++j;
> - }
> - if (tree[i].total_count_ <= tree[j].total_count_) {
> - right = i;
> - ++i;
> - } else {
> - right = j;
> - ++j;
> - }
> - /* The sentinel node becomes the parent node. */
> - node[-1].total_count_ =
> - tree[left].total_count_ + tree[right].total_count_;
> - node[-1].index_left_ = (int16_t)left;
> - node[-1].index_right_or_value_ = (int16_t)right;
> - /* Add back the last sentinel node. */
> - *node++ = sentinel;
> - }
> - if (BrotliSetDepth(2 * n - 1, tree, depth, 14)) {
> - /* We need to pack the Huffman tree in 14 bits. If this was not
> - successful, add fake entities to the lowest values and retry. */
> - break;
> - }
> - }
> - }
> - BROTLI_FREE(m, tree);
> - }
> - BrotliConvertBitDepthsToSymbols(depth, length, bits);
> - if (count <= 4) {
> - size_t i;
> - /* value of 1 indicates a simple Huffman code */
> - BrotliWriteBits(2, 1, storage_ix, storage);
> - BrotliWriteBits(2, count - 1, storage_ix, storage); /* NSYM - 1 */
> -
> - /* Sort */
> - for (i = 0; i < count; i++) {
> - size_t j;
> - for (j = i + 1; j < count; j++) {
> - if (depth[symbols[j]] < depth[symbols[i]]) {
> - BROTLI_SWAP(size_t, symbols, j, i);
> - }
> - }
> - }
> -
> - if (count == 2) {
> - BrotliWriteBits(max_bits, symbols[0], storage_ix, storage);
> - BrotliWriteBits(max_bits, symbols[1], storage_ix, storage);
> - } else if (count == 3) {
> - BrotliWriteBits(max_bits, symbols[0], storage_ix, storage);
> - BrotliWriteBits(max_bits, symbols[1], storage_ix, storage);
> - BrotliWriteBits(max_bits, symbols[2], storage_ix, storage);
> - } else {
> - BrotliWriteBits(max_bits, symbols[0], storage_ix, storage);
> - BrotliWriteBits(max_bits, symbols[1], storage_ix, storage);
> - BrotliWriteBits(max_bits, symbols[2], storage_ix, storage);
> - BrotliWriteBits(max_bits, symbols[3], storage_ix, storage);
> - /* tree-select */
> - BrotliWriteBits(1, depth[symbols[0]] == 1 ? 1 : 0, storage_ix, storage);
> - }
> - } else {
> - uint8_t previous_value = 8;
> - size_t i;
> - /* Complex Huffman Tree */
> - StoreStaticCodeLengthCode(storage_ix, storage);
> -
> - /* Actual RLE coding. */
> - for (i = 0; i < length;) {
> - const uint8_t value = depth[i];
> - size_t reps = 1;
> - size_t k;
> - for (k = i + 1; k < length && depth[k] == value; ++k) {
> - ++reps;
> - }
> - i += reps;
> - if (value == 0) {
> - BrotliWriteBits(kZeroRepsDepth[reps], kZeroRepsBits[reps],
> - storage_ix, storage);
> - } else {
> - if (previous_value != value) {
> - BrotliWriteBits(kCodeLengthDepth[value], kCodeLengthBits[value],
> - storage_ix, storage);
> - --reps;
> - }
> - if (reps < 3) {
> - while (reps != 0) {
> - reps--;
> - BrotliWriteBits(kCodeLengthDepth[value], kCodeLengthBits[value],
> - storage_ix, storage);
> - }
> - } else {
> - reps -= 3;
> - BrotliWriteBits(kNonZeroRepsDepth[reps], kNonZeroRepsBits[reps],
> - storage_ix, storage);
> - }
> - previous_value = value;
> - }
> - }
> - }
> -}
> -
> -static size_t IndexOf(const uint8_t* v, size_t v_size, uint8_t value) {
> - size_t i = 0;
> - for (; i < v_size; ++i) {
> - if (v[i] == value) return i;
> - }
> - return i;
> -}
> -
> -static void MoveToFront(uint8_t* v, size_t index) {
> - uint8_t value = v[index];
> - size_t i;
> - for (i = index; i != 0; --i) {
> - v[i] = v[i - 1];
> - }
> - v[0] = value;
> -}
> -
> -static void MoveToFrontTransform(const uint32_t* BROTLI_RESTRICT v_in,
> - const size_t v_size,
> - uint32_t* v_out) {
> - size_t i;
> - uint8_t mtf[256];
> - uint32_t max_value;
> - if (v_size == 0) {
> - return;
> - }
> - max_value = v_in[0];
> - for (i = 1; i < v_size; ++i) {
> - if (v_in[i] > max_value) max_value = v_in[i];
> - }
> - BROTLI_DCHECK(max_value < 256u);
> - for (i = 0; i <= max_value; ++i) {
> - mtf[i] = (uint8_t)i;
> - }
> - {
> - size_t mtf_size = max_value + 1;
> - for (i = 0; i < v_size; ++i) {
> - size_t index = IndexOf(mtf, mtf_size, (uint8_t)v_in[i]);
> - BROTLI_DCHECK(index < mtf_size);
> - v_out[i] = (uint32_t)index;
> - MoveToFront(mtf, index);
> - }
> - }
> -}
> -
> -/* Finds runs of zeros in v[0..in_size) and replaces them with a prefix code
> of
> - the run length plus extra bits (lower 9 bits is the prefix code and the rest
> - are the extra bits). Non-zero values in v[] are shifted by
> - *max_length_prefix. Will not create prefix codes bigger than the initial
> - value of *max_run_length_prefix. The prefix code of run length L is simply
> - Log2Floor(L) and the number of extra bits is the same as the prefix code.
> */
> -static void RunLengthCodeZeros(const size_t in_size,
> - uint32_t* BROTLI_RESTRICT v, size_t* BROTLI_RESTRICT out_size,
> - uint32_t* BROTLI_RESTRICT max_run_length_prefix) {
> - uint32_t max_reps = 0;
> - size_t i;
> - uint32_t max_prefix;
> - for (i = 0; i < in_size;) {
> - uint32_t reps = 0;
> - for (; i < in_size && v[i] != 0; ++i) ;
> - for (; i < in_size && v[i] == 0; ++i) {
> - ++reps;
> - }
> - max_reps = BROTLI_MAX(uint32_t, reps, max_reps);
> - }
> - max_prefix = max_reps > 0 ? Log2FloorNonZero(max_reps) : 0;
> - max_prefix = BROTLI_MIN(uint32_t, max_prefix,
> *max_run_length_prefix);
> - *max_run_length_prefix = max_prefix;
> - *out_size = 0;
> - for (i = 0; i < in_size;) {
> - BROTLI_DCHECK(*out_size <= i);
> - if (v[i] != 0) {
> - v[*out_size] = v[i] + *max_run_length_prefix;
> - ++i;
> - ++(*out_size);
> - } else {
> - uint32_t reps = 1;
> - size_t k;
> - for (k = i + 1; k < in_size && v[k] == 0; ++k) {
> - ++reps;
> - }
> - i += reps;
> - while (reps != 0) {
> - if (reps < (2u << max_prefix)) {
> - uint32_t run_length_prefix = Log2FloorNonZero(reps);
> - const uint32_t extra_bits = reps - (1u << run_length_prefix);
> - v[*out_size] = run_length_prefix + (extra_bits << 9);
> - ++(*out_size);
> - break;
> - } else {
> - const uint32_t extra_bits = (1u << max_prefix) - 1u;
> - v[*out_size] = max_prefix + (extra_bits << 9);
> - reps -= (2u << max_prefix) - 1u;
> - ++(*out_size);
> - }
> - }
> - }
> - }
> -}
> -
> -#define SYMBOL_BITS 9
> -
> -static void EncodeContextMap(MemoryManager* m,
> - const uint32_t* context_map,
> - size_t context_map_size,
> - size_t num_clusters,
> - HuffmanTree* tree,
> - size_t* storage_ix, uint8_t* storage) {
> - size_t i;
> - uint32_t* rle_symbols;
> - uint32_t max_run_length_prefix = 6;
> - size_t num_rle_symbols = 0;
> - uint32_t histogram[BROTLI_MAX_CONTEXT_MAP_SYMBOLS];
> - static const uint32_t kSymbolMask = (1u << SYMBOL_BITS) - 1u;
> - uint8_t depths[BROTLI_MAX_CONTEXT_MAP_SYMBOLS];
> - uint16_t bits[BROTLI_MAX_CONTEXT_MAP_SYMBOLS];
> -
> - StoreVarLenUint8(num_clusters - 1, storage_ix, storage);
> -
> - if (num_clusters == 1) {
> - return;
> - }
> -
> - rle_symbols = BROTLI_ALLOC(m, uint32_t, context_map_size);
> - if (BROTLI_IS_OOM(m)) return;
> - MoveToFrontTransform(context_map, context_map_size, rle_symbols);
> - RunLengthCodeZeros(context_map_size, rle_symbols,
> - &num_rle_symbols, &max_run_length_prefix);
> - memset(histogram, 0, sizeof(histogram));
> - for (i = 0; i < num_rle_symbols; ++i) {
> - ++histogram[rle_symbols[i] & kSymbolMask];
> - }
> - {
> - BROTLI_BOOL use_rle = TO_BROTLI_BOOL(max_run_length_prefix > 0);
> - BrotliWriteBits(1, (uint64_t)use_rle, storage_ix, storage);
> - if (use_rle) {
> - BrotliWriteBits(4, max_run_length_prefix - 1, storage_ix, storage);
> - }
> - }
> - BuildAndStoreHuffmanTree(histogram, num_clusters +
> max_run_length_prefix,
> - num_clusters + max_run_length_prefix,
> - tree, depths, bits, storage_ix, storage);
> - for (i = 0; i < num_rle_symbols; ++i) {
> - const uint32_t rle_symbol = rle_symbols[i] & kSymbolMask;
> - const uint32_t extra_bits_val = rle_symbols[i] >> SYMBOL_BITS;
> - BrotliWriteBits(depths[rle_symbol], bits[rle_symbol], storage_ix, storage);
> - if (rle_symbol > 0 && rle_symbol <= max_run_length_prefix) {
> - BrotliWriteBits(rle_symbol, extra_bits_val, storage_ix, storage);
> - }
> - }
> - BrotliWriteBits(1, 1, storage_ix, storage); /* use move-to-front */
> - BROTLI_FREE(m, rle_symbols);
> -}
> -
> -/* Stores the block switch command with index block_ix to the bit stream.
> */
> -static BROTLI_INLINE void StoreBlockSwitch(BlockSplitCode* code,
> - const uint32_t block_len,
> - const uint8_t block_type,
> - BROTLI_BOOL is_first_block,
> - size_t* storage_ix,
> - uint8_t* storage) {
> - size_t typecode = NextBlockTypeCode(&code->type_code_calculator,
> block_type);
> - size_t lencode;
> - uint32_t len_nextra;
> - uint32_t len_extra;
> - if (!is_first_block) {
> - BrotliWriteBits(code->type_depths[typecode], code-
> >type_bits[typecode],
> - storage_ix, storage);
> - }
> - GetBlockLengthPrefixCode(block_len, &lencode, &len_nextra,
> &len_extra);
> -
> - BrotliWriteBits(code->length_depths[lencode], code-
> >length_bits[lencode],
> - storage_ix, storage);
> - BrotliWriteBits(len_nextra, len_extra, storage_ix, storage);
> -}
> -
> -/* Builds a BlockSplitCode data structure from the block split given by the
> - vector of block types and block lengths and stores it to the bit stream. */
> -static void BuildAndStoreBlockSplitCode(const uint8_t* types,
> - const uint32_t* lengths,
> - const size_t num_blocks,
> - const size_t num_types,
> - HuffmanTree* tree,
> - BlockSplitCode* code,
> - size_t* storage_ix,
> - uint8_t* storage) {
> - uint32_t type_histo[BROTLI_MAX_BLOCK_TYPE_SYMBOLS];
> - uint32_t length_histo[BROTLI_NUM_BLOCK_LEN_SYMBOLS];
> - size_t i;
> - BlockTypeCodeCalculator type_code_calculator;
> - memset(type_histo, 0, (num_types + 2) * sizeof(type_histo[0]));
> - memset(length_histo, 0, sizeof(length_histo));
> - InitBlockTypeCodeCalculator(&type_code_calculator);
> - for (i = 0; i < num_blocks; ++i) {
> - size_t type_code = NextBlockTypeCode(&type_code_calculator, types[i]);
> - if (i != 0) ++type_histo[type_code];
> - ++length_histo[BlockLengthPrefixCode(lengths[i])];
> - }
> - StoreVarLenUint8(num_types - 1, storage_ix, storage);
> - if (num_types > 1) { /* TODO: else? could StoreBlockSwitch occur? */
> - BuildAndStoreHuffmanTree(&type_histo[0], num_types + 2, num_types
> + 2, tree,
> - &code->type_depths[0], &code->type_bits[0],
> - storage_ix, storage);
> - BuildAndStoreHuffmanTree(&length_histo[0],
> BROTLI_NUM_BLOCK_LEN_SYMBOLS,
> - BROTLI_NUM_BLOCK_LEN_SYMBOLS,
> - tree, &code->length_depths[0],
> - &code->length_bits[0], storage_ix, storage);
> - StoreBlockSwitch(code, lengths[0], types[0], 1, storage_ix, storage);
> - }
> -}
> -
> -/* Stores a context map where the histogram type is always the block type.
> */
> -static void StoreTrivialContextMap(size_t num_types,
> - size_t context_bits,
> - HuffmanTree* tree,
> - size_t* storage_ix,
> - uint8_t* storage) {
> - StoreVarLenUint8(num_types - 1, storage_ix, storage);
> - if (num_types > 1) {
> - size_t repeat_code = context_bits - 1u;
> - size_t repeat_bits = (1u << repeat_code) - 1u;
> - size_t alphabet_size = num_types + repeat_code;
> - uint32_t histogram[BROTLI_MAX_CONTEXT_MAP_SYMBOLS];
> - uint8_t depths[BROTLI_MAX_CONTEXT_MAP_SYMBOLS];
> - uint16_t bits[BROTLI_MAX_CONTEXT_MAP_SYMBOLS];
> - size_t i;
> - memset(histogram, 0, alphabet_size * sizeof(histogram[0]));
> - /* Write RLEMAX. */
> - BrotliWriteBits(1, 1, storage_ix, storage);
> - BrotliWriteBits(4, repeat_code - 1, storage_ix, storage);
> - histogram[repeat_code] = (uint32_t)num_types;
> - histogram[0] = 1;
> - for (i = context_bits; i < alphabet_size; ++i) {
> - histogram[i] = 1;
> - }
> - BuildAndStoreHuffmanTree(histogram, alphabet_size, alphabet_size,
> - tree, depths, bits, storage_ix, storage);
> - for (i = 0; i < num_types; ++i) {
> - size_t code = (i == 0 ? 0 : i + context_bits - 1);
> - BrotliWriteBits(depths[code], bits[code], storage_ix, storage);
> - BrotliWriteBits(
> - depths[repeat_code], bits[repeat_code], storage_ix, storage);
> - BrotliWriteBits(repeat_code, repeat_bits, storage_ix, storage);
> - }
> - /* Write IMTF (inverse-move-to-front) bit. */
> - BrotliWriteBits(1, 1, storage_ix, storage);
> - }
> -}
> -
> -/* Manages the encoding of one block category (literal, command or
> distance). */
> -typedef struct BlockEncoder {
> - size_t histogram_length_;
> - size_t num_block_types_;
> - const uint8_t* block_types_; /* Not owned. */
> - const uint32_t* block_lengths_; /* Not owned. */
> - size_t num_blocks_;
> - BlockSplitCode block_split_code_;
> - size_t block_ix_;
> - size_t block_len_;
> - size_t entropy_ix_;
> - uint8_t* depths_;
> - uint16_t* bits_;
> -} BlockEncoder;
> -
> -static void InitBlockEncoder(BlockEncoder* self, size_t histogram_length,
> - size_t num_block_types, const uint8_t* block_types,
> - const uint32_t* block_lengths, const size_t num_blocks) {
> - self->histogram_length_ = histogram_length;
> - self->num_block_types_ = num_block_types;
> - self->block_types_ = block_types;
> - self->block_lengths_ = block_lengths;
> - self->num_blocks_ = num_blocks;
> - InitBlockTypeCodeCalculator(&self-
> >block_split_code_.type_code_calculator);
> - self->block_ix_ = 0;
> - self->block_len_ = num_blocks == 0 ? 0 : block_lengths[0];
> - self->entropy_ix_ = 0;
> - self->depths_ = 0;
> - self->bits_ = 0;
> -}
> -
> -static void CleanupBlockEncoder(MemoryManager* m, BlockEncoder* self)
> {
> - BROTLI_FREE(m, self->depths_);
> - BROTLI_FREE(m, self->bits_);
> -}
> -
> -/* Creates entropy codes of block lengths and block types and stores them
> - to the bit stream. */
> -static void BuildAndStoreBlockSwitchEntropyCodes(BlockEncoder* self,
> - HuffmanTree* tree, size_t* storage_ix, uint8_t* storage) {
> - BuildAndStoreBlockSplitCode(self->block_types_, self->block_lengths_,
> - self->num_blocks_, self->num_block_types_, tree, &self-
> >block_split_code_,
> - storage_ix, storage);
> -}
> -
> -/* Stores the next symbol with the entropy code of the current block type.
> - Updates the block type and block length at block boundaries. */
> -static void StoreSymbol(BlockEncoder* self, size_t symbol, size_t*
> storage_ix,
> - uint8_t* storage) {
> - if (self->block_len_ == 0) {
> - size_t block_ix = ++self->block_ix_;
> - uint32_t block_len = self->block_lengths_[block_ix];
> - uint8_t block_type = self->block_types_[block_ix];
> - self->block_len_ = block_len;
> - self->entropy_ix_ = block_type * self->histogram_length_;
> - StoreBlockSwitch(&self->block_split_code_, block_len, block_type, 0,
> - storage_ix, storage);
> - }
> - --self->block_len_;
> - {
> - size_t ix = self->entropy_ix_ + symbol;
> - BrotliWriteBits(self->depths_[ix], self->bits_[ix], storage_ix, storage);
> - }
> -}
> -
> -/* Stores the next symbol with the entropy code of the current block type
> and
> - context value.
> - Updates the block type and block length at block boundaries. */
> -static void StoreSymbolWithContext(BlockEncoder* self, size_t symbol,
> - size_t context, const uint32_t* context_map, size_t* storage_ix,
> - uint8_t* storage, const size_t context_bits) {
> - if (self->block_len_ == 0) {
> - size_t block_ix = ++self->block_ix_;
> - uint32_t block_len = self->block_lengths_[block_ix];
> - uint8_t block_type = self->block_types_[block_ix];
> - self->block_len_ = block_len;
> - self->entropy_ix_ = (size_t)block_type << context_bits;
> - StoreBlockSwitch(&self->block_split_code_, block_len, block_type, 0,
> - storage_ix, storage);
> - }
> - --self->block_len_;
> - {
> - size_t histo_ix = context_map[self->entropy_ix_ + context];
> - size_t ix = histo_ix * self->histogram_length_ + symbol;
> - BrotliWriteBits(self->depths_[ix], self->bits_[ix], storage_ix, storage);
> - }
> -}
> -
> -#define FN(X) X ## Literal
> -/* NOLINTNEXTLINE(build/include) */
> -#include "./block_encoder_inc.h"
> -#undef FN
> -
> -#define FN(X) X ## Command
> -/* NOLINTNEXTLINE(build/include) */
> -#include "./block_encoder_inc.h"
> -#undef FN
> -
> -#define FN(X) X ## Distance
> -/* NOLINTNEXTLINE(build/include) */
> -#include "./block_encoder_inc.h"
> -#undef FN
> -
> -static void JumpToByteBoundary(size_t* storage_ix, uint8_t* storage) {
> - *storage_ix = (*storage_ix + 7u) & ~7u;
> - storage[*storage_ix >> 3] = 0;
> -}
> -
> -void BrotliStoreMetaBlock(MemoryManager* m,
> - const uint8_t* input, size_t start_pos, size_t length, size_t mask,
> - uint8_t prev_byte, uint8_t prev_byte2, BROTLI_BOOL is_last,
> - const BrotliEncoderParams* params, ContextType literal_context_mode,
> - const Command* commands, size_t n_commands, const MetaBlockSplit*
> mb,
> - size_t* storage_ix, uint8_t* storage) {
> -
> - size_t pos = start_pos;
> - size_t i;
> - uint32_t num_distance_symbols = params->dist.alphabet_size;
> - uint32_t num_effective_distance_symbols = num_distance_symbols;
> - HuffmanTree* tree;
> - ContextLut literal_context_lut =
> BROTLI_CONTEXT_LUT(literal_context_mode);
> - BlockEncoder literal_enc;
> - BlockEncoder command_enc;
> - BlockEncoder distance_enc;
> - const BrotliDistanceParams* dist = ¶ms->dist;
> - if (params->large_window &&
> - num_effective_distance_symbols >
> BROTLI_NUM_HISTOGRAM_DISTANCE_SYMBOLS) {
> - num_effective_distance_symbols =
> BROTLI_NUM_HISTOGRAM_DISTANCE_SYMBOLS;
> - }
> -
> - StoreCompressedMetaBlockHeader(is_last, length, storage_ix, storage);
> -
> - tree = BROTLI_ALLOC(m, HuffmanTree, MAX_HUFFMAN_TREE_SIZE);
> - if (BROTLI_IS_OOM(m)) return;
> - InitBlockEncoder(&literal_enc, BROTLI_NUM_LITERAL_SYMBOLS,
> - mb->literal_split.num_types, mb->literal_split.types,
> - mb->literal_split.lengths, mb->literal_split.num_blocks);
> - InitBlockEncoder(&command_enc, BROTLI_NUM_COMMAND_SYMBOLS,
> - mb->command_split.num_types, mb->command_split.types,
> - mb->command_split.lengths, mb->command_split.num_blocks);
> - InitBlockEncoder(&distance_enc, num_effective_distance_symbols,
> - mb->distance_split.num_types, mb->distance_split.types,
> - mb->distance_split.lengths, mb->distance_split.num_blocks);
> -
> - BuildAndStoreBlockSwitchEntropyCodes(&literal_enc, tree, storage_ix,
> storage);
> - BuildAndStoreBlockSwitchEntropyCodes(&command_enc, tree, storage_ix,
> storage);
> - BuildAndStoreBlockSwitchEntropyCodes(
> - &distance_enc, tree, storage_ix, storage);
> -
> - BrotliWriteBits(2, dist->distance_postfix_bits, storage_ix, storage);
> - BrotliWriteBits(
> - 4, dist->num_direct_distance_codes >> dist->distance_postfix_bits,
> - storage_ix, storage);
> - for (i = 0; i < mb->literal_split.num_types; ++i) {
> - BrotliWriteBits(2, literal_context_mode, storage_ix, storage);
> - }
> -
> - if (mb->literal_context_map_size == 0) {
> - StoreTrivialContextMap(mb->literal_histograms_size,
> - BROTLI_LITERAL_CONTEXT_BITS, tree, storage_ix, storage);
> - } else {
> - EncodeContextMap(m,
> - mb->literal_context_map, mb->literal_context_map_size,
> - mb->literal_histograms_size, tree, storage_ix, storage);
> - if (BROTLI_IS_OOM(m)) return;
> - }
> -
> - if (mb->distance_context_map_size == 0) {
> - StoreTrivialContextMap(mb->distance_histograms_size,
> - BROTLI_DISTANCE_CONTEXT_BITS, tree, storage_ix, storage);
> - } else {
> - EncodeContextMap(m,
> - mb->distance_context_map, mb->distance_context_map_size,
> - mb->distance_histograms_size, tree, storage_ix, storage);
> - if (BROTLI_IS_OOM(m)) return;
> - }
> -
> - BuildAndStoreEntropyCodesLiteral(m, &literal_enc, mb->literal_histograms,
> - mb->literal_histograms_size, BROTLI_NUM_LITERAL_SYMBOLS, tree,
> - storage_ix, storage);
> - if (BROTLI_IS_OOM(m)) return;
> - BuildAndStoreEntropyCodesCommand(m, &command_enc, mb-
> >command_histograms,
> - mb->command_histograms_size, BROTLI_NUM_COMMAND_SYMBOLS,
> tree,
> - storage_ix, storage);
> - if (BROTLI_IS_OOM(m)) return;
> - BuildAndStoreEntropyCodesDistance(m, &distance_enc, mb-
> >distance_histograms,
> - mb->distance_histograms_size, num_distance_symbols, tree,
> - storage_ix, storage);
> - if (BROTLI_IS_OOM(m)) return;
> - BROTLI_FREE(m, tree);
> -
> - for (i = 0; i < n_commands; ++i) {
> - const Command cmd = commands[i];
> - size_t cmd_code = cmd.cmd_prefix_;
> - StoreSymbol(&command_enc, cmd_code, storage_ix, storage);
> - StoreCommandExtra(&cmd, storage_ix, storage);
> - if (mb->literal_context_map_size == 0) {
> - size_t j;
> - for (j = cmd.insert_len_; j != 0; --j) {
> - StoreSymbol(&literal_enc, input[pos & mask], storage_ix, storage);
> - ++pos;
> - }
> - } else {
> - size_t j;
> - for (j = cmd.insert_len_; j != 0; --j) {
> - size_t context =
> - BROTLI_CONTEXT(prev_byte, prev_byte2, literal_context_lut);
> - uint8_t literal = input[pos & mask];
> - StoreSymbolWithContext(&literal_enc, literal, context,
> - mb->literal_context_map, storage_ix, storage,
> - BROTLI_LITERAL_CONTEXT_BITS);
> - prev_byte2 = prev_byte;
> - prev_byte = literal;
> - ++pos;
> - }
> - }
> - pos += CommandCopyLen(&cmd);
> - if (CommandCopyLen(&cmd)) {
> - prev_byte2 = input[(pos - 2) & mask];
> - prev_byte = input[(pos - 1) & mask];
> - if (cmd.cmd_prefix_ >= 128) {
> - size_t dist_code = cmd.dist_prefix_ & 0x3FF;
> - uint32_t distnumextra = cmd.dist_prefix_ >> 10;
> - uint64_t distextra = cmd.dist_extra_;
> - if (mb->distance_context_map_size == 0) {
> - StoreSymbol(&distance_enc, dist_code, storage_ix, storage);
> - } else {
> - size_t context = CommandDistanceContext(&cmd);
> - StoreSymbolWithContext(&distance_enc, dist_code, context,
> - mb->distance_context_map, storage_ix, storage,
> - BROTLI_DISTANCE_CONTEXT_BITS);
> - }
> - BrotliWriteBits(distnumextra, distextra, storage_ix, storage);
> - }
> - }
> - }
> - CleanupBlockEncoder(m, &distance_enc);
> - CleanupBlockEncoder(m, &command_enc);
> - CleanupBlockEncoder(m, &literal_enc);
> - if (is_last) {
> - JumpToByteBoundary(storage_ix, storage);
> - }
> -}
> -
> -static void BuildHistograms(const uint8_t* input,
> - size_t start_pos,
> - size_t mask,
> - const Command* commands,
> - size_t n_commands,
> - HistogramLiteral* lit_histo,
> - HistogramCommand* cmd_histo,
> - HistogramDistance* dist_histo) {
> - size_t pos = start_pos;
> - size_t i;
> - for (i = 0; i < n_commands; ++i) {
> - const Command cmd = commands[i];
> - size_t j;
> - HistogramAddCommand(cmd_histo, cmd.cmd_prefix_);
> - for (j = cmd.insert_len_; j != 0; --j) {
> - HistogramAddLiteral(lit_histo, input[pos & mask]);
> - ++pos;
> - }
> - pos += CommandCopyLen(&cmd);
> - if (CommandCopyLen(&cmd) && cmd.cmd_prefix_ >= 128) {
> - HistogramAddDistance(dist_histo, cmd.dist_prefix_ & 0x3FF);
> - }
> - }
> -}
> -
> -static void StoreDataWithHuffmanCodes(const uint8_t* input,
> - size_t start_pos,
> - size_t mask,
> - const Command* commands,
> - size_t n_commands,
> - const uint8_t* lit_depth,
> - const uint16_t* lit_bits,
> - const uint8_t* cmd_depth,
> - const uint16_t* cmd_bits,
> - const uint8_t* dist_depth,
> - const uint16_t* dist_bits,
> - size_t* storage_ix,
> - uint8_t* storage) {
> - size_t pos = start_pos;
> - size_t i;
> - for (i = 0; i < n_commands; ++i) {
> - const Command cmd = commands[i];
> - const size_t cmd_code = cmd.cmd_prefix_;
> - size_t j;
> - BrotliWriteBits(
> - cmd_depth[cmd_code], cmd_bits[cmd_code], storage_ix, storage);
> - StoreCommandExtra(&cmd, storage_ix, storage);
> - for (j = cmd.insert_len_; j != 0; --j) {
> - const uint8_t literal = input[pos & mask];
> - BrotliWriteBits(
> - lit_depth[literal], lit_bits[literal], storage_ix, storage);
> - ++pos;
> - }
> - pos += CommandCopyLen(&cmd);
> - if (CommandCopyLen(&cmd) && cmd.cmd_prefix_ >= 128) {
> - const size_t dist_code = cmd.dist_prefix_ & 0x3FF;
> - const uint32_t distnumextra = cmd.dist_prefix_ >> 10;
> - const uint32_t distextra = cmd.dist_extra_;
> - BrotliWriteBits(dist_depth[dist_code], dist_bits[dist_code],
> - storage_ix, storage);
> - BrotliWriteBits(distnumextra, distextra, storage_ix, storage);
> - }
> - }
> -}
> -
> -void BrotliStoreMetaBlockTrivial(MemoryManager* m,
> - const uint8_t* input, size_t start_pos, size_t length, size_t mask,
> - BROTLI_BOOL is_last, const BrotliEncoderParams* params,
> - const Command* commands, size_t n_commands,
> - size_t* storage_ix, uint8_t* storage) {
> - HistogramLiteral lit_histo;
> - HistogramCommand cmd_histo;
> - HistogramDistance dist_histo;
> - uint8_t lit_depth[BROTLI_NUM_LITERAL_SYMBOLS];
> - uint16_t lit_bits[BROTLI_NUM_LITERAL_SYMBOLS];
> - uint8_t cmd_depth[BROTLI_NUM_COMMAND_SYMBOLS];
> - uint16_t cmd_bits[BROTLI_NUM_COMMAND_SYMBOLS];
> - uint8_t dist_depth[MAX_SIMPLE_DISTANCE_ALPHABET_SIZE];
> - uint16_t dist_bits[MAX_SIMPLE_DISTANCE_ALPHABET_SIZE];
> - HuffmanTree* tree;
> - uint32_t num_distance_symbols = params->dist.alphabet_size;
> -
> - StoreCompressedMetaBlockHeader(is_last, length, storage_ix, storage);
> -
> - HistogramClearLiteral(&lit_histo);
> - HistogramClearCommand(&cmd_histo);
> - HistogramClearDistance(&dist_histo);
> -
> - BuildHistograms(input, start_pos, mask, commands, n_commands,
> - &lit_histo, &cmd_histo, &dist_histo);
> -
> - BrotliWriteBits(13, 0, storage_ix, storage);
> -
> - tree = BROTLI_ALLOC(m, HuffmanTree, MAX_HUFFMAN_TREE_SIZE);
> - if (BROTLI_IS_OOM(m)) return;
> - BuildAndStoreHuffmanTree(lit_histo.data_,
> BROTLI_NUM_LITERAL_SYMBOLS,
> - BROTLI_NUM_LITERAL_SYMBOLS, tree,
> - lit_depth, lit_bits,
> - storage_ix, storage);
> - BuildAndStoreHuffmanTree(cmd_histo.data_,
> BROTLI_NUM_COMMAND_SYMBOLS,
> - BROTLI_NUM_COMMAND_SYMBOLS, tree,
> - cmd_depth, cmd_bits,
> - storage_ix, storage);
> - BuildAndStoreHuffmanTree(dist_histo.data_,
> MAX_SIMPLE_DISTANCE_ALPHABET_SIZE,
> - num_distance_symbols, tree,
> - dist_depth, dist_bits,
> - storage_ix, storage);
> - BROTLI_FREE(m, tree);
> - StoreDataWithHuffmanCodes(input, start_pos, mask, commands,
> - n_commands, lit_depth, lit_bits,
> - cmd_depth, cmd_bits,
> - dist_depth, dist_bits,
> - storage_ix, storage);
> - if (is_last) {
> - JumpToByteBoundary(storage_ix, storage);
> - }
> -}
> -
> -void BrotliStoreMetaBlockFast(MemoryManager* m,
> - const uint8_t* input, size_t start_pos, size_t length, size_t mask,
> - BROTLI_BOOL is_last, const BrotliEncoderParams* params,
> - const Command* commands, size_t n_commands,
> - size_t* storage_ix, uint8_t* storage) {
> - uint32_t num_distance_symbols = params->dist.alphabet_size;
> - uint32_t distance_alphabet_bits =
> - Log2FloorNonZero(num_distance_symbols - 1) + 1;
> -
> - StoreCompressedMetaBlockHeader(is_last, length, storage_ix, storage);
> -
> - BrotliWriteBits(13, 0, storage_ix, storage);
> -
> - if (n_commands <= 128) {
> - uint32_t histogram[BROTLI_NUM_LITERAL_SYMBOLS] = { 0 };
> - size_t pos = start_pos;
> - size_t num_literals = 0;
> - size_t i;
> - uint8_t lit_depth[BROTLI_NUM_LITERAL_SYMBOLS];
> - uint16_t lit_bits[BROTLI_NUM_LITERAL_SYMBOLS];
> - for (i = 0; i < n_commands; ++i) {
> - const Command cmd = commands[i];
> - size_t j;
> - for (j = cmd.insert_len_; j != 0; --j) {
> - ++histogram[input[pos & mask]];
> - ++pos;
> - }
> - num_literals += cmd.insert_len_;
> - pos += CommandCopyLen(&cmd);
> - }
> - BrotliBuildAndStoreHuffmanTreeFast(m, histogram, num_literals,
> - /* max_bits = */ 8,
> - lit_depth, lit_bits,
> - storage_ix, storage);
> - if (BROTLI_IS_OOM(m)) return;
> - StoreStaticCommandHuffmanTree(storage_ix, storage);
> - StoreStaticDistanceHuffmanTree(storage_ix, storage);
> - StoreDataWithHuffmanCodes(input, start_pos, mask, commands,
> - n_commands, lit_depth, lit_bits,
> - kStaticCommandCodeDepth,
> - kStaticCommandCodeBits,
> - kStaticDistanceCodeDepth,
> - kStaticDistanceCodeBits,
> - storage_ix, storage);
> - } else {
> - HistogramLiteral lit_histo;
> - HistogramCommand cmd_histo;
> - HistogramDistance dist_histo;
> - uint8_t lit_depth[BROTLI_NUM_LITERAL_SYMBOLS];
> - uint16_t lit_bits[BROTLI_NUM_LITERAL_SYMBOLS];
> - uint8_t cmd_depth[BROTLI_NUM_COMMAND_SYMBOLS];
> - uint16_t cmd_bits[BROTLI_NUM_COMMAND_SYMBOLS];
> - uint8_t dist_depth[MAX_SIMPLE_DISTANCE_ALPHABET_SIZE];
> - uint16_t dist_bits[MAX_SIMPLE_DISTANCE_ALPHABET_SIZE];
> - HistogramClearLiteral(&lit_histo);
> - HistogramClearCommand(&cmd_histo);
> - HistogramClearDistance(&dist_histo);
> - BuildHistograms(input, start_pos, mask, commands, n_commands,
> - &lit_histo, &cmd_histo, &dist_histo);
> - BrotliBuildAndStoreHuffmanTreeFast(m, lit_histo.data_,
> - lit_histo.total_count_,
> - /* max_bits = */ 8,
> - lit_depth, lit_bits,
> - storage_ix, storage);
> - if (BROTLI_IS_OOM(m)) return;
> - BrotliBuildAndStoreHuffmanTreeFast(m, cmd_histo.data_,
> - cmd_histo.total_count_,
> - /* max_bits = */ 10,
> - cmd_depth, cmd_bits,
> - storage_ix, storage);
> - if (BROTLI_IS_OOM(m)) return;
> - BrotliBuildAndStoreHuffmanTreeFast(m, dist_histo.data_,
> - dist_histo.total_count_,
> - /* max_bits = */
> - distance_alphabet_bits,
> - dist_depth, dist_bits,
> - storage_ix, storage);
> - if (BROTLI_IS_OOM(m)) return;
> - StoreDataWithHuffmanCodes(input, start_pos, mask, commands,
> - n_commands, lit_depth, lit_bits,
> - cmd_depth, cmd_bits,
> - dist_depth, dist_bits,
> - storage_ix, storage);
> - }
> -
> - if (is_last) {
> - JumpToByteBoundary(storage_ix, storage);
> - }
> -}
> -
> -/* This is for storing uncompressed blocks (simple raw storage of
> - bytes-as-bytes). */
> -void BrotliStoreUncompressedMetaBlock(BROTLI_BOOL is_final_block,
> - const uint8_t* BROTLI_RESTRICT input,
> - size_t position, size_t mask,
> - size_t len,
> - size_t* BROTLI_RESTRICT storage_ix,
> - uint8_t* BROTLI_RESTRICT storage) {
> - size_t masked_pos = position & mask;
> - BrotliStoreUncompressedMetaBlockHeader(len, storage_ix, storage);
> - JumpToByteBoundary(storage_ix, storage);
> -
> - if (masked_pos + len > mask + 1) {
> - size_t len1 = mask + 1 - masked_pos;
> - memcpy(&storage[*storage_ix >> 3], &input[masked_pos], len1);
> - *storage_ix += len1 << 3;
> - len -= len1;
> - masked_pos = 0;
> - }
> - memcpy(&storage[*storage_ix >> 3], &input[masked_pos], len);
> - *storage_ix += len << 3;
> -
> - /* We need to clear the next 4 bytes to continue to be
> - compatible with BrotliWriteBits. */
> - BrotliWriteBitsPrepareStorage(*storage_ix, storage);
> -
> - /* Since the uncompressed block itself may not be the final block, add an
> - empty one after this. */
> - if (is_final_block) {
> - BrotliWriteBits(1, 1, storage_ix, storage); /* islast */
> - BrotliWriteBits(1, 1, storage_ix, storage); /* isempty */
> - JumpToByteBoundary(storage_ix, storage);
> - }
> -}
> -
> -#if defined(__cplusplus) || defined(c_plusplus)
> -} /* extern "C" */
> -#endif
> diff --git a/BaseTools/Source/C/BrotliCompress/enc/cluster.c
> b/BaseTools/Source/C/BrotliCompress/enc/cluster.c
> deleted file mode 100644
> index fdb4fa7d3ab2..000000000000
> --- a/BaseTools/Source/C/BrotliCompress/enc/cluster.c
> +++ /dev/null
> @@ -1,56 +0,0 @@
> -/* Copyright 2013 Google Inc. All Rights Reserved.
> -
> - Distributed under MIT license.
> - See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
> -*/
> -
> -/* Functions for clustering similar histograms together. */
> -
> -#include "./cluster.h"
> -
> -#include "../common/platform.h"
> -#include <brotli/types.h>
> -#include "./bit_cost.h" /* BrotliPopulationCost */
> -#include "./fast_log.h"
> -#include "./histogram.h"
> -#include "./memory.h"
> -
> -#if defined(__cplusplus) || defined(c_plusplus)
> -extern "C" {
> -#endif
> -
> -static BROTLI_INLINE BROTLI_BOOL HistogramPairIsLess(
> - const HistogramPair* p1, const HistogramPair* p2) {
> - if (p1->cost_diff != p2->cost_diff) {
> - return TO_BROTLI_BOOL(p1->cost_diff > p2->cost_diff);
> - }
> - return TO_BROTLI_BOOL((p1->idx2 - p1->idx1) > (p2->idx2 - p2->idx1));
> -}
> -
> -/* Returns entropy reduction of the context map when we combine two
> clusters. */
> -static BROTLI_INLINE double ClusterCostDiff(size_t size_a, size_t size_b) {
> - size_t size_c = size_a + size_b;
> - return (double)size_a * FastLog2(size_a) +
> - (double)size_b * FastLog2(size_b) -
> - (double)size_c * FastLog2(size_c);
> -}
> -
> -#define CODE(X) X
> -
> -#define FN(X) X ## Literal
> -#include "./cluster_inc.h" /* NOLINT(build/include) */
> -#undef FN
> -
> -#define FN(X) X ## Command
> -#include "./cluster_inc.h" /* NOLINT(build/include) */
> -#undef FN
> -
> -#define FN(X) X ## Distance
> -#include "./cluster_inc.h" /* NOLINT(build/include) */
> -#undef FN
> -
> -#undef CODE
> -
> -#if defined(__cplusplus) || defined(c_plusplus)
> -} /* extern "C" */
> -#endif
> diff --git a/BaseTools/Source/C/BrotliCompress/enc/compress_fragment.c
> b/BaseTools/Source/C/BrotliCompress/enc/compress_fragment.c
> deleted file mode 100644
> index ca61bc0a7f0d..000000000000
> --- a/BaseTools/Source/C/BrotliCompress/enc/compress_fragment.c
> +++ /dev/null
> @@ -1,790 +0,0 @@
> -/* Copyright 2015 Google Inc. All Rights Reserved.
> -
> - Distributed under MIT license.
> - See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
> -*/
> -
> -/* Function for fast encoding of an input fragment, independently from the
> input
> - history. This function uses one-pass processing: when we find a backward
> - match, we immediately emit the corresponding command and literal codes
> to
> - the bit stream.
> -
> - Adapted from the CompressFragment() function in
> - https://github.com/google/snappy/blob/master/snappy.cc */
> -
> -#include "./compress_fragment.h"
> -
> -#include <string.h> /* memcmp, memcpy, memset */
> -
> -#include "../common/constants.h"
> -#include "../common/platform.h"
> -#include <brotli/types.h>
> -#include "./brotli_bit_stream.h"
> -#include "./entropy_encode.h"
> -#include "./fast_log.h"
> -#include "./find_match_length.h"
> -#include "./memory.h"
> -#include "./write_bits.h"
> -
> -#if defined(__cplusplus) || defined(c_plusplus)
> -extern "C" {
> -#endif
> -
> -#define MAX_DISTANCE (long)BROTLI_MAX_BACKWARD_LIMIT(18)
> -
> -/* kHashMul32 multiplier has these properties:
> - * The multiplier must be odd. Otherwise we may lose the highest bit.
> - * No long streaks of ones or zeros.
> - * There is no effort to ensure that it is a prime, the oddity is enough
> - for this use.
> - * The number has been tuned heuristically against compression
> benchmarks. */
> -static const uint32_t kHashMul32 = 0x1E35A7BD;
> -
> -static BROTLI_INLINE uint32_t Hash(const uint8_t* p, size_t shift) {
> - const uint64_t h = (BROTLI_UNALIGNED_LOAD64LE(p) << 24) *
> kHashMul32;
> - return (uint32_t)(h >> shift);
> -}
> -
> -static BROTLI_INLINE uint32_t HashBytesAtOffset(
> - uint64_t v, int offset, size_t shift) {
> - BROTLI_DCHECK(offset >= 0);
> - BROTLI_DCHECK(offset <= 3);
> - {
> - const uint64_t h = ((v >> (8 * offset)) << 24) * kHashMul32;
> - return (uint32_t)(h >> shift);
> - }
> -}
> -
> -static BROTLI_INLINE BROTLI_BOOL IsMatch(const uint8_t* p1, const
> uint8_t* p2) {
> - return TO_BROTLI_BOOL(
> - BrotliUnalignedRead32(p1) == BrotliUnalignedRead32(p2) &&
> - p1[4] == p2[4]);
> -}
> -
> -/* Builds a literal prefix code into "depths" and "bits" based on the statistics
> - of the "input" string and stores it into the bit stream.
> - Note that the prefix code here is built from the pre-LZ77 input, therefore
> - we can only approximate the statistics of the actual literal stream.
> - Moreover, for long inputs we build a histogram from a sample of the input
> - and thus have to assign a non-zero depth for each literal.
> - Returns estimated compression ratio millibytes/char for encoding given
> input
> - with generated code. */
> -static size_t BuildAndStoreLiteralPrefixCode(MemoryManager* m,
> - const uint8_t* input,
> - const size_t input_size,
> - uint8_t depths[256],
> - uint16_t bits[256],
> - size_t* storage_ix,
> - uint8_t* storage) {
> - uint32_t histogram[256] = { 0 };
> - size_t histogram_total;
> - size_t i;
> - if (input_size < (1 << 15)) {
> - for (i = 0; i < input_size; ++i) {
> - ++histogram[input[i]];
> - }
> - histogram_total = input_size;
> - for (i = 0; i < 256; ++i) {
> - /* We weigh the first 11 samples with weight 3 to account for the
> - balancing effect of the LZ77 phase on the histogram. */
> - const uint32_t adjust = 2 * BROTLI_MIN(uint32_t, histogram[i], 11u);
> - histogram[i] += adjust;
> - histogram_total += adjust;
> - }
> - } else {
> - static const size_t kSampleRate = 29;
> - for (i = 0; i < input_size; i += kSampleRate) {
> - ++histogram[input[i]];
> - }
> - histogram_total = (input_size + kSampleRate - 1) / kSampleRate;
> - for (i = 0; i < 256; ++i) {
> - /* We add 1 to each population count to avoid 0 bit depths (since this is
> - only a sample and we don't know if the symbol appears or not), and we
> - weigh the first 11 samples with weight 3 to account for the balancing
> - effect of the LZ77 phase on the histogram (more frequent symbols are
> - more likely to be in backward references instead as literals). */
> - const uint32_t adjust = 1 + 2 * BROTLI_MIN(uint32_t, histogram[i], 11u);
> - histogram[i] += adjust;
> - histogram_total += adjust;
> - }
> - }
> - BrotliBuildAndStoreHuffmanTreeFast(m, histogram, histogram_total,
> - /* max_bits = */ 8,
> - depths, bits, storage_ix, storage);
> - if (BROTLI_IS_OOM(m)) return 0;
> - {
> - size_t literal_ratio = 0;
> - for (i = 0; i < 256; ++i) {
> - if (histogram[i]) literal_ratio += histogram[i] * depths[i];
> - }
> - /* Estimated encoding ratio, millibytes per symbol. */
> - return (literal_ratio * 125) / histogram_total;
> - }
> -}
> -
> -/* Builds a command and distance prefix code (each 64 symbols) into
> "depth" and
> - "bits" based on "histogram" and stores it into the bit stream. */
> -static void BuildAndStoreCommandPrefixCode(const uint32_t
> histogram[128],
> - uint8_t depth[128], uint16_t bits[128], size_t* storage_ix,
> - uint8_t* storage) {
> - /* Tree size for building a tree over 64 symbols is 2 * 64 + 1. */
> - HuffmanTree tree[129];
> - uint8_t cmd_depth[BROTLI_NUM_COMMAND_SYMBOLS] = { 0 };
> - uint16_t cmd_bits[64];
> -
> - BrotliCreateHuffmanTree(histogram, 64, 15, tree, depth);
> - BrotliCreateHuffmanTree(&histogram[64], 64, 14, tree, &depth[64]);
> - /* We have to jump through a few hoops here in order to compute
> - the command bits because the symbols are in a different order than in
> - the full alphabet. This looks complicated, but having the symbols
> - in this order in the command bits saves a few branches in the Emit*
> - functions. */
> - memcpy(cmd_depth, depth, 24);
> - memcpy(cmd_depth + 24, depth + 40, 8);
> - memcpy(cmd_depth + 32, depth + 24, 8);
> - memcpy(cmd_depth + 40, depth + 48, 8);
> - memcpy(cmd_depth + 48, depth + 32, 8);
> - memcpy(cmd_depth + 56, depth + 56, 8);
> - BrotliConvertBitDepthsToSymbols(cmd_depth, 64, cmd_bits);
> - memcpy(bits, cmd_bits, 48);
> - memcpy(bits + 24, cmd_bits + 32, 16);
> - memcpy(bits + 32, cmd_bits + 48, 16);
> - memcpy(bits + 40, cmd_bits + 24, 16);
> - memcpy(bits + 48, cmd_bits + 40, 16);
> - memcpy(bits + 56, cmd_bits + 56, 16);
> - BrotliConvertBitDepthsToSymbols(&depth[64], 64, &bits[64]);
> - {
> - /* Create the bit length array for the full command alphabet. */
> - size_t i;
> - memset(cmd_depth, 0, 64); /* only 64 first values were used */
> - memcpy(cmd_depth, depth, 8);
> - memcpy(cmd_depth + 64, depth + 8, 8);
> - memcpy(cmd_depth + 128, depth + 16, 8);
> - memcpy(cmd_depth + 192, depth + 24, 8);
> - memcpy(cmd_depth + 384, depth + 32, 8);
> - for (i = 0; i < 8; ++i) {
> - cmd_depth[128 + 8 * i] = depth[40 + i];
> - cmd_depth[256 + 8 * i] = depth[48 + i];
> - cmd_depth[448 + 8 * i] = depth[56 + i];
> - }
> - BrotliStoreHuffmanTree(
> - cmd_depth, BROTLI_NUM_COMMAND_SYMBOLS, tree, storage_ix,
> storage);
> - }
> - BrotliStoreHuffmanTree(&depth[64], 64, tree, storage_ix, storage);
> -}
> -
> -/* REQUIRES: insertlen < 6210 */
> -static BROTLI_INLINE void EmitInsertLen(size_t insertlen,
> - const uint8_t depth[128],
> - const uint16_t bits[128],
> - uint32_t histo[128],
> - size_t* storage_ix,
> - uint8_t* storage) {
> - if (insertlen < 6) {
> - const size_t code = insertlen + 40;
> - BrotliWriteBits(depth[code], bits[code], storage_ix, storage);
> - ++histo[code];
> - } else if (insertlen < 130) {
> - const size_t tail = insertlen - 2;
> - const uint32_t nbits = Log2FloorNonZero(tail) - 1u;
> - const size_t prefix = tail >> nbits;
> - const size_t inscode = (nbits << 1) + prefix + 42;
> - BrotliWriteBits(depth[inscode], bits[inscode], storage_ix, storage);
> - BrotliWriteBits(nbits, tail - (prefix << nbits), storage_ix, storage);
> - ++histo[inscode];
> - } else if (insertlen < 2114) {
> - const size_t tail = insertlen - 66;
> - const uint32_t nbits = Log2FloorNonZero(tail);
> - const size_t code = nbits + 50;
> - BrotliWriteBits(depth[code], bits[code], storage_ix, storage);
> - BrotliWriteBits(nbits, tail - ((size_t)1 << nbits), storage_ix, storage);
> - ++histo[code];
> - } else {
> - BrotliWriteBits(depth[61], bits[61], storage_ix, storage);
> - BrotliWriteBits(12, insertlen - 2114, storage_ix, storage);
> - ++histo[61];
> - }
> -}
> -
> -static BROTLI_INLINE void EmitLongInsertLen(size_t insertlen,
> - const uint8_t depth[128],
> - const uint16_t bits[128],
> - uint32_t histo[128],
> - size_t* storage_ix,
> - uint8_t* storage) {
> - if (insertlen < 22594) {
> - BrotliWriteBits(depth[62], bits[62], storage_ix, storage);
> - BrotliWriteBits(14, insertlen - 6210, storage_ix, storage);
> - ++histo[62];
> - } else {
> - BrotliWriteBits(depth[63], bits[63], storage_ix, storage);
> - BrotliWriteBits(24, insertlen - 22594, storage_ix, storage);
> - ++histo[63];
> - }
> -}
> -
> -static BROTLI_INLINE void EmitCopyLen(size_t copylen,
> - const uint8_t depth[128],
> - const uint16_t bits[128],
> - uint32_t histo[128],
> - size_t* storage_ix,
> - uint8_t* storage) {
> - if (copylen < 10) {
> - BrotliWriteBits(
> - depth[copylen + 14], bits[copylen + 14], storage_ix, storage);
> - ++histo[copylen + 14];
> - } else if (copylen < 134) {
> - const size_t tail = copylen - 6;
> - const uint32_t nbits = Log2FloorNonZero(tail) - 1u;
> - const size_t prefix = tail >> nbits;
> - const size_t code = (nbits << 1) + prefix + 20;
> - BrotliWriteBits(depth[code], bits[code], storage_ix, storage);
> - BrotliWriteBits(nbits, tail - (prefix << nbits), storage_ix, storage);
> - ++histo[code];
> - } else if (copylen < 2118) {
> - const size_t tail = copylen - 70;
> - const uint32_t nbits = Log2FloorNonZero(tail);
> - const size_t code = nbits + 28;
> - BrotliWriteBits(depth[code], bits[code], storage_ix, storage);
> - BrotliWriteBits(nbits, tail - ((size_t)1 << nbits), storage_ix, storage);
> - ++histo[code];
> - } else {
> - BrotliWriteBits(depth[39], bits[39], storage_ix, storage);
> - BrotliWriteBits(24, copylen - 2118, storage_ix, storage);
> - ++histo[39];
> - }
> -}
> -
> -static BROTLI_INLINE void EmitCopyLenLastDistance(size_t copylen,
> - const uint8_t depth[128],
> - const uint16_t bits[128],
> - uint32_t histo[128],
> - size_t* storage_ix,
> - uint8_t* storage) {
> - if (copylen < 12) {
> - BrotliWriteBits(depth[copylen - 4], bits[copylen - 4], storage_ix, storage);
> - ++histo[copylen - 4];
> - } else if (copylen < 72) {
> - const size_t tail = copylen - 8;
> - const uint32_t nbits = Log2FloorNonZero(tail) - 1;
> - const size_t prefix = tail >> nbits;
> - const size_t code = (nbits << 1) + prefix + 4;
> - BrotliWriteBits(depth[code], bits[code], storage_ix, storage);
> - BrotliWriteBits(nbits, tail - (prefix << nbits), storage_ix, storage);
> - ++histo[code];
> - } else if (copylen < 136) {
> - const size_t tail = copylen - 8;
> - const size_t code = (tail >> 5) + 30;
> - BrotliWriteBits(depth[code], bits[code], storage_ix, storage);
> - BrotliWriteBits(5, tail & 31, storage_ix, storage);
> - BrotliWriteBits(depth[64], bits[64], storage_ix, storage);
> - ++histo[code];
> - ++histo[64];
> - } else if (copylen < 2120) {
> - const size_t tail = copylen - 72;
> - const uint32_t nbits = Log2FloorNonZero(tail);
> - const size_t code = nbits + 28;
> - BrotliWriteBits(depth[code], bits[code], storage_ix, storage);
> - BrotliWriteBits(nbits, tail - ((size_t)1 << nbits), storage_ix, storage);
> - BrotliWriteBits(depth[64], bits[64], storage_ix, storage);
> - ++histo[code];
> - ++histo[64];
> - } else {
> - BrotliWriteBits(depth[39], bits[39], storage_ix, storage);
> - BrotliWriteBits(24, copylen - 2120, storage_ix, storage);
> - BrotliWriteBits(depth[64], bits[64], storage_ix, storage);
> - ++histo[39];
> - ++histo[64];
> - }
> -}
> -
> -static BROTLI_INLINE void EmitDistance(size_t distance,
> - const uint8_t depth[128],
> - const uint16_t bits[128],
> - uint32_t histo[128],
> - size_t* storage_ix, uint8_t* storage) {
> - const size_t d = distance + 3;
> - const uint32_t nbits = Log2FloorNonZero(d) - 1u;
> - const size_t prefix = (d >> nbits) & 1;
> - const size_t offset = (2 + prefix) << nbits;
> - const size_t distcode = 2 * (nbits - 1) + prefix + 80;
> - BrotliWriteBits(depth[distcode], bits[distcode], storage_ix, storage);
> - BrotliWriteBits(nbits, d - offset, storage_ix, storage);
> - ++histo[distcode];
> -}
> -
> -static BROTLI_INLINE void EmitLiterals(const uint8_t* input, const size_t len,
> - const uint8_t depth[256],
> - const uint16_t bits[256],
> - size_t* storage_ix, uint8_t* storage) {
> - size_t j;
> - for (j = 0; j < len; j++) {
> - const uint8_t lit = input[j];
> - BrotliWriteBits(depth[lit], bits[lit], storage_ix, storage);
> - }
> -}
> -
> -/* REQUIRES: len <= 1 << 24. */
> -static void BrotliStoreMetaBlockHeader(
> - size_t len, BROTLI_BOOL is_uncompressed, size_t* storage_ix,
> - uint8_t* storage) {
> - size_t nibbles = 6;
> - /* ISLAST */
> - BrotliWriteBits(1, 0, storage_ix, storage);
> - if (len <= (1U << 16)) {
> - nibbles = 4;
> - } else if (len <= (1U << 20)) {
> - nibbles = 5;
> - }
> - BrotliWriteBits(2, nibbles - 4, storage_ix, storage);
> - BrotliWriteBits(nibbles * 4, len - 1, storage_ix, storage);
> - /* ISUNCOMPRESSED */
> - BrotliWriteBits(1, (uint64_t)is_uncompressed, storage_ix, storage);
> -}
> -
> -static void UpdateBits(size_t n_bits, uint32_t bits, size_t pos,
> - uint8_t* array) {
> - while (n_bits > 0) {
> - size_t byte_pos = pos >> 3;
> - size_t n_unchanged_bits = pos & 7;
> - size_t n_changed_bits = BROTLI_MIN(size_t, n_bits, 8 -
> n_unchanged_bits);
> - size_t total_bits = n_unchanged_bits + n_changed_bits;
> - uint32_t mask =
> - (~((1u << total_bits) - 1u)) | ((1u << n_unchanged_bits) - 1u);
> - uint32_t unchanged_bits = array[byte_pos] & mask;
> - uint32_t changed_bits = bits & ((1u << n_changed_bits) - 1u);
> - array[byte_pos] =
> - (uint8_t)((changed_bits << n_unchanged_bits) | unchanged_bits);
> - n_bits -= n_changed_bits;
> - bits >>= n_changed_bits;
> - pos += n_changed_bits;
> - }
> -}
> -
> -static void RewindBitPosition(const size_t new_storage_ix,
> - size_t* storage_ix, uint8_t* storage) {
> - const size_t bitpos = new_storage_ix & 7;
> - const size_t mask = (1u << bitpos) - 1;
> - storage[new_storage_ix >> 3] &= (uint8_t)mask;
> - *storage_ix = new_storage_ix;
> -}
> -
> -static BROTLI_BOOL ShouldMergeBlock(
> - const uint8_t* data, size_t len, const uint8_t* depths) {
> - size_t histo[256] = { 0 };
> - static const size_t kSampleRate = 43;
> - size_t i;
> - for (i = 0; i < len; i += kSampleRate) {
> - ++histo[data[i]];
> - }
> - {
> - const size_t total = (len + kSampleRate - 1) / kSampleRate;
> - double r = (FastLog2(total) + 0.5) * (double)total + 200;
> - for (i = 0; i < 256; ++i) {
> - r -= (double)histo[i] * (depths[i] + FastLog2(histo[i]));
> - }
> - return TO_BROTLI_BOOL(r >= 0.0);
> - }
> -}
> -
> -/* Acceptable loss for uncompressible speedup is 2% */
> -#define MIN_RATIO 980
> -
> -static BROTLI_INLINE BROTLI_BOOL ShouldUseUncompressedMode(
> - const uint8_t* metablock_start, const uint8_t* next_emit,
> - const size_t insertlen, const size_t literal_ratio) {
> - const size_t compressed = (size_t)(next_emit - metablock_start);
> - if (compressed * 50 > insertlen) {
> - return BROTLI_FALSE;
> - } else {
> - return TO_BROTLI_BOOL(literal_ratio > MIN_RATIO);
> - }
> -}
> -
> -static void EmitUncompressedMetaBlock(const uint8_t* begin, const
> uint8_t* end,
> - const size_t storage_ix_start,
> - size_t* storage_ix, uint8_t* storage) {
> - const size_t len = (size_t)(end - begin);
> - RewindBitPosition(storage_ix_start, storage_ix, storage);
> - BrotliStoreMetaBlockHeader(len, 1, storage_ix, storage);
> - *storage_ix = (*storage_ix + 7u) & ~7u;
> - memcpy(&storage[*storage_ix >> 3], begin, len);
> - *storage_ix += len << 3;
> - storage[*storage_ix >> 3] = 0;
> -}
> -
> -static uint32_t kCmdHistoSeed[128] = {
> - 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1,
> - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1,
> - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0,
> - 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
> - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
> - 1, 1, 1, 1, 0, 0, 0, 0,
> -};
> -
> -static BROTLI_INLINE void BrotliCompressFragmentFastImpl(
> - MemoryManager* m, const uint8_t* input, size_t input_size,
> - BROTLI_BOOL is_last, int* table, size_t table_bits, uint8_t
> cmd_depth[128],
> - uint16_t cmd_bits[128], size_t* cmd_code_numbits, uint8_t* cmd_code,
> - size_t* storage_ix, uint8_t* storage) {
> - uint32_t cmd_histo[128];
> - const uint8_t* ip_end;
> -
> - /* "next_emit" is a pointer to the first byte that is not covered by a
> - previous copy. Bytes between "next_emit" and the start of the next copy
> or
> - the end of the input will be emitted as literal bytes. */
> - const uint8_t* next_emit = input;
> - /* Save the start of the first block for position and distance computations.
> - */
> - const uint8_t* base_ip = input;
> -
> - static const size_t kFirstBlockSize = 3 << 15;
> - static const size_t kMergeBlockSize = 1 << 16;
> -
> - const size_t kInputMarginBytes = BROTLI_WINDOW_GAP;
> - const size_t kMinMatchLen = 5;
> -
> - const uint8_t* metablock_start = input;
> - size_t block_size = BROTLI_MIN(size_t, input_size, kFirstBlockSize);
> - size_t total_block_size = block_size;
> - /* Save the bit position of the MLEN field of the meta-block header, so that
> - we can update it later if we decide to extend this meta-block. */
> - size_t mlen_storage_ix = *storage_ix + 3;
> -
> - uint8_t lit_depth[256];
> - uint16_t lit_bits[256];
> -
> - size_t literal_ratio;
> -
> - const uint8_t* ip;
> - int last_distance;
> -
> - const size_t shift = 64u - table_bits;
> -
> - BrotliStoreMetaBlockHeader(block_size, 0, storage_ix, storage);
> - /* No block splits, no contexts. */
> - BrotliWriteBits(13, 0, storage_ix, storage);
> -
> - literal_ratio = BuildAndStoreLiteralPrefixCode(
> - m, input, block_size, lit_depth, lit_bits, storage_ix, storage);
> - if (BROTLI_IS_OOM(m)) return;
> -
> - {
> - /* Store the pre-compressed command and distance prefix codes. */
> - size_t i;
> - for (i = 0; i + 7 < *cmd_code_numbits; i += 8) {
> - BrotliWriteBits(8, cmd_code[i >> 3], storage_ix, storage);
> - }
> - }
> - BrotliWriteBits(*cmd_code_numbits & 7,
> cmd_code[*cmd_code_numbits >> 3],
> - storage_ix, storage);
> -
> - emit_commands:
> - /* Initialize the command and distance histograms. We will gather
> - statistics of command and distance codes during the processing
> - of this block and use it to update the command and distance
> - prefix codes for the next block. */
> - memcpy(cmd_histo, kCmdHistoSeed, sizeof(kCmdHistoSeed));
> -
> - /* "ip" is the input pointer. */
> - ip = input;
> - last_distance = -1;
> - ip_end = input + block_size;
> -
> - if (BROTLI_PREDICT_TRUE(block_size >= kInputMarginBytes)) {
> - /* For the last block, we need to keep a 16 bytes margin so that we can be
> - sure that all distances are at most window size - 16.
> - For all other blocks, we only need to keep a margin of 5 bytes so that
> - we don't go over the block size with a copy. */
> - const size_t len_limit = BROTLI_MIN(size_t, block_size - kMinMatchLen,
> - input_size - kInputMarginBytes);
> - const uint8_t* ip_limit = input + len_limit;
> -
> - uint32_t next_hash;
> - for (next_hash = Hash(++ip, shift); ; ) {
> - /* Step 1: Scan forward in the input looking for a 5-byte-long match.
> - If we get close to exhausting the input then goto emit_remainder.
> -
> - Heuristic match skipping: If 32 bytes are scanned with no matches
> - found, start looking only at every other byte. If 32 more bytes are
> - scanned, look at every third byte, etc.. When a match is found,
> - immediately go back to looking at every byte. This is a small loss
> - (~5% performance, ~0.1% density) for compressible data due to more
> - bookkeeping, but for non-compressible data (such as JPEG) it's a huge
> - win since the compressor quickly "realizes" the data is incompressible
> - and doesn't bother looking for matches everywhere.
> -
> - The "skip" variable keeps track of how many bytes there are since the
> - last match; dividing it by 32 (i.e. right-shifting by five) gives the
> - number of bytes to move ahead for each iteration. */
> - uint32_t skip = 32;
> -
> - const uint8_t* next_ip = ip;
> - const uint8_t* candidate;
> - BROTLI_DCHECK(next_emit < ip);
> -trawl:
> - do {
> - uint32_t hash = next_hash;
> - uint32_t bytes_between_hash_lookups = skip++ >> 5;
> - BROTLI_DCHECK(hash == Hash(next_ip, shift));
> - ip = next_ip;
> - next_ip = ip + bytes_between_hash_lookups;
> - if (BROTLI_PREDICT_FALSE(next_ip > ip_limit)) {
> - goto emit_remainder;
> - }
> - next_hash = Hash(next_ip, shift);
> - candidate = ip - last_distance;
> - if (IsMatch(ip, candidate)) {
> - if (BROTLI_PREDICT_TRUE(candidate < ip)) {
> - table[hash] = (int)(ip - base_ip);
> - break;
> - }
> - }
> - candidate = base_ip + table[hash];
> - BROTLI_DCHECK(candidate >= base_ip);
> - BROTLI_DCHECK(candidate < ip);
> -
> - table[hash] = (int)(ip - base_ip);
> - } while (BROTLI_PREDICT_TRUE(!IsMatch(ip, candidate)));
> -
> - /* Check copy distance. If candidate is not feasible, continue search.
> - Checking is done outside of hot loop to reduce overhead. */
> - if (ip - candidate > MAX_DISTANCE) goto trawl;
> -
> - /* Step 2: Emit the found match together with the literal bytes from
> - "next_emit" to the bit stream, and then see if we can find a next match
> - immediately afterwards. Repeat until we find no match for the input
> - without emitting some literal bytes. */
> -
> - {
> - /* We have a 5-byte match at ip, and we need to emit bytes in
> - [next_emit, ip). */
> - const uint8_t* base = ip;
> - size_t matched = 5 + FindMatchLengthWithLimit(
> - candidate + 5, ip + 5, (size_t)(ip_end - ip) - 5);
> - int distance = (int)(base - candidate); /* > 0 */
> - size_t insert = (size_t)(base - next_emit);
> - ip += matched;
> - BROTLI_DCHECK(0 == memcmp(base, candidate, matched));
> - if (BROTLI_PREDICT_TRUE(insert < 6210)) {
> - EmitInsertLen(insert, cmd_depth, cmd_bits, cmd_histo,
> - storage_ix, storage);
> - } else if (ShouldUseUncompressedMode(metablock_start, next_emit,
> insert,
> - literal_ratio)) {
> - EmitUncompressedMetaBlock(metablock_start, base,
> mlen_storage_ix - 3,
> - storage_ix, storage);
> - input_size -= (size_t)(base - input);
> - input = base;
> - next_emit = input;
> - goto next_block;
> - } else {
> - EmitLongInsertLen(insert, cmd_depth, cmd_bits, cmd_histo,
> - storage_ix, storage);
> - }
> - EmitLiterals(next_emit, insert, lit_depth, lit_bits,
> - storage_ix, storage);
> - if (distance == last_distance) {
> - BrotliWriteBits(cmd_depth[64], cmd_bits[64], storage_ix, storage);
> - ++cmd_histo[64];
> - } else {
> - EmitDistance((size_t)distance, cmd_depth, cmd_bits,
> - cmd_histo, storage_ix, storage);
> - last_distance = distance;
> - }
> - EmitCopyLenLastDistance(matched, cmd_depth, cmd_bits, cmd_histo,
> - storage_ix, storage);
> -
> - next_emit = ip;
> - if (BROTLI_PREDICT_FALSE(ip >= ip_limit)) {
> - goto emit_remainder;
> - }
> - /* We could immediately start working at ip now, but to improve
> - compression we first update "table" with the hashes of some positions
> - within the last copy. */
> - {
> - uint64_t input_bytes = BROTLI_UNALIGNED_LOAD64LE(ip - 3);
> - uint32_t prev_hash = HashBytesAtOffset(input_bytes, 0, shift);
> - uint32_t cur_hash = HashBytesAtOffset(input_bytes, 3, shift);
> - table[prev_hash] = (int)(ip - base_ip - 3);
> - prev_hash = HashBytesAtOffset(input_bytes, 1, shift);
> - table[prev_hash] = (int)(ip - base_ip - 2);
> - prev_hash = HashBytesAtOffset(input_bytes, 2, shift);
> - table[prev_hash] = (int)(ip - base_ip - 1);
> -
> - candidate = base_ip + table[cur_hash];
> - table[cur_hash] = (int)(ip - base_ip);
> - }
> - }
> -
> - while (IsMatch(ip, candidate)) {
> - /* We have a 5-byte match at ip, and no need to emit any literal bytes
> - prior to ip. */
> - const uint8_t* base = ip;
> - size_t matched = 5 + FindMatchLengthWithLimit(
> - candidate + 5, ip + 5, (size_t)(ip_end - ip) - 5);
> - if (ip - candidate > MAX_DISTANCE) break;
> - ip += matched;
> - last_distance = (int)(base - candidate); /* > 0 */
> - BROTLI_DCHECK(0 == memcmp(base, candidate, matched));
> - EmitCopyLen(matched, cmd_depth, cmd_bits, cmd_histo,
> - storage_ix, storage);
> - EmitDistance((size_t)last_distance, cmd_depth, cmd_bits,
> - cmd_histo, storage_ix, storage);
> -
> - next_emit = ip;
> - if (BROTLI_PREDICT_FALSE(ip >= ip_limit)) {
> - goto emit_remainder;
> - }
> - /* We could immediately start working at ip now, but to improve
> - compression we first update "table" with the hashes of some positions
> - within the last copy. */
> - {
> - uint64_t input_bytes = BROTLI_UNALIGNED_LOAD64LE(ip - 3);
> - uint32_t prev_hash = HashBytesAtOffset(input_bytes, 0, shift);
> - uint32_t cur_hash = HashBytesAtOffset(input_bytes, 3, shift);
> - table[prev_hash] = (int)(ip - base_ip - 3);
> - prev_hash = HashBytesAtOffset(input_bytes, 1, shift);
> - table[prev_hash] = (int)(ip - base_ip - 2);
> - prev_hash = HashBytesAtOffset(input_bytes, 2, shift);
> - table[prev_hash] = (int)(ip - base_ip - 1);
> -
> - candidate = base_ip + table[cur_hash];
> - table[cur_hash] = (int)(ip - base_ip);
> - }
> - }
> -
> - next_hash = Hash(++ip, shift);
> - }
> - }
> -
> - emit_remainder:
> - BROTLI_DCHECK(next_emit <= ip_end);
> - input += block_size;
> - input_size -= block_size;
> - block_size = BROTLI_MIN(size_t, input_size, kMergeBlockSize);
> -
> - /* Decide if we want to continue this meta-block instead of emitting the
> - last insert-only command. */
> - if (input_size > 0 &&
> - total_block_size + block_size <= (1 << 20) &&
> - ShouldMergeBlock(input, block_size, lit_depth)) {
> - BROTLI_DCHECK(total_block_size > (1 << 16));
> - /* Update the size of the current meta-block and continue emitting
> commands.
> - We can do this because the current size and the new size both have 5
> - nibbles. */
> - total_block_size += block_size;
> - UpdateBits(20, (uint32_t)(total_block_size - 1), mlen_storage_ix, storage);
> - goto emit_commands;
> - }
> -
> - /* Emit the remaining bytes as literals. */
> - if (next_emit < ip_end) {
> - const size_t insert = (size_t)(ip_end - next_emit);
> - if (BROTLI_PREDICT_TRUE(insert < 6210)) {
> - EmitInsertLen(insert, cmd_depth, cmd_bits, cmd_histo,
> - storage_ix, storage);
> - EmitLiterals(next_emit, insert, lit_depth, lit_bits, storage_ix, storage);
> - } else if (ShouldUseUncompressedMode(metablock_start, next_emit,
> insert,
> - literal_ratio)) {
> - EmitUncompressedMetaBlock(metablock_start, ip_end,
> mlen_storage_ix - 3,
> - storage_ix, storage);
> - } else {
> - EmitLongInsertLen(insert, cmd_depth, cmd_bits, cmd_histo,
> - storage_ix, storage);
> - EmitLiterals(next_emit, insert, lit_depth, lit_bits,
> - storage_ix, storage);
> - }
> - }
> - next_emit = ip_end;
> -
> -next_block:
> - /* If we have more data, write a new meta-block header and prefix codes
> and
> - then continue emitting commands. */
> - if (input_size > 0) {
> - metablock_start = input;
> - block_size = BROTLI_MIN(size_t, input_size, kFirstBlockSize);
> - total_block_size = block_size;
> - /* Save the bit position of the MLEN field of the meta-block header, so
> that
> - we can update it later if we decide to extend this meta-block. */
> - mlen_storage_ix = *storage_ix + 3;
> - BrotliStoreMetaBlockHeader(block_size, 0, storage_ix, storage);
> - /* No block splits, no contexts. */
> - BrotliWriteBits(13, 0, storage_ix, storage);
> - literal_ratio = BuildAndStoreLiteralPrefixCode(
> - m, input, block_size, lit_depth, lit_bits, storage_ix, storage);
> - if (BROTLI_IS_OOM(m)) return;
> - BuildAndStoreCommandPrefixCode(cmd_histo, cmd_depth, cmd_bits,
> - storage_ix, storage);
> - goto emit_commands;
> - }
> -
> - if (!is_last) {
> - /* If this is not the last block, update the command and distance prefix
> - codes for the next block and store the compressed forms. */
> - cmd_code[0] = 0;
> - *cmd_code_numbits = 0;
> - BuildAndStoreCommandPrefixCode(cmd_histo, cmd_depth, cmd_bits,
> - cmd_code_numbits, cmd_code);
> - }
> -}
> -
> -#define FOR_TABLE_BITS_(X) X(9) X(11) X(13) X(15)
> -
> -#define BAKE_METHOD_PARAM_(B) \
> -static BROTLI_NOINLINE void BrotliCompressFragmentFastImpl ## B( \
> - MemoryManager* m, const uint8_t* input, size_t input_size, \
> - BROTLI_BOOL is_last, int* table, uint8_t cmd_depth[128], \
> - uint16_t cmd_bits[128], size_t* cmd_code_numbits, uint8_t* cmd_code,
> \
> - size_t* storage_ix, uint8_t* storage) { \
> - BrotliCompressFragmentFastImpl(m, input, input_size, is_last, table, B, \
> - cmd_depth, cmd_bits, cmd_code_numbits, cmd_code, storage_ix,
> storage); \
> -}
> -FOR_TABLE_BITS_(BAKE_METHOD_PARAM_)
> -#undef BAKE_METHOD_PARAM_
> -
> -void BrotliCompressFragmentFast(
> - MemoryManager* m, const uint8_t* input, size_t input_size,
> - BROTLI_BOOL is_last, int* table, size_t table_size, uint8_t
> cmd_depth[128],
> - uint16_t cmd_bits[128], size_t* cmd_code_numbits, uint8_t* cmd_code,
> - size_t* storage_ix, uint8_t* storage) {
> - const size_t initial_storage_ix = *storage_ix;
> - const size_t table_bits = Log2FloorNonZero(table_size);
> -
> - if (input_size == 0) {
> - BROTLI_DCHECK(is_last);
> - BrotliWriteBits(1, 1, storage_ix, storage); /* islast */
> - BrotliWriteBits(1, 1, storage_ix, storage); /* isempty */
> - *storage_ix = (*storage_ix + 7u) & ~7u;
> - return;
> - }
> -
> - switch (table_bits) {
> -#define CASE_(B) \
> - case B: \
> - BrotliCompressFragmentFastImpl ## B( \
> - m, input, input_size, is_last, table, cmd_depth, cmd_bits, \
> - cmd_code_numbits, cmd_code, storage_ix, storage); \
> - break;
> - FOR_TABLE_BITS_(CASE_)
> -#undef CASE_
> - default: BROTLI_DCHECK(0); break;
> - }
> -
> - /* If output is larger than single uncompressed block, rewrite it. */
> - if (*storage_ix - initial_storage_ix > 31 + (input_size << 3)) {
> - EmitUncompressedMetaBlock(input, input + input_size, initial_storage_ix,
> - storage_ix, storage);
> - }
> -
> - if (is_last) {
> - BrotliWriteBits(1, 1, storage_ix, storage); /* islast */
> - BrotliWriteBits(1, 1, storage_ix, storage); /* isempty */
> - *storage_ix = (*storage_ix + 7u) & ~7u;
> - }
> -}
> -
> -#undef FOR_TABLE_BITS_
> -
> -#if defined(__cplusplus) || defined(c_plusplus)
> -} /* extern "C" */
> -#endif
> diff --git
> a/BaseTools/Source/C/BrotliCompress/enc/compress_fragment_two_pass.c
> b/BaseTools/Source/C/BrotliCompress/enc/compress_fragment_two_pass.
> c
> deleted file mode 100644
> index 0d4d3b597eb9..000000000000
> ---
> a/BaseTools/Source/C/BrotliCompress/enc/compress_fragment_two_pass.c
> +++ /dev/null
> @@ -1,645 +0,0 @@
> -/* Copyright 2015 Google Inc. All Rights Reserved.
> -
> - Distributed under MIT license.
> - See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
> -*/
> -
> -/* Function for fast encoding of an input fragment, independently from the
> input
> - history. This function uses two-pass processing: in the first pass we save
> - the found backward matches and literal bytes into a buffer, and in the
> - second pass we emit them into the bit stream using prefix codes built
> based
> - on the actual command and literal byte histograms. */
> -
> -#include "./compress_fragment_two_pass.h"
> -
> -#include <string.h> /* memcmp, memcpy, memset */
> -
> -#include "../common/constants.h"
> -#include "../common/platform.h"
> -#include <brotli/types.h>
> -#include "./bit_cost.h"
> -#include "./brotli_bit_stream.h"
> -#include "./entropy_encode.h"
> -#include "./fast_log.h"
> -#include "./find_match_length.h"
> -#include "./memory.h"
> -#include "./write_bits.h"
> -
> -#if defined(__cplusplus) || defined(c_plusplus)
> -extern "C" {
> -#endif
> -
> -#define MAX_DISTANCE (long)BROTLI_MAX_BACKWARD_LIMIT(18)
> -
> -/* kHashMul32 multiplier has these properties:
> - * The multiplier must be odd. Otherwise we may lose the highest bit.
> - * No long streaks of ones or zeros.
> - * There is no effort to ensure that it is a prime, the oddity is enough
> - for this use.
> - * The number has been tuned heuristically against compression
> benchmarks. */
> -static const uint32_t kHashMul32 = 0x1E35A7BD;
> -
> -static BROTLI_INLINE uint32_t Hash(const uint8_t* p,
> - size_t shift, size_t length) {
> - const uint64_t h =
> - (BROTLI_UNALIGNED_LOAD64LE(p) << ((8 - length) * 8)) * kHashMul32;
> - return (uint32_t)(h >> shift);
> -}
> -
> -static BROTLI_INLINE uint32_t HashBytesAtOffset(uint64_t v, size_t offset,
> - size_t shift, size_t length) {
> - BROTLI_DCHECK(offset <= 8 - length);
> - {
> - const uint64_t h = ((v >> (8 * offset)) << ((8 - length) * 8)) * kHashMul32;
> - return (uint32_t)(h >> shift);
> - }
> -}
> -
> -static BROTLI_INLINE BROTLI_BOOL IsMatch(const uint8_t* p1, const
> uint8_t* p2,
> - size_t length) {
> - if (BrotliUnalignedRead32(p1) == BrotliUnalignedRead32(p2)) {
> - if (length == 4) return BROTLI_TRUE;
> - return TO_BROTLI_BOOL(p1[4] == p2[4] && p1[5] == p2[5]);
> - }
> - return BROTLI_FALSE;
> -}
> -
> -/* Builds a command and distance prefix code (each 64 symbols) into
> "depth" and
> - "bits" based on "histogram" and stores it into the bit stream. */
> -static void BuildAndStoreCommandPrefixCode(
> - const uint32_t histogram[128],
> - uint8_t depth[128], uint16_t bits[128],
> - size_t* storage_ix, uint8_t* storage) {
> - /* Tree size for building a tree over 64 symbols is 2 * 64 + 1. */
> - HuffmanTree tree[129];
> - uint8_t cmd_depth[BROTLI_NUM_COMMAND_SYMBOLS] = { 0 };
> - uint16_t cmd_bits[64];
> - BrotliCreateHuffmanTree(histogram, 64, 15, tree, depth);
> - BrotliCreateHuffmanTree(&histogram[64], 64, 14, tree, &depth[64]);
> - /* We have to jump through a few hoops here in order to compute
> - the command bits because the symbols are in a different order than in
> - the full alphabet. This looks complicated, but having the symbols
> - in this order in the command bits saves a few branches in the Emit*
> - functions. */
> - memcpy(cmd_depth, depth + 24, 24);
> - memcpy(cmd_depth + 24, depth, 8);
> - memcpy(cmd_depth + 32, depth + 48, 8);
> - memcpy(cmd_depth + 40, depth + 8, 8);
> - memcpy(cmd_depth + 48, depth + 56, 8);
> - memcpy(cmd_depth + 56, depth + 16, 8);
> - BrotliConvertBitDepthsToSymbols(cmd_depth, 64, cmd_bits);
> - memcpy(bits, cmd_bits + 24, 16);
> - memcpy(bits + 8, cmd_bits + 40, 16);
> - memcpy(bits + 16, cmd_bits + 56, 16);
> - memcpy(bits + 24, cmd_bits, 48);
> - memcpy(bits + 48, cmd_bits + 32, 16);
> - memcpy(bits + 56, cmd_bits + 48, 16);
> - BrotliConvertBitDepthsToSymbols(&depth[64], 64, &bits[64]);
> - {
> - /* Create the bit length array for the full command alphabet. */
> - size_t i;
> - memset(cmd_depth, 0, 64); /* only 64 first values were used */
> - memcpy(cmd_depth, depth + 24, 8);
> - memcpy(cmd_depth + 64, depth + 32, 8);
> - memcpy(cmd_depth + 128, depth + 40, 8);
> - memcpy(cmd_depth + 192, depth + 48, 8);
> - memcpy(cmd_depth + 384, depth + 56, 8);
> - for (i = 0; i < 8; ++i) {
> - cmd_depth[128 + 8 * i] = depth[i];
> - cmd_depth[256 + 8 * i] = depth[8 + i];
> - cmd_depth[448 + 8 * i] = depth[16 + i];
> - }
> - BrotliStoreHuffmanTree(
> - cmd_depth, BROTLI_NUM_COMMAND_SYMBOLS, tree, storage_ix,
> storage);
> - }
> - BrotliStoreHuffmanTree(&depth[64], 64, tree, storage_ix, storage);
> -}
> -
> -static BROTLI_INLINE void EmitInsertLen(
> - uint32_t insertlen, uint32_t** commands) {
> - if (insertlen < 6) {
> - **commands = insertlen;
> - } else if (insertlen < 130) {
> - const uint32_t tail = insertlen - 2;
> - const uint32_t nbits = Log2FloorNonZero(tail) - 1u;
> - const uint32_t prefix = tail >> nbits;
> - const uint32_t inscode = (nbits << 1) + prefix + 2;
> - const uint32_t extra = tail - (prefix << nbits);
> - **commands = inscode | (extra << 8);
> - } else if (insertlen < 2114) {
> - const uint32_t tail = insertlen - 66;
> - const uint32_t nbits = Log2FloorNonZero(tail);
> - const uint32_t code = nbits + 10;
> - const uint32_t extra = tail - (1u << nbits);
> - **commands = code | (extra << 8);
> - } else if (insertlen < 6210) {
> - const uint32_t extra = insertlen - 2114;
> - **commands = 21 | (extra << 8);
> - } else if (insertlen < 22594) {
> - const uint32_t extra = insertlen - 6210;
> - **commands = 22 | (extra << 8);
> - } else {
> - const uint32_t extra = insertlen - 22594;
> - **commands = 23 | (extra << 8);
> - }
> - ++(*commands);
> -}
> -
> -static BROTLI_INLINE void EmitCopyLen(size_t copylen, uint32_t**
> commands) {
> - if (copylen < 10) {
> - **commands = (uint32_t)(copylen + 38);
> - } else if (copylen < 134) {
> - const size_t tail = copylen - 6;
> - const size_t nbits = Log2FloorNonZero(tail) - 1;
> - const size_t prefix = tail >> nbits;
> - const size_t code = (nbits << 1) + prefix + 44;
> - const size_t extra = tail - (prefix << nbits);
> - **commands = (uint32_t)(code | (extra << 8));
> - } else if (copylen < 2118) {
> - const size_t tail = copylen - 70;
> - const size_t nbits = Log2FloorNonZero(tail);
> - const size_t code = nbits + 52;
> - const size_t extra = tail - ((size_t)1 << nbits);
> - **commands = (uint32_t)(code | (extra << 8));
> - } else {
> - const size_t extra = copylen - 2118;
> - **commands = (uint32_t)(63 | (extra << 8));
> - }
> - ++(*commands);
> -}
> -
> -static BROTLI_INLINE void EmitCopyLenLastDistance(
> - size_t copylen, uint32_t** commands) {
> - if (copylen < 12) {
> - **commands = (uint32_t)(copylen + 20);
> - ++(*commands);
> - } else if (copylen < 72) {
> - const size_t tail = copylen - 8;
> - const size_t nbits = Log2FloorNonZero(tail) - 1;
> - const size_t prefix = tail >> nbits;
> - const size_t code = (nbits << 1) + prefix + 28;
> - const size_t extra = tail - (prefix << nbits);
> - **commands = (uint32_t)(code | (extra << 8));
> - ++(*commands);
> - } else if (copylen < 136) {
> - const size_t tail = copylen - 8;
> - const size_t code = (tail >> 5) + 54;
> - const size_t extra = tail & 31;
> - **commands = (uint32_t)(code | (extra << 8));
> - ++(*commands);
> - **commands = 64;
> - ++(*commands);
> - } else if (copylen < 2120) {
> - const size_t tail = copylen - 72;
> - const size_t nbits = Log2FloorNonZero(tail);
> - const size_t code = nbits + 52;
> - const size_t extra = tail - ((size_t)1 << nbits);
> - **commands = (uint32_t)(code | (extra << 8));
> - ++(*commands);
> - **commands = 64;
> - ++(*commands);
> - } else {
> - const size_t extra = copylen - 2120;
> - **commands = (uint32_t)(63 | (extra << 8));
> - ++(*commands);
> - **commands = 64;
> - ++(*commands);
> - }
> -}
> -
> -static BROTLI_INLINE void EmitDistance(uint32_t distance, uint32_t**
> commands) {
> - uint32_t d = distance + 3;
> - uint32_t nbits = Log2FloorNonZero(d) - 1;
> - const uint32_t prefix = (d >> nbits) & 1;
> - const uint32_t offset = (2 + prefix) << nbits;
> - const uint32_t distcode = 2 * (nbits - 1) + prefix + 80;
> - uint32_t extra = d - offset;
> - **commands = distcode | (extra << 8);
> - ++(*commands);
> -}
> -
> -/* REQUIRES: len <= 1 << 24. */
> -static void BrotliStoreMetaBlockHeader(
> - size_t len, BROTLI_BOOL is_uncompressed, size_t* storage_ix,
> - uint8_t* storage) {
> - size_t nibbles = 6;
> - /* ISLAST */
> - BrotliWriteBits(1, 0, storage_ix, storage);
> - if (len <= (1U << 16)) {
> - nibbles = 4;
> - } else if (len <= (1U << 20)) {
> - nibbles = 5;
> - }
> - BrotliWriteBits(2, nibbles - 4, storage_ix, storage);
> - BrotliWriteBits(nibbles * 4, len - 1, storage_ix, storage);
> - /* ISUNCOMPRESSED */
> - BrotliWriteBits(1, (uint64_t)is_uncompressed, storage_ix, storage);
> -}
> -
> -static BROTLI_INLINE void CreateCommands(const uint8_t* input,
> - size_t block_size, size_t input_size, const uint8_t* base_ip, int* table,
> - size_t table_bits, size_t min_match,
> - uint8_t** literals, uint32_t** commands) {
> - /* "ip" is the input pointer. */
> - const uint8_t* ip = input;
> - const size_t shift = 64u - table_bits;
> - const uint8_t* ip_end = input + block_size;
> - /* "next_emit" is a pointer to the first byte that is not covered by a
> - previous copy. Bytes between "next_emit" and the start of the next copy
> or
> - the end of the input will be emitted as literal bytes. */
> - const uint8_t* next_emit = input;
> -
> - int last_distance = -1;
> - const size_t kInputMarginBytes = BROTLI_WINDOW_GAP;
> -
> - if (BROTLI_PREDICT_TRUE(block_size >= kInputMarginBytes)) {
> - /* For the last block, we need to keep a 16 bytes margin so that we can be
> - sure that all distances are at most window size - 16.
> - For all other blocks, we only need to keep a margin of 5 bytes so that
> - we don't go over the block size with a copy. */
> - const size_t len_limit = BROTLI_MIN(size_t, block_size - min_match,
> - input_size - kInputMarginBytes);
> - const uint8_t* ip_limit = input + len_limit;
> -
> - uint32_t next_hash;
> - for (next_hash = Hash(++ip, shift, min_match); ; ) {
> - /* Step 1: Scan forward in the input looking for a 6-byte-long match.
> - If we get close to exhausting the input then goto emit_remainder.
> -
> - Heuristic match skipping: If 32 bytes are scanned with no matches
> - found, start looking only at every other byte. If 32 more bytes are
> - scanned, look at every third byte, etc.. When a match is found,
> - immediately go back to looking at every byte. This is a small loss
> - (~5% performance, ~0.1% density) for compressible data due to more
> - bookkeeping, but for non-compressible data (such as JPEG) it's a huge
> - win since the compressor quickly "realizes" the data is incompressible
> - and doesn't bother looking for matches everywhere.
> -
> - The "skip" variable keeps track of how many bytes there are since the
> - last match; dividing it by 32 (ie. right-shifting by five) gives the
> - number of bytes to move ahead for each iteration. */
> - uint32_t skip = 32;
> -
> - const uint8_t* next_ip = ip;
> - const uint8_t* candidate;
> -
> - BROTLI_DCHECK(next_emit < ip);
> -trawl:
> - do {
> - uint32_t hash = next_hash;
> - uint32_t bytes_between_hash_lookups = skip++ >> 5;
> - ip = next_ip;
> - BROTLI_DCHECK(hash == Hash(ip, shift, min_match));
> - next_ip = ip + bytes_between_hash_lookups;
> - if (BROTLI_PREDICT_FALSE(next_ip > ip_limit)) {
> - goto emit_remainder;
> - }
> - next_hash = Hash(next_ip, shift, min_match);
> - candidate = ip - last_distance;
> - if (IsMatch(ip, candidate, min_match)) {
> - if (BROTLI_PREDICT_TRUE(candidate < ip)) {
> - table[hash] = (int)(ip - base_ip);
> - break;
> - }
> - }
> - candidate = base_ip + table[hash];
> - BROTLI_DCHECK(candidate >= base_ip);
> - BROTLI_DCHECK(candidate < ip);
> -
> - table[hash] = (int)(ip - base_ip);
> - } while (BROTLI_PREDICT_TRUE(!IsMatch(ip, candidate, min_match)));
> -
> - /* Check copy distance. If candidate is not feasible, continue search.
> - Checking is done outside of hot loop to reduce overhead. */
> - if (ip - candidate > MAX_DISTANCE) goto trawl;
> -
> - /* Step 2: Emit the found match together with the literal bytes from
> - "next_emit", and then see if we can find a next match immediately
> - afterwards. Repeat until we find no match for the input
> - without emitting some literal bytes. */
> -
> - {
> - /* We have a 6-byte match at ip, and we need to emit bytes in
> - [next_emit, ip). */
> - const uint8_t* base = ip;
> - size_t matched = min_match + FindMatchLengthWithLimit(
> - candidate + min_match, ip + min_match,
> - (size_t)(ip_end - ip) - min_match);
> - int distance = (int)(base - candidate); /* > 0 */
> - int insert = (int)(base - next_emit);
> - ip += matched;
> - BROTLI_DCHECK(0 == memcmp(base, candidate, matched));
> - EmitInsertLen((uint32_t)insert, commands);
> - memcpy(*literals, next_emit, (size_t)insert);
> - *literals += insert;
> - if (distance == last_distance) {
> - **commands = 64;
> - ++(*commands);
> - } else {
> - EmitDistance((uint32_t)distance, commands);
> - last_distance = distance;
> - }
> - EmitCopyLenLastDistance(matched, commands);
> -
> - next_emit = ip;
> - if (BROTLI_PREDICT_FALSE(ip >= ip_limit)) {
> - goto emit_remainder;
> - }
> - {
> - /* We could immediately start working at ip now, but to improve
> - compression we first update "table" with the hashes of some
> - positions within the last copy. */
> - uint64_t input_bytes;
> - uint32_t cur_hash;
> - uint32_t prev_hash;
> - if (min_match == 4) {
> - input_bytes = BROTLI_UNALIGNED_LOAD64LE(ip - 3);
> - cur_hash = HashBytesAtOffset(input_bytes, 3, shift, min_match);
> - prev_hash = HashBytesAtOffset(input_bytes, 0, shift, min_match);
> - table[prev_hash] = (int)(ip - base_ip - 3);
> - prev_hash = HashBytesAtOffset(input_bytes, 1, shift, min_match);
> - table[prev_hash] = (int)(ip - base_ip - 2);
> - prev_hash = HashBytesAtOffset(input_bytes, 0, shift, min_match);
> - table[prev_hash] = (int)(ip - base_ip - 1);
> - } else {
> - input_bytes = BROTLI_UNALIGNED_LOAD64LE(ip - 5);
> - prev_hash = HashBytesAtOffset(input_bytes, 0, shift, min_match);
> - table[prev_hash] = (int)(ip - base_ip - 5);
> - prev_hash = HashBytesAtOffset(input_bytes, 1, shift, min_match);
> - table[prev_hash] = (int)(ip - base_ip - 4);
> - prev_hash = HashBytesAtOffset(input_bytes, 2, shift, min_match);
> - table[prev_hash] = (int)(ip - base_ip - 3);
> - input_bytes = BROTLI_UNALIGNED_LOAD64LE(ip - 2);
> - cur_hash = HashBytesAtOffset(input_bytes, 2, shift, min_match);
> - prev_hash = HashBytesAtOffset(input_bytes, 0, shift, min_match);
> - table[prev_hash] = (int)(ip - base_ip - 2);
> - prev_hash = HashBytesAtOffset(input_bytes, 1, shift, min_match);
> - table[prev_hash] = (int)(ip - base_ip - 1);
> - }
> -
> - candidate = base_ip + table[cur_hash];
> - table[cur_hash] = (int)(ip - base_ip);
> - }
> - }
> -
> - while (ip - candidate <= MAX_DISTANCE &&
> - IsMatch(ip, candidate, min_match)) {
> - /* We have a 6-byte match at ip, and no need to emit any
> - literal bytes prior to ip. */
> - const uint8_t* base = ip;
> - size_t matched = min_match + FindMatchLengthWithLimit(
> - candidate + min_match, ip + min_match,
> - (size_t)(ip_end - ip) - min_match);
> - ip += matched;
> - last_distance = (int)(base - candidate); /* > 0 */
> - BROTLI_DCHECK(0 == memcmp(base, candidate, matched));
> - EmitCopyLen(matched, commands);
> - EmitDistance((uint32_t)last_distance, commands);
> -
> - next_emit = ip;
> - if (BROTLI_PREDICT_FALSE(ip >= ip_limit)) {
> - goto emit_remainder;
> - }
> - {
> - /* We could immediately start working at ip now, but to improve
> - compression we first update "table" with the hashes of some
> - positions within the last copy. */
> - uint64_t input_bytes;
> - uint32_t cur_hash;
> - uint32_t prev_hash;
> - if (min_match == 4) {
> - input_bytes = BROTLI_UNALIGNED_LOAD64LE(ip - 3);
> - cur_hash = HashBytesAtOffset(input_bytes, 3, shift, min_match);
> - prev_hash = HashBytesAtOffset(input_bytes, 0, shift, min_match);
> - table[prev_hash] = (int)(ip - base_ip - 3);
> - prev_hash = HashBytesAtOffset(input_bytes, 1, shift, min_match);
> - table[prev_hash] = (int)(ip - base_ip - 2);
> - prev_hash = HashBytesAtOffset(input_bytes, 2, shift, min_match);
> - table[prev_hash] = (int)(ip - base_ip - 1);
> - } else {
> - input_bytes = BROTLI_UNALIGNED_LOAD64LE(ip - 5);
> - prev_hash = HashBytesAtOffset(input_bytes, 0, shift, min_match);
> - table[prev_hash] = (int)(ip - base_ip - 5);
> - prev_hash = HashBytesAtOffset(input_bytes, 1, shift, min_match);
> - table[prev_hash] = (int)(ip - base_ip - 4);
> - prev_hash = HashBytesAtOffset(input_bytes, 2, shift, min_match);
> - table[prev_hash] = (int)(ip - base_ip - 3);
> - input_bytes = BROTLI_UNALIGNED_LOAD64LE(ip - 2);
> - cur_hash = HashBytesAtOffset(input_bytes, 2, shift, min_match);
> - prev_hash = HashBytesAtOffset(input_bytes, 0, shift, min_match);
> - table[prev_hash] = (int)(ip - base_ip - 2);
> - prev_hash = HashBytesAtOffset(input_bytes, 1, shift, min_match);
> - table[prev_hash] = (int)(ip - base_ip - 1);
> - }
> -
> - candidate = base_ip + table[cur_hash];
> - table[cur_hash] = (int)(ip - base_ip);
> - }
> - }
> -
> - next_hash = Hash(++ip, shift, min_match);
> - }
> - }
> -
> -emit_remainder:
> - BROTLI_DCHECK(next_emit <= ip_end);
> - /* Emit the remaining bytes as literals. */
> - if (next_emit < ip_end) {
> - const uint32_t insert = (uint32_t)(ip_end - next_emit);
> - EmitInsertLen(insert, commands);
> - memcpy(*literals, next_emit, insert);
> - *literals += insert;
> - }
> -}
> -
> -static void StoreCommands(MemoryManager* m,
> - const uint8_t* literals, const size_t num_literals,
> - const uint32_t* commands, const size_t num_commands,
> - size_t* storage_ix, uint8_t* storage) {
> - static const uint32_t kNumExtraBits[128] = {
> - 0, 0, 0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 7, 8, 9, 10, 12, 14, 24,
> - 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4,
> - 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 7, 8, 9, 10, 24,
> - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
> - 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8,
> - 9, 9, 10, 10, 11, 11, 12, 12, 13, 13, 14, 14, 15, 15, 16, 16,
> - 17, 17, 18, 18, 19, 19, 20, 20, 21, 21, 22, 22, 23, 23, 24, 24,
> - };
> - static const uint32_t kInsertOffset[24] = {
> - 0, 1, 2, 3, 4, 5, 6, 8, 10, 14, 18, 26, 34, 50, 66, 98, 130, 194, 322, 578,
> - 1090, 2114, 6210, 22594,
> - };
> -
> - uint8_t lit_depths[256];
> - uint16_t lit_bits[256];
> - uint32_t lit_histo[256] = { 0 };
> - uint8_t cmd_depths[128] = { 0 };
> - uint16_t cmd_bits[128] = { 0 };
> - uint32_t cmd_histo[128] = { 0 };
> - size_t i;
> - for (i = 0; i < num_literals; ++i) {
> - ++lit_histo[literals[i]];
> - }
> - BrotliBuildAndStoreHuffmanTreeFast(m, lit_histo, num_literals,
> - /* max_bits = */ 8,
> - lit_depths, lit_bits,
> - storage_ix, storage);
> - if (BROTLI_IS_OOM(m)) return;
> -
> - for (i = 0; i < num_commands; ++i) {
> - const uint32_t code = commands[i] & 0xFF;
> - BROTLI_DCHECK(code < 128);
> - ++cmd_histo[code];
> - }
> - cmd_histo[1] += 1;
> - cmd_histo[2] += 1;
> - cmd_histo[64] += 1;
> - cmd_histo[84] += 1;
> - BuildAndStoreCommandPrefixCode(cmd_histo, cmd_depths, cmd_bits,
> - storage_ix, storage);
> -
> - for (i = 0; i < num_commands; ++i) {
> - const uint32_t cmd = commands[i];
> - const uint32_t code = cmd & 0xFF;
> - const uint32_t extra = cmd >> 8;
> - BROTLI_DCHECK(code < 128);
> - BrotliWriteBits(cmd_depths[code], cmd_bits[code], storage_ix, storage);
> - BrotliWriteBits(kNumExtraBits[code], extra, storage_ix, storage);
> - if (code < 24) {
> - const uint32_t insert = kInsertOffset[code] + extra;
> - uint32_t j;
> - for (j = 0; j < insert; ++j) {
> - const uint8_t lit = *literals;
> - BrotliWriteBits(lit_depths[lit], lit_bits[lit], storage_ix, storage);
> - ++literals;
> - }
> - }
> - }
> -}
> -
> -/* Acceptable loss for uncompressible speedup is 2% */
> -#define MIN_RATIO 0.98
> -#define SAMPLE_RATE 43
> -
> -static BROTLI_BOOL ShouldCompress(
> - const uint8_t* input, size_t input_size, size_t num_literals) {
> - double corpus_size = (double)input_size;
> - if (num_literals < MIN_RATIO * corpus_size) {
> - return BROTLI_TRUE;
> - } else {
> - uint32_t literal_histo[256] = { 0 };
> - const double max_total_bit_cost = corpus_size * 8 * MIN_RATIO /
> SAMPLE_RATE;
> - size_t i;
> - for (i = 0; i < input_size; i += SAMPLE_RATE) {
> - ++literal_histo[input[i]];
> - }
> - return TO_BROTLI_BOOL(BitsEntropy(literal_histo, 256) <
> max_total_bit_cost);
> - }
> -}
> -
> -static void RewindBitPosition(const size_t new_storage_ix,
> - size_t* storage_ix, uint8_t* storage) {
> - const size_t bitpos = new_storage_ix & 7;
> - const size_t mask = (1u << bitpos) - 1;
> - storage[new_storage_ix >> 3] &= (uint8_t)mask;
> - *storage_ix = new_storage_ix;
> -}
> -
> -static void EmitUncompressedMetaBlock(const uint8_t* input, size_t
> input_size,
> - size_t* storage_ix, uint8_t* storage) {
> - BrotliStoreMetaBlockHeader(input_size, 1, storage_ix, storage);
> - *storage_ix = (*storage_ix + 7u) & ~7u;
> - memcpy(&storage[*storage_ix >> 3], input, input_size);
> - *storage_ix += input_size << 3;
> - storage[*storage_ix >> 3] = 0;
> -}
> -
> -static BROTLI_INLINE void BrotliCompressFragmentTwoPassImpl(
> - MemoryManager* m, const uint8_t* input, size_t input_size,
> - BROTLI_BOOL is_last, uint32_t* command_buf, uint8_t* literal_buf,
> - int* table, size_t table_bits, size_t min_match,
> - size_t* storage_ix, uint8_t* storage) {
> - /* Save the start of the first block for position and distance computations.
> - */
> - const uint8_t* base_ip = input;
> - BROTLI_UNUSED(is_last);
> -
> - while (input_size > 0) {
> - size_t block_size =
> - BROTLI_MIN(size_t, input_size, kCompressFragmentTwoPassBlockSize);
> - uint32_t* commands = command_buf;
> - uint8_t* literals = literal_buf;
> - size_t num_literals;
> - CreateCommands(input, block_size, input_size, base_ip, table,
> - table_bits, min_match, &literals, &commands);
> - num_literals = (size_t)(literals - literal_buf);
> - if (ShouldCompress(input, block_size, num_literals)) {
> - const size_t num_commands = (size_t)(commands - command_buf);
> - BrotliStoreMetaBlockHeader(block_size, 0, storage_ix, storage);
> - /* No block splits, no contexts. */
> - BrotliWriteBits(13, 0, storage_ix, storage);
> - StoreCommands(m, literal_buf, num_literals, command_buf,
> num_commands,
> - storage_ix, storage);
> - if (BROTLI_IS_OOM(m)) return;
> - } else {
> - /* Since we did not find many backward references and the entropy of
> - the data is close to 8 bits, we can simply emit an uncompressed block.
> - This makes compression speed of uncompressible data about 3x faster.
> */
> - EmitUncompressedMetaBlock(input, block_size, storage_ix, storage);
> - }
> - input += block_size;
> - input_size -= block_size;
> - }
> -}
> -
> -#define FOR_TABLE_BITS_(X) \
> - X(8) X(9) X(10) X(11) X(12) X(13) X(14) X(15) X(16) X(17)
> -
> -#define BAKE_METHOD_PARAM_(B) \
> -static BROTLI_NOINLINE void BrotliCompressFragmentTwoPassImpl ##
> B( \
> - MemoryManager* m, const uint8_t* input, size_t input_size, \
> - BROTLI_BOOL is_last, uint32_t* command_buf, uint8_t* literal_buf, \
> - int* table, size_t* storage_ix, uint8_t* storage) { \
> - size_t min_match = (B <= 15) ? 4 : 6; \
> - BrotliCompressFragmentTwoPassImpl(m, input, input_size, is_last,
> command_buf,\
> - literal_buf, table, B, min_match, storage_ix, storage); \
> -}
> -FOR_TABLE_BITS_(BAKE_METHOD_PARAM_)
> -#undef BAKE_METHOD_PARAM_
> -
> -void BrotliCompressFragmentTwoPass(
> - MemoryManager* m, const uint8_t* input, size_t input_size,
> - BROTLI_BOOL is_last, uint32_t* command_buf, uint8_t* literal_buf,
> - int* table, size_t table_size, size_t* storage_ix, uint8_t* storage) {
> - const size_t initial_storage_ix = *storage_ix;
> - const size_t table_bits = Log2FloorNonZero(table_size);
> - switch (table_bits) {
> -#define CASE_(B) \
> - case B: \
> - BrotliCompressFragmentTwoPassImpl ## B( \
> - m, input, input_size, is_last, command_buf, \
> - literal_buf, table, storage_ix, storage); \
> - break;
> - FOR_TABLE_BITS_(CASE_)
> -#undef CASE_
> - default: BROTLI_DCHECK(0); break;
> - }
> -
> - /* If output is larger than single uncompressed block, rewrite it. */
> - if (*storage_ix - initial_storage_ix > 31 + (input_size << 3)) {
> - RewindBitPosition(initial_storage_ix, storage_ix, storage);
> - EmitUncompressedMetaBlock(input, input_size, storage_ix, storage);
> - }
> -
> - if (is_last) {
> - BrotliWriteBits(1, 1, storage_ix, storage); /* islast */
> - BrotliWriteBits(1, 1, storage_ix, storage); /* isempty */
> - *storage_ix = (*storage_ix + 7u) & ~7u;
> - }
> -}
> -
> -#undef FOR_TABLE_BITS_
> -
> -#if defined(__cplusplus) || defined(c_plusplus)
> -} /* extern "C" */
> -#endif
> diff --git a/BaseTools/Source/C/BrotliCompress/enc/dictionary_hash.c
> b/BaseTools/Source/C/BrotliCompress/enc/dictionary_hash.c
> deleted file mode 100644
> index 03355c030372..000000000000
> --- a/BaseTools/Source/C/BrotliCompress/enc/dictionary_hash.c
> +++ /dev/null
> @@ -1,1120 +0,0 @@
> -/* Copyright 2015 Google Inc. All Rights Reserved.
> -
> - Distributed under MIT license.
> - See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
> -*/
> -
> -/* Hash table on the 4-byte prefixes of static dictionary words. */
> -
> -#include "../common/platform.h"
> -#include "./dictionary_hash.h"
> -
> -#if defined(__cplusplus) || defined(c_plusplus)
> -extern "C" {
> -#endif
> -
> -BROTLI_INTERNAL const uint16_t kStaticDictionaryHash[32768] = {
> -
> 32072,0,0,0,0,0,0,0,0,21860,0,0,0,0,0,0,0,40486,0,0,0,0,0,45798,0,0,0,0,0,0,1292
> -
> ,0,0,0,0,4964,278,23717,0,19972,0,0,0,0,0,0,0,0,0,0,0,0,2126,16102,0,0,0,14437,
> 0
> -
> ,0,0,0,0,0,0,26727,2253,0,0,17252,0,0,0,0,0,0,0,0,0,3622,0,0,0,0,22984,0,0,0,0,0
> -,0,16647,0,34247,0,0,0,0,0,48486,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2511,0,0,0,0,0,0,0,
> -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,19532,0,0,24004,0,0,0,9828,0
> -,0,0,0,0,0,0,0,0,0,0,0,0,0,0,30853,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
> -
> ,0,0,0,0,0,0,0,0,0,0,31974,0,0,0,0,0,0,0,0,20650,2404,0,20773,1677,9031,0,6404,
> 0
> -,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,51879,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6761,7206
> -
> ,0,0,21992,22983,0,0,3529,0,1864,0,0,0,0,0,0,11046,0,0,9641,0,0,0,6507,0,0,369
> 34
> -
> ,21576,62375,0,0,0,0,0,0,0,0,0,8294,0,0,0,0,0,0,0,40807,0,0,0,39398,8136,0,0,0,
> 0
> -,0,0,0,8875,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7941,0,0,25609,0,0,0,936,
> -
> 3716,3213,15687,0,0,0,0,0,52519,0,17381,0,0,0,0,1320,5797,0,21029,0,0,6472,8
> 07,0
> -
> ,0,0,0,0,0,0,0,0,0,13545,0,0,0,3624,0,0,0,29674,30820,0,31237,0,6596,0,0,0,0,0,
> 0
> -
> ,0,0,0,64070,0,0,0,0,0,0,0,0,0,0,0,22278,0,37446,0,0,0,0,7240,423,0,24612,2170
> 5,
> -
> 17636,0,0,0,0,0,0,1833,0,0,0,328,6021,0,0,0,19974,0,0,0,0,0,0,0,0,0,62119,4178,
> 0
> -
> ,0,0,0,12100,8617,0,0,16900,0,36678,0,0,0,35366,0,51718,0,0,0,0,0,0,0,0,0,0,0,0,
> -
> 0,0,0,20998,0,62086,0,0,0,0,0,5542,0,0,0,0,0,0,0,0,0,0,0,14629,10952,25927,0,0,
> 0
> -
> ,0,19849,0,0,0,0,0,0,0,30952,3046,14314,12998,0,0,0,15268,0,40582,30216,6211
> 8,0,
> -
> 0,0,20132,0,0,0,0,0,12005,0,0,0,52358,0,0,0,0,24778,0,44,33095,0,0,0,0,0,26372
> ,0
> -
> ,0,0,0,0,3781,0,0,17928,9479,0,0,0,0,0,0,0,0,32297,28613,0,0,0,0,0,0,0,0,0,0,0,0
> -
> ,0,47174,11723,0,0,0,0,0,0,0,0,0,2536,55143,0,0,6410,0,0,0,0,0,0,0,0,56294,119
> 14
> -,0,529,0,30184,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8261,0,0,28808,58854,22633,
> -965,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,64135,0,0,331,3684,0,1605,0,0,0,0,0,0,
> -
> 0,0,0,0,16650,37,0,23622,3144,15429,0,0,0,0,0,0,0,0,0,0,22443,69,0,0,0,0,0,0,0,
> 0
> -,17832,0,0,0,0,0,0,0,0,0,11113,0,0,0,0,18309,0,0,0,0,0,0,0,0,0,26630,0,0,25512,
> -25895,0,0,0,0,0,0,0,0,0,0,0,16901,0,0,0,27558,0,0,9418,0,0,0,3508,0,0,0,0,0,0,0,
> -
> 0,37990,9289,8517,0,0,0,0,1578,1604,23944,0,0,14916,12781,0,0,0,0,0,0,0,1210
> 5,0,
> -16617,0,0,0,0,0,0,0,0,0,0,0,0,21348,11240,28870,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
> -0,0,5772,0,0,27812,0,0,0,0,0,0,0,8324,0,0,0,0,0,0,0,0,0,0,16748,1157,0,0,18794,
> -
> 16324,25898,935,8333,0,0,0,0,0,0,0,0,18246,0,18086,0,46854,0,0,0,0,0,0,339,0,
> 0,
> -
> 25188,12780,12166,6409,0,0,0,0,16516,0,27012,28395,0,0,0,0,0,0,0,1420,0,0,0,9
> 768
> -,52967,0,0,0,0,0,0,0,0,0,0,0,0,0,0,25163,324,0,0,0,0,0,0,0,0,0,64998,0,0,0,0,0,
> -21893,0,0,0,0,0,47366,0,0,0,870,0,0,0,12646,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
> -0,26020,16360,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1809,0,0,0,6601,15878,0,0,0,0,0,
> -
> 29092,0,28516,0,0,0,0,0,0,0,0,0,21988,0,0,0,42950,0,0,0,0,0,0,0,0,0,0,5133,1318,
> -0,0,0,0,0,0,0,0,0,0,0,54982,24904,0,0,0,0,0,0,0,0,0,0,51526,0,0,0,0,0,3685,0,0,0
> -,0,10062,9412,0,0,0,31460,5708,6181,0,0,0,0,0,0,0,0,0,5575,0,0,0,0,0,0,0,0,0,0,
> -
> 27144,57478,0,0,0,0,0,0,7084,0,21993,53126,0,0,0,0,8397,0,0,5733,0,0,0,0,0,21
> 16,
> -0,24742,0,11271,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1133,0,4873,0,0,38310,0,0,0,0,0,
> -0,0,0,0,0,0,0,17932,0,0,18053,0,0,0,25510,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,17798,0,
> -
> 26214,0,0,0,0,0,0,0,0,23016,17415,20392,164,0,0,0,0,0,0,0,0,0,0,0,3239,0,46119
> ,0
> -,0,0,28580,0,0,0,0,0,0,0,0,0,7621,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,41478,0,0,31016,
> -
> 55334,10056,1924,0,0,0,0,0,36614,0,36711,0,0,0,0,0,0,0,0,0,0,13994,59303,0,0,
> 0,0
> -,0,0,0,0,0,0,0,0,0,0,0,26501,0,5639,0,0,0,0,0,0,13897,1253,0,0,0,0,0,5095,0,0,0,
> -28869,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8646,0,0,0,0,25641,17796,0,0,0,0,0,0,0,
> -
> 13316,620,6309,11819,0,0,0,0,0,0,0,0,0,904,1095,0,24229,0,0,28744,49703,0,23
> 077,
> -0,0,0,0,32392,0,0,0,0,35271,0,28740,5866,0,0,0,0,0,0,0,4361,0,0,0,0,0,0,0,0,0,0,
> -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7917,8869,0,0,0,13924,0,0,0,0,
> -
> 0,41958,0,0,0,0,0,0,6766,13989,0,0,0,903,0,0,24010,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
> -
> ,0,0,0,0,0,64390,0,22468,0,25861,0,0,0,0,23656,5317,0,0,0,0,0,0,23017,5445,16
> 009
> -
> ,0,0,0,0,0,0,0,0,48006,10473,0,0,14404,0,0,0,42183,0,0,0,51270,0,0,10602,2413
> 2,0
> -,0,0,0,0,43782,0,0,17834,0,0,0,25576,27205,0,0,0,0,0,0,0,0,29066,0,0,0,0,0,626,
> -1988,14700,0,0,0,0,0,0,0,0,0,0,0,0,57670,0,0,0,0,0,0,0,0,0,44710,0,0,0,0,3848,
> -
> 7623,0,0,0,0,0,0,0,0,0,0,0,42374,0,0,0,0,0,0,0,0,19272,6436,0,0,5256,0,0,0,0,0,0
> -,0,0,0,0,0,0,0,0,19685,0,0,0,0,0,0,0,0,0,0,0,0,0,39783,0,0,0,0,30984,0,0,0,0,0,0
> -
> ,28230,0,0,0,29028,10538,3205,0,0,0,0,0,0,0,0,0,0,0,5636,840,295,0,0,8488,819
> 8,0
> -,0,0,0,0,0,0,0,0,20580,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4074,19526,0,0,0,0,
> -31144,64038,0,0,0,0,0,0,16716,0,0,0,0,0,0,0,0,0,0,0,17706,0,0,0,0,0,0,50630,0,
> -50503,0,0,0,0,0,0,0,0,0,0,0,25446,0,0,0,13831,0,0,0,0,0,0,2696,4039,0,0,0,0,
> -
> 25288,0,12076,2054,0,48934,0,0,0,0,16969,59431,17259,35335,0,0,0,0,0,0,0,0,0,
> 0,0
> -,0,31275,0,0,0,1097,0,0,0,0,0,0,0,0,0,0,0,776,839,0,0,29386,0,0,0,0,0,0,0,0,0,0,
> -0,0,0,0,0,0,0,0,0,0,0,0,0,5864,12134,0,0,0,0,0,0,0,25349,0,0,0,0,0,0,0,0,0,61447
> -,0,0,0,0,0,0,0,0,0,24678,0,0,0,63335,0,28836,8142,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
> -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4494,0,0,0,0,0,14088,1188,0,16260,0,0,0,
> -16421,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,276,0,0,17060,0,0,0,0,
> -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,24076,29445,0,33543,0,4901,0
> -
> ,0,12522,0,0,62471,0,0,0,0,0,0,0,0,0,0,4046,0,0,0,0,20486,0,15460,2217,51719,0
> ,0
> -
> ,0,0,0,23495,0,0,0,0,0,0,15370,0,15849,0,15113,0,0,0,0,0,0,0,0,27972,7337,0,0,0,
> -
> 0,30342,0,0,0,0,0,0,0,0,32299,23940,0,17766,0,0,0,0,0,0,6184,0,20904,0,0,0,0,0,
> 0
> -,0,0,0,0,31492,0,0,0,5509,0,0,0,0,0,0,0,0,2669,50182,0,0,12299,0,0,0,0,0,0,0,
> -
> 5257,28167,0,0,0,0,0,0,0,0,0,0,0,11750,3890,0,0,26500,0,0,0,0,0,0,0,49318,0,0,0,
> -0,0,0,0,10981,0,0,0,0,0,0,0,0,17961,1831,0,0,0,0,0,0,0,29638,0,0,0,0,26473,0,
> -6216,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,711,0,0,0,0,0,0,0,0,0,0,28683,39975
> -,0,0,0,0,0,51654,0,0,0,27527,0,0,0,0,0,0,0,0,30859,3268,0,0,0,0,0,0,0,0,0,0,0,0,
> -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,28772,0,18212,0,0,0,0,25448,65446,0,0,0,0,
> -
> 0,0,3337,1670,0,0,0,0,0,19332,0,0,0,0,24936,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1043,0
> -,0,0,0,15814,0,21670,0,0,0,0,0,0,0,16263,0,0,0,0,0,0,0,0,0,32454,0,30630,0,0,
> -
> 20170,9926,0,0,0,18247,0,0,14376,0,2056,17191,0,0,0,0,0,0,0,7812,0,0,0,0,0,0,0
> ,0
> -,0,0,0,0,0,0,22474,52806,1588,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,10825,0,
> -
> 0,0,0,40934,0,0,0,0,0,0,0,28677,0,0,5714,0,0,0,0,0,0,0,0,0,0,0,0,0,25865,22246,0
> -
> ,0,0,0,17256,35751,0,0,0,0,0,0,0,0,8236,0,32108,0,0,0,43,14342,0,16517,0,0,307
> 32
> -
> ,0,4012,133,0,40583,971,23942,0,0,27275,0,0,0,204,0,0,27140,7564,44327,2759
> 2,
> -
> 57958,0,0,0,0,22344,25701,0,0,0,0,0,0,0,19524,31755,0,0,28102,0,59111,0,0,0,0
> ,0,
> -0,0,12261,0,44934,0,0,0,0,31560,0,11114,0,0,0,0,0,0,0,0,0,0,0,18953,18311,0,
> -45159,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2059,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
> -19399,0,0,0,0,0,0,0,0,0,0,0,0,0,58534,0,0,0,0,0,0,0,0,0,0,0,0,22411,23943,0,0,0,
> -
> 0,0,0,11690,0,0,4069,0,0,2668,6342,0,0,0,0,0,0,27658,1766,0,0,0,0,23240,56070
> ,0,
> -
> 0,0,0,0,0,0,0,0,0,0,0,0,34119,0,24453,0,0,0,0,21867,0,17610,9894,0,0,27976,387
> 90
> -
> ,0,0,0,43654,0,31559,12202,23142,0,0,0,50343,0,0,0,0,0,32806,0,0,0,0,0,0,0,0,0,
> 0
> -
> ,0,0,0,0,0,0,0,0,0,49895,0,0,0,0,15786,4263,0,0,0,0,4746,3814,0,0,0,0,0,0,17192,
> -
> 453,17323,0,20328,4036,0,0,0,15844,0,0,0,0,27561,31940,32296,0,0,0,0,0,0,0,11
> 499
> -,11782,0,0,0,0,9738,50471,0,0,0,0,0,35430,0,0,0,0,0,29734,0,0,0,36551,0,0,0,0,
> -9257,5606,0,13829,0,7015,0,0,0,0,0,25127,0,0,19051,0,0,0,0,0,0,0,0,0,0,0,0,0,
> -2572,0,0,0,0,0,0,29797,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,42342,0,0,0,0,9293,
> -
> 0,17896,56038,4077,0,0,0,29899,37351,0,30823,0,8326,0,0,0,18342,0,0,0,0,0,0,0
> ,0,
> -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,18569,54054,0,0,0,0,0,0,0,0,0,37254,0,0,31433,
> -61510,0,2022,0,0,0,0,0,25381,0,0,0,0,0,0,0,0,0,0,0,0,0,2149,25289,0,0,0,0,0,0,0,
> -0,0,0,12516,14185,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8676,0,0,0,0,0
> -,0,0,0,0,0,0,36486,0,0,0,0,10889,9607,0,28711,0,0,0,0,0,0,0,0,0,0,28490,0,0,0,0,
> -
> 26181,10283,1701,0,0,0,0,0,0,0,0,0,14980,0,7783,0,27846,0,0,0,56486,3892,0,0,
> 0,
> -
> 5770,16583,0,26309,13422,20292,0,0,0,0,0,0,0,0,0,28742,0,0,0,0,14536,1158,0,0
> ,0,
> -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,25801,0,0,0,0,0,0,0,0,0,0,0,0,42438,0,3332,0,0
> -
> ,0,0,0,0,0,0,0,8327,0,0,0,0,0,0,0,0,0,0,0,0,17353,1447,0,0,8427,48518,1359,0,0,0
> -,0,0,14986,0,32168,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9230,2791,0,0,0,0,0,0,0,0,
> -
> 16073,31623,4269,0,0,0,0,0,0,4519,0,0,27912,58950,0,0,0,0,0,0,0,0,8361,19812,
> 0,0
> -,0,0,6056,7877,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,21701,0,0,0,0,0,0,0,0,0,0,0
> -
> ,0,9128,1125,0,16548,0,0,0,0,0,0,0,0,0,0,17292,6854,21352,0,2380,0,0,4007,0,0,
> 0,
> -0,0,24357,4202,0,0,0,0,0,0,0,0,0,0,0,0,0,10664,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
> -
> ,0,0,0,42823,3022,0,0,0,0,0,0,0,0,0,0,0,0,14373,0,20677,3304,2759,20522,64903
> ,0,
> -0,0,38,0,0,0,0,0,0,0,0,0,0,0,27814,2802,8870,3758,1255,0,0,0,0,0,0,0,0,30027,
> -9510,0,0,0,0,17864,14855,0,0,0,0,0,0,0,0,0,0,23404,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
> -51462,0,0,0,0,0,0,0,45734,0,0,23467,32327,0,0,10826,52999,0,0,0,33222,31336,
> -
> 64326,0,0,0,0,0,0,0,32166,0,0,3891,0,0,0,7017,645,0,0,0,0,0,0,27915,46087,0,0,
> 0,
> -21863,0,34246,0,0,16715,0,0,0,0,14052,21416,0,0,0,0,0,0,0,0,39846,0,0,0,0,0,
> -
> 38982,0,0,17512,7460,0,0,0,0,0,0,0,0,0,15428,0,0,0,0,0,0,0,28356,0,0,0,0,0,0,0,0
> -,0,0,0,0,0,0,0,0,0,0,0,25445,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11879,0,0,0,0,0,0
> -
> ,0,0,0,0,0,0,0,19911,0,20007,0,0,0,10855,943,0,0,10821,0,0,0,0,4170,0,0,0,0,0,0,
> -0,0,0,9836,0,0,0,0,0,0,0,0,0,0,65415,0,0,0,0,0,0,0,0,9865,24646,0,0,0,0,0,40519,
> -0,0,0,0,0,0,0,0,0,12804,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,22091,23655,0,0,0,0,0,0,
> -0,31686,0,0,0,58599,0,0,0,0,0,0,0,0,0,0,0,0,0,19620,0,0,0,0,0,0,0,0,0,0,0,0,0,
> -
> 24421,0,28100,0,0,0,31268,0,3204,0,0,0,0,0,0,0,0,0,14822,0,0,0,0,19947,10182,
> 0,0
> -,9480,14821,4398,0,0,14532,0,0,0,48871,1873,0,0,0,0,0,0,0,589,1541,0,0,0,0,0,
> -
> 23333,0,0,0,14149,0,0,0,0,1296,14374,0,27300,0,0,0,0,0,0,7276,0,0,0,0,0,0,4771
> 8,
> -
> 0,0,0,0,0,0,0,0,0,0,5164,1765,0,14405,0,37574,1994,0,6636,0,0,0,0,0,0,0,0,2781
> 5,
> -0,0,0,0,2568,6820,0,0,0,0,0,0,0,0,0,0,11336,26247,0,0,23912,0,0,0,30536,0,0,
> -
> 34342,0,17799,0,0,0,22149,0,6118,0,25732,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
> -
> ,0,0,0,0,26600,5190,0,0,1142,0,0,0,0,0,0,0,0,39527,0,0,0,0,0,39494,0,0,0,0,0,0,0
> -
> ,0,0,0,3085,0,0,0,0,0,0,0,4786,0,0,0,28873,6532,0,0,26664,0,9193,11719,0,0,0,0,
> 0
> -,0,31752,64646,0,0,0,0,0,0,0,0,0,0,0,11397,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,25094,0
> -
> ,0,18153,20167,0,0,0,17254,0,0,878,0,0,0,0,0,0,0,0,0,0,24166,0,0,0,0,0,0,0,0,0,0
> -
> ,0,0,26059,0,0,0,0,0,0,0,0,0,0,0,0,0,31592,0,0,8167,24362,6212,0,34758,0,0,0,0,
> 0
> -,0,32520,0,0,44679,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,17989,8681,29222,0,0,0,
> -0,0,0,0,0,10251,4902,1452,15207,0,0,0,0,0,0,0,22822,0,10469,0,0,0,0,0,0,19337,
> -
> 17670,107,11494,0,0,0,0,27305,2565,0,0,0,0,0,0,0,64518,200,28389,0,0,0,0,3120
> 8,0
> -,30762,0,0,0,0,0,29321,60518,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3209,3237,
> -
> 12490,22663,0,0,0,18789,31464,16391,0,0,0,0,0,0,0,0,0,0,0,20646,0,0,0,27238,0
> ,0,
> -0,0,0,15940,4488,6951,0,0,0,46342,0,0,0,0,0,0,0,0,0,28965,0,0,0,0,0,0,0,0,0,0,0,
> -0,0,0,20584,3367,0,25350,0,0,0,0,0,0,0,0,0,0,0,0,1814,0,0,0,0,0,0,0,0,0,0,17125,
> -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,55943,0,0,0,0,0,24133,0,0,0,0,0,0,0,0,0,0,0,0,2929
> -
> ,0,0,50086,0,2918,25356,30052,115,11846,0,0,0,0,3056,0,0,0,0,17639,239,19815
> ,0,0
> -,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,36806,0,0,0,0,0,0,0,0,0,0,0,0,0,21479,0,0,0,0,0,
> -
> 28420,11786,4772,0,0,3368,36295,0,31463,0,0,14665,996,0,20582,0,0,0,9988,0,
> 23685
> -
> ,0,0,0,52551,0,0,0,0,0,0,0,7556,0,0,0,0,0,0,0,1895,2186,0,0,0,0,0,27755,25447,0,
> -0,0,0,31052,63270,0,0,0,0,0,0,0,36742,0,24804,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
> -0,0,0,0,0,0,0,31048,0,0,0,0,0,0,0,0,0,21290,2276,0,0,0,0,26475,0,0,0,0,0,0,0,0,0
> -,0,15332,0,0,0,0,0,0,0,0,3176,19431,0,0,0,0,0,0,0,62726,0,0,0,25380,0,0,27883,
> -
> 1316,0,0,7724,3015,0,0,0,0,6697,0,0,47910,0,0,0,0,0,0,0,0,0,3141,0,0,0,14820,0,
> 0
> -
> ,0,0,9326,0,0,0,0,0,0,0,0,0,0,31493,0,0,0,0,0,6566,0,0,0,0,0,0,6569,1348,0,25638
> -
> ,0,0,0,0,0,20324,0,0,17067,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11876,0,41030,0,0,0,26405
> -,0,0,0,0,0,0,0,0,0,11431,28137,14950,0,10151,0,0,0,0,0,0,0,29574,0,0,0,0,27176,
> -
> 57446,0,0,0,0,28650,57574,1387,0,0,0,0,0,0,0,0,0,0,58247,0,0,0,0,0,0,0,16805,0,
> 0
> -
> ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3526,0,15781,0,5572,13352,0,0,0,0,0,18665
> -
> ,23463,0,0,0,0,0,0,15405,6885,0,0,0,0,15272,0,0,0,0,0,0,0,0,9861,0,0,0,0,0,0,0,0
> -
> ,9512,4037,0,0,11563,49639,0,0,0,0,0,0,27880,57830,0,0,0,0,0,41831,0,21924,0,
> 0,0
> -
> ,0,0,0,0,25509,0,27462,0,18085,0,0,0,0,0,0,0,0,0,0,0,0,13898,8068,26441,0,0,0,0,
> -0,0,25316,0,0,0,0,16298,7397,5706,19239,0,0,0,0,0,0,0,0,1392,50919,0,0,0,0,0,
> -53863,0,0,0,0,1451,0,0,0,0,0,0,0,0,0,0,35847,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
> -,17801,15813,0,12740,0,0,0,32967,0,0,0,0,0,0,5389,0,0,0,0,0,0,0,0,0,0,31143,0,
> -20548,0,0,0,0,0,0,0,0,0,51686,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
> -
> 12109,19015,0,34983,0,21732,3600,0,0,0,0,47750,17288,43975,22857,47559,0,0
> ,0,0,
> -
> 26408,48358,0,0,0,0,0,0,0,0,0,0,0,0,0,30470,0,0,23560,4581,0,22404,0,49286,0,
> 0,0
> -,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,49831,0,0,0,27525,31691,7,0,0,25835,0,0,0,0,0,
> -
> 4201,16485,0,20676,0,0,0,0,3753,23303,16264,3878,0,0,0,0,0,0,11434,0,0,0,0,0,
> 0,
> -
> 7589,0,0,0,0,0,0,0,0,0,57095,0,0,0,0,0,0,0,0,0,0,0,22820,11146,49158,0,23623,0,
> 0
> -,0,0,0,0,0,13893,0,0,0,0,0,0,11722,60071,1258,0,0,0,0,0,0,18564,0,0,0,0,0,0,0,0,
> -0,0,0,0,0,0,27945,0,0,0,0,5479,0,20006,17608,3431,10988,30180,0,0,0,0,0,0,0,
> -
> 24581,14,0,0,0,0,0,0,25572,0,0,0,28612,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,53543,0
> -,0,0,0,0,0,0,0,0,0,0,33670,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8710,0,14116,0,0,116,
> -
> 292,0,0,0,37831,0,43078,0,0,0,0,0,0,0,0,21832,0,0,32134,783,0,0,30982,0,0,0,68
> ,0
> -,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5932,0,0,0,18505,
> -15175,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3630,16965,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
> -
> ,0,0,0,17797,0,0,0,0,0,0,520,42150,0,0,3122,0,0,0,22506,0,0,0,0,0,0,0,0,28550,0,
> -
> 0,0,50278,0,0,13641,5958,0,35238,0,0,0,0,0,0,0,0,29993,18724,0,0,0,0,0,0,0,0,0,
> 0
> -
> ,0,0,0,0,0,0,20619,9319,0,0,0,0,23977,0,5193,0,0,12196,0,0,0,0,0,0,0,0,0,0,0,0,0
> -,0,0,0,0,24390,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,20105,677,0,0,0,0
> -,0,0,0,0,29419,0,0,0,0,0,0,0,0,0,20266,0,0,0,0,10631,0,0,0,0,0,0,0,0,0,47655,0,0
> -,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,26628,12744,0,20648,0,0,0,432,0,0
> -,0,0,0,0,0,0,0,0,646,0,25604,0,0,0,0,0,0,0,0,0,0,0,0,0,63782,0,0,0,0,24616,0,0,0
> -
> ,21291,0,0,0,0,0,0,0,0,0,0,45638,0,0,0,0,1931,0,0,0,20521,59975,0,20614,0,0,0,0,
> -
> 0,0,0,0,0,0,0,0,0,0,0,56231,0,0,0,0,0,29991,0,52871,0,20934,0,0,0,0,0,0,0,16871,
> -0,0,0,0,0,0,0,0,0,0,0,0,0,7237,0,0,0,0,0,47558,0,0,0,0,0,0,0,0,0,0,0,10406,0,0,0
> -,0,0,0,0,43046,0,0,2930,0,12936,0,0,0,0,0,0,0,0,0,0,0,0,31141,0,0,0,0,0,0,0,
> -37639,0,17572,0,0,0,0,0,0,0,0,0,0,31240,0,0,0,0,0,688,0,0,0,0,0,1648,0,0,0,0,
> -10055,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,146,0,0,0,0,0,0,0,0,0,6345,199,0,34982,0,0
> -
> ,0,0,0,0,0,0,0,0,0,0,0,56839,0,0,0,0,0,48902,0,13412,0,0,0,0,0,0,0,0,2441,4420,0
> -,0,0,0,20428,933,0,0,0,0,0,0,0,45383,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
> -
> ,0,0,0,0,0,54726,0,0,0,0,0,0,0,0,0,0,0,0,17036,741,0,0,0,0,0,0,0,27589,0,0,30282
> -,18950,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2248,0,0,0,0,0,0,0,0,0,25993,0,0,0,
> -2443,0,0,31622,0,14150,0,0,0,28679,0,0,0,0,0,0,15464,0,0,0,0,54694,0,0,0,0,0,0,
> -
> 3827,0,0,0,3756,0,9897,0,0,0,0,0,19082,31239,0,0,0,0,0,0,0,0,0,0,0,24580,0,0,0,
> 0
> -,0,0,0,0,0,16580,0,0,0,0,0,0,0,0,0,0,0,0,0,0,27625,0,0,0,784,4647,32652,0,0,
> -
> 63494,0,0,0,0,0,0,0,21062,0,0,0,0,0,0,0,0,0,0,3404,58470,0,32325,0,0,0,0,0,0,0,0
> -,0,0,0,0,0,0,0,0,18634,2789,0,0,0,0,0,0,0,8548,0,0,0,22501,0,0,0,0,0,0,0,0,0,0,0
> -,0,0,0,15881,0,0,0,0,35879,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7978,17956,0,0,0,
> -
> 0,0,0,0,24324,0,0,4937,0,0,0,8168,0,13420,10340,0,0,0,0,0,11780,0,0,0,0,0,0,0,0,
> -0,0,16712,0,0,0,0,0,0,0,17640,17991,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
> -0,0,0,0,2953,0,0,0,0,0,0,0,9100,16806,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,30667,0,0,
> -
> 19013,0,0,0,0,0,0,205,15334,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1969,0,0,0,0,0,0,0,26248
> -
> ,52518,0,49798,0,0,0,0,0,0,0,9668,0,0,0,0,0,4742,0,0,21641,0,0,0,0,0,0,53574,0,
> 0
> -
> ,0,0,0,0,5707,0,0,0,0,0,0,0,3018,12454,0,0,0,0,2920,262,0,0,0,0,0,0,0,0,0,0,3593
> -
> ,0,0,0,0,0,0,0,0,0,0,23910,0,0,0,0,0,0,0,55879,0,0,0,0,0,775,0,43270,5066,48967,
> -
> 0,0,22986,4165,8971,44838,0,0,0,0,0,62279,272,0,0,0,0,51430,0,0,0,0,0,0,28234
> ,0,
> -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,13349,0,0,0,51111,20265,13861,0,0,0,0,0,0,
> -0,0,0,0,0,0,0,0,0,0,0,0,585,7494,0,0,0,0,0,0,0,0,21768,62407,0,0,0,0,7979,166,0,
> -0,0,0,0,0,0,0,0,38918,0,56742,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16296,5767,0,0,0,0,0,0
> -
> ,0,32068,0,0,0,0,0,0,0,0,0,0,0,0,0,29796,0,0,0,0,0,0,0,0,23916,30183,0,58791,0,0
> -,0,0,0,0,0,20518,0,0,0,0,8969,0,0,0,183,0,0,0,0,0,2314,17445,0,0,0,0,0,0,0,0,0,
> -
> 23748,0,0,8139,4839,27914,0,0,0,0,0,0,0,0,0,0,0,0,29478,0,0,16552,26663,0,537
> 67,
> -
> 0,0,13960,8039,18696,0,0,0,0,0,0,0,0,0,0,0,782,16005,0,0,0,0,0,0,0,0,6258,5680
> 6,
> -
> 16456,12455,0,0,0,0,0,0,0,23780,0,0,0,0,0,0,9355,0,0,0,7273,41063,24780,57766
> ,0,
> -0,0,0,0,0,0,0,0,0,3820,2597,0,0,0,0,0,0,0,0,0,0,0,0,0,0,29225,61126,0,0,0,58439,
> -15691,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,37190,22408,967,0,0,0,
> -
> 23078,26858,0,0,0,19753,0,0,0,0,0,0,0,0,0,5416,13702,0,0,0,0,0,52742,20394,38
> 567
> -,0,0,0,51079,0,0,136,8516,0,0,0,0,0,0,0,0,0,0,0,27588,0,0,0,0,0,0,0,0,0,0,531,0,
> -
> 0,0,0,0,0,0,0,0,8936,5031,12520,19334,0,0,22827,30247,28074,31140,0,0,0,0,0,0
> ,0,
> -0,0,0,0,0,0,0,27497,18148,20104,59079,0,0,0,0,0,0,0,0,0,24389,0,0,6125,0,0,0,0,
> -9541,0,0,24553,29095,0,0,0,0,0,0,0,25444,0,0,9643,0,0,63047,0,0,0,0,0,0,0,0,0,
> -39558,0,0,0,0,0,0,20620,11815,499,0,5128,2278,0,0,0,0,0,46310,0,0,0,0,0,0,0,0,
> -
> 23530,40166,2440,0,0,0,0,0,0,0,0,0,0,15174,0,0,0,0,0,0,0,0,0,0,26922,0,0,0,0,0,0
> -
> ,0,0,0,0,26758,0,0,0,0,0,51911,0,0,23532,0,0,0,0,51238,25737,44486,12622,0,0,
> 0,0
> -
> ,0,0,3078,0,9253,0,0,1128,22023,0,0,0,21350,0,16420,0,0,0,0,0,0,0,65094,0,0,0,
> 0,
> -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,22532,0,48774,0,34503,0,0,0,0,0,0,0,0,0,0,0,0,
> -
> 0,0,0,9797,0,0,0,0,0,0,0,13797,0,38279,0,0,1738,0,489,46343,0,45382,0,0,0,0,0,
> 0,
> -
> 0,0,0,29030,0,0,0,0,0,0,6220,56550,0,0,0,0,0,26885,0,28806,0,0,0,0,0,0,0,0,0,0,0
> -,45958,0,0,0,0,20553,49927,0,0,0,0,0,0,3019,12358,0,0,0,0,0,0,0,0,0,0,26571,
> -
> 13319,0,0,653,23399,0,0,0,0,0,0,0,0,22316,0,0,21188,0,0,0,0,0,0,0,0,0,27556,0,0,
> -
> 0,0,0,0,0,27878,21483,27653,0,29701,237,0,10632,0,0,0,0,33766,0,0,0,0,0,0,315
> 63,
> -0,0,0,0,0,1416,2439,0,0,0,0,0,0,0,0,0,0,9611,0,0,0,0,0,0,0,5611,16581,26601,
> -
> 35462,0,0,0,26756,0,59271,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,26984,57734,0,0,0,
> -
> 0,0,0,0,0,0,0,0,0,0,0,0,0,7882,0,0,0,19528,6469,0,0,1161,0,0,0,7688,20935,425,0,
> -
> 0,0,0,0,0,0,0,12519,0,12902,0,0,0,0,0,0,0,0,0,0,2411,0,11725,26086,0,0,20201,0,
> 0
> -,0,0,0,0,0,0,11045,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,30471,0,0,0,0,0,0,0,0,0,0,0,
> -21541,1141,21190,0,9188,0,0,0,0,0,0,0,0,0,0,0,0,0,0,184,1093,0,0,0,0,0,0,0,0,
> -
> 4842,0,13672,0,0,12230,0,0,0,10532,0,0,8937,0,0,0,0,0,0,0,0,0,0,28996,0,0,1172
> 0,
> -
> 26982,0,46182,0,43911,31754,0,1160,3940,0,20772,0,0,0,0,0,24549,0,32582,0,0,
> 0,0,
> -
> 0,0,0,0,0,0,0,0,0,0,0,0,0,31845,0,0,0,0,0,0,0,2310,11788,0,0,43047,0,0,0,18853,0
> -,0,0,0,0,0,0,0,0,63622,0,0,7048,17318,0,0,0,21957,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
> -0,0,0,0,0,0,0,0,0,1039,6279,0,0,0,0,0,0,0,0,0,0,0,0,0,12197,0,0,0,0,0,0,0,0,0,
> -
> 46470,0,0,24,19719,0,0,0,0,0,0,0,0,0,39335,0,0,0,0,0,0,0,0,0,0,21353,3846,0,0,0,
> -0,0,0,0,36679,0,0,0,0,0,0,0,0,0,0,0,11268,0,0,0,0,0,9382,0,0,0,0,0,0,0,0,0,0,0,0
> -
> ,0,29926,0,33606,0,4708,2828,0,0,29543,0,0,0,0,0,29893,0,0,0,0,0,0,0,0,3663,0,
> 0,
> -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,10920,7111,0,0,0,0,0,0,0,0,0,0
> -,9384,0,0,0,0,0,0,0,0,0,0,0,0,20388,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,37094,0,0,0,
> -
> 27110,0,0,0,0,0,0,21865,0,27753,30214,0,0,0,0,0,57895,0,0,0,0,0,0,0,0,0,0,1264
> 8,
> -
> 5446,0,0,0,0,0,0,0,0,0,0,19784,17124,0,52007,0,0,0,0,0,0,0,0,758,0,0,0,0,0,0,0,0
> -
> ,0,0,0,0,0,0,0,0,0,0,24900,0,0,0,0,0,1476,0,65031,0,0,1205,46663,0,30023,11625,
> -1094,0,0,0,0,0,0,0,0,0,0,0,0,0,0,10058,0,0,0,0,0,0,28455,0,0,0,0,0,0,0,0,0,0,0,
> -14788,0,0,0,0,16808,0,0,742,0,0,0,0,0,0,0,0,0,0,0,21636,0,0,0,0,0,0,0,0,0,0,0,0,
> -15944,23207,0,0,0,0,247,0,0,0,0,24743,0,0,0,5252,0,0,0,0,0,0,0,0,29961,18660,
> -
> 21099,46791,0,7045,0,0,0,0,25707,0,0,17412,3828,0,0,0,0,0,0,0,0,0,0,0,5803,56
> 37,
> -0,38151,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,60103,0,0,0,0,0,0,0,0,0,0,0,0,
> -0,0,0,0,853,0,0,0,0,0,0,30215,0,0,0,0,0,0,0,8741,0,0,0,0,0,27366,0,0,0,0,171,
> -4070,0,0,0,0,0,0,0,0,24073,7366,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2184,5189,0,
> -20932,1545,4996,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7684,0,0,0,0,0
> -,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6313,0,0,0,0,0,0,0,30826,0,0,0,0,0,0,
> -
> 0,0,0,0,27463,0,0,0,0,0,0,0,0,0,0,21640,63303,0,0,3275,31111,0,0,0,0,0,0,0,1155
> 6
> -,0,14756,0,0,0,15108,0,0,0,0,0,0,0,0,0,0,0,0,0,0,23914,28966,0,0,0,4965,0,0,0,0,
> -
> 0,0,0,0,0,0,10216,5223,0,0,0,0,0,0,0,0,0,27142,0,0,1173,20198,0,0,0,0,0,56614,0,
> -0,0,0,0,4612,0,0,0,0,0,0,0,0,0,0,11822,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,17769,7910,
> -0,0,31880,0,0,6055,0,0,0,0,0,0,0,0,0,0,8970,0,0,0,0,0,0,0,0,0,0,0,16840,23879,0,
> -0,11051,0,0,0,32552,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,20842,13701,0,0,0,37191,7373,
> -
> 10471,17482,25348,0,0,0,38502,0,0,0,0,0,0,0,0,0,21509,6058,0,0,0,0,0,0,3173,0,
> 0,
> -
> 0,9543,0,0,0,0,0,0,17768,12708,0,0,0,0,0,37030,0,0,0,0,0,0,0,0,0,0,12748,48743,
> 0
> -,11718,0,0,25194,0,0,0,9033,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5028,0,30118,0,0,0,0,0,
> -
> 42759,0,0,3720,0,0,0,0,0,0,25190,0,0,0,0,0,0,0,0,0,0,5450,5125,0,58086,0,0,0,0,
> 0
> -
> ,27716,0,0,0,0,0,0,0,0,0,22052,0,0,0,0,26249,0,15947,3460,0,0,0,35814,0,0,0,78
> 13
> -
> ,19500,32167,0,18597,0,0,0,0,0,28644,0,0,0,60743,0,0,0,0,0,29636,0,0,0,0,0,0,0,
> 0
> -
> ,0,0,0,0,0,17220,15885,9414,9642,0,0,0,593,0,0,24228,0,0,0,0,0,40422,0,26244,
> 0,
> -
> 23109,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,64902,0,0,0,0,3979,60007,0,0,0,28199
> -,0,0,0,43142,0,0,0,0,0,0,0,29158,0,30532,0,0,0,0,13256,0,0,0,0,16549,0,0,0,0,0,
> -26116,0,0,0,0,0,0,0,0,22825,0,0,0,0,0,0,0,1065,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
> -
> ,0,0,0,0,18985,4805,0,0,0,0,0,17702,0,0,0,0,0,0,0,0,0,0,3468,0,0,0,0,13447,0,0,0
> -
> ,0,0,0,0,0,0,0,0,56871,0,0,1776,15780,0,0,2603,0,10280,31366,0,0,0,0,0,0,0,0,0,
> 0
> -,0,0,0,0,11592,3591,0,2372,0,0,0,0,0,0,0,20004,0,0,0,0,0,0,12072,518,0,0,1960,
> -8999,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7178,32999,0,0,0,0,0,0,1641,0,0,0,0,0,0,0,6764,
> -
> 9893,490,4005,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,25258,5541,0,14053,306,20743,0,0,
> -
> 9422,0,0,0,0,0,0,0,11977,260,0,35175,0,0,0,0,0,0,0,18405,0,0,0,16582,0,0,0,224
> 70
> -,0,0,0,0,0,0,2792,0,0,0,14026,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14858,3909,0,0,0
> -,57671,0,0,0,0,0,0,15979,0,0,0,2794,15239,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,26884,
> -9070,0,0,0,0,51846,0,0,0,0,0,0,0,0,0,0,0,0,0,0,19499,37127,0,0,0,0,0,0,0,0,0,0,0
> -
> ,0,0,0,0,0,0,0,0,0,0,0,0,19205,10350,11910,0,0,0,0,15083,23108,0,0,0,0,0,0,0,0,0
> -,0,0,0,0,0,0,0,169,0,0,0,0,0,0,0,0,0,0,0,15274,41735,0,56774,0,0,2825,0,14025,
> -
> 389,0,0,0,0,0,0,0,0,21482,31910,0,0,0,0,0,0,0,0,0,0,0,0,0,0,20456,710,0,0,25032,
> -21797,0,0,0,0,0,0,0,0,0,0,32427,21252,0,30150,0,43174,0,0,0,0,0,0,0,0,0,0,0,0,
> -11403,0,0,1029,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6892,9252,0,63206,
> -
> 3496,14406,0,0,0,0,0,0,0,0,0,0,22568,0,0,21253,0,0,0,0,0,0,0,39623,0,0,10189,0,
> 0
> -,0,0,0,0,0,0,0,0,0,0,0,30729,59910,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3305,0,0,0,0,0,0,
> -0,0,0,7660,24871,0,838,0,0,0,0,0,0,0,0,0,0,0,0,12013,13252,0,551,0,0,0,43207,0,
> -
> 30567,0,0,0,0,0,0,0,0,28394,30724,0,0,0,0,0,0,0,0,0,0,22665,22725,0,0,0,0,0,0,0,
> -0,0,0,0,0,0,0,0,0,0,29414,0,0,0,0,16074,8966,245,1445,0,0,0,0,24872,0,0,0,0,
> -13124,0,35527,0,0,0,0,0,0,13259,10917,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
> -
> 25191,0,0,0,13956,0,0,0,0,0,0,0,54631,19625,12070,3083,0,0,0,0,14436,0,0,0,0,
> 0,0
> -,0,0,0,0,0,0,0,21766,0,15463,29322,0,0,0,0,0,0,29990,0,0,0,0,0,0,0,0,0,0,0,0,0,0
> -,0,0,0,23653,0,0,0,0,0,0,0,0,2643,0,0,21223,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
> -0,0,4114,0,0,0,0,0,0,0,0,34790,0,0,0,0,0,0,0,16103,0,0,0,0,0,0,297,3620,3338,
> -10372,0,14727,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,29924,22473,13895,
> -
> 15529,32455,30378,13540,0,28807,0,0,0,0,0,0,0,64582,18380,0,0,0,0,0,0,0,0,0,0
> ,0,
> -0,38598,0,0,0,0,0,0,0,0,1236,0,0,0,0,0,0,0,0,0,0,0,0,0,0,32710,0,0,0,0,4590,0,0,
> -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,64935,0,0,0,0,0,0,0,0,0,0,0,0,16744,0,0,
> -0,0,0,0,20005,0,0,13608,1191,0,0,0,62183,0,0,0,0,0,24484,0,0,0,0,0,0,0,0,0,0,
> -
> 17643,0,0,0,0,0,0,0,0,0,0,0,0,5380,0,0,32328,0,0,63814,0,0,0,2919,0,0,0,0,17034,
> -0,0,0,0,0,0,0,0,0,0,0,0,0,0,60295,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
> -
> 0,7690,486,0,0,0,39270,0,49094,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12555,0,0,0,0,0,0,0,0
> -
> ,0,0,0,0,20967,17993,12647,0,0,0,16036,32616,0,0,0,0,16294,8555,0,0,0,0,0,0,0,
> 0,
> -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,35174,0,0,0,0,0,0,30346,0,0,0,0,0,0,0,
> -
> 14797,3652,0,0,8268,12934,0,54950,0,0,0,0,2632,33959,0,23175,0,0,0,0,0,36262
> ,0,0
> -
> ,0,0,0,0,32684,26918,0,32676,0,0,0,0,0,0,0,0,0,0,15625,11943,1206,0,0,0,0,1805
> 2,
> -
> 0,0,0,0,0,16422,0,0,0,26404,0,0,28777,0,0,24902,0,0,408,45351,0,35719,0,0,0,0,
> 0,
> -0,0,0,0,0,0,0,0,0,3658,17446,0,165,0,0,0,0,0,0,0,6151,0,0,24424,0,0,0,0,0,0,0,
> -
> 24170,24293,0,0,0,0,0,0,0,0,0,11847,0,39591,0,0,0,0,0,0,9549,2788,0,0,0,0,0,0,0,
> -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1010,0,0,0,0,0,0,26055,31724,0,24233,
> -
> 1828,0,0,0,0,0,0,0,0,0,17284,0,0,0,0,19464,0,0,0,0,0,0,0,0,32452,0,0,0,28871,0,0
> -
> ,0,0,17704,53383,0,0,0,0,0,0,0,0,0,17892,1938,0,0,0,0,0,16362,0,0,21605,0,0,50
> 03
> -,0,0,0,0,0,0,22693,0,22342,0,0,0,55846,0,0,0,0,0,0,0,0,0,22853,0,0,0,0,0,0,0,0,
> -6600,263,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,24836,0,0,0,0,0,0,0,0,0,
> -40711,0,0,0,0,0,33894,0,0,0,0,0,0,13000,0,0,0,0,0,0,0,0,0,0,30308,0,0,0,0,0,0,
> -5386,0,0,0,0,0,0,27844,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,17740,0,0,0,0
> -
> ,25093,29064,0,0,0,0,0,0,0,12680,11462,0,0,0,0,0,0,0,0,84,7303,0,0,0,0,0,0,0,0,0
> -
> ,0,0,27044,457,0,22924,58246,19016,0,2606,45703,0,5157,0,25028,0,0,0,0,0,0,0,
> 0,0
> -,0,0,0,0,0,0,0,0,0,0,0,2065,0,0,0,0,0,31946,0,0,0,0,0,0,0,0,0,0,0,0,33382,0,
> -47878,0,0,0,0,0,0,0,0,25004,0,0,0,0,0,0,0,26153,35654,0,58055,30668,0,0,0,0,
> -25988,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4456,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
> -,0,0,7560,20583,0,0,0,0,0,0,0,0,0,37510,0,0,0,0,0,0,0,0,0,42822,0,0,0,0,0,0,0,0,
> -0,0,0,1733,0,0,0,8196,0,0,11241,0,30572,60326,0,15013,0,0,0,40646,0,23812,0,
> -
> 10022,0,0,0,0,0,0,0,0,12874,31015,0,0,0,0,0,0,1608,0,0,0,0,18308,0,0,0,0,27114,
> 0
> -
> ,0,0,0,0,0,0,7944,1382,0,11813,0,0,0,0,0,0,0,0,0,0,0,0,0,24517,0,11621,0,0,0,0,0
> -
> ,0,0,0,0,0,0,21702,0,0,13100,8262,2644,7973,0,0,0,0,0,0,0,0,0,0,0,0,1033,12581,
> 0
> -
> ,25221,0,0,0,40998,16301,62983,0,0,0,0,1263,9318,0,0,0,18854,0,0,1741,33895,
> 0,0,
> -0,0,0,0,26377,0,0,0,0,0,0,0,0,0,0,32165,0,51143,0,0,0,0,0,29412,0,0,0,0,0,0,0,0,
> -
> 1674,4230,0,0,0,0,0,10502,0,0,0,0,5545,0,0,0,0,0,2099,45158,0,0,0,0,0,0,0,0,0,0,
> -
> 14157,0,26955,0,0,0,0,0,0,0,0,0,17096,0,0,0,0,0,0,0,0,0,0,0,0,0,27050,6726,0,0,0
> -
> ,0,0,0,0,0,28554,0,0,7142,0,0,0,0,16936,0,0,0,25833,0,4399,6980,0,46214,0,0,0,
> 0,
> -
> 0,10630,21164,0,0,0,0,0,0,0,2446,48551,0,0,0,0,0,0,0,0,0,0,0,13381,0,0,0,0,0,0,0
> -
> ,0,15400,12135,0,0,0,0,0,4774,586,0,0,0,0,0,0,0,0,23751,9736,4548,0,0,0,0,0,0,0,
> -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,25577,29607,6250,1637,0,0,0,0,
> -
> 22024,0,0,0,0,22308,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,37414,24044,0,0,0,14474,2973
> 5,
> -0,7077,0,45990,0,0,0,0,30568,40039,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
> -
> 6150,0,4228,0,0,0,0,0,27687,0,0,0,0,0,0,0,24548,21513,1350,0,0,0,33607,0,0,0,0
> ,0
> -,0,0,0,11784,1414,0,0,0,0,0,0,0,18244,940,0,0,0,0,0,0,7270,0,0,0,0,0,0,0,0,0,0,0
> -,0,0,0,0,16709,0,0,0,0,0,0,0,48935,0,0,0,0,0,0,23660,0,0,0,0,0,0,0,0,0,0,0,0,0,0
> -
> ,53350,0,0,0,0,0,0,4236,16358,0,4422,6665,32644,0,0,744,18084,0,11014,0,0,0,0
> ,0,
> -29508,0,0,0,0,0,0,0,7686,0,0,13289,5478,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
> -
> 0,0,0,0,0,0,12872,0,0,24134,1005,22916,0,31429,23400,0,0,0,0,0,0,0,28424,0,0,
> 0,
> -
> 25706,27109,0,0,26345,0,0,0,0,0,0,25126,0,0,88,0,0,0,0,0,0,0,17032,0,0,21799,0
> ,0
> -,10060,0,12296,21892,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,20777,14311,0,58182,
> -32232,0,10282,0,2121,11527,0,0,0,12325,0,0,0,0,0,0,0,28804,2344,8133,0,0,0,0,
> -21864,62695,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2771,0,0,
> -
> 23204,0,0,0,0,0,6278,0,0,0,0,0,26597,0,0,0,0,23144,0,0,0,0,0,31816,20070,0,0,0,
> 0
> -
> ,0,0,0,0,0,0,24456,2118,0,0,0,0,6570,1156,0,0,0,0,0,0,0,30406,0,0,0,28388,3572,
> 0
> -
> ,0,26599,12426,5286,0,0,0,0,0,4967,0,0,0,0,0,0,0,0,0,0,0,0,0,0,24970,24167,0,0,
> 0
> -,0,28745,4678,0,0,0,0,0,0,0,1444,236,0,0,0,0,0,0,0,0,19428,0,0,0,0,0,0,2092,0,0,
> -0,0,0,0,0,0,0,2827,0,0,0,0,0,19881,19204,0,11749,0,0,0,0,0,0,0,17958,0,17894,0,
> -18726,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9190,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
> -,0,0,0,0,0,0,0,21510,5033,0,0,0,0,22855,0,0,0,0,0,14598,0,29605,0,0,0,0,0,0,0,0,
> -617,0,0,0,0,47142,0,0,0,0,0,0,0,0,0,0,3627,0,0,0,0,0,0,0,0,0,0,0,0,0,2225,14823,
> -
> 0,0,2637,6182,78,15078,0,0,0,0,20264,0,0,0,0,0,0,36743,4140,44551,17352,2570
> 3,0,
> -0,0,0,0,0,0,0,0,0,0,0,14024,0,0,0,0,0,0,28004,0,0,0,0,0,7588,0,0,0,0,0,0,0,2087,
> -
> 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,18028,0,0,0,300,14212,0,0,1386,40327,0,0,0,0
> -,0,0,31082,0,0,22374,0,0,0,0,0,35718,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
> -
> 26532,7756,0,0,18982,0,0,0,0,0,0,0,0,6440,1159,7180,0,0,0,0,0,0,45766,0,57798
> ,0,
> -
> 16740,0,0,6802,60454,0,0,0,26470,0,0,0,0,0,65382,4362,7750,0,0,0,0,0,0,9096,4
> 743
> -,334,0,0,0,0,0,0,39974,0,0,0,25828,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3027,0,0,
> -
> 0,15816,0,0,0,0,0,0,0,0,48327,0,0,0,0,0,0,0,0,0,0,16168,41799,0,0,24458,8581,0,
> 0
> -,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12292,0,0,0,0,0,0,0,0,0,0
> -
> ,0,0,0,0,0,0,0,54503,0,0,0,0,5097,30852,18664,0,0,0,0,0,0,16484,0,0,27337,0,0,0,
> -0,0,0,0,0,0,0,0,0,35942,0,0,0,0,0,0,0,4356,0,0,0,0,0,57030,0,0,1417,41191,0,0,0,
> -
> 0,0,23429,0,0,0,0,10024,21735,0,0,10126,0,0,0,0,19046,0,0,0,0,0,0,24105,4710,
> 0,0
> -,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4394,0,0,0,0,13253,0,56391,0,0,0,0,0,0,0,0,0,0,
> -
> 0,19174,0,0,0,0,0,0,0,0,0,55974,0,0,0,52070,0,15620,0,0,0,0,0,2660,0,0,0,0,2164
> 4
> -
> ,0,0,52455,0,0,0,0,0,0,0,0,0,8902,0,0,0,0,0,0,3116,0,464,34726,0,0,0,0,0,0,25003
> -
> ,12423,0,27172,1896,7335,0,0,0,0,0,35686,0,0,0,0,3472,0,0,0,0,22406,0,0,0,0,0,
> 0,
> -
> 0,0,0,45254,0,0,0,0,0,0,0,0,0,0,0,0,0,21124,23594,33127,0,0,0,0,0,0,16684,2208
> 7,
> -0,0,0,0,0,0,0,0,0,0,0,0,8714,0,0,0,0,0,0,0,0,0,0,55814,0,0,0,0,0,0,4109,23460,0,
> -0,8874,0,0,0,0,0,0,0,0,0,147,0,0,0,0,0,0,0,0,0,0,0,0,0,29960,63398,1302,0,0,0,0,
> -0,0,0,0,24806,0,0,0,0,0,0,0,0,0,9799,0,0,0,0,0,0,0,31333,0,0,0,0,0,19557,0,0,0,0
> -,0,5701,0,0,0,63014,0,0,0,0,0,0,0,21254,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12484,0,0,
> -0,48326,0,0,0,0,0,0,0,0,0,0,0,15783,0,0,1202,0,0,0,0,23174,0,0,0,0,0,0,0,0,0,0,0
> -
> ,0,0,0,0,0,0,0,0,0,0,0,3086,49191,0,0,5387,15141,0,0,0,3365,0,0,0,0,20076,1402
> 1,
> -0,0,0,0,0,0,0,0,0,0,376,40198,0,0,0,52039,0,24932,0,0,0,0,808,0,0,0,0,0,0,0,0,0,
> -
> 0,0,0,0,0,9860,0,0,0,0,0,23719,0,21476,0,0,0,0,20776,4807,0,0,3177,16678,0,0,1
> 10
> -,10853,0,0,0,17382,0,0,0,0,0,0,0,0,0,43462,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
> -
> ,0,0,0,7500,4966,0,0,0,0,0,0,0,52102,0,24516,0,0,0,0,0,0,0,0,0,0,0,0,0,26535,0,0
> -
> ,0,46247,0,0,0,15557,0,0,0,0,76,52327,0,0,0,0,17866,0,0,0,0,0,0,0,0,0,0,46758,0,
> -0,0,0,0,19173,0,0,0,0,0,0,0,0,0,44038,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2985,0
> -
> ,0,0,0,0,0,14310,0,0,2125,45831,0,0,0,0,0,0,9838,0,13227,19492,0,0,0,29764,0,0
> ,0
> -
> ,0,686,30053,0,0,0,0,0,30789,139,20837,0,0,0,0,502,18533,0,0,0,0,0,19111,0,0,0
> ,0
> -
> ,0,31396,0,0,0,17444,0,0,0,0,0,0,0,49862,0,0,0,0,0,0,0,0,0,0,0,0,0,0,25610,550,0
> -
> ,0,561,0,29034,0,0,0,3528,0,0,0,1715,14661,18,63463,0,0,0,0,0,0,0,0,0,0,14186,
> 0,
> -0,0,0,0,0,0,0,0,0,0,29578,59014,0,39430,0,0,0,0,2250,16612,0,31780,0,0,0,0,0,0,
> -462,16967,0,29029,0,0,0,0,0,23462,0,0,0,0,0,0,0,0,1768,0,6025,16998,1804,0,0,
> -54182,0,0,0,0,0,0,0,0,14124,0,6154,29702,0,0,0,0,0,7716,0,0,0,0,0,0,0,0,0,0,0,0,
> -0,0,0,0,0,0,0,48807,0,8292,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16389,5933,0,
> -
> 14857,51303,0,0,0,0,0,0,0,0,0,0,0,35623,9097,23047,0,0,23112,0,0,0,0,0,438,0,0
> ,0
> -,0,0,0,0,151,9254,1390,0,0,0,0,0,0,54215,0,0,0,0,6187,0,0,0,0,13095,0,0,0,0,0,0,
> -
> 0,0,0,0,0,0,9866,0,0,59622,0,0,0,0,0,0,0,0,0,25286,0,0,23848,32069,0,0,0,0,0,0,0
> -
> ,0,0,9255,2187,15270,437,0,0,0,0,0,0,0,0,0,0,19493,0,0,0,0,0,0,0,0,0,0,0,11748,0
> -,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16902,0,0,0,0,0,0,0,0,0,22212,1865,17543,0,
> -
> 0,0,0,0,0,21996,0,0,0,0,55975,0,0,0,0,0,0,0,0,32138,21156,0,0,0,0,0,0,14249,0,0,
> -
> 0,2388,0,0,0,0,6823,0,0,0,0,0,0,0,0,0,0,0,0,0,26694,0,0,6059,53511,0,0,0,0,0,0,0
> -
> ,49542,6159,0,0,0,0,0,0,0,0,0,0,0,0,0,1036,24036,0,2501,0,0,0,0,0,0,17419,5127
> 1,
> -
> 3377,15142,0,0,0,0,0,0,5007,62374,0,56935,0,0,0,0,0,0,0,0,0,0,0,24422,0,0,0,0,0,
> -
> 0,0,0,942,0,0,0,0,0,0,0,0,0,0,28263,0,0,0,0,0,0,0,15622,0,19749,0,0,1611,0,2221
> 9
> -,48583,25129,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,17476,0,0,0,0,0,0,0,0,0,0,
> -
> 721,0,0,0,0,32518,0,0,0,18469,0,0,0,0,0,0,5896,29927,3657,23046,0,0,3214,0,0,
> 0,0
> -,0,0,0,0,0,112,0,0,0,0,0,3048,455,0,31012,0,0,0,0,0,0,0,23270,0,32677,0,0,0,0,0,
> -38086,0,0,0,0,0,0,0,0,0,0,0,0,0,4900,0,0,0,0,0,0,0,0,0,25541,0,18788,0,0,22248,
> -
> 1351,0,61734,4524,30629,0,14887,242,29063,0,0,14408,4741,0,0,0,37318,0,0,0,
> 0,0,0
> -
> ,0,0,0,0,0,0,8106,0,32107,0,0,0,0,0,0,0,0,0,0,0,1481,0,0,28132,0,25798,0,59783,
> 0
> -
> ,0,0,0,0,59078,0,0,0,23366,0,0,0,0,0,0,0,30887,0,0,0,0,16200,0,0,0,335,0,0,0,714
> -,0,0,0,0,0,0,0,0,0,0,0,0,0,30730,9478,0,0,0,0,0,0,0,0,0,0,0,18790,0,0,0,0,663,0,
> -
> 0,0,1034,31431,0,0,0,0,0,0,0,0,0,0,30120,0,0,0,0,13925,0,0,0,0,0,0,2280,13414,0,
> -
> 0,0,0,0,0,22028,23687,3017,11047,0,0,21738,18630,0,0,0,0,0,0,0,30246,0,0,0,0,
> 0,0
> -
> ,0,0,0,0,0,0,17257,0,21896,63783,0,0,0,21094,0,18662,0,25700,0,22533,0,0,0,0,
> 0,
> -6341,5800,11111,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15399,
> -
> 12970,6501,0,0,3179,26438,0,0,0,0,0,0,0,15750,0,13062,0,0,0,0,0,0,0,0,0,0,142,
> 0,
> -
> 0,0,0,21284,11177,4391,0,0,0,0,19595,40647,0,0,0,0,0,11877,0,0,0,26439,0,0,0,
> 0,
> -
> 695,49126,27467,11972,0,0,0,0,0,0,9961,0,0,0,31722,62982,0,0,0,0,15817,52710
> ,0,0
> -,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,24614,0,0,0,0,0,20550,0,0,5034,3942,0,0,0,
> -45927,0,0,0,0,0,0,0,0,0,0,2548,0,0,0,0,0,0,45606,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
> -,0,0,0,0,0,0,3405,12582,15563,54087,0,0,0,0,0,0,0,0,0,0,0,0,24202,5893,0,0,0,
> -
> 44230,0,0,0,5605,0,47782,0,32230,0,0,0,0,0,0,0,0,0,0,0,7014,0,0,0,0,16488,3175
> ,0
> -
> ,27237,0,0,0,0,0,40902,0,0,0,0,0,0,0,32004,31434,0,24392,0,0,0,0,0,0,0,0,0,0,0,0
> -,0,0,0,0,0,29130,58214,0,0,0,0,0,0,29002,0,0,0,0,0,0,0,0,0,0,55366,0,0,0,0,0,0,0
> -,0,0,0,0,37926,0,0,0,0,0,0,0,0,1290,0,0,0,4713,0,0,0,0,0,0,0,0,0,0,0,0,0,20812,0
> -,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1803,966,0,17700,0,0,654,19109,0,51655,0,0,0,0,0,
> -
> 10470,1584,0,0,0,0,0,0,0,2506,0,0,25159,4303,0,0,0,395,15879,0,0,0,0,0,0,0,0,0,
> 0
> -,1352,6535,0,19652,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4722,7909,0,0,0,0
> -,30152,0,0,64742,0,0,0,0,0,0,2153,9125,0,0,279,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
> -,0,0,0,41894,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
> -,0,0,0,0,1328,17030,0,0,0,0,0,0,0,54151,0,0,0,0,1775,54535,0,0,0,0,31624,0,0,0,
> -7150,0,0,0,0,0,0,0,1840,35943,0,0,0,0,0,56455,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
> -64486,0,0,0,51174,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4134
> -
> ,0,0,0,0,0,0,0,0,0,0,0,17092,0,0,0,0,0,0,0,0,0,0,0,0,12,16134,19883,39943,10281,
> -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,44711,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
> -
> 14125,2407,0,0,0,0,0,0,0,0,0,0,26921,0,0,0,0,0,22188,0,20810,10053,0,0,0,0,0,0,
> 0
> -,0,0,0,0,0,0,0,0,0,0,0,0,0,0,29220,0,0,0,0,0,0,0,0,0,0,0,0,0,0,28170,0,15208,0,0
> -
> ,32517,5736,19271,3562,10534,0,0,0,59655,0,0,0,0,27084,60422,0,0,24969,0,0,0,
> -
> 2636,0,0,0,0,26277,0,0,0,0,0,0,0,0,0,0,0,30596,3594,0,0,0,8362,14565,0,0,0,0,0,
> 0
> -
> ,10793,12326,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5906,59686,0,0,23081,517,0,15556,0,0,
> 0,
> -8486,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,19877
> -,0,0,0,0,0,0,0,0,7497,0,0,26085,0,0,23784,63591,6568,6310,0,0,0,0,0,0,0,0,0,
> -10054,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7018,14470,18858,0,5641,10660,0,0,0,0,0,0,0,
> -35526,1515,0,0,0,0,0,0,0,0,0,0,0,27656,0,0,9606,0,39590,0,0,0,0,0,0,0,0,0,0,0,
> -53926,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,232,4327,12649,0,0,0,0,0,0,0,0,0,0,0,0,0,0
> -
> ,0,0,0,0,0,0,0,0,0,0,0,0,20199,0,0,0,0,0,0,26730,0,0,0,19400,14695,0,31334,0,0,0
> -,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,19589,0,0,0,0,0,0,0,0,5064,11908,0,27333,0,
> -0,0,0,0,0,0,47751,0,0,0,26662,0,0,0,0,0,0,0,55655,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
> -0,0,0,0,0,0,6245,0,0,0,0,0,0,0,0,23368,63911,0,0,0,0,0,0,0,0,1974,0,0,0,0,0,0,0,
> -
> 8520,24037,0,0,0,0,0,0,0,26279,0,0,0,22886,0,0,0,27782,0,30694,0,0,0,0,0,0,0,0,
> 0
> -,0,0,33703,0,0,0,30405,0,34598,0,51047,0,0,0,0,1908,0,0,0,0,0,0,0,0,0,0,1511,
> -
> 21897,0,0,0,0,0,0,51398,0,24870,0,32647,0,0,0,35015,0,0,0,0,0,0,0,11204,0,0,0,
> 0,
> -
> 0,0,7758,57991,0,0,0,30949,0,0,22,15140,9162,0,0,0,0,0,0,25540,20136,7108,0,0
> ,0,
> -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16427,10789,9805,0,0,0,0,0,0,0,0,0,4680,0,0,52679,
> -0,0,0,0,0,14884,0,0,0,16804,0,0,0,0,0,0,9578,5287,0,0,0,0,0,0,0,34054,0,0,0,0,0,
> -
> 19076,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7627,55719,0,39463,14446,58374,0,0,0,0,2346
> 5,
> -
> 15845,0,0,0,0,0,38534,0,0,0,17893,10922,0,7176,678,0,0,0,0,0,0,0,0,3113,46279
> ,0,
> -
> 0,0,0,0,0,0,23334,0,0,18088,23268,0,62342,0,0,0,16613,0,0,0,0,0,0,0,0,0,38182,
> 0,
> -0,0,0,0,0,25292,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,10344,71,6446,0,0,1893,0,0,
> -1106,0,28680,30756,0,41126,0,0,1492,0,15341,0,0,0,0,17575,0,21220,0,0,0,0,0,
> -
> 25060,2088,21828,0,0,0,0,0,358,0,0,0,0,0,16708,0,0,0,1668,0,0,0,0,0,12260,0,0,
> 0,
> -0,0,0,0,0,4078,0,0,0,0,0,12713,6215,0,0,20329,0,0,0,0,0,0,0,0,0,0,31204,0,0,0,0,
> -
> 0,0,0,0,0,0,3732,0,1646,0,0,27460,0,34406,17128,14341,0,0,0,0,0,19527,0,0,0,0,
> 0,
> -0,0,0,0,0,6120,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8551,21546,10212,3020,
> -
> 2951,0,17638,0,0,6985,44999,2218,8197,0,0,30472,63366,0,26660,0,0,0,0,0,0,0,
> 0,0,
> -
> 0,0,0,1265,0,0,0,0,0,0,0,2610,0,0,0,11278,20295,0,0,0,0,0,19780,0,0,0,0,0,0,235
> 3
> -,10852,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5421,24292,0,0,0,0,0,0,0,0,0,0,0,0,0,34407,0,
> -
> 0,0,0,0,0,15432,20774,0,0,0,0,0,0,0,0,12360,10757,0,0,0,33126,0,0,0,0,0,0,0,0,0,
> -
> 0,0,29573,0,2343,0,0,0,0,0,63079,0,0,0,0,0,0,0,0,0,43015,0,16038,0,0,0,0,0,0,0,0
> -,1480,25573,0,0,0,0,0,0,0,8839,0,0,0,0,0,0,0,24645,0,0,0,0,0,0,0,0,0,0,0,0,0,
> -5063,0,0,0,0,0,45830,0,0,0,0,0,0,0,0,0,0,823,0,0,64039,0,0,0,0,0,0,0,0,0,0,0,0,0
> -
> ,15300,0,0,0,0,0,0,2924,46759,6760,19268,0,0,0,0,0,0,0,0,0,34182,0,0,3977,181
> 49,
> -
> 0,0,0,32199,0,0,0,0,0,0,0,0,0,23524,25994,0,0,10343,0,0,0,9733,0,0,0,0,0,0,0,0,0
> -
> ,4740,0,0,0,0,0,0,0,0,0,16741,0,0,4626,23367,0,0,31400,0,0,3557,0,0,4234,0,0,0,
> 0
> -
> ,0,0,28486,0,0,0,0,0,14213,0,57191,0,0,0,0,0,0,0,0,0,0,240,0,0,0,0,65318,29832,
> 0
> -
> ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,29989,0,31846,0,0,8170,0,0,4421,27626,30884,
> 0
> -
> ,0,20204,0,0,0,0,44614,534,20868,0,0,0,0,0,0,0,0,0,0,0,0,0,28710,0,10277,0,0,0,
> 0
> -,0,29511,0,19813,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,27020,0,0,0,0,0,0,53094
> -
> ,0,35207,0,0,0,37542,0,61766,8584,8037,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1248
> 8
> -,22757,0,0,0,0,0,0,0,0,0,0,0,0,0,23814,0,0,0,0,0,0,0,0,0,19973,0,0,0,63943,0,0,0
> -,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,36006,0,0,0,19012,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
> -,0,0,0,0,8580,0,0,0,0,0,0,0,18021,0,0,0,0,0,0,0,0,80,1254,0,0,0,42630,0,0,0,0,0,
> -0,0,16262,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2124,25479,0,0,0,0,16873,0,0,0,0,3142,
> -0,0,18443,0,0,0,0,0,3917,0,8841,1190,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
> -
> ,0,20645,0,0,0,0,0,0,0,0,0,0,0,9284,0,0,24394,41351,0,0,0,42087,0,62566,0,0,0,0,
> -
> 0,0,0,0,0,0,6728,4199,0,0,0,0,25515,0,1231,0,374,15623,0,29956,0,14118,0,0,0,
> 0,0
> -,19047,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,31718,0,0,0,0,0,0,0,0,0,0,0,20900,0,16743,0
> -,0,0,28902,0,0,0,0,0,0,0,0,0,0,0,0,2578,0,0,0,0,0,0,0,0,0,13838,0,0,10052,0,0,0,
> -
> 0,7432,43783,17097,0,0,0,0,0,873,0,0,0,398,0,0,0,0,0,0,0,0,0,8459,23559,0,5303
> 0,
> -
> 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,35750,0,4071,0,0,0,38662,0,41414,0,0,0,0,11656,0,0
> -,0,0,0,4011,42695,0,0,0,0,0,0,0,0,0,0,0,0,0,0,25353,0,0,0,0,0,0,0,27177,22372,0,
> -0,0,0,0,30980,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,46278,3976,12711
> -
> ,0,0,0,0,0,0,0,0,0,0,0,20517,0,0,0,0,0,0,0,0,0,0,0,0,4072,11078,0,0,16553,2405,0
> -
> ,0,0,0,0,0,0,0,2670,0,0,0,0,0,0,32998,0,0,0,0,0,0,0,47046,0,30533,0,0,11050,973
> 4
> -
> ,13129,0,0,0,0,23494,0,0,0,0,0,58310,0,0,0,57543,0,0,0,0,0,0,0,0,0,0,0,0,0,454,0
> -
> ,0,0,0,0,0,5163,59687,2220,0,0,0,0,0,0,29510,0,0,0,0,0,0,0,0,0,0,0,17316,0,2006
> 9
> -,0,0,0,0,0,0,0,0,0,5319,0,0,0,0,0,0,0,0,0,27174,0,0,0,0,0,0,0,22949,0,0,0,0,0,0,
> -
> 0,0,0,0,0,0,0,0,19208,0,0,0,0,0,0,20933,0,0,6026,8742,0,0,0,17380,0,13127,2797
> ,0
> -
> ,0,30116,0,0,5963,8004,0,57126,0,0,0,0,0,42854,14792,30759,0,24964,0,0,0,0,0,
> 0,0
> -,0,0,0,0,0,0,0,0,0,0,16933,0,0,0,0,0,0,15176,40839,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
> -788,30341,0,0,0,0,21036,24102,0,0,0,0,30123,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
> -
> 22597,31531,26789,0,59559,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9352,29863,0,0,0,0,0,0,0,
> 0
> -
> ,0,24551,0,0,0,0,0,0,0,20516,0,0,0,39462,3665,0,28265,0,8778,64262,0,57414,91
> 32,
> -
> 0,0,18276,0,0,0,0,0,0,0,0,0,0,26344,30725,524,19751,0,13796,0,0,0,0,0,0,0,0,0,0,
> -
> 18155,0,12841,0,74,24998,13579,1061,0,64199,0,0,8776,0,0,60231,0,25412,0,0,
> 0,
> -
> 59143,0,0,0,0,0,0,14344,1510,0,0,0,38374,0,0,0,0,0,0,0,0,13353,0,0,0,0,0,0,0,0,0
> -,0,9446,0,0,0,0,0,0,0,32613,0,0,0,0,0,0,0,0,0,0,0,0,0,19844,0,0,0,0,14859,0,0,0,
> -0,6662,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14154,0,29770,0,0,0,0,0,
> -16520,2182,0,0,0,0,0,36102,3340,0,0,0,0,0,0,0,0,25189,0,0,0,0,0,0,0,0,0,0,0,0,0,
> -0,0,0,15720,0,0,0,0,0,0,22758,0,0,304,0,3243,14117,0,0,0,0,0,0,0,0,0,0,5130,
> -12679,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,21733,10441,0,0,0,0,0,0,0,0,0,0,
> -0,0,0,0,0,0,0,0,36103,0,0,0,0,0,23590,0,57479,0,0,0,0,0,0,0,0,0,0,0,0,10824,
> -18372,0,0,0,0,0,35078,15722,12967,0,0,0,0,0,34599,0,0,0,0,0,0,0,0,0,0,0,0,0,
> -
> 53639,0,38630,0,0,0,0,0,0,31017,11333,0,0,0,0,19144,0,9513,0,0,0,0,0,0,0,0,567
> 11
> -
> ,24042,0,1197,0,0,58502,0,0,0,0,0,0,0,0,0,8230,6121,18628,0,0,0,0,0,0,25290,0,
> 0,
> -
> 0,0,0,1514,0,0,0,0,0,0,0,14378,9798,32363,0,0,0,0,0,9577,0,0,0,0,0,0,26788,0,0,
> 0
> -
> ,0,0,0,330,10533,0,0,0,0,0,42246,0,0,0,0,0,0,5074,21028,0,38119,0,0,0,0,0,0,248,
> -0,31176,62054,0,53287,0,0,0,0,271,0,0,0,0,0,0,0,0,0,0,0,0,0,9224,2117,0,0,0,0,
> -15818,5607,0,52582,0,0,0,0,0,0,0,0,18248,24005,23018,0,0,0,0,0,0,0,0,0,0,0,0,0,
> -
> 427,0,0,39910,0,0,7080,11399,0,0,0,0,0,0,0,0,0,0,22220,57894,0,0,0,0,0,0,0,131
> 56
> -
> ,0,1413,1007,0,0,0,0,21415,0,21543,0,0,0,0,0,0,0,0,0,41702,22538,9573,0,0,0,88
> 06
> -,0,0,6920,56359,0,0,0,0,0,0,0,0,0,0,0,42215,0,0,13708,0,0,0,0,0,0,0,0,0,0,16453,
> -0,0,0,0,0,0,1582,1764,3282,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11653,0,0,0,0,12139,0,
> -
> 29482,31076,1673,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,40262,0,0,0,33862,0
> -,0,0,0,0,20996,0,0,0,0,0,4615,0,0,0,0,0,0,0,0,0,0,0,43943,333,19367,0,0,0,0,0,0,
> -
> 0,26821,0,32389,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4936,11687,0,0,0,0,0,0,0,0,0,10885,0
> -
> ,0,0,0,0,25926,0,0,0,0,0,0,15851,0,0,0,0,0,0,0,0,0,8360,0,17130,7942,0,11460,0,
> 0
> -,0,0,0,0,0,0,0,0,0,0,0,0,0,18150,14248,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
> -22310,0,0,0,42758,0,0,0,0,0,0,0,0,29354,5574,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
> -,0,0,0,0,0,0,0,0,0,0,0,31109,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11236,0,0,0,0,0,0,0,0
> -,0,0,0,0,0,9156,0,0,1801,14023,0,0,0,0,0,62406,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
> -
> 23620,0,0,0,0,0,0,0,0,0,0,31018,65510,0,0,0,0,0,0,0,26182,0,0,0,0,0,0,0,27717,0,
> -0,0,0,0,0,0,46950,0,0,0,0,0,0,0,0,0,0,0,0,0,31108,0,11366,0,0,0,3717,0,0,0,0,0,0
> -,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8552,6054,3339,0,0,0,0,51622,0,
> -0,0,0,0,0,0,3718,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,28358,0,2756,0,0,0,0,0,0,0,0,0,0,
> -
> 0,0,0,0,0,0,0,0,1462,0,0,27622,0,0,0,0,0,0,0,62502,14410,56743,0,0,0,0,0,0,0,0,0
> -,0,0,0,0,0,0,0,0,0,0,0,0,0,12206,0,0,0,0,0,0,0,0,0,0,0,0,36550,0,38054,0,0,0,
> -
> 21221,0,0,0,0,0,0,0,27077,0,0,16906,0,12587,12101,0,0,0,0,0,0,10414,28775,217
> 69,
> -60167,0,56646,0,0,0,0,0,20740,0,0,0,0,0,0,5931,5351,0,65478,0,0,0,0,0,0,7977,
> -52647,0,4868,0,0,0,55463,0,0,0,0,0,32197,0,0,0,0,0,13445,0,0,0,26631,0,0,0,0,0,
> -
> 11237,0,0,0,0,209,1285,0,0,1928,0,0,0,0,43334,23849,23172,0,0,0,0,0,0,0,0,247
> 12,
> -
> 62439,8811,3463,20457,0,0,0,0,0,0,0,0,0,16008,56263,0,0,0,0,0,0,0,0,0,0,0,6035
> 8,
> -
> 22761,6565,0,0,30888,27686,0,0,0,17093,0,0,0,0,22121,0,0,0,7593,14182,0,2810
> 3,0,
> -0,0,0,0,45126,0,0,0,0,0,0,0,0,0,0,0,0,0,31844,0,0,0,0,0,0,0,0,0,0,0,0,0,18500,0,
> -0,0,0,28202,0,0,0,0,0,0,0,0,26308,0,29541,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
> -
> 29572,0,0,0,21285,0,0,0,0,0,60839,0,0,0,0,0,30407,15949,2981,0,0,0,46439,0,0,
> 0,0
> -
> ,0,23911,26505,25222,12811,5895,0,6343,0,0,0,0,0,0,0,0,0,0,0,31815,0,0,0,0,0,0
> ,0
> -
> ,0,19688,10245,0,0,0,31301,26985,28964,0,0,0,0,0,0,0,0,27208,31172,0,0,0,0,21
> 6,0
> -,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16292,0,0,0,0,0,8743,0,0,0,0,0,0,0,0,
> -0,0,0,0,0,6438,0,0,0,33319,0,0,0,33286,0,0,0,0,0,0,0,0,0,22181,7499,24774,0,
> -
> 10756,0,44775,724,0,25768,25669,24873,5349,25257,0,0,54566,0,0,0,0,0,0,0,0,0
> ,0,0
> -,327,439,357,0,0,6536,8452,0,0,1802,0,0,61350,0,15045,0,0,0,0,0,0,0,0,0,0,0,
> -38343,0,0,0,0,0,0,0,0,0,0,32491,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
> -
> 22885,0,0,32073,0,0,0,9546,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,27748,0,0,23176,0,0,0
> -
> ,0,0,0,0,0,0,0,0,0,24583,0,0,0,0,0,34118,0,0,0,0,2158,0,5586,30340,0,0,0,0,0,0,0
> -
> ,0,0,0,0,0,0,24452,0,0,0,0,2409,4390,0,24196,0,0,0,0,0,0,32264,26948,20587,0,0
> ,0
> -,2155,0,0,0,0,0,0,0,0,0,0,0,4328,26276,0,0,0,0,0,0,0,0,23564,0,12458,11367,0,0,
> -25162,0,0,0,0,0,0,65414,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,32966,0,0,0,
> -
> 34662,0,0,0,0,0,39238,0,0,0,0,11400,10214,266,12452,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
> -0,0,0,0,0,15173,0,0,0,13668,0,13222,0,23364,0,0,0,0,0,11941,0,0,0,0,0,0,0,0,0,
> -25575,0,0,0,57383,0,0,0,10308,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
> -
> 0,0,0,2865,9287,75,0,0,0,0,0,0,0,0,0,0,21508,22380,59526,0,0,0,23589,0,0,0,515
> 90
> -,0,0,0,0,0,0,0,0,0,0,0,4645,3980,28295,0,0,0,0,0,12388,0,0,0,0,0,0,0,0,0,0,0,
> -21734,0,17607,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,41767,0,0,0,0,0,0,0,18436,0,0,0,0,0,
> -0,0,21958,0,19430,0,0,1204,0,0,0,0,0,0,0,0,0,3240,55239,0,0,0,0,0,30660,0,0,0,
> -28901,0,0,0,0,4716,0,0,0,0,0,0,0,0,0,0,0,11754,0,0,0,0,22086,0,22564,8749,0,0,
> -28391,0,0,0,0,0,0,0,0,0,0,0,2886,0,0,0,0,0,0,0,29062,0,0,0,0,0,0,0,40358,0,0,
> -
> 15916,39526,0,13735,0,0,0,0,28938,0,407,4006,0,0,0,26916,0,0,0,0,0,27526,302
> 80,0
> -,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,24586,0,24649,5126,
> -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8684,0,0,0,0,0,0,0,23019,0,22377,18599,0
> -
> ,0,0,0,0,0,0,0,0,0,27593,9735,0,20196,0,0,0,0,28168,48423,0,0,0,0,0,31399,0,0,0,
> -0,0,0,0,0,0,0,0,0,0,0,0,13892,0,0,0,0,0,17606,0,0,15242,29767,26378,17701,0,0,
> -
> 14472,0,4840,0,0,0,0,0,0,24708,0,9349,4330,0,0,0,0,0,0,0,16137,0,0,34854,0,0,0
> ,0
> -
> ,0,0,0,0,0,0,0,25063,0,0,0,0,0,0,6603,12583,0,0,0,0,0,0,0,0,7433,29188,0,0,0,0,0
> -
> ,31270,0,0,22920,3143,0,0,0,0,0,23461,0,0,0,0,0,0,0,0,618,0,0,0,0,21381,0,1152
> 4,
> -0,0,0,0,0,0,21004,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,312,23239,0,0,0,0,0,0,0,0,0,0,0,
> -
> 0,2313,0,0,40614,0,0,14825,0,0,0,0,0,0,46535,0,41190,7853,0,31656,0,0,0,0,0,0,
> 0,
> -
> 0,0,3433,5255,0,0,0,0,0,0,0,33958,0,0,0,0,72,15493,0,0,0,0,0,0,0,36070,0,0,0,0,0
> -
> ,0,0,14724,0,0,0,0,0,29828,0,0,0,0,0,0,0,18822,20008,0,0,0,0,2438,2952,0,0,0,0,
> 0
> -,0,0,0,0,0,0,0,0,3342,0,0,0,0,0,0,0,0,0,0,0,0,0,0,24420,0,19908,0,0,0,8101,0,
> -
> 17479,0,0,3530,0,8202,29319,0,0,1132,6789,0,0,23881,0,0,0,4810,0,0,46918,0,0,
> 0,
> -41574,0,0,0,0,0,0,0,0,0,48582,0,0,0,0,0,0,0,0,0,0,0,0,0,39334,0,0,0,26117,0,0,0,
> -
> 0,0,0,5100,0,0,0,0,0,23496,27813,4045,54918,0,0,0,0,0,0,6473,7428,0,0,0,0,679
> 2,0
> -
> ,0,0,0,0,3560,32103,0,0,0,0,0,0,0,0,0,0,0,54790,0,0,6926,0,0,0,0,16518,0,0,0,0,0
> -,20806,0,0,0,0,1841,3174,0,0,0,0,9612,18374,0,0,0,0,32744,0,0,9671,0,59879,0,
> -23300,8073,0,0,14758,0,0,0,10342,0,0,0,0,0,0,24808,14759,0,0,0,0,0,0,5515,0,0,
> -14852,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2354,23271,0,32740,0,0,0,0,0,0,0,0
> -,0,0,18472,0,0,0,0,0,0,0,0,33190,0,0,0,0,0,0,0,0,8972,21669,0,0,0,0,0,0,0,0,0,0,
> -
> 0,25574,0,0,0,0,5096,0,14283,55367,0,0,0,0,0,0,0,0,0,12644,0,0,0,0,4651,0,0,0,0,
> -
> 0,0,0,661,0,0,13638,19466,0,0,0,0,0,31273,0,8010,0,0,0,0,0,3211,0,0,0,0,63430,
> 0,
> -0,0,0,0,15237,0,0,0,0,0,0,19018,2437,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14312,0
> -,0,0,0,16836,0,0,471,35975,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
> -,6023,0,0,0,0,0,0,0,0,11593,9639,0,0,0,55783,0,5700,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
> -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,27908,0,26598,0,0,6667,6470,0,0,0,0,0,0,0,
> -
> 62534,0,0,0,0,16522,27911,0,0,10025,7172,0,0,779,0,360,17477,0,0,0,61991,775
> 2,
> -7717,1494,0,0,0,26569,40742,0,0,0,0,0,0,0,26406,10474,32196,0,0,0,0,0,50567,
> -16521,11716,0,0,0,0,0,55558,0,0,0,0,0,0,0,0,0,0,0,61926,0,26436,0,0,0,0,4459,
> -10598,0,0,0,0,0,0,0,0,0,0,0,9223,0,29318,0,0,0,0,0,60423,0,0,0,0,0,0,0,47078,0,
> -
> 50246,0,12612,0,0,0,0,0,0,0,61799,0,55015,0,21060,7309,0,0,0,0,0,11976,0,0,0,
> 0,
> -
> 23527,0,0,0,0,0,0,10347,15942,0,34023,0,0,0,0,4969,0,0,0,0,0,0,0,0,28997,0,0,0,
> 0
> -,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,36454,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
> -3466,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,19716,
> -28872,0,0,0,0,0,22152,0,0,0,0,0,0,26342,0,0,0,9764,0,0,0,0,0,0,0,21798,0,0,0,0,
> -
> 13,6853,32136,0,0,0,0,0,0,0,750,0,0,54502,0,0,0,0,0,0,0,0,0,46183,0,0,625,2285
> 4,
> -
> 0,0,0,0,2061,23588,0,0,11049,56262,0,0,18538,1509,0,0,17258,4453,0,0,0,0,124
> 29,0
> -
> ,0,0,0,8102,0,0,0,0,0,0,8074,0,23852,0,0,0,0,0,0,0,0,0,0,0,16136,3428,0,27876,0,
> -0,0,7332,0,0,0,0,0,28900,0,0,2284,0,0,17573,201,1508,0,0,0,0,0,0,0,0,0,31365,
> -
> 27688,22565,0,0,0,5159,0,0,0,0,4584,42599,0,0,0,44422,1068,23173,0,0,0,613,0,
> 0,0
> -,12645,0,0,0,0,0,27076,6732,0,0,0,3913,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
> -
> ,0,0,0,0,0,0,0,0,0,0,0,22244,29992,15911,0,0,0,0,0,22982,0,0,0,0,0,0,0,50598,0,0
> -
> ,0,0,0,0,5161,1574,0,0,0,0,0,0,0,0,0,19108,0,0,0,35014,0,0,0,25956,29067,0,0,0,
> 0
> -,0,0,0,0,0,0,47079,0,0,0,0,0,0,0,0,0,0,1356,61927,0,0,0,64455,2122,64231,0,0,
> -
> 18763,0,0,0,0,0,0,0,0,0,907,34471,0,0,0,39078,0,0,1995,0,0,0,0,0,0,0,0,0,0,5651
> 8
> -,0,0,0,0,0,0,0,0,0,0,0,0,822,0,15978,44423,0,0,3112,325,0,0,0,0,0,15397,0,0,0,0,
> -
> 0,0,0,0,0,0,1193,4294,4968,15559,0,46150,0,0,0,0,0,18917,0,0,0,0,0,0,9928,375
> 43,
> -
> 0,0,0,0,13097,36999,0,0,0,15430,0,0,8424,29639,0,0,0,0,0,0,0,0,0,0,0,0,0,25734,
> 0
> -,0,0,0,0,0,0,0,0,0,0,0,0,40487,0,13284,0,11141,0,0,0,32388,0,0,0,0,0,0,0,0,0,0,0
> -,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5298,57702,0,0,0,0,0,0,0,13060,0,0,0,0,0,0,
> -8233,42278,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,36422,0,0,0,7972,0,0,0,
> -
> 18437,0,0,0,0,7406,0,0,0,9225,0,0,0,0,0,0,0,0,0,13865,47591,18220,53703,0,0,0,
> 0,
> -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2796,0,0,0,0,0,24940,17223,0,0,0
> -,13221,0,0,0,0,0,0,0,0,0,0,15848,0,0,0,0,0,6122,1735,0,0,0,0,0,0,0,0,0,0,0,0,0,0
> -
> ,0,0,0,0,16968,18151,0,0,0,0,0,47494,0,0,0,0,0,0,26089,19494,0,0,0,0,0,15494,0,
> 0
> -,0,0,0,0,0,0,0,0,28809,0,0,0,0,42727,0,55174,0,0,0,0,0,0,0,0,0,0,0,20485,0,0,0,0
> -,0,0,0,0,0,0,0,58598,0,0,0,0,0,0,0,0,0,0,0,0,0,15172,0,0,0,0,0,0,0,0,0,35302,0,
> -
> 48135,20972,33094,0,0,0,0,0,9765,0,0,0,0,0,0,0,0,0,39559,0,0,13736,6950,0,0,0,
> 0,
> -
> 23658,8903,0,0,0,0,0,0,0,22662,0,0,0,0,0,58886,7468,0,0,0,0,0,0,0,0,64550,0,0,0,
> -0,0,47622,0,0,0,50886,0,0,0,0,0,57606,912,0,0,0,0,0,0,0,0,0,1449,0,1169,0,718,
> -
> 46151,12104,0,0,0,0,0,0,48230,0,0,0,0,0,0,0,0,0,0,1259,0,0,33734,23208,62567,
> 0,
> -
> 65158,0,0,0,0,0,0,0,0,0,0,28684,59878,0,0,0,0,0,0,0,0,0,0,25769,0,0,0,0,65479,0,
> -
> 0,0,0,555,22789,0,19748,1769,10246,8680,0,0,0,0,0,0,0,0,0,14250,0,5899,3303,0
> ,0,
> -0,0,0,0,0,0,21097,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,21638,0,0,0,0,0,0,
> -0,0,0,0,0,0,0,0,10795,0,0,0,16204,0,0,0,0,0,26986,2469,0,14660,0,0,0,0,0,45447,
> -
> 12234,3494,4555,10566,0,0,0,0,0,0,0,0,0,0,0,0,2801,0,0,0,15755,0,0,0,0,0,0,0,0,
> 0
> -,0,0,0,0,0,0,0,0,0,39654,0,0,0,0,0,0,6763,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
> -
> 33574,0,10279,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,63527,0,0,3912,0,0,7492,0,0,0,35142,
> -
> 0,0,0,0,0,0,17576,8103,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16713,4198,0,0,4782,0,0,0
> -,0,0,0,0,0,0,0,0,0,0,0,16228,0,0,0,0,25961,20166,0,0,0,10980,0,0,0,0,0,14340,
> -
> 18922,14567,0,44199,0,0,0,0,0,0,0,18406,0,0,0,0,0,37606,0,0,0,0,0,0,0,0,0,2090
> 2,
> -0,0,0,56358,0,38342,0,0,0,0,9514,36071,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,21700,0,0,
> -5266,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1134,0,1453,0,0,0,0,0,3882,0,0,0,
> -
> 0,0,0,0,0,4004,0,0,0,51910,0,0,0,0,0,23076,4648,0,0,0,31051,25351,0,0,0,22884,
> 0,
> -
> 0,0,0,0,63975,0,0,2376,16997,0,0,2096,0,0,0,3373,7046,0,0,0,0,0,0,0,30726,0,0,
> 0,
> -0,20,0,13707,614,0,0,12840,3079,0,0,0,0,0,51046,3729,0,32680,0,0,0,0,0,24008,
> -62759,0,0,4745,0,0,0,0,0,0,0,0,0,0,0,0,0,2414,0,0,44262,0,0,0,0,0,0,0,0,0,0,0,0,
> -
> 0,0,24937,0,0,0,0,0,0,0,0,19140,0,13575,0,0,0,0,0,0,0,39110,0,0,0,28036,0,0,0,0,
> -0,0,0,0,0,0,0,0,0,0,0,0,0,4261,0,0,0,0,5992,0,264,0,0,0,0,0,0,0,13739,0,21928,0,
> -
> 0,0,0,0,0,0,0,0,0,0,4232,15110,0,0,0,0,0,0,0,0,0,30022,0,0,27977,0,0,0,0,0,24776
> -,0,0,0,0,0,2962,0,0,0,0,0,0,26564,22441,0,0,0,0,0,13640,11205,0,0,0,0,0,0,0,0,0,
> -0,0,0,0,0,19305,1894,0,0,0,0,0,0,0,0,0,0,9389,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14119,
> -5224,135,0,0,0,0,0,0,0,0,0,25796,0,0,0,0,0,0,7470,0,0,0,0,63815,0,55654,0,0,
> -12584,0,1524,33223,0,0,0,9895,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11624,
> -
> 0,0,0,5614,0,0,0,0,0,0,0,21320,0,0,53607,0,51206,0,0,0,25863,0,0,0,0,0,0,0,0,0,0
> -,0,8964,1740,0,0,0,0,0,0,0,0,13476,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7975,0,
> -0,3306,8134,0,8389,48,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,25766,0,0,0,0,0,0,0,0,0,
> -52166,0,0,0,0,0,0,0,0,0,0,0,0,0,21477,31112,31652,0,0,0,0,0,0,0,28452,0,0,0,
> -
> 44231,0,0,0,0,0,0,0,24805,0,0,0,0,0,0,0,0,0,0,12428,6471,0,0,0,0,525,17926,0,0,
> 0
> -,26919,0,0,18120,0,0,0,30024,0,0,0,0,0,0,0,0,0,0,29189,0,0,0,43559,0,0,0,0,0,0,
> -19787,7557,0,59334,0,0,10184,6085,0,44039,0,0,0,0,0,0,0,11175,0,0,0,0,30440,
> -63110,0,0,0,0,0,0,11017,0,0,0,0,0,0,0,0,27204,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
> -0,0,0,0,0,0,0,0,0,0,29126,0,0,0,0,0,0,0,0,0,0,0,0,0,0,622,0,5226,2727,0,15588,0,
> -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4650,0,2675,0,0,32420,0,0,0,61511,0,0,
> -
> 5419,17829,2123,0,0,0,0,0,0,0,0,0,0,0,0,0,0,38183,2640,0,11274,14533,1842,0,0,
> -
> 42663,12681,3430,0,11845,0,0,0,0,0,0,0,0,0,6533,0,0,0,0,0,54598,0,0,0,0,0,0,0,0,
> -
> 0,0,0,0,12616,38535,0,0,0,0,0,32229,0,0,0,54279,0,48614,0,0,0,0,0,0,0,0,0,0,0,0,
> -
> 0,0,31401,0,0,0,0,34310,0,0,0,22788,0,52134,0,0,0,0,0,0,0,23302,0,0,0,0,0,0,0,0,
> -
> 0,0,0,0,0,0,0,0,0,0,0,40678,0,0,0,51463,535,0,0,0,0,15525,0,0,0,0,0,0,4904,869,0
> -,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,63718,0,0,0,0,0,0,0,0,1678,0,692,0,0,0,
> -
> 0,0,0,0,0,0,26216,0,0,0,0,0,29355,0,0,0,0,25095,0,0,0,0,4335,0,0,0,0,0,14538,0,0
> -
> ,0,0,0,0,0,0,0,27273,55014,0,0,0,0,0,27271,0,0,0,0,0,30468,0,0,0,0,18186,0,0,0,0
> -
> ,0,14345,0,0,0,2152,0,0,0,0,0,0,0,0,0,0,0,0,0,0,58438,21034,0,23339,21318,0,0,0,
> -0,0,0,0,0,0,0,0,0,0,0,0,21412,0,0,0,0,0,0,0,12869,0,0,4875,0,0,0,0,29191,0,0,0,0
> -,0,0,1640,10247,0,14244,0,0,0,0,9867,0,0,0,0,0,12363,0,0,7653,0,0,4168,2663,0,
> -4580,0,11143,0,0,0,0,0,0,0,30662,0,0,0,0,0,6724,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
> -0,0,0,0,0,0,0,13764,0,0,0,0,0,0,0,0,0,0,0,0,234,6821,0,0,0,0,0,0,0,0,0,0,0,0,0,0
> -,0,0,0,0,0,0,0,0,0,25639,0,0,0,0,0,0,0,0,0,29958,0,3461,0,0,0,0,0,0,0,0,0,28324,
> -
> 18795,7013,12746,11655,0,37287,0,0,10953,7718,9705,0,0,0,0,0,0,0,0,0,0,46534
> ,0,0
> -,0,0,0,0,0,0,0,0,8137,17988,0,25156,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,41415,0,0,0,0,
> -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15784,6918,0,0,0,0,7019,10919,0,0,0,
> -0,0,0,0,0,0,0,4171,55495,4940,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,22440,19333,0,0,
> -
> 28136,0,6249,21317,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,53414,0,0,0,57318,0,0,0
> -,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,39303,0,0,0,0,0,19940,0,0,0,0,0,0,0,25543,0,0,0
> -
> ,0,0,0,0,0,0,0,0,0,2698,3911,0,0,0,26790,0,0,0,0,0,0,32424,0,0,18470,0,0,0,1472
> 6
> -
> ,29834,0,0,0,0,0,0,0,0,0,0,0,1000,4197,0,0,0,19366,0,0,0,39878,0,0,0,0,2185,890
> 1
> -,5288,9829,25000,0,0,0,0,0,0,1062,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,35622,0,
> -
> 0,23048,62503,6506,0,0,0,0,0,0,0,13609,10438,0,0,0,0,0,0,0,0,0,0,7723,42119,0,
> 0,
> -
> 0,0,0,13317,0,0,0,41606,0,27111,0,0,21194,11461,0,0,0,0,26856,58342,0,0,0,0,0
> ,0,
> -
> 0,0,0,0,0,0,0,0,20940,48710,0,0,0,0,0,0,5227,0,0,0,0,0,10061,31300,0,0,0,19236,
> 0
> -,0,0,0,0,30277,13896,0,0,0,12876,13159,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,428,
> -46951,13134,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15462,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
> -0,0,0,0,0,0,0,0,0,0,0,0,21668,0,0,0,0,0,0,0,0,0,0,0,0,2249,0,0,0,0,44967,0,0,0,0
> -,0,0,3465,0,0,0,0,0,0,0,0,0,0,0,0,0,0,24868,0,0,0,0,0,23909,0,0,0,0,0,0,0,0,0,0,
> -0,0,0,0,0,0,2190,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16164,0,
> -
> 10437,0,0,5263,20102,20938,0,0,0,1192,1030,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
> 0
> -
> ,0,21385,4870,0,0,0,0,0,0,0,0,0,0,0,18596,0,0,0,0,1422,4038,2858,0,0,0,0,0,0,0,0
> -
> ,48998,0,0,0,0,0,0,0,0,6508,37350,0,0,0,0,0,0,0,0,17001,39431,0,0,0,0,0,30182,0,
> -21445,7403,28164,0,51750,0,0,0,62631,0,0,0,0,0,0,0,31206,0,0,0,0,0,0,0,0,0,0,0,
> -
> 7751,0,0,0,0,0,0,0,0,0,13477,0,0,456,26693,0,0,0,0,0,0,0,0,0,0,0,0,14890,0,0,0,0
> -
> ,0,26697,22022,13225,27364,0,0,0,18884,0,0,0,0,0,0,0,0,3659,0,0,0,0,0,0,0,0,0,0,
> -
> 0,1448,5413,0,0,0,0,0,0,0,0,0,0,0,6340,0,0,18091,18725,0,0,0,0,0,0,0,0,0,0,0,0,0
> -
> ,22118,0,0,0,18981,0,0,0,0,0,0,0,0,0,29223,3724,0,0,0,0,43526,0,0,0,25668,0,0,0,
> -
> 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,21545,9862,0,22692,32201,60646,0,7300,0,0,
> -0,58887,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,19460,0,0,0,0,0,0,0,0,0,50342,0,
> -
> 65255,4360,17286,0,0,0,0,0,0,0,28708,0,0,30025,60102,0,0,0,0,0,0,0,0,0,47014,
> 0,
> -
> 31973,0,9572,0,0,0,0,0,0,0,18501,0,0,0,0,0,14597,0,0,0,53735,5228,22183,0,0,0,
> 0,
> -0,0,1554,24164,0,0,0,0,0,0,0,0,0,0,0,0,10827,0,0,0,0,34918,0,0,0,0,22252,0,0,
> -
> 46855,0,0,0,0,0,31207,0,0,10733,0,0,63334,0,0,0,0,8616,50119,20169,12678,0,0,
> 0,0
> -
> ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,58087,20298,5,0,0,30920,0,0,0,0,0,0,0,296,13190,0
> -
> ,30663,0,0,18536,12228,0,6788,0,0,0,0,30890,21796,0,0,526,0,0,0,0,0,0,0,0,0,0,
> 0,
> -
> 0,20965,0,0,0,0,2161,0,0,0,0,0,0,24038,0,0,0,0,13544,7398,0,0,32522,9605,0,0,0
> ,0
> -
> ,3208,7590,0,0,0,43846,0,0,0,38663,0,0,0,0,0,39014,4142,0,0,0,0,0,0,0,0,0,0,0,0,
> -0,0,6373,0,0,13676,0,0,0,0,30374,21288,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
> -,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,22791,0,0,0,0,0,37958,0,0,0,0,0,0,0,0,0,0,9452,
> -
> 9990,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4841,0,0,0,0,18820,152,0,0,0,0,0,13260,3334,0,0
> -
> ,24234,8422,0,17957,0,0,0,10244,0,0,0,0,0,0,0,0,0,0,0,7204,0,0,0,0,1201,26151,
> 0,
> -
> 31173,0,0,0,0,0,0,0,0,0,0,0,0,0,64838,4203,7525,521,0,18888,37031,0,0,0,0,0,0,
> 0,
> -0,7082,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4490,12487,0,0,0,0,0,0,0,36615,0,0,
> -
> 0,14854,0,0,0,0,0,0,0,0,0,0,0,0,6539,13029,9704,38983,0,0,0,0,168,10405,0,0,0,
> 0,
> -394,25607,0,57063,0,0,0,0,0,0,0,0,0,0,16141,19878,0,0,0,0,0,0,0,0,0,29446,0,
> -
> 12036,0,0,0,0,0,6982,18572,0,24584,14535,0,0,0,0,0,0,0,0,0,0,16,0,21642,0,0,0,
> 0,
> -0,0,5254,0,0,0,0,0,0,0,0,1622,0,0,0,0,0,0,0,0,0,0,0,0,0,3853,9126,0,0,0,0,0,0,0,
> -0,0,0,0,0,0,0,0,0,7241,10982,0,0,0,0,0,0,0,0,0,0,0,0,0,0,950,0,0,57990,0,0,277,0
> -,0,0,694,36007,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,42470,0,0,0,0,18409,
> -
> 51142,0,0,0,0,0,0,0,0,0,28646,0,0,0,30693,0,0,0,0,0,56295,5544,0,0,0,0,8518,83
> 66
> -,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,45670,0,0,
> -
> 9608,33062,0,0,0,0,0,0,0,0,0,0,0,18694,0,0,0,0,1672,23493,0,0,6955,7655,0,361
> 34,
> -0,0,0,0,0,0,0,0,23432,647,0,0,0,0,0,0,0,0,0,0,0,13382,0,0,0,19621,0,0,0,0,0,0,0,
> -
> 0,0,20228,0,0,2728,31495,0,0,0,0,29096,22213,235,35495,0,0,0,0,0,0,0,0,0,0,0,0
> ,0
> -
> ,0,0,5348,0,0,0,0,8968,1989,0,0,1066,0,0,11492,5965,31367,0,0,0,0,0,0,0,0,0,0,0,
> -
> 18727,0,0,0,6757,0,0,10765,4646,0,36166,0,27943,0,0,26888,8420,0,0,0,0,0,0,0,
> 0,0
> -,29316,0,0,0,0,0,0,0,0,0,0,4975,0,0,0,14762,3111,0,0,0,0,0,43399,0,0,0,0,0,0,0,
> -
> 18980,0,0,0,0,0,44550,0,0,0,0,4051,0,0,0,0,37734,0,0,0,0,0,5188,0,0,0,0,0,24486,
> -
> 0,5989,0,41159,0,0,0,0,0,0,0,0,0,20326,0,0,747,6884,0,0,0,41798,0,0,3117,2291
> 9,0
> -,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,21032,0,0,0,0,0,0,0,0,9574,0,0,0,0,0,0,
> -
> 4302,0,0,0,0,0,0,0,0,0,0,0,21068,34630,0,0,0,0,0,64071,0,0,0,0,0,0,26667,7943,0,
> -
> 0,0,0,0,52934,0,0,17002,0,0,0,0,0,0,20294,0,0,0,0,0,0,0,0,0,27301,18347,7974,0,
> 0
> -
> ,0,0,0,0,0,0,16874,0,0,0,0,45414,0,0,0,0,0,0,648,1575,0,0,0,31749,0,0,0,23301,0,
> -0,0,0,0,0,0,0,0,0,0,0,15912,50535,0,0,0,0,1993,8582,0,0,0,0,0,0,0,38438,0,0,0,0,
> -0,0,0,0,0,0,0,0,15850,6183,0,0,0,0,3402,0,0,27494,0,0,749,0,0,0,0,0,0,0,26025,
> -29606,0,0,7144,19622,30504,0,0,0,0,0,0,0,0,21316,0,0,0,0,0,0,0,0,0,21444,0,0,
> -
> 1289,6919,0,0,0,0,0,0,8299,0,0,0,14090,35655,0,0,0,0,0,0,0,0,2377,15206,0,0,60
> 28
> -,4452,0,25508,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,50310,0,0,0,0,1269,0,0,0,0,0,0,0,0,0
> -,0,0,0,51014,0,0,0,0,0,0,0,9286,0,7429,0,0,28393,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
> -
> ,0,0,0,16680,452,0,0,0,0,0,23718,0,0,0,31750,0,0,0,0,0,0,0,0,3568,0,0,13604,0,0,
> -
> 0,0,0,25255,0,0,0,50982,0,56582,0,0,7467,0,0,0,0,30181,0,0,0,0,0,0,0,30564,720
> 8,
> -7845,0,0,0,0,0,0,7726,0,0,0,0,62182,0,0,0,41094,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
> -0,0,0,0,0,0,0,22695,0,0,0,0,0,0,17736,0,0,0,0,0,0,0,0,50054,0,0,0,14180,0,0,0,0,
> -
> 0,0,8974,0,0,0,0,0,0,0,0,23332,0,0,0,11140,0,0,0,0,0,0,0,24262,27145,9540,0,0,0,
> -
> 0,0,0,0,0,0,0,0,0,0,0,26537,45510,6062,3879,0,0,20233,25991,0,0,17803,0,0,0,0,
> 0,
> -
> 13962,5508,16971,27013,7437,31494,0,0,0,0,0,0,0,0,0,0,4714,0,0,0,0,0,0,0,0,17
> 189
> -,0,0,0,0,0,27492,0,0,26953,0,0,0,0,0,0,0,0,0,0,41319,0,0,0,0,0,0,0,0,0,0,0,47430
> -
> ,19596,12549,0,0,0,8390,1006,0,0,0,0,0,0,0,0,0,0,24100,17577,4,0,0,0,0,0,22277
> ,0
> -,0,0,0,0,0,0,26692,0,0,0,0,0,24676,0,0,0,0,0,0,0,0,0,0,0,0,0,29477,0,0,0,21573,0
> -,0,0,0,0,0,0,0,0,0,9864,14214,0,0,0,0,0,0,25771,5766,0,0,8909,8679,0,0,6861,
> -16166,0,38887,0,0,0,0,0,0,12392,8678,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
> -
> 52646,1354,2950,0,14692,0,0,10572,49830,0,0,0,0,0,0,0,0,3626,582,0,0,0,55750,
> 0,0
> -,0,30885,0,0,0,0,0,0,0,0,0,0,0,0,0,5830,0,0,2090,0,0,0,0,0,0,0,0,0,0,0,0,31142,0
> -,0,0,0,0,10503,0,0,18825,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
> -
> 57158,0,0,30792,63526,0,0,0,9863,16267,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
> -,0,0,0,0,0,0,0,0,0,0,18824,0,0,0,0,0,0,19653,25388,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
> -,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9292,0,0,0,0,0,0,0,0,0,0,36358,0,0,0,0,0,0,0,0,
> -
> 0,0,25480,23015,0,0,10440,6725,0,0,0,22436,24265,15109,0,0,0,62311,8906,345
> 34,0,
> -
> 0,0,0,0,0,15913,1319,0,0,20296,1477,30760,0,25928,16772,0,0,1069,0,0,0,0,0,0,
> 0,0
> -,0,0,0,0,17029,0,31909,0,0,0,0,0,0,0,0,0,0,0,41638,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
> -
> ,0,0,0,0,41542,0,21478,0,0,0,9796,0,0,0,0,0,0,0,0,0,0,22187,58343,0,0,0,24295,0,
> -0,0,0,0,61831,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2833,5829,0,0,0,62855,0,0,0,0,0,0,0,0,
> -
> 0,0,0,0,0,0,0,0,0,0,0,16676,0,0,0,0,0,0,13577,27431,0,0,0,0,21480,10501,0,1693
> 2,
> -
> 0,0,0,0,0,22918,0,48294,2574,2150,0,0,0,0,1897,4518,0,0,0,0,0,0,25064,0,0,0,0,
> 0,
> -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,47942,0,0,0,0,10990,13767,
> -25705,37863,21672,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
> -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,43430,1712,0,0,0,0,
> -18886,0,0,0,0,0,0,0,0,0,0,0,0,0,10535,0,0,0,0,0,0,0,15012,0,0,0,0,0,0,0,0,0,0,
> -
> 14734,0,0,55782,0,0,30824,10886,0,0,0,0,0,51302,0,0,8012,0,0,0,0,0,20680,6981
> ,0,
> -57415,11,0,0,18277,0,14564,0,0,0,32390,0,0,0,0,0,0,0,0,0,0,0,0,19113,5158,0,
> -
> 11172,0,16774,0,0,0,0,0,0,0,0,0,0,0,0,10315,13830,0,0,0,0,0,0,10410,7141,0,0,0,
> 0
> -
> ,0,18116,0,0,0,44615,15403,13958,0,1540,14632,19525,24201,19781,0,0,0,2416
> 5,0,
> -
> 38951,0,0,0,0,0,6308,0,0,0,0,0,0,0,0,0,0,0,0,0,0,17416,15749,3438,13255,0,0,0,0,
> -0,0,0,0,0,0,0,32228,0,0,0,0,176,0,0,50566,0,0,0,0,0,0,0,0,0,0,0,0,0,21540,0,0,0,
> -0,0,0,0,0,0,0,0,0,0,0,0,58982,0,0,0,0,0,0,0,0,0,5284,0,0,0,0,0,0,25897,28326,0,0
> -
> ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15945,0,0,0,9804,293,0,0,0,0,0,0,0,13988,23082,4677
> -,0,0,0,0,0,0,0,0,0,0,0,5670,0,0,0,0,0,0,0,44070,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
> -0,0,0,0,0,6405,0,30692,0,0,0,61702,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
> -,45926,0,15398,0,0,0,0,0,0,4554,2692,0,0,0,0,0,32485,0,0,0,10084,0,0,0,0,0,0,
> -24297,0,0,0,0,0,0,0,0,22790,0,0,0,55110,0,0,0,0,0,0,0,0,0,0,0,0,7112,0,31530,
> -45255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,40743,17226,22599,0,
> -0,0,0,0,0,0,0,3695,0,0,0,0,0,0,0,0,0,0,56999,0,0,0,0,0,13799,3114,21287,1353,
> -
> 7591,0,0,0,8455,0,0,6824,0,0,0,0,0,0,0,14569,0,0,0,29000,0,0,0,0,0,0,0,0,0,0,0,0
> -,0,0,0,19979,0,18376,0,0,0,0,0,0,0,0,0,0,0,0,11332,0,0,0,49863,0,0,0,0,0,0,0,0,0
> -
> ,0,0,0,0,0,2191,7527,23148,58022,0,0,0,30631,0,26565,0,0,0,0,0,0,0,0,0,0,0,0,75
> 4
> -
> ,0,0,15877,0,0,0,0,0,0,0,17510,7657,2821,0,0,0,0,0,0,0,0,0,41927,0,0,0,0,0,0,0,0
> -
> ,2569,34439,0,0,3790,0,0,0,15339,8775,0,0,0,0,0,0,0,0,0,0,0,15908,0,0,21419,83
> 59
> -
> ,0,0,0,0,424,0,0,0,0,0,0,25318,8008,20551,0,0,0,45735,30058,30372,0,0,0,0,0,0,
> 0,
> -0,0,0,0,0,0,26180,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,31432,10567,0,0,0,0,
> -
> 17450,0,0,0,0,0,0,30310,0,38022,0,0,0,0,0,28932,0,0,0,0,0,43910,0,0,0,0,0,0,0,0,
> -0,0,0,0,0,0,0,0,0,0,0,22180,12075,0,0,0,0,0,0,0,0,0,0,0,0,0,0,22247,0,0,22826,
> -
> 12359,0,0,0,0,4105,50407,0,0,0,0,0,0,13581,28583,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
> -,0,0,0,0,28936,0,0,0,0,0,17673,10310,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,905,57862,
> -1580,0,0,0,0,58630,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,13479,0,0,
> -
> 14153,13286,0,0,9259,0,0,0,0,0,6606,3524,0,0,0,0,0,6567,0,0,0,0,0,0,0,0,0,0,0,0,
> -0,0,0,0,0,0,0,0,0,0,0,0,631,49255,0,0,0,0,0,42886,0,38215,0,0,0,0,0,0,0,0,17580,
> -0,0,0,0,0,0,0,0,55046,0,0,0,0,0,0,0,0,0,10213,0,0,0,0,3604,37767,0,0,0,0,0,0,0,0
> -,0,0,0,30950,0,0,0,0,0,0,0,0,0,62087,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,23528,0
> -
> ,0,0,0,0,0,0,0,0,28715,4229,0,0,0,0,0,0,0,0,0,0,1226,26820,0,0,0,12133,6984,261,
> -
> 21130,32548,0,0,0,0,0,0,3565,12390,20713,28071,0,0,1706,25287,0,0,0,0,0,0,0,0,
> -
> 14670,0,0,0,0,0,0,30534,0,0,0,12615,0,43750,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,28228,
> -
> 0,0,0,0,0,0,0,45095,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1224,3975,10954,6375,0,0,0,0
> -
> ,0,0,0,0,0,0,23180,20100,0,0,0,0,25736,8519,0,0,0,0,0,6663,0,2534,0,0,0,0,0,0,0,
> -
> 0,23720,0,0,0,0,0,0,0,0,0,0,19398,0,47814,26281,49702,0,0,4332,12965,0,0,5704,
> -3206,0,0,0,0,0,0,0,0,0,0,0,0,0,15396,0,0,0,44102,0,0,0,0,0,0,0,0,0,0,0,0,0,25317
> -
> ,1064,39271,27433,0,14952,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14308,0,0,0,0,0,0,276
> 3
> -
> ,4100,0,0,0,0,0,0,18792,0,0,0,22154,32583,0,6244,0,0,0,0,0,0,0,49478,0,0,0,0,0,
> 0
> -
> ,0,0,0,0,0,21894,0,0,11048,0,0,0,0,0,0,11685,0,53862,0,0,15114,0,13870,0,0,0,0,
> 0
> -,0,0,919,0,0,0,31916,0,22570,101,0,0,0,0,0,0,0,0,0,7333,0,0,0,0,3272,0,0,0,0,
> -
> 27718,32712,0,0,0,0,0,0,0,0,0,1782,0,3688,0,0,0,0,29862,0,0,0,0,0,0,0,22469,0,0,
> -
> 0,0,0,0,0,55302,850,15492,0,0,0,5927,19786,13350,0,25702,0,0,0,0,0,0,0,0,0,0,0,
> -40390,0,0,0,0,0,0,0,0,0,0,0,0,0,20260,0,0,0,0,0,0,0,0,0,0,0,0,0,15335,8394,0,0,0
> -
> ,0,0,0,26566,0,0,0,0,843,2245,0,0,0,0,0,0,0,0,6959,0,20488,1638,0,0,11533,5075
> 9,
> -0,0,0,0,0,20871,0,0,0,0,0,24519,0,0,0,0,9544,23591,0,0,0,0,0,0,0,0,0,0,20969,
> -
> 7109,29001,0,0,32422,31720,64294,0,0,0,0,16106,0,0,0,6930,4933,0,0,0,22917,0,
> -27015,0,0,0,0,19880,8070,0,0,0,0,23945,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
> -3310,0,87,0,0,0,0,0,0,0,0,0,0,0,0,0,0,18439,0,0,0,20742,0,0,0,10597,0,0,0,0,0,0,
> -
> 0,0,0,0,0,0,20236,0,0,0,16584,3429,0,0,0,0,0,0,0,0,27241,0,0,0,0,16132,0,0,0,0,0
> -,0,0,0,0,0,0,0,244,28261,0,0,0,0,0,0,0,29509,0,0,0,0,0,0,0,0,2921,31781,0,0,0,0,
> -0,0,6408,4196,344,0,0,0,0,0,0,0,0,0,0,0,0,0,11689,45863,0,0,0,0,906,3301,0,0,
> -
> 25544,32421,0,0,0,0,0,0,0,0,1260,61607,0,27302,0,0,8682,16614,0,0,0,0,10830,0
> ,0,
> -
> 9604,15049,13413,0,0,0,0,0,0,26761,0,0,0,0,0,0,61990,0,0,0,0,0,12580,0,0,1143
> 2,0
> -,0,0,0,0,22507,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12389,0,0,0,0,0,0,
> -
> 2408,22661,14507,43239,0,9700,0,0,24714,0,0,0,0,0,0,0,0,23972,0,0,0,0,0,0,0,0,
> 0,
> -0,0,0,0,34086,0,0,22955,7238,0,0,0,0,0,28485,13806,20038,0,0,0,0,22602,0,0,0,
> -
> 1645,22340,0,0,0,0,0,0,0,0,0,0,0,26502,0,0,554,0,0,0,0,61735,0,0,0,0,0,0,0,0,0,0
> -
> ,0,0,0,0,0,0,0,2694,0,0,0,0,0,0,0,0,0,0,0,0,0,0,883,27879,15948,0,3242,57382,0,0
> -,0,0,0,0,13930,0,0,0,0,0,30922,0,4137,52615,0,0,0,0,0,0,0,0,0,0,0,0,0,31911,
> -
> 16072,0,0,0,0,0,0,0,0,0,0,0,0,26340,0,61671,0,0,0,0,3145,56199,0,0,0,0,0,0,0,0,0
> -
> ,0,0,0,280,0,5131,33479,0,15751,0,0,0,0,0,0,4136,1446,0,0,0,0,0,0,11304,17863,
> 0,
> -
> 0,0,0,0,25125,0,0,0,36646,6057,0,0,0,855,11301,0,0,0,0,0,64774,0,0,0,19397,0,0
> ,0
> -,0,0,0,0,0,0,0,0,0,0,0,0,0,1040,27367,0,0,0,0,0,0,0,0,0,0,0,0,0,64358,0,0,178,
> -
> 132,0,0,14763,24455,0,0,0,46374,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,46246,0,0,0,37382,
> -0,0,0,7462,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8166,0,0,6921,0,0,0,9163,0,0,0,119,
> -
> 0,0,0,23146,17156,0,0,0,0,0,9127,0,0,0,17927,0,0,0,0,0,22084,0,0,0,0,0,39879,0,
> 0
> -
> ,2035,0,1067,0,0,0,0,0,16652,59591,0,0,0,0,0,0,0,0,0,0,0,0,20171,0,0,0,0,17733,
> 0
> -
> ,0,0,0,0,32037,0,0,0,0,0,14277,0,0,0,0,0,0,0,42022,0,0,26793,20358,0,0,0,0,0,0,0
> -,0,0,0,0,0,0,0,0,0,8907,0,0,0,0,0,0,0,0,27780,0,0,0,0,32330,0,0,0,0,0,0,0,0,0,0,
> -0,0,0,0,0,0,0,0,0,0,0,0,39399,0,9732,0,16199,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
> -
> ,0,0,0,0,854,0,2984,45063,25418,26980,22539,0,9133,3653,15528,28743,4649,0,
> 616,
> -
> 65127,0,0,0,61863,0,0,0,0,0,0,0,55303,0,0,0,0,0,0,0,0,23880,0,0,0,0,0,0,0,31848,
> -62854,0,0,0,0,0,0,0,0,0,0,0,49606,0,27974,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
> -
> 0,0,32580,0,0,0,26052,4043,0,0,40454,0,0,26056,30565,0,0,0,0,0,0,0,31398,0,0,
> 0,0
> -
> ,0,0,0,0,29288,1797,0,0,3220,0,0,0,0,0,0,0,0,0,20427,0,0,0,0,23621,0,0,0,0,0,0,0
> -,0,0,24261,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,35591,0,0,6862,0,0,0,4265,0,6285,
> -
> 5383,0,0,0,0,0,36870,0,39847,0,0,17224,5414,27882,58118,0,0,13224,4262,0,0,0,
> -
> 31302,0,0,1388,2982,11881,0,0,0,0,0,0,16837,809,0,24140,10724,0,0,0,0,5835,0,
> 0,0
> -
> ,0,0,0,0,0,0,0,0,1256,19237,0,0,0,0,0,0,0,5796,11848,0,0,52870,11464,0,0,0,0,0,
> 0
> -
> ,0,0,0,5645,9158,0,25223,0,0,0,0,0,39142,24968,8135,32104,28678,0,0,0,46311,
> 0,0,
> -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,23820,0,0,0,0,0,4050,0,1323,25220,0,0,0,20133,0,
> -0,0,0,0,0,0,0,0,0,0,9381,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
> -,0,0,0,0,0,0,0,13444,1198,60806,0,0,0,0,17356,50247,30632,0,0,0,0,0,0,0,11944,
> -999,0,0,0,0,4010,10404,0,0,0,0,0,0,10346,0,0,49510,0,0,0,0,0,0,0,0,0,0,0,0,0,
> -
> 38919,0,0,0,0,0,0,6351,60966,20137,487,0,0,0,0,0,0,655,2406,17387,43303,0,0,0,
> -17063,0,0,213,0,0,0,0,0,0,17221,0,0,0,0,0,0,0,0,0,0,0,10820,0,0,0,0,369,6,0,0,
> -
> 9098,21093,0,31653,0,0,0,0,0,0,0,0,0,27143,0,0,16234,0,0,0,0,0,0,0,0,6020,3172
> 3,
> -
> 28293,0,0,0,0,1936,30695,0,0,0,0,0,52902,0,0,29512,10791,0,20420,0,0,16010,0,
> 0,0
> -,0,0,0,0,0,0,0,0,5324,0,0,0,0,0,0,0,0,0,0,0,0,13383,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
> -0,0,0,0,24328,0,0,0,0,0,0,40870,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
> -
> 0,0,24648,0,0,0,0,0,0,0,7786,2852,0,0,0,0,0,0,0,0,0,44678,0,17925,0,0,105,5306
> 2,
> -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,18762,0,0,40679,0,0,0,16165,0,0,0,0,0,0,0,0,0,0,
> -0,0,0,0,0,0,0,0,0,0,0,0,0,20390,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,62310,1322,
> -
> 14247,0,0,0,0,0,0,0,0,1832,6052,0,0,11882,0,0,0,0,17668,0,28262,0,29542,0,0,0,
> 0,
> -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,28007,0,0,0,57223,
> -1585,0,0,0,0,0,0,0,0,0,0,0,21162,0,0,62247,0,0,0,0,0,25414,0,0,0,0,0,0,0,0,0,0,0
> -,0,0,0,0,0,0,0,0,0,0,0,0,36326,0,0,0,23845,0,0,0,0,0,0,0,2693,0,0,0,0,0,0,0,
> -
> 13125,0,31236,0,0,0,0,0,22502,0,0,0,0,0,0,5994,10309,0,0,0,7269,0,0,0,0,17929,
> 0,
> -
> 1011,44647,0,0,0,0,0,14919,0,0,0,0,20586,5350,0,0,0,45702,0,13189,0,0,0,0,0,0,
> 0,
> -
> 0,0,35782,17992,0,0,0,0,0,8203,0,0,0,0,0,0,56678,0,0,0,0,0,38087,4233,0,2127,0
> ,0
> -,0,0,0,0,0,0,0,0,10148,0,0,0,2021,0,0,0,0,0,0,0,47206,0,0,0,0,0,0,0,9220,0,0,0,0
> -
> ,19465,0,0,0,0,0,0,0,0,39206,0,38055,0,0,0,0,0,0,0,46982,0,0,0,0,0,22054,3850,0,
> -
> 0,0,0,0,0,0,55,0,10542,0,0,0,0,7239,0,0,0,0,0,59367,0,0,14761,0,0,0,0,43079,0,0,
> -0,0,0,2726,0,0,9582,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,37478,0,
> -0,0,31364,0,0,0,0,0,0,0,0,20393,8933,0,0,0,0,0,9380,0,0,0,0,16905,549,0,0,0,0,
> -182,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1558,0,0,0,0,0,0,0,19242,0
> -,0,0,0,0,0,24933,0,6276,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,42310,23595,
> -
> 24068,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,13191,6158,2567,0,0,268,47047,0,0,0,0,0,0,0,
> -0,0,27940,0,0,0,0,0,26726,0,0,0,0,8200,1222,31562,0,0,0,0,0,0,0,0,0,2922,8231,
> -
> 8904,29157,0,0,0,0,0,0,0,0,23976,4836,0,0,0,0,0,0,0,0,0,0,0,0,31658,0,0,31685,0,
> -0,2889,6213,0,0,0,0,0,13605,0,0,0,0,0,24772,0,0,0,0,0,0,0,0,0,0,20684,26468,
> -
> 24075,0,0,0,21193,0,715,679,0,0,0,0,0,0,3050,7654,0,0,0,13798,0,0,0,0,15,2797
> 3,0
> -,0,8491,2086,0,0,0,43206,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,60391,0,0,0,0,0,0
> -
> ,0,25892,0,22276,0,34374,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,20165,0,0,25672,0
> -
> ,0,0,1811,24839,0,31044,0,0,25513,0,0,0,0,0,12810,0,0,62438,0,0,1325,0,364,37
> 82,
> -0,0,0,0,0,0,0,0,8042,19687,0,0,0,33415,0,0,0,0,0,0,0,0,0,0,0,7205,0,0,0,0,0,0,0,
> -0,0,0,0,0,0,0,0,0,0,11844,0,0,0,0,3341,1543,6698,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
> -,0,0,0,0,0,0,0,0,0,0,0,0,29766,0,0,0,0,0,0,0,0,0,0,0,41158,0,24294,0,3844,12329,
> -
> 0,0,0,13738,0,0,0,0,0,0,0,0,26245,0,0,0,0,0,0,6378,0,343,4838,0,0,0,24358,1168
> 8,
> -
> 0,0,0,0,0,0,0,0,0,1489,34759,0,0,0,0,363,51974,1878,11013,0,0,32265,59782,0,0
> ,0,
> -28421,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,22756,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14089,0,0,
> -0,0,0,0,0,0,0,0,0,0,0,0,0,29257,61222,0,30661,0,28327,0,0,0,0,0,0,0,0,0,0,0,0,0,
> -
> 27108,8843,0,9673,2084,0,0,0,16327,0,48455,0,0,0,0,0,0,4876,9316,0,0,0,0,0,0,
> 0,0
> -,0,0,0,0,9035,18852,0,0,0,0,0,0,0,0,0,0,0,0,0,4164,0,0,14827,1349,0,0,0,0,0,
> -
> 11909,0,0,0,0,0,0,0,0,0,21765,0,0,0,0,0,0,0,0,31272,63910,0,0,0,25924,0,0,0,0,0,
> -
> 0,0,0,0,44487,0,0,0,20612,0,0,27754,31428,0,0,0,0,0,0,0,17287,0,3943,0,0,0,633
> 02
> -,0,0,0,0,25256,19942,0,55142,0,39046,0,0,0,0,0,0,0,15367,0,0,0,0,0,0,0,0,0,0,0,
> -28422,0,0,0,0,0,0,0,0,0,0,0,0,9576,63847,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
> -,0,0,25226,5734,0,0,0,0,0,0,13801,4997,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
> -
> ,0,0,0,0,0,0,43942,1270,2566,6284,0,0,16230,0,0,0,20678,0,0,0,0,0,38855,0,0,0,
> 0,
> -29643,0,0,0,41,3655,0,0,0,0,0,14276,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
> -0,0,0,0,0,0,0,0,0,0,0,0,0,15686,0,0,0,15718,0,50694,0,0,16232,8007,0,0,0,5060,
> -
> 329,11591,51,0,0,0,0,0,0,0,0,0,13065,7302,27530,15366,0,24934,0,0,0,17828,0,0,
> -
> 4552,6311,0,0,0,0,0,0,0,0,0,0,0,47686,368,12103,10122,33830,0,0,599,18534,95
> 79,
> -
> 49479,0,5668,0,0,0,0,0,0,0,0,0,13157,0,0,0,0,23274,14055,0,0,0,0,0,48903,0,0,0,
> 0
> -,0,0,1871,0,15434,0,0,0,16174,62470,0,0,0,0,0,0,0,0,0,0,0,7749,0,0,0,0,0,0,0,
> -30501,0,0,0,0,25675,0,0,0,0,0,0,0,0,0,0,9285,0,0,25323,1669,0,0,0,0,0,0,0,0,0,0,
> -0,3588,0,0,0,0,0,32902,0,0,4426,0,0,0,0,57959,0,0,0,0,0,0,29898,58278,0,0,0,0,
> -11880,1220,0,0,0,41479,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,23141,0,0,0,0,0,0,0,0,0,0,0
> -
> ,0,0,42566,0,0,0,0,0,0,0,40167,9484,3493,0,0,0,0,0,21126,0,0,0,0,8649,18918,0,
> 0,
> -
> 0,0,0,0,0,34886,2601,0,0,0,0,12518,0,0,0,0,7976,10311,0,0,0,0,0,0,0,45190,0,0,0,
> -
> 0,0,0,0,0,0,0,16842,20229,0,0,0,0,0,0,7528,4614,0,0,0,0,0,30086,0,0,0,1671,0,0,
> 0
> -
> ,0,0,0,0,0,0,0,0,0,0,0,9896,6277,0,0,0,0,0,61191,0,41287,0,21956,0,0,20010,0,0,
> 0
> -,0,0,0,0,0,0,0,0,13195,0,0,0,0,1381,0,0,0,0,365,30951,24268,0,0,0,0,0,0,0,0,0,0,
> -0,0,0,0,7044,0,0,0,0,0,0,0,0,0,0,27944,359,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
> -,0,0,28487,0,0,77,0,0,0,0,0,0,0,0,56775,12586,8421,0,0,0,0,0,0,26185,14599,0,0,
> -
> 8040,5702,12585,3109,0,0,0,0,0,21574,5388,0,0,0,0,0,0,0,5106,52454,0,0,0,0,0,
> 0,0
> -
> ,0,1907,29895,0,6116,0,0,0,0,11081,5285,0,28069,0,0,0,0,0,0,0,0,0,0,0,0,0,0,410
> 4
> -,0,0,0,0,0,0,41511,0,0,0,0,0,0,5262,0,0,0,503,4231,7720,34343,0,0,0,0,0,0,0,0,0,
> -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7304,10374,1718,0,0,29127,0,0,0,0,0,0,0,0,23497,
> -
> 22567,6952,2340,0,0,0,0,0,0,0,0,20360,12453,0,45094,0,0,0,0,0,28582,0,0,0,0,6
> 80,
> -0,0,0,0,0,0,0,0,0,0,0,0,0,23084,0,0,0,30696,0,0,0,0,45862,0,0,0,0,0,0,0,0,0,0,0,
> -0,5580,6053,0,0,0,0,0,0,0,0,0,0,712,70,0,0,26091,11335,0,0,0,0,13612,0,13160,
> -
> 1926,435,51559,0,0,0,0,0,0,0,0,0,0,0,0,0,47302,19083,0,0,12742,0,1607,0,0,0,0,
> 0,
> -0,0,0,0,0,0,0,0,0,0,0,0,0,6155,37095,0,0,0,0,0,18948,7146,0,0,0,0,0,0,0,7848,
> -
> 2055,0,0,0,0,8910,0,19336,0,0,48070,8490,0,0,0,0,0,0,0,9932,56423,0,0,0,0,0,0,
> 0,
> -0,0,0,0,0,0,0,0,0,0,4133,0,0,0,0,0,0,0,0,0,43398,0,0,0,0,0,0,0,0,16173,0,0,0,0,0
> -,0,0,32011,0,0,30918,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,26854,0,0,0,0,0,0,0,0,0,0,0,0
> -
> ,0,20389,0,0,0,0,0,0,0,0,0,0,0,0,0,0,18889,0,0,0,0,8965,0,0,0,44358,0,0,0,8997,0
> -
> ,34055,0,0,0,0,0,29350,0,0,501,17767,0,0,32457,60262,0,0,0,30886,0,0,3757,106
> 3,0
> -
> ,0,0,25637,0,0,0,0,0,28068,0,26374,0,0,0,0,0,0,0,0,0,0,0,11684,0,0,0,0,0,0,24779
> -
> ,229,0,13766,0,0,7402,11525,0,0,0,0,0,0,0,0,26313,23686,0,0,29736,47527,0,0,0
> ,0,
> -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,27268,0,0,0,0,553,0,0,0,0,0,0,32038,0,0,0,0,1135,
> -
> 26596,0,0,12300,14631,0,0,0,43238,0,871,0,0,31496,0,8457,17669,0,12836,0,0,0,
> -
> 22726,0,38758,0,0,375,6564,0,0,0,0,0,0,0,0,0,0,0,0,170,18535,0,22948,0,0,3236
> 0,0
> -,0,0,0,0,0,0,0,0,0,0,0,0,0,25764,0,0,0,0,0,0,0,0,0,0,0,15652,0,0,0,32774,0,0,0,0
> -,0,0,0,0,0,28551,0,0,0,0,0,0,0,0,0,0,0,0,15145,0,0,0,21100,27654,0,0,0,0,0,0,
> -
> 4874,26215,0,1639,0,0,0,0,0,0,0,0,0,0,4169,0,0,0,0,0,7336,0,0,0,0,21572,0,0,0,0,
> -
> 0,0,0,0,0,24644,1675,2533,0,0,0,53318,0,13094,0,0,0,0,0,0,0,6246,0,22020,0,0,0
> ,0
> -,0,0,0,0,0,0,0,28453,5576,5124,0,0,0,0,0,0,0,0,0,0,0,0,0,27910,0,29382,18216,
> -
> 8583,0,0,0,39174,0,43558,0,0,0,0,0,0,0,0,0,11973,0,0,0,0,0,23397,0,0,0,0,6091,0,
> -0,0,0,0,0,0,6474,16197,14217,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
> -,0,0,0,26728,0,567,48839,0,0,0,0,0,15271,0,0,31818,43974,2450,0,0,0,0,0,0,0,
> -11368,9191,0,44454,0,0,0,0,0,0,14568,12293,0,0,0,8453,0,0,0,0,0,0,0,0,0,0,0,0,
> -32040,0,0,0,0,0,0,0,0,0,0,0,0,902,0,0,0,27236,5612,11495,0,0,0,0,0,0,0,0,9194,
> -23684,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,27430,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
> -26217,44870,0,0,0,0,0,0,5581,7173,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
> -
> 52775,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,20968,18340,0,0,0,0,0,0,0,0,4107,11239
> -,0,0,0,0,0,0,0,0,0,0,0,29381,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,21990,0,0,0,0
> -,0,0,0,0,0,48806,0,0,0,32292,0,0,0,0,0,0,0,10884,0,0,0,0,0,0,0,0,0,0,27562,0,
> -
> 5643,0,0,0,0,0,0,0,0,0,3089,31525,0,19684,0,0,0,0,0,0,0,61415,0,0,0,0,0,36198,0,
> -0,0,0,0,0,0,7908,0,0,0,0,872,743,0,0,0,0,0,0,0,0,1229,0,0,0,0,0,0,0,0,0,0,0,0,0,
> -0,0,0,0,0,0,0,32484,0,0,0,0,0,34822,0,0,0,0,0,50726,0,0,0,0,7274,0,0,0,15304,
> -
> 11526,0,0,0,3047,0,0,0,0,0,0,22376,0,0,0,846,0,0,0,0,35815,0,0,0,23652,0,0,0,0,
> 0
> -,0,0,0,0,0,0,0,0,0,0,0,23721,2148,0,0,0,0,0,0,14856,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
> -
> 0,0,0,0,0,0,0,1358,0,3082,0,0,0,848,10949,0,0,0,0,0,0,6504,0,0,14372,0,0,0,0,0,0
> -
> ,0,0,0,0,8201,9958,0,0,0,0,0,0,24266,0,0,0,0,0,0,0,0,26469,0,0,0,0,18604,2053,0,
> -33511,0,0,0,0,0,9222,0,0,0,0,0,44006,0,0,0,0,0,0,0,0,0,0,0,41895,0,0,0,0,0,0,0,0
> -,12044,390,0,0,0,0,0,4935,0,48646,0,56102,3052,16070,0,0,0,0,0,0,0,8612,9320,
> -38311,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,500,0,0,0,0,42918,0,
> -
> 32550,0,0,0,0,0,0,0,0,27434,57926,17064,0,0,46502,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
> -0,0,0,0,0,26760,6756,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,624,0,5000,0,0,0,0,32293,0,
> -0,0,0,0,0,0,0,0,0,0,0,0,26246,0,0,0,0,0,0,0,0,23,7301,0,0,0,36199,0,40838,0,0,0,
> -0,0,0,0,0,0,0,0,0,27178,57350,0,0,12457,9317,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
> -,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16810,0,0,0,14510,0,0,0,0,21319,0,0,0,13508,17,
> -11365,0,0,0,0,5291,0,8329,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,27685,0,0,0,0,0,0,0,
> -
> 52006,0,0,0,7493,0,44263,0,0,0,0,0,0,0,0,9800,0,0,0,25676,61478,0,0,0,0,0,0,57
> 73
> -
> ,0,0,0,0,41991,26057,0,0,0,0,0,0,0,0,0,0,22629,0,0,0,47783,362,1959,23468,0,0,
> 0,
> -
> 10921,0,0,0,3150,0,0,0,0,0,0,0,0,0,0,0,32456,0,0,0,0,0,0,0,4559,3270,0,0,983,0,0
> -
> ,26343,0,33446,0,0,0,61767,0,48390,0,0,0,0,0,0,0,2790,0,39782,7849,0,0,0,0,0,0
> ,0
> -
> ,1544,2183,0,0,0,0,0,0,0,0,4040,2471,20009,30020,0,0,11242,0,0,0,5578,53382,0,
> -22631,0,0,0,0,0,0,0,0,0,0,0,12901,0,0,0,0,0,0,0,0,0,0,0,0,215,0,0,9030,0,0,0,0,0
> -
> ,0,265,1412,0,0,11626,3687,0,0,0,0,0,0,0,0,0,0,0,0,17449,24359,0,0,26729,4013
> 4,0
> -
> ,0,0,0,29768,61958,0,0,0,0,0,0,0,0,20908,0,0,0,0,0,11016,0,0,47462,21547,5926,
> 0,
> -
> 0,14728,2983,24104,15301,0,0,0,0,0,32645,0,0,0,0,0,0,0,3300,0,0,0,15972,0,0,0,
> 0,
> -0,0,6634,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3076,0,30983,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
> -0,106,0,0,0,0,12775,0,0,0,0,7177,18022,0,0,0,0,0,22534,0,0,0,0,0,0,0,0,0,0,0,
> -
> 49894,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,27560,0,0,0,0,30278,10668,23877,0,
> -0,0,0,0,0,0,29124,0,0,0,0,0,0,0,0,0,0,0,0,0,20870,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
> -
> 0,0,0,0,44582,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,48454,0,0,0,0,6442,0,16330,22951,0,0
> -
> ,16904,0,0,0,0,644,0,0,0,40038,0,0,0,37222,0,0,0,9830,0,0,0,0,0,34919,0,0,0,0,0,
> -0,0,0,0,0,0,13733,0,0,0,28196,0,0,0,0,0,19876,0,0,0,0,0,0,0,23558,0,11142,0,
> -
> 27781,0,0,0,0,13864,0,0,0,24682,47847,0,0,0,0,6890,0,0,0,0,0,3981,0,0,0,0,0,0,0,
> -
> 0,0,0,0,1772,0,0,0,0,0,0,0,3603,1991,0,27396,8652,0,18312,0,0,0,0,30054,0,0,0,
> 0,
> -0,0,0,11270,0,0,0,0,0,0,0,0,0,20708,0,0,0,0,338,0,0,0,0,0,0,0,7050,0,0,0,0,0,0,0
> -
> ,0,0,0,0,0,0,14862,0,0,3492,0,0,0,55878,0,0,0,16486,0,0,0,18119,0,0,0,0,0,0,215
> 4
> -
> ,1284,0,0,23113,31751,0,0,29547,0,0,0,0,0,0,36647,0,0,0,0,0,0,0,0,0,0,0,18183,0,
> -0,0,0,0,0,0,0,0,0,0,0,0,0,7913,0,0,0,0,20644,0,0,10508,0,0,0,0,0,0,0,0,0,0,0,0,
> -
> 43622,0,0,0,0,0,40966,0,0,0,0,0,0,0,0,0,0,246,901,11529,5191,0,0,0,0,0,0,0,0,0,0
> -
> ,0,24454,0,0,26665,27590,0,27397,0,0,0,0,0,0,23562,2949,0,0,30344,62214,0,47
> 334,
> -2026,18885,0,0,0,48678,0,0,0,22694,0,0,1972,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
> -
> 0,0,0,0,0,0,0,15465,0,0,0,0,38822,0,0,0,0,945,32708,0,54791,0,14918,0,0,0,0,0,0,
> -0,0,0,0,0,0,0,23396,0,0,0,0,0,0,5486,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7722,0,0,
> -0,0,0,0,0,0,0,0,0,30856,64166,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,35206,0,0,0,30535,0,
> -
> 0,0,0,0,0,0,0,0,62663,0,0,1096,17574,31820,0,0,14375,4402,27207,0,0,21448,46
> 76,0
> -
> ,0,0,0,16585,5094,0,0,0,0,0,0,0,0,4845,0,0,32870,0,0,0,0,0,0,0,0,0,0,31466,0,0,0
> -,0,31783,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4522,16039,0,0,0,0,0,0,0,0,
> -0,14469,0,0,0,0,0,0,0,0,0,0,7464,4773,0,0,0,0,0,0,0,0,18636,0,0,0,25640,0,0,0,0,
> -
> 0,0,2244,0,0,11818,0,1168,0,0,0,0,0,0,0,6540,23079,13770,7719,0,0,0,0,0,0,0,0,
> 0,
> -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,58150,528,
> -
> 34502,32682,0,0,12997,0,0,0,0,0,2214,0,0,0,0,0,58567,0,0,0,26375,0,0,0,0,0,0,0,
> 0
> -,0,26437,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,26121,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
> -
> ,0,32005,22952,59047,0,13543,0,0,0,0,0,0,0,0,16328,0,0,33542,0,0,0,19782,0,0,
> 0,
> -16644,0,0,0,0,31688,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,10276,0,0,0,
> -0,0,0,0,36327,0,0,29480,0,0,0,777,12709,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,27398,0,0,
> -
> 0,4455,9037,31397,0,9221,0,0,0,60487,20840,1796,0,0,0,0,0,0,0,0,8364,0,0,0,0,
> 0,0
> -
> ,0,0,0,0,0,19752,44902,0,38566,0,0,18027,0,0,0,0,0,0,0,0,10662,0,0,0,0,0,11812,
> 0
> -,0,0,0,0,0,0,0,0,19910,0,0,0,45030,0,0,0,0,0,0,0,0,0,0,0,0,19978,5127,0,11620,0,
> -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
> -
> 0,19817,0,5579,9350,0,0,21002,19718,0,0,0,21926,0,0,0,0,0,0,0,0,0,0,0,0,0,2071
> 1,
> -0,0,0,20197,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,40550,0,0,0,57510,0,0,0,53895,
> -
> 0,0,15017,0,17000,39367,2347,0,0,0,0,0,0,0,0,0,8588,0,0,0,0,0,3273,17862,3498,
> -2085,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,19048,0,0,0,0,0,11978,58631,0,0,0,0
> -,0,0,523,0,12969,198,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,28197,0,47846,0,0,0,0,0,0
> -
> ,0,0,0,4549,0,0,0,0,0,0,0,0,0,0,687,14917,748,8229,0,0,0,0,0,0,2476,12935,0,0,0,
> -
> 0,0,0,22792,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,27528,59142,0,0,20876,20134,0,0,0,
> -0,440,12068,0,58951,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,48038,0,0,0,60999,0,0,0,0,
> -0,0,0,0,0,0,0,0,0,15716,7498,5476,0,0,0,0,20202,37959,0,0,0,0,0,0,0,0,0,0,0,0,
> -29801,0,5451,0,0,0,0,0,0,0,0,0,0,50790,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,24485,0
> -,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,13573,0,0,22856,0,0,0,0,21927,0,0,0,0,0
> -,0,9130,0,0,0,0,0,0,13732,0,0,0,0,0,0,0,0,0,0,2282,583,0,0,0,0,0,0,0,0,0,0,3726,
> -26503,0,0,0,0,0,0,9258,0,0,0,0,0,0,0,0,21604,0,0,0,45574,0,0,0,0,0,20710,0,0,0,
> -42694,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1163,6694,0,0,0,0,0,0,0,10948,0,0,0,29700,0,0,
> -0,0,0,58823,3796,27399,20939,10180,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
> -
> 19,29287,28649,14534,0,0,16428,45607,0,0,0,0,0,0,25322,0,4908,0,0,0,0,0,0,254
> 76,
> -29097,14246,11053,0,0,0,0,0,0,0,0,18502,0,0,0,44390,0,0,0,17765,0,0,0,0,0,0,
> -24520,0,0,0,0,0,0,0,0,0,0,17319,0,0,0,0,0,0,0,0,0,0,0,0,0,28166,0,0,0,0,0,48198,
> -0,0,31467,0,24585,0,0,0,0,18692,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,23596,0,0,0,
> -0,0,0,0,0,0,0,0,0,0,0,7236,968,13637,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
> -3763,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,14791,0,0,0,12324,0,12741,0,0,0
> -,0,0,0,0,0,0,11108,0,0,0,0,4009,40295,20616,4357,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
> -15015,0,0,0,0,0,43751,0,0,0,0,0,0,0,0,0,0,0,23013,0,0,0,0,0,0,0,0,0,0,0,0,0,
> -
> 45542,0,0,0,0,0,0,0,0,0,23974,0,0,0,0,17480,20647,0,0,0,0,0,0,8876,0,0,40806,0,
> 0
> -
> ,0,0,0,0,0,14502,17160,17764,0,0,31594,35431,0,0,2890,0,0,0,0,0,0,0,0,27524,0,
> 0,
> -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8228,0,56583,0,0,0,0,0,0,0,0,0,0,0,0,0
> -,0,0,0,0,34278,0,0,0,0,0,0,0,0,0,0,0,0,0,2662,0,26724,0,0,0,0,0,0,0,64198,0,0,0,
> -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,22281,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3049,
> -
> 54983,0,0,0,0,0,0,0,837,0,17604,0,0,0,0,0,28838,0,0,0,0,0,0,26312,0,0,3910,0,0,
> 0
> -
> ,25830,0,0,0,0,0,8391,0,19845,19240,1092,0,0,5449,0,0,0,0,17188,0,0,0,0,0,0,0,
> 0,
> -
> 0,10629,0,0,6671,61094,5832,8358,0,0,0,55078,0,0,0,0,0,29860,0,0,0,0,0,0,0,0,0
> ,0
> -
> ,0,0,0,0,0,0,0,51494,0,28647,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,25989,0,0,30153,61318
> -,0,0,0,0,0,0,0,24903,0,0,0,4388,0,42054,0,0,0,0,0,0,0,53158,0,0,0,0,0,0,0,50918,
> -0,0,0,0,0,0,26251,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5929,2853,0,37126,
> -7372,197,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2027,934,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
> -
> 0,0,0,0,0,0,55686,0,0,5672,5447,0,62758,0,0,0,0,0,0,0,0,0,0,0,0,2923,0,556,1415,
> -0,0,0,0,0,0,0,0,0,8645,0,9477,0,0,0,0,0,0,0,48742,0,0,0,0,0,0,0,0,0,0,24235,228,
> -0,0,0,0,0,0,0,0,0,0,16970,18823,0,0,0,0,0,0,0,0,0,25158,0,0,0,0,0,18567,20072,
> -
> 2823,14313,1830,0,0,0,0,0,0,0,0,27048,23526,0,0,0,0,0,997,492,0,14730,16677,3
> 96,
> -
> 13574,0,0,0,41671,0,0,0,0,0,0,0,19045,0,0,0,421,17545,3110,0,0,0,0,0,0,0,0,0,0,
> 0
> -
> ,0,0,0,0,47111,14475,56551,0,0,0,0,0,0,0,0,0,0,3697,0,0,0,0,0,0,49382,0,35559,0,
> -
> 0,0,0,40,0,11496,15621,0,8550,0,0,0,63462,0,0,0,0,0,0,0,36966,0,50406,0,46022,
> -1001,0,0,12069,3249,0,0,0,0,0,0,0,0,0,0,0,0,0,15241,0,0,0,0,0,0,0,0,64743,0,0,0,
> -
> 0,0,58759,0,0,0,0,1136,26981,0,0,0,0,0,0,0,17732,0,0,0,17157,20011,6629,0,438
> 79,
> -0,0,0,13572,25128,10759,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,28676,0,0,0,0,0,0,
> -
> 0,0,0,0,0,0,0,0,0,0,875,24007,0,0,0,0,7628,0,0,0,0,0,12268,0,0,0,0,0,0,0,0,19300
> -
> ,23210,356,0,0,0,0,0,0,0,0,0,15236,0,0,0,0,0,49670,0,0,0,0,0,0,0,21764,0,0,0,0,0
> -,0,0,0,0,0,0,0,0,0,0,0,13931,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,45799,0,0,436,3589,
> -0,0,11402,0,0,0,0,0,0,0,0,0,0,62822,0,0,0,39814,588,0,0,0,0,0,0,27750,0,0,0,0,0,
> -
> 0,1609,22660,2346,18951,0,16068,0,0,0,0,0,0,5162,11110,0,0,0,0,15048,1060,0,
> 7879
> -
> ,18280,326,0,14886,19656,0,7594,0,0,0,0,0,781,581,0,16198,0,0,0,0,0,0,1078,98
> 92,
> -0,0,0,0,0,0,0,0,0,0,4489,0,0,0,0,33798,0,0,0,54534,0,0,0,0,0,0,0,33158,0,0,0,0,0
> -
> ,0,0,0,0,42086,13834,2757,8456,16773,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3434,0,0,0,
> -
> 0,0,3946,29668,0,0,30634,36775,0,0,0,0,0,24901,0,16069,6280,0,0,0,0,41990,0,0
> ,0,
> -
> 0,0,0,0,27365,0,0,0,0,0,0,0,0,0,0,1450,44807,0,0,0,32100,0,0,0,0,0,35110,0,0,0,0
> -
> ,0,0,0,0,17448,19591,0,0,0,0,0,0,0,0,0,0,0,0,1739,0,0,0,0,5511,0,0,0,32934,0,0,0
> -,0,0,0,0,0,0,18180,0,0,0,23428,19754,0,0,31174,3021,31655,23464,0,0,0,0,0,0,
> -
> 57255,0,0,21292,64487,0,0,0,0,0,0,25802,9189,0,0,0,0,0,49254,0,0,0,0,0,0,0,0,0,
> 0
> -
> ,5837,50023,0,0,0,0,0,0,0,0,0,15495,0,0,0,0,0,51942,0,0,0,0,0,0,0,0,28104,58662,
> -
> 0,50214,0,0,0,0,0,0,0,0,2988,0,22888,31812,0,0,0,0,0,2020,0,18916,0,0,0,0,0,0,0,
> -
> 23973,0,0,0,0,17516,11717,0,0,0,55911,0,0,0,0,0,0,0,2855,0,0,0,0,0,0,0,0,0,0,0,0
> -
> ,0,0,0,0,0,46822,0,24710,28586,0,0,0,1556,0,0,30117,0,0,22090,57127,3403,140
> 87,0
> -,0,0,0,0,0,0,0,0,0,1041,0,10633,6916,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
> -
> ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,27269,0,0,13322,18055,0,29380,0,56454,0,0,12
> 0
> -
> ,0,0,8773,0,0,0,0,16040,0,0,0,0,0,0,0,27242,23781,0,1572,0,28134,0,0,1512,0,0,
> 0,
> -0,0,0,27684,0,38470,0,0,0,0,0,0,1513,8709,0,0,0,0,0,0,0,0,0,0,0,46566,0,0,0,0,
> -28521,61159,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,24356,0,0,0,0,0,0,0,0,0,13028,0,
> -5863,0,0,15693,0,0,0,0,0,0,0,1131,23398,0,0,0,0,0,0,0,26212,0,0,0,0,0,0,0,0,0,0,
> -
> 0,0,0,18404,0,0,0,0,1457,26183,0,0,2475,7110,0,0,0,0,27180,60166,0,0,0,20262,
> 0,
> -41862,0,0,0,0,0,0,0,0,0,0,2762,0,0,0,0,0,0,0,0,0,0,0,0,0,0,26148,0,0,0,0,0,0,0,0
> -
> ,0,28229,0,0,0,29254,0,0,0,0,0,0,0,0,0,0,27690,0,0,13636,12776,1862,0,0,0,0,0,0,
> -17225,3271,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,28039,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
> -,0,0,0,0,0,0,0,0,0,4457,18117,0,2023,402,0,0,0,0,0,0,0,0,0,0,0,0,0,104,3654,0,0,
> -0,0,0,0,0,0,18440,0,0,0,0,0,0,0,0,29861,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
> -0,0,0,0,0,0,0,22150,0,0,0,0,0,0,0,0,0,0,0,0,24074,0,0,0,0,0,0,0,0,12004,0,32358,
> -0,0,3081,0,0,0,0,0,0,0,0,0,4749,0,0,0,0,0,0,0,0,0,0,0,10792,1799,21322,0,7880,
> -
> 12613,0,0,0,0,0,0,0,0,13993,0,0,0,16202,0,0,0,0,32102,0,37223,0,10500,0,0,0,0,
> 0,
> -
> 0,0,0,32008,0,0,0,0,0,23816,3236,0,0,0,0,0,23237,0,0,5642,0,4684,294,0,0,0,0,0,
> 0
> -,0,0,0,0,0,0,0,0,0,0,0,0,0,26852,0,0,0,0,0,0,7148,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
> -
> 0,0,0,0,0,0,0,0,0,0,7890,61798,939,0,0,56679,0,0,0,0,0,27078,202,5029,0,0,0,0,0,
> -
> 0,0,0,0,28005,0,0,15273,24741,5676,20452,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,55910,0,
> 0
> -,0,0,5069,27942,0,21092,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12517,0,0,0,0,0,0,
> -
> 0,0,0,0,0,0,21384,28260,0,2502,20108,0,0,0,0,0,0,0,0,0,0,0,0,46726,0,30790,0,0,
> 0
> -,0,0,14725,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1099,6372,0,0,0,12422,15182,0,8683,0,
> -
> 10665,19462,0,0,0,0,0,0,1590,0,31628,0,22632,19750,0,0,0,0,0,0,0,24198,0,0,0,
> 0,0
> -,50662,0,0,0,0,0,0,0,0,0,0,9131,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11015,0,0,0,0,0,0,0,
> -
> 0,16490,54695,0,0,0,0,0,0,0,0,12937,0,0,0,0,16004,0,0,0,0,0,0,0,0,0,2181,6923,0,
> -
> 0,0,0,0,0,0,15624,11302,0,0,5673,7559,0,0,14668,15684,0,0,0,0,0,0,24204,48134
> ,0,
> -24230,0,55527,0,0,3464,19141,0,0,0,0};
> -
> -#if defined(__cplusplus) || defined(c_plusplus)
> -} /* extern "C" */
> -#endif
> diff --git a/BaseTools/Source/C/BrotliCompress/enc/encode.c
> b/BaseTools/Source/C/BrotliCompress/enc/encode.c
> deleted file mode 100644
> index 93824d620373..000000000000
> --- a/BaseTools/Source/C/BrotliCompress/enc/encode.c
> +++ /dev/null
> @@ -1,1864 +0,0 @@
> -/* Copyright 2013 Google Inc. All Rights Reserved.
> -
> - Distributed under MIT license.
> - See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
> -*/
> -
> -/* Implementation of Brotli compressor. */
> -
> -#include <brotli/encode.h>
> -
> -#include <stdlib.h> /* free, malloc */
> -#include <string.h> /* memcpy, memset */
> -
> -#include "../common/constants.h"
> -#include "../common/context.h"
> -#include "../common/platform.h"
> -#include "../common/version.h"
> -#include "./backward_references.h"
> -#include "./backward_references_hq.h"
> -#include "./bit_cost.h"
> -#include "./brotli_bit_stream.h"
> -#include "./compress_fragment.h"
> -#include "./compress_fragment_two_pass.h"
> -#include "./encoder_dict.h"
> -#include "./entropy_encode.h"
> -#include "./fast_log.h"
> -#include "./hash.h"
> -#include "./histogram.h"
> -#include "./memory.h"
> -#include "./metablock.h"
> -#include "./prefix.h"
> -#include "./quality.h"
> -#include "./ringbuffer.h"
> -#include "./utf8_util.h"
> -#include "./write_bits.h"
> -
> -#if defined(__cplusplus) || defined(c_plusplus)
> -extern "C" {
> -#endif
> -
> -#define COPY_ARRAY(dst, src) memcpy(dst, src, sizeof(src));
> -
> -typedef enum BrotliEncoderStreamState {
> - /* Default state. */
> - BROTLI_STREAM_PROCESSING = 0,
> - /* Intermediate state; after next block is emitted, byte-padding should be
> - performed before getting back to default state. */
> - BROTLI_STREAM_FLUSH_REQUESTED = 1,
> - /* Last metablock was produced; no more input is acceptable. */
> - BROTLI_STREAM_FINISHED = 2,
> - /* Flushing compressed block and writing meta-data block header. */
> - BROTLI_STREAM_METADATA_HEAD = 3,
> - /* Writing metadata block body. */
> - BROTLI_STREAM_METADATA_BODY = 4
> -} BrotliEncoderStreamState;
> -
> -typedef struct BrotliEncoderStateStruct {
> - BrotliEncoderParams params;
> -
> - MemoryManager memory_manager_;
> -
> - HasherHandle hasher_;
> - uint64_t input_pos_;
> - RingBuffer ringbuffer_;
> - size_t cmd_alloc_size_;
> - Command* commands_;
> - size_t num_commands_;
> - size_t num_literals_;
> - size_t last_insert_len_;
> - uint64_t last_flush_pos_;
> - uint64_t last_processed_pos_;
> - int dist_cache_[BROTLI_NUM_DISTANCE_SHORT_CODES];
> - int saved_dist_cache_[4];
> - uint16_t last_bytes_;
> - uint8_t last_bytes_bits_;
> - uint8_t prev_byte_;
> - uint8_t prev_byte2_;
> - size_t storage_size_;
> - uint8_t* storage_;
> - /* Hash table for FAST_ONE_PASS_COMPRESSION_QUALITY mode. */
> - int small_table_[1 << 10]; /* 4KiB */
> - int* large_table_; /* Allocated only when needed */
> - size_t large_table_size_;
> - /* Command and distance prefix codes (each 64 symbols, stored back-to-
> back)
> - used for the next block in FAST_ONE_PASS_COMPRESSION_QUALITY.
> The command
> - prefix code is over a smaller alphabet with the following 64 symbols:
> - 0 - 15: insert length code 0, copy length code 0 - 15, same distance
> - 16 - 39: insert length code 0, copy length code 0 - 23
> - 40 - 63: insert length code 0 - 23, copy length code 0
> - Note that symbols 16 and 40 represent the same code in the full alphabet,
> - but we do not use either of them in
> FAST_ONE_PASS_COMPRESSION_QUALITY. */
> - uint8_t cmd_depths_[128];
> - uint16_t cmd_bits_[128];
> - /* The compressed form of the command and distance prefix codes for the
> next
> - block in FAST_ONE_PASS_COMPRESSION_QUALITY. */
> - uint8_t cmd_code_[512];
> - size_t cmd_code_numbits_;
> - /* Command and literal buffers for
> FAST_TWO_PASS_COMPRESSION_QUALITY. */
> - uint32_t* command_buf_;
> - uint8_t* literal_buf_;
> -
> - uint8_t* next_out_;
> - size_t available_out_;
> - size_t total_out_;
> - /* Temporary buffer for padding flush bits or metadata block header /
> body. */
> - union {
> - uint64_t u64[2];
> - uint8_t u8[16];
> - } tiny_buf_;
> - uint32_t remaining_metadata_bytes_;
> - BrotliEncoderStreamState stream_state_;
> -
> - BROTLI_BOOL is_last_block_emitted_;
> - BROTLI_BOOL is_initialized_;
> -} BrotliEncoderStateStruct;
> -
> -static BROTLI_BOOL EnsureInitialized(BrotliEncoderState* s);
> -
> -static size_t InputBlockSize(BrotliEncoderState* s) {
> - return (size_t)1 << s->params.lgblock;
> -}
> -
> -static uint64_t UnprocessedInputSize(BrotliEncoderState* s) {
> - return s->input_pos_ - s->last_processed_pos_;
> -}
> -
> -static size_t RemainingInputBlockSize(BrotliEncoderState* s) {
> - const uint64_t delta = UnprocessedInputSize(s);
> - size_t block_size = InputBlockSize(s);
> - if (delta >= block_size) return 0;
> - return block_size - (size_t)delta;
> -}
> -
> -BROTLI_BOOL BrotliEncoderSetParameter(
> - BrotliEncoderState* state, BrotliEncoderParameter p, uint32_t value) {
> - /* Changing parameters on the fly is not implemented yet. */
> - if (state->is_initialized_) return BROTLI_FALSE;
> - /* TODO: Validate/clamp parameters here. */
> - switch (p) {
> - case BROTLI_PARAM_MODE:
> - state->params.mode = (BrotliEncoderMode)value;
> - return BROTLI_TRUE;
> -
> - case BROTLI_PARAM_QUALITY:
> - state->params.quality = (int)value;
> - return BROTLI_TRUE;
> -
> - case BROTLI_PARAM_LGWIN:
> - state->params.lgwin = (int)value;
> - return BROTLI_TRUE;
> -
> - case BROTLI_PARAM_LGBLOCK:
> - state->params.lgblock = (int)value;
> - return BROTLI_TRUE;
> -
> - case BROTLI_PARAM_DISABLE_LITERAL_CONTEXT_MODELING:
> - if ((value != 0) && (value != 1)) return BROTLI_FALSE;
> - state->params.disable_literal_context_modeling =
> TO_BROTLI_BOOL(!!value);
> - return BROTLI_TRUE;
> -
> - case BROTLI_PARAM_SIZE_HINT:
> - state->params.size_hint = value;
> - return BROTLI_TRUE;
> -
> - case BROTLI_PARAM_LARGE_WINDOW:
> - state->params.large_window = TO_BROTLI_BOOL(!!value);
> - return BROTLI_TRUE;
> -
> - case BROTLI_PARAM_NPOSTFIX:
> - state->params.dist.distance_postfix_bits = value;
> - return BROTLI_TRUE;
> -
> - case BROTLI_PARAM_NDIRECT:
> - state->params.dist.num_direct_distance_codes = value;
> - return BROTLI_TRUE;
> -
> - default: return BROTLI_FALSE;
> - }
> -}
> -
> -/* Wraps 64-bit input position to 32-bit ring-buffer position preserving
> - "not-a-first-lap" feature. */
> -static uint32_t WrapPosition(uint64_t position) {
> - uint32_t result = (uint32_t)position;
> - uint64_t gb = position >> 30;
> - if (gb > 2) {
> - /* Wrap every 2GiB; The first 3GB are continuous. */
> - result = (result & ((1u << 30) - 1)) | ((uint32_t)((gb - 1) & 1) + 1) << 30;
> - }
> - return result;
> -}
> -
> -static uint8_t* GetBrotliStorage(BrotliEncoderState* s, size_t size) {
> - MemoryManager* m = &s->memory_manager_;
> - if (s->storage_size_ < size) {
> - BROTLI_FREE(m, s->storage_);
> - s->storage_ = BROTLI_ALLOC(m, uint8_t, size);
> - if (BROTLI_IS_OOM(m)) return NULL;
> - s->storage_size_ = size;
> - }
> - return s->storage_;
> -}
> -
> -static size_t HashTableSize(size_t max_table_size, size_t input_size) {
> - size_t htsize = 256;
> - while (htsize < max_table_size && htsize < input_size) {
> - htsize <<= 1;
> - }
> - return htsize;
> -}
> -
> -static int* GetHashTable(BrotliEncoderState* s, int quality,
> - size_t input_size, size_t* table_size) {
> - /* Use smaller hash table when input.size() is smaller, since we
> - fill the table, incurring O(hash table size) overhead for
> - compression, and if the input is short, we won't need that
> - many hash table entries anyway. */
> - MemoryManager* m = &s->memory_manager_;
> - const size_t max_table_size = MaxHashTableSize(quality);
> - size_t htsize = HashTableSize(max_table_size, input_size);
> - int* table;
> - BROTLI_DCHECK(max_table_size >= 256);
> - if (quality == FAST_ONE_PASS_COMPRESSION_QUALITY) {
> - /* Only odd shifts are supported by fast-one-pass. */
> - if ((htsize & 0xAAAAA) == 0) {
> - htsize <<= 1;
> - }
> - }
> -
> - if (htsize <= sizeof(s->small_table_) / sizeof(s->small_table_[0])) {
> - table = s->small_table_;
> - } else {
> - if (htsize > s->large_table_size_) {
> - s->large_table_size_ = htsize;
> - BROTLI_FREE(m, s->large_table_);
> - s->large_table_ = BROTLI_ALLOC(m, int, htsize);
> - if (BROTLI_IS_OOM(m)) return 0;
> - }
> - table = s->large_table_;
> - }
> -
> - *table_size = htsize;
> - memset(table, 0, htsize * sizeof(*table));
> - return table;
> -}
> -
> -static void EncodeWindowBits(int lgwin, BROTLI_BOOL large_window,
> - uint16_t* last_bytes, uint8_t* last_bytes_bits) {
> - if (large_window) {
> - *last_bytes = (uint16_t)(((lgwin & 0x3F) << 8) | 0x11);
> - *last_bytes_bits = 14;
> - } else {
> - if (lgwin == 16) {
> - *last_bytes = 0;
> - *last_bytes_bits = 1;
> - } else if (lgwin == 17) {
> - *last_bytes = 1;
> - *last_bytes_bits = 7;
> - } else if (lgwin > 17) {
> - *last_bytes = (uint16_t)(((lgwin - 17) << 1) | 0x01);
> - *last_bytes_bits = 4;
> - } else {
> - *last_bytes = (uint16_t)(((lgwin - 8) << 4) | 0x01);
> - *last_bytes_bits = 7;
> - }
> - }
> -}
> -
> -/* Initializes the command and distance prefix codes for the first block. */
> -static void InitCommandPrefixCodes(uint8_t cmd_depths[128],
> - uint16_t cmd_bits[128],
> - uint8_t cmd_code[512],
> - size_t* cmd_code_numbits) {
> - static const uint8_t kDefaultCommandDepths[128] = {
> - 0, 4, 4, 5, 6, 6, 7, 7, 7, 7, 7, 8, 8, 8, 8, 8,
> - 0, 0, 0, 4, 4, 4, 4, 4, 5, 5, 6, 6, 6, 6, 7, 7,
> - 7, 7, 10, 10, 10, 10, 10, 10, 0, 4, 4, 5, 5, 5, 6, 6,
> - 7, 8, 8, 9, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
> - 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
> - 6, 6, 6, 6, 6, 6, 5, 5, 5, 5, 5, 5, 4, 4, 4, 4,
> - 4, 4, 4, 5, 5, 5, 5, 5, 5, 6, 6, 7, 7, 7, 8, 10,
> - 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
> - };
> - static const uint16_t kDefaultCommandBits[128] = {
> - 0, 0, 8, 9, 3, 35, 7, 71,
> - 39, 103, 23, 47, 175, 111, 239, 31,
> - 0, 0, 0, 4, 12, 2, 10, 6,
> - 13, 29, 11, 43, 27, 59, 87, 55,
> - 15, 79, 319, 831, 191, 703, 447, 959,
> - 0, 14, 1, 25, 5, 21, 19, 51,
> - 119, 159, 95, 223, 479, 991, 63, 575,
> - 127, 639, 383, 895, 255, 767, 511, 1023,
> - 14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
> - 27, 59, 7, 39, 23, 55, 30, 1, 17, 9, 25, 5, 0, 8, 4, 12,
> - 2, 10, 6, 21, 13, 29, 3, 19, 11, 15, 47, 31, 95, 63, 127, 255,
> - 767, 2815, 1791, 3839, 511, 2559, 1535, 3583, 1023, 3071, 2047, 4095,
> - };
> - static const uint8_t kDefaultCommandCode[] = {
> - 0xff, 0x77, 0xd5, 0xbf, 0xe7, 0xde, 0xea, 0x9e, 0x51, 0x5d, 0xde, 0xc6,
> - 0x70, 0x57, 0xbc, 0x58, 0x58, 0x58, 0xd8, 0xd8, 0x58, 0xd5, 0xcb, 0x8c,
> - 0xea, 0xe0, 0xc3, 0x87, 0x1f, 0x83, 0xc1, 0x60, 0x1c, 0x67, 0xb2, 0xaa,
> - 0x06, 0x83, 0xc1, 0x60, 0x30, 0x18, 0xcc, 0xa1, 0xce, 0x88, 0x54, 0x94,
> - 0x46, 0xe1, 0xb0, 0xd0, 0x4e, 0xb2, 0xf7, 0x04, 0x00,
> - };
> - static const size_t kDefaultCommandCodeNumBits = 448;
> - COPY_ARRAY(cmd_depths, kDefaultCommandDepths);
> - COPY_ARRAY(cmd_bits, kDefaultCommandBits);
> -
> - /* Initialize the pre-compressed form of the command and distance prefix
> - codes. */
> - COPY_ARRAY(cmd_code, kDefaultCommandCode);
> - *cmd_code_numbits = kDefaultCommandCodeNumBits;
> -}
> -
> -/* Decide about the context map based on the ability of the prediction
> - ability of the previous byte UTF8-prefix on the next byte. The
> - prediction ability is calculated as Shannon entropy. Here we need
> - Shannon entropy instead of 'BitsEntropy' since the prefix will be
> - encoded with the remaining 6 bits of the following byte, and
> - BitsEntropy will assume that symbol to be stored alone using Huffman
> - coding. */
> -static void ChooseContextMap(int quality,
> - uint32_t* bigram_histo,
> - size_t* num_literal_contexts,
> - const uint32_t** literal_context_map) {
> - static const uint32_t kStaticContextMapContinuation[64] = {
> - 1, 1, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
> - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
> - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
> - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
> - };
> - static const uint32_t kStaticContextMapSimpleUTF8[64] = {
> - 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
> - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
> - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
> - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
> - };
> -
> - uint32_t monogram_histo[3] = { 0 };
> - uint32_t two_prefix_histo[6] = { 0 };
> - size_t total;
> - size_t i;
> - size_t dummy;
> - double entropy[4];
> - for (i = 0; i < 9; ++i) {
> - monogram_histo[i % 3] += bigram_histo[i];
> - two_prefix_histo[i % 6] += bigram_histo[i];
> - }
> - entropy[1] = ShannonEntropy(monogram_histo, 3, &dummy);
> - entropy[2] = (ShannonEntropy(two_prefix_histo, 3, &dummy) +
> - ShannonEntropy(two_prefix_histo + 3, 3, &dummy));
> - entropy[3] = 0;
> - for (i = 0; i < 3; ++i) {
> - entropy[3] += ShannonEntropy(bigram_histo + 3 * i, 3, &dummy);
> - }
> -
> - total = monogram_histo[0] + monogram_histo[1] + monogram_histo[2];
> - BROTLI_DCHECK(total != 0);
> - entropy[0] = 1.0 / (double)total;
> - entropy[1] *= entropy[0];
> - entropy[2] *= entropy[0];
> - entropy[3] *= entropy[0];
> -
> - if (quality < MIN_QUALITY_FOR_HQ_CONTEXT_MODELING) {
> - /* 3 context models is a bit slower, don't use it at lower qualities. */
> - entropy[3] = entropy[1] * 10;
> - }
> - /* If expected savings by symbol are less than 0.2 bits, skip the
> - context modeling -- in exchange for faster decoding speed. */
> - if (entropy[1] - entropy[2] < 0.2 &&
> - entropy[1] - entropy[3] < 0.2) {
> - *num_literal_contexts = 1;
> - } else if (entropy[2] - entropy[3] < 0.02) {
> - *num_literal_contexts = 2;
> - *literal_context_map = kStaticContextMapSimpleUTF8;
> - } else {
> - *num_literal_contexts = 3;
> - *literal_context_map = kStaticContextMapContinuation;
> - }
> -}
> -
> -/* Decide if we want to use a more complex static context map containing
> 13
> - context values, based on the entropy reduction of histograms over the
> - first 5 bits of literals. */
> -static BROTLI_BOOL ShouldUseComplexStaticContextMap(const uint8_t*
> input,
> - size_t start_pos, size_t length, size_t mask, int quality, size_t size_hint,
> - size_t* num_literal_contexts, const uint32_t** literal_context_map) {
> - static const uint32_t kStaticContextMapComplexUTF8[64] = {
> - 11, 11, 12, 12, /* 0 special */
> - 0, 0, 0, 0, /* 4 lf */
> - 1, 1, 9, 9, /* 8 space */
> - 2, 2, 2, 2, /* !, first after space/lf and after something else. */
> - 1, 1, 1, 1, /* " */
> - 8, 3, 3, 3, /* % */
> - 1, 1, 1, 1, /* ({[ */
> - 2, 2, 2, 2, /* }]) */
> - 8, 4, 4, 4, /* :; */
> - 8, 7, 4, 4, /* . */
> - 8, 0, 0, 0, /* > */
> - 3, 3, 3, 3, /* [0..9] */
> - 5, 5, 10, 5, /* [A-Z] */
> - 5, 5, 10, 5,
> - 6, 6, 6, 6, /* [a-z] */
> - 6, 6, 6, 6,
> - };
> - BROTLI_UNUSED(quality);
> - /* Try the more complex static context map only for long data. */
> - if (size_hint < (1 << 20)) {
> - return BROTLI_FALSE;
> - } else {
> - const size_t end_pos = start_pos + length;
> - /* To make entropy calculations faster and to fit on the stack, we collect
> - histograms over the 5 most significant bits of literals. One histogram
> - without context and 13 additional histograms for each context value. */
> - uint32_t combined_histo[32] = { 0 };
> - uint32_t context_histo[13][32] = { { 0 } };
> - uint32_t total = 0;
> - double entropy[3];
> - size_t dummy;
> - size_t i;
> - ContextLut utf8_lut = BROTLI_CONTEXT_LUT(CONTEXT_UTF8);
> - for (; start_pos + 64 <= end_pos; start_pos += 4096) {
> - const size_t stride_end_pos = start_pos + 64;
> - uint8_t prev2 = input[start_pos & mask];
> - uint8_t prev1 = input[(start_pos + 1) & mask];
> - size_t pos;
> - /* To make the analysis of the data faster we only examine 64 byte long
> - strides at every 4kB intervals. */
> - for (pos = start_pos + 2; pos < stride_end_pos; ++pos) {
> - const uint8_t literal = input[pos & mask];
> - const uint8_t context = (uint8_t)kStaticContextMapComplexUTF8[
> - BROTLI_CONTEXT(prev1, prev2, utf8_lut)];
> - ++total;
> - ++combined_histo[literal >> 3];
> - ++context_histo[context][literal >> 3];
> - prev2 = prev1;
> - prev1 = literal;
> - }
> - }
> - entropy[1] = ShannonEntropy(combined_histo, 32, &dummy);
> - entropy[2] = 0;
> - for (i = 0; i < 13; ++i) {
> - entropy[2] += ShannonEntropy(&context_histo[i][0], 32, &dummy);
> - }
> - entropy[0] = 1.0 / (double)total;
> - entropy[1] *= entropy[0];
> - entropy[2] *= entropy[0];
> - /* The triggering heuristics below were tuned by compressing the
> individual
> - files of the silesia corpus. If we skip this kind of context modeling
> - for not very well compressible input (i.e. entropy using context modeling
> - is 60% of maximal entropy) or if expected savings by symbol are less
> - than 0.2 bits, then in every case when it triggers, the final compression
> - ratio is improved. Note however that this heuristics might be too strict
> - for some cases and could be tuned further. */
> - if (entropy[2] > 3.0 || entropy[1] - entropy[2] < 0.2) {
> - return BROTLI_FALSE;
> - } else {
> - *num_literal_contexts = 13;
> - *literal_context_map = kStaticContextMapComplexUTF8;
> - return BROTLI_TRUE;
> - }
> - }
> -}
> -
> -static void DecideOverLiteralContextModeling(const uint8_t* input,
> - size_t start_pos, size_t length, size_t mask, int quality, size_t size_hint,
> - size_t* num_literal_contexts, const uint32_t** literal_context_map) {
> - if (quality < MIN_QUALITY_FOR_CONTEXT_MODELING || length < 64) {
> - return;
> - } else if (ShouldUseComplexStaticContextMap(
> - input, start_pos, length, mask, quality, size_hint,
> - num_literal_contexts, literal_context_map)) {
> - /* Context map was already set, nothing else to do. */
> - } else {
> - /* Gather bi-gram data of the UTF8 byte prefixes. To make the analysis of
> - UTF8 data faster we only examine 64 byte long strides at every 4kB
> - intervals. */
> - const size_t end_pos = start_pos + length;
> - uint32_t bigram_prefix_histo[9] = { 0 };
> - for (; start_pos + 64 <= end_pos; start_pos += 4096) {
> - static const int lut[4] = { 0, 0, 1, 2 };
> - const size_t stride_end_pos = start_pos + 64;
> - int prev = lut[input[start_pos & mask] >> 6] * 3;
> - size_t pos;
> - for (pos = start_pos + 1; pos < stride_end_pos; ++pos) {
> - const uint8_t literal = input[pos & mask];
> - ++bigram_prefix_histo[prev + lut[literal >> 6]];
> - prev = lut[literal >> 6] * 3;
> - }
> - }
> - ChooseContextMap(quality, &bigram_prefix_histo[0],
> num_literal_contexts,
> - literal_context_map);
> - }
> -}
> -
> -static BROTLI_BOOL ShouldCompress(
> - const uint8_t* data, const size_t mask, const uint64_t last_flush_pos,
> - const size_t bytes, const size_t num_literals, const size_t num_commands)
> {
> - if (num_commands < (bytes >> 8) + 2) {
> - if (num_literals > 0.99 * (double)bytes) {
> - uint32_t literal_histo[256] = { 0 };
> - static const uint32_t kSampleRate = 13;
> - static const double kMinEntropy = 7.92;
> - const double bit_cost_threshold =
> - (double)bytes * kMinEntropy / kSampleRate;
> - size_t t = (bytes + kSampleRate - 1) / kSampleRate;
> - uint32_t pos = (uint32_t)last_flush_pos;
> - size_t i;
> - for (i = 0; i < t; i++) {
> - ++literal_histo[data[pos & mask]];
> - pos += kSampleRate;
> - }
> - if (BitsEntropy(literal_histo, 256) > bit_cost_threshold) {
> - return BROTLI_FALSE;
> - }
> - }
> - }
> - return BROTLI_TRUE;
> -}
> -
> -/* Chooses the literal context mode for a metablock */
> -static ContextType ChooseContextMode(const BrotliEncoderParams*
> params,
> - const uint8_t* data, const size_t pos, const size_t mask,
> - const size_t length) {
> - /* We only do the computation for the option of something else than
> - CONTEXT_UTF8 for the highest qualities */
> - if (params->quality >= MIN_QUALITY_FOR_HQ_BLOCK_SPLITTING &&
> - !BrotliIsMostlyUTF8(data, pos, mask, length, kMinUTF8Ratio)) {
> - return CONTEXT_SIGNED;
> - }
> - return CONTEXT_UTF8;
> -}
> -
> -static void WriteMetaBlockInternal(MemoryManager* m,
> - const uint8_t* data,
> - const size_t mask,
> - const uint64_t last_flush_pos,
> - const size_t bytes,
> - const BROTLI_BOOL is_last,
> - ContextType literal_context_mode,
> - const BrotliEncoderParams* params,
> - const uint8_t prev_byte,
> - const uint8_t prev_byte2,
> - const size_t num_literals,
> - const size_t num_commands,
> - Command* commands,
> - const int* saved_dist_cache,
> - int* dist_cache,
> - size_t* storage_ix,
> - uint8_t* storage) {
> - const uint32_t wrapped_last_flush_pos = WrapPosition(last_flush_pos);
> - uint16_t last_bytes;
> - uint8_t last_bytes_bits;
> - ContextLut literal_context_lut =
> BROTLI_CONTEXT_LUT(literal_context_mode);
> - BrotliEncoderParams block_params = *params;
> -
> - if (bytes == 0) {
> - /* Write the ISLAST and ISEMPTY bits. */
> - BrotliWriteBits(2, 3, storage_ix, storage);
> - *storage_ix = (*storage_ix + 7u) & ~7u;
> - return;
> - }
> -
> - if (!ShouldCompress(data, mask, last_flush_pos, bytes,
> - num_literals, num_commands)) {
> - /* Restore the distance cache, as its last update by
> - CreateBackwardReferences is now unused. */
> - memcpy(dist_cache, saved_dist_cache, 4 * sizeof(dist_cache[0]));
> - BrotliStoreUncompressedMetaBlock(is_last, data,
> - wrapped_last_flush_pos, mask, bytes,
> - storage_ix, storage);
> - return;
> - }
> -
> - BROTLI_DCHECK(*storage_ix <= 14);
> - last_bytes = (uint16_t)((storage[1] << 8) | storage[0]);
> - last_bytes_bits = (uint8_t)(*storage_ix);
> - if (params->quality <= MAX_QUALITY_FOR_STATIC_ENTROPY_CODES) {
> - BrotliStoreMetaBlockFast(m, data, wrapped_last_flush_pos,
> - bytes, mask, is_last, params,
> - commands, num_commands,
> - storage_ix, storage);
> - if (BROTLI_IS_OOM(m)) return;
> - } else if (params->quality < MIN_QUALITY_FOR_BLOCK_SPLIT) {
> - BrotliStoreMetaBlockTrivial(m, data, wrapped_last_flush_pos,
> - bytes, mask, is_last, params,
> - commands, num_commands,
> - storage_ix, storage);
> - if (BROTLI_IS_OOM(m)) return;
> - } else {
> - MetaBlockSplit mb;
> - InitMetaBlockSplit(&mb);
> - if (params->quality < MIN_QUALITY_FOR_HQ_BLOCK_SPLITTING) {
> - size_t num_literal_contexts = 1;
> - const uint32_t* literal_context_map = NULL;
> - if (!params->disable_literal_context_modeling) {
> - DecideOverLiteralContextModeling(
> - data, wrapped_last_flush_pos, bytes, mask, params->quality,
> - params->size_hint, &num_literal_contexts,
> - &literal_context_map);
> - }
> - BrotliBuildMetaBlockGreedy(m, data, wrapped_last_flush_pos, mask,
> - prev_byte, prev_byte2, literal_context_lut, num_literal_contexts,
> - literal_context_map, commands, num_commands, &mb);
> - if (BROTLI_IS_OOM(m)) return;
> - } else {
> - BrotliBuildMetaBlock(m, data, wrapped_last_flush_pos, mask,
> &block_params,
> - prev_byte, prev_byte2,
> - commands, num_commands,
> - literal_context_mode,
> - &mb);
> - if (BROTLI_IS_OOM(m)) return;
> - }
> - if (params->quality >= MIN_QUALITY_FOR_OPTIMIZE_HISTOGRAMS) {
> - /* The number of distance symbols effectively used for distance
> - histograms. It might be less than distance alphabet size
> - for "Large Window Brotli" (32-bit). */
> - uint32_t num_effective_dist_codes = block_params.dist.alphabet_size;
> - if (num_effective_dist_codes >
> BROTLI_NUM_HISTOGRAM_DISTANCE_SYMBOLS) {
> - num_effective_dist_codes =
> BROTLI_NUM_HISTOGRAM_DISTANCE_SYMBOLS;
> - }
> - BrotliOptimizeHistograms(num_effective_dist_codes, &mb);
> - }
> - BrotliStoreMetaBlock(m, data, wrapped_last_flush_pos, bytes, mask,
> - prev_byte, prev_byte2,
> - is_last,
> - &block_params,
> - literal_context_mode,
> - commands, num_commands,
> - &mb,
> - storage_ix, storage);
> - if (BROTLI_IS_OOM(m)) return;
> - DestroyMetaBlockSplit(m, &mb);
> - }
> - if (bytes + 4 < (*storage_ix >> 3)) {
> - /* Restore the distance cache and last byte. */
> - memcpy(dist_cache, saved_dist_cache, 4 * sizeof(dist_cache[0]));
> - storage[0] = (uint8_t)last_bytes;
> - storage[1] = (uint8_t)(last_bytes >> 8);
> - *storage_ix = last_bytes_bits;
> - BrotliStoreUncompressedMetaBlock(is_last, data,
> - wrapped_last_flush_pos, mask,
> - bytes, storage_ix, storage);
> - }
> -}
> -
> -static void ChooseDistanceParams(BrotliEncoderParams* params) {
> - uint32_t distance_postfix_bits = 0;
> - uint32_t num_direct_distance_codes = 0;
> -
> - if (params->quality >= MIN_QUALITY_FOR_NONZERO_DISTANCE_PARAMS)
> {
> - uint32_t ndirect_msb;
> - if (params->mode == BROTLI_MODE_FONT) {
> - distance_postfix_bits = 1;
> - num_direct_distance_codes = 12;
> - } else {
> - distance_postfix_bits = params->dist.distance_postfix_bits;
> - num_direct_distance_codes = params->dist.num_direct_distance_codes;
> - }
> - ndirect_msb = (num_direct_distance_codes >> distance_postfix_bits) &
> 0x0F;
> - if (distance_postfix_bits > BROTLI_MAX_NPOSTFIX ||
> - num_direct_distance_codes > BROTLI_MAX_NDIRECT ||
> - (ndirect_msb << distance_postfix_bits) != num_direct_distance_codes)
> {
> - distance_postfix_bits = 0;
> - num_direct_distance_codes = 0;
> - }
> - }
> -
> - BrotliInitDistanceParams(
> - params, distance_postfix_bits, num_direct_distance_codes);
> -}
> -
> -static BROTLI_BOOL EnsureInitialized(BrotliEncoderState* s) {
> - if (BROTLI_IS_OOM(&s->memory_manager_)) return BROTLI_FALSE;
> - if (s->is_initialized_) return BROTLI_TRUE;
> -
> - SanitizeParams(&s->params);
> - s->params.lgblock = ComputeLgBlock(&s->params);
> - ChooseDistanceParams(&s->params);
> -
> - s->remaining_metadata_bytes_ = BROTLI_UINT32_MAX;
> -
> - RingBufferSetup(&s->params, &s->ringbuffer_);
> -
> - /* Initialize last byte with stream header. */
> - {
> - int lgwin = s->params.lgwin;
> - if (s->params.quality == FAST_ONE_PASS_COMPRESSION_QUALITY ||
> - s->params.quality == FAST_TWO_PASS_COMPRESSION_QUALITY) {
> - lgwin = BROTLI_MAX(int, lgwin, 18);
> - }
> - EncodeWindowBits(lgwin, s->params.large_window,
> - &s->last_bytes_, &s->last_bytes_bits_);
> - }
> -
> - if (s->params.quality == FAST_ONE_PASS_COMPRESSION_QUALITY) {
> - InitCommandPrefixCodes(s->cmd_depths_, s->cmd_bits_,
> - s->cmd_code_, &s->cmd_code_numbits_);
> - }
> -
> - s->is_initialized_ = BROTLI_TRUE;
> - return BROTLI_TRUE;
> -}
> -
> -static void BrotliEncoderInitParams(BrotliEncoderParams* params) {
> - params->mode = BROTLI_DEFAULT_MODE;
> - params->large_window = BROTLI_FALSE;
> - params->quality = BROTLI_DEFAULT_QUALITY;
> - params->lgwin = BROTLI_DEFAULT_WINDOW;
> - params->lgblock = 0;
> - params->size_hint = 0;
> - params->disable_literal_context_modeling = BROTLI_FALSE;
> - BrotliInitEncoderDictionary(¶ms->dictionary);
> - params->dist.distance_postfix_bits = 0;
> - params->dist.num_direct_distance_codes = 0;
> - params->dist.alphabet_size =
> - BROTLI_DISTANCE_ALPHABET_SIZE(0, 0, BROTLI_MAX_DISTANCE_BITS);
> - params->dist.max_distance = BROTLI_MAX_DISTANCE;
> -}
> -
> -static void BrotliEncoderInitState(BrotliEncoderState* s) {
> - BrotliEncoderInitParams(&s->params);
> - s->input_pos_ = 0;
> - s->num_commands_ = 0;
> - s->num_literals_ = 0;
> - s->last_insert_len_ = 0;
> - s->last_flush_pos_ = 0;
> - s->last_processed_pos_ = 0;
> - s->prev_byte_ = 0;
> - s->prev_byte2_ = 0;
> - s->storage_size_ = 0;
> - s->storage_ = 0;
> - s->hasher_ = NULL;
> - s->large_table_ = NULL;
> - s->large_table_size_ = 0;
> - s->cmd_code_numbits_ = 0;
> - s->command_buf_ = NULL;
> - s->literal_buf_ = NULL;
> - s->next_out_ = NULL;
> - s->available_out_ = 0;
> - s->total_out_ = 0;
> - s->stream_state_ = BROTLI_STREAM_PROCESSING;
> - s->is_last_block_emitted_ = BROTLI_FALSE;
> - s->is_initialized_ = BROTLI_FALSE;
> -
> - RingBufferInit(&s->ringbuffer_);
> -
> - s->commands_ = 0;
> - s->cmd_alloc_size_ = 0;
> -
> - /* Initialize distance cache. */
> - s->dist_cache_[0] = 4;
> - s->dist_cache_[1] = 11;
> - s->dist_cache_[2] = 15;
> - s->dist_cache_[3] = 16;
> - /* Save the state of the distance cache in case we need to restore it for
> - emitting an uncompressed block. */
> - memcpy(s->saved_dist_cache_, s->dist_cache_, sizeof(s-
> >saved_dist_cache_));
> -}
> -
> -BrotliEncoderState* BrotliEncoderCreateInstance(
> - brotli_alloc_func alloc_func, brotli_free_func free_func, void* opaque) {
> - BrotliEncoderState* state = 0;
> - if (!alloc_func && !free_func) {
> - state = (BrotliEncoderState*)malloc(sizeof(BrotliEncoderState));
> - } else if (alloc_func && free_func) {
> - state = (BrotliEncoderState*)alloc_func(opaque,
> sizeof(BrotliEncoderState));
> - }
> - if (state == 0) {
> - /* BROTLI_DUMP(); */
> - return 0;
> - }
> - BrotliInitMemoryManager(
> - &state->memory_manager_, alloc_func, free_func, opaque);
> - BrotliEncoderInitState(state);
> - return state;
> -}
> -
> -static void BrotliEncoderCleanupState(BrotliEncoderState* s) {
> - MemoryManager* m = &s->memory_manager_;
> - if (BROTLI_IS_OOM(m)) {
> - BrotliWipeOutMemoryManager(m);
> - return;
> - }
> - BROTLI_FREE(m, s->storage_);
> - BROTLI_FREE(m, s->commands_);
> - RingBufferFree(m, &s->ringbuffer_);
> - DestroyHasher(m, &s->hasher_);
> - BROTLI_FREE(m, s->large_table_);
> - BROTLI_FREE(m, s->command_buf_);
> - BROTLI_FREE(m, s->literal_buf_);
> -}
> -
> -/* Deinitializes and frees BrotliEncoderState instance. */
> -void BrotliEncoderDestroyInstance(BrotliEncoderState* state) {
> - if (!state) {
> - return;
> - } else {
> - MemoryManager* m = &state->memory_manager_;
> - brotli_free_func free_func = m->free_func;
> - void* opaque = m->opaque;
> - BrotliEncoderCleanupState(state);
> - free_func(opaque, state);
> - }
> -}
> -
> -/*
> - Copies the given input data to the internal ring buffer of the compressor.
> - No processing of the data occurs at this time and this function can be
> - called multiple times before calling WriteBrotliData() to process the
> - accumulated input. At most input_block_size() bytes of input data can be
> - copied to the ring buffer, otherwise the next WriteBrotliData() will fail.
> - */
> -static void CopyInputToRingBuffer(BrotliEncoderState* s,
> - const size_t input_size,
> - const uint8_t* input_buffer) {
> - RingBuffer* ringbuffer_ = &s->ringbuffer_;
> - MemoryManager* m = &s->memory_manager_;
> - RingBufferWrite(m, input_buffer, input_size, ringbuffer_);
> - if (BROTLI_IS_OOM(m)) return;
> - s->input_pos_ += input_size;
> -
> - /* TL;DR: If needed, initialize 7 more bytes in the ring buffer to make the
> - hashing not depend on uninitialized data. This makes compression
> - deterministic and it prevents uninitialized memory warnings in Valgrind.
> - Even without erasing, the output would be valid (but nondeterministic).
> -
> - Background information: The compressor stores short (at most 8 bytes)
> - substrings of the input already read in a hash table, and detects
> - repetitions by looking up such substrings in the hash table. If it
> - can find a substring, it checks whether the substring is really there
> - in the ring buffer (or it's just a hash collision). Should the hash
> - table become corrupt, this check makes sure that the output is
> - still valid, albeit the compression ratio would be bad.
> -
> - The compressor populates the hash table from the ring buffer as it's
> - reading new bytes from the input. However, at the last few indexes of
> - the ring buffer, there are not enough bytes to build full-length
> - substrings from. Since the hash table always contains full-length
> - substrings, we erase with dummy zeros here to make sure that those
> - substrings will contain zeros at the end instead of uninitialized
> - data.
> -
> - Please note that erasing is not necessary (because the
> - memory region is already initialized since he ring buffer
> - has a `tail' that holds a copy of the beginning,) so we
> - skip erasing if we have already gone around at least once in
> - the ring buffer.
> -
> - Only clear during the first round of ring-buffer writes. On
> - subsequent rounds data in the ring-buffer would be affected. */
> - if (ringbuffer_->pos_ <= ringbuffer_->mask_) {
> - /* This is the first time when the ring buffer is being written.
> - We clear 7 bytes just after the bytes that have been copied from
> - the input buffer.
> -
> - The ring-buffer has a "tail" that holds a copy of the beginning,
> - but only once the ring buffer has been fully written once, i.e.,
> - pos <= mask. For the first time, we need to write values
> - in this tail (where index may be larger than mask), so that
> - we have exactly defined behavior and don't read uninitialized
> - memory. Due to performance reasons, hashing reads data using a
> - LOAD64, which can go 7 bytes beyond the bytes written in the
> - ring-buffer. */
> - memset(ringbuffer_->buffer_ + ringbuffer_->pos_, 0, 7);
> - }
> -}
> -
> -/* Marks all input as processed.
> - Returns true if position wrapping occurs. */
> -static BROTLI_BOOL UpdateLastProcessedPos(BrotliEncoderState* s) {
> - uint32_t wrapped_last_processed_pos = WrapPosition(s-
> >last_processed_pos_);
> - uint32_t wrapped_input_pos = WrapPosition(s->input_pos_);
> - s->last_processed_pos_ = s->input_pos_;
> - return TO_BROTLI_BOOL(wrapped_input_pos <
> wrapped_last_processed_pos);
> -}
> -
> -static void ExtendLastCommand(BrotliEncoderState* s, uint32_t* bytes,
> - uint32_t* wrapped_last_processed_pos) {
> - Command* last_command = &s->commands_[s->num_commands_ - 1];
> - const uint8_t* data = s->ringbuffer_.buffer_;
> - const uint32_t mask = s->ringbuffer_.mask_;
> - uint64_t max_backward_distance =
> - (((uint64_t)1) << s->params.lgwin) - BROTLI_WINDOW_GAP;
> - uint64_t last_copy_len = last_command->copy_len_ & 0x1FFFFFF;
> - uint64_t last_processed_pos = s->last_processed_pos_ - last_copy_len;
> - uint64_t max_distance = last_processed_pos < max_backward_distance ?
> - last_processed_pos : max_backward_distance;
> - uint64_t cmd_dist = (uint64_t)s->dist_cache_[0];
> - uint32_t distance_code = CommandRestoreDistanceCode(last_command,
> - &s->params.dist);
> - if (distance_code < BROTLI_NUM_DISTANCE_SHORT_CODES ||
> - distance_code - (BROTLI_NUM_DISTANCE_SHORT_CODES - 1) ==
> cmd_dist) {
> - if (cmd_dist <= max_distance) {
> - while (*bytes != 0 && data[*wrapped_last_processed_pos & mask] ==
> - data[(*wrapped_last_processed_pos - cmd_dist) & mask]) {
> - last_command->copy_len_++;
> - (*bytes)--;
> - (*wrapped_last_processed_pos)++;
> - }
> - }
> - /* The copy length is at most the metablock size, and thus expressible. */
> - GetLengthCode(last_command->insert_len_,
> - (size_t)((int)(last_command->copy_len_ & 0x1FFFFFF) +
> - (int)(last_command->copy_len_ >> 25)),
> - TO_BROTLI_BOOL((last_command->dist_prefix_ & 0x3FF) == 0),
> - &last_command->cmd_prefix_);
> - }
> -}
> -
> -/*
> - Processes the accumulated input data and sets |*out_size| to the length
> of
> - the new output meta-block, or to zero if no new output meta-block has
> been
> - created (in this case the processed input data is buffered internally).
> - If |*out_size| is positive, |*output| points to the start of the output
> - data. If |is_last| or |force_flush| is BROTLI_TRUE, an output meta-block is
> - always created. However, until |is_last| is BROTLI_TRUE encoder may
> retain up
> - to 7 bits of the last byte of output. To force encoder to dump the
> remaining
> - bits use WriteMetadata() to append an empty meta-data block.
> - Returns BROTLI_FALSE if the size of the input data is larger than
> - input_block_size().
> - */
> -static BROTLI_BOOL EncodeData(
> - BrotliEncoderState* s, const BROTLI_BOOL is_last,
> - const BROTLI_BOOL force_flush, size_t* out_size, uint8_t** output) {
> - const uint64_t delta = UnprocessedInputSize(s);
> - uint32_t bytes = (uint32_t)delta;
> - uint32_t wrapped_last_processed_pos = WrapPosition(s-
> >last_processed_pos_);
> - uint8_t* data;
> - uint32_t mask;
> - MemoryManager* m = &s->memory_manager_;
> - ContextType literal_context_mode;
> -
> - data = s->ringbuffer_.buffer_;
> - mask = s->ringbuffer_.mask_;
> -
> - /* Adding more blocks after "last" block is forbidden. */
> - if (s->is_last_block_emitted_) return BROTLI_FALSE;
> - if (is_last) s->is_last_block_emitted_ = BROTLI_TRUE;
> -
> - if (delta > InputBlockSize(s)) {
> - return BROTLI_FALSE;
> - }
> - if (s->params.quality == FAST_TWO_PASS_COMPRESSION_QUALITY &&
> - !s->command_buf_) {
> - s->command_buf_ =
> - BROTLI_ALLOC(m, uint32_t, kCompressFragmentTwoPassBlockSize);
> - s->literal_buf_ =
> - BROTLI_ALLOC(m, uint8_t, kCompressFragmentTwoPassBlockSize);
> - if (BROTLI_IS_OOM(m)) return BROTLI_FALSE;
> - }
> -
> - if (s->params.quality == FAST_ONE_PASS_COMPRESSION_QUALITY ||
> - s->params.quality == FAST_TWO_PASS_COMPRESSION_QUALITY) {
> - uint8_t* storage;
> - size_t storage_ix = s->last_bytes_bits_;
> - size_t table_size;
> - int* table;
> -
> - if (delta == 0 && !is_last) {
> - /* We have no new input data and we don't have to finish the stream, so
> - nothing to do. */
> - *out_size = 0;
> - return BROTLI_TRUE;
> - }
> - storage = GetBrotliStorage(s, 2 * bytes + 503);
> - if (BROTLI_IS_OOM(m)) return BROTLI_FALSE;
> - storage[0] = (uint8_t)s->last_bytes_;
> - storage[1] = (uint8_t)(s->last_bytes_ >> 8);
> - table = GetHashTable(s, s->params.quality, bytes, &table_size);
> - if (BROTLI_IS_OOM(m)) return BROTLI_FALSE;
> - if (s->params.quality == FAST_ONE_PASS_COMPRESSION_QUALITY) {
> - BrotliCompressFragmentFast(
> - m, &data[wrapped_last_processed_pos & mask],
> - bytes, is_last,
> - table, table_size,
> - s->cmd_depths_, s->cmd_bits_,
> - &s->cmd_code_numbits_, s->cmd_code_,
> - &storage_ix, storage);
> - if (BROTLI_IS_OOM(m)) return BROTLI_FALSE;
> - } else {
> - BrotliCompressFragmentTwoPass(
> - m, &data[wrapped_last_processed_pos & mask],
> - bytes, is_last,
> - s->command_buf_, s->literal_buf_,
> - table, table_size,
> - &storage_ix, storage);
> - if (BROTLI_IS_OOM(m)) return BROTLI_FALSE;
> - }
> - s->last_bytes_ = (uint16_t)(storage[storage_ix >> 3]);
> - s->last_bytes_bits_ = storage_ix & 7u;
> - UpdateLastProcessedPos(s);
> - *output = &storage[0];
> - *out_size = storage_ix >> 3;
> - return BROTLI_TRUE;
> - }
> -
> - {
> - /* Theoretical max number of commands is 1 per 2 bytes. */
> - size_t newsize = s->num_commands_ + bytes / 2 + 1;
> - if (newsize > s->cmd_alloc_size_) {
> - Command* new_commands;
> - /* Reserve a bit more memory to allow merging with a next block
> - without reallocation: that would impact speed. */
> - newsize += (bytes / 4) + 16;
> - s->cmd_alloc_size_ = newsize;
> - new_commands = BROTLI_ALLOC(m, Command, newsize);
> - if (BROTLI_IS_OOM(m)) return BROTLI_FALSE;
> - if (s->commands_) {
> - memcpy(new_commands, s->commands_, sizeof(Command) * s-
> >num_commands_);
> - BROTLI_FREE(m, s->commands_);
> - }
> - s->commands_ = new_commands;
> - }
> - }
> -
> - InitOrStitchToPreviousBlock(m, &s->hasher_, data, mask, &s->params,
> - wrapped_last_processed_pos, bytes, is_last);
> -
> - literal_context_mode = ChooseContextMode(
> - &s->params, data, WrapPosition(s->last_flush_pos_),
> - mask, (size_t)(s->input_pos_ - s->last_flush_pos_));
> -
> - if (BROTLI_IS_OOM(m)) return BROTLI_FALSE;
> -
> - if (s->num_commands_ && s->last_insert_len_ == 0) {
> - ExtendLastCommand(s, &bytes, &wrapped_last_processed_pos);
> - }
> -
> - if (s->params.quality == ZOPFLIFICATION_QUALITY) {
> - BROTLI_DCHECK(s->params.hasher.type == 10);
> - BrotliCreateZopfliBackwardReferences(m,
> - bytes, wrapped_last_processed_pos,
> - data, mask, &s->params, s->hasher_, s->dist_cache_,
> - &s->last_insert_len_, &s->commands_[s->num_commands_],
> - &s->num_commands_, &s->num_literals_);
> - if (BROTLI_IS_OOM(m)) return BROTLI_FALSE;
> - } else if (s->params.quality == HQ_ZOPFLIFICATION_QUALITY) {
> - BROTLI_DCHECK(s->params.hasher.type == 10);
> - BrotliCreateHqZopfliBackwardReferences(m,
> - bytes, wrapped_last_processed_pos,
> - data, mask, &s->params, s->hasher_, s->dist_cache_,
> - &s->last_insert_len_, &s->commands_[s->num_commands_],
> - &s->num_commands_, &s->num_literals_);
> - if (BROTLI_IS_OOM(m)) return BROTLI_FALSE;
> - } else {
> - BrotliCreateBackwardReferences(
> - bytes, wrapped_last_processed_pos,
> - data, mask, &s->params, s->hasher_, s->dist_cache_,
> - &s->last_insert_len_, &s->commands_[s->num_commands_],
> - &s->num_commands_, &s->num_literals_);
> - }
> -
> - {
> - const size_t max_length = MaxMetablockSize(&s->params);
> - const size_t max_literals = max_length / 8;
> - const size_t max_commands = max_length / 8;
> - const size_t processed_bytes = (size_t)(s->input_pos_ - s-
> >last_flush_pos_);
> - /* If maximal possible additional block doesn't fit metablock, flush now. */
> - /* TODO: Postpone decision until next block arrives? */
> - const BROTLI_BOOL next_input_fits_metablock = TO_BROTLI_BOOL(
> - processed_bytes + InputBlockSize(s) <= max_length);
> - /* If block splitting is not used, then flush as soon as there is some
> - amount of commands / literals produced. */
> - const BROTLI_BOOL should_flush = TO_BROTLI_BOOL(
> - s->params.quality < MIN_QUALITY_FOR_BLOCK_SPLIT &&
> - s->num_literals_ + s->num_commands_ >=
> MAX_NUM_DELAYED_SYMBOLS);
> - if (!is_last && !force_flush && !should_flush &&
> - next_input_fits_metablock &&
> - s->num_literals_ < max_literals &&
> - s->num_commands_ < max_commands) {
> - /* Merge with next input block. Everything will happen later. */
> - if (UpdateLastProcessedPos(s)) {
> - HasherReset(s->hasher_);
> - }
> - *out_size = 0;
> - return BROTLI_TRUE;
> - }
> - }
> -
> - /* Create the last insert-only command. */
> - if (s->last_insert_len_ > 0) {
> - InitInsertCommand(&s->commands_[s->num_commands_++], s-
> >last_insert_len_);
> - s->num_literals_ += s->last_insert_len_;
> - s->last_insert_len_ = 0;
> - }
> -
> - if (!is_last && s->input_pos_ == s->last_flush_pos_) {
> - /* We have no new input data and we don't have to finish the stream, so
> - nothing to do. */
> - *out_size = 0;
> - return BROTLI_TRUE;
> - }
> - BROTLI_DCHECK(s->input_pos_ >= s->last_flush_pos_);
> - BROTLI_DCHECK(s->input_pos_ > s->last_flush_pos_ || is_last);
> - BROTLI_DCHECK(s->input_pos_ - s->last_flush_pos_ <= 1u << 24);
> - {
> - const uint32_t metablock_size =
> - (uint32_t)(s->input_pos_ - s->last_flush_pos_);
> - uint8_t* storage = GetBrotliStorage(s, 2 * metablock_size + 503);
> - size_t storage_ix = s->last_bytes_bits_;
> - if (BROTLI_IS_OOM(m)) return BROTLI_FALSE;
> - storage[0] = (uint8_t)s->last_bytes_;
> - storage[1] = (uint8_t)(s->last_bytes_ >> 8);
> - WriteMetaBlockInternal(
> - m, data, mask, s->last_flush_pos_, metablock_size, is_last,
> - literal_context_mode, &s->params, s->prev_byte_, s->prev_byte2_,
> - s->num_literals_, s->num_commands_, s->commands_, s-
> >saved_dist_cache_,
> - s->dist_cache_, &storage_ix, storage);
> - if (BROTLI_IS_OOM(m)) return BROTLI_FALSE;
> - s->last_bytes_ = (uint16_t)(storage[storage_ix >> 3]);
> - s->last_bytes_bits_ = storage_ix & 7u;
> - s->last_flush_pos_ = s->input_pos_;
> - if (UpdateLastProcessedPos(s)) {
> - HasherReset(s->hasher_);
> - }
> - if (s->last_flush_pos_ > 0) {
> - s->prev_byte_ = data[((uint32_t)s->last_flush_pos_ - 1) & mask];
> - }
> - if (s->last_flush_pos_ > 1) {
> - s->prev_byte2_ = data[(uint32_t)(s->last_flush_pos_ - 2) & mask];
> - }
> - s->num_commands_ = 0;
> - s->num_literals_ = 0;
> - /* Save the state of the distance cache in case we need to restore it for
> - emitting an uncompressed block. */
> - memcpy(s->saved_dist_cache_, s->dist_cache_, sizeof(s-
> >saved_dist_cache_));
> - *output = &storage[0];
> - *out_size = storage_ix >> 3;
> - return BROTLI_TRUE;
> - }
> -}
> -
> -/* Dumps remaining output bits and metadata header to |header|.
> - Returns number of produced bytes.
> - REQUIRED: |header| should be 8-byte aligned and at least 16 bytes long.
> - REQUIRED: |block_size| <= (1 << 24). */
> -static size_t WriteMetadataHeader(
> - BrotliEncoderState* s, const size_t block_size, uint8_t* header) {
> - size_t storage_ix;
> - storage_ix = s->last_bytes_bits_;
> - header[0] = (uint8_t)s->last_bytes_;
> - header[1] = (uint8_t)(s->last_bytes_ >> 8);
> - s->last_bytes_ = 0;
> - s->last_bytes_bits_ = 0;
> -
> - BrotliWriteBits(1, 0, &storage_ix, header);
> - BrotliWriteBits(2, 3, &storage_ix, header);
> - BrotliWriteBits(1, 0, &storage_ix, header);
> - if (block_size == 0) {
> - BrotliWriteBits(2, 0, &storage_ix, header);
> - } else {
> - uint32_t nbits = (block_size == 1) ? 0 :
> - (Log2FloorNonZero((uint32_t)block_size - 1) + 1);
> - uint32_t nbytes = (nbits + 7) / 8;
> - BrotliWriteBits(2, nbytes, &storage_ix, header);
> - BrotliWriteBits(8 * nbytes, block_size - 1, &storage_ix, header);
> - }
> - return (storage_ix + 7u) >> 3;
> -}
> -
> -static BROTLI_BOOL BrotliCompressBufferQuality10(
> - int lgwin, size_t input_size, const uint8_t* input_buffer,
> - size_t* encoded_size, uint8_t* encoded_buffer) {
> - MemoryManager memory_manager;
> - MemoryManager* m = &memory_manager;
> -
> - const size_t mask = BROTLI_SIZE_MAX >> 1;
> - const size_t max_backward_limit =
> BROTLI_MAX_BACKWARD_LIMIT(lgwin);
> - int dist_cache[4] = { 4, 11, 15, 16 };
> - int saved_dist_cache[4] = { 4, 11, 15, 16 };
> - BROTLI_BOOL ok = BROTLI_TRUE;
> - const size_t max_out_size = *encoded_size;
> - size_t total_out_size = 0;
> - uint16_t last_bytes;
> - uint8_t last_bytes_bits;
> - HasherHandle hasher = NULL;
> -
> - const size_t hasher_eff_size =
> - BROTLI_MIN(size_t, input_size, max_backward_limit +
> BROTLI_WINDOW_GAP);
> -
> - BrotliEncoderParams params;
> -
> - const int lgmetablock = BROTLI_MIN(int, 24, lgwin + 1);
> - size_t max_block_size;
> - const size_t max_metablock_size = (size_t)1 << lgmetablock;
> - const size_t max_literals_per_metablock = max_metablock_size / 8;
> - const size_t max_commands_per_metablock = max_metablock_size / 8;
> - size_t metablock_start = 0;
> - uint8_t prev_byte = 0;
> - uint8_t prev_byte2 = 0;
> -
> - BrotliEncoderInitParams(¶ms);
> - params.quality = 10;
> - params.lgwin = lgwin;
> - if (lgwin > BROTLI_MAX_WINDOW_BITS) {
> - params.large_window = BROTLI_TRUE;
> - }
> - SanitizeParams(¶ms);
> - params.lgblock = ComputeLgBlock(¶ms);
> - ChooseDistanceParams(¶ms);
> - max_block_size = (size_t)1 << params.lgblock;
> -
> - BrotliInitMemoryManager(m, 0, 0, 0);
> -
> - BROTLI_DCHECK(input_size <= mask + 1);
> - EncodeWindowBits(lgwin, params.large_window, &last_bytes,
> &last_bytes_bits);
> - InitOrStitchToPreviousBlock(m, &hasher, input_buffer, mask, ¶ms,
> - 0, hasher_eff_size, BROTLI_TRUE);
> - if (BROTLI_IS_OOM(m)) goto oom;
> -
> - while (ok && metablock_start < input_size) {
> - const size_t metablock_end =
> - BROTLI_MIN(size_t, input_size, metablock_start +
> max_metablock_size);
> - const size_t expected_num_commands =
> - (metablock_end - metablock_start) / 12 + 16;
> - Command* commands = 0;
> - size_t num_commands = 0;
> - size_t last_insert_len = 0;
> - size_t num_literals = 0;
> - size_t metablock_size = 0;
> - size_t cmd_alloc_size = 0;
> - BROTLI_BOOL is_last;
> - uint8_t* storage;
> - size_t storage_ix;
> -
> - ContextType literal_context_mode = ChooseContextMode(¶ms,
> - input_buffer, metablock_start, mask, metablock_end -
> metablock_start);
> -
> - size_t block_start;
> - for (block_start = metablock_start; block_start < metablock_end; ) {
> - size_t block_size =
> - BROTLI_MIN(size_t, metablock_end - block_start, max_block_size);
> - ZopfliNode* nodes = BROTLI_ALLOC(m, ZopfliNode, block_size + 1);
> - size_t path_size;
> - size_t new_cmd_alloc_size;
> - if (BROTLI_IS_OOM(m)) goto oom;
> - BrotliInitZopfliNodes(nodes, block_size + 1);
> - StitchToPreviousBlockH10(hasher, block_size, block_start,
> - input_buffer, mask);
> - path_size = BrotliZopfliComputeShortestPath(m,
> - block_size, block_start, input_buffer, mask, ¶ms,
> - max_backward_limit, dist_cache, hasher, nodes);
> - if (BROTLI_IS_OOM(m)) goto oom;
> - /* We allocate a command buffer in the first iteration of this loop that
> - will be likely big enough for the whole metablock, so that for most
> - inputs we will not have to reallocate in later iterations. We do the
> - allocation here and not before the loop, because if the input is small,
> - this will be allocated after the Zopfli cost model is freed, so this
> - will not increase peak memory usage.
> - TODO: If the first allocation is too small, increase command
> - buffer size exponentially. */
> - new_cmd_alloc_size = BROTLI_MAX(size_t, expected_num_commands,
> - num_commands + path_size + 1);
> - if (cmd_alloc_size != new_cmd_alloc_size) {
> - Command* new_commands = BROTLI_ALLOC(m, Command,
> new_cmd_alloc_size);
> - if (BROTLI_IS_OOM(m)) goto oom;
> - cmd_alloc_size = new_cmd_alloc_size;
> - if (commands) {
> - memcpy(new_commands, commands, sizeof(Command) *
> num_commands);
> - BROTLI_FREE(m, commands);
> - }
> - commands = new_commands;
> - }
> - BrotliZopfliCreateCommands(block_size, block_start,
> max_backward_limit,
> - &nodes[0], dist_cache, &last_insert_len,
> - ¶ms, &commands[num_commands],
> - &num_literals);
> - num_commands += path_size;
> - block_start += block_size;
> - metablock_size += block_size;
> - BROTLI_FREE(m, nodes);
> - if (num_literals > max_literals_per_metablock ||
> - num_commands > max_commands_per_metablock) {
> - break;
> - }
> - }
> -
> - if (last_insert_len > 0) {
> - InitInsertCommand(&commands[num_commands++], last_insert_len);
> - num_literals += last_insert_len;
> - }
> -
> - is_last = TO_BROTLI_BOOL(metablock_start + metablock_size ==
> input_size);
> - storage = NULL;
> - storage_ix = last_bytes_bits;
> -
> - if (metablock_size == 0) {
> - /* Write the ISLAST and ISEMPTY bits. */
> - storage = BROTLI_ALLOC(m, uint8_t, 16);
> - if (BROTLI_IS_OOM(m)) goto oom;
> - storage[0] = (uint8_t)last_bytes;
> - storage[1] = (uint8_t)(last_bytes >> 8);
> - BrotliWriteBits(2, 3, &storage_ix, storage);
> - storage_ix = (storage_ix + 7u) & ~7u;
> - } else if (!ShouldCompress(input_buffer, mask, metablock_start,
> - metablock_size, num_literals, num_commands)) {
> - /* Restore the distance cache, as its last update by
> - CreateBackwardReferences is now unused. */
> - memcpy(dist_cache, saved_dist_cache, 4 * sizeof(dist_cache[0]));
> - storage = BROTLI_ALLOC(m, uint8_t, metablock_size + 16);
> - if (BROTLI_IS_OOM(m)) goto oom;
> - storage[0] = (uint8_t)last_bytes;
> - storage[1] = (uint8_t)(last_bytes >> 8);
> - BrotliStoreUncompressedMetaBlock(is_last, input_buffer,
> - metablock_start, mask, metablock_size,
> - &storage_ix, storage);
> - } else {
> - MetaBlockSplit mb;
> - BrotliEncoderParams block_params = params;
> - InitMetaBlockSplit(&mb);
> - BrotliBuildMetaBlock(m, input_buffer, metablock_start, mask,
> - &block_params,
> - prev_byte, prev_byte2,
> - commands, num_commands,
> - literal_context_mode,
> - &mb);
> - if (BROTLI_IS_OOM(m)) goto oom;
> - {
> - /* The number of distance symbols effectively used for distance
> - histograms. It might be less than distance alphabet size
> - for "Large Window Brotli" (32-bit). */
> - uint32_t num_effective_dist_codes = block_params.dist.alphabet_size;
> - if (num_effective_dist_codes >
> BROTLI_NUM_HISTOGRAM_DISTANCE_SYMBOLS) {
> - num_effective_dist_codes =
> BROTLI_NUM_HISTOGRAM_DISTANCE_SYMBOLS;
> - }
> - BrotliOptimizeHistograms(num_effective_dist_codes, &mb);
> - }
> - storage = BROTLI_ALLOC(m, uint8_t, 2 * metablock_size + 503);
> - if (BROTLI_IS_OOM(m)) goto oom;
> - storage[0] = (uint8_t)last_bytes;
> - storage[1] = (uint8_t)(last_bytes >> 8);
> - BrotliStoreMetaBlock(m, input_buffer, metablock_start, metablock_size,
> - mask, prev_byte, prev_byte2,
> - is_last,
> - &block_params,
> - literal_context_mode,
> - commands, num_commands,
> - &mb,
> - &storage_ix, storage);
> - if (BROTLI_IS_OOM(m)) goto oom;
> - if (metablock_size + 4 < (storage_ix >> 3)) {
> - /* Restore the distance cache and last byte. */
> - memcpy(dist_cache, saved_dist_cache, 4 * sizeof(dist_cache[0]));
> - storage[0] = (uint8_t)last_bytes;
> - storage[1] = (uint8_t)(last_bytes >> 8);
> - storage_ix = last_bytes_bits;
> - BrotliStoreUncompressedMetaBlock(is_last, input_buffer,
> - metablock_start, mask,
> - metablock_size, &storage_ix, storage);
> - }
> - DestroyMetaBlockSplit(m, &mb);
> - }
> - last_bytes = (uint16_t)(storage[storage_ix >> 3]);
> - last_bytes_bits = storage_ix & 7u;
> - metablock_start += metablock_size;
> - if (metablock_start < input_size) {
> - prev_byte = input_buffer[metablock_start - 1];
> - prev_byte2 = input_buffer[metablock_start - 2];
> - }
> - /* Save the state of the distance cache in case we need to restore it for
> - emitting an uncompressed block. */
> - memcpy(saved_dist_cache, dist_cache, 4 * sizeof(dist_cache[0]));
> -
> - {
> - const size_t out_size = storage_ix >> 3;
> - total_out_size += out_size;
> - if (total_out_size <= max_out_size) {
> - memcpy(encoded_buffer, storage, out_size);
> - encoded_buffer += out_size;
> - } else {
> - ok = BROTLI_FALSE;
> - }
> - }
> - BROTLI_FREE(m, storage);
> - BROTLI_FREE(m, commands);
> - }
> -
> - *encoded_size = total_out_size;
> - DestroyHasher(m, &hasher);
> - return ok;
> -
> -oom:
> - BrotliWipeOutMemoryManager(m);
> - return BROTLI_FALSE;
> -}
> -
> -size_t BrotliEncoderMaxCompressedSize(size_t input_size) {
> - /* [window bits / empty metadata] + N * [uncompressed] + [last empty] */
> - size_t num_large_blocks = input_size >> 14;
> - size_t overhead = 2 + (4 * num_large_blocks) + 3 + 1;
> - size_t result = input_size + overhead;
> - if (input_size == 0) return 2;
> - return (result < input_size) ? 0 : result;
> -}
> -
> -/* Wraps data to uncompressed brotli stream with minimal window size.
> - |output| should point at region with at least
> BrotliEncoderMaxCompressedSize
> - addressable bytes.
> - Returns the length of stream. */
> -static size_t MakeUncompressedStream(
> - const uint8_t* input, size_t input_size, uint8_t* output) {
> - size_t size = input_size;
> - size_t result = 0;
> - size_t offset = 0;
> - if (input_size == 0) {
> - output[0] = 6;
> - return 1;
> - }
> - output[result++] = 0x21; /* window bits = 10, is_last = false */
> - output[result++] = 0x03; /* empty metadata, padding */
> - while (size > 0) {
> - uint32_t nibbles = 0;
> - uint32_t chunk_size;
> - uint32_t bits;
> - chunk_size = (size > (1u << 24)) ? (1u << 24) : (uint32_t)size;
> - if (chunk_size > (1u << 16)) nibbles = (chunk_size > (1u << 20)) ? 2 : 1;
> - bits =
> - (nibbles << 1) | ((chunk_size - 1) << 3) | (1u << (19 + 4 * nibbles));
> - output[result++] = (uint8_t)bits;
> - output[result++] = (uint8_t)(bits >> 8);
> - output[result++] = (uint8_t)(bits >> 16);
> - if (nibbles == 2) output[result++] = (uint8_t)(bits >> 24);
> - memcpy(&output[result], &input[offset], chunk_size);
> - result += chunk_size;
> - offset += chunk_size;
> - size -= chunk_size;
> - }
> - output[result++] = 3;
> - return result;
> -}
> -
> -BROTLI_BOOL BrotliEncoderCompress(
> - int quality, int lgwin, BrotliEncoderMode mode, size_t input_size,
> - const uint8_t* input_buffer, size_t* encoded_size,
> - uint8_t* encoded_buffer) {
> - BrotliEncoderState* s;
> - size_t out_size = *encoded_size;
> - const uint8_t* input_start = input_buffer;
> - uint8_t* output_start = encoded_buffer;
> - size_t max_out_size = BrotliEncoderMaxCompressedSize(input_size);
> - if (out_size == 0) {
> - /* Output buffer needs at least one byte. */
> - return BROTLI_FALSE;
> - }
> - if (input_size == 0) {
> - /* Handle the special case of empty input. */
> - *encoded_size = 1;
> - *encoded_buffer = 6;
> - return BROTLI_TRUE;
> - }
> - if (quality == 10) {
> - /* TODO: Implement this direct path for all quality levels. */
> - const int lg_win = BROTLI_MIN(int, BROTLI_LARGE_MAX_WINDOW_BITS,
> - BROTLI_MAX(int, 16, lgwin));
> - int ok = BrotliCompressBufferQuality10(lg_win, input_size, input_buffer,
> - encoded_size, encoded_buffer);
> - if (!ok || (max_out_size && *encoded_size > max_out_size)) {
> - goto fallback;
> - }
> - return BROTLI_TRUE;
> - }
> -
> - s = BrotliEncoderCreateInstance(0, 0, 0);
> - if (!s) {
> - return BROTLI_FALSE;
> - } else {
> - size_t available_in = input_size;
> - const uint8_t* next_in = input_buffer;
> - size_t available_out = *encoded_size;
> - uint8_t* next_out = encoded_buffer;
> - size_t total_out = 0;
> - BROTLI_BOOL result = BROTLI_FALSE;
> - BrotliEncoderSetParameter(s, BROTLI_PARAM_QUALITY,
> (uint32_t)quality);
> - BrotliEncoderSetParameter(s, BROTLI_PARAM_LGWIN, (uint32_t)lgwin);
> - BrotliEncoderSetParameter(s, BROTLI_PARAM_MODE, (uint32_t)mode);
> - BrotliEncoderSetParameter(s, BROTLI_PARAM_SIZE_HINT,
> (uint32_t)input_size);
> - if (lgwin > BROTLI_MAX_WINDOW_BITS) {
> - BrotliEncoderSetParameter(s, BROTLI_PARAM_LARGE_WINDOW,
> BROTLI_TRUE);
> - }
> - result = BrotliEncoderCompressStream(s, BROTLI_OPERATION_FINISH,
> - &available_in, &next_in, &available_out, &next_out, &total_out);
> - if (!BrotliEncoderIsFinished(s)) result = 0;
> - *encoded_size = total_out;
> - BrotliEncoderDestroyInstance(s);
> - if (!result || (max_out_size && *encoded_size > max_out_size)) {
> - goto fallback;
> - }
> - return BROTLI_TRUE;
> - }
> -fallback:
> - *encoded_size = 0;
> - if (!max_out_size) return BROTLI_FALSE;
> - if (out_size >= max_out_size) {
> - *encoded_size =
> - MakeUncompressedStream(input_start, input_size, output_start);
> - return BROTLI_TRUE;
> - }
> - return BROTLI_FALSE;
> -}
> -
> -static void InjectBytePaddingBlock(BrotliEncoderState* s) {
> - uint32_t seal = s->last_bytes_;
> - size_t seal_bits = s->last_bytes_bits_;
> - uint8_t* destination;
> - s->last_bytes_ = 0;
> - s->last_bytes_bits_ = 0;
> - /* is_last = 0, data_nibbles = 11, reserved = 0, meta_nibbles = 00 */
> - seal |= 0x6u << seal_bits;
> - seal_bits += 6;
> - /* If we have already created storage, then append to it.
> - Storage is valid until next block is being compressed. */
> - if (s->next_out_) {
> - destination = s->next_out_ + s->available_out_;
> - } else {
> - destination = s->tiny_buf_.u8;
> - s->next_out_ = destination;
> - }
> - destination[0] = (uint8_t)seal;
> - if (seal_bits > 8) destination[1] = (uint8_t)(seal >> 8);
> - if (seal_bits > 16) destination[2] = (uint8_t)(seal >> 16);
> - s->available_out_ += (seal_bits + 7) >> 3;
> -}
> -
> -/* Injects padding bits or pushes compressed data to output.
> - Returns false if nothing is done. */
> -static BROTLI_BOOL InjectFlushOrPushOutput(BrotliEncoderState* s,
> - size_t* available_out, uint8_t** next_out, size_t* total_out) {
> - if (s->stream_state_ == BROTLI_STREAM_FLUSH_REQUESTED &&
> - s->last_bytes_bits_ != 0) {
> - InjectBytePaddingBlock(s);
> - return BROTLI_TRUE;
> - }
> -
> - if (s->available_out_ != 0 && *available_out != 0) {
> - size_t copy_output_size =
> - BROTLI_MIN(size_t, s->available_out_, *available_out);
> - memcpy(*next_out, s->next_out_, copy_output_size);
> - *next_out += copy_output_size;
> - *available_out -= copy_output_size;
> - s->next_out_ += copy_output_size;
> - s->available_out_ -= copy_output_size;
> - s->total_out_ += copy_output_size;
> - if (total_out) *total_out = s->total_out_;
> - return BROTLI_TRUE;
> - }
> -
> - return BROTLI_FALSE;
> -}
> -
> -static void CheckFlushComplete(BrotliEncoderState* s) {
> - if (s->stream_state_ == BROTLI_STREAM_FLUSH_REQUESTED &&
> - s->available_out_ == 0) {
> - s->stream_state_ = BROTLI_STREAM_PROCESSING;
> - s->next_out_ = 0;
> - }
> -}
> -
> -static BROTLI_BOOL BrotliEncoderCompressStreamFast(
> - BrotliEncoderState* s, BrotliEncoderOperation op, size_t* available_in,
> - const uint8_t** next_in, size_t* available_out, uint8_t** next_out,
> - size_t* total_out) {
> - const size_t block_size_limit = (size_t)1 << s->params.lgwin;
> - const size_t buf_size = BROTLI_MIN(size_t,
> kCompressFragmentTwoPassBlockSize,
> - BROTLI_MIN(size_t, *available_in, block_size_limit));
> - uint32_t* tmp_command_buf = NULL;
> - uint32_t* command_buf = NULL;
> - uint8_t* tmp_literal_buf = NULL;
> - uint8_t* literal_buf = NULL;
> - MemoryManager* m = &s->memory_manager_;
> - if (s->params.quality != FAST_ONE_PASS_COMPRESSION_QUALITY &&
> - s->params.quality != FAST_TWO_PASS_COMPRESSION_QUALITY) {
> - return BROTLI_FALSE;
> - }
> - if (s->params.quality == FAST_TWO_PASS_COMPRESSION_QUALITY) {
> - if (!s->command_buf_ && buf_size ==
> kCompressFragmentTwoPassBlockSize) {
> - s->command_buf_ =
> - BROTLI_ALLOC(m, uint32_t, kCompressFragmentTwoPassBlockSize);
> - s->literal_buf_ =
> - BROTLI_ALLOC(m, uint8_t, kCompressFragmentTwoPassBlockSize);
> - if (BROTLI_IS_OOM(m)) return BROTLI_FALSE;
> - }
> - if (s->command_buf_) {
> - command_buf = s->command_buf_;
> - literal_buf = s->literal_buf_;
> - } else {
> - tmp_command_buf = BROTLI_ALLOC(m, uint32_t, buf_size);
> - tmp_literal_buf = BROTLI_ALLOC(m, uint8_t, buf_size);
> - if (BROTLI_IS_OOM(m)) return BROTLI_FALSE;
> - command_buf = tmp_command_buf;
> - literal_buf = tmp_literal_buf;
> - }
> - }
> -
> - while (BROTLI_TRUE) {
> - if (InjectFlushOrPushOutput(s, available_out, next_out, total_out)) {
> - continue;
> - }
> -
> - /* Compress block only when internal output buffer is empty, stream is
> not
> - finished, there is no pending flush request, and there is either
> - additional input or pending operation. */
> - if (s->available_out_ == 0 &&
> - s->stream_state_ == BROTLI_STREAM_PROCESSING &&
> - (*available_in != 0 || op != BROTLI_OPERATION_PROCESS)) {
> - size_t block_size = BROTLI_MIN(size_t, block_size_limit, *available_in);
> - BROTLI_BOOL is_last =
> - (*available_in == block_size) && (op == BROTLI_OPERATION_FINISH);
> - BROTLI_BOOL force_flush =
> - (*available_in == block_size) && (op == BROTLI_OPERATION_FLUSH);
> - size_t max_out_size = 2 * block_size + 503;
> - BROTLI_BOOL inplace = BROTLI_TRUE;
> - uint8_t* storage = NULL;
> - size_t storage_ix = s->last_bytes_bits_;
> - size_t table_size;
> - int* table;
> -
> - if (force_flush && block_size == 0) {
> - s->stream_state_ = BROTLI_STREAM_FLUSH_REQUESTED;
> - continue;
> - }
> - if (max_out_size <= *available_out) {
> - storage = *next_out;
> - } else {
> - inplace = BROTLI_FALSE;
> - storage = GetBrotliStorage(s, max_out_size);
> - if (BROTLI_IS_OOM(m)) return BROTLI_FALSE;
> - }
> - storage[0] = (uint8_t)s->last_bytes_;
> - storage[1] = (uint8_t)(s->last_bytes_ >> 8);
> - table = GetHashTable(s, s->params.quality, block_size, &table_size);
> - if (BROTLI_IS_OOM(m)) return BROTLI_FALSE;
> -
> - if (s->params.quality == FAST_ONE_PASS_COMPRESSION_QUALITY) {
> - BrotliCompressFragmentFast(m, *next_in, block_size, is_last, table,
> - table_size, s->cmd_depths_, s->cmd_bits_, &s->cmd_code_numbits_,
> - s->cmd_code_, &storage_ix, storage);
> - if (BROTLI_IS_OOM(m)) return BROTLI_FALSE;
> - } else {
> - BrotliCompressFragmentTwoPass(m, *next_in, block_size, is_last,
> - command_buf, literal_buf, table, table_size,
> - &storage_ix, storage);
> - if (BROTLI_IS_OOM(m)) return BROTLI_FALSE;
> - }
> - *next_in += block_size;
> - *available_in -= block_size;
> - if (inplace) {
> - size_t out_bytes = storage_ix >> 3;
> - BROTLI_DCHECK(out_bytes <= *available_out);
> - BROTLI_DCHECK((storage_ix & 7) == 0 || out_bytes < *available_out);
> - *next_out += out_bytes;
> - *available_out -= out_bytes;
> - s->total_out_ += out_bytes;
> - if (total_out) *total_out = s->total_out_;
> - } else {
> - size_t out_bytes = storage_ix >> 3;
> - s->next_out_ = storage;
> - s->available_out_ = out_bytes;
> - }
> - s->last_bytes_ = (uint16_t)(storage[storage_ix >> 3]);
> - s->last_bytes_bits_ = storage_ix & 7u;
> -
> - if (force_flush) s->stream_state_ = BROTLI_STREAM_FLUSH_REQUESTED;
> - if (is_last) s->stream_state_ = BROTLI_STREAM_FINISHED;
> - continue;
> - }
> - break;
> - }
> - BROTLI_FREE(m, tmp_command_buf);
> - BROTLI_FREE(m, tmp_literal_buf);
> - CheckFlushComplete(s);
> - return BROTLI_TRUE;
> -}
> -
> -static BROTLI_BOOL ProcessMetadata(
> - BrotliEncoderState* s, size_t* available_in, const uint8_t** next_in,
> - size_t* available_out, uint8_t** next_out, size_t* total_out) {
> - if (*available_in > (1u << 24)) return BROTLI_FALSE;
> - /* Switch to metadata block workflow, if required. */
> - if (s->stream_state_ == BROTLI_STREAM_PROCESSING) {
> - s->remaining_metadata_bytes_ = (uint32_t)*available_in;
> - s->stream_state_ = BROTLI_STREAM_METADATA_HEAD;
> - }
> - if (s->stream_state_ != BROTLI_STREAM_METADATA_HEAD &&
> - s->stream_state_ != BROTLI_STREAM_METADATA_BODY) {
> - return BROTLI_FALSE;
> - }
> -
> - while (BROTLI_TRUE) {
> - if (InjectFlushOrPushOutput(s, available_out, next_out, total_out)) {
> - continue;
> - }
> - if (s->available_out_ != 0) break;
> -
> - if (s->input_pos_ != s->last_flush_pos_) {
> - BROTLI_BOOL result = EncodeData(s, BROTLI_FALSE, BROTLI_TRUE,
> - &s->available_out_, &s->next_out_);
> - if (!result) return BROTLI_FALSE;
> - continue;
> - }
> -
> - if (s->stream_state_ == BROTLI_STREAM_METADATA_HEAD) {
> - s->next_out_ = s->tiny_buf_.u8;
> - s->available_out_ =
> - WriteMetadataHeader(s, s->remaining_metadata_bytes_, s-
> >next_out_);
> - s->stream_state_ = BROTLI_STREAM_METADATA_BODY;
> - continue;
> - } else {
> - /* Exit workflow only when there is no more input and no more output.
> - Otherwise client may continue producing empty metadata blocks. */
> - if (s->remaining_metadata_bytes_ == 0) {
> - s->remaining_metadata_bytes_ = BROTLI_UINT32_MAX;
> - s->stream_state_ = BROTLI_STREAM_PROCESSING;
> - break;
> - }
> - if (*available_out) {
> - /* Directly copy input to output. */
> - uint32_t copy = (uint32_t)BROTLI_MIN(
> - size_t, s->remaining_metadata_bytes_, *available_out);
> - memcpy(*next_out, *next_in, copy);
> - *next_in += copy;
> - *available_in -= copy;
> - s->remaining_metadata_bytes_ -= copy;
> - *next_out += copy;
> - *available_out -= copy;
> - } else {
> - /* This guarantees progress in "TakeOutput" workflow. */
> - uint32_t copy = BROTLI_MIN(uint32_t, s->remaining_metadata_bytes_,
> 16);
> - s->next_out_ = s->tiny_buf_.u8;
> - memcpy(s->next_out_, *next_in, copy);
> - *next_in += copy;
> - *available_in -= copy;
> - s->remaining_metadata_bytes_ -= copy;
> - s->available_out_ = copy;
> - }
> - continue;
> - }
> - }
> -
> - return BROTLI_TRUE;
> -}
> -
> -static void UpdateSizeHint(BrotliEncoderState* s, size_t available_in) {
> - if (s->params.size_hint == 0) {
> - uint64_t delta = UnprocessedInputSize(s);
> - uint64_t tail = available_in;
> - uint32_t limit = 1u << 30;
> - uint32_t total;
> - if ((delta >= limit) || (tail >= limit) || ((delta + tail) >= limit)) {
> - total = limit;
> - } else {
> - total = (uint32_t)(delta + tail);
> - }
> - s->params.size_hint = total;
> - }
> -}
> -
> -BROTLI_BOOL BrotliEncoderCompressStream(
> - BrotliEncoderState* s, BrotliEncoderOperation op, size_t* available_in,
> - const uint8_t** next_in, size_t* available_out,uint8_t** next_out,
> - size_t* total_out) {
> - if (!EnsureInitialized(s)) return BROTLI_FALSE;
> -
> - /* Unfinished metadata block; check requirements. */
> - if (s->remaining_metadata_bytes_ != BROTLI_UINT32_MAX) {
> - if (*available_in != s->remaining_metadata_bytes_) return BROTLI_FALSE;
> - if (op != BROTLI_OPERATION_EMIT_METADATA) return BROTLI_FALSE;
> - }
> -
> - if (op == BROTLI_OPERATION_EMIT_METADATA) {
> - UpdateSizeHint(s, 0); /* First data metablock might be emitted here. */
> - return ProcessMetadata(
> - s, available_in, next_in, available_out, next_out, total_out);
> - }
> -
> - if (s->stream_state_ == BROTLI_STREAM_METADATA_HEAD ||
> - s->stream_state_ == BROTLI_STREAM_METADATA_BODY) {
> - return BROTLI_FALSE;
> - }
> -
> - if (s->stream_state_ != BROTLI_STREAM_PROCESSING && *available_in !=
> 0) {
> - return BROTLI_FALSE;
> - }
> - if (s->params.quality == FAST_ONE_PASS_COMPRESSION_QUALITY ||
> - s->params.quality == FAST_TWO_PASS_COMPRESSION_QUALITY) {
> - return BrotliEncoderCompressStreamFast(s, op, available_in, next_in,
> - available_out, next_out, total_out);
> - }
> - while (BROTLI_TRUE) {
> - size_t remaining_block_size = RemainingInputBlockSize(s);
> -
> - if (remaining_block_size != 0 && *available_in != 0) {
> - size_t copy_input_size =
> - BROTLI_MIN(size_t, remaining_block_size, *available_in);
> - CopyInputToRingBuffer(s, copy_input_size, *next_in);
> - *next_in += copy_input_size;
> - *available_in -= copy_input_size;
> - continue;
> - }
> -
> - if (InjectFlushOrPushOutput(s, available_out, next_out, total_out)) {
> - continue;
> - }
> -
> - /* Compress data only when internal output buffer is empty, stream is not
> - finished and there is no pending flush request. */
> - if (s->available_out_ == 0 &&
> - s->stream_state_ == BROTLI_STREAM_PROCESSING) {
> - if (remaining_block_size == 0 || op != BROTLI_OPERATION_PROCESS) {
> - BROTLI_BOOL is_last = TO_BROTLI_BOOL(
> - (*available_in == 0) && op == BROTLI_OPERATION_FINISH);
> - BROTLI_BOOL force_flush = TO_BROTLI_BOOL(
> - (*available_in == 0) && op == BROTLI_OPERATION_FLUSH);
> - BROTLI_BOOL result;
> - UpdateSizeHint(s, *available_in);
> - result = EncodeData(s, is_last, force_flush,
> - &s->available_out_, &s->next_out_);
> - if (!result) return BROTLI_FALSE;
> - if (force_flush) s->stream_state_ =
> BROTLI_STREAM_FLUSH_REQUESTED;
> - if (is_last) s->stream_state_ = BROTLI_STREAM_FINISHED;
> - continue;
> - }
> - }
> - break;
> - }
> - CheckFlushComplete(s);
> - return BROTLI_TRUE;
> -}
> -
> -BROTLI_BOOL BrotliEncoderIsFinished(BrotliEncoderState* s) {
> - return TO_BROTLI_BOOL(s->stream_state_ == BROTLI_STREAM_FINISHED
> &&
> - !BrotliEncoderHasMoreOutput(s));
> -}
> -
> -BROTLI_BOOL BrotliEncoderHasMoreOutput(BrotliEncoderState* s) {
> - return TO_BROTLI_BOOL(s->available_out_ != 0);
> -}
> -
> -const uint8_t* BrotliEncoderTakeOutput(BrotliEncoderState* s, size_t* size)
> {
> - size_t consumed_size = s->available_out_;
> - uint8_t* result = s->next_out_;
> - if (*size) {
> - consumed_size = BROTLI_MIN(size_t, *size, s->available_out_);
> - }
> - if (consumed_size) {
> - s->next_out_ += consumed_size;
> - s->available_out_ -= consumed_size;
> - s->total_out_ += consumed_size;
> - CheckFlushComplete(s);
> - *size = consumed_size;
> - } else {
> - *size = 0;
> - result = 0;
> - }
> - return result;
> -}
> -
> -uint32_t BrotliEncoderVersion(void) {
> - return BROTLI_VERSION;
> -}
> -
> -#if defined(__cplusplus) || defined(c_plusplus)
> -} /* extern "C" */
> -#endif
> diff --git a/BaseTools/Source/C/BrotliCompress/enc/encoder_dict.c
> b/BaseTools/Source/C/BrotliCompress/enc/encoder_dict.c
> deleted file mode 100644
> index 956d50c0b578..000000000000
> --- a/BaseTools/Source/C/BrotliCompress/enc/encoder_dict.c
> +++ /dev/null
> @@ -1,32 +0,0 @@
> -/* Copyright 2017 Google Inc. All Rights Reserved.
> -
> - Distributed under MIT license.
> - See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
> -*/
> -
> -#include "./encoder_dict.h"
> -
> -#include "../common/dictionary.h"
> -#include "../common/transform.h"
> -#include "./dictionary_hash.h"
> -#include "./hash.h"
> -
> -#if defined(__cplusplus) || defined(c_plusplus)
> -extern "C" {
> -#endif
> -
> -void BrotliInitEncoderDictionary(BrotliEncoderDictionary* dict) {
> - dict->words = BrotliGetDictionary();
> -
> - dict->hash_table = kStaticDictionaryHash;
> - dict->buckets = kStaticDictionaryBuckets;
> - dict->dict_words = kStaticDictionaryWords;
> -
> - dict->cutoffTransformsCount = kCutoffTransformsCount;
> - dict->cutoffTransforms = kCutoffTransforms;
> -
> -}
> -
> -#if defined(__cplusplus) || defined(c_plusplus)
> -} /* extern "C" */
> -#endif
> diff --git a/BaseTools/Source/C/BrotliCompress/enc/entropy_encode.c
> b/BaseTools/Source/C/BrotliCompress/enc/entropy_encode.c
> deleted file mode 100644
> index e3f0d2edaabe..000000000000
> --- a/BaseTools/Source/C/BrotliCompress/enc/entropy_encode.c
> +++ /dev/null
> @@ -1,501 +0,0 @@
> -/* Copyright 2010 Google Inc. All Rights Reserved.
> -
> - Distributed under MIT license.
> - See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
> -*/
> -
> -/* Entropy encoding (Huffman) utilities. */
> -
> -#include "./entropy_encode.h"
> -
> -#include <string.h> /* memset */
> -
> -#include "../common/constants.h"
> -#include "../common/platform.h"
> -#include <brotli/types.h>
> -
> -#if defined(__cplusplus) || defined(c_plusplus)
> -extern "C" {
> -#endif
> -
> -BROTLI_BOOL BrotliSetDepth(
> - int p0, HuffmanTree* pool, uint8_t* depth, int max_depth) {
> - int stack[16];
> - int level = 0;
> - int p = p0;
> - BROTLI_DCHECK(max_depth <= 15);
> - stack[0] = -1;
> - while (BROTLI_TRUE) {
> - if (pool[p].index_left_ >= 0) {
> - level++;
> - if (level > max_depth) return BROTLI_FALSE;
> - stack[level] = pool[p].index_right_or_value_;
> - p = pool[p].index_left_;
> - continue;
> - } else {
> - depth[pool[p].index_right_or_value_] = (uint8_t)level;
> - }
> - while (level >= 0 && stack[level] == -1) level--;
> - if (level < 0) return BROTLI_TRUE;
> - p = stack[level];
> - stack[level] = -1;
> - }
> -}
> -
> -/* Sort the root nodes, least popular first. */
> -static BROTLI_INLINE BROTLI_BOOL SortHuffmanTree(
> - const HuffmanTree* v0, const HuffmanTree* v1) {
> - if (v0->total_count_ != v1->total_count_) {
> - return TO_BROTLI_BOOL(v0->total_count_ < v1->total_count_);
> - }
> - return TO_BROTLI_BOOL(v0->index_right_or_value_ > v1-
> >index_right_or_value_);
> -}
> -
> -/* This function will create a Huffman tree.
> -
> - The catch here is that the tree cannot be arbitrarily deep.
> - Brotli specifies a maximum depth of 15 bits for "code trees"
> - and 7 bits for "code length code trees."
> -
> - count_limit is the value that is to be faked as the minimum value
> - and this minimum value is raised until the tree matches the
> - maximum length requirement.
> -
> - This algorithm is not of excellent performance for very long data blocks,
> - especially when population counts are longer than 2**tree_limit, but
> - we are not planning to use this with extremely long blocks.
> -
> - See http://en.wikipedia.org/wiki/Huffman_coding */
> -void BrotliCreateHuffmanTree(const uint32_t* data,
> - const size_t length,
> - const int tree_limit,
> - HuffmanTree* tree,
> - uint8_t* depth) {
> - uint32_t count_limit;
> - HuffmanTree sentinel;
> - InitHuffmanTree(&sentinel, BROTLI_UINT32_MAX, -1, -1);
> - /* For block sizes below 64 kB, we never need to do a second iteration
> - of this loop. Probably all of our block sizes will be smaller than
> - that, so this loop is mostly of academic interest. If we actually
> - would need this, we would be better off with the Katajainen algorithm.
> */
> - for (count_limit = 1; ; count_limit *= 2) {
> - size_t n = 0;
> - size_t i;
> - size_t j;
> - size_t k;
> - for (i = length; i != 0;) {
> - --i;
> - if (data[i]) {
> - const uint32_t count = BROTLI_MAX(uint32_t, data[i], count_limit);
> - InitHuffmanTree(&tree[n++], count, -1, (int16_t)i);
> - }
> - }
> -
> - if (n == 1) {
> - depth[tree[0].index_right_or_value_] = 1; /* Only one element. */
> - break;
> - }
> -
> - SortHuffmanTreeItems(tree, n, SortHuffmanTree);
> -
> - /* The nodes are:
> - [0, n): the sorted leaf nodes that we start with.
> - [n]: we add a sentinel here.
> - [n + 1, 2n): new parent nodes are added here, starting from
> - (n+1). These are naturally in ascending order.
> - [2n]: we add a sentinel at the end as well.
> - There will be (2n+1) elements at the end. */
> - tree[n] = sentinel;
> - tree[n + 1] = sentinel;
> -
> - i = 0; /* Points to the next leaf node. */
> - j = n + 1; /* Points to the next non-leaf node. */
> - for (k = n - 1; k != 0; --k) {
> - size_t left, right;
> - if (tree[i].total_count_ <= tree[j].total_count_) {
> - left = i;
> - ++i;
> - } else {
> - left = j;
> - ++j;
> - }
> - if (tree[i].total_count_ <= tree[j].total_count_) {
> - right = i;
> - ++i;
> - } else {
> - right = j;
> - ++j;
> - }
> -
> - {
> - /* The sentinel node becomes the parent node. */
> - size_t j_end = 2 * n - k;
> - tree[j_end].total_count_ =
> - tree[left].total_count_ + tree[right].total_count_;
> - tree[j_end].index_left_ = (int16_t)left;
> - tree[j_end].index_right_or_value_ = (int16_t)right;
> -
> - /* Add back the last sentinel node. */
> - tree[j_end + 1] = sentinel;
> - }
> - }
> - if (BrotliSetDepth((int)(2 * n - 1), &tree[0], depth, tree_limit)) {
> - /* We need to pack the Huffman tree in tree_limit bits. If this was not
> - successful, add fake entities to the lowest values and retry. */
> - break;
> - }
> - }
> -}
> -
> -static void Reverse(uint8_t* v, size_t start, size_t end) {
> - --end;
> - while (start < end) {
> - uint8_t tmp = v[start];
> - v[start] = v[end];
> - v[end] = tmp;
> - ++start;
> - --end;
> - }
> -}
> -
> -static void BrotliWriteHuffmanTreeRepetitions(
> - const uint8_t previous_value,
> - const uint8_t value,
> - size_t repetitions,
> - size_t* tree_size,
> - uint8_t* tree,
> - uint8_t* extra_bits_data) {
> - BROTLI_DCHECK(repetitions > 0);
> - if (previous_value != value) {
> - tree[*tree_size] = value;
> - extra_bits_data[*tree_size] = 0;
> - ++(*tree_size);
> - --repetitions;
> - }
> - if (repetitions == 7) {
> - tree[*tree_size] = value;
> - extra_bits_data[*tree_size] = 0;
> - ++(*tree_size);
> - --repetitions;
> - }
> - if (repetitions < 3) {
> - size_t i;
> - for (i = 0; i < repetitions; ++i) {
> - tree[*tree_size] = value;
> - extra_bits_data[*tree_size] = 0;
> - ++(*tree_size);
> - }
> - } else {
> - size_t start = *tree_size;
> - repetitions -= 3;
> - while (BROTLI_TRUE) {
> - tree[*tree_size] = BROTLI_REPEAT_PREVIOUS_CODE_LENGTH;
> - extra_bits_data[*tree_size] = repetitions & 0x3;
> - ++(*tree_size);
> - repetitions >>= 2;
> - if (repetitions == 0) {
> - break;
> - }
> - --repetitions;
> - }
> - Reverse(tree, start, *tree_size);
> - Reverse(extra_bits_data, start, *tree_size);
> - }
> -}
> -
> -static void BrotliWriteHuffmanTreeRepetitionsZeros(
> - size_t repetitions,
> - size_t* tree_size,
> - uint8_t* tree,
> - uint8_t* extra_bits_data) {
> - if (repetitions == 11) {
> - tree[*tree_size] = 0;
> - extra_bits_data[*tree_size] = 0;
> - ++(*tree_size);
> - --repetitions;
> - }
> - if (repetitions < 3) {
> - size_t i;
> - for (i = 0; i < repetitions; ++i) {
> - tree[*tree_size] = 0;
> - extra_bits_data[*tree_size] = 0;
> - ++(*tree_size);
> - }
> - } else {
> - size_t start = *tree_size;
> - repetitions -= 3;
> - while (BROTLI_TRUE) {
> - tree[*tree_size] = BROTLI_REPEAT_ZERO_CODE_LENGTH;
> - extra_bits_data[*tree_size] = repetitions & 0x7;
> - ++(*tree_size);
> - repetitions >>= 3;
> - if (repetitions == 0) {
> - break;
> - }
> - --repetitions;
> - }
> - Reverse(tree, start, *tree_size);
> - Reverse(extra_bits_data, start, *tree_size);
> - }
> -}
> -
> -void BrotliOptimizeHuffmanCountsForRle(size_t length, uint32_t* counts,
> - uint8_t* good_for_rle) {
> - size_t nonzero_count = 0;
> - size_t stride;
> - size_t limit;
> - size_t sum;
> - const size_t streak_limit = 1240;
> - /* Let's make the Huffman code more compatible with RLE encoding. */
> - size_t i;
> - for (i = 0; i < length; i++) {
> - if (counts[i]) {
> - ++nonzero_count;
> - }
> - }
> - if (nonzero_count < 16) {
> - return;
> - }
> - while (length != 0 && counts[length - 1] == 0) {
> - --length;
> - }
> - if (length == 0) {
> - return; /* All zeros. */
> - }
> - /* Now counts[0..length - 1] does not have trailing zeros. */
> - {
> - size_t nonzeros = 0;
> - uint32_t smallest_nonzero = 1 << 30;
> - for (i = 0; i < length; ++i) {
> - if (counts[i] != 0) {
> - ++nonzeros;
> - if (smallest_nonzero > counts[i]) {
> - smallest_nonzero = counts[i];
> - }
> - }
> - }
> - if (nonzeros < 5) {
> - /* Small histogram will model it well. */
> - return;
> - }
> - if (smallest_nonzero < 4) {
> - size_t zeros = length - nonzeros;
> - if (zeros < 6) {
> - for (i = 1; i < length - 1; ++i) {
> - if (counts[i - 1] != 0 && counts[i] == 0 && counts[i + 1] != 0) {
> - counts[i] = 1;
> - }
> - }
> - }
> - }
> - if (nonzeros < 28) {
> - return;
> - }
> - }
> - /* 2) Let's mark all population counts that already can be encoded
> - with an RLE code. */
> - memset(good_for_rle, 0, length);
> - {
> - /* Let's not spoil any of the existing good RLE codes.
> - Mark any seq of 0's that is longer as 5 as a good_for_rle.
> - Mark any seq of non-0's that is longer as 7 as a good_for_rle. */
> - uint32_t symbol = counts[0];
> - size_t step = 0;
> - for (i = 0; i <= length; ++i) {
> - if (i == length || counts[i] != symbol) {
> - if ((symbol == 0 && step >= 5) ||
> - (symbol != 0 && step >= 7)) {
> - size_t k;
> - for (k = 0; k < step; ++k) {
> - good_for_rle[i - k - 1] = 1;
> - }
> - }
> - step = 1;
> - if (i != length) {
> - symbol = counts[i];
> - }
> - } else {
> - ++step;
> - }
> - }
> - }
> - /* 3) Let's replace those population counts that lead to more RLE codes.
> - Math here is in 24.8 fixed point representation. */
> - stride = 0;
> - limit = 256 * (counts[0] + counts[1] + counts[2]) / 3 + 420;
> - sum = 0;
> - for (i = 0; i <= length; ++i) {
> - if (i == length || good_for_rle[i] ||
> - (i != 0 && good_for_rle[i - 1]) ||
> - (256 * counts[i] - limit + streak_limit) >= 2 * streak_limit) {
> - if (stride >= 4 || (stride >= 3 && sum == 0)) {
> - size_t k;
> - /* The stride must end, collapse what we have, if we have enough (4).
> */
> - size_t count = (sum + stride / 2) / stride;
> - if (count == 0) {
> - count = 1;
> - }
> - if (sum == 0) {
> - /* Don't make an all zeros stride to be upgraded to ones. */
> - count = 0;
> - }
> - for (k = 0; k < stride; ++k) {
> - /* We don't want to change value at counts[i],
> - that is already belonging to the next stride. Thus - 1. */
> - counts[i - k - 1] = (uint32_t)count;
> - }
> - }
> - stride = 0;
> - sum = 0;
> - if (i < length - 2) {
> - /* All interesting strides have a count of at least 4, */
> - /* at least when non-zeros. */
> - limit = 256 * (counts[i] + counts[i + 1] + counts[i + 2]) / 3 + 420;
> - } else if (i < length) {
> - limit = 256 * counts[i];
> - } else {
> - limit = 0;
> - }
> - }
> - ++stride;
> - if (i != length) {
> - sum += counts[i];
> - if (stride >= 4) {
> - limit = (256 * sum + stride / 2) / stride;
> - }
> - if (stride == 4) {
> - limit += 120;
> - }
> - }
> - }
> -}
> -
> -static void DecideOverRleUse(const uint8_t* depth, const size_t length,
> - BROTLI_BOOL* use_rle_for_non_zero,
> - BROTLI_BOOL* use_rle_for_zero) {
> - size_t total_reps_zero = 0;
> - size_t total_reps_non_zero = 0;
> - size_t count_reps_zero = 1;
> - size_t count_reps_non_zero = 1;
> - size_t i;
> - for (i = 0; i < length;) {
> - const uint8_t value = depth[i];
> - size_t reps = 1;
> - size_t k;
> - for (k = i + 1; k < length && depth[k] == value; ++k) {
> - ++reps;
> - }
> - if (reps >= 3 && value == 0) {
> - total_reps_zero += reps;
> - ++count_reps_zero;
> - }
> - if (reps >= 4 && value != 0) {
> - total_reps_non_zero += reps;
> - ++count_reps_non_zero;
> - }
> - i += reps;
> - }
> - *use_rle_for_non_zero =
> - TO_BROTLI_BOOL(total_reps_non_zero > count_reps_non_zero * 2);
> - *use_rle_for_zero = TO_BROTLI_BOOL(total_reps_zero >
> count_reps_zero * 2);
> -}
> -
> -void BrotliWriteHuffmanTree(const uint8_t* depth,
> - size_t length,
> - size_t* tree_size,
> - uint8_t* tree,
> - uint8_t* extra_bits_data) {
> - uint8_t previous_value = BROTLI_INITIAL_REPEATED_CODE_LENGTH;
> - size_t i;
> - BROTLI_BOOL use_rle_for_non_zero = BROTLI_FALSE;
> - BROTLI_BOOL use_rle_for_zero = BROTLI_FALSE;
> -
> - /* Throw away trailing zeros. */
> - size_t new_length = length;
> - for (i = 0; i < length; ++i) {
> - if (depth[length - i - 1] == 0) {
> - --new_length;
> - } else {
> - break;
> - }
> - }
> -
> - /* First gather statistics on if it is a good idea to do RLE. */
> - if (length > 50) {
> - /* Find RLE coding for longer codes.
> - Shorter codes seem not to benefit from RLE. */
> - DecideOverRleUse(depth, new_length,
> - &use_rle_for_non_zero, &use_rle_for_zero);
> - }
> -
> - /* Actual RLE coding. */
> - for (i = 0; i < new_length;) {
> - const uint8_t value = depth[i];
> - size_t reps = 1;
> - if ((value != 0 && use_rle_for_non_zero) ||
> - (value == 0 && use_rle_for_zero)) {
> - size_t k;
> - for (k = i + 1; k < new_length && depth[k] == value; ++k) {
> - ++reps;
> - }
> - }
> - if (value == 0) {
> - BrotliWriteHuffmanTreeRepetitionsZeros(
> - reps, tree_size, tree, extra_bits_data);
> - } else {
> - BrotliWriteHuffmanTreeRepetitions(previous_value,
> - value, reps, tree_size,
> - tree, extra_bits_data);
> - previous_value = value;
> - }
> - i += reps;
> - }
> -}
> -
> -static uint16_t BrotliReverseBits(size_t num_bits, uint16_t bits) {
> - static const size_t kLut[16] = { /* Pre-reversed 4-bit values. */
> - 0x00, 0x08, 0x04, 0x0C, 0x02, 0x0A, 0x06, 0x0E,
> - 0x01, 0x09, 0x05, 0x0D, 0x03, 0x0B, 0x07, 0x0F
> - };
> - size_t retval = kLut[bits & 0x0F];
> - size_t i;
> - for (i = 4; i < num_bits; i += 4) {
> - retval <<= 4;
> - bits = (uint16_t)(bits >> 4);
> - retval |= kLut[bits & 0x0F];
> - }
> - retval >>= ((0 - num_bits) & 0x03);
> - return (uint16_t)retval;
> -}
> -
> -/* 0..15 are values for bits */
> -#define MAX_HUFFMAN_BITS 16
> -
> -void BrotliConvertBitDepthsToSymbols(const uint8_t* depth,
> - size_t len,
> - uint16_t* bits) {
> - /* In Brotli, all bit depths are [1..15]
> - 0 bit depth means that the symbol does not exist. */
> - uint16_t bl_count[MAX_HUFFMAN_BITS] = { 0 };
> - uint16_t next_code[MAX_HUFFMAN_BITS];
> - size_t i;
> - int code = 0;
> - for (i = 0; i < len; ++i) {
> - ++bl_count[depth[i]];
> - }
> - bl_count[0] = 0;
> - next_code[0] = 0;
> - for (i = 1; i < MAX_HUFFMAN_BITS; ++i) {
> - code = (code + bl_count[i - 1]) << 1;
> - next_code[i] = (uint16_t)code;
> - }
> - for (i = 0; i < len; ++i) {
> - if (depth[i]) {
> - bits[i] = BrotliReverseBits(depth[i], next_code[depth[i]]++);
> - }
> - }
> -}
> -
> -#if defined(__cplusplus) || defined(c_plusplus)
> -} /* extern "C" */
> -#endif
> diff --git a/BaseTools/Source/C/BrotliCompress/enc/histogram.c
> b/BaseTools/Source/C/BrotliCompress/enc/histogram.c
> deleted file mode 100644
> index d3bfa3a79a80..000000000000
> --- a/BaseTools/Source/C/BrotliCompress/enc/histogram.c
> +++ /dev/null
> @@ -1,100 +0,0 @@
> -/* Copyright 2013 Google Inc. All Rights Reserved.
> -
> - Distributed under MIT license.
> - See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
> -*/
> -
> -/* Build per-context histograms of literals, commands and distance codes.
> */
> -
> -#include "./histogram.h"
> -
> -#include "../common/context.h"
> -#include "./block_splitter.h"
> -#include "./command.h"
> -
> -#if defined(__cplusplus) || defined(c_plusplus)
> -extern "C" {
> -#endif
> -
> -typedef struct BlockSplitIterator {
> - const BlockSplit* split_; /* Not owned. */
> - size_t idx_;
> - size_t type_;
> - size_t length_;
> -} BlockSplitIterator;
> -
> -static void InitBlockSplitIterator(BlockSplitIterator* self,
> - const BlockSplit* split) {
> - self->split_ = split;
> - self->idx_ = 0;
> - self->type_ = 0;
> - self->length_ = split->lengths ? split->lengths[0] : 0;
> -}
> -
> -static void BlockSplitIteratorNext(BlockSplitIterator* self) {
> - if (self->length_ == 0) {
> - ++self->idx_;
> - self->type_ = self->split_->types[self->idx_];
> - self->length_ = self->split_->lengths[self->idx_];
> - }
> - --self->length_;
> -}
> -
> -void BrotliBuildHistogramsWithContext(
> - const Command* cmds, const size_t num_commands,
> - const BlockSplit* literal_split, const BlockSplit* insert_and_copy_split,
> - const BlockSplit* dist_split, const uint8_t* ringbuffer, size_t start_pos,
> - size_t mask, uint8_t prev_byte, uint8_t prev_byte2,
> - const ContextType* context_modes, HistogramLiteral* literal_histograms,
> - HistogramCommand* insert_and_copy_histograms,
> - HistogramDistance* copy_dist_histograms) {
> - size_t pos = start_pos;
> - BlockSplitIterator literal_it;
> - BlockSplitIterator insert_and_copy_it;
> - BlockSplitIterator dist_it;
> - size_t i;
> -
> - InitBlockSplitIterator(&literal_it, literal_split);
> - InitBlockSplitIterator(&insert_and_copy_it, insert_and_copy_split);
> - InitBlockSplitIterator(&dist_it, dist_split);
> - for (i = 0; i < num_commands; ++i) {
> - const Command* cmd = &cmds[i];
> - size_t j;
> - BlockSplitIteratorNext(&insert_and_copy_it);
> -
> HistogramAddCommand(&insert_and_copy_histograms[insert_and_copy_it
> .type_],
> - cmd->cmd_prefix_);
> - /* TODO: unwrap iterator blocks. */
> - for (j = cmd->insert_len_; j != 0; --j) {
> - size_t context;
> - BlockSplitIteratorNext(&literal_it);
> - context = literal_it.type_;
> - if (context_modes) {
> - ContextLut lut = BROTLI_CONTEXT_LUT(context_modes[context]);
> - context = (context << BROTLI_LITERAL_CONTEXT_BITS) +
> - BROTLI_CONTEXT(prev_byte, prev_byte2, lut);
> - }
> - HistogramAddLiteral(&literal_histograms[context],
> - ringbuffer[pos & mask]);
> - prev_byte2 = prev_byte;
> - prev_byte = ringbuffer[pos & mask];
> - ++pos;
> - }
> - pos += CommandCopyLen(cmd);
> - if (CommandCopyLen(cmd)) {
> - prev_byte2 = ringbuffer[(pos - 2) & mask];
> - prev_byte = ringbuffer[(pos - 1) & mask];
> - if (cmd->cmd_prefix_ >= 128) {
> - size_t context;
> - BlockSplitIteratorNext(&dist_it);
> - context = (dist_it.type_ << BROTLI_DISTANCE_CONTEXT_BITS) +
> - CommandDistanceContext(cmd);
> - HistogramAddDistance(©_dist_histograms[context],
> - cmd->dist_prefix_ & 0x3FF);
> - }
> - }
> - }
> -}
> -
> -#if defined(__cplusplus) || defined(c_plusplus)
> -} /* extern "C" */
> -#endif
> diff --git a/BaseTools/Source/C/BrotliCompress/enc/literal_cost.c
> b/BaseTools/Source/C/BrotliCompress/enc/literal_cost.c
> deleted file mode 100644
> index de780dcc99b0..000000000000
> --- a/BaseTools/Source/C/BrotliCompress/enc/literal_cost.c
> +++ /dev/null
> @@ -1,175 +0,0 @@
> -/* Copyright 2013 Google Inc. All Rights Reserved.
> -
> - Distributed under MIT license.
> - See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
> -*/
> -
> -/* Literal cost model to allow backward reference replacement to be
> efficient.
> -*/
> -
> -#include "./literal_cost.h"
> -
> -#include "../common/platform.h"
> -#include <brotli/types.h>
> -#include "./fast_log.h"
> -#include "./utf8_util.h"
> -
> -#if defined(__cplusplus) || defined(c_plusplus)
> -extern "C" {
> -#endif
> -
> -static size_t UTF8Position(size_t last, size_t c, size_t clamp) {
> - if (c < 128) {
> - return 0; /* Next one is the 'Byte 1' again. */
> - } else if (c >= 192) { /* Next one is the 'Byte 2' of utf-8 encoding. */
> - return BROTLI_MIN(size_t, 1, clamp);
> - } else {
> - /* Let's decide over the last byte if this ends the sequence. */
> - if (last < 0xE0) {
> - return 0; /* Completed two or three byte coding. */
> - } else { /* Next one is the 'Byte 3' of utf-8 encoding. */
> - return BROTLI_MIN(size_t, 2, clamp);
> - }
> - }
> -}
> -
> -static size_t DecideMultiByteStatsLevel(size_t pos, size_t len, size_t mask,
> - const uint8_t* data) {
> - size_t counts[3] = { 0 };
> - size_t max_utf8 = 1; /* should be 2, but 1 compresses better. */
> - size_t last_c = 0;
> - size_t i;
> - for (i = 0; i < len; ++i) {
> - size_t c = data[(pos + i) & mask];
> - ++counts[UTF8Position(last_c, c, 2)];
> - last_c = c;
> - }
> - if (counts[2] < 500) {
> - max_utf8 = 1;
> - }
> - if (counts[1] + counts[2] < 25) {
> - max_utf8 = 0;
> - }
> - return max_utf8;
> -}
> -
> -static void EstimateBitCostsForLiteralsUTF8(size_t pos, size_t len, size_t
> mask,
> - const uint8_t* data, float* cost) {
> - /* max_utf8 is 0 (normal ASCII single byte modeling),
> - 1 (for 2-byte UTF-8 modeling), or 2 (for 3-byte UTF-8 modeling). */
> - const size_t max_utf8 = DecideMultiByteStatsLevel(pos, len, mask, data);
> - size_t histogram[3][256] = { { 0 } };
> - size_t window_half = 495;
> - size_t in_window = BROTLI_MIN(size_t, window_half, len);
> - size_t in_window_utf8[3] = { 0 };
> -
> - size_t i;
> - { /* Bootstrap histograms. */
> - size_t last_c = 0;
> - size_t utf8_pos = 0;
> - for (i = 0; i < in_window; ++i) {
> - size_t c = data[(pos + i) & mask];
> - ++histogram[utf8_pos][c];
> - ++in_window_utf8[utf8_pos];
> - utf8_pos = UTF8Position(last_c, c, max_utf8);
> - last_c = c;
> - }
> - }
> -
> - /* Compute bit costs with sliding window. */
> - for (i = 0; i < len; ++i) {
> - if (i >= window_half) {
> - /* Remove a byte in the past. */
> - size_t c =
> - i < window_half + 1 ? 0 : data[(pos + i - window_half - 1) & mask];
> - size_t last_c =
> - i < window_half + 2 ? 0 : data[(pos + i - window_half - 2) & mask];
> - size_t utf8_pos2 = UTF8Position(last_c, c, max_utf8);
> - --histogram[utf8_pos2][data[(pos + i - window_half) & mask]];
> - --in_window_utf8[utf8_pos2];
> - }
> - if (i + window_half < len) {
> - /* Add a byte in the future. */
> - size_t c = data[(pos + i + window_half - 1) & mask];
> - size_t last_c = data[(pos + i + window_half - 2) & mask];
> - size_t utf8_pos2 = UTF8Position(last_c, c, max_utf8);
> - ++histogram[utf8_pos2][data[(pos + i + window_half) & mask]];
> - ++in_window_utf8[utf8_pos2];
> - }
> - {
> - size_t c = i < 1 ? 0 : data[(pos + i - 1) & mask];
> - size_t last_c = i < 2 ? 0 : data[(pos + i - 2) & mask];
> - size_t utf8_pos = UTF8Position(last_c, c, max_utf8);
> - size_t masked_pos = (pos + i) & mask;
> - size_t histo = histogram[utf8_pos][data[masked_pos]];
> - double lit_cost;
> - if (histo == 0) {
> - histo = 1;
> - }
> - lit_cost = FastLog2(in_window_utf8[utf8_pos]) - FastLog2(histo);
> - lit_cost += 0.02905;
> - if (lit_cost < 1.0) {
> - lit_cost *= 0.5;
> - lit_cost += 0.5;
> - }
> - /* Make the first bytes more expensive -- seems to help, not sure why.
> - Perhaps because the entropy source is changing its properties
> - rapidly in the beginning of the file, perhaps because the beginning
> - of the data is a statistical "anomaly". */
> - if (i < 2000) {
> - lit_cost += 0.7 - ((double)(2000 - i) / 2000.0 * 0.35);
> - }
> - cost[i] = (float)lit_cost;
> - }
> - }
> -}
> -
> -void BrotliEstimateBitCostsForLiterals(size_t pos, size_t len, size_t mask,
> - const uint8_t* data, float* cost) {
> - if (BrotliIsMostlyUTF8(data, pos, mask, len, kMinUTF8Ratio)) {
> - EstimateBitCostsForLiteralsUTF8(pos, len, mask, data, cost);
> - return;
> - } else {
> - size_t histogram[256] = { 0 };
> - size_t window_half = 2000;
> - size_t in_window = BROTLI_MIN(size_t, window_half, len);
> -
> - /* Bootstrap histogram. */
> - size_t i;
> - for (i = 0; i < in_window; ++i) {
> - ++histogram[data[(pos + i) & mask]];
> - }
> -
> - /* Compute bit costs with sliding window. */
> - for (i = 0; i < len; ++i) {
> - size_t histo;
> - if (i >= window_half) {
> - /* Remove a byte in the past. */
> - --histogram[data[(pos + i - window_half) & mask]];
> - --in_window;
> - }
> - if (i + window_half < len) {
> - /* Add a byte in the future. */
> - ++histogram[data[(pos + i + window_half) & mask]];
> - ++in_window;
> - }
> - histo = histogram[data[(pos + i) & mask]];
> - if (histo == 0) {
> - histo = 1;
> - }
> - {
> - double lit_cost = FastLog2(in_window) - FastLog2(histo);
> - lit_cost += 0.029;
> - if (lit_cost < 1.0) {
> - lit_cost *= 0.5;
> - lit_cost += 0.5;
> - }
> - cost[i] = (float)lit_cost;
> - }
> - }
> - }
> -}
> -
> -#if defined(__cplusplus) || defined(c_plusplus)
> -} /* extern "C" */
> -#endif
> diff --git a/BaseTools/Source/C/BrotliCompress/enc/memory.c
> b/BaseTools/Source/C/BrotliCompress/enc/memory.c
> deleted file mode 100644
> index f0b2f13f6472..000000000000
> --- a/BaseTools/Source/C/BrotliCompress/enc/memory.c
> +++ /dev/null
> @@ -1,170 +0,0 @@
> -/* Copyright 2015 Google Inc. All Rights Reserved.
> -
> - Distributed under MIT license.
> - See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
> -*/
> -
> -/* Algorithms for distributing the literals and commands of a metablock
> between
> - block types and contexts. */
> -
> -#include "./memory.h"
> -
> -#include <stdlib.h> /* exit, free, malloc */
> -#include <string.h> /* memcpy */
> -
> -#include "../common/platform.h"
> -#include <brotli/types.h>
> -
> -#if defined(__cplusplus) || defined(c_plusplus)
> -extern "C" {
> -#endif
> -
> -#define MAX_PERM_ALLOCATED 128
> -#define MAX_NEW_ALLOCATED 64
> -#define MAX_NEW_FREED 64
> -
> -#define PERM_ALLOCATED_OFFSET 0
> -#define NEW_ALLOCATED_OFFSET MAX_PERM_ALLOCATED
> -#define NEW_FREED_OFFSET (MAX_PERM_ALLOCATED +
> MAX_NEW_ALLOCATED)
> -
> -void BrotliInitMemoryManager(
> - MemoryManager* m, brotli_alloc_func alloc_func, brotli_free_func
> free_func,
> - void* opaque) {
> - if (!alloc_func) {
> - m->alloc_func = BrotliDefaultAllocFunc;
> - m->free_func = BrotliDefaultFreeFunc;
> - m->opaque = 0;
> - } else {
> - m->alloc_func = alloc_func;
> - m->free_func = free_func;
> - m->opaque = opaque;
> - }
> -#if !defined(BROTLI_ENCODER_EXIT_ON_OOM)
> - m->is_oom = BROTLI_FALSE;
> - m->perm_allocated = 0;
> - m->new_allocated = 0;
> - m->new_freed = 0;
> -#endif /* BROTLI_ENCODER_EXIT_ON_OOM */
> -}
> -
> -#if defined(BROTLI_ENCODER_EXIT_ON_OOM)
> -
> -void* BrotliAllocate(MemoryManager* m, size_t n) {
> - void* result = m->alloc_func(m->opaque, n);
> - if (!result) exit(EXIT_FAILURE);
> - return result;
> -}
> -
> -void BrotliFree(MemoryManager* m, void* p) {
> - m->free_func(m->opaque, p);
> -}
> -
> -void BrotliWipeOutMemoryManager(MemoryManager* m) {
> - BROTLI_UNUSED(m);
> -}
> -
> -#else /* BROTLI_ENCODER_EXIT_ON_OOM */
> -
> -static void SortPointers(void** items, const size_t n) {
> - /* Shell sort. */
> - static const size_t gaps[] = {23, 10, 4, 1};
> - int g = 0;
> - for (; g < 4; ++g) {
> - size_t gap = gaps[g];
> - size_t i;
> - for (i = gap; i < n; ++i) {
> - size_t j = i;
> - void* tmp = items[i];
> - for (; j >= gap && tmp < items[j - gap]; j -= gap) {
> - items[j] = items[j - gap];
> - }
> - items[j] = tmp;
> - }
> - }
> -}
> -
> -static size_t Annihilate(void** a, size_t a_len, void** b, size_t b_len) {
> - size_t a_read_index = 0;
> - size_t b_read_index = 0;
> - size_t a_write_index = 0;
> - size_t b_write_index = 0;
> - size_t annihilated = 0;
> - while (a_read_index < a_len && b_read_index < b_len) {
> - if (a[a_read_index] == b[b_read_index]) {
> - a_read_index++;
> - b_read_index++;
> - annihilated++;
> - } else if (a[a_read_index] < b[b_read_index]) {
> - a[a_write_index++] = a[a_read_index++];
> - } else {
> - b[b_write_index++] = b[b_read_index++];
> - }
> - }
> - while (a_read_index < a_len) a[a_write_index++] = a[a_read_index++];
> - while (b_read_index < b_len) b[b_write_index++] = b[b_read_index++];
> - return annihilated;
> -}
> -
> -static void CollectGarbagePointers(MemoryManager* m) {
> - size_t annihilated;
> - SortPointers(m->pointers + NEW_ALLOCATED_OFFSET, m-
> >new_allocated);
> - SortPointers(m->pointers + NEW_FREED_OFFSET, m->new_freed);
> - annihilated = Annihilate(
> - m->pointers + NEW_ALLOCATED_OFFSET, m->new_allocated,
> - m->pointers + NEW_FREED_OFFSET, m->new_freed);
> - m->new_allocated -= annihilated;
> - m->new_freed -= annihilated;
> -
> - if (m->new_freed != 0) {
> - annihilated = Annihilate(
> - m->pointers + PERM_ALLOCATED_OFFSET, m->perm_allocated,
> - m->pointers + NEW_FREED_OFFSET, m->new_freed);
> - m->perm_allocated -= annihilated;
> - m->new_freed -= annihilated;
> - BROTLI_DCHECK(m->new_freed == 0);
> - }
> -
> - if (m->new_allocated != 0) {
> - BROTLI_DCHECK(m->perm_allocated + m->new_allocated <=
> MAX_PERM_ALLOCATED);
> - memcpy(m->pointers + PERM_ALLOCATED_OFFSET + m->perm_allocated,
> - m->pointers + NEW_ALLOCATED_OFFSET,
> - sizeof(void*) * m->new_allocated);
> - m->perm_allocated += m->new_allocated;
> - m->new_allocated = 0;
> - SortPointers(m->pointers + PERM_ALLOCATED_OFFSET, m-
> >perm_allocated);
> - }
> -}
> -
> -void* BrotliAllocate(MemoryManager* m, size_t n) {
> - void* result = m->alloc_func(m->opaque, n);
> - if (!result) {
> - m->is_oom = BROTLI_TRUE;
> - return NULL;
> - }
> - if (m->new_allocated == MAX_NEW_ALLOCATED)
> CollectGarbagePointers(m);
> - m->pointers[NEW_ALLOCATED_OFFSET + (m->new_allocated++)] = result;
> - return result;
> -}
> -
> -void BrotliFree(MemoryManager* m, void* p) {
> - if (!p) return;
> - m->free_func(m->opaque, p);
> - if (m->new_freed == MAX_NEW_FREED) CollectGarbagePointers(m);
> - m->pointers[NEW_FREED_OFFSET + (m->new_freed++)] = p;
> -}
> -
> -void BrotliWipeOutMemoryManager(MemoryManager* m) {
> - size_t i;
> - CollectGarbagePointers(m);
> - /* Now all unfreed pointers are in perm-allocated list. */
> - for (i = 0; i < m->perm_allocated; ++i) {
> - m->free_func(m->opaque, m->pointers[PERM_ALLOCATED_OFFSET + i]);
> - }
> - m->perm_allocated = 0;
> -}
> -
> -#endif /* BROTLI_ENCODER_EXIT_ON_OOM */
> -
> -#if defined(__cplusplus) || defined(c_plusplus)
> -} /* extern "C" */
> -#endif
> diff --git a/BaseTools/Source/C/BrotliCompress/enc/metablock.c
> b/BaseTools/Source/C/BrotliCompress/enc/metablock.c
> deleted file mode 100644
> index 2fc3e28d02af..000000000000
> --- a/BaseTools/Source/C/BrotliCompress/enc/metablock.c
> +++ /dev/null
> @@ -1,667 +0,0 @@
> -/* Copyright 2015 Google Inc. All Rights Reserved.
> -
> - Distributed under MIT license.
> - See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
> -*/
> -
> -/* Algorithms for distributing the literals and commands of a metablock
> between
> - block types and contexts. */
> -
> -#include "./metablock.h"
> -
> -#include "../common/constants.h"
> -#include "../common/context.h"
> -#include "../common/platform.h"
> -#include <brotli/types.h>
> -#include "./bit_cost.h"
> -#include "./block_splitter.h"
> -#include "./cluster.h"
> -#include "./entropy_encode.h"
> -#include "./histogram.h"
> -#include "./memory.h"
> -#include "./quality.h"
> -
> -#if defined(__cplusplus) || defined(c_plusplus)
> -extern "C" {
> -#endif
> -
> -void BrotliInitDistanceParams(BrotliEncoderParams* params,
> - uint32_t npostfix, uint32_t ndirect) {
> - BrotliDistanceParams* dist_params = ¶ms->dist;
> - uint32_t alphabet_size, max_distance;
> -
> - dist_params->distance_postfix_bits = npostfix;
> - dist_params->num_direct_distance_codes = ndirect;
> -
> - alphabet_size = BROTLI_DISTANCE_ALPHABET_SIZE(
> - npostfix, ndirect, BROTLI_MAX_DISTANCE_BITS);
> - max_distance = ndirect + (1U << (BROTLI_MAX_DISTANCE_BITS + npostfix
> + 2)) -
> - (1U << (npostfix + 2));
> -
> - if (params->large_window) {
> - static const uint32_t bound[BROTLI_MAX_NPOSTFIX + 1] = {0, 4, 12, 28};
> - uint32_t postfix = 1U << npostfix;
> - alphabet_size = BROTLI_DISTANCE_ALPHABET_SIZE(
> - npostfix, ndirect, BROTLI_LARGE_MAX_DISTANCE_BITS);
> - /* The maximum distance is set so that no distance symbol used can
> encode
> - a distance larger than BROTLI_MAX_ALLOWED_DISTANCE with all
> - its extra bits set. */
> - if (ndirect < bound[npostfix]) {
> - max_distance = BROTLI_MAX_ALLOWED_DISTANCE - (bound[npostfix] -
> ndirect);
> - } else if (ndirect >= bound[npostfix] + postfix) {
> - max_distance = (3U << 29) - 4 + (ndirect - bound[npostfix]);
> - } else {
> - max_distance = BROTLI_MAX_ALLOWED_DISTANCE;
> - }
> - }
> -
> - dist_params->alphabet_size = alphabet_size;
> - dist_params->max_distance = max_distance;
> -}
> -
> -static void RecomputeDistancePrefixes(Command* cmds,
> - size_t num_commands,
> - const BrotliDistanceParams* orig_params,
> - const BrotliDistanceParams* new_params) {
> - size_t i;
> -
> - if (orig_params->distance_postfix_bits == new_params-
> >distance_postfix_bits &&
> - orig_params->num_direct_distance_codes ==
> - new_params->num_direct_distance_codes) {
> - return;
> - }
> -
> - for (i = 0; i < num_commands; ++i) {
> - Command* cmd = &cmds[i];
> - if (CommandCopyLen(cmd) && cmd->cmd_prefix_ >= 128) {
> - PrefixEncodeCopyDistance(CommandRestoreDistanceCode(cmd,
> orig_params),
> - new_params->num_direct_distance_codes,
> - new_params->distance_postfix_bits,
> - &cmd->dist_prefix_,
> - &cmd->dist_extra_);
> - }
> - }
> -}
> -
> -static BROTLI_BOOL ComputeDistanceCost(const Command* cmds,
> - size_t num_commands,
> - const BrotliDistanceParams* orig_params,
> - const BrotliDistanceParams* new_params,
> - double* cost) {
> - size_t i;
> - BROTLI_BOOL equal_params = BROTLI_FALSE;
> - uint16_t dist_prefix;
> - uint32_t dist_extra;
> - double extra_bits = 0.0;
> - HistogramDistance histo;
> - HistogramClearDistance(&histo);
> -
> - if (orig_params->distance_postfix_bits == new_params-
> >distance_postfix_bits &&
> - orig_params->num_direct_distance_codes ==
> - new_params->num_direct_distance_codes) {
> - equal_params = BROTLI_TRUE;
> - }
> -
> - for (i = 0; i < num_commands; i++) {
> - const Command* cmd = &cmds[i];
> - if (CommandCopyLen(cmd) && cmd->cmd_prefix_ >= 128) {
> - if (equal_params) {
> - dist_prefix = cmd->dist_prefix_;
> - } else {
> - uint32_t distance = CommandRestoreDistanceCode(cmd, orig_params);
> - if (distance > new_params->max_distance) {
> - return BROTLI_FALSE;
> - }
> - PrefixEncodeCopyDistance(distance,
> - new_params->num_direct_distance_codes,
> - new_params->distance_postfix_bits,
> - &dist_prefix,
> - &dist_extra);
> - }
> - HistogramAddDistance(&histo, dist_prefix & 0x3FF);
> - extra_bits += dist_prefix >> 10;
> - }
> - }
> -
> - *cost = BrotliPopulationCostDistance(&histo) + extra_bits;
> - return BROTLI_TRUE;
> -}
> -
> -void BrotliBuildMetaBlock(MemoryManager* m,
> - const uint8_t* ringbuffer,
> - const size_t pos,
> - const size_t mask,
> - BrotliEncoderParams* params,
> - uint8_t prev_byte,
> - uint8_t prev_byte2,
> - Command* cmds,
> - size_t num_commands,
> - ContextType literal_context_mode,
> - MetaBlockSplit* mb) {
> - /* Histogram ids need to fit in one byte. */
> - static const size_t kMaxNumberOfHistograms = 256;
> - HistogramDistance* distance_histograms;
> - HistogramLiteral* literal_histograms;
> - ContextType* literal_context_modes = NULL;
> - size_t literal_histograms_size;
> - size_t distance_histograms_size;
> - size_t i;
> - size_t literal_context_multiplier = 1;
> - uint32_t npostfix;
> - uint32_t ndirect_msb = 0;
> - BROTLI_BOOL check_orig = BROTLI_TRUE;
> - double best_dist_cost = 1e99;
> - BrotliEncoderParams orig_params = *params;
> - BrotliEncoderParams new_params = *params;
> -
> - for (npostfix = 0; npostfix <= BROTLI_MAX_NPOSTFIX; npostfix++) {
> - for (; ndirect_msb < 16; ndirect_msb++) {
> - uint32_t ndirect = ndirect_msb << npostfix;
> - BROTLI_BOOL skip;
> - double dist_cost;
> - BrotliInitDistanceParams(&new_params, npostfix, ndirect);
> - if (npostfix == orig_params.dist.distance_postfix_bits &&
> - ndirect == orig_params.dist.num_direct_distance_codes) {
> - check_orig = BROTLI_FALSE;
> - }
> - skip = !ComputeDistanceCost(
> - cmds, num_commands,
> - &orig_params.dist, &new_params.dist, &dist_cost);
> - if (skip || (dist_cost > best_dist_cost)) {
> - break;
> - }
> - best_dist_cost = dist_cost;
> - params->dist = new_params.dist;
> - }
> - if (ndirect_msb > 0) ndirect_msb--;
> - ndirect_msb /= 2;
> - }
> - if (check_orig) {
> - double dist_cost;
> - ComputeDistanceCost(cmds, num_commands,
> - &orig_params.dist, &orig_params.dist, &dist_cost);
> - if (dist_cost < best_dist_cost) {
> - /* NB: currently unused; uncomment when more param tuning is added.
> */
> - /* best_dist_cost = dist_cost; */
> - params->dist = orig_params.dist;
> - }
> - }
> - RecomputeDistancePrefixes(cmds, num_commands,
> - &orig_params.dist, ¶ms->dist);
> -
> - BrotliSplitBlock(m, cmds, num_commands,
> - ringbuffer, pos, mask, params,
> - &mb->literal_split,
> - &mb->command_split,
> - &mb->distance_split);
> - if (BROTLI_IS_OOM(m)) return;
> -
> - if (!params->disable_literal_context_modeling) {
> - literal_context_multiplier = 1 << BROTLI_LITERAL_CONTEXT_BITS;
> - literal_context_modes =
> - BROTLI_ALLOC(m, ContextType, mb->literal_split.num_types);
> - if (BROTLI_IS_OOM(m)) return;
> - for (i = 0; i < mb->literal_split.num_types; ++i) {
> - literal_context_modes[i] = literal_context_mode;
> - }
> - }
> -
> - literal_histograms_size =
> - mb->literal_split.num_types * literal_context_multiplier;
> - literal_histograms =
> - BROTLI_ALLOC(m, HistogramLiteral, literal_histograms_size);
> - if (BROTLI_IS_OOM(m)) return;
> - ClearHistogramsLiteral(literal_histograms, literal_histograms_size);
> -
> - distance_histograms_size =
> - mb->distance_split.num_types << BROTLI_DISTANCE_CONTEXT_BITS;
> - distance_histograms =
> - BROTLI_ALLOC(m, HistogramDistance, distance_histograms_size);
> - if (BROTLI_IS_OOM(m)) return;
> - ClearHistogramsDistance(distance_histograms, distance_histograms_size);
> -
> - BROTLI_DCHECK(mb->command_histograms == 0);
> - mb->command_histograms_size = mb->command_split.num_types;
> - mb->command_histograms =
> - BROTLI_ALLOC(m, HistogramCommand, mb-
> >command_histograms_size);
> - if (BROTLI_IS_OOM(m)) return;
> - ClearHistogramsCommand(mb->command_histograms, mb-
> >command_histograms_size);
> -
> - BrotliBuildHistogramsWithContext(cmds, num_commands,
> - &mb->literal_split, &mb->command_split, &mb->distance_split,
> - ringbuffer, pos, mask, prev_byte, prev_byte2, literal_context_modes,
> - literal_histograms, mb->command_histograms, distance_histograms);
> - BROTLI_FREE(m, literal_context_modes);
> -
> - BROTLI_DCHECK(mb->literal_context_map == 0);
> - mb->literal_context_map_size =
> - mb->literal_split.num_types << BROTLI_LITERAL_CONTEXT_BITS;
> - mb->literal_context_map =
> - BROTLI_ALLOC(m, uint32_t, mb->literal_context_map_size);
> - if (BROTLI_IS_OOM(m)) return;
> -
> - BROTLI_DCHECK(mb->literal_histograms == 0);
> - mb->literal_histograms_size = mb->literal_context_map_size;
> - mb->literal_histograms =
> - BROTLI_ALLOC(m, HistogramLiteral, mb->literal_histograms_size);
> - if (BROTLI_IS_OOM(m)) return;
> -
> - BrotliClusterHistogramsLiteral(m, literal_histograms,
> literal_histograms_size,
> - kMaxNumberOfHistograms, mb->literal_histograms,
> - &mb->literal_histograms_size, mb->literal_context_map);
> - if (BROTLI_IS_OOM(m)) return;
> - BROTLI_FREE(m, literal_histograms);
> -
> - if (params->disable_literal_context_modeling) {
> - /* Distribute assignment to all contexts. */
> - for (i = mb->literal_split.num_types; i != 0;) {
> - size_t j = 0;
> - i--;
> - for (; j < (1 << BROTLI_LITERAL_CONTEXT_BITS); j++) {
> - mb->literal_context_map[(i << BROTLI_LITERAL_CONTEXT_BITS) + j] =
> - mb->literal_context_map[i];
> - }
> - }
> - }
> -
> - BROTLI_DCHECK(mb->distance_context_map == 0);
> - mb->distance_context_map_size =
> - mb->distance_split.num_types << BROTLI_DISTANCE_CONTEXT_BITS;
> - mb->distance_context_map =
> - BROTLI_ALLOC(m, uint32_t, mb->distance_context_map_size);
> - if (BROTLI_IS_OOM(m)) return;
> -
> - BROTLI_DCHECK(mb->distance_histograms == 0);
> - mb->distance_histograms_size = mb->distance_context_map_size;
> - mb->distance_histograms =
> - BROTLI_ALLOC(m, HistogramDistance, mb->distance_histograms_size);
> - if (BROTLI_IS_OOM(m)) return;
> -
> - BrotliClusterHistogramsDistance(m, distance_histograms,
> - mb->distance_context_map_size,
> - kMaxNumberOfHistograms,
> - mb->distance_histograms,
> - &mb->distance_histograms_size,
> - mb->distance_context_map);
> - if (BROTLI_IS_OOM(m)) return;
> - BROTLI_FREE(m, distance_histograms);
> -}
> -
> -#define FN(X) X ## Literal
> -#include "./metablock_inc.h" /* NOLINT(build/include) */
> -#undef FN
> -
> -#define FN(X) X ## Command
> -#include "./metablock_inc.h" /* NOLINT(build/include) */
> -#undef FN
> -
> -#define FN(X) X ## Distance
> -#include "./metablock_inc.h" /* NOLINT(build/include) */
> -#undef FN
> -
> -#define BROTLI_MAX_STATIC_CONTEXTS 13
> -
> -/* Greedy block splitter for one block category (literal, command or
> distance).
> - Gathers histograms for all context buckets. */
> -typedef struct ContextBlockSplitter {
> - /* Alphabet size of particular block category. */
> - size_t alphabet_size_;
> - size_t num_contexts_;
> - size_t max_block_types_;
> - /* We collect at least this many symbols for each block. */
> - size_t min_block_size_;
> - /* We merge histograms A and B if
> - entropy(A+B) < entropy(A) + entropy(B) + split_threshold_,
> - where A is the current histogram and B is the histogram of the last or the
> - second last block type. */
> - double split_threshold_;
> -
> - size_t num_blocks_;
> - BlockSplit* split_; /* not owned */
> - HistogramLiteral* histograms_; /* not owned */
> - size_t* histograms_size_; /* not owned */
> -
> - /* The number of symbols that we want to collect before deciding on
> whether
> - or not to merge the block with a previous one or emit a new block. */
> - size_t target_block_size_;
> - /* The number of symbols in the current histogram. */
> - size_t block_size_;
> - /* Offset of the current histogram. */
> - size_t curr_histogram_ix_;
> - /* Offset of the histograms of the previous two block types. */
> - size_t last_histogram_ix_[2];
> - /* Entropy of the previous two block types. */
> - double last_entropy_[2 * BROTLI_MAX_STATIC_CONTEXTS];
> - /* The number of times we merged the current block with the last one. */
> - size_t merge_last_count_;
> -} ContextBlockSplitter;
> -
> -static void InitContextBlockSplitter(
> - MemoryManager* m, ContextBlockSplitter* self, size_t alphabet_size,
> - size_t num_contexts, size_t min_block_size, double split_threshold,
> - size_t num_symbols, BlockSplit* split, HistogramLiteral** histograms,
> - size_t* histograms_size) {
> - size_t max_num_blocks = num_symbols / min_block_size + 1;
> - size_t max_num_types;
> - BROTLI_DCHECK(num_contexts <= BROTLI_MAX_STATIC_CONTEXTS);
> -
> - self->alphabet_size_ = alphabet_size;
> - self->num_contexts_ = num_contexts;
> - self->max_block_types_ = BROTLI_MAX_NUMBER_OF_BLOCK_TYPES /
> num_contexts;
> - self->min_block_size_ = min_block_size;
> - self->split_threshold_ = split_threshold;
> - self->num_blocks_ = 0;
> - self->split_ = split;
> - self->histograms_size_ = histograms_size;
> - self->target_block_size_ = min_block_size;
> - self->block_size_ = 0;
> - self->curr_histogram_ix_ = 0;
> - self->merge_last_count_ = 0;
> -
> - /* We have to allocate one more histogram than the maximum number of
> block
> - types for the current histogram when the meta-block is too big. */
> - max_num_types =
> - BROTLI_MIN(size_t, max_num_blocks, self->max_block_types_ + 1);
> - BROTLI_ENSURE_CAPACITY(m, uint8_t,
> - split->types, split->types_alloc_size, max_num_blocks);
> - BROTLI_ENSURE_CAPACITY(m, uint32_t,
> - split->lengths, split->lengths_alloc_size, max_num_blocks);
> - if (BROTLI_IS_OOM(m)) return;
> - split->num_blocks = max_num_blocks;
> - if (BROTLI_IS_OOM(m)) return;
> - BROTLI_DCHECK(*histograms == 0);
> - *histograms_size = max_num_types * num_contexts;
> - *histograms = BROTLI_ALLOC(m, HistogramLiteral, *histograms_size);
> - self->histograms_ = *histograms;
> - if (BROTLI_IS_OOM(m)) return;
> - /* Clear only current histogram. */
> - ClearHistogramsLiteral(&self->histograms_[0], num_contexts);
> - self->last_histogram_ix_[0] = self->last_histogram_ix_[1] = 0;
> -}
> -
> -/* Does either of three things:
> - (1) emits the current block with a new block type;
> - (2) emits the current block with the type of the second last block;
> - (3) merges the current block with the last block. */
> -static void ContextBlockSplitterFinishBlock(
> - ContextBlockSplitter* self, MemoryManager* m, BROTLI_BOOL is_final) {
> - BlockSplit* split = self->split_;
> - const size_t num_contexts = self->num_contexts_;
> - double* last_entropy = self->last_entropy_;
> - HistogramLiteral* histograms = self->histograms_;
> -
> - if (self->block_size_ < self->min_block_size_) {
> - self->block_size_ = self->min_block_size_;
> - }
> - if (self->num_blocks_ == 0) {
> - size_t i;
> - /* Create first block. */
> - split->lengths[0] = (uint32_t)self->block_size_;
> - split->types[0] = 0;
> -
> - for (i = 0; i < num_contexts; ++i) {
> - last_entropy[i] =
> - BitsEntropy(histograms[i].data_, self->alphabet_size_);
> - last_entropy[num_contexts + i] = last_entropy[i];
> - }
> - ++self->num_blocks_;
> - ++split->num_types;
> - self->curr_histogram_ix_ += num_contexts;
> - if (self->curr_histogram_ix_ < *self->histograms_size_) {
> - ClearHistogramsLiteral(
> - &self->histograms_[self->curr_histogram_ix_], self->num_contexts_);
> - }
> - self->block_size_ = 0;
> - } else if (self->block_size_ > 0) {
> - /* Try merging the set of histograms for the current block type with the
> - respective set of histograms for the last and second last block types.
> - Decide over the split based on the total reduction of entropy across
> - all contexts. */
> - double entropy[BROTLI_MAX_STATIC_CONTEXTS];
> - HistogramLiteral* combined_histo =
> - BROTLI_ALLOC(m, HistogramLiteral, 2 * num_contexts);
> - double combined_entropy[2 * BROTLI_MAX_STATIC_CONTEXTS];
> - double diff[2] = { 0.0 };
> - size_t i;
> - if (BROTLI_IS_OOM(m)) return;
> - for (i = 0; i < num_contexts; ++i) {
> - size_t curr_histo_ix = self->curr_histogram_ix_ + i;
> - size_t j;
> - entropy[i] = BitsEntropy(histograms[curr_histo_ix].data_,
> - self->alphabet_size_);
> - for (j = 0; j < 2; ++j) {
> - size_t jx = j * num_contexts + i;
> - size_t last_histogram_ix = self->last_histogram_ix_[j] + i;
> - combined_histo[jx] = histograms[curr_histo_ix];
> - HistogramAddHistogramLiteral(&combined_histo[jx],
> - &histograms[last_histogram_ix]);
> - combined_entropy[jx] = BitsEntropy(
> - &combined_histo[jx].data_[0], self->alphabet_size_);
> - diff[j] += combined_entropy[jx] - entropy[i] - last_entropy[jx];
> - }
> - }
> -
> - if (split->num_types < self->max_block_types_ &&
> - diff[0] > self->split_threshold_ &&
> - diff[1] > self->split_threshold_) {
> - /* Create new block. */
> - split->lengths[self->num_blocks_] = (uint32_t)self->block_size_;
> - split->types[self->num_blocks_] = (uint8_t)split->num_types;
> - self->last_histogram_ix_[1] = self->last_histogram_ix_[0];
> - self->last_histogram_ix_[0] = split->num_types * num_contexts;
> - for (i = 0; i < num_contexts; ++i) {
> - last_entropy[num_contexts + i] = last_entropy[i];
> - last_entropy[i] = entropy[i];
> - }
> - ++self->num_blocks_;
> - ++split->num_types;
> - self->curr_histogram_ix_ += num_contexts;
> - if (self->curr_histogram_ix_ < *self->histograms_size_) {
> - ClearHistogramsLiteral(
> - &self->histograms_[self->curr_histogram_ix_], self->num_contexts_);
> - }
> - self->block_size_ = 0;
> - self->merge_last_count_ = 0;
> - self->target_block_size_ = self->min_block_size_;
> - } else if (diff[1] < diff[0] - 20.0) {
> - /* Combine this block with second last block. */
> - split->lengths[self->num_blocks_] = (uint32_t)self->block_size_;
> - split->types[self->num_blocks_] = split->types[self->num_blocks_ - 2];
> - BROTLI_SWAP(size_t, self->last_histogram_ix_, 0, 1);
> - for (i = 0; i < num_contexts; ++i) {
> - histograms[self->last_histogram_ix_[0] + i] =
> - combined_histo[num_contexts + i];
> - last_entropy[num_contexts + i] = last_entropy[i];
> - last_entropy[i] = combined_entropy[num_contexts + i];
> - HistogramClearLiteral(&histograms[self->curr_histogram_ix_ + i]);
> - }
> - ++self->num_blocks_;
> - self->block_size_ = 0;
> - self->merge_last_count_ = 0;
> - self->target_block_size_ = self->min_block_size_;
> - } else {
> - /* Combine this block with last block. */
> - split->lengths[self->num_blocks_ - 1] += (uint32_t)self->block_size_;
> - for (i = 0; i < num_contexts; ++i) {
> - histograms[self->last_histogram_ix_[0] + i] = combined_histo[i];
> - last_entropy[i] = combined_entropy[i];
> - if (split->num_types == 1) {
> - last_entropy[num_contexts + i] = last_entropy[i];
> - }
> - HistogramClearLiteral(&histograms[self->curr_histogram_ix_ + i]);
> - }
> - self->block_size_ = 0;
> - if (++self->merge_last_count_ > 1) {
> - self->target_block_size_ += self->min_block_size_;
> - }
> - }
> - BROTLI_FREE(m, combined_histo);
> - }
> - if (is_final) {
> - *self->histograms_size_ = split->num_types * num_contexts;
> - split->num_blocks = self->num_blocks_;
> - }
> -}
> -
> -/* Adds the next symbol to the current block type and context. When the
> - current block reaches the target size, decides on merging the block. */
> -static void ContextBlockSplitterAddSymbol(
> - ContextBlockSplitter* self, MemoryManager* m,
> - size_t symbol, size_t context) {
> - HistogramAddLiteral(&self->histograms_[self->curr_histogram_ix_ +
> context],
> - symbol);
> - ++self->block_size_;
> - if (self->block_size_ == self->target_block_size_) {
> - ContextBlockSplitterFinishBlock(self, m, /* is_final = */ BROTLI_FALSE);
> - if (BROTLI_IS_OOM(m)) return;
> - }
> -}
> -
> -static void MapStaticContexts(MemoryManager* m,
> - size_t num_contexts,
> - const uint32_t* static_context_map,
> - MetaBlockSplit* mb) {
> - size_t i;
> - BROTLI_DCHECK(mb->literal_context_map == 0);
> - mb->literal_context_map_size =
> - mb->literal_split.num_types << BROTLI_LITERAL_CONTEXT_BITS;
> - mb->literal_context_map =
> - BROTLI_ALLOC(m, uint32_t, mb->literal_context_map_size);
> - if (BROTLI_IS_OOM(m)) return;
> -
> - for (i = 0; i < mb->literal_split.num_types; ++i) {
> - uint32_t offset = (uint32_t)(i * num_contexts);
> - size_t j;
> - for (j = 0; j < (1u << BROTLI_LITERAL_CONTEXT_BITS); ++j) {
> - mb->literal_context_map[(i << BROTLI_LITERAL_CONTEXT_BITS) + j] =
> - offset + static_context_map[j];
> - }
> - }
> -}
> -
> -static BROTLI_INLINE void BrotliBuildMetaBlockGreedyInternal(
> - MemoryManager* m, const uint8_t* ringbuffer, size_t pos, size_t mask,
> - uint8_t prev_byte, uint8_t prev_byte2, ContextLut literal_context_lut,
> - const size_t num_contexts, const uint32_t* static_context_map,
> - const Command* commands, size_t n_commands, MetaBlockSplit* mb) {
> - union {
> - BlockSplitterLiteral plain;
> - ContextBlockSplitter ctx;
> - } lit_blocks;
> - BlockSplitterCommand cmd_blocks;
> - BlockSplitterDistance dist_blocks;
> - size_t num_literals = 0;
> - size_t i;
> - for (i = 0; i < n_commands; ++i) {
> - num_literals += commands[i].insert_len_;
> - }
> -
> - if (num_contexts == 1) {
> - InitBlockSplitterLiteral(m, &lit_blocks.plain, 256, 512, 400.0,
> - num_literals, &mb->literal_split, &mb->literal_histograms,
> - &mb->literal_histograms_size);
> - } else {
> - InitContextBlockSplitter(m, &lit_blocks.ctx, 256, num_contexts, 512, 400.0,
> - num_literals, &mb->literal_split, &mb->literal_histograms,
> - &mb->literal_histograms_size);
> - }
> - if (BROTLI_IS_OOM(m)) return;
> - InitBlockSplitterCommand(m, &cmd_blocks,
> BROTLI_NUM_COMMAND_SYMBOLS, 1024,
> - 500.0, n_commands, &mb->command_split, &mb-
> >command_histograms,
> - &mb->command_histograms_size);
> - if (BROTLI_IS_OOM(m)) return;
> - InitBlockSplitterDistance(m, &dist_blocks, 64, 512, 100.0, n_commands,
> - &mb->distance_split, &mb->distance_histograms,
> - &mb->distance_histograms_size);
> - if (BROTLI_IS_OOM(m)) return;
> -
> - for (i = 0; i < n_commands; ++i) {
> - const Command cmd = commands[i];
> - size_t j;
> - BlockSplitterAddSymbolCommand(&cmd_blocks, cmd.cmd_prefix_);
> - for (j = cmd.insert_len_; j != 0; --j) {
> - uint8_t literal = ringbuffer[pos & mask];
> - if (num_contexts == 1) {
> - BlockSplitterAddSymbolLiteral(&lit_blocks.plain, literal);
> - } else {
> - size_t context =
> - BROTLI_CONTEXT(prev_byte, prev_byte2, literal_context_lut);
> - ContextBlockSplitterAddSymbol(&lit_blocks.ctx, m, literal,
> - static_context_map[context]);
> - if (BROTLI_IS_OOM(m)) return;
> - }
> - prev_byte2 = prev_byte;
> - prev_byte = literal;
> - ++pos;
> - }
> - pos += CommandCopyLen(&cmd);
> - if (CommandCopyLen(&cmd)) {
> - prev_byte2 = ringbuffer[(pos - 2) & mask];
> - prev_byte = ringbuffer[(pos - 1) & mask];
> - if (cmd.cmd_prefix_ >= 128) {
> - BlockSplitterAddSymbolDistance(&dist_blocks, cmd.dist_prefix_ &
> 0x3FF);
> - }
> - }
> - }
> -
> - if (num_contexts == 1) {
> - BlockSplitterFinishBlockLiteral(
> - &lit_blocks.plain, /* is_final = */ BROTLI_TRUE);
> - } else {
> - ContextBlockSplitterFinishBlock(
> - &lit_blocks.ctx, m, /* is_final = */ BROTLI_TRUE);
> - if (BROTLI_IS_OOM(m)) return;
> - }
> - BlockSplitterFinishBlockCommand(&cmd_blocks, /* is_final = */
> BROTLI_TRUE);
> - BlockSplitterFinishBlockDistance(&dist_blocks, /* is_final = */
> BROTLI_TRUE);
> -
> - if (num_contexts > 1) {
> - MapStaticContexts(m, num_contexts, static_context_map, mb);
> - }
> -}
> -
> -void BrotliBuildMetaBlockGreedy(MemoryManager* m,
> - const uint8_t* ringbuffer,
> - size_t pos,
> - size_t mask,
> - uint8_t prev_byte,
> - uint8_t prev_byte2,
> - ContextLut literal_context_lut,
> - size_t num_contexts,
> - const uint32_t* static_context_map,
> - const Command* commands,
> - size_t n_commands,
> - MetaBlockSplit* mb) {
> - if (num_contexts == 1) {
> - BrotliBuildMetaBlockGreedyInternal(m, ringbuffer, pos, mask, prev_byte,
> - prev_byte2, literal_context_lut, 1, NULL, commands, n_commands, mb);
> - } else {
> - BrotliBuildMetaBlockGreedyInternal(m, ringbuffer, pos, mask, prev_byte,
> - prev_byte2, literal_context_lut, num_contexts, static_context_map,
> - commands, n_commands, mb);
> - }
> -}
> -
> -void BrotliOptimizeHistograms(uint32_t num_distance_codes,
> - MetaBlockSplit* mb) {
> - uint8_t good_for_rle[BROTLI_NUM_COMMAND_SYMBOLS];
> - size_t i;
> - for (i = 0; i < mb->literal_histograms_size; ++i) {
> - BrotliOptimizeHuffmanCountsForRle(256, mb->literal_histograms[i].data_,
> - good_for_rle);
> - }
> - for (i = 0; i < mb->command_histograms_size; ++i) {
> -
> BrotliOptimizeHuffmanCountsForRle(BROTLI_NUM_COMMAND_SYMBOLS,
> - mb->command_histograms[i].data_,
> - good_for_rle);
> - }
> - for (i = 0; i < mb->distance_histograms_size; ++i) {
> - BrotliOptimizeHuffmanCountsForRle(num_distance_codes,
> - mb->distance_histograms[i].data_,
> - good_for_rle);
> - }
> -}
> -
> -#if defined(__cplusplus) || defined(c_plusplus)
> -} /* extern "C" */
> -#endif
> diff --git a/BaseTools/Source/C/BrotliCompress/enc/static_dict.c
> b/BaseTools/Source/C/BrotliCompress/enc/static_dict.c
> deleted file mode 100644
> index bad13a7f1693..000000000000
> --- a/BaseTools/Source/C/BrotliCompress/enc/static_dict.c
> +++ /dev/null
> @@ -1,486 +0,0 @@
> -/* Copyright 2013 Google Inc. All Rights Reserved.
> -
> - Distributed under MIT license.
> - See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
> -*/
> -
> -#include "./static_dict.h"
> -
> -#include "../common/dictionary.h"
> -#include "../common/platform.h"
> -#include "../common/transform.h"
> -#include "./encoder_dict.h"
> -#include "./find_match_length.h"
> -
> -#if defined(__cplusplus) || defined(c_plusplus)
> -extern "C" {
> -#endif
> -
> -static BROTLI_INLINE uint32_t Hash(const uint8_t* data) {
> - uint32_t h = BROTLI_UNALIGNED_LOAD32LE(data) * kDictHashMul32;
> - /* The higher bits contain more mixture from the multiplication,
> - so we take our results from there. */
> - return h >> (32 - kDictNumBits);
> -}
> -
> -static BROTLI_INLINE void AddMatch(size_t distance, size_t len, size_t
> len_code,
> - uint32_t* matches) {
> - uint32_t match = (uint32_t)((distance << 5) + len_code);
> - matches[len] = BROTLI_MIN(uint32_t, matches[len], match);
> -}
> -
> -static BROTLI_INLINE size_t DictMatchLength(const BrotliDictionary*
> dictionary,
> - const uint8_t* data,
> - size_t id,
> - size_t len,
> - size_t maxlen) {
> - const size_t offset = dictionary->offsets_by_length[len] + len * id;
> - return FindMatchLengthWithLimit(&dictionary->data[offset], data,
> - BROTLI_MIN(size_t, len, maxlen));
> -}
> -
> -static BROTLI_INLINE BROTLI_BOOL IsMatch(const BrotliDictionary*
> dictionary,
> - DictWord w, const uint8_t* data, size_t max_length) {
> - if (w.len > max_length) {
> - return BROTLI_FALSE;
> - } else {
> - const size_t offset = dictionary->offsets_by_length[w.len] +
> - (size_t)w.len * (size_t)w.idx;
> - const uint8_t* dict = &dictionary->data[offset];
> - if (w.transform == 0) {
> - /* Match against base dictionary word. */
> - return
> - TO_BROTLI_BOOL(FindMatchLengthWithLimit(dict, data, w.len) ==
> w.len);
> - } else if (w.transform == 10) {
> - /* Match against uppercase first transform.
> - Note that there are only ASCII uppercase words in the lookup table. */
> - return TO_BROTLI_BOOL(dict[0] >= 'a' && dict[0] <= 'z' &&
> - (dict[0] ^ 32) == data[0] &&
> - FindMatchLengthWithLimit(&dict[1], &data[1], w.len - 1u) ==
> - w.len - 1u);
> - } else {
> - /* Match against uppercase all transform.
> - Note that there are only ASCII uppercase words in the lookup table. */
> - size_t i;
> - for (i = 0; i < w.len; ++i) {
> - if (dict[i] >= 'a' && dict[i] <= 'z') {
> - if ((dict[i] ^ 32) != data[i]) return BROTLI_FALSE;
> - } else {
> - if (dict[i] != data[i]) return BROTLI_FALSE;
> - }
> - }
> - return BROTLI_TRUE;
> - }
> - }
> -}
> -
> -BROTLI_BOOL BrotliFindAllStaticDictionaryMatches(
> - const BrotliEncoderDictionary* dictionary, const uint8_t* data,
> - size_t min_length, size_t max_length, uint32_t* matches) {
> - BROTLI_BOOL has_found_match = BROTLI_FALSE;
> - {
> - size_t offset = dictionary->buckets[Hash(data)];
> - BROTLI_BOOL end = !offset;
> - while (!end) {
> - DictWord w = dictionary->dict_words[offset++];
> - const size_t l = w.len & 0x1F;
> - const size_t n = (size_t)1 << dictionary->words->size_bits_by_length[l];
> - const size_t id = w.idx;
> - end = !!(w.len & 0x80);
> - w.len = (uint8_t)l;
> - if (w.transform == 0) {
> - const size_t matchlen =
> - DictMatchLength(dictionary->words, data, id, l, max_length);
> - const uint8_t* s;
> - size_t minlen;
> - size_t maxlen;
> - size_t len;
> - /* Transform "" + BROTLI_TRANSFORM_IDENTITY + "" */
> - if (matchlen == l) {
> - AddMatch(id, l, l, matches);
> - has_found_match = BROTLI_TRUE;
> - }
> - /* Transforms "" + BROTLI_TRANSFORM_OMIT_LAST_1 + "" and
> - "" + BROTLI_TRANSFORM_OMIT_LAST_1 + "ing " */
> - if (matchlen >= l - 1) {
> - AddMatch(id + 12 * n, l - 1, l, matches);
> - if (l + 2 < max_length &&
> - data[l - 1] == 'i' && data[l] == 'n' && data[l + 1] == 'g' &&
> - data[l + 2] == ' ') {
> - AddMatch(id + 49 * n, l + 3, l, matches);
> - }
> - has_found_match = BROTLI_TRUE;
> - }
> - /* Transform "" + BROTLI_TRANSFORM_OMIT_LAST_# + "" (# = 2 .. 9) */
> - minlen = min_length;
> - if (l > 9) minlen = BROTLI_MAX(size_t, minlen, l - 9);
> - maxlen = BROTLI_MIN(size_t, matchlen, l - 2);
> - for (len = minlen; len <= maxlen; ++len) {
> - size_t cut = l - len;
> - size_t transform_id = (cut << 2) +
> - (size_t)((dictionary->cutoffTransforms >> (cut * 6)) & 0x3F);
> - AddMatch(id + transform_id * n, len, l, matches);
> - has_found_match = BROTLI_TRUE;
> - }
> - if (matchlen < l || l + 6 >= max_length) {
> - continue;
> - }
> - s = &data[l];
> - /* Transforms "" + BROTLI_TRANSFORM_IDENTITY + <suffix> */
> - if (s[0] == ' ') {
> - AddMatch(id + n, l + 1, l, matches);
> - if (s[1] == 'a') {
> - if (s[2] == ' ') {
> - AddMatch(id + 28 * n, l + 3, l, matches);
> - } else if (s[2] == 's') {
> - if (s[3] == ' ') AddMatch(id + 46 * n, l + 4, l, matches);
> - } else if (s[2] == 't') {
> - if (s[3] == ' ') AddMatch(id + 60 * n, l + 4, l, matches);
> - } else if (s[2] == 'n') {
> - if (s[3] == 'd' && s[4] == ' ') {
> - AddMatch(id + 10 * n, l + 5, l, matches);
> - }
> - }
> - } else if (s[1] == 'b') {
> - if (s[2] == 'y' && s[3] == ' ') {
> - AddMatch(id + 38 * n, l + 4, l, matches);
> - }
> - } else if (s[1] == 'i') {
> - if (s[2] == 'n') {
> - if (s[3] == ' ') AddMatch(id + 16 * n, l + 4, l, matches);
> - } else if (s[2] == 's') {
> - if (s[3] == ' ') AddMatch(id + 47 * n, l + 4, l, matches);
> - }
> - } else if (s[1] == 'f') {
> - if (s[2] == 'o') {
> - if (s[3] == 'r' && s[4] == ' ') {
> - AddMatch(id + 25 * n, l + 5, l, matches);
> - }
> - } else if (s[2] == 'r') {
> - if (s[3] == 'o' && s[4] == 'm' && s[5] == ' ') {
> - AddMatch(id + 37 * n, l + 6, l, matches);
> - }
> - }
> - } else if (s[1] == 'o') {
> - if (s[2] == 'f') {
> - if (s[3] == ' ') AddMatch(id + 8 * n, l + 4, l, matches);
> - } else if (s[2] == 'n') {
> - if (s[3] == ' ') AddMatch(id + 45 * n, l + 4, l, matches);
> - }
> - } else if (s[1] == 'n') {
> - if (s[2] == 'o' && s[3] == 't' && s[4] == ' ') {
> - AddMatch(id + 80 * n, l + 5, l, matches);
> - }
> - } else if (s[1] == 't') {
> - if (s[2] == 'h') {
> - if (s[3] == 'e') {
> - if (s[4] == ' ') AddMatch(id + 5 * n, l + 5, l, matches);
> - } else if (s[3] == 'a') {
> - if (s[4] == 't' && s[5] == ' ') {
> - AddMatch(id + 29 * n, l + 6, l, matches);
> - }
> - }
> - } else if (s[2] == 'o') {
> - if (s[3] == ' ') AddMatch(id + 17 * n, l + 4, l, matches);
> - }
> - } else if (s[1] == 'w') {
> - if (s[2] == 'i' && s[3] == 't' && s[4] == 'h' && s[5] == ' ') {
> - AddMatch(id + 35 * n, l + 6, l, matches);
> - }
> - }
> - } else if (s[0] == '"') {
> - AddMatch(id + 19 * n, l + 1, l, matches);
> - if (s[1] == '>') {
> - AddMatch(id + 21 * n, l + 2, l, matches);
> - }
> - } else if (s[0] == '.') {
> - AddMatch(id + 20 * n, l + 1, l, matches);
> - if (s[1] == ' ') {
> - AddMatch(id + 31 * n, l + 2, l, matches);
> - if (s[2] == 'T' && s[3] == 'h') {
> - if (s[4] == 'e') {
> - if (s[5] == ' ') AddMatch(id + 43 * n, l + 6, l, matches);
> - } else if (s[4] == 'i') {
> - if (s[5] == 's' && s[6] == ' ') {
> - AddMatch(id + 75 * n, l + 7, l, matches);
> - }
> - }
> - }
> - }
> - } else if (s[0] == ',') {
> - AddMatch(id + 76 * n, l + 1, l, matches);
> - if (s[1] == ' ') {
> - AddMatch(id + 14 * n, l + 2, l, matches);
> - }
> - } else if (s[0] == '\n') {
> - AddMatch(id + 22 * n, l + 1, l, matches);
> - if (s[1] == '\t') {
> - AddMatch(id + 50 * n, l + 2, l, matches);
> - }
> - } else if (s[0] == ']') {
> - AddMatch(id + 24 * n, l + 1, l, matches);
> - } else if (s[0] == '\'') {
> - AddMatch(id + 36 * n, l + 1, l, matches);
> - } else if (s[0] == ':') {
> - AddMatch(id + 51 * n, l + 1, l, matches);
> - } else if (s[0] == '(') {
> - AddMatch(id + 57 * n, l + 1, l, matches);
> - } else if (s[0] == '=') {
> - if (s[1] == '"') {
> - AddMatch(id + 70 * n, l + 2, l, matches);
> - } else if (s[1] == '\'') {
> - AddMatch(id + 86 * n, l + 2, l, matches);
> - }
> - } else if (s[0] == 'a') {
> - if (s[1] == 'l' && s[2] == ' ') {
> - AddMatch(id + 84 * n, l + 3, l, matches);
> - }
> - } else if (s[0] == 'e') {
> - if (s[1] == 'd') {
> - if (s[2] == ' ') AddMatch(id + 53 * n, l + 3, l, matches);
> - } else if (s[1] == 'r') {
> - if (s[2] == ' ') AddMatch(id + 82 * n, l + 3, l, matches);
> - } else if (s[1] == 's') {
> - if (s[2] == 't' && s[3] == ' ') {
> - AddMatch(id + 95 * n, l + 4, l, matches);
> - }
> - }
> - } else if (s[0] == 'f') {
> - if (s[1] == 'u' && s[2] == 'l' && s[3] == ' ') {
> - AddMatch(id + 90 * n, l + 4, l, matches);
> - }
> - } else if (s[0] == 'i') {
> - if (s[1] == 'v') {
> - if (s[2] == 'e' && s[3] == ' ') {
> - AddMatch(id + 92 * n, l + 4, l, matches);
> - }
> - } else if (s[1] == 'z') {
> - if (s[2] == 'e' && s[3] == ' ') {
> - AddMatch(id + 100 * n, l + 4, l, matches);
> - }
> - }
> - } else if (s[0] == 'l') {
> - if (s[1] == 'e') {
> - if (s[2] == 's' && s[3] == 's' && s[4] == ' ') {
> - AddMatch(id + 93 * n, l + 5, l, matches);
> - }
> - } else if (s[1] == 'y') {
> - if (s[2] == ' ') AddMatch(id + 61 * n, l + 3, l, matches);
> - }
> - } else if (s[0] == 'o') {
> - if (s[1] == 'u' && s[2] == 's' && s[3] == ' ') {
> - AddMatch(id + 106 * n, l + 4, l, matches);
> - }
> - }
> - } else {
> - /* Set is_all_caps=0 for BROTLI_TRANSFORM_UPPERCASE_FIRST and
> - is_all_caps=1 otherwise (BROTLI_TRANSFORM_UPPERCASE_ALL)
> - transform. */
> - const BROTLI_BOOL is_all_caps =
> - TO_BROTLI_BOOL(w.transform !=
> BROTLI_TRANSFORM_UPPERCASE_FIRST);
> - const uint8_t* s;
> - if (!IsMatch(dictionary->words, w, data, max_length)) {
> - continue;
> - }
> - /* Transform "" + kUppercase{First,All} + "" */
> - AddMatch(id + (is_all_caps ? 44 : 9) * n, l, l, matches);
> - has_found_match = BROTLI_TRUE;
> - if (l + 1 >= max_length) {
> - continue;
> - }
> - /* Transforms "" + kUppercase{First,All} + <suffix> */
> - s = &data[l];
> - if (s[0] == ' ') {
> - AddMatch(id + (is_all_caps ? 68 : 4) * n, l + 1, l, matches);
> - } else if (s[0] == '"') {
> - AddMatch(id + (is_all_caps ? 87 : 66) * n, l + 1, l, matches);
> - if (s[1] == '>') {
> - AddMatch(id + (is_all_caps ? 97 : 69) * n, l + 2, l, matches);
> - }
> - } else if (s[0] == '.') {
> - AddMatch(id + (is_all_caps ? 101 : 79) * n, l + 1, l, matches);
> - if (s[1] == ' ') {
> - AddMatch(id + (is_all_caps ? 114 : 88) * n, l + 2, l, matches);
> - }
> - } else if (s[0] == ',') {
> - AddMatch(id + (is_all_caps ? 112 : 99) * n, l + 1, l, matches);
> - if (s[1] == ' ') {
> - AddMatch(id + (is_all_caps ? 107 : 58) * n, l + 2, l, matches);
> - }
> - } else if (s[0] == '\'') {
> - AddMatch(id + (is_all_caps ? 94 : 74) * n, l + 1, l, matches);
> - } else if (s[0] == '(') {
> - AddMatch(id + (is_all_caps ? 113 : 78) * n, l + 1, l, matches);
> - } else if (s[0] == '=') {
> - if (s[1] == '"') {
> - AddMatch(id + (is_all_caps ? 105 : 104) * n, l + 2, l, matches);
> - } else if (s[1] == '\'') {
> - AddMatch(id + (is_all_caps ? 116 : 108) * n, l + 2, l, matches);
> - }
> - }
> - }
> - }
> - }
> - /* Transforms with prefixes " " and "." */
> - if (max_length >= 5 && (data[0] == ' ' || data[0] == '.')) {
> - BROTLI_BOOL is_space = TO_BROTLI_BOOL(data[0] == ' ');
> - size_t offset = dictionary->buckets[Hash(&data[1])];
> - BROTLI_BOOL end = !offset;
> - while (!end) {
> - DictWord w = dictionary->dict_words[offset++];
> - const size_t l = w.len & 0x1F;
> - const size_t n = (size_t)1 << dictionary->words->size_bits_by_length[l];
> - const size_t id = w.idx;
> - end = !!(w.len & 0x80);
> - w.len = (uint8_t)l;
> - if (w.transform == 0) {
> - const uint8_t* s;
> - if (!IsMatch(dictionary->words, w, &data[1], max_length - 1)) {
> - continue;
> - }
> - /* Transforms " " + BROTLI_TRANSFORM_IDENTITY + "" and
> - "." + BROTLI_TRANSFORM_IDENTITY + "" */
> - AddMatch(id + (is_space ? 6 : 32) * n, l + 1, l, matches);
> - has_found_match = BROTLI_TRUE;
> - if (l + 2 >= max_length) {
> - continue;
> - }
> - /* Transforms " " + BROTLI_TRANSFORM_IDENTITY + <suffix> and
> - "." + BROTLI_TRANSFORM_IDENTITY + <suffix>
> - */
> - s = &data[l + 1];
> - if (s[0] == ' ') {
> - AddMatch(id + (is_space ? 2 : 77) * n, l + 2, l, matches);
> - } else if (s[0] == '(') {
> - AddMatch(id + (is_space ? 89 : 67) * n, l + 2, l, matches);
> - } else if (is_space) {
> - if (s[0] == ',') {
> - AddMatch(id + 103 * n, l + 2, l, matches);
> - if (s[1] == ' ') {
> - AddMatch(id + 33 * n, l + 3, l, matches);
> - }
> - } else if (s[0] == '.') {
> - AddMatch(id + 71 * n, l + 2, l, matches);
> - if (s[1] == ' ') {
> - AddMatch(id + 52 * n, l + 3, l, matches);
> - }
> - } else if (s[0] == '=') {
> - if (s[1] == '"') {
> - AddMatch(id + 81 * n, l + 3, l, matches);
> - } else if (s[1] == '\'') {
> - AddMatch(id + 98 * n, l + 3, l, matches);
> - }
> - }
> - }
> - } else if (is_space) {
> - /* Set is_all_caps=0 for BROTLI_TRANSFORM_UPPERCASE_FIRST and
> - is_all_caps=1 otherwise (BROTLI_TRANSFORM_UPPERCASE_ALL)
> - transform. */
> - const BROTLI_BOOL is_all_caps =
> - TO_BROTLI_BOOL(w.transform !=
> BROTLI_TRANSFORM_UPPERCASE_FIRST);
> - const uint8_t* s;
> - if (!IsMatch(dictionary->words, w, &data[1], max_length - 1)) {
> - continue;
> - }
> - /* Transforms " " + kUppercase{First,All} + "" */
> - AddMatch(id + (is_all_caps ? 85 : 30) * n, l + 1, l, matches);
> - has_found_match = BROTLI_TRUE;
> - if (l + 2 >= max_length) {
> - continue;
> - }
> - /* Transforms " " + kUppercase{First,All} + <suffix> */
> - s = &data[l + 1];
> - if (s[0] == ' ') {
> - AddMatch(id + (is_all_caps ? 83 : 15) * n, l + 2, l, matches);
> - } else if (s[0] == ',') {
> - if (!is_all_caps) {
> - AddMatch(id + 109 * n, l + 2, l, matches);
> - }
> - if (s[1] == ' ') {
> - AddMatch(id + (is_all_caps ? 111 : 65) * n, l + 3, l, matches);
> - }
> - } else if (s[0] == '.') {
> - AddMatch(id + (is_all_caps ? 115 : 96) * n, l + 2, l, matches);
> - if (s[1] == ' ') {
> - AddMatch(id + (is_all_caps ? 117 : 91) * n, l + 3, l, matches);
> - }
> - } else if (s[0] == '=') {
> - if (s[1] == '"') {
> - AddMatch(id + (is_all_caps ? 110 : 118) * n, l + 3, l, matches);
> - } else if (s[1] == '\'') {
> - AddMatch(id + (is_all_caps ? 119 : 120) * n, l + 3, l, matches);
> - }
> - }
> - }
> - }
> - }
> - if (max_length >= 6) {
> - /* Transforms with prefixes "e ", "s ", ", " and "\xC2\xA0" */
> - if ((data[1] == ' ' &&
> - (data[0] == 'e' || data[0] == 's' || data[0] == ',')) ||
> - (data[0] == 0xC2 && data[1] == 0xA0)) {
> - size_t offset = dictionary->buckets[Hash(&data[2])];
> - BROTLI_BOOL end = !offset;
> - while (!end) {
> - DictWord w = dictionary->dict_words[offset++];
> - const size_t l = w.len & 0x1F;
> - const size_t n = (size_t)1 << dictionary->words->size_bits_by_length[l];
> - const size_t id = w.idx;
> - end = !!(w.len & 0x80);
> - w.len = (uint8_t)l;
> - if (w.transform == 0 &&
> - IsMatch(dictionary->words, w, &data[2], max_length - 2)) {
> - if (data[0] == 0xC2) {
> - AddMatch(id + 102 * n, l + 2, l, matches);
> - has_found_match = BROTLI_TRUE;
> - } else if (l + 2 < max_length && data[l + 2] == ' ') {
> - size_t t = data[0] == 'e' ? 18 : (data[0] == 's' ? 7 : 13);
> - AddMatch(id + t * n, l + 3, l, matches);
> - has_found_match = BROTLI_TRUE;
> - }
> - }
> - }
> - }
> - }
> - if (max_length >= 9) {
> - /* Transforms with prefixes " the " and ".com/" */
> - if ((data[0] == ' ' && data[1] == 't' && data[2] == 'h' &&
> - data[3] == 'e' && data[4] == ' ') ||
> - (data[0] == '.' && data[1] == 'c' && data[2] == 'o' &&
> - data[3] == 'm' && data[4] == '/')) {
> - size_t offset = dictionary->buckets[Hash(&data[5])];
> - BROTLI_BOOL end = !offset;
> - while (!end) {
> - DictWord w = dictionary->dict_words[offset++];
> - const size_t l = w.len & 0x1F;
> - const size_t n = (size_t)1 << dictionary->words->size_bits_by_length[l];
> - const size_t id = w.idx;
> - end = !!(w.len & 0x80);
> - w.len = (uint8_t)l;
> - if (w.transform == 0 &&
> - IsMatch(dictionary->words, w, &data[5], max_length - 5)) {
> - AddMatch(id + (data[0] == ' ' ? 41 : 72) * n, l + 5, l, matches);
> - has_found_match = BROTLI_TRUE;
> - if (l + 5 < max_length) {
> - const uint8_t* s = &data[l + 5];
> - if (data[0] == ' ') {
> - if (l + 8 < max_length &&
> - s[0] == ' ' && s[1] == 'o' && s[2] == 'f' && s[3] == ' ') {
> - AddMatch(id + 62 * n, l + 9, l, matches);
> - if (l + 12 < max_length &&
> - s[4] == 't' && s[5] == 'h' && s[6] == 'e' && s[7] == ' ') {
> - AddMatch(id + 73 * n, l + 13, l, matches);
> - }
> - }
> - }
> - }
> - }
> - }
> - }
> - }
> - return has_found_match;
> -}
> -
> -#if defined(__cplusplus) || defined(c_plusplus)
> -} /* extern "C" */
> -#endif
> diff --git a/BaseTools/Source/C/BrotliCompress/enc/utf8_util.c
> b/BaseTools/Source/C/BrotliCompress/enc/utf8_util.c
> deleted file mode 100644
> index 9d21aa9fa3ed..000000000000
> --- a/BaseTools/Source/C/BrotliCompress/enc/utf8_util.c
> +++ /dev/null
> @@ -1,85 +0,0 @@
> -/* Copyright 2013 Google Inc. All Rights Reserved.
> -
> - Distributed under MIT license.
> - See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
> -*/
> -
> -/* Heuristics for deciding about the UTF8-ness of strings. */
> -
> -#include "./utf8_util.h"
> -
> -#include <brotli/types.h>
> -
> -#if defined(__cplusplus) || defined(c_plusplus)
> -extern "C" {
> -#endif
> -
> -static size_t BrotliParseAsUTF8(
> - int* symbol, const uint8_t* input, size_t size) {
> - /* ASCII */
> - if ((input[0] & 0x80) == 0) {
> - *symbol = input[0];
> - if (*symbol > 0) {
> - return 1;
> - }
> - }
> - /* 2-byte UTF8 */
> - if (size > 1u &&
> - (input[0] & 0xE0) == 0xC0 &&
> - (input[1] & 0xC0) == 0x80) {
> - *symbol = (((input[0] & 0x1F) << 6) |
> - (input[1] & 0x3F));
> - if (*symbol > 0x7F) {
> - return 2;
> - }
> - }
> - /* 3-byte UFT8 */
> - if (size > 2u &&
> - (input[0] & 0xF0) == 0xE0 &&
> - (input[1] & 0xC0) == 0x80 &&
> - (input[2] & 0xC0) == 0x80) {
> - *symbol = (((input[0] & 0x0F) << 12) |
> - ((input[1] & 0x3F) << 6) |
> - (input[2] & 0x3F));
> - if (*symbol > 0x7FF) {
> - return 3;
> - }
> - }
> - /* 4-byte UFT8 */
> - if (size > 3u &&
> - (input[0] & 0xF8) == 0xF0 &&
> - (input[1] & 0xC0) == 0x80 &&
> - (input[2] & 0xC0) == 0x80 &&
> - (input[3] & 0xC0) == 0x80) {
> - *symbol = (((input[0] & 0x07) << 18) |
> - ((input[1] & 0x3F) << 12) |
> - ((input[2] & 0x3F) << 6) |
> - (input[3] & 0x3F));
> - if (*symbol > 0xFFFF && *symbol <= 0x10FFFF) {
> - return 4;
> - }
> - }
> - /* Not UTF8, emit a special symbol above the UTF8-code space */
> - *symbol = 0x110000 | input[0];
> - return 1;
> -}
> -
> -/* Returns 1 if at least min_fraction of the data is UTF8-encoded.*/
> -BROTLI_BOOL BrotliIsMostlyUTF8(
> - const uint8_t* data, const size_t pos, const size_t mask,
> - const size_t length, const double min_fraction) {
> - size_t size_utf8 = 0;
> - size_t i = 0;
> - while (i < length) {
> - int symbol;
> - size_t bytes_read =
> - BrotliParseAsUTF8(&symbol, &data[(pos + i) & mask], length - i);
> - i += bytes_read;
> - if (symbol < 0x110000) size_utf8 += bytes_read;
> - }
> - return TO_BROTLI_BOOL(size_utf8 > min_fraction * (double)length);
> -}
> -
> -#if defined(__cplusplus) || defined(c_plusplus)
> -} /* extern "C" */
> -#endif
> diff --git a/BaseTools/Source/C/BrotliCompress/tools/brotli.c
> b/BaseTools/Source/C/BrotliCompress/tools/brotli.c
> deleted file mode 100644
> index b0246e1ecf86..000000000000
> --- a/BaseTools/Source/C/BrotliCompress/tools/brotli.c
> +++ /dev/null
> @@ -1,1143 +0,0 @@
> -/* Copyright 2014 Google Inc. All Rights Reserved.
> -
> - Distributed under MIT license.
> - See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
> -*/
> -
> -/* Command line interface for Brotli library. */
> -
> -#include <errno.h>
> -#include <fcntl.h>
> -#include <stdio.h>
> -#include <stdlib.h>
> -#include <string.h>
> -#include <sys/stat.h>
> -#include <sys/types.h>
> -#include <time.h>
> -
> -#include "../common/constants.h"
> -#include "../common/version.h"
> -#include <brotli/decode.h>
> -#include <brotli/encode.h>
> -
> -#if !defined(_WIN32)
> -#include <unistd.h>
> -#include <utime.h>
> -#define MAKE_BINARY(FILENO) (FILENO)
> -#else
> -#include <io.h>
> -#include <share.h>
> -#include <sys/utime.h>
> -
> -#define MAKE_BINARY(FILENO) (_setmode((FILENO), _O_BINARY),
> (FILENO))
> -
> -#if !defined(__MINGW32__)
> -#define STDIN_FILENO _fileno(stdin)
> -#define STDOUT_FILENO _fileno(stdout)
> -#define S_IRUSR S_IREAD
> -#define S_IWUSR S_IWRITE
> -#endif
> -
> -#define fdopen _fdopen
> -#define isatty _isatty
> -#define unlink _unlink
> -#define utimbuf _utimbuf
> -#define utime _utime
> -
> -#define fopen ms_fopen
> -#define open ms_open
> -
> -#define chmod(F, P) (0)
> -#define chown(F, O, G) (0)
> -
> -#if defined(_MSC_VER) && (_MSC_VER >= 1400)
> -#define fseek _fseeki64
> -#define ftell _ftelli64
> -#endif
> -
> -static FILE* ms_fopen(const char* filename, const char* mode) {
> - FILE* result = 0;
> - fopen_s(&result, filename, mode);
> - return result;
> -}
> -
> -static int ms_open(const char* filename, int oflag, int pmode) {
> - int result = -1;
> - _sopen_s(&result, filename, oflag | O_BINARY, _SH_DENYNO, pmode);
> - return result;
> -}
> -#endif /* WIN32 */
> -
> -typedef enum {
> - COMMAND_COMPRESS,
> - COMMAND_DECOMPRESS,
> - COMMAND_HELP,
> - COMMAND_INVALID,
> - COMMAND_TEST_INTEGRITY,
> - COMMAND_NOOP,
> - COMMAND_VERSION
> -} Command;
> -
> -#define DEFAULT_LGWIN 24
> -#define DEFAULT_SUFFIX ".br"
> -#define MAX_OPTIONS 20
> -#define DECODE_HEADER_SIZE 0x10
> -#define GAP_MEM_BLOCK 0x1000
> -
> -typedef struct {
> - /* Parameters */
> - int gmem;
> - int quality;
> - int lgwin;
> - BROTLI_BOOL force_overwrite;
> - BROTLI_BOOL junk_source;
> - BROTLI_BOOL copy_stat;
> - BROTLI_BOOL verbose;
> - BROTLI_BOOL write_to_stdout;
> - BROTLI_BOOL test_integrity;
> - BROTLI_BOOL decompress;
> - BROTLI_BOOL large_window;
> - const char* output_path;
> - const char* suffix;
> - int not_input_indices[MAX_OPTIONS];
> - size_t longest_path_len;
> - size_t input_count;
> -
> - /* Inner state */
> - int argc;
> - char** argv;
> - char* modified_path; /* Storage for path with appended / cut suffix */
> - int iterator;
> - int ignore;
> - BROTLI_BOOL iterator_error;
> - uint8_t* buffer;
> - uint8_t* input;
> - uint8_t* output;
> - const char* current_input_path;
> - const char* current_output_path;
> - int64_t input_file_length; /* -1, if impossible to calculate */
> - FILE* fin;
> - FILE* fout;
> -
> - /* I/O buffers */
> - size_t available_in;
> - const uint8_t* next_in;
> - size_t available_out;
> - uint8_t* next_out;
> -} Context;
> -
> -/* Parse up to 5 decimal digits. */
> -static BROTLI_BOOL ParseInt(const char* s, int low, int high, int* result) {
> - int value = 0;
> - int i;
> - for (i = 0; i < 5; ++i) {
> - char c = s[i];
> - if (c == 0) break;
> - if (s[i] < '0' || s[i] > '9') return BROTLI_FALSE;
> - value = (10 * value) + (c - '0');
> - }
> - if (i == 0) return BROTLI_FALSE;
> - if (i > 1 && s[0] == '0') return BROTLI_FALSE;
> - if (s[i] != 0) return BROTLI_FALSE;
> - if (value < low || value > high) return BROTLI_FALSE;
> - *result = value;
> - return BROTLI_TRUE;
> -}
> -
> -/* Returns "base file name" or its tail, if it contains '/' or '\'. */
> -static const char* FileName(const char* path) {
> - const char* separator_position = strrchr(path, '/');
> - if (separator_position) path = separator_position + 1;
> - separator_position = strrchr(path, '\\');
> - if (separator_position) path = separator_position + 1;
> - return path;
> -}
> -
> -/* Detect if the program name is a special alias that infers a command type.
> */
> -static Command ParseAlias(const char* name) {
> - /* TODO: cast name to lower case? */
> - const char* unbrotli = "unbrotli";
> - size_t unbrotli_len = strlen(unbrotli);
> - name = FileName(name);
> - /* Partial comparison. On Windows there could be ".exe" suffix. */
> - if (strncmp(name, unbrotli, unbrotli_len) == 0) {
> - char terminator = name[unbrotli_len];
> - if (terminator == 0 || terminator == '.') return COMMAND_DECOMPRESS;
> - }
> - return COMMAND_COMPRESS;
> -}
> -
> -static Command ParseParams(Context* params) {
> - int argc = params->argc;
> - char** argv = params->argv;
> - int i;
> - int next_option_index = 0;
> - size_t input_count = 0;
> - size_t longest_path_len = 1;
> - BROTLI_BOOL command_set = BROTLI_FALSE;
> - BROTLI_BOOL gmem_set = BROTLI_FALSE;
> - BROTLI_BOOL quality_set = BROTLI_FALSE;
> - BROTLI_BOOL output_set = BROTLI_FALSE;
> - BROTLI_BOOL keep_set = BROTLI_FALSE;
> - BROTLI_BOOL lgwin_set = BROTLI_FALSE;
> - BROTLI_BOOL suffix_set = BROTLI_FALSE;
> - BROTLI_BOOL after_dash_dash = BROTLI_FALSE;
> - Command command = ParseAlias(argv[0]);
> -
> - for (i = 1; i < argc; ++i) {
> - const char* arg = argv[i];
> - /* C99 5.1.2.2.1: "members argv[0] through argv[argc-1] inclusive shall
> - contain pointers to strings"; NULL and 0-length are not forbidden. */
> - size_t arg_len = arg ? strlen(arg) : 0;
> -
> - if (arg_len == 0) {
> - params->not_input_indices[next_option_index++] = i;
> - continue;
> - }
> -
> - /* Too many options. The expected longest option list is:
> - "-q 0 -w 10 -o f -D d -S b -d -f -k -n -v --", i.e. 16 items in total.
> - This check is an additional guard that is never triggered, but provides
> - a guard for future changes. */
> - if (next_option_index > (MAX_OPTIONS - 2)) {
> - fprintf(stderr, "too many options passed\n");
> - return COMMAND_INVALID;
> - }
> -
> - /* Input file entry. */
> - if (after_dash_dash || arg[0] != '-' || arg_len == 1) {
> - input_count++;
> - if (longest_path_len < arg_len) longest_path_len = arg_len;
> - continue;
> - }
> -
> - /* Not a file entry. */
> - params->not_input_indices[next_option_index++] = i;
> -
> - /* '--' entry stop parsing arguments. */
> - if (arg_len == 2 && arg[1] == '-') {
> - after_dash_dash = BROTLI_TRUE;
> - continue;
> - }
> -
> - /* Simple / coalesced options. */
> - if (arg[1] != '-') {
> - size_t j;
> - for (j = 1; j < arg_len; ++j) {
> - char c = arg[j];
> - if (c >= '0' && c <= '9') {
> - if (quality_set) {
> - fprintf(stderr, "quality already set\n");
> - return COMMAND_INVALID;
> - }
> - quality_set = BROTLI_TRUE;
> - params->quality = c - '0';
> - continue;
> - } else if (c == 'c') {
> - if (output_set) {
> - fprintf(stderr, "write to standard output already set\n");
> - return COMMAND_INVALID;
> - }
> - output_set = BROTLI_TRUE;
> - params->write_to_stdout = BROTLI_TRUE;
> - continue;
> - } else if (c == 'd') {
> - if (command_set) {
> - fprintf(stderr, "command already set when parsing -d\n");
> - return COMMAND_INVALID;
> - }
> - command_set = BROTLI_TRUE;
> - command = COMMAND_DECOMPRESS;
> - continue;
> - } else if (c == 'f') {
> - if (params->force_overwrite) {
> - fprintf(stderr, "force output overwrite already set\n");
> - return COMMAND_INVALID;
> - }
> - params->force_overwrite = BROTLI_TRUE;
> - continue;
> - } else if (c == 'h') {
> - /* Don't parse further. */
> - return COMMAND_HELP;
> - } else if (c == 'j' || c == 'k') {
> - if (keep_set) {
> - fprintf(stderr, "argument --rm / -j or --keep / -n already set\n");
> - return COMMAND_INVALID;
> - }
> - keep_set = BROTLI_TRUE;
> - params->junk_source = TO_BROTLI_BOOL(c == 'j');
> - continue;
> - } else if (c == 'n') {
> - if (!params->copy_stat) {
> - fprintf(stderr, "argument --no-copy-stat / -n already set\n");
> - return COMMAND_INVALID;
> - }
> - params->copy_stat = BROTLI_FALSE;
> - continue;
> - } else if (c == 't') {
> - if (command_set) {
> - fprintf(stderr, "command already set when parsing -t\n");
> - return COMMAND_INVALID;
> - }
> - command_set = BROTLI_TRUE;
> - command = COMMAND_TEST_INTEGRITY;
> - continue;
> - } else if (c == 'v') {
> - if (params->verbose) {
> - fprintf(stderr, "argument --verbose / -v already set\n");
> - return COMMAND_INVALID;
> - }
> - params->verbose = BROTLI_TRUE;
> - continue;
> - } else if (c == 'V') {
> - /* Don't parse further. */
> - return COMMAND_VERSION;
> - } else if (c == 'Z') {
> - if (quality_set) {
> - fprintf(stderr, "quality already set\n");
> - return COMMAND_INVALID;
> - }
> - quality_set = BROTLI_TRUE;
> - params->quality = 11;
> - continue;
> - }
> - /* o/q/w/D/S with parameter is expected */
> - if (c != 'o' && c != 'q' && c != 'w' && c != 'D' && c != 'S') {
> - fprintf(stderr, "invalid argument -%c\n", c);
> - return COMMAND_INVALID;
> - }
> - if (j + 1 != arg_len) {
> - fprintf(stderr, "expected parameter for argument -%c\n", c);
> - return COMMAND_INVALID;
> - }
> - i++;
> - if (i == argc || !argv[i] || argv[i][0] == 0) {
> - fprintf(stderr, "expected parameter for argument -%c\n", c);
> - return COMMAND_INVALID;
> - }
> - params->not_input_indices[next_option_index++] = i;
> - if (c == 'o') {
> - if (output_set) {
> - fprintf(stderr, "write to standard output already set (-o)\n");
> - return COMMAND_INVALID;
> - }
> - params->output_path = argv[i];
> - } else if (c == 'g') {
> - gmem_set = ParseInt(argv[i], 1, 0x10, ¶ms->gmem);
> - if (!gmem_set) {
> - fprintf(stderr, "error parsing gmem value [%s]\n", argv[i]);
> - return COMMAND_INVALID;
> - }
> - } else if (c == 'q') {
> - if (quality_set) {
> - fprintf(stderr, "quality already set\n");
> - return COMMAND_INVALID;
> - }
> - quality_set = ParseInt(argv[i], BROTLI_MIN_QUALITY,
> - BROTLI_MAX_QUALITY, ¶ms->quality);
> - if (!quality_set) {
> - fprintf(stderr, "error parsing quality value [%s]\n", argv[i]);
> - return COMMAND_INVALID;
> - }
> - } else if (c == 'w') {
> - if (lgwin_set) {
> - fprintf(stderr, "lgwin parameter already set\n");
> - return COMMAND_INVALID;
> - }
> - lgwin_set = ParseInt(argv[i], 0,
> - BROTLI_MAX_WINDOW_BITS, ¶ms->lgwin);
> - if (!lgwin_set) {
> - fprintf(stderr, "error parsing lgwin value [%s]\n", argv[i]);
> - return COMMAND_INVALID;
> - }
> - if (params->lgwin != 0 && params->lgwin <
> BROTLI_MIN_WINDOW_BITS) {
> - fprintf(stderr,
> - "lgwin parameter (%d) smaller than the minimum (%d)\n",
> - params->lgwin, BROTLI_MIN_WINDOW_BITS);
> - return COMMAND_INVALID;
> - }
> - } else if (c == 'S') {
> - if (suffix_set) {
> - fprintf(stderr, "suffix already set\n");
> - return COMMAND_INVALID;
> - }
> - suffix_set = BROTLI_TRUE;
> - params->suffix = argv[i];
> - }
> - }
> - } else { /* Double-dash. */
> - arg = &arg[2];
> - if (strcmp("best", arg) == 0) {
> - if (quality_set) {
> - fprintf(stderr, "quality already set\n");
> - return COMMAND_INVALID;
> - }
> - quality_set = BROTLI_TRUE;
> - params->quality = 11;
> - } else if (strcmp("decompress", arg) == 0) {
> - if (command_set) {
> - fprintf(stderr, "command already set when parsing --decompress\n");
> - return COMMAND_INVALID;
> - }
> - command_set = BROTLI_TRUE;
> - command = COMMAND_DECOMPRESS;
> - } else if (strcmp("force", arg) == 0) {
> - if (params->force_overwrite) {
> - fprintf(stderr, "force output overwrite already set\n");
> - return COMMAND_INVALID;
> - }
> - params->force_overwrite = BROTLI_TRUE;
> - } else if (strcmp("help", arg) == 0) {
> - /* Don't parse further. */
> - return COMMAND_HELP;
> - } else if (strcmp("keep", arg) == 0) {
> - if (keep_set) {
> - fprintf(stderr, "argument --rm / -j or --keep / -n already set\n");
> - return COMMAND_INVALID;
> - }
> - keep_set = BROTLI_TRUE;
> - params->junk_source = BROTLI_FALSE;
> - } else if (strcmp("no-copy-stat", arg) == 0) {
> - if (!params->copy_stat) {
> - fprintf(stderr, "argument --no-copy-stat / -n already set\n");
> - return COMMAND_INVALID;
> - }
> - params->copy_stat = BROTLI_FALSE;
> - } else if (strcmp("rm", arg) == 0) {
> - if (keep_set) {
> - fprintf(stderr, "argument --rm / -j or --keep / -n already set\n");
> - return COMMAND_INVALID;
> - }
> - keep_set = BROTLI_TRUE;
> - params->junk_source = BROTLI_TRUE;
> - } else if (strcmp("stdout", arg) == 0) {
> - if (output_set) {
> - fprintf(stderr, "write to standard output already set\n");
> - return COMMAND_INVALID;
> - }
> - output_set = BROTLI_TRUE;
> - params->write_to_stdout = BROTLI_TRUE;
> - } else if (strcmp("test", arg) == 0) {
> - if (command_set) {
> - fprintf(stderr, "command already set when parsing --test\n");
> - return COMMAND_INVALID;
> - }
> - command_set = BROTLI_TRUE;
> - command = COMMAND_TEST_INTEGRITY;
> - } else if (strcmp("verbose", arg) == 0) {
> - if (params->verbose) {
> - fprintf(stderr, "argument --verbose / -v already set\n");
> - return COMMAND_INVALID;
> - }
> - params->verbose = BROTLI_TRUE;
> - } else if (strcmp("version", arg) == 0) {
> - /* Don't parse further. */
> - return COMMAND_VERSION;
> - } else {
> - /* key=value */
> - const char* value = strrchr(arg, '=');
> - size_t key_len;
> - if (!value || value[1] == 0) {
> - fprintf(stderr, "must pass the parameter as --%s=value\n", arg);
> - return COMMAND_INVALID;
> - }
> - key_len = (size_t)(value - arg);
> - value++;
> - if (strncmp("lgwin", arg, key_len) == 0) {
> - if (lgwin_set) {
> - fprintf(stderr, "lgwin parameter already set\n");
> - return COMMAND_INVALID;
> - }
> - lgwin_set = ParseInt(value, 0,
> - BROTLI_MAX_WINDOW_BITS, ¶ms->lgwin);
> - if (!lgwin_set) {
> - fprintf(stderr, "error parsing lgwin value [%s]\n", value);
> - return COMMAND_INVALID;
> - }
> - if (params->lgwin != 0 && params->lgwin <
> BROTLI_MIN_WINDOW_BITS) {
> - fprintf(stderr,
> - "lgwin parameter (%d) smaller than the minimum (%d)\n",
> - params->lgwin, BROTLI_MIN_WINDOW_BITS);
> - return COMMAND_INVALID;
> - }
> - } else if (strncmp("large_window", arg, key_len) == 0) {
> - /* This option is intentionally not mentioned in help. */
> - if (lgwin_set) {
> - fprintf(stderr, "lgwin parameter already set\n");
> - return COMMAND_INVALID;
> - }
> - lgwin_set = ParseInt(value, 0,
> - BROTLI_LARGE_MAX_WINDOW_BITS, ¶ms->lgwin);
> - if (!lgwin_set) {
> - fprintf(stderr, "error parsing lgwin value [%s]\n", value);
> - return COMMAND_INVALID;
> - }
> - if (params->lgwin != 0 && params->lgwin <
> BROTLI_MIN_WINDOW_BITS) {
> - fprintf(stderr,
> - "lgwin parameter (%d) smaller than the minimum (%d)\n",
> - params->lgwin, BROTLI_MIN_WINDOW_BITS);
> - return COMMAND_INVALID;
> - }
> - } else if (strncmp("output", arg, key_len) == 0) {
> - if (output_set) {
> - fprintf(stderr,
> - "write to standard output already set (--output)\n");
> - return COMMAND_INVALID;
> - }
> - params->output_path = value;
> - } else if (strncmp("gap", arg, key_len) == 0) {
> - gmem_set = ParseInt(value, 1, 0x10, ¶ms->gmem);
> - if (!gmem_set) {
> - fprintf(stderr, "error parsing gmem value [%s]\n", value);
> - return COMMAND_INVALID;
> - }
> - } else if (strncmp("quality", arg, key_len) == 0) {
> - if (quality_set) {
> - fprintf(stderr, "quality already set\n");
> - return COMMAND_INVALID;
> - }
> - quality_set = ParseInt(value, BROTLI_MIN_QUALITY,
> - BROTLI_MAX_QUALITY, ¶ms->quality);
> - if (!quality_set) {
> - fprintf(stderr, "error parsing quality value [%s]\n", value);
> - return COMMAND_INVALID;
> - }
> - } else if (strncmp("suffix", arg, key_len) == 0) {
> - if (suffix_set) {
> - fprintf(stderr, "suffix already set\n");
> - return COMMAND_INVALID;
> - }
> - suffix_set = BROTLI_TRUE;
> - params->suffix = value;
> - } else {
> - fprintf(stderr, "invalid parameter: [%s]\n", arg);
> - return COMMAND_INVALID;
> - }
> - }
> - }
> - }
> -
> - params->input_count = input_count;
> - params->longest_path_len = longest_path_len;
> - params->decompress = (command == COMMAND_DECOMPRESS);
> - params->test_integrity = (command == COMMAND_TEST_INTEGRITY);
> -
> - if (input_count > 1 && output_set) return COMMAND_INVALID;
> - if (params->test_integrity) {
> - if (params->output_path) return COMMAND_INVALID;
> - if (params->write_to_stdout) return COMMAND_INVALID;
> - }
> - if (strchr(params->suffix, '/') || strchr(params->suffix, '\\')) {
> - return COMMAND_INVALID;
> - }
> -
> - return command;
> -}
> -
> -static void PrintVersion(void) {
> - int major = BROTLI_VERSION >> 24;
> - int minor = (BROTLI_VERSION >> 12) & 0xFFF;
> - int patch = BROTLI_VERSION & 0xFFF;
> - fprintf(stdout, "brotli %d.%d.%d\n", major, minor, patch);
> -}
> -
> -static void PrintHelp(const char* name, BROTLI_BOOL error) {
> - FILE* media = error ? stderr : stdout;
> - /* String is cut to pieces with length less than 509, to conform C90 spec. */
> - fprintf(media,
> -"Usage: %s [OPTION]... [FILE]...\n",
> - name);
> - fprintf(media,
> -"Options:\n"
> -" -# compression level (0-9)\n"
> -" -c, --stdout write on standard output\n"
> -" -d, --decompress decompress\n"
> -" -f, --force force output file overwrite\n"
> -" -h, --help display this help and exit\n");
> - fprintf(media,
> -" -j, --rm remove source file(s)\n"
> -" -k, --keep keep source file(s) (default)\n"
> -" -n, --no-copy-stat do not copy source file(s) attributes\n"
> -" -o FILE, --output=FILE output file (only if 1 input file)\n");
> - fprintf(media,
> -" -g NUM, --gap=NUM scratch memory gap level (1-16)\n");
> - fprintf(media,
> -" -q NUM, --quality=NUM compression level (%d-%d)\n",
> - BROTLI_MIN_QUALITY, BROTLI_MAX_QUALITY);
> - fprintf(media,
> -" -t, --test test compressed file integrity\n"
> -" -v, --verbose verbose mode\n");
> - fprintf(media,
> -" -w NUM, --lgwin=NUM set LZ77 window size (0, %d-%d)\n",
> - BROTLI_MIN_WINDOW_BITS, BROTLI_MAX_WINDOW_BITS);
> - fprintf(media,
> -" window size = 2**NUM - 16\n"
> -" 0 lets compressor choose the optimal value\n");
> - fprintf(media,
> -" -S SUF, --suffix=SUF output file suffix (default:'%s')\n",
> - DEFAULT_SUFFIX);
> - fprintf(media,
> -" -V, --version display version and exit\n"
> -" -Z, --best use best compression level (11) (default)\n"
> -"Simple options could be coalesced, i.e. '-9kf' is equivalent to '-9 -k -f'.\n"
> -"With no FILE, or when FILE is -, read standard input.\n"
> -"All arguments after '--' are treated as files.\n");
> -}
> -
> -static const char* PrintablePath(const char* path) {
> - return path ? path : "con";
> -}
> -
> -static BROTLI_BOOL OpenInputFile(const char* input_path, FILE** f) {
> - *f = NULL;
> - if (!input_path) {
> - *f = fdopen(MAKE_BINARY(STDIN_FILENO), "rb");
> - return BROTLI_TRUE;
> - }
> - *f = fopen(input_path, "rb");
> - if (!*f) {
> - fprintf(stderr, "failed to open input file [%s]: %s\n",
> - PrintablePath(input_path), strerror(errno));
> - return BROTLI_FALSE;
> - }
> - return BROTLI_TRUE;
> -}
> -
> -static BROTLI_BOOL OpenOutputFile(const char* output_path, FILE** f,
> - BROTLI_BOOL force) {
> - int fd;
> - *f = NULL;
> - if (!output_path) {
> - *f = fdopen(MAKE_BINARY(STDOUT_FILENO), "wb");
> - return BROTLI_TRUE;
> - }
> - fd = open(output_path, O_CREAT | (force ? 0 : O_EXCL) | O_WRONLY |
> O_TRUNC,
> - S_IRUSR | S_IWUSR);
> - if (fd < 0) {
> - fd = open(output_path, (force ? 0 : O_EXCL) | O_WRONLY | O_TRUNC,
> - S_IRUSR | S_IWUSR);
> - if (fd < 0) {
> - fprintf(stderr, "failed to open output file [%s]: %s\n",
> - PrintablePath(output_path), strerror(errno));
> - return BROTLI_FALSE;
> - }
> - }
> -
> - *f = fdopen(fd, "wb");
> - if (!*f) {
> - fprintf(stderr, "failed to open output file [%s]: %s\n",
> - PrintablePath(output_path), strerror(errno));
> - return BROTLI_FALSE;
> - }
> - return BROTLI_TRUE;
> -}
> -
> -static int64_t FileSize(const char* path) {
> - FILE* f = fopen(path, "rb");
> - int64_t retval;
> - if (f == NULL) {
> - return -1;
> - }
> - if (fseek(f, 0L, SEEK_END) != 0) {
> - fclose(f);
> - return -1;
> - }
> - retval = ftell(f);
> - if (fclose(f) != 0) {
> - return -1;
> - }
> - return retval;
> -}
> -
> -/* Copy file times and permissions.
> - TODO: this is a "best effort" implementation; honest cross-platform
> - fully featured implementation is way too hacky; add more hacks by
> request. */
> -static void CopyStat(const char* input_path, const char* output_path) {
> - struct stat statbuf;
> - struct utimbuf times;
> - int res;
> - if (input_path == 0 || output_path == 0) {
> - return;
> - }
> - if (stat(input_path, &statbuf) != 0) {
> - return;
> - }
> - times.actime = statbuf.st_atime;
> - times.modtime = statbuf.st_mtime;
> - utime(output_path, ×);
> - res = chmod(output_path, statbuf.st_mode & (S_IRWXU | S_IRWXG |
> S_IRWXO));
> - if (res != 0) {
> - fprintf(stderr, "setting access bits failed for [%s]: %s\n",
> - PrintablePath(output_path), strerror(errno));
> - }
> - res = chown(output_path, (uid_t)-1, statbuf.st_gid);
> - if (res != 0) {
> - fprintf(stderr, "setting group failed for [%s]: %s\n",
> - PrintablePath(output_path), strerror(errno));
> - }
> - res = chown(output_path, statbuf.st_uid, (gid_t)-1);
> - if (res != 0) {
> - fprintf(stderr, "setting user failed for [%s]: %s\n",
> - PrintablePath(output_path), strerror(errno));
> - }
> -}
> -
> -int64_t input_file_length = 0;
> -
> -static BROTLI_BOOL NextFile(Context* context) {
> - const char* arg;
> - size_t arg_len;
> -
> - /* Iterator points to last used arg; increment to search for the next one. */
> - context->iterator++;
> -
> - context->input_file_length = -1;
> -
> - /* No input path; read from console. */
> - if (context->input_count == 0) {
> - if (context->iterator > 1) return BROTLI_FALSE;
> - context->current_input_path = NULL;
> - /* Either write to the specified path, or to console. */
> - context->current_output_path = context->output_path;
> - return BROTLI_TRUE;
> - }
> -
> - /* Skip option arguments. */
> - while (context->iterator == context->not_input_indices[context->ignore])
> {
> - context->iterator++;
> - context->ignore++;
> - }
> -
> - /* All args are scanned already. */
> - if (context->iterator >= context->argc) return BROTLI_FALSE;
> -
> - /* Iterator now points to the input file name. */
> - arg = context->argv[context->iterator];
> - arg_len = strlen(arg);
> - /* Read from console. */
> - if (arg_len == 1 && arg[0] == '-') {
> - context->current_input_path = NULL;
> - context->current_output_path = context->output_path;
> - return BROTLI_TRUE;
> - }
> -
> - if (context->current_input_path == NULL) {
> - context->current_input_path = arg;
> - }
> - context->input_file_length = FileSize(context->current_input_path);
> - context->current_output_path = context->output_path;
> - if (!context->decompress) {
> - input_file_length += context->input_file_length;
> - }
> -
> - if (context->output_path) return BROTLI_TRUE;
> - if (context->write_to_stdout) return BROTLI_TRUE;
> -
> - strcpy(context->modified_path, arg);
> - context->current_output_path = context->modified_path;
> - /* If output is not specified, input path suffix should match. */
> - if (context->decompress) {
> - size_t suffix_len = strlen(context->suffix);
> - char* name = (char*)FileName(context->modified_path);
> - char* name_suffix;
> - size_t name_len = strlen(name);
> - if (name_len < suffix_len + 1) {
> - fprintf(stderr, "empty output file name for [%s] input file\n",
> - PrintablePath(arg));
> - context->iterator_error = BROTLI_TRUE;
> - return BROTLI_FALSE;
> - }
> - name_suffix = name + name_len - suffix_len;
> - if (strcmp(context->suffix, name_suffix) != 0) {
> - fprintf(stderr, "input file [%s] suffix mismatch\n",
> - PrintablePath(arg));
> - context->iterator_error = BROTLI_TRUE;
> - return BROTLI_FALSE;
> - }
> - name_suffix[0] = 0;
> - return BROTLI_TRUE;
> - } else {
> - strcpy(context->modified_path + arg_len, context->suffix);
> - return BROTLI_TRUE;
> - }
> -}
> -
> -static BROTLI_BOOL OpenFiles(Context* context) {
> - BROTLI_BOOL is_ok = OpenInputFile(context->current_input_path,
> &context->fin);
> - if (context->decompress) {
> - //
> - // skip the decoder data header
> - //
> - fseek(context->fin, DECODE_HEADER_SIZE, SEEK_SET);
> - }
> - if (!context->test_integrity && is_ok && context->fout == NULL) {
> - is_ok = OpenOutputFile(
> - context->current_output_path, &context->fout, context-
> >force_overwrite);
> - }
> - if (!context->decompress) {
> - //
> - // append the decoder data header
> - //
> - fseek(context->fout, DECODE_HEADER_SIZE, SEEK_SET);
> - }
> - return is_ok;
> -}
> -
> -static BROTLI_BOOL CloseFiles(Context* context, BROTLI_BOOL success) {
> - BROTLI_BOOL is_ok = BROTLI_TRUE;
> - if (!context->test_integrity && context->fout) {
> - if (!success && context->current_output_path) {
> - unlink(context->current_output_path);
> - }
> - if (fclose(context->fout) != 0) {
> - if (success) {
> - fprintf(stderr, "fclose failed [%s]: %s\n",
> - PrintablePath(context->current_output_path), strerror(errno));
> - }
> - is_ok = BROTLI_FALSE;
> - }
> -
> - /* TOCTOU violation, but otherwise it is impossible to set file times. */
> - if (success && is_ok && context->copy_stat) {
> - CopyStat(context->current_input_path, context->current_output_path);
> - }
> - }
> -
> - if (context->fin) {
> - if (fclose(context->fin) != 0) {
> - if (is_ok) {
> - fprintf(stderr, "fclose failed [%s]: %s\n",
> - PrintablePath(context->current_input_path), strerror(errno));
> - }
> - is_ok = BROTLI_FALSE;
> - }
> - }
> - if (success && context->junk_source && context->current_input_path) {
> - unlink(context->current_input_path);
> - }
> -
> - context->fin = NULL;
> - context->fout = NULL;
> -
> - return is_ok;
> -}
> -
> -static const size_t kFileBufferSize = 1 << 16;
> -
> -static void InitializeBuffers(Context* context) {
> - context->available_in = 0;
> - context->next_in = NULL;
> - context->available_out = kFileBufferSize;
> - context->next_out = context->output;
> -}
> -
> -static BROTLI_BOOL HasMoreInput(Context* context) {
> - return feof(context->fin) ? BROTLI_FALSE : BROTLI_TRUE;
> -}
> -
> -static BROTLI_BOOL ProvideInput(Context* context) {
> - context->available_in =
> - fread(context->input, 1, kFileBufferSize, context->fin);
> - context->next_in = context->input;
> - if (ferror(context->fin)) {
> - fprintf(stderr, "failed to read input [%s]: %s\n",
> - PrintablePath(context->current_input_path), strerror(errno));
> - return BROTLI_FALSE;
> - }
> - return BROTLI_TRUE;
> -}
> -
> -/* Internal: should be used only in Provide-/Flush-Output. */
> -static BROTLI_BOOL WriteOutput(Context* context) {
> - size_t out_size = (size_t)(context->next_out - context->output);
> - if (out_size == 0) return BROTLI_TRUE;
> - if (context->test_integrity) return BROTLI_TRUE;
> -
> - fwrite(context->output, 1, out_size, context->fout);
> - if (ferror(context->fout)) {
> - fprintf(stderr, "failed to write output [%s]: %s\n",
> - PrintablePath(context->current_output_path), strerror(errno));
> - return BROTLI_FALSE;
> - }
> - return BROTLI_TRUE;
> -}
> -
> -static BROTLI_BOOL ProvideOutput(Context* context) {
> - if (!WriteOutput(context)) return BROTLI_FALSE;
> - context->available_out = kFileBufferSize;
> - context->next_out = context->output;
> - return BROTLI_TRUE;
> -}
> -
> -static BROTLI_BOOL FlushOutput(Context* context) {
> - if (!WriteOutput(context)) return BROTLI_FALSE;
> - context->available_out = 0;
> - return BROTLI_TRUE;
> -}
> -
> -static BROTLI_BOOL DecompressFile(Context* context, BrotliDecoderState*
> s) {
> - BrotliDecoderResult result =
> BROTLI_DECODER_RESULT_NEEDS_MORE_INPUT;
> - InitializeBuffers(context);
> - for (;;) {
> - if (result == BROTLI_DECODER_RESULT_NEEDS_MORE_INPUT) {
> - if (!HasMoreInput(context)) {
> - fprintf(stderr, "corrupt input [%s]\n",
> - PrintablePath(context->current_input_path));
> - return BROTLI_FALSE;
> - }
> - if (!ProvideInput(context)) return BROTLI_FALSE;
> - } else if (result == BROTLI_DECODER_RESULT_NEEDS_MORE_OUTPUT) {
> - if (!ProvideOutput(context)) return BROTLI_FALSE;
> - } else if (result == BROTLI_DECODER_RESULT_SUCCESS) {
> - if (!FlushOutput(context)) return BROTLI_FALSE;
> - if (context->available_in != 0 || HasMoreInput(context)) {
> - fprintf(stderr, "corrupt input [%s]\n",
> - PrintablePath(context->current_input_path));
> - return BROTLI_FALSE;
> - }
> - return BROTLI_TRUE;
> - } else {
> - fprintf(stderr, "corrupt input [%s]\n",
> - PrintablePath(context->current_input_path));
> - return BROTLI_FALSE;
> - }
> -
> - result = BrotliDecoderDecompressStream(s, &context->available_in,
> - &context->next_in, &context->available_out, &context->next_out, 0);
> - }
> -}
> -
> -/* Default brotli_alloc_func */
> -void* BrotliAllocFunc(void* opaque, size_t size) {
> - *(size_t *)opaque = *(size_t *) opaque + size;
> - return malloc(size);
> -}
> -
> -/* Default brotli_free_func */
> -void BrotliFreeFunc(void* opaque, void* address) {
> - free(address);
> -}
> -
> -size_t scratch_buffer_size = 0;
> -
> -static BROTLI_BOOL DecompressFiles(Context* context) {
> - while (NextFile(context)) {
> - BROTLI_BOOL is_ok = BROTLI_TRUE;
> - BrotliDecoderState* s = BrotliDecoderCreateInstance(BrotliAllocFunc,
> BrotliFreeFunc, &scratch_buffer_size);
> - if (!s) {
> - fprintf(stderr, "out of memory\n");
> - return BROTLI_FALSE;
> - }
> - /* This allows decoding "large-window" streams. Though it creates
> - fragmentation (new builds decode streams that old builds don't),
> - it is better from used experience perspective. */
> - BrotliDecoderSetParameter(s,
> BROTLI_DECODER_PARAM_LARGE_WINDOW, 1u);
> - is_ok = OpenFiles(context);
> - if (is_ok && !context->current_input_path &&
> - !context->force_overwrite && isatty(STDIN_FILENO)) {
> - fprintf(stderr, "Use -h help. Use -f to force input from a terminal.\n");
> - is_ok = BROTLI_FALSE;
> - }
> - if (is_ok) is_ok = DecompressFile(context, s);
> - BrotliDecoderDestroyInstance(s);
> - if (!CloseFiles(context, is_ok)) is_ok = BROTLI_FALSE;
> - if (!is_ok) return BROTLI_FALSE;
> - }
> - return BROTLI_TRUE;
> -}
> -
> -static BROTLI_BOOL CompressFile(Context* context, BrotliEncoderState* s)
> {
> - BROTLI_BOOL is_eof = BROTLI_FALSE;
> - InitializeBuffers(context);
> - for (;;) {
> - if (context->available_in == 0 && !is_eof) {
> - if (!ProvideInput(context)) return BROTLI_FALSE;
> - is_eof = !HasMoreInput(context);
> - }
> -
> - if (!BrotliEncoderCompressStream(s,
> - is_eof ? BROTLI_OPERATION_FINISH : BROTLI_OPERATION_PROCESS,
> - &context->available_in, &context->next_in,
> - &context->available_out, &context->next_out, NULL)) {
> - /* Should detect OOM? */
> - fprintf(stderr, "failed to compress data [%s]\n",
> - PrintablePath(context->current_input_path));
> - return BROTLI_FALSE;
> - }
> -
> - if (context->available_out == 0) {
> - if (!ProvideOutput(context)) return BROTLI_FALSE;
> - }
> -
> - if (BrotliEncoderIsFinished(s)) {
> - return FlushOutput(context);
> - }
> - }
> -}
> -
> -static BROTLI_BOOL CompressFiles(Context* context) {
> - while (NextFile(context)) {
> - BROTLI_BOOL is_ok = BROTLI_TRUE;
> - BrotliEncoderState* s = BrotliEncoderCreateInstance(NULL, NULL, NULL);
> - if (!s) {
> - fprintf(stderr, "out of memory\n");
> - return BROTLI_FALSE;
> - }
> - BrotliEncoderSetParameter(s,
> - BROTLI_PARAM_QUALITY, (uint32_t)context->quality);
> - if (context->lgwin > 0) {
> - /* Specified by user. */
> - /* Do not enable "large-window" extension, if not required. */
> - if (context->lgwin > BROTLI_MAX_WINDOW_BITS) {
> - BrotliEncoderSetParameter(s, BROTLI_PARAM_LARGE_WINDOW, 1u);
> - }
> - BrotliEncoderSetParameter(s,
> - BROTLI_PARAM_LGWIN, (uint32_t)context->lgwin);
> - } else {
> - /* 0, or not specified by user; could be chosen by compressor. */
> - uint32_t lgwin = DEFAULT_LGWIN;
> - /* Use file size to limit lgwin. */
> - if (context->input_file_length >= 0) {
> - int32_t size = 1 << BROTLI_MIN_WINDOW_BITS;
> - lgwin = BROTLI_MIN_WINDOW_BITS;
> - while (size < context->input_file_length) {
> - size <<= 1;
> - lgwin++;
> - if (lgwin == BROTLI_MAX_WINDOW_BITS) break;
> - }
> - }
> - BrotliEncoderSetParameter(s, BROTLI_PARAM_LGWIN, lgwin);
> - }
> - if (context->input_file_length > 0) {
> - uint32_t size_hint = context->input_file_length < (1 << 30) ?
> - (uint32_t)context->input_file_length : (1u << 30);
> - BrotliEncoderSetParameter(s, BROTLI_PARAM_SIZE_HINT, size_hint);
> - }
> - is_ok = OpenFiles(context);
> - if (is_ok && !context->current_output_path &&
> - !context->force_overwrite && isatty(STDOUT_FILENO)) {
> - fprintf(stderr, "Use -h help. Use -f to force output to a terminal.\n");
> - is_ok = BROTLI_FALSE;
> - }
> - if (is_ok) is_ok = CompressFile(context, s);
> - BrotliEncoderDestroyInstance(s);
> - if (!CloseFiles(context, is_ok)) is_ok = BROTLI_FALSE;
> - if (!is_ok) return BROTLI_FALSE;
> - }
> - return BROTLI_TRUE;
> -}
> -
> -int main(int argc, char** argv) {
> - Command command;
> - Context context;
> - Context context_dec;
> - BROTLI_BOOL is_ok = BROTLI_TRUE;
> - int i;
> -
> - context.quality = 11;
> - context.lgwin = -1;
> - context.gmem = 1;
> - context.force_overwrite = BROTLI_FALSE;
> - context.junk_source = BROTLI_FALSE;
> - context.copy_stat = BROTLI_TRUE;
> - context.test_integrity = BROTLI_FALSE;
> - context.verbose = BROTLI_FALSE;
> - context.write_to_stdout = BROTLI_FALSE;
> - context.decompress = BROTLI_FALSE;
> - context.large_window = BROTLI_FALSE;
> - context.output_path = NULL;
> - context.suffix = DEFAULT_SUFFIX;
> - for (i = 0; i < MAX_OPTIONS; ++i) context.not_input_indices[i] = 0;
> - context.longest_path_len = 1;
> - context.input_count = 0;
> -
> - context.argc = argc;
> - context.argv = argv;
> - context.modified_path = NULL;
> - context.iterator = 0;
> - context.ignore = 0;
> - context.iterator_error = BROTLI_FALSE;
> - context.buffer = NULL;
> - context.current_input_path = NULL;
> - context.current_output_path = NULL;
> - context.fin = NULL;
> - context.fout = NULL;
> -
> - command = ParseParams(&context);
> -
> - if (command == COMMAND_COMPRESS || command ==
> COMMAND_DECOMPRESS ||
> - command == COMMAND_TEST_INTEGRITY) {
> - if (is_ok) {
> - size_t modified_path_len =
> - context.longest_path_len + strlen(context.suffix) + 1;
> - context.modified_path = (char*)malloc(modified_path_len);
> - context.buffer = (uint8_t*)malloc(kFileBufferSize * 2);
> - if (!context.modified_path || !context.buffer) {
> - fprintf(stderr, "out of memory\n");
> - is_ok = BROTLI_FALSE;
> - } else {
> - context.input = context.buffer;
> - context.output = context.buffer + kFileBufferSize;
> - }
> - }
> - }
> -
> - if (!is_ok) command = COMMAND_NOOP;
> -
> - switch (command) {
> - case COMMAND_NOOP:
> - break;
> -
> - case COMMAND_VERSION:
> - PrintVersion();
> - break;
> -
> - case COMMAND_COMPRESS:
> - memcpy (&context_dec, &context, sizeof (context));
> - is_ok = CompressFiles(&context);
> - if (!is_ok) {
> - break;
> - }
> - context_dec.decompress = BROTLI_TRUE;
> - context_dec.input_count = 1;
> - context_dec.current_input_path = context_dec.output_path;
> - context_dec.fout = tmpfile ();
> - is_ok = DecompressFiles(&context_dec);
> - if (!is_ok) {
> - break;
> - }
> - //
> - // fill decoder header
> - //
> - context_dec.fout = fopen(context_dec.output_path, "rb+"); /* open
> output_path file and add in head info */
> - fwrite(&input_file_length, 1, sizeof(int64_t), context_dec.fout);
> - scratch_buffer_size += context.gmem * GAP_MEM_BLOCK; /* there is a
> memory gap between IA32 and X64 environment*/
> - scratch_buffer_size += kFileBufferSize * 2;
> - fwrite(&scratch_buffer_size, 1, sizeof(int64_t), context_dec.fout);
> - if (fclose(context_dec.fout) != 0) {
> - fprintf(stderr, "failed to update ouptut file: %s\n",
> context_dec.output_path);
> - is_ok = 0;
> - }
> - break;
> -
> - case COMMAND_DECOMPRESS:
> - case COMMAND_TEST_INTEGRITY:
> - is_ok = DecompressFiles(&context);
> - break;
> -
> - case COMMAND_HELP:
> - case COMMAND_INVALID:
> - default:
> - is_ok = (command == COMMAND_HELP);
> - PrintHelp(FileName(argv[0]), is_ok);
> - break;
> - }
> -
> - if (context.iterator_error) is_ok = BROTLI_FALSE;
> -
> - free(context.modified_path);
> - free(context.buffer);
> -
> - if (!is_ok) exit(1);
> - return 0;
> -}
> diff --git a/.gitmodules b/.gitmodules
> index 8032dceecacc..1714b6c0a65e 100644
> --- a/.gitmodules
> +++ b/.gitmodules
> @@ -10,3 +10,6 @@
> [submodule "MdeModulePkg/Library/BrotliCustomDecompressLib/brotli"]
> path = MdeModulePkg/Library/BrotliCustomDecompressLib/brotli
> url = https://github.com/google/brotli
> +[submodule "BaseTools/Source/C/BrotliCompress/brotli"]
> + path = BaseTools/Source/C/BrotliCompress/brotli
> + url = https://github.com/google/brotli
> diff --git a/BaseTools/Source/C/BrotliCompress/GNUmakefile
> b/BaseTools/Source/C/BrotliCompress/GNUmakefile
> index fdf713e8b236..9544837263ca 100644
> --- a/BaseTools/Source/C/BrotliCompress/GNUmakefile
> +++ b/BaseTools/Source/C/BrotliCompress/GNUmakefile
> @@ -1,7 +1,7 @@
> ## @file
> # GNU/Linux makefile for 'Brotli' module build.
> #
> -# Copyright (c) 2017 - 2018, Intel Corporation. All rights reserved.<BR>
> +# Copyright (c) 2017 - 2020, Intel Corporation. All rights reserved.<BR>
> # SPDX-License-Identifier: BSD-2-Clause-Patent
> #
> MAKEROOT ?= ..
> @@ -9,33 +9,33 @@ MAKEROOT ?= ..
> APPNAME = Brotli
>
> OBJECTS = \
> - tools/brotli.o \
> - common/dictionary.o \
> - common/transform.o \
> - dec/bit_reader.o \
> - dec/decode.o \
> - dec/huffman.o \
> - dec/state.o \
> - enc/backward_references.o \
> - enc/backward_references_hq.o \
> - enc/bit_cost.o \
> - enc/block_splitter.o \
> - enc/brotli_bit_stream.o \
> - enc/cluster.o \
> - enc/compress_fragment.o \
> - enc/compress_fragment_two_pass.o \
> - enc/dictionary_hash.o \
> - enc/encode.o \
> - enc/encoder_dict.o \
> - enc/entropy_encode.o \
> - enc/histogram.o \
> - enc/literal_cost.o \
> - enc/memory.o \
> - enc/metablock.o \
> - enc/static_dict.o \
> - enc/utf8_util.o
> + brotli/c/tools/brotli.o \
> + brotli/c/common/dictionary.o \
> + brotli/c/common/transform.o \
> + brotli/c/dec/bit_reader.o \
> + brotli/c/dec/decode.o \
> + brotli/c/dec/huffman.o \
> + brotli/c/dec/state.o \
> + brotli/c/enc/backward_references.o \
> + brotli/c/enc/backward_references_hq.o \
> + brotli/c/enc/bit_cost.o \
> + brotli/c/enc/block_splitter.o \
> + brotli/c/enc/brotli_bit_stream.o \
> + brotli/c/enc/cluster.o \
> + brotli/c/enc/compress_fragment.o \
> + brotli/c/enc/compress_fragment_two_pass.o \
> + brotli/c/enc/dictionary_hash.o \
> + brotli/c/enc/encode.o \
> + brotli/c/enc/encoder_dict.o \
> + brotli/c/enc/entropy_encode.o \
> + brotli/c/enc/histogram.o \
> + brotli/c/enc/literal_cost.o \
> + brotli/c/enc/memory.o \
> + brotli/c/enc/metablock.o \
> + brotli/c/enc/static_dict.o \
> + brotli/c/enc/utf8_util.o
>
> include $(MAKEROOT)/Makefiles/app.makefile
>
> -TOOL_INCLUDE = -I ./include
> +TOOL_INCLUDE = -I ./brotli/c/include
> LIBS += -lm
> diff --git a/BaseTools/Source/C/BrotliCompress/LICENSE
> b/BaseTools/Source/C/BrotliCompress/LICENSE
> deleted file mode 100644
> index 49550fc2d06e..000000000000
> --- a/BaseTools/Source/C/BrotliCompress/LICENSE
> +++ /dev/null
> @@ -1,19 +0,0 @@
> -Copyright (c) 2009, 2010, 2013-2016 by the Brotli Authors.
> -
> -Permission is hereby granted, free of charge, to any person obtaining a copy
> -of this software and associated documentation files (the "Software"), to
> deal
> -in the Software without restriction, including without limitation the rights
> -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
> -copies of the Software, and to permit persons to whom the Software is
> -furnished to do so, subject to the following conditions:
> -
> -The above copyright notice and this permission notice shall be included in
> -all copies or substantial portions of the Software.
> -
> -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
> EXPRESS OR
> -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
> MERCHANTABILITY,
> -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO
> EVENT SHALL THE
> -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES
> OR OTHER
> -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
> ARISING FROM,
> -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
> DEALINGS IN
> -THE SOFTWARE.
> diff --git a/BaseTools/Source/C/BrotliCompress/Makefile
> b/BaseTools/Source/C/BrotliCompress/Makefile
> index 4c03b0e6df17..b805ff1e5870 100644
> --- a/BaseTools/Source/C/BrotliCompress/Makefile
> +++ b/BaseTools/Source/C/BrotliCompress/Makefile
> @@ -1,46 +1,46 @@
> ## @file
> # Windows makefile for 'Brotli' module build.
> #
> -# Copyright (c) 2017 - 2018, Intel Corporation. All rights reserved.<BR>
> +# Copyright (c) 2017 - 2020, Intel Corporation. All rights reserved.<BR>
> # SPDX-License-Identifier: BSD-2-Clause-Patent
> #
> !INCLUDE ..\Makefiles\ms.common
>
> -INC = -I .\include $(INC)
> +INC = -I .\brotli\c\include $(INC)
> CFLAGS = $(CFLAGS) /W2
>
> APPNAME = Brotli
>
> #LIBS = $(LIB_PATH)\Common.lib
>
> -COMMON_OBJ = common\dictionary.obj common\transform.obj
> +COMMON_OBJ = brotli\c\common\dictionary.obj
> brotli\c\common\transform.obj
> DEC_OBJ = \
> - dec\bit_reader.obj \
> - dec\decode.obj \
> - dec\huffman.obj \
> - dec\state.obj
> + brotli\c\dec\bit_reader.obj \
> + brotli\c\dec\decode.obj \
> + brotli\c\dec\huffman.obj \
> + brotli\c\dec\state.obj
> ENC_OBJ = \
> - enc\backward_references.obj \
> - enc\backward_references_hq.obj \
> - enc\bit_cost.obj \
> - enc\block_splitter.obj \
> - enc\brotli_bit_stream.obj \
> - enc\cluster.obj \
> - enc\compress_fragment.obj \
> - enc\compress_fragment_two_pass.obj \
> - enc\dictionary_hash.obj \
> - enc\encode.obj \
> - enc\encoder_dict.obj \
> - enc\entropy_encode.obj \
> - enc\histogram.obj \
> - enc\literal_cost.obj \
> - enc\memory.obj \
> - enc\metablock.obj \
> - enc\static_dict.obj \
> - enc\utf8_util.obj
> + brotli\c\enc\backward_references.obj \
> + brotli\c\enc\backward_references_hq.obj \
> + brotli\c\enc\bit_cost.obj \
> + brotli\c\enc\block_splitter.obj \
> + brotli\c\enc\brotli_bit_stream.obj \
> + brotli\c\enc\cluster.obj \
> + brotli\c\enc\compress_fragment.obj \
> + brotli\c\enc\compress_fragment_two_pass.obj \
> + brotli\c\enc\dictionary_hash.obj \
> + brotli\c\enc\encode.obj \
> + brotli\c\enc\encoder_dict.obj \
> + brotli\c\enc\entropy_encode.obj \
> + brotli\c\enc\histogram.obj \
> + brotli\c\enc\literal_cost.obj \
> + brotli\c\enc\memory.obj \
> + brotli\c\enc\metablock.obj \
> + brotli\c\enc\static_dict.obj \
> + brotli\c\enc\utf8_util.obj
>
> OBJECTS = \
> - tools\brotli.obj \
> + brotli\c\tools\brotli.obj \
> $(COMMON_OBJ) \
> $(DEC_OBJ) \
> $(ENC_OBJ)
> diff --git a/BaseTools/Source/C/BrotliCompress/README.md
> b/BaseTools/Source/C/BrotliCompress/README.md
> deleted file mode 100644
> index 01848adc170a..000000000000
> --- a/BaseTools/Source/C/BrotliCompress/README.md
> +++ /dev/null
> @@ -1,26 +0,0 @@
> -### Introduction
> -
> -Brotli is a generic-purpose lossless compression algorithm that compresses
> data
> -using a combination of a modern variant of the LZ77 algorithm, Huffman
> coding
> -and 2nd order context modeling, with a compression ratio comparable to
> the best
> -currently available general-purpose compression methods. It is similar in
> speed
> -with deflate but offers more dense compression.
> -
> -The specification of the Brotli Compressed Data Format is defined in [RFC
> 7932](https://www.ietf.org/rfc/rfc7932.txt).
> -
> -Brotli is open-sourced under the MIT License, see the LICENSE file.
> -
> -Brotli mailing list:
> -https://groups.google.com/forum/#!forum/brotli
> -
> -[![Build Status](https://travis-
> ci.org/google/brotli.svg?branch=master)](https://travis-ci.org/google/brotli)
> -
> -### Benchmarks
> -* [Squash Compression Benchmark](https://quixdb.github.io/squash-
> benchmark/) / [Unstable Squash Compression
> Benchmark](https://quixdb.github.io/squash-benchmark/unstable/)
> -* [Large Text Compression
> Benchmark](http://mattmahoney.net/dc/text.html)
> -* [Lzturbo
> Benchmark](https://sites.google.com/site/powturbo/home/benchmark)
> -
> -### Related projects
> -Independent [decoder](https://github.com/madler/brotli) implementation
> by Mark Adler, based entirely on format specification.
> -
> -JavaScript port of brotli
> [decoder](https://github.com/devongovett/brotli.js). Could be used directly
> via `npm install brotli`
> diff --git a/BaseTools/Source/C/BrotliCompress/ReadMe.txt
> b/BaseTools/Source/C/BrotliCompress/ReadMe.txt
> deleted file mode 100644
> index 399ec38d4081..000000000000
> --- a/BaseTools/Source/C/BrotliCompress/ReadMe.txt
> +++ /dev/null
> @@ -1,2 +0,0 @@
> -It is based on the Brotli v1.0.6.
> -Brotli was released on the website https://github.com/google/brotli.
> diff --git a/BaseTools/Source/C/BrotliCompress/brotli
> b/BaseTools/Source/C/BrotliCompress/brotli
> new file mode 160000
> index 000000000000..666c3280cc11
> --- /dev/null
> +++ b/BaseTools/Source/C/BrotliCompress/brotli
> @@ -0,0 +1 @@
> +Subproject commit 666c3280cc11dc433c303d79a83d4ffbdd12cc8d
> diff --git a/BaseTools/Source/C/BrotliCompress/common/constants.h
> b/BaseTools/Source/C/BrotliCompress/common/constants.h
> deleted file mode 100644
> index 1a29f035e899..000000000000
> --- a/BaseTools/Source/C/BrotliCompress/common/constants.h
> +++ /dev/null
> @@ -1,64 +0,0 @@
> -/* Copyright 2016 Google Inc. All Rights Reserved.
> -
> - Distributed under MIT license.
> - See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
> -*/
> -
> -#ifndef BROTLI_COMMON_CONSTANTS_H_
> -#define BROTLI_COMMON_CONSTANTS_H_
> -
> -/* Specification: 7.3. Encoding of the context map */
> -#define BROTLI_CONTEXT_MAP_MAX_RLE 16
> -
> -/* Specification: 2. Compressed representation overview */
> -#define BROTLI_MAX_NUMBER_OF_BLOCK_TYPES 256
> -
> -/* Specification: 3.3. Alphabet sizes: insert-and-copy length */
> -#define BROTLI_NUM_LITERAL_SYMBOLS 256
> -#define BROTLI_NUM_COMMAND_SYMBOLS 704
> -#define BROTLI_NUM_BLOCK_LEN_SYMBOLS 26
> -#define BROTLI_MAX_CONTEXT_MAP_SYMBOLS
> (BROTLI_MAX_NUMBER_OF_BLOCK_TYPES + \
> - BROTLI_CONTEXT_MAP_MAX_RLE)
> -#define BROTLI_MAX_BLOCK_TYPE_SYMBOLS
> (BROTLI_MAX_NUMBER_OF_BLOCK_TYPES + 2)
> -
> -/* Specification: 3.5. Complex prefix codes */
> -#define BROTLI_REPEAT_PREVIOUS_CODE_LENGTH 16
> -#define BROTLI_REPEAT_ZERO_CODE_LENGTH 17
> -#define BROTLI_CODE_LENGTH_CODES
> (BROTLI_REPEAT_ZERO_CODE_LENGTH + 1)
> -/* "code length of 8 is repeated" */
> -#define BROTLI_INITIAL_REPEATED_CODE_LENGTH 8
> -
> -/* "Large Window Brotli" */
> -#define BROTLI_LARGE_MAX_DISTANCE_BITS 62U
> -#define BROTLI_LARGE_MIN_WBITS 10
> -#define BROTLI_LARGE_MAX_WBITS 30
> -
> -/* Specification: 4. Encoding of distances */
> -#define BROTLI_NUM_DISTANCE_SHORT_CODES 16
> -#define BROTLI_MAX_NPOSTFIX 3
> -#define BROTLI_MAX_NDIRECT 120
> -#define BROTLI_MAX_DISTANCE_BITS 24U
> -#define BROTLI_DISTANCE_ALPHABET_SIZE(NPOSTFIX, NDIRECT,
> MAXNBITS) ( \
> - BROTLI_NUM_DISTANCE_SHORT_CODES + (NDIRECT) + \
> - ((MAXNBITS) << ((NPOSTFIX) + 1)))
> -/* BROTLI_NUM_DISTANCE_SYMBOLS == 1128 */
> -#define BROTLI_NUM_DISTANCE_SYMBOLS \
> - BROTLI_DISTANCE_ALPHABET_SIZE( \
> - BROTLI_MAX_NDIRECT, BROTLI_MAX_NPOSTFIX,
> BROTLI_LARGE_MAX_DISTANCE_BITS)
> -#define BROTLI_MAX_DISTANCE 0x3FFFFFC
> -#define BROTLI_MAX_ALLOWED_DISTANCE 0x7FFFFFFC
> -
> -/* 7.1. Context modes and context ID lookup for literals */
> -/* "context IDs for literals are in the range of 0..63" */
> -#define BROTLI_LITERAL_CONTEXT_BITS 6
> -
> -/* 7.2. Context ID for distances */
> -#define BROTLI_DISTANCE_CONTEXT_BITS 2
> -
> -/* 9.1. Format of the Stream Header */
> -/* Number of slack bytes for window size. Don't confuse
> - with BROTLI_NUM_DISTANCE_SHORT_CODES. */
> -#define BROTLI_WINDOW_GAP 16
> -#define BROTLI_MAX_BACKWARD_LIMIT(W) (((size_t)1 << (W)) -
> BROTLI_WINDOW_GAP)
> -
> -#endif /* BROTLI_COMMON_CONSTANTS_H_ */
> diff --git a/BaseTools/Source/C/BrotliCompress/common/context.h
> b/BaseTools/Source/C/BrotliCompress/common/context.h
> deleted file mode 100644
> index 7ffc640eafa4..000000000000
> --- a/BaseTools/Source/C/BrotliCompress/common/context.h
> +++ /dev/null
> @@ -1,261 +0,0 @@
> -/* Copyright 2013 Google Inc. All Rights Reserved.
> -
> - Distributed under MIT license.
> - See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
> -*/
> -
> -/* Lookup table to map the previous two bytes to a context id.
> -
> - There are four different context modeling modes defined here:
> - CONTEXT_LSB6: context id is the least significant 6 bits of the last byte,
> - CONTEXT_MSB6: context id is the most significant 6 bits of the last byte,
> - CONTEXT_UTF8: second-order context model tuned for UTF8-encoded
> text,
> - CONTEXT_SIGNED: second-order context model tuned for signed integers.
> -
> - If |p1| and |p2| are the previous two bytes, and |mode| is current context
> - mode, we calculate the context as:
> -
> - context = ContextLut(mode)[p1] | ContextLut(mode)[p2 + 256].
> -
> - For CONTEXT_UTF8 mode, if the previous two bytes are ASCII characters
> - (i.e. < 128), this will be equivalent to
> -
> - context = 4 * context1(p1) + context2(p2),
> -
> - where context1 is based on the previous byte in the following way:
> -
> - 0 : non-ASCII control
> - 1 : \t, \n, \r
> - 2 : space
> - 3 : other punctuation
> - 4 : " '
> - 5 : %
> - 6 : ( < [ {
> - 7 : ) > ] }
> - 8 : , ; :
> - 9 : .
> - 10 : =
> - 11 : number
> - 12 : upper-case vowel
> - 13 : upper-case consonant
> - 14 : lower-case vowel
> - 15 : lower-case consonant
> -
> - and context2 is based on the second last byte:
> -
> - 0 : control, space
> - 1 : punctuation
> - 2 : upper-case letter, number
> - 3 : lower-case letter
> -
> - If the last byte is ASCII, and the second last byte is not (in a valid UTF8
> - stream it will be a continuation byte, value between 128 and 191), the
> - context is the same as if the second last byte was an ASCII control or space.
> -
> - If the last byte is a UTF8 lead byte (value >= 192), then the next byte will
> - be a continuation byte and the context id is 2 or 3 depending on the LSB of
> - the last byte and to a lesser extent on the second last byte if it is ASCII.
> -
> - If the last byte is a UTF8 continuation byte, the second last byte can be:
> - - continuation byte: the next byte is probably ASCII or lead byte (assuming
> - 4-byte UTF8 characters are rare) and the context id is 0 or 1.
> - - lead byte (192 - 207): next byte is ASCII or lead byte, context is 0 or 1
> - - lead byte (208 - 255): next byte is continuation byte, context is 2 or 3
> -
> - The possible value combinations of the previous two bytes, the range of
> - context ids and the type of the next byte is summarized in the table below:
> -
> - |--------\-----------------------------------------------------------------|
> - | \ Last byte |
> - | Second \---------------------------------------------------------------|
> - | last byte \ ASCII | cont. byte | lead byte |
> - | \ (0-127) | (128-191) | (192-) |
> -
> |=============|===================|=====================|==
> ================|
> - | ASCII | next: ASCII/lead | not valid | next: cont. |
> - | (0-127) | context: 4 - 63 | | context: 2 - 3 |
> - |-------------|-------------------|---------------------|------------------|
> - | cont. byte | next: ASCII/lead | next: ASCII/lead | next: cont. |
> - | (128-191) | context: 4 - 63 | context: 0 - 1 | context: 2 - 3 |
> - |-------------|-------------------|---------------------|------------------|
> - | lead byte | not valid | next: ASCII/lead | not valid |
> - | (192-207) | | context: 0 - 1 | |
> - |-------------|-------------------|---------------------|------------------|
> - | lead byte | not valid | next: cont. | not valid |
> - | (208-) | | context: 2 - 3 | |
> - |-------------|-------------------|---------------------|------------------|
> -*/
> -
> -#ifndef BROTLI_COMMON_CONTEXT_H_
> -#define BROTLI_COMMON_CONTEXT_H_
> -
> -#include <brotli/types.h>
> -
> -typedef enum ContextType {
> - CONTEXT_LSB6 = 0,
> - CONTEXT_MSB6 = 1,
> - CONTEXT_UTF8 = 2,
> - CONTEXT_SIGNED = 3
> -} ContextType;
> -
> -/* Common context lookup table for all context modes. */
> -static const uint8_t kContextLookup[2048] = {
> - /* CONTEXT_LSB6, last byte. */
> - 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
> - 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,
> - 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,
> - 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63,
> - 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
> - 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,
> - 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,
> - 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63,
> - 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
> - 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,
> - 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,
> - 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63,
> - 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
> - 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,
> - 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,
> - 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63,
> -
> - /* CONTEXT_LSB6, second last byte, */
> - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
> - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
> - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
> - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
> - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
> - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
> - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
> - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
> - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
> - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
> - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
> - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
> - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
> - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
> - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
> - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
> -
> - /* CONTEXT_MSB6, last byte. */
> - 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3,
> - 4, 4, 4, 4, 5, 5, 5, 5, 6, 6, 6, 6, 7, 7, 7, 7,
> - 8, 8, 8, 8, 9, 9, 9, 9, 10, 10, 10, 10, 11, 11, 11, 11,
> - 12, 12, 12, 12, 13, 13, 13, 13, 14, 14, 14, 14, 15, 15, 15, 15,
> - 16, 16, 16, 16, 17, 17, 17, 17, 18, 18, 18, 18, 19, 19, 19, 19,
> - 20, 20, 20, 20, 21, 21, 21, 21, 22, 22, 22, 22, 23, 23, 23, 23,
> - 24, 24, 24, 24, 25, 25, 25, 25, 26, 26, 26, 26, 27, 27, 27, 27,
> - 28, 28, 28, 28, 29, 29, 29, 29, 30, 30, 30, 30, 31, 31, 31, 31,
> - 32, 32, 32, 32, 33, 33, 33, 33, 34, 34, 34, 34, 35, 35, 35, 35,
> - 36, 36, 36, 36, 37, 37, 37, 37, 38, 38, 38, 38, 39, 39, 39, 39,
> - 40, 40, 40, 40, 41, 41, 41, 41, 42, 42, 42, 42, 43, 43, 43, 43,
> - 44, 44, 44, 44, 45, 45, 45, 45, 46, 46, 46, 46, 47, 47, 47, 47,
> - 48, 48, 48, 48, 49, 49, 49, 49, 50, 50, 50, 50, 51, 51, 51, 51,
> - 52, 52, 52, 52, 53, 53, 53, 53, 54, 54, 54, 54, 55, 55, 55, 55,
> - 56, 56, 56, 56, 57, 57, 57, 57, 58, 58, 58, 58, 59, 59, 59, 59,
> - 60, 60, 60, 60, 61, 61, 61, 61, 62, 62, 62, 62, 63, 63, 63, 63,
> -
> - /* CONTEXT_MSB6, second last byte, */
> - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
> - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
> - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
> - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
> - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
> - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
> - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
> - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
> - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
> - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
> - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
> - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
> - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
> - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
> - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
> - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
> -
> - /* CONTEXT_UTF8, last byte. */
> - /* ASCII range. */
> - 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 0, 0, 4, 0, 0,
> - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
> - 8, 12, 16, 12, 12, 20, 12, 16, 24, 28, 12, 12, 32, 12, 36, 12,
> - 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 32, 32, 24, 40, 28, 12,
> - 12, 48, 52, 52, 52, 48, 52, 52, 52, 48, 52, 52, 52, 52, 52, 48,
> - 52, 52, 52, 52, 52, 48, 52, 52, 52, 52, 52, 24, 12, 28, 12, 12,
> - 12, 56, 60, 60, 60, 56, 60, 60, 60, 56, 60, 60, 60, 60, 60, 56,
> - 60, 60, 60, 60, 60, 56, 60, 60, 60, 60, 60, 24, 12, 28, 12, 0,
> - /* UTF8 continuation byte range. */
> - 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1,
> - 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1,
> - 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1,
> - 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1,
> - /* UTF8 lead byte range. */
> - 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3,
> - 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3,
> - 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3,
> - 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3,
> -
> - /* CONTEXT_UTF8 second last byte. */
> - /* ASCII range. */
> - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
> - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
> - 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
> - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1,
> - 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
> - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1,
> - 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
> - 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 1, 1, 1, 0,
> - /* UTF8 continuation byte range. */
> - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
> - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
> - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
> - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
> - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
> - /* UTF8 lead byte range. */
> - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
> - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
> - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
> -
> - /* CONTEXT_SIGNED, last byte, same as the above values shifted by 3 bits.
> */
> - 0, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
> - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
> - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
> - 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
> - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
> - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
> - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
> - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
> - 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
> - 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
> - 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
> - 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,
> - 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40,
> - 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40,
> - 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40,
> - 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 56,
> -
> - /* CONTEXT_SIGNED, second last byte. */
> - 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
> - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
> - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
> - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
> - 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
> - 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
> - 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
> - 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
> - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
> - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
> - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
> - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
> - 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
> - 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
> - 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
> - 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 7,
> -};
> -
> -typedef const uint8_t* ContextLut;
> -
> -/* typeof(MODE) == ContextType; returns ContextLut */
> -#define BROTLI_CONTEXT_LUT(MODE) (&kContextLookup[(MODE) << 9])
> -
> -/* typeof(LUT) == ContextLut */
> -#define BROTLI_CONTEXT(P1, P2, LUT) ((LUT)[P1] | ((LUT) + 256)[P2])
> -
> -#endif /* BROTLI_COMMON_CONTEXT_H_ */
> diff --git a/BaseTools/Source/C/BrotliCompress/common/dictionary.h
> b/BaseTools/Source/C/BrotliCompress/common/dictionary.h
> deleted file mode 100644
> index a68a1c54493e..000000000000
> --- a/BaseTools/Source/C/BrotliCompress/common/dictionary.h
> +++ /dev/null
> @@ -1,64 +0,0 @@
> -/* Copyright 2013 Google Inc. All Rights Reserved.
> -
> - Distributed under MIT license.
> - See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
> -*/
> -
> -/* Collection of static dictionary words. */
> -
> -#ifndef BROTLI_COMMON_DICTIONARY_H_
> -#define BROTLI_COMMON_DICTIONARY_H_
> -
> -#include <brotli/port.h>
> -#include <brotli/types.h>
> -
> -#if defined(__cplusplus) || defined(c_plusplus)
> -extern "C" {
> -#endif
> -
> -typedef struct BrotliDictionary {
> - /**
> - * Number of bits to encode index of dictionary word in a bucket.
> - *
> - * Specification: Appendix A. Static Dictionary Data
> - *
> - * Words in a dictionary are bucketed by length.
> - * @c 0 means that there are no words of a given length.
> - * Dictionary consists of words with length of [4..24] bytes.
> - * Values at [0..3] and [25..31] indices should not be addressed.
> - */
> - uint8_t size_bits_by_length[32];
> -
> - /* assert(offset[i + 1] == offset[i] + (bits[i] ? (i << bits[i]) : 0)) */
> - uint32_t offsets_by_length[32];
> -
> - /* assert(data_size == offsets_by_length[31]) */
> - size_t data_size;
> -
> - /* Data array is not bound, and should obey to size_bits_by_length values.
> - Specified size matches default (RFC 7932) dictionary. Its size is
> - defined by data_size */
> - const uint8_t* data;
> -} BrotliDictionary;
> -
> -BROTLI_COMMON_API const BrotliDictionary* BrotliGetDictionary(void);
> -
> -/**
> - * Sets dictionary data.
> - *
> - * When dictionary data is already set / present, this method is no-op.
> - *
> - * Dictionary data MUST be provided before BrotliGetDictionary is invoked.
> - * This method is used ONLY in multi-client environment (e.g. C + Java),
> - * to reduce storage by sharing single dictionary between implementations.
> - */
> -BROTLI_COMMON_API void BrotliSetDictionaryData(const uint8_t* data);
> -
> -#define BROTLI_MIN_DICTIONARY_WORD_LENGTH 4
> -#define BROTLI_MAX_DICTIONARY_WORD_LENGTH 24
> -
> -#if defined(__cplusplus) || defined(c_plusplus)
> -} /* extern "C" */
> -#endif
> -
> -#endif /* BROTLI_COMMON_DICTIONARY_H_ */
> diff --git a/BaseTools/Source/C/BrotliCompress/common/platform.h
> b/BaseTools/Source/C/BrotliCompress/common/platform.h
> deleted file mode 100644
> index b83ed6ca258a..000000000000
> --- a/BaseTools/Source/C/BrotliCompress/common/platform.h
> +++ /dev/null
> @@ -1,558 +0,0 @@
> -/* Copyright 2016 Google Inc. All Rights Reserved.
> -
> - Distributed under MIT license.
> - See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
> -*/
> -
> -/* Macros for compiler / platform specific features and build options.
> -
> - Build options are:
> - * BROTLI_BUILD_32_BIT disables 64-bit optimizations
> - * BROTLI_BUILD_64_BIT forces to use 64-bit optimizations
> - * BROTLI_BUILD_BIG_ENDIAN forces to use big-endian optimizations
> - * BROTLI_BUILD_ENDIAN_NEUTRAL disables endian-aware optimizations
> - * BROTLI_BUILD_LITTLE_ENDIAN forces to use little-endian optimizations
> - * BROTLI_BUILD_PORTABLE disables dangerous optimizations, like
> unaligned
> - read and overlapping memcpy; this reduces decompression speed by 5%
> - * BROTLI_BUILD_NO_RBIT disables "rbit" optimization for ARM CPUs
> - * BROTLI_DEBUG dumps file name and line number when decoder
> detects stream
> - or memory error
> - * BROTLI_ENABLE_LOG enables asserts and dumps various state
> information
> -*/
> -
> -#ifndef BROTLI_COMMON_PLATFORM_H_
> -#define BROTLI_COMMON_PLATFORM_H_
> -
> -#include <string.h> /* memcpy */
> -#include <stdlib.h> /* malloc, free */
> -
> -#include <brotli/port.h>
> -#include <brotli/types.h>
> -
> -#if defined(OS_LINUX) || defined(OS_CYGWIN)
> -#include <endian.h>
> -#elif defined(OS_FREEBSD)
> -#include <machine/endian.h>
> -#elif defined(OS_MACOSX)
> -#include <machine/endian.h>
> -/* Let's try and follow the Linux convention */
> -#define BROTLI_X_BYTE_ORDER BYTE_ORDER
> -#define BROTLI_X_LITTLE_ENDIAN LITTLE_ENDIAN
> -#define BROTLI_X_BIG_ENDIAN BIG_ENDIAN
> -#endif
> -
> -#if defined(BROTLI_ENABLE_LOG) || defined(BROTLI_DEBUG)
> -#include <assert.h>
> -#include <stdio.h>
> -#endif
> -
> -/* The following macros were borrowed from
> https://github.com/nemequ/hedley
> - * with permission of original author - Evan Nemerson
> <evan@nemerson.com> */
> -
> -/* >>> >>> >>> hedley macros */
> -
> -/* Define "BROTLI_PREDICT_TRUE" and "BROTLI_PREDICT_FALSE" macros
> for capable
> - compilers.
> -
> -To apply compiler hint, enclose the branching condition into macros, like this:
> -
> - if (BROTLI_PREDICT_TRUE(zero == 0)) {
> - // main execution path
> - } else {
> - // compiler should place this code outside of main execution path
> - }
> -
> -OR:
> -
> - if (BROTLI_PREDICT_FALSE(something_rare_or_unexpected_happens)) {
> - // compiler should place this code outside of main execution path
> - }
> -
> -*/
> -#if BROTLI_GNUC_HAS_BUILTIN(__builtin_expect, 3, 0, 0) || \
> - BROTLI_INTEL_VERSION_CHECK(16, 0, 0) || \
> - BROTLI_SUNPRO_VERSION_CHECK(5, 12, 0) || \
> - BROTLI_ARM_VERSION_CHECK(4, 1, 0) || \
> - BROTLI_IBM_VERSION_CHECK(10, 1, 0) || \
> - BROTLI_TI_VERSION_CHECK(7, 3, 0) || \
> - BROTLI_TINYC_VERSION_CHECK(0, 9, 27)
> -#define BROTLI_PREDICT_TRUE(x) (__builtin_expect(!!(x), 1))
> -#define BROTLI_PREDICT_FALSE(x) (__builtin_expect(x, 0))
> -#else
> -#define BROTLI_PREDICT_FALSE(x) (x)
> -#define BROTLI_PREDICT_TRUE(x) (x)
> -#endif
> -
> -#if defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) &&
> \
> - !defined(__cplusplus)
> -#define BROTLI_RESTRICT restrict
> -#elif BROTLI_GNUC_VERSION_CHECK(3, 1, 0) || \
> - BROTLI_MSVC_VERSION_CHECK(14, 0, 0) || \
> - BROTLI_INTEL_VERSION_CHECK(16, 0, 0) || \
> - BROTLI_ARM_VERSION_CHECK(4, 1, 0) || \
> - BROTLI_IBM_VERSION_CHECK(10, 1, 0) || \
> - BROTLI_PGI_VERSION_CHECK(17, 10, 0) || \
> - BROTLI_TI_VERSION_CHECK(8, 0, 0) || \
> - BROTLI_IAR_VERSION_CHECK(8, 0, 0) || \
> - (BROTLI_SUNPRO_VERSION_CHECK(5, 14, 0) && defined(__cplusplus))
> -#define BROTLI_RESTRICT __restrict
> -#elif BROTLI_SUNPRO_VERSION_CHECK(5, 3, 0) && !defined(__cplusplus)
> -#define BROTLI_RESTRICT _Restrict
> -#else
> -#define BROTLI_RESTRICT
> -#endif
> -
> -#if (defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L)) ||
> \
> - (defined(__cplusplus) && (__cplusplus >= 199711L))
> -#define BROTLI_MAYBE_INLINE inline
> -#elif defined(__GNUC_STDC_INLINE__) ||
> defined(__GNUC_GNU_INLINE__) || \
> - BROTLI_ARM_VERSION_CHECK(6, 2, 0)
> -#define BROTLI_MAYBE_INLINE __inline__
> -#elif BROTLI_MSVC_VERSION_CHECK(12, 0, 0) || \
> - BROTLI_ARM_VERSION_CHECK(4, 1, 0) || BROTLI_TI_VERSION_CHECK(8,
> 0, 0)
> -#define BROTLI_MAYBE_INLINE __inline
> -#else
> -#define BROTLI_MAYBE_INLINE
> -#endif
> -
> -#if BROTLI_GNUC_HAS_ATTRIBUTE(always_inline, 4, 0, 0) || \
> - BROTLI_INTEL_VERSION_CHECK(16, 0, 0) || \
> - BROTLI_SUNPRO_VERSION_CHECK(5, 11, 0) || \
> - BROTLI_ARM_VERSION_CHECK(4, 1, 0) || \
> - BROTLI_IBM_VERSION_CHECK(10, 1, 0) || \
> - BROTLI_TI_VERSION_CHECK(8, 0, 0) || \
> - (BROTLI_TI_VERSION_CHECK(7, 3, 0) &&
> defined(__TI_GNU_ATTRIBUTE_SUPPORT__))
> -#define BROTLI_INLINE BROTLI_MAYBE_INLINE
> __attribute__((__always_inline__))
> -#elif BROTLI_MSVC_VERSION_CHECK(12, 0, 0)
> -#define BROTLI_INLINE BROTLI_MAYBE_INLINE __forceinline
> -#elif BROTLI_TI_VERSION_CHECK(7, 0, 0) && defined(__cplusplus)
> -#define BROTLI_INLINE BROTLI_MAYBE_INLINE
> _Pragma("FUNC_ALWAYS_INLINE;")
> -#elif BROTLI_IAR_VERSION_CHECK(8, 0, 0)
> -#define BROTLI_INLINE BROTLI_MAYBE_INLINE _Pragma("inline=forced")
> -#else
> -#define BROTLI_INLINE BROTLI_MAYBE_INLINE
> -#endif
> -
> -#if BROTLI_GNUC_HAS_ATTRIBUTE(noinline, 4, 0, 0) || \
> - BROTLI_INTEL_VERSION_CHECK(16, 0, 0) || \
> - BROTLI_SUNPRO_VERSION_CHECK(5, 11, 0) || \
> - BROTLI_ARM_VERSION_CHECK(4, 1, 0) || \
> - BROTLI_IBM_VERSION_CHECK(10, 1, 0) || \
> - BROTLI_TI_VERSION_CHECK(8, 0, 0) || \
> - (BROTLI_TI_VERSION_CHECK(7, 3, 0) &&
> defined(__TI_GNU_ATTRIBUTE_SUPPORT__))
> -#define BROTLI_NOINLINE __attribute__((__noinline__))
> -#elif BROTLI_MSVC_VERSION_CHECK(13, 10, 0)
> -#define BROTLI_NOINLINE __declspec(noinline)
> -#elif BROTLI_PGI_VERSION_CHECK(10, 2, 0)
> -#define BROTLI_NOINLINE _Pragma("noinline")
> -#elif BROTLI_TI_VERSION_CHECK(6, 0, 0) && defined(__cplusplus)
> -#define BROTLI_NOINLINE _Pragma("FUNC_CANNOT_INLINE;")
> -#elif BROTLI_IAR_VERSION_CHECK(8, 0, 0)
> -#define BROTLI_NOINLINE _Pragma("inline=never")
> -#else
> -#define BROTLI_NOINLINE
> -#endif
> -
> -/* BROTLI_INTERNAL could be defined to override visibility, e.g. for tests. */
> -#if !defined(BROTLI_INTERNAL)
> -#if defined(_WIN32) || defined(__CYGWIN__)
> -#define BROTLI_INTERNAL
> -#elif BROTLI_GNUC_VERSION_CHECK(3, 3, 0) || \
> - BROTLI_TI_VERSION_CHECK(8, 0, 0) || \
> - BROTLI_INTEL_VERSION_CHECK(16, 0, 0) || \
> - BROTLI_ARM_VERSION_CHECK(4, 1, 0) || \
> - BROTLI_IBM_VERSION_CHECK(13, 1, 0) || \
> - BROTLI_SUNPRO_VERSION_CHECK(5, 11, 0) || \
> - (BROTLI_TI_VERSION_CHECK(7, 3, 0) && \
> - defined(__TI_GNU_ATTRIBUTE_SUPPORT__) && defined(__TI_EABI__))
> -#define BROTLI_INTERNAL __attribute__ ((visibility ("hidden")))
> -#else
> -#define BROTLI_INTERNAL
> -#endif
> -#endif
> -
> -/* <<< <<< <<< end of hedley macros. */
> -
> -#if BROTLI_GNUC_HAS_ATTRIBUTE(unused, 2, 7, 0) || \
> - BROTLI_INTEL_VERSION_CHECK(16, 0, 0)
> -#define BROTLI_UNUSED_FUNCTION static BROTLI_INLINE __attribute__
> ((unused))
> -#else
> -#define BROTLI_UNUSED_FUNCTION static BROTLI_INLINE
> -#endif
> -
> -#if (defined(__ARM_ARCH) && (__ARM_ARCH == 7)) || \
> - (defined(M_ARM) && (M_ARM == 7))
> -#define BROTLI_TARGET_ARMV7
> -#endif /* ARMv7 */
> -
> -#if (defined(__ARM_ARCH) && (__ARM_ARCH == 8)) || \
> - defined(__aarch64__) || defined(__ARM64_ARCH_8__)
> -#define BROTLI_TARGET_ARMV8_ANY
> -
> -#if defined(__ARM_32BIT_STATE)
> -#define BROTLI_TARGET_ARMV8_32
> -#elif defined(__ARM_64BIT_STATE)
> -#define BROTLI_TARGET_ARMV8_64
> -#endif
> -
> -#endif /* ARMv8 */
> -
> -#if defined(__i386) || defined(_M_IX86)
> -#define BROTLI_TARGET_X86
> -#endif
> -
> -#if defined(__x86_64__) || defined(_M_X64)
> -#define BROTLI_TARGET_X64
> -#endif
> -
> -#if defined(__PPC64__)
> -#define BROTLI_TARGET_POWERPC64
> -#endif
> -
> -#if defined(__riscv) && defined(__riscv_xlen) && __riscv_xlen == 64
> -#define BROTLI_TARGET_RISCV64
> -#endif
> -
> -#if defined(BROTLI_BUILD_64_BIT)
> -#define BROTLI_64_BITS 1
> -#elif defined(BROTLI_BUILD_32_BIT)
> -#define BROTLI_64_BITS 0
> -#elif defined(BROTLI_TARGET_X64) || defined(BROTLI_TARGET_ARMV8_64)
> || \
> - defined(BROTLI_TARGET_POWERPC64) ||
> defined(BROTLI_TARGET_RISCV64)
> -#define BROTLI_64_BITS 1
> -#else
> -#define BROTLI_64_BITS 0
> -#endif
> -
> -#if (BROTLI_64_BITS)
> -#define brotli_reg_t uint64_t
> -#else
> -#define brotli_reg_t uint32_t
> -#endif
> -
> -#if defined(BROTLI_BUILD_BIG_ENDIAN)
> -#define BROTLI_BIG_ENDIAN 1
> -#elif defined(BROTLI_BUILD_LITTLE_ENDIAN)
> -#define BROTLI_LITTLE_ENDIAN 1
> -#elif defined(BROTLI_BUILD_ENDIAN_NEUTRAL)
> -/* Just break elif chain. */
> -#elif defined(__BYTE_ORDER__) && (__BYTE_ORDER__ ==
> __ORDER_LITTLE_ENDIAN__)
> -#define BROTLI_LITTLE_ENDIAN 1
> -#elif defined(_WIN32) || defined(BROTLI_TARGET_X64)
> -/* Win32 & x64 can currently always be assumed to be little endian */
> -#define BROTLI_LITTLE_ENDIAN 1
> -#elif defined(__BYTE_ORDER__) && (__BYTE_ORDER__ ==
> __ORDER_BIG_ENDIAN__)
> -#define BROTLI_BIG_ENDIAN 1
> -#elif defined(BROTLI_X_BYTE_ORDER)
> -#if BROTLI_X_BYTE_ORDER == BROTLI_X_LITTLE_ENDIAN
> -#define BROTLI_LITTLE_ENDIAN 1
> -#elif BROTLI_X_BYTE_ORDER == BROTLI_X_BIG_ENDIAN
> -#define BROTLI_BIG_ENDIAN 1
> -#endif
> -#endif /* BROTLI_X_BYTE_ORDER */
> -
> -#if !defined(BROTLI_LITTLE_ENDIAN)
> -#define BROTLI_LITTLE_ENDIAN 0
> -#endif
> -
> -#if !defined(BROTLI_BIG_ENDIAN)
> -#define BROTLI_BIG_ENDIAN 0
> -#endif
> -
> -#if defined(BROTLI_X_BYTE_ORDER)
> -#undef BROTLI_X_BYTE_ORDER
> -#undef BROTLI_X_LITTLE_ENDIAN
> -#undef BROTLI_X_BIG_ENDIAN
> -#endif
> -
> -#if defined(BROTLI_BUILD_PORTABLE)
> -#define BROTLI_ALIGNED_READ (!!1)
> -#elif defined(BROTLI_TARGET_X86) || defined(BROTLI_TARGET_X64) || \
> - defined(BROTLI_TARGET_ARMV7) ||
> defined(BROTLI_TARGET_ARMV8_ANY) || \
> - defined(BROTLI_TARGET_RISCV64)
> -/* Allow unaligned read only for white-listed CPUs. */
> -#define BROTLI_ALIGNED_READ (!!0)
> -#else
> -#define BROTLI_ALIGNED_READ (!!1)
> -#endif
> -
> -#if BROTLI_ALIGNED_READ
> -/* Portable unaligned memory access: read / write values via memcpy. */
> -static BROTLI_INLINE uint16_t BrotliUnalignedRead16(const void* p) {
> - uint16_t t;
> - memcpy(&t, p, sizeof t);
> - return t;
> -}
> -static BROTLI_INLINE uint32_t BrotliUnalignedRead32(const void* p) {
> - uint32_t t;
> - memcpy(&t, p, sizeof t);
> - return t;
> -}
> -static BROTLI_INLINE uint64_t BrotliUnalignedRead64(const void* p) {
> - uint64_t t;
> - memcpy(&t, p, sizeof t);
> - return t;
> -}
> -static BROTLI_INLINE void BrotliUnalignedWrite64(void* p, uint64_t v) {
> - memcpy(p, &v, sizeof v);
> -}
> -#else /* BROTLI_ALIGNED_READ */
> -/* Unaligned memory access is allowed: just cast pointer to requested type.
> */
> -#if defined(ADDRESS_SANITIZER) || defined(THREAD_SANITIZER) || \
> - defined(MEMORY_SANITIZER)
> -/* Consider we have an unaligned load/store of 4 bytes from address 0x...05.
> - AddressSanitizer will treat it as a 3-byte access to the range 05:07 and
> - will miss a bug if 08 is the first unaddressable byte.
> - ThreadSanitizer will also treat this as a 3-byte access to 05:07 and will
> - miss a race between this access and some other accesses to 08.
> - MemorySanitizer will correctly propagate the shadow on unaligned stores
> - and correctly report bugs on unaligned loads, but it may not properly
> - update and report the origin of the uninitialized memory.
> - For all three tools, replacing an unaligned access with a tool-specific
> - callback solves the problem. */
> -#if defined(__cplusplus)
> -extern "C" {
> -#endif /* __cplusplus */
> - uint16_t __sanitizer_unaligned_load16(const void* p);
> - uint32_t __sanitizer_unaligned_load32(const void* p);
> - uint64_t __sanitizer_unaligned_load64(const void* p);
> - void __sanitizer_unaligned_store64(void* p, uint64_t v);
> -#if defined(__cplusplus)
> -} /* extern "C" */
> -#endif /* __cplusplus */
> -#define BrotliUnalignedRead16 __sanitizer_unaligned_load16
> -#define BrotliUnalignedRead32 __sanitizer_unaligned_load32
> -#define BrotliUnalignedRead64 __sanitizer_unaligned_load64
> -#define BrotliUnalignedWrite64 __sanitizer_unaligned_store64
> -#else
> -static BROTLI_INLINE uint16_t BrotliUnalignedRead16(const void* p) {
> - return *(const uint16_t*)p;
> -}
> -static BROTLI_INLINE uint32_t BrotliUnalignedRead32(const void* p) {
> - return *(const uint32_t*)p;
> -}
> -#if (BROTLI_64_BITS)
> -static BROTLI_INLINE uint64_t BrotliUnalignedRead64(const void* p) {
> - return *(const uint64_t*)p;
> -}
> -static BROTLI_INLINE void BrotliUnalignedWrite64(void* p, uint64_t v) {
> - *(uint64_t*)p = v;
> -}
> -#else /* BROTLI_64_BITS */
> -/* Avoid emitting LDRD / STRD, which require properly aligned address. */
> -/* If __attribute__(aligned) is available, use that. Otherwise, memcpy. */
> -
> -#if BROTLI_GNUC_HAS_ATTRIBUTE(aligned, 2, 7, 0)
> -typedef __attribute__((aligned(1))) uint64_t brotli_unaligned_uint64_t;
> -
> -static BROTLI_INLINE uint64_t BrotliUnalignedRead64(const void* p) {
> - return (uint64_t) ((brotli_unaligned_uint64_t*) p)[0];
> -}
> -static BROTLI_INLINE void BrotliUnalignedWrite64(void* p, uint64_t v) {
> - brotli_unaligned_uint64_t* dwords = (brotli_unaligned_uint64_t*) p;
> - dwords[0] = (brotli_unaligned_uint64_t) v;
> -}
> -#else /* BROTLI_GNUC_HAS_ATTRIBUTE(aligned, 2, 7, 0) */
> -static BROTLI_INLINE uint64_t BrotliUnalignedRead64(const void* p) {
> - uint64_t v;
> - memcpy(&v, p, sizeof(uint64_t));
> - return v;
> -}
> -
> -static BROTLI_INLINE void BrotliUnalignedWrite64(void* p, uint64_t v) {
> - memcpy(p, &v, sizeof(uint64_t));
> -}
> -#endif /* BROTLI_GNUC_HAS_ATTRIBUTE(aligned, 2, 7, 0) */
> -#endif /* BROTLI_64_BITS */
> -#endif /* ASAN / TSAN / MSAN */
> -#endif /* BROTLI_ALIGNED_READ */
> -
> -#if BROTLI_LITTLE_ENDIAN
> -/* Straight endianness. Just read / write values. */
> -#define BROTLI_UNALIGNED_LOAD16LE BrotliUnalignedRead16
> -#define BROTLI_UNALIGNED_LOAD32LE BrotliUnalignedRead32
> -#define BROTLI_UNALIGNED_LOAD64LE BrotliUnalignedRead64
> -#define BROTLI_UNALIGNED_STORE64LE BrotliUnalignedWrite64
> -#elif BROTLI_BIG_ENDIAN /* BROTLI_LITTLE_ENDIAN */
> -/* Explain compiler to byte-swap values. */
> -#define BROTLI_BSWAP16_(V) ((uint16_t)( \
> - (((V) & 0xFFU) << 8) | \
> - (((V) >> 8) & 0xFFU)))
> -static BROTLI_INLINE uint16_t BROTLI_UNALIGNED_LOAD16LE(const void* p)
> {
> - uint16_t value = BrotliUnalignedRead16(p);
> - return BROTLI_BSWAP16_(value);
> -}
> -#define BROTLI_BSWAP32_(V) ( \
> - (((V) & 0xFFU) << 24) | (((V) & 0xFF00U) << 8) | \
> - (((V) >> 8) & 0xFF00U) | (((V) >> 24) & 0xFFU))
> -static BROTLI_INLINE uint32_t BROTLI_UNALIGNED_LOAD32LE(const void* p)
> {
> - uint32_t value = BrotliUnalignedRead32(p);
> - return BROTLI_BSWAP32_(value);
> -}
> -#define BROTLI_BSWAP64_(V) ( \
> - (((V) & 0xFFU) << 56) | (((V) & 0xFF00U) << 40) | \
> - (((V) & 0xFF0000U) << 24) | (((V) & 0xFF000000U) << 8) | \
> - (((V) >> 8) & 0xFF000000U) | (((V) >> 24) & 0xFF0000U) | \
> - (((V) >> 40) & 0xFF00U) | (((V) >> 56) & 0xFFU))
> -static BROTLI_INLINE uint64_t BROTLI_UNALIGNED_LOAD64LE(const void* p)
> {
> - uint64_t value = BrotliUnalignedRead64(p);
> - return BROTLI_BSWAP64_(value);
> -}
> -static BROTLI_INLINE void BROTLI_UNALIGNED_STORE64LE(void* p,
> uint64_t v) {
> - uint64_t value = BROTLI_BSWAP64_(v);
> - BrotliUnalignedWrite64(p, value);
> -}
> -#else /* BROTLI_LITTLE_ENDIAN */
> -/* Read / store values byte-wise; hopefully compiler will understand. */
> -static BROTLI_INLINE uint16_t BROTLI_UNALIGNED_LOAD16LE(const void* p)
> {
> - const uint8_t* in = (const uint8_t*)p;
> - return (uint16_t)(in[0] | (in[1] << 8));
> -}
> -static BROTLI_INLINE uint32_t BROTLI_UNALIGNED_LOAD32LE(const void* p)
> {
> - const uint8_t* in = (const uint8_t*)p;
> - uint32_t value = (uint32_t)(in[0]);
> - value |= (uint32_t)(in[1]) << 8;
> - value |= (uint32_t)(in[2]) << 16;
> - value |= (uint32_t)(in[3]) << 24;
> - return value;
> -}
> -static BROTLI_INLINE uint64_t BROTLI_UNALIGNED_LOAD64LE(const void* p)
> {
> - const uint8_t* in = (const uint8_t*)p;
> - uint64_t value = (uint64_t)(in[0]);
> - value |= (uint64_t)(in[1]) << 8;
> - value |= (uint64_t)(in[2]) << 16;
> - value |= (uint64_t)(in[3]) << 24;
> - value |= (uint64_t)(in[4]) << 32;
> - value |= (uint64_t)(in[5]) << 40;
> - value |= (uint64_t)(in[6]) << 48;
> - value |= (uint64_t)(in[7]) << 56;
> - return value;
> -}
> -static BROTLI_INLINE void BROTLI_UNALIGNED_STORE64LE(void* p,
> uint64_t v) {
> - uint8_t* out = (uint8_t*)p;
> - out[0] = (uint8_t)v;
> - out[1] = (uint8_t)(v >> 8);
> - out[2] = (uint8_t)(v >> 16);
> - out[3] = (uint8_t)(v >> 24);
> - out[4] = (uint8_t)(v >> 32);
> - out[5] = (uint8_t)(v >> 40);
> - out[6] = (uint8_t)(v >> 48);
> - out[7] = (uint8_t)(v >> 56);
> -}
> -#endif /* BROTLI_LITTLE_ENDIAN */
> -
> -/* BROTLI_IS_CONSTANT macros returns true for compile-time constants.
> */
> -#if BROTLI_GNUC_HAS_BUILTIN(__builtin_constant_p, 3, 0, 1) || \
> - BROTLI_INTEL_VERSION_CHECK(16, 0, 0)
> -#define BROTLI_IS_CONSTANT(x) (!!__builtin_constant_p(x))
> -#else
> -#define BROTLI_IS_CONSTANT(x) (!!0)
> -#endif
> -
> -#if defined(BROTLI_TARGET_ARMV7) ||
> defined(BROTLI_TARGET_ARMV8_ANY)
> -#define BROTLI_HAS_UBFX (!!1)
> -#else
> -#define BROTLI_HAS_UBFX (!!0)
> -#endif
> -
> -#if defined(BROTLI_ENABLE_LOG)
> -#define BROTLI_DCHECK(x) assert(x)
> -#define BROTLI_LOG(x) printf x
> -#else
> -#define BROTLI_DCHECK(x)
> -#define BROTLI_LOG(x)
> -#endif
> -
> -#if defined(BROTLI_DEBUG) || defined(BROTLI_ENABLE_LOG)
> -static BROTLI_INLINE void BrotliDump(const char* f, int l, const char* fn) {
> - fprintf(stderr, "%s:%d (%s)\n", f, l, fn);
> - fflush(stderr);
> -}
> -#define BROTLI_DUMP() BrotliDump(__FILE__, __LINE__, __FUNCTION__)
> -#else
> -#define BROTLI_DUMP() (void)(0)
> -#endif
> -
> -/* TODO: add appropriate icc/sunpro/arm/ibm/ti checks. */
> -#if (BROTLI_GNUC_VERSION_CHECK(3, 0, 0) || defined(__llvm__)) && \
> - !defined(BROTLI_BUILD_NO_RBIT)
> -#if defined(BROTLI_TARGET_ARMV7) ||
> defined(BROTLI_TARGET_ARMV8_ANY)
> -/* TODO: detect ARMv6T2 and enable this code for it. */
> -static BROTLI_INLINE brotli_reg_t BrotliRBit(brotli_reg_t input) {
> - brotli_reg_t output;
> - __asm__("rbit %0, %1\n" : "=r"(output) : "r"(input));
> - return output;
> -}
> -#define BROTLI_RBIT(x) BrotliRBit(x)
> -#endif /* armv7 / armv8 */
> -#endif /* gcc || clang */
> -#if !defined(BROTLI_RBIT)
> -static BROTLI_INLINE void BrotliRBit(void) { /* Should break build if used. */ }
> -#endif /* BROTLI_RBIT */
> -
> -#define BROTLI_REPEAT(N, X) { \
> - if ((N & 1) != 0) {X;} \
> - if ((N & 2) != 0) {X; X;} \
> - if ((N & 4) != 0) {X; X; X; X;} \
> -}
> -
> -#define BROTLI_UNUSED(X) (void)(X)
> -
> -#define BROTLI_MIN_MAX(T) \
> - static BROTLI_INLINE T brotli_min_ ## T (T a, T b) { return a < b ? a : b; } \
> - static BROTLI_INLINE T brotli_max_ ## T (T a, T b) { return a > b ? a : b; }
> -BROTLI_MIN_MAX(double) BROTLI_MIN_MAX(float)
> BROTLI_MIN_MAX(int)
> -BROTLI_MIN_MAX(size_t) BROTLI_MIN_MAX(uint32_t)
> BROTLI_MIN_MAX(uint8_t)
> -#undef BROTLI_MIN_MAX
> -#define BROTLI_MIN(T, A, B) (brotli_min_ ## T((A), (B)))
> -#define BROTLI_MAX(T, A, B) (brotli_max_ ## T((A), (B)))
> -
> -#define BROTLI_SWAP(T, A, I, J) { \
> - T __brotli_swap_tmp = (A)[(I)]; \
> - (A)[(I)] = (A)[(J)]; \
> - (A)[(J)] = __brotli_swap_tmp; \
> -}
> -
> -/* Default brotli_alloc_func */
> -static void* BrotliDefaultAllocFunc(void* opaque, size_t size) {
> - BROTLI_UNUSED(opaque);
> - return malloc(size);
> -}
> -
> -/* Default brotli_free_func */
> -static void BrotliDefaultFreeFunc(void* opaque, void* address) {
> - BROTLI_UNUSED(opaque);
> - free(address);
> -}
> -
> -BROTLI_UNUSED_FUNCTION void BrotliSuppressUnusedFunctions(void) {
> - BROTLI_UNUSED(&BrotliSuppressUnusedFunctions);
> - BROTLI_UNUSED(&BrotliUnalignedRead16);
> - BROTLI_UNUSED(&BrotliUnalignedRead32);
> - BROTLI_UNUSED(&BrotliUnalignedRead64);
> - BROTLI_UNUSED(&BrotliUnalignedWrite64);
> - BROTLI_UNUSED(&BROTLI_UNALIGNED_LOAD16LE);
> - BROTLI_UNUSED(&BROTLI_UNALIGNED_LOAD32LE);
> - BROTLI_UNUSED(&BROTLI_UNALIGNED_LOAD64LE);
> - BROTLI_UNUSED(&BROTLI_UNALIGNED_STORE64LE);
> - BROTLI_UNUSED(&BrotliRBit);
> - BROTLI_UNUSED(&brotli_min_double);
> - BROTLI_UNUSED(&brotli_max_double);
> - BROTLI_UNUSED(&brotli_min_float);
> - BROTLI_UNUSED(&brotli_max_float);
> - BROTLI_UNUSED(&brotli_min_int);
> - BROTLI_UNUSED(&brotli_max_int);
> - BROTLI_UNUSED(&brotli_min_size_t);
> - BROTLI_UNUSED(&brotli_max_size_t);
> - BROTLI_UNUSED(&brotli_min_uint32_t);
> - BROTLI_UNUSED(&brotli_max_uint32_t);
> - BROTLI_UNUSED(&brotli_min_uint8_t);
> - BROTLI_UNUSED(&brotli_max_uint8_t);
> - BROTLI_UNUSED(&BrotliDefaultAllocFunc);
> - BROTLI_UNUSED(&BrotliDefaultFreeFunc);
> -#if defined(BROTLI_DEBUG) || defined(BROTLI_ENABLE_LOG)
> - BROTLI_UNUSED(&BrotliDump);
> -#endif
> -}
> -
> -#endif /* BROTLI_COMMON_PLATFORM_H_ */
> diff --git a/BaseTools/Source/C/BrotliCompress/common/transform.h
> b/BaseTools/Source/C/BrotliCompress/common/transform.h
> deleted file mode 100644
> index 8b42cd1807b0..000000000000
> --- a/BaseTools/Source/C/BrotliCompress/common/transform.h
> +++ /dev/null
> @@ -1,80 +0,0 @@
> -/* transforms is a part of ABI, but not API.
> -
> - It means that there are some functions that are supposed to be in
> "common"
> - library, but header itself is not placed into include/brotli. This way,
> - aforementioned functions will be available only to brotli internals.
> - */
> -
> -#ifndef BROTLI_COMMON_TRANSFORM_H_
> -#define BROTLI_COMMON_TRANSFORM_H_
> -
> -#include <brotli/port.h>
> -#include <brotli/types.h>
> -
> -#if defined(__cplusplus) || defined(c_plusplus)
> -extern "C" {
> -#endif
> -
> -enum BrotliWordTransformType {
> - BROTLI_TRANSFORM_IDENTITY = 0,
> - BROTLI_TRANSFORM_OMIT_LAST_1 = 1,
> - BROTLI_TRANSFORM_OMIT_LAST_2 = 2,
> - BROTLI_TRANSFORM_OMIT_LAST_3 = 3,
> - BROTLI_TRANSFORM_OMIT_LAST_4 = 4,
> - BROTLI_TRANSFORM_OMIT_LAST_5 = 5,
> - BROTLI_TRANSFORM_OMIT_LAST_6 = 6,
> - BROTLI_TRANSFORM_OMIT_LAST_7 = 7,
> - BROTLI_TRANSFORM_OMIT_LAST_8 = 8,
> - BROTLI_TRANSFORM_OMIT_LAST_9 = 9,
> - BROTLI_TRANSFORM_UPPERCASE_FIRST = 10,
> - BROTLI_TRANSFORM_UPPERCASE_ALL = 11,
> - BROTLI_TRANSFORM_OMIT_FIRST_1 = 12,
> - BROTLI_TRANSFORM_OMIT_FIRST_2 = 13,
> - BROTLI_TRANSFORM_OMIT_FIRST_3 = 14,
> - BROTLI_TRANSFORM_OMIT_FIRST_4 = 15,
> - BROTLI_TRANSFORM_OMIT_FIRST_5 = 16,
> - BROTLI_TRANSFORM_OMIT_FIRST_6 = 17,
> - BROTLI_TRANSFORM_OMIT_FIRST_7 = 18,
> - BROTLI_TRANSFORM_OMIT_FIRST_8 = 19,
> - BROTLI_TRANSFORM_OMIT_FIRST_9 = 20,
> - BROTLI_NUM_TRANSFORM_TYPES /* Counts transforms, not a transform
> itself. */
> -};
> -
> -#define BROTLI_TRANSFORMS_MAX_CUT_OFF
> BROTLI_TRANSFORM_OMIT_LAST_9
> -
> -typedef struct BrotliTransforms {
> - uint16_t prefix_suffix_size;
> - /* Last character must be null, so prefix_suffix_size must be at least 1. */
> - const uint8_t* prefix_suffix;
> - const uint16_t* prefix_suffix_map;
> - uint32_t num_transforms;
> - /* Each entry is a [prefix_id, transform, suffix_id] triplet. */
> - const uint8_t* transforms;
> - /* Indices of transforms like ["", BROTLI_TRANSFORM_OMIT_LAST_#, ""].
> - 0-th element corresponds to ["", BROTLI_TRANSFORM_IDENTITY, ""].
> - -1, if cut-off transform does not exist. */
> - int16_t cutOffTransforms[BROTLI_TRANSFORMS_MAX_CUT_OFF + 1];
> -} BrotliTransforms;
> -
> -/* T is BrotliTransforms*; result is uint8_t. */
> -#define BROTLI_TRANSFORM_PREFIX_ID(T, I) ((T)->transforms[((I) * 3) + 0])
> -#define BROTLI_TRANSFORM_TYPE(T, I) ((T)->transforms[((I) * 3) + 1])
> -#define BROTLI_TRANSFORM_SUFFIX_ID(T, I) ((T)->transforms[((I) * 3) + 2])
> -
> -/* T is BrotliTransforms*; result is const uint8_t*. */
> -#define BROTLI_TRANSFORM_PREFIX(T, I) (&(T)->prefix_suffix[ \
> - (T)->prefix_suffix_map[BROTLI_TRANSFORM_PREFIX_ID(T, I)]])
> -#define BROTLI_TRANSFORM_SUFFIX(T, I) (&(T)->prefix_suffix[ \
> - (T)->prefix_suffix_map[BROTLI_TRANSFORM_SUFFIX_ID(T, I)]])
> -
> -BROTLI_COMMON_API const BrotliTransforms* BrotliGetTransforms(void);
> -
> -BROTLI_COMMON_API int BrotliTransformDictionaryWord(
> - uint8_t* dst, const uint8_t* word, int len,
> - const BrotliTransforms* transforms, int transform_idx);
> -
> -#if defined(__cplusplus) || defined(c_plusplus)
> -} /* extern "C" */
> -#endif
> -
> -#endif /* BROTLI_COMMON_TRANSFORM_H_ */
> diff --git a/BaseTools/Source/C/BrotliCompress/common/version.h
> b/BaseTools/Source/C/BrotliCompress/common/version.h
> deleted file mode 100644
> index 8e94f4ffeacd..000000000000
> --- a/BaseTools/Source/C/BrotliCompress/common/version.h
> +++ /dev/null
> @@ -1,26 +0,0 @@
> -/* Copyright 2016 Google Inc. All Rights Reserved.
> -
> - Distributed under MIT license.
> - See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
> -*/
> -
> -/* Version definition. */
> -
> -#ifndef BROTLI_COMMON_VERSION_H_
> -#define BROTLI_COMMON_VERSION_H_
> -
> -/* This macro should only be used when library is compiled together with
> client.
> - If library is dynamically linked, use BrotliDecoderVersion and
> - BrotliEncoderVersion methods. */
> -
> -/* Semantic version, calculated as (MAJOR << 24) | (MINOR << 12) | PATCH
> */
> -#define BROTLI_VERSION 0x1000006
> -
> -/* This macro is used by build system to produce Libtool-friendly soname.
> See
> - https://www.gnu.org/software/libtool/manual/html_node/Libtool-
> versioning.html
> - */
> -
> -/* ABI version, calculated as (CURRENT << 24) | (REVISION << 12) | AGE */
> -#define BROTLI_ABI_VERSION 0x1006000
> -
> -#endif /* BROTLI_COMMON_VERSION_H_ */
> diff --git a/BaseTools/Source/C/BrotliCompress/dec/bit_reader.h
> b/BaseTools/Source/C/BrotliCompress/dec/bit_reader.h
> deleted file mode 100644
> index b13e33fea208..000000000000
> --- a/BaseTools/Source/C/BrotliCompress/dec/bit_reader.h
> +++ /dev/null
> @@ -1,309 +0,0 @@
> -/* Copyright 2013 Google Inc. All Rights Reserved.
> -
> - Distributed under MIT license.
> - See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
> -*/
> -
> -/* Bit reading helpers */
> -
> -#ifndef BROTLI_DEC_BIT_READER_H_
> -#define BROTLI_DEC_BIT_READER_H_
> -
> -#include <string.h> /* memcpy */
> -
> -#include "../common/platform.h"
> -#include <brotli/types.h>
> -
> -#if defined(__cplusplus) || defined(c_plusplus)
> -extern "C" {
> -#endif
> -
> -#define BROTLI_SHORT_FILL_BIT_WINDOW_READ (sizeof(brotli_reg_t) >> 1)
> -
> -static const uint32_t kBitMask[33] = { 0x00000000,
> - 0x00000001, 0x00000003, 0x00000007, 0x0000000F,
> - 0x0000001F, 0x0000003F, 0x0000007F, 0x000000FF,
> - 0x000001FF, 0x000003FF, 0x000007FF, 0x00000FFF,
> - 0x00001FFF, 0x00003FFF, 0x00007FFF, 0x0000FFFF,
> - 0x0001FFFF, 0x0003FFFF, 0x0007FFFF, 0x000FFFFF,
> - 0x001FFFFF, 0x003FFFFF, 0x007FFFFF, 0x00FFFFFF,
> - 0x01FFFFFF, 0x03FFFFFF, 0x07FFFFFF, 0x0FFFFFFF,
> - 0x1FFFFFFF, 0x3FFFFFFF, 0x7FFFFFFF, 0xFFFFFFFF
> -};
> -
> -static BROTLI_INLINE uint32_t BitMask(uint32_t n) {
> - if (BROTLI_IS_CONSTANT(n) || BROTLI_HAS_UBFX) {
> - /* Masking with this expression turns to a single
> - "Unsigned Bit Field Extract" UBFX instruction on ARM. */
> - return ~((0xFFFFFFFFu) << n);
> - } else {
> - return kBitMask[n];
> - }
> -}
> -
> -typedef struct {
> - brotli_reg_t val_; /* pre-fetched bits */
> - uint32_t bit_pos_; /* current bit-reading position in val_ */
> - const uint8_t* next_in; /* the byte we're reading from */
> - size_t avail_in;
> -} BrotliBitReader;
> -
> -typedef struct {
> - brotli_reg_t val_;
> - uint32_t bit_pos_;
> - const uint8_t* next_in;
> - size_t avail_in;
> -} BrotliBitReaderState;
> -
> -/* Initializes the BrotliBitReader fields. */
> -BROTLI_INTERNAL void BrotliInitBitReader(BrotliBitReader* const br);
> -
> -/* Ensures that accumulator is not empty.
> - May consume up to sizeof(brotli_reg_t) - 1 bytes of input.
> - Returns BROTLI_FALSE if data is required but there is no input available.
> - For BROTLI_ALIGNED_READ this function also prepares bit reader for
> aligned
> - reading. */
> -BROTLI_INTERNAL BROTLI_BOOL BrotliWarmupBitReader(BrotliBitReader*
> const br);
> -
> -static BROTLI_INLINE void BrotliBitReaderSaveState(
> - BrotliBitReader* const from, BrotliBitReaderState* to) {
> - to->val_ = from->val_;
> - to->bit_pos_ = from->bit_pos_;
> - to->next_in = from->next_in;
> - to->avail_in = from->avail_in;
> -}
> -
> -static BROTLI_INLINE void BrotliBitReaderRestoreState(
> - BrotliBitReader* const to, BrotliBitReaderState* from) {
> - to->val_ = from->val_;
> - to->bit_pos_ = from->bit_pos_;
> - to->next_in = from->next_in;
> - to->avail_in = from->avail_in;
> -}
> -
> -static BROTLI_INLINE uint32_t BrotliGetAvailableBits(
> - const BrotliBitReader* br) {
> - return (BROTLI_64_BITS ? 64 : 32) - br->bit_pos_;
> -}
> -
> -/* Returns amount of unread bytes the bit reader still has buffered from the
> - BrotliInput, including whole bytes in br->val_. */
> -static BROTLI_INLINE size_t BrotliGetRemainingBytes(BrotliBitReader* br) {
> - return br->avail_in + (BrotliGetAvailableBits(br) >> 3);
> -}
> -
> -/* Checks if there is at least |num| bytes left in the input ring-buffer
> - (excluding the bits remaining in br->val_). */
> -static BROTLI_INLINE BROTLI_BOOL BrotliCheckInputAmount(
> - BrotliBitReader* const br, size_t num) {
> - return TO_BROTLI_BOOL(br->avail_in >= num);
> -}
> -
> -/* Guarantees that there are at least |n_bits| + 1 bits in accumulator.
> - Precondition: accumulator contains at least 1 bit.
> - |n_bits| should be in the range [1..24] for regular build. For portable
> - non-64-bit little-endian build only 16 bits are safe to request. */
> -static BROTLI_INLINE void BrotliFillBitWindow(
> - BrotliBitReader* const br, uint32_t n_bits) {
> -#if (BROTLI_64_BITS)
> - if (!BROTLI_ALIGNED_READ && BROTLI_IS_CONSTANT(n_bits) && (n_bits
> <= 8)) {
> - if (br->bit_pos_ >= 56) {
> - br->val_ >>= 56;
> - br->bit_pos_ ^= 56; /* here same as -= 56 because of the if condition */
> - br->val_ |= BROTLI_UNALIGNED_LOAD64LE(br->next_in) << 8;
> - br->avail_in -= 7;
> - br->next_in += 7;
> - }
> - } else if (
> - !BROTLI_ALIGNED_READ && BROTLI_IS_CONSTANT(n_bits) && (n_bits
> <= 16)) {
> - if (br->bit_pos_ >= 48) {
> - br->val_ >>= 48;
> - br->bit_pos_ ^= 48; /* here same as -= 48 because of the if condition */
> - br->val_ |= BROTLI_UNALIGNED_LOAD64LE(br->next_in) << 16;
> - br->avail_in -= 6;
> - br->next_in += 6;
> - }
> - } else {
> - if (br->bit_pos_ >= 32) {
> - br->val_ >>= 32;
> - br->bit_pos_ ^= 32; /* here same as -= 32 because of the if condition */
> - br->val_ |= ((uint64_t)BROTLI_UNALIGNED_LOAD32LE(br->next_in)) <<
> 32;
> - br->avail_in -= BROTLI_SHORT_FILL_BIT_WINDOW_READ;
> - br->next_in += BROTLI_SHORT_FILL_BIT_WINDOW_READ;
> - }
> - }
> -#else
> - if (!BROTLI_ALIGNED_READ && BROTLI_IS_CONSTANT(n_bits) && (n_bits
> <= 8)) {
> - if (br->bit_pos_ >= 24) {
> - br->val_ >>= 24;
> - br->bit_pos_ ^= 24; /* here same as -= 24 because of the if condition */
> - br->val_ |= BROTLI_UNALIGNED_LOAD32LE(br->next_in) << 8;
> - br->avail_in -= 3;
> - br->next_in += 3;
> - }
> - } else {
> - if (br->bit_pos_ >= 16) {
> - br->val_ >>= 16;
> - br->bit_pos_ ^= 16; /* here same as -= 16 because of the if condition */
> - br->val_ |= ((uint32_t)BROTLI_UNALIGNED_LOAD16LE(br->next_in)) <<
> 16;
> - br->avail_in -= BROTLI_SHORT_FILL_BIT_WINDOW_READ;
> - br->next_in += BROTLI_SHORT_FILL_BIT_WINDOW_READ;
> - }
> - }
> -#endif
> -}
> -
> -/* Mostly like BrotliFillBitWindow, but guarantees only 16 bits and reads no
> - more than BROTLI_SHORT_FILL_BIT_WINDOW_READ bytes of input. */
> -static BROTLI_INLINE void BrotliFillBitWindow16(BrotliBitReader* const br) {
> - BrotliFillBitWindow(br, 17);
> -}
> -
> -/* Tries to pull one byte of input to accumulator.
> - Returns BROTLI_FALSE if there is no input available. */
> -static BROTLI_INLINE BROTLI_BOOL BrotliPullByte(BrotliBitReader* const br)
> {
> - if (br->avail_in == 0) {
> - return BROTLI_FALSE;
> - }
> - br->val_ >>= 8;
> -#if (BROTLI_64_BITS)
> - br->val_ |= ((uint64_t)*br->next_in) << 56;
> -#else
> - br->val_ |= ((uint32_t)*br->next_in) << 24;
> -#endif
> - br->bit_pos_ -= 8;
> - --br->avail_in;
> - ++br->next_in;
> - return BROTLI_TRUE;
> -}
> -
> -/* Returns currently available bits.
> - The number of valid bits could be calculated by BrotliGetAvailableBits. */
> -static BROTLI_INLINE brotli_reg_t BrotliGetBitsUnmasked(
> - BrotliBitReader* const br) {
> - return br->val_ >> br->bit_pos_;
> -}
> -
> -/* Like BrotliGetBits, but does not mask the result.
> - The result contains at least 16 valid bits. */
> -static BROTLI_INLINE uint32_t BrotliGet16BitsUnmasked(
> - BrotliBitReader* const br) {
> - BrotliFillBitWindow(br, 16);
> - return (uint32_t)BrotliGetBitsUnmasked(br);
> -}
> -
> -/* Returns the specified number of bits from |br| without advancing bit
> - position. */
> -static BROTLI_INLINE uint32_t BrotliGetBits(
> - BrotliBitReader* const br, uint32_t n_bits) {
> - BrotliFillBitWindow(br, n_bits);
> - return (uint32_t)BrotliGetBitsUnmasked(br) & BitMask(n_bits);
> -}
> -
> -/* Tries to peek the specified amount of bits. Returns BROTLI_FALSE, if
> there
> - is not enough input. */
> -static BROTLI_INLINE BROTLI_BOOL BrotliSafeGetBits(
> - BrotliBitReader* const br, uint32_t n_bits, uint32_t* val) {
> - while (BrotliGetAvailableBits(br) < n_bits) {
> - if (!BrotliPullByte(br)) {
> - return BROTLI_FALSE;
> - }
> - }
> - *val = (uint32_t)BrotliGetBitsUnmasked(br) & BitMask(n_bits);
> - return BROTLI_TRUE;
> -}
> -
> -/* Advances the bit pos by |n_bits|. */
> -static BROTLI_INLINE void BrotliDropBits(
> - BrotliBitReader* const br, uint32_t n_bits) {
> - br->bit_pos_ += n_bits;
> -}
> -
> -static BROTLI_INLINE void BrotliBitReaderUnload(BrotliBitReader* br) {
> - uint32_t unused_bytes = BrotliGetAvailableBits(br) >> 3;
> - uint32_t unused_bits = unused_bytes << 3;
> - br->avail_in += unused_bytes;
> - br->next_in -= unused_bytes;
> - if (unused_bits == sizeof(br->val_) << 3) {
> - br->val_ = 0;
> - } else {
> - br->val_ <<= unused_bits;
> - }
> - br->bit_pos_ += unused_bits;
> -}
> -
> -/* Reads the specified number of bits from |br| and advances the bit pos.
> - Precondition: accumulator MUST contain at least |n_bits|. */
> -static BROTLI_INLINE void BrotliTakeBits(
> - BrotliBitReader* const br, uint32_t n_bits, uint32_t* val) {
> - *val = (uint32_t)BrotliGetBitsUnmasked(br) & BitMask(n_bits);
> - BROTLI_LOG(("[BrotliReadBits] %d %d %d val: %6x\n",
> - (int)br->avail_in, (int)br->bit_pos_, (int)n_bits, (int)*val));
> - BrotliDropBits(br, n_bits);
> -}
> -
> -/* Reads the specified number of bits from |br| and advances the bit pos.
> - Assumes that there is enough input to perform BrotliFillBitWindow. */
> -static BROTLI_INLINE uint32_t BrotliReadBits(
> - BrotliBitReader* const br, uint32_t n_bits) {
> - if (BROTLI_64_BITS || (n_bits <= 16)) {
> - uint32_t val;
> - BrotliFillBitWindow(br, n_bits);
> - BrotliTakeBits(br, n_bits, &val);
> - return val;
> - } else {
> - uint32_t low_val;
> - uint32_t high_val;
> - BrotliFillBitWindow(br, 16);
> - BrotliTakeBits(br, 16, &low_val);
> - BrotliFillBitWindow(br, 8);
> - BrotliTakeBits(br, n_bits - 16, &high_val);
> - return low_val | (high_val << 16);
> - }
> -}
> -
> -/* Tries to read the specified amount of bits. Returns BROTLI_FALSE, if there
> - is not enough input. |n_bits| MUST be positive. */
> -static BROTLI_INLINE BROTLI_BOOL BrotliSafeReadBits(
> - BrotliBitReader* const br, uint32_t n_bits, uint32_t* val) {
> - while (BrotliGetAvailableBits(br) < n_bits) {
> - if (!BrotliPullByte(br)) {
> - return BROTLI_FALSE;
> - }
> - }
> - BrotliTakeBits(br, n_bits, val);
> - return BROTLI_TRUE;
> -}
> -
> -/* Advances the bit reader position to the next byte boundary and verifies
> - that any skipped bits are set to zero. */
> -static BROTLI_INLINE BROTLI_BOOL
> BrotliJumpToByteBoundary(BrotliBitReader* br) {
> - uint32_t pad_bits_count = BrotliGetAvailableBits(br) & 0x7;
> - uint32_t pad_bits = 0;
> - if (pad_bits_count != 0) {
> - BrotliTakeBits(br, pad_bits_count, &pad_bits);
> - }
> - return TO_BROTLI_BOOL(pad_bits == 0);
> -}
> -
> -/* Copies remaining input bytes stored in the bit reader to the output. Value
> - |num| may not be larger than BrotliGetRemainingBytes. The bit reader
> must be
> - warmed up again after this. */
> -static BROTLI_INLINE void BrotliCopyBytes(uint8_t* dest,
> - BrotliBitReader* br, size_t num) {
> - while (BrotliGetAvailableBits(br) >= 8 && num > 0) {
> - *dest = (uint8_t)BrotliGetBitsUnmasked(br);
> - BrotliDropBits(br, 8);
> - ++dest;
> - --num;
> - }
> - memcpy(dest, br->next_in, num);
> - br->avail_in -= num;
> - br->next_in += num;
> -}
> -
> -#if defined(__cplusplus) || defined(c_plusplus)
> -} /* extern "C" */
> -#endif
> -
> -#endif /* BROTLI_DEC_BIT_READER_H_ */
> diff --git a/BaseTools/Source/C/BrotliCompress/dec/huffman.h
> b/BaseTools/Source/C/BrotliCompress/dec/huffman.h
> deleted file mode 100644
> index 5fc8c0224edc..000000000000
> --- a/BaseTools/Source/C/BrotliCompress/dec/huffman.h
> +++ /dev/null
> @@ -1,72 +0,0 @@
> -/* Copyright 2013 Google Inc. All Rights Reserved.
> -
> - Distributed under MIT license.
> - See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
> -*/
> -
> -/* Utilities for building Huffman decoding tables. */
> -
> -#ifndef BROTLI_DEC_HUFFMAN_H_
> -#define BROTLI_DEC_HUFFMAN_H_
> -
> -#include "../common/platform.h"
> -#include <brotli/types.h>
> -
> -#if defined(__cplusplus) || defined(c_plusplus)
> -extern "C" {
> -#endif
> -
> -#define BROTLI_HUFFMAN_MAX_CODE_LENGTH 15
> -
> -/* Maximum possible Huffman table size for an alphabet size of (index * 32),
> - max code length 15 and root table bits 8. */
> -static const uint16_t kMaxHuffmanTableSize[] = {
> - 256, 402, 436, 468, 500, 534, 566, 598, 630, 662, 694, 726, 758, 790, 822,
> - 854, 886, 920, 952, 984, 1016, 1048, 1080, 1112, 1144, 1176, 1208, 1240, 1272,
> - 1304, 1336, 1368, 1400, 1432, 1464, 1496, 1528};
> -/* BROTLI_NUM_BLOCK_LEN_SYMBOLS == 26 */
> -#define BROTLI_HUFFMAN_MAX_SIZE_26 396
> -/* BROTLI_MAX_BLOCK_TYPE_SYMBOLS == 258 */
> -#define BROTLI_HUFFMAN_MAX_SIZE_258 632
> -/* BROTLI_MAX_CONTEXT_MAP_SYMBOLS == 272 */
> -#define BROTLI_HUFFMAN_MAX_SIZE_272 646
> -
> -#define BROTLI_HUFFMAN_MAX_CODE_LENGTH_CODE_LENGTH 5
> -
> -typedef struct {
> - uint8_t bits; /* number of bits used for this symbol */
> - uint16_t value; /* symbol value or table offset */
> -} HuffmanCode;
> -
> -/* Builds Huffman lookup table assuming code lengths are in symbol order.
> */
> -BROTLI_INTERNAL void
> BrotliBuildCodeLengthsHuffmanTable(HuffmanCode* root_table,
> - const uint8_t* const code_lengths, uint16_t* count);
> -
> -/* Builds Huffman lookup table assuming code lengths are in symbol order.
> - Returns size of resulting table. */
> -BROTLI_INTERNAL uint32_t BrotliBuildHuffmanTable(HuffmanCode*
> root_table,
> - int root_bits, const uint16_t* const symbol_lists, uint16_t* count_arg);
> -
> -/* Builds a simple Huffman table. The |num_symbols| parameter is to be
> - interpreted as follows: 0 means 1 symbol, 1 means 2 symbols,
> - 2 means 3 symbols, 3 means 4 symbols with lengths [2, 2, 2, 2],
> - 4 means 4 symbols with lengths [1, 2, 3, 3]. */
> -BROTLI_INTERNAL uint32_t BrotliBuildSimpleHuffmanTable(HuffmanCode*
> table,
> - int root_bits, uint16_t* symbols, uint32_t num_symbols);
> -
> -/* Contains a collection of Huffman trees with the same alphabet size. */
> -/* max_symbol is needed due to simple codes since log2(alphabet_size)
> could be
> - greater than log2(max_symbol). */
> -typedef struct {
> - HuffmanCode** htrees;
> - HuffmanCode* codes;
> - uint16_t alphabet_size;
> - uint16_t max_symbol;
> - uint16_t num_htrees;
> -} HuffmanTreeGroup;
> -
> -#if defined(__cplusplus) || defined(c_plusplus)
> -} /* extern "C" */
> -#endif
> -
> -#endif /* BROTLI_DEC_HUFFMAN_H_ */
> diff --git a/BaseTools/Source/C/BrotliCompress/dec/prefix.h
> b/BaseTools/Source/C/BrotliCompress/dec/prefix.h
> deleted file mode 100644
> index 39cb45920831..000000000000
> --- a/BaseTools/Source/C/BrotliCompress/dec/prefix.h
> +++ /dev/null
> @@ -1,750 +0,0 @@
> -/* Copyright 2013 Google Inc. All Rights Reserved.
> -
> - Distributed under MIT license.
> - See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
> -*/
> -
> -/* Lookup tables to map prefix codes to value ranges. This is used during
> - decoding of the block lengths, literal insertion lengths and copy lengths. */
> -
> -#ifndef BROTLI_DEC_PREFIX_H_
> -#define BROTLI_DEC_PREFIX_H_
> -
> -#include "../common/constants.h"
> -#include <brotli/types.h>
> -
> -/* Represents the range of values belonging to a prefix code:
> - [offset, offset + 2^nbits) */
> -struct PrefixCodeRange {
> - uint16_t offset;
> - uint8_t nbits;
> -};
> -
> -static const struct PrefixCodeRange
> - kBlockLengthPrefixCode[BROTLI_NUM_BLOCK_LEN_SYMBOLS] = {
> - { 1, 2}, { 5, 2}, { 9, 2}, { 13, 2},
> - { 17, 3}, { 25, 3}, { 33, 3}, { 41, 3},
> - { 49, 4}, { 65, 4}, { 81, 4}, { 97, 4},
> - { 113, 5}, { 145, 5}, { 177, 5}, { 209, 5},
> - { 241, 6}, { 305, 6}, { 369, 7}, { 497, 8},
> - { 753, 9}, { 1265, 10}, {2289, 11}, {4337, 12},
> - {8433, 13}, {16625, 24}
> -};
> -
> -typedef struct CmdLutElement {
> - uint8_t insert_len_extra_bits;
> - uint8_t copy_len_extra_bits;
> - int8_t distance_code;
> - uint8_t context;
> - uint16_t insert_len_offset;
> - uint16_t copy_len_offset;
> -} CmdLutElement;
> -
> -static const CmdLutElement kCmdLut[BROTLI_NUM_COMMAND_SYMBOLS]
> = {
> - { 0x00, 0x00, 0, 0x00, 0x0000, 0x0002 },
> - { 0x00, 0x00, 0, 0x01, 0x0000, 0x0003 },
> - { 0x00, 0x00, 0, 0x02, 0x0000, 0x0004 },
> - { 0x00, 0x00, 0, 0x03, 0x0000, 0x0005 },
> - { 0x00, 0x00, 0, 0x03, 0x0000, 0x0006 },
> - { 0x00, 0x00, 0, 0x03, 0x0000, 0x0007 },
> - { 0x00, 0x00, 0, 0x03, 0x0000, 0x0008 },
> - { 0x00, 0x00, 0, 0x03, 0x0000, 0x0009 },
> - { 0x00, 0x00, 0, 0x00, 0x0001, 0x0002 },
> - { 0x00, 0x00, 0, 0x01, 0x0001, 0x0003 },
> - { 0x00, 0x00, 0, 0x02, 0x0001, 0x0004 },
> - { 0x00, 0x00, 0, 0x03, 0x0001, 0x0005 },
> - { 0x00, 0x00, 0, 0x03, 0x0001, 0x0006 },
> - { 0x00, 0x00, 0, 0x03, 0x0001, 0x0007 },
> - { 0x00, 0x00, 0, 0x03, 0x0001, 0x0008 },
> - { 0x00, 0x00, 0, 0x03, 0x0001, 0x0009 },
> - { 0x00, 0x00, 0, 0x00, 0x0002, 0x0002 },
> - { 0x00, 0x00, 0, 0x01, 0x0002, 0x0003 },
> - { 0x00, 0x00, 0, 0x02, 0x0002, 0x0004 },
> - { 0x00, 0x00, 0, 0x03, 0x0002, 0x0005 },
> - { 0x00, 0x00, 0, 0x03, 0x0002, 0x0006 },
> - { 0x00, 0x00, 0, 0x03, 0x0002, 0x0007 },
> - { 0x00, 0x00, 0, 0x03, 0x0002, 0x0008 },
> - { 0x00, 0x00, 0, 0x03, 0x0002, 0x0009 },
> - { 0x00, 0x00, 0, 0x00, 0x0003, 0x0002 },
> - { 0x00, 0x00, 0, 0x01, 0x0003, 0x0003 },
> - { 0x00, 0x00, 0, 0x02, 0x0003, 0x0004 },
> - { 0x00, 0x00, 0, 0x03, 0x0003, 0x0005 },
> - { 0x00, 0x00, 0, 0x03, 0x0003, 0x0006 },
> - { 0x00, 0x00, 0, 0x03, 0x0003, 0x0007 },
> - { 0x00, 0x00, 0, 0x03, 0x0003, 0x0008 },
> - { 0x00, 0x00, 0, 0x03, 0x0003, 0x0009 },
> - { 0x00, 0x00, 0, 0x00, 0x0004, 0x0002 },
> - { 0x00, 0x00, 0, 0x01, 0x0004, 0x0003 },
> - { 0x00, 0x00, 0, 0x02, 0x0004, 0x0004 },
> - { 0x00, 0x00, 0, 0x03, 0x0004, 0x0005 },
> - { 0x00, 0x00, 0, 0x03, 0x0004, 0x0006 },
> - { 0x00, 0x00, 0, 0x03, 0x0004, 0x0007 },
> - { 0x00, 0x00, 0, 0x03, 0x0004, 0x0008 },
> - { 0x00, 0x00, 0, 0x03, 0x0004, 0x0009 },
> - { 0x00, 0x00, 0, 0x00, 0x0005, 0x0002 },
> - { 0x00, 0x00, 0, 0x01, 0x0005, 0x0003 },
> - { 0x00, 0x00, 0, 0x02, 0x0005, 0x0004 },
> - { 0x00, 0x00, 0, 0x03, 0x0005, 0x0005 },
> - { 0x00, 0x00, 0, 0x03, 0x0005, 0x0006 },
> - { 0x00, 0x00, 0, 0x03, 0x0005, 0x0007 },
> - { 0x00, 0x00, 0, 0x03, 0x0005, 0x0008 },
> - { 0x00, 0x00, 0, 0x03, 0x0005, 0x0009 },
> - { 0x01, 0x00, 0, 0x00, 0x0006, 0x0002 },
> - { 0x01, 0x00, 0, 0x01, 0x0006, 0x0003 },
> - { 0x01, 0x00, 0, 0x02, 0x0006, 0x0004 },
> - { 0x01, 0x00, 0, 0x03, 0x0006, 0x0005 },
> - { 0x01, 0x00, 0, 0x03, 0x0006, 0x0006 },
> - { 0x01, 0x00, 0, 0x03, 0x0006, 0x0007 },
> - { 0x01, 0x00, 0, 0x03, 0x0006, 0x0008 },
> - { 0x01, 0x00, 0, 0x03, 0x0006, 0x0009 },
> - { 0x01, 0x00, 0, 0x00, 0x0008, 0x0002 },
> - { 0x01, 0x00, 0, 0x01, 0x0008, 0x0003 },
> - { 0x01, 0x00, 0, 0x02, 0x0008, 0x0004 },
> - { 0x01, 0x00, 0, 0x03, 0x0008, 0x0005 },
> - { 0x01, 0x00, 0, 0x03, 0x0008, 0x0006 },
> - { 0x01, 0x00, 0, 0x03, 0x0008, 0x0007 },
> - { 0x01, 0x00, 0, 0x03, 0x0008, 0x0008 },
> - { 0x01, 0x00, 0, 0x03, 0x0008, 0x0009 },
> - { 0x00, 0x01, 0, 0x03, 0x0000, 0x000a },
> - { 0x00, 0x01, 0, 0x03, 0x0000, 0x000c },
> - { 0x00, 0x02, 0, 0x03, 0x0000, 0x000e },
> - { 0x00, 0x02, 0, 0x03, 0x0000, 0x0012 },
> - { 0x00, 0x03, 0, 0x03, 0x0000, 0x0016 },
> - { 0x00, 0x03, 0, 0x03, 0x0000, 0x001e },
> - { 0x00, 0x04, 0, 0x03, 0x0000, 0x0026 },
> - { 0x00, 0x04, 0, 0x03, 0x0000, 0x0036 },
> - { 0x00, 0x01, 0, 0x03, 0x0001, 0x000a },
> - { 0x00, 0x01, 0, 0x03, 0x0001, 0x000c },
> - { 0x00, 0x02, 0, 0x03, 0x0001, 0x000e },
> - { 0x00, 0x02, 0, 0x03, 0x0001, 0x0012 },
> - { 0x00, 0x03, 0, 0x03, 0x0001, 0x0016 },
> - { 0x00, 0x03, 0, 0x03, 0x0001, 0x001e },
> - { 0x00, 0x04, 0, 0x03, 0x0001, 0x0026 },
> - { 0x00, 0x04, 0, 0x03, 0x0001, 0x0036 },
> - { 0x00, 0x01, 0, 0x03, 0x0002, 0x000a },
> - { 0x00, 0x01, 0, 0x03, 0x0002, 0x000c },
> - { 0x00, 0x02, 0, 0x03, 0x0002, 0x000e },
> - { 0x00, 0x02, 0, 0x03, 0x0002, 0x0012 },
> - { 0x00, 0x03, 0, 0x03, 0x0002, 0x0016 },
> - { 0x00, 0x03, 0, 0x03, 0x0002, 0x001e },
> - { 0x00, 0x04, 0, 0x03, 0x0002, 0x0026 },
> - { 0x00, 0x04, 0, 0x03, 0x0002, 0x0036 },
> - { 0x00, 0x01, 0, 0x03, 0x0003, 0x000a },
> - { 0x00, 0x01, 0, 0x03, 0x0003, 0x000c },
> - { 0x00, 0x02, 0, 0x03, 0x0003, 0x000e },
> - { 0x00, 0x02, 0, 0x03, 0x0003, 0x0012 },
> - { 0x00, 0x03, 0, 0x03, 0x0003, 0x0016 },
> - { 0x00, 0x03, 0, 0x03, 0x0003, 0x001e },
> - { 0x00, 0x04, 0, 0x03, 0x0003, 0x0026 },
> - { 0x00, 0x04, 0, 0x03, 0x0003, 0x0036 },
> - { 0x00, 0x01, 0, 0x03, 0x0004, 0x000a },
> - { 0x00, 0x01, 0, 0x03, 0x0004, 0x000c },
> - { 0x00, 0x02, 0, 0x03, 0x0004, 0x000e },
> - { 0x00, 0x02, 0, 0x03, 0x0004, 0x0012 },
> - { 0x00, 0x03, 0, 0x03, 0x0004, 0x0016 },
> - { 0x00, 0x03, 0, 0x03, 0x0004, 0x001e },
> - { 0x00, 0x04, 0, 0x03, 0x0004, 0x0026 },
> - { 0x00, 0x04, 0, 0x03, 0x0004, 0x0036 },
> - { 0x00, 0x01, 0, 0x03, 0x0005, 0x000a },
> - { 0x00, 0x01, 0, 0x03, 0x0005, 0x000c },
> - { 0x00, 0x02, 0, 0x03, 0x0005, 0x000e },
> - { 0x00, 0x02, 0, 0x03, 0x0005, 0x0012 },
> - { 0x00, 0x03, 0, 0x03, 0x0005, 0x0016 },
> - { 0x00, 0x03, 0, 0x03, 0x0005, 0x001e },
> - { 0x00, 0x04, 0, 0x03, 0x0005, 0x0026 },
> - { 0x00, 0x04, 0, 0x03, 0x0005, 0x0036 },
> - { 0x01, 0x01, 0, 0x03, 0x0006, 0x000a },
> - { 0x01, 0x01, 0, 0x03, 0x0006, 0x000c },
> - { 0x01, 0x02, 0, 0x03, 0x0006, 0x000e },
> - { 0x01, 0x02, 0, 0x03, 0x0006, 0x0012 },
> - { 0x01, 0x03, 0, 0x03, 0x0006, 0x0016 },
> - { 0x01, 0x03, 0, 0x03, 0x0006, 0x001e },
> - { 0x01, 0x04, 0, 0x03, 0x0006, 0x0026 },
> - { 0x01, 0x04, 0, 0x03, 0x0006, 0x0036 },
> - { 0x01, 0x01, 0, 0x03, 0x0008, 0x000a },
> - { 0x01, 0x01, 0, 0x03, 0x0008, 0x000c },
> - { 0x01, 0x02, 0, 0x03, 0x0008, 0x000e },
> - { 0x01, 0x02, 0, 0x03, 0x0008, 0x0012 },
> - { 0x01, 0x03, 0, 0x03, 0x0008, 0x0016 },
> - { 0x01, 0x03, 0, 0x03, 0x0008, 0x001e },
> - { 0x01, 0x04, 0, 0x03, 0x0008, 0x0026 },
> - { 0x01, 0x04, 0, 0x03, 0x0008, 0x0036 },
> - { 0x00, 0x00, -1, 0x00, 0x0000, 0x0002 },
> - { 0x00, 0x00, -1, 0x01, 0x0000, 0x0003 },
> - { 0x00, 0x00, -1, 0x02, 0x0000, 0x0004 },
> - { 0x00, 0x00, -1, 0x03, 0x0000, 0x0005 },
> - { 0x00, 0x00, -1, 0x03, 0x0000, 0x0006 },
> - { 0x00, 0x00, -1, 0x03, 0x0000, 0x0007 },
> - { 0x00, 0x00, -1, 0x03, 0x0000, 0x0008 },
> - { 0x00, 0x00, -1, 0x03, 0x0000, 0x0009 },
> - { 0x00, 0x00, -1, 0x00, 0x0001, 0x0002 },
> - { 0x00, 0x00, -1, 0x01, 0x0001, 0x0003 },
> - { 0x00, 0x00, -1, 0x02, 0x0001, 0x0004 },
> - { 0x00, 0x00, -1, 0x03, 0x0001, 0x0005 },
> - { 0x00, 0x00, -1, 0x03, 0x0001, 0x0006 },
> - { 0x00, 0x00, -1, 0x03, 0x0001, 0x0007 },
> - { 0x00, 0x00, -1, 0x03, 0x0001, 0x0008 },
> - { 0x00, 0x00, -1, 0x03, 0x0001, 0x0009 },
> - { 0x00, 0x00, -1, 0x00, 0x0002, 0x0002 },
> - { 0x00, 0x00, -1, 0x01, 0x0002, 0x0003 },
> - { 0x00, 0x00, -1, 0x02, 0x0002, 0x0004 },
> - { 0x00, 0x00, -1, 0x03, 0x0002, 0x0005 },
> - { 0x00, 0x00, -1, 0x03, 0x0002, 0x0006 },
> - { 0x00, 0x00, -1, 0x03, 0x0002, 0x0007 },
> - { 0x00, 0x00, -1, 0x03, 0x0002, 0x0008 },
> - { 0x00, 0x00, -1, 0x03, 0x0002, 0x0009 },
> - { 0x00, 0x00, -1, 0x00, 0x0003, 0x0002 },
> - { 0x00, 0x00, -1, 0x01, 0x0003, 0x0003 },
> - { 0x00, 0x00, -1, 0x02, 0x0003, 0x0004 },
> - { 0x00, 0x00, -1, 0x03, 0x0003, 0x0005 },
> - { 0x00, 0x00, -1, 0x03, 0x0003, 0x0006 },
> - { 0x00, 0x00, -1, 0x03, 0x0003, 0x0007 },
> - { 0x00, 0x00, -1, 0x03, 0x0003, 0x0008 },
> - { 0x00, 0x00, -1, 0x03, 0x0003, 0x0009 },
> - { 0x00, 0x00, -1, 0x00, 0x0004, 0x0002 },
> - { 0x00, 0x00, -1, 0x01, 0x0004, 0x0003 },
> - { 0x00, 0x00, -1, 0x02, 0x0004, 0x0004 },
> - { 0x00, 0x00, -1, 0x03, 0x0004, 0x0005 },
> - { 0x00, 0x00, -1, 0x03, 0x0004, 0x0006 },
> - { 0x00, 0x00, -1, 0x03, 0x0004, 0x0007 },
> - { 0x00, 0x00, -1, 0x03, 0x0004, 0x0008 },
> - { 0x00, 0x00, -1, 0x03, 0x0004, 0x0009 },
> - { 0x00, 0x00, -1, 0x00, 0x0005, 0x0002 },
> - { 0x00, 0x00, -1, 0x01, 0x0005, 0x0003 },
> - { 0x00, 0x00, -1, 0x02, 0x0005, 0x0004 },
> - { 0x00, 0x00, -1, 0x03, 0x0005, 0x0005 },
> - { 0x00, 0x00, -1, 0x03, 0x0005, 0x0006 },
> - { 0x00, 0x00, -1, 0x03, 0x0005, 0x0007 },
> - { 0x00, 0x00, -1, 0x03, 0x0005, 0x0008 },
> - { 0x00, 0x00, -1, 0x03, 0x0005, 0x0009 },
> - { 0x01, 0x00, -1, 0x00, 0x0006, 0x0002 },
> - { 0x01, 0x00, -1, 0x01, 0x0006, 0x0003 },
> - { 0x01, 0x00, -1, 0x02, 0x0006, 0x0004 },
> - { 0x01, 0x00, -1, 0x03, 0x0006, 0x0005 },
> - { 0x01, 0x00, -1, 0x03, 0x0006, 0x0006 },
> - { 0x01, 0x00, -1, 0x03, 0x0006, 0x0007 },
> - { 0x01, 0x00, -1, 0x03, 0x0006, 0x0008 },
> - { 0x01, 0x00, -1, 0x03, 0x0006, 0x0009 },
> - { 0x01, 0x00, -1, 0x00, 0x0008, 0x0002 },
> - { 0x01, 0x00, -1, 0x01, 0x0008, 0x0003 },
> - { 0x01, 0x00, -1, 0x02, 0x0008, 0x0004 },
> - { 0x01, 0x00, -1, 0x03, 0x0008, 0x0005 },
> - { 0x01, 0x00, -1, 0x03, 0x0008, 0x0006 },
> - { 0x01, 0x00, -1, 0x03, 0x0008, 0x0007 },
> - { 0x01, 0x00, -1, 0x03, 0x0008, 0x0008 },
> - { 0x01, 0x00, -1, 0x03, 0x0008, 0x0009 },
> - { 0x00, 0x01, -1, 0x03, 0x0000, 0x000a },
> - { 0x00, 0x01, -1, 0x03, 0x0000, 0x000c },
> - { 0x00, 0x02, -1, 0x03, 0x0000, 0x000e },
> - { 0x00, 0x02, -1, 0x03, 0x0000, 0x0012 },
> - { 0x00, 0x03, -1, 0x03, 0x0000, 0x0016 },
> - { 0x00, 0x03, -1, 0x03, 0x0000, 0x001e },
> - { 0x00, 0x04, -1, 0x03, 0x0000, 0x0026 },
> - { 0x00, 0x04, -1, 0x03, 0x0000, 0x0036 },
> - { 0x00, 0x01, -1, 0x03, 0x0001, 0x000a },
> - { 0x00, 0x01, -1, 0x03, 0x0001, 0x000c },
> - { 0x00, 0x02, -1, 0x03, 0x0001, 0x000e },
> - { 0x00, 0x02, -1, 0x03, 0x0001, 0x0012 },
> - { 0x00, 0x03, -1, 0x03, 0x0001, 0x0016 },
> - { 0x00, 0x03, -1, 0x03, 0x0001, 0x001e },
> - { 0x00, 0x04, -1, 0x03, 0x0001, 0x0026 },
> - { 0x00, 0x04, -1, 0x03, 0x0001, 0x0036 },
> - { 0x00, 0x01, -1, 0x03, 0x0002, 0x000a },
> - { 0x00, 0x01, -1, 0x03, 0x0002, 0x000c },
> - { 0x00, 0x02, -1, 0x03, 0x0002, 0x000e },
> - { 0x00, 0x02, -1, 0x03, 0x0002, 0x0012 },
> - { 0x00, 0x03, -1, 0x03, 0x0002, 0x0016 },
> - { 0x00, 0x03, -1, 0x03, 0x0002, 0x001e },
> - { 0x00, 0x04, -1, 0x03, 0x0002, 0x0026 },
> - { 0x00, 0x04, -1, 0x03, 0x0002, 0x0036 },
> - { 0x00, 0x01, -1, 0x03, 0x0003, 0x000a },
> - { 0x00, 0x01, -1, 0x03, 0x0003, 0x000c },
> - { 0x00, 0x02, -1, 0x03, 0x0003, 0x000e },
> - { 0x00, 0x02, -1, 0x03, 0x0003, 0x0012 },
> - { 0x00, 0x03, -1, 0x03, 0x0003, 0x0016 },
> - { 0x00, 0x03, -1, 0x03, 0x0003, 0x001e },
> - { 0x00, 0x04, -1, 0x03, 0x0003, 0x0026 },
> - { 0x00, 0x04, -1, 0x03, 0x0003, 0x0036 },
> - { 0x00, 0x01, -1, 0x03, 0x0004, 0x000a },
> - { 0x00, 0x01, -1, 0x03, 0x0004, 0x000c },
> - { 0x00, 0x02, -1, 0x03, 0x0004, 0x000e },
> - { 0x00, 0x02, -1, 0x03, 0x0004, 0x0012 },
> - { 0x00, 0x03, -1, 0x03, 0x0004, 0x0016 },
> - { 0x00, 0x03, -1, 0x03, 0x0004, 0x001e },
> - { 0x00, 0x04, -1, 0x03, 0x0004, 0x0026 },
> - { 0x00, 0x04, -1, 0x03, 0x0004, 0x0036 },
> - { 0x00, 0x01, -1, 0x03, 0x0005, 0x000a },
> - { 0x00, 0x01, -1, 0x03, 0x0005, 0x000c },
> - { 0x00, 0x02, -1, 0x03, 0x0005, 0x000e },
> - { 0x00, 0x02, -1, 0x03, 0x0005, 0x0012 },
> - { 0x00, 0x03, -1, 0x03, 0x0005, 0x0016 },
> - { 0x00, 0x03, -1, 0x03, 0x0005, 0x001e },
> - { 0x00, 0x04, -1, 0x03, 0x0005, 0x0026 },
> - { 0x00, 0x04, -1, 0x03, 0x0005, 0x0036 },
> - { 0x01, 0x01, -1, 0x03, 0x0006, 0x000a },
> - { 0x01, 0x01, -1, 0x03, 0x0006, 0x000c },
> - { 0x01, 0x02, -1, 0x03, 0x0006, 0x000e },
> - { 0x01, 0x02, -1, 0x03, 0x0006, 0x0012 },
> - { 0x01, 0x03, -1, 0x03, 0x0006, 0x0016 },
> - { 0x01, 0x03, -1, 0x03, 0x0006, 0x001e },
> - { 0x01, 0x04, -1, 0x03, 0x0006, 0x0026 },
> - { 0x01, 0x04, -1, 0x03, 0x0006, 0x0036 },
> - { 0x01, 0x01, -1, 0x03, 0x0008, 0x000a },
> - { 0x01, 0x01, -1, 0x03, 0x0008, 0x000c },
> - { 0x01, 0x02, -1, 0x03, 0x0008, 0x000e },
> - { 0x01, 0x02, -1, 0x03, 0x0008, 0x0012 },
> - { 0x01, 0x03, -1, 0x03, 0x0008, 0x0016 },
> - { 0x01, 0x03, -1, 0x03, 0x0008, 0x001e },
> - { 0x01, 0x04, -1, 0x03, 0x0008, 0x0026 },
> - { 0x01, 0x04, -1, 0x03, 0x0008, 0x0036 },
> - { 0x02, 0x00, -1, 0x00, 0x000a, 0x0002 },
> - { 0x02, 0x00, -1, 0x01, 0x000a, 0x0003 },
> - { 0x02, 0x00, -1, 0x02, 0x000a, 0x0004 },
> - { 0x02, 0x00, -1, 0x03, 0x000a, 0x0005 },
> - { 0x02, 0x00, -1, 0x03, 0x000a, 0x0006 },
> - { 0x02, 0x00, -1, 0x03, 0x000a, 0x0007 },
> - { 0x02, 0x00, -1, 0x03, 0x000a, 0x0008 },
> - { 0x02, 0x00, -1, 0x03, 0x000a, 0x0009 },
> - { 0x02, 0x00, -1, 0x00, 0x000e, 0x0002 },
> - { 0x02, 0x00, -1, 0x01, 0x000e, 0x0003 },
> - { 0x02, 0x00, -1, 0x02, 0x000e, 0x0004 },
> - { 0x02, 0x00, -1, 0x03, 0x000e, 0x0005 },
> - { 0x02, 0x00, -1, 0x03, 0x000e, 0x0006 },
> - { 0x02, 0x00, -1, 0x03, 0x000e, 0x0007 },
> - { 0x02, 0x00, -1, 0x03, 0x000e, 0x0008 },
> - { 0x02, 0x00, -1, 0x03, 0x000e, 0x0009 },
> - { 0x03, 0x00, -1, 0x00, 0x0012, 0x0002 },
> - { 0x03, 0x00, -1, 0x01, 0x0012, 0x0003 },
> - { 0x03, 0x00, -1, 0x02, 0x0012, 0x0004 },
> - { 0x03, 0x00, -1, 0x03, 0x0012, 0x0005 },
> - { 0x03, 0x00, -1, 0x03, 0x0012, 0x0006 },
> - { 0x03, 0x00, -1, 0x03, 0x0012, 0x0007 },
> - { 0x03, 0x00, -1, 0x03, 0x0012, 0x0008 },
> - { 0x03, 0x00, -1, 0x03, 0x0012, 0x0009 },
> - { 0x03, 0x00, -1, 0x00, 0x001a, 0x0002 },
> - { 0x03, 0x00, -1, 0x01, 0x001a, 0x0003 },
> - { 0x03, 0x00, -1, 0x02, 0x001a, 0x0004 },
> - { 0x03, 0x00, -1, 0x03, 0x001a, 0x0005 },
> - { 0x03, 0x00, -1, 0x03, 0x001a, 0x0006 },
> - { 0x03, 0x00, -1, 0x03, 0x001a, 0x0007 },
> - { 0x03, 0x00, -1, 0x03, 0x001a, 0x0008 },
> - { 0x03, 0x00, -1, 0x03, 0x001a, 0x0009 },
> - { 0x04, 0x00, -1, 0x00, 0x0022, 0x0002 },
> - { 0x04, 0x00, -1, 0x01, 0x0022, 0x0003 },
> - { 0x04, 0x00, -1, 0x02, 0x0022, 0x0004 },
> - { 0x04, 0x00, -1, 0x03, 0x0022, 0x0005 },
> - { 0x04, 0x00, -1, 0x03, 0x0022, 0x0006 },
> - { 0x04, 0x00, -1, 0x03, 0x0022, 0x0007 },
> - { 0x04, 0x00, -1, 0x03, 0x0022, 0x0008 },
> - { 0x04, 0x00, -1, 0x03, 0x0022, 0x0009 },
> - { 0x04, 0x00, -1, 0x00, 0x0032, 0x0002 },
> - { 0x04, 0x00, -1, 0x01, 0x0032, 0x0003 },
> - { 0x04, 0x00, -1, 0x02, 0x0032, 0x0004 },
> - { 0x04, 0x00, -1, 0x03, 0x0032, 0x0005 },
> - { 0x04, 0x00, -1, 0x03, 0x0032, 0x0006 },
> - { 0x04, 0x00, -1, 0x03, 0x0032, 0x0007 },
> - { 0x04, 0x00, -1, 0x03, 0x0032, 0x0008 },
> - { 0x04, 0x00, -1, 0x03, 0x0032, 0x0009 },
> - { 0x05, 0x00, -1, 0x00, 0x0042, 0x0002 },
> - { 0x05, 0x00, -1, 0x01, 0x0042, 0x0003 },
> - { 0x05, 0x00, -1, 0x02, 0x0042, 0x0004 },
> - { 0x05, 0x00, -1, 0x03, 0x0042, 0x0005 },
> - { 0x05, 0x00, -1, 0x03, 0x0042, 0x0006 },
> - { 0x05, 0x00, -1, 0x03, 0x0042, 0x0007 },
> - { 0x05, 0x00, -1, 0x03, 0x0042, 0x0008 },
> - { 0x05, 0x00, -1, 0x03, 0x0042, 0x0009 },
> - { 0x05, 0x00, -1, 0x00, 0x0062, 0x0002 },
> - { 0x05, 0x00, -1, 0x01, 0x0062, 0x0003 },
> - { 0x05, 0x00, -1, 0x02, 0x0062, 0x0004 },
> - { 0x05, 0x00, -1, 0x03, 0x0062, 0x0005 },
> - { 0x05, 0x00, -1, 0x03, 0x0062, 0x0006 },
> - { 0x05, 0x00, -1, 0x03, 0x0062, 0x0007 },
> - { 0x05, 0x00, -1, 0x03, 0x0062, 0x0008 },
> - { 0x05, 0x00, -1, 0x03, 0x0062, 0x0009 },
> - { 0x02, 0x01, -1, 0x03, 0x000a, 0x000a },
> - { 0x02, 0x01, -1, 0x03, 0x000a, 0x000c },
> - { 0x02, 0x02, -1, 0x03, 0x000a, 0x000e },
> - { 0x02, 0x02, -1, 0x03, 0x000a, 0x0012 },
> - { 0x02, 0x03, -1, 0x03, 0x000a, 0x0016 },
> - { 0x02, 0x03, -1, 0x03, 0x000a, 0x001e },
> - { 0x02, 0x04, -1, 0x03, 0x000a, 0x0026 },
> - { 0x02, 0x04, -1, 0x03, 0x000a, 0x0036 },
> - { 0x02, 0x01, -1, 0x03, 0x000e, 0x000a },
> - { 0x02, 0x01, -1, 0x03, 0x000e, 0x000c },
> - { 0x02, 0x02, -1, 0x03, 0x000e, 0x000e },
> - { 0x02, 0x02, -1, 0x03, 0x000e, 0x0012 },
> - { 0x02, 0x03, -1, 0x03, 0x000e, 0x0016 },
> - { 0x02, 0x03, -1, 0x03, 0x000e, 0x001e },
> - { 0x02, 0x04, -1, 0x03, 0x000e, 0x0026 },
> - { 0x02, 0x04, -1, 0x03, 0x000e, 0x0036 },
> - { 0x03, 0x01, -1, 0x03, 0x0012, 0x000a },
> - { 0x03, 0x01, -1, 0x03, 0x0012, 0x000c },
> - { 0x03, 0x02, -1, 0x03, 0x0012, 0x000e },
> - { 0x03, 0x02, -1, 0x03, 0x0012, 0x0012 },
> - { 0x03, 0x03, -1, 0x03, 0x0012, 0x0016 },
> - { 0x03, 0x03, -1, 0x03, 0x0012, 0x001e },
> - { 0x03, 0x04, -1, 0x03, 0x0012, 0x0026 },
> - { 0x03, 0x04, -1, 0x03, 0x0012, 0x0036 },
> - { 0x03, 0x01, -1, 0x03, 0x001a, 0x000a },
> - { 0x03, 0x01, -1, 0x03, 0x001a, 0x000c },
> - { 0x03, 0x02, -1, 0x03, 0x001a, 0x000e },
> - { 0x03, 0x02, -1, 0x03, 0x001a, 0x0012 },
> - { 0x03, 0x03, -1, 0x03, 0x001a, 0x0016 },
> - { 0x03, 0x03, -1, 0x03, 0x001a, 0x001e },
> - { 0x03, 0x04, -1, 0x03, 0x001a, 0x0026 },
> - { 0x03, 0x04, -1, 0x03, 0x001a, 0x0036 },
> - { 0x04, 0x01, -1, 0x03, 0x0022, 0x000a },
> - { 0x04, 0x01, -1, 0x03, 0x0022, 0x000c },
> - { 0x04, 0x02, -1, 0x03, 0x0022, 0x000e },
> - { 0x04, 0x02, -1, 0x03, 0x0022, 0x0012 },
> - { 0x04, 0x03, -1, 0x03, 0x0022, 0x0016 },
> - { 0x04, 0x03, -1, 0x03, 0x0022, 0x001e },
> - { 0x04, 0x04, -1, 0x03, 0x0022, 0x0026 },
> - { 0x04, 0x04, -1, 0x03, 0x0022, 0x0036 },
> - { 0x04, 0x01, -1, 0x03, 0x0032, 0x000a },
> - { 0x04, 0x01, -1, 0x03, 0x0032, 0x000c },
> - { 0x04, 0x02, -1, 0x03, 0x0032, 0x000e },
> - { 0x04, 0x02, -1, 0x03, 0x0032, 0x0012 },
> - { 0x04, 0x03, -1, 0x03, 0x0032, 0x0016 },
> - { 0x04, 0x03, -1, 0x03, 0x0032, 0x001e },
> - { 0x04, 0x04, -1, 0x03, 0x0032, 0x0026 },
> - { 0x04, 0x04, -1, 0x03, 0x0032, 0x0036 },
> - { 0x05, 0x01, -1, 0x03, 0x0042, 0x000a },
> - { 0x05, 0x01, -1, 0x03, 0x0042, 0x000c },
> - { 0x05, 0x02, -1, 0x03, 0x0042, 0x000e },
> - { 0x05, 0x02, -1, 0x03, 0x0042, 0x0012 },
> - { 0x05, 0x03, -1, 0x03, 0x0042, 0x0016 },
> - { 0x05, 0x03, -1, 0x03, 0x0042, 0x001e },
> - { 0x05, 0x04, -1, 0x03, 0x0042, 0x0026 },
> - { 0x05, 0x04, -1, 0x03, 0x0042, 0x0036 },
> - { 0x05, 0x01, -1, 0x03, 0x0062, 0x000a },
> - { 0x05, 0x01, -1, 0x03, 0x0062, 0x000c },
> - { 0x05, 0x02, -1, 0x03, 0x0062, 0x000e },
> - { 0x05, 0x02, -1, 0x03, 0x0062, 0x0012 },
> - { 0x05, 0x03, -1, 0x03, 0x0062, 0x0016 },
> - { 0x05, 0x03, -1, 0x03, 0x0062, 0x001e },
> - { 0x05, 0x04, -1, 0x03, 0x0062, 0x0026 },
> - { 0x05, 0x04, -1, 0x03, 0x0062, 0x0036 },
> - { 0x00, 0x05, -1, 0x03, 0x0000, 0x0046 },
> - { 0x00, 0x05, -1, 0x03, 0x0000, 0x0066 },
> - { 0x00, 0x06, -1, 0x03, 0x0000, 0x0086 },
> - { 0x00, 0x07, -1, 0x03, 0x0000, 0x00c6 },
> - { 0x00, 0x08, -1, 0x03, 0x0000, 0x0146 },
> - { 0x00, 0x09, -1, 0x03, 0x0000, 0x0246 },
> - { 0x00, 0x0a, -1, 0x03, 0x0000, 0x0446 },
> - { 0x00, 0x18, -1, 0x03, 0x0000, 0x0846 },
> - { 0x00, 0x05, -1, 0x03, 0x0001, 0x0046 },
> - { 0x00, 0x05, -1, 0x03, 0x0001, 0x0066 },
> - { 0x00, 0x06, -1, 0x03, 0x0001, 0x0086 },
> - { 0x00, 0x07, -1, 0x03, 0x0001, 0x00c6 },
> - { 0x00, 0x08, -1, 0x03, 0x0001, 0x0146 },
> - { 0x00, 0x09, -1, 0x03, 0x0001, 0x0246 },
> - { 0x00, 0x0a, -1, 0x03, 0x0001, 0x0446 },
> - { 0x00, 0x18, -1, 0x03, 0x0001, 0x0846 },
> - { 0x00, 0x05, -1, 0x03, 0x0002, 0x0046 },
> - { 0x00, 0x05, -1, 0x03, 0x0002, 0x0066 },
> - { 0x00, 0x06, -1, 0x03, 0x0002, 0x0086 },
> - { 0x00, 0x07, -1, 0x03, 0x0002, 0x00c6 },
> - { 0x00, 0x08, -1, 0x03, 0x0002, 0x0146 },
> - { 0x00, 0x09, -1, 0x03, 0x0002, 0x0246 },
> - { 0x00, 0x0a, -1, 0x03, 0x0002, 0x0446 },
> - { 0x00, 0x18, -1, 0x03, 0x0002, 0x0846 },
> - { 0x00, 0x05, -1, 0x03, 0x0003, 0x0046 },
> - { 0x00, 0x05, -1, 0x03, 0x0003, 0x0066 },
> - { 0x00, 0x06, -1, 0x03, 0x0003, 0x0086 },
> - { 0x00, 0x07, -1, 0x03, 0x0003, 0x00c6 },
> - { 0x00, 0x08, -1, 0x03, 0x0003, 0x0146 },
> - { 0x00, 0x09, -1, 0x03, 0x0003, 0x0246 },
> - { 0x00, 0x0a, -1, 0x03, 0x0003, 0x0446 },
> - { 0x00, 0x18, -1, 0x03, 0x0003, 0x0846 },
> - { 0x00, 0x05, -1, 0x03, 0x0004, 0x0046 },
> - { 0x00, 0x05, -1, 0x03, 0x0004, 0x0066 },
> - { 0x00, 0x06, -1, 0x03, 0x0004, 0x0086 },
> - { 0x00, 0x07, -1, 0x03, 0x0004, 0x00c6 },
> - { 0x00, 0x08, -1, 0x03, 0x0004, 0x0146 },
> - { 0x00, 0x09, -1, 0x03, 0x0004, 0x0246 },
> - { 0x00, 0x0a, -1, 0x03, 0x0004, 0x0446 },
> - { 0x00, 0x18, -1, 0x03, 0x0004, 0x0846 },
> - { 0x00, 0x05, -1, 0x03, 0x0005, 0x0046 },
> - { 0x00, 0x05, -1, 0x03, 0x0005, 0x0066 },
> - { 0x00, 0x06, -1, 0x03, 0x0005, 0x0086 },
> - { 0x00, 0x07, -1, 0x03, 0x0005, 0x00c6 },
> - { 0x00, 0x08, -1, 0x03, 0x0005, 0x0146 },
> - { 0x00, 0x09, -1, 0x03, 0x0005, 0x0246 },
> - { 0x00, 0x0a, -1, 0x03, 0x0005, 0x0446 },
> - { 0x00, 0x18, -1, 0x03, 0x0005, 0x0846 },
> - { 0x01, 0x05, -1, 0x03, 0x0006, 0x0046 },
> - { 0x01, 0x05, -1, 0x03, 0x0006, 0x0066 },
> - { 0x01, 0x06, -1, 0x03, 0x0006, 0x0086 },
> - { 0x01, 0x07, -1, 0x03, 0x0006, 0x00c6 },
> - { 0x01, 0x08, -1, 0x03, 0x0006, 0x0146 },
> - { 0x01, 0x09, -1, 0x03, 0x0006, 0x0246 },
> - { 0x01, 0x0a, -1, 0x03, 0x0006, 0x0446 },
> - { 0x01, 0x18, -1, 0x03, 0x0006, 0x0846 },
> - { 0x01, 0x05, -1, 0x03, 0x0008, 0x0046 },
> - { 0x01, 0x05, -1, 0x03, 0x0008, 0x0066 },
> - { 0x01, 0x06, -1, 0x03, 0x0008, 0x0086 },
> - { 0x01, 0x07, -1, 0x03, 0x0008, 0x00c6 },
> - { 0x01, 0x08, -1, 0x03, 0x0008, 0x0146 },
> - { 0x01, 0x09, -1, 0x03, 0x0008, 0x0246 },
> - { 0x01, 0x0a, -1, 0x03, 0x0008, 0x0446 },
> - { 0x01, 0x18, -1, 0x03, 0x0008, 0x0846 },
> - { 0x06, 0x00, -1, 0x00, 0x0082, 0x0002 },
> - { 0x06, 0x00, -1, 0x01, 0x0082, 0x0003 },
> - { 0x06, 0x00, -1, 0x02, 0x0082, 0x0004 },
> - { 0x06, 0x00, -1, 0x03, 0x0082, 0x0005 },
> - { 0x06, 0x00, -1, 0x03, 0x0082, 0x0006 },
> - { 0x06, 0x00, -1, 0x03, 0x0082, 0x0007 },
> - { 0x06, 0x00, -1, 0x03, 0x0082, 0x0008 },
> - { 0x06, 0x00, -1, 0x03, 0x0082, 0x0009 },
> - { 0x07, 0x00, -1, 0x00, 0x00c2, 0x0002 },
> - { 0x07, 0x00, -1, 0x01, 0x00c2, 0x0003 },
> - { 0x07, 0x00, -1, 0x02, 0x00c2, 0x0004 },
> - { 0x07, 0x00, -1, 0x03, 0x00c2, 0x0005 },
> - { 0x07, 0x00, -1, 0x03, 0x00c2, 0x0006 },
> - { 0x07, 0x00, -1, 0x03, 0x00c2, 0x0007 },
> - { 0x07, 0x00, -1, 0x03, 0x00c2, 0x0008 },
> - { 0x07, 0x00, -1, 0x03, 0x00c2, 0x0009 },
> - { 0x08, 0x00, -1, 0x00, 0x0142, 0x0002 },
> - { 0x08, 0x00, -1, 0x01, 0x0142, 0x0003 },
> - { 0x08, 0x00, -1, 0x02, 0x0142, 0x0004 },
> - { 0x08, 0x00, -1, 0x03, 0x0142, 0x0005 },
> - { 0x08, 0x00, -1, 0x03, 0x0142, 0x0006 },
> - { 0x08, 0x00, -1, 0x03, 0x0142, 0x0007 },
> - { 0x08, 0x00, -1, 0x03, 0x0142, 0x0008 },
> - { 0x08, 0x00, -1, 0x03, 0x0142, 0x0009 },
> - { 0x09, 0x00, -1, 0x00, 0x0242, 0x0002 },
> - { 0x09, 0x00, -1, 0x01, 0x0242, 0x0003 },
> - { 0x09, 0x00, -1, 0x02, 0x0242, 0x0004 },
> - { 0x09, 0x00, -1, 0x03, 0x0242, 0x0005 },
> - { 0x09, 0x00, -1, 0x03, 0x0242, 0x0006 },
> - { 0x09, 0x00, -1, 0x03, 0x0242, 0x0007 },
> - { 0x09, 0x00, -1, 0x03, 0x0242, 0x0008 },
> - { 0x09, 0x00, -1, 0x03, 0x0242, 0x0009 },
> - { 0x0a, 0x00, -1, 0x00, 0x0442, 0x0002 },
> - { 0x0a, 0x00, -1, 0x01, 0x0442, 0x0003 },
> - { 0x0a, 0x00, -1, 0x02, 0x0442, 0x0004 },
> - { 0x0a, 0x00, -1, 0x03, 0x0442, 0x0005 },
> - { 0x0a, 0x00, -1, 0x03, 0x0442, 0x0006 },
> - { 0x0a, 0x00, -1, 0x03, 0x0442, 0x0007 },
> - { 0x0a, 0x00, -1, 0x03, 0x0442, 0x0008 },
> - { 0x0a, 0x00, -1, 0x03, 0x0442, 0x0009 },
> - { 0x0c, 0x00, -1, 0x00, 0x0842, 0x0002 },
> - { 0x0c, 0x00, -1, 0x01, 0x0842, 0x0003 },
> - { 0x0c, 0x00, -1, 0x02, 0x0842, 0x0004 },
> - { 0x0c, 0x00, -1, 0x03, 0x0842, 0x0005 },
> - { 0x0c, 0x00, -1, 0x03, 0x0842, 0x0006 },
> - { 0x0c, 0x00, -1, 0x03, 0x0842, 0x0007 },
> - { 0x0c, 0x00, -1, 0x03, 0x0842, 0x0008 },
> - { 0x0c, 0x00, -1, 0x03, 0x0842, 0x0009 },
> - { 0x0e, 0x00, -1, 0x00, 0x1842, 0x0002 },
> - { 0x0e, 0x00, -1, 0x01, 0x1842, 0x0003 },
> - { 0x0e, 0x00, -1, 0x02, 0x1842, 0x0004 },
> - { 0x0e, 0x00, -1, 0x03, 0x1842, 0x0005 },
> - { 0x0e, 0x00, -1, 0x03, 0x1842, 0x0006 },
> - { 0x0e, 0x00, -1, 0x03, 0x1842, 0x0007 },
> - { 0x0e, 0x00, -1, 0x03, 0x1842, 0x0008 },
> - { 0x0e, 0x00, -1, 0x03, 0x1842, 0x0009 },
> - { 0x18, 0x00, -1, 0x00, 0x5842, 0x0002 },
> - { 0x18, 0x00, -1, 0x01, 0x5842, 0x0003 },
> - { 0x18, 0x00, -1, 0x02, 0x5842, 0x0004 },
> - { 0x18, 0x00, -1, 0x03, 0x5842, 0x0005 },
> - { 0x18, 0x00, -1, 0x03, 0x5842, 0x0006 },
> - { 0x18, 0x00, -1, 0x03, 0x5842, 0x0007 },
> - { 0x18, 0x00, -1, 0x03, 0x5842, 0x0008 },
> - { 0x18, 0x00, -1, 0x03, 0x5842, 0x0009 },
> - { 0x02, 0x05, -1, 0x03, 0x000a, 0x0046 },
> - { 0x02, 0x05, -1, 0x03, 0x000a, 0x0066 },
> - { 0x02, 0x06, -1, 0x03, 0x000a, 0x0086 },
> - { 0x02, 0x07, -1, 0x03, 0x000a, 0x00c6 },
> - { 0x02, 0x08, -1, 0x03, 0x000a, 0x0146 },
> - { 0x02, 0x09, -1, 0x03, 0x000a, 0x0246 },
> - { 0x02, 0x0a, -1, 0x03, 0x000a, 0x0446 },
> - { 0x02, 0x18, -1, 0x03, 0x000a, 0x0846 },
> - { 0x02, 0x05, -1, 0x03, 0x000e, 0x0046 },
> - { 0x02, 0x05, -1, 0x03, 0x000e, 0x0066 },
> - { 0x02, 0x06, -1, 0x03, 0x000e, 0x0086 },
> - { 0x02, 0x07, -1, 0x03, 0x000e, 0x00c6 },
> - { 0x02, 0x08, -1, 0x03, 0x000e, 0x0146 },
> - { 0x02, 0x09, -1, 0x03, 0x000e, 0x0246 },
> - { 0x02, 0x0a, -1, 0x03, 0x000e, 0x0446 },
> - { 0x02, 0x18, -1, 0x03, 0x000e, 0x0846 },
> - { 0x03, 0x05, -1, 0x03, 0x0012, 0x0046 },
> - { 0x03, 0x05, -1, 0x03, 0x0012, 0x0066 },
> - { 0x03, 0x06, -1, 0x03, 0x0012, 0x0086 },
> - { 0x03, 0x07, -1, 0x03, 0x0012, 0x00c6 },
> - { 0x03, 0x08, -1, 0x03, 0x0012, 0x0146 },
> - { 0x03, 0x09, -1, 0x03, 0x0012, 0x0246 },
> - { 0x03, 0x0a, -1, 0x03, 0x0012, 0x0446 },
> - { 0x03, 0x18, -1, 0x03, 0x0012, 0x0846 },
> - { 0x03, 0x05, -1, 0x03, 0x001a, 0x0046 },
> - { 0x03, 0x05, -1, 0x03, 0x001a, 0x0066 },
> - { 0x03, 0x06, -1, 0x03, 0x001a, 0x0086 },
> - { 0x03, 0x07, -1, 0x03, 0x001a, 0x00c6 },
> - { 0x03, 0x08, -1, 0x03, 0x001a, 0x0146 },
> - { 0x03, 0x09, -1, 0x03, 0x001a, 0x0246 },
> - { 0x03, 0x0a, -1, 0x03, 0x001a, 0x0446 },
> - { 0x03, 0x18, -1, 0x03, 0x001a, 0x0846 },
> - { 0x04, 0x05, -1, 0x03, 0x0022, 0x0046 },
> - { 0x04, 0x05, -1, 0x03, 0x0022, 0x0066 },
> - { 0x04, 0x06, -1, 0x03, 0x0022, 0x0086 },
> - { 0x04, 0x07, -1, 0x03, 0x0022, 0x00c6 },
> - { 0x04, 0x08, -1, 0x03, 0x0022, 0x0146 },
> - { 0x04, 0x09, -1, 0x03, 0x0022, 0x0246 },
> - { 0x04, 0x0a, -1, 0x03, 0x0022, 0x0446 },
> - { 0x04, 0x18, -1, 0x03, 0x0022, 0x0846 },
> - { 0x04, 0x05, -1, 0x03, 0x0032, 0x0046 },
> - { 0x04, 0x05, -1, 0x03, 0x0032, 0x0066 },
> - { 0x04, 0x06, -1, 0x03, 0x0032, 0x0086 },
> - { 0x04, 0x07, -1, 0x03, 0x0032, 0x00c6 },
> - { 0x04, 0x08, -1, 0x03, 0x0032, 0x0146 },
> - { 0x04, 0x09, -1, 0x03, 0x0032, 0x0246 },
> - { 0x04, 0x0a, -1, 0x03, 0x0032, 0x0446 },
> - { 0x04, 0x18, -1, 0x03, 0x0032, 0x0846 },
> - { 0x05, 0x05, -1, 0x03, 0x0042, 0x0046 },
> - { 0x05, 0x05, -1, 0x03, 0x0042, 0x0066 },
> - { 0x05, 0x06, -1, 0x03, 0x0042, 0x0086 },
> - { 0x05, 0x07, -1, 0x03, 0x0042, 0x00c6 },
> - { 0x05, 0x08, -1, 0x03, 0x0042, 0x0146 },
> - { 0x05, 0x09, -1, 0x03, 0x0042, 0x0246 },
> - { 0x05, 0x0a, -1, 0x03, 0x0042, 0x0446 },
> - { 0x05, 0x18, -1, 0x03, 0x0042, 0x0846 },
> - { 0x05, 0x05, -1, 0x03, 0x0062, 0x0046 },
> - { 0x05, 0x05, -1, 0x03, 0x0062, 0x0066 },
> - { 0x05, 0x06, -1, 0x03, 0x0062, 0x0086 },
> - { 0x05, 0x07, -1, 0x03, 0x0062, 0x00c6 },
> - { 0x05, 0x08, -1, 0x03, 0x0062, 0x0146 },
> - { 0x05, 0x09, -1, 0x03, 0x0062, 0x0246 },
> - { 0x05, 0x0a, -1, 0x03, 0x0062, 0x0446 },
> - { 0x05, 0x18, -1, 0x03, 0x0062, 0x0846 },
> - { 0x06, 0x01, -1, 0x03, 0x0082, 0x000a },
> - { 0x06, 0x01, -1, 0x03, 0x0082, 0x000c },
> - { 0x06, 0x02, -1, 0x03, 0x0082, 0x000e },
> - { 0x06, 0x02, -1, 0x03, 0x0082, 0x0012 },
> - { 0x06, 0x03, -1, 0x03, 0x0082, 0x0016 },
> - { 0x06, 0x03, -1, 0x03, 0x0082, 0x001e },
> - { 0x06, 0x04, -1, 0x03, 0x0082, 0x0026 },
> - { 0x06, 0x04, -1, 0x03, 0x0082, 0x0036 },
> - { 0x07, 0x01, -1, 0x03, 0x00c2, 0x000a },
> - { 0x07, 0x01, -1, 0x03, 0x00c2, 0x000c },
> - { 0x07, 0x02, -1, 0x03, 0x00c2, 0x000e },
> - { 0x07, 0x02, -1, 0x03, 0x00c2, 0x0012 },
> - { 0x07, 0x03, -1, 0x03, 0x00c2, 0x0016 },
> - { 0x07, 0x03, -1, 0x03, 0x00c2, 0x001e },
> - { 0x07, 0x04, -1, 0x03, 0x00c2, 0x0026 },
> - { 0x07, 0x04, -1, 0x03, 0x00c2, 0x0036 },
> - { 0x08, 0x01, -1, 0x03, 0x0142, 0x000a },
> - { 0x08, 0x01, -1, 0x03, 0x0142, 0x000c },
> - { 0x08, 0x02, -1, 0x03, 0x0142, 0x000e },
> - { 0x08, 0x02, -1, 0x03, 0x0142, 0x0012 },
> - { 0x08, 0x03, -1, 0x03, 0x0142, 0x0016 },
> - { 0x08, 0x03, -1, 0x03, 0x0142, 0x001e },
> - { 0x08, 0x04, -1, 0x03, 0x0142, 0x0026 },
> - { 0x08, 0x04, -1, 0x03, 0x0142, 0x0036 },
> - { 0x09, 0x01, -1, 0x03, 0x0242, 0x000a },
> - { 0x09, 0x01, -1, 0x03, 0x0242, 0x000c },
> - { 0x09, 0x02, -1, 0x03, 0x0242, 0x000e },
> - { 0x09, 0x02, -1, 0x03, 0x0242, 0x0012 },
> - { 0x09, 0x03, -1, 0x03, 0x0242, 0x0016 },
> - { 0x09, 0x03, -1, 0x03, 0x0242, 0x001e },
> - { 0x09, 0x04, -1, 0x03, 0x0242, 0x0026 },
> - { 0x09, 0x04, -1, 0x03, 0x0242, 0x0036 },
> - { 0x0a, 0x01, -1, 0x03, 0x0442, 0x000a },
> - { 0x0a, 0x01, -1, 0x03, 0x0442, 0x000c },
> - { 0x0a, 0x02, -1, 0x03, 0x0442, 0x000e },
> - { 0x0a, 0x02, -1, 0x03, 0x0442, 0x0012 },
> - { 0x0a, 0x03, -1, 0x03, 0x0442, 0x0016 },
> - { 0x0a, 0x03, -1, 0x03, 0x0442, 0x001e },
> - { 0x0a, 0x04, -1, 0x03, 0x0442, 0x0026 },
> - { 0x0a, 0x04, -1, 0x03, 0x0442, 0x0036 },
> - { 0x0c, 0x01, -1, 0x03, 0x0842, 0x000a },
> - { 0x0c, 0x01, -1, 0x03, 0x0842, 0x000c },
> - { 0x0c, 0x02, -1, 0x03, 0x0842, 0x000e },
> - { 0x0c, 0x02, -1, 0x03, 0x0842, 0x0012 },
> - { 0x0c, 0x03, -1, 0x03, 0x0842, 0x0016 },
> - { 0x0c, 0x03, -1, 0x03, 0x0842, 0x001e },
> - { 0x0c, 0x04, -1, 0x03, 0x0842, 0x0026 },
> - { 0x0c, 0x04, -1, 0x03, 0x0842, 0x0036 },
> - { 0x0e, 0x01, -1, 0x03, 0x1842, 0x000a },
> - { 0x0e, 0x01, -1, 0x03, 0x1842, 0x000c },
> - { 0x0e, 0x02, -1, 0x03, 0x1842, 0x000e },
> - { 0x0e, 0x02, -1, 0x03, 0x1842, 0x0012 },
> - { 0x0e, 0x03, -1, 0x03, 0x1842, 0x0016 },
> - { 0x0e, 0x03, -1, 0x03, 0x1842, 0x001e },
> - { 0x0e, 0x04, -1, 0x03, 0x1842, 0x0026 },
> - { 0x0e, 0x04, -1, 0x03, 0x1842, 0x0036 },
> - { 0x18, 0x01, -1, 0x03, 0x5842, 0x000a },
> - { 0x18, 0x01, -1, 0x03, 0x5842, 0x000c },
> - { 0x18, 0x02, -1, 0x03, 0x5842, 0x000e },
> - { 0x18, 0x02, -1, 0x03, 0x5842, 0x0012 },
> - { 0x18, 0x03, -1, 0x03, 0x5842, 0x0016 },
> - { 0x18, 0x03, -1, 0x03, 0x5842, 0x001e },
> - { 0x18, 0x04, -1, 0x03, 0x5842, 0x0026 },
> - { 0x18, 0x04, -1, 0x03, 0x5842, 0x0036 },
> - { 0x06, 0x05, -1, 0x03, 0x0082, 0x0046 },
> - { 0x06, 0x05, -1, 0x03, 0x0082, 0x0066 },
> - { 0x06, 0x06, -1, 0x03, 0x0082, 0x0086 },
> - { 0x06, 0x07, -1, 0x03, 0x0082, 0x00c6 },
> - { 0x06, 0x08, -1, 0x03, 0x0082, 0x0146 },
> - { 0x06, 0x09, -1, 0x03, 0x0082, 0x0246 },
> - { 0x06, 0x0a, -1, 0x03, 0x0082, 0x0446 },
> - { 0x06, 0x18, -1, 0x03, 0x0082, 0x0846 },
> - { 0x07, 0x05, -1, 0x03, 0x00c2, 0x0046 },
> - { 0x07, 0x05, -1, 0x03, 0x00c2, 0x0066 },
> - { 0x07, 0x06, -1, 0x03, 0x00c2, 0x0086 },
> - { 0x07, 0x07, -1, 0x03, 0x00c2, 0x00c6 },
> - { 0x07, 0x08, -1, 0x03, 0x00c2, 0x0146 },
> - { 0x07, 0x09, -1, 0x03, 0x00c2, 0x0246 },
> - { 0x07, 0x0a, -1, 0x03, 0x00c2, 0x0446 },
> - { 0x07, 0x18, -1, 0x03, 0x00c2, 0x0846 },
> - { 0x08, 0x05, -1, 0x03, 0x0142, 0x0046 },
> - { 0x08, 0x05, -1, 0x03, 0x0142, 0x0066 },
> - { 0x08, 0x06, -1, 0x03, 0x0142, 0x0086 },
> - { 0x08, 0x07, -1, 0x03, 0x0142, 0x00c6 },
> - { 0x08, 0x08, -1, 0x03, 0x0142, 0x0146 },
> - { 0x08, 0x09, -1, 0x03, 0x0142, 0x0246 },
> - { 0x08, 0x0a, -1, 0x03, 0x0142, 0x0446 },
> - { 0x08, 0x18, -1, 0x03, 0x0142, 0x0846 },
> - { 0x09, 0x05, -1, 0x03, 0x0242, 0x0046 },
> - { 0x09, 0x05, -1, 0x03, 0x0242, 0x0066 },
> - { 0x09, 0x06, -1, 0x03, 0x0242, 0x0086 },
> - { 0x09, 0x07, -1, 0x03, 0x0242, 0x00c6 },
> - { 0x09, 0x08, -1, 0x03, 0x0242, 0x0146 },
> - { 0x09, 0x09, -1, 0x03, 0x0242, 0x0246 },
> - { 0x09, 0x0a, -1, 0x03, 0x0242, 0x0446 },
> - { 0x09, 0x18, -1, 0x03, 0x0242, 0x0846 },
> - { 0x0a, 0x05, -1, 0x03, 0x0442, 0x0046 },
> - { 0x0a, 0x05, -1, 0x03, 0x0442, 0x0066 },
> - { 0x0a, 0x06, -1, 0x03, 0x0442, 0x0086 },
> - { 0x0a, 0x07, -1, 0x03, 0x0442, 0x00c6 },
> - { 0x0a, 0x08, -1, 0x03, 0x0442, 0x0146 },
> - { 0x0a, 0x09, -1, 0x03, 0x0442, 0x0246 },
> - { 0x0a, 0x0a, -1, 0x03, 0x0442, 0x0446 },
> - { 0x0a, 0x18, -1, 0x03, 0x0442, 0x0846 },
> - { 0x0c, 0x05, -1, 0x03, 0x0842, 0x0046 },
> - { 0x0c, 0x05, -1, 0x03, 0x0842, 0x0066 },
> - { 0x0c, 0x06, -1, 0x03, 0x0842, 0x0086 },
> - { 0x0c, 0x07, -1, 0x03, 0x0842, 0x00c6 },
> - { 0x0c, 0x08, -1, 0x03, 0x0842, 0x0146 },
> - { 0x0c, 0x09, -1, 0x03, 0x0842, 0x0246 },
> - { 0x0c, 0x0a, -1, 0x03, 0x0842, 0x0446 },
> - { 0x0c, 0x18, -1, 0x03, 0x0842, 0x0846 },
> - { 0x0e, 0x05, -1, 0x03, 0x1842, 0x0046 },
> - { 0x0e, 0x05, -1, 0x03, 0x1842, 0x0066 },
> - { 0x0e, 0x06, -1, 0x03, 0x1842, 0x0086 },
> - { 0x0e, 0x07, -1, 0x03, 0x1842, 0x00c6 },
> - { 0x0e, 0x08, -1, 0x03, 0x1842, 0x0146 },
> - { 0x0e, 0x09, -1, 0x03, 0x1842, 0x0246 },
> - { 0x0e, 0x0a, -1, 0x03, 0x1842, 0x0446 },
> - { 0x0e, 0x18, -1, 0x03, 0x1842, 0x0846 },
> - { 0x18, 0x05, -1, 0x03, 0x5842, 0x0046 },
> - { 0x18, 0x05, -1, 0x03, 0x5842, 0x0066 },
> - { 0x18, 0x06, -1, 0x03, 0x5842, 0x0086 },
> - { 0x18, 0x07, -1, 0x03, 0x5842, 0x00c6 },
> - { 0x18, 0x08, -1, 0x03, 0x5842, 0x0146 },
> - { 0x18, 0x09, -1, 0x03, 0x5842, 0x0246 },
> - { 0x18, 0x0a, -1, 0x03, 0x5842, 0x0446 },
> - { 0x18, 0x18, -1, 0x03, 0x5842, 0x0846 },
> -};
> -
> -#endif /* BROTLI_DEC_PREFIX_H_ */
> diff --git a/BaseTools/Source/C/BrotliCompress/dec/state.h
> b/BaseTools/Source/C/BrotliCompress/dec/state.h
> deleted file mode 100644
> index 814f95eee05a..000000000000
> --- a/BaseTools/Source/C/BrotliCompress/dec/state.h
> +++ /dev/null
> @@ -1,258 +0,0 @@
> -/* Copyright 2015 Google Inc. All Rights Reserved.
> -
> - Distributed under MIT license.
> - See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
> -*/
> -
> -/* Brotli state for partial streaming decoding. */
> -
> -#ifndef BROTLI_DEC_STATE_H_
> -#define BROTLI_DEC_STATE_H_
> -
> -#include "../common/constants.h"
> -#include "../common/dictionary.h"
> -#include "../common/platform.h"
> -#include "../common/transform.h"
> -#include <brotli/types.h>
> -#include "./bit_reader.h"
> -#include "./huffman.h"
> -
> -#if defined(__cplusplus) || defined(c_plusplus)
> -extern "C" {
> -#endif
> -
> -typedef enum {
> - BROTLI_STATE_UNINITED,
> - BROTLI_STATE_LARGE_WINDOW_BITS,
> - BROTLI_STATE_INITIALIZE,
> - BROTLI_STATE_METABLOCK_BEGIN,
> - BROTLI_STATE_METABLOCK_HEADER,
> - BROTLI_STATE_METABLOCK_HEADER_2,
> - BROTLI_STATE_CONTEXT_MODES,
> - BROTLI_STATE_COMMAND_BEGIN,
> - BROTLI_STATE_COMMAND_INNER,
> - BROTLI_STATE_COMMAND_POST_DECODE_LITERALS,
> - BROTLI_STATE_COMMAND_POST_WRAP_COPY,
> - BROTLI_STATE_UNCOMPRESSED,
> - BROTLI_STATE_METADATA,
> - BROTLI_STATE_COMMAND_INNER_WRITE,
> - BROTLI_STATE_METABLOCK_DONE,
> - BROTLI_STATE_COMMAND_POST_WRITE_1,
> - BROTLI_STATE_COMMAND_POST_WRITE_2,
> - BROTLI_STATE_HUFFMAN_CODE_0,
> - BROTLI_STATE_HUFFMAN_CODE_1,
> - BROTLI_STATE_HUFFMAN_CODE_2,
> - BROTLI_STATE_HUFFMAN_CODE_3,
> - BROTLI_STATE_CONTEXT_MAP_1,
> - BROTLI_STATE_CONTEXT_MAP_2,
> - BROTLI_STATE_TREE_GROUP,
> - BROTLI_STATE_DONE
> -} BrotliRunningState;
> -
> -typedef enum {
> - BROTLI_STATE_METABLOCK_HEADER_NONE,
> - BROTLI_STATE_METABLOCK_HEADER_EMPTY,
> - BROTLI_STATE_METABLOCK_HEADER_NIBBLES,
> - BROTLI_STATE_METABLOCK_HEADER_SIZE,
> - BROTLI_STATE_METABLOCK_HEADER_UNCOMPRESSED,
> - BROTLI_STATE_METABLOCK_HEADER_RESERVED,
> - BROTLI_STATE_METABLOCK_HEADER_BYTES,
> - BROTLI_STATE_METABLOCK_HEADER_METADATA
> -} BrotliRunningMetablockHeaderState;
> -
> -typedef enum {
> - BROTLI_STATE_UNCOMPRESSED_NONE,
> - BROTLI_STATE_UNCOMPRESSED_WRITE
> -} BrotliRunningUncompressedState;
> -
> -typedef enum {
> - BROTLI_STATE_TREE_GROUP_NONE,
> - BROTLI_STATE_TREE_GROUP_LOOP
> -} BrotliRunningTreeGroupState;
> -
> -typedef enum {
> - BROTLI_STATE_CONTEXT_MAP_NONE,
> - BROTLI_STATE_CONTEXT_MAP_READ_PREFIX,
> - BROTLI_STATE_CONTEXT_MAP_HUFFMAN,
> - BROTLI_STATE_CONTEXT_MAP_DECODE,
> - BROTLI_STATE_CONTEXT_MAP_TRANSFORM
> -} BrotliRunningContextMapState;
> -
> -typedef enum {
> - BROTLI_STATE_HUFFMAN_NONE,
> - BROTLI_STATE_HUFFMAN_SIMPLE_SIZE,
> - BROTLI_STATE_HUFFMAN_SIMPLE_READ,
> - BROTLI_STATE_HUFFMAN_SIMPLE_BUILD,
> - BROTLI_STATE_HUFFMAN_COMPLEX,
> - BROTLI_STATE_HUFFMAN_LENGTH_SYMBOLS
> -} BrotliRunningHuffmanState;
> -
> -typedef enum {
> - BROTLI_STATE_DECODE_UINT8_NONE,
> - BROTLI_STATE_DECODE_UINT8_SHORT,
> - BROTLI_STATE_DECODE_UINT8_LONG
> -} BrotliRunningDecodeUint8State;
> -
> -typedef enum {
> - BROTLI_STATE_READ_BLOCK_LENGTH_NONE,
> - BROTLI_STATE_READ_BLOCK_LENGTH_SUFFIX
> -} BrotliRunningReadBlockLengthState;
> -
> -struct BrotliDecoderStateStruct {
> - BrotliRunningState state;
> -
> - /* This counter is reused for several disjoint loops. */
> - int loop_counter;
> -
> - BrotliBitReader br;
> -
> - brotli_alloc_func alloc_func;
> - brotli_free_func free_func;
> - void* memory_manager_opaque;
> -
> - /* Temporary storage for remaining input. */
> - union {
> - uint64_t u64;
> - uint8_t u8[8];
> - } buffer;
> - uint32_t buffer_length;
> -
> - int pos;
> - int max_backward_distance;
> - int max_distance;
> - int ringbuffer_size;
> - int ringbuffer_mask;
> - int dist_rb_idx;
> - int dist_rb[4];
> - int error_code;
> - uint32_t sub_loop_counter;
> - uint8_t* ringbuffer;
> - uint8_t* ringbuffer_end;
> - HuffmanCode* htree_command;
> - const uint8_t* context_lookup;
> - uint8_t* context_map_slice;
> - uint8_t* dist_context_map_slice;
> -
> - /* This ring buffer holds a few past copy distances that will be used by
> - some special distance codes. */
> - HuffmanTreeGroup literal_hgroup;
> - HuffmanTreeGroup insert_copy_hgroup;
> - HuffmanTreeGroup distance_hgroup;
> - HuffmanCode* block_type_trees;
> - HuffmanCode* block_len_trees;
> - /* This is true if the literal context map histogram type always matches the
> - block type. It is then not needed to keep the context (faster decoding).
> */
> - int trivial_literal_context;
> - /* Distance context is actual after command is decoded and before
> distance is
> - computed. After distance computation it is used as a temporary variable.
> */
> - int distance_context;
> - int meta_block_remaining_len;
> - uint32_t block_length_index;
> - uint32_t block_length[3];
> - uint32_t num_block_types[3];
> - uint32_t block_type_rb[6];
> - uint32_t distance_postfix_bits;
> - uint32_t num_direct_distance_codes;
> - int distance_postfix_mask;
> - uint32_t num_dist_htrees;
> - uint8_t* dist_context_map;
> - HuffmanCode* literal_htree;
> - uint8_t dist_htree_index;
> - uint32_t repeat_code_len;
> - uint32_t prev_code_len;
> -
> - int copy_length;
> - int distance_code;
> -
> - /* For partial write operations. */
> - size_t rb_roundtrips; /* how many times we went around the ring-buffer
> */
> - size_t partial_pos_out; /* how much output to the user in total */
> -
> - /* For ReadHuffmanCode. */
> - uint32_t symbol;
> - uint32_t repeat;
> - uint32_t space;
> -
> - HuffmanCode table[32];
> - /* List of heads of symbol chains. */
> - uint16_t* symbol_lists;
> - /* Storage from symbol_lists. */
> - uint16_t symbols_lists_array[BROTLI_HUFFMAN_MAX_CODE_LENGTH + 1
> +
> - BROTLI_NUM_COMMAND_SYMBOLS];
> - /* Tails of symbol chains. */
> - int next_symbol[32];
> - uint8_t code_length_code_lengths[BROTLI_CODE_LENGTH_CODES];
> - /* Population counts for the code lengths. */
> - uint16_t code_length_histo[16];
> -
> - /* For HuffmanTreeGroupDecode. */
> - int htree_index;
> - HuffmanCode* next;
> -
> - /* For DecodeContextMap. */
> - uint32_t context_index;
> - uint32_t max_run_length_prefix;
> - uint32_t code;
> - HuffmanCode context_map_table[BROTLI_HUFFMAN_MAX_SIZE_272];
> -
> - /* For InverseMoveToFrontTransform. */
> - uint32_t mtf_upper_bound;
> - uint32_t mtf[64 + 1];
> -
> - /* Less used attributes are at the end of this struct. */
> -
> - /* States inside function calls. */
> - BrotliRunningMetablockHeaderState substate_metablock_header;
> - BrotliRunningTreeGroupState substate_tree_group;
> - BrotliRunningContextMapState substate_context_map;
> - BrotliRunningUncompressedState substate_uncompressed;
> - BrotliRunningHuffmanState substate_huffman;
> - BrotliRunningDecodeUint8State substate_decode_uint8;
> - BrotliRunningReadBlockLengthState substate_read_block_length;
> -
> - unsigned int is_last_metablock : 1;
> - unsigned int is_uncompressed : 1;
> - unsigned int is_metadata : 1;
> - unsigned int should_wrap_ringbuffer : 1;
> - unsigned int canny_ringbuffer_allocation : 1;
> - unsigned int large_window : 1;
> - unsigned int size_nibbles : 8;
> - uint32_t window_bits;
> -
> - int new_ringbuffer_size;
> -
> - uint32_t num_literal_htrees;
> - uint8_t* context_map;
> - uint8_t* context_modes;
> -
> - const BrotliDictionary* dictionary;
> - const BrotliTransforms* transforms;
> -
> - uint32_t trivial_literal_contexts[8]; /* 256 bits */
> -};
> -
> -typedef struct BrotliDecoderStateStruct BrotliDecoderStateInternal;
> -#define BrotliDecoderState BrotliDecoderStateInternal
> -
> -BROTLI_INTERNAL BROTLI_BOOL
> BrotliDecoderStateInit(BrotliDecoderState* s,
> - brotli_alloc_func alloc_func, brotli_free_func free_func, void* opaque);
> -BROTLI_INTERNAL void BrotliDecoderStateCleanup(BrotliDecoderState* s);
> -BROTLI_INTERNAL void
> BrotliDecoderStateMetablockBegin(BrotliDecoderState* s);
> -BROTLI_INTERNAL void BrotliDecoderStateCleanupAfterMetablock(
> - BrotliDecoderState* s);
> -BROTLI_INTERNAL BROTLI_BOOL BrotliDecoderHuffmanTreeGroupInit(
> - BrotliDecoderState* s, HuffmanTreeGroup* group, uint32_t
> alphabet_size,
> - uint32_t max_symbol, uint32_t ntrees);
> -
> -#define BROTLI_DECODER_ALLOC(S, L) S->alloc_func(S-
> >memory_manager_opaque, L)
> -
> -#define BROTLI_DECODER_FREE(S, X) { \
> - S->free_func(S->memory_manager_opaque, X); \
> - X = NULL; \
> -}
> -
> -#if defined(__cplusplus) || defined(c_plusplus)
> -} /* extern "C" */
> -#endif
> -
> -#endif /* BROTLI_DEC_STATE_H_ */
> diff --git a/BaseTools/Source/C/BrotliCompress/docs/brotli-comparison-
> study-2015-09-22.pdf b/BaseTools/Source/C/BrotliCompress/docs/brotli-
> comparison-study-2015-09-22.pdf
> deleted file mode 100644
> index
> 040f179e2bce8f5f7a2f407b2d61ab86824bbe8e..0000000000000000000000000
> 000000000000000
> GIT binary patch
> literal 0
> HcmV?d00001
>
> literal 215208
> zcmb@sWmKHY(l(3)8yrG#7~I{1y9al72=4Cg?rtFj2<{dfLU4C?cZYA-XP<q}v!3_I
> z_pbHMx>w)R)m>dzRb5s6V}?v#M2wD!o)tj0ad0#RU;;7%Z4JKycz76;-
> R(?(48jIZ
> z23EFa00wyjGZRN3GiY5Az#wAc=;R1wWqqIV@c~S1jNg^s7ypOyUpfE=VOwV
> #Cm=h3
> zLE6ID5vaxTt_5WI>nI@0UuOVW*#8o;GXCrJ*P70MPJUPUUnc_?6ipm$ogIuo
> xIlR2
> z9c+!1OhB--
> 7(hM&8I(=joPZ3H)*#$Mf4_zQeoN{A7)0Hi#Fd;3oJ`(z#TkKr;Q%m*
> zGXdG&F@S6{h}nW*gI2{Dfq%gRNtl34?;!$(K#Up4^lvE(kon(IRv`0VQa;cJz#wa
> 4
> zY+)c|>ju<%cZ{8h8OXuK3^FcgV`KY{^q(;QB>*reIU73t6?Pd58%qF#kgbEUiNn8?
> z89{1_CPq%6_<@Wub8*tM0a;jB=s7?yCPsQT(DHj$fD9JK^zIHeHYQFcW?!w1o
> cQ?O
> zUHDfr|8J}?b1{P~Ftf3|+hJq}xyANBjW{^je`VuxHRWPq=j7u9nHL6y%ftrc7R%q
> k
> zkT-
> Au&Hu%j|K##L(ElTs|6~I2H_ZPM2nzz401QS3@1u+`kP$RW{WYq+kFqjAR#4Cc
> zfldz2CZKT10vW#8I#?T6{m0sSGXI}gqi17b0fG4cVe&oy|HI@vkNzvS@3{bh7cy`
> (
> z`HNu;f({l2R<g<<PTCmR8e7<yfoN(BikyX$JDtQ|X*B{>n1PMc`*sj(I6wvzK>=5`
> zRk5)EX_x?+{;He*c>TWP{{Z1#A4C!(2MaqVTL&QL`#JwdAph`CSW@I&=^ZjND
> 8rH>
> z%C_Q?BC-Z{|AF|ISjpYd$;4XH#?<zmZHgvl7LHC1?m$XGP-8Hm0x-
> zE6ZzdU%71$X
> z5-K^{*;$!bzjK7~y;{`XnXbjb_U;TLkeP#no|A=H2Lw}#laq^{iJcKN;Q}(T{>6Jn
> zMh;FO6B|(L?|uIf{#)?R0Zd##W=<d*8#_G{8#Aa@x&Beod2c){96)w<c6u%@
> W@aD@
> zCy<2;$id7EGRFx7wIi*6me@g6#>v9P3FP<}uzz;_+a4R^JM4eVaDs~SFOZD?X#
> 8^)
> zNc6Xfe?<Q|{_hn=AQvkOJtr&2f5Ch2A%COzx7Gg&6gwM`o$EgUI6&y%G5v$
> +pD+K`
> z{YUW67v_JAzia+`_HS1}xnKfvvi|2pPEh>co6ui={-
> yDEZ2md$UHG@JpyYwtCn(zQ
> zGA2-
> @wK!PV={cF$S#^L+ATPE4tpu8KGJ|sTFDyEsG_Zp5z{m<R!@{NWU)RDrf&UlH
> z|3mP9b?`3+)}VXrpBfXhGB5*OU7#N92&yV4AQvMWJu?RjNbs)sE}>&)Vxs3_
> Vg*&Z
> z5{T5QKu!=5xfntBm#~4Igo%Zjxf76siH)9<nUMv+APKr3EsO+h%&bh_The>A2
> >sRZ
> z>Dbv>>DkyAIe~O6%&hbrj2u8_MrKZW7LXdKU|BfmnHafPL1p}|B4%M_!VDt
> !ziytt
> z@6-3`-|oqn*qAw)GXYsSS=c~@2-@xhx)>Nh&N!Kfn7sD@P-
> pyW52$V!nb|;HA5?%Q
> z2G#(#tmAeVFQu6`{%5YeoJ?Mugm1D_tc4beix6~m@_^(J#2OA!Y7>Tdg%F@
> ryv{es
> z56UT#RQVrip`cJ<C^zT)iDAFzaiS>qR@TYpj5SNroL_OjzL~Y<?77FEcjU61aqT(s
> z9W57u!-
> ARTfA}z%#p&MLOX&LL5eL`<omc8^H+YX~8>iq7mdW=)Vmy}ca$MvFriB6=
> zb~f<IAFd}P4%>17;=^Z%-
> Zn;$=cLdWTY4mYZ<ar{c)T9HC|7P%>{g!m@lgvK1CF-k
> zz1M;wQwqp`u-
> wmjqKCmApFfQ69L1xHN9X3$+_?HpPk<TP&DT+#&Y<&WK#$`MC>bN+
> z@*8h{zx+u9R-Ox~o&uT6{W2hj%+S>2QpI%UsuBRWx4hz@vdB7ZFF9VxZ2c-
> GIijM&
> zSk`|lV&kV~GAz$wPSQ1^lTTafUe|U?HoHY;$lJEv!-
> (P^@Bw=q$M1lZZII?im`i@M
> zGwkHpx{oS?stAP%u?*%@7g!An^rSUoq_9K~*b;bR^$Gi*Mj_3iC&Q<Xu&Xd
> 05&j@v
> z%~=el4-
> =Vt)h9lym}gA!YvSMf80B{Y;0!zM5MvrOy<o(MXN^2qo}e2j9SnGO^?vz;
> zVhJGG270T~G<4z6`hGeJHCXT{f@JK3n+mMbGi9w%r4Mxbf(oFO>wBUN|H
> &ch2ANT_
> zd9K!!0@1eD9tOoJhFo-lnq3_YWntMXbcsYud=|uE#H*MVxy7)(6V{-
> xh<e6Ccyv{*
> z$Gp2|xEOOK4`d_e3G;A**`CDW3}c0yTjQ^>>E&k3sBE^8<$T-
> EdZi$CJocio`!k24
> zn}ORAr0hMseA>IrJuW#IfL64H0vDEZ{UORs#}C*!8<8roE-
> <w1^*OXD6fx8$je>J*
> z)sU-
> v%UwhbyKe*Mme%UyPhpnw%u@B}BdnNbo1i9e>}v}1yz?%rq{;@jH?FW7x3
> S?G
> z9)wUnP9NbSjpGDbVR#g2`|`4Sug$iuXT0S(T~1ZDIjrL~+zIfz;tv;KxyUiOUGAfI
> z+1KzphD(w2rYJBe14F;+9n-hH-F(|p8K^@u-wLX*muQ7MbOnB+sPcts4mx~-
> nr)B1
> z3m2zE2@eYilMWjRvk%)1Q$xM6v-)KZrJ<`}+GO?n(!YkNBao-
> Jd59TTqsPOYpX75b
> zl?MY~jCeI<zv#xs-S%U*$)~-
> V*4tI>lBPe?iW(gQ_RSQX=gto4KMKEl9*gh)+5;W|
> zf2-2%c!WCcK2~Mi28&9}<>QU*Fc0skNptBnl@IX<W`|9-
> Y0YL(9l<Js|H4haX|AtJ
> z!E|<FZS%XMRYVZYtU>);Lp848h8I#}Ij$-Z9AZeGvf)u>9rp^`t{h4Pe^<l3JGUx0
> zXGh6TX4KcyG<q^PCbz-
> 0eL#9kC2N?Arm#%#s{6q~X88+Y^3+@4Dx3qS;sDh^h4Wk4
> z&Kq}LN$-
> g{OJk@n3O{0~J+GWyw*0FEGwP{k#EwZAnn(t9cDX_{3C8aZAk}yy5qT9D
> zD<))I57O4F`ow4<y}rBN1q~-
> DZD8N=)VYNs1lhHcdR|>ON(+uPPK>Brmo}1*ZxOm}
> zeBqMu=@*S3#r2mS6g%wv)JpV4fay-
> ;f+nm!#NIPX@v+1~EUsm~;a6~LRzpD%-5!pk
> z?JKOdFek|huT`Rwt<yNUm23xhiezv2#XC*jK6l!mI{b~X%l-
> DaLnnBREcGX6MUB@C
> z#Y^%r&G>xakcA%EAN$%l2Pz9&VqLKAT75ao%?W)p6bM#{(|WW%Ml-
> !|2_bYw9r=78
> zEkS|}EqG<EpG_6}EvR)Q-baf?SZ~HKc)P3SCUsl*vi(qs(W>8|9{d!;E}wJO{~d{#
> z-+pyV9re-
> +pSI7r7am@Luo{mk>`G)69t`&mewhML7B{wxNf+4MjU9#Qwnoc1^h!+l
> zxV0QRWU{ZswPRxFJ70c}ic{NRZi(Du*P-
> Tx@5SeJrlKTRSyPaG{}HFUV!j`MW7Vjz
> zD+s2WvJ-HJA8L<!Da3`4L|MC1h1j`9-
> Yf_9N5Q8JcqMciTMe7aFbdyR(hX?ecH0!6
> z2i^w1eizP6BCC>|z;qr3Xq^)<7<P7e(a(?3KOL#q5gyJF*U3hX@A}ccLH4M0yJ(L
> I
> zo6n&N!Cjhj&-bEjZ*aPwSZnn5({DeLSV8iqqV`eO_3-4VLlx8FFH-e)G1F?17i9O^
> zr|K{8Os~mIuk_8YVbm}A88P%bta9WIF!PA5KNcYPi7F5efCI<;2dFqZ&UvlSPJ=
> }$
> z2P%}y;*hWM!5`rRYW74}BLqhIar!1<x0$Jg!o}m(QJZ<-`3jak(EX;n%YRzH!|Hhy
> zG|ETqWkF}ve-qGoLC-;rVobviHB*P8-
> ElYd_Ygvv(~GGlW8jD5b>n)0y|UB?4)?r9
> zt_!kbMFg)<dgl6tMEAD$`)oQSB^n>U(X4U+E)fwvKIYrd{kqQGz;Dau5p!?ihdF{
> p
> z-1cb{$g!k5O=CHU@@mDr`?xne)i{E=r^zw4$n`q%yzPAXWXQi7!VBqU3YRN-
> Ps}=<
> zNFR6-7JUtGPT~}dZ48f-W|q&}9OT9xkv*>PtreAbVt|9F76nlQ-
> 3@~YX6h!sBW50B
> z$mn?X!zgfft9?zNB{UbF)7;YhH&sf7c)4JknwBfgy}GZO4^8ifCf-g=DbB$gJH&zP
> zllU=N`?hb#1ltr4CiY~ZhU^H+UwU4oyBsK1uVQ#&rqWJ=tKTg6-r%-
> Ljeqk*0qu@(
> zEbkyKj(z=W8|67l6xPmtzxup!|9Z)erc8QxVo@(-
> HU^de;Vk%zUV=)`QDAm)^*i!X
> zazDs*GB^B6bZ}pJ75%NCdM*KXx2)k~_B!hQBIn)$quYj2?;uZsEcc5CDJAv<)pb
> {8
> zK%XFVldjzJ$ai;P_zfJANLHO<49*z4m85b%h7VmZ(f+4P^O#~x%d_OP$p>4Sy
> SW}_
> zBn?;8I=p_n=@|~er|72ON?9&Fdzt1A7vHaUJEJdM4^Z<kVgCCxe10-
> T?ePsiik&a<
> z>oFULyvD-X=60Itnw`WmJDoNeRyc>eN7mM^-
> sA*UxMJL3E^gmejO=N8tb=+_dNrbi
> zFPUPVKW-
> &H>C+1!E+!lz^h%qDJ_275hQ~ca6;VB8GOMgUPVRyI@EN!^rhQ`#U^IcN
> zV!~1DH(Ka0*HgLnX(xFpTZL*0M{{;mEApLT?^Tz13vl}|rAO=yd4OZ}26>wqdM
> #1Z
> zVam8$LWE@aD*lJx56kZ$S)xMXh=dlF<yLQ`Yb*ZE9_ghs>-
> FVftFsuZ7NN(z<(`G1
> zsP>dc_<63*h5rq*{i<A{_3bTu_43a;63zx>PI^aw6NB5)!rof8{a30}vwhX7jt!hB
> zDrcUU-D=v{+?{(Sshz7#yn)RoFsAyXfl(fxoobd?y?7g;773!?R|msm4_>;!){odo
> z8bkss@Q!Jd2w>lAe&<eH4&;p^5Rlal0WLo*hy-lY!c9RuBJqlKehdS`e(j>+p-
> uuw
> z2g`QD$PBd93R*FGCh(5r7>(8P9)od@bYR{^+D7n)&0%~N4d^a5|G8g`Rf1KSR
> ^+B!
> zEl@3X5nxzmn7ZlRR}#UWeU<Io5^YnqbnwODX$5g5{gl?#(KV;FxV6GFz_Z~A>
> TdWH
> zpJ2l1qSqsV$45?Bj&STHM<s_&l2tO^ScaKGBk@@BXVG-
> gby19@aDtdysoJH7*Lope
> zw%ldky%k?5!-Cpc>dEjG?>f!J$Q9is-3{--()Q8@&6Ua{(qqiy>Q(l2_O18P*cHrk
> z#f#{x!E5}heQMuu!|+Jugk|&(^W@ea7Am?b!#`A2tjk)|FqC-
> }>x;gss5E()%leE|
> z<{#QQbN<Qo>k&(L#2un{2v`;wZI8}+()Rm2IwCwuhnZs*gsm>;!ml-
> ?TI+1Z;u)+`
> zHMU^FL`i_c|FKe(Yfs_BM^WG5X3J5uJ+a17Yx{xbmBD7#ZEYi0n<Pi0c*il4y@r
> +k
> z=GB}h9-1RgGojHw3a-
> K|8Yvul$I%xC&bh)EM;dQj@1;XdS3IseE{C7)_<Lga1G?nQ
> zdxLDMqH&HEDkE`@{y*4NPRbrtM#`xxG<8*UynSV*x3%H+wC{00{!!V$^2q8
> SHx3$`
> zyi*{FqKub|J21ve*KS9>GHUu0GAV44KP}HIGa8W2h)Cc!F%G4v>Z{@1@Yr*B
> _k%&%
> zSJ^wEv0PWH{hNpQ4Y?P;25+l}?v2rm(T`fN4yq6Lk5=2IufY#tDtarf2CKpRor?|z
> zpLcad^K{zfJvQPizvU2m`t%3?wmsBS_wgBinAua!UGlPl`_-
> K4wsvK|N1iP_>_va2
> zy{<jmyj^=T*1(<V%6?}xRjXmfGWIP;_H(8k`z|fl)m1v-
> m^Po|!JoOdx%9>{yw6vU
> z*mygCw9IsQYL8@ESt`crJ|}vSA4Kg%P5I3GOuZ&we-
> `toq|sC4EAdi&h;qnwsBnnB
> zOmir4NOXXFtUSY@6XnSU^fa9&d~5XmBG?(d-
> tf#u)WFVw5bAq{){<ZR@RYF=c7uiL
> zY}BrfI+@=%Tl0iULUOOhFdG<n6S3R!((1lEF*SBLQ=Ir_Ej`j%e&C>`>bGY=@CW
> lW
> zbmp9n)^DfkLr!4DIYbC-
> @!)LpIjMG_o<24YV&pn(R&ZGrK|`1AIgNJcNEPI2aH9bQ
> zLa;#<T1byQ7WmmOrhBl}z`KnPUN9sZgm!3rL2CLRpAlkvD9%y6qG}#_pJ5{nXr
> uh?
> z83~H-
> 1m|JV_0eR4hU5{H3;@5cothAk^PR^0LN`#8uG9?B|AdI=f7tzne2#uhQ8qLc
> zgyzpkEQFz)$YxBZA)e!p1B(i!fQAt?RJ+YplVc^IRTus}Jj6Ua#)^Eb2k}0zO+c5F
> zAwG5JQ%$lJ$<h!~O=4RBJB@@(B6AJQD_m}ZVogv|V!JV+d$KYLFH_u0Q36)
> Dh)gd6
> z<~ofb5z{spmqa;f3N2Y>{M-
> <cLt2|)OdO|SpbiS@MemnYQgKNL`#6zJQrq~(4Y?*b
> zy&jHU(dAy@ghB3Y9fv49inI8;2~!_|Hq!L_u-
> q(C!UW&A*ujBq^e7ZX3El*$$#r6F
> z;@oa3PUMmecuvT@b(Z@CZL+yRhW#=hvd;LUZRm%<=fr18n*=9C(I1kCaPg
> 1(1Ab^y
> zr2^O(r2*8X5kE>pSo1W06ncEk6Qfo@XH$ZYCPFMt?oU8Sklgwn-
> LJ$gn}?Jkkv%QC
> z;zV^bPC6OJ`b{@MG_f@H(E?B*u4I8DTN1f%sDLJW{ew|Fjph&LCqQJdNjG3a
> (jd7?
> z)eVVvFS1+JptVYAp6vM3E#N75E{G$jG03PJZhFQSHWyG5%n)1|B;9@2jj{3L9R
> 4Nv
> zRm!(;?%?bi`X%r+@m11xl3J6_{6j^a@R^XE0z(z%g7mRTL$I~U(!5JU;E70OO(fK
> U
> zjcQ0vbJmH;(|p;!*=?=V^%Ts4<*~C%7`~}(70I!zOHzB^s_9vk>jINYR{OxJ8O1!z
> zG3is>OQ3fzpJ{HD+yd1twnypIF}zDiwuxSi<1tU`uMR`KTHAS1mvHal4x`kCyJMJ
> J
> zlBaMT1OD2wW1Oepm)|}{a|>tNxDN3v`o2}ZHT(;*s!*-
> @Q7H*l^YBmWvOM@F{tldg
> z*e={E6l(?7{M2#beX47WN4S?@a3R}#<mWFPg`o?Db||ym7}I|+H{cSGX(VWv
> qj_Rp
> zHzk?zsRwBtf}j78R}Wbs(R=~~`FDGF1M}lXjFc9f*mGr#;O7w<;^+(`HK??@Q))u
> z
> zm8`I}Mpg5~eY9_f#;VMizG=k9kKi<<@OHCTMO&eJ9PR~^3n^`I_~)WxfYlRz
> M32Dq
> z2wmus@(%|TOI1u9UPBieGiw=^SKBwZc?OV795{F;v<>n3O0`edT|Xk?m>RQ
> x%}QP=
> zviMTFyi0d^YLQN8KGPz*<Z{C8bnIliN3YZBd^S<5cE;!ZbVDf5c-|oxe1}Yr10fuW
> zNXX<cz0YJcz{~jB1&2-
> {OP|B+ym%dI`p3&{mLztRKK*Kb+5HNWR=cjrX=u`9SgqXa
> zIh-O_v;Ogb&2o<S>e%s!!)m$i;Q>?E>tKgYtI-
> <M<=D$a&CYcp=d%4tw_;w;eSO`s
> zlJN6$e>_KQ$IUJG83Fg}>JtSY=L6C6R$(mv!}YXTZtm;mp9O}o>`q+n)oA>){uo!I
> zf!6A+mH7*sV>b?$HeBvk*J`6Yl`;XJVb4oV)-mgpDN^n-
> `@%m_A&7@1CB?JS7f%W8
> zk_3&z>H88@152BR6-
> =LMC7E%qKUauVC{l}%%R}5Oxi4Wh2fh{nuROV3tbSds5~(w8
> zrvwz_;YKd5t&;E4CuBC;+G77oAvrV04y!|$t|v|4M!v+Ec5S?B38Yx`SivyX9|KR*
> zot@QMN79X-(%HF|;;I;^8wkW-KCvoXY6&bFT%n)$S=^s=5w*T>X|2y-
> Uu7p@MLg`W
> ziT;$RDFe0DhVGi!lp^wFyvb$6RZ0H9UQw{M(YjT?t&uKQQ2x9gmzih2aL>=h8l5
> L6
> z0Qx4dXoT@>9O$M66Mf)-
> Zcc)Xu3QI4y<@O!bpKU9+|%`?r&yYX6iYMdC+;aepYga~
> z9%GSTtbx>k{Sx$+sczj%a$jcV5`wy$rFDS(;wXFnNNsU3{7P3eFU+#$(Z*Z=L>t
> U)
> zamTG_@rnI@@nG+0`wAycwjLu;Vs|UfrUR|x$Ka!w+tNisLG@|g;?g2_i<1?q
> O>{de
> zY`dx3@8jEFujf!zjgG0e*y}eRuF%_{gcm=%3<y|MVtZ~vp58B6;!Lm6r4vW3STl;
> D
> ze}1V5M|E~~kg^$7%J!VGPdUeS=gt@Su+p>4nFy|{t;FJkJ%Jz<%GP6gPYs-
> >;ly(_
> zmXTli_Fehw=&<`+-
> hK~O^|fo=iRdZ~|B5a%sb;~sWGAGY16L_JTY04{%+yq%g@v|A
> zlC_<jeGJ`>S0eOHiHdxsYr(cyz;PhK;1Utk2us`x0rJ{983s63M7qA@7<haeZU}jj
> zAdsXTC=uy4vayI`si&)?sHHU5J{XyxO`rQ%E|}bTnyU~|Ux&NGBVqU^dlM$%y
> |=nL
> z$_s;J*GNMbaoOOQyW|l6XzJ`dp*%im>K7+aNR<H`tfx#0JjA*B1Ev%AaGopl>
> 2L!>
> z3PY+`TWI+tP*GuEuwG#6;yE>&x_i!zA^mxV?(>NL)%DU9oz3tXJFiZuAG)c}V)
> NLq
> zNyQOsXUebf;M}5cQasn#>-
> LRsLVD9Ogs)|=gf{&OaVQAD;l*=kO5gYb^V^0HxCtll
> zjwUDe?`s5zIu;h5m95?u3I}l!c0=-&T9+xOCF1+>li?>3U!h8fwVO$a=6x){FTb){
> ztmY+SMhW3*iw2=WG@WPo@5f+8sr%3S$q$~m4Sndf>Lu!BYbFQwCiBK)d>
> 5z@A@}U(
> z8&@Ai3O9zq_`SgU0#96LIR<OJL^WCNUZhcYEMea>i<+UxFErB8PnPxdIvTk#q
> Hp{~
> z_(O2G8`(7_792RH)yHxa5qUvWIyl%}-l5liTqHOIMm!YQkm8@`2L4G0ve8-
> ==4rZ6
> zEKU1k*HT3xx(h~(Y^&pkx{qwfLU=;3*Op$sqMZQ?*AQR*P%9t85W|GS62r=1
> q1ye<
> zuI~B7#|+9Ch#=!*v7+YvID?uZ<R=*}s3&T*bGK>a_DCpsBh|ulx=gaW%Hn<e
> OBwbt
> zIqPGG9UO4aQqd2vCxV7CWqZj)(0AwiF|G@1_?2`pt}}U0o#y&g)34ECi7An8;Z
> ~o~
> z?MOU;5h&=W0GaIWX(~#=auF+$52%1+N5E57H{Ss28Oawxa$>)IfB6aIVY@V
> dN6nwL
> z#Tn`pAAvQ0PUAzk$DcB5CAP!YypJg|u|&?qykFMn9b58}KOKQTNl1_tVXHGt
> a@>+;
> z>TIZzd%!Mibz4Fc6HeeWVO2xq=Y^UpF4(1F+d6>7l!0lbblov~!?BkE8D}xh8wIf)
> zuOd4ic+<Lvq3@vi5%1M1`)E7wQ~CX=d@jbcBHqWWK+wp~h^X|uNyzu<ed
> NRfjc2Pc
> zN^YfjM|!ef?01|9#g{9hoIX2P{QWR~&hFfh>)*ST(a^+ku+jnYvW=)HN=hLmB
> <L0y
> zvru6RN)eEeIZ8+pP&MZ!6(yp<P}wIWfKhP?WDwCvN#s2@SlRp%lZr`9$Sx{M
> OS+c~
> zk4+*?MB^BOQ<j(0D4|WSOB~8k)vk<NovNuu-
> P;$8@sKa){eByI?tzAy;s|cF{Uw4m
> z#?>LCj)IOq!FImwB1jegAanjgb~%J&gC}4Ex;@<RntXLzw$1;Y6<uLHVP#>ALjD
> zr
> zcAGTYWvG?dVP3uZAV#YM3FVBcd<ce{pgK*UNI}hZa?L5U-
> Q<Q_BRGU3l|rJ@IixJN
> zLn%yjat+C5g)w}fTC-A2Kd);zLw@0Z8xL$r&Y&-
> $0itpknk4<Cd}5hU5u8nWKyK31
> z7@Ar)rgSF7eC`dc!~Qt@K)x<-
> pMi+ff^V_KEY5#yN_#cus)7c2RzG%AvQ=>8DGt@Q
> zZ888pXLbq@`>ma8ICSg%Qw}duXMmYnS>0h=PcTloW#`)y{)jer?6B;feqRgoT
> w&I+
> zBk$(^I?i4kjhG1aDMP>Zul>Uv!u`XrJIf=iL%_!^-n-^Y{JYjm;);xOz9;Q;&fsea
> zW<-k2!#J3m&pWucBc;GX$eZM{WXPnIWZC5C<eOxIV(IknGV=Z3|4>Vs$R8-
> <Buf>`
> zGhwLsQ-34&B8nR&1RJ0v{c`UL4a>+yr{J?Q7SXIjLJhbR8Yg!8mhIU{o*ft(D!7+_
> zx*ol{3MdeSq4v;9%xh+GI-
> UAFPuuPo%)CsKmbl9G{n&oZZzYJ9;nyTkM_F+ENhOYv
> zAtU#f@XU)qn8j<&hc8DXdaCkZ4f7Tc4PK7YN;XdozK&E8x>Ii+3pUae&}y!yyuc
> >9
> zYT$etMRzz<cA(s)x(k0!Ze_h?D`D)U1OWONQ!_zt>1K0BXt)6iDw{@vzZt)2h+!
> Uy
> zY!|aR`!}4;D$+8wS<y<11UKRBfXh&pK6gEimjidMCS9XZP~(zL*7DDj({1Bs*(}_
> M
> z9rix^Q>`VuI|JNYIU95>h=CpU0V8R*OnvF*@E(8JETm?*>Of(eO`uD&WM^lF
> u}CKE
> zPs<v00!g56y}iidKErgwgx)XqgSQh)k)vy;niA2jD#2$w`E6?s2!)T@%+_^u>dez8
> ztGwkv4}o(`M11y)DI$^ps8v+!z@9eil~yf;$IL^)wwB<=6C14QpJRS2fe<8%DfO^
> *
> z=6m>)4f=AS1Pfe^(e+I><;MiRj<p2OrVC!>NL;>3**#_4=hY7P>Rh0?KhmW-
> aM&#t
> zyj5kq1+3>w`f0u<;%`fZfRa4ta@Oi%+BQ0#261$1>^H;QPla~)Is4bJx-)qyfvRl)
> z=Lj|Idjked6VJL}iu?qta8*fltILLvYbvG4l7Nbpw1#-!zWeS1DkZKSlDX?m-<$3h
> z7dIPAEgq;mN5%@*J$=6Z=GJ5>TDnbX0DC3f)Ym10CTuFJu;3B*eBd<OwuyV2
> OhpX)
> zbM6yAo79pW9c4buZJb}CjQ=JC(f;vrXaUtedh`z(Chg7B{3b9=b(u*?`xD-63t>`3
> zulD*hX10uoO9QDSF%N^(O-
> +~S_A2BI>T0x2RF?~rFf*Sj@Ssj%?Oj$@a<B9`M=9T5
> z{TK>hR{q(>2**Lfc0t;Zug13gNszH_i`})1@Hqj&`+d-
> cLx%gowy49o#1|V5gMPC6
> z1MFRJR!f8g!BSyl4d-`^xV!L#MwJhFp`_+ey!sHdBs$$n1}Ir(jzlmmzXBQKlY(G^
> zQbTiLJHZ&beKuC?5Y4-gdd|IxpKI^k?`c_o5tQlEWl_j|zY_uzr|L=>>oQiS_{fY#
> zfYA}oa{kLH3o`JhT>##<1GhWWbNuRf4I$jN;j0b(d&&j}0ivi7XL-qtIHYM3B!DYo
> zuAe&I7E#-
> gCS{=a{ZGHSb@&4G%3wWMy+F6`$k}$hJLlkBv_W5YgD$xW<E2aEBH7T_
> zo!wygNOdovvw?@b{e}Wr*smW9^H8t*7CNGMJIQ><#V>fZ+%oHt8=)aDck
> D;4-QYWj
> zT@nOa5`9>czvLYS59M{E;%<0yMhW^<cD3dTmoA7qUl*P8ERFv77@iMr0C^fl
> nB%{<
> zj#w~|+#<>39+gGBHqP$E=pEui$J5tP6PqM#H*?qHrVhQdfow=VA|dBMh%IX
> xAG~c}
> zlad7_Oc<`iI1wJ0DC;&iNI1u_j6Pc}PaDC&43qwtDhw$kF8l`jf@*`O3&yKJu)BV&
> z*5#qS;KK=5a^X$TK~6k@2HEkTwAQh0;KeVM5<hauvhRSmBYesBK)^eGRuoZ
> SR1C=Y
> zm0Pp9Bu!x?@bJ+)C8zf;^qS(a1cibW?m!5gNRASPe7*b=faaoI?LJ~*LGqIrAIB
> %P
> zNZek!O_vMUHy+sstd{G$vfN6^GA_)3@q+O~d5!Np&lu|V$P*gtsMN@2{2$
> hg>^s#8
> zdrtyl!;#$0C@hM|4g#{UW%?5&w~4m5d1_+XD92tf98j9Cv6~|tXO%*E_Co65t
> Yurb
> zo_szBeCeJ)g46sWH<1~jI1Ui&qAr5N4-
> zs6ViZjyD*qJF{nVY>J=cwxkF#d*&450o
> z_n9`^SwC<=xgp1UpaUHy{46~6BTk=NAB1S|CMJTRCbcJ}CpCOBP0~|R?)Qj$C
> FObe
> z%GE~&m}cM~)I~T?1FjLn3pc|DupM_s1k4u2B;}T1+Je|PhYVW2B6C5lI2${}*ju
> @Y
> z#sg@Nzy_3-gwZ07s2$(Z-+B>P{co4tvF&hb^Mcw-
> Fm8LHA3tAGw*MFx#EyTn$!H@p
> zu5sGny%*w?OR_@GGQdF-|2du-Oh5@$S)H;8b`Cq%P18+!342_80>-
> NHqnL7FWstoN
> z-dn=xQjRD}!ImSb0B-
> {~4Ss8X&kpLw4V6bWq*kE{uV#?;9!XcILIQ(OxrnNK8w<Zj
> zsx&wW(nRZFjU~~TIE;xg_9NivquPN*8h|1ldK8Y^?v~<!Mo7&?_E=P`5Sj-
> 9USH7-
> z=?@A_RqP-
> oiUj|8HN5$XDO_|q%z;%Mb>R576XBDeBHZIr`w?X9Nm=xinBEgY<vn*e
> zb?69W<_L#wzIBF#0?h@;6@Cf@{&_Rt`e(r&UBAwytJrw}1PJ`#h~osb2xHycH
> vZC8
> z5Djq;`Jo2HIe2n~Hm;~kQ;CL8c95D<a#O2LHz!Y#%eSbw&wgiWdAxNWkp-
> xp5Ilr^
> z+$`>ul1@F$4d%M#qvRMiseSuVKLbLEXr`l2ks2|{H$BFL$IgchFeiTPpF@u0BXv
> hg
> zp@vXS6+-fyp9vb-
> bSZ%aJbX$b=G*o)h)oL)u}AzZ&jPk%1olIz>1cW24q}`RYTT$9
> zym<JY#n0)i6Z-80+!5v1CAh#JJ}^r#1tgRbL8}i{&VpV9f?m8}PkpdxRqb2(uvrUk
> z?0vOOtz4U8A0*cx?sFo3y#WLw$RqL<%42}eU;;R!9PJ2se76>9aB=a_am`416A
> pg;
> z(IkWYOf~jMvKU}oE`Fx!DUo*;x)9?KdtS&t3wK!kytYMYwso|&)mmf0J}W~w
> Wjws`
> zI=!yHweJ_)<65;wwl+n+4P4ylEcgBI=Z%>%p5G4jq46<!yd^6k5?}(QgInb{NDs(
> U
> zsEPcrsRFnl#z2}B%Okgx6s{_k=D7TN*&;c2)iS#+$oH-IYa8qD>ogv6LS0zK?=JA6
> zWsuL(w>B<m$Sk~G+SP*3Sam2caB&bCBG}{QQF<07g(|l}A6`W<3+ed!O(Pr0)
> T1wM
> z#SV4@ogiblAe@|p1!(5CwxAO9Yab3T957Qjig15>X$}asAWhoSMen!pN^)mV
> x~)dI
> zldLM9Ktm|iJ|S<{(ziLhL^we*#Q7HQMkG<}?2wSkpeJ&1q#7CYT#FYKMl)Mm
> n||<!
> zFIP5efv;JP)-LiVRKgxgn^Y=<-
> %OhkmBEqGP)?JQF5e@L=5;I0og9Zs*KNZJ8x=Ja
> zZIjTfg*Qxc^Iwd`khC^LqN+3I82O548Li-!_)IEk5FI}9b-7NmK@X@A^c>l8aHN)c
> z>h0Y1yh7S2+x2VK8dYc#eMT={`Y5+QB3OMQ3$uX+YY>{x^|nGdd0>^?R@U8
> A<08p<
> zIMVhL&9v{UU`i!_56vo(cnMFf6QEMSbOdlyB-$j0wv0Yrgas#IS}c`7Eip?luP;x8
> zn3jZ#a2E)Kvk^pbNz2iqW@+4oHlzP7%ohPcMe6hQ_oziiVzK<@5;dxW&kT$X
> 3_%tP
> z$qoU-PyXpE-~$EI^RuYzOej=w8FJevhu~$`sLC?&BT40oc-XWVFX#+Jhz%CTZs-
> l4
> z!Y-4%5d7Uv!nI8(C6@@oHH~WfYSr-
> BKZ4&VRuY*VN4xxW<U%|W;J3>HpVU&3p1=Rt
> zjm#D93{mEMY#8Ta#{A+3-EuOMr)j0897h1ok9tW-
> hLZq;L#+?}aU^M^wMRb<tk!@;
> z>Q3zB8yjcjQScmtl$!i^`EKKh1mc<*N|rLoPp1XU#THXp-
> V`3!wpmNcoc4y3Xufmz
> zM0Xoa6%tVR(gTI$v&g-
> 2Md(nA$xeMl?E)v8B33A4<n*=0u8H)Yq}GJQ=4hgs4bbRo
> z!Uq;3z9mGodp_J*P+!!bm@)V<=ofm`xW`kSLNuTraWK25Z~)+&0V3oo?wh@
> E53QUV
> zXXf;mI)1B9g0Q(Xkwe888;;<vGN)4z`Q6Y4sRF?k0*3dwo@iDjsPvHSQBTzvFlL^
> n
> zo7q>S(^Z26v>$Q5Vg7Cr0ZdI*Xs0y(L_iF~^lcg9KlSU_I7^e{iF(R{^&G}HbsJJZ
> z?NAk4S)A*^1b#9Q!|K6=5KcEF(kaq0<}pQ?k*bJpsCBAd#a$!Mk2Q&NmiMX*
> vj1(r
> zXpjO^zO@;NW;%WlVX>Ir9~{B<duEbp3G+H>GwC*J!p4=EslRk?0HX|&z}Dqk
> hM%UQ
> z(v4JVDHe5iC?qtkvoKgm!{oy#TDt53r9yDxBv&nGtHcH=WsvE!D9WdyKgle!QQ
> g6h
> z>6?ub+T5}UYnesL*Z6lA{T3!lnz1i#Qxq%&Yn{%s<rP|l+0M2^FKLVpV=-
> NxLK_T1
> z`Qw?~b8S*N@VwqPIM}lNuRNyUYmrxjdDPp{&=HU}M0p%0u|~BAfELw07s
> dkUU<s&t
> z38y5yxj{#cD-
> 7_BN29rL@OCDxavjBQ63d1HMTTt+3ES}xDDef72M3pn#Oyr$^r>kM
> z4}g5el`S@^kH5(&OEv0#w9O27=e&M40(ds<(9Y4|#~|-
> s4fnjLZa!z7>*QI$R|jwU
> zxk=ayJj5KP2`@;h<sBJemEhW>S>#w~Sn-
> *67<VSwjr`;;@}3bwCk;)a<Ra@k+OW*)
> zMN}nH39W=W{t{iJNEyR@%!CxGvr|?0r}P*}@GOaXAKtSiGpsaV{`N4NiI|gS-
> `_7@
> zKKmQzsZkd4nw*2*C^&~ik%oZTVx}C-
> 6r2;gNnHYYVWoOCcTN8CYl$OK^2#R<|L#a~
> z7Cmm=PdGT=aOL$$9s%{O%Lo9;4ddLItuetE)}8*jOi~($UdBRuCCc=g&!PPfIe
> M<n
> z!;7JWo+-
> zT&sT(mYy0<?@gsp*+^!A3ab4~w3RA^mJTDg%hli&4kMXKb*5M;VScSga
> z!ut*z#wQ+}+vnwckDY0pVi>P=`S$wF0#2xM9;T?8smG|~(5#nsJhh+pi<?3v>I
> %f0
> zM|R4aB%2airLH(<AcR{jWRS1BkX%O6k&~)vSrLN(4?ey`!)JVA$8U!teSs_J%hN
> gq
> zw70{b*D2OhpQk%({3`-jX(Hd!lrPt)#fK(dixF;U2GLtBZ#F!XNq%CAB^5wFq-Oe?
> z#;`DVizg9p;{njpjfcXcA8Dq;vRaJk?l_;4o&ozSkIAj7(V6X*S0oxbhJO|}BcO~1
> zXrrm_p3i>^4-7=(z0Ut0-
> %+v+8q!``4DK2*wT{q`BlIwyH@ezwzUyH5VRgT5hWlAh
> z%ZKy&sgcv@Rm&nlJ$$h+^vM6)E_lmCi*rjwi_z!m$Z^rPkLZ6Wwepl;r4$M=lJc
> ew
> zZU&$}k-
> *A~L(UweD{=}T`vHWDqQMd0B;~V_Vl366@E?9qeuW7CX(bCa1h=2;Piosx
> z(>o>7JSoxKe{jRJAV7Bb4PwReJ5btW^hG&rSz4|$rr@rE^avMPj^k3MxtSEliSZ
> *(
> z;Y3(lV&{F4_><-6j9L&soO!K7a1nGfgtW|`EpTCQhfhl%44uHOfBq~I|4F|-Hbcf0
> z$3B=W907sQl@Uj)lrm!p`YrM2&vfxz&&!j>VPV<9b<AMznY#|G#h@S6KTPoe
> h>bl2
> z7i7~rgb?A`CoE{v=xSQJ4Q-
> {|#oUQ`idt47tgU&YA6e>?zyE}Y$T6N!ANe$FAIQ|N
> zAI^kzL+J}1DY#V!jet8rf*S=+Q>}?_syw9@9p&}M1U;E!-Q-
> K?Dyw=1a3n=lLPm(I
> zZpgu$L_g7Lx?$3qPa?xFzFdgPM%8rw$@Ox-
> MTg)mLE_X&0qLqTPvlbu%DxW+y)v5&
> zW_&Zyvc7!WSaG8wAbisNLY)^vid5YwiD&ZgDZ}{$GB){4d(qdTy<+&_AVaNn
> %=4L1
> zK~}@%Wd%o(IGLWS#a&0^?pghDIA**~Fdz5LZSSH6e!0w9)J9Vw7o7<4Hw4
> wzrlgk1
> zuSNEb3eUXeSkEj*Z7yxLS)OHHQMMT-
> z4~AFQa6(2lHmZIoXy)7UhP`hn=Ei|WL{AP
> zDIg*8ZksTfYUJn#rXlP?ao;6c{owWvL&;tIez62n1q%~zM6;B{ZD`g9`@k*o-jNt1
> zdkj{0IgjZ~ozfj;WoMJ*5z02j;ZHwnq!7}Y?i4ATLo%AZugLu+e{VcW8QN@Q$kz
> |3
> zc1|_<R6HUTS0KeuSEj#iv{edW=4yGl@1?SFt)#kUK6mein%Nk&BO0-
> ^nl?N?99I>L
> z6A~utx+gi2*AC8dG~kuK*4SwY_C2z-
> y4dG3f2e0y^}=>`G5lqxEQj@4Nc~MLdV7~I
> z5$)UTK_ry_rHN}QVw=E;m`e4d`2H8@#4hDQac2KNVlcS2VN!4eN&t!-
> =XRgsOs7Ck
> zZh~yPrCiJ3(O4ezh*+Xj0`ipYvLm}$MBS^!`83&?ICt=|FAZrc%gs(IgLprFaMmV1
> z3#_`Q<feFR(GP$ge@x~LFJOrztz`7c$EBgSiqj_<g=|RzfAK+Dc2PD-ZVe6<eij?J
> zq=aHC|F1DFIX3=28p}`L8tHaPmrt2Pmqx>vvb!W98*_*KSY|39OAwvlMniCM6
> GBX5
> zm562?Gj2vVg})a3%qxUY^r&W97X$x=vO<YnS{=aCQCVHV8FoQ6n@WbMby
> R?3`Ae#T
> z26sl3&AgpU>y>$Hcey)?M#1tUMrfFXOiqx&x3#sRTP#J(pWxE8OpOvf6$OI*U
> %b|r
> zghPF?ID9s0#-
> pc7ggFQZTlAOrA0owLG^g99ey=(<9D7;a4hsn#W>n*La(3EpPnF)p
> z(tpN+7DB3Y3%thWwLM)ofZtOIZT)%tsyJk{)F4vW=f<@u5jY3AFmj?}2)PRS_pz
> rq
> z0J%4&G4^t_j(=18tKOzIX6ua4_^a@7<0-DqFmLsdk!wF-
> L@AWU9KfNcyInD|rP_4F
> z)rt%4sI?=IjW#sEOZ-)JlrE_(VLRYc{U4`L=O1Ivm04vur7`v2{K7L-zjZp61hzSp
> zG5t_sqTFU`wer-
> QBwwJ?ZjOVvoV7{_l;Dr&!s6PKUB>3NlsFUjU?r19j#^WbO|q?Q
> zx;+1*$9{Gn&~dk!6#Bbi)WaD4fNsRAYWR4J;?U})A9ZGLFT9Ta8ZpPT1OCK)Co
> b;g
> zPe<Vx{SJ<p0soH$h}~4Vrx6Gn@&KXIZxKA?+o(`IwL;L_kULD<<SN&!Ea8^$V
> %IhL
> zgEa<SB!PbOu>;Wg>%HNJsTcPGJ#22h3<9}jy+)NRjI_ePlf+8J$|8$IyQL1&?i)6%
> zoMb0|^g>L=-
> o}Yp22R?xtX+3vPs<Ek{{fn_eT`>AuuujRD~4Jm3zhT=hijEac0o|X
> z+I)-b`t-
> Gg@<$dxP(hFadOB~?n{eGXOINavl5f#ZV=n|%DqjuRB_Z3aTS`nFiU`~q
> zdBtGIJ-bR#+=+()JDDQcsi8(hGFc8s&ij*w6%WMQf?e0G8(iafO0HRFf-h4n;la;y
> zNW{+x!HCue6O^dd5~o53`wBf1h46i_ebJ|Q)3>L1PPcfRd0E&{$u(#s+OThlXTI
> R+
> zJf-
> 82;zX6}sI&xKxdrk7)+0ivU#Ux$ISWo1&ovF+2_(|xZ3{Vg2=&E~Lx(R@sdQcV
> zTG6u?p4*j@x3rEByjYfJCwuq@bgE-YH2w1>5$H30i_M$b6~tt!bn}XnS=HfR>-
> &yn
> zq@`t{#0$`yw;evq=G8o4czgL|xBC=K(dA+RrnC?eiq(96I2IlyFP>xhPiBUqO522l
> z^AixopCjRmrVKesKbz+1Zd%~M#k}Yu@Z;>+J?tLLOn2_IZ^jqyR_^Ov_D_x{Zs
> %}~
> zoSrPdR^Q~a7(c(fvO{LxY1FgUDV5XC^KZVU)+i#SL@nw}OYECO;4joq1x^2mm
> eQ%U
> zKk*zf@Ad8-
> Ja^q><tZc=63sKm!p{twTvX>rAn#7<MN3O<LYoa=3dX#73U+wmenj3d
> z+_ViR59FFiN~0{II!vF$vr&Wb?o4}~^|>hQvkynkOii1EvqU_?(;9?#iabyXgfjd^
> z-
> zVYHkKAc;;{Z2zo#fG+fC?*J#px^*kXTCAd7*pW3P<FkmbF$v{KIXpN)Xj{D!DbI
> z`)9q)ENLw*Z+jde!H_XpiT-
> Ml@pcRsR~b{J(qnUnl4Vr7B@Ye1gWUdzw3<*ZZ*629
> zmqW_5tv%(@V4_whHtXvW)R?cVMPZqWZ5#}Li^$_?$GL7`w44=^j`y>`{?laO
> _q8Jh
> z7?^@6ta$z_2%pBtIt5YoRZ_0#yzcOVv#M6K;{6Wpw?$V1f@y1y!awXR5VFA^i
> ly?=
> zRAl--Ua+@DQ`g~Si&dh2oSjcomoCqfK-
> uK!wfYq)yK^3=9z6tkSy;j9H9}Mq*W1^>
> z0nQat5O&WKT?j)N#l&+ol)D7Or^#5{wDe~{?ho<_d2?*%{CAzX62kokmg^363
> )y34
> zR;SDT;r#JgqG(rk>*>>{)Q%UDk)dLJmP3fQ{`OC&@ah-
> ^O2vxQg8E+hIQ2^K)MRTc
> zp~j=Cx2UJimdhSLs*ln?w|v!!d?Lo}i|x2n)#*(0Dfz|myLU*7SHa43Xyz#R`cN*|
> z-Ee1A{xv4fhaz|AQ`V4IRyfXQn91$*a`}Xop>>g*zNwTH#nuKJC)r3r*C-z*v^YC{
> z`@KP}AciuA34K{)zOPr=Y$O**TM96@g-G}7R|2g;X&-
> 3lq=@dyXnSc%DFO%Z#J&9r
> z(M7YSfco=!<h{9@(k_Ki#ivQcQR(EVMR7?Yom#@I7q13)Gg8)Sr6{8LG++EfgD0
> wh
> zByyu-qb|)nx<V7?!)<U#tt6{NlukZFW;d<R)Pz@_-
> t685Fow~eklACZo08L{(Yy&Z
> z#|xr*)6O@QJ$d42*P#kx1s{y&TRI!o6$3RVd(B#8r46@|5UGB^`Nm-
> xnSQ6_BF~4%
> z?<Bt7=pPft{e2flV8)Je8RVO4w%-AF6)SVcswJ_%6{~A0dF2|H0iPIom-xibFB&l{
> zuELYdRb6B`=Dvby&5849HWY_vxXJwharh;HR;lpe0A6L)aKtn~sbb;#gS;>saj_-_
> zb)Z(M^2e0@@SLwCxW7e5BCHjDE_-bD|7w@uR~Xa$I6nzbv5_yQ`m-
> C?{jwUF3;~i(
> zqetR1!MF@T5N0I<UOq=GUa3M@G8@B$KgZG(FPqNAZm8W?M>|yrp8C{b
> ^c^|pTh>-_
> zpO#t*8g3z6V=?pgY1o@bV%7=le0I-m3;7V;-
> !73feLBRyAs%Njs!#)dF`ui?K#umX
> zp^VtjYKQk&o0b5Kr~D{JYS6CBgP{`1_hvrMo}%-
> 2I|z<2<A3gM#~5X!c+O@Nxs}&}
> zoP_->#T5KSg?5sGnQHpu7P;rIo-
> DEY#mb5A&x=Bh!A*4F(#X>B!5U$NpEK`<Aa&yb
> z6f5hipLWgwNZ|G2_1|Re7#~<SZL6iZ?A1%EZ(=^SUCiTB42mtKXjn%OV)#_VR
> C4m&
> z;;qS^(oNaX6B|Q01#R+0<T+fa`*q+kQkJ5qi1pDypD%TTetV}KHq!A9@(GfDvZi
> 3)
> zUTbIHd?96KW5oTgfFX>oY?Wc-
> f2xz6H|sp<%nT^~Q&MS*1zaBZc0kBXJ6%?%th{rW
> ziPJJQ3PAv&qH|M$n8D^$QKi|eSug6QQOc-
> P*cC@LiKS3PovoWo^@Fi=@`m}A7#!iN
> z@^k7{okx2Y&|gY6@(-Em*PlgN=XT5AWt_^WB?|q-
> N@klNTNX46DvDkhA14hFD}KpK
> zM8iNf+82lv0T$0x8r4Zt!UEI<8;_anLI2T2E`z_aYI5RQ?5b<0cdSM+%6;Z}g>5~x
> z9taB?5P&C)Hv*D2@%ln>SNhXyL;X0Xih`CKs{XQ<hjeskfUj2Sd&+L^W^w({Pw
> ~Xl
> z9P&u;fIZNWr7gUL$JN{jo+6fORD`Kt_aPBrA}(aOm9dM0{1yHJZ3-
> tr=5#nJ+BN`&
> z??T}F+Rt&Y>YBs30q$EjvF{xVIqhmQK|0?ZuD-
> isEe<pE$^8O@W8{`M=19PzA}1%J
> zC-P?s?=#=3gR`<+=IdF4CZZor5m*TaS8|oUYx48<;}lrYJG8{H!p7p5pB-D}H;`P`
> zr0(N}>N=kOQQ^aZ<LN0$EXn%V%-
> P3ng9r|AN3c5zG(rHQMRUVpIYlx#N+B`WM*e0M
> zK?H_C5-BltC-
> HQ$lkXk+C4{=MO&X1#TNusM>+K#Ue{A2LIfuuU^m=pQDnHtDjSNx`
> z`33c}WQ}AuL4h~36CCkt?o3|NVHflZq^ww4f8Y41;$GTQ(UW1C>Yj)}Ag5L@OZ
> p3S
> z>(ZC=+?8*!UxlA54AzUfadj%E-
> M@tmMf7{ye?d_DK48@Cl+966D(B?A9v+Y@JRlS~
> z*aI_%>0-
> gkP^VtbnkIgX>kCv?suc!Gn;~ad&TPqW<k$DbA@8M&w0wv%t?*CF{0!Y9
> z_M^Wwt(o}whM<-
> g_n@9vl4^lGM^0uarC=JXSpDrGN5r>?U`blx_Yq`Y+Bx>A^YYPY
> z1^zbHSz5WzAY%`wUhUw0oljYHx7)&bwgU6MlT9L1zcF)0)aQCGe~;s89H^Y$>
> (3M4
> zR0sMOwzBQ**Ci9&O>42Ep_8X<-
> BcC!zvQH8CxCkMLP6VA!~A8c)<An~r}@@}@-~ZD
> zda!zwLEUo|*JZgz`I8;#V+7CK)OUz}?ZWA0W1CSGKbZuKeiS~;s)4<XgiXg0Sm9
> ss
> zG-Q21ZCFcXy-
> 9c*xM8OA8n@t(kFEnWXGvb1cUA?(;%m9?&s#rl9$nz{_$TkWUJ-e+
> zJBc%QD^G8)ukvN8Yo1zJa(I*XrBB(}Si@N}8tc+kHCR*zf2U7?pe*zPdBWeqF2
> u=$
> zAjXi;L#ho807e~2<U&6SqsJu|$f~o;tR0?`R)zc><PG0EBI!arJbamDKPh_2MlY;3
> zbhuzcuDrB)dn20<91dWM^+#2WjE_!_vGNhi%F^G`p-9z7-
> W2znOg?WncTilHMVD24
> z(W?=x#NfpmA^)BPAeV=_AfqtAhSq^YRL%RS7ak0aW}iq<6edGT6At11g>l_--
> Kif?
> zQ0xD>%eGVPBvd)!tL^bcX878&`0Rq1Gx)eD&+W>m=Bv=fu%qXE_ET*Bb5SIL
> OD3NL
> zvH{6j9PzD%?T-&c;m^w4I8$0in}!-$ZMggO2`_=VGsr%7@o-
> BXcUaTJ*8*cqg#<4*
> zrF(DMKvf)98$_Gm)?#0fDbt(t4x3$tIxEO>C6Vcm)>@jZTNPHDhz_{MV$;t1&z
> a7~
> zm}oWl_Bu{AG`0@w=eey9hc>C!ws4pg&S-
> XOUGMyKi@q2m5Ar7#|IF+2T#hF>F9UGo
> zV?QsT5P3?HI(2Ezbkw6}?-
> kI@XwyEcCh)iaseBRWgo_m}B}*EV5{4`A*&EI5w5OU6
> zQcWI^W@4nuyTFC10{>w|{b{%-N<Av1Mgv~O)1~rj#s%3$jY28p*G=RLJb-
> gl?xz-`
> zaP9_iTDpjAEG;ye-
> oqXBq&pQOJ=y%^CyM37YaxOpLje?~q8d0MIwCAs5rpq}=z|;n
> z;TZVX1V0|P1II_g#Xlc=ZBO%6*Ld8e<{$2*qQBe;-5u5ldxjFk^S5rlDFr*=H1Zi+
> z<XKbS%a)pU(qU#~IE=_zXXgc$CN>9JgI#kVGTt>xS}I#cDeLbSU`R!Qv1w+1so
> =nh
> zZo!IN_~Sb=Ygz%jcY@lryQ^%*ZjXayu2Q<<XFwvR$rR)#t6Z9;sueZ!mE~yqYsp
> NM
> zWUZtbYYUlD6lwaOui3v%F`~)gn#nYs3-
> lACuoywte?{zw75m1*3IV2Bs%ELAoLwMN
> zrK$*+$fRR#CZX8Y7R_M7ih{Ip?3rdDL3{uIN8CNf$o94C!d`8AwQbv8ZQJH*+qP
> }n
> zwr#st+qUh~zjwdd-
> `?3L=gUb>Qh!v9IWsaw>PaOtb&u!5(J?q%v=UsiK0BAI6ge6q
> zd+iKfEk@U}ez<BzYM_OJnVZdb8Rb+@Z+q~A-3o!-3V`jNsHjy6uolewfs0Z!D)-
> |W
> zmoRJy8kA}!A1VaEA^?-
> Kbw;3$sxE%IE+tmAZf5olj3}T2j{AM;#n7D*CiHD5|597T
> z-
> +Bw0+Xe4lJB)#b!~vR><Lg9;mjvp_>^wKyOGBQf!w=!tj{H*ytkU$|hjM=NNx+
> +B
> z?gvn5$?FY~vV_89X_66<h)I!IkyVkkm5KgTt;qyR^GdwsA*z7Tb01E@E18l=X&7
> &o
> zCn{1zGvf1aj?}6`ucWeyVkySwNhvjZC41^_0}&-
> $<r0hnY?EUH93kPF+A`Z!`XGeE
> zQj4On^p2CmlO&J|MYS@uK?=p{v@N4y#q8Q?rDB-
> kiLKi4vhg76$%mIK(sGEeSx!Dm
> zF_e71YSOp@)>LW~>Z-
> `oM!%`NS;Rm=YO~0}T~KE6R`ndWP7Tt5V+TLsN)%vmYPU{l
> zurg@M+Pt5wjsVyTN-
> @3FZOoL+!OVU|ev0SVlB}{}vj#%H^2y*txeMas@bvP1hG1^!
> z7YVZnepcOEEwx%8uhI<akax(3K&W*<TE|xh?po#z@Ot$o&yEz5$~fLDBgSUs
> $NtE_
> z45zPKo6lRDA38$3ytRO6HTsk!!CykeuORSn)#0zAAjd~_KC(&m7l{c5q7kVA*~s
> ^q
> z!PMWor8-=0aaTN^yaVPE-
> ONAGF*6A{S|PHpQcgZ@4gQr!DpS5gKBmASft94TTN6=C
> zR%G=h_QOsB<AbrykBYyJ0Dz(>Prkf}9e=}FaDHvA1V-
> $or6{OK2ddJ>6+=yc(v;bg
> zyTQcFEBe#WOKRzqx3q~b9%l;vOHEx=$Q(z|bfLGoeG;@Q=g>{TNo0<1L5|u)
> QJr~X
> zD#QoOqiB&XQFu@0-
> f(F?hIiJl4MISnpXs3?%A${!0*3%!NZJ#p=34%ofFlvIY=KP<
> zg$Zm#`?H_Q&>9aQA+^jWtn6~(U{9^j3J;IMjlUy{6P$@ut9q}<?kQ#I;kAJ4Bu`
> Q6
> zX@qDxfwErkb7+{TYpo?4A)HR_(<AWe_b;h<uGWFW9d}17YY&=1?#KZuDbab
> XOXH9^
> z1F1q4cZZ5kpOx}xWN?kKz>EH?jn;Z~_OR@}q<|sW^z)-
> M5KT!@Qbk1MlN_de8%pGA
> zx>?fpM(na9;iaM4r8`4w<tNQ?KQPW}^6|C+Do#%hCgBzPh3sM#+p6M#p%}Z
> D%@qJJ
> zr1?Zhv7D1%6OeL5_sAsA2{i&A&|erU58bV_H%z_$9!PNHaLCy_Qb~bB74iiYfQ
> X+I
> zOrY3D(Jlo|dtyx4-sxbwYU#?i$#iDjqlDYLS{CLe69&;YY@eIgzYle(b8+@#272ro
> zwKGwwn~Mui=jX1uOee)mvKGlJWpz?mlzB-
> i$?6rm@f@|z86PX%&LnQuPA|fFWv@)$
> zN8NDMx+{v!FeNl?X*AqE8qPJ7G`f+_RJ*gw@H`95Bwv{}_&4Y`vR`@UrPx<M`
> wAlV
> z&s&DF(AKv9K$J2q#OjT(R?u0{1;Ffr_S5t$`Rmes$6F!WsNu~ukoRoJa<#&WY6
> WJB
> zU}J-PrsFmFuAoH80X`D}n|bHE$7x?N55_P~?v0EOai$6}?ZvDzrjrt4Jw(5==vrYO
> zAWBSTL%j4mxEVRu*H^~}3z}^MA0LCO)u_4`1tS6_tJY}Ow5Z#&Go-w5+qNp-
> hvefj
> z5np~a6DI=Is+Kd8uuPqy{uBp_^eFO+4CvT-
> 8@}XN&TTP>x7CRtP`f~x%!);8;C|lO
> z6<Tu>J#8uQk7~&kA%!;M@|rlF{2XZYT(i#JvXpK{^WV%mpXXZM&his$5|iKn3
> tC^h
> z&NWxMyD}B-syK={b(}m_b<lZoFWQ5p>A`lmIRc3RF9zfcDPbfDml|-
> &OSyt<D;ZDR
> zAF*q2l60taAWze{)xSH}(r;geQVM(p80uSoyD(6KI~KvjjqsfDT6R=_5?V*S`Th?j
> z?2Y_0eE_PehH{hI2#rynVbH_i*SY>Ve$>xy(f7=a1c$hVo}WJvu}r*~l!N)qB|c>(
> zh%A3;6j0AHT>R7@^P}n&Innc@zZFI#S^~F^^_a^9C)!-
> WCw=ujG5o~3=7{zp9nD4k
> zjOYCk!ydgrH|lR@*k^+}?T6?RFAp5y^!56qrg!`x-
> WhI#nH>K0q0xWO#A$1|_`=2Z
> zv;kZH_v962TQ!?DRvQM#1D2X+$yFTEmFM###Gf9Vo$)^81UJqMa0l75kn!1}I
> g+a8
> zLTAm`Lb6Nr*N7VFFTZ;~t>U?1^PxHVK2_T?tGq73uQ;n}w``+oY1DF!oVOszpn
> ~2Z
> zh@lnXUeT5sr?G@=Yvf)*RS3)-
> K+S%i9+N+Lsmz=W;_3dT*uwgfEJVcHRB??bG!ct*
> zNvHcYB-x6H$qYJTiIIqP(PJ#X5x-
> ol?e2$hp7Q++e%b%NeV~jt&rVLWV<h5Y`KevO
> zO%l^GB67TPn>=_r1)8D8zj--
> OUhRSKYH<4$?wsX#5thwuGuwoE7^x+FINa$LM}#;D
> z%YSsfnm~8y%gW2+xKE!@@i<a=H#_Ys4bo&zHve|N^4jE9D<+8~;=L*|Pg&G
> #@DrOR
> zN)|4h+z!jhlfcXDh2b;qKz?GO1$U2j6!GVoUEx~mvSX7yx*|)#=xb2zq$!f8@v8I
> |
> zPf>h+cTu)i!e`uW`*Qkz8y|skZ%$$anVNbbglq$FC3U#ZwBfzjTrdeiDqs<TLTG4
> e
> zQA#`<xeUcLWxx24>yj2Z*<R)fcb?zE17ujjd*?_;xSizmO|pq?;Um+Ic%(YE9$FZ
> B
> z>x2KH5n<HSr^D&8%ppqU)Uv|fCcWcoxCV}w$-
> Li#M0wWMuYkF%%90%;_wPf}&zRQU
> zH=lC*YQ}$rNyU?pU7cv?)<Iw?FDQS81)g@TBJ{D@`nd%t6Z;AhrRnofZ$`B0sjx
> 7x
> zMqBTj{Ju1^J~%eT`MEVtKftxgGjJ2Li+={=)=$DmMSr@t>o#yJ5CMNiSCzmbt{
> A84
> zCy)<J<6>4f=GTXe8k3LcD6Z}#D|7FJ>P>WZXKarlx}P*Fq*<#bU&j!Wk>m+Ap4
> XPL
> z*?6eWYAWyc8Yy;i%U(kAnro*$S<rEOR5v?gI=8Q`7tW;`Cg--
> _k8m@xbt((~q_X(s
> z`t_7sPIP!)Jn*ZG)_m*`PDA|;<f7Dk(fX#MvOs73?qDFW>6gf9;8fse!g@P}$QN
> #<
> zCxi>;LgRHOWB%-f2`2U8p=HO2#QAd6(g<2bOe7Ie(14h22!0*anz-
> S3k|Af%k5PX_
> z6LOdaE<npK;5d?*NUABwga#^V3EbR(M@o-
> `d%}ia66s64lUppRpVOU;amf5@PoH0d
> zvlFSDPg(9)E0^rfQ=-qg?MHCu#N`FpNyXIgZ|yU=zkCG-P-H5Lr;x6p-MjSOi%!Ji
> zx0#hv9^Iwg*x*vN0-I~-b?9n^C9(qSQz(Kn4P1#X9CU{pxO-
> YXu=G>G=r;s;nT)Ln
> zHzbp9Au*c;blNwvjISXS188(1eCJ(r+rtbmd)uIFUr9HJ1TFK~J-o_a75nftT;-;r
> zY6?d3s8Q8iC1^m6Ef*InTOffcrIn9^iiS`S3;l5rnJ4hs<-wdU8{Dt3+MTp6*IyH%
> zw7oMu@4I3nBg4CN-
> ;x?kJf}UgAAO;<GTX8~&<sQNaWkMQSkWA!%>1WqEA?{yQSZ24
> z7J?W=97DHe&Q;A+_f_+|d+Bta+wYUH?4`sUUzCVd5_L4XI^9$nyIM<H>pI<H
> _2g#z
> z#-
> {S7#zJ@$f0k+LbQZo|+`@%_s@@jcm5+}eVHv<mD(|m6{P7!w40s;!vg9M3B^
> N9>
> zYwF?B(#{f6SIsa^$Y6)*0v$ba%C^&6LAI%MwzRdaDgb$twbeVZPg<hBQY)g?%
> q`rQ
> z15ln-P|BntfQ0bkk{h`*%r^)C{z4T6T~MR8-
> l@Q_j`l&ej}3NlxS&!&LJ2WyOPhPU
> zS#iblltDi|BDHQGwj45e+hS+EA5zI`{cZi6sm1&L9NXD!>9zaTY~i*GdiButy4gtm
> z)*Z37x#4@`$=T%5wo_eg{Yt}m78yU?`S>m|4fNEEKj0<$gbIr#A|0oiyk~ZAD|
> OEQ
> z7!aC|9#cpolP^(&Q3<OY97`-y?2JZ~F9XfQ#3~*BTo5vd>>$v$u)N-
> ~<vKMA&FRek
> z#95q~5pVn4Ai^s9f;H-;>{Dk9AFRAj)iqUFI24!J5nFa=25OVu1{xQV8kU~Qdgf`g
> znG!Aq2#!IZ*Q>0!P|33_H;-9KtSpYqGu&o*`xtM)tIEROcGFhf(97_A1lIoKVSj3L
> zSZmo_)%Mj?TFf_e34m;#FXMiH-1N&ixJ7H7_!3nn>?-
> s~kQ)(dP|r5JMS+roP&!;b
> z7u-
> BC%Rn{O*m^i*=_X^~%#%Z~+rg99IgYdchP2fl%bzWf6GR28nO}68Zd2GELC+}l
> z2^V~PkC15;$jEkjf1l{-
> ZAqs)r9V;2BVF|e8sVGDZ3c8V%Ju0B^SgR%W6EdqCE#?G
> z(J=AQ5Tz3aQ8uR`B`M!ss~FpwLxYd->=B?dAH=jRN0c=Js{hi|bdpuf(2CrN<)f!|
> zck(c?N9rc&^GmCKdujilLB|``<Mx5I7KjbPU5WSUR-J3(m+1Si;IH%;gLoqBaXaYg
> zGa-aL{7f=%9`37|GuNa&5025?c`-
> !UU?jR3pLdK{T{^r_LY<LPN|f!NWOBzCR~xX0
> zE87AQa2|xfU2b640|rbVMJBe{MN~wd5f+G11<nwSKB!4_$=LzCM3G2SR%x
> OY$$>1n
> zk%c16wTyV73ol-
> BBh%J<V$kVV!Sg5nklfg0b91aGjL`@MfjwM;O+sEtz%9~tuMd1H
> z)8(XYzYB_ig6<iSDu$*2*4nX9u%wSCcTDoZOdNM|(wRQ{eKi|7E-
> &+7u@Tgmofd%R
> zZ=89=EqkUvI3AX<+mNz({GW=4iriBBH01ZC0y+7h)k_jKov}`OY?>#Oa2Z)xN{`y
> u
> zPg_+zq0z5>57iw4+cMjp95lhOrcRdmH)^cHt<;BOb+!#vmCzwb$`Z6|<~R{}Ag
> VCp
> z3sW_Pt;)+3M+-qIq>cHFY>o;ZsSqo`bU+u|fIA(qLgC-
> 07*l%OG7hG~x@|pkjyLDD
> zWYLmy5<)IDg$!5X{J3~Xr*(fcr_$cI8J;A-#p|5udC(*;ov%s9Pq)Lhd#>5r()<E|
> z)5j3^c>dWpP;3Z^5Q~E1D(*RaT_hkBKEH_keq35#6XI>x<sN1g=W`~xNG;1jA+
> D_Q
> zXzy4*t4C{(R@u62G$xk*Gc8Ug&h_N5F8pvuuALvX#scb2^<xvp01kEYbL{JND
> mTti
> z1;*R+HfYnlxykM~TxCn^Q4o?0b}EH&7jkFoLoT-
> h93vR3W!vQ}SdmxZ%IX$iW5#i#
> zkJj+5(;>u5$~(^+=NtQ@U*=KB)D!@q^oUEa$C&33_r>AQUOgu^OI-
> *0D<(0L`dLl0
> zoTMe6oo>CrbcQ%p?I(6t#`DdC%`2Xh!*#0pn7uy{)fWtVXX2Qfca~;M;6*Bt4f
> w#R
> zwVl$N6ykmb$*S5k^|yzb7O@r>y`qo+WN?Wm8AjC569mgm!y;Q+U(1elOzh
> @+%%Pr|
> zEB!LmSlZg&Yl?oY?j|;y{?$^knrR^0j7dOJk|X|JKaZPEh@)-ky(4Rat`J{eLhzWz
> zDw~vz<K1&RCYmN%XF8>ur8UW&*V-
> ~EH~ic9YE^I=U^v`2_Si)B9g8qmq_v72^6AHd
> z9QDY}5;R>iHX#X)$O=~|9_4imGI0nyD^z+u((iB(n8=>s!4P!q$svCs6PQ4!?GaD
> q
> zzIu&`Dm?{WUZ$!jhJZ;mYbc*6hjO>!!~$VA&%bLG{Jt})UV?gDf7|6;c0If5e%C&
> Y
> z-vevj@VuTuZN@e{Z+ZW${bOC^_4wx953+o}T3+3Gvs+&MYiUg$p$hz1A4ul-
> p{F_W
> z*5XCnHFctq@(sC2wv;Jpf9dGYkxnLWg@sChvWoeo{L<Vy&5rOM$5PumOrNl
> UAdZ9O
> z1b1o2iObSQ)zhS3eN;V&af0cfTA$LW61$XUc}Iu_MRg)C-
> 8&C2F=mC)b(Pq!aZdak
> zAtRX+a)@#HU+T1$v25g_7ci3klfg6J;r&4Px!vh-
> Q&U;<2jk#|$A&m|dn_i@`t>oR
> zShKaPMKG{S_C~$?PK_n6#-
> TQ6i+SfKVk9tmgpGQgw$InMBIk2yt@qo;N(IyvZeI7D
> zg=THfgXCY;=JE)S&@&RkuE)W?*q}vWsRvztYD1D}FOL~c(+ty(ep(=H!tMrE?!A
> C-
> zewyGe_5zQxm#==*AjL1u7TpKD3|{9+l&Sg#N>SOS3^aNu=t~R;hblwP>sOq-
> x9==Z
> z3PXPE@%>P>sj1GtMtmn|?12bkQ$fa)e13QS4iBs+s?0`8JwVmmg({2MerXy%
> @fWU9
> zf-
> +2JzPgI5sc>8DFVB|xAb&i(ppD|<QM&Jx3hk7MjJ%W<LfZ*LZUH@WF1%cK|J
> pjL
> z-}+ja&iWcX(RmMWLDC6u*(J`2Lf$}c$y<#24V!Eex$a?wyfjSAuH68chnIG)JR6`2
> zfLVfuCswgcqnoQ*Yrv^s@e!PrVR-|EE(1$&duJPGDnxQ1)9vEBpWK{kiX-
> 5hVTfMx
> zu3`Yhy&Oi%<E2#aF_d1__IgTbW%twOcXXuYd|S1L?c3|~A5(@;r;s7Ip69dcYQ
> Sc@
> z!Khtj+tQXC2PxYYmwK0O7nKw3H|KKii8R6FrHe8R<qxQ2nq;*}Iy>&9^|JuST@
> KSs
> zy-eFoQ~w&ibv(=Or*bPgsU)c+jS-
> ~5xv|5!M)~C2=89$lwK%E``B&zX^dT@xoGPyp
> ztLXazTj!UoFoEB+N$hu{NlleK-O6N7=)_ay2?sVoX&$r?IJc187g?~=lUc=F)$T6g
> z#WP5E9Y;Hm+&T|*S;eUf@W_OS1|vj!f<whU5`7FtqN{uO!S%64yeKJ^k!VX5
> <I#tV
> zFRtuvG}S}0$Ag>lGCh}8_gDs2TqU%bAk5K+FEW#T^&JldO6Y<eXJ;~tj290Yr>S
> n}
> z2AW|B@)9@h=tpMK93$9j(wmqO)j7i11Fc8p4b+JU;Ev@zX~U(vL(@iavzn*!
> @MPIq
> zvVgs+sY*?wPN@gsQsOj-
> l=rQwteCJMuq{*!$@_V`i1BhI33j$Ztz<V!nluy%ccXc^
> zMLDxT8^c*jjgFKz`ywHfTz6%nu4=9@13Z(|$=nBlym5$p{<)9-
> N$%Dg9i^jBjmbDC
> zDXh+mK;>5MPL+<`^av{*y(bluooB7VOM=>M7Y{n$9d=lT`k|_*Y~N0kEwpM~
> ^73j<
> z(=^^TD3>ZN$VbPUB?@8gSgJMJ@1V8_<CHl*jE#~m5kfkeu|yEXZYc<-
> ?nisLel)q@
> zLDHoWO%N1QDXS6DC06tjpyuma)V)NwsMAvYM6FtaJ8M2}K4S+qpP>2h`Vjj
> d=dR}M
> zwfJSV?vW#-
> gz^eVDad0Siu@d4VU0woYiSarqg;>dLF4EhBsjl_@|uL;2|7NqX};!`
> zx8S_tczmtrt|ZiJz<E&K7tNUaR>PC_I_9aMqoI94Y~PC1a0vZ@a$p=yNV|dw02
> eEF
> zE*;lqOCxJ)&!oI!TdM1fQM+OKBe1#8LDql%$Vm>hKTxKv#yl{&jN6vJ<EUez#y
> Q!!
> z+j(`|6(4j04fr;xm>|o~Bos--g&}u?)bt9F3TR`?;?BI<-$&GyeZ`_KW#mpf?hBF!
> z)ObROq&F=*B$(cOQTc&Bu}MxzTNqcM-
> DvL5^5dlSMnk&*izG&cz><#l7jpboMu$;N
> zK6x(}o8vL1J&I2EY55bK7kCMst4ibtyb1nJdK3#Enuf)LgkZXqayR&;QvNU4iQ1EB
> zxL$N~<4~?C1gJ0!IS{Pv(|#ZDO%}U8fT~Sctf~@IK}amBA#p|gBr&f)L|XnR66V(!
> zMG`H1=l!0Nf*~R4Gi*4<Bmq*pEe$Z%2A4)x3tNO9V(%!c_&j*u;YJ$n@TgNb
> QQCae
> z!sc0xIoz4IIUxt_vZNSkJHlc`-?0LeQXoFVe5mD&$hIGBVTizLJaTp+c>$`RyX3FH
> zSi5v|8~3&>)yaY=dRmnTnBjrH@P61*6XNu@1_QyP&~f+x=Jf&F)b8wM&o}(4
> HZF57
> zTRZ#Qw`hK(;3s*md!-
> #0_wO+(;5;MOLLTGNY7$7e^H;nNHuem>EaSzJfwBFq;QTPm
> zF`VN52RvCs)cGfyz5y(-VK~tAE(Nhs>4Wguhw`HMz5*4MS;F1z!ZFMBN8g-
> q6l<6h
> zkIMbB1J<sKzX=@_3;K#$Fpta#^S=Mx;rujW*+gWC*cOGRo^}t-
> A<*kVA49*#xc-^^
> zT4YjUQ{=05?iNe$R-
> O#x@C#BBVN>@t>L8?lBcM{s*d%h2okpbrjah9Zlrt3Pa&Y9^
> zHPQr9Q0GwpF}Qc%yFy5qH?h}<r^!p^1=p7|{q)dW0!XKH0#UCnlX%?%<ZI)34
> D3pR
> z!Mp^ZXWU=~m-
> PZv*rr*%(#btM#o1)s>@j01Hc7l%jXIT5+_ujlQ8eEkfqu>A5Cls3
> ztVLV};_#}ZFyUwqiAAHDXjJNc3tl>%nE!^pzSQt_mrsF%C>zNJKK&fMk>juPn%
> $HK
> zSV}QSHEg;Oj*hG$e=0h!Ej^E3uiR)FsH}sd_Vx|k#~oe-
> AFHRMBRUgAy~5!yen|gK
> zs^-{fmJ9ZSx{ttes}v@3;XqfTSLnWLdYSArK}VE9CyQ6fL&uV;-*1>Ie4;dx*&I2f
> z*7v{oX3M@uj_ZHuy-
> omh<|VB*6o|&PIG%<G;kN`D%ooF+o`Dbfo6y+vUy%EA%})uf
> zsTEIS#r>4VzruGe)PZ7_$>!0&%Qt(DfdOjIwnCi&PdOAr#4l#Ba-
> MyMXv!EImzT+Q
> zsmnBXxqY50qKxKBO!Igh9n<lf@!qR=KsGWl8!qQHc%|u@wBUI^Iooem?!oy
> W7441~
> zj#jr=mOsx;hw&xE`BES6w*R8x()apfC+{4`Tk5?)pbjYAo!l7CPEx%dpaG+C^8uQ>
> z_y|%ZvGu#9_nmGN|AG$dcNDs}nakjN+B?fz(sR%W_6yLc(VnZal*P7C+Ny5t
> 2vL2n
> zKK*EF1E|_Ab%aoy4nJ*Z#Q8W8ONU_}iH?&M5bgXrXlZ|trG#WNW;n4#45~
> GpsIF)f
> z==0e#^?hLO3qXC}=G0H;9>HW)*6y56L}^Q?6qFaBmv_?SLi#_7j^==WDm#V6
> >(ES2
> z`=Cw{q}|e{axQKq(>7kb(u{ORo-o6;yij=dUv*=3iZs^Qy)-rVQGr}f2Dtl#uGvO{
> zpht;q5F{4(9}Sl6EP9;_ab6}b(>lzya&?MudUU*=E*AfYNP<XzSlVtZz@RD&m45
> X|
> zw99V{xFHu-8GnJl-|bokQ@Jkl3)hlP>+Gl+xQgoo75#u$EG;ol80EA6X(=7QrffyV
> znv|XvIax$<N2n|iSlQ<lSwFt``)Vw7ncz`$3Yga@t!8t#h4?7Eh*s^Ye#5wXsaC+P
> z?>geW;UQqp;KVtqJEds9o4x1`vIiLLcMYlT3pZ^0hH*TWjUK&U?=?D6a4+79B}
> @Kn
> zPrWM+)L8so%4)~aZAyoM<eOeNw=NW06n!RuKs&XrfmIW?v4O?#^@0dh3
> mWxA;s|xR
> z5IrzpSnbrZo?$hk^gLBkIoyJ}Zk^<tVO1S^MDP-
> !Osq<)PdQQM3UxN`8NQC&b?6ec
> zH$VP9$&^&uApc_*_D*e5cAdp{Zf_0-
> <AsSq+B*b#9(R|@(?Rm<RWw|O!s;en4}m9R
> zui30MMQi^J`4_Qo_M@HSSx2A|i>U<s%bZW#E+>|XVzbs>UD643X)kWKhL
> Wc0!>1ty
> zM|FeMUD}Z1SG=8&>7}p)j|%<6$noN&!NgEFujlD$l~TYoa!zrv@3fJJOphVwP
> zMzq
> zi>9@GY~|7yc*u|Ka>!%h^JpLmfD%KB0ri#Wk2%DS5H%ty1kQcOmiUvOi(yNn
> a#;HO
> z@P6xI@qLxM$v3Eh?t|Sscal{iWc`W!iN~m2)bEIAq4zk6_890jzX)8}JFzrvi<A=3
> z_~JZLd_nwr_py0MMCHj`$W8c*DC!5W`jf;|i5$2_5lVz#_2+3Ag%5pPJ6*$HGS
> rNv
> z2~M0MviVzp24|R7#Op^!3G(t7F{_E#xFxcGj4Ir}De?Tcx(9l_mc9F7cn76)|C{o*
> zLqvjrLo;+77;(D95CJ@P`*c_Y!WBI752~DSn+@wh=?^!vTrrB%lm7fxFFBh-ZLy>`
> ze;WDwC7=C!M%ZVUOh%0LnSd8W=IFxKT(V-
> nmG~C?h2BT$4>FcofUi$J<!xN7?6wo-
> z8%+3&x_R$Eo+a)`=a%?p!T=t|IWKZ+OPM-
> PJnGj`7Y%m}Pnm!_t*3kSsdcwwD~XOu
> z_K&qPXjx3yrEaCCs7msxCFu%l8tE0k&Gh8h6<OMAAJOKK$SO*m{`^s#-
> ;!Hc_%m5*
> zoPKtw$P{Cq+f-
> Kvaf)SSDi;QLQQ)MFK=Eltukh}usGza7o~sM>vGL5?n|J5Ps>nu$
> zW@yKMj=Zn9sOIi>!pFSq8UWS6#Ei<!3zZD19Tq_reZoHATJ01A8<FL@U#=@
> UHbZ)E
> z$xm0-Q^#^!iK(tntw*-
> A`(pKQk+)hZsn7I+6NRCR`#}KP{mLyVu~yaBCBK#Un<cw7
> z;s!Z^eVhna=kP&G$xev5NgYe51pWwFFBv>W1Wq=+x)Wnf$_`=5cqhid1~pe
> RQ^Wn_
> zI1ZTR)|zsI;e1G~^ksjLP=$WDq#84EH4P(G-b2i;u{^+|6@Ii*nU(K{A<a9ywaWo%
> zsfe}<{=<lj&LE~&3**C~^W)CxM!W69CaD6i4BztY0`<}+Lh0?48rG`g<mu2{;JEX
> U
> ziV~IfSIp()kpf)jvxnKRjF%r+mN$a6$7j<<DeL38bZ4VAZq;fh*wSU!GlB-UdrRjT
> zP48hT=1S|qPF=?zp7&e7*1}J&Yhs?kY8(1PVc9G{9}w19O~SO@iPHC!mqWZb
> >j7Jc
> z_c0(icn!qgynQOC+QOg-&<UNT-
> a6A*GrZNtpH$n`5YZ5l{LieuYSaO}wx~6_y0O<<
> z+%NJ4fD@lE89YE{{ULg5F<w=&QSed%%wFaMnJ~2R*sLK$#dY1V5PW2zyM)(
> p(KEqP
> zu$`|9qUqj>s*VPZ_DJI&50Tbeo`VmG;hC%o?#}QV<B2uiA|x#(({5m$sVi&_Zd
> 8dJ
> zc1(#FoRgp2UL3ISMo}c25#`;zH6dDj-pv{B5~kgH(sbg_6fj0HYER}cMzd0F@fZ`o
> z7iRIBFQYLg2pM&9dfn~;bt=Ep?eo@)x(J@54I=);m%|OlfS9t;t-}71CDR>R{!;Hm
> z-qQY)CYdjQAIM6#SFq#aFhTHRx7ipIc%7D6p!Fq-
> %GJG^%GlTpt4Stwa1Z_%6(ZbC
> z05B*q8#LxMAt)RY%&Pi+NvurEK8I|C7#0C^?{Y9KwdR)9CN<~_Y@<)odQpM3
> =$WYG
> z6+o&^=wuV|b}BT14-
> Fj|eSm=)WK?Ec@_LCP6cx9kfl4@~bjeC02eFXl|7oyhj1XDb
> zwV;n8T2b|H7YS+-
> n00_M$MqpG>&GS?E_HHhBoB8_i)*lT)6En5qAFh5fulh=>&Lho
> zE?6Ls=DHL!Uep{R>$m0AzwjZa^RBHRr;Dxu0HM_OQ0rb9j1n>D?N0=eOwa=5
> a3S;H
> zGm!6zJUC{51Sa>-aRX-
> ;C`<6&?NGqdv4iGv@tc#$A_hJ(|Det}=>3wBY)p+MH$h$x
> z&6}0X1Wus#tzX^3+7IsLVAAkEH9g@nK?uAPH<^bs5S>$|1keHGv1I}s*5(MpZ
> $TCI
> zPmLYO)d4XBY0UcbijWfnNG<B_XA7=0uRW59cR^mT1IZt{Y8RtV#E9lI3nw3e&
> =OzJ
> z2xg)aa4J?A44kPK(j+zaCh!xAJ)VB>7>!_6Gl<-ZArBr~$?sA4GUm1Oz9Pyy;jw52
> zr%nVp_c`9iJ48ELVI4^QO0Uu?Vpsl6I$4DLvOqW%Ub8ge#iEmF8(N`EaJym`)|5
> Cu
> zVJ<+0Q64ehBUB+w*wmdto&eilz1#r~f7MI!j5%*IVO^n=T_BLBM69N?kkKL1
> <WHn2
> zW9ZCl{=HdHIRr(m97o%9a%jUL5raMc6DWBXI+pFRaX!mxj_?<JqNz~)8`Gql>D
> EVs
> zq9re^GXVyiSSH!Ec490V*4xfzim)Yee*_H}d9~t+EE$Zz>N{bAxtzLj%4sS^q(DO
> <
> zN4&*Jlp&FX?^`<46!hFI{EFgB(hL)O8u~C^XIkv$zVW%#F5?}Pspq{c^!H9WlSho
> u
> zB7eE2)#cx#Ue7U}=hs!rqAv@Yrsvot7pxyo+hj&)EjZ^%ETCJ8o5-
> ^mME_~`Pax!T
> zfU>NPO528+ZD))tdfb#KWtMC-
> Bw!48*edv7>%=Wc2r>7B$CfWmDY%#?ls3REVqg-r
> zG;y<FPF`79lxPt?*Wyj|?%Pmq5I&=|G!L!JfD!@8n?6VYvn_)w!%;HYQHQnTwt
> oPk
> zII@+x0waHnM92B+UiC<%{YWE*Hh;7nk}g$M>37S?IWutwNu2#m>aPWQz08
> kGFG7o*
> z1TK8^391CG^l{6qaij8^_DDhS<;+QF&;cGcH+|tJQ~N&40Tk{V2DM|&PJIFFt(2
> E7
> zP0<)S9cxOgP!*+muwFB?hOX6;!E>613WPCG>Hs~ndh$|0?X8~WcDw;m!kc!
> &m{6Nb
> zaUpEFhQ5Zn*x;{Pg6>|q8X97hj+AzBT&&uMz9wO^R`?)XF_L0b@6J%3wQ78u
> ElWbJ
> zv4>8Hw#dYpF`LQOs310Jb#H3-
> <$5n}&Y7#q1~neh*wWFhE!7o5^&|^b5!EKLHxU!`
> za>u49ZR|*1s5tK3s;IeXzZ!&Sj$VKx1@9JV_D9;J=@j=tOW?OR*?5+W=1_Re;iR
> E?
> zRGT>PNk|a+@6k5o+}Foy*D8}bwuIjT^B;&8SA_{thLy@URMF)e3Y=NQ&5S&
> Kyv0A!
> zH}D3tlggKgpNGi5SmmvZG~yeuvr5tZ+sZQ03xAS6gE8F64JT4>_@^BxpH!PI)R5
> pZ
> zqI}AuzZx^9#YPi5TqfJoT<pa*QdhY8omwb%GYGbF+@s?R@Csa^PZ)a9o4vR*
> w{r-4
> z*4QRo41Snj7T=U|pf7qvN~r8Jb&bE2$eRx_!pdbNpV_7v^iI#TU3D|BqEqN>_
> 7{2$
> z77{|5Z`vU$k1&DOjZOH^t%OuW+RG7|`98?{?qRj0!Q2QFdYr<Cva96(R-
> fc}HE)Q#
> zF7Bf)0pKZ6Vl?wx4)6ef1UQX{7VvJoW|jUjJ6`oF9SSZvcoR7T_C=Asz?vQjY=abL
> zGM5-
> ?h*LLlgwe`<QKO&qCw(ogDzJ4U<!7&fjAA?kjio?TL*U)%X1!Eb_lAEh3p9vR
> z2k$FaZ+l#qEEIeoHDh4@GImER=J8QyednE%c-6iz-lz9(x7TM|M}-
> djJ_<GETT}NP
> zT#(?8W#C1@jT-
> bH6}1pWj|wtN0O>Wn)=?}Y9!XHDJtiX;Ba;Zq*}&@Vwqn6LHBWGz
> zEvaLe<BgFdqwEj0@t|7g<Yh^KhC?K}fgnZ*5SGO`QE=-
> I75$QJWT3@?5Ke^u11Y?H
> zs7r;T3@QxfFAysz4*>(b*DH&NK@=A&%P$5C9Q?C|HFw}O0sNi;3+^dMU`LP
> uMTV?5
> zSDP68SwsLxTu=ZRT|O>fK<_tK9G1_a9$Dl=+#+xkXfB)yZa{Crc--Djt|1Y0qri`d
> zAyTuS;&IEWY&ZcY#CtoscJNlQpt*7>`hE^cArHNDC-ASr`Eox_RCC{Y(Hs!bPqC$l
> zP85+wLrvJy5d+vE<|Np7(9rXkcWWbkSitw-BEOsRI2d-
> u>Uu}4<Kl+&K!f$o>g9+^
> zo<v6knu3fS<RF6Bk@@T8Y{(J;FZlQO>*4Lml0j#d>_@@tlkZ5;rS{r5@cXtB`;5x
> @
> z8PFjX?n{~3#m~G#@r7sAFr<M$mHmN^j)?1x3IhK~>_U@7r|T<-
> 8y%75O?Bgf_K+bd
> zgGfjG#Xuoq!;W?iw~2@j_-DtkM4cFe=_-
> ;aD8CnC4#brECyop>Sg@XnY$0k;N(2$O
> zzPu+J4rYX$1+%G|rBZPd!#Xbp%#g;?FHVBS2WI=T#IS={SuSB0MKN>gtAb+Eg
> ekUb
> zFFLd>QKR>1BHY6{IDRxx*L(&LC6#LVDkzdfhC=(+x!ENZ0Wg#(lD<74*-
> 9fJk)t>v
> ziNonL&AD3s6V(FEcEis;<Z={>JCth87Mqto<V=!LB1hOClyeCr7Wg50c64V%2mD
> 4{
> zIj*&zE;cT@evbkH*)yfa{HY<4aY^_DxpZx_x!M$-cu07%idEk|2Jt3kxtDR_f<x~Y
> z$+TuH@WAts&hX2?sN<8NgJjJ!LUhqmuu0ZKg9XH5B6)H?CR)JP3_kSK1H*)hu
> xpTr
> zx{R41O7v3bXZk825=rO$0e7Zj2<B5nOBhfhqCnk$QTRi|l$|d!kDcOE93h>k^<*
> #|
> z`iKK34%o2$JP8k=$!-Ny#L7byUj=n{Ckz<IW4ASHDHF5Jm`hR*n1-gnK#z!l;3I9=
> zbfM~^&xK@3)Kf>p1WQG~2o**ID!}b2jB|$%z#M|Bz{rwS^j#uzFcnF_k$5#C
> 5uw@~
> zF=69t2hc!=9RBX6H_&K1KNjk{Y|?;g=tzZ#qawBbd!F>cCtj}xqm$8yo>2r1g?T7
> <
> zA3Az;z;CtWjR%(++pfshh>}TgMuu)hoT5UTSthkoal+D~R8jqKB2#NgRfROHJef
> ~#
> zBZECM(#FEnL{2>|{awl{o+(BWws~<eDmr=zx(FRN494h8P*n{cE(%HA2eL2c$
> NZQo
> zoXIg{jT$}O^@5<-
> UaTxpNd=_*hG<V1bMq(eb``cLtgty)yg+ZS&4upnAzm#KbHR1@
> zvMv`^;M{e$6@Qf(GsoQOHuRtgnj}^X{^>D4c!*R@inY&KbO~ilS9cgk_y941v;^
> %N
> znY)i?k|!+B@CwrTQ=JV+sX<KFC(IyrS3&hP@iG}tl}~y<^&X17O5ZG8qd$}2`ND
> cE
> zKnE`G5W(qgtW*k{<1{#Iz$Yz0{K4E`TH@brroTH+f79Fk4n6%(vJ)c<{lB|TT5;o6
> z{&es{Pac8ECj@<mvB3c`;9^85o+S;qzb0Y`kPXo5wy(lH#Rwb$jy0$0oQ=+p25V(
> 6
> zM&9A($K!+-
> 8_HOi?pX;#wT@RQWPmHI4q9T|$E)VDcuAAz>Eu;Pik{*E=)dfFu!R|G
> zm6V@Q-EQ8U72-`75-
> Ypz><({>9%vm4goiqrels)QWouJ@C_4^#BsbBVzI0$0KV;lR
> zJf|_$_SE`dt}HPfi^rAzN$d!)r;$&(W?L@8DSh2)-4<<Ux-Dj);cD37+AGb^%*O-
> G
> z<ZC7DMR0Za>AM>UII}WKBd|X@+lv9&0?vmyvl+K6lC=ANK0#BJMUpLry^iY
> &E5M2N
> z-NM~AAjFIh*bfaN#Dpl|2>c`98cY8NLPapW-~>J_US2jl$u6~^BDf4Z;{<-2N=-
> IQ
> znMm<lNrsE6n~=Se$RiCmjZX(U<JG1XTeCy^rSj~a^r`k5)!RD&328g}fAf9)<s1G
> N
> zckF*F{89f0750As{e63pbpK!J?;kqlKWgW%TmGB1{Dq4BOG5kR*8ZC5zgU0&w
> xs{Z
> z<lndX_Lt`O51H<p*8CSN_xHiSSh)WY^81(7_fK=~d)NPsu=jVQ?w@qt-$c59-
> uEwt
> zj`=Tl?jJPZKjpoDoAN)T!hc-
> R!uvJ@|8EI=|FHM|rt1A&<@^8d@O{gD?0D>qe{J;N
> z{Jg(a#eXTDf0fOD0rdW@UjD<;V`2M0f%F)@(K}Z5Z#3_J2kBAM|ApLrm+;>yJ!
> X1V
> z8alRbdy)DdlpZ}D8$As((_fO_H?GG{$H4fXB)xAW^1I&u1!Df~^WS&+4@-
> }cnUU=;
> zvG0Gd^yt}G=>OAi?nS4whoaIe-
> DigVWu|t#7>VblVI2G%K0ZGD=npaASZ!$HIQ-O@
> zUl`<yLKS3rc~#3G$h8tBpj5im%gS0>s)o+B;WadE6hwDCN9*Z9ZS7l6AD^Euo)g
> #W
> zckA{t?yvS!nZS5Ibc2|C@QPcBmpzs)de?r)Pl3%;nn5!G<Ki%qf#iIe`aC}d_1qe5
> znE3<v2<p)mc9l~6Xco)-
> A#k(lRMwPh*;=T|ij_^cEWNl03WU;*kGqz|FWR?uidt?h
> z4?lc^=dJe<mZm)2y$T?#@nbH##8i73e$CYi$p`i7Ku$?wEg^Qxb?e873-
> T4I5;Jhx
> z7Y_56^bZk=zAc~X%&xb|t;>xD<F3wQcL63E81GAKS1(>#=j{5u>yvH=Y9=m|5f
> DgW
> z3mHM6j#Cjw8Nb>fpl1)i9lmQnoY#+<Vpq&ZChagi*pcNmfE7B7V$2GSz>Yi)O
> EUFk
> zsLFep0jkD6j{pu&t`34}Klf2}f?1Jm+gH(JBNVtT(P%!>CTu^)yIM_gD1m0ZH_Sri
> zxX1&$0HXlNfHMRfp=X30rvS(0uFR(cgL{6;SZExRIOD+2fV;^g9bZpydxUJ#4{Qp
> D
> zz?LW#U6d<IfCSwSO)T@YON12vhlS^N@(Rk~Tl9`<K@XruDEv=`-
> Hq2X@a^R{1YX|<
> z0b4A}KBSh*@)i5#Cgz4T9{xF-33hN|HWA9C2k`J3>|z77YSQW+_Wi^dfb3-
> atmwOF
> z<O_{ljN#|BJ80LwH<{gzfj8!mt>Cj|BEAwR+h3xE(Y^Yoe#IvSx#*%_D2Y}9D%+
> ;g
> z_OwzhUY1hbz>bmOuRv3-
> w%*4YYqYwPYBkXZh@?r*c+UvJv;H%9nbEgzoEfCvkn`+l
> zGe$8o_Ax_y^30lsJ~MkQQ>6P^%WzljxyU4<&c1<}eml<=g;s>`Kxe+Ne9r(l1zS
> BZ
> zZH6w84`+Z_UrqtTHWP*XsAYPfkJE^I9+31QTj4!N(kDAeM=<K6C?AeC<hLKt&
> 1mOe
> z2z|l($ojv2oOgpB=}fs!9Y`BFdiw534zd6M(=M_?n1C?en$eCu;FfIR?x?DmyRlV
> Q
> z2e_tfJ_70pz=3nm|GNG}U<<MNvBMl7Fj9YpFoe&8kP8H`1`jla9q5)oaF6T=`Vv
> EM
> z59H{7#+#ftqm~$Cmut{x6cX{V!8T<H4tIv*uLK@Vz!hQHwf)%Vm{eVFY+<FKY
> 3wGR
> zyA`g->KPDZ&(SLVkhK2zBhB3s-m$!R-)Yz}JNXY>e{IH~U2e=7)lzd-
> +?`Mb?nUgH
> zp!JG~IrtJP`~lcZ&dF<9R@@r-
> k&tyO01f>6CO|uUb*#EBKs%s#Aum7kMG&kj+nAlL
> z33G9z7tA;`n2-D1sEhZT+JPn3J#LK9Ex@z#^&L<P<~Z>j7?a$q&&X|lF70o;>e1-
> A
> z1;8&MSC$x{Q$}sO<F9jX^)GLrdx00Z625oJ7k^pslh)9+fKT%{|D5{-)ovg?82&W;
> z%ylDGNsb4`-
> rWA>qP?c=V1znc$O0f)Dxn<QAEHCAskaCw#!J1TC+6UB%xF+Nct)PU
> zLq3u4lSg^DeFs?2&#Ej>^Z5WA&P_BA3EZ!4PNSY(MGAR;EUtES$f4v&A);Z{dB
> dN5
> zc+`DnmShd8y}Cf5YOuEQvw<F%?!|dO-a&^WIW%aeX@o5JzBUbt*IC?-
> k3M7H*e(fM
> zv-1Oq8jC+xe(QM0g*(}`U-
> yIQMH#Jm|7t<ch0HG8=7`SwsNU^@K62AxMK5!p<)aSw
> z2Wewx+hUb19S>A3cw5^{ann1-q|So92rbNzd45mNVxu_n;d`!U-2vRO-
> VBgL5V5u7
> z@;b%wq0u5bZtNm$!G^@t1T5rY5ofNEYa_oWp0kBpi+mq)I{|Ew<N_koClvrI1
> j(g!
> zku+q5!d0Z+K;#&T%DuelLJh*$f7+(m5G}dHj&AOaTe^8T%L<$(E|Bw59e9V~{!
> AI)
> ztYNuN{G^-
> v!t$Wt4z=9fv43%thPu^F$uVs@cGo#Z<Vo^UJ{CKXD2aR0$M!q6mpe9(
> z#I1k5<3FZ50*NY3C)I!SdeQPw1_{1Lw(<1>m}&>+S!%D1ns&q<<AoY;nmHrTu
> I_zK
> zf>=1`{8Q<c8y>zdAwXLzeSJTm_XxSVagZCmA6}yw(qoEB{OZ|&8*7~tb=;)qHF
> Ou6
> zPCrE2TiHfk!~eum5#tqre7jZqK}TjpIuk`SFwU=I;?<sTQuC?vy{PU5P2ox7`#pZ#
> z6PC~y@j(oitT{;3`gj`vPsFg<WJzW&zcvP$ffIANFCM;UWe^vfTvh)Y3Rx%~_is*;
> zc+*-R)(&<T)0Cz|2sf6Xc52F?%7OfkSiLS8rk~e9DEnZ$4ekrXrJ)nJSapA9O5#`O
> zdw?wiR+lk0UFL-
> !W8SBwNuLw(JvUjLmB5!)09OY_SIl8Qu?1&_(G?*K^YK}2wg<Pz
> zccPf&_Cxv+o8AV`JGgq8>RH?wd42R~?*cw+=mym$W{9uocnNMm-
> F>@)c^;xBBNI$z
> z*Ns=;{Sn}7u<^0#&g@yT;znhWbg_4M(5oZTfm9O~o+BcrB56b6Eiv{B1nW|Tq
> C+s%
> zYR8tZ8N+ik`1sApU<xtljpTT!QwsGGx-DzK=|I)X-;oeun!m?Wwi)3pNxv0I0+SzR
> z(I9;$Tvdf&Ft4)2%M5vuy6>nZ`_v0tV*M_Fq1FRrd%_kt9a4*i%381me1{}}0a$i?
> z-
> dk=7Db4S|tfK#BYTeKCGw`W3WGm_#sShGR3VcaFoA8+nNDpw6R;1*h?IXP7(
> 7W^f
> z!R2u)Y2Et9QJ)>_;yS$EV9s0XapaCS!Fad|=jE%oP6yUax%4(SILfQ`ersqV3o&@)
> z1nxLpBsZF3*DLi+_%b?>cTPMOti<bv5=Wp$Gu-
> R?=hNUiZXT@{`o~V8YLmgJ{mfC#
> z<Xo2HjZ`hD?dhV5H|P~SqkPQ02;YY0oz}gX9Ym||y5J=-_C6iN?8-
> O5gYf}H7(q{X
> zSG!<=tucN1+gc38w2nz8jdp`-gJOevgZ3gJD~>0rE8%I3c0^~i7_mz7S*(^4LEJB{
> zq<~CKJSwg{LN+WxPCRt3Kr_!m4o4B^Zfw)Wx`1^yeRuM9>RS7_bMQ@;K<W
> ?iDpEh<
> zcXSSsJJcU(9%+~u6w#mO)c(0+G)6L>dNj&V#ZJ*q(@x$_*iPF{&d&2TZJ#o(T3
> S2X
> z!~V8&G@AHIbTj$g;Wm8Kny5ST-S*a)T!{QLfu1~(T#1~SJiI$bW-
> eYpdVYTF<b7VK
> zSR@n2vu*!=e<oEnBs-$VsMmMW5R+ZhOBl8z0_!=1j~1-
> z7p&&=WpapNe33Y+IA%fQ
> z9QK^&9FlzTee8YUIzBIPH(|D<YJ81aE!j?(hFlDg>4<Nxc<zv|(1`C_EKoG`c8|lA
> z=2eh3EL$wlY$yZ<7zI)}2w1|_c29yftcB=i#=9sjn6?P4M*tSu?6|M)SRU<&n4LU
> _
> z)b~`y!GvJ%#lu-NdsyHfnc49Hn*00=i5>79k`%LV%dxcNy278wQx-
> #S9904vCmW_4
> z{_P602JHMzG33A-
> #@~8rxAP&bF>JQ$(FCS<^^fN@y$8v|<3#Z0cgM?F%Bau#rQj%<
> ze$M+A5mvkkPPZGKHD0y*(XjltPq*#khitC<(IG<2=yhk{&b8Rejw{kjLW!t};r0x
> |
> zPr_D_IM`%t8g5O8mTQ~Oo%Me9U@%;1E-d$D#}usB$C;(zF1GuV-0u!X!P-
> 0xUo-W=
> zHc0}s*lyc1O#+3%Ls%G|WGAw__*c0BDL_%ivr*X#)(cye-
> 4fo#pRgYnuWKo8Lw{g^
> zypEA5pj)mAMBJv+8MaxyRH6IM&Z&bmbwxnAUKsnf6rU$It?hKJO`WU1oW
> ^zTJEAR5
> z23fz1${oA4VV?StZHT#nFn1VRAghAScdT5{ntXs3@!e^H(|3s8fvWs9cFbIGVEZ
> 9j
> zz;JxM`<!hcFa3wNm0Zwqf<a_KFlU}RVEJ4?wEdg6VO)@4`;KIRuKL!lVYvXHb~I
> WL
> zHiMtGqh+CV`j%{9sQfrop<!g<B5TmobRn1opc?o&8+zqcL3MiUR3RwocD12Vd
> *f|r
> zH37?Ki?tzjdRc3dEr^;C#nECzpo@2)TO-
> ${FY%oDQ5}%5XOY%3V%kSG_HpVUEZ?>D
> ziAeNGQ0#D9alL%JW2yH6>Jqs`aR}hzMMm=X>2KLw0X_M^R-
> ~O`GOr0eel5nDkJ8ko
> zpX1BKN$V4{)Fq!2I_=^~BZ7+TR1;;ij414zBJvT8y4^y%CY_Uljo9zI?vlvWz;K8%
> zh2qo3po&q265bH`b_i+*Wp5ilW4>p)gz$F|Av_6I$1RPV?Ze!Xyyi8BL=(jt#_?~
> G
> zT*Ww#y6;EtdoGKB#ws$T6!g+RCwTn8?IXRWe@BPyMR-
> Pf56t+b@CEjIdo{v4N`4FU
> zg8G7BKb|ed!7eowLo+AEFf$EAoFFeuOre0ipa8@yk2G3fG+|QtNBH6oUnWy
> TkOJyx
> z9s*OGVLaApksMRn(2VMLPY6@M2id@?V(m21pqSi0!JKVGX_5-
> ZcxmEb^Gs>d)kRA+
> z)aL*!8OU`A7DSZ#M>TR4DK9G~EJ2aKi7OHkYwcIqSh6yQNowv^1X)6*j1-
> m?St6y3
> z8J8tl!nJzFRxDV8Cx73mg0#m>8Yfcqpwv((Px@5^Q5!Z^MEwPbahvN#R)jLw6I
> TQ_
> z*0C&3CDr}5VAtqXu2VWEaH4m+msrMdB5#k-
> it73hcS6<}uQFPS>5ex*yQmVf_QrmF
> z!_?)xyj_arT844o2Dv3a574?M&;*_CRey!ymX?{bK7n|ZaSQX3@y_|m+3J1Tw
> |Dai
> z?47sa#1heP{b5BgXaj^Ul@y0bKeR5H#7Ej1f<?N;kb0sDJU{O}i+dt-
> Z|s&Pq}M@T
> zZ(^iRKQX4Sh81oMG133iNUwBa9FZP_xYjUfs7{q-Tu)$GHff4MmBhYIGif-
> e)<fB+
> zRts#^l{M)n?LAfaQSm`s#XM#NN&TQ%J!gjAPF0Agv!a8fg{Fs}$PLMBT$}=EA*{
> 5-
> z^vJ~66gmSFtF@|E?{yynVfYlf(m5`-
> k%gG)O6%TGHtWuNXgrBbDu?B3L~1<^SvI%v
> zWk(p)kqW3TpORyZk)Gv7-
> rxgFq|~H@y87B`GL1%;{y|wdjkf1#ngnh8dl+T4y88q3
> zS(TRe#sjNG%S}=Gm(BQ)hIRW#6z5gjTb5M%Rp-
> ?wHJpX#b#5@OYXbM<GtwGI)75gT
> z`BN4t=hLP8>4|aHhWB>sk&eqvVX}_vL*vqx%iXqybvMve*VFJ5@AI_`uIKxaK
> =7B{
> ze*9K_#y?+Or~iEW^<~KJ)!ps#hh2zJ<R>gGT2eBngQ&EVvXQXc>h>Q#@=>u
> a!RlSH
> zkm&Hp&?q|*;g-
> Js4A}NbGy3!h&`#+jG~yV!Q_6Bh4tWaBf}dM0wyE!%s6Ao7y2Hj`
> zLCVKKn@(gYgcyJ8O7J#Su$LF=Se{&2ieZT({QPZ1R>)JhryDABLS$c*MChdzYTYz
> v
> ztGSH?LQ@!mNxA9Lxhy~)Sw=0#AzCQED%aHDq-
> FXWBC2`A0^<x5lj*lnk5fFl9HTzA
> zmCl{hE{+f||3)EUlLDQptr9kUSKM5bi4KGgKbQm!jH0t-
> s=Bs1;@QL0)Wk8KLAeJM
> zM-OXJe-=$zk1D-Xu$4uywq*VvTf6OVYh=jR@r)C@CWm1|{-
> PXqg7Qk&cf|wNm}5#~
> zZb#dds_Y5{3=UJHtLbZAwW*4!OnRsJY_U>_gGGk=>g&(=_Y>M4+Hx{UvQiag
> f9aAv
> zjqvY1{^whEatb*<9rEf@%>oBBPXmv}GZdw~U;2xVJq^g4*!1+Dow@n&3S|}
> Pa+h~b
> zKZjq9z{Gc(+I2S?kU8@|#P54ZQ_<J3r4!TFES+F#Ro@7EH;n<2CfQl^)M+^({ug
> ui
> z7$i&AEsDC=YOS_y+xBYPwr$(CZQHhO+qSLS@7?>0Z{M>|>=WnT{Z&~tvu2K
> nk&#iA
> zIma`!W34&Mc!T8%cf`g#MMiAAz@UR275i(^z9xuQ%Jb0&WtMd@)mx|N{Fd
> *(u<YoG
> zh0nW$m(@-
> =z9xIpe3bIVojhPL565Q9bzV9^uSKM<Ma1{ra&f}_2AHDYpZn<<lAPu|
> zwCnkMf3JedkJYYUz^#thS0{@<u1WDw_M}HK$&W9(10xSy0eCyTT|ldiW@D
> bX!qdg`
> zsLtOPG`knVEIKET@ZqyVl68JxM2+0ct-)at-
> feS2mravMJWHmq7i*AdDwp0m^+o)0
> zKD*!ToMx;b@UUPDFGLs8Pjv}PW36tc>n3Y<5E*@uCSh!Clehk>h{z;Bc5b5(C0
> |`H
> zsdeqWTFT%M_Y5zn&0?8~MKA}t6^&`bqvM+72#G>jI0MFTRH1H+ep3PYIo0
> N9$X#fm
> zdD!;X*ktl|_TEk9x;Rb_Oocgh<wdNCvB`F0EtcWAF#%kofdFyO32jS&RiNdccQ`
> 3r
> zkr@Bw(LeWas4u5WSS$x`9JMJlVVUto(3<_@_ax9r&tJA?rgde7wgGBK2X{{DP
> D#|q
> z&+1OlSh-
> upP_ozYalu;jYrM@l6Vf5&Sk<e42LB}Eim<*WWy0N>vE+w4w|g5)T*$n8
> zx$!i$;Jk0rB)N2N2SoQ1pA(;-hRy;Xm}6STw`k#4-48aZXw(lbR&jlXO;cCB4?3o|
> z7=@eHwn!l_6WbzP(iLElZ0{VKe|QLX-
> 39Z4{DQH~QGbT@2Dx>oHKvFEX^}l0nK^Jl
> z^HaY{rq9I>XP0Qtg{I;Lt5g_yZ-
> DPIFUAR+l7&FKC$$M+#j^G{Wq#+HFq&(%b7`${
> z34BOOu7lvxW7>oO?bkaYw<dQV)}Ohk2IT4b6?M4gmht@PtDB6e3&MIQ7q2
> G=^bzQ3
> z=`1O+kKHUBu3^saJI=$`E&HtF#s*<7_u54)4$jOhDKK?Qsq=#9x63SZu6Y~VVa{
> =`
> z$1EX1&a!8{T^9GUn)!?dwk$gbB-
> U|4!3n!6(BRd5vcX^?)69U2+ZV277dr;Q<=l>Q
> z>}go(aFTI?qH&p@n`~87i74)z{x)?2bmFDPMT;g($QG;>+cz;@{Ysxfi*Hc*j~GH{
> zEC=T-kn`3fv(_U^)*{Q+B1_gG%k7Z5Ai=#xHK-
> CG{=CL9kP84H%El)pJek*Dn(Ux7
> z4)EP#znx{g4oUDwsKp==r~IRAn0=*ExPv54SY?0_kV&z4B%U4N5!P}qF!<T~h<
> gIi
> z^z+z*ilt8$f{Ppx3#3nGq*K+qGGoq-
> ^({d=+v0m7?xf%+%c~*|ZLMg;nBK<D^<2@~
> z?%G!C@$5`(6>L{XjdfK=t2M|Q&E2-872bTZ!Q_=L1j&-
> G7u=_2_b(kfHhZjDZq`d)
> zq9PHBlASr>dD`_!h52slNgOsfHB*(lP#8Xk#l)ZV#-ax=?m8*`Ic3=+m+K?qR_jS}
> zOawR--
> bq~ANnCs{A#wQVtU(8ZU<5frOD;X~u*x#msO5fTn;eHLfHa8XM&CP`cJw%1
> z<;UQz5w%1=nKyf8S2q~6PcJhpanBlMvnvV5n(W=`AXE!8^2*<a5M%QR#@BT
> br>ezQ
> zY!R#K5evPoxhya%6&6P(PA7b6e*z5`6elm)YNpC{Z35^U=_A4#7Ua7o#I!THEd
> bWO
> z?{GaarO?5q(Z<ui5B;^ZRcOl(F*v8hVy~DZxLG3Tlr7hP7X6D2UrD86xrl8THHA5e
> zllych%$yZx8l9&U{V;Sz0Am`Bsd72M_EuS6S&8M1Th>rj@T^__G+&iyNt;Vx`4$
> kR
> z2l;pX@l9?*PRvMOQ%X8>Rbvf}Jx9q%*ATASprTpVI&-
> #!Nx<qNHG`MfUE~+Fu9F)D
> zH89E9bZ?VV%rkF;PbDlt;a|kRC-wm}E~}a-Z%I7oR^XqJclH6B=p{VT{az~3?g^DI
> ztI*K+yILN=SBKSupJU23(9UNpahfgFTA>{8?>l67kd{GgEzwT<Uhlvoc$5#&SBEs
> j
> zN;ABuSKBaslr3})fMB2u0{to*@z;jcbv%JxM1}=$p8}K#J&Y^;U4hXd0@Jbi2TL-
> <
> zBRT=eySQ99%a;LvNPTW;!H#y*um>8ufPzKJIGG>7TzX;VZI6&_xHe#_<1tKPn
> &zo4
> z6kUx@qF|@|2+(kW$8w<68~f;608d$c-
> JfkX6urmt3fkMc&%ek9rnx|Pu_J=yOoYv}
> z0$6NVKFB^qjN;HYyr*;~<0z>h1%sS+)An^q-5T$8@FxPqTK-
> V;Mr}f^pMF|+K8J69
> z^Gy%m#D|ts`@o5OV;(H>zA#+f<=f(LheQy}i(;)xNbN_p#%PH(&v@^0QzP-
> bUU)U7
> ze+GK?ec?sMCy8gDPUJ4k1jtyLxSGhDc%M{{$io!$y|Ny0w!r=tS)^}4qz*2ZRde
> 1w
> zwps~zALN<=Gugcn-
> dOxb>hkx7!$1=gio=)VKO41k_}e}je_(lsU77RC4Tmely^oFc
> z8Mz?{-
> ZX51ymJ|9v%h`W+4|ax!T{p(Pbd5v@j~Fn1MYNuY<{W?G;hYMSPPtUDNIlP
> zhr@54_Z?WwAevZvp%2!O@D@>cGzog!<80}om{J31Rgtw3a67ctEDPM`_;w
> M{)zEU+
> zqz-{Ei5Iwi=Mgjm1}1rq#~Fb%UItU-
> OaYX+Mh8I8h^r#${bQ^*?#~eHyzITKSCWnP
> zwww47xfNC??5pea0WD7^cf{9M5Ds!tQl9n%azhbi5g3v6g66{N!fb<jk4}$zkMx
> hy
> zk5Xs{=uNgZvNp9%sy3<3VYi~}vg+CDCGEU!iEhyTtmzxni@)b9Q3+4)x%WF-
> F9fd0
> zQ8AShf;dF-
> C;kQmwY8)w6IX=SV+cFwY62W10_dY(p&T!Tu)WyC#XE=>x$vJM1>!Jq
> zlQ)cNb8c-
> Z)X5hIzfW~b!y81ecbVT%Eef~qTpg%Sc{41@K$bx0!D|C&0G?$~I($zz
> z5`Vga2fI56wf#Eu0xX!ZrHzO<uFECaF>in-Aqx^TA<;bWYK`0ySE{2a0XB-Iegi`z
> zYvzRtx)UFjVh`=)jmkabihQH@U6|vm18Cb}u)}$cm<kAeuxrs)Bkh*{;+q>KY(;*
> A
> zDag0rEYID2DAmpYxANCC0R!Fjcp{%5V99;NDLAFgV(#6%K)WNlz()~<P^GG}V
> @n)4
> zG=Yfjm135n??+u3bn2}?z<a_I4Yr)Kn-
> j5uPIOZ2d2XwmL$GMipcxF*y5^R^#=Q=B
> zn)Uw6d*aAk?~d0h9wyY@@u#vGn9U$axb|D~gs#c&SFJ(A@VTru!AvvS?AZ8
> >eI^V_
> z-1UqewJ`Nzyh4fqf-W6arLqGxz-
> Nw@+1k%y4vYkK^1cl29NBN|71n@uFN}gk@{#1y
> zoc2G;91uM>phyu!07bc|y{sKy>pFw37P{ykmbfd?AIz-
> 7I@F&)e_5vv`C!m*x&IPA
> zg|-3Wf-v-
> ~K>XT^d3pf^0P`L?aHa5hM*X`N4j_s~PB;xH((C2#^b3+1*JA<Hboy@F
> z{}szCczf6R<$rnk;sF`kMj3nQ#p=MGT9+D?CxmdwDF){Fo5U`<L=8gBCG3O{!h
> B-z
> zmGPTE-
> x>Xw8zb@RCAXy9ByL|}cAyHMRA|E%gofX)L#mnqjRuI2HNOVX_~V0uCCtI6
> zn*nw16RtGSUnfA+%Q(&}CF{&l$SB4Dq)qTm%54>zphn6qm?uI`4xG3tGAYiIc
> 6Q+g
> zE&EnsnT~WQHHst5i}lI@C9a0grh}O<Sm6Nq;LMTTlh=z^{!M)}lm#ebTn_rG!#
> Urz
> zu35fg=&T@m9;86=mScoGXMF{W9vYL13JW1IN<o72=w%nx00$=yL2GAmS~|
> CMw7~w^
> zs>{fWcs|732(~l08ccaXRO&K8=!Phh9eQvjRJxn-Q)j5xe<j6$K%OT7#s{tHi9{j?
> z1%W+1hHsvgev8pRDcvA`wF4#uA|2md`rUFO!7O32REI7#!pNTFS2tKh0BZ3~
> Gi9d3
> zlT~>vYfoo%hVYzE_Yx`oDFxOyuIwsOh><y~a4u`7$ls^iMmwdq!6+0qdmYh077
> Y@V
> z0}?!MJ21Ad!J(`8Q1ehP2{Sp(XI|5{Is4`V9y<2M8)F_Z7tIs<QfTFD09BjpZDtAO
> zqI_k;I8y(~)M0jhoT~<od(tE?0{qgj#nj_NXTy*N;pV{#5w)~dYSE}gV^#>LeaOb3
> z@{lMWyorkmh5{GJ(6CofJM0dO<f4G_ICx_sXZNs6XMP7KF<S$PsjyDJ0nsQN
> V(eo*
> zICvf{kBwQ!v*7)}0W_tQD)0`zj3DK|f-bxU23InK62<pK&|+vw$}!m-jFf$YisQ*C
> z@K=4sudn@ga&jJ_%xzb2$9cDn^)xt4&u#ZrY7Jjq=Gxo#c4Hs!RW3VC$K0K4t
> h+Gb
> zV@eU^X65L7MXbt;Q>}a2L<C0-IB&M^mYd%ny93Fa+geR0Xl{0!Nog#|(<`)F-
> m{$_
> z>%EsQw<2VHQ6TS=GGY#PrGyIsS}pv_<j!;D&geo7cEH@!4}s>8ypeD*X<tTa&
> *%$S
> z%<ntB3@~<3dAU5lL`V)iS@WQn-^U@@u@=!F-BwNNMA-
> c&^=8i@omNk3Hq7u8c&S8Z
> z)HU2X1Jwx0d}UGe6HYGS^CxuKB*B=_JL;<9IS-
> ppAL9m4Q7K{8X}T%Nxz=pK^TNV0
> zKkUITn_Es;dHd~<k*g-fwB2vR&Fk}8kP8X+A#S(Tf-
> ePM2T_*8%C}@2k|<K54}#uP
> zlHq8?(F*2aj0Us4pD$W9*Sm-Z59ax*bxjI8u8-;K8r`9}f*EnzOdt14mf!iZ$8koz
> z15{QT?DKsCoP(n52H~x7EK5wG2X`mz?JmRi6!~R53rLj_C2f&7##Zct4{BQR3G
> %RX
> zpZL}#jpSN<*TWE#OpRt!<KUF=?g71$Jrk+usf4BL9tE;dj4?2>S&}H0jicm|#EG$;
> zA3_K!XxsNt%Tf?b1+w9lR*H3HcsJN@$aWk8j@^UBthmVI@|M{GwM4x=ytJ
> N=_&2wm
> zyYDXF4GxkA&b{cpo}o6sH`;bbqSn1~<Sd+@(d2~eM%?<izh9%LB%QNe%HQ
> X^J>Th{
> zDeq?ht%b?bcLl%MP9115ct78O6`1M7ChK}h(JGKfO(bMI1Erqwz)yTdw-
> gXdM^7Y~
> z{CU4QPeQ8Vr@ZBohzQ)X<OV)(g}^w_mBCo_f-
> SzrnkMi&L{|5(VdzI~>!t%GE*|kt
> zDO?}vZrd&ufYY>P-
> B1uql?@bP^UFo<sWvbl1vS6|(npE3I+IIjqYuPFyBMAo>ukFi
> zGQ(Fgxm~yYH~VoeiqzQ-
> kwjiu3pV~lzuj{U5DcQLP>(MMo|tA1kR?MI&0EJ=NeH%a
> zh`vjKl4Npr3nyX0$3>O!h{a(JDOv`=28%hTf|VW#*ze60;&vh#=%H+}N@3aG?4
> gpx
> zy-$7-
> j+wiQ9x#Fjo)FadK^nSyY90aTcQI%#+pW>#T&RU4{QRKNI2P<w+L`Q(@ku)u
> zFyvn5ho7s7kg?#)?p_H!!yJBeW5hR7t{6vRq0gJZ0~C$W#SW2H<iwtg;sV<Z)M
> Z&s
> zP`H^>;B$ygWk${}We6$`lqGPik)j{FmWmJ^r;D{fpgW{9i1nwdCbK37PlKTAB;B<
> 2
> zk&sjT0`+?4K3#M#z;OK)RizJ7pmJ5~$jd^a*68aXw`0gYS_~;>%ib4f7c3+M&M%
> T+
> z0>l#FXX8{At>ttZcD2mngwt|7MkBg7?EL8>`0;BRqS^ZF>&TY}XT{qE605%PeD<
> Cq
> zyFD9#F6Ppj#`UNvME%;c<Nb@k`*q!nKJFa&xiDOo2KA%Y+F@isB+QW9ISBef
> LUbI#
> zFhM%ui?=F-
> b1bC@cLZ%rhJuudzDd=D>!sgg5S6>Ol7X0R+Bbij01Tq#c*zUdryzGN
> z+Y*q=wt*!?4>T8`wIK7LYvvRA*@RUOY-sGZW$Vw%p0wH-
> E}K)gXISUlmY(;>n(3l{
> zcuMM`kvOfohEaW>f*zyxb@Y;I3H7{bgIXlBdfKXrsj1MgC0y>e56{xbT%G1%)o
> 2wI
> z^(fOgW~!NO%I1-
> XylQ5Qv0F8(Y^btVF;$D+UwE4iR7dwp$wU&A!lT(f2nRlmS5)eL
> zd$i~jRNCTeTcG2JsyhL}@7F--IvAcdV;t87b_Pc?or98##JJCgc5nBu-1Q;+M*CT_
> zZltd>;BR2v6!5&mIThq`esQK033`2at;v&)i8Kw=AY3wD=2nB%fLB$&*`2;3_Ehia
> zgi)n%utCElB5H2?GF}*v)_BC1%B3W)r}kt-
> 9ibSi3uH}}G}G9m14N|2*4Cmn2q<%s
> zvVl7n!ydV%-
> ^p7t2BdQwkbOS6h8G=onsR0;3fQ9Ak$nR(f+5kc%*l|Rw?@dq8k#6E
> z-q>eZo1QglTgyyg+}n>QsT`-
> rC)@EcU#6(KLHM8a4e$9N<k<m6B>Q*S!x2_BJW4c(
> zwmI*MrB}{0XprB%fcF>0%hylxd{tgrpNtyj&pap6C$ipOLN4=AsN%=@(_}u;&
> wL;t
> zauI2!8|?ykda{&L9ZePEAoCt%+q4_w5w9sud;OeQt+xQ>$H@m59}_$&sheg}
> <0Er|
> z(BU)@{(SH_IHDu8+D3%)hR_UpdmExcZ<YRY2{jqCW-
> #W^`MQ~mKdh_%8myHGafaCl
> z#jPn_qV300Y)V@3z~R8`MT_%Z)X>jO9JkA<K4m%}j;?BzIIpsE1$Op=Frv@CntI
> xG
> z+X>r<afN&Cl)YR0j=$G?q1Z-
> t{&Fv%NGv?r9QYEC53c@oB{Z_rjq6n0D&be;bf*2k
> z*iDxOvD||pKM!vA${=XiYi*BVBoEN)&4(uKS*EGcxVf(b-
> NT9|+US5_J{CUVU+q<{
> zCeDesWEIs|JM8$*PS#N<SLItj7F&n@ypwLTG1v_wO-
> yF9v3e<~p4F&RBzG>o&>egI
> zsniP}S!8~_*C&(xJA0hJZzKdbOP5wQf6gQrTZ(eY8|@`l%y9Oo!NnQSPJXr05$f8
> f
> zs=5b%SBD46{z8-
> E9GCor8nCs|)7?Cu{_ah(K%ALAKr{cHw*|m8lc?+xio(KDa(4~y
> z-aJgAd365d_{|UPebbvAZ7<gL%YnII0Lb~ZUt9z%lh-
> K6NW4zM(G76TsAM#o+Fz6|
> zO+stcN64~gQ|fo3X2RG;(d@UL-
> fxh7a{uiIKV2N#{TiM(syaTU*Hh0sc_YDm0`{R<
> zBuDZi)}-P5C_$X)K6vFSqdeWfwKw-
> V=`5!%QtAw7nxpjCtB>CeAn1#qs|?Ww>qn6V
> zN6XWgNza+9FPD<iEOmf=958~T0$|r4A>J1*_m`xQ?q%_EQgF2#namQ51o#zj
> )Zwaj
> z2v>0vb(5zOxOL&Ms!na8lla<(Pij;Pj!0J~9HL)Se`r;*b1`~@Hk|S=tsl}acX$zu
> zXW&+AlOf^SQ5>d*XMhO=vmHIde!ni1hVe?4^_I3$U8OugtH<I(X(AG*x5N{9
> FzjO#
> zEZdvHWpeW@m*b#IMQ<b}YQ<(S<keu*UwX4oV|Lrh1SPt9u+#@l?XDUr6o
> 6XuFudPF
> zVtwQPngH{}I~32?fra!x{*XU5iZhU}TQwG)LiJr2(QL|{vGH}zRUR7`VGv&}B~vm
> A
> zJ^<1-V~1!?3mPgYDmG53ppG9!Pd%_jcy6$fj^G|-
> T<D*;vU4X4y&$A{L8wF06zkFy
> z^|1@CUKRGt1?py?gn`EdlLVvOHEqMxlmpiioYIWtz6}PSXnk#}f}pdy8ys#Y7s#
> p0
> zP4Tra5!PpOXC(1~#{J>OUtjeQ#yx##WQ%bIxB$L^fw}nSo!{m99N9Z1B}MP<Q
> }_Ew
> z%B;4S9?N>z431pkR0k>4tRA@8KC<1l&8VWW(NJCsJ~I*^%&uB3Bs6uVmc}T
> Gq+C2M
> zFU*UARV{9hp~$4r(JO2=?q>oGCmGV)y*0R8PXb*J7~1<y#Jg*5K7j9Wb~&ke
> vF|CF
> zF+FUCv=RF2+kw1dJL2Ql36|J!oUR<terhS>!{etTQ;=j4a@9|XC?}9&QKP~k^=(
> BZ
> zj=_o-
> glXk*eSCpb;)e6*gNyyh#`IY*5^MHYf7`Cw4%)`=OAU<L+GZMbZ~qn&>yP{h
> zuio7)N&GU=hqk#79;MCp-nUeWvq7)-GZsukhGg(Qoa)QX!ob{l5qn&Phm7J#-
> xuL^
> z8?<2JIhZOqSJ4LA`wj0F{?7B$$Bgm~4_hpdA<AYI72GU_TZ6^`Ht5}onp6`Et*u>
> m
> z>FwUy)o^TXQ8`1tnT?^+R|7evyYy)86`~0da>&Hp?Cyl%TKjpi=yg?+sybFPR9V}
> b
> zC{)#H5yz^t9m}#6$rUT~4HM%0vxraWSPj*^TngU3Kea`kl2P-
> #;9l<>69r9~)rw_=
> zUAe%##+H(-_z)zMYm|9YBF-
> )cp4q0FJkWLG%_Q0&$PT#KC?TUkko+xy)tzkxli4gC
> zmdC@7)xSgr1}`d~3uc8B8{w*fZxgdDjVx~OPb|VYBe22NCQ&g9&sVWy0O!p~
> Ifux3
> zAXNG>H4RO7vIh3on7y#JyPw4B(+074jiKiAak8f8qhg8dqsXCoiR?xpX9LO}T@r
> z<
> zZpPSaiLy{pz3A<1#nhbXrvAL}n#QgFV^@g1CCZ8eHOnZmmb}marF^6)Hg8Z`7
> (Q_f
> zUC}+hgRE2gpoJ3}73?|P*(G!QIRE4li{)Vw3)a)?6Y;xIyTLV~sCx&rpp>lKQ=GwK
> zxb0mm*zf{>3O>++kHv!$3dE{%43Wm$C^~2hRnV~>_o1A$LBNG&0^60x%hE
> D)rplL{
> z&1=<FGxo*QsEWf@*;#p233g|T)dm&^x9hhnz1zJP``t19oy2@vsyX(n>*FIq)n
> |<Q
> z3jV>cNrD?AVV`g3jvzN`EFQKOE9_{i+*E6xxMT<O*_sI%`P&9+S@7m8jbJ@ulC
> BnV
> zJ+sj7Eo41?pFp@`F6=nW0(gE{+ZeJC5rZ~FjQHIR*d{dlR9ewnl?ST@NC|VRyW
> uuO
> z{xBM?+V@Q{>=mphqj!>#Qdv>5e1%65<wt&w{JpW>Y2J47Bus=YY^uXXhbn
> R^ahDn)
> z&E5pULS<DAx9X%Qgz7O$tn|6qInTY+LK>=$<Q}T&uT7^Tj?=WVFwIR-
> )bMJpji&5{
> zK+P}7ehy`B-
> l@%p$@KUl*F5W1cOq3Z<JPyK$+NDs$UzBO_^fA|htt<<fHa85>;Uh*
> zxO@>Y6))8InL!aaN=khCxlq;-
> <odwWNM>V$0vLk{IfHaPLh7{MzE~{ydBHpiaBKTo
> zX3(Lhnx>FH`UVDUs6-
> oj81;*QV$0Ocw~>!0W^V8Z4%EYMg+#+MCUx#lD|;oS5RRc7
> ziP+6JN+&LoG#p{H=w<GgL?@5-
> {hq+B!1<(QiCQjjo>g1J<XP=BU)<6PR_2PQhg+`s
> zK}aomTG8I0Y)-
> >(>d6YxQQahFDvIN83``pCL5|wEn!aoCe_9E>XbMV}7z^a7g6%%Z
> zj<(!F%>N|jfk!gP`;nOkjgFqO^_$qK*a^@fx)MqdF>F}Hld&(Rp(9~kGPKf>w~5
> 00
> z02ZGVEWg`Vu3{&1lP^|^KdMNwOLuUQkD+2|MybYOq#8PC@BRFNYjTf#w`
> ^wImIT;0
> zC6U}Rd?16KxY>FdmOTWSnAEZ>KurI0Bk57Lu4|WmCqZ`qe)&qC6f;e0<#o36-
> W3)`
> zL`8_6*?iQu4Hvk>sw8O4kEkr#YnP?}d<7yX*0OZuGMm$8t=oHQ)eIePWE-
> J2Go1!u
> zml|0{j&Wrt{N(C@fptqLDS=III^J@zP;<__`F@+ft?_XcS5S%brnc2$H@VfCElkL
> m
> zIB{jtVtbnsj*OzfE*xnmG)1|=a~`yhb4`fW-2E|dI@3SB5Y=j+#+bP!Lu-
> 3BDA0Uy
> z$1&Y`>zEasloO5}szn>t@-
> aS@C=!<CLWxbm6lc)yB4^a%Q_0kExInW|%~&yj`kt^$
> zRxCv?&U{ASKC|7DPZ}9^SIX8rt9Pr4MP0rK7iF6$tU^KFFdOoCsI(6Sy=Q}3Upcr
> W
> zUSX|H6zo{%*wr{nu3DM-pyzD_8KkQJgVwsE?uNdp@-
> nZ9^ym(<nmbOT6M1d=P&j{^
> zlwVD}XIGlmI`w2}j?_G#bWPLOD6rHrUjmfn<pGl?J%l&89YHK>1WQf3#8|>`(_
> M$9
> zCyYB+N8%{g=?K$WatAH>Ll|kT(|hPIJ3ib!in{6}UwIU|vyxx4nGlNZH3&-
> AeHMYP
> zj$hb6am7b?;MjRR-
> E@o&F%3CKOz2NAThUuFT(Ja2u*VRE(i#w5UCEbfUB`!nFDuw?
> zof%|uE7IdFKfDQzp1^AGv-E*R^!-
> {ExfW6AOJI{WJAOwO)z27ecp&;<1i6pdjPur0
> zsy#8Hlp;&|$d4P`oB|^=tF&xDG1n}00lP1a-m_nzr&g!hRFlsSXNkliymAt74+s4a
> z>buY$5xJNDaO>FS7NdE-
> mpT<6SoL(FCMY~@pKBM7y5Ppg;&HigXi2bpoBjaWp7H$k
> z2(}f}%lqBBj4Il6{+j`~epDc3(5$d-0F9K*us%zzk{iMHmc%dIC{xRJEjCoCT#x>@
> z6@sgiH9bDgD7Sas>_IcilrYOKtzmkYWV~dYY0@lWmRQU5AC}3r)$fcyuWogGn
> ^aX9
> zE((&LFGaT(&q68T5PnQ7x$K5gEIGzbBYO$TihPfgfvkdi#v&h75cImnZpr*;i41v+
> zukoANg)rGRi>(<rJesz__Iu1^#}7@-BntV4$+?CscL;>=O(+t%@n1+r!ddw5hplt?
> zr)sCnr_id_2_c!UE1gBslH2JA?E6R;N}IgIxqi=C^r@u<@u>zmM)lR(yz*6UGX{*
> P
> zk|5by$8+b7AJ2(&A*xg-xUA-
> eq9o915<^mRr_wB<imUXo%P0{2#!6?j$>H_I+zi=<
> zy%KIqZ`y1;SqCLMXnNbR2{Wl%m~7?OxMkm=2}?OL)mh?b15MUoZ@RI9`&
> mgZDOriJ
> z8=BK{!=YEPgcpa;FxkNz>q>X>&g#lgkKF5?EYESTB}TV={cWEN6o&MwS_It$41l
> *I
> zt9Qh%=^fh8qi$m<)z2y5sBb@{!{W;RT%Qh42b2R;hd*?$_0XnzrJESLx!1KR;F@
> 8$
> zS<+54I7JY4J&;w>-
> W0O3kF!bCS!p@zG^va@BmW5<|Bex<*(@Y)y|ETITN=+pAXLMo
> z*8az(y=ucCvKM7ibXE1Uf)k~W71YotBmI`QRBF7zOJq@pB%1W=lX1tT*W@$X
> ;^tM?
> z=Ci;7Lg+eumfg9SWj!Q=B}%~J3iap=nrI&0Eb~N+IR(QB{YxK-I+m-24SJ!eX-2$&
> zEu!9)KV+n|$c-yvavufa-
> Yw}<4Xt*|_~9NBH9Yo}*waZK7jk$AM;oK`@9ibSpS21f
> zO39n3N>_G&TL?1tpsi}R&qAFE6ZH9ZY+Xu%mtB0==f*%w^w`0LY+W>>Y_6C
> U36yvh
> zC$gT=F)yP#MKJL{`?9krAzAiHVo#8M+MPiQyyr==!*HCYL>!(8&e;AGuAfFnbJc
> OM
> zwUp+ajfIqQlvj1kdG=qW_YEUTdY1Glcf057J8TUEqYy2LlC39Al(pBinK_Qf5NR
> @;
> z)Yr$|hap?I<&=kGV_uKm)2ujYH;aw~gUcpavF>K$chT+Siw1e98Knr))GW*(1sz
> Ta
> zXS~w^yUgFD%@5&ko?xIlwg*;xMD-
> crQBXnI=m>`Uo2&wy6K;Bu6bdAp*{WBjxZc`C
> zW$lh)CE0-
> @dr3fwXv^IocA`4tCtR%WQj=^T1wY42DrlqUWPLke?OUVO!m9d?c!bY|
> zhvTl<Qi=_@MDBBrm17=P=~g<80DEHM^q5E72{%Eib<o(HPSTk>YopM0J*-
> 9Bqll5Y
> zW0Wm7M|TvQ>$zR~UFhm-
> eHuHXqB}5MWf$Q+TjccIb?yvAII|md)PBV1#l$KQGn2?=
> zVq)xy>C|i5;~No8+%XC&xH;$>&K;?osUg+V>!QT(bH-
> sePZ+iT{+hVp6uA|m$Z<YN
> zf0WoxOM$;=RvyBNeez4^V3LrFt+NsK6$3$9&;H$Yh$iU%9K0yK_4eso{XOHk
> w-mmm
> z(&5fOACd%I2$zL{VO*t6AF&|;zU6UpkS^`i{V<bvY`x)P>~vUWUw&k@!uVL#?
> 3(b|
> z)-Ht}{J_==!SjwF&Q)IkacPf_ynYA=*UwovC-
> DCAhfQ^?u2>jRM9^t<Hk8ho93E$w
> zjh4fVO%=`&sujuW;Vds-j<SE0wQfchqmaQxG$p>yg~gGb>G{-
> VWp5Eu?)YhCVoIR~
> zEfF;&6^CD+y>vNyVA>!;ii9{^8De^Do3-~<NJQfB3K3q?IszRv#l5?Sju!3!I$8K)
> zUyZp0yPwr|d(#=*U(HVp-
> _Cg>NLgp)L>7s>3#7Nfp_4>C8n+e3jod2BX}vr$y?J6y
> zyV;|iq0O*Q6O_7=QWG6>UXz69KDZ~KyQ8u3ePBs++WFFWKiM!ci|>f1_37x
> ArK?yC
> zFFo9&sh{kdoS=QorG8f^zo1@7tr=Y_wkyHQs0}fV9E#-C0aKN?3ePP)lb)e*-
> F@!H
> z&VQ<+cDf1#ue}rVgIPGsMHD_L3d-
> (f7xJo%JQuBhR<wb9u?uy=E+pk)NK0<v8dl?g
> zN&H1Tvl9SSLPLvcVPykVvLe<jWYi(tPS_7w)5yG4`mOqCYmkc#=fMUov1J%>(
> UX+_
> zXT2-
> i<(27c{PZ|B_xEBSo7~uNc@nf6>Fwv${${<4MOJ{*aEvzE&8C%o+GgtUY!_?)
> zOA!Nlta^pB>$RAH`0Ch6<dHgMTq;FDUvm-
> jZD3md7ra1~!LpDgopqy_p+(@U8H0E|
> zp(}!CKUJI_UA;?$f{NHcCL$XZX51e%%zd!s@vPn>moFv~VT{q8VN@Zxs+-
> 84MZS*R
> z1o7F&S&XDH7a~QYBm{#Pa|OMwu%{sf!UUoR_Nw(+@{(?%Zv*m3n#1I<mT
> Xa17NXZ=
> zs60Rj#VcocR3+;od7Wja?(*>kT_wA={9G8}Hl;Ks_!?)=jz(8gtqx0fhoYmK-jZ1A
> zcV|_~+lfu$=4&(+lM*d2nIEdY%1cgKZe*$!SqmykZ0sCVmWmHMMYiS6mz|4
> ptDNR1
> zGYKglY_9Xkl3kWp8?Ac@H|lQjAFu;Gi(d`*7feruPmNFO7R|vtCKn+bu+M_5L5
> O|0
> zYtXt!kj23H3=Hei>~zo<HVuK71e>r@`p#`*kx5eM?fq*;UTH&lbwhq|sRmMGe
> +?Z`
> zt!e4?Nji0nFK#kFIJl5bi=#64wy}H5-K3Tj6)q5k(KX!T9=W!~_lD7Sfg^DAN{+b?
> z&I4wT7vAmls5|k#g8Z6`uS8b5#xgUM9PV*4`sKtu%S|`k@U=HO-
> 8`4CjzoyyPSyS0
> z8WqHPNf$1yqnQOTtm&?2ujxFoZ%q@h=e72clFIX}X1Dd+61XZDAnB0=s1|9
> M8dcZw
> z9nc8ZWlu1#6Y%r$X<3DY+VSa-
> wfy#?B93}xnOh*)P%)tbx)<pLgwdg_G|M*mCue1e
> z*@&6w*Kj#D4r4hlR`bWg^Fs;T>>fT&icHARpT{`#XZu_SBI-
> %m=v{@m$+Htwn<lik
> zh1(6AG4;{EGLF88ZSyl-J`j174zIriJOq+Q5Ki_{@xsFtP=)~u-lUrGH4CPgg{Ncf
> z1D%dYoqjIA-
> EUIs!+Fo$ZD&gZOzqV$7~WT}EK9Bg`xMSNt~Wix%Zm}6*&yvk(-YL_
> z?ptT7z~>_vEs6v-I7X-xF~!6!>pXZCu=13K#NCErhv=V+Lrh7aBTDn}0~P(Af(48t
> zjF>jwx)V$z)c(9eYmkh}T<yx*UZ)Z*^`xNw{eNRI;8HX~5RT#lm|`*h5aHc()5~_i
> z?h-
> FPdJ1lf(_A@0elmadb>BZPg2<<&cUM2vZ7pjVj3HpzU&gx1i!OduP0EQa$0y>@
> zw1#TopZH#t&JBu0Ls;EQE92Wwc!l%WRf;mJO)QDzuO}E`Tm3xR6Dpr90)_vzJJ
> 53h
> zEnKw~gh8CXXf(%>vZ&L%DnXn-
> rK2at>Sh)kxx<rQx*_s3n~v*ObJ;><hdIuj6<Nh=
> zfzzn$EcN&~*%Mh%Vk<%u_Ix8wo&mh38jlMGw%66e>7l}_C$trE$x$T0Hkxb
> Pc0}D$
> zS=Q2i1Sj0!Y*oqFa(*wFz5-lK;?!URlO84)E<~Pr6Vm-a-ZmxXc;sXk+Az0Z@!3~V
> zzr(#gMjC5FV@wp6P~J5`-*{_Tz`dM9AnMc(h}kM7-?GltdtzdL*DyU$-
> ;Koa<J~3C
> z23qx(ei*4^XZ+#7+XBlFLvej7)#vQycC?7gXH@aS=m{NWdmRp2<Xh_EJg%v{{
> NA$@
> zwfePN{q)wkEFM`*Fr8|1dUNFz2o-
> +DPD^NWZey42%+=Xp(DAsGRD}ebI3#&?T|AYn
> z<oBjL>i&g}hu|IDKj5vcvV%x@*F1B-
> Jbr!%h)(@$tvhHOmMDAH25aC{j8OxI=8T+a
> z1Ay!e8j7Wl{ahH`DlQ9!!F~f0!UBSE<2O?i3e!f}dZF~34aP)$@#7cWqWFdK<5#v
> p
> z9YO0c4-%l}${_j_E>DF}KT%D<X5lXVp0Y^`w1qB=X$v-Tz~!tBU_h{T$*vG-
> q{XZa
> z0@O{lBG?8bKYsRt4a9+vSMIJ7GYO|yzh%r})S>rJEBO}YboZhlaoBxq8XMIG7So
> ?X
> zPxzLo`)$w2AcE;l6bKEPv+G40E${FisJt&WsN=_WV5^0L^1U(-
> MUBMju<|=aTg5K&
> zsxjq3#n-YHa&08#!~gxD-
> Nr(+a*<aDy?&>7{$|AE&r*`WZyNinXeJFm)@NSd^_s1n
> zFRgx}i}%8wSJ`%|v65Yn4{G1waJTFrea{5-ohmO*=f{2502A-1p!+9&AZ)TTni(4{
> z9^Rc<kBkx`^r(FSU|?*DHSPS}j!yFP7q9!F=k#TQp;qnwSJq~5PSJ?_grIxdCNNIP
> z1@D~QjxQ!(<1kw(6IPt#YfP4h{q9_xZ>Y}``iK1Sx$4eBZFg~=Ru#7cdO#%|ZtM
> W`
> zKYx*uz&Rsm0nLE9;nH&8awW|RdsI5ic{8*DRkTUeNLA#cKkH#B;2wRyhhyv9
> m5X{D
> zJmhG;&`Z{ekj{tnOQ%?Xz;ELLQ_-0f7NUl*A62CKxgl(!Ec2EbF{_bsfs^(c)hcq~
> zvVn7Ror$PetNki}uSuA_vmeCxak+SN>k$}zdmw)i;u@9B4T0-
> KuGRBKjF6QKF0zEc
> zo!^M2n`lxT?P*xg8<`*>Dus4g?z!fp1}1w*O6oy5qEk)kS#;%**On>KVR-
> kgD~HQz
> zdbg)Y!ZAE(D`uj0LuIpsy&LLXs98ScEH#Nn6i#i*Ytsx_&9lk{I+GhuSuF?Yg8(a^
> z)hG;C&6%wM7q?ctH57=B6bjljXgwTL9InmgJf5ZIialtTO{x{kj%Al_T<r5fH67%a
> zHhOwg&bO==$jXtdHHWuzmo|Y%R-%-@J7%8LW-Mu``R!FJ-
> `u_pne@6Mo0mhGd{o1;
> zSDLtO_t%@zJ@d(yKWPU^pE07{F+c8I@7`cbx@d+>Cz)+137^y-
> `otubVTJAJCJK3H
> z#;A3g%u`-SEDj0H$`=-
> NJ1sw&CHYM!o5z{LmhZNej#VnwAG~cjGKREsUs`gEZ#QHK
> zY9}%e|EA+>-*I>Z*o5qZuejc&{K4t9z|8}!DEL5=Ahw#oJIxX1R8}Y)yPOucTB!^l
> z)a1*H3_ZU@JlAju;e8VGy4%dStrA_<icQZh7X8#G`^1zU<YpOIuDc~TVg5)pnA
> qE3
> z$hEEzzdcv97(W>0@<a6nKUGkjqj)(E0F>H#H_M!O|E;j-
> $f?w_N&j{vaD2j^9_Ko?
> z=^#(>mPWKx3vet^Vshyj`4m1YpT?BofwRoLUPb6*R%6tj#Z_u(QKtE_-
> VY!j4@`T8
> zG~=$FZZ6HA8bHnKL7dh0MWovn=#Uy}H4kWdwn;s=FOQL_WL86#=yPI-
> siP056@eQj
> z(WkoB4qCn!^dwu77^Y}Ww~xIqd`TrWGxkAx&c-
> zQBWeAK#3AE$zKB#lXSMW@JMHB)
> zio+zuj0d9@AhZ~^#P#qX5RQ$dftyv;^K{v1uk`q)ndp3(XPw;*X@)%5sg@nB>?
> xjk
> zG_B6$T`v;>fAP4S(OloS+H$N~_WBCk87r4rf4OZ_Bn+7R=r)ye1m)NHw1n@W
> o_=I*
> z#;E?v<n`$CXR21GTlS4}g66n<=^_05?)Prvq9V-<;e1KthxrfYRf0Z3#-#QkN8!b0
> zAH98u&5T=@12CmlZQHJRZ{5x0oHX+}<VB}5NMiuEK%euKlrNOzqas_sLmBPp
> *thjn
> zKY=8Pg7N;kndRF0s0<;s{1|RS^;y>tv9(0?`OrjD{qmf#S8fiw|9ql2?{k|3_DX|1
> zcX2K0=HaY8PHa*Bmg>}N%k5=J!*$m7X722NbgB4NuC!QjDy*%5TEhPwmB;;
> wN@Ma}
> zc;I%&hYjPe_EaL5f0U=lR~BhJnsZ3$^&B~IY7Re}r*>a1F1XbM`DX0(t@_5bU&
> @TO
> za2M|@+hN?HJtljoq|K~JH1tu3^(;bZgIsO?C0u^Fe@A1Cni3AFAuBUpvrZfJ6w
> #AE
> zVNx*(gv}ewkBz9apm4(ubWLv?9Tyw}=%LMxKx{%~e{%}!5m&qm924H-
> e%MdDF>SMx
> zzZ}L{gmyeWG);dy3jf;kH@q4?>$-UlXjm-3k@|cQf(d-
> dbStUaH0@@_3^KFe&`45k
> zY5Gz=vVdw&G&82hq2p-
> ~s!Gv=WvD*%d$p}z(EZDs*I>U<(&Z0zxdoj25d@X&eQ3p2
> z(sw%pB?6nz8uLpxz4&zfMg2pq^9343nm?0oS<YPzeLi!EgoT-
> fSwFd<g}k`Eym(G!
> zRjI6LRrQ#h*l$bU?-
> |l`m?8=5GV5ce%CQ%r3zmW!S`q{r{`!R3$H%dTw!lWq%CQC=
> z^BP0b8aE4hef1h&n7KMWQz#vhit2LNGXF|P2n>dVSt>_gw?c4r;IkWDetB`3Q
> cLSU
> zj7yD8WQvWxNq-
> eFoJ=gs%gq$m%m5?7xz%$S7fBsi#qGsw*j11$EG^AU6@N!AiUAB;
> zSC=WCHRPV5CpJ9|<<wPFRU)^8);5)<Js-Jv0vz{z{nC(-
> )?BaC(O1`mRaeHF+p5DC
> zhodxAL$?6Kb+x4G{i_bhy@yq{7CWHCt!ge0MJ-
> R6Th!TwEnBOU(Ul8EQfgjdWo?O2
> z(9~2}0`qhXgd#<eO|&v6vrMYiz(_Tu3)u2i=9Ez)TT#(QT~iavqphSKjJO1Ho*qje
> zIo8)!$UFO2ge_-
> *fFmIY_pYk83OpS&E!}@)Xs8TVDzC0Ria{KVT38R=?~wwrpb{xi
> zV|v)6q#WhKa{i%6F})hxo$?R)Wo55fVtOyprAO_hV#c?aBtl#S0luuIrDG%n+bI
> =q
> zg1fpo2#P#Kox};;7Bdhsh|&_%-
> b`;(8DygAN@rVDV=H%!pLDM~3rKP!GiaKv=}G~5
> z@`}>(80gVtx_TOV+JK2FR~tJYk)@iAuDfTBAlf!^Np(3o9YnkRAyyibM@bxeZB<
> !e
> zXt-
> I;nu;aijRaCQEB^*p!GsBKrOBTL%A<}KXJ%goYJo?{JYsOm{vw8A3i;obVqx_9
> zdGxJC#Nw1}D%<E9O5u}r#FANbT^1iJvkXJhSp^c*@>4iGO%8Jpa)uAB^J3y8N
> m6OL
> zOsbL$X0jq&^gF-z0SQ(|qM7lsw;ppOnW-$m7?-
> PH?``ULFg0rURA(2a+?8xM2NxSz
> zlps0<EO`|X(4*Jng59Df0U^}=c&nCG$1E<CF#Z;rsr5v{yEj3pKpOARS7q=j_~Rz4
> zi`SGvH5P#s&NWk4!Ae5-
> =Y`6oY<ZEIGz0=)TCy@y*MnWw<M8^cxg!S}&5nm{O=&nM
> z7W%$D_55B~{!4MD{=KC-
> HX)?@i^8qsZyMunPAyQv(vgm$rljT~4ViLGcqE^*>-Jwq
> zN33MJGSP4wQ?!mY!5gKQuzF-
> g?PZx^us%_Nc0)<3aCOB*lr<{y^rYOW2AYy;^UA~f
> z9ToC+44F&YPtvj@q%bpZ^k5Jv!WX)(qG;ADh~x%P^+CoH!E!&UNOWMTwKl
> >1rM04`
> zH?xJsLdRaivio=7A302nKIE&QZCdwfE@T|us;#V2dMKmDr|B$B8%K$<wb}nju
> ))_R
> z>+kxXEuEu>S+SxxcFt;@8aY}67b7Vxsi;|2``=1OkZ5tq!OMOdzYB4_Rd#Fm%1fI
> n
> zD_sSgp6U$8>(JeRv=<j<wu$}3M8$Q`j)Bu~slkQQmKp%49N^vRi5))CHbm6V%
> Fcd|
> zJ^0i_Dn%If2Y(H%tTtLgJ+4AoM*0TnIPsr<06Zh8cHDJe)KIEKH}-
> yS1a2FedmvVV
> zVn#(EnL3q=cmM)sQ6ft#_1$i}<UO5g^W<uK#*1XHzw;QUugYK0HN{^Vu6yt
> M2yJ3N
> zcq{Q0>8&~~rKP`3-
> k&erNWNBAS_X=2PiK8rtF<xc{B%h`r+6)#owG4Lsg8K0$iQRk
> zOrXS`(FbRY^;s!k%xc^ds%<UxuLfHB7A1>nlq-
> 1r1@OY7+2DZmztPM75ybwJLi(TV
> zBL)WA|4EyJ3;WULOo{$Oo4dekRERJf@$0Tm#VcI^7BW7XdRg1Av670MWq{b
> ;BvnsQ
> zt&X&#jZ`M_&D_nC#KkXa$YAMHgwBNG)83$-hve6Pqay_$>VwJ7G-
> |HVEF5Cs1lmoP
> z-)U&A*;L+iv#MVD>H#n^;v^L>%6ZPzVt-$Q>fxhYXBj(w?6~lp%-
> *xF?ZG$TwK^!#
> zsmlafPK5vhKGsO6*txw`0nu6L_K;FM*79<OUcCJ|FKJ@4V)M{NZN@S~fDW
> @l;0si6
> z1qDWhK=V+^ref!Q3iwO-
> oYSK(j?TRP$mUDLtTp#^MIYqkJ&^&6qQ%|^B+#*iFswyH
> z5ROJJZTof<kpYhyAj`(M6*aggS!<1Mx|N>aTqDFQAAi)`1nwj(y_x_%3mXWxD
> ^+gO
> zgjbgn{BIJ%{O^P)xY`)v{=f3o|Cy8Hv$in!zro~K{vok`lq>~nMJrQ%YXd`E`hWbg
> z|EgsDv&(<;!2Uzx`nL-
> 955xBJwf~OE{VSmVKTvW%Qrv$kZ**+`4UJ=9V4$X@WntCC
> zWnji-
> V8dnkPhX9Z?#FwhqornLVEY+kWW`ngx46c{^k2uA>2aAEasM^XKkl3Qzt}k3
> zf6ajVKYa3I$o=PW{=M<9fd5I#zqVOf*{JE5Y3YCbHac8Z#((e3`V$Vre-8fpK>rTt
> zU$g&*Q1`D$eh595pHS&&e;By`>cIVz(EpbAe`ox^J8=I>^?xXEjQ=+X9NiBBM^
> DT0
> ze@5W`vDyAj!2R^lrDmgNWBDQASeU69nSZiFPy3TcX0{*OjgFR)g_@O#j`{zKz
> _I;v
> zp8gjE?w|Mn3j)VT&&0y~KO=DTbSx~a|MgOM(c$`oz}=B*9dFpXZ_lf<i#wB?P
> R;oS
> z5W*&jSm6o~^7Uo;#MaP|1FZrf$*jf>MheRAf&3wr{GC!`vLR^LBa4ZsAjJFEZ~
> #pp
> zpx|Bk*a_5k_VuUe{CNxK+Ve!Fc}mH+R9><8Y{SY2zz6xr4`7waIl9Vq>njH;#}c;3
> z;do%zIr7WK;{>%w&muv_Y5B(8%t7tm6<}}R_jG2w5OlCL*Z40n5C9czROjUd_
> p3CH
> z7aEmqxckQap-5~i*YOYTCP8$O-
> is0#B@+%EHyXa+TIVTD`<?mH^j|?519V9GW<y(#
> z88<K#f8SUEZjWN;i`~9#4{oCY!1sS8U<q$Abr@YlZBYPN2m|OP0cLZ2z6=|x)mf
> y}
> z?w}}EfWI8KT0_9IZn?^D_KGK`sY`Gv5Y$wn`;I`}lwP2p0d7j#oXV9{mkKw0j0sEZ
> z6TN(pAohsB`uc&@<^1_OyY4`87e<~(*dUL{%<q4Lw@^c-
> !%Hel{I~E08xpU0hq<C1
> zFt<Gh;MRfya^Pv6mIwG&zd^nQcpZk%1sV?}m&Ff9m$Yw(^g)=EFYWVBdTq3
> B2M(Gy
> z1VRGn4lyPKtP&oiu!{yJkhIRGnIH*j@3?J6aBZ}KMD^fZF;e<2oJ4i+o7k4pP=*)
> m
> zL*JW(1P?JZcyQwQ-
> %vxJQ)J5K{g>!FHiD=97x|Th8&wHoo$Y3wPrd;_IGB*BWwPS#
> zL&iI`S9Fwn#yex?Bp$yR7+tbHnFE;OX(4u&qhwvR@OwFeB|KErzwk|DIV`-
> ewiuY*
> z?hc!{)fmgRhLWt_u2SBR8O4IifK#E>=a7BB0{E3DFWpp}pd@_t@RYZBx{SE^P}
> ~68
> z@U;0nH1|etsxf8gqj%b#a6>E*8{~Oi7^doFHh!7YX8X(F_9Nn2U`fDF?PFi~sD>
> %t
> zP$mId2HX7dco4QB^N5N5DDU|KC5RZ}-
> i|xeMa<@Z5gxE|g4bA4X6ggNboZvnX0@i>
> zMtE-
> gz0PbO$=fx>j~dOX;%~!}jT4nU=o<C@MS+Is2DXkpY%9jLlVXKta~bOyXez>k
> z_KttY8tWON15}ai!|4gU>lncDf~m%vR8KnMX$j(M1^o?S3+V^33(!ZPu?1TOXX
> c85
> zsqKHsRM(L=VY7O0*K5e{A)U1N<#83uG}2bXSjOOt_bC&g62Lg9)ItSrx{`En43w
> -|
> zMN{c%zq)6)8D^N;<v-5#npGV?zM%MGTMPDf$2PK`XVIuv<-
> Bq&5e1yiSxgexUlTV@
> zncS>2@!Dq?c}}n#N=n^rR+%b`H7f8Xpt>ZBtZqv|Q?=uNL-
> @oda{FiO6lNya^Ot8p
> zbWSuY!fk#_mk?$DV@<zF|8JQhGe3uoary#HcPy=bUe^?fo?4|Es*&*in}&(ye
> #THN
> z;=C3j4<VpB?F~NT@l)^qWx$_GO52Iuv$k*3*KeGh>`-
> +b$f9l(nBe}FEa6ruQg7VV
> zKUqo<hmJo^A-%${Iw40;QyFNW_}|ma0iqIqQ+YtI6=2}0P=p8ZFyo-
> )R!NsvVi(_B
> zcYu`rpK3V`ymdApmIP6PJpK2-
> e4nFRo)zsJA}2Iy#4B4AwW^0Tj9NAYDe<EOJJ%y?
> zKzGAQKd^Q&5{5(TzV=poF6%wGb0URQkYkr`Rw?dUahCA3w#c)WM@@$u?
> @BwgsH=xR
> zEOwtXxz%N)ZL!DImZvWXnr%0P>^O#}yOy4o_sdVR|E}M%tU}}X;K_DM36BV
> k^l?84
> zU5;Sq;(1^@J~Zsb-(VZ+x<udbx<u<)y7=Ek-Moik?K-
> wxJx~~%$qyvidYW;Gvt_@u
> zuDC^od7&aS8cUB^+IqZVViB(Yl9>?rOa~yS*^Yi`9eb2f33dzq82G|ANZ*lqf~pv
> 3
> z#R#;FwOhh@vq>K*(nlYkExLEBtdXm_9{vKJS7k3^!Se#204I`A?ie-g13jp-
> CUESK
> z!2De<dsVlh=fb-IjpR}N!fx_@1L|=td#qX3deZ<e6V&ZXvPz_3k5F~Xg~mfPj!;|)
> zqrG=7@ANB}bmz?l14xR18!C&GM`^UfB+m6AfU<uCVyk#hesvq*_D_>G%yT
> *8O#wO5
> z<vh)fTpm^I@EWwgV%&r?arQD#zSoBjJu@tF=+cdK-G?<)aG-
> bzKTnRAEv|~OzsfDB
> z3%H|c>_qk-t+7YpmtPhdLN=a&2Htz13AZS_R)fecDzgE0&ZyIV{Vmo!J8D-
> xQ7K*l
> zmSEaLO<XlFJNo*r+N(Uf#|ens1CN5MKvIQ2-LEjXL07-
> ~Z3E+3w}*A$*5dFNVQxD5
> z`ajY6WS-#R)&&1fP4lKi-q-*g(8~iM&^+08YjC4)6{iD--A$f9*C)$7XZhjl5}2%@
> zKHzi(gPI~!BEIEpWDYX$|7D-
> 3mk>di;w!b0<@QDnLmx?AU%kcTfjX>!KTX#`Ecch?
> zL!FljAd$h2m9p@`+Y@=Hw;J}!`^$kFi9UuTPM3+aHMTyguK~HvR+Ab-
> Fs})Gr=jlq
> z|8R9q!I^cz8lFrhwr$(CZQHh;Ol;e>oiDa0wr$%v`RmlVIXBO$?u%W!YIp5btGn0
> R
> z)31QaqmMs#Pe4gvyn51lJbJv#RQFL+x3NcLwTaJ>&W@Rd8%l6S8;DOL_GNTB
> pjz;j
> zr)VdkY<<=ZklD#D@`AF2RgwJ@GfKnj2ycQAnKGyZNksIlSUCb4ptsN9p$JO^7a
> }iU
> zR&e+A*KF|1_icZHePC?R46FPQ4DkBZs$JB8@y=t%YeAoIv=h;s^kKm=!g&oyK
> fK<}
> z@MAXvUD>f-
> !||m<9bqAXr4=jm5kEmE05a{gvA0u}tPqIbm9HOa{IG&8lLO%5YPIz)
> zeDLevSoRl`7rW?>l`wp{-)hG%d>|X!9N<PKU(1488X>Yo-^qETUc0W2*oSsF8{-
> 5S
> zwJEQ!&}Tl*xpm(0+P<4#`Bl#FZ~o3c93^-
> MGZ{U;df%1YPaT(*=E;Go@<(}e0lnS*
> zPvFbPx7_Nz0(~abN>kg@`7C}W8+?I4aiQLn0?-
> XnI;m=D`j}vvfv+sRhaa@CYIndh
> zwV3ena<HT8x7cx^y+9Mgj{I9dVAfo*11jFtJKjSK95hW=a+O(nJ$&A}7dF;zzkQ
> B?
> zcG_|E;;+lP+C-1uMGrnDbJi0Qmz!U8$b6S!7LxhS@4rd-
> H(!74@&vhk%f${=L$@N3
> z+LG}K_z{J5pWUMy`GQaU(nJN)_65%KKwl$>s>swEZtzcgBKpGU3pd$E*tc-
> TD6YaN
> zW_Y0Z*#R|C!JdUb$JHmF!)98n!=8>KXPnxlPA;{t;PZQaN}Uwa-
> ylH67k64=cw!$=
> zEpUW7BzvpsPxyP>lc_{W`d>zqZX$VUS5fw$K*y_5w$e_hb9{mH+3!St@S$JV
> Lw<;U
> zA8rl@u)ivdbCHg{e4uZ)hpXRT^>)sUqL)6uYwfM5Z|&H}!5&_DckERz?(vMWR
> HNQs
> zwUDQXJ_b=kwPs3{$9<XK8XBhmeU6Z)d|nPT@JST7MKB)y+;!6fTu*+g4W7e
> KqrvTY
> zm-JS1PaWS2&Y~5-
> (^35?dpCep%7D~AgZ+p}(F+t5;~qJRLpe~mqlQQ@B9^8)^>XI>
> zRKyR!FAFv{XsHu+S9e!^fts&pbj89N#x<&3oxku<oqnpDUd5<a@Rs_}<*uEf*
> h97z
> zF%#h%!infWPDE)$fkL)IrX$x?v{v#iVy}9kaq!)<!z~;+l6WBY_{eF=v6ibTZ7l7b
> zUsSqCKS<yA=xdy9T%__e>U6bBSiZJ7$Jy!Hd=GL{LX=S?#z>@=XdzZh;G*E6h
> +AN?
> zaGyId&ajqzdg~SQ;mjQ~d*txB?MBusp_^9Q>6m9*W}9vueXhG^*lz5u?&jRK
> -PYY+
> z?}qaM^T~bhzDIi@@niFA_ABy>`i`03vp7DTIz9oork<KiAHt?W(YkeMI|E)ER}aT
> 0
> zp7nG+U&AMMj}T~rX}+OZLNf;pe1Tz`8ILW;SRMar3r=-
> KW^obrqD=i0nxa9=F$=;_
> z*K_648dI$&TXniXS?Z0cn>Uo-
> Ai_nQ7U4Kn5sx_IJJ<jW0>Ybdv&n|{Z`|XYFh&8`
> za;4<Qr1-}<VpBHVAx@uNLS0m~_ES+=KT~z19BVi&k|sH(bM0$BAdgkwEPXO-
> ?XQ3j
> zHV_W9kEyb-E_3ZOMze^HS4;x3CfYU-
> ILLIad;te{c@vGabb!teN2mKs8l8A2CywKO
> z?i^1-
> >tehaA3@a@^iOb>{xHN>@^pb8g*dilLtpOHReAg*1WCAJgFD_dkojF%bg)*z
> z<s-
> VxSQb3Xuew+Fd%aA!yOe)cnaj*}HomCexK=sy+_kTLN4Ng~zqVC@yq%~WE
> B(BA
> z`;q+cJiWJWx4*hiU!W(uBI*zg#%|xgc`wf)^rpGH-
> `6MiCwjIX9xG~9eI7T|q=35D
> zdM$cfy;)wVnr`$={78I~-
> &Mxz6O4FbP_WOPs|M;fj8;eHVo7i!xlDOPW4`uJ;Kbzc
> zcsw4kWL+LM3v2OwF3DpYAF>PSa5r6>MrLirB4bLhWjN1xGEOWVbsRr8A22;
> VYbn^s
> zb5(1Uc#FLi0jdB|fZl7voyMUjch3}gd&Gn=yr|<Q2~LfVoIp=xFUzYFI+F-rKluwB
> zUVbe7vz%oL(aviBTb*we=51J|6$9*_sBPnyMmVbD-
> Zv2^pRalDn!<<1CaTk<?-j-S
> zQkGWTM3fzmG_d>NbpsS{FerTv>fq8{5_ce-
> Ad=Cg&>aSLFuuZMU6{xn8Fo;<KBhX1
> zFOct``x|WQ;OAW(cMQ>9adn8o9bj~r>ptHXC~t7QJ|K1wqa7o5@X#F;bg1vYV
> mnGN
> zRNes%o}j*ehv<QZ2XO4sB(H_bf+grNEO%_ve$VSujz2)N!#w9XPX~GJ`X=40?
> P{a}
> zHyY4#|Jojioe@`!UkpO@rzh+;F(<Ve)x0D2fYihnMi!P(h9^BAoj<^6z_poe6qaE
> Y
> zmU2GexZ~FTt2YL9AkyG(O`JI@Wz4iH*piSsMrGa@V9Zrc^k|O&n@D0zu`1x2
> pmU%y
> z$Nw<Mk2z-hzfyzjuzq9=gOX2iU4x<*2L=tXouayAGXE+6Ilz-
> y2jYj5(B7eXWDdr=
> zC-5VVaUJNqz|i)w-OxB7!QCbh-
> {E@XUXbC%!HtQTGkpstNI>2q@NtO4#>bB7jgcKF
> zt;i@!U`mi-
> *#DMI7`VakhRGd3vq$a@=;=#6AajiQh%#H`8|xYMaP<F>q)pf!B|*eb
> zm0+?UAV>&5Mwb_)Kp`(ARFNl9QD9k&V^x-
> NQI>;Q5SLkyreO}zl+dy)bWIRxC=cYc
> zpmv#M$CN`dCv;JQ^GWlxK(r8ZG-
> n(urdSaBWKJ%bb<Pj~c1F;l&Jbq$lyK*F7f<^c
> z9*qh$5rooj)Q{A!xog4Ap@*!C*aA)mwH|cYFPpEhLe@#pNpyh*n^)sYjg88S){
> Xo{
> zn}s|DZWf#ylzTe;ko%zb!2KDlo7XcJ`M~BGu3PdiKy(I@lUoOz_6+2SaJ`qcLFR&
> _
> zCEdnAYjwiC!rDlnC3|sqtTXV^xMQW#eTunZ(_Qx3<bB2J!ewc2OW&@cb!Gh
> m=ZV%U
> zwrl#S5pE^)N6zu@XE2U&=*q}N?FG^k1=l36k>7yQnbQ*p*LX}l-
> KyG!m21{#w$DJf
> z3E7Io6AssqY$MZ!*Awu2e74EAK3~1lh1rwb6P;_$r(ib;*$T)LRmZ5WQR<4x3ap
> DW
> z#8_Z<9n@C;Ng1wd@A?gXXWw;o5MzF>JnaJtC}dzzpJ4Ee9{R7IIHjiW?Z#eB_
> Q;G^
> zLT*V&0}u+r`7t7QU2aiReqcas7Rk4M;_Bv)2BSzBatOFk@Ols>YpjeB(~381HjVy
> &
> z@fb#9Dz&2cMBfq0GnG<*XbqAx8arxsr(})u#yp*8))-
> Q4^4$1XmBJHA_INMol^=LR
> z=il?F`m3p%ob)6fxNGV{zqnU8Sh0A?+{H6+*0^O*-
> NrSPX$b`_H}2%gJuyMa`)i@;
> zA&TELvqfX|($VpL&2990rQ9hsAhR7+Qe?9o?U@_^IHu{6w7c9at?IPv`2q%o#
> ne{d
> zFg~$SX@#rAg(VV=!Q?T$XuCzaYP+uqPqZZ6<}o>II%T>_=Q!Vbzxq$d5Ezb^+3
> qVK
> zI1-gk<L##5kV=*J?!+jTuio-
> 8qgjr(`RdecX_@zZ<DRaw&0xPImDLWRrTb&NW#_5=
> z4TsCEYi*{@YkJG4wrlHQIMc4{bE@OItLHlqj*s&uH86B%zsL9Pba(p8_28Z^2KW
> 80
> zvexb;hRu5ft9u`2`!?j-eZZ}Amuu?==g0lcv#pR&)L+Af;(WSMZshykxsm0%s$sKk
> z49Yk+ulU)WbU<7?lAQ*RcO2oudBJKGHDt|*`M_B%TCGSaOe+67ohL!6f=9s5
> CGIuR
> z>&bfHer%v#|3w94Q2-7#S$m!Iq&y|lqsE59V1i+}If;;_n2IKROz9Vh4I>Xv0#6_C
> z&{z&AW04(5Nh%7NnrDF7p|c%Fm!j-B!{sBPe`%<bc0HMR1rJXE$@~b-
> se(?_rp>Zt
> zJDD3^wM8PtI*X>XB?F2x@v=2pOpUOtyjbkiIz`z7dwCuepiPXP6_7TKPyXTwjf
> X;g
> ztu<T7K6PGgorpoaDMlI#F6h{r$AHh~e|1MMAo852h&#-
> bQwy5n*<!{@<I&dlho}O$
> zU16*+WLp&hIYjM_VG;<tmHi~mrT^6nm8;dcR^8pjCabO})TuMnER|a01cLRkx
> ~+X_
> zA~!jC1#C`HPvS8F5&O-
> +*wDfcE=KfNP4&;1H}>3sTE7~K#`ehpZfB8a09l#rRSLK5
> zSdirg=5hl5L*{9<6QF4L#=-vah8jaY{sIPdm_!YhE@s;{nB>!RX+$z-
> #mZ{U*p@Aw
> zC~DJ|UKEM*b1{5Y?d%|FBdb*MU1yhimr1f41cdMe<FqebnRq{g^KRrMrq0+
> {%sM1j
> zGC;Xcp^a!i@a$?)N;=zvqZBTJ*BK%8BcP;<^YtQjIR!d4h1|PD?=Kl3OB;cu%1#C
> h
> z*k4~16b-
> ?|Z9^%`NR4B=TjuBibd3Nod>{~X5$Jeuc{4txG3r~JYIidS3L&ab%HC=x
> zLVWFy;NXI90zw(sl(Ed*ytD#(mjS3|Q5&sHR7h|e709J2yVH9$V_r4#j5^0Ae)^
> W@
> z;Z)RH;{!BZ$3e=)k}N80rNFk4qLp8}7t>}y4m;Pv@0l};?Ee9v2H&+%MSGM8q8a
> mk
> zl*R>nD$DcdCqadk5}Q|CVR)!oc5d+%TgX?`5L$xg?kh9CWm9ub=pXksztS!r)TU
> ?K
> zhX1`c@zvziA59?1usV~R`9-
> 6lm~cU%q1a{YF64d{W*kf5Awje$&PH2)s<7Ff53{=|
> zwI4tNr?y8p96x2FpL;`$4guuWCZVom*Ki~b)4%3vBpst{jF|J+@eiaxJ{vQEd>S$
> L
> zZzp(iR=R4ddD_x=vNM(tY@`-FNZcR*`0s_i#8D3j|5iOsJfq`HK4mlJ3Fqe}lVcIY
> zM^ZCck9d_furPYfH1M&V;lDP7#Duuv>_E5R&Uue_+{K=S6lSzBYGMDNK(LC8
> To63h
> zIKm=9&<4l;l`LWq?n_rnO^i~^fp3D8ZVZy25Wv+-
> $}b(Z@p%1#Fr$QsJX_S{?GbSy
> z)tcgU#!b>6Qgy0N9<bRUGslPWuQlfXX_9Gd5DyJCr1?Fhic}x@c&CI&x?~{6t_
> w$i
> zd!g<Y8uyEJkVMch``>1hn7g#?6ZtjB$hl_e_+go@-KYhnB9u-&YnZMd(r-K)ldc{k
> zSmf7W=26kS(FKmQjDa3uI_ka!#ElY?HWn#+tCSt;l)t|}FNV|`(btV38uLWcfT$3
> b
> zj4}*TTR0E&3$w%}CM=K*LC75Yo4`E8>K0ULS#N%Rq0|hHOlDnEaY}7+X}?Xtk;
> (X)
> zw{|Dfo5V)rQWG?;qxS!>xLD#eOd+g75jWlQtdI>tg)@>N8pHmH+(;wSN8aG4
> zu_JP
> z2=V2IzJARGrX9Zwkn_S1`GxP;Bk?H57K+0>)MDe&MU;}&HyS)hsmD@CKF_q`
> V?lK1
> z!FZ!SIIV#PhsEmqBJYU~0>a#uJ+|H0W<orL*`G_#9$dTC-&A$*sWR-
> }3n0X_nGNcX
> zkzY?TA7H{pXum?(L2j{{AQIqvVphW2!exi(hh*I5o@PL9W5|6ouMQby^ol$3i1
> yw%
> zfpZ1xWXEP(I6=f}7X*maat^no^zyZOgJtw;?mOz7mAd$bY&HTv5#9*1HB)z5kS
> $Ic
> zivqGnM4Rn{jOu2N&+a_PsLr1}H=><MbSOCPNpcrN*YJ(s8`h2O;JJC_u;jYU0!v
> 4Q
> zQv<^$g@TKvZqwm#Bjy6}395=B&((eF%0QL}mqiR{d94nWS$M4ukay;ti=VQx
> D2wj%
> zq5Tc<8WE20Cq>+Uq4Sy%Y((1Q^?y2!DF<1AGtGD};ETX0{vcXfArP5G{68>?M0
> 39}
> z|B+RQMqU*E4~!x#ipoU)VFKB^`^QJ4ltd)Lq4)!Uv_cH>q4<Ab{67x?L2wW<q
> M|tC
> z|1RPLWB*zIEvw@3(f@%)$(TrlRq+Qc(*NgikLwRa#x1%T{SWxTU=-
> Yp|3Q2=o<dsO
> zKoAm1G0pft#PtUulcx6*Ur+zMq60QX4AGE75j(9Cwphfz_<!~U@<{w1yCQZe
> QwvmR
> z#FjvUkhmkb1nd}bXxssO0=8g+5aSpDF-
> H(_Xn|BNB~xI*%A{yoAU&G@JS%|>(%cUc
> zrPqlgmwz6QB^-
> gT_$Qu_T<Hg4$O1*+<NtwBM82d<Bto<3Kcp9+Qdq|S2a^a*4f|38
> z`-pFV{8wyi2roaSvU}ScfLLePX-5oWI)sR^8?R;Jg?9yi-)mO@V>-
> YaWBON5R6QSt
> z97t=#0^mMc#FZJy1bhIVl%Ps%CFF)PKv5P)_yv<ddR<ClvW!}(M$J~Ky9T+HB9
> ^LL
> zL7_ywcBRB!hrm_|TTNb00ef-
> 66<G$VDlXUQ<`wBTF5wGxl2R};+{iy6u65k+JM$c4
> z-
> t$+AK<r8UTC+GC3}X>c3dQ+Mh(wxfusen&$3#ep<LfitfVgY9%ZL<<*BU&WD^
> 5Q!
> zH{ew)fm6j_x3S>s2(0+rVR5l>fis|ep*txPjCDT2NywLubb^!tXng~rzqoo_8`D%2
> zi53%K9<NUX{*6e;2(|OLl&^+io+(bicWI___UjapcHk#>2pE%HZJ-
> XWpKXxUy&ZzD
> zX&!F{nk!{<!6~TdSZWCioh!n%MLrngw_%Xszz=;oY+^rGI>Ggu`kZf^hW&Oa_
> ub+I
> z2D>w`;Vl1)6y~E)ku)kk=5j?FmT<O_?QVrqbQetqX-
> *_3C%mIxHUjavAWn%M-*nY@
> zHL}4+_zE|wjvPD90|PxPpa+aWY_Z|B&K(#Xx#1#$xrI9&dZ~bY;9lw#XjlJEaS{3
> A
> z3RrGmZ%=KtkT<wx%z8HT2;+PXL`SoZH{5XAT)ir{k!>q&^8$o+yaOt|)pd`%|8=
> Fx
> zAyG<zY&J~j#NccNRNgEC?4DRgm8c!2ou#gn-
> N>eOr}R$HPuY6@=}rNShDYUufBd^)
> zvB$tm+vcBC47tm4EOsnw$ZUvY)JQLqRwgB{ri>gfVk~o}jFv1`EK7^1;5V@W$4
> mYF
> zQ5>&guqWR4k~n68bSU@b3lRt<sf_F?Krc#OT>RM)Kc_!0PL8t+p?i|M!Owi+8
> acKp
> zKBEX(4BQUF1uBV^wCmgV!EYh2!P{iWMKD2C&n%9{0*@{~%irH=?u#93*NT
> +ZLtTRa
> z9-iG()qt4wbQ(M*D5d69ny|;`t}K@8zs)yQnF!IRQv693kcmVY$ia;uTSg7T+grFT
> zYFYG#I~2Xpt6(BRRGB}F`{~Y6Nl`OsN_JpM{twg|v>e-
> jNrmm^#?)M{{noTiEZ)_Z
> zc*IpVrY>6)&KHoaSD3oa(7$fOw|A=0xw#*|{_-nk)F$R-r-
> GH7L0qeI^Ey?F#7i8+
> zPJ}Xn=WcNBFlNKndTyA8jo@T?3<nU-
> txkXbOxkUp_@tK6lsbYqdTp~2&$`sK#Ja?6
> zjr5}T5p{)%|9DyQ&o@$!T$$_{Jz5?|o6{$YiQO$|q|xW8=|m>5$8&Jh0UHhvCo
> 6@!
> zot>Qvu+rGIspTjCiCSx$s@;jRb;giq_^vf~ve)ja*nvAX5J`0o1w|QAgJE@>Tu%x
> 4
> zmDl)tO9KS2vhD<~BGTQ30IxDER%LL6G70jq-
> ZSdhQBSvC2V|3y;cv17&!VM#NacQK
> z^5#WJMvZnJR)>3b<Gw2sekOn9ZYM23OFp)@at*neVo#;ataH5AF1kQvYE`G
> xp<}GX
> zJQ*VL-`Hkea&s?MGU)m<4UFeIT=`A`Vp7QWZH~+?9$*cEXBcgtZ&EH9=)1-
> iLh0*<
> z=`ogfzC<RoA8-
> D*(l5zCj8CaR9Qv=V8s$Ct#i3;NrIu!C_=AQ^OPAOXdn8p*dqiVO
> zyqMD8#DB4qn9*G*EUF7sB|OULo41nVm@M#ecAVhpV+xth8V=mkr^@8+Z
> eL6+eN^AU
> zhhLKRIaArd#LA|{6k~i4sMFW=4U6qeGLv7MyVqEoUm>YCn}MJ<v0fB3Q=0|;
> mitpw
> zNA(^oNE)-
> sM#er{>v#un+tbMX`JL=fA$+vl!<5;?_z7uLD(sa_=*HLVB1Cwogg?iw
> zh>^A=$xI_js3w~zK~HfN;*P;8$bE103uG6m8Xgmmx9^<2WV<k3HjMv42~2C(
> jyT#q
> zFGu?~m^N{J5za<H!86sH$$B10POrYtuPQ=R=+O&$cv}MK^*=iXcgpUbFVGu*
> V*8zT
> z)y4vM|Ec%<-
> U^On53IdGpA6+)@x_k{Vd|GCgXV*vR0r3DUU@^{f)1U&xkk$xFuGyy
> z6upAd8&s&i!GBWwB_faPOSA!vaYL^~fva#GB&H9i5F{2dQuv<uN6H-
> kL*vEjMu>zP
> zPRl_SXl~Fm0PX7UYhB17<h9`$ggcO+uvlf#)!sS#91T4<X+O03@626bLxRISgj?;
> G
> zts4sDdUWvtj_6RPBA!zjJ>z!!<r_45WXxS3ZMttOL!nhs2lF!e59b#d=xRL@%!br
> X
> zf}^krEnILuEME|3_FUJ|cwY7?aCh*nzn?cuABj^C)BZU#cw)Yx#PD#pL?e8K_0B
> )X
> zd+*;i4$Ug;>lSsm0c}Jb25=WbTiC(-
> _6h0|*ry_*ablx<<uNe@V8Nw9IQ^wjb*XXN
> zV>?2)GQnsDsUIm<_z3mi){3&EaT3NX9vRrB0&hg0$>l3T7mQX2pZWXw6T7^-
> dh~g&
> zebw|(NBDNRsoP2)Ag}{`yL$HiY2spxvR^HO4tGQ<^Te8>RwtCu(R!$F;IZI#bx&
> 1T
> z9f3IddSOt5#pAo<^7kP#M)|2ic%gbQeo+lZy<ea50oXpjiuXj^ad`W-_(JJ+v1s{L
> z{LmPKHew2;2_i@L4@~Z0U(>u}EC0OGg}detv7ZrpvfZ5uyrKJGi}8)tGMu12NW
> B4n
> ziogdG=LgbjxT}Ig!t@jDa+w<XE~PXZnOK8E?N1$qu|<9k$?T!t%G_oZ@H0p%6
> tY))
> z%X7#*DoBY=s1bliLxBiAl6O!h6={ryo9%EUz2mfj;o*yY2Qcx%9y_3E4@xOIY-Ni>
> zP>^(u={sU!$lww~jTIWhctmiE>Gq-QV3r{s<K~Gp@!`md&3iZ#=!m-
> QY}>Zy`ijQR
> zG_pH|#!>$Xa_y(N^U4Zu3n{;2qrmO!`PVP7i?o|$|C7||IMNTd#>^aAYKXQ5d
> spvN
> z>4f^uLDECZ9E=?@t=AAhp%v*QlwuI5m$;2q%)iK^R-;w*t@uc-2pLR-
> &H@~tp$##k
> zy3ohlmZ-9ZW(@`Wfu@LRyZdz|<hKyvCy)={@56B8nUxtm+<-
> 1y9;Y6sCmzQ$lhX<8
> zgsjY88;cXl=@^A;W;dI;Ltjo>Z(T^Q@bTBv07|nk*_m!rsJ#zXlOJr><#$}7`$4v_
> zM-Lb-
> nOhu1U2qmj_Sh$J?xeq5xz35)k$}Jp$9P!AhTs&?)Gu89!kwq@57}(z03&<S
> z2k806_ZeQ6UdoNx>Khgh2wDV&4<b!Apz2xsCPuiz&S@~)#|ruBqdeZ>0uX?b
> 1H9|a
> zwJgOwiq0xEJ6KO2h69_VGFwwoso?%9)5W^IZySsyx+R9SU>6n`Tj6k)FvV)9M
> @|O}
> zi%wt*F<5guc1SOI8(#Gm(XPI`&P)Ey<PGr)yaipnv}5=}fhaS+2vBFNAJvXi1M=g
> |
> z(Rb$*-
> +Pd#0Ft*{)}WZ9Jl<5q{7~|qsYB>XhCBZ(EPw|tM=<;gv{)mM3LOG(;Q5A1
> zVRvg#kn~{Jn`>`_YDZR+;v(>B5QL?y(ZYPBLqv@c#LEL7&<gwLfp<2{(S+36XJsE
> G
> zzt@WrJ$S3KB1duOf!?z9m+J+-d?Z1^yqReSOuN<JdC;5-iTJ_-
> MYEbTYo6f+7J!p-
> zoct5?Y0&-MzQKL;kYXpl4nNeycXiCm-}viq5bn5w)AFz+2<h;3SS-tc5c3jWX!7GQ
> z&XBIeN1)zsq9BYsXmWHN?2*!=8tL~qHG4(J^L)zirU>o;_kO_EG2Z(z1$v@rf3d
> N{
> z7t0t5<uiDJ<qMU|w}o?UDF51`{oQ&v)=vY`{{Zd1=oilv$$y&eYd@LpOL@WDnI
> +e5
> zN5$R-Vt4RHYYAt{^RO4ezlHk67I55Mxx>sq$NAS-
> +iBeS*Y@TwUu`2x5Png*zrBC{
> zPWmnjW(u+GeE(@u+4zfP4{X~D(+0%01N#4rZz%seFA;=q{$C`{>jDzu`PO;Ciq
> K)y
> z#D7J{1pgSSKr#picMZZ>A`;8mgG!@8YC^uHO`$#5Qv4N^&dj)-
> rCqmr%J6x?@6B5!
> zVrG&008_(V8my(q8yHbVj5I11XI(>JUa<Sa=8li0HPTQ&pAB@;P~irJ{KUIX%Z2v
> t
> z8P$Ugl`YtBFZF_aN$4A}fK&Vj{{WRz{k1j`JjHwzZh-`nPoFM!lj3>q-5PH`c+1Se
> zHW&nIsKx(X#;$cjH9?y&j*Az92a)Q_eQeyXgPYtt0%MSreuo)1QSy40dhVx8ke
> s=Q
> z1yftGtyT$|PIZ}FBXCuJ<nZKBQ*Wz6wk9zvuqogN)g>}3q*Jh6_7!)f)>-
> YV_07Rk
> z@uK`$zGdy`nYA#s4fIa^#C;5!yk#@Vs8|@pu@4H56qCfzuPw1ew5EPdX7|OrJ
> ?7nS
> z2As&zG(oB&uOi}z?b;|&E-w4Kk)kJ%NFrZ3O~%#BRyOnl)--
> Wj&IxwA(eN;8AUBwH
> zm#K9lCr&K|OTchG11H}g|4gTHl*Sm?!*scVNd))`a`zaf+`KnC2=Pr6;cCLE?bG+b
> z9}`sKjO(P!nc{m^4OpTUj})=qf9tD4k_K_6+yJheKL<gR<Wxl8_Q*hBSiQ=WZB^
> Wo
> zpuq>E3t&AO#i!@eqSRqscIWvI(&QbM;uR3U=X^F6ONN-
> ?6F^dXfgrou^H)lg_SgI_
> zG@^I|vvsLcY9+%J@Kerx+`aq-
> L28AU_VddXM4(}=p&UC~Bg`#j@WfA>kGGoK(&j2p
> zONUhQo^-g31B5Fd)*vd!@=$f8UTPhOuT#MIZ-|mVa)KQ}rx5pus-
> )g2d6GNthOKLN
> zh-DIH()7FCO0@on5eR-
> hv0i^*9#%aiokhQ7s*GD{rNmskubr_Bg&z?*vXgd`bZqw#
> z=Akh&SK9rL4{@l;Pi*>StRbX%{Vfs7GPLzuoC%LM_)+|7;UIQPIGxCNLpckhhy
> %-!
> zl+roFDVYqNN=GYSB)i{>eW;!Uv|rc<iHL(@-
> 7Z$@6QpYd)9Jmq)bAX=*N<Nl74W@r
> z6dj!|Sg9gFmB`a;I2M)P_pSV=3aO}u%LPk~!p}CR>9#hw*qnDwxe$a>@yN~!*
> P+1R
> zI(;63y!Pe%Za%4q&c%?kf8=ViPom%8L%HH%@uV~+E+(+wZTh=zrS?xjcS#%y
> T~h0`
> zHcUSIUrnmUZAo;aanT(HSGsJwBuXvtDH1g2YG;(Xa#pawlcTQEs?ae9($N|TW
> Qj*-
> zvPqLLlW4U)VNn}l%HQ&8AULWTGh-
> $lYVB*??3{Y8P&Y@C#l{uIBdGNG_R<7m_^pRg
> zR5<WdP?PAKN~<c!J6;3LrV)(+0HmAJ54iMj>%a>1+$uK4<)qgqs*7_;C#M&<s
> U%l#
> zen&+~JHxpjF^8L|j&~Pwmu(-
> pAsU_$b0HcBw=S0Zolhga^e)baO}%X>9m4yrebTAQ
> zbo<=PB6?r@+6aZk^!sJFY`5bAwvxfi>~GPN4T%L5V@fJfUrT<t_hMPj*zQD4v`
> VOx
> zxAUtRpF*XqMI?|$COoP6=LNV$yM>+#Kebv?Wf0C_T?)%4Pm&X7Paj|p5l4t
> gN^t2s
> z&JwhTBny6u)69oZ`o_>Af5?BYF*?2Ii2T6iD+Dz&@G#q;krDvi*LFqu_NZWI*kb
> 0T
> zy37qp&v8sI!-i8q6}ttknx<g$Ijssvb}*W3V^mE}hx@S^U(9Gx+LY1JUz#sZ#LHP$
> zQmjZ!`Hfnvv+uqe%~Z~`P0>ZV@HuwfpUX4H%<&(Ha|O~cBI%ZNw)~f@5~q
> }bVySkg
> z1^^P*>Mx7|%Lz2l<{@mO+l)k-
> dm3})Fx|lO=Cpq>O{xu852}FzcC+fQ&#=UVNr}nk
> zEj0)~vfLCA^XHf+@DkTc#ujBEP+6vd$x!J_mecp@jnxS%b*ynT35(XQnGMp+6
> Uye4
> zOc1173xgvO445#J=7RNH2lxqr?Ao?Mz_*g9pU@4@@bC~z1FX!5Ww+4>M`i
> W<g6_YA
> z6=dxT%@SO2p?<3wH&`}s^a}$s#%m);Yf#oAj4hxaR5l3N!sbyI49Q_gX0@Mo
> QJMb3
> z=52f%l=Q4P#7l3DT@hM&LCJ?3;5Q|O&TKL~><@NxKRukW>oEzQ^67SZ&D6
> _VfDw%`
> z%Uj^U$G|M6MQWN?hEl0CVvE31p~GMuVa9Y#e;#5^hZ{bzF$8m}w@C3J`>
> Z^TQvra%
> z5^@kpmJT5whZj0z1v`uuw84mWt!Ew<>rT;MgG%^_<ETQNfhwx@M8o%UB
> p;Y+w2>ur
> z60jn;xQgz@Gvdqwyr+m#R+7$R+V2s#Ji5;WRURhy4MzY<C>$SQC#fjN9ER~I
> NU{9<
> zQestV?j`!eGaUc^UL`+g4A(;G!s>9psGMLW+{Q+WY2{>ZwobQY0Qp#{e-
> 8p3Hq$%@
> zPx-w)&u}P8peBxtmht>EL*-
> +zI*oXBk{1LkOyN`zY_7{gP=9G#m@=Q5H`iI4swylg
> zWf$+zc+YtH`{YzTTuGuS0AXvBl45EB)oh|EFo9OJDPtvouccR<L|-
> gfDhN_Ft%&$g
> zQb7VtgA}$iS4dSH$(a8)7p2UF=1#zZlPVI%LdOe#_@bGD+{K+H<)g13i;0$-
> UyzS#
> zx_csrWKV2fu<K`jOM<oMv>kcu=fE~Y=%`<R!td3=4koSSovC}aAUa7V`rDk>uC
> $(T
> zKPAS@C4;(j>m`el(<KkmVmwA?oV>`IKemf9#zZP7+bgC;w9-1&di&l2-
> wF35%OQi&
> z<yee*<F?LS87FB7jrgYiE(VlZ(dz(A4%BT|n3CU?IZqH*Ek!iPf(GjiElroU?by>*
> zq!hzfla=AQSaMeT65gHthLS`U+Bpj=j9fC3g%&W*0ON*}O^G7<a_Vr>Tiyisd?
> |wV
> z*fO&}F-aKVv&l$a!fCr)hOsu!*J6J!7*u3vt;->$Ssm{AIP6;}2_;pqjXe?ooB&8t
> zHIUzf*LJzf1fKeik<$r@iXIA+DuyK5$)r5jm>zeDv2rqHIV@xgcdgIId^}wa>KY!8
> zb-
> X^6I!u&c+dR#V7v_DlPpfBWyzdvm4ChR1mtD^TGcWHklkTw(IQH*#KqdnfTDB
> Q)
> zJD>9-TRmCtSt4ylOJzSP92IAV)C@5zvvSl*T|_-a8+z-
> oRfy<*S)o7=u}Q8Qe*ndB
> z78;YdRym&O6`B%GVHk?p$}(p+vyTnR$WUBZL;HS%yhd?YK?G?n7)o-
> ZCLNVk`kU1w
> zpsZm@H0iOzh@G~e*7G=?5vsn;8=-
> 4ar?~dGmc7)ks<wJETC>r+NvFvNw}Mh_<$#zk
> z{?$CuLsLXL1BeH7no&;u`_80*_l89R+UIG0N$&LW`T3j)_0a|KG<T(^v*lH{;Pb-D
> z5Y`4-2I}X0?4=T>*L1cOnmU~uiM<h9GtM?iCq`pa%$`rAK+ee+?U~76-
> Y>^(*djh;
> zQvs~yUeqtgs?-OPlqeWQDc^WAd6)5g-
> xe?k=^2yxjS|jy@I4{!t+NsRX(=vCL_Q!!
> z?BZL>ErQ9L)NoVMJgp@D(z}6BzL6Q>@**Az-PC50L9HV;iU#F^r2iX-
> CJJGseArSJ
> zYFHPNdu~y9rfgBVoOBRa5}GdwlEnyD!2m@hSds{U*lu}1G?5%vdaEEHPyYoB
> K9(o1
> z7|-yVGJ9ZG@Y=bp$OY-O(%p$6$0F~<6|hLG#iJ&(*kJ)lZ=L^?ca2-
> w<zs9mj}jS*
> zjH^DC!pkFy<`-
> %TmaeEi^G<!Ghw51Y#38Ne{=E*h&dH&e0SSrP9W8)F0b}`|3X1d&
> zEAXuX9(txM-
> N=P4xWsIyRu_X)XlpU(@aPHhL9~S~0Ivtv#oB7JJUP?R1a+Ep+t*R#
> zR;IhL*%{=i8M8lCEhrnyFFTS4mIEPH)Q^E-oVA-1b-e;Iyr7$@8J}|cxJqNIl^$)n
> z-
> m+Tu&s0YCPQy?cw=(uuv{dy^V9SeGXr8e)iEMbNS>4aTxU1ipwkEHov{u_{&A
> ZyJ
> zC)-
> %9S8&@j&N6Bwa_@wXiKaIB(^lKf*Z5hD&IQ<dEgnGmhbd8rHDMcj5prF%+-
> $T5
> z$+BLxb+Bi2@PxddC9j-N(uCEGkM{Ug-
> QsJt&7c00D5@?I^`~t=8M4PG>j7@1E&np^
> zyNEXZ7^^g|RcoQfX0%udNLHDay++~0m`iM8)0=8@vA3w5jAcWTvdPo(vp53
> Vy9!!g
> zg2n1!iEDS8D)UKvq#WOZ>7uRx+t%imr)gmhxl%Z<cysQc3G{jx7$_ZFXRvkcD^
> <J(
> zIU8CUdU~uAz0G-3+Eu!w3s@_aoi9F}uReXU*kgYDtxz1Lz=_QOE5`W`-
> n)QNhML&K
> zxVlZVOV3@blK4~l<2#!-w7s9h*7ayiy--
> X#L>$%(tAtS;R4OOmIW6A)o@O=616{IM
> zLL!9~^C!7%0RQo4g@mNWnj77^yjjvvxjlLHByaC%apd2X-
> w@!;NYDz&1!bx*oeyCr
> zjm%wJ!kwO&QoSJ*3$u2_z)e^iG%9X(p-
> yn`3YGK5=tSKdAzkDy%y+&lYer!?az6L_
> z=5y^d(_&-B$!rvoF-V$NuBwMe-
> SN5eS}0X;`@1bdD_}%{H?+_@qZh`hXoFe#Dif!0
> z)jT_G_vGNjqP8ivF)|w)XAgC_8b!@Qq%|GNBx=Zvx!h2x^|p|YFy321aZ;P^*1
> d6-
> zI+KPxu*4dP#R22tBOh89fxmlvEC?!oz_!)CHSU{4Ot_5dP%)74fnCPE`OQD%jP=
> #X
> zlaF~XI7Lo;E%o{E8CzA}-t4=EYiRTKi%qEXtKmL>Exs7T_Q}-AE6`+yE0gUS(}=+y
> zLL+)>np?XZ^C|^Wg-
> |Jsw^%H>+EeGTIl`n|wW3TC<oCUT;9{O4D&@HR`5VMXPpE@O
> z)2e2Li6z{w0Q2~t8VRSzj02p59N7cOyyD(|7sz`2g5Y>N4{KcvRVXv9_8A45^TACt
> zAv#@akDzH7JolYTP@Gjti{=2m!)3!i!haU{C2+Pm<n~WDNaQx*d3EuI=AdqE>
> XGpv
> zn<ek7-^5@vk)laMhM5xAswGO&Ckv<MqKfxd%pd>!gZ6~;66n%sRO-
> @l67Z2Q(wkPT
> zShm_yxnBN=#x=+-
> =UdJyC|#9!e8&8Qe&oprJsG$lcpS(`R@TVJks+(AKXb@9btY9p
> zomW(?qFsbmg;7;APm+~MA&7M~^*E!=5DZKJvw>{ZG%BP$k}ouOj$hlc*fF4
> N<|IR0
> zR;U(DB$Ag_td@j#j#A79g@Z00x4}n`I5~g)4rs`9{eu8vWv-Gl3I`?j4dh`Mqo_Eg
> zfUwxjF`D6{8LKLWWiB=*_>0&Y9Fa8uo2@lrCAxc)nHz0dju#6&4f4x?(tapIleAT
> u
> z)}DjG6G9(oIEXtb9u7RRaK0H#h`+^&;d7R}qJN~-if7|XZ7g@pP0Tl+9suc<4DX8}
> zF0YJ7;1w1^KDITpI+L1jC#1Jav4bqDM`-}3oAVFoIsJS3KKc&e)tZ!5JY~9S2xteD
> zYf82(4hUNaHK;{Yw&eb`itS4!vL=ohj5y7|(^Gz|@iSe$l*O4=M*<^SrP(?f+`wW
> x
> z;!^ocT?0Pc;nx3nJG_kE5rSBSJL?cpyc_n>bVAT)B@>NK_o(N@kC{1PD$z`Z_K>
> _m
> z1Y$G78y-
> >v<4yK;@DHm0_q4b)bAEd+TJG<i&^rR|q)HW|>qvIIl18&icB)&v;bnB~
> zOn76yKZVEI>xBoorLw`Ilwf`y76+-?d!OtjO1O>c<K)N_2Lz4j#Ifc;iHiAowi`$H
> z!p3ra%O_JRmASdTL$iHTL`1t~W`Olbs|gme*3zlC-
> 31Ee>eO!JWjv9TO+?;*YYjCg
> zfk$z?bL_=ZD0HMNI$e97!`pjYmTzlSSMXYhTq}H}u2p{i-
> ?J+t+F07r4%dLK*m(+M
> z&rBTzD>;>-
> bxI?%84%|{!_qyS;H$^ZX&Gh$lG1DrrCdUgwWDHj35%C7nbFLoxhz2?
> z$pfxh>p+I<l0W^|M*$E$KRQQ2(g{$ADR=MskicDvoq!ptq4b+w=R*&ylZ9;Q@
> _8#p
> zfXomlhEa1=y$ESb9C0OUeYRe5jqJQyyUV!?G6-
> )JBOS(t2dA0_?pUSh7wxoY%3+CD
> zD97kBtl|;+QQ84Kc0FJ}vY>Qo(|t>tS8E7H4L^aauU1rE>o+-b8G--3ia%1yk~|T7
> zZ=)W48ev0_FFoeP0xWm$kK{&_z5A?SDdh~w5rgPYD&%#xEa3fjgB11lLHz7)u
> O8f$
> z4LQo5cm8!VY4OZ`a0S{EjOW>`n=MVQGUwlot=;#ekBB`juY-
> )Hhs+i^UR}V;qWr+X
> zy<PNltV(jy0u5$E74z0{`1N|B)Jbg$wwa|sssP8=N7C#EwN{wdC;NC3!rtzwXq~?
> O
> zitIWC-_;SjB}Nf?5r#3|K~>bZO1b%T`$@-
> OQ|x)4<YO@d&mOK?jf#~sD0gMwkl#5m
> zW%W<GP_r6=8Mby@B~ctv=2ZCx>($QRr3kdm4>waDeV25&%}fij``jo4yDLfz
> uQM*!
> zGV%82N|(T5gnZb1cx8lrWF%50SsrC4^^1Ee_77}%3wq`Lv$!=uxKG{HKl!p^hZE
> Pa
> z1h<LFiqNBIoG$*2O~<R-
> nerLCe5ZW65Y?JO47!xXs_lmJ)lvX2%wRKGLDoqBc5ye#
> zup|`j#_(;*?bCZUlabo|V!NBnHRreK+oXr6gQyGXQPgDtVTqBnm=>KBomY6H
> BAagM
> zh4onLF;_6g9`wGTgTI5r1?hyS*N^(F&X3>~9c}D>HmX$)f!ef`A=16EHS_VQ8xk
> ny
> zLHbY?2t;N;&?UYbiR7+rz%G`m2exFtR5)7019$#&O8%JJ5JlILx|+!B^)l%R6v$LA
> zjJ;jinK1qyG(k)oM530RG-14IcbU94fXU!ekPlrnCA!CN3g^(sdJvP{Z%6tB%#iQ>
> zNaD>%_8TbHdaKp;q^N3ni`X{+f#lZaz>(>f2OBpf8&xrDilj(!$sA&Q3JW<V+TvN
> p
> zPg{FaV_fOE^+e<)3G%t;YJ|~p#iFW)c9XUxaiFRN{hq2h_9<vruDt{UW?yr_M2
> s3r
> zro4i^NpK>aFtKRMbbJ`hXXlu<>cc+DKFdB0f`x*zif7klAym`B5&KOqKvQ|;X6CT
> q
> zQb-p@2ewP&89&^n-WX*Xv)g=YMFDCVrkc21SOl8*$-
> &aHX4U(A5KYhharM#B*f*oN
> zph}$}hkF~GbRiMZrnLEt?6Fchb1*uC=ZxnKG*!}sgy-
> ~M1fq<_9_c6T5bd&8#<NSV
> zMa&5;rQhQDe)KIX1ueleDaOyoTt9CKWbGrB5;Dw>f`J`$PA_7@q&^I>1ZH8U3
> HoNI
> zXQhoj&@}er>_fV(Oq?TPpCJv%zGX~_GN-
> nBo&GJ&erbRT^({a+ubGv#Nuf#NE|Ee*
> zD6A1afJjDCBWD~gS}Qq+bsx8@poP{p+{ZiN2XEmbX|W_&nq)o*hN({0I(SDF-
> jB)w
> z->^em7aS}HiltEylD6NzRAMfCXf99stE%@`_%ate<WePz&Y^XDtNa&-
> (IJGbVCBIs
> z45H&$FBr?sE<=Jn@_3J0RZ^g`Gd=y*_+jXiaT97#WE<JycFqJlxbEv4LCE=E#ofH
> r
> zu*QLOn|!>ZSh6L#Da6PE5ky?<EgSI)`{}%ONJ#M0)W?HHF1%Mn69RZox~A)|
> VxF<=
> z#v|uzUXhefc|BE{+*l1_v5K7dI(mOi=eG=3s0XKY1~`e5F+tX`VnBd!`}~z)as8a;
> zDOM6Mc&X>C_s{5YkzA|mgp^E;3c8lm5)`wX`DS+JiCgZuvxhb4Y~DqEx0SUM7
> g#Q*
> zlAF(MitC=vf1r(%1)kNk0rQN6>$w+^JFXrG4D#!H2SPS!ql^D+qz^~)ECz=7t&}*
> 8
> zP%ut4dnU$IWO1<09jnd7*7AR|ierw-+-
> e#&)}Cy=mOZ6UWoXJaWt^qlyNUgNM*@O&
> z!g0)+psVGgP$^Mm;?-D^*>^v8-(GoO@W0i7v>n4K*qrrjYgQXov-
> VEJzU(rs^e6SY
> zVeWkEw;`oaBq@T)NV|@lowj|u_(BNk{F>4(xX^4g6FJG<X694oaeXatD8!?bx
> HOk~
> zSX(FA{#sbdrh-MHap?LGzW?XtCP!|rZJP(z_3+R*-KqZ0{Jc3+SS7q}63R)TPi#9E
> zZkJMyb!z$*@gce(IZInI19{KhC=MQ7pFzVAkc>!VrW24inAT@GzXH^R*&|8gp
> ?KF)
> zE}<^7K>PZyhKGX0uDEeY!Yb=H>w%2SAz;z2b*v)X#>(a(D|*EcCm7+WzziEEgx
> -Z9
> zBhd!itznu_4yOSwpE69>=U#|De(i>NGEt^IfNU&9<UOR8N(wyt?xCyP*w7aI6
> OfX4
> z?zKd%IeQ0g)9N7pzBdG=={qP=_%Uv`&M<a8YRVjdX{Ktvge-
> aH$dX+NTamdCy1-X1
> z(%P=cBc>AxQjjMfF#3ncZ`lF-1xE%Y=N(cZ-x#xE&`BVL-
> A)oWQblC>@tt!fbGS|x
> z_Dotq?&OO9++^J-
> euA|nvQGZ~P<PVrHFD`1c$Dd4d(;S%B70hn8tqh@ft)owbTC(V
> zmPR$wX;70Io~ZV1b{T($6DiE(n>F!dWwsVBtb;CjN4=3DMmumVOR}9=kW*1
> @SKXY)
> znKf7^mF%GWF3V$Vs427}w2@uo7@=YAy|QxtxTIFjPoQ1_AkeB*uY@Mem
> *mU6`Ri2U
> z^iciQ^KJPw!g&lOS1s%n;8<Mtz*tPxH?=5Vc;H)^G@3-
> ($iYI(yOmoZ;EE~Z8>xXg
> z*S#i9O5lWP9&YSB^oq1sZ>`8(9z%Ak-
> ZBsx&%;M?{!8(2KuBk_egWt>J3>aOm@w#f
> zP|`xDa{0ZChekP=QjaW3RQc5cp!|1{r(&bhKshxF>*acY>N4w_(sfu0nl?XIG{Zp
> f
> zn2LYE_K-
> r%yZmcy`*J&1@24hW*zH=I(RtjaR;Ui@^a9o1Ye&%(Y5!aaLuG?hPKV8!
> zlLdJ#M7d8#lob|dvieHCxpw9Z#gX4ZF%U2qEV`@KZAOYD=S6x82v2Gaq=M$
> %LfmA6
> zhm}?aQ9WPfAW!3f=U91^!yvRmv{F5&sC}#SP=(<>Mq*jq;$ju^2?}R5st&Z|hil
> v-
> zig;R2={J(gqWLE$@NunfZAU>frz7m;eX}N&)7dt%T1<4UJK2`ig0d+hC0!+Sw&d
> yh
> zX-YW|vaiD_nTlKrz+!J{7H8skF?eIL$5!mw;r{BdeGTq2hRmVZ^FdKfibpO{sY1`l
> zx4HiL#3EkPa7dk{ni(bn!?@PDro;-_O1aVn=4{}h%w5_?-
> A$6an7x|KM%hQ4PqDMu
> zQ;kekiAHr&3BptZvKe-
> YkV;9Di$Z77fyIG&YA4ugV?4|W*P%s|rropC0{TsJKRe3a
> zNw&i9jyhf~@dF01?UsCb)mmh-
> IZaI0^gSXb)I&><qk=@ndpkH7UTHozAY4!UuqDSA
> zx|M;p^)Oi?(|pcqvv;n8*`8QE{FpIQ>#b<H&QM|o-FyI%{g7>Vw-
> *tt_0T$qJo1TJ
> zdQ>k_+2bMbs+9%#cznh_ShJWB6|%%Wm}N_k{z;m6p>J6mE9{v&wA0q>yti
> $Lu)1}}
> z6g5Jq_L}-}wKPn^^M*>4+>zE(>q((-
> (9M`1KO^sCG!((OVfcQ>K!mGJ?|4DDv394B
> zUn@wH50yVH1=^B@fO+1^t<!VMab*NM)EwK}oJjzblX6D`!Yr3-
> MiX`|68Si^q<dR|
> z$tEGcitUkXSZrG7D=%GKILAV65NIm&A@T_FS*x0j0qu|lA#D};$4IhJVpmv<b2
> cFc
> zA$Z$5C6M6}5{Ut@5fA*;uX4`kw|NJgSO|?y7qc7{j&Y5S$3+T+!9NN4x)UP||8
> da$
> zCK6*W^#wKHDyt<JR01J~0#D#<`&Gsec?^U1Wqu-
> S*#r14cpMb|+ZGD#^QIVHxBvP$
> z4bsZ<2pKzy`WyW9?#eD<PBl{42LE%2VUJm1v_Tnt7{iiUx{&p3gR@-
> _ZE03eCq3p2
> z^8}hgr(75YtxPZx)H0D%OQ+D(av6KV6AH&P-
> DuU6!`J{7=_MRr>Q}Lo1Wiay{ZYRt
> zB3w1lDN1m+Jj(j}A9kX6&@;EvtT1}%kh#1<zVBSw7am{P5y@99X#@>>auXJ|
> M9rG{
> z&1>?S8f@=-
> 8J#y1hVL`3i1qKe7IUW)Gi@VQ%O;5BGyyWnY4XVkW0i`53vpc|4I`cG
> zH{lRX3z~Yx30$ATU7qW)gUB~1i3sOU{!jByq_xGAXo+Y}6NQE(#S6Sl=JB4HhM
> 9K!
> z(|lx??w-
> &B;dLoJQ|en+DMixaqPKgO%dX4BHL_MY1xn@ujZ2p^B^L<^iLvn{VhX2-
> zE8KJG^@j%wj7aNy#+)Xe_<AA>u?AmSja~N@0PB8nlzs_eIl%|PGhLTL)*zh{l9
> KzE
> zdlwf;LafV}2L&vW+lfSIQ9=>R+eqS;>>IPhuFTvihLgZTV6gVp#1hvUaza@n-
> EpF~
> z2euT1yKcaTNsMEE#hA8Z4EWy!McE35n*$o7i<JcUa!_=P;VFi3$+;$1h>n(HPU
> 4GY
> z0)tZ6av$HEz-<N&Vm(gYI=#XH8ogus5&qO5)a?_(!<xFtc1gn|*jk-C(&N=)cek8%
> z+3pr3ubOeKE3Mr^-
> m&z!V<(gG<#PAV6tjd2>4annMx?IQG9dtZs#xsKC>NZJ!61;r
> z`798`#(XbHB}S~u>mIqM@@Q?si~oe4&JKrHcg14-k;WJ8{*`!2$KtFz1-
> wsuL~h0C
> z^N?cyJ4y4BqPg?{*i~<A$3wQWst#FB)x1l8*Q;+w3zG0RTG}|(wf?KyfZ}I4Mft4
> T
> zX8beZM?XX%%-7F-
> XS`$??UZn$>+xp|o7SKf*zC`tF*;rus835=RR)T6q@R+wvTD}%
> z={;%!$_X1i4ex|eV}?`*tme<Cqr2kEc2}qML?oMABhO@7_lH`6oo|dwi?^^B<{
> W*n
> zB4;@LzeN&kuB;D?%9zRZtoD$uSnSjcs(W?vR1T1q#iHd-chRf?g-
> Zy|;EQ1y*a3z9
> zb(~ncpxwCEAMa&KB!RM(Q**{Z!-fL~biWuV{!zT(r1-
> Z8o_n6NR?6FCTj^Nv81tB+
> z^jS9C)qc=hRh{RosV<i?r^Rw^iugubz_8sy?H-
> N#)SY@$vjLkOUe_DWBYi+|0)|hX
> zv%_dst&=^@cBJo#r2dUvI<3D?I;$qKvhX&iIt}`?PMsC0@ZJ1!`1GsR(Xz%?!{GJ
> 0
> zWqBfPG4k3BISL9$Bz>yMW=HFwaX4cym#{8vNkkN0o0`hm#POibOxLh$l}EW
> 1j&l!q
> z`q|_73x10EP?iD}n)!Ew!19Aof@S!`YoU?|$U*QjFW=uEjc8nGkjWj5+gbP9Kj!h
> I
> zttFY*c2~<&GjPY%$L5z1+&?*9ocF_yp4Y2pD)?MGK{0iin0|{RuEqhlXO#CG3n}
> O3
> z*rsi?p4w~a59w{aJ)DP&+0+eI;&w2%tBWg3ycG^kcJjLP;*b+*Cgcv-
> V6R9f88x#{
> z`gx3wHH`DlSE8^jc-Cwa+SC6b?k<Dk2;xQ2Bf%{|aEAmZxWfX$-
> 6c37xCghzEqHL(
> zAi>>TmSBr7!4_ZKT_5M%5AU3NZoT)uy{f6Hnwp-
> f?$Pe)?%y9rTc+=?=+ZHr?0foD
> z%eC4C6A?19e_cPGBmx5LxBp$X$r}67zpOM}bsVhijOLj;^%YP)DfPKtqTdO=&
> +=&s
> zFfp))dz5Lndenlco!*pVcQ$VQc0e88v_3u&wk%m^%spC7wT0pmAs+t?^5RMi
> tg7^1
> z=hO?R0RaV;dmMb7_?lEl`l9+k$oO~8(nc0;KXcn2JXd*nBcWJI43@KWns>Y-
> hjm>I
> zMlS8qpiM6bRTg1GN1W2W(;pd+?ujNB)AJ(S*8YH}ox32!wC5oTs(#Hgl(hPX=
> mfnh
> zRrK?F&vrU#)t;xUw9h&B)7XqvB#c#QNy3AwH6~$2u=zAR;cr(v0&LsOho=)IK9
> 6xY
> zN5sTIiUAK^%ZHGfZUp|j7p@h%uS6&}n3zXV?!|bumnXmD&o$~0Aul8yk4q_
> S;7QS^
> zxweQ@8A^d{-
> |rs<AJmy&AOWC&A55OFrH?=;nPIUBKCW+_=3oy3j)LbiaTaT3%3V@T
> zlvh@M07-
> 0hBrA}8%F_#M%AnSBiT#}WQ#MHz^*N0ztW`#Luy%PE0225twERL{*i&{N
> z*4#qOFf`fhN!$|Uw(J|TEZr_T(JI-w3g~OqjPdYGaY?(AIlYYOND`x)h-`^6JfPm9
> zRG0J5a&daBIHuxKiDLi#qW!9=rRvbrD?q>0{F>up`0)`&!Z4`!iaRVny&911lC`)0
> zDzfF#D>zI+3pwRF`GANh8PhTNGzA=9buoW*B5}e`lBC?Cbg|wO9PWx@zj^)
> XqVPTZ
> z%%m3d3$2!ocV$d~>4Z2A*D>V$WTPu4>6`VPO8+s(8o*C%t9Xwp_v1>CH;J(
> &W*c!X
> z9i}w3Pq^~1d?F<<-
> I)lcYo22g>ki~yxS!Yif8W6M)U50tCpO=~T|?e_9#G|0`PmU(
> z^ZukDy|bU#{6e&!>1k(qpvN-
> %Lq~XkiWkaX?=a5M=_|w!mpH`c<F9gFZxiivIF~N@
> z`$IUoxkdX0n7-@7JW=;&XJdi@qAFgYd%7fa&o=#@-
> >`}iht&}GX*X08MaN>MDRT~2
> zr2@h@XT;?1xb+bCtw<!XihHEJ#D*E3NzEfwA09(N@{{buMcMqgo_s?+4NNa
> N%0PF%
> z`}tWZ=zlE9X}OH-
> c7^n#U!sCJLeWk&I^k+~)oD8!MK=0bzB4oJu1})G=pqiY6((?e
> zLkvKkk|*VVQI-
> GKZlO`xAEO*#CpY_!qZ#g0A6lFqo`=RcxknwF3x`d%rW;s_$`?A=
> zgm8i2b^i^q+Pl6lOz=~7`zOF&inv8By|R-;=tpO2F$K3FVw*ma5S|QHi~w-
> <uA3aK
> zj~c=u#V_kVCAqmzGhymDUnRvUGY83LIu$j}C>$<EkfZ&XlI$BtK2{*igmcT~m3
> le^
> zgf+^~OxdSMUr45V?sqHHD^?nDR>{^ko>;HY|D%x|3>Buxm~f*R(fUAuvDRd
> tB+LB4
> zW?Z{SL1Z*q6}Kshif!n?Ih|$36z>(;u4z#-dv@AhssJvTQ8}J()7HgJ^k$Iu0ezLX
> zo>XmU>HBJ|9j(5g#41s?tDLc9IF8T4KmCv`Ck<uA>PJRP?-
> `?F^$C+Ol4#dR9=>g3
> zNF)k`cHF_au_<&|pN~<uUFhS`)c04m(M)9?3w^70QlrheTpryP?HX3J%Xn8y@
> _J-D
> zO&HsHiaq4md9PZ%Yoi2+Z+`*)P9gY9tw0WDV5=E5#z84fXt!MHtCzo&s)ZP@X
> ^;4)
> zBcWcs(u%?Xa!3K0(evj;GPH;V7F$t_M$+U`108rrd2O22ZS;L}3$;tMH7a~@_hn
> v~
> zC&)ga<+-nu&ZuKXiPa1IGA<$gQ5GT7Y|(r*pOIQADxSlQQ$(bvIcHI)NEuS`;ZYn}
> z23neuuRA5GtTBA3L0HgCwk4LYf9riLtR;4ME%I99ZvrbBSygk1x4U9yyB0Y@)5x
> X+
> zGReq8X${jPJcIu5|0G?o631n)YmCuDXy;v&Q0cS77WvYNSu_%WUTtOLM=7JT
> @$+z<
> z=ZO6BtU<2Gt}yK-pwRJRX0xf)n<{p=X-
> LS|V$#W6)IK(T?N%f*NR>c?_FyEh>`|6C
> zrRX2&l<tAhgb&qxUB!E+qE{wkn#JFwq6W9<(T}dZ&qZ<?T3xT-
> ?Ah!2jy{sDw76d9
> zs2*ZE;bxSL{<&5u^K!3vcsMWD4O<aLH+<y(soS{8`R$LqLXo-
> sd>ZVbUw=}aXh8=i
> z!2MaVTRr^dmu^+!%xZw0w*5T$wfa#ya*i$Ll&xzc;)yQ*Y)-
> +FXO@qTgW~58dDfY_
> zacfMN^<_$lLtSHq*B+1Aiq+CB<?%8;F4r)o8J*d<9sZp5;e$D#<|^MLT1(sqeOS
> U%
> zS#>9&xAy3(kVQjVmQ+`(#6Eo02{*w{fl>DP=V=dK-
> Ijq>1CUA0A1;V&(OApERF#PB
> z90=jQo7Z((5a*VEs8r%O7GRK>tnI0Z{iJ;EC@1qOBJ{l7R^vD&Sjn8J`lAI5{HR(Z
> zKLm?iFcSRL!W%E7A3Iwo&(%`B#b`cUqDKTsZHi@dnxFD%wr-
> L;j}i>+;`$ZXF^)z|
> zLDZ^9iLbfIcoc(Io#f1q4JOw-%Y1*A?QfiIHj0*>6Pm#^EIUN=v?YEfM2kIeiPo*=
> z6E*qCVk#{xkNNq#b%2x6IlX&#)-
> ish%FIFK!r_<GU_wuWMw>99#x=>byULw&CQ3-@
> zn!JBz9V23ev%?XYp7xzv7(;lxm1pYSIXlR5gH$7;*U-Y|)I0f)R2~DD`>3jpWXdF5
> zrj9?Yeqq~DiBIL2aYc%DA4iIxM0HBC;gunKD2*WO-
> U7`3Wz5y$A0PKcF)nEf&1fM<
> z+rd8qa<uJW48Nq=S^O<$!SqB1dxL7dAr0aY0s_VW$sL#ozZN$7xg8frAlh(M@
> OVWp
> zbG!LPs1r#uPta(s>CCy`Cq)8~a}{;6<=-<b?swtTjpO3sp9WGmbd!uF^z(loRdjM`
> zzxM)CWAU?NC75t3&U{l(Wf}Nc@qHd$vA5cEZj6rq+cF$QuTvoBw4R=}qcu}LA
> H3F+
> zzKn)kC)N(xy73+hotr5-$vAo|aejR-
> OJK(LF9mN${MAuA^~xXoahXE>Q8%R4vSL@x
> z^asLRp&#f+RR8UQL?!%97J=IKFAMK6Mjrtawy*1E^8YL%BN?I>!f6pk>uDTNBi
> ud=
> zPBtk~^N(5}nYk$=DY&(=VWw)uhj7Q$+u`|PQ2*r{b!N@#C;PGbt`ht%F8f!C_>
> Mcz
> z{0=&)0Vn56{d&+CHEuS#<QQAwVRvw6L?3YpQ(%HRMPHTqhgb$yBB_cg@>
> vPQn@)mc
> zhoW%igk|mdeEZ}+9_qg#Q3V9~rXSfKbGH&3m9#3jmzq#SgvDIp(`&!uSjJH#K
> N7Od
> z-f~FXzW*!m>uo+2(75_O!5?%6nT8q61H3dtxwO<=w6w*2fZDm-
> Uj&&UggZY95@=?V
> zDavfoMz|Em>@Z3RcU3CcSlR#XXkHxkuRP5hbc(q6SO9@8K%1(TjuzjlcYh<l#Y
> Rc=
> ztyA7nXiy&9^e$cg>{kCgFNc#VCc~_o#9I@bO~1gXr|WX56`)3-
> rlIvujeu~DJAq8v
> zgsBo5(}`;T3GpXrY-
> 1B~vUZ3V^D9BLnnXLnE=boBbzVJikN>ED&{taeqZY9{K#p<F
> zuNp7dnqxM^eQ|qgjhYL6w1@Ji5cfja3dhmU#E^C#gt7|DlNgaxjo%Pj_Fe`RY*
> uth
> zWD5&@q_LHQwot})t)daT?MuR4Vp~w@0&n;LU?|n6pT5X`tZs@%?Tec>*aX
> MTMw4JR
> zUpFkXeA}Ldv4Aq+_rS5ZcgS<XpC8HxzhJ0M%!OX8A4n(7z#WF_@Z~{{Hq1~9
> 9KYtQ
> z$dF&Ub(d-
> tWT}4+=v#*Ti$j!{_sH&L%qt&JE!Bnj24v!<IYX*GujsL67+S46_63W_
> z<4#id-OuCyFgy|FbHAeWcDq=-8=M=I(uLe}a|mz>3i2XBiX!4hi)67?sd7(_KZlul
> z(`QxbRFE(zbnXjI*nRn%)U7_G*NgYANPOmJS_nb=JEO4>Lb34ZxfZ3dgbL)USh
> $-?
> za}+09VFPpu;lt4Cjj~F75nI!|k@fX}ziQfiF@KgD){RoP<mT9@(paZuaR8#hBy8LT
> zWrIFuSphv3jpCr;-
> 9*hN7tL9{&BG{uJST>=&_hN3IZKCW55fc>>zQ@)43}?aobPlI
> zE#Q5V{u!XNCOQD__K{;v#4|`BQ<k#$7VDzeeV07ooq9n?k!(CYe?#|B@b<|z?
> AI+l
> z?3e5>(65HSk4aX)X4$gs_+xfR{Nk1Sy$;J>${f42Wh+&mm|XbDoAirz&m&4-
> ;nA_g
> zBK{|7{GYJ!{}*GLllQ;Esz$$*9YZ+YhuvoPkGbKR;iE={CgA;2V0|e1MH#p#X<JS_
> zCV=5+!Y!#;j#1m4ahqPs>7t!yTO=9{U8N>FtDKb)B#!7v>aBL3rN=|l)PD#&V|!e
> X
> zapB;f-7Bb3=9iN0(|f{gFY?4UpqO(GD`f<_qG$8*H$PNn_D-
> xWIqmg%4HwmaM{hs-
> zowm^Zrs)wo9O{R4-^>bmy?jXfi=dc*^gA&mc)A(S(9ZEaLAI-
> UeXy0hvCJDW{Ss#g
> zQ2{n#&u4v|!0F6p`bYQMpcsom2zN*BtAZQ75bf{cak&g_xqHg}^mhuaa-
> 3i;!N-a7
> zNHz{WA_kFP+&l77)^5z!#00Yxl*_-p@@Zq&cD4LU^rGwa@utST-
> zJ3v_}EV;!+vim
> zZ#Bb2?GWSh`mjAbCcrp25BUuLhbzGOe_OZz-
> %x2O3tKZCcTF=#S9Er1$2T9^#?gwJ
> zUH-d;qnnMJH=7(f`+tDI7LMP|9NqrI<#nYt;NtoZVE4b1(*L20{}*%jKa>0qTKIpE
> z(p=pCaoB$)rT=So{{IA}`8YT}a|rVD|5q>hKXdy(3iW^XlK*Qt{)d*#CGeSxi|fro
> z{$Hoojhc;%oA*EY={Nq{&B8&4`i*!N;NcedZ(1^!;G15}Er`x8?`CFiV=m!nWp6?K
> z-?d~;4la(*yl=!cH5(5n@8`GFoYb6r0vw<D_}-9fPEJ0)x4qng|BXxL;`!e$-G6NV
> zZ(K4z7e6Q0|1+1&DagSu_+OvuV}CSp?fIMAcF#Q5lb!rX^zVo+9|+W?W=DT8s
> ;jxc
> zA(D^bwNW!7a7F4{+5l#`9O~Qbf8}Ooe9gEgHRfA9tGD9o+^yGY<Z57@_U(Z#!
> LrA8
> z&@BfJyH20k?_7_&z?2KdcE??iHLE~!sShf;3Hc`$JNFj;hESS<2O8R@+K-
> <4K*RG$
> z0;xResytu)lkxi5Ve8o_a)$)d4{5tQzxcZGr&r_(6&F6JRAiGRJ*{W70<kx72ncs!
> ze9K-
> wRNJDcjk0rFtOBt2{aHZ`3`Ah&yZes#wNDS}TjfX=Nu|nSuEQS+No3!f<nR~G
> z<QFcwM(ySUBlw;49sjAOfvD&+@0irbnFc$BL3<EouOG{w*dAWQT^u*_0-
> ny6FtaFq
> zU?WSrJ7z`iccQT~;9omRyv?IB1Au!u14KOREi=zz4D&xm<(p_D+SO=y=@_JE91
> KJ7
> zj$`1plljX6U4?YvA@8Fa$gQH9t_qujPIOcYwX2tH+85%h-
> ENABq{*ugDb=W@3<Id{
> zPd$JVlv6m_hcx?1)--
> 1%wdAe%XK;pKjdhxJ(shOHRh*Rx_eHhIQnJ2<FYbiWe_X9A
> z+OwG(rKV7q{;a4NH04IJG|qeD4zw7GQtfNYLBm93#UnJs>Q{>oG>WCCzwBT
> @&8`vk
> z!S3xhYJYr~t|ganr=nZg$GP{$>isW{C3|$3I`%Y@SBpPPxlQel0y0nhqT5~c9Hg_d
> zVKbMLuKrYvw;5&-
> yT+*56n2Xj<!n_<=}wH4pI!%Hc6KQf2@qZ$(ng$!lw2Mi(Z3Rt
> z*Vtj@pA?yVN35{MP+N&dHbvGCY1fVT1yu;x3-
> e4e>&^eUl2#wX8L#uWy!B`)X^f}`
> zUD$nnsiYd*O6*46VJLjMtcKYnhRG*9YcSo)1irL=C8~@N7sv4re9XsSFGGIbYo?
> 6r
> zLk9iLN75jIH#K5BEd)?p1h0^V93oC3XyOC~VjG7)r3C>o$&)WyuHIvoL)mRm4{6
> _5
> zVwBsJ>{ZP9b4Wvfv++p$j{O3wf3>HxuXzM!)QcMIke1fEH>I2^>SFI{WTFY4N{
> O{d
> zE+AaNZHfh+NcmB0*BZuQEEd({UZ)MnaLO#I><9!^DQJE5R`TK1l+f|x-
> ZPvNj?Au<
> zO|{^d-
> <>9VIdis&m<=iSWzuf#D99rY5y55^0#m_UqUxqU>~M~4(Wfh9nRVq*@0@=I
> zkuNXqKDe-hjNdm6w-
> f+(JESK?MdDzlfM^6AajNF(0&|BbvG_)|Jy*bk@$b2B#+?*g
> z0b~5S2WLNibO8Fu&zs3v+I{2>Hkd|?tbiQV3l*{)@n7rRET+EC@ejCT3@h5rEn
> ^%@
> zO=~U~>R|u#+HN&~iJFdvEiGP50}3P5!9r}QTytzAuc8kRl=e#}R@hZ=pEXVjz6_
> R*
> z-3vz0k9hG^7xmbSeG{t<FU-
> cbw!4#B`r~VDr)P5Yh#PZg)~XZYT@>8ho>0B>MP`9G
> z(Y3d&Th)O~;7xKqf6ue#)xE(<B|@nrd~=M}%zr}mz?tgM1rOE{<gdZe-
> X*1R5NxFw
> zSN!3KN_i`>Mc`j4LB=kw!n{WWI;%@Ib~J_c`D52RX%`5md?dAxy?j1^CF~;$)+p
> %$
> zP@3F{230k;CQF*Tq9HbQH<%81PU`Hbv4^P2R%H!-
> vePo$i>}1OU2#u`pG>SV4q<Y2
> zAu|2l?q{n?)$rHPX_rw8&>4`%%rqD^`4#s#Y#?5bWp;wsIq8?G>oKoZR{?Nsp}J
> @+
> z*<L@tcnaZINk2a>+4Uaf;96&mV|zK67rl0OUwNUOY{M^GM<}2~VLBr`s>V9B
> fnT(y
> zng?P^W=k|jz&<8IzjJ|mu%g0W9#XCpGe|l%@-Ck)5gPz5st8oraR`O-
> K^$O0&_~R3
> z#_v|K{B~>%JHlrz1g;j(nQ?7Me1jL}D|DQ(AZ_Ym;0cP!UQIjtUI-xehEh$oXacpk
> zC(Ng+^F(j)7<2u@*(==eoz<M;A(s7+$TjuD3ehoW`X8n{<1XWgs>vTbE47rO-
> WJfm
> zpMN;QBLvt>X!@0rVXh16vLkj#ejNm7C<_ROL2Q%E+ZIoz2*59`XpOjVcLAsA!
> 0@8r
> z=i&zeKl<XnH0G4r14(^y$!zRbXHM^gQ;R_-
> lxJi&fj#_QAk4%MFy$mo;{`7GH%Ye#
> z!b>7@30y-
> 99|B|lM%=~uN+c@b_73=>es?LGi^2zYia&ph=ufzR8`RG)wuF&9yFNhW
> zjq7rEAbW#|KkkR=L_U+2aW?U%=GNNR6r+0J^`>xqnkCQ~<Csl|tgLxy8UE+<
> p!yMf
> z+%Vz*;?fxRa?5fu>iXAB{p~z?w>!H~3<)!DSqL=_AFu3kraSpDf-
> z4;p2sVHdMDLC
> zq=#QaD7Q>Y#j?4maFFTQ6$WPm4IQKLT6Pkb>e5P@IFIK3`P#m!QQoW0n@
> _tn-zybs
> z*}}7}eEUoOo`;H}a99LD>vKHkhd%rTls_anrQIZ*`X(Mc>UZ>eig!%hW_U!LBF4
> DR
> zuc6dBeFIC1FkJZkHIIU@7~|h%cA>0`%s{0m*DyxfFfQ4^Q9n%JUQLWaLVp1jS
> 7^vV
> zV&k$u;`*KnR}}eOGkusvBkCMR1XExY=RET_>=xY&Zv!a!`$0OEGinyd$|>H^!h
> #<!
> z2JFx3alYSk(gQfyugw04%3!>yfS<<#e`FeN*_O))M%K4X5g$8sgVXgbG&m;5o(
> `2g
> z+ryXFyAt(|593AR;lZ|#Wro`2OT75cQaSpHS7guAG6g4Ha|A&7k_&k6#v3`%ns(
> Q`
> zF+Za`$xlIShs8%KL8z<m?n;;R!+}W8<ywpdkZ?lUFZq~G-
> u4)$u^{2mY8Ma(0k}eC
> zNNea$V2mLD#0*&@y91T`<joy@>(f`gTgLcn`n*F|sB+F+bHX&PB7`yGNpL*E0
> Uy}a
> z&@=1<6Y9zTs&Q&X_sr!p=udIrgMI(1;BUk>?vc<l=P%{}%JgVj@$|zm5=A4)j_
> NkX
> z>MDG#Zm@n|^VNQNrrR@cc*dCxvoXHu_0YV^-
> ~O`9q#F0M@bl5*+>c_X!kuc?O3mnm
> zn()cl&*G#lTS36Z*R^o>5q*Y&EXNgqNs`^Kwo?&C$c3wQYlZN^UYLk5D{zr;y4
> &P5
> zXWz}8Hs?e?2IyTU6K<AWtO2g=+w19V<vq6k(?Rszg=HZ*={>jvqba})%up5qt=
> Yrz
> z|4!qm4guc%Ijb?8;<dN)(Ic5~&QokzI$r9oFVvtKSAOl!-
> aw$_KEJH^c2wXwxR^I=
> zo6bGQWbKLF6ox6J&{cPo@5*$GKw2px4P!JOe4M6V5IYQX5I=x_Nb|2Lb&z-
> rdZpCI
> za!+keRsox{tsZEI>jqm&Vv`=7XFfb<HR3O5_W~qFe}U2S`5~-
> #kd*XzQ{l=U@zKj5
> zI~wV}9&0nrW>>KqnBrRQ{A9mCmiS*j)fvJ%*@nX(IS3S2rq8rhXaNGfuNCOU
> ppl`A
> zh-
> 2@?66O17`^TAK4xR6>A!QRqRYa8B_ASjod%^pC@^;FH>=Q>BNJo3Wim~iVN
> TWWR
> z#68HS=}|^#`TG5*29uKqvhRJs2h+1zEZ07v@u<%De!nsEERgP^*Qkp>j<2e?Xj
> 5&-
> zhxVmwB<<0A@|VIcaKmx$GxbHD?7;8th$5)@^eaie!vr_VgfxEOIoAq-
> jZ5R#a53JR
> zatxb>UkX`9_%;pA%NwaLkMyL)Bv<dNeH*=)`wiQTpBYy3zq!xrn@((rkXe`TW
> enR<
> zBseAau*E;X*;}A(LM7Sh)L<4PL}qd9Y|#qEJ?~7$&zTZk8Oq~~0C@uOD|!qd$=i
> }w
> z;rBkH34p4rx|CVvJiS#1qpc<uw03Wztx}a?3&9<_%)(|FN`9j;o5_#R<wd(r_PBnl
> zLHD~Dp_T$eg-
> ^Dg6~Hy&9^0nnUkXF^bB}*SWEDb{lWk{dqQ}&U@;3Y>D4lagt+E5b
> z??4pn1|!^NuLA8GKFBc6F`)|%<23|+hONzLazfop?_xSt3X~V!DLqbd!1+)uY;D
> h+
> z>#UFjxkpvdc*t)8@(2f^6~*8Gy@)}Z_ZB^YyEech_>1vRoL0E|T<IsX&>93IEX;h
> y
> zI;4As>G?^NecQxXAt88%EJF!h48vvXpi9dKI1$Q3D;wBs>?Tq>mFxKyal_Ci9n`j
> D
> zNj#GQ{H~_Ndz8ctOEY{a<D{M@b($P4*(}tdz#Gp_sTJLtMA92=i_AIh`q&kx$U
> 9xK
> z<Xf(BiQ_<1$P}#9jjpB7-MItv?A8q53n?&9uH{Q}2K}Do;^OV7Gf0LS`NudyIAS~;
> zMv%I=2?nKU&?TR@Os8>M<gjy3I>TJkykMr~vcCg*5Ep8=2|Xy}6T8b`i~c@}p
> QA>A
> zPd;nN_TL}hN%)YNbbC`Gz0fW~>a!i3J2`79N#Py@kjD}ypC8L;@|wGeD+grUdf
> m`#
> z+0;<rVTZ9B6d0a=xdBIQVX~8dXV?<}qpl_Kg{#qax-*yJVt3U?9U`ZGArEZ})W-
> ys
> z1?4&<2+!}_uLs(%NN>Qc!#0LErScyU$x%!-7YC-`76%dY7geXiEVIkEJf<iny|2&_
> zUE?A)p88vGL}~^e1XOe6A!WKVwC6O+n!I<Z<UI(NPhso7DU8bLzbWOS1PH`
> _hNs%c
> z6PppJqNp}e3B&VL5BM5Bc9XBv6n3S^-
> Snx9eMSi)Gi4{o9u~l*PJ$NTw2gbF1L>iO
> z^9mxJM9dDqzg3XnA-
> f#1uUlv_`ujV2kY7(&#Es66><E0YivTN7LWZGq86Aw}i$tM)
> zKm=ZX)R_|aXM(d3&ZM<{qU=hNnP&Ni%KY=^K9NU`6jOgIG5?PXiQUzSJc^Z
> p6i<QI
> zTO|7(lY`lOs=g@R51Kf<F*5Dp1>-b}bMZP4klGC0x`llns{K#azVxHu0Utp{;h$%K
> zZP8$ncgDu0-
> Ak8cROYfdD0!wB{osOeN78bsFS^G;DSFUq_?<hZz!1EqFNgX(v7RPK
> znXH_uWVSm4yvN_Tv3!Tm^V>Z-z8de^uurGe3|NB3E{^-
> 03ct#%$g1mza(`;_W|F@5
> z6)(-lEL}CdU~(MJ^uc)e;6^2B{#rou=aU!JIY%{$I>hqM<*dzq)S}Y4Nx7}Ff#fN!
> zuJ)fuyB;l}nG8y_V<8P~CZP-9mAAJG*P$4mMGexT<v-
> q)Mj>bSZanWub?ZroU%IVw
> z<`<zL;dJ5pBga8U>)QJU;_B#W*sS$4XCv{I(wxI=*2f$I@!ROHjU&Hl+2MpMJ%
> $QY
> zh@P~F?rK2!a3egiw|+Sr=B#i=sEczdP6rPNjTs34N~Q!e5h1>`6NRrg9#%z0aDX
> 4Y
> zdAfIfE@V2SH{T4J;u6kP^Gn~{IpMDIL$QJ!;zoE1uKDIZ!sZ|<{0*H>Ar7MxcNEP
> g
> zU&4d+R%wz^vN9Ou-0d)@JJ!SR_Lb-
> H_K!`o4(+1~EsPL$2PfhF<%#FEFbVhso7%0a
> zOtRxx<YR>Yl^g33OY#S9csOl{WDTL=ad6;sjmMoHDIp5b#3}O|wn;Jb6vpYsfjR
> |T
> zM!29`g$H1JxY?!3f)0XQ%<t}BFprW;1sGcVoBB9!i(%lv^GVWxul`kd+poS8eytd
> n
> z@DGU}P6Q08xzv0&<iVR}IarWNZ!2re8mDjqWf})R1Yv7b#4v)jmFgr)8SzluRP
> @(D
> zl}#d+eelPlRv)rWennrbX3ZYu3W}*7?76q*vMG7}^p2kDyUp@1A{bw}Q+vhUi
> 3trm
> zUlP*y{|%)ea=O2XI$f`*yghc+zPky_*<UVweV@EAs~{ZQXqCu^V`J0pzi|@iXC
> Zf}
> zo~NoAq*T1>l&V|d|Cmg8R!S@W&-0NiY|MB4a8JbBxX-
> uKv%Kq$lxKOxDN;r1;^l<-
> z$LM8Q?t=dr!ktLNwkV&BYB&2~5Bpk(qk6MC4jSOKm0+iPaP8Fc=vt+~@#T@s
> Pj!p6
> zva4c`)B7_A)lTb?<{3+^7|~8KONTsxHjl0!vRl#!VMpyrmxAkCC`i8md=ehWJx*p
> t
> z%)m7f8~K;q3hUY_+-`)(3kuxBGECpa&xI7R2?FuR6|3T<>I4x(*7%cPCeS^Tg-
> d49
> zJHS_(8%4iUYOImLYpO){S%lGVP9*FP>QQ&Xejg|KGlhN{^Nf9scsAj=_+B(ldC
> =>A
> z{*0f&&jIGRGtr?0lx}vPcQLy2TnA!TTLD^?JB<E9Ke@GU(LpKy@*lY7O6_A)9m
> E&7
> zk-W_DXKuxT_rB2NC(-
> Fp&8Y8E{7c*Spi+ZU!#JRnCn!(Z(Pm>IIl_shVh`AW9H<(*
> zi{SOI<Wt=OOus3N5RSkNF>|g{b0^GJ*s&PY;mm%3eG1=yHwgUa-
> q?4*irl(Ln*ZzV
> zmmXw?sMc8(*}T6#H+@4^`8V8HeOdqz$Cv7ce!+gvIlsw1MH%debJI?NJf
> (bF?U
> zu+ZIU+mclpA(qb#P5SQB4EOt<E7rjpAbs$)gV<I-
> m{QNmvPUWee1kA4L*^g%C6{R^
> zX|soY6pSnm4b(j7qN_@?ic=P~yOf>AZv>Sv9@&cwyZyOVnrP@Lel00`&4@F}
> ?|Zlq
> z1D|8?+>HyRU*t-6N{4smxr;1<eaedwNJrZmX*K4ww>5g`q}N_;-
> yH}Uq8MhWow&~!
> zuHt@{5j@QG*PL1?dXXL3F_!)Fh&Hp*_5Sn6Azu6)r;kJT0;}+br+zE9jAuMh7Q|
> KT
> zPUOze>;9dq!ed4ac;&A$pLg6fq}bZtT`rGsn`*HCw)SLMdJtZ+0Ky8oh!XNn2Pjb
> V
> zNiXJuz)5}PTt``_HRL#&(~}L>F!{zygrzph9TS;<isGl?eynYZg1Z^Fly&@Tq1|kW
> zw}cM4$2V0z0X38XHO4PxK&p7pYa1wTw-
> _skOYnvElunU3kI1VZ>;#4D9#h+8fPU6(
> zJ4J=6rryGDbik9fVs5t+-642^>wo9;>RynvN6SU>uX`3hbjz%b1!Y+nNbs!(R1c|a
> zaSq?6n7}z+`iBcnSpYC3PPrVE0M%h5zG0_<EJRn>P!vC^rA~&=j|@~tP34!sK-
> F>C
> zF_`U6LtET(!kG~716|(0^Os!Qiv~i<7PL7KIR4=VN#v5I+z&|mUJ9mQ?{@Y5Z3>
> ?M
> z0r66VQ0q}dY>REqK?u7)x3bfVpt5JDbWXNxdD1Vr9E5>M21diH;*KC#6V_Gm
> UAE)4
> ztJ|(J%lSM<_O`*!?xl2LJb6)9bR{en(ndd{c1_owNP|5FxM*lU{kjJ;JdNDBASY~
> @
> zzFzVC3PT17o@L=wkj$ZNARy;K?b=$qgGRSq$Kaslcf4YotfX}QlMQ=*`EaeMjL5
> _A
> z|3=$tMKR(ewa}FaS2rpOvi*=DJ~FquDOM(4jXU7ai7$ty_v7)`D=}AOZCE$%@#
> !z0
> zF@NwtAxQKH7<X;o#-QahNp-
> IsNH1W@gCeX#Md#Q&jPC}A@1!;!_@=&76QsjQ*;=U)
> z?1lJIq!*?pU<cImPO-y9LSnaTJLs^!*NW`}zOa{_cYD4+Jv0t|mSGd^y`?nroW`hL
> zO^)-A*7P-cFnG#7@w(ghpUavW#z<!7@)O?BB-W?t+MX<IxX-
> XMWKlmY*4_4Rl;;u8
> zQvJ7N?K6}j6`*}@UzjA>>U2#ZvGz`|=7~BlfPBncC9cD%3~M)7>y`VX<UXx?m<
> WGP
> zNRw;K1?6f)Bl*qORmgPPH&KE=Vl&_8w<_?n_OzPtV~2%!MzrO&22!Wk4p!&
> hD)!qD
> zB9X42&pQ@wTu&>H8@}!EY1u5PQ^ey#TN~zvdwxk=IZhAX8i8jOlO-
> 5Ou)1riXRw6{
> zxi|wn%-|g1vCV<Su+mU6`Uu89Uy(m6Z<%M<_F?}ei1u0<H9ipxzH-
> &p?5W))HrKue
> zFE&uI-X;e8hRr8&0@zz}ow7onOz2+Ug{F-
> (0+y8LP<$@{7nC8_epJg^i}5_shu=oQ
> zL1)}zhGKVQA$8&ByRB4>qlG#vW;~(fX(N*I;xQ?w5)~^U@Q{$1XNcuH^+^Z`F
> -|2~
> zKGj!92SP?KNQ4S*IjG}c481AWDO_w4QgL`WtyD3Q0dJFAa-
> VXJQVDS4o6djD_4$f4
> zI>z2puG4KCX@V&<SPZ;!B2M$R$~ps8kTnyGvqK!3X+U84#iT*=+}ga;`=}E&&?
> 7eY
> zdthh*K=KqNd_IX>UjN<dUo}x;9Qae;kz45{0m2X}ZFeD!pt{;FAW%e}%C;g9D^
> 8QM
> zgvu<Re8CzdG=7PcpQtpCb4TefTI=*@Mn)qgD^CIweOcVZk~4eSjeQobdkte7
> w^g-U
> zQ=*ZL@mcD<A>?rhpS~8*h1Pjac7QqDgRqe+$Im&4zevZk0Q4sj?qoylnOi%Q
> @ETUY
> zDF(kg*h&|gY^V*&eVMPd9}A!PC*}OWX<aBb)yIn5pA`7D?2zoJ&$zCynV}Ao
> @3RDi
> zYfxfl`!ZVP;olz^v2*(a%?>BR_N6L*+!(?=D)@I6anCFv0ORMWbCTZVivip)AD_y
> x
> z^O<{eHyF%=u#<l1RF;>d6uBA)NX@&cS8mFf3|Uedr{UYVby67u2Ja=1tAc5uu
> 2)1^
> z%tqw#riLEa!VxFmL*pCwnt1TdB0NG<FS{e3oqVZ^oANaUaH@yQDfJ-
> lCqIEo=1c9)
> zs(A||lt_t7BGQS@7RQ=CI20Hi74VGXZp|@5{Z7Po3k+1>jT&_O(`P#*w~*KH;6
> ax;
> zCg-
> qGc5zs5?W$4e1YQGJ5O#LbZHBBe1?ZtQa$?iXWT8%&foxl22bc0)MufdJdA4Ya
> zkf+a)3!swn*{tpbj-2CLseHn$+O5&=`1ZF!z4RJ|<##m`4C=BLB57PmqijBgj9nl3
> zYy{VD!+au><S{~flsEzwm-*-
> ;dPPn`v^>VIO^p!_{ox?+<JWlE;ew{TyB%NDaB9)h
> zaac_m`RUfAOR9e4D7X?IeBuH5qfej-
> OF<5>+bJP@2&!Dk@NOO2IAAtA)|CN=cY_d?
> zys6myczw6Hl*wbSx$|DtMulUEibfv&--
> h3t;(sX3%YOH2O7Wo8+oP1Muur#{j8A9w
> zt@ZG;MmT>ol#jDt7Yq$R&<^xRRjqvh?RO-
> 22<`DiNARqHzCso@^wIZp)?Gto;Z@;?
> z;8w}xsT@m$k!hcqrt0#AB~StZ>Qtq-
> gNltZqA3>J=}~u<gH)bCIlDoID~_8HJD!m0
> z`tM#a_TJP6BoN7xL?uP+`ryu(pMr5I96Qa5;on4|9E*d6MAQdQwZ%+HUU&*
> 9mVc-j
> zTfnaq43@wru*EBAn%r(FD_=J-
> JZQ4XnRxwL5M`<fR_t_9RxS(@m~zKF8ndDWQY8HJ
> zD?;q^=5?*%TPoa#hj@#*5ghnoHe#H;b54~8AsoHlzI!Is3jARNg_q@V6(fX`C7i
> +(
> z04w+|ZDuY1ZSFT`b!(XEFxWVO-
> !r?AYSF*GY8hR+{<m(&OL)?x_N~wH*0_S*6XCMb
> zs~YJmj++MDICej?EBk(E-
> pO1x|Fpho$u9}JpbSeY3Qt55OJD5N`JG<$&>H@Y7~Typ
> z^gFmnlu0BR_{C+x7Pz5>Hb@u4K}-70c|_spj1{#5x-
> g>YZ^0X+o&9h9xDLU)na)>D
> zZl=c#&+QEZ1ie2dR%SW>tXHJMWppA(QEf!O$i-
> 8?6h941AnmTA_fzJ4em88hD=1;P
> z2=@m)LKS1Nv7BR;IR>Y{Ro<3#^Uv$?;Va}kFZDIx;o;T6`r68SP_2SVa}z&QjI-x?
> zdhtF8Yo7{|r+d|009`v%I=nj*ot1mgx;Ki01|VPif~#LB+{GMoN|zebcEwmyV0p
> 2I
> zvJXOge+S<WpWmR)fMAUwbH>47bfw0vXT%v9jynq9`-
> uo<Xve6>%st8bu)Nrxx5v$S
> zPUm8vZ=$k&r;B5^Ece~-
> dYoRFt}$jA=da8Bstc!pw+q11oKu468XLTx#|g0c`6XR_
> zwX$3Jh37$mp)_5J1COqE%umC89t{Gi>W(r!@1VCxOTCmk#)hv!B{YB;ZK*Iu%
> `)vN
> z_iFS|D&!YrDteszlLEyZZiqnwm3MM%uVpBINR8x~9X<8a$7^lM-
> %+Cqq}!xXcZA!o
> z!V@wSY30Xipszdz%7y#Ynq|QSI_d%L^jKO&<vl;z{B$^HUb~&%P3T&QmjE8b
> fekP_
> zLzJd5AqKi?wZi1Bd$-
> &lao$G9??%Bt%CyjP6`R(yn4z4aQZ<+UcyWq<rbKN&?)<y{
> zdy2u91m667dkMOgTN<e8PJZ|cE5tVNQLl78!z^a2XY5G|0I*q*VFK{Cd~<rfIb
> DmP
> z-
> K*4GuP{Sd>enU!ta&I~kIt}14@QS|_J5~%4Omb||JT1hAcM7*Z;!^zJ<+qESHB
> +G
> z9$a^^Q74D9s!~BW|5|1F)yv0_8_&o;BNN~dp*j-
> ;M>XSOSz_{C9*YpPM`6~Btk3bY
> z3XiM0o>T{i2dc2P(}*hj5-teeQnjcgxC5rqZAYx^ZW8O?`;|w;p47oz7Fk5~hSJL`
> zrsR-HJ*<OnI5f-
> 04$&`S{@;ba*1hqc=Uf|e=obNX0UV8>PzCnIgwv0ms?oKuD$_;R
> zL`BI*98LB|QKkEA8zN?`OZDPI?sgt~q&?#)uc_O84M=ptGcUYbto-
> vW92m6H@{@LM
> zzfpT|_EG`MBARJ&OY2*1d%Ro6=?}-
> 4i}~_A(}0BmKQWE&!@KH?lTz&upP@<5D?WVA
> zqQ^uk`hC#JO{e6#&bwvmi|0-C1b0;pwRi-
> ;hw(ae`^dZybyMM=#J0wguOF(WJTZE*
> zundyGf5v<ZYm;gXnC8y~o>%LlQw8YC2E9p@-
> G*nq;;53aeZK57Qe{s<X9HJRaY8TP
> zQsl^g<LR>Q=`-)N`h4DGtWe^wiHJq?M_7z}21`_oCygZ8l$4)_R0k{J80<&s0Eacx
> z&B6IxB*0(0EH#-H$<2EFC$e5xH^2F)a0-
> t#)hW#?u^O6e5B;<8B_4gO2jaqhpxJkG
> zo?QlCmS_FRa(3Vga#>Y=MDXw?szP1}H^Lb&XqtGK(Fd|8=ViM9<Rs^bN2k_
> Go0dp;
> z7Tf_xG-!v14ZR(xx-=6K_}<;Ar@_@Fn9*@Nx2g{0my`#-
> JSy3$TXz&%Fhri}KH;+8
> zBg+Fmw{yVL#zaq*dkXDp-PFs!o^GH~&rf3c-ji$H{*z4I{sC@=-
> IoHPyHUs8{t6A|
> zTQ`sCqwv_T4+1@<Xs;G3Nmp-
> wG%bGKV}I0qG*URHU&=!V23TZ6>*iFrpiSRxZ#BC;
> zNhHRSU3+JRpn&_&Fz&|j&kV~>R_D{GDW{gz)oEGEA+rIinv${4XDwQH5j_=O
> w#gM8
> zfl%EUKCSP=h%=;WPzjc`@bXvxZLZ6l?^YT2#$30cII3CpmlCOr`|cn4IU}AL5i{34
> z-&K2-0l`N>(B*mG3li+5x0jJH{p9IYchH^P)X<Ch*2SvL!u3!jyD;BpXgOu?sdh*j
> z4&vtOxYt|!yi??wg7O!y1d4Ot9(@db<cw3-YAMp5v>as!^FC@#Sqs>-ZOMbg-
> l^|F
> zJ@x)qpB>j;TD}SM*xtu8KRjz}YZY_C9YB%_gq9-@C|AR%8~B1aXa2<ysV9ApK-
> WqC
> zMCrHgTv8$stqTu;WHSLD?~Ubp$g%`)Xb{1>XTs>oJL4FLvx01~OD%#AxVN9f3
> NXkB
> z^5g!#O6iz(Xfb+!XEgoV2)^&Zytcb*JRL|g`qDA)xqiBx0hK2>E*EdSWP@lGUx$
> GI
> zB{lcvZ9d-WR#dDziHXPmsZlF_q*It5E!Xo$1zvF6*;nk*-zyQ#`fD-g_6v<cnIG}&
> z*0QcrE|sAj2VX4(Ds%iyMxIV4nDIC94?9X#)!Ca;DZ{XCT(JtKZE3JTq!1k7(4xsh
> zcSUQe<2_yX=>yCkM8G8)Rr2=5bXto;ajefRRZ4_*#uhR$JUAHo<8)p0z&Z52B
> Co8z
> zNL`iQzRukQbEZ0CWXTV#n3tL8y*~JMESebNdDTGrXJlqx%&kK~UcxK(AkKSV
> x>u=^
> z709sow(sbJqiNWES7*_LIJEJsKB}lC1o)}vzLs1#&f>au3+w4r97@|;Q(GgPYn?8(
> z2tmK905Y+Drs?l&Lv%I3fbp*(9w>pZ;9IAIDe~YAXHlC5V(#Hv!+V@I<Y+f9N$=
> SR
> zsi%l+*Fj2&fW6D3$3-
> ZA3Y4`uHz@V=CPxuG+9k3Z;1IH9#?|w6mUx@r;chvv9vIl;
> zUbxcx;rT{QY{Sg9Tdcy~5<O$YDWAiEn6JmEztK!6fKIw2jp^VQRKbjS;Q6Tb$zxQ
> h
> zq&IC3nx@n@OEw3-
> N7meP##%__RZ`z2NcIn7I#Av@t>nPkjO}Urq7<aM=Y5S|Ql<-Z
> z3S-
> )=QO|fFoeg(KPQ^OXHT{Qd_Tr()HJkqgZ}wuj%YIL@WFBYm1a;kVuP@z)^7nq
> 2
> z1>s2LJ3+NtgL<g;4pAPi;Q{_3&kpz-
> $N+!w^q$uuvnLLO+l(MUfT@6&(~@3mU%E9j
> zd9AE9GiH|V+elKlqBv-
> Wvjb<(4HZF@R)i9fPW$HOsfhn%0A(Nmlrom%n++A{@ubAd
> zpf!jg*c$q%&i0uodZ=mBxG6+Pze~!f?6Z!^o84eHACjp!+hnQV=<$cJ^m;+Y#=
> P-d
> zKSQTnw4$r9tNK}Tx#V~X=yCkxd0mLy1vuClSwUMJr$=7*aWgg2m-
> Zyyi=&YKoBN<9
> zZb0-R-nqsg8Sbg9--
> r8e+lh?2bLHw*(pa&hKOYRV92!|3I`<N%H4BNP*yDj8AGY?u
> z-
> ;hD$k!{?3%zOYo!JGa?raEqO_ShW!4(gkKi&dqNA!*Ri@b976NHTo>&nNw@Xf
> Cds
> ze1i^A%Wq>VR$5$8wmQQ>>5hh0D>fpI_FQXRYrFs+fF0QaU)OPMGl>IHqtO
> Q_*UR=@
> z^Lfr@(q_e`6$l(<LL8v^v~<V6)f4&31@wHpyOE|iJ!-
> An!k`dSRm1DY!@~>z6eBmH
> zK%C?3(yxpb|4}6AOryUP%~$vy&nRjmiYZF>(}~<lmLBBazx&3?RUy^m&ce%*
> $%u~Z
> zncx0t*~JINZAQXw6Q}x_EA;nQ+t`2q()r=s>0lcRe%nD}0adboZTr46!OO|(!fRx!
> zVH-aG9THQXVaVOH+n#x7r!#-
> oE$ZDPuy}4d8qdC9<IXUjV+3hA>1<DKpKBj)e>|kD
> zeylx7dW(GmaKdovY?<*LJiMg1zTX}O=Mzl&Yk)p}es7+?6)lyK&Q={9SA&0BVO
> 6#@
> zXXu{TuHrAhT5<y6VH>a6YSs@Z--
> ?<#XFdLO%&Q1`Gy=EXv;*JLhsF^pP(VMp7z}o4
> zfGTJy<Gh461^4b!A{}t4WU3=q2zMgUqkqO85b%mHGaR&)`A;WKKNmF=vJ?
> @?)+7i~
> ze$d2om1Z3p9`uMgrWB@WUYa?ls54M075Hg~Z#9S&MP{>q_p6m<GdI$g=_I
> E$eiM7}
> z**bx9sEj9-ge4|+m~V?>3vn-fDO`~v-oB&kxc-jsymY7~{uIw-19DDr{#xs{QvE!L
> zJ?A0~g5{gb2B%K3(%=eBhQ@*Dx9L|h&#e2Sr_OcJ9`T!`MC$@Jp9TZOK@q~5
> Fw3d)
> z<Vjbdn&T%|q60k0Ct;g!GnLhIO&!1AI<d}OaqJB;+JD@QCbGEdsOYzO?I`n}W
> NO+i
> z&AZi*XeFt0w-
> 0N&N>3DKTJW;iVh1Qb?o(47y`#`HI&5ETcg^2=aYsBvp0}8<`m=0&
> z>#{o8PG@{Uy2f>ixp!x^P<M&}h5Cc<`5tpGL=OyLzKboxElZv)rz%jk?w#%|fBt
> *I
> zd%}m8O@sBUy^clxCC{Lmo>M=lcXxxo)!i?DBmW#fv~Fy`0MViFKgbefhG^ez
> 1LGD5
> zJKj9rKK9zXl)R<XciB6U^rUFtnwp4k6mr`tAj38au--2?#AXw8n<yBHAf(XuvhKrS
> ze>$5B0^!&ToGk`jqfm<0p7bsu;!t^=^&+C2h&ew7?VzNRw{G`_o&sMSA3bY
> MaynZ~
> zYpk5s*5rL<PbdCmb$Q;c8T<M!P*y#+-KZVoG(jOi-
> Hx7{<s~QEp6XQt1A~rI58Y$k
> zCSkjtvggj5q9q*LSM5i~<G3Z5Ek6XH{pfYf)--14RNYl~6TbAjDcTkWG5#vt;-TVD
> zvy|IpHRth1w2IFXTp%iZ>sJSB5XCuWT6>;6Iqoolc6r>^uPS=7|MNdSvGZVG>v
> Fy|
> z@i1w699`8t%Iy;Nyp`?%olGu?{<yX204%x>R10<}cq*^*+CWB(I6LNQfDg8_y72
> +m
> zd%BlB+4mOLlaj(cYi+Jp(3~!h+%|5TF^XAZ7Gph;p1aY_wju4It!UR0AmDndoJz
> &t
> z>0nv&RnUETj!hGyRP}bV98_t}E|-
> E}L&|Y10>{yO0S>OZSq951GnU?2S<5SPyTg2t
> zmbMaQiL58SHU}<qF7wIwm$!Dy)k~RVUqIWZt4p!FS)~{Ll^6jpQU1WOzlIRq_
> ky>9
> zDhNY9r%%Xwh<;8Rxa$dF?v}VOzq&5fr!WHT;dDL@!<oY)5j#mBenwDhafY`L=
> Y0=9
> zj@%m(315vsh**jM(YHo1L|MTYM7$j!*oRxfxWY8$@qo(`2f;78Gv)>FB4FUIA
> +@85
> z=P)m6^tC)7yhrPNXNvQ?8KoJ%NnF-c%=x_>%}j3#GH_lZ-
> wf`F%pKL58~^Frmu)Fj
> z2=ht{pZR;`P==apU^9{rT{ip@74c925xQFp8o@JUI7<x{tn!YU?izhc0sr7Szah{H
> zw;TS$ligx`*=a~Oa_6M#L(t1W=mX~-
> AO6|4{Ic1XFh8Cv^+%Eo@Oq&rN^SN{Fc+}5
> zX(3+>J^~kz!?@{(zY-tG66B34$&Ra=F-1LqIwHJj8(NSRIYi(1Zt4?#qe?zMd<%6p
> zst=hnPQQ^v!7}QewlMyc1U~5%nY#HGVH7ulTG9<yi8`_9-
> WR<?#0Q=;{?LLn)T>Y5
> zF#4yY2NmfX6Y~=^2gy(eROqPVBX5=4WW|kfsc0~Lqe7o$yCa<`884(LC5W5xk
> +R}~
> zv8)#<Wc!c{^+49_%!C4C$xa`<V!s*m-bDqU6xF{6pl2ddv-
> f0DA*~gfnpfkg#nf2O
> z?FVBPn!WX((mV+;+S8FfwR;2?#_chc0169U_mHF<7oB;wNn=;L$jtdkMP$tl+i3
> >&
> z;+0z;gMgO(u|DRe9h@P!;V<8&JjO9Y&6YW9tI~yWk)eC&LozfXBp<do2)D-
> lNf?JE
> z?Ya7`xtoQZY5MttRp5HF$eM|xUC4#;%|`fdH1JROC1B~!l7Ko4rB*0H7oxb}t(Zh
> X
> z#bOnzxk^yR^u9Z)q$4rkhX_srWU|-
> +Y%y%i12*w#SSwGc3mf)B+`!_D8KO(VSMsa!
> zA`_P_rM>-pqRgpjP%9d}+oBBlZj``TiKMPeg5(NvXld{lkjuJ!gyEK{u*))TxZl<q
> zJV2bdJtm}U&_9}EH?b8FZWleL<`vZo7YNPP!NTcZd?rpv;>=+r7vjj5MRfftu&Zo
> N
> z0(T#A>E381{<@LyyAHS4k1&qYT-
> *csJK?1Fbolw_e&R=DFHX~r4Pw<{EBbyjeB#_W
> zLO#+s&ILa5K+Jy5<|S-y+_*X@-
> ++|BXk*yQ(iirP^@d|w{0ZvQW^4BDPyGxbw3IkY
> z<UY}2SmJaOrwBvo@o$xiI2SS~Qg3(dy<|RtI6*&g&3S_|56CMv&%E$ne=3YV
> Q?mJ-
> zKf^k%O)z)4_j*@PbCWY-Xdo`rTxmGKtWa?G@Q(d0eR>?!p-
> |AiOmw&CrgnL^CivTn
> zy-
> 6s?u9TAO9PSTC?0fgnY~e56Y`x~PF`&39GmJ`33Nij^glCmrFV$WzhoE~t_{#u<
> z?SGq=YU8(P>0o`+aeC7ig+LJlaVs=BrA9BD4?fDhtq$;Ha>NdWNJpRG56$|AP|f
> }5
> zO{?X_0}S$U&=wgO#E}ydoDd$e&oKM-X7Q$A?-
> ory4%_#a($ktPqnW^`7tx^ve#1U}
> z*CT?rMUCr6{|#Uh<$+fx^XbbiTV3kMZvc6zwp2Y|d>CSSg+Xw<)CeE0orK~Dl
> S@rh
> zs$M)ECzRnEW^?G#U8=JcLq9Q5&h+i%l)vIQRZd5Sb(H&`w=q=Q)h&a>2bilK;e
> H0+
> z9QH6NJi@VB4AFjau8>?e`^BJIelb#!ApUU}EU|{fH;2c!hSV)dG@im%Q1tOEIn-
> qe
> z??S2HCoR-Nzpy5Kvy3JA-&-9+cU;=&GD_dfcu(K9kl;Yh(fn<#09ch`sciaN8~Z)k
> z0m=U(LzXqteM}%$OdzI#S)3P~pGdFS;`*o-
> +*T98!hA|Poz9n@D${5dPGg;KST<pt
> zZFmlqgW0p_u7e79yeu?XI>dP_oVwM6iw<FeexI&7@tSAR`SiDtIa-
> ?gN!3Dli;<t5
> zkp9gDwveKh5bVa0UR5AJ*iLwJIzf7e^(BpYiEG|kkakL}ynB*ZOAfJZZOE=lSi46H
> z#1Xtx5?F34q+7MfTdl~KN_N#ad`5@{j{ba%SDGO%|40wtyl#z<mu5=2(EXV1F
> s$Zb
> zKX~<7pnzx9<+vEX_xs~U88VdVVToO=>zBL2s0HFv4x&FH&rL5Zi~+t|A454)5A
> (Bx
> z8vl{DS4;Z3`{M#<pJX_Tu9p{D;@VW+;IF%~kQD>TaQ8i5ieU}Amn<G)Rrhpree)
> +s
> z&~1CfgnJA2kD38;Vx)k4?5#i80F@6A_%_J7P>g#aww)Kn12K}|m(J}WQoJyqu
> 7n~Y
> zSLqK6@a#{l?7KVv7khUdn>o-
> wh&`KZaKp^ZPndbb%*@#^Gcz+YGvgCx*f1v>=48Xn
> z%-y#=>8|~qs;W{eos@q@wq=^JHTKNdpD*RzQe@LiB$EQ>58d2wN~mE--
> e))7EjjqG
> zA);Su3P1g@K~BPBh#{BltwL=I*5V9@IYFKx=)ljx@_J_G1YW_844u%92%#f#;J
> 8rz
> ztVQ%-
> GQfXHi%f&*e9PN8;vT)e@B|q$zhiSayM+IR7qbZ+!Sl+vX%OPa2lER)91HA)
> z2gH4NFR&Y&pN}zlk7F6l?|pazl2<6e0NpQ#On}js2r`9fIQB?wLhuhf$QiQ<E9KY
> +
> zRQ6yM#bo)o&Ud^9N2d`4$m`g|m`}qL)S@^^?6wgZ{URlfhkwdRfTlcYQ<3U?
> Mge7p
> z!4av25XBso6LmI3XmG40EREYaWzMQ$!lgL$d^j?rwR1kHH2Ua#bo(6Ee4xi{x)X
> Y~
> zOxF=ESE`2+!HLxS5f4}HixLc6o_~_0IZGJC9HL}tK1)={9Mo8zG`0kWJi4(Ge00GK
> zOUTgdzi{Ljvmz}1bR|+|#QJolJ%0o>g_r(BI{`Li9_PI8K&p!%%R@dSE6vfW^Fxo
> 3
> zG^I|D6g;BvOX2RmTNhE7GxN&$7Mk{DE6d`Kl@{0qo6L48iz@ZA&%$QRS|RAj
> w6Is^
> zN0{ibzlM-
> 2IX75lY;2yX#?M)Sq0Jc=5bz3T9!ZWBCYU^OJ7jb%SW(Foa&Ft4Z6C~l
> zwhtohhb{X4@tyB#m-|_@G^2zBIC2-
> eyo%Yr?U#f5S$$uzSlJIgIU5_K<OXPus40GK
> z4EpEyYKkt+IXf|Li4|lX$+kyc<XvW~abK1kPpxIUa$FXzOnGLxax%{G9M39?aNs
> 2w
> z3D-
> Efh(A`H`u3{tCfi$gkb{dvi>KDbh}Ky0jV~YFM&njyRm5nO<}}MX*#VWf27DLi
> z2dCS~;cz$?)m>R=7b;k-4X9`9hlxiRNlAEVRdjbnm&)<3=)HHiNPvITaoae$A9qIH
> zHg(JkZzDdsxquwFWIh*!J|{%*v=~1{!w5Qe^3=Sx1aQL;w`eh5xx;KRO3Su92H
> D34
> zm&OOX`wcGj6;9DSJt8;22IzoK6`@ZKrp+(=4s|G4t|pQ6e3vCY_Uc}nGF}I0xgL
> WQ
> zyaU4uJB9l@LcpiI<fkRv>yNn|UZ5M~%2qmwODC`T2BX-
> &)avuF{KN(LbXdMa3tT=x
> zv-KGK*|`(FzjMDNtETrDu_TKDd_dId+9?L7T}YKhp&tsP)x8c-d)olyJVqRL?q~qr
> zh5#Q2XqjC*=D_87MV|Xq_!A}Fy6e%>g=pRDJrtCAid=L#-
> F%*FH^}>N=y&g(@Q<-w
> zya5QHn^l|oC0eY<AQ#YW0I=vW(2ry=c>;fe9jo3|k=))MsJ<Zih9>=aU+Xpku;?
> @>
> zR^wTg<oS#CxP_6wxh1rYL3D8+hBi`f(AGK(xah7-
> _h?aDUyxpRA09o)#<w3nk3Yeq
> zh+HEXv~F)*0N7}3YIh9+QrI!r3;#@x56ZBMma#h{vx|n|z(<~@@>c6!qK&7>%
> BS+u
> zrs(9;bkzj5I|Zn(>b2Dbs_&pJ=_Xd`o}w+0Mh+ew?4Z^io!B`mB(-
> vB(+Kwo#y<TZ
> z{g-
> V60V(@rwTav%#ec&ax0(@vt{oU)+9}$*cj|O{q3#8m<G*NiJUg>lX7{u32F+>{
> zHxcPb1?}l+`H|GXG9DUg_{f`ngBSgOeL=;#3Oi_n)`QBxv{?r~E;21tcad#eMyz;H
> z;K(CPtlFOYASrO<oR%CP9fKVOrE^CRh<S;&J9Ki=+HX)rH#Cq{6?04^>N!Z+$Yb
> F*
> z5{|wSBhK0pJraS80c%~Y`xlL*U!+9MC@M^uxzj+n2=fB1-
> _AHq4OS*rIkXx5xNdUc
> zPMoo*4f6~wFeS2apLhWP!PQX#h7kEpE;32Kphqq167BHbvN#8W?B(7%|G|>
> %<-xq>
> z;r!B)=!FHNt7}L5Ur+<JB#$ZmnbR}zCbcAv*DAaFGjV&>R*qYznTEC_d(qa_e!vt
> I
> z#zseQ<wj<t%{FnHWm*O<ReMNy5q^QxA-
> n}f>`~UT<oUV)X)|&*GFMr)qOc(3Or22c
> zYF+RVBHgN|NT*t(CDCd@uC*3)KgkY!<lIc~94~Qm8wVUR&m=&Wmqr$gP*!
> x$2xzv8
> zL?NI^;VuFTGnhqF&_z53(DW1m7@6&((atQTfC=y6&h(KGcNVxeU^ca>u?St5
> FcPl=
> z?!=J}&}@txJ%a&~X88Gk3qXH_p^KyGPH4tgG*sFN!`#3Oi-
> wx^B8#Pd68IebocwL?
> zYk+5}AMFX(Gi?aoIai0w_`$t37hm7khHt5arl@Pzd7!>`7SWh&$K675DCi+`wdIH
> #
> zp@P%R-UZ}3&Le@eJjjl5tjowgokdk-
> N`jM2saIGj?iA?y7jhHMxIl6Hi0VQ~tP<ew
> zI2bvl+K7hVCpt`_ERZ>XKci%&s+bJ*BHT%&I+JP^{L}dfTeThXNbw4JpR%}ZN-
> A4J
> z++D*v&}P_{s-
> |bV6{lvyXLT=4j{8V8pCk0oMhxE3lI0!ABnGGKnVhhk>9;3eEaxu&
> zn-(Q-
> ?F>Bl?9M4Vaj?f5?c~o`G@S*!8`qzcBIBHQe$5Jz4ugegDa(?>KVrOBqZ<R7
> zBO?c#uKf-Dk%2r#u=&L$-
> v@*>Bid~bnKb<k(O;%|QXS5xEQ|{b(asgf+sX4UFxte-
> z90Qr9_Inz-vC0;SXG-
> ~EzzvW%_ABe|LM+Q>;r0~*E#W_Pkg3s3XHbLag172(+9UQG
> zQCUYnEV||i6mDeqneW`o4a0B6JcNq+ZmH$F{j0XCByxM-
> B;bgG5Cx(B|4u%c?G*i8
> z+Z6No_ye?^BtK0g@ywm!Tez0W<y&ZNFS!GWw>BRix-
> Y7=nypvzt;d_eVerZkOYxs)
> zJJ!*z=lmT$Jae2Pc6mOx0@@d5`eC>!*RO-
> oToQJkRzB5o`?48T)dgBx&{WIQ9ShJF
> z#a*Xb`fMzYwQYm@sZ^JJc`Mv2JGi1-
> `jDJVawSwb68c_w41%>1W)DR^0QZuZ5zeXA
> zj>`g!F-ujoiR&@8)wTTXOE3V`T`SXI6^mV5qhQtu2ib;yyFBcif(cc!JwykrcM93s
> zx1+`6^=<yt*cOjCc8o-`k+|TKo8zZ0X37xRR~AkzkE0&VlT8u}&*LrQ_VFZUf#!t8
> z_Tx!b{+6V~w?E4wDQLl!Oz6ubNTnR57g+!1tTLj`XT~=+@%s~hZ(c5Mq2ayyAg
> >t9
> zEb^0D7}|lEppEkOR8v~S3}!64gnDm8Xj5B5tD7bs;AxbXg8Zfz!jmX(i*$oUsTZ;6
> zxX+qx_RD;w>ZV{cI9ar`Q@Bv<@q#y6q9N*=NHSXT{&U-
> 0LeyPCrx8hU>+;BsHkzoa
> zkBHB6l$Tt+kMzGP$xQYl%3MiOiW~>b;YTKATE<T@SEuB7wKOdz&Yr#z+G+L(
> $*B4Y
> zi9r$fkWwd28-
> ;LL0iB5yyej^B4G!*>@A2P`q^V>?@*15^!qGV6c?ydg0fdE$RK56d
> zoS*m1*x7oz3d))Wcj6cBCjAuw)D~6Mpc<LwbCTmbXD&Y^r3eco#j}bw0r^dv
> ^Kd=*
> zl`&XlBv{5$0^|9kUK)CB^X^P1lVVuZRaG>n8`YVR$x~&LHUB~@Pmj}6(&lF6YA
> 3{w
> z2ZD0cS`ReO8H$1F8Fq}PHfJLIpf0x9GnRTcJd3r&jspCHwdGT2`kI(lfRg5?G))c~
> z0b-C#TqNQNz3*iNdMa>3YD!%**K6uqGB_h5l=2qCF;3a-
> A2E9GK_;<3eWon5x9+{^
> z`p|SjsEuK?wppl7%f$h~5I*4;7c1f#TPzw{?`G5qJZNK<&#FD-<EoN0)f5^Y>`lha
> zCaY=Yml6p;#qxJ#jqVBTI+Gv8Wlgj7b;RQ^4#s#TMb4E|lA|KEy!)eGR-
> q>6E^t|E
> zdmD}WUYvhr)+{l8k)0PEv{s4D!i=inkL_u`&+Su=1P03{HYtw*n!R8UshdR=DSpP
> @
> z(_U2#zNz*3$ebRcpBnd389U6o{SnNev3A^z=PgTWW`kA(?5i}uy>rl#Y7}xJWT}
> j5
> zN~bGJ;ZP<uC>E2Yn={eYin$Ps;iwmnS|=yzEBd)`@W`CZ%{SpQ1S;n_DWbfK-
> #j*C
> zW(mM*G;rciv`5mEv(0~8ds<6P?KMx>&Lk%QJt`|N6`GQU8&NEJ@!`N7RO#z
> H(g^+(
> zh<!|3lS+&wqy^x**Yh#QR{w0?HLx^kU`?V}dk~L_q>=R;pGh~gPmRQu+MkdI
> 2L5g<
> z(*+%#`c5{YXC56A0pWgLr$}G-o0G6Mi|92Az`3-
> )zW!%X+C0rt;==w;gIZ0XfA*b4
> z;`A^UWk#e}JKW89vdJT9onLVnFwT^2Tup0oN^=W3S~y%^WME#p|ACsQlu}
> N?f9S7j
> z3e0PB5TQwM6s?Oo{=j!9Ev*73fS60$)YfFst~i?2G~&;>oU;Y&D_uu=*SF1A<Iii
> U
> z*UZm^JN~K7{^iaxq?J&7X`oS47QUkWXj!T~)zIdkTMk^3Ex*z#;?)gMi}kY18Bg
> u1
> z)v8G8x*54S$JRhtdw#{!793{vY_i7qWqgo^h2PjMov_=*;<rR?iM#B=1f~{=9k0$
> e
> zndCrMC+dLZGr0gzn<{($K=$`wcW+j@6BU!p&)SBQ0MOvy7L&0WQ#@!dEw7
> ))0|dh7
> zJ@Y!T6D#lu+xYQ57V9*LOl3T)YY40##0{qNmoGh&w8*d*)yZi+s6TS8%qO%FR
> w|r6
> zt6na%$}=t&NG+q3HBa^Z^%R9DWttNuu)^%Q)5G@vU_Qlb+-
> P#m!amt+v@&5ce*Bm&
> zSEQ%9fzh+25ZlEJY8#TqCOc(19qIeje&i^!+X#trw8FeG&7-5s6g4!)F)yRV$ucIM
> zaE|3avHQaUAV|dwOHv4PbYrN)uxK9kHRTeE!J`}QOv^eT?CM?!(JmfGx1JIuO
> bLDo
> zRabkq)hr!<N&6%{Ca~w|-<eC&PN~W^9$<CM2J4-
> %!`hu!`1hYIz1A4B$ivDWo6v(k
> zVoj#EL?Uil1_LKH<)_O7M|$9Ag-c8lXiJjezI1}e-bc~c&H4#L`uHBr+$>Y*sij1-
> zk@-#U4Z*oBr`CfnhY#G!C+@RrhXy-
> U*;dU`b9Qe%#DP}oEGF4&D)D|Cl@=!9Z5^sc
> zPX9Z4Dq3E$zoKpx`vH$ia}qIG!iJgL*(zw$T$=OI2Rg*~$G>nqaH(w#M8hn5a*w
> 5H
> z4{3D&;O&GajZ*W+5*b*8xC{OjvBfiRGuFxaa#X60kgi|6(eZCfkA3s}5%-
> _JLDCm2
> zfA-
> JTOv=Srah4*LN5va5${a|>w@*F9#tS&S#nf^T?6=guaQ;d%&Q153!X8_~7jx-G
> zN#~wuKWoOZU{G0|vy1Gv>S39{eX&1bJ*;7=vUGRIRXWaX!KqpI*EQ^7$3Ai;
> 2cKy2
> z&++5@fso=}3cg<{$LcC|kfGAE1bw%Gy{5m`VK|rC(zWSv*`L)h$*YjJbQ=HBb_
> }Na
> z)Rmxk44Lx6n`q(Q<Re4hFeNLAb9URhuif@Q@w`^QRPfR+-
> NU5j@nc<6gk;vrBX~A;
> z1uJFre$%R0GXy|89rUVZyuW|9BG94#`gW*}hZ%kH`$EbvM=0-
> YytsS3s!KUOiQzSI
> zRJCj0=yLqTxDT0OdZPr~yleBNwRscOtKv6P8t(5lu`x}GTiDpO`F$_rT>JM!x$KW
> 4
> z=F`uTTf(khclp}G`%7+wSsY%3e}k5{gzrI9f!H25?%#M8a-Eks<<7o0)uEuj|8%J_
> z!gZ`E3Y|&@ok~8D!~FQ<QJcl7s{L$pB<qUbSoQ61OV~VWQ}mAg$Z{lm=QsrS
> ooY*v
> z?Rn5H|EQTGaIaDRxrv<vU~PI~^KLh~n3j>-
> ={a|jC=Dr<iq5rp<1CeWu`jaxE`HVX
> znk13R=2FFedzi~~{5e=E?eT|7>0S46n#Xw7_d03xX-+o%PS1YK=xt3l-H9r2rp&o)
> zZ!yUQrsmV#RLrB0>r*Zp?|3*159_n8fuw7+q40${&-ZgB{sS--
> 6Qg$7^LRFrqmikr
> z5W{;t<J%uD_m^stz<sCivj!#C@X@O0d_W9=<C=4`t)IYNP|02T{k{C7NFepxjw
> anK
> z&Wk^iKxH>{<868vE1UY}Hd^9&uy`SSbO@SfImHT=E=NUGT_05j0H6g<JYs_H
> 7tci{
> z-MnEf3jK1yxe;imz7=TyZQ|6`eLwTO-
> xe~O@oCP}b!zW>XPCRjy)E_;m6sApeWzVm
> z&$E>HleWdHLO~NzJF+Hrf<9MOnTQ|*P{9CmJAON}xOcOT?8FQ0E!H9riwyY
> ps5eqh
> z!EPgKh^l|PfkCCrR)!8o6ZqaHil4R^-
> %!u6m7=7pd)&xmbO@UqT!yDOMPKfBw<;0e
> zC?#x+PtsCQzyhSiI6uyr?W{0=CQEKho{$qzU`(11w@d<$I-
> 3m`vk2?aDcCFG>8a|R
> zS4vK$ue?UhHxx;%puSCq>=N)NE#m~Xj`e3LW2m5~sHy~{n~SIltqZnMNh)ip_
> `j`Z
> zlNxIBJ!+;xC@Q3({t-oPS*dPZFB=KPkL!S{(%e9>$VeAzGNw6_+(6B?Dr-
> j!ahCq3
> zDkPxd4vjsL3eH<BDq^0XpulP_>7z?lYWE2v8L4lzp5Hl(EQj=1SkO{)nAg58QOtZ}
> zj35n2fPIS2D{4fxC}U9402tq+|I%fqhH;FHyq9=Rng0zTDq$1olalhAZY<ioc>g)t
> zWvwhrB}FeTG9*E!1Y0*dh5JV#_#m$cxQLZm+h8&S?{|6gnqd-
> 8n}`@lGaJsQ3hF7^
> zr8XitACZ|o<k2A`$EpHEEi)T@>hizHY(LR@Y3-A_u;W0-X>B?|E2AdGysdu$i`-Ha
> zP=6h8xt8+ukh*51r-Gr;h%ZL+^4#b<KJVAdJDaza_L&_Lgr2urzXoi^gj#b`F`1dP
> zvg(rW8<N^rtNi&kZX{|RpIi5qo{Y&TYNLS_qIOZV<JJA^0gu&@AE+j&Z&R$0rsa
> =)
> zD}_B0R9&;#&MT@CK5WpMqoTuP`f%l@SxrfMpg_AYBss<!;r{Sjy^c9$|3GFkJ
> 1RyW
> zHzn!Bs-
> kDA44Wkw`UlMc1_pzY&}@`IIu@s>%RyciBbA1^s7Es+6Ts2Q!$PxShK>y9
> z+C^e0?JkQbz0d)6Z$xr*1k2P2o=K5u2&;dVSuruHv5ur+w!Yzhf`-
> I<U}XE)TwH1z
> zlfz5d!ei){A;_4q(E(=voLJFe-fWh%#(V`eFKs3O=U>1VJE#IGu-VYk!zig)$l^nz
> zJXwZR<04EFrFw^1$QbOL1mh^&WL73-
> ZaC+ng4L+IC;<&KGHYRMF8>G!lNj98WIi`>
> zS!9@fLPm+{QAr6IocIJ*no)k^^dpB9q6X4Hsd@dP=!3o$A;k~`c8H=wqeG+O;;
> 6r!
> zG}*ma=_Ipv0_lZJib@W%%*;{W%>Q*j`fZz&+a8Vm-
> ljSxNr;+HLZS+6<8~p*nmm*3
> z;&7s4;GiX;1sJ;}#Pc#)|Kfrq9KNe+^yg%vFhY=kO+AC3m>7}m_=SobH*G^KLBL
> EZ
> z!{!fP^mmJYH2us6qJ8{+&&Xu|Ndqe}Cp*Qc$f($~LG+&}7of9fdO&FYt&mVoR
> X1di
> z{xobZrU`y;XI2$bX-+Yuu+Pc_4B8{Gv$m!&-
> Tm1(*=lX^FI%Z7XLN?6X+oo>BeEYf
> z0$uNK);S}@ab(dHZRd%VYM<VNeU8yAkNvxEr$drPvRye?&uQNPZq!t?OH%
> Gk<#ZKs
> zBzRJP8x<WVnW-HjXD}tNDHGZl)DF-
> K)q`^<A;2VCF#79nh*8Vw=qm<{4E9usnmWyz
> zn_yG5#*@zc6}G@^ihUdyp6RE7l>O8yEF?W{s!TU2x0>XfRMb@enj<F8IuZ21`
> j&HQ
> zW$Z-b{hV3Ju0}71`ux+`-ItA;x$y3rtKlbs_G3t_o<W4!(|5vM_7{PdI-fY!(ZkUU
> z>ND0tB*>;s{Tbg_pwV)7!pGJ&;J5_;!@4`c27Y;KA8_oO2P|58l^n9YOTL5f>9xH
> |
> zzANz}+a2&G<Nd7$gWC<aPF8i8M*2bND$%k|w(Hs^<pJih-+dkHl75$<xa-
> ;>{X%fU
> zbeuA7^yZQ(f#8xJwY9@^9NjKG1hh}T%SxId2{B<>qZ0B-
> bS+wXe0y{gYd^=s>KW#q
> z1?wW&Wq1Gg?AeUJ_Ut5KTZ8}`ynH&6;o=(t+IijWa`O#AbMUo0d11f6_niGv
> UVVO*
> zDix4}koe%egmp<gbW!rRxjCC4xjZ2of2}kYw{&Z{da}iIsie!$oUevTT$tFa@2j_2
> zjC$7E+<)_(RH=>rp9pFHk;?ub7<Ej{4F98Mr4!d>F~EQr<jFgjlDZRjM*cl&+rc$B
> z@(qy!fl$gamrysnN&D%Xgz5m4iWGCwYus$Vt;1=Lc*OOgWEiTDWW4n$8LrP
> SkwjtP
> zS9W*@bxXQ4B2({svv3wSc9$78$aDNU*$qT!;yoB2)bkMf%FOprpkuC6Psmj?
> v*LHM
> zRdkvd^VvvvpoeH2IJXPiGo8)wz#AD~i=RA(&U-
> WC<_>bBz#>b&S(2j451D&6Zwv5*
> z_ruG1hK$UEBt9K_DjmSR_Ux<Y!OiDI@x)lxOA=WUaa#aM=Oxus+`m87Kz^R
> sD*R6h
> zi|xM`*8g{$9Q(h6{GT~FW`_SP;^X_z8U5#4G5u$i|01vbS5A)OKb!q8!^!>UZ2w
> E9
> z{+H+EIR7t~?mzSYEtk^9Hl|KyjD%mD+!rVJ#mRkfa$lU>7bo|{$$fEhU!2?*C-
> =q4
> zeQ|PMoZJ^D_r=M5adKar+!rVJ#mRkfa$lU>7bo|{$$fEhU!2?*C-
> =q4eQ|PMoZJ^D
> z_r=M5adKar+!rVJ#mRkfa$lU>7bo|{$$fEhU!2?*C-
> =q4eQ|PMoZJ^D_r=M5adKar
> z+!rVJ#mRkfa$lU>7bo|{$$fEhU!2?*C-
> =q4eQ|PMoZJ^D_r=M5adKar+!rVJ#mRkf
> za$lU>7bo|{$$fEhU!2?*C-?u7ll$MLvj4_giJDtE89NZti(2VB84DX5+8P<d(ElIi
> z72y{r_m6R7X8i9K*#BK&F|smpGX0PGUbXjWgfn-
> |#^*cg)(@kmOAILg?$4=wA_PQP
> zc3cjBr%i%_e3hmWW7=5F1{9cwkFuLPkrd<6gpeH|;m=R9G2a*Io{vM{kB1)Le
> p^lH
> zmq_1_SKH6srB9DXfcfK*%1_^SA-
> >q2t6N*&_xrcupP$!jmmk<Z@4KI77$nVljPoIU
> zA0IC=<L<AMt0rvk3s&0}C=9=E37CEpd_4SH71^iw!R&l#>*GV~O*hdCd;ICX<
> @4>l
> zCj{}v_x0c8)A_XTs|~?;#{)^u>g$K0c#mR^9zjtFfwr&Ab-cxhRANRmc^j`F(2}0j
> zO6J6^2x(`P)K<pB2Wl_{z1WIY)K{80zMVDgoKf)9lEAl7Mo~OAXGq&~MK!B{rq
> reW
> zZ&JTulo?mJR-z&SZ)20hGI~}84M#~YgoV02`;QE*L|uZmy(tLn`U9pVa`QrM_-
> %zb
> z>7Z852{CBrgyREcd_kPKB3l^;ug3L7k<^|unU}&0`v;k%d%m$S0DEv(Vg&6;d>m
> OI
> zg{f|4k$1CBiK2tXAyYFsGp`YEx|KrC?TqKB(WKzASZ1`nuf%eJI+VQ>vWrBvObh
> CE
> za0U~R4$|zX`(%()F^rC;#tPY|xh3(id(zNyan!Zh27aM6Aren46K#jpd^IDFiFj0D
> zMb=R~^>$f?oiNvKS%yH$1V;tel#C~ZN~<xdV9RO{<>W|hC-
> fXwa7)KJ`8WqoLnC3A
> zvWH*>isP$;Ch|^;bjlplfJd$oZ*__onndfvO=vZ=IvG~o_9C;0)ptj3FNNR@E8YX
> K
> z+{++_E`(CAKWp2VC1Il}P2q{}5@C8)^lK6_aldqI?kmH4@CkeSR*h0uCEUSXZ&
> _2L
> z-^>SwasRej(!C~!S+W|0*66w@gljP`wX=l3-Xjtr3lahP?isYSGS5~;=^O%u?LJvk
> z-
> xJDjktA8>HsHlmL`r9=wPu2*keAxdFm$1rHkf85+jTNT#a%{%DpRdR$b_oH!&#
> }$
> z6=sb*l?mA`s)Fc5oPw9n3)qK}26>DQm+_PRwYq^cO}T^EMtL)^p4|SCBAMttTi
> |po
> znSzT-
> _a)egXY$qZ<Q61Bm96C#dU7*9mSZC1R_SUvfXtu@od=D1=sri<5rNFM7jKjL
> z5|Norg9;z9?w$x+mN!ZYB#XtR4=XV~wrw=dN2$b@;jYo7Qvu=ES)--
> mj*)Yk4lh<J
> z-_85$Crs<?G1+&H6Cv2JMwS&UI+%VDGyU-
> Zmo8uUl|05pf3}c7&0NCdRB~CnP%(7s
> z+@(a}AZH|6fJ!r1uA(<=+rVgsQUbULr;${m4yEZ)R9F29`pm;#QXT6!-
> mHCSobI0A
> zgtA)wnFW7^%2Tsky-
> 0a*Xd07cV&j|$rUhz$$^sU3oZL#4848TVvIt#xH`@wiMk~i@
> z`;pF=F=sff#?%HJ6w<jNX34G05J`lC+z~OP8Xcg2!`!eu%kG_Rs9i&yI{eAh5h+;k
> z4tgj}!|F;kP+!`$<zV>CkoT@5YusT{cwIQCy${x4v_UCXE9B^CuWX-
> gOoqAh^uj&9
> zt-x5iPtl#F&U@0|*(L92OdfrNZi;wlj|;_g>^Brue*9<(CV}&i>_b}^F2Nu!i)oJt
> zl9N3X6$Fah9eTY0*^i&asG|u|IR?+z?Z%~v(pk^W0v#3_74mwR5tFJli`3MEt42
> %p
> z?b^3hkwjUbQYPm0i83{aoF3^{nagppG^IJP%3x1~s(sQbMuOFC$g`^P(6lOCah
> Nw<
> zEus&#WBwRI-
> H9Uoi?AD4)tOS^26Z7#;SFNOnIgKfeXD=+Bqyz?t0U}9md!ENRHQp?
> zE@jxY+6Y8XEE793Uku7w(q4jE8^-
> wEk#{0`@6uHLtbbV4hZl5_)#s6CrsYxO7Aqwd
> zQcozV(>thUs^qU*iC7?1wzQI~Sa)ti8b}sl#vqvG*oZBQxwVZS56Y~)!^P_i{8rE4
> zDCf(I-
> JRlL??pec_hDT@0~g;@81z!lXvJuPM=7e7$+{;`s1NRDvA5MX_`9FAsGG$w
> z2ng412I#n)%5dZ#h0B%l2F=@e>;R9s;<NA@7M;Ni-
> t31Zk6T5zs{Ec2VTwfCUIn<l
> z;(Wq+({4@rzw3wCwuC4>4~}3kW~7k64k8V1qGc==kJ_jY(;YzCtXGO`X^n6goK
> (p?
> z*oUmIQE$|gbAW+I5I#Iw)XNzg2rwtKk+%5-Xo3UDeZ{w&-
> Zu0|*5!`>Rrb$C<~~A7
> zm<$dcDei9{)4uH<PY%Dl9})RZi1xfQ3V?iY{g!o^*wC*gDQ$`i8WMe%C>QuGo
> <CBb
> zkD-
> }MQ()0H8q%*!=##Bd@2;Q>CK6=_vXFw;oa%9iyGB71OmVq<71V?C0vRNcbx
> %A<
> z^zbf0nZovB1{uyjK*?Xq?DhyPCkm`!#7qP!k-
> Xe2PWPO`6v;G|!h#g94x`dnyQ<NT
> zNlX+Z_S{U<YV=9_Os=k@OwctxuWpwOvPpTwb6X^AjOqw~Y>*@2n!B{iI4ta
> QuCOJ?
> z;ggg|KY*y|ROBb}Qc~A37n&d`u~vSFWZZ?O<)<TdLj9b`fXSB{-
> Hp#A(|NO(`<qN{
> z!H5rT7GFr;()Y{B%%C(nZgeVz?YEn#oApigNY|`|XG6ds`Dkq}Ww|ouccF@nr(V
> m@
> zZa8fjmr1VQd==?5*d|i-
> PAjg>FuoI3MN_HN0}n+JCy9wGR;95&e%`&=G^CR6B1y3W
> zj(*0{zQr{I*Kcdnek^3svGX$O2)2}3Qpm*C2Z%z`XbR7>2WbJ)t`yUNS?8?Ve;FY!
> z0t;sg{&cQ%jB0Rzmr@~-
> r&>NRdU%qk94)uLoU3)TS~w6Sja)3M!bl60to9yIF|#=^
> zWsH2ZQQ35S)*t_1D^9W#w<dXMvlAg3RWsM|S1Z^mgG8#s-
> Q85XN?$N2nxW9s*IB7u
> zgw#U|YGNrQ@VQb^QQ0MDtbld))ldmKc?W7DDtLK@6!7vIjoT#DI%EFWJs|J
> b?nBx0
> zBqQ31h8TLA9Y~kzJ8^^6%s8{xF1Rlt2TSx9J~wysq38-*MHyn~;xMG-
> 36!rP?||}~
> zrr2qB?fL_Ty3J~C{BFUnN6a(fXuUI$`n|<Kd)S3sH~^*H=qF-
> !&bkv>rpUP~`pytU
> zP1CI`F#{nSXW${Pc<b{)SQLC80@*-
> QxFbUoafGI%W#Z3|&Jnr{IhLpcD_r#rog~ou
> zfEoQlEG`Z;dH;B}WtftzNc2U2zScD6R<qX=na2LJXE?~Y7)MlVk_Hju+L1EbC!hF7
> zl}5OZi>}m)CAsdl3kZ^4pC+v!;!eRHPnrhGei72h%QPRdA%!MA&Qr&!VXI;k#or
> ub
> zU1G%Zzi{svarBEoml&k0n9U^<to_5C4_=91={?{QJx?-
> 59r4WAvGt+%4Py5<r3RfM
> zk&rt4XBjp=M1}vn>cO{^El5B7)@Sx)2r&LwzfL2z6eL0ZF(hxcVl{_fN;D*owD7o
> D
> z7c@OoW4_gjeT}KVxToy=-
> F3uwWT@A8&eE86EKaH&gH6`jL1Oy2C55i8_aMji`?kSA
> zm<9V$vGzXh_yXtKBKEuGZz?xFDV1gq!rDWxl!}q_pra~g_C^pk!2YIcBrW*!pf
> D~E
> zH#ptvEes0-
> a?N`2=s~_26p|Rnx;q7{TRjDdl&canqkI^H9sAX6(U?xgrWvsm3a3_=
> ziG!VRaq1-
> d+5u=5cFuJlSLze<?zVy_X<@jR0hI9oPR8W>9w1%6S@Vh_1kptOaIy}u
> ziHN1^Ss{Cxzr<7T{+b>U%pc(qI(8WNIzU;-1J-8i9n8^ZpBmJ(@2gK4B($|jizQkU
> z+<~erM4JpmxFJVJ%v9s9c~nb8C_*>5UVT`wQS|<ar!CW|Pww>{_%LfEH<wP
> GvE-j+
> zNm^zWbE>Uflr8Q0x1if&#Tv6s-
> cT|JHZqtjq_eEuGI5%ws>F03do@^>;<*ASll6@f
> zw1LF$b&;;O0Q;fR)u(t~QU6r+M+dAZ&&nxgL;fbd6=bP#qi2_vx}7F@$I>f5%C
> |~h
> z<e1TKy2~2S+<TN6<n_fVx(|8vq{9Xo){gKPJk9e8m**064m4+KQ!*r6YM1&R7
> 7hxV
> zBHl43Lml=3e@k;Hh-%A>3;??~d~!e%j!vh(8F#{jLY(W`(B57=f5iCW(diPNi@0t)
> zG*kcW>rJNjX*`VYioxp8hD0|7!EXn!bm$m@IGRMAY7R&z>CUf5o{VFrOaMC
> xr8FB_
> zBMPLvpVe>ojBj>otBL1POhhVYfS+DeDeIJpBCG!@8d5G{>0YN!?j{KQpt)Ap--
> zl<
> z%|Mr3sy#75_@(sG_<k}m1{9w%JF$V0ni3c!qMd9jrAaI~+-
> N(rf&)Qde62Js@!d_4
> zOvRZ*Ez^sPMZgG@%Ts*DpKTd?8X;%Wy1k)?1zAWWEaKD^+L&J*@Dvm2m
> 4ADwIhC77
> zH1M%}uv^4yfD5IrhdjIkN9C@EUKzhe_m^!d5NXAPVb$u}YS;UqqOXW2>J2b
> gIok*s
> z1-%{fX~{9r8Q$Ka6&BCoz5ccg3Vq@pw7-u~j*E-
> du=n(dgexa%>GAfj*!q%@(oTxM
> z%5?`2;L{aq=@D^TmDRbQR?-
> E~ZD#8ushsoeTgnx<ZoI>|OJ^{<Ujo`9E`dMLRVA(u
> z)GhSGlYHqh=+u@gM<MCw70x!{Wp-
> Z7TGsa<CJjrRk2Xxn*pHxE3u?%HS2BO$YNvXl
> zaCK1i3A6arTaofdCk=NQlccjgwAZW|R}i1$Qgt6XlWd`Jx3I17@?q5k8$flgk$~3(
> zH^Vocf<&bKIpm6KsRc!5gvHZdv=Ui|TN@=66Z=@@VNE4B=moV5U_tUh9P
> hJg9`71l
> zi^;BOn9DF*9;A6O#RGBCSnXb=tq9|IQh;J@7z$cJJF6)PLff0jFsjOfpEh21>W85
> w
> zkrAyj#XBZ9$5#A)rq&@6{3Iv*hlY7msTdK2atKMErHJTo<cY@cRjIrinthyH@ehE
> r
> z2^-
> mr{ICj1p{=kz3`p*13knh53C+X=qd~lGAh1wQk{xk$UW`s|5K;Tbtm`RTH>&X_
> zPKfiZ`KGq-$t-(}Zd>3vVvLSs&ZDk=e4i7#OH5|35iKuzVsnKbY@Vfl94-j<f(h2O
> zwN_BxabxMJlz=Mutt<%j?zXNs@}eq*(G>v?IVXDlZ9pJ319$ko5RW|%G{CGx
> 7+psS
> zour$kPcV!st4^$0I4ld5czYq@>Lv?wc!~VSEPH8XY8Ny=qbQs9;kvy7?CDr*%?`}i
> z1NPIidkHA6zPf)`CO?rkZ#=#`ntqr90e370mjP^|=rb;Y2w0lvWz;SXA$r`7!)9WL
> z(}_`0HuK3|cR2G5IhwiHq}|FzOr=BP9qoZM2IGlReZa|~7NGeCR-
> vQ&MOY2}$9s9|
> z)-(0D6LZY)$9NLjpF)=x-YOr(K)WFuC9ph#>kBdQJP)q(3$I}DAP>&~7@>Js3f~(v
> z!ZMTAXS67w>V;47klGK(a>7tV3m@%_C&GSE)}9&}?Xn%Wc_{C{7CSqLrzpo3
> <~vo4
> z(molwn*&4;-
> iAJ`&wKa6^T4X9h)DP;Y$ZZ2<_E~`8xD~zCcWoYq1IOYZ#pu3R}pBW
> zy=%a%@yeee*u=xxV2T5CMaz$$6s2C-&WJVf-l&s(7xOj^;rAQlP7loHA-
> ES|h}D&;
> zczU4e#ckN29bp2njV?P*E-
> P!8CT%U?SV+PTmEJD3MSFd=R#pm*^B7J|Pn^fF>B=iU
> zd&uQ`-Ldg_TEDoGk}?mE28m&qK21FA-
> 8?{&)8lE8{8TDTav*2b>vo2>>j^e56``>}
> z`qXyHf?&zWaZ&opYr_<oO(&0^p+D?B7qhxZ9@kh*C&8rj1q#<ubnT2q2$`}Fkl
> &Qi
> zBq$E?DB(2l-
> PgInioqPmeVTwc@dbr5bx6xhklcqJ&*UUa*?OR9_$HOEBT!F8XJn|^
> zv|uC5{S^el!o6wf&dEmZk1s}OH!~>Pr9ou|Jr3mZDnz!bU66-
> OS4ZNDPBL!F@K#f4
> zBQv4ADESsymxLU}7S`EWblZ=^S;^3dW<q3lCz)5Kw(-
> (yY8?**yCk44*EIN=sFQ=Z
> z5~h_!Z&2dt+>ww$@F`Xc1Q=Y)@nrmv)X*BB{S9DbfoU!7$}X+Hy1)B%Y!m>^
> 2x9T0
> z_TB~%XN;m5ZG4i)Q)e7cE79}4_dWHtk(w&b-
> A@6G9y$L)N9vh_I8{7$gIWofyHdp-
> zR;=5?tDpg14%qkgR%n90ZRX(R$n0)B6S*}<cNpsARCDW<+b_hLq0{eH<T|kZC
> smXr
> zF$sD7w77N*f?ijZn_j$Mu!#@1rX60Guz9Q)$zD^mw50FIAqc5`;_}5<Ay;fAN!x
> 1`
> zjHdlAh=nCuWT#Zpk#W{d4i*2M_9!Ew|41q}tsy@m@LR6ihWNh??*silFzYFBr
> |Sc3
> ziAekCLDn;|PdDYL>S0>hX;@uDv9Bl(yqLTG-
> 4wrjPlNtK)!VRQUfB70>O7E=*EfWb
> z!cz5Mg@szUQaXeX;8JrY9L;4q_7}SalZ$bO+?6#YFh`2_{c8RVF3(1o7|gzVRckN
> &
> zEqL^ZYSm?y{ouXz+7fDJ#Ql7^BiFBX7DhiKfPKh3<}dfB63h&Xy}JgS?L?wH!jrU$
> z_xiAoAff(ApezRbnR(f>e+`1s7Q@b}{VImWHFg#kXE8{%SsS@Sx1`csM4f^8Ei|
> {Q
> zi3mqtK^sn|H@VTD-
> ;=k>enX{~HbC;+<zfd;3_tx=PjkkVqTO>E?;URBj((qggL`Du
> zz)?!DM4ElnQT+hoImvP#aP9bSx{`86yA>tI*b0}|;Yi%^*qji*%Mb(EH&KW)Di=;
> y
> z>%gjV9gMZMd$a&<YTqi3o>K%^wkYk9%|SXn@~=r}^F}B20`vPWawNhKPp|
> PELFWad
> z3Y;zRkbUC0Yf+e*m=OCLkoAY}ZB<GLZmBPE;eBwR0M?HOv3qfciTn2p6cF*05
> -mM_
> zLWgtft@mgS+b5H@LFjcjInNBMmsqcEhk!wvjF2Y2s5MU$n~i6f1?meW#F*px
> lSwQK
> z(ZeHlDtgH`HR;1@AYoC7{-
> vCC!3zBFMZ|+A>k5MI_dgPYwQBSoD|f*tt&MiYp?|#x
> z3wK$kbbWWS37UM0l_r&%sfe#~j+KGr-
> C4p<lBMk)&on3%wtAdZ&?`eL6U*F+?lR(r
> zI+?AA&D4?KhhAqRe~cxHROH`TApiU}j)F4mvwxoI--
> ^TB+&|Y}=%b$Lg=|nf&E@Z$
> zWvo?@p(ZwKbcElQLEbSZMiUzWX20qC_fSUpnGkIBoLK?K%)H*vScq4m_>b;
> OVT?rv
> zhg`fkR#R~dZgzh4Dy==@4vNIGCB>!!X+nc5^Hk1kke74(fhB!z5sNXBU`W2sLH
> u%s
> zLhf%Mx$WO>EruU<HiX}k4;^C9e;EtEF5n+4`@L+1#JkmSDG93YjWIk2)_H!n=_
> l<d
> zXm!o5L%fO7tchwbP<XI%eE_4yhreIP3hdWYlA<(P`&)|?=>6hdXxNXjRE@gj4
> UaWc
> z74JW_T{K-wg>s`hvTHFoSaYNnFI7F)_PYR6)ycb7T-
> (2Q9h@#!YR~?%c{lqv<pHB2
> z#Vf*kNRi9Pb-
> S4xbVgVFF1RPr>bQ06Qvj{}1gHJBHZ;9$IGg_gQ1sT`(0{ucWW%%`
> zq@R1?>L8)?1-
> ah08K_N(Rc||oBl(^rd!@XktLJS1PdMg_&3lpv^mvM3YQI(S3CLN@
> z)Qi64DC5?n@@c79Yw5N)4u5yKtPC$5>0lOCUVeA}wpt(5(XnpvbR)g-
> a*}M}bO<PW
> zV9iln)2(=)HA1+y5IKFJrNsq(np?APy81xO6CP?piH*2IBX4H0-$amZPX5=%vj*`4
> z!q(#t=#b~{uSNo7HNVYgXrRcH08h2OqKTJ<tC8C&LtGn*9H-
> !r<lQzpGg@Z_z<>D-
> zPVCD>7X$<`GsO|RPYJe?H9d?_!Lwl?i5M)y_0hp}Gf?(`Xb?eke1lJ;<J+=N@z+k%
> z5P0vAPz_=dHFOf)pm{LP&PSZ>jq5FB)<A+yN3PVE;Y%frj3H@gBTc$waI#PNM
> m=XF
> ziO~r*XnwTQw})7sw#*QwG$BfJc0c{AFv|Sdx5WuD2!@}j-
> iXj0G%iXSoov>xgMZ{_
> z<98|I0x(gjX-B*fwAODo8i<C^JUUI5adj@_*(r>Iuruj&WeTKOam)PT3k0-
> C2clzg
> z8U0lwMBx;|!7hRrM&MKv`x-
> ^W07}t@XuclEdpAjnHv|e9B+n$;_5eD6Sv4mJ1*sJ)
> zqJsLas7+F6G=RKo?lK5qe&oU3$%v{pv%yTGYI(#8K#Dpho(+`cKb7(PqfL+a(?9(
> 4
> z1(i10D(=WOHX^B&d6#<P2{ZYOD34$$>P*uMU7Bfc>--
> N)__#Vaq7QGv+_zXcY32KG
> z)ST1`@$ODx0_0Wzet`p{sDQV8bT|x-Ss|Z6K?-i1Jkk_&f+tyhN(-oHlD(US%-
> OVW
> zgaoAsanlx|{>pe;=Z}57jArixO`}s;3MQN1lsi~fST&Txqe}*JuH)iZzbBtt)Ss4X
> z+~)1f4p>eIxPhilE=10yA>m@3tVSxOBN?k=Yau$B@PDK0Y8}fJOku&+no&L{^
> W3R_
> z2mMg*eVw^qfV3j&Sl6{`eBB^EA^D!awlFY58{rX-8tj6ahQugRf`X9^{-h?{(^6;_
> zrio5bBZIpVK^{=-
> oY%%Ka6Xo>%&%gj*7?}D+bi0s0s4Wbfkdn{%i_2~MIo7>x=!eL
> z43pi?X8(|ku0LjMy>r4sBo9nGZs(E-
> ^Q{R#Bi3d^!aOo<FG~(ldoNDi=uWT%PN*;Q
> zD+Iz*r_&{Po1|72;fc5*r%0B=3F;_oO3pEroPs;Ujgx9a>LFFM($i|=W?mH=b1ez
> a
> zU#w4v_VnZ0)~^K>f=uPbIT{fv_=7T)YoNrF7^pLiecOamZywin(dE~m=V8clMY
> 6XJ
> ztVNMzg=?*oz<^G%GzkDh*Q{M{#9{f(irf)q<uG-
> tus!>)>&DI3p!!k2WQU)`&mm({
> z;I7pbWST1Qj42ABfJ?C=_;-
> `2DyZowHbk@Ru&{!oyevX$gg6to+5e#kwK^Q1dWC3N
> z6?!J%uni=vvw&&EUBp7m*yFE%E5o_-!32<I-2ljZxI?YEo>q;;u{Vjlv>iv1$lMSK
> zC8~fYN`5KI!arQdd$oD_J!xQdlvAkzN;mk{S#{{Q`Gr+G)Umif{C8{D5?Kh)lz;;8
> z90|2+JLYKVhb9w$ffe$VBbc-
> u@!`>Dg$xDBEVB4lA!(AifrWUHRe5&y%6>h>;yTRH
> zi(a%iTtg@D%Z*vmtiF-
> ixKaxza01xW_&%+b2xY3e)Jy!hGRg4#8v4IUIrzg3G*uNz
> zd!ns4Y1;bILryaHDI;m{%ZHrg%sQdNehEM9v&VIj&_rxc{*8&S=TVIqR13SXsIS
> &J
> z3v!X_PAsl0tSIlNoplyKDM!V_&-
> <0x9@opMA+g<(z7aQL`58t1cG`yOhN8b&x#GJ}
> zy-H+F)I(Xh|HX5g|Lb9PK!f=>9!xr{a@1xL#D{g4@?efA;<s1-?dQTkx(tJ<JfEw1
> zJ;L`b%809k<31ro`>7lAOvCC}rkm9PjUqIDmDbyv@Z4W`v6vJ%W%(C|IaY*(@2
> Jg2
> zJlpw2m{=yl-
> <hjqa0#=+Qo{Uln75I=&dWIJSXS<>{ap5z%@TpDAcw~V7qk4uUAF~^
> z-
> 8hdDt>AH6D{+h93E!q%HS0NIl@hplYC6yTVOfTq_pS8|q2uY&uOuseL(wP3>jB
> 7F
> z9FZS&<B)Yc3>v}PnK$>Q#qjm*$}{`hJ$VxNnxpz40%#3AuhaST=<CM$J-
> MXjPlTg!
> z5tVaj^IiIADS?03b?x}581saT#rRBR(zLl(HVna?9U6#gZrQ0;LDmXrJfucl2oGfi
> zWrq5iq3}x?P!e&&+yPX|qUZz9)5<G!ebm$|;>K!e=)oXI+H{GB1(D-
> Z&us27MM7{7
> zQK7HQu9kif4v13;V8O|n7TJG9epG?6`Av|K2$5qhZs1XXfJq)uJ6xo~z%9VEvxh
> k>
> zMD2dt&+}Gn%agAU9|ITOg$oMEcK?=>7dPpAKZQcd=1pc)PDG@gVvW>yn?
> YSBR&VCE
> znI>HX%JWU4#I!!|FU|TN({eiv9x;<Pnw(n>Voq!VNEPWdBgK5xw*JyK(@oAu
> RJlDb
> zjdB@fj*Seibm%qW;4;ma+bP1lMg$i?AL$8+eEo<q8pu}tT|G_~Wh5NNfV%*#
> *`_xI
> zKu}?NGn%a>Qah>FI1`p9wAFb#0BYX=E~Sy~_^9$~Ok<PS8_H(3K^M%Ca%iX
> -F>I%e
> z!o{DYq_$*Y9^^0g2n53<!M1MK^6>@w9EhY8yH=}~tvD);GVzbCLM#83eO_9t
> 2h+v}
> z_jVmC!|G_q%|SYJg*CR-eRU4*s^N!;OMAf6s7Iw3im>v7pORbC^83##)nh|D-
> gvkN
> z9Z<=!g@G02t9BAc11z&gE0{G^G}(Xegk)f^bfdYWPU9G)y|a;yEcwVXwpQ(7!6
> LA1
> z8Z2H4FTa%JqCoVN=O8n03qn&$vaQ;MP9+=4rD+3XUicaEmZz;k=O^dIi1+0Be
> Bp?4
> zOm9j_L9x)lN3{`;F(62M1!Z6dcC=**en6mh>A{VXXn=&o#dW%|uHaqpKgm{{;
> <<|d
> zSgNRT#fQoV&e=&h`8jAf{cWokbP7>J1tY1dLc}{*SEeZ~4wm|vfJ6FcF5=hW@}
> #-5
> zzL7(oXLh<3l9w=Z$QXpAo0Vh;#={dg=Pi|%uAPDx9RCx*UI$65S{#3wQ>Ywbrk
> 8x%
> zCQZ7x_S43K4~2h)2vpKlmI~!z8mvwyJ=^rR(~{zn?gLGK6v(fBS=r)LEpd)1s|Mx}
> zCXT79XSlx)M^y2=L6PD{Eh`5bItd`R%9{-1kAo_k+S(#%h4U&&pC8lo>t-
> vJ<e^N2
> z#`NQ#LqOlxQ~J+w-
> ;Z4{#+MJF&3;@FRh5qBcWHEmVoml`E9jp<I0j)qJg=5!V*`~7
> zto7=i9pHbyBk=vCHG@>I`1rHmM%39G^#Y`75Q^HXVYDQpKy^cM$Vj7HJn5O
> qx!pLM
> z!-f)_>IU3vEeQM@`I_t6qsHx>7)-
> W?f${$Zu}X_eI(yK&NAPBBz=N$au+0O)JiI>M
> z4b9`%l-Lj`-
> ;WiwcOwwc_oNzb#~2OHC?<XMn{7R*U<2PWEUrN^DDYNDUXd+mtxFvb
> zf4|R(<CoZkzS{*J!<HE>Qy<(sA#?pQMp6K;_Jorwy(<5`B}rs9W3b0mQ!O{fFJ#
> *E
> zW3EHw*%~Bm=>yP#MJALL62g0PYgDE<bX;a9`?-aL%M`j-
> {y$kI`H?LMnSTbM2)Dk+
> zR%GLO>}5?_Bmp3imhJUS9Hy`(_wUk{GxD|23OU`^5afeY9al}(^0iqji9299ZI^>
> T
> zXrP@t3FJa_erm$ex2!Mh9i^O7)a9Gt>}aKu)4^Y_(YoRv?WdfU-
> r|Y`!9}khmBIxW
> zv$HttVvh(c5`_)OE^YghL=;ucIX|npWt^DM@$n(X=94v`5hZc{)^{xVaYJK4G9Ysj
> zP9M(p?T?gZ=}tdbJn>H$qH#2Qx4mEh&sD1k!?|D`PM4uUzg|iP(Rd784K#8f?
> Gf7R
> zl3W6~^Izlw@990YhHA{I`;=_KJ=FSXew69NI$vz)6E9+#(6=hxf9>?h)43P#AnFLz
> z7;3>o-
> U(t6CexHE%Kj7$?dSEEqZAFEDPag~TtoE1^xBCXX{NSNWNOW9EH!U^sI{Lc
> z7~pA|@X=X^>qsgD+=V~=`W%_SIOl43Yu}^V!KhM2sXO)nlS0u!E%9Dthw0aB
> )SF}O
> zCY{yGJ9D)?kwKnqeK9{0;Jj2(xf6>)&KdRuVtB4%Oj!G7Wm*W;D;Zz<wa{7ao_
> ONW
> z(bA-;3n^`&4-
> W1Qq(kB4YV?9@#DjHue&b(uW$3z`dQx66B{~{x@Aj4=PJu7#fTF&q
> zJNQwg{%B7)j-
> d0;Y7`v_Fpz3eZyLxqk<OQ@+7l*uuW+rP1tBi9wiwNUF4<)8jKbw<
> zvrAgw^a}bVW?aye`c9<SrQgKtG6N;xoZX#aWQrye1aH*WP8pYZrn6VM1<{I)v
> z-c)
> zEwuY5mOJ{YX9kBm3hFZxJJhGz3^FgVQWRxln!Eb%9xG#S)JZF}dx>cZD52;{Q=
> &+r
> zU(NDNVjR4x0(-%3wgO8UWv8}@m@yo=0+p!k-
> A64UwU}WGhx{}4hqQR4gMS(Ab`UoL
> z!kOG2BzsrxS)6;jU;!nWLDgY#c#9CsSW!~bXiNu$8ZQ%>1d5+OMp^=p++OW$
> ds41{
> z!q|1isQSe8V22p$+t56YHSv;0O*XA2*$>du!|+Fc(o`m5?izBs07Rb$&J}*_cZ?<
> U
> zsotQX@kX}mYyYiL+1r8llOSq0=^Tn~6-
> $#LX^8fl{20sboBW!#GxVTZDG2<lbQ%~5
> z|4u%pRF-
> ez=4m!!kYY!5*gazHMeFj?ZFOy7M$m>%eH#)S)TvA(Y@o{>X$`GEA1&%u
> zO)$rBcpN%!jd)V!JJbtRr|&}V%+Dq$Xlcwb$FNj?2V@815xaGOS~TZi6m8ZlPjY
> %5
> zp2LKEZn<}ePKHZA!VvL1f)<*giu$rfSTNsh(c=Gh0Vn4`Wd%+Nw<1&iWz7)U)4
> vs_
> zX&iFH!LLhKG;Bb-Mv-qxfn~|V$Et7T9|)&VCFhX01g^+-$|(DZTf5n?Blz8-
> NfHmx
> z_Q8x!4PvBKN1%(AB=`qyjz%n0qgoco{NgutnSi0T&UabYutH4=rAdbFBVNlYj8
> Dd|
> zpzoE^3YV9^g!^4K)dD0Jo?Kqx7Z0-t$@Q8-{ryTkCn?X_EbL)h!8o^4T-F>lW7X*?
> zX4K;m6{}oc(8bq<I!qEISuepmq?YJiFRt;Yc5xT3Alc{}rh^H%a>7D^m(iq*D(ad2
> zCM~@(HDnyR29k8TiELQx=>NvaTSnE<vu(pjad#^eX>r@Q%f{WIc#(~4iaQi{cX
> xMp
> zm*Vd3?iAO;%XK}^x4!k>zutAvk0g^!=9pt9XIAD+j);8!Zanj@iNyi14NY!0-8r;n
> z1Q(g@94ZO*$cMyS17#GbU+PM;6J?F?^k!T4W29ySb7xaeoxgUu=>m-
> pHRZx1a-66z
> zZoLg1uh)qJiuq8;*PMgX@F7p8(vJWBFuXOI*&dyrjxztnq%k;S3<rSN^R1r!7+;d
> <
> zOG*DtK7P0kyfwm2>1CPIS#sE(!s$0Lzn&n<wY4%9n_O`(43SaBZ1EwVH=b4-
> g+%69
> zzvQE2`JVu_>z6Lv^_DAEw6X=$#yM2iFMW-
> @t2^wV)@aL*<tQz;(v4Tg&M5)(&oHAx
> zZo&yZCdu2DlDhe05anY6^sHxe&m1C>Og6|t!;(c;b`T~MvuaZ?B6w(-
> oL|@j#J|&;
> zyX6JH-^iC~!!VP`#I0|o2a`@ZL~XeWw<H!M=|1@*VAy>No4}AJ<CoA!-
> wf=?NPrZ~
> z;Fb_TIvyS2$};bp8y}`j^Fajf6-=r?1qa0>y|f+DDI9;eb~9(@zj7PHGOK<z&eC_4
> zHWnjx1hev1LRb&gs5gp0C%7X|x;{h%*USa!vmxCpj|FijRlU8#);_)Ik`jed%e6J~
> zi#B}v)J64M>&vHFG6svp2McY=`*+NtgFqKFr|A_^?V=xePOjEHjOFB4xM$>mr
> =st8
> z>QOewM%}IGO47+Bjk?$c$#VO=SEuy1G6}4y$$U?CPSdyw`iq+CAFuV$U4&S
> ZJb8g~
> z0*p1Hh0^0*f_^9-0+o+6-Gi^>jbWzUY>Vv?R^#IfPsp*f-
> W+@;^7%Cd2@ET(E9Y<O
> zb0gsM{0mnL{P|#_QX4<WRgqsYLS&oU?prt4*=(_?K)nK6^UTqkL;DL#t6(w4t
> mc<$
> zl8W5U)pcf)HjstJSHx~w07jwOC^J@~+WUMpUP)P3m?7c4{POtsWRDm`N{Ci
> G_wIBf
> zgr`o{Sbp`}P`Q)l@4Wf2_~T0=DnkYFJhS3y;(gyyY&Zkks3-Yrc{@<}jtWMCk+ycD
> zmq|kJAAXe!+-
> Sp*s*mcC{86P}gT9o_%o<x_?d%^7=QnB5H8}%}p5xRkMrm3BwkgX~
> z#$iyMK>jy6=ru**HYD%@kKBut8z``NHs6nHyM{aMYK9yjGt;w8KeLjs8=|F9%
> 3vMt
> z0iUngpw9=Gp#qVtNKt(ac&-
> E(xxaYx=<_URh*L|&fWIQm1oJn1npna{7s!jfqt4U^
> z@EtBtI4fob9=5B&M^T@DI>KQGY{0tp&;9;2&^;9kV8@VGybYaWIfV&6u{Rd?
> ^uC)n
> zT=L?yr|RXk_(nG({F|46jt`QNUZax+$lJC*(y@T~=NX(24XH$2@N?3^XC2>^og6
> &r
> z4P;aY&|Tx>+oV$dPGl@aQ^1HBZ`}DtUiVF7nj-
> v<t%DyZ1a7flm}pcPV`Q@2BPBv2
> zQKV7byaF)O>j4Uw)PBdgKAz|>Tl#XMkj^Rj`wim4F_V#2Y+MPSsv8wC-
> FCh|0e1J3
> zF<@T_cKegJF+@pnICMC2v+QKKcXu~r(lJY<z2CR(BH;;ej11+1xp6Y9|3KX*jvR
> &`
> zkdPIQCe)6$j<odiUInGcwylUqiz;Mk#rqZ*V28{~sOKEJ!6#ou5s5Rh712JOqrg^c
> zyJR58V&UMlkZ|!t<sVuO+sOOoi^y+Vb~$?UPg4|OG|+f|+97e&6e>1$&hhu)
> MOVTO
> z;Foq=d0Qa#A$5cnj7g_UV*Ls=W&iXt$)yXkWeuMk>dlcNMwD>K88j^cfH>vol
> x=-X
> zdB@1VAxyQ{IsH$?e1cP`e@<z;84Wh%Kp32)Fi85eAUC-
> T2_A9epik#;%l;Y0Sb<6@
> zTajCfpq#fv<PDSidB_Jfn=o$%r2k4*dBWiueO#)m7NK*G|6+ZUUO$nTcc7p?3
> -Eg<
> z>fQlwBPUoxgn5qrb%XqVYqXHw3P<K1x$Fv7@2_#%S+gWuK~DKKrW!^IN47
> j!hcgk`
> zQ7)HG1Fe*j-
> I(4(LrSXzj=c5#IWae$tLs1(dK*!5U+cbyz3iagNX|Zys~O|>MU=&|
> zz}_c%R$_})*{>IE<(Q{U+97s^h(NMg>TG2i!7(dE(LOpu{kQa{byPR36wKV$KCz
> xP
> zOiGGT))OYhTC+KQLjQO66DDjY2(}Xi;^xB^(laIp4xH@UTL6M~sN-
> MBlyF}jHO;DI
> ziuE~z#oUxrD??HZ#5?aKJsldloKA4jq0ipXp^1EM9iY=-YVypVT$Q++(-
> Z&~W@aV?
> zA>2G931wQIvCk)?@G~eg+dE@MjNjZ(886#A!48y2!GwrS4Bza-
> k7gJ612aH%7?<qG
> zI&fu3b<XTWotn#@imxmpgOkt<vtX&EnZD?cKd&CFT{a4V=GIv<|9J-
> UvJU$FAWYD}
> zt!B^m7-
> iq>@y&^n&CrvJ>fLEN<kxyD4^T$;SLOZN^b0hx>=cU)O}ME~h6W?Pt)5z-
> z#i~@%mb%^2i7dd9t=gpmM`^^(>d_5NLL#DFq;L75NR_we?8S~eo{(n3(9%9q
> X1X~N
> zlZzcN$=c=m#^BYLs>+{<{mBg5Nzb5UD8%IO4k@!8tI{G>TyY7u9vgDr&~14dK^
> 5l*
> zILCx}d}2<a!DOz>UOY$<MD~?qmA193bDtzdzJlNr4%Rc>MD?^_hZhy1KF4ey
> WHQAG
> zF91iaA|>+}ce|i*j#GmW1*qz<^LlXoG>pnkiKVxZ#+uwa>TWM?>EdcV!3@uII
> qu5%
> z5wze1fAN6fKA7hx=IddzwGD+<`sS#6TiJvpsHR3eVegtkU^*9=lwvD8AKt4Vf)i
> >4
> z`>m7*M(8*iXPcoPeKCa<3%>Eg2Bz;-bGS?zEpD^HNS|VbSq~SMd9-0{y-
> FEAV^OnT
> zDDc0SeuBo9P~5*pHt^noFV)Gkr3OnB^bVx9kA<_=LK`E|?)>9{=jJw5fQ#Y|-
> 59}#
> z7mC_L|E9zpN{eI~9%B9JreHWz`!?c-r{3gjPaNTLj>hwJip|NE@c7ORf)ZSmc-
> &`&
> zU>+C6(fcv`7Koozl(m!KPzaGn@O97bR9&P>mFKEwaS?oQkEy$cIa)vFm5UquR
> d+tT
> z9-
> +DUHRF#qb?!15rZ!_?Z`d`_j|4pQwb13Mko+^!%^>|)*X@jFJ_IHoFQS&dzK2r
> ^
> zq`_&Jl{NVZ6$wQZrBy$0C0I1NAcTTpYiaa*>f<P~&6%a;PI1<j7l|KA{-0(0%8usn
> zHQ!q8pP$!23658~S<&=xodJXklotY`;n-V~Lw4RU-
> hxaW?O}FsuLQ>+@Q#t;tQhHQ
> zatLxhP1|_vJ+aMC7K;rSmfNFD{C&(@GZ7rP&!5-
> {hgU~qbxSKg1G;51oi)F#_id1+
> zS43G2T~gKskgTILJ+j>7N`&2-cCd9@r>Yzn7>Pwy9>lj${z3fYHgXF*`$)%<^fC}A
> z#rU@>rb-y}^?Q6L*k=1mj#4|$<ez&Zss}G-
> 8tG1k&Cqeyw9N^eo(UVRhZz;)(cKz>
> zZ8gRq8kZ({poeRiBQZ%b3-
> jj|Nob|$b^1C6L;3w$s8^@_XCu5#)H1r2SBr?^Lva8G
> zDh{%}g=jVD$}hVs|K>~c{<tzOj2IR?79#i_WOcrCj8%j;?A1PD{C$a9pu1PXsAL;b
> z$j{sXmbpgx1?XCnK4_3Qj`3gEy1hMV-
> |i&*#p8=3dI)2bKuxE0gn&&IHdFQ%2VMWz
> zWWOVOTU)R1mA~K=uu(LgZQ%HFwLSX!e`=6609?a<t@D7X;#JOaetzAT=jK~
> $Fc6hl
> zv3CQ7DRbH{OBHnkK_<13#W^vh^PD;uDDeQaGs6n+_v)Wdg$Hf{w!%kfQ`w
> 3vIbFW6
> z^CK?8o9D`=?cUL+Q*d#LS`>MK4a2CzYl=&BqV_ed*%sLkR0E8NgkMJ>Fa#@v
> 8W)98
> zI}&mH+y2t)urc%Q4Ie1O^{&e@y|Cu_LMcJ!SJ_R&XFEHx0qflNGS~iu3WVEi8Z
> }Yr
> zO`AT<?oUIaj7$(&y$wenOJwNUj@tx2hfp(l=N2TL5B*+9Q7SJhz%xDl>hk4erf-
> $U
> zPGkRLE<wSHn$o{|0L0ivK%<j#${gnOy;KsRr^7WfEKs?>A*3qSN3k@1Irqv2PL!
> pV
> zTuCRD7D*$Hzfh}AJU1tdE*}sBWrlk$6s}m`#P%@)M~4F9sX`HU#I>{o;S*c9+^K
> d#
> zll@x>J9NoY5Pgxo6C6xNHU8YEXzTT?%3vkkA?<RT)`k#nMrcgmP(sBxI<$qL*5k
> OW
> zd90IZ%t1d<&8C}Kv-
> KcyLZ5$kOA>Q1hVgh8p(G$U0%7Rp+uOo!EB!=D;#u>tCLUJ3
> zeX5F-
> P2Rt2bk00KwY(f_u4>|+kwNf={tmY?F6Z%9CLY>Cnd|BF<4>GVD)2RR_L-8)
> zojhh|OsRO8BxqSoKT~n3z^QSXa3^9f=41L~B#qihd5PWk(`s<jR^4}Wc3IfafHQ
> }X
> zt>QjLZ}Mjak+1Krt;}Y7ga%>ieuWAHZJ|Qgu$pyRbdr#QqttTB8MnC8U*}^9oGl
> W;
> z^-aNL{P<tgvfL)2hZ$z_a4ud_l`_%24G)d{`R0o!D<oR7%}T}J9%uZh31^aZiZL3v
> z-6)Mq5a2uGq?{w##cfVpg(X?!dL&gjb*JquQqSHhaMm!Fa~8kOW-
> jB>Kq;{_J!YZ?
> zex3b3`y=ckm!bsdK_V%;XqcajCfY6I4!S->$_v(IV+zl$`#x0+rdV^X^dF9kZRua<
> zVs>>iS({;zu1?Wj1I3v16=?-bh!J!L)5!u$_@U>H>im^ma(I?eA@$7g_Xmi`sST5p
> zGs9ZZ$cTE*Dd4eHC~Mg%w$K}BCxhVG-=&$G9;r0*Au-
> CtlU}EGQmDjaYcgw6T~ooI
> z?lrxCq)=@vx|m^4>bWid#V3RTX>rBD-@O8jceB}O|EyP03MfLJ&>-
> Kr8dCOivoLJ*
> zeBSq=ige`(AS{X=l}>QJXenY~RVc3#h9_v6a&3&}8!lhgtZ=b{Y-J%s>djYXzI7&p
> z)gnl<0RrJwt9kcA1xPz-C|PjCl;r}OC)yyA=d40r3iq;L$)bHAy7}D6;#Gc;_jP2U
> z1^4DhE)6ku?qE-
> }C8Kv>^J=5}CawH9t5TOF2>+X<F3Eg$+0KZ<p+|)@0ts`?LPQ+|
> zNo0-wHc2hGLdbigb<Kp@n_%cOl&Wo5httnGIT5+T3U7eTf%B*v-
> RH<|i!Kfh5FN1p
> zGmfk#uP=AcY4n{8OG@X^FK`6|LkVoEH?@KxsUr}!RunS5oSQ{CP;5-
> <q9$r1T5BdY
> zJKgp$^p2P?J7#+aIW39N0B6}0Jcn45yE^XxQCnc3Yl?x>H_4jvlCVCUpFAL9N^z
> 7f
> z{0R$M4KSSARxQJJJ*X)PjSkgPqnqxHPMt9hf+8iYq00@VhRa4K=TSVYq%b<*!
> >h2z
> zi=f?Vhkm~29;O7xIQSRFE}MuohW~7IdH(qgQ(aL6rntqJ6rg%?6!N)V3$B`cNj&f
> 5
> zw<z)%OA^05*3y~e=-0mU(2BWb2Qdd#Rd_y`Bt)D0<zxp9IC-
> K%JdGpN2_Np^-0f~*
> z{@<+oY{i7%poY1osGond3PJyIOATxm#8dK<DRLux&6dh5?tV!-
> +2?Ie<#JT8$PL!f
> zOl?ku77G4ifmF1eOS;3h%f;V9mTqv~AGEUrsgB)Ski<DZUENa-
> <4y3wgHt384U33F
> zf}qwZlAcKU;hHAiabUmV_91XoqooKtQXoqswi}pm4xXI}gT9_qtro?tuzstl6YBz(
> zXK37x(IW@QKBQ>k)1_6COM}FDP!dKG?xChieiWbXW_yzh5*oB>+>@n@Hn
> qyRJ*hV(
> z9k<Q__prWSI0?%`GHd-zzs%lb)$jE6oHP{`N%sEhL_!U%BrOj?7S{PJ;>BYh-}yXf
> z(l`X!wKea>tf%Oq{psOjZn>~OKFT3Xb<@gx-
> K=Pd;t0=G+*l0W0ho!Af|Pk{YJw?w
> zgBHd=Q<>`xuiH07-@ygq5h$a;ni&s0846(bGc-
> {b;n6qdB|pu>Izg0*zU%38k5Q?b
> z|2mnk!ko}54{CBo_huX8zUdLmJ!kMz;9Wp06{cW*Y#-
> J_A@u1nZHd^*10eE#Dae`e
> zp!?b3!G&=kUCvI`dygaMT@E|jm+&3ySTJ?DM;8Wbza&p}Qga6^cPw;iGv81V
> e*=(h
> zzMe6*7f$c_(Zu9%j_f_kYHJ~EVn6zmcB<i&`OqdRp_JNXCOQ6hnAgyKs`KO%q
> ;llB
> zAx;||du!NKgGGJY5v}+xKdI6)#W04WOXBgx!f#Q}`su@V4T#S;_>M&ATYa@!
> aCSEI
> zThwKt=V;HxI?)uoAKq=2u^1<`b8=4UiL+EVV1bPb6`arwR*Z;;I=6S@%&d#Oc=
> 1jY
> z*U6iB?0f$6Vctxn=(e}(-Yks@AG!;3qTXlHp`?>61>~S;QUEzt8e+FVG)o(sZE2T@
> zUX6VAB1Pg2_?i)+3aY~57}SKCy(qzo(?rT0gkfGP!{pAKfL{-~cO0Kc^bywX6a6|n
> z&k{%$M=Y&1z+CBIYu&?a=3_9N3ek_;?p1N5o2%EDznT^1V}?zoS$DvA`(vo~^
> h``<
> zou!sES)!6|HcSM$#QRy-
> eR;bTJ&+Y6KnNCW6OZ@X!Fq~tKOX;?w}E8dhT(6<Or$h_
> zUQLUvjq3NbW_ZdyMpEy`_OQ}LiMHt%B1><Hvg)|P6gM)7-
> lWh;{qr2JxHNQQyhO^2
> za~_L|RnenZB#2%Vne!067AWNrc-SP&?{K~;1eXV}Nw`Ky^tpMYW`>$KR-
> +Cs^<d*&
> zWMgT<+GYlz9nexXd><ii_|Mu~C{c7cHpMn>jaydA?S~v~HS%wYlvgHV<`A^+
> @<jaX
> z-X|{7AsrU!47`DN7qQ9UNHS;~CGFaru&SzXi?7vKx?l-}FmWfP2CqkpVI9$zFTX2?
> zgc*Psm4Wuo9lBP8F(@C2LGLv-a-?JV$w-
> mO<VskjM0W$uj?Vg3+l?*u$RE~={I@V_
> zigZ|lE@n{-fcq)}4biW2RWLcK>iaeakkX}il-
> SuX&J<1SvWnaUN{+^#w{bAuWU2Y=
> zNqO41t^)O7=c(8ba+N%Qn^SqyRKLd18Q}|8vPo0mVJMdM_gN+g8G-
> &gya;sqf1RJ6
> zx`IZljuAmt#`X?&AOp*PQvZmUSy}#nfv&2n4TzLU(ZKXW#H<Xmw|2BM0@;)
> D@i8gd
> zSsST<9PCN8nG{9ENtskZE)JwjQkEZA0{=G_`QKPd7m-
> QK#X&;F;X@JqPhAOSQnn8W
> zWdQ+1CUI*khkx?KnMpbR$@|Cwkh1)n6!<t0ndCsm<_17(7gBBJk8%zG3n?c
> z%f}ss
> zt*os7f&ZxcKM(nD1|pM+qoKpU4=rnMWr4^9w6-
> (;kYoQ_nfardGRVk*RGZ~Pgv`MT
> zU}Ps{VPj?FWGChLh}b`hMM3r-G|Y_|&Dm|tEgc+O-
> N2@{A0p)c4uzTXf9}ok4-gCU
> zN65j>^?&178oSuLF}r}+*j<eNdmLs)7Isoj=6`Vj{}SQ^{0ESogDsey+u4Mhm4oZ
> Q
> z2I6M@2Z)37A0Sp{4pI)T|3Cp*+k%*lY`E+UZA|`K6n18|e_k6q%ReaW0M36x*
> 8jk9
> z`jFDI+t?bIaXK3Rw>T^uY@{6A|2BdTLLZ2n%>U5{SitOtW(E$N+_tR$H5(T8e`v6
> A
> z|NCt?nMv81|APw1)zQGs!2$5o3=I0Osc^CX+tN7xWy8(=KVRuT*svNqb8tHvS
> {gZU
> zI131TG<J~>+XGpB7!fP$|CpYlf!)VB=|A@Wk8%Eg{lPz_{|~zx0Ju1qIX@WuZ*
> Ss~
> z-r#Xw>L_Kk@!lEQ>GN~(0nXohF!Sot-
> $zF%7zGk;XH8HvYJuCGL8>kDhJ)2sq>Wp}
> zJ)tyTS?b%d(i{J<;5*G|*8yYKdz9Dv`TJ{NSGdkC+WVED*UM$s`=x?ctZmiu-J$;b
> zRaR$bwAY7T|6Jd*>up!??YznBG3oZD>#zQkw7kb_=XLX&Nat<Uv-
> vA%?)hzW(180P
> z*K3VpT~IFh=ou~LNWtsx`Ik3xkyVTE&G+Z3uKmmXeP6V#sQ0&3FL~Fd_v;t^
> _eE>3
> zH@YV=izxm4g*&{5_q9>Fhx9BXH+)w8k^|5HHmAw0h8`#lFdMa8HIw!v{}M*
> TIyxFN
> z`!<YrT*X~T5Lf!8PQT2mt^9nT{At7pmvzz3$jNJXgl;u6c81Qn?Rq<COoJ(ovCKH8
> zOO0-
> IKX%bVV{|%mJ(+w>tE29mh8=0Kh#>BF^50T(6xM;s`IE9r<F4JNqC<_U6tAL(
> zMM+0RH}Qm<<%1wckB{XGr0<}y#aJ(X&-
> *B^x5LY<0u93Jt^$pO_qg|_Tl_%5T8bwF
> zU)A?Bv#h6v`&5Ul#Ie;ze&XZ9yNdgf{?8MG&zXJ0T?1ujsJi!X^AkZ*%Fm-
> wtwrVE
> zqzybV#Y$^chbsij_ZHk&+jm+L)_5{+$zJ6Pk^y=~;rFF=%K$x};mD}eQi53lv+4wt
> zabZoM-`xuJcx{*B@gzVP>*8A4-
> a#CVEx9<NXF*Nbqd_f+;3i6sAEfENYN9I~V5!-b
> zLQ6dd1&byVxtN%{??e-
> 3NmjqMF&_I$Rn;Tv+GHgqug9C9ac)^{$>`CpWy@w=)iWc5
> z%BA17mWKlizuK!QmZyb*#KweCa|*>b+b-
> Hy%a8jvYdx7E$#`9LuPj($y#wHh&{8#B
> zha=K-
> PrFm6ob#e%?^R*$8k51L5tF6*%w|;kg+jtqfp=h5MNGf3;mBFkvsCBOWGw47
> z`3}r_iFRt3+7Y^RXClA0`Ec;eEZp2uI&?R*e&JJRRa)H79jLj<w5H=oUo*Y%*4{~F
> z>-
> Bs5&LCF5rKL1Ehc`m{yHk6M^m88P;tO6$>uyk*h4beScUiWM{$v@)RKOdqOW
> MXm
> zvQ1lvRtabc(8Kqo3f2A*@HP2xv+#kRQb)S1vk{yLH=LQCp)bZhX;k?mGc2MtE{
> 7`h
> z@Vub#!6=w>Qtay1QY!MmHSVPuZy-
> dubZzi=?5^B;)3L`!rgGcbU>m?n_rTT4;kcrQ
> zW;EVJ$Esn)@o7{P)x}!zhrbE8nTQplNL>?}sM{Pi*(x$!v$0HM*J3}RT$`5Dle_L1
> ziDoA#ATIM|!|m7LCZzfBjD(R)Rm;#!5&_mlEcwRzlF9kT@1BhMJ4V;=D`#z-
> ODhw5
> z$vS-vzenufp=aN<+<j-ZZf{`<4B{2;AD+?MsP3c=F)xeg+ky-jrwJ=oj4&1$QQh?|
> zer>^Yn2N@P$7Bk=@NVYW`np6}EgAJ!P7XU_5t%cT4S8*oSW3xmZ=jvJV?J=
> M<$a-i
> zN^q|qo{p~T{_fN%G5V!bqRT5Lw5w@@WQ(72t>J;+Ey^~x+}T*2W5eF{Ql7D
> ?J~4$(
> z&)daa+C;WlvZ)!#HU2O;J0-
> 4|<b(0^ovt}5@5i6Hv4{%8e7LQa7+a_gWrLDkDc4Y&
> z@pDFDV1}-
> `3z~FQ4TH>YhN=0JdN%h#r{Je}s`p5<>JBHPa%z>&dkg0Ra8*BtR|fM>
> zwG0IsT9VDM4PJ)amE0Q5LJ_L&_%v{)B|)_%U_!f?)GA|VkVXvhcHnmL1BM0
> 0jd^7+
> zb)Z6H>25Jq5n@x~`o0j$MVA#f;l<ZAuV=d_e5_XvK=9rEHDF+K*<&Ol{@j_5f2
> Zm}
> z4L3t3{4$3rDGKmrm8SA*^G%B7XuYuylqsJ5HsP$DPP$=P*5y=(N%S+8q0mfP
> e8IC{
> zV(m1+bUADB;p>I<6~^w@E{CRJNILm^uO}-DuSctwH<-
> 574WprTC$GVjG0m}hpT)?*
> zXq$$84I-
> B!FWLPn$!R$wToJop@#$5|XSJ^()FoXD>XuXTRAu>pF%vAhur36*t@JXc
> z^PE@ZO=N8_M?LS_$5wX3jBq4aQUKfXV9kY06uS0BB~jiAU1X--jP+Bx-
> HJOvpMFEH
> zqpcl_ZmR%SqO7J5++eOo<2x#fT(JCUo1oXdGipa4g5eRU=Pkp@V<TxHXbRM
> MLzjcM
> z*2_!0@DCY;jy|c*gju6-{KLFoJ5lU#;89t&vgA-Z<uPYpO|rp~1%t>njrIV6;*WI>
> z8ZY@cp6ZESTpNGiU_zWXjoSI++8%SCVc#DkIVbvS(;L!Sdh^o0N9<JIAL3gZZ8g
> Z=
> zUb{p--D)Myau~g0%rDmFSi=ocm%-
> Lq)EKq%xCFUQY)+dwUEcG)NrJANXPGw<48s(s
> zbiyi#6~JXhVuzS*7+&l~zNRexc>QMvcZ8iNHM5EPZ5kyzj^*`qyKQd76q?KMd
> V{a`
> z%@b^+0qypnoxDj<9%y8yLGRl`Z(q^bRcR8d<Ey-!9Ao#gKy_HEjf-
> &GYuURX<RcoE
> zC>D-_14SC3XP$;-
> c7OFf=0o_xQFb@^kG(V{7u&{O8VxsGxSi{<8Y~xOm6SeF*rL5=
> zZ&>RK#54HX!vIdMIyerWLD>QWkBgpHtW~7q{GI)X@14H*caNUwNV%{U(=
> C0IXDFRl
> zyS(!HLuwQka9O23knukNyKLuM!eLo(B?u>ef|Q8Dq%n2z<Ib<AvbZ3?xkj&Co
> t}j;
> zFJ+&Os69x=cFKyTYX%%}&iwO1*`0m!>O@YI;jnWVw$!7ma6cZ6Z-
> _g&&c<yoaH&9@
> zM?<EngLr(~!y-%<75bQ-
> JC%W1yXZDNu!!Fs{3<Z%+teXto@sZ}08&^8Dh^AZ5i{3w
> zLD^oV5SLUKuO@F6B#I(4QM=klv?fzmHX4JeeCIF<^@77BGIpjKCqsj{#MDX6
> 5xd!&
> z3D@z_DmV7$3!x>+FZ{b^l-
> T9(1{BxLv%n+DzcU<A&9Wz*$vX!48)IaiG)|S_kinEt
> z23X}#N7UFAjAB+cB^2M1zD~D+#B6~}+2|+Ca7E9T*q@TZG&LM8tkoKA&|1e
> ULZyjE
> z!)e}lb2sl0j!1U&I|(ORgL4RW+3fxD1lqXsHbgB%@(0&{ZeUvN*hhY>pv*SCOQJ
> jx
> z2z*Qkn`}wicU#Kn&?9G5cl*rE?+9P_6xsB{U7SUwFde-
> N>p17O6urmCZ<wtP{@P+r
> z{!SRLaFV^a+xZI1DdWDJcYPK^f4yP$(gBC0Y<s=uSfn5b{K)8O@?{qMcrZBBdY
> wBE
> z+AL7jg4Iy<9J^|aO;>Ue?R3Q&R|v&7@YoOrlq_SSEZLa|4PZVxXBt4PjUP|mx
> wi>6
> z8#4~#a^wc%jIK!~yW`^9Jw^3?a}1W^a%wO<8b1E3cJNvDS074(iV{s*U~>w^
> GQ+LO
> zT{1QJ(EzC^xdx=9;!Mw%rbuKMtY_Y`GJ99_MK`GCDtboX{3MEGkXY&uu04<z
> 3s`-J
> zUo}e3y+}7{6z-LQ5me!H2NiiWrn90}^XD;~s_399zSs@<=l)8UaxRI=lLSdjW&Y)_
> zJN*0K&>F+E!w=3tvOs(Sk%w2=D13Ce&8MMO6VLG+lQZs6elY^Glb&7PjVG+
> *(o{34
> zBTdO_xv+~#Ty?YDeb@8g<Vj!?9L5d1w#lgS<Q_}-
> L=5OkR=V~q)OCzJz=NH#B$zL}
> zp4Z47!^;tzI_T;yt%AW?4zC2`!epeZPI|3)(pdiINu%1#iKYC=^BmeamLGSU0cB%
> U
> zHYG!7k4K-|=rAsv>Mf((O!Pr)EK`$npJps`;dli@9gis`2KwQfu5-7oCcAa=pSYU(
> zL<AyFfNf>2X5a0yEOJ>YKPxLn8Tg)_ZlcEnL%m#gnIjB{gE4v!9~f`wkHo=`t9HTA
> z5_eov44&ER`K~peUy_aoo?$EPM@Orypy$xQnnwRJ5Q!il?-
> 9~u{<uG0M2UMfbF}H2
> zl~$bC5SUWN<H;Tqq4{_PMj58OcL``&`DH10!adsFTyAKp+U6vfv?lAm;^>;$i!lO
> H
> zv@`JlIn%!F1i@3e<&9{LK`SYiD1#UJ;xvoOR-hG3{G=3uhG)+B3Bs)b!P<-
> _vdo=z
> z>GuZC-1wUxgfMD1uTcHWaBclLGLSe%(NsdF(_<U5+uN4=LneNw3T*Q-
> ThPwa>3%*3
> z&-+a3dvhivwtaiw8T|Q)>zH9#sh|~!-
> &6O~Ph`3gy>Z9A9&O9xhIH8*%(lr)#Y=>2
> zPZ^Q%LlwRmw+54QZiNY<DJv~^Mi(d;w7b{G5U*f3R=Ud#B;TGHJobtpLVDRE
> WZSw!
> z`78%cM;@LNGt>9#;4c}GPAeTjv(xfxzqp7W@ZV*bc*|Y6qR4tQU3jrMxi|hK{!
> XcE
> zIx#|(O0?*5ax{;U`l?y^HxnJVOknHXhR3+djeQjhn%K}#=W_X>6^KDu&d={Y$o
> Cn8
> zzNU0F*CH#II%wbjA+FEt^CI2$UjnK;Nl<DYZfiNibC=WTG}?A_Mj-
> (fvWYEEY~n(?
> zrY$#i8^A4kM7479d+NyTzGC`pyj9Q+b%_n`{ZhJ#fjeV~N-
> Eq;m9$Y&+0ji=9##I<
> z&J(MGG^?FQCEWe)l`@4smf$40I#wv*f$^XW#evpur;RTWveq4xR&Ksc%>7jj
> 5`$DK
> zqzKOSQc*t`h*6Wa1H9-(d@U!`XP-
> 14X%{wR9cKa5B${EF8MMEuC{h5O)VVvhtlF-q
> z2#vXztw1Wi0hgkm9h)f=n?6+8ciR4$5kKzpufxqGXz$aXZvuQn+s|6yH-
> O^ZZBs2;
> zA7KiBtX;8BKyv-4^<+Xmjt=y-Z17dvql~C3Bw+^HI)~ovyjxpxbmntAYJ04@v+ko!
> z&`?w~>#_46sMK{wj9-
> vkZz+rxy_Z$8FZD1@U7$kER7nNP*G3^@vDdcVdIh|5*1`mr
> zs$+Cb%`!y_$e0A3bDF!$jSjXJS-6A)JtZj461Ff8Qm2SEM?QXXgEq&~{cXnl^Kkzy
> z#%u?7E2kA+Jz*xMtD$?;zMzcp<So_U`{7joUy0SIe))6qgXLfO*5hXCQqzUpS^J
> qM
> ze6#qMN{)77LbK#hD#)5N<Un;TTWZ1gy0^Tkh-
> O__zquq~9GZUo!H<SDvOL@Zkeax=
> zo(--#K-3Q`PrR{qmzxKGKl$5=I}NTY6a=GLxxeaAr>lJmC7qZH5N0?h$#S}rz&i+5
> zxwSEvNU1{jwpEH4g)gc}*;#A!W%FvF0l!qk>C7nnK_RqwP91q1pi)NWz?o(A3X
> ?2W
> z5xn{1D5OM7O?9A}?L|mzu<V|VO`@J&iGTLo;E%m%0WQwIyDUUV%;>pvO7
> oygYRt4F
> z%;coKFfn~o&>Qd2aj6rUUreSVaHitb1^P3$u7@lokyzztfG0;rS#etX(pxc>J-<cP
> zp)Xb)Vn%5Qo#i+7#Gzf3GE++aAtZTw6H0y?d+D0JPtH<f2|UgqO!dNKaShdLl3
> mt~
> z=>2Ie11f?_Mfnmygm>STy1FS_SsH7FNyt7N(j$}Kv|n~`^KhILZLEV>0AnFLSU8
> 4}
> zswFqt+*rDHKyFPKH8YyJ27ri_MJp|`20yB-
> PcA6>g#EFwGb&vYGu5dwdKQMsRgJRL
> zQLW}S!w}&r5}7v-04OIXT-+V{A|+)-)8qVFe<Qe|?Zx)3<u6d$j`u)*jb=CsFc`n*
> zG*;ED68mKnfdC5TTkZ=tWjk@>?M&0@AiCEiSqhi79XWRR(be?1>Kp2BURNS
> NMq-mH
> za_R=775EdFelOi$V^C8mIaG<gNg5M0b>~XxtlsVdgZ?8p&FaB#S<7m*l(A|9jH
> ;F8
> z;c#?7H1rWz*|!^kJUh_w?pun!^8_H}G{au@pch50oXv|mX%gHTeU35RjM)1{
> #iQG`
> zCA4F52O2%8Y$<K*8{VAS+27<*FA3R?^A~zUH(_(hL)oa#-
> {u_eMq@#vhfr}mv*G?b
> z8CW=`a@37`{@v`?A*`kWhEbM-
> hzfRoH+o~q(N$C1?Tf%BQ;4p@={UdiT{VfE+u)|U
> z*&TbixyMUsP1+q59Ie=~Z>eIR%fvN(!sH>P;hF9SzFGGV!p(@)4SiE!f`Spzbg!W
> (
> zR&ZocI$zrZ#)Jid4+H%N%$b^#xA?lQ6(-%OM-WKA-sb+y^{9MR0V-
> taKNb0tw4_wN
> z&brG=LM-OrWge4|n|C0)VX=L!nAAL8iAh~5{~Q>E-
> Qw7|GG*#XhO%O=rk@zv)T(<9
> zKsg?T*-
> @d(kp67a;!ytR&&k0x7GMjdIW@0GMdq;nY;gvx+G9Kz0!JFYOCzY{Y3l_@
> z@{oJ7&j#d0I@uakFzsRSQqb)&HYIi1WCewPV%|(o(IV)*UZd=&7u!etqHbi!vj
> yKI
> zXFW`IlAW|h&=g4cv7`m{c1S6yN}+K)c!(*2F>{%{)fd5$a&$;{qHIRnoph(@IMm
> ?0
> zoWvfYyj!|=vuWe@_oti<2U5)C^M)M?Wyxf{;U^fu#Wd7U%!fSXmr`q+iq_8tv
> FNs+
> zC6msMvAjr(a7&3w=DA}Sxlf;MP?P;Q_Z9H47nS%TJ-
> 502zSH+3kz^CsS=Q?8;wd}u
> znsl4(G$)4hckcd``5I|4{GHe2y;z@14J#{doxT4<#}7nf8N_jm`BfBFDK&mJIXE~D
> zGDmfPocL@#c$URW*G?Q)-
> j|ArB|bUG{iIjddzCEtSfII`W;MC6NF#owTj^E^tB~f%
> zZ3Sav(M~HjQo$>@JI27Ep|%xVcT2j>TLE(723B}b*$WQ%56Wq3OvGb#$6!bp
> &9;bg
> zn_~#1AcoqbwDKZZt3)2=e8)NH9&&Kr;$F~9Zii<7rf>2WAVyqF1EO!c-
> qH=FGc>(M
> zMX_UDsnz<%_cK&|;ph6z#SjYY5h*LBcSM8lkH(Z!g>6vX=z0xG9l4Me4jdf;H;O
> AB
> zv@6WA4V$+g${tR<)FOL~##H&hlIK`_0~+rD?=PgsHV|MO`tbU?M-
> s@Tj7CofC9}=R
> zIH8Q)VI}9o&7|uw3TFC@rbi|~h)kQ83Dhjo;kt86<gV3?KgRQ&-
> {loJhmzV2{o#lU
> zkb_=!O8cE$Y1mA|-{B?vJ*ELI*nm;CkFa}Oxn}3{FPUJ2g3=a-V1pvs&hyt5`|tB-
> zDx*F+8Rc9-
> LISxp7rZ@1kPeQvh_w0sy8#WeMCcRyPI%_oa37IIfb)|mhn>PJucOyC
> zR#rsthT_u95{+2Md2t9y6>9X9YVm+5!Nr^%6A)DhDAPo^b{N-Pc-
> 5#iG%l1LwE1>Y
> z$TLoK!^y*T`QsM3UPtmiIWQeDzGnH9qq#PCk)thOyp1<k^FUVp#UE2!GP&c
> gpA2N4
> zi8ceS%+G!~;<Zo2LJwn!H~_Caa^aeqIKS73n2hDK2h(i6LPZJ-
> *&j9P?#C|b5Pl*m
> zKPEmp*k4+X7a`6Ski9j{?ku9e#GNmO?~O!>a4mpO4WrX;=W4Wh1Q!|f9bVZ
> _5)T)<
> z!cWs}F9FDZoyHj3SZ`MW6^D#Sp5X{eT~)PPPGhf1hZk;Xf~IX0Wb)hZD*&uxM
> kK32
> zQ3eQ%{gtug<n?Q(i^vd9w8IO&Btwh}adS`8CccAbMV@x-
> Gru#m>ML;~2S$$vBEM^>
> zC709*k4zbvpawi?UXw`k^Xhw`YdC^q&rbSYzvO~EW}2mZ%xH6?K?=!?zPB9<
> U51pB
> zJO>VmkW<)7L9a?ZW|3+uH+7qN0wU~6dq|$afJ;4WKgGH`OQ4>fp_YR#Vt}$I
> J~Z_L
> z$8qb1SdVE2q=FqD-
> B{M2=KjuFs4wku?eyCGcn82(*#>Ef0n$?qmB2w~zG_Yg6}!`)
> z=UUw5-tq>z*z9N_tcy4O50h^b#oo5Q!HB`32d5eP6PWie{-
> Gu?3%|~Kn6jaAhguSU
> zfB0zsGJISVi?+3kv#+cwya2eGF?pb!GeEx0&*9lZ9HA_Qp0izu7yB^su-JL58c(Q{
> zDRmAJ4{unV^EdzQuTYh#&n^NAgf?nFG=XSPm3gamJH+$6$!>**sD+tf7<~@
> J^CyDV
> zow|^Vd?~0?U<(*`m+&hzY{akXoCQy)Be77SSKx?^sy`J)FS4Yr=1f`?hI*FfG5t6
> X
> zf>hm9w<&VB-
> yOys7}fjQyUJ1~=1Yw(@xg`md3c@A3#r`houPY6!FV;4yuP}u8JrDD
> zb4`^C?ZNT@U&#K{X2>+!uscDd42!}lsJOvo^fs}Qr9xWBB~{1oorB<$ziK~#j{$b
> $
> ziPT-_?d!ZMddTq>k<#P7K6c|jpGctFAvVs_CcZ7&l*L_J1eYwv?Y2Fb#GL5ht&(s}
> zxLcma`lp^!QdVZr_IVrh<CuCpou_DuvRfBoigFLvV$Rcd7oNls@)Cj>)DgQ1ca~Il
> zbaa*>yy^#XiD!Mjkcle`UZDaqEhr#vvxkJEE?v-0bd9Ee)t(z6vrV!Xy`Iv5hnYUv
> zvB2J8CFM9|%CIW{j9#^47h=(HG9HpKuT?hnjxcmzw*xYdTRNuf<;FhQMXzUd
> tFY~y
> zJ9!y~*923J-
> Sd*Eaz`H<4t$b80%@)!oC7Fba%vgRN1O_af|r*M(`5(PCL2!n6;7BB
> zEZWYW;t$-O;0NtU=M3`cXs+AKIk|9Bkd~<|m14RqW<ExMw-
> D(kZrOr(iV)cz`Qwqb
> zz*7_VSidluhrZ$zspJKNJ$3wHw1+F5x$JJ05<tizF4{`bW4i+b=cSXop?-0|Vo(3~
> z(*1)3k{Q}qvawuXu#<el<X9uYdAcaslI1-{A6-
> DhOv@CJ)A&GhrP4s_k%7c&ek=oB
> zuZ|sb$g+rnyo{#oGVmiZB&4C8a?QeVF1_#X`-
> 7x1a^34r0#iL|G22qwsYu`Gv~_uq
> zz`0wpHtK?!&8KE<-
> b{ht?Z}GxOt(v8Q*>Wldm={<@h35(#10n1+9Fb)><*hrNAQn~
> z>@t97T_iuV^6YWn$e5hSe1#vGxn6TYE&chbko`o*q{;nA&STsCShddKR#Ev!;?
> 4B2
> z&|#B?yNy2~p_P+N%_RT15JO&THJW#W7T7T6QJjQ*ep3sglbD-
> ?(G@bdL7kG%+izud
> z`izr6K>jk`<ZI1EFHYezmzIEQp@c_zEu9K{_hto+2Bm*$-
> wKslAjEOT@P^E^2C%=V
> zV@0r6dS14oA%{K7k@-p()1sx+JMtGCgf;O(ZkT-J=e^NQzAB{2<=-
> <{d43QyYwAAl
> zvrI1B-3+hA7M{0u3sO!bdJ{Yux9Rnm%>sj;PG5AT-
> X0^Pq}KH&{$`*BYieYD;}9Pk
> zrPH;_Fh0Eg;Se=>>!9=})Z;ms&V{-
> 7X56pRLx{04hsuqa91qd;_A&AhX2+~T%M%7(
> zk94|0Y_U?&A)^W@VXyz1-
> 02P7+D=RF6}W$t;Iq6Ebp9wM|MF!V{o*paPGSt36Q5DZ
> zBNBlqVH?wD#uK?m#4KRfM3(wcv>@=HAht#8=>&5v>KMJ&vz>-
> 0)vx;QY2NAzZ~)D>
> zs)qZFk42dJO@}^UCfqQh<%|T@4Ep=$w99SSNB2f|d>!!jZ}Z_HjO@=ujT2^!1i
> `!>
> z%x?9^DTX%uomkb2rRBtxPkttsXCbw;T7X}P5i`+<hQ|m6dENj`BNk6{IzlR<FWS
> >)
> zelK;e#Y|@)itre$@?zG%$;!%qQj0Pnm%r3Ys!whK242?Px6@4qm?DM?CmP{8
> %nm*r
> zH<nli3S3Sey$q5TH3b%u>KG!EG8$XHKMR=aQ({gBC$QuEF^mljL#K{rC=dK`{l!l
> i
> zWo6mxmvG~huL$%Utw#dBS@{7eG6Gb~_&c`z!`I$mc-
> %<*!q@7H!=d_Hz;Cy%_ERN=
> z=jtipjlS)n@{T%myX+08BxEf+<D<tH-lMSL{lZPvIZx4zRHjD8X-(_BTOFuu%K2qb
> zwAwjIxaf-u^>B|^k9NvU@#u91mao;r?$C_kdXf<Om8-
> Np$q}p5?2(!D5wIt1r<yLE
> z<Q}(BM=sWj$Sth182x1y(?~)&GuVA`<uX^Hm^i(tGOAznmhp97{YV%iZs&na-
> i&xc
> z+6j6P#O(YHvq(Qk^XTNnYk7K}BW*Sgau|+a*MTUv^HTkA!hF+f86n$3jOy!is0
> 1iH
> zzc(;@Xe2rl)qi9*J^4ymW%UK|#193}kF*QzL^(ZhPhV!VEk{8v@;cuDDE-
> GfiKVYI
> znnaePdgj8D%Gc<}H}3uab`E6Q_jp#7qDCV4fxDR0;10hIIxn4FWkk2roQ{AwGal
> eL
> z-
> m0?@`rT{k&sV3Te2guRa|yQp;!CPy>07`&1MJfF^DQE1miI58I|ns<ebD|a8q?gv
> zHoy<4+eFo&(>7lxhohw?X>uC<PDng1zB)MN-
> M^;CbsqUfCgFEi!J^c;oizEXs#B}Z
> zyDpr3u|9*9lYsM90%)POGdexJc$%A2?b36e9Gg*GEKZ0LE~ew8^yRF*c6C=w
> ;e1F9
> zFMxMEZ#<@17-
> ^5i<IT}Z;mqiM`6~?4tEv4A)HOrlC;|QjT9m}6YexI5A90L!Y&rq7
> z@q3c`5f)99jon3!!ofK9lB#P%E43>$q=}@i)djr^k$XM+q7;E+*j9d-jH>H64;fqZ
> zbH342KZ?q78gxEP+dM2m_2?LAxb;2Zx&y^{gVU|OesF~P)&(*|jE$IIFZFH_mS
> 3;9
> zSlfMO7v^i?+~c?9D_Y%;FyIojBEw>G`>p$lWq)lnR(sgWz+clR_DhOqk?^nrZK;s
> x
> z#<;nxwHqCM2|rIyxjL(tGGMNeGS$r<S450P-
> KMY(A6&b!b)ODfdtGSgLQxS7@ODV+
> zU<Ihg8=@e7e5?+IL`t@FF=&w0FaZQW(;7nBQ7QG#Bg(2S7rRQn$;P2289Od4
> oS=5x
> zLfIB}&1S|Qww7MbQA%|dW!!N%5$DA;2?{`K`uDw5#x@*!15oN2&b^W15(O
> X=FOaOC
> z4@da%#YJLHdn=tRu#&NZLwb_vEbq&%w=?C2QFzmK%w}0M>R<e}G2$wJu
> -Ip#@zfCK
> z<$%H9H{!vQ!N&vQL2~zCSw4nE*I$D{vKyLC##x)1PEnVinxi0b8k1l7_yX;DQpv
> ?G
> z<h%TkTg{(vM(Y*n^kKE#F_3Z`=!|MUm62Apu@Yb{WAJvawD?X!WEec*NLQ
> <xa(M=H
> zh95WB@4rAZqg7nFha-
> 3p^e4@sHXQP|Yd5ApdEO;VrVZC6{?HvcN?!{&h)8Yzm1t_Y
> zQQQpUZ_@sdq;;g@@@Els*O+k{L1YwW@&!5D5Wrp>*_-
> y>s)scB<OjX}Ksj%OXcErF
> z7-
> M<||6Cq#vc(BbWXd6^dRw_Zydt*7fe!k89HBtcqb7fw&CPdg!5uSCl*P;u7zen
> _
> zfiR-bXyjk9ulbHcLNeWdA`@3;Qvr2y0spofB^)A7@-
> wXgai}Z;BFpD6U0e<7dbbo<
> zn^i?Q9@X}_$9{s)Ex(+5Nk?mkRUPDB{7t}>a{!59)0UP@>m{^GVjgyjHMTG<Lr
> mn$
> zTZS||+wQhkqx2y#RhlSa1{sT#3H$~@WJL4GoMSqoRuX|VVG@=IdB<~%4<T
> )lGWwLP
> zmnl{|I9jF49|n9X;EGbO>$|6tbR-Vf4y}$cF~Oz~uDlgv@}={PrlyJ}<!ntj`0(A(
> z*_x|=k{G=EzU^oF#Tmo@o=PP=vEz7UdaRo`6m9&lEitneU}*Z(*4ySneQ4Vlx
> S5GS
> z)U!<31tp%`n5_0?awh6+m^<q1ULi4WKhDc;qW`yr*rG<MJ;^drc=WGB6!9e~P
> aQV~
> znC6fF1MdKth57N7yh|UG%ICRGdBaj1ftIuupnR5-
> 0kKmhdXP|4mgaG5wrb_kCAa=%
> z#)}h)y~gFOk)E;C4im_ufafBrkWiPSPl+QMT+a%6X>&Pj=XJh9%{kC*zrnYs-
> #8wW
> z?f-y1L&Z!y>p?)0=u}Qi0o2Pn!0HFEAfXY0{t)Y!`Bl@dlZ;od-*5dCgq2MEP=|wi
> z?ZE}Ur4i~{7P2*S;TuXBB+6S$hsr22ekw{=sw=n!Ewu8(`L}HSG=SdEc_c@8Ka=i
> q
> zo?aIO_)XQbyCoiVlKU*?@*>Cc74t~iSPazrK9!*eKvLH8(f4m4LE!_p)4~gBjiUNL
> z$r_QYXgs#tF<{yG5@MzGIY^hVrZ%)wS-
> RP<nVW0gVeh~}$Vx_LDnj`?G|9reLCI2Q
> zc*1!jERL?koZ|fe5}s}8RK~6!Ca-=C`a9yvi^w+xAH<6OiVg^OYD)6@M2H=vDx-
> ry
> zhs~U$%7a%LF_XLMhdxFaabi-z(Mkfoxa6{~Gaaw0Tg96Clfz2S-IL-Lq!B42p)yk9
> z!7(ATSQxKCec0|WJ|L}*C{l=1Tf@>}S@o0NbP|RcXoljB;(r+)QR$)@WRCYD&q
> ?ri
> zU%4>p>xx{V;p8)u@l9Sdjd_6fj|m0bo5#H6*Im5Yr$GSS>BPa8!SFKPwD+rwsj
> +G=
> z$iyh4Yi;p4#jB`6z!e(heR|#WB?P9tffUK+(<g)^w<3!mE?W9wE|Yw7c+#F~iWd
> s$
> z8gnS79EpCwY6~z0@l!3m^i5k1b`BiKp&$(~ttwGrXry8;NYn7KVaZ}Iq!=UFrt3qT
> zTR1|C#Lc(z%b!RMHd}BQvu6}chCP`Q64{oG+)zOx$XM$p;{xDBU4u#`y-
> =rT(&g0w
> z7YY0f1sFCA7^#n54UR+6tD0jUcZ0BA_{Jza3dORakyaOH1TB?6zos#}voLOd3gjv
> D
> zfIZ+aZm%47|I4b<rmueUD)7MByyr=hdMQo4HIpD`$pk!$8M`?Tb4c7?hBTxDA
> vBsY
> z8DQpr&=!3z%$D0~d4Ee9WUlFf-
> lja<dK+;3YoWoXolweH*Nn6(IN{Kd%rIu2l(*^>
> zOln=#{Ua>YjLpN6)INdMf+=pgTnR<YpDXKg1lVlnx2qR6cYD;hLlk)s6`dd;NGko
> o
> zYM&}lKy?6j{mUNrxoE=xUNb=l9JVf>n#`oB11lIzibqRjTI<r8mnqzHHF0{P<*`~3
> z{uFwPwEnZ!qjP$Eg3T)@ZQ4V9?+;r^>^qQi_2)TWYYHfU^A~%ToAS4+;w{H%
> %Y~uA
> zl{ryGRU0o$FEhOcnL==bg-<0;7J7&<zwz*`;R!jRrIrds`}=QW&E-&Vv8(sK4y|@l
> zukT^)@|&4ysc^%|$0m~&GDsZa^$Jo6HM%k+g=wcM!+wR`84Xc^?DgC;DY}S
> Og%Ib)
> z?reg+nt>!Y5R+k}HFQ6qNo^J$S9}mNGw>6?bWnMFM_I{b=sUJfAiNCC&CNQ
> ?P9?m+
> z115eB_|KJJlE~~PM>q$u4*)FXJQ&5KD8JIFK2*k=pm=N{cu$4Pj)zb|u;8UWf=|
> BW
> zw1lx{QxESZgOeb2Spri=wHFAczNIcm9K<43>*m^5Dhk7k*@g}P#?i^*OSr`RG
> Z`qa
> zz)s;0c^D?<;OcZ4`e>Y13=;0kx*Y_wsy^27mGX_+(ZdRhs%Q3PRPbbx6(#LPe+e
> R<
> zAil^v9g!2XNIk5ZqBbL@U2E~fT1huvP3K^$>K5dD$4M>JWry6+$a;BqP_0cqF<
> xf?
> z7O2Q_>SGoeMo1JNk^eg^e?E+~wY)UzN$)I(KO+nnP36R&nH~n5DtoJSn@~
> d=!cvi4
> z9CZG52HpQH57g-
> 7qMOTxm?3j9)ShmK>S~B2{d+{g>}3wax#8t=DRA!Q@~qkdT@0z4
> z#6DoenokH+h7ME<UZ9-
> *?b%Rhea33mU(d4%%n#9>k~YPFj$DDMaL{{RuRI1&a;ciB
> zZ}4LMUYMdXRc!Dfm7ct4c0bI|QHbnFGDL^*5I^t0PRIJB)Yy>(gfNF{SSu+;>;Kk
> q
> z?Oq#V7QT0cpcGGoTin(L#Qv6tmfn%{D{>7NXPyTK@UfA*>TF0tU~lla<bqRA0
> TIT{
> zQCLU!LzQ@+9ksIXigcbfJRirEH67OB#-2FMY-
> k|bD_hIkA>o+|4XO5%ffwvAFK3nK
> zhTr8h@<xGL4&K<ZU~;q9yfZoT0sEVg_`M2So)>~ku*J3H>RCLknf6YR?&<ss{+
> WY$
> z=kihfx&GbBoTTE9lfH_boWEk2?3ip+47{m+epHoS7OHIZ1u9Od7a}r68!Ne|%I
> #?e
> zgZ}Le*QrLz)A*@tR+@y-
> C3w+P;g7GtTiH{C%AhwvEi~3QGv5`L!9y_h{~_+JqT*`8
> zuTLOIfMCHPK#<^)#@!{s-
> 6gnd0}YJ_cY?dSyEX3a?(P~~0$;x~v*te+vu1sFbF)wN
> zshe|gR`sb}`}sZDA|(a9nN%X@kPYuIAIgagSFOylx_7cCQmwX(*E9uMN+!b(#h
> Kwf
> z!v$F~<F@M$>{0;Tkl!@sv~Nd)<gqVb2Otq2Fpo|SGLhBw7REpnM|iyXO%nKb
> c13(q
> zfA%36%!Y}%XIwIM7-bag>Z5g@i(87v0e^*~$&b-%JvXz(Gy-D$AG!RkNK-
> 5t49
> zp%FBVCE=7iGlX6bwiOEK7knFG*BOZ6@{P?27w;j3fcLZ*t32MsSEiMmJg_3XnJ
> )@4
> z>jz`h0#6g>P3!McDgoQJM!tUX%sV}O;6@ju?O<#Q(iRk>(tjZr$Xpi2SzLBy8p?S
> z
> zZ)e!G|9Mpt7(7(lx<oZgIvtaa7_*c?*MC%$c5hOf*Y1SNvgc{zYt-
> K0ds>d}Ym|X6
> zkP|jG&udQmTF1}!5B<c=tY9&6;W~a{X}UGnsG!aiwxf*U(~@!J6z>m$l?S7q2-
> )TY
> zY+O<pJ^LazQHn2M@q(U4#c4==#?}+Thjy8Cq_+&e!jBoV9~jThG`EwO1=sY|P
> 2s_K
> zBOFqBn_9Gsx{;xhaWW-zZt#XLk_*-
> ;Hs>J3)s%w&B$HTtOIAT@`MZuAi(0)%&W)~%
> z)NO9NRT!rLC+K-
> 4MFT2YH*3e%(SXbYSeqM@qwDBWl5f4eC;MFt@t+{8RRK6$EfH~i
> zI^JoA-
> W4rJDN{!}poj6`BON7Gl^#^_O`Q4LvG6}IcA3StC0M*wJ)TD&v3LWk1xGP3
> z(PC8$v8G{uN`yl3r~7JFstgWVoP0;bzpZ^IEWdB&>wIvQ_kSwfHfZ>1mgEH?LO
> 5V{
> zP4en>b|$kznRz8(^KqTPTUlH__L*Kxy_}PL@A7!jjt1m_&YP<42(ZD67fFJy>ta
> Uj
> zQvud#<K}R$DYOaeXgpYx!VH2a-w3Cl+vvZwP%e7Umf)-
> hsFYiouL5#*&$!&KjX`bi
> zY*>FPBBN7=E-%bvuNrvgviHS>XAwEkl_`dGiS-
> N$mouY7R&Ajf+^|1JO;^UF*$0hN
> zFH|8<MJ7#CNDvhLSeYCkIg7B$_yyowJdRfpo!}8qAylrBy@+m$bTuOCTR!ms7
> VgfY
> z{@5;<=NT0YdgR*61`OT@@b@F`md-
> N4+x@;*Z5~urm?Wlt5&_ckJ<E&o%hd7O&Y$=z
> z)Kr%3pSfdL`-LP-+*hkR>ng;ZZ=>bAZiw~uRzex?q*nYk&TJaUZb-t)d2_T;+J(^i
> zO9}06X;($6yiz((!P67lyK#^r7S@5uW(y`3-nvLYuX1DhBM!PuD&OOh2-
> )Y~G#u2c
> zr04YcYL|!S)3Ldh7{AU4s1n_eRX=u0hau|mKG)w%V`L|i;ClS9{vpygn=xyc^;{M
> u
> ze%F+U$|MNC9Jsu0mo*YNHz=6pg63Qj?PV5-*owpa-
> X=hFY!$Z=E5O3vkIsvqo^96j
> zeF2Uf@?D8?XM~y2OcqK#4AibGV&E3JI}Hsgm+>fSwPwvn$OTzdMi}INpK98;
> Ff5+>
> zd8DJz|Abl_c_V|$P@Y1x5coZD_9Ip;n%}v^-G#7epxL)9IioISd#`x`>zW)jZ2ygO
> z4T3UNLCGB4Bge%JF%Bhn(q~>9HJK%{fSTK<sIh{{-U-
> %Ec9_36<r@Ot#H*#!t**C4
> zmx!SL+rY=oe!&x)N;-85rk7c*!X=cJ++X`~&96uDB(oa!Hi7Q4m+dvU2Y_JgoU-
> !h
> z-kap!l0bu#?_Xv$s$P4HhM(XovNKtp(5+fiOCx~iDpISZRs((VEN(J3>1Kg0Dk|r)
> zH;}t2W7#2+S33c53&}s*rsV0?8|*L3wG`r%94{?3CG~`|bv@YGxzm!las$o?22;
> wx
> zg9P@TyQcjpl2-
> _O@}*(dZu*arxL*H<m?gG~RQz2RF*cXu7l1k?L96~Kbw<4nT1R*t
> zIk*!&Krx2&&JRlgnX$NYis22umDULJFQ|ma_`q5h%dDi1;_nRgzg_9cf#hxt#Q~
> OQ
> zrIlk#mDTpvtG4LX$b?MOC4#~^^Xiz!qLaQCj?Z0_fzBQ0x7|g~9cFhT&c9&rEho
> Va
> zmz>TRiwv~&E2+nh9rSa<)3VVwE3oihB0E{pfd{X2pAL*=Y3oJnVrB1i8BQ5~_$)
> AL
> zTg)RF)18zz!l`5wU}6H@m&z!D;uROxiY2GC%h!)pb2YU=(qmO$^o-
> eK9S@2vKmg@)
> zG=eob=U)};Q@e(JxY&kFVhVS~_M6L|(IujVq%i{}pL+VWRIy6^+1Lb*PqyMk6
> AC2V
> zsWq;&1q=M%26H{ZBw)F*6}s^w4y84L6X3?y)~#s67sYL>QZuA~l!>C4vNQ(dyt
> 7IL
> zg2~C~s-
> AqA!6BikNb+l9wyJoeLn9gyTQFUgsQ^I~*Lh9bk*b`p3hHbgTHcGA8Rro>
> zALTPPmZ6YzL;>#;h$<w|@R-E@Z8+-
> M8+k)HSYQAkXHN;6Y(;Zk(aH!h+MJ_uRUmTK
> zThW=<x9hf7(dqN1Suot5-
> _+y2aFeSqm{pzXLcO5L*$n)4t?@4(h&6pqlM(K^(XV}z
> zoQiBvs@w70a)pebXSJJUU9LD;;J^g6NO~_J>ftf|j9sH9f@Wd#K|zvO$iq#YE|p
> KB
> zHqxtQF_&v^3ji5B*m9*<Lk-
> ^rF&LS$KSL`@f3%^yGYr9$CGzl@8+kmc+poU!NP4_Z
> z2&fq)RDaGGU>upFW-
> hAN9Voa(2qo_<B6PIN3T)>|H<4r9j_1>Hz&Zt6fFILplj*dn
> z4{a!V9%A=F2@#m8V1IC23rreU8sYBlWmuX9Bc#@Vk2IoCpuli!=6mUON%V9
> XuxYH;
> zscTu7hP#ZdHo6?<vprf}V8@7v7oVJ|kiEkA5xjYV<P{cbtiQ6cO%+1Lmb&@ps%
> m#=
> zz6g+mNs)+T3=!R#x7FGv5#|Q*s03ywZ<M71a>~$W(93WSLvqO<7E&WCtzipI
> m6Rl;
> z4ToKQazBJ{)`VN(Nlc8&8-gz-l&;U-#PiW2|H!+_R?#jtS~2dCz*!pC6c`8-ub#}s
> zD2I5fUP#~X%>@PV1jYg-
> dg%394@g$>u=7kWe=M~ip2IEHo&BBWV<$QBQg#gmCDjY8
> zYw=m{PVKY14dDlL+HvT?ulRC(N7CbS7}C*`RplsB1j0@Na{$w>o1x<p49a$6s-
> !VH
> zCo<v{<t$tLR-#_yhqwckRRiJ)p(pFfA!GAO<Ti`A9sbJqnZ<YztBx>JjgVrw7I+ef
> z=(`dR?=g}q)43cZxmX`TPjxycli}R3Fii6cEv9P`1$@ijvOAH4N#TicEA_en?TYJG
> z(!;1S(O3G4pWk*zk@BUDX~S5!tm~tTcP*AOQN{A6Z4o1?C=Swb=kSAq5_$~I
> Wa5RK
> zo}{u)*H90M$&5+=%x@>2>yMdJ2qMDd-mdUAmQ9tGR$i(|S-
> 4b`D%+tqu`TS+v?jZY
> zt1n)u5jm@&Wq;^ZKAXni`;GeC=u}8>lB>!Ft!ac8Ham<EcK8R*<Kg-
> S_g6wc9ed@^
> zFBaa#j1ws${2Xh)T?=6*@lpd$V4z83KxLBakK$6%-
> !+AsB*ZqfR)!~mw$X4A48CLT
> z$1AJF+{ian8ivPKiRW26zgiR<@c|YC&^>Z@hUkkw>v1c4e>3xd>v>A*ddU?to
> pQur
> z_G*N)5mO}8+o{GwxzIhD!HxZnI}jFDRHREQbJ<a94z3qGML|hl{kwMTd*~_)D
> &177
> z;aC0_m5NZ}twU@qXmM|iw6$eA7`q^ez=3%izW|uBGpyddQ_E>cw(wN5u;p
> EZ4(Svm
> zyp?Nt1+ScUQ>yF-
> RIo^d6HFu(WV%dNpnh9zsWu>D1E+Ogs{#u`8=4EG!0WXnj$9_r
> zI9>O+V>I%eI!ZGrK#86vn*V4qNR_l`mb-
> !|nx_5@{z0NoN)|>e`r#F~$pM|dR8G8H
> zcQWu2Ah;`6hbU8a%cp~;Rl47Qh#6_Arb-
> (v5(f&L7xF=B4pdv!PJd`QjAAqzeZWld
> zFvrVWC4*gcD3rI9)G0Dj6NLdySs~lSSln+{BZm59&u-
> ~9^50=tqu6m*NDpO_`Vz04
> zU%POI*>Zan8sC0%$B{-
> KnMg`wXx8=ZZAx7fx^;1OH;~^G<D;&3zYMp%!9;7Qq>2Kv
> zk;lhtRHEUE^=77Dczxr?Hb5qNNQUwGxC_STRTHbG;3)K(s<osG=+QFHWt6sQ
> 6gm7o
> zzQdyXPSQ7rL%Llv?(?*)5eu>6g?(2uIF8VC7%Z9yK?rj$Wx+MCMg&-
> `s0yY}6K#0u
> zAJ%kTUfe)Wnc!4Ok{b1rSRO>Lj=^yPv;N{8rCbw)ciZbymZYe!I9+;w9EMt{!xp*
> L
> zMPW`D`KS-
> Bb5wI}MrHzyLM3^^n5!sp1q(k+v?@Erpf}^~7rPp_{=Rz9?a2O_Z*Dev
> zr^z3f8osiGS1L8{VX7;2tt#C+v%3z<o_ulAoasm2r(fcK8I71&x=JR5595-!p0yN%
> z+^EEQ3m*+M>-wFdvdvM-X<`Lb0$;@fEsJj6vX^6XsHvjK&8u-
> 5dDK)D7V(IqL)$ui
> z<GYnv<3MtR=?&Fr;+iG8l1nM10SS$!79S1C%bmY<IWeNzx=0?tCH6Z9&sFIG5
> f^_2
> zpN<f&sS1#rD=tA(48Dt4#0IKD^MM2bvxeS2nCde`4|TqDve_D&8$8qL-
> Ry({9|`xh
> zsdob#<Migs1-Mm*kjf)Z^tgEhBF9a{9N{4A2bd=!4Do-
> CRlCeC8D^PqGL&N5Z7KWu
> z#J_d`GIEgpAg<JcACb-%j%>>WCoXQO)joCscx3h`=v-
> !XbiC4Sp@mT3sXyOU5_<*-
> zmrJv@SmIIQMn7GXV>ueQHZn%qNr@sd&I`78o4GRn!$glQtF6Wk*(s^7ThG
> MkS1Hh9
> zpa>|!M0aYML4xnnDv!m;B>sfgFUiXQ5cg-
> cp{gy{>#Y7W!NsZ@r@CswZq03hQzrnh
> z#hgD}V-_DO=7W4MM9Z}=UKJzb!g@C~@u>3=_ionh+I^$-
> eko4L2%Db9hG=;Qrgw$e
> zCCt4^j>kRLE)XFLMukK#5<wIB9D98Vt*%>W@7WwN*tB>DzqE~WHO9;<u2tl
> >DsQko
> zy#KZ=5VmZc11pRLk`Mm6P_dR93oIp!nG4+jlB$*f8(!{<5&{DO`~r^AxU&`{GA
> GR9
> zom#ZRU3v=NL&#RKzt8XIPR+=(CLz{`6JmFf`9dlUM+cK(G+{AS;3ttGm{SYv$u5j
> M
> zs=?Byav#Tud9W>Oy%sXHw9o!!5AuDdJuk1eBsGS+XwA*AkyN0o))+841wS-
> >qtdWl
> zZ(PPpMD#E<eI~)GsU@hxNoz+Ry~U_0Dsb~M+17iB)9${Sg8}IQYd#9Nomw`if
> Ug$v
> z5a>+y-
> Igp}W?B@*S|5ypQ3?E8ipJ4B<et>dm&5k;iLdcT8SM|v<G<>}8q;TS+U2oo
> z%1HTtVc^d)(v(jW<1fyYT|O2q(x{iYSPIM_z8kGa>VJ|gHdr{z2?3M`ec2vZLf>Sv
> z)W1n7(7xOkXB?=;q&~lm$)!G{2MV1g@O`^#6I!7K*_Iw&#CO%b>P9-
> r6adLX8W{Ei
> z5o@Fytud~Ai&yAe^*X?%VI7RtH3F*d^8YMEF~0EM<&nMY9?l%-
> gl3|`x6ag`ObxoO
> zD#BdIK48x4T24c5M;_{U$<MauHOpoitnt^@2?PXS3uiV8$hG8P*Vqzjss^;@#
> #)K3
> z|6J-uHk6k?(>E|wi<_SP-y+M<i&OAYeu}fVKCF<8%Bgyo)zZ49-
> RMDs$t1CEOGM<Q
> zcSPXn5p&6fXr4r2FgBc6fM8ZPlb3fyP%#TV(x0ykB_#>GpQY9}$5zStSE{y+HJ>{
> g
> zd3yidw+{byu~5VB_X`ul-)>a##gu7A1p$Gpt9p;|6oaFVhK84+r{>;Xh83ltauO2L
> z`oPaxNv;d2>YR;av)7UnhoXyw5(kjMN8w{=LbC4QPD3%#!%we1pdrM29+khB
> b4`DX
> zFm{{7-6P`qVutVUz(BU2a-(ruSx6JJgk#HK0DSMIs^nin)gZdqn_af<T~Cj=!JWQf
> zuAed7zL=foc+cPQN(XTyKqTQ`IDCs}TLa9Bdq#irsvlZAU({w#41Ha>5M?T66Szd
> z
> zJ8Zc?*E840;dkX2o!;8|_DJKLh8tV0Hma<EUZ3vz-
> 92WPWHCsdwoD~<TBmF&4tr!U
> zpumVq5iqA*{)bo(Ki5k8{W*E`MHQQgUdKEa_Vq#a<(HA0#C)xx$53Y<Ut$m7
> b8621
> zt@{J%ZdTf~j`i`)g|V!|*7H0^>L=K-
> pq{9#;pyho1NF=%#WD64csw;l4P7QBK*0L~
> zN7LVO4)*)PgeY?W{Eyf2jIiiL>k5&6DG}rh&QImZZkNx7SxS`!UH8#|ZZ0tl5e7lh
> zKTY5G6Y%H-nYK&nwZ=d1SRIisaqZGobF*h%UZ-rO<_KitW*w!DSAFpxB-
> k7&Jx@|M
> z&1xx_R{~D)A<Zk{v!82$aT2^%%h-3|<!M``LGJq+>#I@71VqAX>-
> RB1C$wuaW?JMj
> zj^SN8YDfEUw8R?p&nZTax;qq5e?kdh^`|JI%C{&=d0Ju;EiBJW{=W1P6955+W
> mNfX
> zwCc(P5^<n>Yi8I_d{*f__TOR*%`sqYz+^XaZD&hA>`8O3Tl{&oj;Ssas{K*hWd58
> 3
> z^9U=$PcmgJOc+7UwH7PguU<(+jX;2i_4NL0a7)-
> x=ALXo%mfl)9kuA0Nubp|U|BG4
> zj2>hjijXXP`$imI>6QJkS>O7dTebMpt{62YCw4nEF1fLe4C5on`oqw`1a7V&+PQs
> +
> z;m3ea{n#i?Fd+Zi_Lo_Nn>=D?Mmo=Ck-
> ^xW;BYY*)(z$f!iZg0$0)Di+UDCGW_GrL
> zS<e@4b8yFK!$OUqLN|+59aS*3=Dym@cNK{TiO1Zb!96|)$FTLDk1??2Np^{(u
> &lnj
> zxfnC>UyVm$&&_1vhmxz52eWT&04NRHA9JLpS#AMm&8}Sr<rP6#enXF<Zb
> CBAV3id%
> zOA;BbhLoDPo{$)F#K@!`-
> x%^U?F5oA)Yl%;bb}+$qVt9Wnzw&$LGKm|*Sw9m?iv=A
> z#&5%DVRg{vlw7nEya%l&@y^zC_r}cc{J-
> ;!``h&gO%UXG)z?m4WP6$?UsKXww06@W
> zo=C&dDLPzRXv;l*W)fiZNgz3lcl+4i{M}RN^rokfb$XN5hb=4NOg5Qoa2fa7p{;sx
> zY9rk^SW~8vJ=n%jwMP{qM6N@S@ZDB1)z7wk**+k%R6vAUFKH*HQu0vw
> %Z#l>lmn+z
> zRlMaQ>4wynH=~%s*)oi0b>lH<m<S(^;_s;s+{BRan)%<l43@0OklfW#Qr9f04#
> %?U
> z(2K{1YYR(#Cj(W!bqB8K%g3e=t~In2RC~r$X%|6GHOANjiSK=#4c0@sw;^t!lhr
> Aj
> zFc;L{AdK(%(+^Ff4)I^&-5b-
> nX%r7yqzzxo*>Vi1%ooM^du@S7zXf4^)|Q7`6@hEW
> z{{m8HAAfc#0?$B#c?aA~hXNk9{u2aX4v|SH&K1VJZqdSROvKld3oK!E1;GJJY@
> kg{
> z^2+P*avz6wUq1aKaGb!AOgL=(OZuEosnBa{7!u7=&yoGRRN%f4dv1!z=mSN|
> v@PB~
> zJNUxJgI!QRT<^K45u*%`Gs!4-K~gK{k|#0!Y7EBQ;?qb)<-
> F!S+!gsw&>0FdKNmH9
> z3W{mc_{uNXBImEb-v%cn=iV}Ti;=o8RlI!dOV6UX;B{v`2Sr}J#KvzdaiK55b(`&k
> z-
> P+D2O!q^wgpv&j>6rJD2(59IQx)jm&V{dYnS1T*((<PU<C2qz^eAkzXR0pNhGv
> 9w
> z!tE$*8DNY^BFx?0#lEHQK{SU8k_(X>ioGgPh)$n5{^AbR^MJj->1JI0eH#{h8#Y}%
> z3@~{#MkZ8#NoIAVVY)O<9ptlgC##dc$lv#hxZhOx{*t`?`^{Y^ts}N&11A3^`S>d
> {
> z&SxYDA@+tPC%rt;dM2nBsaD`J2m@ND5QJgkvw=o-
> 54hR6AN)_He{48cj+&2#pHF7g
> zzd~1A?aTaqsEx?DVyEy)gJrJ`V8|Q>_2r9bwd>Y12to&RPEX=@a@O&AhEF0*
> Uov8T
> zmjA=&86Tp$5Gp6h7~&H;JJL)VEVW^lgPpig4XBl2mymTn2MxB~l=ynEHJW<-
> _?bAn
> zafb!%fH{XS!`W{BvpvUdA{H#R9wQJxt6z_Bsm0mXC5%p5WS%?F%GJu;(rmW
> -SA{EV
> zs`(3jgxshqCr)l5P3dvv#b(Oi+mkmv#5l6^w+c*~hh$7x1l7Z{xC$A*fF{cW6g1S-
> zLN)aPklg6G?x+FUaXCK{I7qh;h5Gd|O5rlYH~7MTqQNAKX3=;DHk6B_L|*Yx)+
> <tI
> zvfwIZ<>rd9jAT8%bylhSoc4!Z?qPlSqV~OoY$mR;3NaOQ+Z3Mgl|o^%#K@*l{y
> %k<
> zQlKrxNuAAqR)maOYQ|2Lx7$}tMDR2X1&_sDkn5XpI6q|%YM9#{xsSNY70rLjs`
> JbL
> zN0hqWa|F(Qbiiv2{L!L!u@V}Xgq@>0S{aiVK9HYMI_5W^DE|$fj}+NDrA!t_zcH
> gE
> zBobW+Fn#KreH^F4)NKyq>edi+&4L4f>jaJ~pd3qqwvsPFO|u(=v^VSW9%R@I
> Q}4D0
> zt04I@98_|Ko+aamL8m`D*%p#Bf|3J31S2UfW1}U!5R%yl<mGy|iK(~WF9hS0Z
> W9Dn
> zp&50S_F3Dq7^!%=cs&4!u>7HQ)B>FVc4X>vwy_;_<|asnmuEb6xRW7IYquiol
> WSrY
> zUl6dcXiGxO<5T978Vm=Aj-
> mBpB0S20+`){jH`Rc^0Q{s;n8#}Q>my9H*)fQL81@>W
> zYNdA!SK#++LiW#l#k$*ILTnF1N*N#1f!W{Mw&TBevi2$P4isS$JR+JF?6Sw%#_
> >ZA
> z3OA=SSHg@y`ip4w?)r=CpqIAFRM-
> crNy`w`u35r_Ow>E)Ho@1u<0EXGr>LVEhMy;%
> z9n36dAYS}70t79d(O0!Iiw7P&R=CTCzXGcEL({tg@yNp2mXjVKGhMS<_nz(@2
> EG|-
> zm3pvzB~~K#5LKjh=BYitB90|hrVo^07HA+&cDXch3sYCFV;n0YC;fIFYrl>8wvpI_
> zX@J=!8EmdA^$t-@4?=lU_SVCYJ-
> prULmV@n)*~HacE$;A(`Ek!Ev#9`+MZTKAV;E2
> z8;`|?`;L5F+p<jkP_G|GC~~Vi2()x`4R~-u*)g?4^{0tf%<nwbr8O$|q*o%ebq1qZ
> zpc(J8hR}{{$|H(FQ?4gtl0PzO-
> 4#@EUGq~TMb&^(EYy*K8T%w3Q(cO>Cunm8^0d6J
> z=vLS=EId&j$_?+j2i>A`V}u6WFeJw)d3@4BOI<l>=R^q*F3kdK^&p_8fzDaXKj(
> ?(
> zIWn0)3>_D2j_fr4q)9UY0GXILxu1ou3boUVgD#NV5*iaV#Y_B(c5ii$e4DPVvV^
> L`
> zK|)=?;YX9~*Q1m_c1{K@E-&fdpC>9-
> 5BKIkg6D!X32;+&s%+HUA0*=P&OmLue&6fv
> zpI7(~?_2FGCeBrldc5TM=i&L;dLR|4-bv>d0duYPuY|S!+JI#G3>lTvxq2I#?HPyY
> z`|0ID6UFoO3WUw*^(UAkttzCp8+5p-
> 8*mq8Np11wl$e;ZU7(INGpEL|QJJpm^gj{<
> zbxrn%&{!4ryOL_AHVADDpm={loho1tgdbREVUduh{vi{AR4qzRhF}P<N9HWN
> wrtC=
> zgnG16VZE=asV9%XitAdN8&Z!dTX%+HJcUqb?;67qeF?S}yuhfv4a1(_+J-
> 4CWENAX
> z{(B?7-
> mLbKR38zOooRLw#?LHiYzYBARbUMS$9m)zs^5@H)Jn_VGG9?Fd8_F716Tdt
> zlko%-YxVvp;Oa{&ZT$w+t!lS(9btA>BCu9W-
> Hx{eYOpTiVF9JS=gx(ML`wG)lG9%o
> z7jrkIca-`}<gV<Y;~-T}x9oYJx-b7jUhl)c;DX#MqR>6eG*XbQhT`++yVMDY54LEp
> zVcp*9{&aKpsQkk3N?*UZmOd9Ij2#%u+kjag+LM0EERk)kE0TIMBJuR;on%t!H
> ch4Y
> zqK+M;B*<p#>d<<W$)RipMxb+}GY7M{)JHqP;XRkY0u4c67E4B(C9&t4eAZPlB
> 0XV~
> z-
> cR5|XH_aw50=0HA$Ar8RUykv{Y}*(E1w%Hrkdo@qJLP>Lk8xoLaexRto7OUfW
> WX3
> zgg$<-
> Lw&HQR^&LxuP0gSKtz10moz>sRMIU;B2)of{D?>hgXku2*OCoG(1zM?ty#SG
> zO~f&xiY)5euJV)%&42?}RAeYFPmC=HR>hwbb^M9p;^H~}Mgyr~=Fbh+!XCc_
> sJOM*
> zlKa}Cz5L}K^_$L0a+{a4*Pi*i+S`-Q^?9$|{|g80KS<gC#Xb7}lY<6DqOpDj{BI!9
> z{)gwp@&Czl`fv7shv&r3#m4df<T)k$56|fVu}yE23=@v+zTSt1eGg95<|Fs7mp5
> {7
> z{lv2M&y~A$QX;d|*#-
> @@5~>7MFx9@n&$p*w#&<T*(_QELzoz#`G#|p2BeJ)f_t*PQ
> z?|+^DLv#9z(NYzpuxIdi=<_yOb!zZ-
> v+4aZ=<~Dl?Ywi3?c1n^I%%iV$%m|GjeneP
> ztX5v{`@7Z3Gc!ULe=0lY8@&@+@2mbXRJ~Xu0}b9OfbVzFn{U@3&%bJ?RYGr
> fO|R|y
> z0()`oug|-iJ}>rk^KY9z|E_&5-&29!4XV#TSsgpsk}6hh_o(CE$dbE;(NeRBclpz*
> zmU~X%zl(v}+Y^b8udfrg#sg({_l7(^FT1kA{09t0w%&=QFIsk00E#CQ1B1OAnV;t
> k
> z9spzQ8>&iH#|*OwAw(_vWA4L20)^BWeF1Z}K9y!XEgyjK&d>A3jS~Jr&*^PP<
> ?{qd
> zfN|}nI!hJBpj`*HJg{x#Bw>PMrtIEwz(gUlMqhwVBfXPtw5&??Scws9Cv_YIzBg
> X5
> zW&-
> 8EEj@S^SVhlO73IGww|HMzKLT{3ysj=kzRcB9^QlY|R!s++W_3OTYO73wZg+y_
> z$k*DKUS9hnEpO&^3Z%5b-
> jO!Z>!^;$|2Pr_?yL8d49ZrF9~ceHyw4l>^d`UbOe{wn
> zNA-tQ57-
> 5UX=uG9xH8?+HqsXDXpVUmg)JP_u~VOOj4#q#e<xB`+TbhbUQns4PBtb}
> z$f8H-C}bzJpQFc@m`v=4S{4#eQ|$2b-
> 7Lt!*`OkfC@t<<5|>nmqU=nztT?NN$^Mb8
> zBClP&iT#tYnOEqQ6Op_U@~owMXVv^ZV|wB{jgVRU%1Hc}4!a&pTJ)caq{ijO)
> avbY
> zf2Hcs-=F(MOJ-{wtZIw)6Ra5Y*hg2+=5*w8Rk8Oo)zfI_jp&ZJJ2<xIQaN`I76MQ;
> za&#`w=Ot@a|BezmZ5~J`Sfx1~e)9NiSV=ch?J`<?abZ=~anLCBM<6BXOMkUA
> WsF1k
> zj78#h_-<zAj5UwMAz=gR!(L;>XJC@VBtlp}z5bw}-UYJ~V>}w9S^<}-f2legfu21V
> zU!}^)-
> Nggo4k_%Fmh)dB(pxf@hyLte<vSZUoSdVp5fmqPruiM^)5rc9b)Ak^!F)Ti
> zok1_^iw9Fms#k83fy?4pe*Gnr(KOrYLJY)uPie_<*oDyuaO{ZI0#R>x`OB+Dg>%
> 5z
> zfEBdF(X#xqX&p%pk|$2v@cZB@=g6t*Wc;fR=aj>(0WfFg_+a~B92DYI$SAZY_
> _M{?
> z^+Jp}e5E<^D=2@hX+iR8M^FU|sY<DWx1aQ9RN756=|Vu@j@@6O<K%hgTc
> =p<@#TnX
> z(hr^nkIzt>Brmof?bV!9QqzGs*)tljVT?KZ1E*9Ac-y)MhqE|U?*0P6PIZ`R2VtVx
> zfTORuBrat5b83&kd#*aQ*mW#WScKh<i(Osj&R}^`>uof-
> yw%@CnO_jwr~R{UNhTaJ
> z=<01>JXjI~y2Fx;$?8<@>734fdbzR|e&PwUS=cQo#91N?S1KCHU_Wh4KarPlr
> Fw9r
> zKdTq#G|=&K6(!w{m_IA=;L95-xwKUneX$d>S)b-
> wZ}~3C^li2R)wo{ksWFiNQi1<W
> zvYlBYRX~Mvp=Ha-
> sSy}8y6Ra3?<394IN$w)_Mu#JT;1UnEN&*={A}c0X*9!F!$!ch
> zsIG5>Y43X05NeRsm=LzbFs#QKs|UPFD783|{Z<|IP0*?4b=T_)0HpI%m2jaY2a
> 7S|
> zpB7^aWw=h=gAT~!{HZr}|4nDTVmWQxQiRf3GAprv;_C3CJr0g-o^E6FA3<`-
> J>N9;
> zZzk49U6;_sdB%5coeB;P6++~GfM0@@#Ijbl(dRI?7QU;jR|5X5v5CIiP+}(1+IHZ
> p
> zE~?o{AxJ}~N09C2(gvU+lao6u@y!`@roZMfaH>Nb;RS|Xvd(D1-
> 8ZY*_|o_^Eqf#R
> zq8aIlY<jiO4^G0B%h!v+j}Pn~_Q3!*czL^1?_s?QVe?w}Nip`(AG%JhYqYB=jMG
> }5
> z@vxKpmWi$c!s<AFvmvt#E)#Y0`BnVkn-
> ~1hI6!b;xaJ+<ChBtCvW2`aZXZsbYRWVI
> znZHi^%AtLEBRDz7-K8~sAsZ`s>k~lADZ_t)irEQ@k9a0P>&Rbkd7ogs`o^`Z`lwP;
> zFH6_l2eV1(qls}N-UsZ7yL=O_AtOn4+6hZHVXET~cKf{9T?9=?cy#(JK;Og1fzz<o
> zKM%=Us39%N8f?a*-
> (@S)wC^%$Y5L>(aV)J<yaIm_yyCmOkQs}bScXZgje~z1aPAGQ
> z5;z-N88F-VL_>2ak1WsZR|MF(k`8rjSu$e@iDiT;UTzXm?d)m<gI>4*iBf%^!4hfa
> zDl@z@dt^6mAPZO%!JffZhx*o)V?$lJ)R|+7wk{daohGVFw@ngk^97KXd7NW
> CMvDu^
> zyfRp@QGH{t+)JiuR&mRtlmF3fU;E3aas<9QggiD0H~lE>t7sb(D#1d<A7|!KC}<Z
> u
> z|27s8bkaGeeFR3y{OOT%O6Nx1aEsg#tI2@xuvLz^)tTQytnyLqB2D`x`{i@N^a8
> Z*
> zg@ZJnIDz?*+d5L>ff+P&VLel)`4Q_<?wB&jhVXR>)Sot0D1(P*U1BSFKz%mLxB
> p08
> zXjc~XdqWRXMT1kmWL6sMXCwW5R`EcDQ<Ka+bD%@A1s*+*T-
> (tM5hbgrqzg!TpPCv-
> ztowtbTs0%+xg`L3@GcP;eI2#8FQ?Xe5X$u~8n`o>Mid`lbbCAZ=*R?LzFzZk`L!~>
> zd8?jDiZ^4+jg5?@DO080Jt}E+qCoTl`D^H7%)i|F<DSCN$zA3y<|sGm+02CKNm
> awy
> z4x&6c`<}vi{d{uH`9KAY!bI&Pnc6$6Llnm%Dxy47FuK#vs8fOK;;v^LLA6g)S|k=W
> zR+>+!`cN=s<fy@>TYBB!B!6qJ{^AtXWAtgKodsrU9kFtk>Cv<dNQ@-
> 2iAOZpM>PE|
> z5v5&9%GRiaW5g&gw2?7mg)ol>{)U)xd+KmgVtxdw>rl+d8z0a(m+kf+Ncqs@
> =%uQi
> zvUdaD_tV-6t_ywR4}E6=r=J&sLL_u(@&#~1lSRiqx92ON-
> c9z4^1AdLZ)G?EMr6io
> ziKN$MuCY7im-5eN>+*Y}Q%)-XDqM~BKQU><J;`5j<m@w_JNpb)Ny)Zk-
> tKgE?*41!
> z^LB~87CaSpn~UXn^vTVbx#M4xKTD9{+dp-G^wdRdvdD-
> J`dDQUE%E?vGbqcsF+4<p
> zEvNS0JBye&Sv!}|DmTfwkxdlrd;#dJB>@Pdkuf@Elvn=>P`?A6v2X6iJfp8GO>h
> ^f
> zTy8S<4rhXk00bG~9sJAfNQ>%r!yRWGaA=TbY8Pcvk7i$}1(VqmH=TYfYma|5R
> 3<T}
> z!VCduRU-dL;dvzJ%OxQLbJ0@boj*?b9QJtHyW-
> _;^oJ3c$vR&?pSIdWQxsctj#>zo
> zl4bupFlEn5q70gB{gikE>VwE6bvsc<yV*UlYDO{Mhscv?m4~em$lJQ%d5CBJcZ
> VN(
> zCsbOq47agLJ-f%lbZ}z?Jg-DY+!(gxr*h-X%%h?;k-zzeZG5)$Y3uvf+r7@+2j&4A
> z<^+8?IsSXrw1OOi8+fNCo%zqA3ieV*ZZ4<>ZDuv4-
> ?+^j0uuF{x)#;iM$9BLnP>E&
> z>ql<f&3!_YjJnj24i#(>O=<zOF#g)*sezg7!0imf;Ha2`SCLtx>zS69NPR@NOkZ%U
> za6ti|Nr=VZrOhlLAxJ0s9lbmtwpbz;2Est^{w2?_K$-Ey?Sn2kqq7c?npFn9c_e`?
> zeZH7{y>8{8JH66JQ-#tlT>VA7{qJ3;&y7X6zfIlXGVkj}i;JojnHPe>?9g=y?8IOT
> zllX+D$<vkM1eEN_&}smu_4s~G(c(F9%_a#sn@J7|oBk^~T=ADS!SeZdd$ug5O
> ;yOm
> zhK2w91n2bVyBrP`q<5r1mS6s%e2wI|IVQ#KHMRFS=9gq1c543{IqPng{f9WaEc
> !0M
> zgz3*t?)@zHaHN@$OGDPcak&$TlhP+P>b}grjrI-YOK9g_YHIMZnU2q$-
> 2|q(e#uk`
> zqW;v~*##go0Gs8Ah@Rix+B91um2h{sjac?pwDUt-*6&-
> g!F{%X*k(V=G!7(uYMSi%
> zG4N}<exDp(Qps$K?*lRL`#o0UU;#Vf3r-
> 8nX~9912a96TBI>Ash66BmsSm<7O{W-`
> zgaR4#bO1Uvog&+z&*{o%T*%l^I{KHm;Yv^@^@tY<2ac;QC(|ExJe-
> `ZnYIs=<d+tV
> zv^1eYS1IHl?S9omMu%$F;K*9Myl6A2Zyx&HdNX4*AboN^6yNEd2j;e#q+PMj
> 2lRk}
> z#@7DJf0C~m4}!is#b&bC9#XFHhX5h7?)5^34Tnai;Qn994%-
> g+e$luT1c@yR7CSc4
> zmJLCjOB{YDJ@FgHub{0I9(go<dD3Q^<513)WbqGZ)VLUHTke&_TyA?k>Kt~~
> ^6YM+
> zXpXCLLbHPm74gT7yv!t^O|a}%R{>i|4~{9FPLmW-U3p)3-
> lxKg4D;`o)IIG$dd5DF
> z%2&G4UmJ(gJ1XpuOqeRj-=eb|4<W1$9j)6b2*I-
> oHvi;Uo+D#X55;pec~;swH3>|X
> z-
> jjKZ;QW1|POzFWh_p?dfWu2!r{cp0RT{NlFn9+hxQ1iZaD8n``U^iaK=?@y1B;*O
> z@vY`UBHu@5ofP27;ArNUg5BStaJyb7%^$t7qvv3I!Ikk3%lpfEx*J@63_N^l3@
> C!P
> zuE38e!|t|&fw0-Mx<^YikGi(x>*M-%f>Z&#pX1`(smP-
> _cExb4%NHF;BQT6$Y3Hap
> zK(K;q?z5w|Ti=$`GzB|ClT50z7A7-^uOt|JatER_S2LuDYO4bv>SdFF8vY>NTs4*z
> zpd6xjaboJ>U|(PP(Xr`3-!lP8tlh$wHVDWoVi5F7uwCidPDpa2-
> EiL@ILSSUfW|qm
> z*)sS@o3+p}WF|mnZJ-;<-gYlhV}4z8-(UZq{x>eUmsq)H6eUM)Gt_g~2X-
> UK!KgL=
> zy=KJ8Z+>*jc6+YQy4FW(tDQera<fMv=pWVOiM^_{b~IB%6Vw|RaX&S>Jxed
> vTytR>
> z(nUoEC(KICN&mc9^4Fk7RIl)#LCRcJe!0<&gKc1uY`VQB4NMkbiyk;Ab)u^P@M
> WM9
> z^q)>&)8eHXH=Jud26Oe($}?Paql%KMm#NxzF^oc#8kG8ttF%$JJPUh%?{tnyF
> 0#SY
> zZ`{jfd|aS=Zu?foDprZ-yU?3i!oqnCeW(L-1iA@3lkbl#$lU0y6`=93o6w%!6;rck
> zLN{Fx^VZZE-
> (PeQD*Ii2zj9*Nh&B*8+mlmuX@TD$EEqj;sHThj#~qSy6FLH!7Q`QO
> zF8kTTm*{&8L#@U*A3!@NE!F*^_XC;Emk!01+*{YO+luE5{X4qbFbZ7)rkol{Kzk
> wG
> zLhYCygAvj>b-
> a<XCE$Yu`xSf}QWmO0SFaWAdk4e)AxQm1U;y&zD$yI0gz3k0xya6@
> z={#=hl*QqtZ1N^08|f*w#hYj(TFt!vE*yR4p>~gP{|25uGt9FN5Zd+?d09x_{!tM
> h
> z#r95cxh0yS=@(IWg_H@&<w6AiRe)=wNmO=cgt@gx&TD_P$Z>$kPg*L;Sha#
> xBHEN)
> z)%XWEDXAwO!A0R#h`<a1p!de~)cLZ9$lAr)=CM6*YGEmD#@*lROWE6alnA
> @5O;%4I
> z>hyO&j36Phka{D5E3wZ^k=5YbI3JN~G_q@32XQx&rzg#$j4<|gLJrBzYyDn!7?
> ~Ev
> zTsoY>Fev+gJ>m8`!}pU7E$Pg7hbI;0aUuP{dGZF`jxP=Zn+EN-oCdg}jL{dfk1mm>
> zM_*ol7FV~SWr$H>Hk*1;2}VzsS1pf&MF~)weN&P0CeKwe+;{IwCJqtiHWzl_
> &7ZR~
> zw{-
> 8@MBxZgP}D*C8zO$0GEs*gSgS>1sMkG$hgtE~H5Si$B@TZB3l#(dg2W<s#vZj
> M
> zuq7RH*aLutJlN)>*y~JYa+~oJQ-PMOcx63;b@x4mq5|Cwh-
> %0vq^bl{PqbE+1_kP5
> zK=&+>C7M$Y?36M%BYU;@XzfMB2ro9EX<A*H(9se-
> BIr_b=k0Hk&)XYe_Gzu>i%)Um
> z%kd@XdR>TP9AuMODgWqP2*4<tH6#mrClxXY7+p=$K<MM4OK5=G$(0r}_S
> 81Kh2k&#
> zel#(;3J4yAeB7{t9^{bYs6Ra>=j~8i56i;LYmCVoK4)V(#P!mTB~LCGwD6LnJ=wTL
> zvB*AHILMPRlI~rL46gJS{tP5Z>R~ZIFy__YMa314+&cD0&|;%-
> 6L2Z?Tp=)`WCZ7H
> z(<tSj?C}9%8#s=^c+x_A8AQL*U*^x8ej`Qfd`%tm&OBj`b6Wt?#x+Y74OV7a*R
> +0D
> zy%Xlu0rJj!3~MAuU&xTB3MdSWlk|^BlSHK94)8QVj|&gQY6tVR^YXSH*3xD$k
> ;w&S
> z8LF*oYDb!-
> GFDF*%{yJVn@W_+swfvbZ_@Opvm34}D9x$RtRkIZ3eF<Gq!$D%&Llz`
> z!TU(O6?gy6Z#wJ1{<jGyHdZ;PA?#^hpMiE&6~S4W7OW0`G{>#XUEFb&6|Kj%
> f;X>_
> zTAs*&drz*BJtmGu=7^u2_7c3igCHJ*P%YG=DD)gUNYxIC)#57@-
> N+tx9YY#(Z#%I$
> z-
> ~;eKxMKf=#i|LoXE$zztknN768Vx#0z@RUGvaYv?3LqR)R?|X|7OU@T5H%Y$3`
> 7+
> zD1K=&FL&5ZsU=tT8H<-
> vtHM><Y_C*L)Kivcp1<BIS^$m#l03FrD_JZCXQz;0tJj_M
> z{Culf$C3wIFq68hape%U<Aj!CTqBXK3&X&3SvL1fq^<o*x*MtImL_vr#y{X$n%
> _Kb
> z&Yy|bJhJ9ms4`r#82>3nAhU7EWfoi*>rWr*RJRI%)j)n!Da!hzvgov6?v*XLqnkp)
> z`*}>+Hr{=U^1yT-
> 3IR*KaZwzYO1&8!aTHgBOMuY!mPId}{S1g;&ZZx%eWv?Lt@Ou8
> zC+LAtPmDWn=`P^$0B1c9xyi&pMyVxj#vC>wEoIGu<k8AhAZR@%N2sK{Dc~$
> oS`9cl
> zWM_HbEK2TX(xj<{kqPrFB2~qmdXmJAuWYWWD@_krd@>!wyK%Gu>vC2%
> +YX8s(Kfq$
> zI!rSFE*=c7`oEWVx7zp|PTn@Yc-
> *kAV9lk)x#epAXd<}=X<1X2!g@?xx*ZlbQ9_%L
> zD%neYBEl3l5_M)9Fjy=$ZmiP+dR9o%U0Dsd;nKMNmHBk=^KfPj4PJ@t1;y-
> #`@U^Z
> zAFG)~jDPdNF5BB5!caSvh6#6_AI_&GQ<q<-
> &p(&3rEI@hzy#ZPk*m=;e!d9n<CE!$
> z*(6`QTX;yJw8p`?C9tjGu+Gac`bjV&?i;X{@<;LIEFM~?*kfq)31hH$TT3^&g#(-m
> z8fUKsB8WEjG$T#!xI7F5)Mumb=CdjVEhR(^<j}J_<ubt<H<50u4Ek?xzh*G|s1t
> %(
> zUyUO=LmP-v6GB7SMLF0#w701zhC&ZmOL-`w06l7-
> ^8cvMQW_J%_|>s4e{O%b3OnMR
> zEpml#PE{KxZ~8D^{cJK=Y2Q0sD=AJ1%WhE>_UnAxwz+UPAC5M+?QgENcM>
> n<f5LZj
> z0-
> 0NW`k^ymyuv8EF#T*MKlpch`GN2Jt<8nWxDl}(wjm<rKrW6W?=G^CAY(YsWv
> pHY
> zb{YR9nT~yT%&6FyGp-%c$Vzajde-{qW)P$RxWu;+6rNY70Lh{qNh)R)_eobh-
> w?VR
> z94=Ar55M(tTw+L*xp@fZo4qP7OUUC(EBioJ;ikiyq%EZ``$6_#<T86_1DEW)Z?3
> 8(
> zbicx#!hB;&YQ3LZtSlbQ`fET07$<OIK{x~<tG}2qaPr&5f<<Cl?@f&^FHk4&*f3k
> W
> zz~&RZo_0Ywvqvsz%ioDBA>d8Iwn4?`8<yA}LI`!Km!xE}i((1E%21C!FJO?&a6yh`
> zUkQIBq8M*BcvG8bo$s@bM!}aVp0@_CzXC@x45htRCA-
> !0WdE|+YTqRH(v@zwC=Ng7
> zwR?=mv~0AStzZebJfvDmRqIGLh}b?%Mg3q}o-
> MQdOS6oh`6F0==<p1F=o%N5=MvSa
> z?JTx^(+^+yd}=Amm)nb?ox(|~I!*9TquJ1xwFLpi`ySbSy)UXa+V^vLP#8q?$~O;
> u
> zDJs1SC5TB@E*iglBLn&qs+K1#B>ho%rL*_T13~APM-
> m9p0PRMasFRv?5TKL=1u;uB
> zO#q4`wuNO*4q66Zcf`8oo0^XP@)n@2o<7a>Sfn`jn)b@+8u*fSE^~vAGyd;Uz
> PN^Q
> z(W3G6`UOtXj85=fmTZqCza3?DaUYQ16Ch(vi9aZ`Q7dU{a{d#Hch7qjpv$Khoqp
> W>
> zIu0a-cS5PJUNIKPoVY?XOOu6f&?t0`fd0w5eb_y@b;G#ExJy-
> 0%+L&Yn2eN<j<Y2p
> z?VVb&KFsswsxCFH`Nc8n#b1Y;@oRYDe*XARInud7{oSgTZ9R3E{AqtWZWZ`Lf
> 7lC+
> zy|A@0e^3A(fHv>4vPprXxfZe^D(`oHnaw8^oNU<nS(?bcOFYF45kB8q>;A_5K
> 7X7K
> z1-l}1I@wsGafdl`k5paUA0hf-
> {7jtPxf@=2Cd@)sRyZqYV>#s^NLx1L@85(0Jv>Ub
> z&)AhtCnn>RA1I7Xdi;AX`0Ye{L8K321&E$V^zJ-
> F&n76pxN3JJ6%yJc^PYv%hE&TA
> z;C>5@R~a22wsa8n*--
> mv(6N|_t)<MH6oSm|p2RQ5PU=FeCPa4b<ID^|MecCUc|G*`
> zMN!iFWvgC+?RnCNTSP7}=4tp1w|{_NM?3(QSyo@EWO}pGhO$8iR%EuxS^R
> O{@bc||
> zum3)3wLmqbuO)5hma^x^t22LSGGN;Mi8&ow@b{bhh*a?yvx2pmO%L5OJN
> >DV2!+-Z
> zVsiPx61&_e@yj;#_t~v7Y}UNlDs^s}Q@=O*!~k-
> 1P9+n|zZ}*qsiwnU94IWBTeu3y
> ztIdhh`F)CDJk{xS&`<1{`u(AaT|0JE6o04Eg-vDlM<_Fu_7*wU#8r3aIow?hl@Eo9
> zyj)FosAD4(4jP>DvP==7(IZ#N_S&ZsJV04z$Kpy!m_hoff~)|wB6CowrQ<aVu>2
> ^x
> z<PN(R%4=}XHysP>Tu0_IP0fj{ic+>U86!k4>qeRtvFoMsOe)dT=$XPL%&m6Si=
> _Of
> zMrhskdE>Oi7}%gW22qA*diO-
> v0Cm?3v$4Ucuny_ZpD9H6piV)<^jK~Ab<ONpbvYJ)
> zI#q65_`G8Gu4uxDG!&c>nRYHs$-p-
> 2A?)`wj`E8U^lf3pPL;eX>GQfw3SoyTQ^v{M
> z!fe@v<-
> ndIfqQ%FJj1dF%LjLoVH<|#25ff{b%!>s$n0Teb^M^quNJI21*@V{@Cv2S
> zz5*O#A1K!K{YaJJH0Z3;uWCr&_gE4or_l|}4KIcB)yq7LG9SQ^djxkX=uI6^SIrKe
> z&FFY^CdF&Y9#}Yi1m2P#pHJTU8tj2jlb^GPi&+x7QLrKd)Z7SBbo;8zz|r5@c)#H
> ~
> zp2MgviDV8wv|x72RIPE|lDI9|DR&E|&8jG{olNQ%7Elb_PhZT_d{i$^rpMc`TMv
> (t
> zluMt-7yJ-sia}pU#Gw?kYb;wFk*+wO6js9NyPOh6_gZqM8ji10VZI;X#Zss}S-
> Q+e
> zvvsiz9GCBRwiupjNlvz6cH2;uoo4|KzR^%f{zY}%IV>uBmFhf;nDLg1c*a_Dmx>
> @Y
> z7VSGCPJbuZZ7%?+mXQ64{Xg}@g^t>{TuaqZS++}HKxknT=FMB&SO2a-
> y~x`8!{aar
> zCL?V*Vi;B*$*n>E18K|CRcqLgMV+ze5nayKbMC2@1vB?J$jH)!KgwR3tZT=0I9
> ^cu
> z-VJXg_{25AY5^Pb6+tnj?MN3_lTa;5YOjjolFt<27-O(nu{1f?Eifw`HK|AN<6Se*
> z(Mn_>dgmu{!sga%9sI`D>tN$=<Dj!av!)A@340hJtqCsQ_nK5i-BaQ&pUj`-
> 6!A1#
> zHvK#Qa?0<`f(sCu6L(P!xKTs5=FzV&a8idX49CBE%XV5>`AVvP=zg43?92C2CK9r
> `
> z>BQ$=x8JJAAnDB7j}mSgtXm_TdZ{$ujJ6<|e@pW7888rgF+hC7k}XlgO43tsL-
> Jo(
> zn2Yi5+p(wtM<U%)Hj0%|Sn+RNXTZ4Wvy2CQ6Prp`l&QF<3^*9z!~SbwjKP&8
> #2oMe
> z@ALbRBl(vpXj(pu5L#jTlO!Tw<;|L-
> )eM2&T4~%nU<am{AJ=s=`ih*XvUoe64Gq`b
> zfzV*ksa!%Qz@)Bfib7T=Ab!}Q7?%LoRbe470~6bnY|mcrIr3}fsLZNdY*ic9qzT87
> z+@^<NPeI7x^pW{5I_m`?p7Ka<-`?+%<v4I&zcBt8hYr-
> UrpdfSpwXP>z;trQKvX67
> z>7VH^M#nZpXBjAT%+Mt$>3Q>3yxdVM)SVCYRDU$U__+T5BFzq`V1X;+xi0f
> #r15ZH
> zCOhIjA>K=n#g?*Ssf~>|Y)3?y6Zf8;QGFc*EkvQklga8LHp*D2Ic^WY?<!QxzX9X;
> zW}JI{-
> nr~j;U;|vDH>Xzq1j6xUgs$Hlqe5aN^sF4{M2HUi?whO5%k<qlpKE3!c}9K
> zh9|-^nzTbVpzVBl^f{vf57ikD_Zz8DyM04x5VnYcvkC4T;&+w6-
> xS0)7R$?gK2D~T
> zH2#@=iD~P91AVqc)sD9x8F0Wj%OmQNl(j^-
> <wOa)kPqxylaLR$T6VtW`qnFTC>Wtz
> zBH(lqYW2cYEf4YNpDf>)iXGjV1}QH|Ovfuso={GNP0I(q$z&1Lanu-
> *9bdj#ncH=~
> zlw~kYK{{95$09ofW%{5at&&f+nJXn;-
> |GQZ1)p5GH2Jcg*MFUl@q_$1Sn<ng?8V`a
> z2B2e6((GcHoWaWKi1o9;FC%uJl=#=bc({qqSBmy(C*|l;#h6-
> 8wOr8j?55HXmD`O9
> z9xKF8EDD>GkqQ3Gi*|!QFqI=yqCATT@lIO2l=?NLr~eKZ5YmH9a-
> 2T+geaw4u6}$j
> zwWNSpU2e{%;khFA{G;LYS|M^ptgn)1j@b{z`Z>Z4F(DjT=%L;jUBSbxP(QBnY5
> m7D
> zK*Qqmzx5xfQ<y_HxsxVR4w>Lsh%NYHg^;PP!XR>5+RVfohAm1)vSG-
> %q=+~T|5-@m
> zR=CkvkSBBn{0124#DvS#S2mS$<WOKRW5(!QcqW;x9Vi;GXyIP?co||uW?_jh
> N+vEE
> zlpy>r{&*2CDR^@c?wZKl0=rjOy@pLcpBEmyo4J(=1Ie)+n%rxtCI+$%Lp7ckWu
> 2C8
> zcHaWld$5FT#;CJxGf!0UY{11aqiNm|7H^c$dmN@^k~bNKo;lB^6tiQ5{BPbA1(
> ~T5
> zYu=EQm9x%}+j#~Gq=ywn4R{h~`@h(G@1Q2TZ(lr$ii&`Uh|&=e5$Q#x1OWw
> =u1E_-
> zq!R*2??FLO5kWveIwGCWA#_lb7J3OKKtM`>(4+@K@_WMTTfXOf&zW=Y+_
> ^KqnadxU
> z@a(qs+H0@%S!?Z`$0wB|eysojH|ac%(vOK94-
> HWi%I~Ai*!qAnWFB;Wt7e+;Hq0Ah
> z{uq2OdGT7bx}>@rvqlpC3E#Fv>9sFbQv)wzEj&1GjO&=hT6&G$idRA!%_9n)9
> 2e&5
> z(%v07KB`OGJZCnqVQqC9(ezaQ-
> 8UPmo~q%Fk8hf&c%Ppzp>mx_>eyw1;*$pXKlCyT
> zhI(bkh0nRZnb?2pkiByG)RUznZkZk_7phm2mhG<0^bB=q9EE)~9RK({wSs7uc
> %1t5
> z9Y+CQ?gJf})mwP+^Gzzaq|p)dV9j&vo8(ZZaC9}Vi?MCG4(+#^2Zp{o`Rc3Ny*L
> _M
> zn<Mk#V@;t)?9!v@1&D2*F5WDdic8zO=<=QQ9nUdb!6o_k5vlq2?oXk@d9K{
> |akDie
> zJ`dtN;uulp4xk7!9UC2j2K;`P!R^+fg!#+T;~AgjSUI3{BSki?$9zKaFMYZJJrFse
> zp3s-M`Qm4rd)rq>f{-S8S1sU*Z)_H)ijB5O>k#Tyq}B&L;Ahah;tiAi1-IG59QZHq
> z77KIIe64v{vBa1TnQw`{;inioyZ*{wmUH2WH^=Hli%ta9!EoIC`7brm6PH4nT+c1J
> z^=vgx-S1oyI7-
> (eXsuSwai_4|NKI`}z`z&3+P)Fq9aQo3U~t*`rQ2SCEFA2HxQ@+b
> zVspH~TwIW7a;mfTv|<1G=8KJQt<@E8qc~5WKtGX^(Gt8Em!xr^CE`Sz_n1f5s
> Ny3+
> zBdqreZ~fgu*G@*;<*HuE?&Gnro~jFb7%Nl<cYIKL%E#0E?Uk#&yGA~t?>PgX
> >#I%+
> z^aH=-
> YtJg|6xwT03mw@{wa)!;`JPVVg74r|@o918w^|`tTC*EZ%(KKzo?tU7I&89S
> zeo2UBa9_Unwu4I|k;yWWm9hUSE*WX8xrUjnEz__pf<>FV#Pbexe=6iGfYGj
> B@i9uN
> zjn!EmXY!5eYtZVjUe6|fu3PWAvHej()qvyvn&^_;S@amqXsw2_)t0G*Xjp_+$L
> kUS
> zKJlg3bNXNj!RDsMRH>uVZpLS4H^wu-8mc;$bco$p{(T!s7j-
> q6Lh5U)vkuV_U7wi0
> zC$Z-QJB_BE%jQm8QY-
> G+zxe51Ldle#w(Ip5ZztVZxPz_BCJB7B_t@#H?vzPr3@?Pg
> zZz;}QVgGSar6_GItx)QtL`!b9({%|J(#3OP;D%Dg7KZ(7zibJ)r)(e6JO;af$aY12
> zo_h)RwRn+EXYe2$b4tUbMJ{k!hDi&9Vcs<<ze^WYHnW@g%3cd{)5k~Y`51mZ
> e%EDv
> zRzu**tD~nPXfQQ<G+upmP?@~qjtQk6P}?s-$%-9R)-
> @}&Etj0L%t|RweR$|<46}Sf
> zQg?bUhVs8v&%2)7t+Rg;>Mc9MET$z1SrpaFRs<jEPg)uq%(@r@X88V2#DCU
> @`hDjw
> zvrU-`i|1+ESwSVsw%;X=0SRB=jT~uE2HEgu_iigIeSbG}x)isSDjahmS~j%i!l@+P
> zu_m2oZ_BJCb*?FytkvG8;o-h~^;uufbYICGR8H9B*Bcggbj`VM-
> B>@COc~$b>|pWW
> z)-JJnI`03JP!ln4-
> uYFAAav#7_Lk5U?+ZJ?6T*$263=TF7V^b<U)%9tSWx3UrW^C@
> zLl?AO;7#%m#SP=ASx(N-I)OLf`K29R6X(JFv<(B<TDC`l2Q`uN27}`t?{-_~a;U9F
> z-
> wbfW{P?ARvRAFvR;@WCo8yW}*2kT*pT9oV%_>PRf6<)k+{;)kYM4yF@<7?Q
> POyTb
> zQsl{tX$v_gGw+0V;QLldsNAOcZ(PNd+JwH~?>P__Zx7Ij!N-
> Ycb`dfvTCOBKW+y+e
> z#7@Oo*YIQ4tM%m3S2)pF>fD?yb40dQ*;T)$7hNv=jUC0xY*cxc4p%QI{URhh
> @1_-z
> ziPEZzvVCyThnB}3oRcP5W*^LJmcLK6vM><QBclGid9hp4HRyBUdfRDI?+e?kCf
> {2k
> z%U^^!=+tD|aLbKjN?mjva&t?KWsF!^wmA258<-
> c|N)te7(rnX<+mCVXPe<R7Iq2SX
> zm+Z|nCbqfAi0s671I53vK=I1KR3qCC$?55Y`D-edvHhkOUg7-Qnl5$cH}A#-
> y4QMX
> z(J84}tQ5~Xvm}>q^+`LYUA6PRuyF^mnt2r0U;Ws=tK><Kn>yx9@~b?X&~hMiL
> %cLq
> zG$xLTIhx-rlE|Q-j}4>lx{`liVCXV!xMYabL(i~^NJh*x?#I>i)pKvv7DPWCvwM7`
> zvxE<-
> 3pc}<?|_eA=IBg%h1^i_gSA`&a|F>nu+;!gN%!?7Y0w%+Z|B*V`zUgJDYGez
> zEEO9#mp0<;dy(gAZI8KVMw(#cBTK#)bPt|o7zk}<Nc8eaxwV_kGs*~Qu4m&6
> @0}75
> zFy^MA9uEgj`*e6;D*V!DTEbB#{b+JkDdaew&1#fQjmIVl4qr+RzGe``7W#^X^i$
> o~
> z<foVE>&KON!PNX7$<k5YkX)(x_>mhsLFY&h&MRh(<v)MB?CRTSFvU<s>wdo
> OC`u}O
> zD!uL655(<g0(H!Ch-
> CUL6Avg|@jE(O&S)^>U|{93Z|$6+SYyL^Y_aC|XG~@U^^X^S
> zo^LbGn0VH_jFtZAev$ClMZQ}VJ(}G0_T&X|wj<W}zV8vULGd{sCACNpMt{x=
> p&m|J
> zM<gH@X!tML$dsKR({V8jUMHMvJ{Krwz$zCMIG|kQVf(rvHNXUw7+l0t!n8A4
> XOp`^
> zvar(bK9+fJH03=(1v`@%=bv8P^=9E_E<Vu_4t#CHuU;qweiS==%9uMipJ2>AC
> pxFp
> z*_l7?1^hf0Iv-niio^VU-6_C>20py&eHh=FXEL+J<#~v4i=P`VW4vY1RpTc>crV4F
> zzkThc%h9tcr78@GiL2X)@YSHXV^4QRM!X|PA4=21cdn-<Z)e^(@m=>3h-
> _XknFO*n
> zVoA!II#nhnq|>O2Y+-
> 8UVb&Am5f{?Y8glNN4L{oE9B<$oe(LMHBlcz`=88PWCQrCz
> zT``(>GFg63SmgqhCLY_X<6)nzE(0!Xr4`%|Z*Gu)^1iSw*Qe_|*Y0r^pEzE)W%H
> Ju
> z@iO1H+|gq{Ypw3;MaC@Fv;<|+v`Y4NiS1l8CFj50eh|CkUWlXG7Pviek|9oe^7
> y0T
> zY^C|72B4j@+rYygpWnW%R@>ar$vZ6rsbjq!@Kz{4>bi7lHQG@3x-
> VVrc4GPYcg0Kt
> zW*(>8eW;wW6JNe9W{P&g=)5tOv+jTTDA#1@TJ-
> dkw%{`3^Q$h<dFsiPn+=6@!+mkC
> zrh455VCLF_*)IYE40q%~KCyc&Y@=~zBQ+A|8I1!fM{6W}t&jYao{zkFwm?UD%
> 5~W?
> zhf(#7)Uk4bC~X~(e)*HD>7#CD!vZ+X^Vxmx;zq%3nD7f&EDbT`=5-
> m1lkkMsI~TFN
> za|J7;i;T&IAGpt;;T^M_x&r4X#9V%qEM41)?1&qVKb?PKOElc+dM9a+EygRz!FZ
> &h
> zQm4&ZtMLwfY`%(W0bl8kKF?`F!bsx1lSfh$y@B+7cXScvQH6_NHiH|GragJ2U&
> RtJ
> zzPI~6#DNFqF{9j~14{F-mN+j2FE<-vV-
> TK|Ja6X&7DiwsZg4h7j}<acd)@72+Pauv
> zS=`_Sxt^{R&mE3beX5%Agn$3q>-
> wFCv9%up9Dhh0HF?V6QCb*~dKP`(oMk;|XfiS2
> zu91D`&#H!YjnFqkuXK(yM*30<I=V=j`~Es1`oP36o+x_dyn~_0wT`onny(f0<*&t
> z
> zYWECZkI_Otz$S@j(M4>>pM8-
> 1uEka`*afVu4}lr}z?(kLyA_mvOJUmuwyBSN$!5<y
> z{3t^*Q{sH!XRU>e38ui$7c)!6?C;%DGfnPp*Q!10Nw0fd)?bmW3cTd~?1aers!H
> 1a
> zIn4rS<=Y;W=;ndA?*_d`WIhW=Se#Vjf&sTG+&|sB2!8UA<M#H)r1v|S1In5%d
> BRPq
> zS99;%ac+xy4QRC|O=O%FzO+)QnDgb0B9NH%{91r1PP<vzGk#B?UUqwy=Hk
> ?G2qxu2
> z-
> SlzHxa!m(`*SD3A6xpG0Xe=r%WV_CUM{a>6mg{ff^u%ktm>_lR$>dsW@@!G
> jWI?a
> zsse^hjRyIjH2{&lYXP?iJ|m%A^+7v&1v;a%x6C-
> S`I%Z42PM9eZoItDXY%U0sH}6L
> zx}yb`LA;cKym;w$>R@cN_y?x8NN;oMTzw+=nmAOfxc*C!63)}l^*+(_0eM~|
> QF{~F
> z<fPo%fQ`m6XuCG>%hxlOyy*>4U}|PC&2elW<@4s~RrF}Uv|J3=@!F|LQrUd
> u&?tLB
> z{OZNMc}U#=_|{M5t#Jd<U<;vInONKAU1mW)k7QH_lRy*|^QWb_wY4#mdF
> DGqR5S0k
> z6Rx^mXpu!aG=DFsY}7DBuQ`QzTv+?`V*q~1y^ZsLxthOL+H||=();&xwDC1A;El
> YT
> zflOk7dPbQ*kL=}n&>MqMrq}jtKd9eM&(cSblI+qTAtB;5<30g+p3Cyrjl<n-
> ;@nL+
> zodagi&A$si{bSW!thwjPQ-rxUTGLQlHoR+|O05I!t%LKky-<WsmlltE_H53^RgL-J
> z%dh-
> WwRzQ|ez_D8(R<Sd)*St3Ov9{`y6fJ8ZCJXcQN{JgvWn;9KODC=;9+Av=WCtm
> zd}inhbIr_}{k1(Vfm%W>B8JJ`vUwLN<Tv-Ec1f<e!7T?W7Ij<56s(4sbFbkbqcaK~
> zl>c18cC2ky=RIMadSGC$$o-
> mqI>qb9)sDT02lG_=HDHV6@blfJFh1Z%KO9S>lb}3G
> z{e2?7)Qy+IP9+<dF#1Xc;yTQYyUM!nJ+V?D?EUOu$?`6rg;fkeit2u?*hs31)csn
> @
> z2DO*E+KvxcI!4b6-
> Kl<Lb>;5(fU8_!vN+YGkOWlW__=RPJsPKGWCH55U?VLxmaMCq
> zx-!(!$DK;OdN4FAiq50A^}nC${+_VnmwLwkIr3iXgu2bV#)#MX^N~iI=oeT~q-
> F82
> zjNbP;8Nt;Zx=H)an6CO*hFs>W(A(6pG_&{`nVo>Q3bSj;mmITcdJ`q_-
> L8X$kuQU~
> z?hiv_WYb8CicxPgW5paBBzhL+`jd9jqg;+zjk`U@G0aDOh)WO1^*VNj+qr}(=3
> w`I
> z;p4Y^RHw7!RU#PMxh-
> L>Kyu*@38`n$v?B2C#c;Mw($ub#a~YfX2=l}Hs}>84pj+52
> zy;HQ>Vh?1t#?6Ve*}PF!rRKHiyAJPA&5c@5Xr^R`YD9%@haT5gGITBQFgIFfAF
> !#r
> zi|1ghWsCl_66l9}NFNvYOTTvx3oR+tGMz86dtdZSurc=m#6k%1-
> 74#J4?HzW&n(}t
> z`UGKK`&zZtaQeymkj$Hfo%$vp#C0Q-
> P8^AhT((oRp{r|Ps_>uqXhm(q8Yk{{o=~{#
> z2E5B^<oi$c?YjAk(Mo-9*KtZiU6<6&&8#K-
> f7C#b=8EojUKKIB8|ukj@n4)z62O!|
> zw~P5K7+FvIckl|ma$qxKg9Y7_dM~0e;`{iSxZZN7+Jze({oZLTObAKu;+q;bf+gx%
> z6q0d$vO!X;`&}O$Y6Tb*uAaGiQ^9)E_V|l$_bxr*7PVBX@KC?&G|GQffNNQf
> wwmM0
> z<!Jjs1smYCX>A3*LRSRNcqHr=MHa<fEZM$rG9vEiJVV`a2`e2$-
> x~4`gys4d<Q>cw
> zaIL}mg=bIS95oICDP?N^viPW!Y3%H(M%tC7?3f>l6`~@}2vNUOV^OK{Flm-
> >gA+7P
> zez3P@lA0YV7tA<~uI=5q(R*6YJ~34PXUR)OSs@976kYBh!-
> C_(f*S0!_4XBlVRbh5
> zGQ>@@(<KsrFgN>VaVNT6?>igBp`$E0a?60QA7{UG<3sqC2`ZI2HQ467gZtIetL
> Gr)
> z=kj>D6)df!Ph=QH@tWQLp**gu&I!+c*OUG1=StQP$TufB-
> =6SHQk+{Mqk`UIF6_Ei
> zi-m8WzP$8f>-
> l{dr9BSD#8i*q&1o6#(7hVXW%G9)P7$vnI(5E!C<J+ZD*Uc{;hC{5
> zt)Lj=Lv3h!mDjQBR?*In&;K+R;-
> pcu91%$Mx%(O`$G~a+vW9mLYE>;*RcgrpiQ~e6
> zp5`2vV&H@a_HN16n~Fy<L1u07MKF2^d-
> jQ#?R)Td&z}k+z<B{n8xy@}JrEk<d9Mr3
> zm)ke*9=lt$F`N9Pd*w`OOJHw>FN?H6>%lOK<$%nk1bdnv*1{plUu5hzM=Dh5
> CeV5{
> zO)b`nlc&lV&oP}o_OV293pj+`prqdf?T^yGW|DHFX+O%7&pzczuzps+RKFyZ6t
> V*1
> z67XF?c<#r1de~`U&u^Ey=<gd9@9|gEoXtWzYvw<ziKvab6vBU1qs9ez(Nz-
> N_oR5H
> zg4YR3KO+ZYx#|7vT|F|7zOGhNEfwxEdYxPR0MGwn%f76cJ#+<{&OG-
> lG3}l?uIpV>
> zkBQS&J|oVDLV_Mi-
> %T#iDn2}Z2|<Oj{LB%q1EKc*agK|8zrXwA^R#c{%@r*x=9bs8
> zzAQxG(tDgAG8f@Izl=&d+3apydok}>T>kCaZQ(2C&{x_eJAxG}MG|NDd2Bd5
> 2_r2s
> zD$$8Xn6`XE;n!HZLd2^#-
> L9neMU!{I#w$^VNpH@cJ5$!lJLu|^smt+>w&7d_LVtI*
> zma(F{#SLJ}2;qpOOq8`^8%E&v`;j#sW;vlah5_fLZ?cwFxxzA$SK%UdT9rA=%8n3;
> z?(9-
> +DznDdMT=sY(CG`Q`{?}DiR@t;pD>y*pD)GLka$*QcRCLNH*W!37+(wX3u(_m
> z1m_d(LQK%k=GMXlu~+!^_H%Epk*-
> dx!xc<1Q~R<@;(o`G;@pG4xnlFyriEME^op~Y
> z5=+j{urgy;azA$a&1vbw=KE1qrsH=+nZs^>sQ0-
> 1&2ZVCqo%+@M>h|}aj$6oxoY+W
> z+3r`=41z%(;lEDO3!=(&>?h1+zomaUxQ>Xc^RWoN_25~$l@hL}TM?BR_5<zfC
> TSY_
> zt9fwH2)4?@YH}p1<GreCojdB8sL9KU#F!sPPdOS5e+pXNW&qN0B4<tbON_($
> rkH3y
> zMX?`e>68?-bq*&mj<`u`e%XfqoJf&q-
> t+ldf>%D`HKFoCB@8=mz9(Aaz@B#IlI}})
> z6Nt*mZxGsXC1Uy(A{foE?39<*q63yC(J>VAT)*?Y$dKBco#BSZzIq9VdSj^tol70
> Y
> z5!`%Ca&z3@1t`$7@n8{a`FT3NSR<A=?zd6Ap=GGxZgS>`xozd@TmtS>+1|?w
> DW)n$
> zuZAU_5gTo|U5?D;{*Xa4oc?^tJ6Tk*&h|X@vU|bWKmh54pXlYh&waWNt>=1
> ?!E>!_
> z&9BSlp=lD|AxbV#(k43ffo@Q+C$#5Eo;a=KLBZ(OF_lZNJ~R0^o0Mi^x3n*Y8av
> X4
> zcE8%JsamdA#HhtZl=fD|-
> &%3GS#32HmcMnJ1OMyz#~(g|hDVq3X?j1Gs%M>5-0xg{
> z*>AD>40{7{+zq@V@S(6DCK$)|{z+5K3AX+RZgJ=Y^ik)aj#Wihz`t|4?(JHkhI}6q
> zmiJ`Vt5bcrsQckg0lSNY0p3^7MsT4dr!rl`bx<Q4#{;81H7>p(YQw+seLP$N<msA
> w
> zP6CvF&%JBs)X_$-
> 5g8F#I&P5BO(u3)5Kir$%8M#gZpz7tA3T*cj!J#0M_m^DeE2RT
> z5BUNggrZQ+L}uo%g)QMf(7<o-
> ^_4u^<G1Ze0Nz6)ak(wDBn=#4<2PQa&lO!;YK{XP
> zRbEx;>M|UyRs$dVp}RXf*mC}HplPM)>J4AKo|&xo)KRL$e6celk=K%BPB8Tqh
> QzdA
> zT*9Yil+4<YIS`w!SG&*d+f=RIjT3qMCPQP0iuEBzF{<kH+iWTC23j4}i|L{(m+oKf
> zTSAM|QroR{JshFd`Z;sn@m)mvJI0Ule#QK{6^iChWV>(ReZHT(oqOx!H`nH~LP
> qlQ
> zw+Dt$z-
> JXk>ucjg)XM#=`J%a%Hu)(%jq~|?cM4ar(NW=^Z?ibzPTup<q{$ha|DFQ)
> z;3vFQp3KRnz1RM4?yFL+i2mQWuX<WoMU+eYCNSC~F!;2vzUDJKOLJE)Sy^Fy
> 5iapt
> ze?C`sbU1vdEb{yIDsYiiluPXJBJ1Iu)<3_AbBT)n(TLKWx}}A!nWCd77eoYjC?zV!
> zb@R5E@oC||Z@1p2R6Z@NW#()Nj3D-
> VJWB@)%H$8}`WG(T^K?~t>}uv}d0P07YrOw>
> zprpVhdRo}rjPj|b#3cfJK0N%?;}Q{)ym{*uK#v-i#A)Hj3S6$vZa^1`>RiGaj?OSM
> zdw|$K$E3{pU&j2+6QG^jGgmJsOD^FDFf(hQxt^_ss|}Z^*ezhF`<AxWHm+Qv
> B4WS*
> zN{;r9&X1kU%z?UhE!}O+Egz{U0>jz5x@cKCD>=fP933dr1t?OswRg32<`P!62PS
> pb
> z(%jJk=vd9t!5ZjUOk7O-=07j(E{)@#=SiPG(c>EV$mp%=bAF*88I{pS>JlnV$JHvr
> zIPHtk;o_&h>c2>0tiOL>ULN#+{EySA&ZGhOtFH%p9s_#!EN_}x+rkH`0N(>*r8
> &Y)
> z$-
> avxfq&K>;Wh}+NuECns*Qvs%PP+7lX!rlM%D65c@JF$IprfvhB%J^PfQS9`fk!m
> z{{B%*R10ng48WtwjKz0PcpK50oc9ay;lKls@RO9m0}@Fnt=ysNW?g~&QQ%pv
> PC{|+
> zy`dDDe*7NL_0ov4Lt<v<@ckxGaz>}V<e29W*$p4QmL&{OM@)_k_f%8OL5)7
> HE4-x`
> zBt3E?)~eJfzSG%O3Y9UEFJ~0L<5AjGKW$H5{WY|t;2?QxeR<x%pP$bisMQ?_H
> )zZF
> zM-wPL(3;>evXnf_<)$9-
> YWnWB8SP=!@S3hm;66y*=1KS?zJ%F6`xw<y1EEf<Dv5;h
> z5Y>JKl3<}+l7`@57YAPnz2?++2cTRXPiFMr+i1|dO{a<b4=u!Np9B2k<wg^pv^V
> gI
> zyx(IOO?Go~CU{DKz2Zcf-;2<u{UQ`*E|eFX5c3(X*`DH090n#;Var{|;eRlaB0ydV
> z`ila995jcJdd>5A_18_jSK%bf?vf0v88Z^Q0~>qV_eJ-hRnuiv;DB0xa2SiMdSU4_
> zC<{B6vcGm-V+oi6rYyn)1FxdzoI0{-@i+4*oZNP@4Q9-
> ZmN0zer2aaqKgWShBcrck
> zU<R^nJ5rG`I*NltE0q__$j9cs!(m6co$-Bf<i+VfNPR%!ZT*kTjf1Or7$8#05RxO?
> zZ0-xBGs?{270AF?E!pu~HMn($Fk+3tAx(F)qkga9?*$!g%J>wPt&U$rq@d-
> ppyxWl
> zG)9B|GiH1xM9fXf60uw!XrnC0-
> )plx)mJ8RYq1((*W#dBn7%TZ**vqboua_EzR7N#
> zP+SY)Av?qXzc467%kXdJZFn)!@4J1pi6igqUgE0#%VZ8y(sIJ@>c>Fy`d7#m2Jw!
> |
> zRXu^k&%}KkvecP#K0KaJF$n}>_jyX(kRaE?i5n@{u6DmvdAsD3Zbw0`OD}*$CF
> ~q*
> zm>v+8^T(+7(&yf2@qzBNT*h;j7feBbB0T4RC<-
> R*?C;lH87ay5K0N9uvshjC5e_G*
> zzj&geU<&_8zu3IKy2e||Q!q`~S%X&4(iB#E{7nedtY~YBF6=X2ktE0pImW?mwr
> BCn
> zDMVX5lQzK*L8RGvv~f3^5tM4)B%=S)&TkSqhhAX(iW=F#?bu>tUg8<7JUHBG
> H4~mg
> zRlm@#3y*z1q!)C@-5FpSpe$N73b-
> jV292~yQaS>0$y5bXrV6s)8#<e&0qoJG8DMEn
> zfj|*SMoK}_fNCg-
> g1!bO{Z}WGW)2xod59wCDAhUEw%{oabW2H`N|aWOR5PZ-=jDSb
> zeFsptHWcyupP_IJL>~b+drZ9eM;k8kx6ED9D-
> =RxI}qpXgE*D{`yv02(EWe6leT2z
> z!l6Rb6bC>P=l@KOIq6nn?Kgw%UvRy}R^QNoy7`DCm=d#!?+-f)nnaXf``0-
> ZExJo^
> zSk&wz^VRz!*N#$wmL5*{7*0G$S~A!sV)lHyaT{BDgj5*O6%T0rl-
> ixL+9>If(gDJb
> ztMqt#RY+5sZ;r*(4)Qc8ApE|!CMqE(N-
> kjzyP*FwZ3>EsLCreLa)cNcyM>h0&Gmft
> z6-
> iLWLqjxIV>D6CBWScz`HM~(ZX{b;{eqJ9aZrFSMGo4M5#0@vw(k@DI~_PV((V
> pH
> z93>L$R0v4Pr`wQyv12Ttr<#A%yVooq>t}~s`sK;y;ApVrbZbCOIzG(KeSZ^ya<B~
> 9
> z+jPK-)l249v2Wn8O${^$4R)-
> cr}AU_3~3tMHzMIsuB7+84hwFT#mBoL7>G9_si8j+
> z6TgW&*2Np%EtOw>+xaXAw8upe((R>gB1C*{$ypJ3;<~V-
> V@pn5U1@r3V6R&hwE^ik
> zXqbs2(<Rm@0#dHYNAF>s$9|D0ujJ5o_ICxyWG)B6Sojf;yCP*LER86VV7=?;>x
> !Cf
> z4U%hgDJ=C!e8rNKtRkMqWM$|CC{=vr0FZtkcLBbN7B>|a6Iw(^1I!Rn2uE=wX
> =I%X
> zneHYFWiQ_(i-
> Q{dTY)_Vu)MQD@RJa(<s&e>fh@aG9hi*%)r}?tgwg*&SU*wbOatna
> zt0f7sDn{Gzi-g@E7}1FtKKArngYY1afab#~dvB!FmIRC9>+bTB-
> 26;rO{uo4&V1ws
> zwd4hXq^}+_!af>~8AFvO<?;w@IMR+b{pwE72+gcRhL|?-
> AOi=eLqad4xRH*6mfrr+
> zpEl`W54BbfRQADth=f2+bI3Ky$gMk_L!{mJrv|0+QPhM*H#iQ^SPib)Nk^;wx1
> 6g6
> z!r*gQ?}$kE5Nd+Uj1&lT@Zn!I!vBGt6=bcg3Ih4Q_0a}20p9Nbo0UKXYFw$L;Z;
> m3
> zN+!~P8m+7Tr{C9Z*qs6eXg(Ky_;2;s|01=e>O=Ug{r&xkJQwLCx)3ElGs2FiY|ON
> 5
> zhTLzBI+A(LyuttYj-
> !`XZqU!IW$izdW#<X@@Rk^pKw;Y{<d<=LA!@cy(Ust78TDJc
> zmP+C_yoP;zhEy|eBb6uDSKD=S{?N!)j~@mg9#q^LZOyZT|FUm|Q5%hj{8rNT
> Dn7x;
> zAnf{cStMFx0@6)DPv<9|RQ;{fF{1B^J!Y|}!jYgnGBXI28VQwpCJ{_1Al9T>Ejq7#
> zZ26P83j<kx0EmQeuIv#Z@3op%*NW&L|0cYpoV&d#y80?PW~hQGI{BPG{E*}
> nqmAdV
> zuDq${kd4&^S34-*csv9Ch$-
> 9)%?g+aSvBX8k{IB}J1(r%0Z{WH`~bYRAMJou{!LoS
> zRz4APLR%i%xbgb8Sply|TkmQ)mHP&vm-jy_=l-
> 63!iqNu3Ep76#B=c1tos#7azvKx
> zlgKXY2222x{)eTChZ(juz>GF+x-A7bPwW0BU+M=S-
> ;eYGO#sqAR2csgtM<Pr760Be
> z{=ZKCGhFz8Jo*0xPl~JoHHRNU#}|JHww$`Vl}qIEg~R3Xdz4+dy>uX2I?>IH>a0Y
> X
> zW%Vxr*8PhX1;6mfmX2et4sGV@Y%#(W2LagVv;Bc6<JU4m^dWBHjtIx9hSl*{
> PWxXj
> zGV0HGL`Ed1INt#@Sz|Ixiricd1`MC?!4t3zYs$bPA_}_qxZQJiCozldF`zVxtVbw%
> zruw4`zOnb*We!IuhqJo1P^{{~8yo&z{*WiYc3&D1@r;42%&OR6{`AMHz(JT`PO
> S8|
> zGCctj(Q$m3uI8*W^yM`fS$8Yv4^Z#Ex!PPMmKjq3LcMkOkYlkQ5nB>ztXLXJM
> #2al
> zmCs#+B9$-
> <iyeB)stD}%6cHlNUjM@emvrVu4AlD(ITx@3{>gHRN=c2XazrX<8x_bi
> zd|PG*x^@!wCd$p|S2no}meYn@>VIjiT3+7mv3Yhy<ZcVDA-
> ?X?EutN@{kTQHBO;8;
> z*dy3^xD8oF?PhUrzbXpO{UHg5#T5XMqfn%yA-
> %Z0iSH~vrUIAUP`<@Zak_?*^Lv{|
> z<YGM%SYEwKlRD=^UwWqoJFj%0%|dFsPkMFNJsF--
> W5Nom{bqj`W~k?QP_}a0ILc<*
> zU@~``hkj$hWy2AJsJ-
> _9TaK>+xB3bUd9)oUQ;(V^lGucQ0g6_*97o*W+!_T<GL5c|
> zji}f_9d!=<u(|FB*`zZS^f+uvo0zCN>o-Ai<hP}#q%0iPQqzlh7%@JF)yt<)-s6w!
> z3jVI`UH35>@3&8J!pIAR9URtoVENJvnt7~W_*q+qV-
> p|4h5W>BBY=bI@YQ2vEJwZ5
> zE-
> Qiv0oQNQRQuXi+9?rS_d+Y#D^{@X4sbix_i@)b#|$NkR*HP{*2WGgyi7o<r};v=
> zs}BMR9_Z{}el86kl87|y`YCWo3|p1ta`V8oMj^KCO(=jsA$g|p6QEj$Iw_FnE9z!>
> zP56PIJ8?s>UnN{-
> &Oe=M=yp@c%REWPG>yrO%MDeAPuVo$MGZsK4wM~kd$_ZNjl2<7
> zhHt?_V5)r4av^x8E{7B;pR(O=PWwYpG?Xep&+{oMZ=tY(z6<_D&mbN~{ML8
> >;CVx@
> zz=o;9<qw?0d!cTd$dT=D3vn3>sXwK(i3kr)QhahVF6C=VrX!4=l(U?HFF(>Ka2G9
> a
> z2Y+3^1^pF>=N#X&^uuqb>aE=L<|Qj$hLal6jkk=Z?Ki(IVC}6#w2l4M!{GvC4f>i
> |
> zxk$Ka-
> Qm*PbUg9%&m!u=x{uM4Z`H0ri)rI?Rj%1}FKsd(EWO5il9K4Y+VRwnLXgd?
> zUp97B3Kn9CG;eN@8!NEt{qxl#%qmW5ZUny}U9R{!EQHbHJ2Jf1?2vI&*u;jb%
> Drw=
> zL(hCtZM}ma{n~VJ)n?#jfx=@W$Yl2O;{rRZb&-H1zv3L;R(0Q|FQpN#-
> O6C`w1ywl
> zag*zRcjK5hb@^l|{UC_|Ew24?AXK0dH|{koDGO^x2-
> 3i^{pwNBJDZ&cCjf`lWD)IH
> zfQCrRXg7bOv2Ktc<~bgG)bppJ%QE$MBeB0{gA_#(_>KhZ9J;7$kC0a@FCMhr-
> 2DbI
> zwWDXivY7CakAnPu7t;8Z_unpzF|Az7@NS$``d--
> DAn#~UNDG?0aOeXIOLpci=X{>c
> za!!tfV~B>1tqnW=0EW_>@ec%CWMRqE0Wifmd7OEz0J-
> 7`z2Pwq4eYNivTaWCM|f7K
> z@Yt3y0D?a3(*gjtcHkPw|6mqP!~CA$vi}Qn&IfYZp?d-
> >K%N+_AJYK^=s7hg1WCV$
> z_0}XISTR3U+)mHOs{zV#{2D+oy9=f8-
> +11j<W|~km0Qb)p1bE;NWb^m35{Eaj(xHs
> z>41wb@z9mm<R<$^Fltb`2*`?n%eS67jB+$SZf)S431XzU?UQfDp2CCrfjTdii07$
> 5
> zl{}XflkS+DFgOCzS$PFGJQ09YfV8TZ4<D}!gYL|lyaqb=YHI)iza+~I%yEXo+uxOw
> zQl5c89(VtDBMSdhh_J28cW9)V!vRC{y^59ZnWI|?U}-40ylH30<F>{jG;b=9y-
> (PD
> z5eS4Vq<v75vR006>z^t1XblB@mUR7ylxGBLR?H`&MEe-
> v;Q9QnQu4L9T@Z<08T}kI
> z(ln)YGbVhRnxCB9jq{FJSHSEpIsyv<hCcS#wMS1ZT0jZNF9VQ2aC-_h|5t);7lN99
> zbv<zoFm6|2IJy);3?%8yhU2nT-
> B#JsQozg{S~Lr?I6n_reN^u%FcUM^sk~MF+!IJO
> zL+H<)>IDKWLle%l;UkcwGK*1Z6Gu70{b(XaYzg6!)4PRssqY6~z)@T`gb2KNloo
> Uc
> zyB!1d?3h^m!rNc?wZDY-Hk$i8$~Xh|Ik#6wj|K=q4SlOI^6%8pcFQ9Jai-nK(cD)g
> zY@M+sV9cA@g&BPEqJVf~M%M)<U?3m-
> i?LV4{l=Pi6GCE$&2L<bQsFTMsem6k{1-{m
> zGBcjs&ggfyYZ7}DNp(BMqbNN1>tN_8=A+)=#7ys%K0r!9ei%r>lqk^oR8&=eA
> v)w`
> z7JCkCY<(#&CWRc<fa-2&D;XVL@U%(tORPHKL|_I5tSk!-
> t;N+1K2Xj4rQ!f7tCf7_
> z#Z4BfMY(F^#yoL!V<Qs~<!>@W{J!?D0-
> +S?>G!d(>jvBE+RAu;&Q7({&tRuWmZ~Vk
> zY*_NJp3K4fD}W^KO_O3Mm5h0!FhSiYJT-!iJoa<Vm?}BYE@j;*-
> _4qUq+=$#3V=Yn
> zB0E8Mmk=61#UIl)tvcT@7AHT!h>LY^2=Z#hDtFZnx!Qh7UU$^Q(ttqFO1>+A#
> GNzv
> zl<huR(H3RB?_?cLXsl7&x9045f7`oov{!bqcIB#gg+YnTt_k3Mw8?QFa#~FAYtfb
> O
> z)jC=UKDo-hQm0%jIC5u+HETlh4Y&q(QnDj!-
> T2hdwZ)39$VDHf<vL}R)?_#yDP=Uu
> zzq$hmROufh_w`|yUMj${H#SvyN?Q^gE@>>t`o)^5nTWitE@j2oEPt@|PpOb
> 1B~=LW
> zqL5XY(D?$HGtBHloE=?p#-
> @<^Q4<p|z!va<m9_BL67&cVkoaTv!3&NT(aPQ3q)!hV
> z*~Qm|1Ut*0qfnOt({0)^pOWV6M@oWiFAObhPcb+k9uwWny>b?A`mo0t7u
> wNqtXOnU
> z$k2n<_*YT^#Zg!^d!Er2f>-D0Y#%JKV-1iqs#-vAFF=sxZ=k`jKxCHSC-x=3p`CRG
> zpRNY0nG+!JH};bZi!)3WiO(*>@?N+~3+Sm9HiaP=x6#`%Cf2xV7O91aS-
> |2ZdnCY1
> zk({7b)SnHGlI$VN4GG3u3+Owuv&+l3%8?%KIu*p4b>JP;$_}8(z_AxVz{tc5#cx
> #w
> zTfQ_=^JuXS6B5RsQ`K1^NOstkF{D&`O7nNMG#Jb|cO)m<KRFr>olHtXR8JFS0E
> YGd
> zTzfS;J#_^$J3X?&n5bF9?%p{zE>D?2Mf)K=_Z(<94=N#_iscGq;y3JUEJ^G_eLCi
> &
> z3$D2|7f=o9%oFjfzB)R;2xZK4tcf)~o{6sF&Qzdr7ivl(Bw?guIC5d>N=K)}{#bdP
> zoPlqiM+q==O}A_0@>FC`6XT%sic@59&0N1jh@bt+%GHH;W1u@bhm>zyxtI
> UE;2+C4
> z-%f;JEm{0`ddM=8GHvcYQ=9Y*f=9zEj^X+#c*AFIg>H0-
> =?JJAM;8Rd$Zqxr^(F5S
> zT^hGT*Bx1XG3uk<o{`G{Qkh2fr~UBg%<{t*p)fU7m;W3onHTkmjW=3qXML$
> DnG$tk
> zjm2EXICW)=oR4uWTW*T77j}I`-J*ky*Yue!r}^ht6GLRb>f7*(ywQaXXH09vlxR5}
> z*sp(p-P&-
> PX)VQ~++}6kw!hIh`tjdN*=~n2myHMjA^2_zZ!PLxHC8Hcb~MN%hc<0p
> zgtn64<V1`80;125?<k;mdTx4f0im}o=ULN<$*BhwtL+T{?Sd5Jf5=?}O_JrzfAc&g
> z5^jy_kAWWvsIQ^|!h*7);tw{~u3&&r3czoFU6Q&q&rMK|9Ay+n&*~7qOEn&
> (ypi<I
> zuB?N6q7QUGWtke}$^W}}X9f!}`XAl>*YS3Jr31jxIliI_1j%LR&}RVCyym}hpYoqF
> z5WjdTGxh-
> pnR~vY1i;)Yd4OQp+C_@iTy|0cf?HFf6rGEidLMn#?HkJ??s1|QD1h5T
> z1t7BZUbhUWF?#<p#Zq4e7@<}rOtIxcK#TwWvBeA@Gw5mSIK%%&!l0A^$T
> &LP0vyL!
> z0U*B387nA24+NcsV^NRevwnwc1h1uSK{eWn@br%!t?ga-9rT%-
> *2sEHlN*bg-Gf$&
> zI!Ba1#v5vjIKB`uQsADCvY&r94u@8`mDL5I_cB@)7UOWXU5MLzPPg(MXWDt
> bxYU_U
> z<H&(6K$_#_*ju<R&E46+-
> PoT#CPJ}U#|qfdZB`U_l0|Oz!1~pV?7(B_GHSpxcf#)*
> z@Kz<l)f-&(ToFDR)-|~Y4IXkTzW7~%@QAL^bs!PhBwSeRVJGd+<$31-
> Fw{#S5G-wO
> zTIJQGr@D5xk+ntJC+IjYZxdIkq~d5HyMlTZU_SpUqtROHoi5-
> V$P*^}pHBe6%*@KI
> z@n|XYL8>Hg!R7b)^bPVg`B8{j?6&N#1P*<X)wjKdWM&}&*`*l;j7`Ec+T*b@0T
> ~qi
> zG|PltUw{nm6(OS?(A%xBWq+7YSMv6V&F#*CCc&-
> C6W+1je%4AWh_rRL>G_4pnDkk|
> zyWMU^tfB{=BY3}jZz->6QN--
> xe1J48I~uUGr7wyT7h?nfv4;fLZ3%7JO|YC3VRf^<
> zX+oVWDaQf=eVIgipzLC?DW!UXYR+y$t;5Gr427ucc5R!`wUAfmE@EzNyeb_fT
> ^9BB
> z^#R}}+0Zi<2s-
> 8@JN_7MDttAPhLmb%1%Y%&&72pMMUux1i90QODgtLVR<9{mlzKz$
> z2?%+a8#7qy3Cm4)dNl#cRxJ{6@RQF2uU7R$-
> AZ_8wNoY8dfPcjez{1)P%4q#x%TXB
> zNa4Y^_%1v)qpo&EeBT`&3B>V-
> nUM7<gTYl@{*uE!0M=m&)|}I5FyuU)Oq%*^+%uvl
> zC{JdE$EJ|GJ-79DlVJ29kZT8G)w<lby60dA*Iz@!{+=f41lBUdt*^w4_yHsJ7>!^+
> z(GWbQj59Ue>4&PTp&#<)F;qaB&;`H$92PSd`2>GVWfprb)vj=*%-
> Tshr`Lvrb3eNw
> zU-;Zn4EDy;t8$$Rh$O&A`c9|U_O_cXQ+8=h-
> z>t>7&F_Ccx@N%r19~KcvwN{bK8rd
> z%K7B|xEkfF^yFg<x97}P`+lx9Q6-b@DTL-
> HK(NkyaOosvg%V#wsm#`IZdDU8X?7^<
> z9iw?6Hg*d?^5mL&igV)KKk&=?DN_o5*?8fVJiQE{|My$Z@ijgBUU|$PYc{p{Jl^
> E1
> z>EN$}yNJbG;frQ?@diBStck<nNP!Tn*~@E}(!d9XoB^=@V{*{ic?UNwz8x0y6T
> c#F
> z9UaNH6%XQgHnaqB*jF9|!qBSe#ELIwemOJzEqR0k1Y}sLk@b@NV-
> G7~_KWeh&I_p;
> zE5M7U5(d2_vQyERj(|XNg4~=d%IP6)q2`SF`pe$%#---jZ2+aWNLOwd>mO9)5-
> h!*
> zU5+^%)v9UAVl*Qn7_RE2OG@&Ky<m*dw*gcihy(o<QJ6ry>9lQf_c?%#Fs@
> G1g5>%a
> zr8}430-
> >sj%s|%F$z2>yBeCWt`#_r%#ba5MVjuHFz6rF_OR=Tbh$q{H(Jfje9L9hW
> zzz(&TpABwqaj3#|1xP~kjGn-
> jHXrL1Kq4D4o6o1mFWio|{Ds}x%Z`HO!V3r#)R+pF
> zn~fix!stfua}KObY9jNf<tV|gBF%rBXN}@>7CQo(<Pn>Ai_A$5Nm2H#7|FTqqn
> XA9
> zJPj0^2tqZi;+EuIy*vgApl|nN^gpoPTu1?9mIlPoZ6^*Vpy2QgFbaTY2T(;_MRDk
> 4
> zUjaq|#5wR)-IH(u$S4l2HoXL9C6lNIpxW1T4nN2p6|ty$9+-z+!0JR8_ZdAt>gYR)
> zdq`eod4LC$Wa@)>C`W4ppt1WA8aHeyVS0%NE}c$K(npcd+4R_lhCqM~q)uJc
> JUn-E
> zK9!<@lm1Et%d|;`0LjgJ&txb$i&S%f9}s%LTe8M;B4(BVS7~JH1N7my0~ckR?vs
> VR
> zDwN)R&<X`rMnZ5Qe;^0i?vUbO`;48ESSWH~pNXITrO)VKjLY^nloui=Yw(4V3x
> *UZ
> ztz?E23UYW-
> AUh6zqaGJMRV5tW#I?9ma>|WeZV}MMlei0xDC*h%{)GYeY^pEeEz=<^
> z!+~^^+{|zlowNEfncaO=qrZSqsJr;bB=B5A15=$%3y69+?M^YN_cw#6t1>&`lB0
> d+
> zp0ktl$sT}+{MiMBoPA|1-
> V1+Tf2;p9a5;sz%JQ3VznORz&k(<Q$ql+sWUnyrVUtn^
> zXZ1Ho-
> sAMvFTfn(TMCmE5+d~YObP?XBmc~tQKnotMeLR}rlw?emW+Vm!4p2<6#4O
> p
> zWMBvUIXyd-
> Ob`E@zi8>)@<x=(u^v5;{+ohxFX%&*mXCu|x_M8U;(V(=y#WLmXrBzQ
> zr~VswyzhIW9FXa+p>qx+?w>f6hW{$J|3CG_f2Xkit1L)CxRFbh5#W>$nS#eV{u
> &-2
> z{y?12-
> XL(>hjN_Yk5!*uCivDH2@PQ=gi2G+Bs|4Qw@PBMSV^LPHMbo8uSL6vA)e?G
> zp~y18t8KD>HB*vHFrej@fa+TWAaTCF5WJZmNQs=d7X%ssc%T9PX=>5!cc*);l
> Dq`;
> z7F;u{|J(VV6bGwkeuvU$4bU<9vw__=i}Mf31=u!&1@z0mO&j6GhT@hN7pn6
> qgz8nd
> zN%F2GYh+2&xIP98vRY1URa5rEQzS4LfMtNRA-YU&R@E{@6Df-
> PEgf{u03Tr59+f0V
> zLaOiR<sy?w$-n0<IWzIF($ajHMX08(0XF`7-%&)?6A%u^WvzN0s&yI2;HSStLY;l8
> zR;0FyHp1UJPkQ=r@BMQI0CT?n>JDj|N<u8E{Vi+i>#{Yi+9Si6!TxYeb?@)3rcz)V
> zO6CY}0mAZxC*W%-
> 6<gup@#e9;!)56PCI$PDZg7EYTo_K_@^*ff(PJ53K>EV!W&=mr
> zi3{#qsac055B@l3(pXn81YJ&M1&7}@PHuiF={SAmkNA^GQ-
> }mcnXnU>XaOKp5NIqT
> zW3-p&Qz>C*7rzV}WB+|B#iMF4FAupBD3-
> ikG0?l#|GHaBM$#HESSy#w4qDCqLgf0C
> zQfeU1vy&MJC;;6k0&qGlMPo>tJ#$Ffp$a@BGYX$tmL=~iT+&?MO6kpl@7b3=
> M(G3F
> zW64OC98)Bcn3v1X3IJ4_?!Al>KX-DxOg+3jYz{tglJ65Gns$fUu!~(?3UFnYn*_UX
> zF8E<~_l)v<!^f}@ggw7OWo?mzJR4oQTow$7v}LSD<#+EG>=ghq;QpD;(Sf1-
> `lSlD
> z1v(^B->_ua)m-!~D?+7GWA_F?{Y}0q;O%6$u2mn<;yh(fe-
> m({<X@L`+m82>#wz^W
> z32CEwG99SWw8|VpHOE8Jcq&-
> K88JL%`cyf6CuDjVx!?<q<&2T~{@GX7@am19&Q)hP
> z8{yB^Rw>ERVT2UeYoKj^L%6JK!XGI#USYXQTy-
> Unel*%BA=W6cC(cM2r9~Tr`M9Yb
> zG-
> >do;;A`bM>+OeePXQ=s6eL7e;DEH@Hx~&OS++FO4Cy3UX5VpV$?#Y)KwtCb
> |wYL
> zU+b$U+?*mq%+KVGvX7m(a)x}eR6!6KV-
> =ecyH|POWIn^S%va40K=@}{dnS_<c@6Nh
> z^Q%NUAegJeI8Y6yWL=d=I5IOZO7_4-eO&B%ZztW0f()>qZz_=bR#-
> &J%C#bv=_Q<J
> zfzybS2cxxjXr4Fj;tu8~uXK|Xth`<zmi2cxde=>3f=4}97h)F~zv5f`9XEh2(D>49
> z*SIoAiahA=>J+I`SJ&U$1z8~@1VWFK(XJ?)+8u#I6SAc4!{OxhFfpqTt`iQNFVmv
> t
> z^O7)13;t^Md2Dy1;c?S!1y47*;#7S*4Tjh~yDtfx^8nQhqF=w+WGtUGUsT^(3-
> %rG
> zknL!gRdpj*UxbbiJBR#c?;cXec)!2Xm3uPQJshmM&mBev(kRJXr1*{KH-
> $2kE#+>x
> zJ>h9n>7q)@BWd|=+o<w@BiNGQ5x94&EqyD{FvT{n4Myjm%rc8z_q(Sn%tE
> UC=vdW7
> zHex<sfaxTk0X0sHeT3&Z3y(i?sw+2%%fR708eM8;lUIcQkgxaqg27b5&?EBCFRr
> nc
> zO<nk!#pF*qu;~U5n9`T{FL~Ugm>y_rZcddGM7Ji8yi{v)aZ=7Gz$c8F<b8s2&;x$
> c
> zp}UP&8@ZZ4Nw2p&Ln}0V5LZt@4=-o11JzYdZtdj@WqPI!;Z%-
> NCx^^1G}BQ$3+3*N
> zC<^MbTX(ecGpdw=>8N_8k6@%^$WIc|pxb$0c?0kYRxR?#wqm`CQi>`G_y}|
> -UFiht
> zOb24G8;&%7Zu|umvMX5-
> >2%()kxiDwI=i%}oAs~PN)Gj2^3QdAKVp&rP~9x&LKq6&
> zsgZXLrq}jvN0@%;+%SqajupzKxr7t~-jqH>39QlS?Kl8O_Kw#K-
> 7NXbKs<gtA#w#R
> znEop3rp&Qw3CA-
> 3Urxi@o5HHdYHw?LF`ppnzhQ>5ms7m^<1@X5G^7d+%=)jT*Yhbq
> zE)@sooxmCv?TfO?0~QSgU*sBk=k1e~o^*49oS=B9Y#AK<WYAxKAmox^-
> g$dhmYgc`
> z!sP!fL@9Tl^RK=wYf2qk-
> nng*6&6nyQo#Nl8O+FdsF54R2uL44BXsY8CQN9)qPpN~
> zHwBymkm(L-
> +2m$yxy8h)Y16BSha?0fS(0|Z;ZTJ*g%UAxu^$h$7Z8hBsmebL%)5U>
> zIJS6KSH_|;!d@0&^^zFy{mY9AnuqY?@y)7CAs-
> 2rf}YG^0N*?uKQxUHznS<8{&;&m
> zK{DV)?-
> l=m>n$E0y^sS8QdtB<Z@12*u&HGbqemNLlKwYiWqdIuD(S@i4M(P@#*NUw
> z*|=!02Mq5o-
> Pur1Q@OOAc49mA?^gW|2~&3Q@GMAWETGdt78Kxj&_DwmqdH0iYBr7l
> zK3EAbFdJRS)TVAS+3(d~Hn7v?16G>^OF@sMdHreRIIA+<kHnrdQgmQlHUeM
> kt$hDp
> ziZJ-
> _x6vP;iLXB0myee0X!>okz1snko$+OIbP8hbNGOwI?qK;3pq>IMh;CIz;D3c^
> zHrCULrn!I5!@B-D08ajiT#O2bq;Vg)dkXviva|dQl|o01_<V&FcBOIsooe~NEh;bs
> zbOf8DiIfnf*tu3<Odg7NLt)5&eMA$_Ka|*woBri_i*3>Q{%qiS&b<%GpZ_q$IpI
> eA
> zF`(opFN=PJ>;AobXPO+}RJ$EuKl^Gi9~Ww;0|1f3Z%hg7s{REXrIjTuTuHHi`O-G2
> z!tI}{3upcbqiwAY82THX+;Ao7B4~C2jPdTDYbS2>QFwuDobwlRTx2;=9?yRRnXG
> 1S
> z0J8ka6NLiX@tRWOMwq(|&5^>t5effDMd!;W;Cj+^&a#{|byDpk&O?zkpst$3Y
> kLPx
> z{|%njS6Tm-
> wSw?H*Cuhm4gD9#<xdB#Aj`<SaRa}p1MH?oFyO3=N~@s$1*{T$=`?nU
> z3o%#c{=`(k=`Vs1;A$bPH~)m+>@zH(gnEU)a23T@a{3dLx)DnklKvqX048qt(0;U
> *
> z#oAZ;TXezB>c-^kyOSFP`va`r{O`@hGo(-68T<>iZ^5yD2|o~9g8*fJ&lyej`xkHL
> zz*RsRcLvxhBLE5nVhbn!T2vN1`7cU=&2jH3@c;e4czLyQSDPBUK>a5+XCds+9#
> Zh1
> zPY73cNLtl+R|`?>!0<=F+c{MW95ydFJ{GNsQa13cb2xN^5MbxdS!V!{)k`ivAv_
> wH
> z>W6h8{+9AO6UYE?2A_8kI2;KGtZitc_ltiB)Ifxfz*J0FITTP6|0;fm4nw&T;Sp`?
> zs{Iq|zd7L+wDE0iPU_CyKc(=)KX`YnMV^x`#G@it{4buwOSNq*T~@I)Phi<QfZ
> >&Y
> zFC@SoL6VOw2XN$e7C3V2JBpUyb7ghG|Fu44_ug9>5IyRCWBO#k&s>vZqm$
> f@p||r`
> z%fbu>CLc0^?>CVB&wJN6wrbA14)B;=Oysm<0f}xbjrLiUKGl7A1gDrGM_|giDp
> 4bA
> zVN@B`iEWw^sktVy^UxR&*V@s2b1UPcR?)|S%rjm(x7+p_Byy*uqTDYFtB7iV
> X-|fi
> z74dlis}pc@_dY2JxK2TmBN=*G>_u#r0M5#+CuB&`Za?|}i)~H5f&g&HggF4bUo
> =%5
> zf1-!{(Anl`0C^JIZsgzUp<l;AZNg&?_~C0(BO8uhQ^2{u5e3rnlV;SYv^&p-3NUjj
> zjc3L?3i+5bfw);`eua{WpjbG{Z+E`FZrOmEPcy`oE`9zRL#BZwiMV=A3(!-LmM?sl
> zgrNrpuW=*N`qj0I8HhzlGXMi7VTK)vw2{0`bX4}JWJ%!E%Bs`!{K=*_Fg)cv4(vic
> zaP-
> hEweu?Qn#dp4mbLli11L>hC$eE<zwPHYhp@g@J@nI7b4`J=VJtL<HKa}(rm9|V
> znGyqo<Rbj)-OT#YA7#(<0+%(cnwF-
> 9mI5Aan7ZAVwnPkGG#zf`bV9oTZl6Bo1di6o
> zN;8C77vtipirss!g28+ZQM#iyhi%<C2R~(CQJcTDD!(&lde8v1p!k9lR#Km(5P3*{
> z!<|H-X|eqqPLh6Kv`Mo^fQiO-
> Q}W1DH;&9s?}AnhmV4i1NeKVJR6+5s?MH*}$K92{
> zi*yc)exxPXn(O^6B8p1P1RZZZeNcr-
> A$v*mdY5K)?^U5<EDy)Zv}_*Xvr}2v(tTud
> z5qDdz{*U^zUzvD31Y<TCU>X5^1M5vDoEw}DzLRmwH9%?u<QaIM1WS@ZZX
> 3-j#K67Y
> zeu<SlM~|_4#=1(Z8~nDtORl44>%2|QR|e1C0%DH~FMf6R6QM-
> $!WcldP7)>KB<rrr
> zi#5^pv{Y+h&8O%sQE;Ui%UgAar*nN|MaYAjLPJEoTEj)uDEeqkhLGI$f|XE?K>
> TrX
> zGt+HD2pgeFz9NSrm3pE1@PX=J$5~T6=Px^UBlLRzb6JiC_+SSlT98$<o+cROiyic
> m
> zOS}XDk|2|?U;@%z@uT3Zavkj`oBQ}gdxJbVv(b)Sx`}oAUvE>aJGL01)i2RuNYx
> v~
> zvwNf4oS~G|38pNeyVpoUkbypG4mj{l#ge5G2R4u$GaGnk+hk=5+|CI@Rr9A
> 4A>Wpk
> zjvalxMgBAezd?!GI*Qj4Zg>>I1iPFArI-5+T9co6Jy89+b+S~3z9u-Uv$A})TdK8z
> z-
> NgWzNxNY~wk2MAf#G2)rBY1pyH2rEz`nOPSf+D;cU5O}dP$D$ZW3#j_*a3FqT
> rcG
> zy(>+0SuFY@iB6M8DCz>Zo<Yc$cG*(Al|*OH@c~#g(B+x<Zac<r-
> Tso5$JX4s*3u^J
> z)MY5KM&N$NhJj#4mynxIR-
> <=59!=B(AgGdaXG^(Pa(IjRo2GJnMdvI@5(rG0<*aa1
> zVy92<7Z57X=>Qi?4D{zHyaiQ;8kI7*eZ^Mzdk{R`?{0=uf{JTr|Ik`@PCFPGq{<%N
> z{;(gLH~6M`^Z#S-tHbJQnmh>*2*Dx2odChzHH1KdJHg%E-
> 7N%ncXxLW!GgOxT-^1d
> zd&rx2cV_4Nc4l^V|JuFJ$#cm$_f&URSG82tuPcyN7VGzFl1=h)OX~G=U<^b@
> Pk;OU
> z7wzBhky#FKJU=DE?>#*(#nTyu|L;&1B7gRkh9;@u?n}T41x&aRN1zZj%HO|2=
> x@hv
> zl>JQ;E6S7ECii!74DX%{Hbnt&z;mS^hx%gwdN1Z~Q%#Nj_j~^opYmU_VI4f%s
> BVEs
> z5x}V748Fd;mP6`uk>q>!g?Y6qV=IXrJlt+m!qU(`JzmZZJlS!jifWY)(LDhm3huU@
> zR=!Vv**z-QP1j9;taNT3zh2C=yLE2aVCP-
> t0S6dB4*Z3?xdKswua#ldp3YvDj@0K|
> z?gPf>g`11|JEFf>-?4n~4lsk}10g1S?K}rRhW`L}Mk~>1fzI7Or6HWL7@ccTK3hHE
> zoU1wq3OHiG|Gc=Yf918cwM7(;&%9hTmO0-
> 60^&=;0Hcw^S1!lGXMh4QR=Ft1Ez2Kb
> z;V;3>)Nm-A87$-
> v%PQ0(8<r#uwUapw6IjJOhXE`X8N_(*=fi6^<`a+pwQTazs8v&j
> zJl;|gYs+p>S>K#_N{^=Hu0P;JNCs?7=3<<mIVX1#vR9pp?>Lr=_D+hoR&EdJFP
> ^Sq
> zUb@_BIN<}rA`q`Ki7#QtbMU52vq;q-
> U&sR1xV513UX|N3AHT$WWX*Mm;Ji$6sOZ$$
> zA;K1ZY-
> tdZ_Ag}8j_lzBjg0keE)Ig~ZE^bW(OlRBm+Hntdu^|?ONZ8DYq3Ig++D_&
> zro(4I#71-d3C6GVEF?Tx#p?Vx#$kwOX83rXY}H+j-
> n3$BcqkQHG+rW{l@6b_`~f^Y
> zB;p$^))0?g7FWYrZ&u!`LRq>ZIPZ+yyDAmONp)8smeM=bbvj>Ow4QK1i^C%i?
> ^E3Z
> z=;mg7tz?+Y``HQ@I)#3I+{J!=xVGM_(e~jF)99w0oMvve`?P(*^`TN}1Z)YO$0k#)
> zdpCyrPgU&Cr0AxU)7H;5hsw||&KDF^+U$<+N9xB-
> Tb`}~PEc{j7!0O)`{zbR{jna~
> zQMNtGs1_RmbLZh=*7~n|?uDW`-
> Q}qw<!tTc2~zqNwm<eWf%pKa)woGzCDNkPYIDm@
> zs~SUfiUR#9ZFvOH%KRM<-
> V=|ClM$Bs!hnb~=W@|iUN^&Gox!9?c<|L(8keW%CXUYY
> zKCl(X;Sx!LTR2eLSuf`O22fFg(wyNqpTO`Hq-$(~ce6!nAB0O&d4H7Z`=9?^N3(`o
> zsnkGcj_vdJf^qV*KaA%Z-FOb)g_e8T?U#z(mf;41>-
> mcBSZ9iHjTKn$B&PUQw3#(n
> z@}~{|_n~S3CDs2w3X=POyC(lO4&a(#(~b-
> AIT)aPX8+#?19Xzcq^Rm1%fof=s}?+O
> z*bX+6!l}VEFjK&uwo$FDJph*!7QoQ}Apx0qMcsR6r@#J&i-
> 0yPF2{l8)om_+_~=y%
> zXc5PIpnV^=@$4A_olZ96HVwE;#_Vr1j()@ohxKlhMyR4$GYHZD4R$e%HFJGr
> eURm8
> z`U_73^YMb|@0nW~vHLP|x$nF^Ub7lb=?Pd62$0Q~iQ@O)|13;4ov{LdQ!oF_
> +jB88
> zkF>j&YlX?>Gp2~`fcs)!>BZlOl<CQ-;Nk7_F2D~PUyt_?b8`24BXPf(L|e>Qr#E{e
> zHvgkj3Y%}q?O{vV5?BbFF!Ym^*FnqbZ3A$?{J|pRd%oO-
> `oFO|hOrqcg8K*KtqMcc
> zo&j@gBj?pHJW|Q07rMZ@q9qzw7nnDk9Vq!0W7b-
> %U!L=<{2e|qVgl!QrM$%Ta$4}%
> zO5x*0dUNR?%x6-
> #={XN!crRKYP<`;V8()2(v&cC=p$8%?XMKFSrRv=0KTL5`Q!Q{T
> z5?b9|7s;mZSy<ivm(UyG$(Np{>6U<LX?pKdHqU~v^s^xl0{-
> 8_l>Wc1F8|Dp_J07Z
> z`~MmHUqRnI)jF2<7Vb-
> 92~5D{=ETGZQa)clri5%+n(EBzDxu<(_j?oZP<o8Sg81(t
> zA-tA>xeE)}q6-`Y5+4FAwK5!mML-WQhmJm*Q8ob8-g)-D0)Yz<7eM#^-
> ~g8RE`VK6
> zI|WdaR=~Z^@I3nc$H>@X{pDh`<H}9S^PCvjjV#5m_(La*ICrT$?u{S2a@(J>IK9
> rn
> zDHBH{BO{kCtq(<nYEKw{>IH(Z8J6&NJh|Dj>6bD;!`R0JYIh=RBXMj|uZq;T8+ao
> p
> zhW%Hgl9qGLT*0g!doHc>Pryzg0tf?$`DopSQFH#hSvj&9TFa?X)qHYxlRdHh)Bd
> 4O
> zgtKE{C4K3l-v0Fu2W)x3k0OAzb@7dpJ2cy$CiliU!lp~+#}0s9^rCB@(R&|lz<OI4
> zpQ+<@|1`_x`urRK-
> ~cwbd>k_yc&$I=CYsN|Jk^1Y#i|gve^)ftZ=q#MrVV;}aCwdB
> z?_wdgxJLN-`6-cBEb1?gw`@35CCdOm%5ytlBOon<I-
> n>ao1e$|4)rq52)C}4mJxPM
> z)M96$i@#g*f2}uv3&lyIMg77|dA{c3!$Ycu2UjYaGEs^4D(bU%xaGxKvvx0+d$K
> 8O
> zxqx?PZ0W=Az~D+mHy#twXMs9Noc=j=Hb1ac)ei~mIh2ln>=#l#%U*}!{JSTM+
> Kx+l
> z<hD<I1`BK_rv-l=+@{<o$GP#Pi=D-KB7czxdX_#U`j;K)>FI7g7PssVZg*4SKJf!&
> zpSqh)fq4|yEi}f_n2w>9hjz13zh}mzqM(N9(v*-
> cefdvWmANS#lAirwHv)>zPRVhS
> zt)X#p&0H#e4b94;M9<_o=He0jG!+B4((l%ftqP)+B|9=#pZ_X2taS6&8>jMi(KG
> ya
> zoo?EjlYC?oQ5a%ZC0zz5H``~QRX(dsY9;zcaM#{(v?<PAmvcP{FZ=&puy<?$cc1U
> 2
> z<l4Qw$Gh%9Ya1GP%0N8WbIWBgcU!KEG3Trpw+1My_Ire9xagmj(j4DQ$XM
> UYFPEzb
> z8a-
> N8>nlsn&Ec#(C0}!dV`2@q2Lr(HM_wvcvS&Tzs7U0^*&1BL6SR$^5urqm@r^h)
> zO>cX&HHlt!L}@kDXfrA$*<8t%m3!8FuWS<n1GSis8RylSFGjXj@SFyW`)UKhj$
> <mc
> zd(k&yJ3dKh&%KH_1p?QbarK0ImX+_N$ew`RhT|*e8J_6oGh+WmMGad&_4
> 12g-~x`u
> zo6S=l0Q5Ab!rKbM^ZG;OYnznx{jJg^ud^wocV2#+#*;HuYtQu)ol5a5@O8mt%
> =6f@
> z+OdAkPjyX&Lr9~J6OY%#^u#t()HwLb^eyodLG0g@++i$4Q^6KOoE~w#Vl{X*
> gO2o6
> z%C&8S@(fR)){)E8k=?-iRgR{(c;qu1x6)t9<U?|4`O_&-(tovEx7hJ=8fK=w>4~2P
> z839cnsMSzz?yRb;)oo@?`NAYTT$w^E3ix{Bj|{GDscwPZB$junX`VZyydBxLh08C
> r
> zzIAr<vc7*5k+V!4cl4+jZr=?R9q8m1o~DZS<d6QVs{h&X^4}YFXCsEhmVb1RK6k
> bj
> zy5`gM(bQTsmd)=0-AwRtD-
> ?nA_n6K`{B$N9fcJY?Pmb_(CjA)p%v~>uzV?<#Vv%QE
> z><BQ^IKzM;_`fyu|9egO56&R}pUl6Rqz(9ig*q@>?b?Zc`ttO6f4^u^|4FPtjn0=0
> z@Zw2K4{^-
> V=KkZ$H^$c12wyCdqah;3Em`a{rPBir4n=b=%RjtarGHq8HrH#;?ALD2
> z_3<sfu^B*<y=(D1TivozZVc$@x1b#Qhu1=`6<4gSEwtnlpW0{1(T$Ykbt@~l^N{
> Ez
> z*`$AX)epEDC!?~Gt>cAm$6GZo*;Jo`e{_=Z=%pOQjsL@|MSZ!S+dl1BzQUXh_
> xQu`
> z-E+{?uUHmI2QlM+cr72@7AIP5xLS%01K@vWncbE9jC0R$iGTd-
> E1F{*B#n;7oF(te
> zwQGx%gM@!vjf06phk-
> TVbdyg<kSX&q#k>RUgrEKi$vnxb)05=#C$%t7$#LZ1qYRdj
> zf8JBEw^*P;Y8{EzBIn5B8~hj$>opDFF}u*$XVO8R*=IfOdbs6XW3O7MPiO)kyE
> oqv
> z0*jjt7qVO!WG8~Y@>H%qPX4=}I>1e>kCcgVOKl^xosU4wHN+KtdTTR~+|sSJ
> 1k|>1
> zKY9CmS)`R)b$-oMYVq_?9M<H!&#zfNbMg7sv1^|nD6|7-
> YjxY%e%?H7L{*c|R4e)p
> zi1B>Bd%qY9W*@k|r@ixu*AM}Mvj5YcRa(0E0YH{#$}hSAQ{**{d)(xc<^&Lub
> xtOF
> zmG9x<A-
> f{U+g$MU)>Kt4SD7n(QXjo=MfMmt*km$vcSSyR;gD^LV|lx%TBCx6d^mUu
> ziN^j5f4&Go9lNOpkp@mRsCB%&N-eJt#sCpHwrOU(A!#l^Th-
> Z>?=e`u|50VHf3bMT
> z5c9HK$J{iJB^VUhRH9TT(36yma>}Qa8jBIz^V2!k02ag-
> QqOMs_#<mPf%RCS$?j3P
> zI)HLlN}JB{cI~#9CrY@xdFDuN6E49cRYL`4Li(BVNup+H@U3QL9jj*24UcTRM2ug
> o
> z%kdTUr5@#|7CggqotFW69Q1Nc)Rzu>t!hcPorPBhLz=28K(#~n=m~p9l301<u
> W}HO
> zPCn~qfR&>7qv{nv;a<OD4vshZ9enAbdd=4#%D<`x#efLXME0tJY;IO2Ur=3Me
> QX&~
> z0OsS|#$*n9dA2&(@c5`H<RsSengSNbYLGjONE&h)tLeAC>;h*a5wOYrrRk;jx~
> )Y2
> zqvW|=nnAMG6ZNzrNp54{c4U(oi6_*`eN>AXe~iewdl}b0E!EJ{Pv_XGR$jiEDsY
> VQ
> zIg^-
> }ExYM*&OJ=>t;UZMVv?s=v$O(MW`^16`@%dZ(JM!bSdiknyY^pHgGNa0=Y*C
> 8
> z6Po1vw1OG`2OpxFxCrsMJ&M4lLnY3Mxw(v{%UNpEM1<OHHlz~9d~<`RxN^
> 9OW@X|v
> zxA!H5ruI~Grs5AK>XT33FER5((bJz9;8rJpPC{%7^4Tk?F8~C>b!#*B&Y_~czr?vb
> z5$HTi833Q<@k~y+%;WqfG%@?btRm-9n=u1>>;Wstvliw~v-
> 0tWyz%<^XZ6SVo7GCE
> z^y1-
> koOnPE;yYjZ_1<L;COJBP1$yWbCf~kf<+EIpRNOwd{iDxbyD(TH8D!tMrv;w2
> zmWCvA4K4gj0v><d%Sc5!=g@g>UmZg(`QC~Ayi>D(?2|VZPjSTdD_MN9hpG
> mt6U6nD
> zI9FD6J*)-c8X%$;wZj@~Y>VxLr~hgf+aE}HKWEz4-pp!yZ)-
> (RIH38NSFsMRmtCqx
> z;!OBFm(hB;U^5R?S~!@*o<tw2d@j0WwAqxssX6`a;KB1jMP^f3Gu^jbue=g8
> nzW6B
> zejzl22nf4b86QrCGiT&;BkKs_3<84AMZw(Pw;va&hk!;K1SnTGf`Xd%*~eo*(Ob
> v0
> z2E&gIm(|xe>Ao3y<&2jLmNGz}YC5eWPiO&k3Xlzt{rH#^e=zVYD5`LO(c4%tGZ
> >Pj
> zxy{y{HY>i^ZmH^8Dj{B9n`%#HN7>Zx0W0-
> u=sv!ic$PU$02@E0PrX%9b1G8{^{jys
> zKgF24e$FZGb;yS$YPj5vw2qh5)UYrQCYjR?wF6u_dc1c4Q{NU!#GE=xi(cU{QzZ
> 60
> zccEbQZ*4ZqdP6d<{!Hm|9bl41AztvZn*(TCext`=s18tXfa9uS?y^>KxXG+SG3`;l
> zP^<X_+w>vyHmpuXX}$nOIk4mJRwnT8Q!qV`KhD97H;B%EGz_4bXI9DX$hjqP
> )P!O%
> zG(bZOaNprK$GT!IThACz>i5u&93I+*DL<SG-
> fkRY#U8vgK&pC{+uFv$ahfDRZZ(cN
> z+)yVe?eCsDLNr)ZcfCcnF~O=x^62ow(tRbRle`|#GvNMo%Mv-
> RvFQ2QuafdoPUCO6
> zc}KZvMWgqSqWzEa_h0gU4>)hZ#h8fzRpFDAk`IPGfUKom2?4Se-
> }ulBZ(C7+Y%o;(
> zyP6uR<~fu@fyKwxaeHkSbZ{l{9@-
> #khE1v*n;fb^aRIVBx$}0FV|aj}Y%H2dp8%am
> zQ$)f{VLt*tSJXC*IusC?MyP?dABzjf3(2hX6$LB?L%8M*k$Eit>AB#4=Y<X&O?1i
> p
> z319}<vT?qC&9v*#yrt9X`so(qxTg~jo8N;k9avDbYKU!Iw8@ESa3P+Hyc(Xa>A0o
> c
> zn*yvDy2<k=bmP-iw43fxp6rz@Pic?XJZTgI_h`V(gR!-;8YOoYN-<Yc(DL}~YfUG&
> zgvvkM-
> hav!`BmpKFJBkg^0DwefBSMPiMuKg7Df>Mv%fGd(wL*#7JN6;b!k}^QiurA
> zv7N92BdNOT%s+;%Iy35DdS;nM$xO+5oNIpMl$su3oCx-3-
> hcX8`1*GlpfxrtPF==_
> zlV5LrXJ)CMhVv)y+I`b)t3QG3OSG#yvwYKgi=WX*C!8b;9bg~Mp$)T%I!C@#21
> {^0
> zn;avj`Bglx<}Mj?bN{&978>s^*>3yL6t(udR$Z5sDkOc8uP!Y#hHj{tT$h_rK?7(#
> z#~enSN1;yq2r7B$$+V<H20p4e$oYI8x6U%;E)7M&O)e&tr*x^tbN4x_TPtA8?|
> TT%
> z=8yP<_jq`^e{rP>Q7vo%kB6@z!i=#mz<3P^V(-a+J5qyZ*?}x5a(G`1c6!iY7Q-r0
> z-Oa6XximxoCMf+D-Sdr+%e9-
> 2Q$Ediq{U4I#ZLud$4~87Hl+x$frJi4%Dep_M^fc9
> zA<lxhs|_-i6-N`uWmQ=IUT(cd2_O=~31~hU$0RaH;-
> RIT^;oF*x_%mW;WBM*vFcq|
> zr$;f`&ohh8cda=sEsauF#Z7|toT|>C)3Y<QUuU&e=S{hBL-y3+o8fWuF-
> };=fd&IM
> z_SxW<VaZDrXO=C<1A#@^)?q3e<18<g>}8b7kH-
> xLK8$P@iy^kXbG~uTPm28#V<^g8
> z0IL19(h&nx4?#mgDz0z?dJnS)c4ROa*kH+gs`Ks*)Qmg4KZS=)-
> rvgU`!Eny{cB?@
> zvM}2aHc*^BTP|o%E<C=TIvC&ce!Ss8k(w5EALBUiuKk`>lF^>&J9~5e*>M(M%
> I%Fl
> z@wJH0GmkdZn+nd84VRYlE&CQ&rf4q*lHHjSK5W$Ax#*cV-mk81-
> >e#!0fDi23t6;J
> zofdh8wod25PRn=GizmY{t^|f*_(N;@D8{gjls7jVPm-
> motxSzuPD|?#(vRF4l?(jA
> zNlU80h({>teh)f&Ohmr1QoyvgZxKu1xi{FTa<z-
> T=eBooS^`ULu7D^ZHhj}JeDfQD
> zrJt2qr1>gvPFz*;?zAk@j~1!p2%G`V0%zQK1CnHw^VN;|y`0HYZZ@ca=fbSYZ4
> _^b
> z3Df2e0=24Lsh{Zfx(dVjH4b7{i|F?DC;}97&I!u|-oZ%%vEOH)ulSSt_YV4(J%oB7
> z2+(QlzbdnEhlQRn0cWKr?aQyBEpb}To16P4M9Iw*QK?Rk_lIIUlu}zMOkd3^<~
> Ry|
> z7ehGG-l^c8RZOamV~MToU1(@3x5VTG)}k=W*#-
> (d+U_Jq*`VfM>GGvG%L5w5@Z7L1
> zL(;L0;-)DvHwlMW&w-
> >7`t!_A!+v&(BKoPRmN!>j1{+7}lYw%CCNfhb#kWFAB26sI
> zXWd{&s{-(3<Te1(Y<OQk);V%17s-
> fmKM9b<dM5kexgo+jLeq}7rrbV|7Vb$v&%BH*
> z!I>Wu%uH|2HY_BC_te4%?4qVVspB7ye@cC_ddW7}?%Tl2M{yl=&uziXchhK
> W5b_Mb
> za!U#X^nrb9j+jt)ZcrIawp+O90lHQ4RRa#BDWBe6xw$Ow83?)l`1oe%8s}&3Gv
> 5pN
> ztRIS5!R*gk&b6Ey%;jl-
> XW{x#ToQ6<V8|Eg*{i9^g6t87oYwa&(4B*pQ1RT`NOd&>
> zsAC(LNJmEJGuQko>7Kozy^)?KiKiY7PXj{Cw3w{T^*(#(z@unS-
> ~TSOnhsCdw};~;
> z{rm`Rky!Pf4UnAe@x~nXC$?@ULd$Oet6ttuzu!ZvN2S5f_xTukwD)dH^B0z1ur
> Dji
> zw`K=gxM?UE%~6U6nD*ngwmPdZeZyxmOG;E9P)V9aHy*5>>eDNa0&k&^9K
> 86<9MWGE
> zodTL8eR_}k%)QnEu?^Y*4w_K0fwLPRTE}e@^kIJEDpzkN@<I!#T{GJfE)VJRH-
> t2h
> z39z-
> Pbmxt#YfV<|v(HHI{4y8BGupB<AwN)PN^fa%f8J%E{N?qjM}jeDgNl64oI6QD
> z&z;rYN8n7id-
> U#Rmts2n@C6qoOY`%6O?|SOFij?l6}3ulmlgN()orIw28sae6v@m)
> zm)o2+AMv0tnmX7maW0U)@!^St2i!24s2^v3bMf)k(iYv_WS{rODfLVivWUO?
> 2A`1J
> zUyDB`&R&T{RXAw~dg?Qvqy<ioh-
> G_OWdt;A%ej$p^(%Lf@d^_B+m6WOorM<0Z7q14
> z41D;miykI8ahE0S%?VsL&ZET0y<bn{fSp~dYSNk0ymr$qR(e(hU>;xnh({iCxbh#l
> z(FEOduvC2B^4HAh_N~jW>VaEa3As%C@@UFg)?M4=Ih==2sI7gkd1jpyFT3~|
> ^84?7
> zc9uK~N>*C_!BOYWM}Yr1aQlCC8a5j<GwZ)R47*l+?iU$nSldYcjb=u6OFujdRIT
> Pn
> z#Hjm<9XrAWg8KO*L)3_l*lTLZduxv<s;KDKfu&o~dYm**YbPV=JdfoyC#UtE?s
> wPh
> zw`6yto;MrEE01TV{I2}OONtr%9!~@5f;5Q%CxjQ<?H*4J4_o1$9(QYw*QX;-
> UD{bA
> zm)W=XYxsINdxY+0w`9FH_xkZP0V%iPw9Tgl*_ca@KJ>S{clCrGwuF4<oStq^z3
> fk4
> zH3x3o3JF)9E)PeByUz%Lzg+K&9gR&<up~r%dU}U8qC;SyC0^kUb1){YypvdVD
> ~KGE
> z|A0P$A*#F4@ZNY2qmvnjemmt1h7Kb8G!>+@IeDCxgT~kPWUZUBqMZU;|K
> ZCy3jgEn
> z0M<I)Y%j`ME%Aj31fdwVIOSHu2h%j`BZ?1lJSN%jAt1vqP|3E5Um&V73blhzw
> T4+O
> z`>l<AQ*3QjsaO+}ruO1KLWx!T45${;sV2Q`Sx^%iU}T}bX#%Sx)s}gw;6;pKcnTW
> f
> zPMQQku4z$62E+Sge5sh~>3+%o8b^Q){!(V*!&E^SZiR{>ohmJ*>iX*fKH4p_vS
> N~C
> zRZ8+?(<Q<6dzo|N0-erEYk}{rv9uf(n`i1{FCafKfYIG&tE34dHlXXLc7k(t7;}c;
> zE+ctDUML(0xa;^Gdhs%51?Y=8>j=I)Puuu_&f?|dRm`*kUEtR-
> BsGkAIWU7YxSMfA
> zq-XWj+9!|14-
> Snp8C1V0TQNyeC;rVu#YHe(aWsUM@txEo)!aMtU{)(~cmau5Se!QT
> z<c-
> lJ0dTR+EGJQUS(lvXc5>g7&(#*lGRWU>alxb0pmX7=;TmQNq{Tp0&9U05znpn1
> zZcKK;KIgAfRUtq5!2)%>0_`>jBNeU*uC`ZUg@z0ovwjpB>s2MxZPbA|{7ak5&=
> HX;
> zSZP)hv~yG)SozTDEHKqi_=_6yBM8U<%+thGBqALm7S{m_h%usWjKN(9ooIn
> HBF?XU
> z5?+M`(tQ$Ej@b>qGQw|;glSW=LI!o!YRd@pXOGCU4ZQ5wqk2gBzBtN}Nqlr1
> M3ioY
> zSN~E53Gc74iPbkd#DR5)$I5rg39qaN9r{k-qlt;|sFxdq;p<OPp(~seA+p3t_mtYy
> zB=fNt36z5<Yu~S<$jvo&!q<`gN!pSk?RyxYNDY~*=-
> wFkRm9h8kyIc&!skf<k%U2)
> zUuU-
> Js%XQ<7#8jFOU(v0GRPdZrxoiyfmKS?k<9f~W6D_zLWH+Xy&8$rt0(cpPbMug
> zEmY^?q_DWiMyAQ^d$W;rb`l01_3gZJMR<W15_F<VtHA{b`4LbdZo{$|FK4!Xr
> uds@
> zl6G=zXbp$9BqvlOB;q^QzoB`Ao~c9e9udid=Zh|-
> Fg<+HwMKIxQpW37#rm#lngAtT
> z8nZe#kXXAdJ@c!}w_WIf_}s5tD{{H>q2{CaG{!hOQjWR%VCkaCDt6~@G7_))C
> )2%}
> zP=9jRgp*AAB&cM4nSfxdoj)@%ALzCgkC=nFt&b9{xj{!&RYAX^n;;4agS1L4szG
> 2j
> z577_q?!tm#q+(L$h_#8N_ctl!6&CjtD~z-F>DR_0FL#8Bm&a-
> LCUNnFappD1jKNG&
> z@@v(rQc@DJF0;i=txs=))zJ3T-
> `0*c>)BvOzSP+okFu`*Xj)$SH7*6OXQyAmR6T|+
> z7lPbV`bGWZ_xciE;wk|PP|VnF3=!UUaY%GZ7+Awp8RBnbFV1X~U(uA2$*I9X
> rAKr?
> zclqh`ZpQj%ewIRmVV(1SpnGHdV!@h1Jj%2nZ{h=NgSO8$tpLP4kdI`>2HGpgP
> T*Mo
> z6nk{{Ck<Y-_>f@k&t+9pSiAQLv#<lRFYrZaIaPX)yb|r+lNUg~iE-ViLdkf|J6iz-
> zA+P_Mz+CywB;gBO6TTRRw+s@nM*D1U2kczhCX0-@cr`_b-
> cTA`zJG1`okbV#yK*z-
> zc*r-e=Px|o9@fqfQyZbnen`ZvX4yP-<_e)P+e{4c$4vqetJro|c<PD~-
> Wn_Cz)}$~
> zgv+EtNjUkQcguK&j5SXddmcTT1iS7k3zOt!40WVtI*3%)Gz4ERM?E}9c<Q^fVv
> QkN
> zt7z`q_eBW@loa)sp-a0GHdrBexG^08kup5`Z{N<^-P1GaTB-
> W|Fp}@_k|gr)S<YpK
> zDH=mL5kHT_{y0L_cP+*8qw2k`fbofaVaN;8TAJAs6Y7N4T!Ts!bGP7O=U{(c?N?
> KJ
> zwo+I`B4W;v*e)w2U#ls!n6U2*x`nc%ULz2@QN=X?_lLUmkjdUA2CI`1yuUgytz
> voG
> zEwJF<uXb1cs8jNw?3p-
> CCZ=7(7{zH+P<xFNIuciO^^<gh?$m{kxA0Y&auE)%8SM$U
> zAoNK?)jE%+pw0&@UuE|;T8ITclb`8b&kYe767Kf^QHsVS0g+sE%!b4FkJ5)Z2}S
> c_
> z6q!z9YN+Q!v&HQ_G1OpPTvU?VN0p)>!9g<h^1d?TsE=%7o3X_2zw=&2&AX`
> c>h5g6
> zo(4@-zxX`0t}O+N$70JDgXA@|orVPMiuDVIN~CMajOf-#SxK-
> Gie&=zogH*H_XMi+
> zST-
> 1gw$eBIP(F;03pYcT2vn7k4hffsA$a{bYzOUyMk_7B0Br|7Ofi9aktG5%(NwTE
> zCN+sA3(Io#wXw38Q};;I&4N6cnOyx|;k&=x{SWr!p;!jrYH1T<7D&V}{|&1FrYJv
> Q
> zj`b@wD88%oo9!u5=>#I8UpmldV>=ztKKC&6c;QXyiOzTmKRQUxHkfMYv7?(u
> XbYHm
> zQM(XCpI}0{bcN86<+qcJghY=Ehhw>Wc#Y-X1dOJ-
> JDU3nAF^gE)`T5zsPFxhm>q?{
> z4t=dB*25FjDvEzpDA3R~o9!!z)5CmqqnV(1z?kX~w}JRQEj*}3?};%*=GWn-
> E<0-1
> z#J8AlP_ZvKLaCs%v{VZVc#Py#{N}htIT&yXsS;Xy(_Txl6v+#0A&wZu+%R;BFhB}
> t
> zPkM<`nqj%;z4kR)%`V7Rwzq9$z==J}h|JzL0)>qAv#-ecl1T`JqYz^Tb9c&EXEWlw
> z4ZaiKcA912Coshn_H$&8L*Rx}utPXRQo#Ds0$(UN;sYyN_)%GzIQBJ2><1CEul{
> )E
> zI!BvTwNmp_(7kbG#CIy_QcGz`lx!q9Vw-
> V;JC+bGG5>NZNdL(mJ{2p(A;?ej_vLSs
> zx(V(n=CgxCdI+hI4lnOilbm7VNK$*mD$`zmSZ$)8OAEr}CI3pIKy+a=B!ngV7PC2
> 9
> zc|oVMVlQsS>s8|5+YH@8JQ+Si!vr}8>T`KAr|`&b6C7;(m)uNM9&Zjh`WR68Sg
> PKH
> zh0^%zl8T*<_Q`UwRYCU($F0uxy;o4inu`foZMGTW&SM;lzyO;KV?!-
> SN3+j`c$>eD
> z5XaCtQPwraK;*FF>TrJVV08T^EX;lhYEy1i2K)6-&D^y0EFFDDi5RXO2JwTJbsx}k
> zJe<*>nXTxzf|MPH7O%w^q0ykiE26m7NVnE<)4w;req&U34D<S%c(IRoJes+b
> 4?8RQ
> z6zoqVoY<E-MlXj|F<w68w6R0ki$ckjcbC(8j|<$7K;v~-Nt5`OZRz>HDRK}rT)|2B
> z_R(-9g_?X_x;4Kq<x3iCwyg-t52W?4d-1y&di;A1znCn)SJu4zcIm-kkrnBaf&7KY
> zhOi7tvZr(lPXgx`+iP~B*cmw*A|HKq*pP6YVKi$9UGEg$uiqwODS8cvk={b;nlJm
> {
> zQ9*N|w!MG&q2CBiK}@kBMcYQo)@Z4e5!B`0^<yTw0zIyghCJe$tdP|FF;iU%r
> `BJ<
> zn!;|8ki~`?vX)wpid~Y0Dckpcw1bf_@ffm)qIHjVtiUZk?4=@`p*q3<v~>!3{}ROz
> z?ITERZc!pCW~B8~L_LECjj+D$7dY88kzBO!YX}g>w>y-
> ClGfWF<fD!dyYDQas>qhd
> z<AV{7wA~Ep!P^sy>VYD<oJ`ne+=~i^F~G^7FW%)RCWm+75E5Y7Mq2ZhfO$5
> qa$L?e
> z#O#w=W|9I<K1F=a|9FDdXe|nY><pF{v$y*|4}rMNYvL?oC74!E%0V_H@`}%B
> `W4?8
> z4XRs~GRX}~I+>3Yix@N^iz#%vk%tFjXD@m@$~}4iHOWm)!e7sn#K&IoMb^9
> pez>Rm
> z0;;o|se#nV@OZ(ifb^yY&$+Gc&`OCQ+l}Z(1wsls{c{+j0nv>@k3IAg&qf@$SA`b
> V
> zhg$ua0#M}8qW7v;?V@@IdS|)Kb=WGa`%51Y$B<R)SYfGG1WLyHeyhF)p{u%
> lrqJQV
> zEG~j46rtX$zQWTTMl-Xy_-N>x#raZqb5wN14-)I?g11|7cQqvTlT?)6xS#or6f2uf
> zi@Yy<LH^^@0=EDgKd;Q)8RQTS$WVL>Ys6hZatz1U67iJk<t(ep-
> MDd`v*|jm#A}pd
> zvT_?OK(->};QPE;81KCyb|lH+5zvetrnz~9*b8;2)K1t-OzY4?jz`GC9q3+6WQ^uv
> zJ@4(nNP+Wm%<cmeMP%RiS4$~|<>UE~XK{CV@r=5HM!>0KpWlqiDbq82S7
> N|p>nx#0
> z@xZ)F_PwkmQec%3ordv4PSUTSbFPP7^Cc%dbM!e0Mj(IHUU@x)(zf{vdd;Sv
> yYp5S
> zg7holJ9@ACSJU)NVFHgsA<f?RQIzO?^a_q%_bv%9&cr~HMEpj>X7y@YNBEn
> *cdsMp
> zi_dzY&-U*+(}>zzZVVv7mkN4P5t=I!tO6eHy;Bh2%aC*;emdr_-
> uD?!+Uy{>GwynL
> zH^@!PA0Eto;V(-
> a_2L|P#EIGow&Bivg_g5e1vE4;uSxne^{imQ!^`Zx_h(nlaGS89
> zT;0dHWThW8!p@!_s=<P<nT}x208te17%kX<&cM3fK--KT1kNUv-2N2N-
> nYcv*IQoj
> zeVo_Nu`lMUNFbxlS%~ma-
> KchmV16Arj=lLhekW{@1GM?Md{WxyNo*}HI;=UfaroJV
> z@R#g$qhhPL?HL)Id37)=K?ZPb=%M#)CokI2`>QfI$M6D~pxgkl^tE&|RWI``R~
> bgS
> zDQo0r`$CSxQTfFtmKI-
> SWdK84*wiT1NO82Np$e+h^au&~PZ;l`*L3k>>qlz0PmNJ@
> z`|4iGIfzEL7;d9RH|}m9naBE&zjz%<<y2cuG&^MJ`q^C3wSHMbR$z`&8V>sT_+
> `v#
> z2d(M{<{O;+%aTY|JWL!49JpjDJ;dUo5x<fT@=F>*(|{cIy*{RAp)#NQI30nxbBA
> C$
> z1L+h{i{1}E3;bQqRHl3EitX5?Q3wm9AJSXwSSH&bV(o6gtRs6By7HreyCkl>fEbd-
> z)B#E{odu=@DT%ct%&}Da?R0HBY>7|7yB6r;ldz&?br{P41&*>k2^Q0@{tB4}9e
> cM5
> zP>P+cWt-?F8hTcNQ)iDw%QbkH#6ygZ`CgYH(-
> JTCKh@cdy3wmzWWXI^vA~8lneV+w
> z5*tPwjj?n=Wua#}LP|QMe(hivJ49^6XN)k4x6y~3-nr5~kYF^~+jjY=-
> UIkX+U#oD
> zR+hMpF4$;3yt7JDDl)%Vqf1S|3RnLzef4sy&iK=QL@i$Y0(p{tUz5jF$MlDZVXgg
> 7
> zFpg&C$Mp53@jTl5QO)ReaTk<kt$lG}rN{aMh^o2RhuZr|prBG&<tsL*xW!a9s9
> *Wt
> zjg=Z*p|qMfF5w}ZoMrZ*J2tACSt01@5mF$W+}AE3R=4!M&>`yW@eklSBo5lz
> Uv+R}
> z?x(`8HWw@-
> bR0IkVH+!X(GY~Qh6GWsFk}e1`oT8kRuaN3vJ<+4{i+SytJh|_xf0NR
> z2pZ*U5(rH__!lS1b2d<`Tdm{h5aq^c5Q|~(>ZZ@nd!13e=xwf%I@YLPt8?OcKC
> &CJ
> zK=8j-pWry-I6?Qyx0Yu-c+uf23~F;<AcAEJTUN;!{@7uxF;_*V`7w`|pc%Sj4gQz*
> z#P>J|o-
> vviPFaz#hy=h9#56CyBA(+wXzE+RuAV&FB#g)7LugF!u$u!SV=*uJjz4v_
> zruA0?(%7-STHuZ`XHl`#REVnid>QujqNlW_i}}+U)yC0Ia$6Qg+{9_Vt8b6M3ga-2
> zdoPFSg#;MOeWFR@N@(T7`LE$4boU8vQ3FSrR&4hP>wdE=<!nnXnna0r1D5B
> Kj81|p
> zfZXmRFKaR-$5jij<XRwIsK3_Au;h{fCyri|Y;fJS#apvqNEDy#`LzLK)ea!J0-F7g
> zm}9_04a3o+?sLxlQCIg)-eK0p;&i-GbymAm!Z7q5w3IH-
> 8^CB(II?!dEpw%zH$mlj
> zQ+#)`<=O6IADlMO&s!hr!xMkC)5tUSzI|hd0QA#%lQ*x;tTcvUqF{ijFc9++H^Er
> m
> zlg>m3+q+fF9k(bMcS7bs{{BAU76#QtjF_#v+B|`ol^sDJ=Z8rbo+hqf{Z~3H1ZiBa
> zM7TYS>5w@KNto;_4XG8%cf;z+b~$O$eF>@F6iMGzu&}7@mC8JLSylbo1ll#F
> hA=XZ
> zQpG0^N34frF?ZzZ`3Y%<vcgn@s0*G=GkJF*Ani%wV-
> Ie72IJBC!0{}7dAm7cA&6*R
> zT8l;l1E+PLB3^6}5p~=Y&hBqlI0a9QoeE7j%yD&w!M@}qzdix!>+h2b^;@R7Y_S
> D+
> zMH}9FnUTd6J}8TWWOwIvPbw_0_h;mwa*}A@=Eo_%VqT6SuB|zntnZVy{w`
> s(@hjp}
> zR`#}?WlH86+}4z9Dt6W9cl3QzI$yI4$XQvF18$XV<i_gxT$&cR5)M8T4|e88Q!Ud
> w
> zztM?bEZCuJJyBtrDc@mZ+D@?0nu6-pDT}eFGp#%-
> nN)e{blax>N<(9PyHHW4(Ytmd
> zlQfG%glMTS{)lu7su<bd`jGD!40*nl;HR_N^)(OYeB6Hv4{Wcg(bTQ6)3P@pHZ!}
> e
> zMOUM9FZd9E*bHHEN|3z!VaJ8@7`GaJDSpP>yO+3$mR|UrI3Z8Gv>*#!Ez^Tf
> &n?Vu
> zilZKW$v-~H-)Z7hFC+NLIU=iBZp?pS?1G4M!heA>@!-
> 8(W4)Ch*s0LYP;1>sX{f2-
> zT8;X2bM)m9)8x2AK%K7iUg@weiaY(Lq`(e)JQP;=VNYa&xSXQHQQ_=_sm1GZ
> o`A#+
> zLjvlHFFIlrgko3$Z|7aPuCXo=cU4I#2;o~#+^#5ZVkUQvMx}TZ7`>?4Qr$|3K0+=
> <
> zyPh$c_}gmKx}?o1p87bRIs`omWphP=T@T&zWFB(HbXU|sPVswh@#|dR+Yx
> b0d{)8D
> z4tHN*AL%&i#35&)Q}9iaF<#Vd{m>|HgYWqX+k|XHoslPOIoEAK7t7`GR*QxHX
> Zr=Q
> z)n!<z#vy?gno2{*Bm!#wJgqQamyiiqIx~SOCk~nR;>LzS=IEzRn(c^SZpzS1c4|N
> m
> zxCl*uK2~g%_HEYYTNR|ZdDx~(_IJ_2cCPKz9SSn!za|@_=WTFZL=ug^qd4X;j!9
> >e
> zl+gq6A#=XP<)Y06)P}xV;~Cv|D2;ZTWT-
> V{$|_Z}=)RtMnZQEoO*qNwJ3F~cBhukO
> zBkNckww3BpvR;<~P*g`wW^xUrNSG3uzRB?0M*IRHZ2!Hgiu}}b?@DVj*B9^6
> )aUS3
> zs_l3(GpG}!h4E)o(2FC2Y%G6$O(F}KOlD#e>nbe$@VWGBRYo05LbFn^c1#O~3
> CMg*
> zi@|oFKOQIT`$ym4&P~Y=75$L!G$JIj`!Z)2jlhxGbW3#Iirv;>g)H!E4U2Woabme
> h
> zLv$E&s0G%z!n7fvW##d(je^EX2EebWI2Q$cMf2kDfJm29NN{*KkoLdh*H9=^
> 1wH~M
> z;!N`py{eEi-
> =0bdMN{v#7wz4#z90_u9KK<!Y*)FnScXDB{O;r^L%gO*C$##iY(%~l
> znjrmj#ssDZ1z~q%VgoTP>{zJm9uqhkk&yl<{OGN3jMxDm;yRchr2{~;-
> kD^idbVhZ
> zEjj@*rnA|MiQkJ>lOXWc5SXTjY$(ZlUw?YB`1<WOW70{fwXIFBoLLR}u{Z<ero8
> Ox
> z07@nP)-Jei-+{dD{C&EIuy#*8CfX5N0iqq(9TweH8?_av5@j{AIn|jaD{Y0jTP{5I
> zqOcbSpKZ<LUerS~eF4&tz&C;o$-10Jp26iJpD??$jcR;KiC_R}X~9_AkPB<=Y_9jc
> zOgUxR6sqWCtENF-IQbEJsN@f*LrEC6VGUmglPjk1?AJdg6WA-
> Y<<lhHoxKsWWd}dI
> zJHsbe#fv<mlkq`2_i$`Zxvpwg1U8lTOb>ES<Tfs!=N1RskCp2`QgP~E3};&5kioI!
> z3S9>evDgr1l8{SR7Y7Nmx|!{Sdr<~7b>_Wgf)fMDtI?Gui6il%8@b_4<)gN;vK})g
> zgn%)~uhiN#J}VYnHs{}EvoaqAetaY}d$YXxZ`~j)&lytxRo+qQ-$_Pg^=&QfZFKc*
> zpL4QG+gR$#>D$>7snSae2@}!F>pR)~Nk=O9=lkQI?=L`_)&HIx_4!>91|pW{^s
> 4_;
> z#@Bz5+4b)nu8jX9$1BsH9It%9=Rc6nmF0Kt*MFAI_4m{NfTxF@k(uLPd3sV0h
> e2!>
> z0Z$_`Eff`DZTwzY0#OoIj=>PTURlio-n63^_ujHqgwa{za|FgHW(?eogbP^(VlnS0
> zZpAwJJ;zSU6NY9yAI}$_Jg7a<YYIJ2w*kjbc==P~E%m7R*i1U1=S}bwaje)*`PoS
> O
> z)1m28SNhY<)x^r=4F4lC-A0JD=9fVFQn&Z<x2~-
> Y;AE{sFnc_c;ZWJ&hczjM#<54(
> zhB10ix4T`(%iJZ5A2WoWPkH=@11~%*mu3i`?yu-YDeuZPJ@2pUR~{R{-
> k2U4xr9IK
> z`TNodXTN${Jt~zh#<d!=3^Rt-B?oA-
> ;f%2Km}v>k7<p_bRTxK`Wq%RZT{6(ID6?gW
> zG8#8%wO~o&4~I`y>S4zjV$m??<MOnoXV{VQoajy*1d2ZDVa4p3B6$4u(j_R}
> ^Nw0$
> z{iJt<tc+)M9SDz@hHl3$ULUm?vtZj5XXRs%@cEE~`?6hBRQ0tA@*QKc#J*9|zE
> %6L
> z(HY9*u?Z}FcI0s0J=5%Ukemg}GDGN<s$J1#>maMM*gV3+FRbR=&BX%s9w9
> 9H%*!>+
> zgdV{Kg^TQECZzktd<HiHSPu&YSA2_)$Mvgnc=Hqj&GM3=!i*9K$>WFTPLDkO
> =3F&A
> zr)j24Rsx8<4gJ>4MfmND>@-&W$p?WrrS+S-
> +*BT0ILK`#6McLbw@c77VR${SO)o(g
> z70o4=$znsP9A8SSRV$o1nrI@Z^;c9*4D-A-V3n-86hD;j<1H1`n|)6H{soy9i`6N!
> zI$K7Yltn#M#9xA8-
> kp2C5py1aloOhF&mMMCdM;5$i6bKbsWaqYql1|y8~NBCHf>E1
> zN4Dz)Do;N0zGK3AeZ=LI_(vA(d5b`TV>Q3J{WY`04t4~d$-ZH_pF`j)=Nlu((fkjU
> zeXEXT-g7^g(+#ti$eavf&npg<Eva_b-rI9_;mtN-`SMs9LRleLZgsMnA%ylYI>HP<
> zxCKaUbTSL-
> ktSZo!5X~p=Ap5cSgx_;4Y`iHW`O+2ZD~vGnyyVJVX!$w;KJ+2ld{4S
> za<x-
> ~@0=OlaT5`^e4t%pI>XdfEv3lNgtfst)A8P4z+&?>^C#+eUS?7QuMROX{tHk>
> zCu<6UuyQBFZWVSDG7Te97Oo)a>?`kt5mHMeq$ZMX9wubyu+iN9a5Yu|FF0
> #$tj4bp
> zGtveKTqgprOeaU(AqAjFy6P6@gitzIwSKj}4i}~-TQ$_SZgTqB{8I6>>j5@E!eW#l
> z0Rl1hL?&Bdo``8OG(e<z-VCLLC5euYef5y8=6X+2X7vyzu0DJF#j#CgL-(r2Dp%*`
> z8Yy>ziNg8MrQ5#F5cw1TC<{suaSaXi`xrawL9Mz3-
> 3i1+GCO%y2QpylE0m_#W^qdq
> zOf68oJ7ty5lpHR7xcSab@vUfqZu>>GBEw~E_{7V>iXCZ{+IpQ)#tJJo?OB_z;136
> h
> z7X@1|(?fLi4|An&JE&z-
> N&868YauV3k><j9P^M`s!jwGp^r5H~w`CXh+ifHuG3~6K
> zQmg1H$wSrVI*Js1rvhfY-~XJ;q{oE_DIe?V;6d?&Ua9-
> 8z3{{A&CsZXHd#9><j@Qp
> ziWh|B{8+!PBUCY?e$w(J52$Wct<Aj7U|ApEDV}O#YSml2c2CEMC19nv<crUD
> QjA%M
> z>I#eW-
> ZNH+3l4<ud4~bzky>OX*{ofLl5ji`jEVeGNXa9eVNG~uP^dC?*^ygbPZg_{
> zBGBQ!-
> cLP#3_jm|ABz^ep>Q~M=+k`&L#45tRcmN%!3EaKG3wq7IIMIXeN~maa@{i!
> zqxr&H9DDEy_3Uz2^1H2H{S;@=I=4|7)tCebm{WpZa8(?cOZ2Ht>01#RJ)J~qzx
> MiC
> zf$wu*-2!<HM=Q;WY(xAm=)k#2OZlUtzPSjnSNEbEZ-
> {i}5r4yAk9fMd4^!MU_O2rQ
> zl$8Af#kt8$)#-e-l}0VAx@$kiKiF9P(Pj-TaX^z!EsAg+J8MEu-n46_5e9THizG)t
> z;FKU9VjTGCdQg82P0rW3EmRJZ&H*|!gE&I$P-v9a^Vf8qIfc)Wr2YcaoVJu-
> mAUbf
> zl?rm1*|&rqE|FP|kfn{OufCf1xIjAHxAHpn$e7`p`dI;-
> Xpi>kWL#IP{JW@MU1lBb
> zTAL~m(-Q+keDuBbsi-
> 6+>IskD3LUcYeH<E5iw>)$Gr1AZhFUa5#+2z&deuF2ZG>~&
> zjmf$S(kK+3@PAqb&9T+*`Pd`~C=_MCr0*i9NgdF)(<OMA=^-
> o&LDEH0yliZ=OaFy-
> zyEhmIE-
> SyU+!kPQd;0<&BU;=xmF_lB8M)~f3(oR3!~R@~3gR(r!ez~PXx=d_)T;sy
> z@1!#R^B#h2lQncV*I0|CY+}CP&^%S$*e~?cwUIYJg%fG_qq=d8NiHnEk?vy&
> B%d`N
> z%CwC`)Fd_)oQ9ZvJcgXb-
> #8_yzJ1L(chCV>Y^CeQ3=*#gK;srotgoQ^7(Rf<8dw+{
> ze8UcB52v}UQj@r%taW1p3cA>@*Cllo0){1r^qa&H7pa(HtR$32-bIV(RgYFv){-
> Bb
> z5io>O%GJ|KXIrM`(OBC_9JC5X*`Ejv=f(3cEOm%^N5gev*b{!viSbVC*yhO@X
> mcs6
> z_UA$JrW-
> 31ww<+`h5Y6%D;9l>tGilcA7UJ<h{&|S#Y(8BKjp~Yw^wv*5W$IW0gEkk
> zQ13gK=*Hcb66)wX=ncDqSXH&tjH^fHZO7jCD@zJXPwxZl^=nEs1jH<F*H8EXB
> PqXP
> z4lhOr^=+LrKlPFO_0!HJh$K~IF}KyORifb{22}M`E332GzY3om^tfU_${&57oa7X6
> z9LJFm+A4=giEvG?&Xt9|dP{<xBslPH8IepZZGPuh;R0LSh0!GCkS}Dwp^3E9f>Z
> 38
> zsc8P|_ZOqOYPUoftZv8<!ZGKf;lgjkdA)3TL+S=@r#|q92n&8`>3j<4I7Pv?lC?W5
> zf^|}nwJYwd@)+{?oKoeZK!p^9zDE#*gGPZ>O=dax(pvZkv&6^0+_iap7XKq2y
> uL5A
> zumY~-
> dDwf3(H8UV6N~dM3r=Y6N$7{U&jN^!lhSN5lL|k@QhGhkzLHqG(O~Nwiu^1b
> zMmHls?S(Qi|K;MB0<kGe<F<QG9gpw)gvR;ek!s;>Wq;)s3i^Gs1=r3+6ql%4PtS
> $1
> zjHBI{d&>T#-2y}zUQ5BO2;z$52}8Vp)3z^8+x-Q2!|R4;Nfr~sEiZtxU^lLb%;577
> zGvOVCP&E9SO6Z2GNNcT*ZfTJJ;&Q0A1jP|551Zfif#42T<hGK8eDZYL)JZHvNT
> 17_
> z+-mHgpZI>^MZ1I#=cVcrY{^SXbkRMfsBWwliAnKa9m7L@k}oVGqYj-
> zRM<&~{~#4q
> z2zyhTHpE>BEtP8jP--
> t$XBcX4I$J&6baz0W<UeRpuxr4+q8xun7}tL|+_W6H+;lqK
> z)OOHDTY2>1CJI(f;>N~gH|(S!5>ASRWGzVe9gj0X<cSa|8UZWQS`cW)(63ih9L3
> |f
> zC)SSwagE}a)DQH~&wvH%mDD>oCQjg`wU=v#p{j72q0Mn8>b7*Rq*#_HSA0
> )wU^%w9
> zH<knOV!^ClDXeP#*Vnj`YDs-
> <J|}UAjz5w=3pow+d~!k`dbr~G;p#G|<b?Z`w=A$8
> z?)rpn95T6M;WNAnq~&DaNzZoVnt9GkHt*{~><(O39%hUIWeZ1Q>@)n6+ID;
> |{yUF8
> z!leiN2u$|%FQ$5Z*}?%lCQTAo$eS|bsnXoU;YpfD*K4R}(LJ;gE1}I;XR~-7Le$qE
> zgH&fgld9}1q%B^W@zE~T29&Qf&EoLaX7SpReP6}1QvB%d6h)y^i6>ICX|lfO<;
> `;R
> zQ$2@5If|`N7e)z7I?CvvXb|`Uib7M1DV50D9S#uC%u^i4XFpL@Y-
> &_sM}<iFxCDpG
> zW9?mSfwRom*79VG(~a&HztJ{SO0m;=eKC%LkJ~ko{uyZFg)n0JOG%djv>f&s;
> LJ0M
> zP}N=a&}N$P#oZzGt?$b^$Xeg%RFK%UHzj{aU}b?X9V~uIBq;Ase_6dNrIv!s+U
> k4f
> zg_9P*LGc32!~yqhnk*W^L_-
> 3yT5FcV`;6=H><f`7Cpr_H5aqQ`G=%8p7YNq%cPP0N
> zczS5x#*LAf;QFN8Bq8&KQlO<zwZcIu&~zqJEosnKX&PK`TDm_|f!+ovb8Wx#ia
> Of5
> zwnY;ddJrIq?#Qv;e<vN<%;DDy>bqmfQno@v;fA<2UgjX1%THuc+qzTfI&=e`x
> ox-E
> zbUK2W`W(j^{EiD6!|z_L81~)|U!OpY7i=N6_{QPc=1vQ~?+y5tx8OUrRnczAvP2
> z5
> z=#(C1f%M9NS}i-
> uBEHAc#W83ws^H_nH0jT+43<YTpJr`mm^Xx`9ZPQMFUXS8$&P-Z
> zZCV(>6$dV+vRG_cd`*9Gm}J|nKGvkS|E~Ru`ucQ#jxv?POp-
> rh<_iUxt`!TeLMoMb
> zX@wfPOezx%8G8qzV|fXFB75wR1gaW+k*1aizofL5^z&MwE={~sRG(2Bv#`Z|
> 67p$D
> z*6TgTQaMh~rO#<8l$5<ZyW!*+NpTeTUsQz(&_Z7+WUY}E@kx`RF(w=mY-
> 7s<>XDf=
> z4Lr7WQqDy$s<KBd5;`Z6=gs6Yje9*+YfvbC2s8RpK1f)U66qa<y#79kye22UpuL
> Nb
> zQo;0|?m*_=&o=~umy-w?-*K>uoanKOBqd*ZWbFO0#pKW214X-
> uz|!~^HA|hLh9W3T
> zex~63CM14_I`rW7DTB*+5prs&Avkj{NBpgKk&!y2f=6ngbSjIO_nuDmf%I0Z+e
> -zC
> zEfLhBtP#|L@6%+`TQknDrshyvKTh3yz0>@r147JnF@cfp-
> anbiXyw*8Axc6jx^?RG
> zT@3DOY}ws6wG?LLS3=!W9g0R!cfPB~tLR9VsF<OV8jGCndtu%pHHKJbTg6`W
> rsu7z
> z%(+3l)^tN`tAR0^v7u#56~A9=mOY%SjIF0zN`>P%O>C>_P*rt2awheaFePo!!C
> U<A
> z6-
> qU9+Q+#2Xjj8wJE^Tlu$$99YQ#8m!MTw7SKo6X;as=&Hv2RxTZpwSF(!2SmIoa
> c
> z2&=BMXx2=xnzj-d$8i!{bwcfaXiR?Qt`Q<32q#KnPpnklP`qlo1fJqq2P)RlY15bM
> zJw>!e8x$U>o5rQK&Mj3d*}c~*|GJX?yL|fgsgHk^{|LL;DjGT98@LYEo3uONJ=f
> Ue
> zx*t60*Ra7)!{wd}PC61p&}Yt!3n57gYwg%pQHnH5GuwzW&TGL5=1<lt*G$7FE
> k&IZ
> zV<B-
> 364tRaY=FN)8%l0)eCCRWyMwp|Q<c(mN<P{q5{DF73lm<NXacKR?zu{r0@r{=
> zkX;<?#TUaltL3d>tLtNG1r2(}#TUyrP_nvXOYKvENiUpExtM<cOO5FuUbWY`M
> d;ku
> z&|`k(wB!bJxRal|YJZK*k`>vxZ^3LNL;}+)bPno10GM&obBWC|j)&cn1=C6G0O1
> p_
> zxkc<m@!xuT3#ho3rD61(KyV4c9fA{NhGB3?@ZjzagF7?0B)AjYA;H}xc<|s5+&#
> Fv
> z=1tE1-uK;`^R2h;|L$9FuQk2*u3g<-T~*z)cUM(6rbb8ev;)7JcmwS!J~F4D1}B*x
> zAzj5+e#<Z0NKGu02GX+U3)sRo1QS~MVh@$XR-4#qIFUC-pllpr8wt+!;9*4?-
> &qW>
> zfPVlb7fosn)<{=$qIa98i~jnf<Y1GGt{3U*xe@5Q3>*_Fkzd#*h-
> A0ROpMxR)@Cev
> zJ9zjTtQ$M6U%{V}E3OQl(9HZQHdE`Na&A@sug5pd90U)GclixX${z?kN_>1QP6
> W8@
> zxn`^KRdMQtB0QGf<Zh~12;{tuLs@j9#_H2!$|HhW%`Ybq2Qo5FueUh0Cn<;Z?
> |$w}
> z!p1SR)gg5uUacjbnXmjg@MhMA%XYy%#Veuy)BN_Dk}+#@Khdn(4W|eCbZ
> QJ{S-+0y
> z(?r5?El#ieV4l3nt4(by<*O=XMbM`5opQax?c^ILVDw$B*Hfv_mgrIW<Gwj7j+;
> P@
> zZ-gNtCVCa%VOzZmn;=iKt&fB3;Bvvdi2Oh=PfBwJ5eul_hO-)HPo>@#ok-
> l>^y+q1
> zV4jKJNyJ?G^G&H_hJL#@!NPXq!&Qoj;ualR2e8_Bv};4+4?kmEi=V8|P>v#Dq
> WAH4
> zC6}aL2>0DD^BX2~eje7Gm8B2`jUtpFj;>B5l_S1MaY;Qu8}YZ#y*nh$UL!4OVj=
> As
> z^S#0*NUlF@k=I2Ho9&*2^zHSb^nNX+q(O1v>6nVfnY1^?$ec^i{$gXi9{BjDP*
> FTO
> z$?Tk`=G)Cl#f`V_p2r*cevMXpgEzd}FTqLKRh3lrTcd*mi^1!WPAQ(gv>S>O;*yp
> 1
> zvx8Q+avDE`C?H2l6G@HNk}00qy90|QIYWYt8X5#k<dCC&Sku{_CA+f%+eAW
> RG#tSx
> zrF_VnZ(uR!hf<2CXMAH{mLL-
> rCN$^^b^F8Ia?cO4dp)=}4WH0B^q4;tezs~7j~kVQ
> zd1db|yHx#kwu<eB!`(B>?=O_dvn=?yrAR%~+xXh%N;cw3biMFxDxwrJzm!B#
> M(^F6
> z;if4ATGjg~EjyLS4eI4@TW0mivvdneqOz{`ZZ<iv>yr$tJTOe`DrY=hD~E2s4wT)~
> z2BTt{G?CmY!Ake6Hw$vS8U)~zx3~IjX%=wkF5?PoO|jRBHT#MjRTqs#vYYj-
> 9lTKz
> zPX&y}Z%l;5-61TAhTiNetZ99n=}k$;^r;Nsvo0l?pZLjCA_7*M?OlczUbPi5lu;zN
> z93`JZB_kg?EF!X=jrflzUntRJ>GmyR*Tr9x+}6;P*=!zd*uWCJ+>?zGyyl`SrP~CC
> zeoID}Z_i$IGT$N$Ytb1{m}%1a8fMl=`*07XLb~<o+DXa8&WmD&-
> G0<aKYblCPk8u%
> zI?8-oja0IUJDkRRdwdd;s-;*StH5cT;58YdcBb@7y+3IKr8HK-
> BHQlW2emVEB_(CT
> zK_#U)LPUJyjE4`S>9Dg<iPAXsXeM|<gS@{vX!0jK`PRXA>+iDVBb~UviOp%A;g!
> Ox
> z$zV{AJ>BmMt~1Ga&@gd!#c<>_R1df4=DT&;jD(#br`E^|jfcR_wtAjT_a~+J!_F
> W-
> z4F4-
> <(1;d;0T&3K{W*DQoG^NZ$wFta$%OH^WB4<426*fke79+^H~EO$<Qi>iIZ}Y|
> zp2JHyjbM=X19nz{&iP&r7Q;ByTHkeYO>B5-(AAS%KHL358uZvR8CHIgqXV-
> t!`{e%
> zrWQ^juP)7I^#S_aF|v2DI>}RxN33Ycex@UPL$u<Ax8Ir%>vXvRj^@#9tL08Ok;
> YGK
> z4@NC9<{q{!F<zlIs32taCWCb_E!$>n*0nI^==w|PtcA>hri1G^khxknu@sA=L8
> Nt@
> zEv*HL&7cBZ`6EWkc>aEGE2K?{NLjndZ=3K};(qcTQFo~$Mv8n<r#_9~T@q`#nC
> 6QO
> zV<$<Mk2_(DN^tk)Se>?!cXsj6&`alJF&C<1>PCiP>#Lfm@X_&@-
> jhcW+6D_9FZTe8
> zWmSnxu=Lj1HHo;soY?6@TB`%k?o^B&ioT;(E$bSG6~%!=fEt#o1M!nFZ&Ho!+
> |#C0
> zVq$l|pq94ZOST+|9~?r_Lt8AYp{Pj;!|w+RcbON0TdTbp8a;3AD{P{L)7D*gk9!_^
> zuf9D<L=M?cLZ@PcA0$HIR|34K-
> dF|i&eeUoe(DX`S9JueWZR;)E1l=>^pq+ww`-6<
> zwz;_^esEhg*>+;LH|FS`!slw%u1ObO`Y6o1Y&XnU@wV5*49@%B$Z_fg85~~G
> #g=DR
> z@iUXahnR7mBXMA8t|$8fIew(lga)U)r1(Y$E+I!!STE!5igABkHc&~x$aOKf%4|
> %p
> z*@Ly|opZMwZZ^)i9H;V*9PN?}OIC~+=QR!LxS;j2-;wcR-
> 41;u4!2y0#NAoE&6D#)
> zfYgx&%NI)y>-
> uNcd1fUJNqR5WmLoeUju84$UFT|1uFDCtI=rXrkrzL^CUq^nD?)$f
> z%8>Ww#Svr7S`-P+kvyN~+ts67e|*HFGu$i(VY*j~N~gKHkH|-
> MY&DKwTcMZ6Urd}$
> zzra6f_^oou9bc`P8@xDraHQz;{@#LrbP^H178QxJqCiVxDXGgP+?lbmOTEZ2tiI
> Ov
> z9qvOWo<!?FC>QQPC>Z-
> ykCXKSzw1J<LssqKpRNr;Nm|QRyoz&EA{>%s9@)DtYLlmX
> zJmb)cMelFk(s$aI9u;Z|v`cN_{8m%A!*SY|r-f>8Ir^3BWCnF3lfL0zET9g}_hfxQ
> z(2Iu}I1362R1PhP?#QP$h|I7K6&#NB^oFESSKB&*;M!$lHcFEB3YMod`v(b?+H|
> _q
> zR+Lkq>Uce3kv&-y73_OGvU1lQtqJeK>o-
> IBIf&#|9tS?l9@MGj`A$4m%yFK2VqKnc
> zkjaa*F~^D`Sy}~o*p0Rdu`j3iWTk+hls1hWJ8q<`s$Bwl_K*7us&Rqao8{frxF2O=
> zm?abbxxj}A;g@Q)tkhOMF(5jz3{GjfJ?WeSu`NL_an*5^kA>MwBQHrRyijE<hE
> fmT
> zL$ot*&jDh`hVM9Eu@p)8(X}Qa%4EkFzN1sXQdZTBrIhR7@U~}@_ecq>hd-
> T?s>~&!
> zCY&KH4~D>ZFk0ZD)Ra$a=;UA>>A|$|>~u0*z)e)0XyrWSUl5X-
> @g{hja48Ycvux;8
> znJ1#qo=4BZBX~rZ@Ntu-!xmz@TidOjbIC-i6Tsb0h_i-=-
> 3WpaGS^{EcYQ9tmVQ=z
> znZ=KJs2&yNPgTqNl(=&3qkGqPeX8fQk!DwSeVgW>*)sAvPKmt3n5uodbBmn
> )^w|Wu
> z5WPu(+w||DOYhDJ4hS~bdduTpiXb+_yP3;U_~trsjy!1|09K^rl7IFmv`3YJjw+_
> 8
> zdb4H^zA?D&rOL4P3t0JGfvx9z4ffGkcl_>2e81~SjIZG{F&(6vWV5LHElC*5R19C
> _
> zPl5>fml0bC)y~@xT0CG;;q{V8_Fsk_l_H6bohI}?Bngj*p1>8vPlJ8LalBV*p$uW+
> z<w@Hq@3ZB1IjSe+oC8?PRAvPSfn6}Q0HIY(<5w6RujdorCmC$R-
> $daA%&?6bx+mDJ
> z^wOlZ-
> JHgBWY6q|QD&{m87HE5q~(^KH~A}uQL4xx>$egL=ch7wR$H?B$og<S*Kg(<
> z6<?t7=U)2JSQupAn7Nujhq8Pj=w5Dlu6{D#<6ge3QU3My-
> PX24$Jd81qhCEw*Mz!q
> z=a^G9Qf(z`c485Sv)QRr#cS4t5Tx}FL9(fbpUMp~H_x<J+TKZWa=`jwVtcXsA(P^
> f
> zvU=G#MKYWUT&}{CJy~)}GZiC&<5wY*bR;oNViQx$d|qBuyl@2jLVoLIX}xwHL
> J3kD
> zWsR%BxTfk`g*}&iZ;2(X8nwN0PMy5+gIFoO?3lvWX@|LXt_9|k2}4&uM>cXU{
> ug5?
> z$Nx{p&|g-~-z}j3&$iCDc6Ro^46tyEs;avKgo^zy02;dr%ozIDy{x63H5$8!y^|@#
> ziAv{}RTls^#VSKgpj0|Q01p)hFOZ6plbekjOa%gf;E&$^vd;cjStd|RdpmexRP1W
> X
> z@6diFRE!o-
> sDm>fJG;3h)B<MAW@2y4?qq3VVGgn3<>h6!@vtzmH88O^g_y8AL2MvK
> z&JbsIsF69l3(x>y;0!e~wt)bdezobJs`=H1{}YnAxu`e*oWDrs;Nkf<NrqGG>gvj7
> z>|yD^X76Oq{vXl+0{x-
> ^z{UY*8|VKa4IVa@#%y*F=zmND7)S*Ib5eo0{$I+?+}_^Y
> z2EuOaWDm8m{7qc&rm+G3Lnd)>0jW5^Tx@VTasRs{!sTRQ@8ke;W-
> ~FegF>8)VNULB
> zMkZ`_9{(}BxVWe|!9X}QAnt!xV!ssK!`{Kn#**zH%=)F-f9brLr43xO#f+dvaBa7B
> zaDq5H!~2Q>%-Pb;+(7#uSsYBw{zDFe0B|(}ga7KCz<-
> zM|59~s*8f}AEi9d(_HZ^r
> z-
> Jt&=Jsg~HdVoB?)Sd(Ue?X6elcfiQ%>o96OBDG3iSBa%slXtPU%~|ayQ=lusP$jk
> z{}1uPmCn}I63WiQYhuRD4Kjv6%(%g(+-
> 97nT&8e!F@+eLnsM;*!Y@rgARs5?FFwMD
> z9#MO^lG?#XU{26Kyjc{DoZ$CVzy2|l;lnw^&h(dy$zM<Z4PO%=kei$1Uz|<6_r
> q)k
> z9e@0M#Jhj4J97Vg=&Ob4?sYPP&mShJ7!*Xq_g&qDCCygiVp}t<JvgM@pYao3
> b8N&q
> zjy{0;+kFSlgq`6V{+_M~KOJK~KsK{|Zx(!?ZmzR_ZZBma9s!%59yWxZijHC`#hyZa
> ze_m~8&G<eXRtP`cj_z(7{LEsR7?c*)pb&Q6Ly&nCpXoJ_C>w2WdA<+BdZZCLf
> 3WNf
> zF8}!v`*E!S?pIQ90h-
> Bbf83IMTGTDyGB+rDcsOkLeUOnZdWwd_XQF){BmJTc5DeN8
> z+a@YLBpD$5tSdV*SlD~YD~p0ITlGg<`BwFfE}v~<4@^?FOb_0UEAP4{U$qMix
> osw1
> zk>_J0tMr=CHAf&9osaj9n5AqP&J#RL<Yw*NSGnrondSHGSWnmvKNWha*T_
> 2ptc9c-
> z_(!o!k0sd%wy>)OjHLIld9lxnrpY4G&*a0si{meoP0|#=l4IXZx53<D@}$wr1)s$n
> z88jt)4(w9;vgA`PtE9{Ewx=jf)Ov{^(UP_<8ot$3;4Mk*R^W0`qkv0I^O={DjCTaf
> zPwusF<^o;P754-
> cwv^+Rt23#n*50IbZAtf``Q`EBe7t#+2*#~4pNCH#ObT)#S{SnT
> z{z+$d-_B$ZHhNS}SoOq@QE|Z?9#Fa)_Y}U$KCj?Y0cJEwys(~G-=Z?f@-
> iZumOrjf
> zUl4HaTx=Tldekmqg!Gw3^;s-=4WK*d9|Er{v-
> T*=go8pVwfgq+SiN+u&4P7fPgcG`
> z_v!lUovLo!cJcBiByBHrUV*H)M+(&jyuMBI^Jl$M9c{#P5gOC?bR7^BKSI&USM
> u_}
> zzlG}Vfb%TA@R2P&5=TAm^i&)1bnyn}r=VfguD-mKb0k>SY)*mQ{k-
> r12+rposHott
> zRhP~e1gE^x1%bR3oe49HqQ`P{Wju0I3pL+l{7AUvs|(RDO4MEG`o^k6W_{DD
> K|M2&
> znCoMJd3|scp<6fTE%@E^Km}QoMJ0Bc`bSrBc&zHId8BwlU3D^%`uKBbfad@-
> Y^3WT
> zEWDnhn!C|*L0`2gH5uehkG?U}-
> &wTepm{`LDk#BBCUGD=r}lYAwUIeYWyB|=iNX_W
> zK(GvzaQgck4%b>{Dv4UMT>NO^RlVGkj-FlrLr+^b-p+owcj#ySk_C-
> (z<$+qE!nZ7
> zzLUZL#M1C-
> ssrWzLcPdu&)CwmWLtnw@1T~Wp>?GxI0d`voN(htzuRZjvWDhB{2>%_
> zin>xPcckoz>=8H?2u^KoZt>geByoyRt-
> 4@KBu%#qioW4qTG8_%S7PZ}(L2)L!*!L<
> zHYI#ybKNDm(9wx#Yh@7JX03H_{bU{)<M0`S{sT?u%fY-
> #TTCNNBR7vaY@^6b($;wh
> zDsSg9(}0|2juzJt1!a|p_1g8<7aDKkD|j>aPGjy(?OZi(yfGK?m%;*7T8#CDlwIia
> zX?9<zfTLZNJG>&OH6k3w_&?l#2NO${5ToU6+ZaA=8vV%8E1yK~jbRRN{NB8*
> vmxdL
> z45B=Te;U2JoAjRRU*BN8NTu9&+U^TgZA5F>RvY45-
> g<c@orKpueL8|lmfVOT)Uow)
> zn%FYg{<$w2i3y*V$fVd%=H?att5?~;yIS*|NB(glaM@eSrZhJStHY=`q9ocj2Xz<
> W
> zBbkWvKHZ70ZpURPDq*I!_3UoEmNhDD#%3Y?B1}qqUb20}nV!;vP6IuPO9uO
> U8yE9)
> zs9`-c%2mUtE<aftWy~@j5Cc8c=fl@QH8-
> wTUfI!c6dD#=f$}Iwth#k6Y&FQ`+JlA5
> zgzrgfS-
> RTcyGec)DfUscOCVPmeswSyGr4homJk*8yzTp)AL`oc!{N!d_&@qRmHeis
> z#UZ&pVkKdb^U})~h~k$RgZxGtq9A;{?2dB?UPVoatzF}*bc&W-
> eFi;A8_kCVN5iEr
> zc6a%@Re>^tiw6;Dh4jF%1HL0^E90H=DaNGw*Y*0uW!gBeO}Bd;>`=7zB@RxT
> EZ5(L
> ztC^}bTqC41`l}D|dWIL&F=^<KUU)SzMu0J79nnfr&rPWh$n&4ZyF!Mm4sTT%a
> BYh|
> zSltx3QA(BPavs8P9SCUD>mlw#{Os9k1DWxCd``^6(jE@_XFg*H2O+AXog)=p7)
> <JR
> z54V@}&-f1UwaE-FqTUekw+e~vPYMy?--
> $VV1~)Oq7_Z$(D7b}EbJK&rcfaXEo$wTE
> zkpymXfy08NPLoqe#82LdjTI?zp1mxKWf?j03QESVYlaC#d`a<UxhrBr98R3`51;H
> =
> z%j&lq1dbAklfh)du=hXQ{qZUqzAfW@Id)~+8iIh42%>(xrJP4hx)GYO{2od9M4
> P?P
> zSM=V6Ye-
> 1l1nUTOF!jKzl4?x`YQjO0A#yc>{cb<4c+0YduQ%ah2Zw!ZtSaf$*{|o$
> zPj4`Q7)^p*t8pPjgWjr4Bk=Wfrrq+H&U^@cGiKg$ZH9p}cLQyt>@&PeXy-
> huFVIq+
> zi&3(Hj_RWL&2LbhsKFA~%A4y3B@^}uOh=a^Hpkfwlp^1UcCZwT5|)XU!ihXB
> A>q;7
> z%`uoofoH{LqUDO0e7h9GL6h}NBYV$hTRjo7sU9jp!dXcrCjm@8$DO2gS3_4m
> &iGL)
> z#o4|d2C6RIS>7RNqp~hmLF}oob7m4assspXCQ%$O<sAv0EMYE9^5U)U<Ivm
> L8=a={
> zW4t;7pi(dAwBmg?t#IcYJ%*0GL#(-
> f<lm>hbF)#QXx<Wya`G4qPH(>)2quFKvQj$5
> zUnlnF$Pb=VP&!&d3_{P=SgD;RgV$?AX=<6{RA|MN=Oep9`Z;2!N`zL~oAS!QM
> 8e_3
> z^mZ;fvPfw>vDU7lDixj!Z$gK1`TiVvGvY$LZHES?l)n$iK)*(rF_%`#6%Ct89@mpv
> zN2`6;C>f#1D?V_l7crJumhb{&nU=(8L5G2;CFDJqwWT|HQORW-
> {YE9${&uxU^!;9?
> zPwey4qUX7?d!Izc#j7sBW$Twd&(Vyz>Ux@XA`aac%tTkEoX9KYKK4Uub6yQO
> D$Md3
> zr-
> 77OpUs#gE)tE<FjQ@X=QSyyhR~!)=W+0bnJp6NA&(EIa`iN3*9KEi3nY&hJ%5gE
> zmM2fAm-sP5Ck)9(A|XQunw{i-mSuK&`Yv<Mbo;6vQ-4N;*+miEnPrk&-
> s2v7oVaFE
> zBHAG*>RZO=8qR=sfg6&(G(1C?X~Z~DoXcd78p}Eg3<+sHozfrI2&JS*XvHS2xB
> x<@
> zXQjfP9f-kyTCUAu$~rhH=1k{*K$XY(-bo_f+JT5{FOp#w7EQDxnp4;S^TYi@iL3io
> z=<?$D8&eL2GdB8$cV2<7tN*Fb+(bK#<jut~%80_xD6&!b-Oa(RCg#(Py8-
> *pBczQ-
> ztlX&k<OoceX@PY!o13#^yOlE^<nM!Jm@Yx$nl_t2B2ue*3r+RQ8A^_~o>=}0X
> epoQ
> z>*IQO)w@~anOr5ppV{)(d<dPg%VwS8;H&ZaP@fJ{@=8=!Webb8>U=9+84_
> 3*guA6E
> z7@<kH<dINPKlB!iS1mACm257GN2Jkb+yVZuKg~pFRi#ts!JY5^F?uKwU64<2p
> NVke
> z2lHail!|$F4x?7QgqfH|Us=NdVkKOamF@8$Ja*O-o^Qw-
> j2bAIQ#Z9qtl5JU;yf)a
> z&ATw^dF+g_jyrEkLKO_=nGf7J-
> {u%?p4V$9m}JgTd|pvc*f%|vIJGn;zFgj&Zq|+K
> z-yK|y+X`-~LxjNl1>*&hO*V(J9Ukd8k&`EW*f2r(+!9{L0AcoVeBt6JF<XTKEI)R-
> zUa6{HsT%@}$T<QNxH&p!#palN>O`Ghq`nY!pr0a|a3jj<W-
> Yldhb78wxW{Ku;{;Rb
> zB<GBVY#n7%9&9Dq|4>b6_|+VYm_@L}|Lm*vxXh<;oEV90-
> H@}ISoEBxbc)!*6eVa#
> zX>>+WBR|@tbP-+#TAgxH25=1Wol8(8J}b0XCn7f|XN6&chD`KIjkz^C_@lS{>-
> SG?
> z0ef(Y*Hln&njr$cCvkWA1cjQ3(HXdPWNQqeI9$tL6@}lq<s~#AU*%<~MkOAB
> 1~2_k
> z6Lh7>6<Tcvc5lk18*B_ko+tLY$0LlcyadszsXDGWV9Ae3oca{pPz~nQNjKOBGIQ
> ~c
> zt(~08zbc+}0^cAqoYtrXe|oT)qGn{LRWi?K6g{>$Ub)qAkd2)`?t_Hw#8*!~<3DP
> _
> z>ptr<<7a<f>^ZM;<%24%t&?T5zvsMZ$qT-
> Cv94?o=a_s)=I)%{v;A>lc9qPFY4h_v
> z;6^NqrlXMS2JxqY>|j25mg(_{jFmR@nAFVVhiUNWXL4<BqAbsM2s4gG(28skt
> 9oUe
> zA*)l#g-T@{XK8ZqpBWiO_{*B0agZ1rqb1Whdhhnpm{44;EPT=T6Ta?L(8?Jd-
> 8aI+
> z#4-
> t#Ly%0H8c86IBm1yb*6Pn;R&5gndVWR<9SEDpNGGW!*kh=Wd?J4HHW{p!%
> hZ34
> z1D`}3td4Fd$zp=<6yr6VR5_}7l`Lw7_6VAyaE8hme&A}pR^-
> 2$6LxMxOska8n+j{L
> z*oH^w(Rh9(_GXVd_|yE9fAgq%KR_(n;ug5m6FFa%o^f~T+5S>6(OZ|VEL;s}U
> dKG4
> zv$AfhE_rRJMfllsULESyDMgbmTLq1@*LJ3zoeHrxd!mN6T3C0bXwF||^LCO(9
> B0Nf
> z8(RrtYMF;bSUn}Lf_ltbjg7Wp^n9$`t<HBZmnLxO?xrrQ3GSz*F2`T<Z^q=`grrml
> z5+w5`;M52(^0TN4h8D18Z`DFhWEH!X4|d(KkqJ6o)Q3qca>hNM2}w32YM(HS
> omMO7
> zlV%mllO@Xi+%XaplFZ?QP|>FFPcexO`@fS*tt!#ARi_m~>Bxw3YSL<l@?}2qv`J
> k2
> zfVS{OFU~D;u(K1{V_Mf_>|M<?wD_wih1Cu<cok}shsCfA@dsxo%3e>^=@yN
> 7qk2vi
> z%id`-
> #5dDbov{iT8KA>gp4~>UUu&Wqy`M+;?1g|UGj~UmWI4jib*NE`NZf=BA{h8|
> z(0?+{DKUUV&*}3uZ>J~S2yh-lP(HPOpqCzGp$Os$jz^W&xd-
> fb=M#P*?^!2H)&G%$
> z0ee2;DcPta<7FTf9B*@aTK;~P2u9G%e*7#<zp?3i|1H&&QkmD~*roD|EfNgM
> VG~oC
> z2}OcL2I*1)eo7o+3~4QlZRVu@7UOnF{W3Mr=Zpg<j1mRRZw15nFlA4^@SPpE
> D#lAn
> zs+V&(S(d!3x<RZkfrU63l@^Ca43-MHUWLzFXw;v!RIpADK!`JRT5x~Z5A}4TA2Jr%
> zG4rurOO8vIofFq9_lzV*?3I}TK?HO~M90y<vLBdJx>7Ejp11+ZW%L@xRV38({A
> eu4
> zJ>S@-J51PL_aCE;DQ|1bz8(vkFkXHw+BcA{8k<(B@H$+&$Ys--
> cP7RA<4Y}wQtVYN
> zMOr3SEV-
> 7<n^BR^LctTSs~ltlpelaZ4zgn20HH(7Ddf0fUSJMIv$OtmZ=#rcBQ_p^
> zrv8Y5j`KX0%5vD(r0K;97xfE`z}o1f;z9Ud7)wh>Dd$vZ-yK6EDgcmAoUG`kLSb!J
> zBY)6FWI?-!L=QFi3L8e+Hk1z4I*ZBWQ)jhylvfvrm456+DO#Fr;dS-+*80ljHh&+Z
> zEbJTJw)w%`BIjwCUR-
> `C{4xS7eP;SKU6QV#F(Y2kDA>$u92VwAq{dG)O3Ugbcqzy-
> z=e^IFS}T)d%1-=P)%8_u&{gP6?I)}kxhJZKEev~cHI;jbpM*0O64`)BlGNvHS32gX
> zHaGT4^O3K-SXG*x(?XXCzRo-
> vi~3*?bu`t?1WRBwHNE!m5{Dp#Y%NLG*8q}2*3!G@
> zr219RkszxZKCXze#ZkBWm;<Yuda)i=OoNON7y2ZUwlYPRX*bV$mSgft9hS$%{
> jsD2
> zYnHn*>V`e-
> @bUF2&$n&h8Bv|I5owA;;%2Q_Bm|Pr7q;(6wEM<O1X<sS!lG`()CLPj
> zZ*(_`>FLB}biTFmcNK)L2*L*xKom&2emC$QI1yI8*C+dWpm@G>JfqgrtK40Uz
> })^;
> zzow8mM+4WuP4~3sye(hz@k#|~6CF18mc62Wvu)~#;u%e;l4q6ab=#1HE=-
> AO>Z4Z!
> zmnvfjPPM(Q3r`&Sd2zS<r}|!N{VA<y&GX<ur3)JREMht#zcZw*v4i)^=mnac_2r
> Ig
> zaqj|=j$j!5DR_XIh7ndi8B592>Q-
> mtMSYt+Ev9Q|vSh!0o=|XTHH{<k?qkr+Pp5oM
> zqB+F#Zyf<vKFN|#KIb%P98N9r#CNNldr@ck&k9W{l(W?f&Hl)*Q#Hxz6H5{?+
> 7z+<
> zo;i|^xluEQn_SpQhB93yi=Tg0jNL~nw8M5Vah6RH##LeO+7NuIl?~R;N5l26R98
> 6W
> z#5>Gb+0m~g*y0v!aV(V_+?^OD>+`79P#eeW_2eazQgWP&G65%exbdyok?q
> fy7iU{K
> zL@kpx^)0rwXcV`eI}G<#J;QkSKL4%s8LKLVr2$9_IYDxMMj)!rp4hzyq8KIGH=a3
> *
> z!Q|)M{9^HDJvplkzrnth^kr!h>l|P4t8hAv5V;)N?5lxUWLsRAmRI%+U9sds%&6
> zg
> z=~lCLb@PH)Ef)PEW)l_?YLe_bZ9t=aqMT#zA7$TXaR@d6tT{*w$nRw3q~mbK)
> ^h9f
> zViks+@O5wl2=B<y6JR&GmNO#4b^DTa;JHLV^p~$l^f&0nf}sjZ#MD+2Po5Jh5
> +cT%
> zi^&dCe#CaoAY$=Im3d1*(9D|V!aD9FQ&lH4eGt?9c=KE9l+5R6n#i52WlHJDB8y
> 9C
> zMb~sOF|#Hd%VTRAw#s@a1u_>8#!!s{>+SxXa`_~Q;Suw~=dx*gm5DJHOsdS
> 2Sx$pD
> zPRxg?nyP`|mM}$@YebEg83%(-
> 3J!F@iFPOH9nBI5zKAUCr|n*)&J6*eGnW=V!9da{
> zuXKr%8y2F|c+|Q&W39j!OH2UG@(3l^-SH1*{Kg;-
> 5_}h1$cp+GzxMYZp*nGEEYFyO
> zf|}vqMhuxQj)d|j1BxcXyG+*2%`+<$ka58oi>n$%=(u2i%<CoyuF}N-
> kLVJUuVwpb
> zL2AuZXPemd#U?Go#jrW;7yifTPTB$EcKlus@R$08Bkzj7lTs217bC=S!7iR^bQ%
> Xz
> za1@eNc|lJfvP6KY6E=^_)sqZ<JA46EV!5cs=+0b`v~`UVJPF;r*fPX6SVB+@<nd
> G%
> zZ{zq@V*WN{^#SNeuXrLuxUG8;jqxKd`JHoMvY?u6r%CHU$%rMHbwl;E!7D_
> *s2+Rb
> z%Ou7klD=wi#tYqs52s2Y)*_X93?9<=RT^MGk82Q3u-
> bhtBTaB#1;$5{X(~)7FT^aM
> zqUabS6Fu9Xkn3|k+@v=^z&PeWvcJ$y+nAA1{gQ^;CsZ>D4%*12jlyk4jICEla#
> mAp
> z8?A(l35(ntfJ^wg*3QcwZ!0Awbs|javOQE%?dW*A()Jp^+jpc%*QlfiVwU9V*a
> OO&
> zv|hKcb)80lIA<X|nT`?@Qg-3xps{1~QC_adPb;I+;>l{$l&>2%P#Xd9UYbQHI(-Q0
> zC21S|9q<LSo|0|$`Ak??i+7;CnkyG56-r%p#~oQBXJ484j?q`O2ntjYgfO2!23F9F
> zxa~)ViQDeTRL=v{-C!1!%=vu5LlwB0c5gozeumEICimi^3Y`qj6G4xqg0{qa(5Fnb
> zf+sS;8TBnm^5BdS=82iSk&EwQGx+QR%ZT%uv57r>%?J)dd!M{!rTgMs!Vg>V
> @eo~m
> zi<5O0UGfO&$Xd$912)}K>xuAOhWLtQgKyH`p&{FAl)J;yQ_L>x_XD&bL<T!-
> 6N=A~
> zxaalr9W_&g+G3a*ySqr!!m$Kecv(j}@I}tOnDESLhrX9yIL!zVmMOHYk?r-
> 1*_N8l
> z^_gd#=!&wtkVj*a9K<y@cCkQ!wWZIl+gK^A3orhtd%oiRt-T}!I;VMLg}sr8T-
> w*0
> ztW}=dcNKx-
> #ogH4OW55hP@`M)XB5Fh0HNaXz8mHCK%klgO5*|rEV{Q1T>Hga*=$-j
> zIZBjgLZtqYXd)Hbp%8zMY14=I>`b@O_X9}UtGJ6-
> ma~NM6U&8{;`+w!Q)J6`P0Ht9
> zYdmexrYJ~GL(BInkF!J#zC?xPGwHtAIgN%p9)hT1$-
> Ew{4NZKH!Pgn5?pp~_2{~GQ
> zFZWtuc0b-&dF6`Fe2~n`dEHxuM}*1PIIa>@kvrkkS7oMd07-
> ElSDEe)gnidr+e%!-
> zl>K&c`1m5n9KK}O3HRAzL|5%<1!i-
> _>LyjTFl+EFUZP@azFj;1_qQQC3cW;m=0q!j
> z<VL%0LtGFEs6avNB45=#;*neR3L562+qw*b>b87R-
> jYn*dW(Znd`Ge(u82Wp5Pbld
> zHC`6aJ0h#t*Zk%g*|5AN{hOAQY_(dsQ=|=C0K`ye#dO<Wq&0yLUm0%?QlQZ
> p7ZZ}_
> zB6{@^yK`{rF8}Nnr9x7JB_{~_LZm3FtCN#0K>3iV&r)|Mt+s${?1ObSZu7`uj%6
> MP
> zvmiy;L|P>3s#-
> xqsTGz<d|+2>tGu!Hy8!RmecG#$aKGXsK2)$9ZUr8981_pU|2?ze
> z*N{Qt)BbNkiQ_}bT3M==bpW&8?s6{(TNc0<MM0r+;>aJ^B7do^I}0n-
> IKD`nlt?P6
> z_T%hYeT2GZxkalkCMEXf?|&jTn<wR^FFbLopCY#RFp9-
> ;<FnUu)|`svY+LrDj`5G(
> zC+R!5&}Bpw8x-4v_qnLKij8(PT>U_j2(_5*VtE6kf@j!W1!Ca%X~e5eL`j3n(yIYf
> zcecYVg?MyWc}<&+L)&8oAq%LLzL~MAsi5_lH^~c7TG|G{fHZM3G(SCTabogS
> #d#aF
> z+_@$e_kqb4W-(bzJiiBE<i~CS8DVxQ<`;}FWz6C1>6({Gw%K}n5}kf-
> 2aK;FC9umv
> zVg6*+i0O3`)GD~-
> yroBYs_EoZHnWUxjZC)KQP4=O)tI@H(LR=W+)XRKk2w40dcBm?
> zwsh;=yRG=%(Mxpaa(M)ueu!4$g*g}c#v>Q)AX_hQdjXS|K;2spvMjFwC*tUm
> ?`sde
> zbk79qAYlrkFY9#DTZ8?{TCn23tl|CuG8lcI-e~~PD<MmNbe0%Q!ur(MfjEj8El}~c
> zJ<tO}p620ydW`a!N-
> =HO9$=KKCHXko*5#G6bV}0x5X58Pv|EwbIbv=+mt<lv+MVwe
> z911DV>N@`c)T<bkvfQ2#NTg<jFC9s&gB-
> 2U<)7Bq(k@RtlQi`MSWv;jZ&(@Q{Q&~D
> z=8E28m{F;|a_dA_LQT+1%g$l%{~;SKS#YB2A4%weX=o>d%1(ASYXko-
> bU>s?3p}G*
> z>D*c_;N5x=CFQnVlcs|82>bS@_4f_0fK-I(+`g1OK2zN|`)!)Z55B2hG%Frgz~wgl
> zpa>d~Wv(R+(EzV81tXq5T|5(0SJsB$P?C^H&FN4T?$t)K!9$^z0Pb?@HFJNaoK
> P7t
> zEk4QAs;CjBQFW`%2N*e8ZIRf{`)K$y%RO0mGD%<<VrGuq-NUUGt(a@*@C-
> ?pq$rCv
> zrHjyy8B!HQN+3mZ8xB;+%-cj-
> Qetr$RplEHuU;``?A_LI%;dF9_NWqrX1bQ_dAl=4
> z({(6Lr85V?ee&yX*KOUe550jD6I9`?amxuu^mPE#ftiE1E^;jr*qN@EK#z}3=Y2a
> J
> zLu0o@f);J~+RPQ|Qcai9>Qc<S7J+!k6&%uD5eznDKhAqz`$d1@)iW4*Wj;Huq
> +H5z
> zp*E>O*6S2qko1MOnXA|Z*3u;JBrFp+qH!FjFYPueP5B2Odb2z)S>ge(_d7(Vq_
> WIf
> zCeLilegzFz@`U3IZZa{)?Rl6?6*c4D-;iv8J(x;FdJYXoZHIYk(owF9WP7R0$7g^~
> zs?b(u#6+r;U5=#CEiE4~dy&CnRkewQ*%M#;T&``U{-
> AkKFBEhYw5Ti8q~fVowu<0Z
> zOm6l(is0rv0ha0!F&n)uMow%+^v0#J$%)w!FN%q_x~7mMH}*kjS1d2=%~gN
> EpVCYl
> z_x_~tZMombFDE|`X=;_EdRD&03qyKBM7^a&lj@BUuCPdiN=2sk{7e;gE!NhPJ
> hAUC
> zEyZg=gQ{rvq1$$2O2i+x(<g^I)D@8)LUmnIf$W)|D3IuTg%rtzFh@FK#Oy!hlW$
> ic
> z{VBixz32`;w;0Ex)M<4R>KOUNh#;<WuBk&^Pv((D-$U$(NuKK2b-
> QFJZVMHtIQO93
> ztB+DR7Fr2z>Oh>4v!<ZWnYj#7t-
> e2ld?jk*88m&!ITqdZL^p3Dydd!E5Z+sMe?m2}
> z3h0}!=Df6f_0ZgU%bUa5Q1JG2T;q1Yu;uglqUZWH&5Vvh${Er_c?zr0=M@ES=
> D~AE
> zEdJh`g5DcR@8a0qWdqCo1-@en-
> |xFk+{v!TS0mL#tN^ehAq+)|^<aBn!CZUiAX%hG
> zFY7QvP$k~Hhc;J4$>&E}Ki}P*$}UugG4N2GWqnXyYqqaAVAV_4*=VOh-
> `Qwn{SrtR
> z6gFecHgxNCF{keh4OyjOrnYUU_~<|&S%5hp#24&6DmRMUZ)#i4V?bDDqS|e
> Ekkhzn
> zX<wnK96s|0SL@om7!1OE;kLRh>*?HQCOPL(bU`rL5jJ5dYOjkPKD<|}Kveog*k
> 5aV
> zZy@5EV%1H6DM!93>p+kcJwq9aV9jSP{(4z(z6*!`TMgx1zOlz4$LU~p@{zT-
> %q?Dx
> zMe2bn3Cj5bL9&iVSG|!~xcY6nX<byLqF_I)<f6%_G4rzT`2p{>oZY|Y9uOQp4^3
> 5c
> zo3c8Vh3M&!SA2SE)Kw>vRh=~pE<OC{zpRU}kzJ>JV-
> tvlF+3q{<j0}hzn~5N?4jW%
> zX~)Kly9c$E8Jp!`YOt;1cDlQZWW4O+1d+;L${cT!sx_QzemgC0%IGUbQJvh&N#
> _2z
> z>gH9?IATH_Os@(v{3<{|ZQ)|Y+z{tCe>T?OM-
> =j<O~YkRcO|^wYm$|nGHZA$4j5|$
> z{IxLL;M?GciS$ot!D0DmWD~BEJaw-
> X7lH1ahDkIUPM{fxu>RW5mG%to0^CX5Ic#=J
> ztr63sFnJra-I^2;I*|vIZ|$|omp?5^u8Tq5nDp!2Ha$HpErv8`NbN|WlXof07?p+r
> zS-Q>@PUK#Mk4AP<+2+<rp|k=n9yumQw*Aw`AcYy>f<3-
> kNuOQVHpS)+D~(Bl+h|m!
> z!G1#EsZxm$`<d*^SK}t?*W%6c_JGfHii+}q)x}NhHA?DJiEmiH3xpfuCvhIXQxn
> N>
> z!#2bWJ3l98@*DMAOJ>kB-
> *;0hR)g&{x8XwxI!g5G0az1GbNZmTH>`o=?x5+fl~<Nb
> zB-
> @n?0<569@>+yr>D7!u>HDwFXBX8L2>E2Kuc3yJtOw}H8&&NDV35#@DQ<{Jh
> Nf2I
> z$QOEb?F<}}WwGgd{81hXqrTdsm|ft$MZ8TkAeUKD-
> D>LxzsfMIDGd^EOd_~F@X4>f
> z-~?e-eFobqS(A-GQRL(5bKIeq-
> Nr~P<D?N4Ya+)*LO62MIM(3ZrE@=2mp|^FUU1M2
> ze!GmX^<1x)1<1Uh`HJtW!ytRb=2jQ(E2DYnQFedDx*|a^N|s<?Iji!BWb6FS!EK
> %a
> zH}J0g634#1Lx31_Yu4ncn_tjR&Z9Kzm*dB2G<<cATOqcPnfcG{X!!;AK7}44Myf
> ?*
> z5-6H34S-
> |%mi?P)QrVDjlUKrih7IQ@*o14|)m$vH$zC6dYD*lFLn)NPqkj@C0|p1Z
> zUb{FOF|$Hv+>fn133kd!Sv%b@sy3jd6PWa~1<Bu{i5@WNF<!Dbovx9f3c&o|
> RxJPk
> zMtjK00nh94=R9ABAS%5G7^x%j^D52}01-C9B6!Ots-
> 4~JrDhc=BjE1_xCFzlCW`66
> zHocmd23RM`8%R~pN#io@d|Hf1UqeF+@dy#_EPa<Iat)!UAN6dsq<nZ6Jsvnz
> kv2Fo
> zOMp$<x8xFLCSr?L5|N3o;LKivwO-
> iq0d+8;2xGRw^FqQkut1soINq?GE&UU|lKtz7
> z(-;q)5|PPQdRw}t<N_mQMZs`RjPJ`}MzAWHL-
> Qy`B0j?;Ad0<jX1&ykzrFykSkEdv
> zCv{za>)+2<d}W;(u7r10ax$6^c(rR%Kjij;RkNAz`Ej%)OHgjlC3mvoOq`Iu9o^*1
> zFn#uh<>}L)0x6FQ`KT@%;TR=v@IecEgvzM8nCRx0kQ=#jC@j^ZKfxA#W3op
> M(6>SP
> za#Csc3M%r6(uDlSryn2GpYUGq8)XJ6dRvN5XjK?qh#sj^2H?i?e}cT;cf|1MwJ>
> GI
> zCtBdPs^RNueo1;rDnET)5PEHt1(U;P?btVex^4LRaGFH<&KKKL;U|#P{u7rDX}-
> R}
> zO^{`A$EoRIp}kJ+hP%z@(w~;&Sgy701>*O*X`1kn(|A17NT1-
> 4C+4TwcvRe*6_)uK
> z_jJ~I!lAirI)FmBOM0$8O*voT1rjdFvy)!D?B?zBMy*y!?Zwh%N9C}Pe0faNrRmf
> 0
> zK|g_H{pQR9yJ;&4$xk0bqY3)k!kA|qmDNJN)LUw@AVQj@T7}FV>7Szsn%T$2
> WQRyL
> z*Zs`=R3pZBx5`*ShxBs*?n}YItv!trct?6Tp9uC7e?4y#(R&r;7o(<OLMz_!O+V3F
> zgxX_#@tv9H%;)K(B~Mee+1i=0<MU;hVw$|EP`J1)zCVm_$y4-
> xbo2ft{!}ymmcs}F
> zHtay!(MPKdK4ZTOBvqI7R|`iRtTiTKRydJJ*_t9s5I^fawF((9zQY&nOj`5IEnHl(
> zSXi>rNOo2vzjiAcTP@$nd>_>|y~`GU^0Hv|yoY&;jAbYETUi2`y`^!;Tj!*}hHCNq
> zZ#|Q{e3hSqr;Kmi>wFhK=^@(agT#E7evHjT)ZSfO2HKNi?}x^<vl#StIeFd-
> Mh0)s
> zce`maEH@Kln<poop7`;SVpp^xb^Sqo3>l@#g~mwBkRjPatvydLvkZw$C&j@?I
> ePE4
> zCq)fUbfc%G5lNN}k-U5nHbm`-
> >~d9V>^IT;4XKsq$kv+sF!s09TMU;4#+QCr;X%Zj
> zJgWO}gJ^g6r3tpV)v`;HI%bhSm+x2gz4=~nQ(lfevf~-u&erDE;>rFRW95Z`CQFf4
> zlefm+Y4up2`ZAuMfwHUr?NZ)T-Idm!0l>V70iaOS-a(f4gyak*w%c}uCjiN$4;@}j
> z7!BvVO&HwCIfD*DSxJKq`8|V>FJ-
> ^5_Q~{uzN*;k1}*SOCandH_CvmWfP+9x`fOb(
> zc<f0ZKAl5}iG~UW-
> ?Ux+qrA0WrH^>}Hezt6!!05JbXRCSyCx@iv_q^?o&3bU|44Lk
> zXJKl+^L%-{fxkg;dxs-Ja!*yduC4*v8{j5a04wkk32Dwr%LlMcR++0uA)xSC!d_v`
> zO-
> @tiru8@NJiAdzJJdzyNU|~NG~sjmI7+da7VOkrK5~EvwAP9$1*GnmZW${8f@
> h#(
> zq=zVbMq_k3ELk3+gyfYoIVI-!`Q(-J_Rfi{szL0wE3^RI{^;7>WhLUw(p2<&5uz3y
> zAeLOU8(RK?$<?W%SjYV*$wKj!{^H3O=p%e<E9>Xw5u#a|v^ODqQg_|!w&X
> uqBgD(p
> zy@O%ht|jySKJ@qCyON1A6Q2-
> z?Gcd=NV9nr(Kt|t+x>kL^N}|xu<|1jAMQrC1$17h
> zDm@YSNaSjxf<rgO%Kqz#2*V<tC$*;~<?|_iZ<XY*y^Maw51+f|79@`E)ceXK
> @EAYa
> z(P_zhYltinsKI$6Q?iXR<o8nM%58aQoVkBjRg%qC+S}9I*Mo3o(?%ePdGBPVH
> 5@h1
> z+u(^*$gjR8>a0Y#SvTBCS&DmR{rUNQGr?$GsP$<8b$Ji*k1g#M!;$hH>x#bjot
> Qs}
> z6sZ8C@QW;yH)|N@XpAqC&EHUuoyfgeL)w_>7;-
> l4x1(B?WxwB0${^(vVp9U*+9$(A
> z#{M)Juh_qkD*ry+2lH4~>(kT>mvbPAy`h+R`3lcBX9%Vp;cudJTG(SICb=a$Lx?<
> r
> zQIP=RBacXr;-Pc`Yo)iYJm03#F~j0A>)c>2sXXt<0qU7srjJUNSRXJODRXF7&G3Vr
> z{4L$2Lc@TW3FCIbq#=}qx}Pz>H%AKB)mXf{*@T4u@zmrZQM^HtdUMyw&B
> >ZsR5Uy=
> z+JJxYdXOSaHVf^JQuB{n?KH+6d%QO<lau_OB>vpQga=*T{?qx;Yosd61l+@V<
> t&h;
> zbFeKH4o@^iox>knrg{5(MxKAHm>q3YKEc1Ie*Q5FjtZNCqtgDuXQ}x9ls-
> >N^L$;@
> zdRx8$4E$-
> MARQKHKKtFcl=>iQGle&k=)MTsn|%jqy^GOelxe~0j|yMspKdtszkbSX
> z)t1Ku;0tM6M&OZ9?8#fZrH^;Tkr&)K;EM>u#!Y&^)t7WXA>rORpQJm?NA&F3
> P)<DA
> z@85VEO=?TWZ&d7zW|KwF_t<Eh&duf45Q9uGSoL)C05(wOH}dh?C<h^^iYcp
> xPG4*H
> zIIsxE%r7};_@t@Mp?habtACKYIM7?{f8)Y0VG~8AU0$xiAlTr;&-
> p~JXC8_v#OfbN
> z(~Y3D6nk+P;GWSZa#hzOkZudg_`ESXV7Oz*_`YklV4?00Wd@$5#8bgz?LT?ZaY
> IX<
> zIcX)}c-
> )@%l_FGQdEAz$AX8s}dfXfKsGz;k58uFYE(6|%h#|OdR!E}Hdac;Y73mv=
> z3Y;=|OHHhtoUN{TQ}(*5_wEiF+N{s^>n&EY+`r8bwy8DUqy#_YW$D%Ll)UO(;
> A7Xh
> zpww)-
> (N3GqUSZUu1;Fn~^THciGyR`$$98E{zK^F9@_)|mHPYcnGsLRt5aj+GeI(DX
> z!thTf-
> UkeV79sp+f4bqgCENDwA&iUgp>E2ewX~_4+u}izQ_2=LP$RkA2=vdf`o7ob
> zd|B0HM&Vb<n!%*?mVVq}X2oqC@s+&n=suXR1U%N?v@ySGxoPRXrqmRu
> ZCCp1CuXR>
> zejmC1`SBk=>SyOKS7w$)H?}4cbQzvn8e{jrWhoxyRl>ia^fHf7{F4g16b|@|#Qf
> VP
> zl~*bUF(rbtRO?~g2#|_Ia3|vF)eGz|q+ZL<@A<-
> fMoN_eytRpu=%XAhq*&!WhK$8R
> zh^-
> v206TFq%@fYkLXDj8nVzR+hzxoKeGhcegj)jrFwgk_H_NwIMmUP#a}pLfi(s2*
> zP;}V*^F`;rrHVmdbB7ycrPYUd4;p<1wJ?!#!3yLbPnm`k%o2xoZTLg`hTk5-h5eBz
> zc9UH_tycMmj>|sSTT_BhFn<(&ARa0}YU@hpJn^nz!1M~{wKPOJFZw_%R5|4
> gz6p?j
> zh`d!Xo?09QAf9)>IyS?%zou0(n>b=-q)s-1Byp!34pl~V90g=6(0TXu`IZo1XxKz#
> zr`D!qbk$zWhHO=NhZZDJRd2@25Vm{S$td|!TY#L`w?Rlq$(msv$)SzJb;{{LJZf;8
> z>(E9=`sBAj$}s6CY$a7&-
> 5lkgSZN9se=4aquzMA(<B7hH#h;lOeQJ2P|Cx%a5%9l+
> zA^ln~@xPqNElt@V?l2<{C=_U8VFjVm;rz?voQhpjOPh+97w(<U3-
> ^ux73u@W<gfx8
> zTNpvPc^yG!f5QZE{u3s|-Vp*Yao}+>cKBZ~L7e|nrV9rM0CsRRvfzf9{;f<7?tj7r
> znYwcE!i;TApj@th!vq2Usdgu*qZOFf)r=R!#q)Peu74`i*3`|}1K<YX1iP919TOfK
> z^xti_1Up#TLZR*+R_2a>!{p%kr`p|}?BGE;5OXUyrGLW&asLDJe_Z<AoFHas@I
> @@a
> zXn_AdsJOsj5SYr0>c3$?I3d3dD!c!I!NZq+hXLWSDZj(GIQ|afhKC*fj>iKJ1Nt4t
> z%L7-
> 3U&sH{3*?3eZTt@7<>dJd#=#5Vg2#ycOI{9MPTt?k<KX22{SE^GH~_!b0RnJ>
> z;9IKwOL?5U@Fg|>1_S>ucwF4vzu|!aK%U>*3kGlkf2W0;gM<6`I=DHwxZr*0U
> ufax
> z;DK}LHy8*2goktdD;|jBR}ja)z<4=0fxqYF<=_VXP9HA^59jag;Dv|w{4FmC&i#L_
> z0|?~c1pk&74&w&@);1u#863aS2mB?=-(j5G+`qR2$jQwM{!K<eE)H(4-
> |OXq3;1t%
> z@MxIdWDewkcZ1*f4CI9?%x`=F@`8XozqJD%QwQSx8w?KpjV~N<4f^MLp-
> x8dfGj68
> tc<iDIJk;n{w`5ngw}(=}>-;Ma2OfIp1pTYeasWBuqC}&k6IYP<zW}%;S@Hk?
>
> diff --git a/BaseTools/Source/C/BrotliCompress/enc/backward_references.h
> b/BaseTools/Source/C/BrotliCompress/enc/backward_references.h
> deleted file mode 100644
> index fcef6bd92953..000000000000
> --- a/BaseTools/Source/C/BrotliCompress/enc/backward_references.h
> +++ /dev/null
> @@ -1,38 +0,0 @@
> -/* Copyright 2013 Google Inc. All Rights Reserved.
> -
> - Distributed under MIT license.
> - See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
> -*/
> -
> -/* Function to find backward reference copies. */
> -
> -#ifndef BROTLI_ENC_BACKWARD_REFERENCES_H_
> -#define BROTLI_ENC_BACKWARD_REFERENCES_H_
> -
> -#include "../common/constants.h"
> -#include "../common/dictionary.h"
> -#include "../common/platform.h"
> -#include <brotli/types.h>
> -#include "./command.h"
> -#include "./hash.h"
> -#include "./quality.h"
> -
> -#if defined(__cplusplus) || defined(c_plusplus)
> -extern "C" {
> -#endif
> -
> -/* "commands" points to the next output command to write to,
> "*num_commands" is
> - initially the total amount of commands output by previous
> - CreateBackwardReferences calls, and must be incremented by the amount
> written
> - by this call. */
> -BROTLI_INTERNAL void BrotliCreateBackwardReferences(
> - size_t num_bytes, size_t position, const uint8_t* ringbuffer,
> - size_t ringbuffer_mask, const BrotliEncoderParams* params,
> - HasherHandle hasher, int* dist_cache, size_t* last_insert_len,
> - Command* commands, size_t* num_commands, size_t* num_literals);
> -
> -#if defined(__cplusplus) || defined(c_plusplus)
> -} /* extern "C" */
> -#endif
> -
> -#endif /* BROTLI_ENC_BACKWARD_REFERENCES_H_ */
> diff --git
> a/BaseTools/Source/C/BrotliCompress/enc/backward_references_hq.h
> b/BaseTools/Source/C/BrotliCompress/enc/backward_references_hq.h
> deleted file mode 100644
> index 60b3b346b778..000000000000
> --- a/BaseTools/Source/C/BrotliCompress/enc/backward_references_hq.h
> +++ /dev/null
> @@ -1,93 +0,0 @@
> -/* Copyright 2013 Google Inc. All Rights Reserved.
> -
> - Distributed under MIT license.
> - See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
> -*/
> -
> -/* Function to find backward reference copies. */
> -
> -#ifndef BROTLI_ENC_BACKWARD_REFERENCES_HQ_H_
> -#define BROTLI_ENC_BACKWARD_REFERENCES_HQ_H_
> -
> -#include "../common/constants.h"
> -#include "../common/dictionary.h"
> -#include "../common/platform.h"
> -#include <brotli/types.h>
> -#include "./command.h"
> -#include "./hash.h"
> -#include "./memory.h"
> -#include "./quality.h"
> -
> -#if defined(__cplusplus) || defined(c_plusplus)
> -extern "C" {
> -#endif
> -
> -BROTLI_INTERNAL void
> BrotliCreateZopfliBackwardReferences(MemoryManager* m,
> - size_t num_bytes, size_t position, const uint8_t* ringbuffer,
> - size_t ringbuffer_mask, const BrotliEncoderParams* params,
> - HasherHandle hasher, int* dist_cache, size_t* last_insert_len,
> - Command* commands, size_t* num_commands, size_t* num_literals);
> -
> -BROTLI_INTERNAL void
> BrotliCreateHqZopfliBackwardReferences(MemoryManager* m,
> - size_t num_bytes, size_t position, const uint8_t* ringbuffer,
> - size_t ringbuffer_mask, const BrotliEncoderParams* params,
> - HasherHandle hasher, int* dist_cache, size_t* last_insert_len,
> - Command* commands, size_t* num_commands, size_t* num_literals);
> -
> -typedef struct ZopfliNode {
> - /* Best length to get up to this byte (not including this byte itself)
> - highest 7 bit is used to reconstruct the length code. */
> - uint32_t length;
> - /* Distance associated with the length. */
> - uint32_t distance;
> - /* Number of literal inserts before this copy; highest 5 bits contain
> - distance short code + 1 (or zero if no short code). */
> - uint32_t dcode_insert_length;
> -
> - /* This union holds information used by dynamic-programming. During
> forward
> - pass |cost| it used to store the goal function. When node is processed its
> - |cost| is invalidated in favor of |shortcut|. On path back-tracing pass
> - |next| is assigned the offset to next node on the path. */
> - union {
> - /* Smallest cost to get to this byte from the beginning, as found so far. */
> - float cost;
> - /* Offset to the next node on the path. Equals to command_length() of
> the
> - next node on the path. For last node equals to BROTLI_UINT32_MAX */
> - uint32_t next;
> - /* Node position that provides next distance for distance cache. */
> - uint32_t shortcut;
> - } u;
> -} ZopfliNode;
> -
> -BROTLI_INTERNAL void BrotliInitZopfliNodes(ZopfliNode* array, size_t
> length);
> -
> -/* Computes the shortest path of commands from position to at most
> - position + num_bytes.
> -
> - On return, path->size() is the number of commands found and path[i] is
> the
> - length of the i-th command (copy length plus insert length).
> - Note that the sum of the lengths of all commands can be less than
> num_bytes.
> -
> - On return, the nodes[0..num_bytes] array will have the following
> - "ZopfliNode array invariant":
> - For each i in [1..num_bytes], if nodes[i].cost < kInfinity, then
> - (1) nodes[i].copy_length() >= 2
> - (2) nodes[i].command_length() <= i and
> - (3) nodes[i - nodes[i].command_length()].cost < kInfinity */
> -BROTLI_INTERNAL size_t
> BrotliZopfliComputeShortestPath(MemoryManager* m,
> - size_t num_bytes, size_t position, const uint8_t* ringbuffer,
> - size_t ringbuffer_mask, const BrotliEncoderParams* params,
> - const size_t max_backward_limit, const int* dist_cache, HasherHandle
> hasher,
> - ZopfliNode* nodes);
> -
> -BROTLI_INTERNAL void BrotliZopfliCreateCommands(
> - const size_t num_bytes, const size_t block_start,
> - const size_t max_backward_limit, const ZopfliNode* nodes,
> - int* dist_cache, size_t* last_insert_len, const BrotliEncoderParams*
> params,
> - Command* commands, size_t* num_literals);
> -
> -#if defined(__cplusplus) || defined(c_plusplus)
> -} /* extern "C" */
> -#endif
> -
> -#endif /* BROTLI_ENC_BACKWARD_REFERENCES_HQ_H_ */
> diff --git
> a/BaseTools/Source/C/BrotliCompress/enc/backward_references_inc.h
> b/BaseTools/Source/C/BrotliCompress/enc/backward_references_inc.h
> deleted file mode 100644
> index 39c6f823f8bd..000000000000
> --- a/BaseTools/Source/C/BrotliCompress/enc/backward_references_inc.h
> +++ /dev/null
> @@ -1,153 +0,0 @@
> -/* NOLINT(build/header_guard) */
> -/* Copyright 2013 Google Inc. All Rights Reserved.
> -
> - Distributed under MIT license.
> - See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
> -*/
> -
> -/* template parameters: EXPORT_FN, FN */
> -
> -static BROTLI_NOINLINE void EXPORT_FN(CreateBackwardReferences)(
> - size_t num_bytes, size_t position,
> - const uint8_t* ringbuffer, size_t ringbuffer_mask,
> - const BrotliEncoderParams* params, HasherHandle hasher, int*
> dist_cache,
> - size_t* last_insert_len, Command* commands, size_t* num_commands,
> - size_t* num_literals) {
> - /* Set maximum distance, see section 9.1. of the spec. */
> - const size_t max_backward_limit =
> BROTLI_MAX_BACKWARD_LIMIT(params->lgwin);
> -
> - const Command* const orig_commands = commands;
> - size_t insert_length = *last_insert_len;
> - const size_t pos_end = position + num_bytes;
> - const size_t store_end = num_bytes >= FN(StoreLookahead)() ?
> - position + num_bytes - FN(StoreLookahead)() + 1 : position;
> -
> - /* For speed up heuristics for random data. */
> - const size_t random_heuristics_window_size =
> - LiteralSpreeLengthForSparseSearch(params);
> - size_t apply_random_heuristics = position +
> random_heuristics_window_size;
> - const size_t gap = 0;
> -
> - /* Minimum score to accept a backward reference. */
> - const score_t kMinScore = BROTLI_SCORE_BASE + 100;
> -
> - FN(PrepareDistanceCache)(hasher, dist_cache);
> -
> - while (position + FN(HashTypeLength)() < pos_end) {
> - size_t max_length = pos_end - position;
> - size_t max_distance = BROTLI_MIN(size_t, position, max_backward_limit);
> - HasherSearchResult sr;
> - sr.len = 0;
> - sr.len_code_delta = 0;
> - sr.distance = 0;
> - sr.score = kMinScore;
> - FN(FindLongestMatch)(hasher, ¶ms->dictionary,
> - ringbuffer, ringbuffer_mask, dist_cache, position,
> - max_length, max_distance, gap,
> - params->dist.max_distance, &sr);
> - if (sr.score > kMinScore) {
> - /* Found a match. Let's look for something even better ahead. */
> - int delayed_backward_references_in_row = 0;
> - --max_length;
> - for (;; --max_length) {
> - const score_t cost_diff_lazy = 175;
> - HasherSearchResult sr2;
> - sr2.len = params->quality <
> MIN_QUALITY_FOR_EXTENSIVE_REFERENCE_SEARCH ?
> - BROTLI_MIN(size_t, sr.len - 1, max_length) : 0;
> - sr2.len_code_delta = 0;
> - sr2.distance = 0;
> - sr2.score = kMinScore;
> - max_distance = BROTLI_MIN(size_t, position + 1, max_backward_limit);
> - FN(FindLongestMatch)(hasher, ¶ms->dictionary,
> - ringbuffer, ringbuffer_mask, dist_cache, position + 1, max_length,
> - max_distance, gap, params->dist.max_distance, &sr2);
> - if (sr2.score >= sr.score + cost_diff_lazy) {
> - /* Ok, let's just write one byte for now and start a match from the
> - next byte. */
> - ++position;
> - ++insert_length;
> - sr = sr2;
> - if (++delayed_backward_references_in_row < 4 &&
> - position + FN(HashTypeLength)() < pos_end) {
> - continue;
> - }
> - }
> - break;
> - }
> - apply_random_heuristics =
> - position + 2 * sr.len + random_heuristics_window_size;
> - max_distance = BROTLI_MIN(size_t, position, max_backward_limit);
> - {
> - /* The first 16 codes are special short-codes,
> - and the minimum offset is 1. */
> - size_t distance_code =
> - ComputeDistanceCode(sr.distance, max_distance + gap, dist_cache);
> - if ((sr.distance <= (max_distance + gap)) && distance_code > 0) {
> - dist_cache[3] = dist_cache[2];
> - dist_cache[2] = dist_cache[1];
> - dist_cache[1] = dist_cache[0];
> - dist_cache[0] = (int)sr.distance;
> - FN(PrepareDistanceCache)(hasher, dist_cache);
> - }
> - InitCommand(commands++, ¶ms->dist, insert_length,
> - sr.len, sr.len_code_delta, distance_code);
> - }
> - *num_literals += insert_length;
> - insert_length = 0;
> - /* Put the hash keys into the table, if there are enough bytes left.
> - Depending on the hasher implementation, it can push all positions
> - in the given range or only a subset of them.
> - Avoid hash poisoning with RLE data. */
> - {
> - size_t range_start = position + 2;
> - size_t range_end = BROTLI_MIN(size_t, position + sr.len, store_end);
> - if (sr.distance < (sr.len >> 2)) {
> - range_start = BROTLI_MIN(size_t, range_end, BROTLI_MAX(size_t,
> - range_start, position + sr.len - (sr.distance << 2)));
> - }
> - FN(StoreRange)(hasher, ringbuffer, ringbuffer_mask, range_start,
> - range_end);
> - }
> - position += sr.len;
> - } else {
> - ++insert_length;
> - ++position;
> - /* If we have not seen matches for a long time, we can skip some
> - match lookups. Unsuccessful match lookups are very very expensive
> - and this kind of a heuristic speeds up compression quite
> - a lot. */
> - if (position > apply_random_heuristics) {
> - /* Going through uncompressible data, jump. */
> - if (position >
> - apply_random_heuristics + 4 * random_heuristics_window_size) {
> - /* It is quite a long time since we saw a copy, so we assume
> - that this data is not compressible, and store hashes less
> - often. Hashes of non compressible data are less likely to
> - turn out to be useful in the future, too, so we store less of
> - them to not to flood out the hash table of good compressible
> - data. */
> - const size_t kMargin =
> - BROTLI_MAX(size_t, FN(StoreLookahead)() - 1, 4);
> - size_t pos_jump =
> - BROTLI_MIN(size_t, position + 16, pos_end - kMargin);
> - for (; position < pos_jump; position += 4) {
> - FN(Store)(hasher, ringbuffer, ringbuffer_mask, position);
> - insert_length += 4;
> - }
> - } else {
> - const size_t kMargin =
> - BROTLI_MAX(size_t, FN(StoreLookahead)() - 1, 2);
> - size_t pos_jump =
> - BROTLI_MIN(size_t, position + 8, pos_end - kMargin);
> - for (; position < pos_jump; position += 2) {
> - FN(Store)(hasher, ringbuffer, ringbuffer_mask, position);
> - insert_length += 2;
> - }
> - }
> - }
> - }
> - }
> - insert_length += pos_end - position;
> - *last_insert_len = insert_length;
> - *num_commands += (size_t)(commands - orig_commands);
> -}
> diff --git a/BaseTools/Source/C/BrotliCompress/enc/bit_cost.h
> b/BaseTools/Source/C/BrotliCompress/enc/bit_cost.h
> deleted file mode 100644
> index e7ab2eafe459..000000000000
> --- a/BaseTools/Source/C/BrotliCompress/enc/bit_cost.h
> +++ /dev/null
> @@ -1,63 +0,0 @@
> -/* Copyright 2013 Google Inc. All Rights Reserved.
> -
> - Distributed under MIT license.
> - See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
> -*/
> -
> -/* Functions to estimate the bit cost of Huffman trees. */
> -
> -#ifndef BROTLI_ENC_BIT_COST_H_
> -#define BROTLI_ENC_BIT_COST_H_
> -
> -#include "../common/platform.h"
> -#include <brotli/types.h>
> -#include "./fast_log.h"
> -#include "./histogram.h"
> -
> -#if defined(__cplusplus) || defined(c_plusplus)
> -extern "C" {
> -#endif
> -
> -static BROTLI_INLINE double ShannonEntropy(
> - const uint32_t* population, size_t size, size_t* total) {
> - size_t sum = 0;
> - double retval = 0;
> - const uint32_t* population_end = population + size;
> - size_t p;
> - if (size & 1) {
> - goto odd_number_of_elements_left;
> - }
> - while (population < population_end) {
> - p = *population++;
> - sum += p;
> - retval -= (double)p * FastLog2(p);
> - odd_number_of_elements_left:
> - p = *population++;
> - sum += p;
> - retval -= (double)p * FastLog2(p);
> - }
> - if (sum) retval += (double)sum * FastLog2(sum);
> - *total = sum;
> - return retval;
> -}
> -
> -static BROTLI_INLINE double BitsEntropy(
> - const uint32_t* population, size_t size) {
> - size_t sum;
> - double retval = ShannonEntropy(population, size, &sum);
> - if (retval < sum) {
> - /* At least one bit per literal is needed. */
> - retval = (double)sum;
> - }
> - return retval;
> -}
> -
> -BROTLI_INTERNAL double BrotliPopulationCostLiteral(const
> HistogramLiteral*);
> -BROTLI_INTERNAL double BrotliPopulationCostCommand(const
> HistogramCommand*);
> -BROTLI_INTERNAL double BrotliPopulationCostDistance(const
> HistogramDistance*);
> -
> -#if defined(__cplusplus) || defined(c_plusplus)
> -} /* extern "C" */
> -#endif
> -
> -#endif /* BROTLI_ENC_BIT_COST_H_ */
> diff --git a/BaseTools/Source/C/BrotliCompress/enc/bit_cost_inc.h
> b/BaseTools/Source/C/BrotliCompress/enc/bit_cost_inc.h
> deleted file mode 100644
> index c96bddac0962..000000000000
> --- a/BaseTools/Source/C/BrotliCompress/enc/bit_cost_inc.h
> +++ /dev/null
> @@ -1,127 +0,0 @@
> -/* NOLINT(build/header_guard) */
> -/* Copyright 2013 Google Inc. All Rights Reserved.
> -
> - Distributed under MIT license.
> - See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
> -*/
> -
> -/* template parameters: FN */
> -
> -#define HistogramType FN(Histogram)
> -
> -double FN(BrotliPopulationCost)(const HistogramType* histogram) {
> - static const double kOneSymbolHistogramCost = 12;
> - static const double kTwoSymbolHistogramCost = 20;
> - static const double kThreeSymbolHistogramCost = 28;
> - static const double kFourSymbolHistogramCost = 37;
> - const size_t data_size = FN(HistogramDataSize)();
> - int count = 0;
> - size_t s[5];
> - double bits = 0.0;
> - size_t i;
> - if (histogram->total_count_ == 0) {
> - return kOneSymbolHistogramCost;
> - }
> - for (i = 0; i < data_size; ++i) {
> - if (histogram->data_[i] > 0) {
> - s[count] = i;
> - ++count;
> - if (count > 4) break;
> - }
> - }
> - if (count == 1) {
> - return kOneSymbolHistogramCost;
> - }
> - if (count == 2) {
> - return (kTwoSymbolHistogramCost + (double)histogram->total_count_);
> - }
> - if (count == 3) {
> - const uint32_t histo0 = histogram->data_[s[0]];
> - const uint32_t histo1 = histogram->data_[s[1]];
> - const uint32_t histo2 = histogram->data_[s[2]];
> - const uint32_t histomax =
> - BROTLI_MAX(uint32_t, histo0, BROTLI_MAX(uint32_t, histo1, histo2));
> - return (kThreeSymbolHistogramCost +
> - 2 * (histo0 + histo1 + histo2) - histomax);
> - }
> - if (count == 4) {
> - uint32_t histo[4];
> - uint32_t h23;
> - uint32_t histomax;
> - for (i = 0; i < 4; ++i) {
> - histo[i] = histogram->data_[s[i]];
> - }
> - /* Sort */
> - for (i = 0; i < 4; ++i) {
> - size_t j;
> - for (j = i + 1; j < 4; ++j) {
> - if (histo[j] > histo[i]) {
> - BROTLI_SWAP(uint32_t, histo, j, i);
> - }
> - }
> - }
> - h23 = histo[2] + histo[3];
> - histomax = BROTLI_MAX(uint32_t, h23, histo[0]);
> - return (kFourSymbolHistogramCost +
> - 3 * h23 + 2 * (histo[0] + histo[1]) - histomax);
> - }
> -
> - {
> - /* In this loop we compute the entropy of the histogram and
> simultaneously
> - build a simplified histogram of the code length codes where we use the
> - zero repeat code 17, but we don't use the non-zero repeat code 16. */
> - size_t max_depth = 1;
> - uint32_t depth_histo[BROTLI_CODE_LENGTH_CODES] = { 0 };
> - const double log2total = FastLog2(histogram->total_count_);
> - for (i = 0; i < data_size;) {
> - if (histogram->data_[i] > 0) {
> - /* Compute -log2(P(symbol)) = -log2(count(symbol)/total_count) =
> - = log2(total_count) - log2(count(symbol)) */
> - double log2p = log2total - FastLog2(histogram->data_[i]);
> - /* Approximate the bit depth by round(-log2(P(symbol))) */
> - size_t depth = (size_t)(log2p + 0.5);
> - bits += histogram->data_[i] * log2p;
> - if (depth > 15) {
> - depth = 15;
> - }
> - if (depth > max_depth) {
> - max_depth = depth;
> - }
> - ++depth_histo[depth];
> - ++i;
> - } else {
> - /* Compute the run length of zeros and add the appropriate number of
> 0
> - and 17 code length codes to the code length code histogram. */
> - uint32_t reps = 1;
> - size_t k;
> - for (k = i + 1; k < data_size && histogram->data_[k] == 0; ++k) {
> - ++reps;
> - }
> - i += reps;
> - if (i == data_size) {
> - /* Don't add any cost for the last zero run, since these are encoded
> - only implicitly. */
> - break;
> - }
> - if (reps < 3) {
> - depth_histo[0] += reps;
> - } else {
> - reps -= 2;
> - while (reps > 0) {
> - ++depth_histo[BROTLI_REPEAT_ZERO_CODE_LENGTH];
> - /* Add the 3 extra bits for the 17 code length code. */
> - bits += 3;
> - reps >>= 3;
> - }
> - }
> - }
> - }
> - /* Add the estimated encoding cost of the code length code histogram. */
> - bits += (double)(18 + 2 * max_depth);
> - /* Add the entropy of the code length code histogram. */
> - bits += BitsEntropy(depth_histo, BROTLI_CODE_LENGTH_CODES);
> - }
> - return bits;
> -}
> -
> -#undef HistogramType
> diff --git a/BaseTools/Source/C/BrotliCompress/enc/block_encoder_inc.h
> b/BaseTools/Source/C/BrotliCompress/enc/block_encoder_inc.h
> deleted file mode 100644
> index ce7fd20cb3f4..000000000000
> --- a/BaseTools/Source/C/BrotliCompress/enc/block_encoder_inc.h
> +++ /dev/null
> @@ -1,34 +0,0 @@
> -/* NOLINT(build/header_guard) */
> -/* Copyright 2014 Google Inc. All Rights Reserved.
> -
> - Distributed under MIT license.
> - See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
> -*/
> -
> -/* template parameters: FN */
> -
> -#define HistogramType FN(Histogram)
> -
> -/* Creates entropy codes for all block types and stores them to the bit
> - stream. */
> -static void FN(BuildAndStoreEntropyCodes)(MemoryManager* m,
> BlockEncoder* self,
> - const HistogramType* histograms, const size_t histograms_size,
> - const size_t alphabet_size, HuffmanTree* tree,
> - size_t* storage_ix, uint8_t* storage) {
> - const size_t table_size = histograms_size * self->histogram_length_;
> - self->depths_ = BROTLI_ALLOC(m, uint8_t, table_size);
> - self->bits_ = BROTLI_ALLOC(m, uint16_t, table_size);
> - if (BROTLI_IS_OOM(m)) return;
> -
> - {
> - size_t i;
> - for (i = 0; i < histograms_size; ++i) {
> - size_t ix = i * self->histogram_length_;
> - BuildAndStoreHuffmanTree(&histograms[i].data_[0], self-
> >histogram_length_,
> - alphabet_size, tree, &self->depths_[ix], &self->bits_[ix],
> - storage_ix, storage);
> - }
> - }
> -}
> -
> -#undef HistogramType
> diff --git a/BaseTools/Source/C/BrotliCompress/enc/block_splitter.h
> b/BaseTools/Source/C/BrotliCompress/enc/block_splitter.h
> deleted file mode 100644
> index aa6ebedc2cb8..000000000000
> --- a/BaseTools/Source/C/BrotliCompress/enc/block_splitter.h
> +++ /dev/null
> @@ -1,51 +0,0 @@
> -/* Copyright 2013 Google Inc. All Rights Reserved.
> -
> - Distributed under MIT license.
> - See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
> -*/
> -
> -/* Block split point selection utilities. */
> -
> -#ifndef BROTLI_ENC_BLOCK_SPLITTER_H_
> -#define BROTLI_ENC_BLOCK_SPLITTER_H_
> -
> -#include "../common/platform.h"
> -#include <brotli/types.h>
> -#include "./command.h"
> -#include "./memory.h"
> -#include "./quality.h"
> -
> -#if defined(__cplusplus) || defined(c_plusplus)
> -extern "C" {
> -#endif
> -
> -typedef struct BlockSplit {
> - size_t num_types; /* Amount of distinct types */
> - size_t num_blocks; /* Amount of values in types and length */
> - uint8_t* types;
> - uint32_t* lengths;
> -
> - size_t types_alloc_size;
> - size_t lengths_alloc_size;
> -} BlockSplit;
> -
> -BROTLI_INTERNAL void BrotliInitBlockSplit(BlockSplit* self);
> -BROTLI_INTERNAL void BrotliDestroyBlockSplit(MemoryManager* m,
> - BlockSplit* self);
> -
> -BROTLI_INTERNAL void BrotliSplitBlock(MemoryManager* m,
> - const Command* cmds,
> - const size_t num_commands,
> - const uint8_t* data,
> - const size_t offset,
> - const size_t mask,
> - const BrotliEncoderParams* params,
> - BlockSplit* literal_split,
> - BlockSplit* insert_and_copy_split,
> - BlockSplit* dist_split);
> -
> -#if defined(__cplusplus) || defined(c_plusplus)
> -} /* extern "C" */
> -#endif
> -
> -#endif /* BROTLI_ENC_BLOCK_SPLITTER_H_ */
> diff --git a/BaseTools/Source/C/BrotliCompress/enc/block_splitter_inc.h
> b/BaseTools/Source/C/BrotliCompress/enc/block_splitter_inc.h
> deleted file mode 100644
> index 63c7ccf12975..000000000000
> --- a/BaseTools/Source/C/BrotliCompress/enc/block_splitter_inc.h
> +++ /dev/null
> @@ -1,431 +0,0 @@
> -/* NOLINT(build/header_guard) */
> -/* Copyright 2013 Google Inc. All Rights Reserved.
> -
> - Distributed under MIT license.
> - See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
> -*/
> -
> -/* template parameters: FN, DataType */
> -
> -#define HistogramType FN(Histogram)
> -
> -static void FN(InitialEntropyCodes)(const DataType* data, size_t length,
> - size_t stride,
> - size_t num_histograms,
> - HistogramType* histograms) {
> - uint32_t seed = 7;
> - size_t block_length = length / num_histograms;
> - size_t i;
> - FN(ClearHistograms)(histograms, num_histograms);
> - for (i = 0; i < num_histograms; ++i) {
> - size_t pos = length * i / num_histograms;
> - if (i != 0) {
> - pos += MyRand(&seed) % block_length;
> - }
> - if (pos + stride >= length) {
> - pos = length - stride - 1;
> - }
> - FN(HistogramAddVector)(&histograms[i], data + pos, stride);
> - }
> -}
> -
> -static void FN(RandomSample)(uint32_t* seed,
> - const DataType* data,
> - size_t length,
> - size_t stride,
> - HistogramType* sample) {
> - size_t pos = 0;
> - if (stride >= length) {
> - stride = length;
> - } else {
> - pos = MyRand(seed) % (length - stride + 1);
> - }
> - FN(HistogramAddVector)(sample, data + pos, stride);
> -}
> -
> -static void FN(RefineEntropyCodes)(const DataType* data, size_t length,
> - size_t stride,
> - size_t num_histograms,
> - HistogramType* histograms) {
> - size_t iters =
> - kIterMulForRefining * length / stride + kMinItersForRefining;
> - uint32_t seed = 7;
> - size_t iter;
> - iters = ((iters + num_histograms - 1) / num_histograms) * num_histograms;
> - for (iter = 0; iter < iters; ++iter) {
> - HistogramType sample;
> - FN(HistogramClear)(&sample);
> - FN(RandomSample)(&seed, data, length, stride, &sample);
> - FN(HistogramAddHistogram)(&histograms[iter % num_histograms],
> &sample);
> - }
> -}
> -
> -/* Assigns a block id from the range [0, num_histograms) to each data
> element
> - in data[0..length) and fills in block_id[0..length) with the assigned values.
> - Returns the number of blocks, i.e. one plus the number of block switches.
> */
> -static size_t FN(FindBlocks)(const DataType* data, const size_t length,
> - const double block_switch_bitcost,
> - const size_t num_histograms,
> - const HistogramType* histograms,
> - double* insert_cost,
> - double* cost,
> - uint8_t* switch_signal,
> - uint8_t* block_id) {
> - const size_t data_size = FN(HistogramDataSize)();
> - const size_t bitmaplen = (num_histograms + 7) >> 3;
> - size_t num_blocks = 1;
> - size_t i;
> - size_t j;
> - BROTLI_DCHECK(num_histograms <= 256);
> - if (num_histograms <= 1) {
> - for (i = 0; i < length; ++i) {
> - block_id[i] = 0;
> - }
> - return 1;
> - }
> - memset(insert_cost, 0, sizeof(insert_cost[0]) * data_size *
> num_histograms);
> - for (i = 0; i < num_histograms; ++i) {
> - insert_cost[i] = FastLog2((uint32_t)histograms[i].total_count_);
> - }
> - for (i = data_size; i != 0;) {
> - --i;
> - for (j = 0; j < num_histograms; ++j) {
> - insert_cost[i * num_histograms + j] =
> - insert_cost[j] - BitCost(histograms[j].data_[i]);
> - }
> - }
> - memset(cost, 0, sizeof(cost[0]) * num_histograms);
> - memset(switch_signal, 0, sizeof(switch_signal[0]) * length * bitmaplen);
> - /* After each iteration of this loop, cost[k] will contain the difference
> - between the minimum cost of arriving at the current byte position using
> - entropy code k, and the minimum cost of arriving at the current byte
> - position. This difference is capped at the block switch cost, and if it
> - reaches block switch cost, it means that when we trace back from the last
> - position, we need to switch here. */
> - for (i = 0; i < length; ++i) {
> - const size_t byte_ix = i;
> - size_t ix = byte_ix * bitmaplen;
> - size_t insert_cost_ix = data[byte_ix] * num_histograms;
> - double min_cost = 1e99;
> - double block_switch_cost = block_switch_bitcost;
> - size_t k;
> - for (k = 0; k < num_histograms; ++k) {
> - /* We are coding the symbol in data[byte_ix] with entropy code k. */
> - cost[k] += insert_cost[insert_cost_ix + k];
> - if (cost[k] < min_cost) {
> - min_cost = cost[k];
> - block_id[byte_ix] = (uint8_t)k;
> - }
> - }
> - /* More blocks for the beginning. */
> - if (byte_ix < 2000) {
> - block_switch_cost *= 0.77 + 0.07 * (double)byte_ix / 2000;
> - }
> - for (k = 0; k < num_histograms; ++k) {
> - cost[k] -= min_cost;
> - if (cost[k] >= block_switch_cost) {
> - const uint8_t mask = (uint8_t)(1u << (k & 7));
> - cost[k] = block_switch_cost;
> - BROTLI_DCHECK((k >> 3) < bitmaplen);
> - switch_signal[ix + (k >> 3)] |= mask;
> - }
> - }
> - }
> - { /* Trace back from the last position and switch at the marked places. */
> - size_t byte_ix = length - 1;
> - size_t ix = byte_ix * bitmaplen;
> - uint8_t cur_id = block_id[byte_ix];
> - while (byte_ix > 0) {
> - const uint8_t mask = (uint8_t)(1u << (cur_id & 7));
> - BROTLI_DCHECK(((size_t)cur_id >> 3) < bitmaplen);
> - --byte_ix;
> - ix -= bitmaplen;
> - if (switch_signal[ix + (cur_id >> 3)] & mask) {
> - if (cur_id != block_id[byte_ix]) {
> - cur_id = block_id[byte_ix];
> - ++num_blocks;
> - }
> - }
> - block_id[byte_ix] = cur_id;
> - }
> - }
> - return num_blocks;
> -}
> -
> -static size_t FN(RemapBlockIds)(uint8_t* block_ids, const size_t length,
> - uint16_t* new_id, const size_t num_histograms) {
> - static const uint16_t kInvalidId = 256;
> - uint16_t next_id = 0;
> - size_t i;
> - for (i = 0; i < num_histograms; ++i) {
> - new_id[i] = kInvalidId;
> - }
> - for (i = 0; i < length; ++i) {
> - BROTLI_DCHECK(block_ids[i] < num_histograms);
> - if (new_id[block_ids[i]] == kInvalidId) {
> - new_id[block_ids[i]] = next_id++;
> - }
> - }
> - for (i = 0; i < length; ++i) {
> - block_ids[i] = (uint8_t)new_id[block_ids[i]];
> - BROTLI_DCHECK(block_ids[i] < num_histograms);
> - }
> - BROTLI_DCHECK(next_id <= num_histograms);
> - return next_id;
> -}
> -
> -static void FN(BuildBlockHistograms)(const DataType* data, const size_t
> length,
> - const uint8_t* block_ids,
> - const size_t num_histograms,
> - HistogramType* histograms) {
> - size_t i;
> - FN(ClearHistograms)(histograms, num_histograms);
> - for (i = 0; i < length; ++i) {
> - FN(HistogramAdd)(&histograms[block_ids[i]], data[i]);
> - }
> -}
> -
> -static void FN(ClusterBlocks)(MemoryManager* m,
> - const DataType* data, const size_t length,
> - const size_t num_blocks,
> - uint8_t* block_ids,
> - BlockSplit* split) {
> - uint32_t* histogram_symbols = BROTLI_ALLOC(m, uint32_t, num_blocks);
> - uint32_t* block_lengths = BROTLI_ALLOC(m, uint32_t, num_blocks);
> - const size_t expected_num_clusters = CLUSTERS_PER_BATCH *
> - (num_blocks + HISTOGRAMS_PER_BATCH - 1) /
> HISTOGRAMS_PER_BATCH;
> - size_t all_histograms_size = 0;
> - size_t all_histograms_capacity = expected_num_clusters;
> - HistogramType* all_histograms =
> - BROTLI_ALLOC(m, HistogramType, all_histograms_capacity);
> - size_t cluster_size_size = 0;
> - size_t cluster_size_capacity = expected_num_clusters;
> - uint32_t* cluster_size = BROTLI_ALLOC(m, uint32_t, cluster_size_capacity);
> - size_t num_clusters = 0;
> - HistogramType* histograms = BROTLI_ALLOC(m, HistogramType,
> - BROTLI_MIN(size_t, num_blocks, HISTOGRAMS_PER_BATCH));
> - size_t max_num_pairs =
> - HISTOGRAMS_PER_BATCH * HISTOGRAMS_PER_BATCH / 2;
> - size_t pairs_capacity = max_num_pairs + 1;
> - HistogramPair* pairs = BROTLI_ALLOC(m, HistogramPair, pairs_capacity);
> - size_t pos = 0;
> - uint32_t* clusters;
> - size_t num_final_clusters;
> - static const uint32_t kInvalidIndex = BROTLI_UINT32_MAX;
> - uint32_t* new_index;
> - size_t i;
> - uint32_t sizes[HISTOGRAMS_PER_BATCH] = { 0 };
> - uint32_t new_clusters[HISTOGRAMS_PER_BATCH] = { 0 };
> - uint32_t symbols[HISTOGRAMS_PER_BATCH] = { 0 };
> - uint32_t remap[HISTOGRAMS_PER_BATCH] = { 0 };
> -
> - if (BROTLI_IS_OOM(m)) return;
> -
> - memset(block_lengths, 0, num_blocks * sizeof(uint32_t));
> -
> - {
> - size_t block_idx = 0;
> - for (i = 0; i < length; ++i) {
> - BROTLI_DCHECK(block_idx < num_blocks);
> - ++block_lengths[block_idx];
> - if (i + 1 == length || block_ids[i] != block_ids[i + 1]) {
> - ++block_idx;
> - }
> - }
> - BROTLI_DCHECK(block_idx == num_blocks);
> - }
> -
> - for (i = 0; i < num_blocks; i += HISTOGRAMS_PER_BATCH) {
> - const size_t num_to_combine =
> - BROTLI_MIN(size_t, num_blocks - i, HISTOGRAMS_PER_BATCH);
> - size_t num_new_clusters;
> - size_t j;
> - for (j = 0; j < num_to_combine; ++j) {
> - size_t k;
> - FN(HistogramClear)(&histograms[j]);
> - for (k = 0; k < block_lengths[i + j]; ++k) {
> - FN(HistogramAdd)(&histograms[j], data[pos++]);
> - }
> - histograms[j].bit_cost_ = FN(BrotliPopulationCost)(&histograms[j]);
> - new_clusters[j] = (uint32_t)j;
> - symbols[j] = (uint32_t)j;
> - sizes[j] = 1;
> - }
> - num_new_clusters = FN(BrotliHistogramCombine)(
> - histograms, sizes, symbols, new_clusters, pairs, num_to_combine,
> - num_to_combine, HISTOGRAMS_PER_BATCH, max_num_pairs);
> - BROTLI_ENSURE_CAPACITY(m, HistogramType, all_histograms,
> - all_histograms_capacity, all_histograms_size + num_new_clusters);
> - BROTLI_ENSURE_CAPACITY(m, uint32_t, cluster_size,
> - cluster_size_capacity, cluster_size_size + num_new_clusters);
> - if (BROTLI_IS_OOM(m)) return;
> - for (j = 0; j < num_new_clusters; ++j) {
> - all_histograms[all_histograms_size++] = histograms[new_clusters[j]];
> - cluster_size[cluster_size_size++] = sizes[new_clusters[j]];
> - remap[new_clusters[j]] = (uint32_t)j;
> - }
> - for (j = 0; j < num_to_combine; ++j) {
> - histogram_symbols[i + j] = (uint32_t)num_clusters + remap[symbols[j]];
> - }
> - num_clusters += num_new_clusters;
> - BROTLI_DCHECK(num_clusters == cluster_size_size);
> - BROTLI_DCHECK(num_clusters == all_histograms_size);
> - }
> - BROTLI_FREE(m, histograms);
> -
> - max_num_pairs =
> - BROTLI_MIN(size_t, 64 * num_clusters, (num_clusters / 2) *
> num_clusters);
> - if (pairs_capacity < max_num_pairs + 1) {
> - BROTLI_FREE(m, pairs);
> - pairs = BROTLI_ALLOC(m, HistogramPair, max_num_pairs + 1);
> - if (BROTLI_IS_OOM(m)) return;
> - }
> -
> - clusters = BROTLI_ALLOC(m, uint32_t, num_clusters);
> - if (BROTLI_IS_OOM(m)) return;
> - for (i = 0; i < num_clusters; ++i) {
> - clusters[i] = (uint32_t)i;
> - }
> - num_final_clusters = FN(BrotliHistogramCombine)(
> - all_histograms, cluster_size, histogram_symbols, clusters, pairs,
> - num_clusters, num_blocks, BROTLI_MAX_NUMBER_OF_BLOCK_TYPES,
> - max_num_pairs);
> - BROTLI_FREE(m, pairs);
> - BROTLI_FREE(m, cluster_size);
> -
> - new_index = BROTLI_ALLOC(m, uint32_t, num_clusters);
> - if (BROTLI_IS_OOM(m)) return;
> - for (i = 0; i < num_clusters; ++i) new_index[i] = kInvalidIndex;
> - pos = 0;
> - {
> - uint32_t next_index = 0;
> - for (i = 0; i < num_blocks; ++i) {
> - HistogramType histo;
> - size_t j;
> - uint32_t best_out;
> - double best_bits;
> - FN(HistogramClear)(&histo);
> - for (j = 0; j < block_lengths[i]; ++j) {
> - FN(HistogramAdd)(&histo, data[pos++]);
> - }
> - best_out = (i == 0) ? histogram_symbols[0] : histogram_symbols[i - 1];
> - best_bits =
> - FN(BrotliHistogramBitCostDistance)(&histo,
> &all_histograms[best_out]);
> - for (j = 0; j < num_final_clusters; ++j) {
> - const double cur_bits = FN(BrotliHistogramBitCostDistance)(
> - &histo, &all_histograms[clusters[j]]);
> - if (cur_bits < best_bits) {
> - best_bits = cur_bits;
> - best_out = clusters[j];
> - }
> - }
> - histogram_symbols[i] = best_out;
> - if (new_index[best_out] == kInvalidIndex) {
> - new_index[best_out] = next_index++;
> - }
> - }
> - }
> - BROTLI_FREE(m, clusters);
> - BROTLI_FREE(m, all_histograms);
> - BROTLI_ENSURE_CAPACITY(
> - m, uint8_t, split->types, split->types_alloc_size, num_blocks);
> - BROTLI_ENSURE_CAPACITY(
> - m, uint32_t, split->lengths, split->lengths_alloc_size, num_blocks);
> - if (BROTLI_IS_OOM(m)) return;
> - {
> - uint32_t cur_length = 0;
> - size_t block_idx = 0;
> - uint8_t max_type = 0;
> - for (i = 0; i < num_blocks; ++i) {
> - cur_length += block_lengths[i];
> - if (i + 1 == num_blocks ||
> - histogram_symbols[i] != histogram_symbols[i + 1]) {
> - const uint8_t id = (uint8_t)new_index[histogram_symbols[i]];
> - split->types[block_idx] = id;
> - split->lengths[block_idx] = cur_length;
> - max_type = BROTLI_MAX(uint8_t, max_type, id);
> - cur_length = 0;
> - ++block_idx;
> - }
> - }
> - split->num_blocks = block_idx;
> - split->num_types = (size_t)max_type + 1;
> - }
> - BROTLI_FREE(m, new_index);
> - BROTLI_FREE(m, block_lengths);
> - BROTLI_FREE(m, histogram_symbols);
> -}
> -
> -static void FN(SplitByteVector)(MemoryManager* m,
> - const DataType* data, const size_t length,
> - const size_t literals_per_histogram,
> - const size_t max_histograms,
> - const size_t sampling_stride_length,
> - const double block_switch_cost,
> - const BrotliEncoderParams* params,
> - BlockSplit* split) {
> - const size_t data_size = FN(HistogramDataSize)();
> - size_t num_histograms = length / literals_per_histogram + 1;
> - HistogramType* histograms;
> - if (num_histograms > max_histograms) {
> - num_histograms = max_histograms;
> - }
> - if (length == 0) {
> - split->num_types = 1;
> - return;
> - } else if (length < kMinLengthForBlockSplitting) {
> - BROTLI_ENSURE_CAPACITY(m, uint8_t,
> - split->types, split->types_alloc_size, split->num_blocks + 1);
> - BROTLI_ENSURE_CAPACITY(m, uint32_t,
> - split->lengths, split->lengths_alloc_size, split->num_blocks + 1);
> - if (BROTLI_IS_OOM(m)) return;
> - split->num_types = 1;
> - split->types[split->num_blocks] = 0;
> - split->lengths[split->num_blocks] = (uint32_t)length;
> - split->num_blocks++;
> - return;
> - }
> - histograms = BROTLI_ALLOC(m, HistogramType, num_histograms);
> - if (BROTLI_IS_OOM(m)) return;
> - /* Find good entropy codes. */
> - FN(InitialEntropyCodes)(data, length,
> - sampling_stride_length,
> - num_histograms, histograms);
> - FN(RefineEntropyCodes)(data, length,
> - sampling_stride_length,
> - num_histograms, histograms);
> - {
> - /* Find a good path through literals with the good entropy codes. */
> - uint8_t* block_ids = BROTLI_ALLOC(m, uint8_t, length);
> - size_t num_blocks = 0;
> - const size_t bitmaplen = (num_histograms + 7) >> 3;
> - double* insert_cost = BROTLI_ALLOC(m, double, data_size *
> num_histograms);
> - double* cost = BROTLI_ALLOC(m, double, num_histograms);
> - uint8_t* switch_signal = BROTLI_ALLOC(m, uint8_t, length * bitmaplen);
> - uint16_t* new_id = BROTLI_ALLOC(m, uint16_t, num_histograms);
> - const size_t iters = params->quality < HQ_ZOPFLIFICATION_QUALITY ? 3 :
> 10;
> - size_t i;
> - if (BROTLI_IS_OOM(m)) return;
> - for (i = 0; i < iters; ++i) {
> - num_blocks = FN(FindBlocks)(data, length,
> - block_switch_cost,
> - num_histograms, histograms,
> - insert_cost, cost, switch_signal,
> - block_ids);
> - num_histograms = FN(RemapBlockIds)(block_ids, length,
> - new_id, num_histograms);
> - FN(BuildBlockHistograms)(data, length, block_ids,
> - num_histograms, histograms);
> - }
> - BROTLI_FREE(m, insert_cost);
> - BROTLI_FREE(m, cost);
> - BROTLI_FREE(m, switch_signal);
> - BROTLI_FREE(m, new_id);
> - BROTLI_FREE(m, histograms);
> - FN(ClusterBlocks)(m, data, length, num_blocks, block_ids, split);
> - if (BROTLI_IS_OOM(m)) return;
> - BROTLI_FREE(m, block_ids);
> - }
> -}
> -
> -#undef HistogramType
> diff --git a/BaseTools/Source/C/BrotliCompress/enc/brotli_bit_stream.h
> b/BaseTools/Source/C/BrotliCompress/enc/brotli_bit_stream.h
> deleted file mode 100644
> index 18556dc11044..000000000000
> --- a/BaseTools/Source/C/BrotliCompress/enc/brotli_bit_stream.h
> +++ /dev/null
> @@ -1,84 +0,0 @@
> -/* Copyright 2014 Google Inc. All Rights Reserved.
> -
> - Distributed under MIT license.
> - See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
> -*/
> -
> -/* Functions to convert brotli-related data structures into the
> - brotli bit stream. The functions here operate under
> - assumption that there is enough space in the storage, i.e., there are
> - no out-of-range checks anywhere.
> -
> - These functions do bit addressing into a byte array. The byte array
> - is called "storage" and the index to the bit is called storage_ix
> - in function arguments. */
> -
> -#ifndef BROTLI_ENC_BROTLI_BIT_STREAM_H_
> -#define BROTLI_ENC_BROTLI_BIT_STREAM_H_
> -
> -#include "../common/context.h"
> -#include "../common/platform.h"
> -#include <brotli/types.h>
> -#include "./command.h"
> -#include "./entropy_encode.h"
> -#include "./memory.h"
> -#include "./metablock.h"
> -
> -#if defined(__cplusplus) || defined(c_plusplus)
> -extern "C" {
> -#endif
> -
> -/* All Store functions here will use a storage_ix, which is always the bit
> - position for the current storage. */
> -
> -BROTLI_INTERNAL void BrotliStoreHuffmanTree(const uint8_t* depths,
> size_t num,
> - HuffmanTree* tree, size_t* storage_ix, uint8_t* storage);
> -
> -BROTLI_INTERNAL void BrotliBuildAndStoreHuffmanTreeFast(
> - MemoryManager* m, const uint32_t* histogram, const size_t
> histogram_total,
> - const size_t max_bits, uint8_t* depth, uint16_t* bits, size_t* storage_ix,
> - uint8_t* storage);
> -
> -/* REQUIRES: length > 0 */
> -/* REQUIRES: length <= (1 << 24) */
> -BROTLI_INTERNAL void BrotliStoreMetaBlock(MemoryManager* m,
> - const uint8_t* input, size_t start_pos, size_t length, size_t mask,
> - uint8_t prev_byte, uint8_t prev_byte2, BROTLI_BOOL is_last,
> - const BrotliEncoderParams* params, ContextType literal_context_mode,
> - const Command* commands, size_t n_commands, const MetaBlockSplit*
> mb,
> - size_t* storage_ix, uint8_t* storage);
> -
> -/* Stores the meta-block without doing any block splitting, just collects
> - one histogram per block category and uses that for entropy coding.
> - REQUIRES: length > 0
> - REQUIRES: length <= (1 << 24) */
> -BROTLI_INTERNAL void BrotliStoreMetaBlockTrivial(MemoryManager* m,
> - const uint8_t* input, size_t start_pos, size_t length, size_t mask,
> - BROTLI_BOOL is_last, const BrotliEncoderParams* params,
> - const Command* commands, size_t n_commands,
> - size_t* storage_ix, uint8_t* storage);
> -
> -/* Same as above, but uses static prefix codes for histograms with a only a
> few
> - symbols, and uses static code length prefix codes for all other histograms.
> - REQUIRES: length > 0
> - REQUIRES: length <= (1 << 24) */
> -BROTLI_INTERNAL void BrotliStoreMetaBlockFast(MemoryManager* m,
> - const uint8_t* input, size_t start_pos, size_t length, size_t mask,
> - BROTLI_BOOL is_last, const BrotliEncoderParams* params,
> - const Command* commands, size_t n_commands,
> - size_t* storage_ix, uint8_t* storage);
> -
> -/* This is for storing uncompressed blocks (simple raw storage of
> - bytes-as-bytes).
> - REQUIRES: length > 0
> - REQUIRES: length <= (1 << 24) */
> -BROTLI_INTERNAL void BrotliStoreUncompressedMetaBlock(
> - BROTLI_BOOL is_final_block, const uint8_t* BROTLI_RESTRICT input,
> - size_t position, size_t mask, size_t len,
> - size_t* BROTLI_RESTRICT storage_ix, uint8_t* BROTLI_RESTRICT storage);
> -
> -#if defined(__cplusplus) || defined(c_plusplus)
> -} /* extern "C" */
> -#endif
> -
> -#endif /* BROTLI_ENC_BROTLI_BIT_STREAM_H_ */
> diff --git a/BaseTools/Source/C/BrotliCompress/enc/cluster.h
> b/BaseTools/Source/C/BrotliCompress/enc/cluster.h
> deleted file mode 100644
> index b7ebec8c7841..000000000000
> --- a/BaseTools/Source/C/BrotliCompress/enc/cluster.h
> +++ /dev/null
> @@ -1,48 +0,0 @@
> -/* Copyright 2013 Google Inc. All Rights Reserved.
> -
> - Distributed under MIT license.
> - See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
> -*/
> -
> -/* Functions for clustering similar histograms together. */
> -
> -#ifndef BROTLI_ENC_CLUSTER_H_
> -#define BROTLI_ENC_CLUSTER_H_
> -
> -#include "../common/platform.h"
> -#include <brotli/types.h>
> -#include "./histogram.h"
> -#include "./memory.h"
> -
> -#if defined(__cplusplus) || defined(c_plusplus)
> -extern "C" {
> -#endif
> -
> -typedef struct HistogramPair {
> - uint32_t idx1;
> - uint32_t idx2;
> - double cost_combo;
> - double cost_diff;
> -} HistogramPair;
> -
> -#define CODE(X) /* Declaration */;
> -
> -#define FN(X) X ## Literal
> -#include "./cluster_inc.h" /* NOLINT(build/include) */
> -#undef FN
> -
> -#define FN(X) X ## Command
> -#include "./cluster_inc.h" /* NOLINT(build/include) */
> -#undef FN
> -
> -#define FN(X) X ## Distance
> -#include "./cluster_inc.h" /* NOLINT(build/include) */
> -#undef FN
> -
> -#undef CODE
> -
> -#if defined(__cplusplus) || defined(c_plusplus)
> -} /* extern "C" */
> -#endif
> -
> -#endif /* BROTLI_ENC_CLUSTER_H_ */
> diff --git a/BaseTools/Source/C/BrotliCompress/enc/cluster_inc.h
> b/BaseTools/Source/C/BrotliCompress/enc/cluster_inc.h
> deleted file mode 100644
> index b47e0dff0049..000000000000
> --- a/BaseTools/Source/C/BrotliCompress/enc/cluster_inc.h
> +++ /dev/null
> @@ -1,317 +0,0 @@
> -/* NOLINT(build/header_guard) */
> -/* Copyright 2013 Google Inc. All Rights Reserved.
> -
> - Distributed under MIT license.
> - See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
> -*/
> -
> -/* template parameters: FN, CODE */
> -
> -#define HistogramType FN(Histogram)
> -
> -/* Computes the bit cost reduction by combining out[idx1] and out[idx2]
> and if
> - it is below a threshold, stores the pair (idx1, idx2) in the *pairs queue. */
> -BROTLI_INTERNAL void FN(BrotliCompareAndPushToQueue)(
> - const HistogramType* out, const uint32_t* cluster_size, uint32_t idx1,
> - uint32_t idx2, size_t max_num_pairs, HistogramPair* pairs,
> - size_t* num_pairs) CODE({
> - BROTLI_BOOL is_good_pair = BROTLI_FALSE;
> - HistogramPair p;
> - p.idx1 = p.idx2 = 0;
> - p.cost_diff = p.cost_combo = 0;
> - if (idx1 == idx2) {
> - return;
> - }
> - if (idx2 < idx1) {
> - uint32_t t = idx2;
> - idx2 = idx1;
> - idx1 = t;
> - }
> - p.idx1 = idx1;
> - p.idx2 = idx2;
> - p.cost_diff = 0.5 * ClusterCostDiff(cluster_size[idx1], cluster_size[idx2]);
> - p.cost_diff -= out[idx1].bit_cost_;
> - p.cost_diff -= out[idx2].bit_cost_;
> -
> - if (out[idx1].total_count_ == 0) {
> - p.cost_combo = out[idx2].bit_cost_;
> - is_good_pair = BROTLI_TRUE;
> - } else if (out[idx2].total_count_ == 0) {
> - p.cost_combo = out[idx1].bit_cost_;
> - is_good_pair = BROTLI_TRUE;
> - } else {
> - double threshold = *num_pairs == 0 ? 1e99 :
> - BROTLI_MAX(double, 0.0, pairs[0].cost_diff);
> - HistogramType combo = out[idx1];
> - double cost_combo;
> - FN(HistogramAddHistogram)(&combo, &out[idx2]);
> - cost_combo = FN(BrotliPopulationCost)(&combo);
> - if (cost_combo < threshold - p.cost_diff) {
> - p.cost_combo = cost_combo;
> - is_good_pair = BROTLI_TRUE;
> - }
> - }
> - if (is_good_pair) {
> - p.cost_diff += p.cost_combo;
> - if (*num_pairs > 0 && HistogramPairIsLess(&pairs[0], &p)) {
> - /* Replace the top of the queue if needed. */
> - if (*num_pairs < max_num_pairs) {
> - pairs[*num_pairs] = pairs[0];
> - ++(*num_pairs);
> - }
> - pairs[0] = p;
> - } else if (*num_pairs < max_num_pairs) {
> - pairs[*num_pairs] = p;
> - ++(*num_pairs);
> - }
> - }
> -})
> -
> -BROTLI_INTERNAL size_t FN(BrotliHistogramCombine)(HistogramType* out,
> - uint32_t* cluster_size,
> - uint32_t* symbols,
> - uint32_t* clusters,
> - HistogramPair* pairs,
> - size_t num_clusters,
> - size_t symbols_size,
> - size_t max_clusters,
> - size_t max_num_pairs) CODE({
> - double cost_diff_threshold = 0.0;
> - size_t min_cluster_size = 1;
> - size_t num_pairs = 0;
> -
> - {
> - /* We maintain a vector of histogram pairs, with the property that the pair
> - with the maximum bit cost reduction is the first. */
> - size_t idx1;
> - for (idx1 = 0; idx1 < num_clusters; ++idx1) {
> - size_t idx2;
> - for (idx2 = idx1 + 1; idx2 < num_clusters; ++idx2) {
> - FN(BrotliCompareAndPushToQueue)(out, cluster_size, clusters[idx1],
> - clusters[idx2], max_num_pairs, &pairs[0], &num_pairs);
> - }
> - }
> - }
> -
> - while (num_clusters > min_cluster_size) {
> - uint32_t best_idx1;
> - uint32_t best_idx2;
> - size_t i;
> - if (pairs[0].cost_diff >= cost_diff_threshold) {
> - cost_diff_threshold = 1e99;
> - min_cluster_size = max_clusters;
> - continue;
> - }
> - /* Take the best pair from the top of heap. */
> - best_idx1 = pairs[0].idx1;
> - best_idx2 = pairs[0].idx2;
> - FN(HistogramAddHistogram)(&out[best_idx1], &out[best_idx2]);
> - out[best_idx1].bit_cost_ = pairs[0].cost_combo;
> - cluster_size[best_idx1] += cluster_size[best_idx2];
> - for (i = 0; i < symbols_size; ++i) {
> - if (symbols[i] == best_idx2) {
> - symbols[i] = best_idx1;
> - }
> - }
> - for (i = 0; i < num_clusters; ++i) {
> - if (clusters[i] == best_idx2) {
> - memmove(&clusters[i], &clusters[i + 1],
> - (num_clusters - i - 1) * sizeof(clusters[0]));
> - break;
> - }
> - }
> - --num_clusters;
> - {
> - /* Remove pairs intersecting the just combined best pair. */
> - size_t copy_to_idx = 0;
> - for (i = 0; i < num_pairs; ++i) {
> - HistogramPair* p = &pairs[i];
> - if (p->idx1 == best_idx1 || p->idx2 == best_idx1 ||
> - p->idx1 == best_idx2 || p->idx2 == best_idx2) {
> - /* Remove invalid pair from the queue. */
> - continue;
> - }
> - if (HistogramPairIsLess(&pairs[0], p)) {
> - /* Replace the top of the queue if needed. */
> - HistogramPair front = pairs[0];
> - pairs[0] = *p;
> - pairs[copy_to_idx] = front;
> - } else {
> - pairs[copy_to_idx] = *p;
> - }
> - ++copy_to_idx;
> - }
> - num_pairs = copy_to_idx;
> - }
> -
> - /* Push new pairs formed with the combined histogram to the heap. */
> - for (i = 0; i < num_clusters; ++i) {
> - FN(BrotliCompareAndPushToQueue)(out, cluster_size, best_idx1,
> clusters[i],
> - max_num_pairs, &pairs[0], &num_pairs);
> - }
> - }
> - return num_clusters;
> -})
> -
> -/* What is the bit cost of moving histogram from cur_symbol to candidate.
> */
> -BROTLI_INTERNAL double FN(BrotliHistogramBitCostDistance)(
> - const HistogramType* histogram, const HistogramType* candidate)
> CODE({
> - if (histogram->total_count_ == 0) {
> - return 0.0;
> - } else {
> - HistogramType tmp = *histogram;
> - FN(HistogramAddHistogram)(&tmp, candidate);
> - return FN(BrotliPopulationCost)(&tmp) - candidate->bit_cost_;
> - }
> -})
> -
> -/* Find the best 'out' histogram for each of the 'in' histograms.
> - When called, clusters[0..num_clusters) contains the unique values from
> - symbols[0..in_size), but this property is not preserved in this function.
> - Note: we assume that out[]->bit_cost_ is already up-to-date. */
> -BROTLI_INTERNAL void FN(BrotliHistogramRemap)(const HistogramType* in,
> - size_t in_size, const uint32_t* clusters, size_t num_clusters,
> - HistogramType* out, uint32_t* symbols) CODE({
> - size_t i;
> - for (i = 0; i < in_size; ++i) {
> - uint32_t best_out = i == 0 ? symbols[0] : symbols[i - 1];
> - double best_bits =
> - FN(BrotliHistogramBitCostDistance)(&in[i], &out[best_out]);
> - size_t j;
> - for (j = 0; j < num_clusters; ++j) {
> - const double cur_bits =
> - FN(BrotliHistogramBitCostDistance)(&in[i], &out[clusters[j]]);
> - if (cur_bits < best_bits) {
> - best_bits = cur_bits;
> - best_out = clusters[j];
> - }
> - }
> - symbols[i] = best_out;
> - }
> -
> - /* Recompute each out based on raw and symbols. */
> - for (i = 0; i < num_clusters; ++i) {
> - FN(HistogramClear)(&out[clusters[i]]);
> - }
> - for (i = 0; i < in_size; ++i) {
> - FN(HistogramAddHistogram)(&out[symbols[i]], &in[i]);
> - }
> -})
> -
> -/* Reorders elements of the out[0..length) array and changes values in
> - symbols[0..length) array in the following way:
> - * when called, symbols[] contains indexes into out[], and has N unique
> - values (possibly N < length)
> - * on return, symbols'[i] = f(symbols[i]) and
> - out'[symbols'[i]] = out[symbols[i]], for each 0 <= i < length,
> - where f is a bijection between the range of symbols[] and [0..N), and
> - the first occurrences of values in symbols'[i] come in consecutive
> - increasing order.
> - Returns N, the number of unique values in symbols[]. */
> -BROTLI_INTERNAL size_t FN(BrotliHistogramReindex)(MemoryManager* m,
> - HistogramType* out, uint32_t* symbols, size_t length) CODE({
> - static const uint32_t kInvalidIndex = BROTLI_UINT32_MAX;
> - uint32_t* new_index = BROTLI_ALLOC(m, uint32_t, length);
> - uint32_t next_index;
> - HistogramType* tmp;
> - size_t i;
> - if (BROTLI_IS_OOM(m)) return 0;
> - for (i = 0; i < length; ++i) {
> - new_index[i] = kInvalidIndex;
> - }
> - next_index = 0;
> - for (i = 0; i < length; ++i) {
> - if (new_index[symbols[i]] == kInvalidIndex) {
> - new_index[symbols[i]] = next_index;
> - ++next_index;
> - }
> - }
> - /* TODO: by using idea of "cycle-sort" we can avoid allocation of
> - tmp and reduce the number of copying by the factor of 2. */
> - tmp = BROTLI_ALLOC(m, HistogramType, next_index);
> - if (BROTLI_IS_OOM(m)) return 0;
> - next_index = 0;
> - for (i = 0; i < length; ++i) {
> - if (new_index[symbols[i]] == next_index) {
> - tmp[next_index] = out[symbols[i]];
> - ++next_index;
> - }
> - symbols[i] = new_index[symbols[i]];
> - }
> - BROTLI_FREE(m, new_index);
> - for (i = 0; i < next_index; ++i) {
> - out[i] = tmp[i];
> - }
> - BROTLI_FREE(m, tmp);
> - return next_index;
> -})
> -
> -BROTLI_INTERNAL void FN(BrotliClusterHistograms)(
> - MemoryManager* m, const HistogramType* in, const size_t in_size,
> - size_t max_histograms, HistogramType* out, size_t* out_size,
> - uint32_t* histogram_symbols) CODE({
> - uint32_t* cluster_size = BROTLI_ALLOC(m, uint32_t, in_size);
> - uint32_t* clusters = BROTLI_ALLOC(m, uint32_t, in_size);
> - size_t num_clusters = 0;
> - const size_t max_input_histograms = 64;
> - size_t pairs_capacity = max_input_histograms * max_input_histograms / 2;
> - /* For the first pass of clustering, we allow all pairs. */
> - HistogramPair* pairs = BROTLI_ALLOC(m, HistogramPair, pairs_capacity + 1);
> - size_t i;
> -
> - if (BROTLI_IS_OOM(m)) return;
> -
> - for (i = 0; i < in_size; ++i) {
> - cluster_size[i] = 1;
> - }
> -
> - for (i = 0; i < in_size; ++i) {
> - out[i] = in[i];
> - out[i].bit_cost_ = FN(BrotliPopulationCost)(&in[i]);
> - histogram_symbols[i] = (uint32_t)i;
> - }
> -
> - for (i = 0; i < in_size; i += max_input_histograms) {
> - size_t num_to_combine =
> - BROTLI_MIN(size_t, in_size - i, max_input_histograms);
> - size_t num_new_clusters;
> - size_t j;
> - for (j = 0; j < num_to_combine; ++j) {
> - clusters[num_clusters + j] = (uint32_t)(i + j);
> - }
> - num_new_clusters =
> - FN(BrotliHistogramCombine)(out, cluster_size,
> - &histogram_symbols[i],
> - &clusters[num_clusters], pairs,
> - num_to_combine, num_to_combine,
> - max_histograms, pairs_capacity);
> - num_clusters += num_new_clusters;
> - }
> -
> - {
> - /* For the second pass, we limit the total number of histogram pairs.
> - After this limit is reached, we only keep searching for the best pair. */
> - size_t max_num_pairs = BROTLI_MIN(size_t,
> - 64 * num_clusters, (num_clusters / 2) * num_clusters);
> - BROTLI_ENSURE_CAPACITY(
> - m, HistogramPair, pairs, pairs_capacity, max_num_pairs + 1);
> - if (BROTLI_IS_OOM(m)) return;
> -
> - /* Collapse similar histograms. */
> - num_clusters = FN(BrotliHistogramCombine)(out, cluster_size,
> - histogram_symbols, clusters,
> - pairs, num_clusters, in_size,
> - max_histograms, max_num_pairs);
> - }
> - BROTLI_FREE(m, pairs);
> - BROTLI_FREE(m, cluster_size);
> - /* Find the optimal map from original histograms to the final ones. */
> - FN(BrotliHistogramRemap)(in, in_size, clusters, num_clusters,
> - out, histogram_symbols);
> - BROTLI_FREE(m, clusters);
> - /* Convert the context map to a canonical form. */
> - *out_size = FN(BrotliHistogramReindex)(m, out, histogram_symbols,
> in_size);
> - if (BROTLI_IS_OOM(m)) return;
> -})
> -
> -#undef HistogramType
> diff --git a/BaseTools/Source/C/BrotliCompress/enc/command.h
> b/BaseTools/Source/C/BrotliCompress/enc/command.h
> deleted file mode 100644
> index b8a66a44dc0b..000000000000
> --- a/BaseTools/Source/C/BrotliCompress/enc/command.h
> +++ /dev/null
> @@ -1,190 +0,0 @@
> -/* Copyright 2013 Google Inc. All Rights Reserved.
> -
> - Distributed under MIT license.
> - See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
> -*/
> -
> -/* This class models a sequence of literals and a backward reference copy.
> */
> -
> -#ifndef BROTLI_ENC_COMMAND_H_
> -#define BROTLI_ENC_COMMAND_H_
> -
> -#include "../common/constants.h"
> -#include "../common/platform.h"
> -#include <brotli/types.h>
> -#include "./fast_log.h"
> -#include "./params.h"
> -#include "./prefix.h"
> -
> -#if defined(__cplusplus) || defined(c_plusplus)
> -extern "C" {
> -#endif
> -
> -static uint32_t kInsBase[] = { 0, 1, 2, 3, 4, 5, 6, 8, 10, 14, 18, 26, 34, 50,
> - 66, 98, 130, 194, 322, 578, 1090, 2114, 6210, 22594 };
> -static uint32_t kInsExtra[] = { 0, 0, 0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4,
> - 5, 5, 6, 7, 8, 9, 10, 12, 14, 24 };
> -static uint32_t kCopyBase[] = { 2, 3, 4, 5, 6, 7, 8, 9, 10, 12, 14, 18, 22, 30,
> - 38, 54, 70, 102, 134, 198, 326, 582, 1094, 2118 };
> -static uint32_t kCopyExtra[] = { 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 2, 3, 3,
> - 4, 4, 5, 5, 6, 7, 8, 9, 10, 24 };
> -
> -static BROTLI_INLINE uint16_t GetInsertLengthCode(size_t insertlen) {
> - if (insertlen < 6) {
> - return (uint16_t)insertlen;
> - } else if (insertlen < 130) {
> - uint32_t nbits = Log2FloorNonZero(insertlen - 2) - 1u;
> - return (uint16_t)((nbits << 1) + ((insertlen - 2) >> nbits) + 2);
> - } else if (insertlen < 2114) {
> - return (uint16_t)(Log2FloorNonZero(insertlen - 66) + 10);
> - } else if (insertlen < 6210) {
> - return 21u;
> - } else if (insertlen < 22594) {
> - return 22u;
> - } else {
> - return 23u;
> - }
> -}
> -
> -static BROTLI_INLINE uint16_t GetCopyLengthCode(size_t copylen) {
> - if (copylen < 10) {
> - return (uint16_t)(copylen - 2);
> - } else if (copylen < 134) {
> - uint32_t nbits = Log2FloorNonZero(copylen - 6) - 1u;
> - return (uint16_t)((nbits << 1) + ((copylen - 6) >> nbits) + 4);
> - } else if (copylen < 2118) {
> - return (uint16_t)(Log2FloorNonZero(copylen - 70) + 12);
> - } else {
> - return 23u;
> - }
> -}
> -
> -static BROTLI_INLINE uint16_t CombineLengthCodes(
> - uint16_t inscode, uint16_t copycode, BROTLI_BOOL use_last_distance) {
> - uint16_t bits64 =
> - (uint16_t)((copycode & 0x7u) | ((inscode & 0x7u) << 3u));
> - if (use_last_distance && inscode < 8u && copycode < 16u) {
> - return (copycode < 8u) ? bits64 : (bits64 | 64u);
> - } else {
> - /* Specification: 5 Encoding of ... (last table) */
> - /* offset = 2 * index, where index is in range [0..8] */
> - uint32_t offset = 2u * ((copycode >> 3u) + 3u * (inscode >> 3u));
> - /* All values in specification are K * 64,
> - where K = [2, 3, 6, 4, 5, 8, 7, 9, 10],
> - i + 1 = [1, 2, 3, 4, 5, 6, 7, 8, 9],
> - K - i - 1 = [1, 1, 3, 0, 0, 2, 0, 1, 2] = D.
> - All values in D require only 2 bits to encode.
> - Magic constant is shifted 6 bits left, to avoid final multiplication. */
> - offset = (offset << 5u) + 0x40u + ((0x520D40u >> offset) & 0xC0u);
> - return (uint16_t)(offset | bits64);
> - }
> -}
> -
> -static BROTLI_INLINE void GetLengthCode(size_t insertlen, size_t copylen,
> - BROTLI_BOOL use_last_distance,
> - uint16_t* code) {
> - uint16_t inscode = GetInsertLengthCode(insertlen);
> - uint16_t copycode = GetCopyLengthCode(copylen);
> - *code = CombineLengthCodes(inscode, copycode, use_last_distance);
> -}
> -
> -static BROTLI_INLINE uint32_t GetInsertBase(uint16_t inscode) {
> - return kInsBase[inscode];
> -}
> -
> -static BROTLI_INLINE uint32_t GetInsertExtra(uint16_t inscode) {
> - return kInsExtra[inscode];
> -}
> -
> -static BROTLI_INLINE uint32_t GetCopyBase(uint16_t copycode) {
> - return kCopyBase[copycode];
> -}
> -
> -static BROTLI_INLINE uint32_t GetCopyExtra(uint16_t copycode) {
> - return kCopyExtra[copycode];
> -}
> -
> -typedef struct Command {
> - uint32_t insert_len_;
> - /* Stores copy_len in low 25 bits and copy_code - copy_len in high 7 bit. */
> - uint32_t copy_len_;
> - /* Stores distance extra bits. */
> - uint32_t dist_extra_;
> - uint16_t cmd_prefix_;
> - /* Stores distance code in low 10 bits
> - and number of extra bits in high 6 bits. */
> - uint16_t dist_prefix_;
> -} Command;
> -
> -/* distance_code is e.g. 0 for same-as-last short code, or 16 for offset 1. */
> -static BROTLI_INLINE void InitCommand(Command* self,
> - const BrotliDistanceParams* dist, size_t insertlen,
> - size_t copylen, int copylen_code_delta, size_t distance_code) {
> - /* Don't rely on signed int representation, use honest casts. */
> - uint32_t delta = (uint8_t)((int8_t)copylen_code_delta);
> - self->insert_len_ = (uint32_t)insertlen;
> - self->copy_len_ = (uint32_t)(copylen | (delta << 25));
> - /* The distance prefix and extra bits are stored in this Command as if
> - npostfix and ndirect were 0, they are only recomputed later after the
> - clustering if needed. */
> - PrefixEncodeCopyDistance(
> - distance_code, dist->num_direct_distance_codes,
> - dist->distance_postfix_bits, &self->dist_prefix_, &self->dist_extra_);
> - GetLengthCode(
> - insertlen, (size_t)((int)copylen + copylen_code_delta),
> - TO_BROTLI_BOOL((self->dist_prefix_ & 0x3FF) == 0), &self-
> >cmd_prefix_);
> -}
> -
> -static BROTLI_INLINE void InitInsertCommand(Command* self, size_t
> insertlen) {
> - self->insert_len_ = (uint32_t)insertlen;
> - self->copy_len_ = 4 << 25;
> - self->dist_extra_ = 0;
> - self->dist_prefix_ = BROTLI_NUM_DISTANCE_SHORT_CODES;
> - GetLengthCode(insertlen, 4, BROTLI_FALSE, &self->cmd_prefix_);
> -}
> -
> -static BROTLI_INLINE uint32_t CommandRestoreDistanceCode(
> - const Command* self, const BrotliDistanceParams* dist) {
> - if ((self->dist_prefix_ & 0x3FFu) <
> - BROTLI_NUM_DISTANCE_SHORT_CODES + dist-
> >num_direct_distance_codes) {
> - return self->dist_prefix_ & 0x3FFu;
> - } else {
> - uint32_t dcode = self->dist_prefix_ & 0x3FFu;
> - uint32_t nbits = self->dist_prefix_ >> 10;
> - uint32_t extra = self->dist_extra_;
> - uint32_t postfix_mask = (1U << dist->distance_postfix_bits) - 1U;
> - uint32_t hcode = (dcode - dist->num_direct_distance_codes -
> - BROTLI_NUM_DISTANCE_SHORT_CODES) >>
> - dist->distance_postfix_bits;
> - uint32_t lcode = (dcode - dist->num_direct_distance_codes -
> - BROTLI_NUM_DISTANCE_SHORT_CODES) & postfix_mask;
> - uint32_t offset = ((2U + (hcode & 1U)) << nbits) - 4U;
> - return ((offset + extra) << dist->distance_postfix_bits) + lcode +
> - dist->num_direct_distance_codes +
> BROTLI_NUM_DISTANCE_SHORT_CODES;
> - }
> -}
> -
> -static BROTLI_INLINE uint32_t CommandDistanceContext(const Command*
> self) {
> - uint32_t r = self->cmd_prefix_ >> 6;
> - uint32_t c = self->cmd_prefix_ & 7;
> - if ((r == 0 || r == 2 || r == 4 || r == 7) && (c <= 2)) {
> - return c;
> - }
> - return 3;
> -}
> -
> -static BROTLI_INLINE uint32_t CommandCopyLen(const Command* self) {
> - return self->copy_len_ & 0x1FFFFFF;
> -}
> -
> -static BROTLI_INLINE uint32_t CommandCopyLenCode(const Command*
> self) {
> - uint32_t modifier = self->copy_len_ >> 25;
> - int32_t delta = (int8_t)((uint8_t)(modifier | ((modifier & 0x40) << 1)));
> - return (uint32_t)((int32_t)(self->copy_len_ & 0x1FFFFFF) + delta);
> -}
> -
> -#if defined(__cplusplus) || defined(c_plusplus)
> -} /* extern "C" */
> -#endif
> -
> -#endif /* BROTLI_ENC_COMMAND_H_ */
> diff --git a/BaseTools/Source/C/BrotliCompress/enc/compress_fragment.h
> b/BaseTools/Source/C/BrotliCompress/enc/compress_fragment.h
> deleted file mode 100644
> index d4c34299ea2c..000000000000
> --- a/BaseTools/Source/C/BrotliCompress/enc/compress_fragment.h
> +++ /dev/null
> @@ -1,61 +0,0 @@
> -/* Copyright 2015 Google Inc. All Rights Reserved.
> -
> - Distributed under MIT license.
> - See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
> -*/
> -
> -/* Function for fast encoding of an input fragment, independently from the
> input
> - history. This function uses one-pass processing: when we find a backward
> - match, we immediately emit the corresponding command and literal codes
> to
> - the bit stream. */
> -
> -#ifndef BROTLI_ENC_COMPRESS_FRAGMENT_H_
> -#define BROTLI_ENC_COMPRESS_FRAGMENT_H_
> -
> -#include "../common/platform.h"
> -#include <brotli/types.h>
> -#include "./memory.h"
> -
> -#if defined(__cplusplus) || defined(c_plusplus)
> -extern "C" {
> -#endif
> -
> -/* Compresses "input" string to the "*storage" buffer as one or more
> complete
> - meta-blocks, and updates the "*storage_ix" bit position.
> -
> - If "is_last" is 1, emits an additional empty last meta-block.
> -
> - "cmd_depth" and "cmd_bits" contain the command and distance prefix
> codes
> - (see comment in encode.h) used for the encoding of this input fragment.
> - If "is_last" is 0, they are updated to reflect the statistics
> - of this input fragment, to be used for the encoding of the next fragment.
> -
> - "*cmd_code_numbits" is the number of bits of the compressed
> representation
> - of the command and distance prefix codes, and "cmd_code" is an array of
> - at least "(*cmd_code_numbits + 7) >> 3" size that contains the
> compressed
> - command and distance prefix codes. If "is_last" is 0, these are also
> - updated to represent the updated "cmd_depth" and "cmd_bits".
> -
> - REQUIRES: "input_size" is greater than zero, or "is_last" is 1.
> - REQUIRES: "input_size" is less or equal to maximal metablock size (1 << 24).
> - REQUIRES: All elements in "table[0..table_size-1]" are initialized to zero.
> - REQUIRES: "table_size" is an odd (9, 11, 13, 15) power of two
> - OUTPUT: maximal copy distance <= |input_size|
> - OUTPUT: maximal copy distance <= BROTLI_MAX_BACKWARD_LIMIT(18)
> */
> -BROTLI_INTERNAL void BrotliCompressFragmentFast(MemoryManager* m,
> - const uint8_t* input,
> - size_t input_size,
> - BROTLI_BOOL is_last,
> - int* table, size_t table_size,
> - uint8_t cmd_depth[128],
> - uint16_t cmd_bits[128],
> - size_t* cmd_code_numbits,
> - uint8_t* cmd_code,
> - size_t* storage_ix,
> - uint8_t* storage);
> -
> -#if defined(__cplusplus) || defined(c_plusplus)
> -} /* extern "C" */
> -#endif
> -
> -#endif /* BROTLI_ENC_COMPRESS_FRAGMENT_H_ */
> diff --git
> a/BaseTools/Source/C/BrotliCompress/enc/compress_fragment_two_pass.
> h
> b/BaseTools/Source/C/BrotliCompress/enc/compress_fragment_two_pass.
> h
> deleted file mode 100644
> index c97e22cfcaba..000000000000
> ---
> a/BaseTools/Source/C/BrotliCompress/enc/compress_fragment_two_pass.
> h
> +++ /dev/null
> @@ -1,54 +0,0 @@
> -/* Copyright 2015 Google Inc. All Rights Reserved.
> -
> - Distributed under MIT license.
> - See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
> -*/
> -
> -/* Function for fast encoding of an input fragment, independently from the
> input
> - history. This function uses two-pass processing: in the first pass we save
> - the found backward matches and literal bytes into a buffer, and in the
> - second pass we emit them into the bit stream using prefix codes built
> based
> - on the actual command and literal byte histograms. */
> -
> -#ifndef BROTLI_ENC_COMPRESS_FRAGMENT_TWO_PASS_H_
> -#define BROTLI_ENC_COMPRESS_FRAGMENT_TWO_PASS_H_
> -
> -#include "../common/platform.h"
> -#include <brotli/types.h>
> -#include "./memory.h"
> -
> -#if defined(__cplusplus) || defined(c_plusplus)
> -extern "C" {
> -#endif
> -
> -static const size_t kCompressFragmentTwoPassBlockSize = 1 << 17;
> -
> -/* Compresses "input" string to the "*storage" buffer as one or more
> complete
> - meta-blocks, and updates the "*storage_ix" bit position.
> -
> - If "is_last" is 1, emits an additional empty last meta-block.
> -
> - REQUIRES: "input_size" is greater than zero, or "is_last" is 1.
> - REQUIRES: "input_size" is less or equal to maximal metablock size (1 << 24).
> - REQUIRES: "command_buf" and "literal_buf" point to at least
> - kCompressFragmentTwoPassBlockSize long arrays.
> - REQUIRES: All elements in "table[0..table_size-1]" are initialized to zero.
> - REQUIRES: "table_size" is a power of two
> - OUTPUT: maximal copy distance <= |input_size|
> - OUTPUT: maximal copy distance <= BROTLI_MAX_BACKWARD_LIMIT(18)
> */
> -BROTLI_INTERNAL void
> BrotliCompressFragmentTwoPass(MemoryManager* m,
> - const uint8_t* input,
> - size_t input_size,
> - BROTLI_BOOL is_last,
> - uint32_t* command_buf,
> - uint8_t* literal_buf,
> - int* table,
> - size_t table_size,
> - size_t* storage_ix,
> - uint8_t* storage);
> -
> -#if defined(__cplusplus) || defined(c_plusplus)
> -} /* extern "C" */
> -#endif
> -
> -#endif /* BROTLI_ENC_COMPRESS_FRAGMENT_TWO_PASS_H_ */
> diff --git a/BaseTools/Source/C/BrotliCompress/enc/dictionary_hash.h
> b/BaseTools/Source/C/BrotliCompress/enc/dictionary_hash.h
> deleted file mode 100644
> index ab31827c0bb0..000000000000
> --- a/BaseTools/Source/C/BrotliCompress/enc/dictionary_hash.h
> +++ /dev/null
> @@ -1,24 +0,0 @@
> -/* Copyright 2015 Google Inc. All Rights Reserved.
> -
> - Distributed under MIT license.
> - See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
> -*/
> -
> -/* Hash table on the 4-byte prefixes of static dictionary words. */
> -
> -#ifndef BROTLI_ENC_DICTIONARY_HASH_H_
> -#define BROTLI_ENC_DICTIONARY_HASH_H_
> -
> -#include <brotli/types.h>
> -
> -#if defined(__cplusplus) || defined(c_plusplus)
> -extern "C" {
> -#endif
> -
> -extern const uint16_t kStaticDictionaryHash[32768];
> -
> -#if defined(__cplusplus) || defined(c_plusplus)
> -} /* extern "C" */
> -#endif
> -
> -#endif /* BROTLI_ENC_DICTIONARY_HASH_H_ */
> diff --git a/BaseTools/Source/C/BrotliCompress/enc/encoder_dict.h
> b/BaseTools/Source/C/BrotliCompress/enc/encoder_dict.h
> deleted file mode 100644
> index 7c41ea055ac0..000000000000
> --- a/BaseTools/Source/C/BrotliCompress/enc/encoder_dict.h
> +++ /dev/null
> @@ -1,41 +0,0 @@
> -/* Copyright 2017 Google Inc. All Rights Reserved.
> -
> - Distributed under MIT license.
> - See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
> -*/
> -
> -#ifndef BROTLI_ENC_ENCODER_DICT_H_
> -#define BROTLI_ENC_ENCODER_DICT_H_
> -
> -#include "../common/dictionary.h"
> -#include "../common/platform.h"
> -#include <brotli/types.h>
> -#include "./static_dict_lut.h"
> -
> -#if defined(__cplusplus) || defined(c_plusplus)
> -extern "C" {
> -#endif
> -
> -/* Dictionary data (words and transforms) for 1 possible context */
> -typedef struct BrotliEncoderDictionary {
> - const BrotliDictionary* words;
> -
> - /* cut off for fast encoder */
> - uint32_t cutoffTransformsCount;
> - uint64_t cutoffTransforms;
> -
> - /* from dictionary_hash.h, for fast encoder */
> - const uint16_t* hash_table;
> -
> - /* from static_dict_lut.h, for slow encoder */
> - const uint16_t* buckets;
> - const DictWord* dict_words;
> -} BrotliEncoderDictionary;
> -
> -BROTLI_INTERNAL void BrotliInitEncoderDictionary(BrotliEncoderDictionary*
> dict);
> -
> -#if defined(__cplusplus) || defined(c_plusplus)
> -} /* extern "C" */
> -#endif
> -
> -#endif /* BROTLI_ENC_ENCODER_DICT_H_ */
> diff --git a/BaseTools/Source/C/BrotliCompress/enc/entropy_encode.h
> b/BaseTools/Source/C/BrotliCompress/enc/entropy_encode.h
> deleted file mode 100644
> index 173d98336347..000000000000
> --- a/BaseTools/Source/C/BrotliCompress/enc/entropy_encode.h
> +++ /dev/null
> @@ -1,122 +0,0 @@
> -/* Copyright 2010 Google Inc. All Rights Reserved.
> -
> - Distributed under MIT license.
> - See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
> -*/
> -
> -/* Entropy encoding (Huffman) utilities. */
> -
> -#ifndef BROTLI_ENC_ENTROPY_ENCODE_H_
> -#define BROTLI_ENC_ENTROPY_ENCODE_H_
> -
> -#include "../common/platform.h"
> -#include <brotli/types.h>
> -
> -#if defined(__cplusplus) || defined(c_plusplus)
> -extern "C" {
> -#endif
> -
> -/* A node of a Huffman tree. */
> -typedef struct HuffmanTree {
> - uint32_t total_count_;
> - int16_t index_left_;
> - int16_t index_right_or_value_;
> -} HuffmanTree;
> -
> -static BROTLI_INLINE void InitHuffmanTree(HuffmanTree* self, uint32_t
> count,
> - int16_t left, int16_t right) {
> - self->total_count_ = count;
> - self->index_left_ = left;
> - self->index_right_or_value_ = right;
> -}
> -
> -/* Returns 1 is assignment of depths succeeded, otherwise 0. */
> -BROTLI_INTERNAL BROTLI_BOOL BrotliSetDepth(
> - int p, HuffmanTree* pool, uint8_t* depth, int max_depth);
> -
> -/* This function will create a Huffman tree.
> -
> - The (data,length) contains the population counts.
> - The tree_limit is the maximum bit depth of the Huffman codes.
> -
> - The depth contains the tree, i.e., how many bits are used for
> - the symbol.
> -
> - The actual Huffman tree is constructed in the tree[] array, which has to
> - be at least 2 * length + 1 long.
> -
> - See http://en.wikipedia.org/wiki/Huffman_coding */
> -BROTLI_INTERNAL void BrotliCreateHuffmanTree(const uint32_t* data,
> - const size_t length,
> - const int tree_limit,
> - HuffmanTree* tree,
> - uint8_t* depth);
> -
> -/* Change the population counts in a way that the consequent
> - Huffman tree compression, especially its RLE-part will be more
> - likely to compress this data more efficiently.
> -
> - length contains the size of the histogram.
> - counts contains the population counts.
> - good_for_rle is a buffer of at least length size */
> -BROTLI_INTERNAL void BrotliOptimizeHuffmanCountsForRle(
> - size_t length, uint32_t* counts, uint8_t* good_for_rle);
> -
> -/* Write a Huffman tree from bit depths into the bit-stream representation
> - of a Huffman tree. The generated Huffman tree is to be compressed once
> - more using a Huffman tree */
> -BROTLI_INTERNAL void BrotliWriteHuffmanTree(const uint8_t* depth,
> - size_t num,
> - size_t* tree_size,
> - uint8_t* tree,
> - uint8_t* extra_bits_data);
> -
> -/* Get the actual bit values for a tree of bit depths. */
> -BROTLI_INTERNAL void BrotliConvertBitDepthsToSymbols(const uint8_t*
> depth,
> - size_t len,
> - uint16_t* bits);
> -
> -/* Input size optimized Shell sort. */
> -typedef BROTLI_BOOL (*HuffmanTreeComparator)(
> - const HuffmanTree*, const HuffmanTree*);
> -static BROTLI_INLINE void SortHuffmanTreeItems(HuffmanTree* items,
> - const size_t n, HuffmanTreeComparator comparator) {
> - static const size_t gaps[] = {132, 57, 23, 10, 4, 1};
> - if (n < 13) {
> - /* Insertion sort. */
> - size_t i;
> - for (i = 1; i < n; ++i) {
> - HuffmanTree tmp = items[i];
> - size_t k = i;
> - size_t j = i - 1;
> - while (comparator(&tmp, &items[j])) {
> - items[k] = items[j];
> - k = j;
> - if (!j--) break;
> - }
> - items[k] = tmp;
> - }
> - return;
> - } else {
> - /* Shell sort. */
> - int g = n < 57 ? 2 : 0;
> - for (; g < 6; ++g) {
> - size_t gap = gaps[g];
> - size_t i;
> - for (i = gap; i < n; ++i) {
> - size_t j = i;
> - HuffmanTree tmp = items[i];
> - for (; j >= gap && comparator(&tmp, &items[j - gap]); j -= gap) {
> - items[j] = items[j - gap];
> - }
> - items[j] = tmp;
> - }
> - }
> - }
> -}
> -
> -#if defined(__cplusplus) || defined(c_plusplus)
> -} /* extern "C" */
> -#endif
> -
> -#endif /* BROTLI_ENC_ENTROPY_ENCODE_H_ */
> diff --git
> a/BaseTools/Source/C/BrotliCompress/enc/entropy_encode_static.h
> b/BaseTools/Source/C/BrotliCompress/enc/entropy_encode_static.h
> deleted file mode 100644
> index 3910af97ef8e..000000000000
> --- a/BaseTools/Source/C/BrotliCompress/enc/entropy_encode_static.h
> +++ /dev/null
> @@ -1,539 +0,0 @@
> -/* Copyright 2015 Google Inc. All Rights Reserved.
> -
> - Distributed under MIT license.
> - See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
> -*/
> -
> -/* Static entropy codes used for faster meta-block encoding. */
> -
> -#ifndef BROTLI_ENC_ENTROPY_ENCODE_STATIC_H_
> -#define BROTLI_ENC_ENTROPY_ENCODE_STATIC_H_
> -
> -#include "../common/constants.h"
> -#include "../common/platform.h"
> -#include <brotli/types.h>
> -#include "./write_bits.h"
> -
> -#if defined(__cplusplus) || defined(c_plusplus)
> -extern "C" {
> -#endif
> -
> -static const uint8_t kCodeLengthDepth[18] = {
> - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 5, 5, 0, 4, 4,
> -};
> -
> -static const uint8_t
> kStaticCommandCodeDepth[BROTLI_NUM_COMMAND_SYMBOLS] = {
> - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
> - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
> - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
> - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
> - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
> - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
> - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
> - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
> - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
> - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
> - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
> - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
> - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
> - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
> - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
> - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
> - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
> - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
> - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
> - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
> - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
> - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
> - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
> - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
> - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
> - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
> - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
> - 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
> - 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
> - 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
> - 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
> - 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
> - 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
> - 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
> - 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
> - 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
> - 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
> - 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
> - 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
> - 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
> - 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
> - 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
> - 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
> - 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
> -};
> -
> -static const uint8_t kStaticDistanceCodeDepth[64] = {
> - 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
> - 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
> - 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
> - 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
> -};
> -
> -static const uint32_t kCodeLengthBits[18] = {
> - 0, 8, 4, 12, 2, 10, 6, 14, 1, 9, 5, 13, 3, 15, 31, 0, 11, 7,
> -};
> -
> -static BROTLI_INLINE void StoreStaticCodeLengthCode(
> - size_t* storage_ix, uint8_t* storage) {
> - BrotliWriteBits(
> - 40, BROTLI_MAKE_UINT64_T(0x0000FFu, 0x55555554u), storage_ix,
> storage);
> -}
> -
> -static const uint64_t kZeroRepsBits[BROTLI_NUM_COMMAND_SYMBOLS] =
> {
> - 0x00000000, 0x00000000, 0x00000000, 0x00000007, 0x00000017, 0x00000027,
> - 0x00000037, 0x00000047, 0x00000057, 0x00000067, 0x00000077, 0x00000770,
> - 0x00000b87, 0x00001387, 0x00001b87, 0x00002387, 0x00002b87, 0x00003387,
> - 0x00003b87, 0x00000397, 0x00000b97, 0x00001397, 0x00001b97, 0x00002397,
> - 0x00002b97, 0x00003397, 0x00003b97, 0x000003a7, 0x00000ba7, 0x000013a7,
> - 0x00001ba7, 0x000023a7, 0x00002ba7, 0x000033a7, 0x00003ba7, 0x000003b7,
> - 0x00000bb7, 0x000013b7, 0x00001bb7, 0x000023b7, 0x00002bb7,
> 0x000033b7,
> - 0x00003bb7, 0x000003c7, 0x00000bc7, 0x000013c7, 0x00001bc7, 0x000023c7,
> - 0x00002bc7, 0x000033c7, 0x00003bc7, 0x000003d7, 0x00000bd7, 0x000013d7,
> - 0x00001bd7, 0x000023d7, 0x00002bd7, 0x000033d7, 0x00003bd7,
> 0x000003e7,
> - 0x00000be7, 0x000013e7, 0x00001be7, 0x000023e7, 0x00002be7,
> 0x000033e7,
> - 0x00003be7, 0x000003f7, 0x00000bf7, 0x000013f7, 0x00001bf7, 0x000023f7,
> - 0x00002bf7, 0x000033f7, 0x00003bf7, 0x0001c387, 0x0005c387, 0x0009c387,
> - 0x000dc387, 0x0011c387, 0x0015c387, 0x0019c387, 0x001dc387, 0x0001cb87,
> - 0x0005cb87, 0x0009cb87, 0x000dcb87, 0x0011cb87, 0x0015cb87, 0x0019cb87,
> - 0x001dcb87, 0x0001d387, 0x0005d387, 0x0009d387, 0x000dd387,
> 0x0011d387,
> - 0x0015d387, 0x0019d387, 0x001dd387, 0x0001db87, 0x0005db87,
> 0x0009db87,
> - 0x000ddb87, 0x0011db87, 0x0015db87, 0x0019db87, 0x001ddb87,
> 0x0001e387,
> - 0x0005e387, 0x0009e387, 0x000de387, 0x0011e387, 0x0015e387,
> 0x0019e387,
> - 0x001de387, 0x0001eb87, 0x0005eb87, 0x0009eb87, 0x000deb87,
> 0x0011eb87,
> - 0x0015eb87, 0x0019eb87, 0x001deb87, 0x0001f387, 0x0005f387, 0x0009f387,
> - 0x000df387, 0x0011f387, 0x0015f387, 0x0019f387, 0x001df387, 0x0001fb87,
> - 0x0005fb87, 0x0009fb87, 0x000dfb87, 0x0011fb87, 0x0015fb87, 0x0019fb87,
> - 0x001dfb87, 0x0001c397, 0x0005c397, 0x0009c397, 0x000dc397, 0x0011c397,
> - 0x0015c397, 0x0019c397, 0x001dc397, 0x0001cb97, 0x0005cb97, 0x0009cb97,
> - 0x000dcb97, 0x0011cb97, 0x0015cb97, 0x0019cb97, 0x001dcb97, 0x0001d397,
> - 0x0005d397, 0x0009d397, 0x000dd397, 0x0011d397, 0x0015d397,
> 0x0019d397,
> - 0x001dd397, 0x0001db97, 0x0005db97, 0x0009db97, 0x000ddb97,
> 0x0011db97,
> - 0x0015db97, 0x0019db97, 0x001ddb97, 0x0001e397, 0x0005e397,
> 0x0009e397,
> - 0x000de397, 0x0011e397, 0x0015e397, 0x0019e397, 0x001de397,
> 0x0001eb97,
> - 0x0005eb97, 0x0009eb97, 0x000deb97, 0x0011eb97, 0x0015eb97,
> 0x0019eb97,
> - 0x001deb97, 0x0001f397, 0x0005f397, 0x0009f397, 0x000df397, 0x0011f397,
> - 0x0015f397, 0x0019f397, 0x001df397, 0x0001fb97, 0x0005fb97, 0x0009fb97,
> - 0x000dfb97, 0x0011fb97, 0x0015fb97, 0x0019fb97, 0x001dfb97, 0x0001c3a7,
> - 0x0005c3a7, 0x0009c3a7, 0x000dc3a7, 0x0011c3a7, 0x0015c3a7, 0x0019c3a7,
> - 0x001dc3a7, 0x0001cba7, 0x0005cba7, 0x0009cba7, 0x000dcba7, 0x0011cba7,
> - 0x0015cba7, 0x0019cba7, 0x001dcba7, 0x0001d3a7, 0x0005d3a7, 0x0009d3a7,
> - 0x000dd3a7, 0x0011d3a7, 0x0015d3a7, 0x0019d3a7, 0x001dd3a7,
> 0x0001dba7,
> - 0x0005dba7, 0x0009dba7, 0x000ddba7, 0x0011dba7, 0x0015dba7,
> 0x0019dba7,
> - 0x001ddba7, 0x0001e3a7, 0x0005e3a7, 0x0009e3a7, 0x000de3a7,
> 0x0011e3a7,
> - 0x0015e3a7, 0x0019e3a7, 0x001de3a7, 0x0001eba7, 0x0005eba7,
> 0x0009eba7,
> - 0x000deba7, 0x0011eba7, 0x0015eba7, 0x0019eba7, 0x001deba7,
> 0x0001f3a7,
> - 0x0005f3a7, 0x0009f3a7, 0x000df3a7, 0x0011f3a7, 0x0015f3a7, 0x0019f3a7,
> - 0x001df3a7, 0x0001fba7, 0x0005fba7, 0x0009fba7, 0x000dfba7, 0x0011fba7,
> - 0x0015fba7, 0x0019fba7, 0x001dfba7, 0x0001c3b7, 0x0005c3b7, 0x0009c3b7,
> - 0x000dc3b7, 0x0011c3b7, 0x0015c3b7, 0x0019c3b7, 0x001dc3b7, 0x0001cbb7,
> - 0x0005cbb7, 0x0009cbb7, 0x000dcbb7, 0x0011cbb7, 0x0015cbb7,
> 0x0019cbb7,
> - 0x001dcbb7, 0x0001d3b7, 0x0005d3b7, 0x0009d3b7, 0x000dd3b7,
> 0x0011d3b7,
> - 0x0015d3b7, 0x0019d3b7, 0x001dd3b7, 0x0001dbb7, 0x0005dbb7,
> 0x0009dbb7,
> - 0x000ddbb7, 0x0011dbb7, 0x0015dbb7, 0x0019dbb7, 0x001ddbb7,
> 0x0001e3b7,
> - 0x0005e3b7, 0x0009e3b7, 0x000de3b7, 0x0011e3b7, 0x0015e3b7,
> 0x0019e3b7,
> - 0x001de3b7, 0x0001ebb7, 0x0005ebb7, 0x0009ebb7, 0x000debb7,
> 0x0011ebb7,
> - 0x0015ebb7, 0x0019ebb7, 0x001debb7, 0x0001f3b7, 0x0005f3b7,
> 0x0009f3b7,
> - 0x000df3b7, 0x0011f3b7, 0x0015f3b7, 0x0019f3b7, 0x001df3b7, 0x0001fbb7,
> - 0x0005fbb7, 0x0009fbb7, 0x000dfbb7, 0x0011fbb7, 0x0015fbb7, 0x0019fbb7,
> - 0x001dfbb7, 0x0001c3c7, 0x0005c3c7, 0x0009c3c7, 0x000dc3c7, 0x0011c3c7,
> - 0x0015c3c7, 0x0019c3c7, 0x001dc3c7, 0x0001cbc7, 0x0005cbc7, 0x0009cbc7,
> - 0x000dcbc7, 0x0011cbc7, 0x0015cbc7, 0x0019cbc7, 0x001dcbc7, 0x0001d3c7,
> - 0x0005d3c7, 0x0009d3c7, 0x000dd3c7, 0x0011d3c7, 0x0015d3c7, 0x0019d3c7,
> - 0x001dd3c7, 0x0001dbc7, 0x0005dbc7, 0x0009dbc7, 0x000ddbc7,
> 0x0011dbc7,
> - 0x0015dbc7, 0x0019dbc7, 0x001ddbc7, 0x0001e3c7, 0x0005e3c7, 0x0009e3c7,
> - 0x000de3c7, 0x0011e3c7, 0x0015e3c7, 0x0019e3c7, 0x001de3c7, 0x0001ebc7,
> - 0x0005ebc7, 0x0009ebc7, 0x000debc7, 0x0011ebc7, 0x0015ebc7,
> 0x0019ebc7,
> - 0x001debc7, 0x0001f3c7, 0x0005f3c7, 0x0009f3c7, 0x000df3c7, 0x0011f3c7,
> - 0x0015f3c7, 0x0019f3c7, 0x001df3c7, 0x0001fbc7, 0x0005fbc7, 0x0009fbc7,
> - 0x000dfbc7, 0x0011fbc7, 0x0015fbc7, 0x0019fbc7, 0x001dfbc7, 0x0001c3d7,
> - 0x0005c3d7, 0x0009c3d7, 0x000dc3d7, 0x0011c3d7, 0x0015c3d7, 0x0019c3d7,
> - 0x001dc3d7, 0x0001cbd7, 0x0005cbd7, 0x0009cbd7, 0x000dcbd7,
> 0x0011cbd7,
> - 0x0015cbd7, 0x0019cbd7, 0x001dcbd7, 0x0001d3d7, 0x0005d3d7,
> 0x0009d3d7,
> - 0x000dd3d7, 0x0011d3d7, 0x0015d3d7, 0x0019d3d7, 0x001dd3d7,
> 0x0001dbd7,
> - 0x0005dbd7, 0x0009dbd7, 0x000ddbd7, 0x0011dbd7, 0x0015dbd7,
> 0x0019dbd7,
> - 0x001ddbd7, 0x0001e3d7, 0x0005e3d7, 0x0009e3d7, 0x000de3d7,
> 0x0011e3d7,
> - 0x0015e3d7, 0x0019e3d7, 0x001de3d7, 0x0001ebd7, 0x0005ebd7,
> 0x0009ebd7,
> - 0x000debd7, 0x0011ebd7, 0x0015ebd7, 0x0019ebd7, 0x001debd7,
> 0x0001f3d7,
> - 0x0005f3d7, 0x0009f3d7, 0x000df3d7, 0x0011f3d7, 0x0015f3d7, 0x0019f3d7,
> - 0x001df3d7, 0x0001fbd7, 0x0005fbd7, 0x0009fbd7, 0x000dfbd7, 0x0011fbd7,
> - 0x0015fbd7, 0x0019fbd7, 0x001dfbd7, 0x0001c3e7, 0x0005c3e7, 0x0009c3e7,
> - 0x000dc3e7, 0x0011c3e7, 0x0015c3e7, 0x0019c3e7, 0x001dc3e7, 0x0001cbe7,
> - 0x0005cbe7, 0x0009cbe7, 0x000dcbe7, 0x0011cbe7, 0x0015cbe7,
> 0x0019cbe7,
> - 0x001dcbe7, 0x0001d3e7, 0x0005d3e7, 0x0009d3e7, 0x000dd3e7,
> 0x0011d3e7,
> - 0x0015d3e7, 0x0019d3e7, 0x001dd3e7, 0x0001dbe7, 0x0005dbe7,
> 0x0009dbe7,
> - 0x000ddbe7, 0x0011dbe7, 0x0015dbe7, 0x0019dbe7, 0x001ddbe7,
> 0x0001e3e7,
> - 0x0005e3e7, 0x0009e3e7, 0x000de3e7, 0x0011e3e7, 0x0015e3e7,
> 0x0019e3e7,
> - 0x001de3e7, 0x0001ebe7, 0x0005ebe7, 0x0009ebe7, 0x000debe7,
> 0x0011ebe7,
> - 0x0015ebe7, 0x0019ebe7, 0x001debe7, 0x0001f3e7, 0x0005f3e7,
> 0x0009f3e7,
> - 0x000df3e7, 0x0011f3e7, 0x0015f3e7, 0x0019f3e7, 0x001df3e7, 0x0001fbe7,
> - 0x0005fbe7, 0x0009fbe7, 0x000dfbe7, 0x0011fbe7, 0x0015fbe7, 0x0019fbe7,
> - 0x001dfbe7, 0x0001c3f7, 0x0005c3f7, 0x0009c3f7, 0x000dc3f7, 0x0011c3f7,
> - 0x0015c3f7, 0x0019c3f7, 0x001dc3f7, 0x0001cbf7, 0x0005cbf7, 0x0009cbf7,
> - 0x000dcbf7, 0x0011cbf7, 0x0015cbf7, 0x0019cbf7, 0x001dcbf7, 0x0001d3f7,
> - 0x0005d3f7, 0x0009d3f7, 0x000dd3f7, 0x0011d3f7, 0x0015d3f7, 0x0019d3f7,
> - 0x001dd3f7, 0x0001dbf7, 0x0005dbf7, 0x0009dbf7, 0x000ddbf7, 0x0011dbf7,
> - 0x0015dbf7, 0x0019dbf7, 0x001ddbf7, 0x0001e3f7, 0x0005e3f7, 0x0009e3f7,
> - 0x000de3f7, 0x0011e3f7, 0x0015e3f7, 0x0019e3f7, 0x001de3f7, 0x0001ebf7,
> - 0x0005ebf7, 0x0009ebf7, 0x000debf7, 0x0011ebf7, 0x0015ebf7, 0x0019ebf7,
> - 0x001debf7, 0x0001f3f7, 0x0005f3f7, 0x0009f3f7, 0x000df3f7, 0x0011f3f7,
> - 0x0015f3f7, 0x0019f3f7, 0x001df3f7, 0x0001fbf7, 0x0005fbf7, 0x0009fbf7,
> - 0x000dfbf7, 0x0011fbf7, 0x0015fbf7, 0x0019fbf7, 0x001dfbf7, 0x00e1c387,
> - 0x02e1c387, 0x04e1c387, 0x06e1c387, 0x08e1c387, 0x0ae1c387, 0x0ce1c387,
> - 0x0ee1c387, 0x00e5c387, 0x02e5c387, 0x04e5c387, 0x06e5c387, 0x08e5c387,
> - 0x0ae5c387, 0x0ce5c387, 0x0ee5c387, 0x00e9c387, 0x02e9c387, 0x04e9c387,
> - 0x06e9c387, 0x08e9c387, 0x0ae9c387, 0x0ce9c387, 0x0ee9c387, 0x00edc387,
> - 0x02edc387, 0x04edc387, 0x06edc387, 0x08edc387, 0x0aedc387,
> 0x0cedc387,
> - 0x0eedc387, 0x00f1c387, 0x02f1c387, 0x04f1c387, 0x06f1c387, 0x08f1c387,
> - 0x0af1c387, 0x0cf1c387, 0x0ef1c387, 0x00f5c387, 0x02f5c387, 0x04f5c387,
> - 0x06f5c387, 0x08f5c387, 0x0af5c387, 0x0cf5c387, 0x0ef5c387, 0x00f9c387,
> - 0x02f9c387, 0x04f9c387, 0x06f9c387, 0x08f9c387, 0x0af9c387, 0x0cf9c387,
> - 0x0ef9c387, 0x00fdc387, 0x02fdc387, 0x04fdc387, 0x06fdc387, 0x08fdc387,
> - 0x0afdc387, 0x0cfdc387, 0x0efdc387, 0x00e1cb87, 0x02e1cb87, 0x04e1cb87,
> - 0x06e1cb87, 0x08e1cb87, 0x0ae1cb87, 0x0ce1cb87, 0x0ee1cb87,
> 0x00e5cb87,
> - 0x02e5cb87, 0x04e5cb87, 0x06e5cb87, 0x08e5cb87, 0x0ae5cb87,
> 0x0ce5cb87,
> - 0x0ee5cb87, 0x00e9cb87, 0x02e9cb87, 0x04e9cb87, 0x06e9cb87,
> 0x08e9cb87,
> - 0x0ae9cb87, 0x0ce9cb87, 0x0ee9cb87, 0x00edcb87, 0x02edcb87,
> 0x04edcb87,
> - 0x06edcb87, 0x08edcb87, 0x0aedcb87, 0x0cedcb87, 0x0eedcb87,
> 0x00f1cb87,
> - 0x02f1cb87, 0x04f1cb87, 0x06f1cb87, 0x08f1cb87, 0x0af1cb87, 0x0cf1cb87,
> - 0x0ef1cb87, 0x00f5cb87, 0x02f5cb87, 0x04f5cb87, 0x06f5cb87, 0x08f5cb87,
> - 0x0af5cb87, 0x0cf5cb87, 0x0ef5cb87, 0x00f9cb87, 0x02f9cb87, 0x04f9cb87,
> - 0x06f9cb87, 0x08f9cb87,
> -};
> -
> -static const uint32_t kZeroRepsDepth[BROTLI_NUM_COMMAND_SYMBOLS]
> = {
> - 0, 4, 8, 7, 7, 7, 7, 7, 7, 7, 7, 11, 14, 14, 14, 14,
> - 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
> - 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
> - 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14,
> - 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 21, 21, 21, 21, 21,
> - 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
> - 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
> - 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
> - 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
> - 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
> - 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
> - 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
> - 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
> - 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
> - 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
> - 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
> - 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
> - 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
> - 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
> - 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
> - 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
> - 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
> - 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
> - 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
> - 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
> - 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
> - 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
> - 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
> - 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
> - 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
> - 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
> - 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
> - 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
> - 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
> - 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
> - 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
> - 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 28, 28, 28, 28, 28,
> - 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
> - 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
> - 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
> - 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
> - 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
> - 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
> - 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28,
> -};
> -
> -static const uint64_t
> kNonZeroRepsBits[BROTLI_NUM_COMMAND_SYMBOLS] = {
> - 0x0000000b, 0x0000001b, 0x0000002b, 0x0000003b, 0x000002cb, 0x000006cb,
> - 0x00000acb, 0x00000ecb, 0x000002db, 0x000006db, 0x00000adb,
> 0x00000edb,
> - 0x000002eb, 0x000006eb, 0x00000aeb, 0x00000eeb, 0x000002fb,
> 0x000006fb,
> - 0x00000afb, 0x00000efb, 0x0000b2cb, 0x0001b2cb, 0x0002b2cb, 0x0003b2cb,
> - 0x0000b6cb, 0x0001b6cb, 0x0002b6cb, 0x0003b6cb, 0x0000bacb,
> 0x0001bacb,
> - 0x0002bacb, 0x0003bacb, 0x0000becb, 0x0001becb, 0x0002becb,
> 0x0003becb,
> - 0x0000b2db, 0x0001b2db, 0x0002b2db, 0x0003b2db, 0x0000b6db,
> 0x0001b6db,
> - 0x0002b6db, 0x0003b6db, 0x0000badb, 0x0001badb, 0x0002badb,
> 0x0003badb,
> - 0x0000bedb, 0x0001bedb, 0x0002bedb, 0x0003bedb, 0x0000b2eb,
> 0x0001b2eb,
> - 0x0002b2eb, 0x0003b2eb, 0x0000b6eb, 0x0001b6eb, 0x0002b6eb,
> 0x0003b6eb,
> - 0x0000baeb, 0x0001baeb, 0x0002baeb, 0x0003baeb, 0x0000beeb,
> 0x0001beeb,
> - 0x0002beeb, 0x0003beeb, 0x0000b2fb, 0x0001b2fb, 0x0002b2fb,
> 0x0003b2fb,
> - 0x0000b6fb, 0x0001b6fb, 0x0002b6fb, 0x0003b6fb, 0x0000bafb, 0x0001bafb,
> - 0x0002bafb, 0x0003bafb, 0x0000befb, 0x0001befb, 0x0002befb, 0x0003befb,
> - 0x002cb2cb, 0x006cb2cb, 0x00acb2cb, 0x00ecb2cb, 0x002db2cb,
> 0x006db2cb,
> - 0x00adb2cb, 0x00edb2cb, 0x002eb2cb, 0x006eb2cb, 0x00aeb2cb,
> 0x00eeb2cb,
> - 0x002fb2cb, 0x006fb2cb, 0x00afb2cb, 0x00efb2cb, 0x002cb6cb, 0x006cb6cb,
> - 0x00acb6cb, 0x00ecb6cb, 0x002db6cb, 0x006db6cb, 0x00adb6cb,
> 0x00edb6cb,
> - 0x002eb6cb, 0x006eb6cb, 0x00aeb6cb, 0x00eeb6cb, 0x002fb6cb,
> 0x006fb6cb,
> - 0x00afb6cb, 0x00efb6cb, 0x002cbacb, 0x006cbacb, 0x00acbacb, 0x00ecbacb,
> - 0x002dbacb, 0x006dbacb, 0x00adbacb, 0x00edbacb, 0x002ebacb,
> 0x006ebacb,
> - 0x00aebacb, 0x00eebacb, 0x002fbacb, 0x006fbacb, 0x00afbacb, 0x00efbacb,
> - 0x002cbecb, 0x006cbecb, 0x00acbecb, 0x00ecbecb, 0x002dbecb,
> 0x006dbecb,
> - 0x00adbecb, 0x00edbecb, 0x002ebecb, 0x006ebecb, 0x00aebecb,
> 0x00eebecb,
> - 0x002fbecb, 0x006fbecb, 0x00afbecb, 0x00efbecb, 0x002cb2db,
> 0x006cb2db,
> - 0x00acb2db, 0x00ecb2db, 0x002db2db, 0x006db2db, 0x00adb2db,
> 0x00edb2db,
> - 0x002eb2db, 0x006eb2db, 0x00aeb2db, 0x00eeb2db, 0x002fb2db,
> 0x006fb2db,
> - 0x00afb2db, 0x00efb2db, 0x002cb6db, 0x006cb6db, 0x00acb6db,
> 0x00ecb6db,
> - 0x002db6db, 0x006db6db, 0x00adb6db, 0x00edb6db, 0x002eb6db,
> 0x006eb6db,
> - 0x00aeb6db, 0x00eeb6db, 0x002fb6db, 0x006fb6db, 0x00afb6db,
> 0x00efb6db,
> - 0x002cbadb, 0x006cbadb, 0x00acbadb, 0x00ecbadb, 0x002dbadb,
> 0x006dbadb,
> - 0x00adbadb, 0x00edbadb, 0x002ebadb, 0x006ebadb, 0x00aebadb,
> 0x00eebadb,
> - 0x002fbadb, 0x006fbadb, 0x00afbadb, 0x00efbadb, 0x002cbedb,
> 0x006cbedb,
> - 0x00acbedb, 0x00ecbedb, 0x002dbedb, 0x006dbedb, 0x00adbedb,
> 0x00edbedb,
> - 0x002ebedb, 0x006ebedb, 0x00aebedb, 0x00eebedb, 0x002fbedb,
> 0x006fbedb,
> - 0x00afbedb, 0x00efbedb, 0x002cb2eb, 0x006cb2eb, 0x00acb2eb,
> 0x00ecb2eb,
> - 0x002db2eb, 0x006db2eb, 0x00adb2eb, 0x00edb2eb, 0x002eb2eb,
> 0x006eb2eb,
> - 0x00aeb2eb, 0x00eeb2eb, 0x002fb2eb, 0x006fb2eb, 0x00afb2eb,
> 0x00efb2eb,
> - 0x002cb6eb, 0x006cb6eb, 0x00acb6eb, 0x00ecb6eb, 0x002db6eb,
> 0x006db6eb,
> - 0x00adb6eb, 0x00edb6eb, 0x002eb6eb, 0x006eb6eb, 0x00aeb6eb,
> 0x00eeb6eb,
> - 0x002fb6eb, 0x006fb6eb, 0x00afb6eb, 0x00efb6eb, 0x002cbaeb,
> 0x006cbaeb,
> - 0x00acbaeb, 0x00ecbaeb, 0x002dbaeb, 0x006dbaeb, 0x00adbaeb,
> 0x00edbaeb,
> - 0x002ebaeb, 0x006ebaeb, 0x00aebaeb, 0x00eebaeb, 0x002fbaeb,
> 0x006fbaeb,
> - 0x00afbaeb, 0x00efbaeb, 0x002cbeeb, 0x006cbeeb, 0x00acbeeb,
> 0x00ecbeeb,
> - 0x002dbeeb, 0x006dbeeb, 0x00adbeeb, 0x00edbeeb, 0x002ebeeb,
> 0x006ebeeb,
> - 0x00aebeeb, 0x00eebeeb, 0x002fbeeb, 0x006fbeeb, 0x00afbeeb,
> 0x00efbeeb,
> - 0x002cb2fb, 0x006cb2fb, 0x00acb2fb, 0x00ecb2fb, 0x002db2fb, 0x006db2fb,
> - 0x00adb2fb, 0x00edb2fb, 0x002eb2fb, 0x006eb2fb, 0x00aeb2fb,
> 0x00eeb2fb,
> - 0x002fb2fb, 0x006fb2fb, 0x00afb2fb, 0x00efb2fb, 0x002cb6fb, 0x006cb6fb,
> - 0x00acb6fb, 0x00ecb6fb, 0x002db6fb, 0x006db6fb, 0x00adb6fb, 0x00edb6fb,
> - 0x002eb6fb, 0x006eb6fb, 0x00aeb6fb, 0x00eeb6fb, 0x002fb6fb, 0x006fb6fb,
> - 0x00afb6fb, 0x00efb6fb, 0x002cbafb, 0x006cbafb, 0x00acbafb, 0x00ecbafb,
> - 0x002dbafb, 0x006dbafb, 0x00adbafb, 0x00edbafb, 0x002ebafb,
> 0x006ebafb,
> - 0x00aebafb, 0x00eebafb, 0x002fbafb, 0x006fbafb, 0x00afbafb, 0x00efbafb,
> - 0x002cbefb, 0x006cbefb, 0x00acbefb, 0x00ecbefb, 0x002dbefb,
> 0x006dbefb,
> - 0x00adbefb, 0x00edbefb, 0x002ebefb, 0x006ebefb, 0x00aebefb,
> 0x00eebefb,
> - 0x002fbefb, 0x006fbefb, 0x00afbefb, 0x00efbefb, 0x0b2cb2cb, 0x1b2cb2cb,
> - 0x2b2cb2cb, 0x3b2cb2cb, 0x0b6cb2cb, 0x1b6cb2cb, 0x2b6cb2cb,
> 0x3b6cb2cb,
> - 0x0bacb2cb, 0x1bacb2cb, 0x2bacb2cb, 0x3bacb2cb, 0x0becb2cb,
> 0x1becb2cb,
> - 0x2becb2cb, 0x3becb2cb, 0x0b2db2cb, 0x1b2db2cb, 0x2b2db2cb,
> 0x3b2db2cb,
> - 0x0b6db2cb, 0x1b6db2cb, 0x2b6db2cb, 0x3b6db2cb, 0x0badb2cb,
> 0x1badb2cb,
> - 0x2badb2cb, 0x3badb2cb, 0x0bedb2cb, 0x1bedb2cb, 0x2bedb2cb,
> 0x3bedb2cb,
> - 0x0b2eb2cb, 0x1b2eb2cb, 0x2b2eb2cb, 0x3b2eb2cb, 0x0b6eb2cb,
> 0x1b6eb2cb,
> - 0x2b6eb2cb, 0x3b6eb2cb, 0x0baeb2cb, 0x1baeb2cb, 0x2baeb2cb,
> 0x3baeb2cb,
> - 0x0beeb2cb, 0x1beeb2cb, 0x2beeb2cb, 0x3beeb2cb, 0x0b2fb2cb,
> 0x1b2fb2cb,
> - 0x2b2fb2cb, 0x3b2fb2cb, 0x0b6fb2cb, 0x1b6fb2cb, 0x2b6fb2cb, 0x3b6fb2cb,
> - 0x0bafb2cb, 0x1bafb2cb, 0x2bafb2cb, 0x3bafb2cb, 0x0befb2cb, 0x1befb2cb,
> - 0x2befb2cb, 0x3befb2cb, 0x0b2cb6cb, 0x1b2cb6cb, 0x2b2cb6cb,
> 0x3b2cb6cb,
> - 0x0b6cb6cb, 0x1b6cb6cb, 0x2b6cb6cb, 0x3b6cb6cb, 0x0bacb6cb,
> 0x1bacb6cb,
> - 0x2bacb6cb, 0x3bacb6cb, 0x0becb6cb, 0x1becb6cb, 0x2becb6cb,
> 0x3becb6cb,
> - 0x0b2db6cb, 0x1b2db6cb, 0x2b2db6cb, 0x3b2db6cb, 0x0b6db6cb,
> 0x1b6db6cb,
> - 0x2b6db6cb, 0x3b6db6cb, 0x0badb6cb, 0x1badb6cb, 0x2badb6cb,
> 0x3badb6cb,
> - 0x0bedb6cb, 0x1bedb6cb, 0x2bedb6cb, 0x3bedb6cb, 0x0b2eb6cb,
> 0x1b2eb6cb,
> - 0x2b2eb6cb, 0x3b2eb6cb, 0x0b6eb6cb, 0x1b6eb6cb, 0x2b6eb6cb,
> 0x3b6eb6cb,
> - 0x0baeb6cb, 0x1baeb6cb, 0x2baeb6cb, 0x3baeb6cb, 0x0beeb6cb,
> 0x1beeb6cb,
> - 0x2beeb6cb, 0x3beeb6cb, 0x0b2fb6cb, 0x1b2fb6cb, 0x2b2fb6cb,
> 0x3b2fb6cb,
> - 0x0b6fb6cb, 0x1b6fb6cb, 0x2b6fb6cb, 0x3b6fb6cb, 0x0bafb6cb, 0x1bafb6cb,
> - 0x2bafb6cb, 0x3bafb6cb, 0x0befb6cb, 0x1befb6cb, 0x2befb6cb, 0x3befb6cb,
> - 0x0b2cbacb, 0x1b2cbacb, 0x2b2cbacb, 0x3b2cbacb, 0x0b6cbacb,
> 0x1b6cbacb,
> - 0x2b6cbacb, 0x3b6cbacb, 0x0bacbacb, 0x1bacbacb, 0x2bacbacb,
> 0x3bacbacb,
> - 0x0becbacb, 0x1becbacb, 0x2becbacb, 0x3becbacb, 0x0b2dbacb,
> 0x1b2dbacb,
> - 0x2b2dbacb, 0x3b2dbacb, 0x0b6dbacb, 0x1b6dbacb, 0x2b6dbacb,
> 0x3b6dbacb,
> - 0x0badbacb, 0x1badbacb, 0x2badbacb, 0x3badbacb, 0x0bedbacb,
> 0x1bedbacb,
> - 0x2bedbacb, 0x3bedbacb, 0x0b2ebacb, 0x1b2ebacb, 0x2b2ebacb,
> 0x3b2ebacb,
> - 0x0b6ebacb, 0x1b6ebacb, 0x2b6ebacb, 0x3b6ebacb, 0x0baebacb,
> 0x1baebacb,
> - 0x2baebacb, 0x3baebacb, 0x0beebacb, 0x1beebacb, 0x2beebacb,
> 0x3beebacb,
> - 0x0b2fbacb, 0x1b2fbacb, 0x2b2fbacb, 0x3b2fbacb, 0x0b6fbacb, 0x1b6fbacb,
> - 0x2b6fbacb, 0x3b6fbacb, 0x0bafbacb, 0x1bafbacb, 0x2bafbacb, 0x3bafbacb,
> - 0x0befbacb, 0x1befbacb, 0x2befbacb, 0x3befbacb, 0x0b2cbecb,
> 0x1b2cbecb,
> - 0x2b2cbecb, 0x3b2cbecb, 0x0b6cbecb, 0x1b6cbecb, 0x2b6cbecb,
> 0x3b6cbecb,
> - 0x0bacbecb, 0x1bacbecb, 0x2bacbecb, 0x3bacbecb, 0x0becbecb,
> 0x1becbecb,
> - 0x2becbecb, 0x3becbecb, 0x0b2dbecb, 0x1b2dbecb, 0x2b2dbecb,
> 0x3b2dbecb,
> - 0x0b6dbecb, 0x1b6dbecb, 0x2b6dbecb, 0x3b6dbecb, 0x0badbecb,
> 0x1badbecb,
> - 0x2badbecb, 0x3badbecb, 0x0bedbecb, 0x1bedbecb, 0x2bedbecb,
> 0x3bedbecb,
> - 0x0b2ebecb, 0x1b2ebecb, 0x2b2ebecb, 0x3b2ebecb, 0x0b6ebecb,
> 0x1b6ebecb,
> - 0x2b6ebecb, 0x3b6ebecb, 0x0baebecb, 0x1baebecb, 0x2baebecb,
> 0x3baebecb,
> - 0x0beebecb, 0x1beebecb, 0x2beebecb, 0x3beebecb, 0x0b2fbecb,
> 0x1b2fbecb,
> - 0x2b2fbecb, 0x3b2fbecb, 0x0b6fbecb, 0x1b6fbecb, 0x2b6fbecb,
> 0x3b6fbecb,
> - 0x0bafbecb, 0x1bafbecb, 0x2bafbecb, 0x3bafbecb, 0x0befbecb,
> 0x1befbecb,
> - 0x2befbecb, 0x3befbecb, 0x0b2cb2db, 0x1b2cb2db, 0x2b2cb2db,
> 0x3b2cb2db,
> - 0x0b6cb2db, 0x1b6cb2db, 0x2b6cb2db, 0x3b6cb2db, 0x0bacb2db,
> 0x1bacb2db,
> - 0x2bacb2db, 0x3bacb2db, 0x0becb2db, 0x1becb2db, 0x2becb2db,
> 0x3becb2db,
> - 0x0b2db2db, 0x1b2db2db, 0x2b2db2db, 0x3b2db2db, 0x0b6db2db,
> 0x1b6db2db,
> - 0x2b6db2db, 0x3b6db2db, 0x0badb2db, 0x1badb2db, 0x2badb2db,
> 0x3badb2db,
> - 0x0bedb2db, 0x1bedb2db, 0x2bedb2db, 0x3bedb2db, 0x0b2eb2db,
> 0x1b2eb2db,
> - 0x2b2eb2db, 0x3b2eb2db, 0x0b6eb2db, 0x1b6eb2db, 0x2b6eb2db,
> 0x3b6eb2db,
> - 0x0baeb2db, 0x1baeb2db, 0x2baeb2db, 0x3baeb2db, 0x0beeb2db,
> 0x1beeb2db,
> - 0x2beeb2db, 0x3beeb2db, 0x0b2fb2db, 0x1b2fb2db, 0x2b2fb2db,
> 0x3b2fb2db,
> - 0x0b6fb2db, 0x1b6fb2db, 0x2b6fb2db, 0x3b6fb2db, 0x0bafb2db,
> 0x1bafb2db,
> - 0x2bafb2db, 0x3bafb2db, 0x0befb2db, 0x1befb2db, 0x2befb2db,
> 0x3befb2db,
> - 0x0b2cb6db, 0x1b2cb6db, 0x2b2cb6db, 0x3b2cb6db, 0x0b6cb6db,
> 0x1b6cb6db,
> - 0x2b6cb6db, 0x3b6cb6db, 0x0bacb6db, 0x1bacb6db, 0x2bacb6db,
> 0x3bacb6db,
> - 0x0becb6db, 0x1becb6db, 0x2becb6db, 0x3becb6db, 0x0b2db6db,
> 0x1b2db6db,
> - 0x2b2db6db, 0x3b2db6db, 0x0b6db6db, 0x1b6db6db, 0x2b6db6db,
> 0x3b6db6db,
> - 0x0badb6db, 0x1badb6db, 0x2badb6db, 0x3badb6db, 0x0bedb6db,
> 0x1bedb6db,
> - 0x2bedb6db, 0x3bedb6db, 0x0b2eb6db, 0x1b2eb6db, 0x2b2eb6db,
> 0x3b2eb6db,
> - 0x0b6eb6db, 0x1b6eb6db, 0x2b6eb6db, 0x3b6eb6db, 0x0baeb6db,
> 0x1baeb6db,
> - 0x2baeb6db, 0x3baeb6db,
> -};
> -
> -static const uint32_t
> kNonZeroRepsDepth[BROTLI_NUM_COMMAND_SYMBOLS] = {
> - 6, 6, 6, 6, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
> - 12, 12, 12, 12, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
> - 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
> - 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
> - 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18,
> - 18, 18, 18, 18, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
> - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
> - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
> - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
> - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
> - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
> - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
> - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
> - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
> - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
> - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
> - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
> - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
> - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
> - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
> - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
> - 24, 24, 24, 24, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,
> - 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,
> - 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,
> - 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,
> - 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,
> - 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,
> - 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,
> - 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,
> - 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,
> - 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,
> - 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,
> - 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,
> - 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,
> - 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,
> - 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,
> - 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,
> - 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,
> - 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,
> - 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,
> - 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,
> - 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,
> - 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,
> - 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30,
> -};
> -
> -static const uint16_t
> kStaticCommandCodeBits[BROTLI_NUM_COMMAND_SYMBOLS] = {
> - 0, 256, 128, 384, 64, 320, 192, 448,
> - 32, 288, 160, 416, 96, 352, 224, 480,
> - 16, 272, 144, 400, 80, 336, 208, 464,
> - 48, 304, 176, 432, 112, 368, 240, 496,
> - 8, 264, 136, 392, 72, 328, 200, 456,
> - 40, 296, 168, 424, 104, 360, 232, 488,
> - 24, 280, 152, 408, 88, 344, 216, 472,
> - 56, 312, 184, 440, 120, 376, 248, 504,
> - 4, 260, 132, 388, 68, 324, 196, 452,
> - 36, 292, 164, 420, 100, 356, 228, 484,
> - 20, 276, 148, 404, 84, 340, 212, 468,
> - 52, 308, 180, 436, 116, 372, 244, 500,
> - 12, 268, 140, 396, 76, 332, 204, 460,
> - 44, 300, 172, 428, 108, 364, 236, 492,
> - 28, 284, 156, 412, 92, 348, 220, 476,
> - 60, 316, 188, 444, 124, 380, 252, 508,
> - 2, 258, 130, 386, 66, 322, 194, 450,
> - 34, 290, 162, 418, 98, 354, 226, 482,
> - 18, 274, 146, 402, 82, 338, 210, 466,
> - 50, 306, 178, 434, 114, 370, 242, 498,
> - 10, 266, 138, 394, 74, 330, 202, 458,
> - 42, 298, 170, 426, 106, 362, 234, 490,
> - 26, 282, 154, 410, 90, 346, 218, 474,
> - 58, 314, 186, 442, 122, 378, 250, 506,
> - 6, 262, 134, 390, 70, 326, 198, 454,
> - 38, 294, 166, 422, 102, 358, 230, 486,
> - 22, 278, 150, 406, 86, 342, 214, 470,
> - 54, 310, 182, 438, 118, 374, 246, 502,
> - 14, 270, 142, 398, 78, 334, 206, 462,
> - 46, 302, 174, 430, 110, 366, 238, 494,
> - 30, 286, 158, 414, 94, 350, 222, 478,
> - 62, 318, 190, 446, 126, 382, 254, 510,
> - 1, 257, 129, 385, 65, 321, 193, 449,
> - 33, 289, 161, 417, 97, 353, 225, 481,
> - 17, 273, 145, 401, 81, 337, 209, 465,
> - 49, 305, 177, 433, 113, 369, 241, 497,
> - 9, 265, 137, 393, 73, 329, 201, 457,
> - 41, 297, 169, 425, 105, 361, 233, 489,
> - 25, 281, 153, 409, 89, 345, 217, 473,
> - 57, 313, 185, 441, 121, 377, 249, 505,
> - 5, 261, 133, 389, 69, 325, 197, 453,
> - 37, 293, 165, 421, 101, 357, 229, 485,
> - 21, 277, 149, 405, 85, 341, 213, 469,
> - 53, 309, 181, 437, 117, 373, 245, 501,
> - 13, 269, 141, 397, 77, 333, 205, 461,
> - 45, 301, 173, 429, 109, 365, 237, 493,
> - 29, 285, 157, 413, 93, 349, 221, 477,
> - 61, 317, 189, 445, 125, 381, 253, 509,
> - 3, 259, 131, 387, 67, 323, 195, 451,
> - 35, 291, 163, 419, 99, 355, 227, 483,
> - 19, 275, 147, 403, 83, 339, 211, 467,
> - 51, 307, 179, 435, 115, 371, 243, 499,
> - 11, 267, 139, 395, 75, 331, 203, 459,
> - 43, 299, 171, 427, 107, 363, 235, 491,
> - 27, 283, 155, 411, 91, 347, 219, 475,
> - 59, 315, 187, 443, 123, 379, 251, 507,
> - 7, 1031, 519, 1543, 263, 1287, 775, 1799,
> - 135, 1159, 647, 1671, 391, 1415, 903, 1927,
> - 71, 1095, 583, 1607, 327, 1351, 839, 1863,
> - 199, 1223, 711, 1735, 455, 1479, 967, 1991,
> - 39, 1063, 551, 1575, 295, 1319, 807, 1831,
> - 167, 1191, 679, 1703, 423, 1447, 935, 1959,
> - 103, 1127, 615, 1639, 359, 1383, 871, 1895,
> - 231, 1255, 743, 1767, 487, 1511, 999, 2023,
> - 23, 1047, 535, 1559, 279, 1303, 791, 1815,
> - 151, 1175, 663, 1687, 407, 1431, 919, 1943,
> - 87, 1111, 599, 1623, 343, 1367, 855, 1879,
> - 215, 1239, 727, 1751, 471, 1495, 983, 2007,
> - 55, 1079, 567, 1591, 311, 1335, 823, 1847,
> - 183, 1207, 695, 1719, 439, 1463, 951, 1975,
> - 119, 1143, 631, 1655, 375, 1399, 887, 1911,
> - 247, 1271, 759, 1783, 503, 1527, 1015, 2039,
> - 15, 1039, 527, 1551, 271, 1295, 783, 1807,
> - 143, 1167, 655, 1679, 399, 1423, 911, 1935,
> - 79, 1103, 591, 1615, 335, 1359, 847, 1871,
> - 207, 1231, 719, 1743, 463, 1487, 975, 1999,
> - 47, 1071, 559, 1583, 303, 1327, 815, 1839,
> - 175, 1199, 687, 1711, 431, 1455, 943, 1967,
> - 111, 1135, 623, 1647, 367, 1391, 879, 1903,
> - 239, 1263, 751, 1775, 495, 1519, 1007, 2031,
> - 31, 1055, 543, 1567, 287, 1311, 799, 1823,
> - 159, 1183, 671, 1695, 415, 1439, 927, 1951,
> - 95, 1119, 607, 1631, 351, 1375, 863, 1887,
> - 223, 1247, 735, 1759, 479, 1503, 991, 2015,
> - 63, 1087, 575, 1599, 319, 1343, 831, 1855,
> - 191, 1215, 703, 1727, 447, 1471, 959, 1983,
> - 127, 1151, 639, 1663, 383, 1407, 895, 1919,
> - 255, 1279, 767, 1791, 511, 1535, 1023, 2047,
> -};
> -
> -static BROTLI_INLINE void StoreStaticCommandHuffmanTree(
> - size_t* storage_ix, uint8_t* storage) {
> - BrotliWriteBits(
> - 56, BROTLI_MAKE_UINT64_T(0x926244U, 0x16307003U), storage_ix,
> storage);
> - BrotliWriteBits(3, 0x00000000U, storage_ix, storage);
> -}
> -
> -static const uint16_t kStaticDistanceCodeBits[64] = {
> - 0, 32, 16, 48, 8, 40, 24, 56, 4, 36, 20, 52, 12, 44, 28, 60,
> - 2, 34, 18, 50, 10, 42, 26, 58, 6, 38, 22, 54, 14, 46, 30, 62,
> - 1, 33, 17, 49, 9, 41, 25, 57, 5, 37, 21, 53, 13, 45, 29, 61,
> - 3, 35, 19, 51, 11, 43, 27, 59, 7, 39, 23, 55, 15, 47, 31, 63,
> -};
> -
> -static BROTLI_INLINE void StoreStaticDistanceHuffmanTree(
> - size_t* storage_ix, uint8_t* storage) {
> - BrotliWriteBits(28, 0x0369DC03u, storage_ix, storage);
> -}
> -
> -#if defined(__cplusplus) || defined(c_plusplus)
> -} /* extern "C" */
> -#endif
> -
> -#endif /* BROTLI_ENC_ENTROPY_ENCODE_STATIC_H_ */
> diff --git a/BaseTools/Source/C/BrotliCompress/enc/fast_log.h
> b/BaseTools/Source/C/BrotliCompress/enc/fast_log.h
> deleted file mode 100644
> index dabc45ee96b8..000000000000
> --- a/BaseTools/Source/C/BrotliCompress/enc/fast_log.h
> +++ /dev/null
> @@ -1,147 +0,0 @@
> -/* Copyright 2013 Google Inc. All Rights Reserved.
> -
> - Distributed under MIT license.
> - See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
> -*/
> -
> -/* Utilities for fast computation of logarithms. */
> -
> -#ifndef BROTLI_ENC_FAST_LOG_H_
> -#define BROTLI_ENC_FAST_LOG_H_
> -
> -#include <math.h>
> -
> -#include "../common/platform.h"
> -#include <brotli/types.h>
> -
> -#if defined(__cplusplus) || defined(c_plusplus)
> -extern "C" {
> -#endif
> -
> -static BROTLI_INLINE uint32_t Log2FloorNonZero(size_t n) {
> - /* TODO: generalize and move to platform.h */
> -#if BROTLI_GNUC_HAS_BUILTIN(__builtin_clz, 3, 4, 0) || \
> - BROTLI_INTEL_VERSION_CHECK(16, 0, 0)
> - return 31u ^ (uint32_t)__builtin_clz((uint32_t)n);
> -#else
> - uint32_t result = 0;
> - while (n >>= 1) result++;
> - return result;
> -#endif
> -}
> -
> -/* A lookup table for small values of log2(int) to be used in entropy
> - computation.
> -
> - ", ".join(["%.16ff" % x for x in [0.0]+[log2(x) for x in range(1, 256)]]) */
> -static const float kLog2Table[] = {
> - 0.0000000000000000f, 0.0000000000000000f, 1.0000000000000000f,
> - 1.5849625007211563f, 2.0000000000000000f, 2.3219280948873622f,
> - 2.5849625007211561f, 2.8073549220576042f, 3.0000000000000000f,
> - 3.1699250014423126f, 3.3219280948873626f, 3.4594316186372978f,
> - 3.5849625007211565f, 3.7004397181410922f, 3.8073549220576037f,
> - 3.9068905956085187f, 4.0000000000000000f, 4.0874628412503400f,
> - 4.1699250014423122f, 4.2479275134435852f, 4.3219280948873626f,
> - 4.3923174227787607f, 4.4594316186372973f, 4.5235619560570131f,
> - 4.5849625007211570f, 4.6438561897747244f, 4.7004397181410926f,
> - 4.7548875021634691f, 4.8073549220576037f, 4.8579809951275728f,
> - 4.9068905956085187f, 4.9541963103868758f, 5.0000000000000000f,
> - 5.0443941193584534f, 5.0874628412503400f, 5.1292830169449664f,
> - 5.1699250014423122f, 5.2094533656289501f, 5.2479275134435852f,
> - 5.2854022188622487f, 5.3219280948873626f, 5.3575520046180838f,
> - 5.3923174227787607f, 5.4262647547020979f, 5.4594316186372973f,
> - 5.4918530963296748f, 5.5235619560570131f, 5.5545888516776376f,
> - 5.5849625007211570f, 5.6147098441152083f, 5.6438561897747244f,
> - 5.6724253419714961f, 5.7004397181410926f, 5.7279204545631996f,
> - 5.7548875021634691f, 5.7813597135246599f, 5.8073549220576046f,
> - 5.8328900141647422f, 5.8579809951275719f, 5.8826430493618416f,
> - 5.9068905956085187f, 5.9307373375628867f, 5.9541963103868758f,
> - 5.9772799234999168f, 6.0000000000000000f, 6.0223678130284544f,
> - 6.0443941193584534f, 6.0660891904577721f, 6.0874628412503400f,
> - 6.1085244567781700f, 6.1292830169449672f, 6.1497471195046822f,
> - 6.1699250014423122f, 6.1898245588800176f, 6.2094533656289510f,
> - 6.2288186904958804f, 6.2479275134435861f, 6.2667865406949019f,
> - 6.2854022188622487f, 6.3037807481771031f, 6.3219280948873617f,
> - 6.3398500028846252f, 6.3575520046180847f, 6.3750394313469254f,
> - 6.3923174227787598f, 6.4093909361377026f, 6.4262647547020979f,
> - 6.4429434958487288f, 6.4594316186372982f, 6.4757334309663976f,
> - 6.4918530963296748f, 6.5077946401986964f, 6.5235619560570131f,
> - 6.5391588111080319f, 6.5545888516776376f, 6.5698556083309478f,
> - 6.5849625007211561f, 6.5999128421871278f, 6.6147098441152092f,
> - 6.6293566200796095f, 6.6438561897747253f, 6.6582114827517955f,
> - 6.6724253419714952f, 6.6865005271832185f, 6.7004397181410917f,
> - 6.7142455176661224f, 6.7279204545631988f, 6.7414669864011465f,
> - 6.7548875021634691f, 6.7681843247769260f, 6.7813597135246599f,
> - 6.7944158663501062f, 6.8073549220576037f, 6.8201789624151887f,
> - 6.8328900141647422f, 6.8454900509443757f, 6.8579809951275719f,
> - 6.8703647195834048f, 6.8826430493618416f, 6.8948177633079437f,
> - 6.9068905956085187f, 6.9188632372745955f, 6.9307373375628867f,
> - 6.9425145053392399f, 6.9541963103868758f, 6.9657842846620879f,
> - 6.9772799234999168f, 6.9886846867721664f, 7.0000000000000000f,
> - 7.0112272554232540f, 7.0223678130284544f, 7.0334230015374501f,
> - 7.0443941193584534f, 7.0552824355011898f, 7.0660891904577721f,
> - 7.0768155970508317f, 7.0874628412503400f, 7.0980320829605272f,
> - 7.1085244567781700f, 7.1189410727235076f, 7.1292830169449664f,
> - 7.1395513523987937f, 7.1497471195046822f, 7.1598713367783891f,
> - 7.1699250014423130f, 7.1799090900149345f, 7.1898245588800176f,
> - 7.1996723448363644f, 7.2094533656289492f, 7.2191685204621621f,
> - 7.2288186904958804f, 7.2384047393250794f, 7.2479275134435861f,
> - 7.2573878426926521f, 7.2667865406949019f, 7.2761244052742384f,
> - 7.2854022188622487f, 7.2946207488916270f, 7.3037807481771031f,
> - 7.3128829552843557f, 7.3219280948873617f, 7.3309168781146177f,
> - 7.3398500028846243f, 7.3487281542310781f, 7.3575520046180847f,
> - 7.3663222142458151f, 7.3750394313469254f, 7.3837042924740528f,
> - 7.3923174227787607f, 7.4008794362821844f, 7.4093909361377026f,
> - 7.4178525148858991f, 7.4262647547020979f, 7.4346282276367255f,
> - 7.4429434958487288f, 7.4512111118323299f, 7.4594316186372973f,
> - 7.4676055500829976f, 7.4757334309663976f, 7.4838157772642564f,
> - 7.4918530963296748f, 7.4998458870832057f, 7.5077946401986964f,
> - 7.5156998382840436f, 7.5235619560570131f, 7.5313814605163119f,
> - 7.5391588111080319f, 7.5468944598876373f, 7.5545888516776376f,
> - 7.5622424242210728f, 7.5698556083309478f, 7.5774288280357487f,
> - 7.5849625007211561f, 7.5924570372680806f, 7.5999128421871278f,
> - 7.6073303137496113f, 7.6147098441152075f, 7.6220518194563764f,
> - 7.6293566200796095f, 7.6366246205436488f, 7.6438561897747244f,
> - 7.6510516911789290f, 7.6582114827517955f, 7.6653359171851765f,
> - 7.6724253419714952f, 7.6794800995054464f, 7.6865005271832185f,
> - 7.6934869574993252f, 7.7004397181410926f, 7.7073591320808825f,
> - 7.7142455176661224f, 7.7210991887071856f, 7.7279204545631996f,
> - 7.7347096202258392f, 7.7414669864011465f, 7.7481928495894596f,
> - 7.7548875021634691f, 7.7615512324444795f, 7.7681843247769260f,
> - 7.7747870596011737f, 7.7813597135246608f, 7.7879025593914317f,
> - 7.7944158663501062f, 7.8008998999203047f, 7.8073549220576037f,
> - 7.8137811912170374f, 7.8201789624151887f, 7.8265484872909159f,
> - 7.8328900141647422f, 7.8392037880969445f, 7.8454900509443757f,
> - 7.8517490414160571f, 7.8579809951275719f, 7.8641861446542798f,
> - 7.8703647195834048f, 7.8765169465650002f, 7.8826430493618425f,
> - 7.8887432488982601f, 7.8948177633079446f, 7.9008668079807496f,
> - 7.9068905956085187f, 7.9128893362299619f, 7.9188632372745955f,
> - 7.9248125036057813f, 7.9307373375628867f, 7.9366379390025719f,
> - 7.9425145053392399f, 7.9483672315846778f, 7.9541963103868758f,
> - 7.9600019320680806f, 7.9657842846620870f, 7.9715435539507720f,
> - 7.9772799234999168f, 7.9829935746943104f, 7.9886846867721664f,
> - 7.9943534368588578f
> -};
> -
> -#define LOG_2_INV 1.4426950408889634
> -
> -/* Faster logarithm for small integers, with the property of log2(0) == 0. */
> -static BROTLI_INLINE double FastLog2(size_t v) {
> - if (v < sizeof(kLog2Table) / sizeof(kLog2Table[0])) {
> - return kLog2Table[v];
> - }
> -#if (defined(_MSC_VER) && _MSC_VER <= 1700) || \
> - (defined(__ANDROID_API__) && __ANDROID_API__ < 18)
> - /* Visual Studio 2012 and Android API levels < 18 do not have the log2()
> - * function defined, so we use log() and a multiplication instead. */
> - return log((double)v) * LOG_2_INV;
> -#else
> - return log2((double)v);
> -#endif
> -}
> -
> -#if defined(__cplusplus) || defined(c_plusplus)
> -} /* extern "C" */
> -#endif
> -
> -#endif /* BROTLI_ENC_FAST_LOG_H_ */
> diff --git a/BaseTools/Source/C/BrotliCompress/enc/find_match_length.h
> b/BaseTools/Source/C/BrotliCompress/enc/find_match_length.h
> deleted file mode 100644
> index 6e1f44474baa..000000000000
> --- a/BaseTools/Source/C/BrotliCompress/enc/find_match_length.h
> +++ /dev/null
> @@ -1,80 +0,0 @@
> -/* Copyright 2010 Google Inc. All Rights Reserved.
> -
> - Distributed under MIT license.
> - See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
> -*/
> -
> -/* Function to find maximal matching prefixes of strings. */
> -
> -#ifndef BROTLI_ENC_FIND_MATCH_LENGTH_H_
> -#define BROTLI_ENC_FIND_MATCH_LENGTH_H_
> -
> -#include "../common/platform.h"
> -#include <brotli/types.h>
> -
> -#if defined(__cplusplus) || defined(c_plusplus)
> -extern "C" {
> -#endif
> -
> -/* Separate implementation for little-endian 64-bit targets, for speed. */
> -#if defined(__GNUC__) && defined(_LP64) &&
> defined(BROTLI_LITTLE_ENDIAN)
> -
> -static BROTLI_INLINE size_t FindMatchLengthWithLimit(const uint8_t* s1,
> - const uint8_t* s2,
> - size_t limit) {
> - size_t matched = 0;
> - size_t limit2 = (limit >> 3) + 1; /* + 1 is for pre-decrement in while */
> - while (BROTLI_PREDICT_TRUE(--limit2)) {
> - if (BROTLI_PREDICT_FALSE(BROTLI_UNALIGNED_LOAD64LE(s2) ==
> - BROTLI_UNALIGNED_LOAD64LE(s1 + matched))) {
> - s2 += 8;
> - matched += 8;
> - } else {
> - uint64_t x = BROTLI_UNALIGNED_LOAD64LE(s2) ^
> - BROTLI_UNALIGNED_LOAD64LE(s1 + matched);
> - size_t matching_bits = (size_t)__builtin_ctzll(x);
> - matched += matching_bits >> 3;
> - return matched;
> - }
> - }
> - limit = (limit & 7) + 1; /* + 1 is for pre-decrement in while */
> - while (--limit) {
> - if (BROTLI_PREDICT_TRUE(s1[matched] == *s2)) {
> - ++s2;
> - ++matched;
> - } else {
> - return matched;
> - }
> - }
> - return matched;
> -}
> -#else
> -static BROTLI_INLINE size_t FindMatchLengthWithLimit(const uint8_t* s1,
> - const uint8_t* s2,
> - size_t limit) {
> - size_t matched = 0;
> - const uint8_t* s2_limit = s2 + limit;
> - const uint8_t* s2_ptr = s2;
> - /* Find out how long the match is. We loop over the data 32 bits at a
> - time until we find a 32-bit block that doesn't match; then we find
> - the first non-matching bit and use that to calculate the total
> - length of the match. */
> - while (s2_ptr <= s2_limit - 4 &&
> - BrotliUnalignedRead32(s2_ptr) ==
> - BrotliUnalignedRead32(s1 + matched)) {
> - s2_ptr += 4;
> - matched += 4;
> - }
> - while ((s2_ptr < s2_limit) && (s1[matched] == *s2_ptr)) {
> - ++s2_ptr;
> - ++matched;
> - }
> - return matched;
> -}
> -#endif
> -
> -#if defined(__cplusplus) || defined(c_plusplus)
> -} /* extern "C" */
> -#endif
> -
> -#endif /* BROTLI_ENC_FIND_MATCH_LENGTH_H_ */
> diff --git a/BaseTools/Source/C/BrotliCompress/enc/hash.h
> b/BaseTools/Source/C/BrotliCompress/enc/hash.h
> deleted file mode 100644
> index 9225d127ac58..000000000000
> --- a/BaseTools/Source/C/BrotliCompress/enc/hash.h
> +++ /dev/null
> @@ -1,497 +0,0 @@
> -/* Copyright 2010 Google Inc. All Rights Reserved.
> -
> - Distributed under MIT license.
> - See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
> -*/
> -
> -/* A (forgetful) hash table to the data seen by the compressor, to
> - help create backward references to previous data. */
> -
> -#ifndef BROTLI_ENC_HASH_H_
> -#define BROTLI_ENC_HASH_H_
> -
> -#include <string.h> /* memcmp, memset */
> -
> -#include "../common/constants.h"
> -#include "../common/dictionary.h"
> -#include "../common/platform.h"
> -#include <brotli/types.h>
> -#include "./encoder_dict.h"
> -#include "./fast_log.h"
> -#include "./find_match_length.h"
> -#include "./memory.h"
> -#include "./quality.h"
> -#include "./static_dict.h"
> -
> -#if defined(__cplusplus) || defined(c_plusplus)
> -extern "C" {
> -#endif
> -
> -/* Pointer to hasher data.
> - *
> - * Excluding initialization and destruction, hasher can be passed as
> - * HasherHandle by value.
> - *
> - * Typically hasher data consists of 3 sections:
> - * * HasherCommon structure
> - * * private structured hasher data, depending on hasher type
> - * * private dynamic hasher data, depending on hasher type and parameters
> - *
> - * Using "define" instead of "typedef", because on MSVC __restrict does
> not work
> - * on typedef pointer types. */
> -#define HasherHandle uint8_t*
> -
> -typedef struct {
> - BrotliHasherParams params;
> -
> - /* False if hasher needs to be "prepared" before use. */
> - BROTLI_BOOL is_prepared_;
> -
> - size_t dict_num_lookups;
> - size_t dict_num_matches;
> -} HasherCommon;
> -
> -static BROTLI_INLINE HasherCommon* GetHasherCommon(HasherHandle
> handle) {
> - return (HasherCommon*)handle;
> -}
> -
> -#define score_t size_t
> -
> -static const uint32_t kCutoffTransformsCount = 10;
> -/* 0, 12, 27, 23, 42, 63, 56, 48, 59, 64 */
> -/* 0+0, 4+8, 8+19, 12+11, 16+26, 20+43, 24+32, 28+20, 32+27, 36+28 */
> -static const uint64_t kCutoffTransforms =
> - BROTLI_MAKE_UINT64_T(0x071B520A, 0xDA2D3200);
> -
> -typedef struct HasherSearchResult {
> - size_t len;
> - size_t distance;
> - score_t score;
> - int len_code_delta; /* == len_code - len */
> -} HasherSearchResult;
> -
> -/* kHashMul32 multiplier has these properties:
> - * The multiplier must be odd. Otherwise we may lose the highest bit.
> - * No long streaks of ones or zeros.
> - * There is no effort to ensure that it is a prime, the oddity is enough
> - for this use.
> - * The number has been tuned heuristically against compression
> benchmarks. */
> -static const uint32_t kHashMul32 = 0x1E35A7BD;
> -static const uint64_t kHashMul64 = BROTLI_MAKE_UINT64_T(0x1E35A7BD,
> 0x1E35A7BD);
> -static const uint64_t kHashMul64Long =
> - BROTLI_MAKE_UINT64_T(0x1FE35A7Bu, 0xD3579BD3u);
> -
> -static BROTLI_INLINE uint32_t Hash14(const uint8_t* data) {
> - uint32_t h = BROTLI_UNALIGNED_LOAD32LE(data) * kHashMul32;
> - /* The higher bits contain more mixture from the multiplication,
> - so we take our results from there. */
> - return h >> (32 - 14);
> -}
> -
> -static BROTLI_INLINE void PrepareDistanceCache(
> - int* BROTLI_RESTRICT distance_cache, const int num_distances) {
> - if (num_distances > 4) {
> - int last_distance = distance_cache[0];
> - distance_cache[4] = last_distance - 1;
> - distance_cache[5] = last_distance + 1;
> - distance_cache[6] = last_distance - 2;
> - distance_cache[7] = last_distance + 2;
> - distance_cache[8] = last_distance - 3;
> - distance_cache[9] = last_distance + 3;
> - if (num_distances > 10) {
> - int next_last_distance = distance_cache[1];
> - distance_cache[10] = next_last_distance - 1;
> - distance_cache[11] = next_last_distance + 1;
> - distance_cache[12] = next_last_distance - 2;
> - distance_cache[13] = next_last_distance + 2;
> - distance_cache[14] = next_last_distance - 3;
> - distance_cache[15] = next_last_distance + 3;
> - }
> - }
> -}
> -
> -#define BROTLI_LITERAL_BYTE_SCORE 135
> -#define BROTLI_DISTANCE_BIT_PENALTY 30
> -/* Score must be positive after applying maximal penalty. */
> -#define BROTLI_SCORE_BASE (BROTLI_DISTANCE_BIT_PENALTY * 8 *
> sizeof(size_t))
> -
> -/* Usually, we always choose the longest backward reference. This function
> - allows for the exception of that rule.
> -
> - If we choose a backward reference that is further away, it will
> - usually be coded with more bits. We approximate this by assuming
> - log2(distance). If the distance can be expressed in terms of the
> - last four distances, we use some heuristic constants to estimate
> - the bits cost. For the first up to four literals we use the bit
> - cost of the literals from the literal cost model, after that we
> - use the average bit cost of the cost model.
> -
> - This function is used to sometimes discard a longer backward reference
> - when it is not much longer and the bit cost for encoding it is more
> - than the saved literals.
> -
> - backward_reference_offset MUST be positive. */
> -static BROTLI_INLINE score_t BackwardReferenceScore(
> - size_t copy_length, size_t backward_reference_offset) {
> - return BROTLI_SCORE_BASE + BROTLI_LITERAL_BYTE_SCORE *
> (score_t)copy_length -
> - BROTLI_DISTANCE_BIT_PENALTY *
> Log2FloorNonZero(backward_reference_offset);
> -}
> -
> -static BROTLI_INLINE score_t BackwardReferenceScoreUsingLastDistance(
> - size_t copy_length) {
> - return BROTLI_LITERAL_BYTE_SCORE * (score_t)copy_length +
> - BROTLI_SCORE_BASE + 15;
> -}
> -
> -static BROTLI_INLINE score_t BackwardReferencePenaltyUsingLastDistance(
> - size_t distance_short_code) {
> - return (score_t)39 + ((0x1CA10 >> (distance_short_code & 0xE)) & 0xE);
> -}
> -
> -static BROTLI_INLINE BROTLI_BOOL TestStaticDictionaryItem(
> - const BrotliEncoderDictionary* dictionary, size_t item, const uint8_t* data,
> - size_t max_length, size_t max_backward, size_t max_distance,
> - HasherSearchResult* out) {
> - size_t len;
> - size_t word_idx;
> - size_t offset;
> - size_t matchlen;
> - size_t backward;
> - score_t score;
> - len = item & 0x1F;
> - word_idx = item >> 5;
> - offset = dictionary->words->offsets_by_length[len] + len * word_idx;
> - if (len > max_length) {
> - return BROTLI_FALSE;
> - }
> -
> - matchlen =
> - FindMatchLengthWithLimit(data, &dictionary->words->data[offset], len);
> - if (matchlen + dictionary->cutoffTransformsCount <= len || matchlen == 0)
> {
> - return BROTLI_FALSE;
> - }
> - {
> - size_t cut = len - matchlen;
> - size_t transform_id = (cut << 2) +
> - (size_t)((dictionary->cutoffTransforms >> (cut * 6)) & 0x3F);
> - backward = max_backward + 1 + word_idx +
> - (transform_id << dictionary->words->size_bits_by_length[len]);
> - }
> - if (backward > max_distance) {
> - return BROTLI_FALSE;
> - }
> - score = BackwardReferenceScore(matchlen, backward);
> - if (score < out->score) {
> - return BROTLI_FALSE;
> - }
> - out->len = matchlen;
> - out->len_code_delta = (int)len - (int)matchlen;
> - out->distance = backward;
> - out->score = score;
> - return BROTLI_TRUE;
> -}
> -
> -static BROTLI_INLINE void SearchInStaticDictionary(
> - const BrotliEncoderDictionary* dictionary,
> - HasherHandle handle, const uint8_t* data, size_t max_length,
> - size_t max_backward, size_t max_distance,
> - HasherSearchResult* out, BROTLI_BOOL shallow) {
> - size_t key;
> - size_t i;
> - HasherCommon* self = GetHasherCommon(handle);
> - if (self->dict_num_matches < (self->dict_num_lookups >> 7)) {
> - return;
> - }
> - key = Hash14(data) << 1;
> - for (i = 0; i < (shallow ? 1u : 2u); ++i, ++key) {
> - size_t item = dictionary->hash_table[key];
> - self->dict_num_lookups++;
> - if (item != 0) {
> - BROTLI_BOOL item_matches = TestStaticDictionaryItem(
> - dictionary, item, data, max_length, max_backward, max_distance, out);
> - if (item_matches) {
> - self->dict_num_matches++;
> - }
> - }
> - }
> -}
> -
> -typedef struct BackwardMatch {
> - uint32_t distance;
> - uint32_t length_and_code;
> -} BackwardMatch;
> -
> -static BROTLI_INLINE void InitBackwardMatch(BackwardMatch* self,
> - size_t dist, size_t len) {
> - self->distance = (uint32_t)dist;
> - self->length_and_code = (uint32_t)(len << 5);
> -}
> -
> -static BROTLI_INLINE void InitDictionaryBackwardMatch(BackwardMatch*
> self,
> - size_t dist, size_t len, size_t len_code) {
> - self->distance = (uint32_t)dist;
> - self->length_and_code =
> - (uint32_t)((len << 5) | (len == len_code ? 0 : len_code));
> -}
> -
> -static BROTLI_INLINE size_t BackwardMatchLength(const BackwardMatch*
> self) {
> - return self->length_and_code >> 5;
> -}
> -
> -static BROTLI_INLINE size_t BackwardMatchLengthCode(const
> BackwardMatch* self) {
> - size_t code = self->length_and_code & 31;
> - return code ? code : BackwardMatchLength(self);
> -}
> -
> -#define EXPAND_CAT(a, b) CAT(a, b)
> -#define CAT(a, b) a ## b
> -#define FN(X) EXPAND_CAT(X, HASHER())
> -
> -#define HASHER() H10
> -#define BUCKET_BITS 17
> -#define MAX_TREE_SEARCH_DEPTH 64
> -#define MAX_TREE_COMP_LENGTH 128
> -#include "./hash_to_binary_tree_inc.h" /* NOLINT(build/include) */
> -#undef MAX_TREE_SEARCH_DEPTH
> -#undef MAX_TREE_COMP_LENGTH
> -#undef BUCKET_BITS
> -#undef HASHER
> -/* MAX_NUM_MATCHES == 64 + MAX_TREE_SEARCH_DEPTH */
> -#define MAX_NUM_MATCHES_H10 128
> -
> -/* For BUCKET_SWEEP == 1, enabling the dictionary lookup makes
> compression
> - a little faster (0.5% - 1%) and it compresses 0.15% better on small text
> - and HTML inputs. */
> -
> -#define HASHER() H2
> -#define BUCKET_BITS 16
> -#define BUCKET_SWEEP 1
> -#define HASH_LEN 5
> -#define USE_DICTIONARY 1
> -#include "./hash_longest_match_quickly_inc.h" /* NOLINT(build/include)
> */
> -#undef BUCKET_SWEEP
> -#undef USE_DICTIONARY
> -#undef HASHER
> -
> -#define HASHER() H3
> -#define BUCKET_SWEEP 2
> -#define USE_DICTIONARY 0
> -#include "./hash_longest_match_quickly_inc.h" /* NOLINT(build/include)
> */
> -#undef USE_DICTIONARY
> -#undef BUCKET_SWEEP
> -#undef BUCKET_BITS
> -#undef HASHER
> -
> -#define HASHER() H4
> -#define BUCKET_BITS 17
> -#define BUCKET_SWEEP 4
> -#define USE_DICTIONARY 1
> -#include "./hash_longest_match_quickly_inc.h" /* NOLINT(build/include)
> */
> -#undef USE_DICTIONARY
> -#undef HASH_LEN
> -#undef BUCKET_SWEEP
> -#undef BUCKET_BITS
> -#undef HASHER
> -
> -#define HASHER() H5
> -#include "./hash_longest_match_inc.h" /* NOLINT(build/include) */
> -#undef HASHER
> -
> -#define HASHER() H6
> -#include "./hash_longest_match64_inc.h" /* NOLINT(build/include) */
> -#undef HASHER
> -
> -#define BUCKET_BITS 15
> -
> -#define NUM_LAST_DISTANCES_TO_CHECK 4
> -#define NUM_BANKS 1
> -#define BANK_BITS 16
> -#define HASHER() H40
> -#include "./hash_forgetful_chain_inc.h" /* NOLINT(build/include) */
> -#undef HASHER
> -#undef NUM_LAST_DISTANCES_TO_CHECK
> -
> -#define NUM_LAST_DISTANCES_TO_CHECK 10
> -#define HASHER() H41
> -#include "./hash_forgetful_chain_inc.h" /* NOLINT(build/include) */
> -#undef HASHER
> -#undef NUM_LAST_DISTANCES_TO_CHECK
> -#undef NUM_BANKS
> -#undef BANK_BITS
> -
> -#define NUM_LAST_DISTANCES_TO_CHECK 16
> -#define NUM_BANKS 512
> -#define BANK_BITS 9
> -#define HASHER() H42
> -#include "./hash_forgetful_chain_inc.h" /* NOLINT(build/include) */
> -#undef HASHER
> -#undef NUM_LAST_DISTANCES_TO_CHECK
> -#undef NUM_BANKS
> -#undef BANK_BITS
> -
> -#undef BUCKET_BITS
> -
> -#define HASHER() H54
> -#define BUCKET_BITS 20
> -#define BUCKET_SWEEP 4
> -#define HASH_LEN 7
> -#define USE_DICTIONARY 0
> -#include "./hash_longest_match_quickly_inc.h" /* NOLINT(build/include)
> */
> -#undef USE_DICTIONARY
> -#undef HASH_LEN
> -#undef BUCKET_SWEEP
> -#undef BUCKET_BITS
> -#undef HASHER
> -
> -/* fast large window hashers */
> -
> -#define HASHER() HROLLING_FAST
> -#define CHUNKLEN 32
> -#define JUMP 4
> -#define NUMBUCKETS 16777216
> -#define MASK ((NUMBUCKETS * 64) - 1)
> -#include "./hash_rolling_inc.h" /* NOLINT(build/include) */
> -#undef JUMP
> -#undef HASHER
> -
> -
> -#define HASHER() HROLLING
> -#define JUMP 1
> -#include "./hash_rolling_inc.h" /* NOLINT(build/include) */
> -#undef MASK
> -#undef NUMBUCKETS
> -#undef JUMP
> -#undef CHUNKLEN
> -#undef HASHER
> -
> -#define HASHER() H35
> -#define HASHER_A H3
> -#define HASHER_B HROLLING_FAST
> -#include "./hash_composite_inc.h" /* NOLINT(build/include) */
> -#undef HASHER_A
> -#undef HASHER_B
> -#undef HASHER
> -
> -#define HASHER() H55
> -#define HASHER_A H54
> -#define HASHER_B HROLLING_FAST
> -#include "./hash_composite_inc.h" /* NOLINT(build/include) */
> -#undef HASHER_A
> -#undef HASHER_B
> -#undef HASHER
> -
> -#define HASHER() H65
> -#define HASHER_A H6
> -#define HASHER_B HROLLING
> -#include "./hash_composite_inc.h" /* NOLINT(build/include) */
> -#undef HASHER_A
> -#undef HASHER_B
> -#undef HASHER
> -
> -#undef FN
> -#undef CAT
> -#undef EXPAND_CAT
> -
> -#define FOR_GENERIC_HASHERS(H) H(2) H(3) H(4) H(5) H(6) H(40) H(41)
> H(42) H(54)\
> - H(35) H(55) H(65)
> -#define FOR_ALL_HASHERS(H) FOR_GENERIC_HASHERS(H) H(10)
> -
> -static BROTLI_INLINE void DestroyHasher(
> - MemoryManager* m, HasherHandle* handle) {
> - if (*handle == NULL) return;
> - BROTLI_FREE(m, *handle);
> -}
> -
> -static BROTLI_INLINE void HasherReset(HasherHandle handle) {
> - if (handle == NULL) return;
> - GetHasherCommon(handle)->is_prepared_ = BROTLI_FALSE;
> -}
> -
> -static BROTLI_INLINE size_t HasherSize(const BrotliEncoderParams* params,
> - BROTLI_BOOL one_shot, const size_t input_size) {
> - size_t result = sizeof(HasherCommon);
> - switch (params->hasher.type) {
> -#define SIZE_(N) \
> - case N: \
> - result += HashMemAllocInBytesH ## N(params, one_shot, input_size); \
> - break;
> - FOR_ALL_HASHERS(SIZE_)
> -#undef SIZE_
> - default:
> - break;
> - }
> - return result;
> -}
> -
> -static BROTLI_INLINE void HasherSetup(MemoryManager* m,
> HasherHandle* handle,
> - BrotliEncoderParams* params, const uint8_t* data, size_t position,
> - size_t input_size, BROTLI_BOOL is_last) {
> - HasherHandle self = NULL;
> - HasherCommon* common = NULL;
> - BROTLI_BOOL one_shot = (position == 0 && is_last);
> - if (*handle == NULL) {
> - size_t alloc_size;
> - ChooseHasher(params, ¶ms->hasher);
> - alloc_size = HasherSize(params, one_shot, input_size);
> - self = BROTLI_ALLOC(m, uint8_t, alloc_size);
> - if (BROTLI_IS_OOM(m)) return;
> - *handle = self;
> - common = GetHasherCommon(self);
> - common->params = params->hasher;
> - switch (common->params.type) {
> -#define INITIALIZE_(N) \
> - case N: \
> - InitializeH ## N(*handle, params); \
> - break;
> - FOR_ALL_HASHERS(INITIALIZE_);
> -#undef INITIALIZE_
> - default:
> - break;
> - }
> - HasherReset(*handle);
> - }
> -
> - self = *handle;
> - common = GetHasherCommon(self);
> - if (!common->is_prepared_) {
> - switch (common->params.type) {
> -#define PREPARE_(N) \
> - case N: \
> - PrepareH ## N(self, one_shot, input_size, data); \
> - break;
> - FOR_ALL_HASHERS(PREPARE_)
> -#undef PREPARE_
> - default: break;
> - }
> - if (position == 0) {
> - common->dict_num_lookups = 0;
> - common->dict_num_matches = 0;
> - }
> - common->is_prepared_ = BROTLI_TRUE;
> - }
> -}
> -
> -static BROTLI_INLINE void InitOrStitchToPreviousBlock(
> - MemoryManager* m, HasherHandle* handle, const uint8_t* data, size_t
> mask,
> - BrotliEncoderParams* params, size_t position, size_t input_size,
> - BROTLI_BOOL is_last) {
> - HasherHandle self;
> - HasherSetup(m, handle, params, data, position, input_size, is_last);
> - if (BROTLI_IS_OOM(m)) return;
> - self = *handle;
> - switch (GetHasherCommon(self)->params.type) {
> -#define INIT_(N) \
> - case N: \
> - StitchToPreviousBlockH ## N(self, input_size, position, data, mask); \
> - break;
> - FOR_ALL_HASHERS(INIT_)
> -#undef INIT_
> - default: break;
> - }
> -}
> -
> -#if defined(__cplusplus) || defined(c_plusplus)
> -} /* extern "C" */
> -#endif
> -
> -#endif /* BROTLI_ENC_HASH_H_ */
> diff --git a/BaseTools/Source/C/BrotliCompress/enc/hash_composite_inc.h
> b/BaseTools/Source/C/BrotliCompress/enc/hash_composite_inc.h
> deleted file mode 100644
> index ec3e39c73fa2..000000000000
> --- a/BaseTools/Source/C/BrotliCompress/enc/hash_composite_inc.h
> +++ /dev/null
> @@ -1,133 +0,0 @@
> -/* NOLINT(build/header_guard) */
> -/* Copyright 2018 Google Inc. All Rights Reserved.
> -
> - Distributed under MIT license.
> - See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
> -*/
> -
> -/* template parameters: FN, HASHER_A, HASHER_B */
> -
> -/* Composite hasher: This hasher allows to combine two other hashers,
> HASHER_A
> - and HASHER_B. */
> -
> -#define HashComposite HASHER()
> -
> -#define FN_A(X) EXPAND_CAT(X, HASHER_A)
> -#define FN_B(X) EXPAND_CAT(X, HASHER_B)
> -
> -static BROTLI_INLINE size_t FN(HashTypeLength)(void) {
> - size_t a = FN_A(HashTypeLength)();
> - size_t b = FN_B(HashTypeLength)();
> - return a > b ? a : b;
> -}
> -
> -static BROTLI_INLINE size_t FN(StoreLookahead)(void) {
> - size_t a = FN_A(StoreLookahead)();
> - size_t b = FN_B(StoreLookahead)();
> - return a > b ? a : b;
> -}
> -
> -typedef struct HashComposite {
> - HasherHandle ha;
> - HasherHandle hb;
> - const BrotliEncoderParams* params;
> -} HashComposite;
> -
> -static BROTLI_INLINE HashComposite* FN(Self)(HasherHandle handle) {
> - return (HashComposite*)&(GetHasherCommon(handle)[1]);
> -}
> -
> -static void FN(Initialize)(
> - HasherHandle handle, const BrotliEncoderParams* params) {
> - HashComposite* self = FN(Self)(handle);
> - self->ha = 0;
> - self->hb = 0;
> - self->params = params;
> - /* TODO: Initialize of the hashers is defered to Prepare (and params
> - remembered here) because we don't get the one_shot and input_size
> params
> - here that are needed to know the memory size of them. Instead provide
> - those params to all hashers FN(Initialize) */
> -}
> -
> -static void FN(Prepare)(HasherHandle handle, BROTLI_BOOL one_shot,
> - size_t input_size, const uint8_t* data) {
> - HashComposite* self = FN(Self)(handle);
> - if (!self->ha) {
> - HasherCommon* common_a;
> - HasherCommon* common_b;
> -
> - self->ha = handle + sizeof(HasherCommon) + sizeof(HashComposite);
> - common_a = (HasherCommon*)self->ha;
> - common_a->params = self->params->hasher;
> - common_a->is_prepared_ = BROTLI_FALSE;
> - common_a->dict_num_lookups = 0;
> - common_a->dict_num_matches = 0;
> - FN_A(Initialize)(self->ha, self->params);
> -
> - self->hb = self->ha + sizeof(HasherCommon) +
> FN_A(HashMemAllocInBytes)(
> - self->params, one_shot, input_size);
> - common_b = (HasherCommon*)self->hb;
> - common_b->params = self->params->hasher;
> - common_b->is_prepared_ = BROTLI_FALSE;
> - common_b->dict_num_lookups = 0;
> - common_b->dict_num_matches = 0;
> - FN_B(Initialize)(self->hb, self->params);
> - }
> - FN_A(Prepare)(self->ha, one_shot, input_size, data);
> - FN_B(Prepare)(self->hb, one_shot, input_size, data);
> -}
> -
> -static BROTLI_INLINE size_t FN(HashMemAllocInBytes)(
> - const BrotliEncoderParams* params, BROTLI_BOOL one_shot,
> - size_t input_size) {
> - return sizeof(HashComposite) + 2 * sizeof(HasherCommon) +
> - FN_A(HashMemAllocInBytes)(params, one_shot, input_size) +
> - FN_B(HashMemAllocInBytes)(params, one_shot, input_size);
> -}
> -
> -static BROTLI_INLINE void FN(Store)(HasherHandle BROTLI_RESTRICT handle,
> - const uint8_t* BROTLI_RESTRICT data, const size_t mask, const size_t ix) {
> - HashComposite* self = FN(Self)(handle);
> - FN_A(Store)(self->ha, data, mask, ix);
> - FN_B(Store)(self->hb, data, mask, ix);
> -}
> -
> -static BROTLI_INLINE void FN(StoreRange)(HasherHandle handle,
> - const uint8_t* data, const size_t mask, const size_t ix_start,
> - const size_t ix_end) {
> - HashComposite* self = FN(Self)(handle);
> - FN_A(StoreRange)(self->ha, data, mask, ix_start, ix_end);
> - FN_B(StoreRange)(self->hb, data, mask, ix_start, ix_end);
> -}
> -
> -static BROTLI_INLINE void FN(StitchToPreviousBlock)(HasherHandle handle,
> - size_t num_bytes, size_t position, const uint8_t* ringbuffer,
> - size_t ring_buffer_mask) {
> - HashComposite* self = FN(Self)(handle);
> - FN_A(StitchToPreviousBlock)(self->ha, num_bytes, position, ringbuffer,
> - ring_buffer_mask);
> - FN_B(StitchToPreviousBlock)(self->hb, num_bytes, position, ringbuffer,
> - ring_buffer_mask);
> -}
> -
> -static BROTLI_INLINE void FN(PrepareDistanceCache)(
> - HasherHandle handle, int* BROTLI_RESTRICT distance_cache) {
> - HashComposite* self = FN(Self)(handle);
> - FN_A(PrepareDistanceCache)(self->ha, distance_cache);
> - FN_B(PrepareDistanceCache)(self->hb, distance_cache);
> -}
> -
> -static BROTLI_INLINE void FN(FindLongestMatch)(HasherHandle handle,
> - const BrotliEncoderDictionary* dictionary,
> - const uint8_t* BROTLI_RESTRICT data, const size_t ring_buffer_mask,
> - const int* BROTLI_RESTRICT distance_cache, const size_t cur_ix,
> - const size_t max_length, const size_t max_backward, const size_t gap,
> - const size_t max_distance, HasherSearchResult* BROTLI_RESTRICT out) {
> - HashComposite* self = FN(Self)(handle);
> - FN_A(FindLongestMatch)(self->ha, dictionary, data, ring_buffer_mask,
> - distance_cache, cur_ix, max_length, max_backward, gap, max_distance,
> out);
> - FN_B(FindLongestMatch)(self->hb, dictionary, data, ring_buffer_mask,
> - distance_cache, cur_ix, max_length, max_backward, gap, max_distance,
> out);
> -}
> -
> -#undef HashComposite
> diff --git
> a/BaseTools/Source/C/BrotliCompress/enc/hash_forgetful_chain_inc.h
> b/BaseTools/Source/C/BrotliCompress/enc/hash_forgetful_chain_inc.h
> deleted file mode 100644
> index 9caf429db1d9..000000000000
> --- a/BaseTools/Source/C/BrotliCompress/enc/hash_forgetful_chain_inc.h
> +++ /dev/null
> @@ -1,254 +0,0 @@
> -/* NOLINT(build/header_guard) */
> -/* Copyright 2016 Google Inc. All Rights Reserved.
> -
> - Distributed under MIT license.
> - See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
> -*/
> -
> -/* template parameters: FN, BUCKET_BITS, NUM_BANKS, BANK_BITS,
> - NUM_LAST_DISTANCES_TO_CHECK */
> -
> -/* A (forgetful) hash table to the data seen by the compressor, to
> - help create backward references to previous data.
> -
> - Hashes are stored in chains which are bucketed to groups. Group of chains
> - share a storage "bank". When more than "bank size" chain nodes are
> added,
> - oldest nodes are replaced; this way several chains may share a tail. */
> -
> -#define HashForgetfulChain HASHER()
> -
> -#define BANK_SIZE (1 << BANK_BITS)
> -
> -/* Number of hash buckets. */
> -#define BUCKET_SIZE (1 << BUCKET_BITS)
> -
> -#define CAPPED_CHAINS 0
> -
> -static BROTLI_INLINE size_t FN(HashTypeLength)(void) { return 4; }
> -static BROTLI_INLINE size_t FN(StoreLookahead)(void) { return 4; }
> -
> -/* HashBytes is the function that chooses the bucket to place the address
> in.*/
> -static BROTLI_INLINE size_t FN(HashBytes)(const uint8_t* data) {
> - const uint32_t h = BROTLI_UNALIGNED_LOAD32LE(data) * kHashMul32;
> - /* The higher bits contain more mixture from the multiplication,
> - so we take our results from there. */
> - return h >> (32 - BUCKET_BITS);
> -}
> -
> -typedef struct FN(Slot) {
> - uint16_t delta;
> - uint16_t next;
> -} FN(Slot);
> -
> -typedef struct FN(Bank) {
> - FN(Slot) slots[BANK_SIZE];
> -} FN(Bank);
> -
> -typedef struct HashForgetfulChain {
> - uint32_t addr[BUCKET_SIZE];
> - uint16_t head[BUCKET_SIZE];
> - /* Truncated hash used for quick rejection of "distance cache" candidates.
> */
> - uint8_t tiny_hash[65536];
> - FN(Bank) banks[NUM_BANKS];
> - uint16_t free_slot_idx[NUM_BANKS];
> - size_t max_hops;
> -} HashForgetfulChain;
> -
> -static BROTLI_INLINE HashForgetfulChain* FN(Self)(HasherHandle handle) {
> - return (HashForgetfulChain*)&(GetHasherCommon(handle)[1]);
> -}
> -
> -static void FN(Initialize)(
> - HasherHandle handle, const BrotliEncoderParams* params) {
> - FN(Self)(handle)->max_hops =
> - (params->quality > 6 ? 7u : 8u) << (params->quality - 4);
> -}
> -
> -static void FN(Prepare)(HasherHandle handle, BROTLI_BOOL one_shot,
> - size_t input_size, const uint8_t* data) {
> - HashForgetfulChain* self = FN(Self)(handle);
> - /* Partial preparation is 100 times slower (per socket). */
> - size_t partial_prepare_threshold = BUCKET_SIZE >> 6;
> - if (one_shot && input_size <= partial_prepare_threshold) {
> - size_t i;
> - for (i = 0; i < input_size; ++i) {
> - size_t bucket = FN(HashBytes)(&data[i]);
> - /* See InitEmpty comment. */
> - self->addr[bucket] = 0xCCCCCCCC;
> - self->head[bucket] = 0xCCCC;
> - }
> - } else {
> - /* Fill |addr| array with 0xCCCCCCCC value. Because of wrapping, position
> - processed by hasher never reaches 3GB + 64M; this makes all new chains
> - to be terminated after the first node. */
> - memset(self->addr, 0xCC, sizeof(self->addr));
> - memset(self->head, 0, sizeof(self->head));
> - }
> - memset(self->tiny_hash, 0, sizeof(self->tiny_hash));
> - memset(self->free_slot_idx, 0, sizeof(self->free_slot_idx));
> -}
> -
> -static BROTLI_INLINE size_t FN(HashMemAllocInBytes)(
> - const BrotliEncoderParams* params, BROTLI_BOOL one_shot,
> - size_t input_size) {
> - BROTLI_UNUSED(params);
> - BROTLI_UNUSED(one_shot);
> - BROTLI_UNUSED(input_size);
> - return sizeof(HashForgetfulChain);
> -}
> -
> -/* Look at 4 bytes at &data[ix & mask]. Compute a hash from these, and
> prepend
> - node to corresponding chain; also update tiny_hash for current position.
> */
> -static BROTLI_INLINE void FN(Store)(HasherHandle BROTLI_RESTRICT handle,
> - const uint8_t* BROTLI_RESTRICT data, const size_t mask, const size_t ix) {
> - HashForgetfulChain* self = FN(Self)(handle);
> - const size_t key = FN(HashBytes)(&data[ix & mask]);
> - const size_t bank = key & (NUM_BANKS - 1);
> - const size_t idx = self->free_slot_idx[bank]++ & (BANK_SIZE - 1);
> - size_t delta = ix - self->addr[key];
> - self->tiny_hash[(uint16_t)ix] = (uint8_t)key;
> - if (delta > 0xFFFF) delta = CAPPED_CHAINS ? 0 : 0xFFFF;
> - self->banks[bank].slots[idx].delta = (uint16_t)delta;
> - self->banks[bank].slots[idx].next = self->head[key];
> - self->addr[key] = (uint32_t)ix;
> - self->head[key] = (uint16_t)idx;
> -}
> -
> -static BROTLI_INLINE void FN(StoreRange)(HasherHandle handle,
> - const uint8_t* data, const size_t mask, const size_t ix_start,
> - const size_t ix_end) {
> - size_t i;
> - for (i = ix_start; i < ix_end; ++i) {
> - FN(Store)(handle, data, mask, i);
> - }
> -}
> -
> -static BROTLI_INLINE void FN(StitchToPreviousBlock)(HasherHandle handle,
> - size_t num_bytes, size_t position, const uint8_t* ringbuffer,
> - size_t ring_buffer_mask) {
> - if (num_bytes >= FN(HashTypeLength)() - 1 && position >= 3) {
> - /* Prepare the hashes for three last bytes of the last write.
> - These could not be calculated before, since they require knowledge
> - of both the previous and the current block. */
> - FN(Store)(handle, ringbuffer, ring_buffer_mask, position - 3);
> - FN(Store)(handle, ringbuffer, ring_buffer_mask, position - 2);
> - FN(Store)(handle, ringbuffer, ring_buffer_mask, position - 1);
> - }
> -}
> -
> -static BROTLI_INLINE void FN(PrepareDistanceCache)(
> - HasherHandle handle, int* BROTLI_RESTRICT distance_cache) {
> - BROTLI_UNUSED(handle);
> - PrepareDistanceCache(distance_cache,
> NUM_LAST_DISTANCES_TO_CHECK);
> -}
> -
> -/* Find a longest backward match of &data[cur_ix] up to the length of
> - max_length and stores the position cur_ix in the hash table.
> -
> - REQUIRES: FN(PrepareDistanceCache) must be invoked for current
> distance cache
> - values; if this method is invoked repeatedly with the same distance
> - cache values, it is enough to invoke FN(PrepareDistanceCache) once.
> -
> - Does not look for matches longer than max_length.
> - Does not look for matches further away than max_backward.
> - Writes the best match into |out|.
> - |out|->score is updated only if a better match is found. */
> -static BROTLI_INLINE void FN(FindLongestMatch)(HasherHandle handle,
> - const BrotliEncoderDictionary* dictionary,
> - const uint8_t* BROTLI_RESTRICT data, const size_t ring_buffer_mask,
> - const int* BROTLI_RESTRICT distance_cache,
> - const size_t cur_ix, const size_t max_length, const size_t max_backward,
> - const size_t gap, const size_t max_distance,
> - HasherSearchResult* BROTLI_RESTRICT out) {
> - HashForgetfulChain* self = FN(Self)(handle);
> - const size_t cur_ix_masked = cur_ix & ring_buffer_mask;
> - /* Don't accept a short copy from far away. */
> - score_t min_score = out->score;
> - score_t best_score = out->score;
> - size_t best_len = out->len;
> - size_t i;
> - const size_t key = FN(HashBytes)(&data[cur_ix_masked]);
> - const uint8_t tiny_hash = (uint8_t)(key);
> - out->len = 0;
> - out->len_code_delta = 0;
> - /* Try last distance first. */
> - for (i = 0; i < NUM_LAST_DISTANCES_TO_CHECK; ++i) {
> - const size_t backward = (size_t)distance_cache[i];
> - size_t prev_ix = (cur_ix - backward);
> - /* For distance code 0 we want to consider 2-byte matches. */
> - if (i > 0 && self->tiny_hash[(uint16_t)prev_ix] != tiny_hash) continue;
> - if (prev_ix >= cur_ix || backward > max_backward) {
> - continue;
> - }
> - prev_ix &= ring_buffer_mask;
> - {
> - const size_t len = FindMatchLengthWithLimit(&data[prev_ix],
> - &data[cur_ix_masked],
> - max_length);
> - if (len >= 2) {
> - score_t score = BackwardReferenceScoreUsingLastDistance(len);
> - if (best_score < score) {
> - if (i != 0) score -= BackwardReferencePenaltyUsingLastDistance(i);
> - if (best_score < score) {
> - best_score = score;
> - best_len = len;
> - out->len = best_len;
> - out->distance = backward;
> - out->score = best_score;
> - }
> - }
> - }
> - }
> - }
> - {
> - const size_t bank = key & (NUM_BANKS - 1);
> - size_t backward = 0;
> - size_t hops = self->max_hops;
> - size_t delta = cur_ix - self->addr[key];
> - size_t slot = self->head[key];
> - while (hops--) {
> - size_t prev_ix;
> - size_t last = slot;
> - backward += delta;
> - if (backward > max_backward || (CAPPED_CHAINS && !delta)) break;
> - prev_ix = (cur_ix - backward) & ring_buffer_mask;
> - slot = self->banks[bank].slots[last].next;
> - delta = self->banks[bank].slots[last].delta;
> - if (cur_ix_masked + best_len > ring_buffer_mask ||
> - prev_ix + best_len > ring_buffer_mask ||
> - data[cur_ix_masked + best_len] != data[prev_ix + best_len]) {
> - continue;
> - }
> - {
> - const size_t len = FindMatchLengthWithLimit(&data[prev_ix],
> - &data[cur_ix_masked],
> - max_length);
> - if (len >= 4) {
> - /* Comparing for >= 3 does not change the semantics, but just saves
> - for a few unnecessary binary logarithms in backward reference
> - score, since we are not interested in such short matches. */
> - score_t score = BackwardReferenceScore(len, backward);
> - if (best_score < score) {
> - best_score = score;
> - best_len = len;
> - out->len = best_len;
> - out->distance = backward;
> - out->score = best_score;
> - }
> - }
> - }
> - }
> - FN(Store)(handle, data, ring_buffer_mask, cur_ix);
> - }
> - if (out->score == min_score) {
> - SearchInStaticDictionary(dictionary,
> - handle, &data[cur_ix_masked], max_length, max_backward + gap,
> - max_distance, out, BROTLI_FALSE);
> - }
> -}
> -
> -#undef BANK_SIZE
> -#undef BUCKET_SIZE
> -#undef CAPPED_CHAINS
> -
> -#undef HashForgetfulChain
> diff --git
> a/BaseTools/Source/C/BrotliCompress/enc/hash_longest_match64_inc.h
> b/BaseTools/Source/C/BrotliCompress/enc/hash_longest_match64_inc.h
> deleted file mode 100644
> index 3a01f0d3f1a0..000000000000
> --- a/BaseTools/Source/C/BrotliCompress/enc/hash_longest_match64_inc.h
> +++ /dev/null
> @@ -1,266 +0,0 @@
> -/* NOLINT(build/header_guard) */
> -/* Copyright 2010 Google Inc. All Rights Reserved.
> -
> - Distributed under MIT license.
> - See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
> -*/
> -
> -/* template parameters: FN */
> -
> -/* A (forgetful) hash table to the data seen by the compressor, to
> - help create backward references to previous data.
> -
> - This is a hash map of fixed size (bucket_size_) to a ring buffer of
> - fixed size (block_size_). The ring buffer contains the last block_size_
> - index positions of the given hash key in the compressed data. */
> -
> -#define HashLongestMatch HASHER()
> -
> -static BROTLI_INLINE size_t FN(HashTypeLength)(void) { return 8; }
> -static BROTLI_INLINE size_t FN(StoreLookahead)(void) { return 8; }
> -
> -/* HashBytes is the function that chooses the bucket to place the address in.
> */
> -static BROTLI_INLINE uint32_t FN(HashBytes)(const uint8_t* data,
> - const uint64_t mask,
> - const int shift) {
> - const uint64_t h = (BROTLI_UNALIGNED_LOAD64LE(data) & mask) *
> kHashMul64Long;
> - /* The higher bits contain more mixture from the multiplication,
> - so we take our results from there. */
> - return (uint32_t)(h >> shift);
> -}
> -
> -typedef struct HashLongestMatch {
> - /* Number of hash buckets. */
> - size_t bucket_size_;
> - /* Only block_size_ newest backward references are kept,
> - and the older are forgotten. */
> - size_t block_size_;
> - /* Left-shift for computing hash bucket index from hash value. */
> - int hash_shift_;
> - /* Mask for selecting the next 4-8 bytes of input */
> - uint64_t hash_mask_;
> - /* Mask for accessing entries in a block (in a ring-buffer manner). */
> - uint32_t block_mask_;
> -
> - /* --- Dynamic size members --- */
> -
> - /* Number of entries in a particular bucket. */
> - /* uint16_t num[bucket_size]; */
> -
> - /* Buckets containing block_size_ of backward references. */
> - /* uint32_t* buckets[bucket_size * block_size]; */
> -} HashLongestMatch;
> -
> -static BROTLI_INLINE HashLongestMatch* FN(Self)(HasherHandle handle) {
> - return (HashLongestMatch*)&(GetHasherCommon(handle)[1]);
> -}
> -
> -static BROTLI_INLINE uint16_t* FN(Num)(HashLongestMatch* self) {
> - return (uint16_t*)(&self[1]);
> -}
> -
> -static BROTLI_INLINE uint32_t* FN(Buckets)(HashLongestMatch* self) {
> - return (uint32_t*)(&FN(Num)(self)[self->bucket_size_]);
> -}
> -
> -static void FN(Initialize)(
> - HasherHandle handle, const BrotliEncoderParams* params) {
> - HasherCommon* common = GetHasherCommon(handle);
> - HashLongestMatch* self = FN(Self)(handle);
> - BROTLI_UNUSED(params);
> - self->hash_shift_ = 64 - common->params.bucket_bits;
> - self->hash_mask_ = (~((uint64_t)0U)) >> (64 - 8 * common-
> >params.hash_len);
> - self->bucket_size_ = (size_t)1 << common->params.bucket_bits;
> - self->block_size_ = (size_t)1 << common->params.block_bits;
> - self->block_mask_ = (uint32_t)(self->block_size_ - 1);
> -}
> -
> -static void FN(Prepare)(HasherHandle handle, BROTLI_BOOL one_shot,
> - size_t input_size, const uint8_t* data) {
> - HashLongestMatch* self = FN(Self)(handle);
> - uint16_t* num = FN(Num)(self);
> - /* Partial preparation is 100 times slower (per socket). */
> - size_t partial_prepare_threshold = self->bucket_size_ >> 6;
> - if (one_shot && input_size <= partial_prepare_threshold) {
> - size_t i;
> - for (i = 0; i < input_size; ++i) {
> - const uint32_t key = FN(HashBytes)(&data[i], self->hash_mask_,
> - self->hash_shift_);
> - num[key] = 0;
> - }
> - } else {
> - memset(num, 0, self->bucket_size_ * sizeof(num[0]));
> - }
> -}
> -
> -static BROTLI_INLINE size_t FN(HashMemAllocInBytes)(
> - const BrotliEncoderParams* params, BROTLI_BOOL one_shot,
> - size_t input_size) {
> - size_t bucket_size = (size_t)1 << params->hasher.bucket_bits;
> - size_t block_size = (size_t)1 << params->hasher.block_bits;
> - BROTLI_UNUSED(one_shot);
> - BROTLI_UNUSED(input_size);
> - return sizeof(HashLongestMatch) + bucket_size * (2 + 4 * block_size);
> -}
> -
> -/* Look at 4 bytes at &data[ix & mask].
> - Compute a hash from these, and store the value of ix at that position. */
> -static BROTLI_INLINE void FN(Store)(HasherHandle handle, const uint8_t*
> data,
> - const size_t mask, const size_t ix) {
> - HashLongestMatch* self = FN(Self)(handle);
> - uint16_t* num = FN(Num)(self);
> - const uint32_t key = FN(HashBytes)(&data[ix & mask], self->hash_mask_,
> - self->hash_shift_);
> - const size_t minor_ix = num[key] & self->block_mask_;
> - const size_t offset =
> - minor_ix + (key << GetHasherCommon(handle)->params.block_bits);
> - FN(Buckets)(self)[offset] = (uint32_t)ix;
> - ++num[key];
> -}
> -
> -static BROTLI_INLINE void FN(StoreRange)(HasherHandle handle,
> - const uint8_t* data, const size_t mask, const size_t ix_start,
> - const size_t ix_end) {
> - size_t i;
> - for (i = ix_start; i < ix_end; ++i) {
> - FN(Store)(handle, data, mask, i);
> - }
> -}
> -
> -static BROTLI_INLINE void FN(StitchToPreviousBlock)(HasherHandle handle,
> - size_t num_bytes, size_t position, const uint8_t* ringbuffer,
> - size_t ringbuffer_mask) {
> - if (num_bytes >= FN(HashTypeLength)() - 1 && position >= 3) {
> - /* Prepare the hashes for three last bytes of the last write.
> - These could not be calculated before, since they require knowledge
> - of both the previous and the current block. */
> - FN(Store)(handle, ringbuffer, ringbuffer_mask, position - 3);
> - FN(Store)(handle, ringbuffer, ringbuffer_mask, position - 2);
> - FN(Store)(handle, ringbuffer, ringbuffer_mask, position - 1);
> - }
> -}
> -
> -static BROTLI_INLINE void FN(PrepareDistanceCache)(
> - HasherHandle handle, int* BROTLI_RESTRICT distance_cache) {
> - PrepareDistanceCache(distance_cache,
> - GetHasherCommon(handle)->params.num_last_distances_to_check);
> -}
> -
> -/* Find a longest backward match of &data[cur_ix] up to the length of
> - max_length and stores the position cur_ix in the hash table.
> -
> - REQUIRES: FN(PrepareDistanceCache) must be invoked for current
> distance cache
> - values; if this method is invoked repeatedly with the same distance
> - cache values, it is enough to invoke FN(PrepareDistanceCache) once.
> -
> - Does not look for matches longer than max_length.
> - Does not look for matches further away than max_backward.
> - Writes the best match into |out|.
> - |out|->score is updated only if a better match is found. */
> -static BROTLI_INLINE void FN(FindLongestMatch)(HasherHandle handle,
> - const BrotliEncoderDictionary* dictionary,
> - const uint8_t* BROTLI_RESTRICT data, const size_t ring_buffer_mask,
> - const int* BROTLI_RESTRICT distance_cache, const size_t cur_ix,
> - const size_t max_length, const size_t max_backward, const size_t gap,
> - const size_t max_distance, HasherSearchResult* BROTLI_RESTRICT out) {
> - HasherCommon* common = GetHasherCommon(handle);
> - HashLongestMatch* self = FN(Self)(handle);
> - uint16_t* num = FN(Num)(self);
> - uint32_t* buckets = FN(Buckets)(self);
> - const size_t cur_ix_masked = cur_ix & ring_buffer_mask;
> - /* Don't accept a short copy from far away. */
> - score_t min_score = out->score;
> - score_t best_score = out->score;
> - size_t best_len = out->len;
> - size_t i;
> - out->len = 0;
> - out->len_code_delta = 0;
> - /* Try last distance first. */
> - for (i = 0; i < (size_t)common->params.num_last_distances_to_check; ++i)
> {
> - const size_t backward = (size_t)distance_cache[i];
> - size_t prev_ix = (size_t)(cur_ix - backward);
> - if (prev_ix >= cur_ix) {
> - continue;
> - }
> - if (BROTLI_PREDICT_FALSE(backward > max_backward)) {
> - continue;
> - }
> - prev_ix &= ring_buffer_mask;
> -
> - if (cur_ix_masked + best_len > ring_buffer_mask ||
> - prev_ix + best_len > ring_buffer_mask ||
> - data[cur_ix_masked + best_len] != data[prev_ix + best_len]) {
> - continue;
> - }
> - {
> - const size_t len = FindMatchLengthWithLimit(&data[prev_ix],
> - &data[cur_ix_masked],
> - max_length);
> - if (len >= 3 || (len == 2 && i < 2)) {
> - /* Comparing for >= 2 does not change the semantics, but just saves for
> - a few unnecessary binary logarithms in backward reference score,
> - since we are not interested in such short matches. */
> - score_t score = BackwardReferenceScoreUsingLastDistance(len);
> - if (best_score < score) {
> - if (i != 0) score -= BackwardReferencePenaltyUsingLastDistance(i);
> - if (best_score < score) {
> - best_score = score;
> - best_len = len;
> - out->len = best_len;
> - out->distance = backward;
> - out->score = best_score;
> - }
> - }
> - }
> - }
> - }
> - {
> - const uint32_t key = FN(HashBytes)(
> - &data[cur_ix_masked], self->hash_mask_, self->hash_shift_);
> - uint32_t* BROTLI_RESTRICT bucket =
> - &buckets[key << common->params.block_bits];
> - const size_t down =
> - (num[key] > self->block_size_) ?
> - (num[key] - self->block_size_) : 0u;
> - for (i = num[key]; i > down;) {
> - size_t prev_ix = bucket[--i & self->block_mask_];
> - const size_t backward = cur_ix - prev_ix;
> - if (BROTLI_PREDICT_FALSE(backward > max_backward)) {
> - break;
> - }
> - prev_ix &= ring_buffer_mask;
> - if (cur_ix_masked + best_len > ring_buffer_mask ||
> - prev_ix + best_len > ring_buffer_mask ||
> - data[cur_ix_masked + best_len] != data[prev_ix + best_len]) {
> - continue;
> - }
> - {
> - const size_t len = FindMatchLengthWithLimit(&data[prev_ix],
> - &data[cur_ix_masked],
> - max_length);
> - if (len >= 4) {
> - /* Comparing for >= 3 does not change the semantics, but just saves
> - for a few unnecessary binary logarithms in backward reference
> - score, since we are not interested in such short matches. */
> - score_t score = BackwardReferenceScore(len, backward);
> - if (best_score < score) {
> - best_score = score;
> - best_len = len;
> - out->len = best_len;
> - out->distance = backward;
> - out->score = best_score;
> - }
> - }
> - }
> - }
> - bucket[num[key] & self->block_mask_] = (uint32_t)cur_ix;
> - ++num[key];
> - }
> - if (min_score == out->score) {
> - SearchInStaticDictionary(dictionary,
> - handle, &data[cur_ix_masked], max_length, max_backward + gap,
> - max_distance, out, BROTLI_FALSE);
> - }
> -}
> -
> -#undef HashLongestMatch
> diff --git
> a/BaseTools/Source/C/BrotliCompress/enc/hash_longest_match_inc.h
> b/BaseTools/Source/C/BrotliCompress/enc/hash_longest_match_inc.h
> deleted file mode 100644
> index 108a7faaccb1..000000000000
> --- a/BaseTools/Source/C/BrotliCompress/enc/hash_longest_match_inc.h
> +++ /dev/null
> @@ -1,258 +0,0 @@
> -/* NOLINT(build/header_guard) */
> -/* Copyright 2010 Google Inc. All Rights Reserved.
> -
> - Distributed under MIT license.
> - See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
> -*/
> -
> -/* template parameters: FN */
> -
> -/* A (forgetful) hash table to the data seen by the compressor, to
> - help create backward references to previous data.
> -
> - This is a hash map of fixed size (bucket_size_) to a ring buffer of
> - fixed size (block_size_). The ring buffer contains the last block_size_
> - index positions of the given hash key in the compressed data. */
> -
> -#define HashLongestMatch HASHER()
> -
> -static BROTLI_INLINE size_t FN(HashTypeLength)(void) { return 4; }
> -static BROTLI_INLINE size_t FN(StoreLookahead)(void) { return 4; }
> -
> -/* HashBytes is the function that chooses the bucket to place the address in.
> */
> -static uint32_t FN(HashBytes)(const uint8_t* data, const int shift) {
> - uint32_t h = BROTLI_UNALIGNED_LOAD32LE(data) * kHashMul32;
> - /* The higher bits contain more mixture from the multiplication,
> - so we take our results from there. */
> - return (uint32_t)(h >> shift);
> -}
> -
> -typedef struct HashLongestMatch {
> - /* Number of hash buckets. */
> - size_t bucket_size_;
> - /* Only block_size_ newest backward references are kept,
> - and the older are forgotten. */
> - size_t block_size_;
> - /* Left-shift for computing hash bucket index from hash value. */
> - int hash_shift_;
> - /* Mask for accessing entries in a block (in a ring-buffer manner). */
> - uint32_t block_mask_;
> -
> - /* --- Dynamic size members --- */
> -
> - /* Number of entries in a particular bucket. */
> - /* uint16_t num[bucket_size]; */
> -
> - /* Buckets containing block_size_ of backward references. */
> - /* uint32_t* buckets[bucket_size * block_size]; */
> -} HashLongestMatch;
> -
> -static BROTLI_INLINE HashLongestMatch* FN(Self)(HasherHandle handle) {
> - return (HashLongestMatch*)&(GetHasherCommon(handle)[1]);
> -}
> -
> -static BROTLI_INLINE uint16_t* FN(Num)(HashLongestMatch* self) {
> - return (uint16_t*)(&self[1]);
> -}
> -
> -static BROTLI_INLINE uint32_t* FN(Buckets)(HashLongestMatch* self) {
> - return (uint32_t*)(&FN(Num)(self)[self->bucket_size_]);
> -}
> -
> -static void FN(Initialize)(
> - HasherHandle handle, const BrotliEncoderParams* params) {
> - HasherCommon* common = GetHasherCommon(handle);
> - HashLongestMatch* self = FN(Self)(handle);
> - BROTLI_UNUSED(params);
> - self->hash_shift_ = 32 - common->params.bucket_bits;
> - self->bucket_size_ = (size_t)1 << common->params.bucket_bits;
> - self->block_size_ = (size_t)1 << common->params.block_bits;
> - self->block_mask_ = (uint32_t)(self->block_size_ - 1);
> -}
> -
> -static void FN(Prepare)(HasherHandle handle, BROTLI_BOOL one_shot,
> - size_t input_size, const uint8_t* data) {
> - HashLongestMatch* self = FN(Self)(handle);
> - uint16_t* num = FN(Num)(self);
> - /* Partial preparation is 100 times slower (per socket). */
> - size_t partial_prepare_threshold = self->bucket_size_ >> 6;
> - if (one_shot && input_size <= partial_prepare_threshold) {
> - size_t i;
> - for (i = 0; i < input_size; ++i) {
> - const uint32_t key = FN(HashBytes)(&data[i], self->hash_shift_);
> - num[key] = 0;
> - }
> - } else {
> - memset(num, 0, self->bucket_size_ * sizeof(num[0]));
> - }
> -}
> -
> -static BROTLI_INLINE size_t FN(HashMemAllocInBytes)(
> - const BrotliEncoderParams* params, BROTLI_BOOL one_shot,
> - size_t input_size) {
> - size_t bucket_size = (size_t)1 << params->hasher.bucket_bits;
> - size_t block_size = (size_t)1 << params->hasher.block_bits;
> - BROTLI_UNUSED(one_shot);
> - BROTLI_UNUSED(input_size);
> - return sizeof(HashLongestMatch) + bucket_size * (2 + 4 * block_size);
> -}
> -
> -/* Look at 4 bytes at &data[ix & mask].
> - Compute a hash from these, and store the value of ix at that position. */
> -static BROTLI_INLINE void FN(Store)(HasherHandle handle, const uint8_t*
> data,
> - const size_t mask, const size_t ix) {
> - HashLongestMatch* self = FN(Self)(handle);
> - uint16_t* num = FN(Num)(self);
> - const uint32_t key = FN(HashBytes)(&data[ix & mask], self->hash_shift_);
> - const size_t minor_ix = num[key] & self->block_mask_;
> - const size_t offset =
> - minor_ix + (key << GetHasherCommon(handle)->params.block_bits);
> - FN(Buckets)(self)[offset] = (uint32_t)ix;
> - ++num[key];
> -}
> -
> -static BROTLI_INLINE void FN(StoreRange)(HasherHandle handle,
> - const uint8_t* data, const size_t mask, const size_t ix_start,
> - const size_t ix_end) {
> - size_t i;
> - for (i = ix_start; i < ix_end; ++i) {
> - FN(Store)(handle, data, mask, i);
> - }
> -}
> -
> -static BROTLI_INLINE void FN(StitchToPreviousBlock)(HasherHandle handle,
> - size_t num_bytes, size_t position, const uint8_t* ringbuffer,
> - size_t ringbuffer_mask) {
> - if (num_bytes >= FN(HashTypeLength)() - 1 && position >= 3) {
> - /* Prepare the hashes for three last bytes of the last write.
> - These could not be calculated before, since they require knowledge
> - of both the previous and the current block. */
> - FN(Store)(handle, ringbuffer, ringbuffer_mask, position - 3);
> - FN(Store)(handle, ringbuffer, ringbuffer_mask, position - 2);
> - FN(Store)(handle, ringbuffer, ringbuffer_mask, position - 1);
> - }
> -}
> -
> -static BROTLI_INLINE void FN(PrepareDistanceCache)(
> - HasherHandle handle, int* BROTLI_RESTRICT distance_cache) {
> - PrepareDistanceCache(distance_cache,
> - GetHasherCommon(handle)->params.num_last_distances_to_check);
> -}
> -
> -/* Find a longest backward match of &data[cur_ix] up to the length of
> - max_length and stores the position cur_ix in the hash table.
> -
> - REQUIRES: FN(PrepareDistanceCache) must be invoked for current
> distance cache
> - values; if this method is invoked repeatedly with the same distance
> - cache values, it is enough to invoke FN(PrepareDistanceCache) once.
> -
> - Does not look for matches longer than max_length.
> - Does not look for matches further away than max_backward.
> - Writes the best match into |out|.
> - |out|->score is updated only if a better match is found. */
> -static BROTLI_INLINE void FN(FindLongestMatch)(HasherHandle handle,
> - const BrotliEncoderDictionary* dictionary,
> - const uint8_t* BROTLI_RESTRICT data, const size_t ring_buffer_mask,
> - const int* BROTLI_RESTRICT distance_cache, const size_t cur_ix,
> - const size_t max_length, const size_t max_backward, const size_t gap,
> - const size_t max_distance, HasherSearchResult* BROTLI_RESTRICT out) {
> - HasherCommon* common = GetHasherCommon(handle);
> - HashLongestMatch* self = FN(Self)(handle);
> - uint16_t* num = FN(Num)(self);
> - uint32_t* buckets = FN(Buckets)(self);
> - const size_t cur_ix_masked = cur_ix & ring_buffer_mask;
> - /* Don't accept a short copy from far away. */
> - score_t min_score = out->score;
> - score_t best_score = out->score;
> - size_t best_len = out->len;
> - size_t i;
> - out->len = 0;
> - out->len_code_delta = 0;
> - /* Try last distance first. */
> - for (i = 0; i < (size_t)common->params.num_last_distances_to_check; ++i)
> {
> - const size_t backward = (size_t)distance_cache[i];
> - size_t prev_ix = (size_t)(cur_ix - backward);
> - if (prev_ix >= cur_ix) {
> - continue;
> - }
> - if (BROTLI_PREDICT_FALSE(backward > max_backward)) {
> - continue;
> - }
> - prev_ix &= ring_buffer_mask;
> -
> - if (cur_ix_masked + best_len > ring_buffer_mask ||
> - prev_ix + best_len > ring_buffer_mask ||
> - data[cur_ix_masked + best_len] != data[prev_ix + best_len]) {
> - continue;
> - }
> - {
> - const size_t len = FindMatchLengthWithLimit(&data[prev_ix],
> - &data[cur_ix_masked],
> - max_length);
> - if (len >= 3 || (len == 2 && i < 2)) {
> - /* Comparing for >= 2 does not change the semantics, but just saves for
> - a few unnecessary binary logarithms in backward reference score,
> - since we are not interested in such short matches. */
> - score_t score = BackwardReferenceScoreUsingLastDistance(len);
> - if (best_score < score) {
> - if (i != 0) score -= BackwardReferencePenaltyUsingLastDistance(i);
> - if (best_score < score) {
> - best_score = score;
> - best_len = len;
> - out->len = best_len;
> - out->distance = backward;
> - out->score = best_score;
> - }
> - }
> - }
> - }
> - }
> - {
> - const uint32_t key =
> - FN(HashBytes)(&data[cur_ix_masked], self->hash_shift_);
> - uint32_t* BROTLI_RESTRICT bucket =
> - &buckets[key << common->params.block_bits];
> - const size_t down =
> - (num[key] > self->block_size_) ? (num[key] - self->block_size_) : 0u;
> - for (i = num[key]; i > down;) {
> - size_t prev_ix = bucket[--i & self->block_mask_];
> - const size_t backward = cur_ix - prev_ix;
> - if (BROTLI_PREDICT_FALSE(backward > max_backward)) {
> - break;
> - }
> - prev_ix &= ring_buffer_mask;
> - if (cur_ix_masked + best_len > ring_buffer_mask ||
> - prev_ix + best_len > ring_buffer_mask ||
> - data[cur_ix_masked + best_len] != data[prev_ix + best_len]) {
> - continue;
> - }
> - {
> - const size_t len = FindMatchLengthWithLimit(&data[prev_ix],
> - &data[cur_ix_masked],
> - max_length);
> - if (len >= 4) {
> - /* Comparing for >= 3 does not change the semantics, but just saves
> - for a few unnecessary binary logarithms in backward reference
> - score, since we are not interested in such short matches. */
> - score_t score = BackwardReferenceScore(len, backward);
> - if (best_score < score) {
> - best_score = score;
> - best_len = len;
> - out->len = best_len;
> - out->distance = backward;
> - out->score = best_score;
> - }
> - }
> - }
> - }
> - bucket[num[key] & self->block_mask_] = (uint32_t)cur_ix;
> - ++num[key];
> - }
> - if (min_score == out->score) {
> - SearchInStaticDictionary(dictionary,
> - handle, &data[cur_ix_masked], max_length, max_backward + gap,
> - max_distance, out, BROTLI_FALSE);
> - }
> -}
> -
> -#undef HashLongestMatch
> diff --git
> a/BaseTools/Source/C/BrotliCompress/enc/hash_longest_match_quickly_in
> c.h
> b/BaseTools/Source/C/BrotliCompress/enc/hash_longest_match_quickly_in
> c.h
> deleted file mode 100644
> index 49338f97db48..000000000000
> ---
> a/BaseTools/Source/C/BrotliCompress/enc/hash_longest_match_quickly_in
> c.h
> +++ /dev/null
> @@ -1,235 +0,0 @@
> -/* NOLINT(build/header_guard) */
> -/* Copyright 2010 Google Inc. All Rights Reserved.
> -
> - Distributed under MIT license.
> - See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
> -*/
> -
> -/* template parameters: FN, BUCKET_BITS, BUCKET_SWEEP, HASH_LEN,
> - USE_DICTIONARY
> - */
> -
> -#define HashLongestMatchQuickly HASHER()
> -
> -#define BUCKET_SIZE (1 << BUCKET_BITS)
> -
> -#define HASH_MAP_SIZE (4 << BUCKET_BITS)
> -
> -static BROTLI_INLINE size_t FN(HashTypeLength)(void) { return 8; }
> -static BROTLI_INLINE size_t FN(StoreLookahead)(void) { return 8; }
> -
> -/* HashBytes is the function that chooses the bucket to place
> - the address in. The HashLongestMatch and HashLongestMatchQuickly
> - classes have separate, different implementations of hashing. */
> -static uint32_t FN(HashBytes)(const uint8_t* data) {
> - const uint64_t h = ((BROTLI_UNALIGNED_LOAD64LE(data) << (64 - 8 *
> HASH_LEN)) *
> - kHashMul64);
> - /* The higher bits contain more mixture from the multiplication,
> - so we take our results from there. */
> - return (uint32_t)(h >> (64 - BUCKET_BITS));
> -}
> -
> -/* A (forgetful) hash table to the data seen by the compressor, to
> - help create backward references to previous data.
> -
> - This is a hash map of fixed size (BUCKET_SIZE). Starting from the
> - given index, BUCKET_SWEEP buckets are used to store values of a key. */
> -typedef struct HashLongestMatchQuickly {
> - uint32_t buckets_[BUCKET_SIZE + BUCKET_SWEEP];
> -} HashLongestMatchQuickly;
> -
> -static BROTLI_INLINE HashLongestMatchQuickly* FN(Self)(HasherHandle
> handle) {
> - return (HashLongestMatchQuickly*)&(GetHasherCommon(handle)[1]);
> -}
> -
> -static void FN(Initialize)(
> - HasherHandle handle, const BrotliEncoderParams* params) {
> - BROTLI_UNUSED(handle);
> - BROTLI_UNUSED(params);
> -}
> -
> -static void FN(Prepare)(HasherHandle handle, BROTLI_BOOL one_shot,
> - size_t input_size, const uint8_t* data) {
> - HashLongestMatchQuickly* self = FN(Self)(handle);
> - /* Partial preparation is 100 times slower (per socket). */
> - size_t partial_prepare_threshold = HASH_MAP_SIZE >> 7;
> - if (one_shot && input_size <= partial_prepare_threshold) {
> - size_t i;
> - for (i = 0; i < input_size; ++i) {
> - const uint32_t key = FN(HashBytes)(&data[i]);
> - memset(&self->buckets_[key], 0, BUCKET_SWEEP * sizeof(self-
> >buckets_[0]));
> - }
> - } else {
> - /* It is not strictly necessary to fill this buffer here, but
> - not filling will make the results of the compression stochastic
> - (but correct). This is because random data would cause the
> - system to find accidentally good backward references here and there. */
> - memset(&self->buckets_[0], 0, sizeof(self->buckets_));
> - }
> -}
> -
> -static BROTLI_INLINE size_t FN(HashMemAllocInBytes)(
> - const BrotliEncoderParams* params, BROTLI_BOOL one_shot,
> - size_t input_size) {
> - BROTLI_UNUSED(params);
> - BROTLI_UNUSED(one_shot);
> - BROTLI_UNUSED(input_size);
> - return sizeof(HashLongestMatchQuickly);
> -}
> -
> -/* Look at 5 bytes at &data[ix & mask].
> - Compute a hash from these, and store the value somewhere within
> - [ix .. ix+3]. */
> -static BROTLI_INLINE void FN(Store)(HasherHandle handle,
> - const uint8_t* data, const size_t mask, const size_t ix) {
> - const uint32_t key = FN(HashBytes)(&data[ix & mask]);
> - /* Wiggle the value with the bucket sweep range. */
> - const uint32_t off = (ix >> 3) % BUCKET_SWEEP;
> - FN(Self)(handle)->buckets_[key + off] = (uint32_t)ix;
> -}
> -
> -static BROTLI_INLINE void FN(StoreRange)(HasherHandle handle,
> - const uint8_t* data, const size_t mask, const size_t ix_start,
> - const size_t ix_end) {
> - size_t i;
> - for (i = ix_start; i < ix_end; ++i) {
> - FN(Store)(handle, data, mask, i);
> - }
> -}
> -
> -static BROTLI_INLINE void FN(StitchToPreviousBlock)(
> - HasherHandle handle, size_t num_bytes, size_t position,
> - const uint8_t* ringbuffer, size_t ringbuffer_mask) {
> - if (num_bytes >= FN(HashTypeLength)() - 1 && position >= 3) {
> - /* Prepare the hashes for three last bytes of the last write.
> - These could not be calculated before, since they require knowledge
> - of both the previous and the current block. */
> - FN(Store)(handle, ringbuffer, ringbuffer_mask, position - 3);
> - FN(Store)(handle, ringbuffer, ringbuffer_mask, position - 2);
> - FN(Store)(handle, ringbuffer, ringbuffer_mask, position - 1);
> - }
> -}
> -
> -static BROTLI_INLINE void FN(PrepareDistanceCache)(
> - HasherHandle handle, int* BROTLI_RESTRICT distance_cache) {
> - BROTLI_UNUSED(handle);
> - BROTLI_UNUSED(distance_cache);
> -}
> -
> -/* Find a longest backward match of &data[cur_ix & ring_buffer_mask]
> - up to the length of max_length and stores the position cur_ix in the
> - hash table.
> -
> - Does not look for matches longer than max_length.
> - Does not look for matches further away than max_backward.
> - Writes the best match into |out|.
> - |out|->score is updated only if a better match is found. */
> -static BROTLI_INLINE void FN(FindLongestMatch)(
> - HasherHandle handle, const BrotliEncoderDictionary* dictionary,
> - const uint8_t* BROTLI_RESTRICT data,
> - const size_t ring_buffer_mask, const int* BROTLI_RESTRICT
> distance_cache,
> - const size_t cur_ix, const size_t max_length, const size_t max_backward,
> - const size_t gap, const size_t max_distance,
> - HasherSearchResult* BROTLI_RESTRICT out) {
> - HashLongestMatchQuickly* self = FN(Self)(handle);
> - const size_t best_len_in = out->len;
> - const size_t cur_ix_masked = cur_ix & ring_buffer_mask;
> - const uint32_t key = FN(HashBytes)(&data[cur_ix_masked]);
> - int compare_char = data[cur_ix_masked + best_len_in];
> - score_t min_score = out->score;
> - score_t best_score = out->score;
> - size_t best_len = best_len_in;
> - size_t cached_backward = (size_t)distance_cache[0];
> - size_t prev_ix = cur_ix - cached_backward;
> - out->len_code_delta = 0;
> - if (prev_ix < cur_ix) {
> - prev_ix &= (uint32_t)ring_buffer_mask;
> - if (compare_char == data[prev_ix + best_len]) {
> - size_t len = FindMatchLengthWithLimit(&data[prev_ix],
> - &data[cur_ix_masked],
> - max_length);
> - if (len >= 4) {
> - const score_t score = BackwardReferenceScoreUsingLastDistance(len);
> - if (best_score < score) {
> - best_score = score;
> - best_len = len;
> - out->len = len;
> - out->distance = cached_backward;
> - out->score = best_score;
> - compare_char = data[cur_ix_masked + best_len];
> - if (BUCKET_SWEEP == 1) {
> - self->buckets_[key] = (uint32_t)cur_ix;
> - return;
> - }
> - }
> - }
> - }
> - }
> - if (BUCKET_SWEEP == 1) {
> - size_t backward;
> - size_t len;
> - /* Only one to look for, don't bother to prepare for a loop. */
> - prev_ix = self->buckets_[key];
> - self->buckets_[key] = (uint32_t)cur_ix;
> - backward = cur_ix - prev_ix;
> - prev_ix &= (uint32_t)ring_buffer_mask;
> - if (compare_char != data[prev_ix + best_len_in]) {
> - return;
> - }
> - if (BROTLI_PREDICT_FALSE(backward == 0 || backward > max_backward))
> {
> - return;
> - }
> - len = FindMatchLengthWithLimit(&data[prev_ix],
> - &data[cur_ix_masked],
> - max_length);
> - if (len >= 4) {
> - const score_t score = BackwardReferenceScore(len, backward);
> - if (best_score < score) {
> - out->len = len;
> - out->distance = backward;
> - out->score = score;
> - return;
> - }
> - }
> - } else {
> - uint32_t* bucket = self->buckets_ + key;
> - int i;
> - prev_ix = *bucket++;
> - for (i = 0; i < BUCKET_SWEEP; ++i, prev_ix = *bucket++) {
> - const size_t backward = cur_ix - prev_ix;
> - size_t len;
> - prev_ix &= (uint32_t)ring_buffer_mask;
> - if (compare_char != data[prev_ix + best_len]) {
> - continue;
> - }
> - if (BROTLI_PREDICT_FALSE(backward == 0 || backward > max_backward))
> {
> - continue;
> - }
> - len = FindMatchLengthWithLimit(&data[prev_ix],
> - &data[cur_ix_masked],
> - max_length);
> - if (len >= 4) {
> - const score_t score = BackwardReferenceScore(len, backward);
> - if (best_score < score) {
> - best_score = score;
> - best_len = len;
> - out->len = best_len;
> - out->distance = backward;
> - out->score = score;
> - compare_char = data[cur_ix_masked + best_len];
> - }
> - }
> - }
> - }
> - if (USE_DICTIONARY && min_score == out->score) {
> - SearchInStaticDictionary(dictionary,
> - handle, &data[cur_ix_masked], max_length, max_backward + gap,
> - max_distance, out, BROTLI_TRUE);
> - }
> - self->buckets_[key + ((cur_ix >> 3) % BUCKET_SWEEP)] = (uint32_t)cur_ix;
> -}
> -
> -#undef HASH_MAP_SIZE
> -#undef BUCKET_SIZE
> -
> -#undef HashLongestMatchQuickly
> diff --git a/BaseTools/Source/C/BrotliCompress/enc/hash_rolling_inc.h
> b/BaseTools/Source/C/BrotliCompress/enc/hash_rolling_inc.h
> deleted file mode 100644
> index b8e3b21b5e33..000000000000
> --- a/BaseTools/Source/C/BrotliCompress/enc/hash_rolling_inc.h
> +++ /dev/null
> @@ -1,215 +0,0 @@
> -/* NOLINT(build/header_guard) */
> -/* Copyright 2018 Google Inc. All Rights Reserved.
> -
> - Distributed under MIT license.
> - See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
> -*/
> -
> -/* template parameters: FN, JUMP, NUMBUCKETS, MASK, CHUNKLEN */
> -/* NUMBUCKETS / (MASK + 1) = probability of storing and using hash code.
> */
> -/* JUMP = skip bytes for speedup */
> -
> -/* Rolling hash for long distance long string matches. Stores one position
> - per bucket, bucket key is computed over a long region. */
> -
> -#define HashRolling HASHER()
> -
> -static const uint32_t FN(kRollingHashMul32) = 69069;
> -static const uint32_t FN(kInvalidPos) = 0xffffffff;
> -
> -/* This hasher uses a longer forward length, but returning a higher value
> here
> - will hurt compression by the main hasher when combined with a
> composite
> - hasher. The hasher tests for forward itself instead. */
> -static BROTLI_INLINE size_t FN(HashTypeLength)(void) { return 4; }
> -static BROTLI_INLINE size_t FN(StoreLookahead)(void) { return 4; }
> -
> -/* Computes a code from a single byte. A lookup table of 256 values could
> be
> - used, but simply adding 1 works about as good. */
> -static uint32_t FN(HashByte)(uint8_t byte) {
> - return (uint32_t)byte + 1u;
> -}
> -
> -static uint32_t FN(HashRollingFunctionInitial)(uint32_t state, uint8_t add,
> - uint32_t factor) {
> - return (uint32_t)(factor * state + FN(HashByte)(add));
> -}
> -
> -static uint32_t FN(HashRollingFunction)(uint32_t state, uint8_t add,
> - uint8_t rem, uint32_t factor,
> - uint32_t factor_remove) {
> - return (uint32_t)(factor * state +
> - FN(HashByte)(add) - factor_remove * FN(HashByte)(rem));
> -}
> -
> -typedef struct HashRolling {
> - uint32_t state;
> - uint32_t* table;
> - size_t next_ix;
> -
> - uint32_t chunk_len;
> - uint32_t factor;
> - uint32_t factor_remove;
> -} HashRolling;
> -
> -static BROTLI_INLINE HashRolling* FN(Self)(HasherHandle handle) {
> - return (HashRolling*)&(GetHasherCommon(handle)[1]);
> -}
> -
> -static void FN(Initialize)(
> - HasherHandle handle, const BrotliEncoderParams* params) {
> - HashRolling* self = FN(Self)(handle);
> - size_t i;
> - self->state = 0;
> - self->next_ix = 0;
> -
> - self->factor = FN(kRollingHashMul32);
> -
> - /* Compute the factor of the oldest byte to remove: factor**steps modulo
> - 0xffffffff (the multiplications rely on 32-bit overflow) */
> - self->factor_remove = 1;
> - for (i = 0; i < CHUNKLEN; i += JUMP) {
> - self->factor_remove *= self->factor;
> - }
> -
> - self->table = (uint32_t*)((HasherHandle)self + sizeof(HashRolling));
> - for (i = 0; i < NUMBUCKETS; i++) {
> - self->table[i] = FN(kInvalidPos);
> - }
> -
> - BROTLI_UNUSED(params);
> -}
> -
> -static void FN(Prepare)(HasherHandle handle, BROTLI_BOOL one_shot,
> - size_t input_size, const uint8_t* data) {
> - HashRolling* self = FN(Self)(handle);
> - size_t i;
> - /* Too small size, cannot use this hasher. */
> - if (input_size < CHUNKLEN) return;
> - self->state = 0;
> - for (i = 0; i < CHUNKLEN; i += JUMP) {
> - self->state = FN(HashRollingFunctionInitial)(
> - self->state, data[i], self->factor);
> - }
> - BROTLI_UNUSED(one_shot);
> -}
> -
> -static BROTLI_INLINE size_t FN(HashMemAllocInBytes)(
> - const BrotliEncoderParams* params, BROTLI_BOOL one_shot,
> - size_t input_size) {
> - return sizeof(HashRolling) + NUMBUCKETS * sizeof(uint32_t);
> - BROTLI_UNUSED(params);
> - BROTLI_UNUSED(one_shot);
> - BROTLI_UNUSED(input_size);
> -}
> -
> -static BROTLI_INLINE void FN(Store)(HasherHandle BROTLI_RESTRICT handle,
> - const uint8_t* BROTLI_RESTRICT data, const size_t mask, const size_t ix) {
> - BROTLI_UNUSED(handle);
> - BROTLI_UNUSED(data);
> - BROTLI_UNUSED(mask);
> - BROTLI_UNUSED(ix);
> -}
> -
> -static BROTLI_INLINE void FN(StoreRange)(HasherHandle handle,
> - const uint8_t* data, const size_t mask, const size_t ix_start,
> - const size_t ix_end) {
> - BROTLI_UNUSED(handle);
> - BROTLI_UNUSED(data);
> - BROTLI_UNUSED(mask);
> - BROTLI_UNUSED(ix_start);
> - BROTLI_UNUSED(ix_end);
> -}
> -
> -static BROTLI_INLINE void FN(StitchToPreviousBlock)(HasherHandle handle,
> - size_t num_bytes, size_t position, const uint8_t* ringbuffer,
> - size_t ring_buffer_mask) {
> - /* In this case we must re-initialize the hasher from scratch from the
> - current position. */
> - HashRolling* self = FN(Self)(handle);
> - size_t position_masked;
> - size_t available = num_bytes;
> - if ((position & (JUMP - 1)) != 0) {
> - size_t diff = JUMP - (position & (JUMP - 1));
> - available = (diff > available) ? 0 : (available - diff);
> - position += diff;
> - }
> - position_masked = position & ring_buffer_mask;
> - /* wrapping around ringbuffer not handled. */
> - if (available > ring_buffer_mask - position_masked) {
> - available = ring_buffer_mask - position_masked;
> - }
> -
> - FN(Prepare)(handle, BROTLI_FALSE, available,
> - ringbuffer + (position & ring_buffer_mask));
> - self->next_ix = position;
> - BROTLI_UNUSED(num_bytes);
> -}
> -
> -static BROTLI_INLINE void FN(PrepareDistanceCache)(
> - HasherHandle handle, int* BROTLI_RESTRICT distance_cache) {
> - BROTLI_UNUSED(handle);
> - BROTLI_UNUSED(distance_cache);
> -}
> -
> -static BROTLI_INLINE void FN(FindLongestMatch)(HasherHandle handle,
> - const BrotliEncoderDictionary* dictionary,
> - const uint8_t* BROTLI_RESTRICT data, const size_t ring_buffer_mask,
> - const int* BROTLI_RESTRICT distance_cache, const size_t cur_ix,
> - const size_t max_length, const size_t max_backward, const size_t gap,
> - const size_t max_distance, HasherSearchResult* BROTLI_RESTRICT out) {
> - HashRolling* self = FN(Self)(handle);
> - const size_t cur_ix_masked = cur_ix & ring_buffer_mask;
> - size_t pos = self->next_ix;
> -
> - if ((cur_ix & (JUMP - 1)) != 0) return;
> -
> - /* Not enough lookahead */
> - if (max_length < CHUNKLEN) return;
> -
> - for (pos = self->next_ix; pos <= cur_ix; pos += JUMP) {
> - uint32_t code = self->state & MASK;
> -
> - uint8_t rem = data[pos & ring_buffer_mask];
> - uint8_t add = data[(pos + CHUNKLEN) & ring_buffer_mask];
> - size_t found_ix = FN(kInvalidPos);
> -
> - self->state = FN(HashRollingFunction)(
> - self->state, add, rem, self->factor, self->factor_remove);
> -
> - if (code < NUMBUCKETS) {
> - found_ix = self->table[code];
> - self->table[code] = (uint32_t)pos;
> - if (pos == cur_ix && found_ix != FN(kInvalidPos)) {
> - /* The cast to 32-bit makes backward distances up to 4GB work even
> - if cur_ix is above 4GB, despite using 32-bit values in the table. */
> - size_t backward = (uint32_t)(cur_ix - found_ix);
> - if (backward <= max_backward) {
> - const size_t found_ix_masked = found_ix & ring_buffer_mask;
> - const size_t len =
> FindMatchLengthWithLimit(&data[found_ix_masked],
> - &data[cur_ix_masked],
> - max_length);
> - if (len >= 4 && len > out->len) {
> - score_t score = BackwardReferenceScore(len, backward);
> - if (score > out->score) {
> - out->len = len;
> - out->distance = backward;
> - out->score = score;
> - out->len_code_delta = 0;
> - }
> - }
> - }
> - }
> - }
> - }
> -
> - self->next_ix = cur_ix + JUMP;
> -
> - /* NOTE: this hasher does not search in the dictionary. It is used as
> - backup-hasher, the main hasher already searches in it. */
> - BROTLI_UNUSED(dictionary);
> - BROTLI_UNUSED(distance_cache);
> - BROTLI_UNUSED(gap);
> - BROTLI_UNUSED(max_distance);
> -}
> -
> -#undef HashRolling
> diff --git
> a/BaseTools/Source/C/BrotliCompress/enc/hash_to_binary_tree_inc.h
> b/BaseTools/Source/C/BrotliCompress/enc/hash_to_binary_tree_inc.h
> deleted file mode 100644
> index 09c2642030b0..000000000000
> --- a/BaseTools/Source/C/BrotliCompress/enc/hash_to_binary_tree_inc.h
> +++ /dev/null
> @@ -1,327 +0,0 @@
> -/* NOLINT(build/header_guard) */
> -/* Copyright 2016 Google Inc. All Rights Reserved.
> -
> - Distributed under MIT license.
> - See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
> -*/
> -
> -/* template parameters: FN, BUCKET_BITS, MAX_TREE_COMP_LENGTH,
> - MAX_TREE_SEARCH_DEPTH */
> -
> -/* A (forgetful) hash table where each hash bucket contains a binary tree of
> - sequences whose first 4 bytes share the same hash code.
> - Each sequence is MAX_TREE_COMP_LENGTH long and is identified by its
> starting
> - position in the input data. The binary tree is sorted by the lexicographic
> - order of the sequences, and it is also a max-heap with respect to the
> - starting positions. */
> -
> -#define HashToBinaryTree HASHER()
> -
> -#define BUCKET_SIZE (1 << BUCKET_BITS)
> -
> -static BROTLI_INLINE size_t FN(HashTypeLength)(void) { return 4; }
> -static BROTLI_INLINE size_t FN(StoreLookahead)(void) {
> - return MAX_TREE_COMP_LENGTH;
> -}
> -
> -static uint32_t FN(HashBytes)(const uint8_t* data) {
> - uint32_t h = BROTLI_UNALIGNED_LOAD32LE(data) * kHashMul32;
> - /* The higher bits contain more mixture from the multiplication,
> - so we take our results from there. */
> - return h >> (32 - BUCKET_BITS);
> -}
> -
> -typedef struct HashToBinaryTree {
> - /* The window size minus 1 */
> - size_t window_mask_;
> -
> - /* Hash table that maps the 4-byte hashes of the sequence to the last
> - position where this hash was found, which is the root of the binary
> - tree of sequences that share this hash bucket. */
> - uint32_t buckets_[BUCKET_SIZE];
> -
> - /* A position used to mark a non-existent sequence, i.e. a tree is empty if
> - its root is at invalid_pos_ and a node is a leaf if both its children
> - are at invalid_pos_. */
> - uint32_t invalid_pos_;
> -
> - /* --- Dynamic size members --- */
> -
> - /* The union of the binary trees of each hash bucket. The root of the tree
> - corresponding to a hash is a sequence starting at buckets_[hash] and
> - the left and right children of a sequence starting at pos are
> - forest_[2 * pos] and forest_[2 * pos + 1]. */
> - /* uint32_t forest[2 * num_nodes] */
> -} HashToBinaryTree;
> -
> -static BROTLI_INLINE HashToBinaryTree* FN(Self)(HasherHandle handle) {
> - return (HashToBinaryTree*)&(GetHasherCommon(handle)[1]);
> -}
> -
> -static BROTLI_INLINE uint32_t* FN(Forest)(HashToBinaryTree* self) {
> - return (uint32_t*)(&self[1]);
> -}
> -
> -static void FN(Initialize)(
> - HasherHandle handle, const BrotliEncoderParams* params) {
> - HashToBinaryTree* self = FN(Self)(handle);
> - self->window_mask_ = (1u << params->lgwin) - 1u;
> - self->invalid_pos_ = (uint32_t)(0 - self->window_mask_);
> -}
> -
> -static void FN(Prepare)(HasherHandle handle, BROTLI_BOOL one_shot,
> - size_t input_size, const uint8_t* data) {
> - HashToBinaryTree* self = FN(Self)(handle);
> - uint32_t invalid_pos = self->invalid_pos_;
> - uint32_t i;
> - BROTLI_UNUSED(data);
> - BROTLI_UNUSED(one_shot);
> - BROTLI_UNUSED(input_size);
> - for (i = 0; i < BUCKET_SIZE; i++) {
> - self->buckets_[i] = invalid_pos;
> - }
> -}
> -
> -static BROTLI_INLINE size_t FN(HashMemAllocInBytes)(
> - const BrotliEncoderParams* params, BROTLI_BOOL one_shot,
> - size_t input_size) {
> - size_t num_nodes = (size_t)1 << params->lgwin;
> - if (one_shot && input_size < num_nodes) {
> - num_nodes = input_size;
> - }
> - return sizeof(HashToBinaryTree) + 2 * sizeof(uint32_t) * num_nodes;
> -}
> -
> -static BROTLI_INLINE size_t FN(LeftChildIndex)(HashToBinaryTree* self,
> - const size_t pos) {
> - return 2 * (pos & self->window_mask_);
> -}
> -
> -static BROTLI_INLINE size_t FN(RightChildIndex)(HashToBinaryTree* self,
> - const size_t pos) {
> - return 2 * (pos & self->window_mask_) + 1;
> -}
> -
> -/* Stores the hash of the next 4 bytes and in a single tree-traversal, the
> - hash bucket's binary tree is searched for matches and is re-rooted at the
> - current position.
> -
> - If less than MAX_TREE_COMP_LENGTH data is available, the hash bucket
> of the
> - current position is searched for matches, but the state of the hash table
> - is not changed, since we can not know the final sorting order of the
> - current (incomplete) sequence.
> -
> - This function must be called with increasing cur_ix positions. */
> -static BROTLI_INLINE BackwardMatch* FN(StoreAndFindMatches)(
> - HashToBinaryTree* self, const uint8_t* const BROTLI_RESTRICT data,
> - const size_t cur_ix, const size_t ring_buffer_mask, const size_t
> max_length,
> - const size_t max_backward, size_t* const BROTLI_RESTRICT best_len,
> - BackwardMatch* BROTLI_RESTRICT matches) {
> - const size_t cur_ix_masked = cur_ix & ring_buffer_mask;
> - const size_t max_comp_len =
> - BROTLI_MIN(size_t, max_length, MAX_TREE_COMP_LENGTH);
> - const BROTLI_BOOL should_reroot_tree =
> - TO_BROTLI_BOOL(max_length >= MAX_TREE_COMP_LENGTH);
> - const uint32_t key = FN(HashBytes)(&data[cur_ix_masked]);
> - uint32_t* forest = FN(Forest)(self);
> - size_t prev_ix = self->buckets_[key];
> - /* The forest index of the rightmost node of the left subtree of the new
> - root, updated as we traverse and re-root the tree of the hash bucket. */
> - size_t node_left = FN(LeftChildIndex)(self, cur_ix);
> - /* The forest index of the leftmost node of the right subtree of the new
> - root, updated as we traverse and re-root the tree of the hash bucket. */
> - size_t node_right = FN(RightChildIndex)(self, cur_ix);
> - /* The match length of the rightmost node of the left subtree of the new
> - root, updated as we traverse and re-root the tree of the hash bucket. */
> - size_t best_len_left = 0;
> - /* The match length of the leftmost node of the right subtree of the new
> - root, updated as we traverse and re-root the tree of the hash bucket. */
> - size_t best_len_right = 0;
> - size_t depth_remaining;
> - if (should_reroot_tree) {
> - self->buckets_[key] = (uint32_t)cur_ix;
> - }
> - for (depth_remaining = MAX_TREE_SEARCH_DEPTH; ; --depth_remaining)
> {
> - const size_t backward = cur_ix - prev_ix;
> - const size_t prev_ix_masked = prev_ix & ring_buffer_mask;
> - if (backward == 0 || backward > max_backward || depth_remaining == 0)
> {
> - if (should_reroot_tree) {
> - forest[node_left] = self->invalid_pos_;
> - forest[node_right] = self->invalid_pos_;
> - }
> - break;
> - }
> - {
> - const size_t cur_len = BROTLI_MIN(size_t, best_len_left, best_len_right);
> - size_t len;
> - BROTLI_DCHECK(cur_len <= MAX_TREE_COMP_LENGTH);
> - len = cur_len +
> - FindMatchLengthWithLimit(&data[cur_ix_masked + cur_len],
> - &data[prev_ix_masked + cur_len],
> - max_length - cur_len);
> - BROTLI_DCHECK(
> - 0 == memcmp(&data[cur_ix_masked], &data[prev_ix_masked], len));
> - if (matches && len > *best_len) {
> - *best_len = len;
> - InitBackwardMatch(matches++, backward, len);
> - }
> - if (len >= max_comp_len) {
> - if (should_reroot_tree) {
> - forest[node_left] = forest[FN(LeftChildIndex)(self, prev_ix)];
> - forest[node_right] = forest[FN(RightChildIndex)(self, prev_ix)];
> - }
> - break;
> - }
> - if (data[cur_ix_masked + len] > data[prev_ix_masked + len]) {
> - best_len_left = len;
> - if (should_reroot_tree) {
> - forest[node_left] = (uint32_t)prev_ix;
> - }
> - node_left = FN(RightChildIndex)(self, prev_ix);
> - prev_ix = forest[node_left];
> - } else {
> - best_len_right = len;
> - if (should_reroot_tree) {
> - forest[node_right] = (uint32_t)prev_ix;
> - }
> - node_right = FN(LeftChildIndex)(self, prev_ix);
> - prev_ix = forest[node_right];
> - }
> - }
> - }
> - return matches;
> -}
> -
> -/* Finds all backward matches of &data[cur_ix & ring_buffer_mask] up to
> the
> - length of max_length and stores the position cur_ix in the hash table.
> -
> - Sets *num_matches to the number of matches found, and stores the
> found
> - matches in matches[0] to matches[*num_matches - 1]. The matches will
> be
> - sorted by strictly increasing length and (non-strictly) increasing
> - distance. */
> -static BROTLI_INLINE size_t FN(FindAllMatches)(HasherHandle handle,
> - const BrotliEncoderDictionary* dictionary, const uint8_t* data,
> - const size_t ring_buffer_mask, const size_t cur_ix,
> - const size_t max_length, const size_t max_backward, const size_t gap,
> - const BrotliEncoderParams* params, BackwardMatch* matches) {
> - BackwardMatch* const orig_matches = matches;
> - const size_t cur_ix_masked = cur_ix & ring_buffer_mask;
> - size_t best_len = 1;
> - const size_t short_match_max_backward =
> - params->quality != HQ_ZOPFLIFICATION_QUALITY ? 16 : 64;
> - size_t stop = cur_ix - short_match_max_backward;
> - uint32_t dict_matches[BROTLI_MAX_STATIC_DICTIONARY_MATCH_LEN +
> 1];
> - size_t i;
> - if (cur_ix < short_match_max_backward) { stop = 0; }
> - for (i = cur_ix - 1; i > stop && best_len <= 2; --i) {
> - size_t prev_ix = i;
> - const size_t backward = cur_ix - prev_ix;
> - if (BROTLI_PREDICT_FALSE(backward > max_backward)) {
> - break;
> - }
> - prev_ix &= ring_buffer_mask;
> - if (data[cur_ix_masked] != data[prev_ix] ||
> - data[cur_ix_masked + 1] != data[prev_ix + 1]) {
> - continue;
> - }
> - {
> - const size_t len =
> - FindMatchLengthWithLimit(&data[prev_ix], &data[cur_ix_masked],
> - max_length);
> - if (len > best_len) {
> - best_len = len;
> - InitBackwardMatch(matches++, backward, len);
> - }
> - }
> - }
> - if (best_len < max_length) {
> - matches = FN(StoreAndFindMatches)(FN(Self)(handle), data, cur_ix,
> - ring_buffer_mask, max_length, max_backward, &best_len, matches);
> - }
> - for (i = 0; i <= BROTLI_MAX_STATIC_DICTIONARY_MATCH_LEN; ++i) {
> - dict_matches[i] = kInvalidMatch;
> - }
> - {
> - size_t minlen = BROTLI_MAX(size_t, 4, best_len + 1);
> - if (BrotliFindAllStaticDictionaryMatches(dictionary,
> - &data[cur_ix_masked], minlen, max_length, &dict_matches[0])) {
> - size_t maxlen = BROTLI_MIN(
> - size_t, BROTLI_MAX_STATIC_DICTIONARY_MATCH_LEN, max_length);
> - size_t l;
> - for (l = minlen; l <= maxlen; ++l) {
> - uint32_t dict_id = dict_matches[l];
> - if (dict_id < kInvalidMatch) {
> - size_t distance = max_backward + gap + (dict_id >> 5) + 1;
> - if (distance <= params->dist.max_distance) {
> - InitDictionaryBackwardMatch(matches++, distance, l, dict_id & 31);
> - }
> - }
> - }
> - }
> - }
> - return (size_t)(matches - orig_matches);
> -}
> -
> -/* Stores the hash of the next 4 bytes and re-roots the binary tree at the
> - current sequence, without returning any matches.
> - REQUIRES: ix + MAX_TREE_COMP_LENGTH <= end-of-current-block */
> -static BROTLI_INLINE void FN(Store)(HasherHandle handle, const uint8_t*
> data,
> - const size_t mask, const size_t ix) {
> - HashToBinaryTree* self = FN(Self)(handle);
> - /* Maximum distance is window size - 16, see section 9.1. of the spec. */
> - const size_t max_backward = self->window_mask_ -
> BROTLI_WINDOW_GAP + 1;
> - FN(StoreAndFindMatches)(self, data, ix, mask, MAX_TREE_COMP_LENGTH,
> - max_backward, NULL, NULL);
> -}
> -
> -static BROTLI_INLINE void FN(StoreRange)(HasherHandle handle,
> - const uint8_t* data, const size_t mask, const size_t ix_start,
> - const size_t ix_end) {
> - size_t i = ix_start;
> - size_t j = ix_start;
> - if (ix_start + 63 <= ix_end) {
> - i = ix_end - 63;
> - }
> - if (ix_start + 512 <= i) {
> - for (; j < i; j += 8) {
> - FN(Store)(handle, data, mask, j);
> - }
> - }
> - for (; i < ix_end; ++i) {
> - FN(Store)(handle, data, mask, i);
> - }
> -}
> -
> -static BROTLI_INLINE void FN(StitchToPreviousBlock)(HasherHandle handle,
> - size_t num_bytes, size_t position, const uint8_t* ringbuffer,
> - size_t ringbuffer_mask) {
> - HashToBinaryTree* self = FN(Self)(handle);
> - if (num_bytes >= FN(HashTypeLength)() - 1 &&
> - position >= MAX_TREE_COMP_LENGTH) {
> - /* Store the last `MAX_TREE_COMP_LENGTH - 1` positions in the hasher.
> - These could not be calculated before, since they require knowledge
> - of both the previous and the current block. */
> - const size_t i_start = position - MAX_TREE_COMP_LENGTH + 1;
> - const size_t i_end = BROTLI_MIN(size_t, position, i_start + num_bytes);
> - size_t i;
> - for (i = i_start; i < i_end; ++i) {
> - /* Maximum distance is window size - 16, see section 9.1. of the spec.
> - Furthermore, we have to make sure that we don't look further back
> - from the start of the next block than the window size, otherwise we
> - could access already overwritten areas of the ring-buffer. */
> - const size_t max_backward =
> - self->window_mask_ - BROTLI_MAX(size_t,
> - BROTLI_WINDOW_GAP - 1,
> - position - i);
> - /* We know that i + MAX_TREE_COMP_LENGTH <= position +
> num_bytes, i.e. the
> - end of the current block and that we have at least
> - MAX_TREE_COMP_LENGTH tail in the ring-buffer. */
> - FN(StoreAndFindMatches)(self, ringbuffer, i, ringbuffer_mask,
> - MAX_TREE_COMP_LENGTH, max_backward, NULL, NULL);
> - }
> - }
> -}
> -
> -#undef BUCKET_SIZE
> -
> -#undef HashToBinaryTree
> diff --git a/BaseTools/Source/C/BrotliCompress/enc/histogram.h
> b/BaseTools/Source/C/BrotliCompress/enc/histogram.h
> deleted file mode 100644
> index c08a4cac2bfa..000000000000
> --- a/BaseTools/Source/C/BrotliCompress/enc/histogram.h
> +++ /dev/null
> @@ -1,63 +0,0 @@
> -/* Copyright 2013 Google Inc. All Rights Reserved.
> -
> - Distributed under MIT license.
> - See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
> -*/
> -
> -/* Models the histograms of literals, commands and distance codes. */
> -
> -#ifndef BROTLI_ENC_HISTOGRAM_H_
> -#define BROTLI_ENC_HISTOGRAM_H_
> -
> -#include <string.h> /* memset */
> -
> -#include "../common/constants.h"
> -#include "../common/context.h"
> -#include "../common/platform.h"
> -#include <brotli/types.h>
> -#include "./block_splitter.h"
> -#include "./command.h"
> -
> -#if defined(__cplusplus) || defined(c_plusplus)
> -extern "C" {
> -#endif
> -
> -/* The distance symbols effectively used by "Large Window Brotli" (32-bit).
> */
> -#define BROTLI_NUM_HISTOGRAM_DISTANCE_SYMBOLS 544
> -
> -#define FN(X) X ## Literal
> -#define DATA_SIZE BROTLI_NUM_LITERAL_SYMBOLS
> -#define DataType uint8_t
> -#include "./histogram_inc.h" /* NOLINT(build/include) */
> -#undef DataType
> -#undef DATA_SIZE
> -#undef FN
> -
> -#define FN(X) X ## Command
> -#define DataType uint16_t
> -#define DATA_SIZE BROTLI_NUM_COMMAND_SYMBOLS
> -#include "./histogram_inc.h" /* NOLINT(build/include) */
> -#undef DATA_SIZE
> -#undef FN
> -
> -#define FN(X) X ## Distance
> -#define DATA_SIZE BROTLI_NUM_HISTOGRAM_DISTANCE_SYMBOLS
> -#include "./histogram_inc.h" /* NOLINT(build/include) */
> -#undef DataType
> -#undef DATA_SIZE
> -#undef FN
> -
> -BROTLI_INTERNAL void BrotliBuildHistogramsWithContext(
> - const Command* cmds, const size_t num_commands,
> - const BlockSplit* literal_split, const BlockSplit* insert_and_copy_split,
> - const BlockSplit* dist_split, const uint8_t* ringbuffer, size_t pos,
> - size_t mask, uint8_t prev_byte, uint8_t prev_byte2,
> - const ContextType* context_modes, HistogramLiteral* literal_histograms,
> - HistogramCommand* insert_and_copy_histograms,
> - HistogramDistance* copy_dist_histograms);
> -
> -#if defined(__cplusplus) || defined(c_plusplus)
> -} /* extern "C" */
> -#endif
> -
> -#endif /* BROTLI_ENC_HISTOGRAM_H_ */
> diff --git a/BaseTools/Source/C/BrotliCompress/enc/histogram_inc.h
> b/BaseTools/Source/C/BrotliCompress/enc/histogram_inc.h
> deleted file mode 100644
> index a9d2e7018d60..000000000000
> --- a/BaseTools/Source/C/BrotliCompress/enc/histogram_inc.h
> +++ /dev/null
> @@ -1,51 +0,0 @@
> -/* NOLINT(build/header_guard) */
> -/* Copyright 2013 Google Inc. All Rights Reserved.
> -
> - Distributed under MIT license.
> - See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
> -*/
> -
> -/* template parameters: Histogram, DATA_SIZE, DataType */
> -
> -/* A simple container for histograms of data in blocks. */
> -
> -typedef struct FN(Histogram) {
> - uint32_t data_[DATA_SIZE];
> - size_t total_count_;
> - double bit_cost_;
> -} FN(Histogram);
> -
> -static BROTLI_INLINE void FN(HistogramClear)(FN(Histogram)* self) {
> - memset(self->data_, 0, sizeof(self->data_));
> - self->total_count_ = 0;
> - self->bit_cost_ = HUGE_VAL;
> -}
> -
> -static BROTLI_INLINE void FN(ClearHistograms)(
> - FN(Histogram)* array, size_t length) {
> - size_t i;
> - for (i = 0; i < length; ++i) FN(HistogramClear)(array + i);
> -}
> -
> -static BROTLI_INLINE void FN(HistogramAdd)(FN(Histogram)* self, size_t val)
> {
> - ++self->data_[val];
> - ++self->total_count_;
> -}
> -
> -static BROTLI_INLINE void FN(HistogramAddVector)(FN(Histogram)* self,
> - const DataType* p, size_t n) {
> - self->total_count_ += n;
> - n += 1;
> - while (--n) ++self->data_[*p++];
> -}
> -
> -static BROTLI_INLINE void FN(HistogramAddHistogram)(FN(Histogram)* self,
> - const FN(Histogram)* v) {
> - size_t i;
> - self->total_count_ += v->total_count_;
> - for (i = 0; i < DATA_SIZE; ++i) {
> - self->data_[i] += v->data_[i];
> - }
> -}
> -
> -static BROTLI_INLINE size_t FN(HistogramDataSize)(void) { return
> DATA_SIZE; }
> diff --git a/BaseTools/Source/C/BrotliCompress/enc/literal_cost.h
> b/BaseTools/Source/C/BrotliCompress/enc/literal_cost.h
> deleted file mode 100644
> index 4891a26d5012..000000000000
> --- a/BaseTools/Source/C/BrotliCompress/enc/literal_cost.h
> +++ /dev/null
> @@ -1,30 +0,0 @@
> -/* Copyright 2013 Google Inc. All Rights Reserved.
> -
> - Distributed under MIT license.
> - See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
> -*/
> -
> -/* Literal cost model to allow backward reference replacement to be
> efficient.
> -*/
> -
> -#ifndef BROTLI_ENC_LITERAL_COST_H_
> -#define BROTLI_ENC_LITERAL_COST_H_
> -
> -#include "../common/platform.h"
> -#include <brotli/types.h>
> -
> -#if defined(__cplusplus) || defined(c_plusplus)
> -extern "C" {
> -#endif
> -
> -/* Estimates how many bits the literals in the interval [pos, pos + len) in the
> - ring-buffer (data, mask) will take entropy coded and writes these
> estimates
> - to the cost[0..len) array. */
> -BROTLI_INTERNAL void BrotliEstimateBitCostsForLiterals(
> - size_t pos, size_t len, size_t mask, const uint8_t* data, float* cost);
> -
> -#if defined(__cplusplus) || defined(c_plusplus)
> -} /* extern "C" */
> -#endif
> -
> -#endif /* BROTLI_ENC_LITERAL_COST_H_ */
> diff --git a/BaseTools/Source/C/BrotliCompress/enc/memory.h
> b/BaseTools/Source/C/BrotliCompress/enc/memory.h
> deleted file mode 100644
> index 2bd4d0c872a6..000000000000
> --- a/BaseTools/Source/C/BrotliCompress/enc/memory.h
> +++ /dev/null
> @@ -1,102 +0,0 @@
> -/* Copyright 2016 Google Inc. All Rights Reserved.
> -
> - Distributed under MIT license.
> - See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
> -*/
> -
> -/* Macros for memory management. */
> -
> -#ifndef BROTLI_ENC_MEMORY_H_
> -#define BROTLI_ENC_MEMORY_H_
> -
> -#include <string.h> /* memcpy */
> -
> -#include "../common/platform.h"
> -#include <brotli/types.h>
> -
> -#if defined(__cplusplus) || defined(c_plusplus)
> -extern "C" {
> -#endif
> -
> -#if !defined(BROTLI_ENCODER_CLEANUP_ON_OOM) && \
> - !defined(BROTLI_ENCODER_EXIT_ON_OOM)
> -#define BROTLI_ENCODER_EXIT_ON_OOM
> -#endif
> -
> -typedef struct MemoryManager {
> - brotli_alloc_func alloc_func;
> - brotli_free_func free_func;
> - void* opaque;
> -#if !defined(BROTLI_ENCODER_EXIT_ON_OOM)
> - BROTLI_BOOL is_oom;
> - size_t perm_allocated;
> - size_t new_allocated;
> - size_t new_freed;
> - void* pointers[256];
> -#endif /* BROTLI_ENCODER_EXIT_ON_OOM */
> -} MemoryManager;
> -
> -BROTLI_INTERNAL void BrotliInitMemoryManager(
> - MemoryManager* m, brotli_alloc_func alloc_func, brotli_free_func
> free_func,
> - void* opaque);
> -
> -BROTLI_INTERNAL void* BrotliAllocate(MemoryManager* m, size_t n);
> -#define BROTLI_ALLOC(M, T, N) \
> - ((N) > 0 ? ((T*)BrotliAllocate((M), (N) * sizeof(T))) : NULL)
> -
> -BROTLI_INTERNAL void BrotliFree(MemoryManager* m, void* p);
> -#define BROTLI_FREE(M, P) { \
> - BrotliFree((M), (P)); \
> - P = NULL; \
> -}
> -
> -#if defined(BROTLI_ENCODER_EXIT_ON_OOM)
> -#define BROTLI_IS_OOM(M) (!!0)
> -#else /* BROTLI_ENCODER_EXIT_ON_OOM */
> -#define BROTLI_IS_OOM(M) (!!(M)->is_oom)
> -#endif /* BROTLI_ENCODER_EXIT_ON_OOM */
> -
> -BROTLI_INTERNAL void BrotliWipeOutMemoryManager(MemoryManager*
> m);
> -
> -/*
> -Dynamically grows array capacity to at least the requested size
> -M: MemoryManager
> -T: data type
> -A: array
> -C: capacity
> -R: requested size
> -*/
> -#define BROTLI_ENSURE_CAPACITY(M, T, A, C, R) { \
> - if (C < (R)) { \
> - size_t _new_size = (C == 0) ? (R) : C; \
> - T* new_array; \
> - while (_new_size < (R)) _new_size *= 2; \
> - new_array = BROTLI_ALLOC((M), T, _new_size); \
> - if (!BROTLI_IS_OOM(M) && C != 0) \
> - memcpy(new_array, A, C * sizeof(T)); \
> - BROTLI_FREE((M), A); \
> - A = new_array; \
> - C = _new_size; \
> - } \
> -}
> -
> -/*
> -Appends value and dynamically grows array capacity when needed
> -M: MemoryManager
> -T: data type
> -A: array
> -C: array capacity
> -S: array size
> -V: value to append
> -*/
> -#define BROTLI_ENSURE_CAPACITY_APPEND(M, T, A, C, S, V) { \
> - (S)++; \
> - BROTLI_ENSURE_CAPACITY(M, T, A, C, S); \
> - A[(S) - 1] = (V); \
> -}
> -
> -#if defined(__cplusplus) || defined(c_plusplus)
> -} /* extern "C" */
> -#endif
> -
> -#endif /* BROTLI_ENC_MEMORY_H_ */
> diff --git a/BaseTools/Source/C/BrotliCompress/enc/metablock.h
> b/BaseTools/Source/C/BrotliCompress/enc/metablock.h
> deleted file mode 100644
> index e35c98554f7a..000000000000
> --- a/BaseTools/Source/C/BrotliCompress/enc/metablock.h
> +++ /dev/null
> @@ -1,105 +0,0 @@
> -/* Copyright 2015 Google Inc. All Rights Reserved.
> -
> - Distributed under MIT license.
> - See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
> -*/
> -
> -/* Algorithms for distributing the literals and commands of a metablock
> between
> - block types and contexts. */
> -
> -#ifndef BROTLI_ENC_METABLOCK_H_
> -#define BROTLI_ENC_METABLOCK_H_
> -
> -#include "../common/context.h"
> -#include "../common/platform.h"
> -#include <brotli/types.h>
> -#include "./block_splitter.h"
> -#include "./command.h"
> -#include "./histogram.h"
> -#include "./memory.h"
> -#include "./quality.h"
> -
> -#if defined(__cplusplus) || defined(c_plusplus)
> -extern "C" {
> -#endif
> -
> -typedef struct MetaBlockSplit {
> - BlockSplit literal_split;
> - BlockSplit command_split;
> - BlockSplit distance_split;
> - uint32_t* literal_context_map;
> - size_t literal_context_map_size;
> - uint32_t* distance_context_map;
> - size_t distance_context_map_size;
> - HistogramLiteral* literal_histograms;
> - size_t literal_histograms_size;
> - HistogramCommand* command_histograms;
> - size_t command_histograms_size;
> - HistogramDistance* distance_histograms;
> - size_t distance_histograms_size;
> -} MetaBlockSplit;
> -
> -static BROTLI_INLINE void InitMetaBlockSplit(MetaBlockSplit* mb) {
> - BrotliInitBlockSplit(&mb->literal_split);
> - BrotliInitBlockSplit(&mb->command_split);
> - BrotliInitBlockSplit(&mb->distance_split);
> - mb->literal_context_map = 0;
> - mb->literal_context_map_size = 0;
> - mb->distance_context_map = 0;
> - mb->distance_context_map_size = 0;
> - mb->literal_histograms = 0;
> - mb->literal_histograms_size = 0;
> - mb->command_histograms = 0;
> - mb->command_histograms_size = 0;
> - mb->distance_histograms = 0;
> - mb->distance_histograms_size = 0;
> -}
> -
> -static BROTLI_INLINE void DestroyMetaBlockSplit(
> - MemoryManager* m, MetaBlockSplit* mb) {
> - BrotliDestroyBlockSplit(m, &mb->literal_split);
> - BrotliDestroyBlockSplit(m, &mb->command_split);
> - BrotliDestroyBlockSplit(m, &mb->distance_split);
> - BROTLI_FREE(m, mb->literal_context_map);
> - BROTLI_FREE(m, mb->distance_context_map);
> - BROTLI_FREE(m, mb->literal_histograms);
> - BROTLI_FREE(m, mb->command_histograms);
> - BROTLI_FREE(m, mb->distance_histograms);
> -}
> -
> -/* Uses the slow shortest-path block splitter and does context clustering.
> - The distance parameters are dynamically selected based on the commands
> - which get recomputed under the new distance parameters. The new
> distance
> - parameters are stored into *params. */
> -BROTLI_INTERNAL void BrotliBuildMetaBlock(MemoryManager* m,
> - const uint8_t* ringbuffer,
> - const size_t pos,
> - const size_t mask,
> - BrotliEncoderParams* params,
> - uint8_t prev_byte,
> - uint8_t prev_byte2,
> - Command* cmds,
> - size_t num_commands,
> - ContextType literal_context_mode,
> - MetaBlockSplit* mb);
> -
> -/* Uses a fast greedy block splitter that tries to merge current block with the
> - last or the second last block and uses a static context clustering which
> - is the same for all block types. */
> -BROTLI_INTERNAL void BrotliBuildMetaBlockGreedy(
> - MemoryManager* m, const uint8_t* ringbuffer, size_t pos, size_t mask,
> - uint8_t prev_byte, uint8_t prev_byte2, ContextLut literal_context_lut,
> - size_t num_contexts, const uint32_t* static_context_map,
> - const Command* commands, size_t n_commands, MetaBlockSplit* mb);
> -
> -BROTLI_INTERNAL void BrotliOptimizeHistograms(uint32_t
> num_distance_codes,
> - MetaBlockSplit* mb);
> -
> -BROTLI_INTERNAL void BrotliInitDistanceParams(BrotliEncoderParams*
> params,
> - uint32_t npostfix, uint32_t ndirect);
> -
> -#if defined(__cplusplus) || defined(c_plusplus)
> -} /* extern "C" */
> -#endif
> -
> -#endif /* BROTLI_ENC_METABLOCK_H_ */
> diff --git a/BaseTools/Source/C/BrotliCompress/enc/metablock_inc.h
> b/BaseTools/Source/C/BrotliCompress/enc/metablock_inc.h
> deleted file mode 100644
> index c6b1c50b32ce..000000000000
> --- a/BaseTools/Source/C/BrotliCompress/enc/metablock_inc.h
> +++ /dev/null
> @@ -1,183 +0,0 @@
> -/* NOLINT(build/header_guard) */
> -/* Copyright 2015 Google Inc. All Rights Reserved.
> -
> - Distributed under MIT license.
> - See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
> -*/
> -
> -/* template parameters: FN */
> -
> -#define HistogramType FN(Histogram)
> -
> -/* Greedy block splitter for one block category (literal, command or
> distance).
> -*/
> -typedef struct FN(BlockSplitter) {
> - /* Alphabet size of particular block category. */
> - size_t alphabet_size_;
> - /* We collect at least this many symbols for each block. */
> - size_t min_block_size_;
> - /* We merge histograms A and B if
> - entropy(A+B) < entropy(A) + entropy(B) + split_threshold_,
> - where A is the current histogram and B is the histogram of the last or the
> - second last block type. */
> - double split_threshold_;
> -
> - size_t num_blocks_;
> - BlockSplit* split_; /* not owned */
> - HistogramType* histograms_; /* not owned */
> - size_t* histograms_size_; /* not owned */
> -
> - /* The number of symbols that we want to collect before deciding on
> whether
> - or not to merge the block with a previous one or emit a new block. */
> - size_t target_block_size_;
> - /* The number of symbols in the current histogram. */
> - size_t block_size_;
> - /* Offset of the current histogram. */
> - size_t curr_histogram_ix_;
> - /* Offset of the histograms of the previous two block types. */
> - size_t last_histogram_ix_[2];
> - /* Entropy of the previous two block types. */
> - double last_entropy_[2];
> - /* The number of times we merged the current block with the last one. */
> - size_t merge_last_count_;
> -} FN(BlockSplitter);
> -
> -static void FN(InitBlockSplitter)(
> - MemoryManager* m, FN(BlockSplitter)* self, size_t alphabet_size,
> - size_t min_block_size, double split_threshold, size_t num_symbols,
> - BlockSplit* split, HistogramType** histograms, size_t* histograms_size) {
> - size_t max_num_blocks = num_symbols / min_block_size + 1;
> - /* We have to allocate one more histogram than the maximum number of
> block
> - types for the current histogram when the meta-block is too big. */
> - size_t max_num_types =
> - BROTLI_MIN(size_t, max_num_blocks,
> BROTLI_MAX_NUMBER_OF_BLOCK_TYPES + 1);
> - self->alphabet_size_ = alphabet_size;
> - self->min_block_size_ = min_block_size;
> - self->split_threshold_ = split_threshold;
> - self->num_blocks_ = 0;
> - self->split_ = split;
> - self->histograms_size_ = histograms_size;
> - self->target_block_size_ = min_block_size;
> - self->block_size_ = 0;
> - self->curr_histogram_ix_ = 0;
> - self->merge_last_count_ = 0;
> - BROTLI_ENSURE_CAPACITY(m, uint8_t,
> - split->types, split->types_alloc_size, max_num_blocks);
> - BROTLI_ENSURE_CAPACITY(m, uint32_t,
> - split->lengths, split->lengths_alloc_size, max_num_blocks);
> - if (BROTLI_IS_OOM(m)) return;
> - self->split_->num_blocks = max_num_blocks;
> - BROTLI_DCHECK(*histograms == 0);
> - *histograms_size = max_num_types;
> - *histograms = BROTLI_ALLOC(m, HistogramType, *histograms_size);
> - self->histograms_ = *histograms;
> - if (BROTLI_IS_OOM(m)) return;
> - /* Clear only current histogram. */
> - FN(HistogramClear)(&self->histograms_[0]);
> - self->last_histogram_ix_[0] = self->last_histogram_ix_[1] = 0;
> -}
> -
> -/* Does either of three things:
> - (1) emits the current block with a new block type;
> - (2) emits the current block with the type of the second last block;
> - (3) merges the current block with the last block. */
> -static void FN(BlockSplitterFinishBlock)(
> - FN(BlockSplitter)* self, BROTLI_BOOL is_final) {
> - BlockSplit* split = self->split_;
> - double* last_entropy = self->last_entropy_;
> - HistogramType* histograms = self->histograms_;
> - self->block_size_ =
> - BROTLI_MAX(size_t, self->block_size_, self->min_block_size_);
> - if (self->num_blocks_ == 0) {
> - /* Create first block. */
> - split->lengths[0] = (uint32_t)self->block_size_;
> - split->types[0] = 0;
> - last_entropy[0] =
> - BitsEntropy(histograms[0].data_, self->alphabet_size_);
> - last_entropy[1] = last_entropy[0];
> - ++self->num_blocks_;
> - ++split->num_types;
> - ++self->curr_histogram_ix_;
> - if (self->curr_histogram_ix_ < *self->histograms_size_)
> - FN(HistogramClear)(&histograms[self->curr_histogram_ix_]);
> - self->block_size_ = 0;
> - } else if (self->block_size_ > 0) {
> - double entropy = BitsEntropy(histograms[self-
> >curr_histogram_ix_].data_,
> - self->alphabet_size_);
> - HistogramType combined_histo[2];
> - double combined_entropy[2];
> - double diff[2];
> - size_t j;
> - for (j = 0; j < 2; ++j) {
> - size_t last_histogram_ix = self->last_histogram_ix_[j];
> - combined_histo[j] = histograms[self->curr_histogram_ix_];
> - FN(HistogramAddHistogram)(&combined_histo[j],
> - &histograms[last_histogram_ix]);
> - combined_entropy[j] = BitsEntropy(
> - &combined_histo[j].data_[0], self->alphabet_size_);
> - diff[j] = combined_entropy[j] - entropy - last_entropy[j];
> - }
> -
> - if (split->num_types < BROTLI_MAX_NUMBER_OF_BLOCK_TYPES &&
> - diff[0] > self->split_threshold_ &&
> - diff[1] > self->split_threshold_) {
> - /* Create new block. */
> - split->lengths[self->num_blocks_] = (uint32_t)self->block_size_;
> - split->types[self->num_blocks_] = (uint8_t)split->num_types;
> - self->last_histogram_ix_[1] = self->last_histogram_ix_[0];
> - self->last_histogram_ix_[0] = (uint8_t)split->num_types;
> - last_entropy[1] = last_entropy[0];
> - last_entropy[0] = entropy;
> - ++self->num_blocks_;
> - ++split->num_types;
> - ++self->curr_histogram_ix_;
> - if (self->curr_histogram_ix_ < *self->histograms_size_)
> - FN(HistogramClear)(&histograms[self->curr_histogram_ix_]);
> - self->block_size_ = 0;
> - self->merge_last_count_ = 0;
> - self->target_block_size_ = self->min_block_size_;
> - } else if (diff[1] < diff[0] - 20.0) {
> - /* Combine this block with second last block. */
> - split->lengths[self->num_blocks_] = (uint32_t)self->block_size_;
> - split->types[self->num_blocks_] = split->types[self->num_blocks_ - 2];
> - BROTLI_SWAP(size_t, self->last_histogram_ix_, 0, 1);
> - histograms[self->last_histogram_ix_[0]] = combined_histo[1];
> - last_entropy[1] = last_entropy[0];
> - last_entropy[0] = combined_entropy[1];
> - ++self->num_blocks_;
> - self->block_size_ = 0;
> - FN(HistogramClear)(&histograms[self->curr_histogram_ix_]);
> - self->merge_last_count_ = 0;
> - self->target_block_size_ = self->min_block_size_;
> - } else {
> - /* Combine this block with last block. */
> - split->lengths[self->num_blocks_ - 1] += (uint32_t)self->block_size_;
> - histograms[self->last_histogram_ix_[0]] = combined_histo[0];
> - last_entropy[0] = combined_entropy[0];
> - if (split->num_types == 1) {
> - last_entropy[1] = last_entropy[0];
> - }
> - self->block_size_ = 0;
> - FN(HistogramClear)(&histograms[self->curr_histogram_ix_]);
> - if (++self->merge_last_count_ > 1) {
> - self->target_block_size_ += self->min_block_size_;
> - }
> - }
> - }
> - if (is_final) {
> - *self->histograms_size_ = split->num_types;
> - split->num_blocks = self->num_blocks_;
> - }
> -}
> -
> -/* Adds the next symbol to the current histogram. When the current
> histogram
> - reaches the target size, decides on merging the block. */
> -static void FN(BlockSplitterAddSymbol)(FN(BlockSplitter)* self, size_t
> symbol) {
> - FN(HistogramAdd)(&self->histograms_[self->curr_histogram_ix_], symbol);
> - ++self->block_size_;
> - if (self->block_size_ == self->target_block_size_) {
> - FN(BlockSplitterFinishBlock)(self, /* is_final = */ BROTLI_FALSE);
> - }
> -}
> -
> -#undef HistogramType
> diff --git a/BaseTools/Source/C/BrotliCompress/enc/params.h
> b/BaseTools/Source/C/BrotliCompress/enc/params.h
> deleted file mode 100644
> index 96fed343ccbd..000000000000
> --- a/BaseTools/Source/C/BrotliCompress/enc/params.h
> +++ /dev/null
> @@ -1,44 +0,0 @@
> -/* Copyright 2017 Google Inc. All Rights Reserved.
> -
> - Distributed under MIT license.
> - See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
> -*/
> -
> -/* Parameters for the Brotli encoder with chosen quality levels. */
> -
> -#ifndef BROTLI_ENC_PARAMS_H_
> -#define BROTLI_ENC_PARAMS_H_
> -
> -#include <brotli/encode.h>
> -#include "./encoder_dict.h"
> -
> -typedef struct BrotliHasherParams {
> - int type;
> - int bucket_bits;
> - int block_bits;
> - int hash_len;
> - int num_last_distances_to_check;
> -} BrotliHasherParams;
> -
> -typedef struct BrotliDistanceParams {
> - uint32_t distance_postfix_bits;
> - uint32_t num_direct_distance_codes;
> - uint32_t alphabet_size;
> - size_t max_distance;
> -} BrotliDistanceParams;
> -
> -/* Encoding parameters */
> -typedef struct BrotliEncoderParams {
> - BrotliEncoderMode mode;
> - int quality;
> - int lgwin;
> - int lgblock;
> - size_t size_hint;
> - BROTLI_BOOL disable_literal_context_modeling;
> - BROTLI_BOOL large_window;
> - BrotliHasherParams hasher;
> - BrotliDistanceParams dist;
> - BrotliEncoderDictionary dictionary;
> -} BrotliEncoderParams;
> -
> -#endif /* BROTLI_ENC_PARAMS_H_ */
> diff --git a/BaseTools/Source/C/BrotliCompress/enc/prefix.h
> b/BaseTools/Source/C/BrotliCompress/enc/prefix.h
> deleted file mode 100644
> index e52edd1faa78..000000000000
> --- a/BaseTools/Source/C/BrotliCompress/enc/prefix.h
> +++ /dev/null
> @@ -1,53 +0,0 @@
> -/* Copyright 2013 Google Inc. All Rights Reserved.
> -
> - Distributed under MIT license.
> - See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
> -*/
> -
> -/* Functions for encoding of integers into prefix codes the amount of extra
> - bits, and the actual values of the extra bits. */
> -
> -#ifndef BROTLI_ENC_PREFIX_H_
> -#define BROTLI_ENC_PREFIX_H_
> -
> -#include "../common/constants.h"
> -#include "../common/platform.h"
> -#include <brotli/types.h>
> -#include "./fast_log.h"
> -
> -#if defined(__cplusplus) || defined(c_plusplus)
> -extern "C" {
> -#endif
> -
> -/* Here distance_code is an intermediate code, i.e. one of the special codes
> or
> - the actual distance increased by BROTLI_NUM_DISTANCE_SHORT_CODES -
> 1. */
> -static BROTLI_INLINE void PrefixEncodeCopyDistance(size_t distance_code,
> - size_t num_direct_codes,
> - size_t postfix_bits,
> - uint16_t* code,
> - uint32_t* extra_bits) {
> - if (distance_code < BROTLI_NUM_DISTANCE_SHORT_CODES +
> num_direct_codes) {
> - *code = (uint16_t)distance_code;
> - *extra_bits = 0;
> - return;
> - } else {
> - size_t dist = ((size_t)1 << (postfix_bits + 2u)) +
> - (distance_code - BROTLI_NUM_DISTANCE_SHORT_CODES -
> num_direct_codes);
> - size_t bucket = Log2FloorNonZero(dist) - 1;
> - size_t postfix_mask = (1u << postfix_bits) - 1;
> - size_t postfix = dist & postfix_mask;
> - size_t prefix = (dist >> bucket) & 1;
> - size_t offset = (2 + prefix) << bucket;
> - size_t nbits = bucket - postfix_bits;
> - *code = (uint16_t)((nbits << 10) |
> - (BROTLI_NUM_DISTANCE_SHORT_CODES + num_direct_codes +
> - ((2 * (nbits - 1) + prefix) << postfix_bits) + postfix));
> - *extra_bits = (uint32_t)((dist - offset) >> postfix_bits);
> - }
> -}
> -
> -#if defined(__cplusplus) || defined(c_plusplus)
> -} /* extern "C" */
> -#endif
> -
> -#endif /* BROTLI_ENC_PREFIX_H_ */
> diff --git a/BaseTools/Source/C/BrotliCompress/enc/quality.h
> b/BaseTools/Source/C/BrotliCompress/enc/quality.h
> deleted file mode 100644
> index 072bf8f156e4..000000000000
> --- a/BaseTools/Source/C/BrotliCompress/enc/quality.h
> +++ /dev/null
> @@ -1,165 +0,0 @@
> -/* Copyright 2016 Google Inc. All Rights Reserved.
> -
> - Distributed under MIT license.
> - See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
> -*/
> -
> -/* Constants and formulas that affect speed-ratio trade-offs and thus
> define
> - quality levels. */
> -
> -#ifndef BROTLI_ENC_QUALITY_H_
> -#define BROTLI_ENC_QUALITY_H_
> -
> -#include "../common/platform.h"
> -#include <brotli/encode.h>
> -#include "./params.h"
> -
> -#define FAST_ONE_PASS_COMPRESSION_QUALITY 0
> -#define FAST_TWO_PASS_COMPRESSION_QUALITY 1
> -#define ZOPFLIFICATION_QUALITY 10
> -#define HQ_ZOPFLIFICATION_QUALITY 11
> -
> -#define MAX_QUALITY_FOR_STATIC_ENTROPY_CODES 2
> -#define MIN_QUALITY_FOR_BLOCK_SPLIT 4
> -#define MIN_QUALITY_FOR_NONZERO_DISTANCE_PARAMS 4
> -#define MIN_QUALITY_FOR_OPTIMIZE_HISTOGRAMS 4
> -#define MIN_QUALITY_FOR_EXTENSIVE_REFERENCE_SEARCH 5
> -#define MIN_QUALITY_FOR_CONTEXT_MODELING 5
> -#define MIN_QUALITY_FOR_HQ_CONTEXT_MODELING 7
> -#define MIN_QUALITY_FOR_HQ_BLOCK_SPLITTING 10
> -
> -/* For quality below MIN_QUALITY_FOR_BLOCK_SPLIT there is no block
> splitting,
> - so we buffer at most this much literals and commands. */
> -#define MAX_NUM_DELAYED_SYMBOLS 0x2FFF
> -
> -/* Returns hash-table size for quality levels 0 and 1. */
> -static BROTLI_INLINE size_t MaxHashTableSize(int quality) {
> - return quality == FAST_ONE_PASS_COMPRESSION_QUALITY ? 1 << 15 : 1
> << 17;
> -}
> -
> -/* The maximum length for which the zopflification uses distinct distances.
> */
> -#define MAX_ZOPFLI_LEN_QUALITY_10 150
> -#define MAX_ZOPFLI_LEN_QUALITY_11 325
> -
> -/* Do not thoroughly search when a long copy is found. */
> -#define BROTLI_LONG_COPY_QUICK_STEP 16384
> -
> -static BROTLI_INLINE size_t MaxZopfliLen(const BrotliEncoderParams*
> params) {
> - return params->quality <= 10 ?
> - MAX_ZOPFLI_LEN_QUALITY_10 :
> - MAX_ZOPFLI_LEN_QUALITY_11;
> -}
> -
> -/* Number of best candidates to evaluate to expand Zopfli chain. */
> -static BROTLI_INLINE size_t MaxZopfliCandidates(
> - const BrotliEncoderParams* params) {
> - return params->quality <= 10 ? 1 : 5;
> -}
> -
> -static BROTLI_INLINE void SanitizeParams(BrotliEncoderParams* params) {
> - params->quality = BROTLI_MIN(int, BROTLI_MAX_QUALITY,
> - BROTLI_MAX(int, BROTLI_MIN_QUALITY, params->quality));
> - if (params->quality <= MAX_QUALITY_FOR_STATIC_ENTROPY_CODES) {
> - params->large_window = BROTLI_FALSE;
> - }
> - if (params->lgwin < BROTLI_MIN_WINDOW_BITS) {
> - params->lgwin = BROTLI_MIN_WINDOW_BITS;
> - } else {
> - int max_lgwin = params->large_window ?
> BROTLI_LARGE_MAX_WINDOW_BITS :
> - BROTLI_MAX_WINDOW_BITS;
> - if (params->lgwin > max_lgwin) params->lgwin = max_lgwin;
> - }
> -}
> -
> -/* Returns optimized lg_block value. */
> -static BROTLI_INLINE int ComputeLgBlock(const BrotliEncoderParams*
> params) {
> - int lgblock = params->lgblock;
> - if (params->quality == FAST_ONE_PASS_COMPRESSION_QUALITY ||
> - params->quality == FAST_TWO_PASS_COMPRESSION_QUALITY) {
> - lgblock = params->lgwin;
> - } else if (params->quality < MIN_QUALITY_FOR_BLOCK_SPLIT) {
> - lgblock = 14;
> - } else if (lgblock == 0) {
> - lgblock = 16;
> - if (params->quality >= 9 && params->lgwin > lgblock) {
> - lgblock = BROTLI_MIN(int, 18, params->lgwin);
> - }
> - } else {
> - lgblock = BROTLI_MIN(int, BROTLI_MAX_INPUT_BLOCK_BITS,
> - BROTLI_MAX(int, BROTLI_MIN_INPUT_BLOCK_BITS, lgblock));
> - }
> - return lgblock;
> -}
> -
> -/* Returns log2 of the size of main ring buffer area.
> - Allocate at least lgwin + 1 bits for the ring buffer so that the newly
> - added block fits there completely and we still get lgwin bits and at least
> - read_block_size_bits + 1 bits because the copy tail length needs to be
> - smaller than ring-buffer size. */
> -static BROTLI_INLINE int ComputeRbBits(const BrotliEncoderParams*
> params) {
> - return 1 + BROTLI_MAX(int, params->lgwin, params->lgblock);
> -}
> -
> -static BROTLI_INLINE size_t MaxMetablockSize(
> - const BrotliEncoderParams* params) {
> - int bits =
> - BROTLI_MIN(int, ComputeRbBits(params),
> BROTLI_MAX_INPUT_BLOCK_BITS);
> - return (size_t)1 << bits;
> -}
> -
> -/* When searching for backward references and have not seen matches for
> a long
> - time, we can skip some match lookups. Unsuccessful match lookups are
> very
> - expensive and this kind of a heuristic speeds up compression quite a lot.
> - At first 8 byte strides are taken and every second byte is put to hasher.
> - After 4x more literals stride by 16 bytes, every put 4-th byte to hasher.
> - Applied only to qualities 2 to 9. */
> -static BROTLI_INLINE size_t LiteralSpreeLengthForSparseSearch(
> - const BrotliEncoderParams* params) {
> - return params->quality < 9 ? 64 : 512;
> -}
> -
> -static BROTLI_INLINE void ChooseHasher(const BrotliEncoderParams*
> params,
> - BrotliHasherParams* hparams) {
> - if (params->quality > 9) {
> - hparams->type = 10;
> - } else if (params->quality == 4 && params->size_hint >= (1 << 20)) {
> - hparams->type = 54;
> - } else if (params->quality < 5) {
> - hparams->type = params->quality;
> - } else if (params->lgwin <= 16) {
> - hparams->type = params->quality < 7 ? 40 : params->quality < 9 ? 41 : 42;
> - } else if (params->size_hint >= (1 << 20) && params->lgwin >= 19) {
> - hparams->type = 6;
> - hparams->block_bits = params->quality - 1;
> - hparams->bucket_bits = 15;
> - hparams->hash_len = 5;
> - hparams->num_last_distances_to_check =
> - params->quality < 7 ? 4 : params->quality < 9 ? 10 : 16;
> - } else {
> - hparams->type = 5;
> - hparams->block_bits = params->quality - 1;
> - hparams->bucket_bits = params->quality < 7 ? 14 : 15;
> - hparams->num_last_distances_to_check =
> - params->quality < 7 ? 4 : params->quality < 9 ? 10 : 16;
> - }
> -
> - if (params->lgwin > 24) {
> - /* Different hashers for large window brotli: not for qualities <= 2,
> - these are too fast for large window. Not for qualities >= 10: their
> - hasher already works well with large window. So the changes are:
> - H3 --> H35: for quality 3.
> - H54 --> H55: for quality 4 with size hint > 1MB
> - H6 --> H65: for qualities 5, 6, 7, 8, 9. */
> - if (hparams->type == 3) {
> - hparams->type = 35;
> - }
> - if (hparams->type == 54) {
> - hparams->type = 55;
> - }
> - if (hparams->type == 6) {
> - hparams->type = 65;
> - }
> - }
> -}
> -
> -#endif /* BROTLI_ENC_QUALITY_H_ */
> diff --git a/BaseTools/Source/C/BrotliCompress/enc/ringbuffer.h
> b/BaseTools/Source/C/BrotliCompress/enc/ringbuffer.h
> deleted file mode 100644
> index fe63270b3f9a..000000000000
> --- a/BaseTools/Source/C/BrotliCompress/enc/ringbuffer.h
> +++ /dev/null
> @@ -1,164 +0,0 @@
> -/* Copyright 2013 Google Inc. All Rights Reserved.
> -
> - Distributed under MIT license.
> - See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
> -*/
> -
> -/* Sliding window over the input data. */
> -
> -#ifndef BROTLI_ENC_RINGBUFFER_H_
> -#define BROTLI_ENC_RINGBUFFER_H_
> -
> -#include <string.h> /* memcpy */
> -
> -#include "../common/platform.h"
> -#include <brotli/types.h>
> -#include "./memory.h"
> -#include "./quality.h"
> -
> -#if defined(__cplusplus) || defined(c_plusplus)
> -extern "C" {
> -#endif
> -
> -/* A RingBuffer(window_bits, tail_bits) contains `1 << window_bits' bytes of
> - data in a circular manner: writing a byte writes it to:
> - `position() % (1 << window_bits)'.
> - For convenience, the RingBuffer array contains another copy of the
> - first `1 << tail_bits' bytes:
> - buffer_[i] == buffer_[i + (1 << window_bits)], if i < (1 << tail_bits),
> - and another copy of the last two bytes:
> - buffer_[-1] == buffer_[(1 << window_bits) - 1] and
> - buffer_[-2] == buffer_[(1 << window_bits) - 2]. */
> -typedef struct RingBuffer {
> - /* Size of the ring-buffer is (1 << window_bits) + tail_size_. */
> - const uint32_t size_;
> - const uint32_t mask_;
> - const uint32_t tail_size_;
> - const uint32_t total_size_;
> -
> - uint32_t cur_size_;
> - /* Position to write in the ring buffer. */
> - uint32_t pos_;
> - /* The actual ring buffer containing the copy of the last two bytes, the data,
> - and the copy of the beginning as a tail. */
> - uint8_t* data_;
> - /* The start of the ring-buffer. */
> - uint8_t* buffer_;
> -} RingBuffer;
> -
> -static BROTLI_INLINE void RingBufferInit(RingBuffer* rb) {
> - rb->cur_size_ = 0;
> - rb->pos_ = 0;
> - rb->data_ = 0;
> - rb->buffer_ = 0;
> -}
> -
> -static BROTLI_INLINE void RingBufferSetup(
> - const BrotliEncoderParams* params, RingBuffer* rb) {
> - int window_bits = ComputeRbBits(params);
> - int tail_bits = params->lgblock;
> - *(uint32_t*)&rb->size_ = 1u << window_bits;
> - *(uint32_t*)&rb->mask_ = (1u << window_bits) - 1;
> - *(uint32_t*)&rb->tail_size_ = 1u << tail_bits;
> - *(uint32_t*)&rb->total_size_ = rb->size_ + rb->tail_size_;
> -}
> -
> -static BROTLI_INLINE void RingBufferFree(MemoryManager* m,
> RingBuffer* rb) {
> - BROTLI_FREE(m, rb->data_);
> -}
> -
> -/* Allocates or re-allocates data_ to the given length + plus some slack
> - region before and after. Fills the slack regions with zeros. */
> -static BROTLI_INLINE void RingBufferInitBuffer(
> - MemoryManager* m, const uint32_t buflen, RingBuffer* rb) {
> - static const size_t kSlackForEightByteHashingEverywhere = 7;
> - uint8_t* new_data = BROTLI_ALLOC(
> - m, uint8_t, 2 + buflen + kSlackForEightByteHashingEverywhere);
> - size_t i;
> - if (BROTLI_IS_OOM(m)) return;
> - if (rb->data_) {
> - memcpy(new_data, rb->data_,
> - 2 + rb->cur_size_ + kSlackForEightByteHashingEverywhere);
> - BROTLI_FREE(m, rb->data_);
> - }
> - rb->data_ = new_data;
> - rb->cur_size_ = buflen;
> - rb->buffer_ = rb->data_ + 2;
> - rb->buffer_[-2] = rb->buffer_[-1] = 0;
> - for (i = 0; i < kSlackForEightByteHashingEverywhere; ++i) {
> - rb->buffer_[rb->cur_size_ + i] = 0;
> - }
> -}
> -
> -static BROTLI_INLINE void RingBufferWriteTail(
> - const uint8_t* bytes, size_t n, RingBuffer* rb) {
> - const size_t masked_pos = rb->pos_ & rb->mask_;
> - if (BROTLI_PREDICT_FALSE(masked_pos < rb->tail_size_)) {
> - /* Just fill the tail buffer with the beginning data. */
> - const size_t p = rb->size_ + masked_pos;
> - memcpy(&rb->buffer_[p], bytes,
> - BROTLI_MIN(size_t, n, rb->tail_size_ - masked_pos));
> - }
> -}
> -
> -/* Push bytes into the ring buffer. */
> -static BROTLI_INLINE void RingBufferWrite(
> - MemoryManager* m, const uint8_t* bytes, size_t n, RingBuffer* rb) {
> - if (rb->pos_ == 0 && n < rb->tail_size_) {
> - /* Special case for the first write: to process the first block, we don't
> - need to allocate the whole ring-buffer and we don't need the tail
> - either. However, we do this memory usage optimization only if the
> - first write is less than the tail size, which is also the input block
> - size, otherwise it is likely that other blocks will follow and we
> - will need to reallocate to the full size anyway. */
> - rb->pos_ = (uint32_t)n;
> - RingBufferInitBuffer(m, rb->pos_, rb);
> - if (BROTLI_IS_OOM(m)) return;
> - memcpy(rb->buffer_, bytes, n);
> - return;
> - }
> - if (rb->cur_size_ < rb->total_size_) {
> - /* Lazily allocate the full buffer. */
> - RingBufferInitBuffer(m, rb->total_size_, rb);
> - if (BROTLI_IS_OOM(m)) return;
> - /* Initialize the last two bytes to zero, so that we don't have to worry
> - later when we copy the last two bytes to the first two positions. */
> - rb->buffer_[rb->size_ - 2] = 0;
> - rb->buffer_[rb->size_ - 1] = 0;
> - }
> - {
> - const size_t masked_pos = rb->pos_ & rb->mask_;
> - /* The length of the writes is limited so that we do not need to worry
> - about a write */
> - RingBufferWriteTail(bytes, n, rb);
> - if (BROTLI_PREDICT_TRUE(masked_pos + n <= rb->size_)) {
> - /* A single write fits. */
> - memcpy(&rb->buffer_[masked_pos], bytes, n);
> - } else {
> - /* Split into two writes.
> - Copy into the end of the buffer, including the tail buffer. */
> - memcpy(&rb->buffer_[masked_pos], bytes,
> - BROTLI_MIN(size_t, n, rb->total_size_ - masked_pos));
> - /* Copy into the beginning of the buffer */
> - memcpy(&rb->buffer_[0], bytes + (rb->size_ - masked_pos),
> - n - (rb->size_ - masked_pos));
> - }
> - }
> - {
> - BROTLI_BOOL not_first_lap = (rb->pos_ & (1u << 31)) != 0;
> - uint32_t rb_pos_mask = (1u << 31) - 1;
> - rb->buffer_[-2] = rb->buffer_[rb->size_ - 2];
> - rb->buffer_[-1] = rb->buffer_[rb->size_ - 1];
> - rb->pos_ = (rb->pos_ & rb_pos_mask) + (uint32_t)(n & rb_pos_mask);
> - if (not_first_lap) {
> - /* Wrap, but preserve not-a-first-lap feature. */
> - rb->pos_ |= 1u << 31;
> - }
> - }
> -}
> -
> -#if defined(__cplusplus) || defined(c_plusplus)
> -} /* extern "C" */
> -#endif
> -
> -#endif /* BROTLI_ENC_RINGBUFFER_H_ */
> diff --git a/BaseTools/Source/C/BrotliCompress/enc/static_dict.h
> b/BaseTools/Source/C/BrotliCompress/enc/static_dict.h
> deleted file mode 100644
> index aafc68ff9e02..000000000000
> --- a/BaseTools/Source/C/BrotliCompress/enc/static_dict.h
> +++ /dev/null
> @@ -1,40 +0,0 @@
> -/* Copyright 2013 Google Inc. All Rights Reserved.
> -
> - Distributed under MIT license.
> - See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
> -*/
> -
> -/* Class to model the static dictionary. */
> -
> -#ifndef BROTLI_ENC_STATIC_DICT_H_
> -#define BROTLI_ENC_STATIC_DICT_H_
> -
> -#include "../common/dictionary.h"
> -#include "../common/platform.h"
> -#include <brotli/types.h>
> -#include "./encoder_dict.h"
> -
> -#if defined(__cplusplus) || defined(c_plusplus)
> -extern "C" {
> -#endif
> -
> -#define BROTLI_MAX_STATIC_DICTIONARY_MATCH_LEN 37
> -static const uint32_t kInvalidMatch = 0xFFFFFFF;
> -
> -/* Matches data against static dictionary words, and for each length l,
> - for which a match is found, updates matches[l] to be the minimum
> possible
> - (distance << 5) + len_code.
> - Returns 1 if matches have been found, otherwise 0.
> - Prerequisites:
> - matches array is at least BROTLI_MAX_STATIC_DICTIONARY_MATCH_LEN
> + 1 long
> - all elements are initialized to kInvalidMatch */
> -BROTLI_INTERNAL BROTLI_BOOL BrotliFindAllStaticDictionaryMatches(
> - const BrotliEncoderDictionary* dictionary,
> - const uint8_t* data, size_t min_length, size_t max_length,
> - uint32_t* matches);
> -
> -#if defined(__cplusplus) || defined(c_plusplus)
> -} /* extern "C" */
> -#endif
> -
> -#endif /* BROTLI_ENC_STATIC_DICT_H_ */
> diff --git a/BaseTools/Source/C/BrotliCompress/enc/static_dict_lut.h
> b/BaseTools/Source/C/BrotliCompress/enc/static_dict_lut.h
> deleted file mode 100644
> index 88f8b342eabd..000000000000
> --- a/BaseTools/Source/C/BrotliCompress/enc/static_dict_lut.h
> +++ /dev/null
> @@ -1,5864 +0,0 @@
> -/* Copyright 2015 Google Inc. All Rights Reserved.
> -
> - Distributed under MIT license.
> - See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
> -*/
> -
> -/* Lookup table for static dictionary and transforms. */
> -
> -#ifndef BROTLI_ENC_STATIC_DICT_LUT_H_
> -#define BROTLI_ENC_STATIC_DICT_LUT_H_
> -
> -#include <brotli/types.h>
> -
> -#if defined(__cplusplus) || defined(c_plusplus)
> -extern "C" {
> -#endif
> -
> -typedef struct DictWord {
> - /* Highest bit is used to indicate end of bucket. */
> - uint8_t len;
> - uint8_t transform;
> - uint16_t idx;
> -} DictWord;
> -
> -static const int kDictNumBits = 15;
> -static const uint32_t kDictHashMul32 = 0x1E35A7BD;
> -
> -static const uint16_t kStaticDictionaryBuckets[32768] = {
> -1,0,0,0,0,0,0,0,0,3,6,0,0,0,0,0,20,0,0,0,21,0,22,0,0,0,0,0,0,0,0,23,0,0,25,0,29,
> -0,53,0,0,0,0,0,0,55,0,0,0,0,0,0,61,76,0,0,0,94,0,0,0,0,0,0,96,0,97,0,98,0,0,0,0,
> -
> 0,0,0,99,101,106,108,0,0,0,0,0,110,0,111,112,0,113,118,124,0,0,0,0,0,125,128,0,
> 0
> -,0,0,129,0,0,131,0,0,0,0,0,0,132,0,0,135,0,0,0,137,0,0,0,0,0,138,139,0,0,0,0,0,0
> -
> ,0,142,143,144,0,0,0,0,0,145,0,0,0,146,149,151,152,0,0,153,0,0,0,0,0,0,0,0,0,0,0
> -,0,0,0,0,154,0,0,0,0,0,0,155,0,0,0,0,160,182,0,0,0,0,0,0,183,0,0,0,188,189,0,0,
> -192,0,0,0,0,0,0,194,0,0,0,0,0,0,0,0,197,202,209,0,0,210,0,224,0,0,0,225,0,0,0,0,
> -0,0,0,0,0,0,231,0,0,0,232,0,240,0,0,242,0,0,0,0,0,0,0,0,0,0,0,244,0,0,0,246,0,0,
> -249,251,253,0,0,0,0,0,258,0,0,261,263,0,0,0,267,0,0,268,0,269,0,0,0,0,0,0,0,0,0,
> -
> 271,0,0,0,0,0,0,272,0,273,0,277,0,278,286,0,0,0,0,287,0,289,290,291,0,0,0,295,0,
> -0,296,297,0,0,0,0,0,0,0,0,0,0,298,0,0,0,299,0,0,305,0,324,0,0,0,0,0,327,0,328,
> -
> 329,0,0,0,0,336,0,0,340,0,341,342,343,0,0,346,0,348,0,0,0,0,0,0,349,351,0,0,355,
> -0,363,0,364,0,368,369,0,370,0,0,0,0,0,0,0,372,0,0,0,0,0,0,0,0,0,0,0,373,0,375,0,
> -0,0,0,376,377,0,0,394,395,396,0,0,398,0,0,0,0,400,0,0,408,0,0,0,0,420,0,0,0,0,0,
> -
> 0,421,0,0,422,423,0,0,429,435,436,442,0,0,443,0,444,445,453,456,0,457,0,0,0,0,
> 0,
> -458,0,0,0,459,0,0,0,460,0,462,463,465,0,0,0,0,0,0,466,469,0,0,0,0,0,0,470,0,0,0,
> -
> 474,0,476,0,0,0,0,483,0,485,0,0,0,486,0,0,488,491,492,0,0,497,499,500,0,501,0,
> 0,
> -0,505,0,0,506,0,0,0,507,0,0,0,509,0,0,0,0,511,512,519,0,0,0,0,0,0,529,530,0,0,0,
> -534,0,0,0,0,543,0,0,0,0,0,0,0,0,0,553,0,0,0,0,557,560,0,0,0,0,0,0,561,0,564,0,0,
> -
> 0,0,0,0,565,566,0,575,0,619,0,620,0,0,623,624,0,0,0,625,0,0,626,627,0,0,628,0,0,
> -0,0,630,0,631,0,0,0,0,0,0,0,0,0,641,0,0,0,0,643,656,668,0,0,0,673,0,0,0,674,0,0,
> -
> 0,0,0,0,0,0,682,0,687,0,690,0,693,699,700,0,0,0,0,0,0,704,705,0,0,0,0,707,710,0,
> -711,0,0,0,0,726,0,0,729,0,0,0,730,731,0,0,0,0,0,752,0,0,0,762,0,763,0,0,767,0,0,
> -0,770,774,0,0,775,0,0,0,0,0,0,0,0,0,0,776,0,0,0,777,783,0,0,0,785,788,0,0,0,0,
> -790,0,0,0,793,0,0,0,0,794,0,0,804,819,821,0,827,0,0,0,834,0,0,835,0,0,0,841,0,
> -844,0,850,851,859,0,860,0,0,0,0,0,0,0,874,0,876,0,877,890,0,0,0,0,0,0,0,0,893,
> -894,898,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,899,0,0,0,900,904,906,0,0,0,907,0,908,909,
> -0,910,0,0,0,0,911,0,0,0,0,0,916,0,0,0,922,925,0,930,0,934,0,0,0,0,0,943,0,0,944,
> -0,953,954,0,0,0,0,0,0,955,0,962,963,0,0,976,0,0,977,978,979,980,0,981,0,0,0,0,
> -984,0,0,985,0,0,987,989,991,0,0,0,0,0,0,0,0,0,992,0,0,0,993,0,0,0,0,0,0,996,0,0,
> -
> 0,1000,0,0,0,0,0,1002,0,0,0,0,1005,1007,0,0,0,1009,0,0,0,1010,0,0,0,0,0,0,1011,
> 0
> -,1012,0,0,0,0,1014,1016,0,0,0,1020,0,1021,0,0,0,0,1022,0,0,0,1024,0,0,0,0,0,0,
> -
> 1025,0,0,1026,1027,0,0,0,0,0,1031,0,1033,0,0,0,0,1034,0,0,0,1037,1040,0,0,0,10
> 42
> -
> ,1043,0,0,1053,0,1054,0,0,1057,0,0,0,1058,0,0,1060,0,0,0,0,0,0,0,1061,0,0,1062,
> 0
> -
> ,0,0,0,1063,0,0,0,0,1064,0,0,0,0,0,1065,0,0,0,0,1066,1067,0,0,0,1069,1070,1072,
> 0
> -,0,0,0,0,0,1073,0,1075,0,0,0,0,0,0,1080,1084,0,0,0,0,1088,0,0,0,0,0,0,1094,0,
> -
> 1095,0,1107,0,0,0,1112,1114,0,1119,0,1122,0,0,1126,0,1129,0,1130,0,0,0,0,0,11
> 32,
> -
> 0,0,0,0,0,0,1144,0,0,1145,1146,0,1148,1149,0,0,1150,1151,0,0,0,0,1152,0,1153,
> 0,0
> -
> ,0,0,0,1154,0,1163,0,0,0,1164,0,0,0,0,0,1165,0,1167,0,1170,0,0,0,0,0,1171,1172,
> 0
> -
> ,0,0,0,0,0,0,0,1173,1175,1177,0,1186,0,0,0,0,0,0,0,0,0,0,1195,0,0,1221,0,0,1224,
> -
> 0,0,1227,0,0,0,0,0,1228,1229,0,0,1230,0,0,0,0,0,0,0,0,0,1231,0,0,0,1233,0,0,124
> 3
> -
> ,1244,1246,1248,0,0,0,0,1254,1255,1258,1259,0,0,0,1260,0,0,1261,0,0,0,1262,12
> 64,
> -0,0,1265,0,0,0,0,0,0,0,0,0,0,0,0,1266,0,1267,0,0,0,0,1273,1274,1276,1289,0,0,
> -1291,1292,1293,0,0,1294,1295,1296,0,0,0,0,1302,0,1304,0,0,0,0,0,0,0,0,0,1311,
> -
> 1312,0,1314,0,1316,1320,1321,0,0,0,0,0,0,0,1322,1323,1324,0,1335,0,1336,0,0,0
> ,0,
> -
> 1341,1342,0,1346,0,1357,0,0,0,1358,1360,0,0,0,0,0,0,1361,0,0,0,1362,1365,0,13
> 66,
> -0,0,0,0,0,0,0,1379,0,0,0,0,0,0,0,0,0,0,0,0,1386,0,1388,0,0,0,0,0,0,0,0,0,0,0,0,0
> -
> ,0,1395,0,0,0,0,1403,0,1405,0,0,1407,0,0,0,0,0,1408,1409,0,1410,0,0,0,1412,141
> 3,
> -1416,0,0,1429,1451,0,0,1454,0,0,0,0,0,0,0,1455,0,0,0,0,0,0,0,1456,0,0,0,0,1459,
> -
> 1460,1461,1475,0,0,0,0,0,0,1477,0,1480,0,1481,0,0,1486,0,0,1495,0,0,0,1496,0,
> 0,
> -
> 1498,1499,1501,1520,1521,0,0,0,1526,0,0,0,0,1528,1529,0,1533,1536,0,0,0,1537,
> -
> 1538,1549,0,1550,1558,1559,1572,0,1573,0,0,0,0,0,0,0,0,0,1575,0,0,0,0,0,1579,
> 0,
> -
> 1599,0,1603,0,1604,0,1605,0,0,0,0,0,1608,1610,0,0,0,0,1611,0,1615,0,1616,1618
> ,0,
> -1619,0,0,1622,0,0,0,0,1634,0,0,0,1635,0,0,0,1641,0,0,0,0,0,0,0,0,0,1643,0,0,0,
> -1650,0,0,1652,0,0,0,0,0,1653,0,0,0,1654,0,0,0,0,1655,0,1662,0,0,1663,1664,0,0,
> -
> 1668,0,0,1669,1670,0,1672,1673,0,0,0,0,0,1674,0,0,0,1675,1676,1680,0,1682,0,0,
> -1687,0,0,0,0,0,1704,0,0,1705,0,0,1721,0,0,0,0,1734,1735,0,0,0,0,1737,0,0,0,0,
> -
> 1739,0,0,1740,0,0,0,0,0,0,0,0,0,0,1741,1743,0,0,0,0,1745,0,0,0,1749,0,0,0,1751,
> 0
> -
> ,0,0,0,0,0,1760,0,0,0,0,1765,0,0,0,0,0,1784,0,1785,1787,0,0,0,0,1788,1789,0,0,0,
> -
> 0,1790,1791,1793,0,1798,1799,0,0,0,0,1801,0,1803,1805,0,0,0,1806,1811,0,1812,
> -
> 1814,0,1821,0,0,0,0,0,1822,1833,0,0,0,0,0,0,1848,0,0,0,0,0,0,1857,0,0,0,1859,0,
> 0
> -
> ,0,0,1861,0,0,0,0,0,0,0,1866,0,1921,1925,0,0,0,1929,1930,0,0,0,0,0,0,0,0,0,1931,
> -
> 0,0,0,0,1932,0,0,0,1934,0,0,0,0,0,0,0,0,1946,0,0,1948,0,0,0,0,1950,0,1957,0,195
> 8
> -
> ,0,0,0,0,0,1965,1967,0,0,0,0,1968,0,1969,0,1971,1972,0,0,0,0,0,0,0,0,0,0,0,0,0,0
> -,0,1973,0,0,0,0,1975,0,0,0,0,1976,1979,0,1982,0,0,0,0,1984,1988,0,0,0,0,1990,
> -
> 2004,2008,0,0,0,2012,2013,0,0,0,0,0,0,0,0,0,0,2015,0,2016,2017,0,0,0,0,2021,0,
> 0,
> -2025,0,0,0,0,0,2029,2036,2040,0,2042,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2043,0,0,0,0,0,
> -
> 2045,0,0,0,0,0,0,0,2046,2047,0,2048,2049,0,2059,0,0,2063,0,2064,2065,0,0,2066
> ,0,
> -
> 0,0,0,0,0,2069,0,0,0,0,2070,0,2071,0,2072,0,0,0,0,2080,2082,2083,0,0,0,0,0,208
> 5,
> -
> 0,2086,2088,2089,2105,0,0,0,0,2107,0,0,2116,2117,0,2120,0,0,2122,0,0,0,0,0,21
> 23,
> -
> 0,0,2125,2127,2128,0,0,0,2130,0,0,0,2137,2139,2140,2141,0,0,0,0,0,0,0,0,0,214
> 4,
> -2145,0,0,2146,2149,0,0,0,0,2150,0,0,2151,2158,0,2159,0,2160,0,0,0,0,0,0,2161,
> -
> 2162,0,0,2194,2202,0,0,0,0,0,0,2205,2217,0,2220,0,2221,0,2222,2224,0,0,0,0,22
> 37,
> -
> 0,0,0,0,0,2238,0,2239,2241,0,0,2242,0,0,0,0,0,2243,0,0,0,0,0,0,2252,0,0,2253,0,
> 0
> -
> ,0,2257,2258,0,0,0,2260,0,0,0,0,0,0,0,2262,0,2264,0,0,0,0,0,2269,2270,0,0,0,0,0,
> -
> 0,0,0,0,2271,0,2273,0,0,0,0,2277,0,0,0,0,2278,0,0,0,0,2279,0,2280,0,2283,0,0,0,
> 0
> -,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2287,0,0,0,0,0,0,0,2289,2290,0,0,0,0,2291,0,2292,0,
> -
> 0,0,2293,2295,2296,0,0,0,0,0,0,0,2298,0,0,0,0,0,2303,0,2305,0,0,2306,0,2307,0,
> 0,
> -
> 0,0,0,0,0,0,0,0,0,0,2313,2314,2315,2316,0,0,2318,0,2319,0,2322,0,0,2323,0,232
> 4,0
> -
> ,2326,0,0,0,0,0,0,0,2335,0,2336,2338,2339,0,2340,0,0,0,2355,0,2375,0,2382,238
> 6,0
> -,2387,0,0,2394,0,0,0,0,2395,0,2397,0,0,0,0,0,2398,0,0,0,0,0,0,0,2399,2402,2404,
> -
> 2408,2411,0,0,0,2413,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2415,0,0,2416,2417,2419,0,242
> 0,
> -
> 0,0,0,0,0,2425,0,0,0,2426,0,0,0,0,0,0,0,0,0,0,0,0,2427,2428,0,2429,0,0,2430,243
> 4
> -
> ,0,2436,0,0,0,0,0,0,2441,2442,0,2445,0,0,2446,2457,0,2459,0,0,2462,0,2464,0,2
> 477
> -
> ,0,2478,2486,0,0,0,2491,0,0,2493,0,0,2494,0,2495,0,2513,2523,0,0,0,0,2524,0,0,
> 0,
> -
> 0,0,0,2528,2529,2530,0,0,2531,0,2533,0,0,2534,2535,0,2536,2537,0,2538,0,2539,
> -2540,0,0,0,2545,2546,0,0,0,0,0,0,0,2548,0,0,2549,0,2550,2555,0,0,0,0,0,2557,0,
> -2560,0,0,0,0,0,0,0,0,0,0,0,2561,0,2576,0,0,0,0,0,0,0,0,0,2577,2578,0,0,0,2579,0,
> -
> 0,0,0,0,0,0,2580,0,0,0,0,2581,0,0,0,0,2583,0,2584,0,2588,2590,0,0,0,2591,0,0,0,
> 0
> -
> ,2593,2594,0,2595,0,2601,2602,0,0,2603,0,2605,0,0,0,2606,2607,2611,0,2615,0,
> 0,0,
> -2617,0,0,0,0,0,0,0,0,0,0,0,0,0,2619,0,0,2620,0,0,0,2621,0,2623,0,2625,0,0,2628,
> -
> 2629,0,0,2635,2636,2637,0,0,2639,0,0,0,2642,0,0,0,0,2643,0,2644,0,2649,0,0,0,
> 0,0
> -,0,2655,2656,0,0,2657,0,0,0,0,0,2658,0,0,0,0,0,2659,0,0,0,0,2664,2685,0,2687,0,
> -
> 2688,0,0,2689,0,0,2694,0,2695,0,0,2698,0,2701,2706,0,0,0,2707,0,2709,2710,27
> 11,0
> -
> ,0,0,2720,2730,2735,0,0,0,0,2738,2740,0,0,0,0,2747,0,0,0,0,0,0,2748,0,0,2749,0,
> 0
> -
> ,0,0,0,2750,0,0,2752,2754,0,0,0,0,0,2758,0,0,0,0,2762,0,0,0,0,2763,0,0,0,0,0,0,0
> -
> ,2764,2767,0,0,0,0,2768,0,0,2770,0,0,0,0,0,0,0,2771,0,0,0,0,0,0,0,0,0,2772,0,0,0
> -,0,0,2773,2776,0,0,2783,0,0,2784,0,2789,0,2790,0,0,0,2792,0,0,0,0,0,0,0,0,0,0,
> -2793,2795,0,0,0,0,0,0,2796,0,0,0,0,0,0,2797,2799,0,0,0,0,2803,0,0,0,0,2806,0,
> -
> 2807,2808,2817,2819,0,0,0,0,0,2821,0,0,0,0,2822,2823,0,0,0,0,0,0,0,2824,0,0,28
> 28
> -,0,2834,0,0,0,0,0,0,2836,0,2838,0,0,2839,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2841,
> -0,0,0,2842,0,0,0,0,0,2843,2844,0,0,0,0,2846,0,0,2847,0,2849,0,2853,0,0,0,0,0,
> -
> 2857,0,0,0,0,2858,0,2859,0,0,2860,0,2862,2868,0,0,0,0,2875,0,2876,0,0,2877,28
> 78,
> -
> 2884,2889,2890,0,0,2891,0,0,2892,0,0,0,2906,2912,0,2913,0,0,0,0,0,0,0,0,2916,
> 0,
> -
> 2934,0,0,0,0,0,2935,0,0,0,0,2939,0,2940,0,0,0,0,0,0,0,2941,0,0,0,2946,0,2949,0,
> 0
> -
> ,2950,2954,2955,0,0,0,2959,2961,0,0,2962,0,2963,0,0,0,0,0,0,2964,2965,2966,29
> 67,
> -
> 0,0,0,0,0,0,0,2969,0,0,0,0,0,2970,2975,0,2982,2983,2984,0,0,0,0,0,2989,0,0,299
> 0,
> -
> 0,0,0,0,0,0,0,2991,0,0,0,0,0,0,0,0,2998,0,3000,3001,0,0,3002,0,0,0,3003,0,0,301
> 2
> -
> ,0,0,3022,0,0,3024,0,0,3025,3027,0,0,0,3030,0,0,0,0,3034,3035,0,0,3036,0,3039,
> 0,
> -
> 3049,0,0,3050,0,0,0,0,0,0,3051,0,3053,0,0,0,0,3057,0,3058,0,0,0,0,0,0,0,0,3063,
> 0
> -
> ,0,3073,3074,3078,3079,0,3080,3086,0,0,0,0,0,0,0,0,3087,0,3092,0,3095,0,3099,
> 0,0
> -
> ,0,3100,0,3101,3102,0,3122,0,0,0,3124,0,3125,0,0,0,0,0,0,3132,3134,0,0,3136,0,
> 0,
> -
> 0,0,0,0,0,3147,0,0,3149,0,0,0,0,0,3150,3151,3152,0,0,0,0,3158,0,0,3160,0,0,316
> 1,
> -
> 0,0,3162,0,3163,3166,3168,0,0,3169,3170,0,0,3171,0,0,0,0,0,0,0,3182,0,3184,0,
> 0,
> -3188,0,0,3194,0,0,0,0,0,0,3204,0,0,0,0,3209,0,0,0,0,0,0,0,0,0,0,0,3216,3217,0,0,
> -
> 0,0,0,0,0,3219,0,0,3220,3222,0,3223,0,0,0,0,3224,0,3225,3226,0,3228,3233,0,32
> 39,
> -
> 3241,3242,0,0,3251,3252,3253,3255,0,0,0,0,0,0,0,0,3260,0,0,3261,0,0,0,3267,0,
> 0,0
> -
> ,0,0,0,0,0,3271,0,0,0,3278,0,3282,0,0,0,3284,0,0,0,3285,3286,0,0,0,0,0,0,0,3287,
> -
> 3292,0,0,0,0,3294,3296,0,0,3299,3300,3301,0,3302,0,0,0,0,0,3304,3306,0,0,0,0,
> 0,0
> -
> ,3308,0,0,0,0,0,0,0,0,0,3311,0,0,0,0,0,0,0,0,3312,3314,3315,0,3318,0,0,0,0,0,0,0
> -,0,3319,0,0,0,0,0,3321,0,0,0,0,0,0,0,0,0,3322,0,0,3324,3325,0,0,3326,0,0,3328,
> -
> 3329,3331,0,0,3335,0,0,3337,0,3338,0,0,0,0,3343,3347,0,0,0,3348,0,0,3351,0,0,
> 0,0
> -,0,0,3354,0,0,0,0,0,0,0,0,0,0,3355,0,0,3365,3366,3367,0,0,0,0,0,0,3368,3369,0,
> -
> 3370,0,0,3373,0,0,3376,0,0,3377,0,3379,3387,0,0,0,0,0,3390,0,0,0,0,0,0,0,3402,
> 0,
> -
> 3403,3436,3437,3439,0,0,3441,0,0,0,3442,0,0,3449,0,0,0,3450,0,0,0,0,0,0,0,345
> 1,0
> -
> ,0,3452,0,3453,3456,0,3457,0,0,3458,0,3459,0,0,0,0,0,0,0,0,0,3460,0,0,3469,347
> 0,
> -
> 0,0,3475,0,0,0,3480,3487,3489,0,3490,0,0,3491,3499,0,3500,0,0,3501,0,0,0,3502
> ,0,
> -3514,0,0,0,3516,3517,0,0,0,3518,0,0,0,0,3520,3521,3522,0,0,3526,3530,0,0,0,0,
> -
> 3531,0,0,0,0,3536,0,0,0,0,0,0,0,3539,3541,0,0,3542,3544,0,3547,3548,0,0,3550,
> 0,
> -3553,0,0,0,0,0,0,0,3554,0,3555,0,3558,0,3559,0,0,0,0,0,0,0,0,3563,0,3581,0,0,0,
> -
> 3599,0,0,0,3600,0,3601,0,3602,3603,0,0,3606,3608,0,3610,3611,0,0,0,0,0,0,0,0,
> 0,
> -
> 3612,3616,3619,0,0,0,0,0,0,0,0,0,0,0,0,0,3624,3628,0,3629,3634,3635,0,0,0,0,0,
> 0,
> -
> 3636,0,3637,0,0,3638,3651,0,0,0,0,0,0,3652,3653,0,0,0,0,3656,3657,0,0,0,0,0,36
> 58
> -
> ,0,0,0,0,3659,0,3661,3663,3664,0,3665,0,3692,0,0,0,3694,3696,0,0,0,0,0,0,0,0,0,
> 0
> -
> ,0,0,3698,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3700,0,0,3701,0,0,0,3708,3709,0,0,0,3711
> -
> ,3712,0,0,0,0,0,3723,0,3724,3725,0,0,3726,0,0,0,0,0,0,3728,3729,0,3734,3735,3
> 737
> -
> ,0,0,0,3743,0,3745,0,0,3746,0,0,3747,3748,0,3757,0,3759,3766,3767,0,3768,0,0,
> 0,0
> -
> ,3769,0,0,3771,0,3774,0,0,0,0,0,0,3775,0,0,0,0,0,0,3776,0,3777,3786,0,3788,378
> 9,
> -
> 0,0,0,0,0,0,0,0,0,3791,0,3811,0,0,0,0,0,3814,3815,3816,3820,0,0,0,0,0,0,0,3821,
> 0
> -,0,3825,0,0,0,0,3835,0,0,3848,3849,0,0,0,0,3850,3851,3853,0,0,0,0,3859,0,3860,
> -
> 3862,0,0,0,0,0,3863,0,0,0,0,0,0,0,0,3873,0,3874,0,3875,3886,0,3887,0,0,0,0,389
> 2,
> -
> 3913,0,3914,0,0,0,3925,3931,0,0,0,0,3934,3941,3942,0,0,0,0,3943,0,0,0,3944,0,
> 0,0
> -
> ,0,0,3945,0,3947,0,0,0,3956,3957,0,0,0,0,0,0,0,0,0,3958,0,3959,3965,0,0,0,0,396
> 6
> -
> ,0,0,0,3967,0,0,0,3968,3974,0,0,0,0,0,3975,3977,3978,0,0,0,0,3980,0,3985,0,0,0,
> 0
> -
> ,0,0,0,0,3986,4011,0,0,4017,0,0,0,0,0,0,0,0,0,0,0,4018,0,0,0,0,4019,0,4023,0,0,0
> -,4027,4028,0,0,0,0,0,0,0,0,4031,4034,0,0,4035,4037,4039,4040,0,0,0,0,0,4059,0,
> -4060,4061,0,4062,4063,4066,0,0,4072,0,0,0,0,0,0,0,0,0,0,0,0,0,4088,0,0,0,0,0,
> -
> 4091,0,0,0,0,4094,4095,0,0,4096,0,0,0,0,0,4098,4099,0,0,0,4101,0,4104,0,0,0,41
> 05
> -
> ,4108,0,4113,0,0,4115,4116,0,4126,0,0,4127,0,0,0,0,0,0,0,4128,4132,4133,0,413
> 4,0
> -
> ,0,0,4137,0,0,4141,0,0,0,0,4144,4146,4147,0,0,0,0,4148,0,0,4311,0,0,0,4314,432
> 9,
> -
> 0,4331,4332,0,4333,0,4334,0,0,0,4335,0,4336,0,0,0,4337,0,0,0,4342,4345,4346,4
> 350
> -
> ,0,4351,4352,0,4354,4355,0,0,4364,0,0,0,0,4369,0,0,0,4373,0,4374,0,0,0,0,4377,
> 0,
> -
> 0,0,0,4378,0,0,0,4380,0,0,0,4381,4382,0,0,0,0,0,0,0,4384,0,0,0,0,4385,0,0,0,438
> 6
> -
> ,0,0,0,4391,4398,0,0,0,0,4407,4409,0,0,0,0,4410,0,0,4411,0,4414,4415,4418,0,4
> 427
> -
> ,4428,4430,0,4431,0,4448,0,0,0,0,0,4449,0,0,0,4451,4452,0,4453,4454,0,4456,0,
> 0,0
> -
> ,0,0,0,0,4459,0,4463,0,0,0,0,0,4466,0,4467,0,4469,0,0,0,0,0,0,0,0,0,0,0,0,0,4470
> -
> ,4471,0,4473,0,0,4475,0,0,0,0,4477,4478,0,0,0,4479,4481,0,4482,0,4484,0,0,0,0,
> 0,
> -
> 0,0,4486,0,0,4488,0,0,4497,0,4508,0,0,4510,4511,0,4520,4523,0,4524,0,4525,0,4
> 527
> -
> ,0,0,4528,0,0,0,0,4530,0,4531,0,0,4532,0,0,0,4533,0,0,0,0,0,4535,0,0,0,4536,0,0,
> -
> 0,0,0,4541,4543,4544,4545,4547,0,4548,0,0,0,0,4550,4551,0,4553,0,0,0,0,4562,0
> ,0,
> -
> 4571,0,0,0,4574,0,0,0,4575,0,4576,0,4577,0,0,0,4581,0,0,0,0,0,4582,0,0,4586,0,
> 0,
> -
> 0,4588,0,0,4597,0,4598,0,0,0,0,4616,4617,0,4618,0,0,0,0,4619,0,4620,0,0,4621,
> 0,
> -
> 4624,0,0,0,0,0,4625,0,0,0,0,4657,0,4659,0,4667,0,0,0,4668,4670,0,4672,0,0,0,0,
> 0,
> -
> 4673,4676,0,0,0,0,4687,0,0,0,0,4697,0,0,0,0,4699,0,4701,0,0,0,0,4702,0,0,4706,
> 0,
> -0,4713,0,0,0,4714,4715,4716,0,0,0,0,0,0,0,0,0,0,0,0,4717,0,0,4720,0,4721,4729,
> -
> 4735,0,0,0,4737,0,0,0,4739,0,0,0,4740,0,0,0,4741,0,0,0,0,0,4742,0,4745,4746,47
> 47
> -,0,0,0,0,0,0,0,0,4748,0,0,0,4749,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4751,
> -
> 4786,0,4787,0,4788,4796,0,0,4797,4798,0,4799,4806,4807,0,0,0,0,4809,4810,0,0
> ,0,0
> -
> ,0,0,4811,0,0,0,0,0,4812,0,4813,0,0,4815,0,4821,4822,0,0,0,0,4823,0,0,0,0,0,0,0,
> -
> 0,0,0,4824,0,0,0,0,4826,0,0,0,4828,0,4829,0,0,0,4843,0,0,4847,0,4853,4855,485
> 8,0
> -
> ,0,0,0,0,4859,0,4864,0,0,4879,0,0,0,0,4880,0,0,0,0,4881,0,4882,0,0,0,0,0,0,0,0,0
> -
> ,4883,0,0,0,0,4884,0,0,0,0,0,4886,4887,4888,4894,4896,0,4902,0,0,4905,0,0,491
> 5,0
> -,0,0,0,0,0,0,4916,4917,4919,4921,0,0,0,0,0,4926,0,0,0,0,4927,0,0,0,0,0,0,0,0,
> -
> 4929,0,4930,4931,0,4938,0,4952,0,4953,4957,4960,4964,0,0,0,0,0,0,0,5019,5020,
> -
> 5022,0,0,0,0,0,5023,0,0,0,5024,0,0,0,5025,0,0,0,0,5028,0,0,0,0,5029,5030,5031,
> 0,
> -5033,0,0,0,0,0,0,0,0,0,5034,5035,0,5036,0,0,5037,0,0,0,0,5038,0,0,5039,0,0,0,
> -
> 5041,5042,0,0,0,0,5044,5049,5054,0,5055,0,5057,0,0,0,5060,0,0,0,0,0,5063,0,50
> 64,
> -5065,0,5067,0,0,0,5068,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5076,0,0,0,0,0,0,
> -0,5077,0,0,5078,5080,0,0,5083,0,0,0,0,0,0,0,0,5085,0,0,0,0,0,0,5098,5099,5101,
> -
> 5105,5107,0,5108,0,5109,0,0,0,0,0,0,0,5110,0,0,0,0,0,5117,5118,0,5121,0,5122,
> 0,0
> -,5130,0,0,0,5137,0,0,0,5148,0,0,0,0,0,0,0,5151,5154,0,0,0,5155,0,0,5156,5159,
> -
> 5161,0,0,0,0,5162,0,0,0,0,5163,5164,0,5166,0,0,0,0,0,0,0,0,0,0,5167,0,0,0,5172,
> 0
> -
> ,0,0,0,0,0,5178,5179,0,0,5190,0,0,5191,5192,5194,0,0,5198,5201,0,0,0,0,0,5203,
> 0,
> -
> 5206,5209,0,0,0,0,0,0,5213,0,5214,5216,0,0,0,0,0,5217,0,0,0,0,0,0,0,0,5218,521
> 9,
> -
> 0,5231,0,0,5244,5249,0,5254,0,5255,0,0,5257,0,0,0,0,0,5258,0,5260,5270,0,5277
> ,0,
> -
> 0,0,0,0,0,5280,5281,5282,5283,0,0,0,0,0,5284,0,5285,0,0,0,0,0,5287,5288,0,0,0,
> 0,
> -
> 0,0,0,0,0,0,5289,5291,0,0,5294,0,0,5295,0,0,0,0,0,0,0,5304,0,0,5306,5307,5308,
> 0,
> -
> 5309,0,0,5310,0,0,0,0,5311,5312,0,5313,0,0,0,0,0,5316,0,0,0,5317,0,0,0,0,0,0,0,
> 0
> -
> ,0,5325,0,0,0,0,0,0,5326,0,5327,5329,0,5332,0,0,0,0,5338,0,0,0,0,0,0,0,0,5340,0,
> -0,5341,0,0,0,5342,0,5343,5344,0,0,5345,0,0,0,0,0,0,5347,5348,0,0,0,0,0,0,0,0,0,
> -
> 5349,0,5350,0,5354,0,0,0,0,5358,0,0,5359,0,0,5361,0,0,5365,0,5367,0,5373,0,0,
> 0,
> -
> 5379,0,0,0,5380,0,0,0,5382,0,5384,0,0,0,0,0,0,5385,0,0,0,0,5387,0,0,0,0,0,0,538
> 8
> -,5390,5393,0,0,0,0,0,0,0,0,0,0,0,5396,0,0,0,0,5397,5402,0,0,0,0,0,5403,0,0,0,
> -
> 5404,5405,0,0,0,0,0,0,0,0,0,0,0,0,5406,0,0,0,0,5410,0,0,5411,0,5415,0,0,0,0,541
> 6
> -,5434,0,0,0,0,0,0,0,0,0,0,0,5438,0,5440,0,0,0,0,0,0,5441,5442,0,0,0,5443,5444,
> -
> 5447,0,0,5448,5449,5451,0,0,0,5456,5457,0,0,0,5459,0,0,0,5461,0,0,0,0,0,0,0,0,
> 0,
> -
> 0,0,0,0,0,5464,0,5466,0,0,5467,0,5470,0,0,5473,0,0,5474,0,0,5476,0,0,0,0,0,0,0,
> 0
> -
> ,0,0,0,5477,0,0,0,0,0,0,0,5484,0,0,5485,5486,0,0,0,0,0,5488,0,0,0,0,0,0,0,5489,0
> -
> ,0,0,0,0,5507,0,0,0,5510,0,5511,0,0,5512,0,0,0,5513,0,5515,0,0,5516,5517,0,551
> 8,
> -
> 0,0,5522,0,0,0,0,0,5534,5535,0,0,5536,0,5538,0,0,5543,0,5544,0,0,5545,0,5547,
> 0,
> -5557,0,0,5558,0,5560,5567,0,0,0,0,5568,0,0,0,5571,5573,0,5574,0,5575,0,0,0,0,
> -
> 5577,0,0,5598,0,0,0,0,0,0,0,0,0,5600,5609,0,0,0,0,5610,0,0,5612,0,5624,0,5625,
> 0,
> -
> 0,0,5629,0,5641,0,5642,5643,0,0,0,0,0,0,5651,0,0,0,5652,5653,0,5661,5662,5678
> ,0,
> -
> 5679,0,0,0,0,5685,5686,0,0,0,0,0,5690,5692,0,5703,0,0,0,0,0,5706,0,0,0,0,5707,
> 0,
> -
> 0,0,0,0,0,5708,0,0,5709,0,5710,0,0,0,5712,0,5733,0,5734,5735,0,0,5744,5751,0,
> 0,0
> -,0,0,0,0,0,0,0,0,0,5752,0,5754,0,0,0,0,0,0,5757,5758,0,5760,5761,0,0,0,0,5763,
> -
> 5764,5765,0,5766,0,5767,5768,0,5770,0,0,0,0,5776,5780,0,0,0,0,5782,0,0,0,0,57
> 84,
> -0,0,5788,0,0,0,0,0,0,0,0,0,0,0,5797,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5799,0,0,5801,
> -
> 0,0,0,5811,0,0,0,0,0,0,5816,0,0,5827,0,0,0,0,0,0,0,0,5830,5831,0,0,5832,0,0,583
> 3
> -,0,5835,5844,5845,0,5846,0,0,0,0,0,5850,0,0,0,0,0,5852,0,5855,5857,0,0,5859,0,
> -
> 5861,0,0,5863,0,5865,0,0,0,5873,5875,0,0,0,5877,0,5879,0,0,0,5888,0,0,5889,58
> 91,
> -
> 0,5894,0,0,0,0,0,0,5895,0,5897,0,0,0,0,0,0,5907,0,5911,0,0,5912,0,5913,5922,59
> 24
> -
> ,0,5927,5928,0,0,0,0,5929,5930,0,5933,0,0,0,0,5949,0,0,5951,0,0,0,0,0,0,0,0,595
> 3
> -,0,0,5954,0,5959,5960,5961,0,5964,0,0,0,5976,5978,5987,5990,0,0,0,0,0,5991,0,
> -
> 5992,0,0,0,5994,5995,0,0,5996,0,0,6001,6003,0,0,0,0,6007,0,0,0,0,0,6008,0,0,60
> 09
> -
> ,0,6010,0,0,0,6011,6015,0,6017,0,6019,0,6023,0,0,0,0,0,0,0,6025,0,0,0,0,0,0,0,0,
> -
> 0,0,6026,0,6030,0,0,6032,0,0,0,6033,6038,6040,0,0,0,6041,6045,0,0,6046,0,0,60
> 53,
> -
> 0,0,6054,0,6055,0,0,0,0,0,0,6057,0,6063,0,0,0,6064,0,6066,6071,6072,0,0,0,0,0,
> 0,
> -
> 6075,6076,0,0,6077,0,0,0,0,0,0,0,0,0,6078,6079,0,0,0,0,0,0,0,0,6080,0,6083,0,0,
> 0
> -
> ,0,0,6084,0,0,6088,0,6089,0,0,6093,6105,0,0,6107,0,6110,0,0,0,6111,6125,6126,
> 0,0
> -,0,6129,0,0,0,0,6130,0,0,0,6131,6134,0,0,0,0,0,0,6142,0,0,0,0,0,6144,0,0,6146,
> -
> 6151,6153,0,6156,0,6163,0,6180,6181,0,0,0,0,0,6182,0,0,0,0,6184,6195,0,0,6206
> ,0,
> -6208,0,0,6212,6213,6214,0,6215,0,0,0,6228,0,0,0,6234,0,0,0,0,0,0,6235,6240,0,
> -
> 6242,6243,6244,0,6250,6255,0,0,0,0,0,6257,0,0,0,6258,6278,0,6284,0,0,0,6285,0
> ,0,
> -0,0,0,0,0,0,6286,0,0,0,6320,0,0,6322,6332,0,0,0,0,0,0,0,0,6334,0,0,0,0,0,0,0,
> -
> 6335,0,0,6337,0,6338,0,6339,6340,0,0,6356,6357,6369,0,0,0,6370,6371,6372,0,6
> 373,
> -0,0,0,0,0,6376,0,0,0,0,0,6382,6383,6384,0,0,0,0,6386,0,6389,6397,6400,6411,0,
> -6414,0,0,0,0,0,0,0,6415,6416,0,0,0,0,0,0,6417,0,0,0,0,6418,0,0,0,0,0,0,0,6420,0,
> -
> 6421,6423,6425,0,6429,6430,0,6433,6438,0,0,0,0,0,0,0,0,0,0,6439,6440,0,0,6441
> ,0,
> -
> 0,6444,0,0,0,0,6446,0,0,0,0,6447,6448,0,0,6450,0,0,0,6454,0,0,6455,0,6461,0,0,
> 0,
> -
> 0,0,0,6462,0,0,6463,0,6464,0,6465,6467,0,0,0,6468,0,6479,6480,0,0,0,0,0,0,0,64
> 81
> -
> ,0,0,6485,6487,0,0,0,0,0,0,6493,0,0,0,0,0,0,0,0,6494,6495,6496,0,0,0,0,0,6498,0,
> -0,0,6507,6508,0,0,0,0,0,0,0,0,0,0,6511,6512,0,0,0,0,6513,0,0,0,6514,0,0,0,0,0,
> -
> 6516,0,0,6517,6518,0,0,0,6519,6520,6521,0,6523,0,0,0,0,6524,6528,0,6530,0,0,6
> 532
> -,0,6578,0,0,0,6583,0,6584,0,0,0,6587,0,0,0,6590,0,6591,0,0,0,0,0,6592,0,0,0,0,
> -6593,6594,0,0,0,0,0,6599,6600,0,0,6601,6602,6604,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
> -
> 6608,0,0,0,0,0,0,0,0,6610,6611,0,6615,0,6616,6618,6620,0,6637,0,0,0,0,6639,0,
> 0,0
> -
> ,0,6641,0,6642,0,0,0,6647,0,6660,6663,0,6664,0,6666,6669,0,6675,6676,6677,0,
> 0,0,
> -0,0,0,0,0,0,6678,0,0,0,6679,0,6680,0,0,0,0,0,0,0,6693,0,0,0,0,0,0,0,0,0,6704,
> -6705,6706,0,0,6711,6713,0,0,0,0,0,6716,0,0,0,6717,0,6719,6724,0,0,0,0,0,0,0,0,
> -
> 6725,6726,0,0,0,0,0,6728,6729,6735,0,6737,6742,0,0,6743,6750,0,6751,0,0,6752,
> -
> 6753,0,0,0,0,0,0,6754,0,0,0,0,0,6756,0,0,0,0,0,0,6763,0,0,6764,6765,0,0,0,6770,
> 0
> -,0,0,6776,6780,0,6781,0,0,0,6783,0,6784,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
> -6785,0,0,0,6792,0,0,0,6793,0,0,6802,0,0,0,0,0,6803,0,0,0,6804,0,0,0,6812,0,0,
> -
> 6823,0,6824,6839,0,0,0,0,6852,0,0,6854,0,6856,6857,0,0,0,0,0,0,0,0,0,6867,0,68
> 68
> -
> ,6870,6872,0,0,0,6873,6874,0,0,0,0,0,6875,0,0,6877,0,0,0,0,0,0,0,6878,0,0,0,687
> 9
> -
> ,0,6880,0,0,0,0,0,0,0,0,0,0,6887,0,6888,6891,6893,0,6895,0,0,0,0,0,0,0,0,6899,0,
> -
> 0,0,0,6901,0,0,0,0,6910,0,6911,0,0,6912,0,0,6913,6914,0,0,0,6915,0,0,0,6916,69
> 19
> -
> ,0,0,0,0,0,0,6924,0,6925,0,0,0,6926,6927,6928,0,6929,0,6930,0,0,6931,6935,0,6
> 936
> -
> ,0,0,0,0,6939,6940,6941,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6942,6948,6949,0,0,0,0,0,0
> -
> ,0,6952,6954,6963,6965,6966,0,0,6967,6968,0,0,0,0,0,0,0,0,0,6969,0,0,6970,697
> 9,0
> -
> ,0,6980,0,0,6983,0,0,0,0,0,6984,0,0,0,0,0,0,0,6988,6990,6992,0,0,0,0,0,0,0,6995,
> -
> 0,0,0,7012,0,0,0,0,0,0,0,0,0,7019,0,0,0,0,0,0,0,0,7021,0,0,7022,7023,7028,0,703
> 0
> -,7033,0,0,0,0,0,0,7038,0,0,0,0,0,0,0,0,0,0,7039,0,0,0,0,0,7046,0,7047,0,0,0,0,0,
> -0,0,0,0,0,0,7048,7052,0,0,0,0,0,7054,0,7060,0,0,0,0,7061,0,7065,0,0,0,0,7067,
> -
> 7069,0,7070,7071,7072,0,0,7078,0,7080,7081,0,7083,0,0,0,7084,7087,7088,0,0,7
> 090,
> -0,7093,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7107,0,0,7108,0,0,0,0,0,0,0,0,7110,0,7114,0
> -
> ,0,0,0,0,0,0,7115,0,7116,0,0,0,0,0,7117,0,0,7118,0,0,7124,0,7125,0,0,7126,0,0,0,
> -
> 0,7128,0,0,0,0,0,7129,0,7130,0,7132,7133,0,0,7134,0,0,7139,0,7148,7150,0,0,0,
> 0,
> -7152,0,0,0,7153,7156,7157,0,0,0,0,0,7158,0,0,0,0,0,0,0,0,0,0,7163,7165,7169,0,
> -
> 7171,0,0,0,0,0,0,0,0,0,7172,0,7173,7181,0,0,0,0,0,7182,7185,0,0,0,0,7187,0,720
> 1,
> -
> 7204,0,0,0,0,0,7206,7207,0,0,0,0,7211,7216,0,7218,0,0,0,0,7226,7228,7230,7232,
> -
> 7233,7235,7237,0,0,0,0,7238,7241,0,7242,0,0,7247,0,0,0,7266,0,0,0,0,0,0,0,728
> 9,0
> -
> ,0,7290,7291,0,0,7292,0,7297,0,0,0,0,0,0,0,0,0,0,7300,0,7301,0,0,0,0,0,0,0,0,0,0
> -,0,0,7302,0,0,0,0,7305,0,0,0,0,7307,0,7308,0,7310,0,7335,0,0,0,0,0,0,0,7337,0,
> -
> 7343,7347,0,0,0,0,0,7348,0,7349,7350,7352,7354,0,0,0,0,7357,0,7358,7366,0,73
> 67,
> -7368,0,0,7373,0,0,0,7374,0,0,0,0,0,0,0,7376,0,0,0,7377,0,0,0,0,0,7378,0,7379,
> -7380,0,0,0,0,0,7383,0,0,7386,0,0,0,0,7398,0,0,0,7399,7400,0,7401,0,0,0,0,0,0,0,
> -
> 7402,0,0,0,0,0,7405,0,0,0,0,0,7406,0,0,0,0,0,0,0,0,7421,7427,7429,0,0,0,7435,0,
> 0
> -
> ,7436,0,0,0,7437,0,0,0,0,0,0,7438,7443,0,7446,0,7448,0,0,0,0,0,0,0,0,0,0,7456,0,
> -0,0,0,0,7457,0,0,7461,0,0,0,0,0,7462,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7463,7466,7472,
> -0,7476,0,0,7490,0,7491,0,0,7493,0,0,0,7498,7499,0,0,7508,0,0,0,0,0,7512,0,0,0,
> -
> 7513,7514,7516,0,0,0,0,7518,0,0,7519,7521,7522,0,0,0,7526,0,0,7529,0,0,7531,0,
> -
> 7536,0,7538,0,7539,0,0,7541,7542,7546,0,0,0,0,0,7547,0,7548,0,0,0,0,0,7550,0,
> 0,
> -
> 7552,7553,0,0,0,0,0,0,0,0,0,0,7554,7563,0,7573,0,0,0,0,0,0,7574,7576,0,7578,75
> 81
> -
> ,7583,0,0,0,7584,0,7587,0,0,0,0,0,7589,0,0,0,7594,0,0,7595,0,0,7600,7602,7610,
> 0,
> -0,0,0,0,7612,0,7613,7614,0,0,7615,0,0,7616,0,7620,0,7621,7622,0,7623,0,0,0,0,
> -
> 7626,0,0,0,0,7627,7629,7631,0,0,7633,0,0,0,0,0,7639,0,7640,7642,0,0,7643,0,0,
> 0,0
> -
> ,7644,0,0,0,0,0,0,0,7645,0,0,0,0,0,7661,7662,7663,7665,0,7666,0,7667,0,7684,7
> 688
> -
> ,7690,0,7691,0,0,0,0,0,0,7692,0,0,7700,0,7707,0,7708,0,7709,0,7721,0,0,0,7722,
> 0,
> -
> 7724,0,0,0,0,0,0,7729,7731,0,7732,0,7733,7735,0,0,0,0,0,0,0,7739,0,0,7741,774
> 5,0
> -
> ,7748,0,0,0,7751,0,0,0,7752,0,0,0,0,0,0,0,7753,0,0,7756,0,7757,0,7759,0,7760,0,
> 0
> -
> ,0,0,7761,7768,0,0,7769,0,0,7770,0,0,7771,0,0,7772,0,0,7773,0,0,0,0,0,7778,778
> 3,
> -
> 0,0,0,0,0,7784,7785,0,7790,0,0,0,0,7792,0,7798,0,0,0,0,0,7799,0,7810,0,0,7813,
> 0,
> -
> 7814,0,7816,0,7818,7824,7825,7826,0,7828,7830,0,0,0,7840,0,7842,0,7843,0,0,0
> ,0,
> -
> 7844,0,0,0,0,0,0,0,7846,0,0,0,0,0,7856,7857,7858,7862,0,7865,0,0,7866,0,0,791
> 3,0
> -,0,0,0,7914,0,0,7915,7917,7918,7919,0,7920,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,7921,
> -
> 7922,0,7924,0,0,7925,0,0,7927,0,7930,7935,0,0,7937,0,0,0,0,0,0,7939,0,7940,0,
> 0,0
> -,0,0,7941,0,0,0,0,7945,0,0,0,0,7949,0,0,0,0,0,0,0,0,7950,0,7953,0,0,0,0,0,0,0,
> -
> 7968,0,0,0,0,7969,7972,7992,0,7993,0,0,0,0,0,0,0,0,0,0,0,7994,0,0,0,0,8007,800
> 8,
> -0,0,0,0,0,0,0,0,0,0,0,0,8010,0,0,0,8012,0,0,0,0,0,0,0,0,8018,0,8028,8029,0,0,
> -
> 8030,0,0,8032,8033,0,0,8034,8036,0,0,0,0,0,0,0,0,0,0,8037,0,0,0,8043,8052,805
> 9,
> -
> 8060,0,0,8061,0,0,0,8062,0,8063,0,8064,0,8066,8068,0,0,0,8080,8081,0,8089,0,0
> ,0,
> -
> 0,0,8092,0,0,0,0,0,0,8093,8110,0,0,0,0,0,0,0,8111,0,0,0,0,0,8112,8115,0,8117,0,
> 0
> -,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8120,8121,8122,8128,8129,8130,8131,0,0,8139,0,0,
> -
> 8144,0,0,0,0,8145,8146,8153,0,0,0,0,0,0,0,0,8154,0,8157,8160,8162,0,8164,8165
> ,0,
> -0,0,0,8166,8167,0,0,8179,0,0,0,8185,0,0,0,8186,0,0,8187,0,0,0,8188,0,0,0,0,0,
> -8204,0,0,0,0,8210,0,0,0,0,0,8213,0,8214,0,0,8215,0,0,0,0,0,0,8218,0,0,0,0,0,0,0,
> -0,0,8219,0,8221,0,0,8222,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8225,0,0,0,8233,0,0,
> -
> 8242,0,0,0,0,0,0,0,0,0,0,0,8247,0,8248,8252,0,8256,8257,0,0,8261,0,8264,8265,
> 0,0
> -
> ,0,0,8267,0,0,0,8269,0,0,0,0,0,0,0,0,0,8270,0,0,0,8278,0,8279,8283,0,0,8285,828
> 6
> -
> ,8289,8292,0,0,0,0,8293,8295,8299,8300,8301,0,0,0,0,0,0,8304,8307,0,0,0,0,0,0,
> 0,
> -
> 8321,0,0,0,8322,8323,8325,8326,8327,0,0,8332,8338,0,0,8340,0,0,0,0,0,8350,0,0,
> -8351,0,8354,8355,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8360,8372,0,0,0,0,0,0,0,0,8377,0,0,
> -
> 0,0,8380,0,0,0,8383,0,8384,0,0,0,0,8386,8392,0,0,8394,0,0,0,0,0,0,0,8396,8397,
> 0,
> -
> 8398,0,8399,0,0,0,0,0,8400,0,8401,8410,8411,0,8412,8413,8422,0,0,0,0,8423,0,0
> ,0,
> -
> 0,8424,0,0,8425,0,0,0,0,0,0,0,8441,8442,0,0,0,0,0,0,8443,0,0,8444,0,8447,0,0,0,
> 0
> -,8451,0,8458,0,8462,0,0,8468,0,8469,0,0,0,8470,0,8473,8479,8480,0,0,0,0,8481,
> -
> 8483,0,0,0,0,0,0,0,0,0,8484,0,0,8490,0,0,0,0,0,0,8491,8493,8494,0,8528,0,0,0,0,
> 0
> -
> ,0,0,8530,0,0,0,0,0,0,0,0,8534,8538,8540,0,0,8541,0,0,8545,0,8557,0,0,8569,857
> 0,
> -
> 0,0,8571,8574,8575,8579,0,8583,0,0,0,0,8591,0,0,0,0,0,0,0,0,8606,0,8607,0,0,0,
> 0,
> -
> 0,0,0,0,0,8608,0,0,8609,0,0,0,8610,0,0,0,8611,0,0,8613,8617,8621,0,0,8622,0,86
> 23
> -
> ,0,8624,8625,0,0,0,0,0,0,0,0,0,8637,8638,8639,8650,0,0,0,0,8652,8654,8655,0,0,
> 0,
> -0,0,0,0,0,0,0,8656,0,0,0,0,0,8657,0,0,0,0,0,0,0,0,0,8658,0,0,8659,0,0,0,0,0,0,0,
> -0,0,0,0,0,0,0,0,0,0,0,0,0,8660,0,0,0,0,0,0,8661,8663,8664,0,0,0,0,8665,0,8669,0,
> -
> 0,0,0,0,0,0,8671,8674,0,8684,0,8686,0,0,0,8689,0,0,0,8690,0,8706,0,0,0,0,0,0,0,
> 0
> -
> ,0,0,0,8710,0,8711,8713,8714,8724,8727,8728,8733,8736,0,8737,8739,0,0,0,0,87
> 42,
> -8743,8745,8754,0,0,0,0,8756,0,0,0,0,0,0,8757,8760,0,0,0,0,0,8762,8763,8764,0,
> -
> 8766,8769,8770,8773,0,8774,0,8779,0,0,0,0,8780,0,0,8781,0,0,8783,0,0,0,0,0,0,
> 0,0
> -,0,0,0,0,0,0,0,0,0,0,0,0,0,0,8784,0,0,0,0,0,0,0,0,8785,0,0,0,0,8786,0,0,0,0,8788
> -
> ,8790,0,0,0,8803,0,8813,8814,0,0,0,0,0,8815,8816,0,0,0,0,8818,0,0,0,0,8822,882
> 8,
> -8829,0,8831,0,0,0,0,8833,0,0,0,8834,0,0,0,8835,0,8836,0,0,0,8837,0,0,0,0,0,0,
> -8838,8839,0,0,0,0,0,0,0,0,0,0,0,8840,0,0,0,8841,0,8842,0,0,0,8846,0,0,0,0,0,0,0,
> -8847,0,8848,0,0,8864,0,0,8866,0,0,8870,8872,0,0,8873,8874,0,0,0,0,0,0,8875,0,
> -
> 8876,0,0,0,0,8896,8900,0,0,0,0,8901,0,0,0,0,0,8904,0,8907,0,0,0,0,8911,8912,89
> 13
> -,0,0,0,8914,0,8915,0,0,0,0,0,0,0,0,0,0,0,0,8916,0,0,0,8929,0,0,0,0,0,0,0,0,0,0,
> -
> 8930,0,8932,0,8943,0,0,0,8945,8947,0,0,0,0,8949,0,8950,0,8954,8957,0,0,8970,0
> ,0,
> -
> 0,0,8971,0,8996,0,0,0,0,8997,9000,0,0,0,0,9001,9002,0,9004,9009,9024,0,0,0,0,
> 0,0
> -
> ,0,0,0,0,0,0,9027,9082,0,0,9083,9089,0,0,0,0,0,0,9090,0,0,0,9092,0,0,9093,0,909
> 5
> -,0,0,9096,9097,9101,9102,0,0,0,0,0,0,0,0,9112,0,0,0,0,0,0,9114,0,0,9120,0,9121,
> -
> 9122,0,0,0,9123,9124,0,0,9125,0,0,9126,0,9127,0,0,9129,9131,0,0,0,9132,0,0,91
> 36,
> -0,9144,0,0,9148,0,0,0,0,0,0,9149,0,9152,9163,0,0,9165,0,0,0,0,0,0,0,0,0,0,0,0,0,
> -
> 9166,0,9169,0,0,0,0,0,0,0,9170,0,0,0,0,9172,0,9174,9175,9176,0,9177,0,0,0,0,0,
> 0,
> -0,0,9186,0,9187,0,0,0,9188,9189,0,0,9190,0,0,0,0,9191,0,0,0,9193,0,0,0,0,9197,
> -
> 9198,0,0,0,9208,9211,0,0,0,0,9216,9217,0,9220,0,0,0,0,9221,9222,9223,0,9224,9
> 225
> -
> ,0,0,9227,0,9228,9229,0,0,9230,0,9232,0,9233,0,0,0,0,0,9234,9235,0,0,9237,0,0,
> 0,
> -0,0,0,0,0,9238,9240,0,0,9241,0,0,0,0,9244,0,0,0,0,9247,0,0,0,0,0,0,0,0,0,0,9248,
> -0,0,0,9249,0,0,0,0,0,9250,0,0,0,0,9251,0,0,9252,9255,0,0,0,9256,0,0,0,0,0,0,0,
> -
> 9257,0,0,9258,0,0,0,0,0,0,9259,0,0,0,0,0,9262,9263,0,0,9265,9266,0,0,0,0,0,0,0,
> 0
> -,9268,9271,0,0,0,0,0,0,0,0,0,9273,0,0,0,9276,9277,9279,0,0,0,0,0,0,0,9280,0,0,
> -
> 9293,0,0,0,0,0,9297,9301,0,0,0,0,0,0,0,0,0,0,0,9308,9309,9313,9321,9322,0,932
> 6,
> -9327,0,0,9477,0,9479,0,0,0,0,9482,0,0,0,9483,0,9484,0,0,0,0,0,0,0,0,0,9485,0,0,
> -
> 9486,0,0,0,9489,0,0,0,0,9490,9491,0,0,0,0,9493,0,9495,9496,0,0,0,0,0,0,0,0,950
> 0,
> -
> 0,9502,0,0,0,0,0,9504,9507,0,9509,0,9511,0,0,9513,0,0,0,0,0,0,0,0,9515,0,0,0,0,
> 0
> -
> ,0,9516,9517,0,0,0,0,9532,0,0,9533,0,0,9538,0,9539,9540,0,0,0,0,9541,0,0,0,954
> 2,
> -
> 0,0,0,0,0,0,0,0,9544,9545,0,9546,0,0,0,0,0,0,9547,9548,0,0,0,9550,0,9557,0,955
> 8,
> -
> 0,9561,0,9563,9570,0,9572,9574,9575,0,0,0,9577,9592,0,0,9596,0,0,0,9598,0,96
> 00,0
> -
> ,9601,0,0,0,0,0,0,9608,0,9638,9639,0,0,0,0,0,0,0,9641,0,0,9643,9644,9645,9646,
> 0,
> -0,0,9648,0,0,0,0,0,0,0,9650,9654,0,0,0,0,0,0,0,0,9655,0,0,0,0,0,9656,0,9657,0,0,
> -0,0,9658,0,0,9659,0,0,9664,0,0,9665,0,9667,9669,0,0,0,0,0,0,0,0,0,0,0,0,9671,0,
> -
> 9673,9681,0,0,0,0,9682,9683,9684,0,0,0,0,9686,9698,0,0,9700,9701,9702,0,9703,
> -
> 9717,0,0,0,0,9718,0,9726,0,0,0,0,9727,0,0,0,9728,0,9742,0,9744,0,0,0,9750,0,97
> 54
> -
> ,9755,0,0,0,0,0,9756,0,9757,9768,0,9769,0,0,0,9770,9771,0,9773,0,9774,0,9775,
> 0,0
> -
> ,0,9776,9777,9784,0,0,0,9786,0,9789,0,0,0,0,9793,9794,0,0,0,9808,0,0,0,0,0,981
> 1,
> -
> 0,0,0,0,0,0,0,0,0,0,0,0,9812,0,9820,0,9823,0,9828,0,0,0,0,9830,0,0,9833,9836,0,
> 0
> -,0,9840,0,0,0,9841,0,0,9842,0,9845,0,0,0,9847,9848,0,0,9855,0,0,0,0,0,0,9856,
> -
> 9863,9865,0,0,0,0,0,0,0,0,9866,9867,9868,9873,9875,0,0,0,0,0,0,9880,0,9886,0,
> 0,0
> -
> ,9887,0,0,9891,0,0,0,0,0,0,0,9906,9907,9908,0,0,0,9909,0,0,0,0,0,0,9910,0,0,0,0,
> -
> 9913,0,0,0,0,9914,0,0,0,0,0,9922,0,0,0,0,9923,9925,0,0,0,0,0,0,9930,0,0,0,9931,
> 0
> -
> ,0,0,0,0,0,0,0,0,0,0,0,0,0,0,9932,0,9939,0,0,9940,9962,9966,0,9969,9970,0,0,997
> 4
> -
> ,0,9979,9981,9982,0,0,0,9985,0,0,0,0,0,0,9987,0,0,0,0,0,0,0,9988,9993,0,0,9994,
> 0
> -
> ,0,0,9997,0,10004,0,0,0,0,0,10007,10019,10020,10022,0,0,0,10031,0,0,0,0,0,100
> 32,
> -
> 0,0,10034,0,10036,0,0,0,0,10038,0,10039,10040,10041,10042,0,0,0,0,0,10043,0,
> 0,0,
> -0,0,10045,10054,0,0,0,0,10055,0,0,10057,10058,0,0,0,0,0,0,10059,0,0,0,0,0,0,0,
> -
> 10060,0,0,0,0,0,0,0,10063,0,10066,0,0,0,10070,0,10072,0,0,10076,10077,0,0,100
> 84,
> -0,10087,10090,10091,0,0,0,10094,10097,0,0,0,0,0,0,10098,0,0,0,0,0,0,10103,0,
> -
> 10104,0,10108,0,0,0,0,0,0,0,0,10120,0,0,0,10122,0,0,10125,0,0,0,0,10127,10128
> ,0,
> -
> 0,10134,0,10135,10136,0,10137,0,0,10147,0,10149,10150,0,0,10156,0,10158,10
> 159,
> -
> 10160,10168,0,0,10171,0,10173,0,0,0,10176,0,0,0,0,10177,0,0,0,0,10178,0,0,0,0,
> -
> 10194,0,10202,0,0,10203,10204,0,10205,10206,0,10207,0,0,0,0,10209,0,0,0,0,0,
> 0,0,
> -
> 10213,0,0,0,0,0,0,10217,0,10229,0,10230,10231,0,0,10232,0,0,10237,10238,102
> 44,0,
> -
> 0,0,0,0,10250,0,10252,0,0,0,0,0,0,10255,0,0,10257,0,0,0,0,0,0,10258,0,10259,0,
> 0,
> -
> 0,0,0,0,0,0,10260,0,0,0,0,0,0,0,10284,10288,10289,0,0,0,10290,0,10296,0,0,0,0,
> 0,
> -
> 10297,0,0,0,0,0,0,10298,0,0,0,0,10299,10303,0,0,0,0,0,10306,0,0,0,10307,0,103
> 08,
> -0,0,0,0,10311,0,0,0,0,0,0,0,10315,10317,0,0,0,10318,10319,0,10321,0,10326,0,
> -
> 10328,0,0,0,0,10329,0,0,10331,0,10332,0,0,0,0,0,0,10334,0,0,10335,10338,0,0,0
> ,0,
> -
> 0,10339,10349,0,0,0,0,0,0,10351,0,10353,0,0,0,0,0,0,10362,0,10368,0,10369,0,0
> ,0,
> -
> 10372,10373,0,0,0,0,0,10374,0,0,0,10375,0,10376,0,0,10386,10388,10390,0,0,0,
> 0,0,
> -0,0,10391,0,0,10392,10394,0,0,10396,0,10397,0,10403,0,0,0,0,0,0,0,0,10404,0,
> -
> 10405,10410,0,0,10411,0,10412,0,0,0,0,0,0,0,10421,10422,10423,0,0,0,0,0,0,0,0
> ,0,
> -
> 10425,0,0,10427,0,0,10430,0,0,0,0,0,10432,0,10433,10434,0,0,0,0,10436,10437,
> 0,
> -
> 10438,0,10439,0,10444,10446,0,0,0,0,0,10448,0,0,0,0,0,10449,0,0,0,0,0,0,0,104
> 51,
> -0,10453,0,0,0,10454,10457,0,0,10459,0,10469,0,0,0,0,0,10472,10481,0,0,0,0,0,
> -10482,10483,0,10492,0,0,0,0,0,0,0,0,0,0,10499,0,0,0,10502,0,0,10510,0,10521,
> -
> 10524,0,0,10525,10526,10528,0,0,0,0,0,0,0,0,10530,0,0,0,0,10533,0,10534,0,0,0
> ,0,
> -
> 0,0,0,0,0,0,10535,10536,0,0,10544,0,10553,10556,0,10557,10559,0,0,0,0,0,1056
> 2,
> -
> 10563,10564,0,10565,0,0,0,10566,0,10567,0,0,0,0,10575,0,0,10576,0,10578,0,0,
> 0,0,
> -
> 0,0,0,0,0,0,10585,10586,10587,10589,0,10590,0,0,10594,0,0,0,0,0,10598,0,0,106
> 01,
> -
> 0,0,0,10602,0,10603,0,10604,0,10605,0,0,10607,0,10626,0,10627,0,0,0,0,0,1062
> 9,
> -
> 10630,10631,0,0,0,10646,0,0,0,10647,0,10650,0,10651,0,0,0,10652,10653,10655
> ,0,
> -
> 10658,0,0,10659,0,10667,0,0,0,0,10669,0,0,0,0,0,0,0,0,0,10670,0,0,0,10671,0,0,
> 0,
> -
> 0,10672,10673,0,10674,0,0,0,10676,0,0,0,0,0,0,10678,0,10682,0,0,10692,0,1069
> 7,0,
> -0,0,0,10698,0,0,0,10700,0,0,0,0,0,10703,0,10704,0,0,0,0,0,0,0,10705,0,10715,
> -
> 10718,10720,0,0,10722,0,0,0,0,0,0,0,0,10723,0,0,0,0,10726,0,0,0,0,0,10727,107
> 30,
> -10743,0,0,0,0,0,0,10744,0,0,10745,0,0,0,0,0,0,10748,0,0,0,0,10750,0,0,10752,
> -10753,0,0,0,10756,0,0,0,0,0,0,10758,0,0,0,10759,0,10769,0,0,10772,0,0,0,0,0,0,
> -
> 10773,0,0,0,10777,0,0,10779,0,0,0,0,0,0,0,0,10780,10784,0,0,0,10789,0,0,0,107
> 91,
> -0,0,0,0,0,0,0,0,0,10795,0,0,10796,0,10808,0,10809,0,0,0,10810,0,0,0,10812,0,0,
> -
> 10814,0,0,0,0,0,0,0,0,0,10815,0,0,0,0,10816,10817,0,0,0,0,10819,0,10820,0,0,0,
> 0,
> -
> 10821,10822,10823,0,10826,10849,0,0,0,0,10850,0,0,10852,0,10853,0,0,10856,0
> ,0,
> -
> 10857,10858,10859,10860,0,0,0,0,0,0,10863,0,10866,10867,10872,10890,0,0,10
> 891,
> -
> 10892,0,0,0,0,0,10893,0,0,0,10896,10899,0,0,10900,10902,0,0,0,0,0,10903,0,0,0
> ,0,
> -0,0,0,0,0,0,0,0,10905,0,10906,0,0,0,0,10908,10911,0,10912,0,0,10916,0,0,0,0,0,
> -
> 10917,0,10918,0,0,0,10923,0,0,0,0,0,10924,0,0,10928,10929,0,0,10930,0,0,0,109
> 32,
> -0,0,0,0,10939,0,0,10945,0,0,0,10947,0,0,10948,0,0,0,0,0,0,0,0,0,0,0,0,10958,0,
> -10960,10962,0,0,10964,0,0,0,10966,0,0,0,0,0,0,0,0,0,0,10967,0,0,0,10968,0,0,0,
> -
> 10973,0,0,0,0,0,10975,0,0,0,10976,10978,0,0,10982,10984,10987,0,0,10988,0,10
> 989,
> -0,0,10991,0,0,0,0,10992,0,0,0,10993,0,10995,0,0,0,10996,10997,0,0,0,10998,0,
> -
> 10999,0,11001,0,0,0,0,0,0,11010,11012,0,11013,11016,11017,0,0,11019,11020,1
> 1021,
> -
> 0,0,0,0,0,0,0,0,0,0,0,0,11022,0,0,11023,11029,0,0,0,0,11031,0,0,0,11034,0,0,0,0,
> -
> 11055,0,0,0,0,0,11056,11060,0,0,0,0,0,0,11061,0,0,11064,11065,0,11066,0,1106
> 9,0,
> -11085,0,0,0,0,0,11086,0,0,0,11088,0,0,0,11094,0,0,0,11095,11096,0,0,0,0,0,0,
> -
> 11097,11098,0,0,0,0,0,0,11099,0,0,11102,11108,0,0,0,11109,0,11114,11119,0,11
> 131,
> -0,0,0,11142,0,0,11143,0,11146,0,11147,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11148,0,
> -
> 11149,11152,11153,11154,0,11156,0,11157,0,0,0,11158,0,0,11159,11160,0,0,0,0
> ,0,0,
> -
> 0,0,0,0,0,0,11163,0,0,11164,11166,0,0,0,11172,11174,0,0,0,11176,0,0,0,0,0,111
> 82,
> -
> 11183,0,0,0,11184,11187,0,0,11188,11189,0,0,0,0,0,0,11194,0,0,0,0,0,0,0,11200,
> -
> 11202,0,0,0,0,0,0,11203,0,11204,0,0,0,0,0,11205,0,0,0,11206,0,11207,0,0,11209
> ,0,
> -
> 11211,0,11214,0,0,11231,0,0,0,11293,11295,0,0,11296,11297,11302,0,0,0,11307
> ,0,0,
> -
> 0,0,11309,11310,0,11311,0,0,0,11313,0,11314,0,0,0,0,11334,0,11338,0,0,0,1133
> 9,0,
> -
> 0,0,0,0,11340,0,11341,11342,0,11344,0,11345,0,0,0,11348,11349,0,0,11350,0,0,
> 0,
> -
> 11355,0,0,0,0,0,0,11356,0,11357,11370,0,0,11371,0,11374,11376,0,0,0,11377,0,
> 0,
> -
> 11378,11383,0,11386,11399,0,11400,11406,0,0,0,11408,0,0,11409,11412,0,0,0,0,
> -
> 11417,0,0,0,11418,0,11421,0,11426,11429,0,0,0,0,0,11430,0,11437,0,11438,0,0,
> 0,0,
> -0,11440,11453,0,0,0,0,0,0,11454,0,0,0,0,11455,0,0,11456,11460,11461,11463,0,
> -
> 11469,0,11473,0,0,0,0,11474,0,0,0,11475,0,11476,11477,11480,0,0,0,0,11481,0,
> 0,
> -11484,0,0,11487,0,0,0,0,0,0,0,0,0,0,11497,0,0,11502,0,11509,0,0,11510,11511,
> -
> 11513,0,0,0,0,0,0,0,0,0,0,11515,0,0,0,0,11516,0,11520,11521,0,0,0,0,0,0,0,0,0,0,
> -0,11529,11530,11531,11534,0,0,11543,0,0,0,0,0,11547,0,11548,0,0,0,0,0,11552,
> -
> 11556,0,11557,0,0,11559,0,11560,0,0,0,0,0,0,11561,0,0,11563,11564,0,11565,0,
> 0,0,
> -
> 0,11567,0,0,0,11569,0,11574,0,11575,0,0,0,11577,0,11578,0,0,0,11580,11581,0,
> 0,0,
> -
> 11582,11584,0,0,0,0,0,0,0,11587,0,11588,11591,0,11595,0,0,0,0,0,0,0,0,11596,0,
> -
> 11597,0,0,0,0,11598,11601,0,0,0,11602,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,11603,
> -11604,0,11606,0,0,11608,0,0,0,0,11610,0,0,11611,0,0,0,0,11613,0,11622,0,0,0,
> -
> 11623,0,0,0,0,11625,0,0,11626,11627,11628,11630,0,0,0,0,0,0,11639,0,0,11646,
> 0,
> -11648,11649,0,11650,0,0,0,0,0,0,0,0,0,11651,0,0,11652,11653,11656,0,0,11677,
> -
> 11679,0,0,0,0,11680,0,0,11681,0,11685,0,0,0,0,0,0,0,0,11688,0,0,0,11716,0,117
> 19,
> -0,0,0,0,0,11721,0,0,11724,11743,0,0,0,0,0,0,0,0,11745,11748,11750,0,0,0,0,0,
> -11751,0,0,0,11752,11754,0,11755,0,0,0,0,0,0,0,11759,0,0,0,0,0,0,11760,0,0,0,
> -
> 11761,0,0,0,0,0,0,11766,11767,0,11772,11773,0,11774,0,0,11775,0,11777,0,0,0,
> 0,0,
> -
> 0,0,0,0,0,0,0,0,0,0,0,0,0,0,11778,11780,0,0,0,0,0,0,0,11783,0,11784,0,0,0,11785,
> -
> 0,0,0,11786,0,0,0,0,11788,0,0,11789,11791,11792,0,0,0,0,11795,11834,11835,11
> 836,
> -
> 0,0,11837,0,0,0,11838,0,0,11846,11851,0,11852,0,11869,0,0,0,11871,0,0,0,1187
> 2,
> -11874,0,0,0,0,0,0,11875,0,11876,11877,0,0,0,0,0,0,0,0,0,0,11883,0,0,0,0,0,0,0,
> -
> 11884,0,11885,0,11886,0,0,11887,0,11894,11895,11897,11909,11910,0,11912,11
> 918,0,
> -
> 0,11920,0,11922,11924,11927,11928,0,0,0,0,11929,0,11934,0,0,0,0,0,11941,119
> 43,
> -
> 11944,0,11945,0,0,0,0,11948,11949,0,0,0,0,11953,0,11954,0,11955,0,11956,0,0,
> 0,0,
> -
> 0,11957,0,0,11959,0,0,0,0,0,0,0,0,11961,0,0,0,0,0,11978,0,0,0,11979,11980,119
> 86,
> -
> 11987,0,11992,0,0,0,0,0,11993,0,0,0,11994,0,11999,12004,12005,12006,0,0,0,0,
> 0,
> -
> 12011,0,0,12012,12014,0,0,12015,0,0,12019,12028,0,0,12029,0,0,12032,12033,0
> ,0,0,
> -
> 0,12034,0,12041,12043,0,0,12044,0,0,0,0,0,0,0,12046,0,0,0,0,0,0,0,12054,12055
> ,0,
> -
> 12056,0,0,0,12060,12064,0,0,0,0,0,12065,12067,12068,0,0,0,0,0,0,0,0,12074,0,0
> ,0,
> -
> 12075,12076,0,0,0,12079,0,12081,12086,12087,0,0,12088,0,0,0,0,12089,0,12092
> ,0,0,
> -0,0,12097,0,0,0,0,0,0,0,0,12098,0,0,0,0,0,0,0,0,0,0,0,0,0,12102,12103,12104,
> -
> 12111,0,0,12114,12116,0,0,0,12118,0,0,0,12119,12120,12128,0,0,0,0,12130,0,0,
> 0,0,
> -
> 0,0,12131,0,0,0,12132,12134,0,0,0,0,12137,0,12139,0,12141,0,0,12142,0,0,0,121
> 44,
> -
> 0,0,0,0,0,12145,0,12148,0,12153,0,0,0,0,12154,12171,12173,0,0,0,12175,0,0,0,0,
> -12178,0,0,0,0,0,0,0,12183,0,0,0,0,0,0,0,0,12184,0,0,0,12186,0,0,0,0,0,12187,
> -
> 12188,0,0,12189,0,12196,0,12197,0,0,12198,0,12201,0,0,0,0,12203,0,12209,0,0,
> 0,0,
> -12210,12211,12212,12213,0,12217,12218,0,0,0,0,0,0,0,0,0,12222,0,0,0,0,0,0,0,
> -
> 12223,0,0,12229,0,0,0,0,12233,0,0,0,0,12234,0,0,12236,12242,0,0,0,12243,0,0,0,
> -
> 12244,12253,0,12254,12256,0,12257,0,0,12275,0,0,0,0,0,12277,0,0,0,0,0,12278,
> 0,
> -
> 12289,0,0,12290,0,12292,12293,0,0,12294,0,12295,0,0,12296,0,12297,0,12298,0
> ,0,0,
> -
> 0,12301,0,0,0,0,0,0,0,0,0,0,0,0,0,12309,0,12338,12340,0,0,0,0,12341,0,0,0,0,0,0,
> -0,0,12342,12343,0,12344,0,0,0,0,0,0,0,0,0,12345,0,0,0,0,0,0,0,0,12346,0,0,0,0,
> -12348,0,0,0,0,0,0,0,0,0,0,0,0,12350,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12351,0,12355,
> -
> 12356,12357,0,0,12367,12370,12371,0,0,0,0,0,12372,12376,0,0,0,0,0,0,0,0,1237
> 9,0,
> -
> 12382,0,12383,0,0,12384,0,0,0,0,12393,0,0,12394,0,0,0,0,12398,12403,0,0,1240
> 4,0,
> -
> 0,0,0,0,0,0,0,0,0,0,0,0,12410,0,0,0,12411,0,0,0,12412,0,0,0,0,12420,0,12421,0,0,
> -
> 0,0,0,12423,0,12425,12429,0,0,0,12431,12432,0,0,0,0,0,0,0,0,0,0,0,0,12434,0,0,
> 0,
> -
> 0,0,12435,12436,0,0,0,0,0,0,0,0,12437,0,0,0,0,0,12438,0,0,0,0,0,0,0,0,12445,0,0,
> -
> 0,12450,12451,0,0,0,0,0,0,0,0,12452,12475,0,0,12493,12494,0,0,0,12495,0,0,0,0,
> -
> 12496,12502,12509,0,0,0,0,12510,0,12512,12513,0,0,0,0,12514,0,0,0,12515,0,12
> 520,
> -0,0,0,12524,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12527,0,0,0,12528,0,0,0,12529,0,0,0,
> -
> 0,0,12530,0,12535,0,0,12536,0,12538,0,0,0,0,0,0,0,0,0,0,0,0,12540,0,12548,0,0,
> 0,
> -
> 0,0,12550,0,0,0,12551,12552,0,0,0,12554,0,0,0,0,0,0,0,0,12555,0,0,12562,0,125
> 65,
> -
> 0,12566,0,0,0,0,0,0,0,0,0,0,0,0,12569,0,0,0,12571,12574,0,0,0,0,0,0,0,12577,0,0,
> -
> 0,0,0,0,0,12578,12579,12603,0,12608,0,0,12611,0,12612,0,12615,0,12625,0,0,0,
> 0,
> -12627,12646,0,12648,0,0,12657,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12670,0,0,12671,0,
> -
> 12673,12677,0,0,0,0,0,0,0,0,0,0,0,12679,0,12681,0,12682,12693,0,12694,0,1269
> 7,0,
> -
> 12701,0,0,0,12703,12704,0,0,0,0,12707,12737,0,0,12739,0,0,12740,0,0,12742,12
> 743,
> -
> 0,0,0,0,0,0,0,0,0,12745,0,12746,12747,0,12748,0,0,12759,12767,0,0,0,0,12773,0,
> -
> 12774,12778,0,0,0,0,0,0,0,12779,0,0,0,0,0,12780,12793,0,12824,0,12825,0,1283
> 6,0,
> -
> 0,0,0,12839,0,12842,0,0,0,0,0,0,0,0,0,0,0,0,12843,12845,0,12846,0,0,0,0,12847,
> 0,
> -
> 0,12850,12852,12853,0,0,0,12854,0,0,0,12855,0,12856,0,12858,0,0,12859,0,128
> 62,0,
> -
> 12863,0,0,12866,0,12869,12872,12873,0,0,0,0,0,0,0,0,0,12875,0,12877,0,0,1287
> 8,0,
> -
> 0,0,0,0,0,0,0,0,12884,12885,12888,0,12889,0,0,0,0,12893,0,0,0,12895,12896,128
> 98,
> -
> 0,0,0,0,0,0,0,12902,0,12909,12910,0,12926,0,12928,0,0,0,12929,0,12930,0,0,0,0,
> -
> 12931,0,12932,12933,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,12934,0,12942,0,0,0,0,1294
> 4,
> -
> 0,0,0,0,0,0,0,0,12946,0,0,12948,0,0,12949,0,0,0,0,12950,0,0,0,0,12951,0,12952,
> 0,
> -
> 12953,0,0,0,12954,12958,12959,0,0,0,0,0,12960,12964,0,0,0,0,0,12966,0,0,0,0,0
> ,0,
> -
> 0,0,12970,0,12971,0,0,0,0,0,0,12972,0,0,12982,0,0,0,12984,12985,0,12986,1299
> 6,
> -
> 12997,13001,13002,0,0,0,0,13004,0,0,13005,0,0,13007,13009,0,13017,0,0,0,130
> 20,0,
> -
> 13021,0,0,0,0,0,0,0,0,0,0,13022,0,0,0,0,0,0,0,0,13024,13027,0,0,0,0,0,13028,0,0,
> -
> 13029,0,0,0,0,0,0,0,13032,0,13037,0,0,0,0,0,0,13040,0,0,13041,0,0,0,13043,130
> 44,
> -
> 13046,0,0,0,0,13047,0,0,0,0,0,0,0,13049,13054,0,13056,0,0,13060,13061,0,0,0,0
> ,0,
> -13067,0,0,13068,0,13071,0,0,0,0,0,13077,13078,0,0,0,0,0,13079,13080,13081,0,
> -
> 13082,0,0,0,13085,0,0,0,0,0,0,0,13086,0,13087,13088,0,0,0,0,0,13094,0,13099,0,
> -
> 13100,0,0,0,13101,0,13125,13126,13128,13129,0,0,13130,0,13131,0,0,0,0,0,0,13
> 134,
> -0,0,0,0,0,0,0,0,0,0,0,13150,0,13168,0,0,0,0,0,0,0,0,0,13169,0,0,13170,0,0,0,0,
> -
> 13174,0,0,0,13176,0,0,0,0,0,13177,0,13178,13183,13187,0,0,0,13189,0,0,13190,
> 0,0,
> -13191,0,0,13206,0,0,0,13207,0,0,0,0,0,0,0,0,0,0,13212,0,0,13219,13232,0,0,0,
> -
> 13241,0,13249,13253,0,0,0,0,0,13255,13259,0,13260,13261,0,13262,0,13272,0,0
> ,0,0,
> -13276,0,0,0,0,13277,13299,0,0,13301,13302,0,0,13303,0,0,13305,0,13310,0,0,0,
> -
> 13311,0,0,0,0,13325,0,13328,0,0,0,13329,0,0,0,0,0,0,13330,0,0,13331,0,13335,0
> ,0,
> -
> 13342,0,0,0,0,0,13343,0,13354,0,13362,0,13366,13367,13369,0,0,13371,13372,0,
> -
> 13373,13374,0,13376,0,13380,13381,13386,0,13387,13388,0,13389,13391,13395
> ,0,0,0,
> -0,0,13401,13409,0,13410,0,0,0,0,13420,0,0,0,0,0,13422,0,0,0,0,13423,0,0,0,0,
> -
> 13425,0,0,0,0,0,13427,0,0,0,13428,0,0,13430,13438,0,13439,0,13445,0,13448,13
> 449,
> -
> 0,0,0,0,0,0,13451,0,13457,0,0,0,0,13458,13459,0,13460,0,0,0,0,13464,13465,134
> 66,
> -
> 13470,0,13471,13472,13474,13475,0,13476,0,0,13478,13479,0,13481,0,0,0,0,13
> 487,0,
> -13490,0,13493,0,0,13494,0,0,13495,0,0,0,0,0,0,0,0,0,0,0,0,0,0,13496,13497,0,
> -
> 13500,0,0,13516,13522,0,0,13525,13528,0,0,0,13530,13535,0,13537,13539,0,13
> 540,0,
> -
> 13543,0,13544,0,0,0,0,0,0,13545,0,0,0,0,0,0,13547,0,0,0,13549,13555,0,0,0,135
> 56,
> -
> 13557,0,0,0,0,0,0,0,13558,0,13563,0,0,0,0,13564,0,0,0,0,0,0,0,0,13566,0,0,0,0,0,
> -0,13569,0,0,13571,0,0,0,0,13573,0,0,0,0,0,0,13578,0,0,0,0,0,0,0,0,0,0,13581,0,
> -
> 13586,0,13595,0,13600,0,0,0,0,0,0,0,0,13601,13603,0,13604,13605,13606,13607
> ,0,0,
> -
> 13617,13618,0,0,0,0,0,0,0,13623,0,13625,13627,0,0,0,0,0,0,0,0,13629,0,0,0,136
> 34,
> -
> 0,0,0,13638,0,0,0,0,0,0,0,0,13654,0,0,0,0,0,0,0,0,0,0,13656,0,13659,0,0,13660,0,
> -
> 0,13662,0,0,0,13663,0,13664,0,0,0,0,0,13668,0,13669,13671,0,0,13672,0,0,0,0,0
> ,0,
> -
> 13675,13685,0,13686,0,0,0,13687,0,0,0,13692,13694,13697,0,0,0,13702,0,0,0,0,
> 0,
> -
> 13705,0,0,0,0,13707,0,0,0,13714,0,0,0,0,0,0,0,0,0,13715,0,13716,13717,0,0,137
> 19,
> -
> 13724,13730,13731,0,0,0,0,0,0,0,0,13732,0,0,0,0,0,0,0,13734,0,13736,0,0,13737,
> -
> 13738,13747,0,13751,0,0,13752,0,0,0,13753,0,13757,0,0,13762,13763,0,13764,1
> 3765,
> -
> 0,13766,0,0,13767,0,0,0,13768,0,0,0,0,0,0,0,13769,0,0,13772,0,13775,0,0,0,0,0,
> 0,
> -
> 0,0,0,0,0,0,0,0,0,0,0,0,13776,13778,13787,0,0,0,13797,0,13798,0,13801,0,13804,
> -
> 13806,0,0,0,0,13816,13817,0,0,0,0,0,0,0,0,0,0,0,0,0,13834,0,13836,0,0,13838,0,
> 0,
> -
> 13839,0,13840,0,0,0,0,13842,0,0,0,0,0,0,13843,0,0,0,0,0,0,0,0,0,13845,0,0,0,0,0,
> -
> 13858,0,0,13860,0,0,13861,0,0,13862,13863,0,13868,0,13869,13870,0,0,0,0,0,0,
> 0,0,
> -
> 0,0,13872,0,0,0,0,13873,13878,0,0,0,0,0,0,0,0,0,0,13886,0,13888,13889,13890,0
> ,0,
> -
> 13891,13894,0,13897,13899,13900,13904,0,0,13906,0,0,0,13909,0,0,0,13910,0,0
> ,0,
> -13911,0,0,0,0,0,13912,13917,0,0,0,0,13918,0,13919,0,0,13920,0,0,0,13921,0,0,
> -
> 13922,0,0,0,0,0,0,0,13924,0,13927,0,0,0,0,0,13932,0,13933,0,13934,0,0,13935,0,
> -
> 13944,0,0,0,13954,0,0,13955,0,0,0,0,13956,0,13957,0,13967,13969,0,0,0,0,0,0,0
> ,0,
> -
> 0,0,0,0,13970,13990,0,13991,13994,0,13995,0,0,0,0,13996,0,0,13999,0,0,0,1401
> 8,0,
> -
> 14019,0,14021,0,0,0,0,0,0,14041,0,0,0,0,0,0,0,0,14043,0,0,0,0,14046,0,0,0,1404
> 8,
> -
> 14049,0,0,0,0,0,0,0,0,0,0,14051,0,0,14052,14056,0,14063,0,14064,14066,0,0,140
> 67,
> -0,0,0,0,0,0,0,0,0,14068,0,0,0,14072,0,14074,14075,0,14076,14079,14085,14086,
> -
> 14087,14093,0,0,0,0,14095,0,0,0,0,0,0,14096,14097,0,0,0,0,0,0,0,14098,0,14102
> ,0,
> -
> 0,0,0,0,14103,0,0,0,14104,0,0,14105,0,0,0,14107,14108,0,0,14109,0,0,0,0,0,0,0,
> 0,
> -14117,0,0,0,0,14118,0,0,0,0,14119,0,0,14120,0,0,14121,0,14122,14127,0,14128,
> -
> 14136,0,0,14138,0,14140,0,0,0,14141,14142,0,0,0,0,14146,0,0,14149,0,14151,0,
> 0,0,
> -
> 14152,0,0,14153,0,0,0,0,0,0,0,0,0,14154,0,14156,14157,0,0,14159,0,14161,0,0,0
> ,0,
> -14162,0,0,0,0,0,0,14163,0,0,14173,0,0,0,0,0,0,14174,0,0,14176,0,0,14178,0,0,
> -14179,14181,0,0,14182,14185,14187,0,14190,0,0,14197,0,0,0,0,0,0,0,0,0,0,0,0,
> -
> 14198,0,0,0,0,0,0,14199,14200,0,0,0,14204,0,0,14208,0,0,0,0,0,0,0,0,0,0,0,1423
> 1,
> -0,0,0,0,0,0,0,0,0,14234,0,0,14235,0,0,0,14240,14241,0,0,0,14246,0,0,0,14247,0,
> -14250,0,0,14251,0,0,14254,0,0,14256,0,0,0,14260,0,14261,0,0,0,0,14262,14267,
> -
> 14269,0,0,14277,0,0,14278,0,14279,14282,0,0,0,14283,0,0,0,14284,14285,0,0,0,
> 0,
> -
> 14286,0,0,0,14288,0,0,0,14289,0,14290,0,14293,14301,14302,14304,14305,0,14
> 307,0,
> -
> 14308,14309,0,0,0,0,0,0,0,0,0,0,0,14311,14312,0,0,14317,0,0,0,0,0,0,0,14318,0,
> 0,
> -
> 0,0,14320,0,0,0,0,14321,14322,0,0,0,0,0,14326,14329,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
> -
> 14330,14331,0,0,0,0,14332,0,0,0,14333,0,0,14337,14340,0,14341,0,0,14342,0,14
> 345,
> -
> 14346,0,0,14347,0,14362,0,0,0,0,0,14364,14365,14371,0,14373,0,0,14374,0,143
> 79,0,
> -
> 14400,0,0,0,0,0,14401,0,0,14405,0,14406,0,14408,14409,0,0,0,14417,0,0,14424,
> 0,0,
> -
> 0,0,0,0,0,0,0,14430,0,0,0,14431,0,0,14435,0,14440,0,0,0,0,0,0,14442,0,0,14443,
> 0,
> -
> 0,0,0,0,14446,0,0,0,0,0,0,0,14454,0,14457,0,14460,0,0,14466,0,0,0,0,0,14467,0,
> 0,
> -
> 0,0,0,0,14469,0,14477,0,0,0,0,0,0,14478,14482,0,0,0,14483,0,0,0,14485,14486,0
> ,0,
> -
> 0,14487,14488,14489,14492,14493,14494,14495,14496,14497,0,14499,0,14501,0
> ,0,0,0,
> -
> 0,0,0,0,0,0,14502,0,14507,14512,14513,14514,0,0,0,0,0,0,0,0,0,0,0,14515,14526,
> -
> 14530,0,14537,0,14544,0,14547,0,0,14548,14550,14551,0,0,14552,0,0,0,14553,0,
> -14554,0,0,0,0,14556,14564,0,0,14565,14566,0,0,0,0,0,0,14568,0,0,14569,0,0,0,
> -
> 14571,14576,0,0,14577,14578,14579,0,0,14580,0,0,0,0,14582,0,0,0,0,0,0,0,0,0,0
> ,0,
> -0,14583,0,0,0,0,0,14587,0,14588,0,0,14600,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
> -
> 0,14601,0,0,14604,14605,14611,0,14613,0,0,0,0,14615,0,0,0,0,0,0,14627,0,1462
> 8,0,
> -
> 0,0,0,14631,0,14633,14634,0,0,0,0,14635,0,0,0,0,0,0,0,0,14636,0,0,14639,14642
> ,0,
> -
> 0,0,0,14644,0,0,0,0,14645,14646,0,14653,0,0,14654,0,14658,0,14661,0,0,0,1466
> 5,0,
> -0,0,14668,0,0,0,0,0,0,0,0,0,14669,0,0,14670,0,0,0,14680,0,0,14681,0,0,0,0,0,
> -
> 14682,14683,0,0,0,0,14686,0,0,0,0,14687,14697,0,0,0,0,14699,14705,14711,0,0,
> 0,0,
> -0,0,0,0,0,0,14712,0,0,0,14713,0,0,0,0,14719,0,14720,14721,14726,0,0,0,14728,
> -
> 14729,0,0,0,0,14731,0,0,0,0,0,0,0,14733,14736,14737,0,0,14740,14742,0,0,0,147
> 44,
> -
> 14753,0,0,0,0,14755,14758,14760,0,0,0,0,0,14761,14762,14765,14771,0,14772,0,
> -
> 14773,14774,0,0,14775,0,0,14776,0,0,0,0,14777,0,14779,0,0,14782,0,0,14785,14
> 786,
> -
> 14788,0,0,0,0,0,14795,0,0,0,0,0,0,14798,0,14803,14804,14806,0,0,0,14809,0,0,0
> ,0,
> -
> 0,0,14810,0,0,0,0,14811,0,14812,0,0,0,0,0,14815,0,0,0,0,0,0,0,0,14816,0,14818,
> 0,
> -
> 0,0,0,0,0,14819,0,14820,0,14823,0,0,0,14824,0,0,14826,14827,0,0,0,0,0,0,0,0,0,
> 0,
> -0,0,14830,0,0,0,0,0,14833,0,14845,0,0,0,0,0,14846,0,0,14847,14871,0,14873,0,
> -
> 14876,0,14877,14878,14880,0,0,0,0,0,14881,0,14882,14894,0,0,0,0,14895,0,149
> 07,0,
> -
> 14908,0,0,0,0,0,0,0,14911,0,0,0,0,14920,0,0,14931,0,14932,14934,14935,0,0,149
> 36,
> -
> 0,14945,0,0,0,0,0,0,0,14947,0,0,14948,14949,14951,0,0,14952,0,0,0,14964,1497
> 3,0,
> -
> 0,14990,0,0,0,0,14995,0,0,14998,15001,0,0,15002,15020,0,0,0,0,0,0,15021,0,150
> 22,
> -0,0,0,0,15023,0,0,15025,15029,15033,0,0,0,15034,0,0,0,15035,0,0,0,0,0,15043,
> -
> 15044,0,0,0,15045,15046,15048,15050,0,15065,0,0,0,0,15066,0,0,15075,15082,1
> 5084,
> -
> 0,0,15085,15086,0,0,0,0,0,0,0,0,15088,0,0,0,15089,0,0,0,0,15094,0,15096,0,150
> 97,
> -
> 0,15100,0,0,15102,0,0,0,0,0,0,0,0,15105,0,0,15106,0,15109,15113,0,0,0,15115,0,
> -
> 15118,0,0,0,0,0,0,15119,0,0,15120,0,0,0,0,0,15123,15129,0,0,0,15130,0,15131,0
> ,0,
> -15134,0,15135,0,0,0,15137,15138,0,0,0,0,0,0,15139,0,0,0,0,0,15140,0,0,15154,
> -
> 15162,0,15169,15170,0,15175,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15177,0,15178,15179
> ,0,
> -
> 0,0,0,0,15183,0,0,0,0,0,0,0,0,0,0,0,0,15185,15187,0,15194,15195,15196,0,0,0,0,
> 0,
> -
> 0,0,15204,0,0,0,0,15206,0,0,0,0,0,15207,0,0,0,0,0,0,0,0,0,15213,0,15214,0,0,0,0,
> -
> 0,0,0,15232,0,0,0,0,15234,0,15238,15240,0,15248,0,0,0,0,15250,15251,0,0,0,0,0
> ,0,
> -
> 0,15252,0,0,0,15255,15262,15266,0,0,0,15267,0,0,0,15277,15279,0,0,0,15280,15
> 281,
> -15282,0,0,0,0,0,15285,0,0,0,0,15289,0,0,15291,0,0,0,0,0,0,0,15296,15297,0,0,
> -
> 15304,0,0,0,0,15306,0,0,0,0,0,0,15307,15308,0,15309,0,0,15311,0,0,15312,1531
> 3,0,
> -
> 0,0,0,0,0,0,0,0,0,0,0,15314,15317,0,0,0,15318,15319,0,0,0,0,15320,0,0,0,0,0,0,0,
> -0,0,0,0,0,0,0,0,0,15321,0,0,0,0,0,15324,0,15325,15326,0,15330,0,0,0,0,15334,0,
> -
> 15335,0,15341,0,0,15342,0,0,15343,15344,0,0,0,0,15345,0,0,0,0,15347,0,0,1534
> 8,
> -
> 15349,15350,0,15356,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15357,0,15358,0,0,0,0,0,0,0,
> -15359,15360,15364,0,15380,0,0,0,0,0,15392,0,0,15393,0,15395,0,0,0,0,0,0,0,0,
> -
> 15396,0,0,15397,15398,0,0,0,0,0,0,0,0,0,15399,0,15400,0,0,0,15402,0,15405,154
> 10,
> -
> 0,0,0,0,15411,0,0,0,15412,0,15416,0,0,0,0,0,0,0,15428,0,15435,0,0,15438,0,0,0,
> 0,
> -
> 15439,0,0,0,15440,0,0,0,15441,15449,15451,0,0,0,0,0,0,0,15452,0,0,15455,0,0,0,
> -
> 15456,0,0,15458,0,15460,15461,0,0,0,0,0,15462,15464,0,15465,0,0,15466,0,0,15
> 467,
> -0,0,0,0,0,15468,0,0,0,0,15481,0,0,15484,0,15485,15486,0,0,0,15487,0,0,0,0,0,
> -15488,0,15492,15498,0,0,0,15499,0,0,0,15500,0,15501,0,0,15512,0,15522,0,0,0,
> -
> 15524,0,15525,15526,0,0,15527,0,0,15545,15546,0,15548,15552,0,15553,0,0,0,1
> 5554,
> -
> 0,15555,0,15557,15565,15573,15577,15578,0,15582,0,15583,0,0,0,0,0,0,0,0,0,0,
> 0,0,
> -0,15586,0,0,0,0,0,0,0,0,0,0,0,0,0,0,15588,0,0,0,0,0,15589,0,0,0,0,0,0,0,15593,
> -
> 15594,0,0,0,0,15595,0,0,0,0,0,0,15596,0,0,0,15597,0,0,0,0,15600,0,0,15601,0,0,
> 0,
> -0,15602,15603,0,0,0,0,0,0,15604,0,15609,0,0,15612,0,0,15613,0,0,15615,15617,
> -15618,0,0,15620,0,15636,15637,0,0,15649,0,0,0,0,0,0,0,15650,0,0,15651,0,0,0,
> -15656,0,15658,0,0,0,15664,0,0,15665,0,0,15668,0,0,0,0,0,15669,0,0,15674,0,0,
> -
> 15675,0,0,0,0,15676,0,0,0,0,0,0,0,0,0,0,0,15677,0,0,0,0,15678,0,0,0,0,0,15679,0,
> -
> 0,15681,0,15686,0,0,0,0,15687,0,15688,0,0,15690,0,0,0,15697,0,15699,15700,0,
> 0,0,
> -
> 0,0,0,0,0,0,15701,0,15702,15703,0,15704,0,15705,0,15707,0,15709,0,15712,157
> 16,0,
> -15717,0,15718,15720,0,0,0,0,0,15724,0,0,0,15725,0,15726,0,0,0,15740,0,15745,
> -
> 15746,0,0,15747,0,15748,0,0,0,0,0,15749,0,0,0,15752,0,15753,0,0,0,0,0,0,15759
> ,0,
> -0,0,15765,0,0,0,0,0,0,0,0,0,15767,0,0,0,15771,0,0,15784,0,0,0,0,15785,15790,
> -
> 15791,0,0,15792,0,0,0,15807,0,15811,0,0,0,0,0,0,0,0,0,0,0,0,15818,0,0,0,15819,
> 0,
> -
> 0,0,0,15821,0,0,0,0,0,15822,15824,0,0,15827,0,0,15829,15831,0,15832,0,0,1583
> 3,0,
> -
> 15835,15838,15839,15843,0,0,0,0,0,0,0,0,0,0,0,15844,0,0,0,0,15845,15851,1585
> 6,0,
> -0,0,0,0,0,0,15858,15860,0,15861,0,0,0,15864,0,0,0,0,15865,0,0,0,0,0,0,15866,0,
> -
> 15872,0,0,15876,0,0,0,0,15877,15878,15883,15885,0,0,15888,0,0,0,0,0,15889,15
> 890,
> -
> 0,0,0,0,0,0,0,0,15892,0,0,0,0,0,0,0,15893,0,0,15894,0,0,0,15895,0,15896,15897,
> 0,
> -
> 15898,15901,15902,0,15911,15915,0,15916,0,15924,15935,0,15937,0,0,0,0,0,15
> 950,0,
> -
> 0,0,0,0,0,0,15958,0,0,0,15961,0,0,15966,0,15967,0,0,15977,0,0,15978,0,0,15981,
> -
> 15982,15983,0,0,0,0,0,0,0,15986,0,0,0,15990,0,15991,15995,15998,0,15999,0,16
> 000,
> -0,0,0,0,16008,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16009,16011,0,16013,0,0,0,0,
> -
> 0,0,0,0,16014,0,0,16015,16023,16024,16025,0,0,16026,0,16030,0,16032,0,16033
> ,0,0,
> -
> 0,0,0,0,16035,16036,16037,0,0,0,0,0,16039,0,0,0,0,16041,0,0,0,0,0,16043,16044
> ,0,
> -
> 0,16047,0,0,0,16048,0,0,16049,16050,16052,0,0,0,0,0,16055,0,0,0,0,0,0,0,0,160
> 56,
> -
> 0,0,0,0,0,0,0,16058,16060,16061,0,0,16063,0,0,16064,0,0,0,16067,16068,0,0,160
> 69,
> -16078,0,0,0,16079,0,0,0,16080,0,16081,0,0,0,16088,0,0,0,0,0,0,0,0,0,0,0,16089,
> -16093,0,16097,0,16103,0,16104,16105,0,0,16256,0,0,16259,0,0,0,0,0,0,0,16260,
> -
> 16261,0,0,16262,0,0,16263,0,16268,0,0,0,0,0,0,0,16269,0,0,16270,16273,0,1627
> 4,0,
> -
> 0,0,0,16275,16276,16277,16280,0,0,0,16281,16284,0,0,0,16286,0,16289,0,0,0,0,
> 0,0,
> -
> 0,0,0,16290,0,0,0,0,16291,0,0,0,0,0,0,0,16292,0,0,0,0,0,0,0,0,16293,16295,1629
> 7,
> -
> 0,16302,0,16304,0,16305,0,16306,0,0,0,0,0,0,0,0,0,0,0,0,16307,16308,16312,0,0
> ,0,
> -
> 0,0,0,16313,16315,0,16318,0,0,0,16321,0,0,0,0,0,0,0,16326,16333,16336,0,0,0,0,
> -
> 16337,16340,0,0,0,0,0,16345,0,0,16346,0,0,0,0,0,0,0,0,0,16347,0,0,16348,0,0,0,
> 0,
> -
> 16349,0,0,0,16350,0,16357,0,0,0,0,16359,16360,0,0,0,0,16362,16363,16364,163
> 65,0,
> -0,16366,0,0,0,0,16367,16368,0,16369,16374,0,0,0,0,0,0,0,16376,0,0,0,0,16378,
> -
> 16379,0,16380,0,0,0,16381,16383,0,0,0,0,0,16390,0,0,0,16399,0,16402,16404,16
> 406,
> -
> 16407,0,0,0,16409,16411,0,0,0,0,16412,0,16413,16415,16423,0,0,0,0,0,16424,0,
> 0,0,
> -
> 16428,16434,16435,16449,0,16450,16451,0,0,0,16453,0,0,0,0,0,0,0,0,0,0,0,0,0,0
> ,0,
> -
> 16454,0,0,16456,16458,0,0,16459,0,0,16460,0,0,0,0,16462,0,16463,0,0,16466,0,
> 0,0,
> -
> 0,0,16479,0,0,16480,0,16481,16484,0,0,0,0,0,0,0,0,0,0,16485,0,0,0,0,0,0,16489,
> 0,
> -0,0,0,0,16491,0,0,16498,0,0,16503,0,16505,0,0,0,0,0,0,0,0,16506,0,0,0,16508,
> -
> 16509,0,0,0,0,0,0,0,0,16511,16513,0,0,0,16516,0,16517,0,16519,0,16529,0,0,165
> 31,
> -0,0,0,0,0,0,16534,0,0,16541,16542,0,0,0,0,0,0,0,0,0,16543,16547,16548,0,0,0,
> -16551,0,16552,0,0,0,16553,0,0,16558,0,0,16562,16565,0,0,0,16570,0,0,0,16573,
> -
> 16585,0,0,0,16586,16587,16595,0,16596,0,16598,0,0,0,16600,0,0,0,0,0,0,0,0,0,0
> ,0,
> -0,0,16601,0,0,0,0,16603,0,0,0,0,0,0,0,16604,16612,0,0,0,0,16613,0,16618,0,0,0,
> -
> 16640,0,0,16641,0,0,0,0,0,0,16645,0,0,0,0,16646,0,0,0,0,0,0,16651,0,0,0,0,1665
> 3,
> -
> 16654,0,0,0,16655,0,0,16656,16667,0,0,0,0,16671,0,16672,0,0,0,16673,0,0,0,0,0,
> -
> 16676,0,16686,0,0,0,0,16689,0,16690,0,16692,0,16693,0,16694,0,16696,0,0,0,16
> 705,
> -0,0,0,0,0,0,16707,0,0,0,16709,0,0,0,0,16711,0,16712,16713,0,0,0,16715,0,0,0,0,
> -
> 16716,0,0,0,0,0,0,0,0,0,16718,16724,0,0,16726,16727,0,0,0,0,0,0,0,16728,0,167
> 29,
> -
> 0,0,16730,0,0,0,0,0,16731,0,0,0,16732,0,0,0,0,16734,16738,0,0,0,0,0,0,0,0,1674
> 3,
> -0,0,16745,0,0,0,0,0,16749,0,16752,0,0,0,0,16756,0,0,16758,0,16759,0,0,0,0,0,
> -
> 16760,0,0,0,0,0,0,0,16762,0,16769,0,16770,0,16772,0,0,0,16777,16780,0,0,0,0,0
> ,0,
> -
> 16781,0,0,16782,0,16784,0,0,16785,16787,16792,0,0,16794,0,0,0,16798,0,0,168
> 09,0,
> -
> 0,16814,16816,16817,0,16819,0,0,0,0,0,0,0,0,0,0,16820,0,0,16836,16839,0,0,168
> 41,
> -
> 16851,16857,0,0,16858,16859,0,0,16860,0,0,0,0,0,0,0,0,16862,0,16863,0,0,0,0,0
> ,0,
> -0,16864,0,0,0,0,0,0,0,16876,0,16881,16882,0,16885,16886,0,16887,0,0,0,16889,
> -
> 16891,0,0,0,0,0,16894,16895,0,0,0,0,0,0,0,0,0,0,0,16897,0,16898,0,0,0,0,0,1691
> 3,
> -
> 0,0,16924,16925,16926,0,0,16927,0,0,0,16937,16938,0,0,0,16940,16941,0,0,0,16
> 942,
> -
> 16945,0,16946,16949,16950,0,0,0,16952,16955,0,0,0,16965,0,16969,0,0,16975,0
> ,0,
> -
> 16976,0,0,0,0,16978,0,0,16981,0,16983,16989,0,0,0,0,16990,0,0,16991,0,0,0,169
> 93,
> -
> 0,16994,16996,17000,0,0,0,0,0,17002,17004,0,17006,0,0,17007,0,0,0,0,17008,17
> 013,
> -
> 17014,0,0,0,0,0,0,0,0,0,17021,0,17031,0,0,0,0,0,17033,17036,0,17038,0,0,17039
> ,0,
> -
> 17045,0,0,17046,17047,0,0,0,0,17048,0,17049,17050,0,17051,17053,0,17054,0,1
> 7055,
> -
> 0,0,0,0,0,17063,0,0,17064,0,0,0,0,0,0,0,17065,0,0,17068,0,0,0,0,0,17072,0,0,0,0,
> -0,0,17073,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,17074,0,17080,0,0,0,0,0,0,0,0,0,0,
> -
> 0,0,0,0,0,0,0,0,0,0,0,17081,17083,17084,0,0,0,17085,0,0,0,0,17092,0,0,0,0,0,0,0,
> -
> 0,0,17093,0,17095,17102,0,0,0,0,0,0,17103,0,0,17105,0,17107,0,0,0,0,17114,0,0
> ,0,
> -
> 0,0,17115,17125,17127,0,0,17128,0,0,0,17129,17130,0,17131,0,0,0,0,0,17132,17
> 135,
> -17145,0,0,0,0,0,0,0,0,17146,0,17147,0,17148,0,0,0,0,0,0,17149,17150,0,17151,
> -
> 17153,0,17155,0,0,0,0,17163,17171,0,17174,0,0,0,0,17179,0,0,17182,17185,0,0,
> 0,0,
> -0,17186,0,0,17188,0,0,0,0,0,0,0,17189,17191,0,17194,0,0,0,0,0,0,0,0,0,17195,
> -
> 17196,17203,17204,0,0,17205,17217,0,0,0,0,0,17218,0,0,0,0,17219,0,17220,0,17
> 221,
> -
> 0,0,17230,0,0,0,0,0,17236,0,17238,17239,0,0,0,17241,17244,0,0,17245,0,17248,
> 0,0,
> -
> 17251,0,17252,0,0,17264,0,17266,0,0,0,17268,0,0,0,0,17271,17272,0,17273,0,17
> 295,
> -0,17302,0,17305,0,0,0,17306,0,0,0,0,0,0,0,17308,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
> -17309,0,17310,17313,0,0,0,0,17314,17315,0,17317,0,0,0,0,17318,0,0,0,0,0,0,0,
> -
> 17320,0,0,0,0,0,0,17334,0,17344,17348,0,0,0,17350,17351,0,0,17353,0,0,17354,
> 0,0,
> -
> 0,0,0,0,0,0,0,17355,0,0,0,0,0,0,17356,17357,0,0,17359,0,0,0,17371,0,17372,0,0,
> 0,
> -
> 17393,0,0,0,0,17394,0,0,0,0,0,17395,0,0,17399,0,0,0,17401,17417,0,17418,0,174
> 19,
> -
> 0,0,0,0,0,17422,17423,0,0,0,0,0,17424,0,0,0,0,0,17428,17429,17433,0,0,0,17437
> ,0,
> -0,17441,0,0,17442,0,0,17453,0,0,0,0,0,0,0,0,17454,17456,17462,0,0,17466,0,0,
> -
> 17468,0,0,17469,0,0,0,0,17470,0,17475,0,0,0,0,0,17479,0,0,0,17483,17484,0,174
> 85,
> -0,17486,0,17491,17492,0,0,17493,0,17494,17495,0,0,0,17496,0,0,0,17497,0,0,0,
> -
> 17502,0,0,0,0,0,17503,0,17505,0,17507,0,0,0,17512,17513,17514,0,0,17515,0,0,
> 0,
> -
> 17519,0,0,0,17522,0,0,17523,0,0,0,0,0,0,0,0,0,17527,0,0,0,17528,0,0,0,17534,0,
> 0,
> -
> 0,0,17536,0,0,0,17539,0,17540,17543,17549,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1755
> 6,
> -0,0,17558,0,17559,0,0,17560,0,0,0,17563,0,0,0,0,0,0,17564,0,0,17565,17566,0,
> -17567,0,0,0,0,0,0,17569,17570,0,17575,0,0,0,0,0,0,0,0,0,0,0,17581,0,0,0,17582,
> -
> 17583,0,17586,0,0,17587,0,0,0,0,0,0,0,17588,0,0,0,0,17596,17597,0,0,17598,176
> 00,
> -0,0,0,0,0,0,17601,0,0,0,17604,0,0,17605,0,0,17607,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
> -0,0,0,0,17612,0,0,17618,0,17621,17622,0,0,0,0,17623,0,0,17624,0,0,17630,0,0,
> -
> 17631,17633,17634,0,0,0,0,0,0,0,17635,0,0,17636,0,0,17637,0,17638,0,17640,0,
> 0,0,
> -0,0,0,0,0,0,0,17641,0,0,0,0,0,0,0,0,0,0,17643,0,0,0,0,17645,0,0,0,0,0,0,0,0,
> -
> 17646,17662,0,0,0,0,0,0,0,0,0,17663,17664,0,17665,17666,0,0,0,17669,17671,17
> 673,
> -
> 0,17679,0,0,0,0,0,0,0,17684,0,0,0,17686,0,17714,0,0,17720,17722,17726,0,0,177
> 28,
> -
> 0,0,17729,0,0,0,17732,0,17733,0,17734,0,0,0,17735,0,0,0,0,17737,0,0,0,0,17739
> ,0,
> -
> 0,0,17741,17742,0,0,0,0,17743,17744,17745,0,0,0,17749,0,17750,17751,17752,1
> 7754,
> -17761,17762,0,17763,0,17766,0,17772,0,0,0,0,0,17775,0,0,0,0,0,0,0,17776,0,0,
> -17777,0,0,17778,17779,0,17782,17783,0,0,0,0,0,0,0,0,0,0,17784,0,0,0,0,0,0,0,
> -
> 17821,0,0,0,17822,0,0,0,17823,17825,0,0,0,0,0,17826,17831,17832,17833,0,0,17
> 845,
> -
> 0,0,0,17846,0,0,0,17848,17850,17854,0,17855,0,0,17859,0,0,0,0,0,0,17860,1786
> 1,0,
> -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,17870,17871,0,0,0,0,0,0,17872,0,0,0,17879,0,
> -
> 0,0,17881,17883,0,17884,0,17885,0,0,17886,0,0,17887,17891,17953,0,0,0,0,179
> 54,0,
> -
> 0,17955,0,17968,0,0,17972,0,0,0,0,0,17974,0,0,0,0,17976,17978,0,0,17983,0,0,0
> ,0,
> -
> 18003,0,0,0,0,0,18007,0,0,0,0,0,18009,0,0,0,0,0,0,0,18010,0,0,0,0,0,0,18012,0,0,
> -
> 18014,0,0,0,18015,0,0,0,18016,0,18017,0,0,0,18030,0,0,0,0,0,0,0,18031,0,0,180
> 36,
> -
> 18037,18038,0,0,18049,18056,0,18057,18058,0,18059,0,0,0,0,0,0,0,0,18062,0,0,
> 0,0,
> -
> 18064,0,0,0,0,0,0,0,0,18067,0,0,0,18068,0,0,18075,0,0,18078,18093,18094,0,0,0
> ,0,
> -
> 0,0,0,0,18097,0,0,0,0,0,18098,18100,0,0,0,18108,0,18111,0,0,18112,0,18113,0,0,
> -
> 18115,18116,0,18118,0,0,0,0,18121,0,0,0,0,18123,0,0,0,0,0,0,0,0,0,18124,0,0,0,
> 0,
> -18125,18126,0,18127,0,0,18128,18135,0,0,0,0,0,0,0,0,0,18150,0,0,0,0,0,18151,
> -
> 18152,0,0,18156,18164,0,18166,18171,0,0,0,0,0,0,0,0,0,18172,18183,0,18184,0,
> 0,0,
> -
> 0,18185,0,18187,0,0,0,0,0,18188,0,0,0,0,0,0,0,0,18189,0,0,18190,0,0,18191,181
> 92,
> -0,0,18194,18195,18196,0,0,0,18197,0,18203,0,18204,0,0,0,0,18205,0,0,0,18207,
> -
> 18208,0,0,18214,0,0,0,18215,18216,0,0,0,18220,0,0,18222,0,0,0,0,0,18223,0,182
> 25,
> -18231,0,18234,0,18235,0,0,0,0,18240,0,0,18241,18242,0,0,0,0,0,18243,18251,0,
> -
> 18253,0,18254,0,0,0,18266,0,0,0,0,0,0,18269,18270,18271,18273,18281,0,0,0,0,
> 0,0,
> -
> 0,0,0,0,0,0,18282,0,18283,0,18284,0,0,0,0,0,0,18285,0,18287,18289,0,0,18290,0
> ,0,
> -0,0,18308,0,0,0,18310,0,0,0,0,0,0,0,0,0,0,0,0,18311,0,18312,18313,0,18315,0,0,
> -18316,18320,0,18331,0,18332,0,18336,0,0,0,0,18337,0,18340,0,0,0,0,0,0,0,0,0,
> -
> 18341,0,18344,18345,0,18346,0,0,0,0,0,18348,0,18351,0,0,18356,0,0,0,0,0,0,183
> 57,
> -
> 0,0,0,0,0,18367,0,0,0,18368,0,18369,0,18370,18371,0,0,0,18437,18444,0,0,0,0,0
> ,0,
> -
> 0,0,0,0,0,0,0,0,18445,18450,0,0,0,0,18451,0,18452,0,0,0,18453,0,0,0,0,0,18455,
> 0,
> -0,0,18456,0,18457,0,18460,0,0,18461,0,0,0,0,0,0,0,0,18466,0,0,18467,0,0,0,0,
> -
> 18473,0,0,0,18476,0,18477,0,0,0,18478,18479,18480,0,0,0,18485,0,0,0,18486,0,
> 0,0,
> -
> 0,0,0,18488,18490,0,0,0,0,0,0,18491,0,0,0,0,0,18495,0,0,18496,0,0,0,0,0,0,1850
> 5,
> -
> 0,18521,0,18522,18523,0,0,0,18525,18526,0,0,0,0,0,18527,0,0,0,0,18532,18533,
> 0,
> -18534,0,0,0,0,0,0,18535,18537,0,18538,0,0,0,0,0,0,18540,18541,18542,18543,0,
> -
> 18546,0,0,0,0,18553,18556,0,0,18558,0,0,18569,18571,0,0,0,18572,0,18574,0,0,
> 0,0,
> -18586,0,0,0,0,0,18588,0,0,18589,0,0,0,0,0,0,18590,0,18592,0,0,0,0,18594,0,0,0,
> -
> 18596,0,0,18597,18598,0,0,18601,0,0,0,0,18602,0,0,0,18603,18604,0,18605,0,0,
> 0,0,
> -
> 18608,0,0,18611,0,0,0,0,0,0,0,0,0,18612,0,18616,0,0,18617,18619,0,0,0,18628,0
> ,0,
> -
> 0,18629,0,0,18630,0,0,0,0,0,0,0,18631,0,18632,0,0,18635,18637,0,0,0,0,0,0,186
> 41,
> -
> 18643,18648,0,18652,0,0,18653,0,18655,18656,0,0,0,18657,0,0,18666,18674,0,0
> ,0,0,
> -
> 18677,18684,18685,0,0,18686,0,0,18690,0,0,0,0,0,0,0,18695,18696,0,0,0,0,0,0,0
> ,0,
> -0,0,18697,0,0,18700,0,0,0,0,0,0,18702,0,18708,0,0,18709,0,18710,0,0,18711,0,
> -18714,0,0,18718,0,0,0,0,0,0,18719,0,0,18722,0,18726,0,0,0,0,0,0,0,0,0,0,0,0,0,
> -
> 18731,0,0,0,0,0,18739,18741,0,0,18742,0,18743,18744,18746,18748,0,18752,18
> 753,0,
> -
> 0,18754,18763,0,18765,0,0,0,18766,0,0,0,18769,0,0,0,0,0,18773,18778,18779,18
> 781,
> -0,0,18784,18787,0,18788,0,18793,0,0,0,0,0,0,18795,0,0,18800,0,0,0,0,0,18801,
> -
> 18804,0,0,0,0,0,0,0,18806,0,0,0,18811,18815,18816,0,0,0,0,18825,0,0,18827,188
> 29,
> -
> 0,0,18830,0,0,0,0,18831,0,0,18832,0,0,0,0,18833,0,18840,0,18841,0,18842,0,0,0
> ,0,
> -18843,0,18844,0,0,0,0,0,0,18845,18846,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
> -
> 18848,0,0,0,18853,18860,0,0,18862,18866,0,0,18867,18869,0,0,18874,18881,18
> 891,0,
> -
> 0,0,0,0,0,0,0,0,0,18892,0,0,0,0,0,0,0,0,18895,0,18896,0,0,0,18900,0,0,0,18901,0,
> -
> 18902,18915,18916,0,0,0,0,0,0,0,0,18919,0,0,0,0,0,18920,0,0,0,18921,18929,0,0
> ,0,
> -
> 0,18930,0,0,0,0,0,0,18932,0,0,0,0,18934,18942,0,0,0,18951,18957,0,0,0,0,18958
> ,0,
> -
> 0,0,0,18959,18960,0,0,18961,0,0,18962,0,0,0,0,18963,18964,0,0,0,18965,0,1896
> 7,0,
> -
> 0,0,0,0,0,0,0,0,18968,0,18969,0,18970,18973,18976,0,0,0,0,0,0,18977,0,0,0,189
> 81,
> -0,0,0,18990,0,18998,0,0,0,0,0,18999,19003,0,0,19005,0,0,0,19006,0,0,0,0,0,0,
> -
> 19008,19011,0,0,19018,0,0,19019,0,19024,0,19031,19032,0,19039,0,19041,1905
> 0,0,0,
> -
> 0,19051,19055,19056,0,19059,19063,19064,0,0,19088,0,0,0,19093,19094,0,0,0,0,
> -
> 19095,0,19096,0,0,0,19097,0,0,19098,0,19099,19100,0,0,19103,0,0,0,0,0,0,0,191
> 11,
> -
> 0,0,0,0,0,0,19112,0,0,0,19116,19117,0,19121,19122,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
> -
> 0,0,0,0,0,0,0,19123,19124,0,0,0,0,0,0,0,19125,19126,0,19128,0,0,0,0,0,0,0,0,0,0,
> -
> 19129,19130,19131,19132,0,0,19146,0,0,19147,19156,19158,0,0,0,0,0,0,0,0,191
> 82,
> -
> 19185,0,0,19187,0,0,0,19193,0,0,0,0,0,19194,0,19197,0,0,0,0,19198,0,0,0,0,0,0,
> 0,
> -0,0,0,19202,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,19203,0,19205,19210,
> -
> 0,0,0,19213,0,19218,0,0,0,19223,19229,0,0,19230,0,0,19231,19232,19233,19239
> ,0,0,
> -
> 0,0,0,19240,0,19248,19249,0,0,0,0,19254,0,19256,19258,19259,0,0,19261,0,192
> 66,0,
> -
> 0,0,19272,0,19278,19281,19282,0,0,0,0,0,0,0,0,0,0,0,0,19283,0,0,19284,0,0,192
> 85,
> -
> 19287,0,0,0,0,0,0,0,0,0,0,0,0,0,0,19288,19291,0,19292,0,0,0,0,19297,0,19298,0,
> 0,
> -
> 0,0,19302,19303,0,0,0,0,19304,19305,0,0,0,0,19314,0,0,19315,0,0,19321,0,0,0,0
> ,0,
> -
> 0,0,19322,0,19333,0,19334,19335,0,19336,19337,0,0,0,0,0,0,0,0,0,0,0,19346,0,0,
> -
> 19353,0,19354,19362,0,19366,19367,0,0,19369,0,19375,0,19377,19380,19388,0,
> 0,0,0,
> -0,19389,19390,0,0,0,0,19392,0,0,0,0,0,19402,0,0,0,0,0,0,0,0,19412,0,0,19413,
> -19422,0,19424,0,0,0,19425,0,0,0,19428,0,0,0,0,19431,0,0,0,0,0,19432,0,0,0,0,0,
> -
> 19448,19459,0,0,19461,0,19462,19463,0,19467,19474,19482,0,0,0,0,19494,0,0,0
> ,0,
> -
> 19501,0,0,0,0,0,0,0,0,0,0,19502,19504,0,0,0,0,0,0,0,19505,0,0,0,0,19506,19507,
> 0,
> -
> 0,0,19508,0,0,19511,0,0,19514,0,19515,0,19516,0,19518,0,0,0,0,0,0,0,0,0,0,0,0,
> 0,
> -0,0,0,0,0,19530,0,19537,19538,0,19543,19546,0,19547,19551,0,0,0,0,0,0,19552,
> -19553,0,0,0,0,0,0,0,0,0,0,0,0,19555,0,0,19556,0,0,0,0,0,0,0,0,0,0,0,0,19560,
> -
> 19561,0,0,19562,0,0,0,0,0,0,19565,19567,0,19568,0,0,0,19569,19570,0,19578,0,
> 0,0,
> -
> 0,19580,0,0,0,0,19581,19584,0,0,0,0,0,0,0,19585,19586,0,0,0,19587,19588,0,195
> 89,
> -
> 0,0,0,0,0,0,19592,19593,19599,0,19600,0,0,19604,0,0,19605,0,19606,19608,196
> 10,0,
> -
> 19613,19614,0,0,0,0,0,0,19616,19617,0,0,19618,0,0,19619,0,0,0,19620,19621,19
> 631,
> -
> 0,0,19632,19634,19636,0,19643,0,0,19644,19658,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
> 0,
> -
> 0,0,0,19659,0,0,0,0,0,0,0,0,0,0,0,19675,19677,0,0,0,0,19679,0,19683,0,19684,0,
> 0,
> -
> 0,0,0,0,19687,0,0,0,0,0,0,0,0,19688,19689,19692,0,0,0,0,0,0,0,19695,19697,0,0,
> 0,
> -
> 0,0,19698,19699,0,0,19700,0,19702,0,0,19703,0,0,0,0,0,0,19704,19708,0,19710,
> 0,
> -
> 19713,0,0,0,19715,0,0,0,0,19718,0,0,0,0,0,0,0,19720,0,19722,0,0,19725,0,0,0,0,
> 0,
> -
> 0,0,0,0,0,0,0,0,19730,0,0,0,0,0,19731,0,19734,19735,19739,0,0,19740,0,19741,0
> ,0,
> -
> 0,19746,0,0,19747,0,19771,0,0,0,0,0,0,0,0,19772,19775,0,0,0,0,0,0,19778,0,0,0,
> 0,
> -0,19779,0,0,19780,19790,0,19791,0,0,19792,0,0,0,19793,0,0,19796,19797,0,0,0,
> -
> 19799,0,0,0,19801,0,0,0,0,19803,0,19804,0,19805,0,0,19807,0,0,0,19808,0,0,0,0
> ,0,
> -
> 0,19809,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,19816,0,19821,0,19822,19830,19831,0,
> 0,
> -
> 0,19833,0,0,0,0,0,0,0,0,0,0,19838,0,0,0,0,19839,0,0,19843,0,0,0,0,19845,0,0,0,0,
> -
> 19847,0,0,19848,0,19849,0,0,0,0,0,0,0,19851,0,0,0,19854,0,0,0,0,0,0,0,0,0,1986
> 4,
> -
> 0,19865,0,19866,0,0,0,0,0,0,0,19868,0,0,19870,0,0,19871,0,0,19872,19873,1987
> 5,0,
> -19880,19882,19884,0,0,19885,19886,19888,0,0,0,0,0,0,0,0,0,0,0,0,19890,19892,
> -19893,0,0,19894,0,0,0,19895,0,19896,19902,0,0,19903,0,0,19905,0,0,0,19906,0,
> -
> 19908,0,19909,19911,0,0,0,19913,19920,0,19938,19939,19940,0,0,0,0,0,0,0,199
> 42,0,
> -
> 19943,0,19945,0,0,0,19951,19952,19954,19960,0,19965,0,19971,0,0,0,0,0,19975
> ,0,
> -
> 19976,0,19990,0,0,19991,0,19993,0,19995,0,0,0,19998,19999,20001,0,20003,20
> 005,0,
> -
> 20011,20012,0,0,0,0,0,0,20014,0,20020,0,0,0,0,20021,0,0,0,0,0,20023,20024,0,0
> ,0,
> -
> 0,0,20025,0,0,20027,0,0,20029,0,0,20032,0,0,0,0,20044,20045,0,20048,20049,0,
> 0,
> -
> 20050,0,20052,0,0,20054,20057,0,0,0,0,0,0,0,0,0,20059,0,0,20061,0,20062,0,200
> 64,
> -
> 0,0,20066,0,0,20067,0,0,0,0,20069,0,0,0,0,0,0,20070,20071,0,0,0,0,0,0,0,0,0,0,0,
> -
> 20072,0,0,20073,20074,0,0,0,0,0,20075,0,20078,0,0,0,0,20080,0,20081,0,0,0,0,0
> ,0,
> -
> 20095,0,20098,0,0,0,0,0,0,0,20107,0,0,0,0,0,0,0,0,20112,0,0,0,20113,20114,0,0,
> 0,
> -
> 20115,20123,20124,0,0,0,20131,20133,20134,0,0,0,0,20136,0,0,20137,20138,20
> 150,0,
> -
> 20152,0,0,0,20153,0,0,20154,0,0,0,20158,0,20163,0,0,20164,0,0,0,0,0,0,0,20166
> ,0,
> -
> 20168,0,20170,0,20175,0,0,20178,0,0,0,0,20223,0,0,0,0,20224,0,20226,0,0,2023
> 0,0,
> -20231,0,0,0,0,20232,0,0,20233,20234,0,20244,0,20247,0,0,0,0,0,0,20249,0,0,0,
> -
> 20250,0,0,0,0,20251,0,20253,0,20254,0,0,0,0,20256,0,0,20264,0,0,0,0,20266,0,0
> ,0,
> -20278,0,0,20279,20282,0,0,0,0,0,20283,0,20284,0,20285,0,20287,20290,0,0,0,0,
> -
> 20292,0,0,0,0,20293,20297,0,0,0,0,0,0,20299,0,20300,20303,0,0,0,0,0,0,20307,0
> ,0,
> -
> 20308,0,20309,0,20310,0,0,0,0,0,0,20312,0,0,0,20314,0,0,0,0,20315,20316,0,203
> 22,
> -
> 0,0,0,0,0,0,20339,0,0,0,20342,0,0,0,0,20352,0,0,0,0,0,0,0,0,0,0,20362,0,0,20365,
> -0,20375,20377,0,0,0,0,0,0,0,0,0,0,0,20378,20379,0,20380,0,0,20381,0,20382,0,
> -
> 20383,0,20388,0,0,0,0,0,0,0,0,0,0,0,0,0,0,20390,20392,20393,0,0,20395,0,0,0,0,
> 0,
> -
> 20396,0,0,0,0,0,0,0,0,20398,20415,0,0,0,20417,0,0,20420,0,0,20426,20428,0,204
> 31,
> -
> 0,0,20432,0,20433,20434,20435,0,0,0,0,20440,0,0,0,0,0,20442,0,20443,0,20446,
> 0,0,
> -0,0,20448,0,20451,0,0,0,0,0,0,0,0,0,20452,20453,0,0,20454,0,0,0,0,0,0,20457,0,
> -
> 20458,0,0,0,20465,0,0,0,0,0,20469,0,0,0,20473,0,20476,0,0,0,0,0,0,0,0,20477,0,
> 0,
> -
> 20485,0,0,20486,0,0,20487,0,20496,0,20497,0,0,20498,0,0,0,0,0,0,0,0,0,0,20499,
> -
> 20500,0,20501,0,0,0,0,0,20520,20527,0,20529,0,0,0,0,20539,0,0,20540,0,0,0,205
> 43,
> -
> 0,0,0,20546,0,0,0,0,0,20548,0,0,20563,0,0,20564,0,20566,0,0,0,0,0,20589,0,0,0,
> 0,
> -20590,0,0,20593,20594,0,0,0,0,20595,0,20597,20598,0,0,0,20618,20620,0,0,0,0,
> -20621,0,0,0,0,20627,0,0,0,0,0,20628,0,0,0,20629,0,20630,0,0,20639,0,0,0,0,0,
> -20707,0,0,20709,0,0,0,20713,20714,0,0,0,0,0,20724,20725,0,0,0,0,20726,20728,
> -
> 20729,0,20733,0,20734,0,20735,20736,0,20737,0,0,20744,0,20745,0,20748,0,0,2
> 0749,
> -
> 0,0,0,0,0,0,0,0,20750,0,0,0,0,20754,0,0,0,20761,0,0,20763,0,0,0,0,0,0,0,20766,0,
> -
> 0,0,0,0,0,0,0,0,0,0,0,0,0,20767,0,0,0,0,20768,0,20769,20777,0,0,0,0,0,0,20785,0,
> -
> 0,0,20786,20795,20801,0,20802,0,20807,0,0,20808,0,0,20810,0,0,20811,0,20812
> ,0,0,
> -
> 0,0,0,20813,0,0,20818,20820,20821,0,0,0,20822,0,20823,0,0,0,20826,0,0,0,0,0,0
> ,0,
> -
> 20829,20830,20831,0,20832,20836,0,0,20839,0,0,20840,20842,0,20843,0,20844,
> 0,
> -
> 20854,0,0,0,20855,0,0,0,0,20856,0,0,0,20869,0,0,20871,0,0,0,0,0,0,0,20873,0,0,
> 0,
> -
> 0,0,20876,0,0,0,0,0,20880,0,0,20882,0,0,0,0,20883,20884,0,0,20890,0,0,0,0,0,0,
> 0,
> -
> 0,0,20891,0,0,0,0,0,20905,0,20906,20910,0,0,20912,20915,0,0,0,0,0,20916,0,209
> 17,
> -
> 0,20919,20920,20922,0,20927,0,20928,20929,20930,0,0,20935,0,0,20939,0,0,20
> 941,0,
> -
> 0,0,20943,0,0,0,20946,20947,0,0,0,0,0,20950,0,20954,0,0,20955,20964,0,0,2096
> 7,0,
> -0,0,0,0,20973,20975,0,0,0,20984,0,20987,20988,0,0,0,0,0,20989,0,0,0,20995,0,
> -20998,0,20999,0,0,0,0,21000,21001,0,0,0,0,21008,0,21010,0,21016,0,0,0,21017,
> -
> 21018,0,0,0,0,0,21021,21026,21027,21028,0,0,21029,0,0,0,0,0,21030,0,0,0,0,0,0
> ,0,
> -0,0,0,0,0,0,21031,21032,0,0,0,0,0,21037,0,0,21038,0,0,0,0,0,0,0,0,0,21039,0,
> -
> 21041,0,21046,21047,0,0,0,21049,21053,0,0,21057,21064,21065,0,0,21066,2106
> 7,0,0,
> -
> 0,21069,0,0,0,21071,21072,0,0,21073,0,21074,0,0,21078,0,0,0,0,21079,0,0,2108
> 0,
> -
> 21081,0,0,21086,21087,0,21089,0,0,0,0,0,0,0,21091,0,21093,0,21094,0,0,0,0,0,0
> ,0,
> -
> 0,21095,0,0,0,0,0,21096,0,21098,0,0,0,0,0,0,0,21099,0,0,21100,21101,21102,0,0
> ,0,
> -
> 0,0,21103,0,21104,0,0,0,0,0,21105,21108,21109,0,0,21112,21113,0,0,0,0,0,0,211
> 15,
> -
> 21122,21123,0,0,0,0,0,21125,0,0,0,0,0,0,0,0,21129,21131,0,0,21134,0,0,0,21137,
> -
> 21142,0,21143,0,0,21144,0,21145,21146,0,21152,21154,21155,21156,0,0,0,2116
> 0,0,0,
> -
> 0,0,0,0,21161,0,21164,0,21166,0,0,0,0,21170,0,0,0,0,21171,0,0,21172,0,21174,0,
> -
> 21175,0,0,0,0,0,21176,21179,21188,0,0,0,21189,0,0,21190,0,0,0,21192,0,0,2119
> 3,0,
> -
> 0,0,21198,0,21212,0,0,21213,0,0,0,0,0,0,21215,21216,0,0,21223,21225,0,21226,
> 0,0,
> -
> 0,0,21227,21228,0,0,21229,0,0,0,0,21230,21236,0,0,0,0,0,0,0,0,0,0,0,0,0,21237,
> 0,
> -0,21238,21239,0,0,0,0,21256,0,0,0,0,0,21257,0,0,0,0,0,0,0,21259,0,0,0,21263,0,
> -
> 21272,0,21274,0,21282,0,0,0,0,0,0,0,0,21283,0,0,0,0,0,0,0,0,21294,0,0,21297,0,
> 0,
> -
> 0,0,21298,0,0,0,21299,0,21300,21302,0,21316,0,21318,21322,21323,0,21324,0,2
> 1326,
> -
> 0,0,0,21327,21328,0,0,0,21352,0,0,21354,21361,0,0,0,0,0,0,0,0,0,0,0,0,0,21362,
> 0,
> -0,0,21363,0,0,0,0,0,0,0,0,0,21366,0,0,21367,21372,21374,0,0,0,21375,21377,0,
> -
> 21378,0,0,0,21380,0,0,0,0,0,0,0,0,0,0,21381,0,0,0,0,0,0,21382,0,21383,0,0,2138
> 4,
> -
> 0,0,21385,0,0,0,0,21389,21390,0,0,0,0,0,0,0,0,0,0,0,0,0,21397,21398,0,0,0,0,0,0,
> -
> 0,0,0,0,21399,0,21400,0,0,0,0,21402,0,0,0,21403,21404,0,21405,21406,0,0,0,214
> 07,
> -
> 0,0,0,0,0,0,0,0,0,0,0,0,21408,0,0,0,0,21409,0,21421,0,21422,0,0,0,21425,21428,
> 0,
> -0,0,0,21429,0,0,0,0,0,21433,0,0,0,0,0,0,0,0,0,0,21434,0,21443,0,21444,21449,0,
> -21452,0,21453,21454,0,0,0,21457,0,0,21458,0,0,0,21460,21461,0,0,21464,0,0,0,
> -
> 21473,21478,0,0,21479,0,0,21481,21483,0,0,0,0,0,0,0,0,21484,0,0,21485,21486,
> 0,0,
> -
> 21488,0,0,0,0,0,0,21523,0,0,21525,0,0,0,0,0,0,0,21526,0,0,0,0,0,0,21529,21530,
> 0,
> -
> 0,21531,0,0,21533,0,0,21539,21564,0,21567,0,0,0,0,0,0,0,0,21575,0,0,0,0,21577
> ,0,
> -
> 0,0,0,0,21591,0,0,21604,0,0,0,0,0,0,0,0,0,21605,0,21606,0,0,21617,21618,21619,
> -
> 21620,0,0,0,0,0,0,0,0,0,0,0,0,0,21623,0,0,0,0,21631,0,21635,0,0,0,0,21639,2164
> 6,
> -
> 21653,21662,0,0,21663,21664,0,21666,0,0,21667,0,21670,21672,21673,0,21674,
> 21683,
> -0,0,0,0,0,21684,0,21694,0,0,0,0,21695,21700,0,21703,0,21704,0,0,21709,0,0,0,
> -
> 21710,0,0,0,0,0,0,0,0,21711,0,0,0,21712,0,21717,0,21730,0,0,0,21731,21733,0,0
> ,0,
> -
> 0,21737,21741,21742,0,21747,0,0,0,21749,0,0,0,0,0,0,0,0,0,0,0,0,0,21750,0,0,0,
> 0,
> -0,21752,0,0,0,0,21753,0,0,0,0,0,0,21755,21756,0,21757,0,0,0,0,0,0,21760,0,0,
> -21763,0,0,0,0,0,0,0,0,0,21764,0,0,21766,0,0,21767,0,0,0,0,0,0,0,0,0,21773,0,
> -21774,0,0,21775,0,0,0,0,21776,0,0,21777,0,0,0,0,0,0,0,0,0,21780,21787,21788,
> -
> 21791,0,0,0,21797,0,0,0,0,0,21805,0,0,0,0,21806,0,21807,21809,0,21810,21811,
> 0,
> -
> 21817,21819,21820,0,21823,0,21824,0,0,21825,0,0,21826,21832,0,0,0,0,0,21833,
> -
> 21848,21849,0,0,21867,21870,21871,21873,0,0,0,21874,0,0,0,0,0,0,0,0,0,21875,
> 0,
> -
> 21878,0,0,0,21879,0,21881,21886,0,0,0,0,21887,0,0,21888,21894,21895,21897,0,
> -
> 21901,0,21904,0,0,21906,0,0,0,21909,21910,21911,0,0,21912,0,0,21913,21914,2
> 1915,
> -
> 0,21919,0,0,0,0,0,0,0,21921,0,0,21922,21933,21939,0,0,0,0,0,0,0,0,0,0,0,21944,
> 0,
> -0,0,0,0,21945,0,21947,0,0,0,0,0,0,0,0,0,0,21949,0,0,0,21950,0,0,0,0,0,0,0,0,0,0,
> -
> 0,0,0,21951,0,21952,0,0,0,0,0,0,0,0,0,21954,21957,0,0,0,0,21958,0,21959,0,0,0,
> 0,
> -0,0,21962,21963,0,0,0,0,0,0,0,0,21964,21965,0,0,21969,21970,0,0,0,21974,0,0,
> -
> 21980,21981,0,21982,0,0,0,0,0,21985,0,21988,0,21992,0,21999,0,0,0,0,0,0,2200
> 1,0,
> -
> 22002,0,0,0,0,0,0,22003,0,0,0,0,0,22004,0,0,0,22008,0,22009,22015,0,0,22016,0
> ,0,
> -
> 0,22017,22019,0,0,0,0,0,0,0,0,0,22020,0,0,0,0,0,0,0,0,0,0,22021,22037,0,22039,
> 0,
> -
> 0,0,22040,0,0,0,22048,22049,0,0,22053,22055,22056,22059,0,0,22060,22061,0,0,
> -
> 22064,0,0,0,0,22066,0,0,0,0,0,0,0,22073,0,0,0,22074,22075,0,0,0,0,0,0,0,22076,
> 0,
> -
> 0,0,0,22077,22084,22099,0,0,0,0,0,0,0,22104,0,0,22107,0,22108,0,22109,0,2211
> 0,0,
> -
> 0,0,0,0,0,0,22111,22119,0,22120,22122,0,0,0,0,22125,0,0,0,22128,22129,0,0,0,0
> ,0,
> -
> 0,22141,0,0,0,22142,0,0,22144,22146,0,22148,22149,22151,22154,0,0,0,22162,0
> ,0,0,
> -
> 0,22164,22177,0,0,0,0,22179,0,22182,22183,0,0,22184,22188,0,0,0,0,0,0,0,0,221
> 90,
> -
> 0,22194,22201,0,0,22208,0,22209,0,22212,0,0,22215,0,22223,22231,0,0,22232,0,
> -
> 22234,0,0,22235,22236,0,22237,0,22240,0,0,0,0,0,22241,0,0,0,22242,22246,222
> 47,0,
> -
> 0,0,22259,22268,0,22269,0,0,0,0,0,0,0,22270,0,0,0,0,22271,0,22272,0,22277,0,0
> ,0,
> -
> 0,0,22278,22280,22283,22286,0,0,22287,22289,0,0,22290,0,22293,0,0,0,0,0,0,0,
> 0,0,
> -
> 0,22295,0,22301,22302,0,0,0,22305,0,22308,0,0,0,0,0,0,0,0,0,0,22315,0,0,0,223
> 17,
> -
> 0,22334,0,0,0,22335,0,0,0,0,0,22336,0,22338,22344,0,22347,22349,0,22350,0,0,
> 0,0,
> -0,0,0,22357,0,0,0,0,0,22358,0,0,0,0,0,0,0,0,0,0,22359,22360,0,0,0,0,0,0,0,0,
> -
> 22361,22366,0,0,22369,0,22370,22373,0,0,0,0,0,22375,0,22377,0,0,0,0,0,22378,
> 0,0,
> -
> 0,0,22381,0,0,0,0,22382,0,22383,0,0,0,0,0,0,0,0,0,22391,0,0,22392,22395,22396,
> -
> 22402,0,0,0,0,0,0,0,0,0,0,0,0,0,22405,0,0,22406,0,0,22408,0,0,22409,22410,0,0,
> 0,
> -
> 0,0,0,22424,0,0,0,0,22426,0,0,0,22427,0,22428,0,22432,0,22435,22442,22443,0,
> 0,0,
> -0,22444,0,0,0,0,0,22446,0,22454,0,22455,0,0,0,22465,0,22470,0,22471,0,0,0,0,
> -
> 22472,22473,0,22487,0,0,0,22488,0,0,0,0,22489,0,0,22499,0,0,0,0,0,0,22514,0,0,
> -
> 22515,0,0,0,0,0,0,0,22516,0,0,0,22517,22520,0,0,0,22534,0,0,22535,0,0,22536,0,
> -
> 22540,22553,0,22555,0,0,0,0,22561,0,0,22562,0,0,0,0,0,0,0,0,0,0,0,22566,0,0,0,
> 0,
> -
> 22567,22568,0,0,22575,0,22579,0,22582,22583,22585,0,0,0,0,0,22586,0,0,22587
> ,0,0,
> -
> 22590,0,0,0,0,0,22591,0,22592,0,0,0,0,0,22593,0,22602,0,0,22604,0,0,22609,0,0,
> -
> 22618,0,0,0,0,0,0,22619,0,22624,22625,0,0,22638,0,0,0,0,0,22639,0,0,22640,0,0
> ,0,
> -
> 0,0,0,0,22644,0,22645,22647,0,0,0,0,22652,22653,0,0,0,22654,0,22655,0,0,0,226
> 56,
> -0,0,0,0,0,0,0,0,0,0,22673,22675,22676,0,0,22678,22679,0,22691,0,0,0,0,0,0,0,
> -
> 22693,0,0,22696,0,22699,22707,22708,0,0,0,0,0,0,0,0,22718,0,22719,0,0,0,0,227
> 23,
> -
> 0,0,0,22724,22725,0,0,0,0,0,0,0,0,0,0,0,0,0,0,22726,22728,0,0,0,0,0,0,0,0,22729,
> -
> 0,0,22731,0,0,0,0,22732,22735,22736,0,0,0,0,22739,0,22749,0,0,22751,0,0,0,0,0
> ,0,
> -0,0,0,0,0,22758,0,0,0,0,0,22760,0,0,0,0,0,22764,22765,22766,0,22768,0,0,0,0,0,
> -
> 22769,22770,0,0,0,0,0,0,22771,0,0,22772,22775,0,22776,22777,22780,0,0,22782,
> -
> 22784,0,22787,0,22789,22796,0,0,0,0,0,22798,0,0,0,0,0,0,22802,0,22803,22804,
> 0,0,
> -
> 0,0,0,0,0,0,0,0,22805,0,0,22810,22811,22814,22816,0,22825,22826,0,22831,228
> 33,0,
> -0,0,0,0,0,0,0,0,22834,0,22836,22838,0,22839,0,0,0,0,0,22840,0,22847,0,0,0,0,0,
> -
> 22856,22857,0,22858,22859,0,0,22862,0,0,22864,0,0,0,0,22865,0,0,0,0,0,0,0,0,0
> ,0,
> -
> 0,22866,0,22867,22868,0,0,0,0,22869,0,22871,0,22872,0,22873,22881,22882,22
> 884,
> -22885,0,0,0,0,0,0,0,22886,22887,0,22894,0,22895,0,0,0,22900,0,22901,0,0,0,0,
> -
> 22904,0,0,0,0,22905,22907,0,0,0,22915,22917,0,0,22918,0,0,0,22920,0,0,0,2292
> 9,
> -
> 22930,0,0,0,22941,22942,0,0,0,22943,0,0,0,22944,0,0,0,0,0,0,0,22946,0,22947,0
> ,0,
> -22954,0,22956,0,0,22962,0,0,0,0,0,0,0,22963,0,0,22964,0,0,0,0,0,0,0,22965,0,
> -
> 22968,0,0,0,22969,0,0,0,0,0,22970,0,22971,0,0,0,0,0,22978,0,0,22979,0,22987,0
> ,0,
> -
> 22989,0,0,0,0,0,0,22990,0,23005,0,0,0,0,0,0,0,23006,23007,23008,0,0,23023,230
> 24,
> -
> 23029,0,0,0,0,23030,0,0,0,0,0,23032,0,0,0,0,0,23035,0,0,0,0,23038,0,0,0,23048,
> 0,
> -
> 23049,23052,23053,23060,23061,0,23063,0,0,0,0,23067,23068,0,0,0,23069,2307
> 3,0,0,
> -
> 0,23127,0,23128,0,0,0,0,0,23129,0,23138,23141,0,23149,0,0,23150,0,0,0,23152,
> 0,0,
> -
> 0,0,0,0,0,0,23154,0,0,0,0,23157,23159,23160,0,0,0,0,0,0,0,0,0,0,0,0,23180,0,0,0,
> -
> 0,23181,0,0,23188,0,23189,0,0,0,0,0,0,0,0,0,0,0,0,23195,0,0,23196,23199,0,0,0,
> 0,
> -
> 0,0,0,0,0,23202,0,23204,0,23207,0,23209,23210,0,0,0,0,0,0,23227,23229,0,0,232
> 30,
> -
> 23234,23238,0,0,0,23245,23246,23248,0,0,0,0,23249,23254,0,0,0,23265,0,0,0,0,
> 0,0,
> -
> 0,23268,0,23276,0,0,0,0,23277,0,23297,0,23298,0,0,0,0,23299,0,23302,0,0,2330
> 3,
> -
> 23312,0,0,23314,0,23320,0,0,0,0,23324,0,23325,0,23328,0,23334,0,0,0,23337,0,
> 0,0,
> -
> 0,23343,23344,23346,0,23348,0,0,0,0,0,0,0,0,23353,0,0,0,0,23355,0,23356,2335
> 8,0,
> -
> 0,0,23359,23360,0,23361,0,23367,0,23369,0,0,23373,0,23378,23379,0,23382,23
> 383,0,
> -0,0,0,0,0,0,0,0,0,0,0,0,0,23387,0,0,0,0,0,0,23388,23390,0,0,23393,23398,0,0,0,
> -23399,0,0,0,23400,0,0,0,0,23401,0,0,0,23415,0,0,0,0,0,0,0,0,23416,0,23422,0,
> -
> 23443,23444,0,0,0,0,23448,0,23454,0,0,0,0,0,0,23456,0,0,23458,23464,0,0,0,0,0
> ,0,
> -23465,0,0,0,23470,23471,0,0,23472,0,0,0,23473,23496,0,0,0,0,0,0,0,0,23497,0,
> -
> 23499,0,0,23502,0,0,23503,0,0,23513,0,0,23515,0,0,0,23517,0,0,0,0,23518,2351
> 9,
> -
> 23521,23524,0,23525,23528,23539,0,0,0,0,0,23541,0,0,23544,0,0,23556,0,0,235
> 57,0,
> -
> 0,0,0,0,0,0,0,0,0,0,0,0,23559,0,23560,0,0,23561,0,0,23566,0,0,0,0,0,23568,2356
> 9,
> -
> 23570,0,0,0,0,23571,0,23574,0,0,0,0,0,0,0,0,0,0,0,23575,0,23579,0,0,23581,0,0,
> 0,
> -
> 0,0,0,23587,0,0,0,0,0,0,0,23596,23598,0,0,0,0,23602,23606,0,0,23607,0,23608,0
> ,0,
> -
> 0,23614,23616,0,0,0,0,0,23618,0,0,23619,0,0,0,0,23621,23626,0,23627,0,0,0,0,0
> ,0,
> -
> 0,23629,0,23630,0,0,0,0,23634,0,23636,0,0,0,0,0,0,23638,0,0,0,0,23640,23667,0,
> -
> 23669,0,0,0,23681,0,0,0,0,0,0,0,23682,0,23683,0,0,0,0,0,23684,0,0,0,23685,236
> 89,
> -0,23693,23694,23700,0,23702,0,23709,0,0,0,0,0,0,0,23712,0,0,0,0,0,23714,0,0,
> -
> 23715,0,0,0,0,23718,0,0,23720,0,0,0,0,23722,0,0,0,23726,23729,0,23741,23746,
> 0,
> -
> 23748,0,0,0,0,23749,0,0,0,0,0,23750,0,0,0,0,23751,0,23753,0,0,0,0,23757,23765
> ,0,
> -
> 0,0,23770,0,0,0,0,0,0,0,23771,0,23772,23781,0,0,23796,0,0,0,0,23798,0,23799,0
> ,0,
> -
> 0,23802,0,0,23806,0,23807,0,0,23808,0,23809,0,23819,0,0,0,23821,0,23827,0,0,
> 0,
> -23829,0,0,0,0,0,0,0,23830,0,0,0,0,0,0,23832,23833,23834,23835,0,0,0,0,23837,
> -
> 23838,0,0,0,0,0,23846,0,0,0,0,0,0,23847,0,0,0,0,0,23879,23881,0,0,23882,23883,
> -
> 23895,0,23899,0,0,0,0,23901,0,0,0,0,0,0,23902,0,0,0,0,0,23903,23905,0,23906,0,
> -
> 23907,23918,23919,23920,0,23922,0,23924,0,23927,0,23934,0,23937,23941,0,23
> 942,
> -
> 23946,0,0,0,0,0,23955,23956,23958,0,0,0,0,0,0,23959,0,23962,23965,0,23966,0,
> 0,0,
> -
> 0,23967,23968,0,0,23973,0,0,23974,0,0,0,0,23975,0,23976,0,0,0,0,0,0,0,0,0,0,0,
> 0,
> -
> 0,23977,0,0,0,0,0,0,0,0,23980,0,0,23984,0,23985,0,0,23987,0,0,23988,23990,239
> 91,
> -0,0,0,0,0,0,23992,0,0,0,0,0,0,0,0,23994,0,0,0,23998,0,0,0,0,0,0,0,0,0,23999,0,0,
> -
> 24003,0,24004,0,24006,0,0,0,24007,0,0,24008,0,0,0,0,0,0,0,24009,0,0,24010,0,0,
> -
> 24011,0,0,24013,24014,0,0,24015,24016,24027,0,24028,24029,0,24030,0,0,0,0,0,
> -
> 24033,24034,0,24035,0,0,24036,0,0,24044,0,24048,24049,24063,24067,0,24068,
> 24070,
> -
> 0,0,24071,24078,24087,0,24090,0,0,0,24095,0,24098,24101,24104,24106,0,2410
> 7,0,0,
> -
> 0,24108,0,0,0,0,24110,24111,0,24113,0,0,24115,24120,0,0,0,0,0,0,24124,0,2412
> 5,0,
> -24126,0,24127,0,0,0,0,0,24135,0,0,24136,0,24137,24142,0,0,0,24146,0,0,24147,
> -24149,24154,0,24163,0,0,0,24165,24166,24167,0,0,0,0,0,0,0,0,0,0,24169,24170,
> -
> 24175,0,0,0,24178,0,0,24179,0,0,24181,0,24184,24197,0,24201,24204,0,0,0,0,0,
> 0,
> -
> 24206,24212,24220,0,0,0,24224,0,0,0,0,0,0,0,0,24226,0,24234,0,0,0,0,0,0,0,0,0,
> 0,
> -0,0,0,0,0,0,24235,0,24236,0,0,0,0,0,24239,24240,24241,0,0,24248,0,0,24249,0,
> -24251,0,0,0,0,0,0,24253,0,24268,0,0,0,24269,0,24271,24272,0,0,0,0,24273,0,0,
> -
> 24274,0,0,24279,0,0,0,0,0,0,0,24280,0,24293,24294,0,0,0,0,0,0,24296,0,0,24323
> ,0,
> -
> 0,0,24329,24330,24331,24339,0,24351,0,0,24369,24370,0,0,0,24371,0,0,0,0,243
> 72,
> -24373,24374,0,0,0,0,0,24378,0,0,0,0,24379,0,24381,0,24383,24389,0,24390,0,0,
> -
> 24394,24395,24400,0,0,0,24401,24402,0,24406,0,0,0,24411,0,0,0,24415,0,24416
> ,0,0,
> -
> 0,0,0,24417,0,24419,0,24422,0,24423,24428,0,24435,0,0,0,24439,0,0,0,24440,24
> 442,
> -
> 24446,0,0,0,24447,24448,24449,24452,0,0,0,0,24453,24457,0,0,24458,24459,24
> 460,0,
> -24465,0,0,0,0,0,0,0,24470,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,24471,0,24473,
> -
> 24474,24475,24476,0,24478,0,0,0,0,24480,0,0,0,0,0,0,0,0,0,0,24481,0,0,0,0,0,0,
> 0,
> -
> 0,0,0,24482,24485,0,0,0,0,24486,0,0,0,24488,0,0,0,24494,0,0,0,0,24497,0,0,244
> 98,
> -
> 0,0,0,24499,24506,0,0,0,24507,0,0,24511,0,0,24513,24514,0,0,0,0,0,24517,0,245
> 18,
> -
> 0,24520,0,24521,24524,24525,0,0,0,0,0,24527,0,0,0,0,0,0,0,0,0,0,0,0,0,0,24528,
> 0,
> -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,24537,24539,0,24540,0,0,0,24548,0,0,0,0,0,24549,
> -
> 24550,0,0,0,24553,24554,0,24555,0,24556,0,24558,0,0,0,0,0,24560,0,0,0,24561,
> 0,0,
> -
> 0,0,0,24562,0,0,0,0,0,0,0,0,0,0,0,0,0,24567,0,0,0,0,0,24569,0,0,0,24574,0,24575,
> -0,0,0,0,0,0,0,0,0,0,0,24577,24581,0,24584,0,0,0,0,0,24585,0,0,0,0,0,24586,0,0,
> -
> 24587,0,24588,0,0,0,0,0,0,0,0,0,0,24590,24591,0,0,0,0,24592,0,0,0,0,0,0,0,2459
> 4,
> -
> 0,0,0,0,0,0,0,24596,24597,0,0,0,0,24602,24603,0,0,0,0,24604,0,0,24605,0,24610
> ,0,
> -
> 0,24611,0,0,0,0,24612,24615,24616,24624,0,0,0,24627,0,24638,24639,0,0,0,0,24
> 640,
> -
> 0,0,0,24655,24656,24657,0,0,0,0,0,0,0,0,24662,0,24663,24664,0,0,0,0,0,24665,0
> ,0,
> -
> 0,0,24667,0,0,0,0,0,0,24668,24669,0,24670,24674,0,0,0,24675,0,24678,0,0,2467
> 9,0,
> -
> 0,0,24681,0,24683,0,0,0,0,24684,0,24685,0,0,24686,0,0,24688,24689,0,0,0,0,246
> 90,
> -
> 24691,0,0,0,0,0,0,0,24697,0,24698,0,0,0,0,0,0,0,0,24709,0,0,0,0,0,24710,0,2471
> 2,
> -
> 0,0,0,0,0,0,24713,24714,0,24715,0,24716,24718,0,24719,0,0,0,0,24720,0,0,2472
> 5,0,
> -0,24738,0,24749,24750,0,0,0,24752,0,0,0,24753,0,0,0,24758,0,0,0,0,0,24762,0,
> -
> 24763,0,0,0,0,0,0,0,24764,0,0,0,0,0,24765,24767,24768,0,24772,0,0,0,0,24773,0
> ,0,
> -
> 0,0,24777,0,0,0,0,0,24785,0,24786,24788,0,0,0,24789,0,0,0,0,24794,24798,0,247
> 99,
> -
> 24800,0,0,0,24803,0,24804,24806,0,24807,0,0,0,24810,0,0,0,0,0,0,24827,24828,
> 0,
> -
> 24835,0,0,0,0,0,0,24836,0,0,0,0,0,24839,0,24843,24844,0,0,0,0,0,0,0,0,0,0,2484
> 7,
> -
> 0,0,24848,0,0,0,0,0,0,24849,0,24850,24851,0,0,0,24852,0,24853,0,0,0,0,0,0,0,0,
> 0,
> -
> 24854,0,24855,0,0,24868,0,0,0,24883,0,0,0,24884,0,24895,24897,0,0,0,0,0,2489
> 9,0,
> -
> 0,0,0,0,24900,0,24913,0,0,0,0,0,0,24914,0,0,24917,24930,24931,0,0,0,24932,0,0,
> -
> 24939,0,0,24942,0,0,0,0,0,0,0,0,0,24945,24950,0,24951,0,0,24953,0,0,0,24954,0,
> -24959,0,0,0,24961,0,0,24962,0,24964,24968,24970,24972,0,0,0,0,0,24976,0,0,0,
> -
> 24977,0,24982,0,0,24983,0,0,24984,0,0,0,24993,0,0,0,24994,0,0,25001,0,0,0,250
> 03,
> -
> 0,0,25018,0,0,25023,0,0,0,25034,0,0,25035,25036,0,25037,0,0,0,0,0,0,0,25039,0
> ,0,
> -0,0,0,25040,0,0,0,0,0,0,0,25042,0,0,25043,25045,0,0,0,0,0,0,25049,0,0,25051,0,
> -
> 25052,25053,0,0,25054,0,0,0,25055,0,0,0,0,25057,25059,0,0,25060,25064,0,250
> 65,
> -25069,25070,0,0,0,0,25072,0,25073,0,25090,0,0,25092,25093,25101,0,0,0,0,0,0,
> -
> 25105,25108,0,0,25113,0,0,25115,25116,0,0,0,0,0,0,25117,0,0,0,25120,25121,0,
> 0,0,
> -
> 0,0,0,0,25125,0,0,0,25126,0,25130,25134,0,25139,0,25143,0,0,0,25151,0,25161,
> 0,0,
> -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,25163,0,0,0,0,0,0,0,25174,0,25175,0,25207,0,0,
> -0,25209,0,0,0,0,25213,0,25219,0,25223,0,25225,0,0,0,25227,0,0,0,25228,0,0,0,
> -
> 25229,0,0,0,0,0,0,0,25231,25233,0,0,0,0,25237,25239,0,0,0,25243,0,0,0,25252,0,
> -
> 25257,25258,0,0,0,0,25260,25265,0,25268,0,0,25273,25324,0,25325,0,25326,0,0
> ,0,0,
> -0,0,0,0,25327,0,0,0,0,0,25328,0,0,0,0,0,0,25332,0,0,0,25333,0,0,0,25336,25337,
> -25338,0,0,25343,0,25350,0,0,0,0,0,0,0,25352,0,25354,0,25375,0,25379,0,0,0,0,
> -
> 25384,0,0,0,0,0,0,0,0,0,25386,0,25388,0,25390,0,0,25399,0,0,25401,0,0,0,25402
> ,0,
> -
> 0,0,25407,0,0,0,0,0,0,0,0,0,0,0,25413,25415,0,0,25417,0,0,0,0,0,0,0,25419,0,0,0,
> -
> 25421,0,0,0,25424,0,0,0,0,25433,0,0,0,0,0,0,0,0,0,25435,0,0,0,0,0,0,25436,0,0,0,
> -
> 25437,0,0,25440,0,0,0,0,0,0,25442,0,0,25443,0,25446,0,0,25449,0,0,0,25450,0,0
> ,0,
> -
> 0,25452,0,25453,25454,25455,0,0,0,25456,0,25457,0,0,0,25459,0,25461,0,25468
> ,0,0,
> -0,0,0,0,0,0,25469,0,0,0,0,0,25471,0,0,0,0,0,25474,0,0,0,0,0,0,0,0,25475,0,0,0,0,
> -25477,0,0,0,0,25483,0,0,0,0,0,25484,0,0,0,0,0,0,0,0,0,0,0,0,25485,0,25497,0,0,
> -
> 25498,0,25504,0,25510,0,25512,0,0,25513,25514,0,0,0,0,0,0,25517,25518,25519
> ,0,
> -
> 25520,0,0,0,0,0,0,0,25521,0,25522,25527,25534,0,25536,0,25537,0,0,25548,255
> 50,0,
> -
> 0,25551,0,25552,0,0,0,0,0,25554,0,25555,0,25556,25557,25568,0,0,0,25570,255
> 71,0,
> -
> 0,0,0,0,0,25574,0,0,0,0,25579,0,0,0,25581,0,0,0,25582,0,0,0,0,0,0,0,0,0,25588,0,
> -
> 0,0,0,25589,0,0,0,0,25590,0,25591,25592,25593,0,25594,0,0,0,25596,0,25597,25
> 615,
> -
> 0,0,0,0,0,25618,0,0,0,0,25619,25623,0,0,25629,0,0,25631,0,0,0,25635,25636,0,0,
> -
> 25649,0,0,0,0,25654,0,0,0,25661,25663,0,0,25671,0,0,25678,25698,0,25699,257
> 02,
> -
> 25703,0,0,0,0,0,0,0,0,25704,0,0,0,0,0,25706,0,0,25710,0,25711,0,25712,0,25715,
> -
> 25716,25717,0,0,25718,25728,25732,0,0,0,25734,0,0,0,0,0,0,0,0,0,25737,0,0,257
> 39,
> -
> 0,0,0,25740,0,25741,25745,0,25746,0,25748,25772,25778,0,0,0,0,0,25780,0,0,0,
> 0,
> -
> 25781,0,25782,25784,25785,0,0,0,25789,0,0,0,0,0,0,25797,25801,0,0,0,25808,25
> 809,
> -
> 0,0,25811,25814,25815,0,0,25817,0,0,0,0,0,0,0,0,25820,0,0,0,0,25832,25833,0,0
> ,0,
> -25846,0,0,0,25847,25848,0,0,0,0,0,0,0,0,0,25849,25850,0,0,25851,0,0,25852,0,
> -
> 25862,0,0,0,25863,25865,0,0,0,0,0,0,0,25867,25868,0,25869,25874,0,25875,0,25
> 876,
> -
> 25877,0,0,0,0,25878,25902,0,0,0,0,0,0,0,25903,25904,25905,0,0,0,25908,25909,
> 0,0,
> -
> 0,0,25910,0,0,0,0,0,0,0,25912,0,25913,0,0,0,0,0,0,0,0,25914,0,0,25916,0,0,0,0,0,
> -
> 25917,25927,0,0,0,0,25928,0,0,25930,0,0,0,25933,0,0,25938,25942,0,0,0,0,0,0,0,
> -
> 25945,0,25950,0,25956,0,0,25961,25962,0,0,25963,0,25964,25965,25966,0,0,0,0
> ,0,
> -
> 25967,0,0,0,0,25968,0,0,0,25969,25971,0,0,0,0,0,25973,25975,0,0,0,0,0,0,0,259
> 78,
> -0,25981,0,0,0,25982,0,0,0,25984,0,0,0,0,0,0,0,25993,0,0,0,0,0,0,0,0,0,0,0,0,0,
> -26002,0,0,0,26005,0,0,0,26006,26007,0,0,26014,26015,26016,0,0,0,0,0,0,26017,
> -
> 26018,26020,0,26022,26023,0,0,0,26024,26028,0,26029,26033,26034,26044,0,0,
> 0,0,0,
> -
> 26046,0,0,26047,0,0,26049,0,26050,0,26051,0,0,0,0,0,26053,0,0,0,0,26054,2605
> 9,0,
> -0,0,0,0,0,26060,0,26066,0,0,0,0,0,0,0,0,0,0,0,0,26067,0,26069,0,0,26071,0,0,0,
> -
> 26073,0,26074,26077,0,0,0,0,26078,0,0,0,26079,0,26090,0,0,26094,0,0,0,0,0,0,0
> ,0,
> -
> 26095,0,0,0,0,0,0,0,0,0,0,0,26096,26101,0,26107,26122,0,26124,0,0,26125,0,0,0
> ,0,
> -
> 0,0,26136,26141,26155,0,0,0,0,0,0,0,0,0,26164,26166,0,0,0,26167,0,26170,2617
> 1,0,
> -0,26172,0,0,26174,0,0,0,0,0,0,0,0,0,0,0,0,0,26175,0,0,0,26176,26177,0,26321,
> -26322,0,26323,0,0,26324,0,0,0,0,0,0,0,26325,0,26331,0,0,0,0,0,0,26335,0,0,0,
> -
> 26350,0,0,0,26379,0,0,26382,26383,26385,0,0,26392,26406,0,0,0,0,26411,0,0,0,
> 0,0,
> -26412,0,0,26420,0,0,26423,0,26424,26426,26432,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
> -
> 26435,0,26436,0,0,0,0,0,26441,0,26444,0,0,0,26446,0,0,0,0,26447,0,0,0,0,26449
> ,0,
> -
> 26450,26452,0,26453,26454,0,0,0,26455,0,0,0,26456,0,0,26458,0,0,26460,0,264
> 63,0,
> -
> 0,0,0,0,0,0,0,26464,26470,0,0,0,0,0,0,0,0,0,26473,0,0,26474,0,0,0,0,0,0,0,26475,
> -
> 0,0,0,0,0,0,0,26477,0,26485,0,0,26486,0,26487,0,0,26488,26493,26494,0,0,2649
> 5,0,
> -
> 26497,26504,26506,0,0,0,0,0,26507,0,0,0,0,0,26509,0,0,26510,0,0,0,0,0,0,0,0,0,
> 0,
> -
> 0,0,0,26512,0,26513,26515,0,0,0,26518,0,0,0,26519,0,26524,26526,0,0,0,26527,
> 0,
> -
> 26532,0,26533,26537,26558,0,0,0,26559,0,0,0,26571,0,0,26573,0,26588,0,26593
> ,0,0,
> -
> 0,0,0,0,26603,0,26604,0,0,0,0,0,0,0,0,0,0,26606,0,0,0,0,0,0,0,26607,26609,2661
> 1,
> -26614,0,0,0,26616,26620,0,26621,0,0,0,0,0,26627,0,26629,0,0,26630,0,0,26632,
> -26643,0,0,0,26644,0,0,0,0,0,0,0,0,0,26646,26647,0,0,0,26650,0,0,26656,0,0,0,0,
> -
> 26663,26670,26671,0,0,0,26685,26686,26687,0,26689,0,0,0,0,26744,0,26745,0,2
> 6747,
> -
> 26748,0,26749,26750,26751,0,0,0,0,26752,26755,0,0,0,26756,26769,0,0,0,26774
> ,0,0,
> -
> 0,0,0,26775,0,26777,26778,0,26786,0,0,0,26787,0,0,0,0,0,0,0,0,0,0,0,0,0,26788,
> 0,
> -
> 0,26789,0,0,0,0,0,26791,0,26792,26793,0,0,0,26794,0,26797,26798,0,0,0,26800,
> 0,0,
> -
> 26803,0,26804,0,0,0,0,0,0,0,0,0,26805,0,0,26808,0,0,26809,0,0,0,0,0,0,0,26812,
> 0,
> -
> 26825,0,0,0,0,0,0,0,26826,0,0,26827,26829,26834,0,0,0,0,26835,0,0,26849,0,268
> 51,
> -0,0,0,0,0,0,0,0,0,26852,0,26853,26857,0,26858,0,26859,0,0,0,0,0,0,0,26876,0,
> -
> 26878,26882,26883,0,0,0,0,26890,26894,0,0,0,0,26895,26896,0,0,0,0,0,26900,0,
> 0,0,
> -
> 0,0,0,0,26911,26913,26914,26915,26916,26919,0,0,0,26921,26922,0,0,26925,0,0
> ,0,
> -
> 26928,0,0,26929,26930,0,0,0,26931,0,26932,0,0,0,0,0,26933,0,0,0,0,0,0,26937,0
> ,0,
> -
> 26943,0,0,26944,0,0,0,26946,0,0,0,0,0,0,0,26956,0,26958,0,0,26963,0,0,0,0,0,0,
> 0,
> -
> 26965,0,26969,26970,26972,0,0,0,0,0,26973,0,26974,0,26978,0,26980,0,0,0,0,0,
> 0,
> -
> 26982,0,26986,26987,0,26990,0,0,0,0,27003,27006,0,0,27007,27010,27012,2701
> 3,0,0,
> -
> 0,0,0,0,0,0,27014,27015,27018,0,27019,0,0,0,0,0,27025,0,0,0,27026,0,0,0,0,270
> 29,
> -
> 27030,27031,27034,0,0,27036,27037,0,0,0,27038,27042,0,0,0,27044,0,0,0,0,0,0,
> 0,0,
> -0,0,0,0,0,0,27045,0,0,0,0,0,0,0,27046,0,0,0,0,0,0,0,27047,27049,0,27050,0,0,0,
> -27051,27052,0,27055,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,27056,27058,27059,0,
> -27061,0,27064,0,0,0,0,0,27069,0,0,27070,0,0,0,0,0,0,0,27072,0,0,0,0,0,0,0,0,
> -
> 27076,0,0,0,0,0,27078,0,27079,0,0,0,27081,0,0,0,0,0,0,27082,0,27083,27086,0,0
> ,0,
> -
> 0,27087,0,0,0,0,0,27088,27090,0,27094,0,0,27095,0,27099,27102,0,0,0,27103,0,
> 0,0,
> -0,27105,0,0,0,27106,0,0,0,0,0,0,27107,0,0,0,0,27108,27117,0,0,0,0,27118,0,0,
> -27124,0,27126,0,0,27130,27131,0,0,0,0,0,0,27147,0,0,0,0,27148,27149,0,0,0,0,
> -
> 27150,27151,0,27152,0,27159,0,0,0,27164,0,0,0,0,0,0,0,27175,0,27189,0,0,2719
> 1,0,
> -
> 27193,0,27195,0,27198,0,0,0,0,0,27200,0,0,0,0,27202,0,0,0,0,27203,0,0,27204,0
> ,0,
> -
> 27206,0,27207,0,0,0,0,27209,0,0,0,27213,0,0,27216,27219,27220,27222,27223,0,
> -
> 27224,0,27225,27226,0,0,27233,0,0,0,0,27235,0,27237,0,27238,0,0,0,0,0,0,0,0,0
> ,0,
> -
> 0,0,0,0,27239,0,27242,27243,0,27250,0,0,0,27251,0,27253,0,0,0,0,0,0,0,0,0,0,0,
> 0,
> -
> 0,0,0,0,0,0,0,0,0,27254,27255,27258,0,0,0,27259,0,0,0,0,0,0,27267,0,27276,272
> 78,
> -
> 0,0,0,0,0,0,0,0,0,27296,27297,27301,0,0,0,0,0,0,27302,0,0,0,0,0,0,27312,27313,
> 0,
> -
> 0,0,0,0,27318,0,27320,0,27329,0,27330,27331,0,27332,0,0,0,0,27340,0,0,0,2734
> 8,0,
> -
> 0,0,0,0,0,27350,0,27351,0,0,0,0,27355,0,0,27358,27359,27361,0,0,0,27365,0,273
> 67,
> -
> 0,27376,27378,0,0,27379,0,0,0,0,0,0,27396,0,27397,27404,0,0,0,0,0,27408,0,0,0
> ,0,
> -
> 27453,0,0,0,27456,0,0,0,27458,0,0,0,0,0,0,0,27459,0,0,0,27460,0,0,27461,0,274
> 65,
> -27467,0,0,27469,0,27470,0,27471,0,27477,27482,0,0,0,0,0,0,27484,0,0,0,0,0,0,
> -27485,0,0,0,0,0,27493,0,27494,27502,0,0,0,0,0,0,0,0,0,0,0,0,27511,27532,0,0,0,
> -
> 27533,27545,0,0,0,27546,0,0,0,0,0,0,0,0,0,0,27547,0,0,27549,27550,0,27551,0,0
> ,0,
> -
> 0,0,0,0,27555,0,0,27571,0,27573,27574,27575,27577,0,27578,0,0,27579,27585,0
> ,0,0,
> -
> 0,0,27586,0,0,27588,27589,0,0,0,0,27596,0,0,27600,0,0,0,0,0,0,0,0,0,0,0,27608,
> 0,
> -0,0,0,0,0,0,0,0,0,0,27610,0,0,0,27618,0,0,27620,0,0,0,27631,0,0,27632,27634,0,
> -
> 27636,27638,0,0,0,27643,0,27644,27649,0,0,0,0,0,0,0,0,0,0,0,0,0,27651,27660,0,
> -27661,0,0,0,0,0,0,0,27662,0,0,27664,0,27665,0,0,0,27669,0,27671,0,0,0,27673,
> -
> 27674,0,0,0,27682,0,0,0,27711,0,27712,27713,27719,27720,0,0,27728,0,27729,0
> ,0,0,
> -
> 0,0,0,0,0,0,27731,0,0,27732,0,27733,0,27738,0,0,0,27742,0,0,0,27743,27744,0,0
> ,0,
> -
> 0,0,0,27745,27746,0,0,0,27747,27748,27751,27752,0,0,0,27768,27770,0,0,0,277
> 74,
> -
> 27775,0,27776,27777,0,0,27781,0,27784,0,27786,0,0,27791,0,27792,27793,2780
> 4,0,
> -
> 27812,27813,0,0,0,0,0,0,0,0,27814,0,27825,0,27827,0,0,0,0,27828,27861,27862,
> 0,0,
> -
> 0,27864,0,0,0,27865,27884,0,27889,0,0,0,0,0,27890,0,27891,0,0,0,27892,0,0,0,0
> ,0,
> -
> 27897,27898,0,0,27899,0,0,0,27901,27905,0,0,27920,0,0,27921,0,27922,0,0,0,27
> 931,
> -27934,0,0,0,0,0,0,0,0,0,0,27941,0,27942,0,27945,0,27947,27954,0,0,0,0,27960,
> -27963,0,0,0,0,0,0,0,0,27964,27965,0,0,0,27967,0,27969,27975,0,27976,27977,0,
> -
> 27981,0,27983,28051,28052,0,0,0,0,0,28056,0,0,0,0,0,0,28058,28059,0,0,28061,
> 0,0,
> -0,0,0,0,0,28063,0,0,0,0,0,0,28066,0,0,0,0,0,0,28069,28070,28072,0,28073,0,0,
> -
> 28074,0,0,0,0,28075,0,0,0,0,0,0,0,28078,0,0,0,0,28085,0,0,0,0,28086,0,0,0,0,0,0,
> -28088,0,0,0,0,0,0,0,0,28090,0,28097,28114,28115,0,0,0,0,0,0,0,28116,0,0,0,0,0,
> -
> 28118,0,28129,0,28131,0,0,28135,0,0,0,28140,28141,0,0,0,28146,0,0,0,0,28152,
> 0,0,
> -
> 0,0,28155,28157,28161,0,0,0,0,28166,0,28167,0,0,0,0,0,0,0,0,0,0,0,28172,0,0,0,
> 0,
> -0,0,28173,0,0,28175,0,0,0,0,0,0,0,0,0,28178,28188,0,28190,0,0,0,0,0,28191,0,
> -
> 28193,28206,0,0,28207,28209,0,28211,0,28213,0,0,0,28215,28216,28217,0,2822
> 2,0,
> -
> 28223,28225,0,0,0,28226,0,28227,28229,28232,0,0,0,0,0,0,0,0,0,28235,0,28241,
> 0,0,
> -28242,0,0,0,0,28243,0,0,0,28245,0,0,0,28248,28250,0,28251,28252,0,0,0,0,0,0,
> -
> 28253,0,0,28254,28255,0,0,28256,0,0,28258,0,0,0,0,0,28259,0,0,28260,0,0,2826
> 1,0,
> -
> 0,0,0,28262,28263,0,0,28264,0,0,0,28266,0,28268,28269,0,28270,28272,28274,0,
> -
> 28277,28278,0,0,0,28279,0,28280,28281,28283,0,28292,0,28294,0,28297,0,0,0,0,
> -
> 28299,0,0,0,0,0,28300,0,0,0,0,0,0,0,28301,0,0,0,0,0,0,0,0,0,0,0,0,0,28302,28303,
> -0,0,0,0,28304,0,0,28305,0,28312,0,28313,28314,0,0,0,0,0,0,28315,0,0,0,28320,
> -
> 28321,0,0,28328,0,0,0,28329,28338,0,28339,0,0,28344,0,0,0,0,0,0,0,0,28347,0,0
> ,0,
> -0,0,0,0,0,28348,0,0,0,0,0,28411,0,28412,28413,0,28416,0,0,0,28420,0,0,0,0,0,
> -
> 28421,0,0,0,0,28423,0,0,0,28424,0,0,28428,0,0,0,0,0,28429,0,0,0,28431,28434,0,
> -
> 28458,0,0,0,0,0,0,0,0,0,0,0,28464,0,0,0,0,28465,0,28467,0,0,0,0,0,0,28471,0,0,0,
> -
> 0,28474,0,28480,0,28481,0,0,28485,0,0,0,0,28486,28488,0,0,28489,0,0,0,0,2849
> 2,0,
> -
> 0,0,28495,0,28497,0,28499,0,0,0,0,28500,0,0,28502,28503,0,0,0,28508,0,0,0,285
> 10,
> -
> 0,0,28512,28513,28514,28521,0,28526,0,28527,28528,0,0,0,0,28529,0,0,28532,0
> ,0,
> -28537,28538,0,0,0,28539,0,28548,0,28553,28554,0,0,0,0,0,0,0,0,0,0,0,0,28560,
> -
> 28563,0,0,28564,0,0,0,0,28565,0,0,0,0,0,0,0,28566,28568,0,0,0,0,0,0,28569,0,0,
> 0,
> -28570,0,28572,28573,0,0,0,0,28575,0,0,0,0,28576,28581,28588,0,0,28589,0,0,0,
> -
> 28590,28595,0,28598,0,0,28601,0,0,28605,0,0,0,0,28614,28615,28619,0,0,0,0,0,
> 0,
> -
> 28620,0,28626,0,0,28628,0,28631,0,28632,0,0,0,0,0,0,28635,0,0,0,28637,28638,
> 0,0,
> -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,28639,0,28643,0,0,28652,0,0,0,28662,0,
> -
> 28670,28671,0,0,0,0,0,0,0,0,0,28672,28673,28675,28676,0,0,0,0,0,0,0,28691,0,0
> ,0,
> -
> 28695,0,0,0,28696,0,28697,28698,0,28705,0,28707,28708,28710,0,0,0,0,0,0,0,28
> 711,
> -
> 28728,0,0,0,28736,0,0,0,28737,0,0,0,0,0,0,0,0,0,28738,0,28739,0,28741,0,0,287
> 42,
> -
> 0,0,0,0,0,0,0,0,0,0,0,28745,0,0,0,0,0,0,28749,28750,28752,28754,28756,0,28757
> ,0,
> -
> 0,0,0,28759,28760,0,0,0,0,0,0,28762,0,0,0,28764,0,0,0,0,0,0,28766,0,28767,287
> 68,
> -0,0,0,0,28769,28770,0,0,0,0,0,0,0,0,0,0,0,0,0,28771,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
> -0,28772,0,28773,0,28782,0,0,0,0,0,0,28784,0,28785,0,28786,0,0,0,28787,0,0,0,
> -
> 28797,0,0,0,0,0,0,28799,0,0,28801,0,0,0,0,28802,0,28805,0,0,28806,0,0,28807,0
> ,0,
> -
> 0,0,0,0,0,28808,0,0,0,0,0,28810,28812,0,0,28816,28819,0,0,28821,0,28826,0,0,0,
> -
> 28842,28852,0,0,28853,0,28854,28855,0,0,0,28857,0,0,0,28858,0,28867,28868,2
> 8869,
> -
> 0,0,0,28874,28880,28882,28890,28892,0,0,0,0,0,0,0,28895,0,0,0,28898,28899,0,
> 0,0,
> -
> 28900,0,0,28904,0,28906,0,0,0,0,28907,0,0,0,0,0,0,28908,0,0,0,28910,0,28914,0
> ,0,
> -0,0,0,0,0,28915,28916,28919,0,0,28920,0,28921,0,0,0,0,0,0,0,0,28924,0,0,0,0,
> -
> 28926,28929,0,0,0,28930,0,28936,0,28939,0,0,0,0,28942,0,0,0,0,0,0,28956,0,0,0,
> -
> 28966,0,0,0,0,28967,0,0,0,0,0,0,0,0,0,28968,0,28971,0,28975,28976,0,28982,289
> 83,
> -
> 0,0,28984,28989,28996,28997,28998,0,0,0,0,0,0,28999,0,0,0,0,0,29000,0,29001,
> 0,0,
> -
> 0,29009,0,0,29011,0,0,29021,0,0,0,0,29024,0,29025,0,0,0,0,0,29026,0,0,0,29036
> ,0,
> -0,0,29037,0,0,0,0,29038,0,29045,0,29047,0,0,0,0,0,0,0,0,0,29051,0,0,0,29054,
> -
> 29056,29062,0,29070,29082,0,0,0,29083,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,29084,0,
> 0,
> -
> 0,0,29085,29088,0,0,0,0,0,0,0,29090,29097,0,0,0,29103,0,0,0,0,0,0,0,0,29105,0,
> 0,
> -0,0,0,29107,0,29109,0,0,0,29115,0,0,29120,0,0,29138,29140,0,0,0,0,0,0,0,0,0,
> -
> 29152,0,29160,29174,0,29176,0,0,29180,0,29181,0,0,0,0,0,0,0,0,29228,0,0,2922
> 9,0,
> -0,29230,0,0,0,0,0,0,0,0,0,0,29234,0,0,0,29241,0,29245,0,29248,0,29250,29256,
> -
> 29280,0,29282,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,29285,0,0,29286,29291,29292,0,0,0,
> 0,
> -
> 29294,0,29295,0,0,0,0,0,29296,29297,29298,29300,0,29302,0,0,29304,29307,0,2
> 9312,
> -
> 0,0,0,29322,0,0,29323,0,0,29324,29326,29328,0,29335,0,0,0,0,0,0,0,29338,2933
> 9,0,
> -
> 0,0,0,0,29341,29343,0,0,0,0,29344,0,0,0,0,0,29345,0,0,0,0,29346,0,0,0,0,0,0,0,0,
> -
> 0,0,0,0,0,0,0,0,29347,29348,29349,0,0,29354,0,0,29355,0,0,0,0,0,0,0,0,29357,0,
> 0,
> -
> 0,0,29364,0,29365,0,0,0,0,0,0,0,29366,0,0,29368,0,0,0,0,0,0,0,0,29378,0,29381,
> 0,
> -
> 0,0,0,0,0,0,0,29386,0,0,0,0,0,0,29389,0,0,0,29390,0,0,29391,29397,0,29398,294
> 12,
> -29414,29418,29419,0,0,0,0,0,0,0,29420,0,0,0,0,0,0,0,29423,0,0,0,29435,0,0,0,
> -
> 29437,0,0,29439,0,29441,0,0,0,0,29443,0,29446,29450,29452,0,0,0,0,0,29456,0,
> 0,0,
> -
> 0,0,29461,0,0,0,29464,0,0,0,0,0,0,0,0,29468,0,29473,0,0,0,29486,0,0,0,29490,0,
> 0,
> -
> 0,29491,29492,0,0,29497,0,0,0,29498,0,29499,0,29502,29505,0,29509,0,0,0,295
> 10,0,
> -
> 0,0,29512,0,0,0,29516,0,0,0,0,0,0,0,0,29518,0,29519,0,0,0,0,0,29520,29521,295
> 29,
> -
> 0,0,0,0,0,0,0,0,29530,0,0,29531,29538,0,29540,0,0,0,29542,0,29543,29544,2954
> 7,0,
> -
> 0,29548,0,0,0,29549,0,0,0,29550,0,0,29552,0,0,0,0,29558,29561,0,29562,29564,
> 0,0,
> -
> 29565,0,0,29566,0,0,0,0,0,0,0,0,0,0,29578,29584,29586,29591,0,0,0,0,29593,295
> 94,
> -
> 0,0,29597,0,0,29613,0,29614,0,29615,0,0,0,0,29616,29617,0,0,29625,0,0,0,2963
> 2,0,
> -
> 0,0,0,0,0,0,29633,0,0,0,0,0,29634,29635,29637,0,29638,0,29641,29643,0,0,0,0,0
> ,0,
> -29644,0,29645,0,29649,0,0,0,29650,0,29653,0,0,0,0,0,0,0,0,0,0,0,0,0,0,29656,
> -29659,0,0,29660,0,0,0,29661,0,0,0,0,0,29664,0,0,0,29671,29673,0,0,0,0,0,0,0,
> -
> 29675,0,29677,29679,0,0,29684,0,0,0,0,0,29685,0,0,0,29687,0,0,0,29688,0,2968
> 9,
> -
> 29690,29700,0,29701,0,0,0,29702,0,29706,0,0,0,0,0,0,0,29720,0,29721,0,29727,
> 0,
> -
> 29733,29734,0,29750,29761,0,29763,0,0,0,0,0,29764,0,0,29765,0,0,0,29771,0,0,
> 0,0,
> -
> 0,0,0,0,0,0,0,0,29772,0,0,0,29773,29774,29775,0,0,0,0,0,0,0,0,0,0,0,29822,0,0,0,
> -
> 29824,0,29825,0,0,0,0,0,29827,0,0,0,0,0,0,0,0,29829,0,29832,29834,0,0,29835,0
> ,0,
> -
> 29837,29838,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,29843,0,0,0,0,29844,29845,0,0,0,
> -
> 0,0,0,0,0,0,29849,0,0,29869,29872,29890,29905,0,0,0,0,0,29907,29921,0,29922,
> 0,0,
> -
> 29923,29926,29944,29946,0,0,0,0,0,0,0,29947,29948,0,0,0,29951,0,0,0,0,0,2995
> 3,0,
> -0,29956,0,29957,0,0,29962,0,0,0,0,29971,0,0,0,29972,0,0,0,0,0,29978,0,29979,
> -
> 29992,30007,30008,30010,0,0,0,30013,0,0,0,0,30014,30016,0,0,0,0,0,0,0,0,0,0,0,
> -
> 30017,0,0,0,0,0,30023,30031,0,0,30033,0,0,0,0,0,0,0,0,0,0,30034,0,30038,0,300
> 39,
> -
> 0,30040,0,0,0,0,0,0,30067,30068,0,0,0,30069,0,30072,0,0,0,30073,0,0,0,0,30075
> ,0,
> -
> 0,0,0,0,0,30079,0,0,30080,0,0,0,0,0,30082,0,0,0,0,0,0,0,0,0,0,0,30084,30090,0,0,
> -
> 30091,0,0,0,0,30098,30118,0,30119,0,30121,30130,0,0,0,0,0,0,0,0,0,0,0,0,0,301
> 31,
> -
> 30132,30133,0,0,0,0,0,0,30135,0,0,0,0,0,0,0,0,0,0,0,30136,0,0,30137,30138,0,0,
> 0,
> -
> 30139,30146,0,0,0,0,0,30147,0,0,30148,30151,0,0,0,30168,0,30172,30173,0,0,0,
> 0,0,
> -
> 0,0,0,30180,30181,0,30192,0,0,0,0,0,0,0,30194,30196,0,0,30199,0,0,30202,0,0,0
> ,0,
> -
> 30203,0,0,0,0,0,0,0,0,0,0,30213,0,0,0,30216,0,0,30217,0,0,0,30218,0,0,0,0,3021
> 9,
> -0,30220,0,30222,30227,0,0,0,0,0,30231,0,0,30233,30235,0,0,0,0,30238,0,30240,
> -
> 30243,30245,0,30250,30252,0,0,0,30269,0,0,30271,30272,0,0,0,30278,30280,0,0,
> -
> 30282,0,30284,0,30294,0,0,0,0,30295,30296,0,0,0,0,0,30298,30299,30302,30304,
> -
> 30306,0,0,0,0,0,0,30316,30317,0,0,0,30318,0,0,0,30319,0,30320,30322,30326,0,
> 0,0,
> -
> 0,0,30327,0,30332,30348,30349,0,0,30356,0,0,0,0,0,0,0,0,30357,0,30358,0,3035
> 9,
> -
> 30360,0,0,30365,30366,30378,0,0,0,0,30379,0,0,30381,0,30385,0,30388,30397,0
> ,0,0,
> -
> 30401,0,0,0,0,30403,0,0,0,0,0,30404,0,0,30405,0,30406,30408,0,30409,0,30410,
> 0,0,
> -
> 0,30417,0,0,30418,30419,0,30420,0,30424,0,0,0,30427,30430,30432,0,0,0,0,0,0,
> 0,0,
> -
> 0,0,0,0,0,0,0,0,0,0,0,30433,0,0,0,0,0,0,0,30436,0,30437,30438,0,30441,30442,0,
> 0,
> -
> 0,30445,0,0,0,0,30452,30456,30457,0,0,0,30458,0,30464,0,0,0,0,0,0,30467,0,304
> 69,
> -
> 0,0,0,0,0,30477,0,0,30484,0,0,0,0,0,30485,0,0,0,0,0,30486,30487,30497,30498,0
> ,0,
> -
> 0,0,0,0,0,0,0,0,30505,0,30508,0,0,0,30509,30510,0,30514,30516,0,0,0,0,0,0,0,0,
> 0,
> -0,0,30523,0,30524,0,30525,0,0,0,0,30537,0,0,30538,0,0,0,0,0,30553,0,0,30555,
> -
> 30556,30558,30559,30560,0,0,30561,0,30562,0,0,0,0,0,0,0,0,30563,30570,30571
> ,0,
> -
> 30586,30587,0,0,30590,0,0,30594,0,0,0,0,30611,30612,30623,30634,0,0,30636,3
> 0640,
> -
> 30655,30656,0,30657,0,0,30658,30669,0,30670,0,30676,30678,0,0,0,0,0,0,0,306
> 79,0,
> -
> 0,0,0,0,0,0,0,0,0,0,30695,0,0,30698,0,0,0,0,30700,0,0,0,0,30701,0,30702,30703,
> 0,
> -
> 0,0,0,30707,0,0,0,30709,0,0,30710,30719,30729,0,0,0,0,0,0,0,0,0,30731,0,0,307
> 33,
> -
> 0,0,0,30734,0,0,0,0,0,30736,30737,0,0,0,30740,0,0,0,30743,0,30746,0,30747,307
> 48,
> -0,0,30751,30752,30753,0,0,0,30754,0,0,30760,0,0,0,0,0,0,0,30763,0,30764,0,0,
> -
> 30766,0,30769,30770,30771,30774,30777,0,0,30779,30780,30781,0,0,0,0,30790,
> 0,0,0,
> -
> 30792,0,0,0,0,30810,0,0,0,0,0,0,0,30812,30819,0,0,30823,30824,0,30825,0,3082
> 7,0,
> -
> 0,0,0,0,0,30828,0,0,30830,0,0,0,30834,0,30835,0,30837,30838,0,30845,0,0,0,0,0,
> -
> 30846,30847,0,0,30849,0,30851,0,0,0,0,0,30852,30858,0,0,30859,0,30865,0,0,30
> 866,
> -
> 0,0,30868,0,0,30869,0,0,0,30881,30883,0,0,0,0,0,30889,0,30891,0,0,0,0,30894,0,
> -
> 30895,0,30897,0,30898,0,0,0,30904,30906,0,30909,0,0,0,0,0,0,30910,0,0,0,3091
> 5,
> -
> 30933,30942,0,0,0,0,30943,0,0,30945,0,0,0,0,0,0,30946,0,0,30947,0,0,30955,309
> 56,
> -
> 0,0,30960,0,0,30961,30962,30966,0,0,30969,30974,0,0,0,30976,0,0,30977,0,309
> 78,
> -30982,0,0,0,0,0,0,0,30994,30995,30998,0,31000,0,0,31001,0,0,31003,31005,0,0,
> -
> 31006,31011,0,0,31014,0,31016,0,0,0,0,31018,0,0,31020,31023,31024,31025,0,0
> ,0,0,
> -0,0,0,0,0,0,0,0,0,0,31027,31028,31029,0,0,0,0,0,0,31032,0,0,0,0,0,0,0,0,0,0,0,
> -
> 31036,31037,31038,0,0,0,31041,31043,31045,0,31047,0,0,0,31048,0,31049,0,0,0,
> -
> 31053,31054,31055,0,0,31063,0,0,0,0,0,31066,0,31068,31071,0,0,0,31072,31073
> ,0,0,
> -
> 0,0,31075,0,0,31076,0,0,0,31077,31079,0,31080,0,0,0,0,0,0,0,0,0,0,31087,0,311
> 42,
> -
> 0,31144,0,0,31145,31146,31147,0,0,0,0,0,0,0,0,0,0,0,0,0,0,31149,0,31151,31152
> ,0,
> -
> 0,0,0,0,0,0,31162,31171,31174,31175,0,0,0,31176,0,0,0,0,0,0,0,31179,0,0,0,311
> 86,
> -
> 0,0,0,31192,31195,0,0,31196,0,0,0,0,0,0,0,0,31198,0,0,0,0,0,31199,0,0,0,31205,
> 0,
> -
> 0,0,0,31211,31215,0,0,0,0,31231,0,31232,0,0,0,0,0,0,0,0,0,0,31233,31236,31253
> ,0,
> -31254,0,0,0,0,0,0,31255,0,0,31257,0,0,0,0,0,0,0,0,0,31258,31259,0,0,31260,0,
> -
> 31261,0,0,0,0,0,31262,31263,0,0,31264,0,31266,0,31267,0,0,0,0,0,31281,0,3128
> 2,0,
> -
> 31284,0,0,31285,31287,31288,0,0,31290,0,0,0,31292,31295,0,31299,0,31300,0,0
> ,0,0,
> -0,31302,0,0,0,0,31303,0,0,0,0,0,0,31304,0,0,0,0,0,31305,31308,31309,31315,0,
> -
> 31317,0,0,0,0,0,31323,0,31324,0,0,0,0,0,31325,31327,0,0,31331,0,0,0,0,0,31333
> ,0,
> -0,0,0,0,31336,0,0,31337,0,0,0,0,0,0,31338,0,0,0,0,0,0,0,0,0,0,0,0,31339,0,0,0,0,
> -0,0,0,31342,0,0,0,0,31345,0,0,0,0,0,0,0,0,31347,0,0,0,0,0,0,31348,0,0,31350,
> -31351,0,31352,0,0,31354,0,0,0,0,31355,0,0,31356,0,0,0,0,0,0,0,0,0,0,31363,0,
> -
> 31372,0,0,31373,0,0,0,0,0,0,0,0,0,31376,0,31388,0,31389,0,31392,0,31401,0,314
> 05,
> -
> 31407,31408,0,31409,0,0,0,0,0,0,31413,31415,0,0,0,31416,31418,0,0,0,0,0,0,314
> 22,
> -
> 31423,0,0,31424,0,31425,31432,0,0,0,0,0,0,0,0,0,31433,0,0,0,0,0,0,0,0,31434,0,
> 0,
> -0,0,0,0,31435,0,0,0,0,31438,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,31442,0,31444,0,
> -
> 31448,0,0,31451,0,0,0,0,31452,0,31461,31465,0,0,31466,0,0,31467,0,0,31468,0,
> 0,0,
> -
> 31469,31473,0,31476,0,0,0,0,31489,31490,0,0,0,0,0,0,0,31492,31493,31494,0,0,
> 0,0,
> -
> 31501,31504,31505,0,0,0,0,0,0,0,0,0,31509,0,0,0,0,31510,0,0,31511,0,0,31513,0
> ,0,
> -
> 0,0,0,0,0,0,0,31514,0,31522,31536,31539,31540,0,31541,0,0,0,0,0,0,31546,3155
> 3,
> -
> 31559,0,0,0,31560,31561,31562,0,0,31564,31567,0,31569,0,0,0,31570,0,0,0,0,31
> 571,
> -
> 0,0,0,0,0,0,31572,31574,31580,31581,0,0,31582,31584,31585,31586,31595,0,31
> 596,0,
> -
> 0,0,0,31597,0,31599,0,31600,31601,0,0,31603,31604,0,0,31608,31610,0,0,0,316
> 11,0,
> -
> 31615,0,0,0,0,31616,0,0,0,0,0,0,31617,0,0,0,0,0,31618,0,0,0,0,0,0,31621,0,0,0,0,
> -
> 0,0,0,0,0,31622,31625,0,0,0,0,31627,0,31641,0,0,31642,0,0,31643,0,0,0,0,0,0,0,
> 0,
> -0,31644,0,31646,0,0,0,0,31648,0,0,0,31652,0,0,0,31657,0,0,31676,0,0,0,0,0,0,0,
> -31689,31691,31692,0,31694,0,0,0,31696,0,31702,0,31703,0};
> -
> -static const DictWord kStaticDictionaryWords[31705] = {
> -{0,0,0},{8,0,1002},{136,0,1015},{4,0,683},{4,10,325},{138,10,125},{7,11,572},{9,
> -
> 11,592},{11,11,680},{11,11,842},{11,11,924},{12,11,356},{12,11,550},{13,11,317},
> -{13,11,370},{13,11,469},{13,11,471},{14,11,397},{18,11,69},{146,11,145},{134,0,
> -
> 1265},{136,11,534},{134,0,1431},{11,0,138},{140,0,40},{4,0,155},{7,0,1689},{4,1
> 0
> -,718},{135,10,1216},{4,0,245},{5,0,151},{5,0,741},{6,0,1147},{7,0,498},{7,0,870}
> -,{7,0,1542},{12,0,213},{14,0,36},{14,0,391},{17,0,111},{18,0,6},{18,0,46},{18,0,
> -151},{19,0,36},{20,0,32},{20,0,56},{20,0,69},{20,0,102},{21,0,4},{22,0,8},{22,0,
> -10},{22,0,14},{150,0,31},{4,0,624},{135,0,1752},{5,10,124},{5,10,144},{6,10,548}
> -,{7,10,15},{7,10,153},{137,10,629},{6,0,503},{9,0,586},{13,0,468},{14,0,66},{16,
> -0,58},{7,10,1531},{8,10,416},{9,10,275},{10,10,100},{11,10,658},{11,10,979},{12,
> -10,86},{14,10,207},{15,10,20},{143,10,25},{5,0,603},{7,0,1212},{9,0,565},{14,0,
> -301},{5,10,915},{6,10,1783},{7,10,211},{7,10,1353},{9,10,83},{10,10,376},{10,10,
> -
> 431},{11,10,543},{12,10,664},{13,10,280},{13,10,428},{14,10,128},{17,10,52},{14
> 5
> -
> ,10,81},{4,0,492},{133,0,451},{135,0,835},{141,0,70},{132,0,539},{7,11,748},{139
> -,11,700},{7,11,1517},{11,11,597},{14,11,76},{14,11,335},{148,11,33},{6,0,113},{
> -135,0,436},{4,10,338},{133,10,400},{136,0,718},{133,11,127},{133,11,418},{6,0,
> -1505},{7,0,520},{6,11,198},{11,10,892},{140,11,83},{4,10,221},{5,10,659},{5,10,
> -
> 989},{7,10,697},{7,10,1211},{138,10,284},{135,0,1070},{5,11,276},{6,11,55},{135,
> -
> 11,1369},{134,0,1515},{6,11,1752},{136,11,726},{138,10,507},{15,0,78},{4,10,18
> 8}
> -,{135,10,805},{5,10,884},{139,10,991},{133,11,764},{134,10,1653},{6,11,309},{7,
> -
> 11,331},{138,11,550},{135,11,1861},{132,11,348},{135,11,986},{135,11,1573},{1
> 2,0
> -,610},{13,0,431},{144,0,59},{9,11,799},{140,10,166},{134,0,1530},{132,0,750},{
> -
> 132,0,307},{133,0,964},{6,11,194},{7,11,133},{10,11,493},{10,11,570},{139,11,66
> 4
> -},{5,11,24},{5,11,569},{6,11,3},{6,11,119},{6,11,143},{6,11,440},{7,11,295},{7,
> -11,599},{7,11,1686},{7,11,1854},{8,11,424},{9,11,43},{9,11,584},{9,11,760},{10,
> -
> 11,148},{10,11,328},{11,11,159},{11,11,253},{11,11,506},{12,11,487},{12,11,531},
> -
> {144,11,33},{136,10,760},{5,11,14},{5,11,892},{6,11,283},{7,11,234},{136,11,537}
> -,{135,11,1251},{4,11,126},{8,11,635},{147,11,34},{4,11,316},{135,11,1561},{6,0,
> -999},{6,0,1310},{137,11,861},{4,11,64},{5,11,352},{5,11,720},{6,11,368},{139,11,
> -359},{4,0,75},{5,0,180},{6,0,500},{7,0,58},{7,0,710},{10,0,645},{136,10,770},{
> -133,0,649},{6,0,276},{7,0,282},{7,0,879},{7,0,924},{8,0,459},{9,0,599},{9,0,754}
> -,{11,0,574},{12,0,128},{12,0,494},{13,0,52},{13,0,301},{15,0,30},{143,0,132},{
> -
> 132,0,200},{4,10,89},{5,10,489},{6,10,315},{7,10,553},{7,10,1745},{138,10,243},{
> -
> 135,11,1050},{7,0,1621},{6,10,1658},{9,10,3},{10,10,154},{11,10,641},{13,10,85},
> -{13,10,201},{141,10,346},{6,11,175},{137,11,289},{5,11,432},{133,11,913},{6,0,
> -225},{137,0,211},{7,0,718},{8,0,687},{139,0,374},{4,10,166},{133,10,505},{9,0,
> -110},{134,10,1670},{8,0,58},{9,0,724},{11,0,809},{13,0,113},{145,0,72},{6,0,345}
> -,{7,0,1247},{144,11,82},{5,11,931},{134,11,1698},{8,0,767},{8,0,803},{9,0,301},{
> -137,0,903},{139,0,203},{134,0,1154},{7,0,1949},{136,0,674},{134,0,259},{135,0,
> -
> 1275},{5,11,774},{6,11,1637},{6,11,1686},{134,11,1751},{134,0,1231},{7,10,445},
> {
> -
> 8,10,307},{8,10,704},{10,10,41},{10,10,439},{11,10,237},{11,10,622},{140,10,201}
> -
> ,{136,0,254},{6,11,260},{135,11,1484},{139,0,277},{135,10,1977},{4,10,189},{5,1
> 0
> -
> ,713},{6,11,573},{136,10,57},{138,10,371},{132,10,552},{134,11,344},{133,0,248},
> -{9,0,800},{10,0,693},{11,0,482},{11,0,734},{11,0,789},{134,11,240},{4,0,116},{5,
> -0,95},{5,0,445},{7,0,1688},{8,0,29},{9,0,272},{11,0,509},{11,0,915},{4,11,292},{
> -
> 4,11,736},{5,11,871},{6,11,171},{6,11,1689},{7,11,1324},{7,11,1944},{9,11,415},{
> -
> 9,11,580},{14,11,230},{146,11,68},{7,0,490},{13,0,100},{143,0,75},{135,0,1641},{
> -133,0,543},{7,11,209},{8,11,661},{10,11,42},{11,11,58},{12,11,58},{12,11,118},{
> -141,11,32},{5,0,181},{8,0,41},{6,11,63},{135,11,920},{133,0,657},{133,11,793},{
> -
> 138,0,709},{7,0,25},{8,0,202},{138,0,536},{5,11,665},{135,10,1788},{145,10,49},{
> -9,0,423},{140,0,89},{5,11,67},{6,11,62},{6,11,374},{135,11,1391},{8,0,113},{9,0,
> -877},{10,0,554},{11,0,83},{12,0,136},{19,0,109},{9,11,790},{140,11,47},{138,10,
> -
> 661},{4,0,963},{10,0,927},{14,0,442},{135,10,1945},{133,0,976},{132,0,206},{4,1
> 1
> -
> ,391},{135,11,1169},{134,0,2002},{6,0,696},{134,0,1008},{134,0,1170},{132,11,2
> 71
> -},{7,0,13},{8,0,226},{10,0,537},{11,0,570},{11,0,605},{11,0,799},{11,0,804},{12,
> -0,85},{12,0,516},{12,0,623},{13,0,112},{13,0,361},{14,0,77},{14,0,78},{17,0,28},
> -
> {19,0,110},{140,11,314},{132,0,769},{134,0,1544},{4,0,551},{137,0,678},{5,10,84}
> -,{134,10,163},{9,0,57},{9,0,459},{10,0,425},{11,0,119},{12,0,184},{12,0,371},{13
> -,0,358},{145,0,51},{5,0,188},{5,0,814},{8,0,10},{9,0,421},{9,0,729},{10,0,609},{
> -
> 11,0,689},{4,11,253},{5,10,410},{5,11,544},{7,11,300},{137,11,340},{134,0,624},{
> -
> 138,11,321},{135,0,1941},{18,0,130},{5,10,322},{8,10,186},{9,10,262},{10,10,187}
> -,{142,10,208},{5,11,53},{5,11,541},{6,11,94},{6,11,499},{7,11,230},{139,11,321},
> -
> {133,10,227},{4,0,378},{4,11,920},{5,11,25},{5,11,790},{6,11,457},{135,11,853},{
> -
> 137,0,269},{132,0,528},{134,0,1146},{7,10,1395},{8,10,486},{9,10,236},{9,10,878}
> -,{10,10,218},{11,10,95},{19,10,17},{147,10,31},{7,10,2043},{8,10,672},{141,10,
> -
> 448},{134,0,1105},{134,0,1616},{134,11,1765},{140,11,163},{5,10,412},{133,11,8
> 22
> -},{132,11,634},{6,0,656},{134,11,1730},{134,0,1940},{5,0,104},{6,0,173},{135,0,
> -
> 1631},{136,10,562},{6,11,36},{7,11,658},{8,11,454},{147,11,86},{5,0,457},{134,1
> 0
> -,1771},{7,0,810},{8,0,138},{8,0,342},{9,0,84},{10,0,193},{11,0,883},{140,0,359},
> -
> {9,0,620},{135,10,1190},{137,10,132},{7,11,975},{137,11,789},{6,0,95},{6,0,1934}
> -,{136,0,967},{141,11,335},{6,0,406},{10,0,409},{10,0,447},{11,0,44},{140,0,100},
> -
> {4,10,317},{135,10,1279},{132,0,477},{134,0,1268},{6,0,1941},{8,0,944},{5,10,63}
> -
> ,{133,10,509},{132,0,629},{132,11,104},{4,0,246},{133,0,375},{6,0,1636},{132,10,
> -288},{135,11,1614},{9,0,49},{10,0,774},{8,10,89},{8,10,620},{11,10,628},{12,10,
> -322},{143,10,124},{4,0,282},{7,0,1034},{11,0,398},{11,0,634},{12,0,1},{12,0,79},
> -{12,0,544},{14,0,237},{17,0,10},{146,0,20},{132,0,824},{7,11,45},{9,11,542},{9,
> -11,566},{138,11,728},{5,0,118},{5,0,499},{6,0,476},{6,0,665},{6,0,1176},{6,0,
> -1196},{7,0,600},{7,0,888},{135,0,1096},{7,0,296},{7,0,596},{8,0,560},{8,0,586},{
> -9,0,612},{11,0,304},{12,0,46},{13,0,89},{14,0,112},{145,0,122},{5,0,894},{6,0,
> -
> 1772},{9,0,1009},{138,10,120},{5,11,533},{7,11,755},{138,11,780},{151,10,1},{6,
> 0
> -
> ,1474},{7,11,87},{142,11,288},{139,0,366},{137,10,461},{7,11,988},{7,11,1939},{
> 9
> -,11,64},{9,11,502},{12,11,7},{12,11,34},{13,11,12},{13,11,234},{147,11,77},{7,0,
> -1599},{7,0,1723},{8,0,79},{8,0,106},{8,0,190},{8,0,302},{8,0,383},{8,0,713},{9,0
> -,119},{9,0,233},{9,0,419},{9,0,471},{10,0,181},{10,0,406},{11,0,57},{11,0,85},{
> -11,0,120},{11,0,177},{11,0,296},{11,0,382},{11,0,454},{11,0,758},{11,0,999},{12,
> -0,27},{12,0,98},{12,0,131},{12,0,245},{12,0,312},{12,0,446},{12,0,454},{13,0,25}
> -,{13,0,98},{13,0,426},{13,0,508},{14,0,70},{14,0,163},{14,0,272},{14,0,277},{14,
> -0,370},{15,0,95},{15,0,138},{15,0,167},{17,0,38},{148,0,96},{135,10,1346},{10,0,
> -
> 200},{19,0,2},{151,0,22},{135,11,141},{134,10,85},{134,0,1759},{138,0,372},{145,
> -0,16},{8,0,943},{132,11,619},{139,11,88},{5,11,246},{8,11,189},{9,11,355},{9,11,
> -
> 512},{10,11,124},{10,11,453},{11,11,143},{11,11,416},{11,11,859},{141,11,341},{
> 5
> -,0,258},{134,0,719},{6,0,1798},{6,0,1839},{8,0,900},{10,0,874},{10,0,886},{12,0,
> -
> 698},{12,0,732},{12,0,770},{16,0,106},{18,0,163},{18,0,170},{18,0,171},{152,0,20
> -},{9,0,707},{11,0,326},{11,0,339},{12,0,423},{12,0,502},{20,0,62},{9,11,707},{11
> -
> ,11,326},{11,11,339},{12,11,423},{12,11,502},{148,11,62},{5,0,30},{7,0,495},{8,0
> -,134},{9,0,788},{140,0,438},{133,11,678},{5,10,279},{6,10,235},{7,10,468},{8,10,
> -446},{9,10,637},{10,10,717},{11,10,738},{140,10,514},{5,11,35},{6,11,287},{7,11,
> -
> 862},{7,11,1886},{138,11,179},{7,0,1948},{7,0,2004},{132,11,517},{5,10,17},{6,1
> 0
> -,371},{137,10,528},{4,0,115},{5,0,669},{6,0,407},{8,0,311},{11,0,10},{141,0,5},{
> -137,0,381},{5,0,50},{6,0,439},{7,0,780},{135,0,1040},{136,11,667},{11,11,403},{
> -146,11,83},{5,0,1},{6,0,81},{138,0,520},{134,0,738},{5,0,482},{8,0,98},{9,0,172}
> -,{10,0,360},{10,0,700},{10,0,822},{11,0,302},{11,0,778},{12,0,50},{12,0,127},{12
> -,0,396},{13,0,62},{13,0,328},{14,0,122},{147,0,72},{9,11,157},{10,11,131},{140,
> -
> 11,72},{135,11,714},{135,11,539},{5,0,2},{6,0,512},{7,0,797},{7,0,1494},{8,0,253
> -},{8,0,589},{9,0,77},{10,0,1},{10,0,129},{10,0,225},{11,0,118},{11,0,226},{11,0,
> -251},{11,0,430},{11,0,701},{11,0,974},{11,0,982},{12,0,64},{12,0,260},{12,0,488}
> -,{140,0,690},{5,11,394},{7,11,367},{7,11,487},{7,11,857},{7,11,1713},{8,11,246},
> -
> {9,11,537},{10,11,165},{12,11,219},{140,11,561},{136,0,557},{5,10,779},{5,10,80
> 7
> -},{6,10,1655},{134,10,1676},{4,10,196},{5,10,558},{133,10,949},{11,11,827},{12,
> -
> 11,56},{14,11,34},{143,11,148},{137,0,347},{133,0,572},{134,0,832},{4,0,12},{7,0
> -,504},{7,0,522},{7,0,809},{8,0,797},{141,0,88},{4,10,752},{133,11,449},{7,11,86}
> -,{8,11,103},{145,11,69},{7,11,2028},{138,11,641},{5,0,528},{6,11,1},{142,11,2},{
> -
> 134,0,861},{10,0,294},{4,10,227},{5,10,159},{5,10,409},{7,10,80},{10,10,479},{12
> -
> ,10,418},{14,10,50},{14,10,249},{142,10,295},{7,10,1470},{8,10,66},{8,10,137},{8
> -
> ,10,761},{9,10,638},{11,10,80},{11,10,212},{11,10,368},{11,10,418},{12,10,8},{13
> -
> ,10,15},{16,10,61},{17,10,59},{19,10,28},{148,10,84},{20,0,109},{135,11,1148},{6
> -
> ,11,277},{7,11,1274},{7,11,1386},{7,11,1392},{12,11,129},{146,11,87},{6,11,187},
> -
> {7,11,39},{7,11,1203},{8,11,380},{8,11,542},{14,11,117},{149,11,28},{134,0,1187}
> -,{5,0,266},{9,0,290},{9,0,364},{10,0,293},{11,0,606},{142,0,45},{6,11,297},{7,11
> -,793},{139,11,938},{4,0,50},{6,0,594},{9,0,121},{10,0,49},{10,0,412},{139,0,834}
> -,{136,0,748},{7,11,464},{8,11,438},{11,11,105},{11,11,363},{12,11,231},{14,11,
> -386},{15,11,102},{148,11,75},{132,0,466},{13,0,399},{14,0,337},{6,10,38},{7,10,
> -1220},{8,10,185},{8,10,256},{9,10,22},{9,10,331},{10,10,738},{11,10,205},{11,10,
> -540},{11,10,746},{13,10,465},{142,10,194},{9,0,378},{141,0,162},{137,0,519},{4,
> -
> 10,159},{6,10,115},{7,10,252},{7,10,257},{7,10,1928},{8,10,69},{9,10,384},{10,10
> -,91},{10,10,615},{12,10,375},{14,10,235},{18,10,117},{147,10,123},{5,11,604},{5,
> -10,911},{136,10,278},{132,0,667},{8,0,351},{9,0,322},{4,10,151},{135,10,1567},{
> -
> 134,0,902},{133,10,990},{12,0,180},{5,10,194},{7,10,1662},{137,10,90},{4,0,869},
> -
> {134,0,1996},{134,0,813},{133,10,425},{137,11,761},{132,0,260},{133,10,971},{5,
> -11,20},{6,11,298},{7,11,659},{7,11,1366},{137,11,219},{4,0,39},{5,0,36},{7,0,
> -
> 1843},{8,0,407},{11,0,144},{140,0,523},{4,0,510},{10,0,587},{139,10,752},{7,0,29
> -},{7,0,66},{7,0,1980},{10,0,487},{138,0,809},{13,0,260},{14,0,82},{18,0,63},{137
> -,10,662},{5,10,72},{6,10,264},{7,10,21},{7,10,46},{7,10,2013},{8,10,215},{8,10,
> -513},{10,10,266},{139,10,22},{134,0,570},{6,0,565},{7,0,1667},{4,11,439},{10,10,
> -
> 95},{11,10,603},{12,11,242},{13,10,443},{14,10,160},{143,10,4},{134,0,1464},{13
> 4
> -,10,431},{9,0,372},{15,0,2},{19,0,10},{19,0,18},{5,10,874},{6,10,1677},{143,10,0
> -},{132,0,787},{6,0,380},{12,0,399},{21,0,19},{7,10,939},{7,10,1172},{7,10,1671},
> -{9,10,540},{10,10,696},{11,10,265},{11,10,732},{11,10,928},{11,10,937},{141,10,
> -
> 438},{137,0,200},{132,11,233},{132,0,516},{134,11,577},{132,0,844},{11,0,887},{
> -
> 14,0,365},{142,0,375},{132,11,482},{8,0,821},{140,0,44},{7,0,1655},{136,0,305},{
> -
> 5,10,682},{135,10,1887},{135,11,346},{132,10,696},{4,0,10},{7,0,917},{139,0,786}
> -
> ,{5,11,795},{6,11,1741},{8,11,417},{137,11,782},{4,0,1016},{134,0,2031},{5,0,68
> 4
> -
> },{4,10,726},{133,10,630},{6,0,1021},{134,0,1480},{8,10,802},{136,10,838},{134,
> 0
> -
> ,27},{134,0,395},{135,11,622},{7,11,625},{135,11,1750},{4,11,203},{135,11,1936},
> -
> {6,10,118},{7,10,215},{7,10,1521},{140,10,11},{132,0,813},{136,0,511},{7,10,615}
> -
> ,{138,10,251},{135,10,1044},{145,0,56},{133,10,225},{6,0,342},{6,0,496},{8,0,27
> 5
> -},{137,0,206},{4,0,909},{133,0,940},{132,0,891},{7,11,311},{9,11,308},{140,11,
> -
> 255},{4,10,370},{5,10,756},{135,10,1326},{4,0,687},{134,0,1596},{134,0,1342},{6,
> -10,1662},{7,10,48},{8,10,771},{10,10,116},{13,10,104},{14,10,105},{14,10,184},{
> -
> 15,10,168},{19,10,92},{148,10,68},{138,10,209},{4,11,400},{5,11,267},{135,11,23
> 2
> -
> },{151,11,12},{6,0,41},{141,0,160},{141,11,314},{134,0,1718},{136,0,778},{142,1
> 1
> -
> ,261},{134,0,1610},{133,0,115},{132,0,294},{14,0,314},{132,10,120},{132,0,983},
> {
> -
> 5,0,193},{140,0,178},{138,10,429},{5,10,820},{135,10,931},{6,0,994},{6,0,1051},{
> -
> 6,0,1439},{7,0,174},{133,11,732},{4,11,100},{7,11,679},{8,11,313},{138,10,199},{
> -
> 6,10,151},{6,10,1675},{7,10,383},{151,10,10},{6,0,1796},{8,0,848},{8,0,867},{8,0
> -
> ,907},{10,0,855},{140,0,703},{140,0,221},{4,0,122},{5,0,796},{5,0,952},{6,0,1660
> -},{6,0,1671},{8,0,567},{9,0,687},{9,0,742},{10,0,686},{11,0,682},{11,0,909},{140
> -,0,281},{5,11,362},{5,11,443},{6,11,318},{7,11,1019},{139,11,623},{5,11,463},{
> -
> 136,11,296},{11,0,583},{13,0,262},{6,10,1624},{12,10,422},{142,10,360},{5,0,179}
> -,{7,0,1095},{135,0,1213},{4,10,43},{4,11,454},{5,10,344},{133,10,357},{4,0,66},{
> -7,0,722},{135,0,904},{134,0,773},{7,0,352},{133,10,888},{5,11,48},{5,11,404},{6,
> -
> 11,557},{7,11,458},{8,11,597},{10,11,455},{10,11,606},{11,11,49},{11,11,548},{1
> 2
> -,11,476},{13,11,18},{141,11,450},{134,11,418},{132,10,711},{5,11,442},{135,11,
> -
> 1984},{141,0,35},{137,0,152},{134,0,1197},{135,11,1093},{137,11,203},{137,10,4
> 40
> -},{10,0,592},{10,0,753},{12,0,317},{12,0,355},{12,0,465},{12,0,469},{12,0,560},{
> -
> 12,0,578},{141,0,243},{133,0,564},{134,0,797},{5,10,958},{133,10,987},{5,11,55},
> -
> {7,11,376},{140,11,161},{133,11,450},{134,0,556},{134,0,819},{11,10,276},{142,1
> 0
> -
> ,293},{7,0,544},{138,0,61},{8,0,719},{4,10,65},{5,10,479},{5,10,1004},{7,10,1913
> -},{8,10,317},{9,10,302},{10,10,612},{141,10,22},{4,0,5},{5,0,498},{8,0,637},{9,0
> -
> ,521},{4,11,213},{4,10,261},{7,11,223},{7,10,510},{136,11,80},{5,0,927},{7,0,101
> -},{4,10,291},{7,11,381},{7,11,806},{7,11,820},{8,11,354},{8,11,437},{8,11,787},{
> -
> 9,10,515},{9,11,657},{10,11,58},{10,11,339},{10,11,749},{11,11,914},{12,10,152},
> -{12,11,162},{12,10,443},{13,11,75},{13,10,392},{14,11,106},{14,11,198},{14,11,
> -
> 320},{14,10,357},{14,11,413},{146,11,43},{6,0,1153},{7,0,1441},{136,11,747},{4,
> 0
> -
> ,893},{5,0,780},{133,0,893},{138,11,654},{133,11,692},{133,0,238},{134,11,191},
> {
> -4,10,130},{135,10,843},{6,0,1296},{5,10,42},{5,10,879},{7,10,245},{7,10,324},{7,
> -
> 10,1532},{11,10,463},{11,10,472},{13,10,363},{144,10,52},{134,0,1729},{6,0,199
> 9}
> -,{136,0,969},{4,10,134},{133,10,372},{4,0,60},{7,0,941},{7,0,1800},{8,0,314},{9,
> -
> 0,700},{139,0,487},{134,0,1144},{6,11,162},{7,11,1960},{136,11,831},{132,11,70
> 6}
> -,{135,0,1147},{138,11,426},{138,11,89},{7,0,1853},{138,0,437},{136,0,419},{135,
> -
> 10,1634},{133,0,828},{5,0,806},{7,0,176},{7,0,178},{7,0,1240},{7,0,1976},{132,10
> -,644},{135,11,1877},{5,11,420},{135,11,1449},{4,0,51},{5,0,39},{6,0,4},{7,0,591}
> -,{7,0,849},{7,0,951},{7,0,1613},{7,0,1760},{7,0,1988},{9,0,434},{10,0,754},{11,0
> -,25},{139,0,37},{10,11,57},{138,11,277},{135,10,540},{132,11,204},{135,0,159},{
> -
> 139,11,231},{133,0,902},{7,0,928},{7,11,366},{9,11,287},{12,11,199},{12,11,556},
> -
> {140,11,577},{6,10,623},{136,10,789},{4,10,908},{5,10,359},{5,10,508},{6,10,172
> 3
> -
> },{7,10,343},{7,10,1996},{135,10,2026},{134,0,270},{4,10,341},{135,10,480},{5,1
> 1
> -
> ,356},{135,11,224},{11,11,588},{11,11,864},{11,11,968},{143,11,160},{132,0,556},
> -{137,0,801},{132,0,416},{142,0,372},{5,0,152},{5,0,197},{7,0,340},{7,0,867},{10,
> -0,548},{10,0,581},{11,0,6},{12,0,3},{12,0,19},{14,0,110},{142,0,289},{139,0,369}
> -,{7,11,630},{9,11,567},{11,11,150},{11,11,444},{141,11,119},{134,11,539},{7,10,
> -1995},{8,10,299},{11,10,890},{140,10,674},{7,0,34},{7,0,190},{8,0,28},{8,0,141},
> -{8,0,444},{8,0,811},{9,0,468},{11,0,334},{12,0,24},{12,0,386},{140,0,576},{133,0
> -
> ,757},{7,0,1553},{136,0,898},{133,0,721},{136,0,1012},{4,0,789},{5,0,647},{135,0
> -
> ,1102},{132,0,898},{10,0,183},{4,10,238},{5,10,503},{6,10,179},{7,10,2003},{8,10
> -,381},{8,10,473},{9,10,149},{10,10,788},{15,10,45},{15,10,86},{20,10,110},{150,
> -
> 10,57},{9,0,136},{19,0,107},{4,10,121},{5,10,156},{5,10,349},{10,10,605},{142,10
> -
> ,342},{4,11,235},{135,11,255},{4,11,194},{5,11,584},{6,11,384},{7,11,583},{10,11
> -,761},{11,11,760},{139,11,851},{6,10,80},{6,10,1694},{7,10,173},{7,10,1974},{9,
> -10,547},{10,10,730},{14,10,18},{150,10,39},{4,10,923},{134,10,1711},{5,0,277},{
> -
> 141,0,247},{132,0,435},{133,11,562},{134,0,1311},{5,11,191},{137,11,271},{132,
> 10
> -
> ,595},{7,11,1537},{14,11,96},{143,11,73},{5,0,437},{7,0,502},{7,0,519},{7,0,1122
> -},{7,0,1751},{14,0,211},{6,10,459},{7,10,1753},{7,10,1805},{8,10,658},{9,10,1},{
> -
> 11,10,959},{141,10,446},{6,0,814},{4,11,470},{5,11,473},{6,11,153},{7,11,1503},{
> -7,11,1923},{10,11,701},{11,11,132},{11,11,168},{11,11,227},{11,11,320},{11,11,
> -
> 436},{11,11,525},{11,11,855},{12,11,41},{12,11,286},{13,11,103},{13,11,284},{14,
> -
> 11,255},{14,11,262},{15,11,117},{143,11,127},{5,0,265},{6,0,212},{135,0,28},{13
> 8
> -
> ,0,750},{133,11,327},{6,11,552},{7,11,1754},{137,11,604},{134,0,2012},{132,0,70
> 2
> -},{5,11,80},{6,11,405},{7,11,403},{7,11,1502},{7,11,1626},{8,11,456},{9,11,487},
> -{9,11,853},{9,11,889},{10,11,309},{11,11,721},{11,11,994},{12,11,430},{141,11,
> -165},{5,0,808},{135,0,2045},{5,0,166},{8,0,739},{140,0,511},{134,10,490},{4,11,
> -453},{5,11,887},{6,11,535},{8,11,6},{136,11,543},{4,0,119},{5,0,170},{5,0,447},{
> -7,0,1708},{7,0,1889},{9,0,357},{9,0,719},{12,0,486},{140,0,596},{137,0,500},{7,
> -10,250},{136,10,507},{132,10,158},{6,0,809},{134,0,1500},{9,0,327},{11,0,350},{
> -
> 11,0,831},{13,0,352},{4,10,140},{7,10,362},{8,10,209},{9,10,10},{9,10,503},{9,10
> -,614},{10,10,689},{11,10,327},{11,10,725},{12,10,252},{12,10,583},{13,10,192},{
> -
> 14,10,269},{14,10,356},{148,10,50},{135,11,741},{4,0,450},{7,0,1158},{19,10,1},{
> -
> 19,10,26},{150,10,9},{6,0,597},{135,0,1318},{134,0,1602},{6,10,228},{7,10,1341},
> -{9,10,408},{138,10,343},{7,0,1375},{7,0,1466},{138,0,331},{132,0,754},{132,10,
> -557},{5,11,101},{6,11,88},{6,11,543},{7,11,1677},{9,11,100},{10,11,677},{14,11,
> -169},{14,11,302},{14,11,313},{15,11,48},{143,11,84},{134,0,1368},{4,11,310},{9,
> -
> 11,795},{10,11,733},{11,11,451},{12,11,249},{14,11,115},{14,11,286},{143,11,10
> 0}
> -,{132,10,548},{10,0,557},{7,10,197},{8,10,142},{8,10,325},{9,10,150},{9,10,596},
> -{10,10,353},{11,10,74},{11,10,315},{12,10,662},{12,10,681},{14,10,423},{143,10,
> -141},{133,11,587},{5,0,850},{136,0,799},{10,0,908},{12,0,701},{12,0,757},{142,0,
> -466},{4,0,62},{5,0,275},{18,0,19},{6,10,399},{6,10,579},{7,10,692},{7,10,846},{7
> -,10,1015},{7,10,1799},{8,10,403},{9,10,394},{10,10,133},{12,10,4},{12,10,297},{
> -
> 12,10,452},{16,10,81},{18,10,25},{21,10,14},{22,10,12},{151,10,18},{12,0,459},{7
> -,10,1546},{11,10,299},{142,10,407},{132,10,177},{132,11,498},{7,11,217},{8,11,
> -
> 140},{138,11,610},{5,10,411},{135,10,653},{134,0,1802},{7,10,439},{10,10,727},{
> -
> 11,10,260},{139,10,684},{133,11,905},{11,11,580},{142,11,201},{134,0,1397},{5,
> 10
> -
> ,208},{7,10,753},{135,10,1528},{7,0,238},{7,0,2033},{8,0,120},{8,0,188},{8,0,659
> -},{9,0,598},{10,0,466},{12,0,342},{12,0,588},{13,0,503},{14,0,246},{143,0,92},{
> -
> 135,11,1041},{4,11,456},{7,11,105},{7,11,358},{7,11,1637},{8,11,643},{139,11,48
> 3
> -},{6,0,1318},{134,0,1324},{4,0,201},{7,0,1744},{8,0,602},{11,0,247},{11,0,826},{
> -
> 17,0,65},{133,10,242},{8,0,164},{146,0,62},{133,10,953},{139,10,802},{133,0,615}
> -
> ,{7,11,1566},{8,11,269},{9,11,212},{9,11,718},{14,11,15},{14,11,132},{142,11,22
> 7
> -},{133,10,290},{132,10,380},{5,10,52},{7,10,277},{9,10,368},{139,10,791},{135,0,
> -
> 1243},{133,11,539},{11,11,919},{141,11,409},{136,0,968},{133,11,470},{134,0,88
> 2}
> -,{132,0,907},{5,0,100},{10,0,329},{12,0,416},{149,0,29},{10,10,138},{139,10,476}
> -,{5,10,725},{5,10,727},{6,11,91},{7,11,435},{135,10,1811},{4,11,16},{5,11,316},{
> -
> 5,11,842},{6,11,370},{6,11,1778},{8,11,166},{11,11,812},{12,11,206},{12,11,351},
> -{14,11,418},{16,11,15},{16,11,34},{18,11,3},{19,11,3},{19,11,7},{20,11,4},{149,
> -11,21},{132,0,176},{5,0,636},{5,0,998},{7,0,9},{7,0,1508},{8,0,26},{9,0,317},{9,
> -0,358},{10,0,210},{10,0,292},{10,0,533},{11,0,555},{12,0,526},{12,0,607},{13,0,
> -263},{13,0,459},{142,0,271},{6,0,256},{8,0,265},{4,10,38},{7,10,307},{7,10,999},
> -
> {7,10,1481},{7,10,1732},{7,10,1738},{9,10,414},{11,10,316},{12,10,52},{13,10,42
> 0
> -
> },{147,10,100},{135,10,1296},{4,11,611},{133,11,606},{4,0,643},{142,11,21},{133,
> -11,715},{133,10,723},{6,0,610},{135,11,597},{10,0,127},{141,0,27},{6,0,1995},{6,
> -0,2001},{8,0,119},{136,0,973},{4,11,149},{138,11,368},{12,0,522},{4,11,154},{5,
> -
> 10,109},{6,10,1784},{7,11,1134},{7,10,1895},{8,11,105},{12,10,296},{140,10,302},
> -{4,11,31},{6,11,429},{7,11,962},{9,11,458},{139,11,691},{10,0,553},{11,0,876},{
> -13,0,193},{13,0,423},{14,0,166},{19,0,84},{4,11,312},{5,10,216},{7,10,1879},{9,
> -10,141},{9,10,270},{9,10,679},{10,10,159},{11,10,197},{12,10,538},{12,10,559},{
> -
> 14,10,144},{14,10,167},{143,10,67},{134,0,1582},{7,0,1578},{135,11,1578},{137,
> 10
> -
> ,81},{132,11,236},{134,10,391},{134,0,795},{7,10,322},{136,10,249},{5,11,836},{
> 5
> -
> ,11,857},{6,11,1680},{7,11,59},{147,11,53},{135,0,432},{10,11,68},{139,11,494},{
> -
> 4,11,81},{139,11,867},{7,0,126},{136,0,84},{142,11,280},{5,11,282},{8,11,650},{9
> -,11,295},{9,11,907},{138,11,443},{136,0,790},{5,10,632},{138,10,526},{6,0,64},{
> -
> 12,0,377},{13,0,309},{14,0,141},{14,0,429},{14,11,141},{142,11,429},{134,0,1529}
> -,{6,0,321},{7,0,1857},{9,0,530},{19,0,99},{7,10,948},{7,10,1042},{8,10,235},{8,
> -10,461},{9,10,453},{10,10,354},{145,10,77},{7,0,1104},{11,0,269},{11,0,539},{11,
> -0,627},{11,0,706},{11,0,975},{12,0,248},{12,0,434},{12,0,600},{12,0,622},{13,0,
> -297},{13,0,485},{14,0,69},{14,0,409},{143,0,108},{4,10,362},{7,10,52},{7,10,303}
> -,{10,11,70},{12,11,26},{14,11,17},{14,11,178},{15,11,34},{149,11,12},{11,0,977},
> -{141,0,507},{9,0,34},{139,0,484},{5,10,196},{6,10,486},{7,10,212},{8,10,309},{
> -136,10,346},{6,0,1700},{7,0,26},{7,0,293},{7,0,382},{7,0,1026},{7,0,1087},{7,0,
> -2027},{8,0,24},{8,0,114},{8,0,252},{8,0,727},{8,0,729},{9,0,30},{9,0,199},{9,0,
> -231},{9,0,251},{9,0,334},{9,0,361},{9,0,712},{10,0,55},{10,0,60},{10,0,232},{10,
> -
> 0,332},{10,0,384},{10,0,396},{10,0,504},{10,0,542},{10,0,652},{11,0,20},{11,0,48
> -},{11,0,207},{11,0,291},{11,0,298},{11,0,342},{11,0,365},{11,0,394},{11,0,620},{
> -11,0,705},{11,0,1017},{12,0,123},{12,0,340},{12,0,406},{12,0,643},{13,0,61},{13,
> -0,269},{13,0,311},{13,0,319},{13,0,486},{14,0,234},{15,0,62},{15,0,85},{16,0,71}
> -
> ,{18,0,119},{20,0,105},{135,10,1912},{4,11,71},{5,11,376},{7,11,119},{138,11,66
> 5
> -
> },{10,0,918},{10,0,926},{4,10,686},{136,11,55},{138,10,625},{136,10,706},{132,1
> 1
> -,479},{4,10,30},{133,10,43},{6,0,379},{7,0,270},{8,0,176},{8,0,183},{9,0,432},{9
> -,0,661},{12,0,247},{12,0,617},{18,0,125},{7,11,607},{8,11,99},{152,11,4},{5,0,
> -792},{133,0,900},{4,11,612},{133,11,561},{4,11,41},{4,10,220},{5,11,74},{7,10,
> -
> 1535},{7,11,1627},{11,11,871},{140,11,619},{135,0,1920},{7,11,94},{11,11,329},{
> -
> 11,11,965},{12,11,241},{14,11,354},{15,11,22},{148,11,63},{9,11,209},{137,11,30
> 0
> -},{134,0,771},{135,0,1979},{4,0,901},{133,0,776},{142,0,254},{133,11,98},{9,11,
> -
> 16},{141,11,386},{133,11,984},{4,11,182},{6,11,205},{135,11,220},{7,10,1725},{7,
> -10,1774},{138,10,393},{5,10,263},{134,10,414},{4,11,42},{9,11,205},{9,11,786},{
> -138,11,659},{14,0,140},{148,0,41},{8,0,440},{10,0,359},{6,10,178},{6,11,289},{6,
> -
> 10,1750},{7,11,1670},{9,10,690},{10,10,155},{10,10,373},{11,10,698},{12,11,57},
> {
> -13,10,155},{20,10,93},{151,11,4},{4,0,37},{5,0,334},{7,0,1253},{151,11,25},{4,0,
> -508},{4,11,635},{5,10,97},{137,10,393},{139,11,533},{4,0,640},{133,0,513},{134,
> -
> 10,1639},{132,11,371},{4,11,272},{7,11,836},{7,11,1651},{145,11,89},{5,11,825},
> {
> -
> 6,11,444},{6,11,1640},{136,11,308},{4,10,191},{7,10,934},{8,10,647},{145,10,97},
> -{12,0,246},{15,0,162},{19,0,64},{20,0,8},{20,0,95},{22,0,24},{152,0,17},{4,0,533
> -},{5,10,165},{9,10,346},{138,10,655},{5,11,737},{139,10,885},{133,10,877},{8,10,
> -
> 128},{139,10,179},{137,11,307},{140,0,752},{133,0,920},{135,0,1048},{5,0,153},{
> 6
> -
> ,0,580},{6,10,1663},{7,10,132},{7,10,1154},{7,10,1415},{7,10,1507},{12,10,493},{
> -
> 15,10,105},{151,10,15},{5,10,459},{7,10,1073},{8,10,241},{136,10,334},{138,0,39
> 1
> -
> },{135,0,1952},{133,11,525},{8,11,641},{11,11,388},{140,11,580},{142,0,126},{13
> 4
> -,0,640},{132,0,483},{7,0,1616},{9,0,69},{6,10,324},{6,10,520},{7,10,338},{7,10,
> -1729},{8,10,228},{139,10,750},{5,11,493},{134,11,528},{135,0,734},{4,11,174},{
> -
> 135,11,911},{138,0,480},{9,0,495},{146,0,104},{135,10,705},{9,0,472},{4,10,73},{
> -6,10,612},{7,10,927},{7,10,1330},{7,10,1822},{8,10,217},{9,10,765},{9,10,766},{
> -
> 10,10,408},{11,10,51},{11,10,793},{12,10,266},{15,10,158},{20,10,89},{150,10,32}
> -,{7,11,548},{137,11,58},{4,11,32},{5,11,215},{6,11,269},{7,11,1782},{7,11,1892},
> -
> {10,11,16},{11,11,822},{11,11,954},{141,11,481},{132,0,874},{9,0,229},{5,10,389}
> -
> ,{136,10,636},{7,11,1749},{136,11,477},{134,0,948},{5,11,308},{135,11,1088},{4,
> 0
> -
> ,748},{139,0,1009},{136,10,21},{6,0,555},{135,0,485},{5,11,126},{8,11,297},{9,11
> -,366},{9,11,445},{12,11,53},{12,11,374},{141,11,492},{7,11,1551},{139,11,361},{
> -
> 136,0,193},{136,0,472},{8,0,653},{13,0,93},{147,0,14},{132,0,984},{132,11,175},{
> -
> 5,0,172},{6,0,1971},{132,11,685},{149,11,8},{133,11,797},{13,0,83},{5,10,189},{7
> -
> ,10,442},{7,10,443},{8,10,281},{12,10,174},{141,10,261},{134,0,1568},{133,11,56
> 5
> -},{139,0,384},{133,0,260},{7,0,758},{7,0,880},{7,0,1359},{9,0,164},{9,0,167},{10
> -,0,156},{10,0,588},{12,0,101},{14,0,48},{15,0,70},{6,10,2},{7,10,1262},{7,10,
> -1737},{8,10,22},{8,10,270},{8,10,612},{9,10,312},{9,10,436},{10,10,311},{10,10,
> -
> 623},{11,10,72},{11,10,330},{11,10,455},{12,10,321},{12,10,504},{12,10,530},{12,
> -10,543},{13,10,17},{13,10,156},{13,10,334},{17,10,60},{148,10,64},{4,11,252},{7,
> -
> 11,1068},{10,11,434},{11,11,228},{11,11,426},{13,11,231},{18,11,106},{148,11,8
> 7}
> -,{7,10,354},{10,10,410},{139,10,815},{6,0,367},{7,10,670},{7,10,1327},{8,10,411}
> -
> ,{8,10,435},{9,10,653},{9,10,740},{10,10,385},{11,10,222},{11,10,324},{11,10,82
> 9
> -},{140,10,611},{7,0,1174},{6,10,166},{135,10,374},{146,0,121},{132,0,828},{5,11,
> -231},{138,11,509},{7,11,601},{9,11,277},{9,11,674},{10,11,178},{10,11,257},{10,
> -
> 11,418},{11,11,531},{11,11,544},{11,11,585},{12,11,113},{12,11,475},{13,11,99},
> {
> -
> 142,11,428},{134,0,1541},{135,11,1779},{5,0,343},{134,10,398},{135,10,50},{135,
> -11,1683},{4,0,440},{7,0,57},{8,0,167},{8,0,375},{9,0,82},{9,0,561},{9,0,744},{10
> -
> ,0,620},{137,11,744},{134,0,926},{6,10,517},{7,10,1159},{10,10,621},{139,10,192}
> -,{137,0,827},{8,0,194},{136,0,756},{10,10,223},{139,10,645},{7,10,64},{136,10,
> -
> 245},{4,11,399},{5,11,119},{5,11,494},{7,11,751},{137,11,556},{132,0,808},{135,
> 0
> -,22},{7,10,1763},{140,10,310},{5,0,639},{7,0,1249},{11,0,896},{134,11,584},{134,
> -
> 0,1614},{135,0,860},{135,11,1121},{5,10,129},{6,10,61},{135,10,947},{4,0,102},{
> 7
> -,0,815},{7,0,1699},{139,0,964},{13,10,505},{141,10,506},{139,10,1000},{132,11,
> -
> 679},{132,0,899},{132,0,569},{5,11,694},{137,11,714},{136,0,795},{6,0,2045},{13
> 9
> -,11,7},{6,0,52},{9,0,104},{9,0,559},{12,0,308},{147,0,87},{4,0,301},{132,0,604},
> -
> {133,10,637},{136,0,779},{5,11,143},{5,11,769},{6,11,1760},{7,11,682},{7,11,199
> 2
> -},{136,11,736},{137,10,590},{147,0,32},{137,11,527},{5,10,280},{135,10,1226},{
> -
> 134,0,494},{6,0,677},{6,0,682},{134,0,1044},{133,10,281},{135,10,1064},{7,0,508}
> -,{133,11,860},{6,11,422},{7,11,0},{7,11,1544},{9,11,577},{11,11,990},{12,11,141}
> -
> ,{12,11,453},{13,11,47},{141,11,266},{134,0,1014},{5,11,515},{137,11,131},{134,
> 0
> -,957},{132,11,646},{6,0,310},{7,0,1849},{8,0,72},{8,0,272},{8,0,431},{9,0,12},{9
> -,0,376},{10,0,563},{10,0,630},{10,0,796},{10,0,810},{11,0,367},{11,0,599},{11,0,
> -
> 686},{140,0,672},{7,0,570},{4,11,396},{7,10,120},{7,11,728},{8,10,489},{9,11,117
> -
> },{9,10,319},{10,10,820},{11,10,1004},{12,10,379},{12,10,679},{13,10,117},{13,1
> 1
> -,202},{13,10,412},{14,10,25},{15,10,52},{15,10,161},{16,10,47},{20,11,51},{149,
> -10,2},{6,11,121},{6,11,124},{6,11,357},{7,11,1138},{7,11,1295},{8,11,162},{139,
> -
> 11,655},{8,0,449},{4,10,937},{5,10,801},{136,11,449},{139,11,958},{6,0,181},{7,0
> -
> ,537},{8,0,64},{9,0,127},{10,0,496},{12,0,510},{141,0,384},{138,11,253},{4,0,244
> -},{135,0,233},{133,11,237},{132,10,365},{6,0,1650},{10,0,702},{139,0,245},{5,10,
> -7},{139,10,774},{13,0,463},{20,0,49},{13,11,463},{148,11,49},{4,10,734},{5,10,
> -
> 662},{134,10,430},{4,10,746},{135,10,1090},{5,10,360},{136,10,237},{137,0,338},
> {
> -
> 143,11,10},{7,11,571},{138,11,366},{134,0,1279},{9,11,513},{10,11,22},{10,11,39}
> -,{12,11,122},{140,11,187},{133,0,896},{146,0,178},{134,0,695},{137,0,808},{134,
> -11,587},{7,11,107},{7,11,838},{8,11,550},{138,11,401},{7,0,1117},{136,0,539},{4,
> -
> 10,277},{5,10,608},{6,10,493},{7,10,457},{140,10,384},{133,11,768},{12,0,257},{
> 7
> -,10,27},{135,10,316},{140,0,1003},{4,0,207},{5,0,586},{5,0,676},{6,0,448},{8,0,
> -244},{11,0,1},{13,0,3},{16,0,54},{17,0,4},{18,0,13},{133,10,552},{4,10,401},{137
> -
> ,10,264},{5,0,516},{7,0,1883},{135,11,1883},{12,0,960},{132,11,894},{5,0,4},{5,0
> -,810},{6,0,13},{6,0,538},{6,0,1690},{6,0,1726},{7,0,499},{7,0,1819},{8,0,148},{8
> -,0,696},{8,0,791},{12,0,125},{143,0,9},{135,0,1268},{11,0,30},{14,0,315},{9,10,
> -543},{10,10,524},{12,10,524},{16,10,18},{20,10,26},{148,10,65},{6,0,748},{4,10,
> -205},{5,10,623},{7,10,104},{136,10,519},{11,0,542},{139,0,852},{140,0,6},{132,0,
> -
> 848},{7,0,1385},{11,0,582},{11,0,650},{11,0,901},{11,0,949},{12,0,232},{12,0,236
> -},{13,0,413},{13,0,501},{18,0,116},{7,10,579},{9,10,41},{9,10,244},{9,10,669},{
> -
> 10,10,5},{11,10,861},{11,10,951},{139,10,980},{4,0,945},{6,0,1811},{6,0,1845},{6
> -,0,1853},{6,0,1858},{8,0,862},{12,0,782},{12,0,788},{18,0,160},{148,0,117},{132,
> -10,717},{4,0,925},{5,0,803},{8,0,698},{138,0,828},{134,0,1416},{132,0,610},{139,
> -
> 0,992},{6,0,878},{134,0,1477},{135,0,1847},{138,11,531},{137,11,539},{134,11,2
> 72
> -},{133,0,383},{134,0,1404},{132,10,489},{4,11,9},{5,11,128},{7,11,368},{11,11,
> -
> 480},{148,11,3},{136,0,986},{9,0,660},{138,0,347},{135,10,892},{136,11,682},{7,
> 0
> -,572},{9,0,592},{11,0,680},{12,0,356},{140,0,550},{7,0,1411},{138,11,527},{4,11,
> -
> 2},{7,11,545},{135,11,894},{137,10,473},{11,0,64},{7,11,481},{7,10,819},{9,10,26
> -},{9,10,392},{9,11,792},{10,10,152},{10,10,226},{12,10,276},{12,10,426},{12,10,
> -589},{13,10,460},{15,10,97},{19,10,48},{148,10,104},{135,10,51},{136,11,445},{
> -
> 136,11,646},{135,0,606},{132,10,674},{6,0,1829},{134,0,1830},{132,10,770},{5,1
> 0,
> -
> 79},{7,10,1027},{7,10,1477},{139,10,52},{5,11,530},{142,11,113},{134,10,1666},{
> 7
> -,0,748},{139,0,700},{134,10,195},{133,10,789},{9,0,87},{10,0,365},{4,10,251},{4,
> -
> 10,688},{7,10,513},{135,10,1284},{136,11,111},{133,0,127},{6,0,198},{140,0,83},
> {
> -
> 133,11,556},{133,10,889},{4,10,160},{5,10,330},{7,10,1434},{136,10,174},{5,0,27
> 6
> -},{6,0,55},{7,0,1369},{138,0,864},{8,11,16},{140,11,568},{6,0,1752},{136,0,726},
> -{135,0,1066},{133,0,764},{6,11,186},{137,11,426},{11,0,683},{139,11,683},{6,0,
> -309},{7,0,331},{138,0,550},{133,10,374},{6,0,1212},{6,0,1852},{7,0,1062},{8,0,
> -
> 874},{8,0,882},{138,0,936},{132,11,585},{134,0,1364},{7,0,986},{133,10,731},{6,
> 0
> -,723},{6,0,1408},{138,0,381},{135,0,1573},{134,0,1025},{4,10,626},{5,10,642},{6,
> -10,425},{10,10,202},{139,10,141},{4,11,93},{5,11,252},{6,11,229},{7,11,291},{9,
> -11,550},{139,11,644},{137,11,749},{137,11,162},{132,11,381},{135,0,1559},{6,0,
> -194},{7,0,133},{10,0,493},{10,0,570},{139,0,664},{5,0,24},{5,0,569},{6,0,3},{6,0
> -,119},{6,0,143},{6,0,440},{7,0,295},{7,0,599},{7,0,1686},{7,0,1854},{8,0,424},{9
> -,0,43},{9,0,584},{9,0,760},{10,0,148},{10,0,328},{11,0,159},{11,0,253},{11,0,506
> -
> },{12,0,487},{140,0,531},{6,0,661},{134,0,1517},{136,10,835},{151,10,17},{5,0,14
> -},{5,0,892},{6,0,283},{7,0,234},{136,0,537},{139,0,541},{4,0,126},{8,0,635},{147
> -,0,34},{4,0,316},{4,0,495},{135,0,1561},{4,11,187},{5,11,184},{5,11,690},{7,11,
> -
> 1869},{138,11,756},{139,11,783},{4,0,998},{137,0,861},{136,0,1009},{139,11,292
> },
> -
> {5,11,21},{6,11,77},{6,11,157},{7,11,974},{7,11,1301},{7,11,1339},{7,11,1490},{7
> -
> ,11,1873},{137,11,628},{7,11,1283},{9,11,227},{9,11,499},{10,11,341},{11,11,325}
> -,{11,11,408},{14,11,180},{15,11,144},{18,11,47},{147,11,49},{4,0,64},{5,0,352},{
> -
> 5,0,720},{6,0,368},{139,0,359},{5,10,384},{8,10,455},{140,10,48},{5,10,264},{134
> -,10,184},{7,0,1577},{10,0,304},{10,0,549},{12,0,365},{13,0,220},{13,0,240},{142,
> -
> 0,33},{134,0,1107},{134,0,929},{135,0,1142},{6,0,175},{137,0,289},{5,0,432},{13
> 3
> -,0,913},{6,0,279},{7,0,219},{5,10,633},{135,10,1323},{7,0,785},{7,10,359},{8,10,
> -
> 243},{140,10,175},{139,0,595},{132,10,105},{8,11,398},{9,11,681},{139,11,632},{
> -
> 140,0,80},{5,0,931},{134,0,1698},{142,11,241},{134,11,20},{134,0,1323},{11,0,52
> 6
> -},{11,0,939},{141,0,290},{5,0,774},{6,0,780},{6,0,1637},{6,0,1686},{6,0,1751},{8
> -,0,559},{141,0,109},{141,0,127},{7,0,1167},{11,0,934},{13,0,391},{17,0,76},{135,
> -
> 11,709},{135,0,963},{6,0,260},{135,0,1484},{134,0,573},{4,10,758},{139,11,941},
> {
> -135,10,1649},{145,11,36},{4,0,292},{137,0,580},{4,0,736},{5,0,871},{6,0,1689},{
> -135,0,1944},{7,11,945},{11,11,713},{139,11,744},{134,0,1164},{135,11,937},{6,0,
> -1922},{9,0,982},{15,0,173},{15,0,178},{15,0,200},{18,0,189},{18,0,207},{21,0,47}
> -
> ,{135,11,1652},{7,0,1695},{139,10,128},{6,0,63},{135,0,920},{133,0,793},{143,11,
> -134},{133,10,918},{5,0,67},{6,0,62},{6,0,374},{135,0,1391},{9,0,790},{12,0,47},{
> -
> 4,11,579},{5,11,226},{5,11,323},{135,11,960},{10,11,784},{141,11,191},{4,0,391},
> -
> {135,0,1169},{137,0,443},{13,11,232},{146,11,35},{132,10,340},{132,0,271},{137,
> -
> 11,313},{5,11,973},{137,11,659},{134,0,1140},{6,11,135},{135,11,1176},{4,0,253},
> -
> {5,0,544},{7,0,300},{137,0,340},{7,0,897},{5,10,985},{7,10,509},{145,10,96},{138
> -,11,735},{135,10,1919},{138,0,890},{5,0,818},{134,0,1122},{5,0,53},{5,0,541},{6,
> -0,94},{6,0,499},{7,0,230},{139,0,321},{4,0,920},{5,0,25},{5,0,790},{6,0,457},{7,
> -0,853},{8,0,788},{142,11,31},{132,10,247},{135,11,314},{132,0,468},{7,0,243},{6,
> -
> 10,337},{7,10,494},{8,10,27},{8,10,599},{138,10,153},{4,10,184},{5,10,390},{7,10
> -
> ,618},{7,10,1456},{139,10,710},{134,0,870},{134,0,1238},{134,0,1765},{10,0,853},
> -
> {10,0,943},{14,0,437},{14,0,439},{14,0,443},{14,0,446},{14,0,452},{14,0,469},{14
> -,0,471},{14,0,473},{16,0,93},{16,0,102},{16,0,110},{148,0,121},{4,0,605},{7,0,
> -518},{7,0,1282},{7,0,1918},{10,0,180},{139,0,218},{133,0,822},{4,0,634},{11,0,
> -916},{142,0,419},{6,11,281},{7,11,6},{8,11,282},{8,11,480},{8,11,499},{9,11,198}
> -
> ,{10,11,143},{10,11,169},{10,11,211},{10,11,417},{10,11,574},{11,11,147},{11,11,
> -
> 395},{12,11,75},{12,11,407},{12,11,608},{13,11,500},{142,11,251},{134,0,898},{6,
> -0,36},{7,0,658},{8,0,454},{150,11,48},{133,11,674},{135,11,1776},{4,11,419},{10,
> -
> 10,227},{11,10,497},{11,10,709},{140,10,415},{6,10,360},{7,10,1664},{136,10,47
> 8}
> -
> ,{137,0,806},{12,11,508},{14,11,102},{14,11,226},{144,11,57},{135,11,1123},{4,1
> 1
> -,138},{7,11,1012},{7,11,1280},{137,11,76},{5,11,29},{140,11,638},{136,10,699},{
> -
> 134,0,1326},{132,0,104},{135,11,735},{132,10,739},{134,0,1331},{7,0,260},{135,
> 11
> -,260},{135,11,1063},{7,0,45},{9,0,542},{9,0,566},{10,0,728},{137,10,869},{4,10,
> -
> 67},{5,10,422},{7,10,1037},{7,10,1289},{7,10,1555},{9,10,741},{145,10,108},{139,
> -0,263},{134,0,1516},{14,0,146},{15,0,42},{16,0,23},{17,0,86},{146,0,17},{138,0,
> -468},{136,0,1005},{4,11,17},{5,11,23},{7,11,995},{11,11,383},{11,11,437},{12,11,
> -
> 460},{140,11,532},{7,0,87},{142,0,288},{138,10,96},{135,11,626},{144,10,26},{7,
> 0
> -,988},{7,0,1939},{9,0,64},{9,0,502},{12,0,22},{12,0,34},{13,0,12},{13,0,234},{
> -
> 147,0,77},{13,0,133},{8,10,203},{11,10,823},{11,10,846},{12,10,482},{13,10,277},
> -
> {13,10,302},{13,10,464},{14,10,205},{142,10,221},{4,10,449},{133,10,718},{135,0,
> -141},{6,0,1842},{136,0,872},{8,11,70},{12,11,171},{141,11,272},{4,10,355},{6,10,
> -311},{9,10,256},{138,10,404},{132,0,619},{137,0,261},{10,11,233},{10,10,758},{
> -139,11,76},{5,0,246},{8,0,189},{9,0,355},{9,0,512},{10,0,124},{10,0,453},{11,0,
> -
> 143},{11,0,416},{11,0,859},{141,0,341},{134,11,442},{133,10,827},{5,10,64},{140,
> -
> 10,581},{4,10,442},{7,10,1047},{7,10,1352},{135,10,1643},{134,11,1709},{5,0,67
> 8}
> -,{6,0,305},{7,0,775},{7,0,1065},{133,10,977},{11,11,69},{12,11,105},{12,11,117},
> -
> {13,11,213},{14,11,13},{14,11,62},{14,11,177},{14,11,421},{15,11,19},{146,11,14
> 1
> -},{137,11,309},{5,0,35},{7,0,862},{7,0,1886},{138,0,179},{136,0,285},{132,0,517}
> -
> ,{7,11,976},{9,11,146},{10,11,206},{10,11,596},{13,11,218},{142,11,153},{132,10,
> -254},{6,0,214},{12,0,540},{4,10,275},{7,10,1219},{140,10,376},{8,0,667},{11,0,
> -403},{146,0,83},{12,0,74},{10,11,648},{11,11,671},{143,11,46},{135,0,125},{134,
> -10,1753},{133,0,761},{6,0,912},{4,11,518},{6,10,369},{6,10,502},{7,10,1036},{7,
> -11,1136},{8,10,348},{9,10,452},{10,10,26},{11,10,224},{11,10,387},{11,10,772},{
> -
> 12,10,95},{12,10,629},{13,10,195},{13,10,207},{13,10,241},{14,10,260},{14,10,27
> 0
> -},{143,10,140},{10,0,131},{140,0,72},{132,10,269},{5,10,480},{7,10,532},{7,10,
> -
> 1197},{7,10,1358},{8,10,291},{11,10,349},{142,10,396},{8,11,689},{137,11,863},{
> 8
> -,0,333},{138,0,182},{4,11,18},{7,11,145},{7,11,444},{7,11,1278},{8,11,49},{8,11,
> -
> 400},{9,11,71},{9,11,250},{10,11,459},{12,11,160},{144,11,24},{14,11,35},{142,1
> 1
> -,191},{135,11,1864},{135,0,1338},{148,10,15},{14,0,94},{15,0,65},{16,0,4},{16,0,
> -77},{16,0,80},{145,0,5},{12,11,82},{143,11,36},{133,11,1010},{133,0,449},{133,0,
> -646},{7,0,86},{8,0,103},{135,10,657},{7,0,2028},{138,0,641},{136,10,533},{134,0,
> -1},{139,11,970},{5,11,87},{7,11,313},{7,11,1103},{10,11,112},{10,11,582},{11,11,
> -
> 389},{11,11,813},{12,11,385},{13,11,286},{14,11,124},{146,11,108},{6,0,869},{13
> 2
> -,11,267},{6,0,277},{7,0,1274},{7,0,1386},{146,0,87},{6,0,187},{7,0,39},{7,0,1203
> -},{8,0,380},{14,0,117},{149,0,28},{4,10,211},{4,10,332},{5,10,335},{6,10,238},{7
> -,10,269},{7,10,811},{7,10,1797},{8,10,836},{9,10,507},{141,10,242},{4,0,785},{5,
> -0,368},{6,0,297},{7,0,793},{139,0,938},{7,0,464},{8,0,558},{11,0,105},{12,0,231}
> -,{14,0,386},{15,0,102},{148,0,75},{133,10,1009},{8,0,877},{140,0,731},{139,11,
> -
> 289},{10,11,249},{139,11,209},{132,11,561},{134,0,1608},{132,11,760},{134,0,14
> 29
> -},{9,11,154},{140,11,485},{5,10,228},{6,10,203},{7,10,156},{8,10,347},{137,10,
> -
> 265},{7,0,1010},{11,0,733},{11,0,759},{13,0,34},{14,0,427},{146,0,45},{7,10,1131
> -},{135,10,1468},{136,11,255},{7,0,1656},{9,0,369},{10,0,338},{10,0,490},{11,0,
> -
> 154},{11,0,545},{11,0,775},{13,0,77},{141,0,274},{133,11,621},{134,0,1038},{4,1
> 1
> -
> ,368},{135,11,641},{6,0,2010},{8,0,979},{8,0,985},{10,0,951},{138,0,1011},{134,0
> -,1005},{19,0,121},{5,10,291},{5,10,318},{7,10,765},{9,10,389},{140,10,548},{5,0,
> -20},{6,0,298},{7,0,659},{137,0,219},{7,0,1440},{11,0,854},{11,0,872},{11,0,921},
> -{12,0,551},{13,0,472},{142,0,367},{5,0,490},{6,0,615},{6,0,620},{135,0,683},{6,0
> -,1070},{134,0,1597},{139,0,522},{132,0,439},{136,0,669},{6,0,766},{6,0,1143},{6,
> -0,1245},{10,10,525},{139,10,82},{9,11,92},{147,11,91},{6,0,668},{134,0,1218},{6,
> -
> 11,525},{9,11,876},{140,11,284},{132,0,233},{136,0,547},{132,10,422},{5,10,355},
> -
> {145,10,0},{6,11,300},{135,11,1515},{4,0,482},{137,10,905},{4,0,886},{7,0,346},{
> -133,11,594},{133,10,865},{5,10,914},{134,10,1625},{135,0,334},{5,0,795},{6,0,
> -
> 1741},{133,10,234},{135,10,1383},{6,11,1641},{136,11,820},{135,0,371},{7,11,13
> 13
> -
> },{138,11,660},{135,10,1312},{135,0,622},{7,0,625},{135,0,1750},{135,0,339},{4,
> 0
> -,203},{135,0,1936},{15,0,29},{16,0,38},{15,11,29},{144,11,38},{5,0,338},{135,0,
> -
> 1256},{135,10,1493},{10,0,130},{6,10,421},{7,10,61},{7,10,1540},{138,10,501},{6,
> -11,389},{7,11,149},{9,11,142},{138,11,94},{137,10,341},{11,0,678},{12,0,307},{
> -142,10,98},{6,11,8},{7,11,1881},{136,11,91},{135,0,2044},{6,0,770},{6,0,802},{6,
> -0,812},{7,0,311},{9,0,308},{12,0,255},{6,10,102},{7,10,72},{15,10,142},{147,10,
> -
> 67},{151,10,30},{135,10,823},{135,0,1266},{135,11,1746},{135,10,1870},{4,0,400
> },
> -
> {5,0,267},{135,0,232},{7,11,24},{11,11,542},{139,11,852},{135,11,1739},{4,11,50
> 3
> -
> },{135,11,1661},{5,11,130},{7,11,1314},{9,11,610},{10,11,718},{11,11,601},{11,1
> 1
> -,819},{11,11,946},{140,11,536},{10,11,149},{11,11,280},{142,11,336},{7,0,739},{
> -
> 11,0,690},{7,11,1946},{8,10,48},{8,10,88},{8,10,582},{8,10,681},{9,10,373},{9,10
> -
> ,864},{11,10,157},{11,10,843},{148,10,27},{134,0,990},{4,10,88},{5,10,137},{5,10
> -,174},{5,10,777},{6,10,1664},{6,10,1725},{7,10,77},{7,10,426},{7,10,1317},{7,10,
> -
> 1355},{8,10,126},{8,10,563},{9,10,523},{9,10,750},{10,10,310},{10,10,836},{11,1
> 0
> -,42},{11,10,318},{11,10,731},{12,10,68},{12,10,92},{12,10,507},{12,10,692},{13,
> -10,81},{13,10,238},{13,10,374},{14,10,436},{18,10,138},{19,10,78},{19,10,111},{
> -
> 20,10,55},{20,10,77},{148,10,92},{141,10,418},{7,0,1831},{132,10,938},{6,0,776},
> -
> {134,0,915},{138,10,351},{5,11,348},{6,11,522},{6,10,1668},{7,10,1499},{8,10,11
> 7
> -
> },{9,10,314},{138,10,174},{135,10,707},{132,0,613},{133,10,403},{132,11,392},{5,
> -
> 11,433},{9,11,633},{139,11,629},{133,0,763},{132,0,878},{132,0,977},{132,0,100},
> -{6,0,463},{4,10,44},{5,10,311},{7,10,639},{7,10,762},{7,10,1827},{9,10,8},{9,10,
> -462},{148,10,83},{134,11,234},{4,10,346},{7,10,115},{9,10,180},{9,10,456},{138,
> -10,363},{5,0,362},{5,0,443},{6,0,318},{7,0,1019},{139,0,623},{5,0,463},{8,0,296}
> -,{7,11,140},{7,11,1950},{8,11,680},{11,11,817},{147,11,88},{7,11,1222},{138,11,
> -386},{142,0,137},{132,0,454},{7,0,1914},{6,11,5},{7,10,1051},{9,10,545},{11,11,
> -
> 249},{12,11,313},{16,11,66},{145,11,26},{135,0,1527},{145,0,58},{148,11,59},{5,
> 0
> -,48},{5,0,404},{6,0,557},{7,0,458},{8,0,597},{10,0,455},{10,0,606},{11,0,49},{11
> -,0,548},{12,0,476},{13,0,18},{141,0,450},{5,11,963},{134,11,1773},{133,0,729},{
> -
> 138,11,586},{5,0,442},{135,0,1984},{134,0,449},{144,0,40},{4,0,853},{7,11,180},{
> -8,11,509},{136,11,792},{6,10,185},{7,10,1899},{9,10,875},{139,10,673},{134,11,
> -524},{12,0,227},{4,10,327},{5,10,478},{7,10,1332},{136,10,753},{6,0,1491},{5,10,
> -
> 1020},{133,10,1022},{4,10,103},{133,10,401},{132,11,931},{4,10,499},{135,10,14
> 21
> -},{5,0,55},{7,0,376},{140,0,161},{133,0,450},{6,0,1174},{134,0,1562},{10,0,62},{
> -13,0,400},{135,11,1837},{140,0,207},{135,0,869},{4,11,773},{5,11,618},{137,11,
> -756},{132,10,96},{4,0,213},{7,0,223},{8,0,80},{135,10,968},{4,11,90},{5,11,337},
> -{5,11,545},{7,11,754},{9,11,186},{10,11,72},{10,11,782},{11,11,513},{11,11,577},
> -{11,11,610},{11,11,889},{11,11,961},{12,11,354},{12,11,362},{12,11,461},{12,11,
> -595},{13,11,79},{143,11,121},{7,0,381},{7,0,806},{7,0,820},{8,0,354},{8,0,437},{
> -8,0,787},{9,0,657},{10,0,58},{10,0,339},{10,0,749},{11,0,914},{12,0,162},{13,0,
> -75},{14,0,106},{14,0,198},{14,0,320},{14,0,413},{146,0,43},{136,0,747},{136,0,
> -
> 954},{134,0,1073},{135,0,556},{7,11,151},{9,11,329},{139,11,254},{5,0,692},{134,
> -0,1395},{6,10,563},{137,10,224},{134,0,191},{132,0,804},{9,11,187},{10,11,36},{
> -
> 17,11,44},{146,11,64},{7,11,165},{7,11,919},{136,11,517},{4,11,506},{5,11,295},{
> -
> 7,11,1680},{15,11,14},{144,11,5},{4,0,706},{6,0,162},{7,0,1960},{136,0,831},{135
> -
> ,11,1376},{7,11,987},{9,11,688},{10,11,522},{11,11,788},{140,11,566},{150,0,35},
> -{138,0,426},{135,0,1235},{135,11,1741},{7,11,389},{7,11,700},{7,11,940},{8,11,
> -514},{9,11,116},{9,11,535},{10,11,118},{11,11,107},{11,11,148},{11,11,922},{12,
> -
> 11,254},{12,11,421},{142,11,238},{134,0,1234},{132,11,743},{4,10,910},{5,10,83
> 2}
> -,{135,11,1335},{141,0,96},{135,11,185},{146,0,149},{4,0,204},{137,0,902},{4,11,
> -784},{133,11,745},{136,0,833},{136,0,949},{7,0,366},{9,0,287},{12,0,199},{12,0,
> -
> 556},{12,0,577},{5,11,81},{7,11,146},{7,11,1342},{7,11,1446},{8,11,53},{8,11,561
> -},{8,11,694},{8,11,754},{9,11,97},{9,11,115},{9,11,894},{10,11,462},{10,11,813},
> -{11,11,230},{11,11,657},{11,11,699},{11,11,748},{12,11,119},{12,11,200},{12,11,
> -
> 283},{14,11,273},{145,11,15},{5,11,408},{137,11,747},{9,11,498},{140,11,181},{6,
> -0,2020},{136,0,992},{5,0,356},{135,0,224},{134,0,784},{7,0,630},{9,0,567},{11,0,
> -
> 150},{11,0,444},{13,0,119},{8,10,528},{137,10,348},{134,0,539},{4,10,20},{133,1
> 0
> -,616},{142,0,27},{7,11,30},{8,11,86},{8,11,315},{8,11,700},{9,11,576},{9,11,858}
> -
> ,{11,11,310},{11,11,888},{11,11,904},{12,11,361},{141,11,248},{138,11,839},{134,
> -
> 0,755},{134,0,1063},{7,10,1091},{135,10,1765},{134,11,428},{7,11,524},{8,11,16
> 9}
> -,{8,11,234},{9,11,480},{138,11,646},{139,0,814},{7,11,1462},{139,11,659},{4,10,
> -
> 26},{5,10,429},{6,10,245},{7,10,704},{7,10,1379},{135,10,1474},{7,11,1205},{138,
> -11,637},{139,11,803},{132,10,621},{136,0,987},{4,11,266},{8,11,4},{9,11,39},{10,
> -
> 11,166},{11,11,918},{12,11,635},{20,11,10},{22,11,27},{150,11,43},{4,0,235},{13
> 5
> -,0,255},{4,0,194},{5,0,584},{6,0,384},{7,0,583},{10,0,761},{11,0,760},{139,0,851
> -},{133,10,542},{134,0,1086},{133,10,868},{8,0,1016},{136,0,1018},{7,0,1396},{7,
> -
> 11,1396},{136,10,433},{135,10,1495},{138,10,215},{141,10,124},{7,11,157},{8,11,
> -
> 279},{9,11,759},{16,11,31},{16,11,39},{16,11,75},{18,11,24},{20,11,42},{152,11,1
> -},{5,0,562},{134,11,604},{134,0,913},{5,0,191},{137,0,271},{4,0,470},{6,0,153},{
> -7,0,1503},{7,0,1923},{10,0,701},{11,0,132},{11,0,227},{11,0,320},{11,0,436},{11,
> -0,525},{11,0,855},{11,0,873},{12,0,41},{12,0,286},{13,0,103},{13,0,284},{14,0,
> -255},{14,0,262},{15,0,117},{143,0,127},{7,0,475},{12,0,45},{147,10,112},{132,11,
> -567},{137,11,859},{6,0,713},{6,0,969},{6,0,1290},{134,0,1551},{133,0,327},{6,0,
> -552},{6,0,1292},{7,0,1754},{137,0,604},{4,0,223},{6,0,359},{11,0,3},{13,0,108},{
> -14,0,89},{16,0,22},{5,11,762},{7,11,1880},{9,11,680},{139,11,798},{5,0,80},{6,0,
> -405},{7,0,403},{7,0,1502},{8,0,456},{9,0,487},{9,0,853},{9,0,889},{10,0,309},{11
> -
> ,0,721},{11,0,994},{12,0,430},{141,0,165},{133,11,298},{132,10,647},{134,0,2016}
> -,{18,10,10},{146,11,10},{4,0,453},{5,0,887},{6,0,535},{8,0,6},{8,0,543},{136,0,
> -826},{136,0,975},{10,0,961},{138,0,962},{138,10,220},{6,0,1891},{6,0,1893},{9,0,
> -916},{9,0,965},{9,0,972},{12,0,801},{12,0,859},{12,0,883},{15,0,226},{149,0,51},
> -
> {132,10,109},{135,11,267},{7,11,92},{7,11,182},{8,11,453},{9,11,204},{11,11,950}
> -,{12,11,94},{12,11,644},{16,11,20},{16,11,70},{16,11,90},{147,11,55},{134,10,
> -
> 1746},{6,11,71},{7,11,845},{7,11,1308},{8,11,160},{137,11,318},{5,0,101},{6,0,88
> -},{7,0,263},{7,0,628},{7,0,1677},{8,0,349},{9,0,100},{10,0,677},{14,0,169},{14,0
> -,302},{14,0,313},{15,0,48},{15,0,84},{7,11,237},{8,11,664},{9,11,42},{9,11,266},
> -
> {9,11,380},{9,11,645},{10,11,177},{138,11,276},{138,11,69},{4,0,310},{7,0,708},{
> -7,0,996},{9,0,795},{10,0,390},{10,0,733},{11,0,451},{12,0,249},{14,0,115},{14,0,
> -286},{143,0,100},{5,0,587},{4,10,40},{10,10,67},{11,10,117},{11,10,768},{139,10,
> -
> 935},{6,0,1942},{7,0,512},{136,0,983},{7,10,992},{8,10,301},{9,10,722},{12,10,63
> -
> },{13,10,29},{14,10,161},{143,10,18},{136,11,76},{139,10,923},{134,0,645},{134,
> 0
> -,851},{4,0,498},{132,11,293},{7,0,217},{8,0,140},{10,0,610},{14,11,352},{17,11,
> -53},{18,11,146},{18,11,152},{19,11,11},{150,11,54},{134,0,1448},{138,11,841},{
> -
> 133,0,905},{4,11,605},{7,11,518},{7,11,1282},{7,11,1918},{10,11,180},{139,11,21
> 8
> -
> },{139,11,917},{135,10,825},{140,10,328},{4,0,456},{7,0,105},{7,0,358},{7,0,1637
> -},{8,0,643},{139,0,483},{134,0,792},{6,11,96},{135,11,1426},{137,11,691},{4,11,
> -
> 651},{133,11,289},{7,11,688},{8,11,35},{9,11,511},{10,11,767},{147,11,118},{150,
> -0,56},{5,0,243},{5,0,535},{6,10,204},{10,10,320},{10,10,583},{13,10,502},{14,10,
> -
> 72},{14,10,274},{14,10,312},{14,10,344},{15,10,159},{16,10,62},{16,10,69},{17,1
> 0
> -
> ,30},{18,10,42},{18,10,53},{18,10,84},{18,10,140},{19,10,68},{19,10,85},{20,10,5
> -},{20,10,45},{20,10,101},{22,10,7},{150,10,20},{4,10,558},{6,10,390},{7,10,162},
> -{7,10,689},{9,10,360},{138,10,653},{146,11,23},{135,0,1748},{5,10,856},{6,10,
> -
> 1672},{6,10,1757},{134,10,1781},{5,0,539},{5,0,754},{6,0,876},{132,11,704},{135,
> -11,1078},{5,10,92},{10,10,736},{140,10,102},{17,0,91},{5,10,590},{137,10,213},{
> -134,0,1565},{6,0,91},{135,0,435},{4,0,939},{140,0,792},{134,0,1399},{4,0,16},{5,
> -0,316},{5,0,842},{6,0,370},{6,0,1778},{8,0,166},{11,0,812},{12,0,206},{12,0,351}
> -,{14,0,418},{16,0,15},{16,0,34},{18,0,3},{19,0,3},{19,0,7},{20,0,4},{21,0,21},{4
> -
> ,11,720},{133,11,306},{144,0,95},{133,11,431},{132,11,234},{135,0,551},{4,0,999}
> -,{6,0,1966},{134,0,2042},{7,0,619},{10,0,547},{11,0,122},{12,0,601},{15,0,7},{
> -148,0,20},{5,11,464},{6,11,236},{7,11,276},{7,11,696},{7,11,914},{7,11,1108},{7,
> -11,1448},{9,11,15},{9,11,564},{10,11,14},{12,11,565},{13,11,449},{14,11,53},{15,
> -11,13},{16,11,64},{145,11,41},{6,0,884},{6,0,1019},{134,0,1150},{6,11,1767},{12,
> -
> 11,194},{145,11,107},{136,10,503},{133,11,840},{7,0,671},{134,10,466},{132,0,8
> 88
> -},{4,0,149},{138,0,368},{4,0,154},{7,0,1134},{136,0,105},{135,0,983},{9,11,642},
> -{11,11,236},{142,11,193},{4,0,31},{6,0,429},{7,0,962},{9,0,458},{139,0,691},{6,0
> -,643},{134,0,1102},{132,0,312},{4,11,68},{5,11,634},{6,11,386},{7,11,794},{8,11,
> -
> 273},{9,11,563},{10,11,105},{10,11,171},{11,11,94},{139,11,354},{133,0,740},{13
> 5
> -
> ,0,1642},{4,11,95},{7,11,416},{8,11,211},{139,11,830},{132,0,236},{138,10,241},{
> -
> 7,11,731},{13,11,20},{143,11,11},{5,0,836},{5,0,857},{6,0,1680},{135,0,59},{10,0
> -,68},{11,0,494},{152,11,6},{4,0,81},{139,0,867},{135,0,795},{133,11,689},{4,0,
> -1001},{5,0,282},{6,0,1932},{6,0,1977},{6,0,1987},{6,0,1992},{8,0,650},{8,0,919},
> -{8,0,920},{8,0,923},{8,0,926},{8,0,927},{8,0,931},{8,0,939},{8,0,947},{8,0,956},
> -{8,0,997},{9,0,907},{10,0,950},{10,0,953},{10,0,954},{10,0,956},{10,0,958},{10,0
> -,959},{10,0,964},{10,0,970},{10,0,972},{10,0,973},{10,0,975},{10,0,976},{10,0,
> -980},{10,0,981},{10,0,984},{10,0,988},{10,0,990},{10,0,995},{10,0,999},{10,0,
> -
> 1002},{10,0,1003},{10,0,1005},{10,0,1006},{10,0,1008},{10,0,1009},{10,0,1012},{
> -
> 10,0,1014},{10,0,1015},{10,0,1019},{10,0,1020},{10,0,1022},{12,0,959},{12,0,961}
> -,{12,0,962},{12,0,963},{12,0,964},{12,0,965},{12,0,967},{12,0,968},{12,0,969},{
> -12,0,970},{12,0,971},{12,0,972},{12,0,973},{12,0,974},{12,0,975},{12,0,976},{12,
> -0,977},{12,0,979},{12,0,981},{12,0,982},{12,0,983},{12,0,984},{12,0,985},{12,0,
> -
> 986},{12,0,987},{12,0,989},{12,0,990},{12,0,992},{12,0,993},{12,0,995},{12,0,998
> -},{12,0,999},{12,0,1000},{12,0,1001},{12,0,1002},{12,0,1004},{12,0,1005},{12,0,
> -
> 1006},{12,0,1007},{12,0,1008},{12,0,1009},{12,0,1010},{12,0,1011},{12,0,1012},{
> -12,0,1014},{12,0,1015},{12,0,1016},{12,0,1017},{12,0,1018},{12,0,1019},{12,0,
> -1022},{12,0,1023},{14,0,475},{14,0,477},{14,0,478},{14,0,479},{14,0,480},{14,0,
> -
> 482},{14,0,483},{14,0,484},{14,0,485},{14,0,486},{14,0,487},{14,0,488},{14,0,489
> -},{14,0,490},{14,0,491},{14,0,492},{14,0,493},{14,0,494},{14,0,495},{14,0,496},{
> -14,0,497},{14,0,498},{14,0,499},{14,0,500},{14,0,501},{14,0,502},{14,0,503},{14,
> -0,504},{14,0,506},{14,0,507},{14,0,508},{14,0,509},{14,0,510},{14,0,511},{16,0,
> -
> 113},{16,0,114},{16,0,115},{16,0,117},{16,0,118},{16,0,119},{16,0,121},{16,0,122
> -},{16,0,123},{16,0,124},{16,0,125},{16,0,126},{16,0,127},{18,0,242},{18,0,243},{
> -18,0,244},{18,0,245},{18,0,248},{18,0,249},{18,0,250},{18,0,251},{18,0,252},{18,
> -
> 0,253},{18,0,254},{18,0,255},{20,0,125},{20,0,126},{148,0,127},{7,11,1717},{7,11
> -
> ,1769},{138,11,546},{7,11,1127},{7,11,1572},{10,11,297},{10,11,422},{11,11,764},
> -{11,11,810},{12,11,264},{13,11,102},{13,11,300},{13,11,484},{14,11,147},{14,11,
> -229},{17,11,71},{18,11,118},{147,11,120},{6,0,1148},{134,0,1586},{132,0,775},{
> -
> 135,10,954},{133,11,864},{133,11,928},{138,11,189},{135,10,1958},{6,10,549},{8,
> -10,34},{8,10,283},{9,10,165},{138,10,475},{5,10,652},{5,10,701},{135,10,449},{
> -135,11,695},{4,10,655},{7,10,850},{17,10,75},{146,10,137},{140,11,682},{133,11,
> -523},{8,0,970},{136,10,670},{136,11,555},{7,11,76},{8,11,44},{9,11,884},{10,11,
> -580},{11,11,399},{11,11,894},{15,11,122},{18,11,144},{147,11,61},{6,10,159},{6,
> -10,364},{7,10,516},{7,10,1439},{137,10,518},{4,0,71},{5,0,376},{7,0,119},{138,0,
> -665},{141,10,151},{11,0,827},{14,0,34},{143,0,148},{133,11,518},{4,0,479},{135,
> -
> 11,1787},{135,11,1852},{135,10,993},{7,0,607},{136,0,99},{134,0,1960},{132,0,7
> 93
> -},{4,0,41},{5,0,74},{7,0,1627},{11,0,871},{140,0,619},{7,0,94},{11,0,329},{11,0,
> -
> 965},{12,0,241},{14,0,354},{15,0,22},{148,0,63},{7,10,501},{9,10,111},{10,10,141
> -},{11,10,332},{13,10,43},{13,10,429},{14,10,130},{14,10,415},{145,10,102},{9,0,
> -
> 209},{137,0,300},{134,0,1497},{138,11,255},{4,11,934},{5,11,138},{136,11,610},{
> -133,0,98},{6,0,1316},{10,11,804},{138,11,832},{8,11,96},{9,11,36},{10,11,607},{
> -11,11,423},{11,11,442},{12,11,309},{14,11,199},{15,11,90},{145,11,110},{132,0,
> -463},{5,10,149},{136,10,233},{133,10,935},{4,11,652},{8,11,320},{9,11,13},{9,11,
> -398},{9,11,727},{10,11,75},{10,11,184},{10,11,230},{10,11,564},{10,11,569},{11,
> -
> 11,973},{12,11,70},{12,11,189},{13,11,57},{13,11,257},{22,11,6},{150,11,16},{14
> 2
> -
> ,0,291},{12,10,582},{146,10,131},{136,10,801},{133,0,984},{145,11,116},{4,11,69
> 2
> -},{133,11,321},{4,0,182},{6,0,205},{135,0,220},{4,0,42},{9,0,205},{9,0,786},{138
> -
> ,0,659},{6,0,801},{11,11,130},{140,11,609},{132,0,635},{5,11,345},{135,11,1016},
> -
> {139,0,533},{132,0,371},{4,0,272},{135,0,836},{6,0,1282},{135,11,1100},{5,0,825}
> -
> ,{134,0,1640},{135,11,1325},{133,11,673},{4,11,287},{133,11,1018},{135,0,357},{
> 6
> -
> ,0,467},{137,0,879},{7,0,317},{135,0,569},{6,0,924},{134,0,1588},{5,11,34},{5,10
> -,406},{10,11,724},{12,11,444},{13,11,354},{18,11,32},{23,11,24},{23,11,31},{152,
> -11,5},{6,0,1795},{6,0,1835},{6,0,1836},{6,0,1856},{8,0,844},{8,0,849},{8,0,854},
> -
> {8,0,870},{8,0,887},{10,0,852},{138,0,942},{6,10,69},{135,10,117},{137,0,307},{4
> -,0,944},{6,0,1799},{6,0,1825},{10,0,848},{10,0,875},{10,0,895},{10,0,899},{10,0,
> -902},{140,0,773},{11,0,43},{13,0,72},{141,0,142},{135,10,1830},{134,11,382},{4,
> -10,432},{135,10,824},{132,11,329},{7,0,1820},{139,11,124},{133,10,826},{133,0,
> -
> 525},{132,11,906},{7,11,1940},{136,11,366},{138,11,10},{4,11,123},{4,11,649},{5,
> -
> 11,605},{7,11,1509},{136,11,36},{6,0,110},{135,0,1681},{133,0,493},{133,11,767},
> -
> {4,0,174},{135,0,911},{138,11,786},{8,0,417},{137,0,782},{133,10,1000},{7,0,733}
> -,{137,0,583},{4,10,297},{6,10,529},{7,10,152},{7,10,713},{7,10,1845},{8,10,710},
> -{8,10,717},{12,10,639},{140,10,685},{4,0,32},{5,0,215},{6,0,269},{7,0,1782},{7,0
> -
> ,1892},{10,0,16},{11,0,822},{11,0,954},{141,0,481},{4,11,273},{5,11,658},{133,11
> -
> ,995},{136,0,477},{134,11,72},{135,11,1345},{5,0,308},{7,0,1088},{4,10,520},{13
> 5
> -,10,575},{133,11,589},{5,0,126},{8,0,297},{9,0,366},{140,0,374},{7,0,1551},{139,
> -
> 0,361},{5,11,117},{6,11,514},{6,11,541},{7,11,1164},{7,11,1436},{8,11,220},{8,11
> -
> ,648},{10,11,688},{139,11,560},{133,11,686},{4,0,946},{6,0,1807},{8,0,871},{10,0
> -,854},{10,0,870},{10,0,888},{10,0,897},{10,0,920},{12,0,722},{12,0,761},{12,0,
> -763},{12,0,764},{14,0,454},{14,0,465},{16,0,107},{18,0,167},{18,0,168},{146,0,
> -
> 172},{132,0,175},{135,0,1307},{132,0,685},{135,11,1834},{133,0,797},{6,0,745},{
> 6
> -,0,858},{134,0,963},{133,0,565},{5,10,397},{6,10,154},{7,11,196},{7,10,676},{8,
> -10,443},{8,10,609},{9,10,24},{9,10,325},{10,10,35},{10,11,765},{11,11,347},{11,
> -
> 10,535},{11,11,552},{11,11,576},{11,10,672},{11,11,790},{11,10,1018},{12,11,26
> 3}
> -,{12,10,637},{13,11,246},{13,11,270},{13,11,395},{14,11,74},{14,11,176},{14,11,
> -
> 190},{14,11,398},{14,11,412},{15,11,32},{15,11,63},{16,10,30},{16,11,88},{147,1
> 1
> -,105},{13,11,84},{141,11,122},{4,0,252},{7,0,1068},{10,0,434},{11,0,228},{11,0,
> -426},{13,0,231},{18,0,106},{148,0,87},{137,0,826},{4,11,589},{139,11,282},{5,11,
> -381},{135,11,1792},{132,0,791},{5,0,231},{10,0,509},{133,10,981},{7,0,601},{9,0,
> -277},{9,0,674},{10,0,178},{10,0,418},{10,0,571},{11,0,531},{12,0,113},{12,0,475}
> -,{13,0,99},{142,0,428},{4,10,56},{7,11,616},{7,10,1791},{8,10,607},{8,10,651},{
> -
> 10,11,413},{11,10,465},{11,10,835},{12,10,337},{141,10,480},{7,0,1591},{144,0,4
> 3
> -
> },{9,10,158},{138,10,411},{135,0,1683},{8,0,289},{11,0,45},{12,0,278},{140,0,537
> -},{6,11,120},{7,11,1188},{7,11,1710},{8,11,286},{9,11,667},{11,11,592},{139,11,
> -
> 730},{136,10,617},{135,0,1120},{135,11,1146},{139,10,563},{4,11,352},{4,10,369
> },
> -{135,11,687},{143,11,38},{4,0,399},{5,0,119},{5,0,494},{7,0,751},{9,0,556},{14,
> -
> 11,179},{15,11,151},{150,11,11},{4,11,192},{5,11,49},{6,11,200},{6,11,293},{6,11
> -
> ,1696},{135,11,488},{4,0,398},{133,0,660},{7,0,1030},{134,10,622},{135,11,595},
> {
> -141,0,168},{132,11,147},{7,0,973},{10,10,624},{142,10,279},{132,10,363},{132,0,
> -642},{133,11,934},{134,0,1615},{7,11,505},{135,11,523},{7,0,594},{7,0,851},{7,0,
> -1858},{9,0,411},{9,0,574},{9,0,666},{9,0,737},{10,0,346},{10,0,712},{11,0,246},{
> -11,0,432},{11,0,517},{11,0,647},{11,0,679},{11,0,727},{12,0,304},{12,0,305},{12,
> -0,323},{12,0,483},{12,0,572},{12,0,593},{12,0,602},{13,0,95},{13,0,101},{13,0,
> -171},{13,0,315},{13,0,378},{13,0,425},{13,0,475},{14,0,63},{14,0,380},{14,0,384}
> -,{15,0,133},{18,0,112},{148,0,72},{135,0,1093},{132,0,679},{8,0,913},{10,0,903},
> -{10,0,915},{12,0,648},{12,0,649},{14,0,455},{16,0,112},{138,11,438},{137,0,203},
> -{134,10,292},{134,0,1492},{7,0,1374},{8,0,540},{5,10,177},{6,10,616},{7,10,827},
> -{9,10,525},{138,10,656},{135,0,1486},{9,0,714},{138,10,31},{136,0,825},{134,0,
> -1511},{132,11,637},{134,0,952},{4,10,161},{133,10,631},{5,0,143},{5,0,769},{6,0,
> -
> 1760},{7,0,682},{7,0,1992},{136,0,736},{132,0,700},{134,0,1540},{132,11,777},{9,
> -
> 11,867},{138,11,837},{7,0,1557},{135,10,1684},{133,0,860},{6,0,422},{7,0,0},{7,0
> -
> ,1544},{9,0,605},{11,0,990},{12,0,235},{12,0,453},{13,0,47},{13,0,266},{9,10,469
> -
> },{9,10,709},{12,10,512},{14,10,65},{145,10,12},{11,0,807},{10,10,229},{11,10,73
> -},{139,10,376},{6,11,170},{7,11,1080},{8,11,395},{8,11,487},{11,11,125},{141,11,
> -147},{5,0,515},{137,0,131},{7,0,1605},{11,0,962},{146,0,139},{132,0,646},{4,0,
> -396},{7,0,728},{9,0,117},{13,0,202},{148,0,51},{6,0,121},{6,0,124},{6,0,357},{7,
> -0,1138},{7,0,1295},{8,0,162},{8,0,508},{11,0,655},{4,11,535},{6,10,558},{7,10,
> -
> 651},{8,11,618},{9,10,0},{10,10,34},{139,10,1008},{135,11,1245},{138,0,357},{15
> 0
> -
> ,11,23},{133,0,237},{135,0,1784},{7,10,1832},{138,10,374},{132,0,713},{132,11,4
> 6
> -},{6,0,1536},{10,0,348},{5,11,811},{6,11,1679},{6,11,1714},{135,11,2032},{11,11,
> -182},{142,11,195},{6,0,523},{7,0,738},{7,10,771},{7,10,1731},{9,10,405},{138,10,
> -421},{7,11,1458},{9,11,407},{139,11,15},{6,11,34},{7,11,69},{7,11,640},{7,11,
> -
> 1089},{8,11,708},{8,11,721},{9,11,363},{9,11,643},{10,11,628},{148,11,98},{133,
> 0
> -
> ,434},{135,0,1877},{7,0,571},{138,0,366},{5,10,881},{133,10,885},{9,0,513},{10,0
> -,25},{10,0,39},{12,0,122},{140,0,187},{132,0,580},{5,10,142},{134,10,546},{132,
> -
> 11,462},{137,0,873},{5,10,466},{11,10,571},{12,10,198},{13,10,283},{14,10,186},
> {
> -15,10,21},{143,10,103},{7,0,171},{4,10,185},{5,10,257},{5,10,839},{5,10,936},{9,
> -
> 10,399},{10,10,258},{10,10,395},{10,10,734},{11,10,1014},{12,10,23},{13,10,350},
> -{14,10,150},{147,10,6},{134,0,625},{7,0,107},{7,0,838},{8,0,550},{138,0,401},{5,
> -11,73},{6,11,23},{134,11,338},{4,0,943},{6,0,1850},{12,0,713},{142,0,434},{11,0,
> -588},{11,0,864},{11,0,936},{11,0,968},{12,0,73},{12,0,343},{12,0,394},{13,0,275}
> -,{14,0,257},{15,0,160},{7,10,404},{7,10,1377},{7,10,1430},{7,10,2017},{8,10,149}
> -,{8,10,239},{8,10,512},{8,10,793},{8,10,818},{9,10,474},{9,10,595},{10,10,122},{
> -10,10,565},{10,10,649},{10,10,783},{11,10,239},{11,10,295},{11,10,447},{11,10,
> -
> 528},{11,10,639},{11,10,800},{12,10,25},{12,10,157},{12,10,316},{12,10,390},{12,
> -
> 10,391},{12,10,395},{12,10,478},{12,10,503},{12,10,592},{12,10,680},{13,10,50},
> {
> -
> 13,10,53},{13,10,132},{13,10,198},{13,10,322},{13,10,415},{13,10,511},{14,10,71}
> -,{14,10,395},{15,10,71},{15,10,136},{17,10,123},{18,10,93},{147,10,58},{133,0,
> -768},{11,0,103},{142,0,0},{136,10,712},{132,0,799},{132,0,894},{7,11,725},{8,11,
> -
> 498},{139,11,268},{135,11,1798},{135,11,773},{141,11,360},{4,10,377},{152,10,1
> 3}
> -
> ,{135,0,1673},{132,11,583},{134,0,1052},{133,11,220},{140,11,69},{132,11,544},{
> 4
> -
> ,10,180},{135,10,1906},{134,0,272},{4,0,441},{134,0,1421},{4,0,9},{5,0,128},{7,0
> -,368},{11,0,480},{148,0,3},{5,11,176},{6,11,437},{6,11,564},{11,11,181},{141,11,
> -183},{132,10,491},{7,0,1182},{141,11,67},{6,0,1346},{4,10,171},{138,10,234},{4,
> -
> 10,586},{7,10,1186},{138,10,631},{136,0,682},{134,0,1004},{15,0,24},{143,11,24},
> -{134,0,968},{4,0,2},{6,0,742},{6,0,793},{7,0,545},{7,0,894},{9,10,931},{10,10,
> -334},{148,10,71},{136,11,600},{133,10,765},{9,0,769},{140,0,185},{4,11,790},{5,
> -11,273},{134,11,394},{7,0,474},{137,0,578},{4,11,135},{6,11,127},{7,11,1185},{7,
> -11,1511},{8,11,613},{11,11,5},{12,11,133},{12,11,495},{12,11,586},{14,11,385},{
> -
> 15,11,118},{17,11,20},{146,11,98},{133,10,424},{5,0,530},{142,0,113},{6,11,230},
> -
> {7,11,961},{7,11,1085},{136,11,462},{7,11,1954},{137,11,636},{136,10,714},{149,
> -11,6},{135,10,685},{9,10,420},{10,10,269},{10,10,285},{10,10,576},{11,10,397},{
> -
> 13,10,175},{145,10,90},{132,10,429},{5,0,556},{5,11,162},{136,11,68},{132,11,65
> 4
> -},{4,11,156},{7,11,998},{7,11,1045},{7,11,1860},{9,11,48},{9,11,692},{11,11,419}
> -,{139,11,602},{6,0,1317},{8,0,16},{9,0,825},{12,0,568},{7,11,1276},{8,11,474},{
> -137,11,652},{18,0,97},{7,10,18},{7,10,699},{7,10,1966},{8,10,752},{9,10,273},{9,
> -10,412},{9,10,703},{10,10,71},{10,10,427},{138,10,508},{10,0,703},{7,11,1454},{
> -
> 138,11,703},{4,10,53},{5,10,186},{135,10,752},{134,0,892},{134,0,1571},{8,10,57
> 5
> -
> },{10,10,289},{139,10,319},{6,0,186},{137,0,426},{134,0,1101},{132,10,675},{132,
> -
> 0,585},{6,0,1870},{137,0,937},{152,11,10},{9,11,197},{10,11,300},{12,11,473},{1
> 3
> -,11,90},{141,11,405},{4,0,93},{5,0,252},{6,0,229},{7,0,291},{9,0,550},{139,0,644
> -},{137,0,749},{9,0,162},{6,10,209},{8,10,468},{9,10,210},{11,10,36},{12,10,28},{
> -
> 12,10,630},{13,10,21},{13,10,349},{14,10,7},{145,10,13},{132,0,381},{132,11,606}
> -,{4,10,342},{135,10,1179},{7,11,1587},{7,11,1707},{10,11,528},{139,11,504},{12,
> -
> 11,39},{13,11,265},{141,11,439},{4,10,928},{133,10,910},{7,10,1838},{7,11,1978},
> -{136,11,676},{6,0,762},{6,0,796},{134,0,956},{4,10,318},{4,10,496},{7,10,856},{
> -
> 139,10,654},{137,11,242},{4,11,361},{133,11,315},{132,11,461},{132,11,472},{13
> 2,
> -0,857},{5,0,21},{6,0,77},{6,0,157},{7,0,974},{7,0,1301},{7,0,1339},{7,0,1490},{7
> -,0,1873},{9,0,628},{7,10,915},{8,10,247},{147,10,0},{4,10,202},{5,10,382},{6,10,
> -454},{7,10,936},{7,10,1803},{8,10,758},{9,10,375},{9,10,895},{10,10,743},{10,10,
> -
> 792},{11,10,978},{11,10,1012},{142,10,109},{7,11,617},{10,11,498},{11,11,501},{
> -12,11,16},{140,11,150},{7,10,1150},{7,10,1425},{7,10,1453},{10,11,747},{140,10,
> -
> 513},{133,11,155},{11,0,919},{141,0,409},{138,10,791},{10,0,633},{139,11,729},{
> 7
> -,11,163},{8,11,319},{9,11,402},{10,11,24},{10,11,681},{11,11,200},{11,11,567},{
> -
> 12,11,253},{12,11,410},{142,11,219},{5,11,475},{7,11,1780},{9,11,230},{11,11,29
> 7
> -},{11,11,558},{14,11,322},{147,11,76},{7,0,332},{6,10,445},{137,10,909},{135,11,
> -1956},{136,11,274},{134,10,578},{135,0,1489},{135,11,1848},{5,11,944},{134,11,
> -
> 1769},{132,11,144},{136,10,766},{4,0,832},{135,10,541},{8,0,398},{9,0,681},{139,
> -0,632},{136,0,645},{9,0,791},{10,0,93},{16,0,13},{17,0,23},{18,0,135},{19,0,12},
> -{20,0,1},{20,0,12},{148,0,14},{6,11,247},{137,11,555},{134,0,20},{132,0,800},{
> -
> 135,0,1841},{139,10,983},{137,10,768},{132,10,584},{141,11,51},{6,0,1993},{4,1
> 1,
> -
> 620},{138,11,280},{136,0,769},{11,0,290},{11,0,665},{7,11,1810},{11,11,866},{12,
> -11,103},{13,11,495},{17,11,67},{147,11,74},{134,0,1426},{139,0,60},{4,10,326},{
> -
> 135,10,1770},{7,0,1874},{9,0,641},{132,10,226},{6,0,644},{5,10,426},{8,10,30},{9
> -,10,2},{11,10,549},{147,10,122},{5,11,428},{138,11,442},{135,11,1871},{135,0,
> -
> 1757},{147,10,117},{135,0,937},{135,0,1652},{6,0,654},{134,0,1476},{133,11,99},
> {
> -
> 135,0,527},{132,10,345},{4,10,385},{4,11,397},{7,10,265},{135,10,587},{4,0,579},
> -
> {5,0,226},{5,0,323},{135,0,960},{134,0,1486},{8,11,502},{144,11,9},{4,10,347},{5
> -
> ,10,423},{5,10,996},{135,10,1329},{7,11,727},{146,11,73},{4,11,485},{7,11,353},{
> -
> 7,10,1259},{7,11,1523},{9,10,125},{139,10,65},{6,0,325},{5,10,136},{6,11,366},{7
> -
> ,11,1384},{7,11,1601},{136,10,644},{138,11,160},{6,0,1345},{137,11,282},{18,0,9
> 1
> -},{147,0,70},{136,0,404},{4,11,157},{133,11,471},{133,0,973},{6,0,135},{135,0,
> -
> 1176},{8,11,116},{11,11,551},{142,11,159},{4,0,549},{4,10,433},{133,10,719},{13
> 6
> -
> ,0,976},{5,11,160},{7,11,363},{7,11,589},{10,11,170},{141,11,55},{144,0,21},{144
> -
> ,0,51},{135,0,314},{135,10,1363},{4,11,108},{7,11,405},{10,11,491},{139,11,498},
> -
> {146,0,4},{4,10,555},{8,10,536},{10,10,288},{139,10,1005},{135,11,1005},{6,0,28
> 1
> -},{7,0,6},{8,0,282},{8,0,480},{8,0,499},{9,0,198},{10,0,143},{10,0,169},{10,0,
> -211},{10,0,417},{10,0,574},{11,0,147},{11,0,395},{12,0,75},{12,0,407},{12,0,608}
> -,{13,0,500},{142,0,251},{6,0,1093},{6,0,1405},{9,10,370},{138,10,90},{4,11,926},
> -
> {133,11,983},{135,0,1776},{134,0,1528},{132,0,419},{132,11,538},{6,11,294},{7,1
> 1
> -
> ,1267},{136,11,624},{135,11,1772},{138,11,301},{4,10,257},{135,10,2031},{4,0,1
> 38
> -},{7,0,1012},{7,0,1280},{9,0,76},{135,10,1768},{132,11,757},{5,0,29},{140,0,638}
> -
> ,{7,11,655},{135,11,1844},{7,0,1418},{6,11,257},{135,11,1522},{8,11,469},{138,1
> 1
> -,47},{142,11,278},{6,10,83},{6,10,1733},{135,10,1389},{11,11,204},{11,11,243},{
> -
> 140,11,293},{135,11,1875},{6,0,1710},{135,0,2038},{137,11,299},{4,0,17},{5,0,23}
> -,{7,0,995},{11,0,383},{11,0,437},{12,0,460},{140,0,532},{133,0,862},{137,10,696}
> -,{6,0,592},{138,0,946},{138,11,599},{7,10,1718},{9,10,95},{9,10,274},{10,10,279}
> -
> ,{10,10,317},{10,10,420},{11,10,303},{11,10,808},{12,10,134},{12,10,367},{13,10,
> -
> 149},{13,10,347},{14,10,349},{14,10,406},{18,10,22},{18,10,89},{18,10,122},{147,
> -10,47},{8,0,70},{12,0,171},{141,0,272},{133,10,26},{132,10,550},{137,0,812},{10,
> -0,233},{139,0,76},{134,0,988},{134,0,442},{136,10,822},{7,0,896},{4,10,902},{5,
> -10,809},{134,10,122},{5,11,150},{7,11,106},{8,11,603},{9,11,593},{9,11,634},{10,
> -
> 11,44},{10,11,173},{11,11,462},{11,11,515},{13,11,216},{13,11,288},{142,11,400},
> -
> {136,0,483},{135,10,262},{6,0,1709},{133,10,620},{4,10,34},{5,10,574},{7,10,279}
> -
> ,{7,10,1624},{136,10,601},{137,10,170},{147,0,119},{12,11,108},{141,11,291},{11,
> -0,69},{12,0,105},{12,0,117},{13,0,213},{14,0,13},{14,0,62},{14,0,177},{14,0,421}
> -,{15,0,19},{146,0,141},{137,0,309},{11,11,278},{142,11,73},{7,0,608},{7,0,976},{
> -
> 9,0,146},{10,0,206},{10,0,596},{13,0,218},{142,0,153},{133,10,332},{6,10,261},{8
> -
> ,10,182},{139,10,943},{4,11,493},{144,11,55},{134,10,1721},{132,0,768},{4,10,93
> 3
> -},{133,10,880},{7,11,555},{7,11,1316},{7,11,1412},{7,11,1839},{9,11,192},{9,11,
> -
> 589},{11,11,241},{11,11,676},{11,11,811},{11,11,891},{12,11,140},{12,11,346},{1
> 2
> -,11,479},{13,11,30},{13,11,49},{13,11,381},{14,11,188},{15,11,150},{16,11,76},{
> -
> 18,11,30},{148,11,52},{4,0,518},{135,0,1136},{6,11,568},{7,11,112},{7,11,1804},{
> -
> 8,11,362},{8,11,410},{8,11,830},{9,11,514},{11,11,649},{142,11,157},{135,11,673}
> -,{8,0,689},{137,0,863},{4,0,18},{7,0,145},{7,0,444},{7,0,1278},{8,0,49},{8,0,400
> -},{9,0,71},{9,0,250},{10,0,459},{12,0,160},{16,0,24},{132,11,625},{140,0,1020},{
> -
> 4,0,997},{6,0,1946},{6,0,1984},{134,0,1998},{6,11,16},{6,11,158},{7,11,43},{7,11
> -,129},{7,11,181},{8,11,276},{8,11,377},{10,11,523},{11,11,816},{12,11,455},{13,
> -
> 11,303},{142,11,135},{133,10,812},{134,0,658},{4,11,1},{7,11,1143},{7,11,1463},
> {
> -
> 8,11,61},{9,11,207},{9,11,390},{9,11,467},{139,11,836},{150,11,26},{140,0,106},{
> -6,0,1827},{10,0,931},{18,0,166},{20,0,114},{4,10,137},{7,10,1178},{7,11,1319},{
> -
> 135,10,1520},{133,0,1010},{4,11,723},{5,11,895},{7,11,1031},{8,11,199},{8,11,34
> 0
> -},{9,11,153},{9,11,215},{10,11,21},{10,11,59},{10,11,80},{10,11,224},{11,11,229}
> -,{11,11,652},{12,11,192},{13,11,146},{142,11,91},{132,11,295},{6,11,619},{7,11,
> -898},{7,11,1092},{8,11,485},{18,11,28},{147,11,116},{137,11,51},{6,10,1661},{7,
> -
> 10,1975},{7,10,2009},{135,10,2011},{5,11,309},{140,11,211},{5,0,87},{7,0,313},{
> 7
> -
> ,0,1103},{10,0,208},{10,0,582},{11,0,389},{11,0,813},{12,0,385},{13,0,286},{14,0
> -,124},{146,0,108},{5,11,125},{8,11,77},{138,11,15},{132,0,267},{133,0,703},{137,
> -11,155},{133,11,439},{11,11,164},{140,11,76},{9,0,496},{5,10,89},{7,10,1915},{9,
> -10,185},{9,10,235},{10,10,64},{10,10,270},{10,10,403},{10,10,469},{10,10,529},{
> -
> 10,10,590},{11,10,140},{11,10,860},{13,10,1},{13,10,422},{14,10,341},{14,10,364}
> -
> ,{17,10,93},{18,10,113},{19,10,97},{147,10,113},{133,10,695},{135,0,1121},{5,10,
> -6},{6,10,183},{7,10,680},{7,10,978},{7,10,1013},{7,10,1055},{12,10,230},{13,10,
> -172},{146,10,29},{4,11,8},{7,11,1152},{7,11,1153},{7,11,1715},{9,11,374},{10,11,
> -
> 478},{139,11,648},{135,11,1099},{6,10,29},{139,10,63},{4,0,561},{10,0,249},{139,
> -0,209},{132,0,760},{7,11,799},{138,11,511},{136,11,87},{9,0,154},{140,0,485},{
> -136,0,255},{132,0,323},{140,0,419},{132,10,311},{134,10,1740},{4,0,368},{135,0,
> -641},{7,10,170},{8,10,90},{8,10,177},{8,10,415},{11,10,714},{142,10,281},{4,11,
> -
> 69},{5,11,122},{9,11,656},{138,11,464},{5,11,849},{134,11,1633},{8,0,522},{142,
> 0
> -,328},{11,10,91},{13,10,129},{15,10,101},{145,10,125},{7,0,562},{8,0,551},{4,10,
> -494},{6,10,74},{7,10,44},{11,11,499},{12,10,17},{15,10,5},{148,10,11},{4,10,276}
> -,{133,10,296},{9,0,92},{147,0,91},{4,10,7},{5,10,90},{5,10,158},{6,10,542},{7,10
> -
> ,221},{7,10,1574},{9,10,490},{10,10,540},{11,10,443},{139,10,757},{6,0,525},{6,0
> -,1976},{8,0,806},{9,0,876},{140,0,284},{5,11,859},{7,10,588},{7,11,1160},{8,11,
> -107},{9,10,175},{9,11,291},{9,11,439},{10,10,530},{10,11,663},{11,11,609},{140,
> -
> 11,197},{7,11,168},{13,11,196},{141,11,237},{139,0,958},{133,0,594},{135,10,58
> 0}
> -,{7,10,88},{136,10,627},{6,0,479},{6,0,562},{7,0,1060},{13,0,6},{5,10,872},{6,10
> -,57},{7,10,471},{9,10,447},{137,10,454},{136,11,413},{145,11,19},{4,11,117},{6,
> -11,372},{7,11,1905},{142,11,323},{4,11,722},{139,11,471},{17,0,61},{5,10,31},{
> -
> 134,10,614},{8,10,330},{140,10,477},{7,10,1200},{138,10,460},{6,10,424},{135,1
> 0,
> -
> 1866},{6,0,1641},{136,0,820},{6,0,1556},{134,0,1618},{9,11,5},{12,11,216},{12,1
> 1
> -
> ,294},{12,11,298},{12,11,400},{12,11,518},{13,11,229},{143,11,139},{15,11,155},
> {
> -
> 144,11,79},{4,0,302},{135,0,1766},{5,10,13},{134,10,142},{6,0,148},{7,0,1313},{7
> -
> ,10,116},{8,10,322},{8,10,755},{9,10,548},{10,10,714},{11,10,884},{141,10,324},{
> -
> 137,0,676},{9,11,88},{139,11,270},{5,11,12},{7,11,375},{137,11,438},{134,0,1674}
> -
> ,{7,10,1472},{135,10,1554},{11,0,178},{7,10,1071},{7,10,1541},{7,10,1767},{7,10,
> -1806},{11,10,162},{11,10,242},{12,10,605},{15,10,26},{144,10,44},{6,0,389},{7,0,
> -149},{9,0,142},{138,0,94},{140,11,71},{145,10,115},{6,0,8},{7,0,1881},{8,0,91},{
> -11,11,966},{12,11,287},{13,11,342},{13,11,402},{15,11,110},{143,11,163},{4,11,
> -
> 258},{136,11,639},{6,11,22},{7,11,903},{138,11,577},{133,11,681},{135,10,1111},
> {
> -
> 135,11,1286},{9,0,112},{8,10,1},{138,10,326},{5,10,488},{6,10,527},{7,10,489},{7
> -,10,1636},{8,10,121},{8,10,144},{8,10,359},{9,10,193},{9,10,241},{9,10,336},{9,
> -
> 10,882},{11,10,266},{11,10,372},{11,10,944},{12,10,401},{140,10,641},{4,11,664},
> -{133,11,804},{6,0,747},{134,0,1015},{135,0,1746},{9,10,31},{10,10,244},{10,10,
> -
> 699},{12,10,149},{141,10,497},{133,10,377},{135,0,24},{6,0,1352},{5,11,32},{145,
> -10,101},{7,0,1530},{10,0,158},{13,0,13},{13,0,137},{13,0,258},{14,0,111},{14,0,
> -225},{14,0,253},{14,0,304},{14,0,339},{14,0,417},{146,0,33},{4,0,503},{135,0,
> -1661},{5,0,130},{6,0,845},{7,0,1314},{9,0,610},{10,0,718},{11,0,601},{11,0,819},
> -{11,0,946},{140,0,536},{10,0,149},{11,0,280},{142,0,336},{134,0,1401},{135,0,
> -
> 1946},{8,0,663},{144,0,8},{134,0,1607},{135,10,2023},{4,11,289},{7,11,629},{7,1
> 1
> -,1698},{7,11,1711},{140,11,215},{6,11,450},{136,11,109},{10,0,882},{10,0,883},{
> -10,0,914},{138,0,928},{133,10,843},{136,11,705},{132,10,554},{133,10,536},{5,0,
> -417},{9,10,79},{11,10,625},{145,10,7},{7,11,1238},{142,11,37},{4,0,392},{135,0,
> -1597},{5,0,433},{9,0,633},{11,0,629},{132,10,424},{7,10,336},{136,10,785},{134,
> -11,355},{6,0,234},{7,0,769},{9,0,18},{138,0,358},{4,10,896},{134,10,1777},{138,
> -11,323},{7,0,140},{7,0,1950},{8,0,680},{11,0,817},{147,0,88},{7,0,1222},{138,0,
> -
> 386},{139,11,908},{11,0,249},{12,0,313},{16,0,66},{145,0,26},{134,0,5},{7,10,750
> -},{9,10,223},{11,10,27},{11,10,466},{12,10,624},{14,10,265},{146,10,61},{134,11,
> -26},{134,0,1216},{5,0,963},{134,0,1773},{4,11,414},{5,11,467},{9,11,654},{10,11,
> -
> 451},{12,11,59},{141,11,375},{135,11,17},{4,10,603},{133,10,661},{4,10,11},{6,1
> 0
> -,128},{7,10,231},{7,10,1533},{138,10,725},{135,11,955},{7,0,180},{8,0,509},{136,
> -
> 0,792},{132,10,476},{132,0,1002},{133,11,538},{135,10,1807},{132,0,931},{7,0,9
> 43
> -},{11,0,614},{140,0,747},{135,0,1837},{9,10,20},{10,10,324},{10,10,807},{139,10,
> -488},{134,0,641},{6,11,280},{10,11,502},{11,11,344},{140,11,38},{5,11,45},{7,11,
> -
> 1161},{11,11,448},{11,11,880},{13,11,139},{13,11,407},{15,11,16},{17,11,95},{18,
> -
> 11,66},{18,11,88},{18,11,123},{149,11,7},{9,0,280},{138,0,134},{22,0,22},{23,0,5
> -},{151,0,29},{136,11,777},{4,0,90},{5,0,545},{7,0,754},{9,0,186},{10,0,72},{10,0
> -,782},{11,0,577},{11,0,610},{11,0,960},{12,0,354},{12,0,362},{12,0,595},{4,11,
> -
> 410},{135,11,521},{135,11,1778},{5,10,112},{6,10,103},{134,10,150},{138,10,356
> },
> -{132,0,742},{7,0,151},{9,0,329},{139,0,254},{8,0,853},{8,0,881},{8,0,911},{8,0,
> -912},{10,0,872},{12,0,741},{12,0,742},{152,0,18},{4,11,573},{136,11,655},{6,0,
> -921},{134,0,934},{9,0,187},{10,0,36},{11,0,1016},{17,0,44},{146,0,64},{7,0,833},
> -{136,0,517},{4,0,506},{5,0,295},{135,0,1680},{4,10,708},{8,10,15},{9,10,50},{9,
> -
> 10,386},{11,10,18},{11,10,529},{140,10,228},{7,0,251},{7,0,1701},{8,0,436},{4,10
> -
> ,563},{7,10,592},{7,10,637},{7,10,770},{8,10,463},{9,10,60},{9,10,335},{9,10,904
> -
> },{10,10,73},{11,10,434},{12,10,585},{13,10,331},{18,10,110},{148,10,60},{132,1
> 0
> -,502},{136,0,584},{6,10,347},{138,10,161},{7,0,987},{9,0,688},{10,0,522},{11,0,
> -788},{12,0,137},{12,0,566},{14,0,9},{14,0,24},{14,0,64},{7,11,899},{142,11,325},
> -
> {4,0,214},{5,0,500},{5,10,102},{6,10,284},{7,10,1079},{7,10,1423},{7,10,1702},{8
> -
> ,10,470},{9,10,554},{9,10,723},{139,10,333},{7,10,246},{135,10,840},{6,10,10},{8
> -
> ,10,571},{9,10,739},{143,10,91},{133,10,626},{146,0,195},{134,0,1775},{7,0,389},
> -{7,0,700},{7,0,940},{8,0,514},{9,0,116},{9,0,535},{10,0,118},{11,0,107},{11,0,
> -
> 148},{11,0,922},{12,0,254},{12,0,421},{142,0,238},{5,10,18},{6,10,526},{13,10,24
> -},{13,10,110},{19,10,5},{147,10,44},{132,0,743},{11,0,292},{4,10,309},{5,10,462}
> -
> ,{7,10,970},{135,10,1097},{22,10,30},{150,10,33},{139,11,338},{135,11,1598},{7,
> 0
> -
> ,1283},{9,0,227},{11,0,325},{11,0,408},{14,0,180},{146,0,47},{4,0,953},{6,0,1805
> -},{6,0,1814},{6,0,1862},{140,0,774},{6,11,611},{135,11,1733},{135,11,1464},{5,0,
> -81},{7,0,146},{7,0,1342},{8,0,53},{8,0,561},{8,0,694},{8,0,754},{9,0,115},{9,0,
> -179},{9,0,894},{10,0,462},{10,0,813},{11,0,230},{11,0,657},{11,0,699},{11,0,748}
> -,{12,0,119},{12,0,200},{12,0,283},{142,0,273},{5,0,408},{6,0,789},{6,0,877},{6,0
> -
> ,1253},{6,0,1413},{137,0,747},{134,10,1704},{135,11,663},{6,0,1910},{6,0,1915},
> {
> -6,0,1923},{9,0,913},{9,0,928},{9,0,950},{9,0,954},{9,0,978},{9,0,993},{12,0,812}
> -,{12,0,819},{12,0,831},{12,0,833},{12,0,838},{12,0,909},{12,0,928},{12,0,931},{
> -12,0,950},{15,0,186},{15,0,187},{15,0,195},{15,0,196},{15,0,209},{15,0,215},{15,
> -0,236},{15,0,241},{15,0,249},{15,0,253},{18,0,180},{18,0,221},{18,0,224},{18,0,
> -227},{18,0,229},{149,0,60},{7,0,1826},{135,0,1938},{11,0,490},{18,0,143},{5,10,
> -
> 86},{7,10,743},{9,10,85},{10,10,281},{10,10,432},{12,10,251},{13,10,118},{142,1
> 0
> -
> ,378},{5,10,524},{133,10,744},{141,11,442},{10,10,107},{140,10,436},{135,11,50
> 3}
> -,{134,0,1162},{132,10,927},{7,0,30},{8,0,86},{8,0,315},{8,0,700},{9,0,576},{9,0,
> -
> 858},{10,0,414},{11,0,310},{11,0,888},{11,0,904},{12,0,361},{13,0,248},{13,0,371
> -
> },{14,0,142},{12,10,670},{146,10,94},{134,0,721},{4,11,113},{5,11,163},{5,11,735
> -},{7,11,1009},{7,10,1149},{9,11,9},{9,10,156},{9,11,771},{12,11,90},{13,11,138},
> -
> {13,11,410},{143,11,128},{138,0,839},{133,10,778},{137,0,617},{133,10,502},{8,1
> 0
> -,196},{10,10,283},{139,10,406},{6,0,428},{7,0,524},{8,0,169},{8,0,234},{9,0,480}
> -,{138,0,646},{133,10,855},{134,0,1648},{7,0,1205},{138,0,637},{7,0,1596},{4,11,
> -935},{133,11,823},{5,11,269},{7,11,434},{7,11,891},{8,11,339},{9,11,702},{11,11,
> -594},{11,11,718},{145,11,100},{7,11,878},{9,11,485},{141,11,264},{4,0,266},{8,0,
> -4},{9,0,39},{10,0,166},{11,0,918},{12,0,635},{20,0,10},{22,0,27},{22,0,43},{22,0
> -
> ,52},{134,11,1713},{7,10,1400},{9,10,446},{138,10,45},{135,11,900},{132,0,862},
> {
> -134,0,1554},{135,11,1033},{19,0,16},{147,11,16},{135,11,1208},{7,0,157},{136,0,
> -279},{6,0,604},{136,0,391},{13,10,455},{15,10,99},{15,10,129},{144,10,68},{135,
> -10,172},{7,0,945},{11,0,713},{139,0,744},{4,0,973},{10,0,877},{10,0,937},{10,0,
> -
> 938},{140,0,711},{139,0,1022},{132,10,568},{142,11,143},{4,0,567},{9,0,859},{13
> 2
> -
> ,10,732},{7,0,1846},{136,0,628},{136,10,733},{133,0,762},{4,10,428},{135,10,178
> 9
> -},{10,0,784},{13,0,191},{7,10,2015},{140,10,665},{133,0,298},{7,0,633},{7,0,905}
> -,{7,0,909},{7,0,1538},{9,0,767},{140,0,636},{138,10,806},{132,0,795},{139,0,301}
> -,{135,0,1970},{5,11,625},{135,11,1617},{135,11,275},{7,11,37},{8,11,425},{8,11,
> -
> 693},{9,11,720},{10,11,380},{10,11,638},{11,11,273},{11,11,307},{11,11,473},{12,
> -11,61},{143,11,43},{135,11,198},{134,0,1236},{7,0,369},{12,0,644},{12,0,645},{
> -144,0,90},{19,0,15},{149,0,27},{6,0,71},{7,0,845},{8,0,160},{9,0,318},{6,10,1623
> -},{134,10,1681},{134,0,1447},{134,0,1255},{138,0,735},{8,0,76},{132,11,168},{6,
> -10,1748},{8,10,715},{9,10,802},{10,10,46},{10,10,819},{13,10,308},{14,10,351},{
> -
> 14,10,363},{146,10,67},{135,11,91},{6,0,474},{4,10,63},{133,10,347},{133,10,749}
> -
> ,{138,0,841},{133,10,366},{6,0,836},{132,11,225},{135,0,1622},{135,10,89},{140,
> 0
> -,735},{134,0,1601},{138,11,145},{6,0,1390},{137,0,804},{142,0,394},{6,11,15},{7,
> -
> 11,70},{10,11,240},{147,11,93},{6,0,96},{135,0,1426},{4,0,651},{133,0,289},{7,11
> -,956},{7,10,977},{7,11,1157},{7,11,1506},{7,11,1606},{7,11,1615},{7,11,1619},{7,
> -11,1736},{7,11,1775},{8,11,590},{9,11,324},{9,11,736},{9,11,774},{9,11,776},{9,
> -
> 11,784},{10,11,567},{10,11,708},{11,11,518},{11,11,613},{11,11,695},{11,11,716},
> -{11,11,739},{11,11,770},{11,11,771},{11,11,848},{11,11,857},{11,11,931},{11,11,
> -
> 947},{12,11,326},{12,11,387},{12,11,484},{12,11,528},{12,11,552},{12,11,613},{1
> 3
> -
> ,11,189},{13,11,256},{13,11,340},{13,11,432},{13,11,436},{13,11,440},{13,11,454}
> -,{14,11,174},{14,11,220},{14,11,284},{14,11,390},{145,11,121},{7,0,688},{8,0,35}
> -,{9,0,511},{10,0,767},{147,0,118},{134,0,667},{4,0,513},{5,10,824},{133,10,941},
> -
> {7,10,440},{8,10,230},{139,10,106},{134,0,2034},{135,11,1399},{143,11,66},{135,
> -11,1529},{4,11,145},{6,11,176},{7,11,395},{9,11,562},{144,11,28},{132,11,501},{
> -
> 132,0,704},{134,0,1524},{7,0,1078},{134,11,464},{6,11,509},{10,11,82},{20,11,91}
> -,{151,11,13},{4,0,720},{133,0,306},{133,0,431},{7,0,1196},{4,10,914},{5,10,800},
> -{133,10,852},{135,11,1189},{10,0,54},{141,10,115},{7,10,564},{142,10,168},{5,0,
> -464},{6,0,236},{7,0,696},{7,0,914},{7,0,1108},{7,0,1448},{9,0,15},{9,0,564},{10,
> -0,14},{12,0,565},{13,0,449},{14,0,53},{15,0,13},{16,0,64},{17,0,41},{4,10,918},{
> -133,10,876},{6,0,1418},{134,10,1764},{4,10,92},{133,10,274},{134,0,907},{4,11,
> -114},{8,10,501},{9,11,492},{13,11,462},{142,11,215},{4,11,77},{5,11,361},{6,11,
> -139},{6,11,401},{6,11,404},{7,11,413},{7,11,715},{7,11,1716},{11,11,279},{12,11,
> -
> 179},{12,11,258},{13,11,244},{142,11,358},{6,0,1767},{12,0,194},{145,0,107},{13
> 4
> -
> ,11,1717},{5,10,743},{142,11,329},{4,10,49},{7,10,280},{135,10,1633},{5,0,840},{
> -7,11,1061},{8,11,82},{11,11,250},{12,11,420},{141,11,184},{135,11,724},{134,0,
> -900},{136,10,47},{134,0,1436},{144,11,0},{6,0,675},{7,0,1008},{7,0,1560},{9,0,
> -642},{11,0,236},{14,0,193},{5,10,272},{5,10,908},{5,10,942},{8,10,197},{9,10,47}
> -,{11,10,538},{139,10,742},{4,0,68},{5,0,628},{5,0,634},{6,0,386},{7,0,794},{8,0,
> -
> 273},{9,0,563},{10,0,105},{10,0,171},{11,0,94},{139,0,354},{135,10,1911},{137,1
> 0
> -,891},{4,0,95},{6,0,1297},{6,0,1604},{7,0,416},{139,0,830},{6,11,513},{135,11,
> -1052},{7,0,731},{13,0,20},{143,0,11},{137,11,899},{10,0,850},{140,0,697},{4,0,
> -662},{7,11,1417},{12,11,382},{17,11,48},{152,11,12},{133,0,736},{132,0,861},{4,
> -
> 10,407},{132,10,560},{141,10,490},{6,11,545},{7,11,565},{7,11,1669},{10,11,114},
> -{11,11,642},{140,11,618},{6,0,871},{134,0,1000},{5,0,864},{10,0,648},{11,0,671},
> -{15,0,46},{133,11,5},{133,0,928},{11,0,90},{13,0,7},{4,10,475},{11,10,35},{13,10
> -
> ,71},{13,10,177},{142,10,422},{136,0,332},{135,11,192},{134,0,1055},{136,11,76
> 3}
> -,{11,0,986},{140,0,682},{7,0,76},{8,0,44},{9,0,884},{10,0,580},{11,0,399},{11,0,
> -
> 894},{143,0,122},{135,11,1237},{135,10,636},{11,0,300},{6,10,222},{7,10,1620},{
> 8
> -
> ,10,409},{137,10,693},{4,11,87},{5,11,250},{10,11,601},{13,11,298},{13,11,353},{
> -141,11,376},{5,0,518},{10,0,340},{11,0,175},{149,0,16},{140,0,771},{6,0,1108},{
> -137,0,831},{132,0,836},{135,0,1852},{4,0,957},{6,0,1804},{8,0,842},{8,0,843},{8,
> -0,851},{8,0,855},{140,0,767},{135,11,814},{4,11,57},{7,11,1195},{7,11,1438},{7,
> -
> 11,1548},{7,11,1835},{7,11,1904},{9,11,757},{10,11,604},{139,11,519},{133,10,8
> 82
> -},{138,0,246},{4,0,934},{5,0,202},{8,0,610},{7,11,1897},{12,11,290},{13,11,80},{
> -13,11,437},{145,11,74},{8,0,96},{9,0,36},{10,0,607},{10,0,804},{10,0,832},{11,0,
> -423},{11,0,442},{12,0,309},{14,0,199},{15,0,90},{145,0,110},{132,10,426},{7,0,
> -654},{8,0,240},{6,10,58},{7,10,745},{7,10,1969},{8,10,675},{9,10,479},{9,10,731}
> -
> ,{10,10,330},{10,10,593},{10,10,817},{11,10,32},{11,10,133},{11,10,221},{145,10,
> -68},{9,0,13},{9,0,398},{9,0,727},{10,0,75},{10,0,184},{10,0,230},{10,0,564},{10,
> -0,569},{11,0,973},{12,0,70},{12,0,189},{13,0,57},{141,0,257},{4,11,209},{135,11,
> -902},{7,0,391},{137,10,538},{134,0,403},{6,11,303},{7,11,335},{7,11,1437},{7,11,
> -1668},{8,11,553},{8,11,652},{8,11,656},{9,11,558},{11,11,743},{149,11,18},{132,
> -11,559},{11,0,75},{142,0,267},{6,0,815},{141,11,2},{141,0,366},{137,0,631},{133,
> -
> 11,1017},{5,0,345},{135,0,1016},{133,11,709},{134,11,1745},{133,10,566},{7,0,9
> 52
> -},{6,10,48},{9,10,139},{10,10,399},{11,10,469},{12,10,634},{141,10,223},{133,0,
> -673},{9,0,850},{7,11,8},{136,11,206},{6,0,662},{149,0,35},{4,0,287},{133,0,1018}
> -,{6,10,114},{7,10,1224},{7,10,1556},{136,10,3},{8,10,576},{137,10,267},{4,0,884}
> -,{5,0,34},{10,0,724},{12,0,444},{13,0,354},{18,0,32},{23,0,24},{23,0,31},{152,0,
> -
> 5},{133,10,933},{132,11,776},{138,0,151},{136,0,427},{134,0,382},{132,0,329},{9,
> -0,846},{10,0,827},{138,11,33},{9,0,279},{10,0,407},{14,0,84},{22,0,18},{135,11,
> -
> 1297},{136,11,406},{132,0,906},{136,0,366},{134,0,843},{134,0,1443},{135,0,137
> 2}
> -,{138,0,992},{4,0,123},{5,0,605},{7,0,1509},{136,0,36},{132,0,649},{8,11,175},{
> -
> 10,11,168},{138,11,573},{133,0,767},{134,0,1018},{135,11,1305},{12,10,30},{13,
> 10
> -,148},{14,10,87},{14,10,182},{16,10,42},{148,10,70},{134,11,607},{4,0,273},{5,0,
> -658},{133,0,995},{6,0,72},{139,11,174},{10,0,483},{12,0,368},{7,10,56},{7,10,
> -1989},{8,10,337},{8,10,738},{9,10,600},{13,10,447},{142,10,92},{5,11,784},{138,
> -
> 10,666},{135,0,1345},{139,11,882},{134,0,1293},{133,0,589},{134,0,1988},{5,0,1
> 17
> -},{6,0,514},{6,0,541},{7,0,1164},{7,0,1436},{8,0,220},{8,0,648},{10,0,688},{139,
> -0,560},{136,0,379},{5,0,686},{7,10,866},{135,10,1163},{132,10,328},{9,11,14},{9,
> -
> 11,441},{10,11,306},{139,11,9},{4,10,101},{135,10,1171},{5,10,833},{136,10,744},
> -{5,11,161},{7,11,839},{135,11,887},{7,0,196},{10,0,765},{11,0,347},{11,0,552},{
> -11,0,790},{12,0,263},{13,0,246},{13,0,270},{13,0,395},{14,0,176},{14,0,190},{14,
> -0,398},{14,0,412},{15,0,32},{15,0,63},{16,0,88},{147,0,105},{6,10,9},{6,10,397},
> -
> {7,10,53},{7,10,1742},{10,10,632},{11,10,828},{140,10,146},{5,0,381},{135,0,179
> 2
> -},{134,0,1452},{135,11,429},{8,0,367},{10,0,760},{14,0,79},{20,0,17},{152,0,0},{
> -
> 7,0,616},{138,0,413},{11,10,417},{12,10,223},{140,10,265},{7,11,1611},{13,11,14}
> -,{15,11,44},{19,11,13},{148,11,76},{135,0,1229},{6,0,120},{7,0,1188},{7,0,1710},
> -
> {8,0,286},{9,0,667},{11,0,592},{139,0,730},{135,11,1814},{135,0,1146},{4,10,186}
> -,{5,10,157},{8,10,168},{138,10,6},{4,0,352},{135,0,687},{4,0,192},{5,0,49},{6,0,
> -200},{6,0,293},{6,0,1696},{135,0,1151},{133,10,875},{5,10,773},{5,10,991},{6,10,
> -
> 1635},{134,10,1788},{7,10,111},{136,10,581},{6,0,935},{134,0,1151},{134,0,1050
> },
> -{132,0,650},{132,0,147},{11,0,194},{12,0,62},{12,0,88},{11,11,194},{12,11,62},{
> -140,11,88},{6,0,339},{135,0,923},{134,10,1747},{7,11,643},{136,11,236},{133,0,
> -
> 934},{7,10,1364},{7,10,1907},{141,10,158},{132,10,659},{4,10,404},{135,10,675},
> {
> -
> 7,11,581},{9,11,644},{137,11,699},{13,0,211},{14,0,133},{14,0,204},{15,0,64},{15
> -,0,69},{15,0,114},{16,0,10},{19,0,23},{19,0,35},{19,0,39},{19,0,51},{19,0,71},{
> -19,0,75},{152,0,15},{133,10,391},{5,11,54},{135,11,1513},{7,0,222},{8,0,341},{5,
> -10,540},{134,10,1697},{134,10,78},{132,11,744},{136,0,293},{137,11,701},{7,11,
> -930},{10,11,402},{10,11,476},{13,11,452},{18,11,55},{147,11,104},{132,0,637},{
> -
> 133,10,460},{8,11,50},{137,11,624},{132,11,572},{134,0,1159},{4,10,199},{139,1
> 0,
> -34},{134,0,847},{134,10,388},{6,11,43},{7,11,38},{8,11,248},{9,11,504},{138,11,
> -513},{9,0,683},{4,10,511},{6,10,608},{9,10,333},{10,10,602},{11,10,441},{11,10,
> -
> 723},{11,10,976},{140,10,357},{9,0,867},{138,0,837},{6,0,944},{135,11,326},{135,
> -
> 0,1809},{5,10,938},{7,11,783},{136,10,707},{133,11,766},{133,11,363},{6,0,170},
> {
> -
> 7,0,1080},{8,0,395},{8,0,487},{141,0,147},{6,11,258},{140,11,409},{4,0,535},{8,0
> -,618},{5,11,249},{148,11,82},{6,0,1379},{149,11,15},{135,0,1625},{150,0,23},{5,
> -
> 11,393},{6,11,378},{7,11,1981},{9,11,32},{9,11,591},{10,11,685},{10,11,741},{14
> 2
> -,11,382},{133,11,788},{7,11,1968},{10,11,19},{139,11,911},{7,11,1401},{135,11,
> -1476},{4,11,61},{5,11,58},{5,11,171},{5,11,635},{5,11,683},{5,11,700},{6,11,291}
> -,{6,11,566},{7,11,1650},{11,11,523},{12,11,273},{12,11,303},{15,11,39},{143,11,
> -111},{6,10,469},{7,10,1709},{138,10,515},{4,0,778},{134,11,589},{132,0,46},{5,0,
> -
> 811},{6,0,1679},{6,0,1714},{135,0,2032},{7,0,1458},{9,0,407},{11,0,15},{12,0,651
> -},{149,0,37},{7,0,938},{132,10,500},{6,0,34},{7,0,69},{7,0,1089},{7,0,1281},{8,0
> -
> ,708},{8,0,721},{9,0,363},{148,0,98},{10,11,231},{147,11,124},{7,11,726},{152,11
> -,9},{5,10,68},{134,10,383},{136,11,583},{4,11,917},{133,11,1005},{11,10,216},{
> -
> 139,10,340},{135,11,1675},{8,0,441},{10,0,314},{143,0,3},{132,11,919},{4,10,337}
> -,{6,10,353},{7,10,1934},{8,10,488},{137,10,429},{7,0,889},{7,10,1795},{8,10,259}
> -
> ,{9,10,135},{9,10,177},{9,10,860},{10,10,825},{11,10,115},{11,10,370},{11,10,40
> 5
> -},{11,10,604},{12,10,10},{12,10,667},{12,10,669},{13,10,76},{14,10,310},{15,10,
> -76},{15,10,147},{148,10,23},{4,10,15},{4,11,255},{5,10,22},{5,11,302},{6,11,132}
> -,{6,10,244},{7,10,40},{7,11,128},{7,10,200},{7,11,283},{7,10,906},{7,10,1199},{7
> -
> ,11,1299},{9,10,616},{10,11,52},{10,11,514},{10,10,716},{11,10,635},{11,10,801},
> -
> {11,11,925},{12,10,458},{13,11,92},{142,11,309},{132,0,462},{137,11,173},{135,1
> 0
> -,1735},{8,0,525},{5,10,598},{7,10,791},{8,10,108},{137,10,123},{5,0,73},{6,0,23}
> -,{134,0,338},{132,0,676},{132,10,683},{7,0,725},{8,0,498},{139,0,268},{12,0,21},
> -
> {151,0,7},{135,0,773},{4,10,155},{135,10,1689},{4,0,164},{5,0,730},{5,10,151},{5
> -
> ,10,741},{6,11,210},{7,10,498},{7,10,870},{7,10,1542},{12,10,213},{14,10,36},{14
> -,10,391},{17,10,111},{18,10,6},{18,10,46},{18,10,151},{19,10,36},{20,10,32},{20,
> -10,56},{20,10,69},{20,10,102},{21,10,4},{22,10,8},{22,10,10},{22,10,14},{150,10,
> -31},{4,10,624},{135,10,1752},{4,0,583},{9,0,936},{15,0,214},{18,0,199},{24,0,26}
> -,{134,11,588},{7,0,1462},{11,0,659},{4,11,284},{134,11,223},{133,0,220},{139,0,
> -803},{132,0,544},{4,10,492},{133,10,451},{16,0,98},{148,0,119},{4,11,218},{7,11,
> -
> 526},{143,11,137},{135,10,835},{4,11,270},{5,11,192},{6,11,332},{7,11,1322},{13,
> -
> 11,9},{13,10,70},{14,11,104},{142,11,311},{132,10,539},{140,11,661},{5,0,176},{
> 6
> -,0,437},{6,0,564},{11,0,181},{141,0,183},{135,0,1192},{6,10,113},{135,10,436},{
> -
> 136,10,718},{135,10,520},{135,0,1878},{140,11,196},{7,11,379},{8,11,481},{137,
> 11
> -,377},{5,11,1003},{6,11,149},{137,11,746},{8,11,262},{9,11,627},{10,11,18},{11,
> -
> 11,214},{11,11,404},{11,11,457},{11,11,780},{11,11,849},{11,11,913},{13,11,330},
> -{13,11,401},{142,11,200},{149,0,26},{136,11,304},{132,11,142},{135,0,944},{4,0,
> -790},{5,0,273},{134,0,394},{134,0,855},{4,0,135},{6,0,127},{7,0,1185},{7,0,1511}
> -,{8,0,613},{11,0,5},{12,0,336},{12,0,495},{12,0,586},{12,0,660},{12,0,668},{14,0
> -,385},{15,0,118},{17,0,20},{146,0,98},{6,0,230},{9,0,752},{18,0,109},{12,10,610}
> -,{13,10,431},{144,10,59},{7,0,1954},{135,11,925},{4,11,471},{5,11,51},{6,11,602}
> -,{8,11,484},{10,11,195},{140,11,159},{132,10,307},{136,11,688},{132,11,697},{7,
> -11,812},{7,11,1261},{7,11,1360},{9,11,632},{140,11,352},{5,0,162},{8,0,68},{133,
> -
> 10,964},{4,0,654},{136,11,212},{4,0,156},{7,0,998},{7,0,1045},{7,0,1860},{9,0,48
> -},{9,0,692},{11,0,419},{139,0,602},{133,11,221},{4,11,373},{5,11,283},{6,11,480}
> -,{135,11,609},{142,11,216},{132,0,240},{6,11,192},{9,11,793},{145,11,55},{4,10,
> -75},{5,10,180},{6,10,500},{7,10,58},{7,10,710},{138,10,645},{4,11,132},{5,11,69}
> -,{5,10,649},{135,11,1242},{6,10,276},{7,10,282},{7,10,879},{7,10,924},{8,10,459}
> -
> ,{9,10,599},{9,10,754},{11,10,574},{12,10,128},{12,10,494},{13,10,52},{13,10,30
> 1
> -},{15,10,30},{143,10,132},{132,10,200},{4,11,111},{135,11,302},{9,0,197},{10,0,
> -300},{12,0,473},{13,0,90},{141,0,405},{132,11,767},{6,11,42},{7,11,1416},{7,11,
> -
> 1590},{7,11,2005},{8,11,131},{8,11,466},{9,11,672},{13,11,252},{148,11,103},{8,
> 0
> -
> ,958},{8,0,999},{10,0,963},{138,0,1001},{135,10,1621},{135,0,858},{4,0,606},{13
> 7
> -
> ,11,444},{6,11,44},{136,11,368},{139,11,172},{4,11,570},{133,11,120},{139,11,62
> 4
> -},{7,0,1978},{8,0,676},{6,10,225},{137,10,211},{7,0,972},{11,0,102},{136,10,687}
> -,{6,11,227},{135,11,1589},{8,10,58},{9,10,724},{11,10,809},{13,10,113},{145,10,
> -
> 72},{4,0,361},{133,0,315},{132,0,461},{6,10,345},{135,10,1247},{132,0,472},{8,1
> 0
> -
> ,767},{8,10,803},{9,10,301},{137,10,903},{135,11,1333},{135,11,477},{7,10,1949},
> -{136,10,674},{6,0,905},{138,0,747},{133,0,155},{134,10,259},{7,0,163},{8,0,319},
> -{9,0,402},{10,0,24},{10,0,681},{11,0,200},{12,0,253},{12,0,410},{142,0,219},{5,0
> -
> ,475},{7,0,1780},{9,0,230},{11,0,297},{11,0,558},{14,0,322},{19,0,76},{6,11,1667
> -},{7,11,2036},{138,11,600},{136,10,254},{6,0,848},{135,0,1956},{6,11,511},{140,
> -11,132},{5,11,568},{6,11,138},{135,11,1293},{6,0,631},{137,0,838},{149,0,36},{4,
> -11,565},{8,11,23},{136,11,827},{5,0,944},{134,0,1769},{4,0,144},{6,0,842},{6,0,
> -
> 1400},{4,11,922},{133,11,1023},{133,10,248},{9,10,800},{10,10,693},{11,10,482},
> {
> -
> 11,10,734},{139,10,789},{7,11,1002},{139,11,145},{4,10,116},{5,10,95},{5,10,445}
> -,{7,10,1688},{8,10,29},{9,10,272},{11,10,509},{139,10,915},{14,0,369},{146,0,72}
> -
> ,{135,10,1641},{132,11,740},{133,10,543},{140,11,116},{6,0,247},{9,0,555},{5,10,
> -
> 181},{136,10,41},{133,10,657},{136,0,996},{138,10,709},{7,0,189},{8,10,202},{13
> 8
> -
> ,10,536},{136,11,402},{4,11,716},{141,11,31},{10,0,280},{138,0,797},{9,10,423},{
> -
> 140,10,89},{8,10,113},{9,10,877},{10,10,554},{11,10,83},{12,10,136},{147,10,109}
> -
> ,{133,10,976},{7,0,746},{132,10,206},{136,0,526},{139,0,345},{136,0,1017},{8,11,
> -152},{9,11,53},{9,11,268},{9,11,901},{10,11,518},{10,11,829},{11,11,188},{13,11,
> -74},{14,11,46},{15,11,17},{15,11,33},{17,11,40},{18,11,36},{19,11,20},{22,11,1},
> -{152,11,2},{133,11,736},{136,11,532},{5,0,428},{138,0,651},{135,11,681},{135,0,
> -1162},{7,0,327},{13,0,230},{17,0,113},{8,10,226},{10,10,537},{11,10,570},{11,10,
> -
> 605},{11,10,799},{11,10,804},{12,10,85},{12,10,516},{12,10,623},{12,11,677},{13,
> -10,361},{14,10,77},{14,10,78},{147,10,110},{4,0,792},{7,0,1717},{10,0,546},{132,
> -
> 10,769},{4,11,684},{136,11,384},{132,10,551},{134,0,1203},{9,10,57},{9,10,459},
> {
> -
> 10,10,425},{11,10,119},{12,10,184},{12,10,371},{13,10,358},{145,10,51},{5,0,672}
> -,{5,10,814},{8,10,10},{9,10,421},{9,10,729},{10,10,609},{139,10,689},{138,0,189}
> -,{134,10,624},{7,11,110},{7,11,188},{8,11,290},{8,11,591},{9,11,382},{9,11,649},
> -
> {11,11,71},{11,11,155},{11,11,313},{12,11,5},{13,11,325},{142,11,287},{133,0,99}
> -,{6,0,1053},{135,0,298},{7,11,360},{7,11,425},{9,11,66},{9,11,278},{138,11,644},
> -{4,0,397},{136,0,555},{137,10,269},{132,10,528},{4,11,900},{133,11,861},{6,0,
> -
> 1157},{5,11,254},{7,11,985},{136,11,73},{7,11,1959},{136,11,683},{12,0,398},{20,
> -0,39},{21,0,11},{150,0,41},{4,0,485},{7,0,353},{135,0,1523},{6,0,366},{7,0,1384}
> -,{135,0,1601},{138,0,787},{137,0,282},{5,10,104},{6,10,173},{135,10,1631},{139,
> -11,146},{4,0,157},{133,0,471},{134,0,941},{132,11,725},{7,0,1336},{8,10,138},{8,
> -
> 10,342},{9,10,84},{10,10,193},{11,10,883},{140,10,359},{134,11,196},{136,0,116},
> -{133,11,831},{134,0,787},{134,10,95},{6,10,406},{10,10,409},{10,10,447},{11,10,
> -
> 44},{140,10,100},{5,0,160},{7,0,363},{7,0,589},{10,0,170},{141,0,55},{134,0,1815
> -},{132,0,866},{6,0,889},{6,0,1067},{6,0,1183},{4,11,321},{134,11,569},{5,11,848}
> -,{134,11,66},{4,11,36},{6,10,1636},{7,11,1387},{10,11,205},{11,11,755},{141,11,
> -
> 271},{132,0,689},{9,0,820},{4,10,282},{7,10,1034},{11,10,398},{11,10,634},{12,1
> 0
> -
> ,1},{12,10,79},{12,10,544},{14,10,237},{17,10,10},{146,10,20},{4,0,108},{7,0,804
> -},{139,0,498},{132,11,887},{6,0,1119},{135,11,620},{6,11,165},{138,11,388},{5,0,
> -
> 244},{5,10,499},{6,10,476},{7,10,600},{7,10,888},{135,10,1096},{140,0,609},{135,
> -0,1005},{4,0,412},{133,0,581},{4,11,719},{135,11,155},{7,10,296},{7,10,596},{8,
> -
> 10,560},{8,10,586},{9,10,612},{11,10,304},{12,10,46},{13,10,89},{14,10,112},{14
> 5
> -
> ,10,122},{4,0,895},{133,0,772},{142,11,307},{135,0,1898},{4,0,926},{133,0,983},{
> -
> 4,11,353},{6,11,146},{6,11,1789},{7,11,288},{7,11,990},{7,11,1348},{9,11,665},{9
> -
> ,11,898},{11,11,893},{142,11,212},{132,0,538},{133,11,532},{6,0,294},{7,0,1267},
> -
> {8,0,624},{141,0,496},{7,0,1325},{4,11,45},{135,11,1257},{138,0,301},{9,0,298},{
> -12,0,291},{13,0,276},{14,0,6},{17,0,18},{21,0,32},{7,10,1599},{7,10,1723},{8,10,
> -79},{8,10,106},{8,10,190},{8,10,302},{8,10,383},{8,10,713},{9,10,119},{9,10,233}
> -,{9,10,419},{9,10,471},{10,10,181},{10,10,406},{11,10,57},{11,10,85},{11,10,120}
> -
> ,{11,10,177},{11,10,296},{11,10,382},{11,10,454},{11,10,758},{11,10,999},{12,10,
> -27},{12,10,131},{12,10,245},{12,10,312},{12,10,446},{12,10,454},{13,10,98},{13,
> -
> 10,426},{13,10,508},{14,10,163},{14,10,272},{14,10,277},{14,10,370},{15,10,95},
> {
> -
> 15,10,138},{15,10,167},{17,10,38},{148,10,96},{132,0,757},{134,0,1263},{4,0,820}
> -
> ,{134,10,1759},{133,0,722},{136,11,816},{138,10,372},{145,10,16},{134,0,1039},{
> 4
> -
> ,0,991},{134,0,2028},{133,10,258},{7,0,1875},{139,0,124},{6,11,559},{6,11,1691},
> -{135,11,586},{5,0,324},{7,0,881},{8,10,134},{9,10,788},{140,10,438},{7,11,1823},
> -
> {139,11,693},{6,0,1348},{134,0,1545},{134,0,911},{132,0,954},{8,0,329},{8,0,414}
> -
> ,{7,10,1948},{135,10,2004},{5,0,517},{6,10,439},{7,10,780},{135,10,1040},{132,0,
> -816},{5,10,1},{6,10,81},{138,10,520},{9,0,713},{10,0,222},{5,10,482},{8,10,98},{
> -
> 10,10,700},{10,10,822},{11,10,302},{11,10,778},{12,10,50},{12,10,127},{12,10,39
> 6
> -},{13,10,62},{13,10,328},{14,10,122},{147,10,72},{137,0,33},{5,10,2},{7,10,1494}
> -,{136,10,589},{6,10,512},{7,10,797},{8,10,253},{9,10,77},{10,10,1},{10,11,108},{
> -10,10,129},{10,10,225},{11,11,116},{11,10,118},{11,10,226},{11,10,251},{11,10,
> -
> 430},{11,10,701},{11,10,974},{11,10,982},{12,10,64},{12,10,260},{12,10,488},{14
> 0
> -,10,690},{134,11,456},{133,11,925},{5,0,150},{7,0,106},{7,0,774},{8,0,603},{9,0,
> -593},{9,0,634},{10,0,44},{10,0,173},{11,0,462},{11,0,515},{13,0,216},{13,0,288},
> -{142,0,400},{137,10,347},{5,0,748},{134,0,553},{12,0,108},{141,0,291},{7,0,420},
> -{4,10,12},{7,10,522},{7,10,809},{8,10,797},{141,10,88},{6,11,193},{7,11,240},{7,
> -
> 11,1682},{10,11,51},{10,11,640},{11,11,410},{13,11,82},{14,11,247},{14,11,331},
> {
> -142,11,377},{133,10,528},{135,0,1777},{4,0,493},{144,0,55},{136,11,633},{139,0,
> -81},{6,0,980},{136,0,321},{148,10,109},{5,10,266},{9,10,290},{9,10,364},{10,10,
> -293},{11,10,606},{142,10,45},{6,0,568},{7,0,112},{7,0,1804},{8,0,362},{8,0,410},
> -{8,0,830},{9,0,514},{11,0,649},{142,0,157},{4,0,74},{6,0,510},{6,10,594},{9,10,
> -
> 121},{10,10,49},{10,10,412},{139,10,834},{134,0,838},{136,10,748},{132,10,466},
> {
> -
> 132,0,625},{135,11,1443},{4,11,237},{135,11,514},{9,10,378},{141,10,162},{6,0,1
> 6
> -},{6,0,158},{7,0,43},{7,0,129},{7,0,181},{8,0,276},{8,0,377},{10,0,523},{11,0,
> -816},{12,0,455},{13,0,303},{142,0,135},{135,0,281},{4,0,1},{7,0,1143},{7,0,1463}
> -,{8,0,61},{9,0,207},{9,0,390},{9,0,467},{139,0,836},{6,11,392},{7,11,65},{135,11
> -,2019},{132,10,667},{4,0,723},{5,0,895},{7,0,1031},{8,0,199},{8,0,340},{9,0,153}
> -,{9,0,215},{10,0,21},{10,0,59},{10,0,80},{10,0,224},{10,0,838},{11,0,229},{11,0,
> -652},{12,0,192},{13,0,146},{142,0,91},{132,0,295},{137,0,51},{9,11,222},{10,11,
> -
> 43},{139,11,900},{5,0,309},{140,0,211},{5,0,125},{8,0,77},{138,0,15},{136,11,604
> -
> },{138,0,789},{5,0,173},{4,10,39},{7,10,1843},{8,10,407},{11,10,144},{140,10,523
> -},{138,11,265},{133,0,439},{132,10,510},{7,0,648},{7,0,874},{11,0,164},{12,0,76}
> -,{18,0,9},{7,10,1980},{10,10,487},{138,10,809},{12,0,111},{14,0,294},{19,0,45},{
> -
> 13,10,260},{146,10,63},{133,11,549},{134,10,570},{4,0,8},{7,0,1152},{7,0,1153},{
> -
> 7,0,1715},{9,0,374},{10,0,478},{139,0,648},{135,0,1099},{5,0,575},{6,0,354},{135
> -
> ,0,701},{7,11,36},{8,11,201},{136,11,605},{4,10,787},{136,11,156},{6,0,518},{149
> -
> ,11,13},{140,11,224},{134,0,702},{132,10,516},{5,11,724},{10,11,305},{11,11,151}
> -,{12,11,33},{12,11,121},{12,11,381},{17,11,3},{17,11,27},{17,11,78},{18,11,18},{
> -
> 19,11,54},{149,11,5},{8,0,87},{4,11,523},{5,11,638},{11,10,887},{14,10,365},{142
> -
> ,10,375},{138,0,438},{136,10,821},{135,11,1908},{6,11,242},{7,11,227},{7,11,158
> 1
> -},{8,11,104},{9,11,113},{9,11,220},{9,11,427},{10,11,74},{10,11,239},{11,11,579}
> -,{11,11,1023},{13,11,4},{13,11,204},{13,11,316},{18,11,95},{148,11,86},{4,0,69},
> -{5,0,122},{5,0,849},{6,0,1633},{9,0,656},{138,0,464},{7,0,1802},{4,10,10},{139,
> -
> 10,786},{135,11,861},{139,0,499},{7,0,476},{7,0,1592},{138,0,87},{133,10,684},{
> 4
> -
> ,0,840},{134,10,27},{142,0,283},{6,0,1620},{7,11,1328},{136,11,494},{5,0,859},{7
> -,0,1160},{8,0,107},{9,0,291},{9,0,439},{10,0,663},{11,0,609},{140,0,197},{7,11,
> -
> 1306},{8,11,505},{9,11,482},{10,11,126},{11,11,225},{12,11,347},{12,11,449},{13,
> -
> 11,19},{142,11,218},{5,11,268},{10,11,764},{12,11,120},{13,11,39},{145,11,127},
> {
> -
> 145,10,56},{7,11,1672},{10,11,472},{11,11,189},{143,11,51},{6,10,342},{6,10,496}
> -,{8,10,275},{137,10,206},{133,0,600},{4,0,117},{6,0,372},{7,0,1905},{142,0,323},
> -
> {4,10,909},{5,10,940},{135,11,1471},{132,10,891},{4,0,722},{139,0,471},{4,11,38
> 4
> -},{135,11,1022},{132,10,687},{9,0,5},{12,0,216},{12,0,294},{12,0,298},{12,0,400}
> -
> ,{12,0,518},{13,0,229},{143,0,139},{135,11,1703},{7,11,1602},{10,11,698},{12,11,
> -212},{141,11,307},{6,10,41},{141,10,160},{135,11,1077},{9,11,159},{11,11,28},{
> -
> 140,11,603},{4,0,514},{7,0,1304},{138,0,477},{134,0,1774},{9,0,88},{139,0,270},{
> -
> 5,0,12},{7,0,375},{9,0,438},{134,10,1718},{132,11,515},{136,10,778},{8,11,632},{
> -8,11,697},{137,11,854},{6,0,362},{6,0,997},{146,0,51},{7,0,816},{7,0,1241},{9,0,
> -283},{9,0,520},{10,0,213},{10,0,307},{10,0,463},{10,0,671},{10,0,746},{11,0,401}
> -
> ,{11,0,794},{12,0,517},{18,0,107},{147,0,115},{133,10,115},{150,11,28},{4,11,13
> 6
> -},{133,11,551},{142,10,314},{132,0,258},{6,0,22},{7,0,903},{7,0,1963},{8,0,639},
> -{138,0,577},{5,0,681},{8,0,782},{13,0,130},{17,0,84},{5,10,193},{140,10,178},{9,
> -11,17},{138,11,291},{7,11,1287},{9,11,44},{10,11,552},{10,11,642},{11,11,839},{
> -
> 12,11,274},{12,11,275},{12,11,372},{13,11,91},{142,11,125},{135,10,174},{4,0,66
> 4
> -
> },{5,0,804},{139,0,1013},{134,0,942},{6,0,1349},{6,0,1353},{6,0,1450},{7,11,1518
> -},{139,11,694},{11,0,356},{4,10,122},{5,10,796},{5,10,952},{6,10,1660},{6,10,
> -
> 1671},{8,10,567},{9,10,687},{9,10,742},{10,10,686},{11,10,682},{140,10,281},{5,
> 0
> -,32},{6,11,147},{7,11,886},{9,11,753},{138,11,268},{5,10,179},{7,10,1095},{135,
> -
> 10,1213},{4,10,66},{7,10,722},{135,10,904},{135,10,352},{9,11,245},{138,11,137},
> -{4,0,289},{7,0,629},{7,0,1698},{7,0,1711},{12,0,215},{133,11,414},{6,0,1975},{
> -135,11,1762},{6,0,450},{136,0,109},{141,10,35},{134,11,599},{136,0,705},{133,0,
> -
> 664},{134,11,1749},{11,11,402},{12,11,109},{12,11,431},{13,11,179},{13,11,206},
> {
> -
> 14,11,175},{14,11,217},{16,11,3},{148,11,53},{135,0,1238},{134,11,1627},{132,1
> 1,
> -
> 488},{13,0,318},{10,10,592},{10,10,753},{12,10,317},{12,10,355},{12,10,465},{12,
> -
> 10,469},{12,10,560},{140,10,578},{133,10,564},{132,11,83},{140,11,676},{6,0,18
> 72
> -},{6,0,1906},{6,0,1907},{9,0,934},{9,0,956},{9,0,960},{9,0,996},{12,0,794},{12,0
> -
> ,876},{12,0,880},{12,0,918},{15,0,230},{18,0,234},{18,0,238},{21,0,38},{149,0,62
> -},{134,10,556},{134,11,278},{137,0,103},{7,10,544},{8,10,719},{138,10,61},{4,10,
> -5},{5,10,498},{8,10,637},{137,10,521},{7,0,777},{12,0,229},{12,0,239},{15,0,12},
> -{12,11,229},{12,11,239},{143,11,12},{6,0,26},{7,11,388},{7,11,644},{139,11,781},
> -
> {7,11,229},{8,11,59},{9,11,190},{9,11,257},{10,11,378},{140,11,191},{133,10,927}
> -,{135,10,1441},{4,10,893},{5,10,780},{133,10,893},{4,0,414},{5,0,467},{9,0,654},
> -{10,0,451},{12,0,59},{141,0,375},{142,0,173},{135,0,17},{7,0,1350},{133,10,238},
> -{135,0,955},{4,0,960},{10,0,887},{12,0,753},{18,0,161},{18,0,162},{152,0,19},{
> -
> 136,11,344},{6,10,1729},{137,11,288},{132,11,660},{4,0,217},{5,0,710},{7,0,760},
> -{7,0,1926},{9,0,428},{9,0,708},{10,0,254},{10,0,296},{10,0,720},{11,0,109},{11,0
> -,255},{12,0,165},{12,0,315},{13,0,107},{13,0,203},{14,0,54},{14,0,99},{14,0,114}
> -,{14,0,388},{16,0,85},{17,0,9},{17,0,33},{20,0,25},{20,0,28},{20,0,29},{21,0,9},
> -{21,0,10},{21,0,34},{22,0,17},{4,10,60},{7,10,1800},{8,10,314},{9,10,700},{139,
> -
> 10,487},{7,11,1035},{138,11,737},{7,11,690},{9,11,217},{9,11,587},{140,11,521},
> {
> -6,0,919},{7,11,706},{7,11,1058},{138,11,538},{7,10,1853},{138,10,437},{136,10,
> -419},{6,0,280},{10,0,502},{11,0,344},{140,0,38},{5,0,45},{7,0,1161},{11,0,448},{
> -11,0,880},{13,0,139},{13,0,407},{15,0,16},{17,0,95},{18,0,66},{18,0,88},{18,0,
> -
> 123},{149,0,7},{11,11,92},{11,11,196},{11,11,409},{11,11,450},{11,11,666},{11,1
> 1
> -,777},{12,11,262},{13,11,385},{13,11,393},{15,11,115},{16,11,45},{145,11,82},{
> -
> 136,0,777},{134,11,1744},{4,0,410},{7,0,521},{133,10,828},{134,0,673},{7,0,1110}
> -,{7,0,1778},{7,10,176},{135,10,178},{5,10,806},{7,11,268},{7,10,1976},{136,11,
> -569},{4,11,733},{9,11,194},{10,11,92},{11,11,198},{12,11,84},{12,11,87},{13,11,
> -128},{144,11,74},{5,0,341},{7,0,1129},{11,0,414},{4,10,51},{6,10,4},{7,10,591},{
> -
> 7,10,849},{7,10,951},{7,10,1613},{7,10,1760},{7,10,1988},{9,10,434},{10,10,754},
> -
> {11,10,25},{139,10,37},{133,10,902},{135,10,928},{135,0,787},{132,0,436},{134,1
> 0
> -,270},{7,0,1587},{135,0,1707},{6,0,377},{7,0,1025},{9,0,613},{145,0,104},{7,11,
> -
> 982},{7,11,1361},{10,11,32},{143,11,56},{139,0,96},{132,0,451},{132,10,416},{14
> 2
> -,10,372},{5,10,152},{5,10,197},{7,11,306},{7,10,340},{7,10,867},{10,10,548},{10,
> -
> 10,581},{11,10,6},{12,10,3},{12,10,19},{14,10,110},{142,10,289},{134,0,680},{13
> 4
> -,11,609},{7,0,483},{7,10,190},{8,10,28},{8,10,141},{8,10,444},{8,10,811},{9,10,
> -
> 468},{11,10,334},{12,10,24},{12,10,386},{140,10,576},{10,0,916},{133,10,757},{5,
> -
> 10,721},{135,10,1553},{133,11,178},{134,0,937},{132,10,898},{133,0,739},{147,0,
> -
> 82},{135,0,663},{146,0,128},{5,10,277},{141,10,247},{134,0,1087},{132,10,435},{
> 6
> -
> ,11,381},{7,11,645},{7,11,694},{136,11,546},{7,0,503},{135,0,1885},{6,0,1965},{8
> -,0,925},{138,0,955},{4,0,113},{5,0,163},{5,0,735},{7,0,1009},{9,0,9},{9,0,771},{
> -
> 12,0,90},{13,0,138},{13,0,410},{143,0,128},{4,0,324},{138,0,104},{7,0,460},{5,10
> -
> ,265},{134,10,212},{133,11,105},{7,11,261},{7,11,1107},{7,11,1115},{7,11,1354},
> {
> -
> 7,11,1588},{7,11,1705},{7,11,1902},{9,11,465},{10,11,248},{10,11,349},{10,11,64
> 7
> -},{11,11,527},{11,11,660},{11,11,669},{12,11,529},{141,11,305},{5,11,438},{9,11,
> -
> 694},{12,11,627},{141,11,210},{152,11,11},{4,0,935},{133,0,823},{132,10,702},{5,
> -0,269},{7,0,434},{7,0,891},{8,0,339},{9,0,702},{11,0,594},{11,0,718},{17,0,100},
> -
> {5,10,808},{135,10,2045},{7,0,1014},{9,0,485},{141,0,264},{134,0,1713},{7,0,181
> 0
> -
> },{11,0,866},{12,0,103},{13,0,495},{140,11,233},{4,0,423},{10,0,949},{138,0,1013
> -},{135,0,900},{8,11,25},{138,11,826},{5,10,166},{8,10,739},{140,10,511},{134,0,
> -2018},{7,11,1270},{139,11,612},{4,10,119},{5,10,170},{5,10,447},{7,10,1708},{7,
> -
> 10,1889},{9,10,357},{9,10,719},{12,10,486},{140,10,596},{12,0,574},{140,11,574},
> -
> {132,11,308},{6,0,964},{6,0,1206},{134,0,1302},{4,10,450},{135,10,1158},{135,11,
> -
> 150},{136,11,649},{14,0,213},{148,0,38},{9,11,45},{9,11,311},{141,11,42},{134,1
> 1
> -
> ,521},{7,10,1375},{7,10,1466},{138,10,331},{132,10,754},{5,11,339},{7,11,1442},
> {
> -
> 14,11,3},{15,11,41},{147,11,66},{136,11,378},{134,0,1022},{5,10,850},{136,10,79
> 9
> -},{142,0,143},{135,0,2029},{134,11,1628},{8,0,523},{150,0,34},{5,0,625},{135,0,
> -1617},{7,0,275},{7,10,238},{7,10,2033},{8,10,120},{8,10,188},{8,10,659},{9,10,
> -
> 598},{10,10,466},{12,10,342},{12,10,588},{13,10,503},{14,10,246},{143,10,92},{7,
> -0,37},{8,0,425},{8,0,693},{9,0,720},{10,0,380},{10,0,638},{11,0,273},{11,0,473},
> -{12,0,61},{143,0,43},{135,11,829},{135,0,1943},{132,0,765},{5,11,486},{135,11,
> -1349},{7,11,1635},{8,11,17},{10,11,217},{138,11,295},{4,10,201},{7,10,1744},{8,
> -
> 10,602},{11,10,247},{11,10,826},{145,10,65},{138,11,558},{11,0,551},{142,0,159},
> -
> {8,10,164},{146,10,62},{139,11,176},{132,0,168},{136,0,1010},{134,0,1994},{135,
> 0
> -
> ,91},{138,0,532},{135,10,1243},{135,0,1884},{132,10,907},{5,10,100},{10,10,329},
> -
> {12,10,416},{149,10,29},{134,11,447},{132,10,176},{5,10,636},{5,10,998},{7,10,9}
> -,{7,10,1508},{8,10,26},{9,10,317},{9,10,358},{10,10,210},{10,10,292},{10,10,533}
> -
> ,{11,10,555},{12,10,526},{12,10,607},{13,10,263},{13,10,459},{142,10,271},{4,11,
> -
> 609},{135,11,756},{6,0,15},{7,0,70},{10,0,240},{147,0,93},{4,11,930},{133,11,947
> -},{134,0,1227},{134,0,1534},{133,11,939},{133,11,962},{5,11,651},{8,11,170},{9,
> -11,61},{9,11,63},{10,11,23},{10,11,37},{10,11,834},{11,11,4},{11,11,187},{11,11,
> -
> 281},{11,11,503},{11,11,677},{12,11,96},{12,11,130},{12,11,244},{14,11,5},{14,1
> 1
> -
> ,40},{14,11,162},{14,11,202},{146,11,133},{4,11,406},{5,11,579},{12,11,492},{15
> 0
> -
> ,11,15},{139,0,392},{6,10,610},{10,10,127},{141,10,27},{7,0,655},{7,0,1844},{136
> -
> ,10,119},{4,0,145},{6,0,176},{7,0,395},{137,0,562},{132,0,501},{140,11,145},{136
> -,0,1019},{134,0,509},{139,0,267},{6,11,17},{7,11,16},{7,11,1001},{7,11,1982},{9,
> -
> 11,886},{10,11,489},{10,11,800},{11,11,782},{12,11,320},{13,11,467},{14,11,145},
> -
> {14,11,387},{143,11,119},{145,11,17},{6,0,1099},{133,11,458},{7,11,1983},{8,11,
> 0
> -},{8,11,171},{9,11,120},{9,11,732},{10,11,473},{11,11,656},{11,11,998},{18,11,0}
> -,{18,11,2},{147,11,21},{12,11,427},{146,11,38},{10,0,948},{138,0,968},{7,10,126}
> -,{136,10,84},{136,10,790},{4,0,114},{9,0,492},{13,0,462},{142,0,215},{6,10,64},{
> -12,10,377},{141,10,309},{4,0,77},{5,0,361},{6,0,139},{6,0,401},{6,0,404},{7,0,
> -
> 413},{7,0,715},{7,0,1716},{11,0,279},{12,0,179},{12,0,258},{13,0,244},{142,0,358
> -},{134,0,1717},{7,0,772},{7,0,1061},{7,0,1647},{8,0,82},{11,0,250},{11,0,607},{
> -
> 12,0,311},{12,0,420},{13,0,184},{13,0,367},{7,10,1104},{11,10,269},{11,10,539},{
> -11,10,627},{11,10,706},{11,10,975},{12,10,248},{12,10,434},{12,10,600},{12,10,
> -
> 622},{13,10,297},{13,10,485},{14,10,69},{14,10,409},{143,10,108},{135,0,724},{4,
> -
> 11,512},{4,11,519},{133,11,342},{134,0,1133},{145,11,29},{11,10,977},{141,10,5
> 07
> -},{6,0,841},{6,0,1042},{6,0,1194},{10,0,993},{140,0,1021},{6,11,31},{7,11,491},{
> -7,11,530},{8,11,592},{9,10,34},{11,11,53},{11,10,484},{11,11,779},{12,11,167},{
> -
> 12,11,411},{14,11,14},{14,11,136},{15,11,72},{16,11,17},{144,11,72},{4,0,1021},{
> -
> 6,0,2037},{133,11,907},{7,0,373},{8,0,335},{8,0,596},{9,0,488},{6,10,1700},{7,10
> -
> ,293},{7,10,382},{7,10,1026},{7,10,1087},{7,10,2027},{8,10,252},{8,10,727},{8,10
> -
> ,729},{9,10,30},{9,10,199},{9,10,231},{9,10,251},{9,10,334},{9,10,361},{9,10,712
> -},{10,10,55},{10,10,60},{10,10,232},{10,10,332},{10,10,384},{10,10,396},{10,10,
> -504},{10,10,542},{10,10,652},{11,10,20},{11,10,48},{11,10,207},{11,10,291},{11,
> -
> 10,298},{11,10,342},{11,10,365},{11,10,394},{11,10,620},{11,10,705},{11,10,101
> 7}
> -,{12,10,123},{12,10,340},{12,10,406},{12,10,643},{13,10,61},{13,10,269},{13,10,
> -
> 311},{13,10,319},{13,10,486},{14,10,234},{15,10,62},{15,10,85},{16,10,71},{18,1
> 0
> -,119},{148,10,105},{150,0,37},{4,11,208},{5,11,106},{6,11,531},{8,11,408},{9,11,
> -
> 188},{138,11,572},{132,0,564},{6,0,513},{135,0,1052},{132,0,825},{9,0,899},{140,
> -
> 11,441},{134,0,778},{133,11,379},{7,0,1417},{12,0,382},{17,0,48},{152,0,12},{13
> 2
> -
> ,11,241},{7,0,1116},{6,10,379},{7,10,270},{8,10,176},{8,10,183},{9,10,432},{9,10
> -,661},{12,10,247},{12,10,617},{146,10,125},{5,10,792},{133,10,900},{6,0,545},{7,
> -
> 0,565},{7,0,1669},{10,0,114},{11,0,642},{140,0,618},{133,0,5},{138,11,7},{132,11
> -
> ,259},{135,0,192},{134,0,701},{136,0,763},{135,10,1979},{4,10,901},{133,10,776},
> -
> {10,0,755},{147,0,29},{133,0,759},{4,11,173},{5,11,312},{5,11,512},{135,11,1285}
> -,{7,11,1603},{7,11,1691},{9,11,464},{11,11,195},{12,11,279},{12,11,448},{14,11,
> -11},{147,11,102},{7,0,370},{7,0,1007},{7,0,1177},{135,0,1565},{135,0,1237},{4,0,
> -87},{5,0,250},{141,0,298},{4,11,452},{5,11,583},{5,11,817},{6,11,433},{7,11,593}
> -
> ,{7,11,720},{7,11,1378},{8,11,161},{9,11,284},{10,11,313},{139,11,886},{4,11,54
> 7
> -
> },{135,11,1409},{136,11,722},{4,10,37},{5,10,334},{135,10,1253},{132,10,508},{1
> 2
> -
> ,0,107},{146,0,31},{8,11,420},{139,11,193},{135,0,814},{135,11,409},{140,0,991},
> -{4,0,57},{7,0,1195},{7,0,1438},{7,0,1548},{7,0,1835},{7,0,1904},{9,0,757},{10,0,
> -
> 604},{139,0,519},{132,0,540},{138,11,308},{132,10,533},{136,0,608},{144,11,65},
> {
> -
> 4,0,1014},{134,0,2029},{4,0,209},{7,0,902},{5,11,1002},{136,11,745},{134,0,2030}
> -,{6,0,303},{7,0,335},{7,0,1437},{7,0,1668},{8,0,553},{8,0,652},{8,0,656},{9,0,
> -558},{11,0,743},{149,0,18},{5,11,575},{6,11,354},{135,11,701},{4,11,239},{6,11,
> -477},{7,11,1607},{11,11,68},{139,11,617},{132,0,559},{8,0,527},{18,0,60},{147,0,
> -
> 24},{133,10,920},{138,0,511},{133,0,1017},{133,0,675},{138,10,391},{11,0,156},{
> -
> 135,10,1952},{138,11,369},{132,11,367},{133,0,709},{6,0,698},{134,0,887},{142,
> 10
> -
> ,126},{134,0,1745},{132,10,483},{13,11,299},{142,11,75},{133,0,714},{7,0,8},{13
> 6
> -
> ,0,206},{138,10,480},{4,11,694},{9,10,495},{146,10,104},{7,11,1248},{11,11,621},
> -
> {139,11,702},{140,11,687},{132,0,776},{139,10,1009},{135,0,1272},{134,0,1059},
> {8
> -
> ,10,653},{13,10,93},{147,10,14},{135,11,213},{136,0,406},{133,10,172},{132,0,94
> 7
> -},{8,0,175},{10,0,168},{138,0,573},{132,0,870},{6,0,1567},{151,11,28},{134,11,
> -
> 472},{5,10,260},{136,11,132},{4,11,751},{11,11,390},{140,11,32},{4,11,409},{133,
> -11,78},{12,0,554},{6,11,473},{145,11,105},{133,0,784},{8,0,908},{136,11,306},{
> -139,0,882},{6,0,358},{7,0,1393},{8,0,396},{10,0,263},{14,0,154},{16,0,48},{17,0,
> -8},{7,11,1759},{8,11,396},{10,11,263},{14,11,154},{16,11,48},{145,11,8},{13,11,
> -163},{13,11,180},{18,11,78},{148,11,35},{14,0,32},{18,0,85},{20,0,2},{152,0,16},
> -{7,0,228},{10,0,770},{8,10,167},{8,10,375},{9,10,82},{9,10,561},{138,10,620},{
> -132,0,845},{9,0,14},{9,0,441},{10,0,306},{139,0,9},{11,0,966},{12,0,287},{13,0,
> -342},{13,0,402},{15,0,110},{15,0,163},{8,10,194},{136,10,756},{134,0,1578},{4,0,
> -967},{6,0,1820},{6,0,1847},{140,0,716},{136,0,594},{7,0,1428},{7,0,1640},{7,0,
> -1867},{9,0,169},{9,0,182},{9,0,367},{9,0,478},{9,0,506},{9,0,551},{9,0,557},{9,0
> -,648},{9,0,697},{9,0,705},{9,0,725},{9,0,787},{9,0,794},{10,0,198},{10,0,214},{
> -10,0,267},{10,0,275},{10,0,456},{10,0,551},{10,0,561},{10,0,613},{10,0,627},{10,
> -0,668},{10,0,675},{10,0,691},{10,0,695},{10,0,707},{10,0,715},{11,0,183},{11,0,
> -
> 201},{11,0,244},{11,0,262},{11,0,352},{11,0,439},{11,0,493},{11,0,572},{11,0,591
> -},{11,0,608},{11,0,611},{11,0,646},{11,0,674},{11,0,711},{11,0,751},{11,0,761},{
> -11,0,776},{11,0,785},{11,0,850},{11,0,853},{11,0,862},{11,0,865},{11,0,868},{11,
> -0,875},{11,0,898},{11,0,902},{11,0,903},{11,0,910},{11,0,932},{11,0,942},{11,0,
> -
> 957},{11,0,967},{11,0,972},{12,0,148},{12,0,195},{12,0,220},{12,0,237},{12,0,318
> -},{12,0,339},{12,0,393},{12,0,445},{12,0,450},{12,0,474},{12,0,505},{12,0,509},{
> -12,0,533},{12,0,591},{12,0,594},{12,0,597},{12,0,621},{12,0,633},{12,0,642},{13,
> -
> 0,59},{13,0,60},{13,0,145},{13,0,239},{13,0,250},{13,0,329},{13,0,344},{13,0,365
> -},{13,0,372},{13,0,387},{13,0,403},{13,0,414},{13,0,456},{13,0,470},{13,0,478},{
> -13,0,483},{13,0,489},{14,0,55},{14,0,57},{14,0,81},{14,0,90},{14,0,148},{14,0,
> -
> 239},{14,0,266},{14,0,321},{14,0,326},{14,0,327},{14,0,330},{14,0,347},{14,0,355
> -},{14,0,401},{14,0,404},{14,0,411},{14,0,414},{14,0,416},{14,0,420},{15,0,61},{
> -15,0,74},{15,0,87},{15,0,88},{15,0,94},{15,0,96},{15,0,116},{15,0,149},{15,0,154
> -},{16,0,50},{16,0,63},{16,0,73},{17,0,2},{17,0,66},{17,0,92},{17,0,103},{17,0,
> -112},{17,0,120},{18,0,50},{18,0,54},{18,0,82},{18,0,86},{18,0,90},{18,0,111},{18
> -,0,115},{18,0,156},{19,0,40},{19,0,79},{20,0,78},{21,0,22},{135,11,883},{5,0,161
> -
> },{135,0,839},{4,0,782},{13,11,293},{142,11,56},{133,11,617},{139,11,50},{135,1
> 0
> -
> ,22},{145,0,64},{5,10,639},{7,10,1249},{139,10,896},{138,0,998},{135,11,2042},{
> 4
> -
> ,11,546},{142,11,233},{6,0,1043},{134,0,1574},{134,0,1496},{4,10,102},{7,10,815}
> -,{7,10,1699},{139,10,964},{12,0,781},{142,0,461},{4,11,313},{133,11,577},{6,0,
> -
> 639},{6,0,1114},{137,0,817},{8,11,184},{141,11,433},{7,0,1814},{135,11,935},{10,
> -
> 0,997},{140,0,958},{4,0,812},{137,11,625},{132,10,899},{136,10,795},{5,11,886},
> {
> -
> 6,11,46},{6,11,1790},{7,11,14},{7,11,732},{7,11,1654},{8,11,95},{8,11,327},{8,11
> -,616},{10,11,598},{10,11,769},{11,11,134},{11,11,747},{12,11,378},{142,11,97},{
> -
> 136,0,139},{6,10,52},{9,10,104},{9,10,559},{12,10,308},{147,10,87},{133,11,1021}
> -
> ,{132,10,604},{132,10,301},{136,10,779},{7,0,643},{136,0,236},{132,11,153},{134,
> -
> 0,1172},{147,10,32},{133,11,798},{6,0,1338},{132,11,587},{6,11,598},{7,11,42},{
> 8
> -
> ,11,695},{10,11,212},{11,11,158},{14,11,196},{145,11,85},{135,10,508},{5,11,957}
> -
> ,{5,11,1008},{135,11,249},{4,11,129},{135,11,465},{5,0,54},{7,11,470},{7,11,105
> 7
> -},{7,11,1201},{9,11,755},{11,11,906},{140,11,527},{7,11,908},{146,11,7},{5,11,
> -148},{136,11,450},{144,11,1},{4,0,256},{135,0,1488},{9,0,351},{6,10,310},{7,10,
> -1849},{8,10,72},{8,10,272},{8,10,431},{9,10,12},{10,10,563},{10,10,630},{10,10,
> -
> 796},{10,10,810},{11,10,367},{11,10,599},{11,10,686},{140,10,672},{6,0,1885},{6,
> -0,1898},{6,0,1899},{140,0,955},{4,0,714},{133,0,469},{6,0,1270},{134,0,1456},{
> -132,0,744},{6,0,313},{7,10,537},{8,10,64},{9,10,127},{10,10,496},{12,10,510},{
> -
> 141,10,384},{4,11,217},{4,10,244},{5,11,710},{7,10,233},{7,11,1926},{9,11,428},{
> -
> 9,11,708},{10,11,254},{10,11,296},{10,11,720},{11,11,109},{11,11,255},{12,11,16
> 5
> -},{12,11,315},{13,11,107},{13,11,203},{14,11,54},{14,11,99},{14,11,114},{14,11,
> -388},{16,11,85},{17,11,9},{17,11,33},{20,11,25},{20,11,28},{20,11,29},{21,11,9},
> -
> {21,11,10},{21,11,34},{150,11,17},{138,0,402},{7,0,969},{146,0,55},{8,0,50},{137
> -,0,624},{134,0,1355},{132,0,572},{134,10,1650},{10,10,702},{139,10,245},{10,0,
> -
> 847},{142,0,445},{6,0,43},{7,0,38},{8,0,248},{138,0,513},{133,0,369},{137,10,338
> -},{133,0,766},{133,0,363},{133,10,896},{8,11,392},{11,11,54},{13,11,173},{13,11,
> -294},{148,11,7},{134,0,678},{7,11,1230},{136,11,531},{6,0,258},{140,0,409},{5,0,
> -249},{148,0,82},{7,10,1117},{136,10,539},{5,0,393},{6,0,378},{7,0,1981},{9,0,32}
> -,{9,0,591},{10,0,685},{10,0,741},{142,0,382},{133,0,788},{134,0,1281},{134,0,
> -1295},{7,0,1968},{141,0,509},{4,0,61},{5,0,58},{5,0,171},{5,0,683},{6,0,291},{6,
> -0,566},{7,0,1650},{11,0,523},{12,0,273},{12,0,303},{15,0,39},{143,0,111},{6,0,
> -
> 706},{134,0,1283},{134,0,589},{135,11,1433},{133,11,435},{7,0,1059},{13,0,54},{
> 5
> -
> ,10,4},{5,10,810},{6,10,13},{6,10,538},{6,10,1690},{6,10,1726},{7,10,1819},{8,10
> -
> ,148},{8,10,696},{8,10,791},{12,10,125},{143,10,9},{135,10,1268},{5,11,85},{6,11
> -
> ,419},{7,11,134},{7,11,305},{7,11,361},{7,11,1337},{8,11,71},{140,11,519},{137,0
> -,824},{140,11,688},{5,11,691},{7,11,345},{7,10,1385},{9,11,94},{11,10,582},{11,
> -
> 10,650},{11,10,901},{11,10,949},{12,11,169},{12,10,232},{12,10,236},{13,10,413},
> -
> {13,10,501},{146,10,116},{4,0,917},{133,0,1005},{7,0,1598},{5,11,183},{6,11,582}
> -,{9,11,344},{10,11,679},{140,11,435},{4,10,925},{5,10,803},{8,10,698},{138,10,
> -828},{132,0,919},{135,11,511},{139,10,992},{4,0,255},{5,0,302},{6,0,132},{7,0,
> -128},{7,0,283},{7,0,1299},{10,0,52},{10,0,514},{11,0,925},{13,0,92},{142,0,309},
> -
> {134,0,1369},{135,10,1847},{134,0,328},{7,11,1993},{136,11,684},{133,10,383},{
> -
> 137,0,173},{134,11,583},{134,0,1411},{19,0,65},{5,11,704},{8,11,357},{10,11,745}
> -
> ,{14,11,426},{17,11,94},{147,11,57},{9,10,660},{138,10,347},{4,11,179},{5,11,19
> 8
> -},{133,11,697},{7,11,347},{7,11,971},{8,11,181},{138,11,711},{141,0,442},{11,0,
> -842},{11,0,924},{13,0,317},{13,0,370},{13,0,469},{13,0,471},{14,0,397},{18,0,69}
> -
> ,{18,0,145},{7,10,572},{9,10,592},{11,10,680},{12,10,356},{140,10,550},{14,11,1
> 9
> -},{14,11,28},{144,11,29},{136,0,534},{4,11,243},{5,11,203},{7,11,19},{7,11,71},{
> -
> 7,11,113},{10,11,405},{11,11,357},{142,11,240},{6,0,210},{10,0,845},{138,0,862},
> -
> {7,11,1351},{9,11,581},{10,11,639},{11,11,453},{140,11,584},{7,11,1450},{139,11,
> -
> 99},{10,0,892},{12,0,719},{144,0,105},{4,0,284},{6,0,223},{134,11,492},{5,11,134
> -
> },{6,11,408},{6,11,495},{135,11,1593},{136,0,529},{137,0,807},{4,0,218},{7,0,526
> -},{143,0,137},{6,0,1444},{142,11,4},{132,11,665},{4,0,270},{5,0,192},{6,0,332},{
> -
> 7,0,1322},{4,11,248},{7,11,137},{137,11,349},{140,0,661},{7,0,1517},{11,0,597},{
> -14,0,76},{14,0,335},{20,0,33},{7,10,748},{139,10,700},{5,11,371},{135,11,563},{
> -
> 146,11,57},{133,10,127},{133,0,418},{4,11,374},{7,11,547},{7,11,1700},{7,11,183
> 3
> -
> },{139,11,858},{6,10,198},{140,10,83},{7,11,1812},{13,11,259},{13,11,356},{14,1
> 1
> -,242},{147,11,114},{7,0,379},{8,0,481},{9,0,377},{5,10,276},{6,10,55},{135,10,
> -1369},{138,11,286},{5,0,1003},{6,0,149},{6,10,1752},{136,10,726},{8,0,262},{9,0,
> -627},{10,0,18},{11,0,214},{11,0,404},{11,0,457},{11,0,780},{11,0,913},{13,0,401}
> -,{14,0,200},{6,11,1647},{7,11,1552},{7,11,2010},{9,11,494},{137,11,509},{135,0,
> -742},{136,0,304},{132,0,142},{133,10,764},{6,10,309},{7,10,331},{138,10,550},{
> -
> 135,10,1062},{6,11,123},{7,11,214},{7,10,986},{9,11,728},{10,11,157},{11,11,346}
> -,{11,11,662},{143,11,106},{135,10,1573},{7,0,925},{137,0,799},{4,0,471},{5,0,51}
> -,{6,0,602},{8,0,484},{138,0,195},{136,0,688},{132,0,697},{6,0,1169},{6,0,1241},{
> -
> 6,10,194},{7,10,133},{10,10,493},{10,10,570},{139,10,664},{140,0,751},{7,0,929},
> -{10,0,452},{11,0,878},{16,0,33},{5,10,24},{5,10,569},{6,10,3},{6,10,119},{6,10,
> -143},{6,10,440},{7,10,599},{7,10,1686},{7,10,1854},{8,10,424},{9,10,43},{9,10,
> -
> 584},{9,10,760},{10,10,328},{11,10,159},{11,10,253},{12,10,487},{140,10,531},{4,
> -11,707},{13,11,106},{18,11,49},{147,11,41},{5,0,221},{5,11,588},{134,11,393},{
> -
> 134,0,1437},{6,11,211},{7,11,1690},{11,11,486},{140,11,369},{5,10,14},{5,10,892}
> -
> ,{6,10,283},{7,10,234},{136,10,537},{4,0,988},{136,0,955},{135,0,1251},{4,10,12
> 6
> -},{8,10,635},{147,10,34},{4,10,316},{135,10,1561},{137,10,861},{4,10,64},{5,10,
> -352},{5,10,720},{6,10,368},{139,10,359},{134,0,192},{4,0,132},{5,0,69},{135,0,
> -
> 1242},{7,10,1577},{10,10,304},{10,10,549},{12,10,365},{13,10,220},{13,10,240},{
> -142,10,33},{4,0,111},{7,0,865},{134,11,219},{5,11,582},{6,11,1646},{7,11,99},{7,
> -11,1962},{7,11,1986},{8,11,515},{8,11,773},{9,11,23},{9,11,491},{12,11,620},{14,
> -11,52},{145,11,50},{132,0,767},{7,11,568},{148,11,21},{6,0,42},{7,0,1416},{7,0,
> -2005},{8,0,131},{8,0,466},{9,0,672},{13,0,252},{20,0,103},{133,11,851},{135,0,
> -
> 1050},{6,10,175},{137,10,289},{5,10,432},{133,10,913},{6,0,44},{136,0,368},{135,
> -
> 11,784},{132,0,570},{133,0,120},{139,10,595},{140,0,29},{6,0,227},{135,0,1589},
> {
> -4,11,98},{7,11,1365},{9,11,422},{9,11,670},{10,11,775},{11,11,210},{13,11,26},{
> -
> 13,11,457},{141,11,476},{140,10,80},{5,10,931},{134,10,1698},{133,0,522},{134,
> 0,
> -1120},{135,0,1529},{12,0,739},{14,0,448},{142,0,467},{11,10,526},{11,10,939},{
> -141,10,290},{5,10,774},{6,10,1637},{6,10,1686},{134,10,1751},{6,0,1667},{135,0,
> -
> 2036},{7,10,1167},{11,10,934},{13,10,391},{145,10,76},{137,11,147},{6,10,260},{
> 7
> -
> ,10,1484},{11,11,821},{12,11,110},{12,11,153},{18,11,41},{150,11,19},{6,0,511},{
> -
> 12,0,132},{134,10,573},{5,0,568},{6,0,138},{135,0,1293},{132,0,1020},{8,0,258},{
> -9,0,208},{137,0,359},{4,0,565},{8,0,23},{136,0,827},{134,0,344},{4,0,922},{5,0,
> -1023},{13,11,477},{14,11,120},{148,11,61},{134,0,240},{5,11,209},{6,11,30},{11,
> -11,56},{139,11,305},{6,0,171},{7,0,1002},{7,0,1324},{9,0,415},{14,0,230},{18,0,
> -68},{4,10,292},{4,10,736},{5,10,871},{6,10,1689},{7,10,1944},{137,10,580},{9,11,
> -
> 635},{139,11,559},{4,11,150},{5,11,303},{134,11,327},{6,10,63},{135,10,920},{13
> 3
> -
> ,10,793},{8,11,192},{10,11,78},{10,11,555},{11,11,308},{13,11,359},{147,11,95},{
> -
> 135,11,786},{135,11,1712},{136,0,402},{6,0,754},{6,11,1638},{7,11,79},{7,11,496}
> -
> ,{9,11,138},{10,11,336},{11,11,12},{12,11,412},{12,11,440},{142,11,305},{4,0,71
> 6
> -},{141,0,31},{133,0,982},{8,0,691},{8,0,731},{5,10,67},{6,10,62},{6,10,374},{135
> -
> ,10,1391},{9,10,790},{140,10,47},{139,11,556},{151,11,1},{7,11,204},{7,11,415},{
> -8,11,42},{10,11,85},{11,11,33},{11,11,564},{12,11,571},{149,11,1},{8,0,888},{7,
> -
> 11,610},{135,11,1501},{4,10,391},{135,10,1169},{5,0,847},{9,0,840},{138,0,803},
> {
> -137,0,823},{134,0,785},{8,0,152},{9,0,53},{9,0,268},{9,0,901},{10,0,518},{10,0,
> -829},{11,0,188},{13,0,74},{14,0,46},{15,0,17},{15,0,33},{17,0,40},{18,0,36},{19,
> -0,20},{22,0,1},{152,0,2},{4,11,3},{5,11,247},{5,11,644},{7,11,744},{7,11,1207},{
> -
> 7,11,1225},{7,11,1909},{146,11,147},{136,0,532},{135,0,681},{132,10,271},{140,
> 0,
> -314},{140,0,677},{4,0,684},{136,0,384},{5,11,285},{9,11,67},{13,11,473},{143,11,
> -82},{4,10,253},{5,10,544},{7,10,300},{137,10,340},{7,0,110},{7,0,447},{8,0,290},
> -{8,0,591},{9,0,382},{9,0,649},{11,0,71},{11,0,155},{11,0,313},{12,0,5},{13,0,325
> -},{142,0,287},{134,0,1818},{136,0,1007},{138,0,321},{7,0,360},{7,0,425},{9,0,66}
> -,{9,0,278},{138,0,644},{133,10,818},{5,0,385},{5,10,541},{6,10,94},{6,10,499},{7
> -
> ,10,230},{139,10,321},{4,10,920},{5,10,25},{5,10,790},{6,10,457},{7,10,853},{136
> -,10,788},{4,0,900},{133,0,861},{5,0,254},{7,0,985},{136,0,73},{7,0,1959},{136,0,
> -
> 683},{134,10,1765},{133,10,822},{132,10,634},{4,11,29},{6,11,532},{7,11,1628},{
> 7
> -
> ,11,1648},{9,11,303},{9,11,350},{10,11,433},{11,11,97},{11,11,557},{11,11,745},{
> -12,11,289},{12,11,335},{12,11,348},{12,11,606},{13,11,116},{13,11,233},{13,11,
> -
> 466},{14,11,181},{14,11,209},{14,11,232},{14,11,236},{14,11,300},{16,11,41},{14
> 8
> -
> ,11,97},{19,0,86},{6,10,36},{7,10,658},{136,10,454},{135,11,1692},{132,0,725},{5
> -
> ,11,501},{7,11,1704},{9,11,553},{11,11,520},{12,11,557},{141,11,249},{134,0,196}
> -,{133,0,831},{136,0,723},{7,0,1897},{13,0,80},{13,0,437},{145,0,74},{4,0,992},{6
> -
> ,0,627},{136,0,994},{135,11,1294},{132,10,104},{5,0,848},{6,0,66},{136,0,764},{4
> -,0,36},{7,0,1387},{10,0,205},{139,0,755},{6,0,1046},{134,0,1485},{134,0,950},{
> -
> 132,0,887},{14,0,450},{148,0,111},{7,0,620},{7,0,831},{9,10,542},{9,10,566},{138
> -
> ,10,728},{6,0,165},{138,0,388},{139,10,263},{4,0,719},{135,0,155},{138,10,468},{
> -
> 6,11,453},{144,11,36},{134,11,129},{5,0,533},{7,0,755},{138,0,780},{134,0,1465},
> -{4,0,353},{6,0,146},{6,0,1789},{7,0,427},{7,0,990},{7,0,1348},{9,0,665},{9,0,898
> -},{11,0,893},{142,0,212},{7,10,87},{142,10,288},{4,0,45},{135,0,1257},{12,0,7},{
> -7,10,988},{7,10,1939},{9,10,64},{9,10,502},{12,10,34},{13,10,12},{13,10,234},{
> -
> 147,10,77},{4,0,607},{5,11,60},{6,11,504},{7,11,614},{7,11,1155},{140,11,0},{135
> -
> ,10,141},{8,11,198},{11,11,29},{140,11,534},{140,0,65},{136,0,816},{132,10,619},
> -
> {139,0,88},{5,10,246},{8,10,189},{9,10,355},{9,10,512},{10,10,124},{10,10,453},{
> -11,10,143},{11,10,416},{11,10,859},{141,10,341},{4,11,379},{135,11,1397},{4,0,
> -600},{137,0,621},{133,0,367},{134,0,561},{6,0,559},{134,0,1691},{6,0,585},{134,
> -
> 11,585},{135,11,1228},{4,11,118},{5,10,678},{6,11,274},{6,11,361},{7,11,75},{14
> 1
> -
> ,11,441},{135,11,1818},{137,11,841},{5,0,573},{6,0,287},{7,10,862},{7,10,1886},{
> -138,10,179},{132,10,517},{140,11,693},{5,11,314},{6,11,221},{7,11,419},{10,11,
> -
> 650},{11,11,396},{12,11,156},{13,11,369},{14,11,333},{145,11,47},{140,10,540},{
> -
> 136,10,667},{11,10,403},{146,10,83},{6,0,672},{133,10,761},{9,0,157},{10,10,131}
> -,{140,10,72},{7,0,714},{134,11,460},{134,0,456},{133,0,925},{5,11,682},{135,11,
> -
> 1887},{136,11,510},{136,11,475},{133,11,1016},{9,0,19},{7,11,602},{8,11,179},{1
> 0
> -
> ,11,781},{140,11,126},{6,11,329},{138,11,111},{6,0,822},{134,0,1473},{144,11,86}
> -,{11,0,113},{139,11,113},{5,11,821},{134,11,1687},{133,10,449},{7,0,463},{17,0,
> -69},{136,10,103},{7,10,2028},{138,10,641},{6,0,193},{7,0,240},{7,0,1682},{10,0,
> -51},{10,0,640},{11,0,410},{13,0,82},{14,0,247},{14,0,331},{142,0,377},{6,0,471},
> -
> {11,0,411},{142,0,2},{5,11,71},{7,11,1407},{9,11,388},{9,11,704},{10,11,261},{10
> -
> ,11,619},{11,11,547},{11,11,619},{143,11,157},{136,0,633},{135,0,1148},{6,0,554}
> -
> ,{7,0,1392},{12,0,129},{7,10,1274},{7,10,1386},{7,11,2008},{9,11,337},{10,11,51
> 7
> -},{146,10,87},{7,0,803},{8,0,542},{6,10,187},{7,10,1203},{8,10,380},{14,10,117},
> -
> {149,10,28},{6,10,297},{7,10,793},{139,10,938},{8,0,438},{11,0,363},{7,10,464},{
> -
> 11,10,105},{12,10,231},{14,10,386},{15,10,102},{148,10,75},{5,11,16},{6,11,86},{
> -6,11,603},{7,11,292},{7,11,561},{8,11,257},{8,11,382},{9,11,721},{9,11,778},{11,
> -
> 11,581},{140,11,466},{6,0,717},{4,11,486},{133,11,491},{132,0,875},{132,11,72},
> {
> -6,11,265},{135,11,847},{4,0,237},{135,0,514},{6,0,392},{7,0,65},{135,0,2019},{
> -140,11,261},{135,11,922},{137,11,404},{12,0,563},{14,0,101},{18,0,129},{7,10,
> -
> 1010},{11,10,733},{11,10,759},{13,10,34},{146,10,45},{7,10,1656},{9,10,369},{10,
> -
> 10,338},{10,10,490},{11,10,154},{11,10,545},{11,10,775},{13,10,77},{141,10,274},
> -{4,0,444},{10,0,146},{140,0,9},{139,11,163},{7,0,1260},{135,0,1790},{9,0,222},{
> -10,0,43},{139,0,900},{137,11,234},{138,0,971},{137,0,761},{134,0,699},{136,11,
> -434},{6,0,1116},{7,0,1366},{5,10,20},{6,11,197},{6,10,298},{7,10,659},{8,11,205}
> -,{137,10,219},{132,11,490},{11,11,820},{150,11,51},{7,10,1440},{11,10,854},{11,
> -
> 10,872},{11,10,921},{12,10,551},{13,10,472},{142,10,367},{140,11,13},{132,0,82
> 9}
> -,{12,0,242},{132,10,439},{136,10,669},{6,0,593},{6,11,452},{7,11,312},{138,11,
> -219},{4,11,333},{9,11,176},{12,11,353},{141,11,187},{7,0,36},{8,0,201},{136,0,
> -
> 605},{140,0,224},{132,10,233},{134,0,1430},{134,0,1806},{4,0,523},{133,0,638},{
> 6
> -,0,1889},{9,0,958},{9,0,971},{9,0,976},{12,0,796},{12,0,799},{12,0,808},{12,0,
> -
> 835},{12,0,836},{12,0,914},{12,0,946},{15,0,216},{15,0,232},{18,0,183},{18,0,187
> -
> },{18,0,194},{18,0,212},{18,0,232},{149,0,49},{132,10,482},{6,0,827},{134,0,1434
> -},{135,10,346},{134,0,2043},{6,0,242},{7,0,227},{7,0,1581},{8,0,104},{9,0,113},{
> -9,0,220},{9,0,427},{10,0,136},{10,0,239},{11,0,579},{11,0,1023},{13,0,4},{13,0,
> -204},{13,0,316},{148,0,86},{134,11,1685},{7,0,148},{8,0,284},{141,0,63},{142,0,
> -
> 10},{135,11,584},{134,0,1249},{7,0,861},{135,10,334},{5,10,795},{6,10,1741},{13
> 7
> -,11,70},{132,0,807},{7,11,135},{8,11,7},{8,11,62},{9,11,243},{10,11,658},{10,11,
> -697},{11,11,456},{139,11,756},{9,11,395},{138,11,79},{137,11,108},{147,0,94},{
> -
> 136,0,494},{135,11,631},{135,10,622},{7,0,1510},{135,10,1750},{4,10,203},{135,
> 10
> -,1936},{7,11,406},{7,11,459},{8,11,606},{139,11,726},{7,0,1306},{8,0,505},{9,0,
> -
> 482},{10,0,126},{11,0,225},{12,0,347},{12,0,449},{13,0,19},{14,0,218},{142,0,435
> -},{5,0,268},{10,0,764},{12,0,120},{13,0,39},{145,0,127},{142,11,68},{11,10,678},
> -
> {140,10,307},{12,11,268},{12,11,640},{142,11,119},{135,10,2044},{133,11,612},{
> 4,
> -11,372},{7,11,482},{8,11,158},{9,11,602},{9,11,615},{10,11,245},{10,11,678},{10,
> -11,744},{11,11,248},{139,11,806},{7,10,311},{9,10,308},{140,10,255},{4,0,384},{
> -
> 135,0,1022},{5,11,854},{135,11,1991},{135,10,1266},{4,10,400},{5,10,267},{135,
> 10
> -,232},{135,0,1703},{9,0,159},{11,0,661},{140,0,603},{4,0,964},{14,0,438},{14,0,
> -444},{14,0,456},{22,0,60},{22,0,63},{9,11,106},{9,11,163},{9,11,296},{10,11,167}
> -,{10,11,172},{10,11,777},{139,11,16},{136,0,583},{132,0,515},{8,0,632},{8,0,697}
> -
> ,{137,0,854},{5,11,195},{135,11,1685},{6,0,1123},{134,0,1365},{134,11,328},{7,1
> 1
> -
> ,1997},{8,11,730},{139,11,1006},{4,0,136},{133,0,551},{134,0,1782},{7,0,1287},{
> 9
> -,0,44},{10,0,552},{10,0,642},{11,0,839},{12,0,274},{12,0,275},{12,0,372},{13,0,
> -91},{142,0,125},{5,11,751},{11,11,797},{140,11,203},{133,0,732},{7,0,679},{8,0,
> -313},{4,10,100},{135,11,821},{10,0,361},{142,0,316},{134,0,595},{6,0,147},{7,0,
> -886},{9,0,753},{138,0,268},{5,10,362},{5,10,443},{6,10,318},{7,10,1019},{139,10,
> -
> 623},{5,10,463},{136,10,296},{4,10,454},{5,11,950},{5,11,994},{134,11,351},{138,
> -0,137},{5,10,48},{5,10,404},{6,10,557},{7,10,458},{8,10,597},{10,10,455},{10,10,
> -
> 606},{11,10,49},{11,10,548},{12,10,476},{13,10,18},{141,10,450},{133,0,414},{13
> 5
> -
> ,0,1762},{5,11,421},{135,11,47},{5,10,442},{135,10,1984},{134,0,599},{134,0,174
> 9
> -},{134,0,1627},{4,0,488},{132,11,350},{137,11,751},{132,0,83},{140,0,676},{133,
> -
> 11,967},{7,0,1639},{5,10,55},{140,10,161},{4,11,473},{7,11,623},{8,11,808},{9,11
> -,871},{9,11,893},{11,11,38},{11,11,431},{12,11,112},{12,11,217},{12,11,243},{12,
> -
> 11,562},{12,11,683},{13,11,141},{13,11,197},{13,11,227},{13,11,406},{13,11,487},
> -{14,11,156},{14,11,203},{14,11,224},{14,11,256},{18,11,58},{150,11,0},{133,10,
> -
> 450},{7,11,736},{139,11,264},{134,0,278},{4,11,222},{7,11,286},{136,11,629},{13
> 5
> -
> ,10,869},{140,0,97},{144,0,14},{134,0,1085},{4,10,213},{7,10,223},{136,10,80},{7
> -,0,388},{7,0,644},{139,0,781},{132,0,849},{7,0,229},{8,0,59},{9,0,190},{10,0,378
> -},{140,0,191},{7,10,381},{7,10,806},{7,10,820},{8,10,354},{8,10,437},{8,10,787},
> -
> {9,10,657},{10,10,58},{10,10,339},{10,10,749},{11,10,914},{12,10,162},{13,10,75}
> -,{14,10,106},{14,10,198},{14,10,320},{14,10,413},{146,10,43},{141,11,306},{136,
> -10,747},{134,0,1115},{16,0,94},{16,0,108},{136,11,146},{6,0,700},{6,0,817},{134,
> -0,1002},{133,10,692},{4,11,465},{135,11,1663},{134,10,191},{6,0,1414},{135,11,
> -
> 913},{132,0,660},{7,0,1035},{138,0,737},{6,10,162},{7,10,1960},{136,10,831},{13
> 2
> -
> ,10,706},{7,0,690},{9,0,217},{9,0,587},{140,0,521},{138,10,426},{135,10,1235},{6
> -,11,82},{7,11,138},{7,11,517},{9,11,673},{139,11,238},{138,0,272},{5,11,495},{7,
> -
> 11,834},{9,11,733},{139,11,378},{134,0,1744},{132,0,1011},{7,11,828},{142,11,1
> 16
> -},{4,0,733},{9,0,194},{10,0,92},{11,0,198},{12,0,84},{13,0,128},{133,11,559},{10
> -
> ,0,57},{10,0,277},{6,11,21},{6,11,1737},{7,11,1444},{136,11,224},{4,10,204},{137
> -,10,902},{136,10,833},{11,0,348},{12,0,99},{18,0,1},{18,0,11},{19,0,4},{7,10,366
> -},{9,10,287},{12,10,199},{12,10,556},{140,10,577},{6,0,1981},{136,0,936},{21,0,
> -
> 33},{150,0,40},{5,11,519},{138,11,204},{5,10,356},{135,10,224},{134,0,775},{135,
> -
> 0,306},{7,10,630},{9,10,567},{11,10,150},{11,10,444},{141,10,119},{5,0,979},{13
> 4
> -
> ,10,539},{133,0,611},{4,11,402},{135,11,1679},{5,0,178},{7,11,2},{8,11,323},{136
> -
> ,11,479},{5,11,59},{135,11,672},{4,0,1010},{6,0,1969},{138,11,237},{133,11,412},
> -{146,11,34},{7,11,1740},{146,11,48},{134,0,664},{139,10,814},{4,11,85},{135,11,
> -
> 549},{133,11,94},{133,11,457},{132,0,390},{134,0,1510},{4,10,235},{135,10,255},
> {
> -4,10,194},{5,10,584},{6,11,11},{6,10,384},{7,11,187},{7,10,583},{10,10,761},{11,
> -
> 10,760},{139,10,851},{4,11,522},{139,11,802},{135,0,493},{10,11,776},{13,11,34
> 5}
> -
> ,{142,11,425},{146,0,37},{4,11,52},{135,11,661},{134,0,724},{134,0,829},{133,11,
> -
> 520},{133,10,562},{4,11,281},{5,11,38},{7,11,194},{7,11,668},{7,11,1893},{137,1
> 1
> -,397},{5,10,191},{137,10,271},{7,0,1537},{14,0,96},{143,0,73},{5,0,473},{11,0,
> -168},{4,10,470},{6,10,153},{7,10,1503},{7,10,1923},{10,10,701},{11,10,132},{11,
> -
> 10,227},{11,10,320},{11,10,436},{11,10,525},{11,10,855},{12,10,41},{12,10,286},
> {
> -13,10,103},{13,10,284},{14,10,255},{14,10,262},{15,10,117},{143,10,127},{133,0,
> -105},{5,0,438},{9,0,694},{12,0,627},{141,0,210},{133,10,327},{6,10,552},{7,10,
> -
> 1754},{137,10,604},{134,0,1256},{152,0,11},{5,11,448},{11,11,98},{139,11,524},{
> 7
> -
> ,0,1626},{5,10,80},{6,10,405},{7,10,403},{7,10,1502},{8,10,456},{9,10,487},{9,10
> -
> ,853},{9,10,889},{10,10,309},{11,10,721},{11,10,994},{12,10,430},{13,10,165},{1
> 4
> -
> ,11,16},{146,11,44},{132,0,779},{8,0,25},{138,0,826},{4,10,453},{5,10,887},{6,10
> -,535},{8,10,6},{8,10,543},{136,10,826},{137,11,461},{140,11,632},{132,0,308},{
> -135,0,741},{132,0,671},{7,0,150},{8,0,649},{136,0,1020},{9,0,99},{6,11,336},{8,
> -11,552},{9,11,285},{10,11,99},{139,11,568},{134,0,521},{5,0,339},{14,0,3},{15,0,
> -41},{15,0,166},{147,0,66},{6,11,423},{7,11,665},{7,11,1210},{9,11,218},{141,11,
> -
> 222},{6,0,543},{5,10,101},{5,11,256},{6,10,88},{7,10,1677},{9,10,100},{10,10,677
> -},{14,10,169},{14,10,302},{14,10,313},{15,10,48},{143,10,84},{4,10,310},{7,10,
> -708},{7,10,996},{9,10,795},{10,10,390},{10,10,733},{11,10,451},{12,10,249},{14,
> -
> 10,115},{14,10,286},{143,10,100},{133,10,587},{13,11,417},{14,11,129},{143,11,
> 15
> -
> },{134,0,1358},{136,11,554},{132,10,498},{7,10,217},{8,10,140},{138,10,610},{13
> 5
> -,11,989},{135,11,634},{6,0,155},{140,0,234},{135,11,462},{132,11,618},{134,0,
> -
> 1628},{132,0,766},{4,11,339},{5,10,905},{135,11,259},{135,0,829},{4,11,759},{14
> 1
> -
> ,11,169},{7,0,1445},{4,10,456},{7,10,358},{7,10,1637},{8,10,643},{139,10,483},{5
> -,0,486},{135,0,1349},{5,11,688},{135,11,712},{7,0,1635},{8,0,17},{10,0,217},{10,
> -
> 0,295},{12,0,2},{140,11,2},{138,0,558},{150,10,56},{4,11,278},{5,11,465},{135,11
> -
> ,1367},{136,11,482},{133,10,535},{6,0,1362},{6,0,1461},{10,11,274},{10,11,625},
> {
> -
> 139,11,530},{5,0,599},{5,11,336},{6,11,341},{6,11,478},{6,11,1763},{136,11,386},
> -
> {7,10,1748},{137,11,151},{134,0,1376},{133,10,539},{135,11,73},{135,11,1971},{
> -139,11,283},{9,0,93},{139,0,474},{6,10,91},{135,10,435},{6,0,447},{5,11,396},{
> -134,11,501},{4,10,16},{5,10,316},{5,10,842},{6,10,370},{6,10,1778},{8,10,166},{
> -
> 11,10,812},{12,10,206},{12,10,351},{14,10,418},{16,10,15},{16,10,34},{18,10,3},{
> -19,10,3},{19,10,7},{20,10,4},{149,10,21},{7,0,577},{7,0,1432},{9,0,475},{9,0,505
> -},{9,0,526},{9,0,609},{9,0,689},{9,0,726},{9,0,735},{9,0,738},{10,0,556},{10,0,
> -674},{10,0,684},{11,0,89},{11,0,202},{11,0,272},{11,0,380},{11,0,415},{11,0,505}
> -,{11,0,537},{11,0,550},{11,0,562},{11,0,640},{11,0,667},{11,0,688},{11,0,847},{
> -11,0,927},{11,0,930},{11,0,940},{12,0,144},{12,0,325},{12,0,329},{12,0,389},{12,
> -0,403},{12,0,451},{12,0,515},{12,0,604},{12,0,616},{12,0,626},{13,0,66},{13,0,
> -
> 131},{13,0,167},{13,0,236},{13,0,368},{13,0,411},{13,0,434},{13,0,453},{13,0,461
> -},{13,0,474},{14,0,59},{14,0,60},{14,0,139},{14,0,152},{14,0,276},{14,0,353},{14
> -,0,402},{15,0,28},{15,0,81},{15,0,123},{15,0,152},{18,0,136},{148,0,88},{4,11,
> -929},{133,11,799},{136,11,46},{142,0,307},{4,0,609},{7,0,756},{9,0,544},{11,0,
> -413},{144,0,25},{10,0,687},{7,10,619},{10,10,547},{11,10,122},{140,10,601},{4,0,
> -
> 930},{133,0,947},{133,0,939},{142,0,21},{4,11,892},{133,11,770},{133,0,962},{5,
> 0
> -,651},{8,0,170},{9,0,61},{9,0,63},{10,0,23},{10,0,37},{10,0,834},{11,0,4},{11,0,
> -187},{11,0,281},{11,0,503},{11,0,677},{12,0,96},{12,0,130},{12,0,244},{14,0,5},{
> -
> 14,0,40},{14,0,162},{14,0,202},{146,0,133},{4,0,406},{5,0,579},{12,0,492},{150,0
> -
> ,15},{135,11,158},{135,0,597},{132,0,981},{132,10,888},{4,10,149},{138,10,368},
> {
> -
> 132,0,545},{4,10,154},{7,10,1134},{136,10,105},{135,11,2001},{134,0,1558},{4,1
> 0,
> -
> 31},{6,10,429},{7,10,962},{9,10,458},{139,10,691},{132,10,312},{135,10,1642},{6,
> -0,17},{6,0,1304},{7,0,16},{7,0,1001},{9,0,886},{10,0,489},{10,0,800},{11,0,782},
> -
> {12,0,320},{13,0,467},{14,0,145},{14,0,387},{143,0,119},{135,0,1982},{17,0,17},{
> -
> 7,11,1461},{140,11,91},{4,10,236},{132,11,602},{138,0,907},{136,0,110},{7,0,272}
> -
> ,{19,0,53},{5,10,836},{5,10,857},{134,10,1680},{5,0,458},{7,11,1218},{136,11,30
> 3
> -},{7,0,1983},{8,0,0},{8,0,171},{9,0,120},{9,0,732},{10,0,473},{11,0,656},{11,0,
> -998},{18,0,0},{18,0,2},{19,0,21},{10,10,68},{139,10,494},{137,11,662},{4,11,13},
> -
> {5,11,567},{7,11,1498},{9,11,124},{11,11,521},{140,11,405},{4,10,81},{139,10,86
> 7
> -},{135,11,1006},{7,11,800},{7,11,1783},{138,11,12},{9,0,295},{10,0,443},{5,10,
> -
> 282},{8,10,650},{137,10,907},{132,11,735},{4,11,170},{4,10,775},{135,11,323},{6,
> -
> 0,1844},{10,0,924},{11,11,844},{12,11,104},{140,11,625},{5,11,304},{7,11,1403},
> {
> -140,11,498},{134,0,1232},{4,0,519},{10,0,70},{12,0,26},{14,0,17},{14,0,178},{15,
> -
> 0,34},{149,0,12},{132,0,993},{4,11,148},{133,11,742},{6,0,31},{7,0,491},{7,0,530
> -},{8,0,592},{11,0,53},{11,0,779},{12,0,167},{12,0,411},{14,0,14},{14,0,136},{15,
> -0,72},{16,0,17},{144,0,72},{133,0,907},{134,0,733},{133,11,111},{4,10,71},{5,10,
> -376},{7,10,119},{138,10,665},{136,0,55},{8,0,430},{136,11,430},{4,0,208},{5,0,
> -106},{6,0,531},{8,0,408},{9,0,188},{138,0,572},{12,0,56},{11,10,827},{14,10,34},
> -
> {143,10,148},{134,0,1693},{133,11,444},{132,10,479},{140,0,441},{9,0,449},{10,0,
> -192},{138,0,740},{134,0,928},{4,0,241},{7,10,607},{136,10,99},{8,11,123},{15,11,
> -6},{144,11,7},{6,11,285},{8,11,654},{11,11,749},{12,11,190},{12,11,327},{13,11,
> -120},{13,11,121},{13,11,327},{15,11,47},{146,11,40},{4,10,41},{5,10,74},{7,10,
> -
> 1627},{11,10,871},{140,10,619},{7,0,1525},{11,10,329},{11,10,965},{12,10,241},{
> -14,10,354},{15,10,22},{148,10,63},{132,0,259},{135,11,183},{9,10,209},{137,10,
> -300},{5,11,937},{135,11,100},{133,10,98},{4,0,173},{5,0,312},{5,0,512},{135,0,
> -1285},{141,0,185},{7,0,1603},{7,0,1691},{9,0,464},{11,0,195},{12,0,279},{12,0,
> -448},{14,0,11},{147,0,102},{135,0,1113},{133,10,984},{4,0,452},{5,0,583},{135,0,
> -720},{4,0,547},{5,0,817},{6,0,433},{7,0,593},{7,0,1378},{8,0,161},{9,0,284},{10,
> -
> 0,313},{139,0,886},{8,0,722},{4,10,182},{6,10,205},{135,10,220},{150,0,13},{4,10
> -,42},{9,10,205},{9,10,786},{138,10,659},{6,0,289},{7,0,1670},{12,0,57},{151,0,4}
> -,{132,10,635},{14,0,43},{146,0,21},{139,10,533},{135,0,1694},{8,0,420},{139,0,
> -
> 193},{135,0,409},{132,10,371},{4,10,272},{135,10,836},{5,10,825},{134,10,1640},
> {
> -
> 5,11,251},{5,11,956},{8,11,268},{9,11,214},{146,11,142},{138,0,308},{6,0,1863},{
> -141,11,37},{137,10,879},{7,10,317},{135,10,569},{132,11,294},{134,0,790},{5,0,
> -
> 1002},{136,0,745},{5,11,346},{5,11,711},{136,11,390},{135,0,289},{5,0,504},{11,
> 0
> -,68},{137,10,307},{4,0,239},{6,0,477},{7,0,1607},{139,0,617},{149,0,13},{133,0,
> -
> 609},{133,11,624},{5,11,783},{7,11,1998},{135,11,2047},{133,10,525},{132,0,367
> },
> -{132,11,594},{6,0,528},{133,10,493},{4,10,174},{135,10,911},{8,10,417},{137,10,
> -
> 782},{132,0,694},{7,0,548},{137,0,58},{4,10,32},{5,10,215},{6,10,269},{7,10,1782
> -},{7,10,1892},{10,10,16},{11,10,822},{11,10,954},{141,10,481},{140,0,687},{7,0,
> -
> 1749},{136,10,477},{132,11,569},{133,10,308},{135,10,1088},{4,0,661},{138,0,10
> 04
> -},{5,11,37},{6,11,39},{6,11,451},{7,11,218},{7,11,667},{7,11,1166},{7,11,1687},{
> -8,11,662},{144,11,2},{9,0,445},{12,0,53},{13,0,492},{5,10,126},{8,10,297},{9,10,
> -
> 366},{140,10,374},{7,10,1551},{139,10,361},{148,0,74},{134,11,508},{135,0,213},
> {
> -
> 132,10,175},{132,10,685},{6,0,760},{6,0,834},{134,0,1248},{7,11,453},{7,11,635},
> -
> {7,11,796},{8,11,331},{9,11,328},{9,11,330},{9,11,865},{10,11,119},{10,11,235},{
> -
> 11,11,111},{11,11,129},{11,11,240},{12,11,31},{12,11,66},{12,11,222},{12,11,269}
> -
> ,{12,11,599},{12,11,689},{13,11,186},{13,11,364},{142,11,345},{7,0,1672},{139,0,
> -
> 189},{133,10,797},{133,10,565},{6,0,1548},{6,11,98},{7,11,585},{135,11,702},{9,
> 0
> -,968},{15,0,192},{149,0,56},{4,10,252},{6,11,37},{7,11,299},{7,10,1068},{7,11,
> -1666},{8,11,195},{8,11,316},{9,11,178},{9,11,276},{9,11,339},{9,11,536},{10,11,
> -
> 102},{10,11,362},{10,10,434},{10,11,785},{11,11,55},{11,11,149},{11,10,228},{11,
> -10,426},{11,11,773},{13,10,231},{13,11,416},{13,11,419},{14,11,38},{14,11,41},{
> -14,11,210},{18,10,106},{148,10,87},{4,0,751},{11,0,390},{140,0,32},{4,0,409},{
> -
> 133,0,78},{11,11,458},{12,11,15},{140,11,432},{7,0,1602},{10,0,257},{10,0,698},{
> -11,0,544},{11,0,585},{12,0,212},{13,0,307},{5,10,231},{7,10,601},{9,10,277},{9,
> -
> 10,674},{10,10,178},{10,10,418},{10,10,509},{11,10,531},{12,10,113},{12,10,475},
> -
> {13,10,99},{142,10,428},{6,0,473},{145,0,105},{6,0,1949},{15,0,156},{133,11,645}
> -,{7,10,1591},{144,10,43},{135,0,1779},{135,10,1683},{4,11,290},{135,11,1356},{
> -
> 134,0,763},{6,11,70},{7,11,1292},{10,11,762},{139,11,288},{142,0,29},{140,11,42
> 8
> -},{7,0,883},{7,11,131},{7,11,422},{8,11,210},{140,11,573},{134,0,488},{4,10,399}
> -,{5,10,119},{5,10,494},{7,10,751},{137,10,556},{133,0,617},{132,11,936},{139,0,
> -50},{7,0,1518},{139,0,694},{137,0,785},{4,0,546},{135,0,2042},{7,11,716},{13,11,
> -
> 97},{141,11,251},{132,11,653},{145,0,22},{134,0,1016},{4,0,313},{133,0,577},{13
> 6
> -
> ,11,657},{8,0,184},{141,0,433},{135,0,935},{6,0,720},{9,0,114},{146,11,80},{12,0
> -,186},{12,0,292},{14,0,100},{18,0,70},{7,10,594},{7,10,851},{7,10,1858},{9,10,
> -
> 411},{9,10,574},{9,10,666},{9,10,737},{10,10,346},{10,10,712},{11,10,246},{11,1
> 0
> -,432},{11,10,517},{11,10,647},{11,10,679},{11,10,727},{12,10,304},{12,10,305},{
> -
> 12,10,323},{12,10,483},{12,10,572},{12,10,593},{12,10,602},{13,10,95},{13,10,10
> 1
> -},{13,10,171},{13,10,315},{13,10,378},{13,10,425},{13,10,475},{14,10,63},{14,10,
> -
> 380},{14,10,384},{15,10,133},{18,10,112},{148,10,72},{135,10,1093},{135,11,183
> 6}
> -
> ,{132,10,679},{137,10,203},{11,0,402},{12,0,109},{12,0,431},{13,0,179},{13,0,20
> 6
> -},{14,0,217},{16,0,3},{148,0,53},{7,11,1368},{8,11,232},{8,11,361},{10,11,682},{
> -138,11,742},{137,10,714},{5,0,886},{6,0,46},{6,0,1790},{7,0,14},{7,0,732},{7,0,
> -1654},{8,0,95},{8,0,327},{8,0,616},{9,0,892},{10,0,598},{10,0,769},{11,0,134},{
> -
> 11,0,747},{12,0,378},{14,0,97},{137,11,534},{4,0,969},{136,10,825},{137,11,27},{
> -6,0,727},{142,11,12},{133,0,1021},{134,0,1190},{134,11,1657},{5,10,143},{5,10,
> -
> 769},{6,10,1760},{7,10,682},{7,10,1992},{136,10,736},{132,0,153},{135,11,127},{
> -133,0,798},{132,0,587},{6,0,598},{7,0,42},{8,0,695},{10,0,212},{11,0,158},{14,0,
> -196},{145,0,85},{133,10,860},{6,0,1929},{134,0,1933},{5,0,957},{5,0,1008},{9,0,
> -577},{12,0,141},{6,10,422},{7,10,0},{7,10,1544},{8,11,364},{11,10,990},{12,10,
> -453},{13,10,47},{141,10,266},{134,0,1319},{4,0,129},{135,0,465},{7,0,470},{7,0,
> -1057},{7,0,1201},{9,0,755},{11,0,906},{140,0,527},{7,0,908},{146,0,7},{5,0,148},
> -
> {136,0,450},{5,10,515},{137,10,131},{7,10,1605},{11,10,962},{146,10,139},{132,1
> 0
> -,646},{134,0,1166},{4,10,396},{7,10,728},{9,10,117},{13,10,202},{148,10,51},{6,
> -10,121},{6,10,124},{6,10,357},{7,10,1138},{7,10,1295},{8,10,162},{139,10,655},{
> -14,0,374},{142,11,374},{138,0,253},{139,0,1003},{5,11,909},{9,11,849},{138,11,
> -
> 805},{133,10,237},{7,11,525},{7,11,1579},{8,11,497},{136,11,573},{137,0,46},{13
> 2
> -
> ,0,879},{134,0,806},{135,0,1868},{6,0,1837},{134,0,1846},{6,0,730},{134,0,881},{
> -7,0,965},{7,0,1460},{7,0,1604},{7,11,193},{7,11,397},{7,11,1105},{8,11,124},{8,
> -11,619},{9,11,305},{10,11,264},{11,11,40},{12,11,349},{13,11,134},{13,11,295},{
> -
> 14,11,155},{15,11,120},{146,11,105},{136,0,506},{143,0,10},{4,11,262},{7,11,342}
> -
> ,{7,10,571},{7,10,1877},{10,10,366},{141,11,23},{133,11,641},{10,0,22},{9,10,51
> 3
> -},{10,10,39},{12,10,122},{140,10,187},{135,11,1431},{150,11,49},{4,11,99},{6,11,
> -
> 250},{6,11,346},{8,11,127},{138,11,81},{6,0,2014},{8,0,928},{10,0,960},{10,0,979
> -},{140,0,996},{134,0,296},{132,11,915},{5,11,75},{9,11,517},{10,11,470},{12,11,
> -155},{141,11,224},{137,10,873},{4,0,854},{140,11,18},{134,0,587},{7,10,107},{7,
> -10,838},{8,10,550},{138,10,401},{11,0,636},{15,0,145},{17,0,34},{19,0,50},{23,0,
> -
> 20},{11,10,588},{11,10,864},{11,10,968},{143,10,160},{135,11,216},{7,0,982},{10,
> -
> 0,32},{143,0,56},{133,10,768},{133,11,954},{6,11,304},{7,11,1114},{8,11,418},{1
> 0
> -
> ,11,345},{11,11,341},{11,11,675},{141,11,40},{9,11,410},{139,11,425},{136,0,941}
> -,{5,0,435},{132,10,894},{5,0,85},{6,0,419},{7,0,134},{7,0,305},{7,0,361},{7,0,
> -1337},{8,0,71},{140,0,519},{140,0,688},{135,0,740},{5,0,691},{7,0,345},{9,0,94},
> -{140,0,169},{5,0,183},{6,0,582},{10,0,679},{140,0,435},{134,11,14},{6,0,945},{
> -
> 135,0,511},{134,11,1708},{5,11,113},{6,11,243},{7,11,1865},{11,11,161},{16,11,3
> 7
> -},{145,11,99},{132,11,274},{137,0,539},{7,0,1993},{8,0,684},{134,10,272},{6,0,
> -659},{134,0,982},{4,10,9},{5,10,128},{7,10,368},{11,10,480},{148,10,3},{134,0,
> -583},{132,0,803},{133,0,704},{4,0,179},{5,0,198},{133,0,697},{7,0,347},{7,0,971}
> -,{8,0,181},{10,0,711},{135,11,166},{136,10,682},{4,10,2},{7,10,545},{7,10,894},{
> -136,11,521},{135,0,481},{132,0,243},{5,0,203},{7,0,19},{7,0,71},{7,0,113},{10,0,
> -405},{11,0,357},{142,0,240},{5,11,725},{5,11,727},{135,11,1811},{6,0,826},{137,
> -11,304},{7,0,1450},{139,0,99},{133,11,654},{134,0,492},{5,0,134},{6,0,408},{6,0,
> -495},{7,0,1593},{6,11,273},{10,11,188},{13,11,377},{146,11,77},{9,10,769},{140,
> -10,185},{135,11,410},{142,0,4},{4,0,665},{134,11,1785},{4,0,248},{7,0,137},{137,
> -0,349},{5,10,530},{142,10,113},{7,0,1270},{139,0,612},{132,11,780},{5,0,371},{
> -135,0,563},{135,0,826},{6,0,1535},{23,0,21},{151,0,23},{4,0,374},{7,0,547},{7,0,
> -
> 1700},{7,0,1833},{139,0,858},{133,10,556},{7,11,612},{8,11,545},{8,11,568},{8,1
> 1
> -
> ,642},{9,11,717},{10,11,541},{10,11,763},{11,11,449},{12,11,489},{13,11,153},{1
> 3
> -
> ,11,296},{14,11,138},{14,11,392},{15,11,50},{16,11,6},{16,11,12},{148,11,9},{9,0
> -,311},{141,0,42},{8,10,16},{140,10,568},{6,0,1968},{6,0,2027},{138,0,991},{6,0,
> -1647},{7,0,1552},{7,0,2010},{9,0,494},{137,0,509},{133,11,948},{6,10,186},{137,
> -
> 10,426},{134,0,769},{134,0,642},{132,10,585},{6,0,123},{7,0,214},{9,0,728},{10,0
> -,157},{11,0,346},{11,0,662},{143,0,106},{142,11,381},{135,0,1435},{4,11,532},{5,
> -
> 11,706},{135,11,662},{5,11,837},{134,11,1651},{4,10,93},{5,10,252},{6,10,229},{
> 7
> -,10,291},{9,10,550},{139,10,644},{148,0,79},{137,10,749},{134,0,1425},{137,10,
> -162},{4,11,362},{7,11,52},{7,11,303},{140,11,166},{132,10,381},{4,11,330},{7,11,
> -933},{7,11,2012},{136,11,292},{135,11,767},{4,0,707},{5,0,588},{6,0,393},{13,0,
> -106},{18,0,49},{147,0,41},{6,0,211},{7,0,1690},{11,0,486},{140,0,369},{137,11,
> -883},{4,11,703},{135,11,207},{4,0,187},{5,0,184},{5,0,690},{7,0,1869},{10,0,756}
> -,{139,0,783},{132,11,571},{134,0,1382},{5,0,175},{6,10,77},{6,10,157},{7,10,974}
> -
> ,{7,10,1301},{7,10,1339},{7,10,1490},{7,10,1873},{137,10,628},{134,0,1493},{5,1
> 1
> -
> ,873},{133,11,960},{134,0,1007},{12,11,93},{12,11,501},{13,11,362},{14,11,151},
> {
> -
> 15,11,40},{15,11,59},{16,11,46},{17,11,25},{18,11,14},{18,11,134},{19,11,25},{19
> -,11,69},{20,11,16},{20,11,19},{20,11,66},{21,11,23},{21,11,25},{150,11,42},{11,
> -10,919},{141,10,409},{134,0,219},{5,0,582},{6,0,1646},{7,0,99},{7,0,1962},{7,0,
> -1986},{8,0,515},{8,0,773},{9,0,23},{9,0,491},{12,0,620},{142,0,93},{133,0,851},{
> -
> 5,11,33},{134,11,470},{135,11,1291},{134,0,1278},{135,11,1882},{135,10,1489},{
> -132,0,1000},{138,0,982},{8,0,762},{8,0,812},{137,0,910},{6,11,47},{7,11,90},{7,
> -
> 11,664},{7,11,830},{7,11,1380},{7,11,2025},{8,11,448},{136,11,828},{4,0,98},{4,0
> -,940},{6,0,1819},{6,0,1834},{6,0,1841},{7,0,1365},{8,0,859},{8,0,897},{8,0,918},
> -{9,0,422},{9,0,670},{10,0,775},{10,0,894},{10,0,909},{10,0,910},{10,0,935},{11,0
> -
> ,210},{12,0,750},{12,0,755},{13,0,26},{13,0,457},{13,0,476},{16,0,100},{16,0,109
> -},{18,0,173},{18,0,175},{8,10,398},{9,10,681},{139,10,632},{9,11,417},{137,11,
> -
> 493},{136,10,645},{138,0,906},{134,0,1730},{134,10,20},{133,11,1019},{134,0,11
> 85
> -},{10,0,40},{136,10,769},{9,0,147},{134,11,208},{140,0,650},{5,0,209},{6,0,30},{
> -
> 11,0,56},{139,0,305},{132,0,553},{138,11,344},{6,11,68},{7,11,398},{7,11,448},{7
> -
> ,11,1629},{7,11,1813},{8,11,387},{8,11,442},{9,11,710},{10,11,282},{138,11,722},
> -
> {5,0,597},{14,0,20},{142,11,20},{135,0,1614},{135,10,1757},{4,0,150},{5,0,303},{
> -
> 6,0,327},{135,10,937},{16,0,49},{7,10,1652},{144,11,49},{8,0,192},{10,0,78},{141
> -,0,359},{135,0,786},{143,0,134},{6,0,1638},{7,0,79},{7,0,496},{9,0,138},{10,0,
> -336},{11,0,12},{12,0,412},{12,0,440},{142,0,305},{136,11,491},{4,10,579},{5,10,
> -226},{5,10,323},{135,10,960},{7,0,204},{7,0,415},{8,0,42},{10,0,85},{139,0,564},
> -
> {132,0,614},{4,11,403},{5,11,441},{7,11,450},{11,11,101},{12,11,193},{141,11,43
> 0
> -},{135,11,1927},{135,11,1330},{4,0,3},{5,0,247},{5,0,644},{7,0,744},{7,0,1207},{
> -
> 7,0,1225},{7,0,1909},{146,0,147},{136,0,942},{4,0,1019},{134,0,2023},{5,11,679},
> -{133,10,973},{5,0,285},{9,0,67},{13,0,473},{143,0,82},{7,11,328},{137,11,326},{
> -
> 151,0,8},{6,10,135},{135,10,1176},{135,11,1128},{134,0,1309},{135,11,1796},{13
> 5,
> -
> 10,314},{4,11,574},{7,11,350},{7,11,1024},{8,11,338},{9,11,677},{10,11,808},{13
> 9
> -
> ,11,508},{7,11,818},{17,11,14},{17,11,45},{18,11,75},{148,11,18},{146,10,4},{135
> -,11,1081},{4,0,29},{6,0,532},{7,0,1628},{7,0,1648},{9,0,350},{10,0,433},{11,0,97
> -},{11,0,557},{11,0,745},{12,0,289},{12,0,335},{12,0,348},{12,0,606},{13,0,116},{
> -13,0,233},{13,0,466},{14,0,181},{14,0,209},{14,0,232},{14,0,236},{14,0,300},{16,
> -
> 0,41},{148,0,97},{7,0,318},{6,10,281},{8,10,282},{8,10,480},{8,10,499},{9,10,198
> -
> },{10,10,143},{10,10,169},{10,10,211},{10,10,417},{10,10,574},{11,10,147},{11,1
> 0
> -
> ,395},{12,10,75},{12,10,407},{12,10,608},{13,10,500},{142,10,251},{135,11,1676},
> -{135,11,2037},{135,0,1692},{5,0,501},{7,0,1704},{9,0,553},{11,0,520},{12,0,557},
> -{141,0,249},{6,0,1527},{14,0,324},{15,0,55},{15,0,80},{14,11,324},{15,11,55},{
> -
> 143,11,80},{135,10,1776},{8,0,988},{137,11,297},{132,10,419},{142,0,223},{139,
> 11
> -,234},{7,0,1123},{12,0,508},{14,0,102},{14,0,226},{144,0,57},{4,10,138},{7,10,
> -1012},{7,10,1280},{137,10,76},{7,0,1764},{5,10,29},{140,10,638},{134,0,2015},{
> -134,0,1599},{138,11,56},{6,11,306},{7,11,1140},{7,11,1340},{8,11,133},{138,11,
> -
> 449},{139,11,1011},{6,10,1710},{135,10,2038},{7,11,1763},{140,11,310},{6,0,129
> },
> -{4,10,17},{5,10,23},{7,10,995},{11,10,383},{11,10,437},{12,10,460},{140,10,532},
> -{5,11,329},{136,11,260},{133,10,862},{132,0,534},{6,0,811},{135,0,626},{132,11,
> -657},{4,0,25},{5,0,60},{6,0,504},{7,0,614},{7,0,1155},{12,0,0},{152,11,7},{7,0,
> -
> 1248},{11,0,621},{139,0,702},{137,0,321},{8,10,70},{12,10,171},{141,10,272},{10,
> -
> 10,233},{139,10,76},{4,0,379},{7,0,1397},{134,10,442},{5,11,66},{7,11,1896},{13
> 6
> -
> ,11,288},{134,11,1643},{134,10,1709},{4,11,21},{5,11,91},{5,11,570},{5,11,648},{
> -5,11,750},{5,11,781},{6,11,54},{6,11,112},{6,11,402},{6,11,1732},{7,11,315},{7,
> -
> 11,749},{7,11,1347},{7,11,1900},{9,11,78},{9,11,508},{10,11,611},{11,11,510},{1
> 1
> -
> ,11,728},{13,11,36},{14,11,39},{16,11,83},{17,11,124},{148,11,30},{4,0,118},{6,0
> -,274},{6,0,361},{7,0,75},{141,0,441},{10,11,322},{10,11,719},{139,11,407},{147,
> -10,119},{12,11,549},{14,11,67},{147,11,60},{11,10,69},{12,10,105},{12,10,117},{
> -
> 13,10,213},{14,10,13},{14,10,62},{14,10,177},{14,10,421},{15,10,19},{146,10,141}
> -,{9,0,841},{137,10,309},{7,10,608},{7,10,976},{8,11,125},{8,11,369},{8,11,524},{
> -
> 9,10,146},{10,10,206},{10,11,486},{10,10,596},{11,11,13},{11,11,381},{11,11,736}
> -
> ,{11,11,766},{11,11,845},{13,11,114},{13,10,218},{13,11,292},{14,11,47},{142,10,
> -153},{12,0,693},{135,11,759},{5,0,314},{6,0,221},{7,0,419},{10,0,650},{11,0,396}
> -,{12,0,156},{13,0,369},{14,0,333},{145,0,47},{6,11,1684},{6,11,1731},{7,11,356},
> -{7,11,1932},{8,11,54},{8,11,221},{9,11,225},{9,11,356},{10,11,77},{10,11,446},{
> -10,11,731},{12,11,404},{141,11,491},{132,11,375},{4,10,518},{135,10,1136},{4,0,
> -913},{4,11,411},{11,11,643},{140,11,115},{4,11,80},{133,11,44},{8,10,689},{137,
> -10,863},{138,0,880},{4,10,18},{7,10,145},{7,10,444},{7,10,1278},{8,10,49},{8,10,
> -400},{9,10,71},{9,10,250},{10,10,459},{12,10,160},{144,10,24},{136,0,475},{5,0,
> -1016},{5,11,299},{135,11,1083},{7,0,602},{8,0,179},{10,0,781},{140,0,126},{6,0,
> -
> 329},{138,0,111},{135,0,1864},{4,11,219},{7,11,1761},{137,11,86},{6,0,1888},{6,
> 0
> -,1892},{6,0,1901},{6,0,1904},{9,0,953},{9,0,985},{9,0,991},{9,0,1001},{12,0,818}
> -,{12,0,846},{12,0,847},{12,0,861},{12,0,862},{12,0,873},{12,0,875},{12,0,877},{
> -12,0,879},{12,0,881},{12,0,884},{12,0,903},{12,0,915},{12,0,926},{12,0,939},{15,
> -0,182},{15,0,219},{15,0,255},{18,0,191},{18,0,209},{18,0,211},{149,0,41},{5,11,
> -
> 328},{135,11,918},{137,0,780},{12,0,82},{143,0,36},{133,10,1010},{5,0,821},{134,
> -
> 0,1687},{133,11,514},{132,0,956},{134,0,1180},{10,0,112},{5,10,87},{7,10,313},{
> 7
> -
> ,10,1103},{10,10,582},{11,10,389},{11,10,813},{12,10,385},{13,10,286},{14,10,12
> 4
> -},{146,10,108},{5,0,71},{7,0,1407},{9,0,704},{10,0,261},{10,0,619},{11,0,547},{
> -11,0,619},{143,0,157},{4,0,531},{5,0,455},{5,11,301},{6,11,571},{14,11,49},{146,
> -11,102},{132,10,267},{6,0,385},{7,0,2008},{9,0,337},{138,0,517},{133,11,726},{
> -
> 133,11,364},{4,11,76},{7,11,1550},{9,11,306},{9,11,430},{9,11,663},{10,11,683},{
> -11,11,427},{11,11,753},{12,11,334},{12,11,442},{14,11,258},{14,11,366},{143,11,
> -131},{6,0,1865},{6,0,1879},{6,0,1881},{6,0,1894},{6,0,1908},{9,0,915},{9,0,926},
> -{9,0,940},{9,0,943},{9,0,966},{9,0,980},{9,0,989},{9,0,1005},{9,0,1010},{12,0,
> -
> 813},{12,0,817},{12,0,840},{12,0,843},{12,0,855},{12,0,864},{12,0,871},{12,0,872
> -},{12,0,899},{12,0,905},{12,0,924},{15,0,171},{15,0,181},{15,0,224},{15,0,235},{
> -15,0,251},{146,0,184},{137,11,52},{5,0,16},{6,0,86},{6,0,603},{7,0,292},{7,0,561
> -},{8,0,257},{8,0,382},{9,0,721},{9,0,778},{11,0,581},{140,0,466},{4,0,486},{5,0,
> -491},{135,10,1121},{4,0,72},{6,0,265},{135,0,1300},{135,11,1183},{10,10,249},{
> -139,10,209},{132,10,561},{137,11,519},{4,11,656},{4,10,760},{135,11,779},{9,10,
> -
> 154},{140,10,485},{135,11,1793},{135,11,144},{136,10,255},{133,0,621},{4,10,36
> 8}
> -,{135,10,641},{135,11,1373},{7,11,554},{7,11,605},{141,11,10},{137,0,234},{5,0,
> -
> 815},{6,0,1688},{134,0,1755},{5,11,838},{5,11,841},{134,11,1649},{7,0,1987},{7,
> 0
> -,2040},{136,0,743},{133,11,1012},{6,0,197},{136,0,205},{6,0,314},{134,11,314},{
> -
> 144,11,53},{6,11,251},{7,11,365},{7,11,1357},{7,11,1497},{8,11,154},{141,11,281}
> -,{133,11,340},{6,0,452},{7,0,312},{138,0,219},{138,0,589},{4,0,333},{9,0,176},{
> -
> 12,0,353},{141,0,187},{9,10,92},{147,10,91},{134,0,1110},{11,0,47},{139,11,495},
> -
> {6,10,525},{8,10,806},{9,10,876},{140,10,284},{8,11,261},{9,11,144},{9,11,466},{
> -
> 10,11,370},{12,11,470},{13,11,144},{142,11,348},{137,11,897},{8,0,863},{8,0,864}
> -,{8,0,868},{8,0,884},{10,0,866},{10,0,868},{10,0,873},{10,0,911},{10,0,912},{10,
> -0,944},{12,0,727},{6,11,248},{9,11,546},{10,11,535},{11,11,681},{141,11,135},{6,
> -
> 0,300},{135,0,1515},{134,0,1237},{139,10,958},{133,10,594},{140,11,250},{134,0,
> -1685},{134,11,567},{7,0,135},{8,0,7},{8,0,62},{9,0,243},{10,0,658},{10,0,697},{
> -
> 11,0,456},{139,0,756},{9,0,395},{138,0,79},{6,10,1641},{136,10,820},{4,10,302},{
> -
> 135,10,1766},{134,11,174},{135,10,1313},{135,0,631},{134,10,1674},{134,11,395
> },{
> -
> 138,0,835},{7,0,406},{7,0,459},{8,0,606},{139,0,726},{134,11,617},{134,0,979},{6
> -,10,389},{7,10,149},{9,10,142},{138,10,94},{5,11,878},{133,11,972},{6,10,8},{7,
> -10,1881},{8,10,91},{136,11,511},{133,0,612},{132,11,351},{4,0,372},{7,0,482},{8,
> -0,158},{9,0,602},{9,0,615},{10,0,245},{10,0,678},{10,0,744},{11,0,248},{139,0,
> -806},{5,0,854},{135,0,1991},{132,11,286},{135,11,344},{7,11,438},{7,11,627},{7,
> -11,1516},{8,11,40},{9,11,56},{9,11,294},{10,11,30},{10,11,259},{11,11,969},{146,
> -
> 11,148},{135,0,1492},{5,11,259},{7,11,414},{7,11,854},{142,11,107},{135,10,174
> 6}
> -,{6,0,833},{134,0,998},{135,10,24},{6,0,750},{135,0,1739},{4,10,503},{135,10,
> -
> 1661},{5,10,130},{7,10,1314},{9,10,610},{10,10,718},{11,10,601},{11,10,819},{11,
> -
> 10,946},{140,10,536},{10,10,149},{11,10,280},{142,10,336},{132,11,738},{135,10,
> -
> 1946},{5,0,195},{135,0,1685},{7,0,1997},{8,0,730},{139,0,1006},{151,11,17},{133,
> -11,866},{14,0,463},{14,0,470},{150,0,61},{5,0,751},{8,0,266},{11,0,578},{4,10,
> -
> 392},{135,10,1597},{5,10,433},{9,10,633},{139,10,629},{135,0,821},{6,0,715},{13
> 4
> -
> ,0,1325},{133,11,116},{6,0,868},{132,11,457},{134,0,959},{6,10,234},{138,11,199}
> -,{7,0,1053},{7,10,1950},{8,10,680},{11,10,817},{147,10,88},{7,10,1222},{138,10,
> -386},{5,0,950},{5,0,994},{6,0,351},{134,0,1124},{134,0,1081},{7,0,1595},{6,10,5}
> -,{11,10,249},{12,10,313},{16,10,66},{145,10,26},{148,0,59},{5,11,527},{6,11,189}
> -
> ,{135,11,859},{5,10,963},{6,10,1773},{11,11,104},{11,11,554},{15,11,60},{143,11,
> -
> 125},{135,0,47},{137,0,684},{134,11,116},{134,0,1606},{134,0,777},{7,0,1020},{8,
> -
> 10,509},{136,10,792},{135,0,1094},{132,0,350},{133,11,487},{4,11,86},{5,11,667},
> -
> {5,11,753},{6,11,316},{6,11,455},{135,11,946},{7,0,1812},{13,0,259},{13,0,356},{
> -14,0,242},{147,0,114},{132,10,931},{133,0,967},{4,0,473},{7,0,623},{8,0,808},{9,
> -
> 0,871},{9,0,893},{11,0,38},{11,0,431},{12,0,112},{12,0,217},{12,0,243},{12,0,562
> -},{12,0,663},{12,0,683},{13,0,141},{13,0,197},{13,0,227},{13,0,406},{13,0,487},{
> -
> 14,0,156},{14,0,203},{14,0,224},{14,0,256},{18,0,58},{150,0,0},{138,0,286},{7,10
> -,943},{139,10,614},{135,10,1837},{150,11,45},{132,0,798},{4,0,222},{7,0,286},{
> -
> 136,0,629},{4,11,79},{7,11,1773},{10,11,450},{11,11,589},{13,11,332},{13,11,493}
> -
> ,{14,11,183},{14,11,334},{14,11,362},{14,11,368},{14,11,376},{14,11,379},{19,11,
> -90},{19,11,103},{19,11,127},{148,11,90},{5,0,337},{11,0,513},{11,0,889},{11,0,
> -961},{12,0,461},{13,0,79},{15,0,121},{4,10,90},{5,10,545},{7,10,754},{9,10,186},
> -{10,10,72},{10,10,782},{11,10,577},{11,10,610},{12,10,354},{12,10,362},{140,10,
> -
> 595},{141,0,306},{136,0,146},{7,0,1646},{9,10,329},{11,10,254},{141,11,124},{4,
> 0
> -,465},{135,0,1663},{132,0,525},{133,11,663},{10,0,299},{18,0,74},{9,10,187},{11,
> -
> 10,1016},{145,10,44},{7,0,165},{7,0,919},{4,10,506},{136,10,517},{5,10,295},{13
> 5
> -
> ,10,1680},{133,11,846},{134,0,1064},{5,11,378},{7,11,1402},{7,11,1414},{8,11,46
> 5
> -},{9,11,286},{10,11,185},{10,11,562},{10,11,635},{11,11,31},{11,11,393},{12,11,
> -456},{13,11,312},{18,11,65},{18,11,96},{147,11,89},{132,0,596},{7,10,987},{9,10,
> -
> 688},{10,10,522},{11,10,788},{140,10,566},{6,0,82},{7,0,138},{7,0,517},{7,0,1741
> -
> },{11,0,238},{4,11,648},{134,10,1775},{7,0,1233},{7,10,700},{7,10,940},{8,10,514
> -},{9,10,116},{9,10,535},{10,10,118},{11,10,107},{11,10,148},{11,10,922},{12,10,
> -254},{12,10,421},{142,10,238},{4,0,962},{6,0,1824},{8,0,894},{12,0,708},{12,0,
> -
> 725},{14,0,451},{20,0,94},{22,0,59},{150,0,62},{5,11,945},{6,11,1656},{6,11,1787
> -},{7,11,167},{8,11,824},{9,11,391},{10,11,375},{139,11,185},{5,0,495},{7,0,834},
> -
> {9,0,733},{139,0,378},{4,10,743},{135,11,1273},{6,0,1204},{7,11,1645},{8,11,352}
> -,{137,11,249},{139,10,292},{133,0,559},{132,11,152},{9,0,499},{10,0,341},{15,0,
> -144},{19,0,49},{7,10,1283},{9,10,227},{11,10,325},{11,10,408},{14,10,180},{146,
> -10,47},{6,0,21},{6,0,1737},{7,0,1444},{136,0,224},{133,11,1006},{7,0,1446},{9,0,
> -97},{17,0,15},{5,10,81},{7,10,146},{7,10,1342},{8,10,53},{8,10,561},{8,10,694},{
> -
> 8,10,754},{9,10,115},{9,10,894},{10,10,462},{10,10,813},{11,10,230},{11,10,657},
> -{11,10,699},{11,10,748},{12,10,119},{12,10,200},{12,10,283},{142,10,273},{5,10,
> -
> 408},{137,10,747},{135,11,431},{135,11,832},{6,0,729},{134,0,953},{4,0,727},{8,
> 0
> -,565},{5,11,351},{7,11,264},{136,11,565},{134,0,1948},{5,0,519},{5,11,40},{7,11,
> -598},{7,11,1638},{8,11,78},{9,11,166},{9,11,640},{9,11,685},{9,11,773},{11,11,
> -215},{13,11,65},{14,11,172},{14,11,317},{145,11,6},{8,11,60},{9,11,343},{139,11,
> -769},{137,11,455},{134,0,1193},{140,0,790},{7,11,1951},{8,11,765},{8,11,772},{
> -
> 140,11,671},{7,11,108},{8,11,219},{8,11,388},{9,11,639},{9,11,775},{11,11,275},{
> -
> 140,11,464},{132,11,468},{7,10,30},{8,10,86},{8,10,315},{8,10,700},{9,10,576},{9
> -
> ,10,858},{11,10,310},{11,10,888},{11,10,904},{12,10,361},{141,10,248},{5,11,15},
> -
> {6,11,56},{7,11,1758},{8,11,500},{9,11,730},{11,11,331},{13,11,150},{142,11,282}
> -,{4,0,402},{7,0,2},{8,0,323},{136,0,479},{138,10,839},{11,0,580},{142,0,201},{5,
> -
> 0,59},{135,0,672},{137,10,617},{146,0,34},{134,11,1886},{4,0,961},{136,0,896},{
> 6
> -
> ,0,1285},{5,11,205},{6,11,438},{137,11,711},{134,10,428},{7,10,524},{8,10,169},{
> -
> 8,10,234},{9,10,480},{138,10,646},{148,0,46},{141,0,479},{133,11,534},{6,0,2019}
> -,{134,10,1648},{4,0,85},{7,0,549},{7,10,1205},{138,10,637},{4,0,663},{5,0,94},{7
> -
> ,11,235},{7,11,1475},{15,11,68},{146,11,120},{6,11,443},{9,11,237},{9,11,571},{9
> -
> ,11,695},{10,11,139},{11,11,715},{12,11,417},{141,11,421},{132,0,783},{4,0,682},
> -
> {8,0,65},{9,10,39},{10,10,166},{11,10,918},{12,10,635},{20,10,10},{22,10,27},{22
> -,10,43},{150,10,52},{6,0,11},{135,0,187},{132,0,522},{4,0,52},{135,0,661},{4,0,
> -
> 383},{133,0,520},{135,11,546},{11,0,343},{142,0,127},{4,11,578},{7,10,157},{7,1
> 1
> -,624},{7,11,916},{8,10,279},{10,11,256},{11,11,87},{139,11,703},{134,10,604},{4,
> -
> 0,281},{5,0,38},{7,0,194},{7,0,668},{7,0,1893},{137,0,397},{7,10,945},{11,10,713
> -},{139,10,744},{139,10,1022},{9,0,635},{139,0,559},{5,11,923},{7,11,490},{12,11,
> -
> 553},{13,11,100},{14,11,118},{143,11,75},{132,0,975},{132,10,567},{137,10,859},
> {
> -
> 7,10,1846},{7,11,1846},{8,10,628},{136,11,628},{148,0,116},{138,11,750},{14,0,5
> 1
> -},{14,11,51},{15,11,7},{148,11,20},{132,0,858},{134,0,1075},{4,11,924},{133,10,
> -762},{136,0,535},{133,0,448},{10,10,784},{141,10,191},{133,10,298},{7,0,610},{
> -
> 135,0,1501},{7,10,633},{7,10,905},{7,10,909},{7,10,1538},{9,10,767},{140,10,636}
> -
> ,{4,11,265},{7,11,807},{135,11,950},{5,11,93},{12,11,267},{144,11,26},{136,0,19
> 1
> -},{139,10,301},{135,10,1970},{135,0,267},{4,0,319},{5,0,699},{138,0,673},{6,0,
> -336},{7,0,92},{7,0,182},{8,0,453},{8,0,552},{9,0,204},{9,0,285},{10,0,99},{11,0,
> -568},{11,0,950},{12,0,94},{16,0,20},{16,0,70},{19,0,55},{12,10,644},{144,10,90},
> -
> {6,0,551},{7,0,1308},{7,10,845},{7,11,994},{8,10,160},{137,10,318},{19,11,1},{19
> -,11,26},{150,11,9},{7,0,1406},{9,0,218},{141,0,222},{5,0,256},{138,0,69},{5,11,
> -233},{5,11,320},{6,11,140},{7,11,330},{136,11,295},{6,0,1980},{136,0,952},{4,0,
> -
> 833},{137,11,678},{133,11,978},{4,11,905},{6,11,1701},{137,11,843},{138,10,735
> },
> -{136,10,76},{17,0,39},{148,0,36},{18,0,81},{146,11,81},{14,0,352},{17,0,53},{18,
> -
> 0,146},{18,0,152},{19,0,11},{150,0,54},{135,0,634},{138,10,841},{132,0,618},{4,0
> -,339},{7,0,259},{17,0,73},{4,11,275},{140,11,376},{132,11,509},{7,11,273},{139,
> -11,377},{4,0,759},{13,0,169},{137,10,804},{6,10,96},{135,10,1426},{4,10,651},{
> -
> 133,10,289},{7,0,1075},{8,10,35},{9,10,511},{10,10,767},{147,10,118},{6,0,649},{
> -6,0,670},{136,0,482},{5,0,336},{6,0,341},{6,0,478},{6,0,1763},{136,0,386},{5,11,
> -
> 802},{7,11,2021},{8,11,805},{14,11,94},{15,11,65},{16,11,4},{16,11,77},{16,11,80
> -},{145,11,5},{6,0,1035},{5,11,167},{5,11,899},{6,11,410},{137,11,777},{134,11,
> -
> 1705},{5,0,924},{133,0,969},{132,10,704},{135,0,73},{135,11,10},{135,10,1078},{
> 5
> -,11,11},{6,11,117},{6,11,485},{7,11,1133},{9,11,582},{9,11,594},{11,11,21},{11,
> -
> 11,818},{12,11,535},{141,11,86},{135,0,1971},{4,11,264},{7,11,1067},{8,11,204},
> {
> -
> 8,11,385},{139,11,953},{6,0,1458},{135,0,1344},{5,0,396},{134,0,501},{4,10,720},
> -{133,10,306},{4,0,929},{5,0,799},{8,0,46},{8,0,740},{133,10,431},{7,11,646},{7,
> -11,1730},{11,11,446},{141,11,178},{7,0,276},{5,10,464},{6,10,236},{7,10,696},{7,
> -10,914},{7,10,1108},{7,10,1448},{9,10,15},{9,10,564},{10,10,14},{12,10,565},{13,
> -
> 10,449},{14,10,53},{15,10,13},{16,10,64},{145,10,41},{4,0,892},{133,0,770},{6,10
> -
> ,1767},{12,10,194},{145,10,107},{135,0,158},{5,10,840},{138,11,608},{134,0,143
> 2}
> -,{138,11,250},{8,11,794},{9,11,400},{10,11,298},{142,11,228},{151,0,25},{7,11,
> -
> 1131},{135,11,1468},{135,0,2001},{9,10,642},{11,10,236},{142,10,193},{4,10,68},
> {
> -5,10,634},{6,10,386},{7,10,794},{8,10,273},{9,10,563},{10,10,105},{10,10,171},{
> -11,10,94},{139,10,354},{136,11,724},{132,0,478},{11,11,512},{13,11,205},{19,11,
> -30},{22,11,36},{151,11,19},{7,0,1461},{140,0,91},{6,11,190},{7,11,768},{135,11,
> -
> 1170},{4,0,602},{8,0,211},{4,10,95},{7,10,416},{139,10,830},{7,10,731},{13,10,20
> -},{143,10,11},{6,0,1068},{135,0,1872},{4,0,13},{5,0,567},{7,0,1498},{9,0,124},{
> -
> 11,0,521},{12,0,405},{135,11,1023},{135,0,1006},{132,0,735},{138,0,812},{4,0,17
> 0
> -},{135,0,323},{6,11,137},{9,11,75},{9,11,253},{10,11,194},{138,11,444},{5,0,304}
> -
> ,{7,0,1403},{5,10,864},{10,10,648},{11,10,671},{143,10,46},{135,11,1180},{133,1
> 0
> -
> ,928},{4,0,148},{133,0,742},{11,10,986},{140,10,682},{133,0,523},{135,11,1743},
> {
> -7,0,730},{18,0,144},{19,0,61},{8,10,44},{9,10,884},{10,10,580},{11,10,399},{11,
> -
> 10,894},{143,10,122},{5,11,760},{7,11,542},{8,11,135},{136,11,496},{136,0,981},
> {
> -
> 133,0,111},{10,0,132},{11,0,191},{11,0,358},{139,0,460},{7,11,319},{7,11,355},{7
> -,11,763},{10,11,389},{145,11,43},{134,0,890},{134,0,1420},{136,11,557},{133,10,
> -518},{133,0,444},{135,0,1787},{135,10,1852},{8,0,123},{15,0,6},{144,0,7},{6,0,
> -2041},{10,11,38},{139,11,784},{136,0,932},{5,0,937},{135,0,100},{6,0,995},{4,11,
> -58},{5,11,286},{6,11,319},{7,11,402},{7,11,1254},{7,11,1903},{8,11,356},{140,11,
> -408},{4,11,389},{9,11,181},{9,11,255},{10,11,8},{10,11,29},{10,11,816},{11,11,
> -311},{11,11,561},{12,11,67},{141,11,181},{138,0,255},{5,0,138},{4,10,934},{136,
> -10,610},{4,0,965},{10,0,863},{138,0,898},{10,10,804},{138,10,832},{12,0,631},{8,
> -
> 10,96},{9,10,36},{10,10,607},{11,10,423},{11,10,442},{12,10,309},{14,10,199},{1
> 5
> -,10,90},{145,10,110},{134,0,1394},{4,0,652},{8,0,320},{22,0,6},{22,0,16},{9,10,
> -13},{9,10,398},{9,10,727},{10,10,75},{10,10,184},{10,10,230},{10,10,564},{10,10,
> -
> 569},{11,10,973},{12,10,70},{12,10,189},{13,10,57},{141,10,257},{6,0,897},{134,
> 0
> -
> ,1333},{4,0,692},{133,0,321},{133,11,373},{135,0,922},{5,0,619},{133,0,698},{13
> 7
> -
> ,10,631},{5,10,345},{135,10,1016},{9,0,957},{9,0,1018},{12,0,828},{12,0,844},{12
> -,0,897},{12,0,901},{12,0,943},{15,0,180},{18,0,197},{18,0,200},{18,0,213},{18,0,
> -
> 214},{146,0,226},{5,0,917},{134,0,1659},{135,0,1100},{134,0,1173},{134,0,1930},
> {
> -5,0,251},{5,0,956},{8,0,268},{9,0,214},{146,0,142},{133,10,673},{137,10,850},{4,
> -10,287},{133,10,1018},{132,11,672},{5,0,346},{5,0,711},{8,0,390},{11,11,752},{
> -
> 139,11,885},{5,10,34},{10,10,724},{12,10,444},{13,10,354},{18,10,32},{23,10,24},
> -{23,10,31},{152,10,5},{4,11,710},{134,11,606},{134,0,744},{134,10,382},{133,11,
> -
> 145},{4,10,329},{7,11,884},{140,11,124},{4,11,467},{5,11,405},{134,11,544},{9,1
> 0
> -
> ,846},{138,10,827},{133,0,624},{9,11,372},{15,11,2},{19,11,10},{147,11,18},{4,11
> -
> ,387},{135,11,1288},{5,0,783},{7,0,1998},{135,0,2047},{132,10,906},{136,10,366},
> -{135,11,550},{4,10,123},{4,10,649},{5,10,605},{7,10,1509},{136,10,36},{134,0,
> -1125},{132,0,594},{133,10,767},{135,11,1227},{136,11,467},{4,11,576},{135,11,
> -1263},{4,0,268},{7,0,1534},{135,11,1534},{4,10,273},{5,10,658},{5,11,919},{5,10,
> -
> 995},{134,11,1673},{133,0,563},{134,10,72},{135,10,1345},{4,11,82},{5,11,333},{
> 5
> -
> ,11,904},{6,11,207},{7,11,325},{7,11,1726},{8,11,101},{10,11,778},{139,11,220},{
> -5,0,37},{6,0,39},{6,0,451},{7,0,218},{7,0,667},{7,0,1166},{7,0,1687},{8,0,662},{
> -
> 16,0,2},{133,10,589},{134,0,1332},{133,11,903},{134,0,508},{5,10,117},{6,10,514}
> -
> ,{6,10,541},{7,10,1164},{7,10,1436},{8,10,220},{8,10,648},{10,10,688},{11,10,56
> 0
> -
> },{140,11,147},{6,11,555},{135,11,485},{133,10,686},{7,0,453},{7,0,635},{7,0,796
> -},{8,0,331},{9,0,330},{9,0,865},{10,0,119},{10,0,235},{11,0,111},{11,0,129},{11,
> -
> 0,240},{12,0,31},{12,0,66},{12,0,222},{12,0,269},{12,0,599},{12,0,684},{12,0,689
> -
> },{12,0,691},{142,0,345},{135,0,1834},{4,11,705},{7,11,615},{138,11,251},{136,1
> 1
> -,345},{137,0,527},{6,0,98},{7,0,702},{135,0,991},{11,0,576},{14,0,74},{7,10,196}
> -
> ,{10,10,765},{11,10,347},{11,10,552},{11,10,790},{12,10,263},{13,10,246},{13,10,
> -
> 270},{13,10,395},{14,10,176},{14,10,190},{14,10,398},{14,10,412},{15,10,32},{15,
> -10,63},{16,10,88},{147,10,105},{134,11,90},{13,0,84},{141,0,122},{6,0,37},{7,0,
> -299},{7,0,1666},{8,0,195},{8,0,316},{9,0,178},{9,0,276},{9,0,339},{9,0,536},{10,
> -0,102},{10,0,362},{10,0,785},{11,0,55},{11,0,149},{11,0,773},{13,0,416},{13,0,
> -419},{14,0,38},{14,0,41},{142,0,210},{5,10,381},{135,10,1792},{7,11,813},{12,11,
> -
> 497},{141,11,56},{7,10,616},{138,10,413},{133,0,645},{6,11,125},{135,11,1277},{
> -132,0,290},{6,0,70},{7,0,1292},{10,0,762},{139,0,288},{6,10,120},{7,10,1188},{7,
> -
> 10,1710},{8,10,286},{9,10,667},{11,10,592},{139,10,730},{135,11,1784},{7,0,131
> 5}
> -,{135,11,1315},{134,0,1955},{135,10,1146},{7,0,131},{7,0,422},{8,0,210},{140,0,
> -
> 573},{4,10,352},{135,10,687},{139,0,797},{143,0,38},{14,0,179},{15,0,151},{150,
> 0
> -,11},{7,0,488},{4,10,192},{5,10,49},{6,10,200},{6,10,293},{134,10,1696},{132,0,
> -
> 936},{135,11,703},{6,11,160},{7,11,1106},{9,11,770},{10,11,618},{11,11,112},{14
> 0
> -
> ,11,413},{5,0,453},{134,0,441},{135,0,595},{132,10,650},{132,10,147},{6,0,991},{
> -6,0,1182},{12,11,271},{145,11,109},{133,10,934},{140,11,221},{132,0,653},{7,0,
> -505},{135,0,523},{134,0,903},{135,11,479},{7,11,304},{9,11,646},{9,11,862},{10,
> -
> 11,262},{11,11,696},{12,11,208},{15,11,79},{147,11,108},{146,0,80},{135,11,981},
> -
> {142,0,432},{132,0,314},{137,11,152},{7,0,1368},{8,0,232},{8,0,361},{10,0,682},{
> -
> 138,0,742},{135,11,1586},{9,0,534},{4,11,434},{11,11,663},{12,11,210},{13,11,16
> 6
> -
> },{13,11,310},{14,11,373},{147,11,43},{7,11,1091},{135,11,1765},{6,11,550},{135,
> -11,652},{137,0,27},{142,0,12},{4,10,637},{5,11,553},{7,11,766},{138,11,824},{7,
> -
> 11,737},{8,11,298},{136,11,452},{7,0,736},{139,0,264},{134,0,1657},{133,11,292},
> -{138,11,135},{6,0,844},{134,0,1117},{135,0,127},{9,10,867},{138,10,837},{6,0,
> -
> 1184},{134,0,1208},{134,0,1294},{136,0,364},{6,0,1415},{7,0,1334},{11,0,125},{6,
> -10,170},{7,11,393},{8,10,395},{8,10,487},{10,11,603},{11,11,206},{141,10,147},{
> -137,11,748},{4,11,912},{137,11,232},{4,10,535},{136,10,618},{137,0,792},{7,11,
> -1973},{136,11,716},{135,11,98},{5,0,909},{9,0,849},{138,0,805},{4,0,630},{132,0,
> -699},{5,11,733},{14,11,103},{150,10,23},{12,11,158},{18,11,8},{19,11,62},{20,11,
> -
> 6},{22,11,4},{23,11,2},{151,11,9},{132,0,968},{132,10,778},{132,10,46},{5,10,811
> -},{6,10,1679},{6,10,1714},{135,10,2032},{6,0,1446},{7,10,1458},{9,10,407},{139,
> -10,15},{7,0,206},{7,0,397},{7,0,621},{7,0,640},{8,0,124},{8,0,619},{9,0,305},{9,
> -0,643},{10,0,264},{10,0,628},{11,0,40},{12,0,349},{13,0,134},{13,0,295},{14,0,
> -
> 155},{15,0,120},{18,0,105},{6,10,34},{7,10,1089},{8,10,708},{8,10,721},{9,10,363
> -},{148,10,98},{4,0,262},{5,0,641},{135,0,342},{137,11,72},{4,0,99},{6,0,250},{6,
> -0,346},{8,0,127},{138,0,81},{132,0,915},{5,0,75},{9,0,517},{10,0,470},{12,0,155}
> -
> ,{141,0,224},{132,10,462},{11,11,600},{11,11,670},{141,11,245},{142,0,83},{5,10,
> -73},{6,10,23},{134,10,338},{6,0,1031},{139,11,923},{7,11,164},{7,11,1571},{9,11,
> -107},{140,11,225},{134,0,1470},{133,0,954},{6,0,304},{8,0,418},{10,0,345},{11,0,
> -
> 341},{139,0,675},{9,0,410},{139,0,425},{4,11,27},{5,11,484},{5,11,510},{6,11,434
> -},{7,11,1000},{7,11,1098},{8,11,2},{136,11,200},{134,0,734},{140,11,257},{7,10,
> -
> 725},{8,10,498},{139,10,268},{134,0,1822},{135,0,1798},{135,10,773},{132,11,46
> 0}
> -
> ,{4,11,932},{133,11,891},{134,0,14},{132,10,583},{7,10,1462},{8,11,625},{139,10,
> -659},{5,0,113},{6,0,243},{6,0,1708},{7,0,1865},{11,0,161},{16,0,37},{17,0,99},{
> -133,10,220},{134,11,76},{5,11,461},{135,11,1925},{140,0,69},{8,11,92},{137,11,
> -
> 221},{139,10,803},{132,10,544},{4,0,274},{134,0,922},{132,0,541},{5,0,627},{6,1
> 0
> -
> ,437},{6,10,564},{11,10,181},{141,10,183},{135,10,1192},{7,0,166},{132,11,763},
> {
> -
> 133,11,253},{134,0,849},{9,11,73},{10,11,110},{14,11,185},{145,11,119},{5,11,21
> 2
> -},{12,11,35},{141,11,382},{133,0,717},{137,0,304},{136,0,600},{133,0,654},{6,0,
> -273},{10,0,188},{13,0,377},{146,0,77},{4,10,790},{5,10,273},{134,10,394},{132,0,
> -543},{135,0,410},{11,0,98},{11,0,524},{141,0,87},{132,0,941},{135,11,1175},{4,0,
> -250},{7,0,1612},{11,0,186},{12,0,133},{6,10,127},{7,10,1511},{8,10,613},{12,10,
> -
> 495},{12,10,586},{12,10,660},{12,10,668},{14,10,385},{15,10,118},{17,10,20},{14
> 6
> -,10,98},{6,0,1785},{133,11,816},{134,0,1339},{7,0,961},{7,0,1085},{7,0,1727},{8,
> -
> 0,462},{6,10,230},{135,11,1727},{9,0,636},{135,10,1954},{132,0,780},{5,11,869},
> {
> -
> 5,11,968},{6,11,1626},{8,11,734},{136,11,784},{4,11,542},{6,11,1716},{6,11,1727}
> -,{7,11,1082},{7,11,1545},{8,11,56},{8,11,118},{8,11,412},{8,11,564},{9,11,888},{
> -
> 9,11,908},{10,11,50},{10,11,423},{11,11,685},{11,11,697},{11,11,933},{12,11,299}
> -
> ,{13,11,126},{13,11,136},{13,11,170},{141,11,190},{134,11,226},{4,11,232},{9,11,
> -
> 202},{10,11,474},{140,11,433},{137,11,500},{5,0,529},{136,10,68},{132,10,654},{
> 4
> -,10,156},{7,10,998},{7,10,1045},{7,10,1860},{9,10,48},{9,10,692},{11,10,419},{
> -139,10,602},{7,0,1276},{8,0,474},{9,0,652},{6,11,108},{7,11,1003},{7,11,1181},{
> -
> 136,11,343},{7,11,1264},{7,11,1678},{11,11,945},{12,11,341},{12,11,471},{140,1
> 1,
> -569},{134,11,1712},{5,0,948},{12,0,468},{19,0,96},{148,0,24},{4,11,133},{7,11,
> -
> 711},{7,11,1298},{7,11,1585},{135,11,1929},{6,0,753},{140,0,657},{139,0,941},{6,
> -
> 11,99},{7,11,1808},{145,11,57},{6,11,574},{7,11,428},{7,11,1250},{10,11,669},{1
> 1
> -
> ,11,485},{11,11,840},{12,11,300},{142,11,250},{4,0,532},{5,0,706},{135,0,662},{5
> -
> ,0,837},{6,0,1651},{139,0,985},{7,0,1861},{9,10,197},{10,10,300},{12,10,473},{13
> -
> ,10,90},{141,10,405},{137,11,252},{6,11,323},{135,11,1564},{4,0,330},{4,0,863},{
> -
> 7,0,933},{7,0,2012},{8,0,292},{7,11,461},{8,11,775},{138,11,435},{132,10,606},{4
> -
> ,11,655},{7,11,850},{17,11,75},{146,11,137},{135,0,767},{7,10,1978},{136,10,676}
> -,{132,0,641},{135,11,1559},{134,0,1233},{137,0,242},{17,0,114},{4,10,361},{133,
> -
> 10,315},{137,0,883},{132,10,461},{138,0,274},{134,0,2008},{134,0,1794},{4,0,70
> 3}
> -,{135,0,207},{12,0,285},{132,10,472},{132,0,571},{5,0,873},{5,0,960},{8,0,823},{
> -
> 9,0,881},{136,11,577},{7,0,617},{10,0,498},{11,0,501},{12,0,16},{140,0,150},{138
> -
> ,10,747},{132,0,431},{133,10,155},{11,0,283},{11,0,567},{7,10,163},{8,10,319},{9
> -
> ,10,402},{10,10,24},{10,10,681},{11,10,200},{12,10,253},{12,10,410},{142,10,219}
> -,{4,11,413},{5,11,677},{8,11,432},{140,11,280},{9,0,401},{5,10,475},{7,10,1780},
> -
> {11,10,297},{11,10,558},{14,10,322},{147,10,76},{6,0,781},{9,0,134},{10,0,2},{10
> -,0,27},{10,0,333},{11,0,722},{143,0,1},{5,0,33},{6,0,470},{139,0,424},{135,0,
> -
> 2006},{12,0,783},{135,10,1956},{136,0,274},{135,0,1882},{132,0,794},{135,0,184
> 8}
> -,{5,10,944},{134,10,1769},{6,0,47},{7,0,90},{7,0,664},{7,0,830},{7,0,1380},{7,0,
> -
> 2025},{8,0,448},{136,0,828},{132,10,144},{134,0,1199},{4,11,395},{139,11,762},{
> -
> 135,11,1504},{9,0,417},{137,0,493},{9,11,174},{10,11,164},{11,11,440},{11,11,84
> 1
> -
> },{143,11,98},{134,11,426},{139,11,1002},{134,0,295},{134,0,816},{6,10,247},{13
> 7
> -
> ,10,555},{133,0,1019},{4,0,620},{5,11,476},{10,10,280},{138,10,797},{139,0,464},
> -
> {5,11,76},{6,11,458},{6,11,497},{7,11,764},{7,11,868},{9,11,658},{10,11,594},{11
> -
> ,11,173},{11,11,566},{12,11,20},{12,11,338},{141,11,200},{134,0,208},{4,11,526},
> -
> {7,11,1029},{135,11,1054},{132,11,636},{6,11,233},{7,11,660},{7,11,1124},{17,11,
> -31},{19,11,22},{151,11,14},{10,0,442},{133,10,428},{10,0,930},{140,0,778},{6,0,
> -68},{7,0,448},{7,0,1629},{7,0,1769},{7,0,1813},{8,0,442},{8,0,516},{9,0,710},{10
> -
> ,0,282},{10,0,722},{7,10,1717},{138,10,546},{134,0,1128},{11,0,844},{12,0,104},{
> -140,0,625},{4,11,432},{135,11,824},{138,10,189},{133,0,787},{133,10,99},{4,11,
> -279},{7,11,301},{137,11,362},{8,0,491},{4,10,397},{136,10,555},{4,11,178},{133,
> -
> 11,399},{134,0,711},{144,0,9},{4,0,403},{5,0,441},{7,0,450},{10,0,840},{11,0,101
> -
> },{12,0,193},{141,0,430},{135,11,1246},{12,10,398},{20,10,39},{21,10,11},{150,1
> 0
> -
> ,41},{4,10,485},{7,10,353},{135,10,1523},{6,10,366},{7,10,1384},{7,10,1601},{13
> 5
> -
> ,11,1912},{7,0,396},{10,0,160},{135,11,396},{137,10,282},{134,11,1692},{4,10,15
> 7
> -},{5,10,471},{6,11,202},{10,11,448},{11,11,208},{12,11,360},{17,11,117},{17,11,
> -
> 118},{18,11,27},{148,11,67},{133,0,679},{137,0,326},{136,10,116},{7,11,872},{10,
> -
> 11,516},{139,11,167},{132,11,224},{5,11,546},{7,11,35},{8,11,11},{8,11,12},{9,11
> -,315},{9,11,533},{10,11,802},{11,11,166},{12,11,525},{142,11,243},{7,0,1128},{
> -135,11,1920},{5,11,241},{8,11,242},{9,11,451},{10,11,667},{11,11,598},{140,11,
> -429},{6,0,737},{5,10,160},{7,10,363},{7,10,589},{10,10,170},{141,10,55},{135,0,
> -
> 1796},{142,11,254},{4,0,574},{7,0,350},{7,0,1024},{8,0,338},{9,0,677},{138,0,808
> -},{134,0,1096},{137,11,516},{7,0,405},{10,0,491},{4,10,108},{4,11,366},{139,10,
> -
> 498},{11,11,337},{142,11,303},{134,11,1736},{7,0,1081},{140,11,364},{7,10,1005
> },
> -{140,10,609},{7,0,1676},{4,10,895},{133,10,772},{135,0,2037},{6,0,1207},{11,11,
> -
> 916},{142,11,419},{14,11,140},{148,11,41},{6,11,331},{136,11,623},{9,0,944},{9,
> 0
> -,969},{9,0,1022},{12,0,913},{12,0,936},{15,0,177},{15,0,193},{4,10,926},{133,10,
> -983},{5,0,354},{135,11,506},{8,0,598},{9,0,664},{138,0,441},{4,11,640},{133,11,
> -
> 513},{137,0,297},{132,10,538},{6,10,294},{7,10,1267},{136,10,624},{7,0,1772},{7,
> -
> 11,1888},{8,11,289},{11,11,45},{12,11,278},{140,11,537},{135,10,1325},{138,0,7
> 51
> -},{141,0,37},{134,0,1828},{132,10,757},{132,11,394},{6,0,257},{135,0,1522},{4,0,
> -
> 582},{9,0,191},{135,11,1931},{7,11,574},{7,11,1719},{137,11,145},{132,11,658},{
> -
> 10,0,790},{132,11,369},{9,11,781},{10,11,144},{11,11,385},{13,11,161},{13,11,22
> 8
> -},{13,11,268},{148,11,107},{8,0,469},{10,0,47},{136,11,374},{6,0,306},{7,0,1140}
> -,{7,0,1340},{8,0,133},{138,0,449},{139,0,1011},{7,10,1875},{139,10,124},{4,11,
> -
> 344},{6,11,498},{139,11,323},{137,0,299},{132,0,837},{133,11,906},{5,0,329},{8,
> 0
> -,260},{138,0,10},{134,0,1320},{4,0,657},{146,0,158},{135,0,1191},{152,0,7},{6,0,
> -
> 1939},{8,0,974},{138,0,996},{135,0,1665},{11,11,126},{139,11,287},{143,0,8},{14,
> -11,149},{14,11,399},{143,11,57},{5,0,66},{7,0,1896},{136,0,288},{7,0,175},{10,0,
> -494},{5,10,150},{8,10,603},{9,10,593},{9,10,634},{10,10,173},{11,10,462},{11,10,
> -
> 515},{13,10,216},{13,10,288},{142,10,400},{134,0,1643},{136,11,21},{4,0,21},{5,
> 0
> -,91},{5,0,648},{5,0,750},{5,0,781},{6,0,54},{6,0,112},{6,0,402},{6,0,1732},{7,0,
> -315},{7,0,749},{7,0,1427},{7,0,1900},{9,0,78},{9,0,508},{10,0,611},{10,0,811},{
> -11,0,510},{11,0,728},{13,0,36},{14,0,39},{16,0,83},{17,0,124},{148,0,30},{4,0,
> -
> 668},{136,0,570},{10,0,322},{10,0,719},{139,0,407},{135,11,1381},{136,11,193},{
> -
> 12,10,108},{141,10,291},{132,11,616},{136,11,692},{8,0,125},{8,0,369},{8,0,524},
> -{10,0,486},{11,0,13},{11,0,381},{11,0,736},{11,0,766},{11,0,845},{13,0,114},{13,
> -
> 0,292},{142,0,47},{134,0,1247},{6,0,1684},{6,0,1731},{7,0,356},{8,0,54},{8,0,221
> -},{9,0,225},{9,0,356},{10,0,77},{10,0,446},{10,0,731},{12,0,404},{141,0,491},{
> -
> 135,10,1777},{4,11,305},{4,10,493},{144,10,55},{4,0,951},{6,0,1809},{6,0,1849},{
> -8,0,846},{8,0,866},{8,0,899},{10,0,896},{12,0,694},{142,0,468},{5,11,214},{7,11,
> -
> 603},{8,11,611},{9,11,686},{10,11,88},{11,11,459},{11,11,496},{12,11,463},{12,1
> 1
> -,590},{13,11,0},{142,11,214},{132,0,411},{4,0,80},{133,0,44},{140,11,74},{143,0,
> -31},{7,0,669},{6,10,568},{7,10,1804},{8,10,362},{8,10,410},{8,10,830},{9,10,514}
> -
> ,{11,10,649},{142,10,157},{7,0,673},{134,11,1703},{132,10,625},{134,0,1303},{5,
> 0
> -,299},{135,0,1083},{138,0,704},{6,0,275},{7,0,408},{6,10,158},{7,10,129},{7,10,
> -
> 181},{8,10,276},{8,10,377},{10,10,523},{11,10,816},{12,10,455},{13,10,303},{142,
> -10,135},{4,0,219},{7,0,367},{7,0,1713},{7,0,1761},{9,0,86},{9,0,537},{10,0,165},
> -{12,0,219},{140,0,561},{8,0,216},{4,10,1},{4,11,737},{6,11,317},{7,10,1143},{7,
> -
> 10,1463},{9,10,207},{9,10,390},{9,10,467},{10,11,98},{11,11,294},{11,10,836},{1
> 2
> -
> ,11,60},{12,11,437},{13,11,64},{13,11,380},{142,11,430},{6,11,1758},{8,11,520},{
> -
> 9,11,345},{9,11,403},{142,11,350},{5,11,47},{10,11,242},{138,11,579},{5,11,139},
> -{7,11,1168},{138,11,539},{135,0,1319},{4,10,295},{4,10,723},{5,10,895},{7,10,
> -1031},{8,10,199},{8,10,340},{9,10,153},{9,10,215},{10,10,21},{10,10,59},{10,10,
> -
> 80},{10,10,224},{10,10,838},{11,10,229},{11,10,652},{12,10,192},{13,10,146},{14
> 2
> -
> ,10,91},{140,0,428},{137,10,51},{133,0,514},{5,10,309},{140,10,211},{6,0,1010},{
> -5,10,125},{8,10,77},{138,10,15},{4,0,55},{5,0,301},{6,0,571},{142,0,49},{146,0,
> -102},{136,11,370},{4,11,107},{7,11,613},{8,11,358},{8,11,439},{8,11,504},{9,11,
> -
> 501},{10,11,383},{139,11,477},{132,11,229},{133,0,364},{133,10,439},{4,11,903},
> {
> -
> 135,11,1816},{11,0,379},{140,10,76},{4,0,76},{4,0,971},{7,0,1550},{9,0,306},{9,0
> -
> ,430},{9,0,663},{10,0,683},{10,0,921},{11,0,427},{11,0,753},{12,0,334},{12,0,442
> -},{14,0,258},{14,0,366},{143,0,131},{137,0,52},{4,11,47},{6,11,373},{7,11,452},{
> -7,11,543},{7,11,1714},{7,11,1856},{9,11,6},{11,11,257},{139,11,391},{4,10,8},{7,
> -
> 10,1152},{7,10,1153},{7,10,1715},{9,10,374},{10,10,478},{139,10,648},{4,11,785},
> -
> {133,11,368},{135,10,1099},{135,11,860},{5,11,980},{134,11,1754},{134,0,1258},
> {6
> -,0,1058},{6,0,1359},{7,11,536},{7,11,1331},{136,11,143},{4,0,656},{135,0,779},{
> -
> 136,10,87},{5,11,19},{6,11,533},{146,11,126},{7,0,144},{138,10,438},{5,11,395},{
> -
> 5,11,951},{134,11,1776},{135,0,1373},{7,0,554},{7,0,605},{141,0,10},{4,10,69},{5
> -,10,122},{9,10,656},{138,10,464},{5,10,849},{134,10,1633},{5,0,838},{5,0,841},{
> -134,0,1649},{133,0,1012},{139,10,499},{7,10,476},{7,10,1592},{138,10,87},{6,0,
> -251},{7,0,365},{7,0,1357},{7,0,1497},{8,0,154},{141,0,281},{132,11,441},{132,11,
> -
> 695},{7,11,497},{9,11,387},{147,11,81},{133,0,340},{14,10,283},{142,11,283},{13
> 4
> -
> ,0,810},{135,11,1894},{139,0,495},{5,11,284},{6,11,49},{6,11,350},{7,11,1},{7,11
> -,377},{7,11,1693},{8,11,18},{8,11,678},{9,11,161},{9,11,585},{9,11,671},{9,11,
> -
> 839},{11,11,912},{141,11,427},{5,10,859},{7,10,1160},{8,10,107},{9,10,291},{9,1
> 0
> -,439},{10,10,663},{11,10,609},{140,10,197},{8,0,261},{9,0,144},{9,0,466},{10,0,
> -
> 370},{12,0,470},{13,0,144},{142,0,348},{137,0,897},{6,0,248},{9,0,546},{10,0,535
> -},{11,0,681},{141,0,135},{4,0,358},{135,0,1496},{134,0,567},{136,0,445},{4,10,
> -
> 117},{6,10,372},{7,10,1905},{142,10,323},{4,10,722},{139,10,471},{6,0,697},{134,
> -
> 0,996},{7,11,2007},{9,11,101},{9,11,450},{10,11,66},{10,11,842},{11,11,536},{14
> 0
> -
> ,11,587},{132,0,577},{134,0,1336},{9,10,5},{12,10,216},{12,10,294},{12,10,298},{
> -12,10,400},{12,10,518},{13,10,229},{143,10,139},{6,0,174},{138,0,917},{134,10,
> -1774},{5,10,12},{7,10,375},{9,10,88},{9,10,438},{11,11,62},{139,10,270},{134,11,
> -
> 1766},{6,11,0},{7,11,84},{7,10,816},{7,10,1241},{9,10,283},{9,10,520},{10,10,213
> -
> },{10,10,307},{10,10,463},{10,10,671},{10,10,746},{11,10,401},{11,10,794},{11,1
> 1
> -,895},{12,10,517},{17,11,11},{18,10,107},{147,10,115},{5,0,878},{133,0,972},{6,
> -
> 11,1665},{7,11,256},{7,11,1388},{138,11,499},{4,10,258},{136,10,639},{4,11,22},
> {
> -5,11,10},{6,10,22},{7,11,848},{7,10,903},{7,10,1963},{8,11,97},{138,10,577},{5,
> -
> 10,681},{136,10,782},{133,11,481},{132,0,351},{4,10,664},{5,10,804},{139,10,10
> 13
> -},{6,11,134},{7,11,437},{7,11,959},{9,11,37},{14,11,285},{14,11,371},{144,11,60}
> -,{7,11,486},{8,11,155},{11,11,93},{140,11,164},{132,0,286},{7,0,438},{7,0,627},{
> -7,0,1516},{8,0,40},{9,0,56},{9,0,294},{10,0,30},{11,0,969},{11,0,995},{146,0,148
> -
> },{5,11,591},{135,11,337},{134,0,1950},{133,10,32},{138,11,500},{5,11,380},{5,1
> 1
> -,650},{136,11,310},{4,11,364},{7,11,1156},{7,11,1187},{137,11,409},{4,0,738},{
> -
> 134,11,482},{4,11,781},{6,11,487},{7,11,926},{8,11,263},{139,11,500},{135,11,41
> 8
> -},{6,0,2047},{10,0,969},{4,10,289},{7,10,629},{7,10,1698},{7,10,1711},{140,10,
> -
> 215},{6,10,450},{136,10,109},{134,0,818},{136,10,705},{133,0,866},{4,11,94},{13
> 5
> -,11,1265},{132,11,417},{134,0,1467},{135,10,1238},{4,0,972},{6,0,1851},{134,0,
> -
> 1857},{134,0,355},{133,0,116},{132,0,457},{135,11,1411},{4,11,408},{4,11,741},{
> -
> 135,11,500},{134,10,26},{142,11,137},{5,0,527},{6,0,189},{7,0,859},{136,0,267},{
> -
> 11,0,104},{11,0,554},{15,0,60},{143,0,125},{134,0,1613},{4,10,414},{5,10,467},{9
> -
> ,10,654},{10,10,451},{12,10,59},{141,10,375},{135,10,17},{134,0,116},{135,11,54
> 1
> -},{135,10,955},{6,11,73},{135,11,177},{133,11,576},{134,0,886},{133,0,487},{4,0,
> -86},{5,0,667},{5,0,753},{6,0,316},{6,0,455},{135,0,946},{142,11,231},{150,0,45},
> -
> {134,0,863},{134,0,1953},{6,10,280},{10,10,502},{11,10,344},{140,10,38},{4,0,79}
> -,{7,0,1773},{10,0,450},{11,0,589},{13,0,332},{13,0,493},{14,0,183},{14,0,334},{
> -14,0,362},{14,0,368},{14,0,376},{14,0,379},{19,0,90},{19,0,103},{19,0,127},{148,
> -0,90},{5,10,45},{7,10,1161},{11,10,448},{11,10,880},{13,10,139},{13,10,407},{15,
> -10,16},{17,10,95},{18,10,66},{18,10,88},{18,10,123},{149,10,7},{136,10,777},{4,
> -
> 10,410},{135,10,521},{135,10,1778},{135,11,538},{142,0,381},{133,11,413},{134,
> 0,
> -1142},{6,0,1189},{136,11,495},{5,0,663},{6,0,1962},{134,0,2003},{7,11,54},{8,11,
> -
> 312},{10,11,191},{10,11,614},{140,11,567},{132,10,436},{133,0,846},{10,0,528},{
> -
> 11,0,504},{7,10,1587},{135,10,1707},{5,0,378},{8,0,465},{9,0,286},{10,0,185},{10
> -,0,562},{10,0,635},{11,0,31},{11,0,393},{13,0,312},{18,0,65},{18,0,96},{147,0,89
> -},{7,0,899},{14,0,325},{6,11,468},{7,11,567},{7,11,1478},{8,11,530},{142,11,290}
> -,{7,0,1880},{9,0,680},{139,0,798},{134,0,1770},{132,0,648},{150,11,35},{5,0,945}
> -,{6,0,1656},{6,0,1787},{7,0,167},{8,0,824},{9,0,391},{10,0,375},{139,0,185},{6,
> -
> 11,484},{135,11,822},{134,0,2046},{7,0,1645},{8,0,352},{137,0,249},{132,0,152},
> {
> -6,0,611},{135,0,1733},{6,11,1724},{135,11,2022},{133,0,1006},{141,11,96},{5,0,
> -
> 420},{135,0,1449},{146,11,149},{135,0,832},{135,10,663},{133,0,351},{5,0,40},{7,
> -0,598},{7,0,1638},{8,0,78},{9,0,166},{9,0,640},{9,0,685},{9,0,773},{11,0,215},{
> -13,0,65},{14,0,172},{14,0,317},{145,0,6},{8,0,60},{9,0,343},{139,0,769},{134,0,
> -
> 1354},{132,0,724},{137,0,745},{132,11,474},{7,0,1951},{8,0,765},{8,0,772},{140,
> 0
> -,671},{7,0,108},{8,0,219},{8,0,388},{9,0,775},{11,0,275},{140,0,464},{137,0,639}
> -,{135,10,503},{133,11,366},{5,0,15},{6,0,56},{7,0,1758},{8,0,500},{9,0,730},{11,
> -
> 0,331},{13,0,150},{14,0,282},{5,11,305},{9,11,560},{141,11,208},{4,10,113},{5,10
> -,163},{5,10,735},{7,10,1009},{9,10,9},{9,10,771},{12,10,90},{13,10,138},{13,10,
> -
> 410},{143,10,128},{4,10,324},{138,10,104},{135,11,466},{142,11,27},{134,0,1886
> },
> -{5,0,205},{6,0,438},{9,0,711},{4,11,480},{6,11,167},{6,11,302},{6,11,1642},{7,11
> -
> ,130},{7,11,656},{7,11,837},{7,11,1547},{7,11,1657},{8,11,429},{9,11,228},{10,11
> -
> ,643},{13,11,289},{13,11,343},{147,11,101},{134,0,865},{6,0,2025},{136,0,965},{
> 7
> -,11,278},{10,11,739},{11,11,708},{141,11,348},{133,0,534},{135,11,1922},{137,0,
> -691},{4,10,935},{133,10,823},{6,0,443},{9,0,237},{9,0,571},{9,0,695},{10,0,139},
> -
> {11,0,715},{12,0,417},{141,0,421},{5,10,269},{7,10,434},{7,10,891},{8,10,339},{9
> -,10,702},{11,10,594},{11,10,718},{145,10,100},{6,0,1555},{7,0,878},{9,10,485},{
> -
> 141,10,264},{134,10,1713},{7,10,1810},{11,10,866},{12,10,103},{141,10,495},{13
> 5,
> -10,900},{6,0,1410},{9,11,316},{139,11,256},{4,0,995},{135,0,1033},{132,0,578},{
> -
> 10,0,881},{12,0,740},{12,0,743},{140,0,759},{132,0,822},{133,0,923},{142,10,143}
> -
> ,{135,11,1696},{6,11,363},{7,11,1955},{136,11,725},{132,0,924},{133,0,665},{135,
> -
> 10,2029},{135,0,1901},{4,0,265},{6,0,1092},{6,0,1417},{7,0,807},{135,0,950},{5,0
> -,93},{12,0,267},{141,0,498},{135,0,1451},{5,11,813},{135,11,2046},{5,10,625},{
> -
> 135,10,1617},{135,0,747},{6,0,788},{137,0,828},{7,0,184},{11,0,307},{11,0,400},{
> -15,0,130},{5,11,712},{7,11,1855},{8,10,425},{8,10,693},{9,10,720},{10,10,380},{
> -
> 10,10,638},{11,11,17},{11,10,473},{12,10,61},{13,11,321},{144,11,67},{135,0,198}
> -,{6,11,320},{7,11,781},{7,11,1921},{9,11,55},{10,11,186},{10,11,273},{10,11,664}
> -
> ,{10,11,801},{11,11,996},{11,11,997},{13,11,157},{142,11,170},{136,11,271},{135,
> -0,994},{7,11,103},{7,11,863},{11,11,184},{14,11,299},{145,11,62},{11,10,551},{
> -142,10,159},{5,0,233},{5,0,320},{6,0,140},{8,0,295},{8,0,615},{136,11,615},{133,
> -0,978},{4,0,905},{6,0,1701},{137,0,843},{132,10,168},{4,0,974},{8,0,850},{12,0,
> -709},{12,0,768},{140,0,786},{135,10,91},{152,0,6},{138,10,532},{135,10,1884},{
> -
> 132,0,509},{6,0,1307},{135,0,273},{5,11,77},{7,11,1455},{10,11,843},{19,11,73},{
> -
> 150,11,5},{132,11,458},{135,11,1420},{6,11,109},{138,11,382},{6,0,201},{6,11,33
> 0
> -},{7,10,70},{7,11,1084},{10,10,240},{11,11,142},{147,10,93},{7,0,1041},{140,11,
> -
> 328},{133,11,354},{134,0,1040},{133,0,693},{134,0,774},{139,0,234},{132,0,336},
> {
> -
> 7,0,1399},{139,10,392},{20,0,22},{148,11,22},{5,0,802},{7,0,2021},{136,0,805},{5
> -
> ,0,167},{5,0,899},{6,0,410},{137,0,777},{137,0,789},{134,0,1705},{7,10,655},{135
> -
> ,10,1844},{4,10,145},{6,10,176},{7,10,395},{137,10,562},{132,10,501},{135,0,10},
> -{5,0,11},{6,0,117},{6,0,485},{7,0,1133},{9,0,582},{9,0,594},{10,0,82},{11,0,21},
> -{11,0,818},{12,0,535},{13,0,86},{20,0,91},{23,0,13},{134,10,509},{4,0,264},{7,0,
> -
> 1067},{8,0,204},{8,0,385},{139,0,953},{139,11,737},{138,0,56},{134,0,1917},{133,
> -
> 0,470},{10,11,657},{14,11,297},{142,11,361},{135,11,412},{7,0,1198},{7,11,1198},
> -
> {8,11,556},{14,11,123},{14,11,192},{143,11,27},{7,11,1985},{14,11,146},{15,11,4
> 2
> -},{16,11,23},{17,11,86},{146,11,17},{11,0,1015},{136,11,122},{4,10,114},{9,10,
> -492},{13,10,462},{142,10,215},{4,10,77},{5,10,361},{6,10,139},{6,10,401},{6,10,
> -404},{7,10,413},{7,10,715},{7,10,1716},{11,10,279},{12,10,179},{12,10,258},{13,
> -
> 10,244},{142,10,358},{134,10,1717},{7,10,1061},{8,10,82},{11,10,250},{12,10,42
> 0}
> -,{141,10,184},{133,0,715},{135,10,724},{9,0,919},{9,0,922},{9,0,927},{9,0,933},{
> -
> 9,0,962},{9,0,1000},{9,0,1002},{9,0,1021},{12,0,890},{12,0,907},{12,0,930},{15,0
> -
> ,207},{15,0,228},{15,0,238},{149,0,61},{8,0,794},{9,0,400},{10,0,298},{142,0,228
> -
> },{5,11,430},{5,11,932},{6,11,131},{7,11,417},{9,11,522},{11,11,314},{141,11,390
> -},{132,0,867},{8,0,724},{132,11,507},{137,11,261},{4,11,343},{133,11,511},{6,0,
> -190},{7,0,768},{135,0,1170},{6,10,513},{135,10,1052},{7,11,455},{138,11,591},{
> -
> 134,0,1066},{137,10,899},{14,0,67},{147,0,60},{4,0,948},{18,0,174},{146,0,176},{
> -135,0,1023},{7,10,1417},{12,10,382},{17,10,48},{152,10,12},{134,11,575},{132,0,
> -
> 764},{6,10,545},{7,10,565},{7,10,1669},{10,10,114},{11,10,642},{140,10,618},{6,
> 0
> -,137},{9,0,75},{9,0,253},{10,0,194},{138,0,444},{4,0,756},{133,10,5},{8,0,1008},
> -{135,10,192},{132,0,842},{11,0,643},{12,0,115},{136,10,763},{139,0,67},{133,10,
> -759},{4,0,821},{5,0,760},{7,0,542},{8,0,135},{8,0,496},{135,11,580},{7,10,370},{
> -7,10,1007},{7,10,1177},{135,10,1565},{135,10,1237},{140,0,736},{7,0,319},{7,0,
> -
> 355},{7,0,763},{10,0,389},{145,0,43},{8,11,333},{138,11,182},{4,10,87},{5,10,250
> -
> },{141,10,298},{138,0,786},{134,0,2044},{8,11,330},{140,11,477},{135,11,1338},{
> -
> 132,11,125},{134,0,1030},{134,0,1083},{132,11,721},{135,10,814},{7,11,776},{8,
> 11
> -,145},{147,11,56},{134,0,1226},{4,10,57},{7,10,1195},{7,10,1438},{7,10,1548},{7,
> -
> 10,1835},{7,10,1904},{9,10,757},{10,10,604},{139,10,519},{7,11,792},{8,11,147},
> {
> -10,11,821},{139,11,1021},{137,11,797},{4,0,58},{5,0,286},{6,0,319},{7,0,402},{7,
> -0,1254},{7,0,1903},{8,0,356},{140,0,408},{4,0,389},{4,0,815},{9,0,181},{9,0,255}
> -,{10,0,8},{10,0,29},{10,0,816},{11,0,311},{11,0,561},{12,0,67},{141,0,181},{7,11
> -
> ,1472},{135,11,1554},{7,11,1071},{7,11,1541},{7,11,1767},{7,11,1806},{7,11,199
> 9}
> -,{9,11,248},{10,11,400},{11,11,162},{11,11,178},{11,11,242},{12,11,605},{15,11,
> -26},{144,11,44},{5,11,168},{5,11,930},{8,11,74},{9,11,623},{12,11,500},{12,11,
> -579},{13,11,41},{143,11,93},{6,11,220},{7,11,1101},{141,11,105},{5,0,474},{7,0,
> -507},{4,10,209},{7,11,507},{135,10,902},{132,0,427},{6,0,413},{7,10,335},{7,10,
> -1437},{7,10,1668},{8,10,553},{8,10,652},{8,10,656},{9,10,558},{11,10,743},{149,
> -
> 10,18},{132,0,730},{6,11,19},{7,11,1413},{139,11,428},{133,0,373},{132,10,559},
> {
> -
> 7,11,96},{8,11,401},{137,11,896},{7,0,799},{7,0,1972},{5,10,1017},{138,10,511},{
> -
> 135,0,1793},{7,11,1961},{7,11,1965},{8,11,702},{136,11,750},{8,11,150},{8,11,73
> 7
> -},{140,11,366},{132,0,322},{133,10,709},{8,11,800},{9,11,148},{9,11,872},{9,11,
> -
> 890},{11,11,309},{11,11,1001},{13,11,267},{141,11,323},{134,10,1745},{7,0,290},
> {
> -
> 136,10,206},{7,0,1651},{145,0,89},{139,0,2},{132,0,672},{6,0,1860},{8,0,905},{10
> -,0,844},{10,0,846},{10,0,858},{12,0,699},{12,0,746},{140,0,772},{135,11,424},{
> -
> 133,11,547},{133,0,737},{5,11,490},{6,11,615},{6,11,620},{135,11,683},{6,0,746},
> -
> {134,0,1612},{132,10,776},{9,11,385},{149,11,17},{133,0,145},{135,10,1272},{7,0,
> -
> 884},{140,0,124},{4,0,387},{135,0,1288},{5,11,133},{136,10,406},{136,11,187},{6,
> -0,679},{8,11,8},{138,11,0},{135,0,550},{135,11,798},{136,11,685},{7,11,1086},{
> -145,11,46},{8,10,175},{10,10,168},{138,10,573},{135,0,1305},{4,0,576},{135,0,
> -
> 1263},{6,0,686},{134,0,1563},{134,0,607},{5,0,919},{134,0,1673},{148,0,37},{8,1
> 1
> -,774},{10,11,670},{140,11,51},{133,10,784},{139,10,882},{4,0,82},{5,0,333},{5,0,
> -
> 904},{6,0,207},{7,0,325},{7,0,1726},{8,0,101},{10,0,778},{139,0,220},{135,11,371
> -},{132,0,958},{133,0,903},{4,11,127},{5,11,350},{6,11,356},{8,11,426},{9,11,572}
> -,{10,11,247},{139,11,312},{140,0,147},{6,11,59},{7,11,885},{9,11,603},{141,11,
> -397},{10,0,367},{9,10,14},{9,10,441},{139,10,9},{11,10,966},{12,10,287},{13,10,
> -
> 342},{13,10,402},{15,10,110},{143,10,163},{134,0,690},{132,0,705},{9,0,651},{11,
> -0,971},{13,0,273},{7,10,1428},{7,10,1640},{7,10,1867},{9,10,169},{9,10,182},{9,
> -10,367},{9,10,478},{9,10,506},{9,10,551},{9,10,557},{9,10,648},{9,10,697},{9,10,
> -
> 705},{9,10,725},{9,10,787},{9,10,794},{10,10,198},{10,10,214},{10,10,267},{10,1
> 0
> -,275},{10,10,456},{10,10,551},{10,10,561},{10,10,613},{10,10,627},{10,10,668},{
> -10,10,675},{10,10,691},{10,10,695},{10,10,707},{10,10,715},{11,10,183},{11,10,
> -
> 201},{11,10,262},{11,10,352},{11,10,439},{11,10,493},{11,10,572},{11,10,591},{1
> 1
> -
> ,10,608},{11,10,611},{11,10,646},{11,10,674},{11,10,711},{11,10,751},{11,10,761}
> -
> ,{11,10,776},{11,10,785},{11,10,850},{11,10,853},{11,10,862},{11,10,865},{11,10,
> -
> 868},{11,10,875},{11,10,898},{11,10,902},{11,10,903},{11,10,910},{11,10,932},{1
> 1
> -
> ,10,942},{11,10,957},{11,10,967},{11,10,972},{12,10,148},{12,10,195},{12,10,220}
> -
> ,{12,10,237},{12,10,318},{12,10,339},{12,10,393},{12,10,445},{12,10,450},{12,10,
> -
> 474},{12,10,505},{12,10,509},{12,10,533},{12,10,591},{12,10,594},{12,10,597},{1
> 2
> -
> ,10,621},{12,10,633},{12,10,642},{13,10,59},{13,10,60},{13,10,145},{13,10,239},{
> -13,10,250},{13,10,329},{13,10,344},{13,10,365},{13,10,372},{13,10,387},{13,10,
> -
> 403},{13,10,414},{13,10,456},{13,10,470},{13,10,478},{13,10,483},{13,10,489},{1
> 4
> -
> ,10,55},{14,10,57},{14,10,81},{14,10,90},{14,10,148},{14,10,239},{14,10,266},{14
> -
> ,10,321},{14,10,326},{14,10,327},{14,10,330},{14,10,347},{14,10,355},{14,10,401}
> -,{14,10,404},{14,10,411},{14,10,414},{14,10,416},{14,10,420},{15,10,61},{15,10,
> -74},{15,10,87},{15,10,88},{15,10,94},{15,10,96},{15,10,116},{15,10,149},{15,10,
> -
> 154},{16,10,50},{16,10,63},{16,10,73},{17,10,2},{17,10,66},{17,10,92},{17,10,103
> -},{17,10,112},{17,10,120},{18,10,50},{18,10,54},{18,10,82},{18,10,86},{18,10,90}
> -
> ,{18,10,111},{18,10,115},{18,10,156},{19,10,40},{19,10,79},{20,10,78},{149,10,2
> 2
> -},{7,0,887},{5,10,161},{135,10,839},{142,11,98},{134,0,90},{138,11,356},{135,11,
> -441},{6,11,111},{7,11,4},{8,11,163},{8,11,776},{138,11,566},{134,0,908},{134,0,
> -1261},{7,0,813},{12,0,497},{141,0,56},{134,0,1235},{135,0,429},{135,11,1994},{
> -138,0,904},{6,0,125},{7,0,1277},{137,0,772},{151,0,12},{4,0,841},{5,0,386},{133,
> -
> 11,386},{5,11,297},{135,11,1038},{6,0,860},{6,0,1069},{135,11,309},{136,0,946},
> {
> -
> 135,10,1814},{141,11,418},{136,11,363},{10,0,768},{139,0,787},{22,11,30},{150,
> 11
> -,33},{6,0,160},{7,0,1106},{9,0,770},{11,0,112},{140,0,413},{11,11,216},{139,11,
> -
> 340},{136,10,139},{135,11,1390},{135,11,808},{132,11,280},{12,0,271},{17,0,109
> },
> -
> {7,10,643},{136,10,236},{140,11,54},{4,11,421},{133,11,548},{11,0,719},{12,0,36}
> -,{141,0,337},{7,0,581},{9,0,644},{137,0,699},{11,11,511},{13,11,394},{14,11,298}
> -,{14,11,318},{146,11,103},{7,0,304},{9,0,646},{9,0,862},{11,0,696},{12,0,208},{
> -
> 15,0,79},{147,0,108},{4,0,631},{7,0,1126},{135,0,1536},{135,11,1527},{8,0,880},{
> -10,0,869},{138,0,913},{7,0,1513},{5,10,54},{6,11,254},{9,11,109},{138,11,103},{
> -
> 135,0,981},{133,11,729},{132,10,744},{132,0,434},{134,0,550},{7,0,930},{10,0,47
> 6
> -
> },{13,0,452},{19,0,104},{6,11,1630},{10,10,402},{146,10,55},{5,0,553},{138,0,824
> -
> },{136,0,452},{8,0,151},{137,10,624},{132,10,572},{132,0,772},{133,11,671},{133,
> -
> 0,292},{138,0,135},{132,11,889},{140,11,207},{9,0,504},{6,10,43},{7,10,38},{8,10
> -
> ,248},{138,10,513},{6,0,1089},{135,11,1910},{4,11,627},{133,11,775},{135,0,783},
> -
> {133,10,766},{133,10,363},{7,0,387},{135,11,387},{7,0,393},{10,0,603},{11,0,206}
> -
> ,{7,11,202},{11,11,362},{11,11,948},{140,11,388},{6,11,507},{7,11,451},{8,11,38
> 9
> -},{12,11,490},{13,11,16},{13,11,215},{13,11,351},{18,11,132},{147,11,125},{4,0,
> -
> 912},{9,0,232},{135,11,841},{6,10,258},{140,10,409},{5,10,249},{148,10,82},{136,
> -
> 11,566},{6,0,977},{135,11,1214},{7,0,1973},{136,0,716},{135,0,98},{133,0,733},{
> 5
> -,11,912},{134,11,1695},{5,10,393},{6,10,378},{7,10,1981},{9,10,32},{9,10,591},{
> -
> 10,10,685},{10,10,741},{142,10,382},{133,10,788},{10,0,19},{11,0,911},{7,10,196
> 8
> -
> },{141,10,509},{5,0,668},{5,11,236},{6,11,572},{8,11,492},{11,11,618},{144,11,56
> -},{135,11,1789},{4,0,360},{5,0,635},{5,0,700},{5,10,58},{5,10,171},{5,10,683},{6
> -
> ,10,291},{6,10,566},{7,10,1650},{11,10,523},{12,10,273},{12,10,303},{15,10,39},{
> -143,10,111},{133,0,901},{134,10,589},{5,11,190},{136,11,318},{140,0,656},{7,0,
> -
> 726},{152,0,9},{4,10,917},{133,10,1005},{135,10,1598},{134,11,491},{4,10,919},{
> -
> 133,11,434},{137,0,72},{6,0,1269},{6,0,1566},{134,0,1621},{9,0,463},{10,0,595},{
> -
> 4,10,255},{5,10,302},{6,10,132},{7,10,128},{7,10,283},{7,10,1299},{10,10,52},{10
> -
> ,10,514},{11,10,925},{13,10,92},{142,10,309},{135,0,1454},{134,0,1287},{11,0,60
> 0
> -},{13,0,245},{137,10,173},{136,0,989},{7,0,164},{7,0,1571},{9,0,107},{140,0,225}
> -,{6,0,1061},{141,10,442},{4,0,27},{5,0,484},{5,0,510},{6,0,434},{7,0,1000},{7,0,
> -1098},{136,0,2},{7,11,85},{7,11,247},{8,11,585},{10,11,163},{138,11,316},{11,11,
> -
> 103},{142,11,0},{134,0,1127},{4,0,460},{134,0,852},{134,10,210},{4,0,932},{133,
> 0
> -
> ,891},{6,0,588},{147,11,83},{8,0,625},{4,10,284},{134,10,223},{134,0,76},{8,0,92
> -},{137,0,221},{4,11,124},{10,11,457},{11,11,121},{11,11,169},{11,11,422},{11,11,
> -
> 870},{12,11,214},{13,11,389},{14,11,187},{143,11,77},{9,11,618},{138,11,482},{4,
> -10,218},{7,10,526},{143,10,137},{13,0,9},{14,0,104},{14,0,311},{4,10,270},{5,10,
> -
> 192},{6,10,332},{135,10,1322},{140,10,661},{135,11,1193},{6,11,107},{7,11,638},
> {
> -7,11,1632},{137,11,396},{132,0,763},{4,0,622},{5,11,370},{134,11,1756},{133,0,
> -
> 253},{135,0,546},{9,0,73},{10,0,110},{14,0,185},{17,0,119},{133,11,204},{7,0,624
> -},{7,0,916},{10,0,256},{139,0,87},{7,10,379},{8,10,481},{137,10,377},{5,0,212},{
> -
> 12,0,35},{13,0,382},{5,11,970},{134,11,1706},{9,0,746},{5,10,1003},{134,10,149},
> -
> {10,0,150},{11,0,849},{13,0,330},{8,10,262},{9,10,627},{11,10,214},{11,10,404},{
> -
> 11,10,457},{11,10,780},{11,10,913},{13,10,401},{142,10,200},{134,0,1466},{135,
> 11
> -,3},{6,0,1299},{4,11,35},{5,11,121},{5,11,483},{5,11,685},{6,11,489},{7,11,1204}
> -
> ,{136,11,394},{135,10,742},{4,10,142},{136,10,304},{4,11,921},{133,11,1007},{13
> 4
> -
> ,0,1518},{6,0,1229},{135,0,1175},{133,0,816},{12,0,159},{4,10,471},{4,11,712},{5
> -
> ,10,51},{6,10,602},{7,10,925},{8,10,484},{138,10,195},{134,11,1629},{5,0,869},{5
> -,0,968},{6,0,1626},{8,0,734},{136,0,784},{4,0,542},{6,0,1716},{6,0,1727},{7,0,
> -1082},{7,0,1545},{8,0,56},{8,0,118},{8,0,412},{8,0,564},{9,0,888},{9,0,908},{10,
> -0,50},{10,0,423},{11,0,685},{11,0,697},{11,0,933},{12,0,299},{13,0,126},{13,0,
> -136},{13,0,170},{13,0,190},{136,10,688},{132,10,697},{4,0,232},{9,0,202},{10,0,
> -474},{140,0,433},{136,0,212},{6,0,108},{7,0,1003},{7,0,1181},{8,0,111},{136,0,
> -
> 343},{5,10,221},{135,11,1255},{133,11,485},{134,0,1712},{142,0,216},{5,0,643},{
> 6
> -,0,516},{4,11,285},{5,11,317},{6,11,301},{7,11,7},{8,11,153},{10,11,766},{11,11,
> -
> 468},{12,11,467},{141,11,143},{4,0,133},{7,0,711},{7,0,1298},{135,0,1585},{134,
> 0
> -,650},{135,11,512},{6,0,99},{7,0,1808},{145,0,57},{6,0,246},{6,0,574},{7,0,428},
> -{9,0,793},{10,0,669},{11,0,485},{11,0,840},{12,0,300},{14,0,250},{145,0,55},{4,
> -
> 10,132},{5,10,69},{135,10,1242},{136,0,1023},{7,0,302},{132,10,111},{135,0,187
> 1}
> -,{132,0,728},{9,0,252},{132,10,767},{6,0,461},{7,0,1590},{7,10,1416},{7,10,2005}
> -
> ,{8,10,131},{8,10,466},{9,10,672},{13,10,252},{148,10,103},{6,0,323},{135,0,156
> 4
> -
> },{7,0,461},{136,0,775},{6,10,44},{136,10,368},{139,0,172},{132,0,464},{4,10,570
> -
> },{133,10,120},{137,11,269},{6,10,227},{135,10,1589},{6,11,1719},{6,11,1735},{7,
> -
> 11,2016},{7,11,2020},{8,11,837},{137,11,852},{7,0,727},{146,0,73},{132,0,1023},
> {
> -
> 135,11,852},{135,10,1529},{136,0,577},{138,11,568},{134,0,1037},{8,11,67},{138,
> -11,419},{4,0,413},{5,0,677},{8,0,432},{140,0,280},{10,0,600},{6,10,1667},{7,11,
> -967},{7,10,2036},{141,11,11},{6,10,511},{140,10,132},{6,0,799},{5,10,568},{6,10,
> -138},{135,10,1293},{8,0,159},{4,10,565},{136,10,827},{7,0,646},{7,0,1730},{11,0,
> -446},{141,0,178},{4,10,922},{133,10,1023},{135,11,11},{132,0,395},{11,0,145},{
> -135,10,1002},{9,0,174},{10,0,164},{11,0,440},{11,0,514},{11,0,841},{15,0,98},{
> -
> 149,0,20},{134,0,426},{10,0,608},{139,0,1002},{7,11,320},{8,11,51},{12,11,481},{
> -
> 12,11,570},{148,11,106},{9,0,977},{9,0,983},{132,11,445},{138,0,250},{139,0,100}
> -,{6,0,1982},{136,10,402},{133,11,239},{4,10,716},{141,10,31},{5,0,476},{7,11,83}
> -,{7,11,1990},{8,11,130},{139,11,720},{8,10,691},{136,10,731},{5,11,123},{6,11,
> -530},{7,11,348},{135,11,1419},{5,0,76},{6,0,458},{6,0,497},{7,0,868},{9,0,658},{
> -10,0,594},{11,0,173},{11,0,566},{12,0,20},{12,0,338},{141,0,200},{9,11,139},{10,
> -
> 11,399},{11,11,469},{12,11,634},{141,11,223},{9,10,840},{138,10,803},{133,10,8
> 47
> -
> },{11,11,223},{140,11,168},{132,11,210},{8,0,447},{9,10,53},{9,10,268},{9,10,901
> -
> },{10,10,518},{10,10,829},{11,10,188},{13,10,74},{14,10,46},{15,10,17},{15,10,33
> -},{17,10,40},{18,10,36},{19,10,20},{22,10,1},{152,10,2},{4,0,526},{7,0,1029},{
> -135,0,1054},{19,11,59},{150,11,2},{4,0,636},{6,0,1875},{6,0,1920},{9,0,999},{12,
> -0,807},{12,0,825},{15,0,179},{15,0,190},{18,0,182},{136,10,532},{6,0,1699},{7,0,
> -
> 660},{7,0,1124},{17,0,31},{19,0,22},{151,0,14},{135,10,681},{132,11,430},{140,1
> 0
> -,677},{4,10,684},{136,10,384},{132,11,756},{133,11,213},{7,0,188},{7,10,110},{8,
> -10,290},{8,10,591},{9,10,382},{9,10,649},{11,10,71},{11,10,155},{11,10,313},{12,
> -10,5},{13,10,325},{142,10,287},{7,10,360},{7,10,425},{9,10,66},{9,10,278},{138,
> -
> 10,644},{142,11,164},{4,0,279},{7,0,301},{137,0,362},{134,11,586},{135,0,1743},
> {
> -
> 4,0,178},{133,0,399},{4,10,900},{133,10,861},{5,10,254},{7,10,985},{136,10,73},{
> -133,11,108},{7,10,1959},{136,10,683},{133,11,219},{4,11,193},{5,11,916},{7,11,
> -
> 364},{10,11,398},{10,11,726},{11,11,317},{11,11,626},{12,11,142},{12,11,288},{1
> 2
> -
> ,11,678},{13,11,313},{15,11,113},{18,11,114},{21,11,30},{150,11,53},{6,11,241},{
> -
> 7,11,907},{8,11,832},{9,11,342},{10,11,729},{11,11,284},{11,11,445},{11,11,651},
> -{11,11,863},{13,11,398},{146,11,99},{132,0,872},{134,0,831},{134,0,1692},{6,0,
> -202},{6,0,1006},{9,0,832},{10,0,636},{11,0,208},{12,0,360},{17,0,118},{18,0,27},
> -
> {20,0,67},{137,11,734},{132,10,725},{7,11,993},{138,11,666},{134,0,1954},{134,1
> 0
> -,196},{7,0,872},{10,0,516},{139,0,167},{133,10,831},{4,11,562},{9,11,254},{139,
> -11,879},{137,0,313},{4,0,224},{132,11,786},{11,0,24},{12,0,170},{136,10,723},{5,
> -0,546},{7,0,35},{8,0,11},{8,0,12},{9,0,315},{9,0,533},{10,0,802},{11,0,166},{12,
> -0,525},{142,0,243},{7,0,1937},{13,10,80},{13,10,437},{145,10,74},{5,0,241},{8,0,
> -242},{9,0,451},{10,0,667},{11,0,598},{140,0,429},{150,0,46},{6,0,1273},{137,0,
> -830},{5,10,848},{6,10,66},{136,10,764},{6,0,825},{134,0,993},{4,0,1006},{10,0,
> -
> 327},{13,0,271},{4,10,36},{7,10,1387},{139,10,755},{134,0,1023},{135,0,1580},{4,
> -
> 0,366},{137,0,516},{132,10,887},{6,0,1736},{135,0,1891},{6,11,216},{7,11,901},{
> 7
> -
> ,11,1343},{136,11,493},{6,10,165},{138,10,388},{7,11,341},{139,11,219},{4,10,71
> 9
> -
> },{135,10,155},{134,0,1935},{132,0,826},{6,0,331},{6,0,1605},{8,0,623},{11,0,139
> -
> },{139,0,171},{135,11,1734},{10,11,115},{11,11,420},{12,11,154},{13,11,404},{14,
> -11,346},{15,11,54},{143,11,112},{7,0,288},{4,10,353},{6,10,146},{6,10,1789},{7,
> -10,990},{7,10,1348},{9,10,665},{9,10,898},{11,10,893},{142,10,212},{6,0,916},{
> -
> 134,0,1592},{7,0,1888},{4,10,45},{135,10,1257},{5,11,1011},{136,11,701},{139,1
> 1,
> -
> 596},{4,11,54},{5,11,666},{7,11,1039},{7,11,1130},{9,11,195},{138,11,302},{134,
> 0
> -
> ,1471},{134,0,1570},{132,0,394},{140,10,65},{136,10,816},{135,0,1931},{7,0,574},
> -
> {135,0,1719},{134,11,467},{132,0,658},{9,0,781},{10,0,144},{11,0,385},{13,0,161}
> -
> ,{13,0,228},{13,0,268},{20,0,107},{134,11,1669},{136,0,374},{135,0,735},{4,0,34
> 4
> -
> },{6,0,498},{139,0,323},{7,0,586},{7,0,1063},{6,10,559},{134,10,1691},{137,0,155
> -},{133,0,906},{7,11,122},{9,11,259},{10,11,84},{11,11,470},{12,11,541},{141,11,
> -
> 379},{134,0,1139},{10,0,108},{139,0,116},{134,10,456},{133,10,925},{5,11,82},{5,
> -
> 11,131},{7,11,1755},{8,11,31},{9,11,168},{9,11,764},{139,11,869},{134,11,605},{
> 5
> -,11,278},{137,11,68},{4,11,163},{5,11,201},{5,11,307},{5,11,310},{6,11,335},{7,
> -
> 11,284},{136,11,165},{135,11,1660},{6,11,33},{135,11,1244},{4,0,616},{136,11,4
> 83
> -},{8,0,857},{8,0,902},{8,0,910},{10,0,879},{12,0,726},{4,11,199},{139,11,34},{
> -
> 136,0,692},{6,10,193},{7,10,240},{7,10,1682},{10,10,51},{10,10,640},{11,10,410},
> -{13,10,82},{14,10,247},{14,10,331},{142,10,377},{6,0,823},{134,0,983},{139,10,
> -411},{132,0,305},{136,10,633},{138,11,203},{134,0,681},{6,11,326},{7,11,677},{
> -137,11,425},{5,0,214},{7,0,603},{8,0,611},{9,0,686},{10,0,88},{11,0,459},{11,0,
> -496},{12,0,463},{12,0,590},{141,0,0},{136,0,1004},{142,0,23},{134,0,1703},{147,
> -11,8},{145,11,56},{135,0,1443},{4,10,237},{135,10,514},{6,0,714},{145,0,19},{5,
> -
> 11,358},{7,11,473},{7,11,1184},{10,11,662},{13,11,212},{13,11,304},{13,11,333},
> {
> -145,11,98},{4,0,737},{10,0,98},{11,0,294},{12,0,60},{12,0,437},{13,0,64},{13,0,
> -380},{142,0,430},{6,10,392},{7,10,65},{135,10,2019},{6,0,1758},{8,0,520},{9,0,
> -345},{9,0,403},{142,0,350},{5,0,47},{10,0,242},{138,0,579},{5,0,139},{7,0,1168},
> -
> {138,0,539},{134,0,1459},{13,0,388},{141,11,388},{134,0,253},{7,10,1260},{135,1
> 0
> -,1790},{10,0,252},{9,10,222},{139,10,900},{140,0,745},{133,11,946},{4,0,107},{7,
> -
> 0,613},{8,0,439},{8,0,504},{9,0,501},{10,0,383},{139,0,477},{135,11,1485},{132,0
> -
> ,871},{7,11,411},{7,11,590},{8,11,631},{9,11,323},{10,11,355},{11,11,491},{12,11
> -,143},{12,11,402},{13,11,73},{14,11,408},{15,11,107},{146,11,71},{132,0,229},{
> -132,0,903},{140,0,71},{133,0,549},{4,0,47},{6,0,373},{7,0,452},{7,0,543},{7,0,
> -1828},{7,0,1856},{9,0,6},{11,0,257},{139,0,391},{7,11,1467},{8,11,328},{10,11,
> -
> 544},{11,11,955},{13,11,320},{145,11,83},{5,0,980},{134,0,1754},{136,0,865},{5,
> 0
> -
> ,705},{137,0,606},{7,0,161},{8,10,201},{136,10,605},{143,11,35},{5,11,835},{6,11
> -
> ,483},{140,10,224},{7,0,536},{7,0,1331},{136,0,143},{134,0,1388},{5,0,724},{10,0
> -,305},{11,0,151},{12,0,33},{12,0,121},{12,0,381},{17,0,3},{17,0,27},{17,0,78},{
> -18,0,18},{19,0,54},{149,0,5},{4,10,523},{133,10,638},{5,0,19},{134,0,533},{5,0,
> -395},{5,0,951},{134,0,1776},{135,0,1908},{132,0,846},{10,0,74},{11,0,663},{12,0,
> -210},{13,0,166},{13,0,310},{14,0,373},{18,0,95},{19,0,43},{6,10,242},{7,10,227},
> -{7,10,1581},{8,10,104},{9,10,113},{9,10,220},{9,10,427},{10,10,239},{11,10,579},
> -
> {11,10,1023},{13,10,4},{13,10,204},{13,10,316},{148,10,86},{9,11,716},{11,11,10
> 8
> -},{13,11,123},{14,11,252},{19,11,38},{21,11,3},{151,11,11},{8,0,372},{9,0,122},{
> -138,0,175},{132,11,677},{7,11,1374},{136,11,540},{135,10,861},{132,0,695},{7,0,
> -497},{9,0,387},{147,0,81},{136,0,937},{134,0,718},{7,0,1328},{136,10,494},{132,
> -11,331},{6,0,1581},{133,11,747},{5,0,284},{6,0,49},{6,0,350},{7,0,1},{7,0,377},{
> -7,0,1693},{8,0,18},{8,0,678},{9,0,161},{9,0,585},{9,0,671},{9,0,839},{11,0,912},
> -
> {141,0,427},{7,10,1306},{8,10,505},{9,10,482},{10,10,126},{11,10,225},{12,10,34
> 7
> -
> },{12,10,449},{13,10,19},{14,10,218},{142,10,435},{10,10,764},{12,10,120},{13,1
> 0
> -,39},{145,10,127},{4,0,597},{133,10,268},{134,0,1094},{4,0,1008},{134,0,1973},{
> -132,0,811},{139,0,908},{135,0,1471},{133,11,326},{4,10,384},{135,10,1022},{7,0,
> -
> 1935},{8,0,324},{12,0,42},{4,11,691},{7,11,1935},{8,11,324},{9,11,35},{10,11,680
> -},{11,11,364},{12,11,42},{13,11,357},{146,11,16},{135,0,2014},{7,0,2007},{9,0,
> -101},{9,0,450},{10,0,66},{10,0,842},{11,0,536},{12,0,587},{6,11,32},{7,11,385},{
> -7,11,757},{7,11,1916},{8,11,37},{8,11,94},{8,11,711},{9,11,541},{10,11,162},{10,
> -11,795},{11,11,989},{11,11,1010},{12,11,14},{142,11,308},{139,0,586},{135,10,
> -
> 1703},{7,0,1077},{11,0,28},{9,10,159},{140,10,603},{6,0,1221},{136,10,583},{6,1
> 1
> -
> ,152},{6,11,349},{6,11,1682},{7,11,1252},{8,11,112},{9,11,435},{9,11,668},{10,11
> -,290},{10,11,319},{10,11,815},{11,11,180},{11,11,837},{12,11,240},{13,11,152},{
> -13,11,219},{142,11,158},{139,0,62},{132,10,515},{8,10,632},{8,10,697},{137,10,
> -
> 854},{134,0,1766},{132,11,581},{6,11,126},{7,11,573},{8,11,397},{142,11,44},{15
> 0
> -,0,28},{11,0,670},{22,0,25},{4,10,136},{133,10,551},{6,0,1665},{7,0,256},{7,0,
> -
> 1388},{138,0,499},{4,0,22},{5,0,10},{7,0,1576},{136,0,97},{134,10,1782},{5,0,481
> -},{7,10,1287},{9,10,44},{10,10,552},{10,10,642},{11,10,839},{12,10,274},{12,10,
> -
> 275},{12,10,372},{13,10,91},{142,10,125},{133,11,926},{7,11,1232},{137,11,531},
> {
> -6,0,134},{7,0,437},{7,0,1824},{9,0,37},{14,0,285},{142,0,371},{7,0,486},{8,0,155
> -},{11,0,93},{140,0,164},{6,0,1391},{134,0,1442},{133,11,670},{133,0,591},{6,10,
> -147},{7,10,886},{7,11,1957},{9,10,753},{138,10,268},{5,0,380},{5,0,650},{7,0,
> -
> 1173},{136,0,310},{4,0,364},{7,0,1156},{7,0,1187},{137,0,409},{135,11,1621},{13
> 4
> -
> ,0,482},{133,11,506},{4,0,781},{6,0,487},{7,0,926},{8,0,263},{139,0,500},{138,10
> -
> ,137},{135,11,242},{139,11,96},{133,10,414},{135,10,1762},{134,0,804},{5,11,83
> 4}
> -
> ,{7,11,1202},{8,11,14},{9,11,481},{137,11,880},{134,10,599},{4,0,94},{135,0,126
> 5
> -},{4,0,415},{132,0,417},{5,0,348},{6,0,522},{6,10,1749},{7,11,1526},{138,11,465}
> -,{134,10,1627},{132,0,1012},{132,10,488},{4,11,357},{6,11,172},{7,11,143},{137,
> -11,413},{4,10,83},{4,11,590},{146,11,76},{140,10,676},{7,11,287},{8,11,355},{9,
> -11,293},{137,11,743},{134,10,278},{6,0,1803},{18,0,165},{24,0,21},{5,11,169},{7,
> -11,333},{136,11,45},{12,10,97},{140,11,97},{4,0,408},{4,0,741},{135,0,500},{132,
> -
> 11,198},{7,10,388},{7,10,644},{139,10,781},{4,11,24},{5,11,140},{5,11,185},{7,11
> -,1500},{11,11,565},{139,11,838},{6,0,1321},{9,0,257},{7,10,229},{8,10,59},{9,10,
> -
> 190},{10,10,378},{140,10,191},{4,11,334},{133,11,593},{135,11,1885},{134,0,113
> 8}
> -,{4,0,249},{6,0,73},{135,0,177},{133,0,576},{142,0,231},{137,0,288},{132,10,660}
> -,{7,10,1035},{138,10,737},{135,0,1487},{6,0,989},{9,0,433},{7,10,690},{9,10,587}
> -,{140,10,521},{7,0,1264},{7,0,1678},{11,0,945},{12,0,341},{12,0,471},{140,0,569}
> -
> ,{132,11,709},{133,11,897},{5,11,224},{13,11,174},{146,11,52},{135,11,1840},{13
> 4
> -,10,1744},{12,0,87},{16,0,74},{4,10,733},{9,10,194},{10,10,92},{11,10,198},{12,
> -
> 10,84},{141,10,128},{140,0,779},{135,0,538},{4,11,608},{133,11,497},{133,0,413},
> -
> {7,11,1375},{7,11,1466},{138,11,331},{136,0,495},{6,11,540},{136,11,136},{7,0,5
> 4
> -},{8,0,312},{10,0,191},{10,0,614},{140,0,567},{6,0,468},{7,0,567},{7,0,1478},{8,
> -
> 0,530},{14,0,290},{133,11,999},{4,11,299},{7,10,306},{135,11,1004},{142,11,296},
> -
> {134,0,1484},{133,10,979},{6,0,609},{9,0,815},{12,11,137},{14,11,9},{14,11,24},{
> -
> 142,11,64},{133,11,456},{6,0,484},{135,0,822},{133,10,178},{136,11,180},{132,1
> 1,
> -
> 755},{137,0,900},{135,0,1335},{6,0,1724},{135,0,2022},{135,11,1139},{5,0,640},{
> -
> 132,10,390},{6,0,1831},{138,11,633},{135,11,566},{4,11,890},{5,11,805},{5,11,81
> 9
> -},{5,11,961},{6,11,396},{6,11,1631},{6,11,1678},{7,11,1967},{7,11,2041},{9,11,
> -
> 630},{11,11,8},{11,11,1019},{12,11,176},{13,11,225},{14,11,292},{149,11,24},{13
> 2
> -
> ,0,474},{134,0,1103},{135,0,1504},{134,0,1576},{6,0,961},{6,0,1034},{140,0,655},
> -{11,11,514},{149,11,20},{5,0,305},{135,11,1815},{7,11,1505},{10,11,190},{10,11,
> -634},{11,11,792},{12,11,358},{140,11,447},{5,11,0},{6,11,536},{7,11,604},{13,11,
> -445},{145,11,126},{7,0,1236},{133,10,105},{4,0,480},{6,0,217},{6,0,302},{6,0,
> -1642},{7,0,130},{7,0,837},{7,0,1321},{7,0,1547},{7,0,1657},{8,0,429},{9,0,228},{
> -
> 13,0,289},{13,0,343},{19,0,101},{6,11,232},{6,11,412},{7,11,1074},{8,11,9},{8,11
> -
> ,157},{8,11,786},{9,11,196},{9,11,352},{9,11,457},{10,11,337},{11,11,232},{11,11
> -,877},{12,11,480},{140,11,546},{5,10,438},{7,11,958},{9,10,694},{12,10,627},{13,
> -
> 11,38},{141,10,210},{4,11,382},{136,11,579},{7,0,278},{10,0,739},{11,0,708},{14
> 1
> -
> ,0,348},{4,11,212},{135,11,1206},{135,11,1898},{6,0,708},{6,0,1344},{152,10,11},
> -
> {137,11,768},{134,0,1840},{140,0,233},{8,10,25},{138,10,826},{6,0,2017},{133,11,
> -
> 655},{6,0,1488},{139,11,290},{132,10,308},{134,0,1590},{134,0,1800},{134,0,125
> 9}
> -,{16,0,28},{6,11,231},{7,11,95},{136,11,423},{133,11,300},{135,10,150},{136,10,
> -
> 649},{7,11,1874},{137,11,641},{6,11,237},{7,11,611},{8,11,100},{9,11,416},{11,1
> 1
> -
> ,335},{12,11,173},{146,11,101},{137,0,45},{134,10,521},{17,0,36},{14,11,26},{14
> 6
> -
> ,11,150},{7,0,1442},{14,0,22},{5,10,339},{15,10,41},{15,10,166},{147,10,66},{8,0
> -
> ,378},{6,11,581},{135,11,1119},{134,0,1507},{147,11,117},{139,0,39},{134,0,105
> 4}
> -,{6,0,363},{7,0,1955},{136,0,725},{134,0,2036},{133,11,199},{6,0,1871},{9,0,935}
> -,{9,0,961},{9,0,1004},{9,0,1016},{12,0,805},{12,0,852},{12,0,853},{12,0,869},{12
> -,0,882},{12,0,896},{12,0,906},{12,0,917},{12,0,940},{15,0,170},{15,0,176},{15,0,
> -
> 188},{15,0,201},{15,0,205},{15,0,212},{15,0,234},{15,0,244},{18,0,181},{18,0,193
> -},{18,0,196},{18,0,201},{18,0,202},{18,0,210},{18,0,217},{18,0,235},{18,0,236},{
> -18,0,237},{21,0,54},{21,0,55},{21,0,58},{21,0,59},{152,0,22},{134,10,1628},{137,
> -0,805},{5,0,813},{135,0,2046},{142,11,42},{5,0,712},{6,0,1240},{11,0,17},{13,0,
> -321},{144,0,67},{132,0,617},{135,10,829},{6,0,320},{7,0,781},{7,0,1921},{9,0,55}
> -,{10,0,186},{10,0,273},{10,0,664},{10,0,801},{11,0,996},{11,0,997},{13,0,157},{
> -
> 142,0,170},{136,0,271},{5,10,486},{135,10,1349},{18,11,91},{147,11,70},{10,0,44
> 5
> -},{7,10,1635},{8,10,17},{138,10,295},{136,11,404},{7,0,103},{7,0,863},{11,0,184}
> -,{145,0,62},{138,10,558},{137,0,659},{6,11,312},{6,11,1715},{10,11,584},{11,11,
> -546},{11,11,692},{12,11,259},{12,11,295},{13,11,46},{141,11,154},{134,0,676},{
> -132,11,588},{4,11,231},{5,11,61},{6,11,104},{7,11,729},{7,11,964},{7,11,1658},{
> -
> 140,11,414},{6,11,263},{138,11,757},{11,0,337},{142,0,303},{135,11,1363},{132,
> 11
> -,320},{140,0,506},{134,10,447},{5,0,77},{7,0,1455},{10,0,843},{147,0,73},{7,10,
> -577},{7,10,1432},{9,10,475},{9,10,505},{9,10,526},{9,10,609},{9,10,689},{9,10,
> -
> 726},{9,10,735},{9,10,738},{10,10,556},{10,10,674},{10,10,684},{11,10,89},{11,1
> 0
> -,202},{11,10,272},{11,10,380},{11,10,415},{11,10,505},{11,10,537},{11,10,550},{
> -11,10,562},{11,10,640},{11,10,667},{11,10,688},{11,10,847},{11,10,927},{11,10,
> -
> 930},{11,10,940},{12,10,144},{12,10,325},{12,10,329},{12,10,389},{12,10,403},{1
> 2
> -
> ,10,451},{12,10,515},{12,10,604},{12,10,616},{12,10,626},{13,10,66},{13,10,131},
> -{13,10,167},{13,10,236},{13,10,368},{13,10,411},{13,10,434},{13,10,453},{13,10,
> -461},{13,10,474},{14,10,59},{14,10,60},{14,10,139},{14,10,152},{14,10,276},{14,
> -10,353},{14,10,402},{15,10,28},{15,10,81},{15,10,123},{15,10,152},{18,10,136},{
> -
> 148,10,88},{132,0,458},{135,0,1420},{6,0,109},{10,0,382},{4,11,405},{4,10,609},{
> -7,10,756},{7,11,817},{9,10,544},{11,10,413},{14,11,58},{14,10,307},{16,10,25},{
> -
> 17,11,37},{146,11,124},{6,0,330},{7,0,1084},{11,0,142},{133,11,974},{4,10,930},{
> -
> 133,10,947},{5,10,939},{142,11,394},{16,0,91},{145,0,87},{5,11,235},{5,10,962},{
> -
> 7,11,1239},{11,11,131},{140,11,370},{11,0,492},{5,10,651},{8,10,170},{9,10,61},{
> -
> 9,10,63},{10,10,23},{10,10,37},{10,10,834},{11,10,4},{11,10,281},{11,10,503},{11
> -
> ,10,677},{12,10,96},{12,10,130},{12,10,244},{14,10,5},{14,10,40},{14,10,162},{14
> -
> ,10,202},{146,10,133},{4,10,406},{5,10,579},{12,10,492},{150,10,15},{9,11,137},{
> -
> 138,11,221},{134,0,1239},{11,0,211},{140,0,145},{7,11,390},{138,11,140},{135,1
> 1,
> -
> 1418},{135,11,1144},{134,0,1049},{7,0,321},{6,10,17},{7,10,1001},{7,10,1982},{9,
> -
> 10,886},{10,10,489},{10,10,800},{11,10,782},{12,10,320},{13,10,467},{14,10,145},
> -
> {14,10,387},{143,10,119},{145,10,17},{5,11,407},{11,11,489},{19,11,37},{20,11,7
> 3
> -},{150,11,38},{133,10,458},{135,0,1985},{7,10,1983},{8,10,0},{8,10,171},{9,10,
> -120},{9,10,732},{10,10,473},{11,10,656},{11,10,998},{18,10,0},{18,10,2},{147,10,
> -21},{5,11,325},{7,11,1483},{8,11,5},{8,11,227},{9,11,105},{10,11,585},{140,11,
> -
> 614},{136,0,122},{132,0,234},{135,11,1196},{6,0,976},{6,0,1098},{134,0,1441},{7,
> -0,253},{136,0,549},{6,11,621},{13,11,504},{144,11,19},{132,10,519},{5,0,430},{5,
> -
> 0,932},{6,0,131},{7,0,417},{9,0,522},{11,0,314},{141,0,390},{14,0,149},{14,0,399
> -},{143,0,57},{5,10,907},{6,10,31},{6,11,218},{7,10,491},{7,10,530},{8,10,592},{
> -
> 11,10,53},{11,10,779},{12,10,167},{12,10,411},{14,10,14},{14,10,136},{15,10,72},
> -{16,10,17},{144,10,72},{140,11,330},{7,11,454},{7,11,782},{136,11,768},{132,0,
> -507},{10,11,676},{140,11,462},{6,0,630},{9,0,811},{4,10,208},{5,10,106},{6,10,
> -531},{8,10,408},{9,10,188},{138,10,572},{4,0,343},{5,0,511},{134,10,1693},{134,
> -
> 11,164},{132,0,448},{7,0,455},{138,0,591},{135,0,1381},{12,10,441},{150,11,50},
> {
> -9,10,449},{10,10,192},{138,10,740},{6,0,575},{132,10,241},{134,0,1175},{134,0,
> -
> 653},{134,0,1761},{134,0,1198},{132,10,259},{6,11,343},{7,11,195},{9,11,226},{1
> 0
> -
> ,11,197},{10,11,575},{11,11,502},{139,11,899},{7,0,1127},{7,0,1572},{10,0,297},{
> -10,0,422},{11,0,764},{11,0,810},{12,0,264},{13,0,102},{13,0,300},{13,0,484},{14,
> -0,147},{14,0,229},{17,0,71},{18,0,118},{147,0,120},{135,11,666},{132,0,678},{4,
> -
> 10,173},{5,10,312},{5,10,512},{135,10,1285},{7,10,1603},{7,10,1691},{9,10,464},
> {
> -
> 11,10,195},{12,10,279},{12,10,448},{14,10,11},{147,10,102},{16,0,99},{146,0,164}
> -,{7,11,1125},{9,11,143},{11,11,61},{14,11,405},{150,11,21},{137,11,260},{4,10,
> -452},{5,10,583},{5,10,817},{6,10,433},{7,10,593},{7,10,720},{7,10,1378},{8,10,
> -161},{9,10,284},{10,10,313},{139,10,886},{132,10,547},{136,10,722},{14,0,35},{
> -142,0,191},{141,0,45},{138,0,121},{132,0,125},{134,0,1622},{133,11,959},{8,10,
> -
> 420},{139,10,193},{132,0,721},{135,10,409},{136,0,145},{7,0,792},{8,0,147},{10,
> 0
> -,821},{11,0,970},{11,0,1021},{136,11,173},{134,11,266},{132,0,715},{7,0,1999},{
> -
> 138,10,308},{133,0,531},{5,0,168},{5,0,930},{8,0,74},{9,0,623},{12,0,500},{140,0
> -
> ,579},{144,0,65},{138,11,246},{6,0,220},{7,0,1101},{13,0,105},{142,11,314},{5,10
> -,1002},{136,10,745},{134,0,960},{20,0,0},{148,11,0},{4,0,1005},{4,10,239},{6,10,
> -
> 477},{7,10,1607},{11,10,68},{139,10,617},{6,0,19},{7,0,1413},{139,0,428},{149,1
> 0
> -
> ,13},{7,0,96},{8,0,401},{8,0,703},{9,0,896},{136,11,300},{134,0,1595},{145,0,116
> -},{136,0,1021},{7,0,1961},{7,0,1965},{7,0,2030},{8,0,150},{8,0,702},{8,0,737},{8
> -,0,750},{140,0,366},{11,11,75},{142,11,267},{132,10,367},{8,0,800},{9,0,148},{9,
> -0,872},{9,0,890},{11,0,309},{11,0,1001},{13,0,267},{13,0,323},{5,11,427},{5,11,
> -734},{7,11,478},{136,11,52},{7,11,239},{11,11,217},{142,11,165},{132,11,323},{
> -
> 140,11,419},{13,0,299},{142,0,75},{6,11,87},{6,11,1734},{7,11,20},{7,11,1056},{8
> -,11,732},{9,11,406},{9,11,911},{138,11,694},{134,0,1383},{132,10,694},{133,11,
> -613},{137,0,779},{4,0,598},{140,10,687},{6,0,970},{135,0,424},{133,0,547},{7,11,
> -32},{7,11,984},{8,11,85},{8,11,709},{9,11,579},{9,11,847},{9,11,856},{10,11,799}
> -
> ,{11,11,258},{11,11,1007},{12,11,331},{12,11,615},{13,11,188},{13,11,435},{14,1
> 1
> -,8},{15,11,165},{16,11,27},{148,11,40},{6,0,1222},{134,0,1385},{132,0,876},{138,
> -11,151},{135,10,213},{4,11,167},{135,11,82},{133,0,133},{6,11,24},{7,11,74},{7,
> -11,678},{137,11,258},{5,11,62},{6,11,534},{7,11,684},{7,11,1043},{7,11,1072},{8,
> -
> 11,280},{8,11,541},{8,11,686},{10,11,519},{11,11,252},{140,11,282},{136,0,187},
> {
> -
> 8,0,8},{10,0,0},{10,0,818},{139,0,988},{132,11,359},{11,0,429},{15,0,51},{135,10
> -,1672},{136,0,685},{5,11,211},{7,11,88},{136,11,627},{134,0,472},{136,0,132},{6,
> -11,145},{141,11,336},{4,10,751},{11,10,390},{140,10,32},{6,0,938},{6,0,1060},{4,
> -11,263},{4,10,409},{133,10,78},{137,0,874},{8,0,774},{10,0,670},{12,0,51},{4,11,
> -916},{6,10,473},{7,10,1602},{10,10,698},{12,10,212},{13,10,307},{145,10,105},{
> -
> 146,0,92},{143,10,156},{132,0,830},{137,0,701},{4,11,599},{6,11,1634},{7,11,5},{
> -7,11,55},{7,11,67},{7,11,97},{7,11,691},{7,11,979},{7,11,1697},{8,11,207},{8,11,
> -
> 214},{8,11,231},{8,11,294},{8,11,336},{8,11,428},{8,11,451},{8,11,460},{8,11,471
> -},{8,11,622},{8,11,626},{8,11,679},{8,11,759},{8,11,829},{9,11,11},{9,11,246},{9
> -
> ,11,484},{9,11,573},{9,11,706},{9,11,762},{9,11,798},{9,11,855},{9,11,870},{9,11
> -,912},{10,11,303},{10,11,335},{10,11,424},{10,11,461},{10,11,543},{10,11,759},{
> -
> 10,11,814},{11,11,59},{11,11,199},{11,11,235},{11,11,475},{11,11,590},{11,11,92
> 9
> -
> },{11,11,963},{12,11,114},{12,11,182},{12,11,226},{12,11,332},{12,11,439},{12,1
> 1
> -,575},{12,11,598},{13,11,8},{13,11,125},{13,11,194},{13,11,287},{14,11,197},{14,
> -
> 11,383},{15,11,53},{17,11,63},{19,11,46},{19,11,98},{19,11,106},{148,11,85},{4,0
> -
> ,127},{5,0,350},{6,0,356},{8,0,426},{9,0,572},{10,0,247},{139,0,312},{134,0,1215
> -},{6,0,59},{9,0,603},{13,0,397},{7,11,1853},{138,11,437},{134,0,1762},{147,11,
> -126},{135,10,883},{13,0,293},{142,0,56},{133,10,617},{139,10,50},{5,11,187},{7,
> -10,1518},{139,10,694},{135,0,441},{6,0,111},{7,0,4},{8,0,163},{8,0,776},{138,0,
> -566},{132,0,806},{4,11,215},{9,11,38},{10,11,3},{11,11,23},{11,11,127},{139,11,
> -
> 796},{14,0,233},{4,10,546},{135,10,2042},{135,0,1994},{134,0,1739},{135,11,153
> 0}
> -,{136,0,393},{5,0,297},{7,0,1038},{14,0,359},{19,0,52},{148,0,47},{135,0,309},{4
> -,10,313},{133,10,577},{8,10,184},{141,10,433},{135,10,935},{12,10,186},{12,10,
> -
> 292},{14,10,100},{146,10,70},{136,0,363},{14,0,175},{11,10,402},{12,10,109},{12,
> -10,431},{13,10,179},{13,10,206},{14,10,217},{16,10,3},{148,10,53},{5,10,886},{6,
> -10,46},{6,10,1790},{7,10,14},{7,10,732},{7,10,1654},{8,10,95},{8,10,327},{8,10,
> -
> 616},{9,10,892},{10,10,598},{10,10,769},{11,10,134},{11,10,747},{12,10,378},{14
> 2
> -
> ,10,97},{136,0,666},{135,0,1675},{6,0,655},{134,0,1600},{135,0,808},{133,10,102
> 1
> -},{4,11,28},{5,11,440},{7,11,248},{11,11,833},{140,11,344},{134,11,1654},{132,0,
> -
> 280},{140,0,54},{4,0,421},{133,0,548},{132,10,153},{6,11,339},{135,11,923},{133,
> -
> 11,853},{133,10,798},{132,10,587},{6,11,249},{7,11,1234},{139,11,573},{6,10,59
> 8}
> -,{7,10,42},{8,10,695},{10,10,212},{11,10,158},{14,10,196},{145,10,85},{7,0,249},
> -{5,10,957},{133,10,1008},{4,10,129},{135,10,465},{6,0,254},{7,0,842},{7,0,1659},
> -
> {9,0,109},{10,0,103},{7,10,908},{7,10,1201},{9,10,755},{11,10,906},{12,10,527},{
> -
> 146,10,7},{5,0,262},{136,10,450},{144,0,1},{10,11,201},{142,11,319},{7,11,49},{7
> -
> ,11,392},{8,11,20},{8,11,172},{8,11,690},{9,11,383},{9,11,845},{10,11,48},{11,11
> -
> ,293},{11,11,832},{11,11,920},{141,11,221},{5,11,858},{133,11,992},{134,0,805},
> {
> -
> 139,10,1003},{6,0,1630},{134,11,307},{7,11,1512},{135,11,1794},{6,11,268},{137,
> -11,62},{135,10,1868},{133,0,671},{4,0,989},{8,0,972},{136,0,998},{132,11,423},{
> -132,0,889},{135,0,1382},{135,0,1910},{7,10,965},{7,10,1460},{135,10,1604},{4,0,
> -627},{5,0,775},{138,11,106},{134,11,348},{7,0,202},{11,0,362},{11,0,948},{140,0,
> -388},{138,11,771},{6,11,613},{136,11,223},{6,0,560},{7,0,451},{8,0,389},{12,0,
> -490},{13,0,16},{13,0,215},{13,0,351},{18,0,132},{147,0,125},{135,0,841},{136,0,
> -
> 566},{136,0,938},{132,11,670},{5,0,912},{6,0,1695},{140,11,55},{9,11,40},{139,1
> 1
> -
> ,136},{7,0,1361},{7,10,982},{10,10,32},{143,10,56},{11,11,259},{140,11,270},{5,0
> -,236},{6,0,572},{8,0,492},{11,0,618},{144,0,56},{8,11,572},{9,11,310},{9,11,682}
> -
> ,{137,11,698},{134,0,1854},{5,0,190},{136,0,318},{133,10,435},{135,0,1376},{4,1
> 1
> -,296},{6,11,352},{7,11,401},{7,11,1410},{7,11,1594},{7,11,1674},{8,11,63},{8,11,
> -
> 660},{137,11,74},{7,0,349},{5,10,85},{6,10,419},{7,10,305},{7,10,361},{7,10,1337
> -
> },{8,10,71},{140,10,519},{4,11,139},{4,11,388},{140,11,188},{6,0,1972},{6,0,2013
> -},{8,0,951},{10,0,947},{10,0,974},{10,0,1018},{142,0,476},{140,10,688},{135,10,
> -
> 740},{5,10,691},{7,10,345},{9,10,94},{140,10,169},{9,0,344},{5,10,183},{6,10,582
> -
> },{10,10,679},{140,10,435},{135,10,511},{132,0,850},{8,11,441},{10,11,314},{143,
> -
> 11,3},{7,10,1993},{136,10,684},{4,11,747},{6,11,290},{6,10,583},{7,11,649},{7,11
> -
> ,1479},{135,11,1583},{133,11,232},{133,10,704},{134,0,910},{4,10,179},{5,10,19
> 8}
> -,{133,10,697},{7,10,347},{7,10,971},{8,10,181},{138,10,711},{136,11,525},{14,0,
> -19},{14,0,28},{144,0,29},{7,0,85},{7,0,247},{8,0,585},{138,0,163},{4,0,487},{7,
> -11,472},{7,11,1801},{10,11,748},{141,11,458},{4,10,243},{5,10,203},{7,10,19},{7,
> -
> 10,71},{7,10,113},{10,10,405},{11,10,357},{142,10,240},{7,10,1450},{139,10,99},
> {
> -132,11,425},{138,0,145},{147,0,83},{6,10,492},{137,11,247},{4,0,1013},{134,0,
> -
> 2033},{5,10,134},{6,10,408},{6,10,495},{135,10,1593},{135,0,1922},{134,11,1768
> },
> -{4,0,124},{10,0,457},{11,0,121},{11,0,169},{11,0,870},{11,0,874},{12,0,214},{14,
> -0,187},{143,0,77},{5,0,557},{135,0,1457},{139,0,66},{5,11,943},{6,11,1779},{142,
> -10,4},{4,10,248},{4,10,665},{7,10,137},{137,10,349},{7,0,1193},{5,11,245},{6,11,
> -
> 576},{7,11,582},{136,11,225},{144,0,82},{7,10,1270},{139,10,612},{5,0,454},{10,
> 0
> -
> ,352},{138,11,352},{18,0,57},{5,10,371},{135,10,563},{135,0,1333},{6,0,107},{7,0
> -,638},{7,0,1632},{9,0,396},{134,11,610},{5,0,370},{134,0,1756},{4,10,374},{7,10,
> -
> 547},{7,10,1700},{7,10,1833},{139,10,858},{133,0,204},{6,0,1305},{9,10,311},{14
> 1
> -,10,42},{5,0,970},{134,0,1706},{6,10,1647},{7,10,1552},{7,10,2010},{9,10,494},{
> -
> 137,10,509},{13,11,455},{15,11,99},{15,11,129},{144,11,68},{135,0,3},{4,0,35},{5
> -,0,121},{5,0,483},{5,0,685},{6,0,489},{6,0,782},{6,0,1032},{7,0,1204},{136,0,394
> -},{4,0,921},{133,0,1007},{8,11,360},{138,11,63},{135,0,1696},{134,0,1519},{132,
> -11,443},{135,11,944},{6,10,123},{7,10,214},{9,10,728},{10,10,157},{11,10,346},{
> -
> 11,10,662},{143,10,106},{137,0,981},{135,10,1435},{134,0,1072},{132,0,712},{13
> 4,
> -0,1629},{134,0,728},{4,11,298},{137,11,483},{6,0,1177},{6,0,1271},{5,11,164},{7,
> -
> 11,121},{142,11,189},{7,0,1608},{4,10,707},{5,10,588},{6,10,393},{13,10,106},{1
> 8
> -,10,49},{147,10,41},{23,0,16},{151,11,16},{6,10,211},{7,10,1690},{11,10,486},{
> -
> 140,10,369},{133,0,485},{19,11,15},{149,11,27},{4,11,172},{9,11,611},{10,11,436}
> -
> ,{12,11,673},{141,11,255},{5,11,844},{10,11,484},{11,11,754},{12,11,457},{14,11,
> -171},{14,11,389},{146,11,153},{4,0,285},{5,0,27},{5,0,317},{6,0,301},{7,0,7},{8,
> -0,153},{10,0,766},{11,0,468},{12,0,467},{141,0,143},{134,0,1462},{9,11,263},{10,
> -
> 11,147},{138,11,492},{133,11,537},{6,0,1945},{6,0,1986},{6,0,1991},{134,0,2038},
> -
> {134,10,219},{137,11,842},{14,0,52},{17,0,50},{5,10,582},{6,10,1646},{7,10,99},{
> -7,10,1962},{7,10,1986},{8,10,515},{8,10,773},{9,10,23},{9,10,491},{12,10,620},{
> -
> 142,10,93},{138,11,97},{20,0,21},{20,0,44},{133,10,851},{136,0,819},{139,0,917},
> -{5,11,230},{5,11,392},{6,11,420},{8,10,762},{8,10,812},{9,11,568},{9,10,910},{
> -
> 140,11,612},{135,0,784},{15,0,135},{143,11,135},{10,0,454},{140,0,324},{4,11,0},
> -
> {5,11,41},{7,11,1459},{7,11,1469},{7,11,1618},{7,11,1859},{9,11,549},{139,11,90
> 5
> -},{4,10,98},{7,10,1365},{9,10,422},{9,10,670},{10,10,775},{11,10,210},{13,10,26}
> -,{13,10,457},{141,10,476},{6,0,1719},{6,0,1735},{7,0,2016},{7,0,2020},{8,0,837},
> -
> {137,0,852},{133,11,696},{135,0,852},{132,0,952},{134,10,1730},{132,11,771},{1
> 38
> -
> ,0,568},{137,0,448},{139,0,146},{8,0,67},{138,0,419},{133,11,921},{137,10,147},{
> -
> 134,0,1826},{10,0,657},{14,0,297},{142,0,361},{6,0,666},{6,0,767},{134,0,1542},{
> -
> 139,0,729},{6,11,180},{7,11,1137},{8,11,751},{139,11,805},{4,11,183},{7,11,271},
> -
> {11,11,824},{11,11,952},{13,11,278},{13,11,339},{13,11,482},{14,11,424},{148,11,
> -99},{4,0,669},{5,11,477},{5,11,596},{6,11,505},{7,11,1221},{11,11,907},{12,11,
> -209},{141,11,214},{135,11,1215},{5,0,402},{6,10,30},{11,10,56},{139,10,305},{7,
> -
> 11,564},{142,11,168},{139,0,152},{7,0,912},{135,10,1614},{4,10,150},{5,10,303},
> {
> -
> 134,10,327},{7,0,320},{8,0,51},{9,0,868},{10,0,833},{12,0,481},{12,0,570},{148,0
> -,106},{132,0,445},{7,11,274},{11,11,263},{11,11,479},{11,11,507},{140,11,277},{
> -10,0,555},{11,0,308},{19,0,95},{6,11,1645},{8,10,192},{10,10,78},{141,10,359},{
> -
> 135,10,786},{6,11,92},{6,11,188},{7,11,1269},{7,11,1524},{7,11,1876},{10,11,228}
> -,{139,11,1020},{4,11,459},{133,11,966},{11,0,386},{6,10,1638},{7,10,79},{7,10,
> -
> 496},{9,10,138},{10,10,336},{12,10,412},{12,10,440},{142,10,305},{133,0,239},{7,
> -0,83},{7,0,1990},{8,0,130},{139,0,720},{138,11,709},{4,0,143},{5,0,550},{133,0,
> -
> 752},{5,0,123},{6,0,530},{7,0,348},{135,0,1419},{135,0,2024},{6,11,18},{7,11,179
> -},{7,11,721},{7,11,932},{8,11,548},{8,11,757},{9,11,54},{9,11,65},{9,11,532},{9,
> -
> 11,844},{10,11,113},{10,11,117},{10,11,236},{10,11,315},{10,11,430},{10,11,798},
> -{11,11,153},{11,11,351},{11,11,375},{12,11,78},{12,11,151},{12,11,392},{14,11,
> -248},{143,11,23},{7,10,204},{7,10,415},{8,10,42},{10,10,85},{139,10,564},{134,0,
> -958},{133,11,965},{132,0,210},{135,11,1429},{138,11,480},{134,11,182},{139,11,
> -345},{10,11,65},{10,11,488},{138,11,497},{4,10,3},{5,10,247},{5,10,644},{7,10,
> -
> 744},{7,10,1207},{7,10,1225},{7,10,1909},{146,10,147},{132,0,430},{5,10,285},{9,
> -10,67},{13,10,473},{143,10,82},{144,11,16},{7,11,1162},{9,11,588},{10,11,260},{
> -
> 151,10,8},{133,0,213},{138,0,7},{135,0,801},{134,11,1786},{135,11,308},{6,0,936}
> -
> ,{134,0,1289},{133,0,108},{132,0,885},{133,0,219},{139,0,587},{4,0,193},{5,0,91
> 6
> -},{6,0,1041},{7,0,364},{10,0,398},{10,0,726},{11,0,317},{11,0,626},{12,0,142},{
> -
> 12,0,288},{12,0,678},{13,0,313},{15,0,113},{146,0,114},{135,0,1165},{6,0,241},{9
> -
> ,0,342},{10,0,729},{11,0,284},{11,0,445},{11,0,651},{11,0,863},{13,0,398},{146,0
> -
> ,99},{7,0,907},{136,0,832},{9,0,303},{4,10,29},{6,10,532},{7,10,1628},{7,10,1648
> -},{9,10,350},{10,10,433},{11,10,97},{11,10,557},{11,10,745},{12,10,289},{12,10,
> -
> 335},{12,10,348},{12,10,606},{13,10,116},{13,10,233},{13,10,466},{14,10,181},{1
> 4
> -
> ,10,209},{14,10,232},{14,10,236},{14,10,300},{16,10,41},{148,10,97},{7,11,423},{
> -
> 7,10,1692},{136,11,588},{6,0,931},{134,0,1454},{5,10,501},{7,10,1704},{9,10,553}
> -,{11,10,520},{12,10,557},{141,10,249},{136,11,287},{4,0,562},{9,0,254},{139,0,
> -879},{132,0,786},{14,11,32},{18,11,85},{20,11,2},{152,11,16},{135,0,1294},{7,11,
> -723},{135,11,1135},{6,0,216},{7,0,901},{7,0,1343},{8,0,493},{134,11,403},{7,11,
> -
> 719},{8,11,809},{136,11,834},{5,11,210},{6,11,213},{7,11,60},{10,11,364},{139,1
> 1
> -,135},{7,0,341},{11,0,219},{5,11,607},{8,11,326},{136,11,490},{4,11,701},{5,11,
> -
> 472},{5,11,639},{7,11,1249},{9,11,758},{139,11,896},{135,11,380},{135,11,1947},
> {
> -
> 139,0,130},{135,0,1734},{10,0,115},{11,0,420},{12,0,154},{13,0,404},{14,0,346},{
> -143,0,54},{134,10,129},{4,11,386},{7,11,41},{8,11,405},{9,11,497},{11,11,110},{
> -
> 11,11,360},{15,11,37},{144,11,84},{141,11,282},{5,11,46},{7,11,1452},{7,11,1480}
> -
> ,{8,11,634},{140,11,472},{4,11,524},{136,11,810},{10,11,238},{141,11,33},{133,0,
> -604},{5,0,1011},{136,0,701},{8,0,856},{8,0,858},{8,0,879},{12,0,702},{142,0,447}
> -,{4,0,54},{5,0,666},{7,0,1039},{7,0,1130},{9,0,195},{138,0,302},{4,10,25},{5,10,
> -
> 60},{6,10,504},{7,10,614},{7,10,1155},{140,10,0},{7,10,1248},{11,10,621},{139,1
> 0
> -,702},{133,11,997},{137,10,321},{134,0,1669},{134,0,1791},{4,10,379},{135,10,
> -
> 1397},{138,11,372},{5,11,782},{5,11,829},{134,11,1738},{135,0,1228},{4,10,118},
> {
> -
> 6,10,274},{6,10,361},{7,10,75},{141,10,441},{132,0,623},{9,11,279},{10,11,407},{
> -
> 14,11,84},{150,11,18},{137,10,841},{135,0,798},{140,10,693},{5,10,314},{6,10,22
> 1
> -
> },{7,10,419},{10,10,650},{11,10,396},{12,10,156},{13,10,369},{14,10,333},{145,1
> 0
> -,47},{135,11,1372},{7,0,122},{9,0,259},{10,0,84},{11,0,470},{12,0,541},{141,0,
> -379},{134,0,837},{8,0,1013},{4,11,78},{5,11,96},{5,11,182},{7,11,1724},{7,11,
> -
> 1825},{10,11,394},{10,11,471},{11,11,532},{14,11,340},{145,11,88},{134,0,577},{
> -
> 135,11,1964},{132,10,913},{134,0,460},{8,0,891},{10,0,901},{10,0,919},{10,0,932}
> -,{12,0,715},{12,0,728},{12,0,777},{14,0,457},{144,0,103},{5,0,82},{5,0,131},{7,0
> -,1755},{8,0,31},{9,0,168},{9,0,764},{139,0,869},{136,10,475},{6,0,605},{5,10,
> -
> 1016},{9,11,601},{9,11,619},{10,11,505},{10,11,732},{11,11,355},{140,11,139},{7,
> -
> 10,602},{8,10,179},{10,10,781},{140,10,126},{134,0,1246},{6,10,329},{138,10,11
> 1}
> -
> ,{6,11,215},{7,11,1028},{7,11,1473},{7,11,1721},{9,11,424},{138,11,779},{5,0,27
> 8
> -},{137,0,68},{6,0,932},{6,0,1084},{144,0,86},{4,0,163},{5,0,201},{5,0,307},{5,0,
> -310},{6,0,335},{7,0,284},{7,0,1660},{136,0,165},{136,0,781},{134,0,707},{6,0,33}
> -,{135,0,1244},{5,10,821},{6,11,67},{6,10,1687},{7,11,258},{7,11,1630},{9,11,354}
> -,{9,11,675},{10,11,830},{14,11,80},{145,11,80},{6,11,141},{7,11,225},{9,11,59},{
> -
> 9,11,607},{10,11,312},{11,11,687},{12,11,555},{13,11,373},{13,11,494},{148,11,5
> 8
> -
> },{134,0,1113},{9,0,388},{5,10,71},{7,10,1407},{9,10,704},{10,10,261},{10,10,619
> -},{11,10,547},{11,10,619},{143,10,157},{7,0,1953},{136,0,720},{138,0,203},{7,10,
> -2008},{9,10,337},{138,10,517},{6,0,326},{7,0,677},{137,0,425},{139,11,81},{7,0,
> -
> 1316},{7,0,1412},{7,0,1839},{9,0,589},{11,0,241},{11,0,676},{11,0,811},{11,0,891
> -},{12,0,140},{12,0,346},{12,0,479},{13,0,140},{13,0,381},{14,0,188},{18,0,30},{
> -
> 148,0,108},{5,0,416},{6,10,86},{6,10,603},{7,10,292},{7,10,561},{8,10,257},{8,10
> -,382},{9,10,721},{9,10,778},{11,10,581},{140,10,466},{4,10,486},{133,10,491},{
> -
> 134,0,1300},{132,10,72},{7,0,847},{6,10,265},{7,11,430},{139,11,46},{5,11,602},{
> -
> 6,11,106},{7,11,1786},{7,11,1821},{7,11,2018},{9,11,418},{137,11,763},{5,0,358},
> -{7,0,535},{7,0,1184},{10,0,662},{13,0,212},{13,0,304},{13,0,333},{145,0,98},{5,
> -11,65},{6,11,416},{7,11,1720},{7,11,1924},{8,11,677},{10,11,109},{11,11,14},{11,
> -
> 11,70},{11,11,569},{11,11,735},{15,11,153},{148,11,80},{6,0,1823},{8,0,839},{8,0
> -,852},{8,0,903},{10,0,940},{12,0,707},{140,0,775},{135,11,1229},{6,0,1522},{140,
> -0,654},{136,11,595},{139,0,163},{141,0,314},{132,0,978},{4,0,601},{6,0,2035},{
> -137,10,234},{5,10,815},{6,10,1688},{134,10,1755},{133,0,946},{136,0,434},{6,10,
> -197},{136,10,205},{7,0,411},{7,0,590},{8,0,631},{9,0,323},{10,0,355},{11,0,491},
> -{12,0,143},{12,0,402},{13,0,73},{14,0,408},{15,0,107},{146,0,71},{7,0,1467},{8,0
> -,328},{10,0,544},{11,0,955},{12,0,13},{13,0,320},{145,0,83},{142,0,410},{11,0,
> -511},{13,0,394},{14,0,298},{14,0,318},{146,0,103},{6,10,452},{7,10,312},{138,10,
> -
> 219},{138,10,589},{4,10,333},{9,10,176},{12,10,353},{141,10,187},{135,11,329},{
> -
> 132,11,469},{5,0,835},{134,0,483},{134,11,1743},{5,11,929},{6,11,340},{8,11,376}
> -
> ,{136,11,807},{134,10,1685},{132,0,677},{5,11,218},{7,11,1610},{138,11,83},{5,1
> 1
> -,571},{135,11,1842},{132,11,455},{137,0,70},{135,0,1405},{7,10,135},{8,10,7},{8,
> -10,62},{9,10,243},{10,10,658},{10,10,697},{11,10,456},{139,10,756},{9,10,395},{
> -138,10,79},{137,0,108},{6,11,161},{7,11,372},{137,11,597},{132,11,349},{132,0,
> -777},{132,0,331},{135,10,631},{133,0,747},{6,11,432},{6,11,608},{139,11,322},{
> -138,10,835},{5,11,468},{7,11,1809},{10,11,325},{11,11,856},{12,11,345},{143,11,
> -104},{133,11,223},{7,10,406},{7,10,459},{8,10,606},{139,10,726},{132,11,566},{
> -
> 142,0,68},{4,11,59},{135,11,1394},{6,11,436},{139,11,481},{4,11,48},{5,11,271},{
> -
> 135,11,953},{139,11,170},{5,11,610},{136,11,457},{133,11,755},{135,11,1217},{1
> 33
> -
> ,10,612},{132,11,197},{132,0,505},{4,10,372},{7,10,482},{8,10,158},{9,10,602},{9
> -
> ,10,615},{10,10,245},{10,10,678},{10,10,744},{11,10,248},{139,10,806},{133,0,32
> 6
> -},{5,10,854},{135,10,1991},{4,0,691},{146,0,16},{6,0,628},{9,0,35},{10,0,680},{
> -10,0,793},{11,0,364},{13,0,357},{143,0,164},{138,0,654},{6,0,32},{7,0,385},{7,0,
> -757},{7,0,1916},{8,0,37},{8,0,94},{8,0,711},{9,0,541},{10,0,162},{10,0,795},{11,
> -0,989},{11,0,1010},{12,0,14},{142,0,308},{133,11,217},{6,0,152},{6,0,349},{6,0,
> -1682},{7,0,1252},{8,0,112},{9,0,435},{9,0,668},{10,0,290},{10,0,319},{10,0,815},
> -{11,0,180},{11,0,837},{12,0,240},{13,0,152},{13,0,219},{142,0,158},{4,0,581},{
> -134,0,726},{5,10,195},{135,10,1685},{6,0,126},{7,0,573},{8,0,397},{142,0,44},{
> -138,0,89},{7,10,1997},{8,10,730},{139,10,1006},{134,0,1531},{134,0,1167},{5,0,
> -926},{12,0,203},{133,10,751},{4,11,165},{7,11,1398},{135,11,1829},{7,0,1232},{
> -137,0,531},{135,10,821},{134,0,943},{133,0,670},{4,0,880},{139,0,231},{134,0,
> -1617},{135,0,1957},{5,11,9},{7,11,297},{7,11,966},{140,11,306},{6,0,975},{134,0,
> -985},{5,10,950},{5,10,994},{134,10,351},{12,11,21},{151,11,7},{5,11,146},{6,11,
> -
> 411},{138,11,721},{7,0,242},{135,0,1942},{6,11,177},{135,11,467},{5,0,421},{7,1
> 0
> -
> ,47},{137,10,684},{5,0,834},{7,0,1202},{8,0,14},{9,0,481},{137,0,880},{138,0,465
> -},{6,0,688},{9,0,834},{132,10,350},{132,0,855},{4,0,357},{6,0,172},{7,0,143},{
> -137,0,413},{133,11,200},{132,0,590},{7,10,1812},{13,10,259},{13,10,356},{14,10,
> -
> 242},{147,10,114},{133,10,967},{11,0,114},{4,10,473},{7,10,623},{8,10,808},{9,1
> 0
> -
> ,871},{9,10,893},{11,10,431},{12,10,112},{12,10,217},{12,10,243},{12,10,562},{1
> 2
> -
> ,10,663},{12,10,683},{13,10,141},{13,10,197},{13,10,227},{13,10,406},{13,10,487}
> -,{14,10,156},{14,10,203},{14,10,224},{14,10,256},{18,10,58},{150,10,0},{138,10,
> -286},{4,10,222},{7,10,286},{136,10,629},{5,0,169},{7,0,333},{136,0,45},{134,11,
> -481},{132,0,198},{4,0,24},{5,0,140},{5,0,185},{7,0,1500},{11,0,565},{11,0,838},{
> -4,11,84},{7,11,1482},{10,11,76},{138,11,142},{133,0,585},{141,10,306},{133,11,
> -
> 1015},{4,11,315},{5,11,507},{135,11,1370},{136,10,146},{6,0,691},{134,0,1503},{
> 4
> -
> ,0,334},{133,0,593},{4,10,465},{135,10,1663},{142,11,173},{135,0,913},{12,0,116}
> -
> ,{134,11,1722},{134,0,1360},{132,0,802},{8,11,222},{8,11,476},{9,11,238},{11,11,
> -516},{11,11,575},{15,11,109},{146,11,100},{6,0,308},{9,0,673},{7,10,138},{7,10,
> -517},{139,10,238},{132,0,709},{6,0,1876},{6,0,1895},{9,0,994},{9,0,1006},{12,0,
> -829},{12,0,888},{12,0,891},{146,0,185},{148,10,94},{4,0,228},{133,0,897},{7,0,
> -
> 1840},{5,10,495},{7,10,834},{9,10,733},{139,10,378},{133,10,559},{6,10,21},{6,1
> 0
> -,1737},{7,10,1444},{136,10,224},{4,0,608},{133,0,497},{6,11,40},{135,11,1781},{
> -
> 134,0,1573},{135,0,2039},{6,0,540},{136,0,136},{4,0,897},{5,0,786},{133,10,519},
> -{6,0,1878},{6,0,1884},{9,0,938},{9,0,948},{9,0,955},{9,0,973},{9,0,1012},{12,0,
> -
> 895},{12,0,927},{143,0,254},{134,0,1469},{133,0,999},{4,0,299},{135,0,1004},{4,
> 0
> -
> ,745},{133,0,578},{136,11,574},{133,0,456},{134,0,1457},{7,0,1679},{132,10,402},
> -{7,0,693},{8,0,180},{12,0,163},{8,10,323},{136,10,479},{11,10,580},{142,10,201},
> -{5,10,59},{135,10,672},{132,11,354},{146,10,34},{4,0,755},{135,11,1558},{7,0,
> -1740},{146,0,48},{4,10,85},{135,10,549},{139,0,338},{133,10,94},{134,0,1091},{
> -
> 135,11,469},{12,0,695},{12,0,704},{20,0,113},{5,11,830},{14,11,338},{148,11,81},
> -{135,0,1464},{6,10,11},{135,10,187},{135,0,975},{13,0,335},{132,10,522},{134,0,
> -1979},{5,11,496},{135,11,203},{4,10,52},{135,10,661},{7,0,1566},{8,0,269},{9,0,
> -212},{9,0,718},{14,0,15},{14,0,132},{142,0,227},{4,0,890},{5,0,805},{5,0,819},{5
> -,0,961},{6,0,396},{6,0,1631},{6,0,1678},{7,0,1967},{7,0,2041},{9,0,630},{11,0,8}
> -,{11,0,1019},{12,0,176},{13,0,225},{14,0,292},{21,0,24},{4,10,383},{133,10,520},
> -
> {134,11,547},{135,11,1748},{5,11,88},{137,11,239},{146,11,128},{7,11,650},{135,
> -11,1310},{4,10,281},{5,10,38},{7,10,194},{7,10,668},{7,10,1893},{137,10,397},{
> -
> 135,0,1815},{9,10,635},{139,10,559},{7,0,1505},{10,0,190},{10,0,634},{11,0,792},
> -{12,0,358},{140,0,447},{5,0,0},{6,0,536},{7,0,604},{13,0,445},{145,0,126},{7,11,
> -1076},{9,11,80},{11,11,78},{11,11,421},{11,11,534},{140,11,545},{8,0,966},{10,0,
> -1023},{14,11,369},{146,11,72},{135,11,1641},{6,0,232},{6,0,412},{7,0,1074},{8,0,
> -9},{8,0,157},{8,0,786},{9,0,196},{9,0,352},{9,0,457},{10,0,337},{11,0,232},{11,0
> -,877},{12,0,480},{140,0,546},{135,0,958},{4,0,382},{136,0,579},{4,0,212},{135,0,
> -1206},{4,11,497},{5,11,657},{135,11,1584},{132,0,681},{8,0,971},{138,0,965},{5,
> -10,448},{136,10,535},{14,0,16},{146,0,44},{11,0,584},{11,0,616},{14,0,275},{11,
> -
> 11,584},{11,11,616},{142,11,275},{136,11,13},{7,10,610},{135,10,1501},{7,11,64
> 2}
> -,{8,11,250},{11,11,123},{11,11,137},{13,11,48},{142,11,95},{133,0,655},{17,0,67}
> -
> ,{147,0,74},{134,0,751},{134,0,1967},{6,0,231},{136,0,423},{5,0,300},{138,0,101
> 6
> -},{4,10,319},{5,10,699},{138,10,673},{6,0,237},{7,0,611},{8,0,100},{9,0,416},{11
> -,0,335},{12,0,173},{18,0,101},{6,10,336},{8,10,552},{9,10,285},{10,10,99},{139,
> -10,568},{134,0,1370},{7,10,1406},{9,10,218},{141,10,222},{133,10,256},{135,0,
> -1208},{14,11,213},{148,11,38},{6,0,1219},{135,11,1642},{13,0,417},{14,0,129},{
> -
> 143,0,15},{10,11,545},{140,11,301},{17,10,39},{148,10,36},{133,0,199},{4,11,904}
> -,{133,11,794},{12,0,427},{146,0,38},{134,0,949},{8,0,665},{135,10,634},{132,10,
> -
> 618},{135,10,259},{132,10,339},{133,11,761},{141,10,169},{132,10,759},{5,0,688
> },
> -
> {7,0,539},{135,0,712},{7,11,386},{138,11,713},{134,0,1186},{6,11,7},{6,11,35},{7
> -
> ,11,147},{7,11,1069},{7,11,1568},{7,11,1575},{7,11,1917},{8,11,43},{8,11,208},{9
> -,11,128},{9,11,866},{10,11,20},{11,11,981},{147,11,33},{7,11,893},{8,10,482},{
> -
> 141,11,424},{6,0,312},{6,0,1715},{10,0,584},{11,0,546},{11,0,692},{12,0,259},{12
> -,0,295},{13,0,46},{141,0,154},{5,10,336},{6,10,341},{6,10,478},{6,10,1763},{136,
> -10,386},{137,0,151},{132,0,588},{152,0,4},{6,11,322},{9,11,552},{11,11,274},{13,
> -11,209},{13,11,499},{14,11,85},{15,11,126},{145,11,70},{135,10,73},{4,0,231},{5,
> -0,61},{6,0,104},{7,0,729},{7,0,964},{7,0,1658},{140,0,414},{6,0,263},{138,0,757}
> -,{135,10,1971},{4,0,612},{133,0,561},{132,0,320},{135,10,1344},{8,11,83},{8,11,
> -817},{9,11,28},{9,11,29},{9,11,885},{10,11,387},{11,11,633},{11,11,740},{13,11,
> -
> 235},{13,11,254},{15,11,143},{143,11,146},{5,10,396},{134,10,501},{140,11,49},{
> -132,0,225},{4,10,929},{5,10,799},{8,10,46},{136,10,740},{4,0,405},{7,0,817},{14,
> -0,58},{17,0,37},{146,0,124},{133,0,974},{4,11,412},{133,11,581},{4,10,892},{133,
> -10,770},{4,0,996},{134,0,2026},{4,0,527},{5,0,235},{7,0,1239},{11,0,131},{140,0,
> -370},{9,0,16},{13,0,386},{135,11,421},{7,0,956},{7,0,1157},{7,0,1506},{7,0,1606}
> -,{7,0,1615},{7,0,1619},{7,0,1736},{7,0,1775},{8,0,590},{9,0,324},{9,0,736},{9,0,
> -774},{9,0,776},{9,0,784},{10,0,567},{10,0,708},{11,0,518},{11,0,613},{11,0,695},
> -
> {11,0,716},{11,0,739},{11,0,770},{11,0,771},{11,0,848},{11,0,857},{11,0,931},{11
> -,0,947},{12,0,326},{12,0,387},{12,0,484},{12,0,528},{12,0,552},{12,0,613},{13,0,
> -
> 189},{13,0,256},{13,0,340},{13,0,432},{13,0,436},{13,0,440},{13,0,454},{14,0,174
> -
> },{14,0,220},{14,0,284},{14,0,390},{145,0,121},{135,10,158},{9,0,137},{138,0,221
> -
> },{4,11,110},{10,11,415},{10,11,597},{142,11,206},{141,11,496},{135,11,205},{15
> 1
> -
> ,10,25},{135,11,778},{7,11,1656},{7,10,2001},{9,11,369},{10,11,338},{10,11,490},
> -{11,11,154},{11,11,545},{11,11,775},{13,11,77},{141,11,274},{4,11,444},{10,11,
> -
> 146},{140,11,9},{7,0,390},{138,0,140},{135,0,1144},{134,0,464},{7,10,1461},{140,
> -
> 10,91},{132,10,602},{4,11,283},{135,11,1194},{5,0,407},{11,0,204},{11,0,243},{1
> 1
> -,0,489},{12,0,293},{19,0,37},{20,0,73},{150,0,38},{7,0,1218},{136,0,303},{5,0,
> -325},{8,0,5},{8,0,227},{9,0,105},{10,0,585},{12,0,614},{4,10,13},{5,10,567},{7,
> -
> 10,1498},{9,10,124},{11,10,521},{140,10,405},{135,10,1006},{7,0,800},{10,0,12},
> {
> -
> 134,11,1720},{135,0,1783},{132,10,735},{138,10,812},{4,10,170},{135,10,323},{6
> ,0
> -
> ,621},{13,0,504},{144,0,89},{5,10,304},{135,10,1403},{137,11,216},{6,0,920},{6,0
> -,1104},{9,11,183},{139,11,286},{4,0,376},{133,10,742},{134,0,218},{8,0,641},{11,
> -
> 0,388},{140,0,580},{7,0,454},{7,0,782},{8,0,768},{140,0,686},{137,11,33},{133,10
> -,111},{144,0,0},{10,0,676},{140,0,462},{6,0,164},{136,11,735},{133,10,444},{150,
> -
> 0,50},{7,11,1862},{12,11,491},{12,11,520},{13,11,383},{14,11,244},{146,11,12},{
> 5
> -
> ,11,132},{9,11,486},{9,11,715},{10,11,458},{11,11,373},{11,11,668},{11,11,795},{
> -11,11,897},{12,11,272},{12,11,424},{12,11,539},{12,11,558},{14,11,245},{14,11,
> -263},{14,11,264},{14,11,393},{142,11,403},{8,10,123},{15,10,6},{144,10,7},{6,0,
> -285},{8,0,654},{11,0,749},{12,0,190},{12,0,327},{13,0,120},{13,0,121},{13,0,327}
> -,{15,0,47},{146,0,40},{5,11,8},{6,11,89},{6,11,400},{7,11,1569},{7,11,1623},{7,
> -11,1850},{8,11,218},{8,11,422},{9,11,570},{138,11,626},{6,11,387},{7,11,882},{
> -
> 141,11,111},{6,0,343},{7,0,195},{9,0,226},{10,0,197},{10,0,575},{11,0,502},{11,0
> -,899},{6,11,224},{7,11,877},{137,11,647},{5,10,937},{135,10,100},{135,11,790},{
> -
> 150,0,29},{147,0,8},{134,0,1812},{149,0,8},{135,11,394},{7,0,1125},{9,0,143},{11
> -,0,61},{14,0,405},{150,0,21},{10,11,755},{147,11,29},{9,11,378},{141,11,162},{
> -135,10,922},{5,10,619},{133,10,698},{134,0,1327},{6,0,1598},{137,0,575},{9,11,
> -569},{12,11,12},{12,11,81},{12,11,319},{13,11,69},{14,11,259},{16,11,87},{17,11,
> -
> 1},{17,11,21},{17,11,24},{18,11,15},{18,11,56},{18,11,59},{18,11,127},{18,11,154
> -
> },{19,11,19},{148,11,31},{6,0,895},{135,11,1231},{5,0,959},{7,11,124},{136,11,38
> -},{5,11,261},{7,11,78},{7,11,199},{8,11,815},{9,11,126},{138,11,342},{5,10,917},
> -
> {134,10,1659},{7,0,1759},{5,11,595},{135,11,1863},{136,0,173},{134,0,266},{142,
> 0
> -,261},{132,11,628},{5,10,251},{5,10,956},{8,10,268},{9,10,214},{146,10,142},{7,
> -
> 11,266},{136,11,804},{135,11,208},{6,11,79},{7,11,1021},{135,11,1519},{11,11,7
> 04
> -
> },{141,11,396},{5,10,346},{5,10,711},{136,10,390},{136,11,741},{134,11,376},{13
> 4
> -
> ,0,1427},{6,0,1033},{6,0,1217},{136,0,300},{133,10,624},{6,11,100},{7,11,244},{7
> -,11,632},{7,11,1609},{8,11,178},{8,11,638},{141,11,58},{6,0,584},{5,10,783},{7,
> -10,1998},{135,10,2047},{5,0,427},{5,0,734},{7,0,478},{136,0,52},{7,0,239},{11,0,
> -217},{142,0,165},{134,0,1129},{6,0,168},{6,0,1734},{7,0,20},{7,0,1056},{8,0,732}
> -,{9,0,406},{9,0,911},{138,0,694},{132,10,594},{133,11,791},{7,11,686},{8,11,33},
> -{8,11,238},{10,11,616},{11,11,467},{11,11,881},{13,11,217},{13,11,253},{142,11,
> -
> 268},{137,11,476},{134,0,418},{133,0,613},{132,0,632},{132,11,447},{7,0,32},{7,
> 0
> -,984},{8,0,85},{8,0,709},{9,0,579},{9,0,847},{9,0,856},{10,0,799},{11,0,258},{11
> -,0,1007},{12,0,331},{12,0,615},{13,0,188},{13,0,435},{14,0,8},{15,0,165},{16,0,
> -27},{20,0,40},{144,11,35},{4,11,128},{5,11,415},{6,11,462},{7,11,294},{7,11,578}
> -,{10,11,710},{139,11,86},{5,0,694},{136,0,909},{7,0,1109},{11,0,7},{5,10,37},{6,
> -10,39},{6,10,451},{7,10,218},{7,10,1166},{7,10,1687},{8,10,662},{144,10,2},{136,
> -
> 11,587},{6,11,427},{7,11,1018},{138,11,692},{4,11,195},{6,10,508},{135,11,802},
> {
> -4,0,167},{135,0,82},{5,0,62},{6,0,24},{6,0,534},{7,0,74},{7,0,678},{7,0,684},{7,
> -0,1043},{7,0,1072},{8,0,280},{8,0,541},{8,0,686},{9,0,258},{10,0,519},{11,0,252}
> -,{140,0,282},{138,0,33},{4,0,359},{133,11,738},{7,0,980},{9,0,328},{13,0,186},{
> -
> 13,0,364},{7,10,635},{7,10,796},{8,10,331},{9,10,330},{9,10,865},{10,10,119},{10
> -
> ,10,235},{11,10,111},{11,10,129},{11,10,240},{12,10,31},{12,10,66},{12,10,222},{
> -
> 12,10,269},{12,10,599},{12,10,684},{12,10,689},{12,10,691},{142,10,345},{137,1
> 0,
> -
> 527},{6,0,596},{7,0,585},{135,10,702},{134,11,1683},{133,0,211},{6,0,145},{141,
> 0
> -,336},{134,0,1130},{7,0,873},{6,10,37},{7,10,1666},{8,10,195},{8,10,316},{9,10,
> -
> 178},{9,10,276},{9,10,339},{9,10,536},{10,10,102},{10,10,362},{10,10,785},{11,1
> 0
> -,55},{11,10,149},{11,10,773},{13,10,416},{13,10,419},{14,10,38},{14,10,41},{142,
> -10,210},{8,0,840},{136,0,841},{132,0,263},{5,11,3},{8,11,578},{9,11,118},{10,11,
> -
> 705},{12,11,383},{141,11,279},{132,0,916},{133,11,229},{133,10,645},{15,0,155},
> {
> -
> 16,0,79},{8,11,102},{10,11,578},{10,11,672},{12,11,496},{13,11,408},{14,11,121},
> -{145,11,106},{4,0,599},{5,0,592},{6,0,1634},{7,0,5},{7,0,55},{7,0,67},{7,0,97},{
> -7,0,691},{7,0,979},{7,0,1600},{7,0,1697},{8,0,207},{8,0,214},{8,0,231},{8,0,294}
> -,{8,0,336},{8,0,428},{8,0,471},{8,0,622},{8,0,626},{8,0,679},{8,0,759},{8,0,829}
> -,{9,0,11},{9,0,246},{9,0,484},{9,0,573},{9,0,706},{9,0,762},{9,0,798},{9,0,855},
> -{9,0,870},{9,0,912},{10,0,303},{10,0,335},{10,0,424},{10,0,461},{10,0,543},{10,0
> -
> ,759},{10,0,814},{11,0,59},{11,0,199},{11,0,235},{11,0,590},{11,0,631},{11,0,929
> -},{11,0,963},{11,0,987},{12,0,114},{12,0,182},{12,0,226},{12,0,332},{12,0,439},{
> -12,0,575},{12,0,598},{12,0,675},{13,0,8},{13,0,125},{13,0,194},{13,0,287},{14,0,
> -197},{14,0,383},{15,0,53},{17,0,63},{19,0,46},{19,0,98},{19,0,106},{148,0,85},{7
> -
> ,0,1356},{132,10,290},{6,10,70},{7,10,1292},{10,10,762},{139,10,288},{150,11,55}
> -,{4,0,593},{8,11,115},{8,11,350},{9,11,489},{10,11,128},{11,11,306},{12,11,373},
> -
> {14,11,30},{17,11,79},{147,11,80},{135,11,1235},{134,0,1392},{4,11,230},{133,11,
> -
> 702},{147,0,126},{7,10,131},{7,10,422},{8,10,210},{140,10,573},{134,0,1179},{13
> 9
> -
> ,11,435},{139,10,797},{134,11,1728},{4,0,162},{18,11,26},{19,11,42},{20,11,43},{
> -
> 21,11,0},{23,11,27},{152,11,14},{132,10,936},{6,0,765},{5,10,453},{134,10,441},{
> -
> 133,0,187},{135,0,1286},{6,0,635},{6,0,904},{6,0,1210},{134,0,1489},{4,0,215},{8
> -,0,890},{9,0,38},{10,0,923},{11,0,23},{11,0,127},{139,0,796},{6,0,1165},{134,0,
> -
> 1306},{7,0,716},{13,0,97},{141,0,251},{132,10,653},{136,0,657},{146,10,80},{5,1
> 1
> -,622},{7,11,1032},{11,11,26},{11,11,213},{11,11,707},{12,11,380},{13,11,226},{
> -141,11,355},{6,0,299},{5,11,70},{6,11,334},{9,11,171},{11,11,637},{12,11,202},{
> -
> 14,11,222},{145,11,42},{142,0,134},{4,11,23},{5,11,313},{5,11,1014},{6,11,50},{6
> -,11,51},{7,11,142},{7,11,384},{9,11,783},{139,11,741},{4,11,141},{7,11,559},{8,
> -
> 11,640},{9,11,460},{12,11,183},{141,11,488},{136,11,614},{7,10,1368},{8,10,232},
> -
> {8,10,361},{10,10,682},{138,10,742},{137,10,534},{6,0,1082},{140,0,658},{137,10,
> -27},{135,0,2002},{142,10,12},{4,0,28},{5,0,440},{7,0,248},{11,0,833},{140,0,344}
> -
> ,{7,10,736},{139,10,264},{134,10,1657},{134,0,1654},{138,0,531},{5,11,222},{9,1
> 1
> -,140},{138,11,534},{6,0,634},{6,0,798},{134,0,840},{138,11,503},{135,10,127},{
> -
> 133,0,853},{5,11,154},{7,11,1491},{10,11,379},{138,11,485},{6,0,249},{7,0,1234},
> -
> {139,0,573},{133,11,716},{7,11,1570},{140,11,542},{136,10,364},{138,0,527},{4,1
> 1
> -
> ,91},{5,11,388},{5,11,845},{6,11,206},{6,11,252},{6,11,365},{7,11,136},{7,11,531
> -},{8,11,264},{136,11,621},{134,0,1419},{135,11,1441},{7,0,49},{7,0,392},{8,0,20}
> -,{8,0,172},{8,0,690},{9,0,383},{9,0,845},{10,0,48},{11,0,293},{11,0,832},{11,0,
> -920},{11,0,984},{141,0,221},{5,0,858},{133,0,992},{5,0,728},{137,10,792},{5,10,
> -
> 909},{9,10,849},{138,10,805},{7,0,525},{7,0,1579},{8,0,497},{136,0,573},{6,0,268
> -},{137,0,62},{135,11,576},{134,0,1201},{5,11,771},{5,11,863},{5,11,898},{6,11,
> -
> 1632},{6,11,1644},{134,11,1780},{133,11,331},{7,0,193},{7,0,1105},{10,0,495},{7,
> -10,397},{8,10,124},{8,10,619},{9,10,305},{11,10,40},{12,10,349},{13,10,134},{13,
> -
> 10,295},{14,10,155},{15,10,120},{146,10,105},{138,0,106},{6,0,859},{5,11,107},{
> 7
> -
> ,11,201},{136,11,518},{6,11,446},{135,11,1817},{13,0,23},{4,10,262},{135,10,342}
> -,{133,10,641},{137,11,851},{6,0,925},{137,0,813},{132,11,504},{6,0,613},{136,0,
> -223},{4,10,99},{6,10,250},{6,10,346},{8,10,127},{138,10,81},{136,0,953},{132,10,
> -
> 915},{139,11,892},{5,10,75},{9,10,517},{10,10,470},{12,10,155},{141,10,224},{4,
> 0
> -
> ,666},{7,0,1017},{7,11,996},{138,11,390},{5,11,883},{133,11,975},{14,10,83},{14
> 2
> -,11,83},{4,0,670},{5,11,922},{134,11,1707},{135,0,216},{9,0,40},{11,0,136},{135,
> -
> 11,787},{5,10,954},{5,11,993},{7,11,515},{137,11,91},{139,0,259},{7,0,1114},{9,0
> -,310},{9,0,682},{10,0,440},{13,0,40},{6,10,304},{8,10,418},{11,10,341},{139,10,
> -675},{14,0,296},{9,10,410},{139,10,425},{10,11,377},{12,11,363},{13,11,68},{13,
> -
> 11,94},{14,11,108},{142,11,306},{7,0,1401},{135,0,1476},{4,0,296},{6,0,475},{7,0
> -,401},{7,0,1410},{7,0,1594},{7,0,1674},{8,0,63},{8,0,660},{137,0,74},{4,0,139},{
> -
> 4,0,388},{140,0,188},{132,0,797},{132,11,766},{5,11,103},{7,11,921},{8,11,580},{
> -
> 8,11,593},{8,11,630},{138,11,28},{4,11,911},{5,11,867},{133,11,1013},{134,10,14}
> -,{134,0,1572},{134,10,1708},{21,0,39},{5,10,113},{6,10,243},{7,10,1865},{11,10,
> -
> 161},{16,10,37},{145,10,99},{7,11,1563},{141,11,182},{5,11,135},{6,11,519},{7,1
> 1
> -
> ,1722},{10,11,271},{11,11,261},{145,11,54},{132,10,274},{134,0,1594},{4,11,300},
> -{5,11,436},{135,11,484},{4,0,747},{6,0,290},{7,0,649},{7,0,1479},{135,0,1583},{
> -
> 133,11,535},{147,11,82},{133,0,232},{137,0,887},{135,10,166},{136,0,521},{4,0,1
> 4
> -},{7,0,472},{7,0,1801},{10,0,748},{141,0,458},{134,0,741},{134,0,992},{16,0,111}
> -,{137,10,304},{4,0,425},{5,11,387},{7,11,557},{12,11,547},{142,11,86},{135,11,
> -1747},{5,10,654},{135,11,1489},{7,0,789},{4,11,6},{5,11,708},{136,11,75},{6,10,
> -
> 273},{10,10,188},{13,10,377},{146,10,77},{6,0,1593},{4,11,303},{7,11,619},{10,1
> 1
> -
> ,547},{10,11,687},{11,11,122},{140,11,601},{134,0,1768},{135,10,410},{138,11,7
> 72
> -
> },{11,0,233},{139,10,524},{5,0,943},{134,0,1779},{134,10,1785},{136,11,529},{13
> 2
> -,0,955},{5,0,245},{6,0,576},{7,0,582},{136,0,225},{132,10,780},{142,0,241},{134,
> -
> 0,1943},{4,11,106},{7,11,310},{7,11,1785},{10,11,690},{139,11,717},{134,0,1284},
> -
> {5,11,890},{133,11,988},{6,11,626},{142,11,431},{10,11,706},{145,11,32},{137,11,
> -
> 332},{132,11,698},{135,0,709},{5,10,948},{138,11,17},{136,0,554},{134,0,1564},{
> -
> 139,10,941},{132,0,443},{134,0,909},{134,11,84},{142,0,280},{4,10,532},{5,10,70
> 6
> -
> },{135,10,662},{132,0,729},{5,10,837},{6,10,1651},{139,10,985},{135,10,1861},{4,
> -0,348},{152,11,3},{5,11,986},{6,11,130},{7,11,1582},{8,11,458},{10,11,101},{10,
> -11,318},{138,11,823},{134,0,758},{4,0,298},{137,0,848},{4,10,330},{7,10,933},{7,
> -
> 10,2012},{136,10,292},{7,11,1644},{137,11,129},{6,0,1422},{9,0,829},{135,10,76
> 7}
> -,{5,0,164},{7,0,121},{142,0,189},{7,0,812},{7,0,1261},{7,0,1360},{9,0,632},{140,
> -
> 0,352},{135,11,1788},{139,0,556},{135,11,997},{145,10,114},{4,0,172},{9,0,611},
> {
> -
> 10,0,436},{12,0,673},{13,0,255},{137,10,883},{11,0,530},{138,10,274},{133,0,844}
> -,{134,0,984},{13,0,232},{18,0,35},{4,10,703},{135,10,207},{132,10,571},{9,0,263}
> -,{10,0,147},{138,0,492},{7,11,1756},{137,11,98},{5,10,873},{5,10,960},{8,10,823}
> -
> ,{137,10,881},{133,0,537},{132,0,859},{7,11,1046},{139,11,160},{137,0,842},{139,
> -10,283},{5,10,33},{6,10,470},{139,10,424},{6,11,45},{7,11,433},{8,11,129},{9,11,
> -21},{10,11,392},{11,11,79},{12,11,499},{13,11,199},{141,11,451},{135,0,1291},{
> -
> 135,10,1882},{7,11,558},{136,11,353},{134,0,1482},{5,0,230},{5,0,392},{6,0,420},
> -{9,0,568},{140,0,612},{6,0,262},{7,10,90},{7,10,664},{7,10,830},{7,10,1380},{7,
> -10,2025},{8,11,81},{8,10,448},{8,10,828},{9,11,189},{9,11,201},{11,11,478},{11,
> -11,712},{141,11,338},{142,0,31},{5,11,353},{151,11,26},{132,0,753},{4,0,0},{5,0,
> -41},{7,0,1459},{7,0,1469},{7,0,1859},{9,0,549},{139,0,905},{9,10,417},{137,10,
> -
> 493},{135,11,1113},{133,0,696},{141,11,448},{134,10,295},{132,0,834},{4,0,771},
> {
> -
> 5,10,1019},{6,11,25},{7,11,855},{7,11,1258},{144,11,32},{134,0,1076},{133,0,921}
> -,{133,0,674},{4,11,4},{7,11,1118},{7,11,1320},{7,11,1706},{8,11,277},{9,11,622},
> -{10,11,9},{11,11,724},{12,11,350},{12,11,397},{13,11,28},{13,11,159},{15,11,89},
> -
> {18,11,5},{19,11,9},{20,11,34},{150,11,47},{134,10,208},{6,0,444},{136,0,308},{6
> -,0,180},{7,0,1137},{8,0,751},{139,0,805},{4,0,183},{7,0,271},{11,0,824},{11,0,
> -952},{13,0,278},{13,0,339},{13,0,482},{14,0,424},{148,0,99},{7,11,317},{135,11,
> -569},{4,0,19},{5,0,477},{5,0,596},{6,0,505},{7,0,1221},{11,0,907},{12,0,209},{
> -141,0,214},{135,0,1215},{6,0,271},{7,0,398},{8,0,387},{10,0,344},{7,10,448},{7,
> -
> 10,1629},{7,10,1813},{8,10,442},{9,10,710},{10,10,282},{138,10,722},{11,10,844},
> -
> {12,10,104},{140,10,625},{134,11,255},{133,10,787},{134,0,1645},{11,11,956},{1
> 51
> -,11,3},{6,0,92},{6,0,188},{7,0,209},{7,0,1269},{7,0,1524},{7,0,1876},{8,0,661},{
> -10,0,42},{10,0,228},{11,0,58},{11,0,1020},{12,0,58},{12,0,118},{141,0,32},{4,0,
> -459},{133,0,966},{4,11,536},{7,11,1141},{10,11,723},{139,11,371},{140,0,330},{
> -
> 134,0,1557},{7,11,285},{135,11,876},{136,10,491},{135,11,560},{6,0,18},{7,0,179}
> -,{7,0,932},{8,0,548},{8,0,757},{9,0,54},{9,0,65},{9,0,532},{9,0,844},{10,0,113},
> -
> {10,0,117},{10,0,315},{10,0,560},{10,0,622},{10,0,798},{11,0,153},{11,0,351},{11
> -,0,375},{12,0,78},{12,0,151},{12,0,392},{12,0,666},{14,0,248},{143,0,23},{6,0,
> -
> 1742},{132,11,690},{4,10,403},{5,10,441},{7,10,450},{10,10,840},{11,10,101},{12,
> -10,193},{141,10,430},{133,0,965},{134,0,182},{10,0,65},{10,0,488},{138,0,497},{
> -
> 135,11,1346},{6,0,973},{6,0,1158},{10,11,200},{19,11,2},{151,11,22},{4,11,190},{
> -133,11,554},{133,10,679},{7,0,328},{137,10,326},{133,11,1001},{9,0,588},{138,0,
> -260},{133,11,446},{135,10,1128},{135,10,1796},{147,11,119},{134,0,1786},{6,0,
> -1328},{6,0,1985},{8,0,962},{138,0,1017},{135,0,308},{11,0,508},{4,10,574},{7,10,
> -
> 350},{7,10,1024},{8,10,338},{9,10,677},{138,10,808},{138,11,752},{135,10,1081},
> {
> -
> 137,11,96},{7,10,1676},{135,10,2037},{136,0,588},{132,11,304},{133,0,614},{140
> ,0
> -,793},{136,0,287},{137,10,297},{141,10,37},{6,11,53},{6,11,199},{7,11,1408},{8,
> -11,32},{8,11,93},{9,11,437},{10,11,397},{10,11,629},{11,11,593},{11,11,763},{13,
> -
> 11,326},{145,11,35},{134,11,105},{9,11,320},{10,11,506},{138,11,794},{5,11,114},
> -
> {5,11,255},{141,11,285},{140,0,290},{7,11,2035},{8,11,19},{9,11,89},{138,11,831}
> -,{134,0,1136},{7,0,719},{8,0,796},{8,0,809},{8,0,834},{6,10,306},{7,10,1140},{7,
> -10,1340},{8,10,133},{138,10,449},{139,10,1011},{5,0,210},{6,0,213},{7,0,60},{10,
> -
> 0,364},{139,0,135},{5,0,607},{8,0,326},{136,0,490},{138,11,176},{132,0,701},{5,0
> -,472},{7,0,380},{137,0,758},{135,0,1947},{6,0,1079},{138,0,278},{138,11,391},{5,
> -10,329},{8,10,260},{139,11,156},{4,0,386},{7,0,41},{8,0,405},{8,0,728},{9,0,497}
> -,{11,0,110},{11,0,360},{15,0,37},{144,0,84},{5,0,46},{7,0,1452},{7,0,1480},{8,0,
> -
> 634},{140,0,472},{136,0,961},{4,0,524},{136,0,810},{10,0,238},{141,0,33},{132,1
> 0
> -
> ,657},{152,10,7},{133,0,532},{5,0,997},{135,10,1665},{7,11,594},{7,11,851},{7,11
> -,1858},{9,11,411},{9,11,574},{9,11,666},{9,11,737},{10,11,346},{10,11,712},{11,
> -
> 11,246},{11,11,432},{11,11,517},{11,11,647},{11,11,679},{11,11,727},{12,11,304},
> -{12,11,305},{12,11,323},{12,11,483},{12,11,572},{12,11,593},{12,11,602},{13,11,
> -
> 95},{13,11,101},{13,11,171},{13,11,315},{13,11,378},{13,11,425},{13,11,475},{14,
> -11,63},{14,11,380},{14,11,384},{15,11,133},{18,11,112},{148,11,72},{5,11,955},{
> -
> 136,11,814},{134,0,1301},{5,10,66},{7,10,1896},{136,10,288},{133,11,56},{134,1
> 0,
> -
> 1643},{6,0,1298},{148,11,100},{5,0,782},{5,0,829},{6,0,671},{6,0,1156},{6,0,1738
> -},{137,11,621},{4,0,306},{5,0,570},{7,0,1347},{5,10,91},{5,10,648},{5,10,750},{5
> -
> ,10,781},{6,10,54},{6,10,112},{6,10,402},{6,10,1732},{7,10,315},{7,10,749},{7,10
> -,1900},{9,10,78},{9,10,508},{10,10,611},{10,10,811},{11,10,510},{11,10,728},{13,
> -10,36},{14,10,39},{16,10,83},{17,10,124},{148,10,30},{8,10,570},{9,11,477},{141,
> -11,78},{4,11,639},{10,11,4},{10,10,322},{10,10,719},{11,10,407},{11,11,638},{12,
> -
> 11,177},{148,11,57},{7,0,1823},{139,0,693},{7,0,759},{5,11,758},{8,10,125},{8,10
> -,369},{8,10,524},{10,10,486},{11,10,13},{11,10,381},{11,10,736},{11,10,766},{11,
> -
> 10,845},{13,10,114},{13,10,292},{142,10,47},{7,0,1932},{6,10,1684},{6,10,1731},
> {
> -7,10,356},{8,10,54},{8,10,221},{9,10,225},{9,10,356},{10,10,77},{10,10,446},{10,
> -
> 10,731},{12,10,404},{141,10,491},{135,11,552},{135,11,1112},{4,0,78},{5,0,96},{
> 5
> -,0,182},{6,0,1257},{7,0,1724},{7,0,1825},{10,0,394},{10,0,471},{11,0,532},{14,0,
> -
> 340},{145,0,88},{139,11,328},{135,0,1964},{132,10,411},{4,10,80},{5,10,44},{137,
> -
> 11,133},{5,11,110},{6,11,169},{6,11,1702},{7,11,400},{8,11,538},{9,11,184},{9,11
> -,524},{140,11,218},{4,0,521},{5,10,299},{7,10,1083},{140,11,554},{6,11,133},{9,
> -11,353},{12,11,628},{146,11,79},{6,0,215},{7,0,584},{7,0,1028},{7,0,1473},{7,0,
> -1721},{9,0,424},{138,0,779},{7,0,857},{7,0,1209},{7,10,1713},{9,10,537},{10,10,
> -
> 165},{12,10,219},{140,10,561},{4,10,219},{6,11,93},{7,11,1422},{7,10,1761},{7,1
> 1
> -
> ,1851},{8,11,673},{9,10,86},{9,11,529},{140,11,43},{137,11,371},{136,0,671},{5,0
> -
> ,328},{135,0,918},{132,0,529},{9,11,25},{10,11,467},{138,11,559},{4,11,335},{13
> 5
> -,11,942},{134,0,716},{134,0,1509},{6,0,67},{7,0,258},{7,0,1630},{9,0,354},{9,0,
> -
> 675},{10,0,830},{14,0,80},{17,0,80},{140,10,428},{134,0,1112},{6,0,141},{7,0,225
> -},{9,0,59},{9,0,607},{10,0,312},{11,0,687},{12,0,555},{13,0,373},{13,0,494},{148
> -
> ,0,58},{133,10,514},{8,11,39},{10,11,773},{11,11,84},{12,11,205},{142,11,1},{8,0
> -,783},{5,11,601},{133,11,870},{136,11,594},{4,10,55},{5,10,301},{6,10,571},{14,
> -
> 10,49},{146,10,102},{132,11,181},{134,11,1652},{133,10,364},{4,11,97},{5,11,14
> 7}
> -,{6,11,286},{7,11,1362},{141,11,176},{4,10,76},{7,10,1550},{9,10,306},{9,10,430}
> -,{9,10,663},{10,10,683},{11,10,427},{11,10,753},{12,10,334},{12,10,442},{14,10,
> -258},{14,10,366},{143,10,131},{137,10,52},{6,0,955},{134,0,1498},{6,11,375},{7,
> -
> 11,169},{7,11,254},{136,11,780},{7,0,430},{11,0,46},{14,0,343},{142,11,343},{13
> 5
> -,0,1183},{5,0,602},{7,0,2018},{9,0,418},{9,0,803},{135,11,1447},{8,0,677},{135,
> -11,1044},{139,11,285},{4,10,656},{135,10,779},{135,10,144},{5,11,629},{135,11,
> -
> 1549},{135,10,1373},{138,11,209},{7,10,554},{7,10,605},{141,10,10},{5,10,838},{
> 5
> -
> ,10,841},{134,10,1649},{133,10,1012},{6,0,1357},{134,0,1380},{144,0,53},{6,0,59
> 0
> -},{7,10,365},{7,10,1357},{7,10,1497},{8,10,154},{141,10,281},{133,10,340},{132,
> -
> 11,420},{135,0,329},{147,11,32},{4,0,469},{10,11,429},{139,10,495},{8,10,261},{
> 9
> -
> ,10,144},{9,10,466},{10,10,370},{12,10,470},{13,10,144},{142,10,348},{142,0,460}
> -,{4,11,325},{9,10,897},{138,11,125},{6,0,1743},{6,10,248},{9,10,546},{10,10,535}
> -,{11,10,681},{141,10,135},{4,0,990},{5,0,929},{6,0,340},{8,0,376},{8,0,807},{8,0
> -,963},{8,0,980},{138,0,1007},{134,0,1603},{140,0,250},{4,11,714},{133,11,469},{
> -134,10,567},{136,10,445},{5,0,218},{7,0,1610},{8,0,646},{10,0,83},{11,11,138},{
> -
> 140,11,40},{7,0,1512},{135,0,1794},{135,11,1216},{11,0,0},{16,0,78},{132,11,718}
> -,{133,0,571},{132,0,455},{134,0,1012},{5,11,124},{5,11,144},{6,11,548},{7,11,15}
> -,{7,11,153},{137,11,629},{142,11,10},{6,11,75},{7,11,1531},{8,11,416},{9,11,240}
> -
> ,{9,11,275},{10,11,100},{11,11,658},{11,11,979},{12,11,86},{13,11,468},{14,11,6
> 6
> -},{14,11,207},{15,11,20},{15,11,25},{144,11,58},{132,10,577},{5,11,141},{5,11,
> -915},{6,11,1783},{7,11,211},{7,11,698},{7,11,1353},{9,11,83},{9,11,281},{10,11,
> -
> 376},{10,11,431},{11,11,543},{12,11,664},{13,11,280},{13,11,428},{14,11,61},{14,
> -11,128},{17,11,52},{145,11,81},{6,0,161},{7,0,372},{137,0,597},{132,0,349},{10,
> -11,702},{139,11,245},{134,0,524},{134,10,174},{6,0,432},{9,0,751},{139,0,322},{
> -147,11,94},{4,11,338},{133,11,400},{5,0,468},{10,0,325},{11,0,856},{12,0,345},{
> -
> 143,0,104},{133,0,223},{132,0,566},{4,11,221},{5,11,659},{5,11,989},{7,11,697},{
> -
> 7,11,1211},{138,11,284},{135,11,1070},{4,0,59},{135,0,1394},{6,0,436},{11,0,481}
> -,{5,10,878},{133,10,972},{4,0,48},{5,0,271},{135,0,953},{5,0,610},{136,0,457},{4
> -
> ,0,773},{5,0,618},{137,0,756},{133,0,755},{135,0,1217},{138,11,507},{132,10,351}
> -,{132,0,197},{143,11,78},{4,11,188},{7,11,805},{11,11,276},{142,11,293},{5,11,
> -
> 884},{139,11,991},{132,10,286},{10,0,259},{10,0,428},{7,10,438},{7,10,627},{7,1
> 0
> -,1516},{8,10,40},{9,10,56},{9,10,294},{11,10,969},{11,10,995},{146,10,148},{4,0,
> -356},{5,0,217},{5,0,492},{5,0,656},{8,0,544},{136,11,544},{5,0,259},{6,0,1230},{
> -7,0,414},{7,0,854},{142,0,107},{132,0,1007},{15,0,14},{144,0,5},{6,0,1580},{132,
> -
> 10,738},{132,11,596},{132,0,673},{133,10,866},{6,0,1843},{135,11,1847},{4,0,16
> 5}
> -,{7,0,1398},{135,0,1829},{135,11,1634},{147,11,65},{6,0,885},{6,0,1009},{137,0,
> -809},{133,10,116},{132,10,457},{136,11,770},{9,0,498},{12,0,181},{10,11,361},{
> -
> 142,11,316},{134,11,595},{5,0,9},{7,0,297},{7,0,966},{140,0,306},{4,11,89},{5,11
> -
> ,489},{6,11,315},{7,11,553},{7,11,1745},{138,11,243},{134,0,1487},{132,0,437},{
> 5
> -
> ,0,146},{6,0,411},{138,0,721},{5,10,527},{6,10,189},{135,10,859},{11,10,104},{11
> -,10,554},{15,10,60},{143,10,125},{6,11,1658},{9,11,3},{10,11,154},{11,11,641},{
> -13,11,85},{13,11,201},{141,11,346},{6,0,177},{135,0,467},{134,0,1377},{134,10,
> -
> 116},{136,11,645},{4,11,166},{5,11,505},{6,11,1670},{137,11,110},{133,10,487},{
> 4
> -,10,86},{5,10,667},{5,10,753},{6,10,316},{6,10,455},{135,10,946},{133,0,200},{
> -
> 132,0,959},{6,0,1928},{134,0,1957},{139,11,203},{150,10,45},{4,10,79},{7,10,177
> 3
> -
> },{10,10,450},{11,10,589},{13,10,332},{13,10,493},{14,10,183},{14,10,334},{14,1
> 0
> -,362},{14,10,368},{14,10,376},{14,10,379},{19,10,90},{19,10,103},{19,10,127},{
> -
> 148,10,90},{6,0,1435},{135,11,1275},{134,0,481},{7,11,445},{8,11,307},{8,11,704}
> -,{10,11,41},{10,11,439},{11,11,237},{11,11,622},{140,11,201},{135,11,869},{4,0,
> -
> 84},{7,0,1482},{10,0,76},{138,0,142},{11,11,277},{144,11,14},{135,11,1977},{4,1
> 1
> -,189},{5,11,713},{136,11,57},{133,0,1015},{138,11,371},{4,0,315},{5,0,507},{135,
> -
> 0,1370},{4,11,552},{142,10,381},{9,0,759},{16,0,31},{16,0,39},{16,0,75},{18,0,24
> -},{20,0,42},{152,0,1},{134,0,712},{134,0,1722},{133,10,663},{133,10,846},{8,0,
> -222},{8,0,476},{9,0,238},{11,0,516},{11,0,575},{15,0,109},{146,0,100},{7,0,1402}
> -,{7,0,1414},{12,0,456},{5,10,378},{8,10,465},{9,10,286},{10,10,185},{10,10,562},
> -
> {10,10,635},{11,10,31},{11,10,393},{13,10,312},{18,10,65},{18,10,96},{147,10,89}
> -,{4,0,986},{6,0,1958},{6,0,2032},{8,0,934},{138,0,985},{7,10,1880},{9,10,680},{
> -
> 139,10,798},{134,10,1770},{145,11,49},{132,11,614},{132,10,648},{5,10,945},{6,
> 10
> -,1656},{6,10,1787},{7,10,167},{8,10,824},{9,10,391},{10,10,375},{139,10,185},{
> -
> 138,11,661},{7,0,1273},{135,11,1945},{7,0,706},{7,0,1058},{138,0,538},{7,10,164
> 5
> -
> },{8,10,352},{137,10,249},{132,10,152},{11,0,92},{11,0,196},{11,0,409},{11,0,450
> -},{11,0,666},{11,0,777},{12,0,262},{13,0,385},{13,0,393},{15,0,115},{16,0,45},{
> -
> 145,0,82},{133,10,1006},{6,0,40},{135,0,1781},{9,11,614},{139,11,327},{5,10,420}
> -,{135,10,1449},{135,0,431},{10,0,97},{135,10,832},{6,0,423},{7,0,665},{135,0,
> -1210},{7,0,237},{8,0,664},{9,0,42},{9,0,266},{9,0,380},{9,0,645},{10,0,177},{138
> -,0,276},{7,0,264},{133,10,351},{8,0,213},{5,10,40},{7,10,598},{7,10,1638},{9,10,
> -166},{9,10,640},{9,10,685},{9,10,773},{11,10,215},{13,10,65},{14,10,172},{14,10,
> -317},{145,10,6},{5,11,84},{134,11,163},{8,10,60},{9,10,343},{139,10,769},{137,0,
> -
> 455},{133,11,410},{8,0,906},{12,0,700},{12,0,706},{140,0,729},{21,11,33},{150,1
> 1
> -,40},{7,10,1951},{8,10,765},{8,10,772},{140,10,671},{7,10,108},{8,10,219},{8,10,
> -
> 388},{9,10,639},{9,10,775},{11,10,275},{140,10,464},{5,11,322},{7,11,1941},{8,1
> 1
> -,186},{9,11,262},{10,11,187},{14,11,208},{146,11,130},{139,0,624},{8,0,574},{5,
> -11,227},{140,11,29},{7,11,1546},{11,11,299},{142,11,407},{5,10,15},{6,10,56},{7,
> -
> 10,1758},{8,10,500},{9,10,730},{11,10,331},{13,10,150},{142,10,282},{7,11,1395},
> -
> {8,11,486},{9,11,236},{9,11,878},{10,11,218},{11,11,95},{19,11,17},{147,11,31},{
> -135,11,2043},{4,0,354},{146,11,4},{140,11,80},{135,0,1558},{134,10,1886},{5,10,
> -
> 205},{6,10,438},{137,10,711},{133,11,522},{133,10,534},{7,0,235},{7,0,1475},{15,
> -0,68},{146,0,120},{137,10,691},{4,0,942},{6,0,1813},{8,0,917},{10,0,884},{12,0,
> -
> 696},{12,0,717},{12,0,723},{12,0,738},{12,0,749},{12,0,780},{16,0,97},{146,0,169
> -},{6,10,443},{8,11,562},{9,10,237},{9,10,571},{9,10,695},{10,10,139},{11,10,715}
> -
> ,{12,10,417},{141,10,421},{135,0,957},{133,0,830},{134,11,1771},{146,0,23},{5,0,
> -496},{6,0,694},{7,0,203},{7,11,1190},{137,11,620},{137,11,132},{6,0,547},{134,0,
> -1549},{8,11,258},{9,11,208},{137,11,359},{4,0,864},{5,0,88},{137,0,239},{135,11,
> -
> 493},{4,11,317},{135,11,1279},{132,11,477},{4,10,578},{5,11,63},{133,11,509},{7,
> -0,650},{135,0,1310},{7,0,1076},{9,0,80},{11,0,78},{11,0,421},{11,0,534},{140,0,
> -
> 545},{132,11,288},{12,0,553},{14,0,118},{133,10,923},{7,0,274},{11,0,479},{139,
> 0
> -
> ,507},{8,11,89},{8,11,620},{9,11,49},{10,11,774},{11,11,628},{12,11,322},{143,11
> -,124},{4,0,497},{135,0,1584},{7,0,261},{7,0,1115},{7,0,1354},{7,0,1404},{7,0,
> -
> 1588},{7,0,1705},{7,0,1902},{9,0,465},{10,0,248},{10,0,349},{10,0,647},{11,0,527
> -},{11,0,660},{11,0,669},{12,0,529},{13,0,305},{132,10,924},{133,10,665},{136,0,
> -13},{6,0,791},{138,11,120},{7,0,642},{8,0,250},{11,0,123},{11,0,137},{13,0,48},{
> -
> 142,0,95},{4,10,265},{7,10,807},{135,10,950},{5,10,93},{140,10,267},{135,0,1429}
> -,{4,0,949},{10,0,885},{10,0,891},{10,0,900},{10,0,939},{12,0,760},{142,0,449},{
> -
> 139,11,366},{132,0,818},{134,11,85},{135,10,994},{7,0,330},{5,10,233},{5,10,320}
> -
> ,{6,10,140},{136,10,295},{4,0,1004},{8,0,982},{136,0,993},{133,10,978},{4,10,90
> 5
> -},{6,10,1701},{137,10,843},{10,0,545},{140,0,301},{6,0,947},{134,0,1062},{134,0,
> -1188},{4,0,904},{5,0,794},{152,10,6},{134,0,1372},{135,11,608},{5,11,279},{6,11,
> -
> 235},{7,11,468},{8,11,446},{9,11,637},{10,11,717},{11,11,738},{140,11,514},{132,
> -10,509},{5,11,17},{6,11,371},{137,11,528},{132,0,693},{4,11,115},{5,11,669},{6,
> -
> 11,407},{8,11,311},{11,11,10},{141,11,5},{11,0,377},{7,10,273},{137,11,381},{13
> 5
> -,0,695},{7,0,386},{138,0,713},{135,10,1041},{134,0,1291},{6,0,7},{6,0,35},{7,0,
> -147},{7,0,1069},{7,0,1568},{7,0,1575},{7,0,1917},{8,0,43},{8,0,208},{9,0,128},{9
> -,0,866},{10,0,20},{11,0,981},{147,0,33},{7,0,893},{141,0,424},{139,10,234},{150,
> -11,56},{5,11,779},{5,11,807},{6,11,1655},{134,11,1676},{5,10,802},{7,10,2021},{
> -136,10,805},{4,11,196},{5,10,167},{5,11,558},{5,10,899},{5,11,949},{6,10,410},{
> -
> 137,10,777},{137,10,789},{134,10,1705},{8,0,904},{140,0,787},{6,0,322},{9,0,552}
> -,{11,0,274},{13,0,209},{13,0,499},{14,0,85},{15,0,126},{145,0,70},{135,10,10},{5
> -,10,11},{6,10,117},{6,10,485},{7,10,1133},{9,10,582},{9,10,594},{11,10,21},{11,
> -10,818},{12,10,535},{141,10,86},{4,10,264},{7,10,1067},{8,10,204},{8,10,385},{
> -
> 139,10,953},{132,11,752},{138,10,56},{133,10,470},{6,0,1808},{8,0,83},{8,0,742},
> -{8,0,817},{9,0,28},{9,0,29},{9,0,885},{10,0,387},{11,0,633},{11,0,740},{13,0,235
> -
> },{13,0,254},{15,0,143},{143,0,146},{140,0,49},{134,0,1832},{4,11,227},{5,11,159
> -
> },{5,11,409},{7,11,80},{10,11,294},{10,11,479},{12,11,418},{14,11,50},{14,11,249
> -},{142,11,295},{7,11,1470},{8,11,66},{8,11,137},{8,11,761},{9,11,638},{11,11,80}
> -,{11,11,212},{11,11,368},{11,11,418},{12,11,8},{13,11,15},{16,11,61},{17,11,59},
> -{19,11,28},{148,11,84},{139,10,1015},{138,11,468},{135,0,421},{6,0,415},{7,0,
> -1049},{137,0,442},{6,11,38},{7,11,1220},{8,11,185},{8,11,256},{9,11,22},{9,11,
> -
> 331},{10,11,738},{11,11,205},{11,11,540},{11,11,746},{13,11,399},{13,11,465},{1
> 4
> -,11,88},{142,11,194},{139,0,289},{133,10,715},{4,0,110},{10,0,415},{10,0,597},{
> -142,0,206},{4,11,159},{6,11,115},{7,11,252},{7,11,257},{7,11,1928},{8,11,69},{9,
> -
> 11,384},{10,11,91},{10,11,615},{12,11,375},{14,11,235},{18,11,117},{147,11,123},
> -
> {5,11,911},{136,11,278},{7,0,205},{7,0,2000},{8,10,794},{9,10,400},{10,10,298},{
> -
> 142,10,228},{135,11,1774},{4,11,151},{7,11,1567},{8,11,351},{137,11,322},{136,
> 10
> -
> ,724},{133,11,990},{7,0,1539},{11,0,512},{13,0,205},{19,0,30},{22,0,36},{23,0,19
> -},{135,11,1539},{5,11,194},{7,11,1662},{9,11,90},{140,11,180},{6,10,190},{7,10,
> -
> 768},{135,10,1170},{134,0,1340},{4,0,283},{135,0,1194},{133,11,425},{133,11,97
> 1}
> -
> ,{12,0,549},{14,10,67},{147,10,60},{135,10,1023},{134,0,1720},{138,11,587},{5,1
> 1
> -
> ,72},{6,11,264},{7,11,21},{7,11,46},{7,11,2013},{8,11,215},{8,11,513},{10,11,266
> -},{139,11,22},{5,0,319},{135,0,534},{6,10,137},{9,10,75},{9,10,253},{10,10,194},
> -{138,10,444},{7,0,1180},{20,0,112},{6,11,239},{7,11,118},{10,11,95},{11,11,603},
> -{13,11,443},{14,11,160},{143,11,4},{134,11,431},{5,11,874},{6,11,1677},{11,10,
> -643},{12,10,115},{143,11,0},{134,0,967},{6,11,65},{7,11,939},{7,11,1172},{7,11,
> -
> 1671},{9,11,540},{10,11,696},{11,11,265},{11,11,732},{11,11,928},{11,11,937},{1
> 2
> -
> ,11,399},{13,11,438},{149,11,19},{137,11,200},{135,0,1940},{5,10,760},{7,10,542}
> -,{8,10,135},{136,10,496},{140,11,44},{7,11,1655},{136,11,305},{7,10,319},{7,10,
> -355},{7,10,763},{10,10,389},{145,10,43},{136,0,735},{138,10,786},{137,11,19},{
> -
> 132,11,696},{5,0,132},{9,0,486},{9,0,715},{10,0,458},{11,0,373},{11,0,668},{11,0
> -,795},{11,0,897},{12,0,272},{12,0,424},{12,0,539},{12,0,558},{14,0,245},{14,0,
> -263},{14,0,264},{14,0,393},{142,0,403},{10,0,38},{139,0,784},{132,0,838},{4,11,
> -302},{135,11,1766},{133,0,379},{5,0,8},{6,0,89},{6,0,400},{7,0,1569},{7,0,1623},
> -{7,0,1850},{8,0,218},{8,0,422},{9,0,570},{10,0,626},{4,11,726},{133,11,630},{4,0
> -,1017},{138,0,660},{6,0,387},{7,0,882},{141,0,111},{6,0,224},{7,0,877},{137,0,
> -647},{4,10,58},{5,10,286},{6,10,319},{7,10,402},{7,10,1254},{7,10,1903},{8,10,
> -356},{140,10,408},{135,0,790},{9,0,510},{10,0,53},{4,10,389},{9,10,181},{10,10,
> -29},{10,10,816},{11,10,311},{11,10,561},{12,10,67},{141,10,181},{142,0,458},{6,
> -
> 11,118},{7,11,215},{7,11,1521},{140,11,11},{134,0,954},{135,0,394},{134,0,1367},
> -
> {5,11,225},{133,10,373},{132,0,882},{7,0,1409},{135,10,1972},{135,10,1793},{4,1
> 1
> -
> ,370},{5,11,756},{135,11,1326},{150,11,13},{7,11,354},{10,11,410},{139,11,815},
> {
> -
> 6,11,1662},{7,11,48},{8,11,771},{10,11,116},{13,11,104},{14,11,105},{14,11,184},
> -{15,11,168},{19,11,92},{148,11,68},{7,0,124},{136,0,38},{5,0,261},{7,0,78},{7,0,
> -199},{8,0,815},{9,0,126},{10,0,342},{140,0,647},{4,0,628},{140,0,724},{7,0,266},
> -
> {8,0,804},{7,10,1651},{145,10,89},{135,0,208},{134,0,1178},{6,0,79},{135,0,1519}
> -,{132,10,672},{133,10,737},{136,0,741},{132,11,120},{4,0,710},{6,0,376},{134,0,
> -
> 606},{134,0,1347},{134,0,1494},{6,0,850},{6,0,1553},{137,0,821},{5,10,145},{134,
> -11,593},{7,0,1311},{140,0,135},{4,0,467},{5,0,405},{134,0,544},{5,11,820},{135,
> -11,931},{6,0,100},{7,0,244},{7,0,632},{7,0,1609},{8,0,178},{8,0,638},{141,0,58},
> -{4,10,387},{135,10,1288},{6,11,151},{6,11,1675},{7,11,383},{151,11,10},{132,0,
> -
> 481},{135,10,550},{134,0,1378},{6,11,1624},{11,11,11},{12,11,422},{13,11,262},{
> -
> 142,11,360},{133,0,791},{4,11,43},{5,11,344},{133,11,357},{7,0,1227},{140,0,978}
> -,{7,0,686},{8,0,33},{8,0,238},{10,0,616},{11,0,467},{11,0,881},{13,0,217},{13,0,
> -253},{142,0,268},{137,0,857},{8,0,467},{8,0,1006},{7,11,148},{8,11,284},{141,11,
> -
> 63},{4,10,576},{135,10,1263},{133,11,888},{5,10,919},{134,10,1673},{20,10,37},{
> -
> 148,11,37},{132,0,447},{132,11,711},{4,0,128},{5,0,415},{6,0,462},{7,0,294},{7,0
> -
> ,578},{10,0,710},{139,0,86},{4,10,82},{5,10,333},{5,10,904},{6,10,207},{7,10,325
> -
> },{7,10,1726},{8,10,101},{10,10,778},{139,10,220},{136,0,587},{137,11,440},{133,
> -
> 10,903},{6,0,427},{7,0,1018},{138,0,692},{4,0,195},{135,0,802},{140,10,147},{13
> 4
> -,0,1546},{134,0,684},{132,10,705},{136,0,345},{11,11,678},{140,11,307},{133,0,
> -365},{134,0,1683},{4,11,65},{5,11,479},{5,11,1004},{7,11,1913},{8,11,317},{9,11,
> -302},{10,11,612},{141,11,22},{138,0,472},{4,11,261},{135,11,510},{134,10,90},{
> -
> 142,0,433},{151,0,28},{4,11,291},{7,11,101},{9,11,515},{12,11,152},{12,11,443},{
> -13,11,392},{142,11,357},{140,0,997},{5,0,3},{8,0,578},{9,0,118},{10,0,705},{141,
> -
> 0,279},{135,11,1266},{7,10,813},{12,10,497},{141,10,56},{133,0,229},{6,10,125},
> {
> -135,10,1277},{8,0,102},{10,0,578},{10,0,672},{12,0,496},{13,0,408},{14,0,121},{
> -
> 17,0,106},{151,10,12},{6,0,866},{134,0,1080},{136,0,1022},{4,11,130},{135,11,84
> 3
> -},{5,11,42},{5,11,879},{7,11,245},{7,11,324},{7,11,1532},{11,11,463},{11,11,472}
> -,{13,11,363},{144,11,52},{150,0,55},{8,0,115},{8,0,350},{9,0,489},{10,0,128},{11
> -,0,306},{12,0,373},{14,0,30},{17,0,79},{19,0,80},{4,11,134},{133,11,372},{134,0,
> -
> 657},{134,0,933},{135,11,1147},{4,0,230},{133,0,702},{134,0,1728},{4,0,484},{18,
> -0,26},{19,0,42},{20,0,43},{21,0,0},{23,0,27},{152,0,14},{7,0,185},{135,0,703},{6
> -
> ,0,417},{10,0,618},{7,10,1106},{9,10,770},{11,10,112},{140,10,413},{134,0,803},{
> -
> 132,11,644},{134,0,1262},{7,11,540},{12,10,271},{145,10,109},{135,11,123},{132
> ,0
> -
> ,633},{134,11,623},{4,11,908},{5,11,359},{5,11,508},{6,11,1723},{7,11,343},{7,11
> -
> ,1996},{135,11,2026},{135,0,479},{10,0,262},{7,10,304},{9,10,646},{9,10,862},{1
> 1
> -
> ,10,696},{12,10,208},{15,10,79},{147,10,108},{4,11,341},{135,11,480},{134,0,830}
> -,{5,0,70},{5,0,622},{6,0,334},{7,0,1032},{9,0,171},{11,0,26},{11,0,213},{11,0,
> -
> 637},{11,0,707},{12,0,202},{12,0,380},{13,0,226},{13,0,355},{14,0,222},{145,0,42
> -},{135,10,981},{143,0,217},{137,11,114},{4,0,23},{4,0,141},{5,0,313},{5,0,1014},
> -{6,0,50},{6,0,51},{7,0,142},{7,0,384},{7,0,559},{8,0,640},{9,0,460},{9,0,783},{
> -
> 11,0,741},{12,0,183},{141,0,488},{141,0,360},{7,0,1586},{7,11,1995},{8,11,299},{
> -
> 11,11,890},{140,11,674},{132,10,434},{7,0,652},{134,10,550},{7,0,766},{5,10,553}
> -,{138,10,824},{7,0,737},{8,0,298},{136,10,452},{4,11,238},{5,11,503},{6,11,179},
> -{7,11,2003},{8,11,381},{8,11,473},{9,11,149},{10,11,183},{15,11,45},{143,11,86},
> -{133,10,292},{5,0,222},{9,0,655},{138,0,534},{138,10,135},{4,11,121},{5,11,156},
> -
> {5,11,349},{9,11,136},{10,11,605},{14,11,342},{147,11,107},{137,0,906},{6,0,101
> 3
> -},{134,0,1250},{6,0,1956},{6,0,2009},{8,0,991},{144,0,120},{135,11,1192},{138,0,
> -
> 503},{5,0,154},{7,0,1491},{10,0,379},{138,0,485},{6,0,1867},{6,0,1914},{6,0,1925
> -},{9,0,917},{9,0,925},{9,0,932},{9,0,951},{9,0,1007},{9,0,1013},{12,0,806},{12,0
> -,810},{12,0,814},{12,0,816},{12,0,824},{12,0,832},{12,0,837},{12,0,863},{12,0,
> -
> 868},{12,0,870},{12,0,889},{12,0,892},{12,0,900},{12,0,902},{12,0,908},{12,0,933
> -},{12,0,942},{12,0,949},{12,0,954},{15,0,175},{15,0,203},{15,0,213},{15,0,218},{
> -15,0,225},{15,0,231},{15,0,239},{15,0,248},{15,0,252},{18,0,190},{18,0,204},{18,
> -0,215},{18,0,216},{18,0,222},{18,0,225},{18,0,230},{18,0,239},{18,0,241},{21,0,
> -42},{21,0,43},{21,0,44},{21,0,45},{21,0,46},{21,0,53},{24,0,27},{152,0,31},{133,
> -0,716},{135,0,844},{4,0,91},{5,0,388},{5,0,845},{6,0,206},{6,0,252},{6,0,365},{7
> -,0,136},{7,0,531},{136,0,621},{7,10,393},{10,10,603},{139,10,206},{6,11,80},{6,
> -11,1694},{7,11,173},{7,11,1974},{9,11,547},{10,11,730},{14,11,18},{150,11,39},{
> -
> 137,0,748},{4,11,923},{134,11,1711},{4,10,912},{137,10,232},{7,10,98},{7,10,197
> 3
> -
> },{136,10,716},{14,0,103},{133,10,733},{132,11,595},{12,0,158},{18,0,8},{19,0,62
> -},{20,0,6},{22,0,4},{23,0,2},{23,0,9},{5,11,240},{6,11,459},{7,11,12},{7,11,114}
> -,{7,11,502},{7,11,1751},{7,11,1753},{7,11,1805},{8,11,658},{9,11,1},{11,11,959},
> -{13,11,446},{142,11,211},{135,0,576},{5,0,771},{5,0,863},{5,0,898},{6,0,648},{6,
> -0,1632},{6,0,1644},{134,0,1780},{133,0,331},{7,11,633},{7,11,905},{7,11,909},{7,
> -11,1538},{9,11,767},{140,11,636},{140,0,632},{5,0,107},{7,0,201},{136,0,518},{6,
> -0,446},{7,0,1817},{134,11,490},{9,0,851},{141,0,510},{7,11,250},{8,11,506},{136,
> -11,507},{4,0,504},{137,10,72},{132,11,158},{4,11,140},{7,11,362},{8,11,209},{9,
> -
> 11,10},{9,11,160},{9,11,503},{10,11,689},{11,11,350},{11,11,553},{11,11,725},{1
> 2
> -
> ,11,252},{12,11,583},{13,11,192},{13,11,352},{14,11,269},{14,11,356},{148,11,50}
> -,{6,11,597},{135,11,1318},{135,10,1454},{5,0,883},{5,0,975},{8,0,392},{148,0,7},
> -
> {6,11,228},{7,11,1341},{9,11,408},{138,11,343},{11,11,348},{11,10,600},{12,11,9
> 9
> -
> },{13,10,245},{18,11,1},{18,11,11},{147,11,4},{134,11,296},{5,0,922},{134,0,1707
> -},{132,11,557},{4,11,548},{7,10,164},{7,10,1571},{9,10,107},{140,10,225},{7,11,
> -197},{8,11,142},{8,11,325},{9,11,150},{9,11,596},{10,11,350},{10,11,353},{11,11,
> -
> 74},{11,11,315},{14,11,423},{143,11,141},{5,0,993},{7,0,515},{137,0,91},{4,0,131
> -},{8,0,200},{5,10,484},{5,10,510},{6,10,434},{7,10,1000},{7,10,1098},{136,10,2},
> -{152,0,10},{4,11,62},{5,11,83},{6,11,399},{6,11,579},{7,11,692},{7,11,846},{7,11
> -,1015},{7,11,1799},{8,11,403},{9,11,394},{10,11,133},{12,11,4},{12,11,297},{12,
> -11,452},{16,11,81},{18,11,19},{18,11,25},{21,11,14},{22,11,12},{151,11,18},{140,
> -
> 11,459},{132,11,177},{7,0,1433},{9,0,365},{137,11,365},{132,10,460},{5,0,103},{
> 6
> -,0,2004},{7,0,921},{8,0,580},{8,0,593},{8,0,630},{10,0,28},{5,11,411},{135,11,
> -653},{4,10,932},{133,10,891},{4,0,911},{5,0,867},{5,0,1013},{7,0,2034},{8,0,798}
> -
> ,{136,0,813},{7,11,439},{10,11,727},{11,11,260},{139,11,684},{136,10,625},{5,11,
> -208},{7,11,753},{135,11,1528},{5,0,461},{7,0,1925},{12,0,39},{13,0,265},{13,0,
> -439},{134,10,76},{6,0,853},{8,10,92},{137,10,221},{5,0,135},{6,0,519},{7,0,1722}
> -,{10,0,271},{11,0,261},{145,0,54},{139,11,814},{14,0,338},{148,0,81},{4,0,300},{
> -133,0,436},{5,0,419},{5,0,687},{7,0,864},{9,0,470},{135,11,864},{9,0,836},{133,
> -11,242},{134,0,1937},{4,10,763},{133,11,953},{132,10,622},{132,0,393},{133,10,
> -253},{8,0,357},{10,0,745},{14,0,426},{17,0,94},{19,0,57},{135,10,546},{5,11,615}
> -
> ,{146,11,37},{9,10,73},{10,10,110},{14,10,185},{145,10,119},{11,0,703},{7,10,62
> 4
> -},{7,10,916},{10,10,256},{139,10,87},{133,11,290},{5,10,212},{12,10,35},{141,10,
> -382},{132,11,380},{5,11,52},{7,11,277},{9,11,368},{139,11,791},{133,0,387},{10,
> -
> 11,138},{139,11,476},{4,0,6},{5,0,708},{136,0,75},{7,0,1351},{9,0,581},{10,0,639
> -},{11,0,453},{140,0,584},{132,0,303},{138,0,772},{135,10,1175},{4,0,749},{5,10,
> -816},{6,11,256},{7,11,307},{7,11,999},{7,11,1481},{7,11,1732},{7,11,1738},{8,11,
> -
> 265},{9,11,414},{11,11,316},{12,11,52},{13,11,420},{147,11,100},{135,11,1296},{
> 6
> -
> ,0,1065},{5,10,869},{5,10,968},{6,10,1626},{8,10,734},{136,10,784},{4,10,542},{6
> -
> ,10,1716},{6,10,1727},{7,10,1082},{7,10,1545},{8,10,56},{8,10,118},{8,10,412},{8
> -,10,564},{9,10,888},{9,10,908},{10,10,50},{10,10,423},{11,10,685},{11,10,697},{
> -11,10,933},{12,10,299},{13,10,126},{13,10,136},{13,10,170},{141,10,190},{134,0,
> -226},{4,0,106},{7,0,310},{11,0,717},{133,11,723},{5,0,890},{5,0,988},{4,10,232},
> -{9,10,202},{10,10,474},{140,10,433},{6,0,626},{142,0,431},{10,0,706},{150,0,44},
> -
> {13,0,51},{6,10,108},{7,10,1003},{7,10,1181},{8,10,111},{136,10,343},{132,0,698}
> -
> ,{5,11,109},{6,11,1784},{7,11,1895},{12,11,296},{140,11,302},{134,0,828},{134,1
> 0
> -,1712},{138,0,17},{7,0,1929},{4,10,133},{5,11,216},{7,10,711},{7,10,1298},{7,10,
> -1585},{7,11,1879},{9,11,141},{9,11,270},{9,11,679},{10,11,159},{10,11,553},{11,
> -
> 11,197},{11,11,438},{12,11,538},{12,11,559},{13,11,193},{13,11,423},{14,11,144},
> -
> {14,11,166},{14,11,167},{15,11,67},{147,11,84},{141,11,127},{7,11,1872},{137,11,
> -81},{6,10,99},{7,10,1808},{145,10,57},{134,11,391},{5,0,689},{6,0,84},{7,0,1250}
> -,{6,10,574},{7,10,428},{10,10,669},{11,10,485},{11,10,840},{12,10,300},{142,10,
> -
> 250},{7,11,322},{136,11,249},{7,11,432},{135,11,1649},{135,10,1871},{137,10,25
> 2}
> -,{6,11,155},{140,11,234},{7,0,871},{19,0,27},{147,11,27},{140,0,498},{5,0,986},{
> -
> 6,0,130},{138,0,823},{6,0,1793},{7,0,1582},{8,0,458},{10,0,101},{10,0,318},{10,0
> -,945},{12,0,734},{16,0,104},{18,0,177},{6,10,323},{135,10,1564},{5,11,632},{138,
> -11,526},{10,0,435},{7,10,461},{136,10,775},{6,11,144},{7,11,948},{7,11,1042},{7,
> -11,1857},{8,11,235},{8,11,461},{9,11,453},{9,11,530},{10,11,354},{17,11,77},{19,
> -
> 11,99},{148,11,79},{138,0,966},{7,0,1644},{137,0,129},{135,0,997},{136,0,502},{
> 5
> -,11,196},{6,11,486},{7,11,212},{8,11,309},{136,11,346},{7,10,727},{146,10,73},{
> -
> 132,0,823},{132,11,686},{135,0,1927},{4,0,762},{7,0,1756},{137,0,98},{136,10,57
> 7
> -},{24,0,8},{4,11,30},{5,11,43},{152,11,8},{7,0,1046},{139,0,160},{7,0,492},{4,10
> -,413},{5,10,677},{7,11,492},{8,10,432},{140,10,280},{6,0,45},{7,0,433},{8,0,129}
> -,{9,0,21},{10,0,392},{11,0,79},{12,0,499},{13,0,199},{141,0,451},{7,0,558},{136,
> -0,353},{4,11,220},{7,11,1535},{9,11,93},{139,11,474},{7,10,646},{7,10,1730},{11,
> -
> 10,446},{141,10,178},{133,0,785},{134,0,1145},{8,0,81},{9,0,189},{9,0,201},{11,0
> -
> ,478},{11,0,712},{141,0,338},{5,0,353},{151,0,26},{11,0,762},{132,10,395},{134,0
> -
> ,2024},{4,0,611},{133,0,606},{9,10,174},{10,10,164},{11,10,440},{11,10,841},{14
> 3
> -
> ,10,98},{134,10,426},{10,10,608},{139,10,1002},{138,10,250},{6,0,25},{7,0,855},{
> -
> 7,0,1258},{144,0,32},{7,11,1725},{138,11,393},{5,11,263},{134,11,414},{6,0,2011}
> -,{133,10,476},{4,0,4},{7,0,1118},{7,0,1320},{7,0,1706},{8,0,277},{9,0,622},{10,0
> -,9},{11,0,724},{12,0,350},{12,0,397},{13,0,28},{13,0,159},{15,0,89},{18,0,5},{19
> -,0,9},{20,0,34},{22,0,47},{6,11,178},{6,11,1750},{8,11,251},{9,11,690},{10,11,
> -
> 155},{10,11,196},{10,11,373},{11,11,698},{13,11,155},{148,11,93},{5,11,97},{137,
> -11,393},{7,0,764},{11,0,461},{12,0,172},{5,10,76},{6,10,458},{6,10,497},{7,10,
> -
> 868},{9,10,658},{10,10,594},{11,10,566},{12,10,338},{141,10,200},{134,0,1449},{
> -
> 138,11,40},{134,11,1639},{134,0,1445},{6,0,1168},{4,10,526},{7,10,1029},{135,1
> 0,
> -1054},{4,11,191},{7,11,934},{8,11,647},{145,11,97},{132,10,636},{6,0,233},{7,10,
> -
> 660},{7,10,1124},{17,10,31},{19,10,22},{151,10,14},{6,10,1699},{136,11,110},{12,
> -
> 11,246},{15,11,162},{19,11,64},{20,11,8},{20,11,95},{22,11,24},{152,11,17},{5,11
> -,165},{9,11,346},{138,11,655},{5,11,319},{135,11,534},{134,0,255},{9,0,216},{8,
> -11,128},{139,11,179},{9,0,183},{139,0,286},{11,0,956},{151,0,3},{4,0,536},{7,0,
> -1141},{10,0,723},{139,0,371},{4,10,279},{7,10,301},{137,10,362},{7,0,285},{5,11,
> -57},{6,11,101},{6,11,1663},{7,11,132},{7,11,1048},{7,11,1154},{7,11,1415},{7,11,
> -
> 1507},{12,11,493},{15,11,105},{151,11,15},{5,11,459},{7,11,1073},{7,10,1743},{8,
> -
> 11,241},{136,11,334},{4,10,178},{133,10,399},{135,0,560},{132,0,690},{135,0,12
> 46
> -},{18,0,157},{147,0,63},{10,0,599},{11,0,33},{12,0,571},{149,0,1},{6,11,324},{6,
> -11,520},{7,11,338},{7,11,1616},{7,11,1729},{8,11,228},{9,11,69},{139,11,750},{7,
> -
> 0,1862},{12,0,491},{12,0,520},{13,0,383},{142,0,244},{135,11,734},{134,10,1692},
> -
> {10,0,448},{11,0,630},{17,0,117},{6,10,202},{7,11,705},{12,10,360},{17,10,118},{
> -18,10,27},{148,10,67},{4,11,73},{6,11,612},{7,11,927},{7,11,1822},{8,11,217},{9,
> -
> 11,472},{9,11,765},{9,11,766},{10,11,408},{11,11,51},{11,11,793},{12,11,266},{1
> 5
> -
> ,11,158},{20,11,89},{150,11,32},{4,0,190},{133,0,554},{133,0,1001},{5,11,389},{8
> -
> ,11,636},{137,11,229},{5,0,446},{7,10,872},{10,10,516},{139,10,167},{137,10,313}
> -,{132,10,224},{134,0,1313},{5,10,546},{7,10,35},{8,10,11},{8,10,12},{9,10,315},{
> -
> 9,10,533},{10,10,802},{11,10,166},{12,10,525},{142,10,243},{6,0,636},{137,0,837}
> -
> ,{5,10,241},{8,10,242},{9,10,451},{10,10,667},{11,10,598},{140,10,429},{22,10,4
> 6
> -
> },{150,11,46},{136,11,472},{11,0,278},{142,0,73},{141,11,185},{132,0,868},{134,
> 0
> -,972},{4,10,366},{137,10,516},{138,0,1010},{5,11,189},{6,10,1736},{7,11,442},{7,
> -11,443},{8,11,281},{12,11,174},{13,11,83},{141,11,261},{139,11,384},{6,11,2},{7,
> -
> 11,191},{7,11,446},{7,11,758},{7,11,1262},{7,11,1737},{8,11,22},{8,11,270},{8,11
> -,612},{9,11,4},{9,11,167},{9,11,312},{9,11,436},{10,11,156},{10,11,216},{10,11,
> -
> 311},{10,11,623},{11,11,72},{11,11,330},{11,11,455},{12,11,101},{12,11,321},{12,
> -11,504},{12,11,530},{12,11,543},{13,11,17},{13,11,156},{13,11,334},{14,11,48},{
> -
> 15,11,70},{17,11,60},{148,11,64},{6,10,331},{136,10,623},{135,0,1231},{132,0,30
> 4
> -},{6,11,60},{7,11,670},{7,11,1327},{8,11,411},{8,11,435},{9,11,653},{9,11,740},{
> -
> 10,11,385},{11,11,222},{11,11,324},{11,11,829},{140,11,611},{7,0,506},{6,11,166}
> -
> ,{7,11,374},{135,11,1174},{14,11,43},{146,11,21},{135,11,1694},{135,10,1888},{5,
> -11,206},{134,11,398},{135,11,50},{150,0,26},{6,0,53},{6,0,199},{7,0,1408},{8,0,
> -32},{8,0,93},{10,0,397},{10,0,629},{11,0,593},{11,0,763},{13,0,326},{145,0,35},{
> -
> 134,0,105},{132,10,394},{4,0,843},{138,0,794},{11,0,704},{141,0,396},{5,0,114},{
> -5,0,255},{141,0,285},{6,0,619},{7,0,898},{7,0,1092},{8,0,485},{18,0,28},{19,0,
> -116},{135,10,1931},{9,0,145},{7,10,574},{135,10,1719},{7,0,2035},{8,0,19},{9,0,
> -
> 89},{138,0,831},{132,10,658},{6,11,517},{7,11,1159},{10,11,621},{139,11,192},{7,
> -
> 0,1933},{7,11,1933},{9,10,781},{10,10,144},{11,10,385},{13,10,161},{13,10,228},
> {
> -
> 13,10,268},{148,10,107},{136,10,374},{10,11,223},{139,11,645},{135,0,1728},{7,
> 11
> -
> ,64},{7,11,289},{136,11,245},{4,10,344},{6,10,498},{139,10,323},{136,0,746},{13
> 5
> -,10,1063},{137,10,155},{4,0,987},{6,0,1964},{6,0,1974},{6,0,1990},{136,0,995},{
> -133,11,609},{133,10,906},{134,0,1550},{134,0,874},{5,11,129},{6,11,61},{135,11,
> -
> 947},{4,0,1018},{6,0,1938},{6,0,2021},{134,0,2039},{132,0,814},{11,0,126},{139,
> 0
> -,287},{134,0,1264},{5,0,955},{136,0,814},{141,11,506},{132,11,314},{6,0,981},{
> -
> 139,11,1000},{5,0,56},{8,0,892},{8,0,915},{140,0,776},{148,0,100},{10,0,4},{10,0
> -,13},{11,0,638},{148,0,57},{148,11,74},{5,0,738},{132,10,616},{133,11,637},{136,
> -
> 10,692},{133,0,758},{132,10,305},{137,11,590},{5,11,280},{135,11,1226},{134,11,
> -494},{135,0,1112},{133,11,281},{13,0,44},{14,0,214},{5,10,214},{7,10,603},{8,10,
> -
> 611},{9,10,686},{10,10,88},{11,10,459},{11,10,496},{12,10,463},{140,10,590},{13
> 9
> -
> ,0,328},{135,11,1064},{137,0,133},{7,0,168},{13,0,196},{141,0,237},{134,10,1703}
> -,{134,0,1152},{135,0,1245},{5,0,110},{6,0,169},{6,0,1702},{7,0,400},{8,0,538},{9
> -,0,184},{9,0,524},{140,0,218},{6,0,1816},{10,0,871},{12,0,769},{140,0,785},{132,
> -11,630},{7,11,33},{7,11,120},{8,11,489},{9,11,319},{10,11,820},{11,11,1004},{12,
> -11,379},{13,11,117},{13,11,412},{14,11,25},{15,11,52},{15,11,161},{16,11,47},{
> -149,11,2},{6,0,133},{8,0,413},{9,0,353},{139,0,993},{145,10,19},{4,11,937},{133,
> -
> 11,801},{134,0,978},{6,0,93},{6,0,1508},{7,0,1422},{7,0,1851},{8,0,673},{9,0,529
> -},{140,0,43},{6,0,317},{10,0,512},{4,10,737},{11,10,294},{12,10,60},{12,10,437},
> -
> {13,10,64},{13,10,380},{142,10,430},{9,0,371},{7,11,1591},{144,11,43},{6,10,175
> 8
> -},{8,10,520},{9,10,345},{9,10,403},{142,10,350},{5,0,526},{10,10,242},{138,10,
> -579},{9,0,25},{10,0,467},{138,0,559},{5,10,139},{7,10,1168},{138,10,539},{4,0,
> -
> 335},{135,0,942},{140,0,754},{132,11,365},{11,0,182},{142,0,195},{142,11,29},{5,
> -11,7},{139,11,774},{4,11,746},{135,11,1090},{8,0,39},{10,0,773},{11,0,84},{12,0,
> -205},{142,0,1},{5,0,601},{5,0,870},{5,11,360},{136,11,237},{132,0,181},{136,0,
> -370},{134,0,1652},{8,0,358},{4,10,107},{7,10,613},{8,10,439},{8,10,504},{9,10,
> -501},{10,10,383},{139,10,477},{132,10,229},{137,11,785},{4,0,97},{5,0,147},{6,0,
> -286},{7,0,1362},{141,0,176},{6,0,537},{7,0,788},{7,0,1816},{132,10,903},{140,10,
> -71},{6,0,743},{134,0,1223},{6,0,375},{7,0,169},{7,0,254},{8,0,780},{135,11,1493}
> -,{7,0,1714},{4,10,47},{6,10,373},{7,10,452},{7,10,543},{7,10,1856},{9,10,6},{11,
> -
> 10,257},{139,10,391},{6,0,896},{136,0,1003},{135,0,1447},{137,11,341},{5,10,98
> 0}
> -,{134,10,1754},{145,11,22},{4,11,277},{5,11,608},{6,11,493},{7,11,457},{140,11,
> -
> 384},{7,10,536},{7,10,1331},{136,10,143},{140,0,744},{7,11,27},{135,11,316},{18,
> -0,126},{5,10,19},{134,10,533},{4,0,788},{11,0,41},{5,11,552},{5,11,586},{5,11,
> -676},{6,11,448},{8,11,244},{11,11,1},{11,11,41},{13,11,3},{16,11,54},{17,11,4},{
> -146,11,13},{4,0,985},{6,0,1801},{4,11,401},{137,11,264},{5,10,395},{5,10,951},{
> -134,10,1776},{5,0,629},{135,0,1549},{11,10,663},{12,10,210},{13,10,166},{13,10,
> -310},{14,10,373},{147,10,43},{9,11,543},{10,11,524},{11,11,30},{12,11,524},{14,
> -11,315},{16,11,18},{20,11,26},{148,11,65},{4,11,205},{5,11,623},{7,11,104},{136,
> -11,519},{5,0,293},{134,0,601},{7,11,579},{9,11,41},{9,11,244},{9,11,669},{10,11,
> -
> 5},{11,11,861},{11,11,951},{139,11,980},{132,11,717},{132,10,695},{7,10,497},{9,
> -10,387},{147,10,81},{132,0,420},{142,0,37},{6,0,1134},{6,0,1900},{12,0,830},{12,
> -0,878},{12,0,894},{15,0,221},{143,0,245},{132,11,489},{7,0,1570},{140,0,542},{8,
> -0,933},{136,0,957},{6,0,1371},{7,0,31},{8,0,373},{5,10,284},{6,10,49},{6,10,350}
> -,{7,10,377},{7,10,1693},{8,10,678},{9,10,161},{9,10,585},{9,10,671},{9,10,839},{
> -11,10,912},{141,10,427},{135,11,892},{4,0,325},{138,0,125},{139,11,47},{132,10,
> -
> 597},{138,0,323},{6,0,1547},{7,11,1605},{9,11,473},{11,11,962},{146,11,139},{13
> 9
> -,10,908},{7,11,819},{9,11,26},{9,11,392},{10,11,152},{10,11,226},{11,11,19},{12,
> -
> 11,276},{12,11,426},{12,11,589},{13,11,460},{15,11,97},{19,11,48},{148,11,104},
> {
> -135,11,51},{4,0,718},{135,0,1216},{6,0,1896},{6,0,1905},{6,0,1912},{9,0,947},{9,
> -0,974},{12,0,809},{12,0,850},{12,0,858},{12,0,874},{12,0,887},{12,0,904},{12,0,
> -
> 929},{12,0,948},{12,0,952},{15,0,198},{15,0,206},{15,0,220},{15,0,227},{15,0,247
> -},{18,0,188},{21,0,48},{21,0,50},{24,0,25},{24,0,29},{7,11,761},{7,11,1051},{137
> -,11,545},{5,0,124},{5,0,144},{6,0,548},{7,0,15},{7,0,153},{137,0,629},{135,11,
> -
> 606},{135,10,2014},{7,10,2007},{9,11,46},{9,10,101},{9,10,450},{10,10,66},{10,1
> 0
> -,842},{11,10,536},{140,10,587},{6,0,75},{7,0,1531},{8,0,416},{9,0,240},{9,0,275}
> -,{10,0,100},{11,0,658},{11,0,979},{12,0,86},{14,0,207},{15,0,20},{143,0,25},{5,0
> -,141},{5,0,915},{6,0,1783},{7,0,211},{7,0,698},{7,0,1353},{9,0,83},{9,0,281},{10
> -,0,376},{10,0,431},{11,0,543},{12,0,664},{13,0,280},{13,0,428},{14,0,61},{14,0,
> -
> 128},{17,0,52},{145,0,81},{132,11,674},{135,0,533},{149,0,6},{132,11,770},{133,
> 0
> -
> ,538},{5,11,79},{7,11,1027},{7,11,1477},{139,11,52},{139,10,62},{4,0,338},{133,0
> -
> ,400},{5,11,789},{134,11,195},{4,11,251},{4,11,688},{7,11,513},{7,11,1284},{9,11
> -,87},{138,11,365},{134,10,1766},{6,0,0},{7,0,84},{11,0,895},{145,0,11},{139,0,
> -892},{4,0,221},{5,0,659},{7,0,697},{7,0,1211},{138,0,284},{133,0,989},{133,11,
> -
> 889},{4,11,160},{5,11,330},{7,11,1434},{136,11,174},{6,10,1665},{7,10,256},{7,1
> 0
> -
> ,1388},{10,10,499},{139,10,670},{7,0,848},{4,10,22},{5,10,10},{136,10,97},{138,0
> -
> ,507},{133,10,481},{4,0,188},{135,0,805},{5,0,884},{6,0,732},{139,0,991},{135,11
> -,968},{11,11,636},{15,11,145},{17,11,34},{19,11,50},{151,11,20},{7,0,959},{16,0,
> -60},{6,10,134},{7,10,437},{9,10,37},{14,10,285},{142,10,371},{7,10,486},{8,10,
> -
> 155},{11,10,93},{140,10,164},{134,0,1653},{7,0,337},{133,10,591},{6,0,1989},{8,
> 0
> -,922},{8,0,978},{133,11,374},{132,0,638},{138,0,500},{133,11,731},{5,10,380},{5,
> -
> 10,650},{136,10,310},{138,11,381},{4,10,364},{7,10,1156},{7,10,1187},{137,10,4
> 09
> -},{137,11,224},{140,0,166},{134,10,482},{4,11,626},{5,11,642},{6,11,425},{10,11,
> -
> 202},{139,11,141},{4,10,781},{6,10,487},{7,10,926},{8,10,263},{139,10,500},{135,
> -
> 0,418},{4,10,94},{135,10,1265},{136,0,760},{132,10,417},{136,11,835},{5,10,348},
> -
> {134,10,522},{6,0,1277},{134,0,1538},{139,11,541},{135,11,1597},{5,11,384},{8,1
> 1
> -,455},{140,11,48},{136,0,770},{5,11,264},{134,11,184},{4,0,89},{5,0,489},{6,0,
> -315},{7,0,553},{7,0,1745},{138,0,243},{4,10,408},{4,10,741},{135,10,500},{134,0,
> -1396},{133,0,560},{6,0,1658},{9,0,3},{10,0,154},{11,0,641},{13,0,85},{13,0,201},
> -{141,0,346},{135,11,1595},{5,11,633},{6,11,28},{7,11,219},{135,11,1323},{9,11,
> -
> 769},{140,11,185},{135,11,785},{7,11,359},{8,11,243},{140,11,175},{138,0,586},{
> 7
> -
> ,0,1271},{134,10,73},{132,11,105},{4,0,166},{5,0,505},{134,0,1670},{133,10,576},
> -{4,11,324},{138,11,104},{142,10,231},{6,0,637},{7,10,1264},{7,10,1678},{11,10,
> -
> 945},{12,10,341},{12,10,471},{12,10,569},{23,11,21},{151,11,23},{8,11,559},{141,
> -11,109},{134,0,1947},{7,0,445},{8,0,307},{8,0,704},{10,0,41},{10,0,439},{11,0,
> -
> 237},{11,0,622},{140,0,201},{135,11,963},{135,0,1977},{4,0,189},{5,0,713},{136,
> 0
> -,57},{138,0,371},{135,10,538},{132,0,552},{6,0,883},{133,10,413},{6,0,923},{132,
> -
> 11,758},{138,11,215},{136,10,495},{7,10,54},{8,10,312},{10,10,191},{10,10,614},
> {
> -
> 140,10,567},{7,11,351},{139,11,128},{7,0,875},{6,10,468},{7,10,1478},{8,10,530},
> -{142,10,290},{135,0,1788},{17,0,49},{133,11,918},{12,11,398},{20,11,39},{21,11,
> -
> 11},{150,11,41},{10,0,661},{6,10,484},{135,10,822},{135,0,1945},{134,0,794},{13
> 7
> -
> ,10,900},{135,10,1335},{6,10,1724},{135,10,2022},{132,11,340},{134,0,1135},{4,
> 0,
> -
> 784},{133,0,745},{5,0,84},{134,0,163},{133,0,410},{4,0,976},{5,11,985},{7,11,509
> -},{7,11,529},{145,11,96},{132,10,474},{134,0,703},{135,11,1919},{5,0,322},{8,0,
> -186},{9,0,262},{10,0,187},{142,0,208},{135,10,1504},{133,0,227},{9,0,560},{13,0,
> -208},{133,10,305},{132,11,247},{7,0,1395},{8,0,486},{9,0,236},{9,0,878},{10,0,
> -218},{11,0,95},{19,0,17},{147,0,31},{7,0,2043},{8,0,672},{141,0,448},{4,11,184},
> -{5,11,390},{6,11,337},{7,11,23},{7,11,494},{7,11,618},{7,11,1456},{8,11,27},{8,
> -
> 11,599},{10,11,153},{139,11,710},{135,0,466},{135,10,1236},{6,0,167},{7,0,186},
> {
> -7,0,656},{10,0,643},{4,10,480},{6,10,302},{6,10,1642},{7,10,837},{7,10,1547},{7,
> -
> 10,1657},{8,10,429},{9,10,228},{13,10,289},{13,10,343},{147,10,101},{134,0,142
> 8}
> -,{134,0,1440},{5,0,412},{7,10,278},{10,10,739},{11,10,708},{141,10,348},{134,0,
> -
> 1118},{136,0,562},{148,11,46},{9,0,316},{139,0,256},{134,0,1771},{135,0,1190},{
> -
> 137,0,132},{10,11,227},{11,11,497},{11,11,709},{140,11,415},{143,0,66},{6,11,36
> 0
> -},{7,11,1664},{136,11,478},{144,10,28},{4,0,317},{135,0,1279},{5,0,63},{133,0,
> -
> 509},{136,11,699},{145,10,36},{134,0,1475},{11,11,343},{142,11,127},{132,11,73
> 9}
> -,{132,0,288},{135,11,1757},{8,0,89},{8,0,620},{9,0,608},{11,0,628},{12,0,322},{
> -
> 143,0,124},{134,0,1225},{7,0,1189},{4,11,67},{5,11,422},{6,10,363},{7,11,1037},{
> -7,11,1289},{7,11,1555},{7,10,1955},{8,10,725},{9,11,741},{145,11,108},{134,0,
> -1468},{6,0,689},{134,0,1451},{138,0,120},{151,0,1},{137,10,805},{142,0,329},{5,
> -
> 10,813},{135,10,2046},{135,0,226},{138,11,96},{7,0,1855},{5,10,712},{11,10,17},
> {
> -
> 13,10,321},{144,10,67},{9,0,461},{6,10,320},{7,10,781},{7,10,1921},{9,10,55},{10
> -
> ,10,186},{10,10,273},{10,10,664},{10,10,801},{11,10,996},{11,10,997},{13,10,157}
> -,{142,10,170},{8,11,203},{8,10,271},{11,11,823},{11,11,846},{12,11,482},{13,11,
> -
> 133},{13,11,277},{13,11,302},{13,11,464},{14,11,205},{142,11,221},{135,0,1346},
> {
> -
> 4,11,449},{133,11,718},{134,0,85},{14,0,299},{7,10,103},{7,10,863},{11,10,184},{
> -145,10,62},{4,11,355},{6,11,311},{9,11,256},{138,11,404},{137,10,659},{138,11,
> -
> 758},{133,11,827},{5,11,64},{140,11,581},{134,0,1171},{4,11,442},{7,11,1047},{7,
> -
> 11,1352},{135,11,1643},{132,0,980},{5,11,977},{6,11,288},{7,11,528},{135,11,10
> 65
> -},{5,0,279},{6,0,235},{7,0,468},{8,0,446},{9,0,637},{10,0,717},{11,0,738},{140,0
> -,514},{132,0,293},{11,10,337},{142,10,303},{136,11,285},{5,0,17},{6,0,371},{9,0,
> -
> 528},{12,0,364},{132,11,254},{5,10,77},{7,10,1455},{10,10,843},{147,10,73},{150,
> -0,5},{132,10,458},{6,11,12},{7,11,1219},{145,11,73},{135,10,1420},{6,10,109},{
> -138,10,382},{135,11,125},{6,10,330},{7,10,1084},{139,10,142},{6,11,369},{6,11,
> -
> 502},{7,11,1036},{8,11,348},{9,11,452},{10,11,26},{11,11,224},{11,11,387},{11,1
> 1
> -
> ,772},{12,11,95},{12,11,629},{13,11,195},{13,11,207},{13,11,241},{14,11,260},{1
> 4
> -
> ,11,270},{143,11,140},{132,11,269},{5,11,480},{7,11,532},{7,11,1197},{7,11,1358}
> -
> ,{8,11,291},{11,11,349},{142,11,396},{150,0,48},{10,0,601},{13,0,353},{141,0,37
> 6
> -},{5,0,779},{5,0,807},{6,0,1655},{134,0,1676},{142,11,223},{4,0,196},{5,0,558},{
> -
> 133,0,949},{148,11,15},{135,11,1764},{134,0,1322},{132,0,752},{139,0,737},{135,
> -
> 11,657},{136,11,533},{135,0,412},{4,0,227},{5,0,159},{5,0,409},{7,0,80},{8,0,556
> -},{10,0,479},{12,0,418},{14,0,50},{14,0,123},{14,0,192},{14,0,249},{14,0,295},{
> -143,0,27},{7,0,1470},{8,0,66},{8,0,137},{8,0,761},{9,0,638},{11,0,80},{11,0,212}
> -,{11,0,368},{11,0,418},{12,0,8},{13,0,15},{16,0,61},{17,0,59},{19,0,28},{148,0,
> -84},{135,10,1985},{4,11,211},{4,11,332},{5,11,335},{6,11,238},{7,11,269},{7,11,
> -811},{7,11,1797},{8,10,122},{8,11,836},{9,11,507},{141,11,242},{6,0,683},{134,0,
> -1252},{4,0,873},{132,10,234},{134,0,835},{6,0,38},{7,0,1220},{8,0,185},{8,0,256}
> -,{9,0,22},{9,0,331},{10,0,738},{11,0,205},{11,0,540},{11,0,746},{13,0,465},{14,0
> -
> ,88},{142,0,194},{138,0,986},{5,11,1009},{12,11,582},{146,11,131},{4,0,159},{6,0
> -,115},{7,0,252},{7,0,257},{7,0,1928},{8,0,69},{9,0,384},{10,0,91},{10,0,615},{12
> -,0,375},{14,0,235},{18,0,117},{147,0,123},{133,0,911},{136,0,278},{5,10,430},{5,
> -10,932},{6,10,131},{7,10,417},{9,10,522},{11,10,314},{141,10,390},{14,10,149},{
> -
> 14,10,399},{143,10,57},{4,0,151},{7,0,1567},{136,0,749},{5,11,228},{6,11,203},{7
> -
> ,11,156},{8,11,347},{137,11,265},{132,10,507},{10,0,989},{140,0,956},{133,0,990}
> -,{5,0,194},{6,0,927},{7,0,1662},{9,0,90},{140,0,564},{4,10,343},{133,10,511},{
> -
> 133,0,425},{7,10,455},{138,10,591},{4,0,774},{7,11,476},{7,11,1592},{138,11,87},
> -
> {5,0,971},{135,10,1381},{5,11,318},{147,11,121},{5,11,291},{7,11,765},{9,11,389}
> -
> ,{140,11,548},{134,10,575},{4,0,827},{12,0,646},{12,0,705},{12,0,712},{140,0,71
> 4
> -},{139,0,752},{137,0,662},{5,0,72},{6,0,264},{7,0,21},{7,0,46},{7,0,2013},{8,0,
> -215},{8,0,513},{10,0,266},{139,0,22},{139,11,522},{6,0,239},{7,0,118},{10,0,95},
> -{11,0,603},{13,0,443},{14,0,160},{143,0,4},{6,0,431},{134,0,669},{7,10,1127},{7,
> -
> 10,1572},{10,10,297},{10,10,422},{11,10,764},{11,10,810},{12,10,264},{13,10,10
> 2}
> -
> ,{13,10,300},{13,10,484},{14,10,147},{14,10,229},{17,10,71},{18,10,118},{147,10,
> -120},{5,0,874},{6,0,1677},{15,0,0},{10,11,525},{139,11,82},{6,0,65},{7,0,939},{7
> -,0,1172},{7,0,1671},{9,0,540},{10,0,696},{11,0,265},{11,0,732},{11,0,928},{11,0,
> -
> 937},{141,0,438},{134,0,1350},{136,11,547},{132,11,422},{5,11,355},{145,11,0},{
> -
> 137,11,905},{5,0,682},{135,0,1887},{132,0,809},{4,0,696},{133,11,865},{6,0,1074}
> -,{6,0,1472},{14,10,35},{142,10,191},{5,11,914},{134,11,1625},{133,11,234},{135,
> -
> 11,1383},{137,11,780},{132,10,125},{4,0,726},{133,0,630},{8,0,802},{136,0,838},
> {
> -
> 132,10,721},{6,0,1337},{7,0,776},{19,0,56},{136,10,145},{132,0,970},{7,10,792},{
> -8,10,147},{10,10,821},{139,10,1021},{139,10,970},{8,0,940},{137,0,797},{135,11,
> -1312},{9,0,248},{10,0,400},{7,11,816},{7,11,1241},{7,10,1999},{9,11,283},{9,11,
> -
> 520},{10,11,213},{10,11,307},{10,11,463},{10,11,671},{10,11,746},{11,11,401},{1
> 1
> -,11,794},{12,11,517},{18,11,107},{147,11,115},{6,0,1951},{134,0,2040},{135,11,
> -339},{13,0,41},{15,0,93},{5,10,168},{5,10,930},{8,10,74},{9,10,623},{12,10,500},
> -{140,10,579},{6,0,118},{7,0,215},{7,0,1521},{140,0,11},{6,10,220},{7,10,1101},{
> -
> 141,10,105},{6,11,421},{7,11,61},{7,11,1540},{10,11,11},{138,11,501},{7,0,615},{
> -138,0,251},{140,11,631},{135,0,1044},{6,10,19},{7,10,1413},{139,10,428},{133,0,
> -225},{7,10,96},{8,10,401},{8,10,703},{137,10,896},{145,10,116},{6,11,102},{7,11,
> -72},{15,11,142},{147,11,67},{7,10,1961},{7,10,1965},{8,10,702},{136,10,750},{7,
> -10,2030},{8,10,150},{8,10,737},{12,10,366},{151,11,30},{4,0,370},{5,0,756},{7,0,
> -1326},{135,11,823},{8,10,800},{9,10,148},{9,10,872},{9,10,890},{11,10,309},{11,
> -
> 10,1001},{13,10,267},{141,10,323},{6,0,1662},{7,0,48},{8,0,771},{10,0,116},{13,0
> -,104},{14,0,105},{14,0,184},{15,0,168},{19,0,92},{148,0,68},{10,0,209},{135,11,
> -1870},{7,11,68},{8,11,48},{8,11,88},{8,11,582},{8,11,681},{9,11,373},{9,11,864},
> -
> {11,11,157},{11,11,336},{11,11,843},{148,11,27},{134,0,930},{4,11,88},{5,11,137}
> -,{5,11,174},{5,11,777},{6,11,1664},{6,11,1725},{7,11,77},{7,11,426},{7,11,1317},
> -{7,11,1355},{8,11,126},{8,11,563},{9,11,523},{9,11,750},{10,11,310},{10,11,836},
> -
> {11,11,42},{11,11,318},{11,11,731},{12,11,68},{12,11,92},{12,11,507},{12,11,692}
> -
> ,{13,11,81},{13,11,238},{13,11,374},{18,11,138},{19,11,78},{19,11,111},{20,11,5
> 5
> -},{20,11,77},{148,11,92},{4,11,938},{135,11,1831},{5,10,547},{7,10,424},{8,11,
> -
> 617},{138,11,351},{6,0,1286},{6,11,1668},{7,11,1499},{8,11,117},{9,11,314},{138,
> -11,174},{6,0,759},{6,0,894},{7,11,707},{139,11,563},{4,0,120},{135,0,1894},{9,0,
> -385},{149,0,17},{138,0,429},{133,11,403},{5,0,820},{135,0,931},{10,0,199},{133,
> -10,133},{6,0,151},{6,0,1675},{7,0,383},{151,0,10},{6,0,761},{136,10,187},{8,0,
> -365},{10,10,0},{10,10,818},{139,10,988},{4,11,44},{5,11,311},{6,11,156},{7,11,
> -
> 639},{7,11,762},{7,11,1827},{9,11,8},{9,11,462},{148,11,83},{4,11,346},{7,11,115
> -},{9,11,180},{9,11,456},{138,11,363},{136,10,685},{7,0,1086},{145,0,46},{6,0,
> -1624},{11,0,11},{12,0,422},{13,0,444},{142,0,360},{6,0,1020},{6,0,1260},{134,0,
> -1589},{4,0,43},{5,0,344},{5,0,357},{14,0,472},{150,0,58},{6,0,1864},{6,0,1866},{
> -6,0,1868},{6,0,1869},{6,0,1874},{6,0,1877},{6,0,1903},{6,0,1911},{9,0,920},{9,0,
> -921},{9,0,924},{9,0,946},{9,0,959},{9,0,963},{9,0,970},{9,0,997},{9,0,1008},{9,0
> -,1017},{12,0,795},{12,0,797},{12,0,798},{12,0,800},{12,0,803},{12,0,811},{12,0,
> -
> 820},{12,0,821},{12,0,839},{12,0,841},{12,0,848},{12,0,911},{12,0,921},{12,0,922
> -},{12,0,925},{12,0,937},{12,0,944},{12,0,945},{12,0,953},{15,0,184},{15,0,191},{
> -
> 15,0,199},{15,0,237},{15,0,240},{15,0,243},{15,0,246},{18,0,203},{21,0,40},{21,0
> -
> ,52},{21,0,57},{24,0,23},{24,0,28},{152,0,30},{134,0,725},{145,11,58},{133,0,888
> -},{137,10,874},{4,0,711},{8,10,774},{10,10,670},{140,10,51},{144,11,40},{6,11,
> -
> 185},{7,11,1899},{139,11,673},{137,10,701},{137,0,440},{4,11,327},{5,11,478},{7,
> -11,1332},{8,11,753},{140,11,227},{4,10,127},{5,10,350},{6,10,356},{8,10,426},{9,
> -10,572},{10,10,247},{139,10,312},{5,11,1020},{133,11,1022},{4,11,103},{133,11,
> -401},{6,0,1913},{6,0,1926},{6,0,1959},{9,0,914},{9,0,939},{9,0,952},{9,0,979},{9
> -,0,990},{9,0,998},{9,0,1003},{9,0,1023},{12,0,827},{12,0,834},{12,0,845},{12,0,
> -912},{12,0,935},{12,0,951},{15,0,172},{15,0,174},{18,0,198},{149,0,63},{5,0,958}
> -,{5,0,987},{4,11,499},{135,11,1421},{7,0,885},{6,10,59},{6,10,1762},{9,10,603},{
> -
> 141,10,397},{10,11,62},{141,11,164},{4,0,847},{135,0,326},{11,0,276},{142,0,293}
> -,{4,0,65},{5,0,479},{5,0,1004},{7,0,1913},{8,0,317},{9,0,302},{10,0,612},{13,0,
> -
> 22},{132,11,96},{4,0,261},{135,0,510},{135,0,1514},{6,10,111},{7,10,4},{8,10,163
> -},{8,10,776},{138,10,566},{4,0,291},{9,0,515},{12,0,152},{12,0,443},{13,0,392},{
> -142,0,357},{7,11,399},{135,11,1492},{4,0,589},{139,0,282},{6,11,563},{135,10,
> -1994},{5,10,297},{135,10,1038},{4,0,130},{7,0,843},{135,0,1562},{5,0,42},{5,0,
> -879},{7,0,245},{7,0,324},{7,0,1532},{11,0,463},{11,0,472},{13,0,363},{144,0,52},
> -{4,0,134},{133,0,372},{133,0,680},{136,10,363},{6,0,1997},{8,0,935},{136,0,977},
> -{4,0,810},{135,0,1634},{135,10,1675},{7,0,1390},{4,11,910},{133,11,832},{7,10,
> -
> 808},{8,11,266},{139,11,578},{132,0,644},{4,0,982},{138,0,867},{132,10,280},{13
> 5
> -
> ,0,540},{140,10,54},{135,0,123},{134,0,1978},{4,10,421},{133,10,548},{6,0,623},{
> -136,0,789},{4,0,908},{5,0,359},{5,0,508},{6,0,1723},{7,0,343},{7,0,1996},{135,0,
> -
> 2026},{134,0,1220},{4,0,341},{135,0,480},{6,10,254},{9,10,109},{138,10,103},{13
> 4
> -
> ,0,888},{8,11,528},{137,11,348},{7,0,1995},{8,0,299},{11,0,890},{12,0,674},{4,11
> -
> ,20},{133,11,616},{135,11,1094},{134,10,1630},{4,0,238},{5,0,503},{6,0,179},{7,0
> -,2003},{8,0,381},{8,0,473},{9,0,149},{10,0,788},{15,0,45},{15,0,86},{20,0,110},{
> -150,0,57},{133,10,671},{4,11,26},{5,11,429},{6,11,245},{7,11,704},{7,11,1379},{
> -135,11,1474},{4,0,121},{5,0,156},{5,0,349},{9,0,431},{10,0,605},{142,0,342},{7,
> -
> 11,943},{139,11,614},{132,10,889},{132,11,621},{7,10,1382},{7,11,1382},{135,10,
> -
> 1910},{132,10,627},{133,10,775},{133,11,542},{133,11,868},{136,11,433},{6,0,13
> 73
> -},{7,0,1011},{11,10,362},{11,10,948},{140,10,388},{6,0,80},{7,0,173},{9,0,547},{
> -
> 10,0,730},{14,0,18},{22,0,39},{135,11,1495},{6,0,1694},{135,0,1974},{140,0,196},
> -{4,0,923},{6,0,507},{6,0,1711},{7,10,451},{8,10,389},{12,10,490},{13,10,16},{13,
> -
> 10,215},{13,10,351},{18,10,132},{147,10,125},{6,0,646},{134,0,1047},{135,10,84
> 1}
> -
> ,{136,10,566},{6,0,1611},{135,0,1214},{139,0,926},{132,11,525},{132,0,595},{5,0,
> -240},{6,0,459},{7,0,12},{7,0,114},{7,0,949},{7,0,1753},{7,0,1805},{8,0,658},{9,0
> -
> ,1},{11,0,959},{141,0,446},{5,10,912},{134,10,1695},{132,0,446},{7,11,62},{12,11
> -
> ,45},{147,11,112},{5,10,236},{6,10,572},{8,10,492},{11,10,618},{144,10,56},{5,10
> -
> ,190},{136,10,318},{135,10,1376},{4,11,223},{6,11,359},{11,11,3},{13,11,108},{1
> 4
> -,11,89},{144,11,22},{132,11,647},{134,0,490},{134,0,491},{134,0,1584},{135,11,
> -
> 685},{138,11,220},{7,0,250},{136,0,507},{132,0,158},{4,0,140},{7,0,362},{8,0,209
> -},{9,0,10},{9,0,160},{9,0,503},{9,0,614},{10,0,689},{11,0,327},{11,0,553},{11,0,
> -
> 725},{11,0,767},{12,0,252},{12,0,583},{13,0,192},{14,0,269},{14,0,356},{148,0,50
> -},{19,0,1},{19,0,26},{150,0,9},{132,11,109},{6,0,228},{7,0,1341},{9,0,408},{138,
> -0,343},{4,0,373},{5,0,283},{6,0,480},{7,0,609},{10,0,860},{138,0,878},{6,0,779},
> -{134,0,1209},{4,0,557},{7,11,263},{7,11,628},{136,11,349},{132,0,548},{7,0,197},
> -{8,0,142},{8,0,325},{9,0,150},{9,0,596},{10,0,350},{10,0,353},{11,0,74},{11,0,
> -315},{12,0,662},{12,0,681},{14,0,423},{143,0,141},{4,11,40},{10,11,67},{11,11,
> -
> 117},{11,11,768},{139,11,935},{7,11,992},{8,11,301},{9,11,722},{12,11,63},{13,1
> 1
> -,29},{14,11,161},{143,11,18},{6,0,1490},{138,11,532},{5,0,580},{7,0,378},{7,0,
> -674},{7,0,1424},{15,0,83},{16,0,11},{15,11,83},{144,11,11},{6,0,1057},{6,0,1335}
> -,{10,0,316},{7,10,85},{7,10,247},{8,10,585},{138,10,163},{4,0,169},{5,0,83},{6,0
> -,399},{6,0,579},{6,0,1513},{7,0,692},{7,0,846},{7,0,1015},{7,0,1799},{8,0,403},{
> -9,0,394},{10,0,133},{12,0,4},{12,0,297},{12,0,452},{16,0,81},{18,0,25},{21,0,14}
> -
> ,{22,0,12},{151,0,18},{134,0,1106},{7,0,1546},{11,0,299},{142,0,407},{134,0,119
> 2
> -},{132,0,177},{5,0,411},{135,0,653},{7,0,439},{10,0,727},{11,0,260},{139,0,684},
> -{138,10,145},{147,10,83},{5,0,208},{7,0,753},{135,0,1528},{137,11,617},{135,10,
> -
> 1922},{135,11,825},{11,0,422},{13,0,389},{4,10,124},{10,10,457},{11,10,121},{11,
> -
> 10,169},{11,10,870},{12,10,214},{14,10,187},{143,10,77},{11,0,615},{15,0,58},{1
> 1
> -,11,615},{143,11,58},{9,0,618},{138,0,482},{6,0,1952},{6,0,1970},{142,0,505},{7,
> -10,1193},{135,11,1838},{133,0,242},{135,10,1333},{6,10,107},{7,10,638},{7,10,
> -
> 1632},{137,10,396},{133,0,953},{5,10,370},{134,10,1756},{5,11,28},{6,11,204},{1
> 0
> -
> ,11,320},{10,11,583},{13,11,502},{14,11,72},{14,11,274},{14,11,312},{14,11,344},
> -{15,11,159},{16,11,62},{16,11,69},{17,11,30},{18,11,42},{18,11,53},{18,11,84},{
> -
> 18,11,140},{19,11,68},{19,11,85},{20,11,5},{20,11,45},{20,11,101},{22,11,7},{150
> -,11,20},{4,11,558},{6,11,390},{7,11,162},{7,11,689},{9,11,360},{138,11,653},{11,
> -
> 0,802},{141,0,67},{133,10,204},{133,0,290},{5,10,970},{134,10,1706},{132,0,380},
> -{5,0,52},{7,0,277},{9,0,368},{139,0,791},{5,11,856},{6,11,1672},{6,11,1757},{6,
> -
> 11,1781},{7,11,1150},{7,11,1425},{7,11,1453},{140,11,513},{5,11,92},{7,10,3},{1
> 0
> -
> ,11,736},{140,11,102},{4,0,112},{5,0,653},{5,10,483},{5,10,685},{6,10,489},{7,10
> -
> ,1204},{136,10,394},{132,10,921},{6,0,1028},{133,10,1007},{5,11,590},{9,11,213},
> -
> {145,11,91},{135,10,1696},{10,0,138},{139,0,476},{5,0,725},{5,0,727},{135,0,181
> 1
> -},{4,0,979},{6,0,1821},{6,0,1838},{8,0,876},{8,0,883},{8,0,889},{8,0,893},{8,0,
> -
> 895},{10,0,934},{12,0,720},{14,0,459},{148,0,123},{135,11,551},{4,0,38},{6,0,435
> -},{7,0,307},{7,0,999},{7,0,1481},{7,0,1732},{7,0,1738},{8,0,371},{9,0,414},{11,0
> -
> ,316},{12,0,52},{13,0,420},{147,0,100},{135,0,1296},{132,10,712},{134,10,1629},
> {
> -
> 133,0,723},{134,0,651},{136,11,191},{9,11,791},{10,11,93},{11,11,301},{16,11,13}
> -,{17,11,23},{18,11,135},{19,11,12},{20,11,1},{20,11,12},{148,11,14},{136,11,503}
> -,{6,11,466},{135,11,671},{6,0,1200},{134,0,1330},{135,0,1255},{134,0,986},{5,0,
> -
> 109},{6,0,1784},{7,0,1895},{12,0,296},{140,0,302},{135,11,983},{133,10,485},{13
> 4
> -,0,660},{134,0,800},{5,0,216},{5,0,294},{6,0,591},{7,0,1879},{9,0,141},{9,0,270}
> -,{9,0,679},{10,0,159},{11,0,197},{11,0,438},{12,0,538},{12,0,559},{14,0,144},{14
> -,0,167},{15,0,67},{4,10,285},{5,10,317},{6,10,301},{7,10,7},{8,10,153},{10,10,
> -
> 766},{11,10,468},{12,10,467},{141,10,143},{136,0,945},{134,0,1090},{137,0,81},{
> -
> 12,11,468},{19,11,96},{148,11,24},{134,0,391},{138,11,241},{7,0,322},{136,0,249}
> -
> ,{134,0,1412},{135,11,795},{5,0,632},{138,0,526},{136,10,819},{6,0,144},{7,0,94
> 8
> -},{7,0,1042},{8,0,235},{8,0,461},{9,0,453},{9,0,796},{10,0,354},{17,0,77},{135,
> -
> 11,954},{139,10,917},{6,0,940},{134,0,1228},{4,0,362},{7,0,52},{135,0,303},{6,11
> -,549},{8,11,34},{8,11,283},{9,11,165},{138,11,475},{7,11,370},{7,11,1007},{7,11,
> -1177},{135,11,1565},{5,11,652},{5,11,701},{135,11,449},{5,0,196},{6,0,486},{7,0,
> -
> 212},{8,0,309},{136,0,346},{6,10,1719},{6,10,1735},{7,10,2016},{7,10,2020},{8,1
> 0
> -,837},{137,10,852},{6,11,159},{6,11,364},{7,11,516},{7,11,1439},{137,11,518},{
> -
> 135,0,1912},{135,0,1290},{132,0,686},{141,11,151},{138,0,625},{136,0,706},{138,
> -10,568},{139,0,412},{4,0,30},{133,0,43},{8,10,67},{138,10,419},{7,0,967},{141,0,
> -
> 11},{12,0,758},{14,0,441},{142,0,462},{10,10,657},{14,10,297},{142,10,361},{139,
> -
> 10,729},{4,0,220},{135,0,1535},{7,11,501},{9,11,111},{10,11,141},{11,11,332},{1
> 3
> -
> ,11,43},{13,11,429},{14,11,130},{14,11,415},{145,11,102},{4,0,950},{6,0,1859},{7
> -,0,11},{8,0,873},{12,0,710},{12,0,718},{12,0,748},{12,0,765},{148,0,124},{5,11,
> -
> 149},{5,11,935},{136,11,233},{142,11,291},{134,0,1579},{7,0,890},{8,10,51},{9,1
> 0
> -,868},{10,10,833},{12,10,481},{12,10,570},{148,10,106},{141,0,2},{132,10,445},{
> -136,11,801},{135,0,1774},{7,0,1725},{138,0,393},{5,0,263},{134,0,414},{132,11,
> -322},{133,10,239},{7,0,456},{7,10,1990},{8,10,130},{139,10,720},{137,0,818},{5,
> -
> 10,123},{6,10,530},{7,10,348},{135,10,1419},{135,10,2024},{6,0,178},{6,0,1750},
> {
> -
> 8,0,251},{9,0,690},{10,0,155},{10,0,196},{10,0,373},{11,0,698},{13,0,155},{148,0
> -,93},{5,0,97},{137,0,393},{134,0,674},{11,0,223},{140,0,168},{132,10,210},{139,
> -
> 11,464},{6,0,1639},{146,0,159},{139,11,2},{7,0,934},{8,0,647},{17,0,97},{19,0,59
> -},{150,0,2},{132,0,191},{5,0,165},{9,0,346},{10,0,655},{11,0,885},{4,10,430},{
> -
> 135,11,357},{133,0,877},{5,10,213},{133,11,406},{8,0,128},{139,0,179},{6,11,69},
> -
> {135,11,117},{135,0,1297},{11,11,43},{13,11,72},{141,11,142},{135,11,1830},{14
> 2,
> -0,164},{5,0,57},{6,0,101},{6,0,586},{6,0,1663},{7,0,132},{7,0,1154},{7,0,1415},{
> -
> 7,0,1507},{12,0,493},{15,0,105},{151,0,15},{5,0,459},{7,0,1073},{8,0,241},{136,0
> -
> ,334},{133,11,826},{133,10,108},{5,10,219},{10,11,132},{11,11,191},{11,11,358},
> {
> -
> 139,11,460},{6,0,324},{6,0,520},{7,0,338},{7,0,1729},{8,0,228},{139,0,750},{21,0
> -,30},{22,0,53},{4,10,193},{5,10,916},{7,10,364},{10,10,398},{10,10,726},{11,10,
> -317},{11,10,626},{12,10,142},{12,10,288},{12,10,678},{13,10,313},{15,10,113},{
> -
> 146,10,114},{6,11,110},{135,11,1681},{135,0,910},{6,10,241},{7,10,907},{8,10,83
> 2
> -},{9,10,342},{10,10,729},{11,10,284},{11,10,445},{11,10,651},{11,10,863},{13,10,
> -
> 398},{146,10,99},{7,0,705},{9,0,734},{5,11,1000},{7,11,733},{137,11,583},{4,0,73
> -},{6,0,612},{7,0,927},{7,0,1822},{8,0,217},{9,0,765},{9,0,766},{10,0,408},{11,0,
> -51},{11,0,793},{12,0,266},{15,0,158},{20,0,89},{150,0,32},{7,0,1330},{4,11,297},
> -{6,11,529},{7,11,152},{7,11,713},{7,11,1845},{8,11,710},{8,11,717},{140,11,639},
> -
> {5,0,389},{136,0,636},{134,0,1409},{4,10,562},{9,10,254},{139,10,879},{134,0,89
> 3
> -},{132,10,786},{4,11,520},{135,11,575},{136,0,21},{140,0,721},{136,0,959},{7,11,
> -1428},{7,11,1640},{9,11,169},{9,11,182},{9,11,367},{9,11,478},{9,11,506},{9,11,
> -
> 551},{9,11,648},{9,11,651},{9,11,697},{9,11,705},{9,11,725},{9,11,787},{9,11,794
> -
> },{10,11,198},{10,11,214},{10,11,267},{10,11,275},{10,11,456},{10,11,551},{10,1
> 1
> -,561},{10,11,613},{10,11,627},{10,11,668},{10,11,675},{10,11,691},{10,11,695},{
> -10,11,707},{10,11,715},{11,11,183},{11,11,201},{11,11,244},{11,11,262},{11,11,
> -
> 352},{11,11,439},{11,11,493},{11,11,572},{11,11,591},{11,11,608},{11,11,611},{1
> 1
> -
> ,11,646},{11,11,674},{11,11,711},{11,11,751},{11,11,761},{11,11,776},{11,11,785}
> -
> ,{11,11,850},{11,11,853},{11,11,862},{11,11,865},{11,11,868},{11,11,898},{11,11,
> -
> 902},{11,11,903},{11,11,910},{11,11,932},{11,11,942},{11,11,957},{11,11,967},{1
> 1
> -
> ,11,972},{12,11,148},{12,11,195},{12,11,220},{12,11,237},{12,11,318},{12,11,339}
> -
> ,{12,11,393},{12,11,445},{12,11,450},{12,11,474},{12,11,509},{12,11,533},{12,11,
> -
> 591},{12,11,594},{12,11,597},{12,11,621},{12,11,633},{12,11,642},{13,11,59},{13,
> -
> 11,60},{13,11,145},{13,11,239},{13,11,250},{13,11,273},{13,11,329},{13,11,344},
> {
> -13,11,365},{13,11,372},{13,11,387},{13,11,403},{13,11,414},{13,11,456},{13,11,
> -478},{13,11,483},{13,11,489},{14,11,55},{14,11,57},{14,11,81},{14,11,90},{14,11,
> -
> 148},{14,11,239},{14,11,266},{14,11,321},{14,11,326},{14,11,327},{14,11,330},{1
> 4
> -
> ,11,347},{14,11,355},{14,11,401},{14,11,411},{14,11,414},{14,11,416},{14,11,420}
> -,{15,11,61},{15,11,74},{15,11,87},{15,11,88},{15,11,94},{15,11,96},{15,11,116},{
> -
> 15,11,149},{15,11,154},{16,11,50},{16,11,63},{16,11,73},{17,11,2},{17,11,66},{17
> -,11,92},{17,11,103},{17,11,112},{18,11,50},{18,11,54},{18,11,82},{18,11,86},{18,
> -
> 11,90},{18,11,111},{18,11,115},{18,11,156},{19,11,40},{19,11,79},{20,11,78},{14
> 9
> -
> ,11,22},{137,11,170},{134,0,1433},{135,11,1307},{139,11,411},{5,0,189},{7,0,442}
> -,{7,0,443},{8,0,281},{12,0,174},{141,0,261},{6,10,216},{7,10,901},{7,10,1343},{
> -
> 136,10,493},{5,11,397},{6,11,154},{7,10,341},{7,11,676},{8,11,443},{8,11,609},{9
> -
> ,11,24},{9,11,325},{10,11,35},{11,10,219},{11,11,535},{11,11,672},{11,11,1018},{
> -12,11,637},{144,11,30},{6,0,2},{7,0,191},{7,0,446},{7,0,1262},{7,0,1737},{8,0,22
> -},{8,0,270},{8,0,612},{9,0,4},{9,0,312},{9,0,436},{9,0,626},{10,0,216},{10,0,311
> -},{10,0,521},{10,0,623},{11,0,72},{11,0,330},{11,0,455},{12,0,321},{12,0,504},{
> -
> 12,0,530},{12,0,543},{13,0,17},{13,0,156},{13,0,334},{14,0,131},{17,0,60},{148,0
> -,64},{7,0,354},{10,0,410},{139,0,815},{139,10,130},{7,10,1734},{137,11,631},{12,
> -
> 0,425},{15,0,112},{10,10,115},{11,10,420},{13,10,404},{14,10,346},{143,10,54},{
> 6
> -,0,60},{6,0,166},{7,0,374},{7,0,670},{7,0,1327},{8,0,411},{8,0,435},{9,0,653},{9
> -
> ,0,740},{10,0,385},{11,0,222},{11,0,324},{11,0,829},{140,0,611},{7,0,1611},{13,0
> -
> ,14},{15,0,44},{19,0,13},{148,0,76},{133,11,981},{4,11,56},{7,11,1791},{8,11,607
> -},{8,11,651},{11,11,465},{11,11,835},{12,11,337},{141,11,480},{6,0,1478},{5,10,
> -1011},{136,10,701},{139,0,596},{5,0,206},{134,0,398},{4,10,54},{5,10,666},{7,10,
> -
> 1039},{7,10,1130},{9,10,195},{138,10,302},{7,0,50},{9,11,158},{138,11,411},{135,
> -
> 11,1120},{6,0,517},{7,0,1159},{10,0,621},{11,0,192},{134,10,1669},{4,0,592},{6,0
> -
> ,600},{135,0,1653},{10,0,223},{139,0,645},{136,11,139},{7,0,64},{136,0,245},{14
> 2
> -,0,278},{6,11,622},{135,11,1030},{136,0,604},{134,0,1502},{138,0,265},{141,11,
> -
> 168},{7,0,1763},{140,0,310},{7,10,798},{139,11,719},{7,11,160},{10,11,624},{142,
> -11,279},{132,11,363},{7,10,122},{9,10,259},{10,10,84},{11,10,470},{12,10,541},{
> -
> 141,10,379},{5,0,129},{6,0,61},{135,0,947},{134,0,1356},{135,11,1191},{13,0,505}
> -,{141,0,506},{11,0,1000},{5,10,82},{5,10,131},{7,10,1755},{8,10,31},{9,10,168},{
> -9,10,764},{139,10,869},{134,0,966},{134,10,605},{134,11,292},{5,11,177},{6,11,
> -616},{7,11,827},{9,11,525},{138,11,656},{135,11,1486},{138,11,31},{5,10,278},{
> -137,10,68},{4,10,163},{5,10,201},{5,10,307},{5,10,310},{6,10,335},{7,10,284},{
> -
> 136,10,165},{6,0,839},{135,10,1660},{136,10,781},{6,10,33},{135,10,1244},{133,
> 0,
> -
> 637},{4,11,161},{133,11,631},{137,0,590},{7,10,1953},{136,10,720},{5,0,280},{7,
> 0
> -
> ,1226},{138,10,203},{134,0,1386},{5,0,281},{6,0,1026},{6,10,326},{7,10,677},{13
> 7
> -
> ,10,425},{7,11,1557},{135,11,1684},{135,0,1064},{9,11,469},{9,11,709},{12,11,51
> 2
> -},{14,11,65},{145,11,12},{134,0,917},{10,11,229},{11,11,73},{11,11,376},{139,11,
> -433},{7,0,555},{9,0,192},{13,0,30},{13,0,49},{15,0,150},{16,0,76},{20,0,52},{7,
> -
> 10,1316},{7,10,1412},{7,10,1839},{9,10,589},{11,10,241},{11,10,676},{11,10,811},
> -
> {11,10,891},{12,10,140},{12,10,346},{12,10,479},{13,10,381},{14,10,188},{146,10,
> -30},{149,0,15},{6,0,1882},{6,0,1883},{6,0,1897},{9,0,945},{9,0,1014},{9,0,1020},
> -{12,0,823},{12,0,842},{12,0,866},{12,0,934},{15,0,242},{146,0,208},{6,0,965},{
> -134,0,1499},{7,0,33},{7,0,120},{8,0,489},{9,0,319},{10,0,820},{11,0,1004},{12,0,
> -379},{12,0,679},{13,0,117},{13,0,412},{14,0,25},{15,0,52},{15,0,161},{16,0,47},{
> -149,0,2},{6,11,558},{7,11,651},{8,11,421},{9,11,0},{138,11,34},{4,0,937},{5,0,
> -
> 801},{7,0,473},{5,10,358},{7,10,1184},{10,10,662},{13,10,212},{13,10,304},{13,1
> 0
> -
> ,333},{145,10,98},{132,0,877},{6,0,693},{134,0,824},{132,0,365},{7,11,1832},{13
> 8
> -,11,374},{5,0,7},{139,0,774},{4,0,734},{5,0,662},{134,0,430},{4,0,746},{135,0,
> -1090},{5,0,360},{8,0,237},{10,0,231},{147,0,124},{138,11,348},{6,11,6},{7,11,81}
> -,{7,11,771},{7,11,1731},{9,11,405},{138,11,421},{6,0,740},{137,0,822},{133,10,
> -946},{7,0,1485},{136,0,929},{7,10,411},{8,10,631},{9,10,323},{10,10,355},{11,10,
> -
> 491},{12,10,143},{12,10,402},{13,10,73},{14,10,408},{15,10,107},{146,10,71},{13
> 5
> -
> ,10,590},{5,11,881},{133,11,885},{150,11,25},{4,0,852},{5,11,142},{134,11,546},{
> -
> 7,10,1467},{8,10,328},{10,10,544},{11,10,955},{13,10,320},{145,10,83},{9,0,17},{
> -
> 10,0,291},{11,10,511},{13,10,394},{14,10,298},{14,10,318},{146,10,103},{5,11,46
> 6
> -
> },{11,11,571},{12,11,198},{13,11,283},{14,11,186},{15,11,21},{143,11,103},{134,
> 0
> -,1001},{4,11,185},{5,11,257},{5,11,839},{5,11,936},{7,11,171},{9,11,399},{10,11,
> -258},{10,11,395},{10,11,734},{11,11,1014},{12,11,23},{13,11,350},{14,11,150},{
> -147,11,6},{143,0,35},{132,0,831},{5,10,835},{134,10,483},{4,0,277},{5,0,608},{6,
> -
> 0,493},{7,0,457},{12,0,384},{7,11,404},{7,11,1377},{7,11,1430},{7,11,2017},{8,11
> -,149},{8,11,239},{8,11,512},{8,11,793},{8,11,818},{9,11,474},{9,11,595},{10,11,
> -
> 122},{10,11,565},{10,11,649},{10,11,783},{11,11,239},{11,11,295},{11,11,447},{1
> 1
> -,11,528},{11,11,639},{11,11,800},{11,11,936},{12,11,25},{12,11,73},{12,11,77},{
> -12,11,157},{12,11,316},{12,11,390},{12,11,391},{12,11,394},{12,11,395},{12,11,
> -478},{12,11,503},{12,11,592},{12,11,680},{13,11,50},{13,11,53},{13,11,132},{13,
> -
> 11,198},{13,11,275},{13,11,322},{13,11,415},{14,11,71},{14,11,257},{14,11,395},
> {
> -
> 15,11,71},{15,11,136},{17,11,123},{18,11,93},{147,11,58},{134,0,1351},{7,0,27},{
> -
> 135,0,316},{136,11,712},{136,0,984},{133,0,552},{137,0,264},{132,0,401},{6,0,71
> 0
> -
> },{6,0,1111},{134,0,1343},{134,0,1211},{9,0,543},{10,0,524},{11,0,108},{11,0,653
> -},{12,0,524},{13,0,123},{14,0,252},{16,0,18},{19,0,38},{20,0,26},{20,0,65},{21,0
> -,3},{151,0,11},{4,0,205},{5,0,623},{7,0,104},{8,0,519},{137,0,716},{132,10,677},
> -{4,11,377},{152,11,13},{135,11,1673},{7,0,579},{9,0,41},{9,0,244},{9,0,669},{10,
> -0,5},{11,0,861},{11,0,951},{139,0,980},{132,0,717},{136,0,1011},{132,0,805},{4,
> -
> 11,180},{135,11,1906},{132,10,777},{132,10,331},{132,0,489},{6,0,1024},{4,11,4
> 91
> -
> },{133,10,747},{135,11,1182},{4,11,171},{138,11,234},{4,11,586},{7,11,1186},{13
> 8
> -
> ,11,631},{135,0,892},{135,11,336},{9,11,931},{10,11,334},{148,11,71},{137,0,473}
> -,{6,0,864},{12,0,659},{139,11,926},{7,0,819},{9,0,26},{9,0,392},{10,0,152},{10,0
> -,226},{11,0,19},{12,0,276},{12,0,426},{12,0,589},{13,0,460},{15,0,97},{19,0,48},
> -{148,0,104},{135,0,51},{133,10,326},{4,10,691},{146,10,16},{9,0,130},{11,0,765},
> -
> {10,10,680},{10,10,793},{141,10,357},{133,11,765},{8,0,229},{6,10,32},{7,10,385}
> -,{7,10,757},{7,10,1916},{8,10,94},{8,10,711},{9,10,541},{10,10,162},{10,10,795},
> -
> {11,10,989},{11,10,1010},{12,10,14},{142,10,308},{7,11,474},{137,11,578},{132,0,
> -674},{132,0,770},{5,0,79},{7,0,1027},{7,0,1477},{139,0,52},{133,11,424},{134,0,
> -1666},{6,0,409},{6,10,349},{6,10,1682},{7,10,1252},{8,10,112},{8,11,714},{9,10,
> -
> 435},{9,10,668},{10,10,290},{10,10,319},{10,10,815},{11,10,180},{11,10,837},{12,
> -10,240},{13,10,152},{13,10,219},{142,10,158},{5,0,789},{134,0,195},{4,0,251},{4,
> -0,688},{7,0,513},{135,0,1284},{132,10,581},{9,11,420},{10,11,269},{10,11,285},{
> -
> 10,11,576},{11,11,397},{13,11,175},{145,11,90},{6,10,126},{7,10,573},{8,10,397},
> -{142,10,44},{132,11,429},{133,0,889},{4,0,160},{5,0,330},{7,0,1434},{136,0,174},
> -
> {7,11,18},{7,11,699},{7,11,1966},{8,11,752},{9,11,273},{9,11,412},{9,11,703},{10
> -
> ,11,71},{10,11,427},{10,11,508},{146,11,97},{6,0,872},{134,0,899},{133,10,926},{
> -
> 134,0,1126},{134,0,918},{4,11,53},{5,11,186},{135,11,752},{7,0,268},{136,0,569},
> -
> {134,0,1224},{6,0,1361},{7,10,1232},{137,10,531},{8,11,575},{10,11,289},{139,11,
> -
> 319},{133,10,670},{132,11,675},{133,0,374},{135,10,1957},{133,0,731},{11,0,190
> },
> -{15,0,49},{11,11,190},{143,11,49},{4,0,626},{5,0,506},{5,0,642},{6,0,425},{10,0,
> -202},{139,0,141},{137,0,444},{7,10,242},{135,10,1942},{6,11,209},{8,11,468},{9,
> -11,210},{11,11,36},{12,11,28},{12,11,630},{13,11,21},{13,11,349},{14,11,7},{145,
> -
> 11,13},{4,11,342},{135,11,1179},{5,10,834},{7,10,1202},{8,10,14},{9,10,481},{13
> 7
> -
> ,10,880},{4,11,928},{133,11,910},{4,11,318},{4,11,496},{7,11,856},{139,11,654},{
> -
> 136,0,835},{7,0,1526},{138,10,465},{151,0,17},{135,0,477},{4,10,357},{6,10,172},
> -{7,10,143},{137,10,413},{6,0,1374},{138,0,994},{18,0,76},{132,10,590},{7,0,287},
> -
> {8,0,355},{9,0,293},{137,0,743},{134,0,1389},{7,11,915},{8,11,247},{147,11,0},{4
> -,11,202},{5,11,382},{6,11,454},{7,11,936},{7,11,1803},{8,11,758},{9,11,375},{9,
> -
> 11,895},{10,11,743},{10,11,792},{11,11,978},{11,11,1012},{142,11,109},{5,0,384},
> -{8,0,455},{140,0,48},{132,11,390},{5,10,169},{7,10,333},{136,10,45},{5,0,264},{
> -
> 134,0,184},{138,11,791},{133,11,717},{132,10,198},{6,11,445},{7,11,332},{137,1
> 1,
> -909},{136,0,1001},{4,10,24},{5,10,140},{5,10,185},{7,10,1500},{11,10,565},{139,
> -
> 10,838},{134,11,578},{5,0,633},{6,0,28},{135,0,1323},{132,0,851},{136,11,267},{
> 7
> -
> ,0,359},{8,0,243},{140,0,175},{4,10,334},{133,10,593},{141,11,87},{136,11,766},{
> -
> 10,0,287},{12,0,138},{10,11,287},{140,11,138},{4,0,105},{132,0,740},{140,10,116}
> -
> ,{134,0,857},{135,11,1841},{6,0,1402},{137,0,819},{132,11,584},{132,10,709},{13
> 3
> -
> ,10,897},{5,0,224},{13,0,174},{146,0,52},{135,10,1840},{4,10,608},{133,10,497},{
> -
> 139,11,60},{4,0,758},{135,0,1649},{4,11,226},{4,11,326},{135,11,1770},{5,11,426}
> -,{8,11,30},{9,11,2},{11,11,549},{147,11,122},{135,10,2039},{6,10,540},{136,10,
> -136},{4,0,573},{8,0,655},{4,10,897},{133,10,786},{7,0,351},{139,0,128},{133,10,
> -999},{4,10,299},{135,10,1004},{133,0,918},{132,11,345},{4,11,385},{7,11,265},{
> -135,11,587},{133,10,456},{136,10,180},{6,0,687},{134,0,1537},{4,11,347},{5,11,
> -423},{5,11,996},{135,11,1329},{132,10,755},{7,11,1259},{9,11,125},{11,11,65},{
> -140,11,285},{5,11,136},{6,11,136},{136,11,644},{134,0,1525},{4,0,1009},{135,0,
> -
> 1139},{139,10,338},{132,0,340},{135,10,1464},{8,0,847},{10,0,861},{10,0,876},{1
> 0
> -,0,889},{10,0,922},{10,0,929},{10,0,933},{12,0,784},{140,0,791},{139,0,176},{9,
> -11,134},{10,11,2},{10,11,27},{10,11,333},{11,11,722},{143,11,1},{4,11,433},{133,
> -11,719},{5,0,985},{7,0,509},{7,0,529},{145,0,96},{132,0,615},{4,10,890},{5,10,
> -805},{5,10,819},{5,10,961},{6,10,396},{6,10,1631},{6,10,1678},{7,10,1967},{7,10,
> -
> 2041},{9,10,630},{11,10,8},{11,10,1019},{12,10,176},{13,10,225},{14,10,292},{14
> 9
> -
> ,10,24},{135,0,1919},{134,0,1131},{144,11,21},{144,11,51},{135,10,1815},{4,0,24
> 7
> -
> },{7,10,1505},{10,10,190},{10,10,634},{11,10,792},{12,10,358},{140,10,447},{5,1
> 0
> -,0},{6,10,536},{7,10,604},{13,10,445},{145,10,126},{4,0,184},{5,0,390},{6,0,337}
> -,{7,0,23},{7,0,494},{7,0,618},{7,0,1456},{8,0,27},{8,0,599},{10,0,153},{139,0,
> -710},{6,10,232},{6,10,412},{7,10,1074},{8,10,9},{8,10,157},{8,10,786},{9,10,196}
> -,{9,10,352},{9,10,457},{10,10,337},{11,10,232},{11,10,877},{12,10,480},{140,10,
> -
> 546},{13,0,38},{135,10,958},{4,10,382},{136,10,579},{4,10,212},{135,10,1206},{4,
> -
> 11,555},{8,11,536},{138,11,288},{11,11,139},{139,11,171},{9,11,370},{138,11,90},
> -
> {132,0,1015},{134,0,1088},{5,10,655},{135,11,977},{134,0,1585},{17,10,67},{147,
> -10,74},{10,0,227},{11,0,497},{11,0,709},{140,0,415},{6,0,360},{7,0,1664},{136,0,
> -
> 478},{7,0,95},{6,10,231},{136,10,423},{140,11,65},{4,11,257},{135,11,2031},{135,
> -
> 11,1768},{133,10,300},{139,11,211},{136,0,699},{6,10,237},{7,10,611},{8,10,100},
> -{9,10,416},{11,10,335},{12,10,173},{146,10,101},{14,0,26},{146,0,150},{6,0,581},
> -
> {135,0,1119},{135,10,1208},{132,0,739},{6,11,83},{6,11,1733},{135,11,1389},{13
> 7,
> -0,869},{4,0,67},{5,0,422},{7,0,1037},{7,0,1289},{7,0,1555},{9,0,741},{145,0,108}
> -
> ,{133,10,199},{12,10,427},{146,10,38},{136,0,464},{142,0,42},{10,0,96},{8,11,50
> 1
> -},{137,11,696},{134,11,592},{4,0,512},{4,0,966},{5,0,342},{6,0,1855},{8,0,869},{
> -8,0,875},{8,0,901},{144,0,26},{8,0,203},{11,0,823},{11,0,846},{12,0,482},{13,0,
> -277},{13,0,302},{13,0,464},{14,0,205},{142,0,221},{4,0,449},{133,0,718},{7,11,
> -1718},{9,11,95},{9,11,274},{10,11,279},{10,11,317},{10,11,420},{11,11,303},{11,
> -
> 11,808},{12,11,134},{12,11,367},{13,11,149},{13,11,347},{14,11,349},{14,11,406},
> -
> {18,11,22},{18,11,89},{18,11,122},{147,11,47},{133,11,26},{4,0,355},{6,0,311},{9
> -
> ,0,256},{138,0,404},{132,11,550},{10,0,758},{6,10,312},{6,10,1715},{10,10,584},{
> -11,10,546},{11,10,692},{12,10,259},{12,10,295},{13,10,46},{141,10,154},{136,11,
> -
> 822},{5,0,827},{4,11,902},{5,11,809},{6,11,122},{135,11,896},{5,0,64},{140,0,581
> -},{4,0,442},{6,0,739},{7,0,1047},{7,0,1352},{7,0,1643},{7,11,1911},{9,11,449},{
> -10,11,192},{138,11,740},{135,11,262},{132,10,588},{133,11,620},{5,0,977},{6,0,
> -288},{7,0,528},{4,11,34},{5,11,574},{7,11,279},{7,11,1624},{136,11,601},{6,0,
> -1375},{4,10,231},{5,10,61},{6,10,104},{7,10,729},{7,10,964},{7,10,1658},{140,10,
> -414},{6,10,263},{138,10,757},{132,10,320},{4,0,254},{7,0,1309},{5,11,332},{135,
> -
> 11,1309},{6,11,261},{8,11,182},{139,11,943},{132,10,225},{6,0,12},{135,0,1219},
> {
> -
> 4,0,275},{12,0,376},{6,11,1721},{141,11,490},{4,11,933},{133,11,880},{6,0,951},{
> -6,0,1109},{6,0,1181},{7,0,154},{4,10,405},{7,10,817},{14,10,58},{17,10,37},{146,
> -
> 10,124},{6,0,1520},{133,10,974},{134,0,1753},{6,0,369},{6,0,502},{7,0,1036},{8,0
> -,348},{9,0,452},{10,0,26},{11,0,224},{11,0,387},{11,0,772},{12,0,95},{12,0,629},
> -
> {13,0,195},{13,0,207},{13,0,241},{14,0,260},{14,0,270},{143,0,140},{132,0,269},{
> -5,0,480},{7,0,532},{7,0,1197},{7,0,1358},{8,0,291},{11,0,349},{142,0,396},{5,10,
> -
> 235},{7,10,1239},{11,10,131},{140,10,370},{7,10,956},{7,10,1157},{7,10,1506},{7,
> -
> 10,1606},{7,10,1615},{7,10,1619},{7,10,1736},{7,10,1775},{8,10,590},{9,10,324},
> {
> -
> 9,10,736},{9,10,774},{9,10,776},{9,10,784},{10,10,567},{10,10,708},{11,10,518},{
> -11,10,613},{11,10,695},{11,10,716},{11,10,739},{11,10,770},{11,10,771},{11,10,
> -
> 848},{11,10,857},{11,10,931},{11,10,947},{12,10,326},{12,10,387},{12,10,484},{1
> 2
> -
> ,10,528},{12,10,552},{12,10,613},{13,10,189},{13,10,256},{13,10,340},{13,10,432}
> -
> ,{13,10,436},{13,10,440},{13,10,454},{14,10,174},{14,10,220},{14,10,284},{14,10,
> -390},{145,10,121},{8,11,598},{9,11,664},{138,11,441},{9,10,137},{138,10,221},{
> -133,11,812},{148,0,15},{134,0,1341},{6,0,1017},{4,11,137},{7,11,1178},{135,11,
> -1520},{7,10,390},{138,10,140},{7,11,1260},{135,11,1790},{137,11,191},{135,10,
> -1144},{6,0,1810},{7,0,657},{8,0,886},{10,0,857},{14,0,440},{144,0,96},{8,0,533},
> -
> {6,11,1661},{7,11,1975},{7,11,2009},{135,11,2011},{6,0,1453},{134,10,464},{132,
> -11,715},{5,10,407},{11,10,204},{11,10,243},{11,10,489},{12,10,293},{19,10,37},{
> -20,10,73},{150,10,38},{133,11,703},{4,0,211},{7,0,1483},{5,10,325},{8,10,5},{8,
> -10,227},{9,10,105},{10,10,585},{140,10,614},{4,0,332},{5,0,335},{6,0,238},{7,0,
> -269},{7,0,811},{7,0,1797},{8,0,836},{9,0,507},{141,0,242},{5,11,89},{7,11,1915},
> -{9,11,185},{9,11,235},{9,11,496},{10,11,64},{10,11,270},{10,11,403},{10,11,469},
> -
> {10,11,529},{10,11,590},{11,11,140},{11,11,860},{13,11,1},{13,11,422},{14,11,34
> 1
> -},{14,11,364},{17,11,93},{18,11,113},{19,11,97},{147,11,113},{133,11,695},{16,0,
> -19},{5,11,6},{6,11,183},{6,10,621},{7,11,680},{7,11,978},{7,11,1013},{7,11,1055}
> -
> ,{12,11,230},{13,11,172},{13,10,504},{146,11,29},{136,0,156},{133,0,1009},{6,11,
> -29},{139,11,63},{134,0,820},{134,10,218},{7,10,454},{7,10,782},{8,10,768},{140,
> -10,686},{5,0,228},{6,0,203},{7,0,156},{8,0,347},{9,0,265},{18,0,39},{20,0,54},{
> -21,0,31},{22,0,3},{23,0,0},{15,11,8},{18,11,39},{20,11,54},{21,11,31},{22,11,3},
> -{151,11,0},{7,0,1131},{135,0,1468},{144,10,0},{134,0,1276},{10,10,676},{140,10,
> -462},{132,11,311},{134,11,1740},{7,11,170},{8,11,90},{8,11,177},{8,11,415},{11,
> -
> 11,714},{142,11,281},{134,10,164},{6,0,1792},{138,0,849},{150,10,50},{5,0,291},
> {
> -5,0,318},{7,0,765},{9,0,389},{12,0,548},{8,11,522},{142,11,328},{11,11,91},{13,
> -
> 11,129},{15,11,101},{145,11,125},{4,11,494},{6,11,74},{7,11,44},{7,11,407},{8,11
> -,551},{12,11,17},{15,11,5},{148,11,11},{4,11,276},{133,11,296},{6,10,343},{7,10,
> -
> 195},{7,11,1777},{9,10,226},{10,10,197},{10,10,575},{11,10,502},{139,10,899},{1
> 0
> -,0,525},{139,0,82},{14,0,453},{4,11,7},{5,11,90},{5,11,158},{6,11,542},{7,11,221
> -
> },{7,11,1574},{9,11,490},{10,11,540},{11,11,443},{139,11,757},{135,0,666},{22,1
> 0
> -,29},{150,11,29},{4,0,422},{147,10,8},{5,0,355},{145,0,0},{6,0,1873},{9,0,918},{
> -
> 7,11,588},{9,11,175},{138,11,530},{143,11,31},{11,0,165},{7,10,1125},{9,10,143},
> -
> {14,10,405},{150,10,21},{9,0,260},{137,0,905},{5,11,872},{6,11,57},{6,11,479},{6
> -,11,562},{7,11,471},{7,11,1060},{9,11,447},{9,11,454},{141,11,6},{138,11,704},{
> -133,0,865},{5,0,914},{134,0,1625},{133,0,234},{7,0,1383},{5,11,31},{6,11,614},{
> -145,11,61},{7,11,1200},{138,11,460},{6,11,424},{135,11,1866},{136,0,306},{5,10,
> -
> 959},{12,11,30},{13,11,148},{14,11,87},{14,11,182},{16,11,42},{18,11,92},{148,1
> 1
> -,70},{6,0,1919},{6,0,1921},{9,0,923},{9,0,930},{9,0,941},{9,0,949},{9,0,987},{9,
> -0,988},{9,0,992},{12,0,802},{12,0,815},{12,0,856},{12,0,885},{12,0,893},{12,0,
> -
> 898},{12,0,919},{12,0,920},{12,0,941},{12,0,947},{15,0,183},{15,0,185},{15,0,189
> -},{15,0,197},{15,0,202},{15,0,233},{18,0,218},{18,0,219},{18,0,233},{143,11,156}
> -,{135,10,1759},{136,10,173},{13,0,163},{13,0,180},{18,0,78},{20,0,35},{5,11,13},
> -{134,11,142},{134,10,266},{6,11,97},{7,11,116},{8,11,322},{8,11,755},{9,11,548},
> -
> {10,11,714},{11,11,884},{141,11,324},{135,0,1312},{9,0,814},{137,11,676},{133,0,
> -707},{135,0,1493},{6,0,421},{7,0,61},{7,0,1540},{10,0,11},{138,0,501},{12,0,733}
> -
> ,{12,0,766},{7,11,866},{135,11,1163},{137,0,341},{142,0,98},{145,11,115},{135,1
> 1
> -
> ,1111},{136,10,300},{136,0,1014},{8,11,1},{9,11,112},{138,11,326},{132,11,730},
> {
> -5,11,488},{6,11,527},{7,11,489},{7,11,1636},{8,11,121},{8,11,144},{8,11,359},{9,
> -
> 11,193},{9,11,241},{9,11,336},{9,11,882},{11,11,266},{11,11,372},{11,11,944},{1
> 2
> -,11,401},{140,11,641},{6,0,971},{134,0,1121},{6,0,102},{7,0,72},{15,0,142},{147,
> -0,67},{151,0,30},{135,0,823},{134,0,1045},{5,10,427},{5,10,734},{7,10,478},{136,
> -
> 10,52},{7,0,1930},{11,10,217},{142,10,165},{6,0,1512},{135,0,1870},{9,11,31},{1
> 0
> -,11,244},{10,11,699},{12,11,149},{141,11,497},{133,11,377},{145,11,101},{10,11,
> -
> 158},{13,11,13},{13,11,137},{13,11,258},{14,11,111},{14,11,225},{14,11,253},{14,
> -
> 11,304},{14,11,339},{14,11,417},{146,11,33},{6,0,87},{6,10,1734},{7,10,20},{7,10
> -
> ,1056},{8,10,732},{9,10,406},{9,10,911},{138,10,694},{134,0,1243},{137,0,245},{
> 7
> -,0,68},{8,0,48},{8,0,88},{8,0,582},{8,0,681},{9,0,373},{9,0,864},{11,0,157},{11,
> -0,336},{11,0,843},{148,0,27},{8,11,663},{144,11,8},{133,10,613},{4,0,88},{5,0,
> -137},{5,0,174},{5,0,777},{6,0,1664},{6,0,1725},{7,0,77},{7,0,426},{7,0,1317},{7,
> -0,1355},{8,0,126},{8,0,563},{9,0,523},{9,0,750},{10,0,310},{10,0,836},{11,0,42},
> -{11,0,318},{11,0,731},{12,0,68},{12,0,92},{12,0,507},{12,0,692},{13,0,81},{13,0,
> -238},{13,0,374},{14,0,436},{18,0,138},{19,0,78},{19,0,111},{20,0,55},{20,0,77},{
> -148,0,92},{141,0,418},{4,0,938},{137,0,625},{138,0,351},{5,11,843},{7,10,32},{7,
> -
> 10,984},{8,10,85},{8,10,709},{9,10,579},{9,10,847},{9,10,856},{10,10,799},{11,10
> -
> ,258},{11,10,1007},{12,10,331},{12,10,615},{13,10,188},{13,10,435},{14,10,8},{1
> 5
> -
> ,10,165},{16,10,27},{148,10,40},{6,0,1668},{7,0,1499},{8,0,117},{9,0,314},{138,0
> -,174},{135,0,707},{132,11,554},{133,11,536},{5,0,403},{5,11,207},{9,11,79},{11,
> -11,625},{145,11,7},{132,11,424},{136,11,785},{4,10,167},{135,10,82},{9,0,7},{23,
> -0,6},{9,11,7},{151,11,6},{6,0,282},{5,10,62},{6,10,534},{7,10,74},{7,10,678},{7,
> -10,684},{7,10,1043},{7,10,1072},{8,10,280},{8,10,541},{8,10,686},{9,10,258},{10,
> -10,519},{11,10,252},{140,10,282},{138,10,33},{132,10,359},{4,0,44},{5,0,311},{6,
> -0,156},{7,0,639},{7,0,762},{7,0,1827},{9,0,8},{9,0,462},{148,0,83},{7,11,769},{9
> -,11,18},{138,11,358},{4,0,346},{7,0,115},{9,0,180},{9,0,456},{10,0,363},{4,11,
> -
> 896},{134,11,1777},{133,10,211},{7,0,761},{7,0,1051},{137,0,545},{6,10,145},{14
> 1
> -,10,336},{7,11,750},{9,11,223},{11,11,27},{11,11,466},{12,11,624},{14,11,265},{
> -
> 146,11,61},{6,0,752},{6,0,768},{6,0,1195},{6,0,1254},{6,0,1619},{137,0,835},{6,0
> -
> ,1936},{8,0,930},{136,0,960},{132,10,263},{132,11,249},{12,0,653},{132,10,916},
> {
> -4,11,603},{133,11,661},{8,0,344},{4,11,11},{6,11,128},{7,11,231},{7,11,1533},{
> -
> 138,11,725},{134,0,1483},{134,0,875},{6,0,185},{7,0,1899},{9,0,875},{139,0,673},
> -{15,10,155},{144,10,79},{7,0,93},{7,0,210},{7,0,1223},{8,0,451},{8,0,460},{11,0,
> -353},{11,0,475},{4,10,599},{6,10,1634},{7,10,67},{7,10,691},{7,10,979},{7,10,
> -1697},{8,10,207},{8,10,214},{8,10,231},{8,10,294},{8,10,336},{8,10,428},{8,10,
> -471},{8,10,622},{8,10,626},{8,10,679},{8,10,759},{8,10,829},{9,10,11},{9,10,246}
> -,{9,10,484},{9,10,573},{9,10,706},{9,10,762},{9,10,798},{9,10,855},{9,10,870},{9
> -
> ,10,912},{10,10,303},{10,10,335},{10,10,424},{10,10,461},{10,10,543},{10,10,759}
> -,{10,10,814},{11,10,59},{11,10,235},{11,10,590},{11,10,929},{11,10,963},{11,10,
> -
> 987},{12,10,114},{12,10,182},{12,10,226},{12,10,332},{12,10,439},{12,10,575},{1
> 2
> -
> ,10,598},{12,10,675},{13,10,8},{13,10,125},{13,10,194},{13,10,287},{14,10,197},{
> -
> 14,10,383},{15,10,53},{17,10,63},{19,10,46},{19,10,98},{19,10,106},{148,10,85},{
> -
> 132,11,476},{4,0,327},{5,0,478},{7,0,1332},{136,0,753},{5,0,1020},{133,0,1022},{
> -
> 135,11,1807},{4,0,103},{133,0,401},{4,0,499},{135,0,1421},{10,0,207},{13,0,164},
> -{147,10,126},{9,11,20},{10,11,324},{139,11,488},{132,0,96},{9,11,280},{138,11,
> -
> 134},{135,0,968},{133,10,187},{135,10,1286},{5,11,112},{6,11,103},{134,11,150},
> {
> -8,0,914},{10,0,3},{4,10,215},{9,10,38},{11,10,23},{11,10,127},{139,10,796},{135,
> -0,399},{6,0,563},{137,0,224},{6,0,704},{134,0,1214},{4,11,708},{8,11,15},{9,11,
> -50},{9,11,386},{11,11,18},{11,11,529},{140,11,228},{4,11,563},{7,11,109},{7,11,
> -
> 592},{7,11,637},{7,11,770},{7,11,1701},{8,11,436},{8,11,463},{9,11,60},{9,11,335
> -},{9,11,904},{10,11,73},{11,11,434},{12,11,585},{13,11,331},{18,11,110},{148,11,
> -
> 60},{134,0,1559},{132,11,502},{6,11,347},{138,11,161},{4,11,33},{5,11,102},{5,1
> 1
> -
> ,500},{6,11,284},{7,11,1079},{7,11,1423},{7,11,1702},{8,11,470},{9,11,554},{9,11
> -,723},{139,11,333},{7,11,246},{135,11,840},{6,11,10},{8,11,571},{9,11,739},{143,
> -11,91},{8,0,861},{10,0,905},{12,0,730},{12,0,789},{133,11,626},{134,0,946},{5,0,
> -746},{12,0,333},{14,0,332},{12,11,333},{142,11,332},{5,11,18},{6,11,526},{13,11,
> -24},{13,11,110},{19,11,5},{147,11,44},{4,0,910},{5,0,832},{135,10,2002},{10,11,
> -
> 768},{139,11,787},{4,11,309},{5,11,462},{7,11,970},{135,11,1097},{4,10,28},{5,1
> 0
> -
> ,440},{7,10,248},{11,10,833},{140,10,344},{134,10,1654},{6,0,632},{6,0,652},{6,0
> -
> ,1272},{6,0,1384},{134,0,1560},{134,11,1704},{6,0,1393},{133,10,853},{6,10,249},
> -{7,10,1234},{139,10,573},{5,11,86},{7,11,743},{9,11,85},{10,11,281},{10,11,432},
> -
> {11,11,490},{12,11,251},{13,11,118},{14,11,378},{146,11,143},{5,11,524},{133,11,
> -744},{134,0,1514},{10,0,201},{142,0,319},{7,0,717},{10,0,510},{7,10,392},{8,10,
> -20},{8,10,172},{8,10,690},{9,10,383},{9,10,845},{11,10,293},{11,10,832},{11,10,
> -920},{11,10,984},{141,10,221},{134,0,1381},{5,10,858},{133,10,992},{8,0,528},{
> -137,0,348},{10,11,107},{140,11,436},{4,0,20},{133,0,616},{134,0,1251},{132,11,
> -
> 927},{10,11,123},{12,11,670},{13,11,371},{14,11,142},{146,11,94},{134,0,1163},{
> 7
> -,11,1149},{137,11,156},{134,0,307},{133,11,778},{7,0,1091},{135,0,1765},{5,11,
> -502},{6,10,268},{137,10,62},{8,11,196},{10,11,283},{139,11,406},{4,0,26},{5,0,
> -429},{6,0,245},{7,0,704},{7,0,1379},{135,0,1474},{133,11,855},{132,0,881},{4,0,
> -621},{135,11,1596},{7,11,1400},{9,11,446},{138,11,45},{6,0,736},{138,10,106},{
> -133,0,542},{134,0,348},{133,0,868},{136,0,433},{135,0,1495},{138,0,771},{6,10,
> -
> 613},{136,10,223},{138,0,215},{141,0,124},{136,11,391},{135,11,172},{132,10,67
> 0}
> -,{140,0,55},{9,10,40},{139,10,136},{7,0,62},{147,0,112},{132,0,856},{132,11,568}
> -
> ,{12,0,270},{139,10,259},{8,0,572},{137,0,698},{4,11,732},{9,10,310},{137,10,68
> 2
> -
> },{142,10,296},{134,0,939},{136,11,733},{135,11,1435},{7,10,1401},{135,10,1476
> },
> -
> {6,0,352},{4,10,296},{7,10,401},{7,10,1410},{7,10,1594},{7,10,1674},{8,10,63},{8
> -
> ,10,660},{137,10,74},{4,11,428},{133,11,668},{4,10,139},{4,10,388},{140,10,188},
> -{7,11,2015},{140,11,665},{132,0,647},{146,0,10},{138,0,220},{142,0,464},{132,0,
> -109},{134,0,1746},{6,0,515},{4,10,747},{6,11,1623},{6,11,1681},{7,10,649},{7,10,
> -
> 1479},{135,10,1583},{133,10,232},{135,0,566},{137,10,887},{4,0,40},{10,0,67},{1
> 1
> -,0,117},{11,0,768},{139,0,935},{132,0,801},{7,0,992},{8,0,301},{9,0,722},{12,0,
> -
> 63},{13,0,29},{14,0,161},{143,0,18},{139,0,923},{6,11,1748},{8,11,715},{9,11,802
> -
> },{10,11,46},{10,11,819},{13,11,308},{14,11,351},{14,11,363},{146,11,67},{137,1
> 1
> -,745},{7,0,1145},{4,10,14},{7,10,1801},{10,10,748},{141,10,458},{4,11,63},{5,11,
> -
> 347},{134,11,474},{135,0,568},{4,10,425},{7,11,577},{7,11,1432},{9,11,475},{9,1
> 1
> -,505},{9,11,526},{9,11,609},{9,11,689},{9,11,726},{9,11,735},{9,11,738},{10,11,
> -
> 556},{10,11,674},{10,11,684},{11,11,89},{11,11,202},{11,11,272},{11,11,380},{11,
> -
> 11,415},{11,11,505},{11,11,537},{11,11,550},{11,11,562},{11,11,640},{11,11,667},
> -{11,11,688},{11,11,847},{11,11,927},{11,11,930},{11,11,940},{12,11,144},{12,11,
> -
> 325},{12,11,329},{12,11,389},{12,11,403},{12,11,451},{12,11,515},{12,11,604},{1
> 2
> -
> ,11,616},{12,11,626},{13,11,66},{13,11,131},{13,11,167},{13,11,236},{13,11,368},
> -
> {13,11,411},{13,11,434},{13,11,453},{13,11,461},{13,11,474},{14,11,59},{14,11,6
> 0
> -},{14,11,139},{14,11,152},{14,11,276},{14,11,353},{14,11,402},{15,11,28},{15,11,
> -
> 81},{15,11,123},{15,11,152},{18,11,136},{148,11,88},{137,0,247},{135,11,1622},{
> 9
> -,11,544},{11,11,413},{144,11,25},{4,0,645},{7,0,825},{6,10,1768},{135,11,89},{
> -
> 140,0,328},{5,10,943},{134,10,1779},{134,0,1363},{5,10,245},{6,10,576},{7,10,58
> 2
> -},{136,10,225},{134,0,1280},{5,11,824},{133,11,941},{7,11,440},{8,11,230},{139,
> -11,106},{5,0,28},{6,0,204},{10,0,320},{10,0,583},{13,0,502},{14,0,72},{14,0,274}
> -,{14,0,312},{14,0,344},{15,0,159},{16,0,62},{16,0,69},{17,0,30},{18,0,42},{18,0,
> -53},{18,0,84},{18,0,140},{19,0,68},{19,0,85},{20,0,5},{20,0,45},{20,0,101},{22,0
> -,7},{150,0,20},{4,0,558},{6,0,390},{7,0,162},{7,0,689},{9,0,360},{138,0,653},{
> -
> 134,0,764},{6,0,862},{137,0,833},{5,0,856},{6,0,1672},{6,0,1757},{134,0,1781},{5
> -,0,92},{10,0,736},{140,0,102},{6,0,1927},{6,0,1944},{8,0,924},{8,0,948},{10,0,
> -967},{138,0,978},{134,0,1479},{5,0,590},{8,0,360},{9,0,213},{138,0,63},{134,0,
> -1521},{6,0,709},{134,0,891},{132,10,443},{13,0,477},{14,0,120},{148,0,61},{4,11,
> -914},{5,11,800},{133,11,852},{10,11,54},{141,11,115},{4,11,918},{133,11,876},{
> -139,11,152},{4,11,92},{133,11,274},{135,11,1901},{9,11,800},{10,11,693},{11,11,
> -482},{11,11,734},{139,11,789},{9,0,483},{132,10,298},{6,0,1213},{141,11,498},{
> -135,11,1451},{133,11,743},{4,0,1022},{10,0,1000},{12,0,957},{12,0,980},{12,0,
> -1013},{14,0,481},{144,0,116},{8,0,503},{17,0,29},{4,11,49},{7,11,280},{135,11,
> -
> 1633},{135,0,1712},{134,0,466},{136,11,47},{5,10,164},{7,10,121},{142,10,189},{
> 7
> -
> ,10,812},{7,10,1261},{7,10,1360},{9,10,632},{140,10,352},{139,10,556},{132,0,73
> 1
> -},{5,11,272},{5,11,908},{5,11,942},{7,11,1008},{7,11,1560},{8,11,197},{9,11,47},
> -{11,11,538},{139,11,742},{4,10,172},{9,10,611},{10,10,436},{12,10,673},{141,10,
> -255},{133,10,844},{10,0,484},{11,0,754},{12,0,457},{14,0,171},{14,0,389},{146,0,
> -
> 153},{9,10,263},{10,10,147},{138,10,492},{137,11,891},{138,0,241},{133,10,537},
> {
> -6,0,2005},{136,0,964},{137,10,842},{151,11,8},{4,11,407},{132,11,560},{135,11,
> -
> 1884},{6,0,1100},{134,0,1242},{135,0,954},{5,10,230},{5,10,392},{6,10,420},{9,1
> 0
> -,568},{140,10,612},{4,11,475},{11,11,35},{11,11,90},{13,11,7},{13,11,71},{13,11,
> -177},{142,11,422},{136,11,332},{135,0,1958},{6,0,549},{8,0,34},{8,0,283},{9,0,
> -165},{138,0,475},{10,0,952},{12,0,966},{140,0,994},{5,0,652},{5,0,701},{135,0,
> -449},{4,0,655},{7,0,850},{17,0,75},{146,0,137},{4,0,146},{7,0,1618},{8,0,670},{5
> -
> ,10,41},{7,10,1459},{7,10,1469},{7,10,1859},{9,10,549},{139,10,905},{133,10,696}
> -,{6,0,159},{6,0,364},{7,0,516},{137,0,518},{135,0,1439},{6,11,222},{7,11,636},{7
> -
> ,11,1620},{8,11,409},{9,11,693},{139,11,77},{13,0,151},{141,11,45},{6,0,1027},{4
> -
> ,11,336},{132,10,771},{139,11,392},{10,11,121},{11,11,175},{149,11,16},{8,0,950}
> -
> ,{138,0,983},{133,10,921},{135,0,993},{6,10,180},{7,10,1137},{8,10,751},{139,10,
> -805},{7,0,501},{9,0,111},{10,0,141},{11,0,332},{13,0,43},{13,0,429},{14,0,130},{
> -
> 14,0,415},{145,0,102},{4,10,183},{5,11,882},{7,10,271},{11,10,824},{11,10,952},{
> -
> 13,10,278},{13,10,339},{13,10,482},{14,10,424},{148,10,99},{4,10,19},{5,10,477},
> -{5,10,596},{6,10,505},{7,10,1221},{11,10,907},{12,10,209},{141,10,214},{135,10,
> -
> 1215},{133,0,452},{132,11,426},{5,0,149},{136,0,233},{133,0,935},{6,11,58},{7,1
> 1
> -,654},{7,11,745},{7,11,1969},{8,11,240},{8,11,675},{9,11,479},{9,11,731},{10,11,
> -
> 330},{10,11,593},{10,11,817},{11,11,32},{11,11,133},{11,11,221},{145,11,68},{12,
> -
> 0,582},{18,0,131},{7,11,102},{137,11,538},{136,0,801},{134,10,1645},{132,0,70},
> {
> -
> 6,10,92},{6,10,188},{7,10,1269},{7,10,1524},{7,10,1876},{10,10,228},{139,10,102
> 0
> -},{4,10,459},{133,10,966},{138,0,369},{16,0,36},{140,10,330},{141,11,366},{7,0,
> -721},{10,0,236},{12,0,204},{6,10,18},{7,10,932},{8,10,757},{9,10,54},{9,10,65},{
> -
> 9,10,844},{10,10,113},{10,10,315},{10,10,798},{11,10,153},{12,10,151},{12,10,39
> 2
> -
> },{12,10,666},{142,10,248},{7,0,241},{10,0,430},{8,10,548},{9,10,532},{10,10,117
> -
> },{11,10,351},{11,10,375},{143,10,23},{134,10,1742},{133,10,965},{133,11,566},{
> 6
> -
> ,11,48},{135,11,63},{134,10,182},{10,10,65},{10,10,488},{138,10,497},{6,11,114},
> -{7,11,1224},{7,11,1556},{136,11,3},{134,0,1817},{8,11,576},{137,11,267},{6,0,
> -1078},{144,0,16},{9,10,588},{138,10,260},{138,0,1021},{5,0,406},{134,0,2022},{
> -
> 133,11,933},{6,0,69},{135,0,117},{7,0,1830},{136,11,427},{4,0,432},{135,0,824},{
> -
> 134,10,1786},{133,0,826},{139,11,67},{133,11,759},{135,10,308},{137,0,816},{13
> 3,
> -0,1000},{4,0,297},{6,0,529},{7,0,152},{7,0,713},{7,0,1845},{8,0,710},{8,0,717},{
> -12,0,639},{140,0,685},{7,0,423},{136,10,588},{136,10,287},{136,0,510},{134,0,
> -1048},{6,0,618},{7,11,56},{7,11,1989},{8,11,337},{8,11,738},{9,11,600},{10,11,
> -483},{12,11,37},{13,11,447},{142,11,92},{4,0,520},{135,0,575},{8,0,990},{138,0,
> -
> 977},{135,11,774},{9,11,347},{11,11,24},{140,11,170},{136,11,379},{140,10,290},
> {
> -
> 132,11,328},{4,0,321},{134,0,569},{4,11,101},{135,11,1171},{7,0,723},{7,0,1135},
> -
> {5,11,833},{136,11,744},{7,10,719},{8,10,809},{136,10,834},{8,0,921},{136,10,79
> 6
> -},{5,10,210},{6,10,213},{7,10,60},{10,10,364},{139,10,135},{5,0,397},{6,0,154},{
> -7,0,676},{8,0,443},{8,0,609},{9,0,24},{9,0,325},{10,0,35},{11,0,535},{11,0,672},
> -
> {11,0,1018},{12,0,637},{16,0,30},{5,10,607},{8,10,326},{136,10,490},{4,10,701},{
> -5,10,472},{6,11,9},{6,11,397},{7,11,53},{7,11,1742},{9,10,758},{10,11,632},{11,
> -
> 11,828},{140,11,146},{135,10,380},{135,10,1947},{148,11,109},{10,10,278},{138,
> 11
> -,278},{134,0,856},{7,0,139},{4,10,386},{8,10,405},{8,10,728},{9,10,497},{11,10,
> -110},{11,10,360},{15,10,37},{144,10,84},{141,0,282},{133,0,981},{5,0,288},{7,10,
> -
> 1452},{7,10,1480},{8,10,634},{140,10,472},{7,0,1890},{8,11,367},{10,11,760},{14,
> -11,79},{20,11,17},{152,11,0},{4,10,524},{136,10,810},{4,0,56},{7,0,1791},{8,0,
> -607},{8,0,651},{11,0,465},{11,0,835},{12,0,337},{141,0,480},{10,10,238},{141,10,
> -33},{11,11,417},{12,11,223},{140,11,265},{9,0,158},{10,0,411},{140,0,261},{133,
> -
> 10,532},{133,10,997},{12,11,186},{12,11,292},{14,11,100},{146,11,70},{6,0,1403},
> -
> {136,0,617},{134,0,1205},{139,0,563},{4,0,242},{134,0,333},{4,11,186},{5,11,157}
> -,{8,11,168},{138,11,6},{132,0,369},{133,11,875},{5,10,782},{5,10,829},{134,10,
> -
> 1738},{134,0,622},{135,11,1272},{6,0,1407},{7,11,111},{136,11,581},{7,10,1823},
> {
> -
> 139,10,693},{7,0,160},{10,0,624},{142,0,279},{132,0,363},{10,11,589},{12,11,111}
> -,{13,11,260},{14,11,82},{18,11,63},{147,11,45},{7,11,1364},{7,11,1907},{141,11,
> -
> 158},{4,11,404},{4,11,659},{135,11,675},{13,11,211},{14,11,133},{14,11,204},{15,
> -
> 11,64},{15,11,69},{15,11,114},{16,11,10},{19,11,23},{19,11,35},{19,11,39},{19,11
> -
> ,51},{19,11,71},{19,11,75},{152,11,15},{4,10,78},{5,10,96},{5,10,182},{7,10,1724
> -},{7,10,1825},{10,10,394},{10,10,471},{11,10,532},{14,10,340},{145,10,88},{135,
> -
> 10,1964},{133,11,391},{11,11,887},{14,11,365},{142,11,375},{5,11,540},{6,11,16
> 97
> -},{7,11,222},{136,11,341},{134,11,78},{9,0,601},{9,0,619},{10,0,505},{10,0,732},
> -{11,0,355},{140,0,139},{134,0,292},{139,0,174},{5,0,177},{6,0,616},{7,0,827},{9,
> -0,525},{138,0,656},{10,0,31},{6,10,215},{7,10,1028},{7,10,1473},{7,10,1721},{9,
> -
> 10,424},{138,10,779},{135,10,584},{136,11,293},{134,0,685},{135,11,1868},{133,
> 11
> -,460},{7,0,647},{6,10,67},{7,10,1630},{9,10,354},{9,10,675},{10,10,830},{14,10,
> -80},{145,10,80},{4,0,161},{133,0,631},{6,10,141},{7,10,225},{9,10,59},{9,10,607}
> -,{10,10,312},{11,10,687},{12,10,555},{13,10,373},{13,10,494},{148,10,58},{7,11,
> -
> 965},{7,11,1460},{135,11,1604},{136,10,783},{134,11,388},{6,0,722},{6,0,1267},{
> 4
> -
> ,11,511},{9,11,333},{9,11,379},{10,11,602},{11,11,441},{11,11,723},{11,11,976},{
> -
> 140,11,357},{134,0,1797},{135,0,1684},{9,0,469},{9,0,709},{12,0,512},{14,0,65},{
> -
> 17,0,12},{5,11,938},{136,11,707},{7,0,1230},{136,0,531},{10,0,229},{11,0,73},{11
> -,0,376},{139,0,433},{12,0,268},{12,0,640},{142,0,119},{7,10,430},{139,10,46},{6,
> -0,558},{7,0,651},{8,0,421},{9,0,0},{10,0,34},{139,0,1008},{6,0,106},{7,0,1786},{
> -7,0,1821},{9,0,102},{9,0,763},{5,10,602},{7,10,2018},{137,10,418},{5,0,65},{6,0,
> -416},{7,0,1720},{7,0,1924},{10,0,109},{11,0,14},{11,0,70},{11,0,569},{11,0,735},
> -{15,0,153},{20,0,80},{136,10,677},{135,11,1625},{137,11,772},{136,0,595},{6,11,
> -469},{7,11,1709},{138,11,515},{7,0,1832},{138,0,374},{9,0,106},{9,0,163},{9,0,
> -296},{10,0,167},{10,0,172},{10,0,777},{139,0,16},{6,0,6},{7,0,81},{7,0,771},{7,0
> -
> ,1731},{9,0,405},{138,0,421},{4,11,500},{135,11,938},{5,11,68},{134,11,383},{5,0
> -,881},{133,0,885},{6,0,854},{6,0,1132},{6,0,1495},{6,0,1526},{6,0,1533},{134,0,
> -
> 1577},{4,11,337},{6,11,353},{7,11,1934},{8,11,488},{137,11,429},{7,11,236},{7,1
> 1
> -,1795},{8,11,259},{9,11,135},{9,11,177},{10,11,825},{11,11,115},{11,11,370},{11,
> -11,405},{11,11,604},{12,11,10},{12,11,667},{12,11,669},{13,11,76},{14,11,310},{
> -15,11,76},{15,11,147},{148,11,23},{5,0,142},{134,0,546},{4,11,15},{5,11,22},{6,
> -11,244},{7,11,40},{7,11,200},{7,11,906},{7,11,1199},{9,11,616},{10,11,716},{11,
> -11,635},{11,11,801},{140,11,458},{5,0,466},{11,0,571},{12,0,198},{13,0,283},{14,
> -0,186},{15,0,21},{15,0,103},{135,10,329},{4,0,185},{5,0,257},{5,0,839},{5,0,936}
> -,{9,0,399},{10,0,258},{10,0,395},{10,0,734},{11,0,1014},{12,0,23},{13,0,350},{14
> -,0,150},{19,0,6},{135,11,1735},{12,11,36},{141,11,337},{5,11,598},{7,11,791},{8,
> -11,108},{137,11,123},{132,10,469},{7,0,404},{7,0,1377},{7,0,1430},{7,0,2017},{8,
> -0,149},{8,0,239},{8,0,512},{8,0,793},{8,0,818},{9,0,474},{9,0,595},{10,0,122},{
> -10,0,565},{10,0,649},{10,0,783},{11,0,239},{11,0,295},{11,0,447},{11,0,528},{11,
> -
> 0,639},{11,0,800},{12,0,25},{12,0,77},{12,0,157},{12,0,256},{12,0,316},{12,0,390
> -},{12,0,391},{12,0,395},{12,0,478},{12,0,503},{12,0,592},{12,0,680},{13,0,50},{
> -13,0,53},{13,0,132},{13,0,198},{13,0,322},{13,0,415},{13,0,511},{14,0,71},{14,0,
> -395},{15,0,71},{15,0,136},{17,0,123},{18,0,93},{147,0,58},{136,0,712},{134,10,
> -1743},{5,10,929},{6,10,340},{8,10,376},{136,10,807},{6,0,1848},{8,0,860},{10,0,
> -856},{10,0,859},{10,0,925},{10,0,941},{140,0,762},{6,0,629},{6,0,906},{9,0,810},
> -{140,0,652},{5,10,218},{7,10,1610},{138,10,83},{7,10,1512},{135,10,1794},{4,0,
> -
> 377},{24,0,13},{4,11,155},{7,11,1689},{11,10,0},{144,10,78},{4,11,164},{5,11,151
> -},{5,11,730},{5,11,741},{7,11,498},{7,11,870},{7,11,1542},{12,11,213},{14,11,36}
> -,{14,11,391},{17,11,111},{18,11,6},{18,11,46},{18,11,151},{19,11,36},{20,11,32},
> -
> {20,11,56},{20,11,69},{20,11,102},{21,11,4},{22,11,8},{22,11,10},{22,11,14},{150
> -
> ,11,31},{7,0,1842},{133,10,571},{4,10,455},{4,11,624},{135,11,1752},{134,0,1501}
> -,{4,11,492},{5,11,451},{6,10,161},{7,10,372},{137,10,597},{132,10,349},{4,0,180}
> -
> ,{135,0,1906},{135,11,835},{141,11,70},{132,0,491},{137,10,751},{6,10,432},{139,
> -10,322},{4,0,171},{138,0,234},{6,11,113},{135,11,436},{4,0,586},{7,0,1186},{138,
> -0,631},{5,10,468},{10,10,325},{11,10,856},{12,10,345},{143,10,104},{5,10,223},{
> -10,11,592},{10,11,753},{12,11,317},{12,11,355},{12,11,465},{12,11,469},{12,11,
> -
> 560},{12,11,578},{141,11,243},{132,10,566},{135,11,520},{4,10,59},{135,10,1394
> },
> -{6,10,436},{139,10,481},{9,0,931},{10,0,334},{20,0,71},{4,10,48},{5,10,271},{7,
> -
> 10,953},{135,11,1878},{11,0,170},{5,10,610},{136,10,457},{133,10,755},{6,0,158
> 7}
> -
> ,{135,10,1217},{4,10,197},{149,11,26},{133,11,585},{137,11,521},{133,0,765},{13
> 3
> -
> ,10,217},{139,11,586},{133,0,424},{9,11,752},{12,11,610},{13,11,431},{16,11,59},
> -{146,11,109},{136,0,714},{7,0,685},{132,11,307},{9,0,420},{10,0,269},{10,0,285},
> -{10,0,576},{11,0,397},{13,0,175},{145,0,90},{132,0,429},{133,11,964},{9,11,463},
> -{138,11,595},{7,0,18},{7,0,699},{7,0,1966},{8,0,752},{9,0,273},{9,0,412},{9,0,
> -703},{10,0,71},{10,0,427},{138,0,508},{4,10,165},{7,10,1398},{135,10,1829},{4,0,
> -53},{5,0,186},{7,0,752},{7,0,828},{142,0,116},{8,0,575},{10,0,289},{139,0,319},{
> -132,0,675},{134,0,1424},{4,11,75},{5,11,180},{6,11,500},{7,11,58},{7,11,710},{
> -
> 138,11,645},{133,11,649},{6,11,276},{7,11,282},{7,11,879},{7,11,924},{8,11,459},
> -
> {9,11,599},{9,11,754},{11,11,574},{12,11,128},{12,11,494},{13,11,52},{13,11,301}
> -,{15,11,30},{143,11,132},{6,0,647},{134,0,1095},{5,10,9},{7,10,297},{7,10,966},{
> -140,10,306},{132,11,200},{134,0,1334},{5,10,146},{6,10,411},{138,10,721},{6,0,
> -209},{6,0,1141},{6,0,1288},{8,0,468},{9,0,210},{11,0,36},{12,0,28},{12,0,630},{
> -
> 13,0,21},{13,0,349},{14,0,7},{145,0,13},{6,10,177},{135,10,467},{4,0,342},{135,0
> -
> ,1179},{10,11,454},{140,11,324},{4,0,928},{133,0,910},{7,0,1838},{6,11,225},{13
> 7
> -
> ,11,211},{16,0,101},{20,0,115},{20,0,118},{148,0,122},{4,0,496},{135,0,856},{4,0
> -
> ,318},{11,0,654},{7,11,718},{139,11,102},{8,11,58},{9,11,724},{11,11,809},{13,11
> -,113},{145,11,72},{5,10,200},{6,11,345},{135,11,1247},{8,11,767},{8,11,803},{9,
> -11,301},{137,11,903},{7,0,915},{8,0,247},{19,0,0},{7,11,1949},{136,11,674},{4,0,
> -202},{5,0,382},{6,0,454},{7,0,936},{7,0,1803},{8,0,758},{9,0,375},{9,0,895},{10,
> -0,743},{10,0,792},{11,0,978},{11,0,1012},{142,0,109},{7,0,1150},{7,0,1425},{7,0,
> -
> 1453},{140,0,513},{134,11,259},{138,0,791},{11,0,821},{12,0,110},{12,0,153},{18,
> -
> 0,41},{150,0,19},{134,10,481},{132,0,796},{6,0,445},{9,0,909},{136,11,254},{10,0
> -,776},{13,0,345},{142,0,425},{4,10,84},{7,10,1482},{10,10,76},{138,10,142},{135,
> -
> 11,742},{6,0,578},{133,10,1015},{6,0,1387},{4,10,315},{5,10,507},{135,10,1370},
> {
> -
> 4,0,438},{133,0,555},{136,0,766},{133,11,248},{134,10,1722},{4,11,116},{5,11,95}
> -
> ,{5,11,445},{7,11,1688},{8,11,29},{9,11,272},{11,11,509},{139,11,915},{135,0,54
> 1
> -},{133,11,543},{8,10,222},{8,10,476},{9,10,238},{11,10,516},{11,10,575},{15,10,
> -109},{146,10,100},{6,0,880},{134,0,1191},{5,11,181},{136,11,41},{134,0,1506},{
> -
> 132,11,681},{7,11,25},{8,11,202},{138,11,536},{139,0,983},{137,0,768},{132,0,58
> 4
> -
> },{9,11,423},{140,11,89},{8,11,113},{9,11,877},{10,11,554},{11,11,83},{12,11,136
> -
> },{147,11,109},{7,10,706},{7,10,1058},{138,10,538},{133,11,976},{4,11,206},{135,
> -
> 11,746},{136,11,526},{140,0,737},{11,10,92},{11,10,196},{11,10,409},{11,10,450},
> -{11,10,666},{11,10,777},{12,10,262},{13,10,385},{13,10,393},{15,10,115},{16,10,
> -
> 45},{145,10,82},{4,0,226},{4,0,326},{7,0,1770},{4,11,319},{5,11,699},{138,11,673
> -},{6,10,40},{135,10,1781},{5,0,426},{8,0,30},{9,0,2},{11,0,549},{147,0,122},{6,0
> -
> ,1161},{134,0,1329},{138,10,97},{6,10,423},{7,10,665},{135,10,1210},{7,11,13},{
> 8
> -
> ,11,226},{10,11,537},{11,11,570},{11,11,605},{11,11,799},{11,11,804},{12,11,85},
> -
> {12,11,516},{12,11,623},{13,11,112},{13,11,361},{14,11,77},{14,11,78},{17,11,28}
> -
> ,{147,11,110},{132,11,769},{132,11,551},{132,11,728},{147,0,117},{9,11,57},{9,1
> 1
> -
> ,459},{10,11,425},{11,11,119},{12,11,184},{12,11,371},{13,11,358},{145,11,51},{
> 5
> -,11,188},{5,11,814},{8,11,10},{9,11,421},{9,11,729},{10,11,609},{139,11,689},{
> -134,11,624},{135,11,298},{135,0,462},{4,0,345},{139,10,624},{136,10,574},{4,0,
> -385},{7,0,265},{135,0,587},{6,0,808},{132,11,528},{133,0,398},{132,10,354},{4,0,
> -347},{5,0,423},{5,0,996},{135,0,1329},{135,10,1558},{7,0,1259},{9,0,125},{139,0,
> -65},{5,0,136},{6,0,136},{136,0,644},{5,11,104},{6,11,173},{135,11,1631},{135,0,
> -469},{133,10,830},{4,0,278},{5,0,465},{135,0,1367},{7,11,810},{8,11,138},{8,11,
> -
> 342},{9,11,84},{10,11,193},{11,11,883},{140,11,359},{5,10,496},{135,10,203},{4,
> 0
> -,433},{133,0,719},{6,11,95},{134,10,547},{5,10,88},{137,10,239},{6,11,406},{10,
> -
> 11,409},{10,11,447},{11,11,44},{140,11,100},{134,0,1423},{7,10,650},{135,10,13
> 10
> -},{134,0,749},{135,11,1243},{135,0,1363},{6,0,381},{7,0,645},{7,0,694},{8,0,546}
> -,{7,10,1076},{9,10,80},{11,10,78},{11,10,421},{11,10,534},{140,10,545},{134,11,
> -
> 1636},{135,11,1344},{12,0,277},{7,10,274},{11,10,479},{139,10,507},{6,0,705},{6,
> -0,783},{6,0,1275},{6,0,1481},{4,11,282},{7,11,1034},{11,11,398},{11,11,634},{12,
> -
> 11,1},{12,11,79},{12,11,544},{14,11,237},{17,11,10},{146,11,20},{134,0,453},{4,0
> -
> ,555},{8,0,536},{10,0,288},{11,0,1005},{4,10,497},{135,10,1584},{5,11,118},{5,11
> -,499},{6,11,476},{7,11,600},{7,11,888},{135,11,1096},{138,0,987},{7,0,1107},{7,
> -
> 10,261},{7,10,1115},{7,10,1354},{7,10,1588},{7,10,1705},{7,10,1902},{9,10,465},
> {
> -10,10,248},{10,10,349},{10,10,647},{11,10,527},{11,10,660},{11,10,669},{12,10,
> -529},{141,10,305},{7,11,296},{7,11,596},{8,11,560},{8,11,586},{9,11,612},{11,11,
> -
> 100},{11,11,304},{12,11,46},{13,11,89},{14,11,112},{145,11,122},{9,0,370},{138,
> 0
> -,90},{136,10,13},{132,0,860},{7,10,642},{8,10,250},{11,10,123},{11,10,137},{13,
> -
> 10,48},{142,10,95},{135,10,1429},{137,11,321},{132,0,257},{135,0,2031},{7,0,17
> 68
> -},{7,11,1599},{7,11,1723},{8,11,79},{8,11,106},{8,11,190},{8,11,302},{8,11,383},
> -
> {9,11,119},{9,11,233},{9,11,298},{9,11,419},{9,11,471},{10,11,181},{10,11,406},{
> -
> 11,11,57},{11,11,85},{11,11,120},{11,11,177},{11,11,296},{11,11,382},{11,11,454}
> -,{11,11,758},{11,11,999},{12,11,27},{12,11,98},{12,11,131},{12,11,245},{12,11,
> -312},{12,11,446},{12,11,454},{13,11,25},{13,11,98},{13,11,426},{13,11,508},{14,
> -
> 11,6},{14,11,163},{14,11,272},{14,11,277},{14,11,370},{15,11,95},{15,11,138},{1
> 5
> -
> ,11,167},{17,11,18},{17,11,38},{20,11,96},{149,11,32},{5,11,722},{134,11,1759},{
> -
> 145,11,16},{6,0,1071},{134,0,1561},{10,10,545},{140,10,301},{6,0,83},{6,0,1733},
> -
> {135,0,1389},{4,0,835},{135,0,1818},{133,11,258},{4,10,904},{133,10,794},{134,0,
> -
> 2006},{5,11,30},{7,11,495},{8,11,134},{9,11,788},{140,11,438},{135,11,2004},{13
> 7
> -,0,696},{5,11,50},{6,11,439},{7,11,780},{135,11,1040},{7,11,772},{7,11,1104},{7,
> -
> 11,1647},{11,11,269},{11,11,539},{11,11,607},{11,11,627},{11,11,706},{11,11,97
> 5}
> -
> ,{12,11,248},{12,11,311},{12,11,434},{12,11,600},{12,11,622},{13,11,297},{13,11,
> -367},{13,11,485},{14,11,69},{14,11,409},{143,11,108},{5,11,1},{6,11,81},{138,11,
> -520},{7,0,1718},{9,0,95},{9,0,274},{10,0,279},{10,0,317},{10,0,420},{11,0,303},{
> -11,0,808},{12,0,134},{12,0,367},{13,0,149},{13,0,347},{14,0,349},{14,0,406},{18,
> -
> 0,22},{18,0,89},{18,0,122},{147,0,47},{5,11,482},{8,11,98},{9,11,172},{10,11,222
> -},{10,11,700},{10,11,822},{11,11,302},{11,11,778},{12,11,50},{12,11,127},{12,11,
> -396},{13,11,62},{13,11,328},{14,11,122},{147,11,72},{7,10,386},{138,10,713},{6,
> -
> 10,7},{6,10,35},{7,10,147},{7,10,1069},{7,10,1568},{7,10,1575},{7,10,1917},{8,10
> -,43},{8,10,208},{9,10,128},{9,10,866},{10,10,20},{11,10,981},{147,10,33},{133,0,
> -26},{132,0,550},{5,11,2},{7,11,1494},{136,11,589},{6,11,512},{7,11,797},{8,11,
> -253},{9,11,77},{10,11,1},{10,11,129},{10,11,225},{11,11,118},{11,11,226},{11,11,
> -
> 251},{11,11,430},{11,11,701},{11,11,974},{11,11,982},{12,11,64},{12,11,260},{12,
> -
> 11,488},{140,11,690},{7,10,893},{141,10,424},{134,0,901},{136,0,822},{4,0,902},
> {
> -5,0,809},{134,0,122},{6,0,807},{134,0,1366},{7,0,262},{5,11,748},{134,11,553},{
> -133,0,620},{4,0,34},{5,0,574},{7,0,279},{7,0,1624},{136,0,601},{9,0,170},{6,10,
> -
> 322},{9,10,552},{11,10,274},{13,10,209},{13,10,499},{14,10,85},{15,10,126},{145,
> -
> 10,70},{132,0,537},{4,11,12},{7,11,420},{7,11,522},{7,11,809},{8,11,797},{141,11
> -,88},{133,0,332},{8,10,83},{8,10,742},{8,10,817},{9,10,28},{9,10,29},{9,10,885},
> -
> {10,10,387},{11,10,633},{11,10,740},{13,10,235},{13,10,254},{15,10,143},{143,10,
> -146},{6,0,1909},{9,0,964},{12,0,822},{12,0,854},{12,0,865},{12,0,910},{12,0,938}
> -,{15,0,169},{15,0,208},{15,0,211},{18,0,205},{18,0,206},{18,0,220},{18,0,223},{
> -
> 152,0,24},{140,10,49},{5,11,528},{135,11,1580},{6,0,261},{8,0,182},{139,0,943},{
> -
> 134,0,1721},{4,0,933},{133,0,880},{136,11,321},{5,11,266},{9,11,290},{9,11,364},
> -
> {10,11,293},{11,11,606},{142,11,45},{6,0,1609},{4,11,50},{6,11,510},{6,11,594},{
> -
> 9,11,121},{10,11,49},{10,11,412},{139,11,834},{7,0,895},{136,11,748},{132,11,46
> 6
> -},{4,10,110},{10,10,415},{10,10,597},{142,10,206},{133,0,812},{135,11,281},{6,0,
> -1890},{6,0,1902},{6,0,1916},{9,0,929},{9,0,942},{9,0,975},{9,0,984},{9,0,986},{9
> -
> ,0,1011},{9,0,1019},{12,0,804},{12,0,851},{12,0,867},{12,0,916},{12,0,923},{15,0
> -,194},{15,0,204},{15,0,210},{15,0,222},{15,0,223},{15,0,229},{15,0,250},{18,0,
> -
> 179},{18,0,186},{18,0,192},{7,10,205},{135,10,2000},{132,11,667},{135,0,778},{4,
> -
> 0,137},{7,0,1178},{135,0,1520},{134,0,1314},{4,11,242},{134,11,333},{6,0,1661},
> {
> -7,0,1975},{7,0,2009},{135,0,2011},{134,0,1591},{4,10,283},{135,10,1194},{11,0,
> -820},{150,0,51},{4,11,39},{5,11,36},{7,11,1843},{8,11,407},{11,11,144},{140,11,
> -
> 523},{134,10,1720},{4,11,510},{7,11,29},{7,11,66},{7,11,1980},{10,11,487},{10,1
> 1
> -,809},{146,11,9},{5,0,89},{7,0,1915},{9,0,185},{9,0,235},{10,0,64},{10,0,270},{
> -10,0,403},{10,0,469},{10,0,529},{10,0,590},{11,0,140},{11,0,860},{13,0,1},{13,0,
> -
> 422},{14,0,341},{14,0,364},{17,0,93},{18,0,113},{19,0,97},{147,0,113},{133,0,695
> -},{6,0,987},{134,0,1160},{5,0,6},{6,0,183},{7,0,680},{7,0,978},{7,0,1013},{7,0,
> -
> 1055},{12,0,230},{13,0,172},{146,0,29},{134,11,570},{132,11,787},{134,11,518},{
> 6
> -
> ,0,29},{139,0,63},{132,11,516},{136,11,821},{132,0,311},{134,0,1740},{7,0,170},{
> -
> 8,0,90},{8,0,177},{8,0,415},{11,0,714},{14,0,281},{136,10,735},{134,0,1961},{135
> -
> ,11,1405},{4,11,10},{7,11,917},{139,11,786},{5,10,132},{9,10,486},{9,10,715},{10
> -
> ,10,458},{11,10,373},{11,10,668},{11,10,795},{11,10,897},{12,10,272},{12,10,424}
> -
> ,{12,10,539},{12,10,558},{14,10,245},{14,10,263},{14,10,264},{14,10,393},{142,1
> 0
> -
> ,403},{11,0,91},{13,0,129},{15,0,101},{145,0,125},{135,0,1132},{4,0,494},{6,0,74
> -},{7,0,44},{7,0,407},{12,0,17},{15,0,5},{148,0,11},{133,10,379},{5,0,270},{5,11,
> -684},{6,10,89},{6,10,400},{7,10,1569},{7,10,1623},{7,10,1850},{8,10,218},{8,10,
> -422},{9,10,570},{138,10,626},{4,0,276},{133,0,296},{6,0,1523},{134,11,27},{6,10,
> -
> 387},{7,10,882},{141,10,111},{6,10,224},{7,10,877},{137,10,647},{135,10,790},{4,
> -0,7},{5,0,90},{5,0,158},{6,0,542},{7,0,221},{7,0,1574},{9,0,490},{10,0,540},{11,
> -
> 0,443},{139,0,757},{7,0,588},{9,0,175},{138,0,530},{135,10,394},{142,11,23},{13
> 4
> -,0,786},{135,0,580},{7,0,88},{136,0,627},{5,0,872},{6,0,57},{7,0,471},{9,0,447},
> -
> {137,0,454},{6,11,342},{6,11,496},{8,11,275},{137,11,206},{4,11,909},{133,11,94
> 0
> -},{6,0,735},{132,11,891},{8,0,845},{8,0,916},{135,10,1409},{5,0,31},{134,0,614},
> -{11,0,458},{12,0,15},{140,0,432},{8,0,330},{140,0,477},{4,0,530},{5,0,521},{7,0,
> -1200},{10,0,460},{132,11,687},{6,0,424},{135,0,1866},{9,0,569},{12,0,12},{12,0,
> -81},{12,0,319},{13,0,69},{14,0,259},{16,0,87},{17,0,1},{17,0,21},{17,0,24},{18,0
> -,15},{18,0,56},{18,0,59},{18,0,127},{18,0,154},{19,0,19},{148,0,31},{7,0,1302},{
> -136,10,38},{134,11,253},{5,10,261},{7,10,78},{7,10,199},{8,10,815},{9,10,126},{
> -
> 138,10,342},{5,0,595},{135,0,1863},{6,11,41},{141,11,160},{5,0,13},{134,0,142},{
> -6,0,97},{7,0,116},{8,0,322},{8,0,755},{9,0,548},{10,0,714},{11,0,884},{13,0,324}
> -,{7,11,1304},{138,11,477},{132,10,628},{134,11,1718},{7,10,266},{136,10,804},{
> -
> 135,10,208},{7,0,1021},{6,10,79},{135,10,1519},{7,0,1472},{135,0,1554},{6,11,36
> 2
> -},{146,11,51},{7,0,1071},{7,0,1541},{7,0,1767},{7,0,1806},{11,0,162},{11,0,242},
> -
> {11,0,452},{12,0,605},{15,0,26},{144,0,44},{136,10,741},{133,11,115},{145,0,115}
> -
> ,{134,10,376},{6,0,1406},{134,0,1543},{5,11,193},{12,11,178},{13,11,130},{145,1
> 1
> -,84},{135,0,1111},{8,0,1},{9,0,650},{10,0,326},{5,11,705},{137,11,606},{5,0,488}
> -,{6,0,527},{7,0,489},{7,0,1636},{8,0,121},{8,0,144},{8,0,359},{9,0,193},{9,0,241
> -},{9,0,336},{9,0,882},{11,0,266},{11,0,372},{11,0,944},{12,0,401},{140,0,641},{
> -135,11,174},{6,0,267},{7,10,244},{7,10,632},{7,10,1609},{8,10,178},{8,10,638},{
> -141,10,58},{134,0,1983},{134,0,1155},{134,0,1575},{134,0,1438},{9,0,31},{10,0,
> -244},{10,0,699},{12,0,149},{141,0,497},{133,0,377},{4,11,122},{5,11,796},{5,11,
> -
> 952},{6,11,1660},{6,11,1671},{8,11,567},{9,11,687},{9,11,742},{10,11,686},{11,1
> 1
> -,356},{11,11,682},{140,11,281},{145,0,101},{11,11,0},{144,11,78},{5,11,179},{5,
> -
> 10,791},{7,11,1095},{135,11,1213},{8,11,372},{9,11,122},{138,11,175},{7,10,686},
> -
> {8,10,33},{8,10,238},{10,10,616},{11,10,467},{11,10,881},{13,10,217},{13,10,253}
> -
> ,{142,10,268},{9,0,476},{4,11,66},{7,11,722},{135,11,904},{7,11,352},{137,11,68
> 4
> -
> },{135,0,2023},{135,0,1836},{132,10,447},{5,0,843},{144,0,35},{137,11,779},{141,
> -11,35},{4,10,128},{5,10,415},{6,10,462},{7,10,294},{7,10,578},{10,10,710},{139,
> -
> 10,86},{132,0,554},{133,0,536},{136,10,587},{5,0,207},{9,0,79},{11,0,625},{145,0
> -,7},{7,0,1371},{6,10,427},{138,10,692},{4,0,424},{4,10,195},{135,10,802},{8,0,
> -785},{133,11,564},{135,0,336},{4,0,896},{6,0,1777},{134,11,556},{137,11,103},{
> -
> 134,10,1683},{7,11,544},{8,11,719},{138,11,61},{138,10,472},{4,11,5},{5,11,498},
> -
> {136,11,637},{7,0,750},{9,0,223},{11,0,27},{11,0,466},{12,0,624},{14,0,265},{146
> -
> ,0,61},{12,0,238},{18,0,155},{12,11,238},{146,11,155},{151,10,28},{133,11,927},{
> -12,0,383},{5,10,3},{8,10,578},{9,10,118},{10,10,705},{141,10,279},{4,11,893},{5,
> -11,780},{133,11,893},{4,0,603},{133,0,661},{4,0,11},{6,0,128},{7,0,231},{7,0,
> -
> 1533},{10,0,725},{5,10,229},{5,11,238},{135,11,1350},{8,10,102},{10,10,578},{10,
> -
> 10,672},{12,10,496},{13,10,408},{14,10,121},{145,10,106},{132,0,476},{134,0,15
> 52
> -},{134,11,1729},{8,10,115},{8,10,350},{9,10,489},{10,10,128},{11,10,306},{12,10,
> -373},{14,10,30},{17,10,79},{19,10,80},{150,10,55},{135,0,1807},{4,0,680},{4,11,
> -60},{7,11,760},{7,11,1800},{8,11,314},{9,11,700},{139,11,487},{4,10,230},{5,10,
> -702},{148,11,94},{132,11,228},{139,0,435},{9,0,20},{10,0,324},{10,0,807},{139,0,
> -
> 488},{6,10,1728},{136,11,419},{4,10,484},{18,10,26},{19,10,42},{20,10,43},{21,1
> 0
> -,0},{23,10,27},{152,10,14},{135,0,1431},{133,11,828},{5,0,112},{6,0,103},{6,0,
> -150},{7,0,1303},{9,0,292},{10,0,481},{20,0,13},{7,11,176},{7,11,178},{7,11,1110}
> -,{10,11,481},{148,11,13},{138,0,356},{4,11,51},{5,11,39},{6,11,4},{7,11,591},{7,
> -11,849},{7,11,951},{7,11,1129},{7,11,1613},{7,11,1760},{7,11,1988},{9,11,434},{
> -10,11,754},{11,11,25},{11,11,37},{139,11,414},{6,0,1963},{134,0,2000},{132,10,
> -
> 633},{6,0,1244},{133,11,902},{135,11,928},{140,0,18},{138,0,204},{135,11,1173},
> {
> -134,0,867},{4,0,708},{8,0,15},{9,0,50},{9,0,386},{11,0,18},{11,0,529},{140,0,228
> -},{134,11,270},{4,0,563},{7,0,109},{7,0,592},{7,0,637},{7,0,770},{8,0,463},{9,0,
> -60},{9,0,335},{9,0,904},{10,0,73},{11,0,434},{12,0,585},{13,0,331},{18,0,110},{
> -
> 148,0,60},{132,0,502},{14,11,359},{19,11,52},{148,11,47},{6,11,377},{7,11,1025},
> -{9,11,613},{145,11,104},{6,0,347},{10,0,161},{5,10,70},{5,10,622},{6,10,334},{7,
> -
> 10,1032},{9,10,171},{11,10,26},{11,10,213},{11,10,637},{11,10,707},{12,10,202},
> {
> -
> 12,10,380},{13,10,226},{13,10,355},{14,10,222},{145,10,42},{132,11,416},{4,0,33}
> -,{5,0,102},{6,0,284},{7,0,1079},{7,0,1423},{7,0,1702},{8,0,470},{9,0,554},{9,0,
> -723},{11,0,333},{142,11,372},{5,11,152},{5,11,197},{7,11,340},{7,11,867},{10,11,
> -548},{10,11,581},{11,11,6},{12,11,3},{12,11,19},{14,11,110},{142,11,289},{7,0,
> -246},{135,0,840},{6,0,10},{8,0,571},{9,0,739},{143,0,91},{6,0,465},{7,0,1465},{4
> -,10,23},{4,10,141},{5,10,313},{5,10,1014},{6,10,50},{7,10,142},{7,10,559},{8,10,
> -
> 640},{9,10,460},{9,10,783},{11,10,741},{12,10,183},{141,10,488},{133,0,626},{13
> 6
> -,0,614},{138,0,237},{7,11,34},{7,11,190},{8,11,28},{8,11,141},{8,11,444},{8,11,
> -
> 811},{9,11,468},{11,11,334},{12,11,24},{12,11,386},{140,11,576},{133,11,757},{5,
> -0,18},{6,0,526},{13,0,24},{13,0,110},{19,0,5},{147,0,44},{6,0,506},{134,11,506},
> -{135,11,1553},{4,0,309},{5,0,462},{7,0,970},{7,0,1097},{22,0,30},{22,0,33},{7,11
> -
> ,1385},{11,11,582},{11,11,650},{11,11,901},{11,11,949},{12,11,232},{12,11,236},
> {
> -
> 13,11,413},{13,11,501},{146,11,116},{9,0,140},{5,10,222},{138,10,534},{6,0,1056}
> -
> ,{137,10,906},{134,0,1704},{138,10,503},{134,0,1036},{5,10,154},{7,10,1491},{10,
> -10,379},{138,10,485},{4,11,383},{133,10,716},{134,0,1315},{5,0,86},{7,0,743},{9,
> -0,85},{10,0,281},{10,0,432},{11,0,825},{12,0,251},{13,0,118},{142,0,378},{8,0,
> -264},{4,10,91},{5,10,388},{5,10,845},{6,10,206},{6,10,252},{6,10,365},{7,10,136}
> -,{7,10,531},{136,10,621},{5,0,524},{133,0,744},{5,11,277},{141,11,247},{132,11,
> -435},{10,0,107},{140,0,436},{132,0,927},{10,0,123},{12,0,670},{146,0,94},{7,0,
> -
> 1149},{9,0,156},{138,0,957},{5,11,265},{6,11,212},{135,11,28},{133,0,778},{133,
> 0
> -
> ,502},{8,0,196},{10,0,283},{139,0,406},{135,10,576},{136,11,535},{134,0,1312},{
> 5
> -
> ,10,771},{5,10,863},{5,10,898},{6,10,1632},{6,10,1644},{134,10,1780},{5,0,855},{
> -5,10,331},{135,11,1487},{132,11,702},{5,11,808},{135,11,2045},{7,0,1400},{9,0,
> -
> 446},{138,0,45},{140,10,632},{132,0,1003},{5,11,166},{8,11,739},{140,11,511},{5,
> -10,107},{7,10,201},{136,10,518},{6,10,446},{135,10,1817},{134,0,1532},{134,0,
> -1097},{4,11,119},{5,11,170},{5,11,447},{7,11,1708},{7,11,1889},{9,11,357},{9,11,
> -719},{12,11,486},{140,11,596},{9,10,851},{141,10,510},{7,0,612},{8,0,545},{8,0,
> -568},{8,0,642},{9,0,717},{10,0,541},{10,0,763},{11,0,449},{12,0,489},{13,0,153},
> -{13,0,296},{14,0,138},{14,0,392},{15,0,50},{16,0,6},{16,0,12},{20,0,9},{132,10,
> -504},{4,11,450},{135,11,1158},{11,0,54},{13,0,173},{13,0,294},{5,10,883},{5,10,
> -
> 975},{8,10,392},{148,10,7},{13,0,455},{15,0,99},{15,0,129},{144,0,68},{135,0,172
> -
> },{132,11,754},{5,10,922},{134,10,1707},{134,0,1029},{17,11,39},{148,11,36},{4,
> 0
> -
> ,568},{5,10,993},{7,10,515},{137,10,91},{132,0,732},{10,0,617},{138,11,617},{13
> 4
> -,0,974},{7,0,989},{10,0,377},{12,0,363},{13,0,68},{13,0,94},{14,0,108},{142,0,
> -306},{136,0,733},{132,0,428},{7,0,1789},{135,11,1062},{7,0,2015},{140,0,665},{
> -
> 135,10,1433},{5,0,287},{7,10,921},{8,10,580},{8,10,593},{8,10,630},{138,10,28},{
> -
> 138,0,806},{4,10,911},{5,10,867},{5,10,1013},{7,10,2034},{8,10,798},{136,10,813}
> -,{134,0,1539},{8,11,523},{150,11,34},{135,11,740},{7,11,238},{7,11,2033},{8,11,
> -
> 120},{8,11,188},{8,11,659},{9,11,598},{10,11,466},{12,11,342},{12,11,588},{13,1
> 1
> -
> ,503},{14,11,246},{143,11,92},{7,0,1563},{141,0,182},{5,10,135},{6,10,519},{7,10
> -,1722},{10,10,271},{11,10,261},{145,10,54},{14,10,338},{148,10,81},{7,0,484},{4,
> -
> 10,300},{133,10,436},{145,11,114},{6,0,1623},{134,0,1681},{133,11,640},{4,11,2
> 01
> -},{7,11,1744},{8,11,602},{11,11,247},{11,11,826},{145,11,65},{8,11,164},{146,11,
> -
> 62},{6,0,1833},{6,0,1861},{136,0,878},{134,0,1569},{8,10,357},{10,10,745},{14,1
> 0
> -
> ,426},{17,10,94},{147,10,57},{12,0,93},{12,0,501},{13,0,362},{14,0,151},{15,0,40
> -},{15,0,59},{16,0,46},{17,0,25},{18,0,14},{18,0,134},{19,0,25},{19,0,69},{20,0,
> -16},{20,0,19},{20,0,66},{21,0,23},{21,0,25},{150,0,42},{6,0,1748},{8,0,715},{9,0
> -,802},{10,0,46},{10,0,819},{13,0,308},{14,0,351},{14,0,363},{146,0,67},{132,0,
> -
> 994},{4,0,63},{133,0,347},{132,0,591},{133,0,749},{7,11,1577},{10,11,304},{10,1
> 1
> -
> ,549},{11,11,424},{12,11,365},{13,11,220},{13,11,240},{142,11,33},{133,0,366},{
> 7
> -
> ,0,557},{12,0,547},{14,0,86},{133,10,387},{135,0,1747},{132,11,907},{5,11,100},{
> -
> 10,11,329},{12,11,416},{149,11,29},{4,10,6},{5,10,708},{136,10,75},{7,10,1351},{
> -
> 9,10,581},{10,10,639},{11,10,453},{140,10,584},{7,0,89},{132,10,303},{138,10,77
> 2
> -},{132,11,176},{5,11,636},{5,11,998},{8,11,26},{137,11,358},{7,11,9},{7,11,1508}
> -,{9,11,317},{10,11,210},{10,11,292},{10,11,533},{11,11,555},{12,11,526},{12,11,
> -
> 607},{13,11,263},{13,11,459},{142,11,271},{134,0,1463},{6,0,772},{6,0,1137},{13
> 9
> -,11,595},{7,0,977},{139,11,66},{138,0,893},{20,0,48},{148,11,48},{5,0,824},{133,
> -0,941},{134,11,295},{7,0,1543},{7,0,1785},{10,0,690},{4,10,106},{139,10,717},{7,
> -
> 0,440},{8,0,230},{139,0,106},{5,10,890},{133,10,988},{6,10,626},{142,10,431},{1
> 0
> -
> ,11,127},{141,11,27},{17,0,32},{10,10,706},{150,10,44},{132,0,216},{137,0,332},{
> -
> 4,10,698},{136,11,119},{139,11,267},{138,10,17},{11,11,526},{11,11,939},{141,1
> 1,
> -
> 290},{7,11,1167},{11,11,934},{13,11,391},{145,11,76},{139,11,39},{134,10,84},{4,
> -0,914},{5,0,800},{133,0,852},{10,0,416},{141,0,115},{7,0,564},{142,0,168},{4,0,
> -
> 918},{133,0,876},{134,0,1764},{152,0,3},{4,0,92},{5,0,274},{7,11,126},{136,11,84
> -},{140,10,498},{136,11,790},{8,0,501},{5,10,986},{6,10,130},{7,10,1582},{8,10,
> -
> 458},{10,10,101},{10,10,318},{138,10,823},{6,11,64},{12,11,377},{141,11,309},{5,
> -0,743},{138,0,851},{4,0,49},{7,0,280},{135,0,1633},{134,0,879},{136,0,47},{7,10,
> -
> 1644},{137,10,129},{132,0,865},{134,0,1202},{9,11,34},{139,11,484},{135,10,997
> },
> -{5,0,272},{5,0,908},{5,0,942},{8,0,197},{9,0,47},{11,0,538},{139,0,742},{6,11,
> -1700},{7,11,26},{7,11,293},{7,11,382},{7,11,1026},{7,11,1087},{7,11,2027},{8,11,
> -24},{8,11,114},{8,11,252},{8,11,727},{8,11,729},{9,11,30},{9,11,199},{9,11,231},
> -
> {9,11,251},{9,11,334},{9,11,361},{9,11,488},{9,11,712},{10,11,55},{10,11,60},{10
> -
> ,11,232},{10,11,332},{10,11,384},{10,11,396},{10,11,504},{10,11,542},{10,11,652}
> -,{11,11,20},{11,11,48},{11,11,207},{11,11,291},{11,11,298},{11,11,342},{11,11,
> -
> 365},{11,11,394},{11,11,620},{11,11,705},{11,11,1017},{12,11,123},{12,11,340},{
> -
> 12,11,406},{12,11,643},{13,11,61},{13,11,269},{13,11,311},{13,11,319},{13,11,48
> 6
> -},{14,11,234},{15,11,62},{15,11,85},{16,11,71},{18,11,119},{148,11,105},{6,0,
> -
> 1455},{150,11,37},{135,10,1927},{135,0,1911},{137,0,891},{7,10,1756},{137,10,9
> 8}
> -,{7,10,1046},{139,10,160},{132,0,761},{6,11,379},{7,11,270},{7,11,1116},{8,11,
> -
> 176},{8,11,183},{9,11,432},{9,11,661},{12,11,247},{12,11,617},{146,11,125},{6,1
> 0
> -,45},{7,10,433},{8,10,129},{9,10,21},{10,10,392},{11,10,79},{12,10,499},{13,10,
> -
> 199},{141,10,451},{4,0,407},{5,11,792},{133,11,900},{132,0,560},{135,0,183},{13,
> -
> 0,490},{7,10,558},{136,10,353},{4,0,475},{6,0,731},{11,0,35},{13,0,71},{13,0,177
> -
> },{14,0,422},{133,10,785},{8,10,81},{9,10,189},{9,10,201},{11,10,478},{11,10,712
> -},{141,10,338},{4,0,418},{4,0,819},{133,10,353},{151,10,26},{4,11,901},{133,11,
> -776},{132,0,575},{7,0,818},{16,0,92},{17,0,14},{17,0,45},{18,0,75},{148,0,18},{6
> -,0,222},{7,0,636},{7,0,1620},{8,0,409},{9,0,693},{139,0,77},{6,10,25},{7,10,855}
> -,{7,10,1258},{144,10,32},{6,0,1880},{6,0,1887},{6,0,1918},{6,0,1924},{9,0,967},{
> -
> 9,0,995},{9,0,1015},{12,0,826},{12,0,849},{12,0,857},{12,0,860},{12,0,886},{12,0
> -
> ,932},{18,0,228},{18,0,231},{146,0,240},{134,0,633},{134,0,1308},{4,11,37},{5,11
> -
> ,334},{135,11,1253},{10,0,86},{4,10,4},{7,10,1118},{7,10,1320},{7,10,1706},{8,10
> -,277},{9,10,622},{11,10,724},{12,10,350},{12,10,397},{13,10,28},{13,10,159},{15,
> -10,89},{18,10,5},{19,10,9},{20,10,34},{150,10,47},{132,11,508},{137,11,448},{12,
> -
> 11,107},{146,11,31},{132,0,817},{134,0,663},{133,0,882},{134,0,914},{132,11,54
> 0}
> -,{132,11,533},{136,11,608},{8,0,885},{138,0,865},{132,0,426},{6,0,58},{7,0,745},
> -{7,0,1969},{8,0,399},{8,0,675},{9,0,479},{9,0,731},{10,0,330},{10,0,593},{10,0,
> -817},{11,0,32},{11,0,133},{11,0,221},{145,0,68},{134,10,255},{7,0,102},{137,0,
> -
> 538},{137,10,216},{7,11,253},{136,11,549},{135,11,912},{9,10,183},{139,10,286},
> {
> -
> 11,10,956},{151,10,3},{8,11,527},{18,11,60},{147,11,24},{4,10,536},{7,10,1141},{
> -
> 10,10,723},{139,10,371},{133,11,920},{7,0,876},{135,10,285},{135,10,560},{132,
> 10
> -
> ,690},{142,11,126},{11,10,33},{12,10,571},{149,10,1},{133,0,566},{9,0,139},{10,0
> -
> ,399},{11,0,469},{12,0,634},{13,0,223},{132,11,483},{6,0,48},{135,0,63},{18,0,12
> -},{7,10,1862},{12,10,491},{12,10,520},{13,10,383},{142,10,244},{135,11,1665},{
> -
> 132,11,448},{9,11,495},{146,11,104},{6,0,114},{7,0,1224},{7,0,1556},{136,0,3},{4
> -
> ,10,190},{133,10,554},{8,0,576},{9,0,267},{133,10,1001},{133,10,446},{133,0,933}
> -
> ,{139,11,1009},{8,11,653},{13,11,93},{147,11,14},{6,0,692},{6,0,821},{134,0,107
> 7
> -
> },{5,11,172},{135,11,801},{138,0,752},{4,0,375},{134,0,638},{134,0,1011},{140,1
> 1
> -,540},{9,0,96},{133,11,260},{139,11,587},{135,10,1231},{12,0,30},{13,0,148},{14,
> -0,87},{14,0,182},{16,0,42},{20,0,70},{132,10,304},{6,0,1398},{7,0,56},{7,0,1989}
> -,{8,0,337},{8,0,738},{9,0,600},{12,0,37},{13,0,447},{142,0,92},{138,0,666},{5,0,
> -394},{7,0,487},{136,0,246},{9,0,437},{6,10,53},{6,10,199},{7,10,1408},{8,10,32},
> -
> {8,10,93},{10,10,397},{10,10,629},{11,10,593},{11,10,763},{13,10,326},{145,10,3
> 5
> -},{134,10,105},{9,0,320},{10,0,506},{138,10,794},{7,11,57},{8,11,167},{8,11,375}
> -
> ,{9,11,82},{9,11,561},{10,11,620},{10,11,770},{11,10,704},{141,10,396},{6,0,100
> 3
> -},{5,10,114},{5,10,255},{141,10,285},{7,0,866},{135,0,1163},{133,11,531},{132,0,
> -
> 328},{7,10,2035},{8,10,19},{9,10,89},{138,10,831},{8,11,194},{136,11,756},{136,
> 0
> -
> ,1000},{5,11,453},{134,11,441},{4,0,101},{5,0,833},{7,0,1171},{136,0,744},{133,0
> -,726},{136,10,746},{138,0,176},{6,0,9},{6,0,397},{7,0,53},{7,0,1742},{10,0,632},
> -
> {11,0,828},{140,0,146},{135,11,22},{145,11,64},{132,0,839},{11,0,417},{12,0,223}
> -,{140,0,265},{4,11,102},{7,11,815},{7,11,1699},{139,11,964},{5,10,955},{136,10,
> -
> 814},{6,0,1931},{6,0,2007},{18,0,246},{146,0,247},{8,0,198},{11,0,29},{140,0,534
> -},{135,0,1771},{6,0,846},{7,11,1010},{11,11,733},{11,11,759},{12,11,563},{13,11,
> -34},{14,11,101},{18,11,45},{146,11,129},{4,0,186},{5,0,157},{8,0,168},{138,0,6},
> -
> {132,11,899},{133,10,56},{148,10,100},{133,0,875},{5,0,773},{5,0,991},{6,0,1635}
> -,{134,0,1788},{6,0,1274},{9,0,477},{141,0,78},{4,0,639},{7,0,111},{8,0,581},{12,
> -0,177},{6,11,52},{9,11,104},{9,11,559},{10,10,4},{10,10,13},{11,10,638},{12,11,
> -
> 308},{19,11,87},{148,10,57},{132,11,604},{4,11,301},{133,10,738},{133,10,758},{
> -134,0,1747},{7,11,1440},{11,11,854},{11,11,872},{11,11,921},{12,11,551},{13,11,
> -472},{142,11,367},{7,0,1364},{7,0,1907},{141,0,158},{134,0,873},{4,0,404},{4,0,
> -
> 659},{7,0,552},{135,0,675},{135,10,1112},{139,10,328},{7,11,508},{137,10,133},{
> -
> 133,0,391},{5,10,110},{6,10,169},{6,10,1702},{7,10,400},{8,10,538},{9,10,184},{9
> -,10,524},{140,10,218},{6,11,310},{7,11,1849},{8,11,72},{8,11,272},{8,11,431},{9,
> -11,12},{9,11,351},{10,11,563},{10,11,630},{10,11,810},{11,11,367},{11,11,599},{
> -
> 11,11,686},{140,11,672},{5,0,540},{6,0,1697},{136,0,668},{132,0,883},{134,0,78},
> -
> {12,0,628},{18,0,79},{6,10,133},{9,10,353},{139,10,993},{6,11,181},{7,11,537},{8
> -
> ,11,64},{9,11,127},{10,11,496},{12,11,510},{141,11,384},{6,10,93},{7,10,1422},{7
> -
> ,10,1851},{8,10,673},{9,10,529},{140,10,43},{137,10,371},{134,0,1460},{134,0,96
> 2
> -},{4,11,244},{135,11,233},{9,10,25},{10,10,467},{138,10,559},{4,10,335},{135,10,
> -942},{133,0,460},{135,11,334},{134,11,1650},{4,0,199},{139,0,34},{5,10,601},{8,
> -10,39},{10,10,773},{11,10,84},{12,10,205},{142,10,1},{133,10,870},{134,0,388},{
> -
> 14,0,474},{148,0,120},{133,11,369},{139,0,271},{4,0,511},{9,0,333},{9,0,379},{10
> -,0,602},{11,0,441},{11,0,723},{11,0,976},{12,0,357},{132,10,181},{134,0,608},{
> -
> 134,10,1652},{22,0,49},{137,11,338},{140,0,988},{134,0,617},{5,0,938},{136,0,70
> 7
> -},{132,10,97},{5,10,147},{6,10,286},{7,10,1362},{141,10,176},{6,0,756},{134,0,
> -
> 1149},{133,11,896},{6,10,375},{7,10,169},{7,10,254},{136,10,780},{134,0,1583},{
> -135,10,1447},{139,0,285},{7,11,1117},{8,11,393},{136,11,539},{135,0,344},{6,0,
> -469},{7,0,1709},{138,0,515},{5,10,629},{135,10,1549},{5,11,4},{5,11,810},{6,11,
> -13},{6,11,538},{6,11,1690},{6,11,1726},{7,11,499},{7,11,1819},{8,11,148},{8,11,
> -
> 696},{8,11,791},{12,11,125},{13,11,54},{143,11,9},{135,11,1268},{137,0,404},{13
> 2
> -,0,500},{5,0,68},{134,0,383},{11,0,216},{139,0,340},{4,11,925},{5,11,803},{8,11,
> -698},{138,11,828},{4,0,337},{6,0,353},{7,0,1934},{8,0,488},{137,0,429},{7,0,236}
> -,{7,0,1795},{8,0,259},{9,0,135},{9,0,177},{9,0,860},{10,0,825},{11,0,115},{11,0,
> -370},{11,0,405},{11,0,604},{12,0,10},{12,0,667},{12,0,669},{13,0,76},{14,0,310},
> -{15,0,76},{15,0,147},{148,0,23},{4,0,15},{4,0,490},{5,0,22},{6,0,244},{7,0,40},{
> -7,0,200},{7,0,906},{7,0,1199},{9,0,616},{10,0,716},{11,0,635},{11,0,801},{140,0,
> -
> 458},{12,0,756},{132,10,420},{134,0,1504},{6,0,757},{133,11,383},{6,0,1266},{13
> 5
> -,0,1735},{5,0,598},{7,0,791},{8,0,108},{9,0,123},{7,10,1570},{140,10,542},{142,
> -11,410},{9,11,660},{138,11,347}
> -};
> -
> -#if defined(__cplusplus) || defined(c_plusplus)
> -} /* extern "C" */
> -#endif
> -
> -#endif /* BROTLI_ENC_STATIC_DICT_LUT_H_ */
> diff --git a/BaseTools/Source/C/BrotliCompress/enc/utf8_util.h
> b/BaseTools/Source/C/BrotliCompress/enc/utf8_util.h
> deleted file mode 100644
> index 8d1cf5555974..000000000000
> --- a/BaseTools/Source/C/BrotliCompress/enc/utf8_util.h
> +++ /dev/null
> @@ -1,32 +0,0 @@
> -/* Copyright 2013 Google Inc. All Rights Reserved.
> -
> - Distributed under MIT license.
> - See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
> -*/
> -
> -/* Heuristics for deciding about the UTF8-ness of strings. */
> -
> -#ifndef BROTLI_ENC_UTF8_UTIL_H_
> -#define BROTLI_ENC_UTF8_UTIL_H_
> -
> -#include "../common/platform.h"
> -#include <brotli/types.h>
> -
> -#if defined(__cplusplus) || defined(c_plusplus)
> -extern "C" {
> -#endif
> -
> -static const double kMinUTF8Ratio = 0.75;
> -
> -/* Returns 1 if at least min_fraction of the bytes between pos and
> - pos + length in the (data, mask) ring-buffer is UTF8-encoded, otherwise
> - returns 0. */
> -BROTLI_INTERNAL BROTLI_BOOL BrotliIsMostlyUTF8(
> - const uint8_t* data, const size_t pos, const size_t mask,
> - const size_t length, const double min_fraction);
> -
> -#if defined(__cplusplus) || defined(c_plusplus)
> -} /* extern "C" */
> -#endif
> -
> -#endif /* BROTLI_ENC_UTF8_UTIL_H_ */
> diff --git a/BaseTools/Source/C/BrotliCompress/enc/write_bits.h
> b/BaseTools/Source/C/BrotliCompress/enc/write_bits.h
> deleted file mode 100644
> index 1269b2895077..000000000000
> --- a/BaseTools/Source/C/BrotliCompress/enc/write_bits.h
> +++ /dev/null
> @@ -1,85 +0,0 @@
> -/* Copyright 2010 Google Inc. All Rights Reserved.
> -
> - Distributed under MIT license.
> - See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
> -*/
> -
> -/* Write bits into a byte array. */
> -
> -#ifndef BROTLI_ENC_WRITE_BITS_H_
> -#define BROTLI_ENC_WRITE_BITS_H_
> -
> -#include "../common/platform.h"
> -#include <brotli/types.h>
> -
> -#if defined(__cplusplus) || defined(c_plusplus)
> -extern "C" {
> -#endif
> -
> -/*#define BIT_WRITER_DEBUG */
> -
> -/* This function writes bits into bytes in increasing addresses, and within
> - a byte least-significant-bit first.
> -
> - The function can write up to 56 bits in one go with WriteBits
> - Example: let's assume that 3 bits (Rs below) have been written already:
> -
> - BYTE-0 BYTE+1 BYTE+2
> -
> - 0000 0RRR 0000 0000 0000 0000
> -
> - Now, we could write 5 or less bits in MSB by just sifting by 3
> - and OR'ing to BYTE-0.
> -
> - For n bits, we take the last 5 bits, OR that with high bits in BYTE-0,
> - and locate the rest in BYTE+1, BYTE+2, etc. */
> -static BROTLI_INLINE void BrotliWriteBits(size_t n_bits,
> - uint64_t bits,
> - size_t* BROTLI_RESTRICT pos,
> - uint8_t* BROTLI_RESTRICT array) {
> -#if defined(BROTLI_LITTLE_ENDIAN)
> - /* This branch of the code can write up to 56 bits at a time,
> - 7 bits are lost by being perhaps already in *p and at least
> - 1 bit is needed to initialize the bit-stream ahead (i.e. if 7
> - bits are in *p and we write 57 bits, then the next write will
> - access a byte that was never initialized). */
> - uint8_t* p = &array[*pos >> 3];
> - uint64_t v = (uint64_t)(*p); /* Zero-extend 8 to 64 bits. */
> - BROTLI_LOG(("WriteBits %2d 0x%08x%08x %10d\n", (int)n_bits,
> - (uint32_t)(bits >> 32), (uint32_t)(bits & 0xFFFFFFFF),
> - (int)*pos));
> - BROTLI_DCHECK((bits >> n_bits) == 0);
> - BROTLI_DCHECK(n_bits <= 56);
> - v |= bits << (*pos & 7);
> - BROTLI_UNALIGNED_STORE64LE(p, v); /* Set some bits. */
> - *pos += n_bits;
> -#else
> - /* implicit & 0xFF is assumed for uint8_t arithmetics */
> - uint8_t* array_pos = &array[*pos >> 3];
> - const size_t bits_reserved_in_first_byte = (*pos & 7);
> - size_t bits_left_to_write;
> - bits <<= bits_reserved_in_first_byte;
> - *array_pos++ |= (uint8_t)bits;
> - for (bits_left_to_write = n_bits + bits_reserved_in_first_byte;
> - bits_left_to_write >= 9;
> - bits_left_to_write -= 8) {
> - bits >>= 8;
> - *array_pos++ = (uint8_t)bits;
> - }
> - *array_pos = 0;
> - *pos += n_bits;
> -#endif
> -}
> -
> -static BROTLI_INLINE void BrotliWriteBitsPrepareStorage(
> - size_t pos, uint8_t* array) {
> - BROTLI_LOG(("WriteBitsPrepareStorage %10d\n", (int)pos));
> - BROTLI_DCHECK((pos & 7) == 0);
> - array[pos >> 3] = 0;
> -}
> -
> -#if defined(__cplusplus) || defined(c_plusplus)
> -} /* extern "C" */
> -#endif
> -
> -#endif /* BROTLI_ENC_WRITE_BITS_H_ */
> diff --git a/BaseTools/Source/C/BrotliCompress/include/brotli/decode.h
> b/BaseTools/Source/C/BrotliCompress/include/brotli/decode.h
> deleted file mode 100644
> index 2cd17250d9d8..000000000000
> --- a/BaseTools/Source/C/BrotliCompress/include/brotli/decode.h
> +++ /dev/null
> @@ -1,344 +0,0 @@
> -/* Copyright 2013 Google Inc. All Rights Reserved.
> -
> - Distributed under MIT license.
> - See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
> -*/
> -
> -/**
> - * @file
> - * API for Brotli decompression.
> - */
> -
> -#ifndef BROTLI_DEC_DECODE_H_
> -#define BROTLI_DEC_DECODE_H_
> -
> -#include <brotli/port.h>
> -#include <brotli/types.h>
> -
> -#if defined(__cplusplus) || defined(c_plusplus)
> -extern "C" {
> -#endif
> -
> -/**
> - * Opaque structure that holds decoder state.
> - *
> - * Allocated and initialized with ::BrotliDecoderCreateInstance.
> - * Cleaned up and deallocated with ::BrotliDecoderDestroyInstance.
> - */
> -typedef struct BrotliDecoderStateStruct BrotliDecoderState;
> -
> -/**
> - * Result type for ::BrotliDecoderDecompress and
> - * ::BrotliDecoderDecompressStream functions.
> - */
> -typedef enum {
> - /** Decoding error, e.g. corrupted input or memory allocation problem. */
> - BROTLI_DECODER_RESULT_ERROR = 0,
> - /** Decoding successfully completed. */
> - BROTLI_DECODER_RESULT_SUCCESS = 1,
> - /** Partially done; should be called again with more input. */
> - BROTLI_DECODER_RESULT_NEEDS_MORE_INPUT = 2,
> - /** Partially done; should be called again with more output. */
> - BROTLI_DECODER_RESULT_NEEDS_MORE_OUTPUT = 3
> -} BrotliDecoderResult;
> -
> -/**
> - * Template that evaluates items of ::BrotliDecoderErrorCode.
> - *
> - * Example: @code {.cpp}
> - * // Log Brotli error code.
> - * switch (brotliDecoderErrorCode) {
> - * #define CASE_(PREFIX, NAME, CODE) \
> - * case BROTLI_DECODER ## PREFIX ## NAME: \
> - * LOG(INFO) << "error code:" << #NAME; \
> - * break;
> - * #define NEWLINE_
> - * BROTLI_DECODER_ERROR_CODES_LIST(CASE_, NEWLINE_)
> - * #undef CASE_
> - * #undef NEWLINE_
> - * default: LOG(FATAL) << "unknown brotli error code";
> - * }
> - * @endcode
> - */
> -#define BROTLI_DECODER_ERROR_CODES_LIST(BROTLI_ERROR_CODE,
> SEPARATOR) \
> - BROTLI_ERROR_CODE(_, NO_ERROR, 0) SEPARATOR \
> - /* Same as BrotliDecoderResult values */ \
> - BROTLI_ERROR_CODE(_, SUCCESS, 1) SEPARATOR \
> - BROTLI_ERROR_CODE(_, NEEDS_MORE_INPUT, 2) SEPARATOR \
> - BROTLI_ERROR_CODE(_, NEEDS_MORE_OUTPUT, 3) SEPARATOR
> \
> - \
> - /* Errors caused by invalid input */ \
> - BROTLI_ERROR_CODE(_ERROR_FORMAT_, EXUBERANT_NIBBLE, -1)
> SEPARATOR \
> - BROTLI_ERROR_CODE(_ERROR_FORMAT_, RESERVED, -2) SEPARATOR
> \
> - BROTLI_ERROR_CODE(_ERROR_FORMAT_, EXUBERANT_META_NIBBLE, -3)
> SEPARATOR \
> - BROTLI_ERROR_CODE(_ERROR_FORMAT_, SIMPLE_HUFFMAN_ALPHABET,
> -4) SEPARATOR \
> - BROTLI_ERROR_CODE(_ERROR_FORMAT_, SIMPLE_HUFFMAN_SAME, -5)
> SEPARATOR \
> - BROTLI_ERROR_CODE(_ERROR_FORMAT_, CL_SPACE, -6) SEPARATOR
> \
> - BROTLI_ERROR_CODE(_ERROR_FORMAT_, HUFFMAN_SPACE, -7)
> SEPARATOR \
> - BROTLI_ERROR_CODE(_ERROR_FORMAT_, CONTEXT_MAP_REPEAT, -8)
> SEPARATOR \
> - BROTLI_ERROR_CODE(_ERROR_FORMAT_, BLOCK_LENGTH_1, -9)
> SEPARATOR \
> - BROTLI_ERROR_CODE(_ERROR_FORMAT_, BLOCK_LENGTH_2, -10)
> SEPARATOR \
> - BROTLI_ERROR_CODE(_ERROR_FORMAT_, TRANSFORM, -11) SEPARATOR
> \
> - BROTLI_ERROR_CODE(_ERROR_FORMAT_, DICTIONARY, -12) SEPARATOR
> \
> - BROTLI_ERROR_CODE(_ERROR_FORMAT_, WINDOW_BITS, -13)
> SEPARATOR \
> - BROTLI_ERROR_CODE(_ERROR_FORMAT_, PADDING_1, -14) SEPARATOR
> \
> - BROTLI_ERROR_CODE(_ERROR_FORMAT_, PADDING_2, -15) SEPARATOR
> \
> - BROTLI_ERROR_CODE(_ERROR_FORMAT_, DISTANCE, -16) SEPARATOR
> \
> - \
> - /* -17..-18 codes are reserved */ \
> - \
> - BROTLI_ERROR_CODE(_ERROR_, DICTIONARY_NOT_SET, -19) SEPARATOR
> \
> - BROTLI_ERROR_CODE(_ERROR_, INVALID_ARGUMENTS, -20) SEPARATOR
> \
> - \
> - /* Memory allocation problems */ \
> - BROTLI_ERROR_CODE(_ERROR_ALLOC_, CONTEXT_MODES, -21)
> SEPARATOR \
> - /* Literal, insert and distance trees together */ \
> - BROTLI_ERROR_CODE(_ERROR_ALLOC_, TREE_GROUPS, -22) SEPARATOR
> \
> - /* -23..-24 codes are reserved for distinct tree groups */ \
> - BROTLI_ERROR_CODE(_ERROR_ALLOC_, CONTEXT_MAP, -25) SEPARATOR
> \
> - BROTLI_ERROR_CODE(_ERROR_ALLOC_, RING_BUFFER_1, -26) SEPARATOR
> \
> - BROTLI_ERROR_CODE(_ERROR_ALLOC_, RING_BUFFER_2, -27) SEPARATOR
> \
> - /* -28..-29 codes are reserved for dynamic ring-buffer allocation */ \
> - BROTLI_ERROR_CODE(_ERROR_ALLOC_, BLOCK_TYPE_TREES, -30)
> SEPARATOR \
> - \
> - /* "Impossible" states */ \
> - BROTLI_ERROR_CODE(_ERROR_, UNREACHABLE, -31)
> -
> -/**
> - * Error code for detailed logging / production debugging.
> - *
> - * See ::BrotliDecoderGetErrorCode and ::BROTLI_LAST_ERROR_CODE.
> - */
> -typedef enum {
> -#define BROTLI_COMMA_ ,
> -#define BROTLI_ERROR_CODE_ENUM_ITEM_(PREFIX, NAME, CODE) \
> - BROTLI_DECODER ## PREFIX ## NAME = CODE
> -
> BROTLI_DECODER_ERROR_CODES_LIST(BROTLI_ERROR_CODE_ENUM_ITEM
> _, BROTLI_COMMA_)
> -} BrotliDecoderErrorCode;
> -#undef BROTLI_ERROR_CODE_ENUM_ITEM_
> -#undef BROTLI_COMMA_
> -
> -/**
> - * The value of the last error code, negative integer.
> - *
> - * All other error code values are in the range
> from ::BROTLI_LAST_ERROR_CODE
> - * to @c -1. There are also 4 other possible non-error codes @c 0 .. @c 3 in
> - * ::BrotliDecoderErrorCode enumeration.
> - */
> -#define BROTLI_LAST_ERROR_CODE
> BROTLI_DECODER_ERROR_UNREACHABLE
> -
> -/** Options to be used with ::BrotliDecoderSetParameter. */
> -typedef enum BrotliDecoderParameter {
> - /**
> - * Disable "canny" ring buffer allocation strategy.
> - *
> - * Ring buffer is allocated according to window size, despite the real size of
> - * the content.
> - */
> - BROTLI_DECODER_PARAM_DISABLE_RING_BUFFER_REALLOCATION = 0,
> - /**
> - * Flag that determines if "Large Window Brotli" is used.
> - */
> - BROTLI_DECODER_PARAM_LARGE_WINDOW = 1
> -} BrotliDecoderParameter;
> -
> -/**
> - * Sets the specified parameter to the given decoder instance.
> - *
> - * @param state decoder instance
> - * @param param parameter to set
> - * @param value new parameter value
> - * @returns ::BROTLI_FALSE if parameter is unrecognized, or value is invalid
> - * @returns ::BROTLI_TRUE if value is accepted
> - */
> -BROTLI_DEC_API BROTLI_BOOL BrotliDecoderSetParameter(
> - BrotliDecoderState* state, BrotliDecoderParameter param, uint32_t
> value);
> -
> -/**
> - * Creates an instance of ::BrotliDecoderState and initializes it.
> - *
> - * The instance can be used once for decoding and should then be
> destroyed with
> - * ::BrotliDecoderDestroyInstance, it cannot be reused for a new decoding
> - * session.
> - *
> - * @p alloc_func and @p free_func @b MUST be both zero or both non-
> zero. In the
> - * case they are both zero, default memory allocators are used. @p opaque
> is
> - * passed to @p alloc_func and @p free_func when they are called. @p
> free_func
> - * has to return without doing anything when asked to free a NULL pointer.
> - *
> - * @param alloc_func custom memory allocation function
> - * @param free_func custom memory free function
> - * @param opaque custom memory manager handle
> - * @returns @c 0 if instance can not be allocated or initialized
> - * @returns pointer to initialized ::BrotliDecoderState otherwise
> - */
> -BROTLI_DEC_API BrotliDecoderState* BrotliDecoderCreateInstance(
> - brotli_alloc_func alloc_func, brotli_free_func free_func, void* opaque);
> -
> -/**
> - * Deinitializes and frees ::BrotliDecoderState instance.
> - *
> - * @param state decoder instance to be cleaned up and deallocated
> - */
> -BROTLI_DEC_API void BrotliDecoderDestroyInstance(BrotliDecoderState*
> state);
> -
> -/**
> - * Performs one-shot memory-to-memory decompression.
> - *
> - * Decompresses the data in @p encoded_buffer into @p decoded_buffer,
> and sets
> - * @p *decoded_size to the decompressed length.
> - *
> - * @param encoded_size size of @p encoded_buffer
> - * @param encoded_buffer compressed data buffer with at least @p
> encoded_size
> - * addressable bytes
> - * @param[in, out] decoded_size @b in: size of @p decoded_buffer; \n
> - * @b out: length of decompressed data written to
> - * @p decoded_buffer
> - * @param decoded_buffer decompressed data destination buffer
> - * @returns ::BROTLI_DECODER_RESULT_ERROR if input is corrupted,
> memory
> - * allocation failed, or @p decoded_buffer is not large enough;
> - * @returns ::BROTLI_DECODER_RESULT_SUCCESS otherwise
> - */
> -BROTLI_DEC_API BrotliDecoderResult BrotliDecoderDecompress(
> - size_t encoded_size,
> - const uint8_t encoded_buffer[BROTLI_ARRAY_PARAM(encoded_size)],
> - size_t* decoded_size,
> - uint8_t decoded_buffer[BROTLI_ARRAY_PARAM(*decoded_size)]);
> -
> -/**
> - * Decompresses the input stream to the output stream.
> - *
> - * The values @p *available_in and @p *available_out must specify the
> number of
> - * bytes addressable at @p *next_in and @p *next_out respectively.
> - * When @p *available_out is @c 0, @p next_out is allowed to be @c NULL.
> - *
> - * After each call, @p *available_in will be decremented by the amount of
> input
> - * bytes consumed, and the @p *next_in pointer will be incremented by
> that
> - * amount. Similarly, @p *available_out will be decremented by the amount
> of
> - * output bytes written, and the @p *next_out pointer will be incremented
> by
> - * that amount.
> - *
> - * @p total_out, if it is not a null-pointer, will be set to the number
> - * of bytes decompressed since the last @p state initialization.
> - *
> - * @note Input is never overconsumed, so @p next_in and @p available_in
> could be
> - * passed to the next consumer after decoding is complete.
> - *
> - * @param state decoder instance
> - * @param[in, out] available_in @b in: amount of available input; \n
> - * @b out: amount of unused input
> - * @param[in, out] next_in pointer to the next compressed byte
> - * @param[in, out] available_out @b in: length of output buffer; \n
> - * @b out: remaining size of output buffer
> - * @param[in, out] next_out output buffer cursor;
> - * can be @c NULL if @p available_out is @c 0
> - * @param[out] total_out number of bytes decompressed so far; can be @c
> NULL
> - * @returns ::BROTLI_DECODER_RESULT_ERROR if input is corrupted,
> memory
> - * allocation failed, arguments were invalid, etc.;
> - * use ::BrotliDecoderGetErrorCode to get detailed error code
> - * @returns ::BROTLI_DECODER_RESULT_NEEDS_MORE_INPUT decoding is
> blocked until
> - * more input data is provided
> - * @returns ::BROTLI_DECODER_RESULT_NEEDS_MORE_OUTPUT decoding
> is blocked until
> - * more output space is provided
> - * @returns ::BROTLI_DECODER_RESULT_SUCCESS decoding is finished, no
> more
> - * input might be consumed and no more output will be produced
> - */
> -BROTLI_DEC_API BrotliDecoderResult BrotliDecoderDecompressStream(
> - BrotliDecoderState* state, size_t* available_in, const uint8_t** next_in,
> - size_t* available_out, uint8_t** next_out, size_t* total_out);
> -
> -/**
> - * Checks if decoder has more output.
> - *
> - * @param state decoder instance
> - * @returns ::BROTLI_TRUE, if decoder has some unconsumed output
> - * @returns ::BROTLI_FALSE otherwise
> - */
> -BROTLI_DEC_API BROTLI_BOOL BrotliDecoderHasMoreOutput(
> - const BrotliDecoderState* state);
> -
> -/**
> - * Acquires pointer to internal output buffer.
> - *
> - * This method is used to make language bindings easier and more efficient:
> - * -# push data to ::BrotliDecoderDecompressStream,
> - * until ::BROTLI_DECODER_RESULT_NEEDS_MORE_OUTPUT is reported
> - * -# use ::BrotliDecoderTakeOutput to peek bytes and copy to language-
> specific
> - * entity
> - *
> - * Also this could be useful if there is an output stream that is able to
> - * consume all the provided data (e.g. when data is saved to file system).
> - *
> - * @attention After every call to ::BrotliDecoderTakeOutput @p *size bytes
> of
> - * output are considered consumed for all consecutive calls to the
> - * instance methods; returned pointer becomes invalidated as well.
> - *
> - * @note Decoder output is not guaranteed to be contiguous. This means
> that
> - * after the size-unrestricted call to ::BrotliDecoderTakeOutput,
> - * immediate next call to ::BrotliDecoderTakeOutput may return more
> data.
> - *
> - * @param state decoder instance
> - * @param[in, out] size @b in: number of bytes caller is ready to take, @c 0
> if
> - * any amount could be handled; \n
> - * @b out: amount of data pointed by returned pointer and
> - * considered consumed; \n
> - * out value is never greater than in value, unless it is @c 0
> - * @returns pointer to output data
> - */
> -BROTLI_DEC_API const uint8_t* BrotliDecoderTakeOutput(
> - BrotliDecoderState* state, size_t* size);
> -
> -/**
> - * Checks if instance has already consumed input.
> - *
> - * Instance that returns ::BROTLI_FALSE is considered "fresh" and could be
> - * reused.
> - *
> - * @param state decoder instance
> - * @returns ::BROTLI_TRUE if decoder has already used some input bytes
> - * @returns ::BROTLI_FALSE otherwise
> - */
> -BROTLI_DEC_API BROTLI_BOOL BrotliDecoderIsUsed(const
> BrotliDecoderState* state);
> -
> -/**
> - * Checks if decoder instance reached the final state.
> - *
> - * @param state decoder instance
> - * @returns ::BROTLI_TRUE if decoder is in a state where it reached the end
> of
> - * the input and produced all of the output
> - * @returns ::BROTLI_FALSE otherwise
> - */
> -BROTLI_DEC_API BROTLI_BOOL BrotliDecoderIsFinished(
> - const BrotliDecoderState* state);
> -
> -/**
> - * Acquires a detailed error code.
> - *
> - * Should be used only after ::BrotliDecoderDecompressStream returns
> - * ::BROTLI_DECODER_RESULT_ERROR.
> - *
> - * See also ::BrotliDecoderErrorString
> - *
> - * @param state decoder instance
> - * @returns last saved error code
> - */
> -BROTLI_DEC_API BrotliDecoderErrorCode BrotliDecoderGetErrorCode(
> - const BrotliDecoderState* state);
> -
> -/**
> - * Converts error code to a c-string.
> - */
> -BROTLI_DEC_API const char*
> BrotliDecoderErrorString(BrotliDecoderErrorCode c);
> -
> -/**
> - * Gets a decoder library version.
> - *
> - * Look at BROTLI_VERSION for more information.
> - */
> -BROTLI_DEC_API uint32_t BrotliDecoderVersion(void);
> -
> -#if defined(__cplusplus) || defined(c_plusplus)
> -} /* extern "C" */
> -#endif
> -
> -#endif /* BROTLI_DEC_DECODE_H_ */
> diff --git a/BaseTools/Source/C/BrotliCompress/include/brotli/encode.h
> b/BaseTools/Source/C/BrotliCompress/include/brotli/encode.h
> deleted file mode 100644
> index b26fa4278c10..000000000000
> --- a/BaseTools/Source/C/BrotliCompress/include/brotli/encode.h
> +++ /dev/null
> @@ -1,427 +0,0 @@
> -/* Copyright 2013 Google Inc. All Rights Reserved.
> -
> - Distributed under MIT license.
> - See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
> -*/
> -
> -/**
> - * @file
> - * API for Brotli compression.
> - */
> -
> -#ifndef BROTLI_ENC_ENCODE_H_
> -#define BROTLI_ENC_ENCODE_H_
> -
> -#include <brotli/port.h>
> -#include <brotli/types.h>
> -
> -#if defined(__cplusplus) || defined(c_plusplus)
> -extern "C" {
> -#endif
> -
> -/** Minimal value for ::BROTLI_PARAM_LGWIN parameter. */
> -#define BROTLI_MIN_WINDOW_BITS 10
> -/**
> - * Maximal value for ::BROTLI_PARAM_LGWIN parameter.
> - *
> - * @note equal to @c BROTLI_MAX_DISTANCE_BITS constant.
> - */
> -#define BROTLI_MAX_WINDOW_BITS 24
> -/**
> - * Maximal value for ::BROTLI_PARAM_LGWIN parameter
> - * in "Large Window Brotli" (32-bit).
> - */
> -#define BROTLI_LARGE_MAX_WINDOW_BITS 30
> -/** Minimal value for ::BROTLI_PARAM_LGBLOCK parameter. */
> -#define BROTLI_MIN_INPUT_BLOCK_BITS 16
> -/** Maximal value for ::BROTLI_PARAM_LGBLOCK parameter. */
> -#define BROTLI_MAX_INPUT_BLOCK_BITS 24
> -/** Minimal value for ::BROTLI_PARAM_QUALITY parameter. */
> -#define BROTLI_MIN_QUALITY 0
> -/** Maximal value for ::BROTLI_PARAM_QUALITY parameter. */
> -#define BROTLI_MAX_QUALITY 11
> -
> -/** Options for ::BROTLI_PARAM_MODE parameter. */
> -typedef enum BrotliEncoderMode {
> - /**
> - * Default compression mode.
> - *
> - * In this mode compressor does not know anything in advance about the
> - * properties of the input.
> - */
> - BROTLI_MODE_GENERIC = 0,
> - /** Compression mode for UTF-8 formatted text input. */
> - BROTLI_MODE_TEXT = 1,
> - /** Compression mode used in WOFF 2.0. */
> - BROTLI_MODE_FONT = 2
> -} BrotliEncoderMode;
> -
> -/** Default value for ::BROTLI_PARAM_QUALITY parameter. */
> -#define BROTLI_DEFAULT_QUALITY 11
> -/** Default value for ::BROTLI_PARAM_LGWIN parameter. */
> -#define BROTLI_DEFAULT_WINDOW 22
> -/** Default value for ::BROTLI_PARAM_MODE parameter. */
> -#define BROTLI_DEFAULT_MODE BROTLI_MODE_GENERIC
> -
> -/** Operations that can be performed by streaming encoder. */
> -typedef enum BrotliEncoderOperation {
> - /**
> - * Process input.
> - *
> - * Encoder may postpone producing output, until it has processed enough
> input.
> - */
> - BROTLI_OPERATION_PROCESS = 0,
> - /**
> - * Produce output for all processed input.
> - *
> - * Actual flush is performed when input stream is depleted and there is
> enough
> - * space in output stream. This means that client should repeat
> - * ::BROTLI_OPERATION_FLUSH operation until @p available_in becomes
> @c 0, and
> - * ::BrotliEncoderHasMoreOutput returns ::BROTLI_FALSE. If output is
> acquired
> - * via ::BrotliEncoderTakeOutput, then operation should be repeated after
> - * output buffer is drained.
> - *
> - * @warning Until flush is complete, client @b SHOULD @b NOT swap,
> - * reduce or extend input stream.
> - *
> - * When flush is complete, output data will be sufficient for decoder to
> - * reproduce all the given input.
> - */
> - BROTLI_OPERATION_FLUSH = 1,
> - /**
> - * Finalize the stream.
> - *
> - * Actual finalization is performed when input stream is depleted and there
> is
> - * enough space in output stream. This means that client should repeat
> - * ::BROTLI_OPERATION_FINISH operation until @p available_in becomes
> @c 0, and
> - * ::BrotliEncoderHasMoreOutput returns ::BROTLI_FALSE. If output is
> acquired
> - * via ::BrotliEncoderTakeOutput, then operation should be repeated after
> - * output buffer is drained.
> - *
> - * @warning Until finalization is complete, client @b SHOULD @b NOT swap,
> - * reduce or extend input stream.
> - *
> - * Helper function ::BrotliEncoderIsFinished checks if stream is finalized and
> - * output fully dumped.
> - *
> - * Adding more input data to finalized stream is impossible.
> - */
> - BROTLI_OPERATION_FINISH = 2,
> - /**
> - * Emit metadata block to stream.
> - *
> - * Metadata is opaque to Brotli: neither encoder, nor decoder processes
> this
> - * data or relies on it. It may be used to pass some extra information from
> - * encoder client to decoder client without interfering with main data
> stream.
> - *
> - * @note Encoder may emit empty metadata blocks internally, to pad
> encoded
> - * stream to byte boundary.
> - *
> - * @warning Until emitting metadata is complete client @b SHOULD @b
> NOT swap,
> - * reduce or extend input stream.
> - *
> - * @warning The whole content of input buffer is considered to be the
> content
> - * of metadata block. Do @b NOT @e append metadata to input
> stream,
> - * before it is depleted with other operations.
> - *
> - * Stream is soft-flushed before metadata block is emitted. Metadata block
> - * @b MUST be no longer than than 16MiB.
> - */
> - BROTLI_OPERATION_EMIT_METADATA = 3
> -} BrotliEncoderOperation;
> -
> -/** Options to be used with ::BrotliEncoderSetParameter. */
> -typedef enum BrotliEncoderParameter {
> - /**
> - * Tune encoder for specific input.
> - *
> - * ::BrotliEncoderMode enumerates all available values.
> - */
> - BROTLI_PARAM_MODE = 0,
> - /**
> - * The main compression speed-density lever.
> - *
> - * The higher the quality, the slower the compression. Range is
> - * from ::BROTLI_MIN_QUALITY to ::BROTLI_MAX_QUALITY.
> - */
> - BROTLI_PARAM_QUALITY = 1,
> - /**
> - * Recommended sliding LZ77 window size.
> - *
> - * Encoder may reduce this value, e.g. if input is much smaller than
> - * window size.
> - *
> - * Window size is `(1 << value) - 16`.
> - *
> - * Range is from ::BROTLI_MIN_WINDOW_BITS
> to ::BROTLI_MAX_WINDOW_BITS.
> - */
> - BROTLI_PARAM_LGWIN = 2,
> - /**
> - * Recommended input block size.
> - *
> - * Encoder may reduce this value, e.g. if input is much smaller than input
> - * block size.
> - *
> - * Range is from ::BROTLI_MIN_INPUT_BLOCK_BITS to
> - * ::BROTLI_MAX_INPUT_BLOCK_BITS.
> - *
> - * @note Bigger input block size allows better compression, but consumes
> more
> - * memory. \n The rough formula of memory used for temporary input
> - * storage is `3 << lgBlock`.
> - */
> - BROTLI_PARAM_LGBLOCK = 3,
> - /**
> - * Flag that affects usage of "literal context modeling" format feature.
> - *
> - * This flag is a "decoding-speed vs compression ratio" trade-off.
> - */
> - BROTLI_PARAM_DISABLE_LITERAL_CONTEXT_MODELING = 4,
> - /**
> - * Estimated total input size for all ::BrotliEncoderCompressStream calls.
> - *
> - * The default value is 0, which means that the total input size is unknown.
> - */
> - BROTLI_PARAM_SIZE_HINT = 5,
> - /**
> - * Flag that determines if "Large Window Brotli" is used.
> - */
> - BROTLI_PARAM_LARGE_WINDOW = 6,
> - /**
> - * Recommended number of postfix bits (NPOSTFIX).
> - *
> - * Encoder may change this value.
> - *
> - * Range is from 0 to ::BROTLI_MAX_NPOSTFIX.
> - */
> - BROTLI_PARAM_NPOSTFIX = 7,
> - /**
> - * Recommended number of direct distance codes (NDIRECT).
> - *
> - * Encoder may change this value.
> - *
> - * Range is from 0 to (15 << NPOSTFIX) in steps of (1 << NPOSTFIX).
> - */
> - BROTLI_PARAM_NDIRECT = 8
> -} BrotliEncoderParameter;
> -
> -/**
> - * Opaque structure that holds encoder state.
> - *
> - * Allocated and initialized with ::BrotliEncoderCreateInstance.
> - * Cleaned up and deallocated with ::BrotliEncoderDestroyInstance.
> - */
> -typedef struct BrotliEncoderStateStruct BrotliEncoderState;
> -
> -/**
> - * Sets the specified parameter to the given encoder instance.
> - *
> - * @param state encoder instance
> - * @param param parameter to set
> - * @param value new parameter value
> - * @returns ::BROTLI_FALSE if parameter is unrecognized, or value is invalid
> - * @returns ::BROTLI_FALSE if value of parameter can not be changed at
> current
> - * encoder state (e.g. when encoding is started, window size might be
> - * already encoded and therefore it is impossible to change it)
> - * @returns ::BROTLI_TRUE if value is accepted
> - * @warning invalid values might be accepted in case they would not break
> - * encoding process.
> - */
> -BROTLI_ENC_API BROTLI_BOOL BrotliEncoderSetParameter(
> - BrotliEncoderState* state, BrotliEncoderParameter param, uint32_t value);
> -
> -/**
> - * Creates an instance of ::BrotliEncoderState and initializes it.
> - *
> - * @p alloc_func and @p free_func @b MUST be both zero or both non-
> zero. In the
> - * case they are both zero, default memory allocators are used. @p opaque
> is
> - * passed to @p alloc_func and @p free_func when they are called. @p
> free_func
> - * has to return without doing anything when asked to free a NULL pointer.
> - *
> - * @param alloc_func custom memory allocation function
> - * @param free_func custom memory free function
> - * @param opaque custom memory manager handle
> - * @returns @c 0 if instance can not be allocated or initialized
> - * @returns pointer to initialized ::BrotliEncoderState otherwise
> - */
> -BROTLI_ENC_API BrotliEncoderState* BrotliEncoderCreateInstance(
> - brotli_alloc_func alloc_func, brotli_free_func free_func, void* opaque);
> -
> -/**
> - * Deinitializes and frees ::BrotliEncoderState instance.
> - *
> - * @param state decoder instance to be cleaned up and deallocated
> - */
> -BROTLI_ENC_API void BrotliEncoderDestroyInstance(BrotliEncoderState*
> state);
> -
> -/**
> - * Calculates the output size bound for the given @p input_size.
> - *
> - * @warning Result is only valid if quality is at least @c 2 and, in
> - * case ::BrotliEncoderCompressStream was used, no flushes
> - * (::BROTLI_OPERATION_FLUSH) were performed.
> - *
> - * @param input_size size of projected input
> - * @returns @c 0 if result does not fit @c size_t
> - */
> -BROTLI_ENC_API size_t BrotliEncoderMaxCompressedSize(size_t
> input_size);
> -
> -/**
> - * Performs one-shot memory-to-memory compression.
> - *
> - * Compresses the data in @p input_buffer into @p encoded_buffer, and
> sets
> - * @p *encoded_size to the compressed length.
> - *
> - * @note If ::BrotliEncoderMaxCompressedSize(@p input_size) returns
> non-zero
> - * value, then output is guaranteed to be no longer than that.
> - *
> - * @param quality quality parameter value,
> e.g. ::BROTLI_DEFAULT_QUALITY
> - * @param lgwin lgwin parameter value, e.g. ::BROTLI_DEFAULT_WINDOW
> - * @param mode mode parameter value, e.g. ::BROTLI_DEFAULT_MODE
> - * @param input_size size of @p input_buffer
> - * @param input_buffer input data buffer with at least @p input_size
> - * addressable bytes
> - * @param[in, out] encoded_size @b in: size of @p encoded_buffer; \n
> - * @b out: length of compressed data written to
> - * @p encoded_buffer, or @c 0 if compression fails
> - * @param encoded_buffer compressed data destination buffer
> - * @returns ::BROTLI_FALSE in case of compression error
> - * @returns ::BROTLI_FALSE if output buffer is too small
> - * @returns ::BROTLI_TRUE otherwise
> - */
> -BROTLI_ENC_API BROTLI_BOOL BrotliEncoderCompress(
> - int quality, int lgwin, BrotliEncoderMode mode, size_t input_size,
> - const uint8_t input_buffer[BROTLI_ARRAY_PARAM(input_size)],
> - size_t* encoded_size,
> - uint8_t encoded_buffer[BROTLI_ARRAY_PARAM(*encoded_size)]);
> -
> -/**
> - * Compresses input stream to output stream.
> - *
> - * The values @p *available_in and @p *available_out must specify the
> number of
> - * bytes addressable at @p *next_in and @p *next_out respectively.
> - * When @p *available_out is @c 0, @p next_out is allowed to be @c NULL.
> - *
> - * After each call, @p *available_in will be decremented by the amount of
> input
> - * bytes consumed, and the @p *next_in pointer will be incremented by
> that
> - * amount. Similarly, @p *available_out will be decremented by the amount
> of
> - * output bytes written, and the @p *next_out pointer will be incremented
> by
> - * that amount.
> - *
> - * @p total_out, if it is not a null-pointer, will be set to the number
> - * of bytes compressed since the last @p state initialization.
> - *
> - *
> - *
> - * Internally workflow consists of 3 tasks:
> - * -# (optionally) copy input data to internal buffer
> - * -# actually compress data and (optionally) store it to internal buffer
> - * -# (optionally) copy compressed bytes from internal buffer to output
> stream
> - *
> - * Whenever all 3 tasks can't move forward anymore, or error occurs, this
> - * method returns the control flow to caller.
> - *
> - * @p op is used to perform flush, finish the stream, or inject metadata
> block.
> - * See ::BrotliEncoderOperation for more information.
> - *
> - * Flushing the stream means forcing encoding of all input passed to encoder
> and
> - * completing the current output block, so it could be fully decoded by
> stream
> - * decoder. To perform flush set @p op to ::BROTLI_OPERATION_FLUSH.
> - * Under some circumstances (e.g. lack of output stream capacity) this
> operation
> - * would require several calls to ::BrotliEncoderCompressStream. The
> method must
> - * be called again until both input stream is depleted and encoder has no
> more
> - * output (see ::BrotliEncoderHasMoreOutput) after the method is called.
> - *
> - * Finishing the stream means encoding of all input passed to encoder and
> - * adding specific "final" marks, so stream decoder could determine that
> stream
> - * is complete. To perform finish set @p op to ::BROTLI_OPERATION_FINISH.
> - * Under some circumstances (e.g. lack of output stream capacity) this
> operation
> - * would require several calls to ::BrotliEncoderCompressStream. The
> method must
> - * be called again until both input stream is depleted and encoder has no
> more
> - * output (see ::BrotliEncoderHasMoreOutput) after the method is called.
> - *
> - * @warning When flushing and finishing, @p op should not change until
> operation
> - * is complete; input stream should not be swapped, reduced or
> - * extended as well.
> - *
> - * @param state encoder instance
> - * @param op requested operation
> - * @param[in, out] available_in @b in: amount of available input; \n
> - * @b out: amount of unused input
> - * @param[in, out] next_in pointer to the next input byte
> - * @param[in, out] available_out @b in: length of output buffer; \n
> - * @b out: remaining size of output buffer
> - * @param[in, out] next_out compressed output buffer cursor;
> - * can be @c NULL if @p available_out is @c 0
> - * @param[out] total_out number of bytes produced so far; can be @c NULL
> - * @returns ::BROTLI_FALSE if there was an error
> - * @returns ::BROTLI_TRUE otherwise
> - */
> -BROTLI_ENC_API BROTLI_BOOL BrotliEncoderCompressStream(
> - BrotliEncoderState* state, BrotliEncoderOperation op, size_t* available_in,
> - const uint8_t** next_in, size_t* available_out, uint8_t** next_out,
> - size_t* total_out);
> -
> -/**
> - * Checks if encoder instance reached the final state.
> - *
> - * @param state encoder instance
> - * @returns ::BROTLI_TRUE if encoder is in a state where it reached the end
> of
> - * the input and produced all of the output
> - * @returns ::BROTLI_FALSE otherwise
> - */
> -BROTLI_ENC_API BROTLI_BOOL
> BrotliEncoderIsFinished(BrotliEncoderState* state);
> -
> -/**
> - * Checks if encoder has more output.
> - *
> - * @param state encoder instance
> - * @returns ::BROTLI_TRUE, if encoder has some unconsumed output
> - * @returns ::BROTLI_FALSE otherwise
> - */
> -BROTLI_ENC_API BROTLI_BOOL BrotliEncoderHasMoreOutput(
> - BrotliEncoderState* state);
> -
> -/**
> - * Acquires pointer to internal output buffer.
> - *
> - * This method is used to make language bindings easier and more efficient:
> - * -# push data to ::BrotliEncoderCompressStream,
> - * until ::BrotliEncoderHasMoreOutput returns BROTL_TRUE
> - * -# use ::BrotliEncoderTakeOutput to peek bytes and copy to language-
> specific
> - * entity
> - *
> - * Also this could be useful if there is an output stream that is able to
> - * consume all the provided data (e.g. when data is saved to file system).
> - *
> - * @attention After every call to ::BrotliEncoderTakeOutput @p *size bytes
> of
> - * output are considered consumed for all consecutive calls to the
> - * instance methods; returned pointer becomes invalidated as well.
> - *
> - * @note Encoder output is not guaranteed to be contiguous. This means
> that
> - * after the size-unrestricted call to ::BrotliEncoderTakeOutput,
> - * immediate next call to ::BrotliEncoderTakeOutput may return more
> data.
> - *
> - * @param state encoder instance
> - * @param[in, out] size @b in: number of bytes caller is ready to take, @c 0
> if
> - * any amount could be handled; \n
> - * @b out: amount of data pointed by returned pointer and
> - * considered consumed; \n
> - * out value is never greater than in value, unless it is @c 0
> - * @returns pointer to output data
> - */
> -BROTLI_ENC_API const uint8_t* BrotliEncoderTakeOutput(
> - BrotliEncoderState* state, size_t* size);
> -
> -
> -/**
> - * Gets an encoder library version.
> - *
> - * Look at BROTLI_VERSION for more information.
> - */
> -BROTLI_ENC_API uint32_t BrotliEncoderVersion(void);
> -
> -#if defined(__cplusplus) || defined(c_plusplus)
> -} /* extern "C" */
> -#endif
> -
> -#endif /* BROTLI_ENC_ENCODE_H_ */
> diff --git a/BaseTools/Source/C/BrotliCompress/include/brotli/port.h
> b/BaseTools/Source/C/BrotliCompress/include/brotli/port.h
> deleted file mode 100644
> index 6e439987b547..000000000000
> --- a/BaseTools/Source/C/BrotliCompress/include/brotli/port.h
> +++ /dev/null
> @@ -1,274 +0,0 @@
> -/* Copyright 2016 Google Inc. All Rights Reserved.
> -
> - Distributed under MIT license.
> - See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
> -*/
> -
> -/* Macros for compiler / platform specific API declarations. */
> -
> -#ifndef BROTLI_COMMON_PORT_H_
> -#define BROTLI_COMMON_PORT_H_
> -
> -/* The following macros were borrowed from
> https://github.com/nemequ/hedley
> - * with permission of original author - Evan Nemerson
> <evan@nemerson.com> */
> -
> -/* >>> >>> >>> hedley macros */
> -
> -#define BROTLI_MAKE_VERSION(major, minor, revision) \
> - (((major) * 1000000) + ((minor) * 1000) + (revision))
> -
> -#if defined(__GNUC__) && defined(__GNUC_PATCHLEVEL__)
> -#define BROTLI_GNUC_VERSION \
> - BROTLI_MAKE_VERSION(__GNUC__, __GNUC_MINOR__,
> __GNUC_PATCHLEVEL__)
> -#elif defined(__GNUC__)
> -#define BROTLI_GNUC_VERSION BROTLI_MAKE_VERSION(__GNUC__,
> __GNUC_MINOR__, 0)
> -#endif
> -
> -#if defined(BROTLI_GNUC_VERSION)
> -#define BROTLI_GNUC_VERSION_CHECK(major, minor, patch) \
> - (BROTLI_GNUC_VERSION >= BROTLI_MAKE_VERSION(major, minor,
> patch))
> -#else
> -#define BROTLI_GNUC_VERSION_CHECK(major, minor, patch) (0)
> -#endif
> -
> -#if defined(_MSC_FULL_VER) && (_MSC_FULL_VER >= 140000000)
> -#define BROTLI_MSVC_VERSION \
> - BROTLI_MAKE_VERSION((_MSC_FULL_VER / 10000000), \
> - (_MSC_FULL_VER % 10000000) / 100000, \
> - (_MSC_FULL_VER % 100000) / 100)
> -#elif defined(_MSC_FULL_VER)
> -#define BROTLI_MSVC_VERSION \
> - BROTLI_MAKE_VERSION((_MSC_FULL_VER / 1000000), \
> - (_MSC_FULL_VER % 1000000) / 10000, \
> - (_MSC_FULL_VER % 10000) / 10)
> -#elif defined(_MSC_VER)
> -#define BROTLI_MSVC_VERSION \
> - BROTLI_MAKE_VERSION(_MSC_VER / 100, _MSC_VER % 100, 0)
> -#endif
> -
> -#if !defined(_MSC_VER)
> -#define BROTLI_MSVC_VERSION_CHECK(major, minor, patch) (0)
> -#elif defined(_MSC_VER) && (_MSC_VER >= 1400)
> -#define BROTLI_MSVC_VERSION_CHECK(major, minor, patch) \
> - (_MSC_FULL_VER >= ((major * 10000000) + (minor * 100000) + (patch)))
> -#elif defined(_MSC_VER) && (_MSC_VER >= 1200)
> -#define BROTLI_MSVC_VERSION_CHECK(major, minor, patch) \
> - (_MSC_FULL_VER >= ((major * 1000000) + (minor * 10000) + (patch)))
> -#else
> -#define BROTLI_MSVC_VERSION_CHECK(major, minor, patch) \
> - (_MSC_VER >= ((major * 100) + (minor)))
> -#endif
> -
> -#if defined(__INTEL_COMPILER) && defined(__INTEL_COMPILER_UPDATE)
> -#define BROTLI_INTEL_VERSION \
> - BROTLI_MAKE_VERSION(__INTEL_COMPILER / 100, \
> - __INTEL_COMPILER % 100, \
> - __INTEL_COMPILER_UPDATE)
> -#elif defined(__INTEL_COMPILER)
> -#define BROTLI_INTEL_VERSION \
> - BROTLI_MAKE_VERSION(__INTEL_COMPILER / 100, __INTEL_COMPILER %
> 100, 0)
> -#endif
> -
> -#if defined(BROTLI_INTEL_VERSION)
> -#define BROTLI_INTEL_VERSION_CHECK(major, minor, patch) \
> - (BROTLI_INTEL_VERSION >= BROTLI_MAKE_VERSION(major, minor, patch))
> -#else
> -#define BROTLI_INTEL_VERSION_CHECK(major, minor, patch) (0)
> -#endif
> -
> -#if defined(__PGI) && \
> - defined(__PGIC__) && defined(__PGIC_MINOR__) &&
> defined(__PGIC_PATCHLEVEL__)
> -#define BROTLI_PGI_VERSION \
> - BROTLI_MAKE_VERSION(__PGIC__, __PGIC_MINOR__,
> __PGIC_PATCHLEVEL__)
> -#endif
> -
> -#if defined(BROTLI_PGI_VERSION)
> -#define BROTLI_PGI_VERSION_CHECK(major, minor, patch) \
> - (BROTLI_PGI_VERSION >= BROTLI_MAKE_VERSION(major, minor, patch))
> -#else
> -#define BROTLI_PGI_VERSION_CHECK(major, minor, patch) (0)
> -#endif
> -
> -#if defined(__SUNPRO_C) && (__SUNPRO_C > 0x1000)
> -#define BROTLI_SUNPRO_VERSION \
> - BROTLI_MAKE_VERSION( \
> - (((__SUNPRO_C >> 16) & 0xf) * 10) + ((__SUNPRO_C >> 12) & 0xf), \
> - (((__SUNPRO_C >> 8) & 0xf) * 10) + ((__SUNPRO_C >> 4) & 0xf), \
> - (__SUNPRO_C & 0xf) * 10)
> -#elif defined(__SUNPRO_C)
> -#define BROTLI_SUNPRO_VERSION \
> - BROTLI_MAKE_VERSION((__SUNPRO_C >> 8) & 0xf, \
> - (__SUNPRO_C >> 4) & 0xf, \
> - (__SUNPRO_C) & 0xf)
> -#elif defined(__SUNPRO_CC) && (__SUNPRO_CC > 0x1000)
> -#define BROTLI_SUNPRO_VERSION \
> - BROTLI_MAKE_VERSION( \
> - (((__SUNPRO_CC >> 16) & 0xf) * 10) + ((__SUNPRO_CC >> 12) & 0xf), \
> - (((__SUNPRO_CC >> 8) & 0xf) * 10) + ((__SUNPRO_CC >> 4) & 0xf), \
> - (__SUNPRO_CC & 0xf) * 10)
> -#elif defined(__SUNPRO_CC)
> -#define BROTLI_SUNPRO_VERSION \
> - BROTLI_MAKE_VERSION((__SUNPRO_CC >> 8) & 0xf, \
> - (__SUNPRO_CC >> 4) & 0xf, \
> - (__SUNPRO_CC) & 0xf)
> -#endif
> -
> -#if defined(BROTLI_SUNPRO_VERSION)
> -#define BROTLI_SUNPRO_VERSION_CHECK(major, minor, patch) \
> - (BROTLI_SUNPRO_VERSION >= BROTLI_MAKE_VERSION(major, minor,
> patch))
> -#else
> -#define BROTLI_SUNPRO_VERSION_CHECK(major, minor, patch) (0)
> -#endif
> -
> -#if defined(__CC_ARM) && defined(__ARMCOMPILER_VERSION)
> -#define BROTLI_ARM_VERSION \
> - BROTLI_MAKE_VERSION((__ARMCOMPILER_VERSION / 1000000), \
> - (__ARMCOMPILER_VERSION % 1000000) / 10000, \
> - (__ARMCOMPILER_VERSION % 10000) / 100)
> -#elif defined(__CC_ARM) && defined(__ARMCC_VERSION)
> -#define BROTLI_ARM_VERSION \
> - BROTLI_MAKE_VERSION((__ARMCC_VERSION / 1000000), \
> - (__ARMCC_VERSION % 1000000) / 10000, \
> - (__ARMCC_VERSION % 10000) / 100)
> -#endif
> -
> -#if defined(BROTLI_ARM_VERSION)
> -#define BROTLI_ARM_VERSION_CHECK(major, minor, patch) \
> - (BROTLI_ARM_VERSION >= BROTLI_MAKE_VERSION(major, minor, patch))
> -#else
> -#define BROTLI_ARM_VERSION_CHECK(major, minor, patch) (0)
> -#endif
> -
> -#if defined(__ibmxl__)
> -#define BROTLI_IBM_VERSION \
> - BROTLI_MAKE_VERSION(__ibmxl_version__, \
> - __ibmxl_release__, \
> - __ibmxl_modification__)
> -#elif defined(__xlC__) && defined(__xlC_ver__)
> -#define BROTLI_IBM_VERSION \
> - BROTLI_MAKE_VERSION(__xlC__ >> 8, __xlC__ & 0xff, (__xlC_ver__ >> 8)
> & 0xff)
> -#elif defined(__xlC__)
> -#define BROTLI_IBM_VERSION BROTLI_MAKE_VERSION(__xlC__ >> 8,
> __xlC__ & 0xff, 0)
> -#endif
> -
> -#if defined(BROTLI_IBM_VERSION)
> -#define BROTLI_IBM_VERSION_CHECK(major, minor, patch) \
> - (BROTLI_IBM_VERSION >= BROTLI_MAKE_VERSION(major, minor, patch))
> -#else
> -#define BROTLI_IBM_VERSION_CHECK(major, minor, patch) (0)
> -#endif
> -
> -#if defined(__TI_COMPILER_VERSION__)
> -#define BROTLI_TI_VERSION \
> - BROTLI_MAKE_VERSION((__TI_COMPILER_VERSION__ / 1000000), \
> - (__TI_COMPILER_VERSION__ % 1000000) / 1000, \
> - (__TI_COMPILER_VERSION__ % 1000))
> -#endif
> -
> -#if defined(BROTLI_TI_VERSION)
> -#define BROTLI_TI_VERSION_CHECK(major, minor, patch) \
> - (BROTLI_TI_VERSION >= BROTLI_MAKE_VERSION(major, minor, patch))
> -#else
> -#define BROTLI_TI_VERSION_CHECK(major, minor, patch) (0)
> -#endif
> -
> -#if defined(__IAR_SYSTEMS_ICC__)
> -#if __VER__ > 1000
> -#define BROTLI_IAR_VERSION \
> - BROTLI_MAKE_VERSION((__VER__ / 1000000), \
> - (__VER__ / 1000) % 1000, \
> - (__VER__ % 1000))
> -#else
> -#define BROTLI_IAR_VERSION BROTLI_MAKE_VERSION(VER / 100,
> __VER__ % 100, 0)
> -#endif
> -#endif
> -
> -#if defined(BROTLI_IAR_VERSION)
> -#define BROTLI_IAR_VERSION_CHECK(major, minor, patch) \
> - (BROTLI_IAR_VERSION >= BROTLI_MAKE_VERSION(major, minor, patch))
> -#else
> -#define BROTLI_IAR_VERSION_CHECK(major, minor, patch) (0)
> -#endif
> -
> -#if defined(__TINYC__)
> -#define BROTLI_TINYC_VERSION \
> - BROTLI_MAKE_VERSION(__TINYC__ / 1000, (__TINYC__ / 100) % 10,
> __TINYC__ % 100)
> -#endif
> -
> -#if defined(BROTLI_TINYC_VERSION)
> -#define BROTLI_TINYC_VERSION_CHECK(major, minor, patch) \
> - (BROTLI_TINYC_VERSION >= BROTLI_MAKE_VERSION(major, minor, patch))
> -#else
> -#define BROTLI_TINYC_VERSION_CHECK(major, minor, patch) (0)
> -#endif
> -
> -#if defined(__has_attribute)
> -#define BROTLI_GNUC_HAS_ATTRIBUTE(attribute, major, minor, patch) \
> - __has_attribute(attribute)
> -#else
> -#define BROTLI_GNUC_HAS_ATTRIBUTE(attribute, major, minor, patch) \
> - BROTLI_GNUC_VERSION_CHECK(major, minor, patch)
> -#endif
> -
> -#if defined(__has_builtin)
> -#define BROTLI_GNUC_HAS_BUILTIN(builtin, major, minor, patch) \
> - __has_builtin(builtin)
> -#else
> -#define BROTLI_GNUC_HAS_BUILTIN(builtin, major, minor, patch) \
> - BROTLI_GNUC_VERSION_CHECK(major, minor, patch)
> -#endif
> -
> -#if defined(_WIN32) || defined(__CYGWIN__)
> -#define BROTLI_PUBLIC
> -#elif BROTLI_GNUC_VERSION_CHECK(3, 3, 0) || \
> - BROTLI_TI_VERSION_CHECK(8, 0, 0) || \
> - BROTLI_INTEL_VERSION_CHECK(16, 0, 0) || \
> - BROTLI_ARM_VERSION_CHECK(4, 1, 0) || \
> - BROTLI_IBM_VERSION_CHECK(13, 1, 0) || \
> - BROTLI_SUNPRO_VERSION_CHECK(5, 11, 0) || \
> - (BROTLI_TI_VERSION_CHECK(7, 3, 0) && \
> - defined(__TI_GNU_ATTRIBUTE_SUPPORT__) && defined(__TI_EABI__))
> -#define BROTLI_PUBLIC __attribute__ ((visibility ("default")))
> -#else
> -#define BROTLI_PUBLIC
> -#endif
> -
> -#if defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) &&
> \
> - !defined(__STDC_NO_VLA__) && !defined(__cplusplus) && \
> - !defined(__PGI) && !defined(__PGIC__) && !defined(__TINYC__)
> -#define BROTLI_ARRAY_PARAM(name) (name)
> -#else
> -#define BROTLI_ARRAY_PARAM(name)
> -#endif
> -
> -/* <<< <<< <<< end of hedley macros. */
> -
> -#if defined(BROTLI_SHARED_COMPILATION)
> -#if defined(_WIN32)
> -#if defined(BROTLICOMMON_SHARED_COMPILATION)
> -#define BROTLI_COMMON_API __declspec(dllexport)
> -#else
> -#define BROTLI_COMMON_API __declspec(dllimport)
> -#endif /* BROTLICOMMON_SHARED_COMPILATION */
> -#if defined(BROTLIDEC_SHARED_COMPILATION)
> -#define BROTLI_DEC_API __declspec(dllexport)
> -#else
> -#define BROTLI_DEC_API __declspec(dllimport)
> -#endif /* BROTLIDEC_SHARED_COMPILATION */
> -#if defined(BROTLIENC_SHARED_COMPILATION)
> -#define BROTLI_ENC_API __declspec(dllexport)
> -#else
> -#define BROTLI_ENC_API __declspec(dllimport)
> -#endif /* BROTLIENC_SHARED_COMPILATION */
> -#else /* _WIN32 */
> -#define BROTLI_COMMON_API BROTLI_PUBLIC
> -#define BROTLI_DEC_API BROTLI_PUBLIC
> -#define BROTLI_ENC_API BROTLI_PUBLIC
> -#endif /* _WIN32 */
> -#else /* BROTLI_SHARED_COMPILATION */
> -#define BROTLI_COMMON_API
> -#define BROTLI_DEC_API
> -#define BROTLI_ENC_API
> -#endif
> -
> -#endif /* BROTLI_COMMON_PORT_H_ */
> diff --git a/BaseTools/Source/C/BrotliCompress/include/brotli/types.h
> b/BaseTools/Source/C/BrotliCompress/include/brotli/types.h
> deleted file mode 100644
> index 513e701af96d..000000000000
> --- a/BaseTools/Source/C/BrotliCompress/include/brotli/types.h
> +++ /dev/null
> @@ -1,83 +0,0 @@
> -/* Copyright 2013 Google Inc. All Rights Reserved.
> -
> - Distributed under MIT license.
> - See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
> -*/
> -
> -/**
> - * @file
> - * Common types used in decoder and encoder API.
> - */
> -
> -#ifndef BROTLI_COMMON_TYPES_H_
> -#define BROTLI_COMMON_TYPES_H_
> -
> -#include <stddef.h> /* for size_t */
> -
> -#if defined(_MSC_VER) && (_MSC_VER < 1600)
> -typedef __int8 int8_t;
> -typedef unsigned __int8 uint8_t;
> -typedef __int16 int16_t;
> -typedef unsigned __int16 uint16_t;
> -typedef __int32 int32_t;
> -typedef unsigned __int32 uint32_t;
> -typedef unsigned __int64 uint64_t;
> -typedef __int64 int64_t;
> -#else
> -#include <stdint.h>
> -#endif /* defined(_MSC_VER) && (_MSC_VER < 1600) */
> -
> -/**
> - * A portable @c bool replacement.
> - *
> - * ::BROTLI_BOOL is a "documentation" type: actually it is @c int, but in API it
> - * denotes a type, whose only values are ::BROTLI_TRUE
> and ::BROTLI_FALSE.
> - *
> - * ::BROTLI_BOOL values passed to Brotli should either be ::BROTLI_TRUE or
> - * ::BROTLI_FALSE, or be a result of ::TO_BROTLI_BOOL macros.
> - *
> - * ::BROTLI_BOOL values returned by Brotli should not be tested for equality
> - * with @c true, @c false, ::BROTLI_TRUE, ::BROTLI_FALSE, but rather should
> be
> - * evaluated, for example: @code{.cpp}
> - * if (SomeBrotliFunction(encoder, BROTLI_TRUE) &&
> - * !OtherBrotliFunction(decoder, BROTLI_FALSE)) {
> - * bool x = !!YetAnotherBrotliFunction(encoder, TO_BROLTI_BOOL(2 * 2 ==
> 4));
> - * DoSomething(x);
> - * }
> - * @endcode
> - */
> -#define BROTLI_BOOL int
> -/** Portable @c true replacement. */
> -#define BROTLI_TRUE 1
> -/** Portable @c false replacement. */
> -#define BROTLI_FALSE 0
> -/** @c bool to ::BROTLI_BOOL conversion macros. */
> -#define TO_BROTLI_BOOL(X) (!!(X) ? BROTLI_TRUE : BROTLI_FALSE)
> -
> -#define BROTLI_MAKE_UINT64_T(high, low) ((((uint64_t)(high)) << 32) |
> low)
> -
> -#define BROTLI_UINT32_MAX (~((uint32_t)0))
> -#define BROTLI_SIZE_MAX (~((size_t)0))
> -
> -/**
> - * Allocating function pointer type.
> - *
> - * @param opaque custom memory manager handle provided by client
> - * @param size requested memory region size; can not be @c 0
> - * @returns @c 0 in the case of failure
> - * @returns a valid pointer to a memory region of at least @p size bytes
> - * long otherwise
> - */
> -typedef void* (*brotli_alloc_func)(void* opaque, size_t size);
> -
> -/**
> - * Deallocating function pointer type.
> - *
> - * This function @b SHOULD do nothing if @p address is @c 0.
> - *
> - * @param opaque custom memory manager handle provided by client
> - * @param address memory region pointer returned by ::brotli_alloc_func,
> or @c 0
> - */
> -typedef void (*brotli_free_func)(void* opaque, void* address);
> -
> -#endif /* BROTLI_COMMON_TYPES_H_ */
> diff --git a/BaseTools/Source/C/BrotliCompress/tools/brotli.md
> b/BaseTools/Source/C/BrotliCompress/tools/brotli.md
> deleted file mode 100644
> index c029869bced7..000000000000
> --- a/BaseTools/Source/C/BrotliCompress/tools/brotli.md
> +++ /dev/null
> @@ -1,107 +0,0 @@
> -brotli(1) -- brotli, unbrotli - compress or decompress files
> -
> ==========================================================
> ======
> -
> -SYNOPSIS
> ---------
> -
> -`brotli` [*OPTION|FILE*]...
> -
> -`unbrotli` is equivalent to `brotli --decompress`
> -
> -DESCRIPTION
> ------------
> -`brotli` is a generic-purpose lossless compression algorithm that compresses
> -data using a combination of a modern variant of the **LZ77** algorithm,
> Huffman
> -coding and 2-nd order context modeling, with a compression ratio
> comparable to
> -the best currently available general-purpose compression methods. It is
> similar
> -in speed with deflate but offers more dense compression.
> -
> -`brotli` command line syntax similar to `gzip (1)` and `zstd (1)`.
> -Unlike `gzip (1)`, source files are preserved by default. It is possible to
> -remove them after processing by using the `--rm` _option_.
> -
> -Arguments that look like "`--name`" or "`--name=value`" are _options_.
> Every
> -_option_ has a short form "`-x`" or "`-x value`". Multiple short form
> _options_
> -could be coalesced:
> -
> -* "`--decompress --stdout --suffix=.b`" works the same as
> -* "`-d -s -S .b`" and
> -* "`-dsS .b`"
> -
> -`brotli` has 3 operation modes:
> -
> -* default mode is compression;
> -* `--decompress` option activates decompression mode;
> -* `--test` option switches to integrity test mode; this option is equivalent to
> - "`--decompress --stdout`" except that the decompressed data is discarded
> - instead of being written to standard output.
> -
> -Every non-option argument is a _file_ entry. If no _files_ are given or _file_
> -is "`-`", `brotli` reads from standard input. All arguments after "`--`" are
> -_file_ entries.
> -
> -Unless `--stdout` or `--output` is specified, _files_ are written to a new file
> -whose name is derived from the source _file_ name:
> -
> -* when compressing, a suffix is appended to the source filename to
> - get the target filename
> -* when decompressing, a suffix is removed from the source filename to
> - get the target filename
> -
> -Default suffix is `.br`, but it could be specified with `--suffix` option.
> -
> -Conflicting or duplicate _options_ are not allowed.
> -
> -OPTIONS
> --------
> -
> -* `-#`:
> - compression level (0-9); bigger values cause denser, but slower
> compression
> -* `-c`, `--stdout`:
> - write on standard output
> -* `-d`, `--decompress`:
> - decompress mode
> -* `-f`, `--force`:
> - force output file overwrite
> -* `-h`, `--help`:
> - display this help and exit
> -* `-j`, `--rm`:
> - remove source file(s); `gzip (1)`-like behaviour
> -* `-k`, `--keep`:
> - keep source file(s); `zstd (1)`-like behaviour
> -* `-n`, `--no-copy-stat`:
> - do not copy source file(s) attributes
> -* `-o FILE`, `--output=FILE`
> - output file; valid only if there is a single input entry
> -* `-q NUM`, `--quality=NUM`:
> - compression level (0-11); bigger values cause denser, but slower
> compression
> -* `-t`, `--test`:
> - test file integrity mode
> -* `-v`, `--verbose`:
> - increase output verbosity
> -* `-w NUM`, `--lgwin=NUM`:
> - set LZ77 window size (0, 10-24) (default: 22); window size is
> - `(2**NUM - 16)`; 0 lets compressor decide over the optimal value; bigger
> - windows size improve density; decoder might require up to window size
> - memory to operate
> -* `-S SUF`, `--suffix=SUF`:
> - output file suffix (default: `.br`)
> -* `-V`, `--version`:
> - display version and exit
> -* `-Z`, `--best`:
> - use best compression level (default); same as "`-q 11`"
> -
> -SEE ALSO
> ---------
> -
> -`brotli` file format is defined in
> -[RFC 7932](https://www.ietf.org/rfc/rfc7932.txt).
> -
> -`brotli` is open-sourced under the
> -[MIT License](https://opensource.org/licenses/MIT).
> -
> -Mailing list: https://groups.google.com/forum/#!forum/brotli
> -
> -BUGS
> -----
> -Report bugs at: https://github.com/google/brotli/issues
> diff --git a/Readme.md b/Readme.md
> index 4a4775db85fd..31a56b4913d5 100644
> --- a/Readme.md
> +++ b/Readme.md
> @@ -57,7 +57,7 @@ for the UEFI and PI specifications from www.uefi.org.
> The majority of the content in the EDK II open source project uses a
> [BSD-2-Clause Plus Patent License](License.txt). The EDK II open source
> project
> contains the following components that are covered by additional licenses:
> -*
> [BaseTools/Source/C/BrotliCompress](BaseTools/Source/C/BrotliCompress/
> LICENSE)
> +*
> [BaseTools/Source/C/BrotliCompress/brotli](https://github.com/google/bro
> tli/blob/master/LICENSE)
> *
> [MdeModulePkg/Library/BrotliCustomDecompressLib/brotli](https://github.
> com/google/brotli/blob/master/LICENSE)
> *
> [BaseTools/Source/C/LzmaCompress](BaseTools/Source/C/LzmaCompress/L
> ZMA-SDK-README.txt)
> *
> [MdeModulePkg/Library/LzmaCustomDecompressLib](MdeModulePkg/Libr
> ary/LzmaCustomDecompressLib/LZMA-SDK-README.txt)
> @@ -200,6 +200,7 @@ as possible as we can. Currently EDK II contains the
> following submodules
> - CryptoPkg/Library/OpensslLib/openssl
> - ArmPkg/Library/ArmSoftFloatLib/berkeley-softfloat-3
> - MdeModulePkg/Library/BrotliCustomDecompressLib/brotli
> +- BaseTools/Source/C/BrotliCompress/brotli
>
> ArmSoftFloatLib is actually required by OpensslLib. It's inevitable
> in openssl-1.1.1 (since stable201905) for floating point parameter
> --
> 2.18.0.windows.1
>
>
>
^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2020-03-09 5:30 UTC | newest]
Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2020-03-02 3:19 [PATCH 0/2] Use submodule way to access brotli Zhang, Shenglei
2020-03-02 3:19 ` [PATCH 1/2] MdeModulePkg/BrotliCustomDecompressLib: Make brotli a submodule Zhang, Shenglei
2020-03-02 3:19 ` [PATCH 2/2] BaseTools: " Zhang, Shenglei
2020-03-05 8:03 ` Bob Feng
[not found] ` <15F959C75C03A288.12001@groups.io>
2020-03-05 8:28 ` [edk2-devel] " Bob Feng
2020-03-09 5:30 ` Zhang, Shenglei
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox